2008/03/15

引っ越しました!

Bloggerのテンプレをいじろうとするとしょっちゅう怒られるのにそろそろ耐えられなくなったのではてなに行きます。
ブログ名は同じSoSaiSo

2008/03/14

mecab0.97とmecab-skkserv0.03の相性はぷち最悪です

mecabが0.97になったので入れてみたらmecab-skkserv0.03が動かなくなりました。
そして実はmecab-skkservのインストールはmecabのインストール前のコンフィグに依存してたのを知ったのでメモ。

mecab-skkservでは文字コードがeucの辞書を使うので、mecabをインストールする際に

% ./configure --enable-utf8-only

とかやったら、動かなくなりました。
ですので、utf-8にしたかったら普通にインストールした後に辞書だけutf8にしましょう!

ちなみにipa辞書の場合は以下のようにしてutf-8にしましょう。
% cd mecab-ipadic-2.7.0-xxxx
% /usr/local/libexec/mecab/mecab-dict-index -f euc-jp -t utf-8
# make install
% cd mecab-skkserv-0.0.3
% /usr/local/libexec/mecab/mecab-dict-index -f euc-jp -t utf-8
# make install


【追記】
生駒日記(2008-02-22)にて、工藤さんがmecab0.97で動くとおっしゃってますが、動きませんが!?
助けてタククードー!

2008/03/10

「MOTの達人」を読んで感じたこと

UIはユーザのためにあるのに、UIにユーザが合わせるのはおかしい。

言葉を発する時、必ず相手がいる。
その相手に合わせた言語表現をすることが大切である。

2008/03/04

javaで、端末の文字コードをいじるには

Eclipseの場合

デフォルトがMS932

変更時

実行ダイアログ > 個々のアプリケーション > 共通 > コンソール・エンコード

ただし、Eclipseの場合はコンソールがUTF-8に対応していないっぽいので日本語は文字化けします。

Mac OS Xの場合

デフォルトがSJIS

変更時

(例)
$ javac -encoding UTF8 Test.java
$ java -Dfile.encoding=UTF8 Test

2008/03/01

「ロジカル・シンキング 論理的な思考と構成のスキル」で響いたこと

読書中の付箋とブログ活用術に共感したので、自分もこれからはちょこちょこっと未来の自分のためにいつでも取り出せる状態にしよっと。

  • ロジカル・コミュニケーションとは論理的なメッセージを伝えることによって相手を説得して、自分の思うような反応を相手から引き出すこと
  • 人に何かを伝える時は、まずテーマと相手に期待する反応を考える(いきなり伝える中身は考えない)
  • 提案する前に共通認識を作ることが大前提
  • 相手に期待する反応には「理解」・「フィードバック」・「行動」がある
  • 結論は課題の答えの要約(自分の考えの要約ではない)
  • 結論は曖昧性を排除
  • コインの裏返し(「Aが必要だ。なぜならAがないからだ。」)ではなく、その現象を引き起こしている数ある原因の中から、なぜそれを選んだのかを説明
  • 客観的な事実としての根拠とは、数字など反論する余地がないもの
  • 参入すべきか?→3c(市場の現状、競合他社の動き、自社の現状)を見る
  • 考えた方法が「自社だけでなく他社にも通用する」・「10年前でも10年後でも通用する」ならそれは方法でも何でもない
  • 具体性とはどうすればよいかを具体的に考えられているということ
  • 具体性を出すには「自分がその実施者だったら、何を知っていれば具体的に動けるのか?」を考える
  • 文章を読む時は「文章の目的」と「自分に期待される反応」を考えて読む
  • 説得力のない答えに見られる欠陥「話の重複・漏れ・ずれ・飛び」
  • MECEの前提「あるべき全体が分かっていること」
  • MECEの種類「全体集合を完全に要素分解できる場合」・「これだけ押さえれば大丈夫だとみなせる場合」
  • グルーピング=ボトムアップMECE
  • 日頃から「つまり何?(So What?)↑」「なぜそう言える?(Why So?)↓」を考える
  • 論理構造の同一階層内に展開する要素数は多くても4つ
  • 自分の考え方を強調できる解説型(結論を事実→判断基準→判断内容で解説)では判断基準が味噌
  • 相手に結論を正しく理解して正しくアクションを取って貰いたい時は並列型(結論を事実から導く)
  • 「答えを出すために検討すること」と「答えを相手に伝えること(コミュニケーション)」とは全く異なる

2008/02/29

ATOK2008レビュー

ようやく今日ATOK2008を手に入れました。さっそく行きましょう。

2007からの変化とか気になったこと

  • 間違いを修正して確定したのに次に反映されていない
例題:なんかとってもきもちいいさ

変換すると「なんかとっても気持ちいい」となる。これを「なんかとっても気持ちいい」に再変換して確定する。
しかし、次にまた同じ文を変換しても「なんかとっても気持ちいい佐」となってしまう。*1

  • ATOKダイレクト
