トップ 最新 追記

日々の破片

Subscribe with livedoor Reader
著作一覧

2007-01-01

_ なますてー

どうして日本語のあいさつはなますてじゃないんだ? (昨日からこの言葉の響きに取り付かれているのだが、きっとチャドファウラー本のせいもあるだろう)

_ 新年早々にコンピュータを買う

ふんぎりがついたのでDELLの9200Cというのを発注。なぜか当初買おうかどうか迷っていたC521(AMD64)からCore2Duoマシンに変わったのは筐体の高さが10cm低いからだ。やっぱコンピュータは小さくて静かなのが一番だ(速度と容量と信頼性がある程度確保されていれば、というのが最初に来るけど)。

っていうのと多分Vista用パッケージなんだと思うが、今日見つけたお買い得パッケージの2GB+Core2Duo(E6300)+160G HDD+RADEON X1300Pro(256MB)+19"LCD で11万円弱(ただしプレミアアカウント価格——去年さんざん買った後になって勤め先がDELLと契約していて結構な額がディスカウントされることが判明して衝撃を受けたのだが)というのが魅力的だったからというのもある。っていうか、この組み合わせがこう来るのなら玄人志向を買わずにこっちをVistaテストマシンにしてE521をサーバーに回せば良かったが、あきらめる。上の逃したディスカウントを合わせると去年はコンピュータ関係で相当無駄な出費をしたことになる。今年は子供にMacBookを買う以外にはこれ以上の出費はしない予定(自分用のMacBookについては保留)。

しかし振り返ってみれば、去年のコンピュータ関係の出費で一番一件あたりの額が大きかったのはやはりMSDNだな。

_ 三本の矢

脱YAおめ。


2007-01-02

_ TBスパム

ふと気付くとnewsと書いただけのトラックバックスパムがそこら中に埋め込まれているではないか。

ツッコミスパムと違ってRSS配信対象にしてないから気付かなかった。

(最新や月単位のを見ている限りは目に止まらないってのもあるかも)

消す方法はおいおい考えるとして、なぜツッコミスパムと違って弾けてないのか疑問に思って、しばらくtb.rbから追いかける→tdiary.rb。

