タグ

ブックマーク / songmu.jp (48)

  • おそらくはそれさえも平凡な日々: perlbrewのperlをrsyncでばら撒くときの注意点

    結論:なにも考えずに--updateオプションをつけているとハマる。--updateは付けちゃダメ!絶対! perlbrewでインストールしたPerlrsyncでばら撒くという運用をしているところは多いと思うんですけど、そこで最近一点ハマりました。 cpanモジュールをインストールした時にpmファイルのタイムスタンプは、tar ballの中身のファイルのタイムスタンプがそのまま保持されています。 ただし、コアモジュールのタイムスタンプはPerlインストール時のものになります。 そして、コアモジュールをupgradeした場合は、タイムスタンプはtar ballの中身のタイムスタンプになるので、タイムスタンプが古くなります。以下例。 $ perl -MTime::Piece\ 999 Time::Piece version 999 required--this is only version

  • おそらくはそれさえも平凡な日々: PerlのIdiomをCPANモジュールを使って可読性を高くしてみる

    今年からKayac技術部では以前以上にPerlを推進する方向で進めています。そんな中でこれまでPerlを書いたことのないエンジニアにもPerlを書いてもらうことも多くなってきたのですが、PerlのIdiomがやはりわかりづらいんだなぁということを感じています。 割りとサクッとやっつけでコードを書くことが出来るのもPerlの良い点ですが、まあ分かりづらいよね...、と言うことで最近はPerlに慣れない人に対しても可読性が高くなるように多少心がけています。 てことで、PerlのIdiomとそれを読みやすくしたものを幾つか。 ファイル一気読み こんな感じで書いてしまうことが多いと思います。 use autodie; も併用することが多いので、or dieとかも書かない感じ。 my $content = do {local $/; open my $fh,'<:utf8',$file_name;<

  • おそらくはそれさえも平凡な日々: 人生は調和級数であるがゆえに美しく、業が深い

    しかし、ブログは一度放置に入って全く書かなくなるものですね。くだらないことでも良いから書き続けることが大事なんでしょう。てことでくだらないことでも書こうかなと。 最近はMTで書くのがたるくなってきて、自分で適当なBlogツール的なものを作ろうかとか考えて、markdownをgit管理する簡易CMS的なものを多少作ってもいたのですが、そんなことをしているうちに余計ブログを書かなくなったフシもあります。 閑話休題。 最近(でもないけど)以下のようなツイートをよく見かけますね。 hogeはfuga日生きた。今日は有意義だったか こんなのは以下のワンライナー一発です。11448日生きたようです。 perl -MDateTime -E 'say DateTime->today->delta_days(DateTime->new(year=>1980,month=>6,day=>5))->in_uni

  • おそらくはそれさえも平凡な日々: #isucon で優勝させてもらってきました

    まずは、ライブドアの皆様、素晴らしいイベントの提供当にありがとうございました。めちゃくちゃ楽しかったです。 Kayacのエンジニア3人 @fujiwara @sugyan @songmu の3人でチームfujiwara組を結成し、結果優勝することができました。 実際は周りの認識通り、@fujiwaraさんに優勝させてもらったようなもので、@sugyanと僕は手を動かしていただけです。まあ、空気にならずには済んだので、そこは安堵しています。 修正したisuconソースはフォークしてGithubに置きました。プログラムの修正部分のみで、my.cnfの修正なんかはここには反映されていません。 さて、@fujiwaraのコンテストでの動きや、帰宅後のBlogアップまであらゆる仕事が速くてビビるんですけど、詳しくは、#isucon で優勝してきましたを見てもらうとして、 どういうドタバタがあったの

  • おそらくはそれさえも平凡な日々: 面白法人カヤックで働いています

    ご存知のとおり1月からカヤックで働いています。なんとなく会社にも慣れてきたので、その辺の報告等を。 業務としては現状、ソーシャルゲームのサーバーサイドの開発をしています。毎日Perlを書けるので非常にハッピーです。でももっとバリバリ新しいことも出来るようになりたいですね。 入社した頃は、エンジニアのほとんどがMac Book ProにHHKBとドデカイディスプレイをつなげてザザーっと開発しているのを見て、覚悟はしていたけど、とんでもないところに来てしまったなと思ったものです。 自分がマウスとGUIに頼りっきりのゆとりだったことを改めて思い知りましたが、なんとかシェルとvimでひと通り開発できています。vimとかzshはもっと使いこなしたいですけどね。git格的にコマンドラインで使うのもブランチを切ったりするのも初めて(!)でしたが、今やgitが無いと生きていけませんね。 社員も増えてい

  • おそらくはそれさえも平凡な日々: モダンなPerlを「読む」上で覚えておくとよい構文 第2回「リストを理解すれば配列とハッシュをより活用できる」

    第1回から大分時間が空きましたが、なんと続きます。「次回は無名関数について書く」とか書いていましたが、先にリストについて言及することにします。 混同されがちですがこのエントリーでは「リスト」と「配列」を厳密に違うものとして扱います。結論を先に簡単に言ってしまうと、リストを配列に代入すれば配列になるし、リストをハッシュに代入すればハッシュになるということです。 Perlの式は値を返す サブルーチンに限らずPerlのあらゆる式は評価された値を返します。返された値は代入先があれば代入され、代入先がなければ捨てられます。 値を返さないケース ブロックは値を返しません(doを使えばブロックに値を返させることが出来ます)。例外的にuse文やpackage文は値を返しません。この二つはコンパイル時にコードを実行する前に最初に評価されるので値の返しようがありません。 さて、題です。Perlの式の値の返し

  • おそらくはそれさえも平凡な日々: Perlでフィボナッチ数列の高速化とか無名関数の再帰とか

    簡単にfibを高速化する方法を読み、おおっと思って、Perlでやってみた。 #!/usr/bin/perl use strict; use warnings; use feature qw/state/; use Benchmark qw/timethese cmpthese/; sub _fib_ret2 { my $n = shift; if ( $n == 1 ){ (1,1); } else { my ( $aa, $bb ) = _fib_ret2($n-1); ($aa+$bb, $aa); } } sub fib_ret2 { (_fib_ret2(shift))[0]; } sub fib_memo { state @cache; my $n = shift; $cache[$n] ||= $n <= 1 ? 1 : fib_memo($n-2) + fib_memo($n

  • おそらくはそれさえも平凡な日々: モダンなPerlを「読む」上で覚えておくとよい構文 第1回(?)

    Perl学習者がある程度Perlに慣れてくると、他の人の書いたコードを読む機会も増えてきます。そこでつまづく人は多いのではないでしょうか。かく言う私自身がその一人です(笑) モダンなPerlはDSL(黒魔術?)的な書き方をしている部分も多く、雰囲気として処理内容をつかみやすいのですが、逆に文法的に構文を理解するのが難しいことも多いです。 「知っている人には当たり前、知らない人には黒魔術」 Perlにはそういうのが多いので、そういったところで悩んでいる人も多いのではないかと思い、このエントリーを書いてみることにしました。気が向けば続きも書きます。間違っている部分もあるかと思うので、ブクマコメ等でご指摘いただけると助かります。 日の目標とサンプルコード 裸のワード(bareword)は怖くない encode cp932 => $str; sub PI(){3.1415926535} てことで