‘Analog Book Reader’のエントリ

Analog Book Reader。ユーザさんから本を1000冊追加するとそれ以上追加できないという報告を受けた。この制限自体はStorageApplicationPermissions.FutureAccessList (StorageItemAccessList)の1000項目制限から来ている。ユーザが一度選択したファイルは,トークンさえ覚えておけば,ユーザ操作がなくても後で読み込めるというものだが,1000個しか覚えられない。

それはそれとしてもう少し調べると,1つバグが。ファイルを本棚から消したりファイルを削除した場合,リストから削除するのを忘れていた。なので,いったん1000回ファイルを追加すると何をしても本を追加できなくなる。とりあえずそこだけ修正して1.8.1でストアに申請した。

でも1000個以上追加したい場合はこれでは解決はしないので何か考えないと。ファイルかフォルダ1000個という制限なので,フォルダをベースにすれば改善はできるかも。

Analog Book Readerの更新でWindowsストア用パッケージを作成していたのだが,数日はまった。

まずストア用証明書の有効期限が切れていてパッケージをビルドできない。テスト用証明書を作成し直してみたのだが,ここでPackage Family Nameが変わってしまって別製品になってしまう,ように見えたのでいろいろ試していたのだが,結局ストアとの関連づけをやり直すことで元のPackage Family Nameに戻った。

次。前のバージョンからのアップデートを試したいのだが,前のバージョンも期限切れでインストールできない。そこでシステムの日付を無理矢理元に戻してインストールしてうまくいった。

次。日本語OSで英語が表示される。これはV1.7のときもそうだったっぽい。V1.7はUWPなのでWindows 10しか動かないが,日本人の新しいもの嫌いでWindows 10の普及率が低いため問題にはなってない,と考えておこう。で,原因はよく分からない。パッケージの中に「_language-ja.appx」が入っていればOKなのだが,何故か入らないこともある。とりあえずアップロードする前に日本語でテストする必要があるってことか。ダウンロード数からいってもはや日本語サポートする意味はあまりないけど。

てことで,Analog Book Reader V1.8をストアに申請したのでもう少しで公開されるはず。

Kindle Paperwhiteを入手してしばらく使ってみた。競合調査ってことで。

ディスプレイがすごい。バックライトがなく,フロントライトと光の反射で見るのだが,例えば手をかざすとディスプレイに影ができたり,いろんな要素が合わさって眼が紙だと認識する。数時間見続けても紙の本を見てるくらいの疲れにしかならない。

ただ,操作感は電子書籍って感じで紙の本の感じはしない。操作感を上げるにはフレームレートが低すぎる。もし電子インクで30fpsくらい出るディスプレイが開発されたらAnalog Book Readerと合わせていい読書端末ができそう。

一応ブラウザが使えるのでSafari Books Onlineを見てみた。Article Modeにすればなんとか読みやすくはなったが,サインイン等,読むところまで行くのにかなり面倒。

先週胃の調子が悪くて開発をお休みしてた。で体重が3kg減ったらそっちは直ってきたんだけど,胃痛を弱めるために変な寝方をしてたらドライアイがひどくなってさらにお休みしてた。何かを変えると何かしら不調になるってことで,いつもの健康は絶妙なバランスの上に成り立っているというのが分かる。

とりあえず,TwitterでもらったWT3の問題の改善版とAnalog Book Readerの次バージョンはテスト待ちになっているので,体調がよくなり次第リリース予定。

Analog Book Reader 1.7をリリース。今回からUWPに対応したので,Windows 10のみになった。Windows 8.1の場合,Ver 1.6までしか使えないことになる。ダウンロードログを見てみてもほとんどWindows 10になっているのでもういいでしょう。

今回のバージョンアップは新機能はエクスプローラからのドラッグアンドドロップくらいで,画質とか安定性とかの向上がメイン。次はepub対応なんだろうけど,Edge APIとかでHTMLレンダリングできないかなあ。

