2012年10月27日土曜日

Rubyで乱択アルゴリズム

Rubyの勉強してます。
会社で昼休みに昼飯を選ぶアプリを作っているのですが、
DBから取得した昼飯リストの中から、なんかいい方法で
選択できないかなー? と情報を漁っていると
弾さんのブログで良い情報があったので、Rubyで書いてみました。



実行結果は
$ ruby weight_random.rb | sort | uniq -c | sort -r
とかで計測します。とりあえず、1000回回すと
となったので、まあ悪くない結果だと思います。
しかし、一番結果の上位に出てくるのがうさだとは、どういうことにょ!?
目からビィーーーーム!!

2012年10月17日水曜日

【アップデート】タイムキーパードラ娘



タイムキーパードラ娘をアップデートしました。

Android app on Google Play


技術的な面では、今回はFragmentを活用し携帯電話とタブレットでそれぞれのレイアウトを適用しています。

ロジックも改修を加えました。以前のバージョンは、見かけ上問題なく動いていましたが、実は車輪の再発明を行なってしまっていました。

今後のメンテナンス性を考慮して、極力AndroidのAPIを利用しています。

デザイン面も、俺にしては頑張りました。

リリースするアプリでDraw9Patchを利用したのは今回が始めてですね。

来るべきAndroid4.0時代(というか、はよ来い)に向けてのアプリとなっています。

ただ、恥ずかしいのはJavaの知識がなかった際に、作成、公開をしたアプリなので

パッケージ名に大文字が含まれているんですよね。ちょっと、そこダサい。

今から変えられないしなぁ。

2012年10月15日月曜日

Dentoo.LTとは #dentoolt

すまべんの翌日は、Dentoo.LTに参加してきた。

全日に急にネタを変えて、ニンジャスレイヤーの音読をやってきた。

うん、楽しかった。

そのままの勢いで、本来のネタだった学務情報システムでも遊んできた。

忙しかった。

発表を聞きながら、ふぁぼりながら、つぶやきながらスライド作る

というか、ネタを実装する。

DOMの解析やって、リンク増やすだけだから大したことは無いのだけれど

まあ、忙しくて楽しかった。

またやりたいですね。

スライド公開するけど、誰得??



WindowsPhoneとJenkinsの話 #sumaben

Jenkinsさんは良いんだよ!!

みんなも会社で使ってよ!!

WindowsPhoneも端末が増えてくるから、きっと今から準備しておくと役立つよ!!

という話をすまべんでやってきた。



やたらと強力なMsBuildの使い方は、@ITを参考にした。

MSBuild完全攻略(前編) .NETビルド・エンジン「MSBuild」使いこなし術

MSBuild完全攻略(後編) ビルド・エンジン「MSBuild」を思いのままに操る技

という訳で、お家Jenkinsをもっと進めていきます

じゃなくて、会社で導入してみたいです。

2012年10月8日月曜日

Jenkinsで、WindowsPhoneのリリースビルド+ユニットテストを自動化


1.目的

Jenkinsを利用してプロジェクトのビルド、テストを自動化し素早い問題対応と、
常にビルド可能、実行可能なソリューションが存在する状態を作る。

そうすることで、チーム開発の進捗の管理や、モチベーション維持へと繋がる。

2.導入

今回はWindowsPhoneアプリのプロジェクトを、Jenkinsを使ってビルド、ユニットテストを
行う。Androidやその他のJava、あるいはスクリプト言語系のプロジェクトで導入の実績を
よく聞くJenkinsだが、.Netなフレームワークでもできるんだよ。

3.準備

3-1実行対象のプロジェクトを作る

作りましょう

3-2テストプロジェクトを作る

作り方は、僕の以前のPost


@okazuki さんの

http://d.hatena.ne.jp/okazuki/20110911/1315724390

を参考にしましょう。

3-3自動ビルド、ユニットテストの環境を作る


MsBuildの設定をします。基本的に、一個前のPost

http://numa08.blogspot.jp/2012/10/msbuildwindows-phone.html

を使えば良いです。

でも、今回はMsBuildのタスクを一部変更しました。Clean,Releaseはやりたかったので、そこを追加。

コードは以下。




3-4ビルドサーバー、リポジトリの準備


ビルドサーバーを準備します。

当然、Windowsじゃないとだめです。

VisualStudioを設定し、Jenkinsをインストール。GitやSuvbersionなどのバージョン管理システムも導入。

バージョン管理システムとして、Team Foundation Serverも利用できるっぽいですが未確認です。
(ちなみに、僕自身はSuvbersionも使ったこと無い)

3-5 csproj参照のパスに注意する

Global Assembly Cacheに登録していないアセンブリをプロジェクトの参照に追加する場合、

csproj(vbproj)の参照のパスの設定で、

対象のアセンブリが、ローカルな保存領域にある場合は相対パスで、

ネットワーク上にある場合は絶対パスで記述されるらしいです。

http://msdn.microsoft.com/ja-jp/library/ms998208.aspx

これを知らなくて詰んでた。

今回、テストプロジェクトの生成のために
"Microsoft.Silverlight.Testing.dll"
 と
 "Microsoft.VisualStudio.QualityTools.UnitTesting.Silverlight.dll"

の少なくとも2つを追加しているわけですが、ビルドサーバーからこのファイルが見える状態になるように

設定する必要があるわけです。

僕の場合、いつもネットワークドライブ上にプロジェクトのフォルダを作って作業をしていたので、見事にこれがハマった。

csprojを任意に設定するか、ビルドサーバーからもアクセスできる場所にファイルを置くか、まあその辺設定しましょう。

