著作一覧 |
RubyKaigiかなぁ、それとも池袋のジュンク堂かも知れないけど、しかも松田さんだと思うけど違うような気もしてきたけど、「RailsによるアジャイルWebアプリケーション開発」という本があって、Railsはもちろん列車の下敷きになって滑らせている(といっても重みのため、ツルツルがむしろしっかりホールドするらしいのだが)レールのことなのだが、それが版を重ねるにしたがって、しょぼい汽車がどんどん進化して、第3版ではついに、レールを超えて天駆けはじめたかっこいい。
でも、それってレールは不要ってことになるのか? というネタだった。
で、その「RailsによるアジャイルWebアプリケーション開発」の第4版が出て、当然のように、列車は空を飛んでいてもうレール不要になっているのかと思ったら、そんなことはなかった。
が。
うーん、レールが3本(というか3組6本だけど)、互いに交わることなく走っている。
もしかして、Ralls 1.0 (断絶) Rails 2.0 (断絶) Rails 3.0という深い意味があるのかなぁ、と思わなくもない晩秋というよりも冬の始まり。
電車の運転―運転士が語る鉄道のしくみ (中公新書)(宇田 賢吉)
(レールについてはこの本から学んだ)
RailsによるアジャイルWebアプリケーション開発 第4版(Sam Ruby)
(あ、書影ないのか。上が事実かどうかは本屋で買って確認するといいよ)
RailsによるアジャイルWebアプリケーション開発(前田 修吾)
(遅そうな汽車とがっちりしたレール)
RailsによるアジャイルWebアプリケーション開発 第2版(Dave Thomas)
(電化されたか、少なくともディーゼルっぽく列車は進化したしレールは枝分かれが合流している……rackとかか)
RailsによるアジャイルWebアプリケーション開発 第3版(Ruby,Sam)
(おー、レールが途中で切れている)
持っているMBPは2008年版なので、以下となった。(確か以前もそうなって、なんかやったが覚えていなかった)
・OSXでBootCampを起動する。
・WindowsドライバのダウンロードとCD-Rへの書き込み
・パーティションの設定
・Windowsのインストールディスクを入れさせる
・突如リセット (突如なのでびっくりした)
・Windows側でブートしてセットアップ開始
・通常は蓋をして、外付けLCDで作業しているのだが、このときはまったくLCDに反映されないので、最初何が起きているのかと待ってしまった。Windows用ドライバが入っていないのだから、当然、MBPの液晶が必要
・Windowsのセットアップ
・インストールパーティションにBootCampを選択すると怒られる。
・NTFSでフォーマットをすればOK
・CD-Rを入れると、autorunでsetup.exeが実行される
→ このハードウェアは64ビットWindowsをサポートしていません、でエラー終了。
・Windows Updateしまくると、nVidiaはじめほとんどのドライバがセットアップされるのでそれだけで十分っぽい気になる。
・Bluetoothは謎状態。
・というか、ブート切り替えとかしたいので、AppleのBootCampコントロールパネルはやはりインストールしたい
・CD-Rに、Drivers\Appleというディレクトリがあって、そこにBootCamp64.msiというファイルを発見。
・ダブルクリック→setup.exeから実行しろというメッセージが出て終了
→setup.exeを実行すると、このハードウェア……となるのはわかっている
・(Explorerでも良いが)スタートメニュー、アクセサリからコマンドプロンプトを右クリック→管理者として実行
・cd d:\drivers\apple
・start Bootcamp64.msi
・無事インストール完了
・Boot Campコントロールパネルも稼働している
・良かったね
(ただし、Appleいわくサポートしていないハードウェアでの64ビットWindows実行なので、何かまずい問題はあるのかも知れないし、あってもしょうがない。が、とりあえず動かすことがおれには重要だったので、これで良いのだ)
APPLE MacBook Pro 17/2.4GHz Quad Core i7/4G/750GB/Thunderbolt MD311J/A(-)
(新しいやつは速いんだろうな-Core i7だし)
覚えられないメソッドシグネチャ(あるいは覚えても無駄で、必要なときに調べれば良いメソッドシグネチャ)といえば、なんといってもqsortだ。 が、もっと面倒なやつを見つけた。
意味が微妙に似ているがまったく異なる内容のものが、可変個ならんだ最後に別のやつが出てくる。
String#replaceの第2引数の引数だ。
例:
"-a-b-c-d-e-".replace(/-(\w)-/, function(x, y, z, o, p, q) { return '*' + x + '*' + y + '*' + z + '*' + o + '*' + p + '*' + q + '*';});
"-a-b-c-d-e-".replace(/-((\w)-(\w)-)/, function(x, y, z, o, p, q) { return '*' + x + '*' + y + '*' + z + '*' + o + '*' + p + '*' + q + '*';});
昨日の例では仮引数名をx,y,z,p,q,rとしているが、もちろんこれが解りにくさを助長している。
僕が最初にみたのは、ここまでひどくはないが、やはり相当いい加減な名前だったので、一体、何が与えられるのかと考え込んでしまったのだった。
で、次のように書かれていたら、おそらく自然にそういうものだと読めたと思う。
function(g0, g1, …, gn, index, org)
でも、参照しなければ省略するほうがいいから、index以降は必要な場合だけとして、さらにindexみたいに長いのはスペリングミスの元凶だから、単にiか、posとすればよい感じだ。
アスキーの鈴木さんから、テスト駆動JavaScriptをいただいた。
これは、実に良い。おれが考える理想のJavaScript入門書に限りなく近い(というか、おれが書くより良いから上方向から近い)。
まず、これはTDDの本であり、JavaScriptの問題点は、それがRubyなどのスクリプト言語より、固いプログラミング言語(JavaとかCとか)に近い構文を持っているのが原因だと思うけど、どうしても変数とか関数名とか長く書きたくなるし(これは不思議な心理的な要求による)、言語が持つ予約語自体が長いし(functionだよ)、つまりいやでもタイプミスして死ぬ。
どうすれば良いかといえば、解決方法は2つしかない。プリプロセッサを用意して未定義変数とか利用していないかチェックするか、あるいはテストするかだ。前者よりも後者のほうがまあ有意義だ。というわけで、TDDが解決方法だというのは自明なのだが、これが結構めんどうだ。理由は簡単でブラウザが(Rhyno使うとかあるけど)必要だからだ。
で、この本では、今の本だというのがまさに良いところで、JsUnitやYUIといった過去の勇者たちに敬意を表しつつも、今はJsTestDriverでしょうとして(このあたりのJavaScriptのxUnit群の紹介と批評は読み物としてもおもしろい)いて、本文ではJsTestDriverを使っている。おれも早速本業ではJsTestDriverを使うことにした。
全体は3部構成で、まずはJavaScriptにおけるxUnitの紹介をしつつ、TDDの手順についての説明。まあ、普通というか常道だが、JavaScriptはコンソールベースよりもブラウザベースのほうが多いから、そのあたりの説明がうまくまとまっているのが良い。
第2部がJavaScriptのプログラミング入門で、ここが特に良い。少なくとも2010年代のJavaScript入門であれば、これを書くべきというものがこれでもかこれでもかと出てくる。というか、まったく知らないものもあって、驚く。ちなみに、おれは匿名が好きだが、この本は無名関数という用語を使っているので、そういうのが大好きな人でも安心して読めるだろう。おれは、無名という言葉は、無名市民とか無名戦士とかみたいな墓石とルサンチマンの香りがするから大嫌いなのだが、そういう言葉が好きな人もいるからそこらに記念碑とかが建てられるんだろう。というわけで、おれは、そのイヤな臭いを消すために匿名にリファクタリングしたいけどな。
で、それはどうでも良くて、つまり、この本は、20世紀に見られたJavaのようなクラスベースOOPLや、VBみたいな制御構文一直線の手続き型言語に寄りかかったJavaScriptの本ではないというということだ。
というわけで、JavaScriptで使える関数やオブジェクトのあるべき使い方が示される(というのは、TDDの究極の目的はリファクタリングにあり、リファクタリングするためには、良い書き方を知らなければならないからだ)ので、目からうろこが剥げ落ちまくる。
で、本書の半分を占める第3部のTDDの実際編となる。ここも現時点のJavaScript本としてあるべきもので、Ajax、Comet、Node.js(サーバサイド)と、実際編らしくふむふむそうやるのか、と読むことになる(もちろん、手を動かすほうがもっと良いのだろうが、JavaScriptは読めるプログラミング言語なので、読んでいるだけでえらくおもしろい)。
で、4部とついているけど、おまけみたいな感じで、TDDのパターンとしてスタブやフェイク、ダミー、モックそれぞれについて紹介など。
テスト駆動JavaScript(Christian Johansen)
強く勧める。それにしても、アスキーの黒い本のシリーズは実に良いな。
というか、強く勧めるどころか、題名は「テスト駆動」とかついているが、手続き的な書き方は知っているプログラマ(超初心者というわけではないという意味)が、JavaScriptの入門書を買うのであれば、サイよりも、何よりも、この本を買うべきだ。そして、この本を参照しながら、開発するべきだ。つまり、これがJavaScript入門書のスタンダードだ。(バイブルがサイなら、実用書がこれというか、ECMAの仕様書とこの本があればサイはいらない気がする)
これだけすごい本なのだから、amazon.comでも大絶賛の嵐だろうと思ったら(おれは、結構、USのamazon評は信用できるような気がしてるんだ。経験則だけど)、星1つがいくつかある。
Test-Driven JavaScript Development (Developer's Library)(Johansen, Christian)
(.comのほうにリンクしているわけじゃないので注意。.comへのリンクは上にある)
なぜだ? と思ったら、Kindle版が高いとか、Androidじゃ読めねぇとか……うーん、書籍そのものについての批評と、メディアの批評が同じ重み付けになるのは、あまり良くないなぁ。
amazon.comのテスト駆動JavaScript原書(Test-Driven JavaScript Development)のアマゾン評だが、星1つの評があることについて言及したわけだが、さらに読むと星1つの評のうちの1つはコメントでフルボッコにされていてなんというか健全なサイトだなぁと感じる。
で、星1つのうちのフルボッコじゃないほう「良い本だけどandroid kindleだと最悪だ!」のコメントを読むと、「同意。おれもキンドル版を買おうかとサンプルをダウンロードしたけど、こりゃダメだ。編集者はがんばんなきゃな」とか「良いと思った本に星1つとかバカじゃねぇのか? 電子フォーマットの評を書籍の評にするんじゃねぇよ」とか「おれもサンプルをダウンロードしたけどkindle(3)ならそんなにひどくもないよ。っていうか買うつもりなら、まずサンプルをダウンロードして試すほうがいいぜ」とかだ。というかこれが全部だけど。
で、はたと気づくのだが、おれはこれまでオライリー、達人出版、(忘れちゃったけど、レシピと安全Webアプリケーションが特価の時に買った)の3社から電子書籍を買ったり、見たり(達人は自分のやつの校正とかあったし)しているが、アマゾン評で指摘されているようなサンプルってあったっけ?
PCでPDFならフルバージョンだからサンプルなしでOKかといえば、そんなことはないと思う。たとえば画面の反射がだめな人はだめだろうし(最初の1冊目限定かな)、想定している読書シーンで読めるかどうかってのは試さないとわからないかも知れない。これで(上の3社とは関係ないことだが)移動ができないタイプのDRMがかかっていたらどうにもしょうがいないだろうし。
というわけで、いろいろ厄介なものだなぁと思うのだった。
(紙の本だと、何気なくアマゾンで頼んだら、「こんなに分厚くて重いのか!」って想定外ってのがあったな)
日本のアマゾンでも、あまりにたわけた星1つにはちゃんとコメント欄が機能しているということが、少なくとも1つは例があった。
_ きしだ [オライリーは、「ThoughtWorksアンソロジー」の前書きとかが見れるようになってて、これを参考にしろって感じに..]
新国立劇場でこうもり。
コジファントゥッティに続いてエレートがやって来て、エイゼンシュテイン。朗々と歌うし、踊りは踊る(春がどうしたというようなバレエの間に、くるくる回ってみせたりもしていた)、目配せしながら演技も軽やかで、実に好きな歌手だ。
アデーレは小柄な女性で、日本人の横顔よ、と歌う。
全体に、日本語を取り入れて(ただ、おれは外人がカタコトの日本語を交えると観客が笑うという構造がさっぱり理解できないので、それはおもしろくもなんともないのだが、一体、何がおもしろいんだろうか? それがいかにも看守が飲む酒がもったいつけて焼酎だというのはおかしいわけだが、確かに、それは安酒の代名詞であることだし、で、それを焼酎と日本語訳して、看守にショウチュウと言わせることは単なる翻訳の話であるわけで、それは別におもしろくはない。突然56、57とファルケ博士が日本語でカウントしながらストレッチを始めてロザリンデをごまかすのは突然の日本語がおもしろいのだか、ストレッチになるところがおもしろいのかは微妙なところだったが、というかなぜ50番台だというのもあるけど)セリフをとてもわかりやすくしているのは好感が持てる。1幕の最後でロザリンデに手紙が配達されて2幕でハンガリー人に扮して出てくるための話のつなげ方も考えた演出。
そういう演出上の作り方(こういうのも一種のカデンツァということになるのだろうか)テノール歌手の3幕はじめの名曲一フレーズ集もおもしろかったし、まず忘れてはならないのは、序曲からオーケストラが実に立派なものだった。指揮者はリングを振った時の人らしいが、リングでは取り立ててなんとも思わなかったが、こちらは細かいテンポの動かし方といい、音色の作り方とか良いものだった。オーケストラもうまいものだ。太鼓がとちったらどうしようかとか不安になるくらいに雷鳴が鳴り響き、時計が時を刻むし、弦はきれいに流れていく。東京フィルは蝶々夫人のときにも感心したけど、本当に良い音を出すなぁ。
急遽決まったオルロフスキー公爵は、歌は良くわからないが(そういう歌じゃないし)、立ち居振る舞いが妙なロシア人にぴったりだったし、ロザリンデも実にロザリンデ。我が家の掟の歌では2回目の質問してみろに対して、いきなりおたくの仕来りでしょ? と答えてしまう。
でも、やはり印象的なのはエレートで、最後の弁護士に扮しての質問中についに机の上に乗って朗々と歌いだすところのテンポと威勢の良さであるとか、1幕で夜会服(だと思うが、紳士の服装はわからんな)に着替えてきての立ち居振る舞いとか、哀しく始まりちゃかちゃかちゃかちゃかとなる曲での踊りっぷりとか、出てきて動いているだけでおもしろい。
あと、看守役の人と所長役の人の演技も良かったというか、まったく3幕を退屈しないで楽しめた。
・カーテンはコウモリの羽根がはえた人間が時計をチクタクさせているように見えるのでとても妙だが、ちゃんと見えていなかっただけかも。それとも、今度はエイゼンシュテインが(笑いものとしての)コウモリになるという意味なのかな。
・弁護士のかつらを取ると禿頭というのはそういう演出という決まりなのかな?
・1幕は室内ではなく、庭という設定。
・2幕のウォッカはいきなり瓶からエイゼンシュテインの口へ注ぎ込むという乱暴な演出。
・何度見てもネズミちゃんというのは不思議な言語感覚だな。しかもラッツみたいだし。
・手元のDVDで観たこうもりに比べると、エレートが若いので、エイゼンシュテインの雰囲気がが中年の嫌らしい親父というよりも、単なる軽くて陽気な遊び人という感じで好感度が高い。
・ルナール(キツネ)とシャグラン(恥というか、なんでこんな名前を選んだのか、教養がなくて名前の意味がわからん男という意味なのか、それともchagrinじゃない別の言葉なのかなんなんだろうか)のフランス語合戦(どちらもフランス語を知らないので単に固有名詞をパリーとかマルセイユとか言いあうだけ)の最後に麻布十番というのを混ぜて、おお日本語も喋れますとかやったのは、おもしろかった。たしかにアザブジュウバンというのはフランス語っぽい。
ヨハン・シュトラウス2世「こうもり」/クライバー指揮 [DVD](パメラ・コバーン)
(これを持っていて観ていたのだが、買ったときは2000円代だったのにマーケットはとんでもない価格付けをしていてさすがに呆れる)
ONKYO DLNA対応ワイヤレススピーカーシステム 15W+15W GX-W70HV(B) /ブラック(-)
なんか、【レビュー】音声ケーブル無しで音が出る新世代スピーカー-オンキヨーDLNAスピーカー「GX-W70HV(B)」を試すというのを何気なく読んでしまって、こりゃすげぇと感じてしまった。
で、DLNAってなんだ?
って、業界団体じゃん。ということは、IEEE 802.3をなんか意味なく略してIEEEとか言うようなもんかな?
プロトコルがHTTPベースってことは、なんのことはなくTCP/IPなのか? (HTTPは下層をリライアブルであることを必須としているわけだし)
なんか音は悪そうだが、ミニステレオジャックの付け根が折れて断線する病とおさらばできるのなら、それだけでもすごいメリットだなぁと、自分のクリスマスプレゼントに買ってしまおうかといきなり悩んでいるところ。
昨日というか一昨日のことだが、急に天ぷらを食いたくなって、4sqで天ぷらを調べると、近くに一軒だけ見つかった。コメントとして値段の割にはうまい、と書いてある。
値段のわりにはうまいのなら、まあいいかと探し始めるのだが、なかなか見つからない。
面倒になってあきらめて、ふと路地に入ったら、そこにあった。汚い店だけど、値段のわりにはうまいというくらいだからこんなものだろうと思って、入った。
カウンターがL字になっていて、数人客がいて、中でじいさんが天ぷらを揚げている。ばあさんが給仕みたいなことをやっている。
で、天ぷら定食950円としか書いてないので、それを頼む。
しばらく待っていると、扉のところに小学低学年くらいの子供がただいまぁとか言って入ってきて、すぐ出て行ったかと思うと、裏から回ってきて調理場の中を腹減ったとか言いながら走り回っている。おっかねぇなぁとか思っていたら、裏から母親らしい人が出てきて、何か食わせに連れ出した。
というような感じの店だ。
と、四角い盆にご飯としじみの味噌汁と漬物と大根おろしが入った天つゆ入れが出てきた。
で、目の前の白木のカウンターと、厨房の間に黒い石の台がぐるりになっているのだが、そこに白い紙が置かれた。で、ぽんぽんぽんというかどさっというか、エビの天ぷらが8尾くらい置かれた。
は?
という感じだ。で、天つゆが出てこないので、塩が置いてあるので、それを振って食うと、これがめちゃくちゃにうまい。
うまいというか熱いというか、ここまで揚げたてのてんぷらを食ったのはおそらく生まれて初めてだ。
とにかく数が多いので、さっさと食わなければ冷めてまずくなりそうな予感がするので次々と食っていくのだが、死ぬほど熱い。が、それがうまい。
しかし、熱いので天つゆ+大根おろしで食いたいので、どこにあるのか訊いたら、カウンターにぽんぽんと置かれているポットがお茶ではなくて天つゆだと教えられた。それは気付かなかった。
で、ポットから大根おろしが入った小鉢に天つゆを注いでエビ天を入れて食うと、これがおいしくない。おいしくないのは、天つゆがいい加減な味だからだ。というわけで、塩に戻すと、やはりうまい。というか熱い。でも大根おろしを食いたいのでいくつかは天つゆで食べるのだが、あまりおいしくはない。天ぷらそのものは熱いのでうまいのだが、天つゆがいまいちだなぁという感じ。
で、御飯を食うと、これがまずい。べちゃべちゃしている。漬物を載せて食うと、また漬物がいい加減な漬物で少しもおいしくない。
が、(まだえびは残っているのだが)天ぷらはまだ熱く、しかもうまい。いや、どうもそんなにおいしいというわけでもないようだ、と気付いてくる。ずば抜けた食材というわけではないし、衣がすばらしいわけでも、油が特に良いわけでもない。が、揚げたてのてんぷらというのはすさまじく美味しいのだな、これが。
で、エビ天をひたすら食い終わると、キスが3尾どかどかと置かれて、これがまた熱いがうまい。外はパリツとしていて中はちょっとくせがあるキスの味でほくほくしていて、これがうまい。塩で1つ。天つゆに1つ、やはり天つゆはうまくないが、大根おろしと組み合わせるのはそんなに悪くはないが、やはり、この食い方はだめだなぁと、また塩で食う。で、御飯を食べると、まずい。
で、その時点で満腹峠を越えているのだが、蓮根とカボチャとノリが出てきて、一体どうしろと状態だが、やはり揚げたてのてんぷらはうまい。つい、天つゆつけるとおいしくないのだが、それでもうまいし、塩だとすごくうまい(要するに、天つゆがおいしくないのだよ)。
うーむ、これは新鮮な経験だった。というか、天ぷらがこんなにうまいものだとは、とある種の感動さえあった。
食い終わって、すげぇうまい店を見つけたと思ったものの、落ち着いて考えると、飯も天つゆもお新香も味噌汁も、はっきりいっておいしくはない。天ぷらだってそんなにすごい良いものだとは思えない。が、揚げたてそのままが全然なんの猶予もなくどかどか食えるということに関して、ここまで圧倒的な存在は他には経験がない。
だいたい、天ぷらって結構、高級な食い物だから、カウンターがあるような店には数えるほどしか行ったことはないし、そういう店ではきれいに盛り付けられるし、食う方も、味わって食おうと身構える。そんなこんなで、今食ったようなばかみたいに熱い天ぷらは食ったことがない。
うまい天つゆがどばどばかかった天丼も食うことはある。外苑銀杏並木の脇の店とかえらくうまいなぁ。が、そういう店だと天丼になっている時点でそんなに熱い天ぷらではなくなっているし、やはりまずは~を食ってから、次はどうしたとか余分なことを考えながら食うから、やはり今食ったような食い方はしないし、できない。
そういったお御馳走な天ぷらではない、天ぷら、ひたすら揚げたてをすぐさま貪り食う天ぷら、ってのは初体験だ。で、それは圧倒的なUXがあった。
多分、天ぷらの原点ってのは、こういうもんだったんじゃないか、とかいろいろ想像しながら、それにしても、定食として考えるとまずかったような気がするが、天ぷらとしてはすさまじくうまかった、と微妙な感想を持ったのだった。
(で、翌日、ついもう一度行ったら、今度は時間が早かったせいか、やたらと混んでいて、ほー人気ある店ですなぁとか思った。で、昨日のご飯がまずかったのや、えびがやたらめったら出てきたのは店じまいに近い時間だったからだな、と想像してみた。
で、最初のえびが3尾(4尾かも)と半分で、おおやはり昨日は特別だったのだな、と思いながら御飯を食うと、それほどべちゃべちゃではないものの、やはりうまくないし、天つゆは、これはやっぱりまずい。味噌汁は結構まともで良い感じだ。昨日はなんかぼんやりした味だったような記憶があるのだが。
が、そういうもろもろ無関係に揚げたてのてんぷらはやはりすさまじくうまい。で、食い終わるころに、また3尾だか4尾だかが追加されて、うーむ、量はやはり多いのだ(今回は混んでいるから、揚げるのを2回に分割したのだなとわかった)。とか、いろいろ。
(御飯がまずいとか上では散々書いているが、天ぷら以外の部分は500円の定食程度の味という意味で、食い物とは言えないとかそういう話ではもちろんない。というか、残さず食っているわけだし。後、今頃気付いたが、上品ぶった天つゆの使い方をしているのが敗因かも知れない。天つゆはだぶだぶに器に入れてべしょべしょにつけて食えば良いのかも。というわけで、こんだはそうしてみよう)。
ちょっとしたパラメータをJsonにしようとして、ExcelからVBAでADODB.Streamを使ってファイルに書き出した。
それをC#(.NET Framework 4)でデシリアライズしようとするとエラーとなる。
ハンドルされていない例外: System.Runtime.Serialization.SerializationException: オブジェクト 型 j2o.JsonTest の のシリアル化を解除しているときにエラーが発生しました。予期しない文字 'i' が見つかりました。
---> System.Xml.XmlException: 予期しない文字 'i' が見つかりました。
?
再現コードは面倒なのでVBSでリテラル吐き出しとして以下に示す。
set ads = CreateObject("ADODB.Stream") ads.Charset = "UTF-8" ads.Open ads.WriteText "{""members"": [{""name"":""dede"", ""age"":1},{""name"":""bebe"", ""age"":2},{""name"":""cece"",""age"":3}]}" ads.SaveToFile "test.json" ads.Close
iとな? が、iなんてないはずだが。
utf-8だからcmdコンソールでtypeしても正しく表示されるとは考えられないので(本物は日本語も使っている)メモ帳で見てみる。
{"members": [{"name":"dede", "age":1},{"name":"bebe", "age":2},{"name":"cece","age":3}]}
予想通りだし、iなんて使ってない。文字コードもUTF-8なのは、名前をつけて保存のエンコーディングがutf-8になっていることで確認した。
というわけで、不思議に思いながらもVBAやExcelシートを調べるのであった。
だが、いくら調べてもわからん。しょうがないのでC#側も見てみる。
これも同じく簡略化してコンソールベースとしたものを示す。
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Runtime.Serialization.Json; using System.Text; namespace j2o { class Program { static void Main(string[] args) { FileInfo f; if (args.Length == 0 || !(f = new FileInfo(args[0])).Exists) { System.Console.WriteLine("usage: j2o jsonfile"); return; } using (var fin = f.OpenRead()) { var des = new DataContractJsonSerializer(typeof(JsonTest), new Type[] { typeof(JsonTestItem) }); foreach (var i in (des.ReadObject(fin) as JsonTest).members) { System.Console.WriteLine(i.name); } } } } public class JsonTestItem { public string name { get; set; } public int age { get; set; } } public class JsonTest { public JsonTestItem[] members { get; set; } } }
[DataContract]属性を付けたり外したり、いろいろ試す。が、どう考えても正しいコードだ。バージョンの不整合とかかなぁとか不思議に思いながらADOのバージョンまでチェックしたりする。
が、そもそもiがおかしいといわれているのに、iなど無いのだ。
そのうちに、コンソールによってはiではなく、iの上がトレマだということに気付いた。コマンドラインではなく、デバッガ出力だとトレマになる。
ということは存在していない(あるいは目に見えない)バイナリ文字を見つけて文句を垂れているってことだな、と気付いた。
とすれば、答は明確だ。
UTF-16用のBOMを後先考えずにUTF-8への変換式に従ってこしらえたMS特有のBOMだ。
もちろん、そんな変なものはMS固有なので、基本はインターネットの向こうの世界を相手にするDataContractJsonSerializerがそんなものを頭から考えていなくても責めることはできないかも知れない。
でも、自社の代表的なプロダクトであるメモ帳で作ったテストデータくらいは食わせてみろよ、と思うけどな。
fin.Position = (fin.ReadByte() == 0xef) ? 3 : 0;
をusingブロックの最初の行に追加して終結。
国際的には過剰品質で価格競争力に劣るらしく、どうにもFelicaの先行きが暗い今日この頃だけど、あれのおかげで、一つの職業が綺麗さっぱりなくなった。つまり、改札の切符切りのことだ。
まだ少しは余命がありそうだけど、ETCのおかげで、高速の料金所のおっさん達も別の職を見つけることになるだろう。おれは、あの職業は絶対に気管支や肺に悪いと思っているから、人道上の観点からも大いに結構なことだ。
というわけで、消え去る職業ってのは、厳然として存在する。
だから、本気で「近い将来職業として成立しない可能性もある」なんて考えているのなら未練がましい事を言わずに、さっさと退場すりゃいいんだ。今すぐ自分で引導を渡すことこそ、歴史的功業ってやつだろう。それとも、誰かが引き止めてくれるとでも思っているのだろうか。くだらない。
複数行のTextViewで、ellapsizeは既定値(ってことはnullだと思うんだけど)に設定していても、setTextするCharSequenceの先頭に"..."を置くと、ellapsizeにSTARTを設定したのと同じ結果になるような。
最近、生まれて初めてPHPというプログラミング言語を使ってWebアプリケーションを作っているのだが、いろいろ思うところがある。
おれは耳年増だから、Webアプリケーションをなめるなとか、PHPには「教官」までしか感じない。というような物言いは知っていたわけだが、びっくりするくらいその通りだった。特に弾さんのはまさにその通りだと思う。
しかも、使ってみてわかったが、表現力は相当に高くて、異様に簡単なCみたいな感じだ(が、関数ポインタは無い)。
そこがVBとの大きな違いで、いかにもまずい感じがする。
つまり、VBでは何もできないのに対して、PHPではWebアプリケーションがそれなりに作れてしまう、しかも何も考えなくても。というか、何も知らなくても。
これでは、確かに<?php echo $_GET['foobarbaz'] ?>とかそこら中に出てくるWebアプリケーションが出てくるだろうな、と思う。
しかもマニュアルが結構できが良い(もう少しサンプルがあるほうが良さそうだが、ディスカッションが入っているのは良いところだ。きっとspamとの人知れぬ戦いがあるのだろうけど)。ひさびさにオブジェクト指向ではないプログラミング言語に出会ったが、それなりにCみたいにオブジェクトを第1引数に指定するプログラミング言語なので、マニュアルを調べるのもそんなに面倒でもなかった。
で、結局、この適当に誰でも容易にWebアプリケーションが作れてしまう感がPHPの問題点なんだろうな。確かになめるなと言いたくなるような言語ではある。またつまらないといえばつまらないのだが、実用言語としては確かに優れている。
RailsによるアジャイルWebアプリケーション開発 第4版(Sam Ruby)
(たとえば、Railsを完全に手ぶらで使い始めるのは相当に難しいだろう。なので、こういう本を読むことになる)
byflowに、畑中純の絵が見えたので、興味を持ったのがまず最初。コミックばくという売れない雑誌が売れない原因のひとつとされた畑中純の画を表紙にするとはセンスが良い。
で、アマゾンの評がむちゃくちゃにひどい。
学術書の星1つならともかく、小説に対してのアマゾン低評価というのは、単に良く売れる本=読書をしたことのない人が話題性から手に取って、結局読解できずに文句を垂れるという公式がありそうなので、どれどれどのくらい難しい本なのか読んでみようという気になった。というか、難しいはずはあり得ないから、それは興味も湧くというものだ。
で、最初はだらだらしているし、出てくる人物に誰一人として興味も共感も湧かずに半ばうんざりしながら読んでいると、突然殺人が起こり、老人の刑事が出てきて喋りはじめる。会話で物語が進み始めるとテンポは良くなるのだが、その反面、似たような人種(同じ職業についているというか、つまりは警察官なわけだが)のセリフのキャッチボールなのでどの「」が誰のか? とわかりにくくなったなぁ、と思う間もなく、主役級の刑事が昔喋っていた方言を思い出したとか弁解しながら方言をひとりで喋り始めるので、誰がどのセリフを言っているのか明確になった。くだらねー仕様だなぁと思いながらも、物語が動き出すのでうんざりはしなくって本腰を入れて読み始めた。
が、やたらめったらと、女だから、女ですもの、それが女の生きる道とか、妙なジェンダー感がやたらと出てきて鼻につくつく、何このステロタイプというかショーヴィニズムというか思わずカバーの著者紹介をちゃんと読んだら1950年代生まれとか書いてあるから、ああ、そういう価値観なのか、と我慢することにする(というか、いつの間にか、すっかりポリティカルコレクトネスにおれは毒されてしまっているようで、こういうのに嫌悪感を覚えるようになってしまった)。また、考え方が非常に不愉快な田舎者がえんえんとつまらない考えを開陳するので、ますます不快になってくるのだが、不快の頂点の段階で殺されるので一安心。というか、出てくる連中がほぼ全員セックスにしか興味がないみたいなのが読んでいてすごい違和感だ(で、むしろ異常な考え方なのだが、妙に達観している若者の思考に同調するしかなくなるわけで、それも読者の方向性を揃えるための技巧なのかも知れないなぁとか考える)。
で、怪しげな人(つまりは、唯一まともに見えてしまう若者)が実に怪しい過去をちらみさせて、でもそいつは犯人のはずはないよなぁと読んでいると、突然、妙な集落を探検したりして、おもしろくなった。なるほど、いろいろな事物の組み合わせで物語を作る人なのかと感心する。そういえば食い物の描写や室内の描写なども凝っているな(が、人物の造形は女だから女ですもの、やっぱり私は女だは、と不快な紋切型で、個々の事物に対する描き様に対して人間にはそれほど興味はないようだ)。
と、話は進んで、おおなるほど、こういうことだったのか、と帯にも書いてある被害者の間のリレーションシップ構造の巧妙さに感心し、電車でぽつぽつ読むつもりが一気読みの態勢となった。
で、確かにいくつか事件と関係ないため回収しない設定(だが、それを人物の陰影のための設定と考えればありだよなぁとは思うので、どうも事物に対する描写に対して人物の描写が妙に紋切型なのを補うために導入しているようでもある)があったりするので、快刀乱麻というわけではなく、そこがアマゾン低評価の理由だなとは気付くが、しかしそれは欠点ではなく、むしろ余韻というか妙な味が舌に残るというほうで、読書体験としては良いことなんだろう。
というわけで、十分におもしろかった。が、やはりこのてのジャンルは好みじゃないなぁ。
ツイン・ピークス ゴールド・ボックス(10枚組)(初回限定生産) [DVD](カイル・マクラクラン.マイケル・オントキーン.ララ・フリン・ボイル.シェリリン・フェン)
つまりは、ツインピークスみたいな感じだ。
田舎で人がわさわさいて、一見それぞれ個性的なようでいて全員がほぼ全員、みな同じようにどうでも良くて、でもなんか不思議な映像や明媚な風光がまざったりして、突然はさまる微妙なエピソード、まあ落ちはついたけど、結局なんだったの? というところに近いものがある。
でも、すぐに読み終われるだけ、ツインピークスよりも優れている。
バージョン管理の歴史を読んでいて、そうそうSCCSと違ってRCSは最新持ちなんだよなぁとか思い出して、それからふと愕然とする。
もし、今、山奥で50年間くらいこもっていたプログラマ仙人(つまりgithubはもちろんのことrcsもsccsも知らない)が、ソース管理ツールを作るとしたら、どう作るだろうか?
最初のコミットはソースそのものの保存となる。
次のコミットは元のソースと最新のソースの差分と……どちらの原型を保存するか?
もし、そこで次のコミットのことを考えたら、そりゃ最新を保存するだろう。
そうすれば、次にコミットも最新のソースとレポジトリから取り出したソースの差分の保存で済む。
つまり、一番頻繁に行われるのは、常に最新の取得と最新のコミットなのだから、原型としてレポジトリに保持するのは最新の内容が低コストだ。ソースコード管理という観点からは、そのほうが自然な発想に思う。
が、最初の実装であるSCCSは、オリジナルを保存することに決めた。
何しろ最初の実装なのだから、ユースケースを想像しなければ、オリジナルと差分の積み重ねという考え方のほうが自然だったのかも知れない。それとも、最初に作ったものが正で、その後のはすべて派生に過ぎない(でも、そうだったら差分の積み重ねという発想とはならないだろう)と考えたのかな。
で、The Source Code Control Systemを読むわけだが、いきなり、
COMPUTER programs are always changing
と始まる。で最重要項目としてまっさきに挙げられているのがディスクスペースの話なので、1975年という当時のコンピュータのディスク容量に思いをはせずにはいられなくなるわけだ。で、読んでいると、これはやはり複数バージョンの管理の観点であって、プログラム開発の話ではないことに気付く。そこからオリジナルの保持以外はまったく念頭には無いことがうかがえる。
というところで、RCSがいかにUNIXという思想を反映しているか、ということにもなるのだろう(しかも、どう考えても実装がKISSだ。SCCSだとコミットする都度、レポジトリの該当系列の最新のソースを復元する必要があるわけだし、そこが逆にRCSだとトランク以外の扱いがなんか妙に厄介だったような記憶があるけど忘れた)。プログラムを開発するためのシステムであることが前提なので、一番重要なのは常に最新のコミット(よりもワーキングファイル)だ。
ジェズイットを見習え |
_ AC [上の方の PREの中身と show meスクリプトが違ってて混乱しました。]
_ arton [おっと編集ミスです。ご指摘ありがとうございます。]