2009-10-08 Thu

台風、まだ通過してなかった

朝の時点では、まだ台風は通過していませんでした。

外は、凄い風と叩き付けるような雨、かと思ったら、しばらく暴風がだけだったりで不安定すぎるお天気です。

20091008_amesh 20091008_tenkijp

何時に家を出ようかな。。。

投稿者:としのり  日時:23:59:59 | コメント | トラックバック |

2009-10-07 Wed

FireFox から Google Chrome に乗り換えると 1 年間で 6 時間以上節約できるかも

FireFox を使っていると FireFox のプロセスがメモリを食いまくったり、CPU 使用率が常に 100 %近くになったりしますよね。

2009-10-08_0044

こまめにタブを閉じていれば問題は起こらない可能性がありますが、ブラウザのタブが気がついたら 50 個くらいになってしまう僕は、毎日1回か2回くらい再起動することになるのです。

FireFox は僕の MacBook で一回の再起動に短くて 1 分程度かかっているのですが、これを 1 年間毎日続けていたら、

1分 * 365日 = 365分 ≒ 6時間

程度かかってしまいます。

6時間という時間は非常に長いですし、実際にFireFoxを再起動すると 1分で再起動が終わらないこともしばしばあります。
僕は死ぬまでに何日間 FireFox を再起動しなければいけないのでしょうか。
僕はそんなことはどうでもいいんです。6時間とか後付けです。

何が言いたいかというと 「Google Chrome がすばらしい」ということです。速い。CPU 使用率がかなり低い。

まだ何ヶ月も使っているわけではないですし、FireFox で気に入って使っていたアドオンが無かったりで、いろいろ違いに戸惑いますが少なくとも CPU 使用率が100%近くになって MacBook のファンが永遠にグルグル回りつづけることが減った気がします。

仮に年間の再起動率が半分になるだけで3時間近く得するのかとボンヤリ考えたら、「もうFireFoxからChromeに乗り換えよう」と迷わず決意することができました。

20091007_chrome

Google Chrome は最近ではMacでもちゃんと日常使いができるようになりました。
個人的には、Flash Player と Autopagerize が入れば後は何とかなるので乗り換えを躊躇する必要はなかったです。

20091007_sunred 20091007_autopagerize

フォントの選択や、タブの挙動がコントロールしやすいと、もっと使いやすくなるな、と思いました。あと、時々描画がバグるのがカワイイです。そのうち修正されると思いますけど。

「あー、なんで FireFox にあるのに Chrome にないの?」とカッとしたときには、Chrome 用の拡張を書くか、ブックマークレットを書いてなんとかする必要がありますね。

何かやったときには記事を書くようにします。

関連リンク


- Google Chrome
-- http://www.google.com/chrome/

- Autopagerize
-- http://autopagerize.net/

- AutoPager extension for Google Chrome ver 0.1
-- http://os0x.g.hatena.ne.jp/os0x/20090507/1241698956
--- 拡張を書く際の参考になる

- Chrome Extension Packaging Script
-- http://d.hatena.ne.jp/Constellation/20090708/1247007187

- 被はてなブックマーク数を表示するGoogle Chrome拡張書いた。
-- http://mattn.kaoriya.net/software/chrome/20090902225759.htm
--- 欲しいなと思ったらあった。mattn++

投稿者:としのり  日時:23:59:59 | コメント | トラックバック |

2009-10-07 Wed

台風が上陸寸前。僕の体調は最悪。

台風が近づくと気圧のためなのか、何となく調子が悪くなります。

血行が悪くなるんですかね。。富士山の上に登ったときの軽いやつに一日中かかっている感じになるのです。正直パソコンなんかに向かってられません。

そのため、今日は夕方くらいで帰って来て2時間半くらい寝ていました。
その後食事をして、お風呂にゆったりつかって、やっと動けるようになりました。

今の台風はどんな感じなのか見てみましたが、22時の段階では、まだ上陸するかしないかなのですね。

20091007_tenkijp 20091007_amesh

この感じだと、今日寝ている間に関東より上に行ってくれるのかな。。。

関連リンク


- 東京アメッシュ
-- http://tokyo-ame.jwa.or.jp/
- tenki.jp
-- http://tenki.jp/

投稿者:としのり  日時:23:59:59 | コメント | トラックバック |

2009-10-04 Sun

新橋湯

少し散歩してから新橋湯へ。恵比寿の新橋商店街にあるのです。
ここは古い割に嫌な感じがしないので好き。


from overlast using Panasonic DMC-FX100

新橋湯はすごくお湯が熱いので、長い間湯につかっていられません。
60秒入って、60秒以上休んでを2回ほど繰り返したら、ポカポカ。

中では飲み物を売っていないので、コンビニでカルピスソーダ。


from overlast using Panasonic DMC-FX100

ノーカロリーと書いてあるのに弱くなってるなと気がつきました。

新橋湯の場所


東京都渋谷区恵比寿1丁目23−6


大きな地図で見る

投稿者:としのり  日時:23:59:59 | コメント | トラックバック |

2009-10-04 Sun

August Beer Club

August Beer Club に来ました。アウグスビールというビールを楽しめるお店です。

サルシッチャデリというお店を経営されていた鈴木さんが、サルシッチャを卸しているとメールを頂いたので行ってみました。


from overlast using Panasonic DMC-FX100

運悪く、たまたま昨日、腸詰めされたサルシッチャが売り切れてしまったのだとか。お店が繁盛している証拠ですね。

でも腸詰めしていないものは残っているよ、ということで、サルシッチャピザを頼みました。あと、ミートボールも。


from overlast using Panasonic DMC-FX100

美味しい!ビールがすすむ!

August Beer Club は気に入ったので、また来たいと思いました。

関連リンク


- アウグスビール
-- http://www.augustbeer.com/
- アウグスビアクラブ August Beer Club|アウグスビール専門店(六本木)
-- http://www.augustbeerclub.jp/

