2013年5月4日土曜日

はじめてのgit勉強会&もくもく会に参加

お疲れさまです。ZuQ9->Nnです

2013年5月3日(金・祝)「はじめてのgit勉強会&もくもく会」が
開催されましたので参加しました。

お昼の13時から
場所は茅場町のコワーキングスペースCo-Edo
20人くらいの小規模な勉強会。

まず、主催者の@mon_satからバージョン管理ツールについての解説。
最低限覚えて欲しい言葉として

  • リポジトリ : ファイルのが実際にある場所
  • コミット    : ファイルの変更記録の単位
そして、GitHubの解説。GitHubは Code × SNS
GitとGitHubの違い。混同しないようにとのこと。
説明が一通り終了し、いよいよハンズオン。

まずはsshで秘密鍵、公開鍵を作成。
GitHubに公開鍵を登録し、通信確認。

そのあとはCode SchoolのTry Gitを用いてコマンドの練習。
使ったコマンドはgit init、git add、git commit、git status、git log、
その後GitHubにtry_gitを連携し、
git remote add、git push、git pull、git diff、
git reset、git checkout、git branch、git rm

Try Gitのサンプルは、最後、ブランチをきって
最後、全部のファイルを削除とかイマイ意味不明な作業をさせて。
ブランチのところに曖昧さが残った感じでした。
このへんはやはり、どんどん使って
量を増やして慣れていかないと。。ですね

以前の勉強会に比べて、本当に初心者向きで
普段、Gitを使っておらず、コマンドもあいまいな
僕にはちょうどピッタリでした。


2013年4月21日日曜日

Git天空闘技場に参加

おつかれさまです。ZuQ9->Nnです。

4月20日(土)Git天空闘技場が開催されたので参加しました。
場所は、大田区の男女平等推進センター エセナおおた、
午後13時開始の10名の少数勉強会です。

最初、神速さんから「バージョン管理とgitの基礎」のセッションがありました。
Gitの勉強会なのに、いきなりpullは使わない方がいいなどと
よくあるGitの勉強会とは少し違ったおもむき

最初はsvnなど中央集中型バーション管理全体の説明、
svnの特徴などの説明があり、
次にGit等の分散型のバーション管理の説明、比較など
ここらへんはベタですね。。

Gitの特徴として
  • ローカルの操作が速い
  • ローカルの変更は他のユーザーに影響しない
  • 可用性が高い
  • マージが安全
  • 変更履歴の編集が可能
次にGitのオブジェクトの説明として
  • blob : ファイルの中身を表すオブジェクト
  • tree : ディレクトリの中身と各blobとの対応を表すオブジェクト
  • commit : 履歴に対応するオブジェクト
  • tag : タグを対応するオブジェクト
そのあとは各オブジェクトに対して詳しい説明がありました。

次に、Gitの内部構想。
  • .git/HEAD
  • .git/config
  • .git/index
  • objects/
  • hooks/
  • refs/
今回関係あるもののみを抜粋されて説明

次に、ステージングエリアの説明、
なぜ、ステージングエリアがあるのか?とうことに対して
 一般的なDVCS
       ファイル単位で変更をコミット
git
      1ファイルの1部分のみをコミット可能
    ・バグ修正、リファクタリングを別でコミット
    ・ファイルを一部だけ元の状態に戻す
→意味のある変更単位でコミットできる
とのこと。。

ちなみに、勉強会のタイトルになっている「天空競技場」というのは
HUNTER × HUNTERという漫画のネタで
スライドにも階数が出てきてここらへん元ネタがわかるかも
試されていたようです。。

ここでいったん休憩となりその後はハンズオン。

ハンズオンのルールとして
  • コミットのタイミングでオブジェクトの図をノートに書く
  • リポジトリの内部を見る
基本はコマンドラインで行ないました。
最初はREDMEファイルを作成。
git initして、REDMEをgit add、REDMEをgit commit

.git/の中身を確認してobjects/はinfoとpackだけ
HEADの中身がmasterになっている、refsの中身が空でした。

別のファイル(僕はTESTファイルを作成)を作って、
add & commitしてみる
cat-fileを作ってノートに図を書く、
2回くらいcommitしてみる。

