10/4(土)「とちぎテストの会議03」に参加してきました。

通称「とてか」で知られる「とちぎテストの会議」に参加してきました。
とてか自体は3回目、自分は初参加です。

宇都宮なので、お昼は「みんみん」本店で焼き・水・揚げ餃子。
f:id:toshimana:20141004113726j:plain

夜も帰る前に「宇都宮餃子館」で健太餃子とチーズ餃子。
f:id:toshimana:20141004211641j:plain

拍手システム

発表時間の管理の仕方がとても素晴らしかったです。
プロジェクタを使って、講演時間のタイマーを全員に見えるようにしてあって、
タイマーが0になると、(講演の途中でも)観客が拍手して、強制終了するシステムでした。

このシステムは「講演が打ち切られても、嫌な雰囲気にならない」ところが素晴らしいと思いました。
進行時間はしっかり守られるし、拍手によって終わった感が出てくる、
他で見たことないようなやり方でした。

基調講演(湯本剛さん)「「いかす!」のために大事だと思う4つのこと」

スライドはこちら

「ゆもつよメソッド」で知られる湯本さんのお話。
自身で培ったテスト分析技法をさらに研究するために大学に入るとか、
その生き様だけで十分に「いかす!」人。

ちなみに、とても面白いTシャツを着てました。
あなたがそんなことを言ったら日本に「テストができる」人はほとんど居ないでしょう…

招待講演(中島滋さん)「忍者式テストをやってみた」

[20141007]スライド追加。


栃木の@m_sekiさん発祥の「忍者式テスト」の実践事例紹介。

忍者式テストは@nemorineさんが調べてくれています。

話を伺って、手動テストの有り方について再考させられました。
これまでは、以下のように「手動テストは自動テストの下位互換」に近いものだと考えていました。

  • あらゆる手動テストは自動化可能である。
  • 手動テストは自動テストに比べて初期コストは安い
  • ランニングコストは自動テストの方が遥かに安い

しかし、テストを[Checking]と[Testing]の観点で見ると、
そもそも得意分野が異なるのだということが分かりました。

  • 自動テストは既知の不具合がないかを検証する[Checking]を得意とする
  • 手動テストは未知の不具合を発見する[Testing]を得意とする

今はざっくりとした理解ですが、この辺りは整理できると面白いかも。
「探索的テスト」とかは手動でやるものなので、今更か、って感じですけど。


あと、スライド内で自分が困っているGUI設計のデザインパターンについて記載してありました。
全部はメモれなかったので、スライドが公開されると嬉しいですね。

「いかすツイートパネルディスカッション aka いかついぱねる」

ツイートから議論したい話題を取り上げて全員で議論する、これまた他で見ない試みで面白かったです。
回帰テストと殺虫剤のパラドックス」の話が面白かったです。

そして、@goyokiさん…お疲れ様です…

ワールドカフェ「とてかタイマーについて」

講演時間を管理する「とてかタイマー」を2日前に改修したけど、動作が不安で機能も付け加えたい。じゃあ前日はどうしよう、というテーマでグループに分かれて議論しました。
「機能追加の前に、最低限で動くものを用意しよう」とか「当日を想定したリハーサルは必ずやろう」とかが実際のケースでも使える対策ですね。

まとめ

仙台から栃木なら日帰りでも十分行き来できるので、
ちょっとした小旅行気分で、けど新しい気付きも沢山得られて、
とても楽しい一日になりました。
とてか自体は3回目ですが、やるたびに進化しているとのことなので、
次回も楽しみな勉強会でした。

Rでtmパッケージがインストールできなかった時の対処法

最近は「入門 機械学習」を読んでます。

入門 機械学習

入門 機械学習

その中で、text miningのパッケージであるtmのインストールで躓いたので、解決策をメモ

問題1

インストールできなかった原因は、tmパッケージで要求するRのバージョンが、インストールされていたRのバージョンよりも高かったことでした。

  • tmパッケージが要求するRのバージョン:≧3.1.0
  • インストールされていたRのバージョン:3.0.2

ubuntuの標準aptリポジトリを使うと、3.0.2しかインストールできなかったので、どうにかしてRのバージョンを3.1.0以上にする必要がありました。

解決1

