トップ 最新 追記
【ソース+水=麦茶色の何か】

半期 四半期 全カテゴリ

今日の一言


2010/06/01(Tue) ゲルギム [長年日記] 編集

_ [Windows][Linux][Ubuntu][Debian][FC][gnuplot][研究関係][雑記]gnuplotでpng画像を出力する際の色の指定

デフォルトの設定では、それぞれの線の色が非常に見分けにくい。

なので、こちら(http://www6.atwiki.jp/naminami/pages/6.html#id_dfcbb724)を参考に、色の指定をする。

具体的にはこんな感じ。

set terminal png transparent medium size 640,480 \
    xffffff x000000 x404040 \
    xff0000 xffa500 x66cdaa xcdb5cd \
    xadd8e6 x0000ff xdda0dd x9500d3

どうも自分は若干色盲ぎみっぽい。これなら何とかみわけられる。


2010/06/02(Wed) ガンゴー [長年日記] 編集

_ [Ubuntu][FC][Linux][雑記]LinuxにIntelのWirelessLAN(intel wifi link 5100)ドライバを導入する

Ubuntu9.04を入れたDELL PRECISION M4400で無線LANがブチブチ切れまくるので、「intel wifi link 5100」のドライバを入れ直してみた。

まず、ここ(http://intellinuxwireless.org/?n=Downloads)から「iwlwifi-5000-ucode-5.4.A.11.tar.gz」をDL。

それを解凍し、「iwlwifi-5000-1.ucode」を「/lib/firmware」にコピーする。

これで再起動すれば無線LANが動くようになるはず!

*他のIntelの無線LANドライバも同様と思われ。

*結局、無線がブツブツ切れるのは直らなかった・・・

DELLかっ?DELLが悪いのかっ!?


2010/06/03(Thu) グフォ [長年日記] 編集

_ [Linux][C++]DF-Designを活用したローパスフィルタプログラム

DF-Designは、こちら(http://momiji.i.ishikawa-nct.ac.jp/dfdesign/)で公開されているFIRおよびIIRディジタルフィルタの設計/解析プログラム集。

以前に作ったプログラムが出てきたので、上げておく。

 /*****************************************
   実行: ./a.out data.csv filter_coefficient.csv
     (引数: データファイル フィルタ係数ファイル)
 ******************************************/
 #include <iostream>
 #include <fstream> // ファイルストリームのヘッダ
 #include <vector>
 #include <stdlib.h>
 #include <cmath>
 using namespace std;

 /* 引数が足りているかを確認 */
 bool operand_check(int argc)
 {
   if(argc != 3)
   {
     printf("missing file operand\n operand = data,filter\n");
     return false;
   }
   return true;
 }

 /* データファイルの読み込み */
 bool load_signal_data(const string &filename, vector<double> &org_data)
 {
   string tmp_c;
   ifstream fs (filename.c_str());
   if (!fs)
   {
           cerr << "file not found: " << filename << endl;
           return false;
    }
   while(!fs.eof())
   {
   getline(fs, tmp_c, '\n');
   if(tmp_c[0]!='#' && tmp_c.size()!=0)
     {
     org_data.push_back(atof(tmp_c.c_str()));;
     }
   }
     fs.close();
     return true;
 }

 /* フィルタ係数ファイルの読み込み */
 bool load_filter_data(const string &filename, vector< double > &fk, vector< vector<double> > &fa, vector< vector<double> > &fb, vector<int> &anum, vector<int> &bnum)
 {
   string tmp_c;
   vector<double> a_tmp;  //フィルタの各階ごとの係数aを一次配列に保存
   vector<double> b_tmp;  //フィルタの各階ごとの係数bを一次配列に保存
   int index;
   int amax(0),bmax(0);  //フィルタの各階ごとのΣの回数Nを保存

   ifstream fs (filename.c_str());
   if(!fs)
   {
           cerr << "file not found: " << filename << endl;
           return false;
   }

   getline(fs, tmp_c, '=');
   index=tmp_c.find_first_of('\n');
   if(index!=-1)
   {
     tmp_c.erase(0,index+1);  //改行を詰める
   }
   while(!fs.eof())
   {
     if(tmp_c[0]=='S')
     {
       getline(fs, tmp_c, '\n');
       while(!fs.eof())
       {
         getline(fs, tmp_c, '=');
         index=tmp_c.find_first_of('\n');
         if(index!=-1)
         {
           tmp_c.erase(0,index+1);  //改行を詰める
         }
         if(tmp_c[0]=='S'){
           break;
         }else if(tmp_c[0]=='k')
         {
           getline(fs, tmp_c, '\n');
           fk.push_back( atof(tmp_c.c_str()) );
         }else if(tmp_c[0]=='a')
         {
           getline(fs, tmp_c, '\n');
           a_tmp.push_back( atof(tmp_c.c_str()) );
           amax++;
         }else if(tmp_c[0]=='b')
         {
           getline(fs, tmp_c, '\n');
           b_tmp.push_back( atof(tmp_c.c_str()) );
           bmax++;
         }
         else
         {
           getline(fs, tmp_c, '\n');  //先頭文字がどれでもない場合、何もせず次の行へ
         }
       }
         }
      fa.push_back(a_tmp);
      fb.push_back(b_tmp);
      anum.push_back(amax);
      bnum.push_back(bmax);

      a_tmp.clear();
      b_tmp.clear();
      amax=0;
      bmax=0;
      }
     fs.close();
     return true;
 }

 /* フィルタの適用 */
 bool to_filter( const vector<double> &org_data, vector<double> &fix_data, const vector< double > &fk, const vector< vector<double> > &fa, const vector< vector<double> > &fb, const vector<int> &anum,const vector<int> &bnum)
 {
   double a_sigma(0.0);  //aにかかる部分の和
   double b_sigma(0.0);  //bにかかる部分の和
   int num(0);  //データ番号
   int aloop(0);  //aにかかるΣのループのカウント
   int bloop(0);  //aにかかるΣのループのカウント
   int sec(0);  //フィルタの階数のカウント
   vector< double > mid;  //中間値

   for(num=0;num<org_data.size();num++)
   {
     fix_data.push_back(org_data[num]);
     mid.push_back(0.0);

     if(num >= anum[0])
     {
       for(sec=0; sec<fa.size(); sec++)
       {
         for(bloop=1;bloop<bnum[sec];bloop++)
         {
           b_sigma = b_sigma+ fb[sec][bloop] * mid[num-bloop];
         }
         mid[num] = fk[sec]*fix_data[num]-b_sigma;
         for(aloop=0;aloop<anum[sec];aloop++)
         {
           a_sigma = a_sigma + fa[sec][aloop] * mid[num-aloop];
         }
         fix_data[num] = a_sigma;
         a_sigma=0.0;
         b_sigma=0.0;
       }
     }
   }
   return true;
 }

 /* メイン関数 */
 int main(int argc, char**argv)
 {
   if( operand_check(argc) == false )return 0; //引数があっていなければ終了

   vector< double > org_data;  //フィルタ適用前のデータ
   vector<int> anum;  //aに対するΣの数
   vector<int> bnum;  //bに対するΣの数
   vector< double > fk;  //フィルタ係数k
   vector< vector<double> > fa;  //フィルタ係数a
   vector< vector<double> > fb;  //フィルタ係数b
   vector< double > fix_data;  //フィルタ適用後のデータ

   /* データの読み込み */
   if( load_signal_data(argv[1], org_data)  == false )return 0; //ファイルが読めなかったら終了

   /* フィルタの読み込み */
   if( load_filter_data(argv[2], fk, fa, fb, anum, bnum)  == false )return 0; //ファイルが読めなかったら終了

   /* フィルタの適用 */
   to_filter( org_data, fix_data, fk, fa, fb, anum, bnum);

   /* データの書き出し */
   ofstream fsw ("akihiro-i_signal.csv");  //決め打ち
   for(int datanum=0; datanum<org_data.size();datanum++)
   {
           fsw << fix_data[datanum] << endl;
   }
   fsw.close();

   return 0;
 }

読み込むデータファイル(data.csv)はこんな感じ。

 0
 0.1
 0.5
 0.1
 -0.4
 -0.1
 ・・・

フィルタの設定ファイル(filter_coefficient.csv)はこんな感じ。

 Sec =1
 k =5.35179369357953406e-06
 b0 =0
 b1 =-1.98687072069134119e+00
 b2 =9.86956349390438525e-01
 a0 =1.85630617396982241e+05
 a1 =-3.71261234793964482e+05
 a2 =1.85630617396982241e+05

 Sec =2
 ・・・

おそらく大きな間違いはないはず。

まあ、DF-Designがなくなったらどうしようもないけどな!

(コマンドライン版は一般公開されていない?)

_ [OpenCV][Linux][Ubuntu][Debian][FC][研究関係][雑記] OpenCV + IEEE1394カメラ + ffmpeg インストールまとめ( + mplayer)後日談

ここ(http://robotics.naist.jp/~akihiro-i/dialy/?date=20100520#p01)で、ffmpegは手動で入れろとか、コーデックが競合するからaptは使うなとか書いたが、一つ邪道な方法を思いついた。

1. apt-getでffmpegを入れる

→動画プレイヤーでコーデックが読み込めるようにセッティングされる。

2. OpenCVで録画する際にエラーが出るようになる

→aptでインストールされたライブラリを、ffmpegのソースからコンパイルしたものに置き換える。

うまくやれば両方動く。

ただ、前以上に危険なことをしているので、問題がないなら、前のやり方の方がおすすめ。

_ [OpenAL][Linux][Ubuntu][Debian][FC][Windows][研究関係][雑記] OpenALで録音する(途中)

このあたりをみれば分かりそう?

 http://www.blitzbasic.com/Community/posts.php?topic=72909
 http://ja.pastebin.ca/1646632
 http://old.nabble.com/how-to-capture-data-%2B-possible-bug-in-documentation-td7931474.html

*録音まではたどり着けそうだが、録音したデータをどうやって扱えばいいかがよく分からなかったので、ここで断念。

時間が出来たらリベンジする。

_ [OpenAL][Linux][Ubuntu][Debian][FC][Windows][研究関係][雑記] テキストデータからwavファイルを作る(txt2wav.c) & wavファイルの中身をテキストデータで吐き出す(dumpwave.c)

テキストデータからwavファイルを作る

こちら(http://www.kk.iij4u.or.jp/~kondo/wave/index.html)のページでWAV ファイルのフォーマットの詳細が紹介されているので、それを参考にさせてもらって、ファイルIOを行うプログラムを作る。

また、ASCII テキストデータを WAVE 形式に変換する「txt2wav.c」というプログラムも公開されているので、それをみればより実践的な使い方が分かると思う。

特別なライブラリ等は使われてないので、そのまま

 $ gcc txt2wav.c

とすればコンパイルできる。

*出来上がった実行ファイルを引数無しで実行すれば、プログラムの使い方を表示してくれる。

wavファイルの中身をテキストデータで吐き出す

こちら(http://oku.edu.mie-u.ac.jp/~okumura/wavefmt.html)の「dumpwave.c」を参考にすればいいと思われ。


2010/06/04(Fri) ウィータ! [長年日記] 編集

_ [Emacs][Debian][FC][Ubuntu][Linux][研究関係][雑記]aliasの使い方(「emacs」を「emacs -nw」に置き換える)

Emacsがウィンドウで開くのが鬱陶しくなってきたので、aliasを使って「-nw」をつけるようにした。

 $ alias emacs='emacs -nw'

削除する場合は、

 $ unalias emacs

とすればいい。登録されているaliasのリストを出すには、

 $ alias

とする。

ただ、これだとコンソールを閉じると、登録したエイリアスはすべて消えてしまう。

そこで,毎回同じエイリアスを利用する場合には、ホームディレクトリにある「.bcshrc」という設定ファイルに aliasコマンドを書いておく必要がある。

これにより、その後に起動されるシェルすべてにそのエイリアスが適用されるようになる。

_ [Emacs][Debian][FC][Ubuntu][Linux][研究関係][雑記] emacs チュートリアル

 $ emacs

とし、「C-h t」(Ctrlを押しながらh、そしてtを入力してエンター)。

あとは画面に従って順に進めていけばOK!

以上!

_ [Emacs][Debian][FC][Ubuntu][Linux][研究関係][雑記]ターミナルモードでemacsを起動する

「-nw」をつけてemacsを起動すればOK。

$ emacs -nw hoge.cpp

もしターミナルの問題で「M-」(Alt)が使えなくなった場合は、代わりに「Esc」を使えばいい。(押して離すで一入力)

例えば、「M-v」は、「Escを押し、離してからv」で代用できる。


2010/06/05(Sat) ももも酒 [長年日記] 編集

_ [Emacs][Debian][FC][Ubuntu][Linux][研究関係][雑記] emacsのスクロールを1行単位にする

「~./.emacs」に次の一行を加えればいい。

 (setq scroll-conservatively 1)

*デフォルトは0であり、半画面ずつスクロールされる。

_ [Emacs][Debian][FC][Ubuntu][Linux][研究関係][雑記] (CおよびC++における)emacsのインデントスタイルを変更する

「~./.emacs」に次の行を加える。

;; C style
(add-hook 'c-mode-common-hook
         '(lambda ()
             (c-set-style "bsd")
              ;; インデントを空白文字で行う
            (setq indent-tabs-mode nil)
              ;; インデントの変更
            (setq c-basic-offset 2)
            ))
;; C++ style
(add-hook 'c++-mode-hook
         '(lambda()
            (c-set-style "bsd")
              ;; インデントを空白文字で行う
            (setq indent-tabs-mode nil)
              ;; インデントの変更
            (setq c-basic-offset 2)

インデント数の変更や空白文字への置き換えはお好みで。(自分は2に変更した)

c-set-styleにもいろいろな種類があるので、好きなのを選べばいい。

*自分はこのへん(http://www.dd.e-mansion.com/~kumada/laboratory/column/c_indent.html)を参考にしました。

他にも、

 (c-set-style "gnu")
 (c-set-style "k&r")
 (c-set-style "bsd")
 (c-set-style "linux")
 (c-set-style "cc-mode")
 (c-set-style "stroustrup")
 (c-set-style "ellemtel")
 (c-set-style "whitesmith")
 (c-set-style "python")

なんかがあるようです。(詳細は知らぬ)

_ [C++][Debian][FC][Ubuntu][Linux][研究関係][雑記] C言語(C++)でmkdirを行う

こんな感じで書く。

 #include <sys/types.h>
 #include <sys/stat.h>
 #include <stdio.h>
 int main()
 {
   mode_t mode = S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH;
   if ( mkdir("./newdir", mode) != 0 )
   {
     printf("mkdir error!\n");
   }
 }

mkdirの第2引数には、パーミッションの設定を書く。

詳細をこちら(http://docs.hp.com/ja/B2355-90854/mkdir.2.html)から引用。

アクセスパーミッション ビットを定義する記号定数は <sys/stat.h> ヘッダファイルに存在し、引き数 mode を構成するのに用いられます。 引き数 mode の値は、必要なパーミッションの値のビットの包含的論理和 (OR) です。

S_IRUSR 所有者による読出し

S_IWUSR 所有者による書込み

S_IXUSR 所有者による実行 (検索)

S_IRGRP グループによる読出し

S_IWGRP グループによる書込み

S_IXGRP グループによる実行 (検索)

S_IROTH 他人 (つまり、誰でも) による読出し

S_IWOTH 他人による書込み

S_IXOTH 他人による実行 (検索)

参考:

http://x68000.q-e-d.net/~68user/unix/pickup?mkdir

http://docs.hp.com/ja/B2355-90854/mkdir.2.html


2010/06/06(Sun) るいぱんこ [長年日記] 編集

_ [C++][Debian][FC][Ubuntu][Linux][研究関係][雑記] C言語(C++)でlsを行う

こんな感じで書く。

 #include <stdio.h>
 #include <stdlib.h>
 #include <dirent.h>
 #include <sys/types.h>
 #include <sys/stat.h>
 int main( int argc, char **argv )
 {
   char *pass;
   DIR *dp;
   struct dirent *entry;
   struct stat statbuf;

   if(argc<2)
   { pass = getenv("PWD");}
   else
   { pass = argv[1];}

   if(( dp = opendir(pass) ) == NULL )
   {
     perror("opendir_error!");
     exit( EXIT_FAILURE );
   }

   while((entry = readdir(dp)) != NULL)
   {
     stat(entry->d_name, &statbuf);
     if(S_ISDIR(statbuf.st_mode))  //ディレクトリの場合
     {
       printf("%s/\n", entry->d_name);
     }
     else  //それ以外の場合
     {
       printf("%s\n", entry->d_name);
     }
   }
   closedir(dp);
   return(0);
 }

基本的にはファイルストリームっぽいものと思えば良さそう。

参考:

http://www.geocities.co.jp/SiliconValley-Cupertino/4084/Cprogram/myls.html

http://www5a.biglobe.ne.jp/~nkgwtty/njaLinuxC_Lang01.html

http://www.c-lang.net/stat/

*環境依存だけど、stat関数はかなり便利。もう少し試してみようとおもう。

_ [C++][Debian][FC][Ubuntu][Linux][研究関係][雑記] C言語(C++)でmkdirを行う・改

既にファイルが存在していた場合のエラーメッセージを追加。

 #include <sys/types.h>
 #include <sys/stat.h>
 #include <dirent.h>
 #include <stdio.h>
 int main()
 {
   DIR *dp;
   mode_t mode = S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH;
   if ( mkdir("./newdir", mode) != 0 )
   {
     if ( (dp = opendir("./newdir")) != NULL )
       printf("target dir exists!\n");
     else
       printf("mkdir error!\n");
   }
 }

もっと真面目にエラー処理したい場合は、「errno.h」をインクルードして、グローバル変数「errno」でエラー分けすればいい。(表示はstrerror()とかで)

参考: http://www5a.biglobe.ne.jp/~nkgwtty/njaLinuxC_Lang01.html

_ [C++][Debian][FC][Ubuntu][Linux][研究関係][雑記] C言語(C++)でディレクトリ内に、ある名前を持ったファイルが存在するかを確認する

こんな感じで書く。

 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #include <dirent.h>
 #include <sys/types.h>
 #include <sys/stat.h>
 int main( int argc, char **argv )
 {
   char *pass;
   char *target;
  DIR *dp;
  struct dirent *entry;
  struct stat statbuf;
  if(argc<3)
  {
    printf("missing file operand!\n");
    printf("ex:  %s Pass Target\n", argv[0] );
    return -1;
  }
  else
  {
    pass = argv[1];
    target = argv[2];
  }
  if(( dp = opendir(pass) ) == NULL )
  {
	  perror("opendir_error!");
	  exit( EXIT_FAILURE );
  }
  while((entry = readdir(dp)) != NULL)
  {
	  if (strcmp(target,entry->d_name) == 0)
	  {
         printf("\"%s\" found in \"%s\"\n",target, pass);
         return 0;
     }
  }
  printf("\"%s\" NOT found in \"%s\"\n",target, pass);
  closedir(dp);
  return(0);
 }

ファイルの新規作成を行う際に、間違って上書きしてしまうのを防ぐのに応用できると思われ。

*処理速度とかは無視。適当に書いただけなので。


2010/06/07(Mon) ばよえーん [長年日記] 編集

_ [OpenCV][Debian][FC][Ubuntu][Linux][研究関係][雑記]OpenCVでcvWaitKey()が効かない場合

 int kin = cvWaitKey(10) & 0xff;
 if(kin == 'q')
   break;

のように、0xffとの論理積をとれば動くことがあるらしい(未確認)。

_ [Debian][FC][Ubuntu][Linux][研究関係][雑記]geditを強化その0

とりあえずプラグインを入れよう。

 $ apt-get install gedit-plugins

_ [Windows][gnuplot][Debian][FC][Ubuntu][Linux][研究関係][雑記]gnuplotで2軸目を使う方法

まず、

 set y2tics nomirror

とし、y2軸の値とy1軸の値を別のものとしてセットする。

そして、

 plot sin(x), 3*sin(x) axis x1y2

のように、x1y2を使ってプロットするように指定する。

以上!


2010/06/08(Tue) ぶれいんだむど [長年日記] 編集

_ [Linux][Ubuntu][FC][Debian][未まとめ]シェルスクリプトを学ぼう

ここ(http://www.geocities.jp/geo_sunisland/index.html)が結構良さそう。

時間を見つけて勉強する。


2010/06/10(Thu) エンジェルウィスパー [長年日記] 編集

_ [C++][Debian][FC][Ubuntu][Linux][研究関係][雑記]引数の処理にgetoptを使ってみる

大体こんな感じ。

 #include <stdio.h>
 #include <unistd.h> /* getoptに必要 */
 int main(int argc, char **argv)
 {
   const char     *flags = "r:m:c:d:t:plgv";
   int swt;
   int r,m,c,d,t;

   printf("command: %s",argv[0]);
   while ((swt = getopt(argc, argv, flags)) != EOF) {
     switch (swt) {
     case 'r':
       r = strtol(optarg, NULL, 0);
       printf(" -%c %d",swt, r);
       break;
     case 'm':
       m = strtol(optarg, NULL, 0);
       printf(" -%c %d",swt, m);
       break;
     case 'c':
       c = strtol(optarg, NULL, 0);
       printf(" -%c %d",swt, c);
       break;
     case 'd':
       d = strtol(optarg, NULL, 0);
       printf(" -%c %d",swt, d);
       break;
     case 't':
       t = strtol(optarg, NULL, 0);
       printf(" -%c %d",swt, t);
       break;
     case 'p':
       printf(" -%c",swt);
       break;
     case 'l':
       printf(" -%c",swt);
       break;
     case 'g':
       printf(" -%c",swt);
       break;
     case 'v':
       printf(" -%c",swt);
       break;

 //    case ':':   /* 値を取る引数に値がなかった場合 */
 //      printf(" -%c needs value\n",swt);
 //      break;
 //    case '?':   /* getoptの引数で指定されなかったオプションを受け取った場合 */
 //      printf("unknown option\n",swt);
 //      break;
     }
   }
   printf("\n");
   return 0;
 }

便利・・・なのかな。

正直、自分で書くのと、そんなにコードの行数は変わらない気もする。

まあ、覚えておいて損はないだろう。

_ [C++][Debian][FC][Ubuntu][Linux][研究関係][雑記]引数の処理にgetoptを使ってみる(補足):引数で負の数を渡したい場合

例えば、

 実行ファイル 引数1(int) 引数2(int)

というような関数を作った場合、

 ./a.out -1 2

のように書くと、「-1」が、1というオプションと判断されてしまう。

そのため、こちら(http://www.am.sanken.osaka-u.ac.jp/~mukaigaw/misc/getopt.html)で紹介されているように、オプションの最後を表す「--」をつけて、 "--"以降はオプションでないと宣言する必要がある。

 ./a.out -- -1 2

うむ、面倒!


2010/06/15(Tue) ブラス・ナックル [長年日記] 編集

_ [Debian][FC][Ubuntu][Linux][雑記]LinuxでDVコンバータを動かす(メモ)

HardOffでコレ(http://www.amazon.com/Dazzle-Multimedia-DM-2200-Hollywood-Bridge/dp/B000063WPO)っぽいもの(形状が微妙に違う)のジャンク品を500円で買ったので、Linux上でなんとか動かないかを調べてみた。

まだ全然動く気配無し・・・。

とりあえず、「kino」か「dvgrab」を使えばいいっぽい?

_ [Debian][FC][Ubuntu][Linux][雑記]Linuxでデジタルビデオ編集(メモ)

こことかを見れば何とかなるかも。

http://sourceforge.jp/magazine/06/11/22/0057200

 Cinelerra - ノンリニアビデオ編集
 Kino - Firewire DVビデオキャプチャ
 Xawdecode - アナログビデオキャプチャ
 MEncoder - ビデオエンコーダー
 DeVeDe - MEncoderのGUIフロントエンド
 MPlayer - 動作再生ソフトウェア
 dvd::rip - DVDリッピング
 Firefox + Flash 9 プラグイン + VideoDownloader アドオン - 動画共有サイトの動画ダウンローダー
 K3b - DVD/CD-R作成

まあ、かなり古い記事なんで、使えるかどうかは微妙。


2010/06/18(Fri) [長年日記] 編集

_ [Windows][雑記]VirtualPCでマウスのホイールが使えない場合(WindowsXPsp3)

仮想PC内で、

「コントロールパネル」⇒「マウス」⇒「マウスのプロパティ」⇒「ハードウェア」⇒「プロパティ」⇒「Microsoft PS/2 Mouseのプロパティ」⇒「詳細設定」⇒「ホイールの検出」を、

 ホイールは存在すると仮定する

に設定を変更する。

以上!

*パーチャルマシン追加機能とかも入れたので、それも関係あるかも。

_ [Linux][Ubuntu][FC][Windows][研究関係][雑記]gnomeの画像ビューアを端末から呼び出す

とりあえず、debianの場合はデフォルトで「eye of gnome」なるのが入ってた。

これを呼び出すには、

 eog hogehoge.png

とすればいい。


2010/06/26(Sat) [長年日記] 編集

_ 【雑記】 OSが起動しない時の修復方法(書きなぐり)

(Linux)パーティションの修復: testdisk , gparted

いろいろまとめられたもの: ULTIMATE BOOT CD(起動時にブートする)

ここを見ておこう(http://lets-go.hp.infoseek.co.jp/bootdisk6.html


2010/06/27(Sun) [長年日記] 編集

_ [雑記]firefoxをバックアップ

「 FEBE(Firefox Environment Backup Extension) 」をアドオンに追加する。


2010/06/28(Mon) OSを再インストールする羽目に・・・ [長年日記] 編集

_ [Windows][雑記] Office2010評価版を使ってみる&試用期間が延長可能?

ここ(http://www.microsoft.com/japan/office/2010/trial/default.mspx)からDLしてインストール。(IDが必要)

(試用期間は60日っぽい)

でググっていると、試用期間を最大5回延長するツールが見つかった。

http://www.wecode.biz/2010/05/office-2010-trial-extender.html

・・・これは使っていいものなんだろうか?

「Although the rearm feature was made for corporate users, it cannot be illegal to use it since it's an official feature」

って書いているので、違法ではないっぽい。

まあ、完全に自己責任やね。

_ [Windows][Linux][Ubuntu][FC][Matlab][研究関係] MatlabをCUIモードで起動

こんな感じで、オプションをつけて起動すればいい。

 $ matlab -nodesktop -nosplash

2010/06/30(Wed) 急がば急げ! [長年日記] 編集

_ [Linux][Ubuntu][FC][雑記] Thinkpadの加速度センサで遊ぶ(準備)

自分が持っているのはT43なので、それでやってみる。

Linux の場合には hdaps というのを入れるのが手っ取り早い。

まず、ここ(http://sourceforge.net/projects/tpctl/files/tp_smapi/)からソースをDL(おそらく最新は0.40)

解凍して

$ sudo make install HDAPS=1

追記:一部のデスとりビューションでは、

$ sudo apt-get install hdaps-utils

で入れられるっぽい。(hdaps-とかも入るので、こちらをおすすめ)

で、それを組み込む。

$ sudo modprobe hdaps

*おそらくコンパイルにカーネルソースが必要なので、それも入れておくこと。

これで、「sys/devices/platform/hdaps/calibrate」にキャリブレーションの値が、「/sys/devices/platform/hdaps/position」に現時点の位置が取り込まれる。

*テキストデータなので、lessとかでも読める。

あとはこれを読み込んで、どうにかするプログラムを書けばいい。

以上!

*IBMのThinkPad以外の加速度センサ内蔵PCでどうすればいいかは不明。時間が出来たらやる。

_ [Matlab][C++][Linux][FC][Ubuntu][Windows][雑記] mexを使ってC(C++)のプログラムをMatlab上で走らせる

基本となるソース(hello.c)は大体こんなの。

 #include <stdio.h>
 #include "mex.h"

 int hello_world(int nlhs, int nrhs)
 {
   printf("Hello World in c func nlhs = %d nrhs = %d\n",nlhs,nrhs);
   return 0;
 }

 void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
 {
   mexPrintf("Hello World nlhs = %d nrhs = %d\n",nlhs,nrhs);
   hello_world(nlhs,nrhs);
   return;
 }

で、matlab上で、

 >> mex hello.c

としてコンパイルし、

 >> hello

で実行。(hogehoge.cのhogehogeが関数名になる)

また、mexでのコンパイル時には、gccとほぼ同様のオプションが指定できる。

なので、こんな書き方が出来る。

 >> mex CC=g++ CXX=g++ hogehoge.c -lhoge -L./

これで、.cのファイルをg++でコンパイルしてくれるようになり、libhogeをリンクするように指定できたはず。

まあ、あれだ。

プログラムは、mainの代わりにmexFunctionを使う、コンパイルはgcc(g++)の代わりにと思えば大体OK?(まったくもって厳密ではないが)

*printfによる表示が、matlabにコントロールが戻るときに一度に行われるっぽい?ので、バグ探しとかは難しそう。

  • scanfのような、入力を求める関数を呼ぶと、途中で終わってしまう?

_ [OpenCV][Matlab][C++][Linux][FC][Ubuntu][Windows][雑記] mexを使ってC(C++)のOpenCVを使ったプログラムをMatlab上で走らせる

次のような感じで特に問題はないはず。(ほぼOpenCVのサンプルと同じ)

ソース名:mex_opencv.cpp

 #include <cv.h>
 #include <highgui.h>
 #include <ctype.h>

 #include "mex.h"

 int capture()
 {
   CvCapture *capture = 0;
   IplImage *frame = 0;
   double w = 320, h = 240;
   int c;

   capture = cvCreateCameraCapture (0);

   cvSetCaptureProperty (capture, CV_CAP_PROP_FRAME_WIDTH, w);
   cvSetCaptureProperty (capture, CV_CAP_PROP_FRAME_HEIGHT, h);

   cvNamedWindow ("Capture", CV_WINDOW_AUTOSIZE);

   while (1) {
     frame = cvQueryFrame (capture);
     cvShowImage ("Capture", frame);
     c = cvWaitKey (2) & 0xff;
     if (c == '\x1b')
       break;
   }

   cvReleaseCapture (&capture);
   cvDestroyWindow ("Capture");

   return 0;
 }

 void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
 {
   capture();
   return;
 }

コンパイル:

 >> mex -I/usr/local/include/opencv -L/usr/local/lib -lml -lcvaux -lhighgui -lcv -lcxcore mex_opencv.cpp

どうも

 `pkg-config --cflags opencv`

とか

 `pkg-config --libs opencv`

は使えないっぽいので、そのまま書く。

それ以外はgccとかでコンパイルする際とほぼ同じオプションでいいはず。

実行は

 >> mex_opencv

でOK。

(「Esc」で終了するはずだが、Windowがきちんと消えない・・・要改善)

以上!