2010年4月7日水曜日

グーグルのファイル共有サービスは日本人には難しいか

仕事上の都合で、
取引先の担当者と、グーグルドキュメントの共有を試みました。

結論から言うと、まるでうまく行きませんでした。
「ドキュメントに入れておきましたよ」って言っても
何時のまにか忘れてしまって、
メイルで着信している分から探したいらしいですね。

結局、メイル添付での運用に戻ってしまいました。

日本人は、マイクロソフトが
Outlook Expressをオマケで付けたお陰で、
メイル添付に慣れきっています。
わざわざ、webサイトを開こう、って気はまるでない見たいですね。

#メイル添付ファイルでの運用は、問題点だらけなのですが、
#それに気づかずに、頑張ってしまうケースが殆ど。らしい。
#その証拠に、「○○管理用.xls」って一杯作ってるでしょう?

「Gmailアカウントを持っている」というだけじゃ駄目らしい。
結局、「Gmailを常用してます」って人しか残らない。今のところは。

この辺りを何とかしないことには、日本では中々普及しないでしょう。
それを痛感しました。これはグーグル系に限った話では無いでしょう。

Windows 7から、Outlook Expressの付属を辞めて、
Windows Liveに移行して欲しい感じですが、
日本市場に関して言えば、しばらくは無理に思います。
理由は前述のとおり。

Gmailに慣れた筆者には、微妙なwebサービスでした。
という側面もあったりします。

2010年4月6日火曜日

今更 dropbox を使ってみる

今更試しました。
http://www.dropbox.com/

専用クライアントソフトからしかアカウント登録できなかったりとか、
世間一般に言うwebサービスとは、大幅に毛色が違いますね。

まあ、「FTPもNASも要らないよ!」が売りらしいので、
こういう線で攻めるのはアリなんでしょう。

サイトのダウンロードURLに行くと、
プラットフォームを自動判定して、exeなりdebなりが飛んできます。
#海外のサービスサイトでは、概ね、機種は自動判定ですね。
Windowsで試すことにします。

#何故って、前にubuntuで試そうとしたら、動かなかったので

落ちてきたインストーラを起動すると、
Windowsならスタートメニューにdropboxが入ります。
起動すると、タスクトレイに常駐します。

初回であれば、その場でアカウント作成を要求してきます。
Freeアカウントを選択しました。

さりげなく「共有フォルダ」が開きますが、
見た目は普通のエクスプローラですが、
中身のファイル群には、左下に「同期してますアイコン」が付くようになります。

C:\Documents and Settings\筆者\My Documents\My Dropbox

でした。

共有フォルダの中身アイコン群を、右クリックしてみても、
特に何か、機能が増えてる感はしませんね。
ただ漠然と、ファイルを放り込むだけの様です。

あとは、タスクトレイに常駐している「何か」が
同期を繰り返します。

これであれば、「日常、Windowsな人々」に勧めても
どうにかなるだろうと思います。

次回の案件で試してみようかと思う次第です。

2010年4月5日月曜日

zero-install パッケージ管理システム

前フリです。

ディストリビューション依存というか、
それぞれ標準的なパッケージ管理システムがあるわけですが、
大別して、deb系/rpm系に、2分しちゃってると言ってよいでしょう。

ubuntu, debian apt, dpkg
fedora, redhat rpm, yum

筆者は、redhat系からubuntuに鞍替えしました。本家debianの、debシステムを継承しつつ、openofficeまで入ってたりの充実したパッケージ群。普通にデスクトップOSとして使えます。そうやってディストリビューション配布のパッケージを使う限りはまるで問題はありませんが、そうでない場合に困ることが色々あります。

例えば firefox。本家の最新版は、3.6.2ですが、ubuntu-8.04の標準は、未だに3.0.x系です。ディストリビューションごとアップグレードするのも色々アレです。

ディストリビューションとしては致し方ないことですが、オープンソースのボランディアベースと言えど、配布にはある程度の責任が伴うので無闇に最新バージョンを追いかけるわけには行きません。

しかたがないから、自分で入れるわけですが。

バイナリの*.tgzも配布している製品もありますが、
/opt/ナントカに掘って、シンボリックリンク張って、とか。
別にルートパーティションに入れる必要はないのですが、
ホームに入れるのも気持ち悪かったりとか。

外部の人間が、「ubuntu-○○用」として配布しているリポジトリもありますが、
実際使ってみると、意図しないパッケージ群までドッサリアップグレード掛かったりして、
動かなかったらどうしよう?と結構不安です。


