QRコードにtwitterアイコンを埋め込むPythonスクリプト

xooqで本を渡す際に、背表紙の裏側にtwitterアイコン入りのQRコードシールを張っておいたらウッフィーが増えて面白いかなと思い、簡単なPythonスクリプトを書いてみた。

import urllib
import Image
from cStringIO import StringIO

twitter_id = "kzfm"

url = "http://chart.apis.google.com/chart?chs=200x200&cht=qr&chl=http://twitter.com/%s" % twitter_id
buffer = urllib.urlopen(url).read()
qr_image = Image.open(StringIO(buffer))

twurl = "http://img.tweetimag.es/i/%s_m" % twitter_id
twbuffer = urllib.urlopen(twurl).read()
tw_image = Image.open(StringIO(twbuffer))

qr_image.paste(tw_image, (147, 147))

qr_image.save("twqr.png")

TwQR

ウェブオペレーション

成功するためには、致命的でない失敗を如何に重ねるかと誰かが言ったように、先人の経験から学ぶことは非常に意味のあるものです。

本書は、18人のエキスパートによるエッセイ集のようなもので、様々な経験が語られているので参考になった。

とりわけメトリクスの重要性はウェブオペレーションに限らず全てのカイゼンが必要なプロジェクトにおける真実だよなぁと思った。

  • より早いフィードバック
  • もっと自動化
  • 現実世界のメトリクスを監視
  • 断続的なバグにうまく対処する
  • より小さなバッチ

あと、読んでいてこれって創薬プロジェクトが抱えている問題そのものじゃないかと思ったりした。という視点で見てみると

  • MTTD (平均診断時間)
  • MTTR (平均復旧時間)
  • MTTF (平均故障時間)
  • MTBF (平均故障間隔)

が創薬研究において何を意味しているのかを考えるのは意義深いかもと感じた。

ProductName ウェブオペレーション ―サイト運用管理の実践テクニック

オライリージャパン / 2730円 ( 2011-05-14 )


インフラはアプリケーションである

目次

  • 1章 ウェブオペレーション:キャリア
  • 2章 Picnikにおけるクラウドコンピューティングの利用とその教訓
  • 3章 インフラとアプリケーションのメトリクス
  • 4章 継続的デプロイ
  • 5章 コードとしてのインフラ
  • 6章 監視
  • 7章 いかにして複雑なシステムは失敗するか
  • 8章 コミュニティ管理とウェブオペレーション
  • 9章 予期しないトラフィック急増への対応
  • 10章 開発と運用の協力と連携
  • 11章 訪問者の気持ち:ユーザ対面メトリクス
  • 12章 ウェブにおけるリレーショナルデータベースの戦略と戦術
  • 13章 障害を活用する:ふりかえりの技芸と科学
  • 14章 ストレージ
  • 15章 非リレーショナルデータベース
  • 16章 アジャイルインフラストラクチャ
  • 17章 夜中に聞こえる奇妙な物音(と、ぐっすり眠る方法)
  • 18章 日本の料理のインフラ

FilePadはNode.js製のオンラインエディタ

Node.jsとcoffee-scriptの勉強のために読んでみた。coffee-scriptは(javascriptよりも)読みやすくていいですね。

サーバーにあるファイルを読み書きできます。

filepad

複数のクライアントで同時に開いても変更がリアルタイムで反映されているので面白い。

でも使い道がよくわからない。

脳をハックしながらジムを習慣付ける

風邪を引いたり出張が重なったりして行かない日が続くと足が遠のいてしまうことがあるが、そこそこ定期的に通えているという僕のジムライフは、脳が教える! 1つの習慣を読んだおかげで、それなりに楽しく取り組んでいる。

ジムではランニングマシンばかりなので、CNNのiPodを聞くこととと走ることを結びつけている。そうすると今回20分しか走らなかったじゃなくて今日は20分英語の勉強したという風にポジティブに捉えるようになるので、ちょっとだけでもジムで走ることが肯定されるのでよいです。

あと走り終わるとすっきりするので、その後のコーディングとか集中できるのも良いですね。

ProductName 脳が教える! 1つの習慣
ロバート・マウラー
講談社 / 1365円 ( 2008-07-05 )


論理的思考と感覚的思考をうまく切り替えながら解決方法をさがしていくということ

自分はどっちよりだかよく理解しておいて、意図的に逆の思考にスイッチするようにすると良い解決策がみつかりやすいように思う(経験論)

会議の前に自分の頭の中でブレーン・ストーミングを済ませてしまいます。会議は、その上で何か足りないものを拾うとか、アイデアのベースをみんなで共有するために行います。

Node.jsで簡単なブログを作ってみる

Blog rolling with mongoDB, express and Node.jsの写経だが、このエントリはわかりやすいですね。

node_blog

MongoDBって使いやすそうなので、SQLiteから乗り換えようかなと思ってちょっと調べたところMongoKitはSQLAlchemyっぽいような気がしたんだけどどうなんだろうかねぇ。結局javascriptだとクラス関係ないしJSON(BSON)だからMongoとの相性がいいんだろうか?あとでもう少し調べてみよう。

さて、上のエントリのブログのサンプルで使われていたHTMLとCSSのテンプレートエンジンが面白かったので調べてみた。

