Flaskが面倒くさくなる時

最近Flaskでユーザーのロールを実装する必要があってさすがにちょっと面倒くさくなってきた。

Blueprintはまぁ許せるけど、フォームとモデルの連携とかフォームバリデーションとか大きくなればなるほど、フルスタックのほうがやりやすいよなーと。

しかしながら、そもそもFlaskに揺れた経緯がフルスタックなフレームワークのキャッチアップ辛いという反省からだったので、なんか一周した気もする。

ちなみにその当時使っていたCatalystは未だにperl5.8.8 + Catalyst5.7014で動かしている(自前プラグインとかの関係)。そして、そもそも同僚はMVCちゃんと理解してない(オブジェクト指向プログラミングすらあやしい)レベルで使っているので見事なスパゲッティPerl風味が出来上がっているw

結局中身が理解できた上でのフルスタックじゃないと辛いよなぁ。と思いながらRoRにするかDjangoにするか揺れ動いている。

Django

メリット

  • Python
  • Chemoinfomaticsのツールを色々載せられる
  • AZのデザイントラッカーはDjango製

デメリット

  • 職場でOSQAくらいしかDjango製ツールがない
  • スキルが役にたつのかわからん

RoR

メリット

  • Fastladder, Redmineを動かしている
  • RoR使いはモテるんでしょ?

デメリット

  • いまさらRoRを覚えても…
  • Chemoinformaticsのツールがないのでいまいち
  • バージョンで結構ハマる感じ?

という感じ。まぁ両方覚えるのがいいんだろうけどはじめての Django アプリ作成をやってみたら、Djangoいいじゃんみたいな気持ちになった。

RedmineのDjangoクローンがあればいいのに

料理のコツ

最近読んだ本

ProductName 辻留・料理のコツ (中公文庫 M 92-3)
辻 嘉一
中央公論新社 / ?円 ( 1980-10-10 )


富士宮に魚清というなかなかワクワクさせられる魚屋があるので魚も色々扱ってみたい

バッドデータハンドブック

データプリパレーションとかそっちの話題かなと思って読んだら、もっと幅広い話題を扱っていた。

バッドデータとは邪魔になるデータのことです

  • 泥臭い実務のためのアドバイス
  • 予期せぬ事をするデータ
  • アプローチ
  • データストレージとインフラ
  • データのビジネス面
  • データポリシー

について語られている

ProductName バッドデータハンドブック ―データにまつわる問題への19の処方箋
Q. Ethan McCallum
オライリージャパン / 2940円 ( 2013-09-26 )


有能なサイエンティストはデータを高速処理するためにそこにいるのではありません。理解を高めるためにそこにいるのです

そうだと思う

ggplot2のPython実装ができてた

pandasを使い始めてから、「Rのメリットってggplot2だけだよなー」と思っているんだけどggplotが実用的になったら、もうPythonでやりたいことは完結するよなーと思った。

ちなみにちょっと動かそうとしたけど、動かなかったので、GitHubの画像を載せておく。

plot

あとでコードリーディングする。

ProductName グラフィックスのためのRプログラミング
H. ウィッカム
丸善出版 / 4200円 ( 2012-02-29 )


11/16にShizuoka.py #3をやります

巳年だからという理由ではじめたShizuoka.pyも3回目となりました。単発か二回目でフェードするのかな?と思いつつ意外に発表者の層が厚くて毎回楽しくやっております。僕も、PyConで発表するきっかけを得られてよかった感があります。

実は静岡おでんをまともに食したことがないので懇親会は静岡おでんのお店をチョイスすることになっています。尚、ちえちゃんというお店がディープらしいのだけど、深夜一時開店らしいのでお泊り必須ですねw

おでん

発表者募集中です。connpassにコメント入れるか、@fmkz___にtweetしてください。今のところ

  • Seleniumでクローラをつくる話(kzfm)
  • Pythonでつぶやき解析(oec014)
  • Flask+EC2(oec014)

あたりが仮演題です。

三島でPythonを主力言語に変更しつつあるというあの会社からもなんか発表してくれないかなーとか思っていますが如何でしょうか?

個人的にはDjangoの話とか聞きたい。最近Railsいじっているのだけど、フルスタック覚えるならどっちがいいのかなぁと(Yesod一択だろという声も聞こえないわけではないが…w)

製薬向けのRedmineハンズオンを開催して三島バルでぶらついてタップルームで地ビール飲んだ

製薬やLS業界向けRedmineハンズオンお疲れ様でした。オープンソースなツールはベンダーのセミナーでは発表しにくいし、情報共有できるような機会も限られているので、色々情報交換できて有意義な週末でした。

僕はRedmine,Git,Sphinxの話をしたのですが、参加者のスキルがいまいちわからなかったために全て導入編みたいな感じになってしまったけど、使いはじめるきっかけにしていただけたらいいなぁと思います。

個人的にはHTSやメディシナルケミスト向けの事例は面白かったですね。イテレーション繰り返すような場合はカンバンのほうが使いやすいのかなと思った。あとはH2L、リードファインディングはカンバンのほうがいいやろねと。HTSはスクリーニングっていうよりは実験計画法みたいな感じで考えたほうがいいんだろうなぁ。

Redmineの本だったらこれかな。

ProductName Redmineによるタスクマネジメント実践技法
小川 明彦
翔泳社 / 3444円 ( 2010-10-13 )


