2013年10月26日土曜日

FreeBSDでArduino 2

FreeBSDでAVRの続きです。

前回のあらすじ(のうち本当に必要な部分)

CQカチャduinoを買って、portsからdevel/arduinoとdevel/arduino-mkをインストールした。
arduinoを起動する(terminalから「arduino」で立ち上がる)と、IDEが立ち上がるのだけど、uploadができなかった。

dialerに追加

uploadに失敗したときのエラーメッセージを見ると次のように書いてある。
check_group_uucp(): error testing lock file creation Error 
details:Permission deniedcheck_lock_status: No permission to create lock
 file.
please see: How can I use Lock Files with rxtx? in INSTALL
何かの権限が足りていなそうだ。

さらに、とりあえず/dev/cuaU0のステータスを見てみた。
$ ls -l /dev/cuaU0
crw-rw----  1 uucp  dialer  0x9a Sep 32 19:23 /dev/cuaU0
ということで、自分をdialerに追加した。一度ログアウトが必要かも。
$ pw groupmod dialer -m username

これで、/dev/cuaU0の書き込み権限がもらえたので、(ユーザー権限で走っている)Arduino IDEからuploadが可能になった。
(前回の記録では、sudoしてルート権限で書き込んでいた。)

本当は、 Port devel/arduino serial port problems [SOLVED](メーリングリストの過去ログ)を見て分かったのだけれど、せっかくなので「手探りで解決する風」の話に再構成しました。

USBシリアル関係の設定

~/.arduino/prefrence.txtで次の2つの値を設定する。
serial.port=/dev/cuaU0
serial.debug_rate=57600
*.inoのsetup()でシリアル通信の速度を設定する。
Serial.begin(57600)

これでArduinoとして動いた。Serial monitorもシリアル通信の速度を設定したら使えた。さて、何して遊ぼうかな。

2013年9月8日日曜日

FreeBSDでAVR (旧タイトル:FreeBSDでArduino)

Arduinoの互換機を手に入れたのだけど、家のマシンがFreeBSDなので開発環境を整えるのにちょっと調べ物が必要だったので、その記録を残しておくことにする。

参考文献
[1]
中尾司(2013),『Arduino実験キットで楽ちんマイコン開発』, CQ出版

[2]
坂井弘亮,<http://kozos.jp/kozos/avr_04.html>, (AVR編第4回)AVRとArduinoについて,調べたことをまとめておこう (2013年9月8日アクセス)

[3]
<http://playground.arduino.cc/FreeBSD/CLI>, Arduino Playground - CLI, (2013年9月8日アクセス)

[4]
<http://wiki.livedoor.jp/avoild/d/Arduino%28Duemilanove%29%A4%F2%C9%E1%C4%CC%A4%CEAVR%A5%DE%A5%A4%A5%B3%A5%F3%A4%C8%A4%B7%A4%C6%BB%C8%A4%A6>
Arduino(Duemilanove)を普通のAVRマイコンとして使う, (2013年9月8日アクセス)

環境
OS:FreeBSD 9.1-STABLE #2
ports:arduino-1.0.5.1, arduino-mk-0.10
arduino:CQカチャduino (Arduino Duemilanove互換)

実験
まず、[1]の互換機(CQカチャduino)が、Arduino Duemilanove互換であることを確認。
CQカチャduinoのUSBコントローラはFT232であるのだけれど、[3]を読むと十分に昔からFT232はサポートされているようだったので、CQカチャduinoを購入した。

数日後、CQカチャduinoが届いたのでUSBケーブルでつないでみた。
FreeBSD 9.1では、標準のカーネルでFT232を認識できて、カーネルモジュールは不要であった。
[2]にあるように、/dev/cuaU0として認識された。

引き続き、devel/arduinoとdevel/arduino-mkをportからインストールした。
端末から、arduinoを起動すると、IDEが立ち上がった。
ちょこちょこと[1]のサンプルコードを打ち込んで、コンパイルするとコンパイルできた。
しかし、uploadができない。Tools->Serial Portでポートを指定してやらねばならないのだけど、どうも指定できない。
この辺でIDEは諦めた。CUIでの操作に抵抗はない。

気を取り直して、[3]を参考に、新しいディレクトリで、もう一度サンプルコード(led.c)を用意した。
なお、[1]のIDE用のコードと違って、[3]のコードはmain文がある。IDEは関数setup()、loop()を定義するだけで、IDE内で自動的にmain()を用意してくれることになっているのだろう。多分、次のような感じ。

