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

2014/09/14

YAPC::Asia Tokyo 2014に行ってきました #yapcasia

YAPC::Asia Tokyo 2014

YAPC::Asia Tokyo 2014 公式サイト

大分報告が遅くなりました。

諸事情でトークは2,3つくらいしか見れなかったのですが、昨年以前と同様、各地のPerl Mongerと交流できたので満足です。無限コーヒーとワッフルが最高でした!周りに著名Perl Mongerがいるのでお話もできます。コーヒー最高!

PM繋がりで2日目の午後から、「地域.pmミートアップ 2014」というイベントでHokkaido.pmを代表してお話させていただきました。その様子はエンジニアtypeさんで記事になっています。

「『やろう』と言ったらそれはもう『.pm』」~YAPC::Asia Tokyo 2014に見る地方コミュニティの盛り上げ方

最近はSapporo.cljというClojureのイベントも主催しておりますが、Perlに限らず地域コミュニティはやりたい人が「やろう」と周りに宣言することから始まります。やりたい言語、技術があれば、どんどん自分から声をかけて行けばいいんじゃないでしょうか。

次のHokkaido.pm

非常によく「次のHokkaido.pmはいつですか?」と訊かれまして、お待たせてして申し訳ない気持ちでいっぱいでした。子育ても落ち着いてきましたので、10月末〜11月にHokkaido.pm#12を開催したいと思います。便乗帰省を目論んでいる方も暖かく迎え入れますので、是非ご参加ください。

2013/09/22

YAPC::Asia 2013と今後のHokkaido.pmの活動について

YAPC::Asia 2013

今年もYAPC::Asiaに行ってきました。スタッフの皆さまのおかげで、非常に楽しい二日間を過ごせました。スタッフの皆さま、ありがとうございます!

普段お世話になっている方への挨拶や次回以降のHokkaido.pmでゲストとして招待したい人とコンタクトを取ることができたので、非常に満足しています。今回は前回よりも中々いい感じにいろんな人に会えた気がします。

今年は私事が色々と重なり、年内の予定が不明瞭だったためスピーカーには応募できませんでした。またスピーカーに応募したい思っていますが、次回のYAPC::Asiaの開催は不明ということで、とりあえずアウトプットを増やしつつ機会を待とうかなと思います。

今後のHokkaido.pm

次回のHokkaido.pmは1月後半から2月頃になるんではないでしょうか。もしかすると12月あたりにもあるかもしれません。

何人かに言われたので、そろそろUstをどうにかしたいところです。Ustがあれば遠方の方からも反応をもらえるのというメリットがありますし、土日に参加できない人が一定数いるようなので、そういった方にもフレンドリーかなと。また、先週札幌で行われたオープンソースカンファレンスでもHokkaido.pm Casualの空気感がわからず参加しにくいという話も聞きました。ブログ等での開催報告をもう少し頑張るというのももちろんですが、Ustも空気感を伝える手段の一つにもなるのかなと考えています。何か手頃なUSB接続のカメラを探したいと思います。

2012/09/30

YAPC::Asia Tokyo 2012 参加記録 #yapcasia

前夜祭も含め三日間参加してきました.ブログをかくまでがYAPC::Asiaということで,感想を綴っておこうと思います.

はじめに

今年も私が所属する株式会社アイダックに企業スポンサーになって頂きました.ありがとうございます.

また運営スタッフの皆さま,ありがとうございます.スタッフの方々のおかけで楽しい時間を過ごせました.

Perl Mongers

各地のPerl Mongersに会うことができる数少ない機会でしたので,普段お世話になっている方に挨拶してきました.

その中でも特に印象深いのは,近藤さんに直接お礼を伝えることができたことです.日本語版『初めてのPerl』を熟読してPerlを覚えたクチですが,読んでいた当時の自分は,翻訳者ご本人に直接お礼を言える機会があるとは思ってもいませんでした.

Perl Mongerのくくりにいれていいのか分かりませんが,またLarry Wallさんと写真を取れました!以前撮影した写真を見せ,また撮影をお願いしたところ,「OK. モウイチド」と快く応じていただけました.ありがとうございます.

モチベーション

毎回感じることですが,参加後は意識が高まって(),非常に開発したい気分になります.大勢の方が良質なアウトプットしているので,その影響を受けているのでしょう.この状態を維持し,あずまさんが仰ってたようにCPANに恩返し,恩送りしたいところです.

昨年と違い今年は登壇しなかったため,少し物足りなさが残りました.来年は(当選するかは別として)トークを応募しようと思います.

リンク

1日目,2日目のまとめをアップしてあります.例年通りなら後日トークの動画がアップされるかと思いますので,それまでの繋ぎとしてご利用ください.注意点ですが,自分用に聞いた話をメモしたものですので,解釈が間違っている可能性もあります.

2012/09/28

YAPC::Asia Tokyo 2012 1日目

YAPC::Asia Tokyo 2012の初日です. 久しぶりに会う方とご挨拶できて,非常に良かったです.二年ぶりにLarryさんとも写真をとらせていただきました. またXslateのbridgeの件でgfxさんとお話して,今後の対応を確認できたのも収穫です. 以下は聞いてきたトークのメモです.あくまで私のメモなので正確な内容は今後公開されるスライドや恐らくアップロードされる動画を確認してください.おかしい点があれば,ご連絡ください.

