Posted at 2013-02-26 11:13:19 under テクノロジ (by key)

電車の中でコーディングする人いますよね?ね?

電車の中でペチペチ、駅に到着したらMac閉じてテクテク、移動し終わって開いてペチペチ…。夜フクロウがキンコーン!あれ、音が鳴ってる! ひょっとして電車の中でも鳴ってたの?なんてことが数回ありました。さすがにこれは恥ずかしい上に迷惑なのでなんとかしたい。

Continue reading
Tags: Mac
Posted at 2013-01-28 14:54:41 under テクノロジ (by key)

メモです。

ここ2週間くらいApache Cordovaのプラグインを書いてたりします。 Android実行中にブレイクポイントを貼っていない ExposedJSApi.class の jsMessageQueue.setPaused(false); という箇所で止まることがありました。 具体的にはexec()の中。

デバッガで注意深く追いかけて行くとUI更新の際に停止することが解りました。 手元のコードではsetImageDrawable()を実行している所で発生。


// ボタンのDrawableを更新する
button.setImageDrawable(states);

ひょっとして例外が発生しているのではないか?と考え例外をまるっと拾ってログを書きだしてみると、 Only the original thread that created a view hierarchy can touch its views. というエラーが。 どうやらUIThread以外で画面描画を行おうとしていたことが問題のようでした。

次のようにRunnableで括ってあげたら解決。


runOnUiThread(new Runnable() {
    public void run() {
        button.setImageDrawable(states);
    }
});

まとめ。

  • Cordoavaプラグイン実行中、Java内で上がった例外はExposeJsApiまで突き抜けてしまう
  • Cordova ExposeJsApiに突き抜けた例外は詳細なメッセージが表示されない(!)
  • 画面描画はUIThreadで行いましょう

典型的な落とし穴だと思うのですがあんまり情報なかったですね。

Posted at 2012-12-04 00:21:22 under テクノロジ (by key)

いつものように走り書きスンマセン。環境はnginx 1.1.19-1ubuntu0.1, mongodb-10gen 2.2.1, td-agent 1.1.10.3-1です。

nginxの設定とポイント。

  • nginxでJSONっぽいフォーマットのログを定義
  • request_time, upstream_response_timeを定義してnginxの処理時間を出力
  • 時刻のフィールドはなんでも良いが、ここではISO8601文字列にしてある(JSONだし)

td-agent.confの設定とポイント。

  • 取り込みformatはjsonにする
  • ISO8601形式はそのまま読み込めないのでtime_formatでフォーマットを指定する 参考

これでモリモリとmongodbにログが記録されていきます。ほっときっぱなしでディスク溢れて死なせないよう気をつけなければ…。


2013/1/2 追記。

fluentdが lexical error: inside a string, '' occurs before a character which it may not. というエラーを吐いてました。 具体的には$requestに含まれる文字がparse出来ずにコケました。 ユーザ入力の環境変数を取り扱う際は、対象となる変数をエスケープしておく必要があります。 nginx一般の変数としては $request, $http_referer, $http_user_agent辺りでしょうか。

HttpSetMiscModule ( 説明 )のset_quote_json_strを使ってエスケープするのが簡単そうでしたが、locationディレクティブ内でしか使えないので採用できません。

これから対応策考えます…。


2013/1/2 夜追記。

結局性能計測ログを別に分けました。

  • 通常のアクセスログ → apache互換形式
  • 性能計測ログ → CSV形式

性能測定ログ nginx.conf:

log_format  performance  '$time_iso8601,"$request",$request_time,$upstream_response_time';

性能測定ログ td-agent.conf:

<source>
  type tail
  path /var/log/nginx/performance.log
  pos_file /var/log/fluent/nginx.performance_log.pos

  tag nginx.performance_log

  format csv
  keys time,request,response_time,upstream_response_time
  time_key time
  time_format %Y-%m-%dT%H:%M:%S%z
</source>

nginxからJSON形式で出力できればベストですが、標準モジュールでは対応できそうにない(上記問題が解決できそうにない)ため出力そのものを見送りました。 HttpSetMiscModuleを改造すれば解決できそうではあるんですけども、開発コスト、トラブルリスク、維持継続の面でやや厳しいかなと。

Tags: mongodb, nginx
Posted at 2012-11-22 22:03:39 under テクノロジ (by key)

iOSシミュレータと実機で挙動が違うので確認用に書いた。BitBucketに置いてあるので使ってみたい人は CoreLocationDemo を見てください。

いろいろ試してみて、iOSシミュレータは実機と以下の点が違うことがわかった。

  • CLLocationのaltitudeプロパティ(標高)が常に0を返す
  • [CLLocationManager startUpdatingHeading]を実行してもCLHeadingが飛んでこない

標高データや方角を取り扱うアプリケーションは、テストが行いやすいようにダミーデータが食べられるよう設計する必要がありますね。 もちろん実機テストも必須でしょう。

Tags: apple, iphone
Posted at 2012-10-20 18:30:40 under テクノロジ (by key)

申請中で結果出てないんだけど、思いの外面倒だったので備忘録的メモ。 OpenGraphアクションって何?って人は、 OGP とか Facebook開発者ページ とか読んでみてください。 端的に書くとFacebook上に「自転車に乗りました」とか通知することができます。

Continue reading
Tags: facebook