SVX日記

2004|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|09|10|11|12|
2024|01|02|03|04|05|06|07|08|09|10|11|12|

2006-07-01(Sat) クルクルイッペイ

  最近、思う存分に更新をサボっているが、実はちょっと作曲という創造にハマっていたりする。5月末に作曲のためのツールを作り始め6月の頭に使える状態になってしまったが最後、もう、コンポージングにまっしぐら状態なのである。

  今まで、ほとんど音楽になんぞ興味なかったのだが、一般世間で「趣味」として確立されているものというのは、どれもそこそこの奥の深さを持っているものだ。「プログラミング」「カメラ」「電子工作」「演奏」……どれも、その世界のルールというものがあり、それを理解していくコトは最高に楽しい。

  ちなみに、上述の自作作曲ツールは「極めてオレ用」なので、たぶんオイラ以外の誰にも使われるコトはないと思うが「頭の中に浮かんだフレーズを記録する」という意味では、かなりスキのない便利なツールだと自負している(ただし強烈にエンジニア用だが)。公開するつもりはあるが、そのためにはもう少しブラッシュアップしたく、しかしブラッシュアップするヒマがあったら、次のフレーズを打ち込みたいという、オレ的にはかなりの好循環状態なので、もう少し先になりそうである……と、音楽ネタはこれくらいにして。

  先日ちょっと書いたが、ウチには生まれて約半年のガキがいるのだが、こいつがまた面白いのだ。夜中に寝ている時にかなり移動&回転するのである。起きている時にうつ伏せにしておいても、数センチしか進まないくせに、夜に寝かせて一晩経つと360度回転しながら布団からハミ出て、タタミの上で寝ていたりする。

  画像の説明

  これはどうにかして記録したいのだが、ウチにはビデオカメラがない……というか、暗い中でインターバル撮影がしたいのだ。一般のビデオカメラにはそんな機能はない。では、どうするか……。

  このカメラを使うのである。この007デジカメには「Surveillance Mode(監視モード)」という機能がついていて、1分から90分間隔でインターバル撮影ができるのであるッ!! イザ……

  画像の説明

  ……写りません。そりゃ、そうか……いくら自動露出とはいえ、常夜灯だけの寝室でマトモに写真を撮るには、長時間露出が必要だ。このデジカメはオモチャレベルであるから、そんなコマかい設定ができるわけもない。残念。

  じゃ、ウチの主力デジカメを登場させるしかない。で、長時間露光だ。いくらイッペイが夜中に回転するからといって高速回転するワケではないので、感度を800にし露光時間を8秒間に設定すれば、どうにか写るだろう……

  画像の説明

  ……ギリギリだが、写る。しかし、ウチのCaprioG4wideにはDCアダプタが接続できない……試しに電池を満充電してインターバル撮影を開始してみたが、電池は1時間も持たなかった。ダメじゃん!! まさに、アチラが立てばコチラが立たず!!

  で、こんなモノを作ってみた。

  画像の説明

  こう見えて、照明装置である!! 8個の赤外線LEDによるフルパワー赤外線照射!! これなら、007デジカメでもなんとか写るだろう……

  画像の説明

  ダメかよッ!! ……っつーか、定格で光らせても、赤外線LEDの照明強度ってこの程度なの!? ちなみに、以下の写真は、CaprioG4wideで8秒間露光したものである。ほんの数センチで、ほんのりかよ……。

  画像の説明

  ちゅーわけで、次の作戦に移行するオイラなのであったッ!! 続くッ!!


