« 2006年2月 | トップページ | 2006年4月 »

2006/03/31

[Web application, Ajax] ajaxSketch is available!

まずは、先週紹介した ajaxWrite の反応についての Michael Robertson の一言。

Over the last 6 days, more than 500,000 documents have been created with ajaxWrite, including a report on William Shakespeare written by my son for a grade school assignment. I'm confident that the launch of ajaxWrite was the biggest in history for a new word processor. If you haven't tried it yet or didn't have a satisfying experience last week, I encourage you to try it now. Visit ajaxWrite.com and click the ajaxWrite icon.

6日間で 50万ドキュメントだから、1日で 80000個 を超えるドキュメントが ajaxWrite で作成されているようだ。これに対して Michael は「ワープロソフトの歴史に残る一歩を踏み出せた」としている。また、バグ修正なども行われたようで、先週使ってみて満足できなかったユーザももう一度使ってみてほしいとコメントしている。
しかし、バグを確認した操作を再度行ってみたのだが相変わらず io エラーが表示された。まぁ、[Save As] を選択すればいいことなので、どこでもどの OS でも無料で使えるという利点のほうが大きいと思える。

ajaxSketch ajaxSketch
さて、先週予告されていたように、また新しいサービスが公開された。 Michael は ajaxSketch についてこんなコメントを出している。

As promised we're announcing a new product each week on ajaxLaunch.com. This week we're unveiling ajaxSketch. It's an object-oriented drawing program suitable for creating flow charts, org charts, simple diagrams, maps, etc. ajaxSketch can open, edit and save files in SVG, an open standard graphic format, making it compatible with Adobe Illustrator, Microsoft Visio, Open Office Draw, Corel Draw, Inkscape, and many others, all of which support SVG. Additionally, there are growing archives of SVG documents with liberal-use licenses, such as OpenClipArt.org. ajaxSketch today doesn't compare with the more mature drawing programs, but it does provide basic object design and text tools and serves as a quick way to examine and edit existing SVG documents.

これは Illustrator, Visio, OpenOffice Draw, CorelDraw などと互換性がある SVG ファイルを作成できる vector draw を提供するサービスらしい。まだこれらの成熟したアプリに匹敵する機能はなく、基本的な機能を提供するに留まっているらしい。なお、ajaxSketch も実行するためには Firefox を使ってサイトにアクセスする必要がある。

