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の二日目に提唱した、テクノバルーン部の下働きを私がする予定です。回路つくるよ~。