著作一覧 |
Ruby-1.9.0-2(MD5 checksum: 81731b19e3538ad800eaca01ef887ab6)
Windows Installerパッケージを作ったので試してみてください。
このパッケージは、ruby-1.9.0-2を、VC++6(SP5)を利用してビルドしたものです。readline、gzip、openssl、iconvは同梱してあります。また、ruby-dev:35270のパッチが当たっています。
やっとバルザックを読み始める。見事なまでの大物語で辟易しなくもないが、おもしろかった。
十三人組物語 バルザック「人間喜劇」セレクション(バルザック)
大して能力があるわけでもない王政復古のおかげで安泰な地位につけた世襲貴族の息子(20代)が好きになった他人の奥さんを街で見かける。そこで跡をつけると、いかがわしい小路に入っていくではないか。
しめしめ、弱みを掴んだと思う反面、なんともったいぶった女のくせに裏があるのかいなと義憤にもかられる。
というわけで、どんどん彼女を追い詰め始める。有能な執事に探偵させたりして、ついに黒幕らしきなぞの老人の存在に気づく。相手の男を突き止めたぞ。と大喜びだが、気づけば次々と命が危ない羽目になる。最初は荷物が馬車めがけてふってくる。まるで張良が始皇帝を狙った方法みたいだ。次に馬車の車軸が折れて大事故が起きる。車軸がいつのまにか空洞のある粗悪品に取り換えられたのだ。そしていきなり侯爵から決闘を挑まれて心臓の直下に穴を開けられる。どうやら、秘密に近づけば近づくほど殺されるということに気づく。かくして、彼女と夫が一緒にいるところでカタをつけようと乗り込んでいき、かくしてみんな死んでしまうか、廃人になってしまう、おそるべき悲劇の人間喜劇の幕が開く。
というようなお話。このごにおよんでも、怪談の累のように死後も夫を縛ろうとする妻とか、娘のためなら大やけどもへっちゃらなおやじとか、そのおやじに惚れぬいて最後は身を投げてしまういかしたお針子さんとか、多彩な人々が出てくる。特に、このお針子さんが実にいい味を出していて、手紙も良いのだが(奥さんと対照的になっている)描写もしつこい。
さて、乱入してきたのは、こういうパリのお針子の1人、それも輝くばかりに美しいお針子であった。フィアークルで乗り付けるお針子、楽しげで、若くて、美しいお針子である。だがお針子はお針子であって、爪を研ぎ、鋏を隠し持ち、スペイン女のように大胆で、妻の権利を主張するイギリスのレディのように喰ってかかり、貴婦人のごとく魅惑的で、しかももっとあけすけ、何でもこいのお針子である。赤いキャラコのカーテン……
という具合にえんえんと続いて、留まるところを知らない。
しかも物語が終わったと思うと、カフカ的な官僚世界によるたらいまわしが延々と果てしなく続いたりもして、いったい、何がしたいのかも思ったり。(たぶん、そういう世俗的な迷宮に対して、いかに十三人組が鮮やかに無視して斜め上を突っ走るかを書きたかったのかも知れない)
というわけで、物語はスリルとサスペンス、日常世界の冒険を描いて引き込まれるのだが、それを上回るバルザックの饒舌ぶりで、地の文が長いのなんのって、全然話が回らない。すぐれた映画が映像と音楽で組み上げるところで、その代わりに、地の文で構造を作っているように思える。(気がついたが、物語が機能要件なのだな。すぐれた作品は映画、文学を問わず、非機能要件の実装がすばらしい)
残りの2作(ランジュ侯爵夫人は読まなくてもいいかな)も読むかなぁどうしようかなぁという感じではある。めっぽうおもしろいことはおもしろいのだが。
で、Processingも良いけど、他のはあまり使いたくはない。
で、なんとなくだが、まっとうな方法らしいFunnelを使うのもあまり好きではない。というのは、COMポートたたいて使うデバイスのアプリケーションドライバとソケットで通信するというのが、気に食わないからだ。
で、検索してみるとGainerをRubyから使うという記事を加藤さん(いや、知らないけど、LDRでは購読してるなぁ)が書かれていて、こっちが好みだ。
だが、ruby-termiosが問題だ。だって、OS Xはともかく、Windowsでは使えないじゃん。
でも、おれはCOMポート叩くのはわりと自由にできる。
そこで、
・ruby-termiosのWin32版を作る
ところが、作ってもttyをいじるための仕組みにはWin32の場合、なっていないから全然嬉しくないのだね。gainer-rubyが使っているのは、bpsとビット長の設定だけだから、それだけ実装するというのも手ではあるけど。
・まともなWin32 COMポート拡張ライブラリを作る
が、Gainer以外の使い道が見えないのがなんともかんとも。作るなら、rubyioを無視して別スレッドで非同期IOを使うのが良いだろうなぁとか思うのだが
・Gainer特化のActiveXコントロールを作る
Win32OLEを使えばRubyからも使えるし、VBでちょろちょろGUIも作れるからこのあたりがもっとも良いのではないかとか
・Gainer特化の.NET User Compoenetを作る
でも、考えたらVBって今はマネージドだから、こっちのほうが筋が良いかも……というかRubyから使えないのか。
・だったら、JavaBenasでも良いじゃん
JRubyっていう選択になるけど。
とか、いろいろ選択肢があって、どのタイプで作るか考えるのだが、ここに2種類の楽しみがある。
1つは、どのタイプで作ると、どういう得失があって、と考えるのが楽しい。
でも、本当に楽しいのは、38400として、Rubyioに載せるか、それとも独自にスレッドを起こして同期IOでやるか、AsyncEvent使うか、それともSerialコントロールを使うか、とか、大した状態遷移がないからswithでがんがん分岐するか、ステートパターンを使うか、マトリックスを使うかといった詳細を考えること。
でも、あまり考えすぎると、作る前に十分に堪能してしまっておしまいになるので、適当なところで妥協する必要はあるのであった。
で、それもあって、Rubyioを調べたのだが、winsockのselectを使っていたのか。それでWinsock2が出てくる(Winsock1のselectがVistaでバギーというようなことはあり得ると思う)のか、とか、でもコンソールやPIPEはソケットではないのだが、と見ると最初にピークかけているとか、selectの後に遅延させているとか、うまいなぁと。
しかし、ヘッダに出現する関数名をdefineして上書きして、undefして元に戻すとか、できるものなのだな。なんとなく解決済みの関数名はマクロでは上書きできないのかと思っていた(あるいは、読み方を間違えているだけで、最初にマクロで定義しているのかも知れないけど)。
徐々に遊べる時間が減りつつあるが、OS Xでtermios + gainer-rubyを試したら(たべしたら)、どっかでハングしてしかも^Cでは殺せない。なんかおれが根本的に間違っているのだとは思うが、どこでハングしているのか調べるのを夜になったらやろう。
コモンにセンスすれば、この国で落書きしたら同等の処分を求めるっていうパフォーマンス以外のなにものでもないだろう。
そりゃびっくりするだろうし、得体の知れない気持ち悪い国に見えるだろうなぁ。ハラキリトッコーの黄金の国ですね。
民度ときれいさには、多分正の相関関係がありそうだけど、きれい過ぎるところには民草もはえないよなぁ。ピョンヤンの大通りは雑巾掛けしたみたいにきれいだそうだと聞けば、そうだろうなぁと思うが如し。
RjbでSwingを使いたいという問い合わせが来た。
JRuby使え、と返したら、そうは行かない事情として、組み込みRubyだからという理由が戻ってきた。なるほど。言われてみれば、Win32OLEを使う場合も同じかも。
使い方にもよるが、もちろん、できなくはない。
問題は、Swingのワーカスレッドと、イベントリスニングスレッドは、どちらもメインスレッドではあってはならないというSwing側の事情と、GC(メモリアロケーションとか)と独自のスレッド管理の都合から、RubyスクリプトはすべてメインスレッドでなければならないというRuby側の事情が、見事に食い違っている点にある。
どちらかが妥協すれば良い。つまり、他のスレッドでは動作できない(たまたま動作しているのは、動作しているとは言えない)Rubyではなく、JavaでSwingのイベントリスニングスレッドからの通知を一度、メインスレッドで受けて、そこでRubyとやり取りすれば良い。
以下に、Swingで作ったダイアログを呼び出して、ボタンが押されたというイベントの受信と、結果の文字列を受け取るRubyのスクリプトを示す。
require 'rjb' Rjb::load('./SwingPop.jar') SwingPop = Rjb::import('info.noip.arton.rjb.swing.QueryWindow') class QueryListener # イベント受信用インターフェイス def buttonPressed puts 'buttonPressed !' # ボタンを押されたら出力 end end ql = Rjb::bind(QueryListener.new, 'info.noip.arton.rjb.swing.QueryWindow$QueryListener') puts "you choose #{SwingPop.queryLanguage(ql)}" # 呼び出し結果を受ける。
このスクリプトの実行例を以下に示す。
このプログラムでは、Swingのイベントリスニングスレッドとメインスレッドの通信には単純にダイアログそのものを利用したwait/notifyで行っている。以下にボタン押下時の処理を示す。なお、ここではボタンクリックのイベント直後ではなく、エラーなどを表示した後にメインスレッドへの通知を行っている。
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { String ans = textLanguage.getText(); if (ans.length() == 0) { error("please enter the answer"); } else if (ans.equalsIgnoreCase("java") || ans.equalsIgnoreCase("ruby")) { answer = ans; setVisible(false); // ダイアログの終了 } else { error("Think !"); } wakeup(); // 通知 } void wakeup() { synchronized (this) { notify(); } }
メインスレッド側は以下のように、ダイアログ表示後、通知を受ける。
for (;;) { synchronized (t.dialog) { if (t.dialog.answer != null) { return t.dialog.answer; // 結果を受けたら戻る } else { try { t.dialog.wait(); } catch (InterruptedException e) { return null; } } } listener.buttonPressed(); // これによりRjbへ通知が行われる }
Javaのソースは、jarに同梱してある。
ruby-talk:298615読んだが、意味不明だ。
というのは、ビジーダイアログを表示するのは、MFCだからだ(olemsgf.cppの152行目以降)。独自にMFCのDLLを作って、それをdl経由で呼ぶとかしているのだろうか?
それより気になるのは、78行目でCoRegisterMessageFilterを呼び出すのだが、previousパラメータにNULLを与えている。ということは、独自にインストールしたMessageFilter以外はきれいに無視するということだ。
Win32APIを使ったプログラムを作っていれば、当然のようにWin32APIを参照する。
そこで、「検索する文字列」にたとえばMsgWaitForMultipleObjectsとか入力すると、右上のコンテンツペインが開いて表示される。
ほぼ100%、それはWindows CEのドキュメントだ。
しょうがないので、キーワード検索の結果から、プラットフォームSDKのほうを選択し直す。
これが、夢のように高速なツールであれば、少しはましかも知れないが、のろまで亀なMSDNのdexplorerだ。dexplorerのdは、ダメのdだろう。explorerに輪をかけてどうしろと。
というわけで、常に、そう常に、検索して、待たされて、表示されたものを無視して、結果を選択して、待たされて、再表示させるというバカなことを我慢することになる。すごいストレスだ。
問題は、Windows CEのドキュメントは必要だということだ。
つまり、フィルタリングは役に立たない。プラットフォームSDKを陽に設定したくはない。なぜならば、同時にATLだったり.NET Frameworkだったりの関連する項目も検索したいからだ。しかも、上で書いたようにCEのドキュメントは必ずしも不要ではない。というのは、場合によってはドキュメントが後で書かれただけに、SDKより詳細が書かれていたり説明がうまかったりすることが稀にあるからだ。つまり、場合によっては参照したい。
つまり、必要な機能は、キーワードの検索の結果表示の優先順位だ。
ということくらい、あのMSのことだから気づいて直すだろうと思っていたが、気づけば5年以上たってるじゃん。VS .NETのころからだよ。
本当に、視野の狭い検索しかしてないってことか?
いや、MSの連中にとっては、オンラインMSDN検索は、イントラネットだから超高速なのかも知れない(きっとそうなんだろう。だから、何かとオンライン検索をさせたがるのに違いない)。それなら、ローカルのMSDNを参照したりはしないだろう。だが、残念なことに、インターネットを経由すると、ローカルより、もっとのろいのだ(っていうか、企業とかだと相当困るだろうと思う)。しかも安定した速度でレスポンスが返るわけでもない。インターネット検索より、ローカルMSDN検索のほうが、いくらdexplorerがくずでもまだ高速なんだよ。気づけよ。
それにしても
ばかげた値段をつけたものだ(17500とか付けている)。普通に
パリ・オペラ座バレエ「シルヴィア」(全2幕) [DVD](パリ・オペラ座バレエ)
これを買えば良かろう……と思ったら相当いじくっているのか。
というわけで、ロイヤルバレエのアシュトン版改を観に上野へ出かける。
いつもなら聚楽台の妙な階段を抜けて西郷どんのところへ出るのだが、すでにして廃墟のようになっていて通れるかどうかわからないので、カモンカカムカムの脇のこじゃれた階段を上ってお山に着くと、おそろしい行列に出会ってびっくりする。キューがどこまでもどこまでも伸びて、伸びた先から折り返してこちらにキューしてきて、また折れて、はるか向こうまで延びてと延々と続いて留まることを知らない。元々森の小路といった風情なのだが、その小路がすべて人の群れで埋め尽くされているのだ。
上野でこんな行列を見たのは生まれて初めてだ。パンダの行列より長いんじゃなかろうか。
とにかく密な行列なので、おれは文化会館へ行きたいのになかなか向こう側へ渡ることさえできない。
いったいなんなんだ?
と思ったら、井上なんとか(おれ、よく知らんのだが、ちょっとアマゾンで調べたら、これだったのか)の最後のマンガ(どういう意味なんだろう)とかいう展覧会のようだ。
老若男女、基本はカップルか女同士、ちょっとおもしろい感じの行列であるが、とにかくこれだけの行列は、ロンドンの死の河くらいでしかお目にかかれない。薬師寺展だってこれに比べればがらがらどんだったんじゃないかなぁ。というか、美術館の前をやっとのことで通り過ぎたのに、さらに複雑に行列が折れくり曲がって道を占領しているからどうにもこうにも動きがとれない。
いやもう、暗い森の中を密な行列がうねうねと幾重にも折り重なっておれの通行の邪魔をしている。前へ、前へ、前へ、邪ァ魔ァをぉおォォすゥるゥなああ!!
で、ヴァルキューレがジークフリートの角笛を吹くという身も蓋もないバイロイトの影響下の作品で唖然とするのだが、これはむちゃくちゃおもしろい、かなぁ。
たとえばコッペリアは2幕が長い。コッペリウス博士の家に忍び込んで人形をいじくりまわっていると、そこに博士が帰ってきてさらに忍び込んできたフランツと長談義して、さて魔法をかけようとするとスワニルダに遊ばれてしまうという、ちゃんと回帰する三部構成になっていると今になって気づいたが、と好対照。シルヴィアは2幕が短い。正味20分ちょっとという感じ。オリオンに矢を奪われて、酒を飲ませながら踊りまくり、エロスが船に乗って助けに来る(これがびっくりするくらい突飛)。
3幕は同じくらいわけもなく長いのだが、そこは伝統芸として。で、なんで猫が二匹で踊りまくるのかすごく不思議だったのだが、後でプログラムを読んだら山羊だと書いてあって、ああそれなら羊飼い(山羊飼いじゃないのだが)が主役の一方だからわからなくもないなぁと納得する。尻尾がネコにしてはちょんちょろりで犬みたいだと思ったら、山羊だったのか。
で、またエロスが人間の中で活躍するときの扮装がどこをどうみてもトチロー以外の何物でもなかったりするから怪しいことこのうえないのに村人たちは命を救うためにお願いしているし、一幕の石像のままの白塗りの不気味さとか、プログラムではディアナとダイアナが適当に使われていたり、めったに演じられない作品ならではの良い味を醸していた。
で、三幕のフィナーレ、きれいに管が混ざった和音で終わるのだが、ここがまたバイロイトの影響下にあるように思えて、好きな音だが、やはり妙な感じではあった。
金魚じゃないから、ぱくぱくすることが本意じゃない。ただ、取り合わせがむちゃくちゃなので、おもしろかったというか、おもしろい。
一部に特徴的なリズムパターンが出てくるのがおれには同じに聴こえるというだけのことだ。
ティアーズフォーフィアーズの『みんな世界を支配したがっている』は好きな曲だ。80年代の前半にぼこぼこ生まれた2人組エレクトリクスポップバンドの中では、もっとも洗練されていて、しかもちょっと高踏的(もっともソウルフルで洗練されているのはヤズーだし、もっとも神経質で洗練されているのはユーズリミクスだろう)。おれは洗練されていないのが好きなので、好き嫌いならオーケストラルマヌーバーズインザダークやネイキッドアイズのほうがはるかに好きだが、それは余談だ。
そんなティアーズフォーフィアーズのEverybody Wants to Rule the Worldを子供が口ずさんでるので、えっ、と思う。なんでそんな曲を知ってるんだ? でもしばらく聞いてると全然違う曲になる。が、印象的なところはやはりみんな世界を支配したがってるじゃん。
で、ついになんでティアーズフォーフィアーズを歌ってるんだ? と聞くと、このおやじはなにをぬかしてるんだという目でこちらを見る。何か違うのか? と考えていると、おまえがくれたんだろうと、舞波の名刺を指でさす。このがきはなにをぬかしてるんだという目をこちらがする番となる。
で、まああらためて聞いてみて納得した。イントロでおなかいっぱいになってちゃんと聴いてなかったのだな。
(良く上げるもんだなぁ。3日後には削除されているとみた)
かなしい日はおなかいっぱい食べればいいのあたりとか。もう完全に空耳アワーになってしまってまともにティアーズフォーフィアーズが聞けなくなってしまったよ。
それはともかくこの曲はおもしろいな。3部構成になっているのは3人組だからかな。不思議なのは、一番口ずさみやすいのは3部目だと思うのだが、なぜこどもは2部に当たる部分ばかり口ずさんでるんだろう? はらへってるからかな。
シャウト<デラックス・エディション>(ティアーズ・フォー・フィアーズ)
こいつら、ルックスは最低だよなぁ。
こどもだ。
------
思い出したが、これはジャケットがいいなぁ。あとで買い直そう。
Excelのプロトコル表に出ていないこと。
・既にモード設定ができているときに、KONFIGURATION_nを送ると!が返ってくる。
・送信についても終端の*が必要
・デジタル読み取りは、右端がポート0
・38400はそれなりに速い。ATLTRACEとか使って1文字出力していたりすると、簡単に取りこぼせる
・フロー制御なしというのは恐ろしい(こちらが死んで再起動してもつながると続きを送ってくる)
・rは成功しているが、今のところiが成功しない。
とりあえずそんな感じ。
途中だけど、とりあえずここまでかな。
GainerX(2014/7/30 レポジトリをGitHubへ移動)最初、オーバーラップトIOのみで1バイト単位のReadFileを利用していたが、アナログ/デジタル連続リードをかけると取りこぼしやすいことがわかったので、ComEventを利用してできる限り一括してReadFileをかけるようにした。ほぼ取りこぼしはなくなっている(VB6の場合)。
VS2008になっても、相変わらず、SAFEARRAY周りの処理が腐っているので絶望した。きっとこのまま直さないままATLはフェーズアウトしていくのかも。
たとえば、IDLで、[in]SAFEARRAY(byte) data
と書いたものが、自動生成した接続ポイント(しかし、VC6の頃と比べて使われるのを拒否するかのように、わけのわからない場所に移動してしまって見つけるのにえらく苦労した。ヘルプの書き方もあいまいなのだが、クラスビューでCComCoClassを継承したクラスのコンテキストメニューの追加から行う)ではSAFEARRAY byte * data
となるとか。*の数も間違えていたような気もするが、とにかく、内部型名を引数リストに残してはだめだろ。VC6の頃はここまでひどくはなかったような気がするが覚えてないや。
もっとも、SAFEARRAYを使っているところはIID変えずにいきなり変えてしまうかも。
それとは別にWin32OLEのSAFEARRAYの処理も少し気になる点があったり、いろいろ。VB版はそこそこ動くので、たぶん、Win32OLEの何かを突いてしまったのかも知れない。
あと、Gainer自身についてもリブートとKONFIGURATION後に挟むウェイトがどうも幅があって、そこらへんが難しい。
Rubyではこんなのがタイミングに依存しているが、動くときがある(ただし、SAFEARRAYの部分に問題がありそうで、デジタル信号が0/1ではなくnilになっている。
require 'win32ole' gainer = WIN32OLE.new('GainerX.Gainer') event = WIN32OLE_EVENT.new(gainer, '_IGainerEvents') event.on_event('ButtonPressed') do puts 'button pressed' end event.on_event('ButtonReleased') do puts 'button released' end event.on_event('DigitalInputs') do |switches| p switches end gainer.open 'COM3' sleep 2 puts 'open comm' gainer.Configuration = 1 sleep 3 gainer.LED = true gainer.ReadAllDigitalInputs true gainer.wait 15000 gainer.LED = false sleep 1 gainer.close
実行すると
C:\home\test>ruby gainer.rb open comm [nil, nil, nil, nil] [nil, nil, nil, nil] button pressed button released [nil, nil, nil, nil]
#include配列は戻ってこられるが、ポインタは逝ってしまう。もちろん最適化をしてはいけない。typedef void (*fn)(); void ary_rtn(char* p) { p -= 8; (*(fn*)p)(); } void ptr_rtn(char* p) { p -= 8; (*(fn*)p)(); } void array() { char a[] = "1234"; ary_rtn(a); } void pointer() { char* p = "1234"; ptr_rtn(p); } int main(int argc, char* argv[]) { array(); printf("array\n"); fflush(stdout); pointer(); printf("pointer"); fflush(stdout); return 0; }
#include一度、その変数(ここでは配列のaと、ポインタのp)のアドレスを取り、その中身そのものを表示する。int main(int argc, char* argv[]) { char a[] = "1234"; char* p = "1234"; char** v = &a; // 型違いなので警告が出る printf("%08X\n", *v); v = &p; printf("%08X\n", *v); return 0; }
c:\home\test>ap2 34333231 00407038配列の場合は、文字列の実体そのものが値として格納されていることが(エンディアンの問題があると後で気づくが、ちょっとしょうがないな)、ポインタでは、どこかのアドレスが値として格納されていることが見える。
v = &p; printf("%c\n", **v);は'1'を出力するけど(上の例だと00407038が文字列のアドレスだということを示せる)、
v = &a; printf("%c\n", **v);は、実行すると死んでしまうことを示すとか(というか、34333231と出てきているところにリトルエンディアンとはとかさらに混乱のネタがあるようにも思うが)。
昨日うまく動かないとWin32OLEの処理じゃないかと疑っていた問題は、こちらの設定ミスだった。
そういえば、VT_ARRAYってやたら上位にビットが立っているとか思いだしたが、たとえばSAFEARRAY(byte)であれば、VT_ARRAY | VT_UI1 となるのでした。Win32OLEはその情報を、引数のVARIANTARGから取っているのに、そこを単にVT_ARRAYと設定していたために、SafeArrayPtrOfIndexがデータ型変換できずにnilになっていたということのようだ。
ではなぜVBがそれっぽい値を出せるのかというと、おそらく見ているところが違って、安全配列のヘッダのcbElementsか、あるいはTypeLibに指定したデータ型を見ているのだと思う。
というわけで修正して、無事(タイミングを除けば)Win32OLEからも利用できるようになった。
で、次は加速度センサーを接続してみるというように話は進むのであった。
_ suke [なるほど。そういうことでしたか。]
見えないので、見える人の本を読んでみた。
例として、割と最初のところで53×131の例が出ているのだが、瓢箪みたいな形の2つの数の間を埋める形があって、それが6943なので答は6943とか書いてある(今、本を裏返したら、何のことはなく帯にも書いてあったが、そのくらいこの説明は不思議に感じるのだけど)。筆算もできるが、それよりこれで求めたほうが簡単とか書いてあるので、なんとも不思議だ。それとは別に素数が色の違いでわかるとか、累乗の計算が好きで弟に問題を出してもらってぽんぽん答えるシーンとかもある。
ヒントは、円周率を記憶するところで見えるような気がする。ボランティアのチャリティで円周率暗唱のギネスへの挑戦をするところがあるのだが、見た瞬間に覚えるというよりは、まじめに延々と記憶していく作業をしているからだ。
その記憶方法が、自分の知っている感覚でいくと音楽を記憶するのに近いように思う。音楽を記憶するときは音符を覚えるのではなく(以前フルトヴェングラーが演奏会へ行くための列車の中でヒンデミットか誰かの交響曲を暗譜するエピソードを読んだことがあるが、ああいう特殊な人は楽譜そのものが頭に入るらしいけど)時間軸上に音響そのものが記録されていく(文章で書くと当たり前のことだな)のだが、そんな感じで、数字の羅列を山あり谷ありの絵巻物のように記憶していくのだ。
ということは、上の例だと6943は未知の数ではないのだろう。あらかじめ多数の数を事前に訪れて因数分解したりして遊んだ結果の数が記憶されているのだと思う。したがって、式を見た瞬間にそこにあるべき数がパターンマッチされて取り出されてくるのではないだろうか。
おはよう、と聞けば、いちいち辞書からおはようの意味を調べて対応する返答例を求めてから、おはようと返すのではなく、すでに持っている語彙からマッチする言葉であるおはようを瞬時に取り出して返すのに、構造は似ているように思えた。ただ、それを数に対してできるところが違うところなのだな。
で、それが言語についてもできるということで、ボランティアで出かけたリトアニアでリトアニア語を覚えるとか(ロシア人居留地域に迷い込んで言葉が通じなくて英語を口にしたら通じたというエピソードとかおもしろい)、難関に挑戦ということでアイスランド語(すごく大変そうだ)を覚えるとか、のところでも、言語を習得するには実例を必要とするようなことを書いているところにも、似たような印象を受けた。
ただ、この本そのものは、そういった事柄はむしろ単なるエピソードで、この人が自分の居場所を見つけるまでにいろいろ考えたり感じたりしたことが主眼になっている。本人が反語的表現を瞬時に理解できないと書いてるくらいだから(というか、文学のたぐいは読まないみたいなので、当然、そのたぐいの言い回しのプールが無いので、逆も真でパターンマッチングできないのが原因なのだろうと思うわけだが)、書き方はきわめて平明、ストレートで共感的だった。
結局この本はなんなのだろう? これまで読んだ本で一番近いものを挙げよと言われたら、人間失格とか地下生活者の手記とかの、一人称の思考小説が思いつく。内容はえらく異なるけれど。物語小説ではないが、エッセでもなく、私小説に近いが、断片ではなく全体が対象となる。ある人物が生活することで触れたいろいろな局面に対しての感覚や心の動きを記述したタイプの小説だ。
しかし、なんとなくそうやって、この本はいったいなんなんだ? と自問しながら読んでいたわけでもあるが、そこで太宰治やドストエフスキーのように高度な技術を駆使できる大家が比較として出てくるところが、自分でも不思議でもある(慧眼な江戸川乱歩は、ドストエフスキーの小説の魅力としてスリルについて指摘していたが、主人公の心の動きに強烈なスリルが表現されているところがあるし、それは太宰治の場合も同じだ)。もちろん、こっちにはそういうものはないはずなのだが。だが、その代わりに、見るもの触れるもの、経験したこと、そのときあったものに対してダレが無いことで補われているのかも知れない。常に世界を新しく感じているような書き方がされていて、おそらく、それは意識しているのではなく、本当に、いつも新しいのだろう。そのため、普通に書かれていたら1言ですむようなことが、微妙なニュアンスを伴って詳細まで詰められていたりするのだが、そこが読書する側に対して先を読みたくなる魅力になっているようだ。不思議な本だった。
そろそろほとぼりは冷めたようだが、キーワード欄に対する入力文字数が大きかったらはねるようにした。今のところうまく弾けているように見える。
class X def exe(file) File.exist?(file) end endとかあって、
notepad = X.new ! notepad.exe 'temp.rb'とかだとどうしたら良いのかわからないよなぁ、とか思う。
英国ロイヤルバレエの眠れる森の美女。プティパのやつ。だからいわゆるバレエ。横に張り出したスカートをまとって小刻みにてけてけ動くやつ。しかし、専門用語を使わないと、とたんにバカのような文章になるな。というわけで、あるドメインについて記述する場合には、そのドメイン記述に特化した語彙を利用するのは当然のことだ。
序曲の2つ目の主題。ピティカートの上に木管が重なっていくのだが(メロディーは忘れた)、ああそうだ、チャイコフスキーのバレエ曲はちゃんと仕事がしてあるのだな、と深く納得する。メロディーだけならドリーブだってアダンだって別段作れなくはないのだが、音が違うのだ。もっとも、チャイコフスキーにしても、白鳥の湖の有名なやつのようなとんでもないメロディーについては自由に作れるわけではない、というわけで、充実度は高いにもかかわらず、眠れる森の美女はぱっとしない印象を受ける。部分部分はすばらしいのだが。
オーロラ姫は回転の女王とか呼ばれレているらしいスペイン風の名前の人(タマラロホ)。回転もきれいだが、足が実に優美にまっすぐに上を向く。初めて見る作品ということもあって、そういうものなのかどうかはわからない、一種のカデンツァみたいなものだと思うが、1幕で4人の王子の手を取るところでは、ずっと片足で立つ。その4番目でなかなか手を取らずにさすがに揺れたがえらく長いことポーズを維持していて拍手喝采。こういうのもあるのか、と思った。1幕の最後、薄いカーテン越しにリラの精がきれいに消失する。
6時に始まって9時過ぎまで。しかも2幕と3幕は連続上演。
青い鳥は代役だそうだが、良く羽ばたいた(プロローグの歌鳥の妖精が何色かという話を子供としていたら、羽ばたきは足のふるふるで表現するはずだから黄色だと言い出す。なるほど、確かに鳥は空中で足をふるふるさせている)。
長靴のネコと一緒に登場する白い女は、いったいなんだろう? カラバ伯爵のお后かなぁとか聞いたら、単なる白い猫だと教わる。どうりでネコの仕草をするはずだ。山羊じゃないのだな。王様と同じ名前で2人の妹を引き連れているなぞの登場人物について調べようと思って忘れていたことに、今、気付く。
カーテンコールでカーテンの影からいきなり王子(フェデリコポネッリ)が足をぱたぱたしながら宙から飛び出してきてびっくり。カーテンコールで技を見せられたのは初めてだと思う。オーロラのほうも回転しながら右へ行ったり左へ行ったりしているような。いずれにしろ、舞台そのものは実にうまくいったのだと思う。良いコンビだった。
ネズミが可愛いのだが、チャイコフスキーのバレエは、鳥(白鳥と眠り)、ネズミ(胡桃割り人形と眠り)と動物が多いなぁとか思ったり(という意味で、眠れる森の美女はやはり集大成なのだろう(と思い込んでいたが胡桃割り人形のほうが後だった。きっと眠れる森の美女でネズミが受けたので主役の一方に格上げしてみたのかも)。
それにしても、100年の間、元の王国が眠っている間に異なる国が建国されているという政治問題が、王女と王子の結婚という形で解消されるわけで、良く練りこまれた物語だ。
たださんのところで見かけて読みたくなって買って読んだ。わりと厚いが読み始めるとあっという間だ。
(「本泥棒 site:sho.tdiary.net」 で結果が0だ。たださんのところはグーグルのbotを蹴ってるのか?)
この作品は絶妙だ。
物語は、ナチ政権下の1939年頃から1943年頃までの数年間に、貧乏なペンキ屋の養女になった女の子を中心に回る。貧乏だけど文句ないドイツ人なので(父親は文句のあるドイツ人なので家族離散、弟は(多分栄養失調に伴う)病死という羽目になるのだが、少なくとも養子に出た子供にまではたたらないようだ。良かったね)、最悪に悲惨ではなく、家があってベッドがあり、学校に通って友達と遊べる。友達はクラスで一番の成績で、トップクラスの運動能力を持ち、しかし天性のアナキストで、黒人指向で、腹ぺこだ(追記:熊のエピソードがとても好きだ)。
とはいえ、実の父親のスタンスの問題から教育を受ける機会が得られなかったらしくて、最初は文盲だ。そこを養父のおかげもあって(しかし、この養父は良い人なのだが、それほどは学がないので教えるのも難儀なのだが)他人に夜の長さの慰めを与えられるほどの読書人に成長するのであった。この養父との夜の勉強の物語はすばらしく美しい。このての話におれは弱いのだ。
その言葉を子供に教える親父は、かって危ういところ(つまりは第一次世界大戦なのだが)で死神から逃れることができたのだが、それは彼が上手に字を書ける(なんてことはないのだが)おかげであったというように、言葉、紙、ペンキ、鉛筆、書物、新聞紙、書物そのもの、壁、辞書、図書室、そういった文字(本)にまつわる種々のメディアが複雑に人々に絡み合う。
だが、それは主題ではない。
クリスタルナハトに始まる時代から60年以上過ぎて、欧州からオーストラリアへやって来た(逃れてきたのではなさそうだが)人の子供が、両親や、謝辞に出てくる近所のおばあさんたち(だと思う)から聞かされた/聞いたエピソードを消化して昇華してすばらしい作品に仕上げる。
しかし、ナチスやそれにコラボした人たちを糾弾することは主題ではない。結局のところ、誰一人として正しくはありえなかったので、しかもそれはどうしようもないことなのだ。すべてはうまくいかないからだ。
語り手は死神であり、主人公の女の子がオーストラリアで天寿をまっとうするところで邂逅し、プレゼントを与えるところからさかのぼって語られる。したがって、すべては語り手にとって既知である。そこで章のはじめに語られる物語のあらすじを説明してみたり、ある時点にまかれた種がどのように未来において実を良くも悪くも結ぶかほのめかしてみたり、はっきり書いてみたり、しかし、それらがその時点になると、軽く想像を裏切るかたちで、常に最悪の事態を逃れて進められたり、というような手法的な実験も多少はある。
しかしそれも主題ではない。
ナチスとドイツ軍の関係について、子供のころ読んだアンネの日記(ダイジェストでもなく、たぶん、伝記のようなやつだと思う)で、一家を連行しに来た軍人が、父親の第一次世界大戦のときの写真と勲章を見て、すごく複雑な気分になるというエピソードを思い出した。今、目の前に立っている男(つまりアンネの父親)は、まちがいなしのうじむしなのだが、しかしまちがいなく自分の大先輩でしかも英雄だ、いったいおれはどういう態度をとるべきなのか……英雄は英雄だ。敬意を払おう。
この温度差を思い出して、読んでいてほっとするところがあったりもするのだが、もちろん、それも主題ではないだろう。
この作品が優れているのは、正しく、一面的でなく、種々の技法を総動員して、過去の記憶を持ち込むことさえして、ある種の極限的な状況と、極限的な語り手を用意さえして、生きるということを、くそまじめに描いていることだ。もちろん、それが優れた文学というものだ。
記録:おれがなんとなく感情移入して読んだのは、親父は当然のこととして、本を盗まれる人なんだな。で、その行動がまさにその通りに思える点も、この本を評価できるところなのかも知れない。まったく、本を読む人は好きだ。
インドで留学生してあっちで数年就職してた人とちょっと話して、長年の疑問というか不思議について別の見方が聞けて納得感があったのでメモ。
おれ:子供(たぶん、小学高学年か中学)のころに、インドってカーストとかのせいでえらく非効率だって聞いた。んだけど、なんかそれは偏見じゃないかって疑ってるんだけど。その例に出てきた話ってのは。ホテルに泊まったら電灯が切れている。フロントに電話したら、しばらく待っててくれと言われた。しばらくするとノックの音がした(エヌ氏じゃないけど)。開けるとインド人が4〜5人入ってきた。梯子を用意する係が梯子を電灯の下に置いた。電灯を外す係が切れている電灯をはずした。電灯を付ける係が……
インド帰り:ああ、それはわかりやすくて良い例ですね。もっとも、8人から10人くらい来ると思いますけど。
おれ:えー、これは良い例……というか、もっと多いのか!
インド帰り:だって、それ確かにカーストもあるとは思いますけど、ワークシェアリングですから。
おれ:ワークシェアリング……なるほど、そう考えるのか。
インド帰り:だからJavaを書く人ってのは本当にJavaばかり書いている。そりゃすごい。仕様から何からすべて押さえている。でも、OSのインストールすらできない。知らない。それは別の人。ネットワークの調子が悪くても何もできない、そもそもしない。それも別の人。でもJavaはすごく書ける。
おれ:どのあたりまで細分化してるの? たとえばMVCフレームワークを使うとして、Mの人はひいひいで、Cの人はCばかりできもちいいとか、Vの人はAはしないとか。それは稲垣足穂の分類か。
インド帰り:さすがにそれはないなぁ。JavaはJavaですねぇ。ただし、HTMLはまったく書けない。もしかしたら書けるのかも知れないけど絶対に書かない。それはHTMLの人。ワークシェアリングですから。
というような感じで、話半分としても、おれにはカースト云々よりもワークシェアリングという切り口に納得した。
A感覚とV感覚 (河出文庫―稲垣足穂コレクション)(足穂, 稲垣)
追記:いや、書かなくても良いだろうけど一応蛇足つけとくと、だから日本人はジェネラリストの役回りでいいんじゃない、というように続く。
木村さんのところのリストの話を読んでいて、(そこで語られている内容とは関係なく)JavaではなくCをやらせろというのがなんとなくわかるように思えた。
以下、Javaで単方向リスト
public class List { List(int x) { value = x; } void chain(List list) { if (next == null) { next = list; } else { next.chain(list); } } List next; int value; public String toString() { return value + ((next == null) ? "" : ", " + next.toString()); } public static void main(String[] args) { List top = new List(0); List last = top; for (int i = 1; i < 10; i++) { List list = new List(i); last.chain(list); last = list; } System.out.println(top); } }
実行すると
d:\temp>java List 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
で、こういうのは書ける人なのだが、Cを使うと
#includestruct List { struct List next; int value; }; int main(int argc, char* argv[]) { // }
先生、コンパイルできません! とか。
ちょっと耳にした言葉であるが、ある程度の量の、なんか似合わないというか馴染んでないスーツ姿の男女が次々と、ITは未経験ですが頑張りますとか、ITは初心者ですが頑張りますとか口にしているのを見て、猛烈な違和感に気持ち悪くなった。一人二人ならともかくほぼ全員だからな。
日本語で、「情報技術」とすれば、確かに、未経験だったり初心者(この言葉そのものが嫌いなのはおいておくとして)そんなにおかしくはないかなとは思う。少なくとも頭では理解できる。別の言葉に置き換えてみて、「旋盤加工(技術)」は初心者ですが頑張ります、とかはそんなにおかしくはない。だが、大学を出たばかりの人間が、工場で「旋盤加工は初心者ですが頑張ります」ってのはやはり変だろ。だって、そんな技術は教えられていないはずだから、あまりに自明だ。まして、ITってなんだ? そんなものを教えているところがあるのだろうか。CSなら教えるだろうが、だからといって「CSは経験者ですが頑張ります」ってもっと妙だ。つまるところ、口に出す言葉じゃないんじゃないか。
というか、それが職掌ではないから違和感があるのかも。業界の分類名だよな。
初当選の議員の初登院のところにマイクを向けたら、「政治は未経験ですが頑張ります」いやもっと端的に「先進国は未経験ですが頑張ります」とか答えているところを想像してみる。業界の分類名としたらそんなところだろう。だが、こんなことをいうバカに投票したやつは愚民に違いない。
職掌ならどうだろうか。「議員は未経験ですが頑張ります」……やっぱり投票したやつは愚民だな。「未経験のパワーで旋風を巻き起こします」というようなたわごとのほうがまだましに聞こえる。
まったく日本語は難しい。
そんなに頑張りたいのなら、もっと単純に、「右も左もわかりませんが、精一杯頑張りますので、よろしくお願いいたします」とか当たり障りも意味もないことを言えば良いのだ。それが紋切型メソッドという伝統芸だし。
つまりは、未経験だの初心者だのという言葉は差別用語として禁止してしまえば良いのだな。言い換え候補としては「へなちょこ」とか「すっとこどっこい」あたりだろう。
MLで「Rubyはへなちょこですが頑張ります」とか。
でもLinuxについては「タコ」という言い換えが推奨されているらしいけどな。「Linuxはタコですが頑張ります」とか。
そうか。「〜はXXです」というのは〜が主語に聞こえるから異常な言葉に感じるのか。「あなたはカスですが頑張ります」とか。これで自分のことを卑下したつもりなんだからめでたいことだ。
「あけましてはおめでとうございますが頑張ります」これなら良い。
あと、気づいたが、どうせ紋切型の無意味な科白なんだから「頑張ります」より「踏ん張ります」のほうが気が利いていて良いかも。
githubは未経験ですが頑張ります。というわけで手元の作りかけをコミットしてみた。
で、内容は、emacs-lispネットワークプログラミングは未経験(というかelispは初心者)ですが頑張りますなうえにWassr APIは未経験ですが頑張りますなので、送ることしか考えてなかったり。というか、バッファを作っても、そのバッファ限定でキーをアサインする方法を調べている最中だったりするもので(モードを作るのが先に来るのか)いちいちeval-bufferしていたりして。
base64.elってデフォルトで入っているのかと思ったら、sudo aptitude install w3-el-e21が必要だったのか。Meadowは楽だな。
思うんだが、リージョナルって地理的なリージョンの必要はないよな。
で、仮想的な地図のひとつに、こんなのがあるわけじゃん。と書いてから探したけど見つからなかったけど、OSをマップしたやつ。ユーラシア大陸がWindowsで、UKがDOSで、オーストラリアがLinuxで、北米がSYSV、南米がBSD(ガラパゴスがOS Xね)、北極がPlan9とか。もちろん日本はTRONだ。
で、上の例だとユーラシア大陸リージョンの住人(ぱっと思いつくだけでも8人くらいはいるし)で集まって手分けしてread、writeの置き換えをするってようなリージョナル会議。それしかないんじゃないかなぁ。
#言うだけ番長なんで自分では先頭を切らないけど、尻馬には乗ります。
一般的に解釈すると一般的という言葉は広く一般的に見られる一般的なオブジェクトのことを示すと一般的に解釈できる。
とすると、一般的なCPUとは現時点では一般的なインテルの一般的にi386あるいはAMD64という言葉で一般的に示されるところの一般的なアーキテクチャを持つ一般的ななCPUを一般的に指し示していると一般的に想定するのが一般的であろう。特に一般的にコンピュータという一般的な言葉を一般的に利用しているのであれば一般的になおさら一般的である。というのは一般的な利用者において一般的にケータイや炊飯器のような一般的な機器は一般的にコンピュータとは一般的にみなさないことが一般的だからである。
とすると、一般的なCコンパイラという一般的な言葉が一般的にさし示すものは一般的に考えるに、一般的にみられるWindows(一般的に32ビットまたは一般的に64ビットのどちらのバージョンであるかを一般的に問わず)を一般的に搭載した一般的なコンピュータにおける一般的なVisual C++か、あるいは一般的なLinux(一般的な32ビット、一般的な64ビットを問わず)を搭載した一般的なコンピュータにおける一般的なgccをさすものと一般的に考察できる。
一般的にどうでも良いことについては一般的という一般的な形容がつくことが一般的に一般的である。
と一般的に思った。
でも、一般的にlongが64ビットというのは一般的に知らないし、それについては一般的ではないと一般的には考えるものである。
引用部に1箇所しか出てこないが、一般的という言葉がよくよく考えてみるとおもしろいので一般的に考えてみた。というか「多くの」とか書いてあるんだから(一部の)反例は別の話題ですな。
なんとなく上の話題と関連して、本当にintって16ビットだったっけ? とVC++1.5のマニュアルを探そうとしたが見つからず、代わりにMANX AZTEC Cの分厚いマニュアルが見つかったので、しょうがないのでちょっと眺めた。
ううむ、面倒であるな。
欧州はいざ知らず、北米でAZTEC Cを利用するということは、PCで成功して(投資を回収した)ソフトをAmigaにも移植するためだ。
そのため、intをデフォルトの32ビットではなく、16ビットに変えるオプションがある。
引数が値の場合の関数呼び出しについては、intの幅はほとんど意識する必要はない。すべて32ビット幅にしてスタックへ積めば良いからだ。
問題は、intポインタで、
ああ、そうか。このあたりもリトルエンディアンが世界制覇した理由のひとつかも知れないなぁ。
と気づいたから、いいや。
リトルエンディアンだとビット幅の扱いにバグあっても動く可能性があるのだな。
たぶん、ビッグな世界だとうまく動かないはず。
#includevoid print(short* p) { printf("%d ", *p); } int main(int argc, char* argv[]) { int params[] = { 1, 2, 3, 4, 5, 0 }; int* p; for (p = params; *p; p++) { print(p); } return puts(""); }
コンパイルすると警告が出る。
arton@pop:~/tmp$ gcc end.c end.c: In function 'main': end.c:11: warning: passing argument 1 of 'print' from incompatible pointer type
無視して実行。
arton@pop:~/tmp$ ./a.out 1 2 3 4 5 arton@pop:~/tmp$
警告意味ないじゃん、と考えてはいけない。
あわせて観たい。
ビッグ (ベストヒット・セレクション) [DVD](トム・ハンクス)鍵盤床で社長と踊るシーンが好きだ。
嘉平さんにAbout Face 3をもらったので、読み始めた。全部で570ページくらいある大著だが、とりあえず100ページほど読んで十分におもしろかったので、まずはそこまでについて。
About Face 3 インタラクションデザインの極意(Alan Cooper)
著者はVBの父ことアラン・クーパーを筆頭としたCooper社の人たち。デザインコンサルタントという感じかな。問題は、この「デザイン」の対象領域ということになる。ペルソナはこのあたりから出てきた考えらしいし、本書の中でも大きく扱われているのだが、それは100ページを越えたあたりからなので、まだ読んでない。
最初に、テーゼがある。脱工業化の時代であるという時代規定だ。脱工業化において重要となるのは、デザインが物理モデルを伴わないことだ、つまり、押したら押される引いたら引かれるということは、もう、ない。そこで、インタラクションデザインという考えを提唱することになる。
というわけで、この本は、顧客要件から実際の製品(ただしユーザービリティ検証まで含むかどうかは微妙)の間で、絶え間ないフィードバックを開発者(いわゆる上流から下流まで、まんべんなく)へ送り続けるデザイナー(コンサルタントと言っても良いね)のための本ということになるのだが、これはアーキテクトの仕事でもあるべきだなぁ。
次に、ターゲットを明確にする。
ユーザーのゴールを2つに分類する。Blogとか日記システム(tDiaryもそのひとつだ)を製品と仮定する。ユーザーのゴールは表面的には、日記をつけて、それが日付で分類され、どうしたこうした、なのは論を待たないけど、そこはあまり重視しない。自明だし。ユーザーのゴールは、「私はバカではない」と感じ、征服感を満足し、気持ちを高揚させることだ、と想定する。明言してないが、どんなものであってもゴールは、ユーザーがバカにされたような惨めな気持ちになるのではなく、征服感、達成感、おれってスゲー感を味わうこと、と決めているようだ。
そういう目で、ソフトウェアを見ている?
したがって、デザインのためのインタビューアプローチも、そこまで踏み込む。顧客とユーザーの区別もしている。かつ、ユーザーのことは一切、信用しない。彼らのアイディア(不満があるはずなので山ほど出てくる)、デザイン要求(同じく)、テクノロジー要求(同じく)、全部、せいぜい参考にするくらいで無視する(とまでは書いていないが)。ではなんのために、それをやるのかといったら、モデルを得るためだ。
ここで、3種類のモデルが示される。
1つは実装モデル。XXという機能を持つYYと聞かされたとき、頭に浮かんでくるあれだ。3で割り切れたらFizz、5で割り切れたらBazz……というプログラムを作れ、と聞いたら出てくるものが実装モデル。
で、これはデザインの参考には、いっさいしてはならない、とする。
実装モデルが極北であれば、極楽に来るのは、脳内モデルである。これが重要で、いかにこれに近づけるかが、デザインに決定的となる。
脳内モデルは、ユーザーの心象だ。つまり、おれってスゲーを味わっている姿のイメージである。
心象なので、そんなものは伺い知ることもできず、かつ、千差万別であり、言葉にすれば、「おれってスゲーを感じて満足しているわたし=ユーザー」というパターンであるが、もちろんそれをデザインに落とし込む必要がある。ちなみに、謝辞にはアレグザンダーが筆頭に出てくる。パターンランゲージからの影響は大きい。
かくして、デザイナーは、実装モデルと脳内モデルの間をつなぐ表現モデルを作ることになる。
ここは、興味深い。
プログラマー的な発想とは逆だからだ。抽象度が高いのは脳内モデルで、抽象度が低いのは実装モデルだからだ。プログラムはもっとも抽象度が低い存在である。
つまり、一段上のレベルの界面を扱っているということだ。
はい。すぐ頭に2人のスティーブが浮かぶ。ウォズは実装モデルしか持たない。すがやみつるのこないだ公開されたマンガだと、えーケースに入れるの? なぜ? というやつだな。(ちょっと違うかも)この男の表現モデルはApple Iの生ボードだろう。
一方ジョブズは、脳内モデルに極めて忠実な表現モデルを作れる男だ。そういうことだ。
ここでユーザーを正しくセグメンテーションする必要がある。もし、Appleのユーザーがホームブリュークラブの連中だけならば、脳内モデルはウォズの実装モデルとほぼ等しいはずだ。したがってジョブズはそれほど必要ない。
かくして、この本がターゲットとしているのは、マスを相手にするためのデザインということになる。
そのために、この本は次の切り口を使う。初心者ユーザー、中級者ユーザー、上級者ユーザー。
そして、コアデザインは中級者をターゲットにしなければならない、と規定する。
なぜならば、初心者は、次の2つの行動を取る。あきらめてユーザーにならないか、あるいは中級者に移行する。したがって必要なことは、あきらめずにちょっとがんばれば中級者になれるというビジョンを与えることだ。
一方、上級者は必要なので上級者になったのだから(しかし、その数はごく少ない)、適当なエサを与えておけば良い。しかし、上級者は実に重要で、彼らが勧めると、初心者は、自分たちの利用方法とはまったく異なり、確実にそこへ到達することはあり得なくとも、それを基準に判断するし、初心者がいなければ中級者も生まれない、したがって高級者上級者をつなぎとめる策略は必要だ。
つまり、ユーザーは基本的に中級者で、かれらは怠惰なので上級者にはなれないし、しかし自分たちは初心者ではなくおれってスゲー感にあふれて幸せでなければユーザーではなくなってしまう。だから、中級者のためにデザインするのだ。
うむ、ジョブズだね。(Lispの人や関数言語の人−プログラミング言語市場における上級者-がRubyを評する視点もここらへんにありそうだ)
うまいたとえとしてスキー場経営の話が出ている。
初心者用のなだらかな斜面は用意が絶対に必要。しかしすぐに中級者になってもらうために、かれらが中級者の視線を意識せざるを得ないように追い込み、かつ、本当に簡単に征服できるように仕込んでおく。
ゲレンデのほぼすべてをいくつかの段階をつけた中級者用のバラエティに富んだゲレンデで構成する。そんな彼らがふと気づくと、そびえ立つ崖のような急斜面とそこを滑降する上級者を眺めざるを得ないようにし、いつかはああなれれば良いけど、あそこまでいかなくとも、(と初心者用ゲレンデを眺めて)おれは十分にいかしているし、でももう少しがんばると、あっちの上級者用ゲレンデで滑ることも可能かも知れないなぁ、とか考えられるように設定する。もちろん上級者は、きわめて冒険的で、しかもほとんど人が来ないゲレンデを思う存分滑降して楽しめるようにする。でも、元々人口が少ないのでほんのちょっと作れば十分だ。
と、こういった内容で、いかにデザインを決定するのか、そもそもデザインは何をターゲットとした誰をターゲットとするのか、についてレクチャーしてくれる。
扱う領域は定量化できない領域なので、いかに定性的に分析するか、そのためには民族誌アプローチが有効とまでしている。
この本は説得力がある。しかし、内容を極めるのは無理っぽい。かくして、本書を手にして中級者となったクーパー社の潜在的な顧客は上級者たるクーパー社に仕事を依頼することになる、という入れ子構造の本だな、とも思うが。
なかなかそうは思っても怪しく感じることでもあるので、実装モデルと脳内モデルが直結している人(おれもそうだ)にこそ、この本はお勧めのように思う。
野口一葉さん
子供が野口英世の顔半分ネタ(忘れたけどなんかの芸人の持ちネタらしい)を教えてくれて、そのあといろいろなハックをして、サイズが合うことを発見。
下は、邪悪なアシュラ男爵とジェントルなアシュラ男爵。
参考:左の紫の頭巾の人物(野口サイドだと思う)
本物はもっと邪悪らしい。たばこも吸うし、たぶん。
アウシュヴィッツ収容所 (講談社学術文庫)(ルドルフ・ヘス)
アマゾン書評で「なぜこれが学術文庫?」と書かれているが、なかったことにしたい人がいる世界の中で当人の証言なんだから資料的な意味から学術文庫でいいんじゃないかと思うが、こんな本があることすら知らなかった。
で、もしかすると、去年の夏のクリスタルナハトのエントリー経由なのかも知れないが、そこに書かれている「バブル」というエントリーがさっぱり理解できない。何についての感想なんだろうか?
さらに、そこにちょうどノブナガの日記への言及を読んだこともあって、思わず、「ヘスのブログフロムヘル」とかいうネタ日記を考え付くが、あまりにも不謹慎なのでやめとく。
それよりも、読んだことないので想像だが、この手記は、イスラエルポーランド(なのか)の刑務所で書かされたものだと仮定する。
すると、中国共産党がやたらと反省文を書かせることを思い出す。
ラストエンペラー ディレクターズ・カット [DVD](ジョン・ローン)
(これにもフギが反省文を書かされているシーンがあったような記憶がある)
もっとも共産党だけじゃなくて、国民党による精神的拷問にも反省文を書かせるってのがあって、張学良が毎日何千文字も50年近くにわたって反省文を書かされていたというのを読んだ覚えがある。おかげで、そこで書かされ続けたストーリーがしみ込んでしまって、日本軍は悪いが国民党には感謝しているみたいなおかしなことを晩年は言っていたらしい。感謝の方向が逆だろう。国民党が張学良に感謝すべきじゃないか。まあ、父親を爆殺されたわけだから日本軍を恨むのはしょうがないとしても。
で、何かといえば、日本人で共産党(国民党でも良いけど)に捕まって同じく反省文を書かせられていた人は間違いなくいるに違いないから、同じように手記としてまとめて出した場合に、どう読めるか、読まれるかに興味がある。
可能性として
どう読めるか:
1. それは、共産党(あるいは国民党)のストーリーだろ、常考
2. おお、これは貴重な歴史的な証言で、一石を投じるものであるな
どう読まれるか
1. ここに書いてあることは共産党が書かせたストーリーに違いない。資料価値なしと断言(多分、国民党側の囚人の場合にはこの意見は出ないとなぜか推測)
2. ほらみろやっぱり(との言葉がいろいろな側からなぜか出てきて結局わけがわからないままとなるくらい、あからさまなストーリー以外の部分はどうとでも解釈できる書き物となっている)
となりそうな気がするなぁ。
char *lpStr = malloc(7); printf("lpstrに格納されたアドレスは0x%xです\n", (int)lpStr ); lpStr = "実装者"; printf( "%s\n", lpStr ); printf("lpstrに格納されたアドレスは0x%xです\n", (int)lpStr ); free(lpStr);
これ、本当に正しい引用なら、segvするはずだが、本当?
arton@pop:~/tmp$ cat >free.c #includeint main(int argc, char* argv) { char* p = "implementor"; free(p); return 0; } arton@pop:~/tmp$ gcc free.c -o f arton@pop:~/tmp$ ./f *** glibc detected *** ./f: free(): invalid pointer: 0x00000000004005ac *** ======= Backtrace: ========= /lib/libc.so.6[0x2b048929ab0a] /lib/libc.so.6(cfree+0x8c)[0x2b048929e6fc] ./f[0x4004b8] /lib/libc.so.6(__libc_start_main+0xf4)[0x2b0489246b44] ./f[0x400409] ======= Memory map: ======== 00400000-00401000 r-xp 00000000 08:02 109750 /home/arton/tmp/f 00600000-00601000 rw-p 00000000 08:02 109750 /home/arton/tmp/f 00601000-00622000 rw-p 00601000 00:00 0 [heap] 2b048900b000-2b0489028000 r-xp 00000000 08:01 10174484 /lib/ld-2.6.1.so (後略)
ちょっと驚いたのは、いきなりfreeを呼ぶとsegvではなく冗長なメッセージを出すという点。引用と同じようにmallocしてから定数をfreeすると黙ってsegvするのだが。
arton@pop:~/tmp$ gcc --version gcc (GCC) 4.1.3 20070929 (prerelease) (Ubuntu 4.1.2-16ubuntu2) Copyright (C) 2006 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. arton@pop:~/tmp$ cat >free2.c #include#include #include int main(int argc, char* argv[]) { char* p = malloc(7); strcpy(p, "a"); printf("%s, %p\n", p, p); p = "implementor"; printf("%s, %p\n", p, p); free(p); return 0; } arton@pop:~/tmp$ gcc free2.c -o f2 arton@pop:~/tmp$ ./f2 a, 0x601010 implementor, 0x4006a4 Segmentation fault (core dumped) …… 黙ってsegv
と書いてから気づいたが、引用元はその後segvするところを示しているのかも知れないな。引用の理由はそこではなく、lpにあるらしいから。
(%pは使ってなかったなぁ。これからは使うようにしよう。というのとは別に、キャストはいずれにしろ不要だけどあえて付けていることを考えてみるに、読者にintとして扱う=文字列ポインタということはとりあえず忘れて、中の数字に着目してくれ、という意図の可能性があるので、僕はその点についてはありだとは思うけど)
About Face 3 インタラクションデザインの極意(Alan Cooper)
続けて第一部の残りと第二部の「振る舞いと形態のデザイン」まで読んだ。
いやまったく、アレグザンダを読んでおいて良かった。
ペルソナというのは「生き生きとした」ではじまるパターンをステレオタイプに落ち込むことなしにモデル化するためのツールなのだが、もし、アレグザンダを読んでいなかったら、ステレオタイプと感覚的に違いを認識できなかったと思う。
第二部はパターン集でここは刺激的だ。というのは全体がパターンランゲージで書かれているからだ(少なくともそう読める)。
最初に出てくるのが原則で「害にならない」「人類の進歩に役立つ」といった価値観が並ぶ。嘘でもこう書けるのは良いことだ。
というようにソフトウェアの設計の本とは随分と異なるが、僕には凄く参考になった。というわけで仕事用に持ち出し。
日本のSIではやはりこれはアーキテクトが押さえておくべき見方だと思う。
追記:微妙に上のは誤解を招く書き方だし、自分自身があとから読んで勘違いしそうだ。脳内モデル−表現モデルのラインと実装モデルは区別が必要で、ということは、ペルソナとシナリオから導かれるデザインは、どこかで実装可能な仕様に落とし込む必要があるわけだ。
本書ではそこの落とし込みは昔からの上流−下流を基本的に踏襲しているように読める。というよりもさらにいくつかの段階が追加されているということだ。ペルソナのシナリオからユースケース(機能として実装可能な)が抽出されなければならないし、表現モデルから実装モデル(抽象度が高いところでもドメインモデルに相当する)に転換しなければならない。段階が増える分、各段階をデザイナがブレが生じないように適切に調整する。また、段階が増えないように、表現モデルから実装の各レベルに対して差し込んでいく必要もある。ここのデザイナというロールの要不要と、要とした場合、ではそれをどのロールにマップすべきかという点に着目している。
もうひとつ、誰がパターンランゲージを使ってデザインを示せるか、ということでもある。
某所でボウイのグラススパイダーズツアーでのLoving the Alienを観て、無性に聴きたくなってiTSで購入。っていうか、アマゾンで物理CD買うほうが安いのか。
ジャケットの印象通りの夜の大人っぽい音楽。
当然のようにリアルタイムで聴いたわけだが、あまりに薄っぺらな感じで(そりゃ、ロウとかスケアリーモンスターズとかと比べてしまうわけだし)あっという間に捨ててしまった覚えがある。
あれから30年弱。
世界はほんの少しだが変わったしおれは年を取った。音色の複雑さだけではなくシンプルな楽器の組み合わせの複雑さにも妙味を覚えるようになった。
同じく青っぽい大人の夜の音楽。
Nightfly Trilogy: Nightfly / Kamakiriad / Morph Cat(Fagen, Donald)
1回しか行けなかったけど、RHG読書会でレビューしていた実践Common Lispが予約可能になった。確かに「実践」とつく本らしい楽しいおいおいがあったような気がするんだけど良くわかんないや。
Yuguiさんの初めてのRuby at Junkの2次会に参加(と今頃、書いている)。
コンパクトにまとまっている良い本だと思うし(1.9の情報があるのは良い)、ところどころYugui節といったほうが良い言い回しがあってそれが楽しかったりもする本。
たとえば
この慣習はRubyにも引き継がれていますが、よく考えるとRubyでは[]=も三項ですね。
2次会では、オライリーの方から、奥付秘話を聴かされた。どうも、この本の誕生にはおれの存在が深く関わっているらしい。でも、おれはTucker!という先達の存在を知ってたし、というかCLAMPだってCLAMPだと思うし(奥付見たことないから知らないけど)、別に関係ないような。(ここまで出てきた固有名詞の共通点と奥付というキーワードからどのような秘話か想像せよ)
で、ビンゴ大会があったのだが、最初のうちは、小町賞が受賞できるんではないかというような感じだったのだが、途中からいきなりぴんぴん来て、気づくとYugui賞(だと思う)をもらっていた。
序文がコリンウィルソンだよ。アウトサイダーとか中学生のころの話だよなぁのいまさらとか思ったけど、電車の中で読み始めるとそれなりに面白そうに始まった。
しかし、その序文を読むうちに、どうも、初めてのRubyの背後にはこの魔術理論篇があるように思えてきた(追記:重要なことを書き忘れていた。魔術理論篇ということは、当然実践篇もあるのだが、つまりは、そういう予告なのかも)。しかし、初めてのRubyの序文はまつもとさんだから、どう考えてもコリンウィルソンの役回りではない。
そこで吾輩、光倫意志孫が、初めてのRubyの裏序文を書くことにしよう。
序文
わたしの印象では、本書は廿1世紀有数のRuby入門書であり、Ruby(まったく稀になった現象――今ではほとんどがRailsだ)の入門書としても古今屈指のものだと思う。ただちょっと文句をひとこと。著者は本物のRubyistだ。それゆえ、自分以外の人間がいかに、Rubyなんてものは率直に行ってまったく理屈に合わないと思っているのかを、よくわかっていない。
(中略)
YuguiのRuby入門書が当の日本の出版社から書評用に送られてきて、それをはじめて開いたときは、正直言って放りだしてしまいたくなった。Rubyの歴史をあつかった本なら一目置くだけの心づもりはあったが、初めてのRubyのやりかたをプログラマに教えるとふれこむ本など、まったくインチキにもほどがあるような気がしたのだ。ところが読みだしたとたん、著者の精神の一面(本物という感じ)に胸を打たれた。読了したときは、これはまさにRubyという問題を手ぎわよく概括的に紹介したもので、Ruby学科の学生が当該問題に関する論文を執筆中だったら、この手のものは役に立つとわかった。またRubyは本当に効果をおよぼすと著者が考えている以上、基本的な法則や手順をいくつか示そうとするのも当たり前のことにすぎない。
Yuguiとは何者なのか? じつはこれ、筆名である。
こう書くとアルカディアの一種みたいだ。
それはそうとして、ひとつにメディア(発表媒体という程度の意味というか本来の意味)選択というのがあると思うのだ。あれとか、それは読みたいというような話になりまくるんだよね、今にいたるも。
オープンソースについて語られるメリットのひとつに多数の目にさらされるというものがある。
さて、ほんの10年前くらいまで、新聞というものは、次のかたちで読まれていた。
・自宅で取る。それを読む。暇なら隅から隅まで
・会社が取る。それを読む。わりと真剣
・喫茶店とかで読む。暇つぶし
このうち、1と2、そしてたぶん3にも共通点がある。それはすでに選択されているということだ。我が家で取っている新聞は、我が家の家風にマッチした新聞だし、わが社が取っている新聞は日経か、さもなきゃ社風にマッチした新聞だ。
たぶん、この状態では、リベラルなおうちの人は産経なんか見たこともないし、祝日に日の丸を掲げる家の人は毎日なんか読みもしないだろうし、比較的貧乏な家の人は朝日を読んだことはないだろうし、ということは容易に想像がつく。
さて、いつでも産経を読んでいて、それが不偏不党で、公明正大、客観報道の新聞かくあるべしと信じていた人が、あるいはいつも朝日を読んでいて、それが民主主義社会における新聞の透明さだと信じていた人が、あるいは毎日を読んでいてまあ社会ってのはそんなもんだよなぁなぁと新聞というものと数十年にわたってつきあっていた人が、あるときインターネットを発見する。そこに自分が見たことも考えたこともない新聞が存在していることを知る。
これが新聞か? 何かの間違いに違いない。制裁しようそうしよう。
という異文化との出会いの衝撃ってのがあるんだろうなぁ、と思った。
っていうか、複数の企業が同じセグメントに存在するっていうことは、各社各様の正義と公正さと主義主張があって、それがまた消費者の嗜好にあっているということくらい想像できるだろう。たった一つしかない公正さだの正義だのはくずなんだけどなぁ。
これは悪いことだ。というのは、せっかく存在する多様な主義主張、多様なそれぞれの公明正大、それぞれの異なる客観性が、ばかにあわせて平準化されてしまう可能性があるからだ。平準化した言論に価値はない。
というわけで、新聞は、さっさとインターネットからは手をひいて、支持者への宅配メディアに戻るべきだろう。
33,400件の中に含まれるかどうかは面倒なので調べてもいないけど、C#にもあるのだな。
Microsoft Robotics Studio Developer Center
この中の、CCR(Concurrency and Coordination Runtime)というやつ。というか、他にもDSSとか3文字言葉が久し振りに大氾濫している。
言われてみれば、Enumeratorの1列挙ごとに値を返して、次の呼び出しで現在の状態が復元されて列挙を続けられるのだから、できないはずはないのだが、そう来るとは思わなかった。というか、GUIアプリケーションにも入り込むのかなぁ、あとで試してみよう。
どうも、MSの場合、3文字言葉の氾濫が、それまでとちょっと違ったことを始める合図のようだ。というか、現在のC#って、C++より遥かに複雑なんじゃないかとか。(ジェネリクス使ったほとんど実装の多重継承のような技もあるようだし)
ますもとの弁当を食べるたびに、亀戸の歴史的変遷を調べようと思うのだが、食べ終えると忘れてしまう夏の夕暮れ
まあ、ポニョなんだけど、本当はひらがなかも知れないけど、それはどうでもよくて、ちょっと竹熊メモとか読んでいて、ああ、と思ったことがあって、つまり、と野坂昭如みたいに、全然、句点を入れずに、長い長い文を書くのは楽しいのだけど、ほらあれだよ、ムスカの太助とかいう、無頼派のなんてったけねぇ、大阪のカレー屋かなにかで有名な、そうだ織田作之助だけど、の文なんかもそうなんだけど、あれはよくよく考えてみるに、正しい日本語のあり方というもんじゃないかねぇ、ってのは、古典を読んでみるとわかるわけで、もちろん古典ったって、そんじょそこらの古典じゃなくて、平安時代とかにはじまって、江戸時代にいたって、さらにそこに言文一致のふたばてぇとか、そういう連綿と続く日本語の流れというものがあるわけじゃないかよおっかさん、落語だってよく聞いてみんねぇ、意外と句点は入らないもんときたものだが、つまりですよ、日本語の破壊者ってのは、あれだな、論文のカキカタとか、理工な人のための文章技術とか、ああいったあれこそが、日本語破壊の元凶だ。ひどいはなしだ。
何書こうとしたか忘れた。
思い出した。
上級者も楽しめる、初心者も楽しめる。マスな中級者も楽しめる、だからばかみたいにヒットするってやつなんだろうね。
これが中級者だけだと、パンダになるってことだね。上級者(竹熊先生とか)がそれほど相手しないわけで、当然、メディア的な露出は、広告主によるパブリシティに限定されるわけで、それだと層としての厚みってのは、まあ、出ない。
一方、青山真治とかペドロコスタがばかみたくヒットすることはおろか、パンダ並みに当たるわけもない。ボードむき出しコンピュータみたいなわけだしな。
というわけで、宮崎アニメ最強ということでおあとがよろしいようで、ででんでんでん。
まあ、わかるといえばわかるけど(あまり歓迎できない。特にエクスプローラーとフォルダーとか)
コンソールっていうんだっけ、この黒いのに打ち込んだりするのおもしろい。
ああ、そうか。そうだった。コンピュータのおもしろさってのは、リクエスト−レスポンスのおもしろさなんだよな。
作った。
Ruby-1.9.0-3 Windows Installer PacakageMD5 checksum: 9cc8e8a4802f840b192e63f9ee17ab49
>ruby -v ruby 1.9.0 (2008-07-25 revision 18217) [i386-mswin32]
_ ムムリク [いただきました。]
オーム社さんからもらっちゃった。
ちょうどAbout Face 3の、パターンのこまごましたとこ以外は読了したので、読み始める。
まず、苦言というかなんというか。
どうして、こうもまたLisperってのは押しつけがましいのだろうか?
もしかしたら、それは、翻訳する人の愛情がまったくビジネス的な政治的正しさを無視しているからかも知れないけど、他の翻訳書とはちょっと違う。野田さんが訳されたポールグレアムのにもそういう印象を受けるけど。というかLLのときにも感じたり、GNのときにも感じたりしたのだが。
おそらくそれは、本書いわくの
「プログラム可能なプログラミング言語」という禅問答にも似た記述がCommon Lispでの座右の銘に近い。
が理由なのかも。
プログラミング言語を利用しているときの全能感が異なるレベル(メタなところに)あるからかも知れない。
おかげで、普通の感覚とはずれがあったりするわけだ。あるいはあえて無視して言ってるだけなのかも知れないけど。
複合的な名前をハイフンを使って組み立てるのはLispの標準的なスタイルで、hello_worldのようにアンダースコアを使うとか、helloWorldのように大文字小文字を組み合わせるよりも、hello-worldのようにハイフンで区切られた名前を使う(こっちのほうが英語の書法にも近い)。
とか書いているけど、それは引き算を(- 8 4)とか、書くからじゃん。8-4と書けるようにする代償が、hello-worldが減算として読み込まれるということで、どっちが英語の書法にも近いのかとか。
なんかメタプログラミングのし過ぎで、アトムを眺めるときは地に足がついているけど、S式を眺めるときは、すでに宇宙飛行士的飛翔をしているために、全然気にならないんじゃないか? でもフツーのプログラマはコードを地に足をつけて書いていたりするわけでね。
もっとも、このあたりは重力がたいして無いから(歴史の問題としてたかだか100年にも満たない)、わりとすぐに体は浮いてくるわけだが、成層圏を突破するのはなかなか難しいかもね。いずれにしろ、地上への錘となる言語はあまりうれしくはないということは認めるけど。酸素ボンベ抜きに適当にふわふわしているくらいがちょうど良いという気はする。
この本の特徴で良いところは、想定する実行環境が、Lisp in BoxというEmacsをエディタとしたパッケージ(らしい。実際のところ、スルーしたけど)なので、Emacsの編集についても少しばかり書いてあったりすることだ。つまり、Emacsのごくごく基本的な操作は覚えることができる(もちろん、elispの本ではないので、elispをどうこうするわけではない)。LispとEmacs(の基本操作と、バッファのような基本的な概念)を覚えられるというわけで、確かに名前のとおり、いきなり実践的だ。というか実用的だ。
おもしろかったのは、13ページで、Hello Worldを書かせるのだが、そこに、うんちくが出ていて、世界最初のHello WorldはCではないことが示されている(脚注にだが)。
class FooBar : IEnumerable<Bar> { IEnumerator<Bar> GetEnumerator() { yield return bar++; // とか、何か実装してある } }
コンパイルエラーになる。
いろいろ試すと、IEnumerable.GetEnumeratorとIEnumerable<Bar>.GetEnumeratorのどちらかでエラーになる。
いやな予感を覚えながら、次のようにしてみる。
class FooBar : IEnumerable<Bar> { public IEnumerator<Bar> GetEnumerator() { yield return bar++; // とか、何か実装してある } /*private*/ System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() { return GetEnumerator(); } }
privateを付けたかどうかはちょっと忘れた(付けられない)。publicにしたくないなぁと思って何かした記憶はあるが、コンパイルに通った時点であっさり忘れてしまったのであった。
で、ズ・バ・リ(フータ君の化石をどーんと鑑定してみよう!のマネ)、これいやなんだけど。何、この最後の冗長なGetEnumerator() ?
というわけで、なんか見落として上手なIEnumerable<T>の実装方法をわかっていないだけのような気がしてならない。
と、教えてグーでした。答えてパー、直してチョキでした。とふざけた書き方をしているけれど、知りたいのは本当。
どうすれば固定電話の回線をなくせるか?
田舎の親がファクシミリを使って連絡してくるとか。
IPフォンにスキャナー内蔵させて、本人はファックスしてるつもりだけど、実は画像添付したメールを対応するアドレスに送るとか。当然、メールを受信するとファクシミリのふりをして、印刷物が出てくる。
外部から受け付け可能なアドレスとかサブジェクトとか設定できないとスパムメールの餌食だな。アドレス変換表の登録も必要だし。
そこはインストール時にパスワード設定して、Webインターフェイス経由で、子供がインターネット側から設定する前提。
会社の代表ファックス番号とかのかわりに代表メールアドレスとか。
どっかにありそうだな。
売れてないのかな。
というような雑談。
昨日、Javaみたく"^(\\d\\d)\\s(\\d\\d)$"とか書いてたところをふと気付いて@"^(\d\d)\s(\d\d)$"とかに書きなおした。
ジェズイットを見習え |
_ ムムリク [ニュースで見たような記憶が。マンガの原画をストーリー順に並べた展覧会だったでしょうか? 雑誌連載の最後をそうしたので..]
_ arton [ポスターがすごくそそられるデキなので、閑があればむしろ見たかったくらいでした。木陰の行列だから読書や歓談しながら並ぶ..]