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

ゴールデンウィークで捗ったのでWeather Typing 3の進捗。ひととおり対戦ができるようになった。まだ旧ウェザタイの対戦を真似して作り直したところなので新しいことはあまりないが,画面の大きさを変えたり,一対戦ごとにルールや対戦相手を変えたりはできるようになっている。安定化したら一度テスト公開しようかな。

対戦モードはシングル,インターネット対戦,LAN対戦,ロビー,CPUの5つ。インターネット対戦は,ロビーを使うことでIPアドレス指定を不要にしたモード。IPアドレスが必要な場合はLANモードで直接指定もできる。

2015043001

2015043002

2015043003

8年ぶりに情報処理試験を受けた。前回10点足りなくて落ちたエンベデッド。今回はタミヤタンクも作ったし大丈夫でしょう,と思ったけど午後Iは結構難しかった。先週マルツパーツで見て覚えたZigBeeに関する問題があったので,Arduinoも役にたったことにしよう。

今回解いた問題はウェアラブル心電計,レジのお釣り装置,テレビ会議システムだったんだけど,やっぱり問題が具体的で面白い。広く浅くハードの勉強をしたい人にはお勧め。

情報処理試験は久しぶりだったけど,あんなに慌ただしい試験でしたっけ。お昼休み1時間あるから余裕でご飯食べに行こうとしたら20分前に着席せよと言われたり,休み時間30分かと思いきや7分しかなかったり。会場が歩いて行けるところだったのはよかったけど。

ツッコミどころとしては,二千円札はお釣りとして出ないようにする,って堂々と書かれてて二千円札がかわいそうになりました。

昨日買ってきた「タミヤ タンク工作基本セット」を使ってモーター制御を試してみた。タンクのモーターにモーター制御IC「TA7291SG」をつなぐ。ここにArduinoの電源をつなぐとArduinoが壊れるので別途モーター用の電源がいるのだが,3V電池じゃ出力不足という情報があり,ACアダプタから延ばしたUSBから電源を取ることに。「ブレッドボード用ミニBメスUSBコネクタDIP化キット」を購入してきたので初のはんだ体験。はんだというと鉛のイメージだったんだけど最近は鉛じゃないんですね。

2015041301

とりあえずやってみたがうまく付けられてるのかな。まあ出力は5Vがちゃんと取れていたので大丈夫だろう。

で,Arduinoからモーター制御IC用電源と,PWMで制御入力を入れて,プログラムをちゃちゃっと入力。

サイズ大きいけど動画も見られます。なんか出力不足なのか遅いけど,前後に動くようになった。次はモーター2個にして左右に曲がれるようにしたり,Bluetoothでスマホからラジコンみたいに動かしたい。

これで来週の情報処理試験エンベデッドも準備OKだ。きっと。。

はっぱさんとArduino勉強会の2回目。前回はLEDの実験だったが,今回はモーターがテーマ。動くものができると楽しいですよね。

アキバに部品を見に行くのが目的だったが,山手線が動いていない関係で新橋で下車。ついでなのでタミヤのプラモデルファクトリーへ行ってみる。20数年ぶりのミニ四駆とか,工作キット,プラモデルなどなんでもあって飽きない。

その後アキバに行ってはっぱさんいきつけの部品屋めぐり。いきあたりばったりだったが一通りモーターを動かせる部品を購入。したところで時間切れ。Bluetoothまではいけなかった。

denasu.comにGITサーバをたてた。Visual Studio 2013になったときにVisual Source SafeからGITを使うようにしたのだが,ローカルリポジトリからリモートリポジトリへ変えた。今までメインPCとモバイルPCで開発するのにOne Driveを使って同期していたのだが,zipにして全部コピーして面倒だった。これでファイル毎に楽に同期できる。

Visual Studio 2013はSSHに対応していないのでどうしようかと思ったが,結局gitプロトコルでアクセスすることにした。ただ,gitポートを開けるのはセキュリティ的に問題があるので,ポートフォワーディングすることに。9418をSSHポートフォワードしたSSHクライアントを起動して,「git://server/・・・.git」にアクセスすればOK。

