2008年1月31日木曜日

TracのBrowse Sourceをシンタックスハイライトするには

tracpygmentsをインストール

$ svn export http://trac-hacks.org/svn/tracpygmentsplugin/ \
branches/matt_good ./tracpygments
$ cd tracpygments
$ sudo python setup.py install

trac.iniに設定

[components]
tracpygments.* = enabled

Apacheを再起動

$ apache2ctl graceful

http://trac-hacks.org/

2008年1月30日水曜日

OSXのグローバルホットキーを使うには


OSXにはグローバルホットキーという機能があります。

グローバルホットキーに登録しておくと、
フォアグラウンドにでなくてもキー入力を受け取ることができます。

フレームワークの登録

Carbon.frameworkをリンクします。

コールバック関数を用意する

グローバルホットキーが押されたときに呼ばれるコールバック関数を定義します。
OSStatus MyHotKeyHandler( EventHandlerCallRef nextHandler,
EventRef theEvent,
void *userData )
{
// ホットキーが押されたときの処理
return noErr;
}

ホットキーを登録する

アプリケーションを初期化するときに以下を実行します。cmd+opt+spaceを登録してみます。
EventHotKeyRef gMyHotKeyRef;
EventHotKeyID gMyHotKeyID;
EventTypeSpec eventType;

eventType.eventClass = kEventClassKeyboard;
eventType.eventKind = kEventHotKeyPressed;
InstallApplicationEventHandler( &MyHotKeyHandler,
1,
&eventType,
NULL,
NULL );

gMyHotKeyID.signature = 'htk1';
gMyHotKeyID.id=1;
RegisterEventHotKey( 49, /* space key */
cmdKey + optionKey,
gMyHotKeyID,
GetApplicationEventTarget(),
0,
&gMyHotKeyRef );


2008年1月27日日曜日

Starbucks in Osaki Gate City is pretty good!


i love to read books at Starbucks.

today i went to the Starbucks in Osaki Gate City for the first time, to which i have really taken because of it's size and silence. additionally, it opens until 10:30 PM!

by the way, i heard that Starbucks of the United States has a tight game recently. McDonald begins to open cafe and take Starbucks' customers. McDonald?

in Japan, Starbucks is place to enjoy the atmosphere with time and space, not only some coffee. On the other hand, McDonald is place to eat hamburgers. it's impossible for McDonald to be the alternative to Starbucks in Japan!

大崎ゲートシティのスタバが、so good!


よくスタバで本を読むんですが、

今日行った大崎のゲートシティにあるスタバがいい感じ。

広くて静かで。

しかも、夜10:30まで開いてる。

次からここにしよ。


それはそうと、アメリカの本家スタバはここ1年大苦戦らしい。

米マクドがカフェを展開し始めて、

そっちにお客をとられているんやって。

えー、マクドが?


日本やと、スタバには単にコーヒーだけでなくて、

時間とか場所といった雰囲気を買いに行っている感じがする。

マクドはやっぱりハンバーガーを食べるところ。

スタバの代わりにマクドなんてありえん(笑)

2008年1月26日土曜日

Applescriptで現在の日付を取得するには


Applescriptで現在の日付を取得するには、以下のようにする
set d to current date
文字列として使いたい場合は以下のようにする
set d to ( current date ) as string

2008年1月20日日曜日

<iframe>タグ覚え書き

<iframe>タグを使う時に、余計な枠や余白をなくしたいことがよくあります。そんなときのための覚え書き。
<iframe src="http://kamonama.sakura.ne.jp/bar/bar.html" 
marginheight="0"
marginwidth="0"
width="155"
height="30"
frameborder="0">
</iframe>

marginheight・・・縦マージン
marginwidth・・・横マージン
width・・・横幅
height・・・縦幅
frameborder・・・枠のあり/なし

SICP (Structure and Interpretation of Computer Programs)を読み始めた


SICP (Structure and Interpretation of Computer Programs)を読み始めた。

