のこ屋根日記4

「起」はこの一字で「おこし」と読む。ちょっと珍しい。初めて目にしたときには読めなかった。
現在は合併して愛知県一宮市起だが、数年前までは尾西市起、尾西は「びさい」と読む。尾張の西という意味らしいが、三河の近くには、尾張の西の端ということで、西尾市がある。こちらの読みは「にしお」。
県外者にはまことにややこしい。

尾西市になる前は、愛知県中島郡字起町といった。
一宮 越の機屋(はたや)起の「のこぎり屋根」風景は大正時代から見られるが、戦後30年代にもたくさんの「のこぎり屋根」が建設された。
そのほとんどが「機屋(はたや)」と呼ばれる繊維産業の工場で、毛織物の一大産地だった。
この頃のことを「ガチャ万時代」と町の人は懐かしく回想する。機を一回ガッチャンとすれば一万円稼げる好景気だった。百回動かして百万。うなるように札束が飛び交った。

起の広さは谷中や千駄木より小さく、根津より大きい。
たったそれだけの地域に「のこぎり屋根」がなんと323棟。簡単に考えて、谷中にある寺のおよそ4倍の「のこぎり屋根」が町なかにあると想像してほしい。
右を見ても、左を見ても「のこぎり、のこぎり、のこぎり…」という感じ。つまり、町の人はすっかり見慣れ、見飽きて、その魅力に鈍感になっている。
「こんなの、そこらじゅうにあるで、なにがおもしろいもんか」
というわけだ。

のこ屋根日記3

美濃路起宿での、のこぎり写真展の会期中、私は会場の江戸末期築の商家、旧湊屋文右衛門邸(丹羽家住宅)に泊まりこむ。
宿泊費を浮かせるのが最大の理由だが、こんな家で過ごしてみたかった。もちろん、保存を目指して活動中なわけで、空き家になって以来、調査や見学会のたびに掃除はするが、宿泊したのは、昨年夏に夜通し調査と打ち合わせをした名工大の男子学生のみ。
例えて言えば、誰も住まなくなって久しい修復前の安田邸に寝泊まりしているような感じ。
もちろん、寝袋生活。
ここ湊屋文右衛門邸の主屋は裄行7間、梁行6間半の2階建て、切妻造り平入りの建物で、1階には玄関、店、奥店、中の間、居間、仏間、座敷、台所がある。
ほかに、土蔵が3つ、渡り廊下の向こうに離れがある。
正直に言うと、たった一人だとちょっとコワイ。
七輪を使ってのすき焼きパーティーの宴のあと、がらんとした家のなかで、さて、どこで寝ようと考えた。寝袋持って部屋をウロウロし、落ち着いたのが台所。
持ってきた仕事をしょうと思いながら、差し入れのビールを飲んだらダウン。結局、台所の床の上はきつくて、中の間にゴロゴロ移り寝入ったのでした。

余談だけど、なぜか夢に寅さんが出てきた。渥美清がトランク下げて写真展に訪れ、
「さくら、これはいい写真だ。耳をすませば、機織りのガッシャンガッシャンが聞こえてくるじゃあないかぁ」と、私の肩をたたくのでした。
そうそう、一宮は舟木一夫の出身地。映画「花咲く乙女たち」は機織り娘と、女工さんの昼ご飯を作る給食センターで働く青年(これが舟木一夫)の、前向きで正しい勤労青年の青春の物語。

のこ屋根日記2

5月3日、愛知県一宮市起。そう、美濃路起宿でのこぎり写真展初日。
13時の会場と同時に大勢見えた来場者の中には、江戸末期に建てられた旧湊屋文右衛門邸(丹羽家住宅)の中を見てみたいという人も多い。

展示には、名古屋工業大学是澤研究室の学生たちと、この建物の保存活用を目指す湊屋倶楽部の全面協力あり。
昨晩は、湊屋倶楽部の代表の大島八重子さん(仲間は敬愛を込め「妖怪」と呼ぶ)と学生で用意したすき焼きパーティーとなった。

