Big Sky :: 非同期UI


UIの開発に有利な言語にはある程度、共通する物があると思う。
* 匿名関数をコールバックとして扱える
* サードパーティでも良いので非同期処理の仕組みがある
* GCが効く
この内、2個か3個あてはまるとUIを扱う上で有利になると思う。
Objective-Cはひとつないと思ったけど非同期処理はあった。しかもしっかりしてる。
でもjsからやってくると辛い。匿名関数かけないのはめんどいだけだけどGCが効かないのは辛い。

C++のstaticを知ろう!

C++にもPHPとおなじようにstaticがあります。
驚くべきことに以下のコードはgccで文句も言われずにコンパイルできてしかも期待通りに動きます。

class A {
public:
	static int add(int n, int m) {
		return n+m;
	}
};
#include <iostream>
int main() {
	A *p = new A;
	std::cout << p->add(1,2) << std::endl;
	return 0;
}

なぜプログラマはstaticを知らないのか。

PHPのstaticを知ろう!

たとえば文字列から数字の部分だけを取り出して整数として返す関数を作ることにします。

class Util {
    function asNumber($s) {
        return intval( preg_replace('/\D/', '', $s) );
    }
}

こういうの関数を作って呼び出すときに

$name = 'ku0522';
$util = new Util();
$util->asNumber($name);

このようにUtilのインスタンスを作ってそのメソッドとしてasNumber()を呼び出していませんか。
PHPだと

<?php
(new Util())->asNumber($name);
?>

とするとエラーになっていちいちnewするのがめんどくさいですよね。
こういうthisを参照しないメソッドを呼ぶときは関数にstaticとつけてあげればnewする必要がなくなります。

class Util {
    static function asNumber($s) {
        return intval( preg_replace('/\D/', '', $s) );
    }
}

このようにfunctionの前にstaticつけるだけで

<?php
Util::asNumber($name);
?>

こう書くことができるようになります。

chromeのヒストリ検索の謎

実装はsqliteのfull text searchで細かいところは見てないけど動作がよくわからない。

1. ヒストリを消去
2. googleで"京都大学"を検索 http://www.google.co.jp/search?sourceid=chrome&ie=UTF-8&q=%E4%BA%AC%E9%83%BD%E5%A4%A7%E5%AD%A6
3. chromeのヒストリ検索で京都大学生協を検索 -> ヒットする chrome://history/#q=%E4%BA%AC%E9%83%BD%E5%A4%A7%E5%AD%A6%E7%94%9F%E5%8D%94
4. 京都大学で検索 -> ヒットする chrome://history/#q=%E4%BA%AC%E9%83%BD%E5%A4%A7%E5%AD%A6
5. 生協で検索 -> ヒットしない chrome://history/#q=%E7%94%9F%E5%8D%94

でも
http://mall.seikyou.ne.jp/shop/WFTankyoTop.aspx?t=6501はヒストリ検索で"生協"で検索したらヒットする。なんで? 文字コードの違いかなあ...

辞書は持ってないようなので単純なn-gramかと思ったら"都大"だとヒットしない。検索した時にそのキーワードを含んでないページもヒットしたりすることもある。ちょっとコード見たら入力されたテキストを加工してから検索してるみたいなので、そこにバグがあって大体正しく動くけどへんになってるとかなのかも。

文字クラス(漢字とひらがな、英数とか)が違うところで単語として分けてるみたいなので、そのクラス分けが正しくないとか? でもそれだと生協現象は説明できないな。

空豆


あるときその取れたての空豆を口にしたときは世界が変わってしまった.世界観が変わってしまったという方がピタゴラスを持ち出したのだから相応しいかも知れない.兎に角美味いの何のって、食べた明くる日自分では料理したことのない空豆を近所で買い求めて食べたが、これはとても食べられる代物ではない.取れたての魚の刺身と一週間ほど冷蔵庫に置いた刺身の違いほどにも味が違う.
とれたてたべてみたい。ずっと空豆はまずいと思ってきた。

chromiumタンブラーはじめました

Twitter / swdyh: chrome情報おっかけたい、どこみてるの?
Chromium/Google Chrome - 0x集積蔵

Firefoxは一般向けニュースからXPCOMの仕様変更まで、いろんな日本語のブログがあるけれどchromeにはそういうのがない。
みんなでおんなじのを見るのも不毛だからそういうのを立ち上げたらいいんじゃないかと思って、先週からtumblrchromeタグつけてpostしてみてます。

http://ku.tumblr.com/tagged/chrome

RSSもあります。http://ku.tumblr.com/tagged/chrome/rss
(thx Twitter / cxx: @ku http://ku.tumblr.com/t ...)

tumblr特定タグのついてるものだけのRSSとか出してくれないので、そのうちちゃんと用意したいところです。Tomblooだけでpostできるようなブログをお手軽に新しく作る方法がないかなーとおもってるんですけどいい方法が教えてください。


けっきょく別に作りました。

http://chromium.tumblr.com/

一番遅いところを速くしないと意味がない

yahoo tech blog祭りに便乗してあんまりyahoo tech blogとは関係ないんだけどひとつ書くよ!


時間が掛かりすぎるので100回にしました。それでもEの例では4秒も掛かっています。

こういう1000回測ってこんだけ速い!っていうのはよく見る。ここでは100回で4秒なのでフォームを作るのに40msかかってる。けっこう遅い。複数これくらいの遅さのやつがあって100msオーダーになってくると多分体感速度でも違ってくる。amazonだと100msで売り上げが1%変わるとかって書いてあるので100msレベルで遅いのは努力して改善できるのなら改善するべき。
あなたのウェブサイトを高速化する方法 - page3 - builder by ZDNet Japan

でも10,000回測って4秒(1回4ms)くらいのレベルだったら、そこに努力を注ぎ込むくらいならほかのところで努力した方がいい。わりとシンプルなJavaScript の不思議な面白さ - 第三回 (Yahoo! JAPAN Tech Blog)のページでもレンダリングされるのに700msくらいかかる。そこで4ms速くしたところで通信にちょっと時間がかかっただけで吹き飛んでしまうので意味がない。


なにがどれくらいの時間がかかってるっていうのを測定しておくのは大切で、その努力して改善させられる実行時間が実行時間全体に与えるインパクトがわかるようになる。わかってないと意味のないところに努力を注ぎ込んでたりすることになる。