最初にcommitしたREADMEにcheckoutで戻り
READMEファイルのみがあるのを確認し。
ここで再び休憩。休憩中、スゥーツが振る舞われました。


休憩後は無名ブランチを作る。git merge --no-ff マージコミットを行い
fast-fowardの箇所は神速さんのプログ を各自で読みながら学習。
ブランチを手作り、タグなんかも手作りしてみました。

そのあとgit cherry-pickの説明があり
最後はgithubのリポジトリを持ってきてgit remote addなどを行いました

途中、作業を間違えてしまうなど、ところどころ
やっている内容が??ってなる時もありましたが
なんとかついていくことが出来ました。

ハンズオンだったので座学よりは理解度が高いのですが
ただ、きっちりと理解できたか?と言われると。。
まだ、なんとなーくといった感覚がつよかったです。

個人的なKPTとして
Keep
  gitの学習をつづける
Problem
  コマンドを間違えて作業に手間取り
  自分が何をやっているのか??と
  なってしまうことが多かった
Try
  gitのコマンドをきっちりと覚える
  gitコマンドのチートシートなどを覚える


2013年3月20日水曜日

横浜道場 特別編「Domain-Specific Language としての魔法少女まどか☆マギカ入門」に参加

おつかれさまです。ZuQ9->Nnです。

2013年2月19日(火)
横浜道場 特別編「Domain-Specific Language としての魔法少女まどか☆マギカ入門」
が開催されましたので参加しました。

場所は、横浜の株式会社アットウェアさん。

平日の夜から、しかも横浜での開催とかなり厳しかったのですが
タイトルに釣られてしまい、思い切って参加しました。
@hageyahhooさんが講師で下記の内容をお話されました

円環の理:まどマギ概論

要件定義は、なんだか良さそうだったのに、実際は。。
といったシステム開発のプロジェクトにありがちな内容を
まどマギを通じて。。わかりやすく?、グダグダながらも進めていき。
ユーザーストーリー。ドメイン言語などを説明。
ほんとんどの参加者がストーリーを知っていたため
すっとばし気味でした。

魔法少女になるって、そういうことよ:まどマギ実践

いきなり、実践編に入り、まど・マギに出てくる
「大人がお酒を飲んでいい理由」という台詞をもとに
システム開発を例えてました。あとは特定ドメイン言語の
事例などの紹介。。グローバルコミニュケーションもはかれ
メリットも多いとのこと。。

砲火後ティータイム:ワークショップ

解説もそこそこに、いよいよワークショップに! ルールとして
  1. 付箋に書き出そう。自分がどのきゃらに似ているか?どういう状況にあるか?
  2. KJ法で整理しよう。
  3. 一番ソールジェムが濁っているチームを発表してみんなで助けよう
自己紹介と、少しのディスカッションを終え
各チーム発表。なかなかアニメの内容をとらえて面白い発表でした。

なんと最後は時間を余らせて終了。
みんなで振り返り。その場で懇親会がありました。

いや、本当、「もう訳が分からないよう
その一言につきますよ。今回は。。


2013年3月18日月曜日

TDD Boot Camp Tokyo 2013-03に参加

おつかれさまです。ZuQ9->Nnです。

2013年3月16日(土) TDD Boot Camp Tokyo 2013-03
開催されたので参加しました。

今回は、参加にかなり迷いました。おそらくこれで5〜6回目
人気のイベントなので、他の人に譲ろうと考えておりました。

ところが、前日に確認したら、まだ定員に満たない。。
こりゃもったいないと思いで急遽参加を決めました。

場所は 株式会社VOYAGE GROUP 8F 社内バー AJITOです

最初にTDDの伝道師。t_wadaさんからのオープニングセッションがありました。

まずは、ソフトウェアの三本柱として
  • バーション管理
  • テスティング
  • 自動化
の説明、次に「テスト」という言葉の定義について、
今回取り扱うのは、Developer Testingで、Developer Testingとは、
  • プログラマの
  • プログラマによる
  • プログラマのための
  • ブログラムとしてテストを書きながら開発を行って行く方法
と定義をされました。次にTDDのサイクル
  1. つぎの目標を考える
  2. その目標を示すテストを書く
  3. そのテストを実行して失敗させる
  4. 目的のコードをかく
  5. 1で書いたテストを成功させる
  6. テストが通るまでリファクタリングを行う。
  7. 1〜6を繰り返す
