緑地公園は初めて行った。スケボーのイベントとかやっていて、前から気になっていたんだけど、なかなか行かなかった。
広い!息子も大喜び。

娘は凧揚げが出来て大満足。

凧の絵柄は娘が選んだんだけど、僕も気に入っている。あと、今の凧ってめちゃくちゃ軽いのね。
緑地公園は初めて行った。スケボーのイベントとかやっていて、前から気になっていたんだけど、なかなか行かなかった。
広い!息子も大喜び。

娘は凧揚げが出来て大満足。

凧の絵柄は娘が選んだんだけど、僕も気に入っている。あと、今の凧ってめちゃくちゃ軽いのね。
さっきのやつをgaeで動かしてみる。
git clone https://github.com/gigq/flasktodo.git gmaptweetgae cd gmaptweetgae
でapplication.pyをFlask用のコードに置き換えてapp.yamlを適当に設定したら
appcfg.py update .
で、できたサイト。多分自分はよく使うので満足。
10012011 GAE
path切ったはずなのに見つからなくて、???
cd /Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/ unzip google_appengine.zip
ってやった。
やった後に「この前も同じことやったよなぁ」と思った。なんか間違ってるのかなぁ?
10012011 家庭菜園
キャベツとか白菜のような葉物を植えてないので、なにもないというかまったくもって貧相な畑だ。というかジャガイモ植える予定にしているから、空けとかなきゃいけないんだよね。あと、午前中は日陰になっていて寒いな、この場所。

春菊の収穫は2月の終りくらいかなぁ。

そら豆は元気だが、スナップエンドウはダメそうだなぁ。

今月号のやさい畑はコンパニオンプランツの 特集で、ミョウガにローズマリーがいいらしいので、今季は合間に植えてみることにした。
あと、ジャガイモは変わった品種を植えてみたいなぁ。種とかどこで手に入れるのがいいんだろうかねぇ。となりの畑のおじさんには、旧国道沿いの富士郵便局隣の苗やさんを薦められたんだけど、日曜休みなんだよねぇ。
10012011 Python javascript HTML5 Flask
HTML5 APIガイドブック コミュニケーション系API編が面白い。ひと通り読んだので、コード書いてみてる。
2章のサンプルコードをFlaskで。サンプルコードは3つのHTMLファイルが必要だけどFlask使えば一つのファイルに全部押し込めるので管理が楽。

初期値は富士市役所のあたりから半径5キロ以内のtweetを探すようにした。で地図をドラッグすると、それに伴いtweetも連動して表示されるので、ほーこんなユーザーいるのか!と新たな発見もあった。
この本は入門書として最適かもしれん。
Flaskコード
#!/usr/bin/env python # -*- encoding:utf-8 -*- from flask import Flask app = Flask(__name__) @app.route("/") def processing(): response = """ <!doctype html> <html lnag=ja> <head> <meta charset="utf-8"> <style type="text/css"> .page { margin: 0px auto; border: 0px; padding: 0px; text-align: center;} </style> </head> <body> <div class=page> <h1>gmap2tweet</h1> <iframe src="/googlemap" id=gmap width="500px" height="500px"></iframe> <iframe src="/twitter" id=twitter width="500px" height="500px"></iframe> <div id=mesg></div> </div> <script> var initialize = function(){ var origin = location.protocol + "//" + location.host; var iframes = document.querySelectorAll('iframe'); for(var i = 0; i < iframes.length; i++){ iframes[i].contentWindow.postMessage('init', origin); } window.addEventListener('message', function(e){ if (e.origin == origin) { document.getElementById('mesg').innerHTML = "receive data via xdm::" + e.data; document.getElementById('twitter').contentWindow.postMessage(e.data, origin); } }, false); } window.onload = function(){ initialize(); } </script> </body> </html> """ return response @app.route("/twitter") def twitter_processing(): response = """ <!doctype html> <html lang=ja> <head> <meta charset="utf-8"> </head> <body> <div id=mesg></div> <div id=results></div> <script> var origin = location.protocol+"//"+location.host; var parentWin = null; var api="http://search.twitter.com/search.json?callback=show&rpp=50&geocode="; var jsonpObj =null; var sendJsonp = function(latlng, radius){ if(jsonpObj) document.body.removeChild(jsonpObj); var scr = document.createElement('script'); scr.src = api+encodeURIComponent(latlng+","+radius+"km"); scr.type = "text/javascript"; jsonpObj = document.body.appendChild(scr); }; var show = function(obj){ var results = obj.results; var out = ''; var template = '<img src="#{img}"> <a href="http://twitter.com/\ #{from_user}" target="_blank"><b>#{from_user}</b></a> #{text}<br />\ #{created_at}<hr />'; for(var i = 0; i < results.length; i++){ var res = results[i]; var tmp = template.replace("#{img}", res.profile_image_url) \ .replace("#{from_user}", res.from_user) \ .replace("#{from_user}", res.from_user); tmp = tmp.replace("#{text}", res.text) \ .replace("#{created_at}", res.created_at); out += tmp; } document.getElementById('results').innerHTML = out; }; window.addEventListener('message', function(e){ if(e.origin == origin) { if (e.data == 'init') { parentWin = e.source; } else { document.getElementById('mesg').innerHTML = e.data; document.getElementById('results').innerHTML = "読み込み中"; sendJsonp(e.data, 5); } } }, false); </script> </body> </html> """ return response @app.route("/googlemap") def google_processing(): response = """ <!doctype html> <html lang=ja> <head> <meta charset="utf-8"> <meta name="viewport" content="initial-scale=1.0, user-scalable=no"> <script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script> </head> <body style="padding:0;margin:0;height:500px"> <div id=map_canvas style="width: 100%; height: 100%; border: 0px"></div> <script> var parentWin = null; var origin = location.protocol + "//" + location.host; var start = function() { var latlng = new google.maps.LatLng(35.164190, 138.678609); var myOptions = {zoom: 13, center: latlng, mapTypeId: google.maps.MapTypeId.ROADMAP}; var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions); var getCenter = function(){ var center = map.getCenter(); var lat = center.lat(); var lng = center.lng(); if(parentWin) { parentWin.postMessage(lat+","+lng, origin); } }; window.addEventListener('message', function(e){ if(e.origin == origin) { if(e.data == 'init') { parentWin = e.source; getCenter(); } } else { alert("illegal message from " + e.origin); } }, false); google.maps.event.addListener(map, 'dragend', function(e){getCenter();}); google.maps.event.addListener(map, 'zoom_changed', function(e){getCenter();}); }; window.onload = function(){start();}; </script> </body> </html> """ return response if __name__ == "__main__": app.run()
iPadの利用率は高くて、ほぼ毎日誰かが使っているし実家に帰省した際にも重宝したんだけど、3Gほとんど使わないのでリチャージを停止した。

