«前の日(07-20) 最新 次の日(07-22)» 追記

Matzにっき


2003年07月21日 振替休日

_ [家族]温泉解放日

今日は玉造温泉旅館協同組合の温泉解放日で、加盟15旅館の大浴場を無料で解放するというイベントがあった。

ここに引っ越してきてもう6年になるのだが、 年に1度2日間だけ無料解放するこのイベントに参加したことはなかった。 今年はちょうど予定がなにもなかったので、家族みんなで温泉に入ることにする。

しかし、

  • 玉井別館
  • 有楽
  • 白石屋

と3件入ったところで、のぼせてくる。このペースでは15件全部に入るには、 あと5年はかかるな。

しかし、歩いて温泉旅館のはしごができる環境というのは幸せな気がする。

_ [Ruby]デバッグ

自宅がADSLになったので気楽にCVSコミットができるようになったのは良いが、 調子に乗ってバグが残ったままコミットしてしまったのが数件。すいません。

で、直したバグのリスト。

  • numeric.c (num_equal): should not use rb_equal().

    a <=> b がnilの時には、==もnilを返すように。 [ruby-dev:20759]での斎藤さんの指摘を受けて

  • string.c (rb_str_equal): should return nil for non string operand to conform comparable convention. [ruby-dev:20759]

    同上。to_strがない場合にはfalseでなくnilを返すように。

  • lib/tmpdir.rb: new library to get temporary directory path, using GetTempPath on Win32 environment.

    Win32環境ではGetTempPathというAPIがあるそうなので、それを使う。 「これでWindowsでは/tmpがない」という苦情に対応できるか。 もっとも、セキュリティ的に大丈夫かという不安は残る。

  • lib/tempfile.rb: now uses tmpdir.rb.

    新しく作ったtmpdir.rbを使うように。

  • lib/cgi/session.rb, ib/drb/unix.rb: ditto.
  • string.c (rb_string_value_cstr): check null byte in the string before retrieving C ptr. accessed via macro StringValueCStr.

    StringValueCStrというマクロを使うとstringが\0を含んでいるかどうかチェックする。

  • file.c: use StringValueCStr to retrieve paths to system calls.
  • file.c (sys_fail2): raise error for two operand system calls such as rename, link, symlink. (ruby-bugs PR#1047)

    2引数のシステムコールで両方のパスを表示するように。 allocaを使うのは不用意だろうか。


2004年07月21日

_ [OSS]真のオープンソースを目指して

えーと、逆ギレですか?

BSDの方が好きって人は多いだろうし、その方がより自由だと感じる人もいるだろう。

また、GPLではプロプライエタリなソフトウェアには組み込めないのだから、 「目的を問わずソースコードを再利用する自由」はGPLにないというも事実だ。

とはいうものの、これはやっぱりひどいんじゃないかと。

個人的には、 これからソフトウェアをオープンソースとして公開する時にどのライセンスを選んだらよいか迷ったら、 とりあえずGPLを勧める

その理由は

  • あなたが企業であれば、自分の成果物に只乗りされることには説明責任が伴う。 GPLであれば、ソースコードはオープンソースにとどまるので、 少なくとも他社に一方的に益することはない。
  • あなたが個人であれば、自分のソースコードがいつまでもオープンソースであることが保証された方が 気分が良いことが多いだろう。世の中にオープンソースソフトウェアが増えることに貢献できるかも。

というものだ。

もちろん、それ以外の理由があって(たとえばBSDライセンス・ラブとか)積極的に 別のライセンスを選びたい人は、なんの引け目もなくそれを選べばよいと思う。


2005年07月21日

_ [言語] Perlの文法を持ったJavaベースのスクリプト言語 - Sleep 2.0公開

JVM上で動作するスクリプト言語がまたひとつ。

ま、いろんな言語が登場するのは良いことだけど、Sleepに関して言えば すくなくとも外見からはあまり魅力を感じない言語ではある。やっぱ、Perl(の文法)に影響を受けるとどう転んでも美しくない。

しかし、MYCOM PCは(Java関連の)オープンソースソフトウェアを紹介してくれるのは ありがたいけど、情報元へのリンクがないのがいただけない。 たとえばSleepだったら「The Sleep Scripting Project」への リンクがあってしかるべきではないだろうか。

_ [Hack]今日のハック

tDiaryがアップデートされてCSRF対策が行われたのはよいが、 おかげでtdiary-mode.elから更新できなくなっていた。 http.elとtdiary-mode.elの最新版を入手し、 変更点をマージした。

手元のものは

  • html-modeではなくrd-modeベース (tdiary-mode.el)
  • update後、自動的にreplaceモードに (tdiary-mode.el)
  • ssl.elを使ったSSLアクセスに対応 (http.el)

という変更が加えられている。

_ [Ruby]lambda式

先日来考えているlambdaについてだが、 以下のようなものを考えている。

  • 「->(a){...}」でlambda式を表現する。
  • lambda式のパラメータはメソッドのパラメータと同様の形式が指定できる。オプション引数などもあり。
  • 1.9で導入された「{|a|...}」形式は取り止め
  • 「ary.each -> x {puts x}」という形式も許す。これはlambdaを引数とする「ary.each(->(x){puts x})」ではなく「ary.each{|x| puts x}」を意味する。

yacc記述はなんとかなりそうだが、メソッドの引数部分と ブロックパラメータの部分の実装が違いすぎて、動かすのは大変そう。


2006年07月21日

_ 分散バージョン管理

昨日、Rubyに対して行った修正を「変更毎にコミットしてください」というリクエストに応えて、別々に分解しようと思ったら、失敗して妙なものまで混じってしまった。

こういう失敗は、私がうっかりものだからで、珍しくもなんともないのだが、 それはそれとして「繰り返される失敗には手を打つ必要がある」ものだ。 ここは運用なりツールなりでカバーしたい。

で、その前に「なぜ失敗するか」を分析する必要がある。 なぜ繰り返し失敗するかというと、 つまり細かくコミットすることが求められているのに、 コミットできないことがあるからだ。

なぜコミットできないかというと、その理由は以下のいずれかだ

  • オフラインである (CVSにコミットできない)
  • 大きめの作業中である

前者については、私の開発サイクルが

  • バグ同定
  • バグ修正
  • ChangeLog記録
  • コミット

となっているのだが、ここでオフラインだとコミットができないまま、 次のサイクルに突入してしまう。となると、次回オンラインになったときに これまでの修正が一気にコミットされてしまう。

後者は「ブランチを切れ」と言われそうだが、CVSではブランチを切るのが非常に面倒な上、 正直どうやって扱ったものだかよくわからない。 ま、要するに、オフラインでリポジトリを操作できなかったり、 ブランチの扱いが難しすぎるCVSがいけないのだ。そうだ、そうに違いない。

分散バージョン管理システムがあれば問題(の一部)は解決しそうだ。

とはいえ、そう簡単にCVSから乗り換えられない。 数十人いるコミッタ全員が他のツールが使えるかどうか確認するのも大変だし(メジャーなものなら大丈夫だと思うけど)、 バグトラッカとの連携など周辺ツールも新しいバージョン管理ツールで用意するのも面倒だ。

考えるに、中央にCVSを置く現在の運用を維持したまま、 手元に別のバージョン管理システムを置き、 それらを双方向に同期させることができれば、 問題は解決するということではないだろうか。

開発は今まで通り、上記のサイクルで行い、 オンラインになった時点でCVSと同期すればよい。

ちょっと調べた範囲内では、

  • svk
  • tailor
  • git

などがCVSとの双方向同期ができそうである。

_ 月刊ASCII 2006年8月号

ようやっと入手。この号で今まで慣れ親しんできた「月刊ASCII」は休刊。 近日再刊予定だそうだが、それは今までのASCIIではない。

なんて、ちょっと感傷的な書き出しではあるが、 実際問題として「現在のASCII」と、「私が慣れ親しんだASCII(1980年代のもの)」が 連続しているとは「同じASCII」であるかについては、やや疑問がないでもない。 事実、ここ数年月刊ASCIIを購入していないし、立ち読みで眺めてみることさえしていなかったのだから。それは私自身が変わってしまったこともあろうが、主に「より一般向け」になってしまった雑誌が私から遠くなってしまったということであろう。

以前、「SuperASCII」という非常に通好みの雑誌があって、 それが休刊するときには非常に残念であったが、 間接的に聞いた(元)編集長の話によれば、 「あなたたち(私の同類)が喜ぶ雑誌では商売が成り立たない」のだそうだ。 それはそれでもっともなことであるし、文句のつけようもない 出版業界の現実なのであろう。

それはそれとして、最終号、完全保存版である今号は かつての懐かしい記録がたくさん載っていて懐かしいやらうれしいやら。 これらの雑誌の一部は今でも実家の倉庫に埃まみれになって埋もれているに違いない。


2007年07月21日

_ お見舞い

今度は妻と息子と末娘を連れてお見舞いへ。 姉たちはやはり部活。

コルセットが効果を発揮して、すいすいと歩けるようになっていた。 外すとまだグダグダだそうだが。見かけ上かなり健康そうに見える。

_ 人気のAPI/フレームワークを作るための39カ条 - @IT

39は多いので全部は紹介しないけど、 これはAPIとかフレームワークに限らず、ソフトウェアデザイン全般に有効であろうと 思うものがほとんどであった。

少なくとも言語設計には応用可能である。 まあ、考えてみれば、言語を構成するものは 文法とライブラリであるが、割合としてはライブラリ(つまり、API)なのであるから 当然と言えば当然か。

_ [Ruby] やむにやまれず:Rubyは遅いから使えるのです

Rubyを使うのはその柔軟性や生産性のためで、 他の言語でそれを達成するためには、結局自分でそれらを実現しなければならない。 野良フレームワークでそれを実現しようとすると

  • 一人(or 少数)で作っているから、品質が高くならない
  • パフォーマンスが目的で野良を選んだはずなのに、結局、だんだんパフォーマンスが低下する

破目になってしまいがち。つまり、Rubyが遅いのはそれなりに理由があるということ、という話。

実際にはRubyが遅いのには別の理由(まつもとの能力の限界)もあったりするんだけど、 それはそれとして、グリーンスパンの第10法則というのはそうやって あちこちで繰り返されるんだねえ。

_ スターロジック,人月商売の悪弊がはびこるSI業界に成果物価格で挑戦 - ものづくりとIT - Tech-On!

顧客にマジカで分析してもらって、タスクカード1枚8万円と言う値付けで開発する というビジネスモデルを採用、もう人月モデルには戻らない、という話。

諸悪の根源は見積もりの不確定さだと思うので、 顧客によるある程度の分析が行われることで、見積もりの確度が上がれば、 人月モデルとサヨナラできるのかもしれない。

予想される問題は、このビジネスモデルは「顧客の怠惰さ」を過小評価している点ではないか。

SI屋: まず、業務を分析してください。その結果のタスクカード1枚ごとに8万円で開発します。

顧客: えー、分析ぃ? めんどくさい。そんなにコストがかけられないから開発をお願いするわけで。分析も設計もそっちでやってよ。

これもまた、見積もりの問題である。


2008年07月21日

_ 結婚式

無事、福岡到着。

そういえば福岡神殿での結婚式には、私ははじめて出席するような気がする。

今日は三組も結婚式があった。私が出席したのは二組目だったのだが、 直前の式(こちらは私の知人の知人)と、私の出席した式とでは 同じ結婚式とは思えないくらい雰囲気が違っていたのが印象的だった。

やはり当人たちのキャラクターが大きく影響するのだなあ。

友人たちは車で帰るが、私はRBC設立1周年記念セミナーに参加するため、福岡に残る。

お昼は天神でホルモン焼きを食べる。うめぇ。

_ Skype不調

ホテルに居たら家族からSkypeがかかってくる。

しかし、こちらの音声が入力できない。 スピーカーから自分の声は聞こえるのに、 先方には届かない。

どうもデバイスがおかしいようだ。

arecord -vv -fdat /tmp/sound.wav

としても録音が行われない。

検索しても似たようなトラブルを経験している人はいるが、 解決策は見当たらないようだ。

snd-hda-intelに適切なoptionを指定すればいいんだろうか。

追記

うえはらさんから情報をいただいた。

alsamixerのcaptureを有効化することで問題は解決した。 同じ問題にぶちあたる(かもしれない)人のために手順を再掲

  • alsamixerを起動
  • micがmuteになっていないことを確認
  • muteになっていたらmでmute解除
  • tabでcaptureに切り替え
  • input sourceがmicになっていることを確認(ここまではできてた)
  • captureのレベルを上げる
  • 有効化されていなかったらspaceで有効化(これができてなかった)

«前の日(07-20) 最新 次の日(07-22)» 追記