との説明があり、次に、TDDの心として
  • 一つずつ、少しずつ
  • ひとりずつ対処する
  • すばやくまわす
  • 自分が最初のユーザー
  • 不安をテストに
  • 祈るのでは駄目
  • 命綱を編む
という内容の説明があり、TDDの真の目的は、「健康」とのこと
変化に対応するのは健康体のコードであり健康体のチームだけだそうです。

ここで終了してしまうと、あまりにもスピリチュアルに偏ってしまうので
最後に、数字の事例を上げられていました。だいたい。
実装時間が2割り増えて、バグが6割り減る
といった内容で、オープニングセッション終了。

次にyattomさん、grimroseさんによる、ペアプロのデモ
言語はJava、IDEはEclipse、内容はFizzBuzzでした
最初に、TODOリストなどを制作し、サクサクとメソッド名など
合意をされて、テストコードと実装コードを記述されていました。

個人的に印象的だったのはFizzの場合は、まず、ハードコーディングで
"Fizz"をそのまま返す仮実装を行い、そのあと本実装に移ったのに対して
"Buzz"の方は、一気に明白な実装をされていたことです。

休憩のあと、いよいよ実践練習、最初、個人的にはJava、Eclipseでいくつもりでしたが
ペアが余ったいるとのことで、思い切って hiralinさんと
Objective-c、SenTestingKit(OCUnit)で行なうことにしました。
お題は「LTSV」で、仕様は

ltsv = new LTSV();
ltsv.set("foo", "hoge") #=> null
ltsv.get("foo")             #=> "hoge"
ltsv.dump()                 #=> "foo:hoge\n"

ltsv.set("bar" , "fuga") #=> null
ltsv.dump()                 #=> "foo:hoge\tbar:fuga\n"

ltsv.set("foo", "piyo")  #=> "hoge"
ltsv.dump()                #=> "bar:fuga\tfoo:piyo\n"
となる。。

最初は、どっちがkeyでどっちがvalueみたいたところから勘がいがあったり
仕様もちょっとあやふやだったり、TO DOリストを雑に書いてしまい。
あとで見直しても。。。な状態だったり
(これは僕が悪いんだけど。。ごめんなさい、ごめんなさい)

イマイチ理解ができないまま、とりあえず進める感じで。。
途中、ようやくなんとか形になったところで、前半の演習が終了。
おやつ休憩があり、

その後、再び演習に。。
やはり、一番、頭を悩ましたのが、入れた順番にdumpするって床でした。
なんとか動くけど、同じようなif文の分岐が、何カ所かある。
いかにも不吉な匂いが漂うコードとなって時間が終了。。

その後、各言語のコードレビューがありました。
個人的にはやはり、Rubyとか普段、
ほぼ触ったこと無いコードを見れたのが新鮮だったと同時に
ちんぷんかんぷんな部分もあったり。。

レビュー後に、再び、t_wadaさんのクロージングがあり、
次の日から現場でどうやって戦うかということで
いくつか本を紹介されていました。

テストコードが無いコードがいっぱいある場合は?
→レガシーコード改善ガイド
 データベースを扱う場合は?
→データベースリファクタリング
非同期などのより複雑なシステムを扱う場合は?
→実践テスト駆動開発

最後に、「TDDはスキルです。一人から始められる。才能ではなく、習得可能。量は質に転化します。写経しましょう!!」と閉められました。

そのあと、その場でピザ等が振る舞われる懇親会がありましたので

そのまま参加。懇親会では、時間切れになってレビューできなかった
Scalaのコードレビューやら、ノラLTがありました。
ノラなのになぜか、マサカリが飛んでくる、かなり厳しめの内容だったり。

t_wadaさんが訳されたSQLアンチパターンの本
の争奪、じゃんけん大会等
なんだかんだで、21時くらいまでその場ですごして解散となりました。

今回は、本当に、これで何度目なんだよ。って感じだったのですが、
以前とは違って、ようやく現場でもテストコードを書くようになったりして
自分の状況も変わってきており、新鮮に、また新たな学びがありました。

しかし、それ以上に、疑問、迷いがふつふつとわいてくる悶々とした、
いつもの勉強会で感じる劣等感的なものも多く味わいました。

