Programming

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のクラス・カテゴリ・クラス拡張の整理

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

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」第6版を購入。

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

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

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()) これは…

Cのプログラムでたまに出てくる関数内の無意味なvoid宣言の意味

C言語のソースを読んでいると、稀に以下のような感じのフレーズが出てきます。 void doSomething(int unused) { (void)unused; } この(void)unused;は一体なんじゃい、という話なのですが、一言で言えば「コンパイル時のunused variable系warningを減らすた…

OpenAL+ALUREによる立体音響遊び・・・の準備

立体音響(3D Audio)を試したかったので、OpenALをインストールすることにしました。 環境 Mac OS X Mountain Lion Homebrew 結論 OSXにはOpenALが標準装備されているようなので、OpenAL(OpenAL Soft)を別途入れる必要はありません。 OSX標準のOpenALを利…

特定の拡張子の行数をカウントするコマンド

すぐに忘れるのでメモ。 "./app"以下の拡張子"rb"のファイルの各ファイルの行数及び総行数の表示 $ find ./app -name "*.rb" | xargs wc -lRailsであれば、rake statsでも行数を確認できますが、Viewは含まれませんので、MC以外は上記のようなコマンドでカウ…

HTML5のDrag & Dropの罠

dragoverイベントをキャンセルしないと、dropイベントが発生しません!*1以上。 おまけ この仕様ですが、このサイトでいかにクソかについて語られているので、一読をおすすめします。こういうお話も含んだ、ちゃんとした実装の仕方は「ドラッグ&ドロップ-H…

Objective-Cのプロトコルとデリゲートのまとめ

Objective-Cの@protocol、@required、@optional、そして所謂Protocol-Delegateパターンの基本のまとめです。Javaが普通程度に出来る人を対象としてます。(Objective-C歴1週間程度なので要ツッコミ) サンプルコード 百聞は一見にしかず、ということでサンプ…

この春はゆるふわ愛されObjective-Cでキメちゃおう☆

iPhoneアプリで一儲けしたくなっちゃったからObjective-C頑張っちゃうZO☆ とかいうドン引きな冗談はさておき、なんとなく勉強し始めたObjective-Cについての徒然なるまとめです、真面目です。C++がそれなりに出来るObjective-C初学者*1が対象です。体系的に…

CodeVS2で書いたソースコード

決勝が終わったようなので、せっかく書いたので置いておきます。いやほんと色々Rubyの勉強になりました。ちなみに、ランカーの人がコード公開しています。https://github.com/shohei909/CODE_VS_2.0上位の人はみんなC, C++かと思ってましたが、C#でちょっと…

RailsでJavaScriptライブラリの配置に迷う

Railsでは、app/assets/以下に各種JavaScriptやCSSなどを配置しますが、巷のJavaScriptライブラリには、JavaScriptとCSSと画像がセットになっているケースがしばしばあります。この時、特に厄介なのがCSSと画像です。CSS内で背景画像が相対URLで指定されてい…

Railsの*_pathと*_urlに関するメモ

「RailsによるアジャイルWebアプリケーション開発 第4版のp.120、David曰く」で解説されてます。 *_urlは絶対パス*1で、redirect_toで用いる*2。 *_pathはルート相対パス*3で、redirect_to以外ではこれで問題ない。特にlink_toなんかでは、無駄な出力が省け…

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

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