変奏現実

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

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

カウンター

Today : 2510
たまに馬鹿みたいにカウンターが上がります。
プロバイダー(ISP)のBOTが一斉に挨拶に来たようです(笑
BOTが持ち出した内容を人が見たら、ブログの分類に悩むんじゃないかな?
分類は【趣味】でお願いします。
このブログの真の目的は、自宅でのCentOS+WorsPressの長期運用ですから、
記事の内容はかなり適当です。
ご了承ください。
実際、ここのブログはよく止まります。
多くはDDNSのIPアドレス更新が失敗してたりしますが、
原因不明でapacheが無反応だったり、
TeraTermですら入れずリセットなんてこともあります。
ログを見てみると、突然パタッと止まってるんで
熱暴走なのかも。
更新する度にファンが回る音がしますね。
やっぱりホコリがたまってるかな?
ps.
臨時メンテ(お掃除)は終了しました。
ホコリは溜まっていなかったので室温のせいかな?
このブログは安いCeleron847 NUC
+無線LAN(INTEL純正)
+SSD(60GB)
+DDR3(4GB)1枚
CentOS6+WordPressで稼働しています。

# df -h
Filesystem            Size  Used Avail Use% マウント位置
/dev/mapper/vg_***-lv_root
                       50G  8.2G   39G  18% /
tmpfs                 1.7G     0  1.7G   0% /dev/shm
/dev/sda1             485M  139M  321M  31% /boot
/dev/mapper/vg_***-lv_home
                      5.7G  472M  5.0G   9% /home
# free
             total       used       free     shared    buffers     cached
Mem:       3366440     914636    2451804          0      19212     182316
-/+ buffers/cache:     713108    2653332
Swap:      3506168          0    3506168


node.jsを起動してみる

windows版をインストールすると
環境変数PATHに2つパスが追加されている。
コマンドプロンプトで確認すると
C:\Users\{ユーザ名}>echo %PATH%
C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\Wind
owsPowerShell\v1.0\;C:\Program Files (x86)\ATI Technologies\ATI.ACE\Core-Static;
C:\Program Files (x86)\QuickTime\QTSystem\;C:\Program Files (x86)\nodejs\;C:\Use
rs\{ユーザ名}\AppData\Roaming\npm
となっているので、
C:\Users\{ユーザ名}>node
>
で、準備OK。
しかし
> node -v
ReferenceError: node is not defined
at repl:1:1
at REPLServer.defaultEval (repl.js:129:27)
at REPLServer.b [as eval] (domain.js:251:18)
at Interface.<anonymous> (repl.js:277:12)
at Interface.EventEmitter.emit (events.js:103:17)
at Interface._onLine (readline.js:194:10)
at Interface._line (readline.js:523:8)
at Interface._ttyWrite (readline.js:798:14)
at ReadStream.onkeypress (readline.js:98:10)
at ReadStream.EventEmitter.emit (events.js:106:17)
>(Ctrl+Dで終わる)
そうそう
C:\Users\{ユーザ名}>node -v
v0.11.7
C:\Users\{ユーザ名}>npm -v
1.3.8
C:\Users\{ユーザ名}>
なのだ。
さてデバッガをインストールしてみよう。

C:\Users\{ユーザ名}>npm -g install node-inspector

まだ、開発バージョンのせいだろう。
3回コマンドを繰り返えしたら成功した。
C:\Users\{ユーザ名}>npm -g install node-inspector
npm http GET https://registry.npmjs.org/node-inspector
npm http 304 https://registry.npmjs.org/node-inspector
npm http GET https://registry.npmjs.org/socket.io
npm http GET https://registry.npmjs.org/rc
npm http GET https://registry.npmjs.org/strong-data-uri
npm http GET https://registry.npmjs.org/express
npm http GET https://registry.npmjs.org/async
npm http GET https://registry.npmjs.org/glob
npm http 304 https://registry.npmjs.org/rc
npm http 304 https://registry.npmjs.org/socket.io
npm http 304 https://registry.npmjs.org/glob
npm http 304 https://registry.npmjs.org/async
npm http 304 https://registry.npmjs.org/express
npm http 304 https://registry.npmjs.org/strong-data-uri
npm http GET https://registry.npmjs.org/deep-extend
npm http GET https://registry.npmjs.org/optimist
npm http GET https://registry.npmjs.org/ini
npm http GET https://registry.npmjs.org/truncate
npm http GET https://registry.npmjs.org/inherits
npm http GET https://registry.npmjs.org/minimatch
npm http GET https://registry.npmjs.org/range-parser/0.0.4
npm http GET https://registry.npmjs.org/commander/1.3.2
npm http GET https://registry.npmjs.org/connect/2.11.0
npm http GET https://registry.npmjs.org/send/0.1.4
npm http GET https://registry.npmjs.org/methods/0.1.0
npm http GET https://registry.npmjs.org/fresh/0.2.0
npm http GET https://registry.npmjs.org/buffer-crc32/0.2.1
npm http GET https://registry.npmjs.org/cookie/0.1.0
npm http GET https://registry.npmjs.org/mkdirp/0.3.5
npm http GET https://registry.npmjs.org/cookie-signature/1.0.1
npm http GET https://registry.npmjs.org/debug
npm http GET https://registry.npmjs.org/socket.io-client/0.9.16
npm http GET https://registry.npmjs.org/policyfile/0.0.4
npm http GET https://registry.npmjs.org/base64id/0.1.0
npm http GET https://registry.npmjs.org/redis/0.7.3
npm http 304 https://registry.npmjs.org/deep-extend
npm http 304 https://registry.npmjs.org/optimist
npm http 304 https://registry.npmjs.org/ini
npm http 304 https://registry.npmjs.org/truncate
npm http 304 https://registry.npmjs.org/cookie-signature/1.0.1
npm http 304 https://registry.npmjs.org/send/0.1.4
npm http 304 https://registry.npmjs.org/debug
npm http 304 https://registry.npmjs.org/minimatch
npm http 304 https://registry.npmjs.org/inherits
npm http 304 https://registry.npmjs.org/fresh/0.2.0
npm http 304 https://registry.npmjs.org/mkdirp/0.3.5
npm http 304 https://registry.npmjs.org/base64id/0.1.0
npm http 304 https://registry.npmjs.org/redis/0.7.3
npm http 304 https://registry.npmjs.org/methods/0.1.0
npm http 304 https://registry.npmjs.org/socket.io-client/0.9.16
npm http 304 https://registry.npmjs.org/connect/2.11.0
npm http 304 https://registry.npmjs.org/buffer-crc32/0.2.1
npm http 304 https://registry.npmjs.org/cookie/0.1.0
npm http 304 https://registry.npmjs.org/commander/1.3.2
npm http 304 https://registry.npmjs.org/range-parser/0.0.4
npm http GET https://registry.npmjs.org/lru-cache
npm http GET https://registry.npmjs.org/sigmund
npm http GET https://registry.npmjs.org/mime
npm http GET https://registry.npmjs.org/keypress
npm http GET https://registry.npmjs.org/wordwrap
npm http GET https://registry.npmjs.org/qs/0.6.5
npm http GET https://registry.npmjs.org/uid2/0.0.3
npm http GET https://registry.npmjs.org/bytes/0.2.1
npm http GET https://registry.npmjs.org/pause/0.0.1
npm http GET https://registry.npmjs.org/methods/0.0.1
npm http GET https://registry.npmjs.org/raw-body/0.0.3
npm http GET https://registry.npmjs.org/negotiator/0.3.0
npm http GET https://registry.npmjs.org/multiparty/2.2.0
npm http 304 https://registry.npmjs.org/policyfile/0.0.4
npm http GET https://registry.npmjs.org/uglify-js/1.2.5
npm http GET https://registry.npmjs.org/ws
npm http GET https://registry.npmjs.org/xmlhttprequest/1.4.2
npm http GET https://registry.npmjs.org/active-x-obfuscator/0.0.1
npm http 304 https://registry.npmjs.org/sigmund
npm http 304 https://registry.npmjs.org/lru-cache
npm http 304 https://registry.npmjs.org/wordwrap
npm http 304 https://registry.npmjs.org/mime
npm http 304 https://registry.npmjs.org/keypress
npm http 304 https://registry.npmjs.org/methods/0.0.1
npm http 304 https://registry.npmjs.org/bytes/0.2.1
npm http 304 https://registry.npmjs.org/uid2/0.0.3
npm http 304 https://registry.npmjs.org/negotiator/0.3.0
npm http 304 https://registry.npmjs.org/raw-body/0.0.3
npm http 304 https://registry.npmjs.org/pause/0.0.1
npm http 304 https://registry.npmjs.org/qs/0.6.5
npm http 304 https://registry.npmjs.org/multiparty/2.2.0
npm http GET https://registry.npmjs.org/readable-stream
npm http GET https://registry.npmjs.org/stream-counter
npm http 304 https://registry.npmjs.org/xmlhttprequest/1.4.2
npm http 304 https://registry.npmjs.org/active-x-obfuscator/0.0.1
npm http 304 https://registry.npmjs.org/uglify-js/1.2.5
npm http 304 https://registry.npmjs.org/ws
npm http GET https://registry.npmjs.org/zeparser/0.0.5
npm http GET https://registry.npmjs.org/tinycolor
npm http GET https://registry.npmjs.org/commander
npm http GET https://registry.npmjs.org/options
npm http GET https://registry.npmjs.org/nan
npm http 304 https://registry.npmjs.org/readable-stream
npm http 304 https://registry.npmjs.org/stream-counter
npm http GET https://registry.npmjs.org/core-util-is
npm http GET https://registry.npmjs.org/debuglog/0.0.2
npm http 304 https://registry.npmjs.org/zeparser/0.0.5
npm http 304 https://registry.npmjs.org/nan
npm http 304 https://registry.npmjs.org/tinycolor
npm http 304 https://registry.npmjs.org/commander
npm http 304 https://registry.npmjs.org/options
> ws@0.4.31 install C:\Users\{ユーザ名}\AppData\Roaming\npm\node_modules\node-inspector\
node_modules\socket.io\node_modules\socket.io-client\node_modules\ws
> (node-gyp rebuild 2> builderror.log) || (exit 0)
C:\Users\{ユーザ名}\AppData\Roaming\npm\node_modules\node-inspector\node_modules\socket.
io\node_modules\socket.io-client\node_modules\ws>node “c:\Program Files (x86)\no
dejs\node_modules\npm\bin\node-gyp-bin\\..\..\node_modules\node-gyp\bin\node-gyp
.js” rebuild
npm http 304 https://registry.npmjs.org/debuglog/0.0.2
npm http 304 https://registry.npmjs.org/core-util-is
C:\Users\{ユーザ名}\AppData\Roaming\npm\node-inspector -> C:\Users\{ユーザ名}\AppData\Roaming\np
m\node_modules\node-inspector\bin\inspector.js
node-inspector@0.5.0 C:\Users\{ユーザ名}\AppData\Roaming\npm\node_modules\node-inspector
├── async@0.2.9
├── strong-data-uri@0.1.0 (truncate@1.0.2)
├── glob@3.2.6 (inherits@2.0.1, minimatch@0.2.12)
├── rc@0.3.1 (deep-extend@0.2.6, ini@1.1.0, optimist@0.3.7)
├── socket.io@0.9.16 (base64id@0.1.0, policyfile@0.0.4, redis@0.7.3, socket.i
o-client@0.9.16)
└── express@3.4.4 (methods@0.1.0, cookie-signature@1.0.1, fresh@0.2.0, range-
parser@0.0.4, buffer-crc32@0.2.1, cookie@0.1.0, debug@0.7.2, mkdirp@0.3.5, comma
nder@1.3.2, send@0.1.4, connect@2.11.0)
では何か動かしてみよう

C:\Users\{ユーザ名}にこんなhellow.jsを作ってみる。
var http = require('http');
var server = http.createServer(function(req, res){
   res.writeHead(200, {'Content-Type': 'text/plain'});
   res.write('Hello World\n');
   res.end();
});
server.listen(3000);
C:\Users\{ユーザ名}>node --debug hellow.js
debugger listening on port 5858
と出るので、ブラウザ(FireFox)から http://127.0.0.1:5858/ を見ると、
Type: connect
V8-Version: 3.20.17
Protocol-Version: 1
Embedding-Host: node v0.11.7
Content-Length: 0
しか出ない。
コマンドプロンプトには
GET / HTTP/1.1: (no value)
Host: 127.0.0.1:5858
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:24.0) Gecko/20100101 Firefo
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ja,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive
Cache-Control: max-age=0
とログが出た。
では、デバッガを起動し、

