ブログ

  • 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)

  • introセッション(高田馬場)

    夜の10時頃イントロに行く。

    店内に入ってみると今日はそれほど混んでいない。ベースはお店が雇ったベーシスト一人だったが、11時頃もう一人やってきた。私はFのブルースと”When the lites are low”、あともう一曲くらい演奏する。ピアニストは3人いたが皆レベルが高かった。

    小田急の町田行き最終電車に間に合うようにイントロを12時に出たが、人身事故で山手線がまさかの停車。終電に間に合わず新宿のマンガ喫茶で仮眠をとり朝帰る。

  • お年玉

    新年が開けて、長男がお年玉を握りしめて行ったのは町田のパーツショップ「サトー電気」だった。

    長男は電子工作マニアで、何を作りたいのか聞くと「DC安定化電源が作りたい」とのこと。なんともマニアックである。「電子工作大全集」みたいな分厚い本を持ってサトー電気へ行き、本の部品表に載っている部品一式(3000円くらい)を買ってきた。「トヨデンのトランスが」とか私に聞かれてももう私にはついていけないレベルである。サトー電気の人やはんだづけカフェのスイッチサイエンスの人にいろんな質問をしてまわって相当勉強したらしい。

    部品を買って家に変えると早速作り始めた。

    DC安定化電源作成中

    家庭用交流電源を直流電源に変換すること自体はうまくいったらしい。細かい動きがおかしいのでテスターを色々なところに当てていたらショートしてしまったらしく、ヒューズ菅が1本だめになってしまった。サトー電気の人の薦めでヒューズ菅は2本買っていたのだが、2本目が見つからず今日の作業はここで一旦終了である。

  • MASSI賀詞交歓会

    今日は、私の参加しているNPO法人ソフトウェア振興会(MASSI)の賀詞交歓会に行ってきた。

    会場はJR町田駅近くの「ホテル ラポール千寿閣」。賀詞交歓会というのはMASSIの会員企業の社長さんたちが集まる新年パーティーのようなものだ。MASSIは基本的には企業が参加するものだが、問い合わせたところ自営業が参加しても問題ないということだったので、2009年の終わりから私も参加させてもらっている。

    MASSIは、年に一回会員企業が集まる「賀詞交歓会」を開いたり、外部から講師を呼んで「研修会」や「セミナー」などの活動を行っている。私の主な参加目的は会員企業とのコネ作り、つまり営業活動だ。去年は賀詞交歓会で一生懸命名刺を交換して顔を売って歩いたおかげで、MASSIに参加している会社の案件をお手伝いすることができた。

    ところで今年の賀詞交歓会も町田市長の石坂氏や前衆議院議員の伊藤氏、都議会議員の小磯氏や吉原氏が来ていた。なぜか保守系の政治家は日頃からこういう会に来てアピールするようだ。政治家以外では町田商工会議所会頭の平本氏や近隣のソフトウェア関連業界団体の代表の方々が来ていた。

  • カレンダーイベントが25個以上検索されない(Python/GData API)

    GData APIでカレンダーイベントを取得したら、なぜか一定以上のデータが取れてこない。
    調べてみたら、CalendarEventQueryの結果はデフォルトで25個までしか取れてこない仕様だった。
    デフォルト値をうんと大きくセットすることにした。
    query = gdata.calendar.service.CalendarEventQuery(username, ‘private’, ‘full’)
    query.max_results = 1000

    参考:Setting max_results on private CalendarEventQuery for non-default calendar