Weather Typing 3.0開発,とりあえずQwertyのシングルモードは打てるようになった。スマートフォン版をWindowsで使えるようになった感じ。ウィンドウを拡大縮小できるし,文字の拡大縮小もできる。
というところで設定とか対戦の実装を始めるのだが,出張でしばらく空いてしまいそうなので,その間にデザインを考えている。タイトル画面はこんな感じか? アイコン適当だけど。
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も開発中から何かゲーム要素を付けたいとは思っていて,読書時間を記録するようにしたんだけど,もっと積極的に読書を面白くする方法はないだろうか。本を配布しているサイトを運営しているなら,やりようはありそうなんだけどなあ。
Windows 7問題が解決したところで新しいWeather Typingを少し考えてみる。まずは今までの要望を整理。サミットで頂いた要望も追加しておいた。
Analog Book Readerは一般向けに作ったので機能をできるだけシンプルにしたけど,Weather Typingはコアなユーザ向けなので多少複雑でも機能性とカスタマイズ性を重視するのが基本路線。といっても今のままのUIでは使いづらいのでUIは考えないといけない。
少し前からiOS/Android版をWindowsに逆移植し始めていて,C#+WPFではシングルプレイはある程度できた。ここにiOS/Android版では付けなかった対戦機能とカスタマイズ機能を付けると基本は完成するはず。
それにしてもC#+WPFの開発効率はすごい。今までJava/Objective Cで作っていたUIをXAMLに移植するとコードが数分の1くらいになるイメージ。今までコードで表示していたユーザ情報やランキング情報も,Binding使えばほぼ何も書かなくていい。画面回転でレイアウトを変えていた部分もかなりめんどうなコードだったが,XAMLなら何もしなくても可変サイズに対応できる。ここまで楽ならより凝ったUIにするのも考える余裕が出る。
Weather Typing 2.2.3を公開しました。といってもWindows 7のフリーズを直しただけなので,今困っていない方はアップデート不要です。なお,Windows XPはサポート対象からは外しましたが,テストはしているので動かしてOKです。
前回原因は書いたので,解決策を書いておく。結局IMEとDirectPlayの初期化の競合は避けられず,IMEはウィンドウが作成されたときに自動でロードされてしまうので,DirectPlayの初期化をウィンドウが作成される前にやることにした。理論上はこれで競合する可能性はなくなったはず。
5年ぶりにバージョンアップしたけど,当時のビルド環境を揃えるのが大変だった。今のVisual Studio 2013でビルドしてもいいけど,XP SP2で動かなくなるし,新しい環境でのテストもしていないので,Visual Studio 2008を新たにインストールしたり,XPやVistaのテスト環境を作ったり,ついでにダイアログのバージョンとかReadmeとかマニュアルとか,結構めんどう。早いところC#版に移行しよう。
というわけで,協力して頂いた皆様ありがとうございました。
サミットに参加して一番言われたのがWindows 7で動かないという話。その中で調査に協力してくれるという方もいて,早速調査したところ,直接の原因は判明。Weather Typingの中で暫定対策したものを置いてみた。今までWindows 7で動かなかった方で,これでも動かない方がいたら教えて欲しい。
調査依頼は,Weather Typingがフリーズしたときのダンプファイルを取って送ってもらうというもの。掲示板だと相手の技術レベルが分からないのと,ダンプファイルが100MBとかになって送ってもらう手段がなかったのでなかなか依頼できなかった。今回は直接困っている方に会って見せて頂いたことで,多少複雑な操作でもやってもらえそうだったのと,WordPressを導入したことでアップロード手段も確保できたことで依頼ができた。
原因だが,WeatherTyping側はDirectPlayの初期化(CoCreateInstance CLSID_DirectPlay8Peer
)で、dpnet.dll
のLoadLibrary
中、cryptsp.dll!_CryptAcquireContextW
で止まっていた。
さらに他のスレッドを見ると、IME14\IMJPAPI.DLL
で、rsaenh.dll
のLoadLibrary
中、cryptsp.dll!_CryptAcquireContextW
で止まっていた。
両方とも最終的には_ZwWaitForSingleObject
で止まっていたので、典型的なデッドロック。
IME14はOffice 2010のIME。てことでOffice 2010のIMEを入れていて、デフォルトにした状態でWeather Typingを起動するとDirectPlayと初期化が競合してフリーズする。
どうやって解決しようか。とりあえず暫定版ではDirectPlayの初期化を遅らせただけなんだが、それでは根本的解決ではないのでいい方法を考え中。
第6回タイピングサミット,二日目に参加してきました。Weather Typing作者として貴重な時間になったのはもちろん,個人としても楽しい時間を過ごせました。参加者の皆さん,運営の皆さん,ありがとうございました。
タイピングサミットは,タイピングが好きな人の集まりで,ルーツをたどっていくとかなり歴史があるオフ会。今までオフ会は作者が目立ちすぎるのもよくないと思って出てなかったのだが,今回は主催者のPocariさんから,ユーザと作者の交流もテーマとのことを伺って,参加することにした。当日まで秘密にしましょうということにしたため,日記に書くのを我慢していたが,ようやく書ける。
オフ会自体が初めてだったのだが,参加者のうち結構な人はTODエキスパートだったり,初期からのウェザタイユーザだったり,最近だとタイピング本で知った方だったりで,しかも相手も相手で私のことを知っているという,不思議な感覚だった。作者ということで優遇されすぎ感も多少あったが,そこは利用させてもらって,いろんな方に話をさせて頂いた。
イベントとしては「WeatherTyping(団体戦)」とその後の「作者を囲む会」に参加して力尽きつつ,その後のTOD団体戦と懇親会まで過ごさせてもらった。
ここは私が書かなくてもよさそうかな。「チーム開発者」の下っ端として参加したが,最近練習してないのがたたって歯が立たず。0点じゃなくてよかった。チートコードを実装,じゃなくてもっと練習しておくべきだった。
団体戦ルールは,全員をレベル順に並べてチームに割り振り,毎回の対戦相手は同じレベル同士で対戦できるようにするという仕組み。毎回接戦になって見応えがあった。ウェザタイはレベルがちょっと違うと一方的な試合になることが多いが,ルール次第でこれだけ面白くできるとは。
団体戦の後,作者を中心にユーザが取り囲んで,好きなことを言う会が始まる。こんなことやってもらえるフリーソフトの作者なんてどれだけいるんだろう。というところで,リクエストを勝手にランク付けして10位まで紹介! 後で全部要望一覧に入れます。
一つ一つ見ていくといろいろあるわけだが,実際のところ,昔要望されたことがあって私が優先度を低くしていたものが半分くらいか。でも作者が思う必要な機能とユーザが思う必要な機能はずれていて,こういう機会があるとそのずれが分かるだけでも貴重。あとは,ここには書けないけど,そんな使い方してるの? みたいな話が聞けたりして。
でも,今回の参加で一番インパクトがあったのは,iOSとAndroid版タイトルのWeather Typingのスペルが間違っていたこと。気になる人はダウンロードして見てみましょう。すぐ直しちゃうので今のうちです。Yさん,ご報告感謝です。
ウェザタイを作って12年,最近は,もういい加減作りが古くなっているし,新しいタイピングソフトに譲っていければいいんじゃないかと考えていた。
でも,2年ほど前,同人本「タイピング Professionals」に少し協力させて頂いて,そして今回,大会であんなに盛り上がっているのを間近で見ることができた。また,最近でもロビーに人が増え始めてるよ,とかコアな人達が満足できるソフトが未だなかったりという状況も聞くことができた。もう,やらざるをえないですよね。
実はタイピング本のときに新しいウェザタイを作り始めていたのだが,自分がタイピングから離れていたためどんなものにすればいいのかよく分からず,途中で止まっていた。今回の参加でいろいろなヒントをもらうことができて,開発スピードもあがるはず。ウェザタイとしてまだできることをやっていくので,よろしくお願いします。
開発状況は今後の日記で書いていきます。
Analog Book ReaderをiOSに移植する環境が整った。今,手元にはMacBook ProとXcode 6 beta,Windows Mac共有ケーブル,iOS 8 betaのiPad Mini Retinaがある。さらにSwiftの洋書も読める。あとは時間だけか。
実際,EPUB機能の追加とかウェザタイの作り直しも平行で進めてるのでかなり厳しい。この状態で新しいアプリのアイデアが出てきたらどうしよう。
MacとWindowsのマウスとキーボードを共有するのに,しばらくShareMouseを使って評価してたんだけど,ちょっと重い。特にMac側でちょっと動作が止まるとWindows側にカーソルが帰ってきてしまう。てことで結局ハードウェアに落ち着いた。サンワサプライのKB-USB-LINK3Mという製品で,ちょっと使ってみた感じはWin/Macでストレスなくマウスとキーボードとクリップボード共有,ファイルのコピーができた。インストールも自動。しばらく使ってみよう。