2006-01-31

ショックなニュース二つ

スラッシュドット ジャパン | プログラミング情報誌「C MAGAZINE」が休刊か

2006年3月発売号で休刊だそうです。休刊≒廃刊ってことだよなぁ,残念。
私も「C MAGAZINE」の愛読者でした。私がプログラミングを始めたのは中学生ぐらいだったんですが,インターネットも無く,パソコン通信もやってない人間にとって,この雑誌は貴重な情報源でした。C言語もJavaも最初は「C MAGAZINE」で勉強しましたね(中学生に1800円は痛かったけど)。

「C MAGAZINE」はわりと骨太な技術の特集をやってましたね。確か,自分がデータ圧縮やコンパイラの構成について知ったのもこの雑誌からだったはずです。う~ん,やっぱり残念だ。雑誌はインターネットの情報量には勝てなかったということなんでしょうか? とりあえず最終号は記念に買うことにします。



ソニー、AIBO、QRIO、QUALIA撤退

AIBOが新規開発中止,生産も2005年度末までで終了となるそうです。
実は大学生のころ,AIBOを動かすためのプログラムを書いたことがあります。友人がAIBOを利用した卒業研究をやってたんですが,その助っ人として手伝いました(お礼に寿司を奢ってもらったw)。あんまり覚えてないけど,C++でプログラムを書いて,メモリースティックに転送してAIBOに挿入,再起動して読み込みって感じで開発してました。
AIBOってただのロボットだけど,プログラムを書いているうちに何だか可愛く思えてくるんですよね~。作ったのはAIBOを歩かせるプログラムだったんですけど,最初は上手くいかなくて生まれたての子馬のような動きだったんですよw それが徐々にしっかりした歩きになっていくのは,まるで子どもの成長を見守る親のよう! 
でもそれが生産中止かー。まぁたソニーが詰まらなくなっちったよ。




テンション下げてばかりでもアレなので,面白かったことも二つ。

