ACFinder 121215 test 版

  • このフォーラムに新しいトピックを立てることはできません
  • このフォーラムではゲスト投稿が禁止されています
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2012.12.15 21:16
kabe  長老   投稿数: 231
121215test版をアップしました。
http://acfinder.kabe.info/

特に大きな不具合なければ、いったん、安定版として公開します。

120519 TEST版以降に農薬検索研究会掲示板にてテスト中の機能を含むフルセットテスト版です。

定型処理タブから SQL編集ボタン経由で SQLタブに移った場合、プログラム内部で処理対象タブが切り替わらない不具合を修正しました。

定型処理タブで複数作物を指定した状態で病害虫選択ダイアログを出すと作物名検索ができない不具合を修正しました。

病害虫タブの作物選択ダイアログに、作物名の並び順を変更する機能を付けました。ただし記憶しません。

作物名直接入力時の「でこぽん」の不具合は修正しています。
直接入力時の上位分類一括検索機能はまだです。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2012.12.16 11:36
kabe  長老   投稿数: 231
今回、自分の新しいパソコンで画面のスケーリングを変えてみて、初めてわかったのですが、スケーリングを拡大すると、ボタンが表示されない不具合ありますね。

基本的なことだったのかもしれないけど、どう対処したらよいのか。これからちょっとググります。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 .2 | 投稿日時 2012.12.16 17:10 | 最終変更
kabe  長老   投稿数: 231
121216test版に差し替えました。
http://acfinder.kabe.info/

遅くなりましたが、受信タイムアウト時間の設定機能を追加しました。機能しているかどうかは未確認です。

画面スケーリング時に、一部のダイアログでボタンが隠れる不具合を修正しました

5月末頃からテスト中でしたが、プロキシ認証サーバの接続設定機能を追加しています。インターネット接続にプロキシ認証が必要な環境の方は、試してみてください。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2012.12.16 22:27 | 最終変更
OhYeah!  管理人   投稿数: 983 オンライン
kabe さん、お疲れ様です。

121215test 版の修正点等については、正常に動作することを確認しました。121216test 版の受信タイムアウトについては、埼玉県庁 の DNS の問題なので、事務所で確認します。

ところで、基本設定のダイアログボックスですが、全てのタブで受信タイムアウトのテキストボックスとスピンボタンが表示されてしまいます。
それと、できれば Kingsoft Spreadsheets への出力にも対応していただけるとありがたいです。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2012.12.17 09:42 | 最終変更
OhYeah!  管理人   投稿数: 983 オンライン
最近は以前に比べていくらか改善されてはいますが、埼玉県庁の DNS サーバは、*.go.jp とか *.o-ya.net, acfinder.kabe.info にアクセスしようとすると DNS Timeout になってしまい、接続できないことが頻繁にあります(google.co.jp なんかもよくつながらなくなる)。ACFinder 起動時のファイル更新チェックで、FAMIC や macs.o-ya.net, acfinder.kabe.info のどれかが DNS Timeout になると、ACFinder が使えるようになるまでにかなり時間がかかります。
Regedit で HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ReceiveTimeout を設定すると、DNS Timeout 時のあきらめが早くなり、DNS が不調なときでも ACFinder の起動が速くなります。レジストリをいじるのはなるべく避けたいので、ACFinder 側に受信タイムアウトを Win32 API で設定する機能を追加してもらいました。

が、残念ながら今朝は DNS サーバが好調でなかなか Timeout になってくれず、受信タイムアウトの設定がうまく機能しているかどうかの判定ができません。
ただ、一度 macs.o-ya.net のデータを読む際に、ひとつだけレスポンスコードが返ってくる前に次のデータに進んでしまったことがあります。ひとつだけなので、DNS サーバの問題ではなく、若干レスポンスが悪かったために設定時間(500ms)を超えてしまったのだと思います。ということで、おそらく受信タイムアウトの設定は予定通りに動作していると思われます。
なお、上記の例のように 500ms では短すぎる可能性があるので、接続環境にもよりますが、1000~2000ms くらいで設定しておくのが良いでしょう。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2012.12.17 14:31 | 最終変更
kabe  長老   投稿数: 231
前から指摘されていたのですが、以下の点、修正できていません。

薬剤タブで 作物名に ○○(△△を除く)がある場合、薬剤のリストは検索されますが、薬剤別の適用が検索できない場合があります。

これ、作物候補への入力のしかたで検索されたりされなかったりします。

例えば
作物候補「やさいるい」で、薬剤リストが出ます。
ここで 野菜類(いちご、トマト、ミニトマトを除く)に登録のあるエコピタ液剤を選択すると検索できません。