アメリカ出張。飛行機の中で,Twitterで話題?のちきりんさん著「マーケット感覚を身につけよう」を読んだ。自己啓発書なんかは読まないからよく分からないけど,この本は多分そういうのとは違う気がする。

この本はマーケット感覚(価値の見つけ方)が主題の本だけど,お金が発生しないことでもあてはまることが説明されていて,自分の場合はフリーソフト作成にあてはまる。そこで,フリーソフト作成とマーケット感覚について考えてみたのでここに残しておこう。飛行機で映画見ない人はひたすら何かを考えてしまうわけですね。

フリーソフトというのは,自分のために作ったソフトを公開して,同じことに困っている人にも使ってもらおうという趣旨のものだが,ユーザは多い方がフィードバックももらえて作者もユーザも嬉しい。ただ,フリーソフトの性質上,万人に受け入れられるものではなく一部の人が嬉しいものなので,狭い市場でどれだけピンポイントでユーザに届けられるのかというのを考えないと,全く知られずに終わってしまう。

フリーソフトの価値

そもそもフリーソフトの価値って何? という話になるのだが,今まで漠然と考えていたのは以下。

企業が作るもの:

  • 万人受けするものを作らないと規模が出ないので,一部の人だけが満足するようなソフトは作りづらい
  • 作成者がユーザであることは希で,受注だったり上が決めた企画だったりするので,ユーザの感覚と開きが大きい

フリーソフト:

  • 採算度外視なので,一部の人しか満足しないようなソフトでも作れる
  • 作成者がユーザであることがほとんどなので,ユーザの感覚を熟知している

ゲームだと制作者の熱意によってまた違ってくるかも。個人的には,企業が作ったものはライトに使う分にはいいけど,ヘビーに使おうとすると使いづらい。逆にフリーソフトはその分野を知っている人ほど使いやすい印象。代表例だと,TV/DVD視聴ソフトとか電子書籍リーダーなんかは単なるコンテンツのおまけ程度で,使う人のことを全く考えていないUIが多い。

てことで,1年前に作ったAnalog Book Readerでは,そこの不満を解消するために,ユーザからしたらこういうのが欲しいんだよ,的な電子書籍リーダを作った。その辺は以前の日記で書いているのでいいとして。ただ,ダウンロード数はあってフィードバックももらっているんだけど,いまいちフィードバックをもらって解決して,的なループまでいっていない。

成功例

14年前,学生の時に作ったWeather Typingはマーケットをあまり意識しないで作っていたが,たまたまタイピングコミュニティの人達に届いてフィードバックをたくさんもらい,一緒に育てることができた。これを再度分析してみる。

Weather Typingは,当時SEGA ザ・タイピング・オブ・ザ・デッドをやり続けて,タイピング対戦だけに特化したソフトがあればいいのに,というきっかけで作ったが,対戦ができることが価値かというとそうではないんだろう。

その後,GANGASさんで紹介してもらってタイピングゲームのコミュニティから使ってもらうようになり,掲示板で議論しながら対戦機能を完成させていった。SWOTっぽく分析すると

  • 企業とは違い,作者がユーザに近いところにいるのでリアルなフィードバックが得やすい位置にいる
  • 作者自身がユーザなので要望の取り込み方,取捨選択の基準がしっかりしている
  • 学生で時間があるので,ロビーサーバでユーザとチャットしたり実際に対戦したりできた

という強みがあって,

  • 当時できつつあったタイピングソフトユーザのコミュニティ
  • TVでタイピングソフトが取り上げられて,ちょっとした流行になっていた

という環境があって,

  • 作者に直接要望を言えて,
  • タイピングソフト利用者にとって違和感なく実装してくれる

という価値をユーザに提供していたことになる。と思う。で,フィードバックを実現していくことで,「この作者に要望を出せば理想のソフトができる」という信頼を得られ,さらにフィードバックが来るようになり,ループができた。