のこ屋根日記1

月刊のこぎり屋根0号それは、鋸屋根に魅せられた写真家、
吉田敬子との出会いからはじまった

出会いのきっかけは台東区谷中3丁目、文京区との区境に建つ5連の鋸屋根だった。驚くなかれ、東京のど真ん中に、明治43年築の鋸屋根工場が現存する。いまは印刷会社、旭プロセス製版の事務所であるこの建物は、1954年(昭和29)の廃業まで「千代田リボン製織」という織物工場だった。
この鋸屋根工場がつくられたころ、工場の前には藍染川が流れていた。藍染の反物を洗ったという川沿いには、染物屋が散見した。そして明治のころの日暮里・谷中辺りは、ネクタイ工場が集積する織物の町という顔もあった。
織物の産地は江戸時代初期から日本各地に広がった。木綿製品は綿花の栽培に適した太平洋岸や瀬戸内海の温暖な土地に、養蚕製糸は、稲作に適さない山間や寒冷地に桑を植えて発達した。明治になり、殖産興業の目玉として設立された官営の富岡製糸場を皮切りに、日本の基幹産業を支える織物工場は日本中につくられていく。
私は谷中の鋸屋根を熱く語り、吉田敬子は全国に残る鋸屋根を熱く語った。彼女の撮影した鋸屋根工場は700棟に近い。
木造、石造、鉄骨、煉瓦と変化に富む群馬県桐生の日本一の鋸屋根群。石川県小松の雪国仕様の鋸屋根。愛知県尾西の17連の鋸屋根。赤色に塗られた静岡県富士吉田の鋸屋根。潮風に立ち向かう知多半島の黒塗りの鋸屋根。3年前に操業を停止した高知県奈半利の鋸屋根。
現役もあれば、カフェやギャラリー、パン工場、倉庫などに活用されているのものも、そして廃墟となり消えてしまいそうなものも。
あぁー、彼女の写した鋸屋根を自分の目で見たい。そして、未知の鋸屋根を、彼女のあとを追いながら探し歩きたい。
そうだ。旅に出よう。蚕糸の歴史を学びながら、鋸屋根工場の、北向きの窓から降り注ぐやわらかな光の下で働いた人の話が聞けるうちに。私が訪ねるのを待っていてくれると信じて。
(ヤマサキ)

回転寿司

5月5日まで、千駄木旧安田楠雄邸で五月飾りと加藤一冑展やっています。加藤さんの実演あり、全館甲冑や兜を飾っています。お出かけください。(10時半から4時まで。3時閉門です。靴下お忘れなく)

さてさて、忙しさにかまけて更新もおろそかになっていました。
ちょっと前のこと、娘から回転寿司へ行きたいと連絡があり、もう名前を書いて予約してきたから、30分後に店に来てね、という。
時間を見計らって行くと店内はすごい人。子供づれの家族が多い。
回転寿司は勝浦で一度入ったことがあるが、あの時は輪の中心で職人が握っているのが見えた。
ここは二つの流れが細長く回っていて、握る職人はまったく見えない。
どうものれんの陰で作業しているようだ。

案内されたのは、寿司の流れに対して直角に配置されたテーブル席。娘たちがさっさと奥に座ったので、私は寿司レーンから遠い。
やられた!
バンバン回っている寿司に気をとられていると、あゆみが手馴れた調子で箸を配ったり、お茶を入れる。
ガリは四角い入れ物に入っている。好きなだけ食べな、ということか、それだけは私の前においてくれた。(子供はガリを食べない)
各テーブルに小型画面が取り付けられており、タッチパネルで味噌汁やビールなどを注文できる。
回っている寿司以外のものを食べたいときもこれでピピッと注文する。

特注の前に基本的な腹ごしらえ。あゆみは躊躇せずにバンバンお皿を選んでいる。
トロサーモンがけっこういける。生タコもシソの葉でさわやかな味じゃあないか。
わさびは後付、席から届く位置に醤油でもわさびでも、お茶の粉でも何でも置いてある。
あっという間に皿が積みあがってしまった。
が、一枚100円だそうで、10枚ずつ重ねておくと、会計が見えてくる。(半額はゆず子が払うことになっているのだ)
注文品はわかるように流れてくる。機械からまもなく注文品が流れてきます、というようなメッセージ。
流れに逆らわないようにして、皿を掬い取る。