2006-07-15(Sat) プチLinuxBox構築計画

  先日より、ギター演奏だの、作曲だの、暗中での撮影だの、次々に個人的プロジェクトを立ち上げては、オープンなまま放置し放題のオイラだが、ココにきて、さらにプロジェクトを増やしてしまった。

  画像の説明

  コレだ。ファンレス動作のx86互換機……とはいえ、キーボードもディスプレイもつながらないので、IBM/PCとは言えない。いわゆる無線ルータ用のプラットフォーム。平たくいえばLinuxを動かしてルータを作るためのベースボードである。

  実際に無線LANルータにするためには、本体上のminiPCIスロットにカードを実装する必要があるが、現状ではそんなコトするつもりはない。単に、家のサーバをコレにリプレースしてしまおうと思っているのである。電源はACアダプタで完全ファンレス、消費電力10W以下、しかもLANのI/Fが3つもあるッ!! 3つあればDMZが構築できるアルよッ!! こんなボードが欲しかったアルッ!!

  画像の説明

  そしてなんといってもオイラの心をくすぐるのが、この赤い筐体……なんというオレ好みッ!! しかも、この筐体とボード、送料まで合わせても2万円を超えないッ!! 安いッ!! 起動にはコンパクトフラッシュが必要だが、そんなの手持ちのゴミを流用すりゃいい。うっはーッ!!

  しかし、早速、動かしてみようとしたトコロでハタと困った。こいつにはディスプレイがつながらない。いわゆるシリアルコンソールをくっつけなければ、動作してるコトすら確認できないし、操作するコトもできない……まずはマニュアルを読もう……

  ……うーむ、英語だが、なにしろ、電源をつなげよ、「null modem cable」でシリアルコンソールにつなげよ、「1:1 connected serial cable」でつなぐと壊れるぞ、通信パラメータは「38400 8N1」だぜ、あとコンパクトフラッシュはホットプラグじゃねーから電源オフの時に挿せよ……てなトコか。

  で、なんとなく想像は付くんだけど「null modem cable」ってなに? 調べると予想通り「クロスケーブル」のコトだった。そんなの手元にないよ。作るか? でも、9ピンメスコネクタの部品は10数個もあるけど、オスは基板装着用が1個しかない……えーい!! もう使わないだろうコレをバラすか!? バラした!! RXとTXを引っくり返してハンダ付けした!! 挿そうとした!! 挿さらんッ!!

  アホなコトに、作ってから気づいた。シリアルのクロスケーブルは、両端のコネクタがメスなのである。ほんじゃ、手持ちの部品を3本の線でつなぐだけじゃん。10分で完成したよ。ホレ。

  画像の説明

  で、愛用のPCにUSB-シリアル変換ケーブルをかまし、COM2でTERATERMを立ち上げ、電源ON!!

  画像の説明

  よっしゃ、とりあえず、動作は確認!! じゃ、コンパクトフラッシュへのRHEL4の押し込み作業を開始だぜッ!!


2006-07-16(Sun) GRUBオンステージ2!!

  昨日の作業の続き。コンパクトフラッシュにLinux環境を構築するには、コンパクトフラッシュに非常に低いレベルでの書き込みを行う必要があり、そのためにはLinuxの母艦が必要となる。愛用のPCにはcoLinuxが入っているが、リアルなLinuxは入っていない……というか、入れるとTERATERMやOperaが使えなくなるので作業が滞る。そんな時はこのジャンクPCの出番である……

  ……んが、このPCはRHEL4のインストールディスクで起動しやしねぇ!! なんでこう、素直に物事が進まねぇかなぁ……確認すると、RHEL4のCDにはi686バイナリのカーネルパッケージしか含まれてない。そうですか、i586は切り捨てですか。いや、いまだにMMX-Pentiumなんて使ってるオイラがどうかしてるんで、別にいいんですけどね。そういうメインストリーム以外の部分をある程度は切り捨てることによって、RedHatという会社は収益を上げているわけだし……な〜んてコトを時々サポートで答えているような……。

  画像の説明

  ほんじゃ、以前に入れたFedora上で作業するか……なんだろ、grub-installかな? とりあえず、grubだけインストールして、コンパクトフラッシュをWRAPに挿して起動!!

PC Engines WRAP.1C/1D/1E v1.11
640 KB Base Memory
130048 KB Extended Memory
 
01F0 Master 848A Hitachi CV 7.2.2
Phys C/H/S 246/2/32 Log C/H/S 246/2/32
GRUB Loading stage2.......

  ここでストップ。あ、そーか、grub.confを書くのを忘れてたね。

GRUB Loading stage2.......

  むぅ……アレか、接続がシリアルコンソールだからgrub.confの冒頭に……

serial --unit=0 --speed=34800
terminal serial

  ……の記述が必要なのかな?

GRUB Loading stage2.......

  うぐぐ……なんでgrubのメニューが出んのじゃ!!

  この後、数時間に渡って作業するも……

GRUB Loading stage2.......

  ……の状態から、さっぱり前に進まんッ!! もう寝るッ!!