3-7Jenkinsの設定をする
わりと、酢酸先生( @ch3cooh )のこの投稿が便利です。

http://d.hatena.ne.jp/ch3cooh393/20120126/1327510696

Jenkinsの管理->プラグインの管理 と進みJenkins MsBuild Plugin を探し、インストールします。

Jenkinsの管理->システムの管理->MsBuild の中で、MsBuildのパスの設定を行います。

ジョブの生成から、フリースタイルのプロジェクトを選んでリポジトリの設定を行います。

ビルドトリガの設定をしたら、ビルド手順を次のように設定します

Build a Visual Stduio Project or solution using MSBuild

MSBuild Build File $(WORDKSPACE)\(your project)\msbuild.proj

Command Line Arguments /t:Clean,Teset,Release

成果物の保存
**\Bin\Release\*.xap,**\EmulatorTestResult*.txt

以上で設定終わり。

最後に、ビルドサーバーでWindowsPhoneのエミュレーターを立ちあげておきましょう。

4.所感

エミュレーター重いわ!!

こんなに重いと思ってなかった。いつも、メインマシンでやってたからわからなかった・・・

WindowsPhoneの開発でだってJenkinsが使えるんだよっ!! ってことが伝えられればそれで良いんです。

2012年10月4日木曜日

MsBuildでWindows Phone のビルドとテストを自動化


MsBuildって便利ですね しみじみ

自動化は男のロマン。

と言うことで、WindowsPhoneプロジェクトの

-ビルド
-テスト
-結果の回収

を自動で行おうと思います。ゆくゆくは、Jenkinsを利用したCIへと繋がります。

今回は、http://blogs.msdn.com/b/francischeung/archive/2012/01/03/running-windows-phone-unit-tests-via-msbuild.aspx

の内容ホボそのまま。

一連の自動化の流としては
1.ビルド実行
2.エミュレーターへのインストール
3.テスト実行
4.テスト結果を エミュレーターの分散ストレージに保存
5.テスト結果をローカルにコピー

1.プロジェクトを作る

作りましょう

2.テストプロジェクトを作る

以前の投稿 http://numa08.blogspot.jp/2012/09/windowsphonerx_19.html や、@okazuki さんの

http://d.hatena.ne.jp/okazuki/20110911/1315724390

あたりを参考にテストプロジェクトを作りましょう。

3.ログをファイルに出力する

ファイルと言っても、エミュレーター上の分散ストレージです。

テストプロジェクトに次のコードを追加します。

その上で、テストプロジェクトのMainPage.xaml.csを次のように変更します。

4.MsBuildタスクのプロジェクトを作る

ソリューションに新しい VisualC# クラスライブラリ を作成します。

参照に、
Microsoft.Build
Microsoft.Build.Engine
Microsoft.Build.Framework
Microsoft.Build.Task.v4.0
Microsoft.Build.Utilities.v4.0

を追加。次に、
"C:\Program Files (x86)\Common Files\microsoft shared\Phone Tools\CoreCon\10.0\Bin\Microsoft.Smartdevice.Connectivity.dll"

を参照に追加します。

5.タスクを書く。

MsBuildって本当に強力だなぁとしみじみ。

ぶっちゃけ、次のコードのコピペで動きますけど、もっともっとカスタマイズすると楽しいと思います。



6.MsBuildファイルを書く

こちらは、テストプロジェクトのUUIDやファイルパスなどを指定する必要があります。

さっき作ったprojファイルから見た相対パスらしいので、それに合わせてxapファイルのパスを適切に設定します。

ProductGuidはテストプロジェクトの WMAppManifest.xml のAppタグOriductIDの値を使います。


7.実行する

エミュレーターを立ち上げた状態で MsBuild msbuild.proj としてやれば、自動的にプロジェクトのビルドと、
テストの実行が走ります。

最後に、EmulatorTestResult-$(GUID)-.txtが吐き出されていれば成功。



何が凄いって、テストに失敗するとテストに失敗すると、例外を検知してMsBuildが失敗を返すところ。

これは便利です。Jenkinsの場合、ビルドの成功失敗は取れてましたけど、テストの成功失敗は別で管理してました。

あー、でもこのテストの失敗は無視ー とかそういう状態も発生するわけか。まあ、その辺はタスクのカスタムでなんとかなるんだと思います。


思いますよ。そのうちやります。

2012年10月3日水曜日

ダウンロード済みのアセンブリをビルドする

MsBuildで自前のタスクをビルドしようとした際に出たエラー

エラー    1    アセンブリ ファイルパス\プロジェクト名.dll を読み込めませんでした。このアセンブリは Web からダウンロード済みである可能性があります。アセンブリが Web からダウンロード済みである場合は、ローカル コンピューター上に存在する場合でも Web ファイルであることを示すフラグが設定されています。フラグにより、このようなアセンブリをプロジェクトで使用されることがないようにできます。フラグの設定は、ファイルのプロパティを変更することで変更できます。信頼できるアセンブリについてのみブロックを解除してください。詳細については、http://go.microsoft.com/fwlink/?LinkId=179545 を参照してください。

前もこれ出たな・・・

回避方法のメモ


"C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe.config"

のRuntimeセクションに


<loadFromRemoteSources enabled="true" />


を追加する。


これだけ。
基本的にネットワーク上のアセンブリやダウンロードしたそれをビルドの際に読み込まないのは、ライセンス的な絡みがあって仕方ないらしい。


あと、なによりもTeam Foundation Serverを利用させようという意図もあるとのこと。


まあ、そういう会社なんだけど、そうやって儲けてるしサポートも受けられるんだから仕方ない。
仕方ないのです。