3日目の坊主

3日坊主といいますが、その坊主の3日目はどうなっているでしょう?更新されているのか?

Objective-Cで追加したファイルを開く方法

2014年06月01日 | プログラミング
iPhoneアプリでバイナリファイル開いてアレコレしたくなったので、
とりあえずファイルのストリームを作るところまでやってみた。
どっちを使えば便利なのかもわからないので、
メジャーっぽいファイルハンドルの方も試してみる。

1.追加したいファイルをプロジェクト上のSupporting FilesにD&D
→場所は好きに決めれるっぽいけど、今回はここで

2.Choose options for adding there filesで、Copy items into~にチェックして、Add to targetsの該当プロジェクトにチェックしてOK
→ファイルのショートカットじゃなくて、プロジェクトにコピーする感じで(しなくてもいいかも)

3.とりあえずチェックなので、一番最初に表示されるViewのモデルのviewDidLoadに以下を追加
    // ファイル名の指定
    NSString* fileName = [[NSBundle mainBundle] pathForResource:@"hoge" ofType:@".dat"];

    // NSInputStream
    NSInputStream* dataStream = [NSInputStream inputStreamWithFileAtPath:fileName];
    if (dataStream == nil) {
        NSLog(@"failed");
    } else {
        NSLog(@"good");
    }

    // NSFileHandle
    NSFileHandle *fileHandle = [NSFileHandle fileHandleForReadingAtPath:fileName];
    if (!fileHandle) {
        NSLog(@"failed");
    } else {
        NSLog(@"good");
    }

以上のコードで、hoge.datというファイルを読み込んでみて、
成功したらgood、失敗したらfailedがログにでるって感じ。

cursesプログラム

2009年03月25日 | プログラミング
描画関数をおいた後に、whileとかで無限ループかますと、
直前までの描画をしてくれない。
getchとかで、入力待ちにすれば描画されるけど、
不便で仕方がない。

こうしてあれこれ悩みつつ、cursesについて書いてるサイトを探してたら、
再描画関数refresh()があることを知る。
これで、問題は解決された。

cursesについて書いてるサイトが少ないとはいえ、
もっと調べるべきだったな。
man?英語読めないよ。

x64環境でBadImageFormatException

2008年09月10日 | プログラミング
Vistaのx64にしてから、以前作った動画再生ソフトを実行してみたら、
BadImageFormatExceptionという例外が発生した。
調べてみると、DirectXのライブラリはx86用しかなく、
x64用にコンパイルすると、その例外を吐いて動かないらしい。

ヘルプを見ると、プロジェクトのプロパティにある、
詳細コンパイルオプションでターゲットCPUを変更できるらしい。
だけども、そんなオプションはどこにもない。

また調べてみると、Expressエディションには、
そのオプションはないらしい。
それでまた調べてみると、SDKでターゲットCPUを指定できないだけで、
メモ帳とかで.vbprojファイルを開いて、<PropertyGroup>内に
<PlatformTarget>x86</PlatformTarget>を追加すれば、
x86用にコンパイルしてくれるらしい。

オプションを追加してビルドしたら、うまくうごいてくれた。

Expressエディションはつまらないところで
機能を出し渋ってるなあ・・・

AudioVideoPlaybackのボリューム

2008年07月08日 | プログラミング
AudioVideoPlaybackで動画のミュート機能をつけたいと思い、
Audio.Volumeで調節しようとした。

mMedia.Audio.Volume = 0

これで再生をかけると、なんでか動画が再生されない。
というか、標準が0だった。
このとき、0-100までの整数かと思って操作していたために、
むちゃくちゃおかしなことになっていた。

落ち着いて、ググってみてもいいお返事がない。
英語でググったら、ようやくお目当てのコードがあった。

mMedia.Audio.Volume = -10000

・・・あるえあるぇー
-10000とか、むちゃくちゃおおきい数字で、
それも-符号付きだった。

おかしいと思って、リファレンスを読むと、こうあった。

---以下、DirectXリファレンスから引用
注意

このプロパティは、デフォルト値が 0 の読み書き可能なプロパティである。最大ボリュームは 0、無音は 10,000 。スケールは対数である。必要なデシベル値を 100 倍する (たとえば、10,000 = 100 dB)。
---

なんていうか、先にリファレンス読めって感じだ。

ようやくミュート機能がついた。

DirectShowでLoaderLock検出

2008年07月07日 | プログラミング
VB.net 2008でDirectShowを使った動画再生プログラムで、
デバッグしようとして以下のエラーがでた。

LoaderLock が検出されました。
Message: DLL 'C:\WINDOWS\assembly\GAC\Microsoft.DirectX\1.0.2902.0__31bf3856ad364e35\Microsoft.DirectX.dll' は、OS ローダー ロック内でマネージ実行を試行しています。DllMain またはイメージ初期化関数内でマネージ コードを実行しないでください。この動作は、アプリケーションをハングさせる原因になる可能性があります。

こことかを参照すると、
なんでも、2005からコンピュータに不正な動作をさせないように、
Managed Debugging Assistants(MDA)という実行チェックが動いているようだ。

MDAのLoaderLockチェックを外せばいいらしい。
以下に、方法をメモる。

[デバッグ]→[例外]
Managed Debugging AssistantsのLoaderLockの項の
スローされるときのチェックを外す。

これで、なんとか動く。

#なにげに、ジャンルとしてプログラミングを用意したけど、
#実際書いたのは、これがはじめてだったり。

smartIRC

2008年03月22日 | プログラミング
IRC Botをなにかで作ってみようと思ってみたとき、
友人にSmartIRCについて教えてもらった。
PEARでインストールできるし、
PHP Proで紹介されていたので、さっくり作ってみた。
コピペですよコピペ。

参加者のプライベートメッセージに反応するスクリプトは、
コピペでなんとかなったけど、うちの回線はプチプチ切れるので、
自動Reconnect+自動Rejoinをやってみた。

当初、
$irc->setAutoRetry(TRUE);
$irc->setAutoReconnect(TRUE);
のみで書いてたけど、一向にチャンネルに入ってこない。
デバッグモードでメッセージを見てると、
サーバにはつながっているけれども、チャンネルに入ってこない。

日本語サイトで検索していたけど、まったく書いてるページがない。
しぶしぶと英語のサイトを検索すると、
$irc->setChannelSyncing(TRUE);
とあった。

このクラスについて調べてみると、
Channel syncing means, all users on all channel we are joined are tracked in the channel array. This makes it very handy for botcoding.
と書いてある。
訳:Channel syncing は、自分の入っているユーザとチャンネルを(channel arrayの中から)トラッキングするよ。これ、bot書くときにすげえ便利よ。
っぽい感じ。

ということで、使ってみた。
いま使ってるスクリプトに先の一文を付け加えると、
自動でRejoinしてくれた。

ちなみに、PHP Proのサンプルにも
$irc->setAutoRetry(TRUE);
$irc->setAutoReconnect(TRUE);
$irc->setChannelSyncing(TRUE);
を付け加えると動くと思う。

This makes it very handy for botcoding.って言ってるけど、
これすげえ便利じゃないか。
なんで説明少ないんだろう。ソースみれってのか。わかんないよ。
とりあえずできた。

なんか、汎用性のあるのができたらポコポコのっけていこう。