hitode909の日記

以前はプログラミング日記でしたが、今は子育て日記です

第32回 Ruby勉強会@関西に行った

久しぶりにRuby勉強会に行ってきました。
コンビニで並んでたら前の人が店員に「このへんに王将はありますか」とか聞きだして、バスに乗り遅れそうになったり、id:hakobe932さんが「前に来たことあるからさくさく行ける」とおっしゃってたので、ついて行ったら、全然違う方向に行ってしまってめちゃくちゃ迷ったりしたのですが、間に合ったし、勉強もできました。
後学のためにメモを取っていたので、掲載しておきます。

id:zhestoさんに誤りを指摘していただいたので、一部修正しました。修正箇所はコメントをご覧ください。


2009-01-31 13:15~17:00

Gmail4Domain、Rails、Godを使っためっちゃこすいメールからの投稿受付 by waku さん

  • Gmail 4 Domain(Google Appsのやつ)
    • Postfixいらない
    • 6GB x 100アカウント
    • IMAP CatchALl使える(なんでも受信できる)
  • God
    • Ruby サーバー監視フレーム輪p区
    • gem install god
    • リソース食ってたら立ち上げ直すとかできる
    • 何分おきにとか
    • 固まっても復旧できる
    • 設定がRailsで書けるので簡単
    • God.watch do |w|
  • Gmailとの連携
    • タイトルをJISやEUCで取得できる
    • タイトルがJISでも本文が全部UTF-8
    • 文字コードが混ざっていてうまくいかない

質問

  • monitと比べてどこがすばらしい?
    • monitはよく知らない
    • railsの中に取り込めるのでバージョン管理できる
  • プロセスの監視などができると聞いたが
    • リソースが足りないときにうまく動かないことがある
    • godがなんとかしてくれると思った
  • 泊まったときに再起動のほかにできることは?
    • スクリプトを呼ぶだけなので、何でもできる(リソースが足りないことの報告など)
    • Exception Monitorで起きた例外を見ることができる

Fiber使ってみた by サイロス誠 さん

  • Fiber
    • スレッドの一部
    • ブロックやスクリプトを平行処理
  • 特徴
    • 生成と開始は別
      • 作った瞬間に実行されるのではなくて、あとで開始する
    • シンプル
      • Fiber.new
      • Fiber#resume
      • Fiber.yield
  • Fiber.new
    • Fiberのインスタンスを作製
    • 評価するブロックを引数として渡す
    • ブロック比キスは省略可能
  • Fiber#resume
    • ブロックを評価
    • resume;yield;
    • yieldするとよび元に戻る
    • FiberError
  • Fiber.yield
    • resumeした位置の次の行に戻る
    • resumeメソッドの戻り値を引数に取る
  • 例の実行と解説(添付資料)
    • Threadはどこに行くか分からないが、Fiberの場合は異動先が分かりやすくなっている
  • 実例
  • Generator
    • 1.9.1のEnumulatorでFiberが使われている
    • while trueの中からでないので、11から順にインクリメントされる
  • ゲーム等でのシナリオとメインの実装
    • メインから、シナリオをresumeする
  • 補足
  • require fiber
  • 質問
  • 1.8で同じことをやるには?
    • callccが使われていた
    • 使いにくく、速度も劣る
  • スライド中に書き込むのはMiyakoの機能?
    • はい
    • 左クリックで書き込み、右クリックで消せる
  • Generator、@stをインスタンス変数にして引数にしなくてもできるのでは?
    • たしかに

XMPPでMicrobloggingを - xmpp4r+ramaze+sequel webアプリ by ストヤンさん

  • ストヤン
  • SEMM
  • 家のパソコン使えない
  • Web 3.0(RealTimeWeb)
  • RSSでは足りない(1万人でフィードを読むと落ちる)
  • うまくやる方法
    • SUP
    • フィードの中の差分を取れる
    • Webhooks(今日は話しない)
    • 今日の話はXMPP
  • London-Calcutta間の通信時間
    • 1800:2年 帆船
    • ...
    • 1994 10分 メール
    • 1999 1秒 IM
  • XMPPの歴史
    • 1998 Jeremie MillerICQ
    • ...
    • 2004 XMPP RFCs
  • XMPP
  • JID(IDをもらえる)
    • node@server/Resource
  • オープンプロトコル
  • サーバー分散
  • ドキュメント
    • RFC 3290, 3291を読めばよい(簡単)
  • XMPP extension proctocols(XEP)
  • 2方向でXMLをストリーム
  • presenceつき
    • オンラインになったらすぐわかる
  • One-to-one IM
    • 人と人
    • アプリケーション間
  • グループチャット
  • Geolocation
    • (どこから送ったか)
    • 送り元をGoogleマップに出したりとか
  • security
    • SSL,TLSできる
    • ウォールストリート
    • アメリカ国防省
    • Cisco
    • Google(Gtalk)
    • Apple(Mobile meはXMPPだった(今は違う))
    • NTT(何やってるか知らん)
  • 自分でXMPP
    • Free account(Jabber)
    • Gtalk
    • 自分のサーバーにインストール
      • ejabberd(erlang): メンテナンスややこしい
      • openfire(java): 簡単
  • ライブラリ
  • 次の話
  • Microbloggint
    • Web2.0
    • statusを変える
      • 食べてる、寝てる、とか
    • 短い
      • 140文字とか
      • SMSから送るため
    • メディアファイルもいける
    • 携帯で写真とってすぐ送るとか
  • Web3.0
    • PubSub
    • ...
  • ややこしいので自分で作る
  • XMPPbot
    • XMPPサーバーとつながって、メッセージを受信して何かする
  • 簡単なAPI
  • web frontend
  • 参考になるやつ
    • juick.com(ロシア)
    • kwippy.com(インド)
  • 構成
    • models.rb
    • bot.rb
    • api.rb
    • web.rb
  • Model
  • Things
    • User
    • Micro
  • Relations User to User
    • Subscribe User to Micro
    • Like User to Micro
  • Relations(Sequel)
  • Ruby XMPP Libraries
    • xmpp4r なんでもあり, 難しい
    • xmpp4r-simple 簡単で使いやすい
    • jabber4r もっと使いやすいけどスレッドなので気に入らない
  • XMPP bot
  • 平行性
    • 処理に時間がかるworkerのcallbackを指定できる
    • include EM::Deferrable
  • APIの説明
    • いろいろ
  • Web(Ramaze)
    • 見やすい
  • Demo
  • openfire
  • ./web.rb, ./bot.rb
  • botがログインしたら通知(Growlとかで)
  • iChatと会話できる
  • 返信だけ流れてくる
  • メッセージ単位でfollow, unfollowとかできる
  • Webから見られる
  • Twitterっぽいけど全部リアルタイムでウェブからも見える
  • やりたいこと
    • Ragelでコマンドをパース
  • XMPP すごい
  • eventmachine network library
  • sequel つかえるORM
  • rameze 使える
  • 質問
  • bot,平行性があるのにスレッドではない?
    • スレッドではない
    • 1つのプロセスで、イベントが来たら移動する
    • Linuxの場合はpoll, FreeBSDならkqueueとか
  • OS別にpoll,kquueとかを使い分ける?

