2014年10月17日金曜日

accessのテーブルリンクをモジュールで変更する方法(覚え書き)

ネットの情報を参考に、accessのテーブルリンクをモジュールを使って
変更する方法を考えてみた


Sub HenkoLink(path, tbname)
Dim db As DAO.Database, tb As DAO.TableDef
    Set db = CurrentDb
    Set tb = db.TableDefs(tbname)
    tb.Connect = ";DATABASE=" + path + ";TABLE=" + tbname + ";pwd=****"
    tb.RefreshLink
End Sub

Sub LinkHenkoMacro()
pathd = InputBox("path=\\***\")

'テーブル数が多いときは配列で
Dim tbname(15), dm As String
tbname(1) = "テーブル1"
tbname(2) = "テーブル2"
tbname(3) = "テーブル3"

For i = 1 To 3
 Call HenkoLink(pathd + "test1.mdb", tbname(i))
Next i

'配列使わず、ひとつずつやるなら
Call HenkoLink(pathd + "test2.mdb", "テーブル4")


End Sub


2014年10月6日月曜日

プログラミングHaskell P143 exprs関数について

P143 exprs関数の適用についても、少しくわしく考えてみた。
(途中の式表現は、正しい表現と言えないところもありかも...)

exprs ::[Int]->[Expr]
exprs [] = []
exprs [n]=[Val n]
exprs ns = [e | (ls,rs) <-split ns,  l  <- exprs ls,  r  <- exprs rs,    e <- combine l r ]

combine :: Expr -> Expr -> [Expr]
combine l r = [App o l r | o<- ops]

ops  :: [Op]
ops =[Add,Sub,Mul,Div]

exprs [1,2,3]=[e| (ls,rs) <-split [1,2,3],  l  <- exprs ls,  r  <- exprs rs, e <- combine l r ]
  (ls,rs) <-split [1,2,3]は、次の2とおり
([1],[2,3])           ([1,2],[3])
ひとつめで l  <- exprs ls,  r  <- exprs rs,  e <- combine l r を考えて
  exprs ls=exprs [1]=[Val 1]  
exprs rs=exprs [2,3]= [e | (ls,rs) <-split [2,3],  l  <- exprs ls,  r  <- exprs rs,    e <- combine l r ]
= [e |([2,],[3]),  l  <- exprs [2],  r  <- exprs [3],    e <- combine l r ]
= [e |([2,],[3]), [Val 2], [Val 3],    e <- combine [Val 2] [Val3] ]
=[App Add (Val2) (Val3),App Sub …..4種類の演算]

[Val 1]と[App Add (Val2) (Val3),App Sub …..4種類の演算]についても4種類の演算がある

ふたつめも同様に可能

こんな感じで、すべての演算を表せそうだ。

プログラミングHaskell P142 split関数

プログラミングHaskell 読んでみた。 P142でsplit関数の適用がよくわからなかったので
自分なりに、丁寧にたどってみた。

split  :: [a]->[([a],[a])]
split[] =[]
split[_]=[]
split (x:xs) = ([x],xs) : [(x : ls , rs) | ( ls , rs ) <- split xs]

split [4]=[]

split [3,4]= ([3],[4]): [(3 : ls , rs) | ( ls , rs ) <- split [4]]
         =([3],[4]): [(3: ls , rs) | ( ls , rs ) <- []] = ([3],[4])
split [2,3,4]=([2],[3,4]): [(2 : ls , rs) | ( ls , rs ) <- ([3],[4]) ]
          ==([2],[3,4]): [(2 :[3] ,[4]) ]= [([2],[3,4]),([2,3] ,[4]) ]
split [1,2,3,4]
=([1],[2,3,4]):[(1:ls,rs) | (ls,rs)<- [([2],[3,4]),([2,3] ,[4]) ] ]
=([1],[2,3,4]):[(1:[2],[3,4]),(1:[2,3],[4])]
=([1],[2,3,4]):[[1,2],[3,4]),([1,2,3],[4])]

という感じでいいのだろうか

2014年9月19日金曜日

32bitWindowsにfessをインストールするときは要注意

全文検索を使ってみようと調べたらfessが、使いやすい感じがして、試してみた。(以前はnamazuなどがあったが)
PCに負荷がかかりそうなので、古いPCを使っているLinuxはやめにして、新しいPC(といっても32bitだが)のWin7でやってみた。
ところが、なかなかうまくいかない。
・最新版fessでやってみたが、うまく動作しない。ちょっと古い9.0.2だとうまくいった。標準では、Dosプロンプト画面を表示しっぱなしでないと、サーバーとして動作してくれない。いちおう、端末としても使うPCなので、Windowsのサービスとして登録し、Dos画面は出ないようにした。
最初は、うまくいかない。service.bat installなるコマンドが拒否される。コマンドプロンプトを管理者として実行する。それでも、だめ、原因は、tomcat7.exeが64bit版だかららしい。32bit版のtomcatからtomcat7.exe、tomcat7w.exeをもってきて、上書きしたら動いた。
 localhostとして、アクセスはできたが、他のPCからアクセスできない。ファイアウォールだろうと思って、設定を追加。受信規則に8080ポートを許可とする。これで、やっとうまくいった。
*********
その後、うまくいったと思ったが、どうも、クロールがうまくいかない。思い切ってfessをver4に落としてみたらうまくいった。tomcatの組み合わせがうまくいってないのだろうかどうか?詳細は不明。
**************
その後、また不具合が発生する。ループリダイレクトとのこと。よくわからないので、今度は、もう一度ver9.0.2を試す。tomcat7.exe tomcat7w.exeは32bit版である。今回は、なぜか、クロールができた。はたして、このまま安定運用できるか。
***********************
とりあえず、今のところ安定して稼働している。

