2011年5月30日月曜日

JJUG CCC 2011に参加してきました。

先週の火曜日(2011/5/24)JJUG CCC 2011に参加してきました。

ちょっと、このイベントの周辺の日付で
いろいろとイベント参加 + LTを2本とかいうハードスケジュールだったので、
ブログの更新が遅くなりました。

で、かつ私自身はノートを取らず、Twitterでつぶやいているので、
頭の中を全てが素通りしていますので、
印象だけを記述します。

おそらく誰かがTogetterなどでまとめられていると思いますので、
詳しい実況はそちらを参照してください。



G-1 基調講演 IT技術のコンシューマ化とそのインパクト 丸山不二夫 (日本Javaユーザグループ 会長)
日本Androidの会、会長でもある丸山先生の講演です。

この講演の中で、コンシューマー化という言葉がキーワードに挙げられています。
これは、コンピューターが企業や組織だけのもので
なくなっているという現状を指摘したものです。

かつてはコンピューターに触ることができたのは、
職場や大学の計算機室といった限られた場所だったのに対して、
今は家庭でも触ることができるようになっています。

それ以上に、企業が従業員に割り当てるマシンは、
従業員が自宅に持っているマシンよりもスペックが劣っており、
いまやエンタープライズというのはズタボロになっている
といったことを述べていました。(というか、そのように解釈しました。)

まぁ、実際、私の職場で私に与えられているマシンは、
あまりに低速過ぎて、家にあるマシンと常時持ち歩いているノートに比べて、
圧倒的に遅い。

どんなにいいプログラマーを雇っても、
与えられるマシンが低速であれば、
生産性など向上しないとは思います。

さて、コンシューマー化といったのはもう一つ別の射程があり、
それは、新技術の開発におけるコンシューマーの貢献度が、
エンタープライズの貢献度よりも比重が大きくなっているということで、
今後はコンシューマーというか一般の人達の存在を無視し続けるというのは、
企業にとってもあまり有益な戦略ではないということです。

私はTwitter上で、頭の硬い上司に対する愚痴をつぶやいていたりしますが、
彼がいつも述べるのは、
私が会社以外で行っている活動が、
あくまで実用的でないと断じているということです。

私はAndroidテスト部という場所で様々な方と交流することで、
良い刺激を受け、新しい目標を立てたりしているわけですが、
そういうのは彼、上司には役に立たないものだというふうに解釈されているわけですね。

さて、愚痴を言っていても仕方がないですので、
本題に戻りましょう。

コンシューマー化というのはもう一方で、
クラウド技術の進展ということも挙げられていました。

Appleではどうやらデータセンターを構築しているらしく、
おそらく音楽かなにか映像の分野で配信事業を始めるであろうということが
想定されています。

私自身は自分でサービスを立ち上げるほど、
サービス企画能力が優れているわけではないのですが、
まずクラウドを用いた、コンシューマーから始まる技術の発展が今後は
見逃せないということを実感した講演だったと思います。

G-2 基調講演 継続的インテーグレーションの未来 川口耕介
川口さんによる、Jenkinsの今後進む道のおはなしでした。

全般的に私には何をしゃべっているのか、ちんぷんかんぷんでしたorz

ただ、自動テスト、自動デプロイ、ありとあらゆるモノを自動化して、
人間は人間でしかできないことを行うという基本的な考え方が伝わってきていたと
思います。

そういえば、弊社では未だにリブ管とかいう、Jenkinsで出来ることを手でやっているという
悪しき習慣が残っていますが、
まあ、そういう人たちにJenkinsを進めても、
自分たちの仕事がなくなるとかで、抵抗されるのだろうな
なんていうきがしました。

実際はそうでないと思っており、
マシンでできることはマシンで徹底的にさせて、
人間だからこそ提供できる価値を提供することが
重要なのではないかと思います。

ちなみに私はJenkinsほとんど触ったことのない、ズブの素人ですが、
Jenkinsは今後弊社でも確実に取り入れていきたいと思っております。

A-1 Java SE 7 で切り開く新しい Java の世界について 寺田佳央 (日本オラクル株式会社)
Java7は7/7に発表されるようです。

大きな目玉としては、NIOのバージョンアップが大きく取り上げられていました。
今までjava.ioパッケージでコーディングしていたものが、
比較的コード量が少なくコーディングできるあたりは非常に好印象な感じがします。

あとは、Exception処理が一度にまとめられるあたりは待望の機能といった感じがしました。
hogehogeExceptionが何列にも表示されるのは、
正直面倒臭い。というかコピペ大量だし。

