はっぱさんとArduinoワークショップの三回目を開催。アキバでBluetoothやモーターの足りない部品を揃えた。

その中で,はっぱさんがIchigoJamを見つけて購入。ボードを組み立ててテレビにつなぐとBASICプログラムを実行できるというもの。ベーマガに投稿していた我々としては見逃せない。マニュアルを見つつ二人で懐かしがっていると,電子工作マガジンにBasic Magazine復活の噂を見つけてこちらは私も購入。2ページだけだけど復活している。しかも投稿プログラムまで募集しているとは。こういった方面で盛り上がるのはいいですね。

人工知能は人間を超えるか」 (松尾 豊) を読んだ。いわゆる人工知能(アルゴリズム)ではなくて人工生命(思考,意識)に近い方の話。自分は大学でニューラルネットを研究していて,数年前に脳関連の本を読みあさったまま中断していたが,最近ディープラーニングが話題なので詳細が知りたくて。

結局ディープラーニングは特徴量を探すことができるようになりました,ってことなわけで,それ自体はこの本にも出ているPalmの創始者ジェフ・ホーキンスの「考える脳 考えるコンピューター」とかスティーブ・グランドの「アンドロイドの脳」でなんとなくできたよ,くらいにはなっていたように思うけど。

私が数年前に考えていたのは,その先,どうやって意識に持っていくかというところで,Googleが猫を猫と判定しても,それが敵と思って逃げるのか,かわいいと思って近づくのかを実現したいわけで。するとどうしても本能的なところが必要になって,現実世界に身体を持たないと難しい,というところで止まっていた。といっても遺伝的アルゴリズムで自然淘汰をするのは数億年かかりそうだし。その辺は「人工知能は人間を超えるか」にも書いてあったけど必要だよね,くらいだった。

最近Arduinoをやってるのも,現実世界からセンサで情報を取り込んで,モーターを動かすのをニューラルネットでやって何か面白いことできないかなあ,というものなので,ウェザタイを作りつつ勉強再開しているところ。

Weather Typing 3 の対戦部分を作っているが,C#のソケットは同期関数と非同期関数がある。通信中にUIをブロックしたくないので,BeginConnect~EndConnectなどの非同期関数を使うのだが,相当めんどう。処理がその場で終わらないので処理の続きは基本コールバック関数になる。するとイメージ的には以下のようなワケの分からない処理になってしまう。実際には再AcceptとかするのでLambda式では書かないけど。

class Server
{
	Callback OnLogin;
	Callback OnError;

	void Start()
	{
		try
		{
			BeginAccept(() =>
			{
				try
				{
					BeginReceive(() =>
					{
						try
						{
							if("login")
							{
								OnLogin();
							}
						}
						catch(Exception)
						{
							OnError();
						}
					});
				}
				catch(Exception)
				{
					OnError();
				}
			});
		}
		catch(Exception)
		{
			OnError();
		}
	}
}

Analog Book Readerでも非同期処理で苦しんだけど,WindowsRTの場合はだいたいの関数がawaitできるのでまだよかった。同じ事をするのにこんなにすっきり書ける。

class Server
{
	Callback OnLogin;
	Callback OnError;

	async Task Start()
	{
		try
		{
			await Accept();
			await Receive();
			if("login")
			{
				OnLogin();
			}
		}
		catch(Exception)
		{
			OnError();
		}
	}
}

ゴールデンウィークで捗ったので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まではいけなかった。

TOEICの結果が返ってきた。900目標で885点。上がってはいるけど微妙だ。900を超えたら本格的にSW勉強をしようと思っていたが,もう一回だけLRを受けるか。。

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個もらったりすると本当に使えているのか心配になる。右から左に読むテストなんてしてないですよ。コメントについても,有用なコメントを最近ももらっているので応えたいのだが,ウェザタイの開発が終わるまでは難しい。

3年ぶりにTOEICを受けてきた。今回はもう前日にTOEIC模試を解くくらいにしたのだが,模試だと9割正答で参考得点900オーバーはいける。でも前回もそれで本番820点だったので今回もそのくらいかなあ。問題自体は簡単なんだけど,本番だといろんな要素があって集中力が続かない。どれだけ集中できるかを競うゲームに思えてきた。

来月はこれも久々の情報処理エンベデッド。来週はまたアメリカもあるのでウェザタイ開発が進まない。

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

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

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


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

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

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

人喰い掲示板シリーズの壁紙を公開しました。Pajyarou氏によると詳細はまだ語れないそうですが,素晴らしいクオリティですね。
ダウンロード

うちのサポート掲示板。ほっておくと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で実現できるかな。

pajyarouさんの新作「そのまま峠 その3」が公開されました。作品が進む度にどんどん凝ってきてますね。

冬休みということで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くらい作ってくれた。すばらしい。

しばらく前にMac Bookが起動しなくなってほっておいたのだが、ようやく調べたところ、HDDが壊れたっぽい。なのでこれを機にPC環境を一新。なんかちょうどお金も振り込まれていたのでアキバへ。Intel SSD 730K Series 240GBを2個、CFD DDR3 PC3-12800 8GBx2を買ってきた。こういう増設はずいぶん久しぶりだ。

今のメインPCは、DellのInspiron 17R Special Edition。CPUはCore i7 2.4GHz。1TBのHDDに加えて、ノートでは珍しくディスクの空きスロットがあるので、SSDを追加してWindows 8.1 updateを入れる。ついでにメモリはメーカー上限8GBを超えて16GBにしてみる。マウンタのネジがついてないので周辺からもってきたりしたが、何の問題もなし。Dellのノートは昔からパーツ交換しやすいのがよいです。で、起動時間が爆速になった。2年前のPCだけど、これで最新のノートと同じくらいになったかな。

で、Mac Book Pro 13インチ。HDDを外してSSDを取り付ける。ついでにInspironから外した4GBx2メモリのお下がりを付けて4GB->8GBに。特殊ネジがあったけど適当にペンチでなんとかしたりしたが特に難しくはなかった。Yosemiteを新規インストールした。以前はMavericksでXCodeを動かしたらものすごい重かったけど、これなら開発できるかな。

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

最近仕事で数学の知識が必要になるので勉強。たまたま家に群論の本があったので読む。よく学校の勉強は将来役に立たないとか言うけど、そんなことないと思う。World Tester作るのに物理使ったし、Purentro作るのに音楽使ったし、英語と数学は日常的に使うし。言ってみれば掃除スキルとか料理スキルとかもそうだし。いろんなことを広く浅くやってるから必要になったときに深く勉強するのが楽、といった方がいいのかな。

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にあるクラッシュレポートも対応したいんだけど,いまいちどこで落ちてるか分からない。