Denasuのデザインを少しいじってみた。そろそろバナーも変えたいんだけどなかなか難しい。

C#のXMLドキュメントコメント。MSが公式に出しているSandcastleを使ってみた。リフレクションをフルに使ってMSDNみたいな形式でドキュメントを出してくれる。標準の型とか親クラスはMSDNへのリンクまで貼ってくれるというやりすぎなツール。

2011092501


GUIのフロントエンドSandcastle Help File Builderってのもあるらしいけど,常に最新版を使うならやっぱCUIよね,ってことで使い方。ちなみにOSはWindows 7 x64,Visual Studioは2010 SP1。SandcastleはJune 2010(Version 2.6.1062.1)。

インストール
  1. Sandcastleの最新版をダウンロード,インストール
  2. 環境変数にDXROOTが登録されるが,間違っているので最後の「」を削除しておく。
ドキュメント生成
  1. Visual Studioのプロジェクトの設定で「XML documentation file」を有効にする。その際ファイル名は「プロジェクト名.xml」じゃなく「comments.xml」にする。
  2. XML Documentation Comments形式で正しくマークアップされたプロジェクトをビルド。
  3. comments.xmlとビルドしたファイルと「C:Program Files (x86)SandcastleExamplesSandcastlebuild_Sandcastle.bat」を同じフォルダにコピーする。
  4. ビルドしたファイルがexeの場合,build_Sandcastle.batを書き換える(※1)。
  5. プライベートメソッド等非公開メンバも出力するには,build_Sandcastle.batを書き換える(※2)。
  6. 上記フォルダで以下を実行。形式は引数によっていろいろ選べる。
    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を本格的にやるにあたって,デザインの基礎くらいは勉強しないとね,ってことで。教科書的なものを読んでるけど奥深い。

VMware 8を購入。円高万歳。ということでWindows 8を試してみた。VMware 8ならインストールも特に問題なし。Aeroも有効になっている。スタートメニューがメトロになったのか。週末にもう少し遊んでみよう。

2011091601

Windows 8。VMware Workstation 7だと「:-) HAL_INITIALIZATION_FAILED」でダメだった。おちゃめなBSOD。と思ったらVMware Workstation 8がダウンロードできるようになってるのか。今日帰ってきたら試してみよう。

Windows 8 developpers preview公開ということで落としてみた。一般の人でも落とせるっぽい。でも会社のVMWare 6.5 WorkstationではVMWareが落ちて動かなかった。なので家でダウンロードしてVMware 7で試そうとしているが,ダウンロードがめちゃくちゃ重い。

Virtual PCなら動くんだろうけど,3Dが動かないと楽しくないし,VMWareでだめならセカンドマシンに入れてみようか。

はっぱさんが近くに住んでいることが分かり,カレー屋へ行ってレンタルサーバの話をした。

はっぱさんも最近レンタルサーバに乗り換えたのだが,セカンダリネームサーバがないということでdenasu.comにDNSをたてた。

yumでbindをインストールしてnamed.confを設定してゾーンファイルを設定してBIND起動。したのだが,nslookupしてもつながらない。しばらくはまってたのだが,結局named.confのlisten-onが127.0.0.1になっていたのが原因で,外部向けのインターフェースでも受け付けるようにしたらうまくいった。まあ実際にはchroot jailとか逆引き設定とかいろいろはまったのだが,この辺は少し調べれば分かるので。

9/8 11:00-12:00頃denasu.comサーバが一瞬止まるらしい。ワードサーバはいいけど,ロビーは自動起動していないので最悪9/8の夜まで止まってしまう。自動起動の設定をしてみたんだけど,データベースの起動と待ち合わせができなくてあきらめた。

夏休みに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」で検索すると出てくる。ダウンロード数やインストールしている人の数とかも分かるようになっているようなのでしばらく様子を見てみよう。

デザインをリニューアル。IE8/IE9/Firefox/Safari/Androidでしか試してないのでおかしくなるブラウザもあるかも。でもいいや。

Androidウェザタイ統合テスト中。テスト項目は130件作成して120件消化。累計バグ出し目標30件に対して25件修正完了。来月中旬くらいにはクレジットカードが来るのでそこでAndroidマーケットに登録する予定。

Graffiti for Androidを試してみる。GraffitiはPalm標準の入力方式で,タッチパネルで高速入力を可能にしていた。Androidではタッチペンではなく指で入力するのでPalmほど高速に入力はできないが,Weather Typing for Androidで比べてみたところ,フリック入力と同程度には早く入力できた。

AndroidウェザタイはIMEを使用するので,少なくとも有名どころのIMEでテストする必要がある。ということで周りの人に頼んでNEC端末のATOK,SHARP端末のiWnn,XperiaのPOBox,フリーのOpenWnn,simejiを試した。結果はどのIMEでもOKぽい。記号とか入るともしかしたら打てなくなる機種があるかも・・・という感じではあるけど。

それとは別に,e-Token氏のXperiaはarcではないAndroid2.1だったのだが,矩形描画が塗りつぶされない。エミュレータで2.1にしてみても再現する。結局Style.FILL_AND_STROKEでは塗りつぶされなくてStyle.FILLにしたら塗りつぶされた。2.1以前ではサポートされてないってことなんだろうか。

