Laboratory of Mobile Agricultural Chemicals Searcher
携帯農薬検索実験室

研究会

  ツリー表示 ┃スレッド表示 ┃一覧表示 ┃トピック表示 ┃番号順表示 ┃検索  
31 / 54 ページ <前へ | 次へ>

〔463〕ACFinder 060828版
 kabe WEB  (06/08/28 23:07)

引用なし
   kabeです。

060828版です。
http://acfinder.kabe.info/
修正内容はACFinderサイトを参照してください。

プログラム内部で使用している SQLite用の Delphi ライブラリを Hidemi Oya さん作成のものに変更しました。
ライブラリは追って Hidemi Oya さんのサイトで公開される(?)ものと思いますが、Delphi で SQLiteを扱うにはとても便利です。
ACFinder がアプリケーション第1号かな。

なお今回のバージョンですが、起動時のデータ更新チェック機能にバグがあります。
今まで、私の手抜きで、「2006年8月16日登録反映」などの登録更新情報部分のみ Shift-JIS でデータベースに保存していました。
060828版では全てのデータを UTF16で扱いますが、Shift-JISのデータを読むと文字化けするため、新しいデータがあると勘違いしてデータ更新を促します。
数日中に8/28登録反映データが更新されると思いますので、その際にデータ更新を行うと直りますが、気になる場合は、手動で XLS->データベース更新を1回実行してください。
・ツリー全体表示

〔462〕Re:ACFinder 060820版
 Hidemi Oya WEB  (06/08/20 22:27)