ただ、残念なことは、弊社の一番大きなプロジェクト、java1.4なんですよね…
このプロジェクトにいるプログラマー、オートボクシングとか、ジェネリクスとか、
拡張for文とか、@interfaceとか知らないので、
Java7が導入されるのは何十年か先な気がする…


C-2 プログラミングG* 奥清隆 (日本Grails/Groovyユーザーグループ)

最近、なにかと話題の(?)Groovyのプログラミングについてのおはなしです。
Groovyの紹介という感じですが、ツールを作るとか、ちょっとしたスクリプトをJavaでさせたい
なんていう場合にはかなり便利な言語だと思います。

Javaで開発している人は、ちょっとしたスクリプトをやるには、
他の言語、たとえばRubyとかPythonとか、Perlとかを覚えなければなりませんが、
そういう人にこそGroovyを使ってもらいたいと思います。

いや、覚えろオレみたいな…


Node.jsのお話

昨年の秋頃からNode.jsは気になっていたのですが、
日本のコミュニティの状況を聞くべく、参加しました。


2011年5月27日金曜日

Androidテスト部の宣伝してきました。

ワイヤレスジャパン2011でAndroid LTセッションがあり、参加してきました。

たまたま日本Androidの会にてLT参加者募集ということでしたし、
実は『Androidテスト祭り』実行委員にも関わらず何のタスクもなかった
(できるものが何もなかった)ので、
宣伝がてら参加することにしました。

いや、こういう書き方すると、
イヤイヤ参加しているように読めますが、
実際は目立ちたがり屋なので、
喜んで参加している次第です。


全体的な印象ですが、やはり管理者層の方が多く、
ワイヤレスジャパンでAndroidの情報収集をしている人は
これからAndroid開発でのビジネスを考えている方のようでした。

そんなわけで町田支部の@ngsw_taroさんのAndroidアプリ開発LTは
熱心にメモを取られている方が多かったように思います。

で、私のLTですが、
タイトルは『Androidテスト祭り~僕とテストしてRIA充になろうよ』。

で、これがその資料です。


結果的にはすべりまくりでした。

  • 「ねえ、僕と契約して魔法少女になってよ」というネタはプログラマーには受けるネタですが、管理者層の人にはさっぱり伝わらないこと
  • ワイヤレスジャパンでAndroidの情報を収集している人は既にリア充(いや、そういうわけでもないだろうけど)なので「RIA充」と言っても意味が通じないこと
  • 「王子で王子が語る」というベタなネタは意外と受けが良いこと

こんな感じで、あとで司会の関西の方に突っ込まれまくりました…

ただ、まあありがたい事に私のイベントの周知もメモをとってくれている方を
ちらほら見かけましたので、
宣伝としては成功したのかもしれないような気がします。

2011年5月22日日曜日

じ、実はJenkins勉強会にも参加してきたんですっ

実は金曜日にも勉強会に参加してきました。
『第三回Jenkins勉強会』です。

土曜日の朝にこの記事を書き始めたのですが、
DevLoveに参加するために家を出る時に、
保存するのを見事に忘れて、
今、書きなおしています。

で、結構目の前で起こることにはすぐ反応できるのですが、
過去のことを思い出すのはなかなか厳しいので、印象だけ記録しておきます。



Jenkins現状報告 by 川口さん
川口さんからのJenkins開発の現状報告です。

○racle社との離婚騒動の後における、
ダウンロード数やコミット数による比較を行っていました。

全般的にはJenkinsの方が活動が活発であるという事だそうです。

この発表を聞いていた時から感じていたのですが、
川口さんは「○racleとの離婚」という比喩を用いていたりと、
結構お話をするのが上手な方だなと思いました。

RubyによるJenkinsプラグイン開発 by 川口さん
世の中すべてがJavaプログラマーという訳ではなく、
Rubyを使っている人、Pythonを使っている人など、
他の言語を使う方もいます。

それらLL言語を使用している人を潜在的ユーザーと定義し、
Jenkinsを広めようということで、
特に今回はRubyに特化したお話でした。

Jenkins超初心者な私はJenkinsはJavaオンリーでは?などと
思っていましたが、
そういえばテスト部部長が、
コマンドラインでできるものはなんでもJenkinsで走らせられる
と言っていたのを思い出して、
RubyとかPythonでもできるだろうな~なんてレベルで聞いいていました。

余談ですが、川口さんはIntelliJ IDEAユーザーで、