int main(){
  setup();

  while(1){
    loop();
  }
}

で、ターミナルで次を実行する。

avr-gcc -DF_CPU=16000000UL -mmcu=atmega328p -o led.out led.c
avr-objcopy -O ihex -R .eeprom led.out led.hex
sudo avrdude -V -F -c stk500v1 -p m328p -b 57600 -P /dev/cuaU0 -U flash:w:led.hex

[1]との差分は、次の点。
  • blink.cの代わりにled.cにした。
  • avr-gcc
      -mmcu=atmega328pにした。(でもmanには選択肢として出ていないので本当に聞いているかは不明)
  • avrdude
      -p m328pにした。
      -b 57600 にした。
    (avrdude: stk500_recv(): programmer is not respondingとエラーが出たから調べたら、[4]に書いてあった。)


これで、コンパイル、アップロードに成功した。
情報を残して行ってくれた、皆さんのおかげです。ありがとうございます。

次は、Arduinoとシリアル通信できるようにしたい。

2013年10月26日追記:
もともとは、FreeBSDでArduinoだったのだけれど、AVRとしてしか使っていないので、タイトルを変えました。 FreeBSDでもArduinoとして使えているので、それは別途どこかで述べます。

2013年9月7日土曜日

2013年の西瓜 まとめ

今年の夏もそろそろ終わりなので、2013年に食べた西瓜についてまとめようと思います。
購入日購入単位重さ 産地 購入価格*
5月19日1/6-熊本398円
6月1日1/6-熊本280円
6月12日1/6-千葉297円
6月15日
(黄色い西瓜)
1/6-千葉398円
6月19日1/6-千葉450円
7月5日1/61.4kg鳥取458円
7月7日1/61.1kg鳥取398円
7月9日1/61.166kg鳥取458円
(購入時は150円引き)
7月10日1/61.503kg鳥取458円
7月12日1/61.223kg鳥取458円
7月13日ホール5.4kg千葉1,570円
7月24日1/61.450kg山形336円
7月27日1/61.172kg山形398円
7月31日1/61.315kg山形398円
8月2日ホール5.85kg山形1,580円
8月12日ホール5.20kg山形1,980円
8月23日ホール1.299kg長野397円
合計34kg **10,562円
  * 購入店舗は一つではない
  ** 測定していない1/6は1.2kgと推定

今年もごちそうさまでした。

2013年7月14日日曜日

Haltとcast

物理学者(見習い)は、数学とコンピュータにお世話になっております。

最近行ったドイツとグーテンベルク博物館で「この言葉はっ!!」と思ったものがいくつかあったので、紹介します。 (さらっと並列に書きましたが、グーテンベルク博物館はドイツに含まれるという関係です)

HALT

マイクロプロセッサの命令で「MPU停止!」の命令です。 ( HALT - 通信用語の基礎知識) Z80だと機械語は76hでしたね。

ドイツの街ではバス停が「Halt」なのです。バス停のマークが「H」で、何でなのかなと思っていたら、Haltの頭文字でした。
Z80の方のHaltは昔から知っていたので、すごく合点がいきしました。
nullだけでなく、haltもドイツから入ってきた言葉だったのですね。ふむふむ。

cast

プログラミング言語において、型変換することです。 ( キャストとは: - IT用語辞典バイナリ) type conversionとも言います。schemeのstring->numberみたいなのはcastと言うのでしょうか。

活版印刷用語でのcastは、matrixと呼ばれる活字の型(鋳型)に、鉛などの金属を融かして注ぎ、活字(type、AとかBとか)を作る工程です。活字(type)を並べてインクを活字につけて、紙を載せて押し付けると紙に文字が印刷されます。

Matrixとtypeは、もちろん凹凸、左右が逆だけれど、同じ意味をもっています。プログラミングでの「型変換」と雰囲気が似てると感じます。

(おまけ)Still

"Extra Still"と書いてある水を買ったら、炭酸でした。
Still waterは、ぶくぶくしていない(炭酸の入っていない)水をさすのに、ぶくぶくだったのです。
よく読むと"wasser mit sehr wenig kohlensäure"(water with very weak carbonic acid、とても弱い炭酸入りの水 の意味)と書いてあります。
私には全然弱く感じません。ばっちり炭酸水です。うーん。

