ラベル web の投稿を表示しています。 すべての投稿を表示
ラベル web の投稿を表示しています。 すべての投稿を表示

2009年6月8日月曜日

梅田望夫氏の功績

はてな界隈での騒動を眺めていると、彼は「大したことはしていない」という言説であったり、「がっかりだ」という趣旨の発言を非常に多く見かけます。

しかし、こと文章を書く力においては、そう批難する側の人たちの文章力は、彼の足もとにも及んでおらず、稚拙なものが目立つように思います。例えば、文章を印象付けるための工夫であったり、物事をわかりやすく伝える技術(指示語や議論の対象を明確にする配慮など)に欠けているため、厳しい言葉を投げかけるわりには、足元がしっかりしていないような印象を受けるのです。

そのような様子を見ていると、なんだかやるせない気持ちになります。はじめから「文体」を大事にしている人と、その機微には目もくれず、表面的な成果や発言の意味ばかりに気が向いてしまう人。そのように、メッセージの媒介である文体そのものを無視してしまうと、彼が世の中に示した一番大事な功績を見逃してしまうように思います。それは、Webの世界を分析したことでも、はてなに貢献していることでもないでしょう。

世の中で起こっていることを、文章で広く伝えるのに、その「書き方」がいかに大事であるか。

その「書き方」には「文体」のみにとどまらず、どのようなタイトルを付け、どのような読者を対象にしたメディア(書籍、ブログなど)を使うかも含まれると思います。彼の発言の趣旨を深く理解することにもある一定の面白さはありますが、彼の示した道を活用する術を見出し、実践していく方がはるかに楽しい世界が待っているように思います。

「Web進化論」が書かれた当時、「Web」や「Google」の話は、多くの人にとって「驚き」でした。そして、それが「驚き」であることに「驚いた」技術者の方も多かったのではないでしょうか。僕自身、研究者という仕事柄、何かの形(論文など)で文章になってはいるものの、書かれるべき場所や、文体がふさわしくなかったがために埋もれている「驚き」は多くあると感じています。

そう。彼のやり方が当てはめられる対象はなにも「Web」や「Google」の話に限らないのです。データベースシステムの研究が専門の僕なら、後で紹介しますが、一般の人向けの「データベースシステム入門」のような記事が書けるし、「世界史講義録」のような広く学校で教えられている事柄でも、敢えてWebで書くことで新たな価値が見出されます。

このような文章は知識だけあれば誰でも書ける類のものではありません。より広い知識と深い理解に裏打ちされた上で、伝えるべき情報を選択する必要があるし、ただ書くだけではなく、読者に合わせて文章を練る必要があります。「知見」を「いかに書くか」の大切さを、これほどまでに見せつけてくれた人は、梅田氏以外にはなかなかすぐには思いつきません。また、その「書く力」が一朝一夕で身についたものではないことを伝え聞いています。彼は「昔からよく文章を書いていた」と。

そして、彼と張り合うなら、「はてな」などを含む「Web」に対する見解を述べるだけではなく、その「Web」を使って自分自身が「何を」「どのように」伝えられるのかで競って欲しいと思うのです。

関連
  • Leo's Chronicle:データベースシステム入門:「データベースは体育会系図書館?」(専門用語はなるべく使ないように配慮し、使った場合、それがどういうものかイメージできるように説明してあります)
  • 「世界史講義録」(高校での世界史の講義の内容を文章におこしたものですが、クラスルームで聞くしかできないのと、Web上にあるのとでは、世の中に与える影響が断然違います。学生にとっては「時間」を飛び越えて先読み、復習できる便利さがあるし、他の先生にとっても自身の授業に活かすことで、学生に良い授業を受ける機会が生まれ、とても良い循環が生まれます。)

2009年1月14日水曜日

なぜIEはFirefoxより優れているか?

Firefoxでこんなことできる?


2008年12月1日月曜日

はてなブックマークレットのデザインを変更する

久々にIEを使ってこのブログを開いてみると、デザインが意図していたものと全然違っていて愕然。

デザインを修正し、ついでに、はてなブックマークレット(左に表示される注目・人気エントリー欄)のリンクも、淡い色に変えました。

以下はスタイルシート(CSS)の例。
.hatena-bookmark {
padding: 0;
text-align: left;
font-size: 12px;
}
.hatena-bookmark-widget-title a img {
display: none;
}
.hatena-bookmark-widget-footer {
display: none;
}
.hatena-bookmark-count a {
margin-left: 0.5em;
text-decoration: underline;
}
.hatena-bookmark-count em a {
font-weight: bold;
display: inline;
font-style: normal;
color: #0099CC;
}
.hatena-bookmark-count strong a {
font-weight: bold;
font-style: normal;
display: inline;
color: #FF9090;
}

