Doge log

Abby CTO 雑賀 力王のオフィシャルサイトです

社員募集

etc

アニョハセヨー(こんにちわ)、東方神起のジュンスです。株式会社Abbyでは、中途社員を募集しております。 応募資格 ・プログラミング言語で、得意言語を最低1つお持ちの方(言語は問いません) ・弊社メンバーと協力して作業を行える方。 ・やる気と技術力…

meinheld websocket

こんにちわ、しのまりファンことmopemopeです。 meinheld 0.3よりwebsocketをサポートする予定です。websocketはmiddleware経由で取得できます。 WebSocketMiddlewareを使うとenvironからwebsocketを取得できます。シンプルなチャットはこんな感じ。 meinhel…

meinheld Cotinuations

こんにちわ、韓流スターことmopemopeです。 meinheld 0.2よりContinuationをサポートしました。 これでlong poll(comet)も組めるようになります。chatの例:http://github.com/mopemope/meinheld/tree/master/example/chat/ from flask import Flask, render…

meinheldをリリースした

こんにちわ、闇金業者です。Cの練習とPEP333の実装として作っていたpicowsですが、せっかくなのでpypiにあげることしました。 名前も変えてmeinheldにしています。 meinheld · PyPIあとbitbucketもなんだか寂しい気がしてきたのでgithubに移動しました。http…

http_parserを乗せ変えた話

こんにちわ、情弱DQNです。最近は寝かしていたpicowsを見直しています。 その時にとある事が気になったのでhttp_parserを乗せ変えました。 でその時の話。 以前まで 今まではmongrel, thinなどでも使われているZedの書いたragelベースのhttp parser を使用し…

プロセス名を書き換える

こんにちわ、情弱です。 村崎百郎が殺されて少し動揺しています。話は変わって。。。 perlなどは$0でプロセス名を変えたりできて便利ですよね。 でpythonではできるの?って話です。ダメかと思ったが一応できるっぽい。 誰も書いてなさそうなので書いておき…

consistent hashing

30越えて書いたことないなんて恥ずかしいので書いてみた。 #include <inttypes.h> #include <stdlib.h> #include <stdio.h> #include <string.h> #define POINTS_PER_SERVER 100 #define MAX_HOST_LENGTH 128 typedef struct{ uint32_t index; uint32_t value; } point_item_t; typedef struct { char </string.h></stdio.h></stdlib.h></inttypes.h>…

libmemcachedのなか

