王様のカレー

娘がナンを食べたいといってうるさいので、富士宮の王様のカレーに行ってきた。

ここのチーズナンがたいそう美味い。

1264936732

今回僕はほうれん草ベースのチキンカレー辛さLv.4 with ライスというオーダー。もっと辛くても良かったかな。

1264936738

スピログラフ

ダイソーでスピログラフ用の定規を買ってきた。

1264930897

これは意外に楽しい。この前はルービックキューブで遊んでたし。童心度が高まっている。

ProductName The Spiral Draw Book (Klutz)
Doug Stillinger
Klutz / ?円 ( 2012-01-01 )


能登誉

いけたにさんで。

味わいとフレッシュさが感じられてなかなか良かった。

1264930473

Haskellでルンゲ・クッタ法

さきのオイラー法よりも効率の良いRunge-Kutta法をHaskellで

runge h f  p = runge'
    where runge' = p:zipWith runge'' runge' [h*x| x <- [1..]] 
              where runge'' x t = x + (k1 + 2*k2 + 2*k3 + k4)/6
                        where
                          k1 = h * f x t
                          k2 = h * f (x + k1/2) (t + h/2)
                          k3 = h * f (x + k2/2) (t + h/2)
                          k4 = h * f (x + k3)  (t +h)

f x t = x

刻み幅がそんなに小さくなくても、かなりいい精度が出ていることがわかる。

*Main> let eu = runge 0.1 f 1
*Main> eu !! 10
2.718279744135166

テーラー展開はこれが参考になるというか、展開をするというイメージをつかみやすくなると思う。

ProductName 「無限と連続」の数学―微分積分学の基礎理論案内
瀬山 士郎
東京図書 / ¥ 2,625 ()
在庫あり。

ニュース英語がわかる本

相当前にブックオフで手に入れたんだと思う。

ProductName ニュース英語がわかる本 (集英社新書)
北畠 霞
集英社 / ¥ 714 ()


うんちく系

Haskellでオイラー法を実装する

オイラー法とはあれです、常微分方程式解くやつ。

これをHaskellで実装してみた。下の二行。

