Sky

sky ray clouds park inokashira
by Blue Lotus

2007年12月

mod_proxy で特定のディレクトリを除外する

はてなブックマーク del.icio.usブックマーク mod_proxy で特定のディレクトリを除外するをYahoo!ブックマークに追加

Apache httpd 2.2 + Tomcat 5.5 の組み合わせでは、mod_jk を使った接続がよく使われていますが、mod_proxy_ajp も経験的に安心して使えるようになってきました。

ROOT Web Application への設定を、

<Location />
    ProxyPass ajp://hostname:8009/ keepalive=On min=30 max=30 ttl=86400
</Location>
のように行いますと、/ 以下のディレクトリの制御が Tomcat 側に持って行かれてしまいます。

たとえば /images/ ディレクトリを複数のサーバが参照する共有ディスクに配する場合、これですと困ったことになります。

こういった場合は ProxyPass ! を用いて、

Alias /images /mnt/share/images

<Directory /mnt/share/images>
    Order allow,deny
    Allow from all
</Directory>

<Location /images>
    ProxyPass !
</Location>
のように Proxy 対象から除外します。

森田::


.

いまどきの略語

はてなブックマーク del.icio.usブックマーク いまどきの略語をYahoo!ブックマークに追加

いまどきの略語 JK,KY,KZ

私としましては、少し前にやっとKYを勉強したところだったのですが、
最近は色々あるのですね。

『MHZ = まさかの匍匐前進」』

が個人的に人生でもっとも使用頻度が少ないかと思われます。


tRobo


.

人物や企業のソーシャルグラフを表示するビジネス向け検索エンジン「SBI Business」

はてなブックマーク del.icio.usブックマーク 人物や企業のソーシャルグラフを表示するビジネス向け検索エンジン「SBI Business」をYahoo!ブックマークに追加
SBI Roboは、ビジネス特化型の検索エンジン「SBI Business」を公開した。人名や企業名を検索すると、Wikipediaや各種検索エンジンの検索結果をまとめて表示するほか、検索対象と関連のある人物や企業に関するソーシャルグラフも表示する。
by CNET

CNETの記事でご紹介いただきました。SBI Businessではまだ一般のビジネスプロフィールの登録は行っておりませんが、人物検索ができるようになっていますので、この機会に自分の情報や身近な人の情報どのようにウェブに公開されているか調べてみてください。私たちの知らない間にけっこういろんな情報が出ています。検索エンジンにとってプライバシーなどはありません。ウェブに公開された時点でクロールしてインデックスして検索されたら結果を返す、というのがこのアルゴリズムの宿命なのです。

SBI Businessではまず自分を検索してもらって自分を知ることから始めたいと思います。その上で自分自身をSEOする手段としてのビジネスプロフィールを提供します。だれもが正しい情報を発信できるよう、公開することによってプライバシーを守る手法を提供していきたいと思います。またWeb2.0の次のトレンド言われるソーシャルグラフも検索エンジンが解析して表示する機能を持っています。ウェブで公開されている情報によって人と人、人と企業がどのような相関図にあるか把握できることでしょう。

この新しいコンセプトの人、会社、ビジネスのソーシャルグラフ検索をお試しください。
http://www.sbibusiness.com/

SBI Robo 渡部薫


.

人、会社、ビジネスのソーシャルグラフの発見! SBI Business人物検索をプレリリース

はてなブックマーク del.icio.usブックマーク 人、会社、ビジネスのソーシャルグラフの発見! SBI Business人物検索をプレリリースをYahoo!ブックマークに追加

自分がウェブでどう公開されているか知る
人のつながりを発見する
あなたは世界中の人につながっている
ウェブ時代のビジネスマンのためのツール
まずは自分や身近な人を検索してみることから始めよう。

人、会社、ビジネスのソーシャルグラフの発見!

SBI Business


.

地球規模の発想

はてなブックマーク del.icio.usブックマーク 地球規模の発想をYahoo!ブックマークに追加
グーグル、無限への挑戦

年末になるとテレビはどんどんおもしろくなくなりますね~。ここ数年同じような番組編成で新しい企画が怖いのか、取り組めないのか、毎年同じようなことをしていれば安心なのかわかりませんが、とにかくおもしろくないです。

その一方、年末になってくると個人で発信しているブログとかSNSとかイベントが多いせいもあるのか、時間に余裕ができるのかおもしろいものがたくさん出てきます。ためになるニュース記事もたくさん出てきてどれだけ吸収できるかなと思います。