参考にしたWebページ:
Ubuntu で R バージョン 3.1.0 のインストール

ほぼそのまま使わせていただきました。

export RELEASE=`lsb_release -sc`
sudo add-apt-repository --yes "deb http://cran.md.tsukuba.ac.jp/bin/linux/ubuntu ${RELEASE}/" 

これで、最新のバージョンのR用リポジトリが登録できました。

問題2

apt-get updateにて、GPGエラーが発生。
GPGエラーって何だろうと調べてみると、
「公開鍵がないため、登録したリポジトリが利用できない」ってことらしいです。

解決2

参考にしたWebページ:
Linux: apt-get 時の GPG error (NO_PUBKEY) の解決例

これもほぼそのまま使わせて頂きました。

gpg --keyserver subkeys.pgp.net --recv-keys 51716619E084DAB9
gpg -a --export 51716619E084DAB9 | sudo apt-key add -

1行目で鍵サーバから公開鍵を取得、
2行目でaptの公開鍵リストに追加、という処理、のはず。

おわりに

最後に以下のコマンドを実行して、完了。

sudo apt-get update
sudo apt-get upgrade
R

Rコマンド実行時に出てくるバージョンが3.1.0以上になっていればOK。

R version 3.1.1 (2014-07-10) -- "Sock it to Me"
Copyright (C) 2014 The R Foundation for Statistical Computing
Platform: x86_64-pc-linux-gnu (64-bit)

これで、サンプルが動かせる!はず!

Microsoft Azure Machine Learningのサンプルを動かしてみる。「5.Predict over new data」

Microsoft Azure Machine Learningのサンプルを動かしてみる。」の5回です。

Azure Machine Learningのサンプルを動かしていきます。
[Create your first experiment in Azure Machine Learning Studio]
http://azure.microsoft.com/ja-jp/documentation/articles/machine-learning-create-experiment/#step-5-predict-over-new-data

第1回、2回、3回、4回はこちら。

  • Microsoft Azure Machine Learningのサンプルを動かしてみる。「1.Get Data」

http://toshimana.hatenablog.com/entry/2014/08/09/005803

  • Microsoft Azure Machine Learningのサンプルを動かしてみる。「2.Pre-process data」

http://toshimana.hatenablog.com/entry/2014/08/11/113416

  • Microsoft Azure Machine Learningのサンプルを動かしてみる。「3.Define, extract and enrich features」

http://toshimana.hatenablog.com/entry/2014/08/12/185342

  • Microsoft Azure Machine Learningのサンプルを動かしてみる。「4.Choose and apply a learning algorithm」

前半http://toshimana.hatenablog.com/entry/2014/08/13/202847
後半http://toshimana.hatenablog.com/entry/2014/08/14/164432

1.点数化の準備をする。

1-1.「Score Model」を用意します。

f:id:toshimana:20140814181638j:plain

1-2.「Train Model」の"Trained model(ブロック下部の小丸)"と「Score Model」の"Trained model(ブロック上部左側の小丸)"を接続します。

f:id:toshimana:20140814182011j:plain

1-3.「Split」の"Results Dataset1(ボックス下部左側の小丸)"と「Score Model」の"Dataset(ブロック上部右側の小丸)"を接続します。

f:id:toshimana:20140814182319j:plain

2.点数化を行う。

2-1.処理を実行します。

f:id:toshimana:20140814210304j:plain

3.評価する。

3-1.「Evaluate Model」を用意します。

f:id:toshimana:20140814204110j:plain

3-2.「Score Model」の"Scored dataset(ブロック下部の小丸)"と「Evaluate Model」の"Scored dataset(ブロック上部左側の小丸)"を接続します。

f:id:toshimana:20140814205017j:plain

3-3.処理を実行します。

f:id:toshimana:20140814205503j:plain

終わりに

一通り、サンプルの手順を追いましたが、中身については基本触れませんでした。*1
今は平行して本を読んで勉強している最中なので、機械学習に対する理解度が増したら、補足していきたいと考えています。

パターン認識と機械学習 上

パターン認識と機械学習 上

*1:機械学習が分からないから仕方がないね!

Microsoft Azure Machine Learningのサンプルを動かしてみる。「4.Choose and apply a learning algorithm」後半

