Doo Soft Labo
カウンタ
Contents
home.jpg
software.jpg
announcement.jpg
tips.jpg
old_version.jpg
bbs.jpg
linkicon.jpg
mail.jpg
Search
 
Web doosoft.seesaa.net
Recent Entry
MobSync98廃止について(Announcement:02/21)
MobSync Ver.2.0.3 リリース(News:02/21)
MobSync / WM-PC Synchronizer(Software:02/21)
MobSync韓国語リソース(News:01/02)
言語リソースについて(Announcement:07/26)
TC02 をバージョンアップ(News:07/19)
タイトルバーに貼り付くカレンダー,時計(Software:07/19)
Vectorさん(Soliloquy:07/17)
Best Software Awards 2008にノミネート(News:07/16)
MobSync Ver.2.0.2 リリース(News:07/11)
MobSync Ver.2.0.1リリースです(News:07/05)
MobSync Ver.2.0.0リリース(News:06/27)
Recent Comments
Recent Trackback
bug by 毎日research日記(03/09)
W-ZERO3のバックアップツールの問題 by カブクワ Blog(02/15)
関連用語


DooSoftLabo

07-16-2007

CEのフォルダを開く(3) - Vista宿題の解

この記事は前記事が前提になってます。
宿題の答えが(とりあえず)わかったので報告しておきます。
続きを読む≫

Vistaエクスプローラに渡す引数のうち,フォルダ指定部分(デバイスのフォルダ名+@)は「\Windows\スタート メニュー\」の場合「f%7CF%7C%5CWindows%5Cスタート%20メニュー%5C」でした。しかしこれを用いたコマンドでは(開くこと自身はできるのですが)以下のようにVistaエクスプローラのパンくずリストにフォルダツリーの中間部分が表示されません。
startmenu_fail.jpg
矢印部分に本来あるべき「Windows」フォルダが抜けています。(以上復習です。)

これを避けるためにはエクスプローラに渡す引数のうちフォルダ指定部分にもう一工夫します。
パンくずリストに載せるためのフォルダを上位からフルパスで順々に記述します。そのいちいちに頭に「f%7CF%7C」が必要です。間には "\" を用います。
すなわち,「\Windows\スタート メニュー\」を開くためのフォルダ指定は以下になります。
f%7CF%7C%5CWindows%5C\f%7CF%7C%5CWindows%5Cスタート%20メニュー%5C
「Windows」が二度出現していることに注意してください。一部エンコードされた「\Windows\」と「\Windows\スタート メニュー\」をエンコードされない「\」でつなげているわけです。
おわかりの通り,フォルダの深さの分だけどんどん冗長になります。
「\Windows\スタート メニュー\プログラム\ゲーム\」を開こうとする場合は,
f%7CF%7C%5CWindows%5C\f%7CF%7C%5CWindows%5Cスタート%20メニュー%5C\f%7CF%7C%5CWindows%5Cスタート%20メニュー%5Cプログラム%5C\f%7CF%7C%5CWindows%5Cスタート%20メニュー%5Cプログラム%5Cゲーム%5C
となります。
前記事の例を用いて全引数を書くと,
::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\\\?\activesyncwpdenumerator#umb#2&306b293b&0&activesyncwpddevice-d9435669-f425-3ee0-ff5e-aef68e4683ee-#{6ac27878-a6fa-4155-ba85-f98f491d4f33}\f%7CF%7C%5CWindows%5C\f%7CF%7C%5CWindows%5Cスタート%20メニュー%5C\f%7CF%7C%5CWindows%5Cスタート%20メニュー%5Cプログラム%5C\f%7CF%7C%5CWindows%5Cスタート%20メニュー%5Cプログラム%5Cゲーム%5C
となるわけです。
さて,このほれぼれする引数のエクスプローラへの渡し方です。コマンドプロンプトやCreateProcessで「explorer.exe /n, [上記引数]」とすると,浅いフォルダの場合は正しく機能してくれますが,深いフォルダを指定するとおそらくその長さのせいで(!)正しくフォルダを開いてくれません。(MobSync1.1.6ではCreateProcessを用いているために深いフォルダを開くことができていません。)
ShellExecuteを用いるのが吉です。コマンド (lpVerb) は "open",ディレクトリ指定 (lpFile) に上記引数文字列を指定します。
結果は以下です。
game_success.jpg
無事に中間部分も表示されていますねっっっ。
しかしなお左のツリーペインを見ると,「Windows」が「\」の下にあるのではなく,直接「○○のPDA2」に直接ぶらさがっています。これはちょっと変です。一方「miniSDカード」以下のフォルダを指定して同様のことをするとツリーペインでも正しく「miniSDカード」の下にぶら下ります。指定フォルダがメインメモリ上にあるのか外部メモリ上にあるのかを判別してフォルダ指定を変えてやる必要がありそうです。…。
…もうひとふんばり。
RAPIのCeGetFileAttributesで一番浅いフォルダの属性を得ます。(\Windowsとか\miniSDカードです。)この属性にFILE_ATTRIBUTE_TEMPORARY属性が立っていたら外部メモリがマウントされたフォルダだと考えてよいようです。
外部メモリならそのまま,そうでなければさらにフォルダ指定の頭に「f%7CF%7C%5C」を足してやります。…
vista_last.jpg

