Archive for the '仕事' Category

podcastの自動取得(5)

podcastの自動取得にはもっと楽な方法があるのだと思うが、ちょっと探して出てきた中ではなかなか良い方法が見つからなかったのでじたばたしてみた。

自分でコードを書かなくても、例えば castget を使えば通常は大丈夫だ。.castgetrc に、ほんの少し設定すればファイルをダウンロードしてくれる。少なくとも キラ☆キラは大丈夫だ。ところがゴールデンラジオだと表示用のjpegファイルしかダウンロードしてくれなかった。また、wgetと異なり、タイムスタンプを保存してくれないので、再生するMP3プレイヤーによっては若干不便である。

他に YouTube 用の youtube_dl という便利ツールもあった。今のところ出番はそれほど無いが、そのうち使い道が分かるかもしれない。

これらのツールは cron で自動起動して、取得したデータをサーバに保存しておく。保存ディレクトリを samba で参照できるようにすれば、出がけに MP3 プレーヤーに簡単に転送できる。USBメモリ状のプレイヤーなら、サーバにコンソールをつけておいて、直接送り込んでも良い。

次の課題はファイルの整理だ。昔のラジオ番組などとあわせてうまく整理する方法を考えている。

podcastの自動取得(3)

「ありがとう浜村淳です」は毎日更新されるので、これこそ毎日サーバで自動的にダウンロードしたい。ところが Windows Media なので、便利ツールは大抵 Windows で手動取得である。なんとかFreeBSDでダウンロードできないだろうか。ということで探してみると mimms という大変便利なツールの有ることがわかった。早速導入。

portinstall multimedia/mimms

試しにPR音声を取得してみたい。使い方は? …

$ mimms --help
Usage: mimms [options]  [filename]

