19032012 life
久しぶりにジムに行ってガツッと走って帰ってきたら、娘と息子が待ち構えていてダンゴムシ探しに付き合わされた。

紫陽花の芽が。春ですな。

ダンゴムシを二匹ゲット。

虫かごに入れてお持ち帰り(後で逃がす)。

19032012 life
久しぶりにジムに行ってガツッと走って帰ってきたら、娘と息子が待ち構えていてダンゴムシ探しに付き合わされた。

紫陽花の芽が。春ですな。

ダンゴムシを二匹ゲット。

虫かごに入れてお持ち帰り(後で逃がす)。

19032012 jqm
jadeで書いてる。data-*のカスタム属性で指定すればアイコンなんかも勝手に表示されて、さくっと作るのに向いてそうな感じ。

!!! 5 html head title jqm test link(rel="stylesheet", href="http://code.jquery.com/mobile/1.0/jquery.mobile-1.0.min.css") script(src="http://code.jquery.com/jquery-1.7.1.min.js") script(src="http://code.jquery.com/mobile/1.0/jquery.mobile-1.0.min.js") meta(name="viewport", content="width=device-width, initial-scale=1") body section#page1(data-role="page") header(data-role="header") h1 jQuery Mobile .content(data-role="content") h3 さまざまなアイコン div(data-role="controlgroup", data-type="horizontal", data-inline="true") a(href="#", data-role="button", data-icon="home", data-iconpos="left") ホーム a(href="#", data-role="button", data-icon="gear", data-iconpos="left") 設定 a(href="#", data-role="button", data-icon="search", data-iconpos="left") 検索 footer(data-role="footer") h1 K'zfm
18032012 life
娘が小学生になるので、机をリビングに持ってきて、いろいろレイアウトを変更した。

そのせいで、ノートブックをだらだらいじるという自分の居場所が無くなってしまった。特に電源をどこに用意するか悩んでいる。