What Does Your Code Smell Like?

  • Larray Wallさん
  • perl5のコードをperl6に書き換えるライブコーディング 
    • subの定義に引数を指定できる
    • referecneが簡潔に
    • if, while等の一部で括弧を省略できる
    • (^100).roll(10) 0-100までの乱数を10個生成する
    • say "Before @a"が展開されない.say "Before @a[]"にする必要がある
    • 0 ..^ @x 0から@xまで.省略すると ^@x
    • functional programmingもできる
    • gather/takeでありがちな一時変数を減らしたりとか
    • infix:<M>でオペレータMを定義できる? @out M= merge(@x,@y)みたいなコードがかける
    • その他色々

Web::Security beyond HTML5

  • Yosuke Hasegawaさん

Ajaxを利用したXSS

Ajaxデータを利用したXSS

  • ちょっと遅れて最初5分くらいは聴き逃した
  • IEだと勝手にapplication/javascriptがtext/htmlと解釈されることがある
  • IEにおけるファイルタイプ決定のメカニズムが複雑すぎる
    • URLの拡張子によって挙動が変わったりとか
    • 挙動がいつのまにか変化していることが多い
      • microsoft.com + IEの組み合わせのみでXSSになるページもあった
  • 発生しやすい状況
    • JSON
    • JSONP
    • CSV

Ajaxデータの盗み見

  • JSONとかは狙いやすい
  • Array Hijacking for Android
    • object.prototype. __definegetter__とか使う
  • JSON Hijacking for IE
    • JSONの一部にUTF-7とかで攻撃コードを紛れ込ませる
    • IE6,7だとresponse headerよりも

対策

  • X-Content-Tyep-Options: nosniff
    • IE6,7には効果なし
  • XMLHttpRequest以外からのアクセスを遮断する
    • X-Request-Withを見て判断する(jQueryとかが入れてる)
    • 自分で任意のheaderを使うのもあり

XHR Lv.2の注意点

  • クロスドメインリクエストが可能
  • ただしクライアントとサーバ側で注意しないと危険
    • クライアント側
      • URLのチェックを怠らない
      • URLの確認はじつはめんどくさい
    • サーバ側
      • Originヘッダを見るだけではダメ
      • Cookieを使う
      • setRequestHeaderで独自の確認用ヘッダを付ける
      • preflightリクエストを使うとX-hogehogeというヘッダを使えるようになる
      • Plack::Middleware::CrossOriginを使うと楽

XSSフィルター/XSS Auditor

  • IE8, Chrome,Safariとか
  • 誤検知もあるので,X-XSS-Protectionヘッダでコントロール可能

X-Content-Type-Options: nosniff

  • 動的コンテンツには全部付けておくべき

クリックジャッキング対策

  • X-Frame-Options: DENY
    • できれば使ったほうがよい

Content-Security-Policy(CSP)

  • XSS根絶の切り札
  • まだまだ規格・実装が不安定
  • 許可するリソースを記述

    Content-Security-Policy: default-src 'self'; image-src *
    

HTTPSの強制

  • HTTP Strict Transport Security(HSTS)
  • HTTP Responseヘッダで指定する
    • HTTPでは汚染されているかもしれないので,HTTPSで吐き出す必要がある

まとめ

  • ブラウザベンダーに文句言うだけじゃなく,サーバ側で積極的に対応する必要がある
  • 是非実装に落として,どんどん広めていって欲しい

大きくなったシステムの疎結合化への取り組み

分離する

  • Service Procedureに差し替える
    • 基本的にプレーンなデータを返す
    • オブジェクト等は返さないようにする
  • 今回は内部向けのCoreInternal API
  • 1つのリポジトリにいれてる
    • メリット
      • 既存資産の活用
    • デメリット
      • リポジトリの肥大化
  • JSONRPC over HTTP / Plackを使用
  • まだ社内でもベータ的な状態

コードの計測

  • Inscpect Packageで計測
    • 昨年のmixiの人が発表したやつ
    • 結合度,複合度を計算して,技術的な負債をスコア化
  • コードレビューもやってる
  • ガイドラインをテストにして自動化する
    • @EXPORTを禁止
    • 非推奨モジュールの使用のチェック
    • ループ用途のmap, grep
  • 何気なく書いているコードで複雑化していくので,意識して書く

Perlと出会いPerlを作る

  • 五嶋さん
  • 大学時代はKonohaScriptの開発

gperl

  • コンセプトは世界一高速なPerl処理系を目指している
  • C++でスクラッチで開発
  • フィボナッチやたらいまわしで数十倍高速
    • 数値はperlの弱いところで,文字列処理をやっていないのはちょっとアンフェア by dan kogai
    • Regexとか文字列関連はまだ実装されていないので,できてからベンチ取りたい

高速化

  • 引数用の配列を事前に構築
  • NaN-boxingによる型検査
  • アノテーションによるStatic Typing/JIT Compile

    • # @static_typing, # @jit_safe

      # @static_typing
      sub fib {
          ...
      }
      

仕様の都合で諦めた箇所

  • 関数引数にあるリストの展開
    • 関数用に確保した配列を拡張する必要があるので遅い
  • デフォルトでのスカラー変数の参照渡し

Profiling memory usage of Perl applications

  • ps, top, /proc等を使う
  • RSSを計測の目安に使わないこと
  • Devel::Peekで変数(IV, HV, GV等)の構造を表示できる
  • Devel::Sizeでメモリ使用量を見れる
  • Devel::Sizeを拡張したい.一部した
  • Devel::SizeMeGraph なんか色々可視化してる!

2011/10/16

YAPC::Asia Tokyo 2011で発表してきました #yapcasia

YAPC::Asia Tokyo 2011で発表してきました