Microsoft Azure Machine Learningのサンプルを動かしてみる。」の4回の後半です。

Azure Machine Learningのサンプルを動かしていきます。
[Create your first experiment in Azure Machine Learning Studio]
http://azure.microsoft.com/ja-jp/documentation/articles/machine-learning-create-experiment/#step-4-choose-and-apply-a-learning-algorithm

第1回、2回、3回、4回はこちら。

  • Microsoft Azure Machine Learningのサンプルを動かしてみる。「1.Get Data」

http://toshimana.hatenablog.com/entry/2014/08/09/005803

  • Microsoft Azure Machine Learningのサンプルを動かしてみる。「2.Pre-process data」

http://toshimana.hatenablog.com/entry/2014/08/11/113416

  • Microsoft Azure Machine Learningのサンプルを動かしてみる。「3.Define, extract and enrich features」

http://toshimana.hatenablog.com/entry/2014/08/12/185342

  • Microsoft Azure Machine Learningのサンプルを動かしてみる。「4.Choose and apply a learning algorithm」前半

http://toshimana.hatenablog.com/entry/2014/08/13/202847

1.学習アルゴリズムのパラメータを調整する。

1-1.「Two-Class Boosted Decision Tree」を選択します。

f:id:toshimana:20140814154247j:plain

1-2.「Maximum number of leaves per tree」や「Number of trees constructe」、「Minimum number of training instances required to form a leaf parameter」の値を調整します。

f:id:toshimana:20140814154756j:plain

1-3.処理を実行します。

f:id:toshimana:20140813201123j:plain

2.訓練モデルを用意します。

2-1.「Train Model」を用意します。

f:id:toshimana:20140814160128j:plain

2-2.「Two-Class Boosted Decision Tree」と「Train Model」の"Untrained model(ボックス上部左側の小丸)"を接続します。

f:id:toshimana:20140814160418j:plain

2-3.「Split」の"Results Dataset1(ボックス下部左側の小丸)"と「Train Model」の"Dataset(ボックス上部右側の小丸)"を接続します。

f:id:toshimana:20140814161243j:plain

2-4.「Cross Validate Model」の「column selector」を表示します。

f:id:toshimana:20140814181048j:plain

2-5."Include", "column names"と設定し,入力項に"price"を入力します。

f:id:toshimana:20140813200858j:plain

2-6.右下のチェックボタンを押します。

f:id:toshimana:20140813201011j:plain

2-7.処理を実行します。

f:id:toshimana:20140814181321j:plain

終わりに

第4回は前後半に分けた記事になっています。*1

次回「サンプルを動かしてみる。」は最後になります。

*1:前半記事を書いた時点で、後半部分が残っていることに気づいていませんでした。

Microsoft Azure Machine Learningのサンプルを動かしてみる。「4.Choose and apply a learning algorithm」前半

この連載ももう終盤ですね。
引き続き、Azure Machine Learningのサンプルを動かしていきます。
[Create your first experiment in Azure Machine Learning Studio]
http://azure.microsoft.com/ja-jp/documentation/articles/machine-learning-create-experiment/#step-4-choose-and-apply-a-learning-algorithm

第1回、2回、3回はこちら。

  • Microsoft Azure Machine Learningのサンプルを動かしてみる。「1.Get Data」

http://toshimana.hatenablog.com/entry/2014/08/09/005803

  • Microsoft Azure Machine Learningのサンプルを動かしてみる。「2.Pre-process data」

http://toshimana.hatenablog.com/entry/2014/08/11/113416

  • Microsoft Azure Machine Learningのサンプルを動かしてみる。「3.Define, extract and enrich features」

http://toshimana.hatenablog.com/entry/2014/08/12/185342


今回は機会学習の学習アルゴリズムを設定します。
いよいよ何をしているのか分からなくなってます。
が、サンプルを動作させる手順だけは整理しておきます*1

1.データを分割する。

1-1.「Split」を用意します。

f:id:toshimana:20140813183922j:plain

1-2.末尾に接続されている「Metadata Editor」と「Split」を接続します。

f:id:toshimana:20140813184105j:plain

1-3.「Properties」-「Split」-「Fraction of rows in the first output dataset」を0.75に設定します。

