セーブ機能を追加しました@transatonce.appspot.com

transatonce

単語を翻訳するとき、こういった要求を満たせるサイトがあると良いと思って作っているものです。

  • いくつかの単語を一度に翻訳したい(英文の記事や論文を読み終わったあとでメモしておいた単語を at once に翻訳したい)
  • それらを一つのページで表示したい(ブラウザの履歴で戻って確認したり、たくさんブラウザのタブを開いたりしたくない)
  • 翻訳した後で必要ない単語は削除したい
  • 翻訳サイトを切り替えて同じ単語を翻訳したい(複数の翻訳を比較したい)
  • 翻訳する単語を同じページに追加して確認したい

それに加えて、単語帳のように翻訳した単語を記憶しておけると良いと思っているのですが、Google accountを使ったDatastoreはログインの手間があるのであまりやりたくない。(過去やっていましたがやめてしまいました) 少なくとも、前回翻訳した単語が思い出せることで、記憶が定着する効果がありそうな気がしますよね。

GAE Memcache

そこで、CookieとSessionをカジュアルに使って、通常は読み取り負荷軽減に使われるMemcacheに、IDと単語をひも付けて記録しておくよう実装しました。 もちろん、Cookieなので端末はおろかブラウザを変えただけで、それぞれが別のユーザだと認識されてしまいますが、それなりには有用です。 まあCookieが盗聴されると、Session ID(というかUser ID)が分かってしまうので、翻訳した単語がばれてしまいますがその程度です。

GAE DataStore

Memcacheはインメモリなので長くは持たないと思っていたのですが、思った以上にephemeralなようです。永続化するつもりも無いのですが、少なくとも24時間くらいは維持したいので、DataStore(NDB)を使うように修正しました。いちおうOpt-outとして、保存された内容を削除することができるようにしています。

HTML5 localStorage

ブラウザごとに保存した内容を表示するだけなら、サーバ側でやる意味が無いわけですね。良く考えれば、JavaScriptでもローカルのストレージを扱うことができるはず、ということでlocalStorageを使うことにしました。数MB保存できれば十分です*1。すると、Cookieも必要無いわけです。サーバ側でやる意味があるとすれば、同じ人物が翻訳した内容にどのような傾向があるか、とか、こういう単語を翻訳している人はこういう単語にも興味があるはず、とか繋がりを意識したサービスはありそうです。