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/
#スタッフの方のブログもあるみたい。
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日だそうです。
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
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 会期中無休 |
| 会 場 | 東京ミッドタウン・デザインハブ |
| 入場料 | 無料 |
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/
でも、実際にこれらをどのように学生が消化しているのかは知りませんでした。
そこについては、要するに
- フルタイムの学生でも授業は1学期に3-4個
- 予習復習しないと落ちこぼれる
- 宿題の量と質がものすごい
- 1回分の宿題は、東大の最も難しいクラスの講義の期末のレポート並みの重たさ
のようなもの消化の仕方なのだそう。
10週間で、この他にもう1、2個の講義を受講するのですか。タフですね。。。
勉強のときの予習復習は大切だな、、、と思う出来事が多いので、これを機に予習癖をつけていこうと思います。
関連リンク
- Stanford School of Engineering - Stanford Engineering Everywhere
-- http://see.stanford.edu/see/courses.aspx
2009-09-30 Wed
口内炎がひどいのでケナログを買った
数日前に下前歯付近にできた口内炎がだんだんひどくなり、傷口の痛みで日常生活に支障がでたのでケナログを購入。
from overlast using Panasonic DMC-FX100
ケナログの価格が予想以上に高くてビックリ。
早速寝る前に塗って一晩開けてみると、口内炎の痛みが半減していました。ケナログ凄い!
あまりにも治るのが速いので、ちょっと怖いですね。
また酷い口内炎ができたときに使うことにします。
関連リンク
- 口腔用ケナログ:薬と健康の情報!おくすりナビ
-- http://www.okusurinavi.com/DB/show/2007101600001.html
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)
- 単語やシンボルなどの構文要素の開始と終了を調べるために使われる
-- 構文解析関数や複雑な移動を行うコマンドなどで使う
ちょっと朝に調べきれなかったので、夜に引き続き調べて追記する。
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
よって必要に迫られるまで、調べ直さなくて良いかな。。
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

2009-09-29 Tue
Emacs の正規表現
先日、m4 で使える正規表現がEmacsとほぼ同じであることを知った。
ということで Emacs の正規表現を調べ直してみる。
参考資料
英語のマニュアルと、入門 GNU Emacs 第2版を眺めました。最新版は3版です。
入門 GNU Emacs 第3版