ブログを書くまでが勉強会!

YAPC::Asia Tokyo 2011 公式サイト - http://yapcasia.org/2011/


御礼

まず、私の所属している株式会社アイダックと諸々の支援をしていただいたTマネージャにお礼申し上げます。
旅費と協賛スポンサーの申し込みありがとうございました!


初スピーカー

今回厚かましくもスピーカーとして参加させていただきました。
当日は緊張しましたが、やって良かったなと思っています。

トークに応募するきっかけを作ってくれたHokkaido.pmとそのメンバー、JPAと地方派遣支援で来ていただいたゲストの皆さん、高頻度で自費参加してくださるcharsbarさん、ありがとうございます!


少人数でのWebアプリ開発 CGIからPSGIまでの変遷

現在の部署の歴史が浅いことと私が入社当初、職業プログラマとしてのキャリアがなかったこともあり、
初期の状態は良いとは言えませんでした。
その環境を少しずつ改善し、近代的なプログラミング環境を整える変遷を紹介したものです。

スライドは以下になります。


その他雑感

  • 941さん、色々とお世話になりました。ありがとうございます!
  • 同じHokkaido.pmのあきやまさん(@akiym)のトークが裏番組だった
    YAPC::Asiaは大規模なので、そこまで気にしてられない状態だったと思いますが、これは残念でした。
  • 今年はお昼ご飯の時間が設けられててグッド
    去年は20分しか隙間がなかったので大変だった
  • 東京のPerl Mongerは実は優しい
  • 地方からきている人が思った以上にいた
  • Parumon面白いよ!拡張パック希望
    懇親会で遊んでくれた人、ありがとうございます。次のHokkaido.pmの開始前とかに遊びたい

2010/10/17

YAPC::Asia Tokyo 2010 二日目

二日目もうp

Web APIのすすめ

自己紹介

  • Yuji Shimada
  • DeNA
  • xaicron

Web APIの例

  • public
    • Google Map
  • 認証
    • twitter
  • 内部向け

Publicなもの

  • 認証が必要ないものは公開しづらい
    • アクセス数が読めない
    • 大手はできる

認証が必要なもの

  • ユーザ登録が必要
  • AccessTokenをもらう
  • ユーザ数からアクセスが予想できる
  • BANできる

内部向け

  • 単一ドメイン
  • ユーザが自分で使わない

Web APIについて

  • Web API は速さが必要
  • 遅くなるとアクセスが下がるので内部向けも速度は重要
  • yusukebe 「使える」Web API はでそろっているのでマッシュアップは詰んだ
  • 何が流行るかわからないのでとりあえず作る!

高速なWeb APIの作り方

既存WAFを使わない

  • 問題が起こったときに内部構造がわからないとだめ
  • Plackがあるので ore ore WAF を作ればいい

WAFの構造

  • Web API はURL:機能は1:1がほとんど
  • Catalyst ディスパッチャしか使っていない
  • 無駄機能を削ぎ落とす
  • ViewらしいViewがない
    • JSONがあれば幸せ
    • XML, YAMLを返しても誰もうれしくない

ここまでのまとめ

  • Plack, Router::Simple, JSON
  • ore ore WAF を書いてしまえばいい

実践編

  • Dispatcherの全体で占める実行時間の割合は低い
    • ここでがんばる必要はない
  • method呼び出しを減らす
    • Devel::NYTProfを使ってから減らすmmethodを選ぶ
  • Objectの生成を減らすのが有効
    • ORMがオブジェクトを生成するので,使わない
    • 生のDBIはいやだ
    • DBIx::Connector, DBIx::DBHResolver, DBIの順にラップ
    • DBIx::Connector DB接続を局所化
  • Object::Containerでsingletonにする
    • preloadオプションがついたのでこれを使うといいかも
    • patchを書いたのはxaicronさん

運用編

  • 次のセッションを聞いてね

まとめ

  • Amon2を読むといい
  • 新しいものを追求すると楽しい
  • ore ore WAFを書くのは怖くない

nginx & Perl

自己紹介

  • fujiwara

about nginx

  • ロシア製
  • 英語のwikiあり
  • だんだん使われるサイトが増えてきた
  • Architecture
    • multi processes + non blocking IO
    • 1 master, x workers

nginx module

  • Upstream
    • mod_proxy_blancer
  • memcached
    • キャッシュにmemcachedを使う
  • empty gif
    • 1x1 gif
  • X-Accel-Redirect
    • X-Sendfile
  • Rewrite
    • mod_rewriteより見やすい
    • PerlっぽいSyntax

embeded perl

  • connfigureで--with_http_perl
  • mod_perlぽいもの
    • accept-encodingで振り分け
    • Imlib2で画像を小さくする
    • HMAC_SHA1
  • blockingする処理は書いては駄目
  • sleepだけはasync.使いどころは不明
  • 組み込んでも誤差程度のベンチ
  • 有効にすると1割減
  • Test::Nginx(CPAN)にある

with Plack/PSGI servers

  • Reverse Proxy
    • P::M::ReverseProxy
  • topディレクトリじゃない場合
    • rewrite /^app(.*) $1 break;
    • plack側はUrlMapをやる
  • CGIは動かせないのでPlack::App::CGIBinを使う

バウンスメール解析システム BounceHammerの紹介

自己紹介

  • azumakyuniyuki
  • サーバ管理者 -

前置き

  • バウンスメールの処理は結構めんどくさい
  • BounceHammerでできるよ
    • 解析したJSON, YANL, CSVで出力可能

