退職しました

1月25日付けでウノウを退職しました。一年半という短い期間ではありましたが、チームの皆に支えられながら何とかやってこれたことに大変感謝しています。

大企業と数十人のベンチャー企業を経験し、それぞれに一長一短があることを身をもって体験することができました。また、企業活動を行っていく上で、ビジネスモデルがいかに重要であるかということも知ることができました。でも、何よりも一番の収穫は、モチベーションの高いエンジニアの人たちと知り合うことができたことです。僕は、日本のエンジニアは決してレベルは低くないと思っているし、皆で力を合わせればきっと世界に向けたサービスを創り出せると信じています。また、近いうちに一緒に働ける日が来ることを楽しみにしています。

次はどうするの?と良く聞かれますが、実際のところはまだ決まっていません。でも、人生は一度きりなので後悔のないように過ごしたいし、多くの時間を仕事に費やす以上、世の中のためになることをして多くの人が幸せになれるようなことに関わっていきたいと思っています。そんな思いに共感できる人と仕事ができるように、今まで以上に自分の可能性にチャレンジするつもりです。

これからもどうぞよろしくお願い致します。

Web Site Expert #16に記事を書きました

技術評論社より、『Web Site Expert』という雑誌が1月24日に発売になりました。この中で、特集「Webサイトリニューアル大作戦」について数ページ記事を書かせていただきました。

エンジニアというよりも、どちらかというとディレクター向けの雑誌ですが、興味のある方はぜひご覧になってみてください。


unison-2.13.16のMacPortfile

MacPorts の Unison が 2.27.57 にバージョンアップしてて、Ubuntu や Fedora と整合性がとれなくて困ったので下の Portfile を用意してインストールしました。Unison はバージョンが違うと同期できないのが玉に瑕。上位互換にしてくれると嬉しいのですが。。

# $Id: Portfile 21859 2007-02-10 17:04:17Z rhwood@macports.org $

PortSystem        1.0
name              unison
version           2.13.16
categories        net
maintainers       eridius@macports.org
description       Unison File Synchronizer
long_description  Unison is a file-synchronization tool for Unix and \
                  Windows. It allows two replicas of a collection of \
                  files and directories to be stored on different hosts \
                  (or different disks on the same host), modified \
                  separately, and then brought up to date by propagating \
                  the changes in each replica to the other.
homepage          http://www.cis.upenn.edu/~bcpierce/unison/
master_sites      ${homepage}download/releases/unison-${version}/
platforms         darwin openbsd
checksums         md5 a79bf5f4ebf2a1eaf15b1ac97f827374
patchfiles        patch-Makefile

use_configure	no

build.args		UISTYLE=text NATIVE=true THREADS=true
depends_lib		bin:camlp4:ocaml

destroot.args	PREFIX=${prefix} UISTYLE=text NATIVE=true THREADS=true

variant x11 {
	depends_lib-append		port:lablgtk2

	build.args-delete		UISTYLE=text
	build.args-append		UISTYLE=gtk2

	destroot.args-delete	UISTYLE=text
	destroot.args-append	UISTYLE=gtk2
}

variant aqua {
	if { ${xcodeversion} == "2.1" } {
		patchfiles-append patch-Makefile.OCaml
	}
	build.args-delete		UISTYLE=text
	build.args-append		UISTYLE=mac
	destroot {
		xinstall -d -m 0755 ${destroot}/Applications/MacPorts
		system "cd ${worksrcpath}/uimac/build && mv Default/* . || true"
		file copy ${worksrcpath}/uimac/build/Unison.app \
			${destroot}/Applications/MacPorts/
	}
}

ML110と鎌風2の風92とML115キャンペーン

ML110のケースファンを「鎌風2の風92」とかいう変な名前のファンに変えてみました。92mmでサイズはぴったりなんだけど、マザーボードとピンの数が合わなくてそのままでは接続できません。付属のアダプタで電源を取ってもよいのですが、マザーボードのコネクタに接続しないと起動時にBIOSでファン異常のエラーになります。なので、ML115のWikiを参考にしてコネクタを削って付けることにしました。

Kamakaze2 HP ProLiant ML110 G4

ばっちりです。ファンコンで真ん中よりちょっと下くらいの回転数にするといい感じ。

また、うちにはML115もあって、最近はこれが自分のメインPCになっています。Athlon 3500+の64ビットCPUに80GB HDD、512MBメモリというスペックがキャンペーン価格でなんと15,750円(!)で買えます。