長きにわたる試行でした。とにかく,以上でこの件に関しては終了です。終了させてください。
役にたった方,感心した方,あきれた方,もっといい答えを知っている方はぜひコメントを残していってくださいませ。お疲れさまでした。
≪ 続きを隠す
URL Comment(0) TrackBack(0) Tips

05-08-2007

CEのフォルダを開く(2) - Vista

前項に続いて。Vista編です。
現在までに調べ得た情報を公開しておきます。これは個人的な調査であって,完全な解答,よりよい解答である保証はないことをお断りしておきます。

VistaでCEのフォルダを開くことはXP以前にくらべて格段に(?)複雑です。
まずは例から。
当方のW-ZERO3の「Windows\スタート メニュー」フォルダを開くためのコマンドは以下のようになります。
explorer.exe /n, ::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\\\?\activesyncwpdenumerator#umb#2&306b293b&0&activesyncwpddevice-d9435669-f425-3ee0-ff5e-aef68e4683ee-#{6ac27878-a6fa-4155-ba85-f98f491d4f33}\f%7CF%7C%5CWindows%5Cスタート%20メニュー%5C
XP以前とは違い,このコマンドは私のPC上で私のW-ZERO3を接続したときのみ機能します。
この長い引数は色分けしたように,3つのパートに分けられます。
::[マイコンピュータCLSID]\[WpdDevicePnPID]\[デバイスのフォルダ名+@]
という形式になっています。以下がそれぞれのパートの(わかっている限りでの)説明です。
続きを読む≫

(1)マイコンピュータCLSID
{20D04FE0-3AEA-1069-A2D8-08002B30309D}がマイコンピュータのCLSIDであることはXP以前から変わりはありません。
したがってコマンド
explorer.exe /n, ::{20D04FE0-3AEA-1069-A2D8-08002B30309D}
はXPなら「マイコンピュータ」,Vistaなら「コンピュータ」を開くことができます。

(2)WpdDevicePnPID
デバイスごとに違うのはここです。この長い文字列の必然性,意味について考えるのはやめておきましょう。
この文字列はWindowsレジストリから得ます。
XP以前でずっとお世話になってきたのは「HKEY_CURRENT_USER\Software\Microsoft\Windows CE Services」以下でしたが,Vistaではここはあまりあてになりません。
みっつのステップをたどって目的の値を得ます。
まずは,現在接続されているCEデバイスの情報は次のキーから。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WUDFRd\Enum
ここにある値"Count"が現在接続しているデバイスの数のようです。複数のCEデバイスが同時に認識されることはありませんでしたがほかのポータブルデバイス(って何でしょう。ORIGAMI-PCとかでしょうか)もここに列挙される可能性はあります。これに関しては検証されていません。
"Count"が1の場合,同じキーに"0"という名前の値ができます。内容は「ActiveSyncWPDEnumerator〜」という感じの文字列です。これは次へのキーになります。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\〜(上で得られた文字列)
にアクセスし,ここにある値"Driver"を得ます。「{eec5ad98-8080-425f-922a-dabf3de3f69a}\0007」といった文字列です。これも次へのキーです。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\〜(上で得られた文字列)〜\DeviceData
にアクセスします。
ここにある"WpdDevicePnPID"が目的の文字列です。