UWPアプリを公開する前に読んでおかないと,ということでずっとUWP UXガイドライン(PDF版)を読んでいたのだが,ようやく読み終わった。それほど新しいことはなかったけど,アイコン周りとSegoe MDL 2は参考になったかな。

ガイドラインとは関係ないけど,Windows StoreのKPIとしてクラッシュ回数も関係しているという話をどこかで読んで,GW中にひたすらバグFixしていた。1ヶ月でクラッシュ600回が多いのかよく分からないけど,ほとんどが読み込み中の操作っぽいのでかたっぱしから修正。多少ランキングに貢献するのかなあ。

Analog Book ReaderのUniversal Windows Platform(UWP)化を進めているのだが,折角UWPにするならWindows 10 Mobileも試してみたい。てことでエミュレータも試さすにいきなりFREETEL KATANA02を購入。安かったので。。。

どうやれば自作ストアアプリを試せるのか分からないけど,いきあたりばったりでやってみる。とりあえず開発者モードに変更して,PCとUSBで接続。Visual StudioをDeviceモードにして,ARMデバッグしてみた。お,いきなり動いた。スゴイ。さすがUWP。でもUIがごちゃごちゃしてるのと動作が遅い。このままPhone対応で公開してもしょうがない。てことで次のリリースではPhone非対応にしよう。

2016042901

で,少し触ってみたのだが,意外に今使っているNECのAndroid(Medius N-04E)の代わりになるかも。Outlook使えるからDocomoメールも受信できそうだし,サービス系はEdgeでなんとかいけるし。ただ,GPSの精度が少し悪いかな。Docomo SIM入れてA-GPS的な感じにしてみたけど,2ブロックくらいずれる。散歩に使うのに少し厳しいかも。

Analog Book ReaderのUWP移行がひとまず完成。GW中にテストをしてアップロードできるかな。

前回の宿題としては,GridViewの選択についてはとりあえず右クリックで行うことにした。バージョン情報ダイアログはUWP sampleのUI Basic SampleにあるようにPopupで対応した。

UWP対応だけでは寂しいので,ずっと直したかった画像のぼやけを修正。今のバージョンでは,画像をCanvasの機能で拡大縮小しているため,拡大縮小の精度が悪い。キャンバス自体を拡大率に合わせて大きくしたり小さくしたりすれば画質が高くなるのだが,WinrtではLayoutTransformが使えないため,難しかった。そこはUWPでも同じなのだが,Silverlight toolkitのLayoutTransformerクラスをUWP化して使っている例があり,同じように対応した。だいぶ画質が上がるはず。

Weather Typing 3の作業が一段落なので,以前からやりたかったAnalog Book ReaderのUniversal Windows Platform対応を検討。UWPプロジェクトを作って既存のソースコードを追加,ビルドし直すところまではサクサクできたが,動かしてみるといろいろおかしなところがある。

  • 戻るボタンが動かない
  • ダイアログのレイアウトが崩れる
  • Semantic zoomがマウスでできない
  • ScrollViewerのズームがマウスでできない
  • GridViewで右クリック選択できない
  • ドラッグアンドドロップができない
  • チャームがない

戻るボタンについては自分でボタンを付けるのではなくタイトルバーに付けられるようになっていた。確かにWindows 10のアプリはそうなっているのでそれでOK。

var view = SystemNavigationManager.GetForCurrentView();
view.AppViewBackButtonVisibility = AppViewBackButtonVisibility.Visible;
view.BackRequested += OnBackRequested;

レイアウトはまあ仕方ないので地道に直そう。


Semantic zoomに関してはMSのサンプルでもできないし,標準の時計アプリもズームできなくなっている。MSとしてはなかったことにしようとしてるのかなあ。

追記。と思ってもう少し調べたら以下のコードでできた。下のScrollViewerと同じで,ZoomModeを設定しないとホイールズームが使えない。



