変奏現実

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

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

インターネット

Webはなぜ面倒な作りになっているのか?

ApacheにしろPHPにしろHTMLにしろ
その構成は何か変だ。
例えば、Apacheは設定の仕方自体が取っ付きやすそうで、実は困った設定方法になってる事が多い。
Deny from all
allow from 192.168.1.
とするとローカルIPだけ見れる などはデモシカ方式なので、パっと見、意味が読み取れない。
それに ルータを変え、セグメントが 192.168.2. になったりすると ダレも使えなくなる。
リダイレクトとかオーバライトの仕組みも、
行き当たりバッタリだったんだな~て感じ。
そのためApacheをディパッチャー代わりに使うのは結構ヤバい。
PHPはPerlよりはマシだが開発環境が悪すぎだ。
Eclipse使ってできるのはリソース管理だけとか・・・なんだかなぁ?
HTMLは云うまでもない。扱いにくいほどツールが売れると見込んでいるのだろう?
実際、HTMLでまともにレイアウトするにはpx単位で縦横を区切るしかなく、
よーく、考えてみると全部TABLEタグで実用的には困らない。
またXMLはSGMLの超サブセットで、かなり扱いが良くなっているが、
レイアウトとなるとXSLTなんかを使ううが、コレが狂ってるほどSGMLベースで
苦労してちゃんと組みあがっても判り切ったレイアウトしか出来ないと云うダメダメなシロモノ。
では、なぜダメダメなものが規格に採択されてしまうのか?
今でも営業ベースでイケイケなのはそのままだし、
仕様がバラバラじゃ~誰も使ってくれないから規格にしてしまった。
ってトコロだろうか?
フローレイアウトやマトリックスレイアウトを使っても、その枠組みはピクセル単位でないと全体のイメージが固まらない。
100%とか50%では結局中に具を入れる際に、画像を使えばアッサリと白旗があがるのは、そう珍しいことでもないハズだ。
そんなシロモノだから、もし、まっとうなレイアウトのルールを考え付いたら、各ブラウザにプラグインでもタダでばら撒くと良いような気がする。
だが、なぜか世の中はHTML5に邁進するようだ。
その理由も判らないでもない。そんなレイアウターを組むプログラマーを雇うよりHTMLを都合よく拡張し、ブラウザに押し付ければ金もかからずとても助かる。
そういう感じが透けて見えて仕方が無い。
もしかすると最後に残ったプログラマーはみなブラウザばかり作ってるってことになるのかもしれない。



なりすましウイルスは判りにくい

ウイルスの特定には、そのウイルス(プログラム・ファイル)が持つ特定のパターンを見つける方法が知られている。
例えば、古いMS-DOS時代なら、ウイルスは他のCOMやEXEファイルの後ろに自分をくっ付け、COMやEXEファイルを実行したら、まず自分が動き出すようにCOMやEXEファイルの先頭の方をJump xxxxxx と書き換えていたそうで、大抵は動作に支障の無い部分が壊れてたりしてて・・・プロセス リストを表示すると、変な名前になってるのがカスケードだね・・・
な、感じでとても判りやすかった。(笑)
今はウイルスを作成するツールキットを使ったものが多く、そのツールキットのクセを知れば、大抵のウイルスは判定しやすいという。
しかし、普通のアプリケーションの開発キットで作った悪意のあるプログラムは判定が難しいらしい。被害が出てから検体を受け取って調査すればパターンも作れスキャン用のパターンの配布もできると思うが、事前にコイツは怪しい!と判定するのは確かに難しいだろう。
でも、よーく考えてみると、普通のアプリケーションの開発キットで作った悪意のあるプログラムって案外メジャーなんじゃないかと・・・
以前は通信しだすと警報が鳴るウイルス防御ソフトもあったが、今では通信がアップデートのメジャーな方法なので、通信したから怪しいとはチョット云えない状況であることも自動判定を難しくしているかもしれない。
なお、出所不明なアプリケーションのダウンロードやインストールはダメ!とか、ドコかの方が言い出してるそうです。セキュリティの専門家ならそんなことをやる訳がない とも云っているようです。そりゃそうでしょ? それでウイルス感染したら、会社をクビになりかねないし、職業上の都合上、絶対やらんでしょうね。(大笑)
昔は、交通安全委員なんてのがある会社もあって、それになったら、絶対に自動車は運転しないさせないなんて時代もありましたので、似たようなもんですね。だって、駐車違反とかスピード違反でキップ切られたら会社の面目がががががな世の中でしたからね。
しかし、大方の人にとって、そういう出所がよく判らないフリーなソフトウイルス監視ソフトでチェックして安心して使うものだと思っているハズ。
その辺が、専門家と かなり意識が違うような気がする。
そうなると、ウイルス監視ソフトって特定のウイルスに特化した監視しかしてないってことになるのかな?
それにセキュリティって便利なモノを目の仇にしているようにも思えます。
USBメモリーはダメ絶対ダメとか、P2Pはダメ絶対ダメとか、Winy使ってるなんて社会人として失格とか、色々云ってますよね。
確かにそれらを使うことで酷い目にあう可能性は結構あるかもしれません。
でもそれは、
使う奴が悪い。
俺は使わないから安全。
という硬直した考えだと思います。
必要なら危ない橋は他人に渡らせる。
そんな世の中な気がして仕方がありません。



