タグ

2008年10月10日のブックマーク (11件)

  • Web::Scraper in Python (もしくは scrAPI in Python) - rants

    lxml2.0からCSSSelectorが導入されたので、Web::Scraperのようなものを作ってみました。 とりあえず動作するところまでいったので載せておきます。機能はまだ全然足りてないので、簡単なことしかできません。 Python2.5とlxml2.0alpha が必要です。 Pythonはリストや辞書の中にある日語をそのままprintで表示できないようなので、めんどくさいことに全部stringにして出力してます。 Web::Scraper - naoyaのはてなダイアリーよりキーワードページから必要なデータをもってくる例。 #!/usr/bin/env python2.5 from scraper import scraper, process import codecs, sys sys.stdout = codecs.getwriter('utf-8')(sys.stdou

    Web::Scraper in Python (もしくは scrAPI in Python) - rants
    rawwell
    rawwell 2008/10/10
    "lxml2.0からCSSSelectorが導入されたので、Web::Scraperのようなものを作ってみました。 とりあえず動作するところまでいったので載せておきます。機能はまだ全然足りてないので、簡単なことしかできません。"
  • Parallel Pythonで分散処理

    Erlangでなくて、Pythonで分散処理を書く意義はなんだろうかと考えた。 Erlangはたしかに分散処理が得意なんだろうけど、いろいろ調べた感じでは、複雑な数値計算などの分散処理には向いていないというウワサだ。良く知られているTwitterや通信の例のようなシンプルな処理を膨大な量さばくにはいいようだけど。 計算を分散で行う場合、来はGoogleが採用しているように、C++をベースにすべきだろう。 (ただし、GoogleではSawzallという独自言語で記述し、それをC++に変換して実行するそうな。) そうなると、「なぜPythonで分散処理?」というのが重要になる訳だが、おそらく以下のようなことだろうか。 既存の豊富なモジュール(しかも多くはCで書かれている)を使える。C、C++で書かれたルーチンをswig等でPythonに連結し、それを分散させれば、実質C、C++で実行している

  • Python Performance Tips (Python パフオーマンスTIPS)

    Python Performance Tips このページはPythonプログラムの実行効率を改善するさまざまなTipsやトリックの紹介に特化しています。誰から得た情報であっても、その情報源を紹介するつもりです。 "fast python"ページをはじめて書いた1996年以降も、Pythonは著しく変化してきました。このことは、幾つかの規則も変化しているということを意味しています。そこで、他の誰かがこのページのメンテナンスを手伝ってくれるという期待をもって、ページをPython wikiに移動させました。 注意:これらのTipsはいつでも、読者のアプリケーションや、実際に使用するバージョンのPythonで盲目的に受け入れるだけでなく、実際に試してみることができます。 これらの新しく独自に書かれたパッケージ、例えば Pyrex 、 Psyco 、 Weave や PyInline のようなも

  • Google Protocol Buffer - hidemonのブログ

    Google Protocol Buffer というものが公開された, とGoogleのブログに出ていたので, ちょっと調べてみた. プロジェクトのホームページはこちら. そもそもなんなのか? 多言語対応のシリアライザ, デシリアライザだと思えばまちがいないだろう. つまり, オブジェクトなどの構造データをバイト列に変換したり, バイト列から構造データに変換する機能である. Javaなら標準でSerializeできるし, Pythonでもpickleすればいいんだけど, これらは言語固有のフォーマットなので, たとえばJavaで書き出したものはPythonでは読み込めない. またこれらの機能は, 言語のrefrectiveな機能を使って実装されているので, そういう要素に乏しいC++では非常に実装しづらい. 最近C++まわりを勉強していないので, ひょっとしたらあるのかもしれないけど. G

    Google Protocol Buffer - hidemonのブログ
    rawwell
    rawwell 2008/10/10
    "どうやら, もともとRPC (remote procedure call)のためのプロトコルらしく, RPCのサービス定義なども可能なようだ. 結構すごいかも."
  • 連想検索エンジン reflexa API を Python から使ってみる2 - 銀月の符号

    先日の連想検索エンジン reflexa APIPython から使ってみる モジュールを手直し。 使い方 reflexa_search に検索したい文字列を渡します。連想された語を Unicode 文字列で返してくるジェネレータが得られます。 for 文で回したり list で変換したりしてあげてください。 >>> from reflexa import reflexa_search >>> for s in reflexa_search(u'Python'): ... print s Monty Python ニシキヘビ (中略) factorial WideStudio PythonLabsスクリプトとしても使用可能です。手抜き実装ですが・・・(汗 C:\>python -m reflexa "初音ミク" VOCALOID クリプトン・フューチャー・メディア (後略) refle

    連想検索エンジン reflexa API を Python から使ってみる2 - 銀月の符号
  • 連想検索エンジン reflexa の API を Python から使ってみる - 銀月の符号

    先日、 http://labs.preferred.jp/reflexa/ を知りまして。なかなかに面白い連想結果が得られるので楽しんでいるところです。 API が公開されていたのでさっそく Python から叩けるようにしてみました。 json を解析するため demjson モジュールに依存しています。 xml の解析には BeautifulSoup モジュールを使用していますが、こちらは無くても parse_xml 関数のみが使えないだけで他は動作します。ちなみにどちらも easy_install でインストール可能でかつ Pure Python モジュールです。作成はWindows XP 上で行いましたが、 OS 問わず動くのではないかと思います。 ソースコード コードは今のところこうなっています。ver 0.1 は検索結果の JSON の解析に PyYAML をつかっていました。

    連想検索エンジン reflexa の API を Python から使ってみる - 銀月の符号
  • mixi Engineers’ Blog » Inside Tokyo Cabinet その五

    先日、MySQL Conferenceという催しに行ってきました。そこでMySQLの開発者のBrian Aker氏およびMichael Widenius氏と話をする機会があったのですが、やっぱしトップランナー達と議論するのは刺激になるなぁと思ったmikioです(その時の資料)。さて、一連の連載も今回が感動の最終回で、TCの性能上の蘊蓄をお届けいたします。 なぜdynamic hashingを使わないか Brianさん達とTCの実装についても少し議論したのですが、その際にdynamic hashingをなぜ使わないのかと問われました。その背景として、TCやQDBMではハッシュのバケット数(=格納するレコード数を予測してその数倍に設定すべき値)をデータベース作成時に指定しなければならないという問題があります。バケット数が大きすぎると空間効率が劣化し、小さすぎると時間効率が劣化するというトレード

    mixi Engineers’ Blog » Inside Tokyo Cabinet その五
  • mixi Engineers’ Blog » Inside Tokyo Cabinet その四

    涼しさに夏の終わりを感じてなんだか寂しくなるも、新しいオフィスから見えるパノラマの空の高さに癒されているmikioです。秋は気が変わりやすいこともあり、今回は唐突にDBMの並列性についての考察を記してみます。 並列性って何? 最近はマルチコアのプロセッサが当り前になってきて、そのパワーを100%引き出すために、並列性をできるだけ高めることが求められるようになってきました。それについて考える前に、まずは用語の整理をしておきましょうか。 並行性 : 二つ以上のタスクを一緒に進めること。必ずしも同時に処理を行うとは限らず、Aを少しやってからBを少しやって、それからまたAを少しやって、またBをやって...といった、いわゆるタイムシェアリングで実現してもよい雰囲気。 並列性 : 二つ以上のタスクを同時に進めること。タスクを複数のマシンに割り当てたり、複数のCPUに割り当てたり、CPU内の複数のコアに

    mixi Engineers’ Blog » Inside Tokyo Cabinet その四
  • Inside Tokyo Cabinet その参 - mixi engineer blog

    この連載のように小難しい記事が続くと、読者の皆さんだけでなく執筆陣まで引いてしまうのではないかと心配しているmikioです。いやいや、いいんです。ハッキングから夜のオカズまでバラエティに富んだブログを目指すべく、私は私なりの記事を、たとえマイノリティ向けだとしても臆さず書いてゆくのです。今回はTCの実装の詳細についてお届けします。 QDBMとどう違うの? QDBMもTCと同様にDBMの一実装で、小さくて速くて使いやすいをモットーに作りはじめて、それなりに目標を達成できたと自負しているプロダクトです。しかし、今思えばいろいろと気に入らない点がいくつかありました。TCはそれを克服すべく一から書き直したものです。具体的には以下の点が違います。 空間効率の向上 : データベースファイルのサイズがもっと小さい 時間効率の向上 : 読み書きにかかる時間がもっと短い 耐障害性の向上 : データベースファ

    Inside Tokyo Cabinet その参 - mixi engineer blog
  • Inside Tokyo Cabinet その壱 - mixi engineer blog

    約半年間の沈黙を破ってOSSの世界に戻ってきつつあるmikioです。先日、Tokyo Cabinet(以下「TC」と呼びます)というデータベースライブラリをリリースしました。今回から数回に分けて、TCの設計と苦労話について連載してみます。 DBMとは TCは、いわゆるDBMの系譜のデータベースライブラリで、単純なハッシュテーブルをファイル上で永続化するだけの機能を提供します。DBMはAT&Tの古代UNIXの時代から受け継がれる伝統芸能なのですが、私はそういう枯れた技術が大好きなのです。 プログラマの皆さんは、PerlRubyではハッシュ(連想配列)と呼ばれ、JavaC++ではmapと呼ばれるような、何らかのキーに関連づけてなんらかの値を記録するデータ構造って実によく使いますよね。例えばmixiでは、ユーザアカウントに関連する情報(名前とかニックネームとか)は、ユーザIDをキーにしたハッ

    Inside Tokyo Cabinet その壱 - mixi engineer blog
  • YouTube - Living My Life Faster - 8 years of JK's Daily Photo Project

    どの国のコンテンツ (動画とチャンネル) を表示するかを選択してください。サイトの表示言語は変更されません。