今作っているWeather Typing 3も,タイピングサミットでもらった要望をまとめあげる予定なのでそこはブレていないが,もう少し小出しに出していかないと求めるものとずれていってしまういそうだ。一応この日記で情報は出していってるが,動くものを少しずつ公開していった方がいいのだろう。

今後の作戦

じゃあAnalog Book Readerはこれからどうしようか。今までは,ターゲットが毎日本を読むヘビー読書家なので,Windowsアプリだとあんまりそんな人はいないのかなあ,くらいに思っていた。

でもこの本を読んだ後だと,例えば

  • 現状,電子書籍リーダーは各社が自社のコンテンツを見るためのソフト(自主的な規制状態)になっているため,自由競争になっていない。
  • ユーザは,電子書籍リーダーなんて紙に比べて読みにくいでしょ,と思っているため,電子リーダーだからこそできる価値に気付いていない

という,ある種ブレークスルー直前状態なわけで,ここになんとか貢献できないかなあ,という想いがある。

究極的には,電子書籍リーダーが,単なるおまけ的なアプリから,紙ではできなかった読書体験をするアプリとして認知されるようにしたい。なので,そういうコミュニティ的な活動が盛り上がってAmazonとかを巻き込んでいく必要があるんだろう。まだそんなコミュニティはなさそうなので,盛り上げることになるのだが,それをどうするか,そこまでは本には書いてない,よなあ。

Windows ストア 電子書籍リーダーAnalog Book Readerを公開して1年が経過。ちょうどダウンロード数も10,000を超えたのでまとめ。

2015032101

ダウンロード数の推移を見てみると割とコンスタントにダウンロードがある。Windowsストアを使っている人自体少ないと思っていたのでダウンロード数が収束しないのは不思議。ちなみにウェザタイの最初の1年のVectorダウンロード数は2,000くらいなので,Flashゲームを別格とすると,うちのダウンロードアプリの中でもダウンロード数の上がり方は高い。

ランキングも日本のカテゴリランキングはずっと10位以内ということでアプリの少なさを物語っ・・・ではなくてありがとうございます。

レーティングは世界で67回,平均3.8とまずまず。海外からのダウンロードやコメントも割と増えているのは嬉しいが,アラビア語圏内から星5個もらったりすると本当に使えているのか心配になる。右から左に読むテストなんてしてないですよ。コメントについても,有用なコメントを最近ももらっているので応えたいのだが,ウェザタイの開発が終わるまでは難しい。

Weather Typing 3の対戦機能を実装中。対戦相手の管理を自力で実装しているのだが,ホストの作成や参加はロビーを使うようにするつもり。サミットでも言われたが,IPアドレスを調べて他の人に教える,というやり方は難しく,ロビーを使えば気にしなくて済む。旧ウェザタイはインターネット前提ではなかったのでああいう形だったが,今は前提としてもいい気はする。

ウェザタイのウィンドウからホストを選択するとロビーに隠し部屋ができて,チャットもその場でできる,って感じかな。ロビーもウェザタイのウィンドウに入れられるとなおいいけど。

で,ロビーを前提にするということは,対戦モードで使う名前をロビーの名前にするということになるが,折角なので,対戦モード,ロビー,ランキングのユーザは統一を図りたい。というより旧ウェザタイがバラバラになっているのがおかしいのだが。一番ちゃんと管理してるのはランキングなのでランキングのユーザに統一するのがいいけど,どうだろう。何かいいアイデアがあれば教えてもらえると助かります。


というところで技術的な壁が一つ。ランキングのパスワードはPerlのCrypt関数(LinuxのCrypt関数と同じ)で不可逆暗号している。復号はできないので,Javaで作ったロビーから同じアルゴリズムを使えないと統一できない。調べたところ,Linux Cryptアルゴリズムは当然公開されていて,鍵が特殊なDESらしい。Cの実装例はいくつか公開されていたので,参考にしつつJavaに実装はできた。

対戦モードの進捗としては,進んできてはいるんだけど,まだまだかかりそう。10月までに終わるのか。

