Windows 10 Mobile のアプリケーションは起動に20秒以上かかると起動せずに落ちる

Windows 10 Mobile のアプリケーションで起動時にファイル操作を「同期処理」であれこれやっていて結構時間がかかっているのですが、Visual Studio からデバッグ実行している限りでは問題なく動作し、W10M から単体でアプリケーションを起動すると、起動が完了する前に落ちてしまいます。

最初この現象の理由がわからずデバッグ実行での確認もできないので悩んでいました。例外をキャッチしてログを出すようにもしていたのですが、何でもないような処理のところでプログラムが落ち、例外もまったく発生しませんでした。

しかし、何回かやっているうちに気づいたのですが、ログの出力時間を確認したら最初のログの時間と落ちるタイミングの時間の差が20秒であることに気づきました。試しに Task.Delay.Wait で待機させるようにしたらもっと前の処理で落ちることを確認できました。

Windiws Phone 7 か 8 あたりでも、処理に時間がかかって UI? に処理を戻さないとアプリケーションが落ちるという話は聞いたことがあるのですが、このことをしばらく思い出せなくて盲点でした。デバッグ実行では落ちないし、例外も発生しないので気を付けなければいけませんね。

余談ですが、ファイルアクセス処理はファイルがあるかどうかのチェックだけでも1回あたり1秒ぐらいかかるので非同期処理のほうがいいですね。

]]>

「昭和元年度」は存在するのか?

年度と和暦が関係するシステムを構築するうえで気になる点がありいろいろ調べていったのですが、せっかくなので考えをまとめたものをブログに上げてみたいと思います。

ちなみにここではシステム屋目線で考えたものであり、実際に昭和元年度が存在するかどうかの答えは書いていません。おそらく仕様上そう表現すべきかどうか決めごとに落ち着くのではないかと思います。

前置きはこれぐらいにしておいて、まずは「平成元年度」について書いてみます。平成に改元されたのは「1989/1/8」で、下の表は西暦と和暦、年度と和暦年度を並べたものです、和暦年度という表現が正しいかどうかはわかりませんがここではそう表現させていただきます。また、年度については一般的に使われる会計年度として扱っています。

年月日 和暦 年度 和暦年度
1989/01/07 昭和64年 1988 昭和63年度
1989/01/08 平成元年 1988 昭和63年度
1989/03/31 平成元年 1988 昭和63年度
1989/04/01 平成元年 1989 平成元年度

年度について、3月末までは前の年として扱われ4月~12月末の間は西暦の年と一致することになっています。

1/8に年号が平成になるので、和暦年度も平成になっていいように思えますが、そうすると 1/8~3/31 の期間は「平成零年度」となってしまいます。平成零年なんてものは存在しないので、1989/3/31 までは前の年号である「昭和63年度」を使うのが正しいです。

このことをシステム的に考えて仕様にすると

  • 4/1~3/31 の期間の和暦年号は 4/1 時点の和暦年号で表現する

になると思います。

では本題の「昭和元年度」について考えてみます。平成のときと同じように表にまとめたのが以下のものです。

年月日 和暦 年度 和暦年度
1926/12/24 大正15年 1926 大正15年度
1926/12/25 昭和元年 1926 ?
1927/01/01 昭和2年 1926 ?
1927/03/31 昭和2年 1926 ?
1927/04/01 昭和2年 1927 昭和2年度

昭和への改元は 1926/12/25 になるので 1926/12/25 から 1926/12/31 までのたった7日間だけが昭和元年になります。そして 1927/1/1 からは昭和2年になるので和暦年度も 1927/4/1 からは昭和2年度になります。

では 1926/12/25~1927/3/31 の期間はどうなるのでしょうか。1927/4/1 から昭和2年度になるので、1926/12/25 からは昭和元年度でもいいような気がします。しかし、平成のときに挙げた仕様「4/1~3/31 の期間の和暦年号は 4/1 時点の和暦年号で表現する」とは一致しなくなります。もしこの仕様にあわせた形で表現するとなると「?」の期間は「大正15年度」になるので「昭和元年度」は存在しなくなることになります。

もちろんさらに条件を付け加えて「改元が 4/1~12/31 の期間に行われている間は改元された日から和暦年度を切り替える」としてもいいのですが、条件も少し複雑になりますし、平成といっしょに考えたときになんとなく条件に統一感がないようにも見えますので「大正15年度」の表記でもいいような気がします。実際には決めごとの話になりますし、大正15年度でも昭和元年度でも間違いではありません。

