Python

Django REST frameworkとbpmappersを組み合わせて使う

DjangoでREST APIを簡単につくるためのライブラリは、django-tastypie以外にDjango REST framework(以下rest_framework)というのもある。 Django REST framework これとbpmappersを組み合わせて使う方法を調べたのでまとめる。 rest_frameworkモジュールのソ…

django-tastypieとbpmappersを組み合わせて使う

Djangoでtastypieを使ってREST APIを作る際に、bpmappersをどうやって組み合わせればよいか調べてた。 tastypieのCookbookのページにカスタムの値を追加する例がある。 Adding Custom Values tastypieのソースコードを読んだところ、dehydrateメソッドで値の…

Djangoのsettingsの分割と構造化について

Djangoの設定ファイルであるsettingsの分割、構造化について。 開発、ステージング、本番、テストなど環境ごとにsettingsの内容は変える必要があるので、settings.pyを分割したり、共通部分をまとめたりする。 settingsの分割についてはdjangoprojectのWiki…

PythonからHDFSを操作する

HadoopのHDFS(分散ファイルシステム)にはWebHDFSというREST APIがあり、HTTPで操作できる。 WebHDFS REST API Pythonからこれを簡単に使うためのモジュールを探したところ、PyPIでWebHDFS、pywebhdfsの2つを見つけた。 WebHDFS 0.2.0 : Python Package Index…

CHaserっていうプログラミングコンテスト用のPythonクライアントをPyPIに置いた

全国情報技術教育研究会という主に工業高校が会員になってる組織があって、そこが高校生向けにプログラミングコンテストを毎年やってる。 CHaser2012 - 全国情報技術教育研究会 コンテスト用のサーバープログラムを動かして、そこに2チームがクライアントプ…

DjangoのORMでINSERTのSQL文字列を取得する

タイトルの通り。 DjangoのORMでSELECTのSQLを取得するのは、QuerySetクラスのquery属性を参照すればいいのだけど、INSERTの場合は簡単に取得できる方法がなさそうに見えた。 内部APIをゴニョゴニョすることで、何とか取得できる。 以下、コード例。 myapp/m…

PyCON APAC 2013に参加しました

PyCON APAC 2013に参加しました。 PyCon APAC 2013 - PyCon APAC 2013 チュートリアルデイ チュートリアルBで講師をやりました。 PyCon APAC 2013 チュートリアル - connpass 当日使用した資料が印刷して70ページ程度のものでした。予定通り説明ができて、参…

bpmappers 0.7をリリースしました

タイトルの通り、bpmappers 0.7をリリースしました。 bpmappers 0.7 : Python Package Index 0.6のbpmappers.djangomodelモジュールはPython3で動作しなかったのですが、Django1.5+Python3.2 or 3.3で動作するように修正しました。 sixモジュールを分離して…

PythonからCloudera Impalaにクエリを投げて結果を取得する

PythonからImpalaにクエリを投げて結果を取得したかったので、方法を調べてました。 Impalaの環境はCloudera QuickStart VMを使用し、CDH4.3.0でImpala1.0.1です。 impylaというPythonのモジュールを試してました。 GitHub - laserson/impyla: Python client…

FluentdにPythonから日本語の文字列を投げてみる

Fluentdに対して、fluent-logger-pythonで日本語のデータを投げて正常に動作するか試してみる。 バージョンはUbuntu 12.04(precise)、Python 2.7、td-agent 0.10.35、fluent-logger-python 0.3.3。 fluent_test.py # coding: utf-8 from fluent import sende…

Fluentd(td-agent)のインストールとPythonからの利用

Fluentdを使おうと思って調べてる。 Fluentdを使うと、各種ログを集約したり、いろいろな出力先に振り分けたりが簡単にできる。 Rubyで実装されていて、gemでインストールすることができるけど、今回はRubyの実行環境も含めてパッケージ化されたtd-agentを使…

Upstartを使う

最近、デーモンプロセスの管理にUpstartを使ってる。 PIDの管理をあんまり気にしなくてよかったり、イベント発火の仕組みでプロセス間の依存を解決できるのが楽。 簡単な使い方をメモしておく。 基本的な使い方 /etc/init/ に設定ファイルを設置する initctl…

jsonモジュールのobject_hookを使ってJSONからオブジェクトを生成する

Pythonのjsonモジュールのloads関数には、object_hookという引数があり、JSONの値の変換時にフックすることができる。 詳しくはドキュメントを参照。 18.2. json — JSON エンコーダおよびデコーダ — Python 2.7.x ドキュメント 試したPythonのバージョンは2.…

guestbookアプリをDjango1.5に対応させた

bitbucketに置いてたguestbookアプリをDjango1.5で動くように修正した。 対応前 tokibito / sample_nullpobug / source / django / myproject / (rev:37c9c8d) Django1.0〜1.3ぐらいで動作するコード。汎用ビューがまだ関数だし、staticfilesも使っていない…

drone.ioを試してみた

Travis CIと似たようなCIサービスでdrone.ioというのがあるらしいと聞いたので、試してみた。 Continuous Integration · drone.io GitHubだけじゃなくて、Bitbucketにも対応しているのがうれしい。 ビルドの設定はTravisCIと違ってWeb上のフォームで入力する…