BounceHammer

  • バウンスメール解析システム
  • CLIツール
  • Perl
  • 配信機能はないo

バウンスメールについて

  • From
    • Postmaster
    • MailerDaemon
  • Subject
    • エラーっぽいことを英語でかいてある

できること

  • エラー理由特定
  • あて先分類
  • DBに蓄積
  • 解析したJSON, YANL, CSVで出力可能

エラー理由

  • あて先不明
  • ドメイン指定拒否
  • メールボックス一杯
  • メールが大きすぎる
  • セキュリティ的なエラー

役立つ場面

  • 一般的なMTAで配信
    • 特別なMTAだと処理できないかも

対象者

  • コンテンツプロバイダ
  • メールマガジンスタンド
  • メルマガ配信している人
  • バウンス処理をしていない人

放置されると困ること

  • 携帯宛はブロックされる
  • 有効配信数がわからない
  • 遅延がひどい
  • 遅延で配信に時間がかかる

バウンス処理はやるべき

  • 配信数が少なくてもやる
  • 1通でもやる

処理すると

  • バウンスの理由が正確にわかる
  • バウンスの記録を構造化して保存
  • ウェブ管理画面でアドレス管理
  • メール配信の合理化と健全化
  • 自前でバウンス処理実装不必要

インストール

  • 手順通りやればOK

解析済みデータの利用

  • CSV, YAML. JSON
  • MTAでバウンス照合
  • 配信プログラムで照合

動かす

  • mbox || Maildirを引数に
  • STDINからも読める(/etc/aliases)
  • 解析速度

  • mbox 500通/秒

  • Maildir 200通/秒

出力コマンド

  • datadumperというコマンド
  • 携帯だけとか条件指定できる

MTAと強調させる

  • YAMLがでるので適当に処理

ウェブサイトに組み込む

  • HTTPベースのAPIを使う
  • ユーザ毎のページに状態を表示

HTTP API

  • readのみ

今後

  • 2.6.0でエラーの理由を+=4
  • なるべく国産モジュールを使いたい
  • ORMは国産化完了 Skinny
  • CGI::Application::を何かに変更
  • APIで書き込み可能にする

YATT Yet Another Template Toolkit, Designed for WebDesigners

自己紹介

  • h小林
  • HKOBA CPAN
  • @hkoba
  • Perl/Tkの日本語化

YATT, What?

  • CPANにあり
  • 顧客のみ使ってる
  • 実績は2年程度

ガラパゴス

  • 振るカスタムのネットアンケート屋
  • MSワードで入稿
  • 作成2週間 使用1週間
  • 素人を戦力化しなくては生きていけない

戦力

  • プログラマ兼サーバ管理者 1人
  • テンプレートデザイナ 7人
  • 多少プログラミングっぽい感じでもOK

Why New Tempalte System

  • プログラマの視点で既存のモジュールは作られている
  • ページの追加もプログラマが必要
  • HTMLとして汚い

YATTのアプローチ

  • 自分で部品を作れる
  • 外部に計算を追い出せる
  • テンプレートの書き間違いは先に判明してほしい
  • XMLを拡張
  • Widgetが関数を呼び出す
  • ViewがModelをたたく形
  • 変数の自動のエスケープ
  • yatt lint

SYNTAX:LRXML

  • yattのネームスペース
  • yattが正しければ,xmlとして正しくなくてもOK

Componet Model

  • yattファイルにマルチパートっぽく書くと,perlのPackageに展開される

Embedded Variable

  • 型指定ができる
    • x=text, y=html

namespace can be DIR or File

  • yatt:mylib:mypart
  • 継承もできる
  • .yattはpublic, ytmplはprivate

Macro Tag

  • my, if, for

DEMO

  • emacs用のシンタックスファイルが配布されている
  • 存在しない変数を作ると,そのエラー行に飛んでくれるのでわかりやすい

動作速度

  • うまく動かなかったのでカット

YATT::Lite

  • github/hkoba/yatt_lite

Perl5 is Alive

  • Perl is Dead
    • 時代遅れ 薬でもやっているんじゃないか
  • CPANに面白モジュールが一杯ある
    • cpanm
    • Moose
    • Plack
    • AnyEvent
    • Devel::NYTProf
  • 6ヶ月前にperl5.12を出した 
    • 緊張したけど,結果は良好
  • Perl6は?
    • 別の言語だから関係ないよ
    • すごい言語
    • まだ設計中
  • でもPerl5もこれからの言語
  • Perl5,Perl6の5,6はversionじゃなくて,それを含めて言語名

5.12でかわったこと

  • 5.10の機能が安心してつかえる
  • use 5.12.0で自動でuse strictされる
  • Y2038対応
  • Unicode5.2に対応
  • Pluggable Keywords
  • 関数ルックアップがオーバーライド可能になった
  • Dtrace support
  • coreからはずされたモジュールもある
  • yadda yadda ...
  • perldoc perldelta512

リリースに関して

  • Pumpkin
    • patch pumpkin
    • 変なリリースをしないように管理
  • 5.10はリリースまでに5年
    • 間に二人のPumpkinが燃え尽きた
    • 35万行の変更
    • メンテナンス作業が多すぎる
  • 5.10.1ほPumpkinがしんどいと発言
  • Pumpkinの仕事が多すぎる

Pumpkinになるには

  • Hardcore C Hacker
  • 強い責任感
  • ハッカーをつれてきてマネージャーをやらせる
    • 資源の無駄
    • 燃え尽きて繰り返しやれる人はいない

システムの構築しなおし

  • 役割をわける
  • わけられるところは別の人に