結局、comment_filterメソッドに入るからtdiary/filter/*.rbのcomment_filterメソッドが呼ばれることを確認する。ってことは、ツッコミスパムと同じ方法で弾いてるはずだ。そこで5文字以内の本文は捨ててるんだが、news4文字のが山ほど入っているから不思議だ。

で、もういちどtdiary.rbに戻るとbodyは[url, blog_name, title, excerpt].join("\n")なのか。それじゃ長さチェックを擦り抜けるのも当然だ。

でしばし考えた末、^news$にだけ対処することにする。

後は、nameがTrackBackだったら最初の行をチェックするとかかなぁ。

_ プロパガンダ

ロスロボスかぁとか思いながら、iTunesでとりあえず聴いてみるかとかを経由してなぜかプロパガンダ、プロパガンダと呼ぶ声がしてきた。

で、アモンティリャードの酒樽から機械仕掛けの神の谷が出てきて、気に入ってしまう。

iTunes Store - Propaganda - Valley of the Machine Gods - EP - Valley of the Machine Gods - EP.

が、これはおれが求めているプロパガンダなのか? という疑問も湧いてくる。ドイツ表現派とポウは近くても他人だし。

Secret Wish(Propaganda)

とは言え、いまさらこれはなかろうというわけで、機械仕掛けの神の谷を購入。


2007-01-03

_ SQL Server 2005(Express)

なんて便利なんだろうなぁ、とか思いながらApp_Dataの下にFoo.mdfとか作って悦に入っているわけなんだが(でも、サーバーエクスプローラから直接接続したり作成したりできないのはなんでだろうか? とちょっと不思議なのだ。というか、それで3日以上を費やしたりして。Windowsユーザーのパスワードの有無とか、TCP接続にしてファイアウォールを疑ったり、名前付きパイプにして見張ってみたり、いろいろな組み合わせ。でも考え付くあたりはすべて玉砕。でも職場では普通につながってたんだけど(SQL認証を使っているからかも、でもExpressでSQL認証を使うのっていまいち良くわからんとか、どっちにしてもSQL認証字体がObsoleteっぽいから避けたいとか。それよりも職場のはSQL Server 2005そのものだからなのかも。でもExpress Editionも「そのもの」のはずだが……と思ったけどもしかしたら接続はできない制限なのかな? と一瞬疑ったが、でもPortがListen状態になるのは確認してるしなぁ。追記:リモート接続の設定方法、合ってるようだが、FAQの残りも読む必要がありそうなのでURLをメモ)、ふと気付いた。

DebianにMono入れてMonoのASP.NETを試してみようとした瞬間だ。

つまりだめじゃん。いや、SqlClient使っている時点で当然だめなんだけど、あまりにも簡単に手元にデータベースが作れるから(Rails+MySQLより楽勝だ)、そういったことをまったく意識してなかった。

(このあたりに次のブリッジ開発意欲がむらむらしてくるのだが、今はそれどころではないのであった)

#マシンさえ高速なら10分でブックマークが作れる。でも、マシンが低速だとVS2005を起動してプロジェクトを作ってApp_Dataにデータベースを作るだけで気分的には10分が過ぎてしまうだろうな。

_ ビーバー君

えーと、おれにはリスに見えるんだが。しかも蛍の光なんだが。

_ 中国では豚年

アニメ自体はロシア(USSR時代か?)製だ。

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

_ 米田 [ 米田です。 もしかするとIKVM.NET経由で、JDBC接続が回避策に使えるかもしれません。 http://blo..]

_ arton [情報ありがとうございます。 次に手が空いたときに試してみます。確かにJDBC経由ならJDBCがシステム非依存なのでで..]


2007-01-04

_ 樅の木

シベリウスが亡くなってから50年が経とうとしている。

以前書いたこの部分の感想

シベリウスピアノアルバム 全音ピアノライブラリー(シベリウス/舘野 泉)

LilyPondについての雑感:

さすがにペダルの部分をmidi化はしてくれないのか。後、最後の部分は音が相当抜けているように聴こえる。あと、これだけでも結構、書き間違えた。

・\\keyを指定していても音符自体はcisのように記述する必要があるので入れ忘れる

・付点の書式を忘れていた

・多声の書き方(<<{...} \\\\ {...}>>)を忘れる

・楽想記号の書式

・アクセントやテヌート(-でエスケープ)

・\\clef baseのつけ忘れ

・オクターブ指定の打ち損ないとか

・ペダル(今回初めて調べた)

冒頭の拍子記号を無視した(1)左右にまたがる分散和音(2)の書き方がわからない。

_ いや、1000人くらいはいるはず

mumurikさんが強烈に悲観的なエントリーを書いている

でも、早急に結論を出すのは早すぎるんじゃないかな。今すぐではなくても必要とする人は間違いなくいる。だから記事がWeb上に、しかも検索可能な場所にあるというのはとても重要なのだ。

たとえば、Kazzzさんが先日ITemplateの記事見つけている

PDC+MSDN(+TechEd)の時間と世の中の時間はへたすりゃ3年くらい流れが異なるのだからしょうがない。

(上流は流れが急だし岩だらけでおまけに細い(でも水は清らかだ)。下流は流れがゆっくりで広い(でも水は結構濁ってたり汚れてたり)とか見てくれも違うけど、そもそも水が流れてくるまで時間もかかる)

UI(インターフェイスのIというよりはインタラクションのI)がからむテストは今後より重要度が増すんじゃないかと思う。というのは、エンタープライズ側のビジネスロジックのテストの有効性を知った人たちがユーザーコンポーネント側にも同様にユニットテストを持ち込むことは(そして今までの手法が単純には適用できないことを知ってとまどうことは)十分にありえるし、Ajaxになるのかもっとリッチなクライアントになるのかはともかく、今後、よりユーザー寄りのコードの重要性が高まることは間違いないようにみえるからだ。2007年以降、まずは上のシステム側の世代交代、そしてユーザビリティの改善に進むというシナリオだ。

とにかくこの本がお勧めということはわかった。

Working Effectively With Legacy Code(Michael Feathers)

#それにしてもPermalinkを見つけにくい(「この記事を引用」がJavaScriptでしかもLive Spacesを強要する)Blogツールだな。

_ フォードの教訓

以下、あまりに粗いので都市伝説的な何かと思ったほうが良いかも知れない。

僕は、フォードの偉大な点を次のように理解している。

・自動車作る

・金持ちしか買えない

・少ししか売れない

・少ししか自動車作らない

・コストもかかり大して儲からない

なら、まずは鶏から変えようとフォードは考えた。

そこで自社の労働者の給料をいきなり跳ね上げた。おまいらは自動車を所有することのうれしさを知ってるよね、ということだ。

・労働者、金いっぱいもらう

・自動車買う

・たくさん売れる

・たくさん作れる

・生産コスト減らせる(大量生産の始まり)

・儲かる

・給料をさらに上げる

・さらに自動車売れる

・たくさん作れる

・生産コストもっと減る

・たっぷり儲かる

今も、春闘とかで主要な企業の回答額が社会的に周知されるのは、このサイクルをまわすためには社会全体で可処分所得を増やしたりする必要があるからだ。

市場開発のための投資先として従業員を選ぶというのはフォードのベルトコンベア以上に画期的な考えだ。

(その意味において、前期の成果だけを勘案して給与を決定するというのはフォード未満な方法論なのではないか)

と、「最低賃金が底上げされても、社会全体が労働者全体に支払える金額が変わらないので税収は変わらんですよ。分配が変わるだけ。」を読んで考えた。

市場が成長しないと前提すれば、分配が変わるだけという結論になる。

フォードの従業員にも、もちろん上がった給料で車を買わずに貯金とかに回したやつもいるだろう。でも、そういう行動を取る人間だけを基準に考えていたら成長しないだろう。でも重要なのは成長を考えることじゃないだろうか? 開発というのはそういうことだ。

だからフォードが偉いのは、自社の製品(と限定する必要なく、自動車という新しい機械)の魅力に賭けたところなのだ。

追記:このフォードは今のフォードという会社のことじゃなくて20世紀の初めに海のものとも山のものともわからない自動車っていう機械に財産賭けたベンチャー野郎のことです。

_ 我慢の限界

何か良い点もあるだろうと我慢して使ってみてきたが、ついに怒り爆発。

IME2003スタンダードを既定のIMEに変更した。(削除するとOffice Updateの時に厄介がおきそうだから、残すだけは残しておいてやる)

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

Before...

_ arton [そうでしょうか? >問題 労働供給が上限より低ければインフレ傾向は高まると思いますが極度に高くなれば社会保障でも賄い..]

_ arn [そういう話ではなく、今労働供給を増やそうとすればインフレ傾向は高まりますが、長い目でフランス型の労働環境を日本型の労..]

_ arton [なるほど。その理屈はわかります。 ただ、意外なほど遊んでいる人が成長のきっかけになるすごいものを発見したり発明したり..]


2007-01-05

_ 成人の日

もしかして8日? 15日? おれが持ってる電話のカレンダーは今年の分から祝日表記が無いんだけど(ちょっと愕然。買い換えろというメッセージなのか?)

追記:メーカーのサイトに行ったらダウンロードできるようになってた。やっぱり8日なのか。でも1週間も早まるってのは不思議だな。

_ 今日の購入

さっそく(というわけではないか)

Working Effectively With Legacy Code(Michael Feathers)

を購入。

というか、ランキングが凄まじいことになってるんだけど(見た時は63位で、購入後の今は60位)、textfile効果なのか?

それから、江川さん達のGWT本。

入門Google Web Toolkit(吉野 雅人/江川 崇/竹端 進)

ただ、今の時点では、Javaで全部やるよりはむしろJavaScriptで全部のほうが良いかも、とか思い始めてる。(Netscapeのサーバーサイドスクリプトへの偉大なる後退)

(追記:今となっては、Ruby、C#、Javaについてはどうとでもできるわけで(VB.NETも含めても良いか)、その中でクライアントサイドスクリプトとの一貫性を求めるのなら、プラスしてJavaScriptという選択肢もオレの中にはあるという意味。サーバーサイドでJavaScriptがはやるというような予言では全然ない)

ASP.NETならJScript.NET、JavaならRhinoがあるわけで。

_ 2度目のチャレンジ

上で書いた本とは別に、USBメモリーも購入。

グリーンハウス USB2.0フラッシュメモリ 2GB GH-UFD2GTB

でも実はドキドキものなのだ。

っていうのは、こないだ安さに釣られて購入した

BUFFALO RUF2-E1G-B USB2.0対応フラッシュメモリ エントリーモデル

で、とても悲しい思いをしたからだ。

特性なし

これについては、それは目的じゃなかったから、あきらめもつくのだが、今度は明確にそれを目的にしている(だってその機能を知ったら試してみたくなるじゃん)ので、外れたら辛い。

_ メモ

Windowsを買わなかった人がPHPを見て、これイイと思ったというのが歴史なのかな?

_ malaに勝つためには

Technologies for UI

おもしろい。すげー、いろいろ来た。

だったら、逆目を張るのがおもしろい。

つまり、#2以外は勝てる(あ、すでにデスクトップは負けという前提なのだ)。

SQL Server Expressをどう使うかだ。

#突然思い出したが、最初間抜けなことにマウスでフィードをランダムにクリックしてたんだよな、とか。読むとき(リラックマ)と作業するとき(デベロッパ)では手の位置が違うのだ。

何しろ、マイクロスレッドを実装してしまうんだからな(と、新語だと思うを思いついたので使ってみたり。Javaではグリーンスレッド)。

っていうか、ExplorerのデベロッパーがmalaだったらWindowsは今の100倍は確実に快適だったろうな(zipフォルダあり状態で)。

#まず自分の仕事に戻ろう。

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

Before...

_ NyaRuRu [>PICO TURBO 2GB それの 4 GB 版使ってますが,ReadyBoost 動いてますよ. http:/..]

_ arton [おお、どうも。そうか、グリーンハウスのUSBメモリでいけるらしいってNyaruruさんのBlogで読んだんですよ(そ..]

_ arton [NyaruruじゃなくてNyaRuRuでしたね。すみません。]


2007-01-06

_ 雨降り

結構強い。


2007-01-07

_ Hotspot

Hotspotを使ってみたくて、OCNの一番安いやつ(ADSL 下り12MbpsでIP電話が使えないやつ)に加入してみた。まだモデムは来てないし工事も何もないが、どうもHotspotだけはすぐにでも使えそうに思える。

でも、雨が降っているからまだ試せない。

_ 湯島の梅

湯島天神の裏から坂を折りきったところの十字路の角にある和菓子屋でおこわを棒状にして昆布の佃煮と大豆を煮たのと梅干を埋め込んで笹で包んだような感じの食い物を買って食ったらうまかった。

桜もちもうまかった。

しかし、花びらもちというのは素甘みたいであまり好みではなかった。

というようなことは昨日(というか5日)に済ませておいて良かったと感じた雨の一日。

_ 肌着も進化するのか

イオンというかジャスコを妻の買い物が終わるまでうろうろしていたら、肌着コーナーにやたらとぴたぴたしたシャツとかが売られているので眺めていたら、いろいろ書いてある。

水分を熱に変化させるとか、いろいろ。

そういうこともあるのかなぁとか思って値段を見ると3000円を超えている。ヘインズのTシャツあたりと比べると何倍にもなる(っていうか3枚1000円ちょっとくらいだったような記憶があるけど)なとか、最近はカンファレンスTシャツで済ませているからシャツの値段なんて知らないのだが安くはないということはわかる。

この強気の価格は本当なんだろうかと強く興味を惹かれる。で、買ってしまった。

水通しとかせずに面倒なんで着てしまったが、確かに温かく感じる。でも、ぴたぴたしてるからかも知れない。もっとも、その効果を得るためにはぴたぴたしてる必要があるんだろうとは想像が付くからしょうがない気もする。

というか、化繊のぴたぴたの肌着を着るというのは考えてみると相当に気持ちが悪いのだが、さすがに最近の化繊は肌が痒くなったりはしないようだ(装着後8時間は経過しているはず)。というか、そのあたりは保湿効果によるものなんだろう。毛の細さがそういう効果も持つはずだというかそっちを主眼に開発したら結果的に熱がどうこうという効果も得られたんだったりして。(追記:そうでもなさそうだ)

トレンドどころか当たり前なのか。

この分野では圧倒的にレイトマジョリティなポジションにいるのだなと思ったのであった。

追記:いろいろ調べてたらこれは嘘だろうなものまであるんだな。

_ Vistaすげー

これまでで一番のユーザーエクスペリエンス。

Windows Updateの自動更新じゃないところに、「NVIDIA driver update for NVIDIA GeForce 7600 GS」というのがおいてあったので、別に再起動してもかまわないのでクリックした。

するとだらだらダウンロードしたあげく、画面がブラックアウトして、なんか640×480くらいで表示されて、またしばらく画面がブラックアウトして、元に戻ったと思ったら更新が完了していた。

(生きているウィンドウがみな、シュリンクされてしまったのには閉口したが、その程度だ)

これはちょっと驚いた。

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

_ ムムリク [ユニクロのヒートテックを数年使っています。格段に温かいかというとそうでもないが、さりとて普通の綿のものよりはいいかな..]

_ arton [そっかぁ、数年も前からあるものなんですね。]


2007-01-08

_ Exerb 4.1.0 リリース

Exerb Project

ASR 1.8.5.6もどうぞ。

#次は、1.9の更新でYARV-Exerbということになるんだろうなぁ。(来月あたり)

#DAの言ってることも考えてみる。

_ 継続する力がバベルの塔を産む

1994年頃、つまり僕が本格的にコンポーネントの開発をする必要が出た頃ですら、すでに巨大極まりないものだった。

確かにMFCを使えばそこそこのOCXが作れるわけだが、それはIDispatch以外のVTblを使えないから、VBからはペタポトできてもC++からはえらく使いにくいものだった。

そこで、COMの永遠のベータ仕様書を読み、TechNoteに隅々まで目を通してMFCのIUnknwonをMap(ユーザー定義関数ポインタテーブル用マクロ)へマッピングする方法を調べて、そしてデュアルインターフェイスを作り、するとVB4が単なるコンポーネントについてはデュアルインターフェイスを見つけるもののOCXについてはインターフェイスが見つからない状態になることがわかり、しょうがないのでODLにDispInterfaceも実装しQueryInterfaceをオーバーライドして振り分けを実装し、するとIPropertyBagの取り方に問題が出てきて……というようなことが必要だった。

回り道だ。

というようなことを思い出すASP.NETのなんでもありあり(しかしこちらを立てるとあちらは立たない)アプローチ。ポストバックするのか、Transferするのか、クライアントコールバックするのか、Redirectで十分なのか、5種類あるクライアントサイド状態管理のどれを使うのか、それとも3種類あるサーバーサイド状態管理のどれを使うのか(これは明確に役割が分かれているから良いのか。とすると4種類あるセッション状態管理のどれを使うのかあたりにしておくか)、全部知らなければ確実に痛い思いをする可能性はあり、かつ何も知らなくてもそれなりにできる。ASP.NET1.0を知らない人間がASP.NET2.0をはたして正しく使えるのか?

別に正しく使う必要はないのだとすれば、そしてそのアプローチはコスト的にはそれなりに正当ではあるのだが、するとASP.NETが持つたくさんの機能はいったいなんのためなんだろうか? もちろん、MSのASP.NET開発チームのためなのだろう。でも、回り回ってオレのためとも言える。

どうしようかなぁ。

_ ASP.NETの基礎を学ぶ

ASP.NETの基礎 データ連結式編

あらためて読むとすごくおもしろい。というか、ASP.NETに対する知識と必要性が最初読んだときと今ではえらく異なるからな。

.NETが、COMよりも格段におもしろいのは、それがVMだからでもクラスライブラリが完備しつつあるからでもないんじゃないかという気がしてくる。というか、そういうことは実用的ではあってもおもしろい理由ではない。

COMは結局はVTblだし、つまりはC++だ。そして、C++は実行時に参照できるものはほとんどない。多分。

_ 続き(そんなことはC++)

// test.cpp
#include <fstream>
int main(int argc, char* argv[])
{
    std::ofstream o;
    o.open("temp.cpp");
    o << "#include <iostream>\n";
    o << "int main(int argc, char* argv[]) {\n";
    for (int i = 1; i < argc; i++)
    {
        o << argv[i] << '\n';
    }
    o << "}\n";
    o.close();
    std::string s("cl ");
    s += "temp.cpp";
    system(s.c_str());
    return system(".\\temp.exe");
}
実行する。
C:\temp\cpl>test "return 3 + 4 * 12;"
Microsoft(R) 32-bit C/C++ Optimizing Compiler Version 14.00.50727.762 for 80x86
Copyright (C) Microsoft Corporation.  All rights reserved.
 
temp.cpp
 (……すごくたくさんのアンワインドセマンティクスに関する警告……)
/out:temp.exe
temp.obj
 
C:\temp\cpl>echo %ERRORLEVEL%
51
 
C:\temp\cpl>
当然の結果だ。
くらいのことは普通にできるわけだし、ここで作成するものがDLLなら動的に読み込んで参照することもできるのだが、そんなに利用されているという話は聞かない。
まあ、MSの世界だとついこないだまでコンパイラがすべてのPCにインストールされてたわけじゃないから、どうしようもないわけだが。でも、今はExpress版もあるわけだし。

_ 続き

というわけで、別に普通にできることなのに、なぜC++では実行時にコンパイルしないでこれまで来たのか、そしてなぜ、ここ最近になってASP.NETとかは実行時にコンパイルするようになったのか?

CLRが仮想マシンだということはこのさい全然関係ない。

なんなら、上のC++プログラムをバーチャルPCの上で実行したって良いわけだし。仮想マシンでAPIが完全無欠なWin32API。

_ ひとつあるいはふたつ考え付く

ヘッダファイルの参照の仕組みとプリプロセッサ。とはいっても実行時コンパイルしてすぐ実行というのに、この2つが制約になるこたないだろう。

速度かな?

でも、JSPのおそーいおそーい初回実行について知っていれば、あるいは最近のマシンは結構早いのに助けられてるからだろうけど、ASP.NETの遅い初回実行を知っていれば、そういうものか、で済ませられる程度の話だ。

必要ならば、最初に一発ダミーの要求を打ってやるというような手段もある。

_ コードを生成するC++

上の例(test.cpp)は、動的コード(ここでは引数で指定するコード)に対して別段マクロは提供していないが(iostreamの参照だけを認めている)、便利なマクロを吐き出すソースコード上に定義することは可能だ。

その場合、動的コードはC++とは異なる書き方ができる。

LISP最強伝説にマクロという言葉が頻出するのはそういうことだ。

_ それにしてもC++は面倒くさい

だって、不等号がたくさん出てくるから、tDiaryを普通に使っているとやたらと実体参照が必要になって面倒なんだもん。

_ 実行時コンパイル

ASP.NETの本質は実行時コンパイルにある。

もちろん、ふつうはテストをするからそれで構わないのだ。

でも、ってことは、すでに静的なコンパイルがあるから動的でアジャイルな言語(Rubyとか)ではなく、.NETを選びますとか、Java(JSP式言語について、どう処理されるか想像すれば良い)を選びますとか言えるのだろうか?

もちろん、言えない。恥知らずか無知でない限り。

それでも、Javaの場合にはまだビジネスオブジェクトとUIの切り離しがスタンダードだから、式言語程度でしか利用しないのなら知らなかったふりはできるだろう。

でも、ASP.NETの場合、App_Codeはあるけれど、コードビハインドのPage派生クラスにロジックを埋めることは多いんじゃないかな? (どうなんだろうね)

IISとの連動とかは、十二分に理由になるとは思うけど、つまりはプログラミング環境は選択の理由には、ほとんどならない。

_ テスト

つまり、テストは重要で、しかももっとも脆いのはUIの部分だ。

ここで、ASP.NETの場合、ユーザー定義サーバーコントロールがDIベースだというのが意味を持つ。

DIといえばテスト。

で、aspx無しの開発

と、mumurikさんのブログを巡る旅の1つのコースが閉じる。

_ JFCとTagLib

こいつらのテストってどうやるんだ?

というか、以前TagLib書いたとき何かやったような記憶があるが、作ったのは山ほどあるうちの2クラスだけだから全然覚えてないな。

というか、TagLibって良く考えなくてもうまい仕組みだったような気がしてきたぞ。

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

_ mumurik [そのうちControlBuilderとReadマクロを比較して普通のJavaユーザーの上を行く話を書こうと思いつつ最..]


2007-01-09

_ Base64クラス

copy java\util\prefs\Base64.java Base64.java
してからパッケージ名変えるというんじゃだめなのかなぁ。 というか、Base64がオフィシャルに無いということはどういうことかと言うと、
  • java.util.prefs.Base64.java
  • com.sun.org.apache.xml.internal.security.utils.Base64.java
  • com.sun.org.apache.xerces.internal.impl.dv.util.Base64.java
と車輪がいっぱいあるということになる。そりゃ必要だもんな。

なんだかなー感が漂うね。

僕はルックアップテーブルを使ったprefsの実装が好きかな。

RFC2045準拠度だと多分、security.utilsが固そうな気がする(xercesの実装を元にしたOptimized codeだとコメントしてるし)。

ちなみにprefsのはジョシュアブロックの実装と@authorに書いてある。

ジョシュアブロックといえば
Java Puzzlers 罠、落とし穴、コーナーケース(ジョシュア・ブロック/ニール・ガフター/柴田 芳樹)
こういうのも書いているしJavaOneでもやってるみたいだけど、僕が読んだのは幾つかのソースコードと、
Effective Java(TM) Programming Language Guide (Java Series)(Joshua Bloch)
これ。

Effective Javaな人はルックアップテーブルを使うのであった。

_ ルックアップテーブル

16進化文字列"08Ab5"を10進数に変換することを考えてみる。 ひとつは、文字コードに着目する方法。たとえば
int result = 0;
for (char ch : "08Ab5") {
    result *= 16;
    if (Character.isDigit(ch)) {
        result += ch - '0';
    } else if (Character.isLowerCase(ch)) {
        result += ch - 'a' + 10;
    } else if (Character.isUpperCase(ch)) {
        result += ch - 'A' + 10;
    } else {
        throw new IllegalArgumentException("bad character: " + ch + " in given string");
    }
}
return result;
多分、最適化すると
int result = 0;
for (char ch : "08Ab5") {
    result *= 16;
    if (ch >= '0' && ch <= '9') {
        result += ch - '0';
    } else if (ch >= 'A' && ch <= 'F') {
        result += ch - 'A' + 10;
    } else if (ch >= 'a' && ch <= 'f') {
        result += ch - 'a' + 10;
    } else {
        throw new IllegalArgumentException("bad character: " + ch + " in given string");
    }
}
となる。
ルックアップテーブルを使う方法はまったく異なる。
static final int[] lookuptable = { 
    -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
    -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
    -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
     0,  1,  2,  3,  4,  5,  6,  7,  8,  9, -1, -1, -1, -1, -1, -1,
    -1, 10, 11, 12, 13, 14, 15, 16, -1, -1, -1, -1, -1, -1, -1, -1,
    -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
    -1, 10, 11, 12, 13, 14, 15, 16, -1, -1, -1, -1, -1, -1, -1, -1, 
};
 
int result = 0;
for (char ch : "08Ab5") {
    result *= 16;
    if (lookuptable[ch] < 0) { // maybe thrown IndexOutOfBoundsException
        throw new IllegalArgumentException("bad character: " + ch + " in given string");
    }
    result += lookuptable[ch];
}
となる。

ルックアップテーブルを参照する方法はロジックがコードからテーブルに移動するため、一般的にはメンテナンスがしやすく、しかも高速になりえる(ルックアップテーブルってドメインモデルみたいだな)。

追記:文字列に拡張forは適用できないのか。残念。

上のforは、for (int i = 0; i < "08Ab5".length(); i++) { char ch = "08Ab5".charAt(i); と書いたものとしておこう。

さらに追記:leajistさんのツッコミが正しいですね、この場合。for (char ch : "08Ab5".toCharArray()) { ということで。

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

Before...

_ なひ [他のcommonsとセットで、common-codec。]

_ leajist [for (char ch : "08Ab5".toCharArray()) { でいけますよ〜]

_ arton [そのてがあったか。]


2007-01-10

_ Wiki小話

jshはかっこいい

QTは使える

QTは、embedタグで貼るんだけど、JavaScriptから、play、stopは当然として、秒数(だと思う)の取得、再生する秒数の設定(そこから再生始まる)、再生速度の設定とか自由自在なので音声再生には具合が良いらしい。で、Jsh使って、MP3でスクラッチ(死語かな?)みたいなのをやってみせたりして、とても刺激的だった。

FlashProxy: FlashからJavaScriptを呼ぶのはわりとどうにかなる(そうかなぁとかちょっと思い出してみたり)。でもJavaScriptからFlash呼ぶのはめんどう。イベントを取れないとか、あともう一点。そこでFlashProxy(AdobeのFlashProxyのこととは違う)。Flash側は汎用にして(JavaScript用拡張ライブラリということだろう)、FlashProxy経由でJavaScriptで呼び出すようにすれば可能性たくさん。たとえばマイクデモでは、息を吹きかけるとブラウザーがスクロールする。

Podcastle

空耳アワー

アテレコってのは、口をぱくぱくしている映像に音を当てることだが、そうではなく声が流れているところにまったく異なる文字を当てるということも逆にあっても良いだろうな、とかちょっと違うことを考えてみたり。

_ Hotspot

マスターIDじゃだめなのか。

というのはともかく、ちょうど良いタイミングのような気がする。


2007-01-11


2007-01-12

_ デュアルディスプレイ

Miroとかあったなぁとか思い出したが、Quadro FX540ってクローン出力しかできないのか?

_ MSDN Officeのライセンス

どうも勘違いしていたのではないか、と気づいた。

Officeについては、デスクトップとラップトップの2台にインストールできるわけだが、これは限定的なものだと思っていたが、よく考えてみたらそれはおかしいのではないか。

この2台というのは、プロダクトモードで利用するためのライセンスがOfficeについては与えられていて、それが通常のパッケージ版と同じく2台(というのは不正確で運用的な母艦とモバイル用)ということなのじゃないだろうか。

っていうのは、そうじゃなければOfficeを使った開発なんてできないからだ。(というか、開発マシンにはインストールできないと思ってたからインストールしてないわけだし)。

と、InfoPathをいじってみたいなと考えていて気づいた。

_ Javaでパスワード入力

まじめにパスワード入力を扱う場合って、入力されたStringの内容をクリアしておく必要があると思うんだけど、というのは、後からヒープの中を見ることができるからだけど、kmem覗くって方法もあるわけだし、でも、Stringって明示的な破壊はできないはず。

と思って調べたらJPasswordFieldを使えば良いのか。というか、JPasswordField専用のJOptionPaneは無いのか。厄介だな。

_ Javaでパスワード入力

とりあえず、こんなんで良いみたいだな。
        JOptionPane pane = new JOptionPane("パスワード", JOptionPane.QUESTION_MESSAGE);
        JPasswordField pass = new JPasswordField(32);
        pane.setOptions(new Object[] { pass, "OK" });
        JDialog dialog = pane.createDialog(this, "パスワード入力");
        dialog.setVisible(true);
        if ("OK".equals(pane.getValue())) {
            char[] pwd = pass.getPassword();
            if (pwd.length > 0) {
                // パスワード処理
                Arrays.fill(pwd, Character.MIN_VALUE);
            }
        }

_ こういうこともある

JDKのバグと思われる現象の再現コード

で、「思われる」が取れて、無事(なのか?)バグ登録されたようです(コメント欄参照)。

で、注目すべき点は、きしださんが再現コードを作ったことと、水島さんがコマンドライン用にさらに手を入れたこと(実際にはきしださんも作っていたようだけど。コメント欄参照)。プログラムってのは素晴らしいな。

(で、再現することを確認してみたりして)


2007-01-13

_ Solaris10

DELL 9200CにVistaを入れてパフォーマンスを見てみる。

すると、ATI X1300Proってのは少なくてもNvidia7600GSよりパフォーマンスは悪いみたいだ。

というわけで心置きなくサーバー用に潰すことにする。

そこでいろいろ考えた末、Solaris10にしようと思ってブータブルDVDとか作ったのだが、うう、ディスクを認識しない。

でも何かやり方が悪いだけかも、と考えて、SunのサイトからDevice Chckerをダウンロードする。が、サポートしていないOSとか言われる。ああああああ、Vistaだからか。

で、しょうがないので、XPに戻すというのもあほくさいので、Debianと思ったらx64は次期からなのか。それでTestingのNetinstを始めたり。でもドキュメントを読むとSATAで問題ありとか書いてある。でも対処法も出てるのでOKと思って進めるとやっぱりCDを認識しない。

書いてあることを順に試してもだめ。USB接続のCDならどうかと思うと、そもそもブートしない。で、BIOS設定に入ってみる。と、ATAとAHCIのどちらかという設定に気付いた。設定はAHCIになっている。ATAじゃないからだめだったのか。で、ATAに変更してリブート。でもやっぱり認識しないな。認識しないといったって、ブート時はちゃんと動作しているわけだし、メッセージ上も認識しているようなのだが。

で、ちょっと戻ってSolarisを入れてみると今度はすんなりと入っていく。ATAに変えたのがこっちではきいているようだ。途中USBマウスでいろいろあったが、特殊なKVM切り替え器のせいかな、と直接予備のマウスを差したら先へ進めたり。

でもふと気付くとx64をインストールしたいのにx86になっているのだが。EM64Tはだめなのかな? でもそりゃないだろう。なんで選択できないんだ? というところまで。

#今気付いたが、LilyPondのSolarisバイナリは無いようだ。しかも、ソースからのコンパイルはお勧めしないとか書いてあるし。ちょっと仕切り直そうかな。

#追記:さらにチップセット内蔵NICを認識してないことがわかって困る。ubuntuの6.10で9200Cが動いている情報を見つけたのでそっちを検討してみる。

#ubuntuはすんなり入り、完全無欠(しかしどうも自由の2文字が欠けているように感じるのはなぜだろうか)に見える。が、emacsが無いじゃん。aptitudeでemacs21を入れる。が、skkが入ってない。困る。と思って調べたらるいもさんが書いているページを再発見。

_ RHG

今から出発。

#無事到着。人数少ないな(寒いからかも)。

_ ubuntu

これすごいな。ただあまりに画面がきれいにまとまり過ぎているので自由度が低く感じるのかも知れない(プロプラっぽ過ぎる印象を受けているみたいだ)。比較的新し目のマシンなのにデバイスの自動認識が完全なのは驚くべきだ(まるでWindowsみたいだ。でももう面倒くさいからそのほうが望ましいわけだが)。

今のところ難点は、スリープから画面の復帰ができないこと(最終的には連続稼動になるので問題じゃない)。ウィンドウの再描画がものすごく遅いこと(多分、nVIDIAだと速いんじゃないかな? ATIの新し目なGPUなのが問題なんだろうとは思う。Firefoxをドラッグしたりすると紙芝居が始まるので悲しくなるわけだが)。ただ、これも最終的にはWindowsからXで入ることになるから、まあいいや。むしろ、このままDesktop版で走るか、Server版に入れ替えるかが悩みどころのような。

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

Before...

_ arton [うわ、試しにヘッドフォンつなげたら、すげーいい音がするよ(ICHの能力かな?)。サーバーにするのもったいない感じだ。]

_ arton [ATIだとは認識してるけど、X1300は不明なんでVESAが利用されていた。遅いはずだよ、VESAで1600×120..]

_ 桑島 [たぶんIntel HighDefinition Audio(snd_hda_intel)とかいうやつだと思います。 ..]


2007-01-14

_ JavaScriptのおもしろさ

前回の続き。(少しずつ足してく)
  1. 表示内容を答えよ。
    function false_check(x) {
        if (x) {
            alert('true');
        } else {
            alert('false');
        }
    }
     
    false_check(false);
    false_check(0);
    false_check(Number(0));
    false_check(new Number(0));
    var x;
    false_check(x);
    false_check(Boolean(false));
    false_check(new Boolean(false));
    false_check(Boolean(new Boolean(false)));
    
  2. 表示内容を答えよ。(先にタネ明かしをしておくと、IEで動かしても何がポイントかさっぱりわからないと思います)
    function substr(s) {
        try {
            alert(s.substring(0, 2));
        } catch (e) {
            alert(e);
        }
    }
    StringX = function(x) { this.value = x; }
    StringX.prototype = "abcdef";
    StringY = function(x) { this.value = x; }
    StringY.prototype = new String("abcdef");
    var x = new StringX("abcdef");
    var y = new StringY("abcdef");
    substr(x);
    substr(y);
    
  3. 表示内容を答えよ
    alert('abc');
    alert(new String('abc'));
    alert('abc'[0]);
    alert(new String('abc')[0]);
    
    (追加:IE7とFirefoxでは表示が異なる。どちらがECMAScriptの仕様に合致するか答えよ)
  4. 表示内容を答えよ
    var x = [1,2,3,4,5]
    var y = x.concat([6]);
    x[0] = 8;
    alert(y);
    x = [1,2,3,4,5]
    y = x.reverse();
    x[0] = 8;
    alert(y);
    x = [1,2,3,4,5]
    y = x.push(6);
    alert(y);
    
  5. 表示されるものを答えよ
    function eval_result(x) {
        try {
            alert(eval(x));
        } catch (e) {
            alert(e);
        }
    }
    eval_result('a');
    eval_result("32 +");
    eval_result(32);
    eval_result(1, 3);
    eval_result(["e", "v", "a", "l"]);
    var s = "eval_result(s)";
    eval_result(s);
    var x = "eval_result(x)";
    eval_result(x);
    eval_result("eval_result(1)");
    
  6. (? 想定外の動作になるので、後でECMAScriptの仕様を確認するかも:追記:「想定外」というのは、『入門JavaScript』の記述から想定した動作と違うという意味です。で、これについては記述が誤っているので、以下の動作はブラウザーの動作で正しいです。どっちにしてもブラウザーの動作は最初の基準になるわけだけど)
    Test = function(x) { this.value = x; }
    Test.prototype.get = function() { return this.value; }
    XTest = function(y) { Test(y); }
    XTest.prototype = new Test(0);
    var x = new XTest(3);
    alert(x.get());
    Test.prototype.sub = function(x) { return this.value - x; }
    alert(x.sub(30));
    Test2 = function(x) { this.value = x; }
    Test2.prototype.get = function() { return this.value; }
    XTest2 = function(y) { Test2(y); }
    XTest2.prototype = Test2.prototype;
    var x = new XTest2(3);
    alert(x.get());
    Test2.prototype.sub = function(x) { return this.value - x; }
    alert(x.sub(30));
    
  7. 上との比較(これは想定内)
    Test = function(x) { this.value = x; }
    Test.prototype.get = function() { return this.value; }
    XTest = function(y) { this.value = y; }
    XTest.prototype = new Test(0);
    var x = new XTest(3);
    alert(x.get());
    Test.prototype.sub = function(x) { return this.value - x; }
    alert(x.sub(30));
    Test2 = function(x) { this.value = x; }
    Test2.prototype.get = function() { return this.value; }
    XTest2 = function(y) { this.value = y; }
    XTest2.prototype = Test2.prototype;
    var x = new XTest2(3);
    alert(x.get());
    Test2.prototype.sub = function(x) { return this.value - x; }
    alert(x.sub(30));
    
  8. 継承したprototypeの場合(上との比較。これも想定内)
    Test = function(x) { this.value = x; }
    Test.prototype.get = function() { return this.value; }
    XTest = function(y) { this.value = y; }
    XTest.prototype = new Test(0);
    var x = new XTest(3);
    alert(x.get());
    XTest.prototype.sub = function(x) { return this.value - x; }
    alert(x.sub(30));
    var x = new Test(3);
    alert(x.sub(30));
    Test2 = function(x) { this.value = x; }
    Test2.prototype.get = function() { return this.value; }
    XTest2 = function(y) { this.value = y; }
    XTest2.prototype = Test2.prototype;
    var x = new XTest2(3);
    alert(x.get());
    XTest2.prototype.sub = function(x) { return this.value - x; }
    alert(x.sub(30));
    var x = new Test2(3);
    alert(x.sub(30));
    
  9. 関数の作成方法
    var add = new Function('a', 'b', 'return a + b;');
    alert(add(5,6));
    var mul = new Function('a,b', 'return a * b;');
    alert(mul(5,6));
    var div = Function('a', 'b', 'return a / b;');
    alert(div(10,2));
    
  10. 表示される内容は?
    var func = function(x) { 
      if (x == 0) { return 1; }
      return x * arguments.callee.call(null, x - 1);
    }
    alert(func.apply(null, [5]));
    

_ JavaScriptを試すためのリソース

    JScript
  • MAS(JScriptコンソールなど)
  • 注意:ErrorオブジェクトのtoStringメソッドの実装があまりにもエンドユーザー志向なので、プログラマはMozilla系のJavaScript実装を利用するほうが良いと思う
    仕様、教科書など
  • JavaScript Language Resources
  • 入門 JavaScript (My UNIX Series)(久野 靖)
    • 入門JavaScript(アスキーのページ:正誤表がない)
      • 勝手に正誤表
      • P.53 表2-5 Math.LOG10EとMath.LOG2Eの説明が正しくない(eが底となる間違ってました(shinhさんの指摘)。10Eと2Eだから、それぞれ10と2が底)
      • P.53 表2-5 演習率→円周率
      • P.65 コンストラクタ内でのコンストラクタ呼び出しは(少なくても現在のFirefoxおよびIEでは)正しく動作しない。したがって自前でプロパティの初期設定が必要と思われる。上のエントリーの設問6参照
      • 追記:良く読み返したら図3-6の表示から、明らかに(この時点で)久野さんは間違えている。add(3)した結果のvalueが3となっているということは、prototypeに設定したnew Counter(0)のvalueプロパティの0が有効になっているということだ。したがってP.65最後の2行は正しくない。コンストラクタExCounter()で、Counter()を関数として呼んでは「ならない」。
      • P.86 正規表現オブジェクトの名前はRegExp

_ わからんなぁ

で、結局次の動作がどうあるべきかはわからない。
Test = function(x) { this.value = x; }
XTest = function(x) { Test(x); }
XTest.prototype = new Test(0);
var x = new XTest(10);
alert(x.value);

想定できる動作は、

  1. new でObjectのインスタンスを作りそれをthisとして
  2. XTest() を呼び
  3. その中でTest()を呼ぶ(thisは、1で作ったオブジェクト)
  4. その後に、XTestのprototypeの既存プロパティをthisに設定(valueプロパティは上書き)
なのだが、本当にそうなのかな? (追記:もちろん間違っています。どこが間違っているか考えてみましょう。本来どう動くかを考えれば良いということです)

Test = function(x) { this.value = x; alert('Test():' + this.value); }
XTest = function(x) { 
  for (var p in this) {
    alert(p + "=" + this[p]);
  }
  Test(x); 
  for (var p in this) {
    alert(p + "=" + this[p]);
  }
}
XTest.prototype = new Test(0);
var x = new XTest(10);
alert(x.value);
for (var p in x) {
  alert(p + '=' + x[p]);
}

実際に動かすと、thisが同一と仮定すると

  1. new でObjectのインスタンスを作りそれをthisとして
  2. XTest() を呼び
  3. XTestのprototypeの既存プロパティをthisに設定して
  4. その中で新たに作ったインスタンスをthisとしてTest()を呼び返ってきたところでそれを廃棄
と動いているように見える。(追記:これも間違い。4.は、グローバル関数のTestを呼んでいるため、Testの中のthisはグローバルオブジェクト(ブラウザーならwindow)になる。したがって「廃棄」もなにもない。malaさんのツッコミ参照

これはどうだ?
Test = function(x) { this.value = x; }
var test = new Test(10);
XTest = function(x) { Test(x); }
XTest.prototype = test;
var xtest = new XTest(11);
var xtest2 = new XTest(12);
alert(test.value);
alert(xtest.value);
alert(xtest2.value);
test.value = 38;
alert(test.value);
alert(xtest.value);
alert(xtest2.value);
xtest.value = 40;
alert(test.value);
alert(xtest.value);
alert(xtest2.value);

む、コンストラクタのスコープで代入しないとプロパティが作られないということのようだ(というか実行コンテキストのthisが別のものになる)。(ECMAScriptのnew expressionの仕様(11.2.2)ではこの部分の詳細な動作は規定されていないように見えるけど、違うところを読んでいるかも——追記:規定されるもなにも定義した通りに動作しているだけ)

結論:オブジェクトによって異なるプロパティ値が必要な場合、コンストラクタから呼び出したコンストラクタ内で定義したプロパティはコンストラクタ内で上書きしなければならない。もしプロパティの初期化処理を共通化したいなら、こうすりゃいいかな。

function setValue(o, v) {
  o.value = v;
}
Test = function(x) { setValue(this, x); }
XTest = function(x) { setValue(this, x); }
XTest.prototype = new Test(0);
var x = new XTest(10);
alert(x.value);

別の言い方をすると、クラス変数に相当するものは、prototypeとして利用するオブジェクトのプロパティを利用すれば良い。と書いたけどそれだけでは間違い。自分をthisとして代入するとその時点で新たなプロパティが作られるので、書き換え可能なクラス変数とはならない(読み込み専用となる)。あくまでもprototypeののプロパティを利用する。

function ctr_in_ctr5() {
  Test = function(x) { this.classvar = x; }
  XTest = function() { ; }
  XTest.prototype = new Test(30);
  XTest.prototype.cvarset = function(x) { XTest.prototype.classvar = x; }
  XTest.prototype.cvarget = function() { return XTest.prototype.classvar; }
  var x = new XTest();
  alert(x.cvarget());
  var y = new XTest();
  alert(y.cvarget());
  x.cvarset(31);
  alert(x.cvarget());
  alert(y.cvarget());
}
本日のツッコミ(全2件) [ツッコミを入れる]

_ mala [> 3. その中でTest()を呼ぶ(thisは、1で作ったオブジェクト) この3が間違ってます。 XTest(10..]

_ arton [ああ、なるほど。ありがとうございます。 TextもXTestもグローバルオブジェクトの中で定義されているから、明示的..]


2007-01-15

_ ubuntu続き

遅い遅いと思ったらvesaになってた。(コメントはATIと出てるのでてっきりATIのドライバが利用されてると思った)

で、xorg.confでvesaからatiへ書き換え。

すると、Xが起動できない。ログを読むと、こんなチップは知らないと出ている。むむ。

でも、ふと気づいたがrestrictedなドライバーを落としてたはずだ。で、選択肢を見るとfglrxというのが確かにある。で、そっちに書き換え。

お、使える。というか、普通にウィンドウが移動できる。

めでたし(実際にはdpkg-reconfigure xserver-xorgしているわけだが、なぜか勝手にkbdをusの105にしてしまう。そういえば最初のインストール時にはusと勝手になっていたので手動で修正したのだが、指がASCII配列を覚えているとは言え、使いにくいので手で修正。HWはREALFORCE USBタイプ)。

で、音を聴くためにいろいろやってたらFlashが無いことに気づく。なぜだ? で、x64で動いていることを知り。というか、x64用のFlash playerってないのかな?

12/10の時点では無いらしい

_ 衝動買い

恐怖の兜 (新・世界の神話)(ヴィクトル ペレーヴィン/Victor Pelevin/中村 唯史)

向井さんの感想がものすごく読んでみたい感をそそりたたせまくりなので、購入。そういや、最近、小説は読んでないな。

#と思ったが、子供が読んでた18年後に来るはずのシモネッタという人形が不思議な巡りあわせで今年手に入るというサンタクロース話をこないだ読んだ。


2007-01-16

_ 今日思ったこと

配列はわかるがListがわからないと言われて、Listを教える。C#の話だ。

何がわからないのかと聞くと<>が一番わからないらしい。

っていうか、もうCを最初に教えるのはやめれ、と思った。せめてC++にしといてくれ。

と、考えると、C++のSTLは最初に覚えるには規模がでか過ぎる。C#かせめてJavaくらい(LinkedListの分だけ多いような気がする。もっとも<>の中に書けるタイプの数はC#のほうが倍以上ありそうではあるが、プリミティブだけで)が良さそうだな。

どうも、最初に教えとくべきものほど後から実装されているんじゃなかろうか。そりゃ、知恵は後からついて回るからかも。でも、JavaにしたってC#にしたって、最初の時点で型パラメータって考えはあったんじゃなかったかなぁ(Javaはもっと遡るといささか微妙かも知れないけど)。

中途半端なのだ。

型を教える/強制する言語を教えるのなら、本当に強制すべきだし、そうじゃないなら、そんなものは表面上は見えないものを教えるようにしといて内部表現に分け入るときに知れば良いのだ。と思ったけどclassがあればそれは型を作るときなんだから、そんなに単純ではないのか。型はどちらにしても教える必要があるなぁ、じゃなかった、記述上、強制するなら完全に強制すべきで、そうじゃないなら無しのほうが良いということだった。

_ 小惑星探査用小型ロボットの作り方(第2回)

しかしMINERVAの開発予算は限りなく無に近い。

おもしろそうな連載だなぁ。

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

_ NyaRuRu [> <>が一番わからないらしい XNA (MSが最近出した C# で Xbox 360のゲームを書くというアレ) の..]

_ arton [えー、そんなのありなんですか? と思ったけどジェネリックだから(真の固有の型じゃないから)できるんですね。 今度、そ..]


2007-01-17

_

一日中大江戸線で移動か。

_ trac,python,swig,svn

svnを後から1.4にしたのが敗因か、それともtracを.10に上げた時点からなのかも今となってはわからないな。svnのpythonバインディングは作るのを忘れてたので昨日作ったのだが。

python -c "import svn"はエラーにはならないが。


2007-01-18

_ GWT

GWTとはGoogle Web Toolkitのことだ(Apache Licence 2.0)。

豆蔵ナイトで、江川さんのレクチャーに行ってきた。

入門Google Web Toolkit(吉野 雅人/江川 崇/竹端 進)
のプロモーション兼かも(この本、Working Effectively with Legacy Codeと一緒に発注したので、届いたのが今日だったり。とりあえずぱらぱら読んだが、きれいにまとまってるのはさすがだ)。

すごくおもしろいなと感じたのは、江川さんのプレゼンの中で、Ajaxとかを業務システムに組み込む時の問題点として、従来のQAとかで対応できなくなる(たとえばJavaScriptでのカバレッジ率とか)=採用したくても採用できないというのがGWTを採用することでクリアできるというような視点だった。僕自身は考えもしなかったが、妙に説得力があった。

GWTは、Java 1.4.2のサブセットのランタイムライブラリと最終的にはDOMに変換されるJavaのクラスライブラリ、Java→JavaScriptコンパイラ、JavaScriptエミュレータ搭載ブラウザ(GWT用に記述したJavaプログラムをJavaScriptとして実行可能なブラウザ)から構成される。開発時はJava1.4.2以降のJavaそのものが利用されるから、NetBeansやEclipseで開発できるということだ。

正直言って、自分ではまったく使いたくは無いツールキットだが(と言うと嘘になる。ある種のアプリケーション用には向いているからだが、ここでの文脈とは異なる)、確かに有用性はわかる。しかも、どう考えたって企業システム開発用にしか意味がなさそうなツールキットを、なぜかGoogleが出してきたというのが興味深い。だって、PythonでもなければRubyでもなく、もちろんJavaScriptそのものでもなく、JavaでEclipseとかNetBenasとかで型チェックしながら開発するわけだからね。

これ使って開発したAjaxアプリケーションはWeb2.0とは言わないんだろうか? と思ったが、逆にこれを使ってコンパイルエラーを全部つぶして、カバレッジ率100%のソフトウェアにこそ「Web2.0」という名前が付けられることになるのかも。つまり、Web2.0企業と呼ばれる企業が使うのではなく、Web2.0という言葉を唱えたい企業が使う。

で、プログラムそのものはまるでSwingだ。

本からTextAreaのところをちょっと引用。数字キー以外ははねるという処理。

TextArea textArea = new TextArea();
textArea.setCharacterWidth(40);
textArea.setVisibleLines(10);
 
textArea.addKeyboardListener(new KeyboardListenerAdapter() {
  public void onKeyPress(Widget sender, char keyCode, int modifiers) {
    if (!Character.isDigit(keyCode)) {
      ((TextArea)sender).cancelKey();
    }
  }
});
RootPane1.get().add(textArea);

うむ、読みやすい(=何をやっているか見通しが良い)。

以前、GWTの話を聞いてJavaScriptはDSLで表現されるようになるんじゃないかとか、ここで与太を飛ばしたけど、これ、まったくそれだ(あまりにも極端なのである意味予想外の方向だけど。でも極端じゃなきゃ意味がない)。というのも生成されるJavaScriptがすげぇのなんのって、C++をコンパイルして生成したx86アセンブラよりもっと強烈だ。難読化のためなんだろうか? というか、JavaScriptハッカーでかつパズル好きなら、GWTが生成したJavaScriptを追ってみると死ぬまで楽しめると思う。おれはいやだね。だから多分、Javaで記述したうちに検証をかっちりできるようにしてるんだ$蹐Δ韻鼻/p>

これは、業務アプリケーションの開発プロジェクト用に特化したJavaScript(Ajax)アプリケーション開発用のランゲージだ。確かにそうだ。

で、江川さんたちの本は、クラスライブラリの解説と、S2DaoやS2Containerとかを組み合わせたGWTアプリケーションのチュートリアル、テスト、チップスとか。

ここでS2が出てくるのは、これもおもしろい。確かにGWTが企業システム向けなら、プレゼンテーション層がどうだろうが、モデルはモデルだ。

もう1点。テストと言えばGWTの初期化が必要なので単にTestCaseを継承するとGWTのWidgetいじるとエラーになる。そこでGWTはGWTTestCaseというクラスをスーパークラスとして用意している。良い時代だ。

Eclipse以外の環境を利用したくなくて、かつ静的な型検証がなければ落ち着かなくて、しかもAjaxを使いたいのなら、試してみる価値は大いにありそうだし、そういう意味で江川さんたちの本は良いタイミングみたいだな。

でも、おれはASP.NETとRailsの2股があればとりあえずは十分なんだよな。今のところ。(Atlasの方向とGWTの方向の相違がまたおもしろいわけだが)

#で、もちろん、JavaScriptそのものをとても気に入っている今日この頃だし。

_ MSDNバグメモ

ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.VisualStudio.v80.ja/dv_aspnetcon/html/dfaaa7d4-e1f2-4322-b2f5-796e0419f185.htm

「クライアント スクリプト関数の作成」のサンプルコード

誤)Page.GetCallbackEventReference

正)Page.ClientScript.GetCallbackEventReference

_ 自由と真理の神がまだ在るならば、弱き我らを憐れみたまえ。

多分、これは誰もが読むべき(で、その後、自分の立場、見解、方向を考察してみるべき)筋合いのものだと思う。

ので、リンクしておく。ほんとうの創作者利益について

via ものがたり

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

_ えがぴ〜 [おこし頂きありがとうございました〜!]

_ arton [GTWの意義から雰囲気まで短い時間にうまくまとめられていてとても良かったです。どうもありがとうございました。]


2007-01-19

_ 開発の現場

遅くなりましたが、るいもさんとの連載が掲載されている「開発の現場」が発売されています。

開発の現場 vol.007(SE編集部)

今号は前号に引き続き、ソースコード管理の後編です。

巻頭記事はアークランプの中の人(結構ご縁があって時々顔を合わせることがあったりする——というか昨日も遭遇してたり——ゆうすけさんと書いたほうがいいのかな? さらに本業で微妙なニアではないけどミスしたようだったり)とかで、興味深かったり。(アークランプって、なんか時々ものすごくおっちょこちょいな感じを受けるんだけど、根がまじめな感じで好感は持ってるんだよね)

_ 故郷のなまりなつかし停車場の

Prev by Dateを見よ。


2007-01-20

_ Linux-X64でFlash9

nspluginをダウンロードする。

とか、スラドを見ながら作業。

と、rpmなのか、と手が止まる。

フランス人のページが見付かったので真似してみる。

$ sudo apt-get install alien linux32
$ wget http://gwenole.beauchesne.info/projects/nspluginwrapper/files/nspluginwrapper-0.9.91.2-1.x86_64.rpm
$ wget http://gwenole.beauchesne.info/projects/nspluginwrapper/files/nspluginwrapper-i386-0.9.91.2-1.x86_64.rpm
$ sudo alien -d nspluginwrapper*.rpm
$ sudo dpkg- i nspluginwapper*.deb

alienってrpmをdebに変換するツールなのか。

$ sudo dpkg -i nspluginwrapper*.deb
未選択パッケージ nspluginwrapper-i386 を選択しています。
(データベースを読み込んでいます ... 現在 114936 個のファイルとディレクトリがインストールされています。)
(nspluginwrapper-i386_0.9.91.2-2_amd64.deb から) nspluginwrapper-i386 を展開しています...
未選択パッケージ nspluginwrapper を選択しています。
(nspluginwrapper_0.9.91.2-2_amd64.deb から) nspluginwrapper を展開しています...
nspluginwrapper-i386 (0.9.91.2-2) を設定しています ...
nspluginwrapper (0.9.91.2-2) を設定しています ...
ここまではあっさりできたみたいな気がする。で、Flash9を入れてみれば本当にうまくいってるのかわかるはず。
$ sudo alien -d flash-plugin-9.0.31.0-release.i386.rpm 
Warning: Skipping conversion of scripts in package flash-plugin: postinst prerm
Warning: Use the --scripts parameter to include the scripts.
hostname: Unknown host
hostname: Unknown host
Package build failed. Here's the log:
dh_testdir
dh_testdir
dh_testroot
dh_clean -k -d
dh_installdirs
dh_installdocs
dh_installchangelogs
find . -maxdepth 1 -mindepth 1 -not -name debian -print0 | \
                xargs -0 -r -i cp -a {} debian/flash-plugin
dh_compress
dh_makeshlibs
dh_installdeb
dh_shlibdeps
dh_gencontrol
dpkg-gencontrol: error: current build architecture amd64 does not appear in package's list (i386)
dh_gencontrol: command returned error code 65280
make: *** [binary-arch] エラー 1
find: flash-plugin-9.0.31.0: No such file or directory
つい味をしめてalienを使ってみようと思ったら、なるほどアーキテクチャを見ているのか。当り前か。で、素直にtar.gzを展開してテンポラリなディレクトリにコピーしてから、
$ sudo nspluginwrapper -i /usr/lib/plugin-web32/libflashplayer.so 
/usr/lib/nspluginwrapper/i386/linux/npviewer.bin: error while loading shared libraries: libgtk-x11-2.0.so.0: cannot open shared object file: No such file or directory
/usr/lib/nspluginwrapper/i386/linux/npviewer.bin: error while loading shared libraries: libgtk-x11-2.0.so.0: cannot open shared object file: No such file or directory
nspluginwrapper: /usr/lib/plugin-web32/libflashplayer.so is not a valid NPAPI plugin
なぜだ? libgtk-x11-2.0.so.0は当然のように入っているのだが。
$ ldd /usr/lib/plugin-web32/libflashplayer.so 
        linux-gate.so.1 =>  (0xffffe000)
        libdl.so.2 => /lib32/libdl.so.2 (0xf77f8000)
        libpthread.so.0 => /lib32/libpthread.so.0 (0xf77e5000)
        libX11.so.6 => not found
        libXext.so.6 => not found
        libXt.so.6 => not found
        libfreetype.so.6 => not found
        libfontconfig.so.1 => not found
        libgtk-x11-2.0.so.0 => not found
 ...

あ、32ビット版のライブラリが必要なのか。面倒になってきたので、また今度にしよう。

と思ったけど、Synapticを見たらia32-libs-gtkというのを発見したのでインストール。

$ sudo nspluginwrapper -i /usr/lib/plugin-web32/libflashplayer.so 

あっさりと入った。

$ sudo ln -sf /usr/lib/mozilla/plugins/npwrapper.libflashplayer.so /usr/lib/firefox/plugins

おお、youtubeが見える。でも音が出ない。というところまで。

寝る前に思い付いて(というか気づかないほうがどうかしてる気もするが)32ビットALSAライブラリ(lib32asound2)をインストールして完了。快適な環境だ。

_ どっこい生きてる、蚊帳の中

見本誌をいただいたので読む。

COMPUTERWORLD (コンピュータワールド) 2007年 03月号 [雑誌]

米国版の翻訳記事だが、向こうのCOBOL事情というのもすごいな。マイクロフォーカスのCOBOLは.NETなんでVisual Studioで動くのか(富士通だか日立もそういえば出してたのを思い出す)。

というか開発言語の利用状況(複数回答あり)のComputerworldサーベイだと1位のVB(67%)に次ぐ62%の堂々の2位で、3位のJava(61%)を引き離しているありさま。社内アプリケーションの占有率が60%以上の企業が43%、新規開発での利用状況が58%、以前、生越さんが軽く書いてた通り以上の状況になっている。ただ、アメリカ事情かな、と思うのがプログラマの平均年齢が高くて、日本の企業プログラマではちょっとありえないかな、という気もするところ(45〜55歳が52%で過半数越え)。日本の企業のキャリアのあり方だとこの年齢層のプログラマというのはほとんどいないんじゃないかな。おれはそうだけど、特殊といえば特殊な気はするし。なんというか、層の作り方がへたくそで、いつも薄い層しかないような気がしている美しい国(美国のほうじゃなくて)だったり。ミルクレープのような。食べれば甘いがそれだけだ。

#バッチを考えてみろ、現在も標準化が進行中(XMLとかOOコレクションとかIEEEの浮動小数点とか。最後のが現在標準化案策定中というところが、この言語の特色みたいな)とか、メリットから見た論考も入っているので状況はわかりやすい。

あと、以前も思ったんだが、巻末のほうの佐々木、江島、栗原3氏の1ページコラムが、Web上のとはまた違った味わいで読みやすく、おもしろいんだけど(2.0と付けるってのは1998年のBusiness 2.0という雑誌が嚆矢だとか)。エディトリアル(というカタカナ)が強い雑誌という印象はそのへんからも受けてるみたいかも(レイアウトとかページデザインが好きなのが最初に来るわけだが、コンポジションを眺める雑誌というわけではないからだろう)。

#コンピューティングはコンピューティングで土俵は同じなんだよね。

_ 島国っていいね

70年代後半から80年代前半にかけてのUKチャートって不思議だった(カラクリがわからなかったからだ)。Pistolsの大ヒットだの、ブームタウンラッツのラットトリップがチャート席捲だの、トム・ロビンソンの2468モーターウェイだの。

Power in the Darkness (CCCD) [Bonus Tracks](Tom Robinson)

その後もギャリーヌーマンがカーズで1位とか。

でも、USチャートって、どうでも良いパチンコ屋のBGMにもならないような音楽ばかり。日本のチャートもオフコース(嫌いなのの代表のひとつ)だし。

そのあたりの知識から、チャートのトップってことは、みんながそれを聴いているってことだと想像するわけだから、するとイギリスではコーダ伯爵も森番の老人も子供も大人もみんなトムロビンソンを聴いて拳を振り上げたりしてるのか? と疑問に思うわけであった。

後になって、そうではなくて、英国は単に音楽マーケットが小さいから、ちょっとある層の人達が買うとそれだけでチャートの上位に入るということがわかったので、納得したわけだった。

プログラミング言語マーケットというのもそんな感じのマーケットだ。

オフコースを好きな連中はオフコースオフコースもちろんオフコースと連呼してるかも知れないが、演歌(しか名前知らないのでいい加減)とかのほうがヒットしてたりして。ましてアメリカじゃ、片方でMTVチャートがあったりしてもやっぱり売れてるのはC&Wだったり。

だから、意味ある調査って、層分けしなきゃだめかも知れないな。

Eコマース系、Webサービス系、企業情報系、企業勘定系、教育関係、研究系(これはさらにどの方面の研究かとかで細かく分類しないとさらに無意味かも)、といった具合にだ。で、それぞれの割合に各系ごとの市場規模を乗じて割合を出す。うむ、COBOLが強いんだろう。でも、企業の時価総額を市場規模の算出に含めると、Pythonがすごく強かったりするかも。

でも、そう分類すると実は意味なんかなくなっちゃうような気がするのだった。

というのは、プログミング言語で肝要なのは、

−種別1

・プログラマが気持ちよく仕事できる

−種別2

・設計者の設計通りにプログラマがメイキング(という妙な言葉をこないだ耳にした)できる

・したがって方眼紙で進捗管理ができる

−種別3

・発注者(多分勘違いしているか騙されている)が、同業者の集まりで「うちは今度〜でシステムを刷新するんですぞ」と自慢できるほど満足を高められる

−種別4

・設計者=プログラマが、要求に応じてシステムを構築できる/要求者=プログラマが、必要な結果を出力できる

といった、実際の顧客満足度にどれだけマッチしているか、だからだ。

(実際には何を使っても動くものは作れるのだから、何に着目するかに過ぎない。別の切り口にはパフォーマンスという観点があるが、これは本当に有意な計測が難しいので結局は選択しないのと同じことになってしまう)

おれだったら、上のとりあえず挙げてみた4種別に対して、それぞれ1つのプログラミング言語をマッピングするとすると、どうするだろうか?

1は今のところRubyか、C#か、Javaだな。

2だったら、設計の粒度を方眼紙の升目に合わせるわけだからCにするかも。現実的にはJava、プログラマがいればCOBOLも悪くはない。C#はちょっとインタラクションが入りすぎるので方眼紙には合わなそうだ。

3だったら、社会通念に照らし合わせてJavaだろうな。

4だったら、おれの要求する出力なんだから、Ruby、速度重視かつOffice系ならVBA、あとはJDKかCLRか使いたいクラスの有無でJavaかC#というところ。

#顧客満足度という観点では、COBOLは安心感という点から高めを狙えるのかな? (そこで将来的な不安感を煽って顧客満足度を低めて別口を売り込むという手口を使っている人たちも居るだろう)

_ そこにあるIPv6

Kazzzさんが恐ろしいエントリーを上げているけど、どの場合にそうなるんだろうか?

僕のVista環境ではまだWebアプリケーションを動かせるようにはなっていないので、以下の簡単なプログラムを試した。

import java.net.InetAddress;
public class HostAddr {
    public static void main(String[] args) throws Exception {
        System.out.println(InetAddress.getByName("localhost"));
    }
}
これをXP SP2と、Vista RTMで実行するとどちらも出力は
localhost/127.0.0.1
となる。
using System.Net;
public class Host
{
    public static void Main()
    {
        System.Console.WriteLine(IPAddress.Loopback);
    }
}
/*
 * 追記: このプログラムは間抜けでした。
 *  System.Console.WriteLine(IPAddress.IPv6Loopback);
 * というのが書けるわけで
 *  でも、XPSP2だと0000:0000:0000:0000:0000:0000:0.0.0.1
 *        Vistaだと::1 
 *  となって出力が異なるのはもしかしてすごく嫌な気がするんだが。
 * IPAddress.Loopback = IPv4アドレスなんだから当然の結果。
 */