書いてあることはプログラミングとしてはほとんど分かる。けど、情報科学という意味でちゃんとやったことがないので、最後まで読みたい。

章の前書きも含め、小節が全部で121個ある。1つ1つの小節はせいぜい5ページ程度。これならなんとかなりそう。

できるだけ、1日1小節は読み進めたい。そんなわけで、はてなグラフを貼付けました。

しし鍋を食べにいった

しし鍋を食べにいった。野獣鍋、¥6800なり。

しし鍋と、鹿刺しと、鹿肉の立田揚げ、しし肉の煮込み、熊汁を食べた。

猪と鹿と熊。

1回食べたらもういっか、という味。しょっぱい。

昔のごちそうやってんな。

2008年1月18日金曜日

CocoaからAppleScriptを送信するには

CocoaからAppleScriptを送信するには、NSAppleScriptを使う。
NSDictionary*  errorDict;
NSAppleScript* scriptObject;
NSString* source;

source = @" \
tell Application \"CotEditor\"\n \
make new document\n \
activate\n \
end tell";

scriptObject = [[[NSAppleScript alloc] initWithSource: source]
autorelease];
[scriptObject executeAndReturnError: &errorDict];

【Mochikit】itemgetter

itemgetter(name)
という関数がある。
obj[name]を返すような関数function(obj)を返す。
へぇ〜。

例:
a = b = {};
a.x = 1;
b.x = 3;
x_getter = itemgetter( "x" );
assert( x_getter( a ) == 1 );
assert( x_getter( b ) == 3 );

2008年1月13日日曜日

【Hadoop】1つのノードで疑似的に分散処理

Hadoopのドキュメント"Hadoop Quickstart"の日本語訳です。
【Hadoop】クイックスタートの続きです。

設定ファイルを用意する

すでに用意されているconf/hadoop-site.xmlを使います。
<configuration>
<property>
<name>fs.default.name</name>
<value>localhost:9000</value>
</property>
<property>
<name>mapred.job.tracker</name>
<value>localhost:9001</value>
</property>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>

パスフレーズなしでsshできるようにする

パスフレーズなしでローカルホストにsshできるか確認します。
$ ssh localhost
もしパスフレーズなしでsshできない場合は、以下を実行します。
$ ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

実行する

単一プロセスと同じことを疑似分散でやってみます。

新しい分散ファイルシステムを用意し、Hadoopデーモンを開始します。
$ bin/hadoop namenode -format
$ bin/start-all.sh
入力ファイルを分散ファイルシステムにコピーします。
$ bin/hadoop dfs -put conf input
分散モードの場合も、単一プロセスの場合と同じようにgrepを実行することができます。
$ bin/hadoop jar hadoop-*-examples.jar grep input output ¥
> 'dfs[a-z.]+'

結果を表示する