@masanobuimai IntelliJ使えば川口さんみたいになれるよッ!!ってオレが言っても説得力ないけど。|qω・`)チラッ RT @ikeike443: 川口さんIntellijユーザー #jenkinsstudy

というツイートがあり、私のIntelliJ IDEA熱がアップしました。

Jenkinsと一緒にTracプラグイン開発 -UT/IT自動化のコツ- by @wadatka
普段はPythonのプログラマーの@wadatkaさんによるPythonでのJenkins使用例の発表です。

ND社に所属ということで、開発プロセスはWFでお話をされていましたが、
最終的に品質向上などの目的でJenkinsを利用しているとのことでした。

今後ND社さんからは
Trac + svn + jenkins
のパッケージを配布しますという宣伝があって、
みんな爆笑しました。

また、10末にJenkins本を出版するとのことで、
ND社さんって、同じN系列の会社だけど、
比較的自由になんでもやれるのでいいな~と思いました。

ただ、これはとなりの芝生は青く見える的な何かだと思いますけどね…

「これで君のインテグレーションは――始まりも、終わりもなくなった」~RailsプロジェクトでふつうにJenkins ~ by 永和さん
永和さんの始めたサービス、価値創造サービスにおけるJenkins活用例です。

永和さんといえば、RoRでアジャイルですが、
スローテスト問題でお困りとのことです。

設定か何かの関係からか、
Jenkinsで処理を分散することができないために、
テストに時間がかかってしまうとのことです。

それでも、1日に2~20回はテストをしているというので、
弊社のような2週間かけて1回テストするよりも強固なテストを行っているな~
などと思いました。

なお、解決方法として、
リポジトリへのpush駆動テストなどが提案されていました。

PHP開発でのJenkins by @yamashiroさん
Python、Rubyときて次は潜在的ユーザーがかなり多いと思われるPHPでのJenkins活用例の紹介でした。

発表前の不手際もあって、
ネタがバレてしまうなどというハプニングもありましたが、
いわゆる女子力ネタを書いている人がどんな人なのかわかって、
中の世界を垣間見た感じがしましたw

内容は準備不足だった感が否めませんが、
元々の課題を聞くとなるほどと思いました。

というのもプログラムコードが2万行もあるPHPファイルを
どうすれば減らせて、テストが出来て、CIできるかという課題があったようです。

まだ、Jenkins管理下にやっとおいたという感じらしいですが、
課題を解決できてリファクタリングも可能になれば、
より効果を確認できてうしし~みたいになるかなと思いました。

全体的な印象ですが、
発表者たちもまだまだ勉強中という感じで、
時折川口さんからアドバイスを頂いたり、
これはこうしたほうがいいといった活発なアイデアが出てきたりして、
レベルの高い勉強会であると思いました。

おそらく、毎回川口さんは参加されているようですので、
私もこの勉強会で何か発表できるといいなと思いました。

あと、実はこの日からGroovyに取り組み始めて、
kimukou_26さんから紹介されたGroovistきょんさんや、
Twitterでフォローさせていただいているいろふさんとお会いすることが出来ました。

Twitterは有名人などを気軽にフォローできますが、
やっぱり実際にお会いするとより親近感を持つことができますね。

この記事を読んでいる皆さんは普段から勉強会に参加されている方が
多いと思いますが、
勉強会というのは人間関係を広められるのでとてもいいですね。

DevLove HangarFlight に参加してきました。

勉強会ラッシュの一週間の締めとしてDevLove HangarFlightに参加してきました。

私は勉強会デビューが最近なので初参加となりましたが、
DevLoveはかなりの実績のあるイベントで2008年から開催している(もっと前から?!)ようです。

勉強会などは大概ATNDで検索していますが、
このイベントはTwitterで知りました。

発表者や内容を見てみると、
面白いものがいっぱいありそうで、どのセッションに参加しようか
結構悩みました。

とりあえず、以下、私が参加したセッションの内容というか印象を…


いま敢えてJava言語について話そう - 知ってたはずのJava言語
『Java the Good Parts』の監訳者矢野さんによるJavaについてのお話。

Java言語や最近はやりのScala、Ruby、Pythonなどの比較から、
Java言語を特徴付けるものは型システムであるという説から入ります。

今後導入されるであろうラムダ式についても、
最初のラムダ式の提案

{
    object.doSomething();
}

は抽象度が高いが、あとから提案された

new Handler(){
    onject.doSomethig();
}

の方がJavaらしいという経緯があるなどの説明がありました。
(ここでいうJavaらしいというのは型システムが適用されており、かつインスタンスの生成にnewが使われているということ)

この後は『Java the Good Parts』の目玉といっても構わないInterfaceにまつわるお話になります。

ここで矢野さんが提案するのは
Javaはオブジェクト指向と言われているが、
むしろInterfaceでプログラムが何をしているかを記述する言語、
つまりInterface Drivenな言語ではないかということです。

これはExceptionの概念にも及ぶ考え方で、
Userという概念があって、#findByName(String)というメソッドがあったときに、
FileNotFoundExceptionSQLExceptionが発生するのはおかしくて、
UserNotFoundExceptionが発生するのが妥当であるという考えになります。

FileNotFoundExceptionSQLExceptionがおかしいのは、
これらの例外が発生するというのは、概念の中で特定の実装を想定しているということを含むからで、
Userという概念はあくまで概念であって実装を含むべきではないからであるというわけです。

たしかに、このへんは共感する部分があります。
というのも、かつて私が所属していたプロジェクトで、
例外処理の最中に、#getOracleErrorCode()みたいなコードが普通に書いてあって、
なにそのOracleマスター的な実装、みたいなことを感じたことがあります。
(ましてや、このコードが書かれていたシステムのDBはSQLServerという、ちょっと素敵過ぎる状態)




インターフェース指向設計というのは非常に興味深いものですが、
すこしだけSIer泣かせな部分もあって、
インターフェースを書きまくると、
ファイル数が半端無く増えます。

実際、別のプロジェクトでインターフェース作りまくっていたら、
PM、というか上司に、「なんでそんなにファイル作るの、馬鹿か?」みたいにdisられたことがあります。

あとで、このあたりのことを矢野さんに伺ったときに、
「たしかにSIerだと嫌がるかもしれませんね(苦笑)」と言っていました。



ちなみに、私の今回のDevLoveの目的は矢野さんの話を聴くことだったので、
このセッションで目的は達成。

おまけで矢野さんに『Java the Good Parts』にサインもらいましたw


とある会社のtrac事情 ~不具合管理 からタスク管理へ~ (仮)
Shibuya.tracを主催されているかぬさんのTracにまつわるおはなし。

どこのSIerでもプロジェクト管理の定番といえばExcelな訳ですが、(って、オイ)
  • Excelから脱却
  • Apache CGIベースのチケット管理
  • Tracとの出会い
  • さらに踏み込んだ活用
といった順番でお話されました。

印象に残ったのが、
Tracでも定着させるのに三年かかった
ということで、
どこの会社でもExcelから抜けられないんだよな~と思いました。

あとでかぬさんにお尋ねしたところ、
トップダウン、ボトムアップの両面からじっくりやっていくことが大事だよ的なアドバイスと
Shibuya.tracシールを頂きましたw

ちなみにかぬさんにたずねればシールをもらえる旨教えてくれたのは
きょんさんです。

@afukuiと語り合おう ?わしの30年を引き出してみぃ?
@afukuiさんというベテランプログラマー(アーキテクト)に質問をぶつけてみようというコーナーです。

チームに分かれて、質問を洗い出して、
ぶつけてみるという感じの流れでした。

生来の目立ちたがり屋精神が発揮されて、
質問の第一番を飾ってみました。

とりあえず、「メンバーの皆にテストを書かせるにはどうすればいいですか?」
というここ半年取り組んでいる課題をダイレクトにぶつけました。

返ってきたのは、
「なぜテストが大事なのか、その思いをぶつけること。そして品質が大事なのはなぜなのか、その思いをぶつけること」
という回答でした。

そして、テストには二種類あって、
  • TDDのような振る舞いを実装するためのテスト
  • 品質を保証するためのテスト
があり、(このあたりは井芹さんも言っていましたが…)、
TDD→ペアプロを実践する。
品質→これはじっくりテストを書いておく
という解決方法もあるのではないかというアドバイスを頂きました。

最近、私は読書量が減っているので、
自分の思いを伝えるためのボキャブラリーが減っているなと感じているのですが、
「思いをつたえる」というあたりは怠っていたなという感じはしましたし、
その「テストへの思い」って何なんだろうともう一度再考するきっかけをもらったと思います。

このブログを読んでいる方などほとんどいないと信じていますが、
結構私の務めている会社では、
テストっていうのはやらなくてはいけないと誰もが思っている事なのですが、
手動でテストするということに慣れていて、
自動でテストするというと、(´・ω・`)ショボーンという顔されてしまうんですね。