こっちの場合は、どちらも
127.0.0.1

だ。この結果を見ると、VistaだからといってIPv6アドレスが返るようには見えないのだが。

でも確かにVistaでping localhostを実行すると、Kazzzさんのところと同様に::1が表示される。

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

Before...

_ arton [要するに、お金の印字は、固定ピッチフォントの利用が必須ということです。]

_ soda [> より柔軟な言語の選択が可能ならCOBOLのほうが確かに良かったな、ということです。 これは、言語の善し悪しでは..]

_ arton [僕もいろいろ考えることができておもしろかったです。 また、お願いします。]


2007-01-21

_ カントとの出会い

啓蒙とは何か 他四篇 (岩波文庫 青625-2)(カント/篠田 英雄)

なんでもやってみるものだな。

どこかの誰かがアフィリエイト経由でカントの啓蒙とは何かを買ったのだった。カントは子供のころ、正確無比な行動のおかげで近所の人たちが時報代わりに使ったというエピソードくらいしか知らずに過ごしてきたから、この人がルソーなんかのフォロワーだということすら知らなかった(あるいは知っても忘れていた)。でも、時計のように暮らすってことは、時間を無駄にしないとも言えるわけだな。ただものじゃない(少なくても真似できないし、したくない)。

そこで、これも何かの機会だからと買って、他に読む本もあるんだが、各論考が短いからっていうのもあってつい読んでしまった。

