goo blog サービス終了のお知らせ 

備忘録 the next generation

2014年末にOCN(http://yamagu.mo-blog.jp)からこちらに移転しました。

外部から内部のpukiwikiにアクセス

2011-02-16 15:28:17 | デジタル・インターネット
内部のpukiwikiを外部向けに公開する設定のメモ。
以下の条件を満たすための設定方法。

・外部からのアクセスにはapacheのRewriteRuleを利用
・内部からはpukiwikiにパスワードなしでアクセス
・外部からはpukiwikiにパスワード有りでアクセス

まずは入り口のApacheの設定から。
内部のpukiwikiのアドレスを 192.168.1.100としたとき
httpd.confに以下のような設定を追加。

RewriteRule ^/hogehoge/pukiwiki(.*) http://192.168.1.100/pukiwiki$1 [P]

(設定を追加後apacheを再起動?)

一方、pukiwikiのディレクトリに.htaccessを作成する。以下は基本認証の場合の例。


gonzuiのインストール

2011-02-14 21:02:36 | デジタル・インターネット

gonzuiをmakeして、起動すると以下のようにエラーが表示された。

# ./gonzui-server
./gonzui.rb:25:in `require': no such file to load -- gonzui/autopack (LoadError)
        from ./gonzui.rb:25
        from ./gonzui-server:14:in `require'
        from ./gonzui-server:14

そもそも./configure時に以下のようなメッセージを見逃していたのが問題のようで、要するにrubyのヘッダがなかったようだ。

can't find header files for ruby.
can't find header files for ruby.
can't find header files for ruby.
can't find header files for ruby.
can't find header files for ruby.
can't find header files for ruby.
can't find header files for ruby.

./configureの前にFedoraで言う ruby-develをyumでインストールしておかなければならなかったようだ。
というわけで、yum install ruby-devel後に再度./configure してmakeすれば問題は解決。

gonzui-importでソースをインポートして、いざ検索してみると今度は
Internal Server Error
Fixnum expected
とブラウザに表示される。原因はBerkleyDBが古いらしい。

rpm -qaで確認すると、Fedora11のBerkleyDBのバージョンはdb4-4.7.25-11.fc11.x86_64。gonzuiでサポートされているのはBerkeley DB 4.2+だそうだ。
http://www2.hyo-med.ac.jp/~tanimura/R/R.htmlの情報によれば
パッチがあるらしい。

http://son-son.sakura.ne.jp/archive/gonzui.patch から ダウンロードしたパッチを保存しておいて、以下のようにパッチを当てる。

wget http://prdownloads.sourceforge.net/gonzui/gonzui-1.2.tar.gz
tar xvzf gonzui-1.2.tar.gz
patch -p0 < gonzui.patch

これでOK。


ext3のfsyncとext4のfsync

2011-02-03 15:52:47 | デジタル・インターネット

PostgreSQLをext3上とext4上でそれぞれ動かしたときに、insertの速度が違うようだ。特にext4のときに遅い模様。そこで、ext4上のpostgresのpostgresql.confのfsyncをオフにしてみるとinsertの速度が劇的に上がる。

でも、こんなに劇的に上がっていいの?というのが正直な感想で、実はext3のfsyncは実際には呼び出されてもsyncしていないのではないか、ということが気になってくる。

ためしに、ext3とext4でそれぞれに繰り返し書き込みとfsyncを繰り返し行うだけのプログラムを作成して、実行時間を測ってみた。

準備: ローカルのファイルシステム(ext3)にファイルを二つ作成して、片方をext3(ext3_disk)、もう片方をext4でマウント(ext4_disk)する。

dd if=/dev/zero of=ext3_file.dat bs=1M count=10
dd if=/dev/zero of=ext4_file.dat bs=1M count=10

mkfs.ext3 ext3_file.dat
mkfs.ext4 ext4_file.dat
mkdir ext3_disk ext4_disk

mount ext3_file.dat ext3_disk
mount ext4_file.dat ext4_disk

テスト用プログラム: 以下のようなプログラムを実行した。

#include<stdio.h>
#include<stdlib.h>
#include<sys/time.h>

#define REPEAT 10
#define SIZE 1000

int main(int argc, char** argv){
   char* buf = "0123456789";
   char* names[] = {"ext3", "ext4"};
   int i,r, f;
   struct timeval start, end, dur;
   FILE* files[2];
   FILE* ext3 = NULL;
   FILE* ext4 = NULL;

   ext3 = fopen("ext3_disk/test.dat", "w");
   ext4 = fopen("ext4_disk/test.dat", "w");
   files[0] = ext3;
   files[1] = ext4;

   for(f = 0; f<2; f++){
     printf("%s: ", names[f]);
     fflush(stdout);
     gettimeofday(&amp;start, NULL);
     for(r = 0; r<REPEAT; r++){
       for(i = 0; i<SIZE; i++){
         fprintf(files[f], "%s", buf);
         int fd = fileno(files[f]); // get fd
         fsync(fd);
       }
     }
     gettimeofday(&end, NULL);
     timersub(&amp;end, &amp;start, &amp;dur);
     printf("%d sec, %lf msecn", dur.tv_sec, dur.tv_usec/1000.0);
   }
   printf("donen");
   fclose(ext3);
   fclose(ext4);
}
</pre>

実行結果:

ext3: 0 sec, 20.671000 msec
ext4: 10 sec, 263.353000 msec
done

----------------------------------

この結果を見ると、ext3は一瞬で完了していて、ext4は10秒以上かかっている。ext3はfsyncのタイミングでは実際の同期は行っていなさそうな雰囲気だ。ではext3はいつsyncされるのかというと、5秒ごとルールということだろうか。

データベース屋さんの間ではよく知られた問題なんだろうか?


<script type="text/javascript"> SyntaxHighlighter.all() </script </script>


インターナビにHTC ariaを接続 その3

2011-02-03 07:57:27 | デジタル・インターネット

先日までに、HTC ariaをインターナビに接続できた。ちなみにカーナビはインサイトの純正ナビで2009年の製品(中身は三菱製?)。

昨日、ペアリング、インターナビ接続成功後の、インターナビの再接続について確認してみた。要するに車に乗るときの毎回の儀式はこうなるらしい。

  1. ariaのbluetoothをオンにする。(常にオンにしていてもいいけど、電池を食うので)
  2. ariaのPdaNetのDUNを起動する
  3. エンジンをかける

エンジンをかけると自動的にペアリングされ、目的地をナビにセットすると問題なく通信が始まる。いったん、エンジンを止めたりしても、aria側のblutoothを切ったりしなければ問題ないようだ。もし切った場合はPdaNetをオフにて上記の手順を再度行うことになる。

PdaNetはDUNの起動から120秒間デバイスを待つことになっているが、120秒を過ぎてからカーナビから接続がきてもちゃんと接続できているような気がする。


インターナビにHTC ariaを接続-その2

2011-01-31 02:16:08 | デジタル・インターネット

先日はインターナビをariaとペアリングできるところまでは行ったが、プレミアクラブとの同期や気象情報の取得などはできていなかった。

ナビ側の設定としては、先日触れたペアリングの設定の他に確認すべきところとしては、通信先の設定がある。マニュアル通信設定から、接続先を新規作成して、以下のように設定した。

接続先名称: (適当に)
電話番号: *99#
ユーザID: em
パスワード: em
DNS設定: 自動

それからカーナビを起動した後に、Aria側ではBluetooth設定を開いて、下の方にある「internavi」を普通にタップするのではなく、長押しする。長押しすると「接続」「ペアを解除」「オプション」とポップアップが出てくるので、オプションをクリックする。そうすると、「接続」と「電話」が表示されるので「接続」の方をタップする。たぶん、これじゃないかと思う。

あとはPdaNetでDUNをオンにしておけば、通信がうまくいくと表示が切り替わって通信量が表示されるようだ。

長時間のドライブで問題ないかや、再接続ができるかどうかが今後の課題かも。