最近仕事で数学の知識が必要になるので勉強。たまたま家に群論の本があったので読む。よく学校の勉強は将来役に立たないとか言うけど、そんなことないと思う。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にあるクラッシュレポートも対応したいんだけど,いまいちどこで落ちてるか分からない。

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

家のTVをケーブルテレビに移行した。ついでにネットの方もフレッツからケーブルTVに。固定電話とメールアドレスが1つ増えた。何かメールアドレスが7種類になってるけど。関連してメール周りを見直し。

最近ドコモメールのSPAMがうっとおしいのでようやく設定を調べた。基本的に教えた人以外からは来ないはずなので登録アドレス以外は受信拒否に。しばらく自動受信をオフにしていたが,これでオンに戻せる。

で,ドコモ設定を見ていたら最近はPCでも受信できることが分かったので早速設定してみる。が,設定完了までにどれだけステップが必要なんだというほど難解。今までドコモにログインしていたIDとは別のドコモIDが必要になって,作ってメール設定しようとしたら携帯でやれと言われて,その後Wi-Fiをオフにして,それでもエラー。どうやらメールアプリが更新されていて,クラウド用メールアプリがあるんですね。そのアプリを入れて,ドコモIDの利用を可にして,PCでメールサーバの設定を入れて完了。なるほど,PCでメールを送受信するような人はもちろんこれくらい分かるはずだと。強気でいっていいと。さすがNTT,全国のサービスUX設計をしている人達に勇気を与えてくれますね。

そうそう,NTTフレッツの契約解除は,電話の人も親切でルータの返却も簡単で分かりやすかったのは付け加えておこう。

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

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

9/30からアメリカサンフランシスコに出張して今日帰国予定。アメリカにいるけど英語を使う機会はそんなになくて,日本にいる方が英語使う気がする。一応Surfaceと開発環境はあるが,こっちにいるとやっぱり時間が取れなくて,結局開発は難しい。Windows 10もプレビューが出ているので試したいけど,回線的に厳しいので,日本に帰ってから試すしかない。しばらくは出張がありそうなので,どうにかできないかなあ。

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

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.dllLoadLibrary中、cryptsp.dll!_CryptAcquireContextWで止まっていた。

さらに他のスレッドを見ると、IME14\IMJPAPI.DLLで、rsaenh.dllLoadLibrary中、cryptsp.dll!_CryptAcquireContextWで止まっていた。

両方とも最終的には_ZwWaitForSingleObjectで止まっていたので、典型的なデッドロック。

IME14はOffice 2010のIME。てことでOffice 2010のIMEを入れていて、デフォルトにした状態でWeather Typingを起動するとDirectPlayと初期化が競合してフリーズする。

どうやって解決しようか。とりあえず暫定版ではDirectPlayの初期化を遅らせただけなんだが、それでは根本的解決ではないのでいい方法を考え中。

第6回タイピングサミット,二日目に参加してきました。Weather Typing作者として貴重な時間になったのはもちろん,個人としても楽しい時間を過ごせました。参加者の皆さん,運営の皆さん,ありがとうございました。

全体

タイピングサミットは,タイピングが好きな人の集まりで,ルーツをたどっていくとかなり歴史があるオフ会。今までオフ会は作者が目立ちすぎるのもよくないと思って出てなかったのだが,今回は主催者のPocariさんから,ユーザと作者の交流もテーマとのことを伺って,参加することにした。当日まで秘密にしましょうということにしたため,日記に書くのを我慢していたが,ようやく書ける。

オフ会自体が初めてだったのだが,参加者のうち結構な人はTODエキスパートだったり,初期からのウェザタイユーザだったり,最近だとタイピング本で知った方だったりで,しかも相手も相手で私のことを知っているという,不思議な感覚だった。作者ということで優遇されすぎ感も多少あったが,そこは利用させてもらって,いろんな方に話をさせて頂いた。

イベントとしては「WeatherTyping(団体戦)」とその後の「作者を囲む会」に参加して力尽きつつ,その後のTOD団体戦と懇親会まで過ごさせてもらった。

WeatherTyping(団体戦)

ここは私が書かなくてもよさそうかな。「チーム開発者」の下っ端として参加したが,最近練習してないのがたたって歯が立たず。0点じゃなくてよかった。チートコードを実装,じゃなくてもっと練習しておくべきだった。

団体戦ルールは,全員をレベル順に並べてチームに割り振り,毎回の対戦相手は同じレベル同士で対戦できるようにするという仕組み。毎回接戦になって見応えがあった。ウェザタイはレベルがちょっと違うと一方的な試合になることが多いが,ルール次第でこれだけ面白くできるとは。

作者を囲む会

団体戦の後,作者を中心にユーザが取り囲んで,好きなことを言う会が始まる。こんなことやってもらえるフリーソフトの作者なんてどれだけいるんだろう。というところで,リクエストを勝手にランク付けして10位まで紹介! 後で全部要望一覧に入れます。

  1. Windows 7で起動しない人がたくさんいるよ
  2. ロビーでレベル高い人と対戦するのは怖いけど観戦ならしてみたい
  3. シングルプレーの癖でESCを押すとマルチプレーのゲームが中断して微妙な雰囲気になるのをなんとかして欲しい
  4. Mac OSに対応して欲しい
  5. 高い解像度に対応して欲しい。それなら長いワードも使えるし。
  6. IPアドレスなんて難しいこと言わずに誰でも簡単に対戦できるようにして欲しい
  7. 対戦中にワードやルールを変えたい
  8. レベル分けがおおざっぱすぎる。力量差を測ったり達成感のためにも細かくして欲しい
  9. スマートフォン版は運ゲーすぎる
  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でストレスなくマウスとキーボードとクリップボード共有,ファイルのコピーができた。インストールも自動。しばらく使ってみよう。