本題です。

linux用の、
ディストリビューション非依存の、パッケージ管理システムとして、
zero-install http://zero-install.sourceforge.net/
と言うものがあります。

もっと有名になっても良いと思います。

日本語説明もあるにはありますが、
記事が古いのと、事情の説明に終始しています。
http://sourceforge.jp/magazine/07/02/21/0133253

端的に言えば、パッケージ名の代わりに、URLを使います。まあURLの正体は、パッケージ定義ファイルな訳ですが、ソフトウエア特定の方法としては悪くないでしょう。
ダウンロード&展開は自動です。展開は、自分のホームディレクトリ .cache/0install.net/ を掘って、その界隈でなんとかしてくれます。気持ち悪い気がしますが、管理はzero-installがやるので実害はありません。

一方、ダウンロード済み&そのディレクトリに展開済みのものは、サラっと起動します。

運用は簡単です。例えば、
0launch http://0install.net/2006/autopackage/Lincity.xml
これだけで、lincityが動きます。root権限も要らないので、気楽っちゃ気楽です。
アップグレードも自動です。xmlファイルの中身の更新が何かしらあれば、「更新しますか?」とは聞かれます。

zero-installの成り立ちは、何がしかのオープンソースソフトウエアの作者が、各ディストリビューションに自分の成果物を入れてほしい時ですね。ところが前述の通り、それぞれディストリビューション毎に流儀が違いすぎて、色々面倒です。ディレクトリ構造しかり。

python gdata のtext_db は、大文字カラム名が使えない

python gdataの、
text_dbは便利なのですが、
いざ、AddRecordしようとすると、大文字キーのデータを省いてしまう。らしい。
#判らなくて泣きそうになりました。

CreateTableで、大文字カラムは作れるので、
まるで無視してるわけではないらしい。のですが。
それが逆に、事態を混乱させてるという。googleサービスにありがち。

あっちこっちソースを追いかけて、結局判らなかったんですが、
atomプロトコル上で、フィールド名にまんまカラム名を使ってるのを発見。
漢字カラム名も通ってる模様。

もしかして?と思って、string.lower()したら通りました。

これで悩んでいるの、筆者だけ?と思って、検索してみたら、
大抵のサンプル実装は、小文字ONLYなので、気づいてない人も結構居るかもですね。

アンダーバーもダメらしい。

pythonでは「大文字変数には特別な意味がある」事になってるらしいので、
無視するのはフツーのことかも知れません。

とりあえず、小文字変換することにしました。

2010年4月4日日曜日

ソースプログラムのバージョン管理 mercurial のススメ(1)

プログラムは、ソースを1文字でも変更すると、
それは別プログラムだ、という位(筆者が言ってるだけですが)
デリケートなものです。

しかし、別エントリでも何度となく申しているように、
人間は間違えるものなので、
修正を繰り返すうちに何時の間にか動かなくなったり、
一つのバグを修正したら、別の機能が動かなくなった、
と言うのも、残念ながら良くあることです。

何処を修正したのかすら思い出せない。のもあり得ます。
「今までで一番マシだった状態」まで遡るのが一番です。

ディレクトリ丸ごとコピーなんてやっては居ると思いますが、
それはバージョン管理ではありません。バックアップです。
そして大抵は、忘れた時に一大事が起こります。
文字通り、ゲームのセーブデータみたいなもんです。

バージョン管理は、やはり専用ツールを使うのが一番です。
今すぐダウンロードしましょう。

結論から言うと、mercurial系が最適です。
プラットフォームを選ばず、
インストーラ一発で全てが揃うからです。


mercurialの競合と言うかライバルとして、gitがよく挙がりますが、
Windowsで、となると、cygwin入れたり面倒臭そう。
「道具」を入れるのに苦労するのは本末転倒です。

普通にオープンソースというと、C/C++で書くのがフツーでしたが、
mercurialは9割以上がpythonなので、
プラットフォーム依存が非常に少ないのでしょう。
と言うかpython本体が頑張ったお陰。移植が簡単。
故に、Windows及びMacOS X用まであったりします。
そういうのって、オープンソースで有名なのは
eclipseとかfirefoxぐらいでしょうか。

筆者がmercurialを知ったのは5年ほど前ですが、
python恐るべし、と思ったものです。
#当時はPHPで仕事してました。