気になるのは寿司の間に、ピンク色でハートの形をしたモナカ(?)とか、プリンとか、団子とか、四角いパックのジュースなども流れていること。
北京ダック寿司、焼いた豚肉がのった寿司など、誰が食べるのか????と思うようなのも3皿ずつ流れているのだが、2週目には1つ、2つと減っている。
カリフォルニア巻や、マヨネーズであえた??が軍艦になっている。ナンダロウ?ハンバーグなんていうのもあったかも。
その流れの向こうに、2歳くらいの可愛い坊やの顔が見え隠れしている。
値段も味も、ラインナップも子供づれで来るにはもってこいの場所なんでしょう。流れを見ているだけで子供は飽きないだろうし。ベビーカー横付けの人もいるし、なにしろ小さい子連れ家族が多い。
中国の留学生らしき11人のグループが寿司の行列をバックに記念写真を撮っていた。

私はひたすらあゆみの選んだ皿の2カンのうちのひとつを口に運び、皿を積み上げる。
急にお腹がいっぱいになってきた。
寿司のあとにありえないデザート(リッチな卵プリンと、トロピカルなゼリーなど)をそれぞれ食べ、終了。

回転寿司はうわさに聞いていたが、こんなことになっているとはびっくり。
あゆみは「あんまり人と口きかなくていいし、うちは好きだな」と。
ちゃんとしたすし屋さんにはなかなか連れて行ってあげられないのだけれど、ちょっと寂しい言葉。
コンビニで買い物し、回転寿司でご飯、気ままに暮らせるけど、誰とも口をきかなくて良い日が多くなるだろう。

春宵十話 - 岡潔

春宵十話 随筆集/数学者が綴る人生1 (光文社文庫)

長く読まれているようだけれど、僕は今回初めて読んだ。と思う。ちょっと既視感があるけれど、たぶん気のせい。
最近新潮文庫からでた小林秀雄との対談「人間の建設 」を読んだのがきっかけ。ことばの使い方が独特でもっと読んでみたくなった。ちなみにこの「人間の建設」もとても面白い。今ならどこの書店でもすぐに手に入るしおすすめ。

この「春宵十話」は、岡潔が話したことを文章にまとめたもの。それはないだろう、という発言もたくさんあるのだけれど、岡潔の正直さが心地よくて、とてもよい気分になる。

春の野に咲くスミレはただスミレらしく咲いているだけでいい。
咲くことがどんなによいことであろうとなかろうと、それはスミレのあずかり知らないことだ。
咲いているのといないのとではおのずから違うというだけのことである。

存在を全肯定していると勘違いしてしまうかもしれないけれど、そういう文脈じゃない。でもそういう勘違いとして受け取っても気持ちいい。

職業にたとえれば、数学に最も近いのは百姓だといえる。種をまいて育てるのが仕事で、そのオリジナリティーは「ないもの」から「あるもの」を作ることにある。数学者は種子を選べば、あとは大きくなるのを見ているだけのことで、大きくなる力はむしろ種子のほうにある。

この後、物理学者は指物師だ、と続く。

戦争中を生き抜くためには理性だけで十分だったけれども、戦後を生き抜くためにはこれだけでは足りず、ぜひ宗教が必要だった。その状態はいまもなお続いている。
宗教はある、ないの問題ではなく、いる、いらないの問題だと思う。

いる、いらないの問題。僕はまだいまのところはいらない。

しかし、春のぽかぽか陽気にのろうと昨日読み出した訳だけど、読み終わった今日の寒いことよ。気温差15度ってどうなんだ。


4月15日