2006-07-17(Mon) GRUBの真髄へ

  ウンともスンとも動かないまま、連休最終日へ。今日を逃すと、まとまった時間が取れない。ここで一旦、方向性を変え、既存のコンパクトフラッシュ用ディストリビューションを「とりあえず」使ってみるコトにした。ポンと放り込んで使いたいのでiso形式が用意されているものがいい……コレだ「pyramid linux」ってヤツ。コレがいい。ddコマンドでベッタリとコンパクトフラッシュに書き出して、差し込んで起動……

PC Engines WRAP.1C/1D/1E v1.11
640 KB Base Memory
130048 KB Extended Memory
 
01F0 Master 848A LEXAR ATA_FLASH
Phys C/H/S 1008/4/32 Log C/H/S 1008/4/32
GRUB Loading stage1.5.
 
GRUB loading, please wait...
cbcba! ユ翕FCc茶篥覇篤篤篤篤篤篤篤篤篤篤篤篤篤篤篤篤篤……

  ……う、動いた!! ちょっと後半が化けているが、コレは「pyramid linux」のシリアル設定が19200bpsになっているせいだ。途中でTERATERMの設定を変えると……

  Booting 'Metrix'
 
root (hd0,0)
 Filesystem type is ext2fs, partition type 0x83
kernel /boot/vmlinuz-2.6.16-metrix root=/dev/hda1 console=ttyS0,19200n8
   [Linux-bzImage, setup=0x1200, size=0x105916]
 
Linux version 2.6.16-metrix (root@hagbard) (gcc version 3.4.5 20050809 (prerelease) (Ubuntu 3.4.4-6ubuntu8.1)) #2 Wed Mar 22 15:

  ……このようにキチンとカーネルの読み込みが始まった!!

  しかし、コレで「よかった!!」とはならないのである!! なにせ、オイラは是が非でもRHELを動かしたいのだ。8MBの環境でRHELを動かすなんてのは、ほぼディストリビューションをイチから構築するに近い作業なのだが、オイラは正真正銘の「Linuxのプロ」なんだからそんなコト当然のようにできなくてはならない。むしろ、すでにこんなに長い間「動かねぇ!!」と悩んでいるのが恥ずかしいくらいである。

  気を取り直して考える。自分で作業した場合と圧倒的に違うのは、grubのオープニングメッセージだ。「pyramid linux」だと「GRUB Loading stage1.5.」なのに、オイラがやると「GRUB Loading stage2.......」いったいどっちが正しいんだ!!

  ……とかゴチャゴチャ作業しているウチに、コンパクトフラッシュのブートセクタでなく、誤って母艦のブートセクタをイジってしまったためか、母艦のFedoraが上がらなくなってしまった……どーしてまーこーも回り道だらけになるかなぁ……手元には「このPCでは起動しない」RHEL4のインストールディスクしかないぞ。レスキューモードが使えねぇじゃねぇじゃねぇじゃねぇかよ。個人的に焼いたKNOPPIXも職場に持っていっちまっているし……しかたない、CentOSの3でも落として、それをインストールしてみるか……小休止。

  で、CentOSの3を焼いた。面倒なのでFedoraをレスキューせず、そのままCentOSの3をインストールしてしまう。起動して、再びgrub-installしてWRAPを立ち上げる……

GRUB Loading stage2.......

  ……根本的にgrubについて勉強する必要がありそうだ。ちゅーか、このgrub-installスクリプトって、中でナニやってんだ!? 詳しく知らないのもシャクなのでソース持ってきてイチから勉強するか……

  ……うーむ、深いッ!! grubのソースを読んだら、まるで人間の赤ん坊が母親の胎内で数ヶ月で魚類から人間まで成長するかのような、そんな感覚を覚えたぞ。ブートプロセスの序盤は、PCが8bitの頃とあまり変わらないんだねぇ……以下、それも含め、判明したことをひたすら箇条書きにしてみよう。