ネット上で書籍や資料を見てみると、どちらかで書いてあったり「大正15年度・昭和元年度」のように両方併記しているものもありました。

Excel で和暦表記をやってみた

自分なりに考えをまとめてみましたが、やはりちょっと不安だったので Excel だとどう表現するんだろうを思って実際にやってみました。

まず、Excel で和暦表記を行うには、セルの書式をユーザー書式にして「ggge"年度"」とすると和暦表示になります。下図は単純に日付をそのまま書式設定で表示したものです。

2017-02-08 13_23_29-Book1 - Excel

改元したタイミングで年号の表記が切り替わってることが分かります。もう一度書きますが、上図は西暦をそのまま和暦表示しただけなのでの結果は間違いです。

これを実際に西暦から年度に変換して和暦表示するわけですが、ネットで探してみると以下の式を使う方法がありました。

  • ①=EDATE(A1,IF(MONTH(A1)<4,-12,0))
  • ②=EDATE(A1, -3)

上記の式を使用した結果が下図になります。

2017-02-08 13_33_03-Book1 - Excel

①は昭和から大正に戻ったりしているので明らかに間違いになります。②についても「昭和64年度」となっていたり、1927/3/25から昭和元年度が始まったりしているのでやはり正しくありません。これは指定した年月日から月だけを計算しなおしているので改元の日だけがずれたりして結果がおかしくなってしまうのです。

正しく表現するのであれば、最初の平成元年度の時に記載した「4/1」に統一するのがいいと思います。

  • ③=IF(MONTH(A2)<4,DATE(YEAR(A2)-1,4,1),DATE(YEAR(A2),4,1))

2017-02-08 13_34_56-Book1 - Excel

以上の Excel の結果からみると直接和暦年度を表現するような機能はなく、年度を自分で計算して和暦表記するような形になるようです。和暦年度の表現について「これだ!」と納得するようなものがなく一応自分の考えでまとめてみた形になりますが、もし意見等があればコメントいただければと思います。

ちな みに余談ですが、2019年の改元予定では改元日が2019/1/1になるようなので、元年度のパターンでいうと平成元年度と同じになりそうです。和暦や年度の扱いで恐怖されている方もいるかもしれませんが、平成元年度のパターンは1パターンしかないので仕様の検討では少しは楽になりそうですね。

]]>

ちーたんタッチボードでキーを離したときだけ文字を入力する

ユーザーさんからキーを離したときにだけ文字を入力したいけどどうすればいいかという質問がありました。

英字や数字などのキーは既定では物理キーボードの動作と同じく、押した瞬間に1文字打たれ、押しっぱなしにしていると一定時間後に連続で文字が入力されるという動作になっています。

この動作を変えたい場合はボード側の設定を変えることによって可能になっています。

ちーたんタッチボードでは各キーの動作を「Processes」パラメータで上書きすることによって動作を変えることができます。次のように設定するとキーを押して離したときだけ文字が入力されるようになります。

【例】Aキーを離したときだけ動作させるようにする

[{"KeyType": "A","ExecuteTiming":"Released","PressRepeat":"Once"}]

「KeyType」は対応するキーを識別する名前で、「ExecuteTiming」を「Released」にすると離したときだけ動作するようになります。ただし、これだけだと押下中の連続動作は残ったままになってしまうので、「PressRepeat」を「Once」にして1回だけ動作するようにします。

「ボード作成 Excel ツール」を使ってボードを作成する場合は「Processes」に入力して対象キーにまとめてコピーすればいいだけなので簡単です。使い方はホームページを参照してください。

2017-02-02 09_44_35-rmtdt.sorceryforce.net_3404 - リモート デスクトップ接続

一応標準キーボードに対してこれらの設定を行ったサンプルを OneDrive に置いておきます。使ってみたい方はダウンロードしてください。

]]>

[UWPツール] JSON 整形 Ver 1.10 を公開しました

JSON のエスケープ回りで仕様に沿っていない文字があったのでそのあたりを修正しました。変換実行のタイミングで文字を解析するため、変換後のJSONテキストはバックスラッシュかユニコードのどちらかでエスケープされるようになっています。混在したまま出力することはできません。どちらでエスケープするからは設定で変更できるようにしました。

