2013-01-01から1年間の記事一覧

イマドキのPython in 2013

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

three.jsでglFrustum

three.jsでは、射影行列(ProjectionMatrix)がTHREE.Cameraとして抽象化されており、透視投影であるTHREE.PerspectiveCameraと、平行投影であるTHREE.OrthographicCameraの2つが標準で用意されています。一方、OpenGL*1には透視投影の射影行列APIとしてglFr…

THREE.TextureのneedsUpdate

ローダを使わずに自力でテクスチャを生成する時は、needsUpdateをtrueにすることを忘れずに。 texture = new THREE.Texture(img); // img要素 or canvas要素 texture.needsUpdate = true; 内部的にどうなっているかというと、最終的にrenderer.setTextureが…

three.jsにおける2D描画方法

Webブラウザ向けの3DCGライブラリであるthree.jsで、3D描画に2D描画*1を織り交ぜる方法を紹介します。これにより、前景と背景に自由に2D画像を描画できるようになり、ゲームのHUD表示などが可能になります。 基本的な考え方 three.jsに限った話ではありませ…

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

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

Advent Calendarサイト一覧

そろそろAdventCalendarなるものに参加してみようかなぁと思っていたところで、こんな記事を見つけたので、丸パクですがサイトリストをメモ。 Adventar Advent Calendar - Qiita [キータ] イベント開催支援ツール アテンド : ATND PARTAKE connpass - 人が集…

Pythonのwith構文で例外を補足する実例

以前こういう記事を書きました。 Pythonのwithステートメントのまとめ - $ cat /var/log/shin withを出る時に呼ばれる__exit__メソッドでは、引数として内部で生じた例外を受け取る事ができることを一応記載しているのですが、どういうシチュエーションでこ…

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.…

テンプレートとかイテレータとかファンクタとか

ARシステム作ったりしたからそれに関する記事書いてくぜと言うだけ言って一向に実行する気配がありませんが、今後もないわけですが(オイ)、PC上でもiOS上でも動くようにしたいなぁという要求から、システムのコアな部分はC++で書くべきなのかなという結論に至…

Objective-Cのブロック(Blocks)に関するメモ

関数が第一級じゃない言語とかやってらんないわー、これだから静的言語は云々、というLL厨に対抗してか、最近は静的な言語でも第一級関数を取り入れようとあの手この手でグロい構文を導入してきています。Objective-Cもその例に違わずブロック(Blocks)という…

はてなブログ2周年おめでとう!

はてなブログ2周年おめでとう!> id:hatenablogおめでとう!おめでとう!おめでとう!Tシャツください。

Objective-Cのクラス・カテゴリ・クラス拡張の整理

以前こんな記事を書きました。 Objective-Cのプロトコルとデリゲートのまとめ - $ cat /var/log/shin 現時点で、こんな場末のブログで唯一ブクマが多い記事なのですが、その文末で、 次は、カテゴリについて勉強したいと思います。 Objective-Cのプロトコル…

初めてiOS Developer Problemに登録してみた

iOS

正直な感想としては、とにかく面倒、それに尽きますね。 iOS Developer Programへの登録 2013年11月現在でも、ほぼ完璧に以下のサイト通りでした。 日本のApple StoreでiOS Developer Programを購入しActivateするまでの全スクリーンショット | MUSHIKAGO AP…

Vimで現在のバッファのプログラミング言語を変更する方法

Vim

EmacsとTextmate2をふらふらしつつ、最近Vimも始めた今日この頃。Objective-Cも書く必要が出てきたので、練習がてらVimで書いてみるかと思ったら、ヘッダファイルがC/C++と同じなので、ハイライトが微妙なことになってしまいました。Emacsならモードを切り変…

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に関して、何でこれらが必要とされるようになったのか、歴史的経緯を踏まえて色々調べたので、記録しておきます。ただし、特に歴史的な話に関しては、ネットで自分が納得できるまで探りはしましたが、正確性を欠くか…

Perl勉強 - use, my, package

試行錯誤のための良くないサンプルコード。 #!/usr/bin/env perl use strict; use warnings; use utf8; my $a = {b => 'c'}; my $n = 0; sub print_a { print Data::Dumper->Dump([$a]), "\n"; } { package Package1; sub print_a { my $a = {%{$a}, d => 'e…

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のこ…

習うより慣れろなPerlのOOP入門

入門記事書けるようなレベルではありません*1ので、タイトルは釣りです。諸事情により、Perlのモダンな機能の予備知識0の状態で、突如分けわからないOOPなPerlの開発をちょこっとしたので、その知見をまとめたものです。オブジェクト指向のベーシックな概念…

Perlの対話モード

調べても情報古かったり、よく分からなかったり、うーん。 Perlの対話モード、なんて洒落たものは標準では存在しない pythonとかirbとか涙ちょちょぎれるぐらい便利ですね。特にPythonの「デフォルトは対話なんだ」という姿勢には感服です。ではPerlは?とい…

イマドキの(?)Perlの環境構築

そういえば、環境構築の話をまだ書いていなかったので、メモ残しておきます。 perlbrewとcpanmで環境構築 歴史的な話などはよく分かりませんが、perlbrewとcpanmというのが割りとホットなツールのようです。 perlbrew 複数のPerlを管理できるツールです。Rub…

「初めてのPerl」第6版を購入。

所用にてスーパーPerlプログラマーにならざるを得ない感じなので、初めてのPerlを購入しました。Perlさんマジ無理っす。リャマ本だけではスーパープログラマになることはできないのですね…。モジュールの作り方とかOOPとかは続編のアルパカ本で詳しく解説し…

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を使っちゃうようなハイレベルなフレームワークがいくつも出てきているし、オ…