リリース

  • リリース感覚が一定になってきた
  • 開発版はリリースマネージャがやる
    • Pumpkinじゃない
  • メンテナンスには機能はあまり追加しないようにした
    • 悩むようなパッチは取り込まれない
    • ポータビリティ
    • セキュリティフィックス
  • 5.13.xは3ヶ月ごとにリリース

5.14.0

  • 2011/04
  • 望むもの
    • IPv6
    • CPANを簡単に
    • HTTP Client
    • SSL

perbrew

  • どんなバージョンのperlもホームディレクトリにインストールできる

Question

  • Unicode6.0に対応するか?
    • 追加したいけど,互換性も問題があるっぽい
    • 問題を把握したい
  • リリースを一定にしているとディストリビューションに新しいのが含まれやすい
  • JSON::PPは入るけどJSON::XSはなんでコアに入らないの?
    • ポータビリティを重視
    • XSがなくても他のモジュールがはいる
    • すげー速いJSONでなくてもいい

Perlで任意精度計算

自己紹介

  • 牧大輔
  • JPA

基本のおさらい

  • float 整数部3桁,小数部7桁
  • データ量がたりないよ
  • エラー幅が大きくなる
    • 1.1 * 1.1はOK
    • 1.0999 * 1.0999だと誤差が大きいよね
  • 整数はいいけど,小数は危ない

なぜ必要なのか

  • DateTime.pmで旧暦をかいてみた
    • CALENDRICAL CALCULATIONS
    • いい本
    • すげー眠くなる

旧暦

  • 月と太陽の緯度
  • 地球から観測した月・太陽の緯度で決まる
    • 24節気

Lunar Phase

  • 月の満ち欠け
  • 定期的な観測
  • 29.5日(平均)

Solar Phase

  • 春夏秋冬
  • 農業用
  • 365.5日くらい

月と太陽の関係

  • 時計の長針が太陽,短針が月

天体の位置計算

  • 高精度が必要
  • 0.000011574ずれると計算が1秒狂う

Perlで計算

  • perlで1/86400をやっても小数の桁が足りない
  • 実際は小数点以下59桁
  • perlは19桁目で丸め込み

Math::BigInt(BigFloat)の問題点

  • 文字列を与える必要がある
  • 数字だとPerlがまるめることがある
  • 1 value = 1 object
    • 遅い!
    • 700倍から600倍とか遅い
  • Math::BigInt::GMPも遅い

Goodbye Perl

  • Cでやる

MPFR

  • GMPじゃなくてMPFR
  • GMP+Higer Level Math
  • 三角関数とか

MPFR vs BigInt

  • 54倍!BigIntより速い!
  • 実用可能なレベル

任意精度計算

  • PerlやLL向きではない
  • Cを使おう
  • Perl側では常に文字列にすること
    • 文字列で数値を返す
  • 精度が高すぎてこまる
    • 自分で丸める必要もある

XSからPPへ

自己紹介

  • まかまか
  • Acme大全 2010
  • CPAN
    • JSON, Text::CSV
  • CPAN XSのもの
    • Thread::State, JSON::PC(削除)
  • github: makamaka

XS

  • PerlとCのグルー
  • メモリリーク
  • 作るの大変

PP

  • Pure Perl
  • XS使ってない
  • Cコンパイラは使わない

メリット

  • 暇つぶし
  • 勉強になる
  • ポータビリティの向上
  • Perl API, XSの知識

デメリット

  • 遅い
  • メンテが大変
  • 車輪の再発明