Act as professional
この言葉に従って行動しているか??
全然、駄目、駄目、果てしなく遠いです。

今後TDDBCとはどのような関わりをすべきかそれも自分にとっての課題の一つです
テスト系、アジャイル系の勉強会はとても好きです
とくに今回のような演習、ハンズオンがあるものは
やはり、フィードバックがあり、直接自分の脳がいろんな化学反応を起こします。

ただ、ここに甘えてはイケない、はやく次のステップへという思いも。。
まずは、先人に少しでも近づくために、写経でもしておくことにします。


2013年3月12日火曜日

Nagoya.Testing in Tokyo 3 -アジャイルなテストの見積りと計画づくり- #NagoyaTestingに参加

おつかれさまです。ZuQ9->Nnです。

 2013年3月10日(日)、「Nagoya.Testing in Tokyo 3 -アジャイルなテストの見積りと計画づくり- #NagoyaTesting」が開催されましたので参加しました。

場所はオラクルの青山で、参加は申し込み時に50名を超えるイベントでした

最初に、アイスブレイクで、あつまった人たちと自己紹介などを行い。
11:30くらいから「アジャイルなテストの見積もりと計画ずくり」との題材で
@kyon_mm さんからの発表がありました。

最初にいろいろと問題定義がなされました。
  • テストの観点ってなに?
  • テストの見積もりが難しい。
  • 品質ってなに?
  • テストはどうやってくぎるの?
  • どこまでテストすればいいの?

そして具体的なテストに対する言葉の説明
とくに誤解しやすく、覚えてほしい内容として
  • テストレベル
  • テスト技法
  • テストタイプ
  • テスト観点
の説明がありました。

次に、アジャイルのはなしがあり。
アジャイルはソフトウェア開発のスタイルであってプロセスでは無い。
方針とフィードバックをどれだけ早く共有するか?などなど。。

あとは、見積もりの経験談のお話があったり。
途中で話が終えなくなりました。。面目ない。

一つ心に遺ったことは
見積もり可能なテストはテスティングを導いてくれる。
見積もれないテストは行き当たりばったりってとこらへんでしょうか
ここらへんは実際のテスト見積もりの経験がすくないと厳しいんでしょうね。。

13時からお昼ご飯を頂き。


14時からは演習。
課題は
  • 今後社内で使うタスク管理のWebアプリをつくってほしい
  • いまはある程度つくりこんでいる状態のアプリが既にある
  • 現状の品質と、これからこのアプリを成長させていくときに必要そうなテストを考えた上で、 テストの計画をたててほしい
とのこと
15時30分までブレストをおこないましたが
感想としては。俺?今までどうやってテストしてたんだっけ?って感じ
何だろう、具体的なテストケースは思い浮かぶんだけど?
それってどういう目的?となると。言葉が出てこない。

15時30分からは休憩としてスゥーツが振る舞われ



休憩の終了時にテスト仕様書の発表・レビューがあり、
16時ごろから、再び見積もり演習の続きを。
結局、所属したチームでは議論が白熱してディベートだけで終了。

その後、ふりかえりなどをへて
18時より、その場で懇親会

懇親会ではノラLTなどもあり
なんだかんだで、21時くらいまですごしておりました。

今回の勉強会の感想ですが、
なかなか、普段曖昧にしているところだと痛感。
すっきりした部分もありましたが、余計に悶々とした部分が残った印象も
やはり、課題ばかりが大きく残りましたね。

実はテストは重要なんだけど、あまり参考書とか
体系だって勉強する機会はあまり無いんですよね。

テストそのものも現場で何となく。これが正しいのかとか
疑問にもつことすらあまり無く、改善ともなるとほぼやらないんですよねぇ。

特にテストの見積もりなんて、大概えいやぁって感じで、やっつける
根拠は。。となるとほぼ、勘でとか日常です。。

テストしないためには、制限をもうける。
そして、その制限の根拠を明らかにする他人を納得させらる
そこがポイントのようです。

今回はスタッフさんがかなりいきとどいてた印象を受けました。
改めてお礼を述べるとともに、
会場を貸していただいたオラクルさんに感謝いたします。

2013年2月24日日曜日

