Hatena::Grouprubyist

たばさの RSSフィード

05/18(月) 2009

free Quotas

| free Quotas - たばさの を含むブックマーク はてなブックマーク - free Quotas - たばさの

制限を越えるとアプリはover quotasという表示になる。24時間ごとにリセットされる。日本時間では16時?


有料は従量制。

一日の予算を設定する。設定した上限以上は課金されることはない。

無料分しか使わなければ無料。使った分だけ課金。

予算変更はいつでもできる。

増やす場合はgoogle checkoutの確認後15から30分で有効になる。

減らす場合はgoogle checkoutも必要なく、15分以内に有効になる。

招待されたほかの開発者は一日の予算と割当てを変更できるが、管理者の設定したgoogle checkoutの週間上限まで。予算に税は含まれない。


Error 404 (Not Found)!!1

no title

mixiアプリ メモ

mixiアプリ メモ - たばさの を含むブックマーク はてなブックマーク - mixiアプリ メモ - たばさの

んークワガタくらいにしておこうよ

短縮URL 作ってみた

| 短縮URL 作ってみた - たばさの を含むブックマーク はてなブックマーク - 短縮URL 作ってみた - たばさの

まあ短くはないですが。

http://tabasano-app.appspot.com/u

http://tabasano-app.appspot.com/go/test <= 好きな英数文字列で登録



shorturl.htm

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>short url - 好きな名前で</title>
</head>
<body>
<div>{{name}}</div>
<div>=> <a href='{{url}}'>{{exp}}</a></div>
<br>
リダイレクトを追加します
  <form action="/u/add">
    http://tabasano-app.appspot.com/go/<input name="name" size=30>
<br> => url:
<input name="url" size=90>
<button>登録</button>
  </form>
</body>
</html>

shorturl.py

# -*- coding : utf-8 -*-

import os
import wsgiref.handlers

from google.appengine.ext import webapp
from google.appengine.ext import db
from google.appengine.ext.webapp import template

class ShortUrl(db.Expando):
    name = db.StringProperty()
    url = db.StringProperty()

class MainPage(webapp.RequestHandler):
    def get(self):
        template_values = {
            'user': "u"
        }
        tmpl = os.path.join(os.path.dirname(__file__), 'shorturl.htm')
        self.response.out.write(template.render(tmpl, template_values))

class SubPage(webapp.RequestHandler):
    def get(self,match):
        q = db.GqlQuery("SELECT * FROM ShortUrl"
                                   " WHERE name = :name", name=match)
        result=q.get()
        tmpl = os.path.join(os.path.dirname(__file__), 'shorturl.htm')
        if result is None:
            url="(not found)"
        else:
            url=result.url
        template_values = {
            'name': "http://tabasano-app.appspot.com/go/"+match,
            'url': url,
            'exp': url
        }
        self.response.out.write(template.render(tmpl, template_values))

class Go(webapp.RequestHandler):
    def get(self,match):
        q = db.GqlQuery("SELECT * FROM ShortUrl"
                                   " WHERE name = :name", name=match)
        result=q.get()
        tmpl = os.path.join(os.path.dirname(__file__), 'shorturl.htm')
        if result is None:
            self.response.out.write("bad url")
            return
        self.redirect(result.url)

class AddUrl(webapp.RequestHandler):
    def get(self):
        name = self.request.get("name")
        url = self.request.get("url")
        if name=="" or url=="" or len(url)<12 or url[:4]!="http":
            self.response.out.write("bad data")
            return
        q = db.GqlQuery("SELECT * FROM ShortUrl"
                                   " WHERE name = :name", name=name)
        result=q.get()
        if result is not None:
            tmpl = os.path.join(os.path.dirname(__file__), 'shorturl.htm')
            template_values = {
                'name': name+" ( is already exist! )",
                'url': result.url,
                'exp': result.url
            }
            self.response.out.write(template.render(tmpl, template_values))
            return
        newurl = ShortUrl(name=name,
                              url=url)
        newurl.put()
        self.redirect("/u/"+name)


def main():
    application = webapp.WSGIApplication([('/u', MainPage),
                                          ('/u/add', AddUrl),
                                          ('/u/(\w+)', SubPage),
                                          ('/go/(\w+)', Go)
                                         ], debug=False)
    wsgiref.handlers.CGIHandler().run(application)

if __name__ == "__main__":
    main()

app.yaml

application: tabasano-app
version: 1
runtime: python
api_version: 1

handlers:
- url: /u
  script: shorturl.py
- url: /u.*
  script: shorturl.py
- url: /go/.*
  script: shorturl.py

f:id:hatecha:20090518170339j:image


(ここではdb.Expandoを使ってみようとして継承したけれど機能は使ってないのでdb.Modelでもおなじ)

class めも

| class めも - たばさの を含むブックマーク はてなブックマーク - class めも - たばさの

python

>>> class Parent:
...   pass
...
>>> class Child(Parent):
...   def pri(self,dat):
...     print "dat="+dat
...
>>> c=Child()
>>> c.pri(12)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 3, in pri
TypeError: cannot concatenate 'str' and 'int' objects
>>> c.pri("12")
dat=12
>>>

ruby

irb(main):001:0> class Parent
irb(main):002:1> end
=> nil
irb(main):013:0> class Child<Parent
irb(main):014:1>   def pri dat
irb(main):015:2>       print"dat=#{dat}"
irb(main):016:2>   end
irb(main):017:1> end
=> nil
irb(main):018:0> c=Child.new
=> #<Child:0x2c744b0>
irb(main):020:0> c.pri 12
dat=12=> nil
トラックバック - http://rubyist.g.hatena.ne.jp/hatecha/20090518
カレンダー
<< 2009/05 >>
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
archive Error : RSSが取得できませんでした。