タグ

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

  • 新しい会社に入社しました - Pixel Pedals of Tomakomai

    色々ありまして無職の状態が続いていたのですが、日付けで新しい会社に入社しました。 自社プロダクトを作っている会社で、インフラからアプリまでを全て自社で責任を持って開発しています。YAPCでスポンサーをやっていることからもわかるように、開発言語は基的に全てPerlを使っています。 これだけの規模のサービスにエンジニアがすべてにおいて0から関われる職場はそうそうあるものじゃないので、今から大変楽しみです。技術的にも大規模サービスであったり統計的分析であったり様々なチャレンジができる内容でやりがいを感じます。また、CPAN Authorの方々と仕事をするのも実は初めてなので、いい刺激を受けられるんじゃないかと思っています。 このblogは別段変化することもなく相変わらず俺得エントリを垂れ流す感じになると思いますが、今後ともよろしくお願い致します。

    新しい会社に入社しました - Pixel Pedals of Tomakomai
    dann
    dann 2012/08/01
    おめでとうございます!
  • 「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
    dann
    dann 2011/10/21
    おめでとうございます!
  • 今日はYAPC::Asia Tokyo 2011の2日目です - Pixel Pedals of Tomakomai

    あいにくの雨ですが、今日も時間通り会場に到着しています。 日もgihyo.jpさんの特集のレポーターをやってます。参加されているみなさんと一緒に楽しみながらレポートしようと思っています。 Kazuho Okuさん「Unix Programming with Perl 2」 昨年のトークでは、エラーやファイルハンドル、シグナルについて話した 今年はプロセス間通信と、シグナル周りのレースコンディション IPC::Open3 : open3がロックする場合がある。いつ? A). STDIN を読むコードの場合、$cinを待ち続けるのでロック close $cin する B). 子プロセスがSTDOUTとSTDERRに大量にデータを吐いた場合、バッファがいっぱいとなる 試すと、16384byte (16KB)でブロックする。これがバッファサイズ。OSによって異なる--close $cout, c

    今日はYAPC::Asia Tokyo 2011の2日目です - Pixel Pedals of Tomakomai
  • どんな環境でも動くPerlスクリプトを作る時の小道具 - Pixel Pedals of Tomakomai

    cpanmのように素のPerlだけで余裕で動くぜっていう配布物を作る時に便利な小道具×2です。 App::FatPacker App::FatPackerとは、依存モジュールを全て1つのファイルに押し込んでパックしてくれるライブラリです。 1枚のスクリプトに全てをまとめてくれるApp::FatPacker Module::CoreList CGI の配布や、アプリケーションの配布のときに、どのモジュールがどのバージョンから 標準添付になったのかを知りたくなります。 Module::CoreList - 標準添付ライブラリかどうかを調べる 後はHTTP::Tiny だとかText::MicroTemplate とかPurePerl で小粒なモジュールを集めれば、レトロでCPANモジュールがメンテされてない環境でも動作するスクリプトを、割とモダンな構成で作れて大変気分が良くなります。 ちなみに

    どんな環境でも動くPerlスクリプトを作る時の小道具 - Pixel Pedals of Tomakomai
    dann
    dann 2011/04/09
  • 今日は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
    dann
    dann 2010/10/01
  • 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
    dann
    dann 2010/06/09
  • 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
    dann
    dann 2010/04/28
  • 今日は 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
  • 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
  • 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
    dann
    dann 2010/02/13
  • Version Control with Git / Jon Loeliger を共訳しました - Pixel Pedals of Tomakomai

    この度、縁あって実用Gitの共訳に参加させて頂きました。監訳は吉藤さん、共訳者はid:kaisehさんと渡邉さんです。また、付録として瀧内さんがGitHubについての章を寄稿されています。 日語のGitの書籍としては、すでに濱野さん自ら書かれていらっしゃる入門Gitという名著がありますが、Loeligerさんの書かれた書はよりチュートリアル的な内容となっています。目次を見るとわかりますが、テーマごとに章が分かれており、知りたい内容だけを重点的に読むこともできます。 Gitは、ユーザインタフェースで独特な部分があったり、Subversionにはない概念があったりすることにより、難解で理解しにくい物だと誤解されやすいですが、内部構造は驚くほどシンプルかつ強力です。実用Gitは常にこの内部構造に視点を置いた解説をしてくれるため、読み進めていくと「ああ、Gitはここではこういうことを裏でやって

    dann
    dann 2010/02/09
  • 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
    dann
    dann 2009/12/20
  • CoroとAnyEventを一緒に使うならunblock_subを覚えておくべき - Pixel Pedals of Tomakomai

    以前に、 なお、(2)でフロントエンドの処理を書く時は(0)のバックエンドとは逆に、AnyEventは直接使わない方が無難だと思います。理由は、AnyEventのイベントループからはCoroの層の関数が使えないからです。 Coro::AnyEventでフロントエンドをコールバックを使わずに書く なんて書いてたので、多少追記を。 CoroとAnyEventの相性 これは、非常によいです。 Coroは use Coro::AnyEvent とか明示的にしなくても、内部でAnyEventを使っています。例えば、Coro::Timer::sleepは制御を他スレッドに渡してその後自分のスレッドに戻ってくるという動きをしますが、この「自分のスレッドに戻ってくる」という動作を、AnyEventのイベントループに預けたコールバックから自スレッドのreadyを呼んで起こしてもらうことで実現しています。 C

    CoroとAnyEventを一緒に使うならunblock_subを覚えておくべき - Pixel Pedals of Tomakomai
    dann
    dann 2009/12/20
  • Gitリポジトリ中のサブディレクトリを別のリポジトリにする - Pixel Pedals of Tomakomai

    clone して filter-branch を使うと、サブディレクトリを別のリポジトリにできます。 例えば、/tmp/hoge にあるリポジトリに hoge と subdir/foo と言うファイルがあって、ログが以下とすると、 % git log -p --pretty=oneline ac27f0a1f18108cd81be52634b07228c6bb95a0b Added foofoo diff --git a/subdir/foo b/subdir/foo index 257cc56..b4c9d55 100644 --- a/subdir/foo +++ b/subdir/foo @@ -1 +1,2 @@ foo +foofoo a6cc83ca5cec477444f0d63359ef12dede648eb5 Added hogehoge diff --git a/hoge

    Gitリポジトリ中のサブディレクトリを別のリポジトリにする - Pixel Pedals of Tomakomai
    dann
    dann 2009/11/30
    cool
  • モナドで悟りをひらきたいのなら - 図でわかる(?)モナド - Pixel Pedals of Tomakomai

    圏論の最大の武器はダイアグラムなので、モナドで悟りをひらきたいのならダイアグラムを使えばいいんじゃないでしょうか。 ダイアグラムの書き方 例えば、「 f :: a -> b 」とか「length :: [a] -> Int」は以下のように書きます。型を点で、関数を矢印で書きます。 ダイアグラムの利点は、fやlengthの中身を忘れて簡略化することができることです。人間の脳ができることには限りがあるので、注目する情報が少ない方が理解しやすくなるってスンポーです。 なお、 合成 g . f は図示する時に順が逆になるので気をつけて下さい。これは、合成関数の適用が g ( f x ) と書けることに由来してます。まずfを適用し、次にgを適用するということです。 return と >>= の図示 今回のダイアグラムの約束として、元となる型(Bool, Char, Int 等)は最下段に書きます。そ

    モナドで悟りをひらきたいのなら - 図でわかる(?)モナド - 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
    dann
    dann 2009/10/28
  • Coro::AnyEventでフロントエンドをコールバックを使わずに書く - Pixel Pedals of Tomakomai

    Coro::AnyEventを使うと、継続渡しスタイルを使わずに非同期を書くことができます*1。 ということで、試しにやってみました。 最初にまとめ AnyEventの層を作り、その上にCoroの層を重ねて、フロントエンドからはCoroの層だけ使うとわかりやすいアプリができるんじゃないかなあと思います。 (0) AnyEventのAPIを作る まず、AnyEventでフロントエンドのための材料を作ります。頑張ってコールバックを使って非同期処理を書いて下さい。名前空間はAnyEvent::的な何かにするといいと思います。また、たぶんこの段階ではまだCoro::AnyEventは使わない方が無難です。ピュアAnyEventの方が使い回しが効きますし。 ここでは、AnyEvent::HTTPを題材にします。バックエンドとしてすでにAnyEvent::HTTPは使えるものとします。 (1) Cor

    Coro::AnyEventでフロントエンドをコールバックを使わずに書く - Pixel Pedals of Tomakomai
    dann
    dann 2009/10/01
  • recursive blocking wait detected への対処 - Pixel Pedals of Tomakomai

    連休の非同期祭も(疲れたので)これでラストです。 AnyEvent(5.2)でこんなコード書くと、「recursive blocking wait detected」が出ます。 use strict; use warnings; use AnyEvent; sub main { foreach my $i (1 .. 5) { my $cv = AE::cv; my $t = AE::timer $i, 0, sub { $cv->send($i); }; print $cv->recv, "\n"; } } my $t = AE::timer 0, 0, \&main; AE::cv->recv; # 結果 # EV: error in callback (ignoring): AnyEvent::CondVar: recursive blocking wait detected at

    recursive blocking wait detected への対処 - Pixel Pedals of Tomakomai
  • 今日はShibuya.pm #11の日です - Pixel Pedals of Tomakomai

    no Perl; use x86; *1ですので、Perlにそんなに興味がない方でも楽しめると思います!!(笑) 今日はユニバーサルアクセスを兼ねて内容を細か目に書いたのですが、書いてる人もあまり理解してないので雰囲気だけ読み取って下さい・・・。誤りの指摘は大歓迎ですorz 4/23追記: 内容の補完のために、すぎゃーんメモさんとこのメモも合わせてどうぞ。 第一部 sandbox特集 バイナリ畑で捕まえて - inside lleval / dankogaiさん バイナリ麦畑で捕まえて → lleval というサービス デモ Perlのコード(CSSの都合で動かない) BASICのコード postscript Perl6 → 重いけど動く 動かすのは簡単 → 不正なコードを動かされると困る → 捕まえて欲しい 1分を越すとタイムアウトする fork爆弾 外部モジュール(syscall.p

    今日はShibuya.pm #11の日です - Pixel Pedals of Tomakomai
  • 今日は Yokohama.pm の日です - Pixel Pedals of Tomakomai

    こちらでustされますので、早めにテレビの前に集まりましょう! QudoxSkinny / nekokakさん DBIx::Skinny 昔はSQL::Parser。今はルールベースでオブジェクトにマッピング Data::Modelに近い setupで接続情報、install_tableでテーブル情報 install_utf8_columnsとかinstall_inflate_rule → ルールベースでの設定 SQL::Parserを使うの辞めたら、開発が盛んになった → 速くなったら戻ってくる まとめ: やりたいことは大体出来る。githubにあるのでどうぞ Qudo TheSchwartzにかわるJobQueueシステム Skinnyをベースにしたかった githubの練習がしたかった TheSchwartzのスペルが覚えにく過ぎる。拡張がむずい。挙動を知りたい QueueDoでクド

    今日は Yokohama.pm の日です - Pixel Pedals of Tomakomai