ちょっと使えるかどうか調べた時に思ったこと。 libmemcached/connect.c /* libmemcached will always use nonblocking IO to avoid write deadlocks */ int flags; do flags= fcntl(ptr->fd, F_GETFL, 0); while (flags == -1 && (errno == EINTR || errno …

writevで全部書けなかった場合

なんか最近Cばっか書いてる気がするなあ。Non Blockingで書いてるとよくあるケース。 static int send_writev(int fd, struct iovec *iov, int iov_cnt, size_t total) { size_t w; int i = 0; w = writev(fd, iov, iov_cnt); if(w == -1){ //error if (errn…

属性アクセスのパフォーマンス

tp_memberだと遅くね?通常版 bench1.py class Noddy(object): first = 2 last = 1 noddy = Noddy() d = dict() d["A"] = 1 def test1(): return d["A"] def test2(): return noddy.first if __name__=='__main__': from timeit import Timer t = Timer("tes…

Flaskを触ってみる 1

Flaskですがあんまり書かれてなさそうなので書いておきます。Flaskはmitsuhiko先生が作ったmicroframeworkです。 Flaskが指すmicroは単純に小さいというわけではなく、他のライブラリをつなぎ、シンプルなAPIを 提供する小さなフレームワークのようなイメー…

サイトリニューアル

こんにちわ、DQNことmopemopeです。 うちの会社のサイトをリニューアルしました。http://abby.co.jp白黒でかっこよくなりました。 DQNの僕ももかっこよくみえればいいなあと思います。皆様今後とも、宜しくお願いします

sqlalchemyで結果をキャッシュする

こんにちわ、sqlalchemyを日本で一番使い倒してるであろうmopemopeです。 sqlalchemyのcacheに関して具体的なコードを書いている人がいないのはみんなexampleのあれを見てるからなのか? と思ったのですがあえて書いてみます。SQLの内容を60秒間キャッシュす…

Python Hack-a-thonの資料

皆様、お疲れ様でした。 Python Hack-a-thonとか言いつついろんな話ができるのがPython Hack-a-thonのいいところでもありますが、 せっかくなのでPythonの話もしていきたいですね。個人的には毎回、少しマニア向けなPythonネタを発表できればいいかなと思い…

eventletのクライアントコードサンプル

書いてる人ほぼ見たことないので書いておくかな。

最近のeventlet

http://sklave.jp/logs/2010/1/17/eventlet%E3%81%A7comet%E3%82%B5%E3%83%BC%E3%83%90を見て気になったのでわかる範囲で。 僕がeventletを見てたころより実はいろいろ変わってたりするわけだけど。 event(pyevent)はだめくさい 僕の環境だとimport eventが…

Python Hack-a-thon #3でeventletの話をします

みなさん、明けましておめでとうございます。 年末はCoD:MW2漬けだったmopemopeです。 ボコられすぎてデスの借金が2000を超えたのでコードの世界に帰ってきました。えーっと1/23にPython Hack-a-thon #3があるのですが、そこでeventletの話をしようと思いま…

文字列連結の効率の話

追記: ベンチ追加したふと思ったこと。 ret = ''.join([lst]) が速いというのは正しい。 でもそれはjoin関数が速いという局所的な話。ありがちなコード lst = [] for i in xrange(10000): lst.append("aaa") ret = ''.join(lst) string joinを使いたいがた…

picows その後

segvと戦いつつ、werkzeugのexampleが実行できるレベルまで持っていった。 なのでwsgi対応フレームワークはほぼ動くと思う。実装し忘れてたとこなどがあったり、なんだかんだで当初の予定よりパフォーマンスが出てない。tornadoのサイトに合わせて「ab -c 25…

速いサーバを書いても意味がないという話

全く意味がないというわけではないが。 結局アプリケーションコードが圧倒的にトロいので、サーバ側の処理部がほぼ誤差レベルになる。 レスポンス返すまでの処理時間の9割ぐらいがアプリケーションコードでとられる。 なので次はアプリケーションコードの高…

tornadoの話

話題のtornadoについてちょっと書いておきます。 フレームワークについて tornadoは一応wsgiをサポートしていますが本気で組むなら独自で持ってるAPIの方がよいでしょう。 独自のAPIの方は必要最低限な処理しかしません。 無駄なアプリケーションコードを少…

abのベンチをあげるコード

C

昨日ぐらいからcpu profilerと戦いつつ、うんうん考えてた方法。 思いついた方法と同じような事をnginxもやってて「やっぱそうなるのか」といった感じ。 で頂きました。 ぶっちゃけインチキコードじゃないかなあと思う。とりあえず、時間を引っぱる処理はそ…

picowsのパフォーマンス

とりあえず動かすこと優先で。 メモリリークとかcloseし忘れによるCPU食いつぶしなど直した。 abで-c 100 -n 100000ぐらいで回すとこれぐらい。helllo world ベンチ nginx 3651.08 (#/sec) picows 3394.99 (#/sec) 両方ともCPUは全開で回ってる。 nginxはwor…

シンプルなWSGIサーバ picows

WSGIサーバの勉強がてらシンプルなWSGIサーバを書き始めした。 まだ全然できてませんけど。 特徴 シングルスレッド 非同期 WSGIのみサポート これだけです。シンプルです。 呼び出しもシンプルでひとつのwsgi appしか載せられません。他にもシンプルな理由は…

メモリの開放タイミング

pythonの実メモリがいつ解放されるのか気になったので調べてみた。pythonはメモリを確保する際にドバっと取って使い回すような仕組みを持っている。 (最近の言語はみんなそうかも) この領域をarenaと呼ぶ。余談だけど2.5以前(2.5の初期も入るのかな?)の…

誕生日

とりあえず今日誕生日でした。 誰かなんかください

setの話

checked が配列なので pos in checked が遅い。 勝手に採点 (Re: 自分ならこう書く - pythonでA*) - methaneのブログ あー高速化のためにsetを使うってやったことなかったな。 計測 import timeit a = range(100000) b = set(a) def test(): return 100000 i…

たらららん♪† typeを拡張するコード †たらららん♪

OOな人がpythonにくるといろいろ追加したくなる事があるだろうということで。 ほんのちょっとだけあらびきな方法です。 追加のみのサポート 更新、削除はできない(元を書き換えると副作用で何が起こるかわからないから) 決して更新がめんどくさいからじゃ…

Listの件

見落としてたっぽい。 せっかくなのでトラバしておこう。 http://d.hatena.ne.jp/methane/20090621/1245532793 http://blog.livedoor.jp/dankogai/archives/51226075.htmlまあ拡張できるんだけどね。 listにjoinを追加してみた - def __mopemope__(self, *ar…

builtinの小文字の話

うーん、これは歴史的経緯があってそーなってると思うのでどーしようもないのかな。 pythonのOOは後付けのはずなので昔のものをそのままひきずってるんだと思うなー。 まあ変えちゃうと相当動かなくなるプログラムでてきそうだし、だからといって別名でつけ…