結局、ペットボトルを振って二酸化炭素を追い出しました。でも硬い水でした。味がします。
水よりビールがおいしい国でした。

LibreOfficeでの文字化け(character encodingの指定法)

背景

Microsoft Office からexportした、テキストファイルがある。
(FreeBSD 9.1上の)emacsで書き進めようと思って、テキストファイルにexportしたのだけれど、やっぱりLibreOfficeで作業をしようと、気が変わった。

起きた問題

$ libreoffice hoge.txt
で開いたら、文字化けしている。
character encodingの問題だと思うのだけど、設定するところが見当たらない。
$ emacs hoge.txt
は問題なく、「適当に」encodeを解釈して、きちんと日本語で表示されるのに。
お、左下を見るとS(DOS)と表示されている。
encodingがShift-JIS (S)で、改行コードがCR+LF(DOS)なのね。
Sの代わりにU(UTF-8)、E(EUC)はよく見かける。
(DOS)の代わりに:だと、改行コードはLF。

解決法

$ LANG=ja_JP.SJIS libreoffice hoge.txt
でLibreOfficeを起動する。ふだんは、LANG=Cで暮らしているのでそのままでは開けなかったらしい。
LANGとして選べるものは、FreeBSDでは、/usr/share/nls/の下にあるディレクトリの名前になっているもの。
日本語だと、ja_JP.SJIS ja_JP.UTF-8 ja_JP.eucがあった。
これで、LibreOfficeで文字化けせずに開ける。

改行コード

で、LibreOfficeで編集して、テキスト形式で保存したのだけど、追記した部分の改行コードがLFになっていた。もとからある部分はCR+LFのまま。
部分ごとに改行コードが違うのはよろしくないので、sedで直す。
$ gsed s/'\r'//g hoge.txt >tmp
$ gsed 's/$/\r/' tmp > hoge_new.txt
BSD sedではうまくいかなかったのでgsedを使う。Linuxユーザはもちろん普通のsedでOK。
この形式ならMicrosoft Officeでも問題なく開けるはず。

以上

2013年7月6日土曜日

CentOS 6.3 on VirtualBox 4.2.12で Gnomeを起動するまで

Virtual Box上にCentOSを入れるのが、結構大変だったので、
はまりポイントを中心に記録しておく。

1. HostOS上にVirtualBoxをinstallする。

親マシン(ホスト)はFreeBSD 9.1。portupgrade -Nで
emulators/virtualbox-ose
emulators/virtualbox-ose-kmod
をインストールする。ただのvirtualbox-oseが先。
何か、gusetをinstallしようとして怒られて、virtualbox-ose-kmodを入れたのだけど、何があったかの記録が見つからない。

!! emulators/virtualbox-ose-kmodはkernel moduleなので、/usr/src/などを参照する。
したがって、「/usr/src/はkernelを作るときにしかマウントしない」とか運用していると/usr/src/が見つからなくて、installに失敗する。

!! portupgradeは*.koを作るところまでやってくれる。
まずは、kldloadで手動でkernel panicしないか試してみるよろし。
もし、panicしてもrebootしたら元に戻る。

!! 自動でkernel moduleを読み込みたいなら、/etc/rc.conf.localにkld_list="vboxdrv"のように追加する。
FreeBSD 9.1から/boot/loader.confに書かなくてもよくなったので、事故があっても、single user modeであがって助かれる(はず)。
(参考:Toshio Uchiyama's Diary(http://www.uchi-yama.info/wp/?p=57) http://lists.freebsd.org/pipermail/freebsd-hackers/2012-February/037780.html(FreeBSDのメーリングリスト)

2. Virtual Machineを用意する。

「New」のアイコンをクリックして、GUIで作る。

Type/VersionをLinux/other Linuxとすると、64bitを選べないように見えるが、実際は、64bit仮想マシンになる。
(64bitのinstalldiscでインストールできたのだから)
ここで選ぶ内容はアイコンにしか関係ないのか?

Memoryをデフォルトの256MByteにしたら、installするときに「メモリが小さすぎ」と怒られた。512MByteにしたら大丈夫。Memory sizeはいつでも大きくできる。
普通は、Hostの半分位にするものらしい。

Execution CapはGuestがどんだけ物理マシンのCPUを食ってよいか。
ホストが2core 2thereadなので、1CPU(core)を100%食ってよいことにした。
この数字もあとから変えられる。

HDDの大きさは20GBにした。GnomeとX用のフォントが入った段階で、
半分強埋まっている。HDDの拡大は少し面倒らしいので( くしゃみ日記(http://kei-pon.cocolog-nifty.com/blog/2013/04/virtualbox-hdd-.html))、
もう少し大きめにしたほうがよかったかもしれない。
dynamically allocatedなら、物理HDDを占領するわけでもないし。
あるいは、物理マシンでの大きなHDDへの引越しと同じことはできるはずので、
そんなに心配はいらないかもしれない。
(FreeBSDなら、新しいHDDのpartitionを手で切って、dumpとrestoreでごにょごにょとやるんだけど、linuxはどうやるんだろう??)

3. CentOSをinstall discからインストール

CentOS本家(http://www.centos.org) からリンクをたどって、CentOS-6.4-x86_64-bin-DVD1.isoとCentOS-6.4-x86_64-bin-DVD2.isoをダウンロードする。
Virtual Boxの設定画面で、CentOS-6.4-x86_64-bin-DVD1.isoをCDに入れて、電源Onする。

discのcheckは省略してよい。

時計は、親(ホスト)のSystem ClockがUTCなので、Use system clock UTCを選んだ。

CentOSで自宅サーバー構築(http://centossrv.com/centos6.shtml) を参考にしようとしたのだけど、VMだからか「赤と青と灰色の昔ながらのUnixのインストール画面」になる。
参考ページのように、色々聞かれたりしない。
discからインストールできるのは、kernelまで。gnomeを含むpackageはこの段階ではインストールできない。
Congratulations, your CentOS installation is complete.となったら、Rebootする。

Rebootすると、ログイン画面が出る。install時に決めたパスワードで、rootログインできたら、うまく行っている。

4. CentOS最低限の環境整備

まず初めに、一般ユーザーを追加した。
uidを親(ホスト)と合わせておくと、将来的に苦労しなさそうな気がする。
(親の環境でのuidは
$ id
とすれば表示される。)
# adduser -u 8888 username (8888は自分のユーザーidにする。)
# passwd username

他、最低限のpackageを入れる。
うちのCentOSは、目的があって、完全ローカルで運用する。
なので、yumもinstall disc頼り。
think-tの晴耕雨読 RSSフィード(http://d.hatena.ne.jp/think-t/20101207/1291733637 )が参考になった。
CentOS-6.4-x86_64-bin-DVD1.isoをCDに入れてmountする。
# mkdir /media/CentOS
# mount /dev/cdrom /mdeia/CentOS

# yum --disablerepo=\* --enablerepo=c6-media search emacs
で正しく動くか確かめよう。

うまく動いたら、次のコマンドで色々インストールする。
# yum --disablerepo=\* --enablerepo=c6-media install <package name>
次のものを入れた。
emacs(依存関係でいろいろなものが入る。)
man
rsync(このあと使うのだ)
sudo (rootでの作業気持ち悪い)

5. Gnomeのインストールまで

install discは2枚になっていて、2枚目の中身は、そのままでは使えない。
1枚目と2枚目の中身を同じディレクトリにおいておく必要がある。

CentOS-6.4-x86_64-bin-DVD1.isoをCDに入れた状態で、
# umount /media/CentOS
# mount /dev/cdrom /mnt/
# rsync -av /mnt/ /media/CentOS/
# umount /mnt/

CentOS-6.4-x86_64-bin-DVD2.isoに入れ替えて
# mount /dev/cdrom /mnt/
# rsync -av /mnt/ /media/CentOS/

さあ、gnomeをインストールしよう。
# yum --disablerepo=\* --enablerepo=c6-media groupinstall "X windows system"
# yum --disablerepo=\* --enablerepo=c6-media groupinstall "Desktop"

!!古い参考文献には、"Gnome Desktop Envrionment"と書いてあるけれど、今は"Desktop"です。要注意。
東の森(http://morrey22.hatenablog.com/entry/2013/04/14/212837) さんに感謝を。

!! ここでおもむろに
# startx
すると、文字が豆腐になるので、ちょっと待て。豆腐のgnomeからlogoutするの大変。

X用のフォントを追加したら出来上がり。
# yum --disablerepo=\* --enablerepo=c6-media install xorg-x11-font*

# startx
するとgnomeが立つ。「rootでXやめろよ」と警告が出るけど気にしない。
一般ユーザでも
$ startx
でgnome が立つ。ふう。
!! なお、この段階でも
# X -configure
はerrorしてしまう。これは気にしないことにした。

runlevelは上げると、起動時にXが起動するのは知っているのだけれど、テストマシンで不安定な見込みなので、しばらくは黒画面でブートさせる予定。

ふう、一仕事。

!! 私は、OS、Gnomeは英語環境で運用しているし、今回のCentOSも英語版のものしか入れていない。(エラーとかが文字化けで読めなかったりするのが嫌だから)
なので、日本語環境を整えたい人は、追加の情報が必要だと思う。
もちろん、普段の環境では、font、emacs、tex、firefoxなどは日本語対応にして生活しているけど、逆にそれ以外のアプリケーションが日本語である必要はあんまり感じないので。

参考にさせていただいたみなさま、どうもありがとうございます。

2013年5月12日日曜日

熱気球と食パン(熱気球にかかる力)

この前の ひつじのショーン[1]では、ショーンたちは、おっちゃんの彼女がデートに用意した熱気球を乗っ取って遊んでいた (「ショーンのそらのたび」)。
ところが、ペリカンみたいな鳥が、突っついて気球上部に穴を開けてしまって気球内の空気が吹き出し始めたので、食パンで穴をふさいだ。

ショーンは上(外側)からジャム付き食パンで穴をふさいだのだが、問題は、気球から外に空気が吹き出ているのに、食パンが飛んでいかないかということだ。


計算してみた。


気球は
パイロットハンドブック 第 1 章 熱気球の飛行原理 - 日本気球連盟[2] の1-5ページでの仮定
  • 体積 2000m3
  • 機体重量(人、燃料を含む) 450 kg重
を典型的な値だと考える。
 
食パンは、 五訂方式 カラーチャート食品成分表[3] より、1枚60gと考える。大きさは14cm四方とする。

さらに、計算を簡単にするため、気球を高さ20m、上下面10m四方の直方体とする。

この気球が浮いている時には、重力と浮力が釣り合っている。
気球下部にはバーナーがあり、気球内外の空気の圧力は等しい。
したがって、(巨視的な力である)浮力は(微視的には)気球上面での
気球内外の圧力差によっている。

気球上面での気球内外の圧力差は
 (浮力)/(上面の面積)= 450 kg重/ (10 m × 10 m) = 4.5 kg重/m2
したがって、食パンに気球からかかる力は
 (気球内外の圧力差)=4.5 kg重/m2 × (14 cm)2 = 90 g重
となって、食パンの重力60g 重より大きい。

したがって、食パンを気球の上に置く形では、食パンは飛んで行ってしまうため、気球の穴を防ぐことはできない。
(逆に内側からなら、気圧差で貼り付けられる。)

以上


参考文献
[1] http://www.aardman-jp.com/shaun/
ひつじのショーン|公式サイト

[2] http://www.jballoon.jp/safety/handbook/indivisual/3-1-1-hikougenri.pdf‎
パイロットハンドブック 第 1 章 熱気球の飛行原理 - 日本気球連盟

[3] 石井克枝 著『五訂方式 カラーチャート食品成分表』(教育図書、2000年)

2013年5月6日月曜日

cygwin on wine

cygwinのテストをしたくて、FreeBSD(FreeBSD 9.1-STABLE #1 r247264)マシン上のwine(wine-1.3.23)にcygwinを入れてみました。

最新版で挑戦

http://www.cygwin.com/からsetup.exeをダウンロードして、
$ wine ~/download-dir/setup.exe
とすると、setup.exeが立ち上がるので、普通にインストールできる(ちょっと感動した)。
現在のバージョンは 1.7.18-1。インストール先の指定などはC:\cygwin\とwindowsと同様。
最後にDesktop Iconを作ったら、gnomeのデスクトップに赤ワインのアイコンができた。

が、ダブルクリックしても、途中で落ちてしまう。gnome terminalから
$ WINEPREFIX="$HOME/.wine" wine C:\\windows\\command\\start.exe /Unix $HOME/.wine/dosdevices/c:/users/Public/Desktop/Cygwin.lnk
としても同じ。winedbgでもダメ。


手持ちのCDで再挑戦

家の本棚を発掘して、海上忍『今すぐ使えるCygwin』(技術評論社、2004年) のCD-ROMで再挑戦した。バージョンは1.5.9-1。こちらは、コマンドラインからwinedbgで
$ WINEPREFIX="$HOME/.wine" winedbg C:\\windows\\command\\start.exe /Unix $HOME/.wine/dosdevices/c:/users/Public/Desktop/Cygwin.lnk
で例外を無視しながら(cをタイプ)進むと起動する。
しかし、gccは動かない。cygwinのheapのためのspaceを確保できないそうな。

ここで一時休戦とする。

2013年3月24日日曜日

フランスの計量カップ

アメリカの料理の本では、計量カップは日本とは違っていて、1cup=8ounce=236.8mlでレシピが記載されています。
したがって、アメリカの計量カップを持っていない場合は、材料の量を計算しておく必要があります。
(1Tbs.(table spoon)=14.8ml=ほぼ大さじ1、1Tsp.(tea spoon)=4.9ml=ほぼ小さじ1なので、計量スプーンは計算不要です。)

アメリカの単位といえば、質量のpound(lb)、液体のounce(oz)ですが、手元の料理の本では、ほどんど出て来ません。例えば、
1/2 cup all-purpose flour
Dash of salt
2 large eggs
1/2 cup milk
4 Tbs. butter
(THE BEST OF FINE COOKING, The Taunton Press, Inc.より)
などと表記されています。peeled hazelnutsもcup単位、butterもTbs.単位。
基本的に計量カップ、計量スプーンで量れるように書いてあります。

そういえば、フランスで買った料理の本はどうだったかなと確認したところ、
240g de farine
2 pincées de sel
2 Cuillère à soupe de vergeoise
4 oeufs
40 g de beurre
40 cl de lait
(José Maréchal, Petits plats et desserts aux spéculoosより)
と表記されています。液体はcupではなく、cl(センチ リットル、1cl=0.01l)単位!さすがはメートル法の国。どのカップで量るかではなく、結局どれだけ入れるかなのでとても合理的だと思います。
ですが、少量の三温糖は大さじ単位です。少量を秤で量るのは困難ですし、計量スプーンは国による差が小さいからでしょうか。

一方、日本は、
卵 2個
砂糖 40g
牛乳 100ml
薄力粉 200g
ベーキングパウダー 小さじ1
(かんたんおやつ―初めてでも、だいじょうぶ, ベターホーム協会より)
と表記されています。フランスと大体同じですね。

また、アメリカは体積で、フランスでは質量で表記する傾向があります。小麦粉とバターの量は、アメリカでは計量カップ(スプーン)単位で、フランスではグラム単位で表記されています。

小麦粉などは、空気の含み具合で密度が変わるので、グラム単位の方が再現性がよいと思います。
一方、料理は化学実験ではないので、アメリカ流に体積でざっくり量るというポリシーもありえます。
(私は、質量に換算して、秤の上で測定しながら材料を加えていく派です。)

料理の本から、各国の国民性が見えてきて、おもしろいですね。

2013-05-05 追記 

おまけで、フランスの計量スプーン情報を追記します。
Cuillère à soupe はスープのスプーンの意味で15mlで日本の大さじと同じ、
Cuillère à café はコーヒーのスプーンの意味で5ml(Cuillère à soupeの1/3)で日本の小さじと同じです。
出典は両方ともWikipediaです。 (Cuillère à soupeCuillère à café

硬水の国だから、紅茶ではなくコーヒーなのかも。 フランスのコーヒーおいしいです。
上記フランスの本でも、この計量スプーンが出てきてました。

2013-07-06 追記 

 最近ドイツのお料理の本も手に入れました。
Greatest Ever: Deutsche Küche 2011 by Sabine Schniffner (Author)
ISBN: 9781445453569


前書きに、計量スプーンの換算が書いてありました。
Ein Esslöffel(EL、食べるスプーン)は15mlで日本の大さじと同じ、
Ein Teelöffel(TL、お茶のスプーン)は5mlで日本の小さじと同じです。
ドイツのお菓子は紅茶よりコーヒーのが合う気がするけれど、お茶のスプーンなのですね。

この本からもレシピを一つ紹介しておきます。
250g Mehl
1/2 TL Salz
4 Eier
300ml Milch
100ml Sprudelwasser
Butter, zum Ausbacken

みんなパンケーキ大好き。

2013年3月14日木曜日

tarte aux kumquats(金柑のタルト)

金柑のタルトを作ってみました。


作り方は以下のとおり。

材料(直径18cmのタルト型)
ダルトの皮
小麦粉 50g
バター 33g
砂糖  17g
卵   1/6個

カスタードクリーム
小麦粉 17g
砂糖  33g
卵黄  4/3個
牛乳  167cc
グランマルニエ 30cc

金柑の甘煮
金柑 種付きで200g (9個)
水  100cc
砂糖  50g

作り方
1. 金柑の甘煮を作る
1.1 砂糖と水をホーロー鍋に入れて弱火にかける。砂糖が溶けてぬるくなったら火を止める。
1.2 金柑を横に切る。種をとる。ほとんど種だけど大丈夫。
1.3 断面を上にして、1.2の金柑を並べて、ごく弱火で15分くらい煮る。ぐだぐだにしない。皮と身がはがれ始めたら火を止める。
1.4 冷ます。冷めたら冷蔵庫に入れる。寝る。

2. タルトの皮を作る(片手ボウル、白いゴムベラ)
2.1 バターを泡立て器でクリーム状に練る。固いときはホットカーペットの上に置く。
2.2 砂糖を加えて練る。
2.3 卵を加えて練る。
2.4 小麦粉を加えて、混ぜてひとまとまりにする。ラップで包んで1時間くらい冷蔵庫で休ませる。

3. カスタードクリームを作る(緑の鍋、木べら)
3.1 小麦粉、卵黄、砂糖を混ぜる。牛乳を少しずつ入れて混ぜる。
3.2 混ぜながら超弱火にかける。ダマにならないように混ぜながら火を通す。この配合はかなり固くなるので、しっかり火を通し練り上げる。
3.3 室温で冷ましたら、グランマルニエを加えて混ぜる。タルトの中身らしい固さになる。冷蔵庫で休ませる。

4. タルトの皮を焼く(木のまな板)
4.1 打ち粉をした木のまな板と麺棒で、2の生地をタルト型より大きく伸ばす。タルト型に敷く。底の外れるテフロン加工のタルト型なので型はそのまま使ったが問題なかった。薄いけど大丈夫。空気穴をあけるける。冷蔵庫で休ませる。
4.2 オーブンを170度に余熱。20分くらいかかる。
4.3 タルトを天板にのせて下段に入れて焼く。焼けたらオーブンから出して冷ます。
冷めたら型から取り出す。

5. 中身を詰める
5.1 4のタルトに3のクリームを詰める。1の金柑の甘煮を埋めるように乗せる。

参考資料
このレシピは、今田美奈子さん『お菓子の手作り辞典』(講談社、1978年)のオレンジのタルト(43ページ)を参考にしています。タルトの皮とカスタードクリームは今田美奈子さんのレシピそのものです(ただし、カスタードクリームがかなり固かったのでグランマルニエを加えました)。


タルト型は直径21cmが一般的ですが、18cmだとかわいいタルトになります。

金柑は上に断面が来るように並べるとかわいいけれど、切るときに回転します。

タルト生地もクリームもしかっり甘めの正統派のお菓子の味です。おいしいコーヒーによく合います。金柑とグランマルニエも仲良くしています。

2013年2月9日土曜日

scheme(R5RS)のapplyの仕様

schemeのapplyは手続きとリストの二つの引数をとるのだと思っていました。 (「計算機プログラムの構造と解釈」の107ページの注にもそう書いてあります。)

なので、
(map (lambda (x y) (+ x y)) '(1 2) '(3 4)) ==> (4 6)
というようなことをしたいときに、'((1 2) (3 4))を関数に渡すには、
(apply map (cons (lambda (x y) (+ x y)) '((1 2) (3 4))))
と形式上リストにして渡す必要があると思っていました。

しかし、
(apply map (lambda (x y) (+ x y)) '((1 2) (3 4)))
でも正しく動きます。

R5RS(http://www.schemers.org/Documents/Standards/R5RS/)を確認すると、 以下の様になっていました。

(apply proc arg1 . . . args)
proc は手続きでなければならず,args はリストでなければならない。proc を,リスト (append (list arg1 . . . ) args) の各要素を各実引数として呼び出す。
(apply + (list 3 4)) ==> 7
(define compose
  (lambda (f g)
    (lambda args
      (f (apply g args)))))
((compose sqrt *) 12 75) ==> 30
(Suzuki Hisao さんの日本語訳より引用 (http://www.unixuser.org/~euske/doc/r5rs-ja/))

argsは最後だけ特別扱いなのですね。 基本の関数としてはちょっと複雑ですけれど、 「手続きとリストの二つの引数をとる」と思ってても別に困らないのは、 さすがschemeです。