やはり高くなるWindows 8

Windows 7 Professional SP1 64bit  は、
12,000~14,000円あたりなんだけど(中には4K円なんてトコもあったけど・・・メアドを見てネタだと思った)
Microsoft Windows 8 Pro (DSP版) 64bit 日本語 は
16,000円以上でDSPだからサポ無しで実質的には大幅値上げに等しい。
しかもマウス&キーボードなら意味のない新しいUIになっているので、ワザワザ買ってパソコンにインストする必要は0である。但し、ダウンロード版のアップグレード版がWindows.com で結構安く売るらしいので、こっちは用心のために買っておくのもいいかもしれない。
なぜ用心が必要かと云えば、うっかり買ったパーツがWindows8 Only だったなんてこともあるかもしれないからだ。今でも XP それなに?美味しいの的なパーツは結構ある。
※3TBオーバーのHDDやUSB3等。
一方でUSBの地デジチューナーとかDLNAアプリなんかはVista以降で動作が怪しく、一概に新しければ良いワケではない。できれば古いパソコンのWindowsはそのままにして、安めの構成でWindow8なんかにする方が何かと安心かもしれない。どうせ古いパソコンではスグに遅くてイラツクだけなんだから・・・(笑)
システム要件には、画面解像度は「Metroスタイルアプリケーション使用時はXGA以上。スナップ機能使用時は1366×768ピクセル以上」って書いてあるらしいですよ?
 



文字列を結合するなら

昔からある、strcat(a,b ) などは、aの後にbを追記していくので、前持ってaのバッファをb分拡張しておかないといけない。
今風に云えば事前にバッファを拡張しないとオーバランしてしまい、mallocのようなヒープを使っていれば free した途端にドカンとくる訳だ。
と書くと面倒なもののように思えるが、
実は・・・

char * myStrCat( char * a, char * b)  {

 int lenA = strlen( a );

 int lenB = strlen( b );

char * buf = malloc( a + b  + 1 );     // +1 は NULコード分

if ( buf == null ) {

  exit 1010;  // 鞄がパンパンです

}

strcat(buf,a);

strcat(buf,b);

return buf;

}

みたいにラップして使うのが前提の関数だった。
勿論、使い終わったら、自己責任で、慎重にfreeしなければいけないので、

 void  myFree(char *buf) {

if ( buf == NULL ) return ;

free (buf);

}

安心のために、なんかも必要だ。
※一気に書き上げたので動くかどうかはかなり怪しい。以下のソースも同様。
バッファしながらファイルに書き込むなら・・・

#define BUF_SIZE  (1024)

static char * buf = null;

 int writeFile( File * file,  char * text )

{

int count = 0;

if( buf == null ) {

buf = malloc ( BUF_SIZE );

memset(buf, 0, BUF_SIZE);

}

int lenUse = strlen(buf);

int lenText = strlen(text);

while( (lenUse + lenText) > BUF_SIZE ) {

//空いてる分に少し詰めて

strncat(buf,text, BUF_SIZE – lenUse);

count += BUF_SIZE – lenUse;

//ファイルに書き出す

write(file,buf,BUF_SIZE);

//バッファに書き出していない部分にポインタを移動する

text += BUF_SIZE – lenUse;

//残りのバイト数を数える。

lenText = strlen(text);

//バッファをクリアする

memset(buf, 0, BUF_SIZE);

lenUse = 0;

}

//もう、バッファに一気に書き込めるので・・・

strcat( buf, text );

count += lenText;

//書き込んだバイト数を返す

return count;

}