しかし作物候補「野菜類」と入力すると検索可能です。
投票数:0 平均点:0.00

なし Re: ACFinder 121216 test 版

msg# 1.1.1.1.1.1
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2012.12.17 15:31
OhYeah!  管理人   投稿数: 983 オンライン
先ほど現地から帰ってきて ACFinder を起動したら、ちょうど macs.o-ya.net にアクセスできない状態になっていました。おかげで、受信タイムアウトが意図通りに動作していることが確認できました。

ACFinder の LOG は下記の通りで、macs.o-ya.net だけレスポンスヘッダが返ってきてないことが分かります(受信タイムアウトの場合は「304 Not Modified」のようなレスポンスヘッダが返ってこない)。この状態になると、従来なら ACFinder の起動が完了するまでにかなり時間がかかりますが、受信タイムアウトを 1000ms に設定してあったので、ACFinder が使えるようになるまでにあまり時間はかかりませんでした。
データ更新チェック FAMIC CSV データ
http://www.acis.famic.go.jp/ddata/index2.html
304 Not Modified
acis.db open
spec.db Attach
http://macs.o-ya.net/data/spec.bunrui.txt
 
http://macs.o-ya.net/data/spec.seizai.txt
 
http://macs.o-ya.net/data/spec.dokusei.txt
 
http://macs.o-ya.net/data/spec.ryutsu.txt
 
http://macs.o-ya.net/data/spec.idshurui.txt
 
http://acfinder.kabe.info/data/spec.iso.txt
304 Not Modified
http://macs.o-ya.net/data/sakumotsu.txt
 
http://macs.o-ya.net/data/byochu.txt
 

レジストリの設定は削除してあったので、ブラウザで macs.o-ya.net にアクセスしようとすると、下記のエラーが出るまでにかなり時間がかかりました。
The requested URL could not be retrieved

While trying to retrieve the URL: http://macs.o-ya.net/

The following error was encountered:

    Unable to determine IP address from host name for macs.o-ya.net 

The dnsserver returned:

    Timeout 

This means that:

 The cache was not able to resolve the hostname presented in the URL. 
 Check if the address is correct. 
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2012.12.17 21:39
OhYeah!  管理人   投稿数: 983 オンライン
ttYakuzai に JOIN する作物マスターを、sakumotsu ではなく m_sakumotsu にしてください。sakumotsu テーブルは作物選択ダイアログボックス用なので、「(○○を除く)」という作物名は全て削除されています。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2012.12.17 23:18
kabe  長老   投稿数: 231
了解です。

修正中です。
http://acfinder.kabe.info/acfinder121217test_exe.zip

Kingsoft ss 出力機能確認お願いします。
クリップボードに貼り付けてコピーするだけです。

作物名検索の前後処理をいじっているので、変なところあるかもです。
作物タブの作物名完全一致チェックボックスは消しています。
作物選択ダイアログから検索した場合は前方一致検索としています。

非結球あぶらな科葉菜類 と直接入力すると検索できません。

投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2012.12.17 23:51
OhYeah!  管理人   投稿数: 983 オンライン
kabe さん、お疲れ様です。

基本設定ダイアログボックスと薬剤タブの件は、修正されていることを確認しました。
Kingsoft Spreadsheet についても、自動的に起動されてデータが転送できることを確認しました。起動するソフト名が異なるだけで、Excel と同じ方法で転送可能なのではないかと思います。それでうまくいけば、HTML 出力からの Kingsoft Spreadsheets への出力についても追加をお願いします。

引用:非結球あぶらな科葉菜類 と直接入力すると検索できません。あ~、「非結球」を前処理で「ひけつきゆう」に変換しているせいですね。後に「はくさい」が続く「非結球」「半結球」のみひらがなに変換するのが良さそうです。
  $str = str_replace('非結球はくさい', 'ひけつきゆうはくさい', $str);
  $str = str_replace('半結球はくさい', 'はんけつきゆうはくさい', $str);
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2012.12.18 07:16
kabe  長老   投稿数: 231
修正中です。
http://acfinder.kabe.info/acfinder121218test_exe.zip

kingsoft HTML 出力付けてみました。

作物タブ 作物名直接入力で
非結球あぶらな科葉菜類
食用金魚草
が検索できなかった不具合を修正しています。

投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2012.12.18 09:57 | 最終変更
OhYeah!  管理人   投稿数: 983 オンライン
HTML 出力画面からの Kingsoft Spreadsheets への転送もバッチリでした。

