2010年02月06日

遅延なう

Google App Engine の勉強をかねて、電車の遅延情報を提供する「遅延なう」というサービスを作ってみました。

ついでに mixi アプリの勉強もかねて、「mixi アプリ版の遅延なう」も作ってみました。やってることは単純で、 twitter API で拾ってきた情報を一度 GAE 上の datastore や memcached で保持して、 mixi からのリクエストがきた時に XML として吐き出しています。

ついでに iPhone アプリ版も作ろうと思ったけど、そこまでのモチベーションは無かったので、無難に Web アプリ版を作ってみました。 safari からホーム画面にブックマークするとそれっぽく使えます。

2010年01月30日

THIS IS IT

[ Movie ]

マイケル・ジャクソン THIS IS IT(特製ブックレット付き) [Blu-ray]
マイケル・ジャクソン THIS IS IT(特製ブックレット付き) [Blu-ray]
おすすめ平均
stars演奏について
stars宝物を探しに。
stars愛と情熱に満ちたパフォーマーの生き様に感服
stars全ての人に広めたい
starsなんと言えばいいかわかりません!

Amazonで詳しく見る
by G-Tools

マイケル・ジャクソン世代ではないので奇行が目立つ人程度にしか知らなかったけど、アーティストとしてはプロなんだなぁーと再認識した。

コンサートを作り上げる過程が面白いです。

2010年01月24日

また GALA 湯沢

[ Diary ]

今シーズン3往復目の越後湯沢です。 かなり雪が降ってて寒かったけど、そのぶん転んでも痛くないから気にせず豪快に転がれた。

Gala湯沢

たしかに昔(90年前後)はリフトに長蛇の列ができてたイメージがある。 今は比較的スムーズに乗れるから、利用客からの視点としてはスキー人口が減った方が快適ではある。。。

やっぱり料金の問題で、東京周辺から新潟/長野のゲレンデまで行くためには、交通費だけでけっこうかかるし、現地についてもリフト券やゲレンデ内での食事はかなり高いですよね。さらに道具をレンタルして・・・とかなると本当に高い。

また、荷物とか考えると車で行った方が便利っぽいレジャーではありますが、20代の人達で車離れが起きているわけで、このあたりも影響しているんでしょうね。

昨日日帰りで行った Gala 湯沢は新幹線でのアクセス性も良いし、レンタル品の WEB からの事前予約ができるから料金支払いなどなくスムーズ(これあるのに現地で申し込もうとする人の行列ができてましたが・・・、周知が足りない)、JR運営だけあってゲレンデ内でも Suica が使えるので会計がスムーズ、とゲレンデの中では色々頑張ってる方だと思いました。

新しいお客さんを呼び込むのも大事だけど、既存のスキー客の不満点ももっと改善してほしい。 食事時にレストランが非常に混んでるので、混み具合をリアルタイムで携帯に配信するであれ、そこから携帯で予約するであれ、90年代にはできなかったゲレンデ内の個人個人に対して情報をアウトプットできるようになったのだから、昔のシステムのままではなく、もう少しやれることあるんじゃないのかなぁーと思ったしだいです。

2010年01月12日

セントレジャー舞子

[ Diary ]

セントレジャー舞子

いつもの齊藤研の人達とセントレジャー舞子スキー場に行ってきた。3日間もあったので、比較ダラダラと滑ってました。

セントレジャー舞子

先日行ったラフォーレ修善寺、Gala湯沢の駅、今回の宿、あたりはどこ行っても iPhone が繋がらない。これだけ繋がらないと、携帯電話としては全然使い物になりませんね。個人的には電話としては全く使ってないから構わないけど、パケット通信さえできなくなるのは不便極まりないです。電話状況の改善希望。


源氏荘

2009年12月28日

Google App Engine(GAE) で twitter API を使う

Web2.0 的な流行言葉になりつつ(なった?)ある、クラウド・コンピューティングを試してみました。有名どころだと Amazon or Google なわけですが、 Amazon は有料なので無料の GAE こと Google App Engine を使ってみることにした。

Google App Engine での開発はとても簡単で、 SDK をダウンロードするとローカルでの開発環境(ローカルサーバ)が付いてくるから、 Python もしくは Java でコードを書き、ローカルサーバで動作確認、ちゃんと動いたら Google のサーバに deploy するだけです。 deploy も GUI のボタン一発でできちゃうので簡単です。苦労するのは日本ではあまりメジャーでない Python の作法の初歩を覚えることくらいかな。

お試しで作ったのがこれです。

Python で twitter の Search API を叩いて返ってきた Atom/XML を parse して template に流し込んでるだけ。

# ソース

Python の作法はまったく分かりませんが、こんな感じで動いてます。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# Copyright 2007 Google Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#


import wsgiref.handlers
import urllib
import os

from google.appengine.api import urlfetch
from google.appengine.ext import webapp
from google.appengine.ext.webapp import template
import xml.etree.ElementTree as etree

class MainHandler(webapp.RequestHandler):

  def get(self):
    self.response.out.write('Hello world!')