そうそう

void bufFlush (File * file ) {

if( file == NULL ) return ;

int lenUse = strlen(buf);

write(file,buf, lenUse);

free(buf);

buf = NULL;

}

も必要だ。
見るからに、少しイジれば簡単にボロが出そうなソースだ。
よく考えてエレガントに作ろうとしても、そもそもが strcat ベースなので、基本的にクリティカルなものになっている。
まさに『見るだけ!触るな!混ぜるな!』~を地で行くシロモノである。
こんなソースを コードレビューして、あーでもない こーでもないとイジれば、
どんな結果が飛び出すかは、判り易いというものだ。
 
しかし、チャンと動いてしまえば、もう中身は気にしなくて良いので、ドンドン流用できる。
これがライブラリィの良いところである。
 
そう、こんな汚いソースなんて今時ある訳が無いとか思うかもしれない。
しかし、クラス・ライブラリィとか オペレーター オーバライトの実装などは大抵こんなもんである。
まさに知らぬが仏な日常なのですよ。(大笑)
 
では、こんなソースは無くして、可変長バッファクラスでも導入して、綺麗にすればよいのかといえばそうはいかない。
結局は、誰かが、バッファの中の使用バイト数は?とか、何バイト書き込んだら安心か?っと、誰かが責任を持つしかないのだ。
strcat を使おうが memcpy を使おうが バッファを配列にしようが、所詮は同じなのだ。
 
まぁ、その辺は、コンパイラやインタプリターの実装とか見ると、気が遠くなるかもしれないが、
実は、上の様なソースとあまり変らないのだ。
 
結論から言えば、
ちゃんと動いているものは、もう触らない。
クラスとかライブラリィとか綺麗にラッピングして神棚に飾っておくのが一番いいのである。
そして、使っているうちに、スレッド・セーブじゃなかったので調整!mutex とか 使いつつも、
ワードセグメントやアーリーライトやミニマム・セグメント・サイズにまで気を配りながら、CPUやTLBの仕様もチェックしつつ、
Linuxの仮想記憶はハードウェアの上のラッパーでしかないのだから・・・ダブル・フォルトが出てからが勝負!
先の+1を+2や+15に変えながら、最速を目指すのである。
そう全てが出来上がるまでの毎日が結合テスト日和なのだ。
これほど、テストされ信頼を勝ち得えることが出来て、性能まで肌で感じられる開発技法が他にあるだろうか?
勿論テストは全自動化しなくてはいけない。気が付けばテスト・パターンは山のように出来ているのだ
まず最初の方のテスト項目は

  • a = NULL の場合に いきなりクラッシュする。
  • a = 16の場合には、環境変数のリストが返ってくる。
  • a= -4096の場合には、得たいの知れない中身が返ってくる。

から始まるのだから・・・(笑)



外人パーティ

マイナーな日本国内のMMORPGなら日本語のみでチャットできるので

挨拶とか

***って武器っていくら?とか

***行きたいです!とか

などの日常会話には苦労することがない。
実際には『効率厨』が多いので、『募集!***クリア経験者求む』をよく見かけるし、外人も『(ベテラントレード)』(元々はApproachのヒット範囲を広げる漁師のアクション)などと云っているのでそう変わりない。
当然、本当の日常会話なら、何も問題ないと思っていたら・・・そうでもなかった。

  • 最速
  • 最適化
  • 保守性

この意味が実は違っていた。
最速と云えば、
まず仕様からどうなのよ?
と、考えないといけないと思うんだけど、そんなことはナシで、
文字列の足し算 よりは StringBufferが良く、 欲を云えばスレッドセーフではないStringBuilderが最高!とか、ドコの板のREなのか?と思えるような話だったりする。
本音を言えば、それくらいコンパイラかStringクラスの中で隠蔽出来ないのか?と思える内容だ。そんなコトを云ってもコンパイラを直せるハズもなく、ソレを使うしかないというのも、情け無い話。でも、性能が出ずタイムアウトするならヤルしかないよね。(大笑)
その点、MFCのCStringは結構がんばってた。
 
