新しいblogに移行しました

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

ラベル Perl の投稿を表示しています。 すべての投稿を表示
ラベル Perl の投稿を表示しています。 すべての投稿を表示

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くらい?)に引き上げましたが、その後エア参加キメた人がいたらしいですよ。そのうちしれっときてくれればいいんですけどね。
あと、大雨の影響で、古淵駅から家までの間の県道が川みたいになっていましたね。割とどうでもいい情報ですが。

2012-12-27

[Perl]Email::SendつかったらReturn::Valueにdeprecatedだと怒られた

Email::Send自体がdeprecatedなのですが、Email::SenderはMoose依存だそうなので(Mouseに切り替えるという話は無理だったらしい?)、Email::Send使ってメールを送ることにしました。
ですが、こいつはReturn::Valueというモジュールを内部的に使用していて、これを普通に使おうとすると

Return::Value is deprecated

と言われました。でもEmail::Senderは使いたくないので、

BEGIN {
    $Return::Value::NO_CLUCK = 1;
}
use Email::Send;

としたのでした。だいぶアレ。

[2012/12/28 追記]
なあんてことを某所でぼやぼや言ってたんだけど、寝て起きてたらMail::Krohnというものがつくられていた。激速。本当にすごい。

 http://blog.64p.org/entry/2012/12/28/002634

[2013/07/31 追記]
サンプルに間違いがあったので直しました。