今日ご紹介した記事はまたGoogleの話ですが、、、ウェブはほんとうにGoogleに支配されてしまったのでしょうか、、、それとも僕は狂信的なGoogle教の信者なのか(笑、、、でも学ぶべきことが多いです。

最近僕はあまり自分で本当に思っている企画とか考えはあまり人に話さないようになりました。僕の思考が飛びすぎているのか、人って理解を超える話をされる と考えるより理解不能フラグを出すんですよね。。。あと企画そのものはある企画や理解がベースになって初めてその意味がわかるようなものだと今しているこ とがまるで宇宙旅行計画みたいな感じに受け取られるのもいやなのでなるべく現実的な範囲にとどめようと思い始めました。

なのでこの記事みたいなものを読むとアメリカの度胸というかアメリカ企業、社会の受け皿って本当に深く広いんだな~と思わずにはいられません。アイデアも 考え方もまず常識や学んだ既成概念を破ることから始まるわけです。もし僕がまだ子どもだったら今よりもっとアメリカの学校や教育を受けたくなるだろうなと 思います。

日本人のいいところは何事もきめ細やかで繊細で丁寧でやさしいんですが、唯一の欠点は発想が狭いところだと思います。広くしてしまうと細かいところが見え ないからかなー?と思いますがどうしてなんでしょうか。インターネットやウェブがある限り、もっともっと視野を広くして考えなければならない、発想をもっ ともっととんでもないもののしなければならないと思いました。どうすればそんな訓練ができるのかわからいですが、とにかく限界を決めるのは自分だからバカ だと思われるくらい激しく飛びぬけた発想をしなきゃならないってことだと思います。

ここに書かれているような地球規模な話などはこれまではIT鎖国されていた日本人にはあまり関係なかったかもしれないですが、今の日本の子どもたちは直接 Googleに触れて学ぶことができます。一大人として子どもたちには制約のない地球規模の発想力を身につけてほしいと思いました。

SBI Robo 渡部薫


.

オスカーピーターソン

はてなブックマーク del.icio.usブックマーク オスカーピーターソンをYahoo!ブックマークに追加

歴史的なJazzピアニスト、オスカーピーターソンが逝去されたというニュースを見ました。

僕は数あるピアノトリオの中でも、オスカーピーターソンの作品を特に好んで聞いていたので、このニュースは非常に残念です。

 

一言でオスカーピーターソンの音楽を表すなら、僕は“FAN”だと思います。

十分なテクニックとセンスに加え、本当に楽しそうな“音”が自分の耳を惹きつけます。

 

今年は有名なJazzプレーヤーが数々亡くなられています。

マイケルブレッカー、ジョーザビヌル、そしてマックスローチ。

常に刺激的な音楽をクリエイトし、歴史を塗り替えてきた偉人達です。

 

彼らのように努力を惜しまず、常にポジティブ・アティテュードで、

次の世代に残せる何かを生み出せたらと思います。

もうすぐ新しい年を迎えますが、気持ちも新たに一歩一歩前に進んで行きたいと思います。

 

BM


.

Googleとドコモ

はてなブックマーク del.icio.usブックマーク GoogleとドコモをYahoo!ブックマークに追加
今朝の日経にGoogleとドコモの提携ニュースが出ましたね。
携帯電話がサーチテクノロジーを導入することは格別驚くことではありませんが、これでドコモGoogle、auGoogle、ソフトバンクYahoo!で図式ははっきりしたわけです。

僕がBBモバイル(ソフトバンクの携帯電話企画会社)にいたころ、携帯電話は90年代の話す携帯電話、ドコモの夏野さんがi-modeで使うケータイと表現したのに合わせて、次は探すケータイと称して企画を立てました。
話すケータイ→使うケータイ→探すケータイ
それに合わせて携帯電話のボタンのインターフェースもデフォルト入力を数字から日本語に変えるべきだとしました。そもそも今、ケータイで電話番号を入力する人なんて皆無なのにコテコテに固まった頭だとそういう柔軟な変化にも対応できないのです。

2010年には携帯電話の利用頻度は
検索>メール>ウェブ>通話
になるでしょう。それくらい携帯電話は何か情報を探すのに最適なデバイスなのです。

もしこのままソフトバンクがYahoo!というポータルに執着したら、検索がメインになる携帯電話サービスで苦戦を強いられるでしょう。ページビューとい うトラフィックからのビジネスモデルに執着したら収益モデルでも苦戦を強いられるでしょう。携帯電話からのページビューとバナー広告を捨てられるかどう か、が勇気の分かれ目かもしれないですね。

auとドコモはGoogleサーチを導入し、さらにウェブメールG-mailとケータイメールを連携させます。今後は一番強烈なのがGoogleMapと の連携でしょう。少しずつ確実に行われると思いますが、情報というのは持てばいいというものではないんです。入り口を支配してもだめなんです。その人が必 要だと思った情報とさらに異なる価値ある情報をどうやって紐付けてあげるか、そんな些細なことで価値が何倍にもなります。それができる唯一の技術が今のと ころサーチテクノロジーです。

僕たち一般のユーザにとっては利便性があがるだけではありません。いつでも、どこでも探せる環境が出てくるということは特にビジネスマンとしては自分自身をしっかりSEO(最適化)しておかないともう誰もごまかせないですよ。

SBI Robo 渡部薫


.

企業として何のプログラミング言語にコミットするか

はてなブックマーク del.icio.usブックマーク 企業として何のプログラミング言語にコミットするかをYahoo!ブックマークに追加

さまざまな用途向けに、さまざまなプログラミング言語が考案され、日々使われています。コンピュータの能力が低かった時代は、機械語に対応したアセンブリ言語に始まり、ALGOL 系の Pascal, C などに続き、コンピュータの能力や資源に余裕が出始めると、オブジェクト指向言語の C++, Java などに続き、さらに文法を簡易化したスクリプト系の言語に続いています。

現在のウェブプログラミングでは、生産性の高いフレームワークと組み合わせて PHP, Perl, Python, Ruby などがよく用いられています。また、同様にフレームワークと組み合わせて Java, C# などが用いられています。

業種、業界によってスタンダードもさまざまですが、特にウェブに関わる業界にいると、新しいものに目を奪われ勝ちになってしまいます。新しいものは試してみたくなるもので、RoR や Symfony といったフレームワークも試していたりします。

企業として何のプログラミング言語にコミットするか?ということは、

  • 確保する人材
  • 教育プログラム
  • ソフトウェアのライフサイクル
に大きく関わるため、とても重要な要素となります。

個人の場合は、何で作ろうが構いませんが、企業としては、コストを掛けて生産、保守していくことになるので、あまり特殊なものは使えません。また、マーフィーの法則に従い、悪いタイミングで深刻な問題が発生しますので、

  • メーカーによるサポートが充実している(作った人に聞ける。)。
  • メーカーによるドキュメントが充実している(そこを見れば解決できる可能性が高い。)。
  • メーカーによるコミュニティーが充実している(同じものを使っている人に聞ける。)。
  • 社内に問題を解決できるエキスパートが居る(深部まで分かっている人に聞ける。)。
  • ユーザーによるコミュニティーが充実している(同じものを使っている人に聞ける。)。
  • 人材の確保のしやすさ。
といったことが選択の基準になります。

SBI Robo では Java を選択していますが、上の基準では、ドキュメントの質と量が高い Microsoft も選択肢となり得ました。が、人のつながりで Java 系の人材の確保を進めました。

上のリストで、人に聞ける という箇所を強調しましたが、ググって出てくる古い誤った情報ではなく、人に聞ける という点が、実は重要なのかなと思います。

森田::


.

ウェブの時間と距離

はてなブックマーク del.icio.usブックマーク ウェブの時間と距離をYahoo!ブックマークに追加
人間は目に見える距離の長さはものすごく意識することができます。東京から大阪、北海道、沖縄、ハワイ、ニューヨーク、パリ、ブラジルと言えばその距離が 意識の中で認識できます。それはこの100年、クルマや新幹線、飛行機の体験と無関係ではありません。飛行機に乗ったことない人がニューヨークとブラジル までの距離を意識することは難しいです。現代人と100年前の人とでは距離への意識がまったく違うことでしょう。

も一方、人間は、時計というものが発明されてから時間の距離の認識にはあまり変化がありません。100年前の人と、現代人と1時間は1時間、1日は1日、 1年は1年で意識は大差ないでしょう。現代社会が忙しいからといって100年前の人と待ち合わせしたとしてもちゃんと指定した時間に会えるでしょう。

梅田望夫さんの本を読むとウェブは空間の革命であり、人間の脳の働きの革命であることがよく理解できますが、もうひとつウェブが人間にもたらしたものは、時間の距離を限りなく0に短縮させた革命です。

少し物理理論的な話になりますが、ウェブは空間ではなく、時空で過去に行くことのできる空間です。(まだ未来には行けません)説明が難しいのですが、仮想世界を空間と見て設計するのと、時空と見て設計するのとでは大きな差が生まれます。

ウェブに生きる人間の時間の意識は1秒単位です。そして今それが限りなく0に近づこうとしています。仮想空間は0秒空間とも言えますし、0m空間でもあります。それがGoogleという空間。

今日は防衛省までがUFOの話をしていましたので、僕も少し頭を宇宙まで飛ばして見ました。

SBI Robo 渡部薫


.

重曹にチャレンジ!

はてなブックマーク del.icio.usブックマーク 重曹にチャレンジ!をYahoo!ブックマークに追加
師走です、大掃除の季節です。
いつものごとく、本日まで全く手を付けられずにいます。この3連休でたまった埃を落としたいと思います。

今年気になっているのは重曹をつかったお掃除。とにかく、なんでも汚れが落ちてしまうという噂です。専門WEBサイトまであるんです。

是非とも、重曹様のお力をお借りし、頑固な今年の汚れとおさらばしたいと思います。

OL


.

やれんのか!~教育立国~

はてなブックマーク del.icio.usブックマーク やれんのか!~教育立国~をYahoo!ブックマークに追加
1歳の子供を放置して死なせた親のニュースがありました。
ニュースをみる前の日にフリーダムランドを見ており、
嬉しくない偶然の一致でした。

経済的な競争で厳しい状況にあり、国民のモラルも低下していて、
銃犯罪が横行しつつあり、年金も予断を許さない

一人の親として子供に何をしてやれるのか、
悩むこの頃です。



.

SEOに関する興味深い記事

はてなブックマーク del.icio.usブックマーク SEOに関する興味深い記事をYahoo!ブックマークに追加
SEO販売実績が大きく伸びている部門の関係者としては
非常に興味深いです。

 


.

PASMOの盲点~既存システムと繋がっていません

はてなブックマーク del.icio.usブックマーク PASMOの盲点~既存システムと繋がっていませんをYahoo!ブックマークに追加

3月より開始したPASMOのサービスなのですが、
意外な所に盲点があり、不便を感じています。

1.精算できない不便
2.システムエラーが煩雑に起こり、復旧に時間がかかる不便。

1.精算できない不便

私は頻繁に行くところですと、回数券を買っています。
特に東京メトロの回数券は、160円区間、190円区間という運賃体系で発売され、
買うときに、どこからどこまでの区間を煩雑に乗車するか、
ということを購入時にコミットしなくても良いのは便利です。

しかし

A駅→(回数券利用)→B駅→(定期券)→C駅

とB駅で下車せずに乗車する場合、A駅では回数券で入場し、
C駅の自動精算機で回数券を入れ、請求された額を定期券を挿入することで精算し、
出場するのが理想型なのですが、
どうも自動精算機が対応していないようで、C駅での精算ができません。
その場合有人改札に行って処理する必要があり、
大きな駅だと、混雑していることもあり一苦労です。

PASMO協議会か、私鉄のシステム担当者のどちらなのかは知りませんが、
「PASMOを使う人は入場から出場までPASMOを利用する」
という前提で設計されているらしく、自動精算機のフローは、
「PASMOにチャージする」「PASMOでは足りない額を現金で支払う」
以外のフローが用意されていないようです。

例えば、切符で入場し、残額をお金で精算する、
PASMOで入場し、一部区間を回数券で精算する、
などという操作を要求するためにはいちいち有人改札に出向かなくてはなりません。

2.システムエラーが煩雑に起こり、復旧に時間がかかる不便。

PASMOはタッチするだけで入出場できて便利なのですが、
ICカード故に、お財布の中に入れたままタッチ、鞄に入れたままタッチ、
という方々も増えていますが、それ故にタッチが失敗する事もあります。
個人的な経験ですが、タッチは、多分20回に1回ぐらいの確率で失敗するようです。

するとタッチが失敗した改札口は閉じてしまい、
昨日図ってみると再び処理を受け付けるまで、25秒ほどかかっていました。
朝のラッシュで25秒はかなり痛く、自分がタッチを失敗した時には、
背中の方から舌打ちや隣の改札機へ向かう恨ましい、足音を聞かされることになります。
特に出場の自動改札機が2台しかない、
弊社最寄り駅東京メトロ銀座線末広町駅では、
朝ラッシュ時にやらかしてしまったら悲惨なことになります。

以前の券面を入れる自動改札機ですと、
エラーになってしまうのは、精算できていない切符、折り曲がった切符などだけで、
今は逆に改札機が閉じてしまう機会は増えてしまっている印象です。

こんな事も気になってしまうのは、忙しく余裕のない現代人だからなのでしょうか。

k-warrant


.

タイトルに偽が・・・

はてなブックマーク del.icio.usブックマーク タイトルに偽が・・・をYahoo!ブックマークに追加
厚顔無恥は過言でしょうか。
またも偽物発売のようです。

悪名
を竹帛に垂ることをも厭わないのでしょうね。
同じ轍を踏まぬよう、肝に銘じておかなければ。


.

Tomcat が終了しない原因の調査 - 前編

はてなブックマーク del.icio.usブックマーク Tomcat が終了しない原因の調査 - 前編をYahoo!ブックマークに追加

shutdown.sh を実行しても Tomcat がきちんと終了せずプロセスが残ってしまうことがたまにあります。原因を探っています。

前提知識として JVM はデーモンスレッド以外のスレッドが全て終了した時に終了します。(詳しくは java.lang.Thread の API リファレンスを参照してください: https://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/lang/Thread.html )


終了しないことが多い Tomcat のスレッドダンプを取ってみるとデーモンスレッドではないスレッドがありました。

"RMI Reaper" prio=1 tid=0x0821b0c0 nid=0x67b4 in Object.wait() [0xadf84000..0xadf84e20]
at java.lang.Object.wait(Native Method)
- waiting on <0x8a8d8e30> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:116)
- locked <0x8a8d8e30> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:132)
at sun.rmi.transport.ObjectTable$Reaper.run(ObjectTable.java:336)
at java.lang.Thread.run(Thread.java:595)


