Testinfra を使って見る

Ruby の Infrataster ではなく Testinfra。 Testinfra aims to be a Serverspec equivalent in python and is written as a plugin to the powerful Pytest test engine https://github.com/philpep/testinfra ってある通り Python 版 Serverspec。 テストラ…

Flask 0.11 の後方互換がなくなる機能

Flask 0.11 がリリースされた。 Flask 0.11 Released | The Pallets Projects # ちなみにどうでもいいけど、Flask のコードネームは酒の名前 後方互換がいくつかなくなってるので、まとめてみる。 # 漏れがあったら追記する予定 とりあえず自分のプロジェク…

Electron1.0 の起動時のエラー

遊びで作ってる Electron なアプリケーションの electron-prebuilt を 1.0.2 にあげて起動したら、エラーになった。 Cannot find module ‘app’Cannot find module 'app' - electron - Atom Discussion ということで、 import electron from 'electron'; impo…

Vim の起動速度2

Vim

前回 Vim の packadd を使って、起動速度改善をした。 その後 MacVim Kaoriya に Timer 機能が追加されたバージョンが出たので、Timer に置き換えた。.vimrc は以下みたいな感じで定義。 let s:plugins = [ \ 'vim-l9', \ 'vim-fuzzyfinder', \ 'vim-fuzzyfi…

Jedi.vim と Vim の起動速度

Vim

あるいは、いかにして Vim の起動速度を取り戻したか。 いつのころか Vim の起動速度が遅くなった。 正確に言うと、Python のファイルを起動する際に遅い。 とりあえず起動時に何が遅いかプロファイルを取ってみた。 954.157 614.589 614.589: sourcing /Use…

Browserify と fs モジュール

Electron で Watchify(Browserify)使ってると、fs モジュールが使えないという現象にあたった。 今遊んでいる環境が、Gulp で babel と wathify で Electron なアプリケーションを差分コンパイルしながらのため、brfs を使えばいけるとか、ググったら色々で…

SQLAlchemy との戦い

ここ数ヶ月 SQLAlchemy を使って開発をしている。 開発当初は特に問題もなく調子よく行っていたが、自分のローカル環境の MySQL の設定を本番に近づけたため、SQLAlchemy がエラーをはいた - Memo が出た。 pool_recycle の値を短くすれば解決と思ったが、解…

WTForms で QuerySelectMultipleField に default を設定する

WTFormsのSelectFieldで選択値(selected)を保持する方法 - Life is Really Short, Have Your Life!! WTForms で Select 関連は default を外部から設定できない。 SelectField や QuerySelectField は上記にある。 QuerySelectMultipleField で DB から読み…

SQLAlchemy がエラーをはいた

Python で Web アプリケーションを作っていて、ログイン後しばらく放っておいて、他の画面に遷移すると以下のようなエラーが出た。 sqlalchemy.exc.StatementError: (sqlalchemy.exc.InvalidRequestError) Can't reconn ect until invalid transaction is ro…

2015 年振り返り

OSS480 全て Public Contribution で、今年前半は Python で bot フレームワークを書いていたから、コミット数が多い。 4ヶ月くらいで、ほぼ機能を作り終えたので、激減してるのが分かる。 思いつきで作り始めたけど、Blinker 使ってイベントを中心に動くよ…

鬼才デヴィン・タウンゼンド様

この記事は METALバンド Advent Calendar 2015 の 13 日目の記事です。 昨日は Yuya Takeyama さんの好きな Doom Metal のバンドを紹介していく - Born Too Late でした。 Black Sabbath はロニー在籍時代の Heaven And Hell が好きです。 その昔 Dio で Spi…

Orator という ORM

Orator という ORM があったので試してみた。 サイトには "The Orator ORM provides a simple yet beautiful ActiveRecord implementation. " とある。 ActiveRecord パターンで、PHP の Laravel framework からインスパイアされて、もっと Pythonic にした…

Flask-WTF のファイルアップロード

メモ。というかドハマりした。 Flask-WTF を使ってファイルをアップロードする際、こうやって書いたらファイルのみ受け取れなかって ??? となった。 from flask_wtf.file import FileField class PhotoForm(Form): photo = FileField('Your photo') @app.rou…

SQLAlcyemy で repr を自動で

メモ。 SQLAlchemy でモデルクラスを定義していて、__repr__ を毎回定義するのがダルい。 かといって定義しないと、デバッグ時(主にプリントデバッグ)に中身が出ないのも困る。 # -*- coding: utf-8 -*- from sqlalchemy import Column, Integer, String, Fo…

続 pex 諸々

pex で出来たバイナリにやはり Python 自体は入ってないよう。 ということでやはり Virtualenv で作った環境と自分のアプリケーションを 1 バイナリにしているという感じか。 ちょっと残念。 ふとおもったけど、pypy はバイナリで配布しているから、pex では…

pex を試してみる

ちょっと前に pex というものを知った。 tl;dr — pex 0.7.0-rc0 documentation pex って何かというと、公式サイトのドキュメントには以下のようにある。 PEX files are self-contained executable Python virtual environments. More specifically, they are…

Golang でのログローテション

前に試して、メモするの忘れてた。 Golang のロギングライブラリで、logrus を使ってるけど、これにはローテート機能が無い。 README には logrotate(8) でやれやとあるけど、ポータビリティに欠けるので、Golang にやらせたい。 lumberjack を使えばいけそ…

Kotoha の Vim plugin を作った

Vim

アニメの名言を簡単に引用できるChrome extension『Kotoha』作りました - Konifar's WIP window.twttr = (function(d, s, id) { var js, fjs = d.getElementsByTagName(s)[0], t = window.twttr || {}; if (d.getElementById(id)) return t; js = d.createEl…

Flask でアプリケーションを作る際のメモ(2015 年版)

Flask でアプリケーションを作る際のメモ - Memo の 2015 年版ディレクトリ構造 . ├── __init__.py ├── app.py ├── configs │ ├── __init__.py │ └── settings.py ├── errors.py ├── extensions │ ├── __init__.py │ ├── injector.py │ └── permission.py ├─…

Splinter と PhantomJS を使って confirm() をフックする方法

Splinter — Splinter 0.10.0 documentation Splinter と PhantomJS を使うと E2E なテストを実現できる。 概ねこれで問題ないけど、サイトで JavaScript が window.confirm() を使って確認ダイアログを出している。 Splinter には get_alert() というインタ…

alembic でインデックスが 767 バイト以上の対策

MySQL5.6 で alembic を使った場合に、 "Warning: Specified key was too long; max key length is 767 bytes" が出る場合の対策メモ。 $ alembic upgrade head INFO [alembic.migration] Context impl MySQLImpl. INFO [alembic.migration] Will assume non…

factory_boy 2.4.0 で仕様が変った

Python の Fixture ツールである factory_boy を最新版の 2.4.0 にアップデートしたら、今までテストが通っていたものが fail するようになった。 # -*- coding: utf-8 -*- from factory import Sequence from factory.alchemy import SQLAlchemyModelFactor…

Golang で Web アプリケーションを作る際のメモ

自分用メモ。ここら辺を参考にした。 Golang でのウェブ開発を考えてみる - Qiita cli GitHub - urfave/cli: A simple, fast, and fun package for building command line apps in Go ここら辺が鉄板。 ちょっとアレと思ったのが、グローバルオプションの位…

Mackerel の Python クライアント作った

きっかけはこれ。 簡単な Mackerel 用の Dynamic Inventory スクリプトを書いてみました。 Ansible は Python で書かれているので、本当は Python で書くのが筋がよさそうですが、Python クライアントがないので、とりあえず Ruby で書きました。 言語による…

Python でデコレートされているメソッドを取得する方法

Python でデコレーターでデコレートされている関数/メソッドを全て取得したい。 class Sample(object): @decorator def foo(self): pass @decorator def bar(self): pass def baz(self): pass この場合だと、foo(), bar() を取得したい。 inspect.getmembers…

APScheduler

Python で cron みたいなジョブスケジューラなライブラリが無いかと思って探してたら、APScheduler というのを見つけた。 Advanced Python Scheduler — APScheduler 3.5.3.post19 documentation Scheduler やジョブを登録する Job stores などを組み合わせて…

2014 年振り返り

4 年近く常駐していた所から自社に戻って来た。 まぁ色々あって 11 月後半から年末にかけて障害が続いたりで大変だった。 来年も続く…。 # ことしはこれから年末対応の待機のための出勤 去年の ToDo の振り返り LXC というか Docker 試しにつかってみた程度…

雑談対話用の Python クライアント作った

リフレッシュ休暇中で、出かけようと思ったけど天気悪いし、寒いし、雪降るし…なので docomo が提供している API の Python クライアントを作った。 元ネタ。 docomoが提供している雑談対話APIを利用し、docomoruというライブラリを使いながらBOTと雑談する…

log

割と大きい障害が起きた。 うちはデータストアとそれを使う検索システムを作って 1 年くらい前に納品した。 7 月に自分がサポートを引き継いだ。 ちょくちょくメールで問い合わせがあったりして、まぁ分かる範囲で対応してた。 エンドユーザの環境に入れない…

locust.io でカスタムクライアントを作る

お仕事で自社製の分散 KVS の環境構築をやっている。 運用試験や負荷試験を行うんだけど、負荷試験を行うのにツールを使いたい。 Python 製の locust.io を使う。 locust.io を選んだ理由は クライアントを自分で作れる(負荷試験ツールは HTTP でしかお話で…