ラベル AppEngine の投稿を表示しています。 すべての投稿を表示
ラベル AppEngine の投稿を表示しています。 すべての投稿を表示

2011-06-29

iKnow!の学習結果をTwitterでツイートするサービス「TwiKnow!」テスト公開中

TwiKnow!

今月初めから開発を開始して、ようやっと仮公開にこぎつけました。smart.fm終了後、まだiKnow!で勉強をがんばっていて、なおかつTwitterを使っている方は、ぜひ使ってみてくださいね。ただし、まだテスト中で、動作テストもあまりできていないので、まずいことが起こる可能性もあります。その点はご了承ください。

Twitter上でお知らせしたところ、すでに十数人くらいの方に使っていただいているようです。このサービスは、(下の「開発理由」にあるとおり、)ユーザーが多くなればなるほど効果が出てくるものなので、どんどん広まって使ってもらえればいいなと思っています。

開発理由

現在のiKnow!は、かつて存在していた語学学習SNSサイト「smart.fm」が前身となっています。smart.fmの頃は、自分のフレンド達の学習状況が逐一ホーム画面に流れていて、それをきっかけとしたユーザー間の交流があったり、あるいは周りの人の頑張りに刺激されて自分のやる気に結びついたりするなど、学習のモチベーションを保つのに一役買っていました。

しかしながら今のiKnow!は、smart.fm時代に充実していたコミュニティ機能はすべて無くなってしまい、自分ひとりだけで学習を進めるストイックなサイトになっています。

そこで、かつてのsmart.fmのフィーチャーをTwitterで再現させて、孤独な学習を耐え抜くための一助にしたいと考えた次第です。

http://twiknow.appspot.com/

2011-06-05

iKnow!の学習結果を通知するサービス「TwiKnow! (仮)」

以前にも書きましたが、英語学習SNSのsmart.fmが3月末で終了したことに伴い、新サービスiKnow!に移行して、毎日の英語学習を細々と続けています。しかし、新iKnow!にてSNS要素が完全に撤廃されたことは思ったよりもモチベーションに対する影響が大きく、4月以降の勉強時間がガタ落ちしている状態です(4月から急に仕事が忙しくなったこともありますが……)。

smart.fmのSNS機能では、自分とまわりのフォロワーとの間で学習状況の情報が通知されるようになっていて、他の人が頑張っているのを見て自分も頑張って学習する、といった正のフィードバックが回っていました。幸い、smart.fmで知り合った人々の何人かとはTwitter上でフォローしている関係にあり、今でも継続してiKnow!で学習を続けているユーザーもいます。

そこで、毎日のiKnow!の学習時間をTwitterでtweetするサービスを作ってみようかなと考えています。大昔、まだsmart.fmでなく(旧)iKnow!だったころは、「おめでとうございます! 学習アイテムが1000アイテムに到達しました」みたいなメッセージも出ていたので、そのあたりも再現したいところです。こういった通知メッセージのtweetで、iKnow!学習者間でのコミュニケーションのきっかけになればいいなと思います。

サービス名は「TwiKnow! (仮)」とします。サービス内容からしてこれしかない、という感じの名前です。プラットフォームは例によってGoogle AppEngineです。AppEngineだと、おあつらえむきに、一日一回タスクを起動するといったことが簡単にできるので楽そうです。とりあえず、「twiknow.appspot.com」のドメインを取っておきました。

現在、OAuthについて調べながら実装していますが、TwitterでOAuthを使う時って出来ることが多すぎるため、痛くもない腹を探られる感がありますね。単にtweetしかしないサービスなのに、OAuthの認証画面でアプリが出来ることのリストには「新しいユーザーをフォローする」とか「プロフィールを更新する」などと書かれていたりします。もっと細分化してほしいなあ。

2011-03-20

Smart.fm Memento Maker ~ 日記一括ダウンロードツール

Smart.fm Memento Maker

smart.fmの日記(と画像)を一括ダウンロードするアプリ「Smart.fm Memento Maker」を作成しました。ようやく正式公開できるレベルになりました。