ScrollViewerのズームはScrollViewer.ZoomModeを設定することでできるようになった。Windows 8でもあったようだけど,デフォルト値が違うのかな。


GridViewで右クリック選択できないのは一番困るのだが,Windows 8.1では,右クリックで選択,左クリックで開くという動作ができたけど,Windows 10ではどちらかの動作しかできない。

ホント? と思ってWindows 10のスタートメニューを試したら確かに選択ができなくなっている。複数のタイルを移動したくなっても1つずつドラッグしないといけないのか。ずっとこの仕様でいくのかな。タブレットでもSwipe選択がなくなっているような・・・。


ドラッグアンドドロップができないのはWindows 10で増えたプロパティDragEventArgs.AcceptedOperation にDragOverから設定してやればOK。ついでに

if (e.DataView.Contains(StandardDataFormats.StorageItems))
{
    var storage = await e.DataView.GetStorageItemsAsync();
}

でファイルのドラッグアンドドロップができるようになる。まさにこれがやりたくてUWPに移行しているのでうまくいってよかった。


チャームは,どうやるのが正しいのだろう。バージョン情報をどこで出すのか? ということだけど,メニューからやるのかな。未調査。

最近,Windows Storeにレビューをもらっても1日で消されてしまう現象が発生している。開発者やユーザからはそもそも消す機能がないわけで,MSフォーラムで調べてみると「Reviews/ratings disappearing」というスレッドで困っている人が何人もいるようだ。Insider Preview版だと消されるという推測も挙がっているが,手元に保存しておいたログを見るとそうとも言えないような。半年経っても無回答というのがWindows Storeの過疎感を感じる。

Analog Book Readerのダウンロードが2万を超えた。ダウンロードグラフを見ると分かるが,ここ最近はほとんど海外からのダウンロード。特にUSからはステキなコメントをたくさんもらっている。Windows 10からのダウンロードが9割を超えているので,そろそろWindows 10 専用にUWP化するのもありかな。自分でも使っているけどドラッグアンドドロップ機能が欲しい。

2016031101

タイピングサミット以来,忙しいのと英語数学の勉強をしていたせいでプログラムしてなかったのだが,そろそろ落ち着いた。とりあえずリハビリとして,しばらくほっておいたAnalog Book Readerのバージョンアップ。1ページ表示できるようにして欲しいという要望を何人かからもらっていたので実装してみた。他にも自分が普段使っていて欲しい機能をいくつかサポートしてみた。

Analog Book Readerは普段使っているので次はこれをやろうというのが自然に出てくるのだが,ウェザタイは普段自分が使ってないのでなかなか手が出せなかったりする。まずはタイピングの練習を復活させるところからやるというのが遠回りに見えて確実なのかも知れない。

最近Analog Book Readerのダウンロード数が増えている。詳細を見るとUSを中心にWindows 10からのダウンロードが増えているよう。ただ、Windows 10で動かすとFlyout(ポップアップ)を表示するとボタンなどの色が変になるのが分かっていた。そこで、一日ウェザタイを止めて最近Analog Book ReaderのWindows 10対応をすることに。ストアにはもう申請したので少ししたらアップロードされるはず。

2015082301

詳細。どうもWindows 10でFlyoutを出すとテーマ色が変になってしまうみたいで、Windows 10のバグのような気がする。そのうち直るかも知れないけど見にくすぎるので、とりあえずテーマに関係なく色を固定してしまった。ハイコントラストとかにすると見づらいのかもしれないのでWindows 10が直してきたら元に戻そう。

あとWindows 10ではウィンドウモードで動くようになったのでドラッグアンドドロップとかサポートしたいけど、Universal Windows Appにしないとダメっぽい。ウェザタイ後にやるか。

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();
		}
	}
}

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

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

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

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から関数内のオフセットを探す。出てこなければ・・・今のところ諦めるしかない?

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しかないか。

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

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

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

