<?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>ぱんぴーまっしぐら</title>
	<atom:link href="http://blog.cheki.net/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.cheki.net</link>
	<description>悲しみの果てに</description>
	<lastBuildDate>Tue, 24 Apr 2012 05:28:13 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>GoogleIMEの設定</title>
		<link>http://blog.cheki.net/archives/2367</link>
		<comments>http://blog.cheki.net/archives/2367#comments</comments>
		<pubDate>Tue, 24 Apr 2012 05:28:13 +0000</pubDate>
		<dc:creator>cockok</dc:creator>
				<category><![CDATA[日記]]></category>

		<guid isPermaLink="false">http://blog.cheki.net/?p=2367</guid>
		<description><![CDATA[SSHを介してVimを使う人に感動的なESCキーを押すとESCキーが効きつつIMEがオフになる設定(Google日本語入力とVimの相性は最強！) &#8211; しふーのブログ ことえりからインポートした設定＋上記の設 [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://d.hatena.ne.jp/sifue/20120411/1334161078">SSHを介してVimを使う人に感動的なESCキーを押すとESCキーが効きつつIMEがオフになる設定(Google日本語入力とVimの相性は最強！) &#8211; しふーのブログ</a></p>
<p>ことえりからインポートした設定＋上記の設定をエクスポートした内容。<br />
エクスポートファイルのデフォルトのファイル名はkeymap.txt</p>
<pre>
status	key	command
Composition	Backspace	Backspace
Composition	Ctrl ;	DisplayAsHalfWidth
Composition	Ctrl :	DisplayAsHalfAlphanumeric
Composition	Ctrl '	DisplayAsHalfAlphanumeric
Composition	Ctrl 0	DisplayAsHalfAlphanumeric
Composition	Ctrl 2	ConvertWithoutHistory
Composition	Ctrl 6	DisplayAsHiragana
Composition	Ctrl 7	DisplayAsFullKatakana
Composition	Ctrl 8	DisplayAsHalfWidth
Composition	Ctrl 9	DisplayAsFullAlphanumeric
Composition	Ctrl a	MoveCursorToBeginning
Composition	Ctrl b	MoveCursorLeft
Composition	Ctrl d	Delete
Composition	Ctrl e	MoveCursorToEnd
Composition	Ctrl Eisu	ToggleAlphanumericMode
Composition	Ctrl f	MoveCursorRight
Composition	Ctrl g	Cancel
Composition	Ctrl h	Backspace
Composition	Ctrl j	DisplayAsHiragana
Composition	Ctrl k	DisplayAsFullKatakana
Composition	Ctrl l	DisplayAsFullAlphanumeric
Composition	Ctrl Left	MoveCursorToBeginning
Composition	Ctrl m	Commit
Composition	Ctrl m	Commit
Composition	Ctrl Option 1	DisplayAsHiragana
Composition	Ctrl Option 2	DisplayAsFullKatakana
Composition	Ctrl Option 3	DisplayAsFullAlphanumeric
Composition	Ctrl Option 4	DisplayAsHalfWidth
Composition	Ctrl Option 5	DisplayAsHalfAlphanumeric
Composition	Ctrl Right	MoveCursorToEnd
Composition	Delete	Delete
Composition	Eisu	ToggleAlphanumericMode
Composition	Enter	Commit
Composition	ESC	Cancel
Composition	F10	DisplayAsHalfAlphanumeric
Composition	F2	ConvertWithoutHistory
Composition	F6	DisplayAsHiragana
Composition	F7	DisplayAsFullKatakana
Composition	F8	DisplayAsHalfKatakana
Composition	F9	DisplayAsFullAlphanumeric
Composition	Left	MoveCursorLeft
Composition	Option a	DisplayAsHalfWidth
Composition	Option c	DisplayAsFullAlphanumeric
Composition	Option F1	DisplayAsHiragana
Composition	Option F2	DisplayAsFullKatakana
Composition	Option F3	DisplayAsFullAlphanumeric
Composition	Option F4	DisplayAsHalfWidth
Composition	Option F5	DisplayAsHalfAlphanumeric
Composition	Option j	MoveCursorLeft
Composition	Option l	MoveCursorRight
Composition	Option s	DisplayAsHalfAlphanumeric
Composition	Option Space	InsertFullSpace
Composition	Option x	DisplayAsFullKatakana
Composition	Option z	DisplayAsHiragana
Composition	Right	MoveCursorRight
Composition	Space	Convert
Composition	Tab	PredictAndConvert
Conversion	Backspace	Cancel
Conversion	Ctrl ;	DisplayAsHalfWidth
Conversion	Ctrl :	DisplayAsHalfAlphanumeric
Conversion	Ctrl '	DisplayAsHalfAlphanumeric
Conversion	Ctrl 0	DisplayAsHalfAlphanumeric
Conversion	Ctrl 6	DisplayAsHiragana
Conversion	Ctrl 7	DisplayAsFullKatakana
Conversion	Ctrl 8	DisplayAsHalfWidth
Conversion	Ctrl 9	DisplayAsFullAlphanumeric
Conversion	Ctrl a	SegmentFocusFirst
Conversion	Ctrl b	SegmentFocusLeft
Conversion	Ctrl d	SegmentFocusRight
Conversion	Ctrl e	ConvertPrev
Conversion	Ctrl f	SegmentFocusRight
Conversion	Ctrl h	Cancel
Conversion	Ctrl i	SegmentWidthShrink
Conversion	Ctrl j	DisplayAsHiragana
Conversion	Ctrl k	DisplayAsFullKatakana
Conversion	Ctrl l	DisplayAsFullAlphanumeric
Conversion	Ctrl Left	SegmentFocusFirst
Conversion	Ctrl m	Commit
Conversion	Ctrl n	ConvertNext
Conversion	Ctrl o	SegmentWidthExpand
Conversion	Ctrl Option 1	DisplayAsHiragana
Conversion	Ctrl Option 2	DisplayAsFullKatakana
Conversion	Ctrl Option 3	DisplayAsFullAlphanumeric
Conversion	Ctrl Option 4	DisplayAsHalfWidth
Conversion	Ctrl Option 5	DisplayAsHalfAlphanumeric
Conversion	Ctrl p	ConvertPrev
Conversion	Ctrl q	SegmentWidthShrink
Conversion	Ctrl Right	SegmentFocusLast
Conversion	Ctrl s	SegmentFocusLeft
Conversion	Ctrl w	SegmentWidthExpand
Conversion	Ctrl x	ConvertNext
Conversion	Down	ConvertNext
Conversion	Enter	Commit
Conversion	ESC	Cancel
Conversion	F10	DisplayAsHalfAlphanumeric
Conversion	F6	DisplayAsHiragana
Conversion	F7	DisplayAsFullKatakana
Conversion	F8	DisplayAsHalfWidth
Conversion	F9	DisplayAsFullAlphanumeric
Conversion	Left	SegmentFocusLeft
Conversion	Option a	DisplayAsHalfWidth
Conversion	Option c	DisplayAsFullAlphanumeric
Conversion	Option F1	DisplayAsHiragana
Conversion	Option F2	DisplayAsFullKatakana
Conversion	Option F3	DisplayAsFullAlphanumeric
Conversion	Option F4	DisplayAsHalfWidth
Conversion	Option F5	DisplayAsHalfAlphanumeric
Conversion	Option i	ConvertPrev
Conversion	Option k	ConvertNext
Conversion	Option s	DisplayAsHalfAlphanumeric
Conversion	Option x	DisplayAsFullKatakana
Conversion	Option z	DisplayAsHiragana
Conversion	PageDown	ConvertNextPage
Conversion	PageUp	ConvertPrevPage
Conversion	Right	SegmentFocusRight
Conversion	Shift Down	ConvertNextPage
Conversion	Shift Left	SegmentWidthShrink
Conversion	Shift Right	SegmentWidthExpand
Conversion	Shift Space	ConvertPrev
Conversion	Shift Tab	ConvertPrev
Conversion	Shift Up	ConvertPrevPage
Conversion	Space	ConvertNext
Conversion	Tab	PredictAndConvert
Conversion	Up	ConvertPrev
DirectInput	Ctrl Shift r	Reconvert
Precomposition	Backspace	Revert
Precomposition	Ctrl Backspace	Undo
Precomposition	Ctrl Eisu	ToggleAlphanumericMode
Precomposition	Ctrl Shift r	Reconvert
Precomposition	Eisu	ToggleAlphanumericMode
Precomposition	Shift Space	InsertAlternateSpace
Precomposition	Space	InsertSpace
Suggestion	Ctrl n	PredictAndConvert
Suggestion	Down	PredictAndConvert
Suggestion	Shift Enter	CommitFirstSuggestion
DirectInput	Escape	CancelAndIMEOff
Precomposition	Escape	CancelAndIMEOff
Composition	Escape	CancelAndIMEOff
Conversion	Escape	CancelAndIMEOff
Suggestion	Escape	CancelAndIMEOff
Prediction	Escape	CancelAndIMEOff
Composition	Hankaku/Zenkaku	IMEOff
Composition	Kanji	IMEOff
Composition	OFF	IMEOff
Composition	ON	IMEOn
Conversion	Hankaku/Zenkaku	IMEOff
Conversion	Kanji	IMEOff
Conversion	OFF	IMEOff
Conversion	ON	IMEOn
DirectInput	Hankaku/Zenkaku	IMEOn
DirectInput	Kanji	IMEOn
DirectInput	ON	IMEOn
Precomposition	Hankaku/Zenkaku	IMEOff
Precomposition	Kanji	IMEOff
Precomposition	OFF	IMEOff
Precomposition	ON	IMEOn
</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.cheki.net/archives/2367/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>twitter日本語ハッシュタグの対応</title>
		<link>http://blog.cheki.net/archives/2364</link>
		<comments>http://blog.cheki.net/archives/2364#comments</comments>
		<pubDate>Wed, 13 Jul 2011 02:39:08 +0000</pubDate>
		<dc:creator>cockok</dc:creator>
				<category><![CDATA[日記]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://blog.cheki.net/?p=2364</guid>
		<description><![CDATA[Twitterブログ: ＃日本語ハッシュタグ こちらの対応。 以前はハッシュタグの対応に正規表現を利用していたかと思いますが、最近はstatusからハッシュタグ情報がとれます。 GET statuses/show/:id [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.jp.twitter.com/2011/07/blog-post.html">Twitterブログ: ＃日本語ハッシュタグ</a><br />
こちらの対応。</p>
<p>以前はハッシュタグの対応に正規表現を利用していたかと思いますが、最近はstatusからハッシュタグ情報がとれます。<br />
<a href="https://dev.twitter.com/docs/api/1/get/statuses/show/%3Aid">GET statuses/show/:id | Twitter Developers</a><br />
include_entities=trueでhashtagsがとれてその中にハッシュタグ情報が。</p>
<p>APIのバグかと思われますが、「ー」で終了しているタグがhashtagsにはいってきません。<br />
<a href="http://api.twitter.com/1/statuses/show/90961863306772481.xml?include_entities=true">api.twitter.com/1/statuses/show/90961863306772481.xml?include_entities=true</a><br />
バグレポートすればそのうち直るのかな。</p>
<p>searchAPIにはそもそもハッシュタグ情報が含まれないので現状では解決策なし。<br />
<a href="https://dev.twitter.com/docs/api/1/get/search">GET search | Twitter Developers</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.cheki.net/archives/2364/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Androidでtwitter4jを利用してOAuth認証(ブラウザ)</title>
		<link>http://blog.cheki.net/archives/2359</link>
		<comments>http://blog.cheki.net/archives/2359#comments</comments>
		<pubDate>Mon, 04 Jul 2011 05:07:36 +0000</pubDate>
		<dc:creator>cockok</dc:creator>
				<category><![CDATA[android]]></category>
		<category><![CDATA[oauth]]></category>
		<category><![CDATA[twitter]]></category>
		<category><![CDATA[twitter4j]]></category>

		<guid isPermaLink="false">http://blog.cheki.net/?p=2359</guid>
		<description><![CDATA[他のIntentから遷移し、URL表示しないブラウザを立ち上げ認証したらhogehoge。 public class OAuthActivity extends Activity { final private Stri [...]]]></description>
			<content:encoded><![CDATA[<p>他のIntentから遷移し、URL表示しないブラウザを立ち上げ認証したらhogehoge。</p>
<pre>
public class OAuthActivity extends Activity {
    final private String CONSUMER_KEY = "xxxxxx";
    final private String CONSUMER_SECRET = "xxxxxx";

    private String CALLBACK_URL = "myapp://oauth";
    private OAuthAuthorization oauth;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        WebView webview = new WebView(this);
        setContentView(webview);

        Configuration config = new ConfigurationBuilder().build();
        oauth = new OAuthAuthorization(config);
        oauth.setOAuthConsumer(CONSUMER_KEY, CONSUMER_SECRET);
        oauth.setOAuthAccessToken(null);
        try {
            String url = oauth.getOAuthRequestToken(CALLBACK_URL).getAuthorizeURL();
            webview.loadUrl(url);
        } catch (TwitterException e) {
            Toast.makeText(this, R.string.twitter_failed, Toast.LENGTH_LONG).show();
            finish();
        }
    }

    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);

        Uri uri = intent.getData();
        if (uri != null &#038;&#038; uri.toString().startsWith(CALLBACK_URL)) {
            String verifier = uri.getQueryParameter("oauth_verifier");
            try {
                AccessToken at = oauth.getOAuthAccessToken(verifier);
                Log.d(getLocalClassName(), "screen_name = " + at.getScreenName());
                Log.d(getLocalClassName(), "access_token = " + at.getToken());
                Log.d(getLocalClassName(), "access_token_secret = " + at.getTokenSecret());
                // hogehoge
                Toast.makeText(this, R.string.twitter_login_success, Toast.LENGTH_LONG).show();
                finish();
            } catch (Exception e) {
                Log.w(getLocalClassName(), e.getMessage());
                Toast.makeText(this, R.string.twitter_login_failed, Toast.LENGTH_LONG).show();
                finish();
            }
        }
    }
}
</pre>
<p>AndroidManifest.xml該当箇所。<br />
lunchModeで多重起動させない。<br />
あとヒストリー残さない。<br />
ブラウザから「myapp://oauth」でIntentが起動するように。</p>
<pre>
        &lt;activity
            android:name=&quot;.OAuthActivity&quot;
            android:launchMode=&quot;singleTask&quot;
            android:noHistory=&quot;true&quot;
            &gt;
            &lt;intent-filter&gt;
                &lt;action android:name=&quot;android.intent.action.VIEW&quot; /&gt;
                &lt;category android:name=&quot;android.intent.category.DEFAULT&quot; /&gt;
                &lt;category android:name=&quot;android.intent.category.BROWSABLE&quot; /&gt;
                &lt;data android:scheme=&quot;myapp&quot; android:host=&quot;oauth&quot; /&gt;
            &lt;/intent-filter&gt;
        &lt;/activity&gt;
</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.cheki.net/archives/2359/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mac OS XにPEARのインストール</title>
		<link>http://blog.cheki.net/archives/2356</link>
		<comments>http://blog.cheki.net/archives/2356#comments</comments>
		<pubDate>Fri, 01 Jul 2011 08:52:44 +0000</pubDate>
		<dc:creator>cockok</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[osx]]></category>
		<category><![CDATA[pear]]></category>

		<guid isPermaLink="false">http://blog.cheki.net/?p=2356</guid>
		<description><![CDATA[Mac OS XにPEARのインストール – ぱんぴーまっしぐら うまく行かなくなってたので。 $ curl -O http://pear.php.net/go-pear.phar $ php go-pear.phar  [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.cheki.net/archives/2296">Mac OS XにPEARのインストール – ぱんぴーまっしぐら</a><br />
うまく行かなくなってたので。</p>
<pre>
$ curl -O http://pear.php.net/go-pear.phar
$ php go-pear.phar
</pre>
<p>パイプでつなぐとreadlineがうまくいかないので別で実行。<br />
ユーザー環境にインストールしようとするのでそのままEnter</p>
<pre>
~/pear/bin/pear help
</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.cheki.net/archives/2356/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Androidで画像を選択し、画像を切り抜く（クロップ）するサンプル</title>
		<link>http://blog.cheki.net/archives/2349</link>
		<comments>http://blog.cheki.net/archives/2349#comments</comments>
		<pubDate>Mon, 20 Jun 2011 05:45:37 +0000</pubDate>
		<dc:creator>cockok</dc:creator>
				<category><![CDATA[android]]></category>

		<guid isPermaLink="false">http://blog.cheki.net/?p=2349</guid>
		<description><![CDATA[layoutはボタン置いてあるだけなので省略。 ボタンクリック＞ギャラリーから画像選択＞クロップ＞なんかするhogehoge。 クロップ後のサイズ（outputX、outputY）が大きすぎるとエラーでて利用できない。  [...]]]></description>
			<content:encoded><![CDATA[<p>layoutはボタン置いてあるだけなので省略。<br />
ボタンクリック＞ギャラリーから画像選択＞クロップ＞なんかするhogehoge。<br />
クロップ後のサイズ（outputX、outputY）が大きすぎるとエラーでて利用できない。<br />
壁紙サイズは無理。</p>
<pre>
package com.example.crop;

import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity implements OnClickListener {

    final private int REQUEST_CODE_GALLERY = 10;
    final private int REQUEST_CODE_CROP = 11;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Button button_background = (Button)findViewById(R.id.button_background);
        button_background.setOnClickListener(this);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (resultCode == RESULT_OK) {
            switch (requestCode) {
            case REQUEST_CODE_GALLERY:
                Intent intent = new Intent("com.android.camera.action.CROP");
                intent.setData(data.getData());
                intent.putExtra("outputX", 48);
                intent.putExtra("outputY", 48);
                intent.putExtra("aspectX", 1);
                intent.putExtra("aspectY", 1);
                intent.putExtra("scale", true);
                intent.putExtra("return-data", true);
                startActivityForResult(intent, REQUEST_CODE_CROP);
                break;
            case REQUEST_CODE_CROP:
                Bundle ext = data.getExtras();
                if (ext != null) {
                    Bitmap bitmap = ext.getParcelable("data");
                    // hogehoge
                }
                break;
            }
        }
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.button_background:
            Intent intent = new Intent();
            intent.setType("image/*");
            intent.setAction(Intent.ACTION_GET_CONTENT);
            startActivityForResult(intent, REQUEST_CODE_GALLERY);
            break;
        }
    }
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.cheki.net/archives/2349/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Eclipse 3.6(Helios)でMavenを利用する</title>
		<link>http://blog.cheki.net/archives/2347</link>
		<comments>http://blog.cheki.net/archives/2347#comments</comments>
		<pubDate>Wed, 25 May 2011 10:13:23 +0000</pubDate>
		<dc:creator>cockok</dc:creator>
				<category><![CDATA[日記]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[maven]]></category>

		<guid isPermaLink="false">http://blog.cheki.net/?p=2347</guid>
		<description><![CDATA[m2eclipseを利用する。 MacOSX(snow leopard)のMaven 3.0.2、Windows環境で昔インストールしたMaven 2.2.1の環境で動作した。 jreはJDKのものを指定しないとエラーで [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.eclipse.org/m2e/">m2eclipse</a>を利用する。<br />
MacOSX(snow leopard)のMaven 3.0.2、Windows環境で昔インストールしたMaven 2.2.1の環境で動作した。<br />
jreはJDKのものを指定しないとエラーでる。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.cheki.net/archives/2347/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AsyncTaskのcancel時の動き</title>
		<link>http://blog.cheki.net/archives/2342</link>
		<comments>http://blog.cheki.net/archives/2342#comments</comments>
		<pubDate>Wed, 11 May 2011 11:42:18 +0000</pubDate>
		<dc:creator>cockok</dc:creator>
				<category><![CDATA[android]]></category>
		<category><![CDATA[AsyncTask]]></category>

		<guid isPermaLink="false">http://blog.cheki.net/?p=2342</guid>
		<description><![CDATA[Android 2.1 update 1 ～ Android 2.3.2 AsyncTaskのcancel(true)を外部から呼んだ場合と、doInBackgroundで呼んだ場合挙動が異なる。 あと、cancelして [...]]]></description>
			<content:encoded><![CDATA[<p>Android 2.1 update 1 ～ Android 2.3.2<br />
AsyncTaskのcancel(true)を外部から呼んだ場合と、doInBackgroundで呼んだ場合挙動が異なる。<br />
あと、cancelしてもdoInBackgroundは最後まで実行される。</p>
<pre>
public class MainActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        new AsyncTask&lt;Void, Integer, Void&gt;() {
            @Override
            protected Void doInBackground(Void... params) {
                for (int i = 0, cnt = 10; i &lt; cnt; i++) {
                    publishProgress(i);
                    SystemClock.sleep(1000);
                    if (i == 5) {
                        cancel(true);
                    }
                }
                return null;
            }
            @Override
            public void onProgressUpdate(Integer... values) {
                Log.d(getLocalClassName(), &quot;count &quot;+values[0]);
            }
            @Override
            protected void onCancelled() {
                Log.d(getLocalClassName(), &quot;onCancelled&quot;);
            }
            @Override
            protected void onPostExecute(Void result) {
                Log.d(getLocalClassName(), &quot;onPostExecute&quot;);
            }
        }.execute();
    }
}
</pre>
<p>結果</p>
<pre>
count 0
count 1
count 2
count 3
count 4
count 5
onPostExecute
count 6
count 7
count 8
count 9
</pre>
<pre>
public class MainActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        AsyncTask&lt;Void, Integer, Void&gt; task = new AsyncTask&lt;Void, Integer, Void&gt;() {
            @Override
            protected Void doInBackground(Void... params) {
                for (int i = 0, cnt = 10; i &lt; cnt; i++) {
                    publishProgress(i);
                    SystemClock.sleep(1000);
                }
                return null;
            }
            @Override
            public void onProgressUpdate(Integer... values) {
                Log.d(getLocalClassName(), &quot;count &quot;+values[0]);
            }
            @Override
            protected void onCancelled() {
                Log.d(getLocalClassName(), &quot;onCancelled&quot;);
            }
            @Override
            protected void onPostExecute(Void result) {
                Log.d(getLocalClassName(), &quot;onPostExecute&quot;);
            }
        };
        task.execute();

        SystemClock.sleep(5000);
        task.cancel(true);
    }
}
</pre>
<p>結果</p>
<pre>
count 0
count 1
count 2
count 3
count 4
onCancelled
count 5
count 6
count 7
count 8
count 9
</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.cheki.net/archives/2342/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Apacheのリバースプロキシを利用してSERVER_NAMEが取れない時</title>
		<link>http://blog.cheki.net/archives/2339</link>
		<comments>http://blog.cheki.net/archives/2339#comments</comments>
		<pubDate>Thu, 05 May 2011 15:26:36 +0000</pubDate>
		<dc:creator>cockok</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://blog.cheki.net/?p=2339</guid>
		<description><![CDATA[Apacheのリバースプロキシを利用して、SERVER_NAMEがリバースプロキシサーバのIPになっちゃう場合は、リバースプロキシ側のApacheに以下の設定を追加。 ProxyPreserveHost On PHPプロ [...]]]></description>
			<content:encoded><![CDATA[<p>Apacheのリバースプロキシを利用して、SERVER_NAMEがリバースプロキシサーバのIPになっちゃう場合は、リバースプロキシ側のApacheに以下の設定を追加。</p>
<pre>
ProxyPreserveHost On
</pre>
<p>PHPプログラムでSERVER_NAMEの値を超利用しまくりな場合は、問題ないようならぶち込んじゃってもいいかも。</p>
<pre>
$_SERVER['SERVER_NAME'] = isset($_SERVER['X_FORWARDED_HOST']) ? $_SERVER['X_FORWARDED_HOST'] : $_SERVER['SERVER_NAME'];
</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.cheki.net/archives/2339/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mac OSXでApacheの利用</title>
		<link>http://blog.cheki.net/archives/2333</link>
		<comments>http://blog.cheki.net/archives/2333#comments</comments>
		<pubDate>Wed, 04 May 2011 02:32:09 +0000</pubDate>
		<dc:creator>cockok</dc:creator>
				<category><![CDATA[macosx]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://blog.cheki.net/?p=2333</guid>
		<description><![CDATA[システム環境設定＞共有＞Web共有をチェック httpd.confの設定 $ sudo vim /etc/apache2/httpd.conf 設定を上書きできないと困るので180行目のAllowOverrideを変更  [...]]]></description>
			<content:encoded><![CDATA[<p>システム環境設定＞共有＞Web共有をチェック</p>
<p>httpd.confの設定</p>
<pre>
$ sudo vim /etc/apache2/httpd.conf
</pre>
<p>設定を上書きできないと困るので180行目のAllowOverrideを変更</p>
<pre>
    AllowOverride All
</pre>
<p>PHPを利用可能にするため116行目のコメントアウトを外す</p>
<pre>
LoadModule php5_module        libexec/apache2/libphp5.so
</pre>
<p>ヴァーチャルホストの設定ファイルvhosts以下に配置し読み込めるように最後の行に追加<br />
デフォルトだと469行目でヴァーチャルホストの設定を読み込んでいるようだが、最終行のIncludeでPHPの設定が行われているので、それ以降に設定を書かないとPHPを利用できないため</p>
<pre>
Include /private/etc/apache2/vhosts/*.conf
</pre>
<p>ヴァーチャルホストの設定ファイルを作成<br />
ファイル名はお好みで</p>
<pre>
$ sudo vim /etc/apache2/vhosts/httpd-vhosts-hoge.example.com.conf
</pre>
<p>ファイルはhogeユーザのSite以下にドメインディレクトリを作成し、そこをドキュメントルートにしています<br />
localhostから接続できるようにAllow fromを追加</p>
<pre>
&lt;VirtualHost *:80&gt;
    ServerName hoge.example.com
    DocumentRoot /Users/hoge/Sites/hoge.example.com
    &lt;Directory /Users/hoge/Sites/hoge.example.com&gt;
        Allow from ::1
        Allow from 127.0.0.1
    &lt;/Directory&gt;
    ErrorLog /var/log/apache2/hoge.example.com-error_log
    CustomLog /var/log/apache2/hoge.example.com-access_log combined
&lt;/VirtualHost&gt;
</pre>
<p>Apache設定ファイルにミスがないかチェック</p>
<pre>
sudo apache2ctl configtest
</pre>
<p>大丈夫なようなら再起動</p>
<pre>
sudo apache2ctl -k restart
</pre>
<p>hostsファイルに名前解決できるように追加</p>
<pre>
sudo vim /etc/hosts
</pre>
<pre>
::1 hoge.example.com
127.0.0.1 hoge.example.com
</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.cheki.net/archives/2333/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>androidエミュレータのSDカードにファイルを転送する</title>
		<link>http://blog.cheki.net/archives/2328</link>
		<comments>http://blog.cheki.net/archives/2328#comments</comments>
		<pubDate>Thu, 21 Apr 2011 04:12:47 +0000</pubDate>
		<dc:creator>cockok</dc:creator>
				<category><![CDATA[android]]></category>

		<guid isPermaLink="false">http://blog.cheki.net/?p=2328</guid>
		<description><![CDATA[DDMSのファイル・エクスプローラだとGUIで簡単に転送できますが、テスト用に大量に転送する必要があったのでadbコマンドを利用します。 Windowsでのお話。 転送コマンド自体は以下。 adb push ファイル名  [...]]]></description>
			<content:encoded><![CDATA[<p>DDMSのファイル・エクスプローラだとGUIで簡単に転送できますが、テスト用に大量に転送する必要があったのでadbコマンドを利用します。<br />
Windowsでのお話。</p>
<p>転送コマンド自体は以下。</p>
<pre>
adb push ファイル名 /sdcard/転送先
</pre>
<p>SDカードは「/sdcard」としてマウントされています。</p>
<p>実機のSDカードをGドライブにマウントし、downloadフォルダ内のgifファイルをエミュレータのSDカード内のdownloadフォルダに転送します。<br />
実機も認識しているため、adbのオプションで実行先をエミュレータとする「-e」オプションを指定。</p>
<pre>
for %A in (G:\download\*.gif) do adb -e push %~fA /sdcard/download
</pre>
<p>転送後、エミュレータのアプリケーション一覧から「Dev Tools ＞ Media Scanner」でSDカードを再認識させる必要がある。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.cheki.net/archives/2328/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