class TwitterSearch(webapp.RequestHandler):

  def get(self):
    
    keyword = u"鳩山".encode('utf-8');
    url = 'http://search.twitter.com/search.atom?'
    query = [
      ('q', keyword),
      ]
    
    form_data = urllib.urlencode(query)
    result = urlfetch.fetch( url+form_data+'&lang=ja' )
    #self.response.out.write( url+ form_data )
    
    if result.status_code == 200:
      xml = etree.fromstring( result.content )

    params  = []
    for entries in xml.getiterator("{http://www.w3.org/2005/Atom}entry"):
      #self.response.out.write( entries.tag )
      param = { "img" : entries.findall("{http://www.w3.org/2005/Atom}link")[1].get("href"),
                "name" : entries.find(".//{http://www.w3.org/2005/Atom}author/{http://www.w3.org/2005/Atom}name").text,
                "content" : entries.find("{http://www.w3.org/2005/Atom}content").text }
      
      params.append( param )
      #self.response.out.write( "<img src=" + entries.findall("{http://www.w3.org/2005/Atom}link")[1].get("href") + " />" )
      #self.response.out.write( entries.find(".//{http://www.w3.org/2005/Atom}author/{http://www.w3.org/2005/Atom}name").text )
      #self.response.out.write( entries.find("{http://www.w3.org/2005/Atom}content").text )
      #self.response.out.write( '<br /><br />' )

    template_values = {
      'params': params,
    }
    path = os.path.join(os.path.dirname(__file__), 'tmpl/twitter_search.html')
    self.response.out.write(template.render(path, template_values))
      

    
def main():
  application = webapp.WSGIApplication([('/', MainHandler),
                                        ('/twitter_search', TwitterSearch)],
                                       debug=True)
  wsgiref.handlers.CGIHandler().run(application)


if __name__ == '__main__':
  main()

xml.etree.ElementTree で XML を parse すると、名前空間を指定して tag を指定しなければならなくてメンドクサい。回避策はわからない。。。

      param = { "img" : entries.findall("{http://www.w3.org/2005/Atom}link")[1].get("href"),
                "name" : entries.find(".//{http://www.w3.org/2005/Atom}author/{http://www.w3.org/2005/Atom}name").text,
                "content" : entries.find("{http://www.w3.org/2005/Atom}content").text }

みんなのPython 改訂版
みんなのPython 改訂版
おすすめ平均
stars消去法的定番書
stars知識の整理と Python3への準備に役立つ
stars初級者向け、ただし...

Amazonで詳しく見る
by G-Tools

# つまったところ

Error: Server Error

The server encountered an error and could not complete your request.
If the problem persists, please report your problem and mention this error message and the query that caused it.

ローカル環境ではちゃんと動くのに Google のサーバで実行するとこんなエラーログが出るところで2日間もつまったんだけど、

#!/usr/bin/env python
# -*- coding: utf-8 -*-

本番サーバ上では二行目の文字コード指定が無いとソースコード中の日本語を扱えないようです。

# Google App Engine の感想

簡単なアプリケーションを書いて Web 上で動かしたいなぁーってときには最適なプラットフォームですね。 Python はインデントでブロックを指定する言語仕様が最初とっつきにくかった。それと、文字コード周りの処理がめんどうな印象。

Gala湯沢

[ Diary ]

毎年恒例になりつつある Gala 湯沢に行ってきた。

Gala湯沢

例年は雪が無いかもな時期ですが、今年はたっぷり積もってました。

2009年12月22日

FOMA補助充電アダプタ01

eneloop

ドコモには、2年間同じ携帯を使い続けると新しい電池を貰えるというサービスがあるので、ドコモショップに行ってみた。

そしたら、電池以外にも「FOMA補助充電アダプタ01」という物も選べるとのことで、電子機器好きとしては迷わず珍しめな補助充電アダプタ01を選択してみました。外で充電することなんてないので、使うことはほぼ無いと思いますが。。。

物は「Powered by eneloop」なので、三洋製です。

【ドコモ純正商品】FOMA補助充電アダプタ01
【ドコモ純正商品】FOMA補助充電アダプタ01

Amazonで詳しく見る
by G-Tools

2009年12月17日

FF XIII

[ Game ]

ひさびさにゲームを買ってみました。FF13です。

やはりハイビジョンになると映像がすごいですね。シリーズでは各ハード一作目の FF VII, X が好きなので、PS3 での一作目である XIII にも期待しています。

ファイナルファンタジーXIII
ファイナルファンタジーXIII
おすすめ平均
stars確かに…
starsゲームもここまできたか!
starsこれ本当にゲームなの?
stars期待し過ぎの反動?
starsファンタジー過ぎてユーザー置いてきぼり。製作者だけは楽しい感じ。

Amazonで詳しく見る
by G-Tools

2009年12月13日

木更津

[ Diary ]

先週は木更津に滞在していました。意外に神奈川県から近いんですね。アクアラインの高速バスを使えば横浜駅から約60分でついちゃいます。


木更津駅前
木更津駅前
木更津

2009年12月06日

ハゲタカ, あなたは私の婿になる

[ Movie ]

サンフランシスコのとき機内で見た映画。

映画 ハゲタカ(2枚組) [Blu-ray]
映画 ハゲタカ(2枚組) [Blu-ray]
おすすめ平均
stars経済ドラマの傑作です
stars遊び心があったら傑作に

Amazonで詳しく見る
by G-Tools

終始真剣すぎて、見てて疲れた。内容は面白いけど。

The Proposal [Blu-ray] (邦題: あなたは私の婿になる)
The Proposal [Blu-ray]Sandra Bullock

Average Review
starsFunny & Entertaining
starsAwesome Movie
starsFormula, yet the actors and dialog make the movie
starsMissing something
starsMiddle of the road RomCom

See details at Amazon
by G-Tools

ハゲタカとは真逆な内容。こちらはバカバカしさが面白い。

2009年12月04日

修善寺 2009

[ Diary ]

先週末は毎年恒例になりつつある修善寺テニス会に行ってきました。ラフォーレ修善寺は4回目。
DSC00917.JPG

まったくやる気の感じられないテニスをして、Wii とか Rolly とか持ち寄った電子機器で遊ぶという、いつもの感じの旅行です。
DSC01115.JPG
iPhone, iPod touch のお供に
DSC01085.JPG
DSC01137.JPG

さらに過去の記事を読む