3月11日

忘れないうちに3月11日のことを書いておこう。

3月11日(金)は家で仕事をしていた。その時間(2時45分頃?)は二階で作業をしていた。地震でぐらぐら揺れだしたが揺れは大きくなく、最初はよくある地震だと感じていた。揺れが収まらずだんだん揺れが大きくなり、これはちょっといつもと違うぞと思って裸足のまま家の外へ逃げた。ご近所さんも外へでており、顔を見合わせて「大きな揺れですね」と声をかけあった。

揺れが止まり、家のなかへ入るといろいろなものが散乱していた。幸い本棚や食器棚が倒れたりはしていなかった。カメを飼っている水槽の水が半分くらい床に落ちていたが、カメはちゃんと水槽のなかにいた。どうしたものかと呆然としていると、ドアがトントントンとノックされた。小1の娘の同級生のNちゃんのお母さんだった。

「学校に迎えに行きませんか?」と言われ、そうだ、迎えに行かなきゃと思った。家のインターホンが鳴らなかったと言われ、そのとき初めて停電していることに気がついた。二人で小学校へ歩く道々余震があってまた揺れていた。小学校に着くと全校生徒がグラウンドに退避しており、保護者も何人か迎えに来ていた。先生と二言三言話をし、地震が収まったようなので小4の長男はランドセルを取りにもどって自分で帰宅、小1の娘はさよならの挨拶の後だった事もあって帰宅準備ができている状態なので私とNちゃんとNちゃんママと集団で下校することになった。

家へ帰ってからも余震が怖かったので、私と子供達はしばらく家の外で様子見状態だった。電池で聞こえるラジオがあったので、外でずっとラジオを聞いていた。電話は不通状態だったが、かろうじて携帯メールが使える時があり、私と子供達が無事である事を仕事場の妻と北海道の実家にメールした。ラジオはずっと震災のニュースを流していたのでどういう状態なのか把握でき、おかげでパニックにはならなかった。だんだんと日が暮れ、寒くなってきたので家へ入った。

夕暮れ家のなかは暗かったので懐中電灯を一本だけつけ、3人でこたつに入ってラジオを聞いていた。電気とガスは止まっていたが、水道は止まっていなかったのでとりあえず鍋と風呂に水をためて断水に備えた。棚から菓子類を出して3人でポリポリと食べていた。夕飯をどうしようかと思ったが家で料理は作れない状態だったので3人で駅前に行ってみることにした。

街灯も消えて駅前までの道は暗かった。余震で壁が倒れてくることを気にしながら駅前まで行ってみると、そこは停電していなかった。牛丼屋もフツーに営業していたので3人で牛丼を食べたが、よく考えると電車は止まっており、牛丼屋のアルバイト店員は交代しないままずっと働いている様子だった。客はたしかに多かったが外に列をつくるほどではなく、案外普通の日のような様子だった。ご飯のあと近くのスーパーに寄ってみると見事に乾電池と懐中電灯が売り切れていた。帰り道家に近づくとやっぱり停電で街灯がないため暗く、そのぶん星空がきれいに見えて普段なら見えないオリオン座の小さな星まで見えた。

電車が動かないため、妻は帰宅をあきらめて職場近くに住む友人宅に泊まることにした。私と子供達は相変わらず暗くて寒い家のなかで懐中電灯一本つけ菓子類をポリポリと食べながらラジオを聞いていた。9時近くなりそろそろ寝るかと思ったとき電気が復活した。このときはじめてテレビで地震と津波の映像を見ることができ、改めてとんでもない事になったと思った。子供達を先に寝かせ、私はずっとテレビとネットで事態の把握に務めた。

固定電話や光回線のネット、携帯電話、WiMAXはどれもだめだったが、携帯メールはたまにつながる時があり、PHSは問題なくつながった。PHSでPCをネットに接続するとFacebookで関西や海外の友人達が非常に心配している様子だったので、私と家族は大丈夫と書込みした。またGoogleのPerson Finderというサイトがすでに立ち上がっていたので、そこに私と家族は無事でここにいるとステータスを登録しておいた。

ここまでが3月11日の出来事。

GDataでカレンダーイベントを指定のタイムゾーンに日時を変換して取得する

GData Python clientでカレンダーイベントを取得すると、各カレンダーのデフォルトタイムゾーンで日時を返す。

AさんとBさんのプライベートカレンダーのデフォルトタイムゾーンが違う場合、同じイベントに参加している場合でもそのイベントの日時がAさんとBさんで違って表示されてしまう。AさんBさんならまだ問題は小さい(AさんBさんが同じタイムゾーンを設定すればよい)が、プレミアエディションのカレンダーリソースを使う場合はデフォルトでUS時間のタイムゾーンが設定されてしまう上カレンダーリソースのタイムゾーンを変更する方法が面倒くさい。

なにか良いプロパティはないかと探したら、ありました。CalendarEventQueryのctzです。

query = gdata.calendar.service.CalendarEventQuery(‘calendar_id’, ‘private’, ‘full’)
query.ctz = ‘GMT+09:00’
result = calendar_service.CalendarQuery(query)

はんだづけカフェ

息子と娘をつれて秋葉原へ行ってきた。

