2011年12月22日木曜日

私が鼻ホタルを作るに至った理由



鼻ホタルについては↓参照。


http://www.youtube.com/watch?v=6_vMlSlhVdo


鼻ホタルを作ったのは当初は爪をLEDで光らせたらクラブで目立つだろうし、hsgw氏に自慢してやろうという程度の話だった。そう、最初は鼻ではなく爪を光らせるデバイスだった。


しかし、思った以上に電池が不格好で明滅する爪というアイディアはボツになった。そこでボツになった試作品の点滅LEDを耳の穴や鼻の穴にだって入るぞ~と妻に自慢していた。


そこで、妻が言った「どうせ鼻の中に入れるならば鼻息で光らせればいいのに」という言葉を実現するために作られたのが鼻ホタルである。


鼻ホタルはそのように思いつきのアイディアではあるが、実際に実現するにあたってはそれ相応の理由が有って具現化している。


実は鼻ホタルは、展示等の短時間のインタラクションという意味では非常に教科書的な作品なのである。


展示等の短時間インタラクションでは、「直感性」と「応答性」が求められる。例えば鼻ホタルの場合呼吸という無意識の動作が鼻が光るという非常に直接的で直感性がある手法で表現されている。そのため、デモなどの時も鼻呼吸をしてみせれば、どのような作品なのかがすぐにわかる。


また、応答性に関しても、呼吸をしたタイミングで光るので、非常にわかりやすい作品となっている。


例えば、心拍に関して過去のデータを利用する作品などがあるが、展示を見ただけで理解させるには映像を見せるぐらいの勢いでわかりやすい直感的な表現を必要とする。


それに対して、鼻ホタルは直感的でかつ高応答性をもつために、非常にわかりやすい作品となっている。


このようにインタラクション作品に求められる基本に忠実な作品であるため、作ってみようと思った次第である。





2011年12月20日火曜日

speedbarを普通に使えるようにカスタマイズ



K*BUGで発表したネタなのですが、ある程度バグが取れたので再度報告。


emacsのspeedbar.elには関数一覧を表示する機能があるんですが、FreeBSD portsからいれたデフォルトの状態では色々問題があります。それを色々解決しつつ、便利に改造するにはどうしたら良いかの実験です。


speedbar.elは「imenu」と「etags」という二種類のタグ抽出エンジンを使っいます。通常は設定でどちらか一方を使うのですが、それぞれ問題があります。




  • imenuは簡単な正規表現のみで切り出していて、関数宣言・定義の前にスペースがあるとこける(namespaceでインデントすると死ぬ)

  • etagsは割と正確にC++のソースをパースするものの、マルチバイト文字があるとタグの位置がずれる。

  • imenuはTODOを正規表現で拾ってくるなど独自の拡張が簡単だがetagsは外部コマンドなので不可


それらの問題に対して、etagsでC++の基本的なパースを行い、さらにimenuの機能でTODO等の独自タグを抽出しようというのが以下の設定です。.emacsファイルに追記すれば動くはずです。


修正点は以下の通り




  • etagsの結果とimenuの結果をマージする関数を追加

  • etagsの結果からバイト数で文字位置を取得していたが、マルチバイト文字があるので行数を利用してジャンプするように変更

  • imenuに元々あったタグ切り出し正規表現を、「//TODO」,「//BUG」「#define」抽出用正規表現に置き換え

  • define文はetagsよりimenuをつかって一つにまとめたほうが個人的に便利なのでimenuで処理



(require 'speedbar)
(require 'imenu)
(require 'cc-menus)
;etagsとimenuの結果を混ぜ合わせる
(defun my-dfl (file)
;特定条件の時のみハイブリッド版をつかう
(if (string-match "\\.\\([cpC]\\|cpp\\|cc\\|cxx\\)$" file )
(let (el e i)
(setq i (speedbar-fetch-dynamic-imenu file))
;; Remove imenu rescan button
(if (string= (car (car i)) "*Rescan*")
(setq i (cdr i)))
(setq el (speedbar-fetch-dynamic-etags file))
;eについては行数で入っているので文字位置になおす
(set-buffer (find-file-noselect file))
(while el
(setq e (cons (cons
(car (car el))
(save-excursion
(goto-line (+ -1 (cdr (car el))))
(point))) e))
(setq el (cdr el)))
(if (eq e t)
(if (eq i t) t i)
(if (eq i t) e (append i e))
)
)
t
)
)
;etagsでdefineを扱わなくてもOKなので関数上書き
(defun speedbar-parse-c-or-c++tag ()
"Parse a C or C++ tag, which tends to be a little complex."
(save-excursion
(let ((bound (save-excursion (end-of-line) (point))))
(cond
((re-search-forward "\C-?\\([^\C-a]+\\)\C-a" bound t)
(buffer-substring-no-properties (match-beginning 1)
(match-end 1)))
; ((re-search-forward "\\<\\([^ \t]+\\)\\s-+new(" bound t)
; (buffer-substring-no-properties (match-beginning 1)
; (match-end 1)))
; ((re-search-forward "\\<\\([^ \t(]+\\)\\s-*(\C-?" bound t)
; (buffer-substring-no-properties (match-beginning 1)
; (match-end 1)))
(t nil)

)
)))
;etagsやimenus用関数を流用してもよいが、念のため
(defun my-il (indent lst)
"At level INDENT, insert the etags generated LST."
(speedbar-insert-generic-list indent lst
'speedbar-tag-expand
'speedbar-tag-find))

;オリジナルのタグ(by imenu)
(set
'cc-imenu-c++-generic-expression
'(
("define" "\\#define[ \t]*\\(.+\\)+$" 1)
("TODO" "//TODO[ \t]*\\(.+\\)+$" 1)
("BUG" "//BUG[ \t]*\\(.+\\)+$" 1)
)
)
;タグの抽出エンジンとして、オリジナルのものを先頭に追加
(add-to-list 'speedbar-dynamic-tags-function-list '(my-dfl . my-il) )

;マルチバイト問題を回避するためにbyte位置ではなく、行数で返すように仕様変更
(defun speedbar-extract-one-symbol (expr)
"At point, return nil, or one alist in the form (SYMBOL . POSITION).
The line should contain output from etags. Parse the output using the
regular expression EXPR."
(let* ((sym (if (stringp expr)
(if (save-excursion
(re-search-forward expr (save-excursion
(end-of-line)
(point)) t))
(buffer-substring-no-properties (match-beginning 1)
(match-end 1)))
(funcall expr)))
(pos (let ((j (re-search-forward "[\C-?\C-a]\\([0-9]+\\),\\([0-9]+\\)"
(save-excursion
(end-of-line)
(point))
t)))
(if (and j sym)
(1+ (string-to-number (buffer-substring-no-properties
(match-beginning 1)
(match-end 1))))
0))))
(if (/= pos 0)
(cons sym pos)
nil)))


このspeedbarとhideshowvisを使うとわりと、emacsでのC++開発環境が派手になって自尊心が満たされます。





2011年12月18日日曜日

MacOS LionでイラストレータCS3の印刷ができないとき



以下URLで紹介されてるように



sudo rm -r /Library/Printers/PPDs/Contents/Resources/*.lproj



で治るんだけど、このlprojファイル今日みたらなんか勝手に復活してた。


なので、何かの操作をやると復活する事があるらしいので、定期的にこの操作をやることになりそう



http://www.dtptemple.org/imgbbs/index.php?mode=thread&id=12432&page=1






2011年12月12日月曜日

youtubeへのコメントが返せないので、他のメディアを経由するテスト





Thank you for watching. Using red LED sounds good. I'll try next time.There is no specs now.But how to build it is very simple.I recommend using this http://youtu.be/JkdIlp8UwZo (at 0:35)it use a transistor instead of microcomputer.Sensor is here.http://akizukidenshi.com/catalog/g/gM-04267/ S-8120C(by SII)(unfortunately digikey have no) transistor is 2SC2712. You don't have to care capacitor/register type.





2011年12月11日日曜日

冬の「はーぁっ」を応援する装置



鼻ホタルを応用した新作です。


http://www.youtube.com/watch?v=JkdIlp8UwZo


冬に手がかじかむとよくやる「はーぁっ」を応援する装置です。


いつも通り真鍮でフレームを作ってますが、今回は電池周りの固定方法が新規開発です。


電池付近の白い樹脂の中身は、積層セラミックのコンデンサに糸をまいてさらに樹脂でかためたものです。


積層セラミックコンデンサは圧縮応力には強いですが、引っ張りにはめっぽう弱いです。その点を糸で補強しているのですが、糸はズルズルと伸びてしまうので、さらに樹脂(エポキシ接着材)で糸を固定しています。





2011年12月5日月曜日

MTM07で私のブースに来た人向け情報



展示していたのは以下の作品です。




塩水,漂白剤(酸系)、銅、亜鉛で作られた電池です。亜鉛が錆びたり、溶けたりと腐食する事で電流を作り、回路を動かしています。回路は樹脂で保護されていますが、この保護がなければ亜鉛と同じように腐食して壊れてしまいます。電池ってなんというか虚しいですね。という作品です。


(さらに虚しい事を言うと、この亜鉛は大量のエネルギーを投入して作ったものなのに、腐食を通して元の状態になっていく事でわずかばかりのエネルギーを得ています。厳密には酸素と硫黄の違いとか色々ありますが)




本来の回路は鼻の穴の中に入れて、鼻息を吐くときに鼻の穴がふわっと光る装置です。呼吸で体内が光る様子がホタルを連想させるので鼻ホタルという名前にしました。


MTM07では鼻の中だとわかりにくいので鼻の外に両面テープで貼って固定していました。




心拍を検知して光るLEDがついた帽子です。




ちなみに点滅ユニットを3つ使っていますが、一つでもちゃんと動きます。


https://picasaweb.google.com/lh/photo/4Q-xPuLQ8cobYQwtkZqfzdMTjNZETYmyPJy0liipFm0?feat=directlink




MTMでは第3世代(オレンジ色)と第5世代(青白色)を展示しました。両方とも上の動画の中に写っています。ちなみに、撮影場所は西院春日神社です。




単なる一発ネタで、実はクエン酸エッチングをやってみたかったっていう作品だったります。




ニコニコ技術部展示会、NT京都は3/25にやるよ~という宣伝をしました。そのまえにNT福岡が12/24にあります。


メインはニコニコ技術部ですが、NT京都には毎年Make系の人も展示にきています。折角関西での展示会なので有効活用してくださいな。




  • テクノバルーン部(犬のバルーンのなかにLEDランプが入ったモノ)


小坂先生(http://www.kait.jp/ug_gr/undergrad/info_science/info_media/academic/kosaka.html)がMTMの二日目に提唱した、テクノバルーン部の下働きを私がする予定です。回路つくるよ~。





2011年9月7日水曜日

FreeBSD packageの依存関係の修復



K*BUGの会合で話したネタなのだけれども、有用なのでこちらにもメモ書きを残しておく。


ちゃんと/usr/ports/UPDATEを読まずにportupgradeを適当にやってたりすると、依存関係がおかしくなる時がある。そのときに対処方法。


前提


前提としてportupgrade(or portmaster)とbsdadminscriptsがインストール済みであるとします。


そして適当なバージョンの最新のpackageを取ってくるように環境変数を設定しておきます



setenv PACKAGESITE ftp://ftpミラーサイト.jp.freebsd.org/pub/FreeBSD/ports/amd64/packages-[バージョン]-stable/Latest/



一番簡単だけど、負け犬な気分


一番簡単なのはパッケージ一覧を取っといて、全部最新を入れ直す事。以下のようなコマンドでパッケージの一覧がgetできるので、必要なもの拾って



pkg_info -E|sed 's/-[^\-].*$//'



頑張る人向けの処方(壊れたパッケージが少数)


まず、自動で修復できる情報を修復させます。



pkgdb -Fa



次に手動で修復



pkgdb -F





  • 足りない依存関係が見つかったよと言われたら


依存関係をpkg_add -rなりportinstall -Pなりでインストールします。なお、pkg_add -rでインストールすると環境変数で指定したパッケージサイトでのバージョンを持ってくるので/usr/portsのバージョンと違う可能性があります。




  • 同じパッケージで複数のバージョンが入ってるよって怒られたら


C-cでpkgdbで終了して、''両方の''パッケージを削除してから、新しいほうのバージョンをインストールします。pkgdbが言うことを鵜呑みにして片方だけ消すと、多くの場合ファイルを中途半端に消されます。


次ぎに忘れてる依存関係がないかチェックします。-Lでチェックして-Fで再び修正します。



pkgdb -L


pkgdb -F



ここまで終わったら一段落です。次ぎにライブラリの依存関係がファイル単位で壊れてないかチェックします。



pkg_libck



壊れている依存関係があった場合、可能性は大きく2つです。




  1. 依存している方が古い(依存するライブラリのバージョンが新しくなってしまっている)

  2. 依存されている方のファイルがない。(何らかの理由でファイルが消えてしまっている)


面倒な事考えずに、依存している方も依存されている方も入れ直すのが楽ですが、それとは別に何らかの儀式が必要なのに抜けている(/etc/libmap.confの記述など)可能性があるので、/usr/ports/UPDATEも再チェックです。


pkg_libchkでもエラーが出なくなったら、もうほぼ心配ないです。念のためpkgdb -L;pkgdb -Fを確認し、portauditでセキュリティホールも無いことを確認したら終了です。


それでも、なんか調子悪いときは/usr/local/etc/rc.dを覗いてみて、起動していないサービスを確認してみてください。例えばdbusやhaldが起動してないとX環境のみならずNetatalkも満足にうごかなかったりします。





2011年8月29日月曜日

国産ノートPCですら、日本の屋外では使えない・・・



ざっくり、各メーカーのノートPCの動作温度を調べてみた。


(トップページからリンクはってあるやつを適当にサンプリング)


最低温度に振れ幅はあるものの、最高温度35度は共通なようで、夏に外で使う事はできない模様。(メーカー保証範囲では)


せめて、あと5度足すだけで十分なアドバンテージになるとおもうんだけどなぁ。


日陰限定でも「野外(orエアコン無し屋内)で使えるよ!」ってのは嬉しい。


あと気になるのは冬、結露が怖くて冬は論外という話もあるけど、以外にdellとHPが健闘している、やっぱ北米・カナダがあるからかな?



asus 10~35


apple 10~35


panasonic 温度:5℃~35℃、湿度:30%RH~80%RH(結露なきこと)


dell 0~35


epson direct 動作温度:10~35℃、動作湿度:20~80%


HP: :温度0~35℃(光ドライブ非書き込み時)、温度5~35℃(光ドライブ書き込み時)、相対湿度10~90% (ただし、結露しないこと)。


sony: 動作時:温度5℃から35℃、湿度20%から80% (ただし結露しないこと、および35℃における湿度は65%以下)


toshiba: 温度5~35℃、湿度20~80%(ただし、結露しないこと)


NEC: 温度5~35℃、湿度20~80%(ただし、結露しないこと)


fujitsu:温度 5~ 35℃/湿度 20~ 80%RH(動作時)


thinkpad: 5~35






2011年8月25日木曜日

MacOSX相手ならsambaよりnetatalkが速い。



MacOSX相手のファイル共有だとsambaよりもnetatalk(AFP)のほうが高速に通信できて便利。


まぁ、そもそも手元のsambaはSMB2に対応してないので論外に遅いって話はあるけど。。。


ちなみに以下のサイトの解説がとっても参考になりました。


http://www003.upp.so-net.ne.jp/hat/netatalk/andsamba.html





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検索は免れるけど辞書アタックは免れないはず、、、いあ、上のを含めて大差はない状況だけどね。





2011年5月31日火曜日

FreeBSDのSMB(CIFS)マウント対応状況



mount_smbfs


現状mount_smbfsのほうは日本語が通らない。


厳密にいうとサーバ側がUnicodeだと文字化けする。


パッチはある。(パッチさえ当てれば、転送速度も速くていいんじゃないかな?)


http://www.mail-archive.com/freebsd-users-jp@jp.freebsd.org/msg03921.html


FreeBSD本家のほうが、もうパッチだらけだしゼロからお任せできる人が


出るまで待とうというメッセージをのこして止まっている。


http://www.freebsd.org/cgi/query-pr.cgi?pr=kern/151845





fuse-smbfs


日本語がきちんと通る!(MacやTimecapusle等UTF-8なsambaに接続できる)


しかしportsに収録されているものはバージョンが古く(0.3系)安定性に欠ける。


原因はsambaのlibsmbclientを使っているが、そいつがメモリリークしてると本家のサイトには書いてあるが、原因は追ってないので不明。


新しいバージョンである0.5系ではメモリリークがあるライブラリを別プロセスに閉じ込めているので、


ファイルが急に見えなくなっても、別のディレクトリにcdして戻ってくれば復活する。


一応0.5系ようのportsファイルは以下においておきます。


http://syunei.dip.jp/~akira/fusefs-smbnetfs.tar.gz





あと気にくわない動作として、opendirでファイル一覧がそろってから一気に読もうとするのでファイルが多いとすごいストレスフル。。。





追記:


/sys/libkern/iconv.cでXLAT16_ACCEPT_3BYTE_CHRというのがあるので、そいつをdefineして、buildworldしなおせば2byte文字からUTF-8(3byteまで)は対応できそう。ただしUTF-8の4byteは未対応だし、UTF-8から何かへの変換は不可。


ま、4byte UTF-8は日本語でもマイナーな文字しかないし、MySQLやSQLServerの対応もいまいち不安定らしいので、ホビーユースでは気にしなくていいっぽい。PostgreSQLは真面目に対応してるらしい。。。(また聞きなのでまちがってたらごめん)


さらに追記


おかしいのはTime capsuleのほうかもしれない。


他のマシンだとまだまともにマウントできたりもするので、調査中です。





2011年5月20日金曜日

FreeBSD8.2/amd64+VirtualBox 3.2.12でクラッシュする時



kldload 経由でvboxdrv.koを読み込むと、


二日に一回ぐらいの頻度でクラッシュする場合がある。


/boot/loader.conf経由で読み込んであればクラッシュしない。


昔のバージョンは起動後すぐにクラッシュしてたからkldloadじゃだめなんだな、と思ってたけど、今でもクラッシュの頻度が下がっただけでkldload経由はまだ危険な模様。


なので面倒でもloader.confから読むようにしたほうがよいっぽい。





2011年5月15日日曜日

FreeBSDでDVDが再生できないとおもったら・・・・意外な原因



SATA接続のDVDドライブをかってきて繋いだらなんか動かなくてこまってたんだが。。。


結果から言うとAHCIモードじゃないと特定のコマンドがこける事がわかった。


昔に設定したマシンだったので、IDEエミュレーションでずっと使って田のでこれを気にAHCIモードに切り替えた。


(当然ながら、HDDも影響を受ける)


このときgmirror等でラベルをつけてマウントしているものはfstab編集する事なくそのままいけるんだけど、それ以外の直接ディスクをマウントしているものはad~からada~に名前が変わってしかも番号も変わるので要注意。





MacOSXで解像度が640x480から変更出来なくなる。



以下のサイトでも同じ問題にあたっているんだけど、以下のメッセージがでてディスプレイの解像度が変更不能になる。



ディスプレイモードを変更しようとしています。


表示が800x600よりも小さい場合、一部のソフトウェアが正しく


表示されないことがあります(キャンセル)(OK)



https://discussionsjapan.apple.com/message/100562391;jsessionid=34E83322D46777AB328E519E40D4D856.node0


根本の原因は日本語化の際のバグです。


Mac Loveな人はアカウントを英語にしてしまえば解決です。(システムプリファレンスの、言語と~~のアイコンからできる)


ただ、業務で仕方なくMacを使う人(世の中の不幸なデザイナの皆さん等)は流石に英語は辛いので、バグがある解像度変更のみをピンポイントで英語化します。


やりかたはターミナルから以下を打ち込めばOK。



sudo su (管理者パスワード入力)


cd /System/Library/MonitorPanels/Display.monitorPanel/Contents/Resources


mv Japanese.lproj Japanese.lproj.nouse


cp -rp English.lproj Japanese.lproj


exit


exit



タイプミスをすると最悪の場合Macが動かなくなります。(まずないけど)


その場合はOSを上書き再インストールすればいいです。





2011年5月11日水曜日

ケータイ屋さんの店員はいわゆる損益分岐点を気にしない。



そらまぁ、他人の料金プランだしねぇ・・・


例えば




  1. 60分無料通話付きで980円

  2. 120分無料通話付きで1280円


これで月に80分話す人はどっちの料金プラン?っていうときにケータイ屋さんの店員は120分無料通話になりますね。と言う。


ただ、そんなもの通話料次第だよね。私の場合自分で計算したらこの例で言えば、980円+20分オーバー分の料金のほうが安かった。





確かにそういった計算が理解できない客が多いのかもしれない、だからといって売る側として基本的なデータを用意しないのは微妙だなぁ。。。と思う。仮に理解できなくても料金プランごとに料金-通話時間グラフを作ればビジュアルで分かるとおもうんだけどなぁ。。。





2011年5月5日木曜日

石川(加賀)の酒蔵を少しまわってきた。



ゴールデンウィークの旅行として、石川旅行にいってきた。温泉に、寿司に、蕎麦に、日本酒にと贅沢をしてきました。


で、一応まわった蔵報告(蔵周りがメインじゃないので4カ所しか行ってないけど)


あと、私はドライバーだったので試飲はできてないっす。orz


福光屋


相変わらず店舗がオシャレ、社内デザイナですべてやってるっていうからすごいよね。


そして、年をかさねるごとに酒以外の商品が増えてきている。今年はショウガシロップを売りにしてた。


あと、最近は前面にだしてないけど、豆腐の味噌漬けがやっぱり酒にあって美味しい。チーズっぽい風味がする濃厚な味噌を食べている気分になる。すこしだけどっしり寄りのお酒に合う感じです。


もちろん、日本酒は日本酒で美味しいのよ、他のインパクトが大きいだけで。


萬歳楽(小堀酒造)


JAISTの麓にあるので、しょっちゅうお世話になる酒蔵。地酒研OBがあつまってのむんです~といったら酒粕といしるに鯖をつけたものをもらったのが、これが激うま!是非おすすめしたい。


あと、後輩に梅酒を漬けた後の梅の実をつかったドーナツを勧められて購入。梅の実シリーズは着々とふえていっている。その他は、いつも通り甘酒と日本酒を購入してきた。


手取川(吉田酒造)


あまり他の客と鉢合わせになる事は少ない蔵なんですが、その日はたまたまカップルで酒蔵巡りしてる人と鉢合わせた。聞けば酒蔵めぐりは初めてとの事、昔は休日の蔵はしまっていたのに、今は休日もあけていたりと石川の酒蔵はけっこうPRがんばってるな~と思ってはいたんですが、その成果はちゃんとでてたんだなぁと思いました。


フルーティな香りの生酒が多いのがこの蔵の特徴かなと個人的には思ってます。


神泉


地酒研でも人気が高い酒のわりには、蔵の位置が学校から微妙な位置なのであまり行かない事が多い蔵。ひさしぶりに行きました。ちっさな蔵で、種類も少ないですが、安定して旨いです。家族でやっている蔵らしく、お孫さんの元気な声が聞こえていました。


弁慶


元々は蔵元近くの店で酒販も行っていたんですが、現在はその場所がローソンに変わっています。ということで再度蔵元に問い合わせて出直す必要がありそうです。どう考えても白ワインにしか思えない日本酒とかあったりして久しぶりに行きたかったのですが残念です。


Tips


ということで、酒蔵を巡るのは楽しいです是非どうぞ。


酒蔵の巡り方のTipsとしては以下の事を知ってると楽かも?




  • 蔵の住所は各都道府県の酒造組合のページでチェック


    • 蔵に隣接して蔵元直営店があるばあいはそこに行けばOK



  • 杉玉があれば、とりあえずそこがお客さんが入って良い入り口の可能性大です。(蔵兼住宅が多く紛らわしい事が多い)

  • 小さな蔵に行くときは保冷バッグ、保冷剤持参(生酒の扱いがある蔵では特に)

  • 試飲は新酒の時期しかやってない蔵と、いつでもやってる蔵がある。(どちらであっても基本は試飲できますか?と聞けばいい)

  • 自分の好きな酒説明できるようにする


    • 基本は 味が「どっしり」←→「すっきり」 香りが「華やか」←→「おちついた」の二軸かと(異論は認める)

    • 甘口、辛口は実は液体の比重で測るものなので、主観指標としては使いづらいです。



  • ドライバーは飲めない。。。最近本当に厳しい。そして石川の蔵はちょっと道に迷うとすごい狭い道に入る事が多いので、ドライバーの選定は慎重に。





2011年4月28日木曜日

簡単な処理で、滑らかに信号を補間(内挿)したいとき。



世の中にはスプラインだとか色々あるんだけれども、実装が楽で滑らかに繋がる方法を見つけたのでメモ。


式の導出はhttp://www.empitsu.com/pdf/sgd.20080718.pdf に譲るとして、結論のみメモ


データがa,b,c,d,・・・・とあった時



(-a+9b+c9-d)/16



がbとcの間にある点の値です。同様に一ずつずらして計算していけば、cとdの間dとeの間・・・・と求まります。これで2倍のサンプリング点数に補間できます。


16倍はシフトで実装できますし、9倍も8倍+1と言う風に分解すればシフトと加算で実装できます。なので古いマイコンにやさしい実装ができます。


同様の処理を2回かければ4倍アップサンプリングもOKっす。


追記:16倍アップサンプリング例


16倍アップサンプリング例をおいておきますね。


https://picasaweb.google.com/lh/photo/fQMfMkMIUqsiwTFVudy8Kw?feat=directlink





2011年3月4日金曜日

FreeBSD on VirtualBoxで帯域制限ツールを作る。



基本的にはイベント会場で臨時に使う事を考えてます。


具体的には、会場にネットを解放しているけれどもネット中継もやりたい。


ネット中継がカクカクするのは困るので、一般側の回線は帯域をしぼりたい。


という時に使います。


で、既存ネットワークの設定をできるだけいじらずに導入する事を目的にしてます。


なので、PCにUSB等のNICを最大4つさして、ひとつをUplinkポートにして残りの3つが帯域制限が掛かっているポートになるハブを作ります。


PC自体にはIP振っても振らなくてもOKっす。


前準備


私はとりあえずVirtualBoxをMacBookにいれて、USB NICを2つ繋ぎました。


USB-NICが帯域制限つきポートになるので、変なパケットをださないように、Mac側でIPアドレスを「切」に設定してます。


windowsでいえば、ネットワークのプロパティでTCP/IPのチェックボックスをはずすような状態です。


でFreeBSDの仮想イメージはすでにもってるのでそれ使いました(8.2 RC2)


Virtualbox設定


VirtualBoxのネットワークの設定は、全てブリッジで接続です。


一つ目のインターフェイスをUPlinkのポートを設定して、それ以外を帯域制限つきポートにします。


FreeBSDの設定


/etc/rc.confファイル:



cloned_interfaces="bridge0"


#4つのNICをbridge0で繋ぎます。


#仮に3つしかなくても、同じ設定でちゃんと動きます


ifconfig_bridge0="addm em0 addm em1 addm em2 addm em3 up"


ifconfig_em0="up"


ifconfig_em1="up"


ifconfig_em2="up"


ifconfig_em3="up"


dummynet_enable="YES"


firewall_enable="YES"


firewall_type="/etc/ipfw.conf"



/etc/sysctl.confファイル:



net.link.bridge.ipfw=1



/etc/ipfw.confファイル(新規作成):



pipe 1 config bw 100Kbit/s #デフォルトの帯域制限量を書いておきます


pipe 2 config bw 100Kbit/s


pipe 3 config bw 100Kbit/s


add pipe 1 ip from any to any xmit em1 out bridged


add pipe 1 ip from any to any recv em1 out bridged


add pipe 2 ip from any to any xmit em2 out bridged


add pipe 2 ip from any to any recv em2 out bridged


add pipe 3 ip from any to any xmit em3 out bridged


add pipe 3 ip from any to any recv em3 out bridged


allow ip from any to any



以上を書いて再起動すると帯域制限つきHUBになっています。


帯域制限を変更するとき


em1=(VirtualBoxで2番目のNIC)の帯域を変更するときは以下のようにします。


同様にpipeの後の数字を変更すればem2,em3も変更できます。



ipfw pipe 1 config bw 100Kbit/s



障害発生時


VirtualBox上で運用している場合、例えばあるPCをem2からem3につなぎ替えたりすると通信できなくなってしまいます。(2011/3/4現在)


そういう障害が起きたときは以下のようにしてそれぞれのポートを初期化します。



ifconfig em1 down


ifconfig em1 up


ifconfig em2 down


ifconfig em2 up


ifconfig em3 down


ifconfig em3 up



ふつうUpLinkがわでそのようなつなぎ替えをすることはないのでem0はする必要はほぼないでしょう。





P.S.


暇見てもシェルスクリプトも整備して、仮想イメージ公開してもいいかもね・・・需要があれば





2011年3月3日木曜日

VirtualBoxのNICをpromiscにするときの注意@MacOSX



たとえば複数のNICをbridge接続するとき等NICをpromiscモードにするんだけど、


ホスト環境であるMacOS側が自動でpromiscモードになってくれない。


普通は



ifconfig en0 promisc



とでもやればいいのだろうが。あいにくMacOSXでは当該昨日が削除されている。ほんのわずかネットが重くなるが



tcpdump -i en0 icmp



で代用して、ホスト環境をporomiscモードにしてあげればちゃんとゲストの中でブリッジする事ができる。





ちなみに、なんでこんなのをやっているかというと、USBのNICを2枚さして、LANケーブルの間に挟めば透過的に帯域制限ができるっていうのを作りたくてやってみた。


もちろん、BootCampでPC-UNIXをいれれば一発解決なのだが、それだとPC-UNIXが起動しているあいだMacがつかえなくてしょぼーんとなるので、VirtualBoxでがんばってみた。





というのは全くの嘘でした!



普通につかえます。ただ、NICを複数用意していて途中でケーブルの入れ替えなどを行うと、VirtualBox側のブリッジが混乱して変に通信できなくなるっぽい。


ちょっとこれはしらべないとわからなぁ。。。


とりあえずの対応方法


LANケーブルの差し替えなど通信不能になったときは、



ifconfig em0 down


ifconfig em0 up



をLANの入れ替えなどをおこなったインターフェイスにたいして行えば復活する





2011年2月8日火曜日

メモ: GEOM journalの0fill



virtualboxのディスクイメージちっちゃくするぞ作戦で、gjournalについては調査が手つかずだった。


とりあえずソースを読んでわかったこと。



gjournal dump /dev/ada1s1a



とやってflagが1の時はjournalがsyncさておりCLEANな状態。


この状態で且つ、ジャーナルのワーカースレッドが起動する前ならジャーナルディスクを吹っ飛ばしても大丈夫。


つまり、マウントしてない状態で、flagが1で有ることを確認した後、jstartからjend(byte単位)を0fillしてもOKなはず。


今日はもう眠くて作業するのは危険なので、計画のメモのみ。


追記


とりあえず前回書き忘れてた事として、最後の1セクタはメタデータがあるから書き込まないように注意しなきゃです。oseekだけ設定してうしろ消さないように。ちゃんとcount指定が必要なはず。


で、実験した結果消した後にマウントするのはOKなのだが、ルートパーティションにしている場合は最初の一回のみルートパーティションみつからなくて転ける。


もう一回再起動すればちゃんと起動する。もしくは0fill 作業後にgeom_journalをloadして一度読み込ませれば正常に起動します。


とりあえずは0fill作業としてはうまくいくけど、ちょっと気持ちわるい。





2011年2月6日日曜日

FreeBSD on Virtualbox のVDIを小さくする



やることは以下のコマンドを実行するだけなのだが、



VBoxManage modifyhd hogehoge.vdi --compact



その前準備として出来るだけ全てのセクタを0で埋めた方がよい。ググってみると、



init 1 #シングルユーザモードに切り替え


cat /dev/zero >o



として0でうめたファイルを作ってから削除するのが主流らしい。


確かに手っ取り早く、実践的なのだが、より完璧を目指すならちゃんとファイルシステムの空きブロックを一つ一つ消したい。(手元の実験では0.15%程度の空きブロックが0fillされていなかった)


と言うことでそんなツールを作ってみた。


http://syunei.dip.jp/~akira/deldfree.tar.gz



make #コンパイル


./deldfree /dev/ada1s1a #コールドランで、状況チェックだけ


./deldfree /dev/ada1s1a -f #実際に処理するときは最後に-fをつける



ただ、このツールはマウントされていないファイルシステムにしか実行できないので


現実的には、作業用の仮想環境があって、そこに処理対象のHDDを追加で繋いでやるのが楽だとは思う。そこでそんなVirtualbox用イメージも作ってみた


http://saifes.dip.jp/~akira/freebsd_rescue.ova


パスワード無しでrootでログインして使う。/root/deldfree/以下に当該ツールがはいっているので、それを対象のディスクにかけてやればいい。





補足


かなり趣味に走ったツールです。0.15%をけちるよりは、作業の楽さをとったほうが一般には良いとおもいますよ。多分。


あとswapパーティションの0 fillも忘れずに。


補足2:高速化のためには?


わざわざ最初に読み込んで0かどうかチェックしてますが、これはどれくらい減ったか確認できるようにするためだけです。多分空きブロックに何が書いてあろうが問答無用で0fillするほうが速いです。





2011年2月2日水曜日

FreeBSDをVirtualBoxでキビキビ使う with geom journal



VirtualBoxを使っていて、一番気になるのはディスクアクセスだと思う。


体感的にものすごく効いてくる。


とりあえず,FreeBSDで一番高速なファイルシステムはgeom journal(gjournal)らしいので、それを使うべく、設定してみた。


普通はPC-BSDのインストーラを使えばいいらしいが、そのために4Gもダウンロードするのは面倒なので、FreeBSDのインストーラのみでがんばってみた。結論から言うと2回FreeBSDをインストールする事になる。


一回目のインストール


本番HDDと一回目の踏み台に使う踏み台HDDを繋いだ状態で、一回目のインストールを行う。(VirtualBoxの設定でHDDコントローラをSATAにするのを忘れずに。)


一回目のインストールで本番HDDのFdisk/Label作業も行って良いが、一つ注意点がある。gjournalはそれなりにでかいパーティーションじゃないと意味がない。従って、デフォルトのように細切れに切るのではなく、今回はswapパーティションと/パーティションのみにする事にした。とりあえず本番HDDは/honbanに仮にマウントしておく。


一回目の起動:ファイルシステム初期化


ここでHDDの状況は以下の通りだとする



ada0s1a 踏み台HDDの/パーティション


ada0s1b 踏み台HDDのswapパーティション


ada1s1a 本番HDDの/パーティション


ada1s1b 本番HDDのswapパーティション



まずは作業するためにアンマウントする。



swapoff /dev/ad1s1b


umount /honban



geom journalを起動



gjournal load



本番HDDのファイルシステムをジャーナル化してフォーマットする



gjournal label -f /dev/ada1s1a


#ここで/dev/ada1s1a.journalだとか/dev/ufsid/[英数字].journalができる


newfs -J -O 2 -L root /dev/ada1s1a.journal #(/dev/ufsid以下に対して行ってもよい)



ここで-Lでラベルをつけているのがミソ、設定が書きやすくなるのでお勧め。


ついでにswapにもラベルをつけてあげる



glabel label swap /dev/ada1s1b



一回目の起動:OSインストール


必要なファイルをインストールするため、再びマウントしてあげる。



mount /dev/ufs/root /honban



インストールはsysinstallを使うが「Option」でインストール先ディレクトリとして「/honban」を指定するのを忘れないように。


インストールはCustom->DistributionやConfigure->Distributionから行う。


/honban/etcの変更


インストール後は/etc/や/boot/以下の設定を行う必要がある。/etcは踏み台HDDの内容をコピーして、fstabを書き換えれば良い。




  • swapに関してはデバイス名を/dev/label/swapに変更。

  • 「/」に関してはデバイス名を/dev/ufs/root、オプションを「rw,noatime,async」に変更。


/honban/bootの変更


カーネルをインストールしただけでは、boot/GENERICというディレクトリ名になっているのでboot/kernelに修正する必要がある。すでに存在しているboot/kernelは空のディレクトリなので消しておく事。(まちがってboot/kernel/GENERICとなると悲しい)


loader.confに以下を足す



ahci_load="YES"


geom_label_load="YES"


geom_journal_load="YES"



二回目の起動


以上の設定がおわったら、インストール完了である。


Virtualboxの設定で、踏み台HDDを取り外して再起動して、見事起動すればOK!





2011年1月22日土曜日

NT京都で前日設営をやる意味



去年も、新しい試みとして招待展示をやる意味(http://d.hatena.ne.jp/akira_you/20100323/)を書いているので、今年前日設営をやる意味を書いておこうと思う。


なんだかんだで、私がお世話係をやるニコ技勉強会もこれで4回目になる。


今年は初めて前日設営日を設定する事にした。


最初のニコ技高槻ミーティングの時は展示する人≒観る人であり、ちょっと巨大なOFF会のような雰囲気で行われた。しかし、年々知名度が上がるにつれて観る人が増えてきており、展示者50人対して観る人が200人となっている。


みんなが、モノを作りネタにするニコ技を楽しんでくれるのは嬉しい事なのだが、これでは展示が主になって作る人同士の交流が難しいねという話なってきた。


特に象徴的なのがBBQで、2009年のBBQでは展示側の人も全員ではないにしろ、展示の手をとめ外にでてBBQを楽しめた。(遅くに着た人は、ネギドッグしか食べるものがなかったりしたけど)


2010年は見に来る人が多くて、展示者はタイミングのがしてBBQを食べる事ができなかったり、BBQをやるというよりも、焼く人と食べる人がわかれてしまって、屋台かよ!っていう状態になっていた。


BBQに関しては、担当の社長が今年はドラム缶コンロをその場で作って、でかい火を用意して、焼きたいモノを持ってきた人が自分で焼けるようにする!と心強い事を言ってくれているので改善されるとは思うんだけど、観る人が多いと展示に徹してしまいがちという問題は以前のこったままになる。


内覧時間を設けるというアイディアも有るにはあったんだが、たかだか1時間程度でゆったり交流ができるかというとなかなか厳しい所もあるし、多分内覧時間なんて設定しても、外が寒い3月だと心情的に効果的な入場制限できるとは思えない。


なので、今回は前日に設営日を設定した。設営といってもニコ技の展示のばあい殆どの展示は90分もあればできる。(去年は一部前日に泊まり込み作業してた人がいたけど)残りの時間を自由に内覧すれば良いと思っている。やっぱり、何かモノを作っている人同士の話というのは非常におもしろいもので、いろんなノウハウを知る良い機会にもなる。そういう時間はゆっくり有った方がより深い話ができるし楽しいんじゃないかと思う。ちなみに、オフィシャルには24時に前日設営時間終了だけど、私がその時間には寝たいぐらいの意味しかないので、当日の雰囲気次第で・・・


ということで去年に引き続き、観る人だけでなく展示する人も幸せになる事を目指してやっていきたいと思います。なんだかんだいって、言っている私本人が展示する人だし、自分の欲を達成できるNTなら、ある程度みんなも幸せになるはずと信じて。





細かいネタ:NT京都のTは高槻のT?


今、ニコ技勉強会と呼ばれていたものは「NT」と呼ばれる。


初めてニコ技有志で集まろうという話が出たのは、MTM(Make Tokyo Meeting)01。その時は不在通知P、尻P、撮影出来ますP,akira_youだけでの参加だったが、初めての経験で非常に楽しかった。


そんなに楽しいなら、いっその事MTMにちんまり参加するんじゃなくて、ニコ技として集まってみようと思って行ったのが、ニコニコ技術部勉強会@高槻。当時はIT系で勉強会ブームだったのでニコ技も「勉強会」と呼んでいた。同時に、個別にNico-tech Takatuki Meeting(略称NTM)だとかNico-tech Nagoya Meeting (略称N2M)等のMTMをもじった略称がつけられていった。


なので、総称としては「ニコ技勉強会」と呼んでいたんだけれども、実体は勉強会というより、展示会・交流会に近いということで、微妙な名前だよねという意見が上がっていた。さらに言うならNTMやN2M等の略称もアルファベット一文字じゃ被りまくりという問題を起こしていた。


そんなとき関西での2回めの勉強会が京都で行われる事になり、当初はNKMと略されていた。そんなとき誰かがNT京都とIRC(だったと思う)発言し、実はすごいわかりやすいのでは?となりNT京都という略称が急遽追加された。それがNT*の始まりなんだけれども、、、当時はNTのTってなに?という状態だったした。今のところ「Nico-Tech meeting」の略って事になっているけれども、実はNTMの流れで考えると高槻かもしれない?


細かいネタ:NTではなんで「主催者」ではなく「お世話係」?


その理由はMake Tokyo Meeting 01まで遡るのだけれども、当時はニコ技ってタグがつけられた人が多分ニコ技だよね?・・・勝手にニコ技って名乗るのはやばいのかな?とネットで叩かれるのを相当おそれて「ニコ技有志」の名でエントリーしている。


その流れをくむNTMでもニコ技有志といいう事をわかりやすくしたかった。有志が勝手に集まって楽しんでいるのであって、別に「ニコ技」という団体すらも存在しない。(このポリシーはニコ技wikiで開催されるNTはほぼみんなその方針を貫いている)


団体も存在しないようなものであっても、事実上場所の手配を行う人はそのイベントの代表であり、普通のイベントなら「主催者」と呼ばれるものである。


でも主催者という名前は、ニコ技という団体など存在しないというポリシーと反するものではないにしろ、ニコ技という団体があると誤解させるには十分なものである。そこで、妙な誤解を生まないために「お世話係」っという名前が使われるようになった。





sshfsをマウントしっぱなしにしてプロセスが刺さる時@FreeBSD。



所謂BBルータがTCPを一定時間で接続解除するせいで、sshfs刺さる時がある。


このとき、topすら動かないし、場合によってはターミナルも起動しなくて焦る。


そんなときは、焦らずにssh経由でログインしてkillall sshfsすれば簡単に復帰する。


umount -f /hoge/mogeしてもだめなので注意。





今時の住宅って・・・



新居(といっても築4年)の屋根裏を昨日チェックしたんだけど、今時の住宅って昔の住宅と作りが違うのね。。。。


まだ、ヤニがバンバン出る勢いの材木を使って建ててあって大丈夫かよと思うけれども、正直、1,2本柱が腐っても大丈夫だろーなーって勢いで柱も筋交いも飛びまくってる。


昔の家だと、この梁腐ったらこの家崩れるんだろうな~ってのがあるんだけれども、そういう部分はちゃんと数年単位で乾燥させてから使ってあるし、できるだけ木の強度を有効利用するため、製材も最低限にしてあって、ぶっちゃけぐんにゃり曲がった梁が多い。


どっちが良いというのはそんなに年数経ってないし分からないけれども、屋根裏に上がる事になるおとーちゃんの立場としては昔の家のほうが屋根裏での作業がしやすくて良かったなぁ。。。





2011年1月16日日曜日

続:クエン酸エッチング (銅用)



なんと、今はダイソーでオキシドール売っているんですね。


なので久しぶりにクエン酸エッチングを試してみました。


用意するもの




  • オキシドール(ダイソーで100円)

  • クエン酸(ダイソーで100円)

  • 食塩

  • 樹脂orガラス容器(念のため150度ぐらいの温度に耐えられるモノ)

  • アルミ(アルミ箔やアルミ缶)


エッチング液の調合




  1. オキシドールを基板が浸る程度に

  2. クエン酸:食塩=4:1ぐらいでギリギリ溶けきるぐらいの量


エッチング


エッチング液に基板をつけて、50度を越えないぐらいに湯煎して暖めます。


(冷えたままでも反応するが、遅い)



補足:ちゃんと暖めて揺らしてやっておけば30分~1時間でエッチングできますが、常温だと一晩かかります。



このとき、オキシドールから酸素が出てきます。銅から出る分には仕方ないのですが、液体から出ている場合は温度高すぎです。エッチング液(オキシドール)の威力が抜けてしまうので注意してください。


廃液処理


基板が30um程度の銅泊片面だとすると10㎠に対して1ℓ程度の水で排水基準以下になるらしいですが、より安全にアルミ箔で銅を析出させる事が出来ます。単純にアルミ箔をエッチング液に入れて、緑色が無くなるまで待てば良いのですが、反応熱が出ますので、アルミの投入は様子をみながら少量行って下さい。(酸素も水素も出る場合があるはずなので注意)


最初大丈夫だからといってアルミを不用意に足すと、以下のように悪循環になって危険です。反応容器を水で冷やす等して、温度を上げすぎないようにできるようにしておくと安心です。



アルミ溶ける→温度上がる→反応速度上がる→温度さらに上がる



反応が終わったら、銅やアルミの粉が溶液にのこっているので濾しとってから捨てて下さい。


捨てる際はクエン酸とはいえ酸なので、大量の水で希釈して下さい。


参考: http://www.edu-ctr.pref.kanagawa.jp/edb/syuuroku_pdf/1/ks20-04.pdf





メモ:アイロンを使った、基板へのレーザプリンタトナーの転写



以下の紙を使うと楽



コクヨ LBP-FP1310N カラーレーザー&カラーコピー用紙<デジカメ写真>A4 30枚





  • パタンを印刷して、紙に基板をダイソーのマスキングテープで固定する。(ダイソーのマスキングテープは耐熱性が高いので良い)

  • 固定した上で、うすい紙で挟む(そうしないとアイロンに光沢紙がはりつく)

  • アイロンによるけど、強で1分ぐらい軽くあいろんがけ。

  • 水で冷やして、ペリッとはがすと転写完了。





2011年1月13日木曜日

メモ portupgradeやpkg_upgradeしたらナンカ動かなくなったときは



まずpkgdbでパッケージの依存関係を修正してみる。



pkgdb -Fa;pkgdb -F



このとき、真面目にportsから入れると時間が掛かりまくるので、追加インストールすべきパッケージを控えておいて終了。以下のようにすればほぼ最新のパッケージを簡単に入れられる。



setenv PACKAGESITE ftp://ftp[適当なミラー].jp.freebsd.org/pub/FreeBSD/ports/[i386|amd64]/packages-8-stable/Latest/


pkg_add -r [パッケージ名]


([適当なミラー]には空文字列か2~9が入る)



パッケージ単位で依存関係が大丈夫でもまだ何かおかしい時は。sysutils/bsdadmintoolをインストールしておいてpkg_libchkを実行する



pkg_libchk



これでライブラリが足りているかのチェックをしてくれる。


エラーが出ているパッケージ、もしくはそのパッケージが利用しているライブラリのどちらかのバージョンが古いのが多くの場合は原因なので、バージョンを上げる。


補足:バイナリでのアップグレード


portupgradeを使っても、pkg_upgradeを使っても、portsをコンパイルすることなくパッケージのアップグレードができるんだけど、一つ注意点がある。


portupgradeはportsnap等でローカルに持ってきたportsで指定されたバージョンをインストールする。


portupgradeを実行する直前にportsnapを行えば最新のバージョンをインストールする事になる。


一方、pkg_upgradeはパッケージ配布サイトの最新パッケージを用いてインストールする。このためportsからインストールするのにくらべ、一定期間遅れたパッケージが利用される。


portupgradeのでバイナリアップグレード


portupgrade では以下のように-Pオプションでパッケージを優先的に使うようになる。


最新のパッケージを取得出来るよう、以下のようにPACKAGESITEを指定する必要があるので注意。



setenv FTP_PASSIVE_MODE yes #所謂BBルータを使っている場合必要


setenv PACKAGESITE ftp://ftp[適当なミラー].jp.freebsd.org/pub/FreeBSD/ports/[i386|amd64]/packages-8-stable/Latest/


portupgrade -P 対象パッケージ



pkg_upgrade(bsdadmintools)を使う場合


バイナリしか持ってこないので、気軽に-aオプションで一気に更新とかできて便利。


ただし、ライセンスの都合上バイナリ配布が許されないものは当然ながらパッケージが存在しないので、


それらはportupgradeのお世話になる事になる、



setenv FTP_PASSIVE_MODE yes #所謂BBルータを使っている場合必要


setenv PACKAGEROOT ftp://ftp[適当なミラー].jp.freebsd.org/


setenv PACKAGESITE ftp://ftp[適当なミラー].jp.freebsd.org/pub/FreeBSD/ports/[i386|amd64]/packages-8-stable/Latest/


pkg_upgrade 対象パッケージ






ちょっと試してみたいportsを半独立の環境に入れる方法 with chroot



FreeBSDのportsは必要なものをガンガン追加して、全部をスケジュール立ててバージョンアップするにはいいんだけど、一つのパッケージだけをバージョン上げてってのには向かないのよね。


そんな人はPC-BSDを使えば良いのだけれども、かといって目の前にあるのはFreeBSDマシンって時の対処方


単純にchroot環境をさくっと作って、そこにサラの状態から試したいパッケージだけを入れる方法です。


まずchroot環境のディレクトリを作ります。例えば/usr/chroot/testとか。



mkdir -p /usr/chroot/test



そこに、FreeBSDを新たにインストールする訳だけれども、sysinstallを使うと簡単にできます。



sysinstall起動


Configure→Optionで、install directoryを/usr/chroot/testに変更


Configure→DistributionでMinimum等お好きな構成を選んでインストール



これで下準備は完了。chroot環境に入る



mount -t devfs dev /usr/chroot/test #devfsをマウントしないとps等が使えない


chroot /usr/chroot/test /bin/csh



あとはpkg_add等で試したいものを入れるだけ。



setenv PACKAGESITE ftp://ftp[適当なミラー].jp.freebsd.org/pub/FreeBSD/ports/[i386|amd64]/packages-8-stable/Latest/


pkg_add -r 試したいパッケージ



chroot環境での注意事項


chrootはjailと違って、親の環境をもろに使えるので、portsを試すには便利な環境ですが、ちょっとだけけ注意が必要です。


ユーザ情報がない

そのままではユーザ情報がないので、chroot環境内で追加するか、親の環境の/etc以下からコピーしてくる必要があります。chroot環境でユーザを追加した場合、親から/usr/chroot/test/以下を観たときファイルシステムにでたらめなユーザ名権限が設定されているように見えるので注意が必要です。


chroot環境でアカウント名Aとして作ったファイルが、親環境では全然関係ないユーザのファイルとして見える場合があります。


ドメインソケットが使えない

デフォルトではchroot環境からX環境を使う事ができません。ほかにも親環境のpostgresqlサーバにchroot環境のpsqlクライアントから繋ぐことができません。可能ならドメインソケットの替わりにINETソケットを使って下さい。


例えばchroot環境でXアプリケーションを実行する場合



親環境で:


xhost localhost


chroot環境で:


setevn DISPLAY 127.0.0.1:0.0


#何か起動



その他の応用:独立バージョン管理


chroot環境でユーザを追加しなければ(もしくは、親環境と整合を取れば)、もっと便利に使う事もできます。


デスクトップ兼サーバとして運用しているとデスクトップアプリはガンガンバージョンアップしたいけれども、サーバアプリはバージョンアップしたくないという事があるかと思います。


そんなときにはchroot環境にサーバアプリを入れるようにすれば、親環境のアプリのバージョンアップの余波(ライブラリ不整合等)で動かなくなるという事はないです。


ただ、上に書いたようにそういう場合はPC-BSDのPBIのほうが便利かもしれません。


他にもchroot環境を複数作っておいて、バージョンアップ時のちゃんと動くかの事前調査に使うのも手ですね。





2011年1月12日水曜日

FreeBSDのreal memoryとavail memoryの差



普段あまり気にせずいたけど、ブートメッセージのreal memoryとavail memoryの差って何だろう。


とおもってググってみたら丁寧な解説をみつけた。


http://unix.derkeiler.com/Mailing-Lists/FreeBSD/hackers/2003-10/0290.html


要約すると、カーネルイメージサイズ(4MBで切り上げ)と仮想メモリ管理用の構造体のサイズ分だけ搭載メモリ容量から引いたのがavail memoryってことらしい。