開発は主にWindowsXPでやっている。1人でやっているので、自分用リビジョン管理にSubversionを使ってきた。TortoiseSVNはとても使いやすい。

でも客先でネットワークにつなげない環境の場合のことを考えると、レポジトリをローカルに入れとくしかなくて、そういう場合にはMercurialやGitみたいな分散レポジトリの方がいいみたいだ。どっちがいいのかについてはいくつか記事があるけど、あまり決定的な情報は無いので両方入れてみることにした。

MercurialGUIにはTortoiseHg、GitにはmsysgitというWindows版Gitの中に入ってるgit-guiがある。TortoiseHgのインストールは全然問題ないが、git-guiの方は日本語カタログの記述に問題があるようで、エラーになっていた。それを修正したら動いた。

修正したのは以下のファイル

c:/msysgit/share/git-gui/lib/msgs/ja.msg

$を探して\$に置換すればよい。

まあ、どう見てもgit-guiはしょぼい。当然Explorerとの統合なんてありえない。
コンソールから使うとしても、普通のコマンドプロンプトからでは扱えないし。

TortoiseGitがでたら使うかもしれない。

tcl sqlite3 version 3.5.1

ActiveTcl8.4の最新版8.4.18.0が出てたので、インストールしたら動かなくなった。
XOSqlのせいみたいだけど、解決法が分からないので、元に戻した。
いまさらながら、sqlite3しか使えないんだったら、最初からXOSqlなんか使わなきゃよかったかも。
まあevalみたいなのしか使ってないから何とかなるか。

sqlite3 version 3.5.6, teacup

sqlite3 version 3.5.1に問題があったみたいで、XOSqlには問題なかった。作者の人ごめんなさい。

ところで、teacupってべんりですね。yum や gem と同じような感じでパッケージ管理できる。

teacup search sqlite3; # パッケージリストの取得
teacup install sqlite3; # 最新版の取得
teacup install sqlite3 -exact 3.5.1; # バージョンを指定して取得
teacup remove sqlite3; # パッケージを削除(複数のバージョンがあっても全部削除してくれる)

Tcl版ActiveRecordのその後

あれから8ヶ月が過ぎたんですな。早いものです。

世の中にTcl版ActiveRecordが出てくる兆しはなかったので、結局自分で作ってみました。オリジナルのTclはオブジェクト指向言語ではないんですが、ActiveRecordRubyと同じように作るには、少なくともクラスメソッドとインスタンスメソッドを使えるオブジェクト指向拡張が必要だろうと思ったので、限りなくRubyに近いことが出来るTclの拡張であるXOTclを使うことにし、データベースへの接続も、XOSql拡張というのを使うことにした。

Railsは膨大なソースからなっていて、ActiveRecordだけでも途方にくれるので、実際にはほとんど使わないような機能は無視することにした。とはいえ、method_missingを利用したfind_all_by_group_id_and_category_idみたいな、デバッグのとき意外ほとんど使わないと思うんだけど、TclだってRubyみたいなことはできるんだぞってことを証明するために、一応作ってみた。

SELECTの結果をオブジェクトのプロパティにマッピングする機能
execute_sql {sql}
find_by_sql {sql}
Rubyに負けたくなくてつくった機能
method_missingを利用したfind_by*, find_all_by*
belongs_to, has_one, has_many
Group.usersなどの関連したレコードを取得するメソッドが使えるようになる機能。
save(INSERT, UPDATEの自動選択), delete
TclのArrayを使って、find_by_sqlSQL文をばらばらに作って後で組み立てる機能。

set sql(select) *
set sql(from) users
set sql(where) "name = 'Taro' and mail = 'taro@abc.jp'"

XOTclはfake namespaceでプロパティの参照・代入が直接できる。

set user [ActiveRecord::User find_by_name "太郎"]
$user set property(mail) "taro@abc.jp"; # varchar型のカラムなので、自動でクオートする。
$user array set property {
  mail "taro@abc.jp"
  age   27
}
$user save
$user destroy; # GCないから。

XOTclより前から存在してる有名な拡張、[incr Tcl]では、パブリック変数を使ってもプロパティを普通の変数と同じように代入、参照することができない。動的にメソッドを追加できないので、アクセサというのも難しい。データベースのカラムごとにアクセサを定義するなんて面倒臭すぎる。

そして、実際に今まで自分が作ってきたプログラムの「データソースをCSVファイルからデータベースに移行しようプロジェクト」に使ってみた。

