2005年12月22日木曜日

電子書籍の時代が来る?

Ruby on RailsのPDF bookを購入しました。

電子書籍はPalmで読むテキスト形式のものというイメージを持っていましたが、実際買ってみてびっくり。

PDF形式なので当たり前のことばかりですが、初めて読んでみて驚きが多々ありました。
  • 全ページがカラー。
    • ソースコードもカラーリングされていて読みやすい。
  • photo readingしやすい。
    • スペースキーひとつでページがめくれるので集中力が切れません。
  • 本を買うのに比べて半額。
  • 500ページもあるのに、重くない。
  • 目次や参照部分をクリックすると、目的のページにすぐ飛べる
  • ページ中のリンクをクリックすると、ソースコードもダウンロードできる
本って一回読んでしまえば、あとはPDF形式のほうがいいですよね。本棚で眠っていることも多いし場所もとるし。解像度の良い液晶ディスプレイなどが、持ち運びできるようになれば、電子書籍の時代がくると思いました。

iBookというノートPCがあったけれど、これが電車の中で立ちながら読める電子書籍readerに進化してほしいな。出版業界や、書籍流通、ビジネスモデルが激変しそう。ブログの上を行く、個人出版もできてしまう。コミックももっと読みやすくなる。 紙に変わる電子メディア。
ぐにゃぐにゃ曲がるディスプレイなどを開発している人が、次世代の長者ですね。

2005年12月21日水曜日

Emacs on Rails dvelopment

Emacsをrails開発用に設定するノート。 MMMは良いですね。

sqlite3-ruby patch

/usr/local/lib/ruby/gems/1.8/gems/sqlite3-ruby-1.1.0/lib/sqlite3/driver/dl/api.rb
へのパッチ。


*** api.rb.orig Wed Dec 21 13:30:40 2005
--- api.rb Tue Dec 20 17:32:10 2005
***************
*** 42,48 ****
"libsqlite3.dylib"
when /linux/, /freebsd|netbsd|openbsd|dragonfly/, /solaris/
"libsqlite3.so"
! when /win32/
"sqlite3.dll"
else
abort <<-EOF
--- 42,48 ----
"libsqlite3.dylib"
when /linux/, /freebsd|netbsd|openbsd|dragonfly/, /solaris/
"libsqlite3.so"
! when /win32|cygwin/
"sqlite3.dll"
else
abort <<-EOF

子供の誕生日・クリスマスプレゼント

うちの子供(現在2歳)はクリスマス(12月25日)生まれです。誕生日プレゼントとクリスマスプレゼントが一緒にやってきます。

1つだけでも悩みどころなのに、2つです。
一緒にすると将来恨まれる、と23日生まれの友達が言っていたので、
ここはそれぞれ祝ってあげなければと思うのです。

どんなプレゼントがいいのかな。。
2歳のときには子供用のキーボード(楽器)をプレゼントしました。

いいアイデアがあればぜひ教えてください!

2005年12月20日火曜日

Eclipse Web Tools Platform Project

Lombozeの動作は重くて嫌いなので、こういうplug-inが進化してくれれると楽しい。

Ruby on Rails on Cygwin+sqlite3

やっと動作させるのに成功。

とりあえず、sqlite3は、


./configure --disable-tcl
make
make dll
make install
cp sqlite3.dll (PATHの通っているフォルダ)


sqlite3-rubyは手で修正する必要あり。プラットホームi386-cygwinだと自動的にはじかれてしまいます。

Rich Client Platform - Eclipsepedia

Rich Client Platform - Eclipsepedia

EclipserライクなIDEが作れるみたい。時代が進むのは早くてびっくりです。

模様替え

ブログの模様替えをしました。
ただ、テンプレートをカスタマイズして使っていたので、デザイン移行がやや面倒。

デザインとデータ部分をうまく分離できない、Webアプリケーションプログラマ&デザイナの葛藤と似たものがあります。

2005年12月19日月曜日

screen-4.0.2 on cygwin

こことかここを参考に、cygwin上でscreen-4.0.2をmakeできました。

reattachの動作が怪しいけれど、画面切り替えができるだけで便利。

以下、source codeへのpatch:


diff -c screen-4.0.2.orig/configure screen-4.0.2/configure
*** screen-4.0.2.orig/configure Fri Dec 5 22:46:53 2003
--- screen-4.0.2/configure Mon Dec 19 11:03:33 2005
***************
*** 4156,4361 ****
fi
rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext

- { echo "$as_me:$LINENO: checking fifos..." >&5
- echo "$as_me: checking fifos..." >&6;}
- if test "$cross_compiling" = yes; then
- { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
- See \`config.log' for more details." >&5
- echo "$as_me: error: cannot run test program while cross compiling
- See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; }
- else
- cat >conftest.$ac_ext <<_ACEOF
- #line $LINENO "configure"
- /* confdefs.h. */
- _ACEOF
- cat confdefs.h >>conftest.$ac_ext
- cat >>conftest.$ac_ext <<_ACEOF
- /* end confdefs.h. */
-
- #include
- #include
- #include
-
- #ifndef O_NONBLOCK
- #define O_NONBLOCK O_NDELAY
- #endif
- #ifndef S_IFIFO
- #define S_IFIFO 0010000
- #endif
-
- char *fin = "/tmp/conftest$$";
-
- main()
- {
- struct stat stb;
- #ifdef FD_SET
- fd_set f;
- #else
- int f;
- #endif
-
- (void)alarm(5);
- #ifdef POSIX
- if (mkfifo(fin, 0777))
- #else
- if (mknod(fin, S_IFIFO|0777, 0))
- #endif
- exit(1);
- if (stat(fin, &stb) || (stb.st_mode & S_IFIFO) != S_IFIFO)
- exit(1);
- close(0);
- #ifdef __386BSD__
- /*
- * The next test fails under 386BSD, but screen works using fifos.
- * Fifos in O_RDWR mode are only used for the BROKEN_PIPE case and for
- * the select() configuration test.
- */
- exit(0);
- #endif
- if (open(fin, O_RDONLY | O_NONBLOCK))
- exit(1);
- if (fork() == 0)
- {
- close(0);
- if (open(fin, O_WRONLY | O_NONBLOCK))
- exit(1);
- close(0);
- if (open(fin, O_WRONLY | O_NONBLOCK))
- exit(1);
- if (write(0, "TEST", 4) == -1)
- exit(1);
- exit(0);
- }
- #ifdef FD_SET
- FD_SET(0, &f);
- #else
- f = 1;
- #endif
- if (select(1, &f, 0, 0, 0) == -1)
- exit(1);
- exit(0);
- }
-
- _ACEOF
- rm -f conftest$ac_exeext
- if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- echo "- your fifos are usable" 1>&6
- fifo=1
- else
- echo "$as_me: program exited with status $ac_status" >&5
- echo "$as_me: failed program was:" >&5
- sed 's/^/| /' conftest.$ac_ext >&5

! ( exit $ac_status )
echo "- your fifos are not usable" 1>&6
!
! fi
! rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
! fi
! rm -f /tmp/conftest*
!
! if test -n "$fifo"; then
! { echo "$as_me:$LINENO: checking for broken fifo implementation..." >&5
! echo "$as_me: checking for broken fifo implementation..." >&6;}
! if test "$cross_compiling" = yes; then
! { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
! See \`config.log' for more details." >&5
! echo "$as_me: error: cannot run test program while cross compiling
! See \`config.log' for more details." >&2;}
! { (exit 1); exit 1; }; }
! else
! cat >conftest.$ac_ext <<_ACEOF
! #line $LINENO "configure"
! /* confdefs.h. */
! _ACEOF
! cat confdefs.h >>conftest.$ac_ext
! cat >>conftest.$ac_ext <<_ACEOF
! /* end confdefs.h. */
!
! #include
! #include
! #include
! #include
!
! #ifndef O_NONBLOCK
! #define O_NONBLOCK O_NDELAY
! #endif
! #ifndef S_IFIFO
! #define S_IFIFO 0010000
! #endif
!
! char *fin = "/tmp/conftest$$";
!
! main()
! {
! struct timeval tv;
! #ifdef FD_SET
! fd_set f;
! #else
! int f;
! #endif
!
! #ifdef POSIX
! if (mkfifo(fin, 0600))
! #else
! if (mknod(fin, S_IFIFO|0600, 0))
! #endif
! exit(1);
! close(0);
! if (open(fin, O_RDONLY|O_NONBLOCK))
! exit(1);
! #ifdef FD_SET
! FD_SET(0, &f);
! #else
! f = 1;
! #endif
! tv.tv_sec = 1;
! tv.tv_usec = 0;
! if (select(1, &f, 0, 0, &tv))
! exit(1);
! exit(0);
! }
!
! _ACEOF
! rm -f conftest$ac_exeext
! if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
! (eval $ac_link) 2>&5
! ac_status=$?
! echo "$as_me:$LINENO: \$? = $ac_status" >&5
! (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
! { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
! (eval $ac_try) 2>&5
! ac_status=$?
! echo "$as_me:$LINENO: \$? = $ac_status" >&5
! (exit $ac_status); }; }; then
! echo "- your implementation is ok" 1>&6
!
! else
! echo "$as_me: program exited with status $ac_status" >&5
! echo "$as_me: failed program was:" >&5
! sed 's/^/| /' conftest.$ac_ext >&5
!
! ( exit $ac_status )
! echo "- you have a broken implementation" 1>&6
! cat >>confdefs.h <<\_ACEOF
! #define BROKEN_PIPE 1
! _ACEOF
! fifobr=1
! fi
! rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
! fi
! rm -f /tmp/conftest*
! fi


{ echo "$as_me:$LINENO: checking sockets..." >&5
--- 4156,4170 ----
fi
rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext


! # Cygwin patch:
! # Cygwin's fifo implementation is broken; see
! # http://cygwin.com/ml/cygwin-apps/2005-04/msg00163.html.
! # Unfortunately, the "broken fifo implementation test" that was in this
! # script doesn't detect this, so just short-circuit the whole thing here.
! echo "$as_me: checking fifos..." >&6
echo "- your fifos are not usable" 1>&6
! fifo=


{ echo "$as_me:$LINENO: checking sockets..." >&5
Common subdirectories: screen-4.0.2.orig/doc and screen-4.0.2/doc
Common subdirectories: screen-4.0.2.orig/etc and screen-4.0.2/etc
diff -c screen-4.0.2.orig/misc.c screen-4.0.2/misc.c
*** screen-4.0.2.orig/misc.c Fri Dec 5 22:45:41 2003
--- screen-4.0.2/misc.c Mon Dec 19 11:06:26 2005
***************
*** 613,619 ****
*/
# endif /* NEEDSETENV */
#else /* USESETENV */
! # if defined(linux) || defined(__convex__) || (BSD >= 199103)
setenv(var, value, 1);
# else
setenv(var, value);
--- 613,619 ----
*/
# endif /* NEEDSETENV */
#else /* USESETENV */
! # if defined(linux) || defined(__convex__) || (BSD >= 199103) || (__CYGWIN__)
setenv(var, value, 1);
# else
setenv(var, value);
diff -c screen-4.0.2.orig/pty.c screen-4.0.2/pty.c
*** screen-4.0.2.orig/pty.c Mon Sep 8 23:26:18 2003
--- screen-4.0.2/pty.c Mon Dec 19 11:10:25 2005
***************
*** 34,42 ****
--- 34,44 ----
#endif

/* for solaris 2.1, Unixware (SVR4.2) and possibly others */
+ #ifndef __CYGWIN__
#ifdef HAVE_SVR4_PTYS
# include
#endif
+ #endif

#if defined(sun) && defined(LOCKPTY) && !defined(TIOCEXCL)
# include
Common subdirectories: screen-4.0.2.orig/terminfo and screen-4.0.2/terminfo
Common subdirectories: screen-4.0.2.orig/utf8encodings and screen-4.0.2/utf8encodings
diff -c screen-4.0.2.orig/utmp.c screen-4.0.2/utmp.c
*** screen-4.0.2.orig/utmp.c Mon Sep 8 23:27:17 2003
--- screen-4.0.2/utmp.c Mon Dec 19 11:09:41 2005
***************
*** 102,112 ****
#endif


! # if defined(GETUTENT) && (!defined(SVR4) || defined(__hpux))
# if defined(hpux) /* cruel hpux release 8.0 */
# define pututline _pututline
# endif /* hpux */
extern struct utmp *getutline(), *pututline();
# if defined(_SEQUENT_)
extern struct utmp *ut_add_user(), *ut_delete_user();
extern char *ut_find_host();
--- 102,114 ----
#endif


! # if defined(GETUTENT) && (!defined(SVR4) || defined(__hpux)) || !defined(__CYGWIN__)
# if defined(hpux) /* cruel hpux release 8.0 */
# define pututline _pututline
# endif /* hpux */
+ #ifndef __CYGWIN__
extern struct utmp *getutline(), *pututline();
+ #endif
# if defined(_SEQUENT_)
extern struct utmp *ut_add_user(), *ut_delete_user();
extern char *ut_find_host();
***************
*** 581,587 ****
--- 583,591 ----
}
#endif
setutent();
+ #ifndef __CYGWIN__
return pututline(u) != 0;
+ #endif
}

static void
***************
*** 589,597 ****
struct utmp *u;
{
u->ut_type = DEAD_PROCESS;
! #if !defined(linux) || defined(EMPTY)
! u->ut_exit.e_termination = 0;
! u->ut_exit.e_exit = 0;
#endif
#if !defined(sun) || !defined(SVR4)
u->ut_user[0] = 0; /* for Digital UNIX, kilbi@rad.rwth-aachen.de */
--- 593,601 ----
struct utmp *u;
{
u->ut_type = DEAD_PROCESS;
! #if !defined(linux) || defined(EMPTY) || defined(__CYGWIN__)
! /* u->ut_exit.e_termination = 0; */
! /* u->ut_exit.e_exit = 0; */
#endif
#if !defined(sun) || !defined(SVR4)
u->ut_user[0] = 0; /* for Digital UNIX, kilbi@rad.rwth-aachen.de */



2005年12月18日日曜日

Apple KeyboardでTypeWell

HHKと比べると、キーストロークが浅く、タイピングの充実感が乏しいApple KeyboardなのですがTypeWell(基本英単語)をプレイしてみたところ50.6(レベルXG)がでました。

あれ、自己ベストと一秒しか変わらない…。

Apple Keyboardって実は打ちやすいキーボードなのかなぁ。打ち心地では明らかにHHKの方が上なのに、不思議。

2005年12月17日土曜日

Ruby on Rails インストール・メモ

Download Ruby on Rails


Ruby on Rails をCygwin上にインストール
  • ruby-1.8.3をinstall (cygwin のsetup.exe経由でも、source compileでも可)
ruby-1.8.3 > ./configure --enable-shared
ruby-1.8.3 > make
ruby-1.8.3 > make install
  • RubyGemsをダウンロードして展開後、
rubygems-0.8.11 > ruby setup.rb
...
rubygems-0.8.11> gem update
Upgrading installed gems...
Updating Gem source index for: http://gems.rubyforge.org
Gems: [] updated
rubygems-0.8.11> gem install rails --include-dependency
Attempting local installation of 'rails'
Local gem file not found: rails*.gem
Attempting remote installation of 'rails'
Successfully installed rails-1.0.0
Successfully installed rake-0.6.2
Successfully installed activesupport-1.2.5
Successfully installed activerecord-1.13.2
Successfully installed actionpack-1.11.2
Successfully installed actionmailer-1.1.5
Successfully installed actionwebservice-1.0.0
Installing RDoc documentation for rake-0.6.2...
Installing RDoc documentation for activesupport-1.2.5...
Installing RDoc documentation for activerecord-1.13.2...
Installing RDoc documentation for actionpack-1.11.2...
Installing RDoc documentation for actionmailer-1.1.5...
Installing RDoc documentation for actionwebservice-1.0.0...

ruby setup.rbの部分で
ruby: No such file to load -- ubygems (LoadError)

と出る場合、環境変数RUBYOPTS=rubygemsと設定されているのが問題のよう。RUBYOPTはコマンドラインにデフォルトで渡される引数です。unset RUBYOPTなどするのがよいかと。

cygwin使わずにコマンドプロンプト(あるいはそれに代わる物)を使っている人にはこんな面倒なことをしなくても、One-Click Ruby Installerが便利。gemまで全部入れてくれます。ただ、こっちのversion使うと、cygwin上でパスの検索がうまくできなくなったりと、いろいろ不都合があるのです。

2005年12月15日木曜日

Native XML Storage Yggdrasillがオープンソース化

ネイティブXMLストレージ EsTerra XML Storage Server -メディアフュージョン

(修正 Dec. 16th, 2005)
EsTerraではなく、Yggdrasillの方がOpen Source化したようです。SleepyCatのBerkeleyDBやMySQLと同様に、GPL版とソース公開義務のない商用版のデュアルライセンス形式で配布しています。

でも、ここにあるベンチマークをみてあんぐり。

/top/root/business/entityBasic[name/text() = ~"este" and nameKana/text() = ~"este"]


こういう、部分一致検索ができるから、他社のものより速いと。こんなクエリ、RDBにpathIDとともにノードを埋め込んで、部分検索用のindexを張るのと何が違うの? 更新とのトレードオフは?

評価できるのはXMLをあつかうインターフェースを開発した努力。
技術的には進化がなくて幻滅します。

ブログをブックマーク化

ブログをブックマーク代わりに使っています。これで、もう少し内容を追記したり、内容ごとにグループ化できれば良いのに。

Why’s (Poignant) Guide to Ruby

Why’s (Poignant) Guide to Ruby

TextMate: The Missing Editor for OS X

TextMate: The Missing Editor for OS X

このエディタ素敵。 こういうのがあるから、Macを使いたくなります。
当分Winからは離れられないのだけれど…。

Eclipse CDT (C/C++ Development Tools)

Eclipse CDT

Ruby on Rails

Programming Ruby: The Pragmatic Programmer's Guide

Ruby on Rails (こちらはそのジョークだけど的を得ているかも)がWebアプリケーション開発で話題になってきているので、
そろそろRubyを勉強し始めるのもいいかもしれない。

LabelflashでCDのラベル印刷

DVR-UN16L 特長一覧

DVDドライブでDVD表面に印刷できるようになっている。これはすごい。いくらデータがDiskにたくさん書き込めるようになっても、label面が真っ白だと情報が迷子になってしまうので、こういう機能も大事。

2005年12月14日水曜日

On Demand News - CNN.com

CNN.com はOn-demandでニュース映像を配信するサービスを始めました。以前は有料だったのだけれど、無料になったようですね。

ケーブルテレビとか衛生放送にわざわざ加入してまで海外のニュースを見る必要がなくなります。これは嬉しい。毎回同じCMを見せるのは勘弁してほしいけれど。

The Relative Unimportance of Global Warming

by Bjørn Lomborg

読んでなるほど、と思った。京都議定書はCO2、CH4などの「早期削減」を目指したもの。けれど、とある気候モデルを使うと、仮にこの議定書の試みがうまくいき、2050年に先進国が、50%のCO2の削減に成功したとしても、2100年から温暖化を6年先延ばしにするだけ、という計算になるようだ。

経済モデルでは、CO2早期削減のための投資に年1500億ドルを使う試算になるが、その半額で、世界中の人々の飲用水、下水設備、健康管理、教育が確保できるという。他にも、温暖化問題より、HIV/AIDS, 飢餓、自由貿易(取引)、マラリアのほうが、早期対策が功を奏すので、優先度が高いというのだ。 Bjørn Lomborgは、温暖化よりも優先度の高い問題が山積みなのに、機を逸してしまうとさらに被害が拡大し、対策費用が増大してしまうという視点を提供している。

Montrealの会議でも、京都議定書と同様、早期削減に向けて議論が進められているが、CO2の早期削減のための費用は高く付き、アメリカが「条件付き」でしか参加する意思を示していないように、順守できない国が増えるに従い、次期京都議定書のプランが頓挫する可能性が高い。もちろん削減努力も必要だが、本当に長い視点を持つなら、CO2を排出しないエネルギー開発のためのR&D(Research and Development)に投資をするよう(例えば、各国がGDPの0.1%ずつ出資すると)定めるほうが、将来のためになるというのである。

ちなみに、2004年度の日本のGDPは4兆6234億ドルなので、その0.1%は、4.6億ドル(円換算はこちら)。特別会計の規模(200兆?)から考えると、なんてことのない金額ですね。

2005年12月13日火曜日

JOGL - Java Bindings for OpenGL

jogl:

こんなのができている。JavaでOpenGL2.0が使えるみたい。すごい。

米Yahoo!、「Konfabulator」改め「Widget Engine 3.0」をリリース (MYCOM PC WEB)

米Yahoo!、「Konfabulator」改め「Widget Engine 3.0」をリリース (MYCOM PC WEB)

Konfabulator関連記事。

Documentary On Japanese Sushi - Google Video

Documentary On Japanese Sushi - Google Video: "Choi"

Google Videoの機能もすごいのだけれど、寿司についてこんな誤解を招くお笑いはやめてほしいなぁ。ジョークだと気づく前に鵜呑みにしてしまうアメリカ人がでてきそうだ。おもしろいけど。

Yahoo! Widgets

Yahoo! Widgets - Get Weather, Photos, Calendar, and More on Your Mac or Windows Desktop

KonfabulatorがYahoo! Widgetになっている…。買収された模様。名前だけすり替わっているのって嫌だなぁ。。。開発メンバーは同じなんだろうけど。

2005年12月12日月曜日

HHKとApple Keyboardを比較


大きさはこうして比べてみると唖然とするほど違います。トラックボールまでの右手の距離が遠くなったため、肩が懲りそうで大変です。手の移動距離を短くするため、左側にトラックボールを置くなどしてみましたが、左ききでないとドラッグしにくくて辛いので、10分で挫折。

テンキーとトラックボール(マウス)の使用頻度を考えると、やはり削るべきはテンキーでしょう。。

HHKの打鍵音がもっと小さければApple Keyboardを使わなくても済むのに…。打鍵音が心地いいなんて言わないでください。迷惑でしかありません。 Posted by Picasa

Apple Keyboardを購入


自宅でHHKを使っていると打鍵音がうるさいと評判が悪かったので、打鍵音が静かそうなApple Keyboardを3500円ほどで購入。入手しにくい英語キーボードの中では、東大の大学生協で購入できて手頃なのです。

打鍵音は想像以上に静か。箱にはMac対応としか書いてありませんが、Windowsでも問題無く動作します。ボリュームコントロールキーまで使えるのは上出来。マック独特のキーも、AltIMEを使って、入れ替えできるので問題なし。

キーボードの表面はつるつるで、すこし違和感がありますが、こういうのもありかな、と思わせます。キーストロークと反発もそれなりにあるので、値段のわりにはかなり優秀なキーボードです。デザインも良いし(これが重要)。 Posted by Picasa

本郷も銀杏が綺麗になりました


東大正門から入って、正面の建物が安田講堂です。

Red Cross debates new sign

BBC Learning English | Red Cross debates new sign

このマークが採用されたら、赤十字(International Red Cross)は、赤十字じゃなくなるよなぁと思っていたら、もともと、赤三日月(Red Clescent。日本では、赤新月と訳すらしい)とか、イスラエルでは、国旗のマークと同じ六芒星(Magen David)の赤いものが使われているらしい。イスラエルのものは正式ではないようですが。

ちなみに、
Magen Davidはダビデの盾
Geneva Conventionsはジュネーブ協定です。

英語読みと、日本語読みのどっちが正しい発音に近いのかわからないです。 デービッドというより、ダビデと読むほうが素敵ですが。

学習塾「京進」の株価、売り注文殺到でストップ安

asahi.com: 学習塾「京進」の株価、売り注文殺到でストップ安 - ビジネス

こういう記事が書かれるのを見ると、日本って、SRIとかCSRの考えが根付いていないんだなぁと思います。深刻度にかかわらずアクシデントを完全に防ぐのは難しいわけで、一度不祥事があったあとに、どう改善するか、させるかが重要。

大前研一氏の「マスコミは企業を叩くだけ 集団IQが低い日本という国」というコラムがいい視点を提供していると思います。 集団ヒステリーに陥りやすい日本という国。事故が安全性を高める。

被害者の方々にお詫びをするのは、人を相手にする企業としては当然です。でも、より安全な場所が生まれるチャンスを、マスコミや、投資家がつぶしてしまうようではいけない。赤字経済から脱却できないよ。そんなのでは。

dW : IBM developer solutions : Webサービスを使用してリモート・システムからデータを入手するポートレットの開発

dW : IBM developer solutions : Webサービスを使用してリモート・システムからデータを入手するポートレットの開発

Understanding the Java Portlet Specification

Understanding the Java Portlet Specification

Portletなんていうものが出てきているらしい。Apache Jetspeed2で動作するのかな。

2005年12月10日土曜日

Zsh Workshop

Zsh Workshop: Table of Contents

ZSHを使い始めてまだ1年だけれど、まだ使いこなしていない機能がたくさん。

2005年12月9日金曜日

ThinkPadのペーパークラフト

IBM Computer Museum しくみのへや - Japan

ThinkPadの中の様子までわかるようにパーツが組まれているようです。
子供のおもちゃにいいかも。印刷してみよう。

さすがに2歳のお子様に本物を与えるわけにはいかないので…。

2005年12月8日木曜日

Let's begin HAPPY CREAMERY EXPERIENCE.

先月から六本木ヒルズに第1号店がOPENしているようです。とっても食べてみたい。
ハッピークリーマリー体験ってどんなのだろう。わくわくします。

2005年12月6日火曜日

なぜSSL利用をケチるのか

なぜSSL利用をケチるのか:IT Pro

確かにAmazonなどトップページからSSLを使って欲しいサイトはたくさん。Webページの改竄を防ぐためにも、SSL通信は普及して欲しいですね。

CSSXSSでBasic認証も、無防備に

CSSXSSに関する日記の続きです。

友人のゆきのぶ君とCSSXSSについて話していて、これを使うとBasic認証を素通りできることを彼が発見してくれました。

例えば、
  1. 1. Basic認証(ダイアログがでて、ユーザー名、パスワードを入力するもの)で、サイトAに入る
  2. 2. 悪質なサイトBに、気づかず入ってしまう
  3. 3. サイトAを再び見たくなって、サイトAを再び開く。
  4. 4. サイトAは、一度入力したパスワードをブラウザが記憶しているので認証は素通り
というシナリオが危険になってきます。3.の状態で、サイトAを開いたときに危険があります。例えば、サイトBはgoogle検索、デスクトップ検索のようなものだとします。 その検索機能を使ってサイトAを探して、サイトAに入ると、表面上は何も変わらないサイトAにCSSXSSコードが埋め込まれている可能性があります。

あるいは、これを悪用したプラグインが出回ってIEにインストールされてしまうと、どんなページを開いてもCSSXSSのコードが埋め込まれ、悪い人がターゲットにしたいようなBasic認証がかかっているサイトの中身のデータをどんどん吸い上げられる可能性があります。

怖すぎます。

Parosproxy.org - Web Application Security

Parosproxy.org - Web Application Security

CSSXSSを使ったページの解析のために

XOM

XOM
XMLのAPIとして随分前から見かけていたけど、Stream解析しながら、部分的にツリーも作れるという趣のもの。DOM使うとメモリ食い過ぎるので、メモリを意識したAPIがあるのは嬉しいところ。

よいアイデアがあれば、抽出してC++で実装しよっと。

Bloggerが停止

ブログが見られなくなっています。悲しい

IEはもう使えない? CSSXSSの恐怖

Google Desktop Exposed: Exploiting an Internet Explorer Vulnerability to Phish User Information

Matan Gillonという人がIEの脆弱性について、CSS (Cascading Style Sheet) Cross Site Scripting(CSSXSS)と名付けて報告しています。これはIEの信頼性を揺るがすもの。Google Newsを経由してGoogle Desktop検索に必要なキーを取得できるという脆弱性はすでに解決されているとのことなので、本質的な問題は、IEのCSSのimport文で読み込むページが"}{"で始まっていると、HTML全体を読み込めてしまう点に集約されます。

以下は試しに書いてみた例。importで読み込んだデータを、テキストエリアに表示します。

<html>
<head>
<title>CSSXSS</title>
<style text="text/css">
@import url("任意のサイトのURL。ページの先頭付近に"}{"を含むとなお良い");
</style>
</head>
<body>
<textarea rows="30" cols="150" id="pbody"></textarea>
</body>
<script>
var d = document.styleSheets(0).imports(0).cssText;
document.getElementById("pbody").innerText = d;
</script>
</html>

Firefoxなどのブラウザでは、CSSの構文にしたがっていないものは、@importできないようですが、IEではCSSのparserを、多少構文に不具合があっても解析できるように緩く作っているようで、HTML全体を読み込めてしまうことがあります。あるいは、指定されたWebページを読んで、ページの最初だけに開いたcurly brace("}{")を含むように変更して出力するCGIなどをURLに指定すると、任意のページをブラウザに取り込めます。検索エンジンなどは、入力したキーワード等をそのまま結果のページに表示することが多いので、もっと簡単です。

悪意のあるhackerなら、この方法で、表面的に銀行のサイト等を装ったページを作成して、そこにユーザーを誘い込みます。個人情報をsubmitしたところで、フォームに入力されたデータからパスワード等を盗むコードがデータを送信、後はもとの銀行サイトのログイン画面に普通に入ってしまうので、ユーザーは盗まれたことに気づきもしない。 これは、銀行側のサイト(server)側に落ち度は無くても、ブラウザ(client)側でページを改竄されてしまうという危険性があるので、IEのこのvulnerability(欠点)が修正されるまで手の打ちようがないのです。httpsのサイトであっても、ブラウザで見ているページに仕込まれたjavascriptでキーロギングされたら、パスワードは盗まれてしまうかも。

おそろしや。

2005年12月5日月曜日

mixiの技術者は、テストコードを書いてない?

先日書いた mixiのバグの件、mixiから修正したとメールが来ました。

以下抜粋。

こんにちは、[mixi]運営事務局です。
この度は障害発生状況のご報告ありがとうございます。
ご不快の念をおかけいたしまして誠に申しわけございません。

承りました下記の件に関してですが、
こちらでも該当箇所を調査させていただきましたところ、
ご指摘いただいた通りの不具合の存在が確認できました。

開発部に報告し再現の可能性と発生原因を調査させていただきまし
た結果
修正を完了させていただきました。

お手隙の時などございましたらご確認お願いいたします。

まったく直ってないんですけど…。
きっとテストコードなんて書いてないのでしょう。そうに決まってる。

とすると、技術のノウハウが人の頭の中だけにあって、その技術者がイー・マーキュリーを去ると、mixiは一気に廃れると思われます。 なんて危険なんだ。

特別会計205兆円

日本の一般会計予算が82兆円なのに、特別会計で205兆円なんて、くらくらしてしまいますね。2003年2月、塩川財務相(当時)がこのことについて「母屋(一般会計)でおかゆをすすっているときに、離れ(特会)ですき焼きを食べている」と批判したそうです。

国の予算はずっと80兆のみだとずっと思っていました。それで国債を30兆も発行するというのは、政府の気が知れないと思っていたのですが、各省庁が205兆も持っている事実の方が凄まじい。 無知って怖い。

Changing Climate Change

Changing Climate Change
地球温暖化等の環境問題についての論評です。 京都議定書を無視し続けるアメリカの傲慢さには辟易してしまいますが、彼のcommentaryでも、このような問題に関してあまり鋭い切り口で迫れていないのが悲しい。

先月末からモントリオールで、京都議定書(2008-2012年まで)の後をどうするかという議論がおこなわれています。上の記事も技術革新で二酸化炭素排出を抑えるのには時間がかかるので、会議での即時の対応を求めている論調なのですが、会議で本当に効果的なことが決まるのかが疑問。

津波やハリケーンの被害を目の当たりにしたアメリカ人が、温暖化がその間接的な原因であると結びつけて議論できるのかどうか。途上国が第2のアメリカにならないようにできることは何? 世界規模で環境を食い物にしてしまう悲しさ。傲慢な国だけでなく、東京でも、夏は冷房を多用するため、却って室外の気温を上げてしまって、暑い夏を作り出し、さらに冷房を使うという悪循環。

OpenOffice Writerを使ってみる



Impressはやや不具合が目立ったが、Writerの方はかなり使えるようだ。Writerで作成した文書のイメージを貼り付けます。

Open Sourceについて考える

OpenOfficeを使っていてふと思ったのだけれど、open sourceの情報って、ビジネス的な価値があります。open sourceの文化はまだ日本では、欧米ほど普及していないから、必然的に英語圏の情報を探すことになります。 ここで必要な能力はもちろん英語力なのですが、open sourceプロジェクトは、文章が完備されていることは少なく、使ってみて初めてわかること、ソースコードを見て動作を把握してようやく得られる知識が多いです。

ビジネスとして利用するためには、open sourceプロダクトの使い方やチューニングのノウハウを身につけて、サポートビジネスとして売る。あるいは、bug fixやfeature enhancementを行って売るなど、どちらも技術者としての力量が必要。

英語が堪能(交渉力がある、翻訳できる)人は多いかもしれないけれど、開発技術を合わせ持った人材となると非常に少ないはず。 現に、ワイズノットというオープンソースを使った会社が成長してきているし、「日本」でこういう人材を集めることにはかなりの意味があるはず。中国・インドのようにその能力を持った国がオフショア開発で台頭してきたといっても、日本の隅々までサポートを売るというのはまた別の話。

こういうことできる技術者集団が作れるといいな。というか作るために頑張ります。

2005年12月4日日曜日

Microsoft Officeから、OpenOffice2.0に

完全移行できないか確認するために、OpenOffice 2.0をいろいろ触ってみました。僕にとってMicrosoft Officeというソフトは、使う頻度はそれほど多くないものなのに、何万円もするアップグレードを買うサイクルでMicrosoftに囲い込まれてしまっていたので、いい加減うんざりしていたところです。
  • 長所
    • Microsoft Officeの基本機能(あるいはそれ以上)のことはできる
      • Word, Excel, PowerPoint, Access、数式エディタとほぼ同じことはできる
    • そこそこの互換性
      • Officeで作ったファイルも殆ど読めるし、Office用のファイルの作成もできる
      • 同様の操作感
        • Officeに慣れた人なら、すぐ使い方に慣れることができる
    • さらに、Draw(お絵かきソフト)もある
      • EPS出力もできるのでTex用の画像を作成する人にはとっても便利
    • PDF出力機能が完備
      • Acrobatを数万円出して買わなくても良くなる
    • Base(データベース)では、ODBC接続等で、sqliteをバックエンドのDBとして使える
    • 万が一、ソフトウェアが不具合で強制終了されても、復元機能がついている
    • Math(数式)は、慣れればテキスト入力だけで数式が編集できるので、マウス操作が必須の数式エディタよりはかなり使いやすい。
  • 短所
    • Impress(プレゼンテーション作成)の動作がぎこちない
      • データサイズの大きい画像を背景に使うと、プレゼンテーションをうまく表示できないことがある
      • ただ、プレゼンをPDF化してしまって、Acrobatでプレゼンすればまったく問題なかったりもする。
    • Impressのアニメーション機能はそれほど綺麗ではない
    • マニュアル、How-Toなど、日本語訳ができていない
      • 英語を読める人なら問題ないのですが…

残念ながらImpressは及第点とまではいきませんでした。質素なスライドならImpressでもいいんだけど、綺麗なプレゼンテーションを作る観点では、操作性、描画の早さなど、まだまだPowerPointの方が使いやすいです。Writer(文書作成)、Calc(表計算)は、もう少し使ってみてからブログに書きます。

2005年12月2日金曜日

mixiでのatomの扱いにバグ

mixiのatomの扱いは間違っています。以前の日記で、<link rel="alternate" href="...">の部分のデータを使ってリンクして欲しいのに、rel="related"のタグの情報を使ってリンクを張ってくれるので、困りもの。ブログ本体(atom配信データのalternate)でなく、記事の関連リンク(related)の方に飛ばされてしまう。 ちゃんと仕様書読んでよ。mixi。

きっと、rel属性なんて調べずに、linkタグで、type="text/html"を持っている部分にリンクを張っているのでしょう。バグ報告をしておきました。

関連情報: rel attributeの仕様(atom)

2005年12月1日木曜日

Bose®Store: SHOWCASE STORE

Bose®Store: SHOWCASE STOREが秋葉原にできていました。Boseのヘッドホンやオーディオシステムの視聴ができる素敵な場所です。

4万円もするのでなかなか手のでないノイズキャンセリングヘッドホンQuietComfort2とか、20年以上前からある(?)、低音の出が素晴らしいWave Music Systemの音が実際に聞けます。 新発売のTriPortヘッドホンの音も聞き心地が良かったです。

Wave Music Systemは本当に欲しい。リビングやデスク上でジャズや管弦を聴くのにぴったりだと思います。

OpenOffice

OpenOfficeがかなり普通に使えるようになっていてびっくり。WordやPowerPoint互換のスライドも作成できるし、今後Office製品を買わなくても済むのではと期待。

実用に問題がなければ、企業ではかなりのコストダウンを期待できます。あとは、オープンソースプロジェクトの評価(開発の持続性、この製品をサポートする人の熱意を見るなど)をしないと。

License

Creative Commons LicenseLeo's Chronicle by Taro L. Saito is licensed under a Creative Commons Attribution-Noncommercial-Share Alike 2.1 Japan License.