FlaskでXHR2を試す

XHR2はJSONPと比べてどんなメリットがあるんだろうか?

JSONPで行っている事は、外部のJavascriptを読み込んでいることに他ならず、不用意に利用することは大変危険な行為です。

ProductName 徹底解説 HTML5 APIガイドブック コミュニケーション系API編
小松 健作
秀和システム / 2730円 ( 2010-12 )


まぁ、JSONPはハック色が強いですからね。

というわけで、クロスドメイン間で通信ができるというXHR2を試してみた。

サーバーのコード

ログ見てわかったんだがPOSTメソッドの時はOPTIONSで問い合わせないっぽい。なのでコメントアウトしても動いた。Access-Control-Allow-Originは必須で、コレがないと動かない。

from flask import Flask, make_response, request

app = Flask(__name__)
app.debug = True

#@app.route('/events', methods=['OPTIONS'])
#def view_events():
#   response = make_response()
#   response.headers['Access-Control-Allow-Origin'] = '*'
#   return response

@app.route('/events', methods=['POST'])
def show_events():
   u = request.form['username']
   p = request.form['password']
   response = make_response("user: %s, pass: %s" % (u, p))
   response.headers['Access-Control-Allow-Origin'] = '*'
   return response

if __name__ == '__main__':
   app.run(host='www.kzfmix.com')

クライアントのコード

普通にXMLHttpRequestをnewしてPOSTメソッドでsendする

<!DOCTYPE html>
<html>
<head>
<title>xhr2 test</title>
</head>
<body>
<script>
document.addEventListener("DOMContentLoaded", function(){
 var formData = new FormData();
 formData.append('username', 'myuser');
 formData.append('password', 'mypass');

 var xhr = new XMLHttpRequest();
 xhr.open("POST", "http://www.kzfmix.com:5000/events");
 xhr.send(formData);
 xhr.onerror = function(e) {
   console.log("ERROR");
   console.log(e);
 }

 xhr.onload = function(e) {
   console.log("LOAD");
   console.log(e);
   console.log(xhr.status);
   console.log(xhr.statusText);
   console.log(xhr.responseText);
   alert(xhr.responseText);
 }
}, false);
</script>
</body>
</html>

実行結果

xhr2_test

異なるドメイン(オリジン)間でデータの受け渡しが出来てる

$ python xhr2.py 
 * Running on http://www.kzfmix.com:5000/
 * Restarting with reloader...
124.41.xx.xxx - - [26/Jul/2011 19:23:51] "POST /events HTTP/1.1" 200 -
124.41.xx.xxx - - [26/Jul/2011 19:24:04] "POST /events HTTP/1.1" 200 -

今日の畑(110724)

夏真っ盛りだけど、今年の家庭菜園の調子はいまいち。

テンションが上がらないとか、風邪ひいたとか、出張が入りまくったとかそんな感じで足が遠のいているうちに草ボーボーになってた。

久しぶりに二時間かけて除草を行ったらまぁまぁましになった。ナスは連作障害っぽかったので場所を移したら復活しそうな気配だけど、ピーマンはどうかなぁ。

1311593192 1311593194

ミョウガは梅雨明けから急に立ち枯れしまくって、半分は枯れた。残りのものからミョウガが採れだしたけど妙に苦味が強くて不評。ちょっと処分しようかと思う。一方ミニトマトは順調。そろそろ黒いミニトマトも色づく(黒づく?)頃なのでちょっと楽しみ。

1311593175 1311593177

紫蘇はこぼれ種から雑草のように生えまくって捨てるほどある(というか雑草として抜いてる)

隣のおじさんは紫蘇ジュースにすればいいんだよとか言うんだけど青汁っぽくて嫌だなぁと躊躇している。右側はオクラ、これは順調っぽいが、オクラはすぐに虫が付くから気を使うんだよねー。

1311593180 1311593200

ゴーヤはやっと実がつきだした。来週から収穫できるだろうな。去年はすでに沢山なっていたので、ペースは遅い。植えるのも遅かったからかなぁ。

1311593198 1311593196

久々に畑仕事をやったけど、やっぱ楽しい。今年は作付け計画とかいろいろうまく行ってないけどそれも含めて自分の責任だからなぁ。あまり完璧を目指さずしなやかに土を活用していきたい。

