iCalendar on AppEngine
Okamotoプロジェクトの開発中に引っかかったとこの一つに、iCalendar gemがそのままでは使えなかったのがある。
iCalendar gemは内部でSocket#gethostnameを使用していて、これがAppEngineで制限されてるライブラリに引っかかって落ちてた。これ、iCalendar中のランダムIDとして使われているだけなので、以下のようにして潰してやれば使えるようになる。
require 'icalendar' class Socket def self.gethostname return 'dokusho.yumenosora.net' end end
過去から学ぶ。
かつて、ウチが最初に作った"Marble Note"というサービスが動いていました。
一定の成功を収めたあのサービスに学ぶべく、当時を知っているユーザの方々にアンケートをお願いしたいとおもいます。よろしければどうぞ。
http://spreadsheets.google.com/viewform?hl=ja&formkey=dExxMU1lSzZTSVNUWm5HX2x5OV9PVUE6MA
大きめの仕事が終わって。
今日のカケラの樹のメンテナンスで、開発コードネーム”Takarazuka"のカケラの樹第4世代エディタを本番環境に導入、リリースしました。このTakarazukaプロジェクトは結構開発が難航して、リソースをずっと食ってたんだけどついに完結。
一区切りなので、これまでとこれからのプロジェクトをまとめておこうかな、と思う。今年はまだまとめてなかったし。
Takauazuka
カケラの樹第4世代エディタ
本日リリース
Sakasegawa
内部用ツールの新規開発
開発中
Kotoen
七色連想(創作物ポータル)の新規開発
運用中
MondoYakujin
八会咲木陰(チャットサービス)の新規開発
運用中
Kitaguchi
認証/共通ユーティリティサービスの新規開発
開発中
Shukugawa
カケラの樹文書操作API
構想中
Ashiyagawa
カケラの樹Google App Engine移行
開発中
Okamoto
読書びよりGoogle App Engine移行
構想中
Mikage
創作活動支援プラットフォームの新規開発
構想中
コードネームは西宮北口まで到達したので*1今度は三宮方面に向かいます。
この中でも、特に重要なのはAshiyagawaかな。これでApp Engine移行に成功すれば後々の開発・運用がぐっと楽になる。
*1:ちなみに抜けている駅名は去年以前に終了したプロジェクトのコードネームとして使用済み
JRuby on Rails/AppEngineの文字化け対策。
AppEngine上でのRailsアプリ開発に再挑戦中。appengine-jruby gemによって開発がぐっと楽になっていて、今度こそいけそうな気配がしてるんだけど、開発環境で文字化けが発生した。
この問題は既知のもので、いくつか対策は公表されてるんだけどどうしてもpropertyにText型を使った場合の文字化けがとれなかった。
原因は、AppEngine::Datastore::Text#to_javaの中でto_java_stringが使われているままになっていたことで、これを上書きすれば解決できた。こんな感じ。
# appengine-jrubyのDataMapperを使用する場合の文字化け対策用パッチ # Text対応版 by 殊海夕音 # original: http://d.hatena.ne.jp/yuum3/20090803/1249308751 module AppEngine module Datastore def Datastore.ruby_to_java(value) # :nodoc: if SPECIAL_RUBY_TYPES.include? value.class value.to_java else case value when Fixnum java.lang.Long.new(value) when Float java.lang.Double.new(value) when String #value.to_java_string # Thanks http://d.hatena.ne.jp/milk1000cc/20090802/1249218370 java.lang.String.new(value) else value end end end class Text < String def to_java #JavaDatastore::Text.new(self.to_java_string) JavaDatastore::Text.new(java.lang.String.new(self.to_s)) end def self.new_from_java(text) self.new(text.getValue) end end end end
次のステップへの準備。
ウチのサービスでは、ユーザ認証にOpenIDを採用している。
この形だと、各サービスのユーザアカウントは独立なため、たとえば読書びよりを使っている人がカケラの樹を使おうとした際、別途OpenIDログインをする必要がある。また、OpenID認証を要求して、認証情報を受け取る機能も別々に実装されており、新しい機能を共通で入れようとするとそれぞれに改修が必要。
このように、いくつか問題がある。そこで、次のKitaguchiプロジェクトでは各サービスから共通に呼び出すための認証機能を実装したアプリケーションを作ることに。
このプロジェクトの完了後はこんな形になる。
これははてなとかライブドアとか、複数のサービスを一つのIDで扱えるようにしてるサービス群と同じ形で、どれかのサービスを使い始めればほかのサービスもすぐに使えるようになるのが最大のメリット。
ほかにも、認証機能を一カ所に統合できるので今よりも手の込んだ認証方法の採用もやりやすくなる。手始めにKitaguchiプロジェクトでは、複数のOpenIDを一つのプロフィールに結びつけ、どのIDを使ってでも同じユーザとしてログインできる機能を付けようと考えてる。OpenIDとサービスのアカウントが一対一で結びついている今の形だと、もしOpenIDを提供しているサービスがつぶれるとサービス側のユーザアカウントも道連れになってしまうけど、複数のOpenIDで一つのアカウントに入れるならば道連れになるリスクが減らせて、より安全に。
Lingr亡き後、しゃべり場のまとめ。
Cometを使った高速ウェブチャットだったLingr。その代替となりそうなサービスをいくつかピックアップして、まとめ。
前提条件は以下の通り。
- ブラウザから高速なオープンチャットが可能
- ログが保存される
- 自由に部屋が作れる
irc.gimite.net
irc.gimite.net via kwout
- 方式
- IRC(Flash xmlsocket)
- 部屋作成
- 匿名で可能
- 過去ログ
- HTML, Atomフィード
- デスクトップ通知
- IRCクライアント経由
- 運用
- Gimite氏
使い慣れたIRCクライアントからでも入室可能。
超高速無料レンタルチャットCometeo
- 方式
- Comet(XmlHttpRequest)
- 部屋作成
- 匿名で可能
- 過去ログ
- HTML
- デスクトップ通知
- 専用クライアント(Windows向け)
- 運用
- Mito Memel氏
あの思い出のためのチャットサービス「八会咲木陰」
- 方式
- Comet(Flash xmlsocket/XmlHttpRequest)
- 部屋作成
- OpenIDによるログインが必要
- 過去ログ
- HTML, RSSフィード
- デスクトップ通知
- Google Talk/Jabber経由
- 運用
- 殊海夕音/雨上がりの青空を探して。
他にも良さそうなサービスがあったら教えてください。
8月過ぎても大丈夫。
だいぶ前に明らかになった話だけど、8/15日以降、AmazonのProduct Advertising APIがシグネチャ必須になる。ので、このAPIを使っているアプリケーションは改修が要るんです。
先日八会咲木陰が無事にサービスインして一息ついたので、ウチでもこの問題の対処を行いました。
現在、ウチでこのPA-APIを使っているサービスは八会咲木陰、カケラの樹、読書びよりの3つで、その全てがgemのamazon-ecsを使ってます。よって、このライブラリをなんとかすればアプリケーション側にはほとんど手を入れずに済むわけ。
で、署名を生成する処理を追加するパッチがこれ。amazon-ecs-0.5.4に対するパッチです。
http://www.box.net/shared/evp8qjpuay
パッチを適用したら、アプリケーション側でSecret Access Keyの設定をします。このgemを使っているとAmazon::Ecs.optionsにアクセスキーやアソシエイトIDを渡しているはずなので、そこに追加します。
require 'amazon/ecs' Amazon::Ecs.options = { :aWS_access_key_id => アクセスキー, :associate_tag => アソシエイトID, :country => :jp, :secret_access_key => シークレット・アクセス・キー #この行を追加 }
あとは今まで通り。
次の記事を参考にしました。
Amazon Product Advertising APIの認証の件 - zorioの日記