C:\Users\{ユーザ名}>node-inspector
Node Inspector v0.5.0
info  – socket.io started
Visit http://127.0.0.1:8080/debug?port=5858 to start debugging.

ブラウザ(FireFox)から http://127.0.0.1:8080/debug?port=5858 を見ると、

node.jsのデバッガ画面
node.jsのデバッガ画面



とソレっぽい画面は出てくるものの何も出ない。(大笑
とりあえず、IDEっぽいものは既にあるようだ。
説明ページもあったが、
Windowsではまだまだのようだ。
デバッガが
lob error { [Error: EPERM, readdir ‘C:\Users\{ユーザ名}\AppData\Local\Microsoft\Windows
INetCache\Content.IE5’]
errno: -4049,
code: ‘EPERM’,
と延々とパスをサーチしてしまう。
次はCentOS6でやってみよう。
 
 



デスクトップの仮想化

早い話がテレビ会議風に向こう側のPCを操作するようなものだ。
遠く離れたPCをデスクトップを見ながらリモートで操作するのは便利と云えば便利。
しかし常時リモートで接続すると結構不便。
1.リモードデバイスの接続は超低速。
ちょっと手元のUSBメモリを接続して小さなファイルをコピーするには便利だが、デバイスと相手先のデータ転送のプロトコル自体が非常に低速で何百MBサイズにも不向き。容量が大きいなら共有フォルダを使うべきだろう。これはVirtual-PCやHyper-Vも同じ。
2.マウスの操作に追いつけない。
マウスを持ってグルグル回す分には支障ないようだが、いっぱいファイルをドラッグしたりすると、ドコに落としてしまうか判らない。
3.広帯域のネットワークが必要。
情報満載のパワポの派手なアニメーションはOFFかワイプに変えるべき。同じLANで10台くらい一斉に同じことをすると、パケ落ち必至。
 
なので、コレを使って手元のPCをサーバー室に放り込むなんてことをすると、LANは当然高速化しなければいけないし、ハブだって大容量が扱えラグの少ないものにしないと話にならない。
 
そんな訳でLANコストはとんでもないことになる。
その辺にバラバラとPCを置いた方が低コストだ。
 
さらに云えば、たとえデスクトップを仮想化しても共有EXCELファイルは共有EXCELファイルのまま扱うしかないので、本当のところ仕事でビジネスでデスクトップを仮想化するのはコストがかかるだけだ。
ビジネスで本当にやらなければいけないのはリソースの仮想化だろう。
平たく言えば、共有EXCELファイルとか共有なんて考えずに使えるものが必要だ。
もっとはっきり云えば、EXCELなんて中途半端なもので仕様書を書くことを即刻辞めることだ。
中途半端が一番悪い。
 
 



node.jsその後

node.js
まずインストール(v0.11.7 (開発版))してみると
Windowsなら
デフォのままならC:\Program Files (x86)\nodejsにインストールされる。
ちゃんとインストーラを使っているのでアンスコも簡単。
しかしパッケージリストが無い。
とりあえず node.exeを実行してスクリプトを流せばよいらしい。
使えそうなパーツなどはnode_modulesフォルダの中にあり
npmツールで管理している。
そつのない。簡素な感じ、多分、何か書き出せば
http.createServerのオンパレードになるのなら、なぜこうなっているのだろう?
 
やはり、ずーっとサーバーを相手にしているとIDEなんて

メンドクサイ

と云うことになるのだろう。
 
ま、欲しいなら作ればいいのか(笑
Eclipse風でいいなら、ビューがあればいい、そしてビューをセットアップしたパースペクティブを作っておけばよいのだろう。
後はソースレベルデバッガだが・・・ブラウザをコンソールにしないとIDEの意味が無い。
node.exeに簡単なブートストラップのコードを入れて、ブラウザから送られたjsコードを実行したりデバッグできればいい。
そうなると、svnとかGitとかリポジトリィで作ったものを勝手にバックアップさせるような仕組みが無いと危ない。
なぜなら、ブラウザは【X】ボタンを押せばすぐ閉じてしまう性質があるし、クッキーサイズにいつでもプロジェクトのコードを一式まとめておくことがいつもできる訳ではないからだ。
多分、リポジトリィは thunk   run/debug  package に分けると良いのだろう。
あと、HTMLやPDFを吐き出すレポートライターがあればいいな。
データベースと繋ぐ時はどうしよう?
JDBC?そんなものは無い。
と云う訳で、グラフィカルな開発環境はかなり遠い未来にあるようだ。



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と同じ。



iPad Air の強気な価格

600gとちょっと重かったi padが3割もダイエットしCPUもパワーアップすることになった。
モニタ解像度も 2,048 × 1,536 と ぐっと細かくなっている。
日本では5万1800円から と、旧製品より1万円高くなる予定
なんと云うか
ステイタス・シンボルっぽいブランドになろうとしているようだ。
故人の恩恵にあやかろうとすれば・・・
価格を上げるのは普通なのかもしれない。
だが、
本当のところ、安いデバイスでサービスを拡大していく路線はかなり厳しい。
本当に安いチップは性能も半端なく劣るし、記憶容量も少なく、アクセス速度も遅く、そして寿命も妙に短い。
だから、ユーザの不満(おっそい、電池がすぐなくなる、電波が途切れる・・・など)を打ち消すようなスペックのデバイスを発売すれば
大抵は価格が上がってしまう。
それに閉口しだすと、そこそこのものがそこそこの値段で出てくる。
要は、その時々の売れ筋次第なのだ。
 
ただ、おねだりばかり口にしていると、超高級品ばっかりになってしまうのが、e-コマースの最大の弱点である。
 
 
 



すべてのネットサービスで異なるパスワードを?

そうしているが、やはり、覚えきれるわけがない。
どっちかと云えば
面倒になってしまい
「いつものサイトだけ買い物する」ようになるだろう。
つまり、これは実質的な

既成e-コマースサイトの囲い込み策

である。
最近はアカウントのアタック騒動が多いと思っていたが
そういう裏があったと思えば納得できる。
 
クラウドビジネス真っ盛りなので
アカウント・アタックを仕掛けても大した金はかからないハズだ。
だが、儲けがないなら、やるだけの意味はない。
そこが不思議だった。
 
それは、コンピューター・ウイルスをどんどん作ってる輩も同じ。
最初は趣味でやってたのかもしれないが、それでは、当の昔にさびれているはずだった。
だが、軍やら諜報組織が裏に付くようになり今でも盛んにやっているようだ。
 
そう、裏に何かが付いているハズ。
そう思ってた。
 
やっと、判った。
 
ま、呆れた話ではあるけどね。



レポートライター

所定のデータを差し込んでPDFやHTMLファイルを作成するツール。
ワードやEXCELの文書ファイルを作れるものもあるし、テキストファイルに出すものもある。
テキストファイルに出せるならCSVファイルにも当然出すことができるが、レイアウト画面を延々とカンマで埋める作業になるだろう。
ここまで来るとテキストファイル変換ツールといっていいだろう。
こんなフォーマットテキストと
“{name},{zip},{address1},{address2},{address3},{tel1},{tel2}\r\n”;
List<xxxBean>のデータを添えてやるとListの要素分、行を出力させるのは、そう難しくない。
xxxBeanから任意の名前のgettorを手早く呼び出す方法を思い出す方がメンドクサイくらいだ。
ちょっとフォーマットを変えて
“<xml><name>{name}</name>\
<zip>{zip}</zip><address1>{address1}</address1>\
<address2>{address2}</address2><address3>{address3}</address3>\
<tel1>{tel1}</tel1><tel1>{tel2}</tel2>\
</xml>”;
にするとXMLファイル出力の出来上がり。
できれば、{zip}を{zip format:000-0000}などどフォーマット指定ができるとうれしい。
yyyy-MM-dd HH:mm:ss.SSS なんかもできるといいだろう。
そうなると”で括った方が安心とか、
現在日時を楽に出したいとかあって、
{@systemDate, format:”yyyy-MM-dd HH:mm:ss.SSS”}
とかに、なるんだろうな。
 
ひとつ作っておくと便利そうだ。
そう、自分で作っておけば勝手に拡張できるからね。(笑
jndi指定でデータベースからデータを引っ張りだすとか、
EXCELシートから
とか後付けできるかもしれないからね。
 
 
これで年賀状の宛名書きは万全・・・のハズ。



スクリプト

早い話が呪文(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