PP化の流れ

  1. PP化するモジュールを選ぶ
  2. t/*ファイルがたくさんある
    • テスト自体がAPIの一覧になっている
    • typemapを確認
    • やる気が出るか
  3. テストが通るように書く
  4. ブラッシュアップ
  5. パッケージ

PP化時によく使うかもしれないもの

  • B
    • 値のフラグを確認できる
  • pack/unpack
    • バイナリ操作
    • 進数の変換
    • perldoc perlpacktut
  • Config
    • perlのコンフィグを確認

パッケージング

  • バックエンドの統合
  • XSモジュールが使えればXS
  • 駄目ならPP
  • 環境変数の選びかた
    • PERL_をつけるとぶつかりにくい
    • PERL_ONLYとかいいよね

Unix Programming with Perl

正しいコードを書くために

  • testは確認手段
  • OS, Perlの知識が必要
  • OSの話は少ないので今回扱う

エラーナンバーをチェックする

ディレクトリ作成の場合

  • !-d $dirでチェックしてから作成するのは処理の間に別のプロセスが作っているかもしれない
  • とりあえずmkdirしてみて,メッセージを確認
  • まだ駄目.メッセージが異なる(OS, Local)
  • Errnoを使う

$!

  • dualvar
    • 数値と文字列の両方を持っている
  • Errnoが数値定数の一覧を定義

エラーコードを調べる

  • manで調べる
  • man 2 mkdir
  • 2はシステムコードの意味
  • POSIXのはOpenGroupのを参照するといい

forkとファイルハンドル

  • forkしてもファイルハンドルは複製されない
  • 親と子で共有
  • forkしても同じ構造体を指しているため
  • 開きなおせば,別の構造体を作ってもらえる

対策

  • File handleだと単純に閉じればいい
  • DBIはundefしちゃ駄目
    • InactiveDestoryを使う
    • 終了処理をせずにクローズだけする
  • POSX::AtForkとかでforkをフックして処理することもできる

UNIXシグナル

SIGPIPE

  • ファイルハンドルにデータを書こうとしたときに,書けない場合はとめる
  • $SIG{PIPE} = 'IGNORE'

SIGALRM

  • timeoutとか
  • メリット
    • 多くのシステムコールで使える ^ デメリット
    • プロセス毎に1個しか使えない

シグナルで処理をする

  • $SIG{TERM}とかでフラグを立てて,メインループでチェック

注意点

  • waitと相性が悪いのでProc::Wait3をつかう

PMグループディスカッション

Hokkaido.pm

  • onagatani
  • 北海道 帯広
  • Perl 5年
  • とりあえずML作ってみた
  • 人数が集まらない可能性がある
  • JPA 牧さん助けて!
  • メンバー
    • 札幌多数
    • CPAN Autor 4名

Yokohama.pm

  • clouder
  • 在住 世田谷
  • 日本で7つ目
  • 横浜中心のPerl Mongersがゆっくり参加する場がほしい
  • 初心者トークで参加しやすい
  • 開催規模 4,50名
  • 飲み会の参加率が90%以上

NagoyaでPerlをゆるく語る会

  • issm
  • 名古屋在住
  • 多言語の勉強会はあるけど,Perlのはあんまりない
  • 月1回 定期的に
  • 10名前後
  • @yuruperl
  • Nagoya.pmの申請を昨日した

Kansai.pm

  • lapis25
  • 兵庫
  • 2000/03設立
  • リーダーがいない
  • 有志による運営
  • ミーティング 年1,2回
    • 土日開催
  • 勉強会
    • フレームワーク勉強会
    • Perlベストプラクティス勉強会
    • Perl翻訳フェスタ
  • イベント
    • OSC
    • KOF
  • その他
    • 新年会
    • 忘年会
    • ぼたん鍋ツアー

Fukuoka.pm

  • debility
  • Satoshi Hirata
  • 2007/11
  • 懇親会がすごい
  • すぎやまさんありがとう

Okayama.pm

  • @canadie
  • C/PHP/Perl
  • 岡山にpmがないので設立
  • 8人
  • 人が集まらないので問題点もでない

ディスカッション

できること,できないこと

  • 福岡 合同でイベント
  • 横浜 Shibuya.pmから流れるので人は集まる
  • 北海道 札幌以外は会場がない

地方PMのホンネ

  • 名古屋 個人的にはPHPが多く,Perlが少ない
  • 岡山 人がいない.車がメインなので飲み会がない
  • 関西 人が定着しにくい.メンバーの固定化
  • 名古屋 技術レベルは高くなくていいのか?
    • 東京 飲み会がメインなので技術レベルは気にしていない. 二人で飲めばPMだ.気軽に参加できるのがあるべき姿

他のPMへの質問

会場の探し方

  • 北海道 札幌はたくさんあるので苦労はない.地方に行くと会場がない.専門学校に掛け合った.平日は厳しい
  • 関西 企業に借りたりする.借りた場合はお金がかかるので,学生向けに学割を用意する
  • 福岡 誰かの会社
  • 渋谷 miyagawa 会場を先に決めるとリミットが決まるので困るんでない

開催日

  • 横浜 金曜日にやる
  • 岡山 アンケートで平日が多いため
  • 福岡 土曜が多い

他コミュニティとのかかわり

  • 北海道 OSC, localがある
  • 福岡 互いにフレームワークの話.Ruby, PHPとかと
  • 岡山 他のコミュニティはあるので,今後やりたい

メンバーの平均年齢と男女比

  • 男性がたいてい多い
  • 女性は多くて2割

運営の仕方の工夫

  • 北海道 初心者向けにやろうとはしている

省サーバ運用

自己紹介

  • 小林
  • nekokak
  • DBIx::Skinny

きっかけ

  • 退職
  • 一人でシステム開発
  • 大規模サーバ入門
    • この技術が必要か?
    • 圧縮とかいらねーよ
  • NoSQL!!
    • RDBMSを極めよ
  • Mixi/DeNA/Gree/etc
    • システムは大規模か?
  • 情熱プログラマー
  • エンジニアが持つべき意識を共有する場をつくりたい
  • インフラとWebアプリ開発の両方をやってみての感想とか工夫
  • 保守も地味
    • 動いて当然
    • 誰も評価しない
    • でも大事

これからのエンジニア

  • 開発能力
  • インフラへの理解
  • 自分がどれだけの利益を出しているか
  • インフラの費用

基本エンジニアリングのお話

  • サーバ6台
  • 1/2ラック
  • 前職の1/50くらい
  • ベンチャーなのでお金がない
    • 6台でもがんばった
    • 値切りまくった
    • 適正な価格で購入することが重要
  • DB2, Web3, 開発1
  • DBのメモリっが8GB, Webメモリ4GB
  • SlaveのサーバではQudoのJobサーバも兼任
  • LBにPerlbal
    • 安定性抜群
    • Perl製
    • Pluginをかける
  • なぜnginxじゃないのか
    • x-reproxyさせたい
    • x-reproxy-cacheがない

Perlbal

  • シングルスレッドなソフトウェアロードバランサー
  • SSLも使える
  • 他のLBよりノウハウがある
  • Webサーバの機能もある

App

  • Starlet
  • Apache/mod_perlは使ってない
  • Server::Starter + Starlet
  • kazuho製なので安心

画像の管理方法

  • rsyncで動機
    • ないわー
    • ないわー
    • ないわー
    • Web 1.0
  • DBのBLOBに格納
    • 遅い
    • Web 1.5
  • MogileFS
    • おすすめ
  • NFS
  • DRBD

MogileFS

  • X-ReproxyヘッダをLBが解釈する必要がある
    • PerlbalなんでOK
  • 管理用のMySQLが必要
  • 物理的に2台のサーバが必要
    • App*2に同居はいやだ
  • 将来的に移行できる形にすればいいや
  • X-Reproxy-CacheはAppサーバへの問い合わせを回避できる
  • X-Reproxyの先をPerlbal自身にすればいい

まとめ

  • 大規模サービスの中身は気になる
  • 自分の環境にマッチするかを立ち止まって確認する
  • 技術的にとんがってないと生きていけない
  • コスト意識をもって行動/提案できるエンジニアかどうか

Lightning Talk Day Two


Keynote

メモしてないです!!

YAPC::Asia Tokyo 2010 一日目

YAPC::Asia Tokyo 2010に行ってきたので,セッションのメモを記録としてアップします.

Moderl Perl Web Development on Amazon EC2

PSGI

  • PSGI APP = coderef
  • sub { [ $status, [ @Headers ], [ @Body ] ] }

Plack

  • PSGIの実装
  • plackupの使い方
    • サーバ実装を切り替えられる
    • Starman, Starlet
    • gracefulに対応しているかどうか
    • DelayedとShotgunどっちがいいのか
    • ベンチとって使うといい
    • miyagawaさんが解説が違うと突っ込み
  • Server::Starter
    • start_server
    • --port
    • --interval

PSGIアプリの書き方

  • 自分で作るのがお勧め
  • CPAN Moduleを使うと簡単にかける
    • Plack::Request
    • 継承して必要な部分を追加
    • parametersをflagged utf8に変換
    • DBIx::Skinny
    • Router::Simple
    • 昨日も紹介されていた(TODO 後で確認)
    • JSON::XS

daemontoolsとは

  • daemontoolsからstart_server

daemontoolsのコマンド

  • svc
    • -u 起動
    • -h SIGHUPを送信
    • -d 停止

daemontoolsの注意点

  • runファイルでexecする
  • runファイルの書き換え後は-dしてから-u
  • サービス停止時はmvで.hogeにリネーム

cpanmの使い方

  • cpanm -l extlib Starman
  • アプリケーション用のユーザを作成してその$HOME以下でアプリ作成

Amazon EC2環境での構築

EC2のサーバ環境

  • web
    • small instance
  • db
    • large instance
    • mysql5.1

構築の祇園

  • IPアドレスが変わる
  • Disk内容が保持されない
  • 負荷分散
  • アプリケーションのdeploy

IPアドレス

  • Elastic IPでDNS, Global IPを固定
    • webサーバはauto scale
    • dbサーバは使ってる
  • amazonのDNSに対して,ElasticIPで取得したDNS名を問い合わせ

DISKが消える

  • instanceを消すと消える
  • EBSブートを使ってる

負荷分散

  • instanceを増やせばいい
  • オートスケールを使えば自動で負荷分散
  • CPU Usageなどで閾値を設定すると勝手に増減する

デプロイ

  • オートスケールはイメージから起動なので,元のインスタンスイメージを更新する
    • 何かツールは?
  • テスト用にElasticIPをとる
    • ここでテストして問題なければイメージ化
    • 後はオートスケールにまかせる
  • NAS, NFSを使う人もいるらしい

感想

  • 開発作業に得に違いはない
  • daemontools + Server::Sterter + Starman
  • ElasticIP
  • オートスケールが便利

まとめ

  • Plack
  • Starman
  • cpanm
  • daemontools
  • amazon特有の環境に注意

最近のPerlなものづくりの事例

  • RECRUIT
  • Toshimasa Ishibashi

MTLProject

  • 自前サービス運営
    • 演劇ライフ
    • コマーシャライザー
    • ハモニナ(携帯系)
    • docomo公式コンテンツ
    • モバゲー SocialApp
    • ATND
    • 調整さん

個社ホームページサービス

  • Perl CMS
    • suumo.jpからcentury21.on.s-bs.jpとかにデータを抽出
  • TypePad + 検索
  • エントリー入力
    • JavaScriptでごりごり
  • お店のミカタ ほっとペッパーでも同様のサービス
  • 10人前後を色々割り振って開発

VMwareで開発

  • 各個人にVMwareをinstall
  • subversionで管理

Test

  • test code
    • Model(ビジネスロジック) ここは100%にする
    • View + Controller
    • どう書いてるの?
    • production, stagingでもsvn up後にprove -r .
    • staging, productionのsvn upはリーダーが手動!
    • リーダーがmergeをごりごり
    • テスト専用のデータベースが環境ごとにある

CPAN

  • cpan installしたモジュールは全部 svn addする
  • $HOME/site_local_envにPERL5LIB等を追加する
  • make installした*.soもsvn add
    • 全環境でOS等をあわせる必要がある

*.conf

  • ln -s /etc/my.cnf $HOME/etc/my.cnf
  • my.cnf.personal, mmy.cnf.staging, my.cnf.productionを$HOME/etc/my.cnfにln -sする

サーバ環境

  • ユーザ認証はRECRUITでシングルサインオン web apiを用意
  • Perl FrameworkはPlack
  • xen server

その他

  • エンジニアは企画から参加
  • backlogでリポジトリ等を管理

Mashup Awards

  • llevalも使える
  • R25 API
  • mbga
  • NHK

30days Albumの裏側

30daysの裏

  • Web Ruby on Rails
  • mogilefs
  • gearmn
  • schwartz
  • HTTP APIを使用
  • RESTを意識

MogileFSの障害対応

  • コピーを確認
    • file_on
    • X-REPORXY-URLを確認
  • Perlbalを再起動
    • X-REPORXY-CACHE-FOR

MogileFSの利バランス

  • データの平準化
  • バックグランドで動作
  • ストレージを追加・削除時に使う

FLVのストリーミング

  • Perlbal pluginを作成
    • FLVヘッダをボディに追加
    • フックポイントを追加

ソーシャルアプリ向けのシステム監視運用の勘所

  • tcpdumpで確認
  • DBのチューニングが遅かった
  • tcpdump + wiresharkでok
  • リクエストの開始からなのでレイテンシを気にする程度
    • 自宅 10ms
    • EC2 100-200ms

Perl and C binding: new and upcoming ways

  • c_ushort
  • PerlDLL
  • Libperl++
  • goal c++
  • for calling perl xs funxtions
  • provides xs environmenent for called funciton

Libperl++

  • Cからperl packageの呼び出しの例
  • Ref testr = universe.package('Tester').call('new',1);
  • Any Perl Variable have take_ref().
  • custom type convertion
    • structも作れるよ

ExtUtils::XSpp

  • Module::Build::WithXSpp
  • c++をtypemapを用意すればかなり普通に使えるっぽい

質疑

  • crossplat form
  • libffiに依存

Studying HTTP with Perl

PerlにおけるHTTPクライアントの紹介

並列じゃないもの

  • LWP::UserAgent
    • デファクトスタンダード
  • LWP::Simple
  • LWP::RobotUA
    • Robot用
  • URI::Fetch
    • LWPのラッパー
    • Etag, LastModifiedに対応
    • キャッシュ対応
  • HTTP::Lite
    • 依存なし
    • httpsに未対応
  • LWPx::ParanoidAgent
    • ローカルネットワークへのアクセスを拒絶
    • DNSの検証
  • WWW::Curl
    • perl binding of libcurl
    • 速い
    • 癖がある
    • ラッパーがいくつかある

並列リクエスト可能なもの

  • お勧めじゃないもの
    • HTTP::Async
    • みのがした
  • AnyEvent::HTTP
  • Coro::LWP
    • Coroとは
    • Perlでコルーチンを実現するライブラリ
    • お勧めだけど考えて使う必要がある

LLによるネットワーキングプログラミング

  • 相手の処理待ちが多いからLLでもOK
  • だけどLWPは遅い
  • ベンチマークをとる
  • LWPで200req/s

AnyEvent::Curl

  • on github
  • LWPの8倍速い
  • WWW::Curlとの違い
    • ブロッキングしていいのかどうか
    • event駆動のサーバの場合
  • LWP互換機能
  • WWW::Curl::Multiがベース

並列処理

  • thread バグってる
  • forkによるマルチプロセス
    • IO多重化+イベント駆動
  • forkのメリット
    • マルチコアの生かせる
  • forkのデメリット
    • 生成コスト
    • メモリ
  • イベント駆動
    • 省メモリ
  • Perlだとイベント駆動+prefork

Preforkの話

  • prefork型はDoSに弱い
  • フロントにイベント駆動のロードバランサをおく
  • プロセス数を調節する
  • ピークリクエストと処理時間がわかれば,必要なワーカーを計算できる

イベント駆動向きなもの

  • 予想できなければイベント駆動が向いている
  • フラグを使った強調動作
    • 1ホストに対するリクエスト数の管理とか
  • クローラは相手のスペックがわからないのでイベント駆動がいい

チューニング

  • HTTP::Responseが遅い.HTTP::HeadersをXS化
  • 名前解決のコスト
    • WWW::Curlは非同期解決のオプションがある
    • パフォーマンスが劣化する
  • 外向けのクローラーはSquidを通すと楽

RPCのプロトコル

  • HTTPでいいんでない
  • HTTPのメリット
    • みんな知っている
  • HTTPは別に遅くない

テスト

  • Test::TCP
  • Plack/PSGIで簡単サーバを作る
  • ローカル環境だけで動くようにする

非同期処理の通知処理 with Tatsumaki

CGI

  • $|でautoflushをonにする
  • long-polling
  • multipart/mixedで送信
    • クライアント側ではDUI.jsで処理
  • 大量アクセスを裁けない
    • C10K問題

PSGI/Plackストリーミング

  • めんどくさい
    • coderef coderef coderef ...
  • 全部IO処理を非同期にしなければならない

どうやって簡単にするか

  • Tastumaki::Handler
  • Tatsumaki::Application
  • Gearman
    • jobはMyJobとか作ってその中にjob_hogeなメソッドを定義
    • Class::InspectorでMyJobからジョブを読み出す
  • AnyEvent::Gearmanがクライアントにはいい
  • WebService::Async

Writing prefork job workers / servers

Parallel::ForkManager

  • 便利
  • shutdown方法がない

Parallel::Prefork

  • シグナルで子プロセスを制御できる
  • 親が受け取ったシグナルを子プロセスのシグナルに対応づける
  • graceful
  • dynamic scaling
    • P::P::SpareWorkers
    • 非推奨

Server::Starter

  • 去年のLTと一緒
  • 環境変数をみてfd_openですでに開いているソケットを使うだけでSS対応できる

Parallel::Scoreboard

  • リソース監視
  • mod_statsuっぽいものを作成しやすくする
  • 監視側
    • Paralle::Scoreboard::PSGI::App
    • Paralle::Scoreboard::PSGI::App::JSON