f:id:toshimana:20140813193918j:plain

2.学習アルゴリズムを選択する。

2-1.「Two-Class Boosted Decision Tree」を用意します。

このブロックは「Split」と接続しません。ここでは「Split」の隣に配置しています。
f:id:toshimana:20140813194325j:plain

3.学習アルゴリズムを評価する。

3-1.「Cross Validate Model」を用意します。

f:id:toshimana:20140813194824j:plain

3-2.「Two-Class Boosted Decision Tree」と「Cross Validate Model」の"Untrained model(ボックス上部左側の小丸)"を接続します。

f:id:toshimana:20140813195406j:plain

3-3.「Split」の"Results Dataset1(ボックス下部左側の小丸)"と「Cross Validate Model」の"Dataset(ボックス上部右側の小丸)"を接続します。

f:id:toshimana:20140813200023j:plain

3-4.「Cross Validate Model」の「column selector」を表示します。

f:id:toshimana:20140813200729j:plain

3-5."Include", "column names"と設定し,入力項に"price"を入力します。

f:id:toshimana:20140813200858j:plain

3-6.右下のチェックボタンを押します。

f:id:toshimana:20140813201011j:plain

4.処理を実行する。

4-1.画面下の「Run」ボタンを押します。

f:id:toshimana:20140813201123j:plain

4-2.処理が実施されます。

f:id:toshimana:20140813201255j:plain

4-3.処理が終了するまで待ちます。

処理が終了すると、画面右上に「Finished running」が表示されます。
f:id:toshimana:20140813201349j:plain

5.結果を確認する。

「Cross Validate Model」の"Scored Result(ボックス下部左側の小丸)"

f:id:toshimana:20140813201924j:plain

「Cross Validate Model」の"Evaluation results by fold(ボックス下部右側の小丸)"

f:id:toshimana:20140813201931j:plain

終わりに

一通りサンプル動作の手順をまとめた後に、
やっていることを整理したいと思います。

*1:機械学習が分かる人がサンプルを試してみて、内容をまとめると良いと思います

プログラマのコードレビューと学生マジシャンの手順見せの関連について

ソニックガーデンさんの「コードレビュー7つの秘訣」と自分の大学時代のマジックサークルにおける「手順見せ」のポイントについて、私が感じた関連について書いていきます。

はじめに

8/11(月)に受けたSonicGarden Studyを聞いて思ったことを書いてあります。

「いつまでクソコードを書き続けるの? 〜出来るプログラマだけが知っているコードレビュー7つの秘訣〜 - SonicGarden Study #11」
http://sonicgarden.doorkeeper.jp/events/13229?utm_campaign=event_13229_10033&utm_medium=email&utm_source=registered_message

以下、上記受講後に書いた記事です。
「2014/8/11(月) 「SonicGarden Study #11いつまでクソコードを書き続けるの? 〜出来るプログラマだけが知っているコードレビュー7つの秘訣〜」に参加しました。」
http://toshimana.hatenablog.com/entry/2014/08/11/234145

最初は「へぇーそうなんだ」と思ってみていましたが、話が進んでいくと、何か昔似たことをやったことがあるな…と既視感がありました。
そう、自分が大学で所属していたマジックサークルの「手順見せ」におけるポイントと「コードレビュー7つの秘訣」がそっくりだったんだよ!!*1

というわけで、あまり関係がなさそうな、プログラマのコードレビューと学生マジシャンの手順見せについて、ソニックガーデンさんの「コードレビュー7つの秘訣」をベースに関連性をまとめてみました。

手順見せとは?

ここでは、自分が所属していたマジックサークルの手順見せについて簡単に説明します。
ここでの手順見せとは、「年に1度の発表会のために、発表会演者が他の部員に自分の手順を披露して、意見をもらうこと」を指します。
発表会は12月ですが、そのために1年かけて準備を行います。演者は初期は2週に一度手順見せを行いますが、8月以降は1週に一度手順見せを行います。

「コードレビュー7つの秘訣」

ソニックガーデンさんの「コードレビュー7つの秘訣」は、以下になります。

  1. レビューの観点を明確にすること
  2. 我が身に返ることを恐れずに指摘すること
  3. 何故悪いコードなのかを論理的に説明すること
  4. 良いコードについて共通認識を持つこと
  5. 小さい単位でレビューを繰り返すこと
  6. 指摘は素直な気持ちで受け入れること
  7. 指摘は人格否定でないことを理解すること