※ デーモンスレッドの場合は 1 行目のダブルクォーテーションで囲まれたスレッド名の後ろに daemon と表示されます。(VM のバージョン、ベンダにより異なる可能性があります。今回は Sun Java 1.5.0_13 を利用しました。)

これが原因のようです。"RMI Reaper" で web 検索してみるといろいろ事例がありますね。要は RMI を利用するアプリケーションが正しく終了処理をしていないのが原因です。

今回はここまで。次回は弊社の場合の "正しく終了処理をしていない" アプリケーションの調査とその回避方法を探ります。

- Andy


.

携帯電話ユーザーの実態

はてなブックマーク del.icio.usブックマーク 携帯電話ユーザーの実態をYahoo!ブックマークに追加
モバイルサイトに一番アクセスしているのは木曜日
間もなく1億台を突破するといわれている携帯電話の累計契約数。それらの端末から企業が運営するモバイルサイトへは、いつアクセスされているのだろうか。BeMssを利用している約600社のモバイルサイトのアクセス数のうち、時間別、曜日別のアクセス実績を調べた。

アクセスが最も多いのは、時間帯では23時、曜日では木曜日という結果となった。 CNET

理由は週末のイベント情報など販売促進メールは、帰宅時間に見てもらえるように夕方に配信されているとの事です。
その他、各事業者の端末シェア、アクセスシェアなどの調査結果がでているので興味がある方はご覧ください。