Travis CIでpython3.1が外されていた

bpmappersはbitbucket上で主に開発してるけど、githubにもpushしてTravis CIを使ってる。 最近ドキュメントだけ変更してpushしたらエラーがでてた。 コードは変更してないのになーと思ってTravis CIのログを見たらこんなメッセージが。 ERROR: py31: Interpr…

一時ディレクトリの作成にtempfileモジュールを使う

ファイル操作のテストコードを書いていて、tempfileモジュールが便利だったので使い方のメモを残す。 Pythonの標準ライブラリにtempfileというモジュールがあり、これを使うことで一時ディレクトリやファイルを簡単に作成できる。 10.6. tempfile — 一時的な…

PythonでSPDYのHello worldを実装してみる

SPDYプロトコルがどういうものなのか理解しておきたかったので、spdy/3の仕様を最近読んでる。 SPDY Protocol - Draft 3 - The Chromium Projects で、実際どういう挙動になるのかPythonで実装してみた。 今回は単純にtext/plainで「Hello, SPDY」と表示する…

Pygmentsを使う

Pygmentsをドキュメント読みつつ動かしてみてた。Pygmentsはソースコードなどにシンタックスハイライトを適用するためのライブラリ。 Welcome! — Pygments インストールするとpygmentizeコマンドが使えるので、外部実行ならこれを使えばよし。 Pythonコード…

Pythonでシンボリックリンクとハードリンクを作成する

PythonでLinux上にハードリンクとシンボリックリンクを作成する。 試したのはUbuntu12.04, Python2.7.3。 どちらもosモジュールの関数を使う。 ハードリンクの作成 ハードリンクはos.link関数で作成できる。 >>> import os >>> os.link('test.txt', 'foo') …

緯度経度をUTM図法の座標に変換する

Pythonで緯度経度をユニバーサル横メルカトル図法(UTM図法)の座標に変換するには、PyProjを使う。 pyproj 1.9.5.1 : Python Package Index UTM図法の座標がわかれば、2地点間の距離を求めたりするのが簡単になる。 インストール pipやeasy_installでインスト…

2点を通る直線から離れた位置にある点までの距離を求める

タイトルの通り。2点を通る直線から離れた位置にある点までの距離を求めるのに、NumPyを使って計算します。 点a(x1, y1), 点b(x2, y2), 点c(x3, y3)があり、aとbを通る直線abから離れた位置に点cがあります。 点cから直線abへ引いた垂線の長さをLとします。…

NumPyで2点間の距離を求める

以下の図のような点a(x1, y1)から点b(x2, y2)の距離を求める(aとbをつないだ直線の長さを求める)場合。 ベクトルの長さを求める。 NumPyだとnumpy.linalg.normを使えばいいらしい。 >>> import numpy >>> x1 = 2 >>> y1 = 2 >>> x2 = 4 >>> y2 = 6 >>> a = n…

NumPyで2元1次方程式の解を求める

NumPyの行列計算って強力なんすね。いろいろ試してみてる。 3x + 2y = 14 x + y = 6こういう2元1次方程式の解を求める場合。 NumPyだとnumpy.linalg.solveで逆行列の積を求められるので係数のarrayを作って使えばいいらしい。 >>> A = numpy.array([[3, 2], …

Djangoのrestructuredtextフィルターでblockdiagを使う

Djangoのcontribには、テンプレートでrestructuredtextなどのマークアップをHTMLに変換してくれるフィルタのセット、django.contrib.markupがあります。 https://docs.djangoproject.com/en/dev/ref/contrib/markup/ restructuredtextフィルターを使う場合は…

DjangoとMySQLで緯度経度を扱う

やりたかったことは、指定した緯度経度(GPSから取得した現在位置)に近い場所の検索と距離の算出でした。 DjangoだとPostGIS+GeoDjangoを使えばできますが、今回はデータベースがMySQLであるため、filterでdistanceが使えませんでした。 GeoDjango Database A…

SQLSoupで既存のデータベースを参照する

既存のデータベースのテーブルを参照するのにSQLAlchemyを使おうと思っていたら、 @aodag からSQLSoupというモジュールがあるよと教えてもらったので試してました。 SQLSoupはSQLAlchemyに依存していて(元々はSQLAlchemyの拡張で、最近分離された)、SQLAlche…

Southのマイグレーションのマージ

Mercurialなどのバージョン管理システムでブランチを使っていて、DjangoとSouthを使っている場合、Southのマイグレーションがブランチ間で衝突して、マージしないといけないことがよくある。 その際の解消手順についてメモ。 試したのはDjango1.4.1, South0.…

Django1.4のバルクインサートを試す

Django1.4で、やっと標準でバルクインサートがサポートされた。 QuerySetにbulk_createというメソッドが増えている。 単純なモデルを作って、動きを見てみる。 試したのはMySQL5.5、Django.1.4.1 myapp/models.py class Item(models.Model): name = models.C…

DjangoのORMでサブクエリやrawを使う

試したのはDjango1.4.1。 こういう親子関係のモデルがあったとする。 myapp/models.py from django.db import models class Parent(models.Model): name = models.CharField(max_length=30) def __unicode__(self): return '{}, {}'.format(self.name, getat…