・ハードディスクを最も低いレベルで読み書きする際は、CHSで場所を指定して512バイトずつ読み書きする
・CHSはシリンダ、ヘッド、セクタ(Cylinder/Head/Sector)のコトを意味している
・CHS指定だとハードディスクを「裏面の内側から5番目の……」みたいに物理指定するので無駄が多く、最大504Mしか扱えない
・504Mでは足りないので、ハードディスク側でウソのCHS指定を可能にすることにした(255Headとかを受け付け、HDD側で変換)
・そしたら7.9GBまで使えるようになったけど、これもすぐ足りなくなったので、LBAという指定方法が導入された
・LBA指定は単純に先頭からの絶対位置指定なので、CHS指定のように無駄なビットは発生しない
・LBAが28bitだと128GBまで扱える、最近はこれが48bitに拡張され、これはBigDrive対応と呼称されている
 
・CHSにしてもLBAにしても、ハードディスクでもフロッピーでも、イチバン先頭の512バイトは特別である
・イチバン先頭の512バイトにはブート情報などが書き込まれている、いわゆるMBRというヤツである
・だが、ハードディスクの場合、この512バイトの後半16x4+2バイトは、領域情報となっている
・領域情報とはいわゆるパーティションテーブルのコトで、16x4の4は基本領域の最大数を示している
・最後の2バイトは"0x55AA"という固定値が書き込まれている、これ以外が書いてあると領域情報は無効と判断される
 
・grubのステージ1は、基本的にこのMBRに書き込まれるべき512バイトのプログラムである
・しかし「dd if=/boot/grub/stage1 of=/dev/hda bs=512 count=1」とやってはダメである
・/boot/grub/stage1の後半16x4+2バイトにはフロッピー用のブートプログラムが入っているためだ
・上記のコマンドを実行すると、ハードディスクの領域情報が書きつぶされてしまう
・ほんじゃ「dd if=/boot/grub/stage1 of=/dev/hda bs=446 count=1」ならいいのか?
・実はstage1の一部には、次に読むべきセクタが「埋め込まれている」ので、そのままddしてもやっぱりダメ
 
・では、次に読むべきセクタ(一般にはイチバン先頭の512バイトの直後)には何が書いてあるべきなのか?
・これは、grubのステージ1.5もしくはステージ2が書いてあるべきである
・ステージ1.5とステージ2のどっちが書いてあるべきなのか?
・都合でステージ2をファイルシステム(FATとかext3)上に置く場合、ステージ1.5を利用すべきである
・細かい説明は省くが、一般にハードディスクの場合はステージ1.5を利用する
・そのために、ステージ1.5はステージ2が置いてあるファイルシステムの種類別に用意されている
・Linuxの場合、通常はext2ファイルシステムを使うので、e2fs_stage1_5を利用する
・ほんじゃ「dd if=/boot/grub/e2fs_stage1_5 of=/dev/hda bs=512 seek=1」していいのか?
・こいつも微妙に「情報が埋め込まれる」ようなので、そのままddしてもダメ
・よってステージ1、ステージ1.5のインストールには、grub-installを「必ず」利用する必要がある
 
・ステージ1.5はどうやってステージ2を探すのか?
・「strings /boot/grub/e2fs_stage1_5」するとわかる、中に直接「/boot/grub/stage2」と定義されている
・よってステージ1.5は、ちゃんとext2ファイルシステムを理解して、指定のパスからステージ2を読み込む
 
・ステージ2はどんな処理を担当しているのか?
・メニューを出して起動カーネルを選択させたり、カーネルを読んで制御を移すまでのすべてである
・ステージ2からは、ほとんどの制御を自分自身で行うので、イメージ付き起動メニューも出せる
・一方で、シリアルポート経由で起動メニューを利用する場合は……
 serial --unit=0 --speed=38400
 terminal serial
 ……みたいな記述を行ってそれを指定する必要がある
 
・……で、そこまでわかって、結局コンパクトフラッシュから起動できたの?

  ……できんッ!! 起動メニューすら出てこんッ!! もう寝るッ!!


2006-07-18(Tue) カーネル・ア・ガール

  のーしても、もーしても、grubが起動してくれないので、理由もなく母艦が悪いのだと決め付け、WRAPボードを職場に持っていってみた。昼休みに職場でテストベットとして活用している旧い赤いノートでのインストールを試してみようという魂胆である。確かアレにはRHEL4が入れてあったはず。こーゆー時、ガラが小さいと持ち運びがラクで便利だねぇ(WRAPは15cm四方で極めて軽い)。

  今まで数十回は繰り返した、以下のコマンドを実行してみる。