fessはTomcatで動いているので、WindowsでTomcatを使う方法を、このセットアップを通して知ることができた。
ポイントは、JAVA_HOMEとJRE_HOMEの環境変数を変更して再起動すること。
startup.batでtimcatが起動すること。他はLinuxとだいたい同じかも。

******************
fess稼働して数ヶ月 なんとか動いていたが、Win7の端末で動かしていたので、さすがに無理があったようだ。端末として使うと、どうしても負荷があるため、通常のソフトが遅くなる。ということで、使用はやめにした。専用のサーバでないときついようだ。残念ながら、メモリ、HDD、CPUそれぞれかなり余裕のあるPCでないと難しいようだ。

2014年8月14日木曜日

coq-hurry P10 練習問題

10ページの練習問題2問をやってみる
1問目 Exercise on sorting
 Define a function that takes a list as input and returns true when it has less than 2 elements or when the first element is smaller than or equal to the second one. Then define a function that takes a list as input and returns true exactly when this list is sorted.
 入力としてリストをとる関数を定義し、戻り値はリストの要素が2未満か最初の要素が2番目の要素以下のときTrueとなる関数を定義せよ。それからリストが完全にソート済みならTrueとなる関数を定義せよ。

最初、なかなかうまくいかない。
Fixpoint check_fs2 l := match l with nil => true | a::nil => true | a1::a2::tl => if leb a1 a2 then check_fs2 (a2::tl) else false end.
このように一つの関数でできそうな気がしたが、なぜかエラーとなる。まだ、coqの使い方が
よくわかっていない。

こういうときは、少し時間を置くことにしている。しばらくして、再挑戦したらできた。
問題で説明しているように、2つの関数でやってみた。最初の関数は、2つの要素の比較だけ行い、再帰はさせないようにした。もうひとつの関数で再帰を使ったらうまくいった。
もう少しスマートな方法がありそうだが、、、、。

Fixpoint check_fs l := match l with nil => true | a::nil => true | a1::a2::tl => if leb a1 a2 then true else false end.
Fixpoint check_sort l := match l with nil => true | a::tl => if check_fs (a::tl) then check_sort tl else false end.
これで、なんとかうまくいった。

2問目 Exercise on counting
 Knowing that the Coq system provides a function beq_nat to compare two natural numbers,
define a function count_list that takes a natural number and a list and returns the nubmer of times the natural number occurs in the list.

これについては
Fixpoint count_list n l s:= match l with nil => s | a::tl => if beq_nat n a then count_list n tl s+1 else count_list n tl s end.
としてみた。ただ、3つめの引数はムダなので、できればなくしたい。
その方法がよくわからない。

ネットで検索するとすでに、解答されている方がいた。
Fixpoint count_list2 n l:= match l with nil => 0 | a::tl => if beq_nat n a then 1+count_list2 n tl else count_list2 n tl  end.
これでいいようだ。
 nil=>0のところを、nil=>sにしようとこだわりすぎたようだ。自身の戻り値に1をたすならば、戻り値に1が累積されていくということに気づかなかった。自分が考えた引数に1をたしていくやり方だと、最後の関数で表示せざるをえないので、nil=>sとなり、スマートな方法とはいえない。




2014年8月2日土曜日

今年は、豊作

 畑を借りているが、今年は思い切ってトマト15株植えた。雨が少ないため、豊作。食べきれないほどとれる。買えば1個100円近くするので、もとがとれたか。
 カラスの害が心配で、ネットをかぶせたのもよかったかも。。
 手入れは、最低限のわき芽とり、サンボルドーによる消毒ぐらいか。

 ナスは7株。ゴーヤ、つるなしいんげんなども1畝ずつ。きゅうりは、1株で十分だ。
 防草シートを使っているが、除草は はっきりいって、かなり手抜きしている。

 

2014年7月11日金曜日

sambaでワード、エクセルが読み取り専用になる不具合

 sambaをちょっと特殊な使い方をしている。それぞれの共有フォルダにユーザーを割り当てて、パスワードがないとアクセスできないようにしているが、それと同時に、hosts allowを使って、特定のIPアドレスのクライアントからもアクセスできるようにしている。(同一フォルダを別名の共有フォルダとして)
 結果的に、これがよくなかったらしく、ときどき、別の人が作成したファイルを開けない現象が発生した。なぜか、最初は原因がつかめなかったけれど、要するに、さまざまなユーザーのファイルができるため、アクセス権限が一致しないことが原因のようだった。
force create mode
force directory mode
でなんとか、その場をしのいだ。
 でも、それでもまだ似たような現象が発生した。ls -llで確認すると、どうやら+の記号がついてる(aclが設定されてしまっている)とそうなるということが判明。。そうならないためには、
nt acl support = no
を付け加える必要があったようだ。これで、しばらく様子を見てみよう。 それから、
setfacl -R -b /ディレクトリ名
として、aclを削除しておくことも必要なようだ。

*********************
上記の方法で解決したと思ったものの、まだ、読み取り専用になる現象が発生する。
いろいろ調べると、可能性のあることとして、

dos filetimes = Yes
dos filetime resolution = Yes
の設定を追加したほうがいいらしいこと。

エクスプローラの[整理] > [レイアウト] > [詳細ウィンドウ]と[プレビューウィンドウ]のチェックを外したほうがいいらしいこと

*****************
これでも、まだ だめ?なようなので、さらに調べると
oplocks = No
blocking locks = No
の記述をしたほうがいいという情報もあったので、試してみた。

今のところ、読み取り専用になる現象は発生してないようだ。