Network Timeアプリリリース2015年02月17日 14:22

練習がてら作成していたWindowsアプリを無事リリース。

Windowsストアでの掲載

NTPの問い合わせを行い、PCの時刻とのずれを確認するアプリ。1ページだけのシンプルなもの。まあ、検索しないと見つからないだろう。日本標準時のプロジェクトにJavaScriptで動作する時刻表示のページがあるが、およそこれに近い機能を提供するもの。

※アプリのURL

※日本標準時のプロジェクトの時刻表示のページ

※日本標準時のプロジェクトの公開NTPサーバ

Windowsストアでの掲載

こちらアプリの紹介ページ。

アプリ認定のステータス

アプリ登録直後の管理ページの表示。これを見ると、登録からストアでの掲載まで一週間くらいかかるように見える。実際は、今朝9時頃に登録して、昼過ぎには掲載の案内があった。ストアで確認できたのは午後2時頃。ずいぶんとスピードアップ。

さて、マイクロソフトは、ストアアプリの開発者を呼び込むために、「簡単」、とのメッセージをしきりに発しているが、実際のところはどうだったか。参考までに、本アプリの作業時間はこんなところ。

1)UIの設計と構築: 8時間
 図面を引いてというわけではなく、Visual StudioのXAMLデザイナで試行錯誤。

2)仕様の理解: 6時間
 この場合、NTPの仕様書(RFC5905)の読み込み。
 自分にわかるかたちで図に書き下すと便利。

3)クラス設計と作り込み: 22時間
 システム時刻用のクラス、ネットワーク時刻用のクラス、ListView表示用のコレクションのクラス、など。二つ目がメイン。デバッグも含む。

4)イベント処理の作り込み: 4時間
 通信結果の受け取り、チャームを開いての設定変更、など、イベント処理は不可避。

5)エラー処理: 2時間
 処理は少ないので、エラーも少なめ。UIにメッセージを出すには、ここでもイベント処理。

6)チャームを開いての設定処理: 7時間
 アプリの説明や、設定変更、プライバシーポリシーの表示などの作り込み。
 ここは、SettingFlyout(チャームで右から出てくる)の理解に時間を要した。

7)多言語対応: 5時間
 日本語の他に英語に対応。メッセージの切り出し、翻訳など。対象の単語と短文は30ほど。
 多言語アプリ ツールキットが便利。Wordの校正機能も活用。

8)UIのブラッシング: 2時間
 ひととおりできあがって、動かしていると、いろいろ調整したくなる。

9)ロゴとスプラッシュの作成: 5時間
 pixiaでピクトグラム風のロゴを作成。簡単なものでも結構時間がかかる。
 絵を描くツールを一つくらい習熟しておく。

10)プライバシーポリシーとサポートの記述: 2時間
 手を抜いて、asabloのページを利用。コメント機能があるので便利かと。
 英文の方は、書きっぷりに悩む。いろいろ渉猟して例文を探す。

11)テストケースの作成とチェック: 3時間
 ひととおりデバッグはしているが、書き下して一覧にして整理することは有用。
 MSが例に挙げるガイドラインに従うと、30程度になる。ゲーム用などは省略。

12)ダッシュボードの記述: 4時間
 アプリを提出するにあたり、必須の記述項目が多くある。
 アプリの説明に苦心。検索すると、ここでrejectされるケースが多いらしいとある。

13)最終チェックと提出: 1時間
 提出用の記述は一晩寝かせて、もう一度チェック。

というわけで、シンプルなアプリではあるが、計71時間。1日8時間がんばるとして、2週間弱かかる計算。実際に掛けたのは3週間くらい。作り込みの部分は、習熟すれば、ぐっと少なく出来そうだが、どうしても手間がかかる部分もあるので、それなりの手間は必要そう。確かに、「簡単」にはなっているが、一日二日でちゃっちゃっとできる、という簡単ではない。その代わり、しっかりとしたガイドがあるので、それなりのものが出来るようになっている。

チャタリング発生でマウス新調2015年02月20日 16:26

先日、マウスのつかみが急に悪くなる。左クリックでチャタリング。つかんだファイルが違うところに行ったり、ファイルを開きにいったらそのまま実行したり。新調の季節。

M325

LogicoolのM325。ロジクールのサイトでは、いろいろ比較が出来るので便利。
電池が長持ちし、Unifying対応で、Windows用と選ぶと5つほど残る。M325はボタン数が少なく、シンプルなデザインなもの。色は豊富。しばらく、代替で有線のノートPC用を使っていたが、ポイントの精度、スクロールのスムーズさでは、一枚上。

M505

これまで使っていたM505。Unifyingが出始めの頃のモデル。握りが強いせいか、左右の柔らかい部分が削れている。製品ページを見ると2009年とあるから、5年くらい使ったのか。順当な寿命。

Notebook

代替にしていたノートブックモデル。以前のオフィスで貸与PCがノートの頃、使用していた。

MS Notebook

MSのノートブックモデル。ノートPCを複数台使っていた頃の名残。

MS Bluetooth