結果が返ってくるのが遅すぎて全く実用的ではない。
しかも頑張って待っても、表示される説明はとても省略されたモノ。
これならWeb検索した方がいいと感じる。
これからの追い上げに期待。

  • ATOKハイブリッドコア
まだ文章をいっぱい打っていないので精度は分からない。
単語の間違いはあるが、文節間違いが少なくなったような印象は確かにある。

もうちょっと使ってみて、分かったことがあったらまた加工と思う。(←この誤変換はいただけない・・・)




*1 もしここで予測変換をあなたがONにしているなら、【なんかとっても気持ちいいさ】が予測候補として出てきてくれるが。

2008/02/17

たまごち

たまごちとは、「魂のごちそう」の略である。
魂のごちそうとは、お客様からの感謝の言葉である。
楽天用語。

これなら、スタッフがおいしく頂いてもいいですよね。

2008/02/16

なんちゃら解析 + Google Chart API

なんちゃら解析 + Google Chart API
Google Chart APIを試そうと思ってちょっと昔のプログラムと一緒にテスト。
まだ漢字に対応していないようです。

EclipseでJavaのバージョンの違いを吸収するには

私の環境
クライアント側: Java1.6
サーバ側: Java5

この時、サーバにアップロードする前にすること。

  1. プロジェクトを右クリック。
  2. プロジェクト・ファセットの[modify Project]をクリック。
  3. Javaのバージョンをサーバ側のバージョンに合わせて、[終了]をクリック。
  4. Java コンパイラーのコンパイラー準拠レベルをサーバ側のバージョンに合わせる。

結構ハマっちゃいました。

2008/02/14

ハードディスクが認識しない・・・

Debianをインストールしたい。
しかし、ハードディスクを認識しません。
DellのPowerEdge1950ⅢのSATAⅡハードディスク。
まだドライバないのかな?って思いましたが、ドライバをFDから読み込んだりしてもダメ。
Ubuntuとか他のLinuxを入れてみようとするもダメ、ダメ、ダメ。
ここまでで5時間近く経過・・・。

さすがにRedHat Enterprise Linux5なら動くだろう・・・。
そう思って注文したのが今週の火曜の事。

それが今日、先輩が最初にハードディスクを抜いた後にしっかりと差し込んでいなかったのが原因と判明しました。
そんなこともあるので、みなさんも注意してくださいね!

2008/02/13

mod_cacheと圧縮転送のロミオとジュリエット的関係

圧縮転送とmod_cacheを一緒にやると文字コードがおかしいって怒られる。
キャッシュしたgzファイルを読み込む時になぁんか不具合が起こるのかな。
とりあえずmod_cacheをやめたらうまくいきました。

ひ☆かく★すぅ復活しました!

新しいURIはここです

ひ☆かく★すぅ

是非とも一度お試しあれ~

Apache2.2.8とTomcat6の連携

前にdebianに入れた時はa2enmodってコマンドで動的に組み込めたのですが、コマンドありません。
悩んでるより./configureし直した方が早いと決断して、いろいろ入れました。

$ ./configure --enable-cache --enable-disk-cache --enable-mem-cache --enable-proxy --enable-proxy-ajp --enable-rewrite --enable-so


cache, disk-cache, mem-cacheはキャッシュするために使います。
詳しくは、@IT「強化されたドキュメントキャッシュ機能を使う」へどうぞ。

proxy, proxy-ajpはTomcatとの連携に使います。
使い方は以下の通り。

<Location /~hoge/ServletFuga>
ProxyPass ajp://localhost:8009/~hoge/ServletFuga
</Location>


rewriteは圧縮転送に使います。
その際の.htaccessの例は以下の通り。

RewriteEngine on
RewriteCond %{HTTP:Accept-Encoding} gzip
RewriteCond %{REQUEST_FILENAME} !\.gz$
RewriteCond %{REQUEST_FILENAME}\.gz -s
RewriteRule .+ %{REQUEST_URI}.gz

ForceType application/x-javascript
AddEncoding x-gzip .gz

TomcatのJDNI設定

Tomcatってソースを解凍すれば動くから、その辺は省いて、JDNIの設定についてメモ。

利点

  • Server上にDBの設定を施すことによってプログラム内にDB情報を書かなくてすむ
  • データプーリング可能になる

web.xmlの例
<resource-ref>
<description>postgreSQL Datasource</description>
<res-ref-name>jdbc/postgres</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>

server.xmlの例
<context crosscontext="true" debug="0" docbase="tuntun" path="/tuntun" reloadable="true" source="org.eclipse.jst.jee.server:tuntun">
<resource auth="Container" driverclassname="org.postgresql.Driver" maxactive="20" maxidle="10" maxwait="-1" name="jdbc/postgres" password="" type="javax.sql.DataSource" url="jdbc:postgresql://DBサーバのIPアドレス:5432/DB名" username="postgres" />
</context>

MacOS X 10.3(Panther)にJava5をインストールする方法

