<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>てくめも@ecoop.net</title>
	
	<link>http://www.ecoop.net/memo</link>
	<description />
	<lastBuildDate>Fri, 17 May 2013 07:55:14 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.ecoop.net/memo/feed" />
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/ecoop" /><feedburner:info uri="ecoop" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Google App Engine でアプリケーション名を取得するには？</title>
		<link>http://feedproxy.google.com/~r/ecoop/~3/aXJNTw4Zn9I/google-app-engine-%e3%81%a7%e3%82%a2%e3%83%97%e3%83%aa%e3%82%b1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e5%90%8d%e3%82%92%e5%8f%96%e5%be%97%e3%81%99%e3%82%8b%e3%81%ab%e3%81%af%ef%bc%9f.html</link>
		<comments>http://www.ecoop.net/memo/archives/google-app-engine-%e3%81%a7%e3%82%a2%e3%83%97%e3%83%aa%e3%82%b1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e5%90%8d%e3%82%92%e5%8f%96%e5%be%97%e3%81%99%e3%82%8b%e3%81%ab%e3%81%af%ef%bc%9f.html#comments</comments>
		<pubDate>Wed, 01 May 2013 07:31:59 +0000</pubDate>
		<dc:creator>ino</dc:creator>
				<category><![CDATA[Google App Engine]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://www.ecoop.net/memo/?p=1059</guid>
		<description><![CDATA[GAEのアプリケーションの名前はJava、Pythonどちらでもプログラム内から参照できるようになっています。Java import com.google.appengine.api.appidentity.AppIde [...]<div class='yarpp-related-rss'>

関連記事:<ol>
<li><a href='http://www.ecoop.net/memo/archives/2007-10-12-1.html' rel='bookmark' title='Google &#8211; 検索ワードのはやりを見る Google Trends'>Google &#8211; 検索ワードのはやりを見る Google Trends</a></li>
<li><a href='http://www.ecoop.net/memo/archives/2008-11-17-2.html' rel='bookmark' title='Google サービスのヘルプページを一括ダウンロードするには'>Google サービスのヘルプページを一括ダウンロードするには</a></li>
<li><a href='http://www.ecoop.net/memo/archives/2007-07-23-3.html' rel='bookmark' title='Google Maps API チュートリアル'>Google Maps API チュートリアル</a></li>
</ol>
</div>
]]></description>
				<content:encoded><![CDATA[<p>GAEのアプリケーションの名前はJava、Pythonどちらでもプログラム内から参照できるようになっています。<span id="more-1059"></span>Java</p>
<pre>
import com.google.appengine.api.appidentity.AppIdentityServiceFactory;

public class AppEngineUtils {
	private AppEngineUtils() {
	}
	/**
	 * war/WEB-INF/appengine-web.xmlで設定したアプリケーション名を取得する。
	 * @return アプリケーション名
	 */
	public static String getApplicationName() {
			return AppIdentityServiceFactory.getAppIdentityService()
					.getServiceAccountName().split("@")[0];

	}
}
</pre>
<p>Python:</p>
<pre>
from google.appengine.api.app_identity import get_application_id
appname = get_application_id()
</pre>
<p>ここで取得できるアプリケーション名はwar/WEB-INF/appengine-web.xmlのapplicationタグで指定されているものです。<br />
デプロイ先ごとに設定を切り替える時などにどうぞ。</p>
<div class='yarpp-related-rss'>
<p>関連記事:</p><ol>
<li><a href='http://www.ecoop.net/memo/archives/2007-10-12-1.html' rel='bookmark' title='Google &#8211; 検索ワードのはやりを見る Google Trends'>Google &#8211; 検索ワードのはやりを見る Google Trends</a></li>
<li><a href='http://www.ecoop.net/memo/archives/2008-11-17-2.html' rel='bookmark' title='Google サービスのヘルプページを一括ダウンロードするには'>Google サービスのヘルプページを一括ダウンロードするには</a></li>
<li><a href='http://www.ecoop.net/memo/archives/2007-07-23-3.html' rel='bookmark' title='Google Maps API チュートリアル'>Google Maps API チュートリアル</a></li>
</ol>
</div>
<img src="http://feeds.feedburner.com/~r/ecoop/~4/aXJNTw4Zn9I" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.ecoop.net/memo/archives/google-app-engine-%e3%81%a7%e3%82%a2%e3%83%97%e3%83%aa%e3%82%b1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e5%90%8d%e3%82%92%e5%8f%96%e5%be%97%e3%81%99%e3%82%8b%e3%81%ab%e3%81%af%ef%bc%9f.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.ecoop.net/memo/archives/google-app-engine-%e3%81%a7%e3%82%a2%e3%83%97%e3%83%aa%e3%82%b1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e5%90%8d%e3%82%92%e5%8f%96%e5%be%97%e3%81%99%e3%82%8b%e3%81%ab%e3%81%af%ef%bc%9f.html" />
	<feedburner:origLink>http://www.ecoop.net/memo/archives/google-app-engine-%e3%81%a7%e3%82%a2%e3%83%97%e3%83%aa%e3%82%b1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e5%90%8d%e3%82%92%e5%8f%96%e5%be%97%e3%81%99%e3%82%8b%e3%81%ab%e3%81%af%ef%bc%9f.html?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=google-app-engine-%25e3%2581%25a7%25e3%2582%25a2%25e3%2583%2597%25e3%2583%25aa%25e3%2582%25b1%25e3%2583%25bc%25e3%2582%25b7%25e3%2583%25a7%25e3%2583%25b3%25e5%2590%258d%25e3%2582%2592%25e5%258f%2596%25e5%25be%2597%25e3%2581%2599%25e3%2582%258b%25e3%2581%25ab%25e3%2581%25af%25ef%25bc%259f</feedburner:origLink></item>
		<item>
		<title>Android入門 アプリ開発の基本、ビューのライフサイクル(図解)</title>
		<link>http://feedproxy.google.com/~r/ecoop/~3/Avr-kec_G_s/android_lifecycle_of_view.html</link>
		<comments>http://www.ecoop.net/memo/archives/android_lifecycle_of_view.html#comments</comments>
		<pubDate>Fri, 12 Apr 2013 03:00:27 +0000</pubDate>
		<dc:creator>ino</dc:creator>
				<category><![CDATA[Android開発]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[初心者向け]]></category>

		<guid isPermaLink="false">http://www.ecoop.net/memo/?p=1053</guid>
		<description><![CDATA[Android アプリケーション開発では、いつどのイベントが発生するかを知っておくというのは大事な事です。 アクティビティを実装する場合はアクティビティのイベントがいつ発生するか(ライフサイクル)が大事ですし、自分でビュ [...]<div class='yarpp-related-rss'>

関連記事:<ol>
<li><a href='http://www.ecoop.net/memo/archives/2010-11-19-1.html' rel='bookmark' title='Android1.6でLinearLayoutを子要素なしで表示するとRuntimeExceptionになる'>Android1.6でLinearLayoutを子要素なしで表示するとRuntimeExceptionになる</a></li>
<li><a href='http://www.ecoop.net/memo/archives/2011-03-07-1.html' rel='bookmark' title='MapView で InflateException 例外が出る原因'>MapView で InflateException 例外が出る原因</a></li>
<li><a href='http://www.ecoop.net/memo/archives/%e3%80%90android%e3%80%91%e8%83%8c%e6%99%af%e7%94%bb%e5%83%8f%e3%81%ae%e3%83%aa%e3%83%94%e3%83%bc%e3%83%88%e3%81%8c%e5%8a%b9%e3%81%8b%e3%81%aa%e3%81%84%e5%95%8f%e9%a1%8c.html' rel='bookmark' title='【Android】背景画像のリピートが効かない問題'>【Android】背景画像のリピートが効かない問題</a></li>
</ol>
</div>
]]></description>
				<content:encoded><![CDATA[<p>Android アプリケーション開発では、いつどのイベントが発生するかを知っておくというのは大事な事です。</p>
<p>アクティビティを実装する場合はアクティビティのイベントがいつ発生するか(ライフサイクル)が大事ですし、自分でビューを作る時はビューのイベントを把握しておくとスムーズに実装ができるようになります。</p>
<p>Androidのアクティビティについてはいつどのイベント<a href="http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle" target="_blank">公式サイトのアクティビティライフサイクル</a>の項目で分かりやすく図示されているのですが、ビューのライフサイクル、イベントの詳細を見つけられなかったため、今回は整理も兼ねてこの記事を公開することにしました。</p>
<p>Android の View は Activity#setContentView() を呼ぶだけでも onFinishInflate(), onAttachedToWindow(),onLayout(),onDraw(),onMeasure()といったイベントが発生するのをご存知でしょうか？</p>
<p>どのタイミングでどのイベントが呼ばれるのか？</p>
<p>カスタムビューを作る時に処理をどのイベントに実装すべきかを悩んでいる方の助けになれれば幸いです。<span id="more-1053"></span>
<p>
図:Viewのライフサイクル(<a href="/memo/archives/android_lifecycle_of_view.html/view_lifecycle_en-png" target="_blank">View lifecycle: English version</a>)</p>
<p><a href="/memo/archives/android_lifecycle_of_view.html/view_lifecycle-png" target="_blank"><img style="display:block; margin-left:auto; margin-right:auto;" src="http://www.ecoop.net/memo/wp/wp-content/uploads/2013/04/view_lifecycle.png" alt="View lifecycle" title="view_lifecycle.png" border="0" width="100%" /></a>
</p>
<h2>基本</h2>
<p>ビューをアクティビティに割り当てる方法は大きく分けて３通りあります。</p>
<ul>
<li><b>setContentView()を使ったXMLリソースの静的割り当て</b><br />
Activity#setContentView(int:レイアウトリソースID)</p>
<li><b>inflate() を使ったXMLリソースの静的割り当て</b><br />
Inflater#inflate(int:レイアウトリソースID), setContentView()</p>
<li><b>自分でインスタンス化してからの動的割り当て</b><br />
Inflater#inflate(int:レイアウトリソースID), setContentView()
</ul>
<p>基本的にビューのライフサイクルはアクティビティのライフサイクルにほとんど依存しません。</p>
<p>唯一アクティビティの終了する時だけは onDetachedFromWindow()が実行されますが、<br />
その他の画面の切り替えなどの影響を受けることはないようです。</p>
<h2>イベント一覧</h2>
<h3>View#onFinishInflate()イベント</h3>
<p>名前の通り、 XMLから展開された直後に呼ばれます。</p>
<h3>View#onAttachedToWindow()イベント</h3>
<p>ウィンドウへの割り当てが終わった後に非同期で呼ばれます。</p>
<p>特に、アクティビティのライフサイクルに関わるイベント(onCreate(),onResume(),onRestart()など)は、すべて実行が終わってからonAttachedToWindow()が実行されるようです。</p>
<h3>View#onMeasure()イベント</h3>
<p>ビューのサイズを決定するイベントです。</p>
<p>ビューがウィンドウに割り当てられている間、頻繁に実行されます。</p>
<p>このメソッドはサイズ計算、設定に必要な処理以外を加えるべきではありません。</p>
<h3>View#onLayout()イベント</h3>
<p>子要素を持つビューなどでレイアウトを更新するためのイベントで、子ビューの情報や構成を更新する場合などに使用できます。</p>
<p>requestLayout()やforceLayout()が呼ばれた後に非同期で発生します。<br />
画面サイズが変わった場合などにもrequestLayout()やforceLayout()を通じて間接的に呼ばれます。</p>
<p>第一引数は画面に変更があったかどうかで、forceLayout()を呼ばれた場合やウィンドウ割り当て時はtrueが入り、requestLayout()を呼ばれた場合はfalseが入ります。</p>
<p>falseでの実行はtrueよりも多くあるので、負荷にコストがかかり頻繁に実行不要なものはtrueのみ実行する、という判定を加えるとよいでしょう。</p>
<h3>View#onDraw()イベント</h3>
<p>画面の描画を行うイベントです。Canvasを受け取って自身の描画処理(図形や画像の描画)を行うもので、一般的には子ビューを持たないもので使用されるイベントです。</p>
<p>初回割り当て時やrequestLayout(), foreceLayout()で発生し、onLayout()の後に実行されます。</p>
<p>また、onLayout()と異なりinvalidate()でも発生するイベントです。</p>
<p>このメソッドは頻繁に呼ばれるため、負荷がかかる処理には不向きです。onDraw()で遅延が発生するとビューの描画が遅れることになります。</p>
<h3>View#onDetachedFromWindow()イベント</h3>
<p>アクティビティから割り当てがなくなった時に発生するイベントです。</p>
<p>アクティビティの終了時や、setContentView()で他のビューを割り当てられた時、親のビューに対してremoveAllViews()が呼ばれた時などに発生します。</p>
<p>ライフサイクルに関係するイベントは以上です。<br />
他にもビューサイズの変更で発生するイベント、フォーカスや表示切り替えで発生するイベントなどもありますが、表示が複雑になるため省略しています。その他のイベントについては<a href="http://developer.android.com/reference/android/view/View.html" target="_blank">公式リファレンス</a>が参考になります。</p>
<p>ご覧頂いた通り Androidではビューのイベントはアクティビティのイベントにはあまり関係しません。</p>
<p>このため、たとえば、ActivityのonResume(),onPause()などに合わせた処理を入れたい場合は明示的に開始、中断のメソッドを提供する必要があります。</p>
<p>検証用プロジェクトソースとアプリapkファイル:<br />
<a href="/memo/rs/20130412/net.ecoop.android.viewlifecycle.apk">アプリ本体(apk)</a>&nbsp;<a href="/memo/rs/20130412/net.ecoop.android.viewlifecycle.zip">プロジェクトソース(zip)</a></p>
<div class='yarpp-related-rss'>
<p>関連記事:</p><ol>
<li><a href='http://www.ecoop.net/memo/archives/2010-11-19-1.html' rel='bookmark' title='Android1.6でLinearLayoutを子要素なしで表示するとRuntimeExceptionになる'>Android1.6でLinearLayoutを子要素なしで表示するとRuntimeExceptionになる</a></li>
<li><a href='http://www.ecoop.net/memo/archives/2011-03-07-1.html' rel='bookmark' title='MapView で InflateException 例外が出る原因'>MapView で InflateException 例外が出る原因</a></li>
<li><a href='http://www.ecoop.net/memo/archives/%e3%80%90android%e3%80%91%e8%83%8c%e6%99%af%e7%94%bb%e5%83%8f%e3%81%ae%e3%83%aa%e3%83%94%e3%83%bc%e3%83%88%e3%81%8c%e5%8a%b9%e3%81%8b%e3%81%aa%e3%81%84%e5%95%8f%e9%a1%8c.html' rel='bookmark' title='【Android】背景画像のリピートが効かない問題'>【Android】背景画像のリピートが効かない問題</a></li>
</ol>
</div>
<img src="http://feeds.feedburner.com/~r/ecoop/~4/Avr-kec_G_s" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.ecoop.net/memo/archives/android_lifecycle_of_view.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.ecoop.net/memo/archives/android_lifecycle_of_view.html" />
	<feedburner:origLink>http://www.ecoop.net/memo/archives/android_lifecycle_of_view.html?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=android_lifecycle_of_view</feedburner:origLink></item>
		<item>
		<title>【Android】 ndk-build clean でシンタックスエラー。原因はNDK r8eのバグか？</title>
		<link>http://feedproxy.google.com/~r/ecoop/~3/bUzpqHyljGw/%e3%80%90android%e3%80%91-ndk-build-clean-%e3%81%a7%e3%82%b7%e3%83%b3%e3%82%bf%e3%83%83%e3%82%af%e3%82%b9%e3%82%a8%e3%83%a9%e3%83%bc%e3%80%82%e5%8e%9f%e5%9b%a0%e3%81%afndk-r8e%e3%81%ae%e3%83%90.html</link>
		<comments>http://www.ecoop.net/memo/archives/%e3%80%90android%e3%80%91-ndk-build-clean-%e3%81%a7%e3%82%b7%e3%83%b3%e3%82%bf%e3%83%83%e3%82%af%e3%82%b9%e3%82%a8%e3%83%a9%e3%83%bc%e3%80%82%e5%8e%9f%e5%9b%a0%e3%81%afndk-r8e%e3%81%ae%e3%83%90.html#comments</comments>
		<pubDate>Tue, 02 Apr 2013 06:43:57 +0000</pubDate>
		<dc:creator>ino</dc:creator>
				<category><![CDATA[Android開発]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[NDK]]></category>

		<guid isPermaLink="false">http://www.ecoop.net/memo/?p=1049</guid>
		<description><![CDATA[Android で NDKビルドを動かすとndk-build cleanでエラーになってしまった。 こういうの。 dk-build clean Clean: gnustl_shared [armeabi-v7e] /bi [...]<div class='yarpp-related-rss'>

関連記事:<ol>
<li><a href='http://www.ecoop.net/memo/archives/%e3%80%90android%e3%80%91%e8%83%8c%e6%99%af%e7%94%bb%e5%83%8f%e3%81%ae%e3%83%aa%e3%83%94%e3%83%bc%e3%83%88%e3%81%8c%e5%8a%b9%e3%81%8b%e3%81%aa%e3%81%84%e5%95%8f%e9%a1%8c.html' rel='bookmark' title='【Android】背景画像のリピートが効かない問題'>【Android】背景画像のリピートが効かない問題</a></li>
<li><a href='http://www.ecoop.net/memo/archives/2011-03-07-1.html' rel='bookmark' title='MapView で InflateException 例外が出る原因'>MapView で InflateException 例外が出る原因</a></li>
<li><a href='http://www.ecoop.net/memo/archives/2006-05-23-1.html' rel='bookmark' title='portupgrade での unknown build error 対策'>portupgrade での unknown build error 対策</a></li>
</ol>
</div>
]]></description>
				<content:encoded><![CDATA[<p>Android で NDKビルドを動かすとndk-build cleanでエラーになってしまった。</p>
<p>こういうの。</p>
<pre>
dk-build clean 
Clean: gnustl_shared [armeabi-v7e] 
/bin/sh: -c: line 0: syntax error near unexpected token `(' 
/bin/sh: -c: line 0: `rm -rf (TARGET_OBJS)' 
make: *** [clean-gnustl_shared-armeabi] Error 1
</pre>
<p>色々調べたところ、原因は Android NDK r8eの問題のようで<br />
android-ndk/build/core/build-binary.mk</p>
<p>の49行目を次のように修正したらエラーが出なくなった。</p>
<p>変更前:</p>
<pre>$(cleantarget): PRIVATE_CLEAN_FILES := ($(my)OBJS)</pre>
<p>変更後:</p>
<pre>$(cleantarget): PRIVATE_CLEAN_FILES := $($(my)OBJS)</pre>
<p>変更後の実行結果:</p>
<pre>
/Library/android-ndk/ndk-build clean NDK_DEBUG=1 all 
Clean: cvjava [armeabi-v7a]
Clean: gnustl_shared [armeabi-v7a]
Clean: gnustl_static [armeabi-v7a]
Clean: scv [armeabi-v7a]
</pre>
<p>再現環境はインストールしたバージョンは NDK r8e の OS X 64ビット版(android-ndk-r8e-darwin-x86_64.tar.bz2)<br />
でした。<br />
他の環境で試したわけではないのですが、他の環境ではこれでエラーがでないのでしょうか。</p>
<h2>追記</h2>
<p>Linux 64bit r8e でも再現するという情報をいただきました。対策も同様でいいそうです。</p>
<div class='yarpp-related-rss'>
<p>関連記事:</p><ol>
<li><a href='http://www.ecoop.net/memo/archives/%e3%80%90android%e3%80%91%e8%83%8c%e6%99%af%e7%94%bb%e5%83%8f%e3%81%ae%e3%83%aa%e3%83%94%e3%83%bc%e3%83%88%e3%81%8c%e5%8a%b9%e3%81%8b%e3%81%aa%e3%81%84%e5%95%8f%e9%a1%8c.html' rel='bookmark' title='【Android】背景画像のリピートが効かない問題'>【Android】背景画像のリピートが効かない問題</a></li>
<li><a href='http://www.ecoop.net/memo/archives/2011-03-07-1.html' rel='bookmark' title='MapView で InflateException 例外が出る原因'>MapView で InflateException 例外が出る原因</a></li>
<li><a href='http://www.ecoop.net/memo/archives/2006-05-23-1.html' rel='bookmark' title='portupgrade での unknown build error 対策'>portupgrade での unknown build error 対策</a></li>
</ol>
</div>
<img src="http://feeds.feedburner.com/~r/ecoop/~4/bUzpqHyljGw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.ecoop.net/memo/archives/%e3%80%90android%e3%80%91-ndk-build-clean-%e3%81%a7%e3%82%b7%e3%83%b3%e3%82%bf%e3%83%83%e3%82%af%e3%82%b9%e3%82%a8%e3%83%a9%e3%83%bc%e3%80%82%e5%8e%9f%e5%9b%a0%e3%81%afndk-r8e%e3%81%ae%e3%83%90.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.ecoop.net/memo/archives/%e3%80%90android%e3%80%91-ndk-build-clean-%e3%81%a7%e3%82%b7%e3%83%b3%e3%82%bf%e3%83%83%e3%82%af%e3%82%b9%e3%82%a8%e3%83%a9%e3%83%bc%e3%80%82%e5%8e%9f%e5%9b%a0%e3%81%afndk-r8e%e3%81%ae%e3%83%90.html" />
	<feedburner:origLink>http://www.ecoop.net/memo/archives/%e3%80%90android%e3%80%91-ndk-build-clean-%e3%81%a7%e3%82%b7%e3%83%b3%e3%82%bf%e3%83%83%e3%82%af%e3%82%b9%e3%82%a8%e3%83%a9%e3%83%bc%e3%80%82%e5%8e%9f%e5%9b%a0%e3%81%afndk-r8e%e3%81%ae%e3%83%90.html?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=%25e3%2580%2590android%25e3%2580%2591-ndk-build-clean-%25e3%2581%25a7%25e3%2582%25b7%25e3%2583%25b3%25e3%2582%25bf%25e3%2583%2583%25e3%2582%25af%25e3%2582%25b9%25e3%2582%25a8%25e3%2583%25a9%25e3%2583%25bc%25e3%2580%2582%25e5%258e%259f%25e5%259b%25a0%25e3%2581%25afndk-r8e%25e3%2581%25ae%25e3%2583%2590</feedburner:origLink></item>
		<item>
		<title>ExtJSはオワコン？RIA開発に使えるJavaScriptライブラリSmartClient</title>
		<link>http://feedproxy.google.com/~r/ecoop/~3/LJrKGTxt0DE/what_is_the_alternative_to_extjs.html</link>
		<comments>http://www.ecoop.net/memo/archives/what_is_the_alternative_to_extjs.html#comments</comments>
		<pubDate>Thu, 28 Mar 2013 11:03:36 +0000</pubDate>
		<dc:creator>ino</dc:creator>
				<category><![CDATA[ExtJS]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[RIA]]></category>
		<category><![CDATA[SmartClient]]></category>

		<guid isPermaLink="false">http://www.ecoop.net/memo/?p=1046</guid>
		<description><![CDATA[タイトルは半分冗談です。 Ext JS JavaScriptで業務システムで使うRIA(リッチインターネットアプリケーション)フレームワークと言えば一番有名なのはExtJSです。 Sencha Ext JS グラフや表な [...]<div class='yarpp-related-rss yarpp-related-none'>

関連記事はありません。
</div>
]]></description>
				<content:encoded><![CDATA[<p><img style="display:block; margin-left:auto; margin-right:auto;" src="http://www.ecoop.net/memo/wp/wp-content/uploads/2013/03/dont_use_extjs.png" alt="Dont use extjs" title="dont_use_extjs.png" border="0" width="362" height="230" /></p>
<p>タイトルは半分冗談です。<span id="more-1046"></span><br />
<h2>Ext JS</h2>
<p>JavaScriptで業務システムで使うRIA(リッチインターネットアプリケーション)フレームワークと言えば一番有名なのはExtJSです。</p>
<p><a href="http://staging-japan.sencha.com/products/extjs/">Sencha Ext JS</a></p>
<p>グラフや表など、ビジネス向けの部品が充実しています。</p>
<p><a href="http://staging-japan.sencha.com/products/extjs/examples/">ExtJSデモ</a><br />
<img style="display:block; margin-left:auto; margin-right:auto;" src="http://www.ecoop.net/memo/wp/wp-content/uploads/2013/03/extjs_capture2.png" alt="Extjs capture2" title="extjs_capture2.png" border="0" width="600" height="346" /></p>
<p>このように大変便利なライブラリなのですが、ExtJSバージョン3以降は無償版ライセンスがGPLに変わってしまい、実質オープンソースアプリケーションでしか使えなくなってしまいました。</p>
<p>この問題は有料版ライセンスを購入すれば解決可能で、ライセンスがあれば業務向けの非公開アプリケーションももちろん作成可能です。</p>
<p>ただ、予算が少ない場合などライセンス費用が常に出せるとは限らないのが現実ですし、<a href="http://togetter.com/li/447635">こちら</a>(Sencha Ext JS と Sencha Touch の license について)でまとめられているように、運用会社と開発会社が異なる場合は２重にライセンスを買わないとならないなど、費用面では採用が難しい場合も多いかと思います。</p>
<h2>Ext Core</h2>
<p>ExtJSのライセンス問題を解決すべくExtJSの派生ライブラリとして生まれたのがExt Coreなのだそうです。</p>
<p><a href="http://staging-japan.sencha.com/products/extcore">Ext Core</a></p>
<p><a href="http://news.mynavi.jp/news/2009/04/09/006/index.html">ExtJSコアのライセンス方向転換、GPLからMITへ</a>(マイナビニュース)</p>
<p>Ext CoreはMITライセンスですので、ExtJSと違い無料で安心して利用できます。</p>
<p>ただし、機能面はコア部分だけということでExtJSからかなり制限されています。</p>
<p>用途としては主にExtJSで使っている便利な機能(Ext.extend(),String.format()など)を他でも使いたい、という時に利用するもので、UIについてはあまり期待しないほうがよさそうです。</p>
<h2>SmartClient</h2>
<p>そこでおすすめなのが SmartClient です。<br />
ExtJSと比べると日本ではあまり知られていませんが、SmartClientもExtJSと同様の機能を備えているRIA開発向けJavaScriptライブラリです(注)。</p>
<p>SmartClientのJavaScriptライブラリは無償でLGPLライセンスとして使用可能なので、ExtJSの対抗として注目されています。</p>
<p><a href="http://smartclient.com/product/smartclient.jsp">SmartClient</a></p>
<p>こんなグラフ、表も簡単に表示できます。<br />
<img style="display:block; margin-left:auto; margin-right:auto;" src="http://www.ecoop.net/memo/wp/wp-content/uploads/2013/03/smartclient_capture.png" alt="Smartclient capture" title="smartclient_capture.png" border="0" width="600" height="222" /></p>
<p>何ができるかは、<a href="http://smartclient.com/#Welcome">SmartClientデモ</a><br />
を見て頂くと実際動いているものがあるのでわかりやすいかと思います。</p>
<p>SmartClientも有償版がありますが、こちらはサーバを含めた統合環境(注釈参照)を使うためのもので、<br />
JavaScriptライブラリを使う上ではLGPLライセンスでも無制限に使用可能となっています。</p>
<p>ダウンロードは<a href="http://smartclient.com/product/download.jsp">こちらのダウンロードページ</a>から、「Download SmartClient 9.0 LGPL Edition」をクリックして下さい。</p>
<p><img style="display:block; margin-left:auto; margin-right:auto;" src="http://www.ecoop.net/memo/wp/wp-content/uploads/2013/03/download_smartclient.png" alt="Download smartclient" title="download_smartclient.png" border="0" width="600" height="379" /></p>
<p>使い方は<a href="http://smartclient.com/#Welcome">デモサイト</a>にサンプルコードが参考になります。また、ダウンロードしたファイル内のドキュメントには詳しい使い方が書かれていますので、カスタマイズの際はそちらが参考になるでしょう。</p>
<h2>ExtJS vs SmartClient</h2>
<p>見た目的にはExtJSのほうが可愛いですが、機能面ではSmartClientも負けていません。</p>
<p>ExtJSにはGWT(Google Web Toolkit)と組み合わせられるExtGWTというものがありますが、SmartClientにもちゃんとSmartGWTがあり、こちらもLGPLライセンスで提供されています。</p>
<p>業務向けアプリを作りたいけど、事情がありExtJSのライセンスを購入できない、<br />
というような場合はSmartClientの採用も是非検討してみてはいかがでしょうか。</p>
<hr />
<p>注: 正確にいうと、本来SmartClientはJavaサーバフレームワークとJavaScriptクライアントで構成されているRIAプラットフォームです。<br />
JavaScriptのクライアント側だけで単独動作可能であり、ExtJSに相当する機能はJavaScriptクライアントだけで実現できるため、記事内では簡単にするため省略しています。</p>
<div class='yarpp-related-rss yarpp-related-none'>
<p>関連記事はありません。</p>
</div>
<img src="http://feeds.feedburner.com/~r/ecoop/~4/LJrKGTxt0DE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.ecoop.net/memo/archives/what_is_the_alternative_to_extjs.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.ecoop.net/memo/archives/what_is_the_alternative_to_extjs.html" />
	<feedburner:origLink>http://www.ecoop.net/memo/archives/what_is_the_alternative_to_extjs.html?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=what_is_the_alternative_to_extjs</feedburner:origLink></item>
		<item>
		<title>GAE/Jでgsonを使うとVerifyErrorになる件(解決？)</title>
		<link>http://feedproxy.google.com/~r/ecoop/~3/LM2PlzmdoIk/gaej%e3%81%a7gson%e3%82%92%e4%bd%bf%e3%81%86%e3%81%a8verifyerror%e3%81%ab%e3%81%aa%e3%82%8b%e4%bb%b6.html</link>
		<comments>http://www.ecoop.net/memo/archives/gaej%e3%81%a7gson%e3%82%92%e4%bd%bf%e3%81%86%e3%81%a8verifyerror%e3%81%ab%e3%81%aa%e3%82%8b%e4%bb%b6.html#comments</comments>
		<pubDate>Wed, 27 Mar 2013 07:39:08 +0000</pubDate>
		<dc:creator>ino</dc:creator>
				<category><![CDATA[Google]]></category>
		<category><![CDATA[Google App Engine]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Slim3]]></category>

		<guid isPermaLink="false">http://www.ecoop.net/memo/?p=1041</guid>
		<description><![CDATA[あるときからGoogle App Engine(Java)でgsonライブラリを使うと、java.lang.VerifyErrorが発生するようになってしまった。 別の方(GAE/JでGson利用時にjava.lang. [...]<div class='yarpp-related-rss yarpp-related-none'>

関連記事はありません。
</div>
]]></description>
				<content:encoded><![CDATA[<p>あるときからGoogle App Engine(Java)でgsonライブラリを使うと、java.lang.VerifyErrorが発生するようになってしまった。</p>
<p><a href="http://d.hatena.ne.jp/sinmetal/20120419/1334849121">別の方(GAE/JでGson利用時にjava.lang.VerifyErrorが発生する)</a>」もとりあげているのと同じ現象のようですが、一応対応がわかったのでメモしておく。<span id="more-1041"></span>該当のコードを見るとnew Gson()のところで発生しているらしい。</p>
<p>ローカルの開発環境では再現せず、デプロイ先でだけ発生するのが困ったところ。</p>
<pre>
2013-03-27 15:48:58.984
Error for /main
java.lang.VerifyError: Cannot inherit from final class
	at com.google.appengine.runtime.Request.process-914eb81ff215d801(Request.java)
	at java.lang.ClassLoader.defineClass1(Native Method)
	at java.lang.ClassLoader.defineClass(ClassLoader.java:634)
	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
	at java.net.URLClassLoader.defineClass(URLClassLoader.java:277)
	at sun.reflect.GeneratedMethodAccessor5.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:616)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
	at jp.co.example.MainServlet(MainServlet.java:82
</pre>
<p>使っている環境は Google App Engine 1.7.5, Java SDK6、<br />
Slim3 1.0.16, そして Gson 2.2.1。Javaは5も7もだめだった。</p>
<p>何度デプロイし直してもだめで、一時ファイルなどキャッシュになってそうな箇所を<br />
片っ端から一旦クリアしてもやっぱりVerifyError。</p>
<p>色々試行錯誤した結果、原因は不明だけど、<br />
次の方法でエラーなしに動作することがわかった。</p>
<ul>
<li>
<h3>Gson2.2.1のコンパイル済のjarでなく、ソース(gson-2.2.1-source.jar)を展開してプロジェクトソースに組み込む。</h3>
<li>
<h3>Gsonのバージョン1.7.1を入れる(2.2.1から1.7.1にバージョンを落とす)。</h3>
</ul>
<p>ソースを組み込むのは嫌だったので、後者で対応して解決とすることとした。</p>
<div class='yarpp-related-rss yarpp-related-none'>
<p>関連記事はありません。</p>
</div>
<img src="http://feeds.feedburner.com/~r/ecoop/~4/LM2PlzmdoIk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.ecoop.net/memo/archives/gaej%e3%81%a7gson%e3%82%92%e4%bd%bf%e3%81%86%e3%81%a8verifyerror%e3%81%ab%e3%81%aa%e3%82%8b%e4%bb%b6.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.ecoop.net/memo/archives/gaej%e3%81%a7gson%e3%82%92%e4%bd%bf%e3%81%86%e3%81%a8verifyerror%e3%81%ab%e3%81%aa%e3%82%8b%e4%bb%b6.html" />
	<feedburner:origLink>http://www.ecoop.net/memo/archives/gaej%e3%81%a7gson%e3%82%92%e4%bd%bf%e3%81%86%e3%81%a8verifyerror%e3%81%ab%e3%81%aa%e3%82%8b%e4%bb%b6.html?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=gaej%25e3%2581%25a7gson%25e3%2582%2592%25e4%25bd%25bf%25e3%2581%2586%25e3%2581%25a8verifyerror%25e3%2581%25ab%25e3%2581%25aa%25e3%2582%258b%25e4%25bb%25b6</feedburner:origLink></item>
		<item>
		<title>【Android】9 patchが動かない？そんな時に確認する４つのポイント</title>
		<link>http://feedproxy.google.com/~r/ecoop/~3/IT4p5GlUVZk/%e3%80%90android%e3%80%919-patch%e3%81%8c%e5%8b%95%e3%81%8b%e3%81%aa%e3%81%84%ef%bc%9f%e3%81%9d%e3%82%93%e3%81%aa%e6%99%82%e3%81%a9%e3%81%86%e3%81%99%e3%82%8b%ef%bc%9f.html</link>
		<comments>http://www.ecoop.net/memo/archives/%e3%80%90android%e3%80%919-patch%e3%81%8c%e5%8b%95%e3%81%8b%e3%81%aa%e3%81%84%ef%bc%9f%e3%81%9d%e3%82%93%e3%81%aa%e6%99%82%e3%81%a9%e3%81%86%e3%81%99%e3%82%8b%ef%bc%9f.html#comments</comments>
		<pubDate>Thu, 21 Mar 2013 07:39:53 +0000</pubDate>
		<dc:creator>ino</dc:creator>
				<category><![CDATA[Android開発]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[デザイン]]></category>

		<guid isPermaLink="false">http://www.ecoop.net/memo/?p=1036</guid>
		<description><![CDATA[せっかくAndroidデザインのために頑張って画像にナインパッチ(9pach)を使ったのに、ちゃんと効かない。 画像の周りの黒い点が見えてしまってる。さぁどうしよう。 そんな時は騒がず慌てず４つのポイントをチェック。 1 [...]<div class='yarpp-related-rss'>

関連記事:<ol>
<li><a href='http://www.ecoop.net/memo/archives/2011-04-22-1.html' rel='bookmark' title='Android の隠しコード'>Android の隠しコード</a></li>
<li><a href='http://www.ecoop.net/memo/archives/regular-expression-problem-o-android-java.html' rel='bookmark' title='Android Javaの正規表現の落とし穴'>Android Javaの正規表現の落とし穴</a></li>
<li><a href='http://www.ecoop.net/memo/archives/%e3%80%90android%e3%80%91%e8%83%8c%e6%99%af%e7%94%bb%e5%83%8f%e3%81%ae%e3%83%aa%e3%83%94%e3%83%bc%e3%83%88%e3%81%8c%e5%8a%b9%e3%81%8b%e3%81%aa%e3%81%84%e5%95%8f%e9%a1%8c.html' rel='bookmark' title='【Android】背景画像のリピートが効かない問題'>【Android】背景画像のリピートが効かない問題</a></li>
</ol>
</div>
]]></description>
				<content:encoded><![CDATA[<p><img style="display:block; margin-left:auto; margin-right:auto;" src="http://www.ecoop.net/memo/wp/wp-content/uploads/2013/03/droid20130321.jpg" alt="Droid20130321" title="droid20130321.jpg" border="0" width="500" height="200" /><br />
せっかくAndroidデザインのために頑張って画像にナインパッチ(9pach)を使ったのに、ちゃんと効かない。<br />
画像の周りの黒い点が見えてしまってる。さぁどうしよう。</p>
<p>そんな時は騒がず慌てず４つのポイントをチェック。<span id="more-1036"></span><br />
<h3>1. ファイルの名前は&#8221;〜.9.png&#8221;で終わること</h3>
<p>9.png で終わるファイルが 9 patch ファイルのしるしです。</p>
<p>jpg はだめ。pngです。banner.9.png のように、ちゃんと「.9.png」という拡張子で終わっているか確認しましょう。</p>
<p></p>
<h3>2. 画像のサイズは元画像のサイズ＋２ピクセル</h3>
<p>9patch は元の画像の上下左右1ピクセルずつの縁を設用定に使っています。</p>
<p>正しい 9patch 画像なら縁にあるのは黒だけでほかは余白になっているはず。</p>
<p></p>
<h3>3. 画像の周りは「黒」だけ</h3>
<p>四隅に描いていいのは黒だけです。</p>
<p>ここでいう「黒」は、透過なしの真っ黒(#000000)のこと。<br />
#000001でもいけません。</p>
<p>それから、いくら薄いからといっても、少しでも他の色が隅についてしまうと認識しなくなります。</p>
<p>特にアンチエイリアスには気をつけましょう。</p>
<p></p>
<h3>4. 黒い点、ちゃんとつながってる？</h3>
<p>上下左右それぞれで、黒い点がつながって１本線になっていないと認識してくれない場合があります。</p>
<p>9patchエディタ(draw9patch ツール)や、Eclipseのレイアウトエディタなんかではちゃんと伸び縮みして見える。</p>
<p>でも実機で見るとばっちり黒いドットが見えてしまう。<br />
そんな場合はこれが原因かもしれません。</p>
<p>最後のチェックポイントは意外とはまりやすいのではないでしょうか。<br />
以上、9-patch のトラブルシューティングでした。</p>
<div class='yarpp-related-rss'>
<p>関連記事:</p><ol>
<li><a href='http://www.ecoop.net/memo/archives/2011-04-22-1.html' rel='bookmark' title='Android の隠しコード'>Android の隠しコード</a></li>
<li><a href='http://www.ecoop.net/memo/archives/regular-expression-problem-o-android-java.html' rel='bookmark' title='Android Javaの正規表現の落とし穴'>Android Javaの正規表現の落とし穴</a></li>
<li><a href='http://www.ecoop.net/memo/archives/%e3%80%90android%e3%80%91%e8%83%8c%e6%99%af%e7%94%bb%e5%83%8f%e3%81%ae%e3%83%aa%e3%83%94%e3%83%bc%e3%83%88%e3%81%8c%e5%8a%b9%e3%81%8b%e3%81%aa%e3%81%84%e5%95%8f%e9%a1%8c.html' rel='bookmark' title='【Android】背景画像のリピートが効かない問題'>【Android】背景画像のリピートが効かない問題</a></li>
</ol>
</div>
<img src="http://feeds.feedburner.com/~r/ecoop/~4/IT4p5GlUVZk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.ecoop.net/memo/archives/%e3%80%90android%e3%80%919-patch%e3%81%8c%e5%8b%95%e3%81%8b%e3%81%aa%e3%81%84%ef%bc%9f%e3%81%9d%e3%82%93%e3%81%aa%e6%99%82%e3%81%a9%e3%81%86%e3%81%99%e3%82%8b%ef%bc%9f.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.ecoop.net/memo/archives/%e3%80%90android%e3%80%919-patch%e3%81%8c%e5%8b%95%e3%81%8b%e3%81%aa%e3%81%84%ef%bc%9f%e3%81%9d%e3%82%93%e3%81%aa%e6%99%82%e3%81%a9%e3%81%86%e3%81%99%e3%82%8b%ef%bc%9f.html" />
	<feedburner:origLink>http://www.ecoop.net/memo/archives/%e3%80%90android%e3%80%919-patch%e3%81%8c%e5%8b%95%e3%81%8b%e3%81%aa%e3%81%84%ef%bc%9f%e3%81%9d%e3%82%93%e3%81%aa%e6%99%82%e3%81%a9%e3%81%86%e3%81%99%e3%82%8b%ef%bc%9f.html?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=%25e3%2580%2590android%25e3%2580%25919-patch%25e3%2581%258c%25e5%258b%2595%25e3%2581%258b%25e3%2581%25aa%25e3%2581%2584%25ef%25bc%259f%25e3%2581%259d%25e3%2582%2593%25e3%2581%25aa%25e6%2599%2582%25e3%2581%25a9%25e3%2581%2586%25e3%2581%2599%25e3%2582%258b%25ef%25bc%259f</feedburner:origLink></item>
		<item>
		<title>【Mac OS X】スクリーンショットの保存場所を変える方法</title>
		<link>http://feedproxy.google.com/~r/ecoop/~3/o0afKo5g7VM/%e3%80%90mac-os-x%e3%80%91%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88%e3%81%ae%e4%bf%9d%e5%ad%98%e5%a0%b4%e6%89%80%e3%82%92%e5%a4%89%e3%81%88%e3%82%8b.html</link>
		<comments>http://www.ecoop.net/memo/archives/%e3%80%90mac-os-x%e3%80%91%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88%e3%81%ae%e4%bf%9d%e5%ad%98%e5%a0%b4%e6%89%80%e3%82%92%e5%a4%89%e3%81%88%e3%82%8b.html#comments</comments>
		<pubDate>Wed, 20 Mar 2013 09:23:50 +0000</pubDate>
		<dc:creator>ino</dc:creator>
				<category><![CDATA[mac]]></category>
		<category><![CDATA[Mac]]></category>

		<guid isPermaLink="false">http://www.ecoop.net/memo/?p=1035</guid>
		<description><![CDATA[デフォルトだと画面のスクリーンショット画像を撮るとデスクトップフォルダに保存されます。 裏ワザ、隠し機能的ですが、ターミナルから下のようなコマンドを入力すると画像の保存フォルダを変更することができます。 【ピクチャフォル [...]<div class='yarpp-related-rss yarpp-related-none'>

関連記事はありません。
</div>
]]></description>
				<content:encoded><![CDATA[<p>デフォルトだと画面のスクリーンショット画像を撮るとデスクトップフォルダに保存されます。<br />
裏ワザ、隠し機能的ですが、ターミナルから下のようなコマンドを入力すると画像の保存フォルダを変更することができます。</p>
<h2>【ピクチャフォルダに保存する】</h2>
<pre>
$ defaults write com.apple.screencapture location ~/Pictures
$ killall SystemUIServer
</pre>
<p>ピクチャ以外にも好きなディレクトリにすることもできます。</p>
<h2>【ScreenShotsフォルダに保存する】</h2>
<pre>
$ mkdir ~/ScreenShots
$ defaults write com.apple.screencapture location ~/ScreenShots
$ killall SystemUIServer
</pre>
<p>戻したくなったら下のコマンドで戻すこともできます。</p>
<h2>【デフォルト(デスクトップ)に戻す】</h2>
<pre>
$ defaults delete com.apple.screencapture location
$ killall SystemUIServer
</pre>
<p>以上、クリーンショット保存先を変える方法でした。<br />
散らかってしまいがちなデスクトップもこれで綺麗に整理整頓されるかも。</p>
<div class='yarpp-related-rss yarpp-related-none'>
<p>関連記事はありません。</p>
</div>
<img src="http://feeds.feedburner.com/~r/ecoop/~4/o0afKo5g7VM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.ecoop.net/memo/archives/%e3%80%90mac-os-x%e3%80%91%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88%e3%81%ae%e4%bf%9d%e5%ad%98%e5%a0%b4%e6%89%80%e3%82%92%e5%a4%89%e3%81%88%e3%82%8b.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.ecoop.net/memo/archives/%e3%80%90mac-os-x%e3%80%91%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88%e3%81%ae%e4%bf%9d%e5%ad%98%e5%a0%b4%e6%89%80%e3%82%92%e5%a4%89%e3%81%88%e3%82%8b.html" />
	<feedburner:origLink>http://www.ecoop.net/memo/archives/%e3%80%90mac-os-x%e3%80%91%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88%e3%81%ae%e4%bf%9d%e5%ad%98%e5%a0%b4%e6%89%80%e3%82%92%e5%a4%89%e3%81%88%e3%82%8b.html?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=%25e3%2580%2590mac-os-x%25e3%2580%2591%25e3%2582%25b9%25e3%2582%25af%25e3%2583%25aa%25e3%2583%25bc%25e3%2583%25b3%25e3%2582%25b7%25e3%2583%25a7%25e3%2583%2583%25e3%2583%2588%25e3%2581%25ae%25e4%25bf%259d%25e5%25ad%2598%25e5%25a0%25b4%25e6%2589%2580%25e3%2582%2592%25e5%25a4%2589%25e3%2581%2588%25e3%2582%258b</feedburner:origLink></item>
		<item>
		<title>【Android】背景画像のリピートが効かない問題</title>
		<link>http://feedproxy.google.com/~r/ecoop/~3/-gm9AJ5UkXE/%e3%80%90android%e3%80%91%e8%83%8c%e6%99%af%e7%94%bb%e5%83%8f%e3%81%ae%e3%83%aa%e3%83%94%e3%83%bc%e3%83%88%e3%81%8c%e5%8a%b9%e3%81%8b%e3%81%aa%e3%81%84%e5%95%8f%e9%a1%8c.html</link>
		<comments>http://www.ecoop.net/memo/archives/%e3%80%90android%e3%80%91%e8%83%8c%e6%99%af%e7%94%bb%e5%83%8f%e3%81%ae%e3%83%aa%e3%83%94%e3%83%bc%e3%83%88%e3%81%8c%e5%8a%b9%e3%81%8b%e3%81%aa%e3%81%84%e5%95%8f%e9%a1%8c.html#comments</comments>
		<pubDate>Mon, 25 Feb 2013 10:22:53 +0000</pubDate>
		<dc:creator>ino</dc:creator>
				<category><![CDATA[Android開発]]></category>
		<category><![CDATA[Android]]></category>

		<guid isPermaLink="false">http://www.ecoop.net/memo/?p=1029</guid>
		<description><![CDATA[画像のコストを下げるために、背景画像に tileMode=&#8221;repeat&#8221; を指定してタイルとして使っていたのですが、 Android 2.3 系以下の端末で特定のアクティビティでだけリピートが聞 [...]<div class='yarpp-related-rss'>

関連記事:<ol>
<li><a href='http://www.ecoop.net/memo/archives/2011-01-24-1.html' rel='bookmark' title='Android で System.exit() を使ってはいけない理由と、終了方法のまとめ'>Android で System.exit() を使ってはいけない理由と、終了方法のまとめ</a></li>
<li><a href='http://www.ecoop.net/memo/archives/2010-11-19-1.html' rel='bookmark' title='Android1.6でLinearLayoutを子要素なしで表示するとRuntimeExceptionになる'>Android1.6でLinearLayoutを子要素なしで表示するとRuntimeExceptionになる</a></li>
<li><a href='http://www.ecoop.net/memo/archives/2010-10-21-1.html' rel='bookmark' title='apk パッケージの AndroidManifest.xml を解析するには'>apk パッケージの AndroidManifest.xml を解析するには</a></li>
</ol>
</div>
]]></description>
				<content:encoded><![CDATA[<p>画像のコストを下げるために、背景画像に tileMode=&#8221;repeat&#8221; を指定してタイルとして使っていたのですが、<br />
Android 2.3 系以下の端末で特定のアクティビティでだけリピートが聞かなくてハマりました。</p>
<p>どうやらハニカムで修正されたOSの不具合だそうで…以下対策がわかったのでメモ。<span id="more-1029"></span><br />
<h2>どういう状況？</h2>
<p>タイル背景(bg.xml)はこんな感じです。</p>
<pre>
&lt;!-- res/drawable/bg.xml --&gt;
&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;bitmap xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
    android:antialias=&quot;true&quot;
    android:dither=&quot;false&quot;
    android:filter=&quot;false&quot;
    android:gravity=&quot;fill&quot;
    android:src=&quot;@drawable/bg_repeat&quot;
    android:tileMode=&quot;repeat&quot; /&gt;
</pre>
<p>これを各レイアウトで次のように使っています。</p>
<pre>
&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;RelativeLayout xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
    android:layout_width=&quot;match_parent&quot;
    android:layout_height=&quot;match_parent&quot;
    android:background=&quot;@drawable/bg&quot; &gt;
</pre>
<p>リピートが効く画面もあるのですが、効かない画面では伸びたタイル画像が<br />
１枚だけ表示されてしまいます。これはかっこ悪い。</p>
<h2>直し方は？</h2>
<p><a href="http://stackoverflow.com/questions/4077487/background-image-not-repeating-in-android-layout">StackOverFlow(background image not repeating in android layout)</a>に書かれていました。</p>
<p>下のコードを適宜、描画の更新タイミングでリピートを行なっているビューに対して実行するといいようです。</p>
<pre>
public static void fixBackgroundRepeat(View view) {
      Drawable bg = view.getBackground();
      if(bg != null) {
           if(bg instanceof BitmapDrawable) {
                BitmapDrawable bmp = (BitmapDrawable) bg;
                bmp.mutate(); // make sure that we aren't sharing state anymore
                bmp.setTileModeXY(TileMode.REPEAT, TileMode.REPEAT);
           }
      }
 }
</pre>
<p>画面背景のリピートを修正するならこのように実行すればいいでしょう。</p>
<pre>
fixBackgroundRepeat(this.findViewById(android.R.id.content)
				.getRootView());
</pre>
<h2>どうしてこうなった</h2>
<p>StackOverFlowのコメントによると、ハニカム(Android 3.0)で修正された不具合のようで、同じ画面でBitmapDrawableが多数使われていると、内部でのBitmap(とBitmapの状態設定)の再利用のタイミングでtileMode設定が簡単に失われてしまうようです。</p>
<p>対策で行っていることは、消えてしまった背景画像のリピート設定を再度設定し直しているのですね。</p>
<div class='yarpp-related-rss'>
<p>関連記事:</p><ol>
<li><a href='http://www.ecoop.net/memo/archives/2011-01-24-1.html' rel='bookmark' title='Android で System.exit() を使ってはいけない理由と、終了方法のまとめ'>Android で System.exit() を使ってはいけない理由と、終了方法のまとめ</a></li>
<li><a href='http://www.ecoop.net/memo/archives/2010-11-19-1.html' rel='bookmark' title='Android1.6でLinearLayoutを子要素なしで表示するとRuntimeExceptionになる'>Android1.6でLinearLayoutを子要素なしで表示するとRuntimeExceptionになる</a></li>
<li><a href='http://www.ecoop.net/memo/archives/2010-10-21-1.html' rel='bookmark' title='apk パッケージの AndroidManifest.xml を解析するには'>apk パッケージの AndroidManifest.xml を解析するには</a></li>
</ol>
</div>
<img src="http://feeds.feedburner.com/~r/ecoop/~4/-gm9AJ5UkXE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.ecoop.net/memo/archives/%e3%80%90android%e3%80%91%e8%83%8c%e6%99%af%e7%94%bb%e5%83%8f%e3%81%ae%e3%83%aa%e3%83%94%e3%83%bc%e3%83%88%e3%81%8c%e5%8a%b9%e3%81%8b%e3%81%aa%e3%81%84%e5%95%8f%e9%a1%8c.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.ecoop.net/memo/archives/%e3%80%90android%e3%80%91%e8%83%8c%e6%99%af%e7%94%bb%e5%83%8f%e3%81%ae%e3%83%aa%e3%83%94%e3%83%bc%e3%83%88%e3%81%8c%e5%8a%b9%e3%81%8b%e3%81%aa%e3%81%84%e5%95%8f%e9%a1%8c.html" />
	<feedburner:origLink>http://www.ecoop.net/memo/archives/%e3%80%90android%e3%80%91%e8%83%8c%e6%99%af%e7%94%bb%e5%83%8f%e3%81%ae%e3%83%aa%e3%83%94%e3%83%bc%e3%83%88%e3%81%8c%e5%8a%b9%e3%81%8b%e3%81%aa%e3%81%84%e5%95%8f%e9%a1%8c.html?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=%25e3%2580%2590android%25e3%2580%2591%25e8%2583%258c%25e6%2599%25af%25e7%2594%25bb%25e5%2583%258f%25e3%2581%25ae%25e3%2583%25aa%25e3%2583%2594%25e3%2583%25bc%25e3%2583%2588%25e3%2581%258c%25e5%258a%25b9%25e3%2581%258b%25e3%2581%25aa%25e3%2581%2584%25e5%2595%258f%25e9%25a1%258c</feedburner:origLink></item>
		<item>
		<title>【Sublime Text 2】Mac OS Xで日本語入力のタブ変換ができなくなった場合の対処方法</title>
		<link>http://feedproxy.google.com/~r/ecoop/~3/rjcqeKx9dNs/%e3%80%90sublime-text-2%e3%80%91mac-os-x%e3%81%a7%e6%97%a5%e6%9c%ac%e8%aa%9e%e5%85%a5%e5%8a%9b%e3%81%ae%e3%82%bf%e3%83%96%e5%a4%89%e6%8f%9b%e3%81%8c%e3%81%a7%e3%81%8d%e3%81%aa%e3%81%8f%e3%81%aa.html</link>
		<comments>http://www.ecoop.net/memo/archives/%e3%80%90sublime-text-2%e3%80%91mac-os-x%e3%81%a7%e6%97%a5%e6%9c%ac%e8%aa%9e%e5%85%a5%e5%8a%9b%e3%81%ae%e3%82%bf%e3%83%96%e5%a4%89%e6%8f%9b%e3%81%8c%e3%81%a7%e3%81%8d%e3%81%aa%e3%81%8f%e3%81%aa.html#comments</comments>
		<pubDate>Fri, 22 Feb 2013 08:55:56 +0000</pubDate>
		<dc:creator>ino</dc:creator>
				<category><![CDATA[Mac]]></category>
		<category><![CDATA[Sublime Text 2]]></category>

		<guid isPermaLink="false">http://www.ecoop.net/memo/?p=1028</guid>
		<description><![CDATA[Sublime Text 2 をしばらく使っていて、Mac OS Xで日本語入力のタブ変換が出来ないことにふと気づきました。 ひらがなを入力したら変換候補が出てきますが、ここでタブを押して変換候補を切り替えようとしたら、 [...]<div class='yarpp-related-rss yarpp-related-none'>

関連記事はありません。
</div>
]]></description>
				<content:encoded><![CDATA[<p>Sublime Text 2 をしばらく使っていて、Mac OS Xで日本語入力のタブ変換が出来ないことにふと気づきました。</p>
<p>ひらがなを入力したら変換候補が出てきますが、ここでタブを押して変換候補を切り替えようとしたら、タブキーを押した途端に変換候補の欄が閉じて、入力中の文字が消えてしまう。</p>
<p>カーソルで変換候補を切り替えればいつも通り入力はできます。<br />
でも、つい癖でタブキーを押すたび、入力をやり直すハメになって、手が止まる…。</p>
<p>これじゃいけないとタブ関係のキーバインドを見なおしたら何とかなったので、<br />
修正方法をメモしておきます。</p>
<h2>解決方法</h2>
<p>メニューからPreferences &gt; Key Bindings &#8211; Default を開きます。<br />
すると、下のような怪しい部分があるので…</p>
<pre>
	{ "keys": ["tab"], "command": "insert_best_completion", "args": {"default": "\t", "exact": true} },
	{ "keys": ["tab"], "command": "insert_best_completion", "args": {"default": "\t", "exact": false},
		"context":
		[
			{ "key": "setting.tab_completion", "operator": "equal", "operand": true }
		]
	},
</pre>
<p>これをコメントアウトしてしまいます。</p>
<pre>
/*
	{ "keys": ["tab"], "command": "insert_best_completion", "args": {"default": "\t", "exact": true} },
	{ "keys": ["tab"], "command": "insert_best_completion", "args": {"default": "\t", "exact": false},
		"context":
		[
			{ "key": "setting.tab_completion", "operator": "equal", "operand": true }
		]
	},
*/
</pre>
<p>あとは保存すればOK。</p>
<p>これで、ストレスなく快適にSublime Text 2を使えるようになりました。</p>
<h2>それで原因は？</h2>
<p>なんでしょうね…。<br />
色々とプラグインを入れて使っているため、何が原因かは不明なんです。<br />
情報求む。</p>
<div class='yarpp-related-rss yarpp-related-none'>
<p>関連記事はありません。</p>
</div>
<img src="http://feeds.feedburner.com/~r/ecoop/~4/rjcqeKx9dNs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.ecoop.net/memo/archives/%e3%80%90sublime-text-2%e3%80%91mac-os-x%e3%81%a7%e6%97%a5%e6%9c%ac%e8%aa%9e%e5%85%a5%e5%8a%9b%e3%81%ae%e3%82%bf%e3%83%96%e5%a4%89%e6%8f%9b%e3%81%8c%e3%81%a7%e3%81%8d%e3%81%aa%e3%81%8f%e3%81%aa.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.ecoop.net/memo/archives/%e3%80%90sublime-text-2%e3%80%91mac-os-x%e3%81%a7%e6%97%a5%e6%9c%ac%e8%aa%9e%e5%85%a5%e5%8a%9b%e3%81%ae%e3%82%bf%e3%83%96%e5%a4%89%e6%8f%9b%e3%81%8c%e3%81%a7%e3%81%8d%e3%81%aa%e3%81%8f%e3%81%aa.html" />
	<feedburner:origLink>http://www.ecoop.net/memo/archives/%e3%80%90sublime-text-2%e3%80%91mac-os-x%e3%81%a7%e6%97%a5%e6%9c%ac%e8%aa%9e%e5%85%a5%e5%8a%9b%e3%81%ae%e3%82%bf%e3%83%96%e5%a4%89%e6%8f%9b%e3%81%8c%e3%81%a7%e3%81%8d%e3%81%aa%e3%81%8f%e3%81%aa.html?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=%25e3%2580%2590sublime-text-2%25e3%2580%2591mac-os-x%25e3%2581%25a7%25e6%2597%25a5%25e6%259c%25ac%25e8%25aa%259e%25e5%2585%25a5%25e5%258a%259b%25e3%2581%25ae%25e3%2582%25bf%25e3%2583%2596%25e5%25a4%2589%25e6%258f%259b%25e3%2581%258c%25e3%2581%25a7%25e3%2581%258d%25e3%2581%25aa%25e3%2581%258f%25e3%2581%25aa</feedburner:origLink></item>
		<item>
		<title>Mac OS X で pkg-configでエラーになった</title>
		<link>http://feedproxy.google.com/~r/ecoop/~3/SnPgs_Xal-E/mac-os-x-%e3%81%a7-pkg-config%e3%81%a7%e3%82%a8%e3%83%a9%e3%83%bc%e3%81%ab%e3%81%aa%e3%81%a3%e3%81%9f.html</link>
		<comments>http://www.ecoop.net/memo/archives/mac-os-x-%e3%81%a7-pkg-config%e3%81%a7%e3%82%a8%e3%83%a9%e3%83%bc%e3%81%ab%e3%81%aa%e3%81%a3%e3%81%9f.html#comments</comments>
		<pubDate>Tue, 05 Feb 2013 11:07:16 +0000</pubDate>
		<dc:creator>ino</dc:creator>
				<category><![CDATA[mac]]></category>
		<category><![CDATA[Homebrew]]></category>
		<category><![CDATA[Mac]]></category>

		<guid isPermaLink="false">http://www.ecoop.net/memo/?p=1026</guid>
		<description><![CDATA[普段から OS Xのパッケージ管理には Homebrew を使っています。 Homebrew に含まれる一部パッケージ(pango)のバージョンを変えてインストールする必要があり、自分でビルドしてみようと思ったところすっ [...]<div class='yarpp-related-rss yarpp-related-none'>

関連記事はありません。
</div>
]]></description>
				<content:encoded><![CDATA[<p>普段から OS Xのパッケージ管理には Homebrew を使っています。<br />
Homebrew に含まれる一部パッケージ(pango)のバージョンを変えてインストールする必要があり、自分でビルドしてみようと思ったところすっかりはまってしまいました。</p>
<h3>発生した症状</h3>
<p>Homebrew でインストールしたパッケージ(cairo)に依存している箇所でエラーになってしまいました。</p>
<p>具体的には ./configure の実行中に pkg-config で依存しているパッケージの.pc ファイルが存在しないと怒られています。</p>
<pre>
# config.log
pkg-config --cflags --print-errors cairo 

Package xcb-shm was not found in the pkg-config search path.
Perhaps you should add the directory containing `xcb-shm.pc'
to the PKG_CONFIG_PATH environment variable
Package 'xcb-shm', required by 'cairo', not found
</pre>
<h3>解決するには？</h3>
<p>エラーメッセージどおり、環境変数 PKG_CONFIG_PATHの通るところに .pc ファイルを配置するか、環境変数にパスを追加して再実行することで解決しました。</p>
<p>PKG_CONFIG_PATHが空の場合のデフォルトは</p>
<p>/usr/local/lib/pkgconfig</p>
<p>です。</p>
<p>今回は /opt/X11/lib/pkgconfig/ の中に依存している .pcファイルがあったので、パス追加で対応しました。</p>
<pre>
$ export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:/opt/X11/lib/
</pre>
<p>再実行し、エラーが出なくなるのを確認します。</p>
<pre>
$ pkg-config --cflags --print-errors cairo
</pre>
<p>あとは通常通り、./configure, make などを実行すればOKです。</p>
<p>OS X では(Homebrewでは？) X11 関係の pkgconfigのパッケージ情報ファイル(.pcファイル)は /opt/X11/lib/pkgconfig/ にあるのですね。</p>
<div class='yarpp-related-rss yarpp-related-none'>
<p>関連記事はありません。</p>
</div>
<img src="http://feeds.feedburner.com/~r/ecoop/~4/SnPgs_Xal-E" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.ecoop.net/memo/archives/mac-os-x-%e3%81%a7-pkg-config%e3%81%a7%e3%82%a8%e3%83%a9%e3%83%bc%e3%81%ab%e3%81%aa%e3%81%a3%e3%81%9f.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.ecoop.net/memo/archives/mac-os-x-%e3%81%a7-pkg-config%e3%81%a7%e3%82%a8%e3%83%a9%e3%83%bc%e3%81%ab%e3%81%aa%e3%81%a3%e3%81%9f.html" />
	<feedburner:origLink>http://www.ecoop.net/memo/archives/mac-os-x-%e3%81%a7-pkg-config%e3%81%a7%e3%82%a8%e3%83%a9%e3%83%bc%e3%81%ab%e3%81%aa%e3%81%a3%e3%81%9f.html?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=mac-os-x-%25e3%2581%25a7-pkg-config%25e3%2581%25a7%25e3%2582%25a8%25e3%2583%25a9%25e3%2583%25bc%25e3%2581%25ab%25e3%2581%25aa%25e3%2581%25a3%25e3%2581%259f</feedburner:origLink></item>
	</channel>
</rss>