(3)デバイスのフォルダ名+@
"%7C" は "|","%5C" は "\","%20" は " "(半角スペース)がそれぞれURLエンコードされたものです。
すなわちここの部分をデコードすると "f|F|\Windows\スタート メニュー\" となります。
現在知られている限りではこのみっつのキャラクタだけがエンコードされています。非ascii文字をすべてエンコードしたものでは目的のフォルダを開いてくれないようです。
デバイスのフォルダ名の頭にある謎の "f|F|" ですが,これはデバイスの内部フォルダにアクセスしようとする場合,必ず必要のようです。また,最後の "\"("%5C")も必須です。
ここではメインメモリ上にあるフォルダを扱いましたが,外部メモリにあるフォルダでも特別な記述は必要ありません。
f|F|\miniSDカード\DCIM\
 ↓
f%7CF%7C%5CminiSDカード%5CDCIM%5C
です。

以上でExplorerへ渡す引数の解説は終りです。

ひとつ宿題が残っています。このコマンドで開いたウィンドウの上部に注目してください。
screen.jpg
矢印の部分,Vistaで新設された,なんというのでしょう?所謂「パンくずリスト」,現在のフォルダの階層を上にたどれるパーツに,CEフォルダの中間部分が抜けています。
エクスプローラを手動で操作してこのフォルダに辿り着けばこんなことにはなりません。また,CEのフォルダをコピーして任意の場所で「ショートカットを貼り付け」してできたショートカットによって開いた場合でもこんな風にはならないのです。
「これは何故? どうやったら防げるの?」
これが宿題です。
宿題が解けた方,解けそうな方,コメントをいただければうれしいです。
(解答は >>「CEのフォルダを開く(3) - Vista宿題の解」で。)
≪ 続きを隠す
URL Comment(0) TrackBack(0) Tips

05-08-2007

CEのフォルダを開く(1) - XP以前

CEのフォルダを開くにはどうしたらいいでしょう。
もちろん手動で開くのには問題ないのですが,プログラムから開く場合などのexplorer.exe にわたす引数についてです。
この記事はXP以前編です。

MobSyncでは「Jhosua Systems」ホームページ内の「カシオペア2 ツリー形式で表示」で提供していただいている情報によって,「.{49BF5420-FA7F-11cf-8011-00A0C90A8F78}」という拡張子を持つフォルダを任意の場所に作成して,Explorerでそのフォルダを開くようにしてきました。

しかし,より簡便な方法があります。(いまさらではありますが…。)
続きを読む≫
以下のようなコマンドを用います。
explorer.exe /n,::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\::{49BF5420-FA7F-11cf-8011-00A0C90A8F78}
このコマンドをDOS窓などで実行すれば,「マイコンピュータ」配下の「モバイルデバイス」フォルダを直接開くことができます。プログラムからCreateProcessなどに使えます。

またデバイス内のフォルダを開く場合は,その後に'\\'を続けて記述します。たとえば「\Windows\お気に入り」を開く場合は
explorer.exe /n,::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\::{49BF5420-FA7F-11cf-8011-00A0C90A8F78}\\Windows\お気に入り
です。

この方法であれば,実体としてのフォルダを作成する必要はありません。

以上は
藤田 隆興/ふじた たかおきさんの公開されている,「窓プログラミング」内の「特殊なフォルダやコントロールパネルの項目を開く」を参照させて頂いています。
藤田様,貴重な情報をありがとうございました。
≪ 続きを隠す
URL Comment(0) TrackBack(0) Tips

12-09-2006

