Python

PyPy3 2.4.0を使ってみた

最近、仕事でPyPy3を試したりしているので、メモを書き残しておく。 PyPy - Welcome to PyPy インストール 今回はUbuntu 14.04LTSで試した。PyPy3はPPAリポジトリに無いので、Linux向けのコンパイル済みバイナリをダウンロードして使うことにした。 利用する…

Mercurialのextensionを作る

Mercurialのextensionは、hgext/モジュール名.pyというレイアウトで作ればいいみたい。 Python 2.7、Mercurial 3.5.2で試した。 $ hg hello Hello world!GitHub - tokibito/mercurial-helloworld: helloworld mercurial extension

Pythonでプログラムの終了コードを指定する

Pythonでプログラム(プロセス)の終了コード(終了ステータス)を指定して終了するには、sys.exitの引数に数値を指定する。 試したのはPython3.4。 29.1. sys — システムパラメータと関数 — Python 3.4.3 ドキュメント コード main.py import sys def main(): #…

PythonでUnixドメインソケットを使って通信する

サーバー側 サーバー側のプログラムは、指定したファイルパスにソケットファイルを作ってクライアント側からの接続を待ち受けます。 server.py この例では、 /tmp/myapp.sock というパスにソケットファイルを作成します。クライアント側から送信されたデータ…

Djangoのプロジェクトに管理コマンドを追加する

Djangoのmanage.pyは独自に管理コマンドを作成して追加できます。 ここでは、「myapp」という名前のDjangoアプリケーションに対し、「summation」という名前のコマンドを実装する例を紹介します。 myappはプロジェクトに作成済みで、INSTALLED_APPSに追加済…

Djangoのエントリポイントとアプリケーションの仕組み

PyCon mini Sapporo 2015で、「Djangoのエントリポイントとアプリケーションの仕組み」というタイトルで話しました。 資料はSlideshareに置いてます。 Djangoのエントリポイントとアプリケーションの仕組み

Djangoの管理コマンドを作る際にdjango-extensionsのcreate_commandコマンドを使う

Djangoのmanage.pyスクリプトのサブコマンド(管理コマンド、management command)を追加するには、Djangoアプリケーション内に「management/commands/コマンド名.py」のようにモジュールを作成しますが、頻繁に使うわけでもないので作法をよく忘れてしまって…

DjangoテンプレートのstaticタグとSTATIC_URLコンテキスト変数の使い分け

Djangoテンプレートで静的ファイルのパス指定時にdjango.contrib.staticfilesのstaticタグとSTATIC_URLのどちらを使うべきか、という質問があったので、少し調べました。この記事はDjango 1.8のドキュメントとコードを参考にしています。 結論としてはstatic…

Django 1.8で追加されたSecurityMiddlewareについて

Django1.8で増えた機能でSecurityMiddlewareというものがあります。 何ができるのか把握しておきたかったので調べていました。 django.middleware.security.SecurityMiddleware コードはこのあたり。 django/security.py at stable/1.8.x · django/django · …

Djangoのメッセージフレームワークのストレージについて

Djangoフレームワークには、利用者ごとに一度だけ表示するメッセージ(フラッシュメッセージ)を扱う機能(django.contrib.messages)が含まれています。 The messages framework | Django documentation | Django メッセージは、複数のリクエストをまたいで表示…

django-celeryを使わずにDjangoとCeleryを組み合わせて使う

DjangoとCeleryを組み合わせて使う際に、django-celeryのモデルのテーブルを作りたくなかったり、各種機能が不要でシンプルに動かしたかった。 Celery - Distributed Task Queue — Celery 3.1.23 documentation Celeryやdjango-celeryはドキュメントが少し足…

Pythonプロフェッショナルプログラミング第2版が発売されました

タイトルの通り、会社(ビープラウド)のメンバーで執筆したPythonプロフェッショナルプログラミングですが、好評だったようで第2版を出すことができました。 初版から3年ほど経ち、古くなったコンテンツも多かったので、今回大幅に内容を変更しています。 店…

Django1.7の管理サイトでアプリケーション名を変更する

Django1.6以前のバージョンでは、管理サイトで表示されるアプリケーション名を変更する方法は通常の使い方では提供されていませんでした。 変えたいのはこの「Myapp」という部分。 Django1.7ではアプリケーションごとの設定が抽象化、再利用可能な仕組みが導…

DjangoでDEBUG=Falseの際にSQLのログを出力する

Djangoでクエリのログを出力したい場合、ロギングの設定でdjango.db.backendsのロガーを設定すればできます。 ただし、これはsettings.DEBUG=Trueのときにしか出力されないようになっています。 これはドキュメントにも書かれています。 ロギング — Django 1…

Django 1.5.3以降で変更されたセッションのシリアライズについて

Djangoのセッションデータは、settings.SESSION_ENGINEで指定されたクラスによって保存されます。 Django 1.5.3より前のバージョンでは、セッションデータのオブジェクトをシリアライズ、デシリアライズする処理は、ここで指定されるバックエンドクラスに任…

