Perlでバーコード・QRコード画像を生成する

Perl でバーコードやQRコードの画像を出力したい場合、GDモジュールのサブセットにそれらの画像を生成するモジュールが提供されています。

インストール

sudo aptitude install libgd-barcode-perl

使用方法

バーコード

#!/usr/bin/env perl
use GD::Barcode::UPCE;
binmode(STDOUT);
print "Content-Type: image/png\n\n";
# バーコードを表示
print GD::Barcode->new('EAN13', '123456789012')->plot->png;

QRコード

#!/usr/bin/env perl
use GD::Barcode::QRcode;
binmode(STDOUT);
print "Content-Type: image/png\n\n";
# QR コードを表示
print GD::Barcode::QRcode->new('This is test',
{ Ecc=>'M', Version=>3, ModuleSize=>2 })->plot->png;

参照

GD::Barcode – GDでバーコード・イメージを作成します 【perldoc.jp】

正規表現を使ったファイル名一括変換 rename コマンド

ファイルリネーマを書いた。引数に置換パターン、置換後文字列、ファイル名を渡すと、ファイル名を置換してくれる。正規表現は、インストールしている sed がサポートするものとなる。

#!/bin/sh
if [ $# -gt 1 ]; then
  Pattern=$1
  shift;
  for file in "$@"
  do
    if [ -f "$file" ]; then
      orgname=$( basename "$file" );
      dir=$( dirname "$file" );
      newname=$( echo -n "$orgname" | sed -e "$Pattern" );
      if [ "$dir/$orgname" != "$dir/$newname" ]; then
        echo "$dir/$orgname -> $dir/$newname"
        mv "$dir/$orgname" "$dir/$newname"
      fi
    fi
  done
else
  cat <<EOF
Usage:
  $0 Pattern File [ Files ... ]
EOF
fi

以下のように実行する。

# music ディレクトリ配下にあるファイル名を一括変換
$ ./rern 's/^(dummy) *//g' ./music/*
./(dummy) test.mp3 -> ./test.mp3

sed で新しいファイル名を生成し、オリジナルと比べてみてから mv しているが、ディレクトリ指定などの機能(つまり、スクリプト内でファイル名リストを生成して、それを使う)を追加するとすれば、find か何かで正規表現検索をかけ、マッチしたものだけをリネームしてやる方が効率的だと思う。

と、ここまで書いて、車輪の再発明臭がぷんぷんしていたので、恐る恐るぐぐったら、やっぱりあった。

ファイル名を一括変更するには(renameコマンド) – Ubuntu Japanese Wiki

というか、rename コマンドで正規表現使えた。man ページを見てみても以下のような記述しかなかった(sed ライクな置換方法には触れていない)ので、すっかり騙された。

書式
rename from to file…
説明
rename は、指定したファイル名において from に最初にマッチする部分を to で置き換える。
例えば、ファイル foo1, …, foo9, foo10, …, foo278 を与えると、
rename foo foo0 foo?
rename foo foo0 foo??
というコマンドは、ファイル名を foo001, …, foo009, foo010, …, foo278 に変換する。
そして、
rename .htm .html *.htm
というコマンドは、html ファイルの拡張子を修正する。

ページにも記載があるとおり、全ての UNIX 系 OS で使えるワケではなく、一般的な Linux ディストリのみにあるコマンドらしい。

フリーソフトウェア財団からの手紙

今年 6 月に Free Software Foundation (フリーソフトウェア財団) の幇助会員になってみた。

それから半年、郵便ポストを確認すると、ボストンの本部から一通の封書が届いていた。雪の降るクリスマスの朝に届くなんて憎らしい。さっそく中を確認すると、以下のものが入っていた。

  • USB 型メンバーズカード
  • FSF と GNU のステッカー
  • 会報
  • 募金用のカードと返信用封筒
  • 会員になった事へのお礼の手紙
  • 同梱品の解説の紙×2
f:id:dyama:20110105005803j:image
いろいろ入ってた。

内容物は、こちらこちらのページを見て知っていたが、メンバーズカードに自分の ID とナンバーの刻印がなかったり、解説の紙が何故か 2 枚も入っていたり、と仕事が雑になっている気がしてちょっとがっかり(´・ω・`)

USB 型メンバーズカードは、Linux のブータブルメディアとなっており、このカードには Trisquel GNU/Linux 4.0 が入っていた。日本ではまだあまり馴染みのないディストリのようだが、スペインで開発されている Ubuntu ベースの 100% フリーソフトウェアで固められたディストリのようだ。次世代 Debian といったら聞こえがいいが、Ubuntu から権利関係の難しいパッケージを抜いただけのような気もする。

メンバーズカードの Trisquel は、FSF 版としてカスタマイズされており、ところどころに FSF のロゴがある。USB を差して起動すると、GRUB 画面で使用言語( 日本語もある ) を選択し起動。

ブータブル CD とは違い、いわゆる「コンピュータに変更を加えないで使用する」では、前回終了時の変更状態がそのまま USB メモリ内に保持され、次回以降の起動でも引き続き使用する事ができる。USB の中を見てみると、ディスクイメージファイルを rw でループバックマウントしている。

時間が出来たらもうちょっと遊んでみよう。

うちのは大丈夫だった。MZK-MF150

先月、パソコン工房で投げ売りされていたプラネックスの MZK-MF150 を自宅と実家用に 2 個、購入した。

買ったのは黒い方。

ネットブック、スマートフォン、PSP、仕事用のラップトップワークステーション … と、最近の持ち物は、どれも無線 LAN クライアントが載っているのに、先月まで使う理由がなかった。

街に出れば至るところにアクセスポイントがあるような都会には住んでいないし、東京出張時に空港やホテルで出来たらいいなぁ、程度の感覚だったが、MZK-MF150 が 2500 円という安さだったので、思わず購入してしまった。

一度購入してしまえば、ガリガリ使ってしまう。使えば使う程、便利だーと思った。

自宅では、自室にネットワーク環境が集中しているので、茶の間や台所ではインターネットをする事が出来なかったが、MZK-MF150 を設置してからは、快適な WiFi 生活が送れている。小さいくせに、これは楽しい。

自室のファイルサーバで export している外付け HDD を無線 LAN 経由で、茶の間のネットブックから nfsmount。動画も難なく再生する事が出来る。特に広いワケでもない木造一戸建ての薄い壁が幸いして、秒間転送速度が 1 M バイトを越す事もある。水槽に囲まれた環境で、仕事をするにもぴったりだった。

また、アクセスポイント機能の他に、コンバートモードとして動作させれば、有線イーサネットボードしか載っていないデスクトップマシンも、気軽に無線ネットワークに接続出来る。 Linux 用公式ドライバが無いに等しい USB タイプの無線 LAN クライアントと比べても、なかなか有り難い機能だと思った。

設定を変更しようとオンラインマニュアルを読んでいると、自分の設定画面と書いてある事が違う事に気付いた。ファームウェアを公式からダウンロードし、アップデートしてみる。ふと、「あれ、こいつ Linux が載ってるんじゃね」と思ったら、そのとおりだった。

MZK-MF150 を解析している方のシリアル通信のログを見る限り、MIPS 320MHz で RAM が 16 MB、いくつもの NIC を積んだカーネル 2.6 の Linux みたいだ。電子工作出来る方には、本当憧れるなあ。

この価格で、設定画面を Web UI ではなく、シリアル通信でもなく、TCP/IP 経由の telnet や ssh にしてくれれば、一部の客層大喜びの事請け合いだと思う。

また、例のリコール問題のページで、シリアルナンバーを確認すると、交換対象となる /01[A-Z]{2}[0-9]{5}AR/ に思いっきりマッチしてたので、手続きを行なったが、プラネックスの中の人から「ご連絡頂きましたシリアルナンバーより、交換の必要が無い、対策品であることを確認いたしました。」というメールが届いた。

リコールが出ていたのは、今年の 4 月。購入したのは 10 月で、これを知ってのこの安さだったのかと思ったが、違ったみたい。実家に設置しておいた方は大丈夫かなあ。

OpenCASCADE 6.4.0 を Microsoft Visual Studio 2008 (vc9) 32bit 環境でビルドする

OpenCASCADE の最新版 6.4.0 からは、それまでの 6.3.* が VisualStudio 2003 ベースで開発されていたのに対し、 2005 ベースで開発されている。

公式マニュアルによると 6.4.0 がサポートしている VisualStudio のバージョンは、2003 がそのラインナップから外れ、2005(vc8)、2008(vc9)、2010(vc10) のみとなった。

ビルドに必要な環境変数を設定し、ホストにインストールされている VisualStudio のバージョンを識別後、実行してくれる BAT ファイルも付属しているのだが、不具合の為、上手く動作してくれない*1

そこで、簡単なスクリプトファイルを記述し、OpenCASCADE と付属のサンプルをビルド、実行するところまでをまとめてみた。

本記事では、日本語版の VisualStudio 2008 32bit環境をベースに書いているが、2008 と、開発ベースとなった 2005 以外のバージョン (執筆時点では、2010 のみ) でビルドする際には、読み替えて実行すれば上手く行くかもしれない。

また、Microsoft の嫌がらせとしか思えないような VisualStudio のバージョン名と Visual C++ のバージョンは、混同しがちなので、以降の記事は後者だけを用いる事にする。

Visual Sutido の名前Visual C++ バージョン名
Microsoft Visual Studio .NET (いわゆる 2002)vc7
Microsoft Visual Studio .NET 2003vc7.1 または vc71
Microsoft Visual Studio 2005vc8
Microsoft Visual Studio 2008vc9
Microsoft Visual Studio 2010vc10

OpenCASCADE 6.4.0 のセットアップ

6.4.0 のセットアップファイルには、以下のものがある。

ベース

OpenCASCADE640_win32.exeOpenCASCADE 本体
OpenCASCADE640_doc.exeOpenCASCADE ドキュメント

サードパーティ ライブラリ ( 32bit/vc9 でビルド済み )

freetype-2.3.7-vc9-32.exeFreeType フォントライブラリ
ftgl-2.1.2-vc9-32.exeFreeType フォントを OpenGL で使う為のライブラリ
gl2ps-1.3.5-vc9-32.exeOpenGL/PostScript 関連のライブラリ
jdk1.6.0-32.exeJava SDK 1.6.0
qt462-vc9-32.exeGUI-AF である Qt の Windows 移植版
tbb.exeIntel のマルチスレッド処理サポートライブラリ
tcltk-85-32.exeGUI-AF である Tcl/Tk の Windows 移植版

同じ GUI アプリケーションフレームワークである Qt と Tcl/Tk だが、前者は Qt を使ったサンプルファイル用に必要となるだけで、必須ではない。対して後者は、OpenCASCADE 内部で Tcl 部分をインタプリタ言語として利用している為、必須だ。

OpenCASACDE 本体、ドキュメントの順にインストールを行い、サードパーティライブラリは自己解凍形式の RAR なので、任意の場所に展開すると良い。ただし、OpenCASCADE のインストールディレクトリには既に、vc8 でビルド済みのバイナリが収められた 3rdparty ディレクトリがあるので、こちらには展開せず、

C:\OpenCASCADE6.4.0\3rdparty.vc9\freetype-2.3.7-vc9-32\

のように、別ディレクトリに配置した方が良い。

また、本記事では OpenCASCADE をインストールしたディレクトリを私の環境と同じ「E:\occ640」とする。違う場合は、適宜読み替えてもらいたい。

「スタートメニュー」に「OpenCASCADE 6.4.0」が作成され、「Draw Test Harness」を実行してみて、エラーなくコマンドプロンプトと Tcl/Tk のメニューバーが表示出来れば、インストールは正常に完了している。開いたウィンドウは、そのまま閉じて終了して良い。

OpenCASCADE 6.4.0 のディレクトリ構造

OpenCASCADE をインストールしたパスに配置されるディレクトリは以下のようになる。

3rdparty

サードパーティ製のライブラリを格納しているディレクトリ。それぞれ vc8 でビルドしたバイナリファイルが納められている。

3rdparty.vc9

vc9/32bit にてビルド済みのサードパーティライブラリを格納する。通常のインストールでは作成されない為、自分で作り、直下にライブラリフォルダを配置してやる。

data

サンプル等で利用する三次元データファイルなどが納められている。

doc

全体的な事を記載したドキュメントが納められている。別にインストールした OpenCASCADE_doc には、より詳細なクラスリファレンスが収録されている。

ros

OpenCASCADE のコアとなるソースファイル、ライブラリなどが納められている。環境変数 CASROOT が示すディレクトリ。

ros/adm/win*/vc*

32bit/64bit版の VisualStudio 各バージョン用のソリューションファイルが納められている。

ros/drv

WOK により生成されたソースファイルが納められている。

ros/inc

OpenCASCADE の主要ヘッダが納められている。

ros/src

OpenCASCADE の主要ソースがモジュール単位で納められている。

ros/win32/vc*

OpenCASCADE をビルドすると生成されるライブラリ( *.lib、*.dll )を格納する場所。これらのライブラリをサンプルや自作アプリケーションから参照する。

ros/*.bat

OpenCASCADE をビルド/実行する為に必要な環境変数を設定する BAT ファイル群。VisualStudio を標準ディレクトリ ( C:\Program Files 配下) にインストールしている環境だと、そのままでは動作しない。それぞれの用途は以下のとおり。

  • draw.bat

Draw Test Harness ( DRAWEXE.exe ) を起動する為のスクリプト。

  • env.bat

OpenCASCADE の実行に必要な環境変数を設定するスクリプト。

  • env_build.bat

インストールされている VisualStudio 環境を識別し、OpenCASCADE を VisualStudio でビルドする為に必要な環境変数をセットするスクリプト。

  • msvc.bat

VisualStudio を環境変数をセットした上で、実行するスクリプト。

samples

Qt、Java、MFC などによるサンプルプロジェクトとソースが納められている。

ビルド環境の構築

OpenCASCADE およびサンプルをビルドする為には、以下のような手順が必要だ。

  1. 環境変数をセットするスクリプトを修正する。
  2. VisualStudio のインクルードパス/ライブラリパスを追加する。
  3. サンプルプロジェクトのリンカ設定を vc9 用に変更する。

OpenCASCADE 自体、開発環境として UNIX 系 OS を基として開発されているので、環境変数による参照が多々発生する。まずは、その環境変数を正しくセットする為に、BAT スクリプトを修正しよう。

ビルド用の BAT スクリプトを作成する

E:\occ640 に Build.bat という名前の空ファイルを作成し、テキストエディタで以下のように記述する。

set CASROOT=E:\occ640\ros
call %CASROOT%\env_build.bat vc9 win32
devenv.exe "%1"

1行目、CASROOT という変数を定義する。これは、OpenCASCADE のインストールパスにある ros ディレクトリを示すもので、これがないと動作しない一番大切な変数だ。

2行目、ros ディレクトリ内の env_build.bat を引数付きで呼び出している。今回は、vc9 で 32bit バイナリを作成するので、このような引数となる。

3行目、env_build.bat が正しく実行されれば、vc9 の devenv.exe ( VisualStudio の本体 EXE ) のあるディレクトリが環境変数 PATH に設定される為、ファイル名のみで devenv.exe を起動する事が出来る。引数 %1 は、BAT ファイルが受け取った第一引数。

このファイルのショートカットを、デスクトップなり、「送る」フォルダなりに置いておこう。今後、OpenCASCADE 関連の VisualStudio ソリューションを開く時は、この BAT ファイル ( or ショートカット ) にファイルをドラッグアンドドロップして実行する。この BAT ファイルを介さない起動方法を、「通常どおり起動」と記載する事にする。

ros/env_build.bat を修正する

次に、ros ディレクトリに移動し、env_build.bat を開く。

set PRODUCTS_PATH=%~dp0..\3rdparty

となっている行の行頭に”rem “を付与し、以下のとおり行を追記する。

rem set PRODUCTS_PATH=%~dp0..\3rdparty
set PRODUCTS_PATH=E:\occ640\3rdparty.vc9

サードパーティライブラリの格納パスを、同梱されていた vc8 版から、新たに作成した vc9 版ディレクトリに変更したのだ。さらに、( 多分、バグであろう ) 環境変数 VCVARS に代入している処理も修正しておく。

if /I "%1" == "vc8" (
set VCVER=vc8
set VCVARS=%VS80COMNTOOLS%..\..\VC\vcvarsall.bat
) else if /I "%1" == "vc9" (
set VCVER=vc9
set VCVARS=%VS90COMNTOOLS%..\..\VC\vcvarsall.bat
) else if /I "%1" == "vc10" (
set VCVER=vc10
set VCVARS=%VS100COMNTOOLS%..\..\VC\vcvarsall.bat

となっている箇所を

if /I "%1" == "vc8" (
set VCVER=vc8
set VCVARS="%VS80COMNTOOLS%..\..\VC\vcvarsall.bat"
) else if /I "%1" == "vc9" (
set VCVER=vc9
set VCVARS="%VS90COMNTOOLS%..\..\VC\vcvarsall.bat"
) else if /I "%1" == "vc10" (
set VCVER=vc10
set VCVARS="%VS100COMNTOOLS%..\..\VC\vcvarsall.bat"

という風に、VCVARS=以下の値をダブルクォーテーションで囲む。この処理がないと、前述のとおり「C:\Program Files」配下にインストールした VisualStudio を正しく識別出来ない。また、env.bat にもサードパーティライブラリのパスを設定している箇所があるが、env_build.bat から呼び出された際には既にそれらのパスは正しいものに設定されている為、こちらは編集する必要はない。

VisualStudio のインクルードパス/ライブラリパスを追加

次に、VisualStudio を通常どおり起動する。メニューの「ツール」>「オプション」>「プロジェクトおよびソリューション」>「VC++ ディレクトリ」を開き、以下のパスを追加する。

■ インクルード パス

$(TBBDIR)\include

$(TCLHOME)\include

$(JAVAHOME)\include

$(JAVAHOME)\include\win32

$(FTDIR)\include

$(FTDIR)\include\freetype

$(FTGLDIR)\include

$(GL2PSDIR)\include

$(QTDIR)\include\QtGui

$(QTDIR)\include\QtCore

$(QTDIR)\include\Qt

$(QTDIR)\include

■ ライブラリ パス

$(TCLHOME)\lib

$(FTGLDIR)\lib

$(GL2PSDIR)\lib

$(QTDIR)\lib

$(TBBDIR)\lib\$(TBBARCH)\$(VCVER)

なお、これらのパスは前述の BAT ファイルによりそれぞれ、環境変数 INCLUDE、環境変数 LIB に登録され、本来であれば VisualStudio が自動的に参照するものだ。ただし、この INCLUDE と LIB は、VisualStudio が上手く参照しない場合があるようなので、面倒ではあるが、ここで明示的に定義しておくのが良いと思う。

サンプルプロジェクトのリンカ設定を変更

Samples/mfc ディレクトリに移動し、All.sln を通常どおり開く。すると、vc8 で作成されたプロジェクトの為、プロジェクトの変換ウィザードが実行される。ウィザードの手順に添って、vc9 用にソリューション/プロジェクトを変換しよう。

変換後、ソリューションエクスプローラを見ると、以下の 11 プロジェクトが含まれている事が分かる。

Geometryジオメトリサンプル
Modelingモデリングサンプル
Viewer2d2Dビューアサンプル
Viewer3d3Dビューアサンプル
ImportExportデータの入出力サンプル
OcafOpenCASCADE アプリケーションフレームワーク
Triangulration三角メッシュ処理のサンプル
HLR
Animationアニメーションサンプル
Convertデータ変換サンプル
mfcsampleMFC 用の共有ライブラリ

ソリューション構成を「Debug」から「Release」に変更後、を mfcsample プロジェクトの設定画面を開き、「構成プロパティ」>「リンカ」>「全般」を開く。そして、「追加のライブラリ ディレクトリ」の値で「vc8」となっている箇所を「vc9」に変更して「適用」を押す。

その他 10 個のプロジェクトも、同じように変更してやる*2

変更が終わったら、全て保存した上で VisualStudio を終了させよう。

これで、前準備は完了した。

OpenCASCADE のビルド

OpenCASCADE の VisualStudio によるビルド方法は二つある。モジュール単位でのビルドと一括ビルドだ。原因究明がしやすいよう、環境を整えた最初のビルドは、前者をオススメする。

モジュール単位でのビルドは、E:\occ640\ros\adm\win32\vc9 ディレクトリにある以下のソリューションを順番にビルドしていく。

  1. ファンデーションクラス (ファイル名:FoundationClasses.sln)
  2. モデリングデータ (ファイル名:ModelingData.sln)
  3. モデリングアルゴリズム (ファイル名:ModelingAlgorithms.sln)
  4. ビジュアライゼーション (ファイル名:Visualization.sln)
  5. アプリケーションフレームワーク (ファイル名:ApplicationFramework.sln)
  6. データ変換 (ファイル名:DataExchange.sln)
  7. ドロー (ファイル名:Draw.sln)
  8. ラッパ (ファイル名:Wrappers.sln)

まず、ros/adm/win32/vc9 ディレクトリの FoundationClassess.sln を先ほど作成した BAT ファイルまたはショートカットにドラッグアンドドロップし、VisualStudio を起動する。次に、ソリューション構成を「Debug」から「Release」に変更した後、メニューの「ビルド」>「ソリューションのリビルド」を実行する。

全てのプロジェクトがエラーなく、ビルド完了したら、そのまま VisualStudio を閉じ、次のソリューションを同様にビルドしていく。

一括ビルドは、上のソリューション一覧に含まれる全 78 プロジェクトが、ひとつのソリューション OCCT.sln にまとめられている。 BAT ファイル経由で起動した VisualStudio で OCCT.sln を開き、ソリューション構成を「Debug」から「Release」に変更、「ソリューションのリビルド」を行う事により、一気にビルド処理が走る。ちなみに、手元の Core i5 ラップトップでビルド時間を調べたところ、全てビルドするのに40分かかった。

エラーが出た場合

「TKernel.lib が見つかりません」、「jni.hが見つかりません」といったエラーメッセージが出てくる場合、ほとんどが参照パスの設定ミスかファイルの配置ミスであるので、もう一度見直してみた方が良い。

また、OpenCASCADE のソースコードの多くは、フランスやロシアで開発されている為、VisualStudio 標準の日本語環境(CP932)では正しく解釈できない場合がある。特に、コメントに記述されたフランス語が、後に続く改行文字やコメント終了文字を打ち消してしまい、エラーになる問題が発生する場合がある。これらはソースコードを正しく書き換えるか、nkf などのツールを用いて、ソースファイルを Unicode に変換すれば対処できる。

全てのビルドが完了すると、ros/win32/vc9 ディレクトリに bin ディレクトリと lib ディレクトリが作成され、それぞれ *.dll と *.lib、*.exp などのファイルが生成される。このライブラリを参照する事により、サンプルや自作アプリケーションで OpenCASCADE の機能を使う事が出来る。

サンプルのビルド

先ほど変換しておいた samples/mfc ディレクトリの All.sln を BAT ファイル経由で開く。ソリューション構成が「Release」になっている事を確認し、メニューの「ビルド」>「ソリューションのリビルド」を実行する。標準では、全てのサンプルから参照されている MFC 用ライブラリ mfcsample.dll が最初にビルドされ、次にその他のプロジェクトがビルドされる。

スタートアッププロジェクトには、Geometry が設定されている為、「デバッグ開始」ボタン(緑色の再生ボタン)をクリックすると、2 つのウィンドウを持つ、Geometry.exe が起動される。

OpenCASCADE を記載している C++ は、他のプラットフォームでもしっかりとコンパイルできるよう、C++/CLI のように Microsoft が勝手に作り出した CLI 用言語ではない。つまり、.NET Framework も利用していない。今回は、VisualStudio を利用する事もあり、サンプルとして MFC 版をビルドしてみたが、たとえ Windows アプリケーションに実装しようとしていても、 Qt や Java などをアプリケーションフレームワークとして採用するのがいいと思う。

*1:空白文字を含むパスにインストールされた VisualStudio を上手く起動する事が出来ない

*2:vc8 環境が要らないなら、プロジェクト設定を変更するよりも、vc9 にジャンクション/シンボリックリンクを貼った方が手間はかからない。ただ、後で見た時混同しやすくなるので、出来るだけここは設定しておいた方が良いと思う。

PHASE OF THE MOON

11月9日の bsdgames パッケージに関する記事を書いた際、”pom”コマンドの解説文をさらっと「冗談だろ」とスルーしていたが、ちゃんとしっかりとした「冗談」だった。

かの有名なハッカー文化のスラング辞書 Jargon File に基づき編纂された the HACKER’S DICTIONARY ( ESR 著の “New~” ではない) によると、”Phase of the Moon” とは、ランダムパラメータの代名詞となっているようだ。ランダムパラメータといっても、プラスイメージに使われる事はあまり無いようで、

“Whether the editor will save your file automatically when you exit depends on the phase of the moon.”

(「その編集ルーチンがそこから出るときに自動的にファイルをセーブするかどうかは運任せさ」)

といった用例が載っていた。なるほど。

これは本当に、”pom” コマンドの解説文にあったように、”ソフトウェアを完成させる日を決めたり、経営上の判断を行なうのに役に立ち”そうだ・・・!

フリーソフトウェア財団の特製 VISA カードの件

オープンソースの三次元数学ライブラリ OpenCASCADE のトレーニングを受けるべく渡仏するにあたり、海外でも使える VISA カードを取る必要が出てきた。

VISA カードといえば、GNU Project で有名な Free Software Foundation ( フリーソフトウェア財団 )がイカしたデザインのカードを発行している。

Introducing The Free Software Foundation Visa Platinum Card

インターネット上から取得申請手続きが出来るわけだが、米国の社会保障番号( SSN )の項目を埋めない限り、それ以上先に進む事が出来ない。FSF のフォーラムや ML で聞く勇気もない自分は、info@fsf.org にメールを投げてみた。

info@~ なんて、個人的な質問メールを送る窓口じゃなさそうな臭いがプンプンしていたが、FSF のメンバーページに”Questions or feedback? info@~”とあるので仕方ない。大量のスパムメールに埋もれてしまいそうで、リプライは期待していなかったのだが、半日もせずに返事が来た。

FSF のプログラムアシスタントであるジャンヌ・ラサタ氏曰く、

US residency is unfortunately a requisite, so living in Japan you would not be eligible for the card.

との事。

SSN がないと取れないのは残念だけど、初めてサポートらしいサポートを受けた気分になれた。

bsdgames パッケージについて

Debian に用意されているテキストベースゲーム集。

$ sudo aptitude install bsdgames bsdgames-nonfree

インストールするとそれぞれのコマンドは、/usr/games 以下に配置される。

adventure

対話型のアドベンチャーゲーム。

arithmetic

対話型の計算ゲーム。オプション -o + だと足し算問題、 -o – だと引き算問題、同様に x はかけ算、/ は割り算の問題となる。省略すればランダム。また、レンジの指定 -r 100 とすれば、0から100までの数字で出題される。

atc

空港管制官ゲーム。man ページによると、以下のとおり。

atc は 1 年あたり何百万人という旅行者の命を危険にさらすことなく飛行機の交通を制御するという神経をすり減らす任務における技量を試します。責任者で あるあなたは管制空域と滑走路の内や外へジェット機やプロペラ機を指示して飛ばさなければなりません。飛行機のスピード (画面更新の間隔) と登場頻度は選んだ空域の難しさによって決まります。

画面構成は以下のようになっている。

7-----------------------0---------------------------------1 Time: 3    Safe: 0
| A7. . . . . . . . . . + . . . . . . . . . . . . . . . + |
| . + . . . . . . . . . + . . . . . . . . . . . . . . + . | pl dt  comm
| . . + . . . . . . . . + . . . . . . . . . . . . . + . . | A7 E4:
| . . . + . . . . . . . + . . . . . . . . . . . . + . . . | b7 A1:
| . . . . + . . . . . . + . . . . . . . . . . . + . . . . |
| . . . . . + . . . . . + . . . . . . . . . . + . . . . . |
6 b7+ + + + + + + + + + *0+ + + + + + + + + + + + + + + + 2
| . . . . . . . . . . . + . . . . . . . . + . . . . . . . |
| . . . . . . . . . . . + . . . . . . . + . . . . . . . . |
| . . . . . . . . . . . + . . . . . . + . . . . . . . . . |
| . . . . . . . . . . . + . . . . . + . . . . . . . . . . |
| . . . . . . . . . . . + . . . . + . . . . . . . . . . . |
5 + + + + + + + + + + + + . . . + . . . . . . . . . . . . |
| . . . . . . . . . . . + . . + . . . . . . . . . . . . . |
| . . . . . . . . . . . + . + . . . . . ^0. . . . . . . . |
| . . . . . . . . . . . + + . . . . . . . . . . . . . . . |
| . . . . . . . . . . . *1+ + + + + + + + + + + + + + + + 3
| . . . . . . . . . . + . . . . . . . . >1. . . . . . . . |
| . . . . . . . . . + . . . . . . . . . . . . . . . . . . |
------------------4----------------------------------------

滑走路中にいる A7 とか b7 となっているのが、きっと航空機。

最初、この画面で何がなんだか分からなかったけど、地味に面白いかもしれない。

今度ちゃんとやってみる。

backgammon

その名のとおり、バックギャモン。

_____________________________________________________
|                       |   |                       |
|13  14  15  16  17  18 |   |19  20  21  22  23  24 |
| w               r     |   | r                   w |
| w               r     |   | r                   w |
| w               r     |   | r                     |
|                       |   | r                     |
|                       |   | r                     |
|                       |BAR|                       |
| r                     |   | w                     |
| r               w     |   | w                     |
| r               w     |   | w                     |
| r               w     |   | w                   r |
| r           w   w     |   | w                   r |
|12  11  10   9   8   7 |   | 6   5   4   3   2   1 |
|_______________________|___|_______________________|
Player is red, computer is white.

バックギャモンは、古代エジプトの時代に既にその原型があったらしく、日本には奈良時代に伝来していたとか。

battlestar

bcd

パンチカードのアスキーアートを表示してくれるコマンド。

実行すると、以下のようにパンチ穴を ] で表示する。

user@alice:~$ bcd "this is test"
________________________________________________
/THIS IS TEST                                    |
| ]]  ]   ]                                      |
|                                                |
|]  ]  ] ] ]]                                    |
|111111111111111111111111111111111111111111111111|
|222]22]222]2222222222222222222222222222222222222|
|]3333333]33]333333333333333333333333333333333333|
|444444444444444444444444444444444444444444444444|
|555555555]55555555555555555555555555555555555555|
|666666666666666666666666666666666666666666666666|
|777777777777777777777777777777777777777777777777|
|8]8888888888888888888888888888888888888888888888|
|99]99]999999999999999999999999999999999999999999|
|________________________________________________|

引数をダブルクォーテーションで囲まないと、複数の引数として扱われ、this、is、test のそれぞれが、ひとつずつのカードに印字された状態となる。

また、小文字で指定しても必ず大文字となる。

boggle

バラバラに配置されたアルファベットから、英単語を探し出すゲーム。英単語の勉強には丁度いいかも。

caesar

シーザー式暗号法の解読ツール。以下、manページより。

caesar は英文字の出現頻度に関する統計を用いてシーザー式暗号法の解読を行なうユーティリティです。 caesar は標準入力から読み込み、標準出力へ書き出します。USENET への暗号化された投稿や、 fortune(6) プログラムが用いるデータベースのいくつかは、13 文字分回転されています。

canfield

キャンフィールド。

=-> CANFIELD <-=
Base     foundation
Rank     =---=  =---=  =---=  =---=      *----------------------------------*
J       | Jc|  | Jd|  |   |  |   |      |         MOVES                    |
=---=  =---=  =---=  =---=      |s# = stock to tableau             |
|sf = stock to foundation          |
stock     tableau                        |t# = talon to tableau             |
=---=     -1-    -2-    -3-    -4-       |tf = talon to foundation          |
| 3c|             4d     6h     5d       |## = tableau to tableau           |
=---=                                    |#f = tableau to foundation        |
|ht = hand to talon                |
talon                                    |c = toggle card counting          |
=---=                                    |b = present betting information   |
| 3s|                                    |q = quit to end the game          |
=---=                                    |==================================|
|                                  |
|Move:                             |
|Replace # with the number of the  |
|tableau you want.                 |
*----------------------------------*

countmail

メールボックスのメール数をカウントし、通知してくれるツール。

cribbage

クリベッジ。

+-----+                               +---------------------------------------+
|AS   |                               |  Score:   0     YOU                   |
|+-----+                              | *.....:.....:.....:.....:.....:.....  |
||3S   |                              | *.....:.....:.....:.....:.....:.....  |
+|+-----+                             |                                       |
||6S   |                             | *.....:.....:.....:.....:.....:.....  |
+|+-----+                            | *.....:.....:.....:.....:.....:.....  |
||8H   |                            |  Score:   0      ME                   |
+|+-----+                           +---------------------------------------+
||JH   |
+|+-----+
||KH   |
+|     |
|   KH|
+-----+
*Discard a card -->
CRIB
+-----+
|     |
|     |
|     |
+-----+

dab

ドットとボックスのゲーム。何だろうこれ。

go-fish

子供用の対話型カードゲームらしい。

gomoku

五目並べ。* が黒石、Oが白石みたい。ちゃんと囲碁の19×19フルサイズ盤面だ。

A B C D E F G H J K L M N O P Q R S T       #  black  white
19 * . . . . . . . . . . . . . . . . . . 19     1 A19
18 . . . . . . . . . . . . . . . . . . . 18     2        A15
17 . . . . . . . . . . . . . . . . . . . 17     3 D16
16 . . . * . . . . . . . . . . . . . . . 16     4        A13
15 O . . . O . . . . . . . . . . . . . . 15     5 A14
14 * . . . . . . . . . . . . . . . . . . 14     6        E15
13 O . . . . . . . . . . . . . . . . . . 13
12 . . . . . . . . . . . . . . . . . . . 12
11 . . . . . . . . . . . . . . . . . . . 11
10 . . . . . . . . . . . . . . . . . . . 10
9 . . . . . . . . . . . . . . . . . . . 9
8 . . . . . . . . . . . . . . . . . . . 8
7 . . . . . . . . . . . . . . . . . . . 7
6 . . . . . . . . . . . . . . . . . . . 6
5 . . . . . . . . . . . . . . . . . . . 5
4 . . . . . . . . . . . . . . . . . . . 4
3 . . . . . . . . . . . . . . . . . . . 3
2 . . . . . . . . . . . . . . . . . . . 2
1 . . . . . . . . . . . . . . . . . . . 1
A B C D E F G H J K L M N O P Q R S T
BLACK/you      vs.    WHITE/gomoku
move?

hack

元祖アクションRPG”ローグライクゲーム”の諸派の中でも有名な nethack の前身。

これだけでも、かなり遊べる。

7 gold pieces.
----------|........| # |........| # |<.......| ##+........||........+#----------# # # ### #------ #d.@..||....+|....|------Level 1 Hp 16(16) Ac 8 Str 18 Exp 1

hangman

単語当てゲーム。

hunt

マルチプレイヤーで殺し合うゲーム。オンライン TPS みたいなものだ。

+-----+-----------+-----+-------+---+-------------+         Ammo:          15
|                                                 |         Gun:           ok
|                                                 |         Damage:        0/10
|                                                 |         Kills:          0
|                                                 |
|                                                 |         Player:
+                                                 |           0.00+dyama      0
|                                                 |
|                                                 +
|                                                 |
|                                                 |
|                                                 |
+                                   +--           |
|                                   |             |
|                                   |<+           |
|                                   | |           |
|                                   + |           +
|                                   |             |
|                                   +--           |
|                                                 |
+                                                 |
|                                                 |         Monitor:
+---------------+---------+---+-------+---+-------+

mille

Mille Bornes らしい。

monop

ポーカーゲーム。

morse

引数または標準入力をモールス信号の打鍵に変換してくれるソフト。もちろん和文ではなく英文。実行例は以下のとおり。

$ morse this is test
daw
dit dit dit dit
dit dit
dit dit dit
dit dit
dit dit dit
daw
dit
dit dit dit
daw
dit dit dit daw dit daw

dit がトンで、daw がツーみたいだ。また、-s オプションを指定する事により、

$ morse -s this is test
-..............-....-...-.-

という、記号表記にする事も可能。

また、-d オプションで morse の表示をデコード(復号)する。

number

アラビア数字を英語の読みに変換する。

$ number 1971
one thousand.nine hundred seventy-one.

pig

文字列の語尾に”ブタ語”を付ける。みさくら語変換とか、あの手のものだろう。

$ echo hello, world | pig
ellohay, orldway

phantasia

マルチプレイヤー型のファンタジーオンラインRPG。

dyama is in Rohan  (-43,111)
Level : 1 Energy : 82( 82) Mana : 71 Users: 1
Quick : 31( 31) Strength: 57( 57) Gold : 58
In game
1:Move 2:Players 3:Talk 4:Stats 5:Quit
Name X Y Lvl Type Login Status
dyama -43 111 1 F user In game
Total players on file = 1

pom

月齢を表示する。man ページによると、

ソフトウェアを完成させる日を決めたり、経営上の判断を行なうのに役に立ちます。

との事だが、冗談だろう。

ppt

紙テープのアスキーアートを表示する。

$ ppt this is test
___________
| ooo .o |
| oo o. |
| oo o. o|
| ooo . oo|
| o . |
| oo o. o|
| ooo . oo|
| o . |
| ooo .o |
| oo .o o|
| ooo . oo|
| ooo .o |
___________

きっと o が穴、. がテープを引っ掛ける為の小さな穴だ。

パンチカード同様、リアルタイムに見てきた世代ではないので、本物との検証は出来ないのが残念。

primes

オプションを指定しないと、素数を延々と表示してくれる。これでは落ち着いて数えられない。

$ primes 1 10 # 1 から 10 までの素数を表示
2
3
5
7

quiz

クイズ。引数なしで起動すると、収録クイズが一覧で出てくるので、それを引数にして起動すればクイズが楽しめる。

$ quiz asian capital # "アジアの首都"クイズを選択
Bangladesh?
知るか
What?
Dacca
Philippines?

答えを入力せずに Enter キーを押下すると、正解を教えてくれるらしい。geek 用語やスタートレッククイズもあるので、挑戦してみてはいかが?

random

man 6 random してみると、標準入力の行をランダムに表示するコマンドのようだ。関連項目に fortune があるように、fortune の代替として使える。

fortuneコマンドについての雑記

rain

コンソール上に水を張り、そこに雨粒を落としたようなエフェクトがかかる。

最近の表示性能の速い端末だと何の事やら分からないので、ディレイ(-d オプション)を指定する方が良い。

ディレイを 100 に設定して実行すると、画面の奥から国民的一家が飛び跳ねて来そうなエフェクトになる。

robots

ロボットを操作するゲーム。

+-----------------------------------------------------------+ Directions:
|                                                +          |
|                    +                                      | y k u
|                                                           |  \|/
|                           @                               | h- -l
|                                                           |  /|\
|                                                    +      | b j n
|                                                           |
|                                                   +       | Commands:
|                                          +                |
|                                        +                  | w:  wait for end
|                                                           | t:  teleport
|                                                           | q:  quit
|                                                           | ^L: redraw screen
|                                                           |
|                                                           | Legend:
|                                                      +    |
|                                                     +     | +:  robot
|                   +                                       | *:  junk heap
|                                                           | @:  you
|                                                           |
|                                                           | Score: 0
|                                             +             |
+-----------------------------------------------------------+

sail

こっちは、きっと大航海時代的なアレだと思う。アイアイサーゆうてるし。

Class 2 Ship of the Line (80 guns) 'Indomptable' (f0)             Points    0
+---------------------------------------------------------------+ Fouls     0
|                                                               | Grapples  0
|                                                               |
|                                                               |     0 1(2)
|                                                               |    \|/
|                                                               |    -^-2(4)
|                                                               |    /|\
|                      s3                                       |     | 2(4)
|                       f0f1                                  2 |    1(3)
|                                                               |
|                    s0                                      /  | Load  G! G!
|              S2                                               | Hull  5
|                s1                                             | Crew  6 12 10
|                                                               | Guns 22 17
|                                                               | Carr  2  0
+---------------------------Turn 2  ----------------------------+ Rigg 4 7 7 -
Indomptable (f0): Captain dyama assuming command
Real-Carlos (s0): firing round shot on Indomptable (f0)
Indomptable (f0): shot holes below the water line
San Augustine (s3): firing double shot on Indomptable (f0)
Real-Carlos (s0): firing round shot on Indomptable (f0)
San Augustine (s3): firing double shot on Indomptable (f0)
Aye aye, Sir
~

snake

スネークゲームと思ったら、スネークに捕まらないように操作するゲームだった。

|------------------------------------------------------------------------------|
|                                                                              |
|                                 $                                            |
|                                                                              |
|                                                                              |
|                  S                                                           |
|               # s                                                            |
|                s                                                             |
|               s                                                              |
|               s                                                              |
|              s                                                               |
|                                                                              |
|                                                   I                          |
|                                                                              |
|                                                                              |
|                                                                              |
|                                                                              |
|                                                                              |
|                                                                              |
|                                                                              |
|                                                                              |
|                                                                              |
|                                                                              |
|                                                                              |
|------------------------------------------------------------------------------|

tetris

テトリス。コマンド名は、tetris-bsd。背景色で書いてあるゲームなので、実行画面は省略する。

trek

対話型のスタートレックをモチーフとしたゲーム。

wargames

!?

worm

こちらが予想していたスネークゲームのようだ。自分が動きながら成長する。

worms

端末に蟲を這わせるらしい。rain のようなキャラクタ端末エフェクター。

man によると、元は DEC-2136 用のプログラムだったようで、各オプションは次のとおり。

  • -f 蟲達が食い散らす “畑” を作ります。
  • -t 蟲が通った跡を表示します。
  • -d 更新間隔をミリ秒単位で指定します。高速な端末で有用です。適切な値は、だいたい 20 から 200 です。デフォルト値は 0 です。
  • -l 蟲の長さを指定します; デフォルトは 16 です。
  • -n 蟲の数を指定します; デフォルトは 3 匹です。

GNU screen の idle に指定しておけば、スクリーンセイバーとしても有用。

wump

Move or shoot? で You hit the wall だから、ええと、なんだ。

wtf

$ wtf is ls
ls: ls (1) - list directory contents

なお、bsdgames-nonfree パッケージには、今のところ「rogue」のみ収録されている。

最近の100円均一ショップすごい

以下、全て100円で売ってあった。すごいなー。

  • 充電式単三乾電池
  • 充電式単三乾電池が二本入る、100Vコンセント用充電池チャージャ
  • USB2.0対応 MicroSD カードリーダ/ライター
  • USB2.0対応 SD カードリーダ/ライター
  • 単三乾電池式USB充電ボックス
  • 電球ソケットタイプの湾曲蛍光灯
  • USB 給電式の LED ライト(金属製、30cm程度のくねくね曲るもの)

「タバコの火消し(100円)」がえらく高く感じてしまう。特に最近の百均の USB 関連グッズには、光るものがある。また、タバコ一箱分(410円)よりも安いお値段で、充電池+チャージャが手に入る(315円)事には衝撃だ。

ちなみに全て買ってみた。

「安かろう悪かろう」でも、お釣りが来る程安いよなあ。

アロワナを購入した。

アロワナを購入し、GEXの60cm水槽セットオーシャンブルーの20W蛍光灯を購入した。現在、自宅で稼動している水槽は6個。内訳は以下のとおり。

120cm スリム水槽

メインの熱帯魚水槽。ADA のソイルを 8kg 敷いて、流木やら水草やらを入れてアクアリウム化している。テトラ製の外部濾過フィルタ完備。数十種類の熱帯魚やエビを飼っている。環境は一番安定しているかな。

60cm 水槽

本日、コーナンで買ってきたGEX製セット水槽。オーシャンブルーの蛍光灯を別に購入し、淡水水槽なのにやたら青い。20cm ほどのアロワナが一匹だけ優雅に泳いでいる。上部式フィルタはもちろん GEX製。

45cm 水槽

姉金を10匹飼っている。金魚は水質の悪化がアホみたいに早いので、少しでも水量の多い水槽をと、このサイズに。ただやはり、外掛け式フィルタには限界があるようで、水の濁りも早い。フィルタはテトラ製。

17cm キューブ水槽

テトラ製メダカ飼育セットのプラスチックキューブ水槽を3つ置いている。それぞれ、「めだか本舗」で購入した白メタルメダカ、光メダカミックス、オレンジメダカを飼育中。もう少し大きく育ったら、安定した環境に移しかえる予定。