- アウグスビール非公式ブログ 子分奮闘記!
-- http://ameblo.jp/augustbeer/
#スタッフの方のブログもあるみたい。

投稿者:としのり  日時:23:59:59 | コメント | トラックバック |

2009-10-03 Sat

勉強するため散歩

家に籠ってMG勉強会の復習資料を作っていましたが、全然作業に集中できず時間がもったいないので作業に勢いがつくまで外に出ることにしました。

今日は午前中雨だったので、アスファルトに水が染みてます。


from overlast using Panasonic DMC-FX100

近所のagoo'sが埋まっていたので、渋谷のqootzまで歩きました。


from overlast using Panasonic DMC-FX100

無事に30分程で3.3節から3.4節の復習が終わりました。このくらい手がつけば家に帰っても作業がはかどります。よかったよかった。

帰り際に空を見上げたら、雲の隙間から満月が見えました。


from overlast using Panasonic DMC-FX100

そういえば今日は2009年の中秋の満月。
お団子作って食べればよかったなと後悔。

次回の中秋の名月は2010年09月22日だそうです。

投稿者:としのり  日時:23:59:59 | コメント | トラックバック |

2009-10-02 Fri

a.n.design-works Caringbah cb2024という自転車を見かけた

外で、ものすごくタイヤの太い自転車を見かけました。
ハンドルの曲がり具合や、フレームの感じも普段見かける自転車と大分違います。


from overlast using Panasonic DMC-FX100

すこしネットで調べると、「a.n.design-works Caringbah cb2024」という名前で、お値段は40000円程度みたい。
重量が25kgで、全体的にスチール素材で出来ているのが安さの秘訣なのかな。

関連リンク


- and-style.com : cb2024
-- http://www.and-style.com/caringbah/cb2024.html

投稿者:としのり  日時:23:59:59 | コメント | トラックバック |

2009-10-01 Thu

Design HUB で GOOD DESIGN EXHIBITION 2009 を見てきた

GOOD DESIGN EXHIBITION 2009 を見てきました。
館内には期待通り展示物が所狭しと並んでいました。


from overlast using Panasonic DMC-FX100

入り口付近にはホンダの二足歩行補助ロボと、トヨタのi-REALのデモが展示されています。


from overlast using Panasonic DMC-FX100

とくにi-REALは、見ていてワクワクします。



森田アルミ工業株式会社の、室内物干ワイヤー : pid は、欲しいなー、と思いました。お値段は7500円程度みたいです。


from overlast using Panasonic DMC-FX100

pidがどんな感じなのか動画を撮ったので見てみて下さい。



部屋の端からpidのワイヤーを伸ばして洗濯物を干して、乾いたらワンタッチでワイヤーを巻き取れます。便利っぽい。

他にも、お台場ガンダムの基になった模型や、印象的なデンソーのドライバーズフォントなど、目を引く展示物が多かったです。


from overlast using Panasonic DMC-FX100

GOOD DESIGN EXHIBITION 2009は、11月の頭までやってるので暇を見つけて見に行ってみると良いかも。

イベントの詳細


企画名GOOD DESIGN EXHIBITION 2009
会 期2009年10月1日(木)~11月8日(日)11:00~19:00 会期中無休
会 場東京ミッドタウン・デザインハブ
入場料無料

投稿者:としのり  日時:23:59:59 | コメント | トラックバック |

2009-10-01 Thu

スタンフォード大学の講義資料

以下の日記で、スタンフォード大学のコンピュータサイエンス分野の講義について言及されていました。

- アメリカの大学と日本の大学の違いは一言で言うと「集約度」 - shibataismの日記
-- http://d.hatena.ne.jp/shibataism/20091001/1254375213

取り上げられていた授業は以下で、僕はたまたま、これらがどういうものなのか知っていました。

- CS229 Machine Learning:
-- http://www.stanford.edu/class/cs229/

- CS276 Information Retrieval and Web Search:
-- http://www.stanford.edu/class/cs276/

でも、実際にこれらをどのように学生が消化しているのかは知りませんでした。

そこについては、要するに

- 授業は90分×2-3コマ/週
- フルタイムの学生でも授業は1学期に3-4個
- 予習復習しないと落ちこぼれる
- 宿題の量と質がものすごい
- 1回分の宿題は、東大の最も難しいクラスの講義の期末のレポート並みの重たさ


のようなもの消化の仕方なのだそう。
10週間で、この他にもう1、2個の講義を受講するのですか。タフですね。。。

勉強のときの予習復習は大切だな、、、と思う出来事が多いので、これを機に予習癖をつけていこうと思います。

関連リンク


- Stanford School of Engineering - Stanford Engineering Everywhere
-- http://see.stanford.edu/see/courses.aspx

投稿者:としのり  日時:23:59:59 | コメント | トラックバック |

2009-09-30 Wed

口内炎がひどいのでケナログを買った

数日前に下前歯付近にできた口内炎がだんだんひどくなり、傷口の痛みで日常生活に支障がでたのでケナログを購入。


from overlast using Panasonic DMC-FX100

ケナログの価格が予想以上に高くてビックリ。

早速寝る前に塗って一晩開けてみると、口内炎の痛みが半減していました。ケナログ凄い!

あまりにも治るのが速いので、ちょっと怖いですね。
また酷い口内炎ができたときに使うことにします。

関連リンク


- 口腔用ケナログ:薬と健康の情報!おくすりナビ
-- http://www.okusurinavi.com/DB/show/2007101600001.html

投稿者:としのり  日時:23:59:59 | コメント | トラックバック |

2009-09-30 Wed

Emacs の構文テーブル

昨日は m4 で使える正規表現が気になって、Emacs の正規表現を調べました。
資料の中で構文テーブルに言及があったのですが、めんどうなので後回しにました。ので回収。

