おはよう。 時刻は午前三時をまわったところです。(日本中央標準時)

ruby

ruby

Ruby は まつもとゆきひろ氏が書かれた、 とてもつかいやすいオブジェクト指向スクリプト言語です。 ここでは僕が気まぐれに書いたコードを紹介します。

ライブラリ

calendar

これは様々な暦についての計算をあつかうモジュールです。 くわしくは暦のページをご覧ください。

こよみ変換ページは、 このパッケージをつかった応用プログラムのひとつです。

calendar-1.11.3r.tar.gz [ 132k]

date2

これは、ruby に標準添付されてるものと同じです。 でも、ここにあるのが最新である可能性があります。 また、このパッケージには、祝祭日についてのコードや ドキュメントも含まれています。

万暦鏡ページは、 このパッケージをつかった応用プログラムのひとつです。

date2-4.0.16.tar.gz [ 47k]

マニュアル date2 3.x での変更点の詳細 date2 3.x の紹介 parsedate の日付解析の手法

date
date クラスの聖地、伊達駅

date4

date4 は、実験のための date2 からの派生物です。

注意: このライブラリは、核となる部分は、ruby の標準環境だけで動きますが、 若干のコードが、 tzinfo に 依存しています。 よりよい性能のため rational の インストールを推奨します。

date4-0.1.27.tar.gz [ 66k]

nutime

NuTime は、もうひとつの時刻ライブラリです。

注意: このライブラリは、核となる部分は、ruby の標準環境だけで動きますが、 若干のコードが、 tzinfo に 依存しています。

nutime-0.0.3.tar.gz [ 23k]

once

これは「高々一度だけ評価されるメソッド」の定義方法を提供します。 ruby-list での前田氏のコードやまつもと氏のヒントをもとに作成しました。

once-2.3.tar.gz [ 10k]

osc

「オープンサウンド・コントロール」モジュールです。 楽器や音響機器のためのアプリケーションレベルのプロトコル オープンサウンド・コントロールの実装です。

おまけは、ジョイスティックによる、 NI Reaktor や PD の コントロールなど (ウインドウズでしか動きませんが)。

OS X 利用者への注意: "pack and unpack broken on Tiger's Ruby" を御覧ください。 そして、これを試してください。

osc-0.1.3.tar.gz [ 27k]

r2m

smf

「スタンダード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]

マニュアル

r2l

nurat

NuRat は、もうひとつの分数クラスです。

C で書かれているので、ちょっとばかり速いかもしれません。 このクラスは、ruby で書かれた石塚さんの実装に基づいています。

nurat-0.1.4.tar.gz [ 17k]

nucomp

NuComp は、もうひとつの複素数クラスです。

C で書かれているので、ちょっとばかり速いかもしれません。 このクラスは、ruby で書かれた石塚さんの実装に基づいています。

nucomp-0.1.4.tar.gz [ 18k]

nuby

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 は 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

cal.rb [ 4k] ncal.rb [ 4k]

dvipc

dvipc は DVI ファイルのペイジ数を報告します。 とくに Ruby で書いたということではありませんが、Ruby でも書いてあります。 かなり前に書いたものですし、あまり Ruby らしさがないのですが、 他の言語で書いたものと比較してみるのもいいかもしれません。 くわしくは 小さなプログラムのページの dvipcをご覧ください。

dvipc-1.1.1.tar.gz [ 48k]

gtkcal

gtkcal は Ruby/Gtk で書いた簡単なスケジュール帳です。 gtkcal をつかうには date2 が必要です。

gtkcal のスクリーンショット

gtkcal.rb [ 10k]

luna

これは佐々木太良氏の luna 1.9 の ニセモノです。 月齢を印字する機能しかありません (あまり正確でない――理由は、エパクトをつかっているからです)。

$ luna
Sat May 23 03:55:34 1998
      *
   **
 **
***
***
 **
   **
      *         27.

luna.rb [ 4k]

nqt

nqt は日本語で時刻を告げます。 Mike F. Cowlishaw の The REXX Language にある QT のマネです (QT については、 プログラミングと暦のページの QTを御覧ください)。 日本語での表現が妥当なのかどうかわかりません (いささかムリがあるようです)。 あと、もうちょっと砕けた表現にしたいような気持もあります。 なお、24時間表現での12時は、 法的には午前12時というのが正しいのですが (太政官逹第337号による)、 なんとなくイヤなんで午後零時ということにしてます。

nqt.rb [ 1k]

rar

これは shar の Ruby 版です。 つかいかたは簡単。たとえば、rar の ソースをメイルで送りたいなら、つぎのようにします。

rar README rar.rb | mail -s 'rar source' tadf

rar を得るために、"ruby -x rar.rar" とタイプしてください。 何故かというと、rar.rar は rarrar したものだから。

ちなみに、RAR という名前のアーカイバが Windows などであるらしいですが、 そちらとはなんの関係もありません。

rar.rar [ 4k]

wc

これは wc(1) のそっくりさんです。 ちょっぴり遅いです。

wc.rb [ 1k]

"Just another Ruby hacker,"

'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}

目次 |rss

ふなばただよし 1998-2008
更新日時: 2008-06-15T21:13:42+09:00