MISO(Multi Input Single Output)なキューが見つからなかったので作った

ひとつのスレッドで複数のキューを待ちたかったので作った.

https://gist.github.com/1219608

popするときは,popされたキューと値の両方がかえってくる.
どのキューも空のときはブロックされる.

キューでselect的なことをしたかった.

秋葉原で買ってきた謎のジャンクWebカメラ@200円のドライバを探す旅


秋葉のジャンク屋で買った200円のwebカメラ、型番、メーカーなど一切書いてない。上部に唯一「up」っていうロゴがあるだけ。
とりあえずWindowsUpdateから落ちてくるドライバではうまく行かなかったので、正しいドライバを見つけるまでの方法をメモ。

はじめに、Windowsに挿して認識された時は「Look312P」というデバイス名だったが、このデバイス名はどうやら正しくないようで、どこかで見つけてきたドライバを入れても、カメラは認識するものの画像は表示されず。

バイスのベンダーとプロダクトを調べる

http://digital.ni.com/public.nsf/allkb/1DEC366794E3584A862570980007A73A
でダウンロードできるUSBViewで、このカメラのベンダーidとプロダクトidを調べる。

idVendor 0x0AC8
idProduct 0x301B

調べた結果がこれ。
この情報を元にドライバを探す。

バイスを特定する

http://www.usb.org/developers/tools/comp_dump
USBの公式ベンダーid一覧から0x0AC8→10進数で2760を探すと、ベンダーは"Vimicro Corporation"だということがわかる。

Vimicro Corporationのwebページを見てみると、どうやらチップのメーカーぽい。

Vimicro Products
ダウンロードセンターに行ってみるものの、どのチップを使ったものだかわからない。

プロダクトidを調べよう。
http://www.qbik.ch/usb/devices/
で"0x0AC8"を検索すると、ありました、"0x0ac8:0x301b"。これが同じチップを使ってるUSBカメラっぽいですね。
この中の適当なデバイスの詳細を見ると"Vimicro Z-star chips zc0301 Vga webcam 640x480 320x240 software by the driver 352x288 176x144"って書いてあるので、どうやらzc0301チップを使ってるらしい。

さっきのダウンロードセンターにはzc0301っぽいのは3つあるけど、"zc0301PL"をなんとなく選んだ。なんとなく。これでたぶん動かせる。

ドライバのインストール@vista

ダウンロードしたドライバのzipファイルを適当な場所に解凍しておく。
バイスマネージャから該当のカメラをダブルクリック→「ドライバ」タブから"ドライバの更新"→"コンピュータを参照して〜"→解凍したフォルダを選択
で完了

さっき解凍したフォルダかC:\Windowsとかにあるamcap.exeで動作確認。

カメラのスペック


チップの仕様から、VGAが最高だと思われる。
320x240で30fps、640x480で15fpsの一般的なカメラっぽい。
キャプチャがこんな感じ。200円だし文句はない。

ユーザー権限でruby1.9.1@x86_64-linuxをインストールする

ユーザー権限しかないサーバーで、Rubyの最新版を入れてみる。

最新版Rubyをインストールする

$ mkdir ~/src # 作業用ディレクトリ
$ cd ~/src    # 作業用ディレクトリに移動
$ wget ftp://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.1-p243.tar.bz2
        # 最新版を取得
$ tar xjvf ruby-1.9.1-p243.tar.bz2 # 解凍
$ cd ruby-1.9.1-p243 #解凍したディレクトリに移動
$ ./configure --prefix=$HOME optflags=-O3
        #インストール先を $HOME にする
        #x86_64環境だと optflags=-O3 をつけないと途中で止まる
$ make # コンパイル
$ make install # インストール

インストール先は書き込み権限のある $HOME
x86_64環境だと、optflags=-O3がないとコンパイル途中で止まってしまった
(via 1.9.1のビルドがparse.cのコンパイルで詰まっていた件 - `The rubyist'【えぬ】の日記 - Rubyist)

環境変数の設定

bash,zshなら~/.bashrc,~/zshrcに書くといいと思うよ

export PATH=:$HOME/bin:$PATH
export INCLUDE=$HOME/include

INCLUDE は gcc とかが見に来る。

RubyGemsを使ってみる

$ rubygems install twitter
/path/to/home/lib/ruby/1.9.1/rubygems/package.rb:10:in `require': no such file to load -- zlib (LoadError)
#以下略

zlibが必要ですかそうですか。
rubyインストール時に先にzlibにパスを通しておくといいみたいだけど知らない。
(via ruby 1.9.1-p0 @ Visual C++ 2005 - anon_193の日記)

zlib拡張のコンパイル・インストール

zlibはrubyアーカイブのext/zlibにあるのでコンパイルしに行く

$ cd ~/src/ruby-1.9.1-p243/ext/zlib
$ ruby extdonf.rb
checking for deflateReset() in -lz... no
checking for deflateReset() in -llibz... no
checking for deflateReset() in -lzlib1... no
checking for deflateReset() in -lzlib... no
checking for deflateReset() in -lzdll... no

ぐぬぬ。zlib自体が必要なようですね。

zlib自体のコンパイル・インストール

$ cd ~/src
$ wget http://www.zlib.net/zlib-1.2.3.tar.bz2
$ tar xjvf zlib-1.2.3.tar.bz2
$ cd zlib-1.2.3
$ ./configure --prefix=$HOME -s

インストール先は同じく$HOME

  • sをつけないと、この後の ruby extconf.rb で
libz.a: could not read symbols: Bad value

になるので、つける。意味は知らない。
(via Derakunの備忘録 Clamscanのインストール)
ここで先ほど環境変数INCLUDEを指定していないとヘッダが見つからないだの言われると思う。

rubyアーカイブに戻ってもういちどruby extconf.rb

$ ruby extconf.rb
checking for deflateReset() in -lz... yes
checking for zlib.h... no

むー、環境変数INCLUDEは見てくれないようだ。だから自分で指定する。

$ ruby extconf.rb --with-opt-include=$INCLUDE
checking for deflateReset() in -lz... yes
checking for zlib.h... yes
checking for kind of operating system... Unix
creating Makefile

Makefileができました。

$ make
$ make install

インストール完了!

気を取り直してRubyGemsを使ってみる

$ rubygems install twitter
When you HTTParty, you must party hard!
Successfully installed rubyforge-1.0.4
Successfully installed rake-0.8.7
Successfully installed hoe-2.3.3
Successfully installed ruby-hmac-0.3.2
Successfully installed oauth-0.3.5
Successfully installed mash-0.0.3
Successfully installed crack-0.1.4
Successfully installed httparty-0.4.3
Successfully installed twitter-0.6.15
9 gems installed

できた!やった!

$ gem install json
Building native extensions.  This could take a while...
Successfully installed json-1.1.9
1 gem installed

Native Extensionsもこの通り!
※ちなみに ~/.gemrc 内で gem: --no-ri --no-rdoc を指定しています。

感想

面倒。rootがあればapt-get install hogeだし。
RubyGemsが1.9系からは本体同梱になったので手間が省けているけれど、1.8系でやろうと思ったらもう一つ手間が増える事になるね。

疑問

今回コンパイルしたzlibの本体は$HOME/libにインストールされたんだけど、その後のruby extconf.rbとかはどうやってその場所を見つけたんだろう。includeパスの../libとかを自動で探してくれるとか?
誰か教えてくださいな。

追記

ちなみに、zlib本体などは自分でコンパイルせずにdebパッケージなどを自分で解凍して配置するのもいいとおもう。けど手間は大差ないかも。

今までSleipnir一途だったが1ヶ月間Firefoxを使ってみた

はじめに

Firefox3.5が出たのをきっかけに、Sleipnir一途だったが、1ヶ月間「メインで」Firefoxを使ってみた。この記事はそのまとめと感想である。
Firefoxは、たくさん拡張があって便利だけどいまいちそれぞれの拡張もかゆいところに手が届かない、そんなイメージがあった。それと、SleipnirHeadline-Readerが便利で手放せなかったというのもある。

[2008/8/12追記]使用環境

比較記事なので環境を記した方がいいですね。追記します

Firefoxを使った感想

あちこち拡張を探し回って、かなり使いやすいFirefoxができあがった。エンジンも優秀だし、移行できるならしてしまいたいと思ったが、やはりいくつかの点では不満が残った

Firefoxがよいと感じたところ

表示エンジン

悪名高きIE系のTridentエンジンとさようならできる。Tridentがいくら頑張ってるとはいえ、現状では"比べてしまうと"Geckoが優秀。スクロールのなめらかさなどは全然違う。

履歴関連

見たページをインクリメンタル検索できるのは便利。Sleipnirは履歴検索が出来ないので全然だめ。

IE7風のお気に入り・履歴表示(bookmarks history panel)

ページ表示領域を圧迫しない形でお気に入りや履歴にアクセスできる。Sleipnirでもサイドバー+Nun!で代替できそうだが、Nun!自体が問題ありで使えない(エクスプローラーバーパネルの表示でページ表示領域を少し圧迫してしまう)

リンクバーのアイテムタイトルを非表示にできる(Smart Bookmarks Bar)

[2009/8/12追記]Shade LinkBar Extensionで可能でした
リンクバーによく使うサイトのファビコンだけを大量に並べるのは意外に便利。Sleipnirでもタイトルを空白にする事で可能だが、マウスオーバーでもタイトルが表示されない弊害がある。

検索エンジンを簡単に追加できる(Add to Search Bar)

検索エンジンを簡単に追加できる。SleipnirはURLなど全部手作業で入力しなくてはいけないので面倒くさい。

ウィンドウを複数枚開ける

目的ごとに複数のウィンドウを開ける。タブが多くなってきたら2枚目のウィンドウ、みたいな使い方ができる。SleipnirはMDIなので複数ウィンドウとかできない。

安定している

というか、Slripnirが不安定なんだと思う。よく落ちるし。タブを一気に閉じたときにしばらく止まるのもどうにかならないかな。Sleipnir。クラッシュしたときの復元確認もよい。
[2008/8/12追記]Sleipnirがtest版だから不安定というのもあるかもしれない。が、正式版でも安定しているとは言い難い(自分の環境では)

Sleipnirがよいと感じたところ

各機能の作り込み

拡張にもよるけれど、Firefoxの拡張はかゆいところに手が届かなかったりする。それに対しSleipnirの設定はごちゃごちゃしているけれどだいたいやりたいことはできる。

RSSリーダー

好みの問題だけれど、Headline-Readerに匹敵するものはFirefoxとWebベースのサービスにはなかった。Google Readerなどはどうも使いにくい。

ドラッグ&ドロップ系拡張

FirefoxにもEasy DragToGoがあるが、反応が悪くて使用していてストレスだった

検索バー

文字列入力後に検索エンジンを選択すると同時に検索、というのがどうしてもできない。惜しいものはあったけれど。

プロキシが簡単に変更できる

FirefoxではProxy Toolbarがあるが、選択肢から選ぶ形式ではなく、その場で毎回アドレスを打ち込まなくてはいけなかった。Sleipnirではメニューから一覧より選択で簡単に変更できる。

マウスジェスチャFlash上でも使える[2009/8/12追記,再び追記]

FirefoxFlash上でマウスジェスチャが使えない。結構ストレス。
使う方法もあるらしい ↓ ブコメより

id:efcl マウスジェスチャ on Flash http://orera.g.hatena.ne.jp/miya2000/20070315/p1

まとめ

個人的にはRSSリーダーSleipnirのほうがよいのでSleipnirを使う事になりそうだけれど、Firefoxもとても魅力的だった。Sleipnirに無い便利な機能がたくさんあるし。なにより安定度が違った。
ただ、それぞれの拡張の動作が結構いいかげんだったり競合したりするあたりは、ほとんど純正品のSleipnirのほうが良いと感じた。
結論としては、Firefoxは優秀。ただSleipnirに慣れていると移行できるほど1対1対応の拡張はないから移行できない。

付録1 Firefoxに入れた拡張

最後に、Firefoxに追加した拡張をSleipnirとの対応を示しながら挙げていく

  • Adblock Plus
    • 広告ブロック
    • [Sleipnir]相当機能なし
  • Add to Search Bar
    • 検索エンジンを追加する
    • [Sleipnir]手動で追加は可能だが、右クリックから簡単に、とはいかない
  • autoHideStatusbar
    • ステータスバーを非表示にしてマウスを近づけると表示
    • [Sleipnir]相当機能なし- AutoPager
    • ページを継ぎ足し表示する
    • [Sleipnir]AutoPagerize(Seahorse)
  • bookmarks history panel
    • IE7のようにツールバーのアイコンで表示領域に被さるようにお気に入り・履歴を表示
    • [Sleipnir]相当機能なし。サイドバー+Nun!で代替(ただし、Nun!は別の問題があって使いにくい)
  • Configuration Mania
    • 通常のオプションにない細かいオプションを設定
    • [Sleipnir]もともと通常のオプションが細かい。
  • Copy Links
    • 選択範囲内のリンクを抽出
    • [Sleipnir]LinkExtraction
  • Download Statusbar
    • ステータスバーの上段にダウンロード状況を表示
    • [Sleipnir]相当機能なし
  • Easy DragToGo
    • リンクや文字列をドラッグ&ドロップでいろいろな動作をする
    • [Sleipnir]SuperDrag Extension
  • Favicon Picker 2
    • リンクバーのアイコンを任意設定
    • [Sleipnir]相当機能なし
  • File Title
    • ページの保存時にデフォルトファイル名をページタイトルに
    • [Sleipnir]IE系は標準動作
  • Firebug
    • javascriptやHTML,CSSの解析など
    • [Sleipnir]相当機能なし。一部HawkEyeで可能も使いにくい。
  • FireGestures
  • Fission
    • アドレスバーに読み込み状況などを表示
    • [Sleipnir]相当機能なし
  • GooglePreview
    • Google検索ページにページプレビュー画像を表示
    • [Sleipnir]Seahorseに相当機能を持ったScriptあり
  • Greasemonkey
    • 特定のページで任意のJavascriptを実行
    • [Sleipnir]Seahorse。ただし、インストールがワンクリックで出来ないので不便
  • Hatena Bookmark
    • はてブの件数表示や追加ボタン・サイドバーなど
    • [Sleipnir]Hatena Bookmarker
  • Hide Menubar
    • メニューバーを隠す
    • [Sleipnir]標準機能
  • IME and DiMENSiON
    • IMEのON/OFFでテキストボックスの背景色を変える
    • SetCaretColorがFirefoxでは効かなかったので入れた。Sleipnir(IE系)は効く
  • Link Alert
    • リンク先の情報をアイコンで表示
    • [Sleipnir]Seahorseに相当Scriptあり
  • Locationbar²
  • Make Link
    • ページorリンクのタイトルやURLをいろいろな形式でクリップボードにコピー
    • [Sleipnir]Scriptで追加可能。ページのタイトル,URLは標準機能でコピー可能
  • Peers
    • IE7風の検索バー候補表示
    • [Sleipnir]IE7風どころか、検索候補表示機能が未だ未実装
  • Proxy Toolbar
    • プロキシを簡単に切り替える
    • [Sleipnir]メニューから切り替えられる
  • QuickRestart
    • 「再起動」をメニュー&キーボードショートカットに追加
    • [Sleipnir]メニュー・ショートカット共に自分で追加可能
  • Searchbar Autosizer
    • 検索バーの中身によってサイズを変更
    • [Sleipnir]相当機能なし
  • Smart Bookmarks Bar
    • リンクバーのアイテムのタイトルを非表示
    • [Sleipnir]相当機能なし。タイトルを空白にする事で代替
  • Speed Dial
    • 新規画面に任意のページへのリンクを表示
    • [Sleipnir]Seahorseに相当機能を持つScriptあり
  • Tab Mix Plus
    • タブ機能拡張
    • [Sleipnir]多くの機能は標準実装
  • Toolbar Buttons
  • Weave
    • 複数台のPCでお気に入りなどを共有・同期
  • XUL/Migemo
    • ページ内検索でmigemo(ローマ字による日本語検索)を使えるようにする
    • [Sleipnir]相当機能なし
  • Zoom toolbar
  • テキストリンク
    • テキストのダブルクリックで非リンクのURLを開く
    • [Sleipnir]Seahorseで相当機能あり

付録2 Sleipnirに対する要望

  • もっと安定させて!
    • もう既に頑張っているとは思うけど。
  • ツールバーへ任意のボタンを追加したい
  • 任意の場所へツールバーボタンを配置したい
    • 標準ツールバーにしかボタンを置けないと、ボタンの位置が半固定になってしまう。例えばIE7chromeのようにページ右上にもボタンを配置したい
      • ボタンを置けるだけのツールバーがあればいいんだけど
  • Nun!相当の機能の本体実装
  • リンクバーにタイトル非表示機能を
    • タイトルを空白にしても右側に微妙な隙間ができる
    • それには目をつむっても、マウスオーバーでタイトルが表示されないのは困るときがある
    • [2009/8/12追記]Shade LinkBar Extensionでできました。自動的に隠さない設定もあれば良いんですが。。。
  • タブの最低・最大サイズ指定
    • 1段表示のとき、最低・最大サイズを指定して、タブが指定サイズ以下にはならないようにしてほしい
  • お気に入り・履歴の共有・同期
    • 複数台のPCで共有・同期できるのはすごく便利だった
  • 履歴関連をまともにしてほしい
    • 履歴の検索も出来ないってどういうことよ。いっぱい見た後じゃ探すの大変じゃん。

電子工作をする人のためのSleipnir用検索エンジン設定

Sleipnirの検索バーから直接電子部品を検索するときの設定パラメーターです。

ただし、「アイコン」は、各URLのものをダウンロードしてresources\skins\default\toolbar\SearchBarに適当な名前で配置してください。

秋月電子(4/3更新)

http://akizukidenshi.com/catalog/default.aspx
秋葉原と言ったらココ。個人的には。
品揃えは必ずしも良くないけど他には売ってないものが売ってたり、激安だったり。

URI http://akizukidenshi.com/catalog/goods/search.aspx?search=x&keyword={all}
アイコン http://akizukidenshi.com/img/usr/favicon.ico
エンコード URL ENCODE
メソッド GET

千石電商

http://www.sengoku.co.jp/
店内が秋月に比べてしっかり整理されて棚に入っていたり、部品を探しやすい。

URI http://www.sengoku.co.jp/mod/sgk_cart/search.php?multi={all}&cond8=and
アイコン http://ddd.usamimi.info/sleipnir/misc/sengoku.ico(自作してみた)
エンコード URL ENCODE
メソッド GET

マルツ パーツ館

https://www.marutsu.co.jp/user/index.php
店内が綺麗、棚にとても綺麗に整理されている。上の2店に無くてもこっちにはあることもよくある。
ただ、高い。綺麗に整理された棚にお金を払うつもりで。

URI https://www.marutsu.co.jp/user/ichiran_mid.php?QUICK_SEARCH=1&dmm=%82%c9%82%d9%82%f1%82%b2%82%cd%82%f1%82%c4%82%a2%82%e6%82%a4%82%cc%82%e0%82%b6%82%ea%82%c2%82%c5%82%b7%81B%82%b1%82%ea%82%f0%82%a2%82%ea%82%c8%82%a2%82%c6%94%bb%92%e8%82%c9%8e%b8%94s%82%b5%82%dc%82%b7&KEYWORD={all}&DAI=
アイコン -
エンコード URL ENCODE
メソッド GET