an SE diary

2013-12-10

AWS勉強会】CM re:Growth Developers.IO Meetup 01に参加してきた

2月以来のエントリ・・・

こんなに間が開いてしまった。

もうはてな記法とか忘れてしまっている。

2月以降の勉強会としては、SQLアンチパターンのイベントとか、java-jaDDDイベントとか、夏サミちょっとだけ、XP祭りMS Confなどに参加していました。どれも素晴らしいイベントでしたがblogサボってました。


言い訳はともかく、re:Growthに参加してきました。

AWSは仕事ではまだ本番環境で本格的に利用しているとはいえないですが、開発用のサーバなどでは利用しており、また来年前半にはRedShiftを使ったサービスを提供する予定です。RedShiftを試した時もshinyaa31さんの記事を見ながらやったこともあり(感謝)、これは参加しないとと思ってました。


会場のsapさんについた時には前説が始まっていたのですが、後ろに何人かビール飲みながらサブウェイのサンドイッチを食べている人が。

自分もビールとサンドイッチをGetして空いてる席に。しかもビールはエビス!


以下ざっくり感想です

  • shinyaa31さんが発表で喋ってるのを初めて見た。
  • じーまみーの都元さんが目指している先が更に進化している。
  • 横田さん(社長)ハイテンション

しかしクラスメソッドさんはどんどん人が増えていて、いろんなサービスを使いこなしているなぁ、という印象。

一人くらいうちのインフラの面倒を見てほしい感じだ。

いやまじで。


また、2回の休憩で後ろのほうでWeb系企業の方と、某H社関係の方と話をしていたら発表の時間まで食い込んでしまいました。

みんないろいろな場所で前を向いて頑張ってるんだなーと

改めて思いました。


こっちもがんばらんと。