mimms is an mms (e.g. mms://) stream downloader

Options:
  --version             show program's version number and exit
  -h, --help            show this help message and exit
  -c, --clobber         automatically overwrite an existing file
  -r, --resume          attempt to resume a partially downloaded stream
  -b BANDWIDTH, --bandwidth=BANDWIDTH
                        the desired bandwidth for stream selection in
                        BANDWIDTH bytes/s
  -t TIME, --time=TIME  stop downloading after TIME minutes
  -v, --verbose         print verbose debug messages to stderr
  -q, --quiet           don't print progress messages to stdout

 

実は元々、mms: って何?状態だった。知っているURIは  http: で始まって asx で終わるのだ。そこで asx ファイルの中身を見てみると、XMLっぽいテキストファイル。この中に  mms: で始まる URI 発見。なるほどそれでツールの名称にも mms が含まれるのだと納得。試しにその URI を指定して実行したら、時間はかかるけれどもファイルは取得できた。

mimms mms://mbs.sswmt1.smartstream.ne.jp/mbs/arigatou/ari_intro.wma

ディレクトリを掘ったりはしないらしい。

というわけで、この mimms を呼び出すスクリプトを、podcast用のを改造して書いてみた。

<?php

// 起動パラメータがなければ異常終了
if($argc <= 1) {
    exit(1);
}

// 適当なUser-Agentを設定
ini_set("user_agent","Mozilla/2.0 (compatible; get-mbs.php)");

// 指定されたパラメーターをXMLだと思って開く
$file = simplexml_load_file($argv[1]);

// falseが返ってきたら異常終了。
if(!$file) {
    exit(2);
}

// 直接欲しいエレメントを取ってくる。SimpleXMLは便利。
$result = $file->xpath('/ASX/Entry/Ref');

foreach($result as $elm) {
    if(is_null($elm["href"])) {
        continue;
    }
    // URIっぽいものを指定して mimms で取得
    $cmd = "/usr/local/bin/mimms -r -q -b 131072 ";
    //print $cmd . $elm["href"] . "\n";
    exec($cmd . $elm["href"]);
}

exit(0);

?>

これでどうかな、と実行してみたら、やっぱり上手く行かない。がっくし。URIを直接指定して mimms 起動だと上手く行くのだが。

podcastの自動取得(2)

せっかく自動取得できると思ったら、サーバ上では上手く動かない。困った。

エラーには’simplexml_load_file’という関数はない、と書いてある。CentOS5.6にはphp53パッケージをベースに関連パッケージを色々入れているのだが、FreeBSDの方にはphp5本体とDBモジュールだけしか入れていないのではなかったか。portsから入れた時に確かに設定項目が少ない気はしてはいた。

php -info

にて表示させてみると、FreeBSD側にはそもそも SimpleXML と出てこない。CentOS5.6の方では出る。
というわけで話は簡単。探してみた。textproc/php5-simplexml というパッケージがあって、導入されていない。
早速導入する。

portinstall php5-simplexml

試してみるとちゃんと動作した。これでキラ☆キラが電車の中でも良い音で聴ける。ついでにゴールデンラジオも聴ける。めでたしめでたし。

ここまで出来たら欲が出てきた。radiko登場以前によく聴いていた「ありがとう浜村淳です」も聴きたい。「ありがとう浜村淳です」は基本当日のみ公開で翌日消されてしまうが自動取得しておけば聞き逃しもなくなる。何とかならないだろうか。

podcastの自動取得(1)

おそらく世間では iTunes で自動取得しているのだと思うが、私としては最近あまり役に立っていないサーバに仕事させたいので、取得スクリプトを書くことにした。

とりあえずお手軽にPHPで。

ざっと調べてみると、podcastのフィードを拾って音声または動画ファイルを普通にHTTP で取り込めば良いらしい。そこで

  1. URI決め打ちでフィード取得
  2. メディアだけをダウンロード

というPHPスクリプトを書く。

まずは開発用のCentOS5.6環境で次のようなスクリプトが動作することをまずは確認する(した)。

<?php
// パラメーターがなければ異常終了
if($argc <= 1) {
     exit(1);
} 

// それらしいUser-Agetに設定
ini_set("user_agent","Mozilla/2.0 (compatible; get-cast.php)");

// 指定されたパラメーターをXMLだと思って開く
$xml = simplexml_load_file($argv[1]);

// 失敗したら異常終了
if(!$xml) {
    exit(2);
}

// 直接欲しいエレメントを取ってくる。SimpleXMLは便利。
$result = $xml->xpath('/rss/channel/item/enclosure');

foreach($result as $elm) {
    if(is_null($elm["type"])) {
        continue;
    }
    if(is_null($elm["url"])) {
        continue;
    }
    // メディアファイルがあれば
    if( (strncasecmp($elm["type"], "audio", 5) == 0)
     || (strncasecmp($elm["type"], "video", 5) == 0) ) {
        // wgetコマンドでダウンロードする
        $cmd = "/usr/bin/wget -q -c -nd ";
        //print $cmd . $elm["url"];
        exec($cmd . $elm["url"]);
    }
}

exit(0);

?>

上のスクリプトを呼び出すシェルスクリプトを書く。指定ディレクトリに変更してファイルをがばっと取ってくるようにする。例は自分ちでキラキラのpodcastを定期取得する場合のもの。ファイルが存在するとダウンロードしないで終了してしまう(wgetの起動オプション参照)ので毎日実行しても大丈夫。

#!/bin/sh -
#

HOMEDIR=/home/myhome
PHPCMD="/usr/local/bin/php ${HOMEDIR}/get-cast.php"

# kirakira
cd ${HOMEDIR}/Kirakira
${PHPCMD} http://www.tbsradio.jp/kirakira/index.xml

cronに登録する。

$ crontab -l
SHELL=/bin/sh
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin
#
#minute hour    mday    month   wday    command
55      3       *       *       2-6     /bin/sh /home/myhome/get-cast.sh

これで、寝ている間にダウンロード完了だ。設置先のサーバはFreeBSD8.2なのでwgetのパスなどを軽く修正。その後、シェルスクリプトの方を実行してみた。

が、なんと、上手く行かない。困った。

ようやくWordPress3.1を入れられた

WordPress3.1がphp5.2未満に対応しないということで当サイトはアップデートを見合わせていた。自前ビルドや自前パッケージの作成は最近では荷が重く感じていて、CentOSが6になるまで待つかいっそUbuntuにするか悩んでいたのだ。

さて、今日CentOS5.6公開のアナウンスがあり、とりあえず一カ所アップデートしてみたら5.5からはあっさり完了。落ち着いたところでphpに関連するパッケージをみてみるとphp53というパッケージが並んでいる。これを使わない手はないので総入れ替えしてみた。手順は簡単で、yumで導入済みのphp-*のモジュールを一覧を出し、該当のものに相当するパッケージをphp53-*にする。手順としては次の通り。

1.httpdを止める。

service httpd stop

2.phpパッケージを消す。このサイトではこういう感じだった。

yum remove php php-cli php-common php-devel php-mbstring php-mysql php-pdo

このときphp-pearも削除されてしまうので注意。

3.php53パッケージに入れ替える。一緒にphp-pearも再導入。

yum install php53 php53-cli php53-common php53-devel php53-mbstring php53-mysql php53-pdo php-pear

4. httpdをあげる。

service httpd start

この後Wordpressを3.0から3.1に注意深く更新(ここのサイトではほとんど吊しの状態で使っているので自動アップデート)。

今のところ問題はない。

W-Zero3の使い道

残念ながら完全出稼ぎモードで仕事をしなければならなくなった。

電子メールは携帯に転送しているが添付付きなどが来るとどうにもならない。そこで、そろそろ引退させようと思っていたサイボウズをまたぞろ引っ張り出してきた。さすがにバージョンアップして最新版にするつもりはない。サイボウズには普通にパソコンでアクセスできるが、外出先ではスマートフォンが欲しい。

幸いW-Zero3 Advanced/ES ならある。近頃は、短距離移動時はちーたんでtwitter、長距離移動時はパソコンのモデムとしての出番しかなくなっている。ちーたんを入れるためにOperaをアンインストールしてあり、ある意味抜け殻状態である。事情が事情なので新しいスマートフォンを入手している場合でもない。何とかスマートフォンとして利用できないものだろうかと少々じたばたしてみた。

以下本題である。

自分の用途には次の方法で何とかなりそうである。

  1. Operaは、純正(?)の8.7とOperaMini5.1の両方を使う
  2. メールはWebメールだけにして、W-Zero3メールは極力使わない。
  3. 余裕が出来たら有償のツールでタブレットも繋ぐ。

まずはWebブラウザである。

Operaのサイズが大きく、Twetterクライアントとしても今ひとつなので削していた。今回はまずサイズの小さいOperaMini5.1を導入した。これは快適である。勢い付けてスクロールできるようになったのと画面サイズがやや大きく使えるのが良い。他のアプリケーションへの切り替えがとても難しいのが欠点だが、Webだけで完結させるつもりなので問題はない。

ところが、ウィルコムの公式メニューにはアクセスできないようだ。タイムアウトになってしまう。他にもAdvanced/ESではW+Infoというサービスが利用できるはずなのだが、Operaをアンインストールすると消えてしまう。

そこでOpera Mobile 8.7を復活させた。もっと新しい版も存在しているのだが、やはり公式メニューにアクセスできないので専用の8.7を入れる。どうせ普段はOperaMiniだけを使うので問題はない。両方同時にインストールしておいても大丈夫だし、同時に起動してもやはり問題無いようだ。

OperaMiniと違ってOperaMobileはサイズが大きい。なぜか本体メモリが一杯で入れられなかったのだが、その理由の半分はメールをため込んでいたせいだった。メールはPHSにも転送するのだが、手入れをしていないのでため込み放題になっていた。全部削除して、転送も止めた。残りの半分は以前ダウンロードしたインストーラー。これで8.7を復活させることができた。公式メニューにもアクセスできる。

久々に公式メニューにアクセスしたのでコンテンツを見て回ったところ、W-Zero3と他の無線LANの機器をAd-hocモードで接続してインターネットに出て行けるツールが有償で存在していた。お試しで一ヶ月程使えることになっている。これに対応できるタブレットがあれば検討してみたい(パソコンはW-SIM抜いて使えば良いので対象外だ)。

これで必要最低限の装備は揃った。flashに対応していないのでradikoが聴けないが、そこはしばらく我慢しよう。普段聴いている番組のほとんどにはpodcastがあるので聴けなくなるわけでもない。

podcastは別のコンピュータで寝ている間にダウンロードすることにした。それについては別エントリーで。

XBeeのアンテナ

前の仕事でXBeeを試していた。

ちょっとしたメッセージを送るのに便利なので提案したのだが、実際に設置したら電波が届かない事があるという。

設置場所は地上と、そこから上100m前後。試しに同程度のビルの上と下でXBee-PROでレンジテストしてみたところ、特に問題は無さそうだった。この時は、ビルの上ではXBeeのループバックを手で持ち、下からはパソコンでX-CTUでチェックだったと思う。ところが実際に設置して上下で試すと30mも届かないという。違いはアンテナがチップアンテナからダイポールアンテナに変わったことと、手持ちではなく、あるところに固定で設置された事だ。

代替品を求めて他の製品のメーカーに訊ねたり、電波に詳しい代理店の方に伺ったりしたところ、次のような原因が考えられるとのこと。

  1. マルチパスがあるのではないか。
  2. ダイポールアンテナでは指向性がおおむねドーナツ型になるので、上下の配置では両方とも穴にあたり、電波が非常に弱くなっているのではないか。
  3. そもそもホイップアンテナやダイポールアンテナでは片一方に地面があることを仮定している。上の方に設置したXBeeでは地面がないのでアンテナとして機能していないのではないか。

その後深くは追っていないが、twitterで距離が出なくて困っている方をお見かけした。私だけがこういう現象に遭遇しているのではなさそうだ。

なお、地面がないので上手く動作しない場合の対策として、18cm程度の長さ(2.4GHzの波長に相当)の金属板を指向性の軸に対して下にしたら、もしかしたら上手く行くかも、というアドバイスを得た。試せていないのであくまでメモとして記述しておきたい。

さらについでに、アンテナ毎の指向性についての説明と実測値については次の文書が参考になる。

XST-AN019a_XBeeAntennas.pdf

twitterのプラグインを追加してみた

長らくtwitterばかりに投稿していたが、仕事の内容が変わるので、当サイトの内容を修正した。

ついでにtwitterの投稿を表示するプラグインを追加した。WordPressのプラグイン追加は非常に簡単である。欲しいプラグインを名前で検索して選べば良い。

今回はTwitter Goodiesというプラグインを入れてみた。どんなもんだろうか。

LBP6300

キヤノン Satera LBP6300 3550B001キヤノン Satera LBP6300

電気を食うのと大きくて邪魔なのと自分自身は直接必要としていなかったので今まではインクジェットプリンタばかり買っていたのだが、必要に迫られて購入した。

今のところ置き場がないので居間のテレビの脇に置いてある。最近のAV機器はネットワーク接続しないと100%楽しめないので、ネットワーク接続のプリンタの置き場にはぴったりであった。しかしやっぱり邪魔は邪魔。

印刷速度や品質は申し分ない。これで3万円そこそこなんだから、不況になるわけだ。

風呂で資料を読むのに、2ページ割り付け両面印刷が重宝する。インクジェットと違ってお風呂に持ち込んでもにじみを気にする必要がないのは良い。もっともインクジェットでもそんなにはにじまないけれど。

最大980W喰うということで、この時期エアコンのフルパワー時とかぶらないようにおっかなびっくり使っているが、そこまで気にするなら消費電力計で調べた方が良いかもしれない、と少し思った。しかし、待機時の6W消費と、都度投入の待ち時間+起動時の高負荷とどっちが良いかとか、他にも色々調べたくなるから、今は止めておこう。

EAGLEに夢中

AVRを使ったツール、だんだん本格的に利用したくなってきた。

今までは蛇の目基板にワイヤーを這わして配線していたのだが、Xbeeは2mmピッチで変換基板が要るし、コネクタを付けるとなると結局別途穴を開けなくちゃならない。

それならば、自分で書いた回路図の通り配線して動いているのだから、それをもとにプリント基板を作ったらよろしいということでフリーソフトでプリント基板の版下を作る事を考えた。これが2週間位前の話。

google先生に尋ねると、PCBEでしょ、という結論が。ところが、全然わからない。回路図を組むのと配線するのとでは結構考え方が違う。蛇の目基板に配線する時は、一度部品を配置してデジカメ写真を撮り、その上を3色のサインペンで配線をし、書いている間に気がついたおかしな点を直してはまた配置し直して写真を撮り直し、またまた書き直して、それを設計図として組んでいたのだが、PCBEだとぴんとこない。歳のせいなんだろう。

それで、回路図があればある程度自動で配置してくれそうなソフトとして TinyCADFreePCB という組み合わせをGoogle先生に教わったのだが、これもよくわからない。

ここまで1週間。

ここでFreePCBを見つけたときの検索結果で思い出したのが、デジタルデータを送るとPCBを作ってくれるサービスだ。そのサービスで対応してくれそうなアプリケーションを探すと EAGLE というのがある。私としてはOSにLinuxが使えると助かるのだが、EAGLEはLinuxやMacOS Xで動作する。これは良い。

というわけで早速Freeware版をCentOSに導入を試みた。H8のgccとEclipseを入れてある所に追加導入である。インストーラはやけにでかいShell scriptになっている。スクリプト中にインストーラ本体が書き込まれているようだ。インストーラを起動すると  libssl.so.0.9.8 がないとのたまう。探してみると、あるにはあるのだが libssl.so.0.9.8e で一文字多い。シンボリックリンクで逃げると今度は libcrypto.so.0.9.8 がないという。これも e が余計に付いているファイルがあったのでシンボリックリンクを張った。これでインストールできた。

まずは回路図、で躓く。例えば三端子レギュレータを英語で何というのか知らないので探し出すのに一苦労。一応あるにはあった。外部との接続でパソコンでよくあるような2.54mmピッチのピン端子は何というのか。またまたひーこら言いながら探す。これではらちが空かない。そこで「EAGLEによるプリント基板製作の素」という本を入手し、一からやり直し。これが先週の木曜日の話。なるほど部品を探すには型番で絞り込み検索をすれば良いのか。部品はEAGLEのサイトからダウンロードすれば大体揃うようなので、これでようやく回路図が書けた。

めでたしめでたし、と言いたいが、ここからお試しで片面生基板を加工するまでまだまだ長い道のりの開始だ。