Python札幌の勉強会で話してきました

Python札幌の勉強会でPython3、Django、ApacheSparkの話題で話してきました。 slideshareに資料をアップロード済み。 Python札幌201406 from Shinya Okano 今回の札幌訪問はオープンソースカンファレンス北海道に参加したり、えにしテックさんのオフィスを訪…

GoogleAppEngine/Pythonでparamikoを使ってSSH接続

GoogleAppEngineでsocketが使えるようになったのは1年ぐらい前だった気がしますが、使ったことなかったので試してました。 Sockets Python API Overview | Python | Google Cloud Platform まだプレビューリリースですね。 socketを使えるのならparamikoでSS…

GoogleAppEngine/PythonからGoogleCloudStorageを使う

AppEngineで動かすアプリを作っていて、Blobstoreを使おうかなーと思って久しぶりにドキュメントを見たら、CloudStorageを使うことが推奨されていたので、試してた。 https://developers.google.com/appengine/docs/python/googlecloudstorageclient/?hl=ja …

rst2pdfでblockdiagを有効にする

rst2pdfはreStructuredTextからPDFを生成してくれるツールです。 blockdiagディレクティブを入力ファイルに書いても、そのままでは動作しません。 rst2pdfの拡張の仕組みを使うことでblockdiagを有効にできます。 試したバージョンは、Python 2.7、rst2pdf 0…

python-ldapとpython3-ldapについて

PythonからLDAPサーバーを操作するために使うクライアントライブラリについて。 python-ldapとpython3-ldapというのがある。 最初はpython3-ldapのほうはフォークか何かだと思っていたのだけど、コードを読むと全く別物でした。 それぞれについて特徴を整理…

Funkloadのテストコードの書き方について

fl-run-benchコマンドで実行するテストコードの書き方についてメモ。 Cyclesの値はCU(ConcurrentUser)の数 durationに設定した秒数の間、テストを繰り返し実行する レポートにでるSUCCESSやERRORの数はテストを繰り返し実行したときの結果を集計したもの デ…

FunkLoadでJSONをPOSTする

FunkLoadでJSONをPOSTする方法を調べたのでメモ。 FunkLoadでJSONを送信するテストコード funkload.utils.Dataを使うと、Content-Typeを指定してデータ列を送信できる。 test_Simple.py # coding: utf8 import unittest import json from funkload.FunkLoadT…

PythonでParquetフォーマットを扱ってみたいので調べていた

ParquetフォーマットをPythonから扱ってみたいので調べていた。 GitHub - jcrobak/parquet-python: python implementation of the parquet columnar file format. githubにあったものを見つけたけど、まだバグが結構あるっぽい。書き込みなども実装されてな…

Pythonの研修サービスを始めました

勤務先でPythonの研修サービスを始めることになりました。 BeProud Python Training (Pythonプログラミング研修) 私も講師の一人です。受託開発の業務でも5年以上Pythonを使っているので、ノウハウは蓄積されてます。 よろしくお願いします!

Apache Sparkを試す

CDH5の環境を手元に作ったので、Apache Sparkを使ってみる。 依存はHDFSのみ。Masterが1台でWorkerが複数台の構成なのかな。 ClouderaManagerで設定して起動するとWebUIがデフォルトでは18080ポートになっていた。 Pythonから使う場合はpysparkコマンドとな…

Djangoのタイムゾーンサポートの動作について

Djangoのタイムゾーンサポートについてメモ。settings.USE_TZをTrueにすると有効になる。 試したのはPython 2.7, Django 1.6.2。 Django1.6だと、プロジェクト新規作成時のsettings.pyでUSE_TZはTrueに設定されている。(ドキュメントではデフォルトでは無効…

tox.iniで他のセクションの値を参照する

タイトルのとおり。tox.iniで他のセクションの値を参照する方法について。 githubでいろんなリポジトリ眺めてるときに書いてる人がいたので知った。 ドキュメントにも書かれている。 Substitution for values from other sections こんな感じに書ける。 [tox…

django-ftpserverを公開しました

昔作ったunboxftpdを名前変えてリファクタリングし、django-ftpserverとして公開しました。 django-ftpserver 0.3.5 : Python Package Index Djangoアプリケーションとして追加すると、FTPサーバーを起動するコマンドが追加されます。 ユーザー認証はDjango…

SQLAlchemyでサブクエリとJOINを使ってみる

「SQLAlchemyでJOINの順番とかいじれるんだっけー?」というような話がきっかけでどうやるのか調べてた。 サブクエリもJOINも簡単に使えていいですねえ。 spam.py from sqlalchemy import Table, Column, Integer, String, MetaData, ForeignKey from sqlalc…

Celeryでタスクをプリフェッチする数を変更する

celerydのメインプロセスは、タスクのメッセージをブローカーから受け取った後、ワーカープロセスに処理を実行させる。 メッセージをブローカーから受け取る際、実行中のものとは別に、事前にメッセージを取得(プリフェッチ)するようになっている。 全てのワ…