ML115のいいところは、元々サーバ用なのでECCメモリが付いているのですが、普通のnonECCなメモリがそのまま使えるところ。また、オンボードのグラフィックスはしょぼいけど(サーバ用なので…)、PCI Express x16なグラフィックカードを挿して使えるところ。僕は1万円くらいでメモリと GeForce 7300 を追加して使ってますが、合わせても3万円かかっていません。へたしたら繋いでるキーボード(HHK Pro2墨)のほうが高いくらいです。

で買うと送料無料なのでお得です。あっ、でもあと12台しかない。。


2:52追記:
売り切れました。日本HPからも購入できますが、こちらは送料3,150円がかかります。

1月25日追記:
また在庫が復活しているみたいです。欲しい方はお早めに! (清水川さん情報Thx)

Firefoxでマウスオーバー英辞郎「Mouseover Dictionary」

分からない単語にカーソルを合わせるだけで意味を表示するFirefox拡張。英辞郎の辞書データを変換して使っているんだけど、これがとてもレスポンスが良くて便利。辞書サイトで検索したり、ダッシュボードを開いたりするよりも全然効率がいいです。もっと早く使っておけばよかったと激しく後悔。

Mouseover Dictionary

英辞郎の辞書データが必要で、書店かAmazonで「英辞郎第三版」を購入するか、Webサイトから辞書データだけダウンロードで購入できます。ダウンロード購入のほうが、1,980円と少しお得。

自分が持っているのは、昔Palmで使うために買った「英辞郎 第一版」(赤いやつ)なので訳語が表示されない問題が発生しました。これは、PDICで辞書データを変換する際に「詳細…」で【@】カタカナ発音の削除をチェックして変換したらうまくいきました。また、文字サイズが大きすぎると思う人は、Firefox の about:config で"extensions.mouseoverdictionary.sidebar_font_size"を「-1」とかにするといいです。

作者のページによると Firefox の Database API Storage という機能を使っていて、内部は SQLite みたいです。XULが分かると、いろいろ面白い拡張が作れそうだなぁ。

英辞郎第三版
英辞郎第三版
posted with amazlet on 08.02.04

アルク (2007/02/01)
売り上げランキング: 582

Cacti Plugin Architecture - cacti-pa-0.8.7a-1.noarch.rpm

サーバ監視ツール Cacti にアラート機能などを追加したPlugin Architecture版のPRMです。自分の手元ではバージョンアップしていたのですが、公開するのを忘れていました。

新規インストールは下のエントリを参考にしてください。旧バージョンからのバージョンアップならば、rpm -Uvhでインストールすると初回アクセス時にアップデート用の画面が表示されます。

関連リンク:
Cacti Plugin Architecture for 0.8.6j のRPMを作りました

AndroidがZaurusで動いた!

Googleが開発中で、T-MobileやHTC、モトローラ、インテル、nVIDIA、KDDIやドコモなどが支持を表明しているオープンな携帯電話プラットフォームAndroidがZaurusで動作するという情報を聞きつけて、例によって我慢できなくなってやってしまった。

Android on Zaurus SL-C860
Android on Zaurus SL-C860

AngstromというOSをインストールして、そこからchrootでAndroidを起動している。はまったのは、SL-C860はファイルシステムがJFFS2なため、メモリマップドI/Oが使えないのでエラーになること。そういえば、世界で最初に成功したと思われるgergelyさんは、NFSをマウントしていた。自分の場合はちょっと楽をして、SDカード上のイメージをループバック・マウントして、そこにchrootするようにしてみた。

インストール手順については、Android Zaurusというブログにbinderdev.koを使った方法が詳しく書かれているので参考にしてみてください。ネットワークも問題なく使えて、カスタマイズ版MozillaやGoogle Mapsアプリも動きます。Androidの実機が出てくるのが2008年後半、これから日本の携帯電話市場はどのように変わっていくんだろうか。Googleは、携帯電話の世界でどのような存在になるのだろうか。

関連リンク:

Python でローカルのアドレスを取得する

ifconfigの出力をsedでパース — ありえるえりあのようにLinuxだとSocketを叩くことでIPアドレスを取得できます。以下、Pythonで取得するサンプル。

#!/usr/bin/env python
import socket
import fcntl
import sys

