プログラム用フォント
昨日から使ってるフォント。
[:][;]や[O][0]の違いがはっきりしてるので中々いいかも。
後、手書き風に書いてあって和む。
FedoraでBluetoothのヘッドセットを使ってみるテスト
メルブラのWindows版はどこぞの誰かが作ったネット対戦ツールがある。
友人とプレイするも、CPUの占有率を上げてるため、Skypeが落ちる。
なので、別マシンでSkypeやろうぜって事に。
幸い、我が家にはサーバー機としてFedora7があったので、それにSkypeをインスコ。
んで、意気揚々とBluetoothアダプタを装着。
で、いざヘッドセットを認識させるもうんともすんとも言わない。
/var/log/messageを見る限り、通信しようとリクエストを送った所で止まってるっぽい。
んで、挫折しかけてググった。
日本人はどうも、WindowsでしかBluetoothのヘッドセット使ってないらしいな。
Linuxで使ったよって猛者は大抵、キーボードかマウス。
ここで、1度目の挫折。
んで後日、会社の先輩に聞いたら同じヘッドセットで同じ問題にあたってた。
なんで、会社に泊まったついでに認識させてみることに。
以下、インスコ履歴。
$ yum install bluez-utils bluez-libs gnome-bluetooth bluez-hcidump bluez-libs-devel gnome-bluetooth-libs bluez-gnome
$ hcitool dev Devices: hci0 01:23:45:67:89:AB
$ yum install alsa-tools alsa-lib alsa-utils alsa-lib-devel
ここで、ヘッドセットを接続待機?状態にしておく。
$ hcitool scan Scanning ... FE:DC:BA:98:76:54 HOGE 350
$ hcitool cc FE:DC:BA:98:76:54
$ yum install automake kernel-devel
$ cvs -d:pserver:anonymous@bluetooth-alsa.cvs.sourceforge.net:/cvsroot/bluetooth-alsa login $ cvs -z3 -d:pserver:anonymous@bluetooth-alsa.cvs.sourceforge.net:/cvsroot/bluetooth-alsa co -P btsco
$ cd btsco $ ./bootstrap $ ./configure $ make $ make install $ make maintainer-clean
$ cd kernel $ make $ make install $ depmod -e $ make clean
$ modprobe snd-bt-sco
# btsco -v FE:DC:BA:98:76:54 btsco v0.42 Device is 1:0 Voice setting: 0x0060 RFCOMM channel 2 connected Using interface hci0
あい、これで繋がった筈。例外は認めてません。
先輩は繋がって、サウンド設定で音が出ることまで確認したのに
Skypeが起動しないと言う本末転倒な状態になってた。
とりあえず、友人とメルブラ頑張ろうと思う。
あ、オレと対戦したい方はどうぞ遠慮なく。
2chのVIP初心者スレに出没してるから。
秋葉、動きおせぇよ・・・orz
C言語でPerlのメソッドを呼び出してみるテスト
前回はC言語からPerlスクリプトを呼び出すだけだった。
今回はC言語からPerlスクリプトのメソッドだけを呼び出す。
main.c
#include <EXTERN.h> #include <perl.h> int main(int argc, char **argv){ PerlInterpreter* my_perl = perl_alloc(); perl_construct(my_perl); char* perl_argv[] = {"", "sample.pl"}; perl_parse(my_perl, NULL, 2, perl_argv, NULL); // スカラー変数が引数のメソッド char* scalar_args[] = {"PerlInterpreter", NULL}; call_argv("scalar_argument", G_DISCARD | G_VOID, scalar_args); // リスト変数が引数のメソッド char* array_args[] = {"1", "2", "3", "4", "5", "6", "7", "8", "9", NULL}; call_argv("array_argument", G_DISCARD | G_ARRAY, array_args); // ハッシュ変数が引数のメソッド char* hash_args[] = {"key1", "1", "key2", "2", "key3", "3", NULL}; call_argv("hash_argument", G_DISCARD | G_ARRAY, hash_args); perl_destruct(my_perl); perl_free(my_perl); return 0; }
sample.pl
#!/usr/bin/perl use strict; sub scalar_argument { my($scalar) = @_; printf("%s\n", $scalar); } sub array_argument { my(@array) = @_; foreach my $data (@array){ printf("%s\n", $data); } } sub hash_argument { my(%hash) = @_; foreach my $key (sort(keys(%hash))){ printf("%s => %s\n", $key, $hash{$key}); } }
$ cc -o callsub main.c `perl -MExtUtils::Embed -e ccopts -e ldopts`
実行
$ ./callsub
結果
PerlInterpreter 1 2 3 4 5 6 7 8 9 key1 => 1 key2 => 2 key3 => 3
余談だが、このプログラムだとBEGINは実行されるが、ENDは実行されない。
perl_parse関数でPerlの解析を行う。つまりPerlで言うところのuseと同じ。
で、perl_runメソッドでPerlスクリプト自体を実行するので
このプログラムではENDは実行されない。
C言語でPerlを使ってみるテスト。
perlinc.c
#include <EXTERN.h> #include <perl.h> int main(){ // Perlインタプリタ PerlInterpreter* perl; // Perlインタプリタの確保 // Perlを利用するための領域(メモリ)を確保 perl = perl_alloc(); // Perlインタプリタを初期化 perl_construct(perl); // perl_parseに渡すコマンドライン引数的なもの char *perl_argv[] = {"", "hello.pl"}; // PerlインタプリタにPerlスクリプトを解析することを伝える // 第一引数 // Perlインタプリタ // 第二引数 // よくわかりません。NULLでいいと思う。 // 第三引数 // 第四引数の要素数を入れる。 // Perlっぽく書くならscalar(@ARGV) // 第四引数 // Perlを実行するためのコマンドライン要素を入れる。 // argvをそのまま使ってもいい。 // argvとはPerlでいうところの@ARGVのこと。 // 第五引数 // 通常、envと呼ばれる特殊変数を入れる。 // envとはmain関数の第三引数のことで // 環境変数が入ってくる。 // 環境によって対応しているかどうかまちまち。 perl_parse(perl, NULL, 2, perl_argv, (char**)NULL); // Perlインタプリタに実行を伝える perl_run(perl); // Perlインタプリタの終了処理 perl_destruct(perl); // Perlインタプリタのメモリ解放 perl_free(perl); return 0; }
hello.pl
#!/usr/bin/perl use strict; BEGIN { print "--- BEGIN $0 ---\n"; } END { print "--- E N D $0 ---\n"; } print "Hello, World!!\n";
$ cc -o perlinc perlinc.c `perl -MExtUtils::Embed -e ccopts -e ldopts`
実行
$ ./perlinc
結果
--- BEGIN hello.pl --- Hello, World!! --- E N D hello.pl ---