同期を繰り返すと空きメモリは減少するか

    Pocket PC 2003とWindows Mobileで,同期を繰り返すと空きメモリが減っていくでしょうか。試験を行いました。
  • CEデバイスの「My Document」にあるファイルは数十程度です。
  • CEデバイスの外部メモリとPCにそれぞれファイル数4,000程度のフォルダを作成,前もって同一内容にしておき,これをMobSyncの同期対象フォルダとしました。したがって,MobSyncは同期チェックをするのみで転送は行っていません。
  • 試験中に他のアプリは極力動作させないようにしました。
  • 空きメモリ量の確認は「設定」→「メモリ」→「メイン」から。単位はMBです。

  1. CE側のActiveSync常駐のまま,1)ActiveSync接続-同期 2)MobSync同期 3) 切断 を繰り返す
    1. PocketPC2003

      ActiveSync
      同期後
      MobSync
      同期後
      切断
      一回目
      14.15
      13.99
      14.77
      二回目
      13.86
      13.84
      14.74
      三回目
      13.83
      13.65
      14.54
      四回目
      13.61
      13.61
      14.51
      五回目
      13.61
      13.61
      14.50

    2. WM5

      ActiveSync
      同期後
      MobSync
      同期後
      切断
      一回目
      19.56
      19.01
      19.97
      二回目
      19.23
      18.96
      19.92
      三回目
      19.21
      18.97
      19.93
      四回目
      19.19
      18.94
      19.90
      五回目
      19.18
      18.93
      19.89

  • 10〜30KB程度,確実に空きメモリは減っていくようです。
  • PocketPCの三回目の同期後に極端に減っている(200KB程度)のはやや不自然です。時々ActiveSyncも別途同期していますし,タイマーイベントで動くTodayプラグインなどは「実行中のプログラム」には表示されませんから,それらの影響かと思われます。WM5の三回目で二回目よりも増えているのも,二回目の最中に何か別のアプリが動いたと考えるほうがよさそうです。
  • では,切断後にCE側のActiveSyncを終了してみたらどうでしょう。

  1. 1)ActiveSync接続-同期 2)MobSync同期 3)切断 4)CE側ActiveSyncを終了 を繰り返す
ActiveSyncの終了は「実行中のプログラム」からしました。
    1. PockePC2003
      起動時 14.92
      ActiveSync
      同期後
      MobSync
      同期後
      切断
      ActiveSync
      終了
      一回目
      12.93 (*1)
      12.77
      13.63
      13.92
      二回目
      12.68
      12.73
      13.63
      13.92
      三回目
      12.67
      12.73
      13.62
      13.92
      *1 : リセット後最初のActiveSync起動。

    2. WM5
      起動時 22.30
      ActiveSync
      同期後
      MobSync
      同期後
      切断
      ActiveSync
      終了
      一回目
      20.47 (*1)
      20.19
      21.20
      22.23
      二回目
      20.40
      20.20
      21.21
      22.22
      三回目
      20.47
      20.20
      21.20
      22.24
      *1 : 同上

    • ほぼ完璧に空きメモリは回復しています。
URL Comment(0) TrackBack(0) Tips

11-04-2006

CERICHED.dll入手先

ActiveSync4.1以降,Word/PocketWordの変換がうまくいかない旨の報告を受けるようになった。
「コンバータの構成ファイル"CERICHED.dll"が見つかりませんでした。」というメッセージを出してエラー終了してしまうというもの。
覚え書きとしてCERICHED.dllの入手先を以下に。
ceriched.dll.zip
ceriched.dll.zip
入手したdllをActiceSyncインストールフォルダに置くことで変換が可能になる場合もある。
URL Comment(0) TrackBack(0) Tips

08-05-2006

RAPI/スレッド

RAPIとはActiveSyncのコアdllのひとつです。WindowsCE(PPC/WM5)とPCの転送をするためにMicrosoftが提供している諸APIが含まれています。

MicrosoftのMSDNなどにはRAPIを用いた単純なコピーのソースなどもあり当然MobSyncもこれを基本にコピールーチンを作成しているのですが,MobSyncの開発初期からずっと大きなサイズのファイル転送は問題を抱えていました。
PocketPCFreewaresという海外の有名なサイトにMobSyncは紹介されているのですが(こちらです)そこでも
Pay attention to very big files, it may stop in the middle of the process and fail to copy (just like ActiveSync).
とても大きなファイルに注意してください。それはプロセスの途中で中断し,コピーに失敗するかもしれません(ちょうどActiveSyncのように)。
と書かれています。これはActiveSyncの転送においても発生する事象らしいです。(「very big files」の表現は曖昧ですが,経験から言うと1MB超程度のファイルから問題が発生する場合がありました。)
今回,BBS上でlanさんに背中を押してもらい,半分あきらめかけていたこの問題にあらためて取り組みました。
RAPIが確保しているであろうバッファをクリアする目的で,1MB以上の転送を開始する前にRAPIを再起動することを最初に試みました。これはそれなりに効果があり,当方の環境で再現していたPC→CEの転送エラーはなくなりました。
しかしまだlanさん,kimさんの環境では転送エラーがなくならず,これに関しては当方では再現しない分,究明が難しかったです。lanさん,kimさんに協力をあおいでベータ版を長期間にわたって動かしていただきました。
そこで分かったことでもっとも重要だと思われるのは,どうやらRAPI自身のスレッド管理が不完全らしいということです。というのもこれといった対策を講じていない部分についてもデバッグ用のログを吐き出す手続きを加えるだけでエラーがなくなる(減少する)ということが見られるからです。
これに対処するために(デバッグログを吐き出す替わりに)Sleep(20)を入れることにしました。Sleepはアプリの休止を意味しますが,他スレッドの溜っている処理を流してやる意味があります。(20というのはどこかで読んだことのあるだけのあてずっぽうな数値で,実はSleep(0)でもよかったのかもしれません。)ver.1.0.7ではRAPIのファンクションを呼ぶ前にすべてSleep(20)を入れています。

