<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>@blog.justoneplanet.info</title>
	<atom:link href="http://blog.justoneplanet.info/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.justoneplanet.info</link>
	<description>日々勉強</description>
	<lastBuildDate>Wed, 16 May 2012 07:42:59 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>AndroidとiOSで端末の地域設定を取得する</title>
		<link>http://blog.justoneplanet.info/2012/05/06/android%e3%81%a8ios%e3%81%a7%e7%ab%af%e6%9c%ab%e3%81%ae%e5%9c%b0%e5%9f%9f%e8%a8%ad%e5%ae%9a%e3%82%92%e5%8f%96%e5%be%97%e3%81%99%e3%82%8b/</link>
		<comments>http://blog.justoneplanet.info/2012/05/06/android%e3%81%a8ios%e3%81%a7%e7%ab%af%e6%9c%ab%e3%81%ae%e5%9c%b0%e5%9f%9f%e8%a8%ad%e5%ae%9a%e3%82%92%e5%8f%96%e5%be%97%e3%81%99%e3%82%8b/#comments</comments>
		<pubDate>Sun, 06 May 2012 10:03:52 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[android]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Objective-C]]></category>

		<guid isPermaLink="false">http://blog.justoneplanet.info/?p=5091</guid>
		<description><![CDATA[■Android Locale.getDefault().toString() ■iOS [[NSLocale currentLocale] localeIdentifier];]]></description>
			<content:encoded><![CDATA[<h3>■Android</h3>
<pre class="brush: java;">
Locale.getDefault().toString()
</pre>
<h3>■iOS</h3>
<pre class="brush: java;">
[[NSLocale currentLocale] localeIdentifier];
</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.justoneplanet.info/2012/05/06/android%e3%81%a8ios%e3%81%a7%e7%ab%af%e6%9c%ab%e3%81%ae%e5%9c%b0%e5%9f%9f%e8%a8%ad%e5%ae%9a%e3%82%92%e5%8f%96%e5%be%97%e3%81%99%e3%82%8b/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AndroidでWebSocket接続する</title>
		<link>http://blog.justoneplanet.info/2012/04/18/android%e3%81%a7websocket%e6%8e%a5%e7%b6%9a%e3%81%99%e3%82%8b/</link>
		<comments>http://blog.justoneplanet.info/2012/04/18/android%e3%81%a7websocket%e6%8e%a5%e7%b6%9a%e3%81%99%e3%82%8b/#comments</comments>
		<pubDate>Wed, 18 Apr 2012 13:13:16 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[android]]></category>

		<guid isPermaLink="false">http://blog.justoneplanet.info/?p=5078</guid>
		<description><![CDATA[素晴らしいライブラリのお陰で5分で接続できる。 ■Activityで使う package info.justoneplanet.android.eew; import java.net.URI; import java. [...]]]></description>
			<content:encoded><![CDATA[<p>素晴らしい<a href="https://github.com/TooTallNate/Java-WebSocket">ライブラリ</a>のお陰で5分で接続できる。</p>
<h3>■Activityで使う</h3>
<pre class="brush: java;">
package info.justoneplanet.android.eew;
import java.net.URI;
import java.net.URISyntaxException;
import org.java_websocket.WebSocketClient;
import org.java_websocket.drafts.Draft_17;
import org.java_websocket.handshake.ServerHandshake;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
public class EarthquakeEarlyWarningActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        try {
            URI uri = new URI(&quot;ws&quot;, null, &quot;123.123.123.123&quot;, 443, &quot;/&quot;, null, null);
            WebSocketClient c = new WebSocketClient(uri, new Draft_17()) {
                @Override
                public void onOpen(ServerHandshake handshakedata) {
                    Log.e(&quot;onOpen&quot;, handshakedata.toString());
                }
                @Override
                public void onMessage(String message) {
                    Log.e(&quot;onMessage&quot;, message);
                }
                @Override
                public void onError(Exception ex) {
                    Log.e(&quot;onError&quot;, ex.toString());
                }
                @Override
                public void onClose(int code, String reason, boolean remote) {
                    Log.e(&quot;onClose&quot;, reason.toString());
                }
            };
            c.connect();
        }
        catch (URISyntaxException e) {
            e.printStackTrace();
        }
   }
}
</pre>
<p>あとは以下のパーミッションを付加する。</p>
<pre class="brush: xml;">
&lt;uses-permission android:name=&quot;android.permission.INTERNET&quot; /&gt;
</pre>
<h3>■AppWidgetなどで使う</h3>
<p>メインスレッド以外で使うには以下のようにする。</p>
<pre class="brush: java;">
package info.justoneplanet.android.eew;

import java.net.URI;
import java.net.URISyntaxException;
import java.util.Random;

import org.java_websocket.WebSocketClient;
import org.java_websocket.drafts.Draft_17;
import org.java_websocket.handshake.ServerHandshake;
import org.json.JSONException;
import org.json.JSONObject;

import android.app.Notification;
import android.app.NotificationManager;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.os.Handler;
import android.os.HandlerThread;
import android.util.Log;
import android.widget.RemoteViews;
import android.widget.Toast;

public class Widget extends AppWidgetProvider {
    private WebSocketClient client;
    private HandlerThread sWorkerThread;
    private Handler sWorkerQueue;
    private Server[] mServers;

    private class Server {
        String host;
        int port;
        public Server(String host, int port) {
            this.host = host;
            this.port = port;
        }
    }

    public Widget() {
        super();
        sWorkerThread = new HandlerThread(&quot;Widget-worker&quot;);
        sWorkerThread.start();
        sWorkerQueue = new Handler(sWorkerThread.getLooper());
        mServers = new Server[]{
                new Server(&quot;123.123.123.123&quot;, 80)
        };
    }

    @Override
    public void onEnabled(final Context context) {
        super.onEnabled(context);
    }

    @Override
    public void onUpdate(final Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
        super.onUpdate(context, appWidgetManager, appWidgetIds);
        Log.e(&quot;onUpdate&quot;, &quot;onUpdate&quot;);
        sWorkerQueue.removeMessages(0);
        try {
            Random rand = new Random();
            Server server = mServers[rand.nextInt(mServers.length) % mServers.length];
            URI uri = new URI(&quot;ws&quot;, null, server.host, server.port, &quot;/&quot;, null, null);
            sWorkerQueue.post(new WebSocketClient(uri, new Draft_17()) {
                private String chunk;
                private RemoteViews remoteViews;

                @Override
                public void onOpen(ServerHandshake handshakedata) {
                    Log.e(&quot;onOpen&quot;, handshakedata.toString());
                    Toast.makeText(context, handshakedata.toString(), Toast.LENGTH_LONG);
                    remoteViews = new RemoteViews(context.getPackageName(), R.layout.main);
                }

                @Override
                public void onMessage(String message) {
                    Log.e(&quot;onMessage&quot;, message);
                    remoteViews.setTextViewText(R.id.info, context.getString(R.string.connected));
                    ComponentName componentName = new ComponentName(context, Widget.class);
                    AppWidgetManager manager = AppWidgetManager.getInstance(context);
                    manager.updateAppWidget(componentName, remoteViews);
                }

                @Override
                public void onError(Exception ex) {
                    Log.e(&quot;onError&quot;, ex.toString());
                    remoteViews.setTextViewText(R.id.info, ex.toString());
                }

                @Override
                public void onClose(int code, String reason, boolean remote) {
                    Log.e(&quot;onClose&quot;, reason);
                    remoteViews.setTextViewText(R.id.info, reason);
                    client.connect();
                }
            });
        }
        catch (URISyntaxException e1) {
            e1.printStackTrace();
        }
    }
}
</pre>
<p>再接続処理とかしないといけない。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.justoneplanet.info/2012/04/18/android%e3%81%a7websocket%e6%8e%a5%e7%b6%9a%e3%81%99%e3%82%8b/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CakePHP2系で認証のユーザーモデルを変更する</title>
		<link>http://blog.justoneplanet.info/2012/04/18/cakephp2%e7%b3%bb%e3%81%a7%e8%aa%8d%e8%a8%bc%e3%81%ae%e3%83%a6%e3%83%bc%e3%82%b6%e3%83%bc%e3%83%a2%e3%83%87%e3%83%ab%e3%82%92%e5%a4%89%e6%9b%b4%e3%81%99%e3%82%8b/</link>
		<comments>http://blog.justoneplanet.info/2012/04/18/cakephp2%e7%b3%bb%e3%81%a7%e8%aa%8d%e8%a8%bc%e3%81%ae%e3%83%a6%e3%83%bc%e3%82%b6%e3%83%bc%e3%83%a2%e3%83%87%e3%83%ab%e3%82%92%e5%a4%89%e6%9b%b4%e3%81%99%e3%82%8b/#comments</comments>
		<pubDate>Tue, 17 Apr 2012 16:08:16 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://blog.justoneplanet.info/?p=5076</guid>
		<description><![CDATA[ログアウト後のログインが上手くできなくてハマったのでメモしておく。 class AppController extends Controller { public $components = array( 'Auth'  [...]]]></description>
			<content:encoded><![CDATA[<p>ログアウト後のログインが上手くできなくてハマったのでメモしておく。</p>
<pre class="brush: php;">
class AppController extends Controller {
    public $components = array(
        'Auth' =&gt; array(
            'loginRedirect' =&gt; array('controller' =&gt; 'hoge', 'action' =&gt; 'index'),
            'loginAction'   =&gt; array('controller' =&gt; 'hoge', 'action' =&gt; 'login'),
            'authenticate'  =&gt; array(
                'Form' =&gt; array(
                    'userModel' =&gt; 'Hoge',
                    'fields' =&gt; array(
                        'username' =&gt; 'email',
                    ),
                    'scope' =&gt; array(
                        'Hoge.is_public' =&gt; 1,
                    ),
                ),
            ),
        ),
        'Session'
    );

    public function beforeFilter() {
        parent::beforeFilter();
    }
}
</pre>
<pre class="brush: php;">
class HogeController extends AppController {
    public function beforeFilter() {
        parent::beforeFilter();
        $this-&gt;Auth-&gt;allow(array('login', 'logout', 'fuga'));// loginとlogoutも記述しておく
    }
    public function login() {
        if ($this-&gt;Auth-&gt;login()) {
            $this-&gt;redirect($this-&gt;Auth-&gt;redirect());
        }
        else {
            $this-&gt;Session-&gt;setFlash(__('Invalid username or password, try again'));
        }
    }
    public function logout() {
        $this-&gt;redirect($this-&gt;Auth-&gt;logout());
    }
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.justoneplanet.info/2012/04/18/cakephp2%e7%b3%bb%e3%81%a7%e8%aa%8d%e8%a8%bc%e3%81%ae%e3%83%a6%e3%83%bc%e3%82%b6%e3%83%bc%e3%83%a2%e3%83%87%e3%83%ab%e3%82%92%e5%a4%89%e6%9b%b4%e3%81%99%e3%82%8b/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>UIWebViewをカスタマイズする</title>
		<link>http://blog.justoneplanet.info/2012/04/13/uiwebview%e3%82%92%e3%82%ab%e3%82%b9%e3%82%bf%e3%83%9e%e3%82%a4%e3%82%ba%e3%81%99%e3%82%8b/</link>
		<comments>http://blog.justoneplanet.info/2012/04/13/uiwebview%e3%82%92%e3%82%ab%e3%82%b9%e3%82%bf%e3%83%9e%e3%82%a4%e3%82%ba%e3%81%99%e3%82%8b/#comments</comments>
		<pubDate>Fri, 13 Apr 2012 02:43:54 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[iOS]]></category>
		<category><![CDATA[Objective-C]]></category>

		<guid isPermaLink="false">http://blog.justoneplanet.info/?p=5073</guid>
		<description><![CDATA[WebViewっぽくならないようにバウンスをさせないようにし、HTTPリクエストにカスタムヘッダーを付加するようにした。たいしてカスタマイズしてない。 #import &#60;UIKit/UIKit.h&#62; @int [...]]]></description>
			<content:encoded><![CDATA[<p>WebViewっぽくならないようにバウンスをさせないようにし、HTTPリクエストにカスタムヘッダーを付加するようにした。たいしてカスタマイズしてない。</p>
<pre class="brush: cpp;">
#import &lt;UIKit/UIKit.h&gt;
@interface CustomWebView : UIWebView
@end
</pre>
<pre class="brush: cpp;">
#import &quot;CustomWebView.h&quot;
@implementation CustomWebView
- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {// Initialization code
        // バウンスさせない
        for (id subview in self.subviews) {
            if ([[subview class] isSubclassOfClass: [UIScrollView class]]) {
                ((UIScrollView *)subview).bounces = NO;
            }
        }
    }
    return self;
}

- (void)loadRequest:(NSURLRequest *)request
{
    // カスタムヘッダーの付加
    NSMutableURLRequest *mutableRequest = (NSMutableURLRequest *)[request mutableCopy];
    [mutableRequest setValue:@&quot;iOS.UIWebView&quot; forHTTPHeaderField:@&quot;App-Client&quot;];
    [super loadRequest:mutableRequest];
}
@end
</pre>
<p>以下のようにオフライン時の画面を表示するメソッドを作ってあげてもいいと思う。</p>
<pre class="brush: cpp;">
- (void)displayOfflineView
{
    if (self) {
        NSString *path = [[NSBundle mainBundle] pathForResource:@&quot;offline&quot; ofType:@&quot;html&quot;];
        [self loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:path]]];
    }
}
</pre>
<p>webviewを表示した時に圏外の場合、圏内になった時にreloadをしても正しく表示ができないので以下のようなメソッドも加えておく。</p>
<pre class="brush: cpp;">
- (void)dealloc
{
    if (initialRequest) {
        [initialRequest release];
    }
    [super dealloc];
}
- (void)reload
{
    if (self) {
        if ([self canGoBack]) {
            [super reload];
        }
        else if (initialRequest) {
            [self loadRequest:initialRequest];
        }
    }
}
- (void)loadRequest:(NSURLRequest *)request
{
    [super loadRequest:request];
    if (!initialRequest) {
        initialRequest = [request retain];
    }
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.justoneplanet.info/2012/04/13/uiwebview%e3%82%92%e3%82%ab%e3%82%b9%e3%82%bf%e3%83%9e%e3%82%a4%e3%82%ba%e3%81%99%e3%82%8b/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>NSURLのURLの各部分に対するアクセス方法を調べてみる</title>
		<link>http://blog.justoneplanet.info/2012/04/12/nsurl%e3%81%aeurl%e3%81%ae%e5%90%84%e9%83%a8%e5%88%86%e3%81%ab%e5%af%be%e3%81%99%e3%82%8b%e3%82%a2%e3%82%af%e3%82%bb%e3%82%b9%e6%96%b9%e6%b3%95%e3%82%92%e8%aa%bf%e3%81%b9%e3%81%a6%e3%81%bf%e3%82%8b/</link>
		<comments>http://blog.justoneplanet.info/2012/04/12/nsurl%e3%81%aeurl%e3%81%ae%e5%90%84%e9%83%a8%e5%88%86%e3%81%ab%e5%af%be%e3%81%99%e3%82%8b%e3%82%a2%e3%82%af%e3%82%bb%e3%82%b9%e6%96%b9%e6%b3%95%e3%82%92%e8%aa%bf%e3%81%b9%e3%81%a6%e3%81%bf%e3%82%8b/#comments</comments>
		<pubDate>Thu, 12 Apr 2012 04:20:28 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[iOS]]></category>
		<category><![CDATA[Objective-C]]></category>

		<guid isPermaLink="false">http://blog.justoneplanet.info/?p=5069</guid>
		<description><![CDATA[分かりやすいものから分かりにくいものまであるのでとりあえずメモしておく。 // http://user:pass@hogehoge.com:1234/dir/d/test.html?q=sample#hoge NSURL [...]]]></description>
			<content:encoded><![CDATA[<p>分かりやすいものから分かりにくいものまであるのでとりあえずメモしておく。</p>
<pre class="brush: cpp;">
// http://user:pass@hogehoge.com:1234/dir/d/test.html?q=sample#hoge
NSURL *url = [request URL];
[url scheme];// http
[url host];// hogehoge.com
[url absoluteString];// http://user:pass@hogehoge.com:1234/dir/d/test.html?q=sample#hoge
[url absoluteURL];// http://user:pass@hogehoge.com:1234/dir/d/test.html?q=sample#hoge
[url baseURL];
[url fragment];// hoge
[url host];// hogehoge.com
[url lastPathComponent];// test.html
[url parameterString];
[url password];// pass
[url path];// /dir/use/test.html
[url pathComponents];// (&quot;/&quot;,dir,d,&quot;test.html&quot;)
[url pathExtension];// html
[url port];// 1234
[url query];// q=sample
[url relativePath];// /dir/use/test.html
[url relativeString];// http://user:pass@hogehoge.com:1234/dir/d/test.html?q=sample#hoge
[url resourceSpecifier];// //user:pass@hogehoge.com:1234/dir/d/test.html?q=sample#hoge
[url standardizedURL];// http://user:pass@hogehoge.com:1234/dir/d/test.html?q=sample#hoge
[url user];// user
</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.justoneplanet.info/2012/04/12/nsurl%e3%81%aeurl%e3%81%ae%e5%90%84%e9%83%a8%e5%88%86%e3%81%ab%e5%af%be%e3%81%99%e3%82%8b%e3%82%a2%e3%82%af%e3%82%bb%e3%82%b9%e6%96%b9%e6%b3%95%e3%82%92%e8%aa%bf%e3%81%b9%e3%81%a6%e3%81%bf%e3%82%8b/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HMAC-MD5を計算する</title>
		<link>http://blog.justoneplanet.info/2012/03/18/hmac-md5%e3%82%92%e8%a8%88%e7%ae%97%e3%81%99%e3%82%8b/</link>
		<comments>http://blog.justoneplanet.info/2012/03/18/hmac-md5%e3%82%92%e8%a8%88%e7%ae%97%e3%81%99%e3%82%8b/#comments</comments>
		<pubDate>Sun, 18 Mar 2012 14:49:20 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[android]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Objective-C]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://blog.justoneplanet.info/?p=5055</guid>
		<description><![CDATA[■PHP hash_hmac('md5', $str, 'hogehogehoge'); ■Android public class HmacMD5 { private static final String ALGOR [...]]]></description>
			<content:encoded><![CDATA[<h3>■PHP</h3>
<pre class="brush: php;">
hash_hmac('md5', $str, 'hogehogehoge');
</pre>
<h3>■Android</h3>
<pre class="brush: java;">
public class HmacMD5 {
    private static final String ALGORISM = &quot;HmacMD5&quot;;
    private static final String S = &quot;hogehogehoge&quot;;
    public static String get(String str) {
        SecretKeySpec secretKeySpec = new SecretKeySpec(S.getBytes(), ALGORISM);
        try {
            Mac mac = Mac.getInstance(ALGORISM);
            mac.init(secretKeySpec);
            byte[] result = mac.doFinal(str.getBytes());
            return byteToString(result);
        }
        catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        catch (InvalidKeyException e) {
            e.printStackTrace();
        }
        return &quot;&quot;;
    }

    private static String byteToString(byte [] b) {
        StringBuffer buffer = new StringBuffer();
        for (int i = 0; i &lt; b.length; i++) {
            int d = b[i];
            d += (d &lt; 0)? 256 : 0;
            if (d &lt; 16) {
                buffer.append(&quot;0&quot;);
            }
            buffer.append(Integer.toString(d, 16));
        }
        return buffer.toString();
    }
}
</pre>
<h3>■iOS</h3>
<p>日本語入力に対応するためにstackoverflowから持ってきたコードに少々手を入れた。</p>
<pre class="brush: cpp;">
+ (NSString *)HMACMD5WithKey:(NSString *)data
{
    const char *cKey  = [@&quot;hogehogehoge&quot; cStringUsingEncoding:NSUTF8StringEncoding];
    const char *cData = [data cStringUsingEncoding:NSUTF8StringEncoding];
    const unsigned int blockSize = 64;
    char ipad[blockSize];
    char opad[blockSize];
    char keypad[blockSize];

    unsigned int keyLen = strlen(cKey);
    CC_MD5_CTX ctxt;
    if (keyLen &gt; blockSize) {
        CC_MD5_Init(&amp;ctxt);
        CC_MD5_Update(&amp;ctxt, cKey, keyLen);
        CC_MD5_Final((unsigned char *)keypad, &amp;ctxt);
        keyLen = CC_MD5_DIGEST_LENGTH;
    }
    else {
        memcpy(keypad, cKey, keyLen);
    }

    memset(ipad, 0x36, blockSize);
    memset(opad, 0x5c, blockSize);

    int i;
    for (i = 0; i &lt; keyLen; i++) {
        ipad[i] ^= keypad[i];
        opad[i] ^= keypad[i];
    }

    CC_MD5_Init(&amp;ctxt);
    CC_MD5_Update(&amp;ctxt, ipad, blockSize);
    CC_MD5_Update(&amp;ctxt, cData, strlen(cData));
    unsigned char md5[CC_MD5_DIGEST_LENGTH];
    CC_MD5_Final(md5, &amp;ctxt);

    CC_MD5_Init(&amp;ctxt);
    CC_MD5_Update(&amp;ctxt, opad, blockSize);
    CC_MD5_Update(&amp;ctxt, md5, CC_MD5_DIGEST_LENGTH);
    CC_MD5_Final(md5, &amp;ctxt);

    const unsigned int hex_len = CC_MD5_DIGEST_LENGTH*2+2;
    char hex[hex_len];
    for(i = 0; i &lt; CC_MD5_DIGEST_LENGTH; i++) {
        snprintf(&amp;hex[i*2], hex_len-i*2, &quot;%02x&quot;, md5[i]);
    }

    NSData *HMAC = [[NSData alloc] initWithBytes:hex length:strlen(hex)];
    NSString *hash = [[[NSString alloc] initWithData:HMAC encoding:NSUTF8StringEncoding] autorelease];
    [HMAC release];
    return hash;
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.justoneplanet.info/2012/03/18/hmac-md5%e3%82%92%e8%a8%88%e7%ae%97%e3%81%99%e3%82%8b/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ZXingをXcodeプロジェクトに組み込む</title>
		<link>http://blog.justoneplanet.info/2012/03/04/zxing%e3%82%92xcode%e3%83%97%e3%83%ad%e3%82%b8%e3%82%a7%e3%82%af%e3%83%88%e3%81%ab%e7%b5%84%e3%81%bf%e8%be%bc%e3%82%80/</link>
		<comments>http://blog.justoneplanet.info/2012/03/04/zxing%e3%82%92xcode%e3%83%97%e3%83%ad%e3%82%b8%e3%82%a7%e3%82%af%e3%83%88%e3%81%ab%e7%b5%84%e3%81%bf%e8%be%bc%e3%82%80/#comments</comments>
		<pubDate>Sun, 04 Mar 2012 05:21:46 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[iOS]]></category>
		<category><![CDATA[Objective-C]]></category>

		<guid isPermaLink="false">http://blog.justoneplanet.info/?p=5039</guid>
		<description><![CDATA[■組込 zxing-x.x/iphone/ZXingWidget/を自身のプロジェクトのプロジェクトナビゲーターにドロップする。 Targets &#62; Build Phases Target Dependencies [...]]]></description>
			<content:encoded><![CDATA[<h3>■組込</h3>
<p>zxing-x.x/iphone/ZXingWidget/を自身のプロジェクトのプロジェクトナビゲーターにドロップする。</p>
<h4>Targets &gt; Build Phases</h4>
<p>Target DependenciesでZXingWidgetを追加した後、Link Binary With Librariesで以下を追加する。</p>
<ul>
<li>libZXingWidget.a</li>
<li>libiconv.dylib</li>
<li>CoreMedia.framework</li>
<li>CoreVideo.framework</li>
<li>AVFoundation.framework</li>
<li>AudioToolbox.framework</li>
<li>AddressBook.framework</li>
<li>AddressBookUI.framework</li>
<li>CoreGraphics.framework</li>
</ul>
<h4>Project &gt; Build Settings</h4>
<p>Header Search Pathsに以下の項目を追加する。</p>
<ul>
<li>/User/[your name]/zxing-x.x/iphone/ZXingWidget/Classes</li>
<li>/User/[your name]/zxing-x.x/cpp/core/src</li>
</ul>
<p>前者はrecursiveにチェックを入れて、後者はチェックを入れない。</p>
<section class="kakomi">
<h4>参考</h4>
<ul>
<li><a href="http://yannickloriot.com/2011/04/how-to-install-zxing-in-xcode-4/">How to install ZXing in Xcode 4</a></li>
<li><a href="http://groups.google.com/group/zxing/browse_thread/thread/0fa354fd57225171">cpp/core/src/zxing/common/Coun ted.h:26:20: error: iostream: No such file or directory</a></li>
<li><a href="http://code.google.com/p/zxing/w/list">zxing</a></li>
</ul>
</section>
<h3>■実装</h3>
<h4>ScanViewController.h</h4>
<pre class="brush: cpp;">
#import &lt;UIKit/UIKit.h&gt;
#import &quot;ZXingWidgetController.h&quot;

@interface ScanViewController : UIViewController&lt;ZXingDelegate&gt;{
    UITextView *resultView;
    NSString *resultStr;
}
@property (nonatomic, retain) UITextView *resultView;
@property (nonatomic, copy) NSString *resultStr;
- (void)scanPressed:(id)sender;
@end
</pre>
<h4>ScanViewController.mm</h4>
<p>ファイルの拡張子を.mmとしないとコンパイルできない。</p>
<pre class="brush: cpp;">
#import &quot;ScanViewController.h&quot;
#import &quot;QRCodeReader.h&quot;

@implementation ScanViewController
@synthesize resultView;
@synthesize resultStr;

- (void)scanPressed:(id)sender
{
    ZXingWidgetController *widController = [[ZXingWidgetController alloc] initWithDelegate:self showCancel:YES OneDMode:NO];
    QRCodeReader* qrcodeReader = [[QRCodeReader alloc] init];
    NSSet *readers = [[NSSet alloc ] initWithObjects:qrcodeReader,nil];
    [qrcodeReader release];
    widController.readers = readers;
    [readers release];

    [self presentModalViewController:widController animated:YES];
    [widController release];
}
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
    }
    return self;
}
- (void)dealloc {
    [resultView release];
}

#pragma mark - View lifecycle
- (void)loadView
{
    [super loadView];

    UIButton *btnStamp = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    [btnStamp setFrame:CGRectMake(40, 220, 240, 50)];
    [btnStamp setTitle:@&quot;QRコードを読み取る&quot; forState:UIControlStateNormal];
    [btnStamp setTag:1];
    [btnStamp addTarget:self action:@selector(scanPressed:) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:btnStamp];

    resultView = [[UITextView alloc] initWithFrame:CGRectMake(40 , 280, 240, 50)];
    [self.view addSubview:resultView];
}
- (void)viewDidUnload
{
    [super viewDidUnload];
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

#pragma mark -
#pragma mark ZXingDelegateMethods
- (void)zxingController:(ZXingWidgetController*)controller didScanResult:(NSString *)result {
    self.resultStr = result;
    if (self.isViewLoaded) {
        [resultView setText:resultStr];
        [resultView setNeedsDisplay];
    }
    [self dismissModalViewControllerAnimated:NO];
}
- (void)zxingControllerDidCancel:(ZXingWidgetController*)controller {
    [self dismissModalViewControllerAnimated:YES];
}
@end
</pre>
<p>こんな感じで。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.justoneplanet.info/2012/03/04/zxing%e3%82%92xcode%e3%83%97%e3%83%ad%e3%82%b8%e3%82%a7%e3%82%af%e3%83%88%e3%81%ab%e7%b5%84%e3%81%bf%e8%be%bc%e3%82%80/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AccessoryViewをカスタマイズする</title>
		<link>http://blog.justoneplanet.info/2012/02/26/accessoryview%e3%82%92%e3%82%ab%e3%82%b9%e3%82%bf%e3%83%9e%e3%82%a4%e3%82%ba%e3%81%99%e3%82%8b/</link>
		<comments>http://blog.justoneplanet.info/2012/02/26/accessoryview%e3%82%92%e3%82%ab%e3%82%b9%e3%82%bf%e3%83%9e%e3%82%a4%e3%82%ba%e3%81%99%e3%82%8b/#comments</comments>
		<pubDate>Sun, 26 Feb 2012 14:26:53 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[iOS]]></category>
		<category><![CDATA[Objective-C]]></category>

		<guid isPermaLink="false">http://blog.justoneplanet.info/?p=5037</guid>
		<description><![CDATA[setAccessoryViewしただけだとタップした時にaccessoryButtonTappedForRowWithIndexPathが発火しなくなるので以下のようにする。 // create cell - (UIT [...]]]></description>
			<content:encoded><![CDATA[<p>setAccessoryViewしただけだとタップした時にaccessoryButtonTappedForRowWithIndexPathが発火しなくなるので以下のようにする。</p>
<pre class="brush: cpp;">
// create cell
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    // call cell
    UITableViewCellFixed *cell = (UITableViewCellFixed *)[tableView dequeueReusableCellWithIdentifier:@&quot;table_cell&quot;];
    if (cell == nil) {// create cell
        cell = [[[UITableViewCellFixed alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@&quot;table_cell&quot;] autorelease];
    }

    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
    [button setFrame:CGRectMake(0, 0, 26, 26)];
    [button setBackgroundImage:[UIImage imageNamed:@&quot;arrow.png&quot;] forState:UIControlStateNormal];
    [button setBackgroundColor:[UIColor clearColor]];
    [button addTarget:self action:@selector(accessoryButtonTapped:withEvent:) forControlEvents:UIControlEventTouchUpInside];
    [cell setAccessoryView:button];
    return cell;
}
- (void)accessoryButtonTapped:(UIControl *)button withEvent:(UIEvent *)event
{
    NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:[[[event touchesForView: button] anyObject] locationInView:self.tableView]];
    if (indexPath == nil) {
        return;
    }
    [self.tableView.delegate tableView: self.tableView accessoryButtonTappedForRowWithIndexPath:indexPath];
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.justoneplanet.info/2012/02/26/accessoryview%e3%82%92%e3%82%ab%e3%82%b9%e3%82%bf%e3%83%9e%e3%82%a4%e3%82%ba%e3%81%99%e3%82%8b/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>EC2にexpressを入れる</title>
		<link>http://blog.justoneplanet.info/2012/02/26/ec2%e3%81%abexpress%e3%82%92%e5%85%a5%e3%82%8c%e3%82%8b/</link>
		<comments>http://blog.justoneplanet.info/2012/02/26/ec2%e3%81%abexpress%e3%82%92%e5%85%a5%e3%82%8c%e3%82%8b/#comments</comments>
		<pubDate>Sun, 26 Feb 2012 06:13:10 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[サーバーサイド]]></category>

		<guid isPermaLink="false">http://blog.justoneplanet.info/?p=5028</guid>
		<description><![CDATA[■インストール yum install openssl-devel gcc-c++ make#前準備 wget http://nodejs.org/dist/v0.6.11/node-v0.6.11.tar.gz tar [...]]]></description>
			<content:encoded><![CDATA[<h3>■インストール</h3>
<pre class="brush: bash;">
yum install openssl-devel gcc-c++ make#前準備
wget http://nodejs.org/dist/v0.6.11/node-v0.6.11.tar.gz
tar xvzf node-v0.6.11.tar.gz
cd node-v0.6.11
./configure
make
make install
curl http://npmjs.org/install.sh | sh
npm install -g express
express sample
cd sample
npm install
</pre>
<h4>./app.js</h4>
<p>たまたま80番開いていたので以下のようにして80番で繋がるようにする。</p>
<pre class="brush: jscript;">
/**
 * Module dependencies.
 */

var express = require('express')
  , routes = require('./routes');

var app = module.exports = express.createServer();

// Configuration

app.configure(function(){
  app.set('views', __dirname + '/views');
  app.set('view engine', 'jade');
  app.use(express.bodyParser());
  app.use(express.methodOverride());
  app.use(app.router);
  app.use(express.static(__dirname + '/public'));
});

app.configure('development', function(){
  app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});

app.configure('production', function(){
  app.use(express.errorHandler());
});

// Routes

app.get('/', routes.index);

app.listen(80);
console.log(&quot;Express server listening on port %d in %s mode&quot;, app.address().port, app.settings.env);
</pre>
<h3>■起動</h3>
<pre class="brush: bash;">
node app.js
</pre>
<p>http://ec2-123-123-123-123.ap-northeast-1.compute.amazonaws.com/などで自分のインスタンスにアクセスすれば見れる。</p>
<h3>■socket.ioを使う</h3>
<h4>./package.json</h4>
<p>以下のように編集する。</p>
<pre class="brush: jscript;">
{
    &quot;name&quot;: &quot;application-name&quot;
  , &quot;version&quot;: &quot;0.0.1&quot;
  , &quot;private&quot;: true
  , &quot;dependencies&quot;: {
      &quot;express&quot;: &quot;2.5.8&quot;
    , &quot;jade&quot;: &quot;&gt;= 0.0.1&quot;
    , &quot;socket.io&quot;: &quot;*&quot;
  }
}
</pre>
<p>./sampleで以下のコマンドを実行する。</p>
<pre class="brush: bash;">
npm install
</pre>
<h4>./app.js</h4>
<p>サーバー側のコードをapp.jsの最後尾に付加する。</p>
<pre class="brush: jscript;">
var io = socketio.listen(app)
   ,count = 0;
io.sockets.on('connection', function(socket){
  count++;
  io.sockets.emit('count change', count);
  socket.on('disconnect', function() {
    count--;
    socket.broadcast.emit('count change', count);
  }
  );
});
</pre>
<h4>./views/layout.jade</h4>
<p>クライアント側の処理を書き加える。</p>
<pre class="brush: plain;">
!!!
html
  head
    title= title
    link(rel='stylesheet', href='/stylesheets/style.css')
    script(type='text/javascript', src='http://code.jquery.com/jquery.min.js')
    script(type='text/javascript', src='/socket.io/socket.io.js')
    script(type='text/javascript')
      var socket = io.connect();
      socket.on('count change', function(count) {
        $('#count').text(count);
      });
  body!= body
</pre>
<h4>./views/index.jade</h4>
<p>表示用に要素を追加する。</p>
<pre class="brush: plain;">
#page
  #headerArea
    h1= title
    p Welcome to #{title}
    p 現在このページを見ている人は
    span#count
    人います。
</pre>
<h3>■ejsを使う</h3>
<p>既存のhtmlコードを使用するときにhamlにするのは手間なのでejsを使う。</p>
<h4>./package.json</h4>
<p>以下のように編集する。</p>
<pre class="brush: jscript;">
{
    &quot;name&quot;: &quot;application-name&quot;
  , &quot;version&quot;: &quot;0.0.1&quot;
  , &quot;private&quot;: true
  , &quot;dependencies&quot;: {
      &quot;express&quot;: &quot;2.5.8&quot;
    , &quot;jade&quot;: &quot;&gt;= 0.0.1&quot;
    , &quot;socket.io&quot;: &quot;*&quot;
    , &quot;ejs&quot;: &quot;*&quot;
  }
}
</pre>
<h4>./app.js</h4>
<p>以下のようにして、テンプレートエンジンをjadeからejsに変更する。</p>
<pre class="brush: jscript;">
/**
 * Module dependencies.
 */

var express  = require('express')
  , socketio = require('socket.io')
  , ejs      = require('ejs')
  , routes   = require('./routes');

var app = module.exports = express.createServer();

// Configuration

app.configure(function(){
  app.set('views', __dirname + '/views');
  app.set('view engine', 'ejs');
  app.set('view options', {layout : false});
  app.use(express.bodyParser());
  app.use(express.methodOverride());
  app.use(app.router);
  app.use(express.static(__dirname + '/public'));
});
</pre>
<p>せっかくなんでルーティングも変更してみる。</p>
<pre class="brush: jscript;">
app.get('/', routes.index);
app.get('/hoge', function(req, res) {
  res.render('hoge.ejs', { title: 'My Site' });
});
</pre>
<section class="kakomi">
<h4>参考</h4>
<ul>
<li><a href="http://expressjs.com/guide.html">express &#8211; guide</a></li>
</ul>
</section>
<h4>./views/hoge.ejs</h4>
<p>あとは以下のようにテンプレートファイルを用意する。</p>
<pre class="brush: jscript;">
&lt;!DOCTYPE html&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;
&lt;head&gt;
&lt;meta charset=&quot;UTF-8&quot; /&gt;
&lt;title&gt;&lt;%= title %&gt;&lt;/title&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;http://code.jquery.com/jquery.min.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;/socket.io/socket.io.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
var socket = io.connect();
socket.on('count change', function(count) {
    $('#count').text(count);
});
&lt;/script&gt;
&lt;/head&gt;

&lt;body&gt;
&lt;h1&gt;&lt;%= title %&gt;&lt;/h1&gt;
&lt;p&gt;現在このページを見ている人は&lt;span id=&quot;count&quot;&gt;&lt;/span&gt;人います。&lt;/p&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>以下のようなURLでアクセスができるようになる。</p>
<pre class="brush: plain;">

http://ec2-123-123-123-123.ap-northeast-1.compute.amazonaws.com/hoge
</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.justoneplanet.info/2012/02/26/ec2%e3%81%abexpress%e3%82%92%e5%85%a5%e3%82%8c%e3%82%8b/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>fragmentに値を渡す</title>
		<link>http://blog.justoneplanet.info/2012/02/18/fragment%e3%81%ab%e5%80%a4%e3%82%92%e6%b8%a1%e3%81%99/</link>
		<comments>http://blog.justoneplanet.info/2012/02/18/fragment%e3%81%ab%e5%80%a4%e3%82%92%e6%b8%a1%e3%81%99/#comments</comments>
		<pubDate>Sat, 18 Feb 2012 08:20:30 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[android]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://blog.justoneplanet.info/?p=5025</guid>
		<description><![CDATA[■渡す側 FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction(); SearchFragment fra [...]]]></description>
			<content:encoded><![CDATA[<h3>■渡す側</h3>
<pre class="brush: java;">
FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction();

SearchFragment fragment = (SearchFragment) Fragment.instantiate(getActivity(), SearchFragment.class.getName(), null);
Bundle bundle = new Bundle();
bundle.putString(&quot;word&quot;, word);
fragment.setArguments(bundle);

ft.replace(R.id.content, fragment).addToBackStack(&quot;result&quot;);
ft.commit();
getActivity().getSupportFragmentManager().executePendingTransactions();
</pre>
<h3>■受け取り側</h3>
<pre class="brush: java;">
mWord = getArguments().getString(&quot;word&quot;);
</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.justoneplanet.info/2012/02/18/fragment%e3%81%ab%e5%80%a4%e3%82%92%e6%b8%a1%e3%81%99/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SimpleCursorAdapterを元に作ったListViewにfilterを付加する</title>
		<link>http://blog.justoneplanet.info/2012/02/15/simplecursoradapter%e3%82%92%e5%85%83%e3%81%ab%e4%bd%9c%e3%81%a3%e3%81%9flistview%e3%81%abfilter%e3%82%92%e4%bb%98%e5%8a%a0%e3%81%99%e3%82%8b/</link>
		<comments>http://blog.justoneplanet.info/2012/02/15/simplecursoradapter%e3%82%92%e5%85%83%e3%81%ab%e4%bd%9c%e3%81%a3%e3%81%9flistview%e3%81%abfilter%e3%82%92%e4%bb%98%e5%8a%a0%e3%81%99%e3%82%8b/#comments</comments>
		<pubDate>Wed, 15 Feb 2012 14:06:43 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[android]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://blog.justoneplanet.info/?p=5022</guid>
		<description><![CDATA[以下のように実装しているとする。 mListView.setTextFilterEnabled(true); mAdapter = new SimpleCursorAdapter( getActivity().getAp [...]]]></description>
			<content:encoded><![CDATA[<p>以下のように実装しているとする。</p>
<pre class="brush: java;">
mListView.setTextFilterEnabled(true);
mAdapter = new SimpleCursorAdapter(
        getActivity().getApplicationContext(),
        R.layout.list,
        null,
        new String[]{Helper.FACE, Helper.TAG},
        new int[]{R.id.list_face, R.id.list_tag}
);
mListView.setListAdapter(mAdapter);
</pre>
<p>以下のようにして表示されているリストをフィルタリングする。</p>
<pre class="brush: java;">
public void onTextChanged(CharSequence s, int start, int before, int count) {
    mListView.setFilterText(s.toString);
}
</pre>
<p>これだけでは上手く動作しない。</p>
<h3>■解決策</h3>
<p>adapterをListViewにセットする前に以下のように記述する必要がある。</p>
<pre class="brush: java;">
mAdapter.setFilterQueryProvider(new FilterQueryProvider() {
    @Override
    public Cursor runQuery(CharSequence constraint) {
        String word = &quot;%&quot; + constraint.toString() + &quot;%&quot;;
        Cursor cursor = getActivity().managedQuery(
            Provider.URI,
            new String[]{Helper.ID, Helper.FACE, Helper.TAG, Helper.CREATED},
            &quot;`&quot; + Helper.FACE + &quot;` LIKE ? OR `&quot; + Helper.TAG + &quot;` LIKE ?&quot;,
            new String[]{word, word},
            Helper.CREATED + &quot; DESC&quot;
        );
        return cursor;
    }
});
</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.justoneplanet.info/2012/02/15/simplecursoradapter%e3%82%92%e5%85%83%e3%81%ab%e4%bd%9c%e3%81%a3%e3%81%9flistview%e3%81%abfilter%e3%82%92%e4%bb%98%e5%8a%a0%e3%81%99%e3%82%8b/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Honeycomb以降でcursorを扱う</title>
		<link>http://blog.justoneplanet.info/2012/02/13/honeycomb%e4%bb%a5%e9%99%8d%e3%81%a7cursor%e3%82%92%e6%89%b1%e3%81%86/</link>
		<comments>http://blog.justoneplanet.info/2012/02/13/honeycomb%e4%bb%a5%e9%99%8d%e3%81%a7cursor%e3%82%92%e6%89%b1%e3%81%86/#comments</comments>
		<pubDate>Mon, 13 Feb 2012 13:54:21 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[android]]></category>

		<guid isPermaLink="false">http://blog.justoneplanet.info/?p=5019</guid>
		<description><![CDATA[startManagingCursorはdeprecatedになったので、Honeycomb以降のandroidでは以下のような例外が発生する。 java.lang.RuntimeException: Unable to [...]]]></description>
			<content:encoded><![CDATA[<p>startManagingCursorはdeprecatedになったので、Honeycomb以降のandroidでは以下のような例外が発生する。</p>
<pre class="brush: plain;">
java.lang.RuntimeException: Unable to resume activity
java.lang.IllegalStateException: trying to requery an already closed cursor android.database.sqlite.SQLiteCursor@40740c58
</pre>
<p>LoaderManagerとCursorLoaderを使うか、自前でcursor.close()を呼び出すかしなければならない。</p>
<h4>参考</h4>
<ul>
<li><a href="http://stackoverflow.com/questions/7603647/a-few-questions-about-sqlite-database-cursors-in-android">A few questions about SQLite database cursors in Android</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.justoneplanet.info/2012/02/13/honeycomb%e4%bb%a5%e9%99%8d%e3%81%a7cursor%e3%82%92%e6%89%b1%e3%81%86/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