conferenceWithDevelopersに参加

お疲れさまです。ZuQ9->Nnです。

2013年2月18日(土)conferenceWithDevelopersが開催されたので参加しました。
場所は六本木ヒルズのGREEさん。なんと応募者200名を超えるビックイベント。
ただ、実際の参加者は。。50名くらいだったのでは無いでしょうか?

最近、コードを書くことを重視したいので
あまり発表会形式の勉強会の参加を控えていました。

今回は、発表者が著名な本などを執筆されており、
単純なミーハー根性で参加してみることに。。

朝10時から会場に、10時30分から会場の注意事項があり
いよいよ勉強会開始。

10:45~11:30 木下 誠さんの 『Dynamic Objective-C 2013』

あの、オートマティズムの本の作者さん。
キーワードは
  • static
  • dynamic
  • inter process
staticはメモリの話やARC。
dyamicは blocksでの拡張。
inter processはプロセス間通信。
Objective-cの言語としての奥深さを少しかいま見れる
そして、今後のObjective-cに期待、わくわく感を感じる内容でした。

11:45~12:15 小田 恭央さんの 『iPadで立体映像を表示する【ハコあに】 』

登壇者さんのがんばっていること

その1。東北ずん子
東北ずん子ってのは、このキャラのことです。

その2。「ハコあに」
「ハコあに」は3Dのディスプレイ。 実際がこちらです。

ハコにピラミッド型の鏡があり、
 iPadをハコの上にのせてプレイヤーはiPadに任せる。
3面に表示した映像を鏡に写すという、
かなりシンプルな構造 なかなか、楽しそうなガジェットでした。

これからは、スマフォ、タブレット単体ではなく
外につけるものと一緒に開発しましょうとのこと

12:15~13:15 お昼休み

会場、その場で、立食形式でサンドイッチが振る舞われました!! さすがはGREE !!

13:15~14:00 永野 哲久さんの 『けっこーすごいよ、Audio Unit』

Core Audio本の作者さん。 
iOS5からドラムマシンのようなモノが簡単に作れるようになったとのこと。

AU Graph、AU Labなどが紹介されていましたが、
日頃、まったく音楽に興味ない人間にはなにがすごいんだろうとう感覚。

Samplerも簡単に作れるとのこと
会場の反応も??って感じでした。
この技術はかなりマイナーで
本当に好きな人向けなんでしょうね。

14:15~14:45 武田 祐一さんの 『mixiにおけるiPhoneアプリ開発』

大規模になっていく中でコードをどう維持していくか。
開発で大切にしていることとして
  • 設計
  • コードベース
  • 保守性
  • テスト
  • CI
  • コードレビュー
スクラム開発をわりとがっちりとまもっているそうです。
テストコードやKIF、UIAutomation、Jenkinsでの自動テスト。。
コードレビューなど、本当に耳が痛いですよ。ww
まるでアジャイルの勉強会のような内容でした。

15:00~15:30 小野 将司さんの 『リアルタイムチャットSDKのできるまで ~ダンゴルのチャットを支える技術~』

Appbank Gamesの技術者さん。
akisuteの名前でも有名なかたです。

ダンゴルのリアルタイムチャットを作った時の話。
アカウントはメールとパスワードよりも電話番号だけの方が
より作成してくれるそうです。

チャットの実装はCometを模倣したそうです。
あとは、別の広告SDKとの比較やら
Unityとの連携などなど。。

実際のテストコードやらViewControllerのコードが
見れたのはとても参考になりました。

15:45~16:15 菅宮 佑介さんの 『いかにしてユーザーを手玉に取るか 〜ユーザーの行動の三手先を読んで実装する〜』

予定は15:45分からでたが、前のセッションがのびて15:50分に開始
UIの話をされていました。だいたいUIをかたり出す人は地雷だそうです。
自ら地雷認定してはなされていました。

女の子のエスコートも出来ないようじゃ
洗練されたUIは作れないですよ
との名言の持ち主。

GestureRecgnizerやUIScrollViewでのハマったテクニック、
バッドノウハウもおりまぜながらの解説。

UIViewのアニメーション、UIViewController。
コードの名前の付け方に及びました。

途中から、発表者が伊藤さんに変更して
開発体制などの具体的な事例の説明がありました。