資料


- GNU Emacs Lispリファレンスマニュアル: 34. 構文テーブル
-- http://www.fan.gr.jp/~ring/doc/elisp_20/elisp_35.html
- Programming in Emacs Lisp: Words in a defun
-- http://www.math.s.chiba-u.ac.jp/~matsu/lisp/emacs-lisp-intro-jp_15.html

メモ


構文カテゴリ (syntax categories)

- 各々の文字が属している

単語

- 「単語構成文字」(word constituent) という構文カテゴリ中の要素でできている文字列

シンボル

- A symbol is a sequence of one or more symbol-constituent characters. A symbol-constituent character is a character whose syntax is either ‘w’ or ‘_’
-- 単語を更正する要素に「_」を足したもの、ということか

構文テーブル(syntax table)

- 単語やシンボルなどの構文要素の開始と終了を調べるために使われる
-- 構文解析関数や複雑な移動を行うコマンドなどで使う




ちょっと朝に調べきれなかったので、夜に引き続き調べて追記する。

投稿者:としのり  日時:23:59:59 | コメント | トラックバック |

2009-09-30 Wed

m4 の正規表現

昨日はEmacsの正規表現を調べたので、今度は m4 のドキュメントに差分が無いか調べてみました。

m4 のドキュメントを見たら、要するに

「Emacsの正規表現と一緒だから、Emacsのドキュメントの、19.5 Syntax of Regular Expressionsを見てね」

と書いてありました。

- 19.5 Syntax of Regular Expressions
-- http://www.gnu.org/software/emacs/manual/html_mono/emacs.html#Regexps

よって必要に迫られるまで、調べ直さなくて良いかな。。

投稿者:としのり  日時:23:59:59 | コメント | トラックバック |

2009-09-30 Wed

m4 の日本語ドキュメント

m4 の英語の最新版は以下にありました。

- GNU M4 1.4.13 macro processor
-- http://www.gnu.org/software/m4/manual/m4.html

一方で、上記のドキュメントに対応する日本語のドキュメントは、なかなか見つかりません。

結局、前回m4の挙動を調べるときに読んだ以下のドキュメントが良さそうです。

- GNU macro processor:
-- http://www.bookshelf.jp/texi/m4/m4-ja.html

友人のH山さんもコレかなと教えてくれたので、みんな最初に上記のドキュメントに辿りつくのかな。

あとは、、友人が本棚に以下の本を入れていたので、見せてもらおうかな。
そろそろ何が書いてあるのか理解できそうな気がするし。

GNU Autoconf/Automake/Libtool

[Amazonで詳細を見る]

投稿者:としのり  日時:23:59:59 | コメント | トラックバック |

2009-09-29 Tue

Emacs の正規表現

先日、m4 で使える正規表現がEmacsとほぼ同じであることを知った。

ということで Emacs の正規表現を調べ直してみる。

参考資料


英語のマニュアルと、入門 GNU Emacs 第2版を眺めました。最新版は3版です。

入門 GNU Emacs 第3版

[Amazonで詳細を見る]


- GNU Emacs Manual - Regexps
-- http://flex.ee.uec.ac.jp/texi/emacs-jp/emacs-jp_53.html
- GNU Emacs Manual
-- http://www.gnu.org/software/emacs/manual/html_mono/emacs.html#Regexps
- GNU Emacs Lisp Reference Manual
-- http://www.gnu.org/software/emacs/manual/html_mono/elisp.html#Syntax-Tables

メモ


第2版のP380あたりに「13.3 便利な組み込みEmacs関数 : 正規表現演算子のまとめ」という節がある。
その節の前後では Emacs の正規表現について言及されている。
それと、最新の英語マニュアルをオンラインで参照。

構文については構文テーブルと文字テーブルを調べるとよさげ。

