nemutterのリファクタリングをした

ちょっと次のステップに進もうと思ったので,その為に,
nemutterのコードをリファクタしました.

作ってから全く手を加えていなかったので,実に一年半ぶりに弄りました.
もう,すごいことになってました.

「リストの中からランダムに一つ選ぶ」というコードを

item = list[random.randint(0, len(list)-1)]

とか書いてて愕然とした.疲れてたのかな,,,
とりあえず綺麗に書き直し.

item = random.choice(list)

リファクタついでに次の二つの変更をしました.

  • in_reply_toにreply先のidを入れた

replyとして辿れるようになりました.

  • RTに反応しないようにした

nemutterの発言をRTしても反応しないようにしました.
※ただしRTとQTだけ.Twitter for iPhoneとかの""を使った引用はめんどくさくて未対応

まぁ,大したことじゃないですね.
引っ越しを終えて落ち着いたら次のステップにとりかかろうと思います.

Python Hack-a-thon 2010.07に行ってきた.

簡単にメモしておく.
# そういえば,Python Hack-a-thon #4じゃなかったっけ?名前変わったのかな?
Python Hack-a-thon 2010.07 : ATND
Python Hack-a-thon 2010.07 - Togetter

「Hack」と「Marathon」を合体して作られた言葉。

スーパーハカーな方たちが、会議室やソファーのあたりに集まって、ノートPCで1日中ソフトウェアを集中的にハックする。言わば、ギークのお祭り。
ハッカソンとは - はてなキーワード

自分はPython修論からの現実逃避で勉強していた程度なので,全然ハッカーじゃないのだけれど,Pythonをもっと勉強したくて参加してきた.「会社でpython使ってます」って人ばっかりで,にわかpythonファンな自分は萎縮しきりだった笑.

会場はオラクルのビルだったんだけど,環境良過ぎ.ビル綺麗過ぎ.トイレからの眺めが良すぎて感動した.

続きを読む

@nemutterはねむログのサービスとは一切関係ありませんー

丁度一年くらい前にnemutterというtwitterbotを作りました.
nemutterというのを作った. - yaedaのメモ(試用中)

修論からの現実逃避で作ったbotです.
followして下さっている皆様,ありがとうございます.


自分以外にも使って下さっている方がいるので,
そろそろ改良しようしようと思って,何も手つかずで一年が過ぎました.


そしたら,同名のサービスができちゃったみたいです.
http://www.nemulog.jp/user_data/nemutter.php


twitterを使った睡眠時間記録機能をnemutterという名前で追加されたようで,
機能も名前もガン被りです.

で,勘違いして@nemutterをfollowする人がいるといけないので,声を大にして言います.


@nemutterねむログのサービスとは一切関係ありません.


社会人になって,仕事にも慣れて来たので,そろそろbotも弄りたいなと思っている今日この頃です.
いじょ.

AppleのUSキーボードをWindowsVistaで使う.

VistaでもMacのコンパクトなキーボードを使いたい.
つないでみたら使えたので,そのほか各種設定について.
とりあえずAutoHotKeyが神

AutoHotkey
流行らせるページ跡地

左右のコマンドキーを「英数」「かな」の変換に設定

通常だとwindowsキーとして認識されてしまうので,設定.

もらかなさんを参考にして次のように書くと幸せになれる.
(AutoHotkey)(IMEの制御をする 編) - もらかなです。

IME_ON(hWindow, IsON)
{
	; WM_IME_CONTROL    = 0x0283
	; IMC_SETOPENSTATUS = 0x0006
	bufCurrentDetectMode := A_DetectHiddenWindows
	DetectHiddenWindows, On
	buf := DllCall("user32.dll\SendMessageA", "UInt", DllCall("imm32.dll\ImmGetDefaultIMEWnd", "Uint",hWindow), "UInt", 0x0283, "Int", 0x0006, "Int", IsON)
	DetectHiddenWindows, %bufCurrentDetectMode%
	Return buf
}

LWin::IME_ON(WinExist("A"), False)
RWin::IME_ON(WinExist("A"), True)

Ctrl+Alt+Deleteを使う

