関西オープンソース2009(関西Ruby会議02・関西コミュニティ大決戦)に参加してきました
http://k-of.jp/2009/index.html
金・土の二日間、標記のイベントへ行ってきました。聴講したセッションについて記録を。
間違いがあったらごめんなさい… まだ満足に扱えないEmacsでのメモ取りは大変だ。早く慣れないと
1日目
セミナー室に机が無くて、この日はパソコン開くの自重してた上に、紙のノートも持って行ってなかったのであまり記録が残っていません…すみません
ソフトウェア技術者が知っておくべきこと by 坂下さん
- 新人プログラマとの間の知識ギャップについて
- 「新人がこんなことも知らなかった」な例がいろいろと
- 採用の時にどのくらいを要求したか、どのくらいで妥協したか、という問題のような
- 現実的なところでは、そんな何でも知っている人ばかりを採用できるわけはないので、最初から同じ常識を持っていると思わない方がよいですよね。本当に問題なのは、知らないことではなくて知ろうとしないこと
セキュアコーディングノススメ by 久保さん
- JPCERTでセキュリティのための取り組みをやっています
- C言語の思想:「プログラマは言語仕様を完璧に把握しており、自分がやろうとしていることを正確に表現できるはず」プログラマを信頼する言語
- しかし現実は…
- →プログラマが正しい知識を持たないといけないし、そのためのサポートが必要
- 望ましいコーディングスタイルをwikiでまとめてある(C/C++/Java)
- https://www.securecoding.cert.org/confluence/display/seccode/CERT+Secure+Coding+Standards
- 言語仕様書はコンパイラ作成者向けに書かれており、プログラマは読んでも理解しづらい。そのギャップを埋めるためのテキスト
- セミナーもやってますよ
続・現場で役立つRuby on Railsパターン by 大場さん
2日目
Hacking parse.y by ujihisaさん
- 会場でRubyの処理系を触ったことのある人→4割くらい!
- 今回の発表はあまり触ったことのない人が対象ですよ
- parse.yがRubyのパーサ。これに新しいシンタクスを追加して改造することで理解していきましょう
- Matz「Rubyの汚いところ二つはparse.yとeval.c」
- evel.c(評価器)はRuby1.9からYARVに書き換えられた
- parse.yが現在のRuby(MRI)の中で一番大きいファイル(自動生成されたファイル除く:10000行超)
デモ
- 例1:「:-)」というハッシュ関連づけリテラルを定義してみましょう
- Lexerがコロンをハンドリングしているところの先頭に、追加するリテラルのための処理を追加する
- 例2:Lisp風のシンボル定義:「'」でシンボルを定義できるようにしてみましょう
- 「'」が二つ続くと文字列として解釈されるが、回避方法が見つからなかったのであきらめ
- 1024文字以内に次の「'」が出てきた場合は文字列とする(きめうち)
- 例3:前置インクリメントの追加
- succを使って定義する。 ++i := i = i.succ
- Lexerに新しいトークンを追加、パーサも「+」をハンドリングしているあたりを書き換える
- 例4:「#」によるインスタンスメソッド定義
- クラスメソッドの定義は def A.b なのにインスタンスメソッド定義がclass A内で def b だから非対称。def A#b と書きたい
そのほか
- ほかにもいろいろと好きな演算子を定義できます。既存のコードが動かなくなるかもしれないけど。「(::)」(cucumber operator)とか「<3」(love operator)とか作っている人がいた
- Rubyのビルドを何回もやってると、ログが流れるのを見ながらいつごろビルドが終わるか予測できるようになる!
- 調べる際には、Ruby Hacking GuideのHTML版を参考にしました
- Rubyのパーサについて調べ始めたのは、リスト内包表記がRubyで使えたら便利じゃないか? という動機から
- 後置インクリメントは、戻り値を保持しておくための一時変数が必要だがparse.y内で一時変数に代入しておく方法が見つからなかったのでやらなかった
- succの逆演算があれば一時変数使わなくても簡単に実現できるが
- このあたりのことは勉強し始めて3ヶ月くらい
- ただし、朝から晩まで勉強しての3ヶ月
- termtterについて
Ruby Lightning Talks
立ち見多数。すごい人気。
- Sixeight(西村)さん
- kyaraさん
- visualizing and processing
- プレゼン資料自体がVisualizing言語で書かれている rp5?
- 日本地図のデモ
- ひな形作って、サイズ変えたり画像読み込んだりといったコードが楽に書ける
- 松本さん
- ストヤンさん
- 角谷さん
- Rubyの会第6期の活動について
- RubyKaigi2010開催決定。8月27日−29日に筑波で
- RubyKaigi2010のWebサイトをLT中にデプロイ→時間ちょうどでアップロード完了 http://rubykaigi.org/2010/
- サイロス誠さん
- Miyako(ゲーム作成ライブラリ?)の新機能
- 今度本が出ます
- jugyoさん
- yharaさん
Googleのオープンソース活動の紹介 by 山下さん(京都GTUG)
- GoogleはOSSを利用→コミュニティへの還元
- 「Googleライセンス」というものはない、既存のオープンソースのライセンスが優れているものだから
- Googleが公開しているプロジェクト(一部)
- http:/code.google.com/p/XXX でそのプロジェクトのページにアクセスできる
- android
- ソースは公開だが開発はクローズド
- app-engine-site-creator
- wikiライクなページをAppEngine上に構築
- appengine-htmlwhitelist
- 危険なページをサニタイズ
- appengine-jruby
- big-test-runner
- JUnit互換のブラウザテスト
- browsersync
- chartmaker
- chromium
- 一応Google社員ではなくてもコミッタになれる
- 簡単ではない。社会人は無理だろう
- explorercanvas
- gears-monkey
- GreasemonkeyでGearsを利用する拡張
- データの永続化、疑似スレッドのサポート
- glint-ui
- google-code-prettify
- HTML上でシンタクスハイライトするライブラリ
- google-collections
- google-ctemplate
- C++用のテンプレートエンジン
- google-gin
- google-guice
- google-maven-repository
- google-web-toolkit
- Google社内では流行っているそう
- Google WaveもGWT使って書かれている
- google-web-toolkit-incubator
- googleappengine
- googlemock
- googlesitemapgenerator
- sitemapを生成する
- googletest
- guava-libraries
- Javaのライブラリ群
- gwt-debug-panel
- gxp
- ipaddr-py
- jaikuengine
- ミニブログエンジン
- js-test-driver
- JavaScriptのテストドライバ
- 開発中
- namebench
- nativeclient
- neatx
- X-WindowシステムをエンハンスしてNXサーバ
- リモートデスクトップができる
- いろいろ開発中
- noop
- o3d
- ブラウザ上のJavaScriptから3Dを制御
- omaha
- GoogleChromeやGoogleEarthで採用されている自動インストーラ
- 自動アップデートも含んでいる?
- C++とPythonで書かれている
- page-speed
- Webページ表示速度計測ツール
- Firefox拡張
- チューニング方法を指示してくれる
- protobuf
- thread-weaver
- v8
アプリケーションのアクセシビリティ by 持田さん
- ACRIという団体でアクセシビリティ普及のための活動をしている
- PCがCUIからGUI中心になってアクセシビリティの確保が困難になった
- MSAAという解決策
- まだ残る問題:各ウィンドウ内に書かれるコンテンツの詳細は単純なMSAAでは解決できない
- ブラウザ内のDOMコンテンツ→MSAAに変換・WAI-RAIA
- Flash→AdobeがFlash PlayerでMSAAへの変換をサポート
- PDF→Adobe Readerが代替テキストに対応
- Silverlight→Version2からMSAAをサポート
Rubyによる Mac OS X デスクトップアプリケーション開発入門 by 高尾さん
- 初めてMacにRubyが乗ったのは2002年(Ruby1.6.7)、2005年に1.8になって、2007年にRailsがRubyに標準で組み込まれる
- RubyConf出席者の感想:「海外のRubyistはほとんどMacユーザー」
- XcodeがRuby対応(OS X 10.5だけ)
- とにかくGUI
- InterfaceBuilderで画面設計
- RubyとObjective-Cは相性がよい
- オブジェクトシステムがSmalltalk由来という共通点
- LimeChat作者もおすすめ
- Rubyが(C言語も)理解できていればObjective-Cの理解は早いよ
- RubyCocoa:RubyとObj-Cの橋渡しをするライブラリ
- MacRuby:Macに特化したRuby処理系 今から始める人はこちらがおすすめ RubyCocoaはRuby1.9対応しない予定
- MacRubyデモ
- まずXCodeでプロジェクト作成
- Rubyファイル追加 一つのクラスを実装するだけでアプリケーションになる
- クラスにattr-accessorを定義することでGUI部品とつなぐインスタンス変数が定義できる
- senderという引数一つを持ったインスタンスメソッドを定義する。これがボタンのアクションのイベントハンドラになる
- 画面設計:アプリケーション起動時にアプリケーションクラスのインスタンスを一つだけインスタンス化する処理をGUIで定義できる
- GUI部品貼り付け。もちろんGUIで
- 画面上のテキストフィールドにクラスのインスタンス変数を割り付ける。これもGUIで。Ctrl押しながらドラッグすると線がびよーんと出てつなげる
- ボタンのアクションにインスタンスメソッドを割り付ける。上と同様にGUIで
- OS X 10.6で入った機能であるGCD(Grand Central Dispatch)について説明
- おおざっぱに言って、並列処理のためのライブラリ
- C言語の拡張+ランタイムAPI
- MacRubyで利用できる(0.5以降)
- GCDデモ:素数の数を数える あえて効率の悪いアルゴリズムで
- GCD使わない場合:23秒
- GCD使った場合(ループを並行処理):11秒
- 全部別のスレッドにした場合:12秒 ただしスレッドをたくさん起動すると落ちたりする。また、今回のサンプルコードでは問題にならなかったが、たくさんロックがかかる状況だと遅くなるはず
- Dispatch:::Queue.concurrent を使う
- GCDがグローバルディスパッチキューを用意、処理ブロックをそこに登録する。登録された処理はFIFOで実行される。その際にコア数などを考慮して自動で並列処理される
- ロックをかける = プライベートディスパッチキューを使う
- プライベートディスパッチキュー:処理を登録した順に一つずつ処理するキュー。好きなだけ作れるワーカスレッドはグローバルディスパッチキューと共通
- スレッドを何個起動したらよいかを人が判断するのは難しい
- ロック不要なのでデッドロックが発生しない
- スレッドを直接使うと、うまく書けば効率のよいプログラムが書けるが、難しい
GC黄金時代 by nariさん
http://www.slideshare.net/authorNari/gc-2447192
- Rubyコミッタ:「GCについて考える人」
- RubyGCの話はニコ動にあげてあるからそっちを見てね → http://www.nicovideo.jp/watch/sm8362885
- 会場内でGCが好きな人:5人 予想通り
- 会場内でGCのコードを読み書きしたことがある人:10人くらい、そんなにいるとは
- なぜGCが好きか?→よくわからない、運命ではないか
- GCいろいろ
- GC黄金時代
Ruby関西懇親会
- しゃぶしゃぶ。食べ放題飲み放題なのに3500円(学生は2000円)と、とても安かった
- 知らない人たちだらけでそわそわ、そわそわ
- いろいろな方に話しかけていただいてけっこう会話できました。ありがとうございます!
感想
こんなイベントが無料で開催されるとは一体どうなっておるのか。内容盛りだくさんであっという間の二日間でした。たまにこういう集まりに出向くのは本当によい刺激です。休み取って参加してよかったです。
しかしまぁ全体的に話について行けない・語れるものを持っていないというのはどうしたものか。きっと愛が足りない、つまり読み書き悩みの絶対量が足りない。
とはいえ何でもはやれないから、テーマを絞ってやらねばならん。そのフォーカスを絞るのに、どこかで発表する(ことを想像して)準備をする、というのは有効ではないかと思います。
というわけでshikoku.rbを想定してネタ拾いをしよう。