MacOS X 10.3(Panther)にはJava5は入らないよ、常識的に考えて。
でも、ねちっこく探してたらやっぱりやってる人いましたよ!
Mac OSX Pantherの設定
以下の文章は引用。

通常のインストーラからは、PantherにJava5をインストールする事が出来ない。これはインストーラがTigerのバージョンを確認しているからだと推測できる。そのためコマンドラインからインストール作業を行う事でJava5をインストールする必要がある。

アップル・コンピュータ社のJava 2 SE 5.0 Release 3からdmg形式のバイナリファイルをダウンロードし以下のようなスクリプトを実行する。

※スクリプトがそのままだと動かなかったので、書き直したのを張っときます。

#!/bin/bash

# Java 5 Release 3 Installer

IMAGE="J2SE50Release3.dmg"
DEFAULT_MOUNT="/Volumes/J2SE5.0Release3Tiger"

# mount
hdiutil mount ${IMAGE}

# unpacking
sleep 5
cd /
gunzip -c /Volumes/J2SE\ 5.0\ Release\ 3\ Tiger/J2SE50Release3.pkg/Contents/Archive.pax.gz | sudo pax -vr;

# unmount
hdiutil unmount ${DEFAULT_MOUNT}

# Java5 default
cd /System/Library/Frameworks/JavaVM.framework/Versions/
sudo rm CurrentJDK
sudo ln -s 1.5.0 CurrentJDK

# check
java -version;


これでTomcat6を入れることが出来ました!

2008/02/11

Apache2.2.8をMacOS X 10.3(Panther)にソースインストール

Apache2.2.8をインストールしたので、一応メモしておく。

$ tar xvfz httpd-2.2.8.tar.gz
$ cd httpd-2.2.8
$ ./configure --enable-so # DSOによる動的機能追加を有効に
$ make
$ make install # へたこいた貴方はmake clean


この後にapacheユーザに権限渡したり自動起動設定したりする。けど今回は略。

/usr/local/apache2/conf/httpd.confにて、変更したところのみ記述。

ServerName myDomain:80
DocumentRoot /myDocumentRoot/

<Directory "/myDocumentRoot/>
Options FollowSymLinks
AllowOverride All
</Directory>

ServerTokens Prod
ServerSignature Off


Option Indexes : クライアントがディレクトリのURIを要求、かつそのディレクトリ内にindex.htmlが存在しない時に、ファイル一覧を返すのを許可。
Option FollowSymLinks : サーバがディレクトリ内のシンボリックリンクをたどるのを許可。
AllowOverride All : .htaccessで何だって上書きできる。
ServerTokens Prod : 外部の人に対してOSと組み込んだモジュールを非表示
ServerSignature Off : サーバのバージョンなどを非表示

ScriptAliad /cgi-bin/ "/myDocumentRoot/cgi-bin/"

<Directory "/myDocumentRoot/cgi-bin/">
AllowOverride All
Options ExecCGI +SymLinksIfOwnerMatch
SetHandler cgi-script
</Directory>


Options ExecCGI : CGIスクリプトの実行許可。
Options SymLinksIfOwnerMatch : 所有者が同じ時だけ上述のFollowSymLinks許可。
SetHandler cgi-script : ディレクトリ内のファイルを実行する。要ExecCGI。

ここからは個人のディレクトリ以下に作るために必要。
Include conf/extra/httpd-userdir.conf の#を外す

以下は一番下に書かなかったら読み込まなかった。。。ハマりました。

<Directory "/home/*/public_html">
AllowOverride All
Options SymLinksIfOwnerMatch
<Limit GET POST OPTIONS>
Order allow,deny
Allow from All
</Limit>
<LimitExcept GET POST OPTIONS>
Order deny,allow
Deny from all
</LimitExcept>
</Directory>

<Directory "/home/*/public_html/cgi-bin">
AllowOverride All
Options ExecCGI
SetHandler cgi-script
</Directory>


(追記)

よーし、Apache2.0 + Tomcat6.0 + Java5で動いてたプログラムを移行しよう
      ↓
MacってJava5使えるようになったのって10.4からかよ
      ↓
Java5の文法使えないじゃん
      ↓
ふー、Java1.4でコンパイル通ったぞ
      ↓
Tomcatもバージョン4入れるしかないよな
      ↓
動かないっす。。。

2008/02/09

