Hatena::ブログ(Diary)

ネリモノ

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をコピーする

f:id:Malan:20101012020436p:image



2.自分のTLの発言窓にフォーカスを合わせるとリンクボタンがでてくるのでクリック!

f:id:Malan:20101012020604p:image



3.1でコピーしたURLを貼り付けて、「添付」をクリック!

f:id:Malan:20101012020605p:image



4.シェアするときにコメントを添えることができるので、あれば入力して「シェア」!

f:id:Malan:20101012020606p:image



※ちなみにこれは複数人によってシェアされているのでわかりづらいかも知れませんが、

「自分の名前」さんが「対象の名前」さんの近況をシェアしました。

と表示されていれば成功です!


僕の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移動 このエントリーを含むブックマーク

しばらく自宅サーバにおいてるwordpressで書く。

http://blog.mshibata.net/


あとニコ生アラートAPIpython 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

2009-03-04 Mojolicious

テンプレートはUTF8で書くこと。