Ian Lewis
Ian Lewis is a web developer living in Tokyo Japan. His current interests are in Django, python, alternative databases and rapid web application development.
  • Python温泉 06/2009

    Python温泉に参加しに行ってきました。今回はいろいろ話が上がりましたけど、特に未来的な話が一番面白かったのかなと思います。ウェブなど日本なサービスがどうなるのかが特に気になります。アメリカでは、クラウドサービスやマイクロペイメントサービスが色々栄えそうだが、日本では頭が固いから、そのまま栄えない可能性が高いので、オリジナルサービスやアイディアを考えないと行けない。多言語化がやっぱり複数の言語をサポートすることのみではなくて、文化や地元の事情を考えながら、地元の機能を作ること。

    あと、 酒徳 さんが作ったtokyotyrant ライブラリのC バインディング python-tokyotyrantBob が作ったピュアPythonクライアント実装 pytyrant に意外と負けるという話が上がって、 moriyoshi さんがどうしても信じなくて、 プロファイリングテスト を作ってくれた。やっぱりローカルでCバインディングのほうが早い。ネットを通るとどうなるのが気になりますけど。

    僕の作ったものは 前と書いた通りdisqus のAPIの Python クライアント を作って見ました。アップデート実装がまだ出来ていないので、ご注意。

    Send feedback
  • 明日からPython温泉

    明日からPython温泉に参加しに行ってきます。課題は下記のとおり

    どこまでできるかわかんないけど、たぶんあまり眠らないでしょう。

    Send feedback
  • Javaに日本語のフォントのインストール

    LinuxではJavaは標準に日本語フォントが大体インストールされてないので、手でインストールしないといけない。

    Ubuntuでは、このようにFontインストールが済む:

    mkdir -p <jvm>/jre/lib/fonts/fallback
    cp cp /usr/share/fonts/truetype/vlgothic/*.ttf <jvm>/jre/lib/fonts/fallback
    
    Send feedback
  • Google Developer Day Japan 2009

    Google Developer Day Japan 2009

    Google Developer Day Japan 2009 に行ってきました。今年のキーノートも Google I/Oのキーノートのほぼ同じ内容になりましたけども、日本に専用的な話もありました。Mixiの Open Social がいよいよリリースされますので、Mixiの社長、笠原 健治さんと、日本一のOpen Socialの人材 yoichiro から Mixiアプリのデモを見せていただきました。Open Social のモバイルとPC両方対応するリリースは世界初と言いました。

    今年のGoogle Developer Dayではまた、Androidがさらに気合入れているみたいです。Google I/Oと同じく、HTCのHT-03Aを配りました。今月、Docomoで HT-03A がリリースされていますし、日本でもAndroidが栄えるように促進でしょうね。Google I/O で配ったやつとちょっと違って、枠の色が赤になって、裏のふたがマットタイプ。

    今年のセッションも、Google I/Oのセッションと大体同じでappengineのオフィスアワーのところにいました。それで、Googleの John Skidgel と Lindsey Simon といろいろappengineについて話をしました。彼らはappengineのアドミンコンソールを務めています。なので、appengineをどうやって改善すればいいかに興味を持っているらしい。長く話が出来てなかなか良かったです。

    その後に、今週に インストールした simeji と言う日本語入力メソッドの作者に出会いました。simejiを提示して、最新版をダウンロード出来るようにQRコードを用意していただきました。ローカル辞書を持ち、ネットに繋がってない時でも、漢字変換ができるようになった。

    Google Developer Dayが終わって、pythonのみなさんとみなとみらいのHard Rock Cafeで夕食食べて、帰りました。これで、 去年のGoogle Developer Day により、東京のPythonコミュニティに入った一周年になりました。みなさん、一年お疲れ様でした。そして、ありがとうございました。

    Send feedback
  • Androidで日本語入力 simeji の最新版をインストールしてみた

    最近参加してきた Google I/O でもらったAndroid 開発フォンはアメリカ型で日本語入力出来なかったので、Social IME simejiという入力メソッドをインストールしてみた。意外と簡単だった。Android Marketでsimejiが出てるけど、最新版ではなく、日本語キーボードがついてないバージョンです。インストールしたいのがこれ

    このブログ によると、3rd partyをアプリをインストールするには SDK の toolsに入ってる adbアプリを使います。じゃ、まず、SDK 1.5 をインストールします。

    SDKのインストールが簡単。自分のOSのSDKのzipを解凍しておしまい。でも、USBでつなぐには、ちょっと手続きが必要。このページを読む。

    Windowsの場合、ドライバが必要。USBをさしたら、新しいハードウエアウィザードが出てきて、SDKのusb_driver/x86の中にドライバを検索。Finish。

    Linuxの場合はudevの設定は必要。僕はこれをやった。rootユーザで以下のコマンドを実行

        echo "SUBSYSTEM==\"usb\", SYSFS{idVendor}==\"0bb4\", MODE=\"0666\"" > /etc/udev/rules.d/50-android.rules
        chmod a+rx /etc/udev/rules.d/50-android.rules

    chmodはいらないとは思うけど、一応ドキュメントに入ってるので、実行してみた。

    Macの場合は特に何も必要がない。

    そして、adbを実行する。初めて実行する時にdaemonを立ち上げるので、rootでやります。ユーザで普通に実行できるけど、usb読めないみたいので、デバイスを認識できない。

        # ./adb devices
        * daemon not running. starting it now *
        * daemon started successfully *
        List of devices attached 
        HT95DLV00094	device

    おお、繋げてるね。それで、USBをマウントしないでください。マインド中の時にアプリをインストールできないみたいわけです。マウントしちゃった場合。携帯でアンマウントして、ストレージを無効にしないとダメみたいです。

    後、もうひとつ。SettingsのApplicationsで、Unknown Sourcesを有効にする。インストールができたら、また無効にするのがいいかも。

    さ、漸くインストールしてみよう。このページAPKパッケージをダウンロード。

    # ./adb install /home/ian/tmp/simeji/Simeji2.4.1.apk 
    1002 KB/s (212793 bytes in 0.207s)
    	pkg: /data/local/tmp/Simeji2.4.1.apk
    Success

    これでできた。SettingsのLocale & Text でSimejiがでるはず。有効にしたら、上のビデオと同じようにsimejiのインプットメソッドが使える。iPhoneとほぼ同じで快適。こんな感じで

    Send feedback
  • Python 例外のひどい仕様

    Pythonの例外オブジェクトは苦手です。例外のメッセージが何でもasciiとして扱われることがひどい。

    In [1]: t = ValueError("テスト".decode("utf8"))

    In [2]: print t
    ---------------------------------------------------------------------------
    UnicodeEncodeError                        Traceback (most recent call last)

    /home/ian/src/project/<ipython console> in <module>()

    UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-2: ordinal not in range(128)

    In [3]: t = ValueError(u"テスト") # Unicode object's don't work either

    In [4]: print t
    ---------------------------------------------------------------------------
    UnicodeEncodeError                        Traceback (most recent call last)

    /home/ian/src/project/<ipython console> in <module>()

    UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-2: ordinal not in range(128)

    Djangoのテストフレームワークで、doctestを使おうと思ったら、例外のメッセージがasciiじゃないとダメというのが判明

    u"""
    >>> test(-1)
        Traceback (most recent call last):
            ...
        ValueError: エラーですよ!
    """

    とやっても、うまくうごかない。以下のUnicodeDecodeErrorがでる

    ======================================================================
    ERROR: Doctest: app.tests
    ----------------------------------------------------------------------
    Traceback (most recent call last):
      File "/home/ian/.virtualenvs/test/lib/python2.5/site-packages/django/test/_doctest.py", line 2175, in runTest
        test, out=new.write, clear_globs=False)
      File "/home/ian/.virtualenvs/test/lib/python2.5/site-packages/django/test/_doctest.py", line 1403, in run
        return self.__run(test, compileflags, out)
      File "/home/ian/.virtualenvs/test/lib/python2.5/site-packages/django/test/_doctest.py", line 1291, in __run
        got += _exception_traceback(exc_info)
      File "/home/ian/.virtualenvs/test/lib/python2.5/site-packages/django/test/_doctest.py", line 269, in _exception_traceback
        return excout.getvalue()
      File "/usr/lib/python2.5/StringIO.py", line 270, in getvalue
        self.buf += ''.join(self.buflist)
    UnicodeDecodeError: 'ascii' codec can't decode byte 0xe3 in position 24: ordinal not in range(128)
    
    ----------------------------------------------------------------------
    
    Send feedback
  • javascript "var"

    javascript で変数を定義する時に、var を付ける場合があります。var を付けないと、変数がグローバル名前空間に入ってしまう。

    >>> test = function() { test = "blah" };
    function()
    >>> test();
    >>> test();
    TypeError: test is not a function source=with(_FirebugCommandLine){test();\n};

    この場合だと、testがtestを文字列に変えてしまう。

    >>> test = function() { blah = "blah" };
    function()
    >>> test();
    >>> blah
    "blah"

    ...ということです。

    知らなくて恥ずかしいんですけど、今まで書いたjavascriptで一再付けなくて、あまりよくない。でも、逆に var を付けるのがあまりにも面倒くさいので、凹んでjavascriptを書く気がちょっと減ってしまった。orz

    Send feedback
  • 小川町 山登り

    今日、彼女のご両親と埼玉県の小川町の見晴らしの丘公園と言うところに山登りをしに行ってきました。

    今日はずっと雨激しく降ってたけど、楽しくていい経験になりました。土が濡れて、滑りやすかったので、みんな怪我しないで無事に終わってよかったです。

    来年も楽しみにしています。

    img_3161 img_3168.jpg img_3176.jpg
    全ての写真

    Send feedback
  • X5 電池交換完了

    僕のiAudio X5がずっと前にUSBに繋いで使わないと電池がすぐなくなって、携帯の意味がなくなった。電池をずっと交換したいと思ってたけど、ずっとしないでUSBに繋ぎながら使ってた。

    今日は休みで、秋葉に行って、半田買ってきて、電子を交換した。途中で写真とらなくて申し訳ないけど、使ったハンダと旧電池の写真を撮った。

    All finished The original battery Solder

    電子機器の半田付けをやったことあったので、そんなに難しくなかったけど、このビデオは勉強になった。

    Send feedback
  • sqliteのデータの型 意味ねぇー

    INTEGERコラムに文字列データも入れられるし、とんでもないコラムの型でテーブル作れるし、型は結局何なんだ!

    sqlite> create table t1(i INTEGER);
    sqlite> insert into t1 (i) VALUES ('187482');
    sqlite> select * from t1;
    187482
    sqlite> insert into t1 (i) VALUES ('18748auhua:2');
    sqlite> select * from t1;
    187482
    18748auhua:2
    sqlite> create table t2(i IAN);
    sqlite> .schema t2
    CREATE TABLE t2(i IAN);
    sqlite>

    型を指定する意味ねぇー

    Send feedback