息子は最近毎週のように秋葉原に来て秋月電子通商で電子工作キットを買ってはんだづけカフェで作っている。

はんだづけカフェ

娘もそれを見て作りたいと言い出したので、マルツで子供向けのキット「はこぴか」を買ってはんだづけカフェで作ることにした。

IMG_0508

 

ここではUstreamでずっと生中継で店内の様子を配信している。息子は「常連の少年」と噂になっているようだった。

息子はLEDで文字がスクロールする時計を作っていたのだが、熱で三端子レギュレータがだめになり、カフェのスタッフの話では付属の12V電源がだめなのではないかという話だった。キットを持って秋月に行き、聞いてみると電源の接続の仕方が間違っていた事がわかり、無事動くようになった。秋月のお店のおじさんは「これ、本当に君が作ったの?」と驚いた様子だった。

確定申告

今年も確定申告の季節がやってきた。去年からe-taxで申告しているので税務署に行かずにネットから申告である。

子供が寝静まって10時頃から申告作業をはじめ、2時間ちょっとで申告が終わる。開業費の償却の仕方が思い出せず苦労したが、大方は問題なくスムーズに申告できた。相変わらず複雑だが税制というものはどこの国でも複雑なので仕方がない。

IEのJavascriptで「識別子、文字列または数がありません。」エラー

IEの場合だけガジェットのロード時にエラーになってエントリーポイントがキックされない。FireFoxはOK、ChromeもOK、SafariもOK。IEだけNG。エラーメッセージは「識別子、文字列または数がありません。」

しばらく悩んでいたが、検索するとあっさり解決した。

IEのjavascriptエラー「識別子、文字列または数がありません。 」

他にも同じ言及をしているページが多数ある。IE-Javascriptでみんな一度は遭遇するメジャーな問題らしい。

オブジェクトの記法で最後の要素の後ろにカンマを許容するかどうかで

  • 許容しない(IE)
  • 許容する(その他)

で動作が変わってしまうのが原因だった。Javascriptの規格上は許容しないのが正解、つまりIEが正しい珍しいケースだ。

しかしJavascript以外の動的言語では要素の最後にカンマを許容するのが普通だ。PythonやPHPではエラーにならないし、下記ページによるとPerlやRubyでも許容するらしい。

連想配列の最後にカンマを入れてはいけない言語もある – すぎゃーんメモ

悩ましい問題だ。

argument of type ‘bool’ is not iterable – GData Python Client

PythonのGData clientを使っていて、CalendarEventQueryでカレンダーイベントを取得している。繰り返しイベントを展開して取得しようと考え、

http://d.hatena.ne.jp/shingotada/20070529/1180449643

を参考に

query.singleevents=True

とセットしたところ、

argument of type ‘bool’ is not iterable

というエラーが出た。なぜ?と思い調べたところ、このパラメータの型は文字列だったので、

query.singleevents=’true’

としたところ正しくクエリーが処理された。

ExtJSをSSLサイトに使うとセキュリティ警告が出る

ExtJSをSSLで保護したサイトに使うと、ブラウザーのセキュリティ警告が出る。

調べてみたら、ExtJSが外部のgifファイル http://extjs.com/s.gif にアクセスしているのが原因だった。

下の一文をページに追加して解決した。

Ext.BLANK_IMAGE_URL = ” … /resources/images/default/s.gif”;

この方法は3年前の下記記事で紹介されている。

http://d.hatena.ne.jp/yshgt/20080701/1214881433

今だにそのままというのは、ExtJSの使用状況の調査にでも使っているということだろう。

Javascriptで連想配列のlengthを見てはいけない

Javascriptで、配列と同じように連想配列でもlengthで要素数が取れるとばかり思っていたのだが、違った。これに気づかずずいぶん時間を取られた。

JavaScript の配列と連想配列の違い – IT戦記

連想配列のほうがObjectで、配列はObjectからの派生クラスという説明でやっと附に落ちた。ひょっとしてJavascript使いの間では常識?

ExtJSでtreeNodeのselectをコールするとエラーになる

ExtJSを使っていて、ツリー表示をするためにExt.tree.TreePanelとExt.tree.TreeNodeを使っている。ページを開いた時にノードの一つをデフォルト選択状態で表示させたくてTreeNode.select()をコールするのだが、なぜかルート下のノード以外をデフォルト選択させようとするとJavaScriptエラーになる。

色々調べていたら、結局selectがコールされるノードは親ノードがexpandされて表示されている状態でないとダメということがわかった。

結局、デフォルト選択させるノードのparentを順にたどってルートまでの全てのノードを取得し、ルート側から順にexpandさせることで解決した。

GData Python clientのクエリーでurl.fetchのレスポンスタイムアウトを5秒からのばす

GAE上でGdata Python Clientを使い、サービスのクエリーで「DownloadError ApplicationError: 5」が稀に発生するので原因を調べていたら、以下の記事からライブラリ内部のurl.fetchで5秒タイムアウトしていることがわかった。

GAEのurl.fetchでDownloadError ApplicationError: 5 | ウフル技術ブログ

5秒はきついので10秒にのばそうと調べたら、run_on_appengineの引数に”deadline=10″を渡せばいいことがわかった。

gdata.alt.appengine.run_on_appengine(calendar_service, deadline=10)