Home > Archives > 2006年11月

2006年11月

よくわからん

差分制約の LP が Bellman Ford で解けるのはいいのだがこれの応用ってどれくらいあるんだろう? というより,LP に定式化しないでダイレクトに Shortest Path に行く気がするのは気のせいだろうか.

どうにかならんものか

GWTのTreeItemにごちゃごちゃ機能をつけまくったらブラウザごとの動作が怪しくなってきた.イベントチェインがどうやって動いてるのか今一良く理解してないので何かおかしなことをやってる気がする.でも面倒なのでほっておく.どうでもいいが javascript の DOM Element から Java の DOM Element への変換が欲しい.

悩む

C++ のテンプレート引数の推論の動作が良く分からん.どっかに規定されとるのか実装依存なのか?

OpenOffice.org のプレゼンのファイル

OpenDocument な XML を ZIP で固めてあるだけだったとは….ということで,XMLを生成して ZIP で固めてプレゼンを生成できることが分かった.

Ogg Vorbis を C# で

http://www.codeproject.com/cs/media/OggPlayer.asp にて使えそうなものを発見.自前で DLL のラッパを書くのも面倒なのでこういうのがあるのはありがたい.でもこう,ファイル以外からも読みたいなぁと思わなくない.

RawInput + SendInputs + GlobalHook

これらを使えば複数のキーボードによる入力を複数のウィンドウに分配できる気がするのだが… RawInput をグローバルhookするのが C# 単体だと無理だよなぁ.Low Level Hook みたいに DLL なしでもフックできると便利なのだが…

素朴な疑問と解決

C# で mmap 使いたいなぁと思って色々調べてたら, Windows だと MapViewOfFile という API だったのね.

それはさておき Marshal.StructToPtr は便利そうだ.

イヴの林檎

eve0.JPGeve0.JPG

eve0.JPGeve0.JPG

eve0.JPGeve0.JPG

林檎丸ごと入ってるカルヴァトス.とても美味しくいただきました.ハイペースで.当然のことながら林檎はビンの口よりでかく,林檎が小さいうちにビンの中に入れて育てるらしい.手間がかかってるなぁ.次は洋梨丸ごといりを探したい.

GWTのバージョンが上がってた

TreeItem を in-place に編集しようとテキストボックスを setHTML で指定したらキーボードイベントやらがテキストボックスに送られずまともな編集は不可能.そんなでいろいろ試行錯誤してたら先週 GWT のバージョンが上がってたようで,今度のバージョン (1.2.22) では TreeItem に widget を入れ放題とのこと.

ということで,GWTのTextBoxをつっこんで in-place 編集も可能になった.あとは Ctrl+C, Ctrl+V とかの通常のショートカットを TreeView の編集用にキャッチできれば一通り終了なのだが… ブラウザによって取得できたり出来なかったり2回取れちゃったり… 先は長いかも.まあ,D&D でコピーとか移動とか出来るから必要ないといえば必要ないのだが.

TreeItem のドラッグ続き

どうやら昨日の実装はおかしいらしく子要素をドラッグしても親まで一緒にドラッグしてしまう.ちょいと調べたら子供にイベントが飛ぶ前に親側でイベントが取られていたらしい.ということで,MenuBar の実装を参考にイベントのターゲットが子孫である場合の子要素へのイベント転送を実装.そしたら今度はうまくドラッグできるようになった.当たり前といえば当たり前な原因だったが… WT がUIObject にイベント関係のルーチンを書いてくれてあればこんな面倒は無かったのに…

GWTのWidgetのソースを読む

TreeItem の Drag & Drop を実装しようとしたら TreeItem は Widget でないし,SourcesMouseEvents のインターフェースも実装してないし(基本はWidgetしか実装できない),SourcesMouseEvents も Widget しかリスナに返せない仕様になっている.つーことは,TreeItem にマウスリスナを登録して Drag & Drop をするという単純な話にはならない.結局,前に書いた Drag & Drop の仕組みが SourcesMouseEvents を実装できれば動作するので,無理やり TreeItem に SourcesMouseEvents を実装し,マウスリスナ側には DOM element を共有した Widget (意味無い) を渡すことした.この無理やりな実装を実現するために,GWT の Widget のソースを読む羽目に.ひじゃうにめんどーだ.とにかくドラッグは出来るようになったから良いけど…

