2012年11月22日

DotInstallのTodoアプリケーションをASP.NET MVC4/C#で作りなおしてみた


元のレッスンはこちら。
PHP/jQueryで作るToDoアプリ (全20回) - ドットインストール

作ったものはこちら。

Todo_ASPNETMVC4 - GitHub
Zipダウンロード 

元のアプリケーションがシンプルなだけに特に引っかかる箇所もなくサクサク進んだので楽しかった。

jQuery UIの sortable を使った事がなかったので良い練習になった!

あっ、そう言えば最初の準備段階でこんな問題があったりしてちょっと引っかかった。けどASP.NET MVC4のCode Firstの練習にもなった。^^



 

gitで既にコミットしてしまったファイルを無視する様に変更したい場合は

今日、ASP.NET MVC4の Code Firstを試していてgitでつまづいたので将来の自分用にメモ。

Code FirstでDbContextクラスを作ってモデルクラスを作って、Package Managerコンソールから「Update-Database」を実行すると、無事App_Dataフォルダにデータベースファイルが作成された。

モデルクラスに対応したテーブルも自動的に作成されていて、素晴らしい!

と感動したものの、考えてみるとこのデータベースファイルは出来ればgitの管理下には置きたくない。

ところが気付いた時点では既にGitHubにデータベースファイルもろともpushした後だった。

あわてて .gitignoreファイルに
*.mdf
*.ldf
の2行を追加した。

それから git rm -f *.mdfしてみたり試行錯誤してみたけれども、どうも上手く行かない。

まだまだ git の事を理解していない証拠だな~、とちょっと落ち込む。

とりあえず検索して何とか答えが見つかった。
pushした後に.gitignoreに追加したのが良くなかったみたいだ。

git - Visual Studio gitignore and mdf, ldf files - Stack Overflow


  1.  一旦.gitignoreから*.mdf, *.ldfの設定をコメントアウトする。
  2. git rm --cached -- *.mdf を実行。
  3. git rm --cached -- *.ldf を実行。
  4. git commit -m "コミットメッセージ" を実行。
  5. 1でコメントアウトした.gitignoreの設定を戻す。

この操作で無事データベースファイルが除外された。




 

2012年11月20日

Android 4.2で今度こそ反応の良い楽器アプリは可能になるのか!?

以前からAndroidで良い(=実用になる)楽器アプリが存在しないのを残念に思っていた。


AndroidでiPhoneに匹敵する楽器アプリの作成が困難な理由

Android 4.0で反応の良い楽器アプリは可能になるのか




が、Android 4.2になってその状況もついに変わるかも、と思わせてくれる記述が公式ドキュメントの中にあった。


開発者にとってAndroid4.2は何が新しくなったか - Firespeed
Jelly Bean | Android Developers


Low-latency audio
Android 4.2 improves support for low-latency audio playback, starting from the improvements made in Android 4.1 release for audio output latency using OpenSL ES, Soundpool and tone generator APIs. These improvements depend on hardware support — devices that offer these low-latency audio features can advertise their support to apps through a hardware feature constant. New AudioManager APIs are provided to query the native audio sample rate and buffer size, for use on devices which claim this feature. 
(以下意訳)
Android 4.1でOpenSL ESによる低遅延再生、SoudPoolやトーンジェネレータAPIなどが改善されましたが、Android 4.2ではさらに低遅延な音声再生をサポートします。これらの改善点の恩恵を受けるにはハードウェアのサポートが必要です。低遅延再生をサポート可能なハードウェアは、アプリケーションに対してハードウェアフィーチャー定数を通じてその事を知らせます。新しいAudioManager APIを使うと、この機能をサポートしているハードウェア上でネイティブなオーディオサンプリングレートとバッファ・サイズを問い合わせる事が出来ます。

早速、先日Android 4.2に更新されたNexus 7でピアノアプリ「xPiano+」を試してみた。

このアプリは僕が今までAndroid上で試した数種類のピアノアプリの中では最も反応が良かったものだ。と言ってもiOSデバイスの楽器アプリとは全く違って、ちょっとでも速く鍵盤を叩くと遅延が気になってとても実用的に演奏出来るとは言い難かった。

4.2に更新されたNexus 7で試してみたところ、確かに前よりも反応が良くなっている!

感覚的なものなので数値に表すのは難しいけれども、「格段に良くなっている」と言える。

おそらくまだ4.2の新しいAPIを使った最適化はされていないと思うので、今後アプリ側が4.2に合わせて最適化されればもっと反応が良くなる可能性もあると思う。

ただし、まだまだiOSデバイスに匹敵するとは言い難そうだ。

これから何世代かかけてハードウェアがどんどん良くなって行ったとしても、そもそもJavaベースで動いているAndroidというOSでどこまでの「低遅延化」が可能なのかという問題がある様な気がする。

