学校で暮らす知恵(1)

1月 25th, 2010

あいにく研究室のある建物の近くに銭湯がないので(最近根津にあることを知ったが行くのが面倒だ)、汚れ具合が微妙な時は深夜の学校の便所で頭を洗うことになる。
タオルとシャンプーは生協かコンビニで調達可能だが、洗面器はさすがにない。こんなとき便利なのがCD-R(50枚組以上のもの)の容器。洗面器ほど大きくないが、貯められる水の量はぴったり頭を洗うのに適した絶妙な大きさだからだ。

また、変な知恵が身についてしまった。

未分類

Twitter API Wikiからコードを生成する試み

1月 17th, 2010

Twitter API Documentationからスクレイピングしたデータをつかって、Twitterに対応するコードをある程度自動で生成できないかなと思って、いろいろ試している。

WikiのHTMLのソースコードがあまりにも汚いので、DOMやらSelectors APIで頑張るよりも、Lynxを lynx -dump “url” > hoge みたいに使って、その出力を利用した方が早かった。

パラメータのあたりでちょっとおかしな挙動をすることがあるけど、ざっと一覧する分にはもうこれで十分なくらいだ。

まあいつまで使えるか分からん代物なんだが。

未分類

QweenのWindows版バイナリ出しました

1月 3rd, 2010

何度も言いますが未実装の項目が多く、常用には向きません。Readmeにも目を通してね。

MinGWでビルドしています。VS2008版もそのうち出します。

未分類

QtによるTweenクローン「Qween」をpushしました

12月 30th, 2009

世の中がクリスマスで浮かれる中ひとり寂しく作り始めた、QtによるTweenクローン「Qween」をgithubにpushしました。

まだまだ未成熟であり、閲覧と投稿ができるだけ(DM, Favすら未対応!)、という雰囲気なので影響の大きそうなWindows版バイナリはまだ置きません。友人がDebian sid用のdebを作ってくれたので、使える人はそれを入れてください。

しかしQtの生産性の高さは神ですね。RADはDelphiに負けるが、Qt Creatorは今まで触ったIDE中では一番近い感触。

未分類

LazarusにGecko SDK for Delphiを移植する動き

11月 13th, 2009

FreePascal2.4.0-RC1が出て、いったいFPC界隈はどうなっているのかなと思っていたら、つい先日に”Status of Gecko SDK Port“なるtopicがLazarusのフォーラムに立っていた。どうやらMac OS Xで動かしたいらしい。

Gecko

めんどくさい

9月 29th, 2009

めんどくさいめんどくさいめんどくさi

未分類

Haikuを入れてみた

9月 16th, 2009

最初からKonatuフォントが入っていて、日本語が表示できる。
haiku

しかし、遅い…

Haiku

Qt 4.6 TP1 をビルドしてみた

9月 15th, 2009

Qt 4.6 の Technology Preview 1が出たので、ビルドしてみました。もちろん目当てはDOM APIが整備されたQtWebKitです。以前はevaluateJavaScriptというメソッドを経由してDOMをいじらないといけなかったので、速度・使い勝手的に厳しいものがありましたが、今回ははたしてどうでしょう?コードはこんな感じ:

void MainWindow::on_actionDOM_API_triggered()
{
    //DOM API版
    int i;
    QTime t;
    t.start();
    //本当は比較のためdocument.createElementと同等なAPIを使うべきだが見つからないので仕方なく断片の文字列を読み込ませている
    for(i=0;i<10000;i++)
         ui->webView->page()->mainFrame()->findFirstElement("body").appendInside("<p>aaa</p>");
    QMessageBox::information(NULL, "QWebElement::appendInside", QString("%1ms").arg(t.elapsed()));
}

void MainWindow::on_actionJavaScript_triggered()
{
    //JavaScript版
    QTime t;
    t.start();
    //断片をパースして追加するという意味ではdocumentFragmentを使って比較すべきかもしれない…。
    ui->webView->page()->mainFrame()->evaluateJavaScript("var i;for(i=0;i<10000;i++){"
                                                         "var elm = document.createElement('p');"
                                                         "elm.appendChild(document.createTextNode('aaa'));"
                                                         "document.body.appendChild(elm);}");
    QMessageBox::information(NULL, "QWebFrame::evaluateJavaScript", QString("%1ms").arg(t.elapsed()));
}

void MainWindow::on_actionTextBrowser_triggered()
{
    //QTextBrowserとも比較してみる
    int i;
    QTime t;
    t.start();
    for(i=0;i<10000;i++){
        ui->textBrowser->textCursor().movePosition(QTextCursor::End);
        ui->textBrowser->insertHtml("<p>aaa</p><br>"); //brを入れないと処理がなぜか戻ってこない
    }
    QMessageBox::information(NULL, "QTextBrowser::insertHtml", QString("%1ms").arg(t.elapsed()));
}

結果は、C++でDOMをいじった場合400ms台、JavaScriptだと1500ms台、QTextBrowserは4000ms台でした(OS: Xubuntu 9.04 on VirtualBox, CPU: Core2Duo 1.6GHz)。QWebViewのC++とJSに関しては等価なコードではないので正確な比較ではありませんが… これなら2chブラウザをQtWebKitベースで作ってもあまり問題はなさそう(4.5のQWebViewはあからさまに遅かったのでQTextBrowserを使いました)。ただし、Qt 4.6ではイベント関連のAPIの整備が延期されているようなのが残念。QWebFrame::addToJavaScriptWindowObjectを駆使するしかないんかな?

なお、JavaScript版のコードを動かした後、ui->webView->page()->mainFrame()->findFirstElement("body").removeChildren();とすると、なぜか一部の要素が残るという謎の結果が生じました。C++版だと起きず、完全にクリアされます。バグ?

Qt 4.6には、他にもJavaScriptCoreをバックエンドに選べるようになったQtScriptやQStateMachineなどおもしろげなものが転がってますので、一度さらっと眺めてみるといいかもしれません。

WebKit

「iPhone構成ユーティリティ」はWPFアプリ?

9月 14th, 2009

ipwpf

しかしインストールディレクトリにはCoreFoundation.dllなんかもあり…いったいどういう作りなんだ?

未分類

とりあえず合格

9月 7th, 2009

H木研に内定したですよー

学科・専攻