2009/08/28

OS X Server on VMware Fusion (2)

 うーん。設定はほぼ完了したのですが、(サーバー管理から実施する)Apacheのアップグレードが出来ません。

 1.3から2.2へバージョンアップしてくれるのですが、PowerMac G5でセットアップした時にはエラーは無かったんですよね。検索してみるとそれらしい答えはあるのですが、どうも/etc/apache2/site内の*.confの記述がおかしいとか言ってる様です。

 じゃあ、その中にあるファイル全部移動したらいいじゃん。と言う事で試しましたが、玉砕。その上の/etc/apache2内のものも対象かと思って覗いてみましたが、先に設定完了済みの*.confが大量にあって諦めました(T-T;。

 結局入れ直して、他の設定の前に実行したらすんなり出来ました。こんな時はスナップショットが有効なので、入れ直す時にインストール直後のスナップショットを取っておく事にしました。ロールバックだけでなく、ロールフォワードも出来ると嬉しいんですけどねぇ。


2009/08/27

OS X Server on VMware Fusion (1)

 コスト削減の一環で、Power Mac G5に入っているOS X Serverを移行しようと考えています。工事中はプロジェクトページにつながりにくい事が予想されますが、ご了承ください。

 redmine, subversion, 内部DNS, OpenDirectoryがメインなので、そんなにデータ量も多い訳ではなく負荷も少ないんですよね。データの管理もあるので紛失しない事を優先していましたが、電気代(これが大きい)と天秤にかけて実行する事にしました。

 肝心の内容ですが、VMware Fusion上でMac OS X Server 10.5を運用します。experimental supportって書いてありますが、上手く行けばサーバーごと要らなくなりますので、やってみる価値はありそうです。

 インストールしてみた感じは良さそうなので、続きは後ほど投稿します。


2009/08/26

Qtで言語を作る (3)

 2回目で挙げた必要なライブラリの中に、入れ忘れていたものがありました。それは、
正規表現
プログラムを書いていても触れる機会が無かったりするものです(無くても書けるから)が、知らないとかなりの時間を浪費すると思います。

 例えば、C言語の変数の仕様を正規表現で表してみる事にしましょうか。仕様自体は、

  1. A〜Z a〜z 0〜9 _(アンダースコア)で表現する。
  2. ただし、先頭の文字は、英字またはアンダースコアで始まる。

と書いてありますので、実際に表現してみるとこんな感じになります。

^[A-Za-z_]{1}[A-Za-z0-9_]*$

{1}は要らないとか、もっと簡潔に書けるよぉって言われそうですが、ここは我慢してください。この表現の詳細を見ていきましょう。各表現は次の様に対応します。

  • ^ => 文字の始めに当てはまる。
  • [ ] => 括弧内にある任意の文字に当てはまる。
  • - => (括弧内にて)文字の範囲を表す。[A-Z]は大文字のA〜Z。
  • { } => 前方に現れた正規表現の繰返しを表す。{3}は3回の繰返し。
  • * => 前方に現れた正規表現の0回以上の繰り返し。
  • $ => 文字の終わりに当てはまる。

となります。これを先の仕様に当てはめると、

  1. [A-Za-z0-9_]*
  2. ^[A-Za-z_]{1}

になりますので、それぞれを足して^[A-Za-z_]{1}[A-Za-z0-9_]*$となる訳です。では、どんなケースでの使用が想定されるのでしょうか。Qtのドキュメントには、

  • 検証
  • 検索と置換
  • 文字列の分割

とありますので、検証をしてみましょう。実際のコードはこうなります。

// QStringはunicode文字列を格納出来るクラス
QString s1 = "x_data";
QString s2 = "0_data";
bool b1,b2;

QRegExp e( "^[A-Za-z_]{1}[A-Za-z0-9_]*$" ); // さっきの正規表現
b1 = s1.contains( e ); // 正規表現にマッチするので、true
b2 = s2.contains( e ); // 正規表現にマッチしないので、false

コメントに書いた様に、b1は真でb2は偽になります。これで、その文字列がC言語仕様上の変数に値するかどうか判定出来る様になりました。

 後は、変数やら文字列定数等の条件を決め、言語を実行する前の検証に使えばOKです。これから作る言語は、単語の定義を^[A-Za-z0-9]+[A-Za-z0-9-_]*$にしようと思います。


2009/08/24

Qtで言語を作る (2)

 QtってGUIフレームワークの印象が多いと思うのですが、近代的なものも含めてプログラミングに必要なライブラリは大方揃っています。例をとると、

  • List,Map,Hash,Stack 等のテンプレート
  • マルチスレッド
  • マルチランゲージ
  • XML parser
  • WebKit
  • Model View
  • OpenGL
  • DB
  • プラグイン
  • Signal-Slot機構

等々。Qtのクラスに無いものに関しては、CやC++のライブラリの中から拝借出来るので、まず困らないです。C++である事は好き嫌いが分かれるかもしれませんが、大きいプログラムを書く時には、ある程度の型チェックが早い段階で分かる仕組みの方が私は助かります。

 これらのクラスをベースとしてアプリを開発出来るので、開発者は本来のプログラムに集中する事が出来るというのがQtの長所(の一つ)ですが、更に突っ込んで言語を作ろうというのがこの企画です。

 開発者は本来のプログラムに集中するって書きましたが、これだけ豊富なクラスがあっても、本来のプログラムに集中出来ているとは思えませんでした。これはQtが何かに比べて劣っているのではなく、そもそもの仕組みがマズいんです。高度に抽象化されたクラスを設計しても、実際にはそれを使って手続き型に近いコードも書く訳ですから、まぁつまらない訳です。そういう所をなるべく吸収出来るものにしたいと思っています。

 次回は、言語仕様案について更に踏み込みながら、Qtのクラスの使用方法についても書く予定です。


2009/08/21

Qtで言語を作る (1)

 iTunes Connectでは、まだ"In Review"中のiPhoneアプリですが、それはそれとしてメインプロジェクトを進めなければなりません。

 企画案出しは終わったので、少しずつプログラムを書き始めています。最終目標は、言語を作る事。開発ツールや書籍への追加投資をするだけの費用は無いので、今有るものでなんとかします。

使用するもの
  • 統合開発環境 : Xcode
  • フレームワーク : Qt (LGPL / Free)
  • モデリングツール : JUDE/Professional

 Qtの場合は、Qt Creatorなる統合開発環境も同梱されてくるのですが、今年リリースされたばかりという事で少し物足りないです。デバッガでQt独自のクラスの中身が確認出来たり、ドキュメント(Assistant)が統合されているのは助かるのですが、カラーテーマの設定があまり出来ないので肝心のコード編集時に疲れます。

 ですが、揃っているAPI群は豊富で(Cocoaとは違って)名称が覚えやすく、cross-platform対応ですので成果を多方面で共有出来ます。挙げていると長くなりそうなので、次回からはQtと言語案について少しずつお話ししていこうと思います。


2009/08/17

iPhoneアプリをリリース (1)

 やっとお盆が終わりました、更新も出来ずに申し訳ないです。。来客が多かったり逆に行かなければならなかったりで、なかなかプログラミングがはかどらないものです。

 とは言うものの、人が沢山居るのであればデバックをしてもらうのには最適ですよね。折角なので、作ったiPhoneアプリを何人かに試してもらいました。

 反応を見る限りは、とりあえずリリースしても大丈夫そうと判断したので、先程iTunes Connectで申請をしました。申請が通ったら(通ると思いますが)改めてご案内します。

 あれ、いつの間にかPay-PalでAmerican Expressが使える様になってますね。念願のVersionsが購入出来そう(^^/。

2009/08/12

SyncMaster LD220G (3)



 ...と言う訳で、トリプルモニタ構成にしてから1週間経ちました。最初のうちは、ブラウザでスクロール中に(OSごと)クラッシュして大変だったのですが、1.1.3 Betaを使えば快適です。

DisplayLink : Mac OS X Drivers

 リリースノートにも書いてある通り、3Dアクセラレーションに対応していないので注意が必要です。Beta版でなくとも3D関係はあまり期待しない方が良いですが、今後のアップデートに期待ですね。

 また、アクティビティモニタの画像を添付しましたが、動画再生をするとDisplayLinkManagの負荷が高くなります。MacBook Proのファンが回りっぱなしになるので、負荷の大きいコンテンツは本体側のモニタで再生する方が良さそうです。コレ位の制約はあるものの、

  • 左にXcode製品ドキュメント
  • 中央にXcode(ソースコード)
  • 右にInterface Builderやオーガナイザ

の配置で贅沢に開発出来ますので、ありがたいの一言です。
Powered By Blogger