変奏現実

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

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

パソコン

なぜAPUの中のCPUは非力なのか?

いつまでも非力であり続けるのかは判らないが、そんな雰囲気になっている。
今のCPUはDDRの様な遅いメモリに直接アクセスしない様にすることでクロックに見合った性能を上げている。
簡単に云えば、よく使うデータをかき集め、CPUの周囲にある高速なメモリにストックすれば、とりあえず遅いDDRに合わせて一緒に低速で処理を進める必要は無くなっているのだ。
だからDDRのクロックを上げても同様に処理速度があがる訳では無い。
GPUの場合はとにかくDDRからポリゴンをどんどん吸い取らないといけないのでDDRのクロックがあがるとGPUのコアの休憩時間をより短くでき効果が期待できる。
今のAPUの中のCPUはその高速なメモリにINTELよりゆっくりアクセスしている(大体半分未満)。
これは、CPUとL1キャッシュ間のメモリ転送のクロックの差と云うより、CPUとL1キャッシュ間のメモリアクセスの方式の違いなのだろう。
マシン語を解釈するデコーダが吐き出すマイクロコードもL1キャッシュアクセス方式に応じて組み上げられるだろうから、そこが遅いとどうしようも無い。
では何が足りないのだろう。
推測するしかないけど、

  • 次のマイクロコードのためにL1キャッシュからメモリをLoadするアドレスを計算する。
  • 先のアドレスのL1キャッシュのメモリをアクセスしデータを読む。
  • 前のマイクロコードで処理した結果をL1キャッシュのメモリにSaveするアドレスを計算する。
  • 先のアドレスのL1キャッシュのメモリをアクセスしデータを書き込む。

の4つをパイプライン化し1クロックで一度にできる様に見せかけるだけでも効果があるような気がする。
だがすでにそうなっているのかもしれないし、そのためにアクセス速度が低下しているのかもしれない。
なぜなら、先のアドレスが同じなら、LoadせずSaveデータをループバックして読み取る必要がある。
実際どうなっているかは全く判らないので、仮にSave、Loadを同時並行可能だとしよう。
その場合でもL1キャッシュの向こう側にはL2キャッシュがあるのでL1-L2間のデータの同期処理が起きれば、2モードアクセスであってもCPUは待機するしかないし、2モードアクセスであるからこそ待ち時間が2倍になっているのかもしれない。そうなるとL1-L2キャッシュ間のデータの同期処理がすぐ完了するか、マイクロコードの指示で同期の先延ばしも必要なのかもしれない。
そう考えると事前(何クロックも前)にLoadデータの取得要求を出す様にマイクロコードのパイプラインを緻密に埋め合わせ、一見CPUを待たせない様に見える感じでL1キャッシュを使い倒す技術が重要な気がする。しかしそれは経験がモノを云うのだろう。高機能なL1キャッシュコントローラを作ればCPUの処理としては大変楽になりそうだがコントローラの処理自体が重くなりCPUはコントローラーの応答をただ待っている(ストール)しかなくなりメモリ転送速度の高速化にあまり寄与しないだろう。
たぶん大幅なCPUの改訂が行われるまで今の状態は続くのだろう。そしてそれ(改訂)がやってくるのはいつなんだろう?
 
 
 
 
 
 



Pionner BDR-209JBK 【評価:う~む】

パイオニアの内蔵型Blu-ray Discドライブ(ソフト付)。
ドライブ自体はWindows8.1 TMらしいのだが、Blu-ray関係は何かとWindow8.xでは動作しないソフトが多く、有名なトコのモノでも怪しいので、添付ソフトもWindows8.1 TMで揃っていれば嬉しい。
だが、同包されるPowerDVD10のページを見ると、動作環境のリンクにはVista,WindowsXP,Windows7までしか書いてない、どうやらPowerDVD13まで待たないとWindows8.xでは使えない可能性が高い。
ただ、PowerDirector 10はWindows8.xに対応しているっぽいが、プレビューが見えない可能性もある。
という感じで、Windows8.xで使用することはあまり眼中にないようである。
ちょっと残念な話だった。
次回に期待します。
 