MSのBluetoothモデル。無線が流行りだした頃のもの。LogicoolのUnifyingの電池の持ちが抜群なので、乗り換えた。今は、まわりのプラスチックが溶け始めて無残。

Logitech 3button

その前は、有線。Unix使いなので3ボタン。このシリーズは長く使っていた。

X68030

さらに遡って、X68030用。

X68k 二代目

X68kの二代目。

X68k 初代

X68kの初代。ユニークな形状だったが、後、普通に。

X1turbo

最初のマウスは、X1turbo用。お絵かきソフト(嬉楽画)くらいしか対応していなかった。

飽和水蒸気圧の計算 C#とMathematica2015年02月20日 16:50

飽和水蒸気圧を計算するアプリを作り始める。横で元気に働く加湿器を見ていると、がんばりを数字で見てみたくなった次第。

用途からいって高い精度は必要ないが、せっかくなので、W.WagnerとA.Prussの近似式を使ってみる。理科年表の2015年版では、数表(P411)はあるが計算式はないので探す。

見つけたのが、英国の数表のサイト。摂氏の表が便利。理科年表は単位がKなので、少し手間。

さっそく、C#で計算式を式の通りに実装してみる。

飽和水蒸気圧0℃

0℃の計算結果。小数点以下4桁まで合っている。

飽和水蒸気圧60℃

60℃の計算結果。小数点以下2桁目で誤差が出ている。

こうなると、検算したくなる。電卓では荷が重い。Excelでは、MS製品どうし、同じような計算ライブラリを使うことになるので、今ひとつ。ここは、真打ちMathematicaに登場願う。

飽和水蒸気圧の計算

ざっと、実装したところ。Reduceで圧力(P)を求める式に変形。変形式は長い。右は切れている。

方程式の解の抽出

100℃の場合を解いてみる。
温度(K)を代入すると、圧力(P)の方程式になるので、Solveで解き、解を式(P)に代入すると数値になる。有効数字5桁、小数点3桁目を四捨五入すると、数表とぴったり合う。

飽和水蒸気圧の温度変化によるグラフと数表

うまくいったので、温度(K)と飽和水蒸気圧の二次元の表を作って、グラフにする。参考書に書いてあるのと同じ図が現れた。
※化学の新研究、P107。蒸気圧の性質

Mathematicaの方は、誤差が出ないように式を変形してから計算している様子。同様に、Reduceの結果をC#で実装すれば、精度は高くなりそうだが、今回は有効数字3桁もあれば十分なので、このままにしておく。まあ、検算は大事という話。

プライバシーポリシーとサポート情報 - 部屋の中の水分量2015年02月23日 06:34

本アプリについて

部屋の室温、湿度、容積から空気中の水分量を求めます。また、加湿する場合に必要な水分量、除湿する場合に取り除く水分量を求めます。

プライバシーポリシー (Privacy Statement)

部屋の中の水分量
対象アプリ:部屋の中の水分量

本アプリの製作者であるThe Fourteenth Lab (第十四工房)は、本アプリによって、お客様の個人情報およびプライバシーに関する情報を収集しません。

サポート情報 (Support)

ご質問や不具合のご連絡は、このページの「コメント欄」をご利用いただくか、「このブログについて」に記載のご連絡先までお願いします。

FAQ

1)飽和水蒸気圧の計算には、W. WagnerとA. Prussの近似式を用いています。計算式については、参考文献2)のサイトに掲載されたものを用いています。

2)グラフの表示には、WinRT XAML Toolkitを利用しています。

3)本アプリには、現在の気圧を設定する機能がありますが、採用している計算方法では、最終的な結果には影響を与えません。現実には微小な影響があるはずですが、本アプリでは対応していません。

4)本アプリの「調湿に最低限必要な時間」は、部屋の湿気の出入りがないとした場合の時間です。実際には、換気に伴う出入りがありますので、時間は長くなります。

5)本アプリの「参考:計算過程」は、小数点以下6桁まで表示していますが、そこまでの精度があるわけではありません。有効数字は3~4桁です。

参考文献

1)国立天文台編、理科年表 2015年、丸善出版
 物49(411)ページ、「水の蒸気圧」、ほか

2)Kaye & Laby Online, Tables of Physical & Chemical Constants

3)卜部吉庸著、化学の新研究、三省堂
 2-3 液体の蒸気圧と沸騰、ほか

部屋の中の水分量 アプリリリース2015年02月23日 18:00


部屋の中の水分量

「部屋の中の水分量」を知ると題して、Windowsストアアプリをリリース。

飽和水蒸気圧を求めるW. WagnerとA. Prussの近似式と、気体の状態方程式から、部屋の空気の中にどのくらいの水分があるのかを計算する。冬は加湿器のお世話になっているので、どのくらいがんばってくれているのか、数値で確認しようと思い立った次第。手を入れるうちに、中学高校の化学の教材のようになってしまった。

実際計算してみると、結構ある。今の部屋だと500mlくらい含んでいる計算。室温と湿度を真夏の数字にしてみると、2リットル近くにもなるのには少し驚く。

今回の開発時間は、30時間ほど。1週間弱。前回よりもコーディング量が少ないせいもあるが、ぐっと短縮。少しずつこなれてきた。