18032012 life
初代がリコール対象だってことを教えてもらったので、早速修理に出したら8GのiPod nanoになって戻ってきた
フィットネスっていう機能がついてた。これを買えばいいのか
ホイールが無いので運転中は操作しにくい。
暖かくなってきたのでそろそろジムを退会しようかと思っている。 家の周りを走るのになんかいいアプリないかな
AndroidだとJogTrackerになるのかな?
17032012 chemoinformatics q-chem Python
昨日は製薬業界の集まりがあって、他社のヒトと少し話す機会があって、LBDDどういう感じですかねと言われて、量子化学計算に真面目に取り組んでますよーっていう話から、ケミストは電子吸引基とか供与基とか言う割に計算して確かめようとしないんですよねー(そうですよねー)っていう流れになったので、そちらのケミストは計算するんですかねー?って聞いたら、するヒトはするし、しないヒトはしないっていう答えが返ってきた。想定通り。
もう少し知りたいのは、ちゃんと計算するケミストは、結局ただの計算マニアで結局普通のヒトなのか、それとも論理的で優秀な傾向が強いのか?ということかな。
さて、pygamessをpybelに対応させたので、より簡潔に書けるようになった。
>>> from pygamess import Gamess >>> import pybel >>> g = Gamess() >>> g.run_type('optimize') >>> mol = pybel.readstring('smi','C') >>> mol.make3D() >>> optimized_mol = g.run(mol) >>> optimized_mol.energy -37.0895866208
やっぱコンストラクタに引数をわたせるようにするべきだよなぁ。
量子化学計算したいならこれかな。
Flask-OpenIDのサンプルアプリを Flask-SQLAlchemyとPyJadeを使って書きなおしてみた。
$ tree
.
├── app.py
└── templates
├── create_profile.jade
├── index.jade
├── layout.jade
└── login.jade
import os from flask import Flask, request, session, g, \ redirect, url_for, abort, render_template, flash, jsonify from flaskext.openid import OpenID from flaskext.sqlalchemy import SQLAlchemy DEBUG = True SECRET_KEY = 'openidsample' databese_file = os.path.join(os.path.abspath(os.path.dirname(__file__)), 'oidsample.db') SQLALCHEMY_DATABASE_URI = 'sqlite:///%s' % databese_file app = Flask(__name__) app.config.from_object(__name__) app.jinja_env.add_extension('pyjade.ext.jinja.PyJadeExtension') db = SQLAlchemy(app) oid = OpenID(app, os.path.join(os.path.dirname(__file__), 'openid')) class User(db.Model): __tablename__ = 'users' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(60)) email = db.Column(db.String(200)) openid = db.Column(db.String(200)) def __init__(self, name, email, openid): self.name = name self.email = email self.openid = openid @app.before_request def lookup_current_user(): g.user = None if 'openid' in session: g.user = User.query.filter_by(openid=session['openid']).first() @app.route('/') def show_index(): return render_template('index.jade') @app.route('/login', methods=['GET', 'POST']) @oid.loginhandler def login(): if g.user is not None: return redirect(oid.get_next_url()) if request.method == 'POST': openid = request.form.get('openid') if openid: return oid.try_login(openid, ask_for=['email', 'fullname', 'nickname']) return render_template('login.jade', next=oid.get_next_url(), error=oid.fetch_error()) @oid.after_login def create_or_login(resp): session['openid'] = resp.identity_url user = User.query.filter_by(openid=resp.identity_url).first() if user is not None: flash(u'Successfully signed in') g.user = user return redirect(oid.get_next_url()) return redirect(url_for('create_profile', next=oid.get_next_url(), name=resp.fullname or resp.nickname, email=resp.email)) @app.route('/create-profile', methods=['GET', 'POST']) def create_profile(): if g.user is not None or 'openid' not in session: return redirect(url_for('index')) if request.method == 'POST': name = request.form['name'] email = request.form['email'] if not name: flash(u'Error: you have to provide a name') elif '@' not in email: flash(u'Error: you have to enter a valid email address') else: flash(u'Profile successfully created') db.session.add(User(name, email, session['openid'])) db.session.commit() return redirect(oid.get_next_url()) return render_template('create_profile.jade', next_url=oid.get_next_url()) @app.route('/logout') def logout(): session.pop('openid', None) flash(u'You were signed out') return redirect(oid.get_next_url()) if __name__ == '__main__': app.run()
bootstrap2をちょっと使いまわした。
!!! 5 html.no-js(lang='en') head title openid sample body .container block body
extends "layout.jade" block body if g.user h1 you are logged in as {{ g.user.name }} p a(href="{{ url_for('logout') }}") Logout else h1 a(href="{{ url_for('login') }}") Login
Flask-OpenIDのサンプルをhtml2jadeで変換した。
extends "layout.jade" block body h2 Sign in form(action='', method='post') | {% if error %} p.error strong Error: | {{ error }} | {% endif %} p | OpenID: input(type='text', name='openid', size='30') input(type='submit', value='Sign in') input(type='hidden', name='next', value='{{ next }}')
Flask-OpenIDのサンプルをhtml2jadeで変換した。
extends "layout.jade" block body h2 Create Profile p | Hey! This is the first time you signed in on this website. In | order to proceed we need a couple of more information from you: form(action='', method='post') dl dt | Name: dd input(type='text', name='name', size='30', value="{{ request.values.name }}") dt | E-Mail: dd input(type='text', name='email', size='30', value="{{ request.values.email }}") p input(type='submit', value='Create profile') input(type='hidden', name='next', value="{{ next }}") p If you don't want to proceed, you can a(href="{{ url_for('logout')}}") sign out again.
データベースを初期化するのに
>>> from app import db >>> db.create_all()
と叩く必要がある。
17032012 life
息子が「あそんでみたいねー」って言うので、「いいねー!でもパパお金ないよ?」って言っておいた。
こっちでもいいような気もするが
15032012 coffeescript Node.js
Spineの作者製なのでCoffeeScriptで書けていい感じっぽいんだけど、Expressと比べてどうなんだろうか。 少し触ってみないとそこらへんがよくわからん。
この本は面白かった。
ちなみに今はExpress+nowjsっていう組み合わせでイントラサイトを作っているけど、調子いいのでなかなか気に入っている。
再来月に二回目の三島バルがあるらしいので、それまでにつくる会が開ければExpressかAceでこんなの作ってみようかなぁと思っている(自分のために)。多分俺のバルっていうタイトルのサイトで、酒を飲んでふらふらしながら自分探しの旅をするっていう設定のリアルタイムウェブなサイトにしようかなぁと。
14032012 photograph
「何が良い写真なのか」わかるためには、良い写真をよく見続けることしかないんだろうなぁと。
何がよいドラムンベースか理解するためにはドラムンベースの名曲を聴きまくり、何が良い酒か知るためには、良い日本酒を飲みまくると。
いろいろ勉強になった。初心者向けとしてはわかりやすくていい。
構図とかよくみていた。面白い。
うちの犬を練習に使おうと思った。
13032012 life
本を買うのを2ヶ月ほど自粛すればこのレンズが買える。
TAMRON AF18-200mm F/3.5-6.3 XR Di II LD ASPHERICAL [IF] MACRO デジタル専用 キャノン用 A14Eが、こっちのほうが欲しいかもしれん。