Weather Typing開発。スコア関連機能とワード関連機能は実装完了。ということでついに対戦機能にとりかかる。ランキングとかロビー機能にも手を付けたいが,来年のタイピングサミットを考えると間に合わなくなりそうなので対戦機能を最優先で。

うちのサポート掲示板。ほっておくと1日200件くらいのSPAM投稿がある。今まではURL書き込み禁止と特定のホスト禁止で対策してきたのだが,最近は限界。ということで大幅に拡張した。HTML見れば分かるのでここに書いてしまうが,JavaScriptを解釈しないと書き込めないようにした。

  1. Formの書き込み欄の名前をJavaScriptからランダムに変える
  2. FormのActionをJavaScriptから変える
  3. CSSで非表示にしたエディットボックスを置いて,入力されたらSPAM認定

最初1を思いついて,JavaScript観点での対策を調べたら2が見つかって,あとはCSSにもリスク分散したいということで3を追加した。まあやるだけやっとけということで。

あとはCAPTCHA(読みづらい文字を表示して入力させる例の仕組み)というのもあるが,人にも読めない文字が表示されて,書き込む意欲がなくなるので却下。たかがSPAMのために本来のユーザが書き込みにくくなるのは本末転倒で,SPAM業者が懸命に手で書き込んでいるならこちらも懸命に対応するが,ロボットを使っているならこちらもロボットで対策するのが筋ですよね。

Weather Typingのワードファイルだが,ワードの名前とか著作者を入れたいので,txtからxmlにしようとしている。で,今までのワードファイルから変換するためにWordMakerを作り直しているのだが,アプリ一個作るってことなので思ったより大変。とりあえずこんな感じ。

2015020701

Weather Typingの開発は,ローカルランキングの実装が終わって,そろそろWebランキングの作り直しを考えているところ。以前作り直そうとしたときはJavaを考えていたけど,最近だと何がいいのかなあ。Java/Ruby/Python/PHPってところなんだろうけど,とりあえずRuby on Railsを勉強してみようか。

というところで明日からまたアメリカ行きなので,Ruby勉強しつつワードファイルの実装でも片付けるか。

最近Analog Book Readerの評価とコメントが増えている。コメントで,1ページずつ表示する機能が欲しいというのをいくつかもらっているのだが,Weather Typing開発が一区切りついたら検討するので,もう少しお待ちを。

Amazon Kindle for PCが話題。ダウンロードしてArduino本を読んでみるが,やっぱり使い勝手が微妙によくない。ページめくりが遅いのはインターネット前提だからしかたないかもだけど,拡大しておいて次のページに行くと拡大率が戻っているとか,細かいところでイライラする。Kindle APIとか公開してくれればAnalog Book Readerで読めるようにできるんだけどなあ。

Pajyarouさんと浅草橋の新春けもケットへ。我々には内容が分からないのが残念だが,こういう雰囲気はいいですね。とりあえずもげぇたん本はなさそうということだけは分かった。

今回のはFlash関連の話で行ったのだが,Denasuの活動も少しずつ外に向かっているのを感じて楽しい。

それはそれとして,アキバが近かったので白色LEDを始めとする基本部品を買ってきた。配線がおかしいのか,全部つなげても白にならなかったので,とりあえず青色LEDのキャプチャを載せておく。

2015011801

以前買ってきてそのままだったArduinoを使って何かしようということで,はっぱさんとLEDをチカチカさせてみた。経験者であるはっぱさんと実習したことでだいたいのことが分かったので,部品をそろえて面白いことをやってみたい。

2015011101

2015011102

今日は,はっぱさんが持っている赤+緑LEDとタクトスイッチx2で,片方のスイッチで赤がだんだん明るくなり,もう片方のスイッチで緑がだんだん明るくなるようにして,赤緑黄を自在に光らせられるようにした。これだけでもかなり楽しい。ちなみにはっぱさんがやっていたのは10年以上前なので青色LEDはさすがにない。

Weather Typing V3開発。ランキング部分の実装をしているが,まあまあのUIができた。

2015011001