引用なし
   kabe さん、こん**は。Hidemi Oya です。

 060820 版は未使用ですが、[#448]
>メインフォームの Createイベントの最後で、データ更新機能を動かすようにしており、データ更新はしているのですが、メモリリークが出たりでまだ実用になりそうもありません。
に関して…。Sample1 のように、メインフォーム OnCreate イベントの最初で Application.Terminate を実行してもメモリリークが発生しますか?
 もし発生するなら、Sample2 はどうでしょう?

----- Sample1 -----
-- sample1.dpr --
program sample1;

uses
 Forms,
 Main in 'Main.pas' {frmMain};

{$R *.res}

begin
 Application.Initialize;
 Application.CreateForm(TfrmMain, frmMain);
 Application.Run;
end.

-- Main.pas --
unit Main;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs;

type
 TfrmMain = class(TForm)
  procedure FormCreate(Sender: TObject);
 private { Private 宣言 }
 public { Public 宣言 }
 end;

function UpdateOnly: boolean;

var
 frmMain: TfrmMain;

implementation

{$R *.dfm}

uses
 Sub;

function UpdateOnly: boolean;
var
 i: integer;
begin
 Result := false;
 for i := 1 To ParamCount do begin
  Result := AnsiSameText(ParamStr(i), '/U');
  if Result then break;
 end;
end;

procedure TfrmMain.FormCreate(Sender: TObject);
begin
 if IsUpdated then
  with TfrmSub.Create(Self) do begin
   ShowModal;
   Release;
  end;
 if UpdateOnly then begin
  Application.Terminate;
  Exit;
 end;
 // 本来のメインフォーム OnCreate イベントハンドラ
end;

end.

-- Sub.pas --
unit Sub;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;

type
 TfrmSub = class(TForm)
 private { Private 宣言 }
 public { Public 宣言 }
 end;

function IsUpdated: boolean;

var
 frmSub: TfrmSub;

implementation

{$R *.dfm}

function IsUpdated: boolean;
begin
 Result := true; // 本来はアップデートされているかどうかを返す
end;

end.

----- Sample2 -----
-- sample2.dpr --
program sample2;

uses
 Forms,
 Main in 'Main.pas' {frmMain},
 Sub in 'Sub.pas' {frmSub};

{$R *.res}

begin
 Application.Initialize;
 if IsUpdated then
  with TfrmSub.Create(nil) do begin
   ShowModal;
   Release;
  end;
 if UpdateOnly then
  Application.Terminate // これは不要かも
 else begin
  Application.CreateForm(TfrmMain, frmMain);
  Application.Run;
 end;
end.

-- Main.pas --
unit Main;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs;

type
 TfrmMain = class(TForm)
  procedure FormCreate(Sender: TObject);
 private { Private 宣言 }
 public { Public 宣言 }
 end;

function UpdateOnly: boolean;

var
 frmMain: TfrmMain;

implementation

{$R *.dfm}

uses
 Sub;

function UpdateOnly: boolean;
var
 i: integer;
begin
 Result := false;
 for i := 1 To ParamCount do begin
  Result := AnsiSameText(ParamStr(i), '/U');
  if Result then break;
 end;
end;

procedure TfrmMain.FormCreate(Sender: TObject);
begin
 // メインフォーム OnCreate イベントハンドラ
end;

end.

-- Sub.pas --
unit Sub;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;

type
 TfrmSub = class(TForm)
 private { Private 宣言 }
 public { Public 宣言 }
 end;

function IsUpdated: boolean;

var
 frmSub: TfrmSub;

implementation

{$R *.dfm}

function IsUpdated: boolean;
begin
 Result := true; // 本来はアップデートされているかどうかを返す
end;

end.
・ツリー全体表示

〔461〕ACFinder 060820版
 kabe WEB  (06/08/20 21:43)

引用なし
   kabeです。

060820版です。
http://acfinder.kabe.info/

データ更新専用起動オプションを付けてみました。
acfinder /u で更新のみ実行します。
完全に裏で動かす方法がわからず、フォームを最小化して実行しています。
そのため最小化したフォームがデスクトップの片隅に、アイコンがタスクバーに現れます。更新が終わると勝手に消えます。
更新専用で起動し、更新を実行した場合、データベースフォルダに update.log を作成します。

LAN内の共有フォルダからデーターベースファイルをコピーしてくる機能を付けました。
設定>基本設定>接続タブ で
「LAN内の共有フォルダからデーターベースファイルをコピーする」をチェックし、共有フォルダ名を設定しておくと、農薬検査所サイトにはアクセスせず、起動時に共有フォルダのデータベースをチェックして更新があれば自分のPCにコピーします。
この機能が有効であっても、ツールバーの「データ更新」は従来どおりです。

一応、うちの家庭内LAN環境で動作確認していますが、今回の追加機能に関しては想定どおりに動作するという自信がありません。(^^;
動作実験にご協力お願いします。
・ツリー全体表示

〔460〕Re:速い速い(^_^)
 Hidemi Oya WEB  (06/08/19 14:22)

引用なし
   kabe さん、こん**は。Hidemi Oya です。

>30MBのデータベースファイルをコピーして終わり、と
>5MBのlzhファイルをダウンロードして解凍、変換作業を行うか、
>どちらがよろしいでしょうか。
 11Mbps の無線 LAN で実効転送レートが 500KB/sec として、30000KB の転送に 60 秒です。有線 100Mbps なら、実効転送レートがたとえ 3MB/sec だとしても 10 秒ですね。ダウンロードからデータベース変換のトータル速度を考えると、一般的な環境では、おそらく acis.db の転送がもっとも高速に処理できそうです。

 更新プログラムの変更が必要ですが、もし薬検が CSV で提供してくれるならば、解凍後の CSV ファイルを転送するという手もあります。
 CSV + ZIP は、ナローバンドで ACFinder を使う場合はもちろんのこと、レンタルサーバでもタイムアウトになる前に解凍とデータベースへの変換が可能になるので、新たな展開も見込めます。薬検にはぜひ対応してもらいたいところですね。
 薬検が対応してくれないなら、農薬ナビのサーバは Windows 系だったはずなので、lzh の解凍と xls->csv 変換を行うソフトを AT コマンドで定期的に実行して、それを web 上で公開してもらうことは可能かもしれません。菅原さんとの相談になりますが、もしこれが出来るようなら、データソースをそちらに変更する方向もありですね。
・ツリー全体表示

〔459〕Re:速い速い(^_^)
 kabe WEB  (06/08/19 10:45)

引用なし
   >Hidemi Oyaさん

>>(2) ファイルサーバから xls ファイルをダウンロード
>xlsファイルの日付で更新の有無を判断できるので、この方がいいかもしれません。
xlsファイルだと23MBくらいあるので、これだと直接データベースファイルをコピーした方がいいですね。

30MBのデータベースファイルをコピーして終わり、と
5MBのlzhファイルをダウンロードして解凍、変換作業を行うか、
どちらがよろしいでしょうか。
・ツリー全体表示

〔458〕Re:ACFinder 060818版
 Hidemi Oya WEB  (06/08/18 13:05)

引用なし
   kabe さん、こん**は。Hidemi Oya です。

 素早い対応に感謝です。うちの事務所では、全員(といっても 12 人しかいませんが) ACFinder を使っているので、今朝早速みんなにアップデートしてもらいました。
 全員使っているので、ファイルサーバに解凍した最新版を入れておき、アップデート用のバッチファイルで必要なファイルだけアップデートできるようにしてあります。バッチファイルは、HTML ファイルのリンクで起動できるようにしてあるので、私がメールでアップデート用の HTML ファイルの URL を知らせて、ユーザはそれを起動してアップデートのリンクをクリックするだけでアップデートできます。

>データ更新を知らせるダイアログで「はい」を押して更新を行った場合、終了すると自動的に更新ダイアログを閉じるようにしました。
>(不評であれば元に戻します)
 いや、いちいち閉じるのは面倒なので、自動的に閉じるようにして欲しいという要望をそのうち出そうと思ってました。自動アップデートは自動で閉じる、手動アップデートは手動で閉じるってのが一貫してて良いですね。
・ツリー全体表示

〔457〕Re:'c' オプションが誤動作の元
 Hidemi Oya WEB  (06/08/18 12:54)

引用なし
   kabe さん、こん**は。Hidemi Oya です。

>やはり、文字化けでしたか。
>早速、修正いただきありがとうございます。
 とりあえずの修正でしたが、ACFinder では関係ないものの \s, \w 等の小文字系メタキャラクタが使えないのはちょっと失敗でした(^_^;)。[^\S], [^\W] で代用する手はありますが、それなら \S, \W 等の大文字系メタキャラクタを使えなくして、[\^s], [^\w] で代用した方が分かりやすいですね。
 'w' オプションがらみの制約を自動的に回避する仕組みも実装しておかないと使いにくいので、次のバージョンで併せて修正します。

>match と regexp 演算子が使えるのは、SQLiteを利用するデスクトップアプリケーションではもしかしたら、日本初(世界初?)かもしれませんね。
 match は 8/12 に仕組みが作られたばかりですし、処理内容はユーザに委ねられているので、おそらく Perl/PHP/Ruby 等のライブラリもまだ対応してないと思います。ウェブアプリを含めても世界初かも?
・ツリー全体表示

〔456〕Re:'c' オプションが誤動作の元
 kabe WEB  (06/08/18 2:00)

引用なし
   >Hidemi Oyaさん

kabe です。

>SQLite でフィールド名やエリアスに日本語が使えないのと根っこは同じで、UTF-8 といえども、大文字/小文字変換が入ると文字化けを起こすようです。
やはり、文字化けでしたか。
早速、修正いただきありがとうございます。

match と regexp 演算子が使えるのは、SQLiteを利用するデスクトップアプリケーションではもしかしたら、日本初(世界初?)かもしれませんね。
(そんなソフトがあるかどうか知りませんが)
SQLiteSpyでも 3.3.6ベースなので、まだ match は演算子としては使えないようです。regexpも、全角、半角、ひらがな、カタカナの区別なしはできないので、ACFinderの機能は強力です。

いやいや、それにしてもHidemi Oyaさんのおかげで私の当初の想定以上にものすごく高機能なソフトになってきました。
最近PCが不調なのでソースだけは無くさないようにしないと・・・・
・ツリー全体表示

〔455〕ACFinder 060818版
 kabe WEB  (06/08/18 1:37)

引用なし
   kabeです。

修正しました。
http://acfinder.kabe.info/

2006年8月16日登録反映分の登録基本部のデータ変更に対応しました。
従来のACFinder側で作成していた「有効成分の種類」(seibunフィールド)は、Excelデータの「総使用回数における有効成分」をそのまま利用します。
検索結果で表示される日本語の列名は今までの「一般名」を「有効成分」に、「有効成分の種類」を「総使用回数における有効成分」と表示するよう修正しました。
なお、データベースのフィールド名は変えていません。

[#452][#453]
Hidemi Oya さんより regexp演算子の不具合を修正していただきました。

[#451]
>meisho||shurui MATCH '%pattern%'
に変更してみました。

データ更新を知らせるダイアログで「はい」を押して更新を行った場合、終了すると自動的に更新ダイアログを閉じるようにしました。
(不評であれば元に戻します)
・ツリー全体表示

〔454〕2006年8月16日登録反映分はデータ更新不可
 kabe WEB  (06/08/18 0:39)

引用なし
   2006年8月16日登録反映分ですが、登録基本部の項目数が増えたためACFinderでのデータ更新中にエラーが発生します。
修正までお待ちください。

今までの「一般名」が「有効成分」に、これとは別に「総使用回数における有効成分」が付いています。
・ツリー全体表示

〔453〕'c' オプションが誤動作の元
 Hidemi Oya WEB  (06/08/18 0:39)

引用なし
   kabe さん、こん**は。Hidemi Oya です。

 私も意図通りに動作しないことを確認して、調査していたところです。原因は、'c' オプションですね。SQLite でフィールド名やエリアスに日本語が使えないのと根っこは同じで、UTF-8 といえども、大文字/小文字変換が入ると文字化けを起こすようです。
 で、大文字/小文字同一視を TPerlRegEx の preCaseLess オプションに任せず、match と同様に一端 SJIS に戻して LCMapString で小文字->大文字変換するように修正したら大丈夫でした。
・ツリー全体表示

〔452〕Re:ACFinder 060817test版
 kabe WEB  (06/08/17 23:48)

引用なし
   kabe です。

regexp の方がどうも正しく動作していないようです。
単純な作物名そのものの指定でも、例えば"トマト"、"メロン"はダメです。
"きゅうり"、"すいか"はOKです。
・ツリー全体表示

〔451〕Re:ACFinder 060817test版
 Hidemi Oya WEB  (06/08/17 17:31)

引用なし
   kabe さん、こん**は。Hidemi Oya です。

>SQL文で Like演算子の代わりに macth や regexp(正規表現) が使えます。
>詳しい使い方は Hidemi Oya さんより解説お願いします。
 っていうことなので、ACFinder サイトの拡張 SQL のページに入れておきました。

>病害虫タブの病害虫名と、薬剤タブの薬剤候補検索に match 演算子を使うように修正しています。
 薬剤候補検索ですが、現在の
meisho MATCH '%pattern%' OR shurui MATCH '%pattern%'
だと、1レコードあたり文字列正規化4回(フィールドデータとパターンデータの両方を正規化しますから)とパターンマッチング2回の実行になります。ACFinder サイトの SQL の小技に書いた
meisho||shurui MATCH '%pattern%'
なら文字列正規化2回、パターンマッチング1回の実行ですむので、こちらの方が高速に検索できる可能性があります(|| 演算子の実行速度が MATCH 演算子の実行速度より速ければですけど)。
 ま、LIKE と MATCH すら体感差はないので、後者にしてもほとんど効果はないでしょうけどね(^_^;)。
・ツリー全体表示

〔450〕Re:UrlDownloadToFile … が見えない
 Hidemi Oya WEB  (06/08/17 17:10)

引用なし
   kabe さん、こん**は。Hidemi Oya です。

>というか、標準で UrlDownloadToFileを使用するようにしたのでチェックボックスは無くしました。
 なるほど、了解です。ACFinder のサイトのインストールページの方が直ってなかったんですね。
・ツリー全体表示

〔449〕ACFinder 060817test版
 kabe WEB  (06/08/17 13:12)

引用なし
   kabe です。

060817テストバージョンです。
http://acfinder.kabe.info/

Hidemi Oya さんより match regexp 演算子に対応したクラスを作成していただきました。
SQL文で Like演算子の代わりに macth や regexp(正規表現) が使えます。
詳しい使い方は Hidemi Oya さんより解説お願いします。

macth演算子の方は、うまく動いているようですが、regexp の方が正しく動作しているかどうか不明です。
私は正規表現自体がよくわからないので動作確認お願いします。

病害虫タブの病害虫名と、薬剤タブの薬剤候補検索に match 演算子を使うように修正しています。
・ツリー全体表示

〔448〕Re:速い速い(^_^)
 kabe WEB  (06/08/17 10:55)

引用なし
   >Hidemi Oyaさん

> ファイルサーバ側で動作する ACFinder のために、データ更新オンリーの起動オプションを付加する。クライアント側はダウンロード先を指定できるようにして、次のどちらかで実装する。…というのでどうでしょうか?
URLを指定するだけでOKならそのようにしてみます。
ただデータ更新専用オプション機能は現在作成中なんですが、まだうまく動かせずにいます。メインフォームの Createイベントの最後で、データ更新機能を動かすようにしており、データ更新はしているのですが、メモリリークが出たりでまだ実用になりそうもありません。
更新専用の場合はメインフォームを起動する必要もないので、プロジェクトソースの段階で起動パラメータを判断するなど何かうまい処理方法あるのでしょうか。

>(2) ファイルサーバから xls ファイルをダウンロード
xlsファイルの日付で更新の有無を判断できるので、この方がいいかもしれません。
・ツリー全体表示

〔447〕Re:UrlDownloadToFile … が見えない
 kabe WEB  (06/08/17 10:28)

引用なし
   >Hidemi Oyaさん

kabe です。

> 060815 版からだと思いますが、設定(C)->基本設定(O)の接続タブで、「UrlDownloadToFileを使用してダウンロード」が見えなくなってしまいました。
というか、標準で UrlDownloadToFileを使用するようにしたのでチェックボックスは無くしました。
「プロキシサーバを経由する」が、チェックされていれば、Indy でアクセスします。
この場合、明示的にプロキシサーバ名の設定が必要です。
・ツリー全体表示

〔446〕UrlDownloadToFile … が見えない
 Hidemi Oya WEB  (06/08/17 9:32)

引用なし
   kabe さん、こん**は。Hidemi Oya です。

 060815 版からだと思いますが、設定(C)->基本設定(O)の接続タブで、「UrlDownloadToFileを使用してダウンロード」が見えなくなってしまいました。ご確認ください。
 ついでに、「UrlDownloadToFileを使用してダウンロード」だと分かりにくいので、「IE標準機能でダウンロード」でどうでしょう?
・ツリー全体表示

〔445〕Re:速い速い(^_^)
 Hidemi Oya WEB  (06/08/17 9:07)

引用なし
   kabe さん、こん**は。Hidemi Oya です。

> 事務所のノート PC では、今まで「xls->acis.db 変換」が 110 秒程度だったのが、私のサンプルで 47〜48 秒でしたから、今回の ACFinder なら 40 秒を切れるかな…。
 試してみたら、「xls->acis.db 変換」が 38 秒、データベース更新時間全体で 48 秒でした。「xls->acis.db 変換」に関しては、自宅マシンと同様に 65 %の削減ですね。

 で、「xls->acis.db 変換」がこれだけ速くなると、ファイルサーバにあるデータベースファイルを共有する意味はほとんどなくなりましたね。検索速度もローカルデータの方が高速ですし。
 ただ、農薬検査所のサーバ負荷を高くしないために、元データはファイルサーバのみでダウンロードし、それを各クライアントが利用するというのが最も良さそうに思えます。まだ確認していませんが、TURLDownload なら、インターネット上のファイルだけでなく、LAN 上のファイルサーバ上のファイルもダウンロード可能なはずなので、URL を変更するだけで実装可能かもしれません。データベース更新は各クライアントで行うので、更新のコンフリクトを気にする必要もなくなります。

 ファイルサーバ側で動作する ACFinder のために、データ更新オンリーの起動オプションを付加する。クライアント側はダウンロード先を指定できるようにして、次のどちらかで実装する。…というのでどうでしょうか?
(1) ファイルサーバから lzh ファイルをダウンロード
 ダウンロード先 URL を変えるだけでおそらく実装可能
 ファイルサーバからのダウンロードサイズが小さい
 クライアント側に UNLHA32.DLL が必要
(2) ファイルサーバから xls ファイルをダウンロード
 データ更新プログラムの若干の修正が必要
 ファイルサーバからのダウンロードサイズが大きい
 クライアント側に UNLHA32.DLL が不要
・ツリー全体表示

〔444〕Re:農薬登録情報ダウンロードへの要望を!
 Hidemi Oya WEB  (06/08/16 0:20)

引用なし
    ACFinder 060815 版で、ACFinder 側のデータ更新速度は非常に速くなりました。しかし、せっかく ACFinder 側が速くなっても、農薬検査所の提供してくれるデータサイズが小さくならないことには、データのダウロード速度の短縮はできません。
 現状では5つの lzh ファイルで合計 5MB もあります。ブロードバンドならほんの数秒ですが、農協の支店など ISDN しか来ていないようなところでダウンロードするとフルスピードの 8KB/sec でダウンロードできたとしても 10 分以上(一般的な条件では 15 分程度)かかってしまいます。これでは、とても実用的とはいえません。
 データを Excel 形式のファイルではなく、CSV 形式のファイルにして、5つまとめて zip 圧縮すると 1.1MB 程度にまでファイルサイズを削減できます。これなら ISDN の一般的な条件でも3分くらいでダウンロードできますから、なんとか我慢どころです。

 ACFinder を使いたい、あるいは使ってもらいたい純農業地帯ほど、ADSL は NTT 局舎から遠すぎて使えないとか、光はまだ来ないといった状況で、ブロードバンド環境は整備されていません。てなわけで、皆さん、是非 [#411] の要望を農薬検査所に送ってくださるようお願いします。
・ツリー全体表示

  ツリー表示 ┃スレッド表示 ┃一覧表示 ┃トピック表示 ┃番号順表示 ┃検索  
31 / 54 ページ <前へ | 次へ>
ページ:  ┃  記事番号:   
(SS)C-BOARD vv3.8 is Free.