Dies Aliquanti

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

PureDataはじめました…

日米首脳会談は無事成功裏に終了したらしいが、「モメそうな議題」をはずしたのだから当たり前。
こういうのを「大人の知恵」と呼ぶのだろう…納得がいかないのは、私がコドモだからさ…

それはともかく、Hauppauge HD PVRのむりくりAAC5.1ch対応を一応めどが立ちやることがないので、以前から気になっていた、PureDatapuredata.info/をちょといじってみようと思い、CQから最近出た本を買ってみました。

グラフィカル言語PureDataによる音声処理
んー内容的に「チュートリアル」ではないことは知っていたのですが、もう少しチュートリアル的な内容があるとよかった。本来の内容はアマチュア無線の音声データ処理のためのDSPなのですが、正直これもちょっとくいたらない感じ…値段も100ページに満たないMookだし、立ち読みしたら多分買わなかったと思います。著者の方ごめんなさい。ま、批判めいたことを書くのは簡単ですね。
いずれにしても、しばらくPureDataで遊べるといいな…



スポンサーサイト

UbuntuにVMplayer

玄箱HGのパフォーマンスの低さに業を煮やし、目的が変わって使わずにほっておいたマザーボードにUbuntuデスクトップ(8.0.10)を入れてみました。もちろん快調。
このPCはRegzaの録画用NASとして、Sambaをいれ、Hapupauge HD PVRも2台つないであります。C2D E7200+メモリ2Gなのでまだまだ余裕がある状態です。
 もったいないので、ubuntuをホストOSにして、VMPlayer(2.5.2)をいれ、Windows XPをゲストOSにしてみました。
VMWareのダウンロードページには、.rpmというファイルと.bundleというファイルがあります。.rpmはRedHat系のパッケージのようです。ubuntuはdebian系なので、apt-getで取得できるパッケージがあれば簡単なのですが…調べてみると、.bundleの方で良いようです。早速ダウンロードして、viで開いてみると、シェルスクリプトのようですが、ファイルの後半の方がバイナリになってますね。時々見かけるlinux用の自己解凍プログラム/スクリプトのようです。

 早速、実行権限を設定して、デスクトップのターミナルから実行するとGUIで設定してインストールは簡単にできました。別途用意したWindowsのVMを起動するとまったく問題ありません。ただ、X-Window上で動かすのはちょっともっさりしていて、ゲストOSのWindows上でリモートデスクトップ(RDP)のサービスを動作させて、LANの別のPCからアクセスするのでもパフォーマンスは変わらない感じ。だったらRDPの方がいいですね。

ついでに、TeamViewerとWOLのプログラムもゲストOSに入れて、快適に動作を確認。(もともとのホストOSはRegzaの録画用に電源入れっぱなしなので、)これで、家の外からも家庭内のPCを自由に使えるようになりました!



bash の()のPIDは?Bashではまるシリーズ (2)

 まえにbashスクリプトでそのスクリプト自体をバックグラウンドで実行するには、

#!/bin/bash
(
 やりたいこと
) &

でできるという話を書きましたが、()カッコのなかは、サブシェルで実行されるので、ことなるPID(プロセスID)を持つはずです。今日のお題はこれを取得するには?です。

普通にやってみる。

% cat ./test1.sh
#!/bin/bash
echo $$
(
    echo $$
    sleep 10
) &

% ./test1.sh
3650
3650

% ps
   PID TTY      TIME CMD
 12337 pts/5    0:00 csh
  3652 pts/5    0:00 sleep
  3653 pts/5    0:00 ps
  3651 pts/5    0:00 test1.sh
%

うまくいきませんね...親シェルのPIDと同じ...
要はシェルスクリプトを親用、子用でわけてしまえばいいわけだから、

% cat ./test2.sh
#!/bin/bash
echo $$
./test2_sub.sh &

% cat ./test2_sub.sh
#!/bin/bash
echo $$
sleep 10

% ./test2.sh
3712
3713

% ps
   PID TTY      TIME CMD
 12337 pts/5    0:00 csh
  3714 pts/5    0:00 sleep
  3713 pts/5    0:00 test2_su
  3715 pts/5    0:00 ps

