$shibayu36->blog;

株式会社はてなでエンジニアをしています。プログラミングや読書のことなどについて書いています。

perl

perlのメトリクスをjenkinsで可視化する

最近リファクタリングをしたいと思っているんだけど、なかなか大変で後回しにしてしまう。これはいけないと思って、自分達を納得させるために、perlのメトリクスを出し、それをjenkinsで可視化するというのをやってみた。 perlのメトリクス集計 まずperlのメ…

いろいろなツールをplenvに移行した

最近はplenvを使うべきって感じだったんだけど、promptとかemacsとかを対応させるのがちょっと面倒でサボっていた。そろそろやばいと思ったので全部plenvに移行した。 インストール macだったらbrewで提供されているので入れる。https://github.com/tokuhiro…

Xslateのpre_process_handlerを使ってCSSのインライン化をする

この前 XslateのテンプレートをCSSインライン化する - $shibayu36->blog;という記事をかいたのだけど、その時にgfxさんにコメントで gfx BKっぽい気もしますが他にいい方法は思いつかないし、最近 pre_process_handler という機能も足したので、まあ許容範囲…

XslateのテンプレートをCSSインライン化する

HTMLメールを送信する時、クライアントによってはlinkでのcss指定やstyleタグを解釈しない場合があります。その場合、CSSをHTML要素にインライン化しないといけないのですが、今回はこのことについて書いてみます。 CSS::Inlinerを使う perlにはCSS::Inliner…

Test::Moreのsubtestで困っていること

最近はperlでテスト書く時はTest::Classを使うようにしている。その理由の一つとして、subtestだけのテストだと少しだけ困ることがあるからだ。具体的には以下の事がある。 subtestは書かれている順に実行されるため、前のテストの状態に依存したコードが書…

Kyoto.pm 05 Tech Talksを開催し、イベント開催の面倒を減らすというLTをしました

Kyoto.pm 05 Tech Talksを開催しました! #kyotopm - kyotopm's blogKyoto.pm 05 Tech Talksを開催しました。今回は色々な方が参加してくれて、30人以上参加者が集まりました。発表者も結構集まって良かったです。 発表 僕自身は「イベント開催が面倒」とい…

Harrietを使ってprove単位でmysqldを作ってみた話

Harriet ー テストのときつかうにデーモンの取扱を簡単にするためのフレームワーク - tokuhirom's blog. を見て、これ便利だなーと思ったので、試しにこれを使ってprove単位でTest::mysqldを起動するやつを作ってみた。 harriet用設定を作る まずt/harriet/m…

処理のtimeoutを簡単に書くためのSub::Timeoutというモジュールを作りました

ある処理をするときに一定以上の時間かかったらtimeoutして処理を終わりたいみたいなことをしたい時がたまにあるので、それを行うSub::Timeoutというモジュールを作りました。https://github.com/shibayu36/p5-Sub-Timeout 使い方 use Sub::Timeout; use HTT…

Dist::Maker::FromProjectというのを作りました

最近インターンや研修用にフレームワークを作っています。出来るだけコードを読んで学習してもらうというのを重視して、今回のフレームワークはコードジェネレータでプロジェクトの雛形を作り、その中にフレームワークのコードも含まれるようにしています。…

perlで改行など特殊文字が含まれるものをDumpする時は

最近テストをしていて、全く同じ文字列に見えるのに、テストが通らないという事例がありました。今回は\tとか\rとか特殊文字が入っていて文字列が一致しないという事例でした。特殊文字とかを見える形でするのはどうすればいいのだろうと思っていたら、Data:…

shipped Cinnamon 0.22

Cinnamonの出力のハンドリングに問題があったようなので、それを修正した0.22をshipitしました。具体的にはhttp://blog.1q77.com/2013/05/cinnamon-remote-cr/ で指摘されている内容で、それの変更としてpullreqをもらえたので、mergeしてリリースしました。…

HTML::Parserを使って特定タグの属性を置き換える

最近、imgタグのsrcだけ書き換えたいという事例が発生したので、HTML::Parserを使ってやってみた。 サンプル 例えばサンプルとして以下のコード。 package HTML::Converter; use utf8; use strict; use warnings; use parent qw(HTML::Parser); # HTMLのimg …

CinnamonをMinilla管理にした

Minillaが流行っていたので、僕もCinnamonをMinillaに対応させてみました。とりあえず $ cpanm Minilla 次にCinnamonのdirectoryにいって、migrate。 $ cd cinnamon $ minil migrate Cannot retrieve 'abstract' from /Users/shibayu36/development/myprojec…

ペパボとカヤックに遊びに行ってきました & Cinnamonの検証について発表しました

金曜日にペパボとカヤックに遊びに行って来ました。 ペパボ 昼ごろにペパボに遊びに行ってantipopさんに案内してもらいました。食堂みたいなのがあってそこで昼食を食べた後、オフィスに少しだけお邪魔しました。ちょうど開発の方々がお話をしていたので、少…

Cinnamonにmax_concurrency設定をつけました