def ifconfig(ifname):
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    try:
        result = fcntl.ioctl(s.fileno(), 0x8915 #SIOCGIFADDR,
                             (ifname+'\0'*32)[:32])
    except IOError:
        return None

    return socket.inet_ntoa(result[20:24])

if __name__ == '__main__':
    print ifconfig(sys.argv[1])
実行例:
$ python ifconfig.py eth0
192.168.0.1

また、loを省くために元記事ではsedの正規表現を使っているのだけど、D-BUSが使える今時の環境ならば次のように書けます。サブネットマスクやDNSサーバ、デフォルトゲートウェイ、有線か無線かなども取得できます。

#!/usr/bin/env python
import dbus

NM_SERVICE = 'org.freedesktop.NetworkManager'
NM_OPATH   = '/org/freedesktop/NetworkManager'
NM_DSERVICE = "%s.Devices" % NM_SERVICE

def getAllDevices():
    bus = dbus.SystemBus()

    proxy = bus.get_object(NM_SERVICE, NM_OPATH)
    devs = proxy.getDevices(dbus_interface=NM_SERVICE)

    devices = []
    for dev in devs:
        device = bus.get_object(NM_SERVICE, dev)
        devices.append(device.getProperties(NM_DSERVICE))

    return devices

def getDefaultDevice():
    ds = getAllDevices()
    for d in ds:
        if d[10] != '0.0.0.0':
            return d
    
if __name__ == "__main__":
    d = getDefaultDevice()
    print '%s: %s/%s' % (d[1], d[6], d[7])
実行例:
$ python ifconfig2.py
eth0: 192.168.0.1/255.255.255.0

「席朝族」はダイエットに効果あり

会社に着いてから自分の席で朝食を食べる「席朝族」は、通勤中に低インシュリン状態となるのでダイエット効果があるらしい。

知って得する脂肪の燃焼方法 通勤で実践!ダイエット
勤務先の自分の席で朝食を取る席朝族と通勤後に勤務先近くで外食の朝食を取る外朝族は通勤中、低インスリン状態です。主に脂肪酸を燃やしたと仮定すると脂肪は1g当たり、約9kcalの熱量を発するので約25gの脂肪を燃やす事が可能です。

これまで家で朝食を取っている人が席朝族または外朝族になって週休、二日で月20日通勤すると一ヵ月で25g×20=500gの脂肪を燃やす事が可能となります。 席朝族

自分の場合は既にやってるから、もっと別の方法を考えないと…

Mecabでキーワード自動リンク(Python編)

ウノウラボ Unoh Labs: PHPとMecabでキーワード自動リンクを実装する

上記の記事ではPHPでの使い方を紹介しましたが、もちろんPythonでも簡単にできます。1.mecabインストールと2.自動リンク用辞書の作成は、同じなのでここでは省略します。

3.Mecabモジュールのインストール

# yum install python-mecab

はい、完了。

4.動作確認

次のようなプログラムを書いて実行します。

import MeCab

t = MeCab.Tagger("-d /usr/lib/mecab/autolink")
str = '京都についてGoogleとYahooで検索した。'

print t.parse(str)

実行結果

$ python autolink.py
<a href="http://www.city.kyoto.jp/">京都</a>について
<a href="http://www.google.com/">Google</a>と
<a href="http://www.yahoo.com/">Yahoo</a>で検索した。

このようにPHPと同じかそれ以上にとても簡単です。
Pythonの場合は、他にTernary Search Tree(TST)のデータ構造を利用したpytstもあるのですが、日本語のことを考えるとMecabかDartsのほうが安心かと。

また、さらなる高速化を追い求める人は、 cmecab -- Mecab-Python高速バインディング というのもあるので、こちらも試してみると楽しいかもしれません。

SIGMA 30mm F1.4 DC HSM

Mario Kart
Mario Kart

友人の D40+SIGMA 30mm F1.4 で撮影
このボケ具合はやばいなぁ
このレンズ欲しいなぁ

そして、「ぜったい娘が喜ぶから」と奥さんを説得してマリオカートのラジコンを買うその友人に乾杯。案の定、娘はマリオカートに全く興味なし。

今年もよろしくお願いしますw

lsb_releaseでLinuxのバージョンを確認

自分が使っているLinuxのバージョンを確認したくなった時は、lsb_releaseコマンドを使う。最近のディストリビューションならほぼインストールされているはず。

