Python

イマドキのPython in 2013

この投稿は QiitaのPython Advent Calendar 2013 の22日目の記事です。 はじめに 本記事は自分がPyPIに公開できるPythonモジュールを書くために行った調査結果をまとめたものです。が、私自身は未だかつて一度もPyPIにパッケージ*1を登録したことがないこと…

CherryPyとws4pyによるWebSocketチュートリアル

この記事は QiitaのPython Advent Calendar 2013 の7日目です。 はじめに 簡単に自己紹介をすると、筆者はOSやHCIを研究しているふりをしている、しがない院生です。現在、修士論文に向けPython+OpenCVでARシステムを構築しています。来年からWeb系エンジニ…

argparseの勘所(Python2.7〜)

今までコマンドライン引数を処理するのにoptparseを使ってきたのですが、optparseは2.7以降は非推奨というか上位互換のargparseを使いましょうねというお達し(PEP389)が出ています。そんなわけで今書いているプログラムに関して移行作業を行いました。argp…

Pythonのos.path

パス文字列の操作で便利なos.pathモジュールのよく使うものメモ。必要に応じて追記します。ドキュメント:10.1. os.path — 共通のパス名操作 — Python 2.7ja1 documentation ディレクトリ名取得 os.path.dirname >>> os.path.dirname("../foo/bar/hoge/piyo.…

super(self.__class__, self) は危険 (Python 2.x)

Python2.xのsuperのお話です*1。まさかの今の今まで知らなかったので戒めとして記録しておきます。 結論 結論から言えば「2回以上継承されうるクラスでは*2、super関数で親クラスを参照する場合は、super(self.__class__, self)ではなく、ちゃんとsuper(クラ…

WSGI/Rack/PSGIの登場の背景

何番煎じ変わりませんが、WSGI/Rack/PSGIに関して、何でこれらが必要とされるようになったのか、歴史的経緯を踏まえて色々調べたので、記録しておきます。ただし、特に歴史的な話に関しては、ネットで自分が納得できるまで探りはしましたが、正確性を欠くか…

Pythonリスト遊び

Pythonでリストを操作する場合、基本的に、2つの方針があります。 新しいリストを作成する インスタンスメソッドを使う(破壊的) これを意識した上で、スライス、==とisの違い、リスト内包記法、filter, map, reduce, ...などを理解していると捗ります。 >>…

swap色々

ちょっとした小ネタです。Cでswapをするには、マクロやポインタを使えば出来ます。 // int値の交換 #include <stdio.h> void swap(int* a, int* b) { int t = *a; *a = *b; *b = t; } int main(void) { int a = 0, b = 1; printf("%d, %d\n", a, b); swap(&a, &b); pr</stdio.h>…

OpenGLによるCOLLADAなはちゅねの描画 (2)

前回に引き続き、はちゅねの描画に挑戦します。 はちゅね用チューニング 理想的には、1つCOLLADAプレビュー用のプログラムを作れば、全部のCOLLADAに対して適用出来ると思うのですが、とりあえず今回ははちゅね用に色々チューニングを施しました。 テクスチ…

OpenGLによるCOLLADAなはちゅねの描画

前回の記事では、モダンなOpenGLでティーポットを描画するための基礎知識について整理し、ティーポットが描画できたよ、ということまで書きました。実は、前回のティーポットの描画では、ジオメトリ部分だけを読み込んで描画しています。シンプルなモデルで…

モダンなOpenGLでティーポットを描画したい -- COLLADAをOpenGLで描画する際の勘所

「モダンなOpenGLでティーポットを描画したい」という動機から、いろいろ調べた結果を残しておきます。シェーダーやglDrawElements*1は一応使えます、という人向けです。 モダンなOpenGL OpenGL 3.x以降のシャーダーを使うことを前提とした仕様のOpenGLのこ…

MacのOpenGLのバージョン及びプロファイル

今日一日を費やしたので記録しておきます。 発端 今日は、PyOpenGLを使って、OpenGL 3.xでGLSL 1.4のモダンなOpenGLの勉強でもするぜー、と意気揚々としていたのですが、PyOpenGLで扱うGLSLのバージョンを1.2からどうやっても変えることが出来ず、ひたすら調…

NumPyでフィルタリングを高速に行う方法

例えば、OpenCVで2値化済みの画像から黒色(つまり値が0)のピクセルの数を数えることを考えます。一番分かりやすいのは単純にfor文で回して数を数える方法です。bin_imgは2値化済みの画像でnumpy.ndarray型の2次元配列とします。 count = 0 for color in bi…

ARシステムの開発(CV・CG・計算幾何学)

最近ARシステムの開発をしています。果たして、修論に繋がるんだか繋がらないんだか、何とも困ったものではあるのですが、趣味としては楽しいですね。ARといえば、イマドキはUnityを使っちゃうようなハイレベルなフレームワークがいくつも出てきているし、オ…

Pythonの関数内関数の生存期間

Pythonは関数内に関数を定義し、そのネストした関数はクロージャ的に外の関数スコープの変数を参照することが出来ます*1。しかし、やったークロージャだーとJavaScriptばりに乱用できるかというと全くそうではない点に注意が必要です。というのもPythonの関…

OpenCVをPythonで利用する on Mac

色々詰まったのでメモを残しておきます。 基本方針 ざっと検索する限り、NumPyというPythonパッケージを入れれると、もれなくOpenCVのPythonバインディングが付いてくるということが分かりました。というわけでNumPyを入れることを目標とします。 Macでの方…

Pythonでimportのパスを追加するスニペット

例えば、 modules/ hoge/ __init__.py ... bin/ run.py のような配置にした時、run.pyからmodulesディレクトリ内のモジュールを参照するには、importのためのパスを追加するのがよさそうです。importの際にはsys.pathリストにあるパスを元に探索されるので、…

Pythonのwithステートメントのまとめ

Pythonを使う上で、withステートメントは、やはり見逃せない機能の1つであると思います。Python2.5〜3.xまで網羅しているようにしたつもりです。 基本 まず、一番身近なファイル操作の例を載せておきます。 with open("...") as f: print(f.read()) これは…

Pythonの正規表現の自分用まとめ

今気づいたのですが、Pythonについてこのブログで書くのは初めてなのですね*1。というわけで、タイトル通りのメモです。ターゲットはPython3.xですが、2.xとの違いはあまり無さそうです。 reモジュール 正規表現はreモジュールが担当します(import re)。 マ…