水曜日は次男のアルバイトが休みなので、家族揃う唯一の日。
「今日の夕飯は何かなあ」なんてつぶやく声が聞こえてくると、母としてはちょっと嬉しくなる。
7時20分、準備開始。
出来上がりから逆算して、何から下ごしらえをしようと瞬時に考える。

先日、次男が結婚式に出て、カタログ引き出物でヘンケルの包丁をいただいた。
我が家の台所の包丁はどれもこれも切れなかったので、この包丁の切れ味のおかげで、みんな調理が楽しくなった。
何でも千切りやみじん切りにしたくなる。

本日はチンジャオロースーがメイン。レンコンのきんぴらやくらげの酢の物は作っておける。
もやしのナムルはパパッとできる。太い大根が一本、これは厚揚げと煮物にしよう。
タケノコは早めに糠を入れて茹で、しばらくアクを抜いた。
野菜を千切りにし、最後にチャチャッと炒めれば熱々が・・・。
その前に白菜とわかめでスープを作って、最後にかき玉汁にしよう。
と思って、炊飯器を確認したところ、なんとご飯が焚けていなかった。
あわててスイッチオン。
炊けるころを見計らって8時ちょっとにみんなが食堂に集った。
食卓も整い、さあ、いただきます。
あれ、ご飯がないよ。
今焚けるから。
チンジャオロースーの皿を中心に、周りに並んだものを遠慮がちに少しずつ味見をする子どもたち。

炊飯器に見に行くこと20回。
この炊飯器、炊き上がってもウンともスンともピーとも言ってくれない。(「さっきから炊けていましたよ」とすましているような、よそよそしさがある)
前のが壊れて、使っていないのを譲ってもらったのだが、一昔前の仕様なのか、予約炊飯は4時間8時間10時間と大雑把だし。
米を洗って水をここまで入れて、という線が釜を同色でほとんど確認できず、いつも目分量。
譲ってもらって文句は言えないが、炊きあがりぐらいピーと教えてくれてもいいじゃないか。

8時25分、ご飯が炊き上がり、茶碗に盛った瞬間、チンジャオロースーはお皿から消え、あっという間に夕飯は終了したのだった。

新しい環境は?

高校1年、まだ新学期始まって何日もたっていないのに、憂鬱な顔をしている男の子がいる。
頑張って入った高校は40人8クラス。
都立高校ならまあ、普通の規模である。
しかし、いままで40人足らずの学年をやっと2つに分けて、1クラス16,7名の中学に通っていた。
高校へ行って、40人もの生徒がひとつの教室にいるというだけで息が詰まりそうだという。
学校のどこへ行っても人人人。今までにない環境なのだ。
しかも都内から集ってきた優秀な子ばかり。
地下鉄で千駄木に戻ってくると、知っている顔を見つけてほっとするという。
そうかあ、わかる気がする。
保育園も1組18人だったし、小学校も小規模。
あゆみたちは隣の学校で、区内でも多い小中学校をでたけれど、谷根千地域でも少ない学校は1クラスしかない。
区内の中学校が自由選択できるようになって、人気が集中するのか学校によって人数が大幅に違う。

いつまでも腕の中にいるわけにはいかない。
徐々に環境になれると思うけれど、今の彼は切実だ。
「明日の午後1時に君が学校でどうしているかなと思うから、私が応援していること思い出してね」というと、ありがとうございます、とぺこりと頭を下げた。
口には出さないけれど、あゆみも多少は同じことを感じているのだろう。
きっと来週はニコニコいつもの調子で会えるだろう。

またまた1年生

暖かい日が続くと思ったのも束の間、寒い入学式でした。
あゆみ高校1年生になりました。

学校に来るのは3回目。駅から式に間に合うように必死に歩く。こういうのが私には辛い。
ほとんどの人が席についている中、ぽつんと空いている席を見つけ、前のほうに座る。チラッと横を見ると、同じ横列のとなりの組に知った顔。Yの甥っ子の息子さんが同級生になったのだ。そうだった。Yが高知からよろしくねって電話もらったな。不思議なご縁です。