Analog Book ReaderをiOSに移植する環境が整った。今,手元にはMacBook ProとXcode 6 beta,Windows Mac共有ケーブル,iOS 8 betaのiPad Mini Retinaがある。さらにSwiftの洋書も読める。あとは時間だけか。

実際,EPUB機能の追加とかウェザタイの作り直しも平行で進めてるのでかなり厳しい。この状態で新しいアプリのアイデアが出てきたらどうしよう。

電子書籍は紙に比べて,出来事の発生タイミングの認識が悪いというレポート「電子書籍に移行することで失われる読書体験の中身が少し判明」だが,Analog Book Readerなら少しはよい結果がでるのかな。

2chなんかでは以下のような意見が出てたけど,それって単に電子書籍リーダーが悪いだけで電子書籍がダメなわけじゃないよね。

  • 紙なら左右の手で厚さを感じることで,今どの辺りを読んでいるかを感じられる
  • 紙なら前のページを簡単に読み返せる

Analog Book Readerでは,常に今どこを読んでいるか,あとどのくらいで終わるかが分かるように常にプログレスバーを出すようにしたし,ちょっと前のページもすぐ確認できてすぐ現在のページに戻ってこれるようにブックマークを工夫した。てことでまさにこういうのを解決しようとしたアプリなので,同じ実験をしたら多少はいいんじゃないかと思うんだけど,どうだろう。

家に戻ってきたのでE-PUBリーダー実装を再開。横書きの本はいいとして,縦書きの本を考えると文字一つが一個のオブジェクトになる。そういえばFlyweightパターンってあったよね,と調べたけど同じオブジェクトじゃないから適用できないか。普通に作るしかないか。

Analog Book Reader。E-PUBの実装で詰まっている。詰まっていると時間がもったいなくなって英語の勉強をし始めるので,勉強ははかどるんだけどいつまでも完成しない。

DTPは昔一通り勉強したから知識としてはあるんだけど,実装するとなるとかなり大変。PurentroでMIDIの楽譜化をしたときも基礎的な音楽理論の勉強から初めて1年くらいかかったけどそれに似ている。

Analog Book Reader Ver 1.3公開。自分で使っていて気になった使い勝手を修正。ページのソートについては今までとがらっと変えたので,何か問題があれば報告をお願いします。

そして偶然そのまま峠 その2も公開。これからどんどん更新していく,のかな。

Analog Book Reader Ver 1.3をストア申請した。ここ2ヶ月でたまったUIの改善とバグ修正。E-PUB対応はまだまだ先。

64bitにするのを早く公開したいので,次のバージョンで入れたいものを急いで実装。いつか書いたが,マンガを開くのに必要な機能がまだ全然足りてなくて,まずはファイルのソートとフォルダ分けの対応をした。今まではzipに含まれる順番で表示していたが,ファイル名の連番に対応したり,フォルダをまたいで見開きになってしまうのを修正したり。結構作り込んだのでうまいこと表示されるようになったはず。

Analog Book Readerを作ったときに一番最初に考えたのが,本を快適に読むためならPCを限界まで使ってしまえというものだった。具体的には,本を開いたら全ページをレンダリングしてメモリに持っておけば,高速にパラパラめくれるというもの。なんだけど,今のバージョンでは,数千ページの本を開くとメモリ不足になるので理想に合っていない。

この問題は最初のバージョンからずっと調べていたのだが,ようやく原因が分かった。Winrtのビルド時にCPUをAnyCPUでビルドしているからなのか。AnyCPUだと基本的に32bitアプリになるので,結局1GBくらいでOut of Memoryになる。ARM/x86/x64でバイナリを分けることで,物理メモリの限界まで使えるようになった。64bit OS限定だが,4000ページくらいの本でも開けて,ロードが終わればストレスなく4000ページをパラパラできる。画像のサイズと拡大率によるが,使用メモリは3GBくらい。