感動した。すげぇおっさんだ。これが、18世紀、明治維新の100年前に書かれたことなのか。すでに民主主義とか集団知(!)とか、について考察してたのか。

哲学にはいくつかの目的があるが、カントの目的は政治の持つ2つの側面のうち、富の分配と利害調停では無いほうの側面、つまり富を蓄積しやすくするための治世の方策のほうの哲学だということを知った。(このジャンルの哲学をおれが好むということもある。中国の諸子百家の各種哲学というのも、ほとんどはこのジャンルに属する。つまり、優れた王は優れた治世により国民を富ませる。しかしその治世の方策は属人性に帰する(その王様が偉かったということ)。したがって、次の王、別の王、異なる国では、そのような治世を行えない。したがってせっかくの治世の方策が無駄になる。そこでこのジャンルの哲学は、その属人性に分け入り、普遍化することで(経綸とすることで)、劣った王でも優れた治世を可能とすることを最終的な目的とする。今は王が不在なので、そしてそんなものには戻って来てはほしくはないのだが、そこでこの種の哲学も限りなく不在にならざるを得ない)。

カントの場合は、啓蒙君主のフリードリヒ2世の治世を元に考察する。啓蒙というのは、他人の考えの影響下にある状態を抜け出し自分で考えるようになることだ、というのが当面の結論だ。