# grub-install --root-directory=/mnt /dev/sda

  ダメモトでWRAPを立ち上げる……

  画像の説明

  「!?」

  ……あれだけ立ち上がらなかったgrubが起動するじゃねぇか!! なんだコレは!? とりあえず、カーネルを入れていないので、ココから先へはいけない。じゃ、カーネルを入れてみよう。よく調べたら、RHEL3でも、オフィシャルのカーネルバイナリはi686以上しか提供されていないようだ。調べたところ、なぜかCentOS3にはi586バイナリが含まれていたので、それを/bootの下に置いて再度WRAPを立ち上げる……

  画像の説明

  「!!」

  ……上がるじゃん!! ただ、予測どおりというか、なんというか、この後は……

aio_setup: sizeof(struct page) = 52
Hugetlbfs mounted.
pc_keyb: controller jammed (0xFF).
pc_keyb: controller jammed (0xFF).
pc_keyb: controller jammed (0xFF).
<超大量略>
pc_keyb: controller jammed (0xFF).
pc_keyb: controller jammed (0xFF).
pc_keyb: controller jammed (0xFF).
pc_keyb: conide0 at 0x1f0-0x1f7,0x3f6 on irq 14
hda: attached ide-disk driver.
<略>
VFS: Mounted root (ext2 filesystem) readonly.
Freeing unused kernel memory: 152k freed
Warning: unable to open an initial console.
Kernel panic: No init found.  Try passing init= option to kernel.

  「キーボードコントローラがジャムっとる」というメッセージがウンザリするほど出て、最後にはinitがないと言ってカーネルパニック起こして停止した。しかし、これはWRAPのマニュアルにも注意書きがあった既知の事態。つまりは、完全なる正常動作の範囲であるッ!! よしゃーッ!!

  縁起物なので、CentOS3提供のカーネルを使うなら……と、CentOS3でgrub-installをやり直してみるコトにした。CentOS3をインストールしてgrub-install……

GRUB Loading stage2.......

  ……おぉいッ!! 原因はCentOS3のgrub-install、オマエなのかッ!? そりゃ、家でどれだけガンバっても不可能なはずだよ……なんかよくわからんが、CentOS3でダメってコトは、RHEL3でも、WBEL3でもダメなんだろうなぁ……なんつーバグだッ!! 大量の時間をムダにしてしまったぞ……まぁ、grubのブートプロセスほかについて超絶的なまでに詳しくなれたから、そりゃまったくのムダではないけどさぁ……。

  もう一度、RHEL4からgrub-installする……のはよいとして、当面の決断事項は「どのカーネルを利用するか」だ。CentOSオフィシャルのカーネルバイナリが使えれば、以後のアップデートが簡単だと思ったが、CentOS4ではi586バイナリが提供されていないし、結局はキーボードコントローラの問題があるので、どのみちカーネルにはパッチを当てて再コンパイルする必要があるんだよな……。

  ……と、なるとkernel.orgの最新オリジナルソースからコンパイルするか、CentOSのSRPMからコンパイルするか。先日もらったRHEL4のサブスクリプションを利用して、RHEL4の最新SRPMをベースに無理矢理586MMX版をコンパイルするか……うふふふふ。楽しそう!!


