TOP>全般

2012年04月18日

smart match operator

23:10 tokuhirom: ""~~0
23:10 tokuhirom: true
23:10 tokuhirom: ""==0
23:10 tokuhirom: true
23:10 tokuhirom: undef~~0
23:10 tokuhirom: false
23:10 tokuhirom: undef==0
23:10 tokuhirom: true

But perlsyn says

           Any     Num       numeric equality         $a == $b
           Num     numish[4] numeric equality         $a == $b

Why undef~~0 is not consistent with $a==$b?

2012年04月07日

IRC Protocol Parser を書いた

http://tokuhirom.github.com/nanoircparser/

C++ で 1ファイルでうごく IRC の protocol parser を書いたので github にアップしておきました。

IRC のクライアントライブラリは、イベントのハンドリングが主で、ライブラリになっていなくても手でくみたてればわりと十分だったりするので、面倒な protocol parser の部分だけさくっとかいてみました。

ベンチマークはとっていませんが、速度はそれなりにでてるんじゃないかとおもいます。client side で気軽にうごかすボット、みたいなシーンを想定しているので、わりと富豪的な実装になっていますけれど。

今回、工夫した点としては re2c を利用してパーズしてます。このおかげで非常に見通しがいいコードになってます。RFC にのっている BNF のほとんどそのままなので、よみやすいんじゃないかとおもいます。re2c つかってみたかっただけなので、もっといい方法があるのであれば、それはそれで。

IRC ボットを C++ で書きたいなあ、なんていう人が世界にどれだけ存在しているのかは知らないが、そういう人には役にたつのではないかとおもいます。

僕はそんなことしてる人、一人ぐらいしか思いつきませんが、たぶん世の中はひろいので意外と存在するのではないでしょうか。

なにがいいたいかというと、これと libuv をくみあわせると、C++ で簡単に IRC ボット書けるはずだよ、ということです。

2012年01月14日

[js]最速な Javascript のリファレンスマニュアルサイトをつくった

http://jsapi.64p.org/

jQAPI - Alternative jQuery Documentation - Array.forEach

Javascript のリファレンスマニュアルといえば MDN(Mozilla Developers Network) が有名ですが、MDN の資料は探索がめんどくさいし、表示が遅いということで使い勝手がわるいという問題がありました。

そこで、jQuery のリファレンスマニュアルサイトとして有名な jqapi.com とおなじよような使い勝手のサイトがあったらいいのになーとおもいました。

なので、つくりました。

サイト自体はすべて static なデータで構成されているので、github からデータを取得すれば、イントラや自分のマシン内で閲覧することも可能となっています。

なお IE での動作確認はしていないので、うまくうごかない場合は pull-req してください。

Internals

https://github.com/tokuhirom/jsapi コードはこちらにあるので、ご利用ください。

データの生成部分(crawler.js)

データの生成はすべて node.js でやっています。スクレイピング処理は当初 wget でやっていたのですが、wget で処理すると、ディレクトリの処理が微妙なので、手でscraping することにしました。取得したデータは gdbm に保存しています。

HTMLデータの変換(convert.js)

取得したHTML をそのまま利用するのはむずかしいので script タグの除去などをおこない、HTML を整形します。

libxmlext というライブラリを利用して処理をしています。当初は jsdom を利用していたのですが、速度面にだいぶ難があったのでのりかえました( see http://d.hatena.ne.jp/tokuhirom/20111226/1324856715 )

目次 JSON の生成 (mkindex.js)

index.json という目次データの生成をします。ここでも libxmlext を利用しています。とくにむずかしい処理はおこなっていません。

navigation.html の生成(mknavigation.js)

サイドバーの HTML を index.json から生成します。

【広告】

サイト内検索

メンバー紹介

このサイトに自分のブログを載せたい!
(ブログの登録は無料です。)


カテゴリー

アーカイブ

最新の情報をお届け!