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で公開されている
良問・難問ランキングが見れる