2006-07-22(Sat) 続・クルクルイッペイ

  さて、今日は放ってあった夜間撮影に関するプロジェクトを進捗したい。実は、前回のエントリを書いた直後、RedHatでもらったレポート用紙をグルグルと巻いて、以下のような「擬似電池」を製作したトコロで、プロジェクトが中断していたのであった。

  画像の説明

  コレは単純に「単三電池の幅」にA4のレポート用紙を縦に裂き、クルクルと巻いただけのものであるが、中心にちょっと太目の電線を通して、その先にネジをハンダ付けすれば、立派な「擬似電池」になるのである。その際、鍋ネジと皿ネジを利用すると。ちょうどプラス極とマイナス極っぽい形状になるし、我ながらとてもナイスなアイデアである。

  画像の説明

  やりたいコトは、コレを利用してコンセントからデジカメに3Vを供給するコト。オイラの愛用のデジカメは専用の角型リチウム充電池のほか、エマージェンシー用に単三電池が利用できるようになっているので、その特長を利用するのだ。ちなみに、デジカメの底には3.8Vの2W、専用充電池には3.7Vの1800mAhという記載がある。そうなると3Vよりちょっとくらい電圧が高めでも問題はなさそうである。

  しかし、手元には3.3VのACアダプタがない。あるのは、以前にプリンタ用に正負を逆転してしまっている危険な5VのACアダプタと……以前に別の用途で購入したUSBハブに付属していたコッチも5VのACアダプタ。こいつらから3Vを作り出すしかない。例のプリンタにはあの後サッパリ通電していないが、せっかく改造したACアダプタを壊してしまうのは気が引けるので、USBハブ用のACアダプタの方のジャックをφ2.1mmの標準ジャックに付け替えて利用することにする。

  画像の説明

  めんどーなので、ダイオードで降圧してやれ……と、ジャンク袋からゴツ目のダイオードを3本取り出した。0.6Vが3本で1.8V。5V-1.8Vで3.2Vという、見え透いた魂胆である。ちょっとテストしたら、電圧降下が低めだったので、ダイオードを4本に増やす。デジカメの3.8Vで2Wというのが最大消費とすると、最大電流は526mA……しかし、このゴツさならそれに見合う損失容量を持っているだろう。なお、ダイオード4本を空中配線する勇気はないので、前回モノの見事にコケた赤外線照明装置の基板を流用することにする。別に照明装置として併用するつもりはない。単にACアダプタのジャックが既に付いているから、というだけの理由である。

  擬似電池のお尻側をホットボンドで固めて、デジカメに入れる。いざ、電源オンッ!! ……あれ? 一瞬LEDが点灯したものの、そのまま沈黙……や、やばい……デジカメを壊したか!? こりゃ次期デジカメとしてGR-Degitalを買わなきゃならないか!? 微妙に喜びつつ、アワてて正規の充電池に入れ替えてデジカメの稼動を確認する……よかったぁ、壊れてない……ちぇ(?)。

  正しく電圧が供給されているか確認しようか。再度、擬似電池をデジカメにセットし、供給電源を確認する……こりゃ、アカンわ……2Vを切っとる……そっか、大電流が流れると、ダイオードの電圧降下は大きくなるんだな。こんなに不安定ではちょっと使えん。

  画像の説明

  どうしようか……と、部品箱をひっくり返したら、表面実装用の3.3Vの3端子レギュレータが出てきた。なんだ、コレを使えばいいんじゃんか……にしても、最近、手元の部品だけで大概の工作が賄えるようになってしまっているなぁ……そりゃ、秋葉に行く回数も減るワケだ……と、ブツブツとツブやいているうちにサクっと完成。実は、このレギュレータの定格電流は500mA。上限ギリギリだ。しかし、デジカメ側とて常に500mAオーバを要求しているワケでもないだろう。レギュレータの絶対最大定格は700mAだし。

  画像の説明 画像の説明

  再度、デジカメに擬似電池をセット。電源オンッ!! よっしゃッ!! 今度こそデジカメは正常に起動した。気になる3端子レギュレータの発熱は……ソコソコ熱くはなるモノの触れていられないほどというワケでもない。実際の撮影時はデジカメのディスプレイも消灯しておくつもりだし、なんとかイケるだろ。

  ……というトコロで、ちょーどよくウチのガキが眠くなってグズグズしてきたようだ。三脚にデジカメをセット、感度800、露出8秒、10分間隔のインターバル撮影モードにして……おやすみ、イッペイッ!!

本日のツッコミ(全6件) [ツッコミを入れる]

伍玖肆 [ダミー電池の製作方法は真似しようと考えてます(^_^;) しかし上手に紙を巻いてますねー 中々綺麗には巻けないもので..]

kosi [はじめまして、大阪のkosiと申します。 わたくしもデジカメ(リコー社)の連続測定をしようと思いまして、 ネットを徘..]

フルタニアン(管理者) [数回で電源が落ちてしまう、ですか。 読んでの通り、何をやるにもジタバタな私ですので、単に岡目八目な意見として受け取..]

kosi [こんにちわ。 わざわざありがとうございます。 ・数回に、規則性はございません。 ・電流が多く流れるときに電圧を測定..]