もとより当方では再現性のないエラーへの対策なので,その実効性はまだ検証されつつあるという段階ですが,以上はとりあえずの技術的な覚え書きとして残しておきます。
URL Comment(0) TrackBack(0) Tips

03-20-2006

スペインの方からのバグ報告

error.jpg
いきなり
At the first time, sorry for my english, it’s bad.
という文章からはじまるメールは,OSを再インストールしたら全然MobSyncが動かなくなったというバグレポでした。「'38789.457…' ????????」というメッセージダイアログが出てそのままメインフォームも立上がらないとのこと。
こちらも英語は大の苦手で,あちらもこちらもいちいち読むのに一苦労,書くのに一苦労です。
数度にわたって現象を探るべくメールでやりとりしていたのですが,どうもらちがあかず,結局テストプログラムを作成して向うの環境で動かしてもらってログをメールで送ってもらって…ということを二度ほどして,わかったことは以下。
・「CreateForm」時に例外が送出されている。しかもフォームのコンストラクションよりも前。
・例外はEConvertError
EConvertErrorって,「アプリケーションで,整数,浮動小数点値,日付,または時間を文字列に変換できなかった場合,またはその逆の変換ができなかった場合」などに発生するということらしいのだが…?と考え込んでいたら,質問者の方から「BINGO!」というメールが届きました。
いわくスペインでは小数点の区切り記号(Decimal Symbolという)にカンマ(',')を使うことがあるそうで,Windowsの「地域のオプション」で「小数点の記号」をカンマから(英語式に)ピリオド('.')にしたら動いた,とのこと。
ほんまかいなと思いつつ,自分の環境で小数点記号を","にしてMobSyncを実行してみるると,確かに「'38xxx.xxx…' は浮動小数点ではありません」とのメッセージが出て起動しません。
へえー。いろいろあるんですね。何事も経験だなぁと妙に感心。

結局,Decimal symbolが","の場合はフォームを作成するときだけ一時的に
SetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_SDECIMAL, ".");
してやって(そしてこっそり再起動),フォーム作成後に元に戻してやることで解決。
今度のバージョンアップ時には入れ込むつもりです。日本のユーザの方にはほぼ関係ないお話ですが。
URL Comment(0) TrackBack(0) Tips

02-14-2006

W-ZERO3のバックアップツールの問題

興味深いレポートが以下にあります。
http://blog.goo.ne.jp/tabeni/e/61e549603924d0e1caef7bcbfe4d1162

当方の手元にWM5環境がないので,同様の試験をすることがかないません。PPC2003には「バックアップ」なるものはありません。たまたま当方デバイスにはiPAQが付属した「iPAQ Backup」というツールが購入時からインストールされています。(もちろんこれはここで問題になっているバックアップツールとは別物です。)このツールで同様のことを行なってみましたが同様のトラブルは発生しません。

ActiveSyncはPCのソフトウェアでもありますが,CE側のActiveSyncと連携を取ります。CE側でファイルが追加,更新,削除されるとその旨をPC側ActiveSyncに通知していると思われます。同期自身はPC側から行なっています。CE側でのActiveSyncが,どのようにファイルの変更通知をシステムから受け取っているかという問題があります。
ActiveSyncではPC/CEのいずれでもファイルを追加,更新,削除をするとただちに同期が開始されます。定期的にファイルのタイムスタンプなどをチェックにいくのではなく,いわゆるグローバルフックを使ってイベントとして通知を受け取っていることが想像されます。CEプログラミングについてはほとんど無知ですが,同様の手続きがあると思われます。
バックアップツールはリストア時に,(1)対象ファイル/フォルダを削除し,(2)復旧データを書き込むことをしていると思われます。(普通はわざわざ削除せず上書きしますが,リストアという性格上安全を期してそのようにしている可能性があるということです。)
この削除アクションは通常のCEファンクションで行うのでActiveSyncに通知されるが,書き込みアクションはアブノーマルな(フックにかからない)方法で書き込まれるためにActiveSyncに通知されない,というところにこのトラブルの原因があるのではないかと予想しています。
ActiveSyncはこの削除の通知にもとづいてPCのファイルを削除し,追加通知を受け取らないために同期の対象にのぼらない,ということではないでしょうか。
上記の通りだとすると,「犯人」はバックアップツールのリストア仕様,ActiveSyncの不完全なファイル把握ということになりますか。
…また,上記の通りだとするならMobSyncにおいては同様の問題は発生しないことになります。フック等を用いず,いちいちファイルサーチを介して情報を得ているからです。(更新チェックを定期的にしなければならない,更新チェック自身に時間がかかるといったマイナス要因もここから出ているのですが。)