Jade

zen-codingみたいなノリでサクサク書いていけるっぽい。

Jade - robust, elegant, feature rich template engine for nodejs

Hamlっぽいとか書いてあったんだけどHaml知らんからなぁ(普段はFlask+Jinja2使ってます)。

EmacsのJade-modeはないみたい

stylus

CSSをシンプルに書ける独自のスタイル指定言語らしい。構造化してすっきりと記述できるみたい。

Expressive, robust, feature-rich CSS language built for nodejs

スクリーンキャストもありますね。

CSSなんてすぐにぐちゃぐちゃになって可読性が落ちるので、CSSなんてバイナリと一緒で人が読むもんじゃないんだぜみたいな立場にたてば、DRYを保てるようなこういった仕組みは良いんだろうなと思う、っていうか良い。

モジュールをインストールするとstylusっていうコマンドがついてきて、別にNode.jsじゃなくても使えるのでFlaskで使おうかなと思っている。

こんなstylがあるとして

body
  font-family "Helvetica Neue", "Lucida Grande", "Arial"
  font-size 13px
  text-align center
  text-stroke 1px rgba(255, 255, 255, 0.1)
  color #555
h1, h2
  margin 0
  font-size 22px
  color #343434
h1
  text-shadow 1px 2px 2px #ddd
  font-size 60px

コマンドラインからコンパイル

$ ../../node_modules/stylus/bin/stylus style.styl
  compiled style.css

できた。

body {
  font-family: "Helvetica Neue", "Lucida Grande", "Arial";
  font-size: 13px;
  text-align: center;
  text-stroke: 1px rgba(255,255,255,0.1);
  color: #555;
}
h1,
h2 {
  margin: 0;
  font-size: 22px;
  color: #343434;
}
h1 {
  text-shadow: 1px 2px 2px #ddd;
  font-size: 60px;
}

Node.jsでtwitterのストリームをgrowlで通知する

普通にスクリプトとして使えるので、覚えてくるとなかなか楽しいですね。Node.jsのモジュール一覧を眺めながら面白そうなのをいじっています。

今日はgrowlで遊んでみてますが、通知はgrowlnotify経由なのであらかじめインストールしておく必要があります(入ってなくてもエラーを吐かないので一瞬悩む)。

#!/usr/bin/env node

require.paths.push('/usr/local/lib/node_modules')

var TwitterNode = require('twitter-node').TwitterNode
, growl = require('growl');

var twit = new TwitterNode({
  user: '####', 
  password: '####',
  track: ['perl','python','haskell','javascript']
});

twit.addListener('error', function(error) {
  console.log(error.message);
});

twit.addListener('tweet', function(tweet) {
    growl.notify("@" + tweet.user.screen_name + ": " + tweet.text);
}).stream();

node.jsとNginxが相性がいいって見かけたので、さくらVPSのApacheをNginxに置き換えようかなぁと思いNginxの本を注文してみた。

ProductName ハイパフォーマンスHTTPサーバ Nginx入門
Clement Nedelcu
アスキー・メディアワークス / 3150円 ( 2011-04-21 )


Html5 Graphics With Svg & Css3

夏の出版ラッシュか?

ProductName Html5 Graphics With Svg & Css3
Kurt Cagle
Oreilly & Associates Inc / 2081円 ( 2011-08-05 )


Want to create exciting HTML5 graphics without spending eternity in JavaScript? You can! This provides a basic overview of the two declarative languages bound to HTML5 - CSS 3.0 and Scalable Vector Graphics (SVG).

ほしい物リストが大きくなっていく

javascript-script

Calipsoのコード読んでたらnode.jsはスクリプトとして動かせることに気づいたのでスクリプトにしてみた。

といっても一行足すだけだけどね。

モジュールのパスがおかしかったのでrequire.pathで足してみたけど、なんでおかしいのかわからん。どこかに余計な環境変数を入れてあるのかなぁ。

#!/usr/bin/env node

require.paths.push('/usr/local/lib/node_modules')

var TwitterNode = require('twitter-node').TwitterNode
, sys = require('sys');

var twit = new TwitterNode({
  user: '######', 
  password: '######',
  track: ['perl','python','haskell','javascript']
});

twit.addListener('error', function(error) {
  console.log(error.message);
});

twit
  .addListener('tweet', function(tweet) {
    sys.puts("@" + tweet.user.screen_name + ": " + tweet.text);
  })
  .stream();

暴言というほどでもないかな

コレ系の本にしてはネガティブ度は高いし、合意できるような内容ばかりでもないが、普通に読んだ。

ProductName GIGAZINE 未来への暴言
山崎恵人
朝日新聞出版 / 1575円 ( 2010-12-07 )


  • 知識層の存在意義が薄れているのはその通りだと思う。
  • 何でも持ち込み可っていう前提で問題を考えろよってのもそう思うが、問題を出す能力が高いのと教授の能力はまた違うよなと思うなぁ。
  • 歴史は現代から書かれるべきという筆者の主張は新鮮。なるほどと思った。でも世界史なんて不得手だったけど(覚えられん)。
  • 著作権ビジネスの崩壊は始まっている。
  • 日本は年々後退する
  • マイクロペイメント覇権争い
  • 行動心理学が正解なのでは?