タグ

selfに関するnihenのブックマーク (70)

  • CGI::Expand - フラットなハッシュをネストデータに変換 - Articles Advent Calendar 2011 Casual

    こんにちは、こんばんはおはようございます。nihenです。 自分のよく使っているモジュールであまり他で紹介されていないものって何かなーと探していたらCGI::Expandはあまり紹介されてないなと思ったので紹介します。 CGI::Expandという名前がついていますが、CGI.pmやCommonGatewayInterfaceとはそんなに関係がありません。 このモジュールの使いどころですが、httpのリクエストにおけるパラメータの受け渡しは key=value&key2=value といった、フラットなハッシュデータなわけです。ただしよく配列を表すのに key=value&key=value2&key=value3 といったデータで受け渡しを行うことがあります。こういったデータに対してしてCGI.pmの->paramはArrayRefを返すようになっていますし、Plack::Request

    CGI::Expand - フラットなハッシュをネストデータに変換 - Articles Advent Calendar 2011 Casual
    nihen
    nihen 2011/12/04
  • 続DBIとforkの関係 - Articles Advent Calendar 2011 Dbix

    はじめに DBIxといえばSkinnyです。nihenです。 DBIxトラックといいながらDBIの話でもよいみたいなのでに書いたことの続編tipsを一つ書きますです。 DBI->connect_cachedとforkの罠 DBI->connect_cachedは同一プロセスで生成された同一connectオプションのデータベースハンドルをキャッシュしてくれそれを返してくれる便利なものなのですが、これとforkの組み合わせにはやはり罠が存在します。 use strict; use warnings; use DBI; use Data::Dumper; my $dbh = DBI->connect_cached('dbi:mysql:sandbox', 'sandbox', 'sandbox') or die $DBI::errstr; $dbh->do(q{DROP TABLE IF EXI

    続DBIとforkの関係 - Articles Advent Calendar 2011 Dbix
    nihen
    nihen 2011/12/04
    この例だと別にforkは関係ないということに一度pushしてから気づいたけど言い訳を追記するだけでよしとした。通信混ざる系の例は作りづらいので…
  • split git またはこぼれたギットに泣かないで - heboi blog

    CPANモジュールのdistを分割したい時などにgit repositoryも分割したいということになる。 が、分割先のrepositoryに含まれないファイルのコミットログなどが一緒に分割されてくるとログが肥大すぎていろいろとうざいときに泣かないために。 まあ、基git filter-branch使いましょうという話です。 サブディレクトリをルートディレクトリとする場合 CPANモジュールだとこういう場合はないはずなので普通はこの方法はとれないけど一応メモ。 repository中の"hogedir"だけを取り出したい場合。 git clone ParentModule/.git SplitModule cd SplitModule git filter-branch --subdirectory-filter hogedir 基これだけで十分なのだが、 git show commi

    split git またはこぼれたギットに泣かないで - heboi blog
    nihen
    nihen 2011/11/17
  • DBIとforkの関係 - heboi blog

    実際ググれば正解はいっぱい出てくるしここに自分もコメントで書いてたりしていまさら書く必要もないかなと思ってたけど一応自分のブログでもまとめておくということで。 一般的な解 DBIx::ConnectorとかDBIx::Handler経由でかならず$dbhを取得してからDBIを使う。 もしくはfork-safeなORM(DBIx::Class, DBIx::Skinny, Teng)を使う。 DBIを直接使っている場合 一般的なコネクションを保持するクライアントと同様にDBIもforkした子供が親のコネクションをそのまま使うことはバグの原因になります。特にトランザクションの処理等で重大な問題が起こる可能性がある。 解決策は、 DBIのコネクションを親で作らないで、子供で独自に作る 親で作ってしまったコネクションを子供が安全にDESTROYし、再接続する のどちらかになります。ここで問題は2で

    DBIとforkの関係 - heboi blog
    nihen
    nihen 2011/11/17
  • Amon2はAmon2::Setupを別distにしたほうがいいんじゃないかという話 - heboi blog

    carton をつかう人がふえてくるだろうという予測のもと、依存をへらす変更をしています http://d.hatena.ne.jp/tokuhirom/20111114/1321232436 自分もcartonが普及するとプロジェクトのextlib(local)に依存はすべていれる方式が一般化していくと思っています。 で、そうすると開発環境のシェル上で使えるperlにはたいしてモジュールが入ってない状態になっていることが往々にしてあるというかそもそもそんなにいれる必要がないが、amon2-setup.plみたいなのはプロジェクト外のperlで使いたいという要求がでてくる。その時にAmon2自体を入れなきゃいけないと結構依存が多くて面倒。なので別distにしてあげて通常のシェル上で使っているperlのlibにはAmon2::Setupが入っていて、プロジェクトのextlib(local)に

    Amon2はAmon2::Setupを別distにしたほうがいいんじゃないかという話 - heboi blog
    nihen
    nihen 2011/11/17
  • YAPC::Asia Tokyo 2011に参加してきました | へぼい日記

    YAPC::Asia Tokyo 2011に参加してきました。 ブログ書くまでがYAPCというわけで印象にのこったセッションを中心に参加報告を。 前夜祭 myfinderさんの「サービス運用者のための継続的監視」はさすが日で1番目か2番目か3番目のSNSの運用をされてるだけあってさすがという感じでした。自分は小規模システムばかりやっていて開発者も運用についてかなりコミットしなきゃいけない状況で働いているのですが、ここまできちんとできてないなーと痛感。さっそく監視項目をどんどん増やしていこうと思いました。 会場外のプチ懇親会的なものでは、ほぼボッチでしたが夏菜子推しTを装備していたsugyanさんと初めて挨拶させていただくなど。 一日目 寝坊&体調不良で昼から参加。Jesse Vincentさんの「Perl 5.16 and beyond」とmalaさんの「Webアプリケーション高速化」が

  • Gearmanのはまりどころ | へぼい日記

    最近Gearmanに入門しているのですが、いろいろとはまったのでメモ。 $worker->workは”Do one job”ではなくDo job loop Gearman::WorkerのPODには $worker->work while 1; みたいなサンプルが書いてあったり Gearman::Job->work(%opts) Do one job and returns (no value returned). You can pass "on_start" "on_complete" and "on_fail" callbacks in %opts. って書いてあるのですが(しかもこれは、Gearman::JobではなくてGearman::Workerだし、、、) workはオプション無しで呼ばれた場合はwhile 1なんかなくてもloopします。 work_once的な動きにしたい

  • X-Content-Type-Options: nosniffのつけ方 | へぼい日記

    Apache mod_headersでできます Header set X-Content-Type-Options nosniff Nginx add_header X-Content-Type-Options nosniff; 但し、上記だとproxyなんかで既にX-Content-Type-Options: nosniff;が付いていると X-Content-Type-Options: nosniff, nosniff のようなヘッダになってしまう。問題ないかもしれないが気になる場合はNginxHttpHeadersMoreModuleを使って more_set_headers 'X-Content-Type-Options: nosniff'; とすると良いのかも。 Plack Plack::Middleware::Headerを使うと簡単です。 enable 'Header', s

    nihen
    nihen 2011/01/06
    id:kits 静的かどうかではなくそのファイルの由来が重要なんだと思いますけど。webサーバレベルで設定して安全側に倒れるようにしといたほうがいいって話だと思ってますが。
  • Kolonでかこう - Articles Advent Calendar 2010 Casual

    nihenです。こんにちは。 今年もブクマ数ビリを目指したいとおもいます! Perl界隈で今年はText::Xslateというテンプレートエンジンが流行っています。 しかしこのXslateで現在主流に使われているSyntaxはTTerse*1であり、XslateネィティブともいえるKolonはまだあまり使われていないというのが現状のようです。 というわけで今回はKolonの使い方の基を紹介します。 Perlコード側 use Text::Xslate; use Hash::MultiValue; my $tx = Text::Xslate->new(); my $var = { foo => 'xslate', bar => { baz => '111', bazbaz => '112', }, baz => [5, 6, 7], hoge => Hash::MultiValue->new

    Kolonでかこう - Articles Advent Calendar 2010 Casual
  • XslateはSyntaxを変えても基本的には実運用上の速度は変わらない | へぼい日記

    TTの158倍速いというxslateですが、このベンチマークはSyntax::Kolonを使っています。 TT互換なSyntaxであるところの、Syntax::TTerseを使うとどうなるのかなということでhttp://github.com/nihen/p5-Text-Xslate/tree/add_tterse_benchのbenchmark/x-rich-enc.plとbenchmark/x-poor-env.plにTTerseも追加してみました。 以下結果 %perl benchmark/x-rich-env.pl Perl/5.12.1 i686-linux Text::Xslate/0.1056 Text::MicroTemplate/0.15 Text::MicroTemplate::Extended/0.11 Template/2.22 Text::ClearSilver/0

  • Path::AttrRouterにHTTPメソッド制限できる機能を追加してみた | へぼい日記

    Path::AttrRouterというtypesterさんが開発されているdispatcherがあって、Catalyst-likeなControllerのattributeを拾ってきてルーティングテーブルを作成してくれるのが便利で使っています。 で、HTTPメソッドを考慮したルーティングを行ってくれる機能が欲しかったので追加してみました。 method_supportブランチとしてforkしてgithubにあげてあります。 使い方はこんな感じです。 use Path::AttrRouter; { package MyController; use base 'Path::AttrRouter::Controller'; sub index :Path { print "index\n" } sub post :Path Method('POST') { print "post\n" } }

  • Jemplate - Template-Toolkit like なJavaScriptのTemplateエンジン - JPerl Advent Calendar 2009

    Jemplate-runtimeのjs Jemplateを使うためにはまずは、(x)html側でJemplate.jsを読み込む必要があります。 % jemplate --runtime > Jemplate.js このようにして作成できますので(x)htmlで <script src="Jemplate.js" type="text/javascript"></script> のように読み込んであげましょう。 Hello Jemplate では実際にJemplateエンジンを作ってみましょう。 hello.tt Hello [% engine %]! とりあえずこんな感じで簡単なテンプレートを作成してみます。 で、このテンプレートファイルをjemplateでコンパイルします。 % jemplate --compile hello.tt > hello.js そうするとhello.jsの中

  • へぼへぼCTO日記 - Plack::Middleware::Header

    Plack::Middleware::Headerをgithubに上げました。 これは、Plack::Middlewareレイヤーでレスポンスヘッダを設定するもので、Apacheでいうところのmod_headersに相当します。 使い方はこんな感じです。 use Plack::Builder; builder { enable 'Header', set => ['X-Plack-One' => '1'], append => ['X-Plack-Two' => '2'], unset => ['X-Plack-Three']; $app; }; 自分はPlack::Middleware::Staticと併用してExpiresをつけたりするのに使うために作りました。IEがExpires: -1とかやっておかないとしばらくキャッシュしてIf-Modifled-Sinceなリクエストも投げてく

  • へぼへぼCTO日記 - patternがemptyな場合には前回成功時のpatternが使われるというハマりポイント

    print "match1\n" if "baz" =~ m{}; "foo" =~ m{foo}; print "match2\n" if "baz" =~ m{}; の結果は match1 である。なぜならperldoc perlrerefに書いてある通り、 If 'pattern' is an empty string, the last successfully matched regex is used. であるから。 patternを動的に生成してたりする時に空になっちゃうケースなんかがあると思うので、その場合はマッチ処理自体を回避するようにするほうがよいかと思われます。 最初バグかと思いました。

  • へぼへぼCTO日記 - Casual Talks#1でLTしてきました

    昨日(11/20)にperl-casualのCasual Talks#1にて拙作のFormValidator::NestedについてLTしてきました。 slideをslideshareにあげておきました。 得られた教訓 1. 実際に話し始めると早口気味になるのでスライド大目ぐらいが自分にはちょうどいいかも 2. プロジェクターにつなぐときはねじをちゃんとしめておく 3. やっぱり笑いを一つぐらいとっといたほうが場は暖かくなる (PAUSE ID requestの際にcatalyst-pluginを作りたいと書いていたと言ったときに若干嘲笑気味の笑いはありましたがw) 自分以外も発表が初めてだという方も多かったのに、発表が皆さんうまくて非常に面白かったです。またの機会があったら今回の教訓を踏まえまた発表できたら幸いです。 主催されたyusukebeさん、会場の用意や二次会の(実質)幹

  • asahi.com:夫の遺志かなえたい/ステンドグラス寄贈-マイタウン宮城

    nihen
    nihen 2009/11/16
  • 寄贈:鯨のステンドグラス、石巻市に 新庁舎の開放スペースに展示 /宮城 - 毎日jp(毎日新聞)

    nihen
    nihen 2009/11/16
  • 個人情報の定義ふたたび - へぼへぼプログラマ日記

    twitter一景 個人情報保護法改正へ向けた期待 - 雑種路線でいこう このid:mkusunok氏によるエントリに端を発してtwitter上で@tekusuke氏と個人情報の定義にまつわる議論になった。 元をたどると パーソナルデータを狭く解釈するのが保護法の精神でござる。 RT @masanork 判例法理に於けるプライバシーと保護すべきパーソナルデータの区別は重要だけど、個人情報保護法の実運用がパーソナルデータを狭く解釈し過ぎているというのが @nihen のブコメでの指摘では? http://twitter.com/tekusuke/status/5534236324 という@tekusuke氏の発言に それは無いと思います!法制化専門委員会の議事録読んでみてくださいです。RT @tekusuke パーソナルデータを狭く解釈するのが保護法の精神でござる。 http://twitt

    個人情報の定義ふたたび - へぼへぼプログラマ日記
  • へぼへぼCTO日記 - JSocketを使ってPOSTもストリーミングするPlackアプリ

    さて、前エントリでJSocketというのを作ったと書いたのですが、これは実はjavascriptで動くtwitter streamクライアントを作るならばmultipart/mixedを使うべきというのを読んで、レスポンスがpollではなくてストリーミングできるというのを知って、リクエストもやりたいよというふうに思ったのがきっかけでした。 まず、XHRでできないかを試してみたのですが、xhr.send(data)を一回読んでしまうと少なくともjavascript側ではリクエストは完了したと思ってしまって、再度xhr.send(data)しても反応はありませんでした。 そこでJSocketの登場です。JSocketを使うとhttpリクエストを断続的に送信することができます。やったですね。 で、Plack::Server::Coroを使って試しにリアルタイムチャットを作ってみました。どうぞお試

  • へぼへぼCTO日記 - javascriptからsocketが扱えるJSocketを作りました

    javascriptからsocketを扱いたいなぁという事象が発生したんですが(それについては別エントリで)、SocketJSというのがあるんですがDownloadするところがなぜかSSLになっていてCAがCAcertでfirefoxだとデフォルトでは見れないので、かっとなって自分で作ってみました。今も反省していません。 コードはgithubからどうぞ。 使い方はjs/jsocket.jsに軽く書いてあります。 /* * Jsocket - Socket on Javascript * Author: Masahiro Chiba * Depends: * - jQuery: http://jquery.com/ * - jQuery TOOLS - Flashembed: http://flowplayer.org/tools/flashembed.html * SYNOPSIS: