タグ

ブックマーク / labs.gmo.jp (14)

  • selectの実装探訪 - bits and bytes

    selectの実装については前にどこかで詳しく読んだ気がするけれど、見つけられなかったので自分でselectの実装を調べました。手元に新しいもののソースがないので、古いけれどRedHatのLinux2.4.20のソースを読んでいます。 selectの復習 まずselectがどういう動作をするかを正確に思い出せないのでselectについて調べます。 Manpage of SELECT によれば int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout) こうなっています。fd_setには、その状態(readfdsならブロッキングなしで読み出し可能な状態)になっているかどうかを調べたいディスクリプタのセットを渡して、nfdsには渡したディスクリプタの中で最

  • TheSchwartzで仕事をあとにまわす - bits and bytes

    web2.0 時代のジョブキューサーバー Gearman と TheSchwartz の関係について - TokuLog 改めB日記に書かれているとおり、Gearmanは仕事を投げられたらすぐやって返す前提になっていて今やりたくないけどあとでやるみたいなのができません。 たとえば、10分後にならできるんだけど、という仕事が来たとします。 このときGearmanのワーカの中でsleepして10分待つと、後から来たほかの仕事を一切しないで10分待つことになってしまって、後から来た仕事が今すぐできるものだったとしても10分待たれさるのでGearmanだと今来た仕事のためにsleepして待つわけにはいきません。 結果としてGearmanだとやってきた仕事を今すぐやるか、絶対やらないか、の二択になってしまいます。 それだと困るので、もう一方のTheSchwartzだと、今やりたくないけどあとでやる、

  • FirefoxのlivehttpheadersでHTTPリクエストの中身が見られるしくみ - bits and bytes

    サーバに送っているHTTPリクエストのヘッダやレスポンスのヘッダが見られるFirefoxのextension livehttpheaders がどうやってこの機能を実現しているのか調べてみました。 HTTPリクエストを送るタイミングでイベントを捕まえることができるんだろうと予想して探してみるとLiveHTTPHeaders.jsの43行めからのaddToListener()に function addToListener(obj) { ... snip ... // Should be a new version of Mozilla/Phoenix (after september 15, 2003) var observerService = Components.classes["@mozilla.org/observer-service;1"].getService(Compone

  • FirefoxのsetTimeoutの実装 - bits and bytes

    Firefoxのソースコードを追っているうちに、たまたま1年遅れで IT戦記 - JavaScript を学ぶ際に一番重要なのに、誤解されがちな setTimeout 系の概念 の裏側がどうなっているかがわかったので、その話を。 タイマーの管理方法 そもそもjavascriptからsetTimeoutを呼ぶと、どういう仕組みで指定した時間後に渡した関数が呼び出されるようになっているのでしょう。Linuxであればsleepのように一定時間後にawakeするという処理は、タイマーリストによって管理されています。カーネルの中にN jiffies(LinuxのOS内時間の単位はjiffyと呼ぶそうです)経過後に実行することリストがあって、カーネルが4msごとに毎回タイマーリストをチェックしてやることがあったときにはそれを実行しています。 FirefoxもLinuxと同じようにタイマーリストみたいな

    mogwaing
    mogwaing 2007/09/22
    すばらしい。わかりやすい。
  • Firefoxのsqliteデータベースの中身を表示する Storage Inspector - bits and bytes

    今日は javascript拡張機能のコンテキストで実行できる Execute JS をみつけたときにいっしょに見つけた Storage Inspector :: Firefox Add-ons をご紹介します。 Firefoxは2.0から mozStorage というsqliteと同じものが組み込まれていて Google Browser Sync などで使われています。Storage Inspector は、このmozStorageで作られたデータベースの中身をちょこっと見るときに便利なextensionです。今のところ見られるだけでデータの編集はできません。 インストールすると、メニューの[ツール] に Storage Inspector という項目が表示されるようになります。 起動するとsqliteのデータベースファイルと、データベースのテーブルを選択するためのセレクトボックス付き

  • LWP::UserAgentでBASIC認証つきでリクエストする - bits and bytes

    恥ずかしながらいままでLWP::UserAgentでリクエストを送るときにどう書くのかがいまいち分からず、ずっと毎回検索していました.... 今回検索して LWP::UserAgentでBasic認証サイトにアクセスする方法|blog|たたみラボ を読んで、そのあと HTTP::Request::Common - Construct common HTTP::Request objects - search.cpan.org と見比べて、ようやくいままでの謎が解けました。 use HTTP::Request::Common するとGETやPOST などの名前で HTTP::Request のインスタンスを返す関数がエクスポートされるので、 $ua->request(GET 'http://labs.gmo.jp/blog/ku/'); と書いたりできるようになるのだと知りました.....

    mogwaing
    mogwaing 2007/06/06
    [LWP::UserAgent][basic認証]
  • gmailで添付ファイルが自動でアップロードされるしくみ - bits and bytes

    gmailでメールを書くとき、添付するファイルを選んでからしばらくすると、いつの間にか添付ファイルがアップロードされています。 添付するファイルを選ぶと、はじめファイル名が表示されていたのが 自動的にアップロードされて、名前とファイルサイズが表示されています! 実は、あまり名前も聞かなくなった Google Page Creator がリリースされたときにいちばんびっくりしたのはページの右下にこのgmailの自動アップロードとよく似たしくみがあったことでした。で、さっそく解析してマネしてみたことがあります。今回はgmailでその仕組みを見てみます。 ちなみにその Google Page Creator には、ログインすると右下にこんな ファイルをアップロードするのに使う部分があります。 gmailの場合、メールが自動保存されるタイミングでアップロードされているかんじでしたが、こっちのはBr

    mogwaing
    mogwaing 2007/05/29
    formで指定したファイルを自動アップロードする方法
  • ファイルの先頭8バイトだけで画像のフォーマットを調べる - bits and bytes

    PHPでファイルをアップロードしたとき $_FILES にアップロードされたファイルについての情報が入っています。 そして $_FILES[...]['type'] にはアップロードされたファイルの MIME type が入っています。しかしここに入っている値は PHP: ファイルアップロードの処理 - Manual に $_FILES['userfile']['type'] ファイルの MIME 型。ただし、ブラウザがこの情報を提供する場合。 例えば、"image/gif" のようになります。 この MIME 型は PHP 側ではチェックされません。そのため、 この値は信用できません。 と書かれている通り信頼できません。ソースコードを見てみると php-5.1.4/main/rfc1867.c の SAPI_API SAPI_POST_HANDLER_FUNC(rfc1867_post

  • VOXのSCRIPT対応とユーザ認証用クッキーのドメイン - bits and bytes

    マッシュアップ、という言葉が現れる前からSCRIPTタグを使ってブログを飾るさまざまなブログパーツがありました。最近では、アマゾンの Amazonおまかせリンク や Google Analytics のように企業が提供するツールでもHTMLの中からSCRIPTタグで読み込んで利用することが増えています。 クッキーの問題 そういったブログパーツを利用するためには、使用しているブログサービスが、エントリの文やブログのサイドバーなどにSCRIPTタグを入れることを許可している必要があります。しかし、ページの中に任意のスクリプトを書けるようにすると、クッキーを発行するドメインを別にする等の対策をしなければ、同じブログサービスを利用しているユーザがそのページを閲覧したときに認証用のクッキーを盗み出せるようになってしまいます。 そこでSCRIPTタグを利用できるブログサービスが、このクッキー盗難問題

    mogwaing
    mogwaing 2007/05/17
    わかりやすい!
  • vim.org にある tips からみつけた目が覚めるようなコマンド - bits and bytes

    bonar note - vimで効率的にコードを書くための小技 を読んで、ビジュアルブロックを折り畳むコマンド zf なんてあるのをはじめて知ってね今日はこれを覚えようと思いました。そうすると前にどこかで見たような気がするけどわからないままになっていた、検索している単語をyankするコマンドを今日こそ見つけ出したくなって探していたらvim.org に tips : vim online というtips集があるではありませんか。vim pluginと同じようにそれぞれのtipがレイティングできるようになっていて(Life Changing!)さらにコメントまでつけることができます。 このtipsページ、残念ながらRSSはないのですが、とうぜん今日見つけた自分が思うんだから前から知っているひともそう思っているわけで Dapper の Firefox extension で、みているペー

  • WWW::MechanizeとSeleniumIDEで勝手APIをかんたんに作る - bits and bytes

    Selenium IDE で生成したテストケースに従ってWWW::Mechanizeを動かすためのラッパーモジュールMechanizedSelenium(仮称)を作ってみて、どれくらい使えるか試してみました。 背景 スクレイピングはもっと簡単にならなければいけないの最後でちょこっと触れていた、ウェブアプリケーションのテストケースを簡単に生成する Selenium IDE は、ブラウザでクリックしていくだけでデータを抜き出せてしまう Dapper: The Data Mapper と並んで考えさせられたツールです。 一度、ウェブアプリケーションのテストをするために HTTP::WebTest を使ってテストケースを書いたことがありました。しかし、ブラウザをマウスでちょこっとつつくだけの動作をperlで書き直すのは当に退屈な作業ですし、テストケースを書くこと自体が困難で、アプリケーションにバ

  • cookieのサイズはパフォーマンスに影響を与えるか - bits and bytes

    私は "回線が早くなった現在、データの転送よりもコネクションの確立にかかるオーバーヘッドの方が大きい" という根拠のない信念を持っています。 だから、今ではバイト数を節約するよりも、Vitamin Features » Serving JavaScript Fast のような方法でコネクションを抑えることのほうが速度的には効果があるだろう、考えていました。 そんなところに おぎろぐはてな - Cookieがパフォーマンスに与える影響 経由で Performance Research, Part 3: When the Cookie Crumbles » Yahoo! User Interface Blog に、クッキー500バイトでレスポンスを15ms改善できるという記事を見つけて、単純に500バイトを15msで割ったら300Kbps程度で日じゃあり得ない遅さですが、小さいファイルの場

  • FirefoxのhtmlparserをXPCOM経由で呼び出して壊れたHTMLを修復する - bits and bytes

    dapper のように、ブラウザでクリックをしたところをスクレイプする、というときにはXPathが向いています。ブラウザでクリックした部分のXPathをサーバに保存しておけば、あとで保存したXPathに従ってドキュメントからエレメントを取り出すことができます。 しかし実際にHTMLからXPathを使ってエレメントを取り出すときに大きな問題になるのが、ウェブページの大半(体感で70%くらい)は記述されているHTMLが構造的に壊れているという事実です。タグを開いたまま閉じていなかったり、開いていないものを閉じていたり、ドキュメントの最後に</body></html>が二重に入っていたり、壊れかたは様々ですが、とにかくウェブ上のHTMLは大半が壊れています。壊れているHTMLが大半だからなのか、壊れているHTMLでもブラウザが適当に解釈して表示してくれるからなのか、とにかく世の中のヘージの大半

    mogwaing
    mogwaing 2007/03/02
    firefoxのhtmlパーサーを使う
  • google code でFUSEのOSXバージョンmacFUSEがリリースされる - to the early (earliest) adopters - bits and bytes

    google code でFUSEのOSXバージョンmacFUSEがリリースされる - to the early (earliest) adopters なぜいまさらwindowsのドライバ開発なのか - bits and bytes で触れていたFUSEのOSXバージョンがリリースされました。それもgoogleから!Google Code Blog で MacFUSE: FUSE for Mac OS X というポストが出ていて知りました。 簡単にFUSEを説明すると、いろんなサービスを仮想的にディレクトリやファイルとして、ファインダー(OSXでいうwindowsのエクスプローラです)から操作するようなプログラムを簡単に作るためのものです。FUSEなしでサービスを仮想的にディレクトリとしてみせるようなものを作ろうとすると、デバイスドライバの知識が必要になり非常に困難なのですがFUSEがあ

    mogwaing
    mogwaing 2007/01/26
    macFUSE
  • 1