ソフトバンクはシャープ(SH)端末が圧倒的で50%以上のシェアです。アクセスシェア(8月-11月)はソフトバンクは7%から8.4%と加入者増と比例して飛躍的な伸びをしていますが携帯加入者数シェアの割合よりは低くWホワイトプラン等の音声通話目的で加入されている事がわかりますね。

http://japan.cnet.com/column/mshare/story/0,3800081578,20363379,00.htm



.

『Baccarat ETERNAL LIGHTS 2007-歓びのかたち- 』

はてなブックマーク del.icio.usブックマーク 『Baccarat ETERNAL LIGHTS 2007-歓びのかたち- 』をYahoo!ブックマークに追加
『Baccarat ETERNAL LIGHTS 2007-歓びのかたち- 』
を見に先週末恵比寿ガーデンプレイスに行ってきました。

クリスマス前の恒例イベントとして貫禄イベントになってきてますね。
本日動画がアップできませんので、明日アップ致します。

もうすぐ今年も終わりです。今年の仕事は、来年に持ち越さず
年内で全て片付けたく思っております。

年末の忙しさに負けないよう営業に励みます。




担当:MFX


.

GoogleのKnol

はてなブックマーク del.icio.usブックマーク GoogleのKnolをYahoo!ブックマークに追加
Googleのknolの発表は、この記事に書いている通りの内容ですが、注目すべき点をいくつかあげておきます。
~~~
Googleのやっていることが変化しつつあるように思えるのは私だけだろうか?
私の見るところ、Googleは他のサイトで作られたコンテンツから情報を漉しとって集約、総合するという会社だったのが、自分自身で最終的にコントロールできる(あるいはそのためのテクノロジー)コンテンツを制作する(あるいは買い取る)方向に変貌しつつある。
~~~
Googleにないものは自分たちのコンテンツです。Googleは自分たちでコンテンツを持たないで、クロールして情報を整理することが主な使命でした。これがここに来てなぜこのような方向転換を検討するようになったのでしょうか。
ひとつにはCGMコンテンツの爆発的な増加によってGoogleのランキングアルゴリズムが機能しなくなりつつあるということ。SBI Businessでも証明していきますが、明らかに著作権やプライバシー、クソ情報が検索結果の上位を占める場合がある。このような情報のノイズ、操作を Googleは望まない、ということでしょう。