バーズアイ(bird's eye)

バーズアイ(bird's eye)とは、物事を鳥のように高いところから見る目である。

私としては俯瞰という言葉の方が好き。
だから、バーズアイを持て!よりも俯瞰して見ろ!の方がしっくりくる。

HTMLタグ、エスケープ、JavaScriptにて。

Bloggerにそのままどっかから持ってきたコードとかを貼り付けると、タグ扱いされてすごく嫌だったことってありませんか?

どこかに簡単に変換してくれるWebサイトありそうだったんだけど見つからなかったので作っときました。

HTMLタグをエスケープするJavaScript

どこか変だったらコメントをよろしくお願いします。

Bloggerのtitleの変更方法

ずっと、titleの前にブログ名が来るのが嫌だった。
titleが長すぎた時に、「SoSaiSo : ながーいタイトル...」って感じで途中でタイトルが切れてしまう恐れがあるから。
ということでブログ名を後ろにしようと考えた。
とりあえずテンプレートをじーっと眺めていたら

<title><data:blog.pageTitle/></title>


のところがあやしいのは分かった。
ということでググってみると、Changing the Blogger Title Tagを発見!

どうやら、次のように置き換えればいいらしい。

<!-- Start Widget-based: Changing the Blogger Title Tag -->
<b:if cond='data:blog.pageType == "item"'>
<b:section id='titleTag'>
<b:widget id='Blog2' locked='false' title='Blog Posts' type='Blog'>
<b:includable id='comments' var='post'/>
<b:includable id='postQuickEdit' var='post'/>
<b:includable id='main' var='top'><title><b:loop values='data:posts' var='post'><b:include data='post' name='post'/></b:loop> ~(ここですよ!) <data:blog.title/></title></b:includable>
<b:includable id='backlinkDeleteIcon' var='backlink'/>
<b:includable id='feedLinksBody' var='links'/>
<b:includable id='backlinks' var='post'/>
<b:includable id='status-message'/>
<b:includable id='feedLinks'/>
<b:includable id='nextprev'/>
<b:includable id='commentDeleteIcon' var='comment'/>
<b:includable id='post' var='post'><data:post.title/></b:includable>
</b:widget>
</b:section>
<b:else/>
<title><data:blog.pageTitle/></title>
</b:if>
<!-- End Widget-based: Changing the Blogger Title Tag -->


太字の所を適当に変えれば、titleとブログ名の間に何でも挟める。
デフォでは~だったけど、私は|にした。
☆とかにしたらいいと思うよ(笑)

2008/02/08

シビア思考

シビア思考とは、自分に対して厳しく思考することである。

他人に優しく、自分に厳しく。

2008/02/06

情報セキュリティ技術実践セミナーに参加

講師はアークンの渡辺社長。
セキュリティには全くの素人だったので、今の業界でのトレンドが聞けて、勉強になった。
セミナーの内容は、社長が選んだ2007年の12大脅威についてだった。
以下、自分の気づきと共にまとめる。

1. 受動的な脆弱性の増加

受動的攻撃とは、ユーザがWebブラウザやメールクライアント上で起こす何らかの行動をきっかけにする攻撃。ほとんどの場合、マルウェアを利用してOSやアプリの脆弱性を突く。HTTP(80/TCP)を利用することが多いのでゲートウェイで防ぐ事が難しい。

人的対策

  • 最新のセキュリティパッチをあてる
  • メール①プレビュー禁止②テキスト表示③添付ファイル/リンクをクリックしない
①について。HTML形式のメールの中に悪質なスクリプトが入っている場合がある。
③について。いくら友人のメールアドレスだったとしても、のっとられていることもある。

技術的対策
  • クライアント①マルウェア対策製品②パーソナルファイアウォール
  • ゲートウェイ③トラフィックをチェックするワクチン④IPS(進入防御システム)
2. 恒常化する情報漏洩

賠償金も高額になってきているので、ますます企業は情報セキュリティー対策をしなければならない。

3. ウェブアプリを狙った攻撃の傾向
  • SQLインジェクション
  • XSS
SQL インジェクションツールが出回っている。
XSSでの常套手段はiframe。
文字エンコーディングの曖昧さも回避すべき。「xss utf-7」でググってみて
画像XSSとかもあるみたい

4. 巧妙化する標的型攻撃

標的(スピア:spear:槍)型攻撃とは、特定の組織を標的にした攻撃。その組織に特化した工夫がなされることもある。

ソーシャルエンジニアリングの手法と組み合わせて使われることもある。
ex. 顧客を装う、組織の人間を騙る

5. 正規のサイトも信用できない

正規サイトが改ざんされてるかもしれないから。

6. 国内製品の脆弱性

私御用達のLhaplusもそうでした。。。

7. 検知されにくいボットの猛威

最近のボットはp2p型のもある。

8. SEOポイズニングの広まり

検索結果上位ページが悪質サイト。
であんまり見ないけどね。

9. 組み込み製品の脆弱性

携帯とかにも対策を!

10. プロトコルに対する脆弱性

APOPとかSIPとか。
プロトコルはやばいっすよね。

11. 減らないスパムメール

特にクリスマスとか元旦とかにいっぱい流れるんだよね。

12. ネットバンクの金銭的被害

ネトゲ廃人の皆さん自重(笑)

2008/02/01

米Microsoftが米Yahoo!に買収を提案

ITmedia「Microsoft、Yahoo!に買収提案 総額446億ドル

米Microsoftは2月1日、米Yahoo!に対して買収を提案したと発表した。
買収総額は446億ドル(約4兆7500億円)。

これってGoogleに対抗するためだろうけど、今Yahoo!を買う意味ってあるのだろうか。
まあ、Webの技術的にYahoo!の方がMicrosoftよりも一日の長があるからかな。
それと、Web上のユーザ数も。
Yahoo!Japanにはどんな影響が出るのだろうか。
孫社長が損社長にならない為には今のうちに一緒に売っちゃう・・・のがいいのか?

(追記)
ITmedia「Yahoo!が声明、「検討する」

米Microsoftによる買収提案に対して米Yahoo!の取締役会が声明を出した。
「株主の長期的な利益を考慮して検討する」という。

ITmedia「バルマー、「日本のヤフーとの関係を理解し関係を変えることはない」

米Microsoftのスティーブ・バルマーCEOは、ソフトバンクとの関係の深いYahoo!の日本法人について、「現状のYahoo!が持っている関係を理解し、関係を変えることはない」と語った。

ということは、Yahoo!Japanはそのまま残る・・・と。
でもYahoo!ってブランドがMicrosoft色には染まっていくんだろうな。。。

「効率が10倍アップする新・知的生産術―自分をグーグル化する方法」を流し読みした

私は常にRSSが溜まってしまうので、それをいつ読めばいいのか悩んでいた。
この本を読んだことによって、RSSなんていらねぇ!と切り捨てる勇気がちょっぴり持てた。
日々更新されるWebの情報やブログとは違って、本は著者の何年ものノウハウが詰まっているのだから。
・・・・しかし最新技術や最新サービスについて知りたい。知りたい。知りたい。
Danさんとか巷で有名なブロガーの皆さんは普段どうやって仕事して本読んでRSS見てブログ書いてるんだろ・・・。
やっぱり速読なのか??と思ってしまった今日この頃。

2008/01/24

Linux(Debian)にMeCabとmecab-java(javaバインディング)のインストール方法

必要なファイルはMecab、IPA辞書、mecab-java。

1.MeCabのインストール

> tar -xvzf mecab-0.96.tar.gz
> cd mecab-0.96
> ./configure
> make
> make install

2.IPA辞書のインストール+UTF-8に変換

> tar -xvzf mecab-ipadic-2.7.0-20070610.tar.gz
> cd mecab-ipadic-2.7.0-20070610
> ./configure
> make
> make install
> /usr/local/libexec/mecab/mecab-dict-index -f euc-jp -t utf-8
> make install

3.mecab-javaのインストール

mecab-javaのMakefile内6行目を以下のように修正

INCLUDE=/usr/local/src/jdk1.5.0_12/include/ # 自分のjavaのincludeFileへのパス

makeする

> make

すると、MeCab.jarとlibMeCab.soファイルが出来る。

4.テストの実行

> export LD_LIBRARY_PATH=.../mecab-java-0.96:$LD_LIBRARY_PATH
> export CLASSPATH=.../mecab-java-0.96/MeCab.jar:.
> javac test.java
> java test

2008/01/22

DeNAのロジカルシンキング講座に参加

IT業界でもかなりの注目株だと思っているDeNAのセミナーに行ってきた。
まず一言で言うと、アカデミックなエンジニアとして非常に聞く価値があった。
というのも、ビジネスで通用するサービスをどんなふうに考えていけばいいのかという道筋を示してくれたからである。
ロジカルシンキング講座と銘打っているが、実は新規事業の立ち上げ方講座と言ってもいい内容であった。

セミナーの流れとしては、
基礎講座⇒休憩⇒実践講座(グループディスカッション含む)
といった感じだった。
基礎講座でのポイントは

  • 儲かる仕組みを回す人ではなく創る人になれ
  • 感覚的な解は無意味
  • ビジネスでは「だいたいこっち」ってのを早く出すのが大事
  • 実際を見てきたほうがよい
  • ツールを使いこなして考えを引き出す
実践講座でのポイントは
  • プロジェクト=ブレスト⇒業界研究⇒PLAN⇒検証⇒実行
  • 数字を押さえることが大事
  • PLAN=目的⇒解決⇒実現
  • 検証=仮説⇒切り分け⇒分析⇒ソース
  • 仮説の切り分け=調査のタスク
  • 実行が一番大事(企画に時間使いすぎるな)
  • サービスは雨乞いと一緒(気合だー)

全体の感想としては、グループディスカッションのリーダーをさせていただいたのだが、いろいろな意見をまとめたり、方向修正したり、自分の意見を言ったりするのが初めてだったので、それも為になった。
三人寄れば文殊の知恵とはいうけど、ほんとにいろんな意見をぶつけているといろいろと思い浮かんで面白かったなぁ。

2008/01/18

WindowsにSenをインストールする方法

必要なファイルは、Perl(今回はActivePerl)、Ant、そしてSen

1. 導入
Perlはインストーラでお手軽インストール。
Ant、SenはDownloadしたら、Program Files内には入れてはいけない
スペースがあるとうまくPathが通らないためにエラーに泣かされる。
なのでC:\Javaとか作ったりしてどっちも突っ込んどく。

2.辞書の構築
UTF-8にしたかったら

sen\conf\sen.xml、sen-processor.xml 内
<charset>utf-8</charset> に変更

sen\dic\dictionary.properties 内
sen.charset=UTF-8 に変更 # dic.charset=EUC_JPは変更しない

コマンドプロンプトで、

> cd c:\Java\sen\ <-senを解凍したディレクトリ
> cd dic
> c:\Java\apache-ant-*.*.*\bin\ant -Dperl.bin=c:\Perl\bin\perl.exe

3.動作確認
> cd c:\java\sen\bin
> set JAVA_HOME="c:\Program Files\Java\jdk*.*.*"
> set SEN_HOME="c:\Java\sen"
> sen.bat
.....
SenはJavaで実装された形態素解析器です。 <- 入力したテスト文
Sen (Sen) 未知語(0,3,3) null null
は (は) 助詞-係助詞(3,4,1) ハ ワ
Java (Java) 未知語(4,8,4) null null
で (で) 助詞-格助詞-一般(8,9,1) デ デ
実装 (実装) 名詞-サ変接続(9,11,2) ジッソウ ジッソー
さ (する) 動詞-自立(11,12,1) サ サ
れ (れる) 動詞-接尾(12,13,1) レ レ
た (た) 助動詞(13,14,1) タ タ
形態素 (形態素) 名詞-一般(14,17,3) ケイタイソ ケイタイソ
解析 (解析) 名詞-サ変接続(17,19,2) カイセキ カイセキ
器 (器) 名詞-接尾-一般(19,20,1) キ キ
です (です) 助動詞(20,22,2) デス デス
。 (。) 記号-句点(22,23,1) 。 。

2008/01/16

次にWebサービスを作る時に考えたいこと

私は「ひ☆かく★すぅ」というWebサービスを公開していたのは、以前のエントリーでも書いた。
ひ☆かく★すぅの概要は以下の通りだ。

  1. ひ☆かく★すぅ では、ひらがなの名前から、名前の候補を表示します。(ただし、名前の候補がない場合は、何も表示されません。)
  2. 名前の候補それぞれにおいて、順位とポイントが表示されます。
  3. 表示では、名前はポイントが高いほうから順に並べられています。(ポイントの高いほうから順に順位がつけられています。)
  4. 表にあるラジオボタンをクリックすると、チェックされた名前に関する運勢とWikipedia検索結果が表示されます。
  5. 「エゴサーチ」ボタンをクリックすると、チェックした名前に関するいろいろな検索が出来ます。
  6. 「今日の運勢」ボタンをクリックすると、あなたの今日の運勢が表示されます。また、楽天にラッキーアイテムが存在すると、ラッキーアイテム関連検索を行い、別のタブで開きます。

今だから思う、もっとこうしたら良かった点などをまとめてみる。
  • ユーザーが「また来たい」と思う仕組み作りをする
静的なデータのみを使っていると、結果は変わることがない。
すると頻繁にアクセスしてくれるような常連ユーザーは存在せず、アクセスが増えていかない。

ではどうすればいいのだろうか?

ユーザーがデータを追加していける仕組みを作ることである。
ニコニコ動画やflicker、Twitterなどはすべてそうである。つまり、ユーザー参加型サービスである。
これによって、ユーザーが増えるだけコンテンツも増えるのでまた来たいと思ってもらえる。

ユーザーがカスタマイズできる仕組みを作ることである。
iGoogleなどである。これによってサービスが身近に感じてもらえ、使ってもらえる。
  • いろいろな使い方をされるようなものを作る
機能が一つに決まっていては、つまらない。
サービスの中でもある程度楽しみ方が自由であった方がおもしろい。
例えば、詩や歌などがそうだ。
感じ方や楽しみ方は聞いている人によってそれぞれであり、それによって作った本人も考えさせられるようなもの。
そういうものを私も作りたい。

2008/01/14

予測入力まとめ

今までの予測入力には大きく分けて二つのタイプがある。

  1. 辞書にあるものを先頭一致で補完するタイプ(省略補完)
  2. ドキュメント中の単語と共起して単語を補完するタイプ(動的補完)

このうちの1においてさらに
  1. 静的な辞書を用いるもの(国語辞書など)
  2. 動的な辞書を用いるもの(ユーザー辞書など)

の二つに大別できるだろう。
以下に、各システムの予測入力の特徴を列挙してみる。

MS-IME
  • 優先度あり
  • 字面のみを用いる(意味を考えない)
  • 共通部分を抜き出す
  • メモリorファイルに書き出す
  • 予測候補はユーザーの変換履歴からのみ
  • 先頭一致

ATOK
  • 優先度あり
  • 形態素で区切って、それぞれを予測に反映
  • 最小の形態素と次の形態素を加えたものを表示する(次の形態素を加えたものの方が優先度が高い)
  • 合わせたら一つの意味となりそうなものが前に来ていたら、くっつけて登録
  • よく使うもの(?)は自動的にユーザー辞書に収録
  • メモリorファイルに書き出す
  • 予測候補は各種辞書(カスタマイズ可能)、ユーザーの変換履歴
  • 先頭一致

Nanashiki
  • 優先度あり(一番最後に発見した単語)
  • 予測候補はコンテキスト文書(辞書化しない)
  • migemoで動的サーチ後に周辺を茶筅で切って、単語の先頭ならば候補にする

Kukura
  • 優先度あり(最近閲覧した文書)
  • 予測候補は閲覧した文書
  • あらかじめ茶筅で単語を切っておく
  • 候補は名詞、未知語及びそれらの複合語
  • 複合語はすべての候補の組み合わせを有効にしていない

PRIME
  • 要調査

MS-IMEとATOKの違い
  • MS-IMEでは、意味を全く考えないため、"新潟大学"、"新潟大地震"を確定するとその共通部分である"新潟大"が一番優先度が高くなるが、ATOKでは同様の確定をしても"新潟大学"、"新潟大地震"しかでない
  • ATOKでは"新潟"で確定後に"大"を確定すると"新潟大"が登録される
  • ATOKでは"複合名"で確定後に"名"を消して"名詞"を確定しても"複合名名詞"が登録されることはない


携帯電話の予測入力システム
  1. POBox(Prediction Operation Based On eXample)
  2. APOT(Advanced Prediction Optimization Technology)

POBoxとAPOTの違い
  • APOTはPOBoxよりも付属語が長めに区切られる(例: "~して" → POBox: "~","し","て" APOT: "~","して")
  • APOTは直前に使われた候補が先頭
  • POBoxは頻度の高い候補が先頭

従来の予測入力での不便な所
  • 数字や英数カナ変換で入力した文字は学習されない
  • コピーアンドペーストは学習されない

携帯電話とパソコンの違い
  • 入力するキーの数(=入力にかかる時間)

私が使う、『予測入力』
  • 特殊な複合名詞(簡単な文であれば、いちいち予測入力候補を探さずに、一気にタイピングして変換をするのが早い)
  • 繰り返し入力

予測用複合名詞の用意
  • ユーザーの確定履歴から
  • いま編集中の文章のコンテキストとなる文章から
  • ユーザーが選べるように辞書を用意しておく

2008/01/13

ひ☆かく★すぅ

Mash up Award 3rd にてpaperboy&co.賞を頂いたのですが、
その時にSunから借りていたレンタルサーバーが使えなくなって早1ヶ月。
まあ、無料だから仕方がないのですが、いきなり使えなくなったのにはびっくりしました。
賞を頂いたので、とりあえず研究室のサーバーを借りてサービスを続けようと思いますが、
新しく外部向けサーバーを買い換えるみたいなので、待っててください。
需要があるかは謎ですが(笑
また追って報告します。

Bloggerではてブ(はてなブックマーク)登録とusers(登録者数)の表示

いろんなサイトみて設定したんだけど、どっちも書いてあるところがなかったのでここにまとめておく。

テンプレート > HTMLの編集 にて

ローカルで編集したいなら→テンプレートのダウンロード
そのままブラウザで編集したいなら→「ウィジェットのテンプレートを展開」をチェック

はてブへの登録

<a expr:href='"http://b.hatena.ne.jp/add?mode=confirm&amp;url=" + data:post.url + "&amp;title=" + data:post.title'>
<img src="http://d.hatena.ne.jp/images/b_entry.gif" width="16" height="12" style="border: none;" alt="このエントリーをはてなブックマークする" />
</a>


usersの表示
<a expr:href='"http://b.hatena.ne.jp/entry/" + data:post.url' target='_blank'>
<img alt='このエントリーへのはてなブックマーク数' expr:src='"http://b.hatena.ne.jp/entry/image/" + data:post.url' style='border: 0pt none ;' />
</a>


こいつらを次のタグの下に挿入する
<a expr:href='data:post.url'><data:post.title/></a>


ちなみにusersの画像はFirefoxだと出るまでに少し時間がかかりました。
IEだとすぐに反映されるのですが・・・。
何でなんでしょう??

シゴフミがおもしろい

シゴフミ
1・2話と見てみたが面白い。
ではシゴフミの何が面白いのだろう?考えてみた。

1.シナリオ
・いい意味での裏切り(例:1話の最後)
・表現のうまさ(所々に入る回想など)
・連鎖(シゴフミ)

2.絵
・ストーリーの雰囲気に合っているタッチ
・見せ方のうまさ(アングル、表情)

3.キャラ
・杖

4.声優
・うまい(1・2話のメインの女の子)

感想とか
特に期待もせず見ただけに印象がとても良い。
「シゴフミ」という名前からも、シゴフミを渡して読んで何か起こるのは当然だが、
それだけじゃない人間関係などのコンテキストをうまく表現している。
その上で連鎖する「シゴフミ」の存在が非常にうまく扱われている。

こういったコンテンツ的な面白さを、うまいこと違う土俵にも応用できたらいいのだが。
まだまだ面白いと感じるものについて掘り下げられていないからなぁ。
枯れた技術の水平思考じゃないけど、常に水平思考していきたい。

2008/01/09

オープンなYahoo!という印象

ITmedia「Yahoo!サービス、Google携帯やiPhoneにも対応へ

独自の携帯ソフトで既存の携帯電話と競合しようとするよりも、GoogleやAppleの端末に対応するインターネットサービスを提供することで、数億人の携帯電話ユーザーにリーチできるとボーリーズ氏は述べた。


お、Incやるじゃん!
Yahoo!Japanも後に続くかな??続いて欲しいなぁ。
やっぱり戦うフィールドは広い方がいいし、囲い込み戦略は厳しいと思います。(参考:キングコング最強説
これは親のソフトバンクの戦略だからYahoo!Japanにはどうしようもないのかな?
孫さん~!
日本でもGoogle携帯とかiPhoneが出始めたらYahoo!Japanの囲い込み戦略だけではSOFTBANKを選んでもらえないと思う。
私はYahoo!Japan好きなので、是非ともオープンにしてほしいものです。

2008/01/08

キングコング最強説

@IT「グーグルはキングかゴリラか

“キング”とは、顧客が他社製品・サービスへスイッチするコストが低い市場リーダーのことで、“ゴリラ”とは逆にスイッチング・コストが高い市場リーダーだ。 同じ市場リーダーであっても、キングは、いつでも競合他社にトップの座を奪われる可能性がある。一方、何らかの「囲い込み」によりスイッチング・コス トを高くしているゴリラは、市場のトップの地位を維持できる可能性が高い。従って、企業の将来価値は「市場自体の将来性、市場でのシェア、顧客のスイッチ ング・コストの高さの関数として表される」という。


私も個人的にはキングであることがWebサービスでは重要であると思う。
一ユーザとして、Webというものの上では自由であることを望んでいるし、自由であるべきだと思う。
様々なサービスから自分の好きなものを選べるのが楽しいし、たくさんのサービスの中から選んだものであればあるほど、選ばれたサービス提供企業はユーザに好きになってもらえると思う。
それを企業がゴリラになってしまっては興醒めである。
恋人が、「私の利益のために、これからも付き合ってね?」と言うようなものだ。
企業は利潤の追求を求めるのが仕事だが、私はそれ以上に嫌われたらおしまいだと思う。
これからは囲い込みチックな方向じゃなくて、ほんとに好かれるモノをすべてのWebサービス企業には作っていってほしい。
そして就活中の私も、そのような企業に入りたいと考えている。

2008/01/06

早くATOK2008使いたい

今ATOK2007を使っているのだが、ついにATOK2008でn文節最長一致をやめるようだ。
n文節最長一致とは、文を先頭からn文節目までの合計の長さがもっとも長いものを正しいと見なす方法である。ちなみに経験的に後半が長いものを正しいと見なすようだ。

さて、なぜATOK2008になって急にATOKはこのn文節最長一致をやめたのだろうか?

PC Watchジャストシステム、一太郎/ATOKなど含む「JUST Suite 2008」を発表
ATOKは従来、最も長く取れる2文節を優先的に選択する「n文節最長一致法」を採用していたが、近年この手法による誤変換の発生が稀ではなくなってきた。そこで、出現頻度や言語的性質などを数学理論によって1つの評価軸の上に積算する統計的言語処理手法を採り入れた。また、機械処理に頼らず、人手によ る検証と微調整を重ねることで、体感的な変換精度を向上させたという。

うーむ。近年稀ではなくなってきたという表現が曖昧すぎる。
私としては、前からATOKは文節を長くすればするほど失敗してしまう印象だ。
だから今回の内部アルゴリズムの変更は「ついにやったか!」という感じだ。
統計的言語処理手法ということだが、最小コスト法ではないのか?
まぁ、手に入ったら実際に使ってみていろいろとレビューしてみたい。

≪追記≫

ATOK2008レビュー

Input Method

自分は日本語入力システム(かな漢字変換システム)の研究をしている。
わかりやすく言えばIMEを作っている。
IMEは
Input Method Editorであるが、MicroSoftが自分たちのをMicroSoft-IMEとかつけちゃったので、単にIMEって言っちゃうとそれを指してると誤解されることが多い。困ったものである。
だからATOKやことえりのメタ概念を呼ぶ時はIM(もしくはインプットメソッド)と呼ぶ。
古い人達(うちのボスとか)はFEPと言っているが、それは昔の話で、今はもっぱらIMと呼んでほしい。
というのも、FEP(Front End Processer)はその名前の通り「前処理」を行うもの全般を意味しているからである。昔は多くの日本語入力システムがキーボードから入力された文字をOSに渡す前に処理するFEP方式を採用していたのでよかったのだが、最近は日本語入力システム以外のプログラムも同時に動作しているので、日本語入力システム=FEPではなくなっているのである。

でもIMってインスタントメッセンジャーの方がむしろメジャーになりつつあるからなぁ。
そこんとこを考えるとIMという略称は厳しいし分かりづらくなりそう。
ということで新しい呼び名を作るべきじゃないかなぁ。