Monday 31 December 2007

よし、酔った勢いでさっさと片付けよう



実家にいますが、プログラミングの続きやってます。パーサ(構文解析)の機能のうちマクロと演算子順位文法の実装が終ったので、後は、時相論理の演算子を接続していけば良いだけだ。

本当は、パーサの逆のPrety Printerも作らなきゃいけないんだが、結構、めんどくさいので、後回し。

でも、酒飲んじゃったんだよな。だいじょうぶ、CVS にコミットしてから変更するので。

と言うわけなので、これから、今まで躊躇していたテストルーチンを接続します。年内にパースぐらいは通るだろう。って、後、1時間か。

山手通りの工事






そうか、下の道路は出来たらしいが、上の方は全然終ってないのね。



池袋の西口、立教大学と丸井の間あたりは、この30年、変わってない。300B, 300BV、ゲーセン。ラーメン屋の太郎。白雲閣はきれいになったけどね。

Spam Filter



今年は、200,523 通のメールを受け取り、82.1% がSPAMだったようです。一日、平均、650 通です。

Bayes filter は使ってません。自作filter です。結構、つまらないルール使ってます。

 kono@ie.... って書いてあるのに、違う名前(alphabet)を書いてある
  (失礼な奴)
 X-Mailer に、Spam Mailer の名前をそのまま書いている
 From に info@.... を使う
 Subject とかに良くある(おおっぴらに書けない)言葉が入っている
  (正直な奴)
 Recieved: で、自分のfrom に相手のドメイン名を使う
  (すぐにばれる嘘をつく奴)
 文字コードが windows、GB、ko
 To: に "<hoge"@ という形式 (つい最近出た...)

White list (知っている名前)、Black list (前にspamを送って来たところ) も使ってます。While list になくて、立て続けに送って来たのは、そのまま junk 送りにしてますが... 本当はちょっと危ない。

Received: を使って、ADSL pattern を切ると良いという説があるのだが...
 h69-31-242-41.cust.platinum.ca
とかいう奴。今は、チェックしているだけで切ってはないんだけど、学生のメールがひっかかる。

どうも、うちの学生が、家から大学の SMTP を直接叩くという技を出しているらしい。認証しているので良いんだが、ADSL spam pattern と区別が付かない。これは、smtp-server と smtp receiver を同一にしているからいけないんだよな。認証したというのをメールから証明できないと意味がないです。

今年の学生は、そのあたりに疎いのが多いらしく、アカウントが間違っていたりするので、結構、SPAMに落ちてます。「ちゃんとするまで受け取らない」方針でやってますが...

 http://www.gabacho-net.jp/anti-spam/

とか言うのもあるらしいが、大学では導入しづらいなぁ。

Sunday 30 December 2007

テスト&lt;hoge&gt;



<hoge>とかが消えるのは、もう嫌なんで、script を書いてみました。

Subject は別扱いなのか。こいつらは〜

Generic と extends [Java]



なんか、間違っているのかと思いながら、<T extends S>とかと格闘してます。



  class LogicNode {

    public LogicNode node() { return null; }

  }



  class LogicSolver extends LogicNode {

    @Override

    public LogicSolver node() { return null; }

  }



は、普通だと思うんだよな〜 (1.4 では通らなかったらしい...) でも、



  class LogicNode {

    public LinkedList<LogicNode> arguments() { return null; }

  }



  class LogicSolver extends LogicNode {

    @Override

    public LinkedList<LogicSolver> arguments() { return null; }

  }



これは、通らない...



  LogicSolver の arguments() は LogicNode の arguments() をオーバーライドできません。互換性のない戻り値の型を使おうとしました。

  検出値 : java.util.LinkedList<LogicSolver>

  期待値 : java.util.LinkedList<LogicNode>

  public LinkedList arguments() { return null; }



だってさ。まぁ、気持ちはわかるんだけど。LinkedList は、LinkedList の派生クラスではないからなぁ。



@Override が文句言うぐらいは許すんだが、コンパイルも通らない... このためだけにクラス LogicNodeArguments を作るのは、ちょっと抵抗あるかなぁ。



  class LogicNode {

    public LinkedList<LogicNode> arguments(LogicNode n) { return null; }

  }



  class LogicSolver extends LogicNode {

    // @Override

    public LinkedList<LogicSolver> arguments(LogicSolver n) { return null; }

  }



とdummyの引数を付けると通るので、そうしてます。呼出側では this でも食わせときゃいいし。



でも、@Override は通りません。ま、それぐらいは許す。



    メソッドはそのスーパークラスのメソッドをオーバーライドしません。

    @Override

     ^

だってさ。まぁ、そうだよね。



型がなけりゃぁ生じない問題だけに、自分で勝手に問題を作る、どっかの事務と似ていると思ったのは秘密...

Saturday 29 December 2007

ヴァンパイアカフェ




昨日は、ヴァンパイアカフェで晩餐会でした。なんと、メイドさん付き。



 http://r.gnavi.co.jp/g600100/



6人だったので、ちょっと狭かった。料理も、これならOk。飲み放題付いて5,000円か。銀座なら安い方でしょう。と言うわけでビールで飲みすぎです。



出るときには霧雨ぐらいだったのだが、出るときには土砂降りに。傘持ってないよ〜 さすがにシーズンなので、二次会にいこうとしても、どこも一杯。



かろうじて空いていた、三笠会館のBar 5517が結構良かったです。



しばらく飲んでなかったので、お酒がおいしかった。5517でもタリスカーのダブルだけで我慢しました。

Friday 28 December 2007

これから晩餐会



なんだが、Java の方は、メインのパーサのテストに入る勇気がないです... きっと、そんなに難しくないよ。

気持ちを切替えて、飲みにいこう〜

