2009/12/31

Last day of 2009

あと数十分で2009年も終わる。この一年はどんな年だったか、ちょっとだけ書いてみる。

ざっと言えば本を出すのに協力したりだとかコード書いたりだとか仕事したりだとか、そんな一年だった。けど、自分が志向してる方向が変わっているのは間違いない。一応Web業界の動向も追い続けてはいるけれども、もっとレイヤの低い方向に近づいている感じ。

脚を洗いたいと思う一方で結局今年は「完全には」洗えなかった。自分が進もうとしている方向に迷いがあるのも事実だろう。自分が気に入った方向、居場所とはどこか。それに答えが出たとき、もっとアクティブに動ける気がする。

なんだかんだいって、今年も沢山の人にお世話になりました。来年も宜しくお願いします。

2009/11/29

footprint note

足跡帳って、足跡を残すページにhttpリクエストを出させる画像やスクリプトを仕込んでおけば誰でもできるし、多分やってる人多いんだろうな、と思った。ログインしっ放しな人が大半なのをうまく利用していて、別にクリティカルな害は無いけどCSRFっぽいよね。

自分が見えないところでいろんなhttpリクエストが発行されるのは本当はヤだけど、もはやそれは当たり前だし、不可避なんだよね(´ー`; )

----

と、はまちちゃんのエントリを見て思いました。まる。

my lovely girl sensor

いろいろな人と話をしていると、どうも自分は「賛否両論分かれる」女性を選ぶ傾向があるようだ。
人の容姿の好みなんて千差万別なのは明らかなんだけど、俺はどうもそれがズレているらしい。

----

OK な女性:

※ 特に女性からはウケがよくない。男性から見ても賛否両論

- 松たか子(女優)
- 首藤奈知子(NHKアナウンサー)
- 小林摩耶(フリー/元TBSアナウンサー)

違うな、と思う女性:

※ ここに属する女性に対しては辛口なコメントを加えて女性から「えー」と言われる。男からも「あんたキビシイね」と言われる。

- 枡田絵里奈(TBSアナウンサー)
- オバマ大統領の後ろにいた謎の中国人女性

2009/11/02

wii fit plus

初級15分の運動強度で死亡したので に行かなくて良かったと思いますた(一行独白

# もはや lazy-people ではなくて Perl登山部 と改名したらどうか(*゜ー゜)

mythbusters collections 2

http://dsc.discovery.com/fansites/mythbusters/mythbusters.html

俺と相方は共通の趣味が恐ろしく少ないのだが、ディスカバリーチャンネル の「怪しい伝説」は二人とも好んで見ている。これは都市伝説とも言うべき怪しげな命題を「科学的に、時には理不尽に」検証する番組だ。有料番組である。

どんな番組か知りたい方は、その一部 をネット上でも見ることができる。

二人とも英語を聞き取れもしないくせに字幕無しの Mythbusters: Collection 2 を買うという無謀っぷり。俺英語の聞き取りは非常にヤヴァイんですが(´ー`; )

2009/10/15

various Gravity

今や携帯やゲームのコントローラーで一般的になった加速度センサー。Android もそれに対応していて、Java を通じてハードウェアに加えた加速度の値を取り出すことができる。ただ、Android が載っている Linux の仕組み上、ハードウェアに直接 Java がアクセスできるはずもないので、C(++) のコードを経由してデバイスドライバにアクセスする。

----

ところで、Android で加速度センサーにアクセスする C(++)のコードを実装するには、必ず特定のヘッダを実装しなければならない。それが sensors.h だ。加速度センサーは今いる場所の重力加速度(※)を基準にした値がハードウェアから渡ってくることが多いので、上記の sensors.h にも いろいろな場所の重力の値が定義されている。それを以下に引用しておく。

/**
* Values returned by the accelerometer in various locations in the universe.
* all values are in SI units (m/s^2)
*/

#define GRAVITY_SUN (275.0f)
#define GRAVITY_MERCURY (3.70f)
#define GRAVITY_VENUS (8.87f)
#define GRAVITY_EARTH (9.80665f)
#define GRAVITY_MOON (1.6f)
#define GRAVITY_MARS (3.71f)
#define GRAVITY_JUPITER (23.12f)
#define GRAVITY_SATURN (8.96f)
#define GRAVITY_URANUS (8.69f)
#define GRAVITY_NEPTUNE (11.0f)
#define GRAVITY_PLUTO (0.6f)
#define GRAVITY_DEATH_STAR_I (0.000000353036145f)
#define GRAVITY_THE_ISLAND (4.815162342f)

こんなところに Android 持ってかねーYO! という値がたくさん定義されている。誰か DEATH STAR に Android を持っていった人、是非重力加速度の具合を体で感じ、俺に是非教えてください。

----

(※)地球の場合 9.8 m/s^2。物理でやったよね! 俺はスカーリ忘れてた

2009/10/13

incresing age

節目の日を迎えた。だからというわけではないけれども、Ethnaプロジェクトで自分がとろうとしているスタンスについてアクティブなメンテナに告げた。いろいろな意味ですっきりした。

いわゆる「自分探し」をプログラムを読みまくってやっているというのも、自分らしいと思う。現状維持ではしょうがない。プライベートが大きく変わる一年でもあるし、いろいろな意味で節目の一年にしたい。

2009/10/02

sed as grep replacement

デーモン化したプログラムのログを syslog に吐かせていて、そのログのみを抽出したいと考えた。だが、grep(1) もない、awk(1) もない。テキスト系のプログラムで役に立ちそうだったのは cat(1) と sed(1) だけであった ....

サーバやPC上のUNIXで作業をするときは上記のような環境は考えられないわけだが、組み込み環境ではフットプリント(ストレージの消費量)を抑えるためにそういうことが往々にしてある。要するに、sed を grep の代わりとして使いたいわけです ... と思ったとき5分くらい手間取ったのでメモしておく。

----

たとえば、search.txt から regex にマッチする行だけを出力したい場合は、以下のようにする。これは /regex/ という条件文を ! で否定し、d で「マッチしないものを削除する」ことにより、逆にマッチするものを出力するという変なことをしている。

cat search.txt | sed -e '/regex/!d'

