2009年10月25日日曜日

Ubuntu UWSCのようなキーマクロツール・ライブラリの紹介

色々探してきた中でXLibのラッパーC#版が無いか探して見たところ、

Portal.CLI (公式だけが消えて、2006年版のソースのに公開されているもの)
dotgnu(gnuプロジェクトの.NET版、Portal.CLIと同じもの?)
ironahk (AutoHotkeyをC#に書き直したもの)

の3つを見つけた。

必要なソースだけ(XLibのPInvoke部分)を取り出すなら両者どちらでも同じなのだが、
目的の機能を現在進行形で開発しているironahkを今回使ってみる。

http://code.google.com/p/ironahk/
公式ページを見てみると、ソースのみ公開らしいので、ソースがあるページへ行ってみると、
Gitを使ってダウンロードしてmakeコマンド打ってみたらエラーが出たので、
バグフィックスされるまでここまでとする。。

Monoを用いてゲーム製作に使えるフレームワーク

taoframeworkというものがある。これはWindowsやLinuxに依存する部分は別々に実装されていて、
対応させたいプラットフォームのコードを各々書けばいいようだ。また、1つのexe内で切り替えて使い分けてくれるらしい。

導入手順
1.synapticでlibtaoframeworkで検索し、すべてインストールする。
ffmpeg, lua, freetype, physfs, sdl, ftgl, freeglut, openal, ode, opengl, devil

2.Monodevelop起動し、ソリューション作成して、
「参照」→「参照ライブラリの編集」
ここで使いたいライブラリをインポートすれば良い。

サンプルコード等出来たら別の機会に公開しようと思う。

参照元
http://d.hatena.ne.jp/shive/20090113

2009年10月24日土曜日

Ubuntuでキーマクロ(UWSC)見たいな事をするツール

UWSCみたいな事をUbuntuでやりたい!という方にいいツールを発見。

xautomation - Control X from the command line, and find things on the screen

今回はその中のxteを利用して自動化を行います。
#というか自動化スクリプトを書く

man xteに細かいことは書いてありますが主に

xte 'key [KEY]'
xte 'keydown [KEY]'
xte 'keyup [KEY]'
xte 'mousemove [x座標] [y座標]'
xte 'mouseclick [ボタン]'

などで操作可能です。

KEYはA,B,Cなどの英字キーで、Shiftなどの特殊キーはおおむねそのままですが、
man xteの下の方にガイドがあります。

x,y座標は絵を描いたりGUIプログラミングした人ならわかると思いますが、
左上が[0,0]、解像度にもよりますが右下が[1280,1024]などとなります。
わからなければ xte 'mousemove 200 300' などとCLIで実行し、どこに
マウスカーソルが動くか確認しましょう。

mouseclickのボタンは数字のようで、1で左クリック3で右クリック、などとなります。

これらを組み合わせてスクリプトを作成します。

#!/bin/sh
xte 'mousemove 260 10'
xte 'mouseclick 1'
sleep 10
xte 'keydown Alt_L'
xte 'key D'
xte 'keyup Alt_L'
xte 'str http://'

参考元:
http://ameblo.jp/neetse/entry-10355492305.html

2009年10月21日水曜日

Ubuntu 物理エンジン chipmunkをコンパイルする

まずSynapticでFreeGlutをインストールしなければならないので、
1. libGlutで検索して、libGlut3、libGlut_devをインストール。(依存関係でFreeGlutも選択される事を確認)

2.展開したフォルダに移動してコンパイルするコマンドを打つ。

cd Chipmunk-4.1.0
cmake .
make

3.動作チェックしてみる
この3つが正常に出来たら、
chipmunk_demos

というDemo実行ファイルが生成されるので

./chipmunk_demos

で動作確認してみる。
1~5で様々なテストに切り替えが出来る。

C# SerialPortのエラー「UnauthorizedAccessException」対策

「UnauthorizedAccessException」
このエラーはUSB-シリアルケーブルを使っていて、
ケーブルが抜かれた時に発生します。

デバッガで問題箇所まで簡単に追跡できるけど、
Try~catch文で囲ってもCatchした後に、プログラムが終了してしまう。
さて、困った。

この問題の原因は、
ファイナライザ内で発生する未処理の例外は、アプリケーション側でキャンセルする事はできない事。

つまり、ファイナライザの中で例外が発生しないように実装すればいいので、
解決策はエラー発生したコンポーネントクラス(SerialPort)を継承して、
その中で「UnauthorizedAccessException」エラー処理を実装すればいい。

具体的には、
SerialPortクラスを継承したクラス内で
アタッチ・デタッチ処理を実装、COMポートの定期チェックとDispose時に行う方法を取る。する。
@2011.02.28 修正
COMポートの定期チェックは継承クラス外で行う。(やっておくと安全)


下記継承クラスを使って、Serialコンポーネントと置き換えてやればよい。
/// 
/// USBタイプのシリアルポートを抜くとアプリケーションが異常終了する現象を
/// 回避するための SerialPort 継承クラス
/// 
public class SafeSerialPort : System.IO.Ports.SerialPort
{
    bool userOpen = false;
    System.IO.Stream SafeBaseStream = null;

    public new void Open()
    {
        base.Open();
        userOpen = true;
        SafeBaseStream = this.BaseStream;
    }

    protected override void Dispose(bool disposing)
    {
        if (userOpen && base.IsOpen == false)
        {
            // 予期せず COM ポートが閉じている
            try
            {
                userOpen = false;
                if (disposing)
                {
                    SafeBaseStream.Close();
                }
            }
            catch(UnauthorizedAccessException)
            {
                // 必ず例外が発生するが 無視する
            }
        }
        base.Dispose(disposing);
    }
}

2009年10月20日火曜日

Pidgin でツイッター

pidgin用Twitterプラグイン開発されているようなので紹介。
http://www.honeyplanet.jp/pidgin-twitter/

twitterを使う方法を箇条書きで説明すると……

1. ぴじつたのプラグイン設定の一ページ目「Account」の「twitter」欄に”ユーザー名”を記入
2. 同じページの一番下の「Get/post statuses via API」にチェックを入れる。
3. すぐ下のテキストボックスに”パスワード”を記入。
4. Googleトークのアカウントで仲間としてtwitter@twitter.comを追加する。
5. オフライン&認証されてないが、そのまま何か話しかけてみる。
6. きっとtwitterに反映されているはず。

2009年10月17日土曜日

Ubuntu USBカメラを使う

1.SynapticでCheeseを入れる。
2.カメラを接続する。
3.アプリケーション→サウンドビデオ→Cheeseウエブカム・ブース

これでもし移らない場合は、

4.Synaptic
qc-usb-source
qc-usb-utils
qcam
辺りを入れてみると良いかも。(未確認)

2009年10月15日木曜日

Firefoxで手軽にYoutubeダウンロード

アドオンを追加すると、
Youtubeで動画を開くと「download as MP4」というリンクが表示されるようになる。

https://addons.mozilla.org/ja/firefox/addon/11869

C#上でのChar型は2Byte

通信データを扱う時、知らずにCharでやるとはまるのでメモを残しておく。

c# DLLImportする関数の引数にコールバック関数を渡す方法

基本コールバック関数はDelegateされたものを渡す。
そして渡すコールバック関数のポインタは、staticな領域もしくはClassで生成するdelegeteしたポインタを管理する事で実現できる。(ガベージコレクションにてポインタ回収されるのを防ぐ)

参照元:http://jp.rubyist.net/magazine/?0021-RubyWithCSharp#f05
----
private static List MethodDelegates = new List();

public delegate VALUE CallbackArg0(VALUE self);
[DllImport(RubyDll)]
private static extern void rb_define_method(VALUE klass, string name, CallbackArg0 func, int argc);
public static void rb_define_method(VALUE klass, string name, CallbackArg0 func)
{
MethodDelegates.Add(func);
rb_define_method(klass, name, func, 0);
}

// 使い方
Ruby.rb_define_method(rb_cString, "show_message", delegate(VALUE self)
{
MessageBox.Show(Ruby.StringValuePtr(self));
return Ruby.Qnil;
});

2009年10月14日水曜日

UbuntuでWindowsツールを手軽に動かすには

1.Synapticでwineをインストールする。

2.Exe形式のファイルを右クリック「開き方」で「追加」選択。
コマンドを直接指定する→参照ボタンをクリック、run-detectorsを選択。

ubuntu 9.10例
'/usr/share/binfmt-support/run-detectors'

これでexe形式のものをスマートに実行できるようになる。

Ubuntu LZH形式を解凍する

1.Synapticでlhaをインストールする。

これで標準のアーカイバで解凍出きるようになる。

2009年10月12日月曜日

Ubuntu バーコード認識をさせてみる

参照リンク
http://zbar.sourceforge.net/


1.Synapticでライブラリをインストール
libzbar0
libzbar-dev
zbar-tools
上記以外で他の依存するライブラリはまとめて入れる。

必要なヘッダー・ライブラリ類は下記フォルダに格納される。
(上記情報はSynapticパッケージマネージャのlibzbar0を右クリックしてプロパティ、インストール済ファイルを見れば分かる)
/usr/include/
/usr/include/zbar/
/usr/lib/libzbar.so

2.zbar-toolsで実際にバーコード解析を行ってみる。

****/usr/bin$ ./zbarimg ~/barcode.gif
CODE-39:0000010500129
scanned 1 barcode symbols from 1 images in 0.02 seconds

UbuntuでOpenSIMを入れてみた

ここのサイトを見てインストールを行えばすんなり動く。
http://opensimulator.org/wiki/Build_Instructions
1.システム→システム管理→ソフトウェア・ソースでいずれか1つを追加する。
deb http://pkg.knifejaw.com/ubuntu opensim releases modules
deb http://pkg.knifejaw.com/ubuntu opensim testing modules
deb http://pkg.knifejaw.com/ubuntu opensim unstable modules

2009/10/12現在では、amd64版が無いので、ソースから手動でビルドする。
http://opensimulator.org/wiki/Download
上記URLからソースを取ってきて展開。
端末を開いて
cd [展開したフォルダパス]
./runprebuild.sh
nant


2.必要なライブラリをSynapticでダウンロード
subversion
nant
mono-gmcs
libmono-microsoft8.0-cil
libmono-system-runtime2.0-cil
libgdiplus
libmono-i18n2.0-cil
libmono-oracle2.0-cil
opensimulator (コンパイルした場合は不要)


3.openSIM設定
binフォルダを開き、OpenSim.ini.exampleファイルを設定し、
OpenSim.iniで保存する。
(そのままでも動作させることは可能)

4.実行する
サーバ起動。
mono OpenSim.exe

サーバの初回設定が色々出てくるが、
InternalAddress = 0.0.0.0

これにしないとスタンドアローンモードで起動出来ないので注意。
また、Regionsフォルダ内にRegions.iniに設定が保存されるので、編集したい場合はここを開く。

起動したらログインユーザを作成する。
create user

例:
create user test test「エンター」すると残りの足りない項目について問い合わせてくる
password: test
x[1000]: そのまま
x[1000]: そのまま
email[]: そのまま

最後に、クライアントを起動してログインしてみる。
secondlife -loginuri 127.0.0.1:9000

Ubuntu Monoをクリックで実行するには

Exe形式のファイルを右クリック「開き方」で「追加」選択。
コマンドを直接指定する→参照ボタンをクリック、run-detectorsを選択。

ubuntu 9.10例
'/usr/share/binfmt-support/run-detectors'

これで実行できる。

プログラム作成上、気をつけなければならないものがファイルパスの設定。
カレントが開いたフォルダではないので注意。

2009年10月11日日曜日

Ubuntu OpenCVSharp環境構築

ここに書かれているように
BlobやLabelingといった独自拡張機能を利用するときは
ソース取ってきてコンパイルする必要がある。

http://code.google.com/p/opencvsharp/wiki/Tutorial_UnixPlatforms

svn checkout http://opencvsharp.googlecode.com/svn/trunk/

コンパイルエラーが出たので修正を加えたのでメモ。
MonoのWindowsアセンブリの対応状況によってBitmapWritableなど使用出来ないものが存在しているので、MonoDevelopからソリューションを開いて、不要なソースとアセンブリ参照部分を削除する必要がある。

変更差分(2009/10/12現在 svn最新)
OpenCvSharp.DebuggerVisualizersプロジェクト削除
OpenCvSharpプロジェクト内
CvHaarClassifier.cs
>Summary日本語コメントが複数行になっている箇所でエラーするので、一行にまとめる。
CvDll.cs
37行目付近の”~文字列~”の部分を変更。
#region DLL File Name

public const string DllCxcore = "libcxcore";

public const string DllCV = "libcv";

public const string DllHighgui = "libhighgui";

public const string DllCvaux = "libcvaux";

#endregion


OpenCvSharp.Extensionsプロジェクト内
>BitmapSourceConverter.cs削除
>WriteableBitmapConverter.cs削除

OpenCvSharp.Testプロジェクト内
ConvertToBitmapSource.cs削除
ConvertToIplImage.cs削除
ConvertToWriteableBitmap.cs削除
参照
>PresentationCore削除
>PresentationFramework削除
>WindowsBase削除

完成したexeファイルはダブルクリックで動かないので

mono test.exe

のようにMonoを通して実行する必要がある。

UbuntuでOpenCVをインストール

Synapticで

opencv-doc
libcv-dev
libcv1
libcvaux1
libcvaux-dev

をインストールする。
(ffmpegなど、入れる必要があり?)

サンプルファイルは、
/usr/share/doc/opencv-doc/examples/c
にあるので試しに

sudo make

ビルドして、

./eage

を動かし、正しく動作すれば環境構築完了。

Ubuntuで毎回パスワードを求められないようにする

$ sudo visudo

変更前
%admin ALL=(ALL) ALL

変更後
%admin ALL=(ALL) NOPASSWD:ALL

これで解決。

Ubuntu 9.10 + VirtualBox(XP)でDirectXチェック

UbuntuメインでXPゲスト環境でゲームベンチをやってみた。

FF11ベンチ:音○、画像△(テクスチャが貼れていないものがある)
MHFベンチ:起動エラー

ISOイメージ作成方法

以下のコマンドを打つ。

dd if=/dev/cdrom of=foo.iso

トラブルシューティング等は下記URL
参照URL:http://d.hatena.ne.jp/yoshifumi1975/20071012/p1

2009年10月10日土曜日

IBusの罠

半角+全角キーで変換切り替えできなくて不便だな~って思ったら、

>iBusの設定画面を開き、Advancedから、Keyboard LayoutのUse system keyboard layout settingにチェックをつけないとダメみたいです。

これで解決できる模様。

Ubuntu 9.10βを入れてみた

あと2週間先に正式リリースを控えているけれどもUbuntu8.04からUbuntu9.04にアップデートした環境が不安定だったのでUbuntu9.04 AMD64 β版を入れて気づいた点を書いていく。

1.インストール
作成したCDRWのトラブルが無ければすんなりインストール完了できる。

2.ATI/AMD プロプラエタリFGLRX グラフィックドライバ
アップデートに失敗。
一度Synapticアップデートを行い、再起動後は成功した。

3.USBオーディオ(ヘッドセット)
Ubuntu9.04までうまく設定できなかったものが、Ubuntu9.10からはすんなりGUI設定で動いた。

4.動画(MP4、Flash)
MP4. デフォルトで入っている動画プレイヤーでH.264、AACコーデックを自動インストールすれば問題なく動作。
Flash. SynapticでFlashPluginをインストール後、Firefoxで正常動作。

5.漢字変換
デフォルトの設定がALT+半角キー

6.メッセンジャー
Pingin?からEmpathyに変わって、IRCは別ツールで行う必要が出た。

7.外観の設定
壁紙が増えた。

8.Ubuntu Software
ユーザフレンドリーになって欲しいソフトがカテゴリから選びやすくなった。

9.メニュー
最近開いたドキュメントが出てきた

10.その他
iBusというのが表に出てきた。
日本語Remixでなくても表に出てくるGnome環境はすべて日本語表示。

全体的にみて、重い処理すると音飛びしてたのが緩和されたり、9.10が出たら乗り換える価値は十分ありそう。

2009年10月7日水曜日

バーコード解析ライブラリ

下記サイトのライブラリを使うと簡単にできる。
http://zbar.sourceforge.net/
bool findBarcode(IplImage *src, char *code)
{
cvCvtColor(src, grayImage, CV_BGR2GRAY);
ImageScanner scanner;
scanner.set_config(ZBAR_ISBN13, ZBAR_CFG_ENABLE, 1);

Image image(grayImage->width, grayImage->height,
"GREY", grayImage->imageData,
grayImage->width * grayImage->height);
// scan the image for barcodes
int n = scanner.scan(image);

// extract results
for(Image::SymbolIterator symbol = image.symbol_begin();
symbol != image.symbol_end();
++symbol) {
if(strcmp(symbol->get_type_name().c_str(), "ISBN-13") == 0)
{
strcpy(code, const_cast(symbol->get_data().c_str()));

return true;
}
}

// clean up
image.set_data(NULL, 0);

return false;
}

Google bookから情報を取ってくる
char code[13];
if(findBarcode(capFrame, code))
{
cout << code << endl; System::Net::WebClient wc; System::String^ strCode = gcnew System::String(code); System::String^ bookdata = wc.DownloadString("http://books.google.com/books?bibkeys=ISBN:" + strCode + "&jscmd=viewapi&callback=mycallback")->Replace("\\x26","&");
System::Console::WriteLine(bookdata);
}

2009年10月3日土曜日

現在のCPU事情

 ネットブックが登場して有名になったAtomであるが、どうしてあんなに安く出来るのかというと、現在主流である1クロック辺り複数命令実行できてパイプライン化によって高クロック化が可能なアウトオーダー方式をやめて、非常にシンプルなインオーダー方式を採用した点である。インオーダー方式はアウトオーダー方式より効率的に処理は出来ないが、ダイサイズが小さく出来るので1個単価安くでき、実はこういったCPUは組み込み向けプロセッサでは珍しいことではない。今までのIntelの歴史を読み返してみると、アウトオーダー方式の究極を目指したCPUが、Pentium4にあたる。高クロック、高パイプライン化を惜しみなく設計に取り入れたものであり、スペック的には申し分が無い。また、ハイパースレッディングも高パイプラインのデメリットを補う形で導入された点もみれば、決して悪いCPUではなかったはず。だがプログラム的には分岐命令がメインなので、高パイプライン化は逆にマイナスになったのである。
 アップル貝殻ノートブックが出た当時のCPU PowerPC603eは現在のCPU事情と非常に似ている。このCPUはTDPが非常に小さくダイサイズも小さいため、サーバ用途には4CPUが既に登場していた。それと平行にPower5の登場で当時SSE命令追加が主流だったのでマルチメディア命令を搭載したモデルが登場した過去がある。現在はこのSSE命令の代わりに、CPU+GPUという新たな形で時代を追って来ているのかなと思えてくる。そうなると今あるSSE命令は命令プリセットという形だけ残って内部処理はGPUになっていくのかな、、
AMDは今後そういったCPUをラインアップしてきているので、Intelも追従していくのだろうけど、AMDとATI、IntelとNVidia、こういった囲みの陣営が考えられるがIntelはNVidiaのコアを乗っける事が出来ない点は非常に不利に感じる。今後この辺りはどう進化しくのかが面白い。

Ubuntu環境でUSBオーディオ(ヘッドセット)を使う

Ubuntu 9.04環境でUSBオーディオを使う方法をまとめてみた。

1.USBオーディオ(ヘッドセット)を接続した状態で起動する。
2.システム→設定→サウンド→[デバイス]タブ内にある
再生の部分を
 「PulseAudio サウンド・サーバ」に設定する。
デフォルトのミキサ・トラックを
 「Playback: Logiclool USB Headset - USB Audio(PulseAudio Mix...」
して、Masterを選択。
3.再起動

基本的にはGUIで設定可能。
これで再生されない場合は、デバイスが認識されているか確認する事。
確認方法は端末で、
# asoundconf list

を行ったとき、「Headset」という項目が表示されていない場合は認識されていないので、設定を戻して再起動してみる。

もし他のサウンドカードがあって優先度を変えたいときは下のコマンドを行う。
# asoundconf set-default-card Headset

また、
# sudo gedit /etc/modprobe/d/alsa-vase.conf

の設定は、Ubuntu 9.04の場合は行わずに起動音を鳴らす事が出来る。

Androider