Ruby 初級者向けレッスン第 26 回 by okkez さん

  • お知らせ
    • ジュンク堂大阪本店
    • 松本さんと卜部さん
    • トークショー(満員)
    • 宴会はまだあいてる(cotocoto)
  • やること
  • Ruby1.9.1 NEWSを読む
    • 1.8.7, 1.9.0からの変更点
    • Ruby力が低いとついてこれないかもしれない
  • Ruby1.9.1を使用するにあたって注意
  • NEWS
    • 長い(418行)
    • 互換性
    • 言語仕様
    • それぞれ、コアとライブラリ

(資料があったので、気になったことだけメモを取っています)

  • ブロック引数がブロックローカル
    • 上書きされない
    • これに依存したコードを書いてた人は反省
  • 組み込みクラスとオブジェクト
  • Kernel#methodsがシンボルの配列を返す
    • 名前の配列は大体シンボル
  • Exception
    • 例外クラスの比較、同じクラスで同じメッセージとバックとレースを持つ場合に真
  • Array
    • choiseがなくなったのでsampleを使う
    • sampleに引数を渡すとその個数取ってくれる
  • Hash
    • to_sがinspectと同じで見やすく
    • selectがhashを返す
    • eachとかで挿入された順に列挙される
  • IO
    • バイト単位だったものが文字を意識
      • getcが文字
    • openの第二引数に't'を取る
      • text-mode
    • openがエンコーディングを指定できる
      • 大事なのであとで
    • File.open('euc.txt', 'r:euc-jp:utf-8'){|file|
      • euc-jpとして読んできて、utf-8にする
    • IO.readpartial(2)で2文字ずつ取得
  • String
    • ?cが文字を返す
  • Time and Date
  • parseがdd/mm/yyyyからmm/dd/yyyyに
  • Win32API
    • 削除されたのでdlライブラリを使う
  • test/unit
    • minitestとして再実装(完全に互換はない)
  • lambda

c = 1
-> (a, b; c){c = a + b}.call(1,2)
p c #=> 1

  • cはlambda内で利用されるローカル変数
  • procがProc.newとおなじ
  • Proc#curry
  • Fiber
    • 今日来た人には説明済み
  • Array.to_sがinspectと同じに
  • Symbol
    • 空文字列のシンボルができる
    • 挙動がStringっぽい(grepできるとか)
  • source_location
    • cool
    • どこの何行目かわかる
  • __callee__
    • 自分の名前が分からないときに再起ができる
  • 行頭ドットで行継続できる
    • 長いメソッドチェインとか
  • begin...end以外でretryできない
    • 実装がめんどかったといううわさ
  • 注意すること
  • man rubyですべてのオプションを見られる
    • ruby --helpは1画面分だけ出るので大事なオプションがなかったりする
  • gemを使わないとき、--disable-gemsするとちょっと速い
    • 2回目以降はキャッシュされるからそう変わらない
  • $SAFE=1で実行時に動的に$LOAD_PATHを追加できない
    • 今のところ安全なウェブアプリケーションを作れない
    • バグかもしれない
  • m17n
    • magic commentでスクリプトエンコーディングを決められる
    • # -*- coding: euc-jp -*-
    • 1行目か2行目(shebangがあるとき)に書かないといけない
    • エディタに自動挿入させるとよい
    • るりまを読む
  • まとめ
    • Ruby1.9.1すごい
    • 変更点たくさん
    • 普通に使う分には大丈夫
    • 行儀の悪いことをしてたらやばい
  • 質問
  • エンコーディングは何がサポートされているのか
    • Encoding.name_list
    • ダミーがあるので、名前はサポートされていても違ったりする
  • エンコードを気にせず、ただのバイト列として扱うには?
    • Ascii-8bitとかBinaryとか
    • each_bytesとか
  • default_internal
    • 明示的に指示しなくても、openするときに勝手に変わる
    • 危険
  • okkezさんは今日から移行される?
    • どっちも使いたいので共存できるように考えてから
  • [].each{|@a|}とかはできない?
    • できなくなった

次回

  • 未定
  • 3月濃厚
  • 2月はイベントたくさん
    • ジュンク堂でトークセッションとか
    • デブサミとか
    • 未発表のイベントたくさん