新しいblogに移行しました

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

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

0 件のコメント: