ネットの情報を参考に、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月17日金曜日
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種類の演算がある
ふたつめも同様に可能
こんな感じで、すべての演算を表せそうだ。
(途中の式表現は、正しい表現と言えないところもありかも...)
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])]
という感じでいいのだろうか
自分なりに、丁寧にたどってみた。
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でないと難しいようだ。
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となり、スマートな方法とはいえない。
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株で十分だ。
防草シートを使っているが、除草は はっきりいって、かなり手抜きしている。
カラスの害が心配で、ネットをかぶせたのもよかったかも。。
手入れは、最低限のわき芽とり、サンボルドーによる消毒ぐらいか。
ナスは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を削除しておくことも必要なようだ。
*********************
上記の方法で解決したと思ったものの、まだ、読み取り専用になる現象が発生する。
いろいろ調べると、可能性のあることとして、
結果的に、これがよくなかったらしく、ときどき、別の人が作成したファイルを開けない現象が発生した。なぜか、最初は原因がつかめなかったけれど、要するに、さまざまなユーザーのファイルができるため、アクセス権限が一致しないことが原因のようだった。
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
の記述をしたほうがいいという情報もあったので、試してみた。
今のところ、読み取り専用になる現象は発生してないようだ。
dos filetime resolution = Yes
の設定を追加したほうがいいらしいこと。
エクスプローラの[整理] > [レイアウト] > [詳細ウィンドウ]と[プレビューウィンドウ]のチェックを外したほうがいいらしいこと
*****************
これでも、まだ だめ?なようなので、さらに調べると
oplocks = No
blocking locks = No
の記述をしたほうがいいという情報もあったので、試してみた。
今のところ、読み取り専用になる現象は発生してないようだ。
登録:
投稿 (Atom)
