2008-12-01から1ヶ月間の記事一覧

Devel::Leak::Objectでメモリーリークチェック

メモリーリークしてないかを簡単に確かめるためのスクリプトも作ってみた。以下のように使う。 Devel::Leak::Objectを使う 実行回数を変えて実行する perl tools/memory_leak.pl --loop 1 perl tools/memory_leak.pl --loop 100 実行回数に応じてDevel::Leak…

Perlのプラグイン機構

色々とコードを読んでみたけれど、プラグインの種類は大きくわけて以下の二つ。 メソッド生やす系 GLOB操作 多重継承 Mixin (MooseX::Object::Pluggable) hook系 Class::Trigger MoosseX::Plaggerize この二つの機構をサポートできれば、フレームワークの拡…

githubで共同開発

各プロジェクトのトップページ -> Admin -> Collaborators -> Add another collaboratorここでgithubのアカウント名を追加すれば、その人がYour clone urlに大して、コミットできるようになる。commiterはここに直に追加して開発すると直接pushできるので便…

依存モジュールのメモリ使用量調査

WAFのメモリ使用量を抑えたいということで、モジュールをuseしたときのメモリを調べてみる。こないだ書いたエントリのスクリプトを少し見やすくしたもの。 #!/usr/bin/env perl use strict; use warnings; use Devel::MemUsed; use Module::Depends; main();…

Module::Setupのflavorのpack, unpack

pack, unpackするスクリプトを用意しておくことで、大分作りやすくなりました。 pack_flavor.sh ~/.module-setup/flavors/angelos/にあるflavorをpackして1つのファイルにまとめる。 #!/bin/sh rm -f lib/Angelos/Script/Gen/Flavor/App.pm module-setup --p…

Test::TCP+Devel::NYTProfでWAFのパフォーマンスチューニング

waf

HTTP::Engineから拝借したんですが、Test::TCP + Devel::NYTProfの組み合わせで、WAFのprofilingが簡単にできます。 #!/usr/bin/env perl use strict; use HTTP::Engine; use LWP::UserAgent; my $module = shift || 'ServerSimple'; my $port = shi…

HTTP::Engineでmod_perl対応のアプリを作る方法

angelosをmod_perl対応にしてみた http://github.com/dann/angelos/tree/master/lib/Angelos/Engine/ModPerl.pm作るポイントは以下の2点だけ HTTP::Engine::Interface::ModPerlを継承したクラスでcreate_engineメソッドをoverride moduleをModPerlにしてHTTP…

WAFに必要な要素

この1ヶ月はPerlとRubyのWAFのコードは大分読んで、必要な要素がわかったので、angelosのクラス構成をベースに簡単にまとめてみました。 http://github.com/dann/angelos/tree/master WAF Core Application Class (Angelos.pm) WAF全体のsetup Component Con…

Perl関連で新しく始めたいこと

来年は、Perlに関しては、少しXSを触れるようにしたいなと。割とcとかc++でwrapして使いたいなって思う事が結構あるので、自分でできるようにしたいなぁと。perlxstut読むとこからですかね。これもWAF作りと同じで気長に来年やってこうと思ってます。 man pe…

merbがrailsにmergeされる件

merb-coreベースでrails-coreを作り直す componentをプラガブルにする rackに機能を委譲していく merb-coreの実装はとても綺麗なので、rails-coreをmerb-coreベースにするという選択肢は賢明でしょうね。また、ActiveRecordじゃないORマッパを使う選択肢がで…

来年はWAF元年

HEConの前から少しずつHTTP::EngineベースのWAF Angelosを作ってみているんですが、HTTP::Engineのお陰でWAF作るのは大分簡単になりましたね。RubyのWAFを幾つか読んでみたのですが、Rackがでた後に同様にWAFが乱立しているわけで、HTTP::Engineの登場で、来…

WAFの拡張ポイント

Sledge, Catalyst, Rails, Merbあたりを見て、フレームワークの拡張方法と拡張のポイントを考えてみました。拡張するポイントは以下の5点。 Dispatcher Controller View Middleware (Context) Server(Dispatcher) PluginのHookポイント AFTER_INIT BEFORE_DI…

CatalystのHelperのようなものをModule::Setupで作ってみた

http://github.com/dann/angelos/tree/master/lib/Angelos/Script/Generate.pmAngelos::Script::Generate::Flavorにflavorを追加すれば、新しくflavorのtypeとして認識されて生成していけるようになるという形。以下のような形で使う。コマンドの仕様はmerb-…

2008年を振り返って

Ingy, LukeなどのSTのPerl hackerに影響を受けて始めたPerlですが、かれこれもう1年半になりました。今年を振り返ってみると、以下のように本当にPerlづくめな1年でした。 catalystグループでcatalystについてblogに書き始めた lazy-peopleに参加して、lazy-…

Github Pages

