変奏現実

パソコンやMMORPGのことなどを思いつくまま・・・記載されている会社名・製品名・システム名などは、各社の商標、または登録商標です。

この画面は、簡易表示です

インターネット

【今更だけど】.Net4.5のPictureBoxのプロパティ・ウインドウにAllowDropが無い

WPFではDrop=Trueで何でもDrag & Drop  OK。
※と云うか、WPFはいつもそんな感じの大雑把な作りなので、実用的な実装をしようとすると、ひどい目に遭う。
でもWindows Formでも同様にControl.AllowDrop = Trueにすれば良いんだけど、

なぜかPictureBoxだけプロパティ・ウインドウにAllowDropが無い。

IntelliSenseでもプロパティの候補にあがらない。
なので、
C#のソースに、
picturebox.AllowDrop = true;
と書いて実行してみると
DragEnterに処理が渡ってくるし、e.Effect = DragDropEffects.Copyとか設定しておけば、ちゃんと、DrapDropまでやってくるからOKなのかといえば、
このAllowDropの部分を選択してメニューから「次候補」を選択してもプロパティのドロップダウンリストが出ない。
そう内部でエラーが連発している気がする。
この状況を続けるとVS内部のストレスが溜まって、終いには暴走しそうな気配がする。
 
ま、原因はよく判らないけど、
どこかの国の誰かさんが
何かの都合で、PictureBox のAllowDropをオーバーライトした際に
public class PictureBox
{
・・・
[Browsable(false)]
public overwrite bool AllowDrop { get ; set ; }
・・・
}
とやらかしたらしい。
 
ただ、
PictureBoxのAllowDropを見えなくして、
どこかの会社の(ボクみたいな)そそっかしい奴に、どこかの会社の高価なユーザコントロールを購入させようともくろんでいたのかもしれない。
と思う方が一般的かもしれない。
 
対策としては、不都合を解消するためのカスタム・コントロールを作り、

using System.ComponentModel;
using System.Windows.Forms;

namespace Custom.Control
{
class ccPictureBox : PictureBox
{
[Browsable(true)]
public override bool AllowDrop { get ; set ; }
}
}