ちなみに、はてなブックマークレットは、
のリンクから作成でき、上のような独自のCSSを使う場合には、テーマを「なし」として使います。

2008年10月16日木曜日

優秀なウェブ開発者の見極め方

「Webアプリケーション技術者の見極め方(Java)」 こんな記事を見かけましたが、使えるツールやフレームワークの種類云々を聞くより、単刀直入に欲しい人材を見抜く質問はこれ。


「JavaでWebアプリケーションを開発する利害得失を述べよ」


2008年9月10日水曜日

Google Street Viewが持ちえない情報

Google Street View(ストリートビュー)が、写してはいけないものまで公開していることが多くのサイトで話題になっています。今日、「不適切画像の削除作業は小鳥並の知能で行われる」:高木浩光@自宅の日記のエントリをみて、根本的な問題がようやく整理できました。

Google Street Viewが検索エンジンのロボットやウェブ上のブログなどと根本的に違うのは、人のフィルターを通さない情報をネットに晒している」ことに尽きます。

もちろんGoogle Street Viewのデータを収集するには、路上の写真を撮影する実際の作業員がいて、撮るべき場所の最低限の判断はしているのでしょう。(私道に入り込んでいたり、とそれすらも怪しいですが)。写ってしまった人の顔をぼかすなどの処理もしているようです。けれど、ネットに公開すべき情報とそうでない情報の判断を、98%の精度でスパムメールを弾くのと同じ方法で行ってはいけない事例が多々存在します。

例えば、写ってはいけない人が、その場所に写っていた場合。この写真をウェブに公開してもよいかという判断は、写っている場所以外の外部情報を使わないと通常はできません。なぜなら、顔が伏せられていたとしても、背格好、服装や行動範囲などでその人を特定できる情報を持っている人にとっては、ただの写真以上の情報がそこにあります。たとえ洗濯物が映ってしまったという程度のことでも、女性の一人暮らしであることがわかってしまうなど、写された住居に住む人の危険を招くことさえありえます。

「問題のある画像だから、画像を消す」という現在のGoogleの対応では、「消したという事実」によって、消された場所に何があったのか、という好奇心を刺激し、削除依頼主の意にそぐわない事態を招くことが十分考えられます。

インターネットの普及に伴い、ネットの存在意義もプライバシーの問題も議論されてきました。ネットの検索エンジンがけしからん、といういう人が減ってきたのは、利便性の認知とともに「Webに個人情報などを公開しない」という選択肢と、そのための情報の管理方法が存在しうるからです。つまり「人によるフィルター」を介在させる余地がWebに情報を送る前に残されているのです。けれど、ストリートビューにはそれがない。

目に見える情報がすべてではないのです。株のインサイダー取引のように、内部情報を知りうるものだけに利益を与え、他の人の利益を不正に大きく損ねてしまう。

ストリートビューは、今までなかなか見られなかった情報を収集し、目的地や町の雰囲気を容易に知ることができるようなったという点で、その存在意義や利便性は高く評価しています。ただ、それを人や機械の目による判定や、報告だけで安全にできるというGoogleの現在の主張には、非常におこがましいものを感じます。当事者にしかわからない情報というのは常に存在するものです。

今までのウェブ情報の収集とは違って、ストリートビューでは「人によるフィルター」の情報が根本的に抜け落ちています。「ウェブに存在しない・載せていない」という事実だって立派な情報です。フィルターを通したあとの情報を扱ってきたから、Googleには何をしても怖くないという強みがありました。ストリートビューのように、フィルターを通す前のレイヤー(層)の情報を扱いだしてから、急に対応の陳腐さが目立つようになってきたのがとても残念です。

2008年9月9日火曜日

Google Web Toolkitを本格的に使う

昨日、Google Web Toolkit (GWT)に触れたので、備忘録という意味も含めて、もう少し詳細を書いてみます。僕自身、GWTを使って、ゲノムブラウザを作ってみたり、講義のレポート提出用サイトを作成するなど、ここ数年大活躍しているツールで、GWTによるWebインターフェースで、5万行は優に超えるだけのコードを書いています。

Google Web Toolkitは、JavaからJavaScriptに変換するコンパイラと、ブラウザで表示するHTMLを生成するWidgetクラスを含んでいます。Javaの構文でプログラムを記述すれば、Webブラウザで動くJavaScritpコードを作成してくれるというものです。

実際の開発ではHTMLを書くことはなく、FlexTable, Buttonなど、HTMLでよく使うtableやformタグをクラスとして表現してくれているので、再利用可能な形でHTML要素を設計しやすくなっています。GUIインターフェースのプログラミングと似た感覚でウェブアプリケーションの開発ができる、と考えるとよいかもしれません。Perl、PHP、Ruby on RailsなどHTMLのテンプレート中心の開発と趣が異なるので、テンプレートに慣れた人にとっては最初のうちはコードを組みにくいかもしれませんが、HTML生成のまどろっこしい部分を気にせず開発できることに真価があります。

