2013年3/18にストリーミングを配信するサーバ側で仕様変更があったようで、アプリ側で、対応しました。今週公開分の語学ファイルをダウンロードできるようになりました。ストリーミングを公開しているサイトが、4月から会員登録をさせて、ストリーミング再生の時、ログインを要求するようになるようなので、本アプリは4月には使えなくなると思います。ご利用ありがとうございました。Playのラジオ語学講座ファイルダウンロード・再生アプリ(beta版)よりダウンロードできます。公式なソースがない(追記、番組ストリーミングご利用方法の変更に関して)が、ストリーミングを公開しているサイトが、4月より、会員情報登録、PCでストリーミング再生の時、ログインを要求するようになるらしい。一応、4月になったら、本アプリで対応できるか調査したいと思うが、多分対応不可と思うので、3月いっぱいで、本アプリの公開、利用は終了になると思う。私は、hikiで開発日記をつけているんだが、LangDroidについて最初に日記を書いたのは、2010年11月25日だった。このページによると、PCでソフトにより語学ファイルをダウンロードしていた。そのソフトではflvstreamerというコマンドラインソフトを使って、ストリーミングをファイルにダウンロードすることを行っていた。flvstreamerはGPLソフトで、それをAndroidアプリに組み込むと、Androidアプリのソースファイルを公開する義務が生じるし、コマンドラインツールをAndroidアプリに使うにはどうすればいいのかという課題があった。それらの課題には、2010年の夏から取り組んでいた、課題は何とかクリアできた。「クローズドソースアプリでGPLソフトを使うには」にある。本アプリは、語学ファイルを手動か予約自動でダウンロードすることができ、ダウンロードした語学ファイルをリスト表示することにより、聴きたいファイルを再生することができるし、また、外出時にダウンロード、再生ができるし、再生時に、休止や、シークバー操作で繰り返し再生ができ、ヒントを得たPCアプリに比べ格段に使い勝手がよかったと自負している。100,000~500,000を得て、私がはじめて本格的に開発して、公開したAndroidアプリとしては好評のできたった。PlayでのLangDroidの画面のキャプチャを記念にとった。作ったためか、設計がよくなく、ソースコードも汚く、使い勝手が悪く、作り直しを検討していた。ストリーミングの内容の性質上、マネタイズに躊躇することがあり、作り直しのモチベーションがなかなか出てこず、今日に至ってしまった。結局、マネタイズは、アプリのメニューにサポートページをつけて、そこから私のサイトにアクセスしてもらい、サイトにはってある広告をクリックしてもらうという方法をとっていたが、開発コストに見合うお金が得られなかった。LangDroidのご利用ありがとうございました。6.17のテストコード今、リファクタリングRubyエディションを読んでいます。テストコードが載っていないし、コードを補わないと動かなかったり、擬似コードで動かないコードが載っていたりして、ストレスマッハです。Definition)のテストコードが書けたので、記事にします。:successendとなっていますが、stateはクラス変数で、アクセサを定義する必要があります。クラス変数のゲッタによると、クラス変数に対しては、attrなんとかでアクセサを定義することはできないそうなので、コードを書いて定義しました。リファクタリング対象コードは、次のようになります。:successendendこれに対するテストコードは次のようになります。あと、この節のサンプル:def_eachを使って類似メソッドを定義するで、def_eachメソッドを定義するClassクラスは記述されているんですが、プロダクションコードでどう使うのか書かれていないので、補います。これは、Module#define_methodを抽象化する話を参考にさせていただきました。2013年3/11にストリーミングを配信するサーバ側で仕様変更があったようで、アプリ側で、対応しました。今週公開分の語学ファイルをダウンロードできるようになりました。期の変わり目に、サイトが仕様変更を行い、本アプリでファイルをダウンロードできなくなる恐れもあります。その場合は、ご了承ください。Playのラジオ語学講座ファイルダウンロード・再生アプリ(beta版)よりダウンロードできます。以前からアナウンスしているのですが、このアプリは設計、作りが甘いため、作り直しを検討していますが、作り直しには着手していなく、機能は従来版と同じです。Box仮想マシンで開発していました。desktopが出て、インストールしたら、動作が重くなり、Eclipseでの開発でイライラが増していました。12.04を入れ、Jenkinsをインストールしてディスプレイなしで使っていたのですが、ディスプレイを接続しないと起動しない不具合が生じるようになりました。そこで、新しいマシンを新調して、Dellのマシンをお払い箱にして、Androidアプリ開発用に使っていたマシンをJenkins、Redmine、Gitサーバに転用することにしました。新しいマシンは、いつものようにパーツを買ってきて組み立てました。12.04が動くようにしたかったので、ビックカメラで、パーツの仕様をメモって、スタバで情報収集をしたのですが、あまり有益な情報が得られなく、賭けに出ました。Ubuntuが動くかどうか懸念対象になるパーツは以下のものです。5,880円マザーボードには、ビデオチップが内蔵しているのですが、Ubuntuではトラブルがあるような情報があるので、ビデオカードを追加買いしました。このビデオカードは、NVIDIAのドライバを使うと快適に使えるのですが、カーネルが更新されると、ビデオドライバをリビルドする必要がありますが、このビデオカードを使っているせいなのか、仮想ターミナルが開けずに、リモートで入って、lightdmをstopして、ビデオドライバをリビルドする必要がありました。イーサネットアダプタ、オーディオチップの認識は問題ないでした。ハードディスクは3TBを3台使いRAID5を組みました。ブルーレイドライブの認識も大丈夫そうです。いつも、PCパーツを買うときは、Ubuntuが動くか、ハラハラだったのですが、今回は幸運に恵まれました。2013年3月10日リファクタリングRubyエディション6.5のテストコードを書いてみた今、リファクタリングRubyエディションを読んでいます。一時変数からチェインへで、Selectクラスは、@optionsという配列にadd_optionを呼ぶたびに西暦を加えていきます。このテストコードを考えたのですが、結構面倒だったので、記事を書きます。はじめ、テストコードでは配列をアサートすればいいかなと考えたのですが、そうではなかったです。配列とSelectの要素を比較するため、Selectクラスに要素のサイズを得るメソッドsizeと要素を取り出すメソッドelemを追加しました。elem(i)@options[i]endまた、Selectの要素と配列の要素を比較するため、Test::Unitのassert_blockを使いました。テストコードは次のようになります。テスト対象コードをいじるのはあまり好ましくないだろうけど、ちょっと他の方法は思いつきませんでした。asssert_blockを使うときには、どの要素の値がどうで、期待値がどうとか表示できるようにした方がいいのでしょうが、目的がリファクタリングのためのテストコード作成だったので、そこまではやりませんでした。assert_block内で、真偽値をreturnで返すようなことをやると、うまくテストコードが動きませんでした。2013年3月10日リファクタリングRubyエディション6.1に対するテストコード今、リファクタリングRubyエディションを読んでいます。6章に入ったら、いきなり標準出力するコードのリファクタリングが出てきます。JUnit実践入門を以前読んだとき、標準出力するコードのテストをやるには、スパイを利用して難しかった記憶があります。Rubyのテストでも、そうなのかなと、ググったのですが、Arieteという便利なgemがあることがわかりました。gemは次のようにインストールします。"banner"endendです。これで、標準出力しているコードでも、リファクタリングできるようになります。