マニアックですみません。ほとんど自分のためのメモです。

  1. 元になる .bst ファイルを手元にコピーする。
  2. .bst ファイルのなかから DOI, ISBN, ISSN 用の関数の定義を探して、以下の要領で修正する。

Before:

FUNCTION {format.doi}
{ doi empty$
    { "" }
   { new.block "\doi{" doi * "}" * }
  if$
}

After:

FUNCTION {format.doi}
{ doi empty$
    { "" }
    { "" }
  if$
}

if 文は無駄なのではないか、気持ち悪くないのか、などという突っ込みはなし。人生は短く、ほかに悩むべき有益なことは多い。

今までは、投稿直前に .bbl ファイルをエディタで修正していました。そのヤバさから開放されて嬉しいです。


節電警報

一昨日、今学期最後の授業に向って構内を歩いているときに、向うの方でドサッという音がするので目をやるとなんと鳥でした。鳥も熱中症になるんでしょうか?みなさん、猛暑への対策は大丈夫でしょうか。

ところで、この季節は東工大名物の節電警報なるものが始終放送されます。全学の電気消費量を減らすための工夫です。暑い真夏の午後、建物ごとにこんな放送があります。

お知らせいたします。節電警報が発令されました。これより30分間、実験上、支障がない部屋の節電をお願いいたします。

この放送があるとエアコンの電源を切って節電に協力するわけです。

ところで、東工大の同僚のみなさんは、節電警報が切れた時間にエアコンのスイッチを入れ忘れて、いよいよ暑さに耐えられなくなってエアコンのスイッチを入れたとたんに次の節電警報が放送されたという経験があると思います。わたしも何度も経験しました。そんなあなたに以下のスクリプトをお送りいたします。

#!/bin/bash

length=1800
btime=`date +%s`
etime=`expr $btime + $length`
fmt="+%H:%M"

echo "`date -r $btime $fmt` に節電警報が発令されました。`date -r $etime $fmt` まで我慢です."

if [ -x /usr/bin/say ]; then
    say "Thank you for respecting the electricity saving campaign starting from `date -r $btime  $fmt` upto `date -r $etime $fmt`."
fi

sleep $length

echo "お元気ですか?`date -r $btime $fmt` に発令された節電警報分が解除される時間になりました."

if [ -x /usr/bin/say ]; then
    say "Thank you for participating the electricity saving campaign.  Feel free to turn on the air conditioner."
fi

節電警報が放送されてから30分後にその警報期間が過ぎたことを知らせてくれます。Mac の場合は音声でそのことを通知してくれます。


個人用ブログにコメントスパムに攻撃され始めて困っているという話をしました。WP SpamFree という JavaScript を使ったコメントスパムフィルタの効果に翳りが見えてきたのです。このフィルタは

コメントページに JavaScript を埋め込み、それを正しく解釈していないコメントはスパムを見做すという仕組みのようです。つまり、スパマーも JavaScript を正しく解釈できないと投稿できないようになっています。これに加えて、Cookie を併用できます。

WP SpamFree のような技術的なハードルを高めることでスパムを避ける方策が使えなくなってしまったので、次に登場するのは経済的な対策ではないでしょうか。

続きを読む »

解体JAKLD初日

JAKLDは京大の湯浅先生が携帯電話のJVMで動作させることを狙ってお作りになったSchemeもどきのLispです。先日、開催されたばかりの情報処理学会プログラミング研究会でほぼ二年ぶりにお会いしたときに、JAKLDの名前の由来をお訊ねしたのですが、そのご返事に唖然としてしまいました。ちょっと考えてみて下さい。

続きを読む »

東工大教育賞

本日、東工大教育賞優秀賞をいただきました。

本学の一年次情報教育を支える二つの科目、コンピュータリテラシとコンピュータサイエンス入門のうち、前者についての活動が評価されたことになります。継続的に情報科目を支援して下さった方々、コンピュータリテラシの授業を担当して下さった方々、推挙して下さった方々に感謝します。

続きを読む »

先日、プログラミング言語というにはあまりにお粗末な IMP という言語を紹介して、それを Objective Caml で書いてみました。今日は、同じ言語を JavaScript で書き直しましたという話題です。すでに慣れている Objective Caml の場合には 4 時間で書けたのですけれども、JavaScript の場合には構文解析器生成系のツール探しやら、Windows 用に実装されたツールの Mac OS X への移植、そのツールの改造をしていたので三日もかかってしまいました。また、(不慣れにもかかわらず)JavaScript の特徴を生かしたインタプリタを書こうと思って、Objective Caml版とは少し違う構造に変更したので、その部分でも時間がかかりました。ようやく動いたので紹介します。今回は型宣言が不要ということで200行にまで短縮しました。
続きを読む »

JS/CC for V8/Unix

少し苦労したけれども Mac OS X の上で Google V8 を使って、構文解析器生成系の JS/CC を動かすことに成功した気がします。以下は自分のためのメモも兼ねた簡単な説明です。
続きを読む »

JS/CC のサンプル

JS/CC のサンプルファイルが少しみにくかったので、ちょっと整形してみました。まずは文法定義ファイル(calc.grammar)です。LALR パーザを使った方ならば、だいたい理解できると思います。サンプルの文法定義ファイルにやたらに使われていたTABを除去し、構文解析木のドライバルーチンを除去しました。

続きを読む »

JS/CC: 構文解析器生成系

JS/CC は JavaScript 用のコンパイラ生成器で、字句解析器生成系と構文解析器生成系が一緒になっているようです。JavaScript の実装としては、ウェブブラウザに組込まれたもののほか、Microsoft JScript, Mozilla Rhino, Mozilla SpiderMonkey, Google V8 など主要なものに対応しているようです。

続きを読む »

ちょっと研究上の都合から、小さな小さなインタプリタを書く必要性が生じました。作ったプログラミング言語の拡張 BNF はこんな感じ。

program ::= (command ;) *
command ::=
    | <変数> = e
    | <変数> := e
    | if e then { (command ;) * } [ else { (command ;) * } ]
    | while e { (command ;) * }
    | print e
    | dump
e ::= <整数> | <変数> | unary e | e binary e
unary ::= -
binary ::= + | - | * | / | % | = | == | <> | < | > | <= | >=

全部でぴったり 300 行です。バイト数が 8,837 というのはつまらなかった。コメントでも書いて 8,888 バイトにすればよかった。Objective Caml を使いました。ビルドには OMake を使っています。

よかったらzip を公開してますので拾って行って下さい。ダウンロードされた方はコメントしてね。LALR 文法の shift/reduce 衝突が 13 個も出るので文法記述のお手本にはなりませんね。S 先生@東工大かN 先生@筑波大にお願いして直してもらおうか。。。


« 古い投稿