<?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/category/javascript/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.loadlimits.info</link>
	<description>Just another WordPress weblog</description>
	<lastBuildDate>Sun, 29 Jan 2012 07:43:32 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>DoctrineMongoDBBundleでAbstractDoctrineExtensionのエラー</title>
		<link>http://blog.loadlimits.info/2012/01/doctrinemongodbbundle%e3%81%a7abstractdoctrineextension%e3%81%ae%e3%82%a8%e3%83%a9%e3%83%bc/</link>
		<comments>http://blog.loadlimits.info/2012/01/doctrinemongodbbundle%e3%81%a7abstractdoctrineextension%e3%81%ae%e3%82%a8%e3%83%a9%e3%83%bc/#comments</comments>
		<pubDate>Sun, 29 Jan 2012 07:43:32 +0000</pubDate>
		<dc:creator>hotpi</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[解決]]></category>
		<category><![CDATA[doctrine]]></category>
		<category><![CDATA[MongoDB]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[symfony]]></category>

		<guid isPermaLink="false">http://blog.loadlimits.info/2012/01/doctrinemongodbbundle%e3%81%a7abstractdoctrineextension%e3%81%ae%e3%82%a8%e3%83%a9%e3%83%bc/</guid>
		<description><![CDATA[PHP Fatal error:&#160; Class &#8216;Symfony\\Bridge\\Doctrine\\DependencyInjection\\AbstractDoctrineExtension&#8217; not found in /home/path/to/Symfony/vendor/bundles/Symfony/Bundle/DoctrineMongoDBBundle/DependencyInjection/DoctrineMongoDBExtension.php on line 31 php &#8211; DoctrineMongoDBBundle getting a fatal error in Symfony2 &#8211; Stack Overflow masterリポジトリが書き換えられていて、最新バージョンでは動かないのでdepsファイルにDoctrineMongoDBBundleのレポジトリを指定するときに、バージョン番号を指定する必要があるということでした。 DoctrineMongoDBBundleセクションにversion=v2.0.0を追加すればOKです。 [doctrine-mongodb] git=http://github.com/doctrine/mongodb.git [doctrine-mongodb-odm] git=http://github.com/doctrine/mongodb-odm.git [DoctrineMongoDBBundle] git=http://github.com/symfony/DoctrineMongoDBBundle.git target=/bundles/Symfony/Bundle/DoctrineMongoDBBundle version=v2.0.0]]></description>
			<content:encoded><![CDATA[<p>PHP Fatal error:&#160; Class &#8216;Symfony\\Bridge\\Doctrine\\DependencyInjection\\AbstractDoctrineExtension&#8217; not found in /home/path/to/Symfony/vendor/bundles/Symfony/Bundle/DoctrineMongoDBBundle/DependencyInjection/DoctrineMongoDBExtension.php on line 31</p>
<p><a href="http://stackoverflow.com/questions/7985248/doctrinemongodbbundle-getting-a-fatal-error-in-symfony2" target="_blank">php &#8211; DoctrineMongoDBBundle getting a fatal error in Symfony2 &#8211; Stack Overflow</a></p>
<p>masterリポジトリが書き換えられていて、最新バージョンでは動かないのでdepsファイルにDoctrineMongoDBBundleのレポジトリを指定するときに、バージョン番号を指定する必要があるということでした。   <br />DoctrineMongoDBBundleセクションにversion=v2.0.0を追加すればOKです。</p>
<div style="padding-bottom: 0px;margin: 0px;padding-left: 0px;padding-right: 0px;float: none;padding-top: 0px" class="wlWriterEditableSmartContent">
<pre>[doctrine-mongodb]
    git=http://github.com/doctrine/mongodb.git

[doctrine-mongodb-odm]
    git=http://github.com/doctrine/mongodb-odm.git

[DoctrineMongoDBBundle]
    git=http://github.com/symfony/DoctrineMongoDBBundle.git
    target=/bundles/Symfony/Bundle/DoctrineMongoDBBundle
    version=v2.0.0
</pre>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.loadlimits.info/2012/01/doctrinemongodbbundle%e3%81%a7abstractdoctrineextension%e3%81%ae%e3%82%a8%e3%83%a9%e3%83%bc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Windows版のPHP5.3がc0000005で強制終了する</title>
		<link>http://blog.loadlimits.info/2012/01/windows%e7%89%88%e3%81%aephp5-3%e3%81%8cc0000005%e3%81%a7%e5%bc%b7%e5%88%b6%e7%b5%82%e4%ba%86%e3%81%99%e3%82%8b/</link>
		<comments>http://blog.loadlimits.info/2012/01/windows%e7%89%88%e3%81%aephp5-3%e3%81%8cc0000005%e3%81%a7%e5%bc%b7%e5%88%b6%e7%b5%82%e4%ba%86%e3%81%99%e3%82%8b/#comments</comments>
		<pubDate>Mon, 23 Jan 2012 05:44:13 +0000</pubDate>
		<dc:creator>hotpi</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[解決]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[symfony]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://blog.loadlimits.info/2012/01/windows%e7%89%88%e3%81%aephp5-3%e3%81%8cc0000005%e3%81%a7%e5%bc%b7%e5%88%b6%e7%b5%82%e4%ba%86%e3%81%99%e3%82%8b/</guid>
		<description><![CDATA[Symfony 1.4.16をWindowsのPHP 5.3.9で実行したときに、特定の条件で強制終了する現象に悩まされていました。 主にSymfonyタスクでdoctrine:data-dumpなどを実行するときに落ちていました。 色々調べた結果、Symfonyに問題があるわけではなく、/lib/vendor/symfony/lib/config/sfDefineEnvironmentConfigHandler.class.phpがきっちり4096バイトだったということが原因でした。 つまり、PHP5.3.9では、4096バイトのファイルをrequireもしくはincludeするとc0000005(Access Violation)で強制終了します。CLIに限らず、Apache経由でも同じです。 試しに4096バイトの一切コードが書かれていないテキストファイルを作ってrequireしてみると、再現しました。 強制終了時のウィンドウと、内容は以下のとおり。 ちなみにモジュール名はnts(Non Thread Safe)版ならphp5.dll、ts(Thread Safe)版ならphp5ts.dllです。 どちらも確認しましたが、どちらも同じ現象です。モジュールは入っていても入っていなくても同じです。 問題の署名: &#160; 問題イベント名:&#160;&#160;&#160; APPCRASH &#160; アプリケーション名:&#160;&#160;&#160; php.exe &#160; アプリケーションのバージョン:&#160;&#160;&#160; 5.3.9.0 &#160; アプリケーションのタイムスタンプ:&#160;&#160;&#160; 4f0c5cd0 &#160; 障害モジュールの名前:&#160;&#160;&#160; php5.dll &#160; 障害モジュールのバージョン:&#160;&#160;&#160; 5.3.9.0 &#160; 障害モジュールのタイムスタンプ:&#160;&#160;&#160; 4f0c5dfb &#160; 例外コード:&#160;&#160;&#160; c0000005 &#160; 例外オフセット:&#160;&#160;&#160; 00090f5b &#160; OS バージョン:&#160;&#160;&#160; 6.1.7601.2.1.0.256.48 &#160; ロケール ID:&#160;&#160;&#160; 1041 &#160; 追加情報 1:&#160;&#160;&#160; 0a9e &#160; [...]]]></description>
			<content:encoded><![CDATA[<p>Symfony 1.4.16をWindowsのPHP 5.3.9で実行したときに、特定の条件で強制終了する現象に悩まされていました。   <br />主にSymfonyタスクでdoctrine:data-dumpなどを実行するときに落ちていました。</p>
<p>色々調べた結果、Symfonyに問題があるわけではなく、/lib/vendor/symfony/lib/config/sfDefineEnvironmentConfigHandler.class.phpがきっちり4096バイトだったということが原因でした。</p>
<p>つまり、PHP5.3.9では、4096バイトのファイルをrequireもしくはincludeするとc0000005(Access Violation)で強制終了します。CLIに限らず、Apache経由でも同じです。</p>
<p>試しに4096バイトの一切コードが書かれていないテキストファイルを作ってrequireしてみると、再現しました。</p>
<p>強制終了時のウィンドウと、内容は以下のとおり。   </p>
<p><a href="http://blog.loadlimits.info/wp-content/uploads/2012/01/image.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="image" src="http://blog.loadlimits.info/wp-content/uploads/2012/01/image_thumb.png" width="500" height="252" /></a></p>
<p>ちなみにモジュール名はnts(Non Thread Safe)版ならphp5.dll、ts(Thread Safe)版ならphp5ts.dllです。   <br />どちらも確認しましたが、どちらも同じ現象です。モジュールは入っていても入っていなくても同じです。</p>
<p>問題の署名:   <br />&#160; 問題イベント名:&#160;&#160;&#160; APPCRASH    <br />&#160; アプリケーション名:&#160;&#160;&#160; php.exe    <br />&#160; アプリケーションのバージョン:&#160;&#160;&#160; 5.3.9.0    <br />&#160; アプリケーションのタイムスタンプ:&#160;&#160;&#160; 4f0c5cd0    <br />&#160; 障害モジュールの名前:&#160;&#160;&#160; php5.dll    <br />&#160; 障害モジュールのバージョン:&#160;&#160;&#160; 5.3.9.0    <br />&#160; 障害モジュールのタイムスタンプ:&#160;&#160;&#160; 4f0c5dfb    <br />&#160; 例外コード:&#160;&#160;&#160; c0000005    <br />&#160; 例外オフセット:&#160;&#160;&#160; 00090f5b    <br />&#160; OS バージョン:&#160;&#160;&#160; 6.1.7601.2.1.0.256.48    <br />&#160; ロケール ID:&#160;&#160;&#160; 1041    <br />&#160; 追加情報 1:&#160;&#160;&#160; 0a9e    <br />&#160; 追加情報 2:&#160;&#160;&#160; 0a9e372d3b4ad19135b953a78882e789    <br />&#160; 追加情報 3:&#160;&#160;&#160; 0a9e    <br />&#160; 追加情報 4:&#160;&#160;&#160; 0a9e372d3b4ad19135b953a78882e789</p>
<p>多分現象はこのバグ報告と同じだと思います。   <br /><a href="https://bugs.php.net/bug.php?id=60758" target="_blank">PHP :: Bug #60758 :: require() crashes Apache</a></p>
<p>5.4.0RC5でも解決してないみたいですね。報告とほぼ同じですが、これで再現できます。</p>
<div style="padding-bottom: 0px;margin: 0px;padding-left: 0px;padding-right: 0px;float: none;padding-top: 0px" class="wlWriterEditableSmartContent">
<pre>&lt;?php
file_put_contents('test.txt', str_pad('', 4096));
include('./test.txt');
</pre>
</div>
<p>とりあえず対処法としては改行１文字でも増やしておけばいいってことですか…
  </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.loadlimits.info/2012/01/windows%e7%89%88%e3%81%aephp5-3%e3%81%8cc0000005%e3%81%a7%e5%bc%b7%e5%88%b6%e7%b5%82%e4%ba%86%e3%81%99%e3%82%8b/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>2012年</title>
		<link>http://blog.loadlimits.info/2012/01/2012%e5%b9%b4/</link>
		<comments>http://blog.loadlimits.info/2012/01/2012%e5%b9%b4/#comments</comments>
		<pubDate>Wed, 18 Jan 2012 22:33:16 +0000</pubDate>
		<dc:creator>hotpi</dc:creator>
				<category><![CDATA[妄想]]></category>

		<guid isPermaLink="false">http://blog.loadlimits.info/2012/01/2012%e5%b9%b4/</guid>
		<description><![CDATA[2012年もよろしくお願いします。 久しぶりにShade使いました。 タブレットでモデリングしたいなぁ。]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.loadlimits.info/wp-content/uploads/2012/01/nenga2012.jpg"><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="nenga2012" src="http://blog.loadlimits.info/wp-content/uploads/2012/01/nenga2012_thumb.jpg" width="640" height="480" /></a></p>
<p>2012年もよろしくお願いします。</p>
<p>久しぶりにShade使いました。</p>
<p>タブレットでモデリングしたいなぁ。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.loadlimits.info/2012/01/2012%e5%b9%b4/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>nginxのWindows版バイナリをビルドする</title>
		<link>http://blog.loadlimits.info/2011/12/nginx%e3%81%aewindows%e7%89%88%e3%83%90%e3%82%a4%e3%83%8a%e3%83%aa%e3%82%92%e3%83%93%e3%83%ab%e3%83%89%e3%81%99%e3%82%8b/</link>
		<comments>http://blog.loadlimits.info/2011/12/nginx%e3%81%aewindows%e7%89%88%e3%83%90%e3%82%a4%e3%83%8a%e3%83%aa%e3%82%92%e3%83%93%e3%83%ab%e3%83%89%e3%81%99%e3%82%8b/#comments</comments>
		<pubDate>Thu, 15 Dec 2011 16:47:07 +0000</pubDate>
		<dc:creator>hotpi</dc:creator>
				<category><![CDATA[解決]]></category>
		<category><![CDATA[MinGW]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[Visual Studio]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://blog.loadlimits.info/2011/12/nginx%e3%81%aewindows%e7%89%88%e3%83%90%e3%82%a4%e3%83%8a%e3%83%aa%e3%82%92%e3%83%93%e3%83%ab%e3%83%89%e3%81%99%e3%82%8b/</guid>
		<description><![CDATA[nginxのWindows版バイナリは公式で配布されていますが、nginxに追加のモジュールを入れたい場合、どうしても自分でビルドする必要がでてきます。 ビルド方法は公式のドキュメントに書かれています。 How to build nginx on the Win32 Platform with Visual C が、色々ハマるのでメモしておきます。ビルド環境はWindows7 Professional x64です。 必要なのは以下。 Microsoft Visual C++ Compiler Microsoft Windows SDK MinGW/MSYS ActivePerl PCRE zlib OpenSSL まず、VCコンパイラが必要なので、Microsoft Visual C++ Expressをインストールします。 Microsoft Visual Studio Express 上記ページのVisual C++ 2010 ExpressのWebインストールをクリックすればvc_web.exeがダウンロードできるので、それを実行してあとは言われるままにインストールすればOKです。 続いてMicrosoft Windows SDK（旧Platform SDK）をインストールします。 Windows SDK: Download the Windows SDK for Windows 7 and [...]]]></description>
			<content:encoded><![CDATA[<p>nginxのWindows版バイナリは公式で配布されていますが、nginxに追加のモジュールを入れたい場合、どうしても自分でビルドする必要がでてきます。</p>
<p>ビルド方法は公式のドキュメントに書かれています。</p>
<p><a href="http://nginx.org/en/docs/howto_build_on_win32.html" target="_blank">How to build nginx on the Win32 Platform with Visual C</a></p>
<p>が、色々ハマるのでメモしておきます。ビルド環境はWindows7 Professional x64です。</p>
<p>必要なのは以下。</p>
<ul>
<li>Microsoft Visual C++ Compiler</li>
<li>Microsoft Windows SDK</li>
<li>MinGW/MSYS</li>
<li>ActivePerl</li>
<li>PCRE</li>
<li>zlib</li>
<li>OpenSSL</li>
</ul>
<p>まず、VCコンパイラが必要なので、Microsoft Visual C++ Expressをインストールします。</p>
<p><a href="http://www.microsoft.com/japan/msdn/vstudio/express/" target="_blank">Microsoft Visual Studio Express</a></p>
<p>上記ページのVisual C++ 2010 ExpressのWebインストールをクリックすればvc_web.exeがダウンロードできるので、それを実行してあとは言われるままにインストールすればOKです。</p>
<p>続いてMicrosoft Windows SDK（旧Platform SDK）をインストールします。</p>
<p><a href="http://msdn.microsoft.com/en-us/windowsserver/bb980924.aspx" target="_blank">Windows SDK: Download the Windows SDK for Windows 7 and More | MSDN</a></p>
<p>「Install Now」を押せばインストールできます。こちらもそのままインストールすればOK。</p>
<p>OpenSSLのコンパイルにPerlが必要なので、ActivePerlをインストールします。32bit版と64bit版がありますが、僕は64bit版をインストールしました。</p>
<p><a href="http://www.activestate.com/activeperl/downloads" target="_blank">ActivePerl Downloads &#8211; Perl Binaries for Windows, Linux and Mac | ActiveState</a></p>
<p>続けてMinGW/MSYSのインストールをします。</p>
<p><a href="http://sourceforge.net/projects/mingw/files/" target="_blank">MinGW &#8211; Minimalist GNU for Windows &#8211; Browse Files at SourceForge.net</a></p>
<p>「Looking for the latest version?」と書かれている隣のファイルをダウンロードします。</p>
<p>インストールが終わったら環境変数の設定をします。</p>
<p>MinGW Shellを起動して、パスを設定します。</p>
<p>$ export LIB=&quot;C:\\Program Files (x86)\\Microsoft Visual Studio 10.0\\VC\\lib;C:\\Program Files\\Microsoft SDKs\\Windows\\v7.1\\Lib&quot;   <br />$ export INCLUDE=&quot;C:\\Program Files (x86)\\Microsoft Visual Studio 10.0\\VC\\include;C:\\Program Files\\Microsoft SDKs\\Windows\\v7.1\\Include&quot;    <br />$ export PATH=&quot;$PATH:/c/Perl64/bin:/c/Program Files (x86)/Microsoft Visual Studio 10.0/VC/bin:/c/Program Files (x86)/Microsoft Visual Studio 10.0/Common7/IDE:/c/Program Files/Microsoft SDKs/Windows/v7.1/Bin&quot;    </p>
<p>nginxのソースコードをダウンロードしましょう。tarボールで提供されているものには、Windows用のConfigureが入っていないらしいので、svnから取得します。</p>
<p>svnコマンドが使えるのであれば、   <br />svn co svn://svn.nginx.org/tags/release-(バージョン番号)    <br />でチェックアウトできます。僕はrelease-1.0.10を使いました。</p>
<p>なぜかTortoiseSVNではtags/release-1.0.10が表示できませんでした。</p>
<p>ダウンロードしたソースコードはMSYSのHOMEディレクトリに置きます。</p>
<p>C:\MinGW\msys\1.0\home\(ユーザー名)\nginx   <br />としました。</p>
<p>PCRE、zlib、OpenSSLをダウンロードします。</p>
<p><a href="http://sourceforge.net/projects/pcre/files/pcre/" target="_blank">PCRE &#8211; Browse /pcre at SourceForge.net</a></p>
<p><a href="http://zlib.net/" target="_blank">zlib Home Site</a></p>
<p><a href="http://www.openssl.org/source/" target="_blank">OpenSSL: Source, Tarballs</a></p>
<p>pcre-8.20.zip、zlib-1.2.5.tar.gz、openssl-1.0.0e.tar.gzをダウンロードしました。</p>
<p>nginxディレクトリの下にobjs/libディレクトリを作成します。ここに、先ほどダウンロードした３ファイルを解凍したものを設置します。</p>
<p>これで準備はできたので、ビルドします。</p>
<p>公式のビルド方法に載っているConfigureを実行します。が、PCREのバージョンは8.20になっていたので、&#8211;with-pcreの引数は変更します。あとは適宜合わせてください。</p>
<p>$ auto/configure &#8211;with-cc=cl &#8211;builddir=objs &#8211;prefix= \   <br />&#8211;conf-path=conf/nginx.conf &#8211;pid-path=logs/nginx.pid \    <br />&#8211;http-log-path=logs/access.log &#8211;error-log-path=logs/error.log \    <br />&#8211;sbin-path=nginx.exe &#8211;http-client-body-temp-path=temp/client_body_temp \    <br />&#8211;http-proxy-temp-path=temp/proxy_temp \    <br />&#8211;http-fastcgi-temp-path=temp/fastcgi_temp \    <br />&#8211;with-cc-opt=-DFD_SETSIZE=1024 &#8211;with-pcre=objs/lib/pcre-8.20 \    <br />&#8211;with-zlib=objs/lib/zlib-1.2.5 &#8211;with-openssl=objs/lib/openssl-1.0.0e \    <br />&#8211;with-select_module &#8211;with-http_ssl_module &#8211;with-ipv6</p>
<p>Configureが成功したら、nmakeでビルドします。</p>
<p>$ nmake -f objs/Makefile</p>
<p>これで、何も問題がなければnginx/objsディレクトリにnginx.exeファイルが出来上がっているはずです。</p>
<p>このnginx.exeファイルを、ひとつ上のディレクトリ(nginx)に設置して、</p>
<p>$ mkdir logs   <br />$ mkdir temp</p>
<p>として、</p>
<p>$ start nginx.exe</p>
<p>で起動できます。</p>
<p>これでやっと追加モジュールをインストールできるというもの。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.loadlimits.info/2011/12/nginx%e3%81%aewindows%e7%89%88%e3%83%90%e3%82%a4%e3%83%8a%e3%83%aa%e3%82%92%e3%83%93%e3%83%ab%e3%83%89%e3%81%99%e3%82%8b/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SimpleDateFormatがメモリを食い尽くす件</title>
		<link>http://blog.loadlimits.info/2011/11/simpledateformat%e3%81%8c%e3%83%a1%e3%83%a2%e3%83%aa%e3%82%92%e9%a3%9f%e3%81%84%e5%b0%bd%e3%81%8f%e3%81%99%e4%bb%b6/</link>
		<comments>http://blog.loadlimits.info/2011/11/simpledateformat%e3%81%8c%e3%83%a1%e3%83%a2%e3%83%aa%e3%82%92%e9%a3%9f%e3%81%84%e5%b0%bd%e3%81%8f%e3%81%99%e4%bb%b6/#comments</comments>
		<pubDate>Sat, 26 Nov 2011 07:44:20 +0000</pubDate>
		<dc:creator>hotpi</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://blog.loadlimits.info/2011/11/simpledateformat%e3%81%8c%e3%83%a1%e3%83%a2%e3%83%aa%e3%82%92%e9%a3%9f%e3%81%84%e5%b0%bd%e3%81%8f%e3%81%99%e4%bb%b6/</guid>
		<description><![CDATA[java.text.SimpleDateFormatのインスタンスを毎回作ってRFC2822の日付文字列からDate型に変換していたら、GCされずにメモリを食いつぶしてしまったので対策。 public static Date convertRfc2822toDate(String from) { String pattern = "EEE, dd MMM yyyy HH:mm:ss Z"; SimpleDateFormat format = new SimpleDateFormat(pattern); Date date = null; synchronized (format) { try { date = (Date) format.parse(from); } catch (ParseException e) { date = new Date(); } } format = null; return date; } 上は元のコード。下は修正版。 private static SimpleDateFormat [...]]]></description>
			<content:encoded><![CDATA[<p>java.text.SimpleDateFormatのインスタンスを毎回作ってRFC2822の日付文字列からDate型に変換していたら、GCされずにメモリを食いつぶしてしまったので対策。</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 Date convertRfc2822toDate(String from) {
		String pattern = "EEE, dd MMM yyyy HH:mm:ss Z";
		SimpleDateFormat format = new SimpleDateFormat(pattern);
		Date date = null;
		synchronized (format) {
			try {
				date = (Date) format.parse(from);
			} catch (ParseException e) {
				date = new Date();
			}
		}
		format = null;
		return date;
	}
</pre>
</div>
<p>上は元のコード。下は修正版。</p>
<p><div style="padding-bottom: 0px;margin: 0px;padding-left: 0px;padding-right: 0px;float: none;padding-top: 0px" class="wlWriterEditableSmartContent">
<pre>	private static SimpleDateFormat format = null;

	public static Date convertRfc2822toDate(String from) {
		String pattern = "EEE, dd MMM yyyy HH:mm:ss Z";

		Date date = null;
		if (format == null) {
			format = new SimpleDateFormat();
		}
		synchronized (format) {
			format.applyPattern(pattern);
			try {
				date = format.parse(from);
			} catch (ParseException e) {
				date = new Date();
			}
		}

		return date;
	}
</pre>
</div>
<p>完全なスレッドセーフにはなっていないけど、メモリリークは解消できたので良し。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.loadlimits.info/2011/11/simpledateformat%e3%81%8c%e3%83%a1%e3%83%a2%e3%83%aa%e3%82%92%e9%a3%9f%e3%81%84%e5%b0%bd%e3%81%8f%e3%81%99%e4%bb%b6/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PythonのPyDHCPLibを使ってDHCPパケットを読む</title>
		<link>http://blog.loadlimits.info/2011/11/python%e3%81%aepydhcplib%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6dhcp%e3%83%91%e3%82%b1%e3%83%83%e3%83%88%e3%82%92%e8%aa%ad%e3%82%80/</link>
		<comments>http://blog.loadlimits.info/2011/11/python%e3%81%aepydhcplib%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6dhcp%e3%83%91%e3%82%b1%e3%83%83%e3%83%88%e3%82%92%e8%aa%ad%e3%82%80/#comments</comments>
		<pubDate>Tue, 22 Nov 2011 04:09:22 +0000</pubDate>
		<dc:creator>hotpi</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[DHCP]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://blog.loadlimits.info/2011/11/python%e3%81%aepydhcplib%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6dhcp%e3%83%91%e3%82%b1%e3%83%83%e3%83%88%e3%82%92%e8%aa%ad%e3%82%80/</guid>
		<description><![CDATA[PyDHCPLibはPure Pythonで書かれたDHCPパケットのリード/ライトライブラリです。 Pythonで書かれているので、LinuxでもWindowsでも動きます。（Windowsのときはちょっと対策が必要） まずはdebian Linuxの場合。（aptでインストールできました。追記参照） $ wget http://pydhcplib.tuxfamily.org/download/pydhcplib-0.6.2.tar.gz $ tar xvzf pydhcplib-0.6.2.tar.gz $ cd pydhcplib-0.6.2 $ sudo /usr/bin/python2.6 ./setup.py install /usr/local/lib/python2.6/dist-packages/pydhcplib に入りました。 流れてくるパケットを読み取るためにはサーバとして動かします。 examplesディレクトリの中にサーバ用のサンプルが入っているので実行します。 $ sudo /usr/bin/python2.6 ./examples/server_example.py これでOKです。 ちなみにroot権限で実行しないと、以下のエラーが出てポートが開けられません。 pydhcplib.DhcpNetwork.BindToAddress error : [Errno 13] Permission denied ではWindowsの場合。 Windows 7にもPython 2.7.2をインストールして使って見ました。 &#62; cd pydhcplib-0.6.2 &#62; C:\Python27\python.exe .\setup.py install C:\Python27\Lib\site-packages\pydhcplibにインストールされました。 &#62; C:\Python27\python.exe .\examples\server_example.py Traceback (most recent [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://pydhcplib.tuxfamily.org/pmwiki/index.php" target="_blank">PyDHCPLib</a>はPure Pythonで書かれたDHCPパケットのリード/ライトライブラリです。</p>
<p>Pythonで書かれているので、LinuxでもWindowsでも動きます。（Windowsのときはちょっと対策が必要）</p>
<p>まずはdebian Linuxの場合。（aptでインストールできました。追記参照）</p>
<p>$ wget <a href="http://pydhcplib.tuxfamily.org/download/pydhcplib-0.6.2.tar.gz">http://pydhcplib.tuxfamily.org/download/pydhcplib-0.6.2.tar.gz</a>     <br />$ tar xvzf pydhcplib-0.6.2.tar.gz     <br />$ cd pydhcplib-0.6.2     <br />$ sudo /usr/bin/python2.6 ./setup.py install</p>
<p>/usr/local/lib/python2.6/dist-packages/pydhcplib    <br />に入りました。</p>
<p>流れてくるパケットを読み取るためにはサーバとして動かします。    <br />examplesディレクトリの中にサーバ用のサンプルが入っているので実行します。</p>
<p>$ sudo /usr/bin/python2.6 ./examples/server_example.py</p>
<p>これでOKです。</p>
<p>ちなみにroot権限で実行しないと、以下のエラーが出てポートが開けられません。    <br />pydhcplib.DhcpNetwork.BindToAddress error : [Errno 13] Permission denied</p>
<p>ではWindowsの場合。</p>
<p>Windows 7にもPython 2.7.2をインストールして使って見ました。</p>
<p>&gt; cd pydhcplib-0.6.2    <br />&gt; C:\Python27\python.exe .\setup.py install</p>
<p>C:\Python27\Lib\site-packages\pydhcplibにインストールされました。</p>
<p>&gt; C:\Python27\python.exe .\examples\server_example.py    <br />Traceback (most recent call last):     <br />&#160; File &quot;.\examples\server_example.py&quot;, line 21, in &lt;module&gt;     <br />&#160;&#160;&#160; from pydhcplib.dhcp_network import *     <br />&#160; File &quot;C:\Python27\lib\site-packages\pydhcplib\dhcp_network.py&quot;, line 22, in &lt;module&gt;     <br />&#160;&#160;&#160; import IN     <br />ImportError: No module named IN</p>
<p>インポートエラー。INモジュールというものがないとのこと。</p>
<p>INモジュールはdebianではPythonのplat-linux2ディレクトリ以下に入っています。中身は    <br /># Generated by h2py from /usr/include/netinet/in.h     <br />netinetから変換した定数の定義でした。</p>
<p>なので、必要なところだけコピーしてくることにします。</p>
<p>$ cat /usr/lib/python2.6/plat-linux2/IN.py |grep SO_BINDTODEVICE    <br />SO_BINDTODEVICE = 25</p>
<p>このSO_BINDTODEVICEの定義だけを書いたIN.pyファイルをexamplesディレクトリに置けばOKです。</p>
<p>IN.py    <br />SO_BINDTODEVICE = 25</p>
<p>これで試しにiPod touchをLANに接続して見ました。</p>
<p>&gt; C:\Python27\python.exe .\examples\server_example.py    <br /># Header fields     <br />op : BOOTREQUEST     <br />htype : 1     <br />hlen : 6     <br />hops : 0     <br />xid : 3472825851     <br />secs : 1     <br />flags : 0     <br />ciaddr : 0.0.0.0     <br />yiaddr : 0.0.0.0     <br />siaddr : 0.0.0.0     <br />giaddr : 0.0.0.0     <br />chaddr : 00:26:bb:XX:XX:XX     <br />sname :     <br />file :     <br /># Options fields     <br />client_identifier :     <br />parameter_request_list : subnet_mask,router,domain_name_server,domain_name,domain_search,252     <br />host_name : homma2     <br />request_ip_address : 172.18.0.21     <br />dhcp_message_type : DHCP_REQUEST     <br />ip_address_lease_time : 7776000     <br />maximum_dhcp_message_size : 1285</p>
<p>これでネットワークに接続された端末のリースタイム・MACアドレス・IPアドレスが取れました。</p>
<p>追記</p>
<p>debian squeezeではパッケージ登録されていました。   <br />なので、aptで簡単にインストールできます。</p>
<p>$ aptitude search pydhcplib   <br />p&#160;&#160; python-pydhcplib&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#8211; Python DHCP client/server library    <br />v&#160;&#160; python2.5-pydhcplib&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#8211;    <br />v&#160;&#160; python2.6-pydhcplib&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#8211;    <br />$ sudo aptitude install python-pydhcplib</p>
<p>以上。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.loadlimits.info/2011/11/python%e3%81%aepydhcplib%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6dhcp%e3%83%91%e3%82%b1%e3%83%83%e3%83%88%e3%82%92%e8%aa%ad%e3%82%80/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DebianからWindows7の共有フォルダにアクセスする</title>
		<link>http://blog.loadlimits.info/2011/11/debian%e3%81%8b%e3%82%89windows7%e3%81%ae%e5%85%b1%e6%9c%89%e3%83%95%e3%82%a9%e3%83%ab%e3%83%80%e3%81%ab%e3%82%a2%e3%82%af%e3%82%bb%e3%82%b9%e3%81%99%e3%82%8b/</link>
		<comments>http://blog.loadlimits.info/2011/11/debian%e3%81%8b%e3%82%89windows7%e3%81%ae%e5%85%b1%e6%9c%89%e3%83%95%e3%82%a9%e3%83%ab%e3%83%80%e3%81%ab%e3%82%a2%e3%82%af%e3%82%bb%e3%82%b9%e3%81%99%e3%82%8b/#comments</comments>
		<pubDate>Thu, 17 Nov 2011 12:01:16 +0000</pubDate>
		<dc:creator>hotpi</dc:creator>
				<category><![CDATA[解決]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[windows 7]]></category>

		<guid isPermaLink="false">http://blog.loadlimits.info/2011/11/debian%e3%81%8b%e3%82%89windows7%e3%81%ae%e5%85%b1%e6%9c%89%e3%83%95%e3%82%a9%e3%83%ab%e3%83%80%e3%81%ab%e3%82%a2%e3%82%af%e3%82%bb%e3%82%b9%e3%81%99%e3%82%8b/</guid>
		<description><![CDATA[実際の構成としてはVirtual PC内のdebian(squeeze)からホストOSのWindows7の共有フォルダにアクセスするという要件なのだけど、特に問題なくできたので。 ちなみにLoopback Adapter接続でした。 # apt-get install samba smbfs # mkdir /media/videos # mount -t cifs -o username=Windows側のユーザー名,codepage=cp932,iocharset=utf8 //Windows側のIP/Users/Public/Videos /media/videos パスワードの入力を求められます。 Windows7だと、Publicフォルダが「パブリック」とか日本語になっていたりするので、コマンドプロンプトを使ってあらかじめ名前を確認しておきます。 SCPでVirtualPCと巨大なファイルをやり取りしようとするとなぜかやたら遅くて… マウントしてしまえばさっくり行けます。]]></description>
			<content:encoded><![CDATA[<p>実際の構成としてはVirtual PC内のdebian(squeeze)からホストOSのWindows7の共有フォルダにアクセスするという要件なのだけど、特に問題なくできたので。   <br />ちなみにLoopback Adapter接続でした。</p>
<p># apt-get install samba smbfs   <br /># mkdir /media/videos    <br /># mount -t cifs -o username=Windows側のユーザー名,codepage=cp932,iocharset=utf8 //Windows側のIP/Users/Public/Videos /media/videos</p>
<p>パスワードの入力を求められます。</p>
<p>Windows7だと、Publicフォルダが「パブリック」とか日本語になっていたりするので、コマンドプロンプトを使ってあらかじめ名前を確認しておきます。</p>
<p>SCPでVirtualPCと巨大なファイルをやり取りしようとするとなぜかやたら遅くて…   <br />マウントしてしまえばさっくり行けます。    </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.loadlimits.info/2011/11/debian%e3%81%8b%e3%82%89windows7%e3%81%ae%e5%85%b1%e6%9c%89%e3%83%95%e3%82%a9%e3%83%ab%e3%83%80%e3%81%ab%e3%82%a2%e3%82%af%e3%82%bb%e3%82%b9%e3%81%99%e3%82%8b/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>loadImage時にcontains a path separatorのIllegalArgumentExceptionが発生する原因</title>
		<link>http://blog.loadlimits.info/2011/11/loadimage%e6%99%82%e3%81%abcontains-a-path-separator%e3%81%aeillegalargumentexception%e3%81%8c%e7%99%ba%e7%94%9f%e3%81%99%e3%82%8b%e5%8e%9f%e5%9b%a0/</link>
		<comments>http://blog.loadlimits.info/2011/11/loadimage%e6%99%82%e3%81%abcontains-a-path-separator%e3%81%aeillegalargumentexception%e3%81%8c%e7%99%ba%e7%94%9f%e3%81%99%e3%82%8b%e5%8e%9f%e5%9b%a0/#comments</comments>
		<pubDate>Sun, 13 Nov 2011 15:45:20 +0000</pubDate>
		<dc:creator>hotpi</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Processing]]></category>

		<guid isPermaLink="false">http://blog.loadlimits.info/2011/11/loadimage%e6%99%82%e3%81%abcontains-a-path-separator%e3%81%aeillegalargumentexception%e3%81%8c%e7%99%ba%e7%94%9f%e3%81%99%e3%82%8b%e5%8e%9f%e5%9b%a0/</guid>
		<description><![CDATA[Processing for Android 1.5.1でPApplet.loadImageを実行するときにエラー。 java.lang.IllegalArgumentException: File /mnt/sdcard/Android/data/com.sample.android.apptest/hoge.jpg contains a path separator ファイルが存在しない場合に発生します。 エラーメッセージわかりにくいね。 loadImageメソッドは色々なソースからファイルが取得できるかを確認しに行くのでこういうことになっているのだと思います。]]></description>
			<content:encoded><![CDATA[<p>Processing for Android 1.5.1でPApplet.loadImageを実行するときにエラー。</p>
<p>java.lang.IllegalArgumentException: File /mnt/sdcard/Android/data/com.sample.android.apptest/hoge.jpg contains a path separator</p>
<p>ファイルが存在しない場合に発生します。   <br />エラーメッセージわかりにくいね。    <br />loadImageメソッドは色々なソースからファイルが取得できるかを確認しに行くのでこういうことになっているのだと思います。    </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.loadlimits.info/2011/11/loadimage%e6%99%82%e3%81%abcontains-a-path-separator%e3%81%aeillegalargumentexception%e3%81%8c%e7%99%ba%e7%94%9f%e3%81%99%e3%82%8b%e5%8e%9f%e5%9b%a0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ProcessingをAndroidで使う（導入編）</title>
		<link>http://blog.loadlimits.info/2011/11/processing%e3%82%92android%e3%81%a7%e4%bd%bf%e3%81%86%ef%bc%88%e5%b0%8e%e5%85%a5%e7%b7%a8%ef%bc%89/</link>
		<comments>http://blog.loadlimits.info/2011/11/processing%e3%82%92android%e3%81%a7%e4%bd%bf%e3%81%86%ef%bc%88%e5%b0%8e%e5%85%a5%e7%b7%a8%ef%bc%89/#comments</comments>
		<pubDate>Sun, 13 Nov 2011 00:58:33 +0000</pubDate>
		<dc:creator>hotpi</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Processing]]></category>

		<guid isPermaLink="false">http://blog.loadlimits.info/2011/11/processing%e3%82%92android%e3%81%a7%e4%bd%bf%e3%81%86%ef%bc%88%e5%b0%8e%e5%85%a5%e7%b7%a8%ef%bc%89/</guid>
		<description><![CDATA[ひと通りProcessingを利用してAndroidアプリを作ってみたので、色々書いておこうと思います。 まずは一番簡単なProcessingのIDEを使った方法です。 Download \ Processing.org まずはProcessingをダウンロードします。執筆時点での最新安定バージョンは1.5.1です。Android SDKはインストールしておく必要があります。 実行すると、ProcessingのIDE（統合開発環境）が開きます。 Processingについてはあまり説明しません。とりあえずはAndroidモードに切り替えます。右上の「STANDARD」と表示されているボタンを押すと、リストが表示されます。ただのラベルじゃないので、押せます。 Androidを選ぶと、IDEの色が変わります。右上のモードが「ANDROID」になっていることを確認します。 メニューのFileからExamplesを開きます。 ここで適当にサンプルを選んで、ダブルクリックで開きます。 ソースコードを読み込んだあとに、左上の再生ボタンを押せばエミュレータで動作を試せます。 が、残念ながら、今はAndroid SDKのバージョンが上がったことで、エラーが出て実行できなくなっています。 BUILD FAILED C:\Users\test\AppData\Local\Temp\android397981578064449760.pde\build.xml:16: Error. You are using an obsolete build.xml You need to delete it and regenerate it using &#160;&#160;&#160; android update project Total time: 0 seconds このままProcessing IDEで遊びたい場合は、まだ開発中のProcessing 2.0a4などを使えば上記の問題も解決しているようです。恐らく近日中にリリース版が出るかと。 tadpolizemedia.blog &#124; processing1.5.1 と Android エミュレータ(android-sdk_r14-windows.zip)が連動しない件 詳しくは上記サイトにありましたので参考に。2.0a4でも、再生ボタンでそのまま実行はできませんでした。先にエミュレータを起動しておけば大丈夫です。 実機に転送する場合はメニューのSketchから、Run on Deviceを実行してください。 [...]]]></description>
			<content:encoded><![CDATA[<p>ひと通りProcessingを利用してAndroidアプリを作ってみたので、色々書いておこうと思います。</p>
<p>まずは一番簡単なProcessingのIDEを使った方法です。</p>
<p><a href="http://processing.org/download/" target="_blank">Download \ Processing.org</a></p>
<p>まずはProcessingをダウンロードします。執筆時点での最新安定バージョンは1.5.1です。Android SDKはインストールしておく必要があります。</p>
<p>実行すると、ProcessingのIDE（統合開発環境）が開きます。</p>
<p><a href="http://blog.loadlimits.info/wp-content/uploads/2011/11/WS000025.jpg"><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="WS000025" src="http://blog.loadlimits.info/wp-content/uploads/2011/11/WS000025_thumb.jpg" width="204" height="244" /></a></p>
<p>Processingについてはあまり説明しません。とりあえずはAndroidモードに切り替えます。右上の「STANDARD」と表示されているボタンを押すと、リストが表示されます。ただのラベルじゃないので、押せます。</p>
<p><a href="http://blog.loadlimits.info/wp-content/uploads/2011/11/WS000026.jpg"><img style="border-bottom: 0px;border-left: 0px;margin: 0px;padding-left: 0px;padding-right: 0px;border-top: 0px;border-right: 0px;padding-top: 0px" border="0" alt="WS000026" src="http://blog.loadlimits.info/wp-content/uploads/2011/11/WS000026_thumb.jpg" width="169" height="151" /></a></p>
<p><a href="http://blog.loadlimits.info/wp-content/uploads/2011/11/WS000027.jpg"><img style="border-bottom: 0px;border-left: 0px;margin: 0px;padding-left: 0px;padding-right: 0px;border-top: 0px;border-right: 0px;padding-top: 0px" border="0" alt="WS000027" src="http://blog.loadlimits.info/wp-content/uploads/2011/11/WS000027_thumb.jpg" width="201" height="125" /></a></p>
<p>Androidを選ぶと、IDEの色が変わります。右上のモードが「ANDROID」になっていることを確認します。</p>
<p><a href="http://blog.loadlimits.info/wp-content/uploads/2011/11/WS000028.jpg"><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="WS000028" src="http://blog.loadlimits.info/wp-content/uploads/2011/11/WS000028_thumb.jpg" width="204" height="244" /></a></p>
<p>メニューのFileからExamplesを開きます。</p>
<p><a href="http://blog.loadlimits.info/wp-content/uploads/2011/11/WS000003.jpg"><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="WS000003" src="http://blog.loadlimits.info/wp-content/uploads/2011/11/WS000003_thumb.jpg" width="135" height="244" /></a></p>
<p>ここで適当にサンプルを選んで、ダブルクリックで開きます。</p>
<p>ソースコードを読み込んだあとに、左上の再生ボタンを押せばエミュレータで動作を試せます。</p>
<p><a href="http://blog.loadlimits.info/wp-content/uploads/2011/11/WS000004.jpg"><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="WS000004" src="http://blog.loadlimits.info/wp-content/uploads/2011/11/WS000004_thumb.jpg" width="103" height="82" /></a></p>
<p>が、残念ながら、今はAndroid SDKのバージョンが上がったことで、エラーが出て実行できなくなっています。</p>
<p>BUILD FAILED   <br />C:\Users\test\AppData\Local\Temp\android397981578064449760.pde\build.xml:16:    </p>
<p>Error. You are using an obsolete build.xml    <br />You need to delete it and regenerate it using    <br />&#160;&#160;&#160; android update project    </p>
<p>Total time: 0 seconds</p>
<p>このままProcessing IDEで遊びたい場合は、まだ開発中のProcessing 2.0a4などを使えば上記の問題も解決しているようです。恐らく近日中にリリース版が出るかと。</p>
<p><a href="http://tadpolizemedia.blog118.fc2.com/blog-entry-155.html" target="_blank">tadpolizemedia.blog | processing1.5.1 と Android エミュレータ(android-sdk_r14-windows.zip)が連動しない件</a></p>
<p>詳しくは上記サイトにありましたので参考に。2.0a4でも、再生ボタンでそのまま実行はできませんでした。先にエミュレータを起動しておけば大丈夫です。</p>
<p>実機に転送する場合はメニューのSketchから、Run on Deviceを実行してください。</p>
<p>Processing IDEで開発するのは本質ではないので、この辺で。次回はProcessing IDEで書いたコードをEclipseのプロジェクト形式にエクスポートする方法を紹介します。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.loadlimits.info/2011/11/processing%e3%82%92android%e3%81%a7%e4%bd%bf%e3%81%86%ef%bc%88%e5%b0%8e%e5%85%a5%e7%b7%a8%ef%bc%89/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AndroidとTwitter4Jで公式画像アップロードAPIを使う</title>
		<link>http://blog.loadlimits.info/2011/10/android%e3%81%a8twitter4j%e3%81%a7%e5%85%ac%e5%bc%8f%e7%94%bb%e5%83%8f%e3%82%a2%e3%83%83%e3%83%97%e3%83%ad%e3%83%bc%e3%83%89api%e3%82%92%e4%bd%bf%e3%81%86/</link>
		<comments>http://blog.loadlimits.info/2011/10/android%e3%81%a8twitter4j%e3%81%a7%e5%85%ac%e5%bc%8f%e7%94%bb%e5%83%8f%e3%82%a2%e3%83%83%e3%83%97%e3%83%ad%e3%83%bc%e3%83%89api%e3%82%92%e4%bd%bf%e3%81%86/#comments</comments>
		<pubDate>Wed, 26 Oct 2011 01:17:27 +0000</pubDate>
		<dc:creator>hotpi</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[解決]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://blog.loadlimits.info/2011/10/android%e3%81%a8twitter4j%e3%81%a7%e5%85%ac%e5%bc%8f%e7%94%bb%e5%83%8f%e3%82%a2%e3%83%83%e3%83%97%e3%83%ad%e3%83%bc%e3%83%89api%e3%82%92%e4%bd%bf%e3%81%86/</guid>
		<description><![CDATA[Twitter4Jが2.2.5になって、Twitter APIのstatuses/update_with_mediaが使えるようになったというので、さっそく実験してみました。 Twitter4J 2.2.5 released &#8211; Twitter4J &#124; Google グループ とりあえずダウンロードして解凍します。twitter4j-android-2.2.5.zipの方です。 http://twitter4j.org/en/index.html#download Eclipseで適当にプロジェクト作ります。プロジェクト作ったらプロジェクトのプロパティを開いて、Java Build Pathの設定画面を表示します。 Librariesタブを開いて、Add External JARsをクリックします。 先ほど展開したフォルダから、libの下にあるtwitter4j-core-android-2.2.5.jarとtwitter4j-media-support-android-2.2.5.jarを選択してJARを取り込みます。 あとはこんな感じで実験。ギャラリーの画像を選択してメッセージつけてポストします。 UpdateWithMediaActivity.java package info.loadlimits.android.updatewithmedia; import java.io.File; import twitter4j.TwitterException; import twitter4j.conf.Configuration; import twitter4j.conf.ConfigurationBuilder; import twitter4j.media.ImageUpload; import twitter4j.media.ImageUploadFactory; import android.app.Activity; import android.content.ContentResolver; import android.content.Intent; import android.database.Cursor; import android.net.Uri; import android.os.Bundle; import android.provider.MediaStore; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; [...]]]></description>
			<content:encoded><![CDATA[<p>Twitter4Jが2.2.5になって、Twitter APIのstatuses/update_with_mediaが使えるようになったというので、さっそく実験してみました。</p>
<p><a href="https://groups.google.com/group/twitter4j/browse_thread/thread/ae7c042736128909?pli=1" target="_blank">Twitter4J 2.2.5 released &#8211; Twitter4J | Google グループ</a></p>
<p>とりあえずダウンロードして解凍します。twitter4j-android-2.2.5.zipの方です。</p>
<p><a href="http://twitter4j.org/en/index.html#download">http://twitter4j.org/en/index.html#download</a></p>
<p>Eclipseで適当にプロジェクト作ります。プロジェクト作ったらプロジェクトのプロパティを開いて、Java Build Pathの設定画面を表示します。</p>
<p><a href="http://blog.loadlimits.info/wp-content/uploads/2011/10/image.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="image" src="http://blog.loadlimits.info/wp-content/uploads/2011/10/image_thumb.png" width="475" height="270" /></a></p>
<p>Librariesタブを開いて、Add External JARsをクリックします。</p>
<p><a href="http://blog.loadlimits.info/wp-content/uploads/2011/10/image1.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="image" src="http://blog.loadlimits.info/wp-content/uploads/2011/10/image_thumb1.png" width="310" height="158" /></a></p>
<p>先ほど展開したフォルダから、libの下にあるtwitter4j-core-android-2.2.5.jarとtwitter4j-media-support-android-2.2.5.jarを選択してJARを取り込みます。</p>
<p><a href="http://blog.loadlimits.info/wp-content/uploads/2011/10/image2.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="image" src="http://blog.loadlimits.info/wp-content/uploads/2011/10/image_thumb2.png" width="414" height="156" /></a></p>
<p>あとはこんな感じで実験。ギャラリーの画像を選択してメッセージつけてポストします。</p>
<p> UpdateWithMediaActivity.java  <br /> 
<div style="padding-bottom: 0px;margin: 0px;padding-left: 0px;padding-right: 0px;float: none;padding-top: 0px" class="wlWriterEditableSmartContent">
<pre>package info.loadlimits.android.updatewithmedia;

import java.io.File;

import twitter4j.TwitterException;
import twitter4j.conf.Configuration;
import twitter4j.conf.ConfigurationBuilder;
import twitter4j.media.ImageUpload;
import twitter4j.media.ImageUploadFactory;
import android.app.Activity;
import android.content.ContentResolver;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;

public class UpdateWithMediaActivity extends Activity implements
		OnClickListener {
	private final static int REQUEST_PICK = 1;
	private final static String CONSUMER_KEY = "(書き換えてください)";
	private final static String CONSUMER_SECRET = "(書き換えてください)";
	private final static String ACCESS_TOKEN = "(書き換えてください)";
	private final static String ACCESS_TOKEN_SECRET = "(書き換えてください)";

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

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

	@Override
	public void onClick(View v) {
		Intent intent = new Intent(Intent.ACTION_PICK);
		intent.setType("image/*");
		startActivityForResult(intent, REQUEST_PICK);
	}

	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		super.onActivityResult(requestCode, resultCode, data);
		if (requestCode == REQUEST_PICK &amp;&amp; resultCode == RESULT_OK) {
			Uri uri = data.getData();
			ContentResolver cr = getContentResolver();
			String[] columns = { MediaStore.Images.Media.DATA };
			Cursor c = cr.query(uri, columns, null, null, null);

			c.moveToFirst();
			File path = new File(c.getString(0));
			if (!path.exists())
				return;

			ConfigurationBuilder builder = new ConfigurationBuilder();
			builder.setOAuthConsumerKey(CONSUMER_KEY);
			builder.setOAuthConsumerSecret(CONSUMER_SECRET);
			builder.setOAuthAccessToken(ACCESS_TOKEN);
			builder.setOAuthAccessTokenSecret(ACCESS_TOKEN_SECRET);
			// ここでMediaProviderをTWITTERにする
			builder.setMediaProvider("TWITTER");

			Configuration conf = builder.build();

			ImageUpload imageUpload = new ImageUploadFactory(conf)
					.getInstance();

			EditText textTweet = (EditText) findViewById(R.id.textTweet);
			String tweet = textTweet.getText().toString();

			try {
				imageUpload.upload(path, tweet);
			} catch (TwitterException e) {
				e.printStackTrace();
			}
		}
	}
}</pre>
</div>
<p>res/layout/main.xml<br />
  </p>
<div style="padding-bottom: 0px;margin: 0px;padding-left: 0px;padding-right: 0px;float: none;padding-top: 0px" class="wlWriterEditableSmartContent">
<pre>&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" &gt;

    &lt;EditText
        android:id="@+id/textTweet"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" &gt;

        &lt;requestFocus /&gt;
    &lt;/EditText&gt;

    &lt;Button
        android:id="@+id/buttonPost"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/btn_upload" /&gt;

&lt;/LinearLayout&gt;</pre>
</div>
<p>manifest<br />
  </p>
<div style="padding-bottom: 0px;margin: 0px;padding-left: 0px;padding-right: 0px;float: none;padding-top: 0px" class="wlWriterEditableSmartContent">
<pre>&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="info.loadlimits.android.updatewithmedia"
    android:versionCode="1"
    android:versionName="1.0" &gt;

    &lt;uses-sdk android:minSdkVersion="9" /&gt;

    &lt;uses-permission android:name="android.permission.INTERNET" /&gt;

    &lt;application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" &gt;
        &lt;activity
            android:label="@string/app_name"
            android:name=".UpdateWithMediaActivity" &gt;
            &lt;intent-filter &gt;
                &lt;action android:name="android.intent.action.MAIN" /&gt;

                &lt;category android:name="android.intent.category.LAUNCHER" /&gt;
            &lt;/intent-filter&gt;
        &lt;/activity&gt;
    &lt;/application&gt;

&lt;/manifest&gt;</pre>
</div>
<p>ポイントはsetMediaProviderでTWITTERを選択することだけです。</p>
<p><a href="http://blog.loadlimits.info/wp-content/uploads/2011/10/image3.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="image" src="http://blog.loadlimits.info/wp-content/uploads/2011/10/image_thumb3.png" width="640" height="384" /></a></p>
<p><a href="http://blog.loadlimits.info/wp-content/uploads/2011/10/image4.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="image" src="http://blog.loadlimits.info/wp-content/uploads/2011/10/image_thumb4.png" width="346" height="390" /></a></p>
<p>こんな感じでpic.twitter.comにアップロードできました。</p>
<p>OAuth認証ページとか組み込みたければ、こちらを参考に。</p>
<p><a href="http://www.adakoda.com/adakoda/2011/06/android-androidtwitter4joauth.html" target="_blank">[Android] Android+Twitter4JでOAuthするためのソースコード &#8211; adakoda</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.loadlimits.info/2011/10/android%e3%81%a8twitter4j%e3%81%a7%e5%85%ac%e5%bc%8f%e7%94%bb%e5%83%8f%e3%82%a2%e3%83%83%e3%83%97%e3%83%ad%e3%83%bc%e3%83%89api%e3%82%92%e4%bd%bf%e3%81%86/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