AppleキーボードのDeleteはBSとして認識されるので,これもリマップする.

^!BS::^!Del

これでCtrl+Alt+BSがCtrl+Alt+Deleteとして認識される.
幸せです.

MacBookで複数台のカメラを使ってみた

OpenCV on MacBook で同時に2台の1394カメラを使ってみた.」
ちょっと同期したステレオ画像が欲しくなったので,OpenCVを使って複数台のカメラを使うプログラムを書いてみた.

環境

サンプルプログラムの実行

とりあえず,1394カメラ使えんのか?と思って,2台のカメラをつないで,サンプルプログラムを動かしてみた.カメラを使うものならなんでも良いので,OpenCVのインストールパッケージにあったlkdemoを動かしてみた.

opencv-1.0.0/samples/c/lkdemo

実行すると片方のカメラの映像が出てきた.おー素晴らしい!なんかしらんが,なんもせんでも1394カメラが使えとるじゃんか!!
./configure
しても
Use dc1394 & raw1394: no
とか言われてんのに何故??
Use QuickTime / Mac OS X: yes
になってればいいのか?まぁ,とりあえず動いたので良しとする.詳しいことはあとで調べる.

サンプルプログラムを覗く

動いたので,さっそくlkdemo.cを参考に作ってみる.ソースを覗くと,こんな感じになってた.

CvCapture* capture = 0;
if( argc==1 | (argc == 2 && strlen(argv[1]) == 1 && isdigit(argv[1][0])))
    capture = cvCaptureFromCAM( argc == 2 ? argv[1][0] - '0' : 0 );
else if( argc==2 )
    capture = cvCaptureFromAVI( argv[1] );

あー,引数でカメラ選択できるのね.aviファイルも入力できるのかぁーなるほど.とりあえず,cvCaptureFromCAMが使えそうなので,opencv.jpで調べてみる.が,無い.google code searchに聞いてみると,

#define cvCaptureFromCAM cvCreateCameraCapture

とか出てきた.なんだ,cvCreateCameraCaptureと一緒なのね.

プログラムを改造

とりあえず,なんとなく分かったので,書いてみる.
サンプルプログラムのカメラ選択部分を消して,

CvCapture *capture = 0;
capture = cvCaptureFromCAM( 0 );

とシンプルに書き直してあげる.実行すればちゃんと片方のカメラの画像が出てくる.次に2台目のカメラを指定してみる.

CvCapture *capture = 0;
capture = cvCaptureFromCAM( 1 );

実行すると,2台目のカメラの画像が,,,と思ったが,なぜかさっきと同じ1台目のカメラの画像が出てくる.むむむ?変だなー.調べてみると
OpenCV: MacbookでUSBカメラを使う - Cold Water
でも同じような事が書いてあった.参考にさせてもらって,

CvCapture *capture = 0;
capture = cvCaptureFromCAM( 0 );
capture = cvCaptureFromCAM( 1 );

とすると,お!2台目のカメラの画像が出てきた!ありがとうcoldwaterさん!

2台のカメラを同時に読み込む

で,2台同時に取り込むために,こうやって書いてあげる.

CvCapture *capture1 = 0;
CvCapture *capture2 = 0;
capture1 = cvCaptureFromCAM( 0 );
capture2 = cvCaptureFromCAM( 0 );
capture2 = cvCaptureFromCAM( 1 );

結果はダメ.これだと1394カメラとiSightになる.1394の2台目が飛ばされてる??ははーん,ということで,やっぱりこれでいけることが判明.

CvCapture *capture1 = 0;
CvCapture *capture2 = 0;
capture1 = cvCaptureFromCAM( 0 );
capture2 = cvCaptureFromCAM( 1 );

ってか,これでもいける.

CvCapture *capture1 = 0;
CvCapture *capture2 = 0;
capture1 = cvCaptureFromCAM( 0 );
capture2 = cvCaptureFromCAM( 0 );

もはやcvCaptureFromCAMの引数のindexに意味ない.順々に読み込んでいるだけということが分かった.
1394 CAM->iSight->USB CAM
の順なのかな.MacBook内蔵のiSightってたしかUSBだから,後ろの順番はどうなるか分からんけども.