技術的な要素を挙げる。

1)WinRT XAML ToolkitのChartの利用。いくつかのグラフを重ねて表示している。また、ScrollableViewerで囲ってみたので、ちょっとした拡大縮小表示ができる。

2)VisualStateManagerで縦画面にするときに、表示項目が割り当てられるGridの行と列をいろいろ入れ替えてみる。様々な画面サイズに対応するには、Gridがほぼ唯一の選択肢だが、項目の並べ替えが自由にできることがわかったので、縦横の悩みが少しは楽になりそう。

WinRT XAML ToolkitのChartで折れ線グラフ2015年02月23日 21:25


WinRT XAML Toolkitを用いた折れ線グラフ

Windowsストアアプリでは、NuGetから様々なパッケージを導入できる。今回はグラフを描画するために、WinRT XAML ToolkitからData Visualization Controlsを利用した。開発者は、MSに勤める方だが、このプロジェクトは個人としてのもの。

このツールキット、なかなかの充実ぶりだが、使用法に関する情報が不足ぎみ。各所でいろいろの報告があるが、苦労したので、サンプルになるよう掲示しておきたい。

ツールボックスへのメニューの追加

その前に、VisualStudioのツールボックスを開いて、「アイテムの選択」を選び、XAML Toolkitのメニューを追加しておくと便利。

WinRT XAML ToolkitのChartで折れ線グラフ

さて、XAMLのソース中程の、ScrollViewerの定義がグラフ(Chart)の部分。

1)グラフを拡大縮小できるようにするため、Chartの定義をScrollViewerの中に収める。HorizontalScrollBarVisibilityは、標準でオフなので、オンにする。Verticalの方は標準でオン。

2)「Charting:Chart」で囲っているのが、グラフの定義。MinWidthとMaxWidthは、固定値で定義。Autoにすると、Scrollbarが現れてくれない。

3)「Charting:Chart.Axes」の部分が、X軸とY軸の定義。

4)そこから「Charting:LineSeries」が4つ並ぶが、折れ線グラフ4つ分の定義。最初の一つが、本体である飽和水蒸気圧の折れ線(青)。残りの3つは、「x=a, y=b」といった垂直線や水平線のグラフ(赤、黄、緑)。

5)「IndependentValuePath」は、X軸の変数。「DependentValuePath」は、Y軸の変数。「ItemsSource」でデータの供給元となるオブジェクトを指定。X軸とY軸の変数名は、このオブジェクトの2つのメンバ。

6)データの供給元は、「ObservableCollection」で定義。これにより、スライドバーを動かすときに、スライドバーの値変更のイベントハンドラで、コレクションの要素を置き換えることで、グラフのX軸とY軸が動く。

XAMLのGridで横長と縦長レイアウトの切り替え - VisualStateManager2015年02月24日 07:56

XAMLのGridで、タブレット横持ち用の横長レイアウトと、縦持ち用の縦長レイアウトの切替にも苦労したので、掲示する。

横長レイアウト

横長レイアウト。アプリの上半分。3列1行で、表示領域A、B、Cを横に並べる。

縦長レイアウト

縦長レイアウト。横幅が狭くなるので、2列2行に変更。表示領域Cを2行目に落とす。Cのレイアウトは幅があるので、2列分を使用。

XAML Grid定義

XAMLのGridの定義。

最初に「Grid.ColumnDefinitions」で3列を定義。次に「Grid.RowDefinitions」で2行を定義。ただし、2行目は、高さを0にして閉じておく。

続いて、表示領域A、B、Cの定義。「Grid.Column」、「Grid.Row」の表記は0オリジンなので、1列1行目は、(0,0)。

XAML VisualStateManager 縦長レイアウト定義

XAMLのVisualStateManagerのVisualStateの定義。縦長用の「Portrait」。

はじめに、Gridの構成を変更。2行目の高さを「*」に変更して、閉じていた行を開く。代わりに3列目は幅を「0」に変更して、列を閉じる。これで3列1行を、2列2行に変更。

次に、表示領域の移動。A、Bは変わらない。Cは、3列1行目から、1列2行目に移す。また、「Grid.ColumnSpan」を2に定義して、2列分の領域を使って表示。

こんな感じでマス目と、各マスの表示内容を切り替えることができる(ほかのやりかたもあるだろうが)。ただし、設定を誤ると即、実行時例外になるので十分にテストしておく。

やきそばとチキンバスケット2015年02月27日 20:20

食事を取るほど空腹でもない。それでも何か欲しい。

やきそば

ということで、ほっともっとのやきそば。普段は、お弁当を買ってしまうので、やきそばははじめて。やきそばは、近所のスーパーのお総菜として買うことがあるが、作りたてはべつもの。麺は太めで、ソースはやや甘め。

チキンバスケット

それだけではと、チキンバスケット。チキンは、たまに食べたくなると、ケンタッキーでオリジナルを2~3本頼むが、こちらは同じ価格帯でこのボリューム。揚げたてなので、どちらもいい勝負だが、味のアクセントは弱めなので、途中から別の味付けが欲しくなる。

食事を取るほどでもないと言っておきながら、ちょっと食べ過ぎ。