100Mプランチャージしたけど600Kくらいしか使ってないし。
それにしても、リチャージ停止ボタンが見つからなくて難儀した。もしや隠し機能?と思ってしまうな、あれは。
e-mobileのEMチャージとアウトレットのD02HWにモバイルルーターくっつけて使っている。ちなみにモバイルルーターはiPadを導入したので急遽購入した。
もし今から考えるんだったらこれにiPadのプリペイドのやつを組み合わせる気がするかもなぁ。
08012011 work
KKDは特に否定しないし、それなりに重要だと思っている。ただ、職場内で共有できない情報とかスキルであるという点は問題だと思っているけど。
よくよく考えてみるに、KKDはアブダクションと密接に関連するのかな?またはセレンディピティ的な嗅覚みたいなものを表す言葉なんだろうなぁと漠然と思っている。そういう意味でイノベーション的には非常に重要なフォースとして働くなにかなんだろうと。
ただそういう能力は、深い洞察力とか論理的な思考力を背景としたものであり、宝くじに当たるかもという期待感をKKDとか言ってしまうのとは違うんじゃないかなぁと思うのであった。
07012011 javascript HTML5
昔、jsっていう対話環境入れてた気がするんだけど、覚えてないのでv8のやつをおもむろに入れてみたという話。
sconsを入れるために
sudo port install scons
って打ったら、opensslは入れるわ、pythonのバージョン上げるわでやたら時間がかかった。
scons入れたら
svn checkout http://v8.googlecode.com/svn/trunk/ v8 cd v8 scons scons sample=shell
で対話環境が手に入る。
$ ./shell V8 version 3.0.6.1 > (function (x,y){return x+y})(3,4) 7
ついでにnode.jsも入れた
wget http://nodejs.org/dist/node-v0.2.6.tar.gz tar xvfz node-v0.2.6.tar.gz cd node-v0.2.6 ./configure make sudo make install
07012011 life
娘や息子の玩具の電池が結構頻繁に切れて、予備の電池がおいてなかったりすると子どもが不機嫌になって困るし、そのたびに買いに行くのも面倒だ。
で、最近使ってないwiiのコントローラーから抜いてみたり、使ってないリモコンから抜いてみたりするんだけど、中途半端に使用済みなのでこれまたすぐ切れて負のスパイラル。どんどんゴミの乾電池が溜まっていくのも気分のいいものではない。
去年のクリスマスに、サンタが息子に新幹線のプラレールを届けてくれた際にエネループに移行してみたらこれが便利。電池が切れたら、満タンの電池と交換して、切れた電池は充電器に突っ込んでおけばすぐまた使えるようになるしね。
今朝起きたらリビングの時計が止まっていたので、eneloopと交換しつつ12個パックを注文してしまった。
eneloopistになったことを実感した朝であった。
06012011 life
「マキコミの技術」を読んだ感想を書いたわけだが、フワフワした感は残ると書いたように、わかったようなわからないようななんとも言えない感覚というか、結局咀嚼出来てないなぁと思っていた。(他のブログのエントリみてもさらに膨らますような内容ほとんど見かけないし、そういう内容なんだろう)
というわけなので、ピンと来た部分だけリストにして記録しておいたら、ある部分が切り取られていたので、この部分はもうちょい深く考えておく必要があるのかなぁと思った。
例えば普段車通勤している(車で往復二時間)と突発オフみたいなのは出たくても出られないので歯がゆい思いをするし、フットワークが重いなぁと思うこともある。オフに出れば出たで、弱い紐帯の強さ的な緩いけど割としっかりした関係性が築けて楽しい。それは田舎ゆえの密度の薄さ故に、とりあえず集まってみるというのが意味を持つのでないのだろうか?
実際、Shizu-devみたいな勉強会は静岡全域(静岡には新幹線駅が6もある)からヒトが集まり密度の割に凝集度が高いしなぁ
というわけで、twitterによる距離感の変化っていうのは「手の届く距離」っていうかユーザーの密度とかと関係があって、グローバルに広がる一方、ローカルなクラスター化を促進する働きも持っているのかなぁと思った。