朝からPerl6の実装のひとつのRakudo Starを入れて遊んでた。
$ ./perl6
> for 1..5 { .say }
1
2
3
4
5
無限リスト
> for 1..Inf { .say }
1
2
3
...
20092
20093
20094
Segmentation fault
週末にもう少し触ってみよう。
朝からPerl6の実装のひとつのRakudo Starを入れて遊んでた。
$ ./perl6
> for 1..5 { .say }
1
2
3
4
5
無限リスト
> for 1..Inf { .say }
1
2
3
...
20092
20093
20094
Segmentation fault
週末にもう少し触ってみよう。
29072010 life
拡張現実とか興味ないとか言われるが、こういう内容は夫婦で読めるのでよい。
Q&A式の一問一答で、初級、中級、上級と徐々に内容が難しくなっていく構成なので読みやすかった。
もともと議論の出発点としての成長率と出生率がずれているというのは理解していたのだけど、年金が「賦課方式」だと今後難しいだろうというのはよくわかった。
あと、小難しい用語は、平易にすると反感勝手困る内容なので、わざと難解な言葉におきかえているというとこは笑った。
こっちもあわせて読むといいかも。
逃げきれそうな世代は、逃げ切りをはかるもんなんかね?年功序列も、年金も? なんて思った。まぁ、そういう世代は自分の親の世代なんだけど、彼らは孫に何を残したいのかなぁ、僕らはどうすべきなのかなぁと。価値観違うから世代間闘争でもなんでもやって折り合い付ければいいんだろうと思うけど、早い段階で土俵にあげるように義務教育にでも組み込むとかは必要なんじゃないかなぁと。
そうしないと少なくともフェアじゃないよな。
28072010 life
28072010 life
時間は資産なのでうまく使いましょう。
読みやすいし、主張も分かりやすかった。
28072010 Python
cPickleを使ってみる。
ダンプするとき
import cPickle
with open("list.txt","w") as f:
cPickle.dump([1,2,3,4,5],f)
ロードするとき
with open("list.txt","r") as f:
a = cPickle.load(f)
print a
Python クックブック 第2版pythonのMarkdownにはPygmentsをつかったコードハイライト用のエクステンションがあるので、それを使えば簡単にかける

スクリーンショット撮ってから「セッションとか使ってないからsessionとかkeyとかいらないじゃん」と思って少し綺麗にしたので最終的には15行くらい。
from flask import Flask, request, url_for, render_template
from markdown import markdown
DEBUG = True
app = Flask(__name__)
app.config.from_object(__name__)
@app.route('/',methods=['POST', 'GET'])
def show_code(code = ""):
if request.method == 'POST':
code = markdown(request.form['code'], ['codehilite'],safe_mode=False)
return render_template('show_code.html', code=code)
if __name__ == '__main__':
app.run()
markdownで生成したhtmlをそのままテンプレートに渡すとエスケープされてしまうので、autoescapeをFalseにした。今回ここが一番悩んだがドキュメントをちゃんと読めば書いてあった。
<!doctype html>
<title>CodeHilite</title>
<link rel=stylesheet type=text/css href="{{ url_for('static', filename='style.css') }}">
<body>
<form action="{{ url_for('show_code') }}" method=post class=add-entry>
<dl>
<dt>code:
<dd><textarea name=code rows=5 cols=40></textarea>
<dd><input type=submit value=hilite>
</dl>
</form>
<div class=page>
<h1>CodeHilite</h1>
{% autoescape false %}
{{ code }}
{% endautoescape %}
</div>
</body>
</html>
cssはpygmentsであらかじめファイルに出力しておいた
from pygments.formatters import HtmlFormatter
with open("style.css","a") as f:
f.write(HtmlFormatter().get_style_defs('.codehilitetable'))
Flask楽しい。
Lonely Planet Discover Japan先週末はHaskell読書会に参加してきた。みなさんお疲れ様でした。今回8章
do記法使わないで書いてあったので当日は、 筆者のページのサンプル見ながらdo記法で書いてた。
この日からガンダムの公開で、ヒトも多かった。