並列化に伴い、タスクごとの最大並列数を設定できるようにしました。以下のように設定すると、updateは全hosts並列で動き、restartは1並列、server:setupは最大2並列で動くようになります。 use Cinnamon::DSL; set max_concurrency => { restart => 1, 'ser…

QA Hackathon at Tokyoに参加してPrePANとCinnamonの開発をしました

QA Hackathonが東京であったので、PrePANとCinnamonの開発をしてきました。 PrePAN id:antipopさんと相談して、とにかくレビューをちゃんとしてもらわないと話にならないから、コメントがついたりしたらアプリケーションの通知と一緒に、メールでも通知しよ…

CPANモジュールに含まれるファイルについて調べた

おそらくはそれさえも平凡な日々: CPANモジュールのパッケージングの歴史 の話を見ていて、興味が湧いたというのと、CPANモジュールを作ってもそういうところは無視してしまっていたので、これは良くないと思い少しだけ調べた。 lib, bin, t, xt README, Cha…

perlでforkしたプロセスとの通信を簡単に行う方法が知りたい

今作っているもので、「forkした後、子プロセスの実行の結果を最後に親プロセスに通知し、親プロセスは子プロセス群の状態をまとめて取得する」、ということがやりたいのですが、モダンかつ簡単な方法って何があるんでしょうか?具体的には use Parallel::Fo…

Kyoto.pm 04 Hackathonを開催します

最近開催していなかったKyoto.pmですが、なにか物を作りたい気分になってきたので、株式会社はてなのセミナールームでハッカソンを開催します。 今回のテーマは「Webアプリ」にしようと思います。ただし名目なので、Perlに関して好き勝手に何か作る軽い感じ…

DBIのプレースホルダーで起こった謎な挙動

先日DBIを使っていて、謎な挙動に遭遇したので書いてみる。LIMIT, OFFSET句でプレースホルダーを用いた時に起こった。DBI + DBD::mysqlを使っていた。 DBI: 1.616 DBD::mysql: 4.022 LIMITとOFFSETを両方にプレースホルダーを使う LIMITとOFFSETを両方を?に…

crontabのテストをParse::Crontabを使って書いてみた

おそらくはそれさえも平凡な日々: 運用におけるcrontabのテストとParse::Crontabを見て、便利そうだなーと思ったので、使ってみた。 package t::crontab use strict; use warnings; use Parse::Crontab; use Test::More my $files = [ 'config/crontab', 'co…

expand-region.elでperlのコードの範囲選択

expand-region.elの紹介 - Life is very shortで紹介されていたexpand-region.elを使っていたのですが、expand-region.elはmodeごとにいろいろカスタマイズ出来るようでした。しかし、これまでperl用の設定がなく困ってました。で、色々探してたらhttps://gi…

shipped Cinnamon 0.07

Cinnamonの0.07をshipitしました。今回はcinnamonコマンドがexit codeとして、コマンドが成功した時に0を返し、コマンドが失敗した時に1を返すようになりました。これにより監視ツールなどと組み合わせたりして、以下のようにコマンド実行出来るようになった…

Kansai.pmに行ってCinnamonというデプロイツールについて発表しました

Kansai.pm 第15回ミーティング on Zusaar に参加して来て、前作ったデプロイツールであるCinnamonについて発表して来ました。 発表したこと 以前capistranoの奥深さに毎回ハマっているのを怒りを覚えて、もっとシンプルなデプロイツールであるCinnamonをanti…

shipit Cinnamon 0.06

Cinnamonの0.06をだしました。複数タスクに対応しました。https://metacpan.org/release/SHIBAZAKI/Cinnamon-0.06/今回のupdateで複数タスクを同時に実行できるようになりました。以下の様な感じに実行できる。 $ cinnamon production update installdeps re…

Net::TwitterとNet::Twitter::Liteの関係

今回もTwitter API v1.1に関連するお話です。perlでTwitter APIを利用する際に使われているNet::TwitterとNet::Twitter::Liteに関することについて書いてみます。 背景 Net::TwitterはTwitter APIのperlクライアントの一つです。これを利用することでTwitter…

Twitter API v1.1とNet::Twitter::Lite

Twitter API v1.1完全移行まであと1ヶ月を切りましたね!対応に非常に慌てているshiba_yu36です。どんな変更があるかはTwitter APIと開発者規約変更のインパクトまとめ:結局、Twitter API 1.1で何が変わる? 5つのポイント - @ITあたりにまとまっていると…

emacsで、インストールしているperl moduleのソースを一瞬で表示する

emacsでperlのコードを呼んでいると、このモジュールの中身どうなってるんだっけって思って調べることがよくあります。そんな時、perldoc -mをemacs上で呼ぶと便利です。 emacs上でperldoc -mを使う方法はid:antipopさんがブログに書いていて、EmacsでPerl開…

DBIx::Tracerを使って流れているSQLのテストをしてみた話

DBIx::QueryLogを使ってちゃんとSQLが流れているかテストする - $shibayu36->blog;で、流れているSQLをテストしたいと言う話をしたら、tokuhiromさんにDBIx::Tracerを使えばもう少しシンプルにかけると言われたので、やってみました。 (再掲) テストしたい状…

shipit Cinnamon version 0.04

Cinnamonの0.04をshipitしました。 Changes 今回の変更は以下のとおり。deploy.plに書かれているパラメータをCLIから上書きできるようになりました。capistranoにおける-sと同じような感じですね。id:magicalhat(hatyuki@github)さん++ 0.04 Sun Jan 20 08:2…