ついに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#なみに便利かも。
iOS Developer Programに登録。日本人は必ず一度はじかれるとの噂通り一度はじかれたり,開発させる気ないんじゃないの的な複雑な環境構築を乗り越え,ようやくiPod touch実機にテストアプリを入れることができた。あとは作るだけ。
なんだけど一つ問題が。Apple Storeにアプリを公開すると本名が出るのか。まあ本名公開して困ることはしてないけど,やっぱり抵抗がある。ま,これから勉強開始するところだし完成してから考えるか。
というかDocomoからWindows Phoneが出る前に完成させないとそっちに興味が移ってしまう。
携帯を契約せずにiPhone開発する方法を聞き込みしたところ,iPod touchでwifi使えばほぼiPhoneだという情報を入手。その線でいくか。
今月に入ってからウェザタイランキング上位に変動が。JISもQwertyでも上位が入れ替わっていますね。
でタイピングスレでもネタ的な扱いになっているけど,現2位の方の扱いはどうするのが正しいのか。一応私が不正記録認定をした記録は裏ランキングに載せることにしているんだけど,この記録の微妙さで3年間迷っている。一旦裏ランキングに載せておいて,コンタクトがあるまでそのままとかそういう対応をしますかね。裏ランキングの判断規準をもう少し整理してからかな。
Weather Typingランキングで過去のランキングを公開してみた。タイピング本の影響で少しでも過去が分かるような資料を公開しておこうかな,というところ。
過去に公開してたものだから大丈夫とは思いますが,勝手に公開するな,消しておいてくれ,みたいなのがあれば個別に対応します。
Weather Typing for Android Ver1.1をAndroid Marketで公開。まだ更新されてないっぽいけどそのうち更新・アップデート通知が行われるはず。修正点は以下の通り。
- 打ち込むワードにカタカナや全角英数字が混じっていたのを修正
- 「,」を「、」で打てるようにする
- 30ワード未満の場合ランキングに問題数を表示するようにする
- プレイヤー名を8文字まで許可する
- UIの改善
個々の修正の詳細は昨日の日記を参照。ワード数の選択については,今日一日いろいろテストしていたけどどうしても過去との互換性でどうにもならなくて諦めた。その代わり,例えばワード10問設定にしてランキングに登録すると「Android 10ワード」のようにワード数が表示される。一応10ワード内で何位,みたいには見ることが可能。
Android版ウェザタイ1.1。たまっていた修正項目を一通り実装した。明日1日テストして問題なければAndroid Marketに流そう。修正項目は以下の通り。
- ワード数の選択を廃止。代わりにbeginnerモード(5問固定)とexpertモード(30問固定)を選択できるようにする。beginnerでランキング登録した場合はbeginnerと表示されるので,beginnerランキングでもやり混みが可能。
- 例外は全てcatchしてログを吐いていたのだが,不明な例外はcatchせずに潔く落とすようにする。ハンドルされていない例外はAndroid Marketから参照できることが分かったので,独自のログをはくよりこっちの方が調査しやすい。
- アップロードダイアログのボタンがIMEウィンドウで隠れて微妙に使いづらいのを改善。
- ワードのひらがな行に,カタカナと全角英数字が混じっていたのを修正。Android Marketのコメントから。
- プレイヤー名が6文字しか入らないのを8文字まで許可。tomoemonさんのtwitterから。
- 分かりにくい文言を改善。tomoemonさん,typezukiさんのtwitterからヒントをもらった。
- 画面周りの変更。移植中のSilverlight版から逆輸入。
プレイヤー名について補足。文字数を増やした代わりに,スピード1000以上またはトータルポイント10万以上になると結果表示画面で文字列が切れる。レベル10以上の人は気を付けて下さい。
Windows PhoneとWindows 8(Metro)開発の練習にWeather Typing Silverlightをちょこちょこ実装。どうせ作り直しなら入力方式プラグインとかランキングでリプレイアップロードとかやりたいよね,的なことを考え出すとなかなか進まない。
Android版ウェザタイ,そろそろ修正したい項目がたまってきた。追加機能なくてもバージョンアップした方がいいのかな。
Denasu新年会。ぱじ氏にタイピング本を見せてみたが,反応薄。もはや脱出ゲームの人なのか。
とりえずインタビューのところだけは確認してもらったのだが,ロビーに関して「ぱじ氏が絶対必要と言ってきて」というのが「そうだっけ?」と反論。家に帰ってチャットのログを見てみた。以下2002/3/17のチャット抜粋。
モルタルコ の発言 : ウェザタイ大会を開くらしいですよ パジャ の発言 : 参加しれ モルタルコ の発言 : 掲示板によると20人ぐらいでやるとか やらないとか モルタルコ の発言 : 本当は我々が主催しないといけ ないんだけどね モルタルコ の発言 : ネットワーク対戦は初心者には敷居が たかいらしいね モルタルコ の発言 : ロビー欲しいね パジャ の発言 : 欲しすぎ パジャ の発言 : 全然告知しないである日いきなり 「ロビーできました」ってのがイカス
ウェザタイ大会ってのは当時むなしいさんがオンライン開催していた「WT大会」で,ロビーがあれば楽だったのに,という話。これを見るとどっちに責任があるのかは・・・?
タイピング本をだいたい読み終わった。第I部にウェザタイの初速に関しての分析があって,なるほどこのソフトはそういう性格のソフトなんだというのが今更分かったり,いろいろな発見があった。
あとは配列系も興味深い。ウェザタイとしては一通りの有名どころの配列をサポートして以来満足していて,新配列系は重視してなかった。でも,もし新しい配列が一定のユーザ数を獲得して要望が挙がってきたらウェザタイのポリシー的には正式対応するのかなあ,とか。サポートするかどうかの基準がすごく難しいし,いろんなバージョンがあってサポートしきれないとか考えないといけない点はいろいろあるよね。
この本と直接は関係ないけど,もはや連絡先はメールアドレスじゃなくてtwitterアカウントなんだなあ,ってのを実感。私もtwitterアカウントは持ってるけど,元々ぱじ氏と連絡とるためだったので最近放置している。今までDenasuサイトで告知してはいなかったけど,そろそろ公式アカウントとして有効に活用しますかね。とりあえず@Mortarcoです。使い方よく分からないし,日記とどう使い分けるのかが微妙だけど。
Android版Weather TypingのランキングをAndroidで見ると名前の最後が文字化けすることがある問題を修正。Android JavaのURLEncoderがバグっていた。以前1つ対策したのだが,もう1つバグがあった模様。
URLEncoder.encode(s, "ISO-2022-JP")
のようにUnicodeからJISコードに変換した場合,以下の2点がバグっている。
- 全角半角が混在した場合,全角半角の切り替えポイントで「%1B%28%42」が入らない
- 最後に「%1B%28%42」が入るべき箇所が「%1B」になってしまう
なんていい加減な。それともJISがそういう規格なのかなあ。クライアント側を直しても既にアップロードしている人はバージョンアップしないといけなくなってしまうので,サーバ側で対策。しかもAndroidのバグがいきなり直った場合でもうまく動作しないといけない。結局以下のPerlコードで対策した。
if(($value =~ /%1B%24%42/) && !($value =~ /%1B%28%42/)) { $value =~ s/%1B([^%])/$1/g; $value =~ s/%1B%24%42((%[A-Fa-f0-9][A-Fa-f0-9])+) /%1B%24%42$1%1B%28%42/g; }
JISの開始コードがあって終了コードが1つもない場合,「%1B」が単独で存在したら消しておき,全角部分をJIS開始コードとJIS終了コードで囲むという処理。一応テストはしたけどあらゆるパターンで大丈夫なのか自信がない。
MSDN納品。とりあえずMSDNからダウンロードできるところまでした。というか前回もそうだったけどすごく分かりづらいので,オープンライセンスを取得してMSDNダウンロードできるまでのメモ。
- MSDNをオープンライセンスで買うと,購入ありがとうメールが届くので書いてあるURLにアクセス。メールアドレスを入力するようなことが書いてあるが,URLにメールアドレスが埋め込まれているので自動的に登録完了。
- 上で登録したのはオープンライセンスの管理者。MSDNからダウンロードするには,管理者になりきって自分のMSDNアカウントを発行する必要がある。MSDN Volume Licensing Service Centerから[ライセンス]-[契約の一覧]でライセンスを選択し,「MSDNサブスクリプションの管理」を選ぶ。
- ユーザ一覧から「ユーザの追加」を選び,ユーザを作成。購入した情報に基づいてライセンスを割り当てる。ここで,IEを使っていると「特典を 1 つ以上選択してください」というエラーが出てどうにも先に進めないので別ブラウザを使う。特典を入力するとメディア送付先とか出てくるので入力。
- ユーザ作成が完了すると「お客様の MSDN サブスクリプション特典アクセス番号がご利用いただけるようになりました。」メールが届く。このメールに従って,自分で登録したユーザ情報を自分で入力。
2年前はMSDNアカウントをどこから作るのかよく分からなくて悩んだが,今回はIEを使ってはいけないというところで悩んでしまった。MSのサイトだからわざわざ素のIEを使ったのに・・・。
前Purentroを作ったとき,.NETのリモートデバッグをやろうとしてあきらめたのだが,今回別件で必要になったので調べてみた。きっしーとかWebで得た情報によると,リモート側で,ローカルと同じフォルダ構成,ローカルと同じユーザ名のユーザを作成し,プロジェクトのデバッグプロパティで「ユーザ名@ホストIPアドレス」を指定すれば通常のリモートデバッグと同じ方法でいけるっぽい。なんかネイティブデバッグに比べてめんどくないですか。
ついでにWindows Installerのデバッグ。XP時代にやってたときはmsiexecをリモートデバッグしてブレークポイントはったりしてたような気がするけど,今は権限昇格とかいろいろあって何が何だかよく分からないなあ,と思っていた。でM氏に聞いた情報によるとMsiBreak変数にカスタムアクション名を入れておくとそこでダイアログが表示されてプロセスIDが出るので勝手にデバッグしてくれ,ってことらしい。一見親切に見えるけど,やってみるとめちゃくちゃめんどい。
C#のXMLドキュメントコメント。MSが公式に出しているSandcastleを使ってみた。リフレクションをフルに使ってMSDNみたいな形式でドキュメントを出してくれる。標準の型とか親クラスはMSDNへのリンクまで貼ってくれるというやりすぎなツール。
GUIのフロントエンドSandcastle Help File Builderってのもあるらしいけど,常に最新版を使うならやっぱCUIよね,ってことで使い方。ちなみにOSはWindows 7 x64,Visual Studioは2010 SP1。SandcastleはJune 2010(Version 2.6.1062.1)。
- インストール
-
- Sandcastleの最新版をダウンロード,インストール
- 環境変数にDXROOTが登録されるが,間違っているので最後の「」を削除しておく。
- ドキュメント生成
-
- Visual Studioのプロジェクトの設定で「XML documentation file」を有効にする。その際ファイル名は「プロジェクト名.xml」じゃなく「comments.xml」にする。
- XML Documentation Comments形式で正しくマークアップされたプロジェクトをビルド。
- comments.xmlとビルドしたファイルと「C:Program Files (x86)SandcastleExamplesSandcastlebuild_Sandcastle.bat」を同じフォルダにコピーする。
- ビルドしたファイルがexeの場合,build_Sandcastle.batを書き換える(※1)。
- プライベートメソッド等非公開メンバも出力するには,build_Sandcastle.batを書き換える(※2)。
- 上記フォルダで以下を実行。形式は引数によっていろいろ選べる。
build_Sandcastle.bat vs2005 ビルドしたファイル名(拡張子なし) html
※1 修正前:MRefBuilder %2.dll /out:reflection.org 修正後:MRefBuilder %2.exe /out:reflection.org
※2 修正前:MRefBuilder %2.dll /out:reflection.org 修正後:MRefBuilder %2.dll /out:reflection.org /internal+
最近は会社でWPFを使っている。C++の頃と比べるとめちゃくちゃ楽。イメージ的には,WPFではXAML10行くらいですむものをC++でやったら100行かかる,みたいなことを100個作るみたいな。
特に会社でWPFをやって初めて気付いたのがエラー処理の楽さ。C++(Win32 API/MFC)の頃は,UIを駆使するプログラムを書くと何かやる度にエラー処理を何十個も書いていたのだが,WPFだとほとんどバインディングですんでしまってエラー処理がほとんどなくなる。まあ例外に変わっただけと言えないこともないんだけど,それでも入り口にtry-catch書いておけばすむわけで。家プログラミングだとそこまでエラー処理入れないので気付かなかった。
もう一つ。今回は全関数について関数仕様書を書かないといけないかも,みたいな話があって,XML Documentを試してみた。けど結構すごい。関数コメントに書いたものを抽出して勝手にドキュメントができるのは今や当たり前だけど,.NETのはコメントと関数が合ってないとビルド時に警告が出るようになっている。ということは,警告が出なくなるまで修正してやれば,関数コメントは完璧になるわけで。この手のことをやるといつも問題になる,コメントと関数がだんだんかけ離れていくというのがなくなる。Java Docとか最近見てないけどこんな風になってきてるのかなあ。
ただデフォルトでXSLTとスタイルシートがない(と思う)のが残念。Purentroを題材にそれっぽく見えるのを作ってみようかな。
タイピングスレが面白い流れに。ちなみにウェザタイはWeather Typing開発裏によると,0から作って基本的なところまでが1週間,対戦含めて完成まで1ヶ月だったっぽい。
あと入力不能時間に関しては,よくある質問にある通り,ハンデを-9にするとなくなる。リズムが乱される人はその設定でプレイするといいかも。
Windows 8はとりあえずおいておいてデザインの勉強。WPF/Silverlightを本格的にやるにあたって,デザインの基礎くらいは勉強しないとね,ってことで。教科書的なものを読んでるけど奥深い。
夏休みにSilverlightで遊んでみた。Windows Phone向けウェザタイに向けて,って感じ。
なんだけど,やろうとすることがことごとくSilverlightではサポートされてなくて思った以上に苦労する。WPFなら楽なんだろうけど,Windows Phoneで動くようにするとなるとSilverlightだよね,ってことで。
まずXAMLからのリソース使用。WPFと同じようにresxに文字列を定義してXAMLからStaticResourceで表示しようとしたが,Silverlightではサポートされていない。そのためProperties.Resourcesをラップしたプロパティを作成してBindingで文字列を表示することに。でもそれだとExpression Blendでデザイン時に表示されないのでXAMLでインスタンス化。MSDN Magazineのこの辺を参考にした。
次に困ったのが背景のスクロール。画像のタイル表示はSilverlightではサポートされていないので画像をキャンバスに貼り付けて複数配置。次にThicknessAnimationがSilverlightではサポートされていないのでDoubleAnimationで中継。ここまでやってみたけどかなり重い。
とりえずAndroid版のタイトル画面をほぼそのまま再現してみた。タイトル画面。Silverlightだからもっと凝った画面にできるけどまだいいか。このままでも画面サイズを変更したいという要望はクリアできて,横長にすればある程度長い文字列も打てる,のかな。ちなみにMacでも実行可能だし,moonlightを使えばLinuxでも実行可能。
忙しいので特に何もしてなかったけど,そろそろ夏休みおよび謎休みという噂なので何かしようかな。WPFを本格的に使うことになりそうだしきっしー(誰)に伝授というのもあるし,Windows Phone 7の話もあるし,Silverlightで何かしましょう。
Androidウェザタイのコメントで「2メートル」のひらがな文がカタカナになっていて変換しないと打てないというのが挙がっている。
あとAndroid Marketには落ちたときのログが表示されるのだが,こっちもいくつか挙がっている。この辺を直して一度バージョンアップするかも。
VectorのWorld Testerレビュー。いい感じですね。Weather Typingのときもそうだったが,Vectorの「科学」カテゴリで1位になっていた。
Android ウェザタイは公開2週間が経過し,もう少しで100ダウンロードといったところ。PCとの対戦を目指してとりあえずSilverlight版でも作ってみますかね。
VectorのWorld Testerレビュー掲載は29日なのだが,何故かその前に窓の杜で紹介されている。Weather Typingのときも微妙に同じ時期に掲載されていたので,Vectorと連携しているのかなあ。
で,多分公開が午前10時頃なんだけど,その瞬間からトップページのアクセス数が飛躍的に伸びていて,今日だけで見ると人喰い掲示板関連のアクセスに匹敵する。World Testerのダウンロード数もいつもの200倍くらい。これでVectorのレビューも掲載されると少しは盛り上がってくるのかなあ。
窓の杜の記事。
時間を停止した際もマウスで加えた力は累積する仕組みになっているため、大きな力を加えたい場合は時間を停止した上で何度も同じ方向へ力を加えてみよう。
え? と思ってやってみたら確かにそうなっている。バグっぽいけどそういうことにしておきます。
Denasuへのアクセスが普段の4倍くらいに増えている。掲示板もすぐCore吐くし。
ウェザタイアンドロイドも一段落,WorldTesterも動きがあったし,次何しよう。決まるまでまた脳科学に戻りますかね。
少しでもAndroid版の宣伝になれば,とVectorのWeather Typingの紹介文を編集。したついでにずっとほっておいたWeather TypingとWorld Testerを最新版に差し替えたりスクリーンショットを公開したりしてみた。で今日更新されたのだが,VectorからWorld Testerの新着ソフトレビューの公開依頼が来た。新着でもないしこっちを宣伝したいわけではなかったのだが,ぼた餅的な感じで楽しみにしていましょう。6/29とのこと。
掲示板に発言したが,Android版ランキングの一部が文字化けしている。とりいそぎサーバ側で対応。あまりテストできていないので今週末にもう少しテストする予定。次のAndroid版ではクライアント側で対策するかも。
原因は,Javaの「URLEncoder.encode(s, “ISO-2022-JP”);」が,日本語とASCII文字列が混じっていた場合,JISの終了コードを途中の切り替わり部分で生成せず,最後にしか生成しないため。この文字列を送られたPerlのサーバが途中のASCII部分をJISにみなしてしまい,文字化けする。どうもJavaのバグのような気がする。
Android版ウェザタイは少しずつダウンロード数が増えている。シャドールームさんで紹介してもらいましたが,宣伝しないとAndroidのアプリケーションは数が多すぎて埋もれてしまいますね。
ちらほらランキングに登録して下さっている方もいてありがたい。30問に設定しないと得点がのびないのは気付いてもらえているんだろうか。設定には書いてあるけど,やっぱりQ and Aか何かを公開した方がいいかなあ。
Android Marketのひみつ
- Android Marketは「公開」ボタンを押すと即Marketで公開される。ということはGoogleの中の人によるチェックは全くないということですね。
- Marketに登録するとダウンロード数とアクティブインストール数が見えるようになる。が,更新される時間も頻度も不明。1日1回くらい? そしてダウンロード数よりアクティブインストール数の方が多いのは何故?
- Androidの作者登録をすると,OS入れ替え可能な開発者用のAndroid実機が買えるようになる。どこから買うのか不思議だったけどこういう仕組みか。
Weather Typing for Android Ver1.0を公開。Android Marketでも「typing」で検索すると出てくる。ダウンロード数やインストールしている人の数とかも分かるようになっているようなのでしばらく様子を見てみよう。