- 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 | 改行にマッチ |
| \t | tabにマッチ |
| \< | 単語の先頭にマッチ |
| \> | 単語の末尾にマッチ |
| \b | 単語の最初か最後にある空文字とマッチ |
| \B | 単語の最初や最後以外の空文字とマッチ |
| \ < | 単語の先頭の空白にマッチ |
| \ > | 単語の末尾の空白にマッチ |
| \w | エディタの構文テーブルによって決められる単語構成する文字にマッチする |
| \W | 単語を構成する文字に含まれない文字にマッチする |
| \s | 直後に記述した「構文」に含まれる文字にマッチする |
| \S | 直後に記述した「構文」に含まれない文字にマッチする |
| \` | バッファの先頭にある空文字とマッチ |
| \' | バッファの末尾にある空文字とマッチ |
| \= | その場の空文字とマッチ |
■セット内で特殊な意味を持つ
| 演算子 | 機能 |
| ^ | セットの先頭にある場合には、そのセットを「マッチしない文字セット」とする |
| - | 文字の範囲を指定 |
■正規表現文字列中で特殊な意味を持つ
| \N | N番目の正規表現グループでくくられた部分文字列を代入する。右から順に1、2と数える。9番目まで。 |
アバウトにEmacsの正規表現を理解した。
シンボル(単語)の概念が特徴的。
構文テーブル(syntax table)については後日調べた方が良さそう。
m4 と Emacs の正規表現がのマニュアルの正規表現に該当する部分を読んだ方が良い気がして来たので次はm4のマニュアルを読む。
2009-09-28 Mon
赤坂の氷川神社
昼食後赤坂の氷川神社を散歩。
お参りして、おみくじを引いてきました。
from overlast using Panasonic DMC-FX100
おお、大吉がでました!
要約すると「交通事故に気をつけながら、短気にならず謙虚に今やってることに励みなさい」と書いてありました。味わい深いですね。
関連リンク
- 氷川神社(赤坂 氷川神社)
-- http://www.akasakahikawa.or.jp/
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(`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」などとしておく
define(`hello',sinclude(`hello.m4'))
define(`hey',sinclude(`hey.m4'))
hello
good bye
hey
hello
が
hello hello hello
good bye
hello hello hello
になる。
条件分岐 : ifdef, ifelse
- ifdefディレクティブ
-- 動きを見ると理解が速い
-- 例、事前にcond.m4を用意する
--- cond_ifdef.m4
`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ディレクティブ
- ifdefが調べる変数名を記述したのに対し、ifelseは比較対象を書く
-- そのため、ifelseでは値を評価するために、比較対象の変数名をクォートでくくらない
-- 例、事前にcond.m4を用意する
--- cond_ifelse.m4
-- その後、コマンドラインで実行
--- 「COND is」がCONDの値に左右されないよう、2重クォートされている。
-- $ m4 -DCOND=1 test.m4 の場合
COND is one
-- $ m4 -DCOND=2 test.m4 の場合
COND is 2
- 不一致時に展開されるトークンを記述できるが、トークンの変わりに、ifelseディレクティブを入れ子にできる
--- cond_ifelse.m4
-- $ 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(foo)
shift(foo,bar,baz)
が
bar,baz
になる。
ループ
- m4はマクロで再帰が書ける
- defineとifelseとshiftを使うのが定石
last(foo,bar,baz,piyo)
が
piyo
になる。
もしも
last(foo,bar,baz,piyo)
にすると、shiftが戻す引数が減り続け、永遠に空白が生まれつづけるので無限ループになる。
引数を逆順に表示するには以下のようにする
reverse(foo,bar,baz,piyo)
が
piyo baz bar foo
引数の加算と減算 : incrとdecr
incr(整数)とかdecr(整数)とかできる。
++と--な。
changequote : クォートの開始文字列と終了文字列の入れ替え
- changequoteすれば、m4で処理するファイルを記述したプログラミング言語の記法とぶつからないクォート文字列を設定できる。
- 標準はchangequote(`,')したのと同じ状態になっている
- 文字列なので単一の記号じゃなくても大丈夫
changecom : コメントの開始文字列と終了文字列の変更
- m4のコメントは標準では「#」から改行まで
- changecom(開始コメント文字列,終了コメント文字列)
- コメント扱いされた文字列はマクロ展開されない
- ただしコメントは出力される。
dnl : 以降を改行まで無視する
- dnlディレクティブ以降、改行までの出力を抑制する。改行も出力されない
- ディレクティブの末尾にdnlをつけると、末尾の改行を抑制きるので、ディレクティブの変換後に空行が生まれない。
define(`X',`test')
X
define(`X',`test')dnl
X
define(`Y',`test dnl
test')dnl
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( 対象文字列, 正規表現)で削除
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///」的な
translit(X,`a-z',`A-Z')
が
THIS IS A PEN
になる。
部分一致文字列を取得できる正規表現ディレクティブ : regexp
- regexpは開始記号「\(」と終端記号「\)」の間の正規表現とマッチした文字列を取得できる。
-- 1番目の部分文字列が/1、2番目は/2、3番目は、、、となる。
len
- 文字列の長さを取得
が
になる。
が
になる。
index
- 対象文字列中に検索用文字列が出現するか、出現するとしたら何文字目かを調べる
=>7
index(`gnus, gnats, and armadillos', `dag')
=>-1
substr
- 部分文字列を取得するときに使う
=>gnats, and armadillos
substr(`gnus, gnats, and armadillos', 6, 5)
=>gnats
syscmd, esyscmd, sysval
- シェルでコマンドを実行したいが、実行結果の標準出力を取得しなくて平気な時はsyscmd
- シェルでコマンドを実行し、実行結果の標準出力を取得するならesyscmd
- シェルコマンドの実行化を取得するならsyseval
eval
- 整数式の計算に使う
以上、m4の入門編をざっと終わらせた。
今後は他のアプリのm4ファイルを読んでみる。
emacsの正規表現を知らないので、後日調べる。
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
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
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
# 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は多分枯れてるだろうし平気かな。
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の場合
one two three : XXX.
が
one two three : YYY.
--- cの場合の例
one two three : XXX.
が
one two three : YYY .
- m4と比較して、cのdefineは「行番号の追加」と「変換後の余分な空白の追加」という副作用がある。
-- m4はマクロ定義が空行になる。cではマクロ定義が行番号表示+改行になる。
- トークンの区切りは空白か改行
- m4はトークンを変換してできた tokens がさらに変換できる場合には変換する
- ディレクティブの連続は空行の連続ではなく、1つの空行に変換される
define(`YYY', `ZZZ')
one two three : XXX.
が
one two three : ZZZ YY.
- m4のトークンの表記はC言語の変数の表記とルールが同じ
-- 大文字と小文字は当然区別される
- indir() : 強制的に置換
define(`YYY', `ZZZ')
define(`x', `X')
one two three : indeir(`x')XX.
が
one two three : ZZZ YY.
に変換される。
- マクロは改行を含んでいてもOK。m4は執念深く「'」を探す
YY')
define(`YYY', `ZZZ')
define(`x', `X')
one two three : indeir(`x')XX.
が
one two three : ZZZ
YY.
に変換される。
- クォート「`'」は文字列をトークンで無くす
- m4はマクロへの変換が終了したら、1重だけ「`文字列'」を「文字列」に変換する
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重だけ外す
--- $@は結合時にクォートを外さない
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
になる。
つかれた。続きは後日。
2009-09-13 Sun
YAPC::Asia 2009 Hackathon Day-2
今日はハッカソンの2日目。
夕方から hotel-dan にお邪魔しました。
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ディレクトリ以下に置く
|-- practice.c
- Makefile.amを書く
-- ビルドするソースが無いディレクトリのMakefile.amはディレクトリの列挙
-- 今回の例だと、「$ echo 'SUBDIRS = src' > Makefile.am」かな
-- ビルドするソースが有るディレクトリのMakefile.amはソースの記述
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_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 (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()もなんか駄目だなぁ。。。
そうすると以下のようになる。
# 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する
- Autoconfのためのマクロ
- ユーザ定義のマクロ
などを参照し,configure.inに記述されている全てのマクロを解決し,aclocal.m4を生成する.
入力ファイル
* configure.ac (configure.in)
* acinclude.m4(オプション.なくてもよい)
* ユーザ定義マクロファイル(オプション.なくてもよい)
出力ファイル
* aclocal.m4
たしかにactocal.m4ができてた。
- 無いよと怒られたファイルは追加する
-- $ touch NEWS AUTHORS ChangeLog README
- Autoheaderを実行しよう
-- $ autoheaderする
入力ファイル
* configure.in
* aclocal.m4
出力ファイル
* configure.h.in
-- 確かに、config.h.inできた!!
- 次はautomake --add-missingする
-- 意味は?
-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
入力ファイル
* configure.in
* aclocal.m4
出力ファイル
* configure
Configure
$ ./configure
入力ファイル
* Makefile.in
* config.h.in
* ltmain.sh(Libtool使用時)
出力ファイル
* Makefile
* config.h
* libtool(Libtool使用時)
この他にも多くの入出力ファイルを使用している.
ここから先は他のアプリの cnfigure.in を見てみよう。
@takesako さんからはm4マクロ周りを調べると良いよ、とご教授いただいた。
また、次に暇な日に続く。
2009-09-12 Sat
YAPC::Asia 2009 Hackathon Day-1
今日はハッカソンの1日目。
今年は夕方から hotel-dan にお邪魔しました。
2009-09-02 Wed
今日は誕生日です
もう31歳ですよ。あああ。
この1年は、すいぶんいろいろありました。
また、たくさんの方々に支えられた1年でした。
とくに大きな事故に合うこと無く、年を重ねることができて嬉しいです。
みなさん、いつもどうもありがとうございます。
これから先の1年間は、この前の1年で身につけたものを形に変える年にしたいと思っています。
今後も、どうぞよろしくお願いいたします。
2009-09-01 Tue
さくらインターネットでディレクトリ内のファイル一覧が表示されないようにする方法
さくらインターネットのレンタルサーバにブログを移動する前に確かめ忘れていて、先ほど確かめたら嫌な予感的中だったのですが、
「さくらインターネットのレンタルサーバは標準ではディレクトリ内のファイル一覧が表示される」
のですね。ショックでした。
とりいそぎ、wwwフォルダに.htaccessファイルをつくり、
と書いておきました。
フォルダが存在することは分かりますが、ファイル一覧は出ないので良いかなと思います。
後で以下を見つつ、エラーページを設置するのが良さそうですね。。。
- SAKURA Internet // サポート - オンラインマニュアル
-- .htaccessでアクセス制御する
--- http://support.sakura.ad.jp/support/manual/rs/tech_htaccess.shtml
2009-09-01 Tue
サーバを自宅からレンタルサーバに移転しました
このブログを運用しているサーバを自宅から、さくらインターネットのレンタルサーバに移しました。
自宅のサーバが老朽化しており数日に1回止まってしまうからです。
今後は落ちてない時間が大分長くなるのではないかなと思います。
それに伴って日記ブログのアドレスをダイナミックDNSなアドレスではなく、
以前から使っている.netなアドレスに移そうと思います。
変更は以下のようになります。
(旧)http://overlasting.dyndns.org/
↓
(新)http://diary.overlasting.net/
半年くらいは自宅サーバを動かすので、ゆるゆるアドレス移行できればと思います。
移行のために自宅サーバの lighttpd にリダイレクトを仕込みました。

