キノコの自省録

日々適当クリエイト

プログラム

【UMLクラス図】継承の矢印の向きはわかりにくい?

突如として思い出したので小ネタエントリー。 経験の浅い人にクラス図を描かせると、継承の矢印を逆にしてしまうケースがちらほら見受けられます。 実際、「親クラスから子クラスへ継承するなら、親→子じゃないんですか?」という質問を受けたことがあります…

libsqlite3で外部キー制約をONにする

Objective-Cで使用できるsqlite3 (libsqlite3)で、外部キー制約(FOREIGN_KEY)を有効にする方法の覚書。 (sqlite3の外部キー制約は、デフォルトでは無効になっています) int ret = 0; sqlite3_db_config(handle, SQLITE_DBCONFIG_ENABLE_FKEY, 1, &ret); NS…

音(声)の高低を検出する方法を真面目に書く

Seraph Flightで使っている音程の検出について、 基本的な解析方法しか使っていないと書いたものの、 あまりこういう分野に明るくないけどやってみたいなあ、という人がいるかも知れないので、 ちょっと真面目に説明します。Seraph Flight - 天使の歌声飛行…

バイトオーダーを入れ替える関数

http://d.hatena.ne.jp/kinokorori/20071017/1192625754 ここで2007年という大昔にswapByteOrderなる関数をさらしましたが、 リンク切れていたので、ここに直接べた書きします。 template<typename T> static T swapByteOrder(T orig) { T temp = 0; unsigned char* p = </typename>…

新しいプログラミング言語を覚える場合、言語仕様を先に暗記した方が速い

1つもプログラミング言語を覚えていないなら実践しながら覚えるというのもアリかと思いますが、 何かしらの言語をマスターしている場合は、 使いながら覚えるより、言語仕様を丸暗記した方が上達早いんじゃないですかね、という話です。 知っている知識でな…

他言語習得者用、Objective-Cの構文とキーワード一覧

他の言語を習得している人がObjective-Cを勉強しようとすると、 独特の構文や不思議なキーワードが登場して、大抵面食らうと思います。 膨大な数のAPIに圧倒されることもあって、 何から手をつけていいのやらわからなくなるようです。 C++, Java辺りを知って…

NSAutoreleasePoolとGCD

昨日の続き。 NSAutoreleasePoolは、新しいスレッドを作成したとき、 必ずスレッドごとにNSAutoreleasePoolも一緒に作成する必要があります。 メモリ管理プログラミングガイドにも、そのように書いてあります。 C/C++,C#,Javaあたりでも、オブジェクトを生成…

autoreleaseは結構怖かった

iOSのautoreleaseって何の気なしに使っていたのですが、 これって下手するとメモリリーク状態になるんですね。 メモリ管理プログラミングガイドだけはちゃんと読んでおくべきでした。 autorelease付きのオブジェクトは、NSAutoreleasePoolという自動解放プー…

iOS5が色々酷い

iPhoneアプリを作っていた人が退職するに当たり、 なぜか全く関係ない私の下に仕事の丸投げをしてった上、 ろくに説明もしないで出てったその前任者のコードがアンチパターンの見本市だったという、 若干やるせない日々を送っているのが近況のわけですが、 …

Android JNIで見掛けたインスタンス管理テクニック

Shared Libraryを作成するとき、 インスタンスの管理はなかなか悩ましい問題ですが、 Androidのmediaパッケージで、 JNIを利用したちょっと変わったインスタンス管理をやっていたので紹介&覚書。 /* envはJNIEnv*, thizはjobjectで、JNI呼び出しクラスのイ…

Visual C++でWPFっぽく その2

昨日の続きです。 本当にVisual C++とSilverlightなんか組み合わせられるのか!? という検証のために、簡単なVisual C++/Silverlightのアプリケーションを作ってみました。 巡回セールスマン問題を解くサンプルアプリ巡回セールスマン問題?巡回セールスマ…

Visual C++でWPFっぽく その1

Visual C++では、WPFが使えません。 標準で用意されているVisual C++のコントロールは、 見た目も地味で、種類も少ないです。 それが嫌なら、描画関数とイベントを駆使して、自分で作るか、 C++/CLIでWPFを利用するしかありません。 そんなGUIが貧弱になりが…