誤: BEGIN { Return::Value::NO_CLUCK = 1; ...
正: BEGIN { $Return::Value::NO_CLUCK = 1; ...

nekoyaさん、ご指摘感謝致します。

それからEmail::SenderはMoose依存ではなくなり、Moo依存になりました。
それに伴い、Email::Krohnは必要なくなったとされ、deleteされました。

[Perl]Amon2なアプリケーションのbatchでconfigとかを見たいとき

http://blog.64p.org/entry/2012/12/27/195117 参照のこと。

知ってる人には当たり前なのかもしれないけど、Amon2ビギナーな自分は引っかかってしまったのでメモ。


たとえば、以下のようなバッチがあって、

[./bin/my_batch.pl]
#!/usr/bin/env perl
use strict;
use warnings;
use MyApp::Model::AnyWhere;

printf "%s\n", MyApp::Model::AnyWhere->work;

そのバッチが叩いているクラスが、

[./lib/MyApp/Model/AnyWhere.pm]
package MyApp::Model::AnyWhere;
use strict;
use warnings;

use MyApp;

MyApp->bootstrap; ### これがだめ

sub c {
    return MyApp->context;
}

sub work {
    my ($class) = @_;
    return c->config->{Foobar};
}
1;

みたいなのは、よろしくないとの事です。

正しくは、

[./bin/my_batch.pl]
#!/usr/bin/env perl
use strict;
use warnings;
use MyApp;
use MyApp::Model::AnyWhere;

MyApp->bootstrap; ### ここでbootstrapする

printf "%s\n", MyApp::Model::AnyWhere->work;


[./lib/MyApp/Model/AnyWhere.pm]
package MyApp::Model::AnyWhere;
use strict;
use warnings;

use MyApp;

sub c {
    return MyApp->context;
}

sub work {
    my ($class) = @_;
    return c->config->{Foobar};
}
1;


とするべきらしく、そうしないと色々と意図しない問題が出てきてしまうらしいので、注意が必要です。

2012-12-19

コマンドラインからTwitterにPOST(もしくは自分にD)するだけのツールをつくってみた

VPSで定期的にcronとかでバッチぶん回したりして、その結果をある程度すぐにみれる状況にしたいなーとおもったので、App-Shirohというツールをつくりました。ようするに、ものすごい単純なTwitterクライアントなんですけど。

https://github.com/ytnobody/App-Shiroh

前準備
手始めに、通知を送信するためのTwitterアカウントが必要なので、どうにかこうにか取得しましょう。
次に、通知を受け取る側のアカウントと、今しがた作ったアカウントを相互フォローさせましょう(D送るのに必要)。
そして、さっき作ったTwitterアカウントをつかって、このあたりを参考に、認証に必要な各種情報を揃えます。
ここまでで準備はオッケー。

インストール&設定
まず、App::Shirohをインストールします。cpanmをつかいますので、あらかじめ用意しておきましょう。

git clone git://github.com/ytnobody/App-Shiroh.git
cd App-Shiroh
cpanm ./

インストールできたら、今度は以下のような内容で~/.shirohというファイルを新規作成します。(適宜置き換える)

  {
     consumar_key        => 'YOUR CONSUMER KEY',
     consumer_secret     => 'YOUR CONSUMER SECRET',
     access_token        => 'YOUR ACCESS TOKEN',
     access_token_secret => 'YOUR ACCESS TOKEN SECRET',
     message_to          => 'some_nickname', ### 無くてもOK。このアカウントにDを送る。
  };

ここまでできたら、あとは

shiroh '通知です'

とか

cat /path/to/file | shiroh

とかすれば、新しく作ったアカウントが(つぶやいて|Dして)くれます。 パイプ経由で複数行のデータを食わせた場合、その行数分だけつぶやきます。
あと今のところ、文字数が140文字越えたときにどうするかとか全然考慮せずにNet::Twitter::Liteに丸投げしてます。
大事なこととしては、ばれるorもれるとやばいものとかには向きません。

2012-10-27

Chiba.pm #1に行ってきた

10/20(土)に船橋駅前のPCスクール「WAVE」さんで開催されたChiba.pm #1に行ってきました。

到着が30分ほど遅れてしまったので、LTの途中あたりからしか聞けてないのですが、その中で記憶に残っているものを掻い摘んでレポートします。

@studio3104さん
fluentdを使ってMySQLのslowlogを監視し、その元になったクエリをEXPLAINして、webに統計を表示するというアプリについての発表でした。このアプリは以前、PerlBeginnersでビギナーズセッションの題材にもなっていました。YAPCのLTでもこの発表をしていたらしく、そのときはデモを動かせないまま銅鑼が鳴ってしまったので、そのリベンジだと意気込んでいたのですが、船橋でもデモを動かすことができなかった模様でした。仕組みも機能も非常に興味深いものですので、ぜひ動いてる様子を見てみたいとおもいました。
また、monitoring casual talks #2というイベントの宣伝もされていました。

@karupaneruraさん
TengについてのTipsを紹介。複数レコードを一気にinsertするbulk_insert、rowオブジェクトを作らないようにするsuppress_row_objectなど、わりと浅くTengを利用している人間としては知らないことが結構あったので、勉強になりました。

@sho_toyodaさん
情報セキュリティスペシャリストについてのお話。ECMAScriptが追加され、Perlが削除されたということらしいのですが、その過去問題がなかなかはげしいらしく、CGIでHTMLタグをprint構文で吐き出していたりしてて(ほかにも大分アレらしい)、問題を作った方にはぜひともPerlBeginnersにお越しいただきたいと思った次第でした。

ちなみに自分の発表は「チャリで来た」(本当は「バイクで来た」なんだけど)という出オチと、carton+perlbrewなアプリでcronを使う際のtips、JSON出力に特化した拙作のWAF「Nephia」およびPerlBeginnersの紹介をさせていただきました。
スライド自体は1枚に収めたので、大分わかりにくいかもしれません。




スライド中のenvスクリプトはこんな感じ。



実際にcronで使う場合、こうなります。



また、懇親会では@karupaneruraさんと、「OOPだろうが関数型だろうが、ちゃんと扱えるようになるには、まず手続き型をしっかりと扱える必要があるよねー」みたいなことを話しました。

船橋まではさすがに結構距離があるなあと感じたのですが、自分の場合バイクツーリングも兼ねているのと、やはりその地域のperl使い(もしくは興味のある人)が集まるので、他のpmとは異なる話題が出てきたりして、非常に興味深いと感じました。

主宰の@kaztrさん、参加された皆さん、お疲れ様でした。
次回はいつやるんでしょうね。気になります!

2012-10-03

[Perl]ここ最近で自分のコードで筋が悪いといわれた物。またの名を自戒ドリブン開発とも。


タイトルの通り、僕のコードで良くないといわれたところと、その理由や対処方法をメモしてみた。
後学のために、自戒ドリブン開発。

1. Exporterつかって関数EXPORTはやめる
たとえば MyExport でExporterつかってEXPORTしてても、それを使ってる側からコード追いかけるときに大変になりがち。

2. for my $x ( @array ) { ... } で書けば良いところを map { ... } @array するな
return map {...} @array みたいに、配列の写像を他で使う場合にはmapを使う。
しかし写像を使わない場合forをつかうべき。最悪メモリリーク。

3. Class::Loadみたいな動的なクラスローダの多用を避けよう
どの辺からが多用といわれるのかがちょっと人それぞれ感満載だけど、とりあえずload_class()の多用は可読性を落とし、コードの危険性を高める。7.プラガブルな機構を取り入れる際の注意 も参照。

4. Attributeに利点なし
かなり前(2年くらい前?)に指摘されたものではあるけど、よくよく罹患する患者さんが多い模様なので、再掲。
可読性をおとし、危険性を高める(segvる場合もあるとかなんとか)のでよくない。その割に得られる物はほぼなし。
ここらへんにまとめた。 http://togetter.com/li/107885

5. マイナーなモジュールの選定を避けよう
この辺はセンスを問われるところでもあろうかと思うけど、聞きなれないモジュールを使うよりも、メジャーなモジュールで同様のことができないか検討したほうがいい。
何か起こったときに、モジュールの選定をした人間が責任を持って直す必要が出てくる。

6. 極端に小さな機能実装を別モジュールに切り出すのも考え物
汎用性とか利便性とご相談ではあると思うけど、たとえば、配列リファレンスであろうがなかろうが強制的に配列にする、みたいなのは、可読性等の理由で、わざわざ別モジュールに切り出す必要はない。

7. プラガブルな機構を取り入れる際の注意
3とほぼ一緒。プラガブルな機構はメンテナンス性を下げるので、プラガブルにすることで得られるメリットがよほど大きくない限りは使用を差し控えた方が無難。

8. プラグイン機構を持つモジュールを利用する上での注意
プラグインを使用する際、自分の作ったモジュールの外でプラグインのロードを行うべき。もし自作モジュール内でプラグインのロードを行っていた場合、自作モジュールを使ったときに、暗黙的にプラグインがロードされて非常に混乱する。

9. 正規表現における文字表現クラス"\d"
"\d"は、flagged-utf8のときに意図しない結果となる。例えば、5文字の半角数字にのみ対応させたい場合、/^\d{5}$/ ではなく、 /^[0-9]{5}$/ とすべき。

10. 多重継承は混乱の元なのでやめる
継承するという事自体混乱の元っぽいので、移譲で対応するのが望ましい。

11. Class::Accessor::FastではなくClass::Accessor::Liteを使おう
アクセッサが欲しいだけなら、Class::Accessor::Fastを継承するのではなく、Class::Accessor::Liteでアクセッサを生成したほうが軽いし、@ISAに余分なものを追加しない。おまけにFastよりも動作がはやい。

12. モジュールの外からアクセスするわけでもない変数にourを使うのはやめる。
そのままですね・・・

13. CPANに上げるようなモジュールでは、XS依存度を下げておく
これもそのまま。めんどくさいpullreqを未然に防ぐことにつながる。


その他、あれば追記していく次第です。

2012-10-02

YAPC::Asia 2012 で発表してきた

9/27(木)【前夜祭】 ~ 9/29(土)の3日間にわたって開催されたYAPC::Asia 2012。今回、初のYAPCスピーカーとして参加してきました。




自分の発表内容は、専らCPANモジュールを使っている人向けの内容だったのですが、かなり多くの方にご清聴いただきました。ありがとうございます。

そのほかにも、Powered by Hachioji.pm なサイドイベント「LT-THON」で、Perl Beginnersを例に挙げた勉強会スタートアップハウツーみたいな内容の発表や、地域pmミートアップでPerl Beginnersを取り上げていただいたりなど、存分に楽しませていただきました。

LT-THONは当初の予想を大幅に上回る盛況っぷりで、前日まで心配のあまり胃がキリキリしていたという主宰のuzullaさんも、さぞ報われた事でしょう。
ちなみにichigotake君がLT-THONのまとめ(一日目 二日目)をしてくれており、uzullaさんがG+で写真の共有(一日目 二日目)をしてくれています。

それから、僕が数日前にCPANにリリースしたNephiaというWAFを使って、equinox79さんがadre.soというサービスをつくっているという発表がLT-THONであったので、ちょっと気になっています。

実はほかの方のセッションは、LT-THONのレポートを書いていた為まともに見れていない状況ですので、後ほど動画にまとめられたものを見ておこうとおもいます。

あと、一日目の懇親会後のHachioji.pm(本郷侵略版)でゆーすけべーさんあたりと一緒に、サスペンダーネタでLTするようにmoznion君を焚きつけたのですが、彼は見事にLTを成功させたので、焚きつけた甲斐があったなあと思っています。

最後に、gihyo.jpレポーターの皆さん、YAPC::Asiaスタッフの皆さん、そして941さん、牧さん、本当にお疲れ様でした&ありがとうございました!

来年はもっとはっちゃけた内容でトークしたいですw

2012-08-07

Hachiojipm #20 - WAF作ったよって言ってみた

先ほどHachioji.pm #20へ参加し、WAFを作ったので一緒に育てようぜ的な話をしてきました。
まあ、このWAFについてはそのうちこのブログとかでなんか書くかもしれません。

今回は異例の平日開催&異例の吉祥寺開催ということもあって、参加人数は9名と少なめでしたが、その分濃い内容となっておりました。(僕は1時間ほど遅れての到着となったのですが・・・)
また、北海道出身の方が多く、途中masiuchiさんと函館カオス説について語り合うなどしたわけですが、同じ卓にいたhirobanexさんあたりはほぼほぼついてこれていなかったようで、今思うと申し訳なかったです><

さて、会場となったevitaさんはイタリアンのお店ですが、気取ったところの無い、非常に開放感のある雰囲気のお店でした。お料理も非常に美味しいものばかりでした(アラビアータとレバーペースト?が特に美味かったですね)。

YAPC::Asia 2012にむけて


Hachioji.pmでは、今年のYAPC::AsiaにてLTthonという企画を行いますが、今回の集まりは企画のブラッシュアップという目的がありました。スタッフの役割分担やLT未経験者へのアプローチ方法など、主宰のuzullaさんを中心に、charsbarさんやmakamakaさんなどのサポートが入りながらの意識あわせが行われました。
また、参加者の半数がYAPC::Asiaスピーカーという状況でしたが、個人的にはxtetsujiさんの「モダンmod_perl入門」は特に気になっているところです。

LTで発表したもの


今回僕はNephia(ねふぃあ)というミニWAFについて発表しました。
LTのスライドはこちら。 githubはこちら。
このブログエントリでは多くは語りません><

Hachioji.pmの明日はどっちだ


次回はどうするのかな?

追伸

YAPC::Asiaに応募していたトークが採択されました!いいねしてくれた皆さん、ありがとうございます!

2012-06-30

[Perl??]Hachioji.pm18にいってきたよ

だいぶレポート書くの遅くなったのですが、6/23(土)に開催されたHachioji.pm #18に行ってきました。

pre Hachioji.pm ハッカソン


お昼過ぎくらいにノロノロと会場に到着してみると、皆さんお食事にでてたらしく、yoshihirokunoさんがお一人でfacebookのfriend-API(であってたかな?)を使って何かしようとしてたので、簡単にアドバイスしておきました。(すべての友達を取得する方法について、のはず。)

その後ほどなく、主催のuzullaさんをはじめ、昼食組が戻ってきたところで、Yanchaのソースをclone(!)。あまりにも久しぶりに見るコードは、依然とは比較にならないほどの分厚いテストと、だいぶ整頓された(まだ整理の余地はあるけど)構造になっており、率直に「これはすごいな」とつぶやくようなものに進化していました。何より驚いたのが、ビューの部分がだいぶかっこよくなっており、細かい箇所での利便性向上が図られていたことでしたね。

OAuth周りではまって残念無念><


とりあえず何かやれることは無いかと考えつつ、手元環境でYanchaを起動してみたところ、Twitter認証の部分でInternal Server Errorが発生。「なんでうごかないの。。。」と、エラーログを見てみるも、Net::Twitter::Lite側が出力しているエラーしか出ておらず、何が悪いのか良くわからない状態でした。
周りにそのことを相談してみると、「consumer_keyとconsumer_secretが設定されてないから」とのこと。そのことにすぐに気づけなかった自分を残念に思いつつ、「これエラーログにそのことが出てこないとわからないよなー」というようなことを考え、エラーをトラップして、「Twitter-APIのconsumer_keyとconsumer_secretは設定したかい?」みたいなことをエラーログに吐くように修正を入れてcommitしておきました。

comsumer-key/consumer-secretを当て込んでみるも・・・


dev.twitterでconsumer_keyおよびconsumer_secretを取得してYanchaに当て込んでみましたが、「Authentication Failure」的なエラーが出てきてしまい、うまくログインできません。
ソースに何か問題があるのか、とか、環境(PerlのバージョンやNet::Twitter::Liteのバージョン)の問題なのかとか、色々調べて1時間くらい費やしたのですが、これも何のことはなくて、consumer_key/consumer_secretの発行時にコールバックURLを設定していなかっただけでした。トホホ・・・

結局、Twitterでログインする、という箇所だけでハッカソンの半分以上の時間を費やしてしまったわけですが、合間合間でLT資料を書いたりとかしてて、わりとだらだらとやれるのがHachioji.pmの良さなんじゃないかなーとか思ったりしました。

Hachioji.pm 本会


今回の会場はペルー料理のお店 MISKYさん。以前もちょくちょくHachioji.pmで利用しているお店です。ハッカソン組がぞろぞろと店内に入る中、gfxさんがすでに店内で待機しておりました。

1時間半くらい?だべりながら飲んだ食ったし、だいぶ酒も入ったところでLT(hideo55さんやhirobanexさんのレポートに詳しく載っているので、内容はそちらに譲りたいとおもいます)。
大雑把に言うと、JS=女子小学生というネタが横行していたのと、makamakaさんのInline::JFXの構造がかっこいい件、JFXについてはDOMセレクタがひとまず欲しいところという意見があったのが印象的でした。あと個人的にはmoznionさんが同郷出身者ということもあり、ジモトークで盛り上がったりしました(彼の出身校は地元ではエリート校として知れ渡っているけど内情結構カオスっぽいとか)。

次回のHachioji.pmはTakao.mtと称しての高尾登山イベントとなります。

2012-03-26

[Perl]Hachioji.pm #15 でペアプロしてきた

毎度おなじみHachioji.pmに参加してきました。
通産16回目の開催となる今回は、前回(実は参加してたけど疲れ気ってレポート書けるほど物事を記憶していなかった;;)から@hirobanexさん主導ではじまった「pre-Hachioji.pm」というハッカソンからの参加です。

ハッカソン、9:00 AM 開始だったけど

のろのろと11:00 AM くらいに会場にIN。この時点で自分以外に既に4名がコード書いたり書いてなかったりしてました。
ペアプロ自体には「お題」が設定されており、今回は「Kossyを使って掲示板をつくる」というものでした。
なんでKossyなのかとか、その辺のいきさつについては、こちらに色々書いてあります。

最初の1時間くらいはだらだらと。

最初はペアプロの相手が居なかったと言うこともあって、主宰の@uzullaさんと、中国のスマホ向け開発事情やPHPのWAFなどについてだらだらと情報交換と言う名の雑談をしておりましたが、しばらくして、初参加の@magicdriveさんとペアを組むことに。
彼はそれまでJava(主にAndroid-app)メインだったにも拘らず、YAPC::Asia参加をきっかけにPerlで出来る業務へと転身したというツワモノ。Perl自体には大体1年くらい触っているとのことでした。

ペアプロやった!

今回は僕のほうがPerl使用暦が長いということから、主にmagicdriveさんに手を動かしていただくことにし、僕はコーディングのサポートに回りました。
まずkossy-setupに始まり、機能要件の明確化、APIの策定、基本的なハンドラの書き方の説明、データストアとORMの選定、依存モジュールの導入、model実装、handler実装、view実装の順に手を動かしていただき、ORMにはTeng、データストアにSQLiteをそれぞれ採用し、JSONを出力するAPIをviewからjavascriptを使って叩く方向で作っていきました。
結果的には、view以外のほとんどの部分について、機能実装を網羅するところまで行きましたが、ひとえにmagicdriveさんの理解力の高さに拠るものと思っています。
また、@umeyukiさん / @hirobanexさんペアは別のアプローチ(おそらくviewはほぼてきていた?)で実装を行っていたようです。
ちなみに、実装時間が短時間だったことと、TengおよびKossyの構造/使い方をメインで説明していたため、TDDを実践できなかったので、次回以降の課題としたいです。

Hachioji.pm 本会

いつものことではありますが、@hide_o_55さんが猛スピードでまとめを書いてくださってます。

今回LTのお題は「スマートフォン」だったのですが、毎度の通り、@maka2_donzokoさんの現物(「すあま」と「本」)を使ったネタが強烈に記憶に残っております。というか、この時点で僕はだいぶ憔悴してたこともあって、記憶が途切れ途切れだったりします。。。
あと、PICKで写真取ったはずなのになぜか読み込めないので、読み込めるようになったら写真はるかも。

次回以降のハッカソン、何を作る?

本会の後半頃に、次回以降のハッカソンで何を作るかと言う話になったのですが、「IRCのようでIRCでないちょっとIRCなアプリ」とでも言うべきものを作ろう、みたいな話になっていたかと思います。たしかhide_o_55さんが「これ議事録取らなくていいの?」見たいなこといってたかと思いますが、これを書いている今、議事録が欲しい!と思っているところです。。。

2012-03-16

[Perl,メモ]ある無名関数の中でだけ使える関数を定義したい

sub hoge {  
    my $cb = shift; 
    my $caller = caller();
    local *{$caller.'::foo'} = sub { .... };   
    $cb->(); 
}

こうすると、

hoge(sub{ foo() })

が使える。

2012-01-29

[Perl]Hachioji.pm #13



先日(1/29[土] 18:00~)、おなじみのHachioji.pmに参加してきました!
会場は、こちらもおなじみのタイラーンナー。トムヤムクンが美味しいお店です。

今回も新しい方が何名か来ておりましたが、皆さんPerlの話題にとどまらず、技術方面の話や椅子の話などで盛り上がっておりました。

おや、奥の島の様子が・・・


なんか奥の島に突然人が集まりだしたので、何事かと思って行って見た所、こんな光景が。。。

これがあの「インフラエンジニア双六」か!?

タイ風ハムスライスが極端に辛かった



あまりの辛さに悶絶。。。


恒例のライトニングトーク


酔っ払ってて正直あまり覚えていない(※いつものこと)ですけど、記憶に残ってるところだけざくっと書いておきます。

・JS製のスライドツールがいくつか。
・はてブのホッテントリをタイトルかき集めてGoogleスピーチAPI(非公式)にとおして読ませる
・でかいモニタと研究室の机とフィギュアたちで研究が捗るらしい
・URIパラメータを弄繰り回すブックマークレット
・動画から静止画を切り出して非破壊自炊。メトロノームで撮影タイミングを取る餅つき的手法
・hint-a-hint(Firefoxプラグインらしい)でマウスレスブラウジング
・Win32::IEAutomationで「IEでの」ブラウジング自動化
・デザイナーなのにcygwinでファイル管理
・良い椅子は、捗る。
・富士通の重くてお高いキーボードは打鍵が軽やか。捗る。
・Diogenesというギリシャ・ラテン語向けのテキスト検索ツール
・ウルトラマンと楽しい仲間たちに囲まれてタジタジのギャン。
・椅子についてる、よくすべるリストレストには段ボール箱をかぶせてると捗る。マジで?

自分のLTでは、自分が作ってきたツールの一部を紹介しました。資料こちら。

ちなみに発表には、equinox79さんと共同で開発した(つまりHachioji.pmコラボウェアです!)プレゼン共有ツール「FireCracker」を使いました。

さーて、次回のHachioji.pmは?


2/25(土)開催の予定らしいです。少し早めにスタートしてハッカソン的なことをするのかな?

2012-01-27

[Perl]Perl Beginnersという勉強会をやります。

Perl Beginners という勉強会を2/24(金) 19:00より五反田文化センターで開催します。

という宣伝でしたー!ぜひお越しください!

2011-12-04

[perl]Hachioji.pm #11 で幹事やってみた

毎度おなじみHachioji.pmに参加してきました。

今回は町田で開催ということもあって、近くに住んでいることもあり、幹事をやらせてもらったのですが、24名の参加者が集まる賑やかなpmとなりました。雨にもかかわらず来てくださった皆さん、本当にありがとう!


LTのテーマは「○○道」ということだったのですが、みなさん思い思いの「道」に関するネタを発表されていました。

ちなみにぼくは「幹事道」と題し、perl関係ない内容の話をさせてもらいました(資料こちら)。

幹事の経験が実はあまり無いので、主に時間周りでご不便をかけてしまったところもあったのですが(本当に申し訳ない!)、そういったところもフォローしていただいたりした結果、非常に意義深く、楽しい集まりになったんだと思っています。

Hachioji.pmは、参加者全員の協力のもとに成り立っているのです。

※名言:「Perlはコンピュータとお話をするための自然言語」

[perl]今年のadvent calendarの記事を書いたので宣伝

Casual Track 3日目の記事を書きました。

Crypt::SaltedHash - パスワードを安全に保存するための一手段 - Perl Advent Calendar Japan 2011 Casual Track

テーマは割りとディープなものですが、5分以内で読める非常にライトな内容ですので、まあ読んでやってください。

それと、記事を書く人も募集中だそうですよー!