ラベル Developments の投稿を表示しています。 すべての投稿を表示
ラベル Developments の投稿を表示しています。 すべての投稿を表示

2010/02/23

不揮発記録媒体を長持ち・・・


・・・させるには、一杯になるまでデータを一切削除しないコト。
ツマり、デジタルカメラの削除ボタンや Windowsのゴミ箱は、最大の敵なのだ!!

まぁチョット考えれば当然のコト、ナニを今更感アリアリかと思う。


実際、市販のCF/SD等を、デジカメなどの記録媒体として利用する場合、その条件を満たす管理は、結構容易だ。
撮影後、データをサーバ機のストレージ(HDD)へ保存した後、CFやSD内の、デジカメがアクセスできない、
DCIMフォルダの外に作成したフォルダへ、保存済みのファイルを移動させるだけでイイ。


・・・が、コレがコト、端末のドライブとして使うとなるとハナシが違ってくる。
トクにWindowsは、そのような動作を既定でサポートしていない。
敢えて出来るとすれば、不要ファイルをゴミ箱に溜め続けるくらいか・・・
それとて、端末のパフォーマンスを損ないかねない行為でしかない。

その上、追記ならともかく、書き換えが頻繁な某システムファイルの場合は、この手段も用い得ないし、
NTFSのオーバーヘッドの大きさなどは、問題として少なからずであるコトは、著名なトコロだろう。


極端なハナシ、同じファイルを更新するだけの場合ですら、元の領域をそのままにした状態で無効化し、
未使用の空き領域へ新たに記録する・・・ そして、媒体の容量を満たすまでは、
CD-RWへの追記のような動作を行い続けさせ、最終アドレスに近づいた時点で、
無効化されていた領域へ、ソコには然もナニも存在しなかったかの如く、書き込みを承認する・・・ 

そのようにして、媒体の全てのアドレスへ、均等に書き込みアクセスするような仕様である必要があるのだ。

フラッシュメモリ側で、そのような理屈を処理してくれるような構造になっていない限りは、
使用頻度の高い、特定ファイルが載るメモリ程、過度なアクセスに晒され、早くに疲弊してしまい、
あまり使われなかった他のアドレス範囲の素子が健在でも、使えないシロモノとなってしまうのだ。

対策として、ECC(ErrorCheckingCorrect)機能搭載を謳うタイプのCFだったとしでも、
それが適切に動作してくれるかは、正直 懐疑的にならざるを得ない。

ま、このヘンを解決し、ドライブとして最適化されたカタチで登場したのが、SSDなのだろうが、
ソレも、内部処理のアルゴリズムが適切でなければ、寿命を期待するコトは出来ない・・・

また、そうした媒体を利用し、発生したフラグメントを解消する場合、
Windowsのデフラグは、記録媒体への煩雑なアクセスを要する為、使えない。
その代替手段は、別途用意した同容量(か、ソレ以上)の同種記録媒体やHDDへ、ファイルレベルで複製した後、
元のドライブの可能な範囲の領域を開放し、複製したファイルを順次書き戻すと云った体の手順である必要がある。

コレには、システムファイルの最適な配置を模索しておかなければならないコトもあり、
既存OSの場合、インストールの煩雑化が予想される。


大前提として、不揮発記録媒体の場合、その素材の改良に期待するしかないのが現実なのだが、
まだまだOS側での改良の余地も大きいと云うのも事実である・・・・・・アレ? ハナシがSSD寄りになってしまってるゾ?( ; ゚Д゚)
カメラの記録媒体を長持ちさせたいだけだったんだが・・・w


-----
但し、大量の撮影が予想されるような取材に出る前には、その限りではナイと添えておく。
データのサーバへの保存を済ませたら、速やかにメディアを初期化(ないしクリーンに)して、撮影に備えて欲しい。

2010/02/22

しかし不満っ!!・・・


・・・考えなく生じた仕様起因の構造的な問題は、見過ごせないっ!! ("み○もんた"なノリでw)


先のログでは、撮り味や利便性に関わるハナシだったが、
ソコはソレ、やはりデジタル機器である、インターフェイス(以後 I/F)は重要なファクターだ。
・・・にも関わらず、前々ログでも触れている通り、SD15でも、14を踏襲したに過ぎない始末、
時代遅れを画に描いて、そのまま実現してしまってドウしたいのか?、既にイミフだ。

コレは偏に、プロセッサベンダに起因するトコロが大きい。

I/Fを別チップで処理させるなら、SIGMA側でも対処はできる。
しかし、そうした外部半導体に依存しない構造を持たせなければ、低消費電力は期待できない。
つまり、TRUEⅡに同梱されたI/Fが全てなのだ。

にも関わらず、今のTRUEⅡは あまりに低水準過ぎる・・・ 
端末の将来像を読み違えて潰えたFM-TOWNSのような屈辱を、SIGMAに味あわせたいダケなのではナイのか?
と懐疑的にならざるを得ない・・・ 富士通、画像エンジンを請け負うと云うのなら、責任以って、
しっかりと先を見据えた仕様で半導体設計/製造をし、SIGMAへ供給して欲しい。


いつも出遅れて海外企業に"オイシイ"トコロさらわれてるってコトを、そろそろ自覚しろと云っているのだよ、富士通。

2010/01/30

改めてカメラに求めるもの・・・


デジタル機ならトクに・・・そして、今回取り上げる事象に限れば、フィルム機でも、AF機なら使われている、
電子制御シャッターに関わるファームウェア改訂だけで実現できる、是非とも欲しい機能について、
声を大にして述べたい!!


シャッターってぇヤシが、機械式から電子制御式(以後 EC)へ移行し高機能化されて随分経つ。
機械式の良さも知ってる おきつねさまだが、欠点も然りだ。

しかし、その欠点、ぢつは、ECになろうが、利用の中心がデジタル機に移ってこようが尚、
すべての機種(スチルカメラ)で、そのまま引きずっているのが現状なのだ。

しかも、昨今では、大半のユーザーが ソレを意識していない と云うのも、恐ろしいかな事実・・・(´ヘ`;)
特定環境下のでの撮影をしない一般のユーザーは、まず気付かないだろう。


・・・さて前置きが長かったが(^_^;)
それは、それだと一言で片付いてしまい、ログとしての録れ高が足りなくなってしまうからだ(爆)


・・・本題に帰ろう(-_-;)

それは、


 時間指定のある長時間露光時に開放を中止できない・・・


・・・って、判らない人には判り辛いか(´ヘ`;)

判らない向きの為 だけ に要約すると、
長時間露光ってのは、0.5sec以上の時間、シャッターを開放したまま行う撮影のコト・・・ 
まぁ実際は、0.5sec以上と決まっている訳ではないのだが、感覚的に長いと感じるのは、
恐らく その辺からだと思う・・・

問題ってのは、そう云った撮影の中でも、10sec以上の、長い開放時間の折りに顕著に認識できるのだが、
使用者により、どのヘンから不満を感じるようになるかは、大きく分かれるだろう。
っても、長い時間開放して、露を補うよう撮影をするのは本人の意思、ただ長いだけなら支障はない。

・・・そう、既に、詳しくない向きでも、勘の良い方なら もう気付かれただろう。

その問題とは・・・


  必要なトキに、意図して撮影を中断する機能を持たないコト