バージョン管理は、必須業務です。
一人でも、ファイル1個でも効果があります。
やらないのは色々無駄です。

本家サイトで、まさしくmercurial自身で、
mercurialのソースを管理している模様。
リポジトリブラウザ機能は、外部からでもイジらせてもらえます。
便利っぽいでしょう?

こっちの方が「便利さ」は解りやすいかな。
バージョン遷移のグラフ表示です。
上はツリーの便利さ(面白さ)を感じてもらうために派手な部分を選んでます。
最新版はこっち
http://selenic.com/repo/hg-stable/graph/

私はlinuxのコマンドラインベースでモリモリ使ってますが、
Windows用では、シェルエクステンションが有るので、
右クリックから使えます。
あー、でも、日本語化は遅れていたと思った。
#って言うか、プログラマなら英語に恐怖感を持っちゃ駄目です。

オフィシャルサイトでもガイドがありますが、
日本語紹介記事もアチコチにあります。
分散バージョン管理論の話まで行っちゃってるので、お得です。

知人に「リリース以前は、バージョン管理は要らない」なんて言ってる人が居ますが、
リリースバージョンと、ソースバージョンの話を混同してますね。
そうだと思いたい。

バージョン管理は、基本的には「今までで一番マシだった状態」な状態を
段階的に記録していくものです。段階は、細かければ細かいほど良いです。

別の派生バージョンに修正を適用したり、がやりやすくなります。

ちなみに、リリースバージョンは、タグ ブランチ として管理すると良いです。

2010年4月3日土曜日

タイムスクープハンター

タイムスクープハンターの2期が始まった。
http://www.nhk.or.jp/timescoop/

この番組は、本質的には時代劇ドキュメンタリーだが、
今までのソレとは、目線が大きく異なってる。

未来のエージェントが、
個人タイムワープにより江戸時代に入り、
手持ちビデオカメラで取材する。
その映像の一部をNHKに提供している、という筋書き。

ドキュメンタリー取材仕立てで、取材しているのが未来人、
取材対象が江戸時代人。と言う訳だ。

どっちも現代俳優で、製作はNHK。それは誰もが承知で見ている。

#これはホラー映画でもよく遣る手法のような気はするが
不安定な手持ち撮影で、映像が生々しく揺れることにより
視聴者に奇妙な臨場感を引き起こす。

それによって、「多重「フィクション」感」を払拭するのに、概ね成功している。

もう世の中の時代劇は、全部この手法でいいんじゃね?
とさえ思わせる。

と、ここまで書いて、そうはいかないことに気がついた。

例えば、水戸黄門は勧善懲悪が売りである。と思う。
見せ場のインローを出すシーン。
「取材班」の実況が入ったらブチ壊しである。
もう一つの売りは、入浴シーン?であったが、
これも「実況」が入ったら別の意味で問題だ。
50過ぎの女優に、色気をやらせてんじゃねえよ。とも思う。
しかし彼女は今期で降板。入浴シーンはどうなるのか?
いや筆者はどうせ見てないが。

pythonは、標準関数を置き換え放題

全くの不可抗力で発見しましたが。

pythonって、"str"を変数として使っても怒られません。
str = ""
通常、「ビルトイン関数str」として使っているモノは、
実は、変数strの中身がcallableだった、というだけなのです。

知る人ぞ知る、かも知れませんが、わざわざこんな事をやる馬鹿は居ません。しかし、筆者はまだpython歴1年なので、勘弁してください。

こうすると復活します。
import __builtin__
str = __buitin__.str

言語のセキュリティとしては、かなり緩いですね。「変数を書き換え」を制限する方法が存在しないので、第3者のモジュールを持ってきて、無改造でもかなり色々出来ます。

例えば、appengineのdjango.utils.simplejsonは、datetimeを受け付けません。not serializableとか言って、例外で落ちます。

しかし、その例外を出してる関数は、呼ばれていきなりraiseしています。オーバーライドしてね。と言わんばかりです。これを外側から書き換えてやれば、datetimeを変換できるようになります。

gistに貼っておきました。
http://gist.github.com/358287

pythonで商用ソフトを作ろうか、と思うと、この辺りで躊躇しますね。メソッド名も全部__dict__で見えちゃいますし。最終的には、難読化しなきゃならんのかと。javascriptがそうである様に。

しかし、デコレータは、この機構を最大限活用しての事なので、pythonでは必要悪と言えるかもしれません。