フルタニアン(管理者) [見ての通り、私は表面実装のレギュレータで済ませましたが、定格ギリギリなので、結構、熱くなってた気がします。 死ぬほど..]

kosi [こんにちは。 おっしゃるとおり、熱保護回路が働いていたようです。 大きなヒートシンクにアルミの蓋を連結してやるとうま..]


2006-07-23(Sun) クルクルイッペイ・完結編

  昨晩、夜通し撮影したイッペイの寝相だが、朝方、デジカメで画像を確認して吹き出してしまった。こりゃ、面白いわ……というわけで、早速、Animation-GIFにオーサリングしてみることにする。

  わしゃ骨の髄からの「Linux野郎」かつ「CUI至上主義者」なのでオーサリングもGUI環境では行わない。ImageMagickのconvertコマンドで極めてロジカルに一発処理するのである。

  まずは、作業ディレクトリに、すべてのファイルを放り込んで、トリミング&縮小。

wbel3-co:/home/mitsu/gif_anime/master $ for i in RIMG*.JPG; do echo $i; convert -crop 600x900+397+23 -geometry 200x300 $i ../shrink/$i; done

  でもって、チョコチョコとPhotoshopで落書きして、以下のコマンドでAnimation-GIFに変換!!

wbel3-co:/home/mitsu/gif_anime/shrink $ convert -delay 100 -loop 0 -adjoin RIMG1234.JPG RIMG1235.JPG .... RIMG2467.JPG RIMG2468.JPG Anime.gif

  完成したのが以下のAnimation-GIFである。予想以上に一晩中ゴロゴロと転がり回っていることが判明した。以上。

  画像の説明


2006-07-28(Fri) チープなDTMアプリ公開

  今日は、ココんトコ、ずーっと作り込んでいた、オレ様用特殊仕様のデスクトップミュージックスイートを公開することにする。その名も「CUIck DTM suite」である。GUIでなく、オレ様好みのCUI(Command User Interface)でサクサク(Quick)とミュージックコンポーズするためのプログラム群(suite)だ。以下、超適当であるがマニュアルである。

  必要環境

Windows + Cygwin(Ruby)

  各ファイル説明