テストプレイ+バグ修正メモ

  • アプリケーションをバックグラウンドにしたときにスレッドを停止させるようにする。電池消耗の回避。
  • Androidでは30問は長いのでデフォルトを10にして設定可能にする。ぱじ氏の指摘
  • 入力方法を設定できるようにする。けーさく氏の指摘。
  • IME前提にしてるので基本的にミス入力を判定できない。何か方法はないかな。
  • 自分のAndroid入力スキルではスピード60くらい。プロ?の人は5倍くらい入力できたとしても300くらいか。ミス入力もほぼないので実質100種類くらいしか得点のバリエーションがないことになる。何か考えないと。
  • Bluetoothはプレイはできるけどランキング参加不可のような形にする予定。ハードウェアキーボードは判定不可能なので今のところ入力禁止にしてるけどここもランキング参加不可にできないか。
  • IMEの方式はFix。基本IMEを使うが,1問打ち切るごとに入力中の文字列を消すことで学習履歴が汚れるのを回避するようにした。

Androidマーケットに登録しようとして意外なところでつまる。VisaかMasterカードが必要なのか。.comドメインはなんとかなったけどこれは無理そう。急いでクレジットカード作らねば。

ひととおりAndroidウェザタイの実装は完了。ランキングにも登録してみた。

あとはAndroid使いの人にテストプレイしてもらいつつバグをとっていくか。

Android開発。タイトル→ワード選択→30問打つ→結果表示の一覧の流れはできるようになった。が,いくつか懸案が。

今考えている方式は,IMEを使ってひらがなを打ち込むという仕様。しかし,これで何度もプレイしてるとIMEにひらがなの学習結果が大量に作られてしまう。IMEの学習を一時的にオフにする方法もなさそうだし,どうするかなあ。漢字打ちにすればある程度解決するだろうけど,Android以外との対戦とか混合Webランキングが意味なくなっちゃう。

ATOKだと「・」が打てない。他にもIMEによっては打てない文字がありそうなので調査が必要。

# と思ったらキーボードの日本語のモード「/」を打つと「・」になるっぽい。

ゲームアプリはみんなそうなんだろうけど,常に30FPSくらいで動いているので電池の減りが早そう。特にホームボタンを押してバックグラウンドにいった場合,そのまま気付かないと電池が0に,なんてこともあるかも。

denasu.com@VPSなかなか調子が良い。どう考えても自宅サーバよりコストパフォーマンスがいい。仮想サーバなのでもっと重いかと思ってたけど,SSHでの接続は全く重くないし,Webサーバのレスポンスも悪くない。掲示板とランキングも移行しようかな。


Android開発。ウェザタイのコア部分の移植はだいたい終わった。リプレイとかCPU戦とかもめんどくさいから全部移植してみたけど,Ver1では動かないようにしておくか。それでも対戦については通信フレームワークをDirectPlayに頼っていたので,完全に作り直しになる。ゆっくり対応していきますかね。

画面はとりあえず今の状態を実機で撮ったもの。画面が狭くて苦労する。

20110503

denasu.comドメインを取得。ぱじサーバがなくなったときから考えていたが,Android開発でパッケージ名をドメイン名にする必要があったのでこれを機に。今回はVPS方式のレンタルサーバを使ってみたが,Linuxをまるまるrootで使える感じなので,自宅サーバにリモートアクセスするのとほとんど同じことができる。とりあえず今までbeanfan.comを借りていたロビーサーバとワードサーバを置き換えた。denasuのWebサイトも新しいページはdenasu.comにするかも知れないけど,少なくともトップページはこのままかなあ。

入力方式は完全にはやりたいことを実現するのは難しそう。自作IMEは特許問題があるので避けるとして,IMEを使う方法は内蔵キーボードは防げそうだがbluetoothは防げない。いろいろなIMEを試してみたがIMEによって予測変換が出たり出なかったり。ネットランキングやるのに必要な公平性を確保するのが困難。てなわけでネットランキングはなんとなくでやるしかないか。

開発自体はとりあえずワードを選択するところまでできた。WindowsとAndroidの考え方の違いからUIを作り直しているので時間がかかる。

そういえばJavaのパッケージ名をどうするか。Javaはパッケージ名をドメイン名にするのだが,みんな真面目にドメインとってるのかなあ。以前ぱじ氏と取っていたドメイン名を復活させようかな。


Android開発で久々にEclipseを触っているのだが,Visual Studioで便利な部分が結構入っている。AndroidもWPFに近いし。どっちがどっちを取り込んでいるのか,いろいろ追求していくと似通ってくるのか,興味深い。

さらに調べていくと特開2009-266236でアップルからフリック入力に関する特許が出願(未請求)となっている。2009年4月出願てことはあと1年待ってから一気に訴えていく作戦なのだろうか。どっちみちhanabi入力が拒絶されているから請求しても成立しないだろうけど。Weather Typingフリック版は1年後とかじゃ遅いよねえ。

# ちなみに特許専門家ではないのであまり本気にしないで下さい。