また、設定項目が少し増えてきたので、ボタンを押して設定を表示する形に変更しました。モバイルだとテキストエリアが結構狭かったので若干広くなったかと思います。

あと多言語対応もしました。Ver 1.00 でしていると思ってたのですが、たまたま英語環境で実行してみたら日本語のままだったことに気づき、確認してみたらまったく対応されてませんでした。してると思ってたので公開している国を242か国すべてにしていたという…。

ストアで公開しているので、ダウンロード・インストールはそちらで行ってください。使い方などについては以下のページに乗せています。

2017-01-28 17_50_55-JSON整形

]]>

しゃべりながらゲーム制作やってみます #30 タブレットやスマフォ対応

サブアカウントからの動画の引っ越しに時間がかかってしまってなかなか公開できませんでしたが、ようやく #30 を公開いたしました。あと、今回からはメインアカウントのほうに動画を追加していきますので、サブアカウントの動画リストは #29 で終了となります。

今回は PC 上だけではなく、タブレットやスマフォでゲームを動かすことになっても問題ないように対応してみました。まだしばらくは Sliverlight での公開のみとなりますが、一応こんな感じでマルチプラットフォームで動かせるようにしていますよと説明しています。

最近はちーたんタッチボードの改修や動画の移行などやっていたため、ゲーム開発のほうは進んでいません。そのため、次の動画の公開は未定になっていますが、いろいろ落ち着いてきたのでゲーム制作と動画の収録のほうは少しずつ進めていきたいと思います。

]]>

Windows タブレット向け ソフトウェアキーボード&マウスパッドアプリ「ちーたんタッチボード Ver 1.00」公開しました

ちーたんタッチボード Ver 1.00 を公開しました。ホームページ側でドキュメント等も一通り更新しましたので詳しいことについてはそちらをご覧ください。

また、アプリケーションの更新に合わせて、ボードパッケージとボード作成 Excel ツールのほうも Ver 1.00 に更新しました。過去のバージョンで作成したボードも引き続き最新バージョンで使うことはできるようになっていますが、特に過去バージョンを使っていないのであれば、最新でそろえておいたほうがいいかもしれません。

バージョンアップの内容は以下の通りとなっています。

ちーたんタッチボード Ver 1.00

追加機能

  • ボードコンテナ定義ファイルの KeyInfo にキーごとの装飾を変更できる Decorates パラメータ追加
  • ボードコンテナ定義ファイルの BoardInfo にキー全体の装飾を変更できる KeyDecorates パラメータ追加
  • ボードコンテナ定義ファイルの BoardInfo にボードの装飾を変更できる BoardDecorates パラメータ追加
  • 設定画面の装飾でボードやテキストの色の有効無効を設定できるようにした
  • 設定画面の装飾でボードやテキストの色をボードコンテナ定義ファイルの色設定より優先するかどうか指定できるようにした
  • 設定画面の動作でアプリケーションの終了確認を表示するかどうか指定できるようにした
  • メニューから指定したボードに直接変更できるようにしました

機能改善

  • マウスパッド、マウススティックのタップ動作においてチャタリングによるクリック停止対応しました(30ms未満)
  • ちーたんタッチボード起動時のパフォーマンスを改善しました
  • 各種ダイアログを可能な限り手元に表示するようにしました
  • 今まではボードの設定ファイルに入力ミスなどがあった場合、起動時に強制終了していましたが、Ver 1.00 からは強制終了せず、対象のボードを選択したときにエラー表示にしました

仕様変更

  • ボードコンテナ定義ファイルでの画像の伸縮を決定する「ImageRenderMode」を「ImageStretchMode」に変更しました。「ImageRenderMode」は現バージョンでまだ使用できますが、今後廃止されます。
  • メニューからの終了以外の終了方法でも確認ダイアログを表示するようにしました。終了確認ダイアログが表示されるかは設定で変更できます

不具合修正

  • 設定画面などのダイアログでキーボード操作するときに現在のフォーカスが見えなかった問題を修正しました
  • OS が中国語環境の時に起動したとき、表示言語が中国語になっていなかったのを修正
  • 一部の環境で設定画面のチェックボックスのチェックが見えなくなる現象に対応しました
  • マルチディスプレイ使用時に起動したディスプレイによって設定画面などが別のディスプレイに表示されてしまう現象を修正しました。ただし、判断が難しい一部の状況については未対処です。