やっと出てきたゲーム向けのNUC

と云ってもGIGABYTE 「BRIX Pro」シリーズのGB-BXi5-4570Rのこと。
Iris Pro graphics 5200内臓のCore i5-4670Rを積んでいる。
注意点はRタイプはBGA(基盤直付け)なのでCPU(Core™ i5-4570R 3.20 GHz)を交換するのは無理だろう。
発熱量も大きいのでCPUファンが強化されついでに2.5インチHDDも積めるようになったので高さが倍以上になりACアダプタも勢いデカくなっている。
それでも、本体が62 mm × 111.4 mm × 114.4 mmだから十分に小さい。
なお日本での発売は未定。
 



ゲーミングPCは難しい?

動画を観てて時々絵が止まったりカクカクな絵の動きになるのはイヤですよね。
で、動画再生支援の付いているグラボやそういう状況に特化したアプリ(止まるくらいなら画質を下げる等)を使ったりする訳で、
ゲーミングPCもゲームやってる最中に絵がカクカクとかもっと広い画面で観たいとか不満を大方解消する目的でパーツを寄せ集めたPCです。ゲームによって必要な機能や性能が異なることが多いので、ゲームごとに推奨PCまでありますよね。
厄介な点はオンラインなど配信型の場合、パッチやバージョンアップで素材(モデルやテクスチャーデータなど)が追加されていき、色んな装備の人が画面に映ると、カクカクしてくることが次第に増えていくことです。
つまり、頻繁なアップデートのあるゲームでは時間の経過とともにモッサリ感が出てくることがある訳です。
大方はメモリを増やしたり、HDDからSSDに変えて、増えてしまったデータも難なく扱えるようにすることで解決できますが、GPUに送り出すデータ転送量が飛躍的増えた場合にはCPU、一度の描画で扱うデータが増えたらGPUをもっと性能がよいものに変えざるを得なくなります。
GPUは概ねPCIe×16スロットのままで形状は変わってないですが、データ転送速度はVerによって倍々と変わってますし、CPUに至っては形状そのものが変わっているのでマザボの交換も必要だったり、しかもマザボの交換と一緒にメモリも交換しないとCPUの性能が伸びそうも無かったりすると、買い替えた方がマシな状況も出てきます。
そこまで行きつかなくても、画質設定を一段さげることで、問題なくゲームできるならその方がマシです。
一方で際限なく高性能な(予算の都合もあるけど)PCを買い求め、広い画面、高画質、高FPSな嗜好的ゲーミングPCもありますが、これは旬(話題性が高い)な高価なパーツを集めたもので、大方はかなりオーバースペックになっているハズです。でも、どうせ買うなら最高のもの(ゲーム内と同じ衝動)が欲しい人もいるので、願ったり叶ったりなのでしょう。
では普通にゲームするならどうしたらいいんでしょう。
 
ひたすら高性能を求めて、ドンドンPCを買い替えるのも変な気がします。
高性能=消費電力も高い図式もあるので、自宅の電気の契約容量ではブレーカーが落ちてしまう場合もあるでしょう。
逆にコストパフォーマンスぎりぎりでは発熱や騒音がひどくPC自体が短命になってしまう場合もあります。
 