次に、それが無秩序となり破壊方向に進まないための制限を加える。

公共の福祉という考え方の原点にはこういう哲学があるのだろうな。

社会益となるものについては無制限の許可を与え、個人益となるものについてはこれを制限する。

戦場で出会った敵は撃ち殺し、上官の命令には絶対服従せよ。兵役についているというのは個人のロールである。理性を私的領域に使用する自由は制限されているのだ。しかし、非殺を説き、不服従の哲学を展開するのは大いにやるべし。その論を張るというのは公のロールである。理性を公的領域に使用するのは完全に自由だ。牧師は説教壇の上では神の愛を説かなければならない。しかし、無神論の著述を行うのは大いに結構。

そのようにして、多くの論が生まれお互いに揉まれることで、社会は反動したり進歩したりしながら、正しい道筋を進んで行く、というのが要点だった。

それにしても、おれは啓蒙君主というものを長いこと誤解していた。単に学問にお金を出したという程度のものだと思っていた。そうではなく、少なくてもカントが描くところの(時代的な制約や政治的な立場などを差し引いた上でも)フリードリヒ2世は、言論の自由を保証した故に啓蒙君主なのか。

ところで、アジャイラーはカントに影響を受けたのだろうか?

(引用注—他人の指導がなければ自分自身の悟性を使用し得ない状態にとどまっている原因は)悟性が欠けているためではなくて、むしろ他人の指導がなくても自分自身の悟性を敢えて使用しようとする決意と勇気とを欠くところにあるからである。…(略)…「自分自身の悟性を使用する勇気をもて!」——これがすなわち啓蒙の標語である。