式の後、教室で担任からご挨拶があった。
頭髪検査を厳しくしていて、染めたりパーマは禁止。
天然パーマや茶色っぽい髪の人は「地毛届け」を出してください。というので、ブッと噴出してしまったが、届けのいる方? というと、何人ものお母さんが手を上げた。
運動系の部活で紫外線で色が抜けるとか。
あるお母さんが、「うちは天然パーマで短く切ったら膨らんでしまったので縮毛矯正をしようと思うのですが、どう書けばいいでしょう」と質問した。
縮毛矯正が普段の姿だと思っていたら、下から生えてきた髪の毛が縮れていて、「パーマをかけているんじゃないか」と言われることもありそうだ。黒く染めていて、それが普段の髪と思っていたら、下から茶色の髪の毛が生えてくるのも考えられる。日焼け防止スプレーというのもあるそうだ。
先生は「とにかく現状の様子を書いてください」という。

12年前の話だが、長男の入学式で話をした生徒会委員長は緑色の髪の色をしていた。あの時先生は「皆さんびっくりされたと思いますが、髪の色も個性ですから」と説明した。洋服も自由、持ち物も、化粧も、アクセサリーも自由だったが、乱れた服装をしたり、派手な化粧をする子はいなかった。今でもあの学校は制服もなく、自由自律でやっているのだろうか。

あゆみは本日から通常授業へ。
朝シャンして、お弁当を持って7時45分に家を出ました。
今までのセーラー服もかわいかったが、ブレザーにリボン、チェックのスカート姿がまぶしい。

Xperiaは見送り。iPod Touch + WiMAXルータでiPad待ち?

43歳の誕生日。自分プレゼント、どうしようかなあ。
Xperiaは見送り決めたし、iPhoneはいまさら感もあってのれないし。
それなら、iPod Touch + WiMAXルータで、iPadが出てくるのを待ってみるのはどうだ。
時々持ち出すMacBookでも使えるじゃないか。
僕の使い方ならWiMAXはとてもいいのは、もうすでにTry WiMAXで経験済みなんだから。
ちょっと書き出してみよう。

初期: 18,810円 iPod Touch + 16,749円 AtermWM3300R = 35,559円
月額: 4,480円 UQ WiMAX

月額でマイナスできるのは、ドコモの基本料、通話料以外の約5,400円 (パケホーダイダブル4,200円 + Uスタンダードプラン500円 + その他 700円)。
単純に月々の通信費は1,000円ぐらいマイナスにできるな。ワイヤレスゲート(380円/月)もあった。

この分をSkypeにまわせるなあ。アレ、ドコモは止めてもいいのかも。通話料が毎月200円以下なんて。ああ、待ち受け時間の問題が残るか。WiMAXルータにケータイみたいなバッテリの持ちは期待できないなあ。なんかしらケータイはもっとかないとダメか。
あとカメラは…WiFiカメラっ。
そうだ、GPSが使えないか。ってことは、GoogleマップとGPSの連動したやつも使えないのか。ちょっと残念。
あと、荷物増えるな。

持ち運ぶデバイスと回線を分離できるのは、エンジニアとしては良い感じがするなあ。心地よい。
Kindleが欲しくなっても、iPadにしても、ほかのAndroid端末でも追加できるもんなあ。
でも、やっぱりいろいろひっかかるところも多い。どうしたものか。

p.s.
今ふと、はっ、僕はこんなにがんばってネット接続が必要なのか?これはなんだかがんばりすぎじゃないか?と思った。


Simple HTTP Checker – シンプルなHTTPサーバの監視ツール

WEBサイトの死活監視のサービスはいろいろあるけれど、どれも監視できるURL数に制限があったり、制限を解除してもらうには費用がかかるわけなのだけれど求める以上の機能があってちょっと高くついたり。なかなかピッタリこない。

仕方がない、さくらのレンタルサーバが1つあるのでそこで監視するようにしてみよう。社内のサーバ監視をしているNagiosは便利なんだけれど、さくらの500円/月のレンタルサーバに入れるのはちょっとアレだし、必要最小限のスクリプトをPythonで書くことにする。