コンパイル後の最終的なコードはJavaScriptになるのですが、GWTではJavaの標準的なライブラリをエミュレーションすることで、JavaのArrayList, HashMapなどよく使うデータ構造を使えるようにしてくれています。GWT1.5からは、JavaのGenericsの構文や、forループの簡略記法を使えるようになったので、ますます開発が簡単になりました。

3種類のJAR   GWTにおける開発では、3種類のJARファイルを使います。
  • gwt-user.jar  GWTでは、client(ブラウザ上で実行されるコード)と、sever(サーバー上で実行されるservletなどのコード)の2種類のフォルダ(Javaのパッケージ)を使って開発します。サーバーとの通信に必要なservlet周りのパッケージ(javax.servlet)がgwt-user.jarに同梱されていて、自分でTomcatをインストールしてこれらのライブラリをclasspathに設定する手間が省けます。gwt-user.jarは開発時のみに使うものです。
  • gwt-servlet.jar  一方、こちらは、TomcatなどのWebサーバーに作成したWebアプリケーションを設置するときに、WEB-INF/libフォルダに含めておくものです。gwt-user.jarから、javax.servletのパッケージを取り除いたものです(javax.servletはTomcatに標準装備されているパッケージです)。deploy時には、gwt-servlet.jarのみを使います。
  • gwt-dev-windows.jar, gwt-dev-mac.jar, gwt-dev-linux.jar  これらのJARファイルには、GWTのコンパイラが含まれており、JavaコードをJavascriptに変換するときに使います。また、GWTのコードをコンパイルせずにJavaコードのまま実行するための、GWT Shellが含まれています。GWT ShellはTomcatサーバーをローカルに立ち上げるGUIプログラムなので、OS毎に必要なJARファイルが異なり、gwtの配布パッケージに含まれている.dll、.jnilib、.soなどが実行するのに必要になります。デバッグ時には、クラスパスの先頭にgwt-dev-*.jarを追加しておきます。(gwt-user.jarなどはJavaScriptコードを含んでいるので、Javaとしては動作しません)
GWTのアプリケーションをデバッグしたり、コンパイルするには、ソースコードのフォルダ(srcとか、src/main/javaなど)と、Javaのソースコードクラスが含まれているフォルダ(binとか、target/classesなど)がクラスパスに含まれている必要があります。これはJavaのソースコードそのものがコンパイルなどに必要なためです。

GWTのためのJAR作成 したがって、GWTのコードをJARのライブラリにして再利用するときも、ソースコード(*.java)もclassファイルと同じ位置に含めて作成する必要があります。普段から、ソースコード同梱のJARを作っておくと、EclipseでJARのソースコードがすぐ参照できるというメリットもあります。

GWTによる開発を即座に始める  こう並べてGWT開発の注意事項を並べて書くと、はまりどころが多くて、設定もとても面倒なのですが、僕はこれらの設定を含めて、GWTによる開発を数秒で始めることができるようにしています。

現在開発中の、UTGB Shellというゲノムブラウザを作るためのツールでは、utgb create, utgb gwtのコマンド2つで、GWT、データベース、サーブレット機能を含めたプロジェクトの雛形を作成します。埋め込み型Tomcatサーバーを立ち上げることで、Tomcatなどのインストールなしに、ローカルマシン上でJavaによるWebアプリケーション開発ができるようにもなっています。現在は、生物系の研究者が、面倒なしにゲノムブラウザを作れるようにする趣旨のツールなのですが、僕自身、ゲノム関係以外の一般のWebアプリケーション開発にも使っています。

UTGB Shellの舞台裏ではMaven(パッケージ管理ツール)が動いています。そのインストール作業を省くために、Maven自身もUTGB Shellに埋め込まれています。また、gwt-dev-*.jarのライブラリも、本家で配布されているものとは違って、dllなどのライブラリも同梱させています。これによって、OSごとに1つのJARファイルをダウンロードするだけで済むのですが、これらのライブラリをOSの種類に応じてダウンロードしたり、展開したり、GWTのコンパイラを起動するなどもすべてMavenのスクリプトとしてまとめているので、ユーザー、開発者が、詳細を気にする必要がありません。本番用サーバー上のTomcatへのdeployもコマンド一つでできるようになっています。

このような複雑なプロジェクト管理ができるようになったのも、Javaの魅力の1つ。C++などバイナリのOS・コンパイラ間の互換性が乏しい言語の場合は、ソースコードの最新版をネットからダウンロードして、dllをコンパイルする必要があります。コンパイルエラーがでる、実行時にリンクエラー、multi-threadライブラリのタイプが一致していなくてメモリリークが起こるなど、など、慣れていない人には解決しようのない、はまりどころもたくさんでてきます。

