‘技術メモ’ カテゴリーのアーカイブ

なおも boost セットアップ調査中…。 このエントリーをはてなブックマークに追加

2009 年 7 月 16 日 木曜日

昨日、一昨日はメインの仕事の都合で朝が早かったので、こっちの作業はちょっと pending してました。

cl.exe コマンドを直接呼んでビルドする方法については調査完了しました。必須オプションが何気に多いですね…。実際にはあれに最適化オプションなりデバッグオプションなりがくっつくことになります。

で、今度は Ubuntu でのセットアップを調べているのですが、ここで問題発覚。どうやら Ubuntu での boost ライブラリのメインバージョンはまだ 1.34.1 で止まっているようです…。もしかしたら Debian を始め、多くの Linux ディストリビューションにおいても同様の状況なのかもしれません。当初は最新の 1.39.0 を利用する予定でしたが、事実上の汎用性が損なわれる可能性もあるので (さすがにライブラリを手動でインストールしてくれ、とやる訳にもいかないですからね…)、互換性を確認しつつ、バージョンについては考慮しなければならないかもしれません。

インストールして動かして、というあたりはまだこれから調査するところです…。

Windows で Boost セットアップ このエントリーをはてなブックマークに追加

2009 年 7 月 13 日 月曜日

Windows 環境で Boost ライブラリをセットアップしてみました。明日は Linux 環境でもセットアップを行い、技術メモとしてまとめる予定です。

で、せっかくなので、試しに簡単なサンプルを作って動作確認をしてみました。

#include <iostream>
#include <fstream>
#include <string>

#include <boost/regex.hpp>

using namespace std;
using namespace boost;

void escapeHtml(const string &src, string &modified);

int main(int argc, char* argv[])
{
	for (int i = 1; i < argc; i++)
	{
		ifstream fin(argv[i]);
		if (fin.bad() || fin.fail())
		{
			cerr << argv[0] << ": Can't open " << argv[i] << "." << endl;
			continue;
		}
		while (!fin.eof())
		{
			string line;
			getline(fin, line);
			string modified;
			escapeHtml(line, modified);
			cout << modified << endl;
		}
	}
	
	return 0;
}

void escapeHtml(const string &src, string &modified)
{
	modified.clear();
	sregex_iterator last_it;
	for (sregex_iterator it(src.begin(), src.end(), regex("[<>&\"]")); it != sregex_iterator(); it++)
	{
		modified += it->prefix().str();
		string sub = (*it)[0].str();
		switch (sub[0])
		{
			case '<':	modified += "&lt;";		break;
			case '>':	modified += "&gt;";		break;
			case '&':	modified += "&amp;";	break;
			case '"':	modified += "&quot;";	break;
			default:	assert(0);	break;
		}
		last_it = it;
	}
	modified += last_it == sregex_iterator() ? src : last_it->suffix().str();
}

Boost.Regex の regex_iterator を用いたテストです。よーするに、コマンドに指定したファイルの HTML エスケープ処理を施してコンソールに書き出すプログラムです。

上記のプログラムを test.cpp などのファイル名で保存し、そのまま Visual Studio 2008 コマンドプロンプト上で

cl test.cpp

とやってみましたが、これだけではコンパイルできませんでした。どうやら、 Visual Studio のオプションダイアログでヘッダーファイルやライブラリの参照先ディレクトリを設定しても、その設定が参照されるのは Visual Studio の IDE からビルドを実行した場合のみのようです。あるいは、環境変数 INCLUDE や LIB を設定してあげればこれでコンパイルできるのかも知れません。その辺はまた追々調べてみますが、最終的には .configure--boost-prefix といったようなオプションを設ける、といった形の対応になるのではないかとも思います。

ちなみに、これと同等の (しかもより確実に動作する) プログラムを Perl で記述すると、以下の通りになります (この書き方はしかし Unix 風環境限定ですが)。

#!/usr/bin/perl -p
s/[<>&"]/'&'.{qw(< lt > gt & amp " quot)}->{$&}.';'/eg;