どうも、この「勇気」という言葉がすごくアジャイルっぽく響くのだ。そして、どうも哲学のもつ政治の方策面への関与という側面を強く現在において受け継いでいるのが、プロジェクト管理に関する方策面での種々の論考なように感じるからだろう。

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

Before...

_ eto [なぜ批評でなく批判でなければならないのかの説明も出てきます. たしか純粋理性批判だったかな. おお! って気持ちにな..]

_ arton [む、興味を惹かせるのがうまいなぁ。 ところで、etoさんは、どの版でお読みですか?(もし翻訳だったら、どれが良いかと..]

_ arton [通低じゃなくて通底。IME2007では変換されない。]


2007-01-22

_ 虚心になって見てみよう

さて、あなたの頭の中は空っぽの洞窟だ。洞窟だけど洞窟のイドラは今はいない。

準備ができたかな?

NHKを見てみよう。

めがねをかけた薄気味悪いとっつぁん坊やが演説してる。

「情報を集める。情報を全部集める。検索している情報はすべて吸い上げる。全部、全部」

これって、悪の親玉以外には見えないね。

(空っぽの頭の)僕は、この人を見て、ドクターノオとか、パトリオットゲーム(違ったかも)トゥモロー・ネバー・ダイ(多分)の敵役のメディア王とかを連想したよ。

お……お……おまえは……何をしようというんだ

1000人(1個大隊)の博士を率いて

おまえは一体何をするつもりだ

おっかねーなー。

おいおい、株式市場の支配かよ。

こわいこわい。

#という演出だった。

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

_ ma2 [「トゥモロー・ネバー・ダイ」? > メディア王]

_ arton [かなぁ? なんか高層ビルに住んでて、多分ターナーあたりを意識してたような。確かに007だったような気がしてきたから、..]


2007-01-23

_ LISPの入門書

プログラミングについての知識がゼロの状態からLISPを学ぶというわけじゃないと思えば、別にelisp(EmacsのLISP)でいいじゃん。そりゃCommon LISPとは違うかも知れないけど、何が違うかくらいは必要になった時にわかるだろう。C99じゃなくてANSI CでだってCは学べる(相当違う気がするけど)。

ってのは、カッコが問題だってだけなら、つまりカッコにまずは慣れときゃいいわけだし。

で、安い、軽い、薄い、読みやすいのがこれだ。

リスト遊び―Emacsで学ぶLispの世界 (ASCII SOFTWARE SCIENCE Language)(山本 和彦)

内容はリストの操作と再帰がほとんど。でも、それでいいじゃん。それ以上のことをしたければその後でやりゃいいんだから。もし、やっぱりカッコがいやなら、どちらにしてもそこまでだ。だったらこの薄さなら最後までは読めるだろうし。

ちなみにこの本で知った豆知識:

while (i < 100) のwhileという英単語にしっくりこない人はいないと思う。知らなきゃそれまでだけど。

ではfor (int i = 0; i < 100; i++)のforとは? 繰り返しの「ために」? ではもちろんなくて、これは期間を示すfor。例文: for a while(暫時), for tow days(2日間)。したがって、forはwhileと同様に「〜の間」という意味。


2007-01-24

_ 読み返し

思わぬ本がアフィリエイトの直接クリックで買われていて、いったいどんな言及をしたのか気になって調べていたら、このリンクを発見して、思わず読みふける。そのときもおもしろがっているが、今読んでもやっぱりおもしろい。それもすごく。

_ VS2005SP1で地味にすごくうれしいこと

Emacsキーバインドで、イミディエイトウィンドウの操作が可能になった!!!

やっとまともなIDEと言えますな。

でも、職場のVS2005にはSP1が入っていなくて今日一日、死ぬほどうんざりしたのだった。


2007-01-25

_ 今のバグ

今、自分のバグで、.NET FrameworkのXMLDocumentを疑った。

自戒の意味で、そのバグのあるプログラム。

function htmlEncode(s) {
    return s.replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/&/g, '&amp;');
}

_ ASP.NET Ajax

1.0が出た

明日、会社でいじろう(ある意味、ちょうど良いタイミング)。

_ それについて語るのではなくそれを変える

音楽の反方法論序説

20年以上ぶりか、に読み返し、それほど変化はないようでもあり、大いにあるようでもある。

コンピュータの操作と身体感覚。

テクノロジーをほめたたえる文章などは、

だれでも無責任に書きちらすことができます。

そんなものをのせるより、テクノロジーをつかって編集システムを変えることや、

すっきりとしたページをレイアウトするほうがたいせつなことではないでしょうか。

作品は、その作者の占有物ではなく、共同作業によって完成するという強い意思。音楽は、楽譜に書いただけでは作品ではなく、演奏され、それが聴かれ始めて音楽となる。

プログラムはソースを書いただけではただのテキストに過ぎず、解釈され実行されて始めてプログラムとなるのか、それともテキストの状態をプログラムと呼ぶのか。


2007-01-26

_ USB−RS232C変換

9600bpsではうまく動く(ターゲットデバイスが)のだが、38400bpsだとエラーがちかちかする。つまりうまく動いていない。しかしホスト側ではエラーを検出していない。いずれにしても本物のシリアルだとうまく動いてた(ターゲットデバイスが。ホストの能力不足という可能性もゼロじゃないのかな)。

何を調べりゃいいんだ?

というところで、10年以上前に廃棄したオンラインモニタ(HW)がほしい。送ったつもりのものが送れてなけりゃそれが原因だろうし、立てたつもりもないシグナルが立ってればそれが原因だろう。

なければ作れば良いのだが、ソフトは作れるがハードはどうすりゃ良いのか? RS232Cのメスから2本ケーブルを出せば良いのか。で片方をホストにつないで片方をモニタマシンにつなげる。でモニタ側は読んでいれば良いのか? (2つに分岐した場合って減衰したりしないんだっけ、というかそのあたりの電子的な知識が無いというのは辛いな)

という具合にハードウェア(といってもたかがケーブルなのだが)で最初から躓いている上に、なんか昔のインターフェイスに出てそうなプログラム(中島信行さんとかがさらっと特集号でリストを掲載してたりしそうだ)を今更作るのもなんかかったるいな、とかいろいろ考えたり。

(で、結局、試行錯誤することになるんだろうか、というか面倒なんで9600bpsに落としてしまうという逃げ方もあるわけだし)

_ 4枚買うと1枚タダ

アマゾンというのを、みんな列車を愛してるから眺めてみたり。

もし、おれが無人島に住んでいて、CD PlayerはあってもCDがなければ、What's Going onと、とうにゴールドラッシュを過ぎてと、夜のハエ男(という意味ではないけど)、スペシャルズと、クラッシュシティロッカーのシングルズと、キャッチアファイアー(ジッポのジャケットじゃないんだな。ガンジャきめてるところがキャッチアファイアーなのか? フォーハンドレッドイヤーズ、フォーハンドレッドイヤーズ、トクガワセイケン フォーハンドレッドイヤーズというフレーズが耳にコダマするのだが、そういえばスペシャルズにもコンクリートジャングルという同名の曲があってどっちも好きだが、夜明けのどんよりのようなボブマーレイのやつのほうが好きだ)で、コックコックバズコックス、気にすんなよ金玉兄弟とか、なかなかのラインアップだけど、見事に旬は過ぎている。というか持ってるし、持ってないのは歴史的に興味がなかったり好きじゃなかったりの結果で持ってないわけだし。

おもしれぇ。

_ 言論の自由

カントを読んであらためて考えてみたが、といっても考えるというほども考えず、アプリオリに、まあ感じたってとこだが、言論の自由ってのはいいね。

今、目の前で起こってることなんて、まさにそうだ。

あるとき、あるところでは、ハガネを使ったものすごく切れ味の良い道具は、門外不出の秘伝だったりして、よそものが手に入れるには決死の覚悟が必要だったり。

でも、そういうものはふつうの技術となり、誰でも手に入れることができるようになる。自分で作れなくても誰かに作ってもらえばよい。作る人はふつうの技術を使うだけなんだから、ふつうの値段で売ってくれるし。

そうやって、いろんなものが、特権的な秘密から、公開されたものに変わる。秘伝の継承者たちはいろいろ失う気分になるだろう。でも、かれらがそれを失うことより、それを得る人がおおくなることってのが結局は良いことだということだったのだろう。もし、それが残るものであれば。消えるものはそれだけのもので、その程度のものなら、秘匿しておく価値もない。価値があれば広がり、なければ消える。それだけのことだ。

いたみをともなうかいかくってやつじゃね?

_ 学校が変わる

卒業式の風景。演台の壁に日の丸。手前に卒業生がひなだんに座る。客席を向いて。客席(演台の下だ)には在校生が演台を向いて座っている。

というのが子供の学校の卒業式の去年までのカタチだ。

今年は変わるらしい。

校長がね、なにか大きな意志によって決定したからだ。

卒業生の向きが問題だそうだ。日の丸に尻を向けているからだって。そこでみんなで壁を向くカタチにするそうだ。

ばかだね。

そんなに子供の尻がいやなら、おれなら、じゃあ、日の丸を壁から下ろすね。それでいいじゃん。

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

Before...

_ arton [なるほど。でもまあ、エビデンスが取れればそれはそれでOKです。 たとえば、本物のシリアルで実績のあるソフトとデバイス..]

_ masterq [USBシリアル情報ありがとうございました。 突っ込んで調べるいい機会になりました。 ウチは調査工数取れないので、 ..]

_ arton [おお、そこまで福福電子さんのページを読んでいませんでした。ご教示どうもありがとうございます。 僕も参考にさせてもらっ..]


2007-01-27

_ 宮城前

みやぎまえだと思ったのは、忘れもしない中学生のころだ。

アルフレッドベスターの虎よ虎よを読んでたら(中学の入学祝いに買ってもらった早川のSF全集にのってたのだった。その頃はベスターは分解された男が創元文庫に入ってただけで、ポケットブックのほうは絶版状態だった。例によってSF事典に載ってて読みたかったのだな)、最後、時空を越えまくってそこらじゅうに虎が出現してくるわ、タイポグラフィがカリグラするわ、のクライマックスのところで、虎が宮城前にも現れるのだった。

虎よ、虎よ!(アルフレッド・ベスター/中田 耕治)

で、それをみやぎまえと読んでとっても疑問符が浮かんだりするくらい、その頃でさえ、すでに宮城前は忘れられた場所になっていたということ。

というか、おれは、二重橋前という千代田線の駅名を知っているが、幻影のように手前に下の橋、後景に上の橋、そこに白馬にまたがる大元帥なんて光景が演じられていたところだなんてまるで知らなかったし、それどころかどう記憶をたどっても二重橋そのものを見たこともない。

それにしても中田耕治はなぜ皇居前ではなく宮城前という訳語を選んだんだろう、なぜベスターは宮城前を選んだんだろうか。

というような疑問に対して、サンフランシスコ平和条約の前には、多国籍軍だの米軍だのが頻繁にパレードをしまくっていたから(おそらくベスターはその印象を持っているに違いない)だったり、警察の誘導によって共産党員が虐殺されるまでは別名人民広場と呼ばれて10万人規模の大集会が開かれていたり、それよりも天安門前広場よりも巨大な大広場だという事実であるとか、愛の広場と呼ばれる丸の内の若者ののどかな享楽の場であったり、というようなことは物心ついた経済成長期にはすっかり歴史の闇に呑まれていたのだった。

皇居前広場 (光文社新書)(原 武史)

いや、それよりなにより、びっくりしたのは、灘波大助の襲撃が、おれの想像とまったく異なる風景の下で行われたということだ。広場じゃなかったのだ。おれは、まったく異なる風景を想像していた。広場を車が走ってくる。そこへ向かってステッキを持って駆け出すテロリスト。ぜんぜん違った。

震災を逃れた数千という都民がテントやバラックで大貧民窟というか難民キャンプというかを広場に展開していたおかげで、灘波大助は車に近づくことができたという話。そこを難民キャンプとして開放することを認めたのが摂政その人だったということ。

その摂政は、1坪ほどの台の上に雨に打たれてコートも脱いで8000人の行列が通り過ぎるまで4時間弱を直立不動で手をあげて見送る演出を自分で考えて、役人が気をきかせて頭上に張ったテントを外させるとか。英国に遊学中にジョージ5世から学んだ近代における王のあり方とはどういうものだったのか、なんとなくだがわかってくる。ある種のソフトランディングを考えていたのだろうか。

まったく知らない歴史がそこにある。機関説でよろしいと言うだけのことはある。

それにしても、オリンピック通り沿いの小学校に通っていたおれは、お召し列車が駅を出るときは、学校のアナウンスがあるからそれとわかって、友達と沿道で、黒い車が来るのを待って乗っている男を見たものだが、まっすぐ前を見ていたものだが、一体何が見えていたのか、どういう心境で晩年を過ごしたのだろうか。

結局は、余分で過剰で口先だけの愛国心がすべてをだめにしたということだろう。226の時に怒ったというが、その後もすべてが逆に動いていったのだろう。かくして、摂政時代に思い描いていた場所の機能を果たすこともできず、ただそこにあるだけの広場が利用されたと思ったら黛だ。

#

著者は気づいていないか、それとも場についての本で音についての本ではないから言及しなかったのか謎だが、新聞記事で明治期には「勇ましい」と表現される君が代が、昭和期には「厳か」と表現されるのは、実に興味深い。明治期の勇ましいがフェントン版ということはありそうな気はするが時期は奥版が出た後なので、今の旋律のほうかも知れない。エッケルトの編曲がどういうものかわからないが、もしかすると現在(というか「厳か」バージョン)はエッケルトの手を払いのけた無名の作曲家によるバージョンになっているのかも。では、どのタイミングで勇ましい君が代が、厳かな君が代に切り替わったのか、切り替わったときにどのような評価があったのか、そいういったこともおもしろそうではある。

_ 電話番号とオプトアウト

MicrosoftのサイトからExpress Editionをダウンロードしようとしたのだが、最初にパスポートサインアップがある。まあ、これは良い。

ところが、パスポート認証の後、個人情報を入れろと言ってくる。

担当部署ごとに別名簿管理してるのかな、と思うわけで、まあ、これも良いだろう。

で、電話番号の入力欄があって、そこに赤いアスタリスク(入力必須)が付いている。

で、その下には、電話で宣伝しても良いか? チェックボックスがあってチェックされている。そんなものが昼間に家にかかってきてもまったく役にも立たない(おれは不在だ)ので当然、チェックを外すのだが待てよ? 電話番号の入力目的が、まさに今、チェックをはずした広告電話が理由だと最初のところに書いてあるように読める。で、チェックをはずすということは、電話番号を入力させる意味ないじゃん。だって、広告目的のために電話番号を入れろと書いてあるんだが、広告電話は不要と宣言できるんだぜ。なぜに、赤いアスタリスクは消えないんだ? ばかですか。

連動しろということだ。

チェックが外れていたら、電話番号の入力をディスエイブルするか、せめて赤いアスタリスクは消して、入力しなくても良いようにすべきだろう。入力目的に利用するなとこっちはチェックを外すことで宣言しているからだ。

チェックしたら、あらためて赤いアスタリスクを付けるなり、イネイブルするなりすればよろしい。

_ 目は本当に目だな

真ん中のドットを30秒注視する。視線を変えずにマウスを写真上に移動する。するとカラーの城が見える。そして色あせていく。


2007-01-28

_ アマゾン アフィリエイト2006年4Q売り上げベスト

って、実際全部1個しか売り上げてないよ、と思ったら2個売り上げたのがあった(3Qは、舞波一人勝ち、僅差でDI&AOP)。

その輝かしい1位は、

The Glenn Gould Edition - Chopin/Mendelssohn/Scriabin/Prokofiev(Chopin/Mendelssohn/Prokofiev/Gould)

確かに、名盤だと思う。すごく緩慢なスクリアビンの5番のおどおどした胎児も良いが(って言うかプレスト コン アレグレッツァってどういう意味なんだろう。プレストのほうがアレグロより早いってことは、アレグロ風のプレストなんだと思うから少し遅めのプレストって意味かな? それを「遅めの」プレストと読み替えてすさまじい遅さで弾いているという感じだ)、3番の美しさときたら天国だ。でも、ショパンはほかの演奏を聴きなれてないのでなんとも言えない。というか、ショパンのソナタってピアノ協奏曲もそうだが、なんていうか、構成力が奔放ですね。

というわけで、スクリャービンにはダンスランギド(読み方知らん)という小品があるが、おどおどした胎児(SONATA No.5 Op.53(1907)——なにげに神秘和音100年記念になってるな)から、それを利用した第1主題相当の部分の柔らかさとか。

(しかしlilypondは難しいな。もっと簡単に文法チェックができる仕組みを考えないとだめだな。)

スクリャービン集 1 (1) (世界音楽全集ピアノ篇)(伊達 純)

おれが持ってるMCA PIANO LIBRARYのソナタ全集みたいにお得な楽譜はないのかな?

_ LilyPondで楽譜を出力するということ

もし、midiの生成まで自動的にしてくれるんじゃなきゃ、誰がこんなかったるいことをするだろうか?