この辺のUIはなかなかよい例がなくて,WebとかExcelとかを参考に数日費やしてみたが,最終的に,ヘッダをクリックするとポップアップツールが表示されて,ソート,検索ができるようにした。もちろん部分インクリメンタルサーチや候補選択による完全マッチもできるので,Qwertyのみ見たいとか,公式ワード1~3だけ見たいとかもできる。DenasuページにあるオンラインランキングもこんなUIにしたいが,HTML+JavaScriptで実現できるかな。

冬休みということでWeather Typing 3の開発。プレイ結果をグラフで表示しようとしてここ数週間止まっていた。せっかくなのでWPFで描画できないか調べると、ItemsControlでグラフを描画する例があった。が、やってみると意外に面倒。点や線は確かにXAMLでBindingできるのだが、座標変換とかはコードビハインドなので、結局プログラムで描画してる気分。

というところで現状のUI。サミットの要望はほとんど入れてないし、まだまだ変わると思うけど。
Weather Typing 3

Weather Typing 3

Weather Typing 3

あとは対戦モードを開発しないといけないのだが、その前にV1との互換性とワードを考えてみる。

スコアファイルは今まで取ってなかった履歴情報も記録できるようにするつもりだが、過去の互換性は取るつもり。履歴ファイルとリプレイは、いろいろ改善するためにあえて互換性を切りたい。当然旧バージョンとの混合対戦も不可。

あとOSも,とりあえず.NET4.5で作っているのでWindows XPでは起動しない。Windows 7でも新しい.NET Frameworkインストールが必要だが、Windows Updateで入るのでまあよいか。

ワードについては、英語ワード追加と日本語ワードの整理。日本語は、ワード1~3をマージ+スマホで打ちにくい記号を外す+新ワードをいくつか追加して1つにまとめるというのを考えている。新ワードはぱじさんに話をしたところ、1日で400くらい作ってくれた。すばらしい。

タイピングの伝道師として有名なPocariさんがTwitterで発表していたけど、Japanese added to Intersteno Internet Contest、つまり国際タイピング競技会に日本語が登録されたらしい。タイピングサミットの時にウェザタイ対戦で盛り上がっている様子を動画に撮っていたのだが、このためだったんですね。多少は貢献できたということなのかな。

Windowsストアに,見開きページになった本を分割したいという要望が。この機能はずっと付けたかったのだが,自動的に分割するのは難しいのでどうしようかと思っていた。あまりメニューを増やしたくはないが,メニューに付けるしかないのかな。

Analog Book Reader 1.4を公開した。メールでもらった要望「縦横が逆になった本を読みたい」というのと,掲示板でもらった要望「ドラッグ時にスクロールしたい」に対応。あとはいくつかのUI改善。

縦横問題についてはいろいろ考えたが,結局右回転,左回転ボタンを付けることに。メニューではなく二本指で自由に回転させるというのも考えられるが,どうしても拡大縮小と競合してしまうためやめた。利用シーンは縦横逆の本を読みたいというものなので,1つの本で1回やれば済む話。拡大縮小に比べて使用頻度は低いため,メニューの方がよいという判断。

UI改善の中では,操作に合わせた方向補正を実装した。例えば,日本語の本を開いたらデフォルトで左開きになってしまったとき,つい左ボタンを押してしまうが,その場合勝手に右開きに変えて2ページ目に進む,というもの。Analog Book Readerは,ユーザが仕様に合わせるのではなくて,ユーザ操作の裏を推測してソフトが合わせるという考え方で作っているがその一つ。

まあ,本当なら,日本語を自動判定して右開きにしたり,縦横逆だったら自動判定して回転させたりしたいのだが,そこまでの技術はまだないわけで。

Analog Book Reader 1.4に向けてWindows Storeに報告されているクラッシュレポートを見る。相変わらずどこで落ちているか分かりづらいけど,2つほど修正。