Thursday 27 December 2007

天体の衝突



今日は、Tokenizer の「テストルーチン」を書いているうちに日がくれました。Java のBufferのflip(),clear(),compact() とかは、何が起きているのかわかりにくい。結局、position() とかでいじっちゃうのか... もっと気軽にテストルーチンを書きたいと思うよ。

なんか月で流星の衝突が観測されたみたい。生きている間に、木星に彗星が衝突するってのも見ちゃったしな。

 http://news.mixi.jp/view_news.pl?id=372110&media_id=20

ってことは、こういうことは良くあるってことなんだよね。

三つの天体の運動を取り扱うのは、三体問題と言うのだけど、解析解(積分で求める解を求めることが出来ない)がないと言うのでも知られてます。

 http://pathfind.motion.ne.jp/santai.htm

とかさ。長沼伸一郎だ...

で、どうも、結構な確率で、一つが吹き飛ばされてしまうってことが起きるらしい。お互いにスリングショットを繰り返すみたいな感じか?

なので、太陽系でも天体の動きはかなりカオス的で、いつどこから吹き飛ばされて来るものがあるかわからないという感じ。

長い目で見れば、すべての物質は放射性であって、いつかは崩壊するとかいうのにも似ているかな。

Wednesday 26 December 2007

Java の続き



結局、はまりまくってますが... Java って、自虐的なところがある。

Object 指向の abstract class、interface、Generic、inheritance とかは、結局、アルゴリズムとは関係ない「コードの整理整頓」に過ぎない。でも、そういう掃除をしているのも楽しいと言えば楽しいんだよね。

  A   →   B

  ↓      ↓

  A'  →   B'

まぁ、矢印は extends でも implements でも良いんだけど、このあたりの整合性を取るのは大変。「良い設計をすれば」とかいう幻想もあるけど、最適解は、どうせNP困難なんでしょ? 適当なところで妥協するものです。

Generic も面白いんだけど、どっかで止めなきゃならないのがめんどくさい。二重にInstanticate していますとか言われると、どこどう直せば良いのか途方にくれるけど。結局、Generic で受けた型を知らないオブジェクトは、左から右に手渡すしかない。いや、<Hoge extends Fuga> で受けても良いんだろうけどさ...

Polymorphism で、狙ったメソッドではなくて、違うメソッドに飛ばされるのがめんどくさい。

 class A extends B

で、

 void method(A x) in class A
 void method(B x) in class B

のどちらに飛ぶのかが良くわからない。@Override は付けてますが、

 void method(A x) in class B

とか書くと、確実に A の method が Bのmethod を Override するわけなんだけど、それは変だよね。

 class A' extends A implements B'
 interface B' extends B

とかだと、さらにわかりません。でも、class A implements B を extends したければ、どうしてもそうなると思うんだけど。なんか間違っているのかな。出来るようになっているわけなんだから、そういう使い方もあるんだろうけどさ... とか言いながら、適当にいじっていると、動くには動くんだよな。

Smalltalk/Squeak/Perl だと、とりあえず動かして、messageDoesNotUnderstand とか Faild to AUTOLOAD で、止まったところから書くなんていう技もある。ad-hoc だけど、それはそれで「最短で動く」。 Java だと、テスト駆動とか言っても、やっぱり、コードをこねくり廻している時間が長い。

Tuesday 25 December 2007

Pattern, Matcher in Java



お留守番中なんだが、また、Java をいじってます。

Parser を書くのに、うっかりScannerを使ってしまって、こいつが... delemiter に "\s*" を使うと、「一文字ずつしかマッチしない」という技を出す。まぁ、そうねぇ。そういう仕様もありと言えばありだよな。不便だけど。\b とかは使えないらしいです。hasNext() がmaximum match してくれれば良いんだが... たぶん、まず、delemiter で分解してからscan しているんだろうなぁ。

で、どうしようもなくて、

 while(scanner.hasNext(namePat1)) {
  s += scanner.next(namePat1);
 }

とかやってました。これって、o(n^2) じゃん。学生にやるなって言っていることだよ。まぁ、富豪的視点からは放っておいてもいいんだが...

