タグ

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

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

    今年もYAPC::Asia Tokyoの季節がやって参りました。今年の会場は慶應義塾日吉キャンパスです。夕方から始まる前夜祭から参加する予定ですので、いつものように適当にメモをとっていきます。 今年もgihyo.jpさんのスペシャルレポートにレポーターとして参加します。今年のレポーター陣は歴代YAPCレポーターを含む大変豪華な布陣となってます。2010年レポーターの@usuihiroさん、2011年レポーターの@ytnbodyさん、2012年レポーターの@moznionさん、エンジニアサポートCROSS主催者の@muddydixonさん、Perl6に関するトークで有名な@risouさん、そして、あらゆる武術を究めんとする謎の刺客@hiroyukimさんの7名でお送りしますので、どうぞそちらの更新もお楽しみに! LT-THON 帰ってきたLT-THONです。拍手君も帰ってきました。喋るとキラ

    今日はYAPC::Asia Tokyo 2013の前夜祭です - Pixel Pedals of Tomakomai
  • 「Hokkaido.pm のおかげで結婚できました」 - Pixel Pedals of Tomakomai

    めでたい RT @lestrrat: [YAPC::Asia のおかげで結婚できました」RT @hiratara: 無事に婚姻届が受理されたとこ。 @Yappo 「YAPC::Asia のおかげで結婚できました」エントリありますか RT @hiratara: 無事に婚姻届が受理されたとこ。 @lestrrat エアRTからの無茶ぶりがあったので、YAPC::Asiaの話ではないですがこぼれ話でも。 とは付き合いが長かったのに加え、今年は震災もあったことから、「二人の関係を有耶無耶にしたまま人生を終えてしまったら死んでも死にきれない」という思いが少なからずありました。そのタイミングで開催されたのが、Hokkaido.pm #5。ちょうどうまーく実家に帰る口実ができたので、Hokkaido.pmへ行くついでにプロポーズしてそのまま実家に挨拶へ連れて行くという作戦を練りました。にも実家にも、

    「Hokkaido.pm のおかげで結婚できました」 - Pixel Pedals of Tomakomai
    bayashi_net
    bayashi_net 2011/10/21
    「Hokkaido.pmへ行くついでにプロポーズ」
  • Data::Monad::CondVar をリリースしました - Pixel Pedals of Tomakomai

    YAPC Asia 2011で話をする予定のモジュールをCPANへアップしました。 Data::Monad::CondVarはJSDeferred みたいなもんです。 use AnyEvent; use AnyEvent::HTTP; sub random_choice { my ($data, $headers, $cb) = @_; my (@url) = $data =~ m{href="(http:[^"]+)}g; http_get +(shuffle @url)[0], $cb; } my $cv = AE::cv; http_get "http://yapcasia.org/2011/", sub { random_choice @_ => sub { random_choice @_ => sub { random_choice @_ => sub { my ($data,

    Data::Monad::CondVar をリリースしました - Pixel Pedals of Tomakomai
  • 今日はShibuya.pm #16の日です - Pixel Pedals of Tomakomai

    今日は夏の正規表現祭りに参加していますので、自分用にメモします。 ustreamもあります! (Irr|R)egular Expressions / @dankogaiさん 「えろい」のではなく「えらい」 「命賭けるな、コード書け」 正規表現の使い過ぎに注意 $str eq 'XXX' or $str eq 'YYY' を /^(XXX|YYY)$/ に書き直したくなる → やりすぎ もしくはハッシュを使ったり、5.10 でスマートマッチ ~~ を使ったり。 メールアドレスの検証の正規表現 → 適当に書くと不完全。完全に書くとすごく長い Regexp::Common → 便利な正規表現集。ipv4とか。 Regexp::Assemble → alternations (xxx|yyy|zzz) をTRIE最適化する。 ただし、5.10 以降は自動でTRIE最適化してくれる マッチした部分を

    今日はShibuya.pm #16の日です - Pixel Pedals of Tomakomai
    bayashi_net
    bayashi_net 2011/07/07
    「正規↑表現↓」
  • fixed point operator による再帰的な記述の除去 - Pixel Pedals of Tomakomai

    論理と計算のしくみを読んでるメモ。 fixed point operator があれば、再帰的な記述を再帰しない記述に直せる。再帰的な記述とは、例えば、以下のようなもの。 my $fact = sub { my $x = shift; $x <= 1 ? 1 : $x * $fact->($x - 1); }; 階乗を求める関数$factの定義内で、$factを参照している。これは一見実行できそうに見えるが、sub の中をコンパイルする段階では$factがまだ未定義のため実行できない*1。これを再帰しない記述に変えるために、fixed point operator というものが使える。fixed point operator とは、以下の性質を満たす$make_fixed_point。 my $x = $make_fixed_point->($f); $f->($x) eq $x; 任意の

    fixed point operator による再帰的な記述の除去 - Pixel Pedals of Tomakomai
  • 今日はYokohama.pmの日です。 - Pixel Pedals of Tomakomai

    日18:30から行われるYokohama.pm #7へ参加する予定です。 Sphinx + blockdiagで始めるドキュメント生活 / @tk0miyaさん 資料は後でTweet予定 ドキュメントの種類 納品物としてのドキュメント = お客さんのもの 設計/運用のためのドキュメント = 自分たちのもの 後者が足りない → 辛い現実 ドキュメントのメンテ テーブル定義、機能、画面キャプチャがドキュメントに更新されない メンテが必要 → Lightweight が大事 Lightweight なドキュメント Sphinex、Wiki、ソースに書く、テンプレ化 Sphinx reST形式で書く→XMLやLaTeXPDFHTMLなどに変換 Python製 reST形式 → 「====」とか「----」とか「*list」みたいなマーキング makeでビルド コードハイライト機能 → Per

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

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

    スライド「YAPCレポートの舞台裏」 - Pixel Pedals of Tomakomai
  • WWW::Mechanize-1.66と文字コード - Pixel Pedals of Tomakomai

    最近、LWPやWWW::Mechanizeを2007年頃のバージョンから最新のバージョンにしたら、文字コードで色々ハマったのでメモっておきます。 結論から言えば、最新のLWPやWWW::MechanizeはUnicode文字列を適切に扱えますので、以下を心得て使うとハマりどころが少ないかなと思います。 LWP-5.837 $ua->decoded_contentはUnicode文字列*1 Content-Typeでの指定やMETAタグの指定から推測してくれる $ua->content はバイト列 ただし、$ua->contentはContent-Encoding(俗にいうgzip圧縮)の展開をしないので、decoded_contentが無難 WWW-Mechanize-1.66 $mech->content は $ua->decoded_content つまり、Unicode文字列 $me

    WWW::Mechanize-1.66と文字コード - 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
  • 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
  • Tatsumaki でブラウザベースの Twitter Streaming - Pixel Pedals of Tomakomai

    それってHamakiなんですが、試しに作ってみたので一応。ただし、Tatsumakiは、 This is considered as alpha quality software. Most of the stuff are undocumented since it's considered unstable and will likely to change. You should sometimes look at the source code or example apps in eg directory to see how this thing works. Tatsumaki なので自己責任で:-p 後、このエントリより eg/chat を見た方が勉強になりますw Tatsumaki概要 TatsumakiはPlackとAnyEventをベースにしたTornadoっぽくWE

    Tatsumaki でブラウザベースの Twitter Streaming - 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
  • レガシーオレオレフレームワークを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
  • Apache2+mod_proxy+持続接続で時々レスポンスが悪くなる現象のメモ - Pixel Pedals of Tomakomai

    今更な話題で恐縮ですがmiyagawaさんがものすごい勢いで教えてくれたのでメモっておきます。 mod_proxyでバックエンドにリクエストを投げたとき、リクエストのうち何個かが極端に遅いという現象が起こりました。その時のabの結果は以下。 % ab -c 5 -n 500 http://127.0.0.1:21082/ Percentage of the requests served within a certain time (ms) 50% 1 66% 1 75% 1 80% 1 90% 4 95% 1008 98% 1994 99% 2003 100% 2020 (longest request)なお、今回使おうとしたバックエンドはStarmanです。 多分こんな原因 検証不足で断言はできないのですが、多分以下のような感じ。多分。 Apache のデフォルトのServerLimi

    Apache2+mod_proxy+持続接続で時々レスポンスが悪くなる現象のメモ - Pixel Pedals of Tomakomai
  • 今日は Yokohama.pm #5 の日です - Pixel Pedals of Tomakomai

    19:00 にスタートです。詳細はこちら。 出ますので、いつものようにメモをまとめる予定です。ustreamはこちららしいです。 モダンコマンドラインツール - xaicronさん cpanminus CPAN::Shellの代替 Plackのリリースが伸びる原因に!? cpan の問題点 起動、メモリ Bundle::CPANを入れるのが大変 コードがカオス CPANPLUS 5.10 からコア入りしているけど・・・ 重過ぎる miyagawaさんが40分くらいで作った 特徴 単一のPerl Script 高速、省メモリ プラガブル インストール → ダウンロードしてchmod +x か、普通にインストール コマンドは cpanm デフォルトでは表示をほとんど捨ててる。Y/Nが必要な時は --interactive Pluginは17個 backpan とか 今のとこは開発者向け。自己責

    今日は Yokohama.pm #5 の日です - Pixel Pedals of Tomakomai
  • Gitで共有リポジトリを作るならgitosisが便利 - Pixel Pedals of Tomakomai

    ちょろっと渡邉さんのエントリに補足を。 実用Git 吉藤 英明 (監訳) ちなみに、には直接関係ありませんが、このの翻訳もGitを使って進められました。 共訳させていただいた「実用Git」が発売になります 原稿はGitで管理しようと言う話は最初から訳者3人の間で出ていたのですが、原稿を管理するとなると当然read権限も含めたパーミッションの管理が必要でした。3人がgit-daemonを立ててお互いにpullしようかとも思ったのですが、git-daemonを使うと匿名で誰でも読めるリポジトリとなってしまいます。HTTP経由だとWEBサーバによってアクセスコントロールはできますが、速度に不安が残ります。ということでsshがベストなんでしょうが、gitのためだけに3人分のアカウントを作るのはちょっと気が引けました。 そこで、今回使ったのがgitosisです。gitosisについては入門git

  • Plack::App::Proxyについてだらだらと - Pixel Pedals of Tomakomai

    去年の年末、FlashのXMLSocket通信を横取りしてダンプするアプリを書こうとしたのですが、その時に見つけたのがLee AylwardさんのPlack::App::Proxyです。HTMLを置換してFlashの接続先を横取りしつつ、自前のXMLSocketサーバを立ち上げるってのが1プロセスでできるってのは、非同期なWEBサーバならではの技ですね! ただ、Plack::App::Proxyを触り始めてみると、そのままではなかなか難しい部分が色々あったりしたので、コメンテナにしてもらってちょくちょくいじったりしています。(ちなみに、miyagawaさんもコラボレータで、私よりバリバリいじってますw) 一言で言えば、 Plack::App::Proxy がカバーしているのは Apache の mod_proxy の機能です。 使い方はpod見てもらうと全部載ってますが、例えば /back

    Plack::App::Proxyについてだらだらと - Pixel Pedals of Tomakomai
  • PSGI 1.03のMiddlewareを書いてみる - Pixel Pedals of Tomakomai

    最近Middlewareを書くことが多かったのでまとめときます。 Middlewareとは PSGI的には、Middlewareは外から見るとPSGI Applicationsですが、別のPSGI Applicationsを動かす能力を持っているものです。平たく言えば、「$app をラップして 新たな $app として振る舞うもの」と言えます。ただしPSGIでは、この"ラップの方法"は定められていません。 ただ、現実的には Plack::Builder の enable で適用できた方が楽なので、「Plack::Middlewareを継承する」か「$appを受け取って新たな$appを返すコードリファレンス」のどちらかがいいでしょう。 入力$envを参照・変更する 一番基的なMiddlewareのパターンです。これは簡単。コードリファレンスで実装するとこんな感じ。 my $middlewa

    PSGI 1.03のMiddlewareを書いてみる - Pixel Pedals of Tomakomai
  • Coroでスレッドプールを使う - Pixel Pedals of Tomakomai

    Coroでスレッドプールを使うにはasync_poolを使えばいいはずなのですが、何も考えずに使うとうまくいかない場合があります。 最初にまとめ 長いのでまずまとめときます。まとめると単純な話で、「async_poolを使う時には、同時にたくさんのスレッドを利用し過ぎないように気をつける」の一点に尽きます。 ベンチマークをとってみる asyncとasync_pool でベンチマークをとってみると、以下のようになります。 my $tasks = 100; Benchmark::cmpthese 1000, { async => sub { my $sem = Coro::Semaphore->new( 1 - $tasks ); for(1 .. $tasks){ async { $sem->up }; } $sem->down; }, async_pool => sub { my $sem

    Coroでスレッドプールを使う - Pixel Pedals of Tomakomai
  • PSGIを勉強したメモ(2) (PSGI 1.03でのストリーミング) - Pixel Pedals of Tomakomai

    PSGI Specificationが1.03に更新されています。新しく psgi.streaming が追加されました (Tatsumakiでも使ってる)。 最初にとても大事な注意 このエントリはPSGI 1.03の仕様について勉強したことを書いてます。PSGIの仕様はまだ流動的なので、かならず最新の仕様を見て下さい。 psgi.streaming とは PSGIアプリの戻り値は配列リファレンスですが、 psgi.streaming が有効になっているサーバではコールバック関数を返せます。 コールバック関数には返答用の関数が渡ってくるので、そこにいつもの配列リファレンスを返します。 sub { my $env = shift; $env->{'psgi.streaming'} or die; return sub { my $respond = shift; my $t; $t = AE

    PSGIを勉強したメモ(2) (PSGI 1.03でのストリーミング) - Pixel Pedals of Tomakomai