Monday, February 28, 2011

smart pointers for Core Foundation style references

iOS や mac のアプリケーションを書くときに Objective-C を使うときでも、 Core Graphics などの C の API を使うときは CGImageRef などのリファレンスの開放とか面倒です。特に関数の途中で return したり、C++ のライブラリを使用するときの例外処理を考えるとウンザリです。メモリリークのリスクも高まるし。


void doSomething(void) {
CGImageRef image = CGImageCreate(......);

// do something...

if (some condition...)
CGImageRelease(image);
return;
}

try {
CPlusPlusClass::aFunction()
} catch (...) {
CGImageRelease(image);
return;
}

// use image...

CGImageRelease(image);
}


Objective-C のオブジェクトなら最初に autorelease しておけばいいんですけどね(iOS でなければガベージコレクションも使えるし)。

そんなときは C++ のテンプレートで smart pointer 的なリファレンスのラッパーを書けば、ことあるごとに XXXXRelease(ref) しなくて済みます。


これで、こんなふうに書けるようになります。

#include "AutoRef.h"

void AutoRefRelease(CGImageRef ref) { CGImageRelease(ref); }

void doSomething(void) {
AutoRef image = CGImageCreate(......);

// do something...

if (some condition...)
return;
}

try {
CPlusPlusClass::aFunction()
} catch (...) {
return;
}

// use image...
}


Objective-C のコードで C++ のコード使う場合(Objective-C++)は、拡張子を .mm に変えるを忘れずに。

Monday, February 14, 2011

a Lifehack for the redirection problem of lifehacker.com

If you can't understand Japanese, please go to English part of this post.

2011-02-24: mac の場合 「プロキシ構成ファイル」として gist の "view raw" リンク の URLを指定すればOKなことに気がついた
2011-02-24: gizmodo もダメだったので追加
2011-02-24: pacファイルを gist に

最近、僕の自宅から lifehacker.com にアクセスすると lifehacker.jp にリダイレクトされるようになってしまっていました。

調べてみると、みんなが見たい USサイトは us.lifehacker.com で、グローバルな lifehacker.com へのアクセスは親切なことになんらかの情報(アクセス元のIPアドレス?)をもとに各国の lifehacker にリダイレクトしているようです。

で、何が問題かと言うと、最悪なことに
USサイトのフィードの記事、たとえば、
"Disable or Restrict Plug-Ins in Chrome to Prevent Malware Installs [Security]" のリンク先、
http://feeds.gawker.com/~r/lifehacker/full/~3/zLgSu5CwbAM/
のリダイレクト先は
http://lifehacker.com/#!5757551/disable-or-restrict-plug+ins-in-chrome-to-prevent-malware-installs
なので、lifehacker.jp にリダイレクトされてしまって、該当の記事が読めないという具合。

本題の、この問題を回避するライフハックは、以下の javascript コードを lifehacker.pac みたいな名前で保存して、プロキシ構成 (.pac) ファイルとして設定することによりリダイレクトを回避します (Mac OS X の場合です。 Windows とかはよくわかりませんが、たぶん同じような設定がどっかにあります。)


最後に、こんなすばらしいライフハックを思いつくきっかけを与えてくれた lifehacker のリダイレクト仕様に感謝します。というか、早く直してください。お願いです。

LifeHacker の運営母体? Gawker Media Tech のサポートサイトでも、Stop redirecting to Japanese site!! 同じような問題が放置されてしまっているようですね。

以下、日本人以外のひと用。


If you are annoyed with the lifehacker redirect problem like this, Stop redirecting to Japanese site!!, this may be a help.

SET FOLLOWING SNIPPET AS A PAC FILE:

Or just use URL to "view raw" link above as "Proxy configuration File" URL.

If you don't have any clue about "pac file", try Proxy auto-config - Wikipedia, or if you use mac, see Apple's support page about pac file.

That's it.