ブログ

  • Mockito でテストしようとして java.lang.NoClassDefFoundError になる場合 – Android

    Mockito でテストしようとして java.lang.NoClassDefFoundError になる場合 – Android

    先月JUnit勉強会を開催しまして、

    JUnit勉強会 in 松山 – “REVIVAL” #season1

    その時に仕掛ったモックをあらためて使おうとしたところ、
    “java.lang.NoClassDefFoundError”
    となって先に進めない状況が続いていました。

    開発環境は、Googleが提供しているADT-Bundle版です。

    Get the Android SDK

    結局、ビルドパスの設定でMockitoをライブラリに追加したのが良くなかったようです。

    例えば、

    • テスト対象: TipsCalendar
    • テストプロジェクト: TipsCalendarTest

    の場合。

    javabuildpath-project
    Java Build Path – Projects

    テスト対象プロジェクトが指定されていること。

    javabuildpath-library
    Java Build Path – Libraries

    ターゲットのAPIとその依存関係が指定されていること。

    ※ここに手作業でmockito-all-1.9.5.jarを追加するとタイトルのエラーになりました。

    ビルドパスを編集するのではなくて、テストプロジェクトに libs フォルダを作成してその中に、

    • mockito-all-1.9.5.jar
    • dexmaker-1.0.jar
    • dexmaker-mockito-1.0.jar

    これらのファイルをコピーすればOKでした。

  • WordBench愛媛 – 春のお茶会を開催します。

    WordBench愛媛 – 春のお茶会を開催します。

    新年度が始まりましたね。
    フレッシュな気分で、新しい環境で皆さんそれぞれご活躍のことと思います。
    さて、WordBehch愛媛もおかげさまで登録メンバーが増えてきまして、せっかくの地域コミュニティですので実際にお会いして情報交換ができればと思いましてお茶会をセッティングしました。
    まだ席がございますのでお時間ありましたらお気軽にご参加ください。

    参加登録はATNDからお願いします。
    http://atnd.org/events/38295

  • JUnit勉強会を開催しました。

    3月12日の夕方からJUnitの勉強会を開催しました。

    イベントの案内ページはこちら。
    JUnit勉強会 in 松山 – “REVIVAL” #season1

    教材は、”JUnit” や “Tutorial” といったキーワードで検索したネット上の記事と
    WEB+DB PRESS Vol.69, そして「JUnit実践入門」を辞書的に(?)使いました。

    セッション1

    Eclipse, JDKなどは各自インストール済みだったのでプロジェクト作成から開始。
    JUnitライブラリの組み込み方や、テストクラスの追加の仕方などうっかりミスがあったり。それとAssertThatですが、参考にしたTutorial記事のimportの仕方に引きずられていたようで、勉強会のあとでimportの記述の仕方を見直したところ問題なく利用できました。

    振り返りの様子
    2013-03-12-junit-s1

    参考
    The Hamcrest Tutorial
    JUnitMatchers(JUnit API)

    セッション2

    ParameterizedTestやTemporary Folder、@Ruleなど。
    何となくキーワードをながめるだけではよくわからなかったりしますが、仕事のどういう場面で使うとか解説してくれる方がいてとても勉強になりました。逆に、あまり使っていないこともわかったりして、今後の仕事で使ってみたいなど刺激にもなったようです。

    振り返りの様子
    2013-03-12-junit-s2

    セッション3

    EasyMockをテーマに議論しました。
    そして全体を通しての振り返り。今回はTutorialに沿って進めてみましたが、次回は実際に課題を決めてテスト->コーディングを繰り返してみたいと思います。

    振り返りの様子
    2013-03-12-junit-s3

    コーヒーブレイク

    たまたま誕生日の方がいらっしゃいましたので、サプライズパーティーとなりました。
    2013-03-12-junit-c1

  • Intel Hardware Accelerated Execution Manager – Android SDK

    しばらく使ってきたノートPCの液晶が故障したので、新しいPCに開発環境を構築しました。

    あらかじめJDKをインストールしておいて、
    Android SDKはBundle版を利用します。
    http://developer.android.com/sdk/index.html

    ざっくりと環境が整ったところでSDKマネージャを起動して
    “Intel x86 Emulator Accelerator(HAXM)”を追加でインストール。

    sdk-manager

    Android-4.2の仮想端末を作成して、CPUを”Intel Atom (x86)”にしておきます。

    avd-42

    作成した仮想端末を起動してみるとエラーメッセージが表示されています。

    haxm-error

    コマンドプロンプトでサービスを確認。
    sc query intelhaxm

    command-sc-error

    [SC] EnumQueryServicesStatus:OpenService FAILED 1060:
    指定されたサービスはインストールされたサービスとして存在しません。

    Intel x86 Emulator Acceleratorがダウンロードされただけでインストールされていない?

    インストーラがADT-Bundleの中にありました。
    “\sdk\extras\intel\Hardware_Accelerated_Execution_Manager”

    intel-haxm-setup

    あらためてサービスを確認。
    command-sc-ok

    あらためて仮想端末を起動。
    avd-42-start

    ちなみに、エミュレータへのメモリを 1024 に設定するとスタートしようとしてエラーになります。
    検索してみたところ、エミュレータのconfig.iniを次のように編集すると問題なく起動できました。

    config.iniの場所はこのあたり。

    C:\Users\<user>\.android\avd\<avd-profile-name>.avd\config.ini

    編集前: hw.ramSize=1024
    編集後: hw.ramSize=1024MB

    以上です。

  • 「早春CMS祭り」を開催しました。

    「早春CMS祭り」を開催しました。

    2013年2月16日(土曜日)にCreator’s village in EHIMEさんとWordBench愛媛の共催で「早春CMS祭り」というセミナーを開催しました。

    開催内容はこちら(ATND)
    http://atnd.org/events/35423

    ツイッターのまとめ
    http://togetter.com/li/458104

    僭越ながら、私の発表資料はこちら
    http://www.slideshare.net/twikaz/cms-festa0216

    昨年秋、WordBench愛媛を作る際にお世話になった三好さん。@takayukister
    WordBenchのメッセージでやり取りをしていたところ「愛媛」というキーワードがあったので勢いで講師をお願いしたところ、快く引き受けてくださいまして、はるばる松山まで講演にきていただきました。

    ということで、せっかく三好さんに来て頂くので少しでも多くの方にご参加いただこうと思い、Creator’s village in EHIMEの@bornknow108さんに共催をお願いしたところ、快く引き受けてくださいましてトップバッターとして登壇をしていただきました。

    そして、最近いろいろなコミュニティに積極的に参加され、プレゼンもされている@0310lanさんにお声がけしたところ、快く引き受けてくださいまして、ウェブサービスのCMSをメインにご紹介いただきました。

    さらに、@bornknow108さんからのご紹介で@netachoさんにも劇画調に各種CMSをご紹介いただきました。さすがWebディレクターです。プレゼン内容はまさにエンターテインメントでした。

    ショートセッションでは昨年のWordBench愛媛で自作のプラグインをつくってこられたわたなべさんに、プラグイン開発の技術要素についてご紹介をいただきました。プレゼン資料がきれいに作られていて尊敬。

    ラストのセッションはオートクチュールの中村さん。@shinyajp
    ソーシャルアプリで益々ご発展の様子。お忙しい中ありがとうございました。

    それと、今回のセミナーで会場を提供してくださったイヨテツケーターサービス様には会場設営から当日の受け付け、ドリンクの提供など大変感謝しております。さらに、開催当日の午前中にコワーキングスペースを無料提供してくださったシトラス・スペース・カンパニー様にもお世話になりました。

    ご参加いただいた皆様もふくめ、お礼申し上げます。
    ありがとうございました。

  • maxSdkVersion を指定しないほうがいい – Android

    maxSdkVersion を指定しないほうがいい – Android

    http://goo.gl/FiIm3
    | Android Developers の一部分

    android:maxSdkVersionは指定しないほうがいい(not recommended)

    Androidプラットフォームの新しいバージョンは後方互換性を維持するので、新しいバージョンをブロックするのではなくて、標準のAPIを使って新しいバージョンの上でも動作するようにするべき。

    それと、maxSdkVersionを指定すると、利用者がシステムアップデートを行った際にそのアプリケーションが削除されることになる。
    また、システムアップデートの定期的な通知がアプリケーションに何らかの影響を与えないか事前に確認する必要がある。

  • アジャイルサムライ読書会の予習

    バーンダウンチャート

    縦軸は残作業の総量
    横軸は時間(イテレーション)
    順調に進めば右下がりとなり、ゼロになればプロジェクト完了

    右下がりにならない、すなわちチームのベロシティが下がっている
    プロジェクトの状況を可視化できる
    思ったほどのベロシティにならない場合は計画の見直しをするなど

    右上がりのバーンアップチャート形式でも可能

    途中からアジャイルにしていく
    まずはインセプションデッキの作成から

    チームメンバーの入れ替えはベロシティが下がる前提で

    時間が足りない場合はスコープの調整
    無理をするのではなく信頼関係の構築

    パーキングロットチャートについては
    「アジャイルな見積りと計画づくり」を参照

    イテレーションの運営

    アジャイルなイテレーション
    毎週価値のある成果を届ける
    実装開始直後から動く状態
    結合した状態で進んでいく

    分析・設計、開発、テスト

    ペルソナとは
    ソフトウェアのユーザを役割ごとに簡単に説明したもの
    リアルな人間が具体的に解決したい課題を持っている

    ペアプログラミング
    分析やテストもペアでやってみる

    イテレーション・ゼロ
    実装に着手するまえの段取り、環境整備

    カンバン
    カードを使って組み立てラインでのパーツ補充の工程を調整する仕組み
    仕掛り(Work In Progress)にできる作業に上限を設ける
    すなわち、チームが同時に着手できる作業の数
    イテレーションが必要ない(タイムボックスは関係ない)
    運用やサポート業務に向いている

  • TeX Live Manager – TeX環境の管理ツール

    昨年10月に TeX Live を使ってTeX環境を作り直しました。
    TeXのインストール

    以下、もう1台のPCにインストールした際のメモ書き。

    install-tl.batでインストールを実行。
    するとコマンドプロンプトのログにところどころ次のようなメッセージが出ています。

    TLDownload::get_file: response error:
      500 Server closed connection without sending any data back
    permanent server connection set up, but downloading did not succeed!Retrying with wget.
    

    そして約1時間ほどで2595個のパッケージのインストールが完了。
    では上記のエラーメッセージはその後どうなったのか。
    手作業でwgetとか再インストールが必要なのかと思い調べてみました。

    コマンドプロンプトから、

    CD C:\texlive\2012\bin\win32
    tlmgr update --all

    を実行すると次のようにすべて最新の状態で問題なさそうです。

    tlmgr: package repository http://(...省略...)
    tlmgr: saving backups to C:/texlive/2012/tlpkg/backups
    tlmgr: no updates available

    念のため他にツールはないかと探してみるとTex Live Manager(GUIツール)が見つかりました。

    C:\texlive\2012\bin\win32\tlmgr-gui.exe

    texlivemanager
    このツールでインストール済みパッケージやリポジトリのバージョンが一覧で確認できます。

  • スマホのメンテナンス – Android

    昨年末ごろから手元のスマホの調子が悪くて困っていました。
    例えばCメールを送信しようとするとリブートしてしまうなど。
    原因はどうやらSDカードの容量不足。
    そういえばアプリを追加しようとして、警告が出ておりました。(汗

    ということでSDHC(Class6)のメモリーカードを購入してデータを移し変え。
    移し変えは、元のSDカードの中身を一旦PCに丸ごとコピーしておいて、新しいSDカードをスマホにマウントしてフォーマット。
    あとはPCにコピーしたファイルを丸ごとスマホに移します。

    念のためMoveToSDというアプリを使って、可能なものをすべてSDに移動。
    ずいぶんと安定して前よりも少し快適になった感じがします。

  • アジャイルサムライ読書会 – 8章前半のふり返り

    昨日22日のアジャイルサムライ読書会のふり返りです。

    今回は8章の途中まででした。
    前回参加できなかったこともあって、久しぶりの参加でうっかり予習を忘れてしまいました。流し読みでもいいから、読んでいかないといけませんね。反省。せっかくの勉強会。皆さんの時間を無駄にしないように。他にもいろいろ勉強したいこともありますし。

    さて、8章はアジャイルな計画作りです。

    プロジェクトの途中で主力のメンバーが何らかの都合で外れてしまうとか、まぁありそうなお話ですね。そうでなくても多少のマージンを見ていたとしても、現実には全員がほぼフル稼働状態で期日が迫るに連れて残業が慢性化していて休日も…。何とか間に合わせようと、安易にコードをペタペタと膨らませて、どうにもならなくて他のところから人をかき集めて…。それで何とかなったとしても、その後の運用・保守を考えるとぞっとします。いや、ぞっとしないかも。慣れてるから。(汗

    (コラム記事には「プロジェクトをクビに…」という最悪のお話も書かれていて “逆に” 安心できます。)

    このあたりを読んでディスカッションしたこと。

    リリースの期日に間に合いそうにない場合に、期日を調整するのかスコープを調整するのか。経験上、心苦しい会議をして期日を延ばすことが多かった。じゃあそれでその後うまく行くのか。結局、そのような状況になる時点ですでに無理やりのコーディングになっていたり、超過勤務の日々を過ごしていて期日が延びたからといって
    特にモチベーションがあがるわけでもなく。
    それよりは、スコープを調整して期日にリリースすべき。そうすれば新たなモチベーションの元に次のリリースに向けて開発を進めることができるはず。

    5章でも出てきたけど「スコープを柔軟に」することがポイント。じゃあなんでも削れるのかというともちろんそんなはずはないですよね。そこで出てきた言葉がMMF(Minimal Marketable Feature Set)。リリース単位のことをこのように表現されています。要するに価値のある機能を厳選して最初のリリースに含めるということです。そうすることで、期日が迫ったときにスコープを調整しやすい状態にできるわけです。

    それともうひとつディスカッションしたこと。それは個人の成果物に対する評価について。例えばある程度の規模のコーディングをすれば一定の割合のバグが発生するはず。言い換えれば、バグがなければ上司にとっては都合が悪かったりするわけです。これは何が問題かというと、個人の生産性を測っていること。すなわち生産性の高い人と低い人が同じ割合でバグを発生しないといけないのか、というまぁナンセンスなお話です。そうじゃなくてチームの生産性、この本ではチームのベロシティという表現がされていますが、このベロシティを評価して維持あるいは良くすることが重要です。どうしてもベロシティがあがらない場合、それは開発環境に問題があるのか、チーム内のコーディングの仕方に問題があるのか。そこの見通しがないと期日とかスコープの調整もできません。

    だいたいこのあたりまで。

    ということで、次回は少し先まで読んでから参加しようと思います。

    さて、この読書会のほかに、今年はいろいろな新しいセミナー・イベントに参加することができました。その大半は無料で参加できるもので、有志の方々が自主的に企画して開催されています。来年にはさらに新しいセミナーの計画もされています。そういう状況の中で考えてほしいこと。それは、無料で気軽に参加できるからといって甘えてばかりではいけないということ。開催する側は日常の仕事をしながら、身の回りの人も含めて少しでも良い仕事をしたいと思って努力をしていると思います。もちろん自分自身の勉強目的があります。なので、自分の都合だけで参加するとかしないとか、そういうことではなくて、なんとか時間を調整して積極的に参加するとか、参加できなくても周りの人への告知を協力するとか、何かできることがあると思います。もちろん強制されることではありませんが、これからの各種勉強会の益々の充実に期待するとともに、小さなことでも何かできることがあれば協力していきたいですね。