RubyKaigi 三日目[rubygems][ruby]

本日も参加してきました
メモです

あらためて仕事で使うRuby

  • スピーカー
    • 後藤 謙太郎さん
  • ちょっとしたプログラムの特長
    • 動けばよい
    • パフォーマンスいらない
    • 出力pp等
  • 既存Webサイトの構成調査
    • 調査したいこと
      • ファイル名
      • タイトル
      • meta
    • 使うライブラリ等
      • wget -m
      • hpricot
      • nokogiri

Haml and Sass: Solution for you who get tired of ugly markup

rhtml Haml

hello world

%h1 hello world
    • 行指向
      • 閉じなくて良い
  • Hamlのメリット
    • htmlの冗長さを取り除く
    • 読みやすい
  • CSSの問題
    • CSSの機能が足りない
      • 管理不能な状態に陥る
  • Sassとは?
  • Sassのルール
    • nest出来る
  • Sass(Mixin)
=rond-border
 border-radius:16px
 -webkit-border-radius:16px
 -moz-borderradius:16px
.navigation a
 +round-border

.navigation a{
 border-radius:16px;
 -webkit-border-radius:16px;
 -moz-borderradius:16px;
}
=clearfix
 display: inline-block
 &:after
  content: ""
  display:block 
  height:0
  clear : both
  visibility:hidden
 * html &
  height:1px
ul.menu
  +clearfix
  li
   float:left
    • Mixingに引数が取れるようになった
=sexi-border(!color,!width = lin)
  border = !color
  width = !width
  style : dashed
p
 +sexi-borr("blue")
  • 質問
    • デザイナーと一緒にやってるがhamlとsassはつかえるの?
      • 難しそう、やめたほうがいいかも
    • rhtmlをでつくっちゃってるが
      • ひとつのテンプレート毎に移行できるSassも
      • css2sass,html2hamlがある(変換制度は期待しないほうが..)
    • パフォーマンス
      • erbの2.5倍遅い
      • :uglyオプションをつけると2%早い(Railsのproduction環境だとデフォルトで:uglyがonになる)
    • :uglyモードはどれくらい汚い出力になるのか?
      • インデントがされない
    • endを書かないのが良いというのはrubyよりpythonの方が優れている?
    • html特化だとデフォルトescapeすればよいのでは?
      • hamlでオプションを渡せばできる
require 'rubyems'
require 'hpricot'
#ARGV[0]配下のファイルを全部
file = (Dir"#{ARGV[0]}/**/*.htlm"]).sort
file.each_with_idex(|fn,n|
   doc = Hpricot(File.read(fn))
   tmp = doc.search("title")first
   title = tmp ? tmp.inner_html : "<empty>"
   put [fnmtitle].join("\t")
}
    • タブ区切りだとExcelで読みやすい
  • DHCPでリースしたアドレスの監視
    • dhcpdをリースしたアドレスをテキストファイルに書き出す
require "tempfile"
f= "/var/db/dhcpd/dhcp.leases"
a = File.read
     .
     .

3秒毎に調査する

rubygemsのおとしあな

  • スピーカー
    • 西山 和広さん
  • rescue LoadError
    • rubygemsがrequireを置き換えてしまう
  • gettext
require 'gettext'

begin
  require 'gettext/rgettext' #1.95.8
rescue
  require 'gettext/tools/rgettext' #2.0.4
end
    • poファイル関連の部分を2.0.4に対応して発生
  • reliable-msg

begin
require "mysql"
recue LoadError
requre 'active_record/vendor/mysql'
end

  • インストールが遅い場合
    • gem install --no-ri --no-rdoc [gemname]
    • $HOME/.gemrc
      • gem: --no-ri --no-rdoc ---format-executable
  • Debian rubygemsの場合
  • gemのインストール場所
    • GEM_HOMEが設定されていればそこに
    • sudoをつけないと ~/.gem配下にインストールされる
  • ~/.gemにインストールしたとき
  • gemと実行ファイル
    • パッケージDirに bin/lsとか作ると
    • なんと/usr/bin/lsが上書きされる(ひどい仕様)
  • 複数ruby verがある場合
    • --program-suffix=18
    • rubyirbはruby18やirb18になる
  • 質問
    • フィードバックできるところはrubyやgems本体にしたほうがよい
    • one-click-ruby環境変数で勝手にrubygemsを入れてしまう
    • gem installの際にgemリストを取りに良くのが遅い
      • そのケースにははまった事がない

