0

mercurialを使ってみていて、リポジトリとか公開してみたりした

バージョン管理ソフトのMercurialを使ってみている(→日本語チュートリアル

バージョン管理はCVSやSVNすら使ったことがなくてzipに固めて日付でファイル名つけてたんだけど、今のところmercurialで困ったことも特になく便利に使えている。120回ぐらいバージョンを経ても25MBぐらいで済んでくれているので本当に助かる。

Subversion等と違い分散リポジトリらしく、ようするにディレクトリの下に.hgという隠しディレクトリができてその中に全てバージョン管理されて格納される。ディレクトリ毎コピーしてもいいし、必要なくなったら.hgディレクトリを削除しても構わない。

Mercurialを利用している主なプロジェクトは、ぱっと探した感じMozilla、NetBeans、OpenSolaris等があった。

なんでMercurialを選んだかというと

  • サーバーが要らなく、オフラインでも使える
  • プログラマじゃなくても使えそう(むしろプログラム書かない人と共同作業する事が多いので)
  • インストールが楽でみんなに使ってもらえそう→ Mercurial binary packages for Windows and Mac OS X
  • Bootcampで共存してるWindows/Mac間でサーバーを介さずにプロジェクトを受け渡したりしたい
  • とにかく色んな所にバックアップを取りたい

という感じ。

MercurialそのものはPython(とCが少し)で実装されているらしく、使うにはpythonをインストールしなければならない。WIndowsとMacならMercurial binary packageだけで動くが。

とりあえず手当たり次第、自分の持ってる環境にインストールしてみた。これでガンガン同期してます。

Ubuntu7.1だとsudo apt-get install mercurialで一発だった。残念ながらSFCのCNS環境はPythonがバージョン1.5なのでどうにもならなかった。

で、せっかくなのでいくつか、リポジトリをさくらサーバーにcloneして公開してみた http://shokai.org/projects/

特にライセンスについて書いていない物はpublic domainです。改変再配布、切り刻んで再利用などご自由にどうぞ

ドキュメントは気が向いたら書く。

ちなみにコマンドの「hg」はMercurial→水銀→元素記号がhg、ということらしい

0

条件付きコンパイルシンボルで実行ファイルを色々作る

VisualStudioではコンパイル時にコンパイラに渡す定数を定義しておいて、コード上のプリプロセッサで実行ファイルにその部分を含めるか定義する事が出来る事をさっき知った。

こういうコードだと、定数ZANMAIが定義されていればざんまい!!されていなければかず助になる。実行中に条件分岐するのではなく、実行ファイルに丸ごと含まれるか/含まれないかが、コンパイル構成プロファイル毎に変化する。#ifZANMAI

MessageBox.Show("ざんまい!!");

#else

MessageBox.Show("かず助!!!!");

#endif

構成プロファイル「NIKU」を新規作成する。

構成マネージャ

プロジェクトのプロパティのビルドで、条件付きコンパイルシンボルをNIKUプロファイル固有の定数として追加しておく

条件付きコンパイルシンボル

この部分を含んでコンパイルするか、含まない実行ファイルを作るかを解釈するようになる。

動作の違う実行ファイルをそれぞれ書き出せるようになると、それだけ設定画面などを作る必要がなくなるのでうまく使えば便利そう

0

C#3.0 – DirectShow.NET2.0でwebcam撮影、JPEG保存する

Windowsでカメラからの画像入力を使うには、Flash(Air)Processing、Max/MSPを除くとDirectXかVideo for Windowsを使わなければならないんだけど、これらをC#から直接使うのはとてもめんどい。

で、DirectX自体はラッパーを介して使えるので問題ないんだけど、DirectShow(カメラの入力に使う)だけはなぜかC#用のラッパーが無いのでDirectShow.NETの出番になる。このライブラリはs.h.log DirectShow.NETで静止画キャプチャでも使ったんだけど、去年ぐらいからDirectShow.NETがver 2.0になってさらに良くなっていた。

ちょっといじってみたが、C++が苦手な馬鹿には便利すぎて感動したので、

webcam撮影→JPEG画像に保存のサンプルを作って置いておきます

■作ったもの

Download (VisualStudio 2008 + C#3.0)

昨日の朝にDirectShow.NET2.0でwebcamキャプチャ、JPEG保存 – 橋本詳解で書いたのとほぼ同じだが、デバイスの選択ができるようになった。

select capture devices

あと、DirectShow.NETを使えば、インストールすると1GBぐらいになるDirectX SDKを入れなくても済むのも嬉しい。

■プログラムの準備

まず準備としてDirectShow.NETのサイトからDirectShowLib-2005.dll本体と、サンプルを手に入れる。

DirectShowLib-2005.dllにパスを通し、sampleに入っているCapture.csもpublic domainなのでコピーしてありがたく使わせていただく。

そして、いくつか使うnamespaceを通す

usingDirectShowLib;

usingSnapShot;

usingSystem.Runtime.InteropServices;

usingSystem.Drawing.Imaging;

■カメラデバイスを取得してプレビュー表示する

なんでもいいが、System.Windows.Forms.Controlを継承しているPanelやPictureBoxやFormなどを、カメラのプレビュー用に用意しなければならない。プレビューを画面に出したくなければVisible = falseしておけばいい。

そのコントロールをCaptureクラスのコンストラクタに渡してやると、cameraのプレビュー表示がリアルタイムに表示されるようになる。

PanelpanelPreview=newPanel();

this.Controls.Add(panelPreview);

Capturecam=newCapture(0,640,480,24,panelPreview);//device,x,y,24FPS,preview


Capture()の第一引数は画像入力デバイスのindexで、0からはじまる。存在しないデバイスindexを選んでしまうとエラーになるので注意。FPSやカメラのXYサイズも指定できる。

■現在のカメラ表示を保存する

別のコントロールを用意して、そっちに保存する。今回のサンプルアプリの場合は、左の動画が右に静止画としてキャプチャされる。

PictureBoxにキャプチャするなら

PictureBoxpicBox=newPictureBox();

this.Controls.Add(picBox);

IntPtrm_ip=cam.Click();

Bitmapb=newBitmap(cam.Width,cam.Height,cam.Stride,PixelFormat.Format24bppRgb,m_ip);

b.RotateFlip(RotateFlipType.RotateNoneFlipY);//上下反転しているので直す

picBox.Image=b;

Image型で静止画をコピーできたので、JpegファイルやPNGファイルなどに書き出すのも簡単。

picBox.Image.Save("captured.jpg",ImageFormat.Jpeg);

もちろんPictureBoxを経由しないで、直接保存もできる

b.Image.Save("captured.jpg",ImageFormat.Png);

カメラを閉じるのを忘れずに。

FormのFormClosedイベント内などでDispose()を呼べば良い

cam.Dispose();

ちなみに、現在接続してあるデバイスの一覧はDsDevice.GetDevicesOfCat(FilterCategory.VideoInputDevice)の中に入っている。

今回のサンプルでコンボボックスの中にデバイス名一覧を突っ込んだのはこんな感じでやった

comboBoxDevices.Items.Clear();

foreach(DsDevicedsinDsDevice.GetDevicesOfCat(FilterCategory.VideoInputDevice))

{

comboBoxDevices.Items.Add(ds.Name);

}

comboBoxDevices.SelectedIndex=0;

ComboBox.SelectedIndexで現在選ばれたデバイス名のindexがわかって、それをCaptureのコンストラクタのデバイスindexとして使えば良い。

0

SFCのFTPサーバーに接続する(ポートフォワード)

どうやら学校のcczのFTPサーバーを使いたい人がいるみたいなので書いておく

Making Things Talk POCHI: sfcのFTPサーバってなんやー

CNS Guideも最近更新されてないみたいで、FTPと検索しても情報はなんも出てこなかったけど、確かにSFCにはFTPサーバーが存在する。ただし見えない所に隠されている。

■sshトンネリング

FTPで接続するにはPuttyなどを使ってsshトンネリングでFTPへの道を通してあげないとならない。

TeraTermでもできる。

Puttyで、ccz00のFTPサーバーへの道をトンネリングする例。

まずccz00に接続してから、トンネルの設定をする

この例では、localhost(自分のPC)の8021へのアクセスを全部 ccz00.sfc.keio.ac.jp:21 に転送するようになる。

21はFTPのportですね

ftp portforward on ssh

FFFTPの場合の例。なぜか自分に接続しにいきましょう。するとさっき設定したputtyによって学校のサーバーに転送される。

ftp portforward on ssh

もう一つFFFTPの設定。ポート番号をさっきputtyで設定した8021にする。あとSFCの場合はPASVモードにするのを忘れずに。PASVじゃなくても良いサーバーもあるかもしれない。

ftp portforward on ssh

Fwinkでやりたいなら、FTP SettingsのところのFTP Serverに localhost:8021 を指定すればいいんじゃないだろうか

0

3980円ジャンク液晶モニタ

CoCoNet液晶工房で5インチぐらいの液晶買ってきて組み立てたら動いた。

3980円は安いし、1980円のミニRGBコンバータも入っていたのでじゃあ液晶本体はいくらなんだよと思いながら迷わず購入。日曜の時点でまだ何個か在庫はあった。

この店は秋葉原の北東側のジャンクエリアのはずれの公園のあたりにある店で、ワク無しの液晶やタッチパネルが単体で、ずば抜けて安く手に入る貴重な店。あとバラでは手に入りにくいフィルムケーブルがバラ売りされててとても良い。

Wiiに接続してマリオカートやってみた。小さいので姿勢が変わって脇が閉まった細かいハンドリングになる。普段はもっとコントローラ振り回してます



それなりの画質で出てるけど、文字を見るのにはつらい。ブラウン管のテレビぐらいの画質だった。動画見る分にはそんなに問題ないし、サーバー監視モニタにしたりchumbyを自作したり色々使い方はあるかも。コンポジット信号くらいならマイコンから作ることもできるしな

3980円で液晶、制御基盤、RGB信号/コンポジット信号コンバータの3つがついてくる。

この写真でははんだづけした後だけど、この線は自分ではんだづけしろとの事なので説明書に従ってはんだつけた。

完成品は5980円で売ってた。

DSCF2285

R、G、B、Sync、VCC、GNDの5つを接続するだけ。付属のケーブルが10芯ぐらいあったが、使わない線は全部切って捨てた。

DSCF2286

VCCとGNDはこのケースの下にある。一見どこから開けるかわからなかったけど、思い切ってペンチなどを突っ込んだら簡単に外れた

DSCF2281

電源にACアダプタ12Vを接続して起動。8〜15Vなら起動するらしい。秋月の店先で500円ぐらいで売ってた12Vで動いた。

手近なコンポジット信号(黄色い端子ね)を出すものがWiiだったので接続してみた。

緑がキツいが、RGBコンバータの半固定抵抗を回すことでRGB比、ブライトネス、コントラストなどを調整できた

RGB比以外は液晶側の制御基盤でも調整できる。

DSCF2283

Mac miniにもコンポジット出力があるので接続してみた。文字はつぶれて読みにくい。

あと、かなり見る角度によって色が変化する。安いんだからしょうがないか。

DSCF2289

DSCF2290