python

StormのTopologyをグラフにして見る(手抜き

StormのTopologyBuilderの設計はいまいち好きじゃないんですが(idで指定なのと、setBolt・setSpoutが分かれているところ)、それはともかく、できあがったTopologyはグラフにしないとパッと理解できないので、Pythonで適当に書いてみました。 builder = Top…

Flaskをさわってみる

軽量なWebフレームワークが使えたら便利な場面があったので、最近ちょこちょこ名前を聞くようになったFlaskをテスト。 軽くさわっただけですが、かなり好印象を受けました。使えそうな雰囲気です。 成果物 あまり良いサンプルではないですが、ゲームのスクリ…

Transformed Weight-normalized Complement Naive Bayes(TWCNB)についての実験と結果

自作ソフトにテキストの多クラス分類機能を組み込みたくて、調べてみたら Complement Naive Bayes(CNB、補集合ナイーブベイズ)というアルゴリズムが最近の流行のようで、これを検証してみることにしました。元論文 を一通り読んでから検証を進めていきまし…

文字コードをutf-8にするだけのプロキシを書いた

最近iPhoneで使っているinstapaperという"あとで読む"アプリが、時々文字コードを適切に処理してくれないので、自前で全てutf-8に変換して渡してやろうとプロキシを書いた。 google mobile proxyという手段もあるんだけど、これは携帯用なので適当なサイズに…

装甲悪鬼村正の魔方陣を適当に遺伝アルゴリズムで解く

攻略サイトを見るのも無粋だと思うほど面白い作品なのでちょっと手を止めて適当に解いてみた。 data = [] data.append( [ 25, 16, 80,104, 90, 115, 98, 4, 1, 97, 42,111, 85, 2, 75, 66, 72, 27,102, 48, 67, 18,119,106, 5, ]) data.append( [ 91, 77, 71…

app engine patchでアプリ書いたときのtipsとか

templates/404.html, 500.htmlを適当に書き換えておく これらはdjango.zip内のhtmlに依存していて、その先がmyappに依存しているのでmyappを外すと NoReverseMatch: Reverse for 'settings.myapp.views.list_people' with arguments '()' and keyword argume…

ソーシャル+メッセージングでセミクローズドなもの リリースしました

これは 掲示板やらtwitterやらを混ぜたようなものです。 メッセージ、メッセージに対するメッセージ、と層になっていくイメージで、その親子関係をajaxで軽く渡り歩けるようにしています。 RTってこんな感じじゃないかとtwitterはじめる前に思っていました。…

青空文庫形式のルビをhtmlのrubyタグに変換するモジュール

一体これが何番煎じになるのか想像もつかないが、必要になったので書いた。 青空文庫形式の文法は ルビのかかる部分を明示する 文章に|ルビ《ruby》を打つ。 明示しない 文章にルビ《ruby》を打つ。 という2パターンで、 後者は文字種の境界までがルビのか…

foobar2000で管理してるファイルのパスを変えたときにしたこと

foobar2000 v0.9.4.4でCustom Info使ってる環境での話。 パスが変わると、 メディアライブラリ、プレイリスト、再生回数、レーティングなどの情報が飛ぶ まんま全部である。 Custom Infoのデータベースを修正する custominfo_sqlite.db が対象のファイル。 …

PyPIにライブラリを登録したときのメモ

PyPIとは なんぞ?と訊かれたらPythonのCPANと答えてる。CPANがどんなものであったのかはもう記憶の彼方だが。 ユーザー登録だけ済ませれば、後はコマンド一発で新規登録から更新までこなしてくれる。 こんな便利なものをついこの間まで知らなかった。…人生…

datastoreでなんとか望むデータをぐきゅるためのテクニック

まず一例 数値と生成時刻だけを持つモデルを例に取る。 def Item(db.Model): score = db.IntegerProperty(default=0) created = db.DateTimeProperty(auto_now_add=True) ぐきゅる #itemを取得する qs = Item.all() オフセット、リミットを指定して #10番目…

mod_rewriteが扱うパスはデコードされている

foo/あああ/ をuriencodeすると foo/%E3%81%82%E3%81%82%E3%81%82/ になります。 ブラウザは日本語のURLでも自動的にこんな風にエンコードしてリクエストするんですが、このパスをmod_rewriteで、 # foo/文字列/ -> 文字列.html に変換 RewriteRule ^foo/([^…

mod_rewriteでパスを書き換えてクエリを付加しても、methodがPOSTだとcgi.FieldStorage()はそれを拾ってくれない

これはPOSTのときはstdinからos.environ['CONTENT_LENGTH']の長さだけ拾ったものをクエリストリングとして認識するからなんですが、 #cgi.pyのこの部分 if headers is None: headers = {} if method == 'POST': # Set default content-type for POST to what…

超シンプルなフレームワークを書いた

テンプレートエンジンもORマッパーも組み込んでない軽量なものです。 フレームワークとしての機能はほぼ持たず、フレームワークジェネレータといった方がいいような気がひしひしとします。 主な機能は次の2点で、 ... apis: foo: keys: - name: userid type:…

scrapbookのデータディレクトリのインデックスを作る

scrapIndexerが吐いたhtmlがいまいち使いづらかったのでpythonで適当に書いた。 14MBのhtmlとか出力してくれてうわーってなった>scrapIndexer ディレクトリ構造は無視 scrapbook.rdfは見ない ので高速 指定の最大アイテム数ごとにページを分割して吐く ソー…

pythonでWEBカメラを使ってバーコードを読み取る

ウェブカメラでぴぴっとAmazon中古価格相場とか調べることができたら不要本の処分がはかどりそうだということで適当に実装してみた。 を読み取ると、 ↓ left side character(1) not found: 1111111 left side character(1) not found: 1111111 left side cha…

データストアのoffsetは1000以上では使えない

そういえばそういう制限もあった。 offset may not be above 1000 とかエラーを返してくれる。 制約に合わせて上のアプリを修正。 重要なのは statuses = Status.gql('ORDER BY id DESC').fetch(limit, (page - 1) * limit) ↑だとoffsetが1000以上になってし…

twitterのログを自動的にバックアップするGAEアプリ(cronを使ってみる)

twitterのログを長期間残しておいて、いつでもアクセス可能にしたいな―と思ったので丁度GAEがcronに対応したことだし、とアプリにしてみた。 http://rubyu-twitterlog.appspot.com/ 実際に動いてるところ。 cronで10分ごとに http://twitter.com/statuses/us…

ATOKを簡易なtwitterクライアントとして使えるようにする

twitterでいろいろ作業ログを残そうと思うんだが、専用クライアントを使うんではどうしても一手間余分に掛かってたぶんそのうち飽きる。 これもATOKでやれればメモ帳でもブラウザの検索バーでもテキストを打てるところがあればPOSTできるよなーということで…

色の名前で検索してプレビューしつつカラーコードに変換する

自分が使いそうな機能をあれこれプラグインにしてるが、あんまりニーズはなさそうだ。 これは色の名前で辞書を引き、 その色をプレビュー 〜色などで末尾の不足があるとそれを補える カラーコードに変換 みたいな機能を提供する。 #ここから上はcolors.pyの…

日本語WordNetのデータベースを使ったATOKプラグイン(シソーラスもどき)

ATOKが半角カナの呪いでとても悲しいことになったので、ATOK2009を買った。 そしたらなんとPythonでプラグインを書けるとか。 http://www.atok.com/useful/developer/api/plugin.html どう見ても簡単そうだったので、同じくちょうど見つけたところの日本語 Wor…

app engineでよく使いそうなコード片をメモ(rsserのソースから)

いったんwebapp.RequestHandlerを継承したクラスを作ってバリデーション処理を共通させる 別にバリデーションに限らないが class AbstractHandler(webapp.RequestHandler): def v_url(self, url): if not url: logging.warning('url is blank.') return url …

rsserを使って、はてなアンテナからlivedoor Readerへ移行してみた

はてなアンテナの「管理」→「データの管理」からOPMLをダウンロードする OPMLをfirefoxなどで開いてデータが正常なXMLか確認する 正規表現で置換ができるテキストエディタでOPMLを開いて編集する bodyの子、outlineがそれぞれのアイテム type="link"になって…

どんなページでも更新情報をRSSで取得できるようにするプロキシっぽいものを書いた

http://rss-er.appspot.com/ アンテナを作ろうかと思ったんだが、cron的な仕事とapp engineは相性が悪いので諦めた データを拾ってきて変更無いかチェック、ってのを数百件ずーっとやらせるのは大変 プロセス10秒も生きてないしね んで、考えたのがラッパー…

文字列の挿入を多用する場合のパフォーマンスについて

モジュロ演算は便利だが from timeit import Timer ins = 'ins' def through(): return ins def modulo1(): return """%s""" % ins def modulo2(): return """%s0123456789""" % ins def modulo3(): return """0123456789%s""" % ins print Timer('through()…

mod_rewriteを使ってCGI環境で超高速にキャッシュを返す

キャッシュしてもいいHTMLを返すCGIであれば、以下のようにすることでレスポンスがとても高速になる coreserverとかcoreserverとか、fastcgiが使えないので考えた苦し紛れではあるが用途によってはかなり効果がありそう mod_rewriteでキャッシュがあるかを判…

javascriptからpythonへ移植したときのメモ

サーバサイドでパーサを動かしたいのでjavascriptで書いたパーサを移植した 去年までならperlで書いたところだが、appEngineが出て自分の中でのpythonの重要度がとても高くなったのでpythonモジュールに http://code.google.com/p/sorrex/source/browse/trun…

app engine書いててよく使うコード片とか

class OwnershipError(Exception): def __init__(self): self.value = "OwnershipError" class NotFoundError(Exception): def __init__(self): self.value = "NotFoundError" とかエラーを定義して def deleteItem(key, user): obj = db.get( db.Key.from_p…

perlとpython用encodeURIComponent()

App Engineと適当な鯖とjavascriptでクッキーをやりとりするのでencodeURIComponent()で動作を揃えることにした javascript encodeURIComponent() perl sub encodeURIComponent { my $str = encode('utf-8', shift); $str =~ s/([^0-9A-Za-z!'()*\-._~])/spr…