「コードレビュー7つの秘訣」とマジシャンの手順見せの関係

1.レビューの観点を明確にすること

手順見せの時期によって観点が変わります。序盤は演技の方向性について、中盤は演技構成について、終盤は細かい技術や表現についてなどについて指摘します。
おそらく、納品がない開発をしているソニックガーデンさんはあまり細かい指摘はしないと思いますが、手順見せは納品相当である発表会の時点で最高の演技を届けるように指導することから、細かい指摘を行うという差はあるかと思います。

2.我が身に返ることを恐れずに指摘すること

マジックの舞台は"理想を表現するところ"なので、指摘する側も自分ができないような指摘をする場合があります。その場合は、指摘して終わりではなく、どうすればその理想に近づけるかをしっかり議論します。

3.何故悪いコードなのかを論理的に説明すること

マジックの舞台としてやってはいけないことは共通認識として部員みんなが持っています。なので、「やってはいけない事に抵触している」という指摘は、受ける側も素直に受け止めます。

4.良いコードについて共通認識を持つこと

みんな過去に発表会に出た人の演技を見ているので、憧れるような演技について共通認識ができています。指摘をする際にも、「xxがやった演技を参考にするといい」という指摘はよく出てきます。

5.小さい単位でレビューを繰り返すこと

1週間に一度、部員全体に手順見せを行います。しかし、それとは別に、より小さい手順見せを別途行います。同じ種類のマジックをする人たちで師弟関係があり、発表会に出る予定の弟子は、部員全体の手順見せの前に師匠に手順見せを行います。そうすることで、弟子たちはフィードバックを多く行い、短い期間でマジシャンらしい技術、考え方を身に着けることができます。

6.指摘は素直な気持ちで受け入れること

技術的な指摘については、素直に指摘を受け入れて練習する人の方が伸びる傾向がありました。ただし、感性的な指摘は受けた側が納得できないことも多いです。ここは「コードレビュー7つの秘訣」とは異なり、学生マジックは"変わったことが好まれる"ことから、感性的な部分は我を通すことが望ましいと考えられています。マジシャンにおける"感性的な指摘"は、プログラマにおける"宗教戦争"に相当するかと思います。

7.指摘は人格否定でないことを理解すること

そもそも、指摘として人格否定をすることがほぼなかったように思います。指摘も技術的に具体的なことが多いので、指摘を受けた側が指摘を人格の否定に捉えることもあまりないと思います。手順を良くすることが目的であることを全員で共有できていれば、「人格を否定しても良いものはできない」ことが分かるかと思います。

おわりに

コードレビューのような文化はプログラマ以外の業界でも多く行われているはずです。
8/7(木)にソニックガーデン倉貫さんが仙台で「納品のない受諾開発」について話してくれました。その中で、「絵描きが成長する際も、書いた絵を師匠に見てもらい、良い絵の描き方を学んでいる」という内容の話をしていました。
プログラマに限らず、良いレビューというのは、あらゆるクリエイティブな業界で必要になるものと感じました。
また、ソースレビューがより良い方向に発展するためには、他業種のレビューから発見できそうだと感じています。
いろんなレビュー文化を調べてみると面白いかもしれませんね。

*1:な、なんだってー!!

Microsoft Azure Machine Learningのサンプルを動かしてみる。「3.Define, extract and enrich features」

Azure Machine Learningのサンプルを動かしていきます。
[Create your first experiment in Azure Machine Learning Studio]
http://azure.microsoft.com/ja-jp/documentation/articles/machine-learning-create-experiment/#step-3-define-extract-and-enrich-features

第1回、2回はこちら。

  • Microsoft Azure Machine Learningのサンプルを動かしてみる。「1.Get Data」

http://toshimana.hatenablog.com/entry/2014/08/09/005803

  • Microsoft Azure Machine Learningのサンプルを動かしてみる。「2.Pre-process data」

http://toshimana.hatenablog.com/entry/2014/08/11/113416


ちなみに、今回からは画像加工ソフトに[Skitch]を使っています。*1

1.「Project Columns」を用意する。

1-1.新しい「Project Columns」を用意します。

f:id:toshimana:20140812185146j:plain

1-2.「Missing Values Scrubber」と「Project Columns」を接続します。

f:id:toshimana:20140812100050j:plain

2.データを選別する。

2-1.「Project Columns」の「column selector」を表示します。

f:id:toshimana:20140812100734j:plain

2-2.「Begin With」を"No columns"に設定します。

f:id:toshimana:20140812101253j:plain

2-3.次列を"Include", "column names"と設定します。

f:id:toshimana:20140812101328j:plain

2-4.column nameの入力項に、以下の項目を入力します。

  • make
  • body-style
  • wheel-base
  • engine-size
  • horsepower
  • peak-rpm
  • highway-mpg
  • price

f:id:toshimana:20140812101921j:plain
ちなみに、入力補完機能があるので、簡単に入力できます。
f:id:toshimana:20140812102353j:plain

2-5.右下のチェックボタンを押します。

f:id:toshimana:20140812102603j:plain

3.Labelを設定する。

3-1.「Metadata Editor」を用意します。

f:id:toshimana:20140812103150j:plain

3-2.「Project Columns」と「Metadata Editor」を接続します。

f:id:toshimana:20140812103454j:plain

3-3.「Metadata Editor」の「column selector」を表示します。

f:id:toshimana:20140812103658j:plain

3-4.「Begin With」を"No columns",次列を"Include", "column names"と設定し,入力項に"price"と入力します。

「Project Columns」のときと違って、入力補完機能が利きません。何故?
f:id:toshimana:20140812104139j:plain

3-5.右下のチェックボタンを押します。

f:id:toshimana:20140812104241j:plain

3-6.「Properties」-「Metadata Editor」-「Fields」を"Labels"に設定します。

f:id:toshimana:20140812104603j:plain

4.Feature typeを変更する。

4-1.新しい「Metadata Editor」を用意します。

以下、特に追記がない場合、「Metadata Editor」は4-1で作成したものを指すものとします。
f:id:toshimana:20140812105116j:plain

4-2.3-1で作成した「Metadata Editor」と「Metadata Editor」を接続します。

f:id:toshimana:20140812115700j:plain

4-3.「Metadata Editor」の「column selector」を表示します。

f:id:toshimana:20140812115841j:plain

4-4.「Begin With」を"No columns",次列を"Include", "column names"と設定し,入力項に"make"と"body-style"を入力します。

f:id:toshimana:20140812120417j:plain

4-5.右下のチェックボタンを押します。

f:id:toshimana:20140812120451j:plain

4-6.「Properties」-「Metadata Editor」-「Data type」を"String"に設定します。

f:id:toshimana:20140812120636j:plain

4-7.「Properties」-「Metadata Editor」-「Categorical」を"Categorical"に設定します。

f:id:toshimana:20140812120812j:plain

5.処理を実行する

5-1.画面下の「Run」ボタンを押します。

f:id:toshimana:20140812121018j:plain

5-2.処理が実施されます。

f:id:toshimana:20140812121221j:plain

5-3.処理が終了するまで待ちます。

処理が終了すると、画面右上に「Finished running」が表示されます。
f:id:toshimana:20140812121344j:plain

6.結果を確認する。

確認できる処理結果:2-4で指定した項目のみが表示される。

変更前(Missing Values Scrubber)

f:id:toshimana:20140812121947j:plain

変更後(Metadata Editor)

f:id:toshimana:20140812121953j:plain

確認できる処理結果:"price"のFeature typeがNumeric Labelsになる。

変更前(Missing Values Scrubber)

f:id:toshimana:20140812182544j:plain

変更後(Metadata Editor)

f:id:toshimana:20140812182722j:plain

確認できる処理結果:"make","body-style"のFeature typeがCategoricalになる

変更前(Missing Values Scrubber)

f:id:toshimana:20140812183143j:plain

変更後(Metadata Editor)

f:id:toshimana:20140812183100j:plain

終わりに

現時点では、デモの動作方法だけを説明しています。
処理の細かい意味は特に説明していませんが、後で解説するかもしれません。

*1:前回までは画像加工ソフトにGIMPを使用していました