2011年8月10日水曜日
2011年7月30日土曜日
今後5年、10年 意外と短い間にがんばんなきゃなんない事
放射能汚染問題で、今後甲状腺ガンなどが増えるんだろなぁ。
チェルノブイリの例(5年後ぐらいから増えはじめる。 http://www.rri.kyoto-u.ac.jp/NSRG/Chernobyl/JHT/JHT9602.html)
今でも日本の年間ガン発生数は50万(http://megarot.blog59.fc2.com/blog-entry-3.html)あるので、無視できるレベルと考える人もいるだろう。でも、リスクは増えてるんだよね。(あと何十年後にしか結果はわからないけれども)しかも、老人のガンなら寿命とあきらめもつくけど(自然発生の確率が高くて多分区別つかない)、若者のガンは切ない。
もう起こった事はどうしようもない。まだ5年~10年の有余があるガン発生に備えて
少しでも発見・治療の技術を上げるしかないよね。エンジニアとしては。
私は奇遇にもガン発見・治療薬開発にかかわる装置の開発にちょっとだけど関わっている。私の関わる分野では、正直5年後までに治療薬の開発につながる成果は難しいかもしれない。でも発見なら頑張れるかもしれない。10年後ならなんとか治療薬の開発にも使われて成果がでるかもしれない。もちろん、今から飛躍的進歩orコストダウンによる普及などができればだ。でも5年、正直短すぎる期間、ちょっと胃が痛い。
「ぶっちゃけガンさえ怖くなくなれば放射能なんてさして怖くない。」そう言えるようにしたいね・・・
2011年6月20日月曜日
FreeBSDでインストールしてるアプリ一覧
pkg_infoでもいいのだが、依存関係ではいってるものも出るのでちょっとうざい。
以下の様にしてどこからも参照されていないpackageを探せば比較的楽にインストールしたアプリを思い出せる。
#!/usr/local/bin/ruby
res=`pkg_info -Ra`.split(/\n/)
c=0
while(c<res.size)
if(/^Information /=~res[c])then
c+=1
c+=1
puts res[c-2 ].split[2].sub(/-[^-]*:$/,"") if(!(/^Required/=~res[c]))
end
c+=1
end
2011年6月13日月曜日
重複ファイルを探す on Ruby
重複ファイルを探すツールがほしいけど、なんか探すがめんどくなって作ってみた。
目的は、ディスク容量節約のために、アホなファイルの重複を探す事。
なので、比較的速度重視小さいファイルは無視するようにしてます。(というか小さいファイルを探し出すと.svnファイルがたくさんひっかかる)
この程度の処理ぐらいシェルスクリプトで書けるようになりたいなぁ。
#!/usr/local/bin/ruby
# -*- coding: undecided -*-
require 'digest/md5'
require 'pathname'
$minFileSize=30*1024*1024 #これより小さいふぁいるは検索対象外
$fileHash=Hash.new
def getHash(dir)
$stderr.puts dir
dir.each_entry do |file|
next if(file.to_s=="." || file.to_s=="..")
path=dir+file
if(path.file?)then
next if(path.size<$minFileSize)
begin
digest=Digest::MD5.new.update(path.read(512))
key="#{path.size}#{digest}"
$fileHash[key]=Array.new if($fileHash[key]==nil)
$fileHash[key].push(path)
rescue
end
elsif(path.directory?)then
begin
getHash(path)
rescue
end
end
end
end
def checkDiff(files)
differ=Array.new
same=Array.new
base=files.shift
same.push(base)
files.each do |target|
if(system("diff","-q",base.to_s,target.to_s))then
same.push(target)
else
$stderr.puts "=============================="
differ.push(target)
end
end
return [same,differ]
end
getHash(Pathname.new(ARGV[0]))
$fileHash.each do |k,v|
while(1<v.size) do
t=checkDiff(v)
v=t[1]
if(1<t[0].size)then
puts t[0]
puts "================================"
end
end
end
2011年6月5日日曜日
続:FreeBSDのSMB(CIFS)マウント対応状況 mount_smbfsに関する訂正
まず、SMBで扱える文字コードはサーバからみると、
「ネイティブ(サーバ依存)」と「Unicode」の2種類、しかしFreeBSDの
mount_smbfsはUnicodeに対応してないので、ネイティブを選択せざるをえない。
一般には普通のwindowsならCP932(SJIS)だが、よくあるsambaの設定は
UTF-8がネイティブコードとして設定されている。
CP932もUTF-8もヌル文字を含まないので、正常に処理されるが、
mount_smbfsのバグのため、ヌル文字を使う文字コードをネイティブコードに使っている
time capsuleはマウントできない・・・といった所みたい。
(マルチバイト文字だけUTF-16BE?なんや不思議なエンコードに見えた)
なのでFreeBSD標準のmount_smbfsではtimecapsuleは正常にマウントできない 。
まとめると・・・・
- windowsは-E UTF-8:CP932であらかた読める(3byte文字問題あり)
- sambaは-E UTF-8:UTF-8で正常に読める。
- timecapsuleは日本語含まなければ読める。
ちなみにこの調査の過程でkernelのlibiconvを拡張して遊んだりしてみた。
元のコードを数行書き換える必要はあったが、
iconv_xlat.c等の既存の変換エンジンをまねして変換エンジンを書いて
追加するだけで、モジュールがガンガン追加できるので実験しやすく面白い。
じゃ、どうすればいいか。
fuse-smbnetfsをつかう・・・というのが楽だけど、当然処理が遅い。
mount_smbfsをとりあえずの改造するならファイル名の扱いをヌル文字OKにするのがいいかな。
libiconv.koのほうには必要に応じて文字コード変換を追加して・・・
しかしながら、長期的にはUnicode対応のほうが絶対有利。今時Unicode吐けないSMBサーバは少数になりつつあるので。
fuse-smbnetfsのマウントが遅い時
~/.smb以下にsmb.confの雛形を適当にコピーして以下の用に名前解決の手段を見直してみる。
無難なのはbcastだがfirewallをはさんだりルータ越しの場合はwinsサーバを設定したりと色々ありえるのでsambaの解説サイトでもみてくださいな。
[global]
name resolve order = bcast <==これを見直す
あと、先日の記事にも書いたけど、fuse-smbnetfsは最新に更新しよう。portsは古いかもよ。
2011年6月3日金曜日
salt無しでパスワードのハッシュ作るのが最近の流行???
http://bakera.jp/ebi/topic/4421
↑をみてふとgoogle code searchしてみたんだけど、パスワードをそのままhash取る実装あるのね。。。
でも有名なパスワードに関してはhash databaseとかがあるので、最悪ハッシュ値をググルだけでパスワードが推測できてしまう。
昔Webプログラマのバイトをしてた時はググって見つけるサンプル実装のほとんどは、パスワードとともにシステム固有のソルト(インストール時に設定)を足した文字列のhashをとってたような気がするんだけど、、、気のせいかもしれない。
ちなみに同じ理屈でhashを数回取るというだけの実装ならhash DBもすぐ拡張できちゃうよね。一般にパスワードのハッシュはファイルかDB上にあるので、それ以外のところにシステム固有のソルトを持ってやるといいのかもしれない。うーん、カーネル空間?TPM?まぁどっかだよどっか。
システムの売り込みとしてうまいのはドングルにシステム固有文字列+ハッシュ関数を持たせる事かな?
追記
ソルトをランダムに生成してソルトも記録するってのもあるね、そういや。DB検索は免れるけど辞書アタックは免れないはず、、、いあ、上のを含めて大差はない状況だけどね。