SVX日記
2005-01-07(Fri) SVXで帰省
今日は朝からシチズンに腕時計の電池交換&修理を依頼するため、郵便局から簡易書留としてナビホークを送る。5万円を上限とする保険つきで金550円也。送ってしまうと左腕が妙に空虚だ……サミシィ。久々に駅でカラアゲソバを食うがどーにも左腕が気になってしかたない。一時期あれだけ腕時計がキライだったのに、一般人が携帯の普及により腕時計をしなくなる頃合にアエて腕時計をしだすとはマコトにオレらしい。ほげげ。
仕事を終えてソソクサと家に戻り、SVXで名古屋に向かう。年の瀬に帰らなかったので、一週間ズラしての帰省である。ガスを満タンにして19時30分に出発。いつもどおり湾岸からレインボーブリッジを抜けて東名へ。今回はミヤゲを買うため海老名SAに寄る。
混雑を避けるという意味からすると一週間ズラして夜を選んだのはビンゴで、ほとんど渋滞ナシで70〜90参る巡航。いつもは高速走行時に若干出るバイブレーションが今日はほとんど出ずにかなり快適。あっという間に岡崎を抜け、新しくできたばかりの伊勢湾岸自動車道を経由、豊明で下りて実家についたのは0時15分であった。走行距離400kmチョイであるから平均時速70km/h。ラクラクですな。
高速 | 柏→(常磐)→三郷 | \500 |
三郷→(首都高)→用賀 | \700 | |
用賀→(東名)→豊明 | \7,000 | |
備考 | 500mile a day. ならぬ 250mile a night. |
2007-01-07(Sun) 一日四千名様限定提供用サーバ
さて、念願の省電力、省スペースのRHEL相当サーバが立ち上がった。しかも面白みのあるデュアル構成。さーて、なにから始めようかな。まずは、名前解決ができないと構築作業するにもうっとおしいからDNSの立ち上げからかな。
そういえば、WRAPはshutdown時にリセットがかからない。つまりアダプタジャックを抜き差ししないと再起動しない。こいつはどうにかしないとカッコ悪い。そうそう、WRAPのマニュアルにリセットをかけるアセンブラコードが載ってたな。ちょいちょい、と。
ん? コンパイルできるけど、modprobeできない……あ、そか。2.6からモジュールに関する作法が変わっているのか。そういえば、2.6カーネルのモジュールは、xxx.oでなく、xxx.koだった気がするわい。関連ドキュメントは……/usr/src/linux/Documentation/kbuild/modules.txtに説明がある。Makefileの作り方にコツがあるみたいだな……ちょいちょい、と。
ダメ。どうも、実行中のカーネルと、参照しているカーネルのソースツリーの内容が違うからのようだ。マジックコードの中のアーキテクチャが合わない。そういえばいま使ってるカーネルは、ノートPCで再コンパイルしたものだが、空きディスク容量の見積もりが甘くて、カーネルとモジュールは作れたものの、ソースのrpmの書き出し中にディスクフル起こして作成に失敗しちゃったんで手元にないんだよな。
カーネルっていえば縁起物だし、WRAP自らに再コンパイルさせてみるか。よっこらしょっと……こりゃ素晴らしく遅いな……(10時間後)……やっと終わったか……と、思ったら、モジュールの仕上げのあたりで失敗してて、カーネルすらできてない……なんで? ん? 名前解決ができなくなってるぞ!? わ!! メモリ不足を起こしてたのか!?
OOMKilerにBuildプロセスとnamedが殺されてる……nfsroot環境のマシンだと、swapの確保が一筋縄ではいかないんだよなぁ……nbdを試さなきゃかなぁ。でも、試そうにも玄箱に領域がないんだよな。ペンディング。
なんだか、環境の構築早々、いきなりコアなところに飛び込んでしまった。じゃ、次は軽めに玄箱でサウンドモジュールを使えるようにしてみようかな。先日、1980円で買ってきた「響音3」という製品だ。USBメモリほどの大きさで、音声の「入」出力ができるすぐれもの。この手の製品で「入力」があるのはうれしい。玄箱にラジオの録音をやらせることができるからだ。ジュークボックス化するのにも役立つしね。
……と、思ったら、オイラがココで拾ってきたカーネルには、サウンドコアモジュールが添付されてないじゃないか……また、カーネルの再コンパイルかよッ!! できれば玄箱の側もソースrpmからコンパイルしたいところだが……パッチを理解しつついじりだすとなると、また一週間コースなので、こっちは素直にkernel.orgのカーネルに、素直にパッチを当てて、サウンド関連のコンフィグをして再コンパイルする。
Device Drivers --->
Sound --->
<M> Sound card support
USB support --->
<M> USB Audio support
こんなもんかな。玄箱用パッチはRedhatのソースrpmと違って、余計なモジュールをほとんどコンパイルしないコンフィグなので、コンパイルは3時間くらい……遅いことに違いないけども。さて、終わったけど再起動は面倒だなぁ……設定だけして、次の何かの再起動タイミングに合わせて作業を進めよっかな。ペンディング。
さて、軽めの作業をするつもりだったのに、いつのまにかまたもやコアな作業に足を踏み入れているではないか。こんどこそ、軽めにtdiaryの移行作業をしよう。そう、この「SVX日記」のホストサーバを移行してみるのだ。ちなみに、しばらくは現用サーバのApacheをリバースプロキシに、リクエストを後ろに回して運用するつもりなので、これは試行でもなんでもなく本格的な移行作業の一環である。
tdiaryのバージョンが上がっていたのと、絵(写真)日記のためにオイラが使っていたのが添付されていた純正のimageプラグインでなく、image_xxだったことを再発見してちょっとつっかかったりしたが、無事、移行成功。Operaからページを開く……
……フロントページを表示するだけで20秒チョイもかかってしまう。これじゃ、使い物にならん……1分に3人弱しか閲覧できないとすれば、1日4000名しか閲覧できないことになってしまう。そりゃ、266MHzだから多少は遅いことを覚悟していたが、これほどまでとは……topで見ても、ほとんどがRubyのCPU負荷であり、改善の余地はない……mod_rubyとかでもダメだろうな、メモリ面でもキツいし……動的ページでなくしてしまえば実用レベルは保てるかもしれないが、それはちょっと大改造になるだろうからやりたくない。
ほんじゃ、WRAPでなく玄箱にやらせてみようか……よいしょっと……時間は半減したものの10秒を下らない。これでも移行するにはキビしすぎるなぁ……Rubyって重いのねぇ。久々に実感したよ。現サーバはPenIIIの1GHzだけど、アクセスがある度にファンがウナってたのは伊達じゃなかったんだねぇ。
ちゅーわけで、早々と移行は頓挫してしまったが……かくなる上は……ぽちっと。
2011-01-07(Fri) サヨナラを決めた朝
過去、2回ほど車検でお世話になっている、K-STAFFさんに行ってオリジナルの二層式ラジエータの現物を見せてもらった。これは、素人でもポン付けできるモノなのか、ディーラーに依頼した方がいいのか、それとも、ディーラーでも取り付けは無理だから、ここまで車を持ってこなければならないのか、実際のトコロはどうなんですかねぇ……なんて泣きそうになるのをコラえながら尋ねている……
明け方、4時くらいに目が覚めて、そのままSVXのことばかり考えて寝られやしない。どうにも、スバルの対応に納得がいかなすぎる。こんなに非協力的なのってアリなのか。こんな環境で、これからも維持していくことが可能なのか。壊れる度に、1ヶ月も車に乗れない可能性があるなんて、想像を絶する。
実際のところ、車通勤していないオイラの場合、SVX出動の9割以上がカミさんである。だが、所有する車がSVXであることにコダわっているのは、オイラの方だ。だからこそ、高額な車検や、突然の修理に備えて、毎月、小遣いの中から1万円を積み立てているくらいだ。
だけど、限界かもしれない。車が使えない状況が続いていることで、カゼをひいているカミさんが、バスや歩きで用事を済まさなくてはならなくなっている。そのことに、どう顔向けしろってんだ。これが一番やりきれない。
2016-01-07(Thu) 石取りゲームのAIを作ってみる
で、とりあえず、習作として「石取りゲーム」を作ってみることにした。ルールは簡単で、まとめて置いてある数十個の石ころから「1~3個の石を順に取り合い、最後の1個を取った(取らされた)ら負け」というルールである。
単純なルールなので、容易に必勝法に思い至るが、そのロジックをプログラミングしても発展性がない。ここは「ミニマックス法」を採用するべき状況なのである。というわけで、秘蔵のインデックスを検索し「Oh!X1990年4月号」を引っ張り出し、故祝一平氏の連載「C調言語講座PRO-68K」から「第21回 思考よ~ん(その4)」の記事を参照するのであった。ホンマOh!Xは一生もんでっせ。
当記事では「ミニマックス法」よりは「αβの枝刈り」の説明を主としつつも、成果物(コード)には実装しない、というある意味で潔い(?)内容になっているが、内容的には十分に参考になるものだ。とりあえず、記事を参考に「ミニマックス法」をRubyで実装してみた。「αβの枝刈り」は、まぁ、余裕があったらやるということで。
いざ対戦してみると、ゲームのルールがシンプルなだけに、ゲーム開始時の石数が十数個であれば、容易に読み切れてしまうことがわかった。「読み切り」とは、勝負の完了に至るすべてのパターンの把握をいう。それには、えらく複雑な処理が必要かと言えばさほどでもなく、評価関数に至ってはルールをそのまま表した、以下のコードだけ。
149 def evaluate(game)
150 point = 50 # 標準の評価点
151 game.stones == 1 and point = 99999 # 手番後に石の残りを 1 にしたら勝ち
152 point
153 end
コードを置いておく。