最適化の方は、
例えば、短い文字列なら、文字列の足し算でもいいじゃないか。
ここまではいい。
しかし、似たような処理(関数と云ってもいいしメソッドと云ってもいい)をコピペして使うなら・・・
一斉に修正しないとマズい!なんてことはコピペにはよくある話でStringBuilderを使っている所をワザワザ文字列の足し算に書き換えない方が無難だ。

※もし、

String text = “abc” +

“def” +

“ghi”;

なら、変更は簡単で、

StringBuilder text = new StringBuilder();

text.append(“abc”);

text.append(“def”);

text.append(“ghi”);

なら、変更は難しいと思うなら、

abc

def

ghi

を 正規化の置換で 変換元 ^(.+)$ 変換後 text¥.append(¥1) みたいにすれば どっちも簡単だったりするし、元のテキストに戻すのも、変換元 ^[ ]+text¥.append¥((.+)¥)$ 変換後  ¥1 とかで どっちも一発で戻るんじゃないかな?要は簡単に変えれるように注意深く書くことだろう。

だから、ボクは

String text = “”

+ “abc”

+ “def”

+ “ghi”

;

あたりが一番楽だと思っている。

SQLなら

select

T1.Abc as abc

,T2.Def as def

,T2.Ghi as ghi

from

TABLE1 T1

,TABLE2 T2

where

T1.Abc = T2.Abc

and T2.Def = ?

な感じだろうか・・・

カンマを手前に書くのは書き忘れたら気が付きやすいからで、それに習ってandも同様、なぜ予約語を小文字で書くかと云えば、いつも書くし場所も大抵決まっているので小さい文字で十分だからだ。どちらかというと出現頻度の少ない単語の方が大文字小文字を混ぜて書いたほうが見やすいが、何かのツールでSQLを書いているなら、あえて、大文字小文字とかエイリアスとかは書き換えない、どうせミスったら何度も綺麗に手直ししなければいけないからだ。

だが、本音を言えばO/Rマッピングで十分だと思ってる。

 
しかし今は、短い文字列なら、文字列の足し算 に書き直すのが最適化(つまりエレガント)であるらしい。
もし、中身が増えたり、実はループの中で100回くらい出現するかも?なら、StringBufferの方がよろしい!という様に調整(書き直し)するのが美しいらしい。
類似例には、『ループが確実に一回ならwhileはifにしなくてはいけない』があるが、これも、2~3回 if とwhile を往復したり、ヒストリーを見てたりするとそうだったりしたなら、
while のままで良くない?って感じもするが・・・
そう思うのは『遠い未来』かもしれないし、そう思うこと自体が(ドツボの)経験の差かもしれない・・・
経験的には、if から while への変更が必要なら書き換えるしかないが、よ~く考えたらifで十分だったなら、そのままがいい。
そして最後は保守性
沢山のソースがあったら、似たような書き方の方が後々見るのが楽なハズ。(この辺のコンセンサスはOK!)
でも、
onClick=”  document.***.submit ”
って書くあたりは単純に美的感覚の違いなんだろうな?
面倒くさいからコレでいいや!ってならOKなんだけどさ。
 
 
もうね・・・
 
 
j-Queryっぽくガリガリと初期設定しまくった方が保守性高いんじゃない?
って気がしました。
でも、ボタンが1000個もあるならj-Query式設定はきついよね。
まぁ、周囲と年齢が、かなり離れてしまっているので、
・・・
価値勘のズレが結構あるってトコロが本当のところかもしれない。
そしてそう云うときは若い方にあわせたほうがマシだと思ってる。
なぜなら、前述の様に古い価値勘を説明する単語自体が意味が変ってたりするから、説明するには多くの事例を引き出してこないといけないし、更に今風にアレンジしないと「今はそんなことないですね。CPUもメモリもG単位ですから」と思うはずだからだ。
もっとも先の文字列の足し算はG単位だから昔より酷い目に遭うのだけどね・・・



無駄な要件は空気となり作法として昇華される

