前の月 / 次の月 / トップページ
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30

2009-09-30 Wed

Charleston & Son のピザ・カプリチョーザ

今日は昼ご飯があまりにも遅い時間になったので、Charleston & Son にピザを食べに来ました。


from overlast using Panasonic DMC-FX100

今日のカプリチョーザは生地が非常に薄く柔らかい仕上がりでした。ほんとに毎回違うなぁ。

そういえば、店内がハロウィン仕様でバッチリ飾り付けられており、カボチャを見てるだけで楽しい気分になりました。


from overlast using Panasonic DMC-FX100

ハロウィンは10月31日なので、月末までこんな感じなのかな。

関連リンク


- チャールストンアンドサン CHARLESTON&SON:食べログ
-- http://r.tabelog.com/tokyo/A1307/A130701/13001977/

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

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

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


from overlast using Panasonic DMC-FX100

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

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

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

関連リンク


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

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

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 | コメント | トラックバック |

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 | コメント | トラックバック |

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

大戸屋 広島産カキのせいろご飯と野菜と鶏の揚げ煮定食

夕食は、大戸屋で食べました。

入り口のディスプレイにあった「広島産カキのせいろご飯と野菜と鶏の揚げ煮定食」が気になったので食べてみました。


from overlast using Panasonic DMC-FX100

これは、おいしい。

塩味控えめなひじきご飯と、プリッとした牡蠣の旨味が口の中で混ざり合って、幸せでした。
一緒に食べると、こんな味なんですね。

揚げ煮は、揚げてあるおかげで適度な歯ごたえで噛み切れるザックリ切りな野菜がいい感じです。
最近は家で揚げ物を作らないので、少量の揚げ物が出てくると嬉しい気分になります。

また今度食べよう。。

関連リンク


- 大戸屋
-- http://www.ootoya.com/

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

焼肉四天王 もつ煮込み定食

このごろ頻繁に行っている「焼肉四天王」のもつ煮込み定食。
こんなにたっぷりで500円。しかも値段の割においしい。


from overlast using Panasonic DMC-FX100

焼肉四天王のランチは副菜とみそ汁もちゃんとしています。
友人が食べているのをみると、ステーキランチは値段なりなので他の定食を頼んだ方が良さそう。。

ホームページが潰れたりしていて、もしかすると近日無くなっちゃうかもしれないので、近所を通りがかったら寄ってみると良いでしょう。

場所


東京都港区六本木3丁目14−7六本木アロービル


大きな地図で見る

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

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

「せんとくんせんべい」と「See's candies」いただきました

このエントリーをはてなブックマークに追加 「せんとくんせんべい」と「See's candies」いただきました "), 'delicious','toolbar=no,width=550,height=550'); return false;">Delicious [Food&Drink]

Mさんの奈良土産と、@mamoruk さんのアメリカ土産をつまませて頂きました。


from overlast using Panasonic DMC-FX100

うまい!ごちそうさまでした。

楽天で「Sees candies」を調べる。

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

赤坂の氷川神社

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


from overlast using Panasonic DMC-FX100

おお、大吉がでました!

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

関連リンク


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

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

にっぽんの洋食 赤坂 津つ井で煮込みハンバーグ

今日のお昼はH山さんと、津つ井の煮込みハンバーグ定食を食べました。


from overlast using Panasonic DMC-FX100

津つ井は静かで、短時間ですごく休まるので好き。

今日のハンバーグもギュっとしてて美味しかったです。

関連リンク


- にっぽんの洋食 赤坂 津つ井
-- http://akasaka.221.jp/
- にっぽんの洋食 赤坂 津つ井 総本店 ツツイ - 洋食(六本木一丁目) [食べログ]
-- http://r.tabelog.com/tokyo/A1307/A130701/13002829/

投稿者:としのり  日時: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 | コメント | トラックバック |

YAPC::Asia 2009 Hackathon Day-1

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

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

2009-09-02 Wed

今日は誕生日です

もう31歳ですよ。あああ。

この1年は、すいぶんいろいろありました。
また、たくさんの方々に支えられた1年でした。

とくに大きな事故に合うこと無く、年を重ねることができて嬉しいです。
みなさん、いつもどうもありがとうございます。

これから先の1年間は、この前の1年で身につけたものを形に変える年にしたいと思っています。

今後も、どうぞよろしくお願いいたします。

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

2009-09-01 Tue

さくらインターネットでディレクトリ内のファイル一覧が表示されないようにする方法

さくらインターネットのレンタルサーバにブログを移動する前に確かめ忘れていて、先ほど確かめたら嫌な予感的中だったのですが、
「さくらインターネットのレンタルサーバは標準ではディレクトリ内のファイル一覧が表示される」
のですね。ショックでした。

とりいそぎ、wwwフォルダに.htaccessファイルをつくり、

IndexIgnore *

と書いておきました。

フォルダが存在することは分かりますが、ファイル一覧は出ないので良いかなと思います。

後で以下を見つつ、エラーページを設置するのが良さそうですね。。。

- SAKURA Internet // サポート - オンラインマニュアル
-- .htaccessでアクセス制御する
--- http://support.sakura.ad.jp/support/manual/rs/tech_htaccess.shtml

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

サーバを自宅からレンタルサーバに移転しました

このブログを運用しているサーバを自宅から、さくらインターネットのレンタルサーバに移しました。

自宅のサーバが老朽化しており数日に1回止まってしまうからです。
今後は落ちてない時間が大分長くなるのではないかなと思います。

それに伴って日記ブログのアドレスをダイナミックDNSなアドレスではなく、
以前から使っている.netなアドレスに移そうと思います。

変更は以下のようになります。

(旧)http://overlasting.dyndns.org/

(新)http://diary.overlasting.net/

半年くらいは自宅サーバを動かすので、ゆるゆるアドレス移行できればと思います。
移行のために自宅サーバの lighttpd にリダイレクトを仕込みました。

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

関連エントリ

[2009-08-14-2] Amazon のAPI認証に対応
[-] 1