Javaではこのような面倒が軽減され、Mavenのようなパッケージ管理ツールのおかげで、典型的な作業を繰り返さずにすむようにできるようになったのが嬉しいですね。

2008年9月3日水曜日

Googleの新しいブラウザChrome レビュー

Googleが開発しているブラウザGoogle ChromeのBeta版がリリースされました。最初から、AJAXを使ったものを含むいろいろなサイトが問題なく動くのはさすが、というところ。(Google にはChrome Botというのがいて、何百万というWebページを自動でテストしてるらしいです。)

Googleにとって、ブラウザ技術というのはサービスを提供するための基盤技術という意味で、まさにOSです。ブラウザの開発は過去にNetscapeが過去のコードを捨てて一から書き直すなどの苦労をしていたように、とても大変な領域なのですが、基盤技術を自分達で作るという正攻法に素直に取り組んで実現までしてしまうのがGoogleらしいですね。

使い始めて驚き。まず、検索バーがありません。Google Chromeのおかげで、検索バーは、本来必要ないものだったことがわかります。使い方は簡単。まず、Ctrl+Lを押してアドレスバーに飛びます。ここで、覚えているURLの一部分なり、キーワードを入れると、過去の閲覧履歴やら、Google Suggestやら、ブックマークやらを検索して、見つけてきてくれます。検索バーなどが統合された分、全体として余計なボタンが省かれたすっきりしたブラウザになっています。


新しいタブを開く操作は、IE7, Firefoxと同じCtrl+Tです。すると、普段よく見てい
るサイトがスクリーンショットとともに一覧表示されます。これは便利。反対に閉じるときはCtrl+Wと、タブを切り替えるときは、Ctrl+Tabを使います。



マウスで選択してもよいし、タブを開くとすぐアドレスバーにフォーカスが移るので、そのままキーボードで検索を開始できます。このあたりのつながりの良さが快適。

各タブ毎にプロセスを生成しているので、重いサイトがあっても、他のページは不自由なく見続けられるなど、技術的にもOS好き、プログラマにとっては興味深いことばかり。ブラウザ中にデータベースを保持できるGoogle Gearsも最初から組み込まれているのもうれしいところ。技術者には、ここにあるGoogle Chrome紹介のコミックがお勧め。(JavaScriptのGarbage Collectionを作り直しているとか、すごい正攻法。これもGmailなど, 自前のGoogle Web Toolkitで作成されている部分の高速化につながるので、自分の財産の価値をさらに高めています)

Web Developer向けの機能として、HTMLソース中の各タグの構造やスタイルを表示してくれるinspector機能がうれしい。FirefoxでFireBugsプラグインと同じような機能が最初から使えるのです。ありがとう、Google。Web開発者の気持ちをよく理解してくれています。


タブをブラウザの外側にドラッグすると、独立したウィンドウになるので、他のページを参照しながら、ブログを書くということも、簡単。

ページ表示の履歴を残さないシークレットモードもあります。のアイコンには笑ってしまいました。スパイ活動に使うのか、なるほどw。リンクを開くときに右クリックで「シークレットモード」を選べます。

IMEのon/off関係なしに、スペースキーで画面のスクロールができるし、わりと細かいところもしっかり実装されていて感心。デフォルトのブラウザに設定して、しばらく使ってみることにします。

(追記)
その他のショートカットキー
  • Ctrl+F ページ内単語検索 これもシームレスで速い!
  • Ctrl+U ページのソースコード表示
  • Ctrl+H 閲覧履歴のページ表示
  • Ctrl+N 新しいwindowを開く
  • Ctrl+R ページの再読み込み
  • Ctrl+J ダウンロード履歴の表示
  • アドレスバーでの検索結果をAlt+Enterで新しいタブで開く
  • backspaceで一つ前のページ、Shift+backspaceで一つ先のページ
  • 意外と便利なCtrl+Shift+Tで閉じたタブを復元。フォームの入力内容も復元されます。何回か押すと、1つ前、2つ前に閉じたタブを復元していきます。
Shift+ESCキーで、各ページがどれくらいメモリとCPUを使っているかもわかります。すごい。



about:network でネットワークのアクセス状況、about:memoryでメモリの使用状況の詳細も見られます。AJAXアプリケーションなどバックグラウンドで通信を行う様子を確認できて便利。


雑感 GoogleがGearsを統合したブラウザを開発し、僕が2年くらい前に予測していた「ブラウザがデータベースを持つ日」がようやく実現されましたが、使う側にとっても、開発者側にとっても、データを扱うという点については、まだまだ不自由が多いと思います。例えば、Twitterの過去ログを追う、などの問題。Twitter APIからログを取得して保存しておくような媒介サービスはたくさんあるけれど、これがブラウザ上でユーザーの手で実現できるところまでブラウザは進化すべきだと僕は考えています。ここからが競争。

License

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