出力結果を分散ファイルシステムからローカルのファイルシステムにコピーして表示してみます。
$ bin/hadoop dfs -get output output
$ cat output/*
分散ファイルシステム上の出力結果を直接見ることもできます。
$ bin/hadoop dfs -cat output/*

終了する

終わったら、デーモンを止めます。
$ bin/stop-all.sh

おまけ

Hadoopデーモンのログは${HADOOP_LOG_DIR}に書き込まれます。
デフォルトでは${HADOOP_HOME}/logsです。

【Hadoop】クイックスタート

Hadoopのドキュメント"Hadoop Quickstart"の日本語訳です。

ダウンロードする

ここからHadoopをダウンロードし、展開します。

準備をする

conf/hadoop-env.shを編集しJAVA_HOMEを指定します。

動作確認のために、Hadoopスクリプトの使用方法を表示してみます。
$ bin/hadoop
Hadoopスクリプトの使用方法が表示されれば、正しく動作しています。

単一プロセスで実行してみる

まず、単一プロセスでHadoopを実行してみます。デフォルトでは、Hadoopは単一プロセスで実行するようになっています。

入力されたファイルの中から、与えられた正規表現にマッチする行をすべて表示してみます。入力にはconfディレクトリのコピーを使い、出力先にはoutputディレクトリを指定してみます。
$ mkdir input
$ cp conf/*.xml input
$ bin/hadoop jar hadoop-*-examples.jar grep input output \
> 'dfs[a-z.]+'
$ cat output/*

2008年1月10日木曜日

2008年1月8日火曜日

【Python】いとこモジュールのインポート

モジュールが以下のような構成になっているときに、module.a.a1からmodule.b.b1をインポートしたいことがある。
module
- a
- a1
- a2
- b
- b1
- b2

■2.4まで
2.4まではこのケースを相対パスで書くことはできない。
なので、おとなしくmoduleからのパスを書くしかない:
# module.a.a1.py
from module.b.b1 import hoge
 
■2.5から
2.5から、相対パスでモジュール内をたどってインポートできるようになった。このように書くことができる:
# module.a.a1.py
from ..b.b1 import hoge

モジュール階層が深くなってくるとうれしいはず。

2008年1月5日土曜日

iPod touchでrogue、可不可?

iPod touchでrogueが動かないかと思い、試してみた。

コンパイル


  1. ここからダウンロード
    Rogue 3.6.3 Source Code (r1043) 

  2. Makefileを以下のように変更してコンパイル

    ■変更前
    CC=gcc
    ■変更後
    CC=/usr/local/bin/arm-apple-darwin-gcc

試してみた


コンパイルしたファイルをiPod touchに送って、実行。

・・・

「横幅がたりないー!」って言われた・・・
横70以上、縦22以上が必要みたい。
残念。

rogue


http://rogue.rogueforge.net/

プラハ国立美術館展「ルーベンスとブリューゲルの時代」

200余年の歴史を誇るプラハ国立美術館は、ヨーロッパ有数の美術館として西洋絵画の名品を所蔵しています。

本展では同美術館の所蔵品のうち、16世紀から17世紀にかけて描かれたフランドル絵画黄金期の秀作70点を展覧するものです。農民の日常生活を数多く絵にしたブリューゲル一族や、ヨーロッパ各国の王侯貴族から絵の注文が殺到した人気画家ルーベンスなど、宗教画、風景画、風俗画、静物画と、あらゆるジャンルの作品が出品されます。それらの絵には、比喩や教訓的な意味合いが含まれたものも多く、絵を読むという視点からも楽しめる作品群といえるでしょう。

ヨーロッパの古典絵画の名品と、描かれた絵に込められた謎に触れる絶好の機会です。

プラハ国立美術館展「ルーベンスとブリューゲルの時代」
そごう美術館
2008年1月2日(水)〜1月23日(水)

cocopad所感

cocopad

さくさく動く感じが良い。
ラインや方眼、ガラスの切り替えが気持ちいい
タイプできればいいのに。全部手書きはキツい。
手書きするとベクターの円や四角になるというのはどう?
自由度を下げて使いやすくする。
名前をつけて保存は面倒。勝手に保存しといて欲しい
規定のサイズにぱっとできるのも良い
http://projects.digitalwaters.net/index.php?q=cocopad
iPhone版ができたら良い?

2008年1月4日金曜日

ぬば玉

ヒオウギの果実。

赤い美しい花が漆黒の玉となる。

「ぬば玉」もしくは「うば玉」と呼ばれ、

古来より黒の枕語として使われてきた。

Hello jiggy!

I've made a HelloWorld with "jiggy", the javascript-based IDE for iPhone/iPod touch. I'll show the steps.

Login to jiggy

  1. launch jiggy in your iPhone/iPod touch.
  2. access to jiggy with the browser of your Mac/PC. the IP to access is on the screen.
  3. login to jiggy with the User name and the Password on the screen.

Create new application -- HelloJiggy

  1. click "Create new application" on the left navigation.
  2. input "Title" and "Identifier." Below is an example. ("Description", "Version", "Author", "URL", "Icon" are your options)
    Title:      HelloJiggy
    Identifier: jp.kamonama(.hellojiggy)
  3. click "Save" below the form.
  4. it's ok that your iPhone/iPod touch has been locked.

Hello jiggy!

  1. unlock your iPhone/iPod touch and launch jiggy.
  2. access to jiggy.
  3. click "HelloJiggy" come up on the left navigation.
  4. click "main.js" in the "HelloJiggy" folder.
  5. write the code below in main.js.
    Plugins.load( "UIKit" );

    var rect = UIHardware.fullScreenApplicationContentRect
    rect[0] = rect[1] = 0;

    var window = new UIWindow( rect );
    window.setHidden( false );
    window.orderFront();
    window.makeKey();
    window.backgroundColor = [ 1.0 , 1.0 , 1.0, 1.0 ];

    var hello = new UITextLabel( rect );
    hello.text = "Hello jiggy!";
    hello.backgroundColor = [ 0.6 , 0 , 0 , 1.0 ];
    hello.setFont( new Font( "Trebuchet MS" , 2 , 46 ) );
    hello.color = [ 1 , 1 , 1 , 1 ];
    hello.centersHorizontally = true;

    window.setContentView( hello );
  6. click the floppy-disk icon to save main.js.
  7. click the right-pointing triangle icon to run HelloJiggy. (or tap the HelloJiggy icon on the spring board of your iPhone/iPod touch.)
  8. Congratulation! HelloJiggy is running, now!

jiggyでHelloWorld

iPhone/iPod touchのjavascriptベースの開発環境「jiggy」で、HelloWorldを作ってみます。ただ、HelloWorldはあんまりなので、HelloJiggyに。

jiggyにログインする

  1. iPhone/iPod touchでjiggyを起動する
  2. 手元のMac/PCのブラウザからjiggyにアクセスする
    (jiggyに表示されているIPを使う)
  3. jiggyに表示されているUser name/Passwordでログインする

新しいアプリケーションを作る

  1. 左ナビの「Create new application」をクリックする
  2. TitleとIdentifierを入力する(Description, Version, Author, URL, Iconは任意)
    Title:      HelloJiggy
    Identifier: jp.kamonama(.hellojiggy)
  3. 画面下部の「Save」をクリックする
  4. iPhone/iPod touchがロック状態になればOK

Hello jiggy!

  1. ロックを解除し、jiggyを起動する
  2. jiggyにアクセスする
  3. 左ナビに「HelloJiggy」が追加されているので、それをクリックする
  4. HelloJiggyフォルダ中のmain.jsをクリックする
  5. 以下のコードをmain.jsに記述する
    Plugins.load( "UIKit" );

    var rect = UIHardware.fullScreenApplicationContentRect
    rect[0] = rect[1] = 0;

    var window = new UIWindow( rect );
    window.setHidden( false );
    window.orderFront();
    window.makeKey();
    window.backgroundColor = [ 1.0 , 1.0 , 1.0, 1.0 ];

    var hello = new UITextLabel( rect );
    hello.text = "Hello jiggy!";
    hello.backgroundColor = [ 0.6 , 0 , 0 , 1.0 ];
    hello.setFont( new Font( "Trebuchet MS" , 2 , 46 ) );
    hello.color = [ 1 , 1 , 1 , 1 ];
    hello.centersHorizontally = true;

    window.setContentView( hello );
  6. フロッピーディスクのアイコンをクリックし、main.jsを保存する
  7. 右向き三角のアイコンをクリックし、HelloJiggyが起動すればOK
    (スプリングボードのHelloJiggyアイコンをタップしても起動できます)

2008年1月3日木曜日

Bloggerで投稿のスタイルを変更するには

Bloggerでは投稿のスタイルを自由に変更することができます。

手順

  1. 管理画面を表示する

  2. 「テンプレート」タブをクリックする

  3. 「HTMLの編集」リンクをクリックする

  4. テキストボックスにテンプレートが入っている。
    <b:skin>〜</b:skin>の中にスタイルが定義されているので、必要に応じて編集する。


具体例


<pre>〜</pre>タグのボーダーを破線にし、背景を薄い黄色にしてみる。

■変更前
1 -module(echo).
2 -export([echo/0]).
3
4 echo() ->
5 receive
6 Msg -> io:format("~necho: ~p", [Msg]),
7 echo()
8 end.

■変更後
1 -module(echo).
2 -export([echo/0]).
3
4 echo() ->
5 receive
6 Msg -> io:format("~necho: ~p", [Msg]),
7 echo()
8 end.

Erlangで関数の実行にかかった時間を計るには

Erlangで関数の実行にかかった時間を計るには、timer:tcを使います。
timer:tc( パッケージ名, 関数名, 引数リスト ).
出力は、{ かかった時間[microsec]、関数の出力 }

実行例

1> fib(40).
165580141
2> timer:tc(fib, fib, [40]).
{8464307,165580141}


ノンデザイナーズ・デザインブック




ノンデザイナーズ・デザインブック

お薦め本。
センスのいいレイアウトのための"コツ"が紹介されています。

1.まず、悪い(やってしまいがちな)例を載せて、
2.次にそれを良くした例を載せる。

という形で書いてあるので、自分ですぐに試すことができます。

「で、具体的には、どうやればいいの?」がわかる、良書です。

太助で牛タン

明日(2008.1.4)は虎ノ門の太助で牛タンを食べよう。

Pieter Brueghel the Elder

Pieter Brueghel the Elder

16世紀のフランドルの画家

Pieter Paul Rubens

Pieter Paul Rubens

17世紀、バロック期のフランドルの画家及び外交官

2008年1月2日水曜日

The Erlang mode for Emacs

EmacsのErlangモードを使うには、.emacsに以下のコードを追記します。
(setq load-path (cons "/usr/local/otp/lib/tools-<ToolsVer>/emacs"
load-path))
(setq erlang-root-dir "/usr/local/otp")
(setq exec-path (cons "/usr/local/otp/bin" exec-path))
(require 'erlang-start)


  • /user/local/otpは、Erlangのインストールパスで置き換えてください。
  • 1行目の<ToolsVer>には、インストールされているErlangのバージョンが入ります。実際のディレクトリ構成に合わせてください。

詳しくは:
http://www.erlang.org/doc/apps/tools/erlang_mode_chapter.html

Erlangでメッセージパッシング

Erlangは言語レベルでメッセージパッシングの仕組みを持っている。
そこで、Erlangでメッセージパッシングのコードを書いてみた。

サンプルコード(echo.erl)

1 -module(echo).
2 -export([echo/0]).
3
4 echo() ->
5 receive
6 Msg -> io:format("~necho: ~p", [Msg]),
7 echo()
8 end.

1行目
 モジュールの宣言

2行目
 echo関数のエクスポート

4〜8行目が本体の関数です。メッセージを受け取り、標準出力に出力します。再帰することでなんどもメッセージを受け取るようにしています。具体的には以下。

4行目
 関数の開始。関数名は"echo"。

5行目
 receive式でメッセージを受け取る。

6行目
 Msgにメッセージが入る。io:formatで、受け取ったMsgを標準出力に出力する。

7行目
 echo関数を再帰的に呼ぶ。こうすることで、なんどもメッセージを受け取ることができる。

8行目
 receive式を閉じる。

実行例

$ erl
1> c(echo.erl).
{ok,echo}
2> Pid = spawn( echo, echo, [] ).
<0.40.0>
3> Pid ! "Hello!".
"Hello!"
echo: "Hello!"
1行目
 echo.erlをコンパイル。

2行目
 echo関数をプロセスとして呼び出し。
 プロセスIDが返ってくるのでPidに入れる。
 <0.40.0>は返ってきたプロセスID。

3行目
 !演算子を使って、プロセスPidに"Hello!"メッセージを送る。
 echo関数がメッセージを受け取り、「echo: "Hello!"」を出力する。
 なお、その前の「"Hello!"」は!演算の評価結果。