2012年12月30日日曜日

2012年のまとめと来年に向けて

2012年も残すところ1日となったので、まとめ記事なんぞを書いてみます。

Jenkinsの年でした


もともと、自分用の備忘録としてスタートしたブログでしたが、思いの外
多くの方に閲覧をしていただいて驚いています。

そんな中、最も閲覧数が多かった記事がこちら。

JenkinsでAndroidのユニットテスト+リリースビルドまで自動化

思えば、今年は色々なところでキーワードとしてJenkinsのことを話して、聞いて
いたように思えます。

最初に使ったのは多分Androidテスト祭りに参加をした後あたりから。

第2回Androidテスト祭り #atecfes2

Linuxでとりあえず導入→マシンのスペック不足でビルド時に落ちる
→Windowsで導入→バグ(?)でうまくビルドできない

などとまあ、苦難の連続でしたが最終的に記事にまとめることができました。

ちなみに、閲覧数上位2位3位が

WindowsにJenkinsを入れてCI #Jenkns
Jenkinsを一般ユーザーで動かす

となっていて、やたらとJenkinsの使い方説明ブログみたいに
なっています。

今年はJenkinsの年だったのかなと言えなくもない。

自分自身で今年面白いことが書けた、できたなぁと思うのが次の2つ。

Root化したAndroid端末とFacebookアプリ
WindowsPhoneとJenkinsの話 #sumaben

一つ目は、Root化ってコワイねーな話。
使う側が気をつけるのはもちろん、作る側もサポート外
だなんて、言ってられないことをもっといろんな人に
知ってほしいところ。

2個めはまたもJenkinsですが、日本語のブログで類似なことを
やってる人が(当時は)見つからなかったのがちょっと嬉しい。

来年からのこのブログ


来年のこととか考えてないなぁ。べつに、一昨年も考えて
いなかったわけだし・・・

ブログの方針とかは変わらないと思います。日々、自分がやったこと
をまとめる感じ。

つまり、自分が「あれ?これってどうやるんだっけ?」と思った時に
見返すことで思い出したり、ヒントになるようなブログにするのが第一。

じゃあ、訪問された方がハッピーになるにはどうすればいいのかって考えると、
固定の読者になっていただくと言うよりも、検索でたどり着いた有象無象の1ページの
1つとカウントしてもらえるのが嬉しいかな。

毎回やってることが違うんだから、当然そうなる。
というわけで、俺も極力参考にしたページとか本とか、ググりワードを
紹介するようにして次の情報への足がかりになるように努めます。

別にこのブログで収益をあげようとかは考えていないので、別にそれで
いいかな?って。

来年からの俺

お金稼げるようになりたいです(白目

言語としてはScalaを引き続き。Rubyも引き続き。

フレームワークはiOSとかPlay Frameworkとか。

ツールはant,maven,sbt...と今は思っていますが、
何が起こるかわかりませんからね。

というか最近はテストの効率化とかデバッグの効率化の
勉強ばっかりなので、そっち方面で強くなりたいですね。

以上、それでは皆様よい年末、年明けをお過ごしください。
また来年もよろしくお願いしますね。

2012年12月4日火曜日

Root化したAndroid端末とFacebookアプリ


Rootとってる人、取ろうと思ってる人はちょっと気にしてほしいこと。

はじめに


結論から言うと、Root化端末を知識のない人間が使うとものすごい危険
です。

なぜなら、たとえばFacebookのアプリはユーザー情報やフレンドの情報を
暗号化を行わないで保存しているから。

これの何が危険かというとROOTを取った端末の場合だと、とくに
制限もなくFacebookアプリのデータベースにアクセスされる可能性が
あるのです。

普通に使っている分には別にいいけど、そうじゃないことしてる人は
気を付けた方が良いよねっ!って話。

実践


では、具体例として友人一覧の情報を取得する方法をコードを交えて。

今回のターゲットは
/data/data/com.facebook.katana/databases/users_db2

この中に友人の名前やメールアドレス、電話番号などが入っていました。

Step.1:ファイルのパーミションを変更する

Androidのアプリは基本的に、自分のアプリのDBに対しては自分からしかアクセス
できないようにできます。

FBアプリも例には漏れず。しかし、結局はLinuxのファイルパーミションを利用して
管理をしているので、su権限でchmodを実行すればなんの問題もないです。

これがRoot化端末の怖いところ。普通はアクセスできないファイルにアクセス
できる可能性がある。

Step.2  SQLiteDatabaseあたりを利用してDBにアクセスする。


ファイルのフルパスを指定してあげれば、簡単にアクセスできます。
あとは煮るなり焼くなりご自由に状態。

ちなみに、コードはこんな感じ。


実行結果


こんなに丸見え!

まとめ


ROOT化端末の場合、ユーザが意図しないタイミングで見られたくないデータを
見られる可能性があるから、気を付けよう。

ROOT化するよー!って人
危険性を本当に理解してください。困るのはあなただけでなく、あなたの
友達かもしれません。

開発者の方
ROOT化端末によって、予期せぬデータ流出が起こることを知っておいてください。
確かにROOT化端末はサポート対象外ですが、そのおかげで不幸になるのは、あなた
個人や会社です。

最後に


ちなみに、このネタは先日開催された「Androidセキュリティハッカソン」でやってきた
ネタです。

もっと早くに思いつけば、アドベントカレンダーのネタになったのに・・・

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が使えるんだよっ!! ってことが伝えられればそれで良いんです。