« 2006年6月8日 | 2006年6月10日の投稿 |
2006年6月11日 » |
ディスクを整理していたら、11年前に書いた awk スクリプトが出てきた。ギターのコード名を入力すると、そのコードフォームや構成音が表示される。コードブック代わりに使おうと思っていた。
当時、フォークギターからジャズギターへ転向しようと考えており、ローコードだけでなくハイポジションでの、6,5,4弦にルート音を持つ各ギターコードと、テンションの位置を勉強していた。
Jazzでは、例えば、メジャーコードは、1,3,5 度の音だけでなくM7と6と9、ドミナントコードは、1,3,5,b7 に加えて b9, 9, #9, #11, b13, 13 もテンションとして許される。それらを、キャラクタベースのCUIで表示するプログラムだ。通常のロックやフォークのコードではなく、自分のアドリブのインサイド音やテンション感を養成するために作った。例えば、Cの4弦ルートだと、こんなキャラクタを吐く。
D 型フォーム4弦ベース
度数 フォーム 音名
10f 10f 10f
--9+---+--3+---+---+ --9+---+--*+---+---+ --D+---+--E+---+---+
--6+---+-M7+--R+---+ --6+---+-M7+--*+---+ --A+---+--B+--C+---+
---+---+--5+---+---+ ---+---+--*+---+---+ ---+---+--G+---+---+
--R+---+---+---+---+ --*+---+---+---+---+ --C+---+---+---+---+
(5)+---+---+---+---+ (5)+---+---+---+---+ --G+---+---+---+---+
---+---+---+---+---+ ---+---+---+---+---+ ---+---+---+---+---+
プログラムとして今見ると(末尾添付)、split を使った見やすい初期設定、データ設定関数、仮引数を使ったローカル変数、などいくつか工夫されているなー、と思い出す。awk には関数ローカル変数がないが、仮引数はローカルである。そこで、ローカル名前空間を実現するために仮引数をローカル変数として使う。そして、本当の仮引数とローカル変数はタブで区切る、というコンベンションだ。そして、当時としては、関数名は「かなり長い」部類に入ると思う。ぼくは UNIX が好きな割には、長い名前を付ける方が好きだった。
awk スクリプトとしては、ぼくが書いた一番長いものかもしれない。現在はLL流行であり、Ruby, Perl, Python などがよく使われているけど、ぼくのホームスクリプト言語は、awk/sed/bsh だ。当時、~/bin の下に毎日1つずつ、"Myコマンド"をためて行ったように思う。
ちなみに、JUDE の開発でぼくがコードを書いたときは、ユニットテストを Python (正確には、JPython、今の Jython) で書いた。そのころは、JUnitは存在せず、テストはスクリプトで書くのが「正しい」ことのように思えたから。製品コードは固く、テストコードは軽く、柔らかく、が生産性が高いように思えた。ぼくが最初に書いた雑誌記事は、「Java オブジェクトを操作するスクリプト言語」というDDJJ(DDJの日本語版-翔泳社が出していた)の記事。そこでも、Python, Pnuts(戸松さん作), Tcl/Tk などで Java のオブジェクトを操作する方法を書いている。Ruby では、そのころ前田修吾さんの、Demi があった。今でも、ここに記事がある。
「Java オブジェクトを操作するスクリプト言語」http://www.objectclub.jp/technicaldoc/java/scripting-java
このプログラムは、名前が泣かせる。コードビュー(chordview)。当時、無くなりかけていた codeview というデバッガへのオマージュ。
史料保存の意味で、以下に全コードをペーストしておこう。540行だ。このコードは、古い awk では動かない。nawk と gawk で動作を確認してる。chmod +x してそのまま実行(#! /bin/gawk -f が使える場合)、もしくは、
> gawk -f chordview
である。以下にコード。
» 続きを読む
« 2006年6月8日 | 2006年6月10日の投稿 |
2006年6月11日 » |