しかし,これだけではレポートにある,片方にだけデータがある状態で,
デスクトップ PCのPocket PC My Documentsフォルダ内にファイルをコピーしても、同期するたびにデータは消去されます。
という現象の説明がつきません。
まだ検討が必要であるようです。
URL Comment(0) TrackBack(1) Tips

02-03-2006

タイムゾーンとWindowsCE

前項はだいぶ混乱しているので,試行の結果も含めまとめておこう。
タイムゾーンをまたいで移動した場合,デバイスとPC両方を正しくタイムゾーン設定を変更していても,場合によっては全データを同期し直す。
実際やってみると確かに全部片方から片方へコピーしてしまう。理由は以下。

ロンドンでPCに12時に書き込んだファイルがあるとする。
これの最終書き込み時刻(タイムスタンプ)は12時。
ここでPCのタイムゾーンを東京にする。そうすると最終書き込み時刻は21時になる。(エクスプローラで確認できる。)タイムゾーンをハワイにすれば2時。
いまこのときロンドンと東京で同時に別のPCにファイルを書いたとする。ロンドンのパソコンのタイムゾーンを東京にすれば東京のファイルと同一のタイムスタンプになる。

では,ロンドンでCEデバイスに12時に書き込んだファイルは? ロンドンではもちろん12時。デバイスのタイムゾーンを東京にしてみると…12時! ハワイにしても12時のまま!

なんたることだ!世界中どこへ行ってもロンドン時間(最後に書いた場所時間)から抜け出せない!

タイムゾーンをまたいだときにファイルの新旧判断でミスるのは,WindowsCEの時間管理のせいだった。これじゃActiveSyncも同期ミスするんじゃないかな。
これをMobSyncの方でちゃんとしようとすると,…そのファイルが書き換えられた時にどのタイムゾーンにいたかをMobSyncの方で記録しておくことになるのかな。悩ましい。以前からあったファイルはわかんないし…

なお,CEでタイムゾーンをいじると「スケジュールの時間を書き換えるけどいい?」と言われるんです。…。

当該のメールの返事には「PCのタイムゾーンをいじるのはやめたほうがいいですよ」と書かなくてはならないか。あ,でもデバイスとPCのタイムゾーンが違ってた場合,それこそスケジュールの同期とかはどうなっちゃうのかという不安も。

なおこれはActiveSync4.1 PocketPC 2003で確認。
URL Tips

02-02-2006

海外での使用

「タイムゾーンをまたいで移動した場合,デバイスとPC両方を正しくタイムゾーン設定を変更していても,場合によっては全データを同期し直す。」
というメールが(英語で)あった。
内部で使用している同期ログを吐き出すときに(扱いやすさから)システムタイムへ(さらにはTDateTimeへ)の変換をかけている?
ファイルタイムは全世界共通だが変換をかけると各タイムゾーン時間になってしまう。これを記録して次回の同期時に参照するのだから違ったタイムゾーンでは正しく前回記録を反映できなくなっている。
…と予想を立ててソースを見直してみたが,いや,ファイルタイムを記録していた。
とすると…??
いまこのとき日本で保存したファイルと,米国で保存したファイルではファイルタイムスタンプが違うのか?? …いや,そんなハズはない。
とするなら,内部で比較するときにシステムタイムへ変換しているので,そのときにPCとデバイスで違った動きをするのか? うーん。しょうがないのでサブマシンでタイムゾーンを変えて実験してみることに。
URL Comment(0) TrackBack(0) Tips



Doo Soft Labo
Powered by Seesaa
Seesaaブログ