Smart.fm Memento Maker

使い方は簡単で、smart.fmのIDを入力して「Save」ボタンを押して、あとは(気長に)待つだけです。処理の完了後「Download」ボタンを押せば、日記と画像の入ったzipファイルをダウンロードできます(もしボタンを押してもダウンロードできない場合、ボタンの左側のリンクを右クリックして「名前を付けて保存」を選んでください)。

Smart.fm Memento Maker

日記はHTMLファイルで保存されますが、このHTMLファイルをそのまま開いても、レイアウトなどは崩れてしまうのでご了承ください。あくまで保存できるのは中身(文章)だけです。日記についたコメントもそのままでは見ることはできませんが、別ファイル(「(最大6桁の数字)_comment.html」みたいな名前のファイル)に保存されているので、そちらのファイルを見てください。ちなみに、取得できるのは公開設定にしてある日記だけです。

また、ダウンロードしたzipファイルの中には「mt_log.txt」というすべての日記とコメントの文面が収められたテキストファイルも入っています。このファイルは「Movable Type形式 (MT形式)」というもので、これを使ってsmart.fmの日記を他のブログにインポート(引越し)することができます。世の中にはブログサービスがたくさんありますが、いくつかのブログサービスでは「MT形式でのインポート」というのをサポートしています。試しに、私の日記Seesarブログ にインポートしてみましたので、どんな感じか参考にしてください(後ほど削除します)。

ただし、画像についてはおそらくは自動で移行できないと思いますので、ダウンロードしたzipファイルの中の画像ファイルを移行先のブログサービスにアップロードして、個々の日記の画像のURLを差し替える作業が必要になるかと思います。上の例ではブログ中の画像も正常に表示されているように見えますが、これは画像ファイルの場所として直接smart.fmのサーバ内の画像を指定しているためで、後日smart.fmのサーバが停止した後はブログ中の画像が見えなくなってしまいます(本来はSeesarブログのサーバに画像をアップロードし直す必要があります)。

smart.fm終了まで時間がありませんが、ご活用ください。

2011-03-05

Python・AppEngine初学者の雑感

ここ最近、PythonでGoogle AppEngineを使ってプログラムを書いているのですが、どちらも始めたばかりなのでいろいろと新鮮な驚きや疑問に思うことなどがあります。新しいことを始めたときに学習記録を残しておくと後で見たときに面白いので、とりとめのない話ですがここに書いておきます。

Pythonについて

  • lenとdelがコレクションのメソッドになっていないのにはびっくりしました。
    • 「len」という名前の変数を使ったりしたらどうなるんでしょう。
  • 「Pythonのfor文は、いわゆるforeachのみで、C言語風のfor文は存在しない」「一般的な回数ループ処理をやりたいときは、等差数列のリストを作るrange関数を使って for i in range(10) のようにする」というのを知って、一貫性があるなーと思ったのですが、xrangeという関数があることを知ってちょっと微妙な気分に。
    • 「xrangeだとリストを生成しないので、ループ回数が大きいときはxrangeの方が速い」との話ですが……for文でrangeを使っている場合には内部で勝手に最適化(実際にリストを生成しないようにする)をしているのかと思っていました。
    • あと、この両者を使い分ける基準はどのあたりにあるんでしょうか。少なくとも一般的な回数ループ処理では、常にxrangeを使っていればいいようにも思いますが。