で、テストっていうのはとくにリグレッションテストについては、
非常に神経質にしなければならなくて、
これはしっかりやっておかないとあとで痛いしっぺ返しを食らいます。

それと同時に、特に弊社ですが、チェックリストというあのクソ忌まわしいものがあって、
それでチェックすればするほど「レグレッションの観点でテストを洗い出していること」とかいう
なんだこのクソ抽象的なチェックリストはなんてものもあったりして、
こんなチェックリストで無駄にテスト項目の時間を消費するんだったら、
テストコード書いとけよなとか思ったりするわけですね。

ただ、ベンダーの人にすれば、レグレッションテストの工数を見積に加算するわけで、
テストコードがあるほど、テストの工数が増えて、儲かるという目の前の利益に目が行きがちで、
レグレッションテストというのはSIerにとっての癌だと私は思っていたりします。

ま、他の方の質問としては、ウル覚えで申し訳ですが、
30過ぎてからプログラマーになったんだけど、どうなのよ的な質問がありました。
福井さんは「コードを書きまくれ」というアドバイスが有りましたが、
私も同感です。

特に私は勉強本を読んでもあまり覚えないので、
指で覚えるということを実践して、頭で考える前にすぐ指が動くようにしたいですね。
で、その洗練された指の動きは、コードを書きまくって、覚えるしかないと
私は信じていますので、この考え方は非常に納得しましたね。

