今日読んでいるコードに、知らなかったプリプロセッサ命令が出てきたのでメモ。
#include <stdio.h>
#define tcat(x,y,z) x ## y ## z
#define cat(x) # x
#define abc "Hello"
int main(void)
{
printf("%s\n", tcat(a, b, c));
printf("%s\n", cat(a b c));
return 0;
}
実行すると、
chome@sid:~/src/test$ ./a.out
Hello
a b c
となる。
今日は七夕である。カルピスの調査によると、七夕について誤解している人が多いという。せっかくなので復習してみよう。国立天文台のFAQ 質問3-9) 七夕について教えて?によると、
天空でいちばんえらい神様「天帝(てんてい)」には、「織女(しょくじょ)」という娘がいました。織女は神様たちの着物の布を織る仕事をしており、天の川のほとりで毎日熱心に機(はた)を織っていました。遊びもせず、恋人もいない織女をかわいそうに思った天帝は、天の川の対岸で牛を飼っているまじめな青年「牽牛(けんぎゅう)」を織女に引き合わせ、やがて二人は結婚しました。
結婚してからというもの、二人は毎日遊んで暮らしていました。織女が機を織らなくなったので、神様たちの着物はすりきれてぼろぼろになり、牽牛が牛の世話をしなくなったので、牛はやせ細り、病気になってしまいました。
これに怒った天帝は、二人を天の川の両岸に引き離してしまいました。しかし、二人は悲しみのあまり毎日泣き暮らし、仕事になりません。かわいそうに思った天帝は、二人が毎日まじめに働くなら、年に1度、7月7日の夜に会わせてやると約束しました。
とのこと。そういえば小さい頃、この話を聞くとロマンチックな話だなぁと思っていた。続けて曰く、
七夕伝説によると、年に1度、7月7日の夜に会うことができる織り姫と彦星ですが、星が実際に移動することはありません。2つの星の間は、14.4光年ほど離れていて、これは、光のスピードでも約14年半かかってしまう距離です。つまり、2人が光のスピードで移動したとしても、1年に1回会うことは、とても無理なのです。
さすが国立天文台。ロマンチックだけじゃ終わらねぇ。
ぶっちゃけ「新婚の夫婦がいちゃつきすぎて仕事がおろそかになり、姑に別居させられた」ってことだな。
さて、都合の悪いことはしらんぷりで、私も星に願いを。 願わくば仕事をおろそかにするほど、私の心を奪う女性と出会わせ給え。
Debianパッケージの作成プロセスを自動化するコマンドであるdpkg-buildpackageのメモ。dpkg-buildpackageは以下の手順でパッケージを作成する。
- 環境変数の準備。dpkg-architectureでBuild archやHost arch等を設定し、またCCFLAGS、CXXFLAGS、LDFLAGS等を設定
- build-dependencyとbuild-conflictsのチェック。(-d でスキップ)
- debian/rule clean (-nc でスキップ)
- dpkg-source (-b, -B, -A のいずれかが設定されているとスキップ)
- -b, -B, -Aオプションによって以下のいずれかに分岐
- debian/rules build (デフォルトまたは-b)
- debian/rules binary-arch (-B)
- debian/rules binary-indep (-A)
- dscファイルを署名 (-us でスキップ)
- dpkg-genchanges でchangesファイルを生成
- changesファイルを署名 (-uc でスキップ)
- もしも-tcが指定されていたら、debian/rules clean
-j で、並列に動かすCPUの数を指定することができる。はしょったところもあるので、dpkg-buildpackage(1)を確認のこと。
SingletonパターンをC++でまじめに書いてみた。Singletonは生成は簡単なんだけれど、後始末が難しい。GoF本とかには、後始末のことはあまり詳しく書かれていなかったような気がする。あとModern C++ Designにこのことは詳しくかかれている。
今回は最初に思いついたリンクカウントを採用してみた。Singletonを参照しているオブジェクトの数を数えておいて、0になったらdeleteする。
#ifndef _SINGLETON_H
#define _SINGLETON_H
namespace impl{
template <class T>
class Singleton{
public:
static Singleton* initInstance()
{
if(linkcount == 0){
instance = new Singleton();
linkcount = 1;
}else{
linkcount+=1;
}
return instance;
}
void destroy()
{
if(0 == (linkcount-=1)){
delete instance;
}
}
T* object(){
return &obj;
}
private:
Singleton(){
}
public:
virtual ~Singleton(){
}
private:
static Singleton *instance;
static int linkcount;
T obj;
};
template <class T> Singleton<T> *Singleton<T>::instance;
template <class T> int Singleton<T>::linkcount = 0;
}
template <class T>
class Singleton{
public:
Singleton(){
s = impl::Singleton<T>::initInstance();
}
T* operator->(){
return s->object();
}
~Singleton(){
s->destroy();
}
private:
Singleton(const Singleton&){}
private:
impl::Singleton<T> *s;
};
#endif // _SINGLETON_H
で、一つしかインスタンスを作りたくないクラスを定義してあげて、::Singletonのテンプレート引数に入れてあげればよい。例えばこんな感じ。
#include "singleton.h"
using namespace std;
class Hello
{
public:
Hello()
{
i = 0;
}
void run()
{
i += 1;
cout<< "Hello World "<< i<< endl;
}
~Hello()
{
cout<< "destroy"<< endl;
}
int i;
};
int main(void)
{
Singleton<Hello> i1;
Singleton<Hello> i2;
Singleton<Hello> i3;
i1->run();
i2->run();
i3->run();
return 0;
}
このテストコードを実行すると、次のようになる。
Hello World 1 Hello World 2 Hello World 3 destroy
同じテンプレート引数の::Singletonインスタンスを複数生成しているが、それらは同じインスタンス変数にアクセスしており、デストラクタは1度しか呼ばれていない。ちゃんと動いているようだ。ただこのコードでは、Helloの初期化をデフォルトコンストラクタでしかできない。これではちょっとカッコ悪い。もう少し考えなければ。
茨城空港が開港したらしい。実態は百里基地だ。4 letter codeはRJAHで、3 letter codeは未定。空港の開港を記念して、NOTAMを貼っておく。
茨城空港が百里基地の敷地内にできると聞いて、滑走路は既設のものを使用して、ターミナルビルと道路を作るのだと思っていたら、平行滑走路を作ると聞いて愕然とした覚えがある。ここに貼ったNOTAMの2番目(C0118/10)がそれに該当する。すなわち2700x30mの 03/21RLの2本の滑走路を2010年33月10日15:00から運用開始とある。
今日は、午後からジャンクションツアー川沿い編と夜はロケットまつり37に参加した。ジャンクションツアーは寒かった。すげーさむかった。でもやっぱり首都高速は、非常に面白い構造物が多く見ていて楽しかった。
つくづく思ったのは、やはり首都高速は無理矢理作られた高速道路だということ。なぜなら左の写真のように非対称な構造物が多すぎる。一番手前の脚が異常に右に寄って配置されている。これはまず下の道が既にあり、その道に支障が出ないように脚を配置せざる得ないためこのような配置になっているのだろう。さらに上下線を立体に配置している部分が多い。右の写真はジャンクションの東の横綱たる、箱崎ジャンクション。見にくいかもしれないが、なんと3階層に分かれている。普通、高速道路の上下線は同じ水平面上に(左右に)配置されるが、首都高速では上下に配置される。よって例えば2階層に分かれている道が2つに分岐する場合、それぞれの道が分岐するだけでなく、鉛直方向の移動も必要になる。そのため複雑な構造物が多く、私たちの目を楽しませてくれる。
私がジャンクションに興味を持ったのは、やはり鳥栖ジャンクションだ。長崎・大分自動車道が開通したとき、九州自動車道と分岐する鳥栖ジャンクションは、二つの高速道路が直交する。それらを繋ぐ支線が回転対称に配置され、すごく美しいジャンクションだ。と小学生当時思っていたが、google mapで見てみると対称ではなくてがっかりした。東京に出てきてからはKEKに行くためのバスで気付いた、三郷ジャンクションだ。ここは上から見ても美しい。乗っていると全然構造がつかめない。
また白髭団地も面白かった。白髭団地は、なんと1kmにわたってつながった団地だ。今回のツアーの主催者である大山氏によると、このあたりは区画整理に失敗し、大地震が起こると火の海になることがすでにわかっているらしい。 そこで、震災時には住民を河川敷に避難させ、河川敷を火の手から守る防火壁としてその団地を使うとのことだ。そのために所々に放水銃が、市街地側にはシャッターが設置され、団地への延焼を防ぐようになっている。 東京の大部分は低層密集地域であるので、同時多発的に火災が起こった場合かなり広範囲に延焼することが私のような素人でも、なんとなく想像がつく。この辺は東京大空襲や関東大震災の経験から来ているのだろう。
夜は新宿でロケットまつり37に参加。宇宙研のM型ロケットの話のはずだったが、色々な話に波及した。まぁあまりネットにあげてほしくないということだったので書かないが、思ったのは、加速器もロケットも同じだなということ。そして林先生の
組織は現場の集合からできている。現場に情報がおりてこないプロジェクトは失敗する。
という言葉にはぐっときた。現場に身を置く者として本当にそう思う。
今日は寒かったけど充実した1日だった。もう少し暖かくなったら、今日行った場所をもう一度行ってみようと思っている。久しぶりの記事、久しぶりの写真。ってか現像してないフィルムがたまっている。今日も1本増えた。これも早く現像しなければ。
空港(飛行場)の気象情報を通報するために使われるフォーマットは、国際的にきまっており、それをMETARと読んでいる。TAFというのは、気象予報のフォーマットである。たとえば最新の羽田空港のMETARは以下の通りである
まぁなんのこっちゃわからん文字列が並んでいるが、これらが現在の羽田空港の風向きや気温、湿度、雲量、視程などをあらわしている。これを携帯電話から見ることができるようにするCGIをshell scriptで書いた。URLは以下の通り。
4 letter codeを入力してSubmitボタンを押すと、METARまたはTAFのデータが表示される。METARの読み方は、こちら。
ひこーき好きか気象関係者でなければ、なんのこっちゃわからん内容である。そう、絶賛現実逃避中である。
そんな必要がどこにあるのかといわれそうだが、今日届いたUPSが、運用中の古いTera Stationに対応していなかったのだ。なので停電のときくらいしかシャットダウンしないFreeBSDのホストに、Tera Stationを落とすrcスクリプトを書いた。
やったことは、Tera StationのWeb設定画面のHTMLを読んで、シャットダウンボタンを押した時のブラウザの要求をwgetで再現しているだけ。SERVERとADMIN_PASSWORDを変更すれば、普通に使えるだろう。試験したわけではないがLinuxでも動くはずだ。
#!/bin/sh
#
# rc script to shutdown Tera Station by knakao
#
#REQUIRE LOGIN
SERVER=fileserver #ファイルサーバーのホスト名
ADMIN_PASSWD=password #adminのパスワード
URL="http://$SERVER/cgi-bin/ts.cgi"
POST="page=maintenance&mode=shutdown&type=setup"
USER=admin
WGET=/usr/local/bin/wget
ts_down()
{
OPT="--http-user=$USER --http-password=$ADMIN_PASSWD --post-data=$POST"
OPT="$OPT -o /dev/null -q -T 5"
URL="$URL?$POST"
$WGET $OPT $URL
}
case $1 in
start)
;;
stop)
ts_down;
;;
esac
2009-02-17 追記
私はLinuxユーザなのでついwgetを使ってしまうが、FreeBSDな方々はcurlを使うのかな。ということで後日curlバージョンを。って必要ないか。
今年も例年通りセンター試験の試験監督業務を行った。さすがに3年目になると余裕が出てくる。体力以外は。センター試験を実施する側から見た、センター試験の実態を書いてみようと思う。ちなみにブログ"発声練習"の記事は参考になる。受験生は必ず読むべきだ。
センター試験を引き受けた大学で、試験監督をやっている人は、ほとんどがその大学の教職員だ。大学から見た受験生は基本的にお客様だ。少なくとも敵ではない。基本的に受験生が通っている高校の近くの大学が会場に選ばれるため、センター試験を受験しにきた学生が、その大学の受験生になる可能性があるからだ。また、センター試験で大きなミスをすると新聞に載るので、大学広報を始め結構神経質になっている。だいたい新聞に載るような不祥事は、試験時間が短かったり長かったり、非常ベルが鳴るといった試験を妨害するような騒音が発生したといったものだ。
大学入試センターから、厚さ2cmほどのマニュアル兼台本が渡される。試験監督が試験中に発する言葉には、実は台本がある。この台本どおりに台詞を発しないとなにかと問題になる。試験時間は秒単位の精度が要求されている。試験開始前に試験監督は全員電話の時報サービスで時計合わせをやる。試験時間の誤差は高々10秒だ。短くなることはない。また足音やドアを開く音にも気を使っている。騒音と試験時間確保には相当気を使っている。
試験の流れを書いておこう。
- まず試験会場、試験室、席が正しいか確認する
席には受験番号が記された紙が貼ってあり、受験票に記載されている受験番号と一致するか確かめてもらう。これが終わるとその教科の試験終了まで部屋を出ることができない。 - 携帯電話のアラーム等を解除、電源OFFの後、かばんにしまってもらう
試験中に携帯電話が鳴った場合、試験監督は受験生の許可を得ずに、かばんを持ち出し、試験場本部に運ぶ。かばんは試験終了後、受験生に返却する。 - 写真用シールを配布する
その科目が初めての受験の場合、受験票の写真および自署欄の上に貼るシールを配布し、貼ってもらう。 - 問題冊子および解答用紙の配布
- 受験番号の記入とマーク
- 氏名、フリガナ、試験場コードの記入
- 受験科目のマークおよび確認
- 「解答始め」
- 試験終了10分前に「試験はあと10分で終了します」
- 「解答やめ。問題冊子を閉じて鉛筆をおいてください」
この後許可なく鉛筆や消しゴムを持っていると不正行為になる。 - 解答科目と受験番号を正しくマークしているか確認
この確認で間違いを発見した場合、訂正することができる - 再度、解答科目と受験番号を正しくマークしているか確認
この確認で間違いを発見した場合、訂正することができる。これ最後の確認になる。これ以降、受験生も試験監督者も解答用紙に筆をいれることはできない。 - 解答用紙の回収
試験終了後の確認はマークだけであることに注意してほしい。採点は、全自動で機械で行われるため、マークだけで十分なのだ。氏名と受験番号を書かせるのは何か問題が起こった時の保険でしかない。なのでマークを間違えないように特に注意してほしい。 また試験時間中、試験監督は受験者の出席を取っており、試験場本部に解答用紙を渡す時も一枚一枚出席票(A票)と解答用紙の番号を照合している。
試験監督をしながら、受験生諸君を見ていて感じたことも書いておこう。
- 現役生の諸君は、制服で受験する必要はない。
私たちは、諸君らの制服姿を見たいのではない。君たちの最高のパフォーマンスを見たいのだ。だから自分の力を出せる格好できてほしい。そして試験室の室温は細かく制御することはない。試験室の静寂の確保を求められているため、試験中は空調を止めることもある。重ね着や服を脱ぐことで、体温を自分でコントロールできるようにしておくこと。これ重要。 - 試験監督の目を気にする必要はない
服装や髪型が派手だったり奇抜だったりすると、監督者控え室で話のネタになるかもしれないが、まぁその程度だ。我々に与えられている受験者の情報は、氏名と写真と受験番号だけだ。点数や入試の結果に影響はない。もしも影響させようものなら、公平性の観点から大変な問題になる。 - きれいにマークする必要はない
センター試験の出願者は50万人を超える。実際の受験者は出願者よりも1割ほど減るがそれでも40万人は受験する。1人当たり平均3科目受験するとすると処理する解答用紙は100万枚を超える。これだけの数を短期間で採点するにはもちろん機械を使う。すなわちあなたの解答用紙を人が見ることはまずない。機械がちゃんと判別できる程度に塗れば良い。 - メモ用のシャープペンシルは使うな
試験中机の上におけるモノとして、「メモ用のシャープペンシル」があるが、シャープペンシルでマークシートを塗ることもできる。だがマークシート読み取り機のメーカーがFかHかHBの鉛筆を推奨しているために、鉛筆を使えと指示している。すなわちシャープペンシルでは読み取れない可能性があるために、あえてメモ用と断ってあるのだ。読み取れない可能性があることを承知で使うのであれば黙認することになっている。私は鉛筆を使うべきだと思う。おすすめは三菱鉛筆のHi-Uniか、ステッドラーのルモグラフだろう。ステッドラーならマルス エルゴソフト良いかも。これらは鉛筆としては高い部類に入る(1本140円はする)が減りも少ないし、手にもしっくりくる。また格言も書いていない。試験中には鉛筆削りが使えるので、2〜3本買えば十分だろう。マークシートと筆記具については、DPZの記事に詳しい。
この記事を書いた目的は、受験生諸君の最高のパフォーマンスを出してもらうために、センター試験を実施しているほうも結構大変だということを知ってもらうためだ。もしもこの記事が、これからセンター試験を受験する人の役に立てば望外の喜びだ。
ってかタイトル書いて実感したけど、2000年期ってもう10年経ったんやねぇ。21世紀になると何かが変わると特に根拠もなく何となく思ってたけど、21世紀になって9年経っても、昨日と同じ今日を生きている俺に乙。
今年の正月三箇日は、元日に姉上夫妻が来て甥っ子相手をして写真を撮って、二日にgichoが開いた店にお邪魔して、朝まで飲んでいた。その前にYokko家にお邪魔してYokko/TQの第一子と対面。よく泣きよく眠るという。すばらしい。写真はFlickr経由で。> TQ, Yokko
その後gichoが開店した店で、Have, TQ, chiranoと呑む。基本的に味は良い。こまかい工夫は各々あってぐっとくること満載なのだが、特に燗をつけた梅酒はすばらしい。そのまま呑むとスキっとした梅酒なのだが、燗をつけたとたんフルーティな梅酒になる。もちろんこれだけではない。一皿一皿にこだわりや工夫の点が見える。 店自体のFundermentalsはありそうだ。実際リピート率も高いと聞く。あとは知名度がないのが問題か。
Web上にあるオープンコミュニティの力を感じるのはこういうときだ。ひとつの分野(この場合は飲食店)に特化したオープンコミュニティが存在し、一定数の読者がいるサイトがある。ここに私が他の人に勧めたい店があると、そこに記事を書くことでこのblogに書くよりも目に触れる機会があり、iPhoneやGoogle Phoneを使えばGPSとリンクして近くにある飲食店のリストが出てくる。これは紙媒体の雑誌やガイドブックにはできない芸当である。(紙媒体にはザッピングという用途があるのでなくなるとは思わない。まぁこれは別の記事に書くことにする。)ということで、好意的だろうが、批判的だろうが、ハラヨシに行った人はちゃんと自分のblogはもちろん、食べログ的なところにも記事を書くように。これがgichoにできる最低限の応援だろう。
ネットワークによって庶民が得た力というものは、今のところこういうところなのだろう。一部のアルファブロガを除いて、庶民は多数集まることで力を持つ。ネットワークやWebという媒体を通して集合するコストがゼロに近くなる(少なくとも集合する庶民にとってコストはゼロに近い)ことによって集合することによる障壁が小さくなり、また(みせかけの)匿名性という要素もあり自分の意見を表明することができる。
残念ながらこのblogでは一日あたり10PV程度がせいぜいだ。そのほとんどは技術的な記事へのアクセスだ。このblogによって私はサイバースペースへの発言権を得たがその力は小さい。だがその小さい力を集合することで大きな力にしようとしたサイトが存在することにより、私のこの小さな声は、時に大きな声になる可能性がある。この構図はblogだけでなくLinuxといったオープンソースコミュニティにも通じるものがある。
だが同時にサイバースペースにアクセスする者どもは、言うまでも泣く煽り文句満載の情報を峻別する能力が要求される。私が食べログに書くであろう記事は、中立であろうと努力はするが、所詮偏ったの記事である。それに騙されるかどうかは、読者次第である。まぁ騙されたと思って行って見ても良い店だと思うが。同じことは報道にも言える。自民政権だろうが民主政権だろうが国民は文句を言っているけれども、一方では報道も腐っていると言っている。果たして腐った報道から得た情報で、現政権はもちろん前政権も批判はできるのだろうか。
人は低きに流れる。
自戒をこめて。