実際に使ってみたものの、なぜか作成したオブジェクトの削除ができなかった。文字を入力したり、図形を描いてから [Delete] を押してもさっぱり反応してくれない。ついでに、[Ctrl]+[x] や [Ctrl]+[p] なども試したのだが正常に動作してくれなかった。 [Ctrl]+[p] は「このページは印刷できない」といわれてしまった(笑
さらに、ダイアログが出ていないときに [Backspace] を押すとスタートアップ画面 ( というかスタートアップページ ) に戻ってしまう。

ajaxSketch が Visio や Illsutrator の代わりになるのかといわれると、首を傾げざるを得ない。ajaxSketch と引き合いに出されているアプリケーションが提供する user experience の間にはとても大きな差がある。現段階 ( 2006.03.31 18:30 現在 ) では ajaxSketch を Visio などの代わりに使うのはかなり厳しいと思う。

ajaxWrite が素晴らしかっただけに、今回の ajaxSketch の使い勝手の悪さは残念。今後の改良に期待したいと思います。

コメントの最後に、ajaxWrite と ajaxSketch について Michael は次のように述べています。

Together ajaxWrite and ajaxSketch show the world what is possible. Software can be a low cost or free service available to everyone on any computer platform, loaded instantly when you want it with no hassle. Exciting, ain't it?

Michael は来週の水曜日にも新しいサービスを公開するとしており、この世界の可能性はまだまだありそう。来週が楽しみです。

2006.03.31 20:20 追記
[Ctrl]+[p] による印刷は正常にできるようになっていました。
[Ctrl]+[x] と [Ctrl]+[v] をつかったカットアンドペーストはまだできないみたい。

2006.04.01 追記< /br> サイボウズ研究所の秋元氏のブログで次のように紹介されてる。

Windows にはペイントはあるけどドローツールは標準でついてこないので、Windows (と無料の FireFox)さえあれば図が描けることはいいことだ。めったに図を描いたりしない人がたまに描くにはこれで済んでしまうのかもしれない。
なるほど、納得。
たしかに Windows には draw タイプのグラフィックエディタがない。それに、SVG ファイルを閲覧できるツールも 標準では付属していないから、Firefox さえあれば SVG ファイルが開けて簡単な操作もできるこのサービスは やっぱりすごいのかもしれない。

| | コメント (0) | トラックバック (0)

2006/03/24

[Web application] ajaxWrite

少し前に Writely という Web ベースのワープロサービスが Google に買収されたことで話題になった。Office ソフトも Web ベースへ移行する流れがあるようだ。今回紹介する ajaxWrite もそのひとつ。

まずはスクリーンショット。
ajaxWrite
ajaxWrite にアクセスして、右上にある ajaxWrite というタグをクリックすると Microsoft Word 風のエディタウィンドウが開いて、welcome.doc ファイルが表示される。前半部分は「( Microsoft Office は高すぎるんだ!) わたしたちの Web アプリはフリーだけどこんなことができるよ」ということが書いてある。その後に ajaxWrite のメリットを上げている。それは次の6つだそうな。

  • 6 秒程度で起動できる
  • Microsoft の doc ファイルを開けるし編集もできる
  • ajaxwrite.com にアクセスできるならどこからでも使うことできる
  • 400KB 以下と小さいので、ちょっと遅いコンピュータでも軽快に動く
  • アップデートなんてしなくても常に最新版が使える
  • 無料だ
  • Mac, Windows, Linux どの OS でも使える

ささっとなでてみたところ、メニューはシンプルで、機能も本家に比べると少なく見えたのだが使うと思われる機能はそろっていると感じた。むしろ、初めて起動したときから邪魔で仕方なかったイルカ ( いろいろとポップアップしてくださる MS-Office 自称ヘルパーのあれ。もちろん今ではインストールすらしない ) がいないことに好感が持てる。メニューもツールボタンもすっきりしていてこれまた使いやすい。

作ったファイルは Web に保存するのではなく、自分の PC に保存することになる。保存するときは PDF 形式、Microsoft Word 形式 ( doc ファイル) 、 RTF ( リッチテキストフォーマット ), プレーンテキストのなかからファイル形式を選べる。ファイル形式を選択した後に表示されるダイアログで「ディスクに保存する」を選べば保存が完了する。Windows で Firefox が初期設定のままならデスクトップにファイルが作成されていると思う。

なお、保存する際に ctrl + S の、いわゆる上書き保存を選ぶとなぜか I/O エラーになった。 I/O エラーが出てしまうときはFile メニューから "Save As" を選べば保存できるみたい。

Microsoft Word はかなり高価で、インストールできる台数も限られている。一方でajaxWrite は軽快でシンプルで、無料で Firefox さえあればどこでも使える。マクロなど複雑な機能は使わないけど doc ファイルを作らなきゃいけないユーザはこちらを使うことをお勧めする。また、Microsoft Word ユーザであっても、出張先などでドキュメントを作成しなくてはいけないんだけど Word がないというときのために Bookmark しておいてはいかがだろうか?

追記
Google の Writely も試したいと思うものの、こちらはアカウントの作成が必要で、それには招待が必要な模様。ああ、残念。招待してもいいよという方がおられましたらご連絡ください m(_ _)m

2006.03.31 追記
welcome.doc に書かれている内容に合わせて修正。
また、ファイルの保存に関するバグを修正したとあるものの、その修正は確認できなかった。相変わらず I/O エラーが表示される(;´Д`)

| | コメント (0) | トラックバック (0)

2006/03/23

[Programming] Keep sourcecode simple and stupid !

いきなりだが、次の2つのコードを見てほしい。動作は両方とも同じものだが、前者は一行で、後者は4行で書かれている。

rtn_list = [ x+y for x in int_seq1 for y in int_seq2 ]
rtn_list = []
for x in int_seq1:
	for y in int_seq2:
		rtn_list.append( x + y )

さて、どちらが読みやすいだろうか?ロジックを理解しやすいのはどちらだろうか?
わたしは後者のほうが理解しやすいと思う。

わたしは、プログラムは次の原則を守るべきだと思う。

"Keep it simple and stupid!"

よく、読みにくいコードを書く理由として「パフォーマンスが高くなるから」といわれるけど、メモリ1MB が普通だった時代ならともかくとして、個人向けのコンピュータですら 3GHz で動作する CPU が使われていてメモリも 512MB 搭載されているような今では、実行速度の差はなんてほんの僅か。

体感できないような差ならば、開発者の視点から見て、見やすくて理解しやすいコードを書いたほうがいい。理解しづらいコードは作っているときにバグを入れてしまう可能性が高くなるし、バグが見つかったときの修正がとても困難になる。チームで開発することを困難にする。機能を拡張することになったとしても誰もやりたがらないものだよ。

ユーザから見ても、多少早くてバグがあるソフトよりも、そこそこの速さでも安定していてより便利な方向へどんどん進化していくソフトのほうを使いたいと考えるんじゃないかな。少なくともわたしはそうだ。

読みにくいコードをがんばって書いたとしても、得られるメリットはその場しのぎのちょっとしたものだ。読みやすくて理解しやすいコードは、ユーザと開発者の両方にとてもたくさんのメリットをもたらしてくれる。

Explicit is better than implicit.
Simple is better than complex.
Readability counts.

I think so.

| | コメント (0) | トラックバック (0)

2006/03/22

IT企業の超階層化構造

Reference
ソフトウェアの仕様書は料理のレシピに似ている

とても鋭い指摘だと思う。そして、残念なことに、satoshi氏が知っているときよりも 現在の状況はさらに悪化していると思う。上記のエントリに書かれていることが、 まさしくわたしが前の会社をやめた理由。

わたしが派遣された全ての会社で共通していることは、 プログラマは「コードジェネレータ」でしかないということ。 つまり、上流過程を担当している人がつくった詳細設計書や指示の通りにコードを書く存在であって、 自分で考えて物を作ることが禁じられているだ。こんなんじゃ、プログラミングを楽しいと 思えるはずがない。また、最初に作られた設計が正しいという保証はどこにもない。

satoshi 氏も指摘していることなのですが、わたしの経験では、実際にコードを書いていく最中で 設計上の誤り ( エラートラップに落ちがあったとか ) や改善点に気付くことが多々ある。 仕様書や設計書はコードを書いていく中で適切にアップデートされるものだと思う。 ( Joel on Software のエントリにもそう書いてありますね。)

しかし、それが禁止されているのが実際の職場。さらに、実際にコードを書いたことがない人が 設計をしていたとなれば、当然のことながら後半になって欠陥が顕になり、プロジェクトは 火を噴くことになります。

プログラマはコードを書くことだけが好きなのではなくて、プログラムを創る一連の流れ 全てがすきなのだ。特に、スパイラル型の開発方法をとるプログラマにとってはどの工程も 切り離すことはできない。

「お前たちは上から渡された設計どおりにコードを書けばいい。責任は上にあるから」 とはわたしたちが職場でよく言われたことだ。しかし、これもまたプログラマのやる気を そぐか、怠惰心を刺激するかのどちらかになってしまう。人間は、自分に責任がある仕事にこそ 真剣に取り組み、出来上がったときに喜びをもてるのではないだろうか?
その機会を取り上げられてしまったらいい仕事なんてできないよ。

とはいえ、「責任を持たせる」ことがテスタが要らない理由にはならないけどね。
なぜならば、人間誰しも心のどこかに「自分の作ったものにエラーはないんじゃない?」 という慢心があるから。これは意識していても、していなくても誰にでもあると思う。 たいした技量がないと自覚しているわたしでも、指摘されて初めて気付くエラーがたくさんあるから、 やっぱり慢心があるんだろう。それに、プログラマが行うテストは自分の書いたコードが 正しく動くかどうかに偏りやすい。そう、主観的な視点からしかテストが行えないんだよ。 そして、テスタにテストをしていただくもっとも大きな理由は、プログラマの慢心が見逃してしまうような エラーを見つけてもらうことだ。

「プログラムを書く」「詳細仕様書を書く」に加えて、「書いたコードのテストをする」ことを開発者が行うことが全体の開発効率を上げることにも、開発者のモチベーションを上げることにもつながると思っています。開発者は、「動いた」ことに満足するだけでなく「すべてのケースで問題がない」ことを喜びとしたいしするべきです
とは同エントリのコメントにあった言葉だけど、多くのプログラマはこういうものだと思う。 そして、責任ある仕事を担当できたときに真剣に働いて、達成できたときに喜ぶんじゃないかな?

客という視点から見ても、責任がないからとてきとーに流してしまうようなプログラマが 仕事をしているような会社に委託するよりも、自分が頼んだ仕事を全てのメンバーが責任を持って胸を張って取り組んでくれるところに委託したいと思うに違いない。

レストランのシェフが自ら料理をしたり、下っ端の料理人の作ったスープの味見をするとの同じである。もちろん、レストランに行く側の立場になってみれば、そんなレストランで食事をしたいのは当然である。シェフがレシピだけ書いてキッチンにも立たないレストランには行きたくないし、ましてや自分で料理したこともないシェフが書いたレシピを元に作った料理がおいしいわけがない。( 同エントリより抜粋 )
まさしく、この通りだよ。

P.S. 責任ある仕事を担当できたときに真剣に働くというのは、 IT 業種だけではなくて全ての職業についていえることだと思う。

| | コメント (0) | トラックバック (0)

2006/03/18

[Python] loop

C/C++ を知っている人から見ると、Python のループ、特に forループ はかなり違和感があると思う。

while ループは、C とほとんど同じだ。

while 条件文 : 処理~ else: 条件文が False のときの処理~
しかし、C では可能な次のようなコードはエラーになる。
	while ( (hoge = func() ) != NULL)
	{
		処理~
	}
hoge = func() という代入式が条件式の中に使えないのだ。
結構不便。

しかし、while ループの違和感は for ループの違和感に比べればかわいいもの。 Python の for ループは C とは全く違う。

for 代入ターゲット in シーケンスオブジェクト 処理~ else: 処理~
ちなみに C/C++ の for ループはこうなる。
	for( 式1; 条件式; 式2 )
	{
		処理~
	}
Python の for ループでは、C/C++ のそれに( ほとんどの場合 ) 見られるような カウンタが存在しないのだ。わたしが始めて Python のコードを見たとき、for ループの動作が 全く想像もできなかった理由がここにあった。

| | コメント (0) | トラックバック (0)

2006/03/16

[Python] IronPython β4 Released

Python の .NET Framework 実装版 が更新されました。

更新内容はこちら
bugs fix が主な更新内容のようです。

Download はこちら

IronPython の実行には .NET Framework 2.0 Redistributable Package ( 以下 .NET2.0 ) が必要です。
.NET2.0 の download はこちらから

IronPython は .NET の class を使ったプログラムをコンパイル無しで実行できるところが面白い。 .NET でどんなことができるんだろうとかそういったことの勉強にも使えるんじゃないかな。

追記:個人メモ
IronPython: Workspace Home
IronPython: Python on the .NET Framework

| | コメント (0) | トラックバック (0)

[Publishing] 新刊バトン

実用 Perl プログラミング 第二版
原著は "Advanced Perl Programming, Second Edition"
友人が猛烈に進めてくるので、バトンをまわすことに。
わたしは Perl は使えないんだけどね。
Programming With Qt, Second Edition
5年ぶりの改定。X プラットフォーム開発をしたい人は読んでみるといいのでは?
30日でできる! OS自作入門
新刊というわけじゃないんだけど、これもお勧めらしい。
プログラミングRuby 第2版 言語編
プログラミングRuby 第2版 ライブラリ編
Programming Ruby 2nd Ed の邦訳版。
Ruby も触ってみようかなと思うんだけど、入門書はこれでいいのかな?

3.18 追記

| | コメント (0) | トラックバック (0)

Windows Update: 遅くなりましたが(- -;;

悪意のあるソフトウェアの削除ツール ( KB890830 )
Outlook 迷惑メール フィルタ更新プログラム ( KB913161 )
Outlook2003 更新プログラム ( KB913807 )
Excel2003 セキュリティ更新プログラム ( KB905756 )
この4つは Microsoft Update から入手できます。

MMC3.0 for Windows XP

ATI RADEON Driver Catalyst6.3 ( 2006.03.08 released )
フルパッケージ版
ドライバのみのパッケージ

| | コメント (0) | トラックバック (0)

2006/03/05

Python: IronPython β3 Released

Python の .NET 実装である IronPython のβ3 が公開されています。

IronPython β3 ( Release date:2006.02.15, Microsoft )

| | コメント (0) | トラックバック (0)

「私立」と「公立」と受け入れ拒否

今回は、松本被告の次男が春日部共栄中の入学を拒否されたことについて書きたい。 わたしは、これは別に不思議でもなんでもないと思っていたのだが、 404 Blog Not Found のエントリ カエルの子を変えるには などで書かれていたことに対して少しもの申し上げたい。

ほとんどの Blog で書かれているのは「不当な差別的扱いであって認められるものではない」 というものだ。しかし、ちょっと待ってほしい。春日部共栄は私立学校である。 企業である。公立学校とは違う視点で見なければならないと思う。

私立は、当たり前のことだが、経営者が経営方針を決めてそれにしたがって運営される。 企業としてのブランドイメージを磨き、より多くの顧客 ( つまり生徒 ) を獲得して利益を得ることを目的として経済活動を行っているのだ。 そのためには、たとえ成績が良好でも学校の方針に合わない生徒は 排除 ( つまり強制退学 ) させることだってできる。 強制退学処分が当たり前であるのと同様に、入学についても 「当校の方針に反するので、お断りします」といわれてもなんら不思議ではない。 春日部共栄に責められるような点は特に見当たらないと考えられる。

一方で、もしも今回のような事件が公立学校で起こった場合は話が異なる。 公立学校は全ての国民に教育を受ける機会を平等に提供するための公共機関である。 故に、公立学校において今回のような対応があった場合は、教育基本法第三条に反する。

第三条(教育の機会均等)
すべて国民は、ひとしく、その能力に応ずる教育を受ける機会を与えられなければならないものであつて、人種、信条、性別、社会的身分、経済的地位又は門地によつて、教育上差別されない。
Dan 氏らがいうように、「不当な差別的扱いであって認められるものではない」。

Reference
教育基本法資料室

| | コメント (1) | トラックバック (1)

2006/03/04

Const Statement does not mean "INVARIABLE number".

ありえるえりあのBlogで以下のような記述がありました。

他人のコードを見ていると、次のような箇所を見つけました。変数名や関数名は適当です。
void func(const char *input)
{
char *pt = strstr(input, "foo");
*pt = '\0';
...
}
const char*で渡っているのに、ポインタの先が書き変わっています。しかし、コンパイラは何も言ってくれません。
やはり C は危険です。

誤解している人が多いのですが、const キーワードは変数を定数に変えるものではありません。 const がついたシンボル経由では値を書き換えられないというだけで、他のシンボルを経由するなどして値を書き換えることは可能なのです。たとえば、以下のコードもコンパイルできますし、問題なく実行できます。

int main ( void )
{
const int hoge = 10;
int * ptr_int_change = & hoge;

*ptr_int_change = 50;

printf("%d", hoge);

return 0;
}

実行結果: 50

変数 hoge には const 修飾詞がついているので、hoge = 50; というコードはエラーになります。 ( error: assignment of read-only variable `hoge' というエラーが出力されます。) しかし、ポインタ ptr_int_change には const 修飾詞はついていませんから、 ptr_int_change を経由すれば hoge の値を書き換えることが可能なのです。

ありえるえりあにあるコードでは pt には const 修飾詞がついていません。よって、pt という別経路を使うことで、input の参照先を問題なく書き換えることができたのです。 input を使って値を変更しようとしているならば、エラーが出たでしょう。 引数として渡した文字列を書き換えることが目的ならば、仕様通りの動作ということで問題ないのでは? ( コメントで、関数の目的と動作を補足したほうがいいと思いますが。)

2006.03.06 20:50 修正

| | コメント (7) | トラックバック (0)

« 2006年2月 | トップページ | 2006年4月 »