本棚満タン

散乱していた本を詰め込んだら新しい本棚が満タンになってしまった.アレ? やはり旧本棚を残すべきだろうか… ひじゃうに邪魔なのだが.

本棚届く

2週間かかる予定だったが1週間で届いた.速い仕事でありがたい.

んで,早速組み立てる.でかい,重い,狭い(部屋が).

とりあえず各所のボンドが乾くまで放置しなければならないのだがひじゃうに邪魔だなぁ.

暴大入試合格

http://boukun.jp/boudai/index.html の暴君ハバネロ暴大入試の存在を教えられたのでやってみた.

最初の問題で 10000 回のクリックを要求されたので,とりあえずマウスの自動クリックをするためのプログラムをC#で書く.これで1問目と12問目を高得点クリア可能に.次いで,千択問題は根性で探し出し,小論文は直感的に満点.漢字の問題は IE7 使ってやって,世界史は根性で当てる.こんだけやると 400点越えるのでめでたく合格となる.

変な校歌もちゃんと聞けたので目的は達した.

System4.0プレゼン

Alicesoft の System4.0 + SACT2 を使ってプレゼンする.スライド切り替え時のエフェクトを使いたい放題.効果音もやりたい放題.書くスライドでしゃべることはメッセージとして表示.オートも音声付も可能? バックログもあるので前を振り返りやすい.途中画面のスナップショットも取れる.

こまる点:スクリーンサイズが起動時に固定.フルスクリーンにしても解像度が低いと泣ける?

とりあえず,スライドはPDFを画像化->固める,メッセージはテキストファイル->圧縮,音なし,というものは一日で出来た.Java/C++ と近い文法なのでとっつきやすかったし.VMにJITが入ってたり気合入ってるし.スプライトエンジン(など)である SACT2 も使いやすくてありがたい.外部DLLに PDFlib を呼ぶ部分を用意して pdf をダイレクトに読めるようにできるといいなぁ.

今日の One Liner - 名前変更,ピリオドをハイフンに.

Metapost で生成したファイルを完全な eps に変換しするのに huga.102.eps とかの名前にしてしまう.それを platex を使う場合はこれで問題ないのだが,pdflatex を使った場合には拡張子が分からんと文句をいわれる.ので,huga.102.eps とかを huga-102.eps に直す bash-only の One Liner:

