タグ

ブックマーク / blog.64p.org (20)

  • Amon2とJSONとセキュリティ - tokuhirom's blog

    [1]http://d.hatena.ne.jp/ockeghem/20110907/p1[2]http://www.atmarkit.co.jp/fcoding/articles/webapp/05/webapp05a.html[3] http://msdn.microsoft.com/ja-jp/asp.net/ff713315[4] http://labs.cybozu.co.jp/blog/kazuho/archives/2007/01/cross-site_including.phpあたりをよんで、JSON とセキュリティについてかんがえてみた。 ここで、有効とされている対策のうち while(1); を先頭に付与するPOST ですべて処理するといったあたりは、RESTful でないし、BK 感がひどいというか質的ではないのでできるだけやりたくない。 また、Amon2 では互換

  • 「なぜそのモジュールをつくったのか、他のものでは駄目なのか」ということをドキュメントに書くといいよ、という話 - tokuhirom's blog

    なにしろ、「これこれこういう実装なんですよ!!」「こういうインターフェースなんですよ!!」っていうところだけあっても肝心の「なぜこのモジュールが必要なのか」っていうところが記述されていないモジュールが多い。 なにより肝要なのは「なぜ現状だとこのモジュールが必要なのか」「このモジュールをつかうとどういう場合に便利になるのか」「既存のモジュールにたいする優位性はなにか」といったところを記述するとよい。 とくに「既存のモジュールにたいする優位性」というのは重要で、これを記述していないと海外Perl Mongers から「それ Nantoka::Kantoka でできるよ」みたいなのがいっぱいコメントがついたりする。国内からもつく。 なんてことを思った。

  • Plack::App::ConditionalGET の Last-Modified の実装について - tokuhirom's blog

    諸事情により自前で HTTP client cache の実装をつくってるんですが、コンテントをファイルにそのまま保存したら、If-Modified-Since つけてんのに 304 にならなくてなんでかなーとおもったら、Plack::App::ConditionalGET は $res->header('Last-Modified') eq $req->header('If-Modified-Since') なときにだけ 304 になるように実装されていたのでした。 この挙動は RFC 的には認められている挙動なのですが、うっかりするとはまりがちなのでメモ。 thanks to id:kazuhooku

    IwamotoTakashi
    IwamotoTakashi 2011/04/22
    http://synpey.net/?p=96 も読んだ。WebサービスはETagだけ返せばいいような気がしてきた
  • web application 開発における git のブランチ運用ルール - tokuhirom's blog

    俺は普段こういう運用でやっているが、君はどうか。 社内の trac にドキュメントをかいたので、コピペしておく。git についてはカジュアルにつかってるだけなので、もっとこうしたほうがいいんじゃねえのというのがあればおしえてください。 ブランチ命名規則master 番の deploy 用。誰かに deploy されてこまるものはいれない。stg ステージングの deploy 用iss(\d+) チケット$1 用の topic branch。master から分岐させるその他、キャンペーン関係など、おいやすくしたい者は別途名前つけてもよし。 stg の運用基的に、開発はチケットにひもづく topic branch でおこなうので、以下のような作業フローとなる git co master git co -b issXXX # トピックブランチをきる ... # development gi

  • モダンな Perl の開発環境の構築方法 - tokuhirom's blog

    一般的な OSX 環境および Linux 環境における、モダンな Perl 開発環境の構築方法についてまとめてみたよ。 perlbrew のインストールperlbrew をつかうことにより、簡単に最新版の Perl5 を利用することができるようになる。 perlbrew をいれる。% curl -L http://xrl.us/perlbrew | perl - install % ~/perl5/perlbrew/bin/perlbrew init ~/.bashrc (または ~/.zshrc)に source ~/perl5/perlbrew/etc/bashrc を追記。あたらしいシェルをたちあげる。最新版の perl をインストールする。% perlbrew install perl-5.12.1 % perlbrew switch perl-5.12.1 ここまできたら、she

  • 119行でPlack対応のWeb Application Framework を書いてみる - tokuhirom's blog

    拡張性等を考慮しなければ、以下のように簡単にかくことができる。 View を XSlate きめうち。ルータは given-when で、設定ファイルは .pl という構成。だいたいのウェブアプリケーションは、これぐらいの機能の WAF で十分。ルーター部分は Router::Simple とかにさしかえた方がよいかもだけど。 5年前に Python で似たような記事をみたのだが、今はみんなのがんばりによって Perl でもおなじことができるようになった。 use strict; use warnings; use 5.10.1; package MyWAF; use parent qw/Class::Data::Inheritable/; use Path::Class; use Text::Xslate qw/mark_raw/; use Encode; use Time::Piece

  • Released Router::Simple 0.01 - tokuhirom's blog

    http://github.com/tokuhirom/p5-router-simple my $router = router { connect '/' => {controller => 'Router', action => 'index'}; submapper('/entry/{id:[0-9]+}', controller => 'Entry') ->connect('/show', {action => 'show'}) ->connect('/edit', {action => 'edit'}); }; my $psgi_app = sub { my $env = shift; if (my $p = $router->match($env)) { "MyApp::C::$p->{controller}"->can($p->{action})->($env, $p->{a

  • TOEICで125点しかとれないような人でもできる英文バグレポートの方法。 - tokuhirom's blog

    または、Pros と Cons をまちがえて書いてしまうような人でもできる英文バグレポートの方法。 まあ小手先のノウハウだけど、俺はこうやってるよ、という話。 ともかく再現可能なテストケースをかく再現可能なテストケースを書けば、コミュニケーションコストを大幅に削減することが可能。これは日人同士の場合でもそうだし、プログラマにとっては必須の技能の一つであるから、是非身につけて実践するべき。 マルチスレッドに起因するものなど、再現可能なテストコードがかきづらいものはともかく、それ以外であれば、再現テストコードを書くべき。 再現テストコードを書けない場合、そもそも自分がバグの原因を把握できていない場合がおおいので、そんな状況でなれていない言語によるコミュニケーションをとるのは困難。

  • Doxygen を github-pages にあげるのをお気楽にやる方法 - tokuhirom's blog

    github pages をつかうと簡単に HTML のページを公開できる。Doxygen をつかうと簡単に HTML のドキュメントを生成できる。ってことは、この2つを簡単にくみあわせられれば最強じゃね? ということでやってみた。 gh-pages branch の生成はいつものようにおこなう。 $ git symbolic-ref HEAD refs/heads/gh-pages $ rm .git/index $ git clean -fdxそしたら、master にもどして、gh-pages branch を docs/ という名前で submodule にする $ git co master $ git submodule add -b gh-pages `git remote -v|grep origin|awk '{print$2}'` docsdoxygen の設定ファイル

  • リアルタイムWebのためのPubSubHubbub の Subscriber を構築する方法 - tokuhirom's blog

    PubSubHubbub(以下PuSH)は、フィードの更新をリアルタイムに通知するためのプロトコルである。 ウェブ上にころがっている"PuSH"の情報は、"Pub" の部分を実装する方法か、「PubSubHubbub の家GAE実装を手元でうごかしてみたよ」という記事しかなくて、"Sub"を実装する方法について解説しているブログなどはみあたらなかったので、ここに記す(英語だといくつかあった)。 基的に、ほとんどの人が興味あるのは "Pub" の部分である。自分のブログの更新情報等をリアルタイムにおくりつけたいと考えるからである。実際、ほとんどのブログソフトウェアではすでに PuSH 対応がすんでいる。see MT-PuSH, etc. しかし、私は今まさに Subscriber をつくりたいとおもったのである。なぜならば、"friendfeed.com/cpan" の更新情報を PuS

    IwamotoTakashi
    IwamotoTakashi 2010/03/07
    勉強になりました。気になったので調べたら、Pubからフィードが飛んできたときにも2xxを返す必要があるんですね(7.3. Content Distribution)/追記されました。
  • OSS とテスティングと CPAN Testers の話 - tokuhirom's blog

    http://blogs.itmedia.co.jp/hozawa/2010/01/post-b5e0.html URL とあんま関係ないかんじのチラ裏ですけど。 実際、オープンソースのプロダクトって、作者の環境とちがう環境だとうまくうごかないみたいなことはあって、memcached は Solaris だと変な挙動をしてたし、Q4M は i386 固有の問題があったとか、まあそういうのは色々ありますわな。 で、どうするかというと、みんながつかってる構成をつかえばいいじゃーん、という。memcached を linux 2.6.x でつかってるユーザはたくさんいるので、その環境におけるバグはすくないはずだから、linux 2.6 でつかうのが一番安全だろう。とかそういうこと。 OSS はつかうユーザがおおいほど、バグにあたる可能性は低くなるはず。 Solaris でうごかないのは残念だとお

  • Plack::Request と Hash::MultiValue の話 - tokuhirom's blog

    HEAD の Plack::Request では Hash::MultiValues が導入されてる。Hash::MultiValue は多値をストアできるハッシュ風オブジェクト。 use Plack::Request; use Test::More; my $r = Plack::Request->new({ QUERY_STRING => 'bar=aaa&bar=bbb', REQUEST_METHOD => 'GET', }); is_deeply $r->parameters->{bar}, [qw/aaa bbb/]; みたいなコードが昔はとおってたけど、HEAD だととおらない。 なんでかというと、Plack::Request->parameters->{...} が str or arrayref をかえすのがよくないからなおしたというはなし(see http://bulk

  • オススメCPANモジュールその1。 AnyEvent - TokuLog 改めB日記

    というわけで、俺の独断と偏見によるオススメモジュールのコーナーです。 AnyEvent は poll/select/kqueue/epoll(4) などのイベントループを抽象化するライブラリです。似たような目的のものとして Danga::Socket, POE などがありますが、ライブラリ全体のインターフェースの完成度や速度などの点から AnyEvent を僕は一番押しています。 Pure Perl で利用できますし、インターフェースも安定しています。まだバリバリ開発されてますが、backward incompat な変更はされないようです。 作者が mlehmann 氏ということで、ドキュメントは丁寧ですが攻撃的な文章が目立ちますし、バグレポートすると異常な長文がかえってきたりするのでうっとーしかったりしますが、コードの品質はたかいので、気にする必要はないかとおもいます。コードの品質の前

  • Planet Perl Iron Man and non-english entries - tokuhirom's blog

    Planet Perl Iron Man がはじまった当初は、英語の他には空気読まない日人ばかりだったわけだが、最近はロシア語やら、右から左に書く言語やらいりまじってておもしろい。 non-english entry でも、google translate とかつかえば、まあそれなりによめるし、コードの部分は読めるので、よいですね。 ただ、非英語のエントリーを読む立場になってみると、「Please write one line description in english」ということ。それがないと翻訳してまで読む価値があるのかないのかわからないからね。

  • tokuhirom blog

    Blog Search when-present<#else>when-missing. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: ${entry.path} [in template "__entry.ftlh" at line 3, column 25] - Reached through: #include "__entry.ftlh" [in template "entry.ftlh" at

  • tokuhirom blog

    Blog Search when-present<#else>when-missing. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: ${entry.path} [in template "__entry.ftlh" at line 3, column 25] - Reached through: #include "__entry.ftlh" [in template "entry.ftlh" at

  • tokuhirom blog

    Blog Search when-present<#else>when-missing. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: ${entry.path} [in template "__entry.ftlh" at line 3, column 25] - Reached through: #include "__entry.ftlh" [in template "entry.ftlh" at

  • tokuhirom blog

  • tokuhirom blog

    Blog Search when-present<#else>when-missing. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: ${entry.path} [in template "__entry.ftlh" at line 3, column 25] - Reached through: #include "__entry.ftlh" [in template "entry.ftlh" at

  • tokuhirom blog

    Blog Search when-present<#else>when-missing. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: ${entry.path} [in template "__entry.ftlh" at line 3, column 25] - Reached through: #include "__entry.ftlh" [in template "entry.ftlh" at

  • 1