<?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>digital matter</title>
	<atom:link href="http://blog.loadlimits.info/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.loadlimits.info</link>
	<description>Just another WordPress weblog</description>
	<lastBuildDate>Thu, 17 May 2012 07:12:13 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>AndroidのTimePickerDialogのタイトルを設定する</title>
		<link>http://blog.loadlimits.info/2012/05/android%e3%81%aetimepickerdialog%e3%81%ae%e3%82%bf%e3%82%a4%e3%83%88%e3%83%ab%e3%82%92%e8%a8%ad%e5%ae%9a%e3%81%99%e3%82%8b/</link>
		<comments>http://blog.loadlimits.info/2012/05/android%e3%81%aetimepickerdialog%e3%81%ae%e3%82%bf%e3%82%a4%e3%83%88%e3%83%ab%e3%82%92%e8%a8%ad%e5%ae%9a%e3%81%99%e3%82%8b/#comments</comments>
		<pubDate>Thu, 17 May 2012 07:12:13 +0000</pubDate>
		<dc:creator>hotpi</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[TimePickerDialog]]></category>

		<guid isPermaLink="false">http://blog.loadlimits.info/?p=491</guid>
		<description><![CDATA[class MyTimePickerDialog extends TimePickerDialog { public MyTimePickerDialog(Context context, OnTimeSetListener callBack, int hourOfDay, int minute, boolean is24HourView) { super(context, callBack, hourOfDay, minute, is24HourView); } @Override public void onTimeChanged(TimePicker view, int hourOfDay, int minute) { // do nothing } } 時刻を変更するたびにタイトルを上書きしてしまうので、継承してonTimingChangedを何もしないようにオーバーライドしてしまえばOKです。 また、インスタンスを作ったときにも自動的にタイトルを設定しているので、自分でタイトルを上書きするのも忘れずに。 final MyTimePickerDialog timePickerDialog = new MyTimePickerDialog( this, new TimePickerDialog.OnTimeSetListener() { @Override public void onTimeSet(TimePicker view, [...]]]></description>
			<content:encoded><![CDATA[<div style="padding-bottom: 0px;margin: 0px;padding-left: 0px;padding-right: 0px;float: none;padding-top: 0px" class="wlWriterEditableSmartContent">
<pre>    class MyTimePickerDialog extends TimePickerDialog {

        public MyTimePickerDialog(Context context, OnTimeSetListener callBack,
                int hourOfDay, int minute, boolean is24HourView) {
            super(context, callBack, hourOfDay, minute, is24HourView);
        }

        @Override
        public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
            // do nothing
        }

    }
</pre>
</div>
<p>時刻を変更するたびにタイトルを上書きしてしまうので、継承してonTimingChangedを何もしないようにオーバーライドしてしまえばOKです。</p>
<p>また、インスタンスを作ったときにも自動的にタイトルを設定しているので、自分でタイトルを上書きするのも忘れずに。</p>
<div style="padding-bottom: 0px;margin: 0px;padding-left: 0px;padding-right: 0px;float: none;padding-top: 0px" class="wlWriterEditableSmartContent">
<pre>            final MyTimePickerDialog timePickerDialog = new MyTimePickerDialog(
                    this, new TimePickerDialog.OnTimeSetListener() {
                        @Override
                        public void onTimeSet(TimePicker view, int hourOfDay,
                                int minute) {
                            // do something
                        }
                    }, 0, 0, true);
            // ここでタイトルを設定する
            timePickerDialog.setTitle(R.string.dialog_title);
            timePickerDialog.show();
</pre>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.loadlimits.info/2012/05/android%e3%81%aetimepickerdialog%e3%81%ae%e3%82%bf%e3%82%a4%e3%83%88%e3%83%ab%e3%82%92%e8%a8%ad%e5%ae%9a%e3%81%99%e3%82%8b/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>getExternalFilesDirがnullを返す場合</title>
		<link>http://blog.loadlimits.info/2012/05/getexternalfilesdir%e3%81%8cnull%e3%82%92%e8%bf%94%e3%81%99%e5%a0%b4%e5%90%88/</link>
		<comments>http://blog.loadlimits.info/2012/05/getexternalfilesdir%e3%81%8cnull%e3%82%92%e8%bf%94%e3%81%99%e5%a0%b4%e5%90%88/#comments</comments>
		<pubDate>Sun, 13 May 2012 02:09:44 +0000</pubDate>
		<dc:creator>hotpi</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://blog.loadlimits.info/?p=489</guid>
		<description><![CDATA[API Level 8から使えるようになったContext.getExternalFilesDirは外部ストレージのパスに、パッケージ名を追加して、さらにディレクトリが存在しなければ作成もしておいてくれるという、今までEnvironment.getExternalStorageDirectoryを使って書いていた部分を短くできる便利なメソッドです。 で、このメソッドがnullを返す場合、大抵はパーミッション不足です。 AndroidManifest.xmlに外部ストレージへの書き込みを許可する行を追加しましょう。 &#60;uses-permission android:name=&#34;android.permission.WRITE_EXTERNAL_STORAGE&#34; /&#62; 何が問題かって、このメソッドがパーミッションのExceptionを投げてくれずに、nullしか返さないことです。 ちなみにこのメソッドを使ってファイルをコピーするプログラムはこんな感じになりました。 File dst = new File(mContext.getExternalFilesDir(null), "dst.txt"); // dst = "/mnt/sdcard/Android/data/com.sample/files/dst.txt" FileChannel srcChannel = null; FileChannel destChannel = null; try { // ファイルのコピー if (dst.exists()) { dst.delete(); } dst.createNewFile(); FileInputStream in = mContext.openFileInput("src.txt"); FileOutputStream out = new FileOutputStream(dst, false); srcChannel = in.getChannel(); destChannel = out.getChannel(); srcChannel.transferTo(0, [...]]]></description>
			<content:encoded><![CDATA[<p>API Level 8から使えるようになったContext.getExternalFilesDirは外部ストレージのパスに、パッケージ名を追加して、さらにディレクトリが存在しなければ作成もしておいてくれるという、今までEnvironment.getExternalStorageDirectoryを使って書いていた部分を短くできる便利なメソッドです。</p>
<p>で、このメソッドがnullを返す場合、大抵はパーミッション不足です。</p>
<p>AndroidManifest.xmlに外部ストレージへの書き込みを許可する行を追加しましょう。</p>
<p>&lt;uses-permission android:name=&quot;android.permission.WRITE_EXTERNAL_STORAGE&quot; /&gt;</p>
<p>何が問題かって、このメソッドがパーミッションのExceptionを投げてくれずに、nullしか返さないことです。</p>
<p>ちなみにこのメソッドを使ってファイルをコピーするプログラムはこんな感じになりました。</p>
<div style="padding-bottom: 0px;margin: 0px;padding-left: 0px;padding-right: 0px;float: none;padding-top: 0px" class="wlWriterEditableSmartContent">
<pre>    File dst = new File(mContext.getExternalFilesDir(null), "dst.txt");
    // dst = "/mnt/sdcard/Android/data/com.sample/files/dst.txt"

    FileChannel srcChannel = null;
    FileChannel destChannel = null;

    try {
        // ファイルのコピー
        if (dst.exists()) {
            dst.delete();
        }
        dst.createNewFile();
        FileInputStream in = mContext.openFileInput("src.txt");
        FileOutputStream out = new FileOutputStream(dst, false);

        srcChannel = in.getChannel();
        destChannel = out.getChannel();

        srcChannel.transferTo(0, srcChannel.size(), destChannel);
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (srcChannel != null) {
            try {
                srcChannel.close();
            } catch (IOException e) {
            }
        }
        if (destChannel != null) {
            try {
                destChannel.close();
            } catch (IOException e) {
            }
        }
    }
</pre>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.loadlimits.info/2012/05/getexternalfilesdir%e3%81%8cnull%e3%82%92%e8%bf%94%e3%81%99%e5%a0%b4%e5%90%88/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Intent連携でのメール送信とFLAG_ACTIVITY_NEW_TASK</title>
		<link>http://blog.loadlimits.info/2012/05/intent%e9%80%a3%e6%90%ba%e3%81%a7%e3%81%ae%e3%83%a1%e3%83%bc%e3%83%ab%e9%80%81%e4%bf%a1%e3%81%a8flag_activity_new_task/</link>
		<comments>http://blog.loadlimits.info/2012/05/intent%e9%80%a3%e6%90%ba%e3%81%a7%e3%81%ae%e3%83%a1%e3%83%bc%e3%83%ab%e9%80%81%e4%bf%a1%e3%81%a8flag_activity_new_task/#comments</comments>
		<pubDate>Thu, 10 May 2012 00:14:02 +0000</pubDate>
		<dc:creator>hotpi</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://blog.loadlimits.info/?p=487</guid>
		<description><![CDATA[androidからIntentを使って外部Activityを起動するときに、contextがActivity contextじゃないと、AndroidRuntimeExceptionが発生します。 サービスや、独自のアプリケーションクラスからapplication contextを使って、メールクライアントを選択させてメール送信するためにstartActivityを実行したいという用事です。 E/AndroidRuntime(7525): android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity&#160; context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want? FLAG_ACTIVITY_NEW_TASKをsetFlagsしてやればいいだけなのですが、その辺から適当にコードをコピーしてくるとハマる場合があります。 問題のコードはこれ。 Intent intent = new Intent(Intent.ACTION_SEND); String[] to = { "hoge@sample.com" }; intent.putExtra(Intent.EXTRA_EMAIL, to); intent.putExtra(Intent.EXTRA_TEXT, "test"); intent.putExtra(Intent.EXTRA_SUBJECT, "send mail test"); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setType("message/rfc822"); context.startActivity(Intent.createChooser(intent, "Choose Email Client")); 一見問題なさそうなのですが、これは結局Intent.createChooserがIntentを返すので、そのIntentに対してフラグを指定しなければいけないということでした。 なので、以下のようにする必要があります。 Intent intent1 [...]]]></description>
			<content:encoded><![CDATA[<p>androidからIntentを使って外部Activityを起動するときに、contextがActivity contextじゃないと、AndroidRuntimeExceptionが発生します。</p>
<p>サービスや、独自のアプリケーションクラスからapplication contextを使って、メールクライアントを選択させてメール送信するためにstartActivityを実行したいという用事です。</p>
<blockquote><p>E/AndroidRuntime(7525): android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity&#160; context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?</p>
</blockquote>
<p>FLAG_ACTIVITY_NEW_TASKをsetFlagsしてやればいいだけなのですが、その辺から適当にコードをコピーしてくるとハマる場合があります。</p>
<p>問題のコードはこれ。</p>
<div style="padding-bottom: 0px;margin: 0px;padding-left: 0px;padding-right: 0px;float: none;padding-top: 0px" class="wlWriterEditableSmartContent">
<pre>        Intent intent = new Intent(Intent.ACTION_SEND);
        String[] to = { "hoge@sample.com" };
        intent.putExtra(Intent.EXTRA_EMAIL, to);
        intent.putExtra(Intent.EXTRA_TEXT, "test");
        intent.putExtra(Intent.EXTRA_SUBJECT, "send mail test");
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        intent.setType("message/rfc822");

        context.startActivity(Intent.createChooser(intent, "Choose Email Client"));
</pre>
</div>
<p>一見問題なさそうなのですが、これは結局Intent.createChooserがIntentを返すので、そのIntentに対してフラグを指定しなければいけないということでした。</p>
<p>なので、以下のようにする必要があります。</p>
<div style="padding-bottom: 0px;margin: 0px;padding-left: 0px;padding-right: 0px;float: none;padding-top: 0px" class="wlWriterEditableSmartContent">
<pre>        Intent intent1 = new Intent(Intent.ACTION_SEND);
        String[] to = { "hoge@sample.com" };
        intent1.putExtra(Intent.EXTRA_EMAIL, to);
        intent1.putExtra(Intent.EXTRA_TEXT, "test");
        intent1.putExtra(Intent.EXTRA_SUBJECT, "send mail test");
        intent1.setType("message/rfc822");

        Intent intent2 = Intent.createChooser(intent1, "Choose Email Client");
        intent2.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(intent2);
</pre>
</div>
<p><a href="http://stackoverflow.com/questions/5385724/how-can-i-call-startactivity-to-use-action-send-from-a-different-class" target="_blank">android &#8211; How can i call startActivity() to use ACTION_SEND from a different class &#8211; Stack Overflow</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.loadlimits.info/2012/05/intent%e9%80%a3%e6%90%ba%e3%81%a7%e3%81%ae%e3%83%a1%e3%83%bc%e3%83%ab%e9%80%81%e4%bf%a1%e3%81%a8flag_activity_new_task/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ISW11FをADBドライバで認識させる方法</title>
		<link>http://blog.loadlimits.info/2012/05/isw11f%e3%82%92adb%e3%83%89%e3%83%a9%e3%82%a4%e3%83%90%e3%81%a7%e8%aa%8d%e8%ad%98%e3%81%95%e3%81%9b%e3%82%8b%e6%96%b9%e6%b3%95/</link>
		<comments>http://blog.loadlimits.info/2012/05/isw11f%e3%82%92adb%e3%83%89%e3%83%a9%e3%82%a4%e3%83%90%e3%81%a7%e8%aa%8d%e8%ad%98%e3%81%95%e3%81%9b%e3%82%8b%e6%96%b9%e6%b3%95/#comments</comments>
		<pubDate>Thu, 03 May 2012 05:52:39 +0000</pubDate>
		<dc:creator>hotpi</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://blog.loadlimits.info/?p=484</guid>
		<description><![CDATA[Eclipseで開発をするときに、Arrows Z（ISW11F）がPCから認識しなくて困っていました。 PCからはFujitsu Mass storage USB Deviceと認識されてしまう場合の対処法です。 まずはドライバダウンロードします。 http://spf.fmworld.net/oss/usb_driver/isw11f/index.html 解凍したらReadme.txtは必ず読んでください。 インストール前に確認するべき項目は次の通り。 C:\Users\(ユーザー名)\.android\adb_usb.iniがあるか 上記adb_usb.iniに「0x04C5」という行があるか（なければ行追加） 端末がUSBデバッグになっているか それとPCでデバイスマネージャーを起動しておきましょう。 これでUSBで端末を接続して、問題なくFujitsu HSUSB Deviceという項目が出現すればいいのですが、出現せず、下の画像のようになる場合があります。 基本的には、すでに誤認識されてしまっているデバイスを削除してやればいいのですが、Fujitsu Mass storage USB Deviceの２行を削除しても、再接続すると元に戻ってしまいました。 なので、このデバイスの親ごと消す必要があります。作業は端末を接続したままで行います。 「ユニバーサル シリアル バス コントローラー」の下の「USB 大容量記憶装置」を右クリックして、削除します。ただし、複数デバイスがある場合は以下のように、デバイスマネージャーの表示を、「デバイス（接続別）」にしてやると、目的のデバイスがグループ化されるので、間違えずに消せるようになります。 消したあとは、一度端末を外して、再度USBで接続すると、自動的にドライバのインストールが始まります。 こうなれば成功です。ドライバーが見つかりませんと表示されますが、デバイス自体は認識されています。 あとは、このFujitsu HSUSB Deviceを選択して、ドライバの更新をして、先ほどダウンロードして解凍したドライバファイルを選択すればAndroid Composite ADB Interfaceとして認識されます。 ちなみにMass storage USB Deviceを直接「ドライバーの更新」すれば良いという情報があったのですが、試そうとしたら64bitドライバがない旨のメッセージが出て、進めませんでした。 今回はこちらのサイトが参考になりました。 AndroidがUSBデバッグで接続できない場合（USBストレージとしてしか認識されない場合） &#124; コラビットの中の人]]></description>
			<content:encoded><![CDATA[<p>Eclipseで開発をするときに、Arrows Z（ISW11F）がPCから認識しなくて困っていました。</p>
<p>PCからはFujitsu Mass storage USB Deviceと認識されてしまう場合の対処法です。</p>
<p>まずはドライバダウンロードします。   <br /><a href="http://spf.fmworld.net/oss/usb_driver/isw11f/index.html">http://spf.fmworld.net/oss/usb_driver/isw11f/index.html</a></p>
<p>解凍したらReadme.txtは必ず読んでください。</p>
<p>インストール前に確認するべき項目は次の通り。</p>
<ul>
<li>C:\Users\(ユーザー名)\.android\adb_usb.iniがあるか</li>
<li>上記adb_usb.iniに「0x04C5」という行があるか（なければ行追加）</li>
<li>端末がUSBデバッグになっているか</li>
</ul>
<p>それとPCでデバイスマネージャーを起動しておきましょう。</p>
<p>これでUSBで端末を接続して、問題なくFujitsu HSUSB Deviceという項目が出現すればいいのですが、出現せず、下の画像のようになる場合があります。</p>
<p><a href="http://blog.loadlimits.info/wp-content/uploads/2012/05/WS000015.png"><img style="border-bottom: 0px;border-left: 0px;padding-left: 0px;padding-right: 0px;border-top: 0px;border-right: 0px;padding-top: 0px" border="0" alt="WS000015" src="http://blog.loadlimits.info/wp-content/uploads/2012/05/WS000015_thumb.png" width="330" height="182" /></a></p>
<p>基本的には、すでに誤認識されてしまっているデバイスを削除してやればいいのですが、Fujitsu Mass storage USB Deviceの２行を削除しても、再接続すると元に戻ってしまいました。</p>
<p>なので、このデバイスの親ごと消す必要があります。作業は端末を接続したままで行います。</p>
<p>「ユニバーサル シリアル バス コントローラー」の下の「USB 大容量記憶装置」を右クリックして、削除します。ただし、複数デバイスがある場合は以下のように、デバイスマネージャーの表示を、「デバイス（接続別）」にしてやると、目的のデバイスがグループ化されるので、間違えずに消せるようになります。</p>
<p><a href="http://blog.loadlimits.info/wp-content/uploads/2012/05/WS000011.png"><img style="border-bottom: 0px;border-left: 0px;padding-left: 0px;padding-right: 0px;border-top: 0px;border-right: 0px;padding-top: 0px" border="0" alt="WS000011" src="http://blog.loadlimits.info/wp-content/uploads/2012/05/WS000011_thumb.png" width="534" height="569" /></a></p>
<p>消したあとは、一度端末を外して、再度USBで接続すると、自動的にドライバのインストールが始まります。</p>
<p><a href="http://blog.loadlimits.info/wp-content/uploads/2012/05/WS000013.png"><img style="border-bottom: 0px;border-left: 0px;padding-left: 0px;padding-right: 0px;border-top: 0px;border-right: 0px;padding-top: 0px" border="0" alt="WS000013" src="http://blog.loadlimits.info/wp-content/uploads/2012/05/WS000013_thumb.png" width="565" height="335" /></a></p>
<p>こうなれば成功です。ドライバーが見つかりませんと表示されますが、デバイス自体は認識されています。</p>
<p><a href="http://blog.loadlimits.info/wp-content/uploads/2012/05/WS000014.png"><img style="border-bottom: 0px;border-left: 0px;padding-left: 0px;padding-right: 0px;border-top: 0px;border-right: 0px;padding-top: 0px" border="0" alt="WS000014" src="http://blog.loadlimits.info/wp-content/uploads/2012/05/WS000014_thumb.png" width="334" height="153" /></a></p>
<p>あとは、このFujitsu HSUSB Deviceを選択して、ドライバの更新をして、先ほどダウンロードして解凍したドライバファイルを選択すればAndroid Composite ADB Interfaceとして認識されます。</p>
<p><a href="http://blog.loadlimits.info/wp-content/uploads/2012/05/WS000016.png"><img style="border-bottom: 0px;border-left: 0px;padding-left: 0px;padding-right: 0px;border-top: 0px;border-right: 0px;padding-top: 0px" border="0" alt="WS000016" src="http://blog.loadlimits.info/wp-content/uploads/2012/05/WS000016_thumb.png" width="290" height="80" /></a></p>
<p>ちなみにMass storage USB Deviceを直接「ドライバーの更新」すれば良いという情報があったのですが、試そうとしたら64bitドライバがない旨のメッセージが出て、進めませんでした。</p>
<p>今回はこちらのサイトが参考になりました。</p>
<p><a href="http://blog.collab-it.net/2011/08/androidusbusb.html" target="_blank">AndroidがUSBデバッグで接続できない場合（USBストレージとしてしか認識されない場合） | コラビットの中の人</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.loadlimits.info/2012/05/isw11f%e3%82%92adb%e3%83%89%e3%83%a9%e3%82%a4%e3%83%90%e3%81%a7%e8%aa%8d%e8%ad%98%e3%81%95%e3%81%9b%e3%82%8b%e6%96%b9%e6%b3%95/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Windows版PHP 5.4.0でAPCを使う</title>
		<link>http://blog.loadlimits.info/2012/04/windows%e7%89%88php-5-4-0%e3%81%a7apc%e3%82%92%e4%bd%bf%e3%81%86/</link>
		<comments>http://blog.loadlimits.info/2012/04/windows%e7%89%88php-5-4-0%e3%81%a7apc%e3%82%92%e4%bd%bf%e3%81%86/#comments</comments>
		<pubDate>Sat, 21 Apr 2012 09:05:36 +0000</pubDate>
		<dc:creator>hotpi</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[解決]]></category>
		<category><![CDATA[APC]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://blog.loadlimits.info/?p=472</guid>
		<description><![CDATA[まずはAPCをダウンロードします。 downloads.php.net/pierre/ php_apc-3.1.10-5.4-vc9-x86.zip (2012-04-11 23:46 -0700) をダウンロードしました。 展開すると、ntsとtsのフォルダが作成されます。使っているPHPがNon Thread Safe版かThread Safe版かによって使う方を決めてください。 それぞれのフォルダの中に、php_apc.dllがあるので、phpがインストールされているフォルダのextフォルダにコピーします。 その後、php.iniを開いて extension=php_apc.dll を追加し、Apacheを再起動すればOKです。 ちなみに、dllのバージョンを見ると、5.4.1RC1-devと書かれていました。 phpinfo()ではこのようになります。特に問題なく使えているようです。]]></description>
			<content:encoded><![CDATA[<p>まずはAPCをダウンロードします。</p>
<p><a href="http://downloads.php.net/pierre/" target="_blank">downloads.php.net/pierre/</a></p>
<p>php_apc-3.1.10-5.4-vc9-x86.zip (2012-04-11 23:46 -0700)   <br />をダウンロードしました。</p>
<p>展開すると、ntsとtsのフォルダが作成されます。使っているPHPがNon Thread Safe版かThread Safe版かによって使う方を決めてください。</p>
<p>それぞれのフォルダの中に、php_apc.dllがあるので、phpがインストールされているフォルダのextフォルダにコピーします。</p>
<p>その後、php.iniを開いて   <br />extension=php_apc.dll    <br />を追加し、Apacheを再起動すればOKです。</p>
<p>ちなみに、dllのバージョンを見ると、5.4.1RC1-devと書かれていました。</p>
<p>phpinfo()ではこのようになります。特に問題なく使えているようです。</p>
<p><a href="http://blog.loadlimits.info/wp-content/uploads/2012/04/WS000000.png"><img style="border-bottom: 0px;border-left: 0px;padding-left: 0px;padding-right: 0px;border-top: 0px;border-right: 0px;padding-top: 0px" border="0" alt="WS000000" src="http://blog.loadlimits.info/wp-content/uploads/2012/04/WS000000_thumb.png" width="617" height="203" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.loadlimits.info/2012/04/windows%e7%89%88php-5-4-0%e3%81%a7apc%e3%82%92%e4%bd%bf%e3%81%86/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mouse without Bordersでルータを超える</title>
		<link>http://blog.loadlimits.info/2012/04/mouse-without-borders%e3%81%a7%e3%83%ab%e3%83%bc%e3%82%bf%e3%82%92%e8%b6%85%e3%81%88%e3%82%8b/</link>
		<comments>http://blog.loadlimits.info/2012/04/mouse-without-borders%e3%81%a7%e3%83%ab%e3%83%bc%e3%82%bf%e3%82%92%e8%b6%85%e3%81%88%e3%82%8b/#comments</comments>
		<pubDate>Fri, 20 Apr 2012 12:12:11 +0000</pubDate>
		<dc:creator>hotpi</dc:creator>
				<category><![CDATA[解決]]></category>
		<category><![CDATA[Mouse without Borders]]></category>
		<category><![CDATA[synergy]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://blog.loadlimits.info/?p=467</guid>
		<description><![CDATA[Microsoft The Garageから提供されたMouse without Bordersは、Synergyのような、一台のキーボードとマウスで、他のPCを操作できるソフトウェアです。 Microsoft download from The Garage: Mouse without Borders &#8211; Next at Microsoft &#8211; Site Home &#8211; TechNet Blogs これがかなり便利で、複数のPCを使う人にはぜひおすすめしたいところです。 Synergyと比べて、優れている点はこんなところです。 人に勧められるレベルの簡単さ UAC対応 ファイルのコピーがスクリーン間でドラッグアンドドロップでできる ２台のPCのどちらのマウス（キーボードでも可）を使っても、双方向に操作できる １台のマウス（キーボードでも可）で複数のPCに、同時に同じ操作をさせられる スクリーンの位置設定なども自動的に同期してくれる ログイン前でも操作可能 Windowsキー+Lでのロックは、SynergyでもMouse without Bordersでも同じように両画面ロックしてしまうみたいですね。 インストール方法はこちらを参考にしてください。 窓の杜 &#8211; 【NEWS】Microsoft、複数PCでマウス・キーボードをLAN共有する「Mouse Without Borders」 で、今使っているLANの中に、もう一台ルータがいて、その中でまた別のネットワークを構築しているのですが、そのネットワーク内にあるPCと、外側のPCとでMouse without Bordersを使ってみました。 ちなみにWINSはない環境です。 Mouse without Bordersはコンピュータ名で接続先PCを特定するため、コンピュータ名からIPが特定できないといけません。 まず、それぞれのPCのhostsファイルに相手のIPを記述します。 PC1 C:\Windows\System32\drivers\etc\hosts 192.168.0.10 PC2 PC2 C:\Windows\System32\drivers\etc\hosts [...]]]></description>
			<content:encoded><![CDATA[<p>Microsoft The Garageから提供されたMouse without Bordersは、Synergyのような、一台のキーボードとマウスで、他のPCを操作できるソフトウェアです。</p>
<p><a href="http://blogs.technet.com/b/next/archive/2011/09/09/microsoft-garage-download-mouse-without-borders.aspx" target="_blank">Microsoft download from The Garage: Mouse without Borders &#8211; Next at Microsoft &#8211; Site Home &#8211; TechNet Blogs</a></p>
<p>これがかなり便利で、複数のPCを使う人にはぜひおすすめしたいところです。</p>
<p>Synergyと比べて、優れている点はこんなところです。</p>
<ul>
<li>人に勧められるレベルの簡単さ </li>
<li>UAC対応 </li>
<li>ファイルのコピーがスクリーン間でドラッグアンドドロップでできる </li>
<li>２台のPCのどちらのマウス（キーボードでも可）を使っても、双方向に操作できる </li>
<li>１台のマウス（キーボードでも可）で複数のPCに、同時に同じ操作をさせられる </li>
<li>スクリーンの位置設定なども自動的に同期してくれる </li>
<li>ログイン前でも操作可能</li>
</ul>
<p>Windowsキー+Lでのロックは、SynergyでもMouse without Bordersでも同じように両画面ロックしてしまうみたいですね。</p>
<p>インストール方法はこちらを参考にしてください。</p>
<p><a href="http://www.forest.impress.co.jp/docs/news/20110912_476948.html" target="_blank">窓の杜 &#8211; 【NEWS】Microsoft、複数PCでマウス・キーボードをLAN共有する「Mouse Without Borders」</a></p>
<p>で、今使っているLANの中に、もう一台ルータがいて、その中でまた別のネットワークを構築しているのですが、そのネットワーク内にあるPCと、外側のPCとでMouse without Bordersを使ってみました。</p>
<p>ちなみにWINSはない環境です。</p>
<p><a href="http://blog.loadlimits.info/wp-content/uploads/2012/04/image.png"><img style="border-right-width: 0px;padding-left: 0px;padding-right: 0px;border-top-width: 0px;border-bottom-width: 0px;border-left-width: 0px;padding-top: 0px" border="0" alt="image" src="http://blog.loadlimits.info/wp-content/uploads/2012/04/image_thumb.png" width="443" height="343" /></a></p>
<p>Mouse without Bordersはコンピュータ名で接続先PCを特定するため、コンピュータ名からIPが特定できないといけません。</p>
<p>まず、それぞれのPCのhostsファイルに相手のIPを記述します。</p>
<p>PC1 C:\Windows\System32\drivers\etc\hosts    <br />192.168.0.10 PC2</p>
<p>PC2 C:\Windows\System32\drivers\etc\hosts    <br />172.16.10.1 PC1</p>
<p>ルータにはファイアウォールなどは入れていないので、これだけの設定でPC2からPC1への接続はできます。もしPC2からPC1を操作するだけなら、これで十分です。</p>
<p>双方向操作や、PC1からPC2を操作する場合はもう少し設定が必要です。</p>
<p>Mouse without BordersはデフォルトではTCPで接続するようになっています。使われるポート番号は15100と15101です。これをルータでアドレス変換してあげる必要があります。</p>
<p>AirStationでの設定はこんな感じです。</p>
<p><a href="http://blog.loadlimits.info/wp-content/uploads/2012/04/image1.png"><img style="border-right-width: 0px;padding-left: 0px;padding-right: 0px;border-top-width: 0px;border-bottom-width: 0px;border-left-width: 0px;padding-top: 0px" border="0" alt="image" src="http://blog.loadlimits.info/wp-content/uploads/2012/04/image_thumb1.png" width="578" height="99" /></a></p>
<p>ちなみに15101だけでも接続できました。15100は何に使っているのか謎です。</p>
<p>これでルータは通るようになりましたが、192.168.0.10がどこを指すのか、PC1にはわかりません。</p>
<p>ですので、静的ルーティングを設定します。</p>
<p>管理者権限でコマンドプロンプトを開いて、    <br />&gt; route -p add 192.168.0.0 mask 255.255.255.0 172.16.10.2     <br />とすればOKです。-pオプションは永続化です。</p>
<p>これで快適に２台のPCを操作できるようになりました。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.loadlimits.info/2012/04/mouse-without-borders%e3%81%a7%e3%83%ab%e3%83%bc%e3%82%bf%e3%82%92%e8%b6%85%e3%81%88%e3%82%8b/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHPからarpテーブルを参照する</title>
		<link>http://blog.loadlimits.info/2012/04/php%e3%81%8b%e3%82%89arp%e3%83%86%e3%83%bc%e3%83%96%e3%83%ab%e3%82%92%e5%8f%82%e7%85%a7%e3%81%99%e3%82%8b/</link>
		<comments>http://blog.loadlimits.info/2012/04/php%e3%81%8b%e3%82%89arp%e3%83%86%e3%83%bc%e3%83%96%e3%83%ab%e3%82%92%e5%8f%82%e7%85%a7%e3%81%99%e3%82%8b/#comments</comments>
		<pubDate>Sun, 08 Apr 2012 20:47:50 +0000</pubDate>
		<dc:creator>hotpi</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[arp]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://blog.loadlimits.info/?p=456</guid>
		<description><![CDATA[PHPからarpコマンドを実行してLAN内のMACアドレスとIPアドレスの変換テーブルを参照できるようにしてみました。単純に結果を正規表現にかけているだけです。 ちなみにひとつのMACが複数のIPを持つ場合には対応していません。それと、arpの性質上、頻繁にキャッシュクリアされるので、用途によっては注意が必要です。 &#60;?php $table = array(); if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') { exec('arp -a', $output); // for Windows } else { exec('/usr/sbin/arp -a -n', $output); // for Linux(debian) } foreach ($output as $line) { if (preg_match('/(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}).*([0-9a-f]{2}[\-:][0-9a-f]{2}[\-:][0-9a-f]{2}[\-:][0-9a-f]{2}[\-:][0-9a-f]{2}[\-:][0-9a-f]{2})/i', $line, $matches)) { $ip = $matches[1]; $mac = strtoupper(str_replace(array('-', ':'), '', $matches[2])); $table[$mac] = $ip; } } var_dump($table); [...]]]></description>
			<content:encoded><![CDATA[<p>PHPからarpコマンドを実行してLAN内のMACアドレスとIPアドレスの変換テーブルを参照できるようにしてみました。単純に結果を正規表現にかけているだけです。</p>
<p>ちなみにひとつのMACが複数のIPを持つ場合には対応していません。それと、arpの性質上、頻繁にキャッシュクリアされるので、用途によっては注意が必要です。</p>
<div style="padding-bottom: 0px;margin: 0px;padding-left: 0px;padding-right: 0px;float: none;padding-top: 0px" class="wlWriterEditableSmartContent">
<pre>&lt;?php

$table = array();
if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
    exec('arp -a', $output); // for Windows
}
else {
    exec('/usr/sbin/arp -a -n', $output); // for Linux(debian)
}
foreach ($output as $line) {
    if (preg_match('/(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}).*([0-9a-f]{2}[\-:][0-9a-f]{2}[\-:][0-9a-f]{2}[\-:][0-9a-f]{2}[\-:][0-9a-f]{2}[\-:][0-9a-f]{2})/i', $line, $matches)) {
        $ip = $matches[1];
        $mac = strtoupper(str_replace(array('-', ':'), '', $matches[2]));
        $table[$mac] = $ip;
    }
}

var_dump($table);
</pre>
</div>
<p>結果</p>
<div style="padding-bottom: 0px;margin: 0px;padding-left: 0px;padding-right: 0px;float: none;padding-top: 0px" class="wlWriterEditableSmartContent">
<pre>array(2) {
  ["123456789ABC"]=&gt;
  string(13) "192.168.0.1"
  ["0003FFFFFFFF"]=&gt;
  string(15) "192.168.131.254"
}
</pre>
</div>
<p>Linuxのarpコマンドがarp -aで実行するとすごく遅いので、原因を調べていたら、デフォルトではIPアドレスからDNSの逆引きをしているということでした。-nオプションを付けることで、DNSリクエストを送らなくなるので一瞬で表示できます。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.loadlimits.info/2012/04/php%e3%81%8b%e3%82%89arp%e3%83%86%e3%83%bc%e3%83%96%e3%83%ab%e3%82%92%e5%8f%82%e7%85%a7%e3%81%99%e3%82%8b/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MediaPlayerで通知音を鳴らす</title>
		<link>http://blog.loadlimits.info/2012/04/mediaplayer%e3%81%a7%e9%80%9a%e7%9f%a5%e9%9f%b3%e3%82%92%e9%b3%b4%e3%82%89%e3%81%99/</link>
		<comments>http://blog.loadlimits.info/2012/04/mediaplayer%e3%81%a7%e9%80%9a%e7%9f%a5%e9%9f%b3%e3%82%92%e9%b3%b4%e3%82%89%e3%81%99/#comments</comments>
		<pubDate>Sat, 07 Apr 2012 21:18:48 +0000</pubDate>
		<dc:creator>hotpi</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://blog.loadlimits.info/?p=454</guid>
		<description><![CDATA[AndroidのMediaPlayerで通知音を鳴らすときに、音量設定を反映させます。 MediaPlayer.createメソッドでインスタンスを作成した状態だと、「メディア音量」というものが反映されるので、setAudioStreamTypeメソッドで再生するオーディオのタイプを指定してやります。これでシステムの設定画面で指定した音量が反映されます。 が、setAudioStreamTypeメソッドをMediaPlayer.createで作成したインスタンスに対して実行すると、 error (-38, 0) とか prepareAsync called in state 8 とか setAudioStream called in state 8 とかエラーが起こります。 これはMediaPlayer.createメソッドが、内部的にすでにprepare（準備）メソッドを呼んでいるためで、ストリームタイプの変更は、準備の前に実行しておく必要があります。 コードはこんな感じになりました。 public static void playSound(Context context, String url) { if (url != null) { Uri uri = Uri.parse(url); // MediaPlayer.createはprepareを実行してしまうのでnew MediaPlayer()を使う // MediaPlayer mp = MediaPlayer.create(context, uri); MediaPlayer mp = new MediaPlayer(); try { mp.setDataSource(context, [...]]]></description>
			<content:encoded><![CDATA[<p>AndroidのMediaPlayerで通知音を鳴らすときに、音量設定を反映させます。</p>
<p>MediaPlayer.createメソッドでインスタンスを作成した状態だと、「メディア音量」というものが反映されるので、setAudioStreamTypeメソッドで再生するオーディオのタイプを指定してやります。これでシステムの設定画面で指定した音量が反映されます。</p>
<p>が、setAudioStreamTypeメソッドをMediaPlayer.createで作成したインスタンスに対して実行すると、   <br />error (-38, 0)    <br />とか    <br />prepareAsync called in state 8    <br />とか    <br />setAudioStream called in state 8    <br />とかエラーが起こります。</p>
<p>これはMediaPlayer.createメソッドが、内部的にすでにprepare（準備）メソッドを呼んでいるためで、ストリームタイプの変更は、準備の前に実行しておく必要があります。</p>
<p>コードはこんな感じになりました。</p>
<p>
<div style="padding-bottom: 0px;margin: 0px;padding-left: 0px;padding-right: 0px;float: none;padding-top: 0px" class="wlWriterEditableSmartContent">
<pre>    public static void playSound(Context context, String url) {

        if (url != null) {
            Uri uri = Uri.parse(url);
            // MediaPlayer.createはprepareを実行してしまうのでnew MediaPlayer()を使う
            // MediaPlayer mp = MediaPlayer.create(context, uri);
            MediaPlayer mp = new MediaPlayer();
            try {
                mp.setDataSource(context, uri);
                // setAudioStreamTypeはprepare前に実行する必要がある
                mp.setAudioStreamType(AudioManager.STREAM_NOTIFICATION);
                mp.setLooping(false);
                // prepareの前後で使えるメソッドが異なる
                mp.prepare();
                mp.seekTo(0);
                mp.start();
            } catch (IllegalStateException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }
</pre>
</div>
<p>ちなみにマナーモードのときは、何も状態をチェックしなくてもストリームタイプを通知音にしておけば、音は鳴りません。MediaPlayer.createで作ると、メディアになってしまうので、マナーモードが反映されません。</p>
<p>それと、一部機種（音が長いと？）ではsetDataSourceが失敗する場合があるそうです。詳しくは以下。</p>
<p><a href="http://groups.google.com/group/android-group-japan/browse_thread/thread/0aee6ccefb983129" target="_blank">Ringtoneを再生する時にFileDescriptorを使いたい &#8211; 日本Androidの会 | Google グループ</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.loadlimits.info/2012/04/mediaplayer%e3%81%a7%e9%80%9a%e7%9f%a5%e9%9f%b3%e3%82%92%e9%b3%b4%e3%82%89%e3%81%99/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>タスクスケジューラとPHPのコンソールアプリケーション</title>
		<link>http://blog.loadlimits.info/2012/04/%e3%82%bf%e3%82%b9%e3%82%af%e3%82%b9%e3%82%b1%e3%82%b8%e3%83%a5%e3%83%bc%e3%83%a9%e3%81%a8php%e3%81%ae%e3%82%b3%e3%83%b3%e3%82%bd%e3%83%bc%e3%83%ab%e3%82%a2%e3%83%97%e3%83%aa%e3%82%b1%e3%83%bc/</link>
		<comments>http://blog.loadlimits.info/2012/04/%e3%82%bf%e3%82%b9%e3%82%af%e3%82%b9%e3%82%b1%e3%82%b8%e3%83%a5%e3%83%bc%e3%83%a9%e3%81%a8php%e3%81%ae%e3%82%b3%e3%83%b3%e3%82%bd%e3%83%bc%e3%83%ab%e3%82%a2%e3%83%97%e3%83%aa%e3%82%b1%e3%83%bc/#comments</comments>
		<pubDate>Fri, 06 Apr 2012 20:26:07 +0000</pubDate>
		<dc:creator>hotpi</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Silex]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://blog.loadlimits.info/?p=452</guid>
		<description><![CDATA[PHP5.3+Silexを使って、Windows上で定期的に処理をするコンソールアプリケーションを作っていたのですが、タスクスケジューラが起動するタイミングで、デスクトップにコマンドプロンプトのウィンドウ（DOS窓）が表示されてしまう現象に悩んでいました。 ウィンドウを表示させない方法として、ショートカットを作成してウィンドウ最小化するという手で試してみたのですが、taskeng.exeというタイトルのウィンドウが出たままになって止まってしまう状況でした。（多分PHPファイルを引数として認識していない） 結論としては簡単で、php.exeの代わりにphp-win.exeを使うだけです。 PHP: CLI と CGI &#8211; Manual php-win.exeはコンソールを表示させないので、これを実行ファイルとしてタスクスケジューラに登録すればOKです。 ついでにタスクスケジューラに登録する方法も書いておきます。５分おきにPHPを実行し続けるタスクをコマンドプロンプトから登録するコマンドです。最後の/Fは確認メッセージの抑制。 schtasks /create /tn &#34;Test PHP&#34; /tr &#34;C:\php\php-win.exe C:\hoge\console.php args&#34; /sc minute /mo 5 /it /F 削除はこちら。 schtasks /delete /tn &#34;Test PHP&#34; /f]]></description>
			<content:encoded><![CDATA[<p>PHP5.3+Silexを使って、Windows上で定期的に処理をするコンソールアプリケーションを作っていたのですが、タスクスケジューラが起動するタイミングで、デスクトップにコマンドプロンプトのウィンドウ（DOS窓）が表示されてしまう現象に悩んでいました。</p>
<p>ウィンドウを表示させない方法として、ショートカットを作成してウィンドウ最小化するという手で試してみたのですが、taskeng.exeというタイトルのウィンドウが出たままになって止まってしまう状況でした。（多分PHPファイルを引数として認識していない）</p>
<p>結論としては簡単で、php.exeの代わりにphp-win.exeを使うだけです。</p>
<p><a href="http://php.net/manual/ja/migration5.cli-cgi.php" target="_blank">PHP: CLI と CGI &#8211; Manual</a></p>
<p>php-win.exeはコンソールを表示させないので、これを実行ファイルとしてタスクスケジューラに登録すればOKです。</p>
<p>ついでにタスクスケジューラに登録する方法も書いておきます。５分おきにPHPを実行し続けるタスクをコマンドプロンプトから登録するコマンドです。最後の/Fは確認メッセージの抑制。</p>
<p>schtasks /create /tn &quot;Test PHP&quot; /tr &quot;C:\php\php-win.exe C:\hoge\console.php args&quot; /sc minute /mo 5 /it /F</p>
<p>削除はこちら。</p>
<p>schtasks /delete /tn &quot;Test PHP&quot; /f</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.loadlimits.info/2012/04/%e3%82%bf%e3%82%b9%e3%82%af%e3%82%b9%e3%82%b1%e3%82%b8%e3%83%a5%e3%83%bc%e3%83%a9%e3%81%a8php%e3%81%ae%e3%82%b3%e3%83%b3%e3%82%bd%e3%83%bc%e3%83%ab%e3%82%a2%e3%83%97%e3%83%aa%e3%82%b1%e3%83%bc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Silexで外部APIにHTTP Requestする</title>
		<link>http://blog.loadlimits.info/2012/04/silex%e3%81%a7%e5%a4%96%e9%83%a8api%e3%81%abhttp-request%e3%81%99%e3%82%8b/</link>
		<comments>http://blog.loadlimits.info/2012/04/silex%e3%81%a7%e5%a4%96%e9%83%a8api%e3%81%abhttp-request%e3%81%99%e3%82%8b/#comments</comments>
		<pubDate>Fri, 06 Apr 2012 05:30:35 +0000</pubDate>
		<dc:creator>hotpi</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Silex]]></category>
		<category><![CDATA[symfony]]></category>

		<guid isPermaLink="false">http://blog.loadlimits.info/?p=450</guid>
		<description><![CDATA[最近Silex始めました。 まずは外部のWebServerにリクエストを投げる方法です。軽量なWebClientであるBuzzを使います。gitでBuzz本体とProviderをダウンロードします。 $ cd vendor/ $ git clone https://github.com/kriswallsmith/Buzz.git Buzz $ cd Buzz/ $ git checkout v0.5 $ git submodule update --init $ cd .. $ git clone https://github.com/marcw/silex-buzz-extension.git silex-buzz-extension src/bootstrap.phpに追加します。 $app['autoloader']-&#62;registerNamespace('MarcW', __DIR__ . '/../vendor/silex-buzz-extension/lib'); $app-&#62;register(new MarcW\Silex\Provider\BuzzServiceProvider(), array( 'buzz.options' =&#62; array( ), 'buzz.class_path' =&#62; __DIR__ . '/../vendor/Buzz/lib', )); これで準備完了です。あとはアプリケーションから $app['buzz']-&#62;getClient()-&#62;setTimeout(30); $response = $app['buzz']-&#62;get('http://www.google.co.jp'); echo $app['buzz']-&#62;getLastRequest()."\n"; [...]]]></description>
			<content:encoded><![CDATA[<p>最近<a href="http://silex.sensiolabs.org/" target="_blank">Silex</a>始めました。</p>
<p>まずは外部のWebServerにリクエストを投げる方法です。軽量なWebClientであるBuzzを使います。gitでBuzz本体とProviderをダウンロードします。</p>
<div style="padding-bottom: 0px;margin: 0px;padding-left: 0px;padding-right: 0px;float: none;padding-top: 0px" class="wlWriterEditableSmartContent">
<pre>$ cd vendor/
$ git clone https://github.com/kriswallsmith/Buzz.git Buzz
$ cd Buzz/
$ git checkout v0.5
$ git submodule update --init
$ cd ..
$ git clone https://github.com/marcw/silex-buzz-extension.git silex-buzz-extension
</pre>
</div>
<p>src/bootstrap.phpに追加します。</p>
<div style="padding-bottom: 0px;margin: 0px;padding-left: 0px;padding-right: 0px;float: none;padding-top: 0px" class="wlWriterEditableSmartContent">
<pre>$app['autoloader']-&gt;registerNamespace('MarcW', __DIR__ . '/../vendor/silex-buzz-extension/lib');

$app-&gt;register(new MarcW\Silex\Provider\BuzzServiceProvider(), array(
    'buzz.options' =&gt; array(
    ),
    'buzz.class_path' =&gt; __DIR__ . '/../vendor/Buzz/lib',
));
</pre>
</div>
<p>これで準備完了です。あとはアプリケーションから</p>
<div style="padding-bottom: 0px;margin: 0px;padding-left: 0px;padding-right: 0px;float: none;padding-top: 0px" class="wlWriterEditableSmartContent">
<pre>$app['buzz']-&gt;getClient()-&gt;setTimeout(30);
$response = $app['buzz']-&gt;get('http://www.google.co.jp');

echo $app['buzz']-&gt;getLastRequest()."\n";
echo $response;
</pre>
</div>
<p>として呼び出すことができます。Buzzのデフォルトのタイムアウトが5秒で、早すぎたので30秒に変更しておきました。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.loadlimits.info/2012/04/silex%e3%81%a7%e5%a4%96%e9%83%a8api%e3%81%abhttp-request%e3%81%99%e3%82%8b/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