やはりリファクタリングメニューに「名前変更」しかないIDE環境ではやっていけない。決断しなければ。(´・ω・`)

2013-02-18

[][]第1回業界中心会議

いまさらですが、1/26(土)に行われた、業界中心会議に参加してました。

togetterはこちら。


http://togetter.com/li/445319


岩永さん、neueccさんという、C#erならば一度はWeb上でお見かけしているであろうお二方のお話を聞けるというので、休日ではありましたがなんとか家族の許可をとって参加しました。


岩永さんは、負のスパイラル(忙しい→学ぶ時間がない→改善できない→更に忙しくなる・・)をチームで変えていこう!という趣旨の発表。

neueccさんは、2011年C# Advent Calendarで書かれていたModern C# Programming Style Guideのテーマの発表でした。

いずれもさすがの内容でした。

その後、パネルディスカッションがありneueccさんの毒舌ぶりを聞けてよかったです。

懇親会では、TypeScriptハッカソンなどに参加されているかたと少し話ができました。


C#いいよねー。

[]2/14終日と、2/15の午後、デブサミ2013に行って来ました。

togetterなどがあるので、つぶやく代わりにすっかりメモを取らなくなったので感想を中心に。

ただ、初日は結構自分のiijmioがつながりにくく、ほとんどつぶやけず。2日目は改善されていてそこそこ不自由なく使えました。


togetterはこの辺りからどうぞ。

http://togetter.com/t/devsumi


資料のまとめはこちらに

http://codezine.jp/article/detail/7003


2/14(木)

10:00〜11:55
【14-B-1】
3つの世界:エンタープライズソーシャル/ゲーム、スタートアップ
玉川憲(司会)/三谷慶一郎/伊藤直也/孫泰蔵

3つの世界のそれぞれの状況、未来についてお三方からお話があり、その後ディスカッションという流れに。

参加者の割合が、7割SI、3割Web、スタートアップ少しと言った感じだったのが以外だった。もっとWeb業界が多いかと思ってた。

SIの案件はやっぱり減ってるんだ。

効率化が一段落した後、付加価値をつける方向でアメリカとかは復活してるが、日本はできていないということでSIはやっぱり厳しそうだなーという印象。

スタートアップはバンドみたいにぱっと組んで、だめならやめられるようにという話も面白かった。


最後、SIの世界からWeb業界に人材が流れているけど、SI側で人材を確保するためにできることは何かあるか?という質問をさせていただいた。

三谷さんからは、立ち位置としてSI、Webとか考えるのは違うのではないかという話と、SIの縦割り意識をなくさないといけないという話をされた。

naoyaさんから、今までSIからソーシャルに来る人の面接をたくさんしてきたけど、転職理由の8〜9割が、SIではフィードバックが受けられないのでそれがほしい、ということだったそうです。

うちは小さな会社で、(でも縦割りは少しあるな・・)お客さん直だからフィードバックは問題なくあるんだけど人が来ないなー。

その点をアピールできていないのかも。考えなければ。


ちなみにこんな会社です。

http://www.mdingon.com/MdonWeb/


エンジニア募集もしてます。

http://www.green-japan.com/job/20650


13:10〜14:00
【14-D-3】
「SIの未来ってどうなのよ?」SIer大淘汰時代にAWS専業で新しいSIの形にチャレンジする企業の舞台裏
大石良

この日自分に一番刺さったセッション

クラウドを使うことを会社の方針として打ち出しているサーバーワークスさんのお話。

クラウドをやっていたおかげで、震災の時のボランティアでの日赤のサイト構築をすることができた。

胸熱だし、技術者ならこういうことができるようにちゃんと技術を身につけとくべきだよなと思った。


また、SIはなくらない、SIをディスってるのはSIの中の人だとのこと。

ただ、SIは「保険としての役割」「クラウドの各サービスの組み合わせにていかにソリューションを素早く提供する知識」

の2つが重要になってくるとのこと。

これは自分も同感なんだけど、ぜんぜんこのへん実務でできてないからやばいよなーと思った。

あとプレゼンは、フィードバックをちゃんと貰えばだれでもうまくなるとのこと。

うちも月一で情報共有みたいなプレゼンぽい発表の場はあるけど、フィードバックの仕組みはないな。改善できるポイントだ。


14:20〜15:05
【14-B-4】
チーム×ツール Team Foundation Server & Service "共感しActionできる開発基盤" アルティメイタム
長沢智

安心の長沢さん(&パワポ資料)クオリティ

ただ、今回はちょっとデモが駆け足だったような気がします。

自分の環境がTFSに舵を切る日はくるのかな。VSのgitサポートはでかいと思うけど。

今はTracLightning(trac+jenkins+svn)です。


15:25〜16:15
【14-B-5】
チケット駆動開発の本質
小川明彦/阪井誠

個人的にはあまり目新しい話はなかったかな。

ただ、アンチパターン的なものはあるある感があった。このようなものがまとまったようなものがあると面白いかも。


16:35〜17:20
【14-A-6】
ニコニコ静画電子書籍)の作り方 0みんながニコニコしてくれる読書体験を届けるために0
野口大輔

何日か前によしおりさんのblogのエントリを見ていたので、そこまで新しい話はなかったけど、

その考え方がちゃんとチームに根付いているんだなーというのが伝わって来ました。


17:45〜19:10
【14-B-7】
こわくない関数型言語
中野圭介/上野雄大/水島宏太/竹迫良範(司会)

中野さんのお話は、昨年夏の函数プログラミングの集いで話されたような内容で、とてもわかりやすい発表でした。

ディスカッションでは、F#には全く触れられず少し残念。


★2/15(金)

13:10〜14:00
【15-B-3】
ICTでクルマと社会をつなぎ、安全・快適で低炭素なモビリティー社会の実現に向けたHondaの挑戦
今井武

胸熱セッションでした。

最後のコマにHondaさんに話してもらえることになりました!というような岩切さんのツイートを覚えていたので、内容はよくわからなかったんだけれども参加してみた。

会場がE会場に変更になってしまったけど、これはもっと大きな会場で沢山の人が聞くべき内容。

hondaの車から走行情報を送ってそれを世の中の為に活用しているというお話。

震災のときに通れる道を把握したり、急ブレーキが多い地点に注意を促す案内を追加したりなど。

こういうことをITでやって行きたいし、今の業務でもこのような視点で考えるとできることはあるかもしれない、と思った。

Actionを探さなければ。


14:15〜15:00
【15-A-4】
大規模スマートフォンサービス開発の世界 〜無料通話アプリcommの現場から〜
長田一登

DeNAの中の様子がわかってとても興味深かった。

当たり前のようにAgileでやっていて、さすがだなと思った。

15人1チームとかきつそうだけど、そこから更に45人増員って・・・。

普通に考えたら地獄絵図ぽいけど4チームに分けてなんとかやってるとのこと。これもすごい。

ただ、これだけのパワーがあればを結合テスト自動化にかなり力を入れられるかも。

15:15〜15:35
【15-B-5】
SQLアンチパターン - 開発者を待ち受ける25の落とし穴
和田卓人

前日に本を買って全く読んでなかったけどますます面白そうだなーと思った。


16:35〜17:25
【15-A-7】
ワンクリックデプロイ 〜いつまで手でデプロイしてるんですか〜
吉羽龍太郎

一昨年の暮にたしか品川MS勉強会があったんだけど、エントリだけして参加できなかったので念願の聴講。

さすがRyuzeeさん、資料もわかりやすく話も面白い。

うちの環境ではCI結合テストは回しているけどデプロイまではできていないので、後一歩だ。

スキーマの管理と、デプロイが最後の壁だな。

しまった、データマイニングツールについてきこうと思って聞きに行くの忘れた。


17:45〜19:10
【15-E-8】
OpenDataとハッカソンで変わる世界
関治之/渡邉英徳/及川卓也/東富彦/中井康裕

もともとA会場に出たかったけど、Hondaセッションにでた熱でこのセッションに参加。

経産省の人も出てきて、面白かった。

もっとITで世の中をよく出来る、そのための取り組みとして面白かったし技術者としてそういう取り組みに関わって行きたいと思った。

たいした技術者ではないので、何ができるかというのはあるけど。


この熱さを、温度を下げずに社内に伝えなければ。

一人でも釣れるといいな・・・。


あと、JetBrainsのステッカー、TシャツGet!した。(名刺と引き換えに無料で配っていた、太っ腹!!!)

ゆーすけさん頑張ってください!セール期待しています!!

2013-02-16

社内でVBAテスト勉強会をやってみた

デブサミにも参加してきたけど、その前日にやった社内勉強会について書きます。


社内でテストを書いているチームが、ぶっちゃけ自分のチームしかいないので、他のチームにも広めたいな、という思いがありテスト勉強会をやることに。


うちの会社は、開発部隊以外にもサポート運用部隊があり、そこの人たちは割りとVBAなら使えるという人もいるので、まず初回はVBAを使ってやることにした。


さらっと言ってみたけど、これはなかなかハードルが高かった。

クラスはあるけど、基本的に何をやるにも色々と不自由だった。

それと、テストフレームワークを使ったことがないということ。


どんなのがあるかは、こちらのブログのエントリに詳しい紹介があるけど、とりあえず今回は最低限なものでいいや、と思っていたのとちょっと作ってみたかったので、超簡易的なものを自前で作ってみた。

(VBAのリフレクションぽいのとか初めて使ったよ・・・)

あと、ExcelVBAなんで、シートのセルをAssertするために、CSVの期待結果と比較するようなのも欲しかったし。



進め方はまず、t-wadaさんのTDDのこころのスライド

を見て、その後コーディング開始。

大体1時間半ほどで終了、ちょっと駆け足だったかも。

実際に使ったファイル群は以下のgithubにあります。


https://github.com/masakitk/FizzBuzzforVBA


反応としては、まずそもそも対象にしたかったVBAer(VB6er)さんたちには業務的な都合もあり参加してもらえなかったので、そもそも狙いが外れてしまったのがあった。

個別に伝える機会を作らないとなー。

参加してもらった人たちの手応え的にもいまいちだったかなー。


今後、javaC#で予定しているので、そちらは開発者の人たち(javaerさんが多い)に出てもらえると思うので、もう少し手応えを感じてもらえるような内容にしないと。

2013-01-14

あけましておめでとうございます。

1月も半分を過ぎようとしていますが。。。汗


昨年を振り返ってみるとトラブルがありつつも充実した年ではなかったかとおもいます。


* 2月に子どもとソリ遊びをしていて、後ろから追突されて骨折

* フルマラソンデビューがお預けに

* 勉強会もいくつかキャンセル

* Agile侍のやつでたかった。。

* でもファンコミュニケーションズ道場に参加した

* F#で業務アプリのバッチを書いた

* Rubyでデータ移行用のちょっとしたスクリプト書いた

* 仕事はそこまで残業多くなく、大トラブルもなかった

* でも自分的にはそこまで成果も残してないかも

* お客様の信頼は得られているようなのでそこはOK

* 読んだ本。「ザ・ゴール」「トヨタ生産方式」「Crean Coder」「テスト駆動開発」「入門Git」「初めてのRuby」etc・・・

* F# Advent Calendarに参加した

* IntelliJ Idea買ったった。(なけなしのお小遣いからですがなにか?)


今年の目論見としては


* クラウド(AWS?)使ったサービスをお客様に提供したい

* 今年も楽しくC#を書きたい

* F#も書きたい

* Rubyも書きたい

* 勉強用にJavaで作成中のトランプゲーム(ナポレオン)をAndroidアプリにしたい(Javaなんで)

* JMockItいいわー。というかそれ以外のjavaの魅力が・・・。

* Fakesつかえば簡単にC#にしてWin8アプリにできるか?

* フルマラソンデビューで3時間半を切りたい

* フジチャレ200に5歳になる息子と一緒に出たい

* 1日でもいいから丸一日トレイルランニングしたい

* IT関係の勉強会をサポートする側で参加したい

* 本腰いれてAgile的なものを社内に広めたい


と言った感じで頑張ります!

2012-12-22

[]NaturalSpecでSeq確認NG時のメッセージをわかりやすくする

これは F# Advent Calendar 2012 の22日目のエントリです。

21日目は@jsakamotoさんのF# スクリプトで GanttProject の .gan ファイルを加工するです。

まだ空いている日があったので、直前の参加表明、さらにとても小ネタで恐縮なのですが参加させて頂きます。


NaturalSpecでSeq、Listなどの内容を検証する場合に、

  Given x
    |> When function
    |> It should contain_all_elements_from expected
    |> It should contain_no_other_elements_than expected
    |> Verify

とかやると思います。

(その節は@gab_kmさんに助けていただきました。ありがとうございました。m(_ _)m)

その時にちょっと困ったことがあったのでそれをネタにしたいと思います。


まず、1から3までのリストの確認をしてみます。

パラメータをそのまま返す


let returnThrough seq = seq

という関数を用意して、テスト結果のメッセージを見ていきます。

成功するテストケースでは、


[<Scenario>]
let リスト確認3までOK () =
  let input    = [1;2;3]
  let expected = [1;2;3]
  Given input
    |> When returnThrough
    |> It should contain_all_elements_from expected
    |> It should contain_no_other_elements_than expected
    |> Verify

Scenario: リスト確認3までOK
  - Given [1; 2; 3]
     - When 
      => It should contain all elements from [1; 2; 3]
      => It should contain no other elements than [1; 2; 3]
  ==> Result is: [1; 2; 3]
  ==> OK
  ==> Time: 0.4129s

となります。

失敗するケースだと、


[<Scenario>]
let リスト確認3までNG_実行結果に3がない () =
  let input    = [1;2;2]
  let expected = [1;2;3]
  Given input
    |> When returnThrough
    |> It should contain_all_elements_from expected
    |> It should contain_no_other_elements_than expected
    |> Verify


Scenario: リスト確認3までNG 実行結果に3がない
  - Given [1; 2; 2]
     - When 
      => It should contain all elements from [1; 2; 3]
  Expected: True
  But was:  False

こんな感じのメッセージが出ます。

これくらいであれば、(ここではGivenに検証対象のリストがあるので)ぱっと見で何が違うかわかります。

でも、要素が増えて



[<Scenario>]
let リスト確認30までNG_実行結果に25がない () =
  let input    = [1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;21;22;23;24;24;26;27;28;29;30]
  let expected = [1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;21;22;23;24;25;26;27;28;29;30]
  Given input
    |> When returnThrough
    |> It should contain_all_elements_from expected
    |> It should contain_no_other_elements_than expected
    |> Verify

Scenario: リスト確認30までNG 実行結果に25がない
  - Given [1; 2; 3; 4; 5; 6; 7; 8; 9; 10; 11; 12; 13; 14; 15; 16; 17; 18; 19; 20...
     - When 
      => It should contain all elements from [1; 2; 3; 4; 5; 6; 7; 8; 9; 10; 11; 12; 13; 14; 15; 16; 17; 18; 19; 20...
  Expected: True
  But was:  False

とかなると、リストの全要素が表示されないので、ちょっとこれではパッと見で何が違うのかわからない。

また実際はGivenがそのまま実行結果にはならないので、要素が少なくてもわからないと思います。

違うところはここだよ!というメッセージがほしいですね。


なのでcontain_all_elements_fromを書き換えてしまいましょう。

例えば同一モジュール内で、以下の関数を再定義してしまえば、


let contain_all_elements_from x y =
    printMethod x
    let actualNotContained = x |> Seq.filter (fun element -> not (Seq.exists ((=) element) y))
    let foundAll = Seq.isEmpty(actualNotContained)
    if not foundAll then
        toSpec ("/actual is not contained:" + (prepareOutput actualNotContained))
    IsTrue,true,foundAll,y

テスト結果はこうなります。


Scenario: リスト確認30までNG 実行結果に25がない
  - Given [1; 2; 3; 4; 5; 6; 7; 8; 9; 10; 11; 12; 13; 14; 15; 16; 17; 18; 19; 20...
     - When 
      => It should contain all elements from [1; 2; 3; 4; 5; 6; 7; 8; 9; 10; 11; 12; 13; 14; 15; 16; 17; 18; 19; 20.../actual is not contained:seq [25]
  Expected: True
  But was:  False

これで一発で25が実行結果に存在しないことがわかります。

同様に、contain_no_other_elements_thanについても


let contain_no_other_elements_than x y =
    printMethod x
    let found = y |> Seq.forall (fun element -> Seq.exists ((=) element) x)
    let expectedNodContained = y |> Seq.filter (fun element -> not (Seq.exists ((=) element) x))
    let foundAll = Seq.isEmpty(expectedNodContained)
    if not foundAll then
        toSpec ("/expected is not contained:" + (prepareOutput expectedNodContained))
    IsTrue,true,foundAll,y

と定義してしまえば、


[<Scenario>]
let リスト確認30までNG_期待結果に25がない () =
  let input    = [1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;21;22;23;24;25;26;27;28;29;30]
  let expected = [1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;21;22;23;24;24;23;27;28;29;30]
  Given input
    |> When returnThrough
    |> It should contain_all_elements_from expected
    |> It should contain_no_other_elements_than expected
    |> Verify

Scenario: リスト確認30までNG 期待結果に25がない
  - Given [1; 2; 3; 4; 5; 6; 7; 8; 9; 10; 11; 12; 13; 14; 15; 16; 17; 18; 19; 20...
     - When 
      => It should contain all elements from [1; 2; 3; 4; 5; 6; 7; 8; 9; 10; 11; 12; 13; 14; 15; 16; 17; 18; 19; 20...
      => It should contain no other elements than [1; 2; 3; 4; 5; 6; 7; 8; 9; 10; 11; 12; 13; 14; 15; 16; 17; 18; 19; 20.../expected is not contained:seq [25]
  Expected: True
  But was:  False

こんなかんじになりすぐに分かって便利ですね!

これはまさにF# advent calendar2日目のNaturalSpec 実践入門

で書かれている、テスト用DSL拡張の一例になりますでしょうか。

(ていうかみんなこういうこと普通にやってるからあまり話題にならないんだろうな、多分)


これ、案件が一段落してから書いたのでホントは絶賛開発中に自分が欲しかった。。。


次は、今のところ空き番?で、最終日24日は@nobuhisa_k さんです!