2014年2月17日月曜日

iDisplayはお絵かきに使えるのか???

はい。

そもそもiDisplayを使う環境があったのか、そう、タブレットというモノをいつ入手したのか、という話なわけですが。

今週の記録的大雪の前に先週の大雪がありましてーーそれもその時点では記録的大雪だったわけですがーーなんとその時に届いていました。

私が買ったのは「ZOTAC Tegra NOTE 7」です。

8インチの「ASUS MeMO Pad 8」と最後まで迷って、最終的にプロセッサと付属タッチペンでZOTACにしました。まぁ、これ自体は非常に良い買い物だったと思っています。プロセッサはMicrosoftのSurface 2と一緒だし、擬似的に筆圧を表現できるアプリが付いているしそれも付属アプリ(Tegra Draw)で十分使えるし、金額からすれば相当良いと思います。


しかし、あまりに動作が軽いので欲が出てきてしまいまして。

所謂『母艦』である窓七デスクトップマシンで動作させているペイントソフトを動かしてみたらどうなるかと。


これはデジタルで絵を描かれる方なら分かっていただけると思うんですが、実際問題として普通のペンタブレット(所謂"板タブ")というのは画面との微妙な不一致というのが出てきます。そりゃそうですよ、直接支持体に描いてるのと違うんですから。

でも直接操作できる液晶タブレットモニタ(板タブに対する"液タブ")は高価で手が出ない。じゃあ、折角だしAndroidタブでその代わりをさせらんねーのか、という話でございます。


有料アプリではあるんだけどそこここでレビューもされてるし、だけどお絵かきという領域まで踏み込んだ記事はググってもあまり引っかからないみたいだしよっしゃ、いっちょやってみっか!




----



結論から言うと「窓八タブレットPC買っとけ」。これ以外の言葉は見つからない。

つまり実用レベルじゃない。

遅延がひどいですね。いつも使っている「CLIP STUDIO PAINT(以下クリッペ)」は追従が追いつかず、ドローイングしても線が切れます(以下実際の画像)。


これってプロも使うくらいの高機能ソフトなので、案外メモリ負荷が高いのかも知れんね、と思い窓七標準の「ペイント」も試してみましたが、結果はほぼ変わらず。いや、まぁね、元々タブレット付属のアプリでも線切れはありましたからそんなもんかもしれません。なんにせよやるならドットペンとかでチリチリ描かなきゃダメだから、肩凝ります。ピンチイン・ピンチアウトが出来るのが救いといえば救いかも。でも俺はやらん。(紙のが速い)


余談ですが、Flash非対応のAndroidだけどサブディスプレイならFlash見れるのか?と思い試しにdrawrを表示させてみようとこちらも試してみた…みたんですが…まともな表示すらできやしねぇ(笑)ウインドウを移動させて落ち着かせようとしても残像の蛇みたいになって、なんだかファミコンのバグみたいに(古い表現だなおい)!そのうちウィンドウの表示すらされなくなって、接続解除・アプリ終了以上、の憂き目に。



さて、そうは言ってもまったく使えないわけじゃないと思うんですよ。むしろ、クリッペの確認ウィンドウを表示させておけば、邪魔にならず書き込み作業が出来るんじゃないかと思います。ちょっとやってみたいと思ってますが、今後のレポはこちらより絵描き垢の方かなぁ。

何か技術的な進展なぞがあったらまた書きますね。

2014年2月12日水曜日

VBAで満年齢を計算したい

Excelワークシート上で年齢を求めるのはDATEDIF関数を利用すれば良いんですが、VBAで似た“Datediff”関数を使おうとすると、思わぬ落とし穴があります。
「満年齢」を算出することができない、というのがそれです。

じゃあ、ApplicationオブジェクトのWorksheetfunctionコレクションからDATEDIFを、と言いたくなりますがこれが使えない関数なのです。

でも指定日付時点年齢はどうしても必要で、それを手打ちにするのはちょっとレコード数的に現実的じゃないよ、という事で代替手段を考えました。それが以下。

  1. worksheetfunctionでDAYS360関数を利用し、日付間の日数を求める。
  2. 1を/360して、年数にする。
  3. 2をINTして整数部分のみ取り出す。

今回は文字列型配列dset()に読み込んだデータを格納したり書き出したりするということでこんなコードになるんですが(部分)


 dset(6) = CStr(INT(Application.Worksheetfunction.Days360(DateValue(dset(5)), _
  Datevalue(dset(0))) / 360))

とりあえずは合ってると思うんだけど、閏年とか大丈夫かなぁ?と心配になります。それにWorksheet関数を利用してるってのはどうにもスマートさに欠ける気がする。

ってことで全て設定し終わった後ググってみました。そしたらあるじゃありませんかもっとスマートな方法が!

誕生日から年齢を求める(DateDiff、他)

結局孫引きになってますが(汗) 上記のコードの場合、こんな風に変えればいいかと。

 dset(6) = DateDiff("yyyy", DateValue(dset(5)), DateValue(dset(0)) + _
  (Format(DateValue(dset(5)), "mmdd") > Format(DateValue(dset(0), "mmdd"))

で、リンク先最後の記述通りFunctionプロシージャを作っておくと、色々応用が利くかもしれません。

Private Function GetAge(BirthDay as String, Dday as String) as String

 Dim fBirthday as Date  '日付型計算用
 Dim fDday as Date      '日付型計算用
 Dim CalcAge as Integer '年齢用整数型

 fBirthday = DateValue(Birthday) : fDday = dateValue(Dday)
 CalcAge = DateDiff("yyyy", fBirthday, fDday) + (Format(fBirthday, "mmdd") _
  > Format(fDday, "mmdd")

 GetAge = CStr(CalcAge)

End Function

今回は他で同様の年齢算出を使う機会がないのでPrivateレベルにしてますが、基幹システムなど特定のフォーマットに基づいたデータを扱うのであれば、もう一歩進んでクラス化してしまうという手もありますね。