あとは女子大生PHPerのどうやって勉強するかの話で、
福井さんは「おじさんに聞く、コミュニティに参加する、OSSのソースを読む」ということを提案されていました。

ちなみに私が「女子大生PHPer」とつぶやいたところ、キョンさんがGroovistにしようと語りだして、
この女子大生PHPerはなかば強引にGroovistにしてしまおうという流れになりました。

まあそのうち、東京Groovyなんて勉強会を開いてみたいななんて思ってみました。


俺たちのハンガーフライト整備士
とりあえず、振り返りセッションです。

チームに分かれて議論しましたが、私のグループでは、
  • 今後の自分のキャリアどうするか
  • チームを強くするにはどうするか
という二つの問題に別れたと思います。

ただ、ひとつ共通の解があって、
一人で問題を抱えても仕方がないのではないかと思ってみました。

なお、この時、「私を勝手にGroovistにしないで、きゅんきゅん」と女子大生PHPerに怒られました。



「次の時代を作るのは、老人ではない。」 ボースンの白昼夢
あと二年で定年という方のお話でした。

もと海上○安庁に務めていた方の計算機との出会いと、今後やりたい事を熱く語ってくれました。

ここで気になったのは「老人ではない」というキーワードなのですが、
@jojoAtHanawaさんは、話を聞いても老人ではないと思いました。
後二年で定年とおっしゃっていましたが、
いや、このチャレンジ精神は、弊社の若手社員に見習ってもらいたい。
というより、弊社の若手社員のほうが老人に見える
そんなことを感じました。

これは安西監督の名台詞「あきらめたら、そこで試合終了ですよ」を思い出しました。
プログラマーももうこれ以上技術を追いかけるのを諦めたとしたら、
「エンジニアとしてもう老人になってしまう」のかと思いました。


と、まあこんな感じでしたが、
会場ではいろいろ初対面のかた、Twitterでフォローしているけど、
はじめましてなんて方もいらっしゃってびっくりでした。

個人的には、kimkou_26さんアラさんとご挨拶していただいたのが印相的ですね。

とくにアラさんにはびっくりしました。
アラさん宛に返信を書いていると、後ろから突如、
あ~、それ、あたしですと声をかけられてびっくりしました。
きれいな方で二十歳で、おれのヨメさんになってくれないかな(ピピーッ。イエローカード!)、、、なんて妄想を抱きました。

ちなみに、彼女とともにキョンさんとキムコウさんの下でGroovistに成長していきたいと考えております。

そんな訳で、次のDevLoveあったら、また参加したいと思います。

以上、駄文失礼をば失礼いたした

2011年5月2日月曜日

HttpComponentsのプログラミング…始めたばかり

ほとんど自分メモ。
Apache Http Componentsでシクったので、自分メモ。

Good!な例

public String getResource() throws URISyntaxException,
        ClientProtocolException, IOException {
    URI uri = URIUtils.createURI("http", HOST_NAME,
                    PORT_NUMBER, PATH_NAME, queryString,
                    null);
    HttpGet hGet = new HttpGet(uri);
    HttpClient client = new DefaultHttpClient();
    return client.execute(hGet, new BasicResponseHandler());
  }


BAD!な例

public String getResource() throws URISyntaxException,
        ClientProtocolException, IOException {
    URI uri = URIUtils.createURI("http", HOST_NAME,
                    PORT_NUMBER, PATH_NAME, queryString,
                    null);
    HttpGet hGet = new HttpGet(uri);
    HttpClient client = new DefaultHttpClient();
    HttpEntity entity = client.execute(hGet);
    InputStream input = entity.getContent();

    //.....
  }