SNSも使ってみないとね,ってことで既にやっていたTwitterに,英語アカウントも作ってみた。ついでにFacebookもほっておいたアカウントにこの日記の内容を連携させようとしたのだが,JetpackプラグインとqTransrateプラグインが連携することはなく,日本語と英語が混じってしまうのでとりあえず保留。

ちょっとSwiftをいじってみたいのでMacの環境をアップデート。その中で、WindowsとMacOSのマウスとキーボードを共有するソフトについて少し悩んだ。今までSynergyを使っていたが、日本語入力では記号入力に問題があり、その後WindowsではMouse without Bordersが出てきたので今更Synergyは使いたくない。ってことで、探してみたら最近はShare Mouseというのがあるらしい。

使ってみると、設定はほぼ何もなし、テキストのコピーに加えてWindowsとMacのファイルのコピーアンドペーストもできるという完璧なものだった。モニタ3台、ファイルコピーなどは有償らしいのだが、もう少し試して速度に問題がないようだったら買ってみるか。

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

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

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

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

来月またアメリカに行きそうなので,英語の勉強も兼ねてSafari Books OnlineのSwift講座を観たりしている。Objective-Cはちょっと今の時代厳しいよね,って感じだったので,Analog Book ReaderのiOS移植はする気になれなかったけど,Swiftならいけるか? 少し興味が出てきたのでもう少し勉強してみよう。

denasuメール宛のSPAMが増えてきた。前まで使っていたHi-HOのSPAMに追いついてきた感じ。なんだけど,どうも質が違う。Hi-HOのSPAMはほぼ日本語メールなのに対し,denasuはほぼ英語メール。Hi-HOが英語メールをはじいているのか,denasuがグローバルになってきた証拠なのか,どっちだろう。

ブログ更新日をトップページに載せた。やっぱりトップページを見れば全更新日が見えるようになってる方が便利。WordPressのRSSフィードをMagpieRSSで取得して,結果をSSIで表示した。一箇所,MagpieRSSでsplitを使っている部分があり,PHPの新バージョンでは警告になってしまうところがあって修正した。Cacheが作成された後は警告が出ないので,最初に表示されたところで無視してリリースしてしまうと,最初の一人だけ警告が表示されるような微妙なバグになるところだった。

Deprecated: Function split() is deprecated in hoge/rss_parse.inc on line 208

MagpieRSS 0.61の該当箇所を変えて対応したが,MagpieRSSはGPLなので,修正箇所をここに載せておこう。もちろん要望があれば送付します。

修正前

list($ns, $el) = split( ':', $element, 2); 

修正後

list($ns, $el) = preg_split( '/:/', $element, 2); 

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

現在開いているページに合った年月を,右にある「アーカイブ」から選択できるように修正した。これでWordPressでやりたかったことは全部完了。

ちなみにうちのブログの場合,Function.phpに以下を記載するとWordPressの月別アーカイブで,今開いているページの年月を選択できる。URLに年月を入れていてウィジェットから選択式のアーカイブ表示にしている前提。

function archives_link_filter($link_html)
{
	if(preg_match(
		sprintf("@\/%04d\/%02d@", get_query_var('year'), get_query_var('monthnum')),
		$link_html) == 1)
	{
		$link_html = preg_replace('/<option /', '<option selected="selected"', $link_html);
	}

	return $link_html;
}
add_filter('get_archives_link', 'archives_link_filter');

どうせここまでやったのなら,ということでソースコードを綺麗に載せるところもやってみた。つまりソースコードを載せるときに行番号付けたりキーワードに色付けたりってやつですね。以前別のところでやったときは,CSSとHTML変換を駆使して自力で作ったが,今回はオープンソースの力を借りる。

有名どころだとSyntax Highlighterというのがあって,よく見かける。このブログにも入れてみたらデザイン的によく合うのでこれでいいかな。WordPressプラグインもあるらしいのだが,あまり密結合にすると乗り換えにめんどうなのでJavaScript単体で入れた。

Syntax Highlighterでは,JavaScriptとCSSを読み込んだ上で,ソースコードを以下のようにpreで囲ってclassを指定する。シンプル。そして今までもpreで囲むようにはしていたので今回は簡単に移行できた。

<pre class="brush:csharp">

以下,サンプルコード。

namespace com.denasu.AnalogBookReader
{
    /// 
    /// 情報ダイアログ
    /// 
    public sealed partial class AboutDialog : SettingsFlyout
    {
        /// 
        /// コンストラクタ
        /// 
        public AboutDialog()
        {
            this.InitializeComponent();

            var version = Package.Current.Id.Version;
            _appname.Text = string.Format("{0} {1}.{2}.{3}.{4}",
                App.Current.Resources["AppName"].ToString(),
                version.Major, version.Minor, version.Build, version.Revision);
        }
    }
}