演算子機能
.任意の文字にマッチ
*直前の文字・グループに0回以上繰り返しマッチ
+直前の文字・グループに1回以上繰り返しマッチ
?直前の文字・グループに0回 or 1回マッチ
\{N\}直前の文字・グループの、N回繰り返し
\{n, m\}直前の文字・グループの、nからm回の繰り返し。mが空の場合にはn回以上の繰り返し
[..]文字セット
\(グループの開始
\)グループの終了
\|前後の部分正規表現のどちらかにマッチ。部分正規表現はグループにしておくと前後の範囲が明確になる。
^正規表現の先頭にある場合、行頭または文字列の先頭
$正規表現の末尾にある場合、行頭または文字列の先頭
\n改行にマッチ
\ttabにマッチ
\<単語の先頭にマッチ
\>単語の末尾にマッチ
\b単語の最初か最後にある空文字とマッチ
\B単語の最初や最後以外の空文字とマッチ
\ <単語の先頭の空白にマッチ
\ >単語の末尾の空白にマッチ
\wエディタの構文テーブルによって決められる単語構成する文字にマッチする
\W単語を構成する文字に含まれない文字にマッチする
\s直後に記述した「構文」に含まれる文字にマッチする
\S直後に記述した「構文」に含まれない文字にマッチする
\`バッファの先頭にある空文字とマッチ
\'バッファの末尾にある空文字とマッチ
\=その場の空文字とマッチ

■セット内で特殊な意味を持つ
演算子機能
^セットの先頭にある場合には、そのセットを「マッチしない文字セット」とする
-文字の範囲を指定

■正規表現文字列中で特殊な意味を持つ
\NN番目の正規表現グループでくくられた部分文字列を代入する。右から順に1、2と数える。9番目まで。




アバウトにEmacsの正規表現を理解した。
シンボル(単語)の概念が特徴的。

構文テーブル(syntax table)については後日調べた方が良さそう。

m4 と Emacs の正規表現がのマニュアルの正規表現に該当する部分を読んだ方が良い気がして来たので次はm4のマニュアルを読む。

投稿者:としのり  日時:23:59:59 | コメント | トラックバック |

2009-09-28 Mon

赤坂の氷川神社

昼食後赤坂の氷川神社を散歩。
お参りして、おみくじを引いてきました。


from overlast using Panasonic DMC-FX100

おお、大吉がでました!

要約すると「交通事故に気をつけながら、短気にならず謙虚に今やってることに励みなさい」と書いてありました。味わい深いですね。

関連リンク


- 氷川神社(赤坂 氷川神社)
-- http://www.akasakahikawa.or.jp/

投稿者:としのり  日時:23:59:59 | コメント | トラックバック |

2009-09-27 Sun

autoconf 学び直し その3

autoconfの学び直し、その3回目。

以前いじくった時は特に難しいことを必要としなかったので、キチンとメモを残しておかなかったので、ちゃんと残す。

環境によって挙動を変えるように設定したい。

前回は m4 マクロに手を付けた。
今回も引き続き m4 マクロを勉強する。

前回の参考文献


- Super Technique 講座〜m4 チュートリアル
-- http://www.nurs.or.jp/~sug/soft/super/m4.htm

復習


- m4とは?
-- 汎用的なマイクロプロセッサなのだそうだ
- m4の組み込み関数は「ディレクティブ」と呼ばれる。
- define() : マクロ定義に関するディレクティブ
- m4のトークンの表記はC言語の変数の表記とルールが同じ
-- 大文字と小文字は当然区別される
- 変換後の文字列をトークン扱いでき、defineでさらにマクロ置換ができる場合は、どこまでも置換をする
define(`XXX', `YYY YY')
define(`YYY', `ZZZ')
one two three : XXX.



one two three : ZZZ YY.


- indir() : 強制的に置換

- マクロは改行を含んでいてもOK。m4は執念深く「'」を探す
- クォート「`'」は文字列をトークンで無くす
- m4はマクロへの変換が終了したら、1重だけ「`文字列'」を「文字列」に変換する
- マクロに変換した文字列がトークンになって欲しくない場合は、マクロ定義で文字列を2重クォートすれば良い。
- テキスト側にクォートを仕込む事ができる。
- m4はCと同じく引数付きマクロが定義できる
-- 引数に$0, $1, ...のような名前がつく
--- $0 : マクロの名前
--- $# : 引数の個数
--- $* or $@ : すべての引数を「,」で結合したもの
- m4の引数付きマクロは、引数の過不足に警告を出さない
-- 多すぎる場合は無視をする。少ない場合には空文字列になる。

define(`echo1',`$*')
define(`echo2',`$@')
define(This,That)
echo1(`This',`is',`a',`pen')
echo1(``This'',`is',`a',`pen')
echo2(`This',`is',`a',`pen')
echo2(``This'',`is',`a',`pen')



That,is,a,pen
This,is,a,pen
This,is,a,pen
`This',is,a,pen

になる。

今回の参考文献


- Super Technique 講座〜m4 チュートリアル
-- http://www.nurs.or.jp/~sug/soft/super/m4.htm
- GNU macro processor:
-- http://www.bookshelf.jp/texi/m4/m4-ja.html#SEC_Top

今回


undefine, pushdef, popdef

- defineと対応するundefineがある
- defineしたマクロ定義を、一時的なマクロ定義で変更し、その後さらに変更を取り消すことができる
-- pushdef, poudefを使う

define(`XXX',`YYY')
XXX is YYY.
pushdef(`XXX',``XXX'')
But XXX is XXX.
popdef(`XXX')
So XXX is YYY.
undefine(`XXX')
But XXX is XXX.





YYY is YYY.

But XXX is XXX.

So YYY is YYY.

But XXX is XXX.

に変換される。

include, sinclude

- 別ファイルに記述した内容を展開できる
-- includeは指定したファイルが存在しないときにはエラーになる
-- sincludeは指定したファイルが存在しないときもエラーにならない
- includeとsincludeはマクロ定義に組み込める
-- sincludeしたファイルが無ければ空白文字になる

例、
- 最初に「echo "hello hello hello" > hello.m4」などとしておく

include(`hello.m4')
define(`hello',sinclude(`hello.m4'))
define(`hey',sinclude(`hey.m4'))
hello
good bye
hey
hello


hello hello hello

hello hello hello
good bye

hello hello hello

になる。

条件分岐 : ifdef, ifelse

- ifdefディレクティブ
ifdef(NAME,IF-CASE,ELSE-CASE)


-- 動きを見ると理解が速い

-- 例、事前にcond.m4を用意する
--- cond_ifdef.m4
ifdef(`COND',``COND' is defined...
`COND' is COND.',`COND is *NOT* defined!')


--- その後、コマンドラインで実行
--- 「COND is」がCONDの値に左右されないよう、2重クォートされている。
% m4 cond_ifdef.m4
COND is *NOT* defined!
% m4 -DCOND cond_ifdef.m4
COND is defined...
COND is .
% m4 -DCOND=conditionA cond_ifdef.m4
COND is defined...
COND is conditionA.


- ifelseディレクティブ
ifelse(比較対象A,比較対象B,一致時に展開[,不一致時に展開])

- ifdefが調べる変数名を記述したのに対し、ifelseは比較対象を書く
-- そのため、ifelseでは値を評価するために、比較対象の変数名をクォートでくくらない

-- 例、事前にcond.m4を用意する
--- cond_ifelse.m4
ifelse(COND,1,``COND' is one',``COND' is COND')


-- その後、コマンドラインで実行
--- 「COND is」がCONDの値に左右されないよう、2重クォートされている。

-- $ m4 -DCOND=1 test.m4 の場合

COND is one


-- $ m4 -DCOND=2 test.m4 の場合

COND is 2


- 不一致時に展開されるトークンを記述できるが、トークンの変わりに、ifelseディレクティブを入れ子にできる

--- cond_ifelse.m4
ifelse(COND,1,``COND' is one',COND,2,``COND' is two',``COND' is COND')


-- $ m4 -DCOND=1 test.m4 の場合

COND is one


-- $ m4 -DCOND=2 test.m4 の場合

COND is two


-- $ m4 -DCOND=3 test.m4 の場合

COND is 3


shift : 不定引数をリストとして扱う

- shift は引数のうち第一引数を無視して、第2引数以降だけを返す。

shift()
shift(foo)
shift(foo,bar,baz)





bar,baz

になる。

ループ

- m4はマクロで再帰が書ける
- defineとifelseとshiftを使うのが定石

define(`last',`ifelse($#,1,$1,`last(shift($@))')')
last(foo,bar,baz,piyo)



piyo

になる。

もしも
define(`last',`last(shift($@))')
last(foo,bar,baz,piyo)

にすると、shiftが戻す引数が減り続け、永遠に空白が生まれつづけるので無限ループになる。

引数を逆順に表示するには以下のようにする
define(`reverse',`ifelse($#,1,$1,`reverse(shift($@)) $1')')
reverse(foo,bar,baz,piyo)



piyo baz bar foo


引数の加算と減算 : incrとdecr

incr(整数)とかdecr(整数)とかできる。
++と--な。

changequote : クォートの開始文字列と終了文字列の入れ替え

- changequoteすれば、m4で処理するファイルを記述したプログラミング言語の記法とぶつからないクォート文字列を設定できる。
- 標準はchangequote(`,')したのと同じ状態になっている
- 文字列なので単一の記号じゃなくても大丈夫

changecom : コメントの開始文字列と終了文字列の変更

- m4のコメントは標準では「#」から改行まで
- changecom(開始コメント文字列,終了コメント文字列)
- コメント扱いされた文字列はマクロ展開されない
- ただしコメントは出力される。

dnl : 以降を改行まで無視する

- dnlディレクティブ以降、改行までの出力を抑制する。改行も出力されない
- ディレクティブの末尾にdnlをつけると、末尾の改行を抑制きるので、ディレクティブの変換後に空行が生まれない。

X
define(`X',`test')
X
define(`X',`test')dnl
X
define(`Y',`test dnl
test')dnl
X


X

test
test
test test

になる。

- dnlというトークンを表示したいときは、クォートで囲む

「-P」オプション(or --prefix-builtins)

- すべての組み込みディレクティブ名が「m4_」から始まることになる

m4はC言語のヘッダファイルを処理できるか

- m4ではC言語とバッティングしそうなディレクティブ名は引数がないと無視される
-- include, define, ifdef などいろいろ
- 「#」がm4のコメント扱いされるので「#define」や「#include」などを処理したければchangecomする

emacsと同じ正規表現による置換、削除 : patsubst

- patsubstはemacsの正規表現で文字列を探索し、置換や削除を行なえる
- patsubst( 対象文字列, 正規表現, 置換文字列 )で置換
- patsubst( 対象文字列, 正規表現)で削除

define(`X',`this is a pen')
patsubst(X,`\b',*)
patsubst(X,`\w+',*\&*)



*this* *is* *a* *pen*
*this* *is* *a* *pen*

になる。

**** emacsの正規表現
- emacsには語という概念がある。あとでやり直すけど、スペース区切りなのかな。
-- と思ったけど[0-9a-zA-Z_]で表現できるのが「語」かな
- \< : 語の先頭
- \> : 語の末尾
- \b : 語の先頭または末尾
- \w : 語を構成する文字([0-9a-zA-Z_])
- \& : 一致部分を表すシンボル

translit : 字単位の置換

- translit( 対象文字列, 対象字種, 置換字種)
- perlの「=~ tr///」的な

define(`X',`this is a pen')
translit(X,`a-z',`A-Z')



THIS IS A PEN

になる。

部分一致文字列を取得できる正規表現ディレクティブ : regexp

- regexpは開始記号「\(」と終端記号「\)」の間の正規表現とマッチした文字列を取得できる。
-- 1番目の部分文字列が/1、2番目は/2、3番目は、、、となる。

len

- 文字列の長さを取得

len()


0

になる。

len(`abcdef')


6

になる。

index

- 対象文字列中に検索用文字列が出現するか、出現するとしたら何文字目かを調べる

index(`gnus, gnats, and armadillos', `nat')
=>7
index(`gnus, gnats, and armadillos', `dag')
=>-1


substr

- 部分文字列を取得するときに使う

substr(`gnus, gnats, and armadillos', 6)
=>gnats, and armadillos
substr(`gnus, gnats, and armadillos', 6, 5)
=>gnats


syscmd, esyscmd, sysval

- シェルでコマンドを実行したいが、実行結果の標準出力を取得しなくて平気な時はsyscmd
- シェルでコマンドを実行し、実行結果の標準出力を取得するならesyscmd
- シェルコマンドの実行化を取得するならsyseval

eval

- 整数式の計算に使う




以上、m4の入門編をざっと終わらせた。
今後は他のアプリのm4ファイルを読んでみる。

emacsの正規表現を知らないので、後日調べる。

投稿者:としのり  日時:23:59:59 | コメント | トラックバック |

2009-09-25 Fri

第二回 ライブドア テクニカルセミナー

参加しました。

会場は大手町サンケイビルの3階会議室でした。
サンケイビルはアースデイライドという自転車イベントで雨宿り & トイレで使ったことがあります。

楽しいイベントでした。

メモ



「まったく役に立たない力学シミュレーション」

- 薬袋 貴志(株式会社ライブドア メディア事業部開発部システム開発グループ)
-- Box2D がおもしろい。JSでも同じようなライブラリbox2d-jsがある。
-- Papervision3D は面白そうだった。けどWebではどう使うのか。。

「データセンター移設は突然に」

- 平井 壮(株式会社ライブドア ネットワーク事業部オペレーショングループ)
-- DATAHOTELのおはなしでした。

「pixivのインフラを支える技術」

- 上薗 竜太氏(ピクシブ株式会社 インフラエンジニア)OA
-- 営業やデザイナーの人がサーバ組み立てている写真があった
-- ファイルに対する大量アクセスがあるので、atimeではなくnoatimeにするのが効く
-- サーバは1ラック100万円程度で20台
-- 故障率は部品を買った時期によって異なり(?)いまは故障しない時期(ちょwww)

「ユビキタス時代のユーザインタフェース」

- 増井 俊之氏(慶應義塾大学環境情報学部)
-- dmacroの話
--- 繰り返しの抽出
--- poboxにも応用してるのだそう
-- Webサービスで実運用して論文用の実験をできる
--- 便利だけど論文にならないサービスもある
-- Webサービスとユビキタスコンピューティングは同じような物だ、と増井さんは考えている
-- 本棚演算
--- 協調フィルタリングと論理演算の組み合わせ
-- 単語帳org
--- クリック数が少ないWiki
-- なぞなぞ、伏せ字
--- パスワードを記憶したくないときに、ユーザの属人的な知識に基づいたフレーズやクリック順を保存する
--- YesNoでなぞなぞを解くと情報が復号されるなど
-- ユビキタスはユニバーサルデザインに通じる
-- 直感的な走査には、滑らかな操作性、および、目的と操作の直感的な対応、が必要
--- 可逆的、連続的、直感的
# 直感的であること、とはどういうことなのかを考えるとアイディアがでる(と
-- Webで全世界のイベントをキャッチして、共有して、それに従って動くハードやソフトが作れる時代が来てる

個人的なメモ


- 増井さんの話がおもしろかった。聞きに行ってよかった。
- pixiv は、社員の方から話を聞いてみて、今がすごくおもしろそうな時期ではないかと思った。
- 今日の @kamipo さんはマイクの角度が水平だった。
- livedoor は活気があっていい。社員が幸せそうな顔をしている。
- @nipotan さんが断酒していた。
- 年齢を重ねると1人のアイドルよりアイドルグループがかわいいと思うようになるのだ、と教えていただいた。
- CTO 対決は実現して欲しい。




このセミナーは、3ヶ月に一回くらい開催して欲しいと思いました。
いままで話したことが無い人と話せたのが新鮮で嬉しかったです。

関連リンク


- livedoor Developers Blog:第二回 ライブドア テクニカルセミナーのお知らせ
-- http://blog.livedoor.jp/techblog/archives/65169684.html

投稿者:としのり  日時:23:59:59 | コメント | トラックバック |

2009-09-20 Sun

autoconf 学び直し その2

autoconfの学び直し、その2回目。

以前いじくった時は特に難しいことを必要としなかったので、キチンとメモを残しておかなかったので、ちゃんと残す。

環境によって挙動を変えるように設定したい。

前回はさんざんやってみて、一旦ひな形を作ってmakeするとこまでできた。
次は、m4マクロを勉強する。

前回の参考文献


- Automakeでmakeする
-- http://www.02.246.ne.jp/~torutk/cxx/automake/automake.html
- Autotoolsの入力ファイルと出力ファイル
-- http://www.fireproject.jp/feature/automake/
- automake
-- http://www.geocities.jp/fut_nis/html/automake-ja/Public-macros.html
- MODULE.JP - SpiderMonkeyをGNU Autotools対応する
-- http://module.jp/blog/autotoolize_spidermonkey.html
- COPYING(GPLの規約が書いてある)が勝手に作られる
-- http://d.hatena.ne.jp/ultraist/20070707
- autoconf & automake
-- http://www.jaist.ac.jp/~kiyoshiy/memo/autoconf.html

復習


$ cp ../../autoconf_practice/trunk/practice.c .
$ ls
practice.c
$ echo 'SUBDIRS = src' > Makefile.am
$ mkdir src; mv practice.c ./src
$ cp ../../autoconf_practice/trunk/src/practice2.c ./src
$ emacs ./src/Makefile.am
bin_PROGRAMS = practice
practice_SOURCES = practice.c practice2.c

$ ls
Makefile.am autoscan.log configure.scan src/
$ mv configure.scan configure.ac
$ ls
Makefile.am autoscan.log configure.ac src/
$ emacs configure.ac
# -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.

FULL-PACKAGE-NAME=huffman
VERSION=0.0.1_01
BUG-REPORT-ADDRESS=overlasting<at>gmail<dot>com
AUTOMAKE_VERSION=1.4-p6

AC_PREREQ(2.61)
AC_INIT(huffman, 0.0.1_01, overlasting<at>gmail<dot>com)
# AC_INIT_AUTOMAKE(huffman, 0.0.1_01)
AM_INIT_AUTOMAKE([foreign 1.4-p6])

AC_CONFIG_AUX_DIR(config)
AC_CONFIG_SRCDIR([src/practice.c])
AM_CONFIG_HEADER(config.h)

$ touch NEWS AUTHORS ChangeLog README
$ mkdir config
$ autoheader
$ automake --add-missing
$ autoconf
$ ./configure
$ make
$ ./src/practice -> practice動いた

今回の参考文献


- Super Technique 講座〜m4 チュートリアル
-- http://www.nurs.or.jp/~sug/soft/super/m4.htm

今回


- m4とは?
-- 汎用的なマイクロプロセッサなのだそうだ
- 特徴
-- マクロに改行を含むことができるそうだ
--- Cのマクロのように1行じゃなくても大丈夫ということ
-- 任意の文字セットをトークンとして再定義できるらしい。
-- 有用な組み込み関数をもっているらしい
-- 組み込み関数の挙動に制限を加えられるらしい
-- 再帰定義を活用してループを実現するのだそう
- m4はさまざまな便利ツールのなかで使われている
-- 例、autoconf
--- configure.acやinではm4マクロ使い倒してる
--- 凝ったconfigure.acを書くにはm4の挙動を知る必要がある
- m4はテキストの入力を受け付けるツール

m4のバージョンを見てみた実行してみた。
今のdebian etchに入ってるのはver 1.4.8だった。
m4は多分枯れてるだろうし平気かな。
$ m4 --version
GNU M4 1.4.8
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Written by Rene' Seindal.


- m4の組み込み関数は「ディレクティブ」と呼ばれる。
- ディレクティブは日本語の文字コードにまともに対応していない
-- 日本語を含んだファイルをm4に食わせる場合には気をつけるのだ

- define() : マクロ定義に関するディレクティブ
-- cのdefineみたいなもの
- 例、XXX を YYY に置き換えたいとする
-- m4のdefineでの書き方
--- define(`XXX', `YYY')
-- cのdefineの書き方
--- #define XXX YYY
-- one two three : XXX. を変換すると
--- m4の場合
define(`XXX', `YYY')
one two three : XXX.



one two three : YYY.


--- cの場合の例
#define XXX YYY
one two three : XXX.


# 1 ""

one two three : YYY .


- m4と比較して、cのdefineは「行番号の追加」と「変換後の余分な空白の追加」という副作用がある。
-- m4はマクロ定義が空行になる。cではマクロ定義が行番号表示+改行になる。

- トークンの区切りは空白か改行
- m4はトークンを変換してできた tokens がさらに変換できる場合には変換する
- ディレクティブの連続は空行の連続ではなく、1つの空行に変換される
define(`XXX', `YYY YY')
define(`YYY', `ZZZ')
one two three : XXX.



one two three : ZZZ YY.


- m4のトークンの表記はC言語の変数の表記とルールが同じ
-- 大文字と小文字は当然区別される

- indir() : 強制的に置換
define(`XXX', `YYY YY')
define(`YYY', `ZZZ')
define(`x', `X')
one two three : indeir(`x')XX.



one two three : ZZZ YY.

に変換される。

- マクロは改行を含んでいてもOK。m4は執念深く「'」を探す
define(`XXX', `YYY
YY')
define(`YYY', `ZZZ')
define(`x', `X')
one two three : indeir(`x')XX.



one two three : ZZZ
YY.

に変換される。

- クォート「`'」は文字列をトークンで無くす
- m4はマクロへの変換が終了したら、1重だけ「`文字列'」を「文字列」に変換する
define(`XXX', `YYY')
define(XXX, `ZZZ')
one two three : XXX YYY.



one two three : ZZZ ZZZ.


になる。

なんでこうなるのか、と言うと
- define(XXX, `ZZZ')がdefine(YYY, `ZZZ')に変換される
- そのためdefine(`XXX', `YYY')の実行結果はdefine(`XXX', `ZZZ')と同じになる
-- 結果的にdefine(`XXX', `ZZZ')とdefine(`YYY', `ZZZ')が定義された状態になる

- マクロに変換した文字列がトークンになって欲しくない場合は、マクロ定義で文字列を2重クォートすれば良い。
-- トークンが置換された時に、マクロにクォートが残るので変換後の文字列がトークン扱いされない。かつ終了時に1重のクォートが消える。

define(`XXX', ``YYY'')
define(XXX, `ZZZ')
one two three : XXX YYY.



one two three : YYY ZZZ.

となる。

- テキスト側にクォートを仕込む事ができる。
-- 1重のクォートでマクロ置換を拒む事ができる
-- クォート自体を残したければ2重でクォートすれば良い

define(`XXX', `YYY')
define(XXX, `ZZZ')
one two three : `XXX' ``YYY''.



one two three : XXX `YYY'.


- m4はCと同じく引数付きマクロが定義できる
-- 引数に$0, $1, ...のような名前がつく
--- $0 : マクロの名前
--- $# : 引数の個数
--- $* or $@ : すべての引数を「,」で結合したもの
--- $*は結合時に引数のクォートを1重だけ外す
--- $@は結合時にクォートを外さない

define(`keyval',`$1 => $2')
keyval(`1',`one')
keyval(`2',`two')
keyval(`3',`three')



1 => one
2 => two
3 => three

になる

- m4の引数付きマクロは、引数の過不足に警告を出さない
-- 多すぎる場合は無視をする。少ない場合には空文字列になる。

define(`echo1',`$*')
define(`echo2',`$@')
define(This,That)
echo1(`This',`is',`a',`pen')
echo1(``This'',`is',`a',`pen')
echo2(`This',`is',`a',`pen')
echo2(``This'',`is',`a',`pen')



That,is,a,pen
This,is,a,pen
This,is,a,pen
`This',is,a,pen

になる。



つかれた。続きは後日。

投稿者:としのり  日時:23:59:59 | コメント | トラックバック |

2009-09-13 Sun

YAPC::Asia 2009 Hackathon Day-2

今日はハッカソンの2日目。
夕方から hotel-dan にお邪魔しました。

投稿者:としのり  日時:23:59:59 | コメント | トラックバック |

2009-09-12 Sat

autoconf 学び直し その1

autoconfの学び直し。

以前いじくった時は特に難しいことを必要としなかったので、キチンとメモを残しておかなかったので、ちゃんと残す。

環境によって挙動を変えるように設定したい。

参考文献


- Automakeでmakeする
-- http://www.02.246.ne.jp/~torutk/cxx/automake/automake.html
- Autotoolsの入力ファイルと出力ファイル
-- http://www.fireproject.jp/feature/automake/
- automake
-- http://www.geocities.jp/fut_nis/html/automake-ja/Public-macros.html
- MODULE.JP - SpiderMonkeyをGNU Autotools対応する
-- http://module.jp/blog/autotoolize_spidermonkey.html
- COPYING(GPLの規約が書いてある)が勝手に作られる
-- http://d.hatena.ne.jp/ultraist/20070707
- autoconf & automake
-- http://www.jaist.ac.jp/~kiyoshiy/memo/autoconf.html

メモ(いろいろ試しながらやったので作業が前後してるかも


- ソースコードの設置
-- 適当になんかファイルを作ったら、
-- srcディレクトリ以下に置く

/-- src
      |-- practice.c


- Makefile.amを書く
-- ビルドするソースが無いディレクトリのMakefile.amはディレクトリの列挙
-- 今回の例だと、「$ echo 'SUBDIRS = src' > Makefile.am」かな
-- ビルドするソースが有るディレクトリのMakefile.amはソースの記述

bin_PROGRAMS = example1 example2
example1_SOURCES = example1.c
example2_SOURCES = example2.c


- autoscanする。
-- configure.acのひな形を作りたい
-- バグが無いコードを実行すると「autoscan.log」と「configure.scan」ができる。

- すべての、configure.scanをconfigure.acに変更する
-- これはautoconfで使われる。
-- 古いバージョンのAutoconfではconfigure.inを使用していましたが、Autoconf 2.50とそれ以降では,configure.inではなくconfigure.acを推奨

- configure.acの「FULL-PACKAGE-NAME」、「VERSION」を変更する。
-- 例えばハフマン符号のコードなら、「FULL-PACKAGE-NAME」を「huffman」とかにすれば良い。
-- VERSIONは、最初だから0.0.1_01とかで良い。
-- BUG-REPORT-ADDRESSは、自分のアドレスを書いたりした。

AC_INIT(FULL-PACKAGE-NAME, VERSION, BUG-REPORT-ADDRESS)


- AC_INIT_AUTOMAKE(FULL-PACKAGE-NAME, VERSION)を足す
-- automake
--- http://www.geocities.jp/fut_nis/html/automake-ja/Public-macros.html

- AM_INIT_AUTOMAKEを足す
-- automakeを使うことをautoconfに伝えるマクロ
-- GNU projectとして作るわけではないので、foreignという引数を与える
--- foreignを与えないと「COPYING(GPLの規約が書いてある)が勝手に作られる」
$ automake --version
automake (GNU automake) 1.4-p6

Copyright (C) 1999, 2001 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Written by Tom Tromey <tromey@redhat.com>


-- ということで「AM_INIT_AUTOMAKE([foreign 1.4-p6])」とか書く。

-- AC_CONFIG_HEADER() を AM_CONFIG_HEADER() に変更
-- AC_INIT_AUTOMAKE()もなんか駄目だなぁ。。。

そうすると以下のようになる。
# -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.

FULL-PACKAGE-NAME=huffman
VERSION=0.0.1_01
BUG-REPORT-ADDRESS=overlasting<at>gmail<dot>com
AUTOMAKE_VERSION=1.4-p6

AC_PREREQ(2.61)
AC_INIT(huffman, 0.0.1_01, overlasting<at>gmail<dot>com)
# AC_INIT_AUTOMAKE(huffman, 0.0.1_01)
AM_INIT_AUTOMAKE([foreign 1.4-p6])

AC_CONFIG_AUX_DIR(config)
AC_CONFIG_SRCDIR([src/practice.c])
AM_CONFIG_HEADER(config.h)

# Checks for programs.

AC_PROG_CC


- aclocalする
-- $ aclocalする

- Automakeのためのマクロ
- Autoconfのためのマクロ
- ユーザ定義のマクロ
などを参照し,configure.inに記述されている全てのマクロを解決し,aclocal.m4を生成する.
入力ファイル
        * configure.ac (configure.in)
        * acinclude.m4(オプション.なくてもよい)
        * ユーザ定義マクロファイル(オプション.なくてもよい)
出力ファイル
        * aclocal.m4


たしかにactocal.m4ができてた。

- 無いよと怒られたファイルは追加する
-- $ touch NEWS AUTHORS ChangeLog README

- Autoheaderを実行しよう
-- $ autoheaderする

Autoheaderはm4にconfigure.inを与えてconfig.h.inを生成する.
入力ファイル
        * configure.in
        * aclocal.m4
出力ファイル
        * configure.h.in


-- 確かに、config.h.inできた!!

- 次はautomake --add-missingする
-- 意味は?

automake accepts the following options:
-a
--add-missing
 Automake requires certain common files to exist in certain situations; for instance config.guess is required if config‐
 ure.in runs AC_CANONICAL_HOST. Automake is distributed with several of these files; this option will cause the missing
 ones to be automatically added to the package, whenever possible. In general if Automake tells you a file is missing,
 try using this option.
--amdir=DIR
 Look for Automake data files in directory DIR instead of in the installation directory. This is typically used for
 debugging.
--build-dir=DIR
 Tell Automake where the build directory is. This option is used when including dependencies into a Makefile.in gener‐
 ated by make dist; it should not be used otherwise.


Autoconf


Autoconfはconfigure.inに記述されたm4マクロをaclocal.m4参照しつつ展開し,configureスクリプトを生成する.
入力ファイル
        * configure.in
        * aclocal.m4
出力ファイル
        * configure


Configure


$ ./configure

configureはAutoconfにより生成されるスクリプトで,各プラットフォームの環境をチェックし,その環境にあわせてパッケージをビルドするためのMakefileを生成する.
入力ファイル

        * Makefile.in
        * config.h.in
        * ltmain.sh(Libtool使用時)
出力ファイル
        * Makefile
        * config.h
        * libtool(Libtool使用時)
この他にも多くの入出力ファイルを使用している.





ここから先は他のアプリの cnfigure.in を見てみよう。

@takesako さんからはm4マクロ周りを調べると良いよ、とご教授いただいた。

また、次に暇な日に続く。

投稿者:としのり  日時:23:59:59 | コメント | トラックバック |