Delphi もやっています

当工房は C++ (C++Builder) と Java が得意分野ですが、RAD Studio のコンポーネント作成には Delphi の方が好都合ですので、Delphi も扱っています。

古い Delphi プログラムの Unicode 対応等の近代化改修も承りますので、お気軽にご相談ください。

Hudson と Mercurial を利用した Maven 成果物のリリース管理

たまには何か書かないと PV が増えないので、今回は HudsonMercurial を利用した Maven 成果物 (artifact) のリリース管理について書いてみたいと思います。

ご存じの方もいるかと思いますが、私は OSSRH を利用して Maven Central Respository に Java 系成果物を公開しています。一例としては Google Login Plugin for Hudson とかですね。

ところで、Maven にはバージョンの末尾に -SNAPSHOT が付くと、リリース前のスナップショットとして扱われるという慣例があります。例えばバージョン X.Y-SNAPSHOT はバージョン X.Y より前のスナップショットという意味になり、Maven のリポジトリーでも別枠となります。

さてここまでを前置きとして、今回紹介するのは Hudson と Mercurial を利用して、成果物のリリースを半自動化してしまう手法です。

Hudson の使い方については別途調べてもらうとして、Hudson を使うことで Maven 成果物のデプロイ (deploy) までは自動化可能です。スナップショットの段階なら Hudson が新しいリビジョンを見つけるたびに自動デプロイしても何ら問題はありませんが、正式のリリースとなるとそうも言っていられません。

一応 OSSRH にステージング機能があるので、デプロイしてもいきなりリリースされることはないのですが、リリースしないものは破棄しなければなりませんので、リリース バージョンの自動デプロイは極力減らしたいところです。

そこで活用するのが Mercurial のブックマークです。例えばブックマーク release-candidate をリリース用のブランチに作成して、Hudson ではこのブックマークを追跡して自動デプロイするようにジョブを作っておきます。こうすると release-candidate の移動に伴ってリリース候補が OSSRH のステージング領域に自動デプロイされることになりますので、リリース OK となったら最後のリリース候補をリリースして残りを破棄すればリリース完了という流れです。

注意点としては、一旦リリースしたら次のリリースまでブックマークを移動しない (つまり自動デプロイしない) ようにすることでしょうか。Git でもブランチの移動を工夫すれば同様のことは可能だと思いますので、ぜひ試してみてください。

RT58i と rsyslog を使って発信者番号をメール通知

ヤマハの RT58i には着信した電話の発信者番号を syslog に出力する機能があります。そして syslog デーモンの一種 rsyslog にはログをメールで送る機能があります。

そこでこれを組み合わせたら、着信した電話の発信者番号をメールで通知することができるのではないかと考えて試してみたので設定を紹介します。

前提条件

今回試した設定では以下のバージョン (リビジョン) を利用しました。

  • RT58i: ファームウェア Rev.9.01.51
  • rsyslog: バージョン 8.4.2 (Debian 8 収録のもの)

準備

RT58i でログを別ホストに送信する設定

まず RT58i でログを別ホストに送信するように設定します。以下のようにホスト名なり IP アドレスなりで rsyslog の動作するホストを指定します。

syslog host syslog.example.com

これを設定したら save を忘れずに。

rsyslog で別ホストからログを受信する設定

rsyslog.conf (Debian の場合は /etc/rsyslog.d 以下の任意の example.conf ファイルに記載するとよいでしょう。) に以下を記述して UDP 受信を有効にします (ここでは legacy configuration で記載しています。)。

$ModLoad imudp
$UDPServerRun 514

ここまで設定して service rsyslog force-reload を実行すれば、RT58i のログが rsyslog で記録されるようになるはずです。

rsyslog で着信電話の発信者番号をメール送信する設定

RT58i では電話の着信があると以下のようなログを残します。

TEL[**/*] InComing Call from 0ABCDEFGHIJ

そこでまずこれを抜き出すために以下のような正規表現を使ったフィルターを使います (まあ国内の電話番号なら必ず 0 で始まるはずなので [0-9] は余計かもしれませんが念のために入れておきました。)。

:msg,regex,"InComing Call from [0-9]" action

rsyslog の仕様なのか TEL[…] の部分は msg プロパティーには含まれないので正規表現には含めていません。

次にこのフィルターを利用して以下のように発信者番号をメール送信するように設定します。

$ModLoad ommail

$template MailSubject,"Got an incoming call"
$template MailBody,"From %msg:R,ERE,1: from ([0-9]+)--end%"

$ActionMailFrom nobody@example.com
$ActionMailTo somebody@example.com
$ActionMailSubject MailSubject

:msg,regex,"InComing Call from [0-9]"   :ommail:;MailBody

ここまで終わったらもう一度 service rsyslog force-reload を実行して新しい設定を有効にします。

最後に自分の携帯電話から発信するなり誰かに発信してもらうなりして実際にメールで発信者番号が通知されることを確認すれば作業は終わりです。

たぶん後継機種の NVR500 でも同様にできると予想しますが、そこは自己責任でお願いします。

Google Cloud Storage Nearline を使ってみました

Google Cloud Platform に Cloud Storage Nearline というサービスがあるのに気づいたので Turbo NAS のバックアップ用に使ってみることにしました。

Developers Console から、ストレージ クラス Nearline を選択して Cloud Storage にバケットを作成するだけで、後は通常の Cloud Storage を使うバックアップと同じ設定であっさり成功してしまいました。ほぼ同じ料金の Amazon Glacier と違って、バックアップした内容が Developers Console から確認できるほか、不要になったバケットやフォルダーの削除も何時間も待つことなく可能なので、使い勝手は格段に良いです。

しばらく使ってみて、料金的に問題が発生しないようなら、比較のために同時に設定してみた Glacier を使ったバックアップは取りやめにしようかと考えています。