Waterfall 2006 - International Conference on Sequential Development(via 秋元@サイボウズ研究所プログラマーBlog
「ウォーターフォール開発を見直そう!」というカンファレンス。ナイアガラの滝で開催されるそうです。アジャイル開発プロセスで論文書いた身としては,このネタはかなりキましたw。”ペア管理: プログラマ一人にマネージャ二人”!

やわらか戦車2 ラレコ先生
 Flashアニメです。音楽と絵が絶妙で,ここ最近はこれが頭の中でエンドレスになってます。作者さんのサイトにある「コアラッコ」も最高! コアラッコ,コアラッコ,生まれたときから反逆児~♪

2006-01-25

[映画]『スーパーサイズ・ミー』


Amazon.co.jp:スーパーサイズ・ミー: DVD



ダイエットの一環として見てみた。結論から言うと,もう怖くってハンバーガーなんか食えません。


『スーパーサイズ・ミー』では,監督(上でポテトくわえてる人)が「マクドナルドの食品を一ヶ月間食べ続けたらどうなるか?」ということを検証するため,身体を張ってチャレンジします。そのときのルールは三つ。
  • 1.マクドナルドで販売されているものしか食べてはいけない(水も含む)
  • 2.一日三食,残さず食べる
  • 3.”スーパーサイズ”を薦められたら断ってはいけない

”スーパーサイズ”というのはS・M・Lのさらに上のサイズです。映画で出てきたけど,デカすぎです。コーラのカップなんか子供用のバケツみたいです。

最初は笑顔でハンバーガーを食べていた監督も,二日目にして早くも気持ち悪くなり胃の中がリバースしてました。監督,さすがにスーパーサイズは辛そうです。二日目を過ぎると何とか慣れたみたいで淡々と食べてきます。取材で各地を回りながら,アメリカ各地のマクドナルドを回っていきます。監督,テキサスのご当地バーガーに喜びます(あー,さすがに飽きてたのね)。しかしこのチャレンジは20日を越えたあたりからだんだんとシリアスになってきます。なんというか,壮絶です。最後にどうなったのかは見たときのお楽しみ。
それにしても,監督の彼女がベジタリアンなのは皮肉ですねー,明らかにこの企画は彼女への嫌がらせでしょ(w



ノリとしては電波少年みたいなんですが,監督のチャレンジの合間に,真面目にアメリカの食の問題に切り込んでます。そもそも,この企画が始まったのがアメリカの二人の少女が「自分が肥満になったのはファーストフード店のせい!」って訴えたという事件からです。この事実だけ知ると,「またアメリカで変な訴訟やってんな」って感じに流してしまいそうですが,この映画を見たあとだと簡単には片付けられない問題だということが分かりますね。

マクドナルド生活が始まって,実験台の監督は「マクドナルド中毒」のようになっちゃいます。一日中うつ状態で,ハンバーガーを食べたときだけ気分が明るくなるっていうような状態です。

映画の中でインタビューされている人が言っていましたが,「タバコ会社と喫煙者」の関係が「ファーストフード企業と太っている人」の間にもあるんじゃないかって考え方が出てきます。タバコ会社はきちんとタバコの害をアピールしているし一定の責任は果たしているけど,ファーストフード企業はそれをしていない。売ってるものに中毒性がある以上,これってアンフェアじゃないの? という意見です。アメリカでは肥満が原因の病気で死ぬ人が増えているようで,タバコと比較するのもそんなに的外れではないようです。

法律で規制しようにも,当然ファーストフード企業のためのロビィ団体があるわけで,なかなか上手くはいきません。そんな状況をぶち壊すために監督はこの映画を作ったんでしょう。実際,映画公開後にマクドナルドではスーパーサイズの販売を中止したそうです。映画ではハンバーガーを食べてるだけだったけど,なんか監督がカッコよく思えてきました。


こういうのを見ると日本でも同じことをやってくれないかなーって思いますね。まずはセブンイレブンの弁当か吉野家あたりで。前にコンビニ弁当ばっかり食べてたときに,大分太りましたからね。


この映画を見たあとだと食べ物に関しては気をつけるようになりますね。とりあえずダイエット効果ありだと思います。



【参考リンク】
日本マクドナルドホームページ - 栄養情報
 マクドナルドの食品成分表。どうでも良いけどFlashは使わないでほしい。
外食、食品栄養成分分析マップ
 各種外食産業の食品成分表ページのまとめ

2006-01-24

Programmable Myself #2

以前のエントリのアイデアで思いついたことをメモ。
とっても「チラシの裏」的なエントリなんで,よく分からなくても気にしないでください。


「マネジメントをプログラミングに変える」
自分がやりたいのは「マネジメント」 という言葉を「プログラミング」に変えたいって事なんだよなー。プロジェクト・マネジメントじゃなくてプロジェクト・プログラミング。セルフ・マネジメントじゃなくてセルフ・プログラミングとか言うと素敵。

「精神的サイボーグ」
サイボーグってのは機械で身体の機能を代用する。じゃ,ソフトウェアで自分の仕事の一部を代用する,つまりスケジュールをPDAで管理してアラームで知らせるみたいなことをしている場合も,ある種のサイボーグみたいなものじゃないのかな。この例じゃそうでもないかもしれないけど,もうちょっときめ細かくサポートできて便利になれば,実感も出るのでは。


TODO:
 とりあえずプログラマブルTODOリストについて考えてみる。つーか,分かりにくいからなんか作れ>自分

2006-01-22

ドラゴンを拾った

最近,会社で組織改変がありました。上層部の考えとしては,うちの部署は利益があんまり出てないから,もうちょい収益を考えた開発をしろよってことらしいです。

そんなことで席を移動しなくちゃいけなくなって,机の掃除をしてました。ゴミ出しにいってみると,同期のS氏が何やらゴミ捨て場を漁ってました。ちょっと話してみると,本がたくさん捨ててあって,使えそうなのが無いか探していたとのこと。さすがS氏,ということで一緒に漁ることに。仕事中にゴミ捨て場を漁る男二人。

いろいろ探っていると,見覚えのある表紙の分厚い本がありました。おぉ,これはドラゴンブックではないですか!!! しかも原著! コンパイラの本としては定番中の定番ですよ。

dragonbook

当然,S氏には黙ってゲット。あとでアマゾンで調べてみると同じ本が10,000円ぐらいしてるよ。S氏ありがとう! あと誰だか知らないけど,この本を捨てた人もありがとう! っていうかこんな良い本捨てるんだったら図書室に寄付しろよ!

実際,英語の本なんで全部読むとは思えないけど,ドラゴンブックは持っといて損は無いよなぁ。なんだか言語処理系を作りたくなってきたぞ。



ついでに最近見つけた凄いページをメモ。実際にJavaScriptで作ってる様子をFlashでみれます。

10分で書く字句解析器元ページ
10分で書く構文解析器元ページ

簡単なものだけど,10分で本当に出来てるってのが凄い。下の構文解析器のほうなんか時間が余っちゃってるし。


学生時代もコンパイラの勉強はしたし,研究でPrologのインタプリタも作ったことがあるんだけど,もうちょっと言語処理系の勉強をしてみよっかなー,意外に簡単に出来るかもしれないし。というかプログラム言語作りたい!って最近思ってます。


【過去記事】
サルノオボエガキ: Programmable Myself
 書くの忘れてるわけじゃないすよ。ただこのアイデアの実現するためのプログラム言語が必要かなー,と思ってます。

2006-01-21

TopCoder: Single Round Match 283

Single Round Match (SRM) Schedule at TopCoder

20日は久しぶりにTopCoderのSingle Round Matchに参加しました。

TopCoderというのは,オンラインでプログラミングコンテストをやっているサイトで,参加者は出題された問題を解くプログラムを素早く仕上げる能力を競います。問題はパズルみたいなのが多いですね。TopCoderは,Google主催のプログラミングコンテスト"Google Code Jam"で使われてるのをみて知りました。


TopCoderでは以下のような独自のJavaアプレットで参加します。

TopCoder

上半分に問題文が出て,下半分にプログラムを入力します。右下のボタンでコンパイルやテストが出来ます。完成したと思ったらSUBMITボタンで送信。問題文を開いてからSUBMITまでの時間でスコアが決まります。

SRMがどんな流れで進むかということに関しては以前SRMに参加したときのエントリを参照してください。


で,結果ですが・・・。
またチャレンジフェーズで落とされました! うー,落とされる前までは結構上位だったんで期待してたんだけどなぁ。以下に今回出題された問題をメモっときます。


250点問題「DiagonalDisproportion」
  • 一桁の数字が正方形の行列に配置されているとき,左上から右下への数字を足したものから,右上から左下への数字を足したものを引き算した値を返すという問題。ただし行の数字は1行の文字列の配列で渡される。例:{"190","828","373"}。
600点問題「PowerSupply」
  • 時間が無かったのでパスしました。
1000点問題「FactorialGCD」
  • 整数a,bが与えられたとき,a!とbの最大公約数を求めよ。



250点問題はそんなに難しく無かったです。素直に書いて速攻サブミット。

600点問題はパスで,1000点問題。この問題が結構難しくて,試行錯誤をぎりぎりまでやってました。最初は「最大公約数はユークリッドの互除法で求めればOKだし,1000点にしては簡単じゃね?」とか思ってました。つまり次のようなアホアホなプログラムを書いちゃってました。
public int factGCD(int a, int b) {
int temp = fact(a); // 階乗を計算
return gcd(x, b); // 最大公約数を計算
}

ですが,実行してみるとすぐに分かりますが,階乗ってのがクセモノで,普通に階乗してから最大公約数を計算してると,fact(a)のところで桁あふれになっちゃいます。

ということで何かトリックを考えなくちゃいけない。ユークリッドの互除法の計算では,最初にa!をbで割った余りを求めます。なので別にa!が分からなくてもbで割った余りが分かれば,最大公約数の計算は実行できます。そこで階乗の計算途中にbで割った余りで置換する,という戦略で行きました(合同式の乗法法則)。
つまり以下のようなロジック。
public int factGCD(int a, int b) {
int temp = 1;
for (int i=a; i>0; i--) {
temp = (i % b) * (temp % b);
}
return gcd(b, temp);
}

これで桁あふれはしなくなったんですが,問題文で紹介されている例(a=2097711064, b=2147483646)だと,制限時間2秒以内に終わりません。そこで細かい条件を考えて調整しつつ,制限時間10分前で何とか2秒以内に計算させることが出来ました。結構苦労したので「やった!」と心の中で叫んでました。
で,最終的にサブミットしたのが次のプログラム。
public int factGCD(int a, int b) {
// aの方が大きかったら階乗にbが含まれるのでbが最大公約数
if ( a >= b ) return b;
int temp = 1;
for (int i=a; i>0; i--) {
temp = (i % b) * (temp % b);
// 階乗の途中計算がbの倍数になったらループを抜ける
if (temp == 0) break;
}
// a!がbの倍数になっているので,bが最大公約数
if (temp == 0) return b;
return gcd(b, temp);
}



でもチャレンジで落とされたんですよねー(チキショウ!)。今,冷静になって考えてみると,階乗の計算式がおかしい気がします。(i%b)*(temp%b)じゃなくて,(i*temp)%bでよかったんじゃないかなぁ。そこで代入されるtempで桁あふれが起こっていたと思います。


ともかく,久しぶりに全力で集中してプログラムを書けたので満足です。最近はEclipseのプラグインを弄ったりフレームワークを使ったり,素直に1からソースコードを書くことが少なかったので,こういうのは息抜きに良いですね。今後もTopCoderのSRMには参加していこうと思います。

一応,TopCoderにはdeltam81の名前で参加してますので,よろしく。


【関連リンク】
4TopCoder
日本人でTopCoderに参加している人のBlog。問題について詳細に解説されているので勉強になります。
TopCoder Events Calendar
TopCoderのイベントスケジュール。

【過去の記事】
サルノオボエガキ: TopCoder
サルノオボエガキ: Single Round Match 255 at TopCoder

2006-01-12

エクササイズリーディングのすすめ

今週はずーっと定時後に『Eclipseモデリングフレームワーク』を読んでいるので,スポーツジムに行けてませんでした。そのせいか,何だか体の調子が悪いし,気分が良くない。カロリーばっかりとって消費しないのは,ダイエットをする人間として邪道です。

そこで「本を読む」,「ジムで運動する」ということを同時にやってみました。要するにジムでエアロバイクを漕ぎながら本を読むってことです。名づけて,”エクササイズリーディング”! 実際にやってみて,いくつか良い点が分かったので書いてみます。

    良い点
  • エアロバイクに乗っている最中は他にやることが無いので,読書に集中できる。
  • 難しい本を読んでも眠くならない。
  • 運動をしているせいかテンションが高くなり,内容にのめり込める

『Eclipseモデリングフレームワーク』は比較的難しい内容の本なので,途中で読み続けるのを挫折しかけたり眠くなったりするのですが,さすがにエアロバイクに乗りながら眠るのは無理です。アドレナリンが出ているせいか,妙にやる気が出ます。
あとテンションが高くなっているので内容にノリやすいってのもあります。例えばさっき読書しているときは,心の中はこんな感じでした。

    「ヤッベ,EMFすごくね? Ecoreってのを使えばJavaコードを完全にモデル化できるし,モデル化しちゃえばあとはXMLなりUMLなりに変換し放題じゃん! バケモノだよ,バケモノテクノロジーだよ,こんなんがオープンソースかよ,世の中どうなってんだ!」
・・・。まぁ,テンション高くなってましたから。


前によくジョギングしていたときは,茂木健一郎さんの講演・講義のMP3ファイルを良く聞いていましたが,そのときも集中して聞けました。運動しながら情報をインプットするのは効率が良いのかもしれないですね。

自分としては,時間が節約できてしかも効率的なので,このエクササイズリーディングはグッドなソリューションでした。これからしばらく続けていこうと思います。

Eclipseモデリングフレームワーク


Eclipseモデリングフレームワーク



Visual Editorのソースを調べているとEObjectやeGet()なんていう文言を良く見かけます。この文言はVisual Editorの内部で使われているEMF(Eclipse Modeling Framework)に関係のあるものみたいです。

EMFはXML,Javaコード,UMLを相互に変換可能にするためのフレームワークです。例えばXML文書を元にJavaコードを自動生成したり出来ます。モデル駆動型開発(MDA)を実現するために作られたそうで,そのせいか上記の本の帯には『モデリングすべきかプログラミングすべきか,それは問題ではない』なんて格好いいコピーが書かれてました。Visual Editorでは画面レイアウトとソースコードの同期を取ってますが,その機能にEMFが使われている模様。

Visual Editorを理解するためにこの本を現在読書中なのですが,やたら抽象的で自分の頭には難しいです。ややこしいけどEMFって「モデルを記述するためのモデルを扱うためのフレームワーク」なので,やたら汎用性があって複雑です。なんか数学の本みたい。

でも早急にEMFについて覚えないと仕事が進まないので,今週中に一通り目を通しておくこと>自分。


【Visual Editor関連の過去エントリ】
サルノオボエガキ: Eclipse GUI作成プラグイン 『Visual Editor』
サルノオボエガキ: 『Visual Editor』拡張に関するドキュメント
サルノオボエガキ: VisualEditorのパレットにGUI部品を追加する

2006-01-05

VisualEditorのパレットにGUI部品を追加する

Visual Editorの簡単な拡張についてちょっと書いてみます。Visual Editorについては下の以前のエントリを参照。

Eclipse GUI作成プラグイン 『Visual Editor』



VE_Palette
左のVisual Editorの画面で赤く囲ってあるのがパレット。GUI画面を作るときは,ここから追加するGUI部品をマウスで選択して,画面上に貼り付けられます。

画面ではSwingとAWTの部品が表示されてますが,自分でカスタマイズしたGUI部品をVEで使いたい場合はどうすれば良いんでしょうか? これには二つ方法があります。一つ目はパレット上にある”Choose Bean”を選択して,表示されるダイアログに追加するGUI部品のクラス名を入力して選択する方法。二つ目はVEを拡張するプラグインを作成して,新たにパレットに項目を追加する方法です。

一つ目の方法を使えば,特別なことをしなくてもカスタマイズしたGUI部品も使えますが,いちいちクラス名を入力するのは面倒くさいですね。第一,面白くないです。なので今回は二つ目の方法の,VEパレットを拡張するプラグインを作成してみます。



テストに使用した環境は,Eclipse3.1,VisualEditor1.1.0です。他の環境では試してないので動作結果は不明。
テストのため,JLabelを継承したMyLabelというクラスを作成しました。これをVEパレットに追加してみます。以下にその手順を簡単に箇条書きしてみます。

  1. プロジェクトの新規作成
    • プラグイン・プロジェクト
        名前: AddPalette
        OSGiバンドルマニフェストは作成しない
        ”以下のテンプレートを使用してプラグインを作成”のチェックを外す
  2. 準備
    • GUI部品
        test.palette.parts.MyLabel
        テキストに接頭語と接尾語をつけるラベル
    • アイコン
        iconsフォルダ作成
        適当なアイコン追加。example.gif
    • Jarファイル
        srcフォルダをカレントフォルダにJarでエクスポート
        addpalette.jar
  3. XMIファイルの作成
    • このXMIファイルでパレットの表示内容を設定します。
    • ”プロパティ”でエンコーディングをUTF-8にする(注意! これをしないと日本語が使えません)
    • グループタグ
    • アイコンの指定
    • クラスファイルの指定
    • 表示文字列の指定
    • 変数名の指定
  4. plugin.xmlの編集
    • プラグイン依存関係を追加
        org.eclipse.ve.java.core
        org.eclipse.jdt.core
        org.eclipse.jdt.ui
    • 拡張
      • クラスパスコンテナページ
          org.eclipse.jdt.ui.classpathContainerPage
          name: AddPaletteライブラリ
          class: org.eclipse.ve.internal.java.wizard.RegisteredClasspathContainerWizardPage
      • クラスパスイニシャライザ
          org.eclipse.jdt.core.classpathContainerInitializer
          class: org.eclipse.ve.internal.java.core.RegisteredClasspathContainerInitializer
      • VEレジストレーション
          org.eclipse.ve.java.core.registrations
      • VEコントリビュータ
          org.eclipse.ve.java.core.contributors
  5. プラグインのテスト
    • ランタイムワークベンチを起動
    • SwingのJFrameを作成
    • ”AddPaletteライブラリ”を追加
    • JFrameをVEで開く
    • テストグループがあればOK
  6. プラグインのエクスポート
    • bin.includesに追加
      • icons/
        addpalette.xmi
    • ECLIPSE_HOME/pluginsに展開
    • Eclipseの再起動


このプラグインをインストールして,プロジェクトにAddPaletteライブラリを追加すると,以下のようにパレットに追加されます。

AddPalette




上記の手順で作ったプロジェクトのファイルを下に置いときます。細かいところは説明しきれないのでファイルを参照してください。というか正直良く分かってないところのほうが多いです。VE拡張は難しい!

AddPalette.zip

Programmable Myself

「プログラム可能な自分」というアイデアを思いついた。とりあえずタグ付けして,後で書く。

タグ:
ユビキタス,GTD,メッセージ,アスペクト,XMLと社会契約論,ソフトウェアプロセス記述言語

2006-01-04

GoogleDeskbarのカスタムサーチ設定を晒してみる

”GoogleDeskbarのカスタムサーチをエクスポート/インポートする” でカスタムサーチ設定の移動方法を説明したので,自分がどんな設定でGoogleDeskbarを使っているか,公開してみます。


DeskbarPict


いっぱい登録してあるけどよく使うのは2,3個だけですね。del.icio.us,辞書系,GMailが良く使うかなぁ。特にdel.icio.usのタグ検索は最近はDeskbarからしか使わなくなっちゃいました。del.icio.usとDeskbarは相性良いです。

一応,エクスポートしたファイルも置いておきます。XMLタグとして書いてあるので,見てみれば設定内容は分かると思います。

gdeskbar_exp.txt

GoogleDeskbarのカスタムサーチをエクスポート/インポートする

あけましておめでとうございます。今年もこのブログをよろしく。
新年一発目の記事は,去年書き忘れてたやつです。いきなりこんなネタです。


----
Googleがリリースしているデスクトップツールはいろいろあるけども,GoogleDeskbarには一番お世話になっています。Googleデスクトップサーチより便利だと思う。 GoogleDeskbarをインストールすると,ディスクトップのタスクバーにGoogle検索窓が常に表示されるようになります。これでWinキー+Gで検索窓に移動,キーワードを打ち込んでやれば,検索結果が小さなブラウザに表示される。この小さなブラウザがコンパクトで良くて,作業中にちょっと調べたいときなどにはちょうど良い。


GoogleDeskbarにはカスタムサーチという機能があって,これを使えばGoogle以外の検索エンジンでも検索できるようになります。というか検索サイトじゃないものも登録できるので,よく使うサイトなんかを登録しとくとIEの"お気に入り"みたいな感じで使える。私はWebアプリをいくつか登録しておいて,ランチャーのような感じで使ってます。カスタムサーチにはショートカットキーも登録できるんで,慣れるとすんごい便利。



こんな風に便利なDeskbarのカスタムサーチだけど,良くない点が一つあります。それはカスタムサーチの設定を取り出せないこと。設定ファイルとかに書いてあれば簡単なんだけど,調べてみたらどうやらレジストリにしか書いてないみたい。そこでカスタムサーチ設定をエクスポートするスクリプトを書いてみました。言語は例によってGroovy。


まずはエクスポート用。
GDeskbarExport.groovy
import org.codehaus.groovy.scriptom.ActiveXProxy

regPath = { keyNum -> "HKEY_CURRENT_USER\\Software\\Google\\CustomSearch\\${keyNum}" }

wshell = new ActiveXProxy("WScript.Shell")
try {
num = 0
while (num < 30) {
reg = wshell.RegRead((String)regPath(num++))
println reg.value
}
} catch (Exception e) {}
上記スクリプトは,"groovy GDeskbarExport.groovy > gdeskbar_exp.txt"みたいな感じで起動してください。
次にインポート用のスクリプト。これは"groovy GDeskbarImport gdeskbar_exp.txt"って感じで読み込ませてください。

GDeskbarImport.groovy
import org.codehaus.groovy.scriptom.ActiveXProxy

regPath = { keyNum -> "HKEY_CURRENT_USER\\Software\\Google\\CustomSearch\\${keyNum}" }

wshell = new ActiveXProxy("WScript.Shell")

num = 0
new File(args[0]).eachLine { line ->
wshell.RegWrite((String)regPath(num++), line, "REG_SZ")
}

上記のスクリプトではScriptomというコンポーネントを使っているので,使う場合は先にインストールしとかないと動きません。このスクリプトでは基本的にカスタムサーチの設定は全部上書きです。元々あった設定はなくなっちゃいます。あと,レジストリを触るスクリプトなんで,使う場合は自己責任でお願いします。自分のPCでは上手くいったけど。


でもこういうスクリプトは本当はVBScriptで書くのが素直だよなー,と思ったのでVBSで書いたスクリプトも一応置いときます。言語が変わっただけで,やってることは上と同じです。これならGroovyが動かない環境でも使えます。

GDeskbarImport.vbs

GDeskbarExport.vbs

2005-12-25

ダイエットの途中経過

2ヶ月ぐらい前からダイエットのためにスポーツジムに通い始めました。週に二日はジムのマシンでひたすら筋トレと有酸素運動をストイックにやってました。

昨日は,ジムに入会したときに測定した身体データ(体重,体脂肪率,筋肉量など)と,現在のデータを比較するというイベントがありました。結果というと,筋肉量は2kg増量! 体脂肪率は2.5%低下! 体重は1.1kg増量! ってあれ?

うーん,ちょっと納得いかないけど,トレーナーさんによると「筋肉量が増えて体脂肪率が減ってるので理想的」ということらしい。とりあえずジムに通った成果は出ているみたい。もうちょっとだ,がんばれ! ファイト! >自分。


しかしジムでひたすら筋トレも飽きてきちゃったので,今後はスイミングを平行してやっていこうという予定。思えば当初の予定はきっちり長距離を泳げるようになることだったのだ!(昔の記事)。

ということで,昨日泳いできました。前よりも微妙に泳げるようになってきている気がする。腕のスイングに合わせて体の軸を左右にロールさせることで,姿勢を安定させることが出来ることに気がついた。でも息継ぎがやっぱり下手なので,これは今後の課題。一応,500メートル泳いできました。

久しぶりに泳いだので,今日は体中が筋肉痛っす。筋肉痛のクリスマス。きっとサンタもプレゼント配りで筋肉痛。

クリスマスにLaQで遊ぶ

LaQ_ChrismasTree昨日,LaQというパズルを買いました。これはレゴブロックみたいなパズルで,四角と三角のピースを組み合わせていろんな形が作れるというやつ。球体とか立体的な複雑な図形が作れるってのが売りらしいです。公式ホームページにあるギャラリーにはすごい作品がたくさん。

適当に組み合わせているだけでも,幾何学的な綺麗な形が作れるので,無心で遊んでしまいました。ピースを組み合わせるときにパチッと音がするのが気持ちいいです。子どものころレゴが好きだった人はハマるはず。


ところで今日はクリスマス。なので,このLaQでクリスマスツリーを作ってみました(写真)。子どものころにレゴのヘビーユーザだったせいか,ただピースを組み合わせているだけなのに楽しい。クリスマスに一人なのに楽しい(哀。


えーと,とりあえずLaQは子どもへのクリスマスプレゼントに最適ですよという結論ということで。

2005-12-05

インストールしたソフト一覧をプロフィール代わりに

Going My Wayさんにエントリを取り上げて貰いました。

Going My Way: 名刺の裏やサイトのAbout欄、プロフィール欄にインストールしているソフト一覧を書くというアイディア

元になってるエントリはこれ。書いた本人も忘れていたアイデアに目をつけるとは,さすがですね(笑。
言いだしっぺが何もしないのもアレなので,プロフィールのところに追加しときました。


Going My Wayさんは,Lifehack関係の情報を探していて知りました。最近私はGoogleEarthにハマってるんですが,これについてもいろいろ面白い記事がありますね。
こちらのアイデアも面白そう。

2005-12-04

Binary2.0な小ネタ "排他的論理和でSWAP"

いやなブログ: Binary 2.0カンファレンス2005

Binary2.0ってのが最近注目されてるみたいです。これ関係の記事を読んでいて昔発見したテクニックを思い出したので,ちょっと書いてみます。上のイベントに参加している人とは全然レベルが違うネタですが。。。


例えばソートプログラムを書くときには二つの変数の内容を入れ替える(SWAPする)コードが必要になります。これってC言語を使うと,普通はこう書きますね。


int a = 12;
int b = 4;
int temp;

temp = a;
a = b;
b = temp;


まぁ,これでも良いんですが,tempって一時変数が邪魔ですよね。なんとか消すことは出来ないでしょうか?
実は出来ます。こんな風に書きます。


int a = 12;
int b = 4;

a = a^b;
b = a^b;
a = a^b;


知らない人は「???」って感じだと思いますけど,これを実行すると"a = 4, b = 12"になります。なぜかというと"^"で演算している排他的論理和の性質のおかげ。排他的論理和についてはWikipediaを参照。


これを発見したのは高校時代にアセンブラをいじってるときでした。見つけたときは「キタ━━━━(゚∀゚)━━━━ッ!!」って感じでしたが,あとで調べてみたらアセンブラ使いの間では常識的なテクニックだった模様(orz。


最近はJavaばっかり触っていてバイナリを意識することが無かったんですが,なんだか昔を思い出して懐かしかったので書いてみました(笑

ChangeLogメモをはじめました

ここ最近はVisual Editorの資料を探したり,拡張方法をいろいろ試したりしてます。そのときに作業中に分かったことをテキストファイルにメモってたんですが,どうにもこれが乱雑で,あとで読み返したときに分かりにくくて困ってました。

作業メモを眺めてたときに,「そういえば前にこんなメモの取り方を紹介しているサイトがあったなぁ」と思い出して調べてみました。こちらのサイトで紹介されている『ChangeLogメモ』ってやつです。

横着プログラミング 第1回: Unixのメモ技術

ChangeLogメモというものは,
  • もともとはソフトウェアの変更履歴を記録するための書式である。
  • 一つのテキストファイルに日付順に(新しいほど上に)記録していく。
  • 先頭にカテゴリ名をつける。あとで見るときにgrepすればカテゴリごとに一覧を見ることが出来る。
というようなものです。詳しくは上のサイトを見てください。


ChangeLog メモの良いところは,書式が決まっているというところですね。書式があらかじめ決まっていればメモるときにレイアウトなど余計なことに気を使わなくても良 いですから,気楽にかけます。それで最近は技術的なことだけじゃなくて,思いついたことは全部ChangeLogに書いてます。

どうやらChangeLogメモというものは,「ある程度メモが溜まってから良さがわかる」という特徴もあるようです。なのでしばらくはこれを続けていこうと思います。


deltamのChangeLogサイズ
はてなグラフでChangeLogファイルのサイズを記録してみます




【参考リンク】
ChangeLog - - ソフトウェアの変更履歴を書くためのテキストの形式
Let's Try ChangeLog Memo
YAYADoc: 秀丸用changelogマクロ
Zakimi::Blog: ChangeLog.hilightを更新

2005-12-02

『Visual Editor』拡張に関するドキュメント

Eclipseの特徴として「すべてがプラグインである」ということが挙げられます。Eclipseの本体は小規模なランタイムモジュールで,他の機能は すべてプラグインを拡張することで実現しています。さらにプラグインも同じように拡張可能で,プラグインのプラグインなんてのも作れます。

つまりEclipseは「すべてが拡張可能である」というルールで設計されているということです。このルールはEclipseプラグインであるVisual Editorに関しても例外は無く,拡張が可能です。
Visual Editorを拡張することで,例えばつぎのようなことが可能です。
  • 独自定義のGUIオブジェクトの使用
  • コード生成部のカスタマイズ
  • プロパティ設定部のカスタマイズ

Visual Editorの拡張方法を探しているときに見つけた資料を2つ挙げときます。両方とも英語なのがつらい・・・。

Extending The Visual Editor: Enabling support for a custom widget
  おそらく現時点で一番詳しいドキュメント。本家Eclipseプロジェクトの資料です。
Extend VE to build a ULC GUI builder(PDF)
  ULCというライブラリのためのVE拡張のケーススタディ。自分がやりたいことはこれに近い。


上 で"Extending The Visual Editor: ..."という資料が一番詳しいと書きましたが,この資料は長いくせにインデックスが付いてなくて読みにくいので,勝手に見出し一覧を作っちゃいました。 未読の人はタイトルだけ見ても大体内容が分かるのではないかと思います。



------

Extending The Visual Editor:
Enabling support for a custom widget
INDEX

Eclipse GUI作成プラグイン 『Visual Editor』

Eclipseはオープンソースの統合開発環境である。もともとはIBM 社が自社のアプリケーション・サーバ用の開発環境として開発していたものだが,2001年11月にオープンソースコミュニティにソースコードが寄与され, 現在はEclipseプロジェクトの手により開発が継続されている。Eclipseは拡張性の高さ,普及率の高さからJava開発環境の事実上標準となっ ている。

Eclipseの弱点としてGUI画面の作成機能が無い点が指摘されてきた。Visual Studioなど,他の統合開発環境ではマウスで部品を配置し,視覚的に画面を作成する機能が付属している。そのような機能の無いEclipseでは,画 面レイアウトをコードに直接記述する必要があった。このような画面開発手法は直感的に分かりにくく,GUI画面作成を困難なものとしていた。

The Eclipse Visual Editor Projectは そのような不満を解決する目的で始まったプロジェクトである。このプロジェクトは2003年11月にEclipseプロジェクトのサブプロジェクトとして 開始された。Visual EditorはEclipseプラグインとして動作し,マウス操作で直感的にGUI画面を作成することを可能にする。

Visual Editorの主な機能を次に挙げる。
  • 画面レイアウトをマウス等で視覚的に作成できる。
  • 画面レイアウトとソースコードをリアルタイムに同期する
  • 画面要素のプロパティをVisual Basic風に設定できる
  • AWT,Swing,SWTに対応する。

-----
いきなり論文口調で書いてみました。上の文章は仕事で書いたものをちょっと改変したものです。この「Visual Editor」というプラグインを拡張して開発ツールを作るってのを最近やってるんですが,一応調べたことをまとめるってことでブログに書いてみました。

あんまり「Visual Editor」の拡張方法に関する日本語の資料って無いみたいなので,これからちょこちょこ書いてみます。

2005-11-28

Gropyと「Web2.0=発酵食品説」

Gropyを更新しました。外見的には変わってないけど,Templateの代わりにMarkupBuilderを使ったりしてます。コードが短くなったので(コメント,改行なしで74行),勝手に”世界最小のTropyクローン”と名乗っておきます(笑。あと文字のエンコードはApache Commons Codecを使ったので,これをインストールしないと動きません。Groovyの標準ライブラリだけでやりたかったけど,java.net.URLDecoderやHttpClientのURIUtilでは無理みたい。あといつの間にか結城さんのページのリストに載っけてもらってました


「Web2.0=発酵食品説」っていう記事を読みました。そのなかでTropyの各言語のクローンがあっという間に作られていくことについて以下のように言われてます。

圏外からのひとこと(2005-11-24)
 たとえば、TropyやText::HatenaやRuby on Railsは一瞬でたくさんの言語に移植された。よいアイディアがPerlとRubyとPHPに移植されるかどうかを考えるのに、誰が何を何に移植するか具体的に考える必要はない。WEBを巡るよいアイディアは、特に制限しなければ、あらゆる言語やOSに移植される。

自分がなぜGropyを作ったかといえば,「出来るから」。何というか,Webに繋がっている人間の中でタイミングと技術力と興味の対象で分類したら,GroovyでTropyクローンを作れるのは自分だけだろうと思って,「ならば作るしかない!」と結論したわけです。他にも当然『流行ってるTropyのクローンを作れば目立てるかも。Groovyってマイナーだし競争相手少なそう(ぉぃ』という打算もあったけど,『Webという生態系のニッチは埋めるべきだ』という流れに従ったって感じが強いなぁ。

『Webの法則』というのがある。それは誰かが作ったわけではなく,技術的な制約から自然発生的にできたもの。少し前まではその法則は一部の人間しか認識してなかったけれど,ネット人口が多くなるにしたがって「分かってるユーザ」が増えてきた。その人数が一定数を超えたところで,ネットユーザが他のユーザに対して同じ法則を理解していると期待できるようになった。そういう下地ができたところで,最近のAjaxやタギングを利用したアプリが出てきて,利用者の反応からこの状況がメタ認知されるようになってきた。そういう状況を指してオライリーさんは『Web2.0』とネーミングしたのだと思います。

今の時代の技術者にとってWeb2.0っていうのは,小学生の分数の割り算と同じように,理解しなきゃいけないけどよく分からないものだと思います。そのまま猿真似して使うことは出来るけど,その背後の理屈が良く分からないって類のもの。なので自分の言葉でまとめられて,かなりすっきりしました。


【参考リンク】
[特集] Web 2.0ってなんだ? - CNET Japan
 CNETのWeb2.0に関する特集。提唱者のオライリー氏の論文が読める。

2005-11-25

小惑星探査機「はやぶさ」

「はやぶさ」ミッションの概要

小惑星の資料を採取するための探査機「はやぶさ」。最近ニュースをチェックしてなかったせいか,こんなことが起こっているなんて知りませんでした。

上のページによると「はやぶさ」ミッションとは,地球から3億kmも離れた小惑星Itokawa(イトカワ)へ無人探査機を送り,そのサンプルを採取して地球に持ち帰るプロジェクト。今まで小惑星を映像で撮影したことはあったけど,実際に小惑星に着陸してサンプルを採取するというミッションは史上初だそうです。

現在の状況は,20日にItokawaへの着陸・離脱に成功したようです(史上初!)。しかしシステムのトラブルで資料採取ができたか不明なので,再度Itokawaへの降下を行うそうです。再度のタッチダウンは26日午前7時ごろになる予定。


ここ3ヶ月ほど自分の中で突如宇宙ブームが再燃していて,宇宙もののドキュメンタリーなんかを読み漁っていたのですが,このニュースを見逃していたのは不覚! 26日までにいろいろ調べてみようと思います。


【参考リンク】
「はやぶさ」の第1回着陸飛行の結果と今後の計画について
 JAXAの公式発表
松浦晋也のL/D
 「はやぶさ」についての情報はここが早い。
はてなブックマーク - タグ はやぶさ
 ここを見ておけば関連ページは拾えるかな。