ボードパッケージ Ver 1.00

全般

  • 英字、数字、記号のキーのフォントサイズをやや大きくした

通常レイアウト (Normal)

  • キーの表示テキストを Shift 押下中、IME の状態によって変化するようにしました。これにより、初期状態のテキストも変わります
  • IME の状態によってひらがな表示ができるようになったため、ひらがなを初期表示したキーを定義したボードを削除しました

親指用レイアウト (Thumb)

  • キーの表示テキストを Shift 押下中、IME の状態によって変化するようにしました。これにより、初期状態のテキストも変わります

マウスパッド (MousePad)

  • 右側のボードの各ボタンとマウスパッドの上下位置を入れ替えました
  • 片手用マウスパッドを追加しました。(左手用、右手用)
  • 使用頻度の高いキーを加えたマウスパッドを追加しました。(左手用、右手用)

ボード作成 Excel ツール

追加機能

  • ボードの装飾詳細設定シート「BoardDeco」追加
  • キーの装飾詳細設定シート「KeyDeco」追加
  • ボード作成のサンプルファイルを18ファイル追加

機能改善

  • setting ファイル生成の処理速度を高速化しました
  • 実行環境の DPI を考慮してレイアウトのサイズを計算するようにしました。これにより PixelPerCentimeter のパラメータを削除し、DPI による出力結果の差異が少なくなるよう自動的に処理されるようになりました

仕様変更

  • ボード、キーの「ImageRenderMode」のパラメータ名を「ImageStretchMode」に変更

また、ボード作成 Excel ツールでは、配布しているボードパッケージの元 Excel ファイルの他に、機能ごとに小さく分割した参考用 Excel ファイルも 18ファイル程追加しました。作成する際の参考にしてみてください。

531_KeyExtendDecorateSample_1_00_Ja 532_KeyImeDecorateSample_1_00_Ja 533_KeyPressDecorateSample_1_00_Ja 515_TransparentImageBoardSample_1_00_Ja

]]>

ちーたんタッチボード Ver 1.00 の公開予定日について

ちょうど2年前ぐらいに Ver 0.40 のことを書いてからそのまま放置状態になっていましたが、手元に余らせておくのももったいなかったので、Ver 1.00 として公開することにいたしました。(まだ公開はしていません)

改良点については1年ぐらい前に書いた通り、Ver 0.40 をそのまま持っていく形になるので、Ver 1.00 と言いながらそこまで機能アップしているわけではありません。主に表示関連の改修なので、操作感などは Ver 0.30 のころとほとんど変わらないはずです。

ただ、1~2年も空けていてそのままリリースするのもあれだったので、起動時のパフォーマンス改善や指定したボードを直接選択できる機能、OS やデバイスごとによる挙動の違いへの対応、細かなバグ修正を追加で行いました。

他にはボード作成ツールのサンプルをいくつか追加しました。機能ごとに簡単なボードのサンプルを追加しましたので、余計な機能を省いた状態で確認できるのでわかりやすくなっていると思います。

また、ボードパッケージには左手用、右手用のマウスパッド、マウス操作の他にいくつかの補助キーを追加した拡張マウスパッドも追加しました。通常キーボードについては IME や Shift キーの押下状態によってキーのテキストが変わる機能も追加してあります。

現在は動作テストとボードの作成などがほぼ終わり、ホームページ側の変更を行っている段階です。

公開の日程についてですが、2017/1/21(土)を予定しています。0:00 きっかりに公開するわけではありませんので、何時になるかはわかりません。公開したタイミングでブログ、または Twitter でお知らせいたします。

]]>

動画の再アップロード作業が想像以上に大変な予感

以前の投稿でゲーム制作実況の動画をひとつのアカウントにまとめるために再アップロードするということを書きました。当初はすでに作ってあった動画ファイルをアップロードするだけなのですぐに終わるかなと思っていたのですが、予想以上に大変な作業になることが判明してしまいました。

頻繁に動画を上げたり削除したりしていたので、コメント入れてくださった方には申し訳ありませんでした。今回からは1動画ずつ確認してアップロードしていきます。

すべてのアップロードした動画が再エンコードされる