プログラムのモジュール・インタフェースを考える時は不要なものはマズ眼中に無い。
例えば、HTMLエディタを作ろうと考えたら、音声なんてOut  of  眼中(?)だろうが、
実はそんなことは無いのはご承知の通り。
それならCSSファイルだって、9割以上が不要だ。
読み上げ機能に対応するためには、渋々HTMLタグの順番は、頭から読んで意味が通る様にしなければいけない。
だから、POPUPするレイヤなぞは、最初からHTMLの中に在ってはイケナイものでもある。
そう云うものは、JavaScriptからwriteでレイヤごとでっち上げるか、J-Queryの非同期通信でレイヤの中身ごと受信すべきなのだ。
だから、とりあえず要件をまとめ、後はボロボロと付け足して、最後に「読み上げ機能にも対応する」とかになると非常に厄介になる。
だから、「読み上げ機能」なぞとは一言も発しないで、「HTMLを上から順に見ていくと、どんな内容判るようにしよう」という空気を事前に作っておくといい。
そんな訳で、<LAYER>は元より、<div style=”position: absolute; z-index: 0;”> 何んかは流行らないワケなのだ。
で、なければWordPressの画面なぞ、もっと簡単になっていたハズなんだから・・・
もっとも、今となっては、実質的には、RSSを読み上げてくれるだけで十分な気がする。
しかし、元の意味なぞもう誰も覚えていないので、作ってしまった空気は作法として半永久に居座るのであった。
メデタシメデタシなのかもしれない・・・



長く付き合うためには・・・

古いVBやMFCどころかJavaにしろ.Netにしろガチガチで組むと
毎度の意味不明なバージョンがあれば書き換えが必要だ。
そうならない良い方法があるとすれば・・・
アバウトに、あぁ~したい、こぅ~したい程度での内容を仕様書としてまとめ、あとは好きにしていいよ!
と丸投げするのが一番いい。
しかし、月日が流れれば新しく生まれるものもあれば、絶えて絶滅するものもあるので、
***な点にはコダワりがあるし、***でも使える様にしたい、***はもう要らない。
ということも書き加えることが必要だろう。
もうドット・インパクト・プリンタなんて使わないだろうなんて思っていると、不滅インキ必須とかで、そうでも無かったりする。
まぁ~インクジェトや熱転写ならともかくレーザープリンタなら問題ないだろうけどね。
いずれにしても、ソースが全てでは心もとない。
なんたってそれが動くシステムがもうなかったりすると動作の確認すらできないからだ。
そうJava Docなんてマイナーなルールもそんな顛末を迎えるだろう。
例)NEC PC9821 N88BASIC(DISK)等
そう考えると、アイデア・プロセッサが吐き出すXML風ファイルとかを元にモジュール化した処理を繋げたり、画面を起こす方がマシだったりする。
仮にグラフィカルな開発環境があるなら、やはり流用できそうな結果(ファイル)を吐き出して、JavaなりPHPなりに変換出来たほうがいい。
画面のレイアウトも固定とか画面幅50%とか要点をまとめてある方がマシだ。
そうこう考えてくると、要点まとめ仕様書作成アプリが欲しくなってきた。
あとがExcelのマス目に一文字づつ埋めた提出用アウトプットが出来てもいいし、そんなもんはその場しのぎの出来合いで良いのだし・・・
多分、難しいのはモジュール化したパーツをどう繋げるかだろうか?
画面上は線をコネクトするだけだろうけど、複数パラメータがあったらドレを繋ぐのか判らないからね。
名寄せ機能なんかも必要だろうね。
後、出来上がったアプリにパラメータをはさんで、テンプレートにするとか、更に欲を言えば、改造履歴にタグを付ければ、勝手にテンプレートが出来ると良い気がする。
う~ん、だんだん構想が固まってきたようないい加減なような・・・・
 



ギャップを感じる