前にも少し書いたが,クラッシュ箇所の特定方法をアップデート。

  1. Windows 8.1 SDKからwindbgをインストール
  2. Defrag Toolsで配布しているPDE.dllのx86/x64版をそれぞれwindbgと同じフォルダにコピー
  3. 「プロジェクト\AppPackages」フォルダにあるappxsymをzipにした中身のpdfファイルと,appxbundleファイルをzipにした中身のappxファイルをzipにした中身のexeファイルを,「どこか\x64\symbols\exe」,「どこか\x86\symbols\exe」フォルダに配置
  4. windbgでdmpを開く
  5. シンボルの設定を「SRV*C:\Symbols*http://msdl.microsoft.com/download/symbols; どこか\x64\; どこか\x86」に設定
  6. 「.reload /f xxx.exe」コマンドでシンボルをリロード。lmコマンドで読み込めていることを確認
  7. 「!pde.dse」コマンドでスタックトレースを表示
  8. スタック上にexeが出てくれば,Visual StudioでNativeデバッグしてdisassembleから関数内のオフセットを探す。出てこなければ・・・今のところ諦めるしかない?

要望を受けていた画像の回転は実装完了。かなりいろんなところをいじったのでちゃんとテストする必要があって,リリースは来週かな。ついでにWindows Dev Centerにあるクラッシュレポートも対応したいんだけど,いまいちどこで落ちてるか分からない。

Analog Book Readerのユーザさんから英文メールが。縦横が入れ替わっているドキュメントを読むことがあって,その場合に読みづらいという要望。電子書籍リーダーとして足りない機能の一つなので,次のバージョンで対応する予定。簡単かと思ったが,ブックマークとかマーカーとかも回転させないといけないので結構いろんなところを直さないといけない。

幼稚園の頃によくプレイしていたPC-6001のARKというゲームがあるのだが,調べても情報が出てこなくてずっと探していた。最近Youtubeでプレイ画面が出ていて,さらに調べていくと月刊マイコンだったことが判明。どうりでBasicマガジンを調べても出てこないはずだ。

ということで国会図書館に行って月間マイコンの1982年4月号を請求。なるほど,読者投稿ではなく特集の1つだったのか。全ての物体が角度を付けたLINEで作られているとか,表のキャラクタ画面と裏のグラフィック画面を交互に配置して描画の遅さをカバーしてるとか,参考になった。

Analog Book Reader 1.3.1を公開した。Windowsストアでもらったコメントに対応して,高解像度の画像を開いて縮小したときに画像が汚くなるのを改善した。

前回の日記で,winrtの画像補間がどれも同じ感じと書いたが,実際はFantアルゴリズムであればある程度よい結果が得られていた。ただ,ScrollViewerの拡大縮小の結果,ぼやけた感じになっていた。そこで,画像をスクリーンの大きさに合わせたものを等倍にすることで最適化することにした。今までと少し動きが変わるので,今までと比べて劣化することがあったら報告してもらえるとありがたい。

Analog Book Readerでは,ScrollViewer内に画像を表示しているのだが,そのままだとスケーリングで画像が汚くなってしまうので,一旦画像をZoomFactor倍してからScrollViewerで表示している。デフォルトのアルゴリズムでは,拡大はある程度大丈夫だが,縮小は汚くなってしまうのが今回の問題。そこで補間アルゴリズムをFantにしたのだが,結局縮小した画像をScrollViewerがZoomFactorによってさらに縮小し,ScrollViewerの大きさに合わせて拡大しているような動作になっていた。そのため,画像がぼやけてしまう。いろいろ調べてみたがいい案はない。RenderOptionsが使えればScrollViewerで補間付きの拡大縮小ができるのだが,winrtにはない。ScrollViewerの拡大率が変わったときに画像を拡大縮小して拡大率を1.0に戻すのも検討したが,動作がおかしいので却下。そこで発想を変えて,画面の大きさを拡大率1.0にするようにした。これなら,画像を画面にぴったり合わせたときが一番綺麗に見えて,そこから拡大縮小したときも多少は見栄えがよくなる。今まで高解像度の画像があると,最大限に縮小してもあまり縮小できなかった問題も解決することができてよい案かとは思う。が,今までうまく見えていた画像がぼやけたりすることがあるのでは,と少し怖い。手元の本ではうまく見えてはいるけど・・・。