なので、PatternとMatcher を見直して書き直し。

 if (matcher.usePattern(tokenPat).find(position)) {

とかやれば良いのかと思ったんだが、
 tokenPat = Pattern.compile("^[(){},;~]");
では、position が >0 だと、必ず fail するらしい。^ を取ると、パターンが出て来るまで skip されてしまう。どうすりゃ良いんだよ。

The lookingAt method attempts to match the input sequence, starting at the beginning, against the pattern.

The find method scans the input sequence looking for the next subsequence that matches the pattern.

ということらしいんですけどね。良く見てみると lookingAt にはregionってのがあるのを発見!

結局、^ は取り除いて、
  matcher.region(position, end);
  if (matcher.usePattern(tokenPat).lookingAt()) {
   position = matcher.end();
という風に書けば良いみたいです。lookingAt()に position を書けないのは不便。Matcher が next() を持っていればParserに便利なんだが...

Pattern は、Perl のRegexを参考に作ったみたいだが... Perl のように「こう動いて欲しいと思うように大体作られている」というわけではないらしい。Perl だったら、

 if (s/^[(){},;~]//) { ...

と書くでしょう。

Monday 24 December 2007

なかむらでクリスマスイブ




僕達にはよくあるパターンです。

真意測りかねるのは、原告の方



薬害肝炎 真意測りかねる原告

http://news.mixi.jp/view_news.pl?id=369664&media_id=2



何せ問題が発覚する前まで遡って「責任を認めさせて」「全員救済」でしょ?



「聞いてないよ〜」レベルまで裁判で責任追及って、何考えているんだか良くわからない。もちろん、発覚の後の分は、ある程度は責任はあると思うけど。



裁判の枠組みでの解決は、もともと無理なので、立法で救済ってのは合理的だと思う。政府の判断が正しいと思います。

飛行機待ち@那覇



12:35の飛行機なんですが... 家を出たら「泡盛買って来て」メールが。で、タクシーにのったら、12:00 ぐっ。間に合わないかも。ところがタクシーの運ちゃんが「20分でいく「とおっしゃる。城間から20分?! 本気?

しかし、三連休の最終日だから、道はがらがらで、15分でついてしまいました。楽勝。

と思ったら「機材準備で12:50に遅延」だそうです。ありがちだ〜

Sunday 23 December 2007

REP Camp 三日目



昨日は、終った後、近所の飲み屋さんのクリスマスパーティ(3,000円飲み放題)に寄ってしまいました。「ず」には、つぼ八に呼び出されたし。そんなに飲んだとは思わないし、早めにあがったんだけど、やっぱり疲れが出てるかな。

まぁ、そんなこんなで、今日はあんまり役に立ってません。それでも、着実に進んではいるかな。先生とは関係なく勝手に、仕事が進むというのは、ある意味理想だし。

今日は、19:00 から打ち上げで、明日から1/7まで東京です。

「おーい、ソースコードのコメントはUTF-8にして。nkf --overwrite -w !」

まぁ、java/UTF-8は、いまだに問題はあるんだけどさ。

Saturday 22 December 2007

REP Camp 二日目



通信のためのメインループと、GUIが両方あるのは、ちょっと面倒くさいです。

Eclipse は、syncExec とか言うAPIがあるんだが、自分で作ったGUIだと忘れるらしい。

メインループ側とGUI側で、何が共有されているかをはっきりさせて、その部分で、細かく lock を取る方が合理的だと思うんだが... 両方が channel を共有していて、両方がchannel 経由でネットワークに書くとかいう状況だと、ちゃんと動く自信がないです。そのあたりしっかりしてくれよ。やっぱり、送信を担当するオブジェクトを作って、そこで synchronized するんだろうなぁ。

複数のユーザの編集結果を調停する merge のアルゴリズムも、いろいろ問題があるらしい。

Friday 21 December 2007

プログラム書き会中



なんだが、家の鍵盤を大学のと入れ換えたり、PS3 のOSを入れ換えるために外付けUSB HDを買ったり。

と思ったら、行方不明の卒論生が来ていたので、今年は諦めろと言い渡しました。が、どうなるかは、まだ、不明。

でも、せっかくいるので、テーマに出したJSP/Tomcat を久しぶりに触ってみる。そもそも、去年の11月ぐらいに出したテーマだった気もするし〜 で、忘れまくってます。

そもそも、PowerPCからIntel Macに移ってから動かしてないし。でも、Java だから、動くはずだな。と思って動かしてみたら、動く。それは立派です。

Thursday 20 December 2007

明日から、また、プログラミング



三日間、大学に閉じ込められるようです。

本当は、北部ほげだったんだが、「予約は、2ヵ月前から、1ヵ月前まで、それ以外は受け付けません」だってさ。一週間位間に合ってなかったようです。まぁ、あそこはインターネットひくの面倒だし。馬鹿と喧嘩するのも何か利があるならするけどさ。別に良いよ。1ヵ月前に予約すればいいんでしょ?

と言いつつ、もう一回ぐらいあるらしいです。

ということは今日は空いているんだよな〜 酒飲みに行こうかな〜

昼夜逆転中



おかげで昼間眠くって。



Boolean Satisfier は出来ました。

 ((not a) or a) is satisfiable.

 (not ((not a) or a)) is unsatisfiable.

 exists(a,((not a) or a)) is satisfiable.

 (not exists(a,((not a) or a))) is unsatisfiable.



Backtrack をProlog流にやろうとすると、Tree walk をCPS変換する必要があるってのに気づいた後は楽勝でした。しかし、普通の言語でそれをやろうとすると面倒だよなぁ。



CPS変換はInner Class を使っていたんだけど、やっぱり外部が良いなと思って書き直しました。Inner Class の方が記述が一ヶ所に集まるので読みやすい感じもするけどね。



backtrack base depth first search をtry/catch で実装したが、Iterrator とか Thread Pool で実装することも可能だと思った。try/catch が余りに遅いなら書き直すでしょう。(実際、遅いんだけどさ)



Parser に二種類のノードを生成させるようにするので、ちょっとはまる。まぁ、コピペしても良いんだけどさ。Node の生成をFactory経由にすれば良いんだが...





Factory はInterfaceにするのかClass にするのかで、2,3回往復したらしい。Down cast を実行時に拒否するので、アドホックに書かせてくれない。で、結局、Generic に書き直す羽目に。そんなところで時間を取られるのは本質的でない気がする。学生だったら絶対コピペで済ますだろうな。結構書いちゃったコードを、Generic に直すのはかったるい作業だ... Generic にRefactoringするってのは、Eclipse には存在しないらしいです。(そりゃそうだろう...)



public TreeMap<String,Token<Node>> scope;



とか書くと、C++ みたいで嫌な感じ。(と思う人は多いだろう...) 1.5 以前は、Java はcastしまくりだったんだけどね。(何故 > でなく>かは、mixiに文句言ってくれ)



ATVAで聞いた話ではSATは「簡単なことは全部その場でやる」「難しいものは出来るだけ後回しにする」手法が良いようです。一種のShortest Job First だね。



他にやることはたくさんあるんだが、ま、面白かったです。来るべき学生が来てないので、暇だと言う話もあるな。彼らはどうするんだろう?

Wednesday 19 December 2007

サワディーの夜のカレー




「あ、それご飯多い。半分にして」「だめ」



だめってなんだよ〜



「あ、しのぶ、そのご飯全部食べちゃダメだろ」「もったいないです」



そういう問題じゃないです。



夜は、ご飯があるかどうか、問い合わせた方が良いらしいです。

Tuesday 18 December 2007

血圧高いって書いてから...



うちの奥様がサプリをいろいろ送って来る。面と向かって言えないので、ここに書きますが、サプリは嫌いです。(あんまり読んでないらしいが)

一時期、ビタミンCは愛用してました。沖縄は紫外線きついのでビタミンCは必須かも。もっとも、ゴーヤチャンプル食べてりゃ十分だって説もある。最近はさぼってます。理由は、カプセル入のビタミンCが使いにくかったから。

野菜ジュースは結構好きだったりする。でも、実は銘柄にうるさいです。なので、いきなり一カ月分送って来るのはやめて欲しかった。甘い奴は苦手なんだよ。充実野菜は却下。カゴメの減塩野菜ジュースが指定銘柄です。が、買うときに重いのと缶詰捨てるのがめんどくさい。

あとは、なんだ、マリンペプチドとか言うもの。これは、原材料サーデンと書いてあるので、いわしらしいです。実際、いわしの味がします。酒のつまみに良い。なんだが、一日4粒とか噛まずに飲めとか書いてある。それでは酒のつまみに足りません。なので、いわし食った方が良いと思う。うるめぼしとか好きだし。

しるしるが言ってたセロリも少し試してみたんだが、うまく保存する方法が良くわからん。セロリって腐るとくさいんだよね。あはは。

Monday 17 December 2007

ちょっと熱が...



なんか、ぶり返したか。土日の予定を入れたのはまずかったかも。でも、今週末もあるんだよな〜 もっとも、それが終れば年末休暇に突入の予定。

昼間は、論理式パーサの続きで Java のSatisfiability checker を書いていたけど、微妙にわからない。ださいアルゴリズムは実装したが、走らせる気もせず却下。

昔、Prolog で書いたのと同じスピードで動かないのは許せない。なんだが、Prolog のbacktrack/bugofの機能をちゃんと実装するのは結構面倒。難しすぎるのを除けば良い言語なんだがなぁ。(とか書くと、backtrack使っているようじゃ遅いとか言われそうだが...)

しかも、backtrack/bugof はPrologの機能の一部に過ぎず、本当に難しくて便利なのはUnificationだものなぁ。

もっとも、KL/1で書いた定理証明系をJavaで書き直して10倍速くなったなんて論文も見たことある。まぁ、いつの時代のCPUを比較しているのかっていう問題はあるけどね。

もっとも、昔書いたものでも、重複計算があるのはわかっていて、それを取り除くってのもやりたいんだけど、単純な実装(自動的な重複計算の除去)では速くはならなかったよな〜 もっとも、効果は速度ではなくて計算できる式の大きさなのかも知れないが。

昔、学生にやらせたソースとかも出て来て、見てみると、ちょっと絶望的。いや、まぁ、結構頑張ってかいているんだけど、これじゃぁ、動かんだろう。

まぁ、今では超高速SAT solver とかもあるので、そっちとの兼ね合いもあるので、練習みたいなものなんだけど。

とかなんとか、そのあたりのことを思い出しました。

もっとも、今やるべきことは別にあるんだが〜 なんで、こっちを「今」やり始めてしまったのか、まったくの謎です。

きっと、熱があるからだな。(2,3日で終れ〜、熱も、このプログラムも)

年金特別便は税金の無駄使い



http://news.mixi.jp/view_news.pl?id=364303&media_id=20

旧郵政省と談合して社会保険庁が税金を奪っているだけだと思う。

こう言うものは、トヨタの看板方式を見習ってon demandでやるべきものです。

約1億通の手紙を出すらしいが、90%は無駄でしょ。むしろ、今、もらえない人をどうするかの仕組みをちゃんとする方が、無駄なことに金かけるよりも効果的。政治的にも。

Sunday 16 December 2007

GCC 読み会の続き



今朝は10時からやってます。output_operand まで来たので、i386.md のtemplate から、%a0 とかを変換しながらソースコードを吐いているところまで見たので、一応、上から下までつながりました。

parse tree を作って、gimple に変換して、それをrtx に直して、そこから、生成するという手順らしいです。もちろん、間に、怪しい最適化ははいりまくりますが。

後は、何しようかな〜

Java の論理式パーサは動きました。そのまま、OSの例題にしちゃおうか。

Saturday 15 December 2007

いつもの、三つ




で、学生達をカレーを食べに行ったわけですが、僕は前田のハリーズはいつものがあるって話で、「いつもの、三つ」。



 チキン野菜カレー激辛



のことです。



でも、明らかに辛い。「今日のは辛いです」「いつもと同じですよ」。



いや、昨日のより絶対に辛いです。超辛に近かったかも。

逃避



ThreadPool の例題を作っていたはずだが、SAT solver を例題にしようと思って、そういえば、昔、簡単なのを書いたなと思って...

で、何故か、論理式のパーサをJava で書いてます。昔、学生が書いたのがあったような気もするが...

他にやることたくさんあるんだけどな。でも、だいたい出来てしまった感じ。

gcc の読み会は、学生に任せると中断してしまうな。コメント読むのに辞書引くなよ〜

GCC 読み会



とりあえず、start_function() まで来ました。去年も読んだので、ちょっと飽きてるかな。

4000行もある関数書くんじゃね〜 と思った。

Friday 14 December 2007

アルバイトと大学



3年生の実験が全然進んでない学生が何人か。三人中二人。一人は出来てる。やってないとしか思えないので「毎日来い!」と怒った。いや、その時点では、一応、抑えてました。



が、「アルバイトがあるんで、毎日は来れません」とかおっしゃる。ふーん、大学卒業するよりもアルバイト選ぶなら、それで一生食っていけば? 世の中、大卒の資格を隠して、安い仕事につく人もいる。そっちの方が幸せな人もいるってことさ。



で、さらに話を聞くと、自宅生だったり、どうでもいいバイトだったりで、全然同情の余地ないです。「病気の妹の病院代を稼いでます」とか、少しは泣ける話をしてくれ。



もっとも、本音は、



 「プログラミングを避けて卒業したい」



みたい。授業についていけてるのかと聞いたら「プログラミング以外は」とか言っていたので。すみませんが、プログラミング技術抜きで、情報工学科を卒業させるわけにはいきません。



プログラムは「書いた通りに動く」わけなんだけど、その動作は「マニュアル」とかに書いてある。そのわけわからないマニュアルの意味を推察するという高度な作業がプログラミングの大半を占めるわけなんだが、「書いた通りに動く」あたりが単なる呪文にしか見えてない。



一つ一つの呪文の動作を一つ一つ確認していかないとプログラミングは出来ない。だから、無闇に時間がかかる。でも、それをやれば誰でも出来ます。時間かけてないんだよな。

Thursday 13 December 2007

ThreadPool と格闘



http://mixi.jp/view_bbs.pl?id=25236109&comment_count=25&comm_id=954487

とかいう話があるので、Executors の例題と、PathFinder を扱ってみる。まぁ、なんとなくExecutorsの気持ちはわかりました。Thread と言うよりはタスクの投入と管理みたいにしたいわけね。

public class SimpleThreadExecutor {
  private final ExecutorService pool;
  public SimpleThreadExecutor(int poolSize) {
    pool = Executors.newFixedThreadPool(poolSize);
  }

  public void serve(int numThread) {
    for (int i = 1;i<= numThread;i++) {
     pool.execute(new SimpleThreadHandler("thread"+i));
    }
  }
  
  public static void main(String args[]) {
    int taskCount = 4;
    SimpleThreadExecutor e = new SimpleThreadExecutor(10);
    e.serve(taskCount);
    e.pool.shutdown();
    System.out.println("all done");
  }
}

だと思うんだけど、これが全然動いてくれません。いや、もちろん、Java PathFinderで動かす時なんだけど。

newFixedThreadPool は、 ThreadPoolExecutor を返すんだけど、こいつの状態が多すぎて、しかも、dead lock しちゃう。newCashedThreadPool だと、shutdown しないと止まらないし。この手のlibrary で shutdown() のdead lock を完全に避けるのは難しいんだよ。

Thread を作りながら順々に execute するあたりで、既に余計な状態組合せが増えているからなぁ。「性能を上げるために状態を増やす」ってのと、「ちゃんと動作することを確認するために、状態の見通しを良くする」ってのが相反しているわけだ。

なので、自分で状態の少ないThreadPool を作って実行することにしました。なんだけど、shutdown() のsemantics が良くわからない。

shutdown() Initiates an orderly shutdown in which previously submitted tasks are executed, but no new tasks will be accepted.

うーむ、意味不明です。orderly shutdown ってなんだ? Thread にはshutdown() なんてないしなぁ。stop() が使えないとするとjoin()かな。

そういえば、むらぼーも「java.util.concurrent のソースを見る」と言っていたなぁ。でも、昔は Java のソースを見るのはオープンソースな人にはタブーだった。今は、GPLになったから良いんだけど。

    public synchronized void shutdown() {
        for(Thread t:threadQueue) {
            try {
                t.join();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        threadQueue.clear();
    }

とかにしたが、こんなものか?

しかし、学生向けの例題にはならないなぁ。

Wednesday 12 December 2007

JW-10 と技術の対価



JW-10 は大学院に入ったら、そこの研究室に置いてありました。どうやって手に入れたかは知りません。なんだが、JISキーボードで仮名入力しなければならなかったので、僕はほとんど使いませんでした。同じ研究室だったが、別なビルだったしな。変換したところをすべて覚えていて、後からも変換可能という感じでした。使いやすそうには見えなかったな。その後、TeXに移行するときにフロッピィの内容とかを解読した人がいたはず。



僕がいたビルには富士通のOASYSが置いてあり、こっちは良く使いました。親指キーボードは良く考えられていて、しばらくそれで打ってました。親指ぴゅんとかも使ってたし。もっとも、結局、ローマ字入力に退化したんだけどさ。



と言うわけなんで、それほど画期的な技術とは思わなかったな。日本語入力って、SKKもそうなんだけど、逐次変換で、結構、どうにかなるし。



 発明の対価を売上で計算するのは特許の基本だよね。



で、その特許が発明者個人に帰着するのか、会社に帰属するのかは契約で決まる。もちろん、その契約は「社会通念にそったもの」でなければなりません。売上げにまったく依存しない低い対価しか認めないことが、社会通念にそってないのは当然。それをリスクだとか言う経営者は、どうせ、他のリスクもマネジメント出来てないに決まってる。そのリスクは儲かったときのリスクでしかないし。



儲からなかった時のリスク、技術的課題を達成できなかったときのリスクは、結局、解雇とかの形で、技術者が負っている。技術者の給与は、雇用関係であって、リスクとは言えないよな。



IBM や Intel が特許と、それを発明した技術者を大切にしたのは有名。だから、IBMやIntel では、対価を要求するような訴訟は起きてない。あのアメリカでだよ?



僕の廻りの経営者より技術関係者は、高額な技術的対価に関して反対な人も結構いるが、100億円儲かった技術に対して一億円ぐらい出しておけば、問題なかったんでしょ? それを10万円とかにけちるのは、技術者の士気をくじくし、社会的通念としても通らないってことです。そして、それは、



 企業として社会通念に反した行動をするというリスク



にほかならないです。エレンブロコビッチでも、ボーナスは100万ドルだった。アメリカの成功報酬ってのは、そういうもの。



成功した役員の報酬は一億円ぐらい当り前なのに、成功した技術者の報酬をけちるのは理にかなってないです。技術者は営業してないとかのへ理屈で、当り前の議論が通らないのが不思議。

安里のサワディーは3周年



なので、結局、飲みに行くみたいです。年末だから、なんだかんだ理由付けて呼び出しが来るものだ。

ubu に「沖縄に来たのは今年だろ?」と言ったら「サワディーはその前からあった」とのこと。

最近は、夜もカレーがあるらしいです。そういうのは早く言ってくれ。

Tuesday 11 December 2007

Perl/Tk



授業で使おうと思ったら教卓のiMacで動かない。



install されているPerl が5.8.8 で、Tk が5.8.5 。つまり、EasyPackage のinstallしたPerl のversionがずれているだけらしい。



/usr/local/lib/perl5/site_perl/5.8.8 から 5.8.5 へsymbolic linkすれば動くかと思ったんだけど、なんかが足りないらしくだめだ。このあたり、古いmodule があったら、自動的にそちらを参照するという風にしてくれると良いんだけど。



まぁ、それは許すんだが、

  cpan install Tk

で、入れるんだけど、これが全然入らない。授業中に終らないってどういうことだよ? つまらない質問 yes/no? (Yes) で止まるし。



~root とか書いたら、~root とかいうディレクトリを作ってくれるし〜 rm -rf ~root ってやったら、どうするんだよ?!



cpan module 自体が複雑で、LWP, HTTP, XML, 圧縮とか入れまくっているので、そのupdate 自体に時間がかかりすぎるらしい。それは設計ミスだろ? boot module みたいなものだから、最小限の機能で作るべきだよ。



で、授業が終ってから、cpan install Tk すると、

「テストが通らなかったらforce されない限りinstallしない。」

とか(英語で)言う。テストが通らないのはX11上げてないからで、X11上げてもroot ではテスト出来ないんだよ。だから、Perl/Tk はテストが通らないのは仕方がないんだよ。



perldoc とか man cpan でも、どうやってforceするのかわからん。結局、ググって、

 cpan force install Tk

とやるんだってのはわかったが、



 やっぱり、cpan module は使い物にならん



ってのが僕の印象です。つうか、EasyPackage をちゃんとメンテすれば良いだけなんだが。



もっとも、Perl/Tk は Aqua で動かないのが致命的なんだよな。欲しいなら自分で作れと思うが、この手のGraphics library は手数が多いんだよ。とか言いながら、もしかすると、お正月のプロジェクトとして丁度いいかも、と思わないでもないです。:-p



Tcl/Tk に触るのは、もう嫌です。例え、裏でも。だから、Tkx は却下。

Monday 10 December 2007

週末はいろいろあります



結構、怒涛の週末で飲みまくってました。付き合ってくれた人ありがとう。潰してしまった人ごめんなさい。

今週末は、gcc の読み会らしい。その次は、REPの書き会があるらしい。それが終ると、東京です。

しばらく酒飲みたくない感じだ〜

Sunday 9 December 2007

語順が前のほうが攻め、後が受け



うーん、勉強になるなぁ。

激白! 腐女子のホンネ
 http://www.itmedia.co.jp/news/articles/0712/07/news063.html

パシフィコ横浜が聖地だとは知りませんでした。

ご結婚おめでとうございます




というわけで、結婚式には間に合いませんでしたが、披露宴で昼間っから飲んでます。



福岡で捕まえて、沖縄に持って来てしまったそうです。一種の「略奪された花嫁」ですね。



お幸せに〜

結婚式に遅刻しそう...



間に合わなかったら披露宴だけでいいか... おっと、御祝儀飲んじゃったよ。なんとかしなきゃ。

Saturday 8 December 2007

Java Kuche 勉強会中



今日は、Thread のお話。

でも、人が書いたコードは気になる。なんで、extends Thread しないんだよ〜 とか、なんで、ここで、Inner Class 使うんだよとか、なんで、int のcast があるんだよとか。

java.util.concurrent は、この間、一種のネットワークシミュレータを書いた時に、SynchronizedQueue とか Class LinkedBlockingQueue とかで結構はまりました。

この手の待ち合わせが入るAPIのマニュアルの記述を読むと、ちょっといらいらする。

put(E o)
Adds the specified element to the tail of this queue, waiting if necess
ary for space to become available.

put(E o)
Adds the specified element to this queue, waiting if necessary for anot
her thread to receive it.

この二つの差はいったいどこに? necessary とは一体どういう意味?

で、この手の記述は曖昧な言葉ではなくプログラムで記述するべきだと思う。 そこで必要になる言語は、 もちろん、仕様記述言語なんだけど、それに、また、「わけわからない待ち合わせの記述」が入ったんじゃ意味がないです。

でも、個々の問題に対して、こういう「便利そうな」抽象化された同期データ構造を導入したがる人は多い。80年代の並列オブジェクト指向言語でも、Future だの Stream だの become だの、たくさんありました。System C とかSpec C とかVHDL/Verilog とかでも、そんなのばっかり。うんざりです。

そのあたりで、同期機構自体を記述することの出来る言語が欲しいと思ったんだよな。

と、なんとなく初心に戻る感じです。

(昨日は4時まで飲んでいたので、まだ、酒が抜けてないです〜 咳もまだ残ってるしな〜)

Friday 7 December 2007

若狭のBar 鈴木



本土のお客さん達と、 void と若狭のBar 鈴木に来てます。

明日は、Java Kuche の勉強会と忘年会。翌日は、結婚式と、飲み会が続くようです。

風邪? まぁ、酒飲んでいる間は、気にならないようなので。(治ったってことでしょう)

スペインの猫



マドリードでは、見掛ける暇はなかったんだけど、セビージャ、グラナダでは結構、見掛けました。観光地の猫は、居心地いいみたいだね。



http://www.ie.u-ryukyu.ac.jp/~kono/picture/2007-cats-in-spain/2007-cats-in-spain.html



あぁ、たぶん携帯では見れないんじゃないかな。ブラウザによるだろうけど、結構、でかいので。

Thursday 6 December 2007

2台でも安心できない



2006年のシステム更新(単年度のみ)の直前は、学科のサーバが落ちまくってました。

 http://mixi.jp/view_diary.pl?id=29095341&owner_id=2510

このあたりとか。RAIDサーバ2台も同時に壊れるとかいう技を出してたし。

でも、原因もわかっていて、2002年のシステム更新の時にサーバを安物にしすぎたからからなんだよな。まぁ、2005年まで持ったんだから悪くはないんだけど。

どうして2005年になって落ちまくったってのも原因があって、ハードディスクを増設して電源容量が足りなくなったから。このあたりだと、個々の電源の個体差あたりも効いていたらしい。そういえば、Sun Enterprise 3000 が入っていた時も、ハードディスクを増設した直後にふっ飛ばしているんだよな。あの時も結構困ったっけ。ソフトウェアのライセンスサーバがSunだったので。ハードディスクが高回転化して電力食うようになった頃だったんだよな。

RAIDは基本的に信用してないので、HDD8台のRAIDを2台使ってました。最初は1台だったのだが、とらぶったのを機に1台増やしました。これも、Logitech の安物で、かなり壊れました。移行した時には2台とも壊れてました。

そういうわけなので、2005年はかなり不幸だった記憶がある。でも、後半になると、その電源の問題が判明して、一気に安定してしまう。それはそれでつまらない。

 http://mixi.jp/view_diary.pl?id=115381281&owner_id=2510

とかでも書いてるな。

2006年からはHPのDL380 x 4 (RAID x 2), Xserve x 4 (RAID x 2) という構成になって、これが全然落ちない。

 つまんないです。

なので、毎年、Fedora Linux のversion を上げてます。2.5 inch SAS RAID ボードがささっているのだが、これが高速で信頼性が高い。すばらしい。さすが、金かかっているだけある。(2002年に入れたのと10倍ぐらいの差がある... 2002年のがいかに安物だったか...) 微妙にお金が余っていて「Xserve x 4にしようか、HP x 4 にしようか?」「えーい、両方、入れちゃえ」だったはず。

「SASが信頼性が高いなんて神話でしょ。SATAで入れてくれ」って僕が言ったのを業者さんに「お願いですからSASの仕様にして下さい」と言われてSASになったわけなんですが、まぁ、そういうことなのかも。やっぱり、SAS/SATAは選別してんじゃないの?

Cisco のルータもエンジンは二重化してあってホットスタンバイだったのだが、途中から片方壊れていたと言うのが、リース切れした後で発覚してたし。

もっとも、180台のクラスタの方は、順調に落ちていて、楽しめそうです。

ルータ欲しい



風邪は一進一退です。長引くな。酒飲むと喉の調子がいい気がしないでもないが… 人に伝染しまくってもしょうがないので、今日はお休みします。明日は、しょうがないので出ます。

光電話/光プレミアムは快調です。IPv6 なのに IPv6 が通らないのはitojunへの当てつけか?

だが「プロバイダとPPPoEで接続」というオプションがある。これがあれば、IPv6 は通るらしい。ところが、

「本機能は、CTUのLAN側ポートに接続されているルータ等から、PPPoEを利用してインターネット等へ接続する場合に使用します。」

えぇ〜? NTT西日本の光電話って、

 CTU (ルータ)
 光モデム
 VoIP アダプタ

と三つ箱が来るんだよ。(東日本は二つらしい) それに、さらにルータを繋げってこと?

で、手持ちのルータは、IPv6 対応じゃありません...

MBP17 から無線LAN経由でPPPoE出来るはずだと思うんだが、うまく繋がらないみたい。

@nifty 側の設定にもよるんだと思うんだけど...

もっとも、ルータなんてのは買わずにもらって来るもんだと思わないでもないです。

Wednesday 5 December 2007

風邪



Cafe Kuche のママに伝染してしまったようです。ごめんなさい。

まだ、ちょっと残っているんだよな... うぅぅぅ。休むか。

土曜日の準備をしてますが、Java の Thread で同じファイルを同時に開けると、非常に面白い動作をするのね。まぁ、やっちゃいけないことの一つだな。

Tuesday 4 December 2007

プロジェクタとVNC



321教室においたiMacが、どうしても教卓からどけられてしまう。なので、「どうせ、要らないんだったら」と、外していました。

なんだが、自分のノートPCをつないで授業をしようとすると「教卓にいって操作する」ってのがうっとうしい。おかしいなぁ、iMac でやっていた時は、それほど気にならなかったのに。

なので、サーバ班に頼んで再設置してもらいました。だが、DVI/miniDVIアダプタがない。それがないとプロジェクタにつながらないんだよ! で、授業に出ていたサーバ班に頼んで取って来てもらう。なんだが、授業中なんで微妙に繋げられませんでした。

で、ノートPCからiMacにVNCでつなげれば、プロジェクタの表示を見ながら操作できる。便利〜と思ったら妙に遅い。

だから、321教室の無線LANは先生専用なんだってば。学生は有線でつなげろと言っているだろ。でも、もしかすると、向かいの工学部2号館の無線LANとの干渉かも知れないです。というか、きっとそうだ...

もっとも、学生もVNCしてやればいいんだよね。60台VNCつなげるとさすがに重いのだが、意外にちゃんと動きます。

でも、肝心のプロジェクタ2台の片方が「暗い」。1年経ってないのに故障かぁ。困ったなぁ。

Monday 3 December 2007

12/8 Java Kuche 勉強会



 http://mixi.jp/view_community.pl?id=954487

というわけで、12/8は村田さんと僕が担当です。Thread と Java PathFinder をやります。

ちなみに、このJava Kuche の名前は、Cafe Kuche

 http://mixi.jp/view_community.pl?id=793174

これから来てます。資料作りは、もちろん、そこでやってます。というか、これから、やらねば〜

風邪は治ったみたいだが(まだ、少し喉は変だが)、あんまり寝つけないので、やっぱり、酒のみに行けば良かったかと反省中。ま、寝つけなければ仕事すれば良いだけだが。

あ、そうか、大学のアカウントの準備をやっておかないと。この間は、手動で作る羽目になったんだっけ。

Sunday 2 December 2007

入居資格ない長岡市幹部が仮設住宅に



http://news.mixi.jp/view_news.pl?id=352795&media_id=2

このニュースに、

http://mixi.jp/view_diary.pl?owner_id=1384060&id=641528333

ニュースは一方的な視点から発せられるもの
http://mixi.jp/view_diary.pl?id=641459345&owner_id=12290024

という反応ですか。どんな風に読むかは読む方の勝手ですけど。面白いと言ったら怒られるか。

どっちかっていうと、
  特別職には『通勤』『住宅』などの諸手当はなく
がかわいそうだと思いました。ただ働きを尊ぶ文化だからな。

プラネテスとMoon Light Mile



昨日は、一応、飲みに行ったんですが、早めに帰って来ました。頭洗ったところで、ちょっと力尽きてて、やめようととか思ったんだが... もっとも、泡盛1合はしっかり空けて来ました。もう少し度数が高い方が痛んだ喉に気持良いかも。

プラネテスはNHKで、Moon Light MileはWOWOWだな。近未来宇宙物なので、似てる。後者の方がより現実に近いはずだが、それはないだろ的なところも結構ある。

Moon Light Mile は、どうも好きになれなくって。プラネテスは、はっきり子供の視点で、出て来る人物も大人のカッコしているが全員子供なんだよね。反抗的で子供っぽい夢を持っていて、みたいな感じでさ。

Moon Light Mile は大人の視点が中心で、それがつまらない感じ。大人の論理って、結局、廻りの流れに合わせるってだけ。それがくだらないってわかっていて合わせるのが大人なんだとすれば、そこには面白さは露のかけらもないです。くだらないだけ。

月に行くとか、月に基地を作るというだけじゃぁ、夢としてもはや足りないんじゃないかな。だから、そこにヘリウム3とかの「大人的な言い訳」を付けるわけだけどさ。でも、月から地球に資源を送るってのは非現実的だろ?

その場で使うってなら、まだ理解できます。ってわけなので、どうせなら、恒久的な月基地でしょう。もっとも、そこに住むのに人間が良いとは思えないですが。電子チップを埋め込んだ昆虫とかが良いんじゃなかろうか〜

Saturday 1 December 2007

マウスとBluetooth



風邪は『だいぶ良くなって来た気がする』なわけなんですが、コンピュータに向かうと気にならないレベルになったかも(ぉぃ)。きっと、今晩は飲みに行けるでしょう。そのために金曜日休んだわけなので(ぉぃ)。

スタパトロニクスTVで相変わらずロジクールのマウスとかをやってました。無線マウスは、この間 Sunの人が持って来たおみやげって言うか、わいろっていうか、そんなのを一つ持ってます。

で、一つ疑問。Bluetoothってどうなったんだよ。おみやげマウスも、ロジクールもUSBの無線アダプタがあって、それを使って接続する方式。まぁ、2.4GHz とか書いてあるから、そのアダプタがBluetoothなのかも知れないが、少なくともBluetoothとは名乗れないらしい。どうも、ノートPC自体がBluetoothをサポートしてないらしい。(MBP17は、もちろん、持っている)

 http://pc.watch.impress.co.jp/docs/2006/0927/hot447.htm

とかでも「なぜ国内向けのノートPCではBluetoothがサポートされなくなってしまうのか。筆者はいくつかのメーカー担当者に質問したことがあるのだが、ハッキリした答えが返ってきたことはない。回答に共通しているのは、Bluetoothモジュールのコストが理由ではない、ということである」とか、怪しい話が...

もっとも、PowerMac G5 について来たワイヤレスキーボードとマウスを使った時には、PC側にアンテナを付けないとだめで、付けても、結構不安定な動きで「結局、だめじゃん」みたいな感じで有線でつながれてました。

Bluetooth は 802.1b と、ほとんど同じ規格で色を付けるためにマウスとか携帯電話とか言い出したみたいなところがあって、僕はダメだと思っていたんだが、しぶとく生き残っているなと思っていたんですが、やっぱり、ダメだったってことなの? Bluetooth の方が低消費電力とかいう話もあったがたわごとだったと思ってます。

つうか、携帯電話に付けるんだったら、BluetoothじゃなくてWifiだろ? って、Bluetooth も一応 Wifi ではあるんだが... Wifi base のOBEX だって、いいじゃんと思うが... つうか、IP アドレス振れて ping 打つと光るぐらいの技出せ。

つうわけなんで、Bluetoothダメダメなら、別にそれでもいいです。

まぁ、僕はタッチパッド/アキュポイントユーザで、図もそれで書いてしまうので、マウスなんてどうでも良いんですけど。そのおみやげマウスもほとんど使ってないし。