撮影を開始し、その早い段階で失敗が判った時に、ソレを即座に中止出来ないのだ!!
・・・30sec開放でコノ憂き目に合うと、かなりストレス溜まるよ実際 (#`∀´)

って、レリーズ使うと良いように思えるやも知れぬが、時間見ながら手動撮影しなければならず、実際コレもメドイ。

因みにココで、バッテリ抜いて強制停止すると、
殆どのカメラで記録媒体の記録システムとして使われている、管理能力水準の低いFATのコト、
元々記録されていた撮影データも、大きくダメージ喰らい兼ねない。

・・・つか、昨日おきつねさまもコレにヤられたクチ、ブチ切れてブチ切ったら、撮影データ大破損( ;_;)
鯖機にバックアップ済みだったので無問題だったが・・・
(カメラによっては故障の原因にもなり兼ねないので、良い子はマネをしないように。)


昔の機械式なら割愛できる(せざるを得ない)この問題も、ファームウェアでナンとでもなる この御時勢、
コレを放置しているカメラメーカーの神経を疑わざるを得ない ┐(´_`)┌

っても、このヘン改良するっつ~のも、大したコトのナイ、至って簡単な修正だ。

ソレはハードの構成も手伝って、容易な変更だけで実現できる。
ナニせ最近のカメラは、ナニかしらキャンセルボタン装備のモノも多いから、ソレに割り当てるもヨシ、
開放中、もう一度シャッターボタンを押されたらキャンセル扱いとするテもある。

プログラミング次第で、真に自在だ。・・・とっとと直しやがれ!! なの。
< 胸は大きいほうがスキ・・・なの。 ひまりちゃん口語萌えない・・・なの。 >

かなり良くなったケド・・・


関連アリなログとしては、もう3回目のとなりました、BloggerのWYSIWYGのハナシ。
前回 [ 20100128 0711 ] / 前々回 [ 20100126 1214 ]


 ・起動は それなりに軽くなった。
 ・カーソルのチャカつきは改善せず・・・ ソレに起因した操作のモタりは若干解消した。
 ・半角スペースは、" " ←使えてるかな、カナ?Ψ(`∀´)Ψ
 ・公開ボタンが下にしかないのは変わらないか・・・
  投稿オプションやラベルを表示すると、画面の情報量が多いモニタでも辛いハズだが・・・


-----

さて、ココで、他ユーザーには あまり関係ナイやも知れぬ更なる別問題を指摘しておこう。


 ・ラベルの一覧表示
   おきつねさまはラベルだらけにしてるから、"すべて表示"機能だと、チョイと探し辛い・・・
   (纏めろ と云う意見は無視)

   どうせWYSIWYGをFlashモドキ(未確認だが多分Ajax・・・JAVA!?)に差し替えたのだから、
   ラベルを、分類した連続ポップアップ状に表示する体に変更したほうが、
   効率の良い操作が出来るGUIとなる・・・その概要は"Orchis"でググって参考にするが良い!(王様風)

 ・プレビュー
   ログの幅までカスタムされたテンプレートの場合、全く役に立たない。
   (テンプレをイジんな ってぇ意見も無視)

 ・メンテナンス画面のポップアップウインドウ処理
   ポップアップブロックにヤられるか、表示が重くて敵わん・・・

   それに ロリちゃんだと、ホップアップしたウインドウ幅とは違う数値でセンタリングしてしまうので、
   入力テキストボックスがマトモに表示されない。
   (カスタムしたテンプレート幅基で中心座標が計算されている模様)
   なので、target="_blank" で、表示してくれたほうが、まだ親切。

 ・ロケール設定が無視される。
   くろむたん限定の問題だが、日本の日時を海外書式で表記してしまう。
   主に、"フィードの設定" でのハナシ。


   つまり、コレ ▼ が、

     かなり良くなったケド・・・ - 2010年1月30日

   こう ▼ なってしまう。

     かなり良くなったケド・・・ - Saturday, January 30, 2010


   ・・・右側のバーって、幅300pxしかナイんだから、勘弁してよ ┐(´_`)┌
・・・まだまだよのう越後屋( ̄ー ̄)ニヤなんか、殆ど嫌がらせみたいな記事になってるしww

2010/01/28

まだまだ だなBlogger・・・


先のログで指摘したWYSIWYGの問題について・・・

HTML記述ミス検出機能は、元通り動作するようになった・・・ まぁ コレはヨシとして、
あとは カーソルの妙なチャカつきを何とかして貰いたいモノだ。


そして、新たに別の問題を指摘するなら、

 ・旧WYSIWYGより起動が重い。
   少しずつ軽くなっているようなので、今後に期待。

 ・[投稿を公開] と [保存]ボタン。
   画面サイズが潤沢でない場合、現在の位置だけでは使い辛いのが現状だ。
   早急に、本文入力テキストボックスの上にも配置して欲しいトコロだ。

 ・本文中で半角スペースが使えないのも不便。
   全角と半角は使い分ける向きも居る、こちらも早々に、対応を考慮すべきだ。


<追伸ログ - 20100130 0132 >

2010/01/26

小さくなっても・・・


・・・同じだけの使い勝手を期待してナニが悪い!! 


そう言い放ちたくなる現状に辟易な おきつねさまが暴走中w
・・・たまたま つけっ放しになっていたTVで、ジャパネット・たかた観て、


  ノート端末(以後 のて機)やってるメーカーって、どいつもコイツもバカと違うか


そう云う想いを強くした おきつねさまがココに居る・・・ のて機に付いてるキーボード(以後 K/B)のハナシだ。

昨今の 大型高解像度液晶とテンキー付K/B ・・・コレらは ぢつアリ(つか、買って後悔したくなければ必須)だ。

しかし! 日本人の指なんて、然して太くも長くもナイのが大勢と云うのが実情なのに、
どう云う訳か、わざわざUSA人合わせなフルストロークK/Bに拘る余り、Shift/Ctrl/Alt/カーソルと云った、
主要なキーが、必要以上に蔑ろにされている! これらキーが特定位置にナイK/Bなんて使い勝手最悪だ!!

しかも、腕や指のストローク(動作範囲)が余計に増えるだけと云う始末・・・
つか、キーの押し下げ距離が殆どナイのに、フルサイズキーに拘るトコが既にイミフ ┐(´_`)┌


  ぢつに ナ・ナ・ナ・ナンセンス!!! (#`Д´)ι


折角、液晶幅のおかげで、K/Bにとっても大きなスペースを確保できたのだから、
コンパクトなフルレイアウトK/Bを搭載するのがスヂだと云っているのだ!!(#`∀´)


大体、のて機レイアウトのK/Bで、AccessやExcelに対し、連続で値を入力するコトと、
VBA(VisualBasic for Application)・・・つまりOffice製品内スクリプト(通称"マクロ")の作成や、
Web/SQLサーバ/DB再構成向けVBスクリプト開発、Webサイト構築などを同時に行ったりと、
ほんのチョイとだけ高度な運用しようとしただけでも、はっきり云って、あの位置にShiftやカーソルキーあると、

      ぶっ壊してやりたくなるくらい邪魔。

コレは、各種アプリケーションによる日本語文書作成や編集作業時にも同様である。
むしろ、キーレイアウトを通常のK/Bに準じ、サイズを縮小しただけのほうが、余計な混乱無く使えるのだ!!

そんな おきつねさま オススメK/Bは、OWLTECH (MITSUMI) KEK-EA9-AUⅡ (以後EA9AU)・・・
コイシは、それら条件を100%満たした逸品で、アイボリーとブラックの2色が発売されている。

 
         KEK-EA9AU/II アイボリー                KEK-EA9AU/II(B) ブラック


通常のK/Bと比較すると、
               


と、いう具合・・・ 実際、4:3タイプの17inch液晶モニタの幅より3~5cm近く小さい。
そんな訳で、確かにキー間隔が小さい。が、キートップ(指が触れるところ)のサイズは、
通常K/Bと比較しても、そんなには差がないので、一般的な手をした者の利用なら支障はナイだろうし、
むしろ余計な動きが減る分 効率的だ。

それに、同社同様製品でも、異常に小さいだけがウリのOWL-KB84SMOWL-KB56UM等よりは、
遥かにムリがナイ。

って、余程不器用だったり、デブい指したりしてるヤシらには、何れも向かないんだけどねΨ(`∀´)ΨEA9AU、云うてもメンブレン式キーなんで、キータッチに高級感と云うモノは全くナイ。
"ドコ製の どのスイッチ使ってる" とか云って、PFU製のK/Bとかに陶酔しているような、
こってりハマってるテのK/B厨な向きには、まず合わないだろう・・・

しかしEA9AU、構造のワリにはタッチにストレスもナイので、これ以上を求める理由もない。
・・・っても、価格は一番安いHappyHackingと同じ位するんだよな(-_-;)
(安物キーボードと呼ぶには、サスガに ちと高価・・・)

おきつねさまは、同じEA9AUでも 一世代前の MITSUMI KEK-EA9AUを、10年以上、ほぼ毎日使ってきた。

ただ、JISキー配列には元々不満があるので、
おきつねさま仕様(かな入力向け)に、キー配列をカスタマイズしてある。

オーバーホール(解体メンテ)も デスクトップ向けフルサイズK/B同様容易だ。
・・・っても、一般でフツーに使うなら そんな必要はなく、ブロアスプレーで掃除する程度で充分だ。

そうして今に至っても、タッチにヘタりもなく、接触不良もないし、
某DELL機付属のゴミK/Bのような引っ掛かり感もなく、快適な操作感・・・
当時、構造のワリには高価だったのも、今となっては頷けるトコロだ。
(むしろ使い込んだほうが良くなるテの商品なのだろう)

あと、ヘタな高級スイッチ使ってる高価なブツよりは、むしろ暴挙な使い方すら許される感がある(マテコラ
日常的に使うモノなのだし、そう云うユルさは実際有り難い。
・・・ってもなぁ、もう新たなモノを手に入れ辛くて、うっかり買い替えが効かないって点では、
高級品と そんなに差がナイって意見もあるケド・・・(最新鋭新幹線か SLか って違いなんだと思う)


あと、仕様上、若干の欠点があるので、一応述べておくべきだろう・・・

ソレは、一般K/Bより、やや消費電力が大きい点・・・
過去、AT機(i486や初代Pentium)時代のマザーボード(以後 M/B)では、
K/Bへの電源供給が貧弱だったモノもあり、それらではEA9AUを認識できなかったという、良くない時期もあった。
・・・っても、昨今の のて機や端末(に使用されるM/B)は、設計段階から潤沢なので、そのようなコトにはならない。

この点の改良については、Ⅱが発売される半年前、MITSUMIに対し有線(Tel)にて、
再販と改良とを要求したものだが、改良に至っているのかは、今のトコロ確認できていない。

・・・試したくても、ドコにも売ってないので( ;_;)
試そうと思って探した時には、全てのショップ(通販)で、一切在庫してなかったし・・・


この問題が実際のトコ支障ナシ と云うのを証明できるとしたら、おきつねさま環境で、
ドライバレスで使えるPS/2→USBアダプタ SANWA SUPPLY USB-CVPS1経由でも、
BIOS管理も含め、利用できているコトが挙げられると考える。
・・・昨今では、ほぼ標準なので、取り分けて別途記述する必要はナイかも知れないが、
BIOS画面操作に関しては、USB K/Bに完全対応しているM/Bのみが、その対象であるコトを一応添えておく。



ま、(K/Bを置く)スペースを取るか? 消費電力を取るのか? の二択になるのかも知れないが、
後者に関しては、今となっては然程の違いもなく、過剰に気にする必要もないワケで、
むしろ、手を動かすストロークの削減を考えるなら、間違いなくEA9AUに分があるだろう。


そして本題の のて機K/B・・・ パンタ式キートップは、確かに良く出来てる。
が、プラ製なので、ちょっとした衝撃で飛んでしまう程チャチい、そんなシロモノに余計な金出すのは願い下げ。
確実な強度すら得られないのなら、凝った造りである必要なんてナイ。

EA9AUは、キーの固定方法が単純だからこそ、強度の高い構造を容易に実現し、且つ、
大半のキーサイズが小さいコトで、パンタのような余計な支えが無くとも、垂直に押し下げられようになっていて、
大きなキーのみ、別構造で しっかりとした金属製の支え(バランサ)を入れ、使用感向上を図っている。
のて機K/Bの押し下げ距離なら、この構造で充分なのだ。

これだけ単純な構造でも、アレだけの使用感を得られるK/Bは、他にそうはナイだろう。

のて端末開発に携わっている技術屋諸君、一度EA9AUに触れてみると良い。
そして、今まで搭載させてたK/Bの無駄さ加減を、身を以って思い知るべきだ。

・・・とか云って、もう 売ってる店、殆どナイけどねΨ(`∀´)Ψ
(なんでだろ・・・?)


ま、幸い製造終了ではナイようなので、のて機への搭載用に、EA9AUの内部部品を調達するコトは容易だろう。
今のような使えないK/B搭載して恥曝しているよりは、ココはヒトつ、一考の価値があると思うのだが?-----
因みに、今使っているEA9AUは、ぢつは2枚目。

最初のは、クレバリー本店(当時2号店は無かった)で、新品を買ったが、その後紛失・・・
(知人に譲ったのかも知らんが忘れた)

その数年後に、たまたまジャンク屋で買ったタッチパネル端末に、オマケで付いてきたのだ。
当時お取り寄せで新品で買うと、送料含め6k以上したので、かなりトクした気分だったよ♪

で、その直後、鯖用に もう1枚、新品で黒いのが欲しくて、アキバの全ショップ廻ってみたが
ジャンクすら1店舗も無かったよ・・・orz

その後(今から2年程前)、また懲りずに、EA9AUを手に入れるべく再度、全店舗巡りを敢行したが見事全滅。
またも大いなる失望感を味わうコトとなった・・・ 今は買えるようになってるのだろうか?(´ヘ`;)


ついさっき確認したら、Tsukumoとかは通販でも在庫してるみたい。
   ▼

OWLTECH KEK-EA9AU/II(B) 《送料無料》
日本語 109キー キーボード MITSUMI製
商品スペック
接続PS2言語日本語
キーレイアウト109キーボードテンキー
パームレスト×ワイヤレス×



あと、他のアキバのショップや Amazonでまで扱ってる・・・求める声は多かったってぇコトやね(^_^;)
・・・って、待つコト8年越しかぁ(´ヘ`;)

ヤバいっ! のんびりしてると また市場から消えてしまい兼ねんっっ゜。(゜Д゜;)≡(;゜Д゜)・。
無くならないウチに、Blackのほう、急ぎ確保しないと!!
< ノート端末キーボード考 Fujitsu BIBLO LOOX TOSHIBA Dynabook Panasonic Let'sNote SONY VAIO NEC Lavie >

2010/01/03

アレ対応版・・・


前の版で困難だった、ネットワークドライブ/フォルダ上のファイルアクセスも容易にする為、
対象ファイル読み込み処理だけ、ADODB.Streamから FileSystemObject.OpenTextFileに差し替えました。

以前のログにも記述した通り、ADODB.Streamでは、どう処理の順序を変えても、
ネットワーク先からローカルドライブへ、無条件にテンポラリってしまい、
大量のファイルを連続処理するのはおろか、1つのファイルだけでも多大な時間を要していたのです。

で、今朝・・・ つーか深夜だけどw 夜通しでFSO版を試作してみて、その問題の解消に至りました。
やっぱり餅は餅屋、ファイルアクセスなら、DB向けオブジェクト使うより、FSOってコトですかね・・・(^_^;)
って、書き込みとかはADOのままですケドww以下はアーカイブです。

X3FSIR.zip βReleaseArchive - 20100103 0739 launch -
▲ を、右クリックしてファイルとして保存してください。


とは云え まだまだ、

     アクマで暫定版デスから。結局こんなん出ました~w

'***** ↓↓↓ScriptTitle↓↓↓ *********************************************************
' X3FSIR.vbs - X3F ShootingInformationsReader
' FoveonX3 RAWファイルから、撮影情報を文字列として取得する。

' - Created by LazwardFox -

'

' Update -------- ----
' Release
' Update
' βRelease
' Update 20100103 0706 Source読み込み部のみ、ADODB.Streamから
' FileSystemObject.OpenTextFileに差し替えるコトで、
' ファイルへのアクセスを最小限化、LANファイルアクセス対応へ。
' Update 20091231 1814 0byteファイルに因るエラーへ対策。
' Update 20091231 0425 処理集約の誤りを修正。
' Update 20091230 0315 複数ファイル指定に暫定対応。
' Update 20091230 0130 撮影日時文字列化処理追加/テキストデータの範囲可変に対応。
' αRelease 20091226 2150 単一ファイル取得版、データも内容のまま列挙。
' 日本語/最適化準備中。
' DevStart 20091226 2040

'***** ↓↓↓ ObjectDecralations ↓↓↓ *************************************************
Option Explicit
Public My, Parameters, Fs, objADO ', MySh, objSMTP, objMx
Set My = WScript
With My
Set Parameters = .Arguments ' パラメーター取得
If Parameters.Count <= 0 Then ' パラメータなし起動の無効化
.Quit
End If

Set Fs = .CreateObject("Scripting.FileSystemObject")
Set objADO = .CreateObject("ADODB.Stream")
'Set MySh = .CreateObject("WScript.Shell")
'Set objSMTP = .CreateObject("CDO.Message") ' SMTP Object
'Set objMx = .CreateObject("MSXML2.XMLHTTP") ' URL Check
End With

'***** ↓↓↓ Decralations ↓↓↓ *************************************************
'Public ThisScriptFull, ThisScript, Start
Const vbWq = """"

' Const - Letters
Dim vbWCrLf, vbTc, vbNullB
vbWCrLf = vbCrLf & vbCrLf
vbTc = vbTab & vbCrLf
vbNullB = chr(&h00)

' Const - Date/Times


'***** ↓↓↓ LocalDecralations ↓↓↓ *************************************************
Dim X3FSet

'***** ↓↓↓MainRoutine↓↓↓ *********************************************************
'On Error Resume Next

'X3FSet = Array("X3F",, 264, 1500, "VERSION_BF", "BURST", "TIME", "1970/1/1")
X3FSet = Array("X3F",, 0, 1800, "VERSION_BF", "BURST", "TIME", "1970/1/1")
BPS Parameters, X3FSet


' ----- ExitProcess
Set Fs = Nothing
Set objADO = Nothing
My.Quit

'***** ↓↓↓Functions↓↓↓ *********************************************************
' X3FSIs
'------------------------------------
' Binary Pickup to Strings
' バイナリファイル中 範囲を指定し、任意の文字列群を抽出する。

' - Created by LazwardFox -

' Fs、objADO、cnvDateTime

' Update
' Release
' βRelease
' Update 20091231 1814 0byteファイルに因るエラーへ対策。
' Update 20091231 0425 処理集約の誤りを修正。
' Update 20091230 0315 複数ファイル指定に暫定対応。
' αRelease 20091230 0300
' DevStart 20091230 0200 X3FSIsを汎用用途向けに修正。

' BPS (
' arFileNames - 対象ファイル群配列。
' ,arSet - 動作パラメータを、下記スキーマ準拠の配列で指定。
' )


' ▼▼ arSet Schema ▼▼▼▼▼

' = Array(strEx, SaveFileName, StartBit, ReadByte, Firstkey, Lastkey, strTimeKey, BaseDate)

' arSet
' (0) {strEx} 対象拡張子 (String)
' (1) {SaveFileName} 保存ファイル名 (String)
' (2) StartBit 読み取り先頭位置(Bit) (Number)
' (3) ReadByte 読み込み範囲(byte) (Number)
' (4) Firstkey 先頭キー名 (String)
' (5) Lastkey 最終キー名 (String)
' (6) {strTimeKey} 時間キー名 (String)
' (7) {BaseDate} 時間変換基日付文字列("y/m/d") (String)


Function BPS(arFileNames, arSet)
Dim kNothing, iADO, strTarget, Pc, fKey, rSource, rHeader, lHeader
Dim pResult, arResult, rUnits, sResult
kNothing = String(5, vbNullB) ' キーも値も存在しない範囲の、データ排除向け
Set iADO = objADO
For Each strTarget In arFileNames
If Fs.GetExtensionName(strTarget) = arSet(0) Then
arSet(1) = Replace(strTarget,"." & arSet(0),".txt") ' < 暫定
Set rSource = Fs.OpenTextFile(strTarget,1) ' 対象ファイルを読み取りモードで開く
With rSource
' ファイルから指定範囲をメモリへ取得
If arSet(2) > 0 Then
.Skip(arSet(2)) ' 先頭位置をセット
End If
rHeader = .Read(arSet(3)) ' 指定範囲を取得
End With
Set rSource = Nothing
With iADO
If LenB(rHeader) > 0 Then
' Convert to PlainText
rHeader = CStr(rHeader) ' 次処理に備え、文字列データ化
rHeader = Replace(rHeader, "SECc", "") ' 無効キー排除
rHeader = Replace(rHeader, kNothing, "") ' 無効範囲の消去
.Type = 2 ' AccessMode - Text
.Charset = "_autodetect" '"Shift_JIS" "Unicode" "utf-8"
.Open
.Position = 0
.WriteText = rHeader
lHeader = .Position ' 取得データ長
rHeader = ""
For Pc = 1 To lHeader Step 2
.Position = Pc
pResult = pResult & .ReadText(1)
Next
.Close
arResult = Split(pResult, vbNullB) ' 配列化。
pResult = ""
For Each sResult In arResult
If sResult = arSet(4) Or fKey > 0 Then ' スタートキー
If fKey = 4 Then ' 日付データ変換
sResult = cnvDateTime(arSet(7), sResult)
End If
rUnits = rUnits & sResult ' 値書き込み
' ▼ 末尾符号/キー検出処理 ▼▼▼▼▼
If fKey < 2 Then
If sResult = arSet(5) Then ' 終了キー
fKey = 5
ElseIf sResult = arSet(6) Then ' 時刻値変換対象
fKey = 4
Else
fKey = 3
End If
rUnits = rUnits & "," ' キー末尾処理
Else
rUnits = rUnits & vbCrLf ' データ末尾処理
If fKey = 5 Then ' 処理終了
Exit For
End If
fKey = 1
End If
' ▲ 末尾符号/キー検出処理 ▲▲▲▲▲
End If
sResult = ""
Next
arResult = ""
fKey = 0
' 指定ファイルへ書き込み
.Type = 2 ' AccessMode - Text
.Charset = "_autodetect"
.Open
.Position = 0
.WriteText rUnits
.SaveToFile arSet(1), 2
End If
.Close
End With
rUnits = "" ' < 暫定
End If
Next
Set iADO = Nothing
End Function

'------------------------------------
' cnvDateTime
' 秒整数で構成された日時データを、Windowsシリアル値に変換。
' 基準日の異なる値の変換にも対応。

' - Created by LazwardFox -

'

' Update
' Release
' βRelease 20091230 0300
' αRelease 20091229 1635
' DevStart 20091229 1500

' cnvDateTime (
' strBaseDate - "y/m/d"形式の日付文字列、基準日を指定。
' ,SourceDateTime - Secベースの経過時間を表す整数
' )

Function cnvDateTime(strBaseDate, SourceDateTime)
Dim sDate
sDate = DateValue(strBaseDate)
cnvDateTime = (((SourceDateTime / 60) / 60) / 24) + sDate
End Function




< ファイルの一部へのみアクセスするなら、FileSystemObject(FSO) >

2009/12/31

ダメだな・・・


ADODBStream使っても、LAN経由(ネットワークドライブ)のファイルへ読み込み掛けると、
その対象ファイル全容量を、一旦ローカルにキャッシュしてるワ。

ファイルが小さいとか、GigabitEtherとか使ってる分には無問題なんだろうケドねぇ・・・(´ヘ`;)

色々試したが、やっぱり この方法では、部分的に読み込むのはムリな模様(-_-;)
もしかしてADODBStreamよりも、FileSystemObjectの類似処理のほうが向いているのか?

2009/12/30

またかいっ・・・


先の おでかけ撮影のトキにもヤられた、SD14の撮影データ破損。
今朝の就寝前定点撮影データも完全ロスト・・・ もう勘弁して(-_-;)

CFメーカー/商品問わず こんな症状出るようなら、新たにCFを買い足すとしても躊躇する罠・・・(´ヘ`;)

取り敢えずChkDskで回復させたが、確保できた.chkファイルの拡張子をX3F変え、
そのままSIGMA PhotoProで現像を試みたトコロで、余程 運が良くない限り、現像は出来ない。
しかし、面白いコトがついさっき判った。
前ログ公開のスクリプトで、正常なファイルと同様に撮影情報が取得できたのだワw

確かに、元々から、完全に全ての情報を取得できないスクリプトだったワケだが、
Header破損しているファイルからも、正常なファイルからのモノと変わらないデータを抜き出せたコトに驚いている。

・・・でも、現像は出来ないんだよなぁ(;_;)
RAW内のメインデータの範囲を取得する手段があれば復元できそうだが、
その情報を格納しているハズのFooterも死んでるコトが多いし、
当然ファイル内で一番規模の大きいメインデータの破損も考えられるワケだから、
結局安直には解決できん・・・(´ヘ`;)


ま、撮影のログだけでも簡単に確保できたので、ヨシとするしかナイ罠・・・

なんだか・・・


・・・またまた遅延。 真に おきつねさまくおりてぃww


って アレ、まだ完成はしていない。


・・・先のを うpしたアトに気付いたコトなのだが、今回、スクリプトの対象としているトコロのX3Fファイルってのは、
どうやらカメラ側の設定次第で、付随するデータの開始位置も変ってしまうようで、
文字列として抽出する範囲固定で処理しているようなブツでは、うまく対応できないと云う罠(-_-;)

また、撮影日時の値も、秒で構成された小数点以下の値を使わない整数で表されている上、
基準日時が通常端末とは異なる1970/01/01と云う仕様。
・・・Longで表されるシリアル値で、且つ 1900/01/01を基準として動作するVBScriptの日付関数では、
単純に そのまま代入して使うと云うワケには逝かなかった。

今回は、それらの点への対応と、オブジェクトの再利用など、処理の流れを大幅に見直し効率化を図り、且つ
暫定ではあるが、複数ファイルドロップも可能にした。


・・・ただ、カメラの設定項目で、SIGMA PhotoProでも抽出でき、撮影データと深く関わりのある、
露出補正/コントラスト/彩度/シャープネス は、あれらテキストとは、独立したBitで記録されているらしく、
今回の版でも取り出せてない。

そのヘン、X3Fファイルのデータ形式について物色したら、意外に単純でない項目があって、
仕様の通りの処理していては、ファイルの全領域を読み込む必要性に迫られてしまう・・・
コレは、ネットワークドライブを多用している おきつねさま的には、非常~にヨロしくない(´ヘ`;)
なので、実機サンプル撮影後のデータを比較解析し、詳細が判明し次第、スクリプトに反映させるコトとした。


ま、今回のでも、前の版よりは、全然マシではあるモノの、以下は やっぱり、
まだまだ アクマでサンプルですから・・・m(_ _)mスクリプトは、散々コソコソ差し替えつつも、何気にメドイさんだったんで
アーカイブせずに放置していたのだが、取り敢えず、うpしますたm(_ _)m


X3FSIR_a.zip αReleaseArchive - 20100103 0723 Update -
▲ を、右クリックしてファイルとして保存してください。晒し者w

'***** ↓↓↓ScriptTitle↓↓↓ *********************************************************
' X3FSIR_a.vbs - X3F ShootingInformationsReader
' FoveonX3 RAWファイルから、撮影情報を文字列として取得する。

' - Created by LazwardFox -

'

' Update -------- ----
' Release
' Update
' βRelease
' Update 20100103 0603 変数整理。
' Update 20091231 1814 0byteファイルに因るエラーへ対策。
' Update 20091231 0425 処理集約の誤りを修正。
' Update 20091230 0315 複数ファイル指定に暫定対応。
' Update 20091230 0130 撮影日時文字列化処理追加/テキストデータの範囲可変に対応。
' αRelease 20091226 2150 単一ファイル取得版、データも内容のまま列挙。
' 日本語/最適化準備中。
' DevStart 20091226 2040

'***** ↓↓↓ ObjectDecralations ↓↓↓ *************************************************
Option Explicit
Public My, Parameters, Fs, objADO ', MySh, objSMTP, objMx
Set My = WScript
With My
Set Parameters = .Arguments ' パラメーター取得
If Parameters.Count <= 0 Then ' パラメータなし起動の無効化
.Quit
End If

Set Fs = .CreateObject("Scripting.FileSystemObject")
Set objADO = .CreateObject("ADODB.Stream")
'Set MySh = .CreateObject("WScript.Shell")
'Set objSMTP = .CreateObject("CDO.Message") ' SMTP Object
'Set objMx = .CreateObject("MSXML2.XMLHTTP") ' URL Check
End With

'***** ↓↓↓ Decralations ↓↓↓ *************************************************
'Public ThisScriptFull, ThisScript, Start
Const vbWq = """"

' Const - Letters
Dim vbWCrLf, vbTc, vbNullB
vbWCrLf = vbCrLf & vbCrLf
vbTc = vbTab & vbCrLf
vbNullB = chr(&h00)

' Const - Date/Times


'***** ↓↓↓ LocalDecralations ↓↓↓ *************************************************
Dim X3FSet

'***** ↓↓↓MainRoutine↓↓↓ *********************************************************
'On Error Resume Next

'X3FSet = Array("X3F",, 264, 1500, "VERSION_BF", "BURST", "TIME", "1970/1/1")
X3FSet = Array("X3F",, 0, 1764, "VERSION_BF", "BURST", "TIME", "1970/1/1")
BPS Parameters, X3FSet


' ----- ExitProcess
Set Fs = Nothing
Set objADO = Nothing
My.Quit

'***** ↓↓↓Functions↓↓↓ *********************************************************
' X3FSIs
'------------------------------------
' Binary Pickup to Strings
' バイナリファイル中 範囲を指定し、任意の文字列群を抽出する。

' - Created by LazwardFox -

' Fs、objADO、cnvDateTime

' Update
' Release
' βRelease
' Update 20091231 1814 0byteファイルに因るエラーへ対策。
' Update 20091231 0425 処理集約の誤りを修正。
' Update 20091230 0315 複数ファイル指定に暫定対応。
' αRelease 20091230 0300
' DevStart 20091230 0200 X3FSIsを汎用用途向けに修正。

' BPS (
' arFileNames - 対象ファイル群配列。
' ,arSet - 動作パラメータを、下記スキーマ準拠の配列で指定。
' )


' ▼▼ arSet Schema ▼▼▼▼▼

' = Array(strEx, SaveFileName, StartBit, ReadByte, Firstkey, Lastkey, strTimeKey, BaseDate)

' arSet
' (0) {strEx} 対象拡張子 (String)
' (1) {SaveFileName} 保存ファイル名 (String)
' (2) StartBit 読み取り先頭位置(Bit) (Number)
' (3) ReadByte 読み込み範囲(byte) (Number)
' (4) Firstkey 先頭キー名 (String)
' (5) Lastkey 最終キー名 (String)
' (6) {strTimeKey} 時間キー名 (String)
' (7) {BaseDate} 時間変換基日付文字列("y/m/d") (String)


Function BPS(arFileNames, arSet)
Dim kNothing, iADO, strTarget, Pc, fKey, rSource
Dim lHeader, pResult, arResult, rUnits, sResult
kNothing = String(5, vbNullB) ' キーも値も存在しない範囲の、データ排除向け
Set iADO = objADO
For Each strTarget In arFileNames
If Fs.GetExtensionName(strtarget) = arSet(0) Then
arSet(1) = Replace(strtarget,"." & arSet(0),".txt") ' < 暫定
With iADO
' ファイルから指定範囲をメモリへ取得
.Type = 1 ' AccessMode - Binary
.Open
.LoadFromFile strTarget ' 対象ファイル
.Position = arSet(2) ' 先頭位置をセット
rSource = .Read(arSet(3)) ' 指定範囲を取得
If .Position > 0 Then ' 20091231 1814
.Close
' Convert to PlainText
rSource = CStr(rSource) ' 次処理に備え、文字列データ化
rSource = Replace(rSource, kNothing, "") ' 無効範囲の消去
.Type = 2 ' AccessMode - Text
.Charset = "_autodetect" ' "Shift_JIS" "utf-8" "Unicode"
.Open
.Position = 0
.WriteText = rSource
lHeader = .Position ' 取得データ長
rSource = ""
For Pc = 0 To lHeader
.Position = Pc
pResult = pResult & .ReadText(1)
Next
.Close
arResult = Split(pResult, vbNullB) ' 配列化。
pResult = ""
For Each sResult In arResult
If sResult = arSet(4) Or fKey > 0 Then ' スタートキー
If fKey = 4 Then ' 日付データ変換
sResult = cnvDateTime(arSet(7), sResult)
End If
rUnits = rUnits & sResult ' 値書き込み
If fKey < 2 Then ' ▼ 末尾符号/キー検出処理 ▼▼▼▼▼
If sResult = arSet(5) Then ' 終了キー
fKey = 5
ElseIf sResult = arSet(6) Then ' 時刻値変換対象
fKey = 4
Else
fKey = 3
End If
rUnits = rUnits & "," ' キー末尾処理
Else
rUnits = rUnits & vbCrLf ' データ末尾処理
If fKey = 5 Then ' 処理終了
Exit For
End If
fKey = 1
End If ' ▲ 末尾符号/キー検出処理 ▲▲▲▲▲
End If
sResult = ""
Next
arResult = ""
fKey = 0
' 指定ファイルへ書き込み
.Type = 2 ' AccessMode - Text
.Charset = "_autodetect"
.Open
.Position = 0
.WriteText rUnits
.SaveToFile arSet(1), 2
End If
.Close
End With
rUnits = "" ' < 暫定
End If
Next
Set iADO = Nothing
End Function

'------------------------------------
' cnvDateTime
' 秒整数で構成された日時データを、Windowsシリアル値に変換。
' 基準日の異なる値の変換にも対応。

' - Created by LazwardFox -

'

' Update
' Release
' βRelease 20091230 0300
' αRelease 20091229 1635
' DevStart 20091229 1500

' cnvDateTime (
' strBaseDate - "y/m/d"形式の日付文字列、基準日を指定。
' ,SourceDateTime - Secベースの経過時間を表す整数
' )

Function cnvDateTime(strBaseDate, SourceDateTime)
Dim sDate
sDate = DateValue(strBaseDate)
cnvDateTime = (((SourceDateTime / 60) / 60) / 24) + sDate
End Function

2009/12/26

いい加減シビレを切らせて・・・


・・・構築中なのデス! SIGMA RAW(FoveonX3Fファイル)の撮影情報連続取得スクリプト。
最新版は次のログで公開/更新中・・・ コチラのログは、スクリプト比較向けに放置w

因みに あの、X3Fって拡張子のファイル、厳密に云うと、JPEGで云うトコロのEXIFってのには準拠出来ていない。
なので、Windowsのエクスプローラで使うには結構不便を強いられる。

しかも、本家提供の現像アプリSIGMA PhotoPro3.xですら、
ファームウェア更新などで拡張されたプロパティ等を、完全に読み出せないと云う罠・・・
撮影したら即、必要な情報メモっておくか、カメラ(CF)にデータがあるウチ(端末へ転送してしまう前)に、
情報控えておかないと、管理できない・・・

そんなデジタルデータなんて、使い悪くて仕方ないんだが・・・(-_-;)


で、バイナリエディタでX3Fファイル覗いたら、なんか知らん、ファイルの先頭に全てあるではナイでsky♪
だったら、文字列解析で利用した、ADODBStreamで特定範囲を読み出すだけのほうが、
SPP使うよりアクセス時間短縮できる・・・  ってのは、随分前から考えていたのだが、
ソコはソレおきつねさまくおりてぃ、ダレかが作るだろうと永らく放置していたのだ!

・・・って、チョイと文字列の扱いが面倒だったので手を付けなかっただけなのだが、
此度は諦め、1日使って最適な呼び出し方など模索し、解決に至った。

以下スクリプトで単体動作可能だが、1ファイルずつドロップする体なので、使い勝手は良くない。
このレベルだと、SPPでやってるよりは マシンに負荷が掛からないってぇトコだけが利点な程度。
おきつねさますくりぷととしては、とてもクオリティを満たしているとは云い難い。
ツマり・・・


     アクマでテストな版デスから。


ってコトでw


明日 このコアに、連続ファイル/フォルダ投入/日時文字列化/iniローダ/日付バックアップ/html吐き出しなど、
今までのライブラリを そのまま適用したり、下記に内包させて最適化を図るなどして、
SPPと等価の文字列を連続したHTMLとして取得可能なスクリプトに仕上げる。
(ココに晒す写真や そのデータを手作業で並べるのが面倒になっただけw)


取り敢えずコアなどww

'***** ↓↓↓ScriptTitle↓↓↓ *********************************************************
' X3F ShootingInformationsReader
' - Created by LazwardFox -

'

' Update -------- ----
' Release
' Update
' βRelease
' αRelease 20091226 2150 単一ファイル取得版、データも内容のまま列挙。
' 日本語/最適化準備中。
' DevStart 20091226 1241

'***** ↓↓↓ ObjectDecralations ↓↓↓ *************************************************
Public My, Parameters, Fs, objADO ', MySh, objSMTP, objMx
Set My = WScript
With My
Set Parameters = .Arguments ' パラメーター取得
If Parameters.Count <= 0 Then ' パラメータなし起動の無効化
.Quit
End If

Set Fs = .CreateObject("Scripting.FileSystemObject")
Set objADO = CreateObject("ADODB.Stream")
'Set MySh = .CreateObject("WScript.Shell")
'Set objSMTP = .CreateObject("CDO.Message") ' SMTP Object
'Set objMx = .CreateObject("MSXML2.XMLHTTP") ' URL Check
End With

'***** ↓↓↓ Decralations ↓↓↓ *************************************************
'Public ThisScriptFull, ThisScript, Start
Const vbWq = """"

' Const - Letters
Dim vbWCrLf, vbTc, vbNullB
vbWCrLf = vbCrLf & vbCrLf
vbTc = vbTab & vbCrLf
vbNullB = chr(&h00)

' Const - Date/Times


'***** ↓↓↓ LocalDecralations ↓↓↓ *************************************************
'Dim rdSource, svRoot, edMove, eSource
'Dim arLog, arResult, strReport

'***** ↓↓↓MainRoutine↓↓↓ *********************************************************
'On Error Resume Next

X3FSIR Parameters(0),34

' Msgbox strResult,,"CreateTesters"

' ----- ExitProcess
Set Fs = Nothing
Set objADO = Nothing
My.Quit

'***** ↓↓↓Functions↓↓↓ *********************************************************
'------------------------------------
' X3F ShootingInformationsReader
' FoveonX3 RAWファイルから、撮影情報を文字列として取得する。

' - Created by LazwardFox -

' Fs、objADO

' Update
' Release
' βRelease
' αRelease 20091226 2150 単一ファイル取得版、データも内容のまま列挙。
' 日本語/最適化準備中。
' DevStart 20091226 1241

' X3FSIs (
' strTarget - X3Fファイル名を指定する。他の種類は無効。
' ,KeyCount - キー数を指定。
' )

Function X3FSIR(strTarget, KeyCount)
Dim Lc, sName, iADO, sADO, Pc, kPc, rByte, cResult, arResult, rUnits
Const strEx = "X3F"
Lc = (KeyCount * 2) - 1
If Fs.GetExtensionName(strtarget) = strEx Then
sName = Replace(strtarget,"." & strEx,".txt") ' < 暫定
Set iADO = objADO
With iADO
.Type = 1 ' - Binary
.Open
.LoadFromFile strTarget ' 対象ファイル
For Pc = 1 To 1100 Step 1
.Position = 527 + Pc
rByte = rByte & CStr(.Read(1))
Next
.Close
cResult = Replace(rByte,vbNullB & vbNullB & vbNullB & vbNullB & vbNullB, "")
cResult = Replace(cResult," ", "")
arResult = Split(cResult,vbNullB)
For Pc = 0 To Lc
rUnits = rUnits & arResult(Pc)
If kPc = 0 Then
rUnits = rUnits & ","
kPc = 1
Else
rUnits = rUnits & vbCrLf
kPc = 0
End If
Next
.Type = 2 ' - Text
.Charset = "_autodetect" ' "Shift_JIS" '"utf-8" '"utf-8" ' "Unicode"
.Open
.WriteText rUnits
.Position = 0
.SaveToFile sName, 2 ' < 暫定
.Close
End With
Set iADO = Nothing
End If
End Function



・・・SD14のX3Fファイルでしかテスト出来ないので、このままで同社他機種に対応できるかは不明。
ただ、メチャクチャ単純な処理しか使っていないので、各位で好き勝手改変して使ってもらうのもアリだろう。
メドイけど(^_^;)

2009/12/08

あいたたた・・・


ウチ鯖の専用HPを、ケータイのブラウザで読み、ソコからPOSTさせて得た基地局座標を、
ググるさんAPIで準広域地図画像に変換し、鯖の指定フォルダに固有名称で確保するコトで、
詳細座標を漏洩するコト無く、おきつねさま位置をWeb公開・・・ ってのを試みたのだが、なんと!
禿bank の SAMSUNG 709SC は、簡易位置情報取得機能を持ってなかったと云うオチがw (^_^;)

テスト環境すらナイってコトなので、このガジェットの開発は断念の方向・・・


しかし、端末へのメールの移行や、MAPIクライアントやPIMとの内容同期もサポしてない・・・
流石にコレは "予想GUY" だったワww
<SoftBank SAMSUNG 709SC>

2009/12/06

VB弾投下っ!・・・


VBScript等で、時刻文字列とか、2つの日時から その差異や平均を取得となると、
簡単なようで、厳密にやろうとすると結構面倒な上、難しいと云うのは、
そのヘン触ったコトのある身なら、ダレでも既知のコトと思う。

で、以前公開した、日付文字列取得関数を簡単に改良した版と、日時の差異を色々な形式で取得できる関数、
変数内データ確認関数、簡単な桁揃え関数などを一纏めにし、且つ、ソレらが連携するよう組んだサンプルを、
以下にうpしてみた。

アーカイブはコチラ ・・・今回は サンプルなので、エンコード版は非同梱。


おやくそくの ひけらかしw

'***** ↓↓↓ScriptTitle↓↓↓ ****************************************************
' dtDiffs (X3FManeger)
' - Created by LazwardFox -

' 時間文字列取得関数と、時間差取得関数のテストパッケージ。
' mSecレベルを未処理な為、平均時間取得で、秒の精度が低い。

' 特徴)
' 時間差異取得関数 dtDiff で 得られる差異は最大、9999/12/31 23:59:59
' また、比較時刻に差異が無かった場合には、既存日付関数では取得不可能な、
' 0年0ヶ月0日 0時間0分0秒を、様々な形式の値として取得可能。

' 注)
' 上記特徴に起因し、時間差異取得関数 dtDiff で 得た値は、
' 概ね、そのまま日付処理関数に代入できない。

' Tips 01)
' VBScriptの時刻取得関数で得られた値には、ミリ秒が含まれる。
' が、このスクリプトに含まれる処理だけでは、
' ソレを表示結果に反映させるコトは出来ない。
' (JavaScriptにある、MilliSeconds に、該当する関数はナイ)

' Tips 02)
' テストで用いている Sleep関数は、1/1000秒レベルの精度を持たない。
' 故に、テストでのミリ秒の値は安定しない。
' つまり、.Sleep 3000 としても、ジャスト3000mSecでは動作していない。
' (JavaScriptで類似処理を用いても、ほぼ同様)

' 単純数値化
' yyyymmddhhnnss と結果を並べて、(倍精度)整数に変換したモノ。
' もし仮に、結果の差異が 11年 6ヶ月 2日 16時間 22分 4秒 であった場合、
' 110602162204 が(文字列ではなく)整数で返される。


' それら特徴や問題に起因し、平均値を得るに、
' 丁度割り切れる秒数でナイ場合の精度は期待できない。


' Update -------- ----
' Release -------- ----
' Update 20091206 0307 平均値出力暫定追加(ミリSecレベル未対応版)
' Update 20091206 0247 公開用にX3FManegerから分離し、テストスクリプト化。
' βRelease 20091011 0625
' DevStart 20091010 1549

'***** ↓↓↓ ObjectDecralations ↓↓↓ *******************************************
Public My, Fs ', Parameters, MySh,
Set My = WScript
With My
'Set Parameters = .Arguments ' パラメーター取得
'If Parameters.Count <= 0 Then ' パラメータなし起動の無効化
' .Quit
'End If

'Set MySh = .CreateObject("WScript.Shell")
Set Fs = .CreateObject("Scripting.FileSystemObject")
'Set objSMTP = .CreateObject("CDO.Message") ' SMTP Object
'Set objMx = .CreateObject("MSXML2.XMLHTTP") ' URL Check
End With

'***** ↓↓↓ Decralations ↓↓↓ *************************************************

' Const - Letters
Dim vbWCrLf, vbTc
Const vbWq = """"
vbWCrLf = vbCrLf & vbCrLf
vbTc = vbTab & vbCrLf

' Const - Date/Times


'***** ↓↓↓ LocalDecralations ↓↓↓ ********************************************
Dim sStartTime, sEndTime, ElapsedTime
Dim StartTime, EndTime
Dim strReport
strReport = "時間差異と平均時間取得テスト" & " " & vbWCrLf

'***** ↓↓↓ TestParameter Decralations ↓↓↓ ***********************************
Const sPar = 3 ' テスト用平均値取得パラメータ

'***** ↓↓↓MainRoutine↓↓↓ ****************************************************
'On Error Resume Next
sStartTime = Now() ' 開始時刻シリアル値取得
My.Sleep 6000 ' テスト間隔
sEndTime = Now() ' 終了時刻シリアル値取得
dtDiff sStartTime, sEndTime, sPar, ElapsedTime ' 経過時間
iDT sStartTime,,,, 0, StartTime ' 開始時刻文字列取得
iDT sEndTime,,,, 0, EndTime ' 終了時刻文字列取得

strReport = strReport & "みなし処理回数 - " & sPar & " " & vbWCrLf

strReport = strReport & "開始-" & StartTime & " " & vbCrLf
strReport = strReport & "終了-" & EndTime & " " & vbCrLf
strReport = strReport & "経過-" & Join(ElapsedTime(0)," ") & " " & vbCrLf
strReport = strReport & "経過時間単純数値化-" & ElapsedTime(1) & " " & vbCrLf
strReport = strReport & "平均-" & Join(ElapsedTime(2)," ") & " " & vbCrLf
strReport = strReport & "平均時間単純数値化-" & ElapsedTime(3) & " "
Msgbox strReport & " ",,Fs.GetBaseName(My.ScriptName)
Set Fs = Nothing
'Set MySh = Nothing
My.Quit

'***** ↓↓↓Functions↓↓↓ ******************************************************

' X3FManeger (fCopy)
'------------------------------------
' iDT - 日時文字列 ないし 日/時配列取得 for VBScript
' - Created by LazwardFox -

' VarChk

' Update 20091103 1149 パラメータチェックを完全外部化。
' Update 20091010 1736 文字列/シリアル値による日時指定、
' 及び パラメータ省略に対応。
' Update 20090228 0458 変数宣言変更
' Update 20090223 0959 時刻桁処理変更
' Update 20090223 0253 Len記述忘れ修正
' Update 20090223 0135 変数宣言忘れ修正
' Update 20090210 0218
' Update 20090210 0115
' Release 20090209 2035

' iDT (
' {tDateTime} - Serial / DateTimeStrings (省略可、既定値 - Now)
' ,{dSplitter} - DateSplitString (省略可、既定値 - "/")
' ,{dtSeparater} - Date/Time SepaleteString (省略可、既定値 - " ")
' ,{tSplitter} - TimeSplitString (省略可、既定値 - ":")
' ,{Control} - 戻り値 文字列/配列指定 0 or 1 (省略可、既定値 - 1)
' ,Result - 結果日時文字列 (省略不可)
' )

' Memo - いずれかのSplitterに ~|" を設定すると、全ての要素が、配列として返されます。
' iDT ,"|",,,,arDT ' - (0) YYYY / (1) MM / (2) DD / (3) HH / (4) NN / (5) SS

Public Function iDT(tDateTime, dSplitter, dtSeparater, tSplitter, Control, Result)
Dim vDateTime, cDateTime, nD, nS, strYMD, strHNS
Dim dVal, cVar, arVar
dVal = Array(Now(),"/"," ",":",1) ' 既定値配列
cVar = Array(Array(tDateTime,7,False,dVal(0)),Array(dSplitter,10,True,dVal(1)), _
Array(dtSeparater,10,True,dVal(2)),Array(tSplitter,10,True,dVal(3)), _
Array(Control,2,False,dVal(4)))
arVar = VarChk(cVar)
tDateTime = arVar(0)
strYMD = FormatDateTime(DateValue(tDateTime),0) 'Update 20091010 1736
nS = ":" & Split(CStr(FormatDateTime(tDateTime,3)),":")(2) 'Update 20090223 0951
strHNS = FormatDateTime(tDateTime,4) & nS 'Update 20090223 0951
If arVar(3) = dVal(3) Then
Else
strHNS = Replace(strHNS,dVal(3),arVar(3))
End If
If arVar(1) = dVal(1) Then
Else
strYMD = Cstr(Replace(strYMD,dVal(1),arVar(1)))
End If
If arVar(4) = dVal(4) Then
Result = Split(strYMD & "|" & strHNS,"|")
Else
Result = strYMD & arVar(2) & strHNS
End If
End Function

' X3FManeger (fCopy)
'------------------------------------
' VarChk
' 変数内データの確認と、既定値への置換をサポート。
' 関数への代入パラメータ確認向け
' - Created by LazwardFox -

' Update
' Release
' βRelease 20091103 1152
' DevStart 20091103 1014

' VarChk - 結果を配列で返す。
' (
' arVar - 調査対象と条件を配列で代入する。 (省略不可)
' )

' arVar = Array(Array(Value,VarTypes,Boolean,DefaultData),Array(Value,VarTypes,Boolean,DefaultData),・・・)

' Value - 確認対象となる値、ないし変数
' VarTypes - VarType定数 (日時値を得る場合は、基が文字列代入であっても 8 を指定)
' Boolean - 条件の可否
' DefaultData - 代替規定値 (データ型自由)

Function VarChk(arVar)
If VarType(arVar) >= 8192 Then
ReDim iResult(UBound(arVar))
Dim Pc, iVar, cVar ,vVar, vDT, cDT
Pc = 0
For Each iVar In arVar
cVar = VarType(iVar) >= 8192 And Ubound(iVar) = 3
If cVar Then
cVar = VarType(iVar(1)) = 2 And VarType(iVar(2)) = 11
If cVar Then
If iVar(1) = 8 Then
vDT = VarType(iVar(0))
cDT = vDT <> 10 And (vDT = 7 Or (vDT = 8 And IsDate(iVar(0))))
If cDT Then ' シリアル値/日時文字列 識別
iResult(Pc) = DateValue(iVar(0)) + TimeValue(iVar(0))
Else
iResult(Pc) = iVar(3) ' Now()
End If
Else
vVar = VarType(iVar(0))
If iVar(2) = (vVar = iVar(1)) Then
iResult(Pc) = iVar(3)
Else
iResult(Pc) = iVar(0)
End If
End If
End If
End If
Pc = Pc + 1
Next
End If
VarChk = iResult
End Function

' X3FManeger
'------------------------------------
' dtDiff
' 日時値の差異を取得。
' "各単位の差異のみを単純に取得"するDateDiffとは異なる。
' ※ iDTの仕様起因し、利用する場合、コチラを先に実行する必要がある。
' - Created by LazwardFox -

' Digit, VarChk

' Update 20091208 0119 平均値取得時のゼロ除算回避を追記。
' Update 20091206 0626 VarChk使用で、Par 省略に対応。
' Update 20091206 0356 暫定版平均値取得機能追加。
' Update 20091206 0217 差異演算基底日付値に伴う修正。
' Update 20091105 0329 単純化した時間差数値を出力可能に
' Update 20091105 0315 文字列桁揃えをサポート
' Release 20091103 1655
' βRelease 20091103 1626
' DevStart 20091103 1606

' dtDiff - 各単位別の結果を配列で返す。
' Var(0) 日付 - (0) Y / (1) M / (2) D
' Var(1) 時間 - (0) H : (1) N : (2) S
' (
' Before - Serial / DateTimeStrings (省略不可)
' ,{After} - DateSplitString (省略可、既定値 - Now())
' ,{Par} - AverageParameter (省略可、既定値 - 1)
' ,Result - 結果を日/時別の文字列を配列として返す。 (省略不可)
' Result(0)(0) - "Y/M/D" / (1) - "H:N:S"
' Result(1) - YYYYMMDDHHNNSS を並べ、単純数値化した結果が返る。
' Result(2)(0) - "Y/M/D" / (1) - "H:N:S"
' Result(3) - YYYYMMDDHHNNSS を並べ、単純数値化した結果が返る。
' 例) 時間差が 4日と2時間15分5秒 なら 4021505
' )

' Result と Join(Var(0),"/") & " " & Join(Var(1),":") は、等価。
' 数値で、単位別の値の取得が不要であれば、以下書式だけで利用可能。

' dtDiff Before, After, Result

Function dtDiff(Before, After, Par, Result)
If VarType(Before) = 7 Then
Dim cVar, arVar, lDate, Diffs, avDiffs, iResult
cVar = Array(Array(After,7,False,Now()), Array(Par,2,False,1))
arVar = VarChk(cVar)
lDate = DateSerial(0,1,1) ' 差異演算基底日付値 (0,1,1) = 2000/01/01
Diffs = arVar(0) - Before 'After - Before
If arVar(1) > 0 Then
avDiffs = Diffs / arVar(1)
End If
Diffs = lDate + Diffs
avDiffs = lDate + avDiffs
iResult = Array( _
Array(Digit(Year(Diffs) - 2000, "0000"),Digit(Month(Diffs) - 1, "00"),Digit(Day(Diffs) - 1, "00")), _
Array(Digit(Hour(Diffs), "00"), Digit(Minute(Diffs),"00"), Digit(Second(Diffs),"00")), _
Array(Digit(Year(avDiffs) - 2000, "0000"),Digit(Month(avDiffs) - 1, "00"),Digit(Day(avDiffs) - 1, "00")), _
Array(Digit(Hour(avDiffs), "00"), Digit(Minute(avDiffs),"00"), Digit(Second(avDiffs),"00")))
Result = Array(Array(Join(iResult(0),"/"),Join(iResult(1),":")),Cdbl(Join(iResult(0),"") & Join(iResult(1),"")), _
Array(Join(iResult(2),"/"),Join(iResult(3),":")),Cdbl(Join(iResult(2),"") & Join(iResult(3),"")))
dtDiff = iResult
Else
dtDiff = False
End If
End Function

' X3FManeger
'------------------------------------
' Digit
' 文字列表記の数値の桁揃えを行う。
' - Created by LazwardFox -

' Update
' Release
' βRelease 20091105 0303 チョー暫定発行 そにょ2
' DevStart 20091105 ----

Function Digit(Num, dig)
Digit = Right(Clng("1" & dig) + Num, Len(Dig))
End Function



ココまでヤる意味があるかは、利用側の用途次第かw

mSec対応版も組んでたんだけど、時間無くなったので途中のまま・・・(-_-;)
<そのまま使えるVBscript 日時文字列 時刻差異取得>

2009/12/01

発掘 ! ・・・


去年春に作成し、HDDの何処かにロストしていたブツが見つかった。

先頃にも話題にした、Arcsoft の RAW Thumbnail Viewer [日本語解説]を使い、
各社カメラのRAWデータの画像チェックや選択を容易にする為に、
Windowsのエクスプローラの縮小版(サムネイル)画像のサイズ変更をレジストリ操作で行う・・・
コレ、確かに簡単な手順で出来るのだが、意外に、手動で ちまちまヤるのは結構メドイさんだったので、
過去に それっぽいスクリプトを組んでいたのだよ・・・


で、今回はソレを うpすることにした。


まずは、ソースなど ひけらかしw・・・

'***** ↓↓↓Title↓↓↓ *********************************************************

'ThumbnailSettings
'Developed by LazwardFox
'Release 20080507_0410


'◆◆◆ Information ◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆

'本スクリプトでは、エクスプローラでの画像のサムネール(縮小版)表示の
'サイズと表示品質を任意に設定できます。



' VBScriptでは、クォーテーション [ ' ] が、行頭にある部分は実行されません。
' 正しくは、クォーテーション以降は注釈扱いとなります。念の為…

'本スクリプトは、コマンドライン ないし ショートカット中に
'パラメータ /t を付加することで、テストモードで動作します。

'ショートカット中の記述 ▼
' "C:\Documents and Settings\[Account]\デスクトップ\Thumbnail Settings.vbs" /t




'***** ↓↓↓Decralations↓↓↓ *********************************************************

On Error Resume Next

Const vbWq = """"
Const strRootKey = "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\"
Const strTgtKeys = "ThumbnailQuality,サムネイルのクオリティを数値で指定してください。,50,100,90,DWORD*ThumbnailSize,サムネイルのサイズを入力してください。,32,256,96,DWORD"

'----- ExtendConstantLiterals
Dim vbWCrlf
vbWCrlf = vbCrLf & vbCrLf
'--------------------------

Dim strCL1stPar, arTgtKeys, strTgtKey, arTgtValues, strKey
Dim numMin, numMax, numDef,valType, strErr, strMsg, strStVal, numStrVal
Dim strInVal, numVal, strVal, intDig, strWtVal, strEnd

Set WSHArguments = WScript.Arguments 'コマンドラインパラメーター取得
Set WshShell = WScript.CreateObject("WScript.Shell")
Set FS = WScript.CreateObject("Scripting.FileSystemObject") 'レジストリキー作成に使用。

'***** ↓↓↓MainRoutine↓↓↓ *********************************************************

strCL1stPar = WSHArguments(0)
arTgtKeys = Split(strTgtKeys, "*")
For Each strTgtKey In arTgtKeys
arTgtValues = Split(strTgtKey, ",")
strKey = CStr(Fs.BuildPath(strRootKey, arTgtValues(0)))
numMin = arTgtValues(2)
numMax = arTgtValues(3)
numDef = arTgtValues(4)
valType = arTgtValues(5)
strErr = ""
strMsg = arTgtValues(1) & vbWCrlf & vbTab & "指定可能な値は、" & numMin & "~" & numMax & " で、" & vbCrLf & vbTab & "既定値は " & numDef & " です。"
strStVal = WshShell.RegRead(strKey)
numStrVal = CInt(strStVal)
Do
strInVal = InputBox(strErr & strMsg, arTgtValues(0), numStrVal)
If strInVal = "" Then
If strEnd = "" Then
strEnd = "処理を中止しました。"
End If
Exit Do
End If
numVal = Cint(strInVal)
strErr = "◆ 入力値が誤っているか、範囲を超えています。◆" & vbWCrlf
Loop Until numVal < numMin or numVal > numMax
If Not strInVal = "" Then
Pc = Pc + 1
strEnd = UCase(Pc) & "つの設定を"
If valType = "DWORD" Then
strVal = CStr(numVal) 'Cstr(Hex(numVal))
intDig = 8 - Len(strVal)
strWtVal = String(intDig, "0") & strVal
Else
strWtVal = strVal
End If
valType = "REG_" & valType
If LCase(strCL1stPar) = "/t" Then
msgbox "RegKey - " & strKey & vbCrlf & "SetValue - " & strWtVal & vbCrlf & "ValueType - " & valType
strEnd = "テストモードです。" & vbWCrlf & strEnd & "表示しました。"
Else
WshShell.RegWrite strKey, strWtVal, valType '対象となるレジストリキーへ、値を書き込む。
strEnd = strEnd & "変更しました。"
End If
End If
Next
WSHShell.Popup strEnd, 5, "Thumbnail Settings", vbInformation


結構前に組んだので、ブログ幅全く気にしてなかったり、余計な解説入ってたり、変数名の付け方違ったり と、
最近のとは かなり趣が異なっているのだが、このトコロ、とんと公開していないので、
殆どの閲覧されている諸兄には、何のコトやらサッパリなコトかとオモワレw


で、コレ▼ が、アーカイブ。 中身の実行ファイルがインストーラなので、手間はナイ。

ThumbnailSizeSettings.zip

設定が済み、端末を再起動すると、変更が適用されます。
以後は、管理ツール内にできる [ThumbnailSize Settings] を使い、何度でも設定変更可能です。


まぁ、スクリプトベースの"なんちゃってGUI"も、インストーラ仕立てで なんとなく様になってて、
この程度仕上げてあれば、なんとかまだ、使い良いほうかと・・・

・・・って、ホントは VB2k8でスライダ使った仕様のを用意していたのだが、
結局同時期に、途中のまま放置されていると云う事実もあったりww


なにせ 一度設定してしまえば要らないモノなんでねぇ、そりゃモチベーション揚がらない罠(´ヘ`;)-----
今年夏に発行されたばかりの、RAW Thumbnail Viewer2 な、サイトから消えてるw
やっぱりExif取得失敗バグの修正、容易には出来なかったか・・・

あと、RAW Thumbnail Viewer のほう、DLサイトはEnglishのみなのだワ、コレが。
それに、同画面には、"Download Trial" とあるが、無償ツールだ。
疑うなら コチラを観てもらえば判る、一覧中の このアプリには、購入ボタンはナイのだよ。
<そのまま使えるVBscript インストーラ仕様w>

2009/11/05

祝 鯖たん復活!


・・・フォルダ構成は 未だ中途半端だが、暫定なので仕方ないw

ま、再インスコ自体は、随分前に終わってたんだけど、
写真ファイル管理用のVBScript組んでたら、Web鯖設定のほうが遅れてしまって(^_^;)

ファイル管理系Script大増発したので、近日公開予定。

2009/10/23

端末構築考 Processor編・・・


今は、ぢつに良い時代だ。
OSも、その種類こそ減ったモノの、俄然安定しているし、機器も部品単価が圧倒的に下がった。
・・・デバイスドライバさえ別売り高価だった時代から比べれば、天国と地獄だ。
そう云った背景も手伝って、個人レベルでも、多用途高性能端末構築が極めて容易となっている。

しかし、組むにしても、過去暴利を貪っていた企業の製品を使いたくないのが おきつねさまポリシーだ。
なので、メーカー品(新品)は買わないし、中古も然り、精々ジャンクになってたら、お情けで買ってやる程度。

じゃフツウに最新鋭機材が欲しい場合はドウするのか? やっぱり組むでしょ当然、好きな部品メーカーで揃えて。

ココ今、プロセッサとかはトクに困る。

アンチ腐っtel派としては、あのメーカーの石は避けたいのだが、
(使うかは別として)動画用途を考えると、AMD石の選択ってのは、未だ結構地雷なのか?

SocketF板で動画/音響系は自滅行為 と云うのは、以前Tゾネで聞いた。
・・・この時点でOpteronが候補から外れる(;_;)

じゃ、最新のAM3板はドウなんだ? ネトゲ用途ばかりが際立って、
その他・・・ 録画系端末での採用は あまり聴かないのだが?
よくAMD石を採用しているNECすら(その系の用途向けで)使ってないカモ・・・
(つか、上記条件企業に含まれるNEC製のはタダでも要らんがね。)

VIAのは未だ組み込みの域を出ていないしなぁ・・・ 多用途端末組むには、まだパワー不足だ。

FujitsuのSPARCはドウか・・・? 能力は申し分ない。
しかし、このメーカーのは長期運用時の安定性も疑うべきだろう。
なにせカメラのプロセッサすら、安定動作できる製品を供給できてないのだから・・・ ┐(´_`)┌
ソレにSPARCでは、Winも走らないし、仮にSolarisに乗り換えるとしても、
この石は、やたら高価だし、アレで不安定だった日には目も充てられん・・・
霞ヶ関臭漂いそうな、旧態依然とした企業体質もハナに憑く、やっぱり選択対象外だな。

T芝のCELLは?・・・あの会社自身、あの石を端末向けに、メインストリーム化する気があるように診受けられない。
終いにはTVのプロセッサにしちまってるしな・・・(-_-;)
そんな素行を見せるような企業、汎用プロセッサを供給できる器ではないと見下すべきなのだろう。
ま、選択肢としては諦めるべきだ。


さて、どうしたモノか・・・(´ヘ`;)

ココは一つ 早々に、nVIDIAにメインストリーム市場へ参入してもらうのが、最良の策だと思う。

ナニしろ今、AMDは"残念"な状態だし、Fujitsuのは高価で手が届かないし、VIAは論外、
T芝はソレとして売る気もないし、ヒドい状況だ・・・
なのでnVIDIAには期待してるんだよね、アンチ腐っtel派としてはね。

ココは、汎用で安価でTesla同梱的なのを一つ投入キボンヌ・・・(なんて贅沢)

2009/10/20

ようやく手をつける・・・



ローカル鯖メンテ中・・・

暫定的に、端末を鯖代わりに接続してますが、全てのファイルを格納していない機器なので、
暫くの間 ココの画像で、表示できないモノが数多くあるかと・・・ m(_ _)m

・・・って、今までも散々オトしてたケドww

2009/10/13

対策は自ら先行すべき?・・・


やっぱり最善は、通常、アクセスがあってからScriptで完成させる見た目の殆どを、
鯖側で事前に完結させた状態のHTMLで公開しておく・・・

・・・って、フレームLoveな おきつねさまとしては、ソレを多用して非対応ブラウザユーザーを呪詛する以外は、
至ってシンプルな構造のページとする予定w

まぁ、アクセスがあって処理するのは、精々カウンタ値の追加と アクセスログくらい、
それらも、クライアントサイドとは関わり無く動作させるので、
結局出来上がっている見た目のみが、相手に受け渡されるコトとなる。
また、適切に縮小を完了した画像ファイルをサムネとして配しておくのは前ログの通り。

・・・それなら骨董ブラウザでも表示瞬殺だね♪ フレームにさえ対応していればΨ(`∀´)Ψw


んで、ココのキホン的な見た目は、維持するか、ないし もう少し手を加えると思うが、
同じような機能を維持しつつ、総じて、閲覧側の負担は、著しく軽減される、と・・・

で、ソレを安易に実現させる為、VBScriptやオリジナルアプリを使い、
今は手に依る作業で対応している部分を、自動化するよう取り組んでいる。


・・・鯖側の環境が整い次第、コンテンツ/アクセスログ共に、SQL鯖基で管理する。
但し、DBとの連携に、JScriptは使わない。 
ソレを使うと、ダレでもない、おきつねさま自身、自縛してしまうコトとなる(^_^;)
なにせ おきつねさま端末は、古いマシンと、ちょっと前のブラウザ、複雑なJScript実行は辛いっス。
(テストで組んだ時計表示JScript表示させただけで、loliちゃん固まったしなww)

VS2k8Expressはおろか、TexrEditor立ち上げてスクリプト打ってるだけでも、逝ってしまう様な機材だ、
おかげで作業が全く進まんっっ(;_;)