AppEngineについて

  • 無料枠では「1日あたり10万タスクまで」となっているようですが、意外にきつい制限かも。
    • 普通にテストしていても1000タスクくらい軽く消費してしまいます。
  • ローカル環境におけるタスクキューの動作がいまいち信用できない感じです。
    • たまにキューに積まれたタスクの消化が止まってしまうことがあります。
      • ですがそんな場合でも、管理画面(http://localhost:8080/_ah/admin)をブラウザで開いて再読み込みすればタスクの実行が再開されたりします。理由は不明。
    • そういえば、管理画面のタスクキューの「Purge」ボタンは「たまっているタスクをすべて実行する」みたいな挙動かと思っていました。実際には、タスクは実行されずにキューからクリアされるようです。
      • そういう挙動であれば「Flush」と表記するんですかね。CPUキャッシュの操作でもこれらの用語を使いますが、いつもどっちがどっちだかわからなくなります。

2011-02-05

AppEngine上で一括ダウンローダーを作ろうとしたものの……

前回の記事で書きましたが、私が英語学習のために使っていたサービス「smart.fm」が終了し、有料の新サービス「iKnow!」に移行します。有料化というのも痛いのですが、新サービスのiKnow!には、旧サービスのsmart.fmにあったSNS的な機能がまったく存在しないというのもかなり重大な話です。

今後新サイトでSNS要素がどうなるかは分かりませんが、少なくともsmart.fmが終了するにあたり、smart.fmのSNSにおける主要コンテンツである「日記」については今後消滅する公算が大なので、なんとかローカルに保存したいところです。

というわけで、smart.fmの日記コンテンツをzipで一括ダウンロードする「Smart.fm Memento Maker」なるツールを大急ぎで作っているところです。日記を取得するスマートな方法がないものか模索したのですが、いい手はないようなので、まずは全日記エントリのHTMLを力技で抜いてくるプログラムをでっち上げました。

かなり時間はかかるものの、ローカルではちゃんと動いているようなのでGoogle AppEngineにデプロイしたのですが、「DeadlineExceededError」が発生してまともに動きません。しまった、AppEngineでは一定期間内に応答を返さないとダメなのを忘れていました。これは再設計が必要かも……。

2011-01-15

「Smart.fm List Converter」のソースをGitHubに置きました

現在、いくつかsmart.fm関連のWebアプリケーションを公開しています。<http://en45masao.appspot.com> 先日、これらアプリのソースファイル一式をGitHubにpushしておきました。<https://github.com/en45masao/en45masao-tools>

私が英語学習で使っているsmart.fmでは、教材コンテンツを外部から利用できるAPIを提供しています。ただし、「Smart.fm API のサポート停止のお知らせ」という話が出て、公式には去年2010年の9月からサポートが停止されてしまいました。

しかし、実際には「API自体はストップしないが今後は予告なく仕様を変更します」ということらしく、現時点でもsmart.fm APIは一応動いています。そこで、APIを使ってWebアプリを作り、AppEngineのインフラ上で公開したのでした。

作成したのは「Smart.fm List Converter」というアプリで、smart.fmの単語リストをCSVファイルに出力するアプリです。本家smart.fmのサイトでは、リストをCSVファイルに出力する機能を提供しておらず、ユーザーからエクスポート機能の要望が多かったにもかかわらず、公式にはサポートされていない状態でした。そのため、このアプリを公開したときにはかなりの反響があり(声1声2)、多くのsmart.fmユーザーのお役に立てたようです。

あまりいないとは思いますが、smart.fmユーザーの方で、アプリを改良したいという開発者の方がいるならば、利用してください。まあ、サポートが停止されてドキュメントも非公開になったAPIをいまさら使いたがる人はいないでしょうけど。

アプリの技術的な話をすると、アプリのほとんどの処理をクライアント側(HTML/CSS + JavaScript)でやるような作りにしているため、せっかくのサーバ側(AppEngine)の処理能力を有効に生かせていないんですよね。JavaScript側でsmart.fmリストの取得・解析からCSVデータの生成までやってしまっているので、サーバ側では単に「ファイル出力」をするためだけにAppEngineを使っているという状態。別にAppEngineである必要性はほとんどなかったりします。

ちなみに、AppEngineで使える言語はPythonとJavaの2つがありますが、お手軽そうなPythonの方で組んでいます。勉強のためにと思って、それまで未経験だったPythonで作ってみたのですが、こんな単純な処理だと実質3行程度しか処理がなく、ぜんぜん勉強になりませんでした。