melodOSS(Open Sound System)デバイスである/dev/dspにsin波を書き込み、チープながら、リアルタイムに音階を出力する、メロディデーモン
konkPCのキーボードを、ピアノのキーボード化するプロセス。melodに対してUDP経由でコマンドを送信し、音階を出力させると同時に、画面に独自形式のMML(Music Macro Language)形式文字列を出力する
plexor標準入力から独自形式のMMLを受け取り、melodに対してUDP経由でコマンドを送信、再生させるほか、指定のコード&リズム付きのMIDI形式ファイルを生成し、playmidi.exeで演奏させる
midi.rbMIDI形式ファイルを扱うクラス、plexorの実行に必要
chord.rbギターコードを扱うクラス、plexorの実行に必要
playmidi.cMIDI形式ファイルを演奏するplaymidi.exeのソースファイル
Makefileplaymidi.exeの作成、パッケージ作成を行うMakefile
tulip.mml「咲いた、咲いた、チューリップの……」を演奏するMMLのサンプル
license.txtGNUのお約束

  基本的にCygwin上で動かすことを想定しているが、playmidi.exe以外はRubyスクリプトなのでunix系OSならほとんど手を加えることなく動くと思われる。

  まずは再生方法から。端末を2枚開いて、片方でmelodを起動、他方で「cat tulip.mml | ./plexor」を実行する。マコトにチープな音質ながら「チューリップの歌」が4小節再生される。<wavを再生する>

  「チューリップの歌」のMMLファイルの内容は以下のとおり。

  1: #<DSP OFF>                                                      # /dev/dsp による演奏を無効
  2: #<MIDI tulip>                                                   # tulip.mid ファイルを生成し演奏
  3:
  4: #! clear
  5: #! t140
  6:
  7: #@ (arpeggio-4)4 <pops-1>4
  8:
  9: #<STOP>                                                         # <CONT> までの記述を無視
 10:
 11: #@ C Am
 12: # y        u        i                 y        u        i
 13: ! 3C   4   3D   4   3E       2        3C   4   3D   4   3E   2
 14:
 15: #<CONT>                                                         # <STOP> の効果を解除
 16:
 17: #<END>                                                          # 以降の記述を無条件に無視
 18:
 19: #@ C Am
 20: # p        i        u        y        u        i        u
 21: ! 3G   4   3E   4   3D   4   3C   4   3D   4   3E   4   3D   2

  行頭が「!」で始まる行が、演奏データだ。「C」が「ド」で、Cの前の数字はオクターブを表している。音階の指定の間の数字が音長だ。4で4分音符、2で2分音符、付点付き4分音符にしたい時は、4の後ろに8を並べる。

  4, 5行目の行頭の「#」を削除して、再び「cat tulip.mml | ./plexor」を実行するとテンポが変わる。「t140」という記述がテンポ指定だ。概ね想像が付いていると思うが「#」はコメント行を表している。<wavを再生する>

  今度は1, 2行目の行頭の「#」を削除する。チープな音の代わりに、midiから音が出るはず。オマケに再生後には、カレントディレクトリに「tulip.mid」が生成されている。コイツはフツーにMediaPlayerで再生可能な形式である。<midiを再生する>

  更に11, 19行目の行頭の「#」を削除する。適当だが伴奏が付いたはずだ。行頭が「@」で始まる行には、ギターのコードを指定できる。これまた適当なパーカッションによるリズムパートも勝手に付く。<midiを再生する>

  最後に7行目の行頭の「#」を削除する。伴奏がおとなしいものに変わったはず。アルペジオによるコード演奏と、ポップス系のリズムパートを指定した結果である。各種パターンはmidi.rbに定義されている。<midiを再生する>

  順序が逆になったが、作曲するには「melod」を起動中に「konk」を立ち上げる。konkを実行すると、PCのキーボードがそのままピアノのキーボードになるので、そのままキーを叩いてメロディを奏でればいい。こーゆー状態になってないとキーボードとしては使いにくいが、それはともかくとして、どこかで聴いた曲を奏でてもいいし、鼻歌をそのまま奏でてもいい。結果は画面にMMLの形式で出力されるので、そいつをマウスでドラッグして、エディタに貼り付ける。

  画像の説明

  なお、画面に表示されるMMLには音階情報しかないので、そのままMMLファイルとして保存してplexorに与えると、全部の音が同時に鳴ってしまう。音長の入力は手動なので、エディタ上で追加のこと。ちなみに、konkが出力するMMLの音階同士の間隔は時間間隔に比例しているし、melodおよびplexorによる演奏時に出力される情報は、行単位で時間を積算したものとなっている。コトバで説明するのは難しいが、なにしろ音長の入力を補助するようにできている。後にコードをつける時のためにも、この機能を活用し、行の区切りを小節の区切りに合わせて入力しておくとよいだろう。

  コードをくっつけると俄然として曲が締まってくるが、コードをくっつけるための補助機能は特段用意していない。オイラがコードをくっつける時は、ギター片手に鼻歌交じりで紙に書き留めるからである……なんつったって、最高に楽しいのはこの作業なのだッ!! midiクラスとchordクラスを活用すれば、コードを奏でるバージョンのkonkはすぐ作れると思うので、欲しい人は自分で作るべし。

  で、このツールを使ってサクサクと、ウチのガキにテーマソングを作曲してみた。題して「イッペイのテーマ」。こんな感じだ。<midiを再生する>

  最後に、最近の携帯電話はmidiファイルをそのまま演奏できたりするらしい。つまり、この「CUIck DTM suite」は、着メロ生成ツールとして活用することもできるワケだ。で、試しに昨日iTMSで購入した、浜崎あゆみのDepend on youのサビを入力してみた。コードはJ-Total Musicから持ってくる……で、30分もあれば、ホレこのとおり。現状、コードパターンもリズムパターンも、曲とさっぱりマッチしてないが……気に入らんヤツは好きにイジれ。<midiを再生する>

  イニシエの8bitマシンに載っていたPSG(Programmable Sound Generator)をBASICから駆使して喜んでいた世代の諸兄は、このDTMスイートの設計思想にシンクロしてくれるのではないかと思っている。ほんじゃまた。

本日のツッコミ(全1件) [ツッコミを入れる]

キムダイチ [はじめまして。 私はTBSラジオで深夜0時から放送している「バツラジ」 という番組のキムと申します。 当..]