さとやn Blog

試合はRuby,勝負はC#!

C#

Btonic辞書のMac版もC#で試してみる

先日トライしてみたC#によるiPhone,Android辞書アプリですが、せっかくなのでMonoMacで同様にMacデスクトップ版もやってみました。

よく「結局UIが異なるからそれぞれのプラットフォームで作りこみが必要でしょ?」と言われるのですが、逆にUI以外の部分は共有できるわけで、その効果は想像以上です。

PhoneGapも試してみましたが、アプリによってはものすごくいいと思いましたが、基本HTML&JavaScriptなので、それこそJobsが懸念していた最大公約数的な機能しか使用できなくて、あまり食指が動きませんでした。ただ、作る物によってはかなり有効な選択肢になるとは思いました。
 
 5557

コード共有のメリットを感じるためC#でAndroid, iPhone辞書アプリを作る

ここ最近ずっと仕事が忙しくて、家でC#触れる時間がなかったのですが、今週の土日はまるまる休めたので、以前から試してみたかった、C#によるAndroid,iPhoneアプリの作成にトライしてみました。
とは言っても、本格的なものではなく、本来の目的はC#で作ることによるコード共有のメリットが果たして本当にあるのかどうかを簡単なアプリでいいので、実感してみよう、というものです。

作ってみたのは簡単な辞書ソフトです。辞書自体は、XMLWebサービスとして公開されているものを使用しました。
http://www.btonic.com/ws/

AndroidとiPhoneで共有したのは辞書サービスの呼び出し部分です。
実際に作ってみた感想としては、非常に良い感じ!です。

簡単なアプリだからってわけではなく、むしろもっと本格的なアプリを作ろうとすれば、同じコードが使用できるメリットはもっと大きくなるな、と感じました。どんなに低くても50%は共有できそうです。
海外の例ではありますが、実際に80%以上共有できている、といっている会社もあるそうで、
実際、今回も、インターフェースとか抽象クラスでもっと共有できるなー、と途中で感じたりしました。

そんな感じで、もっとちゃんとしたアプリ作ってみたいなーと思いながら、何を作ればいいのか思いつかない、、、。そんな日でした。

5534


59

 

C#でSpec NSpec on Mono Mac

ちょっと前に.NETのSpecテストフレームワークでSpecFlowというものを試したのですが、なんかちょっと違うなーと感じてはいました。要はRSpecと同じようにSpecで単体テストがしたかっただけなのですが SpecFlowはどちらかというと受け入れテスト向けのもののようですね。確かにソースコードとは別になんかシナリオみたいの書くって、なんかメンドーだなーと、、、。
で、やっぱりRubyにはRSpecがあるように、C#、つまり.NETにはNSpecなるものありました。
私が探していたのはこっちこっち、って感じで早速やってみました。
サイトの方ではNuget(VisualStudioのパッケージ管理ツールみたいなやつ)向けのドキュメントですが、中身はDLLとEXEファイルなのでMonoでもできるはず、という事で今回もMonoです。
やっぱりSpecテストはこんな感じが良いですよね。

20


C#でRedisしてみる

MemcachedをRubyから試す予定だったけど、半分気まぐれRedisをC#から試してみることにしました。 仕事ではどっちもRailsでやる予定なんで、家で触るならC#でってことで。

とりあえずRedisをインストール。

wget http://redis.googlecode.com/files/redis-2.2.11.tar.gz
tar xzvf redis-2.2.11.tar.gz
cd redis-2.2.11
make
sudo make install

因みにhttp://redis.googlecode.com/
このサイトではブラウザ上でインタラクティブにRedisのコマンドを叩けるTutorialがあって大変面白かったです。

Redisサーバーを起動してみる。
redis-server
クライントを起動していくつか適当なコマンドを叩いて動作確認。
redis-cli #クライアント起動

#rootというキー名で satoyan 文字列をセット
redis 127.0.0.1:6379> set root satoyan
OK

#取り出す
redis 127.0.0.1:6379> get root
"satoyan"

#queen:membersリストの最後尾に Fready を追加
redis 127.0.0.1:6379> rpush queen:members Fready
(integer) 1

#同様にBrian も追加
redis 127.0.0.1:6379> rpush queen:members Brian
(integer) 2

#リストの中身を表示 0から-1というのはつまり先頭から最後尾までという意
redis 127.0.0.1:6379> lrange queen:members 0 -1
1) "Fready"
2) "Brian"

次にC#からRedisを扱うライブラリをダウンロードする。なんか幾つかあるようですが、今回はServiceStack.Redisというもので試してみる。

https://github.com/ServiceStack/ServiceStack.Redis
ここからDLL一式をダンロード。

MonoDevelopを起動して適当なプロジェクトを作成してDLL参照を追加。
こんな感じ。

monoが死んだ?


http://www.infoq.com/jp/news/2011/05/Mono-II

やっとMonoTouchを使い始めたばかりなのに、Novelを買収したAttachmateとか言うドイツの企業がMonoチームを切り捨ててしまったようです。
で、リーダーの人は新しい会社を立ち上げてそちらでMonoを継続する模様。
新しい会社は、 
http://www.xamarin.com/

まだトップページしかないみたい。

もうなんだったらMicrosoftが正式にLinuxやOSX向けに.NET Framework出してくれないかなー、、、。
がんばれ、Mono!!

Windows Vista or 7 の64bit版で PrintDialogが機能しない

ずーっと以前(.NET Framework2.0が最新だった頃)に作ったプログラムで、印刷ができないので直してくれ、との依頼があり、調査したところ、どうも64ビット版のWindowsの場合のみに発生する現象のよう。
で、スクリーンキャプしたものを印刷する機能で、キャプチャするのにWindowsAPIを使っていたから、その辺かな? でも、.NET Framework2.0からスクリーンキャプチャするAPIが追加されてるみたいだから(今頃知った)そいつに書き換えて試してみよう、ということで、やったのですが、うんともすんとも言わない。
どうも PintDialog.Show で止まってる、というか、何も起こらない(エラーになるわけでもない)。

windows 64bit PrintDialog でぐぐったら、

PrintDialog.UseEXDialog プロパティ

 というものがあり、MSDNのドキュメントをよむと、

AMD64 プロセッサの場合、このクラスは、UseEXDialog プロパティを true に設定しないと動作しない可能性があります。
とのこと。

なんだそれ? と思いながら早速該当プロパティにTrueをセットして、実行してみたら、あっさりOK。

1時間の試行錯誤が無駄だったようです。
 
MSDNを読んでもこのプロパティだけ説明が一切ないというのが凄い。 

NUnitの結果をHTMLで表示する

.NETでもSpecFlowアドインによってSpecテストが出来ることはわかったのですが、結果をHTMLで表示できるみたいなこともガイドに書いてありました。
で、どうやるんだろう? とよく読んでみたら
  1. nunit-console でテストプロジェクトを実行してXMLファイルを生成して
  2. specflow.exe でHTML生成する
てな手順でやるようです。


こんな感じ。
※環境はMac上のmonoです。


#MySpec.dllはテストプロジェクト(nUnit)
nunit-console -labels -out=TestResult.txt -xml=TestResult.xml ./bin/Debug/MySpec.dll


mono specFlowを解凍したディレクトリ/tools/specflow.exe nunitexecutionreport ./MySpec.csproj


とやってやると、こんな感じのHTMLが生成される。
テスト3つしかないから寂しい。それにfeatures 0 ってのもよくわからない、、、。
10)



livedoor プロフィール
QRコード
QRコード
  • ライブドアブログ