Ruby製アプリケーションを配布するn個の方法

  • スピーカ
  • Webアプリは初心者に優しくない
    • サーバが必要
  • Desktop
    • Ruby GUIを使ったことある人:250
    • Ruby GUIを今も使い続けている:135
  • RubyScript2Exe
    • 2003-07まで開発されていた
    • 現状開発はとまっている
    • 色々なOSに対応している
    • Rubyinterpreterのsoとかlib配下のものまとめてexeにする
      • 起動が遅い
    • ruby 1.8.6以降では動かない
  • Exerb
    • Window用のexeを作るライブラリ
    • requireを書き換えてextファイルからrubyのライブラリを呼び出す
      • 速度が速い
  • Ocra
    • windows上でwindows exeを作るパッケージ
    • Exerbとの違いは必要なファイルだけを検出して圧縮しexeを作る
  • Crate
    • UnixコンパイルしてUnixのバイナリを作る
    • 必要なものをstaticリンクしたカスタムrubyを作る
    • 残りのライブラリをSQLiteのDBに突っ込んである
  • RubyStationが今日リリース

tDiaryRuby 1.9 対応の過程と今後のロードマップ

  • スピーカー
    • 柴田 博志さん
    • hsbt
    • 北海道在住
  • tDiary
    • コメントスパム
    • テストがない
    • コードが...
    • Railsが流行る前から
    • 25年はサポートし続ける(現在8年目)
    • Rubyとともに成長
    • Ruby1.9を復旧させる!
      • しかしちょっと前までは1.9ではトップページを動かす程度
      • -program-suffix=19
  • 1.9対応の問題点
    • magic comment
    • 1.8->1.9への非互換
  • 1.9対応詳細1.互換性対応
    • compatible.rb
      • machuさんが作成
      • for 1.9 String.each_line ,String.to_aが1.8っぽく動くように
      • for 1.8 String.force_encoding,String.bytesizeが1.9っぽく動くように
  • magic comment
    • 1行目を任意の文字列を挿入するone liner
gsed -i "ls/.*/# -\* - coding: utf- \*- ..
  • ruby --encoding=utf-8
    • ruby実行時に--encoding=utf8をつければエンコーディングを強制できる
    • tDiaryの場合だとindex.rbやupdate.rbのshebangに追加
      • ユーザに優しくないので意識させないようにする
      • open(file,'r:utf-8') 1.8.6だと使えない
  • Encoding::default_external = 'UTF-8'を使う!!
  • 細かい修正
    • cgi.cookiesがASCII-8BITと認識される(個別にencodingを設定)
    • mersialのdump結果が1.8->1.9互換性がない
    • blockをつけないmapのreturn方法が変わった
    • getの第二引数がnilを許容しない
  • ひとまず動作確認
  • eval実行時にSecurityError
    • $SAFE=1の時にevalすると起こる[BUG]
      • 修正されるまでは例外捕獲して対応
  • tDiary-2.3.2リリース 2009/05/08
  • tDiaryの未来
    • testing framework
      • 現状は参照と更新を画面上から確認
      • rspec
      • cucumber
    • CGIからRackへ
    • 機能追加と不具合追加
  • rspec
  • cucumber
  • ユーザ/こみったの声
    • cacheフォルダにcacheじゃないデータがある(消すと大事なデータが..)
    • XMLRPCが動かないまま放置
    • mod_ruby怪しいのでfcgi
    • 1.9だと重い
  • 質問
    • tDiaryレポジトリgit等の分散型に以降の予定は?
      • githubで良いのでは?
      • すぐに移行はない
    • rack移行はtesting frameworkの為に移行している->cgi.rbでテスティングフレームワークはないのか?
      • わかりません
    • XMLRPCが動かないといけない
      • 一日単位ではなくてセクション毎に更新をかけたい