ひとつ気になっているのが、かな入力した場合などの「るい」を「(るい)?」に変換していないので、たとえば作物タブなどで「野菜類」と「やさいるい」で検索した場合、検索数が異なります。「るい(\(|$)」の時に「(るい)?\1」にリプレースする必要があります。
今更気がついても遅いんですが、かな漢字変換辞書を使っていたときのように、最初に入力キーワードを sakumotsu/byochu テーブルの betsumei フィールドから検索して、登録上の作物名/病害虫名に変換するようにすれば良かったですね。これなら、他の部分を全く書き換える必要が無かったのに。今からこれに戻すとなると、結構大手術ですかねえ?

いずれにしても、どちらかで修正すれば、安定版としてリリースして良いんじゃないかと思います。
投票数:0 平均点:0.00

なし Re: ACFinder 121218 test 版 exe のみ

msg# 1.1.1.2.1.1.1.1.1.1
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2012.12.18 11:15
kabe  長老   投稿数: 231
作物名の直接入力とダイアログ選択で結果が異なります。
野菜類 直接入力 343 ダイアログ 335

ダイアログ経由だと次が出ません。
果樹、野菜等の薬液のつきやすい作物
果樹、野菜等で薬液のつきやすい作物
果樹、野菜等で薬剤のつきやすい作物

違いは以下です。
ダイアログ経由
REGEXP '(^|、|\()(野菜(類)?)([\(\)]|、|$)'
直接入力
REGEXP '(^|、|\()(野菜(類)?).*?(\)|、|$)'

なんでこうしたのか、不明ですが、コードをいじると副作用がこわくてここは以前のままにしています。
あえて分けなくても、とりあえずは直接入力パターンの方で統一しても支障ないのかな。

これだと なばな類 で検索した時に
ダイアログ経由だと
なばな類(なばなを除く)
が出てきません。

おそらく他にもたくさんあると思われます。

根本的には、作物コードから上位下位を判断して検索する方法に変更しないといけないのですね。


投票数:0 平均点:0.00

なし Re: ACFinder 121218 test 版 exe のみ

msg# 1.1.1.2.1.1.1.1.1.1.1
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2012.12.18 17:04 | 最終変更
OhYeah!  管理人   投稿数: 983 オンライン
引用:なんでこうしたのか、不明ですが、コードをいじると副作用がこわくてここは以前のままにしています。
あえて分けなくても、とりあえずは直接入力パターンの方で統一しても支障ないのかな。
う~ん、何ででしょうねえ…。とりあえず直接入力の時だけ変更して動作確認し、ダイアログ経由の方は修正し忘れてたとか?
直接入力パターンは、もしかすると複数作物指定で何らかの問題が出るのかもと思って直接手入力で「きゅうり,うり科野菜,野菜類」と入力してみましたが、特に問題はありませんでした。直接入力パターンで統一しても行けそうです。

引用:根本的には、作物コードから上位下位を判断して検索する方法に変更しないといけないのですね。この場合、展着剤・くん蒸剤等の対象作物が大分類「その他」に分類されている作物に登録されている農薬は検索できないですけどね。まあ、展着剤等は薬剤タブとか病害虫タブで検索すれば良いし、登録農薬が多い作物では作物タブや定型処理タブで検索されてこない方が返ってありがたいってこともあります。現状の方法でも「○○が加害する農作物」のようなコンフューザや誘引剤関係の作物名は拾ってないですし。
携帯農薬検索システムの「作物名からの検索」では、この辺は割り切って展着剤関係の作物名は候補として検索しないようにしています。「薬剤名等からの検索」と「病害虫名等から検索」も実装したので、作物名からの検索からコンフューザ・誘引剤関係の作物名候補を削除しようかと考えています。
ちなみに、展着剤関係の作物名を拾ってこなくて良いなら、現在の作物名指定方法でも検索パターンはもう少しシンプルにできます。「類」「るい」を「(類)?」「(るい)?」に変更する必要もなくなります。

現在の検索方法の難点は、前方一致で検索しているため、「ねぎ」で検索すると「ねぎ(本畑)」とか「ねぎ(露地栽培)」に登録されている農薬は検索できても、「根深ねぎ」「葉ねぎ」に登録されている農薬は検索できないところです。携帯農薬検索システムでは「ねぎ」を指定した場合は、ねぎの下位分類で登録されている作物の農薬も全て検索します。
投票数:0 平均点:0.00

なし ACFinder 121218 test2 版 exe のみ

msg# 1.1.1.2.1.1.1.1.1.1.1.1
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2012.12.18 22:11
kabe  長老   投稿数: 231
修正中です。
http://acfinder.kabe.info/acfinder121218test2_exe.zip

作物名直接入力時もダイアログ選択時も同じ動作としています。

「ねぎ」の場合、根深ねぎ と 葉ねぎ も検索します。
「スイートコーン」で「とうもろこし」も検索します。

作物名直接入力で、複数のスペースが入った場合、空文字列の作物名ができてしまい、大量の検索結果が返ってくる不具合を修正しました。
投票数:0 平均点:0.00

なし Re: ACFinder 121218 test2 版 exe のみ

msg# 1.1.1.2.1.1.1.1.1.1.1.1.1
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2012.12.20 14:43 | 最終変更
OhYeah!  管理人   投稿数: 983 オンライン
引用:「ねぎ」の場合、根深ねぎ と 葉ねぎ も検索します。
「スイートコーン」で「とうもろこし」も検索します。
今回は「ねぎ」と「未成熟とうもろこし」だけの例外処理でしょうか? 「直播水稲」なんかも頭に「乾田」「湛水」が付くものがあり、これらを全て例外処理で拾い上げるのはかなり厳しいような気がします。
かといって、部分一致で検索して「ミニトマト」と「トマト」とか「くり」と「クリサンセマム」のようなケースだけ例外処理にするのもかなり労力がかかりそうです。
ということで、やはり作物 ID から上位/下位作物を拾い出すのが最も現実的な解ではないかと…。

それはそうと、作物選択ダイアログボックス用作物マスター sakumotsu にも、下記と同じ原因によるバグがありました。「とうもろこし」の直下に「ひえ」があったので気がつきました。現在は修正済みです。
http://www.o-ya.net/modules/d3diary/index.php?page=detail&bid=41&req_uid=1
投票数:0 平均点:0.00

なし Re: ACFinder 121218 test2 版 exe のみ

msg# 1.1.1.2.1.1.1.1.1.1.1.1.1.1
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2012.12.21 17:21
OhYeah!  管理人   投稿数: 983 オンライン
携帯農薬検索システムの作物 ID からの上位/下位作物検索クエリー作成ルーチンの抜粋です。
$cid に指定作物の idsaku、$level に指定作物の level を設定しています。指定作物が小分類まで(level <= 2)及び栽培条件付作物名(level == 4)の場合は、指定作物より上位方向のみ検索します。指定作物が作物名(level == 3) の場合は、上位下位全てを検索します。

  $cid = $crops[$cno]['idsaku'];
  $cid2 = substr($cid, 0, 8);
  $level = $crops[$cno]['level'];
  $cond = _concat('|', substr($cid, 0, 2)."000000", substr($cid, 0, 4)."0000", substr($cid, 0, 6)."00");
  if ($level == 3) $cond = _concat('|', $cond, "{$cid2}");
  if ($level == 4) {
    $cond = preg_replace("/(~|\|){$cid2}/", '', $cond);
    $cond = _concat('|', $cond, "{$cid2}00", $cid);
  }
  $db = dbOpen();
  $except = _concat('|', substr($cid, 0, 4)."000000", substr($cid, 0, 6)."0000", "{$cid2}00");
  $sql = "select concat('|', sakumotsu) from sakumotsu where idsaku regexp '$except'";
  $res = $db->query($sql);
  if (!$res) sqlerror($sql, $db);
  $except = $res->fetchColumn(0);
  dbCloseStatement($res);
  dbClose($db);
  $except = '\((.*、)?('.str_replace(array('(', ')', '[', ']'), array('\(?', '\)?', '\[?', '\]?'), $except).')(、.*)?を除く';
  $crop = $crops[$cno]['sakumotsu'];
  if (strpos($crop, '露地') !== false) $except .= '|施設|水耕';
  if (strpos($crop, '施設') !== false) $except .= '|露地';
  if (strpos($crop, '水耕') !== false) $except .= '|露地';
  $cond = "select sakumotsu from m_sakumotsu where idsaku regexp '^($cond)' and sakumotsu not regexp '$except'";
"{$cid2}00" のように、ダブルクォート内で大括弧({})に囲まれた変数は、変数の値がそのまま文字列展開されます。たとえば、$cid2 の値が '02010013' の場合は、"0201001300" と展開されます。
4行目の _concat は、ACFinder 用 SQLite の拡張 concat 関数と同じ働きをする関数です。たとえば $cid が '0200000000' の場合、3パターンの文字列が全て同じ値になるため、結合結果は '0200000000' となります。
投票数:0 平均点:0.00

  条件検索へ