うまく、いっているようです。ファイルが2つに別れているのはイマイチ・・・

evalを使ってみる、

 % cat ./test3.sh
#!/bin/bash
echo $$
(
    eval echo \$\$
    sleep 10
) &

% ./test3.sh
3805
3805

% ps
   PID TTY      TIME CMD
 12337 pts/5    0:00 csh
  3807 pts/5    0:00 sleep
  3808 pts/5    0:00 ps
  3806 pts/5    0:00 test3.sh

キーっ、うまくいかない。orz
こうなりゃ () なんか使わないで、 ヒアドキュメントで直にbashに喰わせてやるっ!&はどこに書けばいいんだっ?!

% cat ./test4.sh
#!/bin/bash
echo $$
/bin/bash << EoS &
    eval echo \$\$
    sleep 10
EoS

% ./test4.sh

5257
5258

% ps
   PID TTY      TIME CMD
  5260 pts/5    0:00 ps
 12337 pts/5    0:00 csh
  5259 pts/5    0:00 sleep
  5258 pts/5    0:00 bash

 

はぁ、はぁ・・・うまくいったみたい・・・

ほんとうはどうやるの?



bashって嫌いだ、の続き

相変わらず、bashでハマってます。本でも買えばいいのだろうけど、いまさらbashに詳しくなってどうする?って感じだし…
 でも、bashのスクリプトがすらすら書けると、プログラマには尊敬されるかもしれない。

今日のお題は、「bashのシェルスクリプトをバックグラウンドで実行するには?」です。
&をつけてコマンドを実行する、ではなくて、自分自身(シェルスクリプト自体)をバックグラウンドで実行する、です。

#!/bin/bash
$0 $* &
  実際にやりたい処理
    :

では、出来の悪い「fork爆弾」だし・・・ ()で囲ったコマンドは子プロセスのshellで実行されるのだから、 ( 実際にしたい処理 ) & でいいのかしら?

#!/bin/bash
i=0
(
while [ -n "a" ] ; do
    echo $i
    i=$(expr $i + 1 )
    sleep 1
done
) &

いいみたい・・・



bashって嫌いだ・・・

 HD-PVR用の簡易キャプチャソフト(linux用)のデータコピー以外の遅くてもいいところは、bashのスクリプトでできています。いわゆるコマンドラインのオプションを使えるようにしようと、スクリプトを少しかきなおすことにしましたが、bashってどうもわかんない。
 インターネットを探しても、出てくるのは知っているような話が多い・・・orz
ここのサイトに書いてあることが結構役に立ったが、exprとか、ヘンタイ的な変数の扱いとか、、、
 結局1時間ほど格闘して、コマンドラインオプションのパースをするところを作って見mした。caseまではたどり着けず、if ~ elifの羅列。

bashって嫌いだ・・・

#!/usr/bin/bash

device=/dev/video0
folder=~/HDPVR_REC
log=~/HDPVR_REC/log.log

v4lop=( '-A' '-Ab' '-c')

while [ -n "$1" ]; do
    #echo "$1"
    #echo $( expr "$1" : "\(-device=\).*"  )
    if [ -n "$( expr "$1" : "\(-device=\).*"  )" ]; then
        device="$(expr "$1" : '-device=\(.*\)' )"
    elif [ -n "$( expr "$1" : "\(-folder=\).*"  )" ]; then
        folder="$(expr "$1" : '-folder=\(.*\)' )"
    elif [ -n "$( expr "$1" : "\(-log=\).*"  )" ]; then
        log="$(expr "$1" : '-log=\(.*\)' )"
    elif [ -n "$( expr "$1" : "\(--opt=\).*"  )" ]; then
        v4lop[ ${#v4lop[@]} ]=$1
    elif [ -n "$( expr "$1" : "\(-\).*"  )" ]; then
        echo $(expr "$0" : ".*/\(.*\)\$" ) : usage
        echo Brabra
        exit 1
    else
        arg=$1
    fi
    shift
done

echo device ${device}
echo folder ${folder}
echo log ${log}
echo arg ${arg}
for opt in ${v4lop[@]}; do
     echo v4l ${opt}
done

 



FC2Ad

まとめ

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。