最後は自社アプリの宣伝を、アニメーションがかなり作りこまれ
かわいい感じの動きを見せていました。

16:30~17:30 LT 1部

すでにセッションがのびて、開始時間が押し。
17時にスタート 。外出のある休憩があったので、
なんとトークの人が少ない状況にww

一人5分間での発表がありました。
個人的にはUIWindowをハックし、エラー原因を
シェイクで表示させるものでした

17:45~18:00 閉幕 懇親会

お昼ご飯と同じように、その会場内で立食で懇親会が行われました。



勉強会本編では、テストコードも普通
git、Redmine、Jenkinsなど、いまの流行のツールも、もちろん使っています。
コードレビューもツールを使って。。みたいな。

とれもうらやまく、そして、それが当然のようにそこに存在するって
印象がつよかったんですが、懇親会では、そんなの無いよってのも
聞けて、ちょっぴり安心。自分だけが取り残されている訳でも無かった。

一日がかりの長時間イベント. やっぱり、最後は集中力も欠けて、ヘトヘト気味。
 講義形式ということもあり、自分の知らないことばかり、
そして、自分には足らないモノばかり。刺激で視野も広がりますが
同時に情けない気分も大きくなってきます。
ぼちぼちとマイペースでやりたいことだけやって行くことにします。

2013年2月22日金曜日

Open Hack Day Japanに参加(3日目レポ)


おつかれさまです。ZuQ9->Nnです。

2013年2月16日-18日、yahoo株式会社で開催された
Open Hack Day Japan の最終日。成果発表会となります。
お昼12時から、平日にも関わらず、かなりの人が会場に。。

発表についての注意事項や、リハーサルなどを行い準備を行いました。。
13時から、いよいよプレゼン開始。。

70組もの人数でしたが一人90秒と短く。
また運営のスムーズさもあってどんどんと
自分の発表が近づきました。。。

そして、自分の発表。。。
今回は本名で応募、しかもUstで顔ばれしてしまっているので
発表内容は取りあえず、現状のところ秘密。。
というか、かなり恥ずかしい内容なので。。

Qiitaのときの発表よりもなんとかプレゼンが成功したので
まぁ成長したということでしょうか。。

発表のあと、やたらと興奮状態が覚めやらず、
その後の記憶は曖昧です。。

16時30分ごろにはすべてのプレゼンの発表は終了。
審査と結果発表がありました。。。

18時より、ちかくのLa Pausa(ラ・パウザ)という
お店を借り切っての懇親会がひらかれて
はじめは、なんとひとりぼっちの状況に。。
食事をしはじめていると

Yahooの社員で参加者のかたともふれあえるようになりました。
その後21時ごろまで食事を堪能しながら
うだうだと話をしておりました。




最優秀賞の人たちともお話しできましたが
なんと入社2年目だそうです。
この人たちが、今後それなりの立場になり
中心となって会社をすすめていくのかとおもうと
少々企業としては恐ろしいというか、
楽しみな部分もあるのではないでしょうか?

話して感じたことはYahooの人たちは
結構Geekで尖ったことも積極的みたいです。

なんだか、Googleに追い越され。また総合的メディアブランド
技術よりも広告収入、営業で稼ぐ。。という個人的な勝手なイメージを
持っておりましたが、まさしく「爆速」とうキーワードのもと
スピード感をもって開発していく印象を強く持ちました。
きっと今後、面白いサービスも産まれてくるのではと感じるものがありました。

あと。世間で思われているほど、リア充でもないし、
遊んでいる、チャラい感じでも無かったです。。

今回は、個人的にはかなり悩みと、
参加したこと、そのものを後悔し続けておりました。
特に一人での限界を感じることも多かったです。

しかし、最後には、ちゃんと発表会まで終わらせておいて
本当によかった、楽しかったと感じました。

また、参加してくださいとか言われたけど。。どうしようかなぁと。。
そのときのノリに任せようとおもいます。

本当に、今回のYahooさんのいきとどいた運営は、
非常にストレスも少なく、逆に神がかった印象を持ちました。

その裏には大変な苦労も多かっただろうなと想像しております。
本当に感謝に耐えません。
これからYahooを応援したくなる気持ちが非常につよくなりました。

本当にありがとうございました。