毎度おなじみHachioji.pmに参加してきました。
今回は町田で開催ということもあって、近くに住んでいることもあり、幹事をやらせてもらったのですが、24名の参加者が集まる賑やかなpmとなりました。雨にもかかわらず来てくださった皆さん、本当にありがとう!
LTのテーマは「○○道」ということだったのですが、みなさん思い思いの「道」に関するネタを発表されていました。
ちなみにぼくは「幹事道」と題し、perl関係ない内容の話をさせてもらいました(資料こちら)。
幹事の経験が実はあまり無いので、主に時間周りでご不便をかけてしまったところもあったのですが(本当に申し訳ない!)、そういったところもフォローしていただいたりした結果、非常に意義深く、楽しい集まりになったんだと思っています。
Hachioji.pmは、参加者全員の協力のもとに成り立っているのです。
※名言:「Perlはコンピュータとお話をするための自然言語」
2011-12-04
[perl]Hachioji.pm #11 で幹事やってみた
[perl]今年のadvent calendarの記事を書いたので宣伝
Casual Track 3日目の記事を書きました。
Crypt::SaltedHash - パスワードを安全に保存するための一手段 - Perl Advent Calendar Japan 2011 Casual Track
テーマは割りとディープなものですが、5分以内で読める非常にライトな内容ですので、まあ読んでやってください。
それと、記事を書く人も募集中だそうですよー!
Crypt::SaltedHash - パスワードを安全に保存するための一手段 - Perl Advent Calendar Japan 2011 Casual Track
テーマは割りとディープなものですが、5分以内で読める非常にライトな内容ですので、まあ読んでやってください。
それと、記事を書く人も募集中だそうですよー!
2011-11-18
[perl]Yokohama.pm #8に参加したのでメモをあげてみる
bonnuさん - orepanとcpanmを使ったcpan module の部分ミラーの運用管理
Cartonの話ではありません!
kazeburoさんの11/2月時点のブログ記事が元ネタ。
CPANミラーをローカルに作る理由
本家CPANの更新の影響を受けずにモジュールをインストールしたい。
アプリケーションが依存するモジュールの挙動を保障するためにバージョンを固定する必要がある。
アプリケーションをネットに依存せずに確実にインストールしたい
search.cpan.orgやそのミラーは作者による取り下げも反映されてしまう。
CPANネットワークがあがっている保障はない。
複数代をセットアップする際に外部ネットワークに接続したくない。
数十大規模になればなおさら。セットアップをすばやく行うためにも重要。
企業によっては外部ネットワークへの接続ポリシーに縛られる。
社内パッケージをCPANモジュールと同様に扱いたい。
ミラーを作り、維持するために必要な道具
cpanm
orepan
pm-uninstall
手順
cpanmをセットアップする
OrePANをセットアップする
orepan.pl、orepan_index.plにパスを通す
ローカルミラーを作る
モジュールのダウンロード
アプリケーションのMakefile.PLから依存モジュールをDLする。(requiresに依存モジュールを書いておく)
cpanm のオプション --save-dists=cpan-mirror をつけておくと、tarballにモジュールを保存してくれる。
ダウンロードしたファイルの確認
インデックスの作成
orepan_index.plを利用してインデックスを作成する。
作成したインデックスファイルの確認
ここまででローカルミラーが完成。
バージョン管理システムへの登録
GITなどに。
ローカルミラーを利用してのデプロイ
デプロイしたいサーバ上でプロジェクトをチェックアウト。
プロジェクトに含まれるミラーをつかってcpanmを実行。(cpanm --mirror=hogehoge --mirror-only)
ローカルミラーを運用
モジュールを追加する
Makefile.PLに依存モジュールの記述を追加
cpanmを実行
orepan_index.plを実行。
オリジナルモジュールを追加
orepan.plを利用してミラーに追加。
チラ裏
Carton
minicpan_webserver.pl
まとめ
ミラーを運用することでサービスを簡単に設置できる状態を整える。
プロジェクトに関連付けてtarballにまとめておくだけです。
3年後、今のCPANモジュールをベースにして書かれたアプリケーションを楽にセットアップできるように
CatMoose以前のプロジェクトをすんなり動かすのは難しい
APIが変更されるモジュールもままある
野良リポジトリのモジュールなどはリポジトリがなくなってることも。
masartzさん - Mixiの大規模案件の話
大規模案件とは
mixiページ作ったときの話。
名前空間、モジュール設計
1つのレポジトリで世界が構成されている場合
名前空間の衝突は気をつけるべき問題
命名規則もトップレベルはサービスを表現できるように
配下の構成は周りと整合性があるように
意識あわせとタスク分担のために結構がっちり決めた
そんなんやってもだいたいは仕様追加・変更で思い通りにならない
最初にがっちり決めるものではない
単体テスト
レイヤーごとに適切なテストがある。
今回はController/Model・DB-Accessそれぞれで書きわけ・方針決めた
開発人数がおおかったので、誰がどの修正をしたのかわかるように
DBAccessクラスのテスト
DBとの接続
ORM使ってない
Select系はis_deeplyで取得結果全体チェック
Insert系もInsert行をSelectしてis_deeplyで全体チェック
これらの実現のために社内製Fixtureモジュールを指定
最近ではDBIx::DataFactoryも使い始めている
Controllerのテスト
社内の一番の泣き所
Plack::Test::test_psgi使った
すごく便利
今後はどこまでやるかの境界線も考えたい。
CI(Jenkins)
Perl5の開発にも使われている
test書く→ブランチにコミットする→自動テスト
テスト結果をIRCで通知
scoreboard
コミットのスコアを計算してくれる
テスト落とすと-10点
テストを10個書くと+10点
一番最後のリリースのとき
プロジェクトメンバー全員が数ヶ月必死にテストを書いた
プロジェクトを通じて個人的な振り返り
コードをあまりかけなかったので、もっと書きたかった
先のフェーズを見て、必要なことをする
約束事をきめたり、環境構築周りをごにょごにょしたり。
プランチコントロール、リリースフローの調整
忙しさのピークな時も仕事を拾えない
運用トークをもっと聞きたい。
Yokohama.pmだし。
リーダーやマネージャーさんのマネジメントな話も聞きたい
まとめ
大規模開発にはそれなりの大変さ
スピード感ではぜんぜん遅い
サービス品質もまだまだなところもある
CIツールはとっても便利なので導入するといいとおもいます。
コード書いてる人意外の話も聞きたいです。
Yappoさん - はかどる話2
ITSのはかどった話
before
Cat-based
Moose
mod_perl
直したいけどメンテやってる人にやらせようと思った
After
Amon2 based
cpanmで簡単に開発環境をつくれる
コードの見通しが良くなった
開発者が3倍くらいになった
業務がはかどる拡張がすごい増えた
Tracから乗り換える開発プロジェクトも
タイトルの抽出
記法の追加
PRE記法、SUPER-PRE記法
TODO記法
社内GyazoURLをインライン表示
変更があったらIRCに通知
喜びの声
TODO便利
マイルストーンとは?
ikachanもほめられた
まとめ
社内ツールは小さく作って新規参入しやすいようにしておくと捗る。
IRC関連
ツイッターのURLから内容を取ってくるスクリプトを書いた
ITSのURL張られたときに内容をとってくる
#数字でIRCのチャンネルに該当するITSのイッシューを持ってくる
コミットメッセージの内容もはいたり
CloudForecastとかYabitzとの連携
グラフ
書くためのツールがなかったので、昨夜いらっとして書いた。
→ClothForest
kazeburo先生が本気だし始めたので、今後は正座して見守る
IRCBot捗らせたい話
Kuragepo
サーバ・クライアントモデル
クライアントのつくりが簡単。依存少ない。
gearmand動かしてるけどkuragepo -S ircserverってするだけでOK
ikasam_aさん - Brownie
YAPC::AsiaでPerlのテストと他のテストの比較をした。
Perlのテストの足りないライブラリ
Mock
ブラウザインテグレーション周り
Capybara
実際のユーザがブラウザで操作を行うのをエミュレーション/テストするもの
DSL
ドライバ
RackTest
Selenium
HtmlUnit
WebKit(QtWebKit)
Envjs
Zombie.js
Brownie
今作ってる
Capybaraをインスパイア
統一的なAPIを提供し、ブラウザ操作をエミュレーションできるようにした
ドライバ
Selenium
Mechanize
HtmlUnit
今後
Mechanizeドライバを完成させる
Scoping
Seleniumサーバを内臓する
HtmlUnitドライバを作ってみたい
shin1roseiさん - カヤック流ソーシャルアプリの作り方 アプリ編
「ぼくらの甲子園!」「ぼくらの甲子園!熱闘編」を作っている
サイトの規模間
mobageランキングに入るくらい(最高6位)
開発環境
条件
ローカルで開発できること
本番環境に極力近いこと
Perl・ライブラリのバージョン
Gadgetサーバ
APIへのアクセス
APIClientの切り替え
Moxy+OpenSocialPlugin
Mobage対応。
利用ライブラリ
WAF=Ark
Template=Text::MicroTemplate
ORM=DBIC
DB関連
ORMはDBIC、場合によってはDBI
Shardingはしない
Paritioningを駆使する
DBIx::Class::Schema::Versioned
SQL::Translatorでバージョン間のDiffを取れる
DBIx::Class::Storage::DBI::Replicated
透過的にMasterとSlaveの振り分け
Moose依存
DBIx::Class::Schema::Versionedとの併用はできない
DBIx::Class::ResultSetのchain
DBICを導入してみて
SQLとORMの一元管理は必要
情報が多い
ソースがでかい
SQLの発行タイミングを意識する必要がある
まとめ
Perl初心者でもPerlでソーシャルアプリは作れる
そこそこの規模であればDBICは十分使える
Master-Slaveの透過的な振り分けなどを充実させて次はTengも挑戦したい
Perlに慣れてきたのでいろいろやりたい
gfxさん - From Template-Toolkit2 to Xslate
3行で
Xslateを開発
TTからの違いはWikiに書きます。
irc.perl.orgの#xslateへjoin!
テンプレートエンジン
要するにでっかいsprintf
早速使いたい
cpanmでOK
TT2 -> TTerse
INCLUDEが裸のワードを受け付けない
INCLUDE foo.ttの挙動
意図的にやってます。
FOREACH item = listが構文エラー
むやみやたらにエイリアスを作らない。
INCLUDE file WITH param1 = value ... でWITHが必須。
省略は良しとしない方向で。
関数・メソッドでスカラーコンテキスト強制
マクロがレキシカルスコープ
INCLUDEでマクロを取り込みたい
優先順位高めで実装予定
WRAPPERの微妙な違い
未確認。
エンコーディング関係
stashにはdecoded-UTF8で渡すべき。
エスケープ関連
mark_law()を使えばエスケープしない。
危ないところにしるしをつける意味が。
多用はオススメできません
Kolonもあります
Perl6ライクな構文。
オススメ
日本語ドキュメント
wikiで編集中
まとめ
わからないところがあったらMLにPOST!
日本語でOK
LT
sugyanさん - 記号PerlでFizzBuzz
FizzBuzz
"FizzBuzz"の形をしたFizzBuzz
1分でわかる記号プログラミング
拡張正規表現
XOR(排他的論理和)
use Acme::EyeDrops
32種類記号がある
もっと少ない種類の記号では?
いくつかは表現できない。
"1"があれば全部表現できる
HelloWorldも7種類の記号だけで!
Acme::HeptaSymbolizeというモジュールにまとめた
鋭意開発中
xaicronさん - いまつくったモジュールの紹介
ツイッターとかで マジレス -> mjrs
Acme::Mjrs?じゃなくてAcme::Shiin
Yokohama.pmではIRCで何かするのがきまりらしい
IRCにBOTを放流
本当はmjrs->マジレスにしたかった
nekokakさん - DBIx::Handler
DBIx::Handlerをつくった
DBIx::Connetorに無駄が多かったので自前実装。
txn()
txn_scope()
result_class()
trace_query(1)
思うところ
ORM使う場合はDBコネクション周り等の面倒見てくれる
Teng
開発再開
アドベントカレンダーやります
Spring_MTさん - Anaを開発してみました
毎回
Getopt::Longの使い方を調べたりしてる
そこでAna
毎回スクリプトにoptionハンドリングをかかないようにする
使い方
ana test.pl --test
まとめ
Input Outputのバリエーションを増やしたい
テストがまだたりない
clouderさん Plack on SL4A
Scripting Layer for Android
AndroidでPerlを動かせる
今回はPlackをいれてみた
Android SDKをつかってapkをインストール。
Interpretersを選ぶ
Perlをインストール
Perlが動く
hello_world.plを動かす→トーストが表示される
Plackを入れる
Android端末のSDカードをPCにマウントして、関連モジュールのみをインストール
Android端末にスクリプトを転送する
Start Server for run
起動できた!
まとめ
XS系はmake大変
キャリアの制限でグローバルに出れない
Perlで動くのが魅力
ikebeさん - Titaniumで色々捗るぞ
Titaniumを使ってアプリを作った話
AKB48の話w
AKBまとめというiPhoneアプリ
仕組み
サーバでクローラーが収集
本文から画像URLを取得
JSONにして再配信
サーバサイド
せいぜい100ブログくらいをクロール
Coro::Select+Furlで皿tt
Titanium
APIたたく系には強い
XHRとJSON
SQLiteもさくっと。
Androidまでカバーする夢は見ないほうが。
まとめ
Titanium使えばWeb脳でもアプリ作れますよ!
bayashiさん - Detect User-Agent
UserAgent
クライアントについて色々わかる
偽装できる
使ってますよね
集計とか
ある程度信頼できる
UAの管理は大変
どんどん変化する
一様にParseできない
出たとこ勝負
俺たちにはCPANがある!
Detect側も変化に対応しなければいけない
常にアクセスを受け付けて状況を把握するためのサイト
モジュールの構成やテストを複数人で維持
HTTP::UADetector
明日くらいにPush
typesterさん - Perl道場の紹介
Perl道場
オンラインでPerlの問題を受けられる
ソースがgithubで公開されている
良問・難問ランキングが見れる
2011-11-16
[perl]perlbrewな環境下でImage::Magickを使いたくなったのでセットアップしたというお話
「Imagerじゃないとかマジウケるんですけどw」的なツッコミは予測済みですが、Webサービスに組み込む機能として、PDF→JPEGな変換を行うのに、もっともスマートな方法としてImage::Magick(=PerlMagick)しか見つけられなかったのです。もっといい方法あったら教えてください!
ここまでできれば、$HOME/local/imagemagick/bin 以下にconvertなどのimagemagickのコマンド群が配置され、
本当ならここで、
とかできればいいんですけど、これやってみたらここに書いてあるような現象に見舞われました。
なので、ソースディレクトリの下にあるPerlMagickをインストールすることにします。
最後のmake installの時に
で、実際にPDFをJPEGにするときは、
まずはimagemagickをインストール
で、PerlMagick使うためにはホストにimagemagickが入ってないといけないんですけど、これをroot権限で入れるのは別に難しくない。のですが、perlbrewな環境となると、root権限?何それおいしいの?状態なので、今回は$HOME/local 以下にimagemagickをインストールする方法をとります。$ mkdir $HOME/local $ mkdir $HOME/src $ cd $HOME/src $ wget ftp://ftp.kddlabs.co.jp/graphics/ImageMagick/ImageMagick-6.7.3-6.tar.gz $ tar zxvf ImageMagick-6.7.3-6.tar.gz $ cd ImageMagick-6.7.3-6 ### prefixは必須、そのほかお好みでオプションつけてください $ ./configure --prefix $HOME/local/imagemagick $ make $ make install
ここまでできれば、$HOME/local/imagemagick/bin 以下にconvertなどのimagemagickのコマンド群が配置され、
$ $HOME/local/imagemagick/bin/convert foo.pdf bar-%03d.jpgみたいにPDF→JPEG変換ができるようになると思います。
PerlMagickのインストール
本当ならここで、
$ cpanm Image::Magick
とかできればいいんですけど、これやってみたらここに書いてあるような現象に見舞われました。
なので、ソースディレクトリの下にあるPerlMagickをインストールすることにします。
$ cd ./PerlMagick $ perl Makefile.PL $ make $ make test $ make install
最後のmake installの時に
Files found in blib/arch: installing files in blib/lib into architecture dependent library tree Installing /home/ytnobody/perl5/perlbrew/perls/perl-5.12.3/lib/site_perl/5.12.3/x86_64-linux/auto/Image/Magick/Magick.so Installing /home/ytnobody/perl5/perlbrew/perls/perl-5.12.3/lib/site_perl/5.12.3/x86_64-linux/auto/Image/Magick/Magick.bs Installing /home/ytnobody/perl5/perlbrew/perls/perl-5.12.3/lib/site_perl/5.12.3/x86_64-linux/auto/Image/Magick/autosplit.ix Installing /home/ytnobody/perl5/perlbrew/perls/perl-5.12.3/lib/site_perl/5.12.3/x86_64-linux/Image/Magick.pm Installing /home/ytnobody/perl5/perlbrew/perls/perl-5.12.3/man/man3/Image::Magick.3 Appending installation info to /home/ytnobody/perl5/perlbrew/perls/perl-5.12.3/lib/5.12.3/x86_64-linux/perllocal.podみたいに出てくれば、インストール完了です。
PerlでPDF→JPEG変換してみよう
とりあえず小さく書いてみました。use strict; use Image::Magick; my $i = Image::Magick->new; $i->Read( $ARGV[0] ); $i->Write( 'output-%03d.jpg' );
で、実際にPDFをJPEGにするときは、
$ perl ./imager.pl hachiojipm_10_LT_ytnobody.pdfとかすると、こんな具合に
$ ls -l *.jpg -rw-rw-r-- 1 ytnobody ytnobody 17787 11月 16 15:31 output-000.jpg -rw-rw-r-- 1 ytnobody ytnobody 3362 11月 16 15:31 output-001.jpg -rw-rw-r-- 1 ytnobody ytnobody 5223 11月 16 15:31 output-002.jpg -rw-rw-r-- 1 ytnobody ytnobody 12139 11月 16 15:31 output-003.jpg -rw-rw-r-- 1 ytnobody ytnobody 13849 11月 16 15:31 output-004.jpg -rw-rw-r-- 1 ytnobody ytnobody 32502 11月 16 15:31 output-005.jpg -rw-rw-r-- 1 ytnobody ytnobody 39353 11月 16 15:31 output-006.jpg -rw-rw-r-- 1 ytnobody ytnobody 14955 11月 16 15:31 output-007.jpg -rw-rw-r-- 1 ytnobody ytnobody 46003 11月 16 15:31 output-008.jpg -rw-rw-r-- 1 ytnobody ytnobody 34576 11月 16 15:31 output-009.jpg -rw-rw-r-- 1 ytnobody ytnobody 5327 11月 16 15:31 output-010.jpg -rw-rw-r-- 1 ytnobody ytnobody 15200 11月 16 15:31 output-011.jpg -rw-rw-r-- 1 ytnobody ytnobody 10807 11月 16 15:31 output-012.jpg -rw-rw-r-- 1 ytnobody ytnobody 7135 11月 16 15:31 output-013.jpg -rw-rw-r-- 1 ytnobody ytnobody 12210 11月 16 15:31 output-014.jpg -rw-rw-r-- 1 ytnobody ytnobody 7920 11月 16 15:31 output-015.jpg -rw-rw-r-- 1 ytnobody ytnobody 7375 11月 16 15:31 output-016.jpg -rw-rw-r-- 1 ytnobody ytnobody 8818 11月 16 15:31 output-017.jpg -rw-rw-r-- 1 ytnobody ytnobody 8524 11月 16 15:31 output-018.jpg -rw-rw-r-- 1 ytnobody ytnobody 7237 11月 16 15:31 output-019.jpg -rw-rw-r-- 1 ytnobody ytnobody 11853 11月 16 15:31 output-020.jpg -rw-rw-r-- 1 ytnobody ytnobody 6681 11月 16 15:31 output-021.jpg -rw-rw-r-- 1 ytnobody ytnobody 6142 11月 16 15:31 output-022.jpg -rw-rw-r-- 1 ytnobody ytnobody 6012 11月 16 15:31 output-023.jpg -rw-rw-r-- 1 ytnobody ytnobody 44886 11月 16 15:31 output-024.jpg -rw-rw-r-- 1 ytnobody ytnobody 5473 11月 16 15:31 output-025.jpg -rw-rw-r-- 1 ytnobody ytnobody 3592 11月 16 15:31 output-026.jpg -rw-rw-r-- 1 ytnobody ytnobody 3880 11月 16 15:31 output-027.jpg -rw-rw-r-- 1 ytnobody ytnobody 27537 11月 16 15:31 output-028.jpg -rw-rw-r-- 1 ytnobody ytnobody 9094 11月 16 15:31 output-029.jpg -rw-rw-r-- 1 ytnobody ytnobody 13211 11月 16 15:31 output-030.jpg -rw-rw-r-- 1 ytnobody ytnobody 45757 11月 16 15:31 output-031.jpg -rw-rw-r-- 1 ytnobody ytnobody 7093 11月 16 15:31 output-032.jpg -rw-rw-r-- 1 ytnobody ytnobody 49141 11月 16 15:31 output-033.jpg -rw-rw-r-- 1 ytnobody ytnobody 35089 11月 16 15:31 output-034.jpg画像ファイルがボコボコ出来上がります。まあ当たり前ですねw
登録:
投稿 (Atom)