Sphinxは使ってみないと価値が実感できないかなと。あとはバージョン管理と組み合わせてpull,push入れてデプロイ楽にしたりとかいろいろ工夫するとよリ便利に使えると思います。

Gitは色々端折ってしまったけど、入門のサイトが色々あるので

懇親会

懇親会は三島バルに参加して二次会はあづさに集まるという変則的な流れで。5枚綴りではなく3枚綴りはちょうどよかった。

ひなよし -> 登喜和 -> il cocciuto

という順番でまわってみましたが、日本酒を扱う店舗が少ないので最後はワインにはしってしまった。しかも、ほとんど写真とってない。

登喜和

1381147271

il cocciuto

1381147272

1381147274

二日目はもくもくした後、沼津のタップルームに移動して地ビール昼のみで締めた☆

1381147275

次回は新年会と称して1月の中旬頃を予定しております。ChEMBLあたりのデータをどう使っていくかといったような話題を希望している方が多そうなので、次回はそんな話も含めようかと。

ワインを頂いた

ちょっと前にワインを頂いたので、アヒージョ作ってみた。

1380800554 1380800556

ワイン美味しかった。有難うございます。

1380800720

野菜に旅をさせない

富士宮の外神の交差点のところに大富士という農産物直売所があって、最近は毎週のように通っている。ちなみにこういうお店はリピートするのでブログよりもFacebookのほうがいいんじゃないかと思うんだけど。

シカクマメをゲットしたので、茹でて食べた。ちょっと苦味があるけどシャキシャキしていて美味しい。スナップエンドウみたいな感じでサヤを楽しむ野菜かな。

1380626312

さて表題は、どこかのブログかなんかでみていい言葉だなと印象に残っていたのだけど、僕もそう思います。

で、外神の近所にはJA系のう宮〜ながあって、こちらは野菜に旅をさせすぎなのであまり好きな直売所ではない。JA臭いというか、スーパーの野菜売り場と競合するかのような品揃え。だからダメなのかというとまぁ好みの問題なのでなんとも言えない。地産地消比率は低いけど、美味しかった野菜の生産者は覚えているし、やっぱ巧拙あるしね。

ProductName 農はショーバイ!
松木 一浩
アールズ出版 / 1365円 ( 2010-09-15 )


魚清で魚買って、大富士で野菜買って、ヨコゼキで酒買って、さの萬で肉を買ってみたいなループは結構楽しい。

そのうちさの萬のドライエイジングビーフ(850円/100g?)を買いたい、っていうか買う(今決めた)!

バルのお店の前に定形文をtweetできるようなQRコードを用意しておいてくれないかなぁ

前回に三島バルに参加した時にも感じたんだけど酒のんで街歩きしてるのにtweetとか難易度高すぎなので、QRコードでチェックインみたいなノリでtweetするようにしてくれんかなーと。

こんなに簡単だよ? pythonだったらこんだけでQRコードを出力できる☆

# -*- coding: utf-8 -*-
import qrencode
import urllib
url = "http://blog.kzfmix.com/entry/1380714052"
text = "QRコードでバルのお店にチェクイン的なtweetできると嬉しいなぁ #三島バル "
tweet_template = "http://twitter.com/share?url={}&text={}&via=fmkz___"
qrencode.encode_scaled(tweet_template.format(url, urllib.quote(text)), 200)[2].save("mishima_bar.png")

あとはQRコード読み取ればtweetできるで。

qr

ユーザーのメリットは

  • いちいちフリック入力しなくて良い

バル側のメリットは

  • (一定以上のtwitterユーザーがいれば)トレーサブルなデータが得られるはず

FlaskでリアルタイムWebアプリが作れるようになって素晴らしい

Flask-Socketsを入れればWebSocketが使えるようになって素敵です☆

早速echoサーバーを作ってみた。

Flask-Sockets

テスト環境構築

mkvirtualenv flask_sockets
mkdir echo_server
cd echo_server/
pip install Flask
pip install Flask-Sockets
pip install gunicorn

コードはこんな感じ

.
├── app.py
└── templates
    └── hello.html

app.py

from flask import Flask, render_template
from flask_sockets import Sockets

app = Flask(__name__)
sockets = Sockets(app)

@sockets.route('/echo')
def echo_socket(ws):
    while True:
        message = ws.receive()
        ws.send(message)

@app.route('/')
def hello():
    return render_template('hello.html')

if __name__ == '__main__':
    app.run()

templates/hello.html

<!doctype html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
</head>
<body>
  <h1>Flaskでechoサーバー☆</h1>
  <input type="text" id="msg" value="_(:3 」∠)_"/>
  <button id="sendBtn">send</button>
  <ul id="rcv"></ul>
</body>
<script src="http://code.jquery.com/jquery-1.8.2.min.js"></script>
<script>
  $(function(){
  var host = "ws://localhost:8000/echo";
  var socket = new WebSocket(host);

  socket.onmessage = function(message){
    $("#rcv").append("<li>" + message.data + "</li>")
    console.log(message.data);
  }

  $("#sendBtn").on("click",function(){
    message = $("#msg").val()
    socket.send(message);
  });
  })
</script>
</html>

動かすのはgunicornを使う

gunicorn -k flask_sockets.worker app:app

でlocalhost:8000にアクセスすればok