メロンパン

懇親会の赤から。焼肉した後に鍋が出てきた。

来月は浜松。浜松は行ったことないので楽しみ。
OAuth使えば簡単だろうと。

あとは名刺型にhtmlをいじればよいんだけど飽きた。
from flask import Flask, request, session, g, redirect, url_for, abort, render_template, flash from flaskext.oauth import OAuth import qrencode DEBUG = True SECRET_KEY = 'development key' TWITTER_URL = "http://twitter.com/" app = Flask(__name__) app.config.from_object(__name__) oauth = OAuth() twitter = oauth.remote_app('twitter', base_url='http://api.twitter.com/1/', request_token_url='http://api.twitter.com/oauth/request_token', access_token_url='http://api.twitter.com/oauth/access_token', authorize_url='http://api.twitter.com/oauth/authorize', consumer_key='XXXXXXXXXXXXX', consumer_secret='XXXXXXXXXXXXX' ) @twitter.tokengetter def get_twitter_token(): return session.get('twitter_token') @app.route('/') def show_entries(): screen_name = session.get('screen_name',None) name = session.get('name',None) profile_image_url = session.get('profile_image_url',None) entry = {} if screen_name != None: imgurl = "http://twitter.com/%s" % screen_name imgfile = "%s.png" % screen_name qrencode.encode_scaled(imgurl,50)[2].save("static/"+imgfile) resp = twitter.get('http://twitter.com/status/user_timeline/'+screen_name+".json") if resp.status == 200: user = resp.data[0]['user'] name = user['name'] url = user['url'] profile_image_url = user['profile_image_url'] else: name = None profile_image_url = None entry = dict(screen_name=screen_name,qrimg=imgfile,name=name, profile_image_url=profile_image_url, url=url) return render_template('show_entries.html', entry=entry) @app.route('/login') def login(): return twitter.authorize(callback=url_for("oauth_authorized")) @app.route('/logout') def logout(): session.pop('screen_name', None) session.pop('logged_in', None) session.pop('twitter_token', None) flash('You were logged out') return redirect(url_for('show_entries')) @app.route('/oauth-authorized') @twitter.authorized_handler def oauth_authorized(resp): next_url = url_for('show_entries') if resp is None: flash(u'You denied the request to sign in.') return redirect(next_url) session['logged_in'] = True session['screen_name'] = resp['screen_name'] session['twitter_token'] = ( resp['oauth_token'], resp['oauth_token_secret'] ) flash(resp['screen_name'] + ' were signed in') return redirect(next_url) if __name__ == '__main__': app.run()
<!doctype html> <title>TwitterCard</title> <link rel=stylesheet type=text/css href="{{ url_for('static', filename='style.css') }}"> <div class=page> <h1>TwitterCard</h1> <div class=metanav> {% if not session.logged_in %} <a href="{{ url_for('login') }}">log in</a> {% else %} <a href="{{ url_for('logout') }}">log out</a> {% endif %} </div> {% for message in get_flashed_messages() %} <div class=flash>{{ message }}</div> {% endfor %} <img src="{{ entry.profile_image_url }}" /> <ul class=entry> <li>{{ entry.screen_name }}</li> <li>{{ entry.name }}</li> <li>{{ entry.url }}</li> </ul> <img src={{ url_for('static',filename=entry.qrimg) }} /> </div>
ついったー名刺ってのがあってQRコードはblogとかのURLなんだけど、ツイッターオフとかいくと、簡単にフォローしたいからQRコードはtwitterアカウントのほうがいいかな?なんて思っていたので作ってみようとした(がもう寝る時間なので眠くなってしまい、ヤル気が急速に失われた)。
エントリ書いてて思ったんだが、ツイッターオフ参加者のIDのリストをQRコードにしといて、そいつを食わすとまとめてフォローするサービスのほうがいいような気がしてきた。そんなのないかな。
名刺見ながらポチポチ登録作業すんのもめんどいよね。