2008年05月28日
スマートなプロパティ変更通知
あるオブジェクトのプロパティが変更された場合に、他のオブジェクトへ通知する必要がある場合は多い。
自分で実装しても良いが、JavaBeans用の既存の仕組みを使わせてもらう。
具体的にはイベント通知のサポートをしてくれるPropertyChangeSupportをフィールドに持ち、PropertyChangeListenerを外部から受け入れ、任意の箇所でPropertyChangeSupport.firePropertyChangeを呼び出して各リスナに通知する。
以下のページに簡単に解説してある。
プロパティの変更を通知する仕組みを作成する
プロパティのバインドとサポート・クラスの利用
簡単便利でお手軽により協調的な仕組みを作ることができる。ナイス。
悪しき相対主義
悪しき相対主義と言う単語を聞いたのでメモ。
以下のページがわかりやすいか。
「人それぞれ」って言うな
異なる意見を乱暴に受容することで、一見意見を受け入れたかのように見せかけて実は受け入れていなくて問題の先延ばしをしている。みたいな理解で良いんだろうか。
「悪しき相対主義」の肯定意見としては、「その議論には時間をかけるだけの価値を見いだせないから議論を終わらせたい」と言ったところか。「もうどうでもいいよ」と言うと角が立つので「そういう見方もあるよね。うん。」で話を終わらせると。
「その問題はもっと深く議論するべきだ!人それぞれで終わらせるな!」・・・うん、もっともだ。
「もういい、意見が違うのは十分わかった。考え方は人それぞれだからね。万人が納得できる意見はない。」・・・うん、わかる。
人はそれぞれで、議論する価値基準も人それぞれだから、こういう食い違い、平行線、終わらない会議が出るのも仕方ないよね。・・・・ってこれなんて悪しき相対主義?
2008年05月27日
Readability over Convention
最近、流行のS2Daoを試してみた。
S2DaoはCoC(Convention over Configuration:あるルールでコードを書けば設定ファイルなんて要らないZE☆)と言う思想で、設定ファイルを極力書かずにORマッピングができるので非常に便利だった。アクセステーブル名はクラス名、カラム名はプロパティ名、DAOの検索メソッドはselectから始まるメソッドなど。制限も少なく、さくさく書ける。あとはフレームワークが全部してくれる。iBATISとかHibernateと比べると圧倒的に楽だ。
が、Ruby on Railsで流行りだしたCoCブームも一段落すると欠点も見えてきたようだ。
CoCだと規約(Convention)を理解していないと、何をやっているか全くわからないという点だ。(全くというのは言い過ぎか)
CoCはおそらく開発者のリズムを崩さないと言う要素を最大化する思想なので、精通した技術者が少人数でガシガシコードを書くには最適だと思われる。
しかし現実のプロジェクトでは人の入れ替わりは激しいし、人によって技術の差も大きい。
よってそんなときCoCは足かせとなってしまう。
と言うことで、それは問題だ!と思う人向けにS2JDBCと言うのが出てる。
こちらは既存のフレームワークのリズムの悪さと、CoCの規約まみれの解決策として可読性を最大化するように設計されているようだ。
こちらはまだ全然使っていないので、何とも言えないが、コードを見る限りよさげだ。
たとえば検索クエリは以下のようになる。
Listresults = jdbcManager.from(Employee.class).join("department")
.where("id in (? , ?)", 11, 22)
.orderBy("name desc")
.getResultList();
S2DaoよりもSQLを細かいところまで自動生成してくれるようなので、S2JDBCの方がさくさく書けるかもしれない。
Web系Javaはこういう「こんなん便利じゃね?」「いやいやこういうやり方こそスマートだ!」みたいなのがどんどん出てくるので面白いな。
おそらく、全部のフレームワークの良いところばかり集めたバランスの良いフレームワークが一番なんだろうけど、今はまだ試行錯誤の段階でRuby on RailsやS2Daoのような提案手法に特化したものが出尽くすのを待つ時期なんだろう。
2008年05月21日
My Programming Language
This is my programming language.
There are many like it, but this one is mine.
My language is my best friend. It is my life.
I must master it as I must master my life.
My language, without me, is useless.
Without my language, I am useless.
my languageっていう表現は微妙だったりするかな。まぁいいや。
N-gramの出現頻度で、その表現がどれぐらい適切で一般的か検索できるアプリがあればいいなとふと思った。
2008年05月20日
Eclipseのアイコン画像だけ収集
プログラムのアイコンの画像が欲しいときにEclipseのアイコンは非常に助かる。
が、アイコンの画像だけを取り出したいと思ってもちょっとめんどくさい。
ググってみるとEclipseのCVSからアイコンだけ取り出してくるスクリプトが公開されているのを発見した。
Eclipse Icons - follow up post
具体的には以下のような感じ。
これでアイコンだけzipにまとめてくれる。
#!/bin/sh CVSROOT=:pserver:anonymous@dev.eclipse.org:/cvsroot/eclipse export CVSROOTmkdir -p eclipse
cd eclipse
cvs -q co org.eclipse.debug.ui/icons
cvs -q co org.eclipse.pde.ui/icons
cvs -q co org.eclipse.jdt.ui/icons
cvs -q co org.eclipse.vcm.ui/icons
cvs -q co org.eclipse.team.ui/icons
cvs -q co org.eclipse.ant.ui/icons
cvs -q co org.eclipse.help.ui/icons
cvs -q co org.eclipse.ui/icons
cvs -q co org.eclipse.ui.views/icons
cvs -q co org.eclipse.ui.console/icons
cd ..
rm -f ~/public_html/eclipse-icons.zip
find eclipse -name "*.gif" -print | zip ~/public_html/eclipse-icons.zip -@
2008年05月19日
設定済みMeadow
Windows上でもEmacsをと思い、Meadowを使い出したのだが、印刷ができなかったりフォント設定がよくわからなかったりで「ぐぬぬ」な感じだった。が、そのあたりが設定済みのMeadowを公開してくれている人がいたので早速導入してみた。
設定済み Meadow を使ってみよう
メモ帳経由で印刷できることを確認。
フォントもちゃんとMSゴシックだしすばらしい。作者様に感謝。
しばらくこのMeadowをメインのテキストエディタとしてがんばってみるか。
愛用しているサクラエディタがユニコード対応になりつつあるようだ。通常版は内部コードにSJISを使用。
サクラエディタUNICODE化プロジェクト
最近仕事で中国語を扱うことがあるので、そのときだけ秀丸を使っていたのだけど、サクラエディタでできるならありがたい。今後に期待だ。
2008年05月16日
天才
毎度おなじみのとある界隈で話題の天才コンプレックスを読んで。
ホントにいるんだな、こういう小学校の頃にIQがめちゃ高くて神童チックな人。
この記事では小学校の頃に天才だと言われ育ったが、大人になり"天才"として期待に答えられない自分とのギャップに苦しむ経験を書いてある。
世に名前が知られていて上の記事に出ているような人たちは、きっと"天才"と言う要素よりも"行動力"の要素が強いような気がするな。天才だから物事を成し遂げることができるのではなく、行動力があってアウトプットをきっちり出せるから物事を成し遂げられると。もちろん中にはフェルマーのようなアウトプットが全くなくても、死後に天才だと認められる人もいるけど。
と言うことで自分に「行動力が大事なんだぞ!」と言い聞かせる。
最近サボっているので気を引き締めねば。
また、3つの努力も心に刻む。
話は変わるけど最初の記事に出てくるジョン・ロメロは、一般に天才と認知されているんだろうか。ジョン・カーマックなら同意する人は多いだろうけど。ロメロは独立してから一度もヒット出さないまま行方不明になったからなぁ。(どちらもDOOMの開発者)
IQがどうたらこうたらという話を聞いてIQテストをやってみる。
こういう試験でホントの賢さを計ることができるとは思えないので、「IQが○○だった。むふふ。」とニヤニヤするのがIQテストの正しい楽しみ方なんだろうな。問題自体は割と面白い。わかった瞬間の電球がピカンとなる感じがプログラミングとよく似ている。
2008年05月12日
H2 Database Engine
仕事で使用するDBとしてH2 Database Engineを使っている。
H2を使う上でのちょっとしたメモ。
Linux版のインストールは単にファイルを解凍するだけ。bin/h2.shを実行すればOK。
設定はservice/wrapper.confをいじる。
ローカル以外からのWebコンソール画面の表示を許可するには以下のように設定。
h2server.shとか作って
#!/bin/sh
cp=h2.jar
if [ -n "$H2DRIVERS" ] ; then
cp="$cp:$H2DRIVERS"
fi
if [ -n "$CLASSPATH" ] ; then
cp="$cp:$CLASSPATH"
fi
java -cp "$cp" org.h2.tools.Server -tcpAllowOthers -pgAllowOthers -webAllowOthers
とオプションを付ける。
RubyからH2にアクセス。日本語英語ともに情報が少なくちょっと苦労した。わかればなんてことはない。
-pgAllowOthersを付けて実行し、postgreSQLプロトコルをONにする。
サーバ起動時に以下のようにPGサーバがothers can connectになればOK。
PG server running on pg://localhost:5435 (others can connect)
ログにでると思うが、デフォルトで5435ポートで待ち受ける。
RubyはPostgres(Ruby PostgreSQL 拡張モジュール)を使うのでそれを入れる。
H2デフォルトのパスワード無しのユーザでログインしようとすると以下のように怒られる。
fe_sendauth: no password supplied (PGError)
パスワード無しユーザーでのログインはRubyのPGモジュールで対応していないようだ。
よってパスワード有りユーザを作成する。
CREATE USER user PASSWORD 'hoge';
ALTER USER user ADMIN TRUE;
みたいな感じに作って管理者権限も与える。
後はRubyで以下のように実行。
require "postgres"
conn = PGconn.connect("123.456.789.123", 5435, "", "", "DB","user","hoge")
res = conn.exec("select * from TABLE;")numFields = res.num_fields
numTuples = res.num_tuples
numTuples.times{ | i |
text = ""
numFields.times{ | l |
if res.getvalue( i , l ) != nil then text = text + res.getvalue( i , l ) end
text = text + ","
}
puts(text)
}
2008年05月11日
2008年05月09日
2008年05月03日
Ubuntu上でFlashのフォントが変わった
8.04にしたらなんかFlashでのフォントが以下のように変わった。バージョンアップ時にGUIに設定しているフォントがFlashに反映されたようだ。
![]()
フォントはLinux、Windowsともに常用しているM+ と IPAフォントの合成フォント、フリーな癖してめっちゃきれいなフォント。GUIにもプログラミングにも最適だ。
こっちのほうが好きなので別のマシンでも変更したいけどどうすればいいんだろう。
と思ったら設定している人がいた。
[Linux][Ubuntu][Firefox]ニコニコ動画のフォントを変えてみる
http://d.hatena.ne.jp/CoolDriver/20080228/1204199628
情報の通りに修正すればフォントを変更することができた。例にあるのは同じフォントだけどゼロに斜線を入れているほうなのでフォント名は以下の通り。
<string>M+2VM+IPAG circle</string>
ちなみにニコ動の画像は「ドラクエ5 マイナーモンスターズ」
ドラクエ5で普通は使われないマイナーなモンスターだけ(人間キャラも使わない)でクリアするという制限プレイの動画。ダンスニードルのダニーが非常にかっこよく、また愛すべき馬鹿の子ですばらしい。ボス戦の数々の死闘は必見。
Ubuntu 8.04でVMware Server
家のUbuntuをUbuntu 8.04にアップグレードしてみた。
Firefox3bateになったぐらいで特に目新しい変化はない。
ATOK X3もそのまま順調に使用可能だ。
もう一台Ubuntu 7.10がインスコされてるマシンがあるけどそっちはアップグレードせずそのまま使おうかな。これといって8.04でうれしいこともないし。
ところで8.04にすると例によってVMwareが動作しなくなる。
以下のページと同じ現象になったので同じように対応。
http://myn.meganecco.org/2007122300
それではまだ足りず、./vmware-config.plすると以下のようなエラーメッセージ。
/tmp/vmware-config1/vmmon-only/linux/driver.c:1659: error: ‘struct mm_struct’ has no member named ‘dumpable’
これはvmware-any-any-update116を使うことでいけた。
入手先はhttp://groups.google.com/group/vmkernelnewbies/files
VMware serverもaptでお気軽インスコできるといいんだけどな。