<?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>Temporality &#187; java</title>
	<atom:link href="http://www.sylin.net/blog/tag/java/feed" rel="self" type="application/rss+xml" />
	<link>http://www.sylin.net/blog</link>
	<description>my causerie</description>
	<lastBuildDate>Sat, 26 Jun 2010 19:44:04 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Android on Ubuntu 9.10</title>
		<link>http://www.sylin.net/blog/2009/12/11/171</link>
		<comments>http://www.sylin.net/blog/2009/12/11/171#comments</comments>
		<pubDate>Thu, 10 Dec 2009 18:34:34 +0000</pubDate>
		<dc:creator>sylin</dc:creator>
				<category><![CDATA[android]]></category>
		<category><![CDATA[gcc]]></category>
		<category><![CDATA[grub]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[karmic]]></category>
		<category><![CDATA[libc]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://www.sylin.net/blog/?p=171</guid>
		<description><![CDATA[原本一開始用的是 Ubuntu 9.04(jaunty)，後來沒多久 Ubuntu 9.10 就出了，於是趁機也升級到 Ubuntu 9.10(karmic)。 升級之後難免會遇到一些問題，或說是和原本不一樣的架構或設定需要調整。稍微把這次遇到有關的部份紀錄一下，主要會圍繞在 Android Framework 上。 GCC Android 1.6 Donut 需要使用 gcc 4.4 之前的版本(不包含 4.4)，因為 4.4 對語法的要求比較嚴謹，而 Donut 是在 gcc 4.4 發表以前 Release 的，所以難免會有不相容的情況，原本 Ubuntu 9.04 內建的是 gcc 4.3.4，而 Ubuntu 9.10 則是 gcc 4.4.1，所以可以使用 update-alternatives 指令來切換 gcc/g++，或者考慮使用 jserv 提供的 patch (patch 的部份我沒有測試過，不確定是不是能解決這個問題) Java 5 由於 Java 5 已經宣佈不再支援，從 Ubuntu [...]]]></description>
			<content:encoded><![CDATA[<p>原本一開始用的是 Ubuntu 9.04(jaunty)，後來沒多久 Ubuntu 9.10 就出了，於是趁機也升級到 Ubuntu 9.10(karmic)。</p>
<p>升級之後難免會遇到一些問題，或說是和原本不一樣的架構或設定需要調整。稍微把這次遇到有關的部份紀錄一下，主要會圍繞在 Android Framework 上。<br />
<span id="more-171"></span></p>
<h4>GCC</h4>
<p>Android 1.6 Donut 需要使用 gcc 4.4 之前的版本(不包含 4.4)，因為 4.4 對語法的要求比較嚴謹，而 Donut 是在 gcc 4.4 發表以前 Release 的，所以難免會有不相容的情況，原本 Ubuntu 9.04 內建的是 gcc 4.3.4，而 Ubuntu 9.10 則是 gcc 4.4.1，所以可以使用 update-alternatives 指令來切換 gcc/g++，或者考慮使用 jserv 提供的 <a href="http://jserv.blogspot.com/2009/06/android-gnu-toolchain-gcc-44.html">patch</a> (patch 的部份我沒有測試過，不確定是不是能解決這個問題)</p>
<h4>Java 5</h4>
<p>由於 Java 5 已經宣佈不再支援，從 Ubuntu 9.10 開始就不再提供 Java 5 的相關套件，所以使用 apt 也只能找到 Java6 的相關套件，於是使用者需要從 9.04 的套件中去安裝。</p>
<p><strong>解法</strong>: 編輯 /etc/apt/sources.list<br />
把 deb 和 deb-src 使用 karmic 的部份，複製一份，並改成 jaunty，以我的為例<br />
<!--DEVFMTCODE--><pre class="devcodeblock" title="Text"><div class="devcodeoverflow">deb http://ftp.twaren.net/ubuntu karmic main universe restricted multiverse
deb-src http://ftp.twaren.net/ubuntu karmic main universe restricted multiverse
deb http://ftp.twaren.net/ubuntu jaunty main universe restricted multiverse
deb-src http://ftp.twaren.net/ubuntu jaunty main universe restricted multiverse</div></pre><!--END_DEVFMTCODE--></p>
<p>然後更新清單之後，就可以安裝 sun-java5-jdk 了<br />
<!--DEVFMTCODE--><pre class="devcodeblock" title="Bash"><div class="devcodeoverflow"><span style="color: #666666; font-style: italic;"># sudo apt-get update</span>
<span style="color: #666666; font-style: italic;"># sudo apt-get install sun-java5-jdk</div></pre><!--END_DEVFMTCODE--></p>
<p>參考資料: <a href="http://code.google.com/p/androidbmi/wiki/Compile">androidbmi</a></p>
<h4>glibc</h4>
<p>從 9.04 升級到 9.10 中間，也剛好遇到其中的 glibc 升級，增加了一個新的函式叫做 <a href="http://www.gnu.org/s/libc/manual/html_node/Line-Input.html">getline()</a>(但我不確定是那一版加的)，如果原本的程式自己寫了一個 getline() 的話，就會有問題，而且剛好這個名字還蠻容易被使用的，所以似乎蠻多人遇到這個問題。</p>
<h4>GRUB 2</h4>
<p>9.10 另一個重大更新是升級到 Grub2 ，似乎蠻多人在這裡<a href="http://www.shsh.ylc.edu.tw/~taichis/wp/20091101/705">受害</a>的，但我似乎沒選到Grub2，所以還沒遇到，暫且沒事，等有空再來更新好了。</p>
<hr />
<p><small>© admin for <a href="http://www.sylin.net/blog">Temporality</a>, 2009. |
<a href="http://www.sylin.net/blog/2009/12/11/171">Permalink</a> |
<a href="http://www.sylin.net/blog/2009/12/11/171#comments">One comment</a> |
Add to
<a href="http://del.icio.us/post?url=http://www.sylin.net/blog/2009/12/11/171&title=Android on Ubuntu 9.10">del.icio.us</a>
<br/>
Post tags: <a href="http://www.sylin.net/blog/tag/android" rel="tag">android</a>, <a href="http://www.sylin.net/blog/tag/gcc" rel="tag">gcc</a>, <a href="http://www.sylin.net/blog/tag/grub" rel="tag">grub</a>, <a href="http://www.sylin.net/blog/tag/java" rel="tag">java</a>, <a href="http://www.sylin.net/blog/tag/karmic" rel="tag">karmic</a>, <a href="http://www.sylin.net/blog/tag/libc" rel="tag">libc</a>, <a href="http://www.sylin.net/blog/tag/ubuntu" rel="tag">ubuntu</a><br/>
</small></p>
<p><small>Feed enhanced by <a href='http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/'>Better Feed</a> from  <a href='http://planetozh.com/blog/'>Ozh</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://www.sylin.net/blog/2009/12/11/171/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Java 5.0 New Features</title>
		<link>http://www.sylin.net/blog/2009/11/22/167</link>
		<comments>http://www.sylin.net/blog/2009/11/22/167#comments</comments>
		<pubDate>Sun, 22 Nov 2009 07:22:08 +0000</pubDate>
		<dc:creator>sylin</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://www.sylin.net/blog/?p=167</guid>
		<description><![CDATA[最近又開始寫 Java 了, 大概四年沒碰過 Java 了吧，而且其實以前也沒用很熟，好像只用到 Java 2 的功能，現在接觸 Android SDK，其實看到蠻多 Java5 才有的新功能。 官方宣佈: http://java.sun.com/j2se/1.5.0/docs/relnotes/features.html 中文摘要: http://mi.hosp.ncku.edu.tw/km/index.php/javatech/43-javaother/46-java-50- 最近有遇到的是 Enumerated for/in Annotation Static Import Generic 是沒用到, 不過倒是遇到使用舊語法導致的編譯器警告 Enumerated型別 　同C++中Enum。在Java 1.4以前都用public static final屬性代替Enum功能，這兩種方法各有優缺點。Enum重點如下︰ Enum是class Enum繼承了java.lang.Enum Enumerated型別不是integer Enum沒有public constructor Enum值為public static final Enum可用==及equals作比較 Enum實作了java.lang.Comparable Enum改寫過toString() Enum提供valueOf() Enum定義了final ordinal() Enum定義了values() 可是似乎不太好用，因為預設「Enumerated型別不是integer」，用起來沒辦法像 C/C++ 自由跟普通變數作轉換，也有人認為 Java5 的 Enum 設計成這樣是多此一舉，因為它骨子裡還是用 class 去作，而且 [...]]]></description>
			<content:encoded><![CDATA[<p>最近又開始寫 Java 了, 大概四年沒碰過 Java 了吧，而且其實以前也沒用很熟，好像只用到 Java 2 的功能，現在接觸 Android SDK，其實看到蠻多 Java5 才有的新功能。</p>
<p>官方宣佈: http://java.sun.com/j2se/1.5.0/docs/relnotes/features.html</p>
<p>中文摘要: http://mi.hosp.ncku.edu.tw/km/index.php/javatech/43-javaother/46-java-50-</p>
<p>最近有遇到的是</p>
<ul>
<li>Enumerated</li>
<li>for/in </li>
<li>Annotation</li>
<li>Static Import</li>
</ul>
<p>Generic 是沒用到, 不過倒是遇到使用舊語法導致的編譯器警告</p>
<p><span id="more-167"></span></p>
<h3>Enumerated型別</h3>
<p>　同C++中Enum。在Java 1.4以前都用public static final屬性代替Enum功能，這兩種方法各有優缺點。Enum重點如下︰ </p>
<ul>
<li>Enum是class </li>
<li>Enum繼承了java.lang.Enum </li>
<li>Enumerated型別不是integer </li>
<li>Enum沒有public constructor </li>
<li>Enum值為public static final </li>
<li>Enum可用==及equals作比較 </li>
<li>Enum實作了java.lang.Comparable </li>
<li>Enum改寫過toString() </li>
<li>Enum提供valueOf() </li>
<li>Enum定義了final ordinal() </li>
<li>Enum定義了values() </li>
</ul>
<p>可是似乎不太好用，因為預設「Enumerated型別不是integer」，用起來沒辦法像 C/C++ 自由跟普通變數作轉換，也有人認為 Java5 的 Enum 設計成這樣是多此一舉，因為它骨子裡還是用 class 去作，而且 Android SDK 似乎本身也沒用 Enum，不知道有什麼考量嗎?</p>
<p>以我遇到的狀況來說，原本的程式有定義一組參數，有幾種不同的選項，所以是定義一大堆 final variable, 例如:<br />
<code><br />
 private static final int XXX_OPTION_OO = 0;<br />
 private static final int XXX_OPTION_OX = 1;<br />
 private static final int XXX_OPTION_XO = 2;<br />
 private static final int XXX_OPTION_XX = 3;<br />
</code><br />
真正選到的參數會以 interger 的形式帶進來(可能是讀檔，或從config讀進來，未必是傳參數的方式)和以上幾個作比較，使得我要使用 Enum 時還要再自己寫一個轉換函式，網路上也很多人用 constructor 的方式加上一個 _id 來作轉換，不過這作法似乎蠻醜的，我還沒決定要這樣用。</p>
<h3>for/in</h3>
<p>原本的 iterator 可以改成 for( item : items ) 的方式</p>
<h3>Annotation</h3>
<ul>
<li>Override</li>
<li>Deprecated</li>
<li>SupressWarnings</li>
<li>Marker annotation </li>
<li>Single-Value annotation </li>
<li>Full annotation </li>
</ul>
<p>這個倒是不錯，一方面提供 document 的資訊，一方面也能避免使用繼承時打錯字造成的 bug 之類的問題。</p>
<h3>靜態匯入（Static Import）</h3>
<p>可以直接 import 其他 package 的變數或常數定義，其實可以配合前面提到的 Enum/常數時使用。</p>
<hr />
<p><small>© admin for <a href="http://www.sylin.net/blog">Temporality</a>, 2009. |
<a href="http://www.sylin.net/blog/2009/11/22/167">Permalink</a> |
<a href="http://www.sylin.net/blog/2009/11/22/167#comments">No comment</a> |
Add to
<a href="http://del.icio.us/post?url=http://www.sylin.net/blog/2009/11/22/167&title=Java 5.0 New Features">del.icio.us</a>
<br/>
Post tags: <a href="http://www.sylin.net/blog/tag/android" rel="tag">android</a>, <a href="http://www.sylin.net/blog/tag/java" rel="tag">java</a><br/>
</small></p>
<p><small>Feed enhanced by <a href='http://planetozh.com/blog/my-projects/wordpress-plugin-better-feed-rss/'>Better Feed</a> from  <a href='http://planetozh.com/blog/'>Ozh</a></small></p>
]]></content:encoded>
			<wfw:commentRss>http://www.sylin.net/blog/2009/11/22/167/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
