結城浩のはてな日記 – 『増補改訂版Java言語で学ぶデザインパターン入門』無料プレゼントより
日ごろの感謝を込めて、『増補改訂版Java言語で学ぶデザインパターン入門』を無料プレゼントいたします。
とのことで著者の結城先生ご自身によるプレゼント企画に応募させていただきます。会社のデザパタ本と併せて、知識の増強をはかりたいと思います。
結城浩のはてな日記 – 『増補改訂版Java言語で学ぶデザインパターン入門』無料プレゼントより
日ごろの感謝を込めて、『増補改訂版Java言語で学ぶデザインパターン入門』を無料プレゼントいたします。
とのことで著者の結城先生ご自身によるプレゼント企画に応募させていただきます。会社のデザパタ本と併せて、知識の増強をはかりたいと思います。
「圏外からのひとこと」の essa さんが Ajax な ToolTip スクリプトを作成/公開。
このスクリプトを利用するとリンクにカーソルを合わせた時に、del.icio.us や MM/Memo、はてなブックマークといったブックマークサービスからブックマーク件数を取得して ToolTip 表示。クリックすると各サービスの該当 URL ページへ飛べる。
下記の本館で実際の動作を見ることができる。タイトル下の「ToolTip有効」チェックをONにすると動作する。
おもしろい。
今日は寝不足と疲労のおかげで集中力がアレなので、ちょっと開発環境の整備なんぞをしてみた。
某組み込み機器クロス開発環境を Windows + Cygwin(GCC) で構築しているが、やっぱり効率が悪いので Eclipse 3.1 を使ってみることに。ずいぶん前にちょっと試したときは PC もヘタレだったので激しく動作が重くて使う気になれなかったが、新しいノート PC で動かしてみたら起動は遅かったもののそこそこ快適。CDT を入れて環境変数を良きに計らったら無事ビルド成功。GDBでのデバッグもできる。
Subversion 用のプラグインである subclipse もあるし、これはいいかもしれない。
で、イジイジしていると欲が出てきて Java 環境と連携して利用できる EclipseUML Free Edition プラグインや、Perl のプラグインである EPIC を入れてみた。
Eclipse UML の方は、クラスダイアグラムと Java のソースコードが自動的に同期するという優れモノ。
EPIC は CGI のデバッグまでできちゃうらしい。ただ現時点での stable バージョンである 0.3.0 では、Cygwin の Apache + Perl でやってみたけど「CGI-Proxy へ接続できません」とかなんとか出てうまくいかなかった。もちろん Perl の PadWalker モジュールはインストール済み。フォーラムなどを見たがトラブル・シュートできず、testing にあった 0.3.12 に上げたら接続はできるようになったものの、Debug configuration の設定が悪いのかうまく cgi がリクエストされない。
結局デバッグはできなかったけど、強力な開発環境であることは確か。RegExp とか便利。
ちなみにエディタの設定でEUCがドロップダウンリストに出てこないから、デフォルトでは対応してないのかと思っていたら、そのまま「EUC-JP」と打ち込めば EUC が使える模様。
【参考URL】
ローカルのリポジトリにしかアクセスしないのであればあまり関係ないかもしれませんが、ネットワーク上のリポジトリにアクセスする必要がある場合には svn をそのまま使うよりも svk を使った方が便利。Win32 版のバイナリも配布されています。
svk はローカルにリポジトリのミラーを作ってくれるので、ネットワークに繋げない間も commit や diff 等の操作を行うことができます。で、ネットワークに繋がったときにミラー元のリポジトリへ反映、なんてことができます。なのでノートで作業しているときには非常にありがたい。例えば
$svk cp http://hoge.com/svn/foo/bar/trunk
とかやると、ローカル(デフォルトでは //mirror/bar-trunk)にミラーを作成し、ローカル作業用にブランチ(デフォルトでは //bar-trunk)を切ってくれます。そのあとで
$svk co //bar-trunk bar
とかやってローカルブランチからチェックアウトし、作業します。あとは svn 同様、svk diff とか svk commit などのコマンドを使って作業していきます。
ミラー元の変更内容をローカルに反映させるには、Workingcopy ディレクトリ内で
$svk pull
とします。複数人数で開発しているときに trunk を追いかけながら修正作業を行うときには定期的に実行する必要があるでしょう。また、ローカルでコミットした内容をミラー元に反映するときには、
$svk push
としますが、デフォルトではログメッセージに次のような感じのヘッダが送られてしまいます。
r22@hostname: username | 2005-09-09 15:50:09 +0900
これを送らないようにするには、「–verbatim」オプションを付ければ大丈夫です。
さらに、ローカルへの複数コミットをまとめて一つのコミットとしてミラー元に反映したい場合には、「–lump」または「-l」オプションを付ければできます。
こまめにコミットしておいて、ミラー元のリポジトリをあまり汚したくないといった場合には便利でしょう。
気になったのは svn や TortoriseSVN との併用ですが、もちろん別個に使う場合にはまったく問題ありません。が、svk と絡めて利用するには若干注意する必要があります。
例えば svk でチェックアウトしたディレクトリは、svk の管理下にあります。したがって、そこで svn commit とかやっても当然コミットできません。もちろん TortoiseSVN を利用しても同じです。
なので、僕は次のように使ってみています。
Subversion リポジトリのルートは、svk で管理される DB ディレクトリ(デフォルトでは 「C:Documents and Settings\username\.svk」)の下の「local」というディレクトリになっています。
「svk cp」コマンドでミラー&ブランチした後、「file:///」でそこに作成されたブランチ(//mirror/ではない方)を指定して、svk を使わずに svn もしくは TortoiseSVN を使ってチェックアウトします。
例えば
$svn co file:///C:/Documents and Settings/username/.svk/local/bar-trunk
といった感じ。で、commit などのリポジトリへの操作は svn もしくは TortoiseSVN で行います。
そして push や pull を行う場合には、
$svk [push|pull] //bar-trunk
って感じで。今のところ、これで特に問題は起きてません。
【URL】
リポジトリに登録したら、変更するためにはチェックアウトを行います。
チェックアウトとは、自分の編集用ディレクトリに取得してくるといった操作になります。この編集用ディレクトリのことを Subversion では Workingcopy と呼んでいます。CVS では Workingset、MKSSI では Sandbox などと呼ばれていたものです。
とりあえず、以前リポジトリに追加した自分のWebサイトを編集してみます。
まず、チェックアウトするために
$cd ~
$svn co file:///home/hoge/svn/website/trunk ./website-trunk
とします。すると
A website-trunk/index.html
・
・
・
Checked out revision 1.
などのように表示され、~/website-trunk というディレクトリ以下にファイル群が格納されます。とりあえず新規ファイルを作成して追加してみましょう。
リポジトリに新しいファイルを追加するには、svn add コマンドを利用します。
$cd ~/website-trunk
$echo “This is my web site.” > README
$svn add README
これでリポジトリに追加されましたが、「svn list」としてみれば解るとおり、まだリポジトリには反映されていません。あくまでも Workingcopy で追加されただけです。この変更をリポジトリに反映させるには、コミットする必要があります。
$svn commit
もしくは
$svn commit README
として、Workingcopy の変更をリポジトリへコミットします。すると、
Adding README
Transmitting file data.
Commited revision 2.
となり、リビジョンが 1 -> 2 に上がります。これでリポジトリに反映できました。
既存のファイル内容の修正については、とりあえず先ほど追加した README を エディタで修正してみましょう。「This is my web site.」を、「This is hoge’s web site.」に変更して保存します。
そこで
$svn diff
とすると、
Index: README
=======================
—README (revision 2)
+++README (working copy)
@@ -1 +1 @@
-This is my web site.
+This is hoge’s web site.
と変更点が表示されます。この内容を確認して、先ほど同様「svn commit」すればリポジトリに反映されされます。
とりあえず、自分のための備忘録と某友人への紹介も兼ねた簡単な解説はこの辺で終了。
【参考URL】
とりあえず練習用として、自分のホームにリポジトリを作成してみます。
$cd ~
$mkdir svn
$svnadmin create svn
これで「~/svn」というディレクトリにリポジトリが作成されました。適宜、~/svn/conf/svnserve.conf を編集し、権限などを設定します。この設定内容に関してはとりあえず今回は詳述しません。特に何も設定しなくても、そのまま動くと思います。(無責任)
このリポジトリを利用して、~/public_html/ 以下にある自分の Web サイトを管理してみましょう。まず、リポジトリにファイル群を追加する必要があります。例えばユーザ名が「hoge」だった場合、
$svn import ~/public_html file:///home/hoge/svn/website/trunk
これで、
Adding public_html/index.html
・
・
・Commited revision 1.
などと、public_html 以下のファイルが追加されます。サブディレクトリも再帰的に追加してくれます。「file:///home/hoge/svn/」がリポジトリのルート、その後に続く「website/trunk」は、リポジトリ内のフォルダになり、import 時に自動的に作成されます。
ちなみに Subversion でのリポジトリ構成としては
projectname/ | branches/ |
tags/ | |
trunk/ |
というものが推奨されています。どんどん開発作業がなされていく場所が trunk、ブランチは branches、タグは tags に作成するわけです。
さて、import が済みましたが、これで public_html 以下が Subversion 管理下に置かれたというわけではありません。 import は単純に、リポジトリへ追加するだけです。
とりあえず、リポジトリを見てみましょう。
$svn list file:///home/hoge/svn/
とやれば、
website/
が表示され、
$svn list file:///home/hoge/svn/website/trunk
とすれば、追加したファイルがリストされます。
とりあえず、スタンドアロン環境で個人的に利用するには、Subversionの公式サイトから各プラットフォーム向けバイナリをダウンロードしてインストールするのみ。
Win32 であれば、Explorer 拡張として利用可能な TortoiseSVN の方がお勧めです。
Vine Linux や Debian であれば、
#apt-get install subversion
でインストールできると思います。
Subversionを利用するために、まずリポジトリを作ってみましょう。リポジトリとは1つの管理単位で、Subversionの場合はツリー構造での管理となっています。
#svnadmin create /usr/local/svn/repos
とすれば指定したディレクトリにリポジトリが作成できます。デフォルトではバックエンドとして BerkeleyDB が利用されますが、Subversion1.1 以降であれば、このときに
–fs-type fsfs
オプションを付加することで Native Filesystem としてリポジトリを構成可能です。
svn コマンドなどを利用する場合、上で作成したローカルのリポジトリを指定するには
file:///usr/local/svn/repos
あるいは
file://localhost/usr/local/svn/repos
となります。また、Windows の場合、C:\SVN\REPOS にリポジトリが作成されていれば、
file:///C:/SVN/REPOS
と指定します。
SCM(Software Configuration Management)システムとして、Subversion を使い始めました。
今まで仕事では、RCS -> RCS ベースのGUI製品 -> Microsoft Visual Source Safe(VSS) と使ってきました。6 年間くらいはチーム開発が主だったので、組織的に検討して導入してきたものを使っていた、と言う感じです。
その後は殆ど 1人で担当するプロジェクトが多かったのですが、しばらくは Windows 関係のみだったために使い慣れている方がよいということで VSS で管理していました。ですが最近は色々と手を出しているので、VSS だと困る場合も多いわけです。
一番大きな問題はやっぱり、Windows からしか操作ができないこと。
それから RCS や VSS のデフォルト動作である「ロック方式」の管理は、個人で利用するのには適しません。ロック方式とマージ方式については、チーム開発であれば賛否両論あると思いますが、個人やスタンドアロン環境のみに限定した場合、ロック方式についてメリットを見出すことができません。煩わしいだけ。
そんなわけで一時期 CVS を導入しようかとも考えたのですが、色々あって躊躇してました。で、結局どうせ今から導入するなら Subversion で、ということにしたわけです。
とりあえず Vine Linux マシンにsvnサーバを立てて試運転。細かい内容については今後、徐々にエントリーしたいとおもいます。
【参考URL】
今まで避けて通ってきた Macromedia Flash を仕事で使ってみることになり、ここ数日大変。
Flash全般のリファレンス本と、Actionスクリプトのリファレンス、それにスクリプトサンプル集の3冊を購入し、格闘中です。月曜から始めたのですが、なかなか思ったように作成できません。
要件で外部ファイル(Jpeg)を読む必要があるのですが、やはり MovieClip.loadMovie() 直後にサイズ変更しようとしてハマりました。
例えば
mc.loadMovie("img.jpg"); mc._width = 100; mc._height = 100;
などとしても、オリジナル画像サイズになってしまう。で、トレースしてみるとどうやらloadMovie()では非同期にロード処理が行われるようで、メソッド呼び出し直後だと無意味なのではないかと憶測。リファレンスを調べてみると
ムービークリップがMovieClip.loadVariables()またはMovieClip.loadMovie()の呼び出しからデータを受け取ったときに呼び出されます
という onData ハンドラがあったので
mc.onData = function() { mc._width = 100; mc._height = 100; }
としてみました。でも、ハンドラは一向に呼ばれない。これで大分時間を費やしてしまいました。
ネットを色々調べてみると、loadMovie完了で一部のプロパティーやユーザー定義のハンドラは、クリアされてしまうようなのですね。
【参考】F-site : 意外と使えないMovieClip.onData
上の記事を参考にして、onClipEvent(data) をハンドリングしてやることでうまく行きました。
他にも色々と癖があって悩ましいですね。ちなみにオーサリングツールとしては Flash MX を利用しています。