トリアエズ、そのゲームの推奨PCを買って、他もやりたくなったら、そのまま体験してみて、やばいなぁ~と思ったら、PC買った店で店員に相談するのが一番かも。
ネットなら同じゲームをしてる人の日記を見てみたりするのがいいかもしれない。(上には上がいるし、下には下がいるので逆効果な場合もあるかもしれない。
 
FF14やるから・・・と買ったCPUがLGA1156で、翌年出た次世代型でソケットがLGA1155に急遽替わり、短命になってしまった経緯もあるけど、INTELのHASWELLについては、その次のCPUではマザボに直接ハンダ付けするBGAに変えていくと云うことだったのでLGA1150は短命っぽく変える気はなかったが、暫くはLGA1150を延命する方針になったらしい。この辺もその時期によって変わってくるだろう。
だから、買い替えたいな~とかパワーアップしたいな~と思ったら、PC専門サイトから情報を集めるあたりから始めるといいような気がする。(振り回される可能性も高いけど・・・
宣伝記事もあるので、多少は時系列で記事を読み、他のPC専門サイトと見比べた方がいいだろう。(アタリマエか・・・
 
と云う訳で、全然ためにならない内容になってしまった。
それくらいゲーミングPCを選ぶのは難しいものなのかもしれない。(大笑



何故?Haswell【LGA1150】版Thin Mini-ITXマザー

Thin Mini-ITXの魅力は、薄さである。
何台も用意しなければいけないなら用途(会社のPCの仮想デスクトップ化など)では、厚みが薄いと並べるのが楽だ。1cm低くなれば10台並べると、10cmも余裕が出てくるからだ。規模が大きいほど、実感できる。
Thin Mini-ITXより小さいnuc(規格ではなく企画モノ)はThin Mini-ITXよりちょっと厚い。理由は基盤の片面にコネクタ類とCPUの冷却機構を取り付けるスペースがないので、片面にコネクタ類、反対側に冷却機構を取り付けておりエアーフローの邪魔になる突起物が無いので冷却効率は良くなっているので、一番薄いのはThin Mini-ITXなのだ。
一応、Thin Mini-ITXマザーにもPCIeスロットは付いているが、×4である。ノートPC嗜好であるHaswellではデスクトップ向けではGPUはIvy Bridgeとそう変わらない、またHaswellになってTDPが上がった分しっかり冷却できるのか?ちょっと疑問だったりする。もっとも待機電力はぐっと下がった分、チブチビと使う分には、問題ないだろうけどね。(笑
で、HaswellのThin Mini-ITXにどんな魅力があるだろうか?GPU抜きでBlog鯖でも作るならOKかもしれない。しかしGPUも使う仮想デスクトップ向けとなると、どうだろう?高効率の画面データの圧縮支援でもあればよかったかもしれないがそんなものはないので、白っぽい画面では画面の更新も普通ではあるけど、ロック画面(大抵は黒っぽい)にするとバラバラバラバラとタイル塗りするようなのはげんなりする。そう仮想デスクトップするならそれなりの動画圧縮支援付のGPUが付いてる方がいいのだが、GPUの性能によほど余裕が無ければ無理な話なので、仮想デスクトップはいつまでもバラバラとロック画面に切り替わることになるだろう。
という訳で、デスクトップもIvy BridgeからHaswellに変えても、さっぱり違いが判らないが、Thin Mini-ITXも同じである。
多分、GT3e搭載のnucでも出れば、買い替えてよかった!とでも思うのだろうが、そんな商品が出る予定を聴いたことは無い。(大笑



中華PAD

サムスンのタブレットのバッテリーがへたってしまい、充電しながら使用するしかなくなったので、yahooで特価6000円の中華PADを買ってみた。
専用のACアダプターでは1時間ほどで充電できるが、USBでは電源OFF状態にしないと充電できないっぽい。
電源ボタンをOFFしても、使用1分=バッテリー1%のペースで減っていくので、全く使わないときは長押ししてシャットダウンするのが筋なのだろう。
画面はたったの800×480、ブラウザでみた感じではレンダリングの負荷が大きいようでスクロールするとボヤーっと表示、暫くするとぼやけが消える。解像度が低すぎるのだろうか?
インスト状態のYoutubeではエラーばかりで動画は見れず、PlayStoreからインストしなおし、開発者パッケージのインストも必要だったが、ちゃんと見れるようになった。
3DMarkのベンチは、ダウンロードの時点でかなり時間がかかり、
起動すると、エラー!(大笑
BDレコーダの再生は無理そう。SONYのページでは、RECOPLAとTwonky Beamを入れればBDの録画が見れるハズだが、PlayStoreでRECOPLAを検索すると説明ページまでジャンプせず事実上インスト不可。
色々リンクをたどり、ダウンロードページまで行ってみたら・・・未対応機器のメッセージが出た。
Twonky BeamもBDレコーダの中を検索できるものの再生でエラー。
と結果から観れば惨敗としか云いようがない。
だが、そこが中華PADなのだ。
中華PADでは出来ないことを
スペックはそうかわらない様に見えるのに高値なAndroid製品が実現している。
と云うことはAndroid製品は製品として使えるまでに色々とチューニングが必要だと云うことだ。
タブレットで色々やりたいことができるまでは色々と敷居が高いのだ。
と云うことが判る。
それなのに、
バージョンアップばかりやってるので
最近は高いものばかりになってしまった(大笑
なんとも情けないOSなんだなぁ~
と理解できる。
そして、それを有償でやっているのがMSのWindowsである。
が、最近はアップグレードは無償?路線に傾いているようだが・・・(大笑
今時の使い物になるものと、使い物にならないものを簡単に見比べる方法がある。
電源をOFFだけではなくOSをシャットダウンしてから起動させるだけ
この起動時間が長いほど使い物にならない。
長いのはCPUやGPUが古かったりメモリが足りなかったり、色々理由があるのだ。
でも、アマゾンやyoutubeやブログをちょっと見る分には十分なハードウェアだ。
でも無線の速度が低く、ダウンロード中は操作不能になることもある。
なお、モデル番号はSoftwinerEvb、Androidバージョンは4.1.1。
3DMARKは、空メモリ1GB推奨とかメッセージが出るも進めると途中でハングアップ。
しかしZeepad7.0と認識したようで大雑把なスペックが判った。
Zeepad7.0のスペックは、
Chipset:Allwinner A13
CPU:Cortex-A8
GPU:Mali-400
メモリ:512MB
OS:4.1.1
メモリ容量以外は多分同じなのだろう。
次に買う時はOSのバージョンだけではなくTEGRA3とか4とかGPUもチェックが必要なようだ。
だが全く使えないシロモノではない、電池の減りがはやく、3DMarkやBD録画の再生ができないという欠点は大きいけどね。(大笑
ps
設定の「モバイルネットワークを使用する」にチェックが入っていたのでOFFにした。
何度かのVeriosnUp後に3DMarkが起動できるようになったが「1GB必要です。」というあれれ?なメッセージの後、LOADINGバーが6割ほどで止まる。どうやら空メモリが1GB必要らしい。



GeForce GTX 780 Ti

とりあえず
糊代を全部使い果たしてみました!
という感じがした。
勿論、歩留まりを上げるために削ってあった部分(SMX)を有効化しているのだから、

歩留まりは悪そうだ。

チップの選別を通過できる数はそれなりで、
落選したチップが『前のウルトラハイエンドっぽい名前』でゾロゾロ出回りそうな気がする。
その意味では

憧れのTITANがさらに身近になりそうだ。

既に購入済みの人も、
2枚目や3枚目の購入を考えれば
悪い話ではない。
 
しかし、ゆっくりしてると更なる円安がやってくるかもしれず、
また消費税もあるあがりそうなので、
時期は・・・
むずかしいなぁ~
 
もうウルトラハイエンドは諦める方がいいかも。



VBAのメモ(未検証)~VBでJavaでも読めるUTF-8のファイルを作るには~

どうしてもVBAでUTF8のテキストを作る場合は、ADODB.Streamオブジェクトを利用すると良いらしい。
EXCELシートになってる仕様書からデータを抜いて、Linux系のサーバーにCSVファイルをアップしなければならない場合には便利かもしれない。
なお、こんな面倒なことをするよりは、EXCEL君にはWindows用にシフトJISでCSVファイルを作ってもらい、LinuxサーバーにPHPでテキストをアップするutf-8のコードページのHTMLからアップすればブラウザがコードページを都合良く変換してくれるので汎用で便利なことは云うまでもないし、FFFTPが使えるなら、コードページと改行コードをちゃんと変換してくれそうだが、最近はFTPで接続できないケースが普通なので、FFFTPっぽいPHPのページを作るのが一番だろう。

あると便利な定数

LineSeparator用のLineSeparatorsEnum

定数 説明
adCR 13 改行復帰を示します。
adCRLF -1 既定値です。改行復帰行送りを示します。
adLF 10 行送りを示します。

Typeプロパティ用のStreamTypeEnum

定数 説明
adTypeBinary 1 バイナリ データを表します。
adTypeText 2 既定値です。Charset で指定された文字セットにあるテキスト データを表します。

Openメソッド用のStreamOpenOptionsEnum

定数 説明
adOpenStreamAsync 1 非同期モードで Stream オブジェクトを開きます。
adOpenStreamFromRecord 4 Source パラメータの内容を、既に開かれている Record オブジェクトとして識別します。既定動作では、Source は、ツリー構造のノードを直接指定する URL として処理します。このノードに関連付けられた既定ストリームが開かれます。
adOpenStreamUnspecified -1 既定値です。既定オプションで Stream オブジェクトを開くことを指定します。

textWrite用のStreamWriteEnum 値

定数 説明
adWriteChar 0 既定値です。Stream オブジェクトに対して、Data パラメータで指定したテキスト文字列を書き込みます。
adWriteLine 1 Stream オブジェクトに、テキスト文字列と行区切り文字を書き込みます。LineSeparator プロパティが定義されていない場合は、実行時エラーを返します。

SaveToFile用のSaveOptionsEnum

定数 説明
adSaveCreateNotExist 1 既定値です。FileName パラメータで指定したファイルがない場合は新しいファイルが作成されます。
adSaveCreateOverWrite 2 FileName パラメータで指定したファイルがある場合は、現在開かれている Stream オブジェクトのデータでファイルが上書きされます。

使い方

Dim outStream As Object

Set  outStream = CreateObject(“ADODB.Stream”)

outStream.Type = adTypeText

outStream.charset = “utf-8″  ’規定値は”Unicode” すなわちJavaやJavaScriptと同じUnicode(16ビット)である。

outStream.LineSeparator = adLF ‘LinuxではLFのみがデフォ。

outStream.textWrite   <UTF-8で書き込みたいテキスト>, adWriteLine

outStream.SaveToFile  <ファイル名>, adSaveCreateOverWrite

outStream.Close

※注意

このままではファイルの先頭にUnicodeのテキストを意味する3バイトのBOMコードが付いてしまうので、Javaで読むと痛い目に逢う。

もしサクラエディタを使っているなら作ったファイルを開くと画面右下に「UTF-8 BOM付」と表記されているハズ。

「名前を変えて保存」することでBOMコードは勝手に消えるが、毎回それをやるのも面倒なので・・・
同じことをやればいい。(ハズ 未検証!

outStream.Open       ’SaveToFile で設定した内容を再利用可?

‘バイナリーモードに変え、

outStream.Type = adTypeBinary

‘ファイルの先頭から3バイトのBOMコ-ドを読み飛ばし、

outStream.position(3)

‘中身(UTF-8になっているテキストをバイナリ形式で)を吸い上げる。

Dim binaryData As Variant

binaryData = outStream.read

そして

outStream.Close

もう一度開き直す。

outStream.Open

outStream.Type = adTypeBinary

outStream.Write(binaryData)

outStream.SaveToFile, adSaveCreateOverWrite ’※これが余計な3バイトを消す。ハズ?

outStream.Close

とする。
一抹の不安は、本当にbinaryDataが文字化けしないのか?だが、これはやってみないと判らない(笑
なお、Openメソッドの説明文を読むとCloseしてもプロパティ設定を変更してもう一度開くことができます。と書いてあるのでOpenはオプションなしでOK。
adSaveCreateOverWrite がトランケートしてくれるのか心配なら、Closeした後に一旦ファイルを消すといい。
なお、元ネタはこっちのページ JavaScriptだけど実証済のようだ。



HASWELL版NUC

Celeron 847(第2世代 Sandy -Bridgeモノ)のNUCで間に合っているので、ほとんど関心が無い。
※古いAtomやAMD A-Seriesでは記事を書くにも重かったりしたがCeleron847では支障はなく、放置してても、過熱せず、時々ファンが回る程度で古いAtomより熱を持たない。
だが、今買うならSandy -BridgeやIvy-BrigeよりHaswell(Core i5-4250U)の方が待機時の消費電力が小さくなっているハズなので、Celeron以外なら多少高くてもHaswell版の方が長持ちするだろう。
マザボにはINTELのケースでは使いようが無いSATAコネクタが付いている。これは他社ケースでHDDなどをつなげるようにするためのものだろう。
CentOSのブログ鯖なら64GBもあればOKだが、ゲームでスクリーンショットをバシバシ取ったりプレイ動画を貯めるなら、HDDが欲しくなるので、それなりの需要はあるだろう。ただし、USB3接続の外付けHDDで十分な気もする。
さてFFXIVをするつもりになってこのHaswell版NUCを考えると全く歯が立たない。
通常クロックが1.3GHzと低く、ゲームをするつもりならBIOSでターボブーストをONにして2.6GHzにしておかないとダメだろう。そうしないと、2コアしかないので、4スレッドとは云え、低クロックでは重いセキュリティアプリが足手まといになるのも痛い。更にL3キャッシュがデスクトップ用CPUの半分の3MBなところも気になるところだ。でも、HD graphics 5000だから、HD graphics 4000の2倍近くまで性能が上がっているので、古いMS Surface Proより新しいMS Surface ProやHaswell版NUCの方がマシなのは間違いない。古いMS Surface Proでは標準設定でベンチは2000番台だったから4000近くまで伸びるのなら悪くないだろう。だがそれはターボブーストON時の話。
総評すると、性能は良くなり、待機消費電力が下がるメリットもあり買い替えても良い仕上がりになっている。でも、しっかり価格を上げてきているのので、ベアボーンにパーツ一式を購入した場合を考えると、ノートパソコンやタブレットの方が安くなるので、

NUCとしての存在意義を見失っていると云える。

例えるならハイパースペックで高価なAtomみたいなものになっている。
ストレートにi7-4770Kのパソを一式買った方が困らない。
Iris入りでも出して来たら、気も変わるだろうけど。そんなことはあり得ない。と思う。
まず第一に発熱対策が充分に取れるだろうか?第2世代のAtomの安価セットはほとんどが熱暴走する始末で短命だった。あの二の前はごめんだ。MMOのような何時間もダラダラ遊ぶゲームには向かない。
きつい評価かもしれないが、価格相応の性能ではあるけれど、使い道は一択しかない!

「艦コレ」好きでとりあえずデカい液晶テレビで遊びたい人。

他はパスしてよい。
使い道がはっきりしないなら、このHASWELLのNUCよりMSの新しいSurfaceProを買った方がいいだろうし、もう少し予算があれば巨大なゲーム用パソコンも買える。そんな価格だ。
どうしてもモニターの裏に取り付けたいとかでっかいテレビの横のわずかなスペースにパソコンを置きたい。後は無線のキーボードとマウスでなんとかなる。
そんなシチュエーション以外に使い道は無い。
もちろん小さな子持ちの家族ならそういうシチュエーションもありうるだろう。
だが、小さな子持ちの家族は何かとお金がかかるので、予算は少ない。

結論

お勧めは、お安いCeleron847(1.1GHz)のNUC。
そして、メモリも2個よりは最大容量の8GB1個、SSDも少な目の128GBぐらいが丁度良い。
所詮は小さいNUCなので全体のスペックを上げようとi5やi7でTurboBoostをONにしてもすぐ過熱しクールダウンしてしまい人(PC)がワンさかと出てくるMMOとかRvRではゲーム画面がガクガクになるのは避けられない。BF3など枯れたFPS向け。その辺はミニノートPCと同じ。



スクリプト

早い話が呪文(spell)のことである。

alert(“ひゃっほーい!”);

と書くと

「ひゃっほーい!」(OK)

とメッセージが飛び出る。
何やら難しそうだが、実装は単純。

1.まず、ダブルクォートでサクっと文字を分割。偶数番目の文字の前後はダブルクォートでくくる。

  • alert(
  • “ひゃほーい!”
  • );

2.これを記号で更に分割

  • alert
  • (
  • “ひゃほーい!”
  • )
  • ;

3.適当な語句分析ルーチンに流して、分割した文字列に意味を持たせる。

  • 名前:alert、左括弧(、リテラル:ひゃほーい!、右括弧)、セミコロン;

4.適当な文法解析ルーチンに流して、意味付けをする。

  • 関数名:alert、引数1:”ひゃほーい!”、以上;

5.ここまで来れば、後は

  • alert関数に”ひゃほーい!”を渡して、何かするのを期待するだけ。

と至って簡単である。
最初にダブルクォートで括るのはこれはプログラミングの定説とか信仰とは無関係である。なぜなら「ひゃほーい!」の部分にはダブルクォート以外なら大抵の文字が入ってよいので、文法上は「悪質なスクリプト」を書いても文法上は合法である。そんなもんを書かれるとプログラムはウッカリどころか真面目に解析してしまい厄介なことに明白で最初にそのようなケースをバッサリと除外しない奴は頭がイカれている。
一般には処理を分岐するif文とかloop文やwhile文もあるが、要は「適当な文法解析ルーチン」を作って、「xxx関数にyyyを渡して何かするのを期待する」だけなので何も難しくない。
ただ、String[100]  text;と書くような文法は、JNIなどの外部インタフェースには欲しいが、バッファーオーバーランに出会うとひどい目に遭うのは間違いないので、そのようなバッファは他とは区別し共有メモリ(DNZエリア)に配置するのがよい。外部インタフェースの仕組みは言語やOSさらに32ビット版かか64ビット版かによって、ずいぶんと異なる仕来りでデータを配置しなければいけないので、OSのコンパイラーの構造体の仕様書やEXPORTSインタフェースの仕様を熟読する必要が、仕組みさえ理解すればメモリに仕様通りにデータを並べていくだけ。パラメータが複雑な構造体でも応用できるようにちゃんと組んでしまえば、面倒なバイナリーなダンプ・データを作成の便利なツールにもなる。
色々あるが、これらを都合のいいように、組み合わせれば、大抵のスクリプトのモックアップは完成する。
後は、呪文を組み合わせると、やはり可笑しなことが起こる。
一般通念としては、こうなるハズ!とか、常識的に考えればこうだろう!とかは大抵外れる様にできている。
例えば、AKB48(”xxxxx”);と呪文を唱えたら、どうなるか?
そう、AKB48関数をコードしないと、「知らない関数(AKB48)です」と表示することもせず、ただcoreファイルを吐き出すだけだろう。
スクリプトの難しいところは、

  1. いかにミスをしないように記述できるか
  2. 多少のミスなら無視して処理できるか
  3. ミスを犯した場合に適切なガイドメッセージを表示できるか

など、不注意に対してドレだけ寛容であるかが、使い心地に大きな影響を及ぼす。
だから、1文字間でも違えたらHDDがクラッシュするのは仕様ですなんて論外である。
 
以上。
 




top