求めた要件としては、

  • HTTPで接続できなかったらメールでお知らせが届く。
  • 一回メールを送ったら、しばらくはメールしないで欲しい。
  • HEADとGETとPOSTに対応。
  • HTTPステータスコードだけをチェックする(レスポンスに含まれるコンテンツのチェックは不要)。
  • 設定ファイルで複数のURLをまとめてチェックして欲しい。
  • (さくらなので)常駐するデーモンではなくて、単独のコマンドで実行できる(cronで繰り返し実行)。
  • お知らせメールはcrontabのMAILTOで送るからstderrに出力してくれればいい。
  • OKだったときのログはstdoutに出力してくれればいい。
  • スクリプトは1ファイルで完結させる。
  • Python2.4以降、標準ライブラリだけで動く。


使い方は、
1. python htpchk.py URL
とURLを引数に指定する方法。これだと細かい設定はできませんが、HEADでチェック、お知らせメールは多くて10分に1回、となります。

2. python htpchk.py htpchk.conf
と引数に設定ファイルを指定する(あるいは引数指定を省略して、htpchk.pyと同じディレクトリにhtpchk.confという設定ファイルを置いておく)と、複数のURLを一括してチェックできるようになります。
設定ファイルは、Windowsのiniファイルに良く似た書き方です。DEFAULTセクションは全セクションのデフォルト値として使われます。あとはチェックするURL毎にセクションを作ってurlパラメータを書いておくだけで1と同様にチェックはできます。セクション毎にDEFAULTセクションの値を上書きできるので、細かい変更がしたい場合はセクションに値を書きます。詳しい設定ファイルの書き方は後の方のサンプルをご覧ください。

cronにこのスクリプトを実行するように登録しておく(さくらのレンタルサーバではこんな感じ)。
/home/example/bin/にhtpchk.pyとhtpchk.confを置いたとするとこんな感じ。

MAILTO=alert@example.com, mobile@example.com
# NAME: htpchck
*/5     *       *       *       *       /usr/local/bin/python /home/example/bin/htpchk.py >/dev/null

これで、5分に一回htpchk.confに書いてあるサイトをチェックして、HTTPステータスが200じゃなければ、標準エラーにメッセージが出力されて、そのメッセージはMAILTOに書いたメールアドレスに送られます。標準出力は/dev/nullに向けてあるので捨てられます。

手元では47のURLをチェックする設定ファイルを書いて運用中。概ね良好なんだけれど、まだチェックするURLを増やしたいのでもう少しチェックにかかる時間を短縮したい。HTTPのリクエストを送る部分をスレッドにして同時実行すれば速くなるのはわかっているので、困ったらスレッド化するかも。

以下はスクリプト本体(htpchk.py)と設定ファイル(htpchk.conf)のサンプルです。最新版はGist:343248に置いてあります。

htpchk.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""#8 Simple HTTP Checker
  Usage:
       htpchk (htpchk.conf is needed at same directory.)
       htpchk URL
       htpchk config-file