うあー、やっぱりスクリプト言語は便利だなー (汗。


2009年 7月 28日 火曜日 16:56:07 JST – 追記

egtra 様、ご指摘感謝です。仰る通り、 string::getline() を使った方がスマートなので、その通りに修正させて頂きました。

システム構成仕様がとりあえず完成。 このエントリーをはてなブックマークに追加

2009 年 7 月 7 日 火曜日

こんなんできました~

…なんか、UI と I/O の関係図にデータの流れも含まれてるなぁ。これだったらデータの流れ図要らなかったかも…。ていうか、基本的にはここでやりたかったのは必要な UI の可視化なので、実行時オプション、設定ファイル、警告出力、そして各種操作が、各処理とどう関係するか、という部分だけ書いて、データの流れは含めるべきではなかったかも…。あと端子で書いた 3つの出力もデータの流れ図で示すべきだったかも…。データの流れ図ではファイルと見分けが付かないしなぁ…。

UI と I/O の関係図を作成中… このエントリーをはてなブックマークに追加

2009 年 7 月 6 日 月曜日

なんだけど、いまいちしっくりこないので、まだ未公開です…。ちょっと時間をかけすぎてしまった (1時間以上オーバー^_^;)。

…操作と入出力がごっちゃになっちゃってるなぁ。入力はファイルを規定しているのに出力はそれを規定しないからアンバランスになってるんだろうな。操作が処理を呼び出す関係と処理による入出力の関係は切り離さないとな。出力はどうやって示そう? コネクタが良いのかなぁ… (以上独り言)

仕様の転載が完了しました。 このエントリーをはてなブックマークに追加

2009 年 7 月 3 日 金曜日

コマンド仕様用語集の転載が完了。これで、既存の仕様の転載は完了しました。

用語集の中で脚注 (フットノート) を使っていたので、急遽FootNoteMacro プラグインをインストールしました。 wget ではうまくダウンロードできなかったので、手元でダウンロードしたものを rsync で転送した後、

% unzip footnotemacro-r6151.zip
% cd footnotemacro/0.11
% sudo setup.py install

とし、Trac の管理メニューでプラグインを有効に。メインの仕事で使っているプロジェクトの Trac からも使えるようになっているはずなので、ちょくちょく使っていこうかな? …あっちはおいら一人で使ってるから脚注なんて使う機会無いか。(^_^;
(さらに…)

制御命令は課題がいっぱい このエントリーをはてなブックマークに追加

2009 年 7 月 2 日 木曜日

制御命令一覧の転載が完了しました。

otoco の制御命令は Perl 版でも実装実績がまだ無く、仕様に関しても、構想はあるんだけれども内容は埋まらないまま穴だらけ、という状態です。メタイベントの類とか、むしろ実装が容易な上にプライオリティも高そうなものが未定義のままほったらかしですね…。早いとこどうにかしないと。

すでに仕様が埋まっている制御命令にもいくつか問題があります。まず #charset 。これ、Encode.pm の仕様を前提にして書かれているので、指定できる文字セット名がちょっと豊富すぎますw。そもそもの問題として、文字セットを扱うライブラリに何を利用するのか決めないといけません (iconv にするか、nkf にするか、他のを探すか… boost にその辺やってくれるクラスがあればいいんだけどなぁ…)。

それともう一つ、#function で関数を定義するときに用いるスクリプト。 Perl 版では eval を用いる気満々で、まんま Perl で書かせるつもりでいたのですが (ファイルとかを扱えてしまえるのは問題なので、その辺の安全性をどうやって確保するかで頭を悩ませてはいましたが)、C++ から Perl パーサを呼び出す気にはなれないし (あんまり動作安定してないですからね、あれ)、自前で Perl パーサを作るなんて以ての外。という訳で、自前でスクリプト言語の仕様を考えなければなりません。まぁ、Lua かなぁ…。

MML 仕様を転載中…。 このエントリーをはてなブックマークに追加

2009 年 7 月 1 日 水曜日

ERK 避難所の wiki にて記述していた外部仕様の転載作業ですが、とりあえず MML 仕様の類が現在着々と進行中です。この中では残るは制御命令一覧のみ。それとコマンドツール用のコマンド仕様も転載したらこの作業はとりあえず完了です。明日中には終わらせたいなぁ。

しかし夕べは夜更かししてしまって 3時間ぐらいしか寝てない…。日中の仕事に響かなければいいのですが (汗。

otoco の trac できました。 このエントリーをはてなブックマークに追加

2009 年 6 月 26 日 金曜日

本当にただ作っただけですが…。中身はまだ全然いじくってません。ロゴは作ったけど (これにほとんどの時間を費やしてしまった…^_^;)。

trac の設定自体は以前メモした内容とほとんど相違ありません。強いて言えば、otoco プロジェクトは基本的にオープンであり、SSL を用いる必要がないのと、サイト全体を認証で隠す必要がないので、

  • /etc/httpd/conf.d/ssl.conf に記述していたのと同等の内容を /etc/httpd/conf/httpd.conf 内に直接記述した。
  • 認証を行うロケーションを /trac/original/otoco/login とした。

といった辺りが相違点になります。

なお、ロゴの作成には LogoShader を利用させて頂きました。ツールを使い慣れていなかったこと、急ごしらえであったことなどにより、出来はイマイチですが…そのうち作り直しますか…。ともあれ、作者のツッダキミオさんに多謝!!

とりあえず svn の設定だけ。 このエントリーをはてなブックマークに追加

2009 年 6 月 25 日 木曜日

初っぱなから 40分オーバーです (汗。2時間だけ作業するってのは難しいな。

とりあえず svn だけ設定しました (←まだ匿名アカウントを用意していないので私以外はアクセスできませんが…)。Subversion/WebDAV は初めて設定するのでちょっと手こずりました。

設定の際に参考にさせて頂いたサイトを以下に記します (敬称略)。多謝!!

mod_perl であほプログラムを作ってみた。 このエントリーをはてなブックマークに追加

2008 年 12 月 29 日 月曜日

はじめに

自社開発で作ろうとしていた物が実は mod_perl に対応した Web アプリなのですが、そういえば mod_perl ってまともに弄ったこと無かったなぁとか思ったので、風邪も引いて頭も回らないことだし少し脱線するかとばかりに遊んでみました。

世間一般においてはちっともはやらない mod_perl 。かろうじて拾う話題もせいぜい Apache::Registry を用いた既存 CGI の高速化とかその程度の話で、本格的に Perl で Apache モジュールを作ろうみたいな話になると本を買うか英語で情報を探すしかなかったりするのが現状のようです (あるいはおいらの探し方が悪いのかも知れませんが…)。参考にしたのは mod_perl の公式サイトにあるドキュメントでした。

これ全体をぼえ~っと眺めてみても何から手をつければいいのかよくわからないのですが、この辺を見てみるとサンプルを見つけることができたので、これを参考に作ってみることにします。

(さらに…)