2011-05-08 dotcloudに招待されてから実際に動かすまで

dotcloud流行ってますね。
僕もinviteきてからしばらく放置していたのでこれを機にflaskアプリでdeployしてみようと思いました。
$ pip install dotcloud
dotcloudをshellから操作するコマンドをインストールします。
$ dotcloud
APIキー https://www.dotcloud.com/account/settings
を入力します。
$ dotcloud create testapp
$ dotcloud deploy -t python testapp.www
"testapp"というアプリを作成して"www.testapp"にデプロイします。
実際にローカルでアプリを作成します。
$ mkdir testapp
$ cd testapp
(ここで下記のようなアプリを作成する)
$ tree
.
├── __init__.py
├── testapp
│ ├── admin
│ │ ├── __init__.py
│ │ ├── static
│ │ │ ├── css
│ │ │ ├── images
│ │ │ └── js
│ │ ├── templates
│ │ └── views.py
│ └── frontend
│ ├── __init__.py
│ ├── static
│ │ ├── css
│ │ ├── images
│ │ └── js
│ ├── templates
│ └── views.py
└── wsgi.py
nginxで動くようなのでwsgi.pyの中身を書いておきましょう。
pathなどは適時変更してください。
import sys sys.path.append('testapp') from frontend.views import app def application(environ, start_response): return app(environ, start_response)
あとはこのディレクトリの中身をdotcloudにpushすれば動きます。
$ cd testapp
$ dotcloud push testapp.www .
http://www.testapp.dotcloud.com にアクセスして、先ほど作成したアプリの画面がでれば成功です。
誰かdotcloudのチュートリアル日本語訳してくれないかなー(チラッチラッ
参考URL
2010-11-06
node.js + express + mongodb + mongoose を試してみた
そんな組み合わせを使う機会に恵まれたのでせっかくだからメモ。
websocketとかやりたい人はそれようのサンプルがいっぱいあると思うのでそっちを見たほうがいいです。
mongodb は既にインストールされていることを前提として書きます。
# node.js のインストール $ git clone git://github.com/ry/node.git $ cd node $ ./configure $ make $ sudo make install
node.js がインストールできたら、ruby でいうところの gem のような npm をインストールして便利なものを追加していきます。
# npm のインストール $ curl http://npmjs.org/install.sh | sudo sh # node.js 用フレームワーク express のインストール $ sudo npm install express # node.js 用 ORM/ODM mongoose のインストール $ sudo npm install mongoose
node.js で使える mongodb driver は、 mongoose の他にもいくつかあるようです。
http://www.mongodb.org/display/DOCS/node.JS
モデル定義。
// user.js require.paths.unshift('vendor/mongoose'); var mongoose = require('mongoose').Mongoose; var db = mongoose.connect('mongodb://localhost:27017/test'); mongoose.model('user', { properties: [ 'name', 'age', 'created_at', ], methods: { save: function (fn) { this.created_at = new Date(); this.__super__(fn); } } }); module.exports = db.model('user');
アプリを書きましょう。
※ /templates とか /static とかはそのうち使うと思うので書いておく。
// app.js var express = require('express'); var app = express.createServer(); var User = require('./user'); app.configure(function(){ app.set('views', __dirname + '/templates'); app.use(express.methodOverride()); app.use(express.bodyDecoder()); app.use(app.router); app.use(express.staticProvider(__dirname + '/static')); }); app.configure('development', function(){ app.use(express.errorHandler({ dumpExceptions: true, showStack: true })); }); app.configure('production', function(){ app.use(express.errorHandler()); }); app.get('/', function(req, res){ // インスタンス作成 var u = new User(); // データセット u.name = 'otsune-tan'; u.age = '12'; // 保存 u.save(); // 読み出し & ブラウザへデータ送信 User.find({'age':'12'}).all(function(docs){ console.log(docs); res.send(JSON.stringify(docs)); // find().all() の結果を string にして出力してるだけ }); }); console.log('run server. port 8080.'); app.listen(8080);
ブラウザで http://localhost:8080/ にアクセスして、mongodb の中身がずらずらーっと出てきたら成功です。
2010-10-12 Facebookでテキストをシェアする方法

Facebookが日本でも波に乗り始めた昨今、皆様いかがお過ごしでしょうか。
コメントをつけたり、写真やリンクをシェアとかできて楽しいですよね!
でも、テキストのみの発言を「シェアしたい!」と思ったことはないですか?
通常は写真やリンクまたはノートなど、ファイルまたはファイルを参照するものだけに「シェア」ボタンが表示されます。
友達もっと欲しいお!><
みたいな発言がTLに流れてくると、Twitterをやっている感覚でついついRTしたくなりますよね。
Facebookならシェアしたくなりますよね。
でも普通にボタンが表示されないので、方法を探してみました。
1.シェアしたい発言のURLをコピーする
2.自分のTLの発言窓にフォーカスを合わせるとリンクボタンがでてくるのでクリック!
3.1でコピーしたURLを貼り付けて、「添付」をクリック!
4.シェアするときにコメントを添えることができるので、あれば入力して「シェア」!
※ちなみにこれは複数人によってシェアされているのでわかりづらいかも知れませんが、
「自分の名前」さんが「対象の名前」さんの近況をシェアしました。
と表示されていれば成功です!
僕のIDは http://www.facebook.com/mshibata です。
よかったら友達になってください!!!><
Facebook楽しいお!!!
2010-07-27 macports 1.9.1 on SnowLeopard で tk の build に失敗する件

ticket探したらこんなのがあった。
https://trac.macports.org/ticket/23481
しょうがないから
$ sudo port install tk -quartz
することで無事解決。
あと移動先のBlogは秋田ので終了しました。
2009-09-16 ニコ生アラートAPI for pythonの公開とBlog移動

あとニコ生アラートAPIのpython library作りました。
ニコ生に対するクエリの結果は基本的にbeautifulsoupで変換してから返します。
githubで後悔公開してます。
nicoliveapi-py – http://github.com/mshibata/nicoliveapi-py
2009-08-15 gearmand worker で lambdaとevalを使うとAPIサーバが作れる
なんか久しぶりにネタ書くなー。
gearmandが楽しいのでそこらへんのことを。
gearmandのworkerにdict型みたいな値を渡そうとしてもstringでしか渡せないようなので
これをworker側で変換してあげると便利ですね。
client
from gearman import GearmanClient, Task client = GearmanClient(["127.0.0.1:4730"]) data = { 'name':u'名前', 'email':'hogehoge@example.com', 'password':'12345', } result = client.do_task(Task("dump", data)) print 'client:', result
worker
from gearman import GearmanWorker def dump(job): #ここらへんでデータ加工するなどする ret = job['name'] return ret if __name__ == '__main__': worker = GearmanWorker(["127.0.0.1:4730"]) worker.register_function("dump", lambda job:dump(eval(job.arg))) worker.work()
上のソースは適当に殴り書きしたやつだから動くかどうかわからないけど、下の方にあるlambdaとevalを組み合わせてる部分だけ見て貰えればわかると思うよ!
あとはDBにクエリを投げて結果を加工して返すようなfunctionとか作ればapiサーバとして動作させることができますね。
python-gearman: http://github.com/samuel/python-gearman/tree/master