"""
__NAME__ = '#8 Simple HTTP Checker'
__VERSION__ = '1.0'
__ABOUT__ = 'http://jinim.jp/archives/2136'
__USER_AGENT__ = 'Mozilla/5.0 (compatible; %s/%s; +%s)' % (__NAME__, __VERSION__, __ABOUT__)
DATETIME_FORMAT = "%Y-%m-%d %H:%M:%S"

import os
import sys
import time
import urllib2
from urllib2 import HTTPError
import urlparse
import tempfile
from ConfigParser import ConfigParser

#url to filename with sha hash.
try:
    import hashlib
    def _urlhash_filename(url): return hashlib.sha224(url).hexdigest()
except:
    import sha
    def _urlhash_filename(url): return sha.new(url).hexdigest()

opener = urllib2.build_opener()
opener.addheaders = [('User-agent', __USER_AGENT__)]
urllib2.install_opener(opener)


class ParamError(Exception): pass


class HeadRequest(urllib2.Request):
    def get_method(self): return "HEAD"


class Site(object):
    def __init__(self, name, url, notify_interval=60*10, method="HEAD", data=None, wait_seconds=0):
        """When medhod is POST, data is requred."""
        self.name = name
        self.url = url
        self.method = method
        self.data = data
        self.notify_interval = notify_interval
        self.wait_seconds = wait_seconds
        self.notified = os.path.join(tempfile.gettempdir(), "htpcheck-%s" % _urlhash_filename(self.url))

    def check(self):
        if self.method=="HEAD":
            u = urllib2.urlopen(HeadRequest(self.url))
        elif self.method=="POST":
            u = urllib2.urlopen(self.url, data=self.data)
        elif self.method=="GET":
            u = urllib2.urlopen(self.url)
        else:
            raise ParamError, "method: %s not supported. Supported methods are (HEAD,GET,POST)." % self.method
        return u.info()

    def recovered(self):
        os.rename(self.notified, os.path.join(os.path.dirname(self.notified), os.path.basename(self.notified) + time.strftime("-recovered.%Y%m%d%H%M%S")))

    def notify(self, err):
        msg = log_message(self, err)
        last_notified = 0
        if os.path.exists(self.notified):
            try:
                last_notified = time.mktime(time.strptime(file(self.notified).readlines()[-1].split("\t")[0], DATETIME_FORMAT))
            except ValueError:
                last_notified = 0
        if time.time() > (last_notified + self.notify_interval):
            sys.stderr.write(msg)
            file(self.notified, 'a').write("%s\tnotified\n" % msg[:-1])
        else:
             sys.stdout.write(log_message(self, "[SUPPRESSED] %s" % err))


def log_message(site, msg=None):
    """if msg is not None, message means error.
    """
    if msg:
        format = '%s\tNG\t%s\t%s\t%s\t%s\n'
        return format % (time.strftime(DATETIME_FORMAT), site.name, site.method, site.url, msg)
    else:
        format = '%s\tOK\t%s\t%s\t%s\n'
        return format % (time.strftime(DATETIME_FORMAT), site.name, site.method, site.url)


def config_parse(conf):
    parser = ConfigParser()
    parser.readfp(open(conf))
    sites = list()
    for section in parser.sections():
        url = parser.get(section, 'url')
        method = parser.get(section, 'method')
        if method=="POST":
            data = parser.get(section, 'data')
        else:
            data = None
        notify_interval = parser.getfloat(section, 'notify_interval')
        wait_seconds = parser.getfloat(section, 'wait_seconds')
        sites.append(Site(section, url, notify_interval, method, data, wait_seconds))
    return sites


def main(sites):
    for site in sites:
        try:
            site.check()
            sys.stdout.write(log_message(site))
            if os.path.exists(site.notified):
                site.recovered()
        except HTTPError, err:
            site.notify(err)
        if site.wait_seconds>0: time.sleep(site.wait_seconds)


if __name__=='__main__':
    if len(sys.argv)>1: config = sys.argv[1]
    else: config = os.path.splitext(__file__)[0]+'.conf'

    if not os.path.exists(config):
        if config.startswith('http://') or config.startswith('https://'):
            name = urlparse.urlparse(config)[1].split(':')[0]
            sites = (Site(name, config), )
        else:
            raise ParamError, "config file %s not found." % config
    else:
        sites = config_parse(config)

    main(sites)

htpchk.conf

[test_HEAD]
url: http://example.com/

[test_GET]
url: http://example.com/
method: GET

[test_POST]
url: http://example.com/
method: POST
data: Hello World

[test_notfound]
url: http://example.com/notfound.html
notify_interval: 10


[DEFAULT]
#************************************************
;  DEFAULT values
#************************************************

#Target URL.
#url=http://example.com/

#HTTP method
method: HEAD

#POST data
#data: Hello World

#When HTTP error occuered, repeatedly notified with interval seconds.
notify_interval: 600

#after checking, wait bellow seconds.
wait_seconds: 0

Related posts:

  1. urllib2でプロキシを参照しないようにする
  2. urllib2.quote()ってアリなんだ
  3. Flickrから自分のアップロードした写真を全部ダウンロードする


代替医療のトリック - サイモン・シン

読了。必読の書。

読みやすく、重点ポイントが繰り返し語られるから読書になれていなくても心配なし。こういう科学読み物に慣れていないひとにもおすすめ。面白いミステリー小説を読んでいるように、どんどん先が読みたくなる。

プラセボが何故ダメなの?効くならいいじゃんプラセボでも。というのがなぜマズいのか、最後まで読んでよく理解できた。説得された。はあー、面白かった。

ホメオパシーがプラセボ以上の効果がないなのはなんとなく知っていた。けれど、鍼治療もかあ。
あとカイロプラクティックも。これは日本で言う骨接ぎ、整体とは少し歴史的な経緯が違うけれど、例えばWikipediaの柔道整復術をみてみると、自然治癒能力、伝統医療という言葉が並んでいる。代替医療の宣伝文句として頻繁に用いられる言葉として、自然(ナチュラル)、伝統(トラディショナル)、全体(ホーリスティック)の3つを挙げているのだけど、そのうち2つが最初のパラグラフにでてくる。ピンポーン。

こういった個々の代替治療が効くとか効かないとかを知るのも大切だけれど、この本のおもしろさ、すごさはそこじゃない。マニュアル的に参照するだけなら付録としてたーくさん書いてあるリスト(浪越徳次郎の指圧も出てくる)を立ち読みすれば済んじゃう。

この本のすごさの中心は、科学的な根拠(臨床試験)に基づく治療を選ぶことがなぜ重要なのかを教えてくれること。歴史のエピソードを交えて緻密に論理を積み重ねながら、ぐいぐい引き込む文章の力と合わさって。

周囲の子を持つ親には身銭で買い与えたいぐらい。でもそういう熱心が詐欺的な代替医療の特徴でもあってね。クールに薦めるにはどうすればいいんだろ?この種の健康に関する話はとても難しい。できれば友人とは話しあいたくない(家族は別。ちょっとモメてもよく話し合ったほうがいい)。知的な読み物として面白いから読んでみたら?ぐらいか。

しかし、世界レベルはすいごいなあ。

あ、そうだ。サイモン・シンの本はどれもそうだけれど、この本も翻訳がとてもいい。


卓上照明

LEDICEXARM "mono"アニキの小学校入学準備。机の配置を変えて兄弟妹3人並んで勉強するそうで。でも配置を変えると手元が暗くなるから手元を照らすための照明が必要だろうということで、LEDの卓上照明を物色してみた。

まず最初にアシストオンで探してみたらBALMUDA design “Highwire Smooth”が見つかった。39,900円。んー、ちょっと高い。1万円台だよな。

と次へ。LEDICEXARM “mono”。価格的にもこれなら良さそう。妙にスタイリッシュなのが気になるといえば気になるけど、設置面積が小さいのはいいね。

今回はAmazonのポイントがけっこう貯まっていたので、Amazonでポチっと。ごめんアシストオン。

僕の小学校の頃に比べると隔世の感。照明も購入までの手順も。


球速47キロ

2010年3月6日(日曜日)雨。神宮球場脇のバッティングドームへ。

野球の試合を見たことがないから基本的なルールがわかっていないアニキだけれど、幼稚園で聞きかじった知識はある模様。知識が中途半端なのはまあ仕方ない。今年はプロ野球を見に連れていってやろう。僕もプロの試合は生では見たことないし(一回神宮球場に行った気がするけど始まる前に飲み過ぎて覚えていない)。

この写真の前の投球は球速47キロ、これが幼稚園年長児的にどうなのかよくわからない。なんか遅い気がするけれど例えば80キロだと速すぎる気がする。

で、こちらはバッティング。球速70キロは遅すぎて物足りない様子なので80キロ、90キロと上げていく。90キロまではついていけている模様。半年(ぐらいかなあ)前よりはやっぱり基礎体力がついている。バットスイングが速くなってる。

最終的には、300球ほどの打ち込み。まあ春のキャンプだな。