ところで、コンパニオンプランツとして植えようと思っていたマリーゴールドがベランダで枯れかけているのを見て植えようかどうか迷っている。ポット育苗も畑に移すタイミングを逃すとヤル気がなくなることも学んだ。

観賞用マリーゴールドってことでいいかなぁ。

紀土 夏の純米

これで2.1Kとはかなり攻撃的な値段ですな。

キリッピリッとした感じがたまらんです。コストパフォーマンスはかなり良いと思われます。

1311592844

2,3回連続で飲みつづけてもいいかなぁと思える味わい。

オススメ。

Node.jsで作るechoサーバー

Node.jsとは何かの写経

このエントリはわかりやすかった。

var net = require('net');
var sockets = [];

var server = net.Server(function(socket) {
   sockets.push(socket);

   socket.on('data', function(d) {
       for (var i=0;i < sockets.length; i++) {
           sockets[i].write(d);
       }
   });

   socket.on('end', function() {
       var i = sockets.indexOf(socket);
       sockets.splice(i,1);
   });
});

そしてFelix's Node.js Style Guide(和訳)も参考になった。

javasciptの新刊二冊

グラフィックスとNode.js

両方気になるなぁ。

ProductName Supercharged Javascript Graphics
Raffaele Cecco
Oreilly & Associates Inc / 3957円 ( 2011-07-29 )


ProductName Node: Up and Running: Scalable Server-Side Code With Javascript
Tom Hughes-croucher
Oreilly & Associates Inc / 2877円 ( 2011-09-22 )


起業成功マニュアル

ポジショニングの要諦

  • なぜ創業者はその組織を立ち上げたのか
  • なぜ顧客はその組織をひいきにすべきなのか
  • なぜすぐれた人材はそこで働くべきなのか

人材探し

  • その人はあなたが必要とすることをできるか
  • その人はあなたが考える事業の意義に賛同しているか?
  • その人はあなたが必要とする強みがあるか?

ProductName 完全網羅 起業成功マニュアル
ガイ・カワサキ
海と月社 / 1890円 ( 2009-05-29 )


  • 組織が成功するのは事業計画が優れているからではない。実行力にたけているからだ
  • 外部の資金を1ドルでも入れたら、その瞬間にあなたは「支配権」を失う

利他的な遺伝子

タイトルだけドーキンスのあれに引っ掛けているけど、中身は全然違う。こっちはエッセイっぽいというか、サイエンティフィックに寄り過ぎず、社会性動物としてのヒトとの利他性はどこから来るのかを論じていく。

筆者は利他的な遺伝子は母性本能の遺伝子に起源の可能性を考えているようであるが、どうなんだろうねー。

ProductName 利他的な遺伝子 ヒトにモラルはあるか (筑摩選書)
柳澤 嘉一郎
筑摩書房 / 1680円 ( 2011-06-15 )


  • いろいろな性格の中で遺伝性が最も強いのは外向性
  • 本能と学習はその区別が難しく、神経細胞のネットワークの視点から見ると本能も学習もその発現の基本的なメカニズムは同じ
  • 子煩悩は男性向けの言葉、つまり性差からくる
  • 子供の健全な発育には「いつもやさしく接してくれる特定のヒト」が必要

片付け習慣術

割とオーソドックスな内容

基本は増やさない

ProductName 毎朝3分仕事がはかどる片づけ習慣術
堂島 きみお
ぱる出版 / 1470円 ( 2010-12 )


  • そもそも片付けはなんのための片付けか?
  • 自分の調子の良い時間を知っておく
  • 人間関係もモノも整理の基本は分けること
  • 誰がやっても完成度の変わらない仕事はできるだけやらない

ザ・クリスタルボール

SCMのはなし。なかなか面白かった

ProductName ザ・クリスタルボール
エリヤフ・ゴールドラット
ダイヤモンド社 / 1680円 ( 2009-11-13 )


ISO 8601の日付フォーマットをPythonでparseするには

JSONで返ってきた日付フォーマットをPythonでparseするのはちょっとめんどくさい。

tuple_time = time.strptime("2004-06-03T00:44:35", "%Y-%m-%dT%H:%M:%S")

とやる場合にはtimezoneがパースできない。

"2009-06-10T19:00:00+09:00"

こういうやつはダメ。

こういうときにはdateutilを使えばいい。

import dateutil.parser
yourdate = dateutil.parser.parse("2009-06-10T19:00:00+09:00")

参考