※オーバーライドするので他の属性が気になるならデザイナーのボタンのプロパティウインドウの内容を見ながら、 [DefaultValue(false), Browsable(true), Description(“コントロールが、ユーザがドラッグしたデータを受け入れできるかを示します。”), Category(“動作”)] と書いてもいいだろう、でも結果は同じだ。
ツールボックスに追加された、ccPictureBox をフォームに貼り付ければOK。
ただし、IntelliSenseのため作り直したVS2013のパーザー(文法解析)ルーチンは、あからさまに正しくないコードに対して脆弱性が高く、すでにccPictureBoxの名前でコントロールを作っているところにこのソースを追加すると、エラーが出っぱなしになりパーサーがパニックになってしまう。こうなると、クラス名を訂正してもダメ、ファイルを全部保存しVS再起動しないといけない。
ちゃんとしたソースなら問題ないけど、妙なソースだと、上記の様に素直に妙な動きをするので、その点からも IntelliSenseの「次候補」が出ない状態にしておくのは、やっぱり怖い。(大笑
本当にきれいに直したいなら、IntelliSenseの内容はSQL Server-Expressの中に書き込まれているそうなので、
TextBoxのAllowDropのデータを基にPictureBoxのAllowDropデータを作り、入れてしまえば良いのだろうけどね。
ただ、パッチが来たら、綺麗に戻ってしまいそうなので、やる気が起きない。(大笑
 
もしかすると、[Description(“延々と長い・・・・・・・・長い説明”)]で、
OverLength Errorが起きてRollBack!
PictureBox.AllowDrop丸ごとINSERT失敗
なんてオチかもしれないなぁ・・・



Surface Mini?

近くアメリカで発売されるらしい、日本での発売は当然不明。
CPUは多分AtomかCeleronだろう。
ディスプレイは8インチぐらいで、キーボード付きケースも用意しているようだ。
外付けディスプレイに表示できるなら1つ買ってもいいかなと思えるけど、MHL-HDMIは付いていないだろう。
何に使うかと云えば、日報とか持ち運ぶちょこまかとしたテキストやEXCELのシートとかを入れておくPCとしては十分だ。
後は価格かな?
本体価格が4万円を越えたらパス。
それにこのタイプの本命はBay-Trailではなく年末のBroadWellなのは間違いない、電池も持ちとOfficeの動きが全く別次元になるハズだからだ。
さらにSkylakeと続き Skymountが現在の微細化の限界点(10nmルール)らしい。
あと数年でシリコンの微細化の限界に到達してしまうんだね。
限界突破はできないだろうけど。
 
 
 
 
 
 
 



XPからWin7/8へ乗り換えたくないと思う理由を考えた

  1. Vistaの大失敗以来、Windowsの製品サイクルが極端に短くなった。
    • 発売当初のディスカウントを除き、無理な開発が続いた影響か、価格は上昇傾向にある。
  2. 製品ごとにデスクトップのデザインが異なる
    • 自分なりに使いやすくしたデスクトップや便利なデスクトップのガシェットもWindowsのバージョンアップと共に放棄しなければならない。
  3. Windows8のスタート画面はUIとして最低だ。
    • スキル不足と云えばそれまでだが、Win8のスタート画面に並ぶアイコンはイミフで、アプリのシリーズや会社のアイコンが多く、同じアイコンがいくつも載っている。
    • このため、どうしてもアイコンと一緒にタイトルを載せる必要があるため、スマフォより大画面で横幅も圧倒的に広いのに、必死に横スクロールしなければならない。
    • 以上から、Win8のスタート画面でメーラーとテキスト・エディタしか使わないライターにはピッタリだが、なんでもパソコンに詰め込んでいる人には全く不向きなシロモノだ
      • 当然のことながら、彼らは他の用途のアプリはお気に入りのiPhoneに詰め込んであるので何も支障が無いのだ。
    • そう彼等を見習って、毎日使うアプリだけスタート画面に残すのがベストだ。
      • 後はデスクトップにアイコンを貼り付ければ良いのだから。
    • 今思えば、スタート画面ではなく、カスタマイズ可能なロック画面(あるいはスクリーンセイバー)とかにすればよかったのだ。
      • ロックするとあのスタート画面を表示
      • とりあえずキーを押すかパスワードを入力すると、
      • デスクトップへマウスで何かをクリックするとアプリが起動。※パスワードを入力するかもとか
  4. Vista以降の互換性の向上と称して、マイドキュメントやアプリが変更したファイルの居場所を転々と移動させた前科がある。
    • ユーザアカウントやアプリの特権の有無によって、どうなるかが決まるため、訳が判っていない人が操作すると、誰にも訳が判らない結果しか残らなかった。
      • 例:XP風にバックアップを取る場所を覚えていると、バックアップを取りそこなうのは確実。
      • 例:トラブったらアプリをこっそり管理者権限で起動し、その後は普通に起動する など
      • 例:トラブったアプリをXP互換モードに変えて起動する。再インストしてもその設定はダケは残っていると知っている人は少ないので、他のPCでまたトラブル など。
      • 例:無関係だがメーラーのメールのバックアップを正しく取れるユーザは皆無。
  5. 何かと.net Version3.x とかなんとかをダウンロードしないと何もできなくなっていたので、管理者権限がないと仕事ができなくなる場面もよく発生した。
  6. 何かとMFCをカスタマイズしたアプリが増え、なぜかインストの順番次第で動作しないことが当たり前になっている。
    • グラボのドライバーは新しいものが好まれPCが不調になると真っ先にアップデートされることが多いが、上のトラブルの主な原因でもある。
  7. サポートを止めると云っているMSが強気なので、嫌毛が走る。

 
逆に
XPが早く無くなって欲しい理由も考えてみた

  1. ゲームがDirextX11に対応しない理由が無くなる。※XPにはDirectX11がインストできないから
    • 早い話がFF-XIVにCore i7-4770KとかCPUを特盛りする必要が無くなる。
    • MoEやPSO2や完美世界やTeraなどのアカウントを今後どうするのかちゃんと決断しないといけなくなった。
      • 一気にグラフィックスをドライスティックにアップグレードし勝負に出てくるかもしれないから※Teraを除く
  2. インストーラを作成するときに、XP用のマージモジュールが不要になり、インストーラーの容量も軽減。
  3. ピュアなXPが動作するマシン(PCとかマザボ)を探さずに済む。※持ってるけどね。やっと捨てられる。
  4. やっと3.5インチのFDDから解放される。※多分ドコかにあるけどね。5インチのFDDって見たことある?
  5. VGA解像度(640×480)も忘れてよし。
  6. Win7のXPモードも無かったことにできる。


ECS製ミニPC「LIVA」

コンシュマー向けの格安で小型なPCのキット。
付属のケースはW 118 mm × D 70 mm × H 56 mm。
CPU:Bay Trail-M SoC
メモリ:2Gバイト(DDR3L)
SSD:32Gバイトか64GバイトのeMMC
LAN:ギガビットEthernet
無線:IEEE 802.11a/b/g/nとBluetooth 4.0
USB: 3.0 と 2.0ポートが1個づつ
画像出力:D-Sub とHDMI
電源:5V/3A
価格:18K円前後(予価
となっているから、後はUSB接続のDVDドライブとWindows8.1、USB3は外部ストレージ、USB2はLogicoolのUnifyingレシーバーでも付ければよいだろう。NUCならチップセットは既存のものなのでWindowsなら当然動くし、CentOS6.3でもすぐ使えた気がする。しかし、Linuxは、Bay Trail-MのSocのチップセット周辺のドライバー対応が終わるまではサクっとは動かないだろうけど、そこが面白い人には価格も安く丁度良いかもしれない。
残念だけど付属のケースはVESAマウンター未対応だが、何かのVESAマウントの金具が入手できれば、工夫次第で取り付けられそう。0スピンドル(ファンやモーター無し)なのでVESAマウント取付け用のテレビハンドルに紐でケースをぶら下げるダケの大雑把なやり方も、持ち運びにも便利そうだ。(笑
何分CPUが非力でGPU性能もショボイので、使い道はブログサーバー、無音のPCオーディオを楽しむ、youtubeのチョット観とか、用途は結構狭い気がする。
NUCが死んだら、コレ使おうかな。
 
しかし、安価なベアボーンの最大の弱点は安価それ自体にある。これにWindows8.1とMS-Officeを購入すると、あまり安さを感じられなくなってしまうし、もしカクカクしたり、処理が重いなぁ~などと感じたりしたら、もっとパワーがあるものにすればよかったとか思ってしまうことだ。



PHILIPS 234ES

フレームは薄いけど液晶面は上左右に1cm程度の非表示領域がある。
更にPCに繋ぐとその液晶面の端から上下1cmづつ、左右2cmづつ黒枠が出現し
その中にデスクトップが表示される!
そう云う訳で実質23インチなのだが、思ったより使えるのはかなり狭くなってしまう。
そこはOSCの画像のOverScanをOnにすることで黒枠は5mm程度に小さくなるものの
デスクトップのアイコンの文字が少しピンボケになるので文字を読むには向いていない。
DVIも付いていればよかったんだろうね。
予想に反してPS4との相性は良くPS4本体で液晶面全体で表示するようにすれば、ほぼ全面でプレイできてお得だ。(大笑
しかも、ゲームをすればAcerのAL2423Wよりずっと見やすい。
PS4に1980×1200のモニターを繋ぐと740×480でBD再生していたが、このモニターなら1080pでちゃんと再生してくれる。
PS4専用モニターとしてはいいほうだろう。
後ろにヘッドフォンもつなげられるが、DUAL SHOCKのイヤフォン端子の方が音が良い。
それに24インチの1900×1200に慣れてしまっているのでやっぱり画面が狭く感じる。
きっと慣れれば・・・と思い横に並べてみると、表示領域の高さが4cmぐらい違っていた。
と云う訳でPHILIPS 234ESとAcer AL2423Wを併用することになりそうだ。
それに横に並べてみるとかなり広くなった。(大笑
ps.
店頭のFFXIVのデモを見てみたら、自宅の同型のモニタより映りが良かったので店員に聴いてみたら
とりあえずRADEONのCCCの設定が変になっているんだろうということで確認してみると
PHL 234E5のスケーリング オプションがアンダースキャン(10%)になっていた。
そりゃ小さく映るよねってことで、0%にすると普通になった。
なぜアンダースキャン(10%)になっていたのかは謎。



Silverlight のページめくり

画面にいっぱいタグを用意しなくても、
たくさんの画面を頁にしてめくってみることができるらしい。
Silverlight のページめくりを簡単に
Silverlight での開発に関する 3 つの重要なヒント
ブラウザでページをめくるイメージで閲覧
本の形で情報を表示するSilverlightアプリケーションの作成
いづれもページ数が多くなる(40ページぐらいあたりから)と重くなるらしく、
レンダリングの時に1ページづつ読み込んでみたりと
色々工夫が必要らしい。
サーバーの監視を楽しむ  最後の一言が辛口。



エアステーション設定ツール

無線ルータ WHR-G301N を中継モードにすると
大元のルータからIPアドレスが割り当てて貰えず設定画面が開けない状態だった。
だから設定を変えるにはROUTERモードに変えなくてはいけないが、
IPアドレスのセグメントが変わってしまうので、ipconfig /RENEW とか色々面倒で、扱いにくくて仕方がなかった。
でも、このルータ専用のツール(エアステーション設定ツール(Ver.2) Ver.2.0.15を使うと、
中継モードのまま、ルータに勝手にIPアドレスを割り当てられる。
インストして起動。
「はじめに」の画面は 【次へ(N)】 を押す。
「2つ以上のネットワーク接続がつながっています・・・」と出た場合は【続行(C)】を押す。
「エアーステーション無線親機の選択」で、IPアドレスを割り当てたい親機を選択して【次へ(N)】を押す。
既にIPアドレスが割り当てられていれば「設定画面を開く」を押してブラウザで設定画面が開く。
「この無線機のIPアドレスを設定する」を選択、
DHCPサーバー(つまり回線の元のルータ)からIPアドレスを自動的に取得する。(かんたん)

次のIPアドレスを使う(上級者・管理者向け) で IPアドレスのネットワークマスクを入力して
を選択する。
 
ただ一度どちらかで設定してしまうと、

2度目以降の変更は「からなず失敗する」

但し、IPアドレスを忘れてしてまってもこのツールが設定済みのIPアドレスを探してくれるから、
ブラウザの管理画面のLAN設定から「LAN側IPアドレス」を設定しなおせばいいだろう。
しかし、一旦スタティックにIPアドレスを振った後に、DHCPで取得するようにしても、同じIPアドレスになったのは、何となく納得できない。大元のルータのDHCPの割り当てリストにもちゃんと載っているから大元のルータがIPアドレスを変えないように配慮した結果なのだろう。
それより、DHCPサーバのネットワークのセグメントを変えちゃった時にこのツールが重宝するんだろうね。



良いコピペと悪いコピペ

プログラムを作る時、
大抵はいくつかのパーツに分ける。
プロパティファイルを読み込むリーダーを作るなら
BinaryFileReader <- TextFileReader <- LineFileReader <- PropertyFileReader
な感じだろうか。
普通ならPropertyFileReaderに使うプロパティファイルをパラメータで指定し、
BinaryFileReader <- TextFileReader <- LineFileReader
の部分は何も変更が無く、大抵のファイルならそのまま流用ができる。
この場合の正統派なコピペは、
PropertyFileReader pfr1 = new PropertyFileReader(“xxxxxxx-1.property”);
PropertyFileReader pfr2 = new PropertyFileReader(“xxxxxxx-2.property”);
PropertyFileReader pfr3 = new PropertyFileReader(“xxxxxxx-3.property”);
となる。
ところが実際には・・・
String [] fileNameList = {
“xxxxxxx-1.property”
,”xxxxxxx-2.property”
,”xxxxxxx-3.property”
};
List <PropertyFileReader> pfrLst = new List <PropertyFileReader>();
for( propertyFileList in propertyFile) {
pfrLst.Add( new PropertyFileReader(“xxxxxxx-1.property”) );
}
の様に、やりたい事に比べて助長過ぎるソースが美しいとされるが、何もメリットは無いし、
static final int   PROPERTY_FILE_INDEX_1  =0;
static final int   PROPERTY_FILE_INDEX_2  =1;
static final int   PROPERTY_FILE_INDEX_3  =2;
pfrLst[PROPERTY_FILE_INDEX_1 ].get(PROPERTY_MEBMER_1);
pfrLst[PROPERTY_FILE_INDEX_2 ].get(PROPERTY_MEBMER_2);
pfrLst[PROPERTY_FILE_INDEX_3 ].get(PROPERTY_MEBMER_3);
のように面妖なConst 定数を使ってプロパティファイルにアクセスしなくてはならなくなり、また勢いソースの行は妙に長くなってしまう。
悪い例のレビュー前:  pfr1.get(“1”);
悪い例のレビュー後: pfrLst[PROPERTY_FILE_INDEX_1 ].get(PROPERTY_MEBMER_1);
つまり、やりたい事を理解せずにソースレビューだけするとたった3行のコピペが上の様な有様に至ってしまう。
更に、ファイル名をConstクラスに差し込んだり、あるいは・・・プロパティファイルに入れてみたりすると、もう終わってる感じがする。
これはWEBでよく見かける見栄えの良いコーディングとは

無駄の塊

でしかないことを意味する。
では、
PropertyFileReader pfr1 = new PropertyFileReader(“xxxxxxx-1.property”);
という1文は見栄えが悪いのかと云えば、そんなことは無い。
ただ、
PropertyFileReader pfr1 = new PropertyFileReader(“xxxxxxx-1.property”);
・・・(98行中略)・・・
PropertyFileReader pfr100 = new PropertyFileReader(“xxxxxxx-100.property”);
となれば何か方法は無いのか?と云いたくなるだけだ。
こうなると、先の無駄の塊がなんとなく見栄えが良く見えてくるから不思議である。
但し、100個もファイルを開いて何をするつもりなのか?という根本的な問題をまず考えるべきである。
その結果が、

100個ファイルを開いても大丈夫なことを確認したかっただけ

だったりすると、100行のコピペで十分な気がする。(大笑
ただ世の中には尋常ではないコピペが存在する。
JCLである。
古い話で恐縮だが、JCLに渡せるパラメータは1個のINT型だけだった古い時代。
Aファイルを読み、書式を変換し、Bファイルに書き出す。
のような単純なことでも
Aファイルが10個あれば
JCL00001
・・・
JCL00010
と違うプログラムを流さないといけなかった。
そう、この10個のプログラムで異なる部分は入力ファイル名と出力ファイル名だけである。
なせなら、C言語が出現する前にも文字列型変数はあったが、概ね固定長であった。
このためJCLのパラメータに文字列型変数を使える様にすると
main( char parameter[10] ) {
・・・
}
にするしかなく、とてもかっこが悪かった。
更に、文字列型のパラメータの数を増やしたりしたら
main( char parameters[5] [10] ) {
・・・
}
とかになっても、どうやって読めばいいのか直観的に判らないシロモノになってしまうからだ。
もっとも、JCLごとにパラメータの数が違うような仕組みは考えられなかったのだろう。
なんたって、1バイトのメモリは血の一滴。とても貴重だった時代なのだから・・・
 
もっとも、パラメータが1~10の場合にファイル名をIF文で振り分ければいいハズだが、ソースレベルデバッガどころがラインデバッガさえ使わせて貰えない時代。つまりVDTな画面とキーボードなんて高値の華だったころは、パ ンチカードな時代で、IF文を書くより、ファイル名の1行(カード1枚)を差し替える方が簡単で動作も確認しやすかったのだ。
ただ、その流れが現在も続いている(もちろん機能は色々拡張されている)のはかなりウザいなぁと思う次第だ。
※もちろん、MMORPGのマクロはJCL系ではある。
しかしJCLを使うのが金稼ぎに来たプログラマなのに対して、
マクロを使うのはお金を払ってくれるユーザであるため、
使いにくいとは云われつつも、JCLの数億倍もパラメータが使いやす。
JCLに似ているが全くの別物である。



インタープリタとコンパイラを直結してみる

この2つを直結しても実は何も良いことはない。
と云うか別に何も起きない。
と云うか混乱が起こるだけなのだ。
DOSのコマンドプロンプトでシェルのコマンドを打つようにプログラムを組むのは非常に難しい。
なぜなら一発で最初から最後まで一気に書き通せるなら、viの様なテキストエディタは全くの不要だからだ。
利点があるとすれば、ワザワザXMLなどを使って一本にコンパイルしたプログラムを無理ヤリに分割管理して悦に浸る様なマゾ的な管理が不要になることだ。ワークフレームは極当たり前の様に機能不足に陥り、際限の無い機能拡張を繰り返していくものなので5年以上も使い続けると何コレ?なシロモノになってしまう。そうワークフレームとはその場しのぎの足場に過ぎないのだから、長期運用なんて考えるだけ、おかしな話だ。
だが、そんな枠組みという縛りもなくコマンドラインからトリガ要因と一緒に実行するプログラムを登録するのは良いとして、電源が切れたら終わりでは大変なので、登録内容を保管するリポジトリィっぽいものが必要になる。面倒くさいので簡単に・・・

トリガー:L2ボタンを押した。

実行プログラム:メニューが左に流れる。

な形式のリポジトリィを作ってしまうと厄介なことになる。
そう複数のプロジェクトが混在するサーバーでは、やはり適用範囲(スコープ)が必要だ。

スコープ:PS4

状態:メニュー画面

トリガー:L2ボタンを押した。

実行プログラム:メニューが左に流れる。

ぐらいは必要だろう。
また開発途上を考慮すると、リリース・リポジトリィとテスト・リポジトリィに分けたり、履歴を残したり、色々必要になるだろう。
結果:お化けのようなリポジトリィの完成と云うことになる。⇒これが混乱。
だから、普通はその場しのぎのやっつけ仕事はシェルの様なインタープリタでかき捨て、速く動かしたいとか長く使いまわしたいものはコンパイラで固めてしまうのが無難だ。
そうすることで、長く使うものだけリポジトリィ化してしまえば、物量が減る。
だが、それも大量人員を投入するプロジェクトになれば、あまり意味はない。
ドレが長く使うものなのか、最初から決まってはいないからだ。
※全てが間に合わせのために作られたプロジェクトも存在する。(というか大半が該当する。
となれば、物事を簡単に、しかも応用が利くように、リポジトリィを組み立てなくてはいけない。
多分それが出来上がった時には『当たり前すぎる内容が書かれたレポジトリィ』で興味が湧くようなシロモノではないだろう。
しかし、それこそが『使えるレポジトリィ』で、奇を照らしても意味は無い。
そして、大抵は「運用マニュアル」がそれに該当する。
多分、先に「読める運用マニュアル」が書ければ、大抵のプロジェクトを成功に導くことができるだろう。




top