Create  FrontPage  Index  Search  Changes  Login

日本Rubyの会 公式Wiki - KansaiWorkshop13 Diff

  • Added parts are displayed like this.
  • Deleted parts are displayed like this.

! 第13回 [[KansaiWorkshop]](運営:[[RubyKansai]])

{{toc}}

!! 勉強会

:日時:2006 年 12 月 16 日 (土) 13:00〜17:30
:場所:京都女子大 B校舎4F B420教室 (注意!今回も教室がちがいます。プリンセスライン乗場の脇のキャンパスです)
:地図:http://maps.google.co.jp/maps?f=q&hl=en&ie=UTF8&z=19&ll=34.988594,135.779807&spn=0.002044,0.003583&om=1
:費用:実費(講師の交通費、配布物の印刷代等)の人数割をご負担ください。前回(同じ会場)は500円でした。
:定員:定員は設定しません。

!! 懇親会
:日時:2006 年 12 月 16 日 (土) 18:00〜(予定)
:場所:[[インドレストラン タージ マハール|http://g.pia.co.jp/shop/9041]]
:会費:およそ社会人:学生 = 2:1 の比率でご負担ください。前回は 3500 円、2000 円でした。
:締切:2006 年 12 月 15 日 (金) 17:00 まで
// (行けなくなった方は必ず、 6 日 17:00 までに、[[Rubyist SNS の懇親会のページ|http://jp.rubyist.net/sns/?m=pc&a=page_c_event_detail&target_c_commu_topic_id=2]]で「参加をキャンセル」してください)

!! プログラム
* 「Ruby 初級者向けレッスン 第10回」by okkez さん&夏間さん
** 配布資料:{{attach_anchor("print.pdf")}}
** スライド:{{attach_anchor("slide.pdf")}}
** 演習課題解答例 PDF:{{attach_anchor("answer.pdf")}}
** 演習課題解答例 Rubyスクリプト:{{attach_anchor("answer.tar.gz")}}
* 「Ruby で書いたプログラムのデバグ技術」by いけがみさん
* 「Rubyクイズ」by cuzic さん
** 配布資料:{{attach_anchor("ruby-quiz013.pdf")}}
* 「scim-rubyの紹介」by 中本さん
** [[発表資料|http://bd.tank.jp/presentation/index.html#rubykansai13]]
* 「オープンソースは愛だ!」 by かずひこさん
** 発表資料:{{attach_anchor("oss_is_love.pdf")}}

!! レポート
!!! 「Ruby で書いたプログラムのデバグ技術」by いけがみさん(レポート: 氏久達博さん)
:はじめに:
* 今回の発表は関西オープンソースのお話の続き。
* バグとは「仕様と実装がずれている」状態のこと。
** 仕様と一言で言っても、要求仕様と設計仕様は違うので、分けて考えるべし。
** 「どうあるべきか」と「実際はどうだったか」のdiffをなくしたい。
** 要求仕様は"object.action" should be "result"
** 実装は"object.action" may be "result"

:振舞駆動開発RSpec:
* Test::Unitとの違い
** test/unitならassert person.put_crown.king? であると断言する
** rspecならperson.put_crown.showld_be_king であるべきだ
* RSpecいい
** Testは仕様と実装がまじってる。RSpecはきりわけられてる。
** こういう例はいくらでもある(assert_なになにをそのままshould_なになににする)
** 角谷さんがRSpecチュートリアルを日本語化
** rspecならテストコマンドspecがある
** railsで使える

:ランダムテストライブラリRushCheck(自作):
* テストしてもバグが見つからない
* 「テストでバグなんか見つかるはずがない」
** テストする空間が広いから。テストしてるとことバグがあるところが違う
* ランダムテストという考え方
** テストで与える入力はランダム大量発生するべし
** イメージ: 値(インスタンス)でテストするんじゃなく、型(クラス)でテストする感じ

:質疑応答(一回目):
(時間が余っているようなのでいったんここで休憩をかねて質疑応答)
* Q. mockは?
** A. ないけどいい提案
* Q. どの型でもOK?
** A. プログラマが対応。ライブラリは基本のみ
* Q. ランダムなら確実にバグが見つかるとはいえない
** A. そのとおり。統計の棄却率のような感覚。
** 製造業とかでの考えの輸入
* Q. 最初に極端そうなのをやっちゃうといい
** A. いいアイデア。
** one_of。arrayからランダムに選ぶ。境界値
** MyInteger
** 境界値与えるのは簡単
(ここで逆に時間がおしてきた)

:Formal Method:
* Formal Method
** 日本語としては「形式的手法」, 意味としては「数理的手法」
* 要求仕様をプログラミング言語ではなく数学として書く
* Formal MethodでOKならバグは「絶対に」ない。
* テストなしで要求仕様満たしを自動確認
** クリティカルシステム(原発など)ではテストできないから。
* 現在Ruby用のFormal Methodsはない。
** ''CやJavaにはあるから誰かhackして。''
* プログラムと要求仕様を数学的な何かに翻訳する。テストとは根本的に考え方が違う
** rubyでは実装されてないから、あくまで教養としてのお話

:デモ(RSpecとRushCheck):
(BGMはクリスマスソング)
* specコマンドで実行
** 緑の文字なら成功、赤の文字なら失敗
* コンテキストを指定できる
* gem install rspecでインストール完了
* 例: 某社携帯でsprintfの関係で「%s」で強制再起動

:質疑応答:
* Q. pythonでは乱数のseedを与えられる。pythonのランダムライブラリを入れられないかな
* checkかけてきた履歴に関係する場合は?
* 乱数の与え方の制限など
** A. 現状じゃできない。いままで使ったものをスタックに入れとけばいけそう。
** 今後の開発に使えそう
* Q. formal methodに懐疑的。仕様を厳密に決めないと意味がない。部分的適応はできる?
** A. 巨大ソフトウェアの数学的仕様を決めるのは大変
** 通信やwebのような、プロトコルだけ決めたらあとはできるとかなら簡単
** 実際通信プロトコルへのformal methodは成功してる
** 私もあれが万能薬だとは思っていない
* Q. RSpecとRushCheckの組み合わせは?
* エラーが起こったときの値を保存して、それに応じたテストコードを自動生成してくれるとラク
** A. 考えてなかった
** 「後半の質問は疲れてよくわかんないです」

:感想:
* プレゼンテーションの合間合間に出てくる写真がすばらしい…。
* 今回の発表にかけるいけがみさんの熱い情熱がひしひしと伝わってきます。

!!!「Rubyクイズ(第2回)」by cuzic さん(レポート:一歩)
:発表者自己紹介:
*名前:cuzic(きゅーじっく)
*趣味:プログラミング,政治,経済,世界史
*他:親指シフトキーボードの人
*企画について:
**前回も説明したが、同名のRubyでパズル的な問題を解くものとは別
**Ruby中級者を対象。上級者になる時にハマりやすいポイントを判りやすい選択問題で学ぶ企画
*今回は色々パワーアップ!:
**(オンライン)'''「へぇ」ボタン準備'''
***localhostにてrailsで作成→会場の皆は発表マシンにネットアクセスができない。演者以外誰も押せない→意味が無い。
***(感想:何処かのWebサイトで公開してそこと繋げる形では?)
**'''効果音準備'''
***きたきたきたーっ(という音楽有)
***IE上でリンククリックで音楽再生→IEを閉じると鳴らない→プレゼンツールの背景で鳴らせない→意味が無い。(しまった俺 by cuzicさん)

:設問:
*第一問:文字列について
**B班代表が正答?
*第二問:文字列リテラルについて
**次の出力は?
p <<EOD % "Ruby"
"I love #{%{#{%q{%s}}}}"
EOD
*別解:『“』がRuby文法エラーなので通らない(プレゼンツールのフォント都合で、ダブルクォーテーションは開閉で『“"』だった)←冗句
**C班代表がエ)(\n無し)と誤答?
**訂正:そもそも問題が間違っていた。(^^;
p <<EOD % "Ruby"
I love #{%{#{%q{%s}}}}
EOD
であるべき。
*第三問:パースエラーないし実行時エラー
**D班代表が正答?
*第四問:正しい出力の組み合わせ
**戌→亥と年が変わるに合せ、dog→pig置換問題
**E班代表が正答
*第5問:sprintfの書式問題
**F班代表が正答?

:感想:
*第1回に続き、
**パッと見判りきってるのに、よく読むと判らない。
**パッと見判らないのに、よく読むと判る。
*という絶妙加減で大変楽しかったです。誰もが口ごもって答えなかったり、疑問形で答えたりしてました。
*自己申告で、全問正解した人に挙手して貰ったが、1名しかおらず。
*途中「今irbで実際やってみました」という答えに会場が沸く。クイズの崩壊。
*第5問あたりで「え、時間おしてるの? 勘違いしてた」とかなってダッシュで終了。
*実は使われなかった第6〜8問が存在。(時間の狂いは)「想定通り」by cuzicさん

!!! 「scim-rubyの紹介」by 中本さん(レポート: Yuyaさん)

:感想:
中本さんによるscim-rubyの発表を聞くのは、ESPer2006に続き2回目ですが、今回もまた
発表のリズムが良く、最後まで楽しく聞くことができました。
会場の反応も上々で、「便利そう」「使ってみたいかも」「Windows版はー?」など、様々な反応がありました。
個人的にもWindows版は、是非ともお願いしたいところです。

:scim-rubyとは?:

「1行のRubyコードが、デスクトップ上の好きな場所で実行できる」という、すごいソフトウェアです。

かな漢字変換システムにより「ひらがな」を「漢字」に変換する代わりに、
「Rubyのコード」を「そのコードの実行結果」に変換してしまうという、面白いコンセプトのソフトウェアです。
漢字が入力できる場所であれば、コンソール、エディタ、Webブラウザ、ワードプロセッサなど、
アプリケーションの種類を問わず利用できるのが特徴です。

:scim-rubyの仕組み・・・その前に:

scim-rubyの仕組みについての説明の前に、通常のかな漢字変換システムの説明がありました。

* まずキーボードで「watashi」と入力すると
* それがインプットメソッドにより「わたし」に変換され
* さらにかな漢字変換エンジンにより「私」に変換され
* 最終的に、アプリケーションに「私」が入力される

という流れになります。

:scim-rubyの仕組み:

かな漢字変換システムの仕組みをRubyに置き換えてみると、

* まずキーボードで「1+2+3」と入力すると
* それがscim-ruby(インプットメソッド)により「1+2+3」に変換され
* さらにRuby(かな漢字変換エンジン)により「6」に変換され
* 最終的に、アプリケーションに「6」が入力される

といった感じになります。

:デモンストレーション:

百聞は一見にしかず、ということで行われたデモンストレーションは、scim-rubyの強力さ、
ひいてはRubyの強力さをも感じさせる、とてもわかりやすく、楽しい内容でした。

その一例をご紹介します。

* 四則演算
** 1+2+3 #=> "6"
* 文字列演算
** "str"*3 #=> "strstrstr"
* 外部プログラム
** `ls -l` #=> lsの実行結果
* 変数の利用
** a=10
** a #=> "10"
* 現在日の挿入
** Date.today #=> "2006/12/16"

:デモンストレーション2:

scim-rubyには「to_scimruby」というメソッドを使用した拡張機能があります。
Object#to_scimrubyはto_sメソッドをそのまま呼ぶようになっていますが、このメソッドを再定義
することで、独自に拡張することが可能です。
標準でArrayは再定義されているため、変換結果には大括弧は表示されません。

* Array
** [1,2,3] #=> "1,2,3"

また、TrueClassクラス、FalseClassクラスにto_scimrubyメソッドを再定義して音を鳴らすという、
とても興味深いデモンストレーションもありました。

* 音を鳴らす例
** true #=> trueを意味する音が鳴る
** false #=> falseを意味する音が鳴る
** 1+2==3 #=> trueを意味する音が鳴る

その他にも、履歴機能、クリップボード機能などのデモンストレーションもありました。

:質問:

私を含め、数名の方が質問をしましたが、どれもFAQでした。
資料にあるFAQの豊富さにびっくりです。

* Q. Windowsでも使えますか?
** A. 使えません。
* Q. exitするとどうなりますか?
** A. おかしくなります。危険な操作はしないでください。
* Q. 例外が発生するとどうなりますか?
** A. 例外ウィンドウが表示されます。(変換候補一覧のようなミニウィンドウ)

!!!「オープンソースは愛だ」by かずひこさん(レポート:あゆ)

:オープンソースって素敵よね:
*オープンソースには10項目からなる定義がある
*Ruby アプリケーションのオープンソースが少ないのは悲しいね
*最近では業務アプリも踏まえてオープンソースが増えてきている

:オープンソースで見つけるできる君:
*オープンソースはよい人材市場。
*オープンソースはよい教材。
*オープンソースはよい先生。

:まとめ:
*オープンソースは顧客への愛
*オープンソースは仕事への愛
*オープンソースは作品への愛
*I hope someday you'll join us.

:おまけ:
*オープンカーを嫁にもらってくれる人、募集中。

:感想:
長い間、初級者レッスンで活躍していただいたかずひこさんの、締めくくりとしての発表。個人的にはまとめに書いた、オープンソースは顧客への愛であり、仕事への愛であり、作品への愛であるという部分が一番ぐっときました。初心者にやさしく、オープンソースに触れる導入口として、Ruby勉強会が存在できればと思いました。

!! コメント
*2008-08-02 (Sat) 05:17:49 znpefxtjj : QJcwKfwOklLAkGcutMp
{{comment}}

!! 反応リンク集
//{{trackback}}

* http://mono.kmc.gr.jp/~yhara/d/?date=20061224#p01
* http://d.hatena.ne.jp/treeham/20061218#1166452046
* http://fullmetal.dip.jp/pukiwiki/index.php?%E6%97%A5%E8%A8%98%2F2006-12-16
* trackback :[[(Inemuri nezumi diary)|http://madscientist.jp/~ikegami/diary/20061216.html#p01]](2007-01-16 (Tue) 05:01:00)
""発表は、(1)RSpec紹介(2)RushCheck紹介(3)FormalMethod紹介の3つからなっておりますが、このうちFormalMethodについて詳しく述べられなかったのが残念でした。FormalMethodについては渋谷さんのWikiや、それの基となった文献「田辺良則, 高井利憲, 高橋孝一: 抽象化を用いた検証ツールの調査.コンピュータソフトウェアVol.22 No..

* http://study-meeting.seesaa.net/article/29890614.html
* trackback : [[[日記] Ruby勉強会第13回 (プログラミングは素晴らしい)|http://d.hatena.ne.jp/cuzic/20061220]] (2006-12-20 (Wed) 09:43:51)
"" 先日、Ruby勉強会第13回に参加してきました。 一応発表させていただく時間を持たせてもらって、Ruby クイズというタイトルで、多肢選択式の問題を5問ほどといてもらうという企画を行いました。 それで発表資料のアップロードをしようと思っていたら、いつの間にやら誰か

* http://enbug.tdiary.net/20061218.html#p01
* trackback : [[[Ruby]第13回 Ruby勉強会@関西に今回も参加しました (はこべにっき#)|http://d.hatena.ne.jp/hakobe932/20061218/1166460236]] (2006-12-19 (Tue) 01:45:24)
"" いってきました。今回の勉強会から、かずひこさんはしばらくは参加できなくなるそうです。今回のかずひこさんのプレゼンは、なんというか、BGMもあいまって切なさこみ上げる感じ。Imagine重要。 あと、実はRubyは普段あまり書かないんだけれど(バレバレ)、勉強会の演習のと

* trackback : [[【Ruby関西】FormalMethod、オープンソースを軸としたエンジニア人生 (プログラマの思索)|http://forza.cocolog-nifty.com/blog/2006/12/rubyformalmetho_aeee.html]] (2006-12-18 (Mon) 23:23:08)
""土曜にRuby関西へ行ってきた。 今回も50人以上集まり、懇親会会場までの乗り物

* http://www.daemonfreaks.com/blog/200612180115.html
* http://d.hatena.ne.jp/kfuruhata/20061218#1166405769
* trackback : [[ Ruby勉強会@関西-13 (サイログ。MiyakoとかRubyとかなんとか)|http://d.hatena.ne.jp/cyross/20061217#p1]] (2006-12-17 (Sun) 18:31:45)
"" 行ってきました。以下、感想などをツラツラと。 ・ちょっぴり遅刻 ・七条駅を出たらプリンセスラインバスが鴨川の橋渡っててダッシュ ・初心者レッスン。define_methodにはびっくり ・インスタンス変数は@、クラス変数には@@を付けよう ・デバグ。Formal Methodsすごそう。

* trackback : [[[Ruby] 第13回Ruby勉強会@関西 (趣味的にっき)|http://d.hatena.ne.jp/ha-tan/20061216/1166243628]] (2006-12-17 (Sun) 10:43:16)
"" ちょっと遅刻しました。微妙に迷った(^^; 右上の写真は京都女子大学のバス停のところにあったサンタです。 Ruby初級者レッスン by okkezさん、ナツマさん フレッシュな雰囲気。 Taiyakiが焼き立てかどうか? privateのいいこと。内部的なデータは外から呼ばれたくない。 pro

* trackback : [[Ruby 勉強会@関西-13 (ふぇみにん日記)|http://kazuhiko.tdiary.net/20061216.html#p01]] (2006-12-17 (Sun) 10:21:09)
""ビジネス面でのオープンソースの利用や活用については盛り上がってきている一方で、オープンソースの若い作り手が日本ではあまり増えていなさそうなことをとても憂慮しています。だから、Ruby 勉強会@関西とお別れのプレゼンとして、今回こういうテーマでお話ししました。
"""I hope someday you'll join us." ということでお待ちしています。:)

* http://znz.s1.xrea.com/t/?date=20061216
* trackback : [[[Ruby]Ruby勉強会@関西-13 (にゃかもとの日記)|http://bd.tank.jp/diary/20061217.html#p01]] (2006-12-17 (Sun) 06:25:47)
""
""Ruby勉強会@関西-13に参加してきました。そして、scim-rubyの発表しました。以下、イベントに参加しての感想。
""
""
""  「Ruby 初級者向けレッスン」
""      
""        自分は初級者ではないけれど、上級者でもないので一部勉強になったり、一部退屈だったり。
""        演習では書き始めるのに時間がかかった。(問題を理解するのが難しかった)
""      
""  「Rub..

* trackback : [[[Ruby]Ruby勉強会@関西-13参加しました (Scrapcode@はてなダイアリー)|http://d.hatena.ne.jp/khashi/20061217/1166295250]] (2006-12-17 (Sun) 03:54:38)
"" 12月16日、京都女子大で開催されたRuby勉強会@関西-13に参加してきました。 今日も遅刻…。京阪七条に着いた13時5分で既に5分遅刻なのに、そこから更にマクドナルドでお昼ご飯を食べてました(^^;。 「Rubyクイズ」のsprintfの問題に答えることができたけど、これはRubyじゃ

* trackback : [[ (PRoxy Diary)|http://mono.kmc.gr.jp/~oxy/d/?date=20061217]] (2006-12-17 (Sun) 03:01:41)
""
"" [イベント] 第13回関西Ruby勉強会ICPCアジア予選が終わった後しばらく燃え尽き症候群になっていましたが、
""それももう回復してきたので活動再開といこうと思います。
""というわけでリハビリな気分で今日は関西Ruby勉強会に参加してきました。
""印象に残ったものをざっと。
""・「Ruby で書いたプログラムのデバグ技術」by池上さん
""RSpecは発表中ではtest/unitのassertがsh..

* trackback : [[[プログラミング]ruby勉強会@関西への参加 (弱小プログラマーの日記)|http://d.hatena.ne.jp/m_konishi1981/20061216/1166279938]] (2006-12-17 (Sun) 01:13:46)
"" ruby勉強会@関西が京都で行われるということで、 ちょうど大阪に出張してるので、参加してきました。 rubyは完全に初心者ですが、とても楽しめました。 詳しくは、rubyグループでの日記に書きます。 http://rubyist.g.hatena.ne.jp/m_konishi1981

* trackback : [[[Ruby]Ruby勉強会@関西13に参加してきました (もち)|http://d.hatena.ne.jp/omochist/20061216/rubykws13]] (2006-12-17 (Sun) 00:28:33)
"" そしてそのメモをはてな記法で整形,追記 本当に気になったところだけメモしてるので,偏ってます. 初級者レッスン おっきーさんとなつまさん 今回から(だけ?)かずひこさん&こうざいさんじゃなくて,okkezさん&なつまさんコンビ. 宇宙船演算子 <=> これ? ぽいな

* http://rubyist.g.hatena.ne.jp/m_konishi1981/20061216
* http://bingobingobingo.blog49.fc2.com/blog-entry-243.html

// !! 会場設備とノートPCの持ち込みについて
// * 会場の教室には電源とLANコンセントが完備しています。
// * LANのDHCPは登録しないと使えません。
// * LANケーブルは、忘れず持参してください。
// ** 自分のノートPCをネット接続したい人は, konamiアットkyoto-wuドットacドットjp まで 氏名,PCのMACアドレス,OSをメールで知らせてください。(木曜日夜まで)
// *  勉強会の当日にはネット接続が必須というわけではありません。Ruby がインストールされたPCさえあればたいてい大丈夫です。
// * 当日,ファイルの配布をご希望の方は, USB メモリをご持参ください。
// * 第 9 回までの同大学での会場と違い、備え付けのデスクトップPCはありません。
//
// !! 名札について
// * 初参加の方々もいっらっしゃいますので、名札をお持ちの方は是非持参してください。もちろん名前を大きく書いて。通称もあり。
//
//!! 帰りのバス
//[[プリンセスライン京都駅前行(土曜日ダイヤ)|http://www.css-c.com/princessline/index4.html#djr]]
//
// !! 参加登録
//
// 参加を希望される方は、以下の手順でお願いします。
//
// # [[Rubyist SNS|http://jp.rubyist.net/sns/]] にアカウントを作成してログインする。
// # 「[[Ruby関西|http://jp.rubyist.net/sns/?m=pc&a=page_c_home&target_c_commu_id=1]]」というコミュニティに参加する。
// # 「Ruby関西」コミュニティに、「[[Ruby勉強会@関西-13|http://jp.rubyist.net/sns/?a=page_c_event_detail&target_c_commu_topic_id=29]]」と「[[Ruby勉強会@関西-13 懇親会|http://jp.rubyist.net/sns/?a=page_c_event_detail&target_c_commu_topic_id=30]]」という二つのイベントがあるので、それぞれに参加登録をする('''勉強会と懇親会は別イベントでの登録です''')。懇親会に参加される方は、懇親会会場への直通バスを利用するかどうかの返事も書いてください。
//
// '''Rubyist SNS への参加や Ruby 関西コミュニティへの参加だけではイベント登録は完了していませんのでご注意ください。'''