新しいblogに移行しました

新ブログ "All Yout Bugs Are Belong To Ass" に移行しました!

2013-08-20

[Perl]Archive::Zip使う前に読んでほしいエントリ

Archive::Extractってのを使うとハッピーになれます。

Archive::Zipと比較した利点

  1. インターフェースが実直
  2. 依存モジュールもさほど多くない
  3. ZIPアーカイブ以外にも.tar.gzあたりにも対応してくれる
  4. 安定と実績の作者

2013-07-31

[Perl] 某WAFを書いていたらTravis神が激おこプンプン丸だったので原因と解決案を(若者が)探った

https://travis-ci.org/ytnobody/Voson/jobs/9679903

このTravis-jobsをみてやって欲しい。common::senseがインストールできてないらしく、全然テストどころでは無くなってしまった。

で、某仮想八王子でそんなことをのたまっていたら、若人2名が原因をさぐってくれたりした。

http://blog.papix.net/entry/2013/07/31/153544

http://moznion.hatenadiary.com/entry/2013/07/31/172410

結局のところ、Devel::Cover::Plugin::CoverallsがJSON::XSに依存しており、JSON::XSがcommon::senseに依存していたため、common::senseがぶっ壊れたタイミングでJSON::XSもD::C::P::Coverallsもぶっ壊れてしまった、という状況。

これについては先ほどD::C::P::Coverallsにpullreqを投げてみたので、きっとそのうち何かしらのアクションがあるのではないかと思っております。

[追記]

じきにcommon::senseのfix入る模様なので、すぐに元の平和が訪れるでしょう。

[翌日、追記]

早速common::sense 3.72がリリースされ、元の平和が訪れました。
これをうけ、D::C::P::Coverallsのpullreqはクローズしました。

[さらに追記]

今回の一連の流れをtokuhiromさんがまとめてくれています。

また、今回の件をきっかけに、JSON.pmのメンテナであるmakamakaさんが、JSON関連のモジュールを紹介してくれています。

2013-05-28

[ツール]plenvやrbenvを一発でインストールするスクリプト

タイトルどおりの物をつくったので、晒しておきます。

使い方


plenvの場合

$ curl -L http://is.gd/plenvsetup | bash


rbenvの場合

$ curl -L http://is.gd/rbenvsetup | bash


手元でしか動作確認してないですので、おかしなところあったらツッコミください。


2014/04/28 追記

plenvsetupを更新しました。以下の修正が行われています。

  • zshに対応しました
  • ~/.plenv が存在する時にgit cloneしないようにしました
  • 手動によるprofileの再読み込みを促すようにしました

2014/05/31 追記

実行方法を sh から bash に修正しました。

2014/06/03 追記

後日談をこちらにかきました。ぜひ参考にしていただきたいと思います。

2013-05-17

[Perl]せっかくだから俺はこのMinillaを選ぶぜ

タイトルの元ネタはこれ