久々にAnalog Book Readerにコメントがついた。「高解像度でスキャンしたファイルを表示するとモアレがひどい」とのこと。こういうコメントが一番参考になる。以前マンガビューアとして使うには機能が足りなすぎるというのを日記に書いたけど,具体的な優先順位がなくてどれから手を付けるべきか分からなかったのだが,まずはこの辺だろうか。

漫画ビューア専用ソフトだと拡大縮小のアルゴリズムが選べて,一番良いのを選ぶと縮小が綺麗。Analog Book ReaderはWindowsRTの標準を使っているが,自分の環境ではディスプレイの解像度が大きいので縮小に関してはあまり気にしていなかった。アルゴリズムはNearestNeighbor/Linear/Cubic/Fantの4種類が選べるが,どれも縮小は似たような感じ。自力で作るかNuGetしかないか。

Weather Typingの画面デザインを進めている。プログラミングと違ってどこまでいっても終わりがないのでここが一番時間がかかる。最初にWeather Typingを作ったときはUI知識もデザイン知識もなかったし、DirectXで画面を作っていたので使いにくいところがたくさんある。ゲームを終わらせないと設定変えられないとか、その辺を洗い出して再設計しているのだが、進まない。

アメリカで衝動買いしたArduino UNOをはっぱさんに渡してきた。一人でやってもモチベーションが上がらないので道連れに。Arduinoは小型のマイコンで、ハードウェアをつなげてソフトウェアを組み込むことでいろんなことに使える。とはいえまだ本体しかないので、いろいろ揃えていかないと何もできないかな。

Weather Typing 3.0開発,とりあえずQwertyのシングルモードは打てるようになった。スマートフォン版をWindowsで使えるようになった感じ。ウィンドウを拡大縮小できるし,文字の拡大縮小もできる。

2014092801

というところで設定とか対戦の実装を始めるのだが,出張でしばらく空いてしまいそうなので,その間にデザインを考えている。タイトル画面はこんな感じか? アイコン適当だけど。

2014092802

C#版Weather Typingを作る上でどうしても性能が出ない部分がある。キーボード入力部分と打鍵音再生。キーボード入力はWindows Messageでもいいけど,どうしても遅延が発生するのと,ツール対策上もっと低レイヤーが望ましい。打鍵音再生は普通に再生すると音飛びが発生しまくるし複数音同時再生ができない。

ということでC#でゲームを作るときに今は何を使うのか調べてみたところ,予想以上に混沌としていた。まず現行のWeather Typingで使っているDirectXをC#から使うManaged DirectXだが,.NET 4.0以降では使えない。そしてDirectXの後継XNAだが,別途ランタイムが必要で,既に廃止が決まっている。その後は・・・あれ,何もないのか。どうすればいいのさ。

てことでもうC#からP/InvokeでDirectXを呼び出しちゃうことにした。

最近The Gamification Revolutionという本を読んでいる。いろんなことにゲーム的な要素を取り入れることでモチベーションを高められるというもの。Twitterなんか,フォローア数とか,最近一般に使えるようになったTwitter AnalyticsのImpressionsとか,あからさまにゲーム性を出してる感がある。こういうのをフリーソフト作りのヒントにしたい。

Weather Typingはランキング,ロビーや大会などでライバルに勝つというのがモチベーションにつながるのは分かるけど,それ以上何かないかな。TOD2は成績評価してたり,タイプウェルはアチーブメント的なのを導入してるのか。打鍵数とか練習時間が記録されるとか,全配列で一定の点数を出すと何か嬉しいことがあるとか,パッと思いつくのはそんなところかな。

Analog Book Readerも開発中から何かゲーム要素を付けたいとは思っていて,読書時間を記録するようにしたんだけど,もっと積極的に読書を面白くする方法はないだろうか。本を配布しているサイトを運営しているなら,やりようはありそうなんだけどなあ。