http://github.com/blog/272-github-pagesgithubがcooooooooooooooolなものを提供してくれたので、早速自分もページを作ってみた。http://dann.github.com/

タスク管理やバグ管理をditzでやるようにしてみた

githubにコミットしているもののバグ・タスク管理などは全部ditzでやることにしてみた。CLIでさくさく登録できるのがいい感じ。 http://ditz.rubyforge.org/インストール sudo gem install ditzバグ追加 ditz addバグ状況 ditz statusバグの表示 ditz show i…

Rubyのモジュールのソース検索

perldoc -m モジュール に対応するものが見つからなかったので、暫定的に以下のスクリプトで検索する事にしました。 #!/bin/sh ack --ruby $1 /var/lib/gems/1.8/gems/ リフレクション使えばRubyのメソッドのソースとか取得できるんじゃないかなぁとも思った…

Rubyのリフレクション

rubyはリフレクションのAPIも充実してるのでリフレクション使いまくるソースが結構目立ちますね。Javaだとこういうコードを書いてしまうとIDEの支援が得られず、さらに自動リファクタリングができなくなるのでナンセンスですが、LLではそもそもリファクタリ…

merbMerbのController拡張のPlugin

http://github.com/wycats/merb-plugins/tree/master/merb_jquery/lib/merb_jquery.rbControllerにmixinして拡張。これは自分が思っているControllerのPluginの形に大分近いですね。MooseだとRoleをconsumeさせるってのと同じですね。それを、「application…

merbのrenderの動作

コードは、 merb-core/lib/merb-core/controller/mixins/responder.rb /widgets.htmlにアクセスがあった場合 requestからformat決定 index.html.erb探して、あったらそのテンプレート使ってレスポンス返す /widgets.xmlにアクセスがあった場合 requestからfo…

merbのcontrollerのhook

merb-core/lib/merb-core/controller/abstract_controller.rb _dispatchメソッドが肝 actionの実行前後にfilterが挟めるようになってる。filterはコントローラの暮す変数に追加している。 actionにdispatchする前後にもhookできるようになっている。(filter…

rubyでのperldoc -m ?

perldoc -mみたいなので、モジュールのソースがみれるやつrubyにあるといいなぁ。 gemでインストールしたモジュールの特定のクラスのソースを少し読みたいなぁということがちょくちょくあるので、何か簡単な方法がないものかなぁと。

RackのMiddleware一覧

http://advent2008.hackruby.com/past/2008/12/15/a_collection_of_rack_middlewares/ Rack::ETag - Automatically sets the ETag header on all String bodies. Rack::JSONP - Adds JSON-P support by stripping out the callback param and padding the re…

merbでのアプリのひな形

merb-gen app myapp . |-- Rakefile |-- app | |-- controllers | | |-- application.rb | | `-- exceptions.rb | |-- helpers | | `-- global_helpers.rb | |-- models | | `-- user.rb | `-- views | |-- exceptions | | |-- not_acceptable.html.erb | | …

RESTfulなひな形生成 - merb-gen resource_controller

$ merb-gen resource_controller user [ADDED] spec/requests/user_spec.rb [ADDED] app/controllers/user.rb [ADDED] app/views/user/index.html.erb [ADDED] app/views/user/show.html.erb [ADDED] app/views/user/edit.html.erb [ADDED] app/views/user/n…

merbのplugin

http://www.slideshare.net/mattetti/merb-plugins-101-presentation/幾つか種類がある。 Merb::Slices 再利用可能でオーバライトする事が可能なミニアプリ(アプリの部品) login form password reminder admin interface Merb Plugins フレームワークを拡…

MerbのAuthentication

http://www.slideshare.net/mattetti/merb-plugins-101-presentation/ Routeでのauthenticationというのが面白く、美しいですね。RouteレベルでのAuthentiationとControllerレベルでのAuthenticationと二つあって、ControllerレベルのAuthenticationは、Cata…

angelosにmiddleware組み込めるようにした

tokuhiromさんのmobircからまるっともってきって、angelosもmiddleware組み込めるようにしてみた。Middlewareは、DebugScreen, Session, Unicode、Req-ResダンプするDebug系とかそこらがあればいいかな。MerbみてからAuthenticationはフレームワーク側の仕事…

mobircみて参考になった点

MouseX::Plaggerlizeのhook機構がいい Merb::Pluginsのhook point実現するのをMouseX::Plaggerlizeでやってみよっかなぁ Kwalify使ったバリデーションするのがいい http://github.com/tokuhirom/mobirc/tree/master/lib/App/Mobirc/ConfigLoader.pm # どっち…

HTTPx::Middlewareのイメージ request_handlerのwrap版

HTTPx::Middlewareのイメージ。request_handlerをwrapできればよいというのをMouseで実装すると以下のような感じ。Middlewareの仕様としては、 MouseのRoleとする handle_requestメソッドを実装 handle_requestの引数は、request Rackとかのcallメソッドに対…