おはよう。 時刻は午前三時をまわったところです。(日本中央標準時)
Ruby は まつもとゆきひろ氏が書かれた、 とてもつかいやすいオブジェクト指向スクリプト言語です。 ここでは僕が気まぐれに書いたコードを紹介します。
これは様々な暦についての計算をあつかうモジュールです。 くわしくは暦のページをご覧ください。
こよみ変換ページは、 このパッケージをつかった応用プログラムのひとつです。
calendar-1.11.3r.tar.gz [ 132k]
これは、ruby に標準添付されてるものと同じです。 でも、ここにあるのが最新である可能性があります。 また、このパッケージには、祝祭日についてのコードや ドキュメントも含まれています。
万暦鏡ページは、 このパッケージをつかった応用プログラムのひとつです。
date2-4.0.16.tar.gz [ 47k]
マニュアル date2 3.x での変更点の詳細 date2 3.x の紹介 parsedate の日付解析の手法
date クラスの聖地、伊達駅
date4 は、実験のための date2 からの派生物です。
注意: このライブラリは、核となる部分は、ruby の標準環境だけで動きますが、 若干のコードが、 tzinfo に 依存しています。 よりよい性能のため rational の インストールを推奨します。
date4-0.1.27.tar.gz [ 66k]
NuTime は、もうひとつの時刻ライブラリです。
注意: このライブラリは、核となる部分は、ruby の標準環境だけで動きますが、 若干のコードが、 tzinfo に 依存しています。
nutime-0.0.3.tar.gz [ 23k]
これは「高々一度だけ評価されるメソッド」の定義方法を提供します。 ruby-list での前田氏のコードやまつもと氏のヒントをもとに作成しました。
once-2.3.tar.gz [ 10k]
「オープンサウンド・コントロール」モジュールです。 楽器や音響機器のためのアプリケーションレベルのプロトコル オープンサウンド・コントロールの実装です。
おまけは、ジョイスティックによる、 NI Reaktor や PD の コントロールなど (ウインドウズでしか動きませんが)。
OS X 利用者への注意: "pack and unpack broken on Tiger's Ruby" を御覧ください。 そして、これを試してください。
osc-0.1.3.tar.gz [ 27k]
「スタンダードMIDIファイル」モジュールです。 SMF の 読み書きなどをおこないます。 パッケージには、使用例として、MML (簡単な記述言語) も含まれます。
ほかに、STT (増井氏のオノマトペ的記法ストトンの方言 ――ユニマガ 1999-04 を参照)、 ストリーム編集 (クォンタイズ、シャッフル、グルーヴ、 ヴェロシティコンプレッサ、など)、 モールス符号化、プレーンテキストや XML としてのよみかき、 OSS ドライバでの演奏、 spkr(4) での演奏 (モノフォニック、しかも環境依存)、 ウィンドウズでの演奏、 .wav のかきだし (死ぬほど遅い、そして惚れるくらい音が悪い) など、 いろいろおまけもあります。
注意: 0.15 になって、少し仕様が変りました。マニュアルを確認してください。 このモジュールは、核となる部分は、ruby の標準環境だけで動きますが、 若干のコードが、 rb-gsl (1.8.0 以降) に 依存しています。 これがあれば、もっと楽めます。
rb-808 ページは、 このパッケージをつかった応用プログラムのひとつです。
以下の演奏の製作には、このモジュールがつかわれています。
inventio 1 c-dur bwv 772a (beta)|
organ (beta)
ich ref zu dir, herr jesu christ bwv 639 (alpha)
fuga (2. ricercata) (alpha)
smf-0.15.10.tar.gz [ 53k]
NuRat は、もうひとつの分数クラスです。
C で書かれているので、ちょっとばかり速いかもしれません。 このクラスは、ruby で書かれた石塚さんの実装に基づいています。
nurat-0.1.4.tar.gz [ 17k]
NuComp は、もうひとつの複素数クラスです。
C で書かれているので、ちょっとばかり速いかもしれません。 このクラスは、ruby で書かれた石塚さんの実装に基づいています。
nucomp-0.1.4.tar.gz [ 18k]
Nuby は、Ruby (MRI) の派生版です。
分数クラス、複素数クラスを C で書き直し、組みこんであります。 mathn が基本になっており、演算子 / は、分数を返すかもしれません。 便利のためあたらしい演算子 // (div) を導入しています。 また、分数、複素数のためのリテラルを備えています。 これは個人的で実験的なものなので、うまく動かないところがあるかもしれません。
2 / 3 #=> (2/3) 2 // 3 #=> 0 10r3 #=> (10/3) 10.5c3 #=> (10+3i) 3i #=> (3i)
実行時、高々一回しか評価されない、"once" 表現があります。
def foo(x) (# 3 * x) end foo(3) #=> 9 foo(30) #=> 9 class Integer; def days() self * (#24 * 60 * 60) end; end 3.days #=> 259200
その他、様々なメソッドを追加しています。
$ inuby -m
inuby@main> 0.3.numerator / 0.3.denominator + 3i
#=>
5404319552844595
-----------------+3i
18014398509481984
nuby-1.86.004.tar.gz [ 4.4M]
cal は cal(1) のそっくりさんです。 英国以外での改暦にも対応しています。 デフォルトでは英国のカレンダーになりますが、 国コードの指定で切り換えることができます。 国コードでの指定というのはいささか無理があるような気もしますが (歴史的な ことですから)、あまり細いことをいっていてもしょうがないのでいいでしょう。 改暦の日付のようなものはなかなか資料がなくて難しいのですが、 僕が勝手に信用できそうだと思ったものを載せました。
日本の休日をあつかえる ncal もあります。
(cal -c it 10 1582) (cal -c gb 9 1752) (cal -mt 4 2000)
October 1582 September 1752 April 2000
S M Tu W Th F S S M Tu W Th F S M 3 10 17 24
1 2 3 4 15 16 1 2 14 15 16 Tu 4 11 18 25
17 18 19 20 21 22 23 17 18 19 20 21 22 23 W 5 12 19 26
24 25 26 27 28 29 30 24 25 26 27 28 29 30 Th 6 13 20 27
31 F 7 14 21 28
S 1 8 15 22 29
S 2 9 16 23 30
dvipc は DVI ファイルのペイジ数を報告します。 とくに Ruby で書いたということではありませんが、Ruby でも書いてあります。 かなり前に書いたものですし、あまり Ruby らしさがないのですが、 他の言語で書いたものと比較してみるのもいいかもしれません。 くわしくは 小さなプログラムのページの dvipcをご覧ください。
dvipc-1.1.1.tar.gz [ 48k]
gtkcal は Ruby/Gtk で書いた簡単なスケジュール帳です。 gtkcal をつかうには date2 が必要です。
gtkcal.rb [ 10k]
これは佐々木太良氏の luna 1.9 の ニセモノです。 月齢を印字する機能しかありません (あまり正確でない――理由は、エパクトをつかっているからです)。
$ luna
Sat May 23 03:55:34 1998
*
**
**
***
***
**
**
* 27.
luna.rb [ 4k]
nqt は日本語で時刻を告げます。 Mike F. Cowlishaw の The REXX Language にある QT のマネです (QT については、 プログラミングと暦のページの QTを御覧ください)。 日本語での表現が妥当なのかどうかわかりません (いささかムリがあるようです)。 あと、もうちょっと砕けた表現にしたいような気持もあります。 なお、24時間表現での12時は、 法的には午前12時というのが正しいのですが (太政官逹第337号による)、 なんとなくイヤなんで午後零時ということにしてます。
nqt.rb [ 1k]
これは shar の Ruby 版です。 つかいかたは簡単。たとえば、rar の ソースをメイルで送りたいなら、つぎのようにします。
rar README rar.rb | mail -s 'rar source' tadf
rar を得るために、"ruby -x rar.rar" とタイプしてください。 何故かというと、rar.rar は rar を rar したものだから。
ちなみに、RAR という名前のアーカイバが Windows などであるらしいですが、 そちらとはなんの関係もありません。
rar.rar [ 4k]
これは wc(1) のそっくりさんです。 ちょっぴり遅いです。
wc.rb [ 1k]
'abcdefghijklmnopqrstuvwxyz'.
tr('gqtkmevuxndyfohljsrwzciabp',
'nyae kcrRt,auorhh e stJub').
display
(0..24).each{|i|$><<((278997462280352656884859620342234553147534102625031355069770>>i*8)%256).chr}
0.step(72,3){|i|$><<'J huhesartc kRaeunrbo,yt'[i%25..i%25]}
[8,16,20,29,78,65,2,14,26,12,12,28,71,114,12,13,12,82,72,21,17,4,10,2,95].
each_with_index{|x,i| $><<(x^'Begin landing your troops'[i]).chr}
$><<[[[['J'],[[[['u']]],[['s']]]]],[['t',[[[[' ']],'a']]]],['n'],[[['o']],[
[['t']],'h']],[[['e'],['r']]],[[[[' ']],['R']]],[[[['u']]],['b']],[[[['y'],
[' ']]]],[[['h',[[[[['a']]]],[['c']]],'k']]],[[['e']]],[[[['r']]],[[',']]]]
'Jluisptf lainpoftlhieprf lRiupbfyl ihpafclkiepr,'.gsub(/[flip]/,'flap'*0).display
('b'*0+'J'+'u'+'y'*0+'s'+'t'+' '+'v'*0+
'a'+'n'+'o'+'p'*0+'t'+'h'+'e'+'r'+' '+
'c'*0+'R'+'i'*0+'u'+'j'*0+'b'+'y'+' '+
'h'+'a'*1+'c'+'k'+'e'+'r'+',').display
25.times{|i|$><<('BqSt ajmthe2 BubY HA#iep('[i]|'Heq4 `.OthER Rq`9 hackEr,'[i]).chr}
ふなばただよし 1998-2008
更新日時: 2008-06-15T21:13:42+09:00