一方YouTubeは自社でコンテンツを制作していないにも関わらず世界中の動画の所有者になっている点でこれまでのGoogleモデルと異なります。Google検索結果は次の情報への出発点だったのに、YouTubeは到着点になっています。

Knolのひとつの役割として、Google検索に情報の出発点と到着点を用意し、さらにノイズによるランキングアルゴリズムの修正をKnolコンテンツで行おうという試みだと読み取れます。

~~~
GoogleはKnol が「権威ある情報のページ」となることを期待している。「knolの記事は、一般ユーザーが自分の知らないトピックについて初めてGoogleで検索した とき、最初に読むのにふさわしい記事」にするというのは、Wikipediaに対する直接の挑戦だ
~~~
僕も何度も指摘してきている通り、Googleの検索結果は正しくない場合があります。正しくない情報が配信されるほうがリスクなのは明白です。Googleは正しい情報が少なくてもひとつは返す方法を模索していると考えられます。SBI
Businessの自分のビジネスプロフィールを持とう、というコンセプトと同じです。

~~~
私は以前から「Googleこそ主であり救い主である」理論の信奉者で、プライバシーとかそういった問題に関する懸念はとうに捨てている。
~~~
ウェブ、検索、Google、デジタル情報化社会にプライバシーはありません。隠すことはできないのです。隠せないのなら、自らその技術を利用するしかないのではないでしょうか。

Knolが成功するかどうか、これはGoogleの検索結果の1位がどのような価値を持っているか証明することにもなるでしょう。多くの言葉で Wikipediaが上位に出てきますが、Wikipediaの情報の信頼性が揺らぎ始めているからこそ、Googleはこのような取り組みを行うのだと 思います。

僕は検索エンジンで何かを検索してその1位になることは20世紀一流の大学を出て首席で卒業するのと同じくらいの価値を生むのではないかと想像しています。

要するに情報であれ、コンテンツであれ、そして人間であれ、検索されてなんぼ、上位を取れてなんぼ、という情報資本主義社会がやってきた、ということです。学校に行く暇があったら自分をしっかり最適化することです。

SBI Robo 渡部薫


.

なぜサーチが必要なのですか?⑤

はてなブックマーク del.icio.usブックマーク なぜサーチが必要なのですか?⑤をYahoo!ブックマークに追加
今回が最後です。
僕が単純に思う経営戦略というのは今この瞬間競合している他社との競争や自社の商品力のアップのための短期的な戦略と、将来技術革新や他分野からの潜在的脅威に対する防衛策を取ることだと思っています。

技術革新による脅威は予測がつくきにくですが、他の分野からの競合の参入は予測がしやすいです。

インテル創業者のアンドリュー・グローブ氏の著作「インテル戦略転換」の原題
‘Only the Paranoid Survive’- 
パラノイア(病的なほど心配性の人)だけが生き残る

この言葉はシリコンバレーでベンチャーを志す人であれば誰もが知っている言葉でしょう。