とりあえず今のところMySQLとSQLite3でためしてみた。SQLite3ならBLOBを含めて必要な機能は使えるということが分かった。XOSql自体はPostgreSQL(pgtcl)とかにも対応してるので、他のものでもいけるんじゃなかろうか。MySQLはどうも日本語の処理がうまくいかない。

セキュリティとか全く考慮してないので(もしかするとライブラリが勝手にやってくれてるのかもしれんけど。)少なくともRailsのようにWebで使うのは危険だと思う。

ちなみに当初はBLOBが必要になる予定だった。それで対応したんだけどえらい大変だった。SQLite3のライブラリは出来が良くて、生のバイナリデータを直接送る方法が提供されていた。通常Tclはバイナリデータを文字列として展開する際に、たとえば「;」とかが混じってると、行の終わりだと思ってしまい、エラーになる。tclsqliteはCレベルでTclの変数を見ていて、$fileとかの変数を展開しないで送ってくれるらしい(あまりよく理解してないので適当な説明です)生のバイナリがダメでもBase64で文字列にしてしまえば同じことができるらしい。

キーワード検索

JavaScriptの開発ツールを探していたんだけど、ブラウザから独立してるのって、Aptanaくらいしかましなのが見つからない。
こういう発展途上の分野を調べるとき、まだ有名じゃないけど優れた競合を調べるのに、検索エンジンでは結構大変。
たとえば「javascript ide」で調べると、JSideとかAptanaとかFirebugが引っかかる。現時点で一番有名だからだろうけど、これに不満で他のが調べたい場合、単純に「javascript ide -jside -aptana -firebug」とやればいい気がする。が、普通は競合が豊富にある分野では、本家サイト以外のブログなんかでは、必ず比較するための文章が入っているので、ほしいページまで一緒に除外対象になってしまう。
なんかうまい方法はないんだろうか。

社内ブログについて思ったこと

最近Vmwareにはまっていて、どんどんVMを作っていくうちにハードディスクがいっぱいになってしまった。
ところで最近うちの社長がサイボウズブログに興味を持っているようなので、ためしにWindows2000ServerのVMサイボウズブログの試用版を入れてみた。マニュアルどおりにやれば簡単にインストールできた。うちの会社では前からグループウェアサイボウズを使っているけど、同様に設定がものすごくわかりやすかった。というか、やることといえばユーザの追加とカテゴリの登録くらいだ。
使い勝手としてはmixiみたいなSNSに近いように思った。人の書いた記事が新着記事リストにでてくるとか、各人のたてたテーマがカテゴリ別に探せるとかいう感じで、簡単に記事を見つけられる。ブログなのでトラックバックやコメント機能もある。投稿をメールで通知したり、必要なら承認機能も利用できる。管理者しかカテゴリを増やせないという会社ならではの制約みたいなものはあるけど、ユーザはカテゴリの下に自由にテーマを追加していけるので、「その他のカテゴリ」なんて作ろうものなら、事実上制約なしの運用もできる。

それはさておき、「社内ブログ」という言葉に何となく違和感を感じるのは僕だけだろうか?いわゆる普通のブログとはどう違うのか。ブログと言っちゃっていいのだろうか?

普通のブログはいわば大きな町の一軒家みたいなもので、近くの人か、検索エンジンから来た極めて話題に関心のある人を核にして、トラックバックやコメントによって周囲とつながりを持つ。ブログの話題によってはまったく人目に触れないものもある。自分が所帯主であるということから、掲示板よりは責任を伴うけれども、読み手との強い相互作用がないので、書き手が中心になる。

社内ブログは、知っている人に見られるもので、どこにどんな記事があるかがガラス張りになっている。閉じた社会である。確実に人目に触れる。自分の書いた記事が周囲に影響しない保証がない。普通のブログよりも、読み手との相互作用による影響が強い。

この違いを肯定的にとらえるか、否定的にとらえるかで、社内ブログの行く末はきまるだろう。
うちの会社はどうなることだろうか。

導入から半年以上たったサイボウズブログだけど、あまりはやらなかった。

というか、入れた当初は導入が簡単だって事でうれしかったけど、
実際使い勝手が悪いですわ、これは。
新しい記事やコメントがメールでくるんだけど、誰が書いたのか分からんし、
記事数が少ないからがんばればたどり着けるけど、自然に見つける機能が欠如している。ほかにもいろいろあるけど。