euler h f = euler'
    where euler' = (f 1.0 0.0): zipWith (+) euler' [h*y| y <- (zipWith f euler' [h*x| x <- [1..]])]

f = xにすればx = e**tが解になるので。

f _ 0.0 = 1.0
f x t = x

として解いてみる。

*Main> euler 0.00001 f !! 100000
2.7182510547639454

あんま刻み幅を小さくしすぎるのはだめ。

*Main> euler 0.000001 f !! 1000000
*** Exception: stack overflow

AuthKitでSQLAlchemyを使う

pylons bookの19章を参照。

ProductName The Definitive Guide to Pylons
James Gardner
Apress / ¥ 4,506 ()
在庫あり。

from simplesite.model import meta
meta.metadata.bind = meta.engine

をいまいちきちんと理解できてない。

追記 100130

model/meta.pyをみたら

"""SQLAlchemy Metadata and Session object"""
from sqlalchemy import MetaData
from sqlalchemy.orm import scoped_session, sessionmaker

__all__ = ['Session', 'engine', 'metadata']

# SQLAlchemy database engine. Updated by model.init_model()
engine = None

# SQLAlchemy session manager. Updated by model.init_model()
Session = scoped_session(sessionmaker())

# Global metadata. If you have multiple databases with overlapping table
# names, you'll need a metadata for each database
metadata = MetaData()

ってなってるだけだった。

Real Life Is No Cool / Lindstrom & Christabelle

若干 No Coolだったというか、もうひとつメランコリック感が足りなかった

ProductName Real Life Is No Cool
Lindstrom & Christabelle
Smalltown Supersound / ¥ 1,820 (2010-01-19)
通常1~3週間以内に発送

こっちのほうが、、、

ProductName Reinterpretations
Lindstrøm & Prins Thomas
Eskimo / ¥ 1,724 (2007-06-05)
在庫あり。

Mighty Girlは良いですな。

SQLAlchemyのDeclarative APIの使い方

SQLAlchemy 0.5から使えるようになったDeclarative APIはマッパーとテーブルとクラスを一度に定義するものらしい。

なのであとはengineをバインドすればよろしくやってくれる。

上の例だと

import datetime
from sqlalchemy import schema, types, orm

metadata = schema.MetaData()

def now():
    return datetime.datetime.now()

from sqlalchemy.ext.declarative import declarative_base

# Assign the same metadata object we created earlier.
Base = declarative_base(metadata=metadata)

# We still need the pagetag table because we don't want to explicitly define a
# Pagetag class but still
# need to specify the table in the relation between pages and tags.
pagetag_table = schema.Table('pagetag', metadata,
    schema.Column('id', types.Integer,
        schema.Sequence('pagetag_seq_id', optional=True), primary_key=True),
    schema.Column('pageid', types.Integer, schema.ForeignKey('page.id')),
    schema.Column('tagid', types.Integer, schema.ForeignKey('tag.id')),
)

class Page(Base):
    __tablename__ = 'page'

    id = schema.Column(types.Integer,
        schema.Sequence('page_seq_id', optional=True), primary_key=True)
    content = schema.Column(types.Text(), nullable=False)
    posted = schema.Column(types.DateTime(), default=now)
    title = schema.Column(types.Unicode(255), default=u'Untitled Page')
    heading = schema.Column(types.Unicode(255))
    comments = orm.relation("Comment", backref="page")
    tags = orm.relation("Tag", secondary=pagetag_table)

class Comment(Base):
    __tablename__ = 'comment'

    id = schema.Column(types.Integer,
        schema.Sequence('comment_seq_id', optional=True), primary_key=True)
    pageid = schema.Column(types.Integer,
        schema.ForeignKey('page.id'), nullable=False)
    content = schema.Column(types.Text(), default=u'')
    name = schema.Column(types.Unicode(255))
    email = schema.Column(types.Unicode(255), nullable=False)
    created = schema.Column(types.TIMESTAMP(), default=now())

class Tag(Base):
    __tablename__ = 'tag'

    id = schema.Column(types.Integer,
       schema.Sequence('tag_seq_id', optional=True), primary_key=True)
    name = schema.Column(types.Unicode(20), nullable=False, unique=True)

page_table = Page.__table__

これをmodel.pyとかしといてpython対話環境で

>>> execfile('model.py')
>>> from sqlalchemy.engine import create_engine
>>> engine = create_engine('sqlite:///test.db')
>>> metadata.bind = engine
>>> metadata.create_all()

とやってengineをバインドすればsqliteのファイルが作られる。metadataのところはテーブルからもアクセスできて

>>> page_table.metadata.bind = engine
>>> page_table.metadata.create_all()

でも同じことができる。

sqlite> .schema
CREATE TABLE comment (
    id INTEGER NOT NULL, 
    pageid INTEGER NOT NULL, 
    content TEXT, 
    name VARCHAR(255), 
    email VARCHAR(255) NOT NULL, 
    created TIMESTAMP, 
    PRIMARY KEY (id), 
     FOREIGN KEY(pageid) REFERENCES page (id)
);
CREATE TABLE page (
    id INTEGER NOT NULL, 
    content TEXT NOT NULL, 
    posted TIMESTAMP, 
    title VARCHAR(255), 
    heading VARCHAR(255), 
    PRIMARY KEY (id)
);
CREATE TABLE pagetag (
    id INTEGER NOT NULL, 
    pageid INTEGER, 
    tagid INTEGER, 
    PRIMARY KEY (id), 
     FOREIGN KEY(pageid) REFERENCES page (id), 
     FOREIGN KEY(tagid) REFERENCES tag (id)
);
CREATE TABLE tag (
    id INTEGER NOT NULL, 
    name VARCHAR(20) NOT NULL, 
    PRIMARY KEY (id), 
     UNIQUE (name)
);

Linuxカーネル2.6解読室 Part I

カーネルプリミティブ

ProductName Linuxカーネル2.6解読室
高橋浩和,小田逸郎,山幡為佐久
ソフトバンククリエイティブ / ¥ 5,670 ()
在庫あり。