明日からPython温泉に参加しに行ってきます。課題は下記のとおり
- django-lifestream の整理
- disqus-api-client の実装
- homepage のバグを直す
- Appengine 上のコードスニペットのウェブサイトのまとめ
- Google Analytics をモバイルで使えるライブラリの実装
どこまでできるかわかんないけど、たぶんあまり眠らないでしょう。
明日からPython温泉に参加しに行ってきます。課題は下記のとおり
どこまでできるかわかんないけど、たぶんあまり眠らないでしょう。
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コミュニティに入った一周年になりました。みなさん、一年お疲れ様でした。そして、ありがとうございました。
GAE Hackathon Disc. 3 に参加してきました! 私とid:a2c (Twitter) がGoogle Appengineの日本語が対応する全文検索エンジンを作ってみました。
GAE では、データストアが Entity と言う概念で作られてるけど、Entityを検索する時に、データを完全一致しないと、データを取れないので、全文検索が難しくて、以下の状況になってる。
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を導入したいと思うので、ぜひ期待してください ![]()
昨日、GoogleのTwitterライクなサービス、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のパッケージを入れて、解決した。
昨日、デブサミ版のOpenSocialハッカソンに参加してきた。結構コーディングができて効率な一日でした。
写真を撮るのを忘れちゃったけど、最初にキーノートプレゼンをして(なぜか英語だった)、それからコーディングに入って、最後に作った物を発表する形になった。コーディングする人はテーマ毎にグループに分けて、コーディングを行った。ゲームを作るグループが二つ、メディアっぽいアプリを作るグループが一つ、もう二つのグループ(テーマ忘れちゃった^^;)、チュートリアルをするグループと、僕が入ったAppengineグループがあった。
今、id:tmatsuoとAppengineでコードシェーリングサービス、Smippleを作ってる。SmippleはOpensocialや、FacebookのSocialデータを使って、勉強しながら、うまくコードや、技術を共有できるサービスです。今の段階ではSocialの部分はあまりできてないせいか、僕たちの発表の仕方が悪いせいか、あまり受けられなかったみたいけど、これから頑張ってマーケティングをしていきたいと思ってる。
id:tmatsuoも俺よりなぜかアメリカ人に人気があって、日本版OpenSocialギャラリーアプリをAppengineで載せる話があったみたい。僕もそれにハマるかもしれないので、ぜひ期待してください。
今日、Google Appengine Hackathonに参加してきました。今回は岡野さんと共にDjangoの上でモバイルフレームワークを作成する引き続きを行いました。今日は絵文字と文字コードの対応を続けました。岡野さんがほぼ絵文字と文字コードの対応を以前にやってくれたので、今日は僕はappengineでDjangoとモバイルフレームワークをappengine上で動かして appengineのShoutoutに似たアプリを作って、絵文字対応をできました。一応、au, docomo, softbank, PC に対応しています。実際に仕事で使ってるので、コードを公開できませんが、一応 URLがあるので、ぜひ携帯電話でやってみて頂ければと思います。
Google Appengine Hackathonに参加した皆さん、お疲れ様でした
Django sitemap frameworkを使うのが簡単過ぎる。下記のようにサイトマップクラスを作って、urls.pyに登録するだけ。サイトマップに載るURLを取るのに、サイトマップフレームワークが自分が作ったクラスのitems()を呼び出して、アイテムのget_absolute_url()を順番に呼び出す感じ。
| from django.db import models | |
| ... | |
| class Entry(models.Model): | |
| ... | |
| @permalink | |
| def get_absolute_url(self): | |
| return ... | |
| ... |
| 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" |
| 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しかないので、上記のようなコマンドをいくつも作っていた。
昨日、Googleの渋谷オフィスで 東京エリア Debian 勉強会に参加しました。いろいろありましたが、OSCの報告や、オープンソースのライセンス(契約)の解釈や、データパッケージの説明を受けました。Googleの鵜飼さんのブログに私自身と、松本さんが写真に写ってる。
OSCに参加しましたので、報告をほとんど聞きませんでした。 (申し訳ない、、、)
私は、ライセンス がいろいろ難しいってある程度しりましたが、Debian (すべてのdistributionかな?)に対して、技術よりも、ライセンスの確認と管理が大変っていうのが知りませんでした。Creative Commons も結構いいライセンスと僕が思ったのだけど、Debianのポリシーに従って、creative Commonsを採用しているソフトウエアや、メディアをDebian の repository にアップできない場合が多いと言われました。Creative Commonsの中で変更されたものを配布できないライセンスを利用することが多いかららしいです。でも、勉強会の後の宴会で、いろいろ可能な解決を聞きました。例えば、Debian の repositoryで使うために、自由に配布できる特別なライセンスを採用することが解決の一つだと考えてるそうです。
私の友達のDavid Smithより、データだけのパッケージ作成の説明を受けましたけど、私の周りの人と同じようによくわかりませんでした。データだけのパッケージの作り方か、データだけのパッケージの可能性について知りたかったと思います。例えば、自分の会社で、configファイルとかをサーバーに簡単配布方法とか。でも、やっぱり、deb helper を使えばいいと言うことしか受けられませんでした。
いよいよ、Googleマップで路線情報が登場! こと機能を結構待ってましたけど、やっと来ました!
元々、Google Transitがありましたけど、交通データが間違えたりしたことあるから(僕は電車に間に合わない結果)、Yahoo路線情報のほうがぜんぜんよかったけど、Googleが交通データを改善したみたいで、僕が気に入るGoogleを使うため、Yahooをやっと辞められる (ソフトバンク携帯で、Yahoo乗り換えのほうが便利かもしれないけど)。 飛行機も登場だし、新幹線も登場だし、旅行とかと計画にすごく便利になってる。
後、検索条件を変更する部分で、交通時間とか、飛行機を使うかどうかとか、を設定できます。Yahooと同じ風に、出発時間か、到着時間の条件を選ばれるし、すごく便利と思う。しかも、Googleは仕事の後よく酔っ払うサラリーマンにいい機能が付いています。出発時間と到着時間を選ばれる上に、最後の電車を検索できます。
いつも困るサラリーマンにすごく助かる機能かも。![]()
![]() |
2年間にGmailを自分のメールとして使ってた。でも、日本に来た前、インターネットを見える携帯を持ってなかった。だから、携帯で、Gmailをチェックできることで、喜んだ。
しかし、自分の携帯で、まったく動かない。実は、Googleのサービスは普通の携帯検索しか全部動かない。Gmailも、Google リーダーも、ログインの問題で、携帯のブラウザーのCookieっていう機能は有効されてないっていうエラーが出てくる。ブラウザーのCookieは有効されてるから、原因は自分に不思議だ。ミクシィに携帯でログインするのは絶対問題ない。
この問題の可能な解決をインターネットで探してて、サイトを少なく見つけたんだけど、何も解決されてない。このサイトはログインが失敗する可能性があるので、もう一度ログインしないといけない時があるっと説明してるけど、自分はもう一回ログインすると同じ結果になる。
使えない原因はなんなんだろうな~ Googleはまだ日本の携帯をサポートしてないし、たぶん、こんな問題で、日本人はYahooのほうを使うんだろうね。