変奏現実

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

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

2013 / 4月

Node.jsは癌?否WEBそのものが癌である

Node.jsは癌だ。
そう云っている人がいる。
まあぁ~、それは真実である。
実は単純なプログラムでさえI/Oブロッキングしないように記述するのは大変なのだ。

  1. ファイル1を読む。
  2. ファイル2に書き出す。

こんな単純な2行プログラムでも、ファイル1がHDDにあるだけで、I/Oブロッキングしかねない。
UNIX風に書けば、
cat ファイル1 > ファイル2
である。
世の中広いから・・・
一行だからI/Oブロッキングで待ちぼうけを食らう2行目が無いので、
ありえないとか言い出す奴もいるかもしれない。(爆
が、

が出てくるまで1分もかかれば立派なI/Oブロッキング状態だろう?
だって、#を待っているボクが居るのだから。
UNIXのシェルの逐次処理(一行づつしっかり手順を踏んで実行する処理の仕方)とはそう云うものであり、
そうUNIXだろうが、Javaだろうが、Windowsだろうが、MS-DOSだろうが、コマンドプロンプト(端末)はどれも同じである。
これを回避するためには、イベント・ドリブンなプログラム構造が必要だ。
例えば、

イベント・マネージャに

イベント1:ファイル1を読み終わった。

実行1:ファイル2に書き出すイベント1を実行する

とイベントを登録する。
な様な感じでI/Oブロッキングする部分をイベント・マネージャに繋いでもらう必要があるので、
たった2行のプログラムを2つに別けなくてはいけない。
ということは、I/Oブロッキングの可能性がある箇所がいっぱいあるプログラムはかなり分割しなければならない。
もし、大量のコードからI/Oブロッキングを探し出し、プログラムを分割するのは厄介な話だ。
だから、
Node.jsは癌だ。
# cat ファイル1 > ファイル2 &
で十分だと云いたいのだろう。
見慣れた例で云えば

Windowsのコマンド・プロンプトで

# cat ファイル1 > ファイル2

# が出るまで、他にやることを片付ける。

かもしれないが、
ドコかで、誰かが、I/Oブロッキングを隠ぺいしていることに違いは無いのだ。
これは、UNIXだろうが、Javaだろうが、Windowsだろうが、MS-DOSだろうが、同じである。
それにCPUパワーを裏で使っているので、
1コマンドで1分かかるなら・・・
# cat ファイル1 > ファイル2 &
・・・
# cat ファイル1 > ファイル2 &
と1000回打てばHDDだったら、とんでもないことになる点を見ないようにしているトコロがズルい。(ココが問題なのにね。
これも、UNIXだろうが、Javaだろうが、Windowsだろうが、MS-DOSだろうが、同じである。
見慣れた例で云えば

Windowsで、大量のファイルをコピー!重い!

暇!

その間にEXCELで重いシートを開く!

とかすると両方がHDDを奪い合い・・・

EXCELが(反応しません)になってる!

 な状況と思ってくれればいい。
こんな考えで作られたWEBサーバーだからこそ、24時間監視しないと困ると云っていい。
つまり、Node.jsは、CPUの速さの割に、遅いDDRメモリやHDDが実在すると、
並行処理なんてしない方がマシじゃないの?
という現実味のあるところから出てきたものでもあるのだ。
 
だから、Node.jsでのI/Oブロッキングが発生するのは当たり前として、
設計レベルで通信と実際の処理を非同期化して対処できてしまうので、別に気にしなくても良い問題でもある。

タスク1:リクエストを受信した ⇒ タスク・リスクの最後に追記する ⇒ 「受信しました。結果をお楽しみに」と返信を返す。

タスク2:タスク・リスクの先頭のリクエストを読み実行するを永遠に繰り返すスレッドを1000個動かしておく。

と、するだけで容易にI/Oブロッキングは隠ぺいされる。
更に処理時間の実績が一定以上(我慢の限界)を越えたものは自動的にフラグを立てて、一度に複数の処理を実行しないように(Javaならsynchronize宣言かな?)制御するともっとよいだろう。
# ********** & 式にバックグラウンド処理へドンドン投げる方式よりは、遥かにマシだろう?
注:当初はバックグラウンド処理へドンドン投げると詰まってしまうならサーバーを増やせばよい。と云うことになっていた。
後は、ブラウザのHTMLの中のJavaScriptに非同期通信の受信イベントで返信を受け取る様に仕込んでおけばよいのだ。
てか、WEBで1000個のスレッドが目詰まりするような処理は、別のサーバーに分担させるのが、王道だろう?
これも、UNIXだろうが、Javaだろうが、Windowsだろうが、MS-DOSだろうが、同じである。
更に付け加えれば、
Apacheの様に多数のスレッドが目詰まりするような事態が起きればクラッシュしかねないサーバーには到底任せられない処理をガンガンとI/Oブロッキングが起きることを理解しつつあえてNode.jsで実装する方がマシだったりする。
と云うのも、Node.jsで作ったサービスが落ちたら、そこだけ、
再起動!
すれば良いだけなので、とても簡単だからだ!
どうせ、オンライン・サーバーは全部監視しているのが常なので、
サーバーを分割したから、落ちてたのを気が付かなかったらどうする?とか、考える方が変なのだ。(大笑
仮に、オンライン・サーバーを一本化し、入念に監視することで、稼働監視を完全なものにすると考えたとしよう。
しかし、それは無意味だ。
炎上すれば、止まってしまうか、止めてしまうかの違いでしかない。
あえて云えば、高価なサーバーはそうそう増やせないというところか。
だからこそ、重い処理は、止められない高価なサーバーから、止まってもいい高価なサーバーへ移し替えるべきなのだ。
入口の処理が心配なら、並の数台のサーバーを用意して、分散処理させれば、かなり安く仕上げられるだろう。
つまり、最前線に歩兵を行かせて、後方から高価な戦車で援護射撃する手法である。
実際の戦場でこんな運用をやったら死人が出過ぎて話にならない様な気もするが、遮蔽物の少ない砂漠等では有効な戦術である。
それにWEBの話なら、死ぬのはレンタル機器、しかも再起動すれば生き返るゾンビーサーバーなので、困らない。
要は使い様なのである。
話がそれてしまったが・・・
コンピュータ言語の良しあしは、使い道が間違っているトコロで論じられることが多い。
そこが主な原因であって、言語自体に特に問題はない。
古臭いCOBOLでさえ、まっとうな使い道があるなら、使えばよいだけの話である。
 
もっとも、それができるSEがどれだけいるか?
と問われたら・・・
実在しないだろうな・・・
としか答えられない。
だって、一つのシステムにそれぞれに最適な言語を割り当てたら10以上になった・・・とか
目も当てられないですからね。
 
それにボクがCOBOLが嫌いなのは、実はそれを扱う仕事のやり方が嫌いなのである。
例)プログラムを作り、デバッグを終えた後に、変数の名前を揃えるから、やりなおせ等。
と云うところに重点を置いているのであって、COBOL自体はどうでもいいだ。
使い物ならないなら、使わないだけなのだから。



迷えるネットサーファー

このサイトの閲覧者の半分は
google検索で間違ってココのリンクを押した人が多いようだ。
TOPページは45.7 KB (46,863 バイト)と結構でかい。
一応WordPressがスマフォ対応しているので以前に比べれば軽くなってはいる。
といってもデフォの軽いテーマになってるだけ
Multi Device Switcher
も、入れてみたが効果なし。

Strange Little Town

の作り方のせいで、うまく働かないのだろう。
 
 



Haswellの動向

もうメーカー向けには出荷済みだそうで、6月のお披露目には一斉に発売する体制は着々と進んでいるらしい。
まず待機電力を大幅に下げモバイル系で使ってもバッテリーの持ちを良くする方策がメインらしい。
Haswellの目玉はultrabookだろうから、
6月には
Surface PRO***

GoogleBook***
も出るだろう。
勿論、
DynaBook***
もだ。
そしてデスクトップ向けもファンレスを目指す様だ。
しかし、ファンが無ければ省エネ風味なだけで、高負荷時はファン無しの方が排気温がとても高く、室内の台数が多ければクーラーが必要になる。CPUの耐熱温度を100℃まで上げれば済むかもしれないが、それでは周囲のメモリやSSDの寿命をかなり削ることになるだろう。それに常時高温になればプラ部品が脆くなりやすいことも要注意だ。
※オーバークロックするとプッシュ式の固定ピンは脆くなりやすい。
本来ならNUCのようにPCケースに密着し緩慢な放熱に頼る方がいいので、裏面にCPUを載せたり、CPU部分をドーターボードにして裏表を切り替えられるマザボも出現するかもしれない。
そうなればPCケースもファンレスへの対応が余儀なくされるので、売れ筋がかなり変わってくるだろう。
グラボの方は依然としてファンが必要なので、DELLの小型ゲームPCのようにPCI-eにアダプターを付けてグラボを寝かす省スペースケースも出回るかもしれない。
そんなミニミニ・ゲームPCが出てきたら、また買ってしまうかもしれない。(笑
といっても、RADEON HD7950(3スロット占有タイプ) と CPU+メモリ+SSD搭載ボードがツインタワーになってる様な気もするが・・・
電源の小型化も必要だろう。
1KWのACアダプターも出てくるかもしれない。(大笑
しかし、ゲーマー(廃パワー指向)はどうするのだろう?
i7-3770Kを使い続けるしかないのだろうか?
 
~今日のスパム~
自家用ヘリのセールスマンばかりだった。特にアラビア語が多かった。



ThunderBird don't read uuencode mail

そう、uuencodeしたメールが読めない。
# uuencode chkrootkitcmd.zip  chkrootkitcmd.zip|mail root
したら、文字がだらだらと続くメールになった。
このためダケに yum install uuencode したのに
ThunderbirdはMIME形式なら読める。
mimeencodeってコマンドもあるらしいが・・・・入ってない。yumにもない。
どうしよう?
Perlで頑張ってSendMiMeMail.plなんてのを作ってる人もいる。
nkf でできるらしい?
# nkf -v
・・・
m[BQN0] MIME decode [B:base64,Q:quoted,N:non-strict,0:no decode]
M[BQ] MIME encode [B:base64 Q:quoted]
・・・
ふむ
nkf -Mt chkrootkitcmd.zip|mail root
※オプションは、M:MIME形式する + t:文字コードのコンバートしない(爆
で、どうだろう?
読めた。
cat  chkrootkitcmd.zip|mail root
でも、読めた。
多分、わけわからから添付ファイルと云うことにしよう ってことなんだろう。
MIMEってヘッダ+BASE64なんだから
base64コマンドを使えばよかったのかもしれない。
 



よくあること

開発のスケジュールを見ると結構余裕あるな?と思ってみると、
査読とかレビューの時間が大半だったりすることが多い。
つまり、xxxを作るスケジュール=ソースを作る+テスト+ソースレビュー
なのだ。
困ったことにレビュワーの時間なんて都合が付かないことが多い。
なぜなら、レビュワーとして参加する時間はスケジュールに1秒も入っていないのだ。
ま、それはそれで文化なんだろけど、
文化の始まりにはsvnどころかcvsも無かっただろうから・・・(笑
ソースの組み込みはすべて手作業であっただろう。
故にレビューしておかないと知らないうちに
変てこなモノがシステムに組み込まれてしまうからだ。
だから、必要だったのだろう。
長いソースを印刷してレビューすることもある。
しかし、今はsvnやcvsがあるからコミットし、レビュワーに事前に読んでもらうこともある。
そこが一大事。
ソースを配布してからレビューすることになる。
たまにソースが真っ赤っか(シンタックスエラー)なんてことも共有しているソースなんだから起こりうるのだ。
コンパイルできません。
今日は帰るか。
なんて云うこともある。
※云うだけだけどね。
つまり、しっかりレビューをする文化は容易にsvn上でシンタックス・エラーを起こしてしまうのだ。
そんな訳で、安全策として、自分用のローカル・リポジトリと共有リポジトリを分けてるようなものが、だんだん増えている。
GitのGitHubみたいにね。
だが、レビュワー視点でものを考えると、
シンタックスエラーなソースをコミットした奴が悪い程度にしか思わないから、
それで割りを食っているその他大勢のことは無関心で、
そんなものは導入することなぞ、考える余地がある訳もない。
 
そう先の「後で名前を揃えればいいや!」と同じである。
 
このように非常に非効率的な仕事のやり方は一般的でドコでもやっている極普通なやり方である。
マネージャ研修でレビューの重要さを叩き込まれても
スケジュール管理の難しさを教えられても
マネージャの都合に見合ったクリティカル・パスを引く。
はっきり云えば何かのイベントをスケジュールに上塗りするだけ。
都合の悪いところにクリティカル・パスを絶対引かない。
スケジュールが送れる予想が付くのが嫌なのだ。
はっきり云えば、スケジュールが間に合うかのようにクリティカル・パスを引いてしまうのだ。
当然だが、
その文化は、毎日せっせと元気良くデスマーチの道を歩むためのものでしかないのである。
南無南無。



「mcrypt 拡張をロードできません。PHP の設定を確認してください」

# yum -y install php-mcrypt

Setting up Install Process

Package php-mcrypt-5.3.3-1.el6.rf.x86_64 already installed and latest version

Nothing to do

インスト済なのに

# yum remove php-mcrypt

# yum -y install php-mcrypt

Installed:
php-mcrypt.x86_64 0:5.3.3-1.el6.rf

# service httpd restart

httpd を停止中: [ OK ]
httpd を起動中: [ OK ]

しても、

mcrypt 拡張をロードできません。PHP の設定を確認してください

(謎
php.iniを見ると、
;;;;
; Note: packaged extension modules are now loaded via the .ini files
; found in the directory /etc/php.d; these are loaded by default.
;;;;
phpの拡張モジュールは /etc/php.d にiniファイルを配置すればいいらしい。
そこには/etc/php.d/mcrypt.ini があった。
; Enable mcrypt extension module
extension=module.so
と書いてある。
# find / -name  module.so -print
しかし、見つからなかった。
その先の答えはコマンドプロンプトにあった。
# php
PHP Warning: PHP Startup: Unable to load dynamic library ‘/usr/lib64/php/modules/module.so’ – /usr/lib64/php/modules/module.so: cannot open shared object file: No such file or directory in Unknown on line 0
^C ※入力待ちになっているので、Ctrl+Cで止めなといけない。
こっちかな?
# php -v
PHP Warning: PHP Startup: Unable to load dynamic library ‘/usr/lib64/php/modules/module.so’ – /usr/lib64/php/modules/module.so: cannot open shared object file: No such file or directory in Unknown on line 0
PHP 5.3.3 (cli) (built: Feb 22 2013 02:51:11)
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
64ビット版のLinuxのPHPが使うモジュールは、
/usr/lib64/php/modules/の下にあるらしい。
確かに
/usr/lib64/php/modules/module.so
は無く、
/usr/lib64/php/modules/mcrypt.so
がソレっぽかった。
/etc/php.d/mcrypt.ini を修正
extension=mcrypt.so
に書き換え、service httpd restartでOK。
 
トラブルが起こると、Linuxの中身に詳しくなれるね。
無線LANでも、/etc/sysconfig/network-scriptsの中のシェルファイルを読んでみたりと、
プロの運用でも一生読むことが無さそうなソースを読む機会に恵まれる。(大笑
※尚、この問題は現在(CentOS6.6)も修正されておりません。CentOS7では修正済。2014/11/3



Blog鯖のバックアップ

気が向いたときにしかバックアップしていない。
でも rsync で、パソを起動した後に、勝手にBLOG鯖の中身をパソにバックアップしてくれたら楽そうだ。
/etc とか /var/www /root  あたりかな
/var/log/* も日付でファイルをローテートすれば、履歴が残せそうな気もするが・・・
Blog鯖  rsync  最小限インストールでインスト済。
でも、バックアップファイルを作ってるとSSDの痛みが激しくなりそうなので
リアルタイムミラーリングツール導入(lsyncd+rsyncd)
を見ながらインストしてみる。
今は lsyncd-2.1.4.tar.gz が最新らしい。
# ./configure && make && make install
・・・
checking for a2x… no
configure: error: Program ‘a2x’ (package asciidoc) is required
そうなのか・・・
# yum – y  install   asciidoc
次!
# ./configure && make && make install
・・・
checking whether Lua library was compiled with compat support… no
configure: error: Lua library needs to be compiled with compat support
しかし、
# yum install lua-devel
・・・
Package lua-devel-5.1.4-4.1.el6.x86_64 already installed and latest version
あれ?入っているのか?
# yum  install   lua
・・・
Package lua-5.1.4-4.1.el6.x86_64 already installed and latest version
設定がおかしいらしい。
# export LUA_CFLAGS=’-I/usr/include -lm -ldl’
は、
# ls -l  /usr/include/lua*
-rw-r–r– 1 root root 11688 8月 19 15:15 2010 /usr/include/lua.h
-rw-r–r– 1 root root 191 8月 19 15:15 2010 /usr/include/lua.hpp
-rw-r–r– 1 root root 22128 8月 19 15:15 2010 /usr/include/luaconf.h
-rw-r–r– 1 root root 1026 8月 19 15:15 2010 /usr/include/lualib.h
ふむ
export LUA_LIBS=’/usr/lib/liblua.a’
ls -l /usr/lib/liblua*
ls: cannot access /usr/lib/liblua*: そのようなファイルやディレクトリはありません
これらしい。
# find / -name liblua.a -print
/usr/lib64/liblua.a
x86_64入れたからな、仕方がない。
# export LUA_LIBS=’/usr/lib64/liblua.a’
# ./configure && make && make install
・・・
make[1]: ディレクトリ `/root/lsyncd-2.1.4′ から出ます
インスト完了。
あ、yumでできたんじゃないのかな?
# yum list  lsyncd
Available Packages
lsyncd.x86_64 2.1.4-1.el6.rf rpmforge
あるじゃないか
# grep uninstall: Makefile
uninstall: uninstall-am
# make  uninstall
( cd ‘/usr/local/bin’ && rm -f lsyncd )
( cd ‘/usr/local/share/doc/lsyncd/’ && rm -f lbash.lua lecho.lua lgforce.lua limagemagic.lua lpostcmd.lua lrsync.lua lrsyncssh.lua )
( cd ‘/usr/local/share/man/man1’ && rm -f lsyncd.1 )
手で打てってことらしい。
# cd ‘/usr/local/bin’ && rm -f lsyncd
cd ‘/usr/local/share/doc/lsyncd/’ && rm -f lbash.lua lecho.lua lgforce.lua limagemagic.lua lpostcmd.lua lrsync.lua lrsyncssh.lua
cd ‘/usr/local/share/man/man1’ && rm -f lsyncd.1
ちゃんとuninstallできたかな?
# /etc/rc.d/init.d/lsyncd start
-bash: /etc/rc.d/init.d/lsyncd: そのようなファイルやディレクトリはありません
多分OK。
# yum install  lsyncd
Running Transaction
Installing : lsyncd-2.1.4-1.el6.rf.x86_64 1/1
Verifying : lsyncd-2.1.4-1.el6.rf.x86_64 1/1
Installed:
lsyncd.x86_64 0:2.1.4-1.el6.rf
lsyncd-2.1.4.tar.gz が無駄になったがこれでいいのだろう。

# rm -rf lsyncd*

最初から、yum install  lsyncd でやっておけば、何も苦労は無かったに違いない。
/etc/rc.d/init.d/lsyncd start
/etc/rc.d/init.d/lsyncd: line 23: /etc/sysconfig/lsyncd: 許可がありません
lsyncd を起動中: Warn: settings = { … } is deprecated.
please use settings{ … } (without the equal sign)
Error: error preparing /etc/lsyncd.conf: Parameter “rsyncOps” unknown. (if this is not a typo add it to checkgauge)
謎のメッセージだが、
# chmod +x /etc/sysconfig/lsyncd
vi /etc/lsyncd.conf
で、rsyncOpsの行を削除したら動き出した。
とファイルをアップすると、
lsyncd を起動中: Warn: settings = { … } is deprecated.
please use settings{ … } (without the equal sign)
settings = { の = が無駄らしい。
なんか特殊なバージョンなようだ。
マニュアルも読んでみる。ここで気が付く、2.0.x と 2.1.x でマニュアルが違っている。
さっきのconfの書き方は2.0.x用
な訳で、まだ rpmforge のはイマイチなので、またDLしてソースから・・・
適当に設定しいざ動かしてみる。
パソ側のDeltaCopy は rsyncのssh未対応。サードパティのSSH入れてくれと書いてある。
それは何故か?WindowsでSSHサーバーを立てるのが難しいからだ。
同様にcwRsync Serverも失敗。それに、こっちはサービス登録時のインストーラでアカウントを登録しないといけないから、パスワードを変えるのが面倒だ。
で、Windows7のHyper-Vでもう一台CentOS6.4を作ってみる。
バックアップ先にもrsync,sshなどが一式必要なので、不足分を見つけて追加するのは結構面倒。
# yum -y groupinstall “Base” “Development tools”
でドット入れた方がマシ。
あと公開暗号キーの転送ディレクトリィ(/root/.ssh)は手で作らないといけないようだ。
# mkdir /root/.ssh
その後、scpで転送。
/var/www以下は2.8Gバイトあったけど、
*** 10 23:09:13 ** Normal: recursive startup rsync: /var/www/ -> *.*.*.*:/var/www/
*** 10 23:22:16 ** Normal: Startup of “/var/www/” finished: 0
約15分ほどでバックアップ終了。
TOPで見る限るCPU 75%idだったりするので、もっと早くできるのかもしれないが、バックアップ中はBlogが重いのは本末転送。
※実際、バックアップ中に記事を書くとなんか重い気がする。
 
画像をアップしたり消したりすると、
Wed Apr 10 23:25:39 2013 Normal: Rsyncing list
/blogHtml/wp-content/uploads/2013/04/ASUS-EPU.bmp
Wed Apr 10 23:25:40 2013 Normal: Finished (list): 0
Wed Apr 10 23:26:24 2013 Normal: Deleting list
/var/www//blogHtml/wp-content/uploads/2013/04/ASUS-EPU.bmp
Wed Apr 10 23:26:25 2013 Normal: Finished (list): 0
と、追従してくるので非常にありがたい。
WordPressのDBバックアップ機能で自動バックアップができればそれも一緒に転送してくれる。
どうやら、rpmforgeのlsyncd 2.1.xのパッケージングは今一の様だけど、
ソースならちゃんと使えます。(笑
 
後で気が付いたけど、転送先の/etc/rsync.confの設定は必要ではなかった。

/etc/lsyncd.confの設定は・・・

settings {

statusFile = “/var/log/lsyncd.stat”,

statusInterval = 1,

logfile = “/var/log/lsyncd.log”,

}

sync{

default.rsyncssh,

source=”/var/www/”,

host=”*.*.*.*”,

targetdir=”/backup/var/www/”,

}

sync{

default.rsyncssh,

source=”/etc/”,

host=”*.*.*.*”,

targetdir=”/backup/etc”,

}

な感じにしてみた。
手元が狂うと転送先を簡単に破壊できそうです。(恐
また、この設定の仕方では、lsyncdを常時起動する必要もなかった。
lsyncd  をstop⇒startの間の変更も反映していた。
だがTeraTermから操作していたせいかもしれない。
記事を書いている間に画像をUPした場合は気が付かなかった。
回線がつながらないとか、転送先のディレクトリが存在しないとか、な理由で凹んで寝てしまう。
とか、特徴がありますね。



メール移行

メールを新メインなパソで受信できるようにした。
手間取ったのは、またOCNだが、AVASTのせいではなく、パスワードを忘れたので再設定。
移行したせいかもしれないが、BLOGデータがデカくなっているらしい。
# tail -50 /var/log/maillog
postfix/postdrop[27354]: warning: uid=48: File too large
php.iniの設定は余裕すぎ。
post_max_size = 50M
# cat /etc/postfix/main.cf |grep size_limit
message_size_limit = 10485760
まだ、まだ大丈夫なハズだがbase64エンコードし10M越えかもしれない。
message_size_limit = 30485760
# service postfix restart
OKだった。
 



名前

子供に変な名前を付けてしまうと
後で変えるのは、とても大変ですが・・・
プログラムの変数やデータベースのテーブル名は簡単に変えられます。
但し、それを使っているプログラムがいっぱいあったら、
これらを書き換えるのは非常に困難です。
適当に変数 a  b  c   d と付けたあと
vTop  iLow  dtNext   tmStart
なんてのにしようとしても、変換ツールで一発で・・・とはいきません。
ソースに    abcd と書いてあると  vTop iLowdtNexttmStart に変換されてしまいます。
SQLのテーブル名が a b c d だったりしたら・・・どっと汗が出そうです。
英字は i  や e  は頻度が著しく高いので、int i なんかは特に悲惨です。
C言語的には、int i,j,k の頻度は異常です。
また安易に文法を見て変換しようにも
a=b や  a = b とか書き方で変換しにくくなり、
更に、特定の巨大な関数の一部なら ともかく 特定の巨大な関数全般に分散していたら、どうすることもできません。
言語によっては、
int a;
function a(int a) {

{

int  a;

{

int a;

}

}

}
このaたちは全て別人ですから、特に厄介です。
ただひたすらに手で治すしかないのです。
リファクタリング・ツールも、日常的に使う用途のもので、
動作が緩慢ですし、時には失敗もしでかすので、入念なチェックが必要、趣味用のツールなので・・・
ですから、変数名が気に入らないから一斉に直せ!なんて用途には向いていません。
 
 
つまり、この手ことは問題は解決策は人手しかないわけです。
 
そんなことは・・・大昔のIBMの360の苦労本にも出てるんじゃないのかな?
 
そんな訳で設計期間って結構長かったりするのは、こうならないための重要な期間だったりするのですが・・・
大抵は、
 
そんなの後で治せばいいよ
 
 

いつものように

 
ですよね~(大笑
 
本当に必要なツールは、
どんなに汚くい仕様書やソースでも
自動的に綺麗に清書してくれる
そんな開発ツールじゃないんでしょうか?
そのためのリポジトリだったハズなのにね!(大笑



今の状況

旧マシンを全部止め、新マシンだけ起動したら・・・
部屋がとっても静かになった。
NUCも大量のファイル転送でもしない限り無音。
この記事を書いていてもさほど負担にはならないようですね。
初期のAtomとはえらい違いです。(笑
ゲーム用のパソも廃スペックだけど、ファンコン絞れはほぼ無音です。
 
店員が滑らかに動くゲームのデモを見せながらi3の方を勧めてましたが、
使い道がBlog用なので安物のCeleronNUC(DCCP847DYE)にしました。
メモリも1枚です。SSDは30GBにしたかったのですが品切れで60GB。
現在8GBちょっとですから、後10年は使えそうです。
ケースの色はアニメの舗装のアスファルトの色みたいなダークグレイ。
そんな訳でチョロQを載せてみました。
※タバコは大きさ比較のための障害物です。
DCCP847DYE_3
マザボが上下逆(天井側に付いている)なのでLANコネクタが逆さまです。
DCCP847DYE_1
オマケに釣られた訳ではありません。
袋の後ろが旧BLOG鯖。(でも、見えませんね。
電動チョロQの充電台に偽装も可能です。
DCCP847DYE_5 
無線LAN仕様で電源ケーブルのみのBLOG鯖
1日のHit数が300と少ないので、ほぼ待機電力で運用可能?
DCCP847DYE_2
やはり、ワットチェッカーが欲しいですね。
台になっているのは戦車PCケースです。




top