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. About Me...
  • 明日からPython温泉

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

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

    Send feedback このエントリーを含むはてなブックマーク はてなブックマーク - 明日からPython温泉
  • 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 このエントリーを含むはてなブックマーク はてなブックマーク - Google Developer Day Japan 2009
  • GAE Hackathon Disc. 3 全文検索

    GAE Hackathon Disc. 3 に参加してきました! 私とid:a2c (Twitter) がGoogle Appengineの日本語が対応する全文検索エンジンを作ってみました。

    GAE では、データストアが Entity と言う概念で作られてるけど、Entityを検索する時に、データを完全一致しないと、データを取れないので、全文検索が難しくて、以下の状況になってる。

    • 一応、SearchableModelというクラスを継承すれば、英文検索が出来るけど、日本語テキスト検索が全くできない。(英語でも結構ひどい)
    • SearchModelで、英語検索しても、スペース文字で単語単位で切るので、単語を完全一致しないといけない。(つまり、informationがテキストに入ってるけど、infoで検索しても出てこない)
    • SearchableModelでは、3文字以下の単語はインデクスしてくれないので、ほとんどの日本語はアウト
    • 上の点の関係で、3文字以下の検索キーワードもアウト
    • 検索キーワードが無視された場合、何でも、引っかかるので、検索結果が分かりにくい

    a2cさんが以前に、いろいろ調べたり、試してみたりしてくれたので、いろいろ助かった。いい情報を取れたので、すごくいい話が当日にできました。

    SearchableModelのAPIは基本的にいいと思ったので、SearchableModelと同じように、日本語対応できるSearchableModelを使いたいなと思いました。こう書けば、わりと簡単に検索できる。

    from google.appengine.ext.search import SearchableModel
    from google.appengine.ext.db import *

    class Document(SearchableModel):
      title = StringProperty(u"Title")
      text = TextProperty(u"Body Text")
    ...
    Document.all().search(keyword)
    ...

    まず、SearchableModelがいろいろ、自分を参照したので、継承するのが難しかったから、別のモジュールにコピーして、forkすることにした。それで、この辺に単語の分け方を a2cが作ってくれた ngram実装に切り替えた。(ngramとは?) それで、SearchableModelのモジュールを変えるだけで、googleの実装と同じように使える。

    検索キーワードをngramで分けて、インデクスを検索すると、ちゃんと部分的にデータが引っ張ってくる。 http://saichugen.appspot.com/ でテストアプリを見れる。コードはbitbucketで公開されてる。

    これから、a2cさんともっと検索結果を取れるようにするのと、インデクスの容量をへらしたりするのと、分け方を自分で実装できるapiを導入したいと思うので、ぜひ期待してください :)

    Send feedback このエントリーを含むはてなブックマーク はてなブックマーク - GAE Hackathon Disc. 3 全文検索
  • Jaikuを動かしてみた

    昨日、GoogleTwitterライクなサービス、Jaikuオープンソースになって、Google Appengineに移動することに

    早速、コードを落として、動かしてみた。

    doc/README に入ってる手順(重要なのはlocal_settings.example.pyをlocal_settings.pyにコピー)にしたがってやってたんだけど、最初に動かそうとして、No module named djangoってエラーが出た。何だこれ!って思ったけど、ファイル数が多すぎて、deployする時にzipimport使ってる。さらに、Appengine SDK 1.1.9がapp.yamlにskip-filesに入ってるファイルにアクセスすることを拒否することになったので、ちゃんとzipにしないと動かない。Makefileにzip_allのコマンドはあるので、make zip_allで起動できるはずなのに、なぜか、同じくNo module named djangoがでた。

    でも、どうせにzipimportで、エラーがでたら、tracebackもでないし、俺は結局、app.yamlいじりました。

    skip_files: |
     ^(.*/)?(
     (app\.yaml)|
     (app\.yml)|
     (index\.yaml)|
     (index\.yml)|
     (#.*#)|
     (.*~)|
     (.*\.py[co])|
     (.*/RCS/.*)|
     # (\..*)|
     # (manage.py)|
     # (google_appengine.*)|
     # (simplejson/.*)|
     # (gdata/.*)|
     # (atom/.*)|
     # (tlslite/.*)|
     # (oauth/.*)|
     # (beautifulsoup/.*)|
     # (django/.*)|
     # (docutils/.*)|
     # (epydoc/.*)|
     # (appengine_django/management/commands/.*)|
     # (README)|
     # (CHANGELOG)|
     # (Makefile)|
     # (bin/.*)|
     # (images/ads/.*)|
     # (images/ext/.*)|
     # (wsgiref/.*)|
     # (elementtree/.*)|
     # (doc/.*)|
     # (profiling/.*)
     )$

    これでようやく動くはずなのに、またエラーが出たけど、今回はpstatsのエラーで、python-profileのパッケージを入れて、解決した。

    Send feedback このエントリーを含むはてなブックマーク はてなブックマーク - Jaikuを動かしてみた
  • OpenSocial Hackathon @ デブサミ

    昨日、デブサミ版のOpenSocialハッカソンに参加してきた。結構コーディングができて効率な一日でした。

    写真を撮るのを忘れちゃったけど、最初にキーノートプレゼンをして(なぜか英語だった)、それからコーディングに入って、最後に作った物を発表する形になった。コーディングする人はテーマ毎にグループに分けて、コーディングを行った。ゲームを作るグループが二つ、メディアっぽいアプリを作るグループが一つ、もう二つのグループ(テーマ忘れちゃった^^;)、チュートリアルをするグループと、僕が入ったAppengineグループがあった。

    今、id:tmatsuoとAppengineでコードシェーリングサービス、Smippleを作ってる。SmippleはOpensocialや、FacebookのSocialデータを使って、勉強しながら、うまくコードや、技術を共有できるサービスです。今の段階ではSocialの部分はあまりできてないせいか、僕たちの発表の仕方が悪いせいか、あまり受けられなかったみたいけど、これから頑張ってマーケティングをしていきたいと思ってる。

    id:tmatsuoも俺よりなぜかアメリカ人に人気があって、日本版OpenSocialギャラリーアプリをAppengineで載せる話があったみたい。僕もそれにハマるかもしれないので、ぜひ期待してください。

    Send feedback このエントリーを含むはてなブックマーク はてなブックマーク - OpenSocial Hackathon @ デブサミ
  • Google Appengine Hackathon 第2回

    今日、Google Appengine Hackathonに参加してきました。今回は岡野さんと共にDjangoの上でモバイルフレームワークを作成する引き続きを行いました。今日は絵文字と文字コードの対応を続けました。岡野さんがほぼ絵文字と文字コードの対応を以前にやってくれたので、今日は僕はappengineでDjangoとモバイルフレームワークをappengine上で動かして appengineのShoutoutに似たアプリを作って、絵文字対応をできました。一応、au, docomo, softbank, PC に対応しています。実際に仕事で使ってるので、コードを公開できませんが、一応 URLがあるので、ぜひ携帯電話でやってみて頂ければと思います。

    http://frmmkr.appspot.com/

    Google Appengine Hackathonに参加した皆さん、お疲れ様でした

    Send feedback このエントリーを含むはてなブックマーク はてなブックマーク - Google Appengine Hackathon 第2回
  • Django サイトマップ フレームワーク

    Django sitemap frameworkを使うのが簡単過ぎる。下記のようにサイトマップクラスを作って、urls.pyに登録するだけ。サイトマップに載るURLを取るのに、サイトマップフレームワークが自分が作ったクラスのitems()を呼び出して、アイテムのget_absolute_url()を順番に呼び出す感じ。

    models.py

    from django.db import models
    ...
    class Entry(models.Model):
    ...
        @permalink
        def get_absolute_url(self):
            return ...
    ...

    sitemap.py

    from django.contrib.sitemaps import Sitemap
    from mysite.blog.models import Entry

    from django.contrib.sitemaps import Sitemap
    from mysite.blog.models import Entry

    class BlogSitemap(Sitemap):
        priority = 0.5

        def items(self):
            return Entry.objects.filter(is_draft=False)

        def lastmod(self, obj):
            return obj.pub_date

        # changefreq can be callable too
        def changefreq(self, obj):
            return "daily" if obj.comments_open() else "never"

    urls.py

    from mysite.blog.sitemap import BlogSitemap
    ...
    sitemaps = {
        "blog": BlogSitemap
    }
    (r'^sitemap.xml$', 'django.contrib.sitemaps.views.sitemap', {'sitemaps': sitemaps})
    ...

    サイトマップインデクスも作れる。GoogleのURL 50,000件の制限があるため、サイトマップをPagenatorで自動的にURLを振り分けてくれる。urls.pyをこう変えるだけ

    from mysite.blog.sitemap import BlogSitemap
    ...
    sitemaps = {
        "blog": BlogSitemap
    }
    (r'^sitemap.xml$', 'django.contrib.sitemaps.views.index', {'sitemaps': sitemaps}),
    (r'^sitemap-(?P<section>.+)\.xml$', 'django.contrib.sitemaps.views.sitemap', {'sitemaps':sitemaps})
    ...

    素敵だな。

    後、サイトのコンテンツが変更された時、Googleが新しいコンテンツをインデクスするために ping_googleというmanage.pyコマンドが用意してある。

    python manage.py ping_google

    でも、他の検索エンジンが同じようなサービスがあるのに、ping_googleしかないので、上記のようなコマンドをいくつも作っていた。

    Send feedback このエントリーを含むはてなブックマーク はてなブックマーク - Django サイトマップ フレームワーク
  • Debian 勉強会 @ Google Japan

    昨日、Googleの渋谷オフィスで 東京エリア Debian 勉強会に参加しました。いろいろありましたが、OSCの報告や、オープンソースのライセンス(契約)の解釈や、データパッケージの説明を受けました。Google鵜飼さんブログに私自身と、松本さんが写真に写ってる。

    OSCに参加しましたので、報告をほとんど聞きませんでした。 (申し訳ない、、、)

    私は、ライセンス がいろいろ難しいってある程度しりましたが、Debian (すべてのdistributionかな?)に対して、技術よりも、ライセンスの確認と管理が大変っていうのが知りませんでした。Creative Commons も結構いいライセンスと僕が思ったのだけど、Debianのポリシーに従って、creative Commonsを採用しているソフトウエアや、メディアをDebian の repository にアップできない場合が多いと言われました。Creative Commonsの中で変更されたものを配布できないライセンスを利用することが多いかららしいです。でも、勉強会の後の宴会で、いろいろ可能な解決を聞きました。例えば、Debian の repositoryで使うために、自由に配布できる特別なライセンスを採用することが解決の一つだと考えてるそうです。

    私の友達のDavid Smithより、データだけのパッケージ作成の説明を受けましたけど、私の周りの人と同じようによくわかりませんでした。データだけのパッケージの作り方か、データだけのパッケージの可能性について知りたかったと思います。例えば、自分の会社で、configファイルとかをサーバーに簡単配布方法とか。でも、やっぱり、deb helper を使えばいいと言うことしか受けられませんでした。

    Send feedback このエントリーを含むはてなブックマーク はてなブックマーク - Debian 勉強会 @ Google Japan
  • Google マップ交通情報が登場!!

    いよいよ、Googleマップで路線情報が登場! こと機能を結構待ってましたけど、やっと来ました!

    元々、Google Transitがありましたけど、交通データが間違えたりしたことあるから(僕は電車に間に合わない結果)、Yahoo路線情報のほうがぜんぜんよかったけど、Googleが交通データを改善したみたいで、僕が気に入るGoogleを使うため、Yahooをやっと辞められる (ソフトバンク携帯で、Yahoo乗り換えのほうが便利かもしれないけど)。 飛行機も登場だし、新幹線も登場だし、旅行とかと計画にすごく便利になってる。

    後、検索条件を変更する部分で、交通時間とか、飛行機を使うかどうかとか、を設定できます。Yahooと同じ風に、出発時間か、到着時間の条件を選ばれるし、すごく便利と思う。しかも、Googleは仕事の後よく酔っ払うサラリーマンにいい機能が付いています。出発時間と到着時間を選ばれる上に、最後の電車を検索できます。:yes: いつも困るサラリーマンにすごく助かる機能かも。:DD

    Send feedback このエントリーを含むはてなブックマーク はてなブックマーク - Google マップ交通情報が登場!!
  • 日本の携帯でGmail

    2年間にGmailを自分のメールとして使ってた。でも、日本に来た前、インターネットを見える携帯を持ってなかった。だから、携帯で、Gmailをチェックできることで、喜んだ。

    しかし、自分の携帯で、まったく動かない。実は、Googleのサービスは普通の携帯検索しか全部動かない。Gmailも、Google リーダーも、ログインの問題で、携帯のブラウザーのCookieっていう機能は有効されてないっていうエラーが出てくる。ブラウザーのCookieは有効されてるから、原因は自分に不思議だ。ミクシィに携帯でログインするのは絶対問題ない。

    この問題の可能な解決をインターネットで探してて、サイトを少なく見つけたんだけど、何も解決されてない。このサイトはログインが失敗する可能性があるので、もう一度ログインしないといけない時があるっと説明してるけど、自分はもう一回ログインすると同じ結果になる。

    使えない原因はなんなんだろうな~  Googleはまだ日本の携帯をサポートしてないし、たぶん、こんな問題で、日本人はYahooのほうを使うんだろうね。

    Send feedback このエントリーを含むはてなブックマーク はてなブックマーク - 日本の携帯でGmail