人間の健康もそうですが、健康なときに身体的脅威には注意がいかないものです。病気になって病院に行ったり手術を受けるわけですが、自分たちのウェブサイトも人間だと思って定期的に診断を受けるべきだと思います。
アフラックに聞いてみましょう(笑
「なぜガン保険が必要なのですか?」
 →「だれもがガンになる可能性があるからです」

「なぜサーチが必要なのですか?」
「もしGoogleが楽天を買収してファイナンスサービスを始めたらどうしますか?」

SBI Robo 渡部薫


.

なぜサーチが必要なのですか?④

はてなブックマーク del.icio.usブックマーク なぜサーチが必要なのですか?④をYahoo!ブックマークに追加
~~~
ほとんどの動物(哺乳類のこと、ヒトを含む)においては、五感を司る器官の中でも、耳は生まれたときすでに成体に近いレベルまで発達している。これは、外界の危険を感じ取ったり、親とのコミュニケーション(ヒトの場合、特に言語)を維持・学習するために必要だからと考えられる。
(参照Wikipedia)

なるほど、耳が聞こえないと危険を察知できないばかりか、親とコミュニケーションできないため自然界では生きていけないわけですね。

~~~
註:ただし、ヒトの聴覚は発育とともに徐々に発達していくものであるので、乳児は成人と同じ聴覚をもってはいない。よって、生下時に十分な聴力がなく音が聞こえない状態で育った人間は、たとえその状態が成人になってから良くなっても、音声を理解することができない。脳で音声信号を処理することが出来ないのである。
(参照Wikipedia)

>生下時に十分な聴力がなく音が聞こえない状態で育った人間は、たとえその状態が成人になってから良くなっても、音声を理解することができない。
これがすべて物語っているように最初に耳を持っていない人がどんなに耳が重要だと説明してもなかなか理解できない理由です。

>脳で音声信号を処理することが出来ないのである。
思考停止状態です。

「なぜサーチが必要なのですか?」
「なぜ人間は思考ができるのですか?」

SBI Robo 渡部薫


.

Java で使える Persistence フレームワーク

はてなブックマーク del.icio.usブックマーク Java で使える Persistence フレームワークをYahoo!ブックマークに追加

Java で使える Persistence フレームワークは数多くあります。それぞれ開発された時期や目的が異なり一長一短です。実際のプロジェクトで利用したことがあるのは、Torque, iBATIS, Hibernate で、評価したことがあるのは、pBenas, Mr. Persister です。後者は、XML ファイルによる定義を嫌い、Ruby on Rails など Lightweight Language 系の ORM のアプローチに近いものです。Mr. Persister は個人的には面白いと思っています。

最近、ユーザー認証用のウェブサービスを書いた際に iBATIS を使いましたので、その使い方を簡単にまとめておきます。

iBATIS は、生成される SQL を完全に制御下に置けるフレームワークです。生成される SQL 文の品質は、利用者の SQL のスキルに依存しますが、予想できない高度な SQL 文に悩まされることはありません。

1. 準備

iBATIS のプロジェクトページから、iBATIS 2.3.0 をダウンロードします。アーカイブの lib ディレクトリの ibatis-2.3.0.677.jar をプロジェクトに加えます。また、データベースに対応する JDBC ドライバを用意します。ログ出力には commons-logging と log4j を使います。

今回は MySQL を対象としたので、次のライブラリをプロジェクトに加えました。

ibatis-2.3.0.667.jar
mysql-connector-java-5.0.7-bin.jar
commons-logging-1.1.jar
log4j-1.2.14.jar

2. 接続設定

設定ファイルの名前は任意ですが、ここでは sqlMapConfig.xml としました。データベースへの接続設定を記述し、クラスパスの通った場所に置きます。sqlMap 要素は、後述する SQL Mapping を定義するファイルです。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMapConfig
PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-config-2.dtd">
<sqlMapConfig>
  <settings useStatementNamespaces="true" />
  <transactionManager type="JDBC">
    <dataSource type="SIMPLE">
      <property name="JDBC.Driver" value="com.mysql.jdbc.Driver" />
      <property name="JDBC.ConnectionURL" value="jdbc:mysql://localhost/dbname" />
      <property name="JDBC.Username" value="dbuser" />
      <property name="JDBC.Password" value="dbpasswd" />
    </dataSource>
  </transactionManager>
  <sqlMap resource="sqlMapUser.xml" />
</sqlMapConfig>

com.ibatis.sqlmap.client.SqlMapClient オブジェクトを Singleton pattern で作ります。設定ファイルの名前をリソース名として指定します。

import com.ibatis.common.resources.Resources;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;

public class SqlConfig {
  private static SqlMapClient sqlMap;
  static {
    try {
      String resource = "sqlMapConfig.xml";
      Reader reader = Resources.getResourceAsReader(resource);
      sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
      reader.close();
    } catch (IOException e) {
      logger.fatal(e);
    }
  }
  public static SqlMapClient getSqlMapInstance() {
    return sqlMap;
  }
}

3. DTO の作成

問い合わせパラメータを格納する、あるいは結果セットを格納する DTO を作成します。

ここでは次のテーブルに対応する User クラスを作ります。

CREATE TABLE user (
  id int(10) unsigned NOT NULL auto_increment,
  email varchar(255) NOT NULL,
  password varchar(255) NOT NULL,
  PRIMARY KEY(id)
);
package test;
public class User implements java.io.Serializable  {
  private Long id;
  private String email;
  private String password;

  // setter/getter...

}

4. SQL Mapping の作成

SQL Mapping の定義ファイルを作ります。sqlMapConfig.xml の sqlMap 要素で指定した sqlMapUser.xml は、DTO の User クラスに対応します。ここでは、select, selectByEmail, insert, updateEmail, delete を定義しています。sqlMapConfig.xml で名前空間を有効にしていますので、実際には user.select, user.selectByEmail, ... となります。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap
PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-2.dtd">
<sqlMap namespace="user">
  <select id="select" resultClass="test.User">
    SELECT * FROM user WHERE id=#value#
  </select>
  <select id="selectByEmail" resultClass="test.User">
    SELECT * FROM user WHERE email=#value#
  </select>
  <insert id="insert" parameterClass="test.User">
    INSERT INTO user (email,password) VALUES (#email#,#password#)
    <selectKey keyProperty="id" type="post" resultClass="Long">
      SELECT LAST_INSERT_ID() AS value
    </selectKey>
  </insert>
  <update id="updateEmail" parameterClass="test.User">
    UPDATE user SET email=#email# WHERE id=#id#
  </update>
  <delete id="delete">
    DELETE FROM user WHERE id=#value#
  </delete>
</sqlMap>

# で囲まれたパラメータがプレースホルダになっており、結果セットを受け取る resultClass, パラメータを渡す parameterClass を指定しています。パラメータが 1 つの場合は #value# が対応します。

insert した時に発行されたキー値を参照したいことは良くありますが、insert 要素の下に selectKey 要素を記述して実現しています。

5. DAO の作成

select, selectByEmail, insert, updateEmail, delete に対応する DAO のメソッドを記述します。SQL Mapping で定義した名前は、SqlMapClient の queryForObject, insert, update, delete メソッドで呼び出します。

トランザクション制御は、SqlMapClient の startTransaction, endTransaction, commitTransaction メソッドとなります。commitTransaction しないで endTransaction を呼ぶと変更は反映されません。

iBATIS 2.3.0 では Java Generics に対応していないので、SqlMapClient#queryForObject ではキャストが必要です (次に期待)。

テーブルを加える場合は、SQL Mapping を SqlMapConfig に追加し、DTO/DAO を追加することになります。

public class UserDao {

  public User getUser(Long id) throws DaoException {
    User user = new User();
    SqlMapClient sqlMap = SqlConfig.getSqlMapInstance();
    try {
      user = (User) sqlMap.queryForObject("user.select", id);
    } catch (SQLException e) {
      logger.fatal(e);
      throw new DaoException(e, "SystemError");
    }
    return user;
  }

  public User getUserByEmail(String email) throws DaoException {
    User user = new User();
    SqlMapClient sqlMap = SqlConfig.getSqlMapInstance();
    try {
      user = (User) sqlMap.queryForObject("user.selectByEmail", email);
    } catch (SQLException e) {
      logger.fatal(e);
      throw new DaoException(e, "SystemError");
    }
    return user;
  }

  public Long addUser(User user) throws DaoException {
    Long id = new Long(0);
    SqlMapClient sqlMap = SqlConfig.getSqlMapInstance();
    try {
      sqlMap.startTransaction();
      id = (Long) sqlMap.insert("user.insert", user);
      sqlMap.commitTransaction();
    } catch (SQLException e) {
      logger.fatal(e);
      throw new DaoException(e, "SystemError");
    } finally {
      try {
        sqlMap.endTransaction();
      } catch (SQLException e) {
        logger.fatal(e);
        throw new DaoException(e, "SystemError");
      }
    }
    return id;
  }

  public void updateEmail(User user) throws DaoException {
    SqlMapClient sqlMap = SqlConfig.getSqlMapInstance();
    try {
      sqlMap.startTransaction();
      sqlMap.update("user.updateEmail", user);
      sqlMap.commitTransaction();
    } catch (SQLException e) {
      logger.fatal(e);
      throw new DaoException(e, "SystemError");
    } finally {
      try {
        sqlMap.endTransaction();
      } catch (SQLException e) {
        logger.fatal(e);
        throw new DaoException(e, "SystemError");
      }
    }
  }

  public void deleteUserPerfectly(Long id) throws DaoException {
    SqlMapClient sqlMap = SqlConfig.getSqlMapInstance();
    try {
      sqlMap.startTransaction();
      sqlMap.delete("user.delete", id);
      sqlMap.commitTransaction();
    } catch (SQLException e) {
      logger.fatal(e);
      throw new DaoException(e, "SystemError");
    } finally {
      try {
        sqlMap.endTransaction();
      } catch (SQLException e) {
        logger.fatal(e);
        throw new DaoException(e, "SystemError");
      }
    }
  }

}

6. ロギング

必要なログを出力します。

# SqlMap logging configuration...
#log4j.logger.com.ibatis=DEBUG
#log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUG
#log4j.logger.com.ibatis.sqlmap.engine.cache.CacheModel=DEBUG
#log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientImpl=DEBUG
#log4j.logger.com.ibatis.sqlmap.engine.builder.xml.SqlMapParser=DEBUG
#log4j.logger.com.ibatis.common.util.StopWatch=DEBUG
#log4j.logger.java.sql.Connection=DEBUG
#log4j.logger.java.sql.Statement=DEBUG
#log4j.logger.java.sql.PreparedStatement=DEBUG
#log4j.logger.java.sql.ResultSet=DEBUG

7. まとめ

この手のフレームワークは、その利用目的に合致していれば、さほど面倒なトラブルは起こらないものですが、利用目的を少し離れたところに適用しようとすると、チーム内にエキスパートが居ないとつらい事になります (ミスマッチな Hibernate の利用でそのような話を耳にします。)。

iBATIS については、それ自体は SQL Mapping の部分に徹しており (以前のバージョンは DAO も含んでいた) 見通しの良いフレームワークだと思います。

森田


.

ターゲット年齢に集中

はてなブックマーク del.icio.usブックマーク ターゲット年齢に集中をYahoo!ブックマークに追加
セコンドライフから仮想空間、バーチャルワールドのサイトをいくつか開発されました。
この中に成功した物もいくつがあります。それぞれの特徴がありますが、その中の一例として、
最近アメリカのニュースにも広がっているクラッブペンギンは「1年でアクセスは12倍以上に増大し、
現在は月400万以上のアクセスがあるそうである。」


クラッブペンギン子供向けに用意された数あるネットコミュニティ型バーチャルワールドです。
可愛いキャラクタ、キャラクタの着せ替え(アバタの作成)、アイテムの取引、チャット、ゲームなど子
供がハマる要素が十分に含まれている。
「Ultimate Safe Chat」と「Standard Safe Chat」の二通りを用意しており、年齢により登録時に
選択できるようになっている。
ユーザはキーボードでタイプして自由に発言が可能だが、発言される内容については
ワードフィルタがかけられており、不適切な発言はできないようになっている。
親も安心に使わせる。
ターゲットは子供ですから、この年齢に集中していくつか工夫をやってました。
Vsideの企画経験にも、最初にいっぱいをやりたくって、街が綺麗にしても、ユーザが集まらない
経歴があったそうです。結局teenagerにターゲットして、音楽とダンスに集中して、成功になった。

cui


.

他山の石

はてなブックマーク del.icio.usブックマーク 他山の石をYahoo!ブックマークに追加
自浄作用を組織が持つためにはどんなアイデアがありますか?
所属している人間ごと三尺流れるしか・・・。三尺では足りないかもしれませんね。

常に新しいものにチャレンジし続けなければと思いつつ、気が弱くなると
すぐ得意分野や、既知の領域に進みだすのは悪い癖だなと日々反省です。
試してみようかな・・・。




.

タピオカが世界を救う・・・といいな。

はてなブックマーク del.icio.usブックマーク タピオカが世界を救う・・・といいな。をYahoo!ブックマークに追加

理化学研究所、キャッサバ(タピオカ)完全長cDNA約11,000種を同定


仕事とは直接関係がないのですが、最近昼食のデザートにタピオカが出ることが多かったので、
気になり読んでみました。バイオ燃料になることを強調しているようですが、
そもそもバイオ燃料とするのであればそれように遺伝子を改良したものを用いればよいと
思ったりするのは置いておいて、意外だったのが「茎を畑に突き刺すだけで繁殖」するそのタフさ。


デザートから軟弱なイメージが先行していましたが、随分と野性味溢れる植物のようです。
皆さんはご存知でしたか? 私もその根性を見習いたく思います。


tRobo


.

MovableTypeテンプレートを有効活用する

はてなブックマーク del.icio.usブックマーク MovableTypeテンプレートを有効活用するをYahoo!ブックマークに追加

グループ企業であるSBI Point Union様の企業サイトが、
新しくMovableTypeを利用してリニューアルし、
弊社もお手伝いさせていただきました。

今回のUpdatedでは、メンテナンスの運用面で配慮した設計を行い、
何よりもCMSの本質である、
「システム担当者だけではなくみんながみんなに情報を発信する」
ものを作り上げようとSBI Point Union様と様々な議論をし、
やっとカットオーバーいたしました。

MTは極端な話Blogを開設するだけなら、10分でできます。
先日開設された東京0区ブログも、単純な構造なので、
テンプレートの構築だけなら1時間かからずにセットアップが完了いたしました。

一方で大規模なニュースサイトの構築ですと3ヶ月、半年という規模で、
様々な部分を構築し、カスタマイズしている事例も見受けます。

大きなものも、小さな物もエンタープライズ版52500円(シングルサーバー・5ユーザー)で
同じプラットフォームで受け入れてくれる、
MovableTypeの奥深さを改めて知った次第です。


.

イマチューちゅ~

はてなブックマーク del.icio.usブックマーク イマチューちゅ~をYahoo!ブックマークに追加
当社が提供するメッセージサービス「イマチュー ~世界の中心でイマをさけぶ~」が先日リリースになりましたが、皆さんもうご存知でしょうか?今の気持ちをさげぶサイト、そこではいろいろな方の心のさけび、つぶやきを垣間見ることができます。

つい先日は、婚約発表まで行われました!現実の世界のつながりは無いだろう、たくさんの方々から「おめでとう!」コールを浴びていました。

そして、本日Yahoo!ニュースにも取り上げられました!
http://headlines.yahoo.co.jp/hl?a=20071130-00000031-inet-mobi

みなさんも是非ご訪問くださいね♪


.

ワーキングプア問題

はてなブックマーク del.icio.usブックマーク ワーキングプア問題をYahoo!ブックマークに追加

今日、NHKで昨年7月と12月に放送した再放送を見た。

「ただ、普通の生活がしたい」

孤児施設にいた子供が話していた言葉が心にのこった。

格差社会がもたらした結果なのか。

大きな利益を得ている企業や人もいる反面、家庭もなくなり、

普通に食べることも学習することも難しい大人・子供が増えている現実。

皆が早く普通の生活ができるような社会となるよう祈りたい。

 

 

 

 

 


.

JAXB の簡単な使い方

はてなブックマーク del.icio.usブックマーク JAXB の簡単な使い方をYahoo!ブックマークに追加

前回 (http://www.sbirobo.com/2007/11/jaxb.html) の続きです。

前回は XML に変換したいクラスにアノテーションで印を付けたところまでやりました。こんな感じでしたね。

@XmlRootElement(name = "config")
@XmlType
public class Configuration {
  @XmlAttribute(name = "version") public String version;
  @XmlElement(name = "server") public Server server;
  @XmlElementWrapper(name = "field-def-list")
  @XmlElement(name = "field-def") public List fieldDefList;
}

さて使い方ですが、まず jaxb.index ファイルを用意します。アノテーションを付けたクラスのクラス名を列挙したものです。クラスと同じパッケージ階層に置きます。上の例ですと下記のようになります。

Configuration
Server
FieldDef

ではアンマーシャライズ (XML から Java に変換) してみましょう。

// アノテーションを付けたクラスが格納されているパッケージ名を指定
JAXBContext jaxbContext = JAXBContext.newInstance("myapp.config");
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
unmarshaller.setEventHandler(createValidationEventHandler());
configuration = (Configuration) unmarshaller.unmarshal(
    this.getClass().getClassLoader().getResourceAsStream("config.xml"));

ポイントは JAXBContext.newInstance() の引数にパッケージ名を渡すところです。上の jaxb.index を置いたところですね。

以上、細かな説明を省いたところもありますが、あまり考えずにこれだけで XML ファイルから Java インスタンスの生成が実現できます。かんたん! だと思いますがいかがでしょうか。


.

落とし物はネットで検索 改正遺失物法きょう施行

はてなブックマーク del.icio.usブックマーク 落とし物はネットで検索 改正遺失物法きょう施行 をYahoo!ブックマークに追加
落とし物の取り扱いについて定めた改正遺失物法が、12月10日に施行された。落とし物情報を都道府県警のWebサイトで検索できるようにして落とし主へ の返還率アップを目指しているほか、拾得物の保管期間を6カ月から3カ月に短縮し、保管費用の削減を狙う。同法の改正は約50年ぶり。 byITmedia

動画、画像を探したり面白い記事を探したり、探すものが多様化してますが”ものを探す” 探すという行為の原点に戻ったサービスですね。デジタルなもの以外に生活を便利にする必要なものがまだまだありますね。
忘年会シーズンに遺失物は増えるみたいですので忘れ物をしないように気をつけてくださいね。
今年一年の嫌なことは忘れても大切なものは無くさないように!!

K



.

『Baccarat ETERNAL LIGHTS 2007-歓びのかたち- 』

はてなブックマーク del.icio.usブックマーク 『Baccarat ETERNAL LIGHTS 2007-歓びのかたち- 』をYahoo!ブックマークに追加
『Baccarat ETERNAL LIGHTS 2007-歓びのかたち- 』
を見に先週末恵比寿ガーデンプレイスに行ってきました。

クリスマス前の恒例イベントとして貫禄イベントになってきてますね。
本日動画がアップできませんので、明日アップ致します。

もうすぐ今年も終わりです。今年の仕事は、来年に持ち越さず
年内で全て片付けたく思っております。

年末の忙しさに負けないよう営業に励みます。

担当:MFX




.

出荷前のテスト1 - ペネトレーションテスト

はてなブックマーク del.icio.usブックマーク 出荷前のテスト1 - ペネトレーションテストをYahoo!ブックマークに追加

何回かに分けて、サービス出荷前のテストについて、公開できる範囲のことを書いていきます。出荷前に見つけられれば重要な欠陥ということで内部処理できますが、出荷