トップ 最新 追記

じじぃの日記、ツッコミ可

Twitter: @jijixi_org
Xbox Live: jijixi

初心者が書いた OCaml 入門
Spotlight tips サイト内リンク集
1970|01|02|
2003|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|11|
2011|05|
2012|01|

2008-03-01 [長年日記]

% [game] セカキュー2日記、サラマンドラに挑戦

前作のワイバーン(だっけ?)に相当する位置付けの敵。 通常、絶対にちょっかいかけちゃダメなやつ。 レベル 54 で挑戦。

…… 瞬殺。 もちろん、こっちが(笑

即死効果がある全体攻撃で一気に三人死亡とか、なすすべないし。 それ以外でも全体炎攻撃で HP の 7 割持ってかれたりとか、ひどすぎる。 いったいレベルいくつになったら倒せることやら。

ちなみにお供の廉価版赤竜は楽に倒せた。 まあ、ファイアガード Lv7 のおかげもあるけど。

% [雑談] マクロス F の先行放送版を見た

某所で。

なんか過去の作品へのオマージュが溢れる作りって感じだね。 結構おもしろそう。 メカを CG で描く作品でこんなにスピード感のある戦闘シーンを見たのは初めてな気がする。

緑髪の子の微妙な棒読みっぷりがミンメイを彷彿とさせて笑った。 なんか声も似てるし。 キャストを見たら名前まで似てる上に、エンディングであの曲を歌いますか。 色んな意味で狙いすぎだな(笑

% [雑談][Windows] いつから FAT32 は上限が 32GB になったんだ?

reddit 経由で 『「SDHCメモリカード」は短命に終わるかもしれません』という記事を読んで、表題のようなことを思ったんだが。 FAT32 はブロックサイズ (で良いんだっけな?) が可変なので、それが大きくなるだけ (なので小さいファイルについての効率は悪くなるが) の話で別に使用できる容量に制限なんて無いはずだろ。 実際、そこら辺で売ってる数百 GB クラスの外付けハードディスクなんかは、平気で FAT32 でフォーマットしてあるよ。

で、なんでそんなデマ情報が出てくるんだろうと思ってちょっとググってみたら、どうも Windows 標準のフォーマット機能では FAT32 で 32GB 以上の領域をフォーマットできないようになってるらしい。 マジか。(確認してみたかったけど、手頃な環境が無くて試せなかった)

まあ、実際のところ、互換性や可搬性の問題でどうしても FAT じゃなきゃ困る…… とかじゃなければ、もっとマシなファイルシステムを使うべきだとは思うけどね。

% [game] セカキュー2日記、第四階層突入

一度目は敗北したものの準備を整えての再戦で勝利して 15F のボス突破。 レベルは 55。

前作の第四階層とは丸っきりイメージが違うのにちょっとびっくり。 で、恒例の戦闘 BGM チェンジ。 前作の没曲キター。 前回のおまけ CD に入ってたやつで、個人的には「どうしてこれを没にするんだ」と残念に思ってたので、これは GJ だ。 もしかしたらその手の意見が多かったのかもしれないな。

本日のツッコミ(全7件) [ツッコミを入れる]

Before...

% c-yan [Vista からは exFAT なるものがありますよ. 利用例は聞いたこと無いですが(^^; FAT32 も 3..]

% きむら(K) [exfatでぐぐったらまとめて情報が見つかりましたw http://ascii.jp/elem/000/000/0..]

% jijixi [いかにもツギハギくさいのがいかにも FAT らしくてス・テ・キ w]


2008-03-02 [長年日記]

% [雑談] 「昼まで寝てました」ってレベルじゃねーぞw

目が覚めると 15 時半だった、そんな冬の日曜。 わしの休日はまだまだこれからだ!!(打ち切り風味)

まあ、寝たのが朝方だから、時間的にはそれほど寝ちゃいないんだが。 何が悪いって世界樹が悪いよ。 悪いよね。悪いと思うんだ。

そんな感じで、OCaml 入門もネタはあるんだけど全然書いてません。 たぶん待ってる人なんていないだろうけど、万が一に何人かでもいたならごめんなさい。 世界樹が一段落するまで無理です。(言い切りおった!!)

% [game] セカキュー2日記、地雷を踏んだろうか?

20F に到達。レベルは平均 64 。

しばらく前からがんばってブシドーに白刃取りを付けたんだが、すでに Lv4 なのに一度も発動したところを見たことが無いのはどうしてだろーなー。

…… もしかしてこれ地雷スキルか?

スキルポイントを 20 も注ぎ込んで何にも役に立ってないってのはイタすぎるだろ。 まさか『白刃取り』なんだから武器を装備してたらできないだろ、とかいうオチじゃないだろな。 刀を持ってないブシドーなんか役に立たんだろーが。

てな感じで、そろそろ何人かのキャラは休養 (スキルポイントの振り直し) を視野に入れた方が良い気がしてきた今日この頃。 今回、休養時のレベルダウンが 5 に減ってるので、わりと気は楽だけど。

% [game] セカキュー2日記、白刃取りが活躍し始めた

なんか白刃取りを Lv5 まで上げてマスターにしたら、一気に発動率が高まった。 結局 Lv4 までは一回しか発動しなかった (オート戦闘のときに発動して見落としてる分はあるかもしれないが) が、Lv5 になった途端ガンガン避ける。 すげえ。

なんか他のスキルにも言えるけど、今回マスターにするかどうかでかなり性能が違うものがある感じ。 パラディンのガードスキルも、マスターにするとかなりガードする確率が上がる感じがする。

% [game] NiGHTS PS2 版

ゲーム自体はそのままでハイレゾ化とテクスチャをきれいにしただけなのに、最近のヘタなゲームよりずっと美しいと思うんだ。 やっぱサターン時代のソニックチームは神懸かってるなー。 この調子でバーニングレンジャーもぜひ。

プレステコントローラーだとやっぱやりづらい。 マルコン使いてえ。

説明書を見るかぎり、一度本編をクリアするとクリスマスナイツも遊べるようになるっぽい。

ところで、もしバーニングレンジャーをリメイクする場合は、隠れた要救助者を助けに行こうとするといちいち「そっちじゃないわ」とほざくアホナビに「うるせえ、黙って見てろ」と言い返す要素を付けていただきたい。 このせいで「クリスうぜー」と思った人はたくさんいるはずだ(笑

% [game] NiGHTS PS2 日記、クラリス編終了

さくっと。 まあ、クリアするだけならそれほど難しいゲームじゃないし。 ボスの倒し方さえわかってれば大丈夫。

長いチェインを取るためのルートとかはほとんど忘れちゃったんで、スコアアタックは無理だなー。 ルート憶えててもこのコントローラーじゃ思うように操作できないし。 ただ、たしかエンディングで大人バージョンの Dreams Dreams を聴くためにはある程度良い成績を残してないとダメだった気がするんで、せめてそこまではやりたいかも。

しかし、やっぱ最終面の演出は神だね。 今見ても鳥肌が立つ。

% [game] NiGHTS PS2 日記、エリオット編終了

そしてクリスマスナイツ解禁。 これもさくっとクリアしといた。(たった二面だし)

それにしても、クリスマスナイツは本編よりむしろおまけの方がキモだったと思うんだけど、メロディボックスは無いのかよ。 がっかりだ。 それとも何か条件満たせば使えるようになるかなあ。

% [game] NiGHTS PS2 日記、オール A 達成

何度かやってるうちに PS コンでの操作にもだいぶ慣れた。 どうやらエンディング曲が大人バージョンになるのは、全部の面で A ランクを取ることのようだ。 サターン版やってたときは、知らないうちに変わってたから気付いたときはびっくりしたんだよな。 「こっちのバージョンも入ってたのか!」って。

本日のツッコミ(全2件) [ツッコミを入れる]

% きむら(K) [> たぶん待ってる人なんていないだろうけど ノシ ]

% jijixi [サーセン、ゲーオタでほんとサーセンw]


2008-03-03 [長年日記]

% [FreeBSD][PostgreSQL][Ludia] PostgreSQL で全文検索をするためのプラグイン Ludia を試す (つもりだったんだけど中断)

今のところ Rails では DB に Toritonn (MySQL に Senna を組み込んだもの) を使ってるんだけど、FreeBSD 7 以降で Postgres がかなり良い性能を示してるらしいとか、Toritonn は Ports が無くてインストールがめんどいとか、あと単純に MySQL ばっかじゃつまんないとか (ぉぃ)、いろいろあって Postgres を試してみようと思ってるわけ。

で、まあ全文検索は無いと困るということで (必ずしも全文検索が DB 側に組み込まれてる必要は無いけど、その方が楽でしょ)、Toritonn と同じく Senna を利用している Ludia が、最近 Ports に追加されたこともあって入れてみたんだけど……

% psql -f /usr/local/share/postgresql/pgsenna2.sql testdb 
psql:/usr/local/share/postgresql/pgsenna2.sql:4:
 ERROR:  could not load library "/usr/local/lib/postgresql/pgsenna2.so":
 dlopen (/usr/local/lib/postgresql/pgsenna2.so) failed:
 /usr/local/lib/libmecab.so.1: Undefined symbol "pthread_join"
...(延々同じエラーが続くので略)

こんな感じでガックリ。

% strings /usr/local/lib/libmecab.so | grep 'pthread'
pthread_mutex_destroy
pthread_mutex_lock
pthread_mutex_unlock
pthread_mutex_init
pthread_create
pthread_join
% ldd /usr/local/lib/libmecab.so
/usr/local/lib/libmecab.so:
        libiconv.so.3 => /usr/local/lib/libiconv.so.3 (0x282ba000)
        libstdc++.so.5 => /usr/lib/libstdc++.so.5 (0x283b0000)
        libm.so.4 => /lib/libm.so.4 (0x2847b000)

libpthread.so をリンクしてるわけじゃないのに、この pthread_* は何なんだろなー。 libpthread.a をリンクしてるならこんなエラー出るわけないし、何が悪いんだこれは。

% nm /usr/local/lib/libmecab.so | grep 'pthread'
         w pthread_create
         U pthread_join
         U pthread_mutex_destroy
         U pthread_mutex_init
         w pthread_mutex_lock
         w pthread_mutex_unlock

うーん、よくわからん。 ほんとは全部 w になってほしいところなのに、何らかの原因で U になっちゃってるってことかなあ。 わしゃバイナリアンじゃないから (そういう話か?)、w になる場合と U になる場合の違いがわかんないよ。

Senna と Ludia はメンテナが同じみたいなんだけど (デフォだと Senna が Mecab を必要とする)、その人の環境ではこの問題って出てないのかな。 それとも動作確認してないから気付いてないだけ? Current なら問題出ないって可能性も無いわけじゃないけど……

なんか libsenna.so も

% nm /usr/local/lib/libsenna.so | grep 'pthread'
         w pthread_create
         U pthread_mutex_init
         U pthread_mutex_lock
         U pthread_mutex_unlock
         w pthread_once

こんななんだよな。 なんか Linux ではうまくいくけど FreeBSD では微妙に変ってパターンな気がする。

とりあえず workaround としては、これらのライブラリを使う側がとりあえず libpthread.so をリンクするようにしてやりゃ良いわけだけど……

% sudo pkg_deinstall ludia-1.4.0
% sudo -E portinstall -M 'LDFLAGS=-lpthread' databases/ludia
% ldd /usr/local/lib/postgresql/pgsenna2.so
/usr/local/lib/postgresql/pgsenna2.so:
        libpthread.so.2 => /lib/libpthread.so.2 (0x28183000)
        libsenna.so.0 => /usr/local/lib/libsenna.so.0 (0x281a8000)
        libmecab.so.1 => /usr/local/lib/libmecab.so.1 (0x28289000)
        libiconv.so.3 => /usr/local/lib/libiconv.so.3 (0x283de000)
        libstdc++.so.5 => /usr/lib/libstdc++.so.5 (0x284d4000)
        libm.so.4 => /lib/libm.so.4 (0x2859f000)
% psql -f /usr/local/share/postgresql/pgsenna2.sql testdb
CREATE FUNCTION
...(エラーは無し)

こんな感じで。 実は Toritonn を自分でビルドするときにも同じ問題で詰まったりするんだけど、configure 時に同じように無理矢理 -lpthread フラグを追加してやることで回避できたりする。

まあ、これで使えるようにはなったわけだけど、なんか微妙に納得いかないよなー。 かと言って、Senna や Mecab のどこが良くないのか調べる元気は無いわけだが……


2008-03-04 [長年日記]

% [雑談] リファラの表示は止めたので通常は見えないんだけど、編集画面には表示されるのでつい見てしまうのである

で、なんか今日はこんなのがあったんだけど…

もうこれRailsでTDDとかいってRSpecを使ってない人は全滅したほうがいいんじゃないかマジで

文脈が不明なのでよくわからんのだが、わしが DIS られてるんだとしたら「RSpec 使ってないようなヤツは TDD とか口にするな」ということかな。 じゃあそうしよう。

わしは TDD なんてやってません。でもテストはちゃんと書いてます。

ということで。 RSpec の啓蒙記事とか読んでもイマイチ良さがわからないのは、たぶんわしが TDD のことをわかってないからなんだろうね。 オールドタイプだからなー(笑

他にリファラネタとしては、RSS リーダからのリファラが結構あるのがちょっと不思議に思ってたり。 わしは LDR しか使ってないから他のリーダのことはよくわかんないけど、この日記って RSS には全文載せてるから PRE タグの部分が崩れて読みにくいとかじゃないかぎり RSS リーダだけで十分読めると思うんだよね。 でもなぜか敢えて直接見にくる人がそれなりにいるみたいでハテなんでじゃろ?と。

もしかしてこの日記の RSS そのものを登録してるんじゃなくて、この日記へのリンクだけを持ってる何かを登録してるのかもしれないけど、そんなのあるんかな。

(追記) twitter とかを RSS で読んでるって可能性はあるのかな。 だとすると、そういうので言及されてても知らないまま終わる可能性が高いということか。 Web 日記的なリファラで繋がる文化はもう終わったということかねぇ…… (/追記)

% [clip][Scala] 日本語プログラミング言語Scala (inforno)

こ・れ・はw

Scala 始まったな。(変な方向に)

% [game] NiGHTS PS2 日記、3 月に入ってから始めた人、涙目

わしのことだけど。

どうやら 2 月一杯はウインターナイツ仕様になってたようだ。 だからって PS2 の日付いじってまで遊ぶほどの要素ではないのが微妙に敗北感というか。

ちなみにこのシークレットのページには『Coming Soon...』が一つ残ってるみたいだが、さてなんじゃろ。 メロディボックスだと嬉しいんだが。

% [雑談] 『クロノトリガーがパクリだらけだった件』シリーズがおもしろすぎる件

何度見ても『!?』のところで吹くw

  • パート1 (sm2261520)
  • パート2 (sm2331365)
  • パート3 (sm2357621)
  • パート4 (sm2372081)
  • パート5 (sm2456792)
  • ドラクエ・FF編 (sm2506297)

よくまあ、ここまでこじつけを思いつくもんだ。 あと、どこで見付けたんだこんなもん、っていう画像とか多すぎw

本日のツッコミ(全2件) [ツッコミを入れる]

% moro [Twitterで発言したものです。このたびは不用意な発言でご不快にしてしまい申し訳ありません。 発言の意図としては..]

% jijixi [や、別に不快に思ったりしてませんのでご安心ください :-) twitter だと前後の流れがわからないと意味がわか..]


2008-03-05 [長年日記]

% [雑談][Rails] 実は Rails で Test::Unit を使ってテストを書いているのは少数派なのではないか、という想像

えーと、昨日の DIS られ疑惑はわしの誤解だったのだが、そもそも本当に DIS られていたんだとしても不快に思ったり怒ったりはしていないのに、それについて moro さんからやたら丁寧な謝罪をいただいてしまい、逆に恐縮した次第。 わりと茶化した感じで書いたつもりだったんだけど、あんまりそういう雰囲気出てなかったようで。 気をつかわせてしまってすんませんです。

で、その事の発端であるところの ActionController::TestCase の問題があまり話題にならない (少なくともわしがチェックしてるブログ等では見た憶えがない) のは要するに誰も Test::Unit 使ってないんとちゃうの?と思ったわけ。 そもそもテストを書いていないという人はもちろんこの問題に気付くわけがない。 テストをちゃんと書いてる人はみんな RSpec 使ってるから、やっぱり気付かない。 そんなシナリオ。 テストは書くけど Test::Unit 使ってるっていう、わしのような人間は実は超マイノリティなのか?と。

ところで、わしは Rails のせいなのか、動的型付け言語ではテスト書かないと不安でしょうがない人にいつの間にかなっていた (以前はテスト書くのがめんどくさくてしょうがない人間だったはずなんだが)。 でも、テスト駆動開発をしているか?と言うと何とも言えないところ。 そういう流れのときもあるし、そうじゃない流れのときもあるし、わりと適当。 そういった意味では昨日書いた

わしは TDD なんてやってません。でもテストはちゃんと書いてます。

ってのも元々思ってたことであって、DIS られた (と思った) からふて腐れて書いたってわけでもないのであった。

RSpec はるびまの記事とかも読んだし、この前の角谷さんの講演映像もニコで見たし、他にもいろいろ読んだりしてるけど、いまだに Test::Unit に対する明確なアドバンテージが見えてこない。 むしろあの独特の記法が気持ち悪くてしょうがなくて、どうにもとっつきにくいというか(苦笑

機能的に大きな違いが無いなら、組み込まれてるのを使った方が楽じゃん…… って思っちゃうんだよな。

% [clip][Mac] Mac OSX 10.5.2でFirewireのスピード低下?? (気になる、記になる…)

via 常山日記

最近、タイムマシンが動きだすとやたら負荷が上がる気がしてたんだけど、これの関係なのかな。 次のバージョンアップで直ると良いんだが……

% [Rails][雑談] 複数プロセスを立ち上げてリクエストを振り分ける場合の選択肢

には大きく分けて二つあると思う。 fastcgi を使う場合と、mongrel のプロセスを複数立ち上げる場合だ。 で、apache から直接 fastcgi を使おうとするといろいろ面倒っぽいので、mod_proxy_balancer で丸投げすることを前提に、両者のメモリ使用量がどれくらい違うか簡単に調べてみた。

この場合使用するのは、

  • fastcgi
    • ./script/server -d lighttpd
    • ./script/process/spawner fcgi
  • mongrel
    • ./script/process/spawner mongrel もしくは mongrel_rails cluster::start (mongrel_cluster)

spawner mongrel と mongrel_cluster は実質的に同じことをやってるのか、メモリ使用量に目に見える差は無かったので、ここでは一緒にしておく。 あと、各々の設定の仕方とかはめんどいので書かない。 知りたい場合はググりませう。

調査した環境は、

  • FreeBSD 6.3-RELEASE-p1 / i386
  • ruby 1.8.6 (2007-09-24 patchlevel 111) [i386-freebsd6]
  • lighttpd-1.4.18 (ssl)
  • Mongrel Web Server 1.1.4
  • Rails 2.0.2

てなとこ。 それぞれ三つずつのプロセスを立ち上げた。 単に起動しただけの状態なので、実際にアクセスを受けてアプリが動き出せば当然メモリ消費量は上がっていくはず。 ということで以下が結果。 VSZ は仮想メモリサイズ、RSS が実メモリサイズ、COMMAND は… まあわかるでしょ。

% ./script/process/spawner mongurel
VSZ      RSS      COMMAND
35152    32268    /usr/local/bin/ruby18
35152    32268    /usr/local/bin/ruby18
35152    32268    /usr/local/bin/ruby18
---------------------------------------
105456   96804
% ./script/server -d lighttpd
% ./script/process/spawner fcgi
VSZ      RSS      COMMAND
27192    24788    /usr/local/bin/ruby18
27192    24788    /usr/local/bin/ruby18
27192    24788    /usr/local/bin/ruby18
 3060     1804    lighttpd
---------------------------------------
84636    76168

プロセス一つにつき 8MB ほどの差というのは結構でかいかも。 プロセスの数を増やせば増やすほど差は拡がるし、少なくともメモリ使用量に関しては mongrel でクラスタリングするよりも lighttpd + fastcgi で運用する方がコストが低いということになりそうだ。

あと余談だが……

spawner を使った場合、強制的に production 環境が起動される。 mongrel_cluster を使う場合は設定によって development 環境で起動することも可能のようだ。 development をたくさん立ち上げる必要性があるのかはよくわからんが。 あと、spawner で立ち上げたプロセスは、

% ./script/process/reaper -a kill

とすることで殺すことができる。

% [Ruby][雑談] Test::Unit で RSpec に対抗する (ネタですよ)

RSpec では it メソッドなどに日本語の文字列を渡すこともできるので、failure 時のメッセージなんかがわかりやすい。 …… たぶん。

るびまの記事でも "#empty? は true であること" とか書いてるし。 で、こういう「あるべき振舞」を示す文章は Test::Unit の場合メソッド名に突っ込むものじゃないかと思うんだが。

def test_empty_method_should_return_true_when_Array_is_empty
  ...
end

とかさ。 え、書かないすか?わしはそうしてるけど。 でもまあ、読みにくいよね。アンダーバーとかウザいし。 そこでこうですよ。

% cat array_test.rb
require 'test/unit'

class ArrayTest < Test::Unit::TestCase
   def empty_array
      []
   end

   define_method('test: Array が空の場合 #empty? は true であること') do
      assert empty_array.empty?
      flunk
   end
end
% ruby array_test.rb
Loaded suite array_test
Started
F
Finished in 0.003788 seconds.

  1) Failure:
test: Array が空の場合 #empty? は true であること(ArrayTest) [array_test.rb:10]:
Flunked.

1 tests, 2 assertions, 1 failures, 0 errors

ほ〜ら格段に見易くなった。(ほんとか?)

% [Ruby][雑談] ネタとかは良いからそろそろ RSpec 憶えようぜ、わしよ

じゃないといつかほんとに誰かに DIS られるに違いない。 見た目がキモいとか言ってる場合じゃないな(苦笑

つーか、いつか何か手元のちっちゃいツールでも書くときに RSpec 使ってみようとは思ってるんだけど、なかなか機会が無くてねぇ。 あと、わしの場合どうも標準添付されてるか否かを重視する傾向があって、そのせいで敬遠してしまう部分というのも少なからずあるような (ぶっちゃけ必要以上に可搬性を気にしてしまうきらいがある)。 だから、もし Ruby 本体に添付されるようになったら普通に使う気がする。 RSpec on Rails も Rails 本体に含まれるようになったら使うんじゃないかな。


2008-03-06 [長年日記]

% [Ruby][雑談] Ruby 初心者のために昨日のネタの種明かし

自分で「ネタですよ」と宣言しておいて何だけど、意外と実用的かもなと思いつつあるわしがいる(苦笑

Ruby のことをあまりよく知らない人は、昨日の実行例を捏造だと思ってるかも知れないので一応補足しておくと、あれはほんとにできます。 まず基本として、

  • define_method を使うことで def では定義できない名前のメソッドも定義できる
  • def で定義できない名前のメソッドは通常の方法 (ドット記法) では呼び出せないが、send メソッドを使えば呼び出せる

という事実がある。 で、TestCase の実行時には、単純化して言うと、

  • /^test./ という正規表現にマッチする名前のメソッドを send メソッドで実行

ということをやってるので、あんな風に書いても普通に実行されるというわけ。

% [Scala] 2.7.0-final

今度こそほんとに final か。 でも Change History が 2.6.1 から全部まとめられちゃってて RC3 からの変更点がわからんじゃないか。

一日だけ存在した幻の final (おそらく中身は RC3 と同じなんだろう) にはどんなバグがあったのやら。

% [game][雑談] 衝動的に Wii 版 NiGHTS をポチっとなしてしまったは良いが、なかなか本体を買う気になれない

そもそも Wii 版をあんまりやりたいと思ってないし。 PS2 版で満足しきってる気がするよ(笑

まあ、買ったら買ったでやるんだろうけど。 他にどうしてもやりたいと思うゲームも無いしなあ。 あー、ゼルダはやりたいかも。 あとはバイオハザードのガンシューになったやつとか? あと何があるっけ……

% [game] セカキュー2日記、続けていく自信が無くなってきた

いろいろあって二日ほど放置してたんだが再開。

放置前に 23F に到達して、「なんじゃこりゃやってらんねー」って感じがひしひしとし始めてはいたんだが、再開後もやはりなんつーかキツイ。 23F にはボスがいるんだけど勝てない。 今、4 人がレベル 69 で一人だけ 66 という状態なんだけど、もし全員 70 まで上げたとしても勝てる気がしない。

もうこのパーティ構成には限界を感じる。 かといって、構成を変えるにしてもどういうメンバーにすれば良いのかはわからん。 基本的に力押しなんだもん、ヤツ。 だいたい他のキャラ使うったって使えるようなレベルまで育てるのに、どんだけ時間かかるんだよって話だし。

即死は持ってないみたいだから、バードのフォーススキル (能力値大幅アップ + 最大 HP が二倍) を使えば何とかなるような気はするんだけど、フォースポイント溜めるだけでガス欠だっての。 TP 回復アイテムしこたま買い込めってか。 で、延々ザコと戦ってフォース溜めて…… ってそこまでしなきゃないなんてやってらんないよ(ぐったり

そんな感じで、クリアするまでモチベーションが保てるかは微妙な線になりつつある今日この頃である。

本日のツッコミ(全4件) [ツッコミを入れる]

Before...

% jijixi [滑り込みでなんかデカいパッチ入れたんで、さすがにそのまま final にするにはちょっとアレだから RC3 にしたっ..]

% odz [何日かすると復活する階層ごとのボスを狙えば効率的にレベルが上がると思います。 あと、アルケミストの核熱の術式が訳分..]

% jijixi [> アルケミストの核熱の術式が訳分からん威力だったり やっぱり(苦笑 そんな気がしてましたよ。FF のフレア..]


2008-03-07 [長年日記]

% [game] Wii 本体買いますた

あと一緒にバイオハザードアンブレラクロニクルズも。

でまあ、とりあえず NiGHTS をちょろっとやってみたんだが…… うーん、なんちゅーかやっぱ微妙?

ソニック・ザ・ヘッジホッグがソニックアドベンチャーになったときと同じような違和感を感じるというか。 ソニックって元々突っ走れば良かったゲームなのに、アドベンチャーになって色々めんどうな手続きが必要になって見た目がどうのよりゲームとして別のものになったと思うんだけど、ナイツに関しても同じことが言えるんじゃなかろうか。 ただ飛んでれば良かったゲームが、なんか色々めんどうなことやらなきゃならないゲームになった。 そういう意味では、これはもうわしの知っているナイツじゃないし、あれとは別のゲームとして楽しむしかないんだろう。

まーそんなこんなで、『めんどうが増えた』おかげでどうもかったるい。 ということで、かったるくなく単にバンバン撃ちまくれば良い (と思われる) バイオハザードをこれからやります。 さようならナイツ、あとでまたちょっとずつやるよ。

つーか、わしの場合ナイツもバイオも置いといて、バーチャルコンソールにはまりそうなのがちょっとアレ。 一本 600 円とか高いよなー…… などと思いつつ、すでに Wii ポイント 3,000 円分買ってあるのはどういうこった(苦笑

ただ、ざっと見た感じだと欲しいソフトの大半は実物持ってたりするんだよな。 まあ、実機を掘り出さなくてもプレイできるのを考えれば意味はあるんだけども。

どうでもいーが、カプコンは 360 でリメイク版出すとか言ってないで早急にヒットラーの復活をラインナップに加えるべき。 そしたら泣きながらプレイするから、わしが。 いまだに手放したことを後悔するゲームの一つ。 超名作。

% [clip] 老師曰く、「そんなものもあったかのぉ」:まとめ (kwatchの日記)

Perl のところで盛大に吹いたw

% [game] バイオハザード アンブレラ・クロニクルズ

バイオシリーズの経験があって、ガンシューティングが嫌いじゃないなら楽しいゲームだと思う。 あー、こんな場所あったよなーとか懐しむことができて良し。

だが、リロードの操作が『リモコンを振る』なのは何とかならなかったのか。 弾切れしてから空撃ちすればオートリロードなんだけど、そんなのは危険がいっぱいすぎるので安全なところを見計らってしょっちゅうリロードしたいわけでしょ。 手首がどうにかなってしまいそうです。

さらにハンドガンとかならマグチェンジするだけだからいつでも同じ時間しかかからんのだが、ショットガンだと 6 発撃ってからリロードすると 6 発分ガチャコガチャコとやってくれて異常に時間がかかるんで、基本は 1 発撃ったらリロード (これなら 1 発分だから素早い) といきたいわけだ。

…… 急性 Wii 炎になったら困るから適当なところで止めておこう……

% [game] バーチャルコンソールで 3,000 円分一気に消費

ハンパが出るからぴったり無くなったわけじゃないけど。 買ったのは、

  • MD
    • レイノス
    • ペペログゥ
  • SFC
    • ヴァルケン
  • Mk3
    • 北斗の拳

くらい。 なんちゅーか、あれもこれもと思ってるといくらあっても足りない(苦笑

北斗の拳はサウザーのとどめが何だったか忘れちゃってクリアできなかった。 空中で攻撃当てるんだっけ?

ヴァルケンは GC コントローラーだとやりにくいので、今度クラシックコントローラーでも買ってくるかなーというところ。

今はレイノスの 6 面で強化マシンガンのために稼いてるところ。 何点まで稼げば良いのか思い出せないんだが。 38 万だったような、42 万だったような、44 万だったような、あー……

モンスターワールド 4 はいずれゆっくりやろう。 ペペログゥ、ラヴ。

すいません、もう NiGHTS のこと、すっかり頭の中から消えてました(笑

ベアナックル三部作とかも欲しいなー。 やっぱりバーチャルコンソールはわしにとって危険な代物だったようだ……


2008-03-08 [長年日記]

% [clip] 覗くよな (にゃんねる)

同意すぎて困る(笑

自分で隙間に入れるくせに取れないとこっちを見つめて

「取って」て訴えるよな。

これもありすぎる。


2008-03-09 [長年日記]

% [game] ゼルダの伝説 トワイライトプリンセス

買った。 最初がなぜからしくないテンポの悪さでアレェ〜?って感じだったけど、さあお城に行きましょうってなってからの衝撃的展開で俄然盛り上がる。

もうナイツとかやってる暇無いんですけど(苦笑


2008-03-10 [長年日記]

% [雑談] 確定申告

去年は前半死にそうな状態だったせいでたくさん戻ってくるわい。 何に使おっかなー。

…… おとなしく貯金した方が良いのではないか?

本日のツッコミ(全2件) [ツッコミを入れる]

% きむら(K) [そこで(自分に)投資ですよッ! ってまじめな話、冷静に考える時間を置いたほうがよろしいかと。 ]

% jijixi [まあ、実際戻ってくるのはしばらく先なんで、ゆっくり考えます :-)]


2008-03-11 [長年日記]

% [雑談] あー調子出ねーな、もう

それもこれも、このところの春のような陽気のせいだ。(わしは自律神経弱い人です)

寝ても寝ても眠い…… エンジン出力が通常時の 30% 程度って感じ。 あかんわ……

% [雑談] なかなか考えがまとまらなくてイライラ

昨日からとある機能について、どんな仕様にしてさらにどう実装するかをず〜っと考えてて、いろいろ調べたり実験したりしてるんだけど、調子が出ないのも相俟ってどうしても「こうしよう」とはっきり方針を打ち出せずに悶々としている。 こういう「何もしてないわけじゃないんだけど、なぜか時間だけが過ぎて結果が出せない」って状況が一番精神的にヘコむなー。

こういうときは何か気分転換が必要なんだけど、匙加減が難しいんだよね。 逃避しすぎて戻ってこれなくなってもダメだし、中途半端だと結局気になって気分転換にならなかったりとかで。

% [clip][Erlang] Starling -- Unicode string library for Erlang

via programming reddit.

Erlang で Unicode 文字列を使えるようにするモジュール。 ICU とか言う (よく知らない) Unicode 関係のライブラリを使っているらしい。 ソースをチェックアウトしてみたら Rakefile とかあって笑った。

ちょろっとソースを見たところ、UTF-8 の文字列 (char のリスト) を UTF-16 に変換してバイナリとして保持するみたい。

基本的には ICU とのポートを開いて待ってるサーバプロセスに処理を丸投げって感じみたいなんだけど、サーバにメッセージを送る時にその都度バイナリを 16bit 値のリストに変換してるのが微妙に無駄っぽい。 どうせ毎回変換するなら変換後の形式で保持すりゃ良いのに、と思うんだけど、操作時のオーバーヘッドには目をつぶって保持する際のメモリ効率を重視してるってことなのかねえ。

% [game] わしはバーチャルコンソールで破産するんじゃないだろうか?

Wii を買って一週間も経ってないのに、すでに 9,000 円も使ってるんだが? この調子だと金の問題もあるけど、フラッシュメモリの容量もあっと言う間に枯渇しそう。

本日のツッコミ(全6件) [ツッコミを入れる]

Before...

% jijixi [うーん、単純なストレスなら何かしら発散すれば終わりなんですけど、今回みたいなのはそういうのとちょっと違って、いろいろ..]

% Hash [やー、その一時的にすっきりって意味ですー。 逆説的に言えばその対象に対する意識がどこかにあるうちは、何やっても離れ..]

% drkazu [>すでに 9,000 円も使ってる すごいですね〜。 5,000円のポイントまだ半分も使ってないですよー ..]


2008-03-13 [長年日記]

% [雑談][Gauche] そろそろ『プログラミングGauche』が発売されるが…

だいたい買う方向で考えてはいるけど、やっぱり「技術書は中身を見てから」というポリシーが邪魔をして Amazon でポチっとする気になれない。 まあ、近所で見かけなかった場合にはそうなるとは思うが。

ところで表紙の魚はどういう意味があるんだろう。

% [雑談] 息抜きと称してゲームをやるのは危険

少なくともわしにとっては。 特にゼルダとかダメだね、終わらないから。 一旦やり始めちゃったら平気で 5 時間とか。 どんだけだよ(苦笑

ゲームに限らないけど、仕事や勉強の息抜きとして何かをするならだいたい 30 分程度ですっきり区切りの付くものにしないといけない。 1 時間とかそれ以上の時間を使ってしまうと、脳のモードが遊びに切り替わってしまって息抜きじゃなくサボリに変化してしまうので。

まあわしの場合、たとえ 30 分で決着がつくゲームをやったとしても、すぐに「よーし二回目だ」とか思っちゃうダメ人間なので、やっぱりゲームをやるのは良くないのである。

あと、まんがの単行本とかも良くないね。 一冊読むとちょうど良い時間だと思って始めても、気がつくとずっと先の巻まで何冊も読んでたりとか(笑

本日のツッコミ(全8件) [ツッコミを入れる]

Before...

% jijixi [これはなんとも予想の斜め上を行く "なんか楽しげな名前" の正体w ハワイの言葉ってなんでこう繰り返すようなものが..]

% takkanm [先週末にフライングでゲットしているんですけど、よくある入門ではなく実践的なGaucheの本ですよ。 通常オライリー..]

% jijixi [> よくある入門ではなく実践的なGaucheの本ですよ。 お、それは楽しみですな。 購買意欲が増しました。]


2008-03-14 [長年日記]

% [雑談] 2003 年と結構古い記事だが……

西尾さんとこ経由で、「テスト駆動開発」はプログラマのストレスを軽減するか?という記事を読んだ。

で、西尾さんの、

えっ、そうなの?!

という感想はたぶん「リファクタリングの仕方がおかしくね?」ってことじゃないかと思う。 正しい実装を導き出すために書いたテストケースは取り除いちゃいけないよね。

Assertion.AssertEquals( 3, SampleClass.Plus(1,2) );
Assertion.AssertEquals( 5, SampleClass.Plus(2,3) );

これをリファクタリングするなら、 (C# はよく知らないんで Ruby で書くけど)

[ [ 3, [1, 2] ],
  [ 5, [2, 3] ],
].each do |expected, args|
  assert_equal expected, SampleClass.plus(*args)
end

みたいにするんじゃないのかね。 じゃないと、他のテストケースをグリーンにするために実装を変えたとき、意図せず 2 + 3 が 5 にならなくなっちゃっても検出できない。

つーか TDD 云々は置いといて、テストってのは一回書いたら求められる仕様が変わらない限りは消しちゃいけないのが常識なんじゃないかと思うんだがにゃー。 だいたい「リファクタリング」ってのは「コードの意味を変えない」ものなのに、テストケース削ったらそりゃリファクタリングじゃないだろーと。

% [clip] 日本ほど恐ろしい国はない (2ちゃんねる実況中継)

日本スゲーなw

ただ言われてみると笑い話じゃなくホントにそう思ってる外国人は、いそうだよね。 言ってることは確かに間違ってないし。 まー、今の日本人にそれだけの力があるかっつーと微妙な気はするけど。

% [clip] プログラマのマは、魔法使いの魔 (アルファルファモザイク)

この手のスレは以前よく見かけた気がするんで目新しさはないんだけど、一つだけツボなレスがあったんで。

魔法使いなんで、HP少ないし、疲れたんで、今日休みます。

苦笑した。

% [clip] Emacsのmanページがひどい件について (Plan9日記)

爆笑もの。 これはひどい(笑

% [雑談] ランダムテストについて、とりとめもなく

きむらさんが取り上げてたのに触発されて。 既存のランダムテストフレームワークの現状とかは知らないで書いてますよ。(エチケットペーパー)

某氏曰く、「Ruby 使う人は Random Testing について知らないんじゃないですか」

[イネムリネズミ日記より引用]

すんません、存在は知ってるけど使ってません。 詳しく調査もしてません。 なんで使わないの?と聞かれれば「使うことでどれほど幸せになれるかわかんないから」ってことかと。

ランダムテストってのはつまるところ入力値をランダムで生成してくれるものなんだろうけど、それは結局その入力に対して期待される結果 (should とか expected とか) までは生成してくれないよね。 してくれるならすごいけど、まあここはしてくれないと仮定する。 そうすると、それを使って書けるテストは例えば「例外が起こらない」とかそういう非常に粒度の粗いものに限定されると思う。 それってとりあえずテスト駆動開発なんかには向かない感じ。

どっちかと言うと TDD 的なテスト (最終的にパスするのが前提のテスト) ではなく、自分では気付きにくい境界値を探すために使うのが良いんじゃないだろうか。 要はどっかで失敗してくれるのを期待するようなテスト。 で、そういう方向で考えると池上さんとこで例に挙げられてるような、『86 回目のテストで運良く問題が見付かって』 そしてそこで止まっちゃってるみたいのはちょっと嬉しくなくて、その 86 回目のテストが failure だとしても止まらずに、100 回なら 100 回既定回数全部チェックした上で、失敗した入力値をリストアップしてくれた方が良いような気がする。 そうした方が、「きなくさい入力はどんなのか」という情報を得やすいんじゃないかな。

あー、でもそういう考え方でのランダムテストって随分昔からあるような気がするけど…… 概念としてはあったけど、フレームワーク的なものはなかったのかな。 まあ、どっちにしてもわしがランダムテストを使うなら、こういう使い方をしたいなと思うので、そういうのがあれば欲しいかも。

機能としては、

  • TDD 的なテストと違って常に実行されてほしいわけじゃないので、それらのテストと混ぜて書いておいても、実行するように指定したときにしか動かないような仕組み。
  • 指定回数全部チェックして、失敗した入力値をリストアップする仕組み。というか場合によっては成功したものもリストアップできた方が良い。

こんな感じ? いつか気が向いたら RushCheck のソース読んでみるかなー。 (いつのことやら)

本日のツッコミ(全3件) [ツッコミを入れる]

% きむら(K) [筆者が誰なのかがわかった時点で納得しちゃいましたよ。ワタクシ(笑) ]

% jijixi [あー、そういう方面(?)の人なんすね(苦笑]

% きむら(K) [あ、K俣さんをご存じなかった? 日経ソフトウエアとかでツッコミどころ満載の連載があったりしますし、 一昨年くらい..]


2008-03-16 [長年日記]

% [雑談] 動的型付け言語でランダムテストを使った場合にあらわれるパラノイア

注:ネタなので、あんまりマジメに受け取らないように。

例えば静的型付け言語で int -> int (整数を受けとり整数を返す) という型の関数があったとする。 その関数のテストとして、無数のランダムな整数を生成してテストし問題が出なければ「ああ、この関数はだいたい問題が無さそうだ」と安心できる。

こういうパターンは確かに静的な、特に強く型付けされた言語 (Haskell とか OCaml とかもろもろ) においてはうまくいくだろう。 この関数にはどうせ int しか入力されないんだから、無数の int を調べれば確かに安心感は得られるわけだ。

では、これが動的型付け言語だったらどうだろう。 テストするのは同じく int -> int な動作をする関数だ。 その場合、無数のランダムな整数を使ってテストしただけで安心は得られるだろうか?

答えは NO じゃないかな。

たしかにその関数の「想定された引数」は整数だ。 でも動的型付けだから実際には整数以外のあらゆる型の値が入力され得る。 ということは、整数以外の型の値が入力された場合のテストも欲しくなるだろう。

もちろんこの場合、引数が「整数であるか否か」が境界条件になっているわけだから、普通の人は「整数である」場合と「整数以外である」場合のテストを書こうとするだろう。 しかし、ここでハタと思う。

整数である場合には無数のランダムな整数をテストしている。 であるなら、整数以外である場合にも「無数のランダムな整数以外の値」をテストしないとダメじゃないのか?

そうして書き始めるのだ。 無数の小数のテスト、無数の文字列のテスト、無数の配列のテスト…… そしてまた思う。

待てよ? どんな型が来るかわからないのなら、こんな限定された型のテストじゃダメじゃないか。 「無数の型」をテストしなきゃ。

かくして書き始めるのだ。 無数の型をランダムに定義し、その型の無数の値をランダムに生成するテストを……


2008-03-17 [長年日記]

% [雑談] スターテンビリオン

Wii を買ったおかげでポイントが溜まったので申し込んであったんだが、それが今日ようやく届いた。

回転の感触が昔のものより高級感があるような気がする。 ともあれ大変ぷりちーなので、さっそくインテリアとして活用させていただこう。

え、遊ばないのかって? 苦手なんすよ、わし、なんちゃらキューブとかこういうのとか(苦笑


2008-03-18 [長年日記]

% [雑談] マジレスされてしまったので一応わしもマジレスしとこう

ref. ネタにマジレスしてみる - takkan_mのNo planな日常

マジメな話をすれば、あーゆーシチュエーションのときにはわしも整数以外のテストなんか書かないと思う。 厳密に言えば、「整数が入力されることしか想定しなくても良い場合」なら整数以外のテストは書かない。 ある意味あたりまえだけど。

テストというのは要するに仕様のことなので、もし文字列が入力されても整数に変換して処理しちゃう…… みたいな仕様にするなら、当然それに関するテストも書く。 あるいは、整数以外のものが入力されたときに何らかのエラーを返すという仕様なら、そのテストを書く。

動的型付け言語で型にこだわりすぎるのは不毛なので、あのネタみたいなパラノイアに陥るのはナンセンスだと思う。 だからこそ、あれは (ジョークという意味合いでの) "ネタ" なわけで。

% [Ruby][雑談] 暗黙の変換メソッド

というものがある。 to_int とか to_ary とか to_str とかそういうの。

これらはたしかに組み込みのメソッドなんかでは知らない内に呼び出されてるから「暗黙の」と言えるのかもしれないが、自分でコードを書く場合には結局必要に応じて自分で呼び出さなくてはいけない。 でもせっかく「暗黙の変換」のために用意されてるなら、もう少し楽に (というか読みやすく) 使えても良いんじゃないだろうか。

例えば受け取った引数をとにかく整数に変換して処理するメソッドを書いたとしよう。

def hoge(arg)
  arg.to_int + 1
end

このメソッドを使う側としては何も考えずに適当なインスタンスを渡しても、それなりに結果が出る。 少なくとも to_int メソッドが定義されている (数値に変換できる) インスタンスであればエラーになることもない。

ただ、中身が一行だから良いけど実際の処理がもっと長い場合、to_int が使われているかどうかソースを見ただけではわかりにくくなったりする。 で、わかりやすいようにわざわざ、

def hoge(arg)
  arg = arg.to_int
  arg + 1
end

みたいに、型変換をしている部分を最初に集めたりして、見やすくしたり。 でもこれ、美しくないと思うんだよな。 で、こういうのは仮引数のところで「型変換しますよ」というのを明示できると良いんじゃないかと思うわけ。 例えばこんな↓

def hoge(arg.to_int)
  arg + 1
end

こう書いておくと、to_int した値を arg に入れて渡してくれるみたいなさ。 これだと、使う側もソースの一行目を見るだけで、「ああ、これは to_int を持ってる値ならうまいことやってくれるんだな」とすぐわかる。

実際どれだけ嬉しいかはわかんないけど、こういう仕組みがあるとちょっとおもしろいんじゃないかと思っただけ。

% [雑談] 今はまさにドル建てで物を買うチャンスなんじゃないかと思うんだが……

買うものが思いつきませぬ orz

% [雑談] 最近いろんなところで MBA という文字列を目にするが……

なんで Master of Business Administration が急に話題になるようになったんだろう?…… とか本気で思っててすいません。 って言うか、MacBook Air のことだなんてわかんねーよ。 誰だ、最初にこんな略し方したの。

本日のツッコミ(全5件) [ツッコミを入れる]

Before...

% cooldaemon [そう言う時は、ドルそのものを買うのが良いかと(w; んが、今は、買い時ではなく、売り時です。 個人的には、北京オ..]

% cooldaemon [あ!?これもネタにマジレスになるのか(w;]

% jijixi [Amazon.com で MacBook Air の一番安いやつだと $1,800 ちょいなんで、今買えば 20 万..]


2008-03-19 [長年日記]

% [Mac] Safari 3.1 入れた

livedoor reader とかが結構速くなった感じ。 その他全般的に動作がキビキビしたような。 つーか、Safari って元々はこんなじゃなかったっけ?という感じ。 いつの間にかノロくなってて、さらに気付かないうちにそれに慣らされてたってこと?

% [雑談] わしはもう、はてダにはコメントしないことにした

だって、今まで一度たりとあの「画像内の文字列を入力してください」ってやつが一発で成功したことないよ。 死ねばいーのに(泣

なので今度からコメントしたくなったら、ここにこっそり書きます。探さないでください。

本日のツッコミ(全5件) [ツッコミを入れる]

Before...

% shiro [いやまさしく。なので私はもはや一度目は適当に入れてます (何か入れないとsubmitできなかったと思うので)。 た..]

% きむら(K) [今まで自分だけがああいう目にあっているものと思ってました(苦笑) ひょっとしてbot避けとか? ]

% jijixi [実は結構仲間がいたという事実w]


2008-03-21 [長年日記]

% [Gauche] 『プログラミング Gauche』 ゲット

「実用的なプログラミング」が約三分の二と、なかなか読みごたえのありそうな構成。 とりあえず個人的な興味としては、マクロとか Kahua とかその辺を拾い読みしてみたい。

% [Gauche] プログラミング Gauche を眺めてたらちょっと思い出したので実験してみた

いつぞやのあろはさんとこの util.match が遅いというエントリ→ ref.

記事の内容とコメントを読むかぎり、単純にマクロ展開だけが遅いんじゃないかという気がしたんで、マクロ展開を先にやっちゃえば良いんじゃないのかなーと思いつつ思っただけで終わってたんだけど、今ふと思い出して実験してみた。

リンク先のコードをコピペして、適当に以下のように改変。 すごく…… 適当です…… DRY って何だっけ。

% cat print_nessy.scm
#!/opt/local/bin/gosh -fcase-fold
(use util.match)
(print "#!/opt/local/bin/gosh -fcase-fold")
(print '(use util.match))
(print (quote (define im8?  (lambda (x) (and (fixnum? x) (<= 0 x) (<= x #xff))))))
(print (quote (define im16? (lambda (x) (and (fixnum? x) (<= 0 x) (<= x #xffff))))))
(print (quote (define low   (lambda (x) (logand x #x00ff)))))
(print (quote (define high  (lambda (x) (ash x -8)))))

(define mnemonic->hex
  (macroexpand
    (quote
;; ここには元のコードの match のところをそのまんま
;; あとカッコの辻褄合わせ
(print "(define (mnemonic->hex m)")
(print mnemonic->hex)
(print ")")
(print '(define foo #xff00))
(print '(define bar #xff))
(print (quote
(print (map  mnemonic->hex `((inx)
                             (lda ,bar)
                             (lda [,bar])
                             (lda [,foo])
                             (lda [,foo + X])
                             (lda [,foo + Y])
                             (lda [[,bar + x]])
                             (lda [[,bar] + y]))))))
% time ./print_nessy.scm >! nessy_expanded.scm
./print_nessy.scm >| nessy_expanded.scm  97.66s user 1.43s system 85% cpu 1:56.17 total
% chmod +x nessy_expanded.scm
% time ./nessy_expanded.scm
(232 (169 255) (165 255) (173 0 255) (189 0 255) (185 0 255) (161 255) (177 255))
./nessy_expanded.scm  0.15s user 0.04s system 65% cpu 0.294 total

ほんとにほとんどマクロ展開だけが時間食ってんのね(苦笑

ちなみにこの展開後のファイルを vim で開こうとするとエラいことになる。 なんせ三万近い文字が一行に収まってるんで、いろいろヒドい。 行指向エディタである vim はそんなアホみたいな長さの行には最適化されておりません。

ところで、こんな風にしてマクロ展開したものはポータブルに使えるものなんだろうか。 要するに、変数の衝突とかは展開時に考慮してくれてるんだろうけど、展開後のものを別の環境に読み込ませた場合に大丈夫なのかということなんだけど。 なんか大丈夫じゃない気がする。 だとすれば、今回みたいなやり方は多用すべきじゃないのかな。

% [Vim][Scheme] Visual mode でブロック選択

個人的に S 式書くときくらいしか必要性を感じないんで (そして S 式を書く機会は少ないんで)、いつもすぐ忘れちゃうからメモ。 (とか言いつつ、こうやって日記に書くと、なぜか憶えるんだよなー)

Visual mode に入って ab と入力すると、カーソル位置を囲むカッコの範囲が選択される。 具体的には、

(hoge fuga (piyo foo bar))
              ^

みたいなのがあって、カーソルが piyo の y にあるとすると、v を押して Visual mode に入り、ab と入力すると、

(piyo foo bar)

が選択された状態になる。 ab じゃなく a( とか a) でも良い。

ちなみのこのコマンドは a block を意味していて、inner block つまり ib とするとカッコを含まない範囲になる。 他にも、Block (aB, iB) でブレースのブロックとか、a< や a[ 、a" 、a' みたいなので、それぞれの記号に対応したブロックを選択可能。 もちろん a じゃなく i にすれば記号自体は含まない。

これらは実際のところ w とか e みたいな範囲指定と同様の扱いなので、厳密には Visual mode に限らず通常の vi コマンドでも使える。 要するにコマンドモードで、

yab

とか打つと、カーソル位置を囲むカッコの範囲をヤンクする。 でもまあ、わしは最近 Visual mode 無しじゃ生きていけなくなってるんで、おとなしく Visual mode 使うけども。

その他、詳しくは :help text-objects するとよろしい。

本日のツッコミ(全2件) [ツッコミを入れる]

% shiro [gensymしてるシンボルが他とぶつからないと保証されてるのはプロセス内だけなので、一度ファイルに書き出すとうまくな..]

% jijixi [なるほど、やっぱりそうですか。]


2008-03-22 [長年日記]

% [game] Wii を買うきっかけになった NiGHTS だが……

正直、全然やってないという(苦笑

だってさー、なんかおもしろくないんだもん。 まずミニゲームっぽいレース物みたいなのがつまらんでしょ。 でもまあ、それはガマンできるんだ。 けどね、けどね、ボス戦のあのかったるさって何?

男の子編の最初の丸いボスで、掴むのに失敗して一番下まで落ちてった時にはコントローラー投げそうだったよ。 んで、さらに次のカメレオン。 わけわかんねー。 一回目は適当にやってたらたまたま見付けて倒せたけど、二回目は穴開けてもすぐ消えるから全く見付からない。 一応、穴開けたときにそこにいれば、プレデターみたいにゆがんで見えるのは気付いてるけど、そんなんすげー見づらいし、穴開ける前にいそうな場所を予想する方法でも無いと無理。

そして結局カメレオンは倒せてないわけだが。 何か攻略法があるのかもしれないけど、だとしてもボス戦がかったるくてやたら作業的なのは変わらんと思う。 NiGHTS のボスってのはさー、慣れれば瞬殺できるってのが楽しみの一つじゃないの? 今回のボスって、たとえ慣れても瞬殺なんてできそうに思えない。 もう、ただただかったるい。

このゲームを最後までクリアする時は来るのかなー……


2008-03-23 [長年日記]

% [clip][Smalltalk] 文字列クラスのメソッド数比較 (sumim’s smalltalking-to)

元ネタを読んだ時点で、sumim さんならやってくれると期待してたw

% [clip] sm2752873 (機動戦士ガンダム00 クリス、リヒティ追悼動画)

こ・れ・は・ヒ・ド・イw

ついでだから、OO のまじめな話をしとくと、今の流れだとソレスタル(略) はこのまま全滅して終わりそうだよね。 さすがに全員死ぬってことはないだろうけど、戦力的にはそうなると思われ (つーかすでにほとんどそうなってるが)。 厳密に言うと、敵の疑似太陽炉搭載兵器を全滅させて、相打ちの形になるだろう。 まあ、ありがちっちゃーありがちな展開だけど。

ところでサジ・クロスロードは姉ちゃんが死んで以来、呪いの言葉を吐いたくらいであとはヒッキー状態だけど、これは二期で活躍するフラグか? 新生ソレスタル(略) のメンバーになってそうで怖いな。 でも、内部からの崩壊をもくろむ潜入工作員みたいな立場だったら許す。

最終回に主人公グラハムの出番があるのかが今一番気になる事柄。 このままだと、倒すガンダムがいなくなっちゃうよ。

% [game] Wii 版 NiGHTS 一応クリア

かったるかったけどがんばった、がんばったよ。 いまだにカメレオンの効率的な倒し方はわかんないが。 結局、一番のハマリどころはこいつだったという。

最終面の演出はなかなか良かったね。 でもせっかく良い感じの流れがムービーのせいでブッツリ切られるのが残念すぎる。 ムービーいらね。

ともあれ、最終面の出来が結構良かったんで、全体的な評価はちょっと上がったかな。 どっちにしろ、前作のようにやり込む気にはならんが。 あ、森の演奏会だけはやり込んでも良い。

本日のツッコミ(全1件) [ツッコミを入れる]

% Hash [>主人公グラハム リアルで吹いてしまいましたwww]


2008-03-25 [長年日記]

% [Gauche][Kahua] ちょっとだけ Kahua で遊んでみた

結構楽しい。 entry-lambda で一時的な URI を簡単に作れるところとか良いなー。

REST 的ではない気がするけど (まあ、謎の URI が無数に存在するってだけで、ステートレスではあるのかな)、Web API みたいなものじゃなく、もっとフロントエンド的な Web アプリを作るには楽そう。 なんか簡単なの作ってみたいな。ネタが無いけど。

Scheme が書ける人じゃないと全くメンテナンスできそうにないのは、まあ仕方ないか(苦笑

% [game] Wii ウェアが開始されたので

もじぴったんを買ってみた。 こりゃ良いわ。

リモコン操作なんで片手でできるし、やり込み要素を気にしなければ全ての面を時間制限無しにできるし、過去最高のまったりプレイ環境。 問題数も十分あるし、これで 1,000 円なら安い。

% [clip] ゲーム脳のガイドライン (日刊スレッドガイド)

サイレントヒル ・・娘を助けるをためならグレイに質問しても構わない意識が身に付き栄養ドリンクの過剰摂取につながる

カオスすぎるw

サイレントヒル2 ・・便器に手を突っ込む・穴に飛び込むなど常軌を逸した行動を奨励しオマエノシワザを誘発する

ほんとに常軌を逸してるからな。 底が見えない穴に平気で飛び込むとか、どうかしてるとしか思えない(苦笑

% [雑談][Ruby][Python][Gauche][OCaml] 文字列が mutable か immutable か

いまどき、文字列が mutable であることを利用している人ってどれくらいいるんだろう? もう文字列なんてみんな immutable になっちゃえば良いのに。 Ruby では文字列が mutable なので、こんなコードを書いても↓

irb(main):001:0> def s
irb(main):002:1>  'hoge'
irb(main):003:1> end
=> nil
irb(main):004:0> s.equal? s
=> false

s というメソッドが実行されるたびに毎度新しく 'hoge' という文字列が生成される。 なんだかすんごく無駄な気がしてしょうがない。

文字列が immutable な言語だと、こういうのは簡単に最適化できる。 要するに文字列が不変なんだから、毎回同じものを返せば良い。

% ipython
In [1]: def s():
   ...:     return 'hoge'
   ...: 

In [2]: s() is s()
Out[2]: True
gosh> (define (hoge) "hoge")
hoge
gosh> (eq? (hoge) (hoge))
#t

こんな感じで。 Ruby で何か書いてると、文字列リテラルを書くたびに「ああ、また無駄なオブジェクトが生成されてる」とか考えちゃうんだよなー。 貧乏性だとは思うんだけど(苦笑

まあねえ、だからって OCaml みたいなのもどうかと思うけどね。

% ocaml
# let s () = "hoge";;
val s : unit -> string = <fun>
# s () == s ();;
- : bool = true

一瞬嬉しいような気がするんだけど……

# (s ()).[0] <- 'm';;
- : unit = ()
# s ();;
- : string = "moge"

世を儚んで死にたくなる...orz

本日のツッコミ(全6件) [ツッコミを入れる]

Before...

% jijixi [ソースを取り出せることが、逆に怪しげな事態を引き起こしてるんですね(苦笑 何にせよ文字列が mutable な..]

% c-yan [Delphi の copy on write な mutable 文字列で育った私も、Python に染まって im..]

% quek [Common Lisp も似た感じです。 (defun ss () "hoge") (ss) => "ho..]


2008-03-26 [長年日記]

% [Perl][Catalyst] Catalyst のインストールは初心者には地獄

ちょっと事情があって Catalyst をインストールしてみたりしてるんだけど、なんつーかぶっちゃけ……

終わらん。

ちなみに環境は FreeBSD 6.3R で、Perl のバージョンは 5.8.8 とか。 そもそも Perl & CPAN なんて (自分では) 全然使ってないから、何かしようとすると「まず install Bundle::CPAN しようや」と提案される。 でまあ、そのとおりにしてみるものの、これがまず終わらん。 つーか、しょっちゅうアーカイブの取得に失敗して止まる。

失敗しました… っていうファイルを自分で wget とかしてみると普通に取れたりして、何が悪いのかよくわからんし。 しゃーないから、止まるたびに失敗したモジュールを単品で入れて (これが何回もやり直さないとうまくいかなかったり、これまたよくわからん) やり直し、ようやく Bundle::CPAN のインストールが終了した時点で、なんか二時間くらい経ってた気がする。

で、いよいよ Catalyst のインストール。 ここを参考にさせてもらって Module::Find と Path::Class を入れ、Task::Catalyst のインストールを開始…… したけど、これがまたいつ終わるんだという感じ(苦笑

アーカイブの取得は失敗しなくなったから、先に入れた何かのおかげで直ったんだろうけど、それにしてもほんと、いつ終わるんだか……

あと、エンターキーを押す回数が尋常じゃないのも何とかしてほしい。(たぶん、何か方法はあるんだろうけども)

% [雑談][Perl][Catalyst] Catalyst に入門してみた感想

基本的な動きはわりと Rails に近い感じ。 問題は、いろいろ手の込んだことをやろうと思い始めたときに、どこを見て良いのかわからんところか。 Rails がフルスタックであることの利点ってそういうところにあるのかな、という気がするけど、Rails だと Rails の内部だけ見てればそれなりに何とかなるけど、Catalyst の場合は Catalyst 以外のところを色々知らないとつらい感じ。 DBI とか TT とか知らねーよ、みたいな。 逆にそれらを今まで使いこなしてきた人は、コントローラ周りだけ憶えれば何とかなるのが嬉しいのかもしれないが。

うまく最近の記事を見付けられなくて、とりあえずここ見ながらほぼ同じものを作ってみたんだけど、現在は結構色々違ってるっぽい。

とりあえず、わざわざ $c->stash->{template} にテンプレートのパスとか入れなくても、/root 以下のコントローラの構成に応じた場所にテンプレートを置いとけば、何も書かなくてもそれを使ってくれるみたい。 FooBar というコントローラの show というアクションだったら、/root/foobar/show.tt とか。 命名規則はちょっと違うけど、Rails もやってることは似たようなもん。

さて、もしこれでもっとちゃんとした何かを作ろうとなった際に問題になるのは、わしの Perl そのもののスキルもさることながら、Perl で何か困ったときに解決策を探る方法のノウハウが無いことだろうなあ。 (まあ、そういうのも含めて "スキル" だという話もあるかもしれないが)

ググれ、と一口で言っても、効率の良いキーワードを思い付くか否かには、やっぱりノウハウが必要だと思うし。

本日のツッコミ(全4件) [ツッコミを入れる]

Before...

% jijixi [お、こりゃどうもです。]

% cooldaemon [いつの間に perl へ(w; FreeBSD 6.3 のインストールが完了した時点で cpan コマンドが..]

% jijixi [cpan コマンドは対話モードで使っとります。 新しくなったら補完や履歴も使えて便利ですね。 インストールスクリ..]


2008-03-27 [長年日記]

% [Perl] Perl の対話環境

perl -de 42 とかはどうも気に食わないんだけど、これと言って良さそうなものも見つけられず、とりあえずは mzp さんのやつをパクらせてもらって、ちょろっと改良したものを使うことにした。 何か、もっと良いのを知ってる人は教えてください。 irb みたいなのが欲しいんです。

% cat iperl
#!/usr/bin/env perl
package REPL;
use strict;
use warnings;
use Data::Dumper;
use Term::ReadLine;

local $Data::Dumper::Purity = 0;
local $Data::Dumper::Terse  = 1;

sub main::p {
   my @args = @_;
   print Dumper(@args);
}

my $__term__  = new Term::ReadLine 'term';
my @__spool__ = ();

sub readline_from_term {
   my $prompt = $#__spool__ < 0 ? 'perl> '
                                : '    | ';
   $__term__->readline($prompt);
}

while (defined(my $__line__ = readline_from_term)) {
   push(@__spool__, $__line__);
   if ($__line__ =~ /;;$/) {
      my @__result__ = do {
         package main;
         eval(join("\n", @__spool__));
      };

      if ($@) {
         print $@;
      } else {
         print "=> ", Dumper(@__result__);
      }

      @__spool__ = ();
   }
}

変数のうまい隠し方がわからなくて、eval するときに触れてしまうので、変数名にアンダースコアとか付けてみたり。 パッケージが絡んだときの変数のスコープの扱いが、他の慣れてる言語に比べるとクセがある感じでどうもうまくいかないんだよな。 あと、すごく適当に複数行入力をサポートするために、OCaml みたいに ;; を入力した時点で実行するようにした。 他には、Ruby の Kernel#p に相当する p 関数とかも用意してみた。

Perl 初心者なので、添削歓迎いたします。 (や、初心者じゃない言語のときも、添削おことわりってわけじゃないですょ)

% [clip][Perl] perlsh (CPAN)

via perl でインタラクティブなシェルを実現する perlsh - 川o・-・)<2nd life.

というわけで、教えてもらったので使ってみたり。 やっぱり CPAN で直接インストールする方法はわからなかったので、install Term::ReadLine::Gnu した後、CPAN のサイトの Source のリンクから直接ダウンロードして適当な場所に突っ込んだ。

良い感じではあるけど、複数行で書きたいときには改行前にバックスラッシュ入れなきゃないのがちょっと面倒。 まあ、ソースの長さから考えて irb と比べるのは無茶なんだとは思うけど。 つーか、irb はがんばりすぎ。 こっそり構文解析とかやってるからね(苦笑

% [Perl] .perlshrc

なんか素の状態だと配列とかハッシュが返ったときの表示が残念すぎるので…

main[20]$ [1,2,3];
ARRAY(0x81f18bc)
main[21]$ {foo => 1, bar => 2};
HASH(0x81f18b0)

改造を決意。 つーかまあ、表示用の関数 printer を Data::Dumper 使ったもので上書きするだけ。 で、~/.perlshrc を起動時に読んでくれるので、

% cat ~/.perlshrc
$PerlSh::STRICT = 1;

use Data::Dumper;
sub PerlSh::printer {
   my @args = @_;
   print Dumper(@args);
   undef;
}

てな感じにしておいた。

main[22]$ [1,2,3];
$VAR1 = [
          1,
          2,
          3
        ];
main[23]$ {foo => 1, bar => 2};
$VAR1 = {
          'bar' => 2,
          'foo' => 1
        };

それなりに嬉しくなったね。

% [Perl] pirl

さらに教えてもらったのでお試し中。 cpan で Shell::Perl をインストールするとコマンドも一緒に入る。

pirl @> [1,2,3]
[1, 2, 3]
pirl @> {foo => 1, bar => 2}
{ bar => 2, foo => 1 }

表示がとても普通っぽいのがよろしい。

pirl @> :set out Y
pirl: YAML loaded ok
pirl @> [1,2,3]
---
- 1
- 2
- 3

とかすると YAML で出力してくれたりするのはおもろいな。 で、:set ctx を使うと eval する際のコンテキストが設定できるみたいなんだけど、何に使うんだこれ。

pirl $> :set ctx list
pirl @> (1,2,3)
(1, 2, 3)
pirl @> :set ctx scalar
pirl $> (1,2,3)
Useless use of a constant in void context at (eval 60) line 1.
3

コンテキストによって動作が違う操作を試してみるのに使えば良いのかな。

全体的に perlsh よりは高機能って感じだけど、残念なことに複数行入力の仕組みが無い。 まあ、perlsh にしても単に最後がバックスラッシュだったら溜めておくって処理を入れてるだけだけど、そういう単純なことも全くやってないようだ。 man Shell::Perl すると TO DO の項目に、

Accept multiline statements;.

とか書いてあるんで、今後に期待というところかねえ。 とりあえず perlsh っぽくアドホックな対処でも入れとこうかと思ったけど、どうすんのが良いのかなー。 起動時のフックとかは無いみたいなんで、起動スクリプトごと自分で書いちゃうのが良いかね。 そもそも pirl ってスクリプトの中身って単に Shell::Perl->run_with_args を呼び出してるだけだという(苦笑

% [Perl] .perlshrc 修正

とりあえず pirl を直すより perlsh の printer を pirl のに直せばオッケーじゃね? ということで、Shell::Perl::Dumper のソースを見ながら以下のように修正。

% cat ~/.perlshrc
$PerlSh::STRICT = 1;

use Data::Dump;
sub PerlSh::printer {
   print Data::Dump::dump(@_) . "\n";
   undef;
}
% perlsh
main[26]$ [1,2,3]
[1, 2, 3]
main[27]$ {foo => 1, bar => 2, baz => 3}
{ bar => 2, baz => 3, foo => 1 }

しかし、Data::Dump やら Data::Dumper やら Data::Dump::Streamer やら、なんやらかんやら、Ruby なら inspect 一発なのになんだか色々あってカオスだねえ Perl は。

ともあれ、こんな感じで当面は perlsh を使うことにしよう。 コンテキスト依存な実験がしたいときには pirl を使うということで。 あと、pirl が複数行入力に対応したら乗り換えよう。

% [clip] sm622762 (海外版 マスターシステム SAGAIA (ダライアスII) Part1)

何この信じられないほどの神移植。 セガマークIII (マスターシステム) の性能でここまでやるって尋常じゃないぞ。 ファミコンと同世代の機種だぞ。

本日のツッコミ(全4件) [ツッコミを入れる]

Before...

% jijixi [おー、これは良い。ありがとうございます。]

% odz [Shell::Perl についてくる pirl てのもありますよ。]

% jijixi [おっと、情報どうもです。試してみます。]


2008-03-28 [長年日記]

% [Perl] perlsh より pirl の方が高機能とか書いたが嘘だった

perlsh の方には補完機能とか付いてて、こっちの方が五万倍くらい高機能だった。 やっぱ、perlsh を使い続けるよ。

% [Perl] .perlshrc 改訂版 (修正済)

複数行入力したい時にバックスラッシュ必須なのは、やっぱりめんどいので適当に対処しようと思った。 で、暗黙に複数行モードになってほしいときって、大抵は開きカッコが行末に来てるはず。 ということで、reader 関数を改造して、行末が開きカッコの場合は同じ種類の閉じカッコが行末に来るまで処理しないようにしてみた。 あと、行末がカンマの場合も複数行モードに入るように。 複数行モードに入ったら、閉じカッコかセミコロン二つが来た時点で eval する。

% cat ~/.perlshrc
# vim:filetype=perl

$PerlSh::STRICT = 1;
$PerlSh::PS2 = '\w[\!]> ';

package PerlSh;

require Data::Dump;
sub printer {
   print Data::Dump::dump(@_) . "\n";
   undef;
}

use vars qw(%paren_pairs);
%paren_pairs = ( '{' => '}', '(' => ')', '[' => ']' );

sub reader {
   my $line;
   my $command = '';
   my $multiline_mode = '';

   while (1) {
      $line = $term->readline($command ? prompt($PS2) : prompt($PS1));
      return undef unless (defined $line);

      if ($multiline_mode ne '') {
         if ($line =~ /;;$/ or
             $line =~ /([\}\)\]]);?$/ and $paren_pairs{$multiline_mode} eq $1) {
            $command = $command ? $command . " $line" : $line;
            $term->addhistory($command) if (length($command) > 0);
            return $command;
         } else {
            $command = $command ? $command . " $line" : $line;
         }
      } else {
         if ($line =~ /([\\\{\(\[,])$/) {
            if ($1 eq '\\') {
               chop $line;
            } else {
               $multiline_mode = $1 
            }
            $command = $command ? $command . " $line" : $line;
         } else {
            $command = $command ? $command . " $line" : $line;
            $term->addhistory($command) if (length($command) > 0);
            return $command;
         }
      }
   }
}
main[107]$ sub hoge {
main[107]>  print "hoge\n";
main[107]> }
()
main[108]$ hoge
hoge
1

かなり大雑把な実装だけど、無いよりマシ程度には使えるんではなかろうか。

(追記)ってあれ?バグってるな。さっきはうまく行ってたと思うんだが、その後何かいじったっけ。後で直す。(/追記)

(追記 2)直した。というかバージョン一段階戻した。かっこつけて同じこと書いてるのをまとめようとしたのが良くなかったか。DRY じゃないけどとりあえず良いや。(/追記 2)

% [Perl] Perl 初心者日記

配列とかハッシュとかリストとかの扱いについて、思った以上に認識があやふやだったんで、ちょっといろいろやってみる。

% perlsh
main[124]$ use vars qw($scalar @array %hash);
()
main[125]$ %hash = (1, 2, 3, 4, 5, 6);
(1, 2, 3, 4, 5, 6)
main[126]$ %hash
(1, 2, 3, 4, 5, 6)
main[127]$ \%hash
{ 1 => 2, 3 => 4, 5 => 6 }
main[128]$ %hash = { one => 1, two => 2, three => 3 };
{ one => 1, three => 3, two => 2 }
main[129]$ %hash
("HASH(0x8235158)", undef)
main[130]$ \%hash
{ "HASH(0x8235158)" => undef }

ハッシュ変数 (%) にハッシュそのものを代入したいときは、ハッシュじゃなくリストとして入れないといかんらしい。 というか、これがリストコンテキストというやつなのかな。 128 行目の処理は実質 %hash = ({ one => 1, ... }, ) と認識されてるってことなんだろうなあ。

main[131]$ @array = (1, 2, 3, 4, 5, 6);
(1, 2, 3, 4, 5, 6)
main[132]$ @array
(1, 2, 3, 4, 5, 6)
main[133]$ \@array
[1, 2, 3, 4, 5, 6]
main[134]$ @array = [1, 2, 3, 4, 5, 6];
[1, 2, 3, 4, 5, 6]
main[135]$ @array
[1, 2, 3, 4, 5, 6]
main[136]$ \@array
[[1, 2, 3, 4, 5, 6]]
main[137]$ @array[0]
[1, 2, 3, 4, 5, 6]

配列の場合もだいたい事情は同じか。 ただし配列リテラルを入れたときは、ハッシュのときみたいに文字列に直されるんじゃなく、配列のまま入るようだ。 つーかハッシュもキーじゃなく値の場所に入ってれば文字列に直されたりはしないのかな。

main[139]$ %hash = ('foo', { one => 1, two => 2 });
("foo", { one => 1, two => 2 })
main[141]$ $hash{foo}{one}
1
main[142]$ $hash{foo}{two}
2

ふむ。(たまに行番号が飛ぶのは入力間違いをしてるのを省いてるせいなので、気にしないように)

main[145]$ $scalar = %hash
"1/8"

この挙動↑ がわけわからん。 普通に考えたら "foo" とかが入りそうだがなー。

やっぱ Perl ってカオス。 でもたまにいじると、何か変な楽しさがあるのも事実だ(苦笑

% [Perl] our/my/local は package とあんまり仲良くなさそうな件

変数のスコープを操作するこれらの関数は、あくまでもファイル単位が基本であって、同じファイル内に複数のパッケージがあったとしても、それらのパッケージ間での隠蔽は期待できないようだ。

% cat a.pl
use strict;
use warnings;

package A;
my $foo = 'hoge';

package B;
sub f { print $foo . "\n"; }

package main;
B::f
% perl a.pl
hoge

この結果にはちょっとビビった。 他に、man perlmod を斜め読みして感じた違和感は、やっぱこれかな↓

% cat Foo.pm
package Foo;
use strict;
use warnings;
our $hoge = 'Foo';
sub f {
   printf "Foo::f\n __PACKAGE__ => %s\n \$hoge => $hoge\n", __PACKAGE__;
}
% cat Bar.pl
package Bar;
use strict;
use warnings;
our $hoge = 'Bar';
require Foo;

sub f {
   printf "Bar::f\n __PACKAGE__ => %s\n \$hoge => $hoge\n", __PACKAGE__;
}
sub Foo::g {
   printf "Foo::g\n __PACKAGE__ => %s\n \$hoge => $hoge\n", __PACKAGE__;
}

package Foo;
sub h {
   printf "Foo::h\n __PACKAGE__ => %s\n \$hoge => $hoge\n", __PACKAGE__;
}

package main;
&Bar::f;
&Foo::f;
&Foo::g;
&Foo::h;
% perl Bar.pl
Bar::f
 __PACKAGE__ => Bar
 $hoge => Bar
Foo::f
 __PACKAGE__ => Foo
 $hoge => Foo
Foo::g
 __PACKAGE__ => Bar
 $hoge => Bar
Foo::h
 __PACKAGE__ => Foo
 $hoge => Bar

Foo:g と Foo:h の $hoge の値がちょっと意外。 まあ、そういうもんだとわかってれば、それはそれで良いんだけど、__PACKAGE__ の値と整合性が無いのがどうにも残念。

% [雑談] EeePC を買おうか否か、かなりマジメに悩み中

基本的に引きこもりだから持ち歩くシチュエーションは滅多に無いと思うんだけど、前から思ってることがあって……

布団に入ってから、ふと思い付いたことを即座に試す環境が欲しい。

…… のである。 何というか、マンガ家とかがアイデアを書きとめるって話なら紙のノートとかでも良いんだけど、プログラマとしては書いて、かつ動かしたいわけね。 で、現状ではそういうシチュのときって、

  1. ひらめく
  2. どっこいせと起きる
  3. Mac のキーボードをバシっと叩いて起こす
  4. 書く

というプロセスを経るわけなんだけど、この「どっこいせ」とやってる間に思い付いたことがどっか行ってることが多いんだよね。 そんなときに、枕元に置いといて寝っころがったままパッと開いて使えるものがあると良いなと。 もちろん、それはなるべく軽くて小さい方が良い。 重くてでかいやつじゃ、せっかく寝っころがったままでも用意するのに「どっこいせ」が生じるに決まってる。

普段使ってる言語が普通に使えて (Ruby とか OCaml とか) …… となるとやっぱり Windows なり Linux なりが動いてくれないとツラいわけで、そう考えると EeePC ってかなり理想に近いんだよな。 Vim でコード書いたりターミナルで対話環境を動かすくらいだったら、そんなに大きな解像度は必要無いし。

なんか 6 月くらいに解像度アップしてタッチパネルになったのが出るみたいな噂もあるけど、タッチパネルになったらむしろ見づらいような気もするし、値段が上がるくらいなら今のを買っちゃっても十分な気がする。 そもそも Windows とかでタッチパネルって嬉しいのか?

とまあ、そんな感じで買おうか買うまいか悩んでいるのでありました。

ちなみにもし買うとした場合、もう少し予算を追加して工人舎のやつとか…… って線も無くは無いけど、別に大量のデータを持ち歩きたいわけでもなし、SSD の方が魅力的だよなあと思ったりもする。

とにもかくにも悩めるお年頃。

% [clip] プログラミングの知識ゼロの自分が、はてブでチラ見した知識だけでプログラマー同士の会話を妄想してみる。 (Everything starts with a Fuck!)

via アルファルファモザイク.

テラ鬼才www

「それPlaggerでできんじゃね?」

「Naoyaaaa!!」

超絶吹いたw

本日のツッコミ(全5件) [ツッコミを入れる]

Before...

% jijixi [お二方どうもです。 なるほど、"1/8" の正体はわかりました。 でも、ハッシュをスカラとして評価したときに、な..]

% きむら(K) [FAQあたりに「意味のある使い方は(たぶん)ない」とかあったような記憶があるんですが、 今見たらFAQには見当たら..]

% jijixi [意味無いんだ(笑 ならもっとマシなように変更してくれても良いのに。 Perl6 ではみんなリファレンスになるんで..]


2008-03-29 [長年日記]

% [雑談][Perl][Ruby] CPAN のすばらしさを垣間見た気がする今日この頃

このところ、ちょろちょろ Perl をいじってたおかげで CPAN のありがたさが少しだけわかったような。

何が良いって、モジュール名でインストールできるのが良い。 例えばどこかで何かのスクリプトを拾ってきたとしよう。 あるいはどこかのブログからコード片をコピペした、でも良いが。 手元で動かしてみたら、何々というモジュールがロードできないよー、とエラーが出た。 そんなときは、そのロードできなかったモジュールを CPAN でインストールすれば良い。 すげえ簡単。

Ruby だとなかなかそうはいかない。 インストールすべき gem がわかってれば、手間は大差無い。 でも、例えば拾ってきたスクリプトで何々というファイルが require できなかったよー、とエラーが出たとして、そのファイルを手に入れるためにどの gem をインストールすれば良いのかはすぐにはわからない。 どうしても、何かしら調べるというプロセスが必要になる。

この辺の感触の違いって案外大きいよ。 実際、Catalyst を試してるときに、いくつか足りないモジュールがあったんだけど、エラー見てすぐに必要なものをインストールできた。 そのときの妙な高揚感は何とも言えないものがあったね。 ああ、Perl を愛する人ってのは、この辺に魅力を感じてるのかもなあと思ったりした。

でもまあ、RubyGems (でも別の何かでも良いが) が CPAN のようになるのは無理だろうなあ。 そもそも Ruby はライブラリのパス構成が自由すぎるままに広がっちゃってて、今さら CPAN みたいな整然とした構成を作り上げるのはツラすぎる気がする。 モジュール名からファイル名を導き出す (あるいはその逆) 統一的な方法が無いんだよね。

ちなみに ActiveSupport が拡張してる const_missing の仕組みって、CPAN 的だと思う。 モジュール名とファイル名がそれぞれお互いの名前を類推できる規則を作ってるわけで。 全体的にはあんまり好きじゃない ActiveSupport だけど、そこのところで綺麗な仕組みを作ってるのは結構好きだったりする。

% [雑談] 今日のガンダム OO 最終回は放送時間が早いので間違わないようにしないといけない

と、備忘録。

% [雑談] ガンダム OO 最終回

すげえ思わせぶりな終わり方したなあ。二期が楽しみ。 O ガンダムとやらがあまりにガンダムすぎでワロタ。

っていうかグラハムは何で愛の告白とかしてんのw

結局、疑似太陽炉のおかげでエネルギー問題がほぼ解決されて、とりあえず世界は平和に向かったってことなのかね。 で、アムロ (正式な名前知らず) が次の敵になるのか。 つーかヤツは結局何者なんだろ。

本日のツッコミ(全3件) [ツッコミを入れる]

% Hash [ですね! 今まで録画で見てましたが、今日は生で見ようと思います。]

% takkanm [>O ガンダムとやらがあまりにガンダムすぎでワロタ。 見事なMK2でしたね]

% jijixi [OO ガンダムのデザインがどんなことになるか楽しみです :-)]


2008-03-30 [長年日記]

% [雑談] 寒ぃよ……

こないだまで春みたいだったから、なおさら寒く感じるのかもしれないが、あー寒い。


2008-03-31 [長年日記]

% [雑談] 今やってる仕事が一段落したら EeePC でも買いに行こうかな

…… と考えた瞬間、「なにこの死亡フラグ」とか思ってしまったわしは何かダメなものに毒されてると思った。

% [雑談][Mac] 調子良くキーボードを叩いてるときにポップアップされる Google Notifier のログインダイアログは異常なほど頭に来るよね

なんかの拍子にログインできなくなったりして出るやつ。 何様だよお前は、と思う。 たかがメニューエクストラのくせして何偉そうにポップアップしてんの。 ログインとかどうでもいーから、黙ってメニューにバッテンでも何でも表示してりゃいんだよ。

Gmail はバックアップ用途にしか使ってないから、POP で取ったりしてなくて、けど、もし Gmail のアドレスに何か送ってくる人いたら困るからって念の為入れてあるだけなのに、なんで無駄に存在感示そうとすんだろね、こいつは。 もう今まで何度も何度もイラついてきたんだけど、さっきのはさすがに度を越してたからもう消す。 ログイン項目から消す。っていうか /Applications フォルダから消す。

なんかすごい集中してて、すごい勢いでキーボード打ってたんだけど、ポップアップしたダイアログにすごい数のキー入力を持っていかれてエディタ側に何も残ってなかったときにはどうしちゃろうかと思ったよ。 つーか、あまりに集中してたから何が起こったのか一瞬わからなかったよ。 頭の上をハテナマークが五個くらい飛んでたよ。

あー、だめだ、今日はもーだめ。 一気に頭に血が昇ったせいか、さっきまで考えてたことも半分以上吹っ飛んでったし。 くそぅ、年に何回あるか、ってくらいのレベルで集中してた気がするんだけど台無しだい、べらんめい。

はあ、もう少し徐行運転したら寝よ。


トップ 最新 追記

日記ってのは本来、自分で読み返すためにあるもんだよなあ……
もしくは有名人になったら死後に本になったりとかか?

RSS はこちら

jijixi at azito.com