Fedora 7
% lsb_release -a
LSB Version:    :core-3.1-amd64:core-3.1-noarch:graphics-3.1-amd64:graphics-3.1-noarch
Distributor ID: Fedora
Description:    Fedora release 7 (Moonshine)
Release:        7
Codename:       Moonshine
Ubuntu 7.10
% lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 7.10
Release:        7.10
Codename:       gutsy

ショーシャンクの空に

ショーシャンクの空にショーシャンクの空に (1994)

【監督】フランク・ダラボン
【出演】ティム・ロビンス / モーガン・フリーマン / ボブ・ガントン / ジェームズ・ホイットモア / ウィリアム・サドラー / クランシー・ブラウン


★★★★☆ [90点]「13年経っても色褪せない感動の名作」

スティーブン・キングの「刑務所のリタ・ヘイワース」は高校生の時に読んで、とても感動したのを今でも覚えています。あまりに感動したので、その後映画化されても観る気になれませんでした。イメージと違っていて、がっかりするのが恐かった。そして、いつの間にか月日は流れ、映画の公開から13年が経ちました。13年はほったらかし過ぎだろうと思う人もいるかもしれませんが、レンタルビデオ屋などで見かける度に気になってました。でも、観る勇気がありませんでした。で、最近ちょっと心境の変化があったのと、さすがにもういいだろうという気持ちになったので、意を決して観てみました。

感動しました。変な演出など一切なく、僕がイメージしていたままの世界がそこにはありました。刑務所の調達屋レッドの視点で描かれる点も原作と一緒だし、なんといってもレッド役のモーガン・フリーマンが素晴らしい演技をしています。無実の罪で服役したアンディが希望を捨てずに生きる様は、勇気を与えてくれます。夢を追いかける全ての人に観てもらいたい名作。


Posted by weboo on 2008/01/06 with 映画生活

PHPからMecabを利用する拡張モジュール

PHPからMecabを使いたかったので、Page2さんで公開されているPHP拡張モジュールを試してみた。試したのは、PHP5とMecab 0.95という組み合わせ。

  1. ソースのダウンロード
    $ wget http://page2.xrea.jp/pub/php_mecab-0.2.0.tgz
    $ tar zxvf php_mecab-0.2.0.tgz
  2. コンパイルとインストール
    $ cd php_mecab-0.2.0
    $ /usr/bin/phpize
    $ ./configure --with-php-config=/usr/bin/php-config \
    --with-mecab=/usr/bin/mecab-config
    $ make
    $ sudo make install
  3. 動作確認
    <?php
    dl('mecab.so');
    
    $t = new MeCab_Tagger();
    $str = 'すもももももももものうち';
    
    echo $t->parse($str);

    実行結果1

    す      接頭辞,名詞接頭辞,*,*,す,す,*
    もも    名詞,普通名詞,*,*,もも,もも,代表表記:股
    も      助詞,副助詞,*,*,も,も,*
    もも    名詞,普通名詞,*,*,もも,もも,代表表記:股
    も      助詞,副助詞,*,*,も,も,*
    もも    名詞,普通名詞,*,*,もも,もも,代表表記:股
    の      助詞,接続助詞,*,*,の,の,*
    うち    名詞,副詞的名詞,*,*,うち,うち,*
    EOS

    問題なく動作しているようだけど、「すもも」が一つの名詞として認識されてなくて、「す」+「もも」という変な組み合わせになっている。次に辞書をJumanからipadicに変更してみる。

    <?php
    dl('mecab.so');
    $options = array('-d', '/var/lib/mecab/dic/ipadic');
    
    $t = new MeCab_Tagger($options);
    $str = 'すもももももももものうち';
    
    print $t->parse($str);

    実行結果2

    すもも  名詞,一般,*,*,*,*,すもも,スモモ,スモモ
    も      助詞,係助詞,*,*,*,*,も,モ,モ
    もも    名詞,一般,*,*,*,*,もも,モモ,モモ
    も      助詞,係助詞,*,*,*,*,も,モ,モ
    もも    名詞,一般,*,*,*,*,もも,モモ,モモ
    の      助詞,連体化,*,*,*,*,の,ノ,ノ
    うち    名詞,非自立,副詞可能,*,*,*,うち,ウチ,ウチ
    EOS

    今度はちゃんと認識してくれた。素晴らしい!