タグ

ブックマーク / mopemope.hatenablog.com (26)

  • Semicolonless Java を実現する話 - Doge log

    Semicolonless Java を実現する話 デンジャラス!ゾンビ!!! こんにちは!ゲームマスターこと 檀 黎斗 です! 2000 年問題でバグスターウィルス見つけたの僕ですから!! からのー ジュリアナー!!トーキョー! こんにちわ、ジョン・ロビンソンこと半ズボンの宇宙人です。 ↓ ↓ ↓ ↓ ↓ ↓ ↓ どうです?なんていうかアメブロっぽい感じっていうの?ムカつくでしょ?? そうでしょう!そうでしょう! ところでみなさん、Java 書いてますか?Generics 理解してますか? 無駄にドリコムのスライドに釣られてませんか? 今回は Semicolonless Java について書いてみたいと思います。 Semicolonless Java Semicolonless Java とはその名の通り、セミコロンを使わずに Java でプログラミングすることです。 ある種のパズル、コ

    Semicolonless Java を実現する話 - Doge log
    yuiseki
    yuiseki 2017/03/22
    ジャバ
  • Pythonでのクロージャは? - Doge log

    Perl のクロージャを読んでちょっと気になったので。 Pythonの場合、簡単な例でいくと def func1(args): x = args def func2(y): return y+' :closureValue='+x return func2 a = func1('test') print a(' closure') a = func1('abc') print a(' closure') a = func1('efg') print a(' closure') 実行結果は以下 closure :closureValue=test closure :closureValue=abc closure :closureValue=efg※でも古いPythonだと動きませんね・・・。 うーん、クロージャを使う利点としては immutable化 関数テンプレート化 が大きいかなあと思

    Pythonでのクロージャは? - Doge log
  • 関数などの実行結果をすりかえる - Doge log

    こんにちは、Python界のヘンリー塚ことmopemopeです。 なんかpythonのpycファイルをいじってアタックするとかセキュリティの話が出てきてますね。 せっかくなので別の方法でこーいうこともできますよというのを紹介しておきます。 もちろん普通の人は書かないであろう、あらびきな方法です。 今回は関数などの実行結果をすりかえるという話です。 ではコード。 steal.h #ifndef STEAL_H #define STEAL_H #include <Python.h> #ifdef DEVELOP #define DEBUG(...) \ do { \ /*printf("%-22s%4u: ", __FILE__, __LINE__);*/ \ printf("%-22s %-32s%4u: ", __FILE__, __func__, __LINE__); \ printf

    関数などの実行結果をすりかえる - Doge log
    yuiseki
    yuiseki 2011/10/12
  • werkzeug その2(Routing基礎) - Doge log

    前回とりあえずテスト用サーバの起動、何かを表示するまでをやった。 早速Requestを作って云々したいところだけど、先にRouting部を見ていく。 Routing System Routing SystemとはURLと実処理である関数の紐づけする仕組みの事。 werkzeugはこの機能も提供している。 もちろんスクラッチから組み上げる事ができるので既にあるRoutingライブラリである、Routesなどを使う事も可能 である。(絶対に使わないけど) どのURLにアクセスしたRequest云々をどの関数に渡すか?などを決める重要な仕組みになるので先に実装しておく。 主なRoutingの定義方法は2種類ある。 URLと関数のmappingを全体(サブ)まとめて定義する方法 関数にデコレータでURLをmappingする方法 djangoなどはまとめて定義する方法、TGなんかは下の方法でmapp

    werkzeug その2(Routing基礎) - Doge log
  • werkzeug その1 - Doge log

    werkzeugのチュートリアルを見てもいいんだけどせっかくなのでスクラッチから Webアプリケーションを組んでみたいと思う。 最終的にDBを絡めて簡単な投稿フォームとかまでできたらやりたい。 はじめの一歩 とりあえずwerkzeugをインストールする 大概はこれで入る sudo easy_install werkzeug その他、必要なものは随時入れていく事にする。 プロジェクトの雛形 インストール後、早速何をどうしたらいいのかわからないのでまずはプロジェクトの雛形を考える。 . -- example -- __init__.py `-- application.py `-- manage.py まず最低限の構成から組みあげる。 後々、テンプレートやモデルの置き場を考える。 manage.py -- テストサーバ起動、DB作成などの支援スクリプト example/application

    werkzeug その1 - Doge log
  • werkzeug - Doge log

    何かと最近話題のwerkzeugですが、こいつが一体なんなのか 書いてみる。 werkzeug ドイツ語で工具を意味する。pythonistaがwebアプリケーション 開発を書くための工具であるようなライブラリ。 (あくまで工具である) 具体的にはWSGI Utilityで、粒度の小さい部品のみを提供する。 部品、部品はバラ売り状態で、基的にはWSGI対応フレームワ ークをスクラッチで組み上げるための物である。 (フレームワークを作るためのフレームワーク) 提供機能 提供してる機能は以下であるが、基的なレベルまで実装されて いる。 代表的なもの Wrapper Request Object Response Object Request Mixin Object(Reqest拡張に使う) Response Mixin Object(Response拡張に使う) Routing Syst

    werkzeug - Doge log
  • sqlalchemyでデータを操作する - Doge log

    いろんなデータベースを触る際、それぞれでツールの使い方を覚えるのがめんどいので書いた。 (昔、django版も書いたけど) sqltools.py from sqlalchemy import create_engine, MetaData from sqlalchemy.orm import mapper from sqlalchemy.orm import sessionmaker from types import ClassType import re def camelize(str): p = re.compile(r'_([a-z])') return p.sub((lambda match:match.groups(0)[0].upper()), str.capitalize()) def initialize(url, *args, **kwargs): engine =

    sqlalchemyでデータを操作する - Doge log
    yuiseki
    yuiseki 2010/11/01
  • meinheld Cotinuations - Doge log

    こんにちわ、韓流スターことmopemopeです。 meinheld 0.2よりContinuationをサポートしました。 これでlong poll(comet)も組めるようになります。 chatの例:http://github.com/mopemope/meinheld/tree/master/example/chat/ from flask import Flask, render_template, request, session, jsonify import uuid from meinheld import server, middleware SECRET_KEY = 'development key' DEBUG=True app = Flask(__name__) app.config.from_object(__name__) def create_message(f

    meinheld Cotinuations - Doge log
    yuiseki
    yuiseki 2010/08/27
  • meinheld websocket - Doge log

    こんにちわ、しのまりファンことmopemopeです。 meinheld 0.3よりwebsocketをサポートする予定です。 websocketはmiddleware経由で取得できます。 WebSocketMiddlewareを使うとenvironからwebsocketを取得できます。 シンプルなチャットはこんな感じ。 meinheld/websocket_chat_simple.py at dev · mopemope/meinheld · GitHub import os from meinheld import server, middleware, websocket participants = set() """ @websocket.WebSocketWSGI def handle(ws): participants.add(ws) try: while True: prin

    meinheld websocket - Doge log
    yuiseki
    yuiseki 2010/08/27
  • meinheldをリリースした - Doge log

    こんにちわ、闇金業者です。 Cの練習とPEP333の実装として作っていたpicowsですが、せっかくなのでpypiにあげることしました。 名前も変えてmeinheldにしています。 meinheld · PyPI あとbitbucketもなんだか寂しい気がしてきたのでgithubに移動しました。 http_parserの変更など中身は大分変わっています。 明らかに過度のチューニングです。 hello_worldでabでベンチをとるといかに過度のチューニングであるかわかります。 インストール linux onlyです。 pypiから easy_install -ZU meinheld 使いかた 使い方は特に難しくありません。 from meinheld import server def hello_world(environ, start_response): status = '200

    meinheldをリリースした - Doge log
    yuiseki
    yuiseki 2010/08/27
  • Flaskを触ってみる 1 - Doge log

    Flaskですがあんまり書かれてなさそうなので書いておきます。 Flaskはmitsuhiko先生が作ったmicroframeworkです。 Flaskが指すmicroは単純に小さいというわけではなく、他のライブラリをつなぎ、シンプルなAPIを 提供する小さなフレームワークのようなイメージです。 Flaskは werkzeug jinja2 に依存し、単体の機能はそれらに任せています. Flaskそれらをうまくつなぎ合わせ、シンプルなAPIをユーザに提供しています。 そのため、Flaskは1ファイルで構成されています。 (つなぎの部分なので小さい。APIのドキュメント込みで900行を切っている) 一応Flaskはmicroframeworkとしていますが、コアはwerkzeugです。 werkzeugは大規模サイトなどの実績もあり、大変便利なライブラリです。 Flask自体で提供されていな

    Flaskを触ってみる 1 - Doge log
  • eventletのクライアントコードサンプル - Doge log

    書いてる人ほぼ見たことないので書いておくかな。 from os import path import eventlet from eventlet.green import urllib2 from pyquery import PyQuery as pq from urlparse import urlparse empflix_url = 'http://www.empflix.com/browsecat.php?page=%s&chid=17&category=mr' save_path = "/tmp" pool = eventlet.GreenPool(2) def get_asian(page=1): q = [] conn = urllib2.urlopen(empflix_url % page) page = conn.read() d = pq(page) for spa

    eventletのクライアントコードサンプル - Doge log
  • 最近のeventlet - Doge log

    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が通るので問題なくeventlet.hubs.libevent.Hubが使われてる。 そもそもimport eventが通ってない可能性がある。 hubの実装は実はそんなに大変じゃあないんだけどめんどい場合は twistedreactorを使わせる方法でもいいかな。 twistedreactorを使うにはeventよりも先にreactorをimportする必要がある。 あとreactor.runは自前で叩かないとダメ。(だったはず) 追記

    最近のeventlet - Doge log
  • 速いサーバを書いても意味がないという話 - Doge log

    全く意味がないというわけではないが。 結局アプリケーションコードが圧倒的にトロいので、サーバ側の処理部がほぼ誤差レベルになる。 レスポンス返すまでの処理時間の9割ぐらいがアプリケーションコードでとられる。 なので次はアプリケーションコードの高速化を考えてみようと思う。 方向としてはwerkzeugの遅い部分をCで書くとかそんな感じ。 処理をそのまま単純にCに置き換えてもframe作成などのframe系の処理がとっぱらわれるはずなので それだけでもパフォーマンスはあがるはず。 (frameの割り当て、解放などはそれなりに時間がかかる。unladen swallowもその辺を気にしていたはず)

    速いサーバを書いても意味がないという話 - Doge log
    yuiseki
    yuiseki 2009/09/28
  • tornadoの話 - Doge log

    話題のtornadoについてちょっと書いておきます。 フレームワークについて tornadoは一応wsgiをサポートしていますが気で組むなら独自で持ってるAPIの方がよいでしょう。 独自のAPIの方は必要最低限な処理しかしません。 無駄なアプリケーションコードを少なくすることでパフォーマンスを得ています。 もちろんアプリケーションコード実行間はブロックしていますが、その時間をなるべく少なくしようという 観点で薄いフレームワークになっています。 (ほとんど1ファイルの小さなモジュールになっているはずです) ここで変にwsgi対応のFWを乗せたりしようもんならパフォーマンスはかなり落ちるのでやらない方がいいでしょう。 wsgiはインターフェイスがぬるいためFW側で結構な量のコード実行することになります。 ハッキリいってpythonはそこまで速くありませんのでチリも積もれば。。。といった感じで

    tornadoの話 - Doge log
    yuiseki
    yuiseki 2009/09/28
  • モダンPython開発環境入門 - Doge log

    今日、KevinさんところにBespinの話が出ててそいつを見てて思った。 最近のpython開発環境はこんな感じだろうと。 エディター 軽量なものが好まれてるのはまあどこもみんな同じだろう。 vim emacs TextMate MacだとTextMateを使ってる人がやはり多いっぽい。 ターミナル 素。 screen必須。 必須な理由はvirtualenvでactivateするからかな。 utilityモジュール もうほぼ鉄板でpip, virtualenvを使ってるっぽい。 pip virtualenv paver Bespinの動画ではpaver軽油で色々やってる感じだった。 いろんなタスクがpythonスクリプトでざくざく書けるので流行るかも知れない。 VCS まあこれももう鉄板かも。 git mercurial その他 環境に関係ないけど傾向。 sqlalchemyは市民権を得

    モダンPython開発環境入門 - Doge log
    yuiseki
    yuiseki 2009/08/26
  • Mercurialのhookをplugpyで書く - Doge log

    まだbranchなんだけど思いついたので書いておく。 次で入れるかも。 Mercurialのhook Mercurialのhookはpythonで書くことができる。 設定するには.hgrcに [hooks] #python:<モジュール名>.<メソッド名> update=python:foo.bar "python:"ではじめて、<モジュール名>.<メソッド名>と書いておくと呼ばれる。 まあ呼ばれるんだけどふつーのモジュール扱いなのでhook用のscriptは PYTHONPATHを通すか、あるいはパッケージにしてinstallなどpythonから見える ようにしなくてはならない。 まあそれがめんどいなあと思ったのでplugpyにhg用のextを追加してみた。 plugpyを使う 設定はこんな感じ [hooks] update=python:plugpy.hg.hook commitだろう

    Mercurialのhookをplugpyで書く - Doge log
    yuiseki
    yuiseki 2009/08/24
  • setの話 - Doge log

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

    setの話 - Doge log
    yuiseki
    yuiseki 2009/07/31
  • virtualenv - Doge log

    最近、流行りのvirtualenvですが、仕組み的なものにあまり触れられてないように 思えたので書いてみます。 機能 とりあえずvirtualenvの機能は ライブラリがまっさらな状態な環境を作る 作られた環境に対してのみモジュールをインストールできる です。 これを実現する仕掛けはそれほど難しくありません。 (virtualenv自体も基的に1ファイルのモジュールです。) とりあえず簡単に見ていきます。 ライブラリパス まっさらなライブラリを持った状態のpython環境はどうやって作るのでしょう? pythonは自分自身のパスの上位のlib/pythonx.xをライブラリとして認識します。 (pythonをソースからprefix指定でビルドした事があればわかると思います。) . |-- bin | `-- python `-- lib `-- python2.5 `-- ここが標準ライ

    virtualenv - Doge log
    yuiseki
    yuiseki 2009/06/29
  • Python力を高めるためのライブラリコードリーディング - Doge log

    id:yuroyoropython力を高めるとか言ってたのを聞いて、自分の場合どうだったかなあと。 思い入れがあるものを簡単に。まあ参考になれば。 pure python系 まずはpure python系 django 結構python初心者のころからdjangoのソースは読んでた。 多分、今ほど大きくなかったからだと思う。 学べることはPEP8、__import__の使い方、デコレータによるトランザクション管理などなど多岐にわたる。 但し、いきなりモデル周りに手を出すときついのでWEB側の入り口である方 django.core.handlers.base.py ぐらいがいいかなと。 middlewareってどうやって呼び出し、実行してるか、urlの解決方法などから入ると割りととっつきやすいかと。 フルスタック故カバーしてる範囲が多いのでずっと参考になる。 標準ライブラリのソース あんま

    Python力を高めるためのライブラリコードリーディング - Doge log
    yuiseki
    yuiseki 2009/04/28