上のたかだか8小節を入力するのに、10回以上のコンパイルエラー(コンパイルには1分は余裕で必要だ)に出くわしたり、楽想記号をすっぽかしているのに気づいてパッチを当てたり。

でも、なぜコンパイルエラーをつぶすんだろうか?

それは、楽譜が見たいからだ。midiでこの音群を聞きたいからだ。

つまり、おれはフィードバックがほしい。

自分の(いや、これはスクリアビンの作品だが)作品を、モノにしたいからだ。そうでなければ、考えるだけでよい。「ここのdivの中には楽譜があるつもり。クリックすればmidiがダウンロードされてメディアプレイヤーを鳴らすつもり」

音楽は、ではなぜ音楽なんだろうか? 作曲家の頭の中にあるだけではそれは音楽ではない。ただの夢だ。

では楽譜は? まだ記憶媒体が、作曲家の頭から、紙へ変わっただけじゃないか?(LilyPondの場合は、謎テキスト—TeX—pngと変遷を遂げるが、謎テキストは音楽じゃなく、TeXソースも音楽じゃなく、もちろんpngも音楽ではない) つまりそれも夢だ。ただ、可視化されたという違いはある。

ここまで来て、ただの夢から、伝達可能な夢に変わる。もう一声(と変換ミスされた。本当は「一越え」だが、逆にうまい言い回しに驚く)。

そして声が出て、空気を振るわせる。この振動は音楽か? いや、媒体が波に変わっただけで、まだ夢の続きだ。

そして、それが鼓膜を震わせ、脳の中で、ほら、音楽だ。

でも、それってエネルギー保存の法則ってやつじゃね? 作曲家の頭の中の夢と同じじゃないか?

もちろん違う、ぜんぜん違う。エネルギー保存の法則とは異なる。なぜなら、その夢は聴いた人の数だけ増加するからだ。

うむ、波は波でもちょっと電波っぽい。

_ 続き

つまりは、情報というのは、伝えられて初めて完結する。

(伝達されたことを見届ける必要は、多分ないはず。無人島からボトルにメッセージを入れて流したって、ボイジャーを宇宙の果て目掛けて飛ばしたって、それは多分、情報になっている、と思う。でも本当だろうか? ボイジャーは宇宙人の届かなくても、地球の我々に情報を伝えている。すでにしてこの地上におけるメッセージは伝わっている。ボトルの中のメッセージはどうだろうか? 多分、それはボトルにメッセージを詰めて、海に流した、その時点で元の発信者にとっては十分に情報として、フィードバクがあったと言えるんじゃないだろうか。つまり、頭の中でボトルにメッセージを入れて流そう、と考えている状態とは異なる状態に変わったからだ。——情報とは、ある状態Aから別の状態Bへの遷移のトリガー/イベントである、と考えることができる)

だから、プログラマーはプログラムし、動かし、修正し、完成させる。TDDの正しさが直観的なのは、フィードバックのシステムがそこにあるからだ。音楽家は、紙に楽譜を書いたり、楽器を使って即興したり、口三味線したりする。脳の中の音を実際の音にしてそれを耳に戻して完結させる。

おれはそのフィードバックの過程がすごく重要だと思うが、そのフィードバックを生じさせるためには、「表現」にしなければならないということだ。単に夢を見るのではなく、モノ化すること。

だから、実際には、プログラムをテキストにするだけで、夢を越えた状態にはなる。それが実行され、結果がフィードバックされればより望ましい。

さて、では数学とは夢なのか? おれにはそう見える。だから数学は美しいんじゃないだろうか? (でも、それが応用され実世界の何かとして具現化されたときは、もっと美しいかも知れない)

_ 蛇足

たとえば上の2つのエントリーの中に最初に想定されている結論と、8合目あたりの結論めいたものと、最後の部分(メタな情報と本来の情報が区別されずに書かれているのであれだが、本来の情報は夢であって、メタな情報は当然可視化できるわけなのでなんだかわけがわからなくなっている)では、異なることが語られている。これは書くことにより、最初にあった情報がフィードバックされ、それによって状態が次の状態に遷移したと見ることもできる。

演説しているうちに、結論が最初に話し始めたときとは逆になることがある(というようなギャグがあるが)それがフィードバックでそのフィードバックストリーム内のデータが情報ということだ。

えーと、結局のところ、人間にとって手を使って何かするというのは相当重要だということとか、外部の媒体に出力することでそれなりに客観化できるためにフィードバックループが生じて、それによって多少は先へ進めるかも知れないとか、そんな感じらしい。

というか、デバッグするには、実際に動かしたほうが楽だな。

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

Before...

_ arton [あ、でも違うかも。コンサルト:システム構築 と書くと、市場価値は左のメタのほうが高いな。 というか、学問の重要性をき..]

_  [ウェグナーは椅子職人・デザイナーで、椅子のモノとしての性質をシンプルに述べているのです。デュシャンとは言ってる内容は..]

_ arton [ああ、なるほど。そういう意味の引用でしたか。 僕が上のほうでぐちゃぐちゃ書いている「情報」は人間に与える状態の変化と..]


2007-01-29

_ ピーターバラカン

何か考えたんだが、別のことしてたら忘れた。

多分、ルンシュン(漢字忘れた、と思ったら、ためしにかな変換したら出てきた。魯迅)が子供について書いたことだ。

というか思い出した。

その感覚を20年後にも覚えていて、それを再現しないようにすれば、世界はおそらく良くなるだろうということ。いや、20年後には真意がわかるので、再現させるということもあり得る。重要なのは、どっちだろう? それはケースバイケースだろう。

Q1)1年生のとき、死ぬほどしごかれて死にそうになった。おれが3年になったらこういう馬鹿な慣習はやめよう。

A1-1) しごきは伝統だ。これがあるから、われわれの強さ、結束力、根性があるのだ! 1年にはそれがわからないのです。

A1-2)みなさん、まったく無意味なのでああいうこたぁやめますわ。

Q2)もう朝の4時か。どこのどいつが四当五落(4時間睡眠それ以外勉強なら合格、5時間以上寝るようだと不合格というような意味だった記憶がある)な状況を作ったんだ? それにつけても、詰め込み教育のせいで、自由な発想はできなくなったし、のんびりと思索にふけりまくることもできなかった。文部官僚になって、こんなあほうな教育制度は変えてくれるわ。

A2-1)ゆとり教育のせいで、ばかばかりですな。やめやめ。

A2-2)運用がまだこなれていない(実作業者が理念を理解していない)ために、本来のありようが実現されていない。理想の実現にはあと20年はかかるかも知れないが、ここでもうひとふんばりだ。


2007-01-30

_ ウィルスバスター2007

Vista対応のバージョンが公開されたのでインストール。

_ ReadyBoost

なんか全然ブーストされないなぁとか思ってたら(っていうかそれっぽいファイルもできてないし、いつプロパティを見ても「有効にする」にチェックが付いてない)、「プライバシーに関する声明」をクリックする必要があったのか。でもなぜ、ここでプライバシーが出てくるんだ? 書いてあることを読んでもまったくわからんが。ブーストした情報(アクセスされた箇所と頻度とか?)をMSに送りまくるということなんだろうか。

それはそれとして、これで、やっと有効化されたらしい。

_ JavaScriptとAjaxのムック

来月の中旬くらいに出るそうです。

まるごと JavaScript & Ajax ! Vol.1

良く見るとVol.1 と書いてあるから、続くのかな? (トレンドでテクノロジーがすごい速さで動いているから、たしかにシリーズ化できるのだろうな、と。Jakartaが求心力をすさまじく発揮していたころのJavaのような動きが今のJavaScript界隈にある——という見方をすると、実はあのころのというか実は今もまさにその最中なのだが、Javaというのは、Enterprise 2.0 だったわけだろう。で、その2.0——古くからあるシステムを新しいテクノロジーを利用して価値や意味付けを見直したり変えたりして創り直すこと——を誰もが見える/操作できる場所に持ってきたのがWeb 2.0だと考えれば、軍事→民生のような流れと並立して古くから存在する、メインフレーム(クラス)コンピューティング→パーソナルコンピューティングという流れの中に実のところはあるのかも。でも1度目は悲劇だけど2度目は喜劇なので、そりゃJavaよりJavaScriptのほうが楽しいだろう)

まるごとJavaScript & Ajax ! Vol.1(天野 仁史/舘野 祐一/川崎 有亮/arton/田中 孝太郎/国分 裕/山本 有悟/海野 裕也/nanto_vi)

で、IT戦士天野さんや舘野さんといったWeb 2.0系の執筆陣にまざってなぜか僕もいます。とはいえ、RHGでのネタ(1)(2)の採録ですのでご愛敬ということで。

#これについては4月のRHG読書会の夜の部の足しにしましょう。

というわけで、どんな内容なのかは2ページ分を除いて僕もわからないわけだけど目次を見ると、方向性はみえるような。少なくてもGWTとRails(id:secondlife)が出てきてJavaScript無しJavaScriptがあるわけだし、このタイミングでIE7 とかSafari3とかが出てくるのは実利的だし、Prototype.jsとMochiKitというのはそうなんだろうなぁ、とか。

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

Before...

_ arton [あ、「足し」と「夜の部」の意味を間違えて取ってる? ネタにしようの意味じゃなくて(するならいつでもいいんじゃないか)..]

_ ささだ [ネタの足しだと思ってました.ゴチになります!]

_ arton [ごめん。読み返してみたら、いくらあまり生な書き方したくなかったとは言っても、あの書き方じゃ読み取れってほうが無理だよ..]


2007-01-31

_ USB-RS232C続きというか結果

iBUFFALO Arvel USBシリアルケーブル 1M グラファイト カラー SRC06USB

会社行って見てみたら、福福電子工房さん推薦のアーベルのケーブルだった。

で、やっぱり38400bpsだとデバイス側(RS232C側)のERRがちかちかしまくる。9600bpsだと問題なし。

ちょっとこのデバイスが何物かは知ってる人は知ってるが、当然秘密なので書かないわけだが、前回困ってたときと違うのは、実際に動かすための条件がやっと揃ったってことだ。で、ダメもとで使ってみたら元気に動いてるんだ、これが。でも、ERRはちかちかちかすごい勢いで点滅を繰り返している。

これは結局、何か予期していないシグナルが立っているのは間違いないんだけど(そうじゃなきゃデバイス側のERRが点滅しているはずはない)、それ自体は悪影響を持っていないのかなぁと、思えるので(いかんとは思うがいかんともしがたい事情もあって)とりあえず様子見となりました。

でも、福福電子工房の

あなたは、テスターを持っていないハードウェア技士を信頼できますか?

通信を少しでも行うのであれば、オンラインモニタは一人一台の必須ツールです。

Analyze232Cなら、一人一台オンラインモニタが実現できます。必ず用意してください。これが、通信に関係する技術者の最低条件です。

というのは、納得がいくのだよな(いや、さらに言ってしまえばオンラインモニタは作れるのが最低条件だろ? たとえばおれはLANモニタを公開してるぜ——ケーブルを作らなくても良いからだけど、というか韓非子の言葉にもあるけれど、最高の権謀術策は知っていてこれを用いないことだというのもあるわけなので、作らずに買うというのはもちろんありだけど。安いし)。というわけで、プライオリティは落とすけど、最終的には詰める予定ではある。

というわけで、通信そのものは確かにうまく行っているようです。いろいろご教示ありがとうございました。

_ ひっそりと

映画化された(もう公開されたのか?)はずなのに、全然、書店でも見かけないが8巻が出てるのか。

フリージア 8 (IKKI COMICS)(松本 次郎)

会社の帰りに本屋に寄って買うとする。

_ USB-RS232C アプリケーション的な問題

.NET Frameworkで、SerialPortオブジェクトを使って制御しているのであった。

で、これが困った。というか運用でカバーというやつで逃げるけど。

本物のRS-232Cなら、コネクタ抜けば(当然、アクティビティタイムアウトが検出されて一度リソース解放した後)リトライしてればまた接続状態に復帰できる。

ところがどっこい。

コネクタ抜いてアクティビティタイムアウト検出するまでは良いのだが、そこでSerialPort.Closeを呼び出すと、しばらーくたってから、いきなりネイティブスレッド例外(ポートが存在しない)になってプロセスごと死亡する。

しょうがないのでAppDomain.UnhandledExceptionHandlerを設定してやるのだが、IsTerminatingがtrueだ。どうにもならない。

そこで、メッセージを出してからApplication.Restart()でプロセスごと再起動ということにした。

SerialPort.Closeを呼ばなければ良いのだろうか? でも、そうするとアクティビティタイムアウトの検出後の復帰動作を返る例外でいろいろ分岐させなきゃならなくなる。

それは良いとして、上がってくるのがUnauthorizedAccessExceptionなので、ちょっとこれをもって抜かれたとみなすのも無理があるような。


2003|06|07|08|09|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|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|

ジェズイットを見習え