タグ

ブックマーク / hiratara.hatenadiary.jp (59)

  • StackTraceを少し便利に(2) - Pixel Pedals of Tomakomai

    結論から言えば、ベストな解は見つかってませんので、あくまでアイデアのメモとして。 以前、P::M::StackTrace について以下のような話を書きました。 plackup を -E development で起動するとついてくるPlack::Middleware::StackTraceは大変便利ですが、このMiddlewareは最後に発生したdieを追跡するため、フレームワーク内で try ... catch ... die をしていると、原因となった部分ではなく rethrow させた部分のトレースが表示されてしまいます。 レガシーオレオレフレームワークをPSGI化した記録 ここで言っているrethrowとは、例えば以下のようなコードです。"some reason"が例外として上がってきた場合、普通なら表示したいスタックトレースは直接の原因となった(1)の呼び出し時のものでしょうが、

    StackTraceを少し便利に(2) - Pixel Pedals of Tomakomai
  • DBIとforkとInactiveDestroy - Pixel Pedals of Tomakomai

    @lestrratさんが教えてくれたことのメモ。 以下のコードはエラーとなります*1。 use strict; use warnings; use DBI; my $dbh = DBI->connect('DBI:mysql:mysql', 'root', 'password') or die DBI->errstr; my $pid; if ($pid = fork) { # NOP in the parent waitpid $pid => 0; } elsif (defined $pid) { # NOP in the child exit; } else { die "Couldn't fork, stopped"; } print $dbh->selectrow_array('select count(*) from user'), "\n"; 【実行結果】 DBD::mysql

    DBIとforkとInactiveDestroy - Pixel Pedals of Tomakomai
  • 今日はShibuya.pm #15の日です。 - Pixel Pedals of Tomakomai

    Shibuya.pm #15に出席予定です。昨日に引き続き、IIJさんの大会議室に向かってます。ストリーミング中継もあるらしいです。 MORE Learning Perl / brian d foyさん(@briandfoy, @briandfoy_perl) .pmは世界中にある → 実際に会いたい Acme::CPANAuthors->new('Japanese') → 日のCPAN author "Learning Perl" → 5.10に対応。5.14対応にしたい。Unicode対応したい。 "Inter mediate Perl" → 新しい版は来年の夏? 正規表現オブジェクトやMoose対応。 Mastering Perl → アップデート予定はない Effective Perl PROGRAMMING → 一番おすすめ。5.12。 Effective Parlerを更新中

    今日はShibuya.pm #15の日です。 - Pixel Pedals of Tomakomai
  • スライド「YAPCレポートの舞台裏」 - Pixel Pedals of Tomakomai

    Hokkaido.pmで話してきたので、スライドを貼っておきます。あがり症なんで人前に出ることはほとんどないのですが、今回は地元だったので頑張りました! でもやっぱりあがりました!! YAPCレポートの舞台裏View more presentations from hiratara. 今回は参加人数的に見ても大成功だったのではないかと思います。運営の方々、おつかれさまでした!

    スライド「YAPCレポートの舞台裏」 - Pixel Pedals of Tomakomai
  • Plack::Middleware::WebSocket and Web::Hippie - Pixel Pedals of Tomakomai

    YAPCで@clkaoさんのトークを聞いて興味が湧いたので、Plack::Middleware::WebSocketのechoのサンプルをWeb::Hippieを使って書き換えてみました。 書き換え方はこんな感じ。 Web::Hippieのよいところ WebSocketだけでなく、Multiple XMLHttpRequestやlong pollにも対応している AnyEvent::Handleを意識しなくてよい Web::Hippieのいまいちなところ Mooseへ直接依存している(Mouseが使えない) イベントハンドラはPSGIアプリケーション*1 後、これらは所詮はMiddlewareなので、WAFが持つような機能は期待できません。ルーティングやテンプレートエンジンは別の方法を探す必要があります。 *1:クライアントからのデータを受け取った時のハンドラがPSGIアプリケーションなの

    Plack::Middleware::WebSocket and Web::Hippie - Pixel Pedals of Tomakomai
  • 勉強会をメモして公開するということ - Pixel Pedals of Tomakomai

    @yappoさんがとてもいいことを言っていたので、思うとこを書いておきます。 あのレポートのクオリティは相当なものだけど、あなたがYAPCに参加して何を思ったのかまではレポートされていない、なぜならそっれはあなたにしか表現できないから @yappo 勉強会のメモは、読むことより書くことに意義があります。勉強会の内容を写経すれば、ただ漠然と聞くよりも内容が頭に入りやすくなります。人が書いたメモを読むだけでは、この効果は得られません。このブログのエントリのようなただ書きなぐっただけの内容を読むのであれば、なおさらです:p セッション内でスライドに映されたモジュール名を自分の手でタイプすると、そのことによって記憶が助けられ、いざというときにモジュールの存在を思い出すことができるようになります。また、終わった後に感想文を書くだけでも、見てきた内容を改めて整理することで、知識として吸収しやすくなりま

    勉強会をメモして公開するということ - Pixel Pedals of Tomakomai
  • 今日はYAPC::Asia Tokyo 2010の最終日です - Pixel Pedals of Tomakomai

    今日はYAPCの2日目です。昨日と同様に、gihyo.jpさんの特集にもレポートを掲載しますので、完成をお楽しみに! Chia-liang Kaoさん「AnyMQ, Hippie and the real-time web」 電車遅延のため、開始が10分遅れるそうです。 Plack/PSGI → アロンアルファ Streaming Interface がある CGI.pm は使うべきでない AnyEvent 様々なイベントループのサポート POEは面倒 AnyMQ - Tatsumaki::MessageQueueをインスパイア Mooseを利用 topicを作り、 new_listener でリスナを作り、pollで監視。publishで発火。 キューバインディングを増やしてくれる人募集 Comet 色々なとこで使われている 色んなハックで成り立っている → MXHR, iframe,

    今日はYAPC::Asia Tokyo 2010の最終日です - Pixel Pedals of Tomakomai
  • 今年のYAPCも楽しかった - Pixel Pedals of Tomakomai

    今年も怒濤の三日間が終わりましたので、感想を書いておこうと思います。 まず、スタッフとスピーカーのみなさんは当にお疲れ様でした。お陰で今年も目一杯YAPCを楽しむことができました。素晴らしい三日間でした。 今回、個人的に一番印象深かったのは、charsbarさんが「ある連載の舞台裏 - History tells us ...」のトークで最初にアナウンスしたひとこと。「20分後*1に地方.pmのセッションがあるので、地方からいらしている方を優先して応援しにいってあげて下さい。」 同じ道産子として、とても嬉しい一言でした*2。トークの内容も、Perlを大切に考えていることが伝わる素晴らしい内容でした。 Jesseさんの話もmiyagawaさんの話もそうですが、今回のYAPCはコミュニティの温かさを感じるシーンが多かった気がします。いいYAPCでした。 他、箇条書きではありますが、気になった

    今年のYAPCも楽しかった - Pixel Pedals of Tomakomai
  • 今日はYAPC::Asia Tokyo 2010の初日です - Pixel Pedals of Tomakomai

    今日からが当のYAPCです。まもなく、東京工業大学大岡山キャンパスに向けて移動します。 昨日と同様に、gihyo.jpさんの特集にもレポートを掲載しています。gihyo.jpさんにはもう一人 @usuihiro さんもレポートを書かれていますので、そちらも合わせて会場の雰囲気を感じて頂ければと思います。 Daisuke Makiさん「Welcome, Perl!」 Future, Past, Present Perls ゲスト → Larry, Jesse, Purple Master みんなにPerlを広めたい 今回は非エンジニアが企画した (941さん++) 518人の参加者 → 世界で一番大きなYAPC タグは #yapcasia で トークの投票をやる → 優秀者にはMacBook Pro 懇親会は19時より2,000yen android, iPhone の YAPCアプリがあ

    今日はYAPC::Asia Tokyo 2010の初日です - Pixel Pedals of Tomakomai
  • 今日はYAPC::Asia Tokyo 2010前夜祭の日です - Pixel Pedals of Tomakomai

    YAPCは2006年から出ているので今年で5回目になります。今夜東京工業大学大岡山キャンパスで開催される前夜祭に出席します。 なお、去年に引き続きgihyo.jpさんの特集にレポートを掲載させて頂けることになりました! このブログとgihyo.jpさんの方と両方にメモとりますので、合わせてご覧下さい。 yusukebeさん「イントロダクション」 Ustreamはやってません。自分の回線で勝手にやるならOK。 PerlCasualとは 意図 → 「カジュアルに」利用者としてPerlを使う 三度活動した 今日のテーマ → WAF Plack/はてPSGI PSGI の developer = WAF作成者 Plackで直接Web Applicationを作りたくなりがちだが、違う。WAFを使うべき 今日のLTは初めての人もいる 岡田有花さんとの対談もおたのしみに! WAF作者+利用者の集い n

    今日はYAPC::Asia Tokyo 2010前夜祭の日です - Pixel Pedals of Tomakomai
  • Template-Toolkit-2.22のメモリリーク【再】 - Pixel Pedals of Tomakomai

    以前Template::Plugin::Filterのリークを直すパッチを書いて2.19_02で採用されていたのですが、不具合があってrevertされてしまってました*1。 2.22でリークするってのはこんなスクリプト書けばわかります(test::simple は自分でTemplate::Plugin::Filterを継承して作って)。 for my $l (1 .. 1000) { my $tpl = Template->new( PLUGIN_BASE => 'test', ); $tpl->context->plugin('simple', []); warn `ps -o rss= -p $$` if $l % 10 == 0; } ってことで、パッチを書いてリベンジ。リークがあるとどうしても MaxRequestsPerChild の値を極端に小さくしなければいけなかったりと色々

    Template-Toolkit-2.22のメモリリーク【再】 - Pixel Pedals of Tomakomai
  • 今日はShibuya.pm #14の日です - Pixel Pedals of Tomakomai

    Shibuya Perl Mongersテクニカルトーク#14 に参加してくるつもりです。なんでこんな流れになっているのか全然理解してないですが、頑張ってを読まずに空気を読んできます。 日のイベント開催趣旨について / 竹迫さん IPAとJPAがブログ等で混同されている 両団体に来て頂いている Perl 6 Language Update / @dankogaiさん Perl6(Rakudo*) で FizzBuzz 三項演算子は??と!! 2.67秒。Perl5より1,000倍くらい遅い。ただし、夏の版より改善されている。 Rukudoのビルドは、Perlとあまり変わらず、楽 sub の中に sub を書ける スコープも正しく扱われる(外から見えない) $^n プレースホルダ → 引数であることを宣言 他の言語と違い、CATCH節はtryの中にある 無名関数.exception で直

    今日はShibuya.pm #14の日です - Pixel Pedals of Tomakomai
  • MySQLにおける、GeohashとGeometry型による検索の比較 - Pixel Pedals of Tomakomai

    先日のベンチマークが失敗だったので、改めて自前のスクリプトでベンチとりました。 後、id:kokogiko さんにGeometry型 × SPATIAL インデックスはどーよってツッコミをもらったので、そちらも一緒にベンチをとります。 Geometry型のテーブル定義 前回のGeohashのテーブルを一つ。SPATIALインデックスはMyISAM専用なので、そのテーブルを一つ。後、InnoDBでインデックス貼っていない物を用意しました。InnoDBでno-SPATIALなインデックス張った物も試したかったんですが、手元の環境だとMySQLが落ちてしまうっぽいので今回は省略しました。 CREATE TABLE location ( id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, geohash VARCHAR(10) NOT NULL

    MySQLにおける、GeohashとGeometry型による検索の比較 - Pixel Pedals of Tomakomai
  • Geohash で緯度経度の範囲検索のベンチマークとか - Pixel Pedals of Tomakomai

    Geohash で特定範囲内の地点を取得する時は、以下のような戦略をとるといいみたいです。 東京タワーの周りを探す場合は、「xn76gg」だけを検索するのではなく、’xn76gu’,'xn76gf’,'xn76u5′ ,’xn76ge’,'xn76gs’,'xn76uh’,'xn76u4′,’xn76gd’,'xn76gg’も同時に検索することで、おおよそ 2km*3kmの範囲で検索が可能です。 緯度経度を文字列で表すGeoHash - @masuidrive blog 実際にやってみました。以下の赤い領域に10万個の地点を設置し、緑枠内に含まれる地点(今回は127件)を検索します。緑枠は、(35.727353, 139.716654)〜(35.827353, 139.816654)の範囲です。 下準備 MySQLに以下のようなInnoDBのテーブルを作りました。 CREATE TABLE

    Geohash で緯度経度の範囲検索のベンチマークとか - Pixel Pedals of Tomakomai
  • Geo::Hash->precision のよくわかる解説 - Pixel Pedals of Tomakomai

    PODを見ただけだと理解できなかったので、メモっておきます。 GeoHashについては、@masuidriveさんのエントリからリンクを辿ると色々わかると思います。 precision とはどういうメソッドか PODによれば、適切なGeoHashの桁数を返してくれるということですが、これはどういうことでしょう。 Infer a suitable precision (number of character in hash) for a given lat, lon pair. 答えからいえば、渡した緯度経度の有効桁数を適切に表現できるGeoHashの桁数、となります。 例えば、経度を "100" と指定した場合に、 "100" と "101" という経度から同じGeoHashが生成されると困るわけです。この結果がきちんと分離されるために最低限必要なGeoHashの長さが、precision

    Geo::Hash->precision のよくわかる解説 - Pixel Pedals of Tomakomai
  • Shibuya.js beyond HTML5 に参加してきます - Pixel Pedals of Tomakomai

    hiratara : とりあえず確保。上司から許可が取れたら行きます Shibuya.js beyond HTML5 上司の許可がとれたので行ってきます! → 出席してます! おさらい(JavaScript歴史) ... → JavaScript → JScript → ECMAScript → HTML 4.01 コンセプト: Rediscover the JavaScript 2006年が第1回。2008年の京都が最後で、2年ぶり (実は渋谷ではやっていない) 最近やってなかったのは → jQueryとか便利だし、日常化した 復活したのは → HTML5の登場、JITの高速化、IE6の終了 LTの虎の予選も兼ねているらしい Rich UI with JS / @amachang jQueryの作者にも認められているShibuya.js HTML5とは? → 仕様にDOMとHTMLが両

    Shibuya.js beyond HTML5 に参加してきます - Pixel Pedals of Tomakomai
  • iPadを紙代わりに使うならNote Taker HD - Pixel Pedals of Tomakomai

    iPad電子書籍だって話ですが、肝心のがなかなか出そろわないので自分はiPadをノートと鉛筆の代わりとして使ってます。そのためのソフトが、Note Taker HDという600円のアプリで、これがなかなかいいです。どんなアプリかってのは、紹介している動画を見るのがいいでしょう。 手書きなので、日語対応とか数式対応とかそんなの関係なく、なんでも自由にかけます。 間違えたらでっかく×って書いちゃってもいいですし、 圏論の可換図もこの通り。 昨日App Sotreに上がった最新版だと、16色カラーが使えます。色ペン16持ち歩くことを考えたら、こっちの方が断然使いやすいですね! 最後に、Note Taker HD でできることとできないことをまとめておきます。 できること、得意なこと 手書きで横書きの長文の文章を書く 細かい字をぎっしり書く 日語を書く 数式を書く 図表を書く 書いたメモ

    iPadを紙代わりに使うならNote Taker HD - Pixel Pedals of Tomakomai
  • git rebaseとgit mergeはともだち こわくないよ - Pixel Pedals of Tomakomai

    例えば、以下のようなコミット履歴があるとします。 A---B---C---D masterここで git rebase -i HEAD~3 をして、 コミットB を E に書き換えたくなったとします。このとき、rebase -i によって履歴を書き換えてしまうと、以下のようにリポジトリからB〜Dのコミットは消滅してしまうと思っている人も居るのではないでしょうか。 A---E---C'---D' master確かに、Gitがこのような動作をするのであれば、rebase後に元の状態へ戻すことは到底困難であるように見えます。しかし、正確に書けば、実際のレポジトリの状態は以下のようになります。 E---C'---D' master / A---B---C---D実はコミットA〜Dの一連のコミットは手つかずで残っており、「master」というラベル*1が新たな枝に付け替えられただけなのです。よって、

    git rebaseとgit mergeはともだち こわくないよ - Pixel Pedals of Tomakomai
  • レガシーオレオレフレームワークをPSGI化した記録 - Pixel Pedals of Tomakomai

    5年ほど前に作ったレガシーな自作フレームワークを、この度PSGI化した際の記録です。単なる記録であって、必ずしも「PSGIへの対応はこうやるといいよ!」いう内容ではありません*1が、興味があればどうぞ。 レガシーオレオレフレームワークの概要 Oreore::Application はCGI::Applicationのように、1リクエストに対して1インスタンスのフレームワークです。各 App.pm に 呼び出し用の hogehoge.pl を1つずつ割り当てて、 Apache::Registryで運用されていました。 package MyApp; use base qw(Oreore::Application); # For index.pl?action=index sub action_index{ my $self = shift; $self->response->content(

    レガシーオレオレフレームワークをPSGI化した記録 - Pixel Pedals of Tomakomai
  • Server::Starter の --interval オプションは大切 - Pixel Pedals of Tomakomai

    最近、Server::Starterを使い始めたのですが、いつでも簡単にサーバを再起動でき、とても便利で安心です。詳しい解説は、kazuhoさんの去年のAdvent Calendarのエントリがわかりやすいと思います。 さて、start_server コマンドには --interval ってオプションがあるのですが、このオプションが結構重要です。--helpから引用すると以下の通りです。 --interval=seconds minimum interval to respawn the server process (default: 1)Server::StarterがHUPシグナルを受け取った際、--interval の間にサーバがエラー終了しないと、サーバの立ち上げに成功したと見なして新しいサーバにディスパッチを開始してしまいます*1。よって、立ち上げに1秒以上時間がかかるサーバを

    Server::Starter の --interval オプションは大切 - Pixel Pedals of Tomakomai