2011年 03月 02日

gerry++

2011年 02月 28日

Benchmark.javascript

Benchmark.javascript - jsdo.it - share JavaScript, HTML5 and CSS

ベンチマーク計るやつを jsdo.it に置いときました。jsdo.it だと HTML も含めてセットにできるのでいいですね。Fork していくつか関数を定義するだけでベンチ計れるので、ぜひお使いください……

(jsdo.it のブログパーツがはれるようになったみたいですね)

2011年 02月 26日

gerry++

2011年 02月 25日

prototype と new がダメってどこ情報よ〜

2011年 02月 23日

gerry++

2011年 02月 22日

アマゾンのうけとりわすれないように > 俺

CORE::qr が呼ばれないように正規表現パターンを定数化したら速くなった

Text::Xatena の nytprof 結果を眺めていたら CORE::qr がやたら呼ばれていたので、use constant で qr// をループの外に出したら速度が多少改善した。通常の正規表現マッチは勝手にいい感じに定数っぽくしてくれるけど、正規表現パターンはしてくれないのかな。

before
-Rate   Hatena  Textile Markdown   Xatena
-Hatena   26.8/s       --     -84%     -86%     -89%
-Textile   171/s     537%       --      -8%     -27%
-Markdown  186/s     594%       9%       --     -20%
-Xatena    233/s     770%      37%      25%       --
after
+           Rate   Hatena  Textile Markdown   Xatena
+Hatena   26.5/s       --     -85%     -86%     -93%
+Textile   175/s     563%       --      -8%     -56%
+Markdown  191/s     621%       9%       --     -52%
+Xatena    395/s    1393%     125%     107%       --
2011年 02月 21日

Android でウェブ側からアプリケーションを起動したいときのベストプラクティス

ウェブ側からリンクを貼って特定のアプリを起動させる場合、独自スキームを使うというのは自然な流れでまぁ普通そうしたい感じですが、対象アプリが入っているか否かをウェブ側から取得することができないため (できるの?)、アプリが入ってないユーザさんに対してブラウザのそっけないエラー画面になってしまうのであまり好ましくありません (アプリが入っていることがほぼ確実ならこれでいいけど)

現状でこの方法は簡単には解決できなくて、おそらく現状のベストプラクティス的には http を併用するのかと思っています。

  • fooscheme:openapp をアプリケーションでハンドリング
    • 確実にアプリが入ってることが判定できる場合に使う?
      • 普通にインテント使えばいいので、たぶんあんまり使うケースない……
    • スキーム無闇に増やすと怒られる
  • http://mydomain/openapp をアプリケーションでハンドリング
    • ウェブからアプリを起動したいときに使う
    • URLには「アプリケーションをインストールする」ページを作っておく
    • このURLにアクセスすると Browser とアプリ2つ表示されてしまうので、デフォルトでアプリを開くようにユーザを促す
        <activity android:name=".PostEntryActivity"
                  android:label="@string/app_name"
                  android:screenOrientation="portrait" android:configChanges="orientation">
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.ALTERNATIVE" />
                <category android:name="android.intent.category.BROWSABLE" />

                <data android:scheme="fooapp" android:host="open"/>
                <data android:scheme="http" android:host="fooapp.example.com" android:pathPattern="/openapp"/>
            </intent-filter>
        </activity>

とはいえ、この方法モノリスでやるときにとろうとしたんですけど、何かがうまくいかなかった気がするので本当にこれでいけるか不安です。(今試した感じ想像通りに動いたので、うまくいかなかったのは当時の勘違いだったかもしれない。あるいは Android1.6 だとブラウザ内の http:// に関しては確実に Browser が制御を奪ってしまっていたような気がする)

2011年 02月 20日

gerry++

2011年 02月 18日

Firefox、Mac OS X で2つ以上インスタンス化すると、-no-remote の有無に限らず最初に起動したほうが open http://.../ で使われるのはどうにかならないのか

バイナリもう1つ作って Contents/Info.plist のそれっぽいエントリを消したり、s/Firefox/XXXXX/g したりするとうまくいくようだ……