ひさびさに生に近いEJBを使うと、数十年前の昔に逆戻りした様な感覚に落ち入りましたね。
でも、Java 1.0が出来たのは1996年です。その一年前の1995年にJavaScriptと改名されたブラウザーに載ってたScriptもベタでバイトなものでしたから、この当時も酷さを知っている人で今でもJavaScriptが嫌いでも不思議ではありません。昨日書いたスクリプトが明日も動くのか誰にも判らなかったんですから。(笑)
でも、今時jQuery UIも使わずTABLEを組み合わせてボタンをスライドさせたりとか、何だかな?って感じがします。
まぁ~それくらい今ではJava系WEBサイトの作り方は百家雷鳴 文字通り バラバラですよね。
ひたすらHTMLは少なくして携帯電話で使える様にしているところもあれば、その正反対なサイトもあります。
ある年月の過ぎたシステムは年を追うごとに開発手法が変り、まるで年輪のような層(レイヤー)が出来てたりします。
でも、綺麗に作り直そうなんて思ったら・・・多分それはCOBOL時代にホストに載っていたシステムのソースを見ながらWEBサイトの仕様書を作り一本一本書き上げるのとそう変らない気がします。リダイレクトがががとか色々あるじゃないですか?
そんな訳で今ではJava系WEBサイトほど融通が利かなくなってしまった開発方法になったなぁ~と思ってます。
ええ、COBOLとの違いは・・・おそらく名前だけじゃないかと・・・(大笑)
 
 
 



実は紙と鉛筆を越えられないパソコン

まぁブログを書いてて何だけど
紙と鉛筆の組み合わせを越えていないと感じることは多い。

  • 超高精度
  • フォントのフェイスやサイズの変更が自由自在
  • コピー機を使えば印刷も結構速い
  • 薄い紙を使えばレイヤー機能のある

画面の構成とかアルゴリズムとか何かを考えるときは、つい紙に書いていることが多い。
と云うのも、MS-Wordのお仕着せのフォーマットやEXCELの縦横のマス目はある程度、何をするのか決まってから、情報を整理するのに向いている。と云うか、今のMS-Officeが使える範囲と云えばA4版で数枚が限界だ。だから、画面の解像度が4万×7万ドットだったらドウかな?などと思ったら、パソコンに向かっていたら、考えがまとまらない。
紙に絵や単語を並べ、線で引いたりして、これをパソコンの画面に転記してみるとスクロールしないと全体が見えないから画面って結構狭いことに気が付くし、更にA4縦はおろかA4横でプレビューしても大抵は文字が潰れて読めない。
そう考えると、携帯の画面に収まる程度の長さなら携帯メールも便利な様にパソコンの画面に収まる程度の文章や資料を作るのにパソコンが向いているのは確かなようだ。
i-PadやAndroidで紙をめくるようなエフェクトはチャチなオモチャでしかない。ではデカい地デジのようなパソコンは無理なのかと云えば、そんなことは無い。ただし、持ち歩けないし、新聞のように見たいところを手前に持ってくることも難しいので自分の方が動かなければいけないから面倒すぎるのだ。
そして、パソコンの画面でダラダラと書き連ねてもスクロールすると視界からドンドン消えてしまうので、気が付くと、情報が重なっていたり、出だしと終わりで違う内容だったりして読み直してから気が付く。
そう考えがまとまっていないときは大抵そんな感じだ。思いつきで横に図を入れようとするとMS-Wordでは無理すぎる。操作感が重くイラついてくる。Excelで図を描いても、あの文字がすぐに#####になるのもかなりイラつく。行間とか線と文字の隙間とかそんなのどうでも良いアイデアの草稿にはまるで向いていない。決まりきった仕様でがんじがらめのMS-Officeは、そんな用途には全く向かない。
そう考えると、まぁ~レイアウトってこんな感じで後はアバウトなワードプロセッサーもいいのかもしれない。何か綺麗に画面にまとまると楽な気もするかもしれないが、それが内容を綺麗にまとめる妨げになっているのでは意味がないではないか・・・



スティーブ・ジョブズ

スティーブ・ジョブズ そう Appleのアノ人です。
もう一年になるんですね。
生前は独善家と云われることが多く、起業はともかく企業の運営については、あまり評判はよく無かった人です。
マックの前身のLisaの開発も結構長く続きAppleが傾いてしまいそうになりAppleを追い出され、Nextってワークステーションを作りましたが、芳しくなく、再びAppleに戻った後、やっと何かがうまく回りだした・・・
そんな感じがします。
彼はクローズドなシステムが良いと感じていたようです。あれこれ中をイジらなくてもサクサクと使えるのが一番ですからね。
それが単機能のiPodになり、miniMacなり、iPadになって、やっと形になったのだと思います。
そう30年くらいかかっているんですよ。iPadが出来るまでには。




top