for i in *.*.eps; do j=${i%.eps};k=${i%.*.eps}-${j#*.}.eps; echo mv $i $k; mv $i $k; done

ps2pdf で eps の BoundingBox に pdf のサイズを合わせる

普通にやると eps 内の papersize という記述に基づいて pdf の MediaBox を決めてしまうらしいので,BoundingBox に合わせて MedaiBox を指定させるには -dEPSCrop のオプションをつけるとのこと.

ps2pdf -dEPSCrop huga.eps

ほかに EPSFitPage というのもあるらしいが良く分からず.

Binary Hacks 購入

Amazon.co.jp だとまだ予約中だったりして結局いつ店頭に並び始めたのか良く分からないがとりあえず帰りに生協によったら置いてあったので購入.そのうち読むとしよう.

シナモン,カシア,ニッキ

とりあえずいろいろと見てみるとクスノキ科の植物を乾燥させたものであることは共通.それ以外は異なる.

シナモン
セイロンニッケイの枝が原料.スリランカ.
カシア
シナニッケイの幹が原料.ベトナム,中国など.
ニッキ
日本ニッケイの根が原料.日本.

が,カシアとシナモンはどっちもシナモンとして売られているらしく,確認の手段は原産国を見るしかない.

参考:

http://www.ganesh.gr.jp/cinnamomum.html

http://mayavinic.sfc.keio.ac.jp/jcolum_cinnamon.htm

http://www2.odn.ne.jp/shokuzai/A2003/Cinnamon.htm

TeX で繰り返し

\@whilenum, \@whiledim, \@whilesw ないし \@for とか使えば出来るけど… 使い勝手が悪いので手前で \for を定義して使ってみる.

\newcounter{forcnt}
\newcounter{stopcnt}
\makeatletter
\newcommand{\for}[3]{%
\setcounter{forcnt}{#1}%
\setcounter{stopcnt}{#2}%
\stepcounter{stopcnt}%
\@whilenum\value{forcnt}<\value{stopcnt}\do{%
{#3}%
\stepcounter{forcnt}}%
}
\makeatother

これで

\for{4}{7}{huga[\theforcnt]}

とかすると

huga[4]huga[5]huga[6]huga[7]

とかになる.

連番の画像を \includegraphics で読み込んでやるときに有効かも.Beamer とかで.

サイズ指定で本棚を注文する

机の上やらに本棚に収まりきらなかった本が塔をなしているので新しい本棚を買うことに.高さ160cm程度で奥行きが45cm位(奥行き方向に3列並べる)の物を楽天で探すも中途半端なサイズだし検索機能にサイズ指定が無いのでなかなか見つけられず.なんというか,商品ジャンルに応じた検索オプションくを付けて欲しい.

しょうがないので別のサイズで諦めようとしてたのだが適当に本棚とかでググってたら赤やという家具屋を発見.ここではオーダーメイド本棚・収納棚が注文できるとのことで,高さ6通り,奥行き3通り,横幅1cm単位でサイズ指定が可能.

つーことで,余り迷わず高さ150cm, 奥行き46cm, 幅70cm で注文してみた.15k円也.出来上がるまで2週間程度かかるとのこと.値段及び時間に関してはサイズ指定で買えるならこの程度で全く問題ないでしょう.なかなか貴重な店だ.

加湿器を買う

連続して加湿し続けるために加湿器を購入.金かけたくないのでペットボトルをくっつけてスチームを吐くタイプ\2500.なにやら国民生活センターからの指導により安全性を上げたそうででかい(1Lとか)ペットボトルは使用できず500ml止まりなのは残念だけど…

温湿計を買う

乾燥すると風邪引きやすいとのことなので,部屋の湿度を計るために温湿計を購入.計ってみたら湿度70%超.こんだけ湿度が高ければ問題なかろう.電気ポットは優秀だ?

MoinMoinWiki を入れてみる

http://moinmoin.wikiwikiweb.de/ からダウンロード. いまのところリリースバージョンのアーカイブは moin-1.5.6.tar.gz らしい.アーカイブを解凍後 setup.py を実行してファイル群をインストール.(python-dev が必要とのこと)

 python -v setup.py --quiet install --record=install.log

install.log を見るかぎり主に /usr/share/moin/ と /usr/lib/pythonXX/site-packages/MoinMoin/ にファイルをコピーするらしい.次にインストールされているかのテスト.python 起動して MoinMoin を読ませる.

> python
Python 2.3.5 (#2, Sep 11 2005, 02:13:21)
[GCC 3.3.5 (Debian 1:3.3.5-13)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import MoinMoin
>>>

問題なければ良し.あったら python のライブラリのサーチパスがおかしいとか.

そしたらインスタンスの生成をする.

export PREFIX=/usr/                        # prefix
export SHARE=$PREFIX/share/moin            # installed directory
export WIKILOCATION=$SHARE                 # diretcory to which a new instance is created
export INSTANCE=mywiki                     # name of new wiki instance
export USER=www-data                       # username of http-serevr
export GROUP=www-data                      # grop of http-serevr
cd $WIKILOCATION
mkdir $INSTANCE                            # make a directory for this instance
cp -R $SHARE/data $INSTANCE                # copy template data directory
cp -R $SHARE/underlay $INSTANCE            # copy underlay data directory
cp $SHARE/config/wikiconfig.py $INSTANCE   # copy wiki configuration sample file
chown -R $USER.$GROUP $INSTANCE            # change owner
chmod -R ug+rwX $INSTANCE                  # USER.GROUP may read and write
chmod -R o-rwx $INSTANCE                   # everybody else is rejected
cd $WIKILOCATION/$INSTANCE
mkdir cgi-bin
cp $SHARE/server/moin.fcg cgi-bin
chown -R $USER.$GROUP cgi-bin
chmod -R ug+rx cgi-bin
chmod -R o-rwx cgi-bin

んで,インスタンスの cgi-bin の中の main.fcg を修正.wikiconfig.py へのパスを追加.

sys.path.insert(0, '..')

さらに,wikiconfig.py を修正.data_dir, data_underlay_dir を moin.fcg からの正しいパスにする.ついでに画像ファイルとかのURLのprefixを正しく設定(httpd の alias どおりに).言語は日本語に.Wiki の名前とかロゴとかの設定も wikiconfig.py でするらしいが後回し.

    data_dir = '../data/'
    data_underlay_dir = '../underlay/'
    url_prefix = '/moinmoin'
    language_default = 'ja'

あとは,http サーバのほうで alias の設定などをしておく.lighttpd 使うので /etc/lighttpd/lighttpd.conf の alias.url にエントリを追加して,fastcgi.server に FastCGI の設定を書いておく(プロセスは自動起動で).

alias.url= (
    "/moinmoin/" => "/usr/share/moin/htdocs/",
)
fastcgi.server = (  "/mywiki" =>
  (( "docroot"   => "/",
     "min-procs" => 2,
     "max-procs" => 2,
     # allocate successive port numbers for each process, starting with "port"
     "bin-path"  => "/usr/share/moin/mywiki/cgi-bin/moin.fcg",
     "host"      => "127.0.0.1",
     "port"      => 2200,
     "check-local" => "disable",
     "broken-scriptfilename" => "enable",
  ))
)

これで /mywiki でページがみれるようになっているはず.画像とか css がおかしかったら alias が正しくないのかも.

Prim と Kruskal のアルゴリズム

Kruskal はソートと union/find があれば出来る.Prim はヒープ(バイナリヒープ)があれば出来る.これだけみると Prim のほうが単純そうなんだけどなぁ… ゼロから実装してみた感じでは Kruskal の方が断然単純だった気がする.実用上はどっちの方が速いのだろうか?

落ちる

熱暴走.人間が.

帰る

どうやら風邪を引いたらしい.そんなに寒くなかったのに昨日はくしゃみ連発しとったからなぁ.

union/find の

経路圧縮とランクによる合併操作をあわせる,n 要素で操作回数が m 回のときに O(m a(m,n)) とのことだが,何で Ackermann 関数の逆関数 a(m,n) (正確な逆関数では無いらしいが…)が登場するのだろう? O(m lg*(n)) の評価は原理が簡単だが a(m,n) の方は面倒らしい.機会があれば調べてみるか.どっちにしろ無視できるスピードの関数だからどうでもいいのだけど.

帰る

やっぱりJRは高かった.小田急安かった.そして御殿場線は電車が少なかった…

Jをちょっと

折角APLというものの存在を知ったので,その発展である J を少し使えるようになろうかと考えた.J の実行環境としては JSoftwareからインタプリタがダウンロード可能.JAPLA のシンポジウムの資料を見つつ簡単なところからやってみる.

とりあえず,配列の定義. i. という動詞(関数)で 0 から n-1 の要素を持つ長さ n の配列を作る.代入は =: ないし =. とのことで,値の出力は ] とのこと.

  ] D=: i.8
0 1 2 3 4 5 6 7

すでに分かりにくい.

ついで,reduction に手を出してみる.正確には insertion とか言うらしいが… BMF の reduce と同じで左にオペレータを取って配列をぶっ潰す.和を求めるのも簡単.

  sum =: +/
  ] sum D
28

これはまだ分かりやすい.

次に訳の分からん(気がする)動詞の fork 合成を試す.fork は3つの動詞からなり, f g h という fork に引数 x を適用すると (f x) g (h x) とかになるらしい.こんなのどこに使えばいいか良くわからんが,とりあえず平均がこれで書ける.# は要素数を返す演算子で % は割り算(剰余ではないらしい)の演算子.

  mean =: +/%#
  ] mean D
3.5

うーん,微妙に気持ち悪い気がしなくも無い.Lisp の括弧だらけの式を読むのと APL ないし J の式を読むのとどっちが面倒なんだか…

学んだこと

「Mac でウィンドウを閉じてもアプリケーションは終了しない.」

いや,動いてますよと何処か分かりやすい所に表示しててくださいよ.というか,巨大な MDI な気分なのは肌に合わない.

ところで,MAC MDI でググると MAC MIDI に訂正される.はぁ

Home > Archives > 2006年11月

Search
Feeds

Page Top