正直、こんなことをするのは組み込み環境以外ないし、どうでもいいっちゃいいんだけどね(藁

2009/10/01

[memo] malloc, free(3)

http://www.linux.or.jp/JM/html/LDP_man-pages/man3/malloc.3.html

考えてみれば当たり前なんだけど、free(3) に渡すポインタは malloc(3) 等から返ってきたポインタ「そのもの」でなければならない。以下のコードは FreeBSD 6.4 Release だと実行時に「warning: modified (chunk-) pointer」という警告が出る。Linuxだとアボートする。



バッファに構造体の中身をコピーするようなコードを書いているときに、上記のような間違いを犯したことがあるので記録しておく。

vital work

http://www.amazon.co.jp/dp/4756116396
Programming is a marvellous, vital, challenging activity, and books on
programming should brim over with enthusiasm for it!

(プログラミングとは、素晴らしい、生き生きとした、挑戦的な行為であり、プログ
ラミングに関する書籍は、それへの熱狂で溢れかえっているべきなのだ!) (※)

同僚に貸していた「エキスパートCプログラミング - 知られざるCの深層」が手元に戻ってきたのでパラパラめくってたんだけど、何度読んでもいい本だ。内容もさることながら、訳が素晴らしい。もし技術文書の翻訳を仕事にする機会がまたあるなら、こんな仕事をしてみたいと思う。

(※) P19. Preface より引用

2009/09/30

blank for a month

本を出版する作業が落ち着いてから約一ヶ月。何かに追われているような感覚を取り除くべく頭の中身を空っぽにすることにした。

twitter を見てもいないし、書いてもいない。IRCも(一部の例外を除いて)同様である。プライベートでプログラムも殆ど書いていない。こういう生活を一ヶ月強続け、生活のバイオリズムを真っ当なレベルに引き戻してきた。外部からの刺激を遮断するのは俺の職業においては基本的に褒められたことではないのだが、ただ、楽しめなくなってしまうと仕事もライフワークも危険な状態になる。それだけは避けたかったのである。

ここ一ヶ月を振り返ってみるとやっぱり何か足りないよね。ですよねー。とたびたび思ったのも事実なので、明日から月がインクリメントされるのを機会に少しずつ軸足を元に戻していこうと思う。このエントリはそのための一歩である。

2009/08/23

raw Komatsuna

http://cookpad.com/category/626

ある夜、無性にサラダが食べたくなってそこらへんにあった小松菜と胡瓜を生で切り刻んで食べたのだが、、、小松菜の後味が微妙に苦くてよろしくなかった。
ちょろっと調べてみたら炒め物やおひたしで利用するのが通常らしく、生で食うもんじゃないらしい(´ー`; )

2009/08/21

if statement without bracket

C言語で書かれた以下のコードは合法だし動くんだけど、正直やめてほしい。わかるんだけど気持ち悪くてしょうがない。好みの問題かしら、、(汗

こんなコードが某デスクトップの某巨大ライブラリには浴びるほどあるわけです。全体的な傾向としてはわかりやすいし好きなコードなんだけど、上記だけは僕的にいただけないです。

2009/08/19

[memo] make is NOT always GNU make

http://www.freebsd.org/cgi/man.cgi?query=make&sektion=1

当たり前のことではあるが、makeコマンドで実行される make が必ず GNU Make とは限らない。FreeBSD における make は BSD make であり、GNU make は gmake コマンドである。

Linux, Mac OS X においては、make は GNU make と見て差し支えない。Mac OS X での BSD make は bsdmake である。くれぐれも GNU脳にならないように>自分

Solaris とかだとどうなるんだろうね。

----

※GNU脳になってしまっていてよくひっかかる別のコマンドとしては、tar コマンドや cp コマンドが挙げられる。特に後者は Mac OS X の cp に -a オプションがないことに驚愕した苦い思い出がある。

2009/08/12

[memo] thread safe and portable random function?

スレッドセーフで移植性が高いrandom関数って書けないかしらん。と少し悩んで以下のように書いた。


型の問題を差し引いたとしても、残念なことに上記は移植性がない。関数 [d|s]rand48_r が GNU による拡張だからである。うまい方法を御存知の方がいらっしゃったら教えてくださいませ(´ー`; )

[ Update August 13th 0:03 JST by m ]

pascal君から指摘があったので全面的に書き直しました。古いバージョンは一度だけ呼ぶべき srand48_r関数 を毎回呼んでいました。指摘さんくすです。

2009/07/26

Mt.Jinba

http://www.takaotozan.co.jp/cource/cource08.htm

(※)写真に映っている人物は現実とは一切関係ありません。vkgtaro これを写す。

・・・なわきゃーなくて、irc.lazy-people.org の方々と高尾山経由で陣馬山に行ってきました。リフト経由で高尾山の頂上へと行き、小仏峠、景信山経由で陣馬山へ。約20kmの行程でした。

正直な感想として、普段脚を使っていない人はこのコースを甘く見ない方がいいですw 以前登った高尾山の6号路よりもアップダウンが激しく、結果として脚を使います。「mumumuのおっさんが完走できたのは驚き」と tomyhero が語るように、僕はいつも最後尾で皆から平均10分遅れくらいでした。足を引っ張ってしまってスミマセン(´ー`; )

さらに注意すべきなのが下山ルート。本当は和田峠経由が王道のルートなのでしょうけど、下山を始めたのが17時だったので最短のルートを選択した結果、忍者か修行僧でなければ通らないだろうと思われる最悪の傾斜の道を歩くことに。生きて帰れたのが不思議なくらいです。普段の足腰の差がこういう状況になると露骨に出ます。おそらく皆から30分遅れくらいだったんじゃないかしら(藁

・・・ということで普段運動をしていない人は高尾山で脚を鍛えましょう。僕は今体の上下ともに非常に痛くて立ち上がるのにも一苦労です。lazy-people.org の皆様、僕を要所要所で待っていただいてありがとうございました。

2009/07/23

オープンソースソフトウェアの育て方 (3)

「オープンソースソフトウェアの育て方」を2部、欲しい方に差し上げます、と前回のエントリでアナウンスしたのだけれども、早速抽選しましたので結果を以下に公表します。

エントリ頂いた皆様、本当にありがとうございます。7名も希望者がいらっしゃるとは正直思いませんでした。

抽選手段は以下の通り SQL によるランダム抽出(※)であり、僕の主観は一切入る余地がありません。当選されたのは junjun さんと masugata さんです! おめでとうございます! 僕のメールアドレス mumumu at+ mumumu dot org に本の送付先を教えて下さい。(at+ は @ に、dot は . に置き換えてください) 送付先を伺い次第、発送させて頂きます。

残念ながら外れてしまった皆様、差し上げたいのはやまやまなのですが、、ごめんなさいです。Webサイト または リアルの本屋さんでの購入をお願い致します。

test=# select CURRENT_TIMESTAMP;
now
-------------------------------
2009-07-23 00:35:11.345851+09
(1 row)

test=# select * from possjp_drawing ;
winner_c | entry_url
-----------------+--------------------------------------------------------------
Nully | http://blog.magical-remix.net/urame/archives/564
kinneko | http://d.hatena.ne.jp/kinneko/20090718/p2
ita-wasa | http://d.hatena.ne.jp/ita-wasa/20090718/1247906897
junjun | http://junjun.haun.org/d/index.cgi?d=20090722#20090722-1-2-1
masugata | http://d.hatena.ne.jp/masugata/20090722
02034 aka garo2 | http://d.hatena.ne.jp/Garo_unst/20090722
testu | http://mc255dqn.dtiblog.com/blog-entry-874.html
(7 rows)

test=# select winner_c as winner, entry_url from possjp_drawing order by random()
limit 2;
winner | entry_url
----------+--------------------------------------------------------------
junjun | http://junjun.haun.org/d/index.cgi?d=20090722#20090722-1-2-1
masugata | http://d.hatena.ne.jp/masugata/20090722
(2 rows)

(※) 上記は PostgreSQL 8.3.7 での結果であるが、MySQL でも random() を rand() に置き換えることで同じことができる。これは、random な数値を1カラム付け加えてソートすることで、少ない数が割り当てられた上位2名を当選者としている。

尚、この抽選方法は L_star氏 に教わったものである。この場を借りて御礼申し上げます。

2009/07/18

オープンソースソフトウェアの育て方 (2)




















さて、先のエントリに書いた「オープンソースソフトウェアの育て方」ですが、上の通り見本が手元に届きました。ざっとチェックしたんですが、オライリー・ジャパンらしく編集してありますね。id:mohri さん GJ です。

手元には3部あるのですが、1部は当然手元に置いておくとして、残りの2部については、是非書籍版を読みたい、という方に差し上げたいと思います。

条件は、この本が欲しいということと、送付先の住所を僕に教えても良いという方です。以下の手順で欲しい方は応募してください。締切りは7月22日(水)24:00 (JST) までです。希望者多数の場合は、抽選となります。また、逆にいない場合は、僕と親しい人にあげちゃいます。
  1. 自分のブログに「オープンソースソフトウェアの育て方が欲しい!」と書く
  2. 書いたブログエントリの URL をこのエントリにコメントする (bloggerってトラックバックがサポートされてないんです、、ごめんなさい)

2009/07/16

オープンソースソフトウェアの育て方

http://www.oreilly.co.jp/books/9784873114125/

前にもちらっと書いたのだけれども、僕と高木さんが全文の翻訳を手掛けた Producing Open Source Software の日本語版が、オライリー・ジャパンより今月の25日に出版されることになった。邦題は左のカバー画像にもある通り、「オープンソースソフトウェアの育て方」である。

内容をひとことで言えば、この本は オープンソースプロジェクト に働く力学と運営ノウハウを教えるものである。この本は全文がオープンソースとしてオンラインで公開されている(※1)ので、無料で読むことができる。よってまずはオンライン版を参照頂き、気に入ったら購入して頂ければ幸いである。

出版される内容は、このオンライン版に対して書籍化のために細かい構造や注釈に手を加えた上で、オンライン版に残っていた微妙なバグを修正したものである。よって自分が見た限りでもオンライン版よりは明らかに読みやすく、クオリティも向上している。この点、編集者の id:mohri さんには感謝申し上げる次第だ。

こうした編集が入っているため、現状オンライン版と書籍版とは相当量の差分が生じているが、この点は クリエイティブ・コモンズ BY-SA 2.1-jp (表示・継承) に沿ってオンライン版に反映してよいとの許可をオライリー・ジャパンより既に貰っている(※2)。よって、書籍となった内容はオンライン版にもいずれ反映するつもりだ。

----

(※1)原文と照らし合わせながら読みたい方は、Subversion から直接チェックアウトすれば、翻訳チームの作業の跡を全て見ることができる。コマンドは以下の通りである

svn co http://svn.red-bean.com/repos/producingoss/trunk/ja/ poss-ja

(※2)オンライン版の存在と、こうしたライセンス条件を知りながら出版を決めてくれたことには、今でも驚きと感謝を禁じ得ない。

2009/07/03

PHP-doc CVS account - you are what you write

http://www.php.net/cvs-php.php
http://elf.no-ip.org/wiki/?PHP%2Fphpdoc%2F04.cvs
http://www.mumumu.org/~mumumu/tmp/apply_php_cvs.txt

どうせなら直接コミットしたいので CVS アカウントを申請した。これが通れば、暇を見て直接作業できるようになる。

俺の場合日本語でも英語でもそうなんだけど、流れに任せてちょいちょいと書いて急いで推敲しただけの文章ってあり得ないくらい恥ずかしい文章であることが大半である。日本の中学生でもやらない間違いが数ヶ所あり、それが当然の如く news.php.net に投稿されていて穴があったら入りたくなった。

上記の最後のリンクは、それを手直ししたものである。美辞麗句はいらない。要点が必要、ということは知っていても、オープンソースソフトウェアの世界では「書いたことがすべて」である。反省します。ハイ。

----

申請のコツは2番目のぢょーさんのWikiに書いてあることが全てであり、俺はそれをなぞっただけに過ぎない。俺がそれに付け加えるとすれば、申請ページの入力フォームには引っ掛け問題というか罠があるので、申請ページの説明は「きちんと」読みましょう。フォームだけ適当に入力して submit すると「必ず」失敗します。

[ Update July 4th 23:14 JST by m ]

無事にアカウントを取得出来ました。これも高木さんの口添えがあったお陰です。ありがとうございます。

2009/07/01

PHP Manual Translation

http://www.php.net/manual/en/migration53.php

PHP 5.3.0 がリリースされるされると言われていつつも上記が手つかずだったのでおとついまでにざっと翻訳したのだが、コミットログみたら更新入りまくりんぐ。まあこれだけでっかいリリースの前後なので無理もないとは思うけれども。

こりわ高木さん一人じゃ追いつけないわけですね。暇を見つけて無理のない範囲で手伝ってみることにしよう。

PHP 5.3.0

http://www.php.net/archive/2009.php#id2009-06-30-1

リリースされちゃいました。区切り文字が物議を醸しまくった名前空間やびみょーなクロージャをはじめとして多くの機能が詰め込まれてるわけだけど、個人的には undeprecatedな (一度非推奨にされたが、非推奨ではなくなった)is_a 関数に大笑いしたのと、private や protected に マジックメソッド __call がアクセスできるようになったのが一番面白い変更点である。

特に後者はのべつまくなしに適用すれば OOPの原則いくらでも破れる C++ の friend みたいになっちゃわないですかね? と思ってちょっくら試してみた。

class Test {
public function __call($name, $arguments) {
call_user_func(array($this, $name));
}

private function hoge()
{
echo "called hoge\n";
}
}

$a = new Test();
$a->hoge();

実行結果は以下の通り

$ php/5.3.0/bin/php test.php
called hoge

ああ、やっぱり呼べるんだ。けどやっぱマジックメソッドはおもろいですよね。あと、Ethnaのテストを実行してみたらやっぱり5.3.0の方が速かった。

: PHP 5.2.10
real 0m2.180s
user 0m1.908s
sys 0m0.256s
: PHP 5,3.0
real 0m1.905s
user 0m1.648s
sys 0m0.232s

2009/06/29

noncalculating

自分は明確な目的や打算、仁義がない限り、自分から「エンジニアとして」滅多に人に会いに行くことがない。それは出不精であることが大きく影響していたりするが、昨日はそれナシで人を誘って飲みに行った数少ない例外である。

誘われた本人はおそらく意味がわからなかっただろうが、そうやって人と話し、影響を受けることの効用を自分は心のどこかで認めているのだろう。その意味で昨日はとても良い一日であった。ただ、こういう日はこれからもそう頻繁にはないと思う。

自分が話した内容は与太ばかりであるが、彼の話からは多くの刺激を貰った。自分にないものを持つエンジニアであり、かつ誘いに乗ってくれた id:cocoiti たんには心から御礼申し上げる次第である。

2009/06/27

Not yogurt, but kefir

[2009-06-27 17:48:37] <a****> xxx(※外人さん。女性) made some yogurt. just come here and enjoy! ってメールが友達からきたんだけど
[2009-06-27 17:48:48] <a****> それにxxxさんが返事してて
[2009-06-27 17:49:01] <a****> "いいえ、ケフィアです。" とか書いててふいた
[2009-06-27 17:49:11] <b****> ぶ
[2009-06-27 17:49:12] <a****> 日本語苦手ぶってるくせに。。。
[2009-06-27 17:49:19] <a****> ネタを分かっておる.....
[2009-06-27 17:49:22] <a****> しかも本当にケフィアだった
[2009-06-27 17:49:29] <b****> GJ

----

「いいえ、ケフィアです」ネタ がわかる外人さんいいねww

2009/06/25

deadline

紙媒体の締切りと戦ったのは数年ぶりだが、こんなにつらかったっけ、、(´ー`; ) (一行独白

#明日また第2弾が、、

2009/06/24

Mika Kaneko - Weekend Soldiers

何かを探していたい 何かに手を伸ばしたい
何かに惹かれていたい 何かに踊らされたい

心を締め付けられそうな夜に 溺れていたいだけ

- from City Hunter Sound Collection.

2009/06/23

git(2) - from sourceforge.jp SVN

http://iteman.jp/blog/2009/02/subversiongit-stagehand-testru.html
http://ml.ethna.jp/pipermail/users/2009-June/001138.html

Ethna のソースコードリポジトリを subversion から git に移行した。subversion から git への移行は git-svn を使うのが定番のようになっているが、以下のコマンドを使っても git-svn は指定されたディレクトリ以下のディレクトリ名をブランチにするだけで、tag をうまく扱ってくれなかった
$ git svn clone -T trunk -t tags -b branches svn+ssh://...
このコマンドの実行結果は以下のようになる。タグもブランチとして扱われている
$ git branch -r
* master
ETHNA_2_1_1
ETHNA_2_3
ETHNA_DBLAYER_UNITE_BRANCH
....
tags/ETHNA_2_1_0
tags/ETHNA_2_3_0
----

これでは話にならないので、svn2git を使った。はじめ gem でインストールしても svn2git が command not found になったので焦ったが、/var/lib/gems/1.8/bin 以下に見つかったので、それを直接実行したところうまくいった
$ gem sources -a http://gems.github.com
$ gem install nirvdrum
-svn2git
$ /var/lib/gems/1.8/bin/svn2git http://svn.sourceforge.jp/svnroot/ethna/ethna/ \
--verbose --trunk trunk --branches branches --tags tags
実行中の出力は git-svn と変化ないように見えるが、結果の違いは歴然としている
$ cd ethna
$ git tag -l
ETHNA_2_1_0
ETHNA_2_3_0
ETHNA_2_3_2
....
$ git branch -r

ETHNA_2_1_1
ETHNA_2_3
ETHNA_LEGACY_EUCJP_BRANCH

ここまで出来れば、remote を登録してすべてを移行するだけである。
$ git remote add origin USERNAME@git.sourceforge.jp:/gitroot/ethna/ethna.git
$ git push
--all
$ git push
--tags
----

なお、最初のリンクにも示しているが、本エントリはitemanさんが書いたものをほぼそのまま実行しただけである。元エントリを書いたitemanさんには深く感謝申し上げる次第である。

2009/06/22

misc_register - Linux kernel API

http://d.hatena.ne.jp/TRANSii/20080911/p1

major番号、minor番号をいちいちregister, unregisterしてデバイスファイルをudev経由で作りたくねーよ的な要求は必ずあると思うのだが、さりとて上記のような正規かどうかもわからな いAPIを使うのも躊躇われるので悩ましいところである。

----

とはいえ、Linux kernel プログラミングで3分クッキングは素晴らしい試みだと思う。

やってみて思うのは、C言語がたとえわかっていても前提知識が多すぎる。内部のAPIやディレクトリ構造がバージョンごとに当たり前のように変わる。まあ、後者は開発者たちが一致して決めたポリシーだし、今のプロジェクトのまわし方だと十二分に理に叶っていることなので文句はないのだけれども。

前者の前提知識の量にしても、ひるがえってWebを見たところでそれなりにあるわけだから、まぁ、、というところだろうか。

Ethna 2.5.0 preview5 announced

http://ml.ethna.jp/pipermail/users/2009-June/001137.html

今回のリリースの8割以上は俺以外のコミッタのアイディアが詰まったものである。よってリリース作業も彼らの一人にお願いした。よって、このリリースは彼らのものである。リリースオーナーとなった id:maru_cc は本当にお疲れさまでした。

俺はただ、コードを書いたりドキュメントを書いたりしただけ、つまり、手を動かしただけである。

----

汎用ビューによって、HTML以外の出力に関して柔軟な変更ができる余地が開かれた。また、プラグインに関する変更はこれからを見据えたものであり、より使いやすく、配布しやすいものを目指すに当たっての礎となろう。

俺に残された仕事は、AppObject まわりの改善のみだ。これが終われば、晴れて 2.5.0 final を出すことができる。他のメンテナもそれぞれのモチベーションに合わせて改善を加えてくれるだろう。これが成し遂げられれば、Ethnaのメインメンテナからは脚を洗うつもりだ。

2009/06/21

mouse computer: luvbook S

http://www.mouse-jp.co.jp/m-book/luvbooks/

相方の家での作業用ノートとして今までVAIO Type Tを使っていたが、熱暴走でいかんともし難くなったので代替機を考えていたところ、上記をIRCに貼った人がいた。こりゃ安いなあと思って購入してみた。

マシンの重さが1.86kg, バッテリも2時間弱しかもたないのでそもそもガンガン持ち運ぶものではない。だがCeleronながらデュアルコア、そしてメモリも無料で4GBにしてくれたので目的には十分に合うものだ。メモリーカードも数種類に対応していて、なぜか前面にWebカメラもついている。筐体も重いだけあって丈夫にできていて、電源管理をPresentationにすればLinuxでも快適に使える、、はずであった。ちなみにこれで3年保証をつけて7万円である。

----

だが、キーボードのキー配置だけは頂けなかった。「|」を打つキーが左下のZキーの左横についている。そしてバックスラッシュ「\」を打つキーが右のエンターキーの「真下」についていたのだ。それにスペースバーの横にAltキーがなくて非常に使い辛い。どう考えてもプログラマーには向かないというか、有り得ないキー配置である。キーボードに拘るプログラマ、かつkeymapが自由に変更できない人は、絶対にこのマシンを購入しては「いけない」。

Linuxは幸いkeymapを自由に変更できるので、上記の3つのキーの配置は思いっきり変更させて頂いた。こいつらが気持ちよく打てないことには作業効率に影響するからである。

----

結論を言うと、多分プログラマー向きのモデルではなくて、家に置いてホビー的に使う人達向けのものだろうと思う。この手のモノの常として、現物を見られないということがある。当然購入にあたってはそうしたリスクを十二分に考慮に入れる必要がある。

まあ、一応俺の手には収まるものであると言えよう。しばらくお世話になります。

2009/06/16

Ethna 2.5.0 preview4, 2.3.7 announced

http://ml.ethna.jp/pipermail/users/2009-June/001130.html

昨夜メールをひょっと見るとセキュリティバグの報告があがっていて正直寝耳に水であった。ちょっくらテストしてみると見事に開発版、安定版ともに再現してしまった。PHPの配列のキーが入力になっていたことに皆気付いてなかったということで、完全にヤラレタとしかいいようがない。

セキュリティリリースは本来秘密裏に修正し、リリースするまでその内容はバージョン管理システムにさえ一切公にしないというのが通常だろうが、そのための窓口が Ethnaプロジェクト にはなかった。結果として full-disclosure の形になってしまい、リリースを急ぐことになった。リリース作業は意外に面倒な部分が多いのだが、今回は普段の4倍疲れた。俺自分に乙。

----

とはいえ、今週末には 開発版の次のリリースが控えている。もうひと踏ん張りである。

2009/06/13

the latest code ...

<mumumu_n> the lastest code cannot disable logging. is it already fixed?
<Sho_> mumumu_n: if it's current SVN code how could it be already fixed?

おまいのコードが仮に最新で、それがバグってるんだったらfixされてるバージョンなんてあるわけないぢゃん、と言われて涙目。しかもバグレポートをfileしてやると思ってsvn upしたら早くもfixされていてさらに涙目(藁

#「the latest code」って言ってしまったのがまずったのよ(´ー`; )

[memo] bit shift operator

C言語のビットシフト演算子は、左オペレータの幅以上の値を右オペレータに指定した場合、その動作は未定義である。これは規格で定義された動作である。以下、JIS X 3010 2003 (ISO/IEC 9899) P48 より引用する。

6.5.7 ビット単位のシフト演算子
シフト式:
加減式
シフト式 << 加減式
シフト式 >> 加減式
制約 各オペランドは,整数型をもたなければならない。
意味規則 整数拡張を各オペランドに適用する。結果の型は,左オペランドを拡張した後の
型とする。右オペランドの値が負であるか,又は拡張した左オペランドの幅以上の場合,
その動作は,未定義とする。

----

このことから、ビットパターンを出力する以下のコードは c の値によって動作するか否かが決まる。型によってオペレーターの幅は異なるため、頭の隅にいれておく必要があろう。間違っても俺のように何も考えずに100ビットとかシフトさせようとしないでください(´ー`; )

#include <stdio.h>

int main(int argc, char *argv[])
{
unsigned long long a = 65535; // long long は一般に64bitの幅を持つ
int c;
for (c = 63; c >= 0;c--) { // c を 64にすると途端に動作しなくなる
printf("%d", (int)((a >> c) & 1));
}
printf("\n");
return 0;
}

2009/06/12

23-2

http://www.daily.co.jp/baseball/2009/06/12/0002011246.shtml

プロ野球タイ記録となる10打数連続安打とプロ野球ワースト記録となる1イニング15失点。ブラウン監督自ら、この試合はプロ野球ではなく「ラグビー」のようであったとコメントしている。草野球と評さなかっただけ偉いと思う(違

個人的な唯一の救いは、この試合を(テレビやラジオ等を通じて)ライブで視聴していなかったことだろう。仮にしていたら、、多分ラジオかテレビが壊れていただろうから(´ー`; )

2009/05/31

konversation 1.2-alpha2

http://konversation.kde.org/
http://websvn.kde.org/trunk/extragear/network/konversation/

私のお気に入りIRCクライアントである Konversation の KDE4 版が少し前についにリリースされた。これまでは KDE 3.5 互換レイヤのものを不承不承使っていたのだが、Konsole が動かなくて泣きそうだった。それもしっかりと修正されている。

アルファ版なので「目立つところ」にはバグがない、という程度だ。よって安定してから使いたい人は少し待った方が良いかもしれない(俺はSVN版を追いかけている)。だが、マルチバイトの環境でも既に実用の域であることは付記しておく。

# argonel お疲れ様っす(`ー´)ゞ

2009/05/27

Final Fantasy on virtual console

http://www.nintendo.co.jp/wii/vc/vc_ff/index.html

昨日 Wii のバーチャルコンソールで配信開始されたので早速DL。しかしピスコディーモンたらいう中ボスっぽいのにやられて心が折れました(ぶ) ああ、そんなのもいたなぁ、とw

そんななつかしゲームがいっぱいバーチャルコンソールにはあるので Wii は非常に宜しい。少し前にスペースハリアーというゲームが配信されたのだが、そのときは俺より世代が少し上の連中が大漁に釣れていたようである。

2009/05/26

[memo] 3 notations of [lat|long]itude

http://en.wikipedia.org/wiki/Longitude

Each degree of longitude is sub-divided into 60 minutes, each of which divided into 60 seconds. A longitude is thus specified in sexagesimal notation as 23° 27′ 30" E. For higher precision, the seconds are specified with a decimal fraction. An alternative representation uses degrees and minutes, where parts of a minute are expressed in decimal notation with a fraction, thus: 23° 27.500′ E. Degrees may also be expressed as a decimal fraction: 23.45833° E. For calculations, the angular measure may be converted to radians, so longitude may also be expressed in this manner as a signed fraction of π (pi), or an unsigned fraction of 2π.

----

ジオコーディングしているとはじめは緯度経度の記法が3つあるのに戸惑ったりするが、基本的には「度・分・秒」や「度・分」の表記ではなくて、「度」の値のみを小数点付きで表す表記(上記で言えば 23.45833°E)を使うようだ。データとして扱いやすいというのがその理由だろう。俺もこの3つのうちどれを採用するかといわれたら、表示上の理由がない限りはこれを選ぶ。strtod すればdoubleにできるし、ね。

分と秒は60進法なので、他の記法からこの記法への変換も簡単だ。分、秒をそれぞれ60及び3600で割って度の値に足せばよい。

2009/05/25

undefined reference(3)

もうこのネタやめにしたいんだけど、一応メモしておく。なんでクラス名忘れるかね。これはひどいとしか言いようがない。原因がわかるまでにかかった時間は2分くらい。

---- test.h ----
#ifndef __TEST_H__
#define __TEST_H__

class A {
public:
static void hoge();
};

#endif // end of __TEST_H__

---- test.cpp ----

#include "test.h"

void hoge() {
return;
}

---- main.cpp ----

#include "test.h"

int main(int argc, char* argv[])
{
A::hoge();
return 0;
}

以下の実行結果は最早おなじみである。

$ g++ main.cpp test.cpp
/tmp/ccSUS3Oq.o: In function `main':
main.cpp:(.text+0x12): undefined reference to `A::hoge()'
collect2: ld はステータス 1 で終了しました

2009/05/21

undefined reference(2)

前のエントリで書き忘れていたので追記しておく。メソッドの実装忘れも俺的にはよくある。たとえば以下のようなコードである。宣言して満足しちゃった、的なアレである。

--- test.cpp ---

#include <iostream>

class A {

public:
// default constructor.
// not implemented.
A();

void helloworld()
{
std::cout << "Hello World!" << std::endl;
}
};

int main(int argc, char *argv[])
{
A a;
a.helloworld();
}

上記をコンパイルすると、下記のようになる。実装がないので、リンカから見えない。以下の結果は当然の帰結である。

$ g++ test.cpp
/tmp/ccIVHTVA.o: In function `main':
a.cpp:(.text+0x74): undefined reference to `A::A()'
collect2: ld はステータス 1 で終了しました

2009/05/20

C++ namespace -> undefined reference to 'main'

C++ の namespace は重要なキーワードであるが、うっかり main 関数のようなグローバルな関数をそれで囲んでしまうと大変なことになる。マングリングによってラベルが変化し、自分が意図した通りにリンカから見えなくなるからである。

namespace はスコープを変えるんだというごく当たり前のことがことがわかっていればこんなことは多分普通やらないんだと思います。多分。ただ、そういう理屈もわかっていない初心者とか、以下のような多段 namespace のマクロを全ファイルに適用するのが癖になっている人とかは要注意である。

--- test.h ---

#ifndef __TEST_H__

#define __MUMUMU_NAMESPACE_NAME__ mumumu
#define __AHO_NAMESPACE_NAME__ aho

//
// namespace macro
//
#define __HOGE_NAMESPACE_START__ \
namespace __MUMUMU_NAMESPACE_NAME__ { \
namespace __AHO_NAMESPACE_NAME__ {
#define __HOGE_NAMESPACE_END__ } }

#endif // end of __TEST_H__

--- test.cpp ---

#include "test.h"

__HOGE_NAMESPACE_START__

int main(int argc, char *argv[]) {
return 0;
}

__HOGE_NAMESPACE_END__

上記の test.cpp をコンパイルすると、以下のようになる。

$ g++ test.cpp
/usr/lib/gcc/i486-linux-gnu/4.3.3/../../../../lib/crt1.o: In function `_start':
/build/buildd/glibc-2.9/csu/../sysdeps/i386/elf/start.S:115: undefined reference
to `main'
collect2: ld はステータス 1 で終了しました

test.cpp を コンパイルし、main の text セクションのみをダンプすると以下のようになる。namespace の情報がラベルに付加されていることがわかる。

$ g++ -c test.cpp
$ objdump -x test.o | grep main
00000000 g F .text 0000000a _ZN6mumumu3aho4mainEiPPc

2009/05/16

PEAR_PackageProjector 0.2.0

http://openpear.org/repository/PEAR_PackageProjector/trunk/release

先程のエントリの patch を取り込み、それに伴う細かい変更を行った 0.2.0 を置いておきました。変更点は要するに PEAR 1.8.0 以降に対応しましたよ、ということです。

0.2.0 以降は、PEAR の requirement は 1.8.0 になります。

#あとは sakamoto さんにリリースしてもらえばいいんだな。

----

[0.2.0]
- fixed bug getcwd() routine could not get current directory.
- followed PEAR 1.8.0 API changes.
-- PEAR_PackageFileManager2::exportCompatiblePackageFile1 was deleted.
- replaced Dependency PEAR_PackageFileManager with PEAR_PackageFileManager2.

[ Update 20th May 2009 22:24 JST by m ]

正式にリリースされました。id:magiwo さんありがとう!

[PATCH] PEAR_PackageProjector does not work with PEAR 1.8.0 or higher

http://www.mumumu.org/~mumumu/tmp/pear_packageprojector_over1_8_0.patch

現在は openpear で公開されている PEAR_PackageProjector 0.1.3 は、PEAR 1.8.0 以降では動かない。PEAR Package バージョン1 向けのメソッドが削除されたためなのだが、作者でありメンテナでもある sakamoto さんと直で連絡をとる方法が openpear 上にもないようなので、この日記を書いた時点での最新のtrunk に対する patch を晒しておく。ダウンロードは上記リンクからどうぞ。


diff -ur /home/mumumu/ppp/src/PEAR/PackageProjector/Derictory.php /usr/local/php5/lib/php/PEAR/PackageProjector/Derictory.php
--- /home/mumumu/ppp/src/PEAR/PackageProjector/Derictory.php 2009-05-16 05:46:37.000000000 +0900
+++ /usr/local/php5/lib/php/PEAR/PackageProjector/Derictory.php 2009-05-16 06:04:22.000000000 +0900
@@ -307,7 +307,7 @@
if (self::isAbsolutePath($path)) {
return $path;
}
- $tmp = (OS_WINDOWS) ? getcwd() :$_ENV['PWD'];
+ $tmp = (OS_WINDOWS) ? getcwd() : getenv('PWD');
return $tmp .DIRECTORY_SEPARATOR.$path;
}

diff -ur /home/mumumu/ppp/src/PEAR/PackageProjector/Package.php /usr/local/php5/lib/php/PEAR/PackageProjector/Package.php
--- /home/mumumu/ppp/src/PEAR/PackageProjector/Package.php 2009-05-16 05:46:37.000000000 +0900
+++ /usr/local/php5/lib/php/PEAR/PackageProjector/Package.php 2009-05-16 06:08:01.000000000 +0900
@@ -44,6 +44,7 @@
$this->pkg = new PEAR_PackageFileManager2();
$this->options = array();
$this->options['filelistgenerator'] = 'file';
+ $this->options['packagefile'] = 'package2.xml';
$this->options['simpleoutput'] = true;
$this->postInstall = null;
$this->Installgroups = array();
@@ -155,9 +156,7 @@
$this->pkg->addReplacement($installer, 'pear-config', '@bin_dir@', 'bin_dir');
$this->pkg->addReplacement($installer, 'pear-config', '@php_dir@', 'php_dir');
}
- //
- $this->pkg->exportCompatiblePackageFile1();
- //$this->pkg->addRelease();
+ $this->pkg->addRelease();

$this->pkg->generateContents();
$result = $this->pkg->writePackageFile();



[ Update May 17th 2:27 JST by m ]

この patch を取り込んで openpear に新しいバージョンを置いておきました

math

数学が苦手だったので、学生時代の知識を引っ張り出そうとしても急には引っ張り出せないので困る。けど解決できないわけじゃない(一行独白

2009/05/14

one-seg TV with AM/FM Radio

http://www.sony.jp/oneseg-radio/products/XDV-G200/

自宅のテレビが壊れてしまった。音が出ない上、電源を入れても15分もすると電源が落ちるという体たらく。15年近く使っていたのでしょうがないとはいえ、今年は本当にモノが壊れまくりである(´ー`; )

どうせなら代替はデジタルでしょ。と思いつつ、基本的に相方の家にデジタルテレビがあるんで繋ぎ的なものでいい。部屋の中でも、外でもある程度視聴できたらいいよね、という考慮からワンセグ機を購入した。安いモノもいろいろ出ていたのだが、安かろう悪かろうなものもかなり存在するようなので、評判がよいもの、かつラジオも聴けるもの、を購入したのが上記である。

----

2型というちっこさながら、感度・画質ともに割と良い。だが、室内のどこでも視聴できるわけではないのはワンセグだから割り切らなければならないだろう。室内で完全な視聴環境を得たければおとなしくフルセグで見るべきである。俺の場合は窓の側のテーブルに置いてみるようにしている。

ちなみに、室外では中央線や山手線で視聴してみたが問題ない範囲である。

dead download link

http://groups.google.com/group/smarty-discussion/browse_thread/thread/a4f0f13f56d9538d

XX がリリースされたよ! とアナウンスするのはいいんだけど、ダウンロードのリンクが404とかエラーとかだと物凄く萎えるす。メンテナは自らダウンロードとリグレッションテストくらいはしましょうね。自戒を込めて。

----

お陰で一瞬だけ smarty-discussion group を購読するハメになった上、dup post までしてしまった件。google group って Web にすぐ投稿が反映されないとはいえ、俺ってスーパーお馬鹿だよね。ざっと見たら意外に流量が多くてビックリした。

2009/05/12

The Immortal

http://www.nicovideo.jp/mylist/7074638

俺も相方もクソゲーの類は大好きなのだけれども、この「The Immortal」はかなりひどくて糞ワロタ。「呪いの館」以来のヒットである。実況もいい味出しているのでお暇な方はどうぞ(2行独白)

2009/05/08

POSS Japanese Edition will be published on June 2009

http://producingoss.com/ja/producingoss.jp.foreword.html

やっと最後の原稿を脱稿した。上記がそれである。

俺と高木さんが全文の翻訳を手掛けた Producing Open Source Software(邦題:オープンソースソフトウェアの育て方)は、来月中に日本語版が出版される予定となった。ボランタリーで翻訳をはじめたときはまさか出版されるなんて思っても見なかったわけだが、ここまで来れたことを今は素直に喜びたい。これで今年の目標の一つは達成できることになる。

上記のリンクを見ても分かる通り、この本はオンライン版として全文がオープンソースで公開されている。オープンソースソフトウェアの開発者は勿論のこと、ソフトウェア開発者であればきっと面白く読めるだろう。オンラインで読んでみてもし気に入ったら、手に取って頂ければ嬉しく思う次第だ。

----

原著が2005年に出版されたもので若干古いので、内容については原著者の Karl Fogel とも協力しつつ、URLやツールについての記述は極力最新のものに追随したり、注釈を施すなどした。原著の出版時から動きがあった部分(ライセンス等)についても Karl によってアップデートが行われている。オレンジニュースなどでは記述に若干古い部分があるとの指摘があったが、現状公開されているものについてはその指摘はもはや当たらないだろう。

この本を通じて、オープンソースの世界が少しでも人々に伝わることを願っている。

2009/04/30

git

http://git-scm.com/

git を最近よく使っている。とは言っても、本格的に使っているわけではなくて、git-svn を通して使ってるわけなんだけれども。

とはいえ、ローカルにコミットを貯めておけるだけでも分散VCSを使う価値がある。最近乗り換えた e-mobile はどこでも高速であるわけではないので、いつでもリモートにコミットできる状況にあるとは限らないからだ。ローカルで編集し、ローカルでテストし、ローカルにコミットする。一通り纏まったところで git svn dcommit。いい感じである。

また、今の Ethna プロジェクトのブランチの使い方はまさしく git のような使い方である。次のバージョンを出して落ち着いたら git に移行する作業をするつもりだ。あと半月あまり。時間がないが、着実に、ね(*´~`)

2009/04/28

Geocoding de Android

Google Maps API には 住所やキーワードを緯度経度に変換する Geocoding の機能が備わっているが、勿論使用するにはGoogle Maps API key が必要だ。

http://code.google.com/intl/ja/apis/maps/documentation/services.html#Geocoding_Direct

Google Maps API key 取得のページ に行くと、結びつける特定のURLの入力を求められ、特定のウェブサイトをブラウザから使うのが前提であるかのように読めるが、Android にはそんなWebサイトなんてあるわけがない。

じゃあ Android からは Geocoding できないの? と一瞬青くなったが、Android Maps API Key のページから取得したAPI Key で普通にGeocodingできた。ホッ。

----

そもそもだな、Java からあれだけAPI叩かせといて Geocoding 「できない」と思い込む俺の頭の構造がおかしいという話でした。まる。

2009/04/26

New Machine - Dell Inprison 531s

http://www1.jp.dell.com/content/products/productdetails.aspx/inspndt_531s?c=jp&cid=21538

MX のマシンが吹っ飛んで
以来、空きのマシンがなくなってしまっていた。そこに来て www のディスクまで吹っ飛んだので、ハードウェアの予備がないことに危機感を抱いた次第である。

www と同じくらいの予備機、かつ普段は Windows の開発用として新しくマシンを新調した。それが上記の Dell Inprison 531s である。もともとが AMD64なデュアルコア。メモリを4Gにした上で特急配送を付加しても4万円台。まあ今時ってこんなもんだよね。GWの後半には手元に届く予定である (*´〜`)

普段プライベートでは Windows は一切使わないと公言している俺だが、Visual Studio が必要な場面も少なくない。Windows Mobile の開発環境には必須であるし、Windows でしか動かないテクノロジを用いたソフトウェアをハックしたくなったときに手元に置いておきたいという意図が強く働いている。

2009/04/23

disk broken...(3)

さらに続報です。

phpMyAdmin も復帰させ、古いデータを流し込んでみました。cinnamon氏に確認を貰ったところ、2007年までのデータしかないらしいす(´ー`; )

ということで、お手元のバックアップをFTPでホームディレクトリにアップロードするか、メールで送って頂くようお願いします > viking

これで、データ以外は元の環境に戻っているはずです。phpMyAdmin のアカウント情報も元のままです。

----

ssh 経由のログイン権限がある方へ:
  • ssh_host_dsa_key が今回の事故で失われてしまいました。新しい鍵の fingerprint は以下の通りです。.ssh/known_hosts のエントリを削除した上でこのシグナチャを確認頂き、アクセスするようにお願いします
2048 86:e8:4f:60:65:51:1f:5c:fc:1b:4c:9d:70:2a:1a:59 /etc/ssh/ssh_host_rsa_key.pub (RSA)
1024 79:b4:e4:7e:04:a4:a7:ba:cb:aa:e9:19:80:4f:e5:30 /etc/ssh/ssh_host_dsa_key.pub (DSA)
  • crontab をユーザ権限で編集していた方は、お手数をお掛けして申し訳ありませんが、作り直して頂くようお願いします。
  • Linux の再インストールに伴い、まだその他の影響が残っている可能性があります。不都合な設定や動作、不足しているソフトウェア等ございましたら、手近な方法で私に連絡をお願いします。
----

また、今回の件で関係各位にはご迷惑をお掛けしました。事故とはいえ、お手数をお掛けしたことをお詫び致します。。 m(_ _)m

2009/04/22

disk broken...(2)

昨日の続報です。

現在 MySQL を復旧中です。PHP, MySQL については既存の実行環境を変えず、データ以外はすべてを元に戻すように動いています。データについては、www.mumumu.org を外部に公開(2004年?) してから、2008年7月あたりまでのデータが含まれていると見ていますが、実際のところは使用している人に確認してもらわないことには、正確なところはわかりません。

今日の朝までには、データ以外については全て今までの環境に戻す予定です。

----

cinnamon, vikings: お手数をお掛けして申し訳ないのですが、現在持っている MySQL データのバックアップを FTP 経由でホームディレクトリ(public_html以下ではない!) にアップロードして頂けますでしょうか。そのデータが使えるかどうかは、中身を見てみて判断させて下さい。

仮にアップロード出来なかった場合は、 mumumu at mumumu dot org に添付してメールして頂きますようお願いします。

disk broken...

帰宅してみると自宅のwwwサーバに繋がらない。IRCプロキシも切れている。ディスプレイとキーボードを繋いで調べてみると ls などの簡単なコマンドにも Input/Output Error ばかり返ってくる。LiveCD で辛うじて www が入っている /home はマウントできたものの、MySQLのデータが入っている /var がマウント出来ない状態になっている。

ということで鯖を貸している方々、ちょっと今復旧中です。。今データの取り出し作業中です。とりあえず Web のデータは取り出せましたが、MySQL のデータがまだ取り出せていません、、MySQL については復旧不能かも。。過去のデータがどこまで残っているかも調査中。。

ということでしばらくお待ちを。。

----

[ Update April 22th 1:51 JST by m ]

FTPのデータも取り出せました。現在 ログイン情報を復旧中。このあと httpd, vsftpd を起動予定。。

[ Update April 22th 2:07 JST by m ]

vsftpd を復旧させました。とりあえずログインと読み書きはできるはず。

[ Update April 22th 3:56 JST by m ]

httpd は復旧させました。MySQL を使っていないユーザのサイトは復旧済みです。
MySQL のデータは 半年前までのデータが生き残っていた模様。。ぐう。。申し訳ないです。。現在それだけでもとりあえず復旧中です。

2009/04/21

[memo] cygwin

http://www.cygwin.com

久々に cygwin を触ったのだが、なんか日本語入力したいなと思ったり、ターミナルをUTF-8で扱いたいなと思ったりなど、いろんなことを考えてちょっと調べた。以下は自分用のメモである。
  • cygwin には nkf が入っていないので、ダウンロードしてきてコンパイルする必要がある。これに伴い、gcc と make は必須になるので留意すること
  • cygwin のターミナルをUTF-8で扱いたい場合は、cygwin1.dll の replacementを作っている人がいるので参考にすること。ここには .inputrc も入っているので、参考にすること
  • subversion, git, python, ruby, screen は必ず入れること
  • ターミナルからの日本語入力は、デフォルトで alt + 全角/半角 しか受け付けないので留意すること

2009/04/20

spam detection software report

http://spamassassin.apache.org/full/3.2.x/doc/Mail_SpamAssassin_Conf.txt

spamフィルタとして spamassassin を使っている。こいつは検知率も非常に優秀で重宝しているのだが、メールに以下のような残念なレポートを付加してくれる。

----

Spam detection software, running on the system "mx.example.org", has
identified this incoming email as possible spam. The original message
has been attached to this so you can view it (if it isn't spam) or label
similar future email. If you have any questions, see
the administrator of that system for details.

Content preview: test mail [...]

Content analysis details: (-93.5 points, 5.0 required)

pts rule name description
---- ---------------------- --------------------------------------------------
-100 USER_IN_WHITELIST From: address is in the user's white-list
3.5 BAYES_99 BODY: Bayesian spam probability is 99 to 100%
[score: 1.0000]

----

これは普段spamに興味がある人や管理者には有用かもしれないが、俺はこういう詳細な原因を記したレポートには残念ながら興味がない。要するに結果としてのスコアのみが重要なのである。

これをメール本体から除去する方法はないかね、と思いマニュアルを調べてみた。
結論としては、以下の2行を ~/.spamassassin/user_prefs に加えることで、上記のレポートは出なくなった。

clear_report_template
report

2009/04/18

Kubuntu 9.04 Jaunty Jackalope


http://www.kubuntu.org/news/9.04-rc

Kubuntu 9.04 RC がリリースされた。KDE のバージョンは 4.2.2 となり、非常に洗練された状態に仕上がっている。8.10 Intrepid は バージョンが 4.1 でデキがあまりよろしくなかったのだが、今回は非常によい。
  • Pentium M 1.20 GHz, RAM 1.2 G の状態だとちょっと動作がもっさりするところがある。だがそこそこ使えるレベルである。少なくとも 4.1 系のあのもっさりした恐ろしい不安定さはない。
  • Qt 4.5 となった。UI が非常に綺麗だ。Qt 2.0の頃の感動を思い出した。
  • KDE 4 はシンプルさを前面に押し出している。KDE 3 の頃の「かゆいところに手が届き、なんでもできる」感は失われたものの、不便を感じる訳でもない。理由のあるものが残っていると思う。
  • ネットワーク設定 Plasma Widget は、無線をANY接続OKにしないと繋がらない上、WPA2-PSKが使えなかった。
  • adept_updator が アップデート専用 Plasma Widget に変わっている。違和感はあるものの、まあ使える
  • デフォルトのIRCクライアントが Konversation から Quassel になったので試してみたが、個々のチャンネルにエンコーディングが設定できないので個人的には使い物にならなかった。シンプルでよくできてると思うんだけど、IRC プロキシを通して複数のエンコーディングを混在させている環境では現状使わない方がよい
  • Linux kernel は 2.6.28 となり、e-mobile も USB を繋いだ上で 携帯側を接続状態にしてやればあっさり繋がった。
  • 日本語入力については、俺は 8.04 からアップグレードしたため、uim + anthy の環境をそのまま引き継いだ。よって、デフォルトの環境は試せていない。
----

ひとことで纏めれば、ようやく俺のような一般ユーザでも楽しめる完成度になったといえよう。KDE 4 is for you? という質問には、今なら Yes と言える。

e-mobile S22HT

https://store.emobile.jp/HS/dual_diamond.html

WILLCOM の W-ZERO3 Advanced es から e-mobile に乗り換えた。理由は回線速度以外にはない。モバイルで一昔前のブロードバンドの速度が(理論上とはいえ)利用できるのは大きな魅力である。これは開発作業にも寄与するものだ。これを朝のもくもく作業に生かしていきたい。

・・・とはいえ、場所によっては非常に通信速度が遅くなる場合があり、リモートの開発環境が役に立たない場合がある。その場合は基本的に git などの分散VCSの作法を備えたソフトウェアが役に立つ。

----

今朝は早速ドトールでひと作業した。夜遅くまで起きて作業を一気にこなすスタイルから、少しづつ積み上げる方式に変えていく方針の一環である。やっぱり通信速度が遅かったので、git でローカルコミットしてから git svn dcommit する方式が役に立った。

なお、Linux からの接続については、RNDIS ドライバが入っている Linux 2.6.27 以降でないと繋がらないと思われる。少なくとも Kubuntu 8.04 の Linux 2.6.24 では繋がらなかった。この問題については、Kubuntu 9.04 にアップグレードすることで俺は解決した。現在、S22HT でも問題なく繋がっている。詳しくは、gihyo.jp の記事を参考にするとよい。

2009/04/15

mokumoku

http://moku2.g.hatena.ne.jp/

PHP使いの一部で「もくもく会」なるプラクティスが流行っている。主に朝に、一定の作業を喫茶店などでもくもく(黙々)とこなすことである(と思う)。

最初は「家でやればいいじゃん」と思っていたのだが、実践する場所はともかくその考え方の「一部」は取り入れてもいいんじゃないかと最近思い始めた。どうにも夜遅くまで起きて集中するという生活スタイルが様々な事情から自分に合わなくなってきているからである。

昔は「mumumu たんはいつ寝ているのかわからない」と言われたが、もはやそんな不摂生ができる年齢でもないことを受け入れざるを得なくなってきたことは踏まえなければなるまい。そういった中で成果を出せるようにするには、こういったことも有効なのだと思う次第である。

Linux From Scratch

http://www.linuxfromscratch.org/

Linux は厳密に言えば kernel の部分を指すことは大抵の人は知っている。だが、その上にユーザランドがどのように組み合わせて作られているのかを意識することは(大抵の人にとっては)少ない。また、それを意識する必要もない。良い時代になったものである。

だが、自在にユーザランドをカスタマイズできないといけない世界では話がちょっと別になってくる。そのような視点で Linux From Scratch は極めて実践的な資料を提供してくれている。

現在の最新はバージョン 6.4 であるが、ソフトウェアの進化に伴ってアップデートを維持するパワーには敬服するばかりである。プロジェクトリーダーの Gerard Beekmans をはじめとする面々には深く感謝したい。

CakePHP Development Camp Result

合宿中は2日とも2時間半睡眠だったのが祟り、月曜日に割と響いた気がする。3日遅れのエントリだが、やりっぱなしはいけないのでここに記す。

総じて言えば、工作員全員が非常に意欲を持って議論をし、手を動かした2日間だった。

Ethna工作員としてコードになった(trunkに取り込んだという意味での)成果はプラグインの命名規則の変更が大きな所だけど、アイディアレベルのコードも色々と出てきた。合宿最終日にも述べたことだが、コミッタたちが自信を持って作業ができるようにするプラクティスを自然に確立できたことがこの合宿の一番の成果だと思う。

----

だが、それに伴いプロジェクトの力学も変化してきているのは確かだと思う。手を動かすことも勿論だけど、皆の意欲をうまく束ねて(中途半端でなく、かつコミッタのオナニーに終わらない)コードの成果に繋げられるかが重要になってきたなあ、と。

まあ最終的にはユーザ的にどうなるの?という視点が一番重要なんだけど、フレームワークって流儀を押し付けるものだから、「これがオレ流で正しいんだからコードにしろよ」ってのもアリなわけで、そこらへんをうまく見極めながらのハンドリングが重要になってきていると感じている。

そういった状態を楽しめるかどうかは俺の中では未知数であり、その意味では自分が試されてるな、とも思いました。まる。

2009/04/02

CakePHP Development Camp

http://d.hatena.ne.jp/yandod/20090325/1237993691

CakePHP 使いが開発合宿をやるそうです。Ethna工作員も何人か紛れ込むらしいので、俺も紛れ込んでくることにした。ライブで工作員がコードを書く目的で揃う機会は滅多にないので、是非これを生かして成果を出してきたいと思う。
  • 最低限 Ethna_ViewClass まわりの改善は終える (その1, その2)
  • ORMの実装もまだ途中なので進められればOKネ
  • チケットが溜まってきているので出来るだけ多く潰しまくる
  • PlanetPHP の port もまだだったな、、(´ー`;)

2009/03/26

Turn on button of Nokia N95

http://www.nokia.co.jp/support/ps/phones/n95/index.shtml

Nokia N95 上で動くちょっとしたFlashアプリを作ろうと思って電源をいれてみようとしたが、電源がどこかわからない。同僚に聞いてみたところ、ボディの縁にあることが判明して唖然とした。それを示したのが左の画像である。

「この携帯の電源ボタンの位置は問題あるだろJK」と騒いでいたら、同僚から「何 Joel みたいなこと言ってるんだ」と言われた。

調べてみたら、Joel もモトローラの携帯で同じような経験をしたようで、「Great Design」という視点で滔々と語っている。

この体験から、俺は携帯の電源恐怖症になった(少し大げさ)。Joel の言葉を借りて言えば、「Confession: I'm afraid to turn on my cell phone.」である。

----

どうでもいいけど、Joelって文章うまいよね。3つくらいエントリを読んで思った。

2009/03/19

The gods help them that ...

http://d.hatena.ne.jp/scinfaxi/20090317/1237236638

むしろ関心を持って貰えてるだけ幸せだと思うし、自分を救えるのは(神を除けば)自分だけだと思う(一行独白

#ってか、久々にブログ書いといて言うことがそれかと(ry
#別に言うに事欠いたわけではないのだが(´ー`; )

2009/02/22

producingoss.com/ja translation complete

http://producingoss.com/ja/index.html

「オープンソースソフトウェアのつくりかた」の下訳を数日前に終えた。まだ多少ブラッシュアップが必要ではあるが。

と、いかにもひとりでやったかのように書いているけれども、これの翻訳プロジェクトは高木さんが founder であり、二人で進めてきたものである。俺は210コミットしたことになっているが、1年半という年月は非常に長いようで短かった。

この本は無意識のうちにオープンソース開発に関わるようになった人でも、今全く縁がない人でも、コンピューターの技術者であればきっと面白く読めると思う。たとえ緩い繋がりであっても世界中に影響を与えることができるソフトウェアを作り上げていける力、そして緩いゆえの脆さ。そういう不思議な世界を読み解くきっかけとして、必要十分な知識を提供してくれるだろう。

----

翻訳というのは「代弁」ともいえる。たとえ代弁であっても、労力を払って伝えたいと思うネタってそうはないと思う。この本は俺にとってまさにその労力を払うに値する内容であると信じているし、オープンソースソフトウェアに関心がある開発者にも影響を与えられる内容であると信じてやまない。

この本と出会うきっかけを与えてくれた高木さんには、改めて深く感謝したい。また、原著者である Karl Fogel には、翻訳作業にあたって様々な励ましやアドバイス、助力をメーリングリストで貰った。彼の深い懐があってこそ、この翻訳は成り立っている。

KVS

http://groonga.org/
http://luxio.sourceforge.net/
http://tokyocabinet.sourceforge.net/
http://lab.klab.org/wiki/Repcached
http://d.hatena.ne.jp/tasukuchan/20090220/groonga_test_release
http://kai.wiki.sourceforge.net/
http://overlayweaver.sourceforge.net/index-j.html
http://labs.gree.jp/Top/OpenSource/Flare.html
Key-Value Store 勉強会に行ってきた。いわゆる分散型の Key-Value Store の実装や研究をしている猛者たちに猛烈なツッコミを入れる会である。kzk君が幹事であるだけあって、メンバが豪華過ぎる(´ー`; )

発表した人の全てのスライドが公開されているわけではないので、発表された方々のリンク集という意味で上記を残しておく。

----

俺のように普段からフロントエンドの実装ばかり模索している人間は、この勉強会にとってはまさに「お客さん」だったろう。発表者は実装に寄った人からアカデミックに寄った人まで様々。多様な内容のおかげで、俺のようなお客さんであっても非常に楽しく聞くことができ、とても刺激になった。

個人的には首藤先生発表が新鮮で面白かった。なんだろう。現場の人たちって簡潔にしてツボを抑える的なスライドが多い気がするんだけど、研究者の方のスライドって言葉は多くても別の意味で凄くポイントをおさえていて、個人的にはとっても好きである。

----

たとえ「お客さん」であっても、こういう猛者たちを追いかけるきっかけという意味ではとてもよい機会だったと思う。幹事の kzk君 をはじめとして、この勉強会を運営頂いた方々には深く感謝申し上げたい。また、俺のような人間を誘ってくれた pascal に対しても同様である。

そういえば、kzk君とは5年越しで邂逅したな。俺は非常に出不精な人間なので、会う人会う人がXX年越しになったりする。あ、アサマシで「分散システム-原理とパラダイム」買っといたよ。

また、Ethnaのコミッタも何故か少なからずいたので、彼らとも話をした。いちいさん には現状の流れの報告。sotarokcocoitiban さんには 近々 Ethna_ViewClass の改善をレビューしてもらう予定であり、そのことをお願いしておいた。

2009/02/19

ActionChain de Ethna

http://www.mumumu.org/~mumumu/tmp/ethna_250p4_actionchain.patch

【注意】上記は patch の形式をとっていますが、当てても動きません!
Ethna 2.5.0 trunkに対するものです。

----

所謂アクションチェインを Ethna で実現するように改造するには、多分20行いらないんぢゃないかと思うんだけど、需要ってあるのかな。

アクションで次のアクションを登録すれば、それを次々呼び出してくれる、というアレ。
と思いながら、ORM の実装をしながら、適当に書いてみたのが上記patch。

あとは Ethna_ActionClass に getNextActionと、setNextAction() を実装してしまえば、上記は完成する。Ethna_Backend は 実質10行も改造していない。

こうできることがわかっていながら、これまで実装されてこなかった理由って何かあるのかな。とか言いつつ過去の記事をほじくってみて、ORMを弄ってみている。

----

といいつつ、今のEthnaの優先度からしてみれば、上記は非常に些細なことである(*´〜`)
発想の一つとして、このエントリをメモ代わりに記す。

[ Update Febrary 19th 2:35 a.m by m ]

あー、わかった。単純にチェインさせるだけなら簡単だけど、フォーム定義どうする?的な問題が。そこは無視しちゃっていいのかねぇ。と妄想は続く。

2009/02/16

Licensor's power

日本語訳を入れさせるのに(バージョン違いとはいえ)対象ライセンスを拡大してくれた作者は偉大である。当たり前であるがライセンサーは万能である(2行独白)

sexually arousing?

http://mumumu.tumblr.com/post/78558623

受験数学は性的に興奮するという漢がいた。いや、確かに何かの問題を解くとき、解に近付くときの興奮はもちろんプログラミングでもあるし、文系の俺にもわからなくはない。だが、「性的に興奮する」というのは発想になかった(´ー`; )

2009/02/13

Autopagerize

http://userscripts.org/scripts/show/8551
https://addons.mozilla.org/ja/firefox/addon/748

遅ればせながら、ようやく入れてみた。

これは対応しているサイトのページングを自動で行った上で HTML の下部に追加する GreaseMonkey スクリプトである。よって、対応しているサイトはスクロールを下にずっと続けていくだけで光速な流し読みが可能になる。

「光速でインストールすべし」と言う他人の言説は滅多に信用せず、放置さえする技術者失格、かつスーパー天邪鬼の俺がなぜこれを入れたか。それは id:scinfaxi の日記が1日分しか見ることを許していないのに半分カッとなったからである。

一度入れてしまうとその効果はてきめんに現れるもので、はてなばかりでなく常用しているサイトの多くが対応しているという siteinfo の濃さに感心するやら唖然とするやら。もう手放せない。

2009/02/11

INTP

http://www32.ocn.ne.jp/~emina/

性格診断テスト。俺はINTP型だそうだ。よく当たっている。
もうちょっとE型(外向的)に寄ったエンジニアになりたいものだ。最近そう思うようになった。

2009/02/09

Ethna 2.3.6 announced

http://ml.ethna.jp/pipermail/users/2009-February/001099.html

安定版ブランチに、開発版で直したバグのバックポートを取り込んでリリースした。

当初 2.3.x 系の安定版はもうメンテナンスしないつもりだったが、syachi5150さんの多次元配列を取り込むにあたって、ファイルアップロードのバグが見つかった。ただ、それも当初は安定版に取り込まないつもりだった。

だが、このエントリを見て、こんな間違ったコードが広まっているのは安定版のバグのためではないか? こんなコードが広まるのはメンテナとして絶対嫌だと思った。安定版も直しておいた方がいいのではないか? そう考えて急遽方針を転換し、コードを二日でバックポートした。

もう、2.3.x 系にはよほどのことがない限り手を入れないと思う。

How to File Upload with Ethna?

http://blog.cypher-works.com/?p=169

上記は Ethnaと組み合わせてファイルアップロードの処理を説明している。

だが、アップロードされた値を検証するのにくどくど長いコードが書いてあり、Ethnaのウリであるフォーム定義をまったく理解していないといわざるを得ない。

上記のような処理は、Ethna では、以下のようにすれば簡単にできる。コアは フォーム定義と、$this->af->validate() だ。

尚、以下のコードは安定版である 2.3.6 を前提にしている。
$ ethna add-project sample
$ cd sample
$ ethna add-action upload
$ ethna add-view -t upload

app/action/Upload.php を以下のように編集する
class Sample_Form_Upload extends Sample_ActionForm
{
/** @var bool バリデータにプラグインを使うフラグ */
var $use_validator_plugin = true;

var $form = array(
'sample' => array(
// ファイルアップロードのフォーム定義
// 複数アップロードしない場合は、'type' の array を外すこと
'type' => array(VAR_TYPE_FILE), // 入力値型
'form_type' => FORM_TYPE_FILE, // フォーム型
'name' => 'アップロードされるファイル', // 表示名

// バリデータ(記述順にバリデータが実行されます)
'required' => true, // 全てのアップロードが必須
'min' => '50', // 50KB「以上」のファイルが必要
'max' => '100', // 100KB「以下」のファイルが必要
),
);
}

class Sample_Action_Upload extends Sample_ActionClass
{
function prepare()
{
// フォーム定義に従ってアップロードしたファイルを検証
// エラーの場合は元の画面に戻り、エラーを表示する
// いちいち $this->af->get したものをループして全部確かめる
// 必要は全くない
if ($this->af->validate() > 0) {
return 'upload';
}
return null;
}

function perform()
{
// 検証済みのアップロードファイルの中身を取り出し、
// 一時ファイルに保存
$files = $this->af->get('sample');
$photo_ids = array();
foreach ($files as $idx => $file_info) {
// アップロードされている場合のみ、一時ファイルに保存
if ($file_info['error'] != UPLOAD_ERR_NO_FILE) {
$tmp_name = $file_info['tmp_name'];
$tmp_name_new = sha1($tmp_name);
// アップロードされたファイルを /tmp 以下に保存
// 別アクションで、$tmp_name_new を引数としてファイルを
// 見せるようにすれば、アップロードファイルの
// 確認画面も作ることができる
move_uploaded_file($tmp_name, '/tmp/' . $tmp_name_new);
$photo_ids[$idx]['new_tmp'] = $tmp_name_new;
}
}
// 保存したファイル名をフォームに設定する
// テンプレート側では、$form.sample で値が見える
$this->af->set('sample', $photo_ids);
}
}

template/ja/upload.tpl では、以下のようにする。{form_input} や {form} という Smartyタグは、Ethna組み込みの「フォームヘルパ」と呼ばれるもので、ethna_action で指定したフォーム定義にあわせて、入力フォームを自動で生成してくれる。この機能を知らなかった人は、マニュアルをよく読むこと!

ファイルアップロード用なので、{form} タグで、enctype="file" としているのに注意。

{if count($errors)} {* エラーで戻ってきた場合のメッセージ *}
{foreach from=$errors item=error}
{$error}
{/foreach}
{/if}
{* アップロードのフォーム *}
{form ethna_action="upload" enctype="file"}
{form_input name="sample"}
{form_input name="sample"}
{form_submit value="アップロード"}
{/form}


こうした上で、 index.php?action_upload=true にアクセスすれば、以下のような画面が見えるはずだ。50KB以上、100KB以下のファイルを全てアップロードしないとエラーになる。エラーが出なかったら、/tmp 以下にファイルが保存されているのを確認できるはず。


2009/02/06

C++ memo

以下のようなことはどのようなC++本にも書いてある。スルー推奨。
意識したとき(再認識したとき)に書き留めるのは「個人的に」重要なので書いておく。

----
  • クラスメンバとしてポインタを定義する場合は、コピーコンストラクタと operator= に注意
  • クラスメンバとしてポインタを定義する場合は、これらを暗黙のうちに定義させると、コピー元 が消えた際に、コピー先のポインタメンバの実体も消えてしまう。必ず意識し、定義すること
  • コンストラクタとデストラクタは比較的注意がいくが、この二つは見落とされがちである
----
  • (ポインタではない)実体として定義されたメンバは、そのメンバが含まれたクラスのコンストラクタが呼ばれるたびに初期化され、破棄される際に消える
  • 実体として定義すると、そのクラスのインスタンスのサイズが大きくなる。通常、クラスには他のオブジェクトもメンバとして含められるので、ポインタよりサイズが大きいから。
  • 実体として定義されたメンバは、そのメンバが含まれたクラスのインスタンスが生存している間存在する。よって、メンバ関数からその参照を返しても構わないが、そのインスタンスの生存期間は参照を使う側が意識する必要が出てくる

2009/02/03

Ethna DBLayer Discussion

http://ethna.jp/ethna-dblayer-discuss.html

Ethna ではUTF-8化と並ぶ大手術になりうる DBレイヤの変更。これまで変更に対して比較的保守的だった動きともあいまって、議論が比較的熱くなっている。

俺はこの議論が炎上するくらいで丁度いいと思っているので、このブログにもORMに関するエントリを書きまくって、火に油を注ぐつもりです。造詣がない部分なんて、補えばいいんです。チャレンジするのが技術者でしょう?(*゜ー゜)

2009/02/02

Happy Birthday id:[hkn|scinfaxi]!

id:hkn が企画した誕生日オフに参加してきた。
俺は事前に本人の欠席投票により、なぜかスケスケの服を着てこいと言われていた。

出席者は10人。俺はそのうちロリ系の服を着てくる人が二人いると事前に認識していた。ちょっくら遅れて(← 申し訳ない)会場に行くと確かに二人いたんだけど、そのうちのひとりが男だったのでびっくらこいた。この人物がテクニカルな面でも、それ以外の面でも一番面白い漢だったことは間違いない。lisp「コンパイラ」を書いているそうだ。しかしニート。不思議な人が世の中にはいる。タバコや性的倒錯の話でえらく盛り上がってしまった。

twitter や IRC で少ないながらも人々のつぶやきやURLを追いかけていると、それなりに注目する人が決まってくる。以前からの知り合いばかりでなく、そうやって眼をつけた人たちが多く出席していた。id:hayamiz さんや、id:Ubuntu さん、美女撮影会以来の lovalottaもじら組くみちょ。「ガキの使い」が縁で運命の出会いを果たした hasami さん、「中止ボタンがしいたけに見えて困る」 であまりにも有名な裸電球さん、サッカー大好き Makoto1987 さん、など。旧交を温める的な話をしたり、「おおーこれで俺はおまいに眼をつけたんだよ」的な話で盛り上がったりした。

最後に誕生日ケーキが出てきたんだけど、それなりの大きさだったのと、運ばれてきた時に鳴り響く大音量のバースデーソングに余計にびっくらこいた。写真がそのケーキである。いや、本当にめでたいことです。

----

それなりに年齢を重ねた人が「age++」なエントリをブログに書いているのを見ると、果たして素直に「おめでとう」と書いてよいのか迷うことがある。年齢を多く重ねるにつれ、思うところやその人に起こった出来事などから「本当にめでたいと本人が思っているのかどうか」がわからないことがあるからだ。

だけど、今日の主賓であった id:hknid:scinfaxi については、そんな心配は無用だ。彼らは十分に若く、心からおめでとうと言い、それを祝える会であった。屈託なく、心からそう言える間柄。そう思える場をこれからも持ちたいと思うし、維持したいと思う。

2009/02/01

mod_chxj

http://sourceforge.jp/projects/modchxj/
http://www.amazon.co.jp/Apache-Modules-Book-Application-Development/dp/0132409674

mod_chxj は、Cookie が効かない携帯、キャリアごとにバラバラなHTML、対応画像、絵文字等、たくさんのバッドノウハウを埋めるために開発された Apache module である。maru_cc がIRC でひょんなことから話題にしたことで知った。

・・・とはいえ俺は携帯向けコンテンツ開発に詳しい訳ではない。だが、それでも mod_chxj のソースコードは比較的綺麗で、どんなノウハウが詰まってるのか、という部分で、非常に良い学習材料になるから、敢えてここで取り上げた。

基本的には様々な携帯の capability を etc/device_data.xml に持っておいて、そこに定義されたルールと、ディレクティブに基づいて変換ルールを適用するという方法をとっている。Cookieのシミュレートについては、やはりといえばやはりOne time ID または固定ID を URLに埋め込むことで実現している。

絵文字データは etc/emoji.xml にある。こんなノウハウの塊がオープンになるなんて、いい時代に生まれたものだ。

----

閑話休題。mod_chxj は、Apache module の良いサンプルでもある。以下に当てはまる方は、是非お読みになってみると良いだろう。Apache module については、moriyoshi さんにも酔ってお勧めしたものだが、The Apache Modules Book が素晴らしい本である。
  • mod_[php|python|perl] なんて読んでられるか!
  • C言語が読める
  • 携帯コンテンツにも興味がある

2009/01/29

Ethna 2.5.0 preview3 announced

http://ml.ethna.jp/pipermail/users/2009-January/001096.html

前回のリリースから3ヶ月半あまり。本当は焼肉会議を踏まえた機能も含めたかったのだけれども、それをやっていたらリリース間隔が滅茶苦茶に開いてしまうので一旦区切ることにした。

11月後半から12月終わりまで全くコミットできず、かつ Overwork で体をおかしくしたりもした。それにもかかわらずここまで来れたのは、新しいコミッタ maru_cc, sotarok や、IRCで雑談してくれたり提案をくれたりした人達のお陰である。特に id:syachi5150 さんには、今回のリリースの目玉となった多次元配列コードを提供して頂いた

このリリースに関わった人達、また、見守ってくれた人達、全てに心からお礼を言いたい。ありがとう!

----

俺はある人に次のように語ったことがある。「今の Ethna は荒地のようなものだ。それを畑にするまではメンテを続ける」と。まだ畑とはいかないが、ペンペン草も生えなかった当時の状態よりは、大分マシな土地になってきた気がする。

今回、DBレイヤの抽象化には結局手がつかなかったが、preview4 では必ず先鞭を付けなければならない。他の人達の力もうまく取り込みつつ、よりよりモノを目指そうと思う。

Konversation KDE4 port Mock

(argnel) and so a roughly 119000 line diff
2009/01/29 08:32:44 *argnel topic : Yes, the KDE 4 port is in the works // No, there's nothing to use or see yet its in /braches/work/konvi-kde4, and it doesn't run)

----

ついにktkr! だけどまだ動きません。モックですから。早速ビルドしてみないとな。

2009/01/28

Ethna Yakiniku-Con(2)

http://ethna.jp/ethna-yakiniku-meeting-20090125.html
http://d.hatena.ne.jp/ichii386/20090126/1232911256

Ethna 焼肉会議が実際に開催された。コミッタ4人、ユーザ2人のこじんまりとした会議ながら、4時間以上に渡ってほぼ Ethna のことばかり話していた。参加した皆様、本当にお疲れ様でした。

中身のことを話せば、上記にある話はいずれも濃いものばかりだったけど、やはり「過去」を知るいちいさんが参加してくれたのが一番大きかったと思う。プラグイン、URLHandler の話では、いずれも「どういう思い、経緯で今のコードに至っているか」という根拠を踏まえた濃い話をすることが出来た。集まった人それぞれにモチベーションはあると思うのだけれども、コミッタの間で意識が共有できたのは決して無駄にならないはずだ。

その上でメタな話をすれば、やっぱり Ethna をこうしたいああしたいという「意思」を強く感じた会だったと思う。問題意識と言い換えてもいいだろう。それがある限り、プロジェクトが終わることはまずない。参加する前はいったいどういう会になるんだろうと思っていたが、それは全くの杞憂だったようだ。

まずは DBインターフェイスの抽象化をささっとやるべきである、と (*´~`)

[memo] arping(8)

IPアドレスの重複が疑われたら Linux では arping -D を使うとよい。Debian 系なら aptitude install arping でインストール可能だ。-D (DAD) mode でこのコマンドを使って返事が返ってくれば、重複していると判断してよい。

----

$ man 8 arping


NAME
arping - send ARP REQUEST to a neighbour host

SYNOPSIS
arping [ -AbDfhqUV] [ -c count] [ -w deadline] [ -s source] -I interface destination

DESCRIPTION
Ping destination on device interface by ARP packets, using source address source.

OPTIONS
... (snip)
-D Duplicate address detection mode (DAD). See RFC2131, 4.4.1. Returns 0, if DAD
succeeded i.e. no replies are received

2009/01/25

what is Japanese translation of "fork" ?(2)

http://www.producingoss.com/en/forks.html

まだ "fork" の訳には悩んでいる。

できうる限りカタカナの「フォーク」にはしたくない。geek にはカタカナのフォーク一語で済むのかもしれないが、俺や高木さんが相手にしているのは geek ばかりではない。職業的な開発者だって当然ありうるし、*nix のシステムコールを知らない開発者だってあり得るからである。

俺の中で一番しっくりくるのは「派生」または「分裂」、及び「分家」を可能な限り使い分けることである。そして、「フォーク」という用語しか当てはまらない場合は可能な限り別の言葉を選ぶか、「競合プロジェクトを立ち上げる」のように直接説明することである。

----

たとえば、 「code's fork」と言った場合、コードの「派生」はしっくりくるが、「分裂」は明らかに違う。fork はソフトウェアのコピーを持って新しいプロジェクトを立ち上げることであって、コードが真っ二つに割れるわけではないからだ。

一方で「project's fork」と言った場合は、開発者やリソースがわかれてしまうわけだから「分裂」がしっくりくる。人やリソースがコピーされるわけではないから「派生」ではない。

また、fork には、友好的なものもある。プロジェクトの進む方向性に対して相容れない部分が増えたために友好的にプロジェクトが「分かれる」こともある。

上記のリンクでは、「どちらが本家か、forkか」、という議論も行っている。たとえば、以下のような文だ。

since ultimately a project—or a fork—is an entity that exists only in people's minds anyway.(なぜなら、どちらが本家で - どちらが分家(fork)か - は最終的に人々の心の中に存在するものだからである)

この場合は「分家」がしっくりくる。もうこうなったら文脈に応じて訳し分けるしかないという気がする。

2009/01/19

Flickr

http://www.flickr.com/photos/mumumuorg/

Flickr を比較的真面目に使い始めた。

picasalivedoor picshatena photolife など写真共有サービスが数多く存在するなかで、Flickr はスーパー天邪鬼な俺が本来選ばないサービスだ。だが、friendship 的に(友達のみ公開の写真を使っている人が多いという意味で)使った方が都合がよいので選択した、という消極的な理由がある。

まあ、こうして写真をUploadし始めると写真撮りたくなってしまう不思議 (´ー`; )

#なんか相方が俺の裸体写真をこっそり撮っていた上にそれをうpしろと五月蝿い件

2009/01/18

Seagate Drive fails?

http://calves.jugem.jp/?eid=500
http://seagate.custkb.com/seagate/crm/selfservice/search.jsp?DocId=207931&Hilite=

Welcome, Seagate hard drive owners. A number of Seagate hard drives from the following families may fail when the host system is powered on:

Barracuda 7200.11
DiamondMax 22
Barracuda ES.2 SATA
SV35

Once a drive has failed, the data is inaccessible to users. Seagate has isolated this issue to a firmware bug affecting drives from these families manufactured through December 2008.

----

PCをパワーオンしたとたんに、ファームウェアのバグのために2008年12月までに製造されたSeagate製HDDの型番によっては、HDDが認識されなくなる可能性があるとのこと。該当する型番は上記リンクを参照のこと。

俺は割と Seagate ばかり選んで買っていたのだけれども。ただ、最近HDDを買ってなかったし、持っているのは2、3年前(もっと古い?)のモデルばかりだったのですべて難を逃れていた。。(´ー`; )

2009/01/17

Brahms: Hungarian Dance No.6

http://jp.youtube.com/watch?v=xCBsR4lO730

ベタかもしれないが、「ハンガリー舞曲 第6番」は大好きである。夜中に聞いて眠れなくなっても僕は知りませんからね!(2行独白)

※上記の動画には5番も含まれている。6番だけを聞きたい人は 3:05 あたりから聞くとよい。

Ethna Yakiniku-Con

http://d.hatena.ne.jp/sotarok/20090110/1231587632

Ethna 焼肉会議というのが sotarok によって発案された。別にカンファレンスってわけじゃないけど、Ethna を弄る意欲が[ある|あった]人 であれば誰でも歓迎されると思う次第れす (*´〜`)

OSS には新たな血液を常に入れつづけなければならない。一人の発想だけでメンテナンスしていたのでは必ずいつか進歩が止まる。それを避けるためには、意欲ある人をどんどん入れていくのが多分今の Ethna プロジェクトには最適だと思う。それが、 maru_cc や sotarok をコミッタにした狙いの一つでもある。その意味で、モチベーションがある人たちが一同に会することは意義があることじゃないかと思う。

----

とりあえず、現在思い描いている TODO をベースにして、
  • DB まわりの改善
  • 動的フォームAPI
  • URLハンドラ
については少なくとも話して来たいな、と思ったり。

Broadband router broken

ついに自宅のブロードバンドルータがイカれてしまった。外からサーバにアクセスすると一切応答しなくなったので、リンク切れか? と思って戻ってみると、以下の現象が。
  • DIAGランプが赤々と点灯していた(写真)
  • ローカルからWeb経由で操作しようとするとWebサーバが落ちる
  • 説明書によると「フラッシュメモリが読み込めない」状態
もうこれはダメだ、、と思い、無線LANの親機としても機能するブロードバンドルータを買ってきて置き換えた。いろいろと設定を元に戻し、無線LANも有効にしてそれなりのセキュリティ設定をするのに1時間半はかかった。。(´ー`; )

まあ、上記のやつは6年もってくれたわけだ。サーバを自前で持つノウハウを学ぶことを裏でずっと支えてくれた。ありがとう! と心から言いたい。

Overwork

2009年の初仕事を終えたあと、どうも体の調子がおかしい。PCに触ることがいろいろな意味でできなくなった。IRCができなくなった時点で俺はエンジニア人生終わりだと思っている(嘘)ので、医者に行ってみると「過労」と診断された。現在は処方された薬を飲みながら、フルパワー時のパフォーマンスの4割くらいで仕事をしている。

先月確かに普通じゃない働き方をしたのは確かだが、「心が壊れなければおk。心が壊れなければ体は壊れない」的な思考でいた。それが間違いだと気付いたのは、明らかな変調を来してからである。

「体はいいけど心がついてこない」、という人間は俺の業界に浴びるほどいる。自分はそうはならない、と思って来たのだが、逆の意味(体が壊れたという意味)でツケがまわってきたのは意外だった。これもひとつの教訓だろう。そう、酒の限界を知るときのように(違

----

こうしてブログが書けるということは、ちょっとは回復したということだろう。

情熱(モチベーション)は失ってはいない。但し、気負ってはいけない。
それが、一番大事なこと。

2009/01/09

[memo] Ethna Dynamic Form API implementation

超個人的なメモでつ(*´〜`)

Ethna は フォーム定義を以下のように固定で書くので、フォーム定義が動的に決まる場合にどこにそれを定義するコードを書けば良いかわからない、という問題が存在する。

var $form = array(
'sample' => array(
'type' => VAR_TYPE_INT,
'name' => 'サンプル',
),
);

現在は、prepare() に書いたり、Ethna_ActionForm の子クラスのコンストラクタに書いたりするしかないのであるが、現在の安定版では DBアクセス等のロジックを Ethna_ActionForm のコンストラクタに書くことができない。なぜなら、Ethna_Backend や Ethna_Session 等の、必要なオブジェクトが初期化されていないからである。

----

現状のtrunkでは、Ethna_ActionForm 初期化後に、DBアクセスのロジックが書けるように既に改造済みだったりする。なので、あとは動的にフォームを定義するフックを書くだけである。

実は、動的にフォームを決めるタイミングは以下のふたつがある。こいつらを一緒のフックにするわけにはいかないので、おそらく setD(ynamic)FormDef_[pre|post]Helper とかを定義するのだろう。なんかわかりやすいAPIの名前はないものか。
  • Ethna_ActionClass にアクセスする前に、Ethna_ActionForm を初期化した直後
  • View と連携するためのフォームヘルパを使うとき、Ethna_ActionForm を初期化した直後

jqModal: Minimalist Modaling with jQuery

http://dev.iceburg.net/jquery/jqModal/

jqModal は、いわゆる(モーダル)ダイアログをクロスブラウザで実現するための jquery plugin である。様々なフックを持ち、CSSによる見た目の改造も容易。かつAjaxにも対応していたりとかして、普通に使い勝手が良いのでメモしておく。

ただ、IE6 には以下の特別な考慮が必要だ。正直 IE6 死ねばいいのに、と思う。
あとは、ドキュメントと、デモにある豊富なコードを参考にすれば問題なく動いた。

2009/01/05

MX was down

MX が正月早々落ちて大変焦った。帰省中なのにリモートからの操作にまったく応答しなくなる。
巻き添えで内部DNSも落ちた。今日帰京してみたらHDDが死んでいた、、(´ー`; )

いつものようにknoppixでデータを救い出し、予備機にデータを移す作業に3時間を費やすハメに。新年早々サーバ管理は暗雲が漂う。440BX とかいう骨董品を騙し騙し使っているのだが、いい加減 MX 用にも新しいマシン組もうかなと思ってしまう。

2009/01/04

in Hiroshima

帰省中。年末年始はのんびりしながらコードを書くなどする。5日に帰京予定。

  • 12月31日 ガキの使いを見つつ年越し。あまり体調が良くなかったんで殆どコードは書けなかった。twitter のタイムラインを見る限りは、紅白を見ていた連中が多かったようだが俺はその中で空気を読まずにガキの使いの話ばかりしていた。
  • 2009年1月1日 帰省は翌日にする予定だったのだが、思うところあってこの日に切符を買って新幹線に飛び乗った。N700系はすこぶる快適で、コードの設計もうまくいく。
  • 1月2日 前日新幹線で考えたことをコードに書く。2、3コミットくらいしたと思う。初夢は見なかったというより記憶にない。
  • 1月3日 親戚廻り。帰宅後コードを書く。2コミットくらいしたと思う ← イマココ

多次元配列の取り込みなど、機能を複数加えたのと複数バグ修正したらもうお腹いっぱいかも。

----

帰省の目的は親に顔を見せるためなのだが、東京とは空気が違うのですこぶる居心地がよろしい。まああんまり長居するところではないのだが (*´〜`)

2009/01/01

New Year 2009

皆様、明けましておめでとうございます。本年もどうぞ宜しくお願い致します。
以下抱負(?)めいたものを。
  • Ethna 2.5.0 を出す
  • 本をちゃんと出す
  • 本業を組み込みにシフトさせる
  • コードを書くモチベーションの引き出しを増やす
----

最初の項目は、割と触っていてやりたいことが右往左往してたりするのだけれども、12月に区切りをつけた仕事で割と固まってきたので、あとは書くのみ。

2番目はまあ半分仕事でもあるので、きちんとやり遂げるだけ。クオリティーをどれだけ高くできるかが問題。Best を尽くすのみ。

3番目は、今のやり方で本業としてWebに関わることをやめる、というだけで、Webを追うことをやめるわけではない。要するに関わり方を変えるだけ。

最後が一番大事なことである。新しい技術を知ったり、試したりすればそのうち見つかるという説もあるが、きちんとコミットできるところまでいくのはそう簡単なことではない。まあ、何事も小さなことから始まるものだ。動かなければ何も始まらない。