本題。ここに書いてあるように、
https://twitter.com/ytnobody/status/335212752857616384
Minillaつかってみた記録&べた褒めするエントリです。(Minilla作者によるエントリはこちら

1週間くらいMinillaをつかってみましたが、これからPerlモジュールをつくるのなら、Minillaはおそらく最上のツールとして選択肢に上るべきだと思いますね。

CPANにはこれまでもいくつかのモジュール作成支援ツールが登録されてます。例をあげると、

ExtUtils::MakeMaker
Module::Build
Dist::Zilla
Module::Starter
Module::Setup (しばらくこれのデフォルトフレーバーを使ってた)

などなどあるわけですが・・・(にわかCPAN Authorな僕はこのくらいしかしらないんですけど、Dist::Zilla,Module::Starter,Module::SetupがMinillaと同じいわゆる「Authoring tool」なんでしょうね)

Minillaのいいとこ


サブコマンドの直感性の高さ


よく使いそうなminilサブコマンドをあげてみると、

・new
・build
・test
・release

と、一目でみて使い方がわかりそうなものが多いです。ざっくり言うと、

minil new New::Module

とかで新しいモジュールの雛形つくってくれて、

minil build

でcpanfileやらNew::Moduleあたりのファイルを元にBuild.PLやREADME.mdあたりをつくってくれで、(大まかなイメージ。あってるかな・・・)

minil test

でテストを走らせてくれる。で、

minil release

で、そのままCPANにモジュールをアップしてくれます。開発からリリースまでの一連の流れをminilコマンド一つで面倒見てくれます。すごい。

git(特にgithub)との親和性の高さ


例えばminil testするときに、git add されていないテストファイルは実行されません。これは一見不便なように思えますが、新しくテストを書く場合、proveあたりで新しいテストファイル単品を実行すればよく、git addしてからminil testすれば、テストのcommit漏れとかなくなるはず・・・だと思ってます。

あとminil release したときに、gitで新しいtag切ってくれるの、すごく楽できていいと思います。origin がgithubだったりしても、git push --tags してくれます。

そして前述してある通り、minil buildしたときにREADME.mdを自動で吐き出してくれるので、わざわざREADME.なんとかを自分で書く必要なく、二度手間を解消できます。(今までそんなことやってたの?って言われるとわりと辛いんですけどね)


過去の財産のMinilla対応がものすごく簡単


これがもっとも驚いた特長なのですが、既存のModule::Buildベースなモジュールの開発ディレクトリで

minil migrate

してあげると、そのままMinilla対応のモジュールに早変わり。もうあとはgit pushするだけでオッケーなところまでやってくれます。
また、ExtUtils::MakeMakerにも対応しているらしく、おそらく同じコマンドを実行するだけでMinilla対応できちゃうというわけです。

とまあ、ものすごくべた褒めしてきたわけですけど、実際そのくらいによくできてます。
若干ブラックボックスっぽいところも無いわけではないんですけど、minil helpで大体の動作とか説明されてたり(まだドキュメント未整備のものも有る様ですが、特にminil help migrateの内容は、minil migrate使用前に読んでおくと、納得してminil migrateを使うことができます。)して、そこまでブラックボックスというものでもないという印象を受けました。


間違いなく、「これ使っとくといいよ!」とおすすめできるツールでしたので、ブログにて紹介させていただいた次第です。

2013-04-22

[Perl]Perl入学式 in 東京 #1でサポートメンバーしてきました

4/20(土) 13:00〜17:00 にシーサー株式会社さんで開催されたPerl入学式 in 東京に、サポートメンバーとして参加してきました。

実はもともとperl入学式を関東でもやってほしい&やりたいという需要と供給があって、特に主催の@__papix__さんからは、「Perl Beginnersとコラボしたい!」みたいなことを言われていたと言うのもあり、開催場所のアサインとサポートメンバーとしての参加をするという形で協力させていただくことになったものです。
また、会場のアサインをしている最中、@toku_bassさんから「うちの会社、会場につかってもいいですよ?」という、とてもありがたい申し出をしていただきました。この場を借りてお礼申し上げます。

今回の講習(というほど堅苦しいものではなかったのですが)は2部構成となっており、第1部はLinux環境構築、第2部はLinuxの基礎コマンド紹介、plenv+cpanmによるイマドキなPerl環境の設定、初めての方向けの基礎(ハローワールドとその発展形)という、とても初学者にやさしい構成となっておりました。

第1部ではwindowsユーザの方向けに、vmware-playerのインストールからVMの設定、Ubuntuのインストールまでを、じっくりと時間をかけてレクチャー。実は僕自身、第1部は比較的スムーズにいくのかなと思ったのですが、compiz(ウインドウマネージャー)の破損や、インストール直後の硬直現象等、微妙にハマり所があり、当初の予想よりは難儀した感がありました。とはいえ、参加者全員が無事時間内にUbuntu環境を手に入れることができました。

第2部では突然参加者が増え、会場内には20名強のPerl初学者の方が集まってくださいました。LinuxのCUIに慣れていただくべく、基本のコマンド(cd,ls,pwd,cp,rmあたり)についての説明と実践をおこない、plenvの入手(まさかのgit経由かつ、一部CentOS5.xの方がいて、gitのインストールでつまづく等ありました・・・)と設定、perl-5.16.3のインストールまで行い、Hello,world! をperlで出力するところまで体感時間およそ40分ほど。さらに応用問題を10分程度でこなし、cpanmの設定(plenv install-cpanm)までやったところで、CPANの解説と、CPANからのモジュールインストール体験(なんと、Acme::FizzBuzz!)、そしてAcme::FizzBuzzを使ったFizzBuzz問題への取り組みまでこなしました。恐るべし、Perl入学式!

ここまでで第1回は終わりでしたが、主催曰く「今回参加枠から漏れてしまった方向けに、5月中旬に補講(第1回と同じ内容で)をやる」そうですので、今回都合つかなかった方も、補講を受けてみるといいとおもいます。

Perl Beginners主催としては、非常に学ぶべき点が多く、とくに「ホントの初心者」向けの対応とフォローアップはぜひ真似していきたいと思った次第でした。

2013-04-09

[Perl]Hachioji.pm #27 でもくもく&LTしてきた

4/6(土)、いつもお馴染みのHachioji.pmに参加してきました。まだChiba.pmのレポートかきおわってないのにこっち先に書いちゃったよ!ごめんよ@kaztr!!!

13:00くらいに八王子に到着してハッカソン会場に入ってすぐさま、マコピー(@mackee_w)さんや@laoujiさんあたりとランチにいくという体たらく。腹減ってたんだからしゃーないでしょう。

で、ハッカソンで何してたかというと、「豚キムチ定食が少なかった」と泣き言言いながらコンビニのインチキアップルパイかじったり、自作Web API Frameworkのセットアップツール書いたり、マコピー先生の執筆活動(MongoDB.pm を s/Moose/Moo/g するお話) を後ろから眺めてあーだこーだ喚いたり、まずい缶コーヒー飲んで胃の調子おかしくしたりしてました。
この説明だと、だいぶはた迷惑なオッサンにしかみえませんが、実際そのままなんでどうしようもないですね。

ハッカソン終了後、外に出てみるといい感じの大雨に歓迎されながら、徒歩30秒くらいの場所にある飲み屋へ直行。初参加の@outer-insideさんや、久々に参加の@ono_pmさん、@mgikenさん、@xtetsujiさんなどがいて、plenvつかってる?とか、redis6年くらい前に欲しかったよね、とかみたいな話をしてました。
そのうちいい感じに酒が回ってきて、LTタイムになり、皆さんいいかんじに発表してました(@hide_o_55さんのレポが毎回すごくよくまとまってるので、見てみるといいですよ!)。特に気になったのは、@kaztrさんのlibnfc(PaSoRiライブラリ)関連の発表とか、@xtetsujiさんの発表で、古い技術を伝統芸能になぞらえているところとか、着眼点が鋭いなあと感じましたね。
ちなみに自分はPerl Beginners #7のLTで発表した「とある無料HPスペースのPSGI」みたいなネタを、ほぼそのまま発表してきました。
ついでに言うと、LTのお題は「今でしょ!」だったそうです。発表の直前まですっかり忘れてました。

なお、今回は暴風雨の関係で、少し早め(22:10くらい?)に引き上げましたが、その後エア参加キメた人がいたらしいですよ。そのうちしれっときてくれればいいんですけどね。
あと、大雨の影響で、古淵駅から家までの間の県道が川みたいになっていましたね。割とどうでもいい情報ですが。