もちろんOSの深い所はC++などで書かれているみたいだし、アプリケーションもNDKを使えばC言語(C++)で開発する事は可能だ。やはり究極の低遅延化を目指そうとすればC言語で開発するしかないのだろうか。

いずれにせよ、Android 4.2で「反応の良い楽器アプリ」の実現に少し近づいた事は間違いない。今後どんな楽器アプリが登場してくるのか、(あるいはやっぱりダメなのか、)期待しながら待ってみようと思う。






2012年11月7日

Galaxy S IIIをAndroid 4.1.1 にアップデートしたらEclipseからアプリの実行が出来なくなった件


ついこの間 Galaxy S III にOSの更新の通知が来たので何も考えずにアップデートしたら、Androidのバージョンが4.1.1になった。

それはいいのだけれど、その後実機でのデバッグが出来なくなってしまった。

Galaxy S IIIをUSBでMacにつないだ状態でEclipseからアプリを実行しようとすると、「Failed to install ........ timed out. Launch canceled.」というエラーになってしまう。

検索してみた所では、このスレッドの最後(2012/10/24)に書かれているコメントが最も近いような気がする。

android - Unable to debug via eclipse on phone with Jelly Bean - Stack Overflow

『After inspecting my UMASK, I saw it's now 0000 (and it was 0077 on stock kernel), so I concluded that the wrong UMASK was the root cause of the error.
Still, as can be seen from numerous other threads on this issue out there, it's very wrong for the stock kernel to cause that problem.』

という事は Android 4.1.1自体のバグなのだろうか。

これは困った。。。

幸いな事に Android 4.1.2 の Nexus 7 の方は全く問題ないので、しばらくはそちらで開発するしかないかも知れない。

この機会にいっそGalaxy S IIIをRoot化してみるかな。^^


追記1:

下記にもある通り、Android 4.1 (Jelly Bean)からデフォルトのumask値が000ではなく077になった事が関係している模様。

[Q] Jelly bean and apk. - xda-developers
Eclipse や adb installを使わずに手動でAPKファイルを端末にコピーしてからインストールすれば動かせるらしい。でもそんな面倒な事はやってられないな〜。


追記2:

試しに

 adb install bin/[APPNAME].apk

を実行してみると、

 Failure [INSTALL_FAILED_ALREADY_EXISTS]

というエラーになった。そこで

 adb uninstall [PACKAGENAME]

をすると、Success になったので、その後もう一度、

 adb install bin/[APPNAME].apk

を行うと Success というメッセージが表示されてアプリがインストール出来た!

ただやはりEclipseから実行した場合はエラーになってしまう。変更する度にuninstallとinstallをコマンドラインでやらないと行けないのは面倒過ぎるので、何とか早く直って欲しいものだ。




2012年11月2日

iPad miniを触って感じた事

仕事の合間に近くのAppleストアに行って iPad miniをちょっとだけ触って来た。


一触瞭然 - 品評 - iPad mini
『今日から Kindle Fire や Nexus 7 を買う人は、情弱乙という他ない。』

確かにその通り。
僕の様に「分かっちゃいるけどAndroidが好き」という人でなければ、もうこれで何も迷う事はない。

少なくとも、これから僕が家族・親戚・友人に勧めるのは、間違いなくこれだ。


miniの感想


この軽さ。この薄さ。そして質感。やっぱり素晴らしいの一言に尽きる。

普通のiPadの上にiPad miniを載せて液晶画面の実質の大きさを比べてみたら、思ったよりも違いは少なかった。全体的には小さくなったと言っても、これなら見た目も指での操作感も、ほとんど違和感が無いはずだ。

年末に向けてこれはきっと売れまくる。
売れすぎて普通のiPadの売上を侵食して、結果的にAppleの売上が下がってしまうのではないか、と要らぬ心配までしてしまうほどだ。(もしそうなっても利益率的には変わらないのかな?)

※2012/11/6 追記: 『iPad miniの粗利益率は他の製品と比べて大幅に低い』との事。
Apple Says The iPad Mini’s Gross Margin Is “Significantly” Lower Than Its Other Products | TechCrunch



iPadとの比較


さて、15分ほどiPad miniを試した後、第4世代iPadというものを手に持って見た。

iPad miniから持ち替えると、さすがに手にずっしりとその重さが感じられる。これは重たい。筋トレを兼ねるのでなければ、ずっと手に持ったまま操作するものではない。

ただ、今さら言う事でもないけれど、Retinaディスプレイの美しさはさすが。

細かい文字を表示した時の読みやすさの違いはあまりにも歴然としている。この画面を見てしまうと、今度はminiの解像度がどうしても残念に思えて来てしまう。


今日の結論


まあ、いずれにせよ、miniは買っておこうと思う。子供用にぴったりのサイズと軽さだから、もしかしたら2台買ってしまうかも知れない。


参考リンク: