‘プログラミング’のエントリ

今週末,Windowsストアに電子書籍リーダ「Analog Book Reader」をリリースする。なのでここでちょっと紹介してみたい。

「Analog Book Reader」は本好き向けの電子書籍リーダー。自分は小説とか技術書とかを毎日読んでいて,最近はほとんど電子書籍で読んでいる。iOSのNewsstandとか,技術書読み放題のSafari booksとか。でも,今の電子書籍は本好きからするとどうも使いづらい。なので,自分で作ってみることにした。もちろん,ほとんどの電子書籍サービスは専用のクライアントがあるので,自分でそのサービス向けのアプリは作れない。最終的にはこれらのサービスが,「Analog Book Reader」くらいの使い勝手になって欲しいなあ,という期待を込めてフリーで公開するといったところ。

現状,「Analog Book Reader」はPDFとzip(自炊の本とか)のみサポートしている。今後はEPUB等のフォーマットをサポートしていく予定。また,現状「Analog Book Reader」はWindows 8.1のストアアプリのみサポート。これも今後はAndroidタブレットとかiPadとかをサポートする予定。

Microsoftの最近のサービスの調査令が出たので,AzureとOffice 365を登録してみた。

Azureは既にMSDNサブスクリプションで登録していたのだが,「現在のサブスクリプションは使えなくなります。延長しますか?」メールが来ていた。その時は,MSDNユーザでも有償になるのかと思っていたが,そうではなかった模様。今の契約では,テスト目的なら無償で使える。15,500を毎月もらえて,1時間に6.12かかるので,実質使い切れないってことですね。

Office 356もMSDNサブスクリプションで登録。1年間は無料で使える。

今週末,新しいアプリのテストを終わらせようと思っていたのだが,できなかった。BitmapSource.SetSourceを呼び出すと,どうも内部的に画像のメモリを確保するらしいのだが,いつまでも解放されない。いろいろWebで調べた末,使い終わったら1ピクセルの画像で初期化するという解決策をとった。この問題で週末いっぱいかかってしまったので,多分今月中のリリースは無理。

今作っているアプリケーションはもうすぐ完成しそう。今月中には,Windowsストアに書籍リーダアプリを公開できると思う。で,公開するためにはプライバシーポリシーを作りなさいとのことなので,作っておいた

Visual Studio 2013プレビューのGit機能を使ってみた。今3つのプロジェクトを1つのソリューションに入れている。Portable Class LibraryとWinRT Libraryとビューアのプロジェクト。Viewerのソリューションを登録しようとしたら,「The current solution has projects that are located outside the solution folder.」というエラーが表示された。なので,ビューアプロジェクトの上にダミーソリューションを作って登録してみた。VSSのときと変わらない使い勝手。

Windows 8.1でサポートされたFlyoutをxamlに入れてみる。でもFrameworkElementを継承していないので,プロパティへのバインディングができない。結構困った結果,FyoutBase.ShowAtで指定したElementのDataContextにバインディングされることが分かった。

WinRT(Windows Store Apps)で電子書籍ビューアを作っている。Windowsストアアプリの本をいくつか読んだけど,理念が目からウロコ的。デジタルの良さを極限まで活かせ,わざわざ本物を真似するな。電子書籍ビューアも,ページめくりなんかリアルにしないで,デジタルとしてどうするのがよいUIなのか考えろということですね。

Weather Typingランキングより作りたいものができてしまった。ので,ランキングリニューアルはちょっと保留してそっちを作り始めてみる。


てことでVisual Studio 2013 RCを入れてWindowsストアのアプリを作り始めた。Windowsのデスクトップとかスマートデバイスとかも将来的に動かしたいので,まずはWindowsストアかな。.NET framework 4.5のAPIをWebで検索するんだけど,そのAPIがどの環境で動くのかさっぱり分からない。いろんなバージョンとか環境がありすぎる。

iPod touchにiOS7をインストール。Weather Typing for iOSは,アイコンが暗すぎる以外は問題なし。

Xcodeのバージョンを上げてからWeather TypingをビルドしてiOSに入れてみたが,設定とかのUIがiOS7っぽく変わる。タイトルバーが上に出てくるし,アップデートするなら少し直さないと。

2013092101

Weather TypingのランキングをREST Webサービスで表示できた。これからデザインをしないと。今回は開発環境にEclipseとMaven, サーバにApache, Tomcat,mySQL,サーバフレームワークにServlet, JSP, Axis2,Hibernate,クライアントフレームワークにStruts2とjQueryを使ってるんだけど,使うテクノロジ多すぎ。

家に戻る。Weather TypingランキングをJava関連技術で作り直す計画を始めるか。昔勉強したときはTomcatとJSPしかなかったからStruts,jQuery,Axis2,Hibernateを数ヶ月勉強している。

PurentroをWindows RTで動かすために,Windows RTでのMIDIサポートを調べる。結果,無理と言うことが分かった。いろいろ調べていたら,結構WPFとWindows RTは違うのか。じゃあ何を作ろうかなあ。

Denasuのデザインを更新した。今回,Googleカスタム検索を追加して,検索ができるようにしてみた。Googleの検索ボックスを置いてみたらデザインがおかしくなったので,部分的にスタイルシートを無効化したりする必要があった。なんかカスタマイズはしづらい。


本当はランキングのリニューアルと同時にデザインの更新をしたかったんだけど,ランキングのリニューアルは何ヶ月もかかりそうなので先にデザインだけ更新することにした。

Weather Typing for Android version1.2をアップロードした。Google Playからダウンロードしてください。

連休中はWeather Typing Androidの開発をしていた。iOSと同じ機能を実装完了。テストした後,Google Playにアップロードしよう。

iTunes ConnectでAppStoreに登録したアプリケーションのダウンロード数が分かる。しかし,トータルの数が出なかったり国別に分かれていたりしてとても使いづらい。過去2週間分しか分からないし。ドキュメントによると,ダウンロード数を取得するJavaクライアントがあるよう。なので以下のシェルスクリプトをcronに登録して毎日ダウンロード数を取得するようにしてみた。

#!/bin/sh
cd <path>
java Autoingestion <userid> <password> <vecdorid> Sales Daily
  Summary `date +%Y%m%d -d "3 days ago"`
gzip -dc *.gz | sed -e '1,1d' -e 's/t/,/g' >> appstore.csv
rm *.gz

12日に書いた,パスワードが違っていてランキング更新できない問題が解決した。原因はPerlのCrypt関数。パスワードを暗号化するのにPerlのCryptを使っているのだが,ソルトとして秒を使っている。しかし,この関数はソルトとして0,1,…,8,9を指定すると00,11,…,88,99を返すようだ。このため,認証をしようとするとソルトとして00~99を使ってしまい,パスワード間違いと判定する。

難しいのは,0,1,2,3,4,5秒と00,11,22,33,44,55秒の見分けがつかなくなっているところ。今回は,運良くDBの中にユーザ登録時の日時が入っていたので,なんとか見分けることができた。

この問題は多分2002年頃(Perl5にしたとき)から起こっていたはず。多分,新しく記録を登録する人は多いけど,記録を更新する人はそんなに多くないから今まで誰からも報告がなかったのではないかと思う。

Weather typing for iOSリリース。昨日の夜中にAppleからレビューが始まったというメールをもらって、3時間後にレビュー完了のメールが来た。はや。朝、リリース日を今日(US時間で昨日)に変更したら、App Storeに公開された。

Weather Typing for iOSのApp Storeでの公開をAppleに申請した。リジェクトされなければ数週間で公開されるはず。

Weather Typing for iOSのテストが完了した。11Kステップ書いて,テストケース344件,バグ摘出11件。明日Appleに申請しよう。

Android NDKのI18Nサポートを調べた。wchar.hを読むとAndroidではwchar_tをサポートしていないことが分かった。のだが,wchar.hのコメントが非常にクールで印象深い。

... このヘッダが存在するのはオレが本当にナイスガイだからだぜ。
でも本当に実装するほどナイスじゃないぜ ...(ほぼ直訳)

日本の開発者だったらこんなコメントは書かないだろうなあ。何か書いたとしても,「申し訳ないが」とか? 上のコメントの方が気が利いてますね。

日本に帰った。はっぱさんから電話が来て,ハノイの塔は発見できたか聞かれた。なるほど,忘れてた。

サポート掲示板をdenasu.comへ移した。これでついに正式にHi-HOからdenasu.comへ移転。メールアドレスも地味に変えておいた。Hi-HOで唯一残っているのはウェザタイのランキングサイトなんだけど,これも数週間の内にはdenasu.comへ引っ越す予定。ウェザタイ作るときにランキングサイトを引っ越せるように作っておいて本当によかった。

Weather Typing iOSの話。ウェザタイはタイピングソフトなので,1ワード打ち切ったらそのワードを消して次のワードを表示するように作っている。これをiOSでやる方法を探しているが,難しい。Text Fieldを消すのは楽なんだけど,Text Composite(日本語入力中に出る変換前の文字列)を消すことができない。ちょうどUISearchBarの×ボタンのような動作をしたいんだけど。ってことでUISearchBarの実装を調べてみるとどうもこんな感じっぽい。

UITextField _clearButtonClicked
{
    ...
    [WebView clearText]
    [[UIKeyboardImpl sharedInstance] textChanged]
    ...
}

UIKeyboardImpl textChanged
{
    ...
    [self clearInput]
    ...
}

UIKeyboardImplは非公開のクラス。なのでもしUIKeyboardImplのメソッドを使ったらAppleにリジェクトされてApp Storeに登録できない。今のところ解決策なし。

Microsoftから,MSDN会員はWindows Store Appsの開発者アカウントを無料で作れるよ,というメールが来た。早速登録。これでGoogle Play,iOS Developper,Windows Store Appsアカウントが揃った。ってそんなに開発してる時間ないけど。

Weather Typing for iPhone。ようやくゲームができるようになった。でも完成まではまだまだ遠い。

2012111801

Weather TypingのAndroidからiPhoneへの移植作業を進める。iPhoneもMacも知識が少ないのでかなり進みが遅い。

3日間Macを使っていたのでWindowsを使うのに混乱する。スクロールさせようとすると逆になっちゃうし,Ctrl押そうとするとWindowsキー押しちゃうし。

ついにiPhone版Weather Typingの開発に着手。iPhone Game Development の本を買ったんだけど,既にWindowsのゲーム開発経験がある人にはすごく役立つ。本屋で日本の本もいくつか見てみたが,開発者アカウントの取り方とかxcodeの使い方とかAPIリファレンスばっかり。この本はゲームループの作り方とか2D/3Dのレンダリングの方法とか知りたいことが書いてあってよい感じ。

Azureを契約してみた。MSDN Premiumなので最小セットが無料で使える。1ヶ月750時間までなんだけど,1ヶ月に750時間以上はどうやっても使えないとかいう。とりあえずSilverlight版の作りかけWeaqther TypingをAzureに入れてみた。Weather Typing Cloud。タイトルだけなので選択しても何も起きません。ただこれだけだとレンタルサーバと同じなのであんまり意味はない。


Weather Typing英語版に向けてワード自動生成を考えているのだが,英語だと難しい。名詞の単数形と複数形とか,三単現とか,前半と後半の組合せで単語の形が変わってしまう。はっぱさんと話したところでは,変な文法が出てきてもネイティブは気にしないという結論に。その後けーさくと話したところ,文章じゃなくて形容詞+名詞ならそんなに変にはならないのではないかという結論に。確かに日本語版は文章ではなく形容詞と名詞の組合せにしてたんだ。てことでなんとかなるかも。


英語のdenasuページの充実も図らないと。

Objective-C。メモリ管理はCOMみたいに参照カウントなのか。Java C#に慣れてると今更そんなことしたくない。まだ実際のコーディングしてないけど全体的に言語仕様がめんどくさい・・・。

Objective-Cを勉強してるんだけど,どうも言語思想が分からない。言語的には,C言語の文法にSmalltalkっぽいオブジェクト指向をかぶせてPascalっぽい記述を導入してPerlみたいな記号の羅列がある感じ? 今のところなんだかちぐはぐな印象。例えば,C言語はとにかく効率を優先,とかSmalltalkはとにかく全てがオブジェクト,とかPerlはいろんな記述方法ができるように,とかPascalは読みやすさを優先,とかあるんだけどObjective-Cは結局どういう言語なんだ。Objective-Cを見てるとC++のよさが分かる。絶妙な言語仕様でうまいことCをオブジェクト指向に拡張してある。Objective-Cも実際にプログラムを書き始めてみたら印象変わるかなあ。

Mac開発環境のXcodeはなかなかよくできてる感じ。C言語が元になってるにも関わらず補完機能とかリファクタリング機能とか充実してる。この辺はEclipseのJavaとかC#なみに便利かも。