2011/06/03

makeをファイル更新のトリガで自動実行

今日は、makeを使ってTDDするときに、

  1. コード変更
  2. いちいちmake -> エンター(ターン ビンゴだ!)

ってやるのが、結構めんどくさく感じてまして。

求めてる動きは、ソース変更したら、勝手に結果でねぇかな と思ってたんですよね。

で、今まさに

  • 開発言語 C++
  • Cygwinで開発中
  • GoogleTest と GoogleMock

で、結局シェルスクリプトで実現することにしました。(いろんなアドバイスもらったので、それに関しては後述します)

まずシェルスクリプトです

#!/bin/sh

echo "check file update!"

makeOpt=$1

# 作業ディレクトリ(衝突しない名前に)
workDir=autorun

rm -rf $workDir
mkdir -p $workDir

while [ 1 -eq 1 ]
do
isMake=0

# 更新確認するファイルを、in のあとに並べる
for file in *.cpp *.hpp Makefile tmp/*.cpp
do
backup=${workDir}/${file}
if [ ! -e $backup -o $file -nt $backup ] ; then
cp -f --parents $file ${workDir}/
isMake=1
fi
done

if [ $isMake -eq 1 ] ; then
make $makeOpt
if [ $? -eq 0 ]
then
echo success!
# 成功時の処理をここに書く
else
echo failed!
# 失敗時の処理をここに書く
fi
fi

sleep 1
done

このスクリプトのいいところ

  • スクリプトの第一引数で make の引数を指定できるので、モジュールごとに実行しておくことが可能
  • makeとテストが両方成功した場合の判断ができるので、シェルスクリプトの編集で成功時にコミットとかできる(と思う)
  • 後片付けは、作業ディレクトリを消すだけ(.gitignore とかに指定しておくとよさそう)
  • 使うときはシェルスクリプトをmake用のディレクトリに置くだけ。

使うに当たって修正するところ

  • 自動でworkディレクトリとか作る(スクリプト内のworkDirで指定可能)ので、衝突しない名前にしておく
  • 更新チェック対象は、for の in のあとに付け加えるだけ
  • 成功時、失敗時(make失敗 or テスト失敗)の処理が必要な場合は、success と failed の場所を修正

という感じで。

実行は、

./autorun.sh make-option

で走りっぱなしになります。更新チェック対象のファイルが更新されたら、自動でmakeが始まります。

 

スクリプトの説明は以上で、ここから先は皆様からいただいたアドバイスですが

  • omakeでそんなことできたんじゃないかな(omake -p)
  • eclipse で 自動ビルド
  • make に仕込みをいれていく

なんて話をもらいました。

できない系の否定的な意見は、嫌なので、下のは自分の調査不足です。(実際にomakeもできたよーって話ももらいましたw)
んで、その上で僕の現状ですが

omakeは、もの凄いツールで、使いたくて頑張ったんですが、make -> ocaml -> flexlink -> アクセスが拒否されました。
というコンボが重なり、いまのところペンディングです(涙

omakeは、あとで使いたいのでLinux環境いったときに使いますね。

eclipseとgmakeについては、実際に「C++とGoogleTestのTDDをeclipseでどうか」を実験してたんですが、
あまりおいしくできなくて、やめていた経緯がありました。

  • eclipseが自動で作ってくれるmakeだと、実行ファイルが一つしかつくれなくて、うまくできなかった
  • makeを読込ませてやってみたが、makeターゲットの指定とかが意外と面倒

こんなところです。

とりあえずやりたいことはできた、よかった!

2011/05/28

すくすくスクラム第23回にいってきた #suc3rum

皆様おつかれさまでした。

海江田@Qooh0さん、講師お疲れ様です。スタッフの皆様、すばらしい勉強会をありがとうございます、参加者のみなさまに出会えて、とても有意義な時間をすごさせていただきました。

今回のすくすくスクラムは、初学者向けってことで、スクラムって何?ってところから、お話していただけました。
そんなこともあって、「今回初めて!」って方がいっぱいいらっしゃって、スクラムってやっぱり注目されてるなぁと思ったり。

後日談ツイートで見かけたところによると、1/3ぐらいゲーム業界からいらっしゃっていたようで、懇親会でも話を聞けたんですが、ゲーム開発にぴたっとはまる瞬間があるみたい。(実際は、いろんなプロセスを混合する感じのほうが、上手くいくかもしれないとか、いろいろと意見はあるようです)

勉強会の内容的には、いままで教えてもらったことの再認識って感じだったけど、地味に勘違いしてるとことか、分かってなかったところが見えて、とってもうれしかった。そして、紙飛行機飛ばしは、意見をまとめて、「これでいこう!」っていうFixが、ものすごい難しかった気がする。

ロール

  • プロダクトオーナー
    • リリースとかの権限を持ってる
    • 製品の行く末を決める
  • チーム
    • チームは、長いスパンで成長させていく
  • スクラムマスター
    • サーバントリーダーシップ(よいしょ係)

昔会社で、一番難しい命令は「うまくやっといて」だとか話をしたのを思い出したけど、スクラムマスターは、まさしく「うまくやる人」なんだなと思った。

キックオフミーティング

  • プロダクトバックログ(PBI:プロダクトバックログアイテム)
    • 優先度、価値を決める
    • 見積もる
      • Tシャツのサイズ見積もり(SML)
      • プランニングポーカー
    • 誰のために、何が出来たらいいの?を決める
    • 顧客が見えないんですけど。
      • ペルソナ
      • ログ
      • さまざまな情報を収集した結果を持って、ある程度の値を決めると、話がしやすいのではないか?(「値」の重要性?

懇親会でも話しにあがったけど、優先度がつくことで、必須機能やオプション機能、実現性とかのからみを上手く紐解ける感じになるのかなって思った。

このあたり、実体験から話しを聞けたのは、とても良かった。

余談だけど、プロダクトバックログの書き方の話で「ユーザーは」じゃなくて「僕は」だったり、それらしい口調のほうがしっくりくるって話をゲーム関連の方がおっしゃってて、おもしろいなぁと思ったり。

あと、勉強会後に、記念と義援金ってことで、すくすくプランニングポーカーを買ってきたw

NEC_1759

スプリント計画ミーティング

    • スプリントで何をする(タスク)
      • タスク粒度
        • 1~16 時間派
        • 1~8 時間派
    • 完了の定義の重要性
      • 大体の目安で、チームとプロダクトオーナーが完了に同意できれば完了
      • リリース可能(昨日が使える状態=プロダクトバックログの完了って感じ?)
      • C.I.とかと連携させてリリースできるようなものを作っていく

スプリントで何するかってのを決めるのが、コレですよね。

完了の定義を決める っていっても、実は「定義」のイメージが沸きません。
完了するってことは開発であれば、「xxxのように動くこと」とか、当たり前のことを定義とするんだろうか。バグであれば、直ってること?再現しないこと?何を持って再現しないとする?
実際、そこらへんを実例で見てみたい気がするなと思った。

スプリントが始まったら

  • デイリースクラム(毎日やろう、朝会)
    • 昨日やったこと
    • 今日やること
    • 困ってること
    • 障害リストのUpodate
    • バーンダウンチャート
      • 必ずやっとけ、マジで。やれ

朝会の3項目は、最近一人朝回が開催されてます。ちなみに、やった日とやらない日では、仕事の進み具合が違います。一人でもやっとく価値がある。

んで、僕、バーンダウンチャートがどーも苦手で、なんかアレを書けといわれてかけないんですけど、やらんでいいですか?って先生に聞いたら、
ダメですd(´∀`)bって言われた。

バーンダウンチャートの重要性って、タスクの消化具合からプロジェクトの健康状態、お客さんとの交渉材料と、多岐にわたってあるんで、コレがあるのと無いのではずいぶん違う模様。

都合上、ノートとかにこそっと作っておくぐらいにすべきか、もしくは、Tracでバーンダウンを吐き出せるようにするか。どっちにしても準備がいるなぁ

スプリントが終わったら

  • スプリントレビュー
    • Demo or Die
  • ふりかえり(レトロスペクティブ)
    • チームをよりよくするための改善
    • スプリントミーティングから、スプリントレビューまで

この2つは、参加者が違うんですね。

スプリントレビューのほうは、そのスプリントの成果を発表する場で、こんなもんができましたよ!ってやつ。

で、ふりかえりは、チームでやる。良かったところとか悪かったところを確認して、改善していくのが目的。

懇親会にて、「ふりかえりやらないと、改善するタイミングないよ」とのこと。
そりゃそうですよねぇ・・・

ちなみに、ふりかえりは学級会みたいでプライドが許さない!っていう感じでとっつきづらいという話をきいて、あーなるほどwと思いつつ、でも、そこのチームでは、繰り返すうちに、それが普通になっていったそうで。やっぱり継続は大切だし、もう一個、その方法が身にしみていく慣れがいるのかなとか。

全然関係ないけど、Demo or Die はいつも、House of the Dead のあの声で再生されます。(バイオハザードの声でも良いですよ)

紙飛行機飛ばし(ワークショップ)

紙飛行機とばしまくってきたw

  • スプリントミーティング:2分
  • スプリント:3分
  • 振り返り:1分

成功品の数は、10 → 21 → 20 だったかな。

見積もりは 無し → 15 → 25 だったかな。

第一スプリント(計画)
  • 飛行機を折るのは、ペアプロならぬペア折り紙w
  • 折る人4人 飛ばす人1人 飛行機の先を丸める1人
    飛行機輸送1人
第一スプリント(ふりかえり)
  • 我がチームは、いっぱい飛んだ!
  • 輸送と先を丸めるロスが意外と
  • 飛行機の品質がバラバラで飛ぶのと飛ばないのがあるよ
  • ペア折り紙より、ライン作業のほうがいいのでは?
    (工程を分離することで、作るものが安定する?)
第二スプリント(計画)
  • とりあえず、折る人いっぱいにしよう
  • 7手かかる飛行機をおるので、7人必要
  • 丸める係りは、最後の一手を折った人
  • 飛ばす係、輸送係は、同様で。
第二スプリント(ふりかえり)
  • すごい、飛ばした数が倍になったぞ!
  • 終盤、仕掛け品がたまってきててもったいなかった
  • タイムキーパー的な何かが居るのでは?
第三スプリント(計画)
  • 最後は、作るだけ作って数人で飛ばしにいこう
  • 最後30秒でまとめて投げに行こう
  • タイムキーパーは、iPhoneの時計を机に。
第三スプリント(ふりかえり)
  • 数増えなかったねぇ。
  • あせって飛ばしきれなかったのがあった
  • 最後30秒じゃちょっと短かったかな

と、試行錯誤しながらも、次にチャレンジすることが、どんどん出てきた。

会社でKPTとかやっても、大して出ないんだけど、違いは何だw

というわけで、本日のすくすくスクラム初潜入は完了しました。

実際、めっちゃたのしかった。会場も近場だったのでさらっと参加できたけど、遠くなるとちょっと難しいんだよなぁ。でも楽しかったし次も出たいし・・・

まとめらしいまとめはしないです、適度に混ぜ込んであるのでw

では、皆様おつかれさまでした。

2011/05/10

モテる組込み女子力を磨くための4つの心得

こんにちは、組込みシステムを作っているriskです。私は学歴も知識もありませんしカスプログラマですが、組込みに関してはプロフェッショナル。今回は、モテる組込み女子力を磨くための4つの心得を皆さんにお教えしたいと思います。

 

1. あえて2~3世代前のOSを使っておく

あえて2~3世代前の組込みOSを使っておきましょう。そして飲み会の場で好みの男がいたら話しかけ、わざとらしくOSの性能について悩んでみましょう。そして「あ~ん! このOS本当にマジでチョー使いづらいんですけどぉぉお~!」と言って、男に「どうしたの?」と言わせましょう。言わせたらもう大成功。「OSとか詳しくなくてぇ~! ずっとコレ使ってるんですけどぉ~! リソースっていってもタスク管理ぐらいしかしてくれないし、例外起こったらそこでシステム止まっちゃうし、使いにくいんですぅ~! ぷんぷくり~ん(怒)」と言いましょう。だいたいの男は新しいOSを使いたがる習性があるので、古かったとしても1世代前のOSを使っているはずです。

そこで男が「新しいOSにしないの?」と言ってくるはず(言ってこない空気が読めない男はその時点でガン無視OK)。そう言われたらあなたは「なんかなんかぁ~! 最近iOSが人気なんでしょー!? あれってどうなんですかぁ? 新しいの使いたいんですけどわかんなぁぁああい!! 私かわいそーなコ★」と返します。すると男は「iPhoneとかでしか使えないでしょ? 本当に良くわからないみたいだね。どんなOSが使いたいの?」という話になって、次の休みの日にふたりでiTRONのポートマッピングができるというわけです。あなたの組み込み女子力が高ければ、男が自作OSを作ってくれるかも!?

 

2. LCDに><を表示するとモテる

「キャー!」とか「悲しい!」などを表現する「><」をLCDに表示すると、組込み男性ユーザーは「なんかこの子カワイイなぁ」や「支えてあげたいかも」と思ってくれます。LCD上では現実世界よりも簡素化された8x16のアスキー文字列でイメージが増幅されて相手に伝わるので 「><」 を多用することによって、男性はあなたを可憐で女の子らしいと勘違いしてくれるのです。そういうキャラクター(文字列ではない)にするとほぼ絶対に同性に嫌われますが気にしないようにしましょう。

 

3. とりあえず男には「えー! なにそれ!?  知りたい知りたーい♪」と言っておく

飲み会などで男が女性に話すことといえばCPU占有時間やリソース削減の話ばかり。よって、女性にとってどうでもいい話ばかりです。でもそこで適当に「へぇーそうなんですかぁ~?」とか「よくわかんないですけどすごいんですねぇ」と返してしまうと、さすがの男も「この女ダメだな」と気がついてしまいます。ダメ女だとバレたら終わりです。そこは無意味にテンションをあげて、「えー! なにそれ!?  知りたい知りたーい♪」と言っておくのが正解。たとえ興味がない話題でも、テンションと積極性でその場を乗り切りましょう。積極的に話を聞いてくれる女性に男は弱いのです。

いろいろと話を聞いたあと、「CPU占有時間は、基本的に常に動き続けるスレッドを作ってることがミスであって、割り込みなどをつかったリアルタイム性重視のシステムにすべきなんですね。メモリ使用量の削減も、もともと確保されるスレッドのスタックサイズや、不必要なグローバル変数の削除、共有リソースをシングルトンにすることで単一プロセス内の無駄なメモリ確保をしないようにとか、覚えたぞぉ! メモメモ!」とコメントすればパーフェクト。続けて頭に指をさしてくるくる回しつつ「00110010110101011011010101010101! 10101010101010111101111111111111!」と言って、「どうしたの?」と男に言わせるのもアリ。そこで「私の物理メモリに記録しているのでありますっ☆」と言えば組込み女子力アップ! そこでまた男は「この子まじでハードウェアかも!?」と思ってくれます。私は学歴も知識もありませんしカスプログラマですが、こういうテクニックを使えば知識がない私のようなヘタレプログラマのほうがモテたりするのです。男は優越感に浸りたいですからね。

4. 新規ハードウェアではレジスタをいじれない女をアピールせよ

男と新規ハードウェアの検証作業に入ったら、真っ先にデータシートのなどのレジスタマップを探し出して「あーん! 私レジスタたたけないんですよねぇ~(悲)」と言いましょう。するとほぼ100パーセント「どうして?アドレスとポインタ分からないの?」と聞かれるので、「嫌いじゃないし叩きたいけど、叩けないんですっ><」と返答しましょう。ここでまた100パーセント「嫌いじゃないのにどうして叩けないの?」と聞かれるので、うつむいて3~5msecほど間をおいてからボソッとこう言います。「……だって、……だって、レジスタ叩いたら、レジスタ値がかわっちゃうじゃないですかぁっ! ハードウェアさんかわいそうですぅ!まだ動作検証もしてないのにぃぃ~(悲)。電気ながれちゃうんですよ……」と身を震わせて言うのです。

その瞬間、あなたの組込み女子力がアップします。きっと男は「なんて優しい天使のようなコなんだろう! 絶対に動かしてやるぞ! コイツは俺の製品だ!」と心のなかで誓い、ハードウェアに惚れ込むはずです。意中の男と付き合うことになったら、そんなことは忘れて好きなだけレジスタを叩いて大丈夫です。「叩けないんじゃなかったっけ?」と言われたら「大丈夫になった」とか「慣れた」、「そんなこと言ってない」「いま検証中だろ」と言っておけばOKです。

2011/04/28

TwitterBot開発 ~Twitter連携~

今回は、TwitterBotを作るうえで重要な、Twitterとの連携についての話を。

Torubotは、一定時間につぶやく機能や、自分に関係のあるつぶやき(mention)を確認して
返信を返す機能などを実装しています。

Twitterとどうやって連携してるの?というと、一番直接的な方法はTwitterAPIに直接アクセスする方法があります。

このあたりを見ると、やり方やらが色々出てくるわけですが・・・

僕は難しくてそんなことできないんで、githubから、教えてもらったコンポーネント使ってアクセスします。
正直、一番面倒だなぁと思ったのが、oAuth認証で、コレさえなかったらURL直接アクセスもいいんでしょうが・・・
(お前が内容理解してないだけだろうといわれれば、返す言葉もございません)

んで、神速さんに教わったのが、Tweepyでして。

必要なコンポーネントやらスクリプトの入手

joshthecoder/tweepy - GitHub <https://github.com/joshthecoder/tweepy>

からいただいてきます。

使い方は、ローカルで使う場合は、setup.py があるので、setuptools使って入れます。

setuptools は、このあたりからインストーラを拾ってくれば簡単に入れることができます。

tweepy自体はgithubから取得するので、cloneしましょう。
gitの使い方は、前になんか記事書いた気がする。

HIGH risk LOW return + α: GitをWindowsで使うには? <http://highrisklowreturn.blogspot.com/2010/10/gitwindows.html>

んで、

> git clone URL

で、ダウンロードしてきましょう。URL部分は

image

さっきのtweepyのページに、アクセス用のURLがあるので、そこを指定します。

ダウンロードできたら、実際にインストールしてみます。

ダウンロードしてきたリポジトリの直下に、setup.py があるので、実行しましょう。

> python setup.py install

って打つと、インストールが完了します。

次に、bot作るアカウントの情報を持ってきます。

実際に必要な情報は、oAuth認証を行って、トークン集めをします。

全部そろわないと、アクセスできないよ!

でも、やること自体は、そこまで複雑ではなくて、もう一つリポジトリをダウンロードしてきます。
tweepyのサンプル集なんですが、ここにoAuthの認証サンプルがいるんで、そいつを使いましょう。

まずは、githubなので、先ほどと同様に、

joshthecoder/tweepy-examples - GitHub <https://github.com/joshthecoder/tweepy-examples>

ここから落としてきましょう。

ここまでで、必要なスクリプトやコンポーネントがそろったことになります。

アプリケーションの登録

最初にやることは、tweepyからアクセスするアカウントに、自分のアプリを知らせなくてはいけません。

ブラウザから、tweepyからアクセスするアカウントにログインして、アプリケーションの登録を行いましょう。

登録は、ログインしたあと、設定のメニューから行います。

image

設定メニューを開くと、一番右に連携アプリというタブがあるので、そこを開きます。

さらに、そのページの右側カラムの開発者のところの連携アプリの追加と設定に入りましょう。

image

こんなページが表示されるので、「新しいアプリケーションを追加」から新しいアプリケーションを追加しましょう。

いろいろ聞かれるので、しっかりと埋めておきます。

重要な部分として、アプリケーションの種類をブラウザアプリケーション標準のアクセスタイプを Read-Write に設定します

しっかりと埋まっていれば、Consumer KeyConsumer Secret が表示されます。
また、この値は、メモっておくほか、開発者のページに来れば確認することができます。

oAuth認証

実際にoAuth認証をして、アクセスするために必要なTokenを取得します。

先ほどダウンロードしてきたexamplesリポジトリの /oauthフォルダ以下のpythonスクリプトを実行することで、取得できます。

> python getaccesstoken.py

Consumer key とか Consumer Secret を聞かれるので先ほどメモした値を入れましょう。

答えると、リダイレクトで認証番号がブラウザに表示されるので
さらにそれを入力します。

これで、認証が完了し、Access Token/Secret を返してくれます。

この値は、どっかにメモっておいてください。コレが無いとアクセスできなくなっちゃいます。

つぶやいてみる

全部取得できたら、次は実際につぶやいて見ましょう。

つぶやき方ですが、tweepyの使い方の手順として

  1. APIクラスのインスタンス(命令を出す本体)を生成する
  2. APIクラスから、やりたいことを呼び出す

とっても単純になってます。

スクリプトを見てみましょう。

まず認証して、APIクラスのインスタンスを作りましょう

import tweepy

# create OAuth handler
auth = tweepy.OAuthHandler(Profile.consumer_key, Profile.consumer_secret)

# set access token to OAuth handler
auth.set_access_token(Profile.access_key, Profile.access_secret)

# create API
api = tweepy.API(auth_handler=auth)

これで、準備完了です。

Profileの中には、先ほど取得した値が名前どおりに格納されていると思っておいてください

  • Consumer key → Profile.consumer_key
  • Consumer Secret → Profile.consumer_secret
  • Access Token → Profile.access_token
  • Access Secret → Profile.access_secret

の4種類ですね。

認証が終われば、後はツイートするだけなので、つぶやくのであれば

api.update_status(つぶやく内容)

でつぶやくことができます。

その他の機能は?

そのほかの機能については、tweepyのヘルプを読んでみてください。
書いてある内容は、twitterを使ったことある人なら、大体推測がつく内容になってます。

というわけで、自分の作ったtorubotはこのあたりから落とすことができます。
実際にtwitter関連の制御をまとめたtwitter.pyがあるので、興味があればご覧ください。
(ソースは酷いので、あまり気にしないでください・・・)

toru-bot/source/riskrisk-torubot at master from risk/risk – GitHub
<https://github.com/risk/risk/tree/master/toru-bot/source/riskrisk-torubot>

2011/04/25

TwitterBot開発 ~開発環境~

ずいぶんと長く開いてしまった。一応仕事がたて込んでたってコトで・・・

本題ですが、開発環境とかの話。

今回のBotは、GAEで動かすことが決定してたので、そのとおり組み立てていきました。

GAE自体は前に毎時50分のタイミングでつぶやく、10分前行動Botを作ったときに
作ったの元データがあったので、いろいろ流用しました。

大まかに、どんなもの使ったかを箇条書きすると

  • OS : Windows7
  • 実行環境
    • Python - Version 2.6(GAEが2.5だということに、気がつきながらも2.6でやってたとか・・・)
    • GoogleApplicationEngine (実際にソフトを動かすところ。タダおいしいです(^q^))
  • テスト関連ツール
    • nose (テストフレームワークで、途中からTDDに移行するに当たってお世話になった)
    • noseGAE(nose上でGAE依存のテストをするために必要なモジュール)
    • pymox (Mockを使うために必要 GoogleのPython用Mockオブジェクトフレームワーク EasyMockがベースになってる )
  • バージョン管理
    • git (cygwin)
    • github

を使いました。

最初はTDDとかぜんぜん考えてなくて、Python2.6 と GAE のみで動かしてましたw

当初のテストに関しては、何もやらなかったというわけではなく、mainに関数呼び出しをいろいろ実装しといて、
そこが正しく動いたように見えれば「まぁいっか(笑)」という感じで・・・

ちなみに、どのツールもインストールは簡単で

pythonに関してはここhttp://www.python.org/)から、インストーラをダウンロードするんですが、いま2.7で、今回はそれより前のバージョンを使うので

左側のメニューからDOWNLOADを開く、そこのReleaseを開く そうすると、リリースバージョンが選べるので、そこから
お好きなバージョンを選んでください(GAEの開発なら2.5が妥当だと思います)

image

インストールは、次へ連射になるので・・・

次は、GAEのインストールですが、これもGAEのページhttp://code.google.com/intl/ja/appengine/)から、
ダウンロードを選択して、SDKのインストーラを落としてきます。

今回はPythonを使って開発するので、選ぶツールは

Google App Engine SDK for Python の Windows用

image

これ、Java用もあるのでお間違えの無きよう。

あとは、次へ連射でインストール完了です。

忘れちゃいけないことなんですが、GAEを使う場合、お手持ちのGoogleアカウントで認証が必要です。
認証方法については、詳しく書かないですが、GAEのホームに、使い方の手順が右側のカラムに書いてあるので、
そちらを参考にしてもらえればと思います。

んで、準備ができたら、ためしにサンプルのGAEプロジェクトを作りたいと思うのが技術者なので、とりあえずなんか作ります

まず、GAEにアプリケーションを登録しましょう。

https://appengine.google.com/ にアクセスすると、自分のプロジェクトの一覧が見れます。

ここの一番下に、

image

のボタンがあるので、これを押して自分のアプリケーションを登録します。

アプリケーションのIDとタイトルを設定したら、出来上がりです。IDに関しては
あとで、yamlの名称のところに突っ込む必要があるので、どっかにメモっといてください。

正しく登録できたら、次に進みます。

こんどは、自分のPCにGAEのプロジェクトを作りましょう。

GAEのSDKをインストールするとGoogleApplicationLauncher

image

がインストールされるので、これを使います。

このツールは、ローカルのダミー実行から、デプロイまで一通りサポートしてくれるので、とっても便利です。

まずは、新規のプロジェクト作成です。

image

こんな感じで、Fileメニューの中に、新規に作成(Create New)と既存を追加(Add Existing)があるので、
Createのほう、選んでください。

そしたら、プロジェクト名とパスを決めろってダイアログ出ます。

image

ポート番号は、実際にローカル環境で実験を行う場合の接続先になります。
ここで指定された番号(defaultだと8000かな?)を使ってる場合は、別の値にします。

んで、プロジェクトを作ると、ベースは全部作ってくれます(hello worldを作ってくれます)

フォルダの中には

  • app.yaml (どこにアクセスしたら、何を呼び出す?っていう設定の書いたてあるファイル)
  • index.yaml (いじらない・・・むしろいじったことがない)
  • main.py (app.yaml の設定に使われていて、実際に呼び出されるスクリプト)

が出来上がります。

今度はさっきメモったIDを、app.yaml に設定します。

image

を押しまして、テキストエディタでapp.yamlを開いてくれます。
(テキストエディタは、デフォルトがワードパッドで、上部メニューの、edit -> prefarences... から変更できます。)

image

applicationのところを、さっきメモしたアプリケーションの名前に設定します

では、実際にデプロイして、Web上で動かしましょ。

右端の2つのボタンが、デプロイ(サーバーに反映させる)と管理ページ(Dashboard)のボタンです。

image 

まず、左のDeployを押しましょう。

image

こんな画面がでてきますので、gmailのアドレスとパスワードを突っ込んでOK

複数プロジェクトを作ってる場合は、Projectのところにプロジェクト名が出てますのでちゃんと確認しましょう
ちなみに、プロジェクトの名前が並んでるリストボックスで選択されているものがカレントになります。

(決して、いまつくったプロジェクトをデプロイしようとしてとおるぼっとをデプロイした
なんてことはありません、ええ、断じてありまsん)

次に、右側のDashboardを押しましょう。

そうすると、ブラウザに管理ページが表示されます。

左側のメニューから、Application Settings を選択すると
Application Identifier に、URLがあるので、そこのアドレスにアクセスします

image

左下のところと、右側ののアプリケーションのところです。

実際に、表示されているURLにアクセスすると、

「Hello world!」が表示され、スクリプトが動作したことを確認できます。

次に、Twitterやら、テストやらに特化した話を少し書こうと思います。

2011/03/09

@torubot 取扱説明書

とおるぼっとって何なのよ?

@torubotは、池袋のねこカフェ「ねころび」の名物店員「とおるさん」を
いじりたおすために開発した、ツイッターBOTです。BOTは「ロボとおる」と呼んでいます。
とおるさんはTwitter上での活動が、とても活発であり、
毎日ツイッタばっかりしかやってなくね?しかもきなこおんりーなど
実際のねころび業務はどうなってるんだ!」と疑問に思うほどの出現率です。
名物ツイートは、「イヤッホゥ」。これを聞くためにフォローしてる人も多いとか。
開店時、閉店時に返信イヤッホウを返すと、喜んで絡んでくれる場合がありますが、
最近飽きてきている相手(たとえば@riskrisk)は、あんまり遊んでくれません(´・ω・`)
噂によると、男一人で行くとやさしいのに、彼女つれていくと話しかけてもくれない とか。
僕はいつもボッチで行きますが、やさしく話しかけてくれます。

機能概要

機能は2種類に分かれています。
  • 通常ツイート機能
  • 返信ツイート機能

通常ツイート

とおるBotが自主的につぶやく機能です。きなこさんに偏りすぎとか、ロボットなのになぜ生理とか
微妙要素に関しては、作者や周りの人間の偏ったイメージ感を具現化した結果であり、
一部ユーザーには、予想通り過ぎてフイタなどの感想をいただいています。

定時ツイート機能

一時間おきに、ランダムでツイートを行います。また、つぶやいた時間を伝えるため、簡易な時報としても使えます。
内容的に、アウトのものも多いですが、いまだ本人からはそこまで怒られていないという不思議と、恐怖があります。

開店/閉店イヤッホゥ!

お店の開店(10:50)と閉店(22:50)に、イヤッホゥツイートをします。
実はこの機能がこのBOTの原点で、とおるさんが休みの日に、ふざけて「とおるぼっと」なる名前で
ねころびスタッフさんが「イヤッホゥ」をツイートしたのが始まりとか。

イベント・予定ツイート

予定日前日の夜()、予定日の朝に予定をツイートします。
注:この予定は、ねころびGoogleカレンダーより取得しており、予定を約束するものではありません。

記念日ツイート機能

記念日に、特殊なツイートを行います。現在の登録は以下のとおり。
  • ねころび開店記念日

返信ツイート

ユーザーの発言に@torubotが含まれている場合に、ツイートの内容をチェックして返信する機能です。
たまに誤検出して、あらぶる場合があります・・・(ロボなんで故障すんのかなぁ)

「イヤッホゥ」返信機能

「イヤッホゥ」成分(イヤッホゥっぽい言葉)を含むツイートに反応して、イヤッホゥを返信してくれます。
  • @torubot イヤホゥ
  • 今日も一日、イヤッホオオオオオオゥだぜえええええ @torubot
のようにつぶやくと、イヤッホゥ返しをしてくれます。(上記は一例です。ある程度柔軟に検出するはず)

「ウッヒョウ」返信機能

ウッヒョウ成分(ウッヒョウっぽい言葉)を含むツイートに反応して、ウッヒョウ的なを返信してくれます。
  • @torubot ウッヒョウ
  • ウッヒョオオオオオオオゥ @torubot
のようにつぶやくと、ウッヒョウ返信を返してくれます。(上記は一例です。ある程度柔軟に検出するはず)

俺はノンケでもペロペロしちまう男なんだぜ機能

「ペロペロ」成分を含むツイートに反応して、とおるBotがペロペロしてきます。
  • @torubo ペロペロしておくんなさい
  • とおるさんぺろぺろ @torubot
などとつぶやくと、ペロペロしてきます。(上記は一例です。ある程度柔軟に検出するはず)

すくに同意しちゃう男、とおる機能

質問っぽい成分を含むツイートに反応して、とおるBotが同意してくれます。
  • @torubot 俺のことイケメンだと思うね!
  • とおるぼっと、生理くるって本当ですか? @torubot
などとつぶやくと、同意してきます。この機能は、開発者の都合により 「マジスカ!」「だよね?」など、
疑問符、感嘆符が付かないと反応してくれないので気をつけてください。

そんな機能でイーノック?

「大丈夫か?」と「イーノック?」に反応して、大丈夫か、大丈夫じゃないかを教えてくれます。
1/2の選択に迷った場合などに使える、とても便利な機能です。
  • @torubot おまえさん、調子はイーノック?
  • 俺の頭は大丈夫か? @torubot
などとつぶやくと、大丈夫か大丈夫じゃないか返信してきます。

おみくじ機能

「おみくじ」「占って」などの言葉に反応して、おみくじ返信をしてくれます。
おみくじの種類は、現在38種類ぐらいですが追加することができます。
  • @torubot おみくじちょうだい。
  • とおるぼっとよ、今日の運勢を占って。 @torubot
などをつぶやくと、おみくじを引いた結果を返信してくれます。

おみくじ追加機能

「くじ追加」のキーワードを含むツイートの場合、ツイート内にある「」の中身を、おみくじのネタとして追加します。
  • @torubot くじ追加 「バート君の寝込みを襲える券」
  • 「バート君の寝込みを襲える券」 くじ追加 @torubot
上記例では、1つ目なら「バート君の寝込みを襲える券」というくじが追加され、とおるぼっとから追加完了のツイートが返ってきます。

その他

  • おみくじとかは皆さんの協力が必要で、もっといっぱい種類を増やしたいので、このまま運用していく予定です。
  • とおるさんがブチキレタ場合や、ねころびさんに迷惑がかかりそうな場合は、連絡なく終了する場合があります。
  • とおるぼっとにつぶやかせたい定時ツイートや返信内容があれば、@riskrisk宛に、@ください
  • 追加してほしい機能や、ご意見・ご感想がいただけると、開発する元気になるので、気軽に話しかけてください!
  • とおるぼっと返信してくれなくても泣かないで、@riskrisk文句言ってください。直したり、原因を確認したいです!

2011/03/03

TwitterBot 開発 ~とおる@ねころびぼっと開発~

タイトルのやつを開発してみました。

ぼっとさんはこちら!@ToruBot

ねころびってなんぞ?

ねころびは、池袋のサンシャイン裏にある、ねこカフェさんです。

http://www.nekorobi.jp/

サイトのブログや、ぬこさんの写真だけでも、かなり癒されるのでどうぞ!
もちろん、現地に足を運べば、ねこすたっふさんにいやされることうけあいです。

んで、もともとねこかふぇいきたいなーっと思ってて、いかずじまいだったんですが、
行くタイミングがたまたまできたので、行ってみたら見事にはまってしまい、しばらく通いつめることになります。
そこにいらっしゃる、イケメン店員のとおるさんが、あまりにいじり易いとは感じてたんです。

とおるさんについては、また後で語るとして

これを作るきっかけになったのは、忘れもしない正月明けのモンハンオフ(まぁ日付わすれたけども)
本人に、「とおるさんいいなぁ、botつくっていいっすか?」って聞いたら、「好きにやって良いですよ」って言うもんだから

じゃあそういうことなら ということで、作り始めました。

開発期間は意外と長くて、いろいろ試行錯誤しながら2ヶ月近くやってる気がします。

時間は、土日とか、行きと帰りの電車とか昼休みとか、基本空き時間なので、そんなに長くないかなと思いますが
(たまに、長いmakeやってるときとかにいじったりもしましたが)

現在の表に見える機能は

  • 通常のツイート機能(一時間に一回呟く。うざくない時報とあとで命名された)
  • 開店・閉店のイヤッホゥ機能(朝11:00に開店、夜23時に閉店のツイートとを行う。

当初は、これだけしか考えてませんでしたw

その後、通常ツイートの機能を調整していくわけですが、
その結果生まれてきたのが、適当に呟くだけでいいのかな?っていう疑問。

どうせ作るなら、役に立つ機能を追加していこうってことで

  • GoogleCalendarと連携して、お店の予定を前日と当日にお知らせツイートする機能
  • ねころび三周年記念があったので、その日だけ荒ぶってしまう、アニバーサリー機能

とかを追加していきました。

途中、返信してくれたら楽しいのにね!っていう意見をいただいてたので、さらに付け加えて

  • イヤッホウに返信してくれるイヤッホウ返し。
  • ウッヒョウに返信してくれるウッヒョウ返し。
  • 俺はノンケだってペロペロしちまう男機能
  • なんだって同意しちゃう激しく同意する機能

を追加しました。

その後一通りテストとか追加しだして、停止してましたが

  • そんな機能でいーのっく?
  • リフォロー機能(鍵つきだとダメなんだって・・・)

を実装して今に至ります。

いまのとこ、ここまでの実装ですが、今後もいろいろ増やしていく予定です!
そろそろぼっとのTopページに、取り扱い説明書がほしくなってきましたw