これは前回の投稿でも書きましたが、以前の仕様では 100MB 未満の MP4 ファイルをアップロードした場合、ニコニコ動画のほうで再エンコードされずに投稿できていたので、ローカルで動画のクォリティを確認すれば大丈夫でした。しかし、今回の仕様変更を知らずに29ファイルアップロードした後に動画を確認したら、再エンコードのせいでとても見れるようなレベルではない動画になってしまったため、アップロードした動画をすべて削除しました。

仕方ないので、新仕様のフォーマットに合わせて動画をすべて再作成することにしました。ただ、元データはあるので、Aviutl をカスタマイズし編集ファイルを開いて外部出力すれば割とすぐにいけると思ってました。

編集データの値がおかしくなってた

早速動画ファイルを生成しなおして6ファイルほどアップロードした後に動画を確認してみたら、恐ろしいほどに音ずれが発生していました。動画にもよりますが、おそらく数秒ぐらいはずれていたと思います。ほかの動画を確認してもやはりずれていたのでアップロードした動画をすべて削除いたしました。

原因はわかっていないのですが、Aviutl で過去に編集したデータを開いたところ、動画と音声の再生位置がずれていました。動画によっては動画や音声が分割されて編集されているので、結局1から確認してずれていないかすべて再確認する必要性が出てきました。当初は Ver 0.99 を使っており、今は Ver 1.00 を使っているので、もしかしたら Aviutl をバージョンアップしたせいなのかもしれません。ただ、どの動画までずれているかはまだ確認していないので、原因ははっきりとはしていません。

ということで、現在動画をひとつひとつ確認しながら作り直しているので、すべてアップロードしなおすには結構時間がかかると思います。ただその代わり、現行のニコニコ動画に仕様に合わせるのでファイルサイズが大きくなる分、画質が以前よりもよくなるので見やすくなるかと思います。一応 #30 の動画もすでに作成が完了していますので、全動画をアップロードし終わるまではもうしばらくお待ちください。

]]>

ニコニコ動画に動画をアップロードしたときのエンコードの仕様が変わった?

確か以前まで動画ファイルのサイズが 40MB だか 100MB までの動画はアップロードしたときに再エンコードされずにアップロードできていたので、アップロード後の画質が落ちることはなかったと思うのですが、先ほど前に上げた動画を再アップロードしてみたところ、とてつもなく画質が悪くなってしまいました。

どうも 12/8 の仕様変更で挙動が変わってしまったらしく、アップロードした動画はすべて再エンコードされてしまうようです (下記リンク先参照)。ゲーム制作実況の動画はすべて 40MB で統一していたので、そのまま再アップロードするとかなり見れたもんじゃない画質になってしまいました。

とりあえず動画の元データはまだ残っているので、アップロード用の動画を再作成してみて、いい感じにアップロードできるかどうか試してみたいと思います。結構パワー使いそうだ…。

]]>

Intel NUC (NUC6i5SYH) に Windows Server 2016 を入れた際にネットワークに接続できない問題を直す

新しくサーバー用に NUC6I5SYH を購入し、Windows Server 2016 をインストールしたのですが、素の Windows Server には最小限のドライバーしか入っていないため、イーサネットを使用しての通信ができません。

通常この場合はハードウェアを提供しているメーカーのサイトからドライバーをダウンロードしてインストールするのですが、Windows Server 2016 が出たばかりというのと、そもそも Intel NUC はサーバー向けではなくコンシューマ向けのハードなので、Windows Server 2016 用のドライバーは現時点では提供されていません。代わりに Windows 10 用のドライバーを入れることはできるのですが、インストールできないドライバーもあり、今回のイーサネットのドライバーもインストールできない部類に入るため、ネットワークに接続することができません。

ドライバーをインストールするためにいろいろ調べたところ、以下のサイトに載っている手順でインストールすることができました。どのサイトも手順は同じなので、おそらく大丈夫だと思います。一応リンク先の情報では Windows Server がプレビュー版であったり、NUC が前の世代だったりしていますが、問題なくインストールして通信できるようになりました。今回購入した「NUC6I5SYH」のイーサネットデバイスの番号は「DEV_1570」でしたが、手順の一覧には含まれているようです。(※日本語のサイトは最後の手順が端折られているので、英語のサイトも参考にして下さい)

ちなみに無線 LAN を使うには、Windows Server の機能で「ワイヤレス LAN サービス」をインストールする必要があります。これをインストールしないとどうあがいても Windows Server が通信させてくれません。インストール後は無線 LAN のドライバーを更新して再起動すれば OK です。

]]>