tag:blogger.com,1999:blog-105198092024-03-14T02:07:01.761+08:00闇月千瞳的部落格yuanfarn.blogspot.com (yuanfarn.blogspot.tw)闇月千瞳的部落格http://www.blogger.com/profile/16152087862701279897noreply@blogger.comBlogger91125tag:blogger.com,1999:blog-10519809.post-35429178919517021422015-04-27T15:40:00.000+08:002015-04-27T15:40:52.638+08:00Ubuntu 15.04 與中文輸入法<p>前兩天發現代號 Vivid Vervet 的 Ubuntu 15.04 發佈了,原本也沒有特別想下載回來試試,畢竟我很久沒使用 Ubuntu 了。不過看到了 《<a href="http://technews.tw/2015/04/24/ubuntu-15-04-iot/">Ubuntu 15.04 擁抱物聯網,支援無人機與機器人</a>》這篇文章,提到針對物聯網裝置設計的 <a href="http://developer.ubuntu.com/en/snappy/">Snappy Ubuntu Core</a>,覺得還頗有意思的,就乾脆下載 Ubuntu 15.04 回來試試囉!然後再找機會來研究一下 Snappy Ubuntu Core。
</p><p>安裝完 Ubuntu 15.04 後,首先要搞定的就是中文輸入法。或許是太久沒使用 Ubuntu 了,我覺得 Ubuntu 15.04 的中文輸入法容易處理多了。首先,安裝完 Ubutnu 後,在語言設定 (Language Support) 裡確定將「正體中文 Chinese (traditional)」安裝好,通常我會將「正體中文 Chinese (traditional)」和「簡體中文 Chinese (simplified)」一併安裝。
</p><p>此外,也在「Keyboard input method system」這項選擇「fcitx」。
</p><p><a href="http://2.bp.blogspot.com/-PxfwkuTpEZY/VT3e79jlRdI/AAAAAAAALSc/-P2LdpxM6bY/s1600/ubuntu1504-c01.png" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-PxfwkuTpEZY/VT3e79jlRdI/AAAAAAAALSc/-P2LdpxM6bY/s1600/ubuntu1504-c01.png" style="width: 720px;" /></a>
</p><p>接著確定是否安裝了對應的輸入法表格。
</p><p>例如,我一向使用倉頡輸入法,而且也比較習慣使用第三代的拆碼方式 (其實是被微軟內建的新倉頡輸入法影響的),所以確定安裝了 fcitx-table-cangjie3 這個套件。若是使用新酷音輸入法的朋友,則是安裝 fcitx-chewing 這個套件。
</p><p><a href="http://2.bp.blogspot.com/-fnK2YR3NnJY/VT3e79stgzI/AAAAAAAALSY/tx8g0aoYxzY/s1600/ubuntu1504-c02.png" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-fnK2YR3NnJY/VT3e79stgzI/AAAAAAAALSY/tx8g0aoYxzY/s1600/ubuntu1504-c02.png" style="width: 720px;" /></a>
</p><p>登出再登入後,可以看到 Ubntu 右上角的輸入法圖示變更了,從那個圖示可以開啟 fcitx 的設定 (Fcitx Configuration),加入所使用的輸入法表格即可使用中文輸入法了。
</p><p>例如,由於我使用了第三代拆碼的倉頡輸入法,於是加入了 Cangjie3 這項。
</p><p><a href="http://1.bp.blogspot.com/-84SPphdA7Iw/VT3e7idwK_I/AAAAAAAALSg/Vwb08Ctktkc/s1600/ubuntu1504-c03.png" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-84SPphdA7Iw/VT3e7idwK_I/AAAAAAAALSg/Vwb08Ctktkc/s1600/ubuntu1504-c03.png" style="width: 720px;" /></a>
</p>
闇月千瞳的部落格http://www.blogger.com/profile/16152087862701279897noreply@blogger.com0tag:blogger.com,1999:blog-10519809.post-52149081497143931502014-01-15T11:49:00.001+08:002014-01-15T11:49:22.103+08:00不規則拼貼圖的工具比較:PhotoCap vs. Shape Collage<p>之前在《<a href="http://yuanfarn.blogspot.tw/2013/11/photocap.html">使用 PhotoCap 製作不規則的拼貼圖</a>》這篇文章裡說明如何使用 PhotoCap 這個軟體來製作不規則的拼貼圖。除了 PhotoCap 外,也還有不多軟體可以製作這樣的圖片,例如 <a href="http://www.shapecollage.com/">Shape Collage</a> 或 <a href="http://www.collageitfree.com/">CollageIt</a> 等。
</p><p>其中,在 Shape Collage 的網頁提到支援 Linux 的版本,但下載時卻發生 ShapeCollage-3.1.tar.gz 檔案連結失效的狀況。
</p><p>另外,Shape Collage 和 CollageIt 都各有兩個版本,分別是 Free 和 Pro 兩種。以下是各自的差異:
</p><p><div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/-HWAPdlW7rPA/UtX_1_n5TXI/AAAAAAAAKSU/ZzomPhU9yT4/s1600/Shape+Collage.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-HWAPdlW7rPA/UtX_1_n5TXI/AAAAAAAAKSU/ZzomPhU9yT4/s1600/Shape+Collage.png" style="width: 720px;" /></a></div>
</p><p><div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/-XZggMbxTKjA/UtX_7oBHzFI/AAAAAAAAKSc/fJo7d1_tZhU/s1600/CollageIt.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-XZggMbxTKjA/UtX_7oBHzFI/AAAAAAAAKSc/fJo7d1_tZhU/s1600/CollageIt.png" style="width: 720px;" /></a></div>
</p><p>這篇文章則另外比較了 PhotoCap 和 Shape Collage 製作不規則拼貼的結果。
</p><p>首先,先來看一下 PhotoCap 的結果:
</p><p><div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/-GGmvVYaUT8o/UtYBa2MmS4I/AAAAAAAAKSs/GdkJC0u06Vc/s1600/photocap2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-GGmvVYaUT8o/UtYBa2MmS4I/AAAAAAAAKSs/GdkJC0u06Vc/s1600/photocap2.jpg" style="width: 720px;" /></a></div>
</p><p><div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/-5uQS0BePKMs/UtYBW73hrYI/AAAAAAAAKSk/ugJ76Vus6Dk/s1600/photocap1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-5uQS0BePKMs/UtYBW73hrYI/AAAAAAAAKSk/ugJ76Vus6Dk/s1600/photocap1.jpg" style="width: 720px;" /></a></div>
</p><p>可以看出,PhotoCap 產生的不規則拼貼還是疊得太密了,但它可以直接在 PhotoCap 裡編輯,調整每一張相片的位置和擺放角度。
</p><p>接著,來看看 Shape Collage 的結果:
</p><p><div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/-spVat7-sJug/UtYCkOV5wYI/AAAAAAAAKS4/ygzzmS4xU6g/s1600/SharpCollage1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-spVat7-sJug/UtYCkOV5wYI/AAAAAAAAKS4/ygzzmS4xU6g/s1600/SharpCollage1.jpg" style="width: 720px;" /></a></div>
</p><p><div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/-Q9EZrwQTutA/UtYCkLRmVhI/AAAAAAAAKS0/dfODceZozrA/s1600/SharpCollage2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-Q9EZrwQTutA/UtYCkLRmVhI/AAAAAAAAKS0/dfODceZozrA/s1600/SharpCollage2.jpg" style="width: 720px;" /></a></div>
</p><p>Shape Collage 可以產生整齊排列和不規則排列的相片拼貼,但必須是 Shape Collage Pro 版本才可以再編輯生成的結果。至於 Free 版本會在生成的相片拼貼上擺放 Watermark,由於並不是十分搶眼的 Watermark,我覺得可以不用太在意,畢竟是免費使用該軟體,藉由一個淡淡且不搶戲的 Watermark 幫忙宣傳一下是無可厚非的。
</p>
闇月千瞳的部落格http://www.blogger.com/profile/16152087862701279897noreply@blogger.com0tag:blogger.com,1999:blog-10519809.post-45482294595071594342013-12-16T01:02:00.000+08:002013-12-16T01:02:48.373+08:00使用 javah 產生 Native Support / JNI 的標頭檔<p>在《<a href="http://yuanfarn.blogspot.tw/2013/12/hellojni-android-ndk.html">從 HelloJNI 開始 Android NDK 的使用</a>》這篇文章裡,可以看到 HelloJNI++ 專案的 jni/hellojni.c 裡實作了這段程式碼:
</p><p><pre class="prettyprint">jstring
Java_demo_example_hellojni_HelloActivity_stringFromJNI( JNIEnv* env,
jobject thiz )
{
return (*env)->NewStringUTF(env, "Hello from JNI !");
} </pre>
</p><p>而在《<a href="http://yuanfarn.blogspot.tw/2013/12/c-hellojni.html">使用 C++ 改寫 HelloJNI++</a>》這篇文章裡,也可以在 jni/hellojni.cpp 看到了這段程式碼:
</p><p><pre class="prettyprint">static const char *classPathName = "demo/example/hellojni/HelloActivity";
static JNINativeMethod methods[] = {
{"stringFromJNI", "()Ljava/lang/String;", (void*)Java_demo_example_hellojni_HelloActivity_stringFromJNI },
}; </pre>
</p><p>這兩處的程式碼,都是對應到 HelloJNI++ 專案的 Java 程式碼:
</p><p><pre class="prettyprint">package demo.example.hellojni;
public class HelloActivity extends Activity {
public native String stringFromJNI();
} </pre>
</p><p>那麼,這裡的 <code class="prettyprint">Java_demo_example_hellojni_HelloActivity_stringFromJNI</code> 和 <code class="prettyprint">()Ljava/lang/String;</code> 如何定義呢?在網路上找到的《<a href="http://android.wooyd.org/JNIExample/files/JNIExample.pdf">JNI Examples for Android</a>》文件提供了說明;此外,也可以使用 Java JDK 的 javah 這支程式來產生。
</p><p>首先,我們來看一下 javah 的用途:
</p><p><pre class="prettyprint">Usage: javah [options] <classes>
where [options] include:
-help Print this help message and exit
-classpath <path> Path from which to load classes
-bootclasspath <path> Path from which to load bootstrap classes
-d <dir> Output directory
-o <file> Output file (only one of -d or -o may be used)
-jni Generate JNI-style header file (default)
-version Print version information
-verbose Enable verbose output
-force Always write output files
<classes> are specified with their fully qualified names (for
instance, java.lang.Object). </pre>
</p><p>javah 預設的用途,就是用來生成 JNI-style 的標頭檔。
</p><p>那麼,我們來看一下怎麼使用它吧!最簡單的方法,開啟一個終端程式,然後到 Android 應用程式的專案路徑執行 javah 就可以了,例如以 HelloJNI++ 這個專案來示範。
</p><p><div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/-ZOFathwWRcc/UqvPgsjow0I/AAAAAAAAKAE/vlVTRF2X3sc/s1600/%E6%9C%AA%E5%91%BD%E5%90%8D.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-ZOFathwWRcc/UqvPgsjow0I/AAAAAAAAKAE/vlVTRF2X3sc/s1600/%E6%9C%AA%E5%91%BD%E5%90%8D.png" style="width: 720px;" /></a></div>
</p><p>方法非常簡單,在 HelloJNI++ 專案的路徑執行這個指令:
</p><p><pre class="prettyprint">$ javah -classpath bin/classes -d jni/ demo.example.hellojni.HelloActivity </pre>
</p><p>其中,要注意的是 classpath 的路徑要指向 bin/classes,而不是 src/ 。執行完成後,就會在 jni/ 路徑下看到生成的標頭檔 demo_example_hellojni_HelloActivity.h 了。標頭檔 demo_example_hellojni_HelloActivity.h 的內容如下:
</p><p><pre class="prettyprint">/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class demo_example_hellojni_HelloActivity */
#ifndef _Included_demo_example_hellojni_HelloActivity
#define _Included_demo_example_hellojni_HelloActivity
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: demo_example_hellojni_HelloActivity
* Method: stringFromJNI
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_demo_example_hellojni_HelloActivity_stringFromJNI
(JNIEnv *, jobject);
/*
* Class: demo_example_hellojni_HelloActivity
* Method: unimplementedStringFromJNI
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_demo_example_hellojni_HelloActivity_unimplementedStringFromJNI
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif </pre>
</p><p>往後,只要在 Java 程式碼裡宣告了 native 的函式,那麼就需要使用 javah 來重新生成這個標題檔,很容易吧!
</p><p>接著再來看看,既然使用了 Eclipse 這個開發環境,那麼能不能直接將 javah 的動作整合到 Eclipse 裡呢?方法就是使用 Eclipse 的 External Tools。
</p><p>從 Eclipse 的 Run 下拉選單找到 External Tools,然後點擊 External Tools Configurations。
</p><p><div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/-PtxtNA6Najw/UqvcDV8Pp5I/AAAAAAAAKAU/Yet9pFzAk8k/s1600/externaltools-1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-PtxtNA6Najw/UqvcDV8Pp5I/AAAAAAAAKAU/Yet9pFzAk8k/s1600/externaltools-1.png" /></a></div>
</p><p>然後選擇 Program,並新建一個設定。
</p><p><div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/-YCCqFGxSunk/UqvcEBDiDbI/AAAAAAAAKAo/gKOxvTJh7_0/s1600/%E5%BD%B1%E5%83%8F1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-YCCqFGxSunk/UqvcEBDiDbI/AAAAAAAAKAo/gKOxvTJh7_0/s1600/%E5%BD%B1%E5%83%8F1.png" style="width: 720px;" /></a></div>
</p><p>接著,開始填入以下內容:
</p><p><ol><li>Name 的部份任意填入一個容易分辨的名稱。</li><li>Location 填入 javah 的路徑,由於我在 Linux 下操作,因此一般為 <code class="prettyprint">/usr/bin/javah </code>。</li><li>Working Directory 填入 <code class="prettyprint">${workspace_loc:/HelloJNI++/bin}</code>,其中 HelloJNI++ 對應到 Android 應用程式專案的名稱。也可以按下 Browse Worksapce 鈕來選擇。</li><li>Arguments 填入 <code class="prettyprint">-classpath ${workspace_loc:/HelloJNI++/bin/classes} -d ${workspace_loc:/HelloJNI++/jni} demo.example.hellojni.HelloActivity</code>,這個是提供給 javah 的參數,其中 HelloJNI++ 同樣對應到 Android 應用程式專案的名稱。</li></ol>
</p><p><div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/-H5jU-a8n0eI/UqvcDXNVBSI/AAAAAAAAKAY/-Wr3FsJmVXk/s1600/%E5%BD%B1%E5%83%8F2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-H5jU-a8n0eI/UqvcDXNVBSI/AAAAAAAAKAY/-Wr3FsJmVXk/s1600/%E5%BD%B1%E5%83%8F2.png" /></a></div>
</p><p>接著,到 Refresh 頁面,勾選 Specific resources,然後按下右側的 Specific Resources 鈕,並將 HelloJNI++ 專案裡的 jni 及 src 兩個目錄勾選起來。
</p><p><div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/-gVu22L4gW6s/UqvcDz52s8I/AAAAAAAAKAc/3jcnvYgDoHE/s1600/%E5%BD%B1%E5%83%8F3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-gVu22L4gW6s/UqvcDz52s8I/AAAAAAAAKAc/3jcnvYgDoHE/s1600/%E5%BD%B1%E5%83%8F3.png" /></a></div>
</p><p><div class="separator" style="clear: both; text-align: center;"><a href="http://1.bp.blogspot.com/-m8gdqtHtgQk/UqvcEbkXdII/AAAAAAAAKAs/2Vn8HvHKelE/s1600/%E5%BD%B1%E5%83%8F4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-m8gdqtHtgQk/UqvcEbkXdII/AAAAAAAAKAs/2Vn8HvHKelE/s1600/%E5%BD%B1%E5%83%8F4.png" /></a></div>
</p><p>設定完成後,只要從 External Tools 執行這個項目,就會生成 HelloJNI++ 專案的 JNI 標頭檔了。
</p>
闇月千瞳的部落格http://www.blogger.com/profile/16152087862701279897noreply@blogger.com0tag:blogger.com,1999:blog-10519809.post-25416823742646406492013-12-14T01:25:00.000+08:002013-12-14T01:25:17.989+08:00使用 C++ 改寫 HelloJNI++<p>在《<a href="http://yuanfarn.blogspot.tw/2013/12/hellojni-android-ndk.html">從 HelloJNI 開始 Android NDK 的使用</a>》這篇文章裡,JNI 裡的 Native Library 是以 C 完成的。接著,我們試著將它改成由 C++ 來完成。
</p><p>首先,將 jni/hellojni.c 改名稱為 jni/hellojni.cpp,然後同時修改 <b>jni/Android.mk</b> 的內容:
</p><p><pre class="prettyprint">LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := hellojni
LOCAL_SRC_FILES := hellojni.cpp
include $(BUILD_SHARED_LIBRARY) </pre>
</p><p>接著,修改 <b>jni/hellojni.cpp</b> 的內容:
</p><p><pre class="prettyprint">#include <jni.h>
#include <string.h>
#include <android/log.h>
jstring
Java_demo_example_hellojni_HelloActivity_stringFromJNI( JNIEnv* env,
jobject thiz )
{
return env->NewStringUTF("Hello from JNI !");
} </pre>
</p><p>簡單說,請是將原本的 <code class="prettyprint">return (*env)->NewStringUTF(env, "Hello from JNI !");</code> 改成 <code class="prettyprint">return env->NewStringUTF("Hello from JNI !");</code>。
</p><p>接著,執行 Build Project。但,此時可能會出現這樣的錯誤:
</p><p><div class="separator" style="clear: both; text-align: center;"><a href="http://1.bp.blogspot.com/-7MW32Dog0LA/Uqr37U5WJ9I/AAAAAAAAJ_g/WCj4CuADKYY/s1600/%E6%9C%AA%E5%91%BD%E5%90%8D.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-7MW32Dog0LA/Uqr37U5WJ9I/AAAAAAAAJ_g/WCj4CuADKYY/s1600/%E6%9C%AA%E5%91%BD%E5%90%8D.png" style="width: 720px;" /></a></div>
</p><p>這是因為在 AndroidManifest.xml 指定的 minSdkVersion 和使用的 SDK 版本不一樣。
</p><p><pre class="prettyprint"> <uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="18" /> </pre>
</p><p>解決的方法很簡單,新建一個 jni/Application.mk,然後填入內容:
</p><p><pre class="prettyprint">APP_PLATFORM := android-8 </pre>
</p><p>這裡使用的版本必須和 minSdkVersion 相同。
</p><p>最後,將編譯出來的 HelloJNI++.apk 下載到模擬器執行,卻出現了錯誤的狀況。
</p><p><div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/-lO8UyiiPrNc/UqsCYZyAyEI/AAAAAAAAJ_w/JHwzkxwbWsE/s1600/%E5%BD%B1%E5%83%8F3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-lO8UyiiPrNc/UqsCYZyAyEI/AAAAAAAAJ_w/JHwzkxwbWsE/s1600/%E5%BD%B1%E5%83%8F3.png" style="width: 720px;" /></a></div>
</p><p>而,從 Logcat 也可以查看到以下的錯誤訊息:
</p><p><pre class="prettyprint">E/AndroidRuntime(1365): FATAL EXCEPTION: main
E/AndroidRuntime(1365): Process: demo.example.hellojni, PID: 1365
E/AndroidRuntime(1365): java.lang.UnsatisfiedLinkError: Native method not found: demo.example.hellojni.HelloActivity.stringFromJNI:()Ljava/lang/String;
E/AndroidRuntime(1365): at demo.example.hellojni.HelloActivity.stringFromJNI(Native Method)
E/AndroidRuntime(1365): at demo.example.hellojni.HelloActivity.onCreate(HelloActivity.java:20)
E/AndroidRuntime(1365): at android.app.Activity.performCreate(Activity.java:5243)
E/AndroidRuntime(1365): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
E/AndroidRuntime(1365): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2140)
E/AndroidRuntime(1365): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2226)
E/AndroidRuntime(1365): at android.app.ActivityThread.access$700(ActivityThread.java:135)
E/AndroidRuntime(1365): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1397)
E/AndroidRuntime(1365): at android.os.Handler.dispatchMessage(Handler.java:102)
E/AndroidRuntime(1365): at android.os.Looper.loop(Looper.java:137)
E/AndroidRuntime(1365): at android.app.ActivityThread.main(ActivityThread.java:4998)
E/AndroidRuntime(1365): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(1365): at java.lang.reflect.Method.invoke(Method.java:515)
E/AndroidRuntime(1365): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:777)
E/AndroidRuntime(1365): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:593)
E/AndroidRuntime(1365): at dalvik.system.NativeStart.main(Native Method) </pre>
</p><p>在網路上可以找到一份《<a href="http://android.wooyd.org/JNIExample/files/JNIExample.pdf">JNI Examples for Android</a>》的文件,參考它的內容實作 JNI OnLoad() 的部份能處理這個問題。至於實作的內容,在 Android 的原始碼裡可以找到一份 SimpleJNI 的範例,在 <a href="https://github.com/android/platform_development/tree/master/samples/SimpleJNI">https://github.com/android/platform_development/tree/master/samples/SimpleJNI</a> 這裡可以查看程式碼。根據範例裡的 jni/native.cpp,我們可以修改 HelloJNI++ 的 <b>jni/hellojni.cpp</b> 的內容:
</p><p><pre class="prettyprint">#include <jni.h>
#include <string.h>
#include <android/log.h>
#include <stdio.h>
#define LOG_TAG "HelloJNI++: hellojni.cpp"
jstring
Java_demo_example_hellojni_HelloActivity_stringFromJNI( JNIEnv* env,
jobject thiz )
{
return env->NewStringUTF("Hello from JNI !");
}
static const char *classPathName = "demo/example/hellojni/HelloActivity";
static JNINativeMethod methods[] = {
{"stringFromJNI", "()Ljava/lang/String;", (void*)Java_demo_example_hellojni_HelloActivity_stringFromJNI },
};
/*
* Register several native methods for one class.
*/
static int registerNativeMethods(JNIEnv* env, const char* className,
JNINativeMethod* gMethods, int numMethods)
{
jclass clazz;
clazz = env->FindClass(className);
if (clazz == NULL) {
__android_log_print(ANDROID_LOG_ERROR, LOG_TAG, "Native registration unable to find class '%s'", className);
return JNI_FALSE;
}
if (env->RegisterNatives(clazz, gMethods, numMethods) < 0) {
__android_log_print(ANDROID_LOG_ERROR, LOG_TAG, "RegisterNatives failed for '%s'", className);
return JNI_FALSE;
}
return JNI_TRUE;
}
/*
* Register native methods for all classes we know about.
*
* returns JNI_TRUE on success.
*/
static int registerNatives(JNIEnv* env)
{
if (!registerNativeMethods(env, classPathName,
methods, sizeof(methods) / sizeof(methods[0]))) {
return JNI_FALSE;
}
return JNI_TRUE;
}
// ----------------------------------------------------------------------------
/*
* This is called by the VM when the shared library is first loaded.
*/
typedef union {
JNIEnv* env;
void* venv;
} UnionJNIEnvToVoid;
jint JNI_OnLoad(JavaVM* vm, void* reserved)
{
UnionJNIEnvToVoid uenv;
uenv.venv = NULL;
jint result = -1;
JNIEnv* env = NULL;
__android_log_print(ANDROID_LOG_INFO, LOG_TAG, "JNI_OnLoad");
if (vm->GetEnv(&uenv.venv, JNI_VERSION_1_4) != JNI_OK) {
__android_log_print(ANDROID_LOG_ERROR, LOG_TAG, "ERROR: GetEnv failed");
goto bail;
}
env = uenv.env;
if (registerNatives(env) != JNI_TRUE) {
__android_log_print(ANDROID_LOG_ERROR, LOG_TAG, "ERROR: registerNatives failed");
goto bail;
}
result = JNI_VERSION_1_4;
bail:
return result;
} </pre>
</p><p>此外,這裡用了 <code class="prettyprint">__android_log_print </code>,請再參考《<a href="http://yuanfarn.blogspot.tw/2013/12/jni-logcat.html">在 JNI 程式碼使用 Logcat</a>》修改 Android.mk,如此就完成了。
</p>
闇月千瞳的部落格http://www.blogger.com/profile/16152087862701279897noreply@blogger.com0tag:blogger.com,1999:blog-10519809.post-14274839532776002052013-12-13T19:29:00.000+08:002013-12-13T19:29:08.536+08:00從 HelloJNI 開始 Android NDK 的使用<p><b>安裝及設定工具</b>
</p><p>從某個版本開始,在 Eclipse 的 Android Development Tools (ADT) 已經包含了對 NDK 的支援。因此在安裝 Android Development Tools (ADT) 時可以一併將 NDK plugins 安裝起來。
</p><p><div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/-hEbzeTSqJq8/Uqriy4yOPiI/AAAAAAAAJ-s/Z2FAQnYMFtA/s1600/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-hEbzeTSqJq8/Uqriy4yOPiI/AAAAAAAAJ-s/Z2FAQnYMFtA/s1600/1.png" style="width: 720px;" /></a></div>
</p><p>接著,在 Eclipse 的 Preferences 裡指定 Android SDK 的路徑,並指定 Android NDK 的路徑。在這裡,我分別將 Android SDK 及 Android NDK 放置在 <code class="prettyprint">/opt/android/android-sdk-linux</code> 及 <code class="prettyprint">/opt/android/android-ndk-r9b</code> 這兩個路徑。
</p><p><div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/-TDzbwXTnYs8/UqrizK21_gI/AAAAAAAAJ-w/0tOQxmP_An8/s1600/2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-TDzbwXTnYs8/UqrizK21_gI/AAAAAAAAJ-w/0tOQxmP_An8/s1600/2.png" style="width: 720px;" /></a></div>
</p><p><div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/-hSJN1nH7U-c/Uqriy0TUTqI/AAAAAAAAJ-o/AFfYIPE_oPk/s1600/3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-hSJN1nH7U-c/Uqriy0TUTqI/AAAAAAAAJ-o/AFfYIPE_oPk/s1600/3.png" style="width: 720px;" /></a></div>
</p><p><b>Android 應用程式專案設定</b>
</p><p>接著,就可以開始在 Android 應用程式專案裡使用了 Android NDK 了。
</p><p>舉例來說,我建立了一個名字叫「HelloJNI++」的專案,在專案上點滑鼠右鍵,選擇 <b>Android Tools</b> 底下的 <b>Add Native Support</b> 來加入 JNI 的程式碼。
</p><p><div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/-4aGR5PnpqfU/UqrizTZDnrI/AAAAAAAAJ-8/Wt0Au7LfSNA/s1600/4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-4aGR5PnpqfU/UqrizTZDnrI/AAAAAAAAJ-8/Wt0Au7LfSNA/s1600/4.png" style="width: 720px;" /></a></div>
</p><p>加入 Native Support 時,首先要先輸入 Native Library 的名字。這裡,我使用 hellojni 作為 Native Library 的名字,於是它將會產生一個名為 libhellojni.so 的檔案。
</p><p><div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/--m1hN04DCnE/UqrizrsIGQI/AAAAAAAAJ-0/Dtfz_0k8CnQ/s1600/5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/--m1hN04DCnE/UqrizrsIGQI/AAAAAAAAJ-0/Dtfz_0k8CnQ/s1600/5.png" /></a></div>
</p><p>接著,這個步驟非常重要。在專案的 Properties 裡,找到 <b>C/C++ General</b> 裡的 <b>Paths and Symbols</b>,並在 <b>Includes</b> 裡加入 Android NDK 的標頭檔路徑。例如,這個專案指定的 Android API 為 19 (Android 4.4),因此我加入了 <code class="prettyprint">/opt/android/android-ndk-r9b/platforms/android-19/arch-arm/usr/include</code> 這個路徑。
</p><p style="color: red;"><b>這個步驟非常重要,不可以省略!</b>
</p><p><div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/-qbsq182W1pE/Uqriz-gKeRI/AAAAAAAAJ_E/fhbggOOa_6k/s1600/6.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-qbsq182W1pE/Uqriz-gKeRI/AAAAAAAAJ_E/fhbggOOa_6k/s1600/6.png" style="width: 720px;" /></a></div>
</p><p><b>範例程式碼</b>
</p><p>以下就可以開始在這個專案填入程式碼了。
</p><p>Android Development Tools (ADT) 的 NDK plugins 預設會依 Native Library 的名字先建立一個 .cpp 的檔案。在這篇文章裡,由於我將 Native Library 的名字取作 hellojni,因此它會建立 jni/hellojni.cpp 這個檔案。這裡我將它更名為 jni/hellojni.c,並對應修改 jni/Android.mk 的內容:
</p><p><pre class="prettyprint">LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := hellojni
LOCAL_SRC_FILES := hellojni.c
include $(BUILD_SHARED_LIBRARY) </pre>
</p><p>接著,修改專案的 Java 程式碼,內容如下:
</p><p><pre class="prettyprint">package demo.example.hellojni;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.TextView;
public class HelloActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TextView tv = new TextView(this);
tv.setText( stringFromJNI() );
setContentView(tv);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.hello, menu);
return true;
}
public native String stringFromJNI();
static {
System.loadLibrary("hellojni");
}
} </pre>
</p><p>然後,修改 jni/hello.c,將 stringFromJNI() 實作出來。
</p><p><pre class="prettyprint">#include <jni.h>
#include <string.h>
#include <android/log.h>
jstring
Java_demo_example_hellojni_HelloActivity_stringFromJNI( JNIEnv* env,
jobject thiz )
{
return (*env)->NewStringUTF(env, "Hello from JNI !");
} </pre>
</p><p>最後,從 Eclipse 的 Project 下拉選單裡執行 Build Project,就完成編譯了。然後,可以將編出來的 HelloJNI++.apk 下載到模擬器或 Android 手機上執行驗證。
</p>闇月千瞳的部落格http://www.blogger.com/profile/16152087862701279897noreply@blogger.com0tag:blogger.com,1999:blog-10519809.post-35660817660853917722013-12-12T09:25:00.000+08:002013-12-12T09:25:11.737+08:00[彰化] 旅。咖啡<p>知道彰市化開了家「旅。咖啡」已經一陣子了,只是一直沒空來坐坐。前些日子,因為一個活動試喝了「旅。咖啡」的花生拿鐵,及聽了店老闆小王子分享<a href="http://seo-worker.blogspot.tw/2012/10/blog-post.html">搶救「台銀日式舊宿舍群」</a>的故事,於是日前趁著傍晚回家前的空檔繞過來坐坐。
</p><p>店裡的裝璜用了許多頗具歷史故事的物件,給人一種很舒服、溫暖的感覺。也許因為我也極為喜好這類東西吧!簡直是第一眼就愛上了這裡的裝璜了。
</p><p><div class="separator" style="clear: both; text-align: center;"><a href="http://1.bp.blogspot.com/-ASPV6XKC1V0/Uqf_eQ2Fx3I/AAAAAAAAJ7I/V-a3at2UqiU/s1600/DSC_0301.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-ASPV6XKC1V0/Uqf_eQ2Fx3I/AAAAAAAAJ7I/V-a3at2UqiU/s1600/DSC_0301.JPG" style="width: 720px;" /></a></div>
</p><p>由於日前試喝過「花生拿鐵」,於是第一次來訪我決定試試另一個特別的產品「麵茶咖啡」。但,其實在隔天傍晚,我又跑來完整品嘗了一杯「花生拿鐵」。這兩個特色產品的口感都很棒,我非常推薦第一次來訪的朋友可以先從這兩個特色產品開始品嘗。
</p><p><div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/-FpTpsQZxQRo/Uqf_ecPulkI/AAAAAAAAJ7E/qBfsoELWZB0/s1600/DSC_0302.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-FpTpsQZxQRo/Uqf_ecPulkI/AAAAAAAAJ7E/qBfsoELWZB0/s1600/DSC_0302.JPG" style="width: 720px;" /></a></div>
</p><p><div class="separator" style="clear: both; text-align: center;"><a href="http://1.bp.blogspot.com/-QiOMcYXqmcQ/UqhGs4lTavI/AAAAAAAAJ8U/qctOEZ7VwxY/s1600/DSC_0340.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-QiOMcYXqmcQ/UqhGs4lTavI/AAAAAAAAJ8U/qctOEZ7VwxY/s1600/DSC_0340.JPG" style="width: 720px;" /></a></div>
</p><p>店裡的裝璜很有歷史的味道,牆上還有之前搶救「台銀日式舊宿舍群」時的相片。
</p><p><div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/-K1wh9Dlb_f4/Uqf_eboUGFI/AAAAAAAAJ7M/CdejjkWoHEE/s1600/DSC_0305.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-K1wh9Dlb_f4/Uqf_eboUGFI/AAAAAAAAJ7M/CdejjkWoHEE/s1600/DSC_0305.JPG" style="width: 720px;" /></a></div>
</p><p>啊!我超愛這樣的燈耶!
</p><p><div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/-blXLRjytnBE/Uqf_hLJlWII/AAAAAAAAJ7c/MWXsEaddIQk/s1600/DSC_0307.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-blXLRjytnBE/Uqf_hLJlWII/AAAAAAAAJ7c/MWXsEaddIQk/s1600/DSC_0307.JPG" style="width: 720px;" /></a></div>
</p><p><div class="separator" style="clear: both; text-align: center;"><a href="http://1.bp.blogspot.com/-R5ntendf0kY/UqhG-ZSHrLI/AAAAAAAAJ84/lyiFB8Qen7o/s1600/DSC_0379.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-R5ntendf0kY/UqhG-ZSHrLI/AAAAAAAAJ84/lyiFB8Qen7o/s1600/DSC_0379.JPG" style="height: 720px;" /></a></div>
</p><p>牆上這個也是在台銀日式舊宿舍群拆除時,從怪手中搶救回來的,若你有機會遇到小王子,可以請他好好跟你介紹這東西的來歷唷!
</p><p><div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/-WsAmxM3ak_U/Uqf_ht1zEqI/AAAAAAAAJ7g/HYIvhH6eLHs/s1600/DSC_0312.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-WsAmxM3ak_U/Uqf_ht1zEqI/AAAAAAAAJ7g/HYIvhH6eLHs/s1600/DSC_0312.JPG" style="height: 720px;" /></a></div>
</p><p>有時我會懷疑,在遠古的時代,我是不是和蠹魚妖有什麼關係呢?因為,我也超愛這樣有歷史味道的書本。這幾本書基本上已經快散了,要小心愛護唷!
</p><p><div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/-rjkCeoBD62U/Uqf_hxeiEjI/AAAAAAAAJ7k/O5wj1lofWvM/s1600/DSC_0316.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-rjkCeoBD62U/Uqf_hxeiEjI/AAAAAAAAJ7k/O5wj1lofWvM/s1600/DSC_0316.JPG" style="width: 720px;" /></a></div>
</p><p><div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/-PnU9y6gRGdE/Uqf_i1YbirI/AAAAAAAAJ7w/lG0i5kV8Go4/s1600/DSC_0317.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-PnU9y6gRGdE/Uqf_i1YbirI/AAAAAAAAJ7w/lG0i5kV8Go4/s1600/DSC_0317.JPG" style="width: 720px;" /></a></div>
</p><p><div class="separator" style="clear: both; text-align: center;"><a href="http://1.bp.blogspot.com/-OTUGhLPvxPo/UqhG9VD2RJI/AAAAAAAAJ8w/x52vfcSo1PU/s1600/DSC_0370.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-OTUGhLPvxPo/UqhG9VD2RJI/AAAAAAAAJ8w/x52vfcSo1PU/s1600/DSC_0370.JPG" style="width: 720px;" /></a></div>
</p><p>靜下心看看這面牆,是不是感覺很棒呢?對了,牆上那個鐘是要上發條的,整點時還會響呢!那個聲音一整個很好聽。說實話,這個鐘讓我回想起以前家裡那個老舊、有單擺的掛鐘了。
</p><p><div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/-UZfJE5kPikI/Uqf_kMU1rGI/AAAAAAAAJ78/ma6kkdDpGHg/s1600/DSC_0330.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-UZfJE5kPikI/Uqf_kMU1rGI/AAAAAAAAJ78/ma6kkdDpGHg/s1600/DSC_0330.JPG" style="width: 720px;" /></a></div>
</p><p><div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/-8CiK2Hi3Gg8/Uqf_kfcMyHI/AAAAAAAAJ8A/p1swx80OfOk/s1600/DSC_0332.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-8CiK2Hi3Gg8/Uqf_kfcMyHI/AAAAAAAAJ8A/p1swx80OfOk/s1600/DSC_0332.JPG" style="width: 720px;" /></a></div>
</p><p><div class="separator" style="clear: both; text-align: center;"><a href="http://1.bp.blogspot.com/-7JlfPqXDXUs/UqhGuPfpDAI/AAAAAAAAJ8Y/8zLSu0Z08oI/s1600/DSC_0348.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-7JlfPqXDXUs/UqhGuPfpDAI/AAAAAAAAJ8Y/8zLSu0Z08oI/s1600/DSC_0348.JPG" style="width: 720px;" /></a></div>
</p><p><div class="separator" style="clear: both; text-align: center;"><a href="http://1.bp.blogspot.com/-7uLICGEQSSo/UqhG8J1QLDI/AAAAAAAAJ8s/AsAGUyNUbk0/s1600/DSC_0350.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-7uLICGEQSSo/UqhG8J1QLDI/AAAAAAAAJ8s/AsAGUyNUbk0/s1600/DSC_0350.JPG" style="width: 720px;" /></a></div>
</p><p>晚上時,從外面看起來也很漂亮!對了,店裡面向窗外的那張長桌,桌面可是直接用一塊門板製作的,所以在桌面上還有一個鐵環呢!其實,店裡另外有三張方形桌子也是將門板鋸開製作成的。其中有一桌的桌面上,還有以前貼門神的痕跡唷!
</p><p><div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/-rEbQ4ctHI2Y/UqhGvH0UfUI/AAAAAAAAJ8g/LEClGRevTcA/s1600/DSC_0347.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-rEbQ4ctHI2Y/UqhGvH0UfUI/AAAAAAAAJ8g/LEClGRevTcA/s1600/DSC_0347.JPG" style="width: 720px;" /></a></div>
</p><p><b>旅。咖啡</b>
</p><p>地址:彰化市民權路241號
</p><p>電話:04-7282972
</p><p>email: tripcafetw@gmail.com
</p><p>營業時間:週二~週日 10:00-22:00
</p><p>部落格:<a href="http://trip-cafe-tw.blogspot.tw/">http://trip-cafe-tw.blogspot.tw/</a>
</p><p>小王子的浮世隨筆Ⅱ.0 <a href="http://seo-worker.blogspot.tw/">http://seo-worker.blogspot.tw/</a>
</p>
闇月千瞳的部落格http://www.blogger.com/profile/16152087862701279897noreply@blogger.com0tag:blogger.com,1999:blog-10519809.post-56471606608446306902013-12-10T01:26:00.001+08:002013-12-10T01:26:40.168+08:00在 JNI 程式碼使用 Logcat<p>在 Android 應用的程式碼裡,可以使用 Log.v()、Log.d()、Log.i() 等函式將訊息送到 log output,然後開發者可以透過 Logcat 查看。
</p><p>但,如果在 Android 應用裡使用了 JNI 及 NDK,又該如何將訊息送到 log output,才能在 Logcat 裡查看呢?
</p><p>首先,查看了 NDK 的 <code class="prettyprint">docs/STABLE-APIS.html</code>,找到這段說明:
</p><p><pre class="prettyprint">Android-specific Log Support:
<android/log.h> contains various definitions that can be used to send log messages to the kernel from your native code. Please have a look at its content in (platforms/android-3/arch-arm/usr/include/android/log.h), which contain many informative comments on how to use it.
You should be able to write helpful wrapper macros for your own usage to access this facility.
If you use it, your native module should link to /system/lib/liblog.so with:
LOCAL_LDLIBS := -llog </pre>
</p><p>然後在 <code class="prettyprint">android/log.h</code> 裡找到:
</p><p><pre class="prettyprint">/*
* Android log priority values, in ascending priority order.
*/
typedef enum android_LogPriority {
ANDROID_LOG_UNKNOWN = 0,
ANDROID_LOG_DEFAULT, /* only for SetMinPriority() */
ANDROID_LOG_VERBOSE,
ANDROID_LOG_DEBUG,
ANDROID_LOG_INFO,
ANDROID_LOG_WARN,
ANDROID_LOG_ERROR,
ANDROID_LOG_FATAL,
ANDROID_LOG_SILENT, /* only for SetMinPriority(); must be last */
} android_LogPriority;
/*
* Send a formatted string to the log, used like printf(fmt,...)
*/
int __android_log_print(int prio, const char *tag, const char *fmt, ...)
#if defined(__GNUC__)
__attribute__ ((format(printf, 3, 4)))
#endif
; </pre>
</p><p>接著,拿 NDK samples 裡的 hello-jni 來試試。首先,修改 <code class="prettyprint">jni/Android.mk</code>,加入這行:
</p><p><pre class="prettyprint">LOCAL_LDLIBS += -llog </pre>
</p><p>再修改 <code class="prettyprint">jni/hello-jni.c</code>,除了引入 <code class="prettyprint">android/log.h</code> 這個標頭檔,並使用 <code class="prettyprint">__android_log_print</code> 將訊息送到 log output。
</p><p><pre class="prettyprint">#include <android/log.h>
jstring
Java_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv* env,
jobject thiz )
{
__android_log_print(ANDROID_LOG_INFO, "HelloJNI", "Show: Hello from JNI !");
return (*env)->NewStringUTF(env, "Hello from JNI !");
} </pre>
</p><p>如此,當這隻程式執行時,就可以在 Logcat 裡查看由 <code class="prettyprint">__android_log_print</code> 送出的訊息了。
</p><p><div class="separator" style="clear: both; text-align: center;"><a href="http://1.bp.blogspot.com/-UUKtdYOcyeI/UqWIWXuo-yI/AAAAAAAAJ6o/GV2gxuiIBb8/s1600/%E6%9C%AA%E5%91%BD%E5%90%8D.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-UUKtdYOcyeI/UqWIWXuo-yI/AAAAAAAAJ6o/GV2gxuiIBb8/s1600/%E6%9C%AA%E5%91%BD%E5%90%8D.png" style="width: 720px;" /></a></div>
</p>
闇月千瞳的部落格http://www.blogger.com/profile/16152087862701279897noreply@blogger.com0tag:blogger.com,1999:blog-10519809.post-37483014512040253882013-12-04T23:23:00.000+08:002013-12-04T23:23:59.782+08:00使用 PhotoShop 製作暗角效果<p>使用 PhotoShop 在相片上製作暗角並不是很麻煩的事,利用「光源效果」這個濾鏡就可以達成了。
</p><p><div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/-UTZh9ZZa5Qs/UpW-6iTGZ5I/AAAAAAAAJy0/bJUu8Iekb2Y/s1600/%E5%BD%B1%E5%83%8F2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-UTZh9ZZa5Qs/UpW-6iTGZ5I/AAAAAAAAJy0/bJUu8Iekb2Y/s1600/%E5%BD%B1%E5%83%8F2.jpg" style="width: 720px;" /></a></div>
</p><p>首先在 PhotoShop 上開啟一張相片,然後從下拉選單的「濾鏡」,找到「演算上色」裡的「光源效果」:
</p><p><div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/-Z-DnMdODKY8/UpW-6Zuj2QI/AAAAAAAAJyw/wAoOM9yADKM/s1600/%E5%BD%B1%E5%83%8F3.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-Z-DnMdODKY8/UpW-6Zuj2QI/AAAAAAAAJyw/wAoOM9yADKM/s1600/%E5%BD%B1%E5%83%8F3.jpg" style="width: 720px;" /></a></div>
</p><p>點擊光源效果這個濾鏡後,在 PhotoShop 的左上方會出現幾個預設集,這裡直接選擇「手電筒」這個預設集。
</p><p><div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/-cRLUGi7vGbs/UpW-6f0eBSI/AAAAAAAAJys/SwBVhyfQoB8/s1600/%E5%BD%B1%E5%83%8F4-1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-cRLUGi7vGbs/UpW-6f0eBSI/AAAAAAAAJys/SwBVhyfQoB8/s1600/%E5%BD%B1%E5%83%8F4-1.jpg" /></a></div>
</p><p>當選擇不同的預設集時,在 PhotoShop 右側的這個欄位也會隨著改變,使用者也可以直接從這裡修改想要的光源效果。
</p><p><div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/-4t1y7T9Hn8c/UpW-7IMHCrI/AAAAAAAAJzI/APV_mz4cXPw/s1600/%E5%BD%B1%E5%83%8F4-2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-4t1y7T9Hn8c/UpW-7IMHCrI/AAAAAAAAJzI/APV_mz4cXPw/s1600/%E5%BD%B1%E5%83%8F4-2.jpg" /></a></div>
</p><p>而在圖上會出現像這樣的圈,它可以用來調整光源的大小(縮放)、明暗度和位置。
</p><p><div class="separator" style="clear: both; text-align: center;"><a href="http://1.bp.blogspot.com/-W73Q2pKjw4A/UpW-7fqcOnI/AAAAAAAAJzA/qR-iaPVWVek/s1600/%E5%BD%B1%E5%83%8F5.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-W73Q2pKjw4A/UpW-7fqcOnI/AAAAAAAAJzA/qR-iaPVWVek/s1600/%E5%BD%B1%E5%83%8F5.jpg" style="width: 720px;" /></a></div>
</p><p><div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/-YngZuEt795M/UpW-7lhEkPI/AAAAAAAAJzE/4qPswgyC32w/s1600/%E5%BD%B1%E5%83%8F6.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-YngZuEt795M/UpW-7lhEkPI/AAAAAAAAJzE/4qPswgyC32w/s1600/%E5%BD%B1%E5%83%8F6.jpg" style="width: 720px;" /></a></div>
</p><p>通常我喜歡將暗角效果弄明顯一點。簡單講,就是讓它暗一點。
</p><p><div class="separator" style="clear: both; text-align: center;"><a href="http://1.bp.blogspot.com/-9eXCeZARRKg/UpW-8PPiqxI/AAAAAAAAJzQ/n9EeIovAETI/s1600/%E5%BD%B1%E5%83%8F7.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-9eXCeZARRKg/UpW-8PPiqxI/AAAAAAAAJzQ/n9EeIovAETI/s1600/%E5%BD%B1%E5%83%8F7.jpg" style="width: 720px;" /></a></div>
</p><p>最後,再用筆刷將圖片中央範圍的效果刷淡一些,完成的效果就像這樣囉!
</p><p><div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/-grlBme1Ypao/UpW-8ue0onI/AAAAAAAAJzg/lt53fqmjkqc/s1600/%E5%BD%B1%E5%83%8F8.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-grlBme1Ypao/UpW-8ue0onI/AAAAAAAAJzg/lt53fqmjkqc/s1600/%E5%BD%B1%E5%83%8F8.jpg" style="width: 720px;" /></a></div>
</p>
闇月千瞳的部落格http://www.blogger.com/profile/16152087862701279897noreply@blogger.com0tag:blogger.com,1999:blog-10519809.post-30409700126508635182013-12-03T00:06:00.000+08:002013-12-03T01:02:56.391+08:00自製 PhotoScape 的版型<p>PhotoScape 提供了「版型」這個選項,讓使用者可以將多張相片排列成一張圖片。這陣子以來,這個功能也是我時常使用的一個,讀者可以參閱《<a href="http://yuanfarn.blogspot.tw/2013/09/photoscape.html">使用 PhotoScape 製作活動記錄或花絮合輯</a>》這篇文章。
</p><p><div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/-7atmN7CAxgQ/UpynU-bUOxI/AAAAAAAAJ2o/dsNkdsWi3Tg/s1600/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-7atmN7CAxgQ/UpynU-bUOxI/AAAAAAAAJ2o/dsNkdsWi3Tg/s1600/1.png" /></a></div>
</p><p>然而,使用一段時間之後,總覺得 PhotoScape 預設提供的版型選項有點不足。於是,我便開始在 Google 上尋找如何製作版型的相關文章或討論。終於讓我找到了《<a href="http://joy0626.pixnet.net/blog/post/25764937-%5B%E5%AF%A6%E7%94%A8%5D-photoscpae%E8%87%AA%E8%A3%BD%E7%89%88%E5%9E%8B">[實用] PhotoScpae自製版型</a>》這篇文章。在該篇文章裡以一個較簡單的例子說明了如何製作版型;而這裡我則乾脆找一個複雜點的版型,再說明一下吧!
</p><p><div class="separator" style="clear: both; text-align: center;"><a href="http://1.bp.blogspot.com/-oXPPLc8CiYY/UpynU53i9VI/AAAAAAAAJ2g/N-ogccaKaWI/s1600/2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-oXPPLc8CiYY/UpynU53i9VI/AAAAAAAAJ2g/N-ogccaKaWI/s1600/2.png" style="width: 720px;" /></a></div>
</p><p>首先,所有的版型都會被放置在 PhotoScape 安裝目錄內的 page 目錄下。由於我的 Windows 是 64 位元的,所以可以在 C:\Program Files (x86)\PhotoScape\page 找到所有的版型檔案。這時可以看到版型的副檔名為 .pgt,這其實只是一個<b>純文字檔案</b>而已。所以,使用者可以很輕易地用「記事本 (Notepad.exe)」這個軟體,或使用 VIM 打開。
</p><p><div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/-TGW8SB1y35c/UpynU4Y3n5I/AAAAAAAAJ2k/VTIBl-OPLE4/s1600/3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-TGW8SB1y35c/UpynU4Y3n5I/AAAAAAAAJ2k/VTIBl-OPLE4/s1600/3.png" style="width: 720px;" /></a></div>
</p><p><div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/-w3fNXR3Le3Y/UpynVnXb7tI/AAAAAAAAJ2w/RsXKuXV7-UE/s1600/4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-w3fNXR3Le3Y/UpynVnXb7tI/AAAAAAAAJ2w/RsXKuXV7-UE/s1600/4.png" /></a></div>
</p><p>接著,來看一個我比較常用的版型。
</p><p><ol><li>這個版型可放置 16 張相片。</li><li>版型檔案的主檔名 (main_e_02) 和檔案裡描述的 title 相符。</li><li>版型預設大小為 400X400,所以在版型的檔案裡描述了 <code class="prettyprint">page_size=400 400</code>。</li></ol>
</p><p><div class="separator" style="clear: both; text-align: center;"><a href="http://1.bp.blogspot.com/-PavJwiZaKR4/UpynWKTB-aI/AAAAAAAAJ3E/ynClv-omR8Q/s1600/5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-PavJwiZaKR4/UpynWKTB-aI/AAAAAAAAJ3E/ynClv-omR8Q/s1600/5.png" style="width: 720px;" /></a></div>
</p><p><div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/-H0FG1j3HdZI/UpynWNRIDlI/AAAAAAAAJ28/6KfWv6biKpA/s1600/6.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-H0FG1j3HdZI/UpynWNRIDlI/AAAAAAAAJ28/6KfWv6biKpA/s1600/6.png" style="width: 720px;" /></a></div>
</p><p>基本上,搞懂這些後,就可以製作一個版型囉!
</p><p>最後,來看一個自製的版型效果,同時我也將這個版型的內容附上來供大家參考。
</p><p><div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/-a1wTL1PvClE/Upyva1nz2sI/AAAAAAAAJ3Y/3kgmLUMr1FU/s1600/page1.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-a1wTL1PvClE/Upyva1nz2sI/AAAAAAAAJ3Y/3kgmLUMr1FU/s1600/page1.JPG" style="width: 720px;" /></a></div>
</p><p><pre class="prettyprint">version=1.0
title=7X8_32_1
page_type=blank
page_size=700 800
page_entity=photo rect 0 0 200 200
page_entity=photo rect 200 0 100 100
page_entity=photo rect 300 0 100 100
page_entity=photo rect 400 0 100 100
page_entity=photo rect 500 0 200 200
page_entity=photo rect 200 100 100 100
page_entity=photo rect 300 100 200 200
page_entity=photo rect 0 200 100 100
page_entity=photo rect 100 200 200 200
page_entity=photo rect 500 200 100 100
page_entity=photo rect 600 200 100 100
page_entity=photo rect 0 300 100 100
page_entity=photo rect 300 300 100 100
page_entity=photo rect 400 300 200 200
page_entity=photo rect 600 300 100 100
page_entity=photo rect 0 400 100 100
page_entity=photo rect 100 400 100 100
page_entity=photo rect 200 400 100 100
page_entity=photo rect 300 400 100 100
page_entity=photo rect 600 400 100 100
page_entity=photo rect 0 500 100 100
page_entity=photo rect 100 500 200 200
page_entity=photo rect 300 500 100 100
page_entity=photo rect 400 500 100 100
page_entity=photo rect 500 500 200 200
page_entity=photo rect 0 600 100 100
page_entity=photo rect 300 600 200 200
page_entity=photo rect 0 700 100 100
page_entity=photo rect 100 700 100 100
page_entity=photo rect 200 700 100 100
page_entity=photo rect 500 700 100 100
page_entity=photo rect 600 700 100 100 </pre></p>闇月千瞳的部落格http://www.blogger.com/profile/16152087862701279897noreply@blogger.com0tag:blogger.com,1999:blog-10519809.post-30818436890743605392013-12-02T10:10:00.001+08:002013-12-02T10:10:53.263+08:00如何從 Linux Mint 15 升級至 Linux Mint 16?<p>我猜想,最近 Linux 玩家關注的消息或許是 Linux Mint 16 終於正式發佈了:
</p><p><ul><li><a href="http://blog.linuxmint.com/?p=2489">Linux Mint 16 “Petra” Cinnamon released!</a></li><li>
<a href="http://blog.linuxmint.com/?p=2493">Linux Mint 16 “Petra” MATE released!</a></li></ul></p><p>這幾天大概 Linux Mint 的伺服器會很忙,因為有不少玩家想下載試試或升級的。好吧!我就是其中一個想從 Linux Mint 15 升級到 Linux Mint 16 的人。在 Linux Mint 網站的文章裡提到,想升級的使用者可以參閱這篇文章的內容:
</p><p><ul><li><a href="http://community.linuxmint.com/tutorial/view/2">How to upgrade to a newer release</a></li></ul>
</p><p>基本上,該篇文章介紹了 "Fresh" 升級的方式。這個方式簡單說就是下載 Linux Mint 的 LiveCD,然後重新安裝並覆蓋原來的系統。但,其實我比較喜歡採用 "Package" 升級的方式,也就是直接使用 APT 指令來做。之前在 Debian GNU/Linux 已經嘗試過幾個版本的跨版本升級了,並沒有遇到什麼問題;在 Linux Mint 目前則是頭一遭,希望也是能順利完成呀!
</p><p>首先,我們必須修改 sources.list 的內容,找到 <b>/etc/apt/sources.list.d/official-package-repositories.list</b>,然後將 <b>olivia </b>修改成 <b>petra</b>;並將 <b>raring </b>修改成 <b>saucy</b>。其中,Petra 是 Linux Mint 16 的代碼;而 Saucy 是 Ubuntu 13.10 的代碼。
</p><p><pre class="prettyprint">$ sudo sed -i 's/raring/saucy/' /etc/apt/sources.list.d/official-package-repositories.list
</p><p>$ sudo sed -i 's/olivia/petra/' /etc/apt/sources.list.d/official-package-repositories.list</pre>
</p><p>接著執行 APT 指令升級系統:
</p><p><pre class="prettyprint">$ sudo apt-get update; sudo apt-get dist-upgrade</pre>
</p><p>其實,直接編輯 /etc/apt/sources.list 加入 Linux Mint 16 需要的套件庫就可以了。不過由於 Linux Mint 的 /etc/apt/sources.list 實值上是空的,所有的套件來源都放在 /etc/apt/sources.list.d 這個目錄裡,因此才會改成修改 /etc/apt/sources.list.d/official-package-repositories.list 這個檔案。</p>闇月千瞳的部落格http://www.blogger.com/profile/16152087862701279897noreply@blogger.com0tag:blogger.com,1999:blog-10519809.post-27004973352082152902013-11-28T00:58:00.000+08:002013-11-28T00:58:02.327+08:00使用 PhotoCap 製作不規則的拼貼圖<p>PhotoCap 是由國人 Johnson Wang 所開發的一個相片編修軟體,使用者可以在 <a href="http://www.photocap.com.tw/forum/index.php">http://www.photocap.com.tw/forum/</a> 這個網站找到更多有關於 PhotoCap 的討論,也可以在該網站<a href="http://www.photocap.com.tw/forum/viewthread.php?tid=43781&extra=page%3D1">下載到目前最新的版本 (PhotoCap 6.0)</a>。
</p><p><div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/-fVpcDmT8qC8/UpWe_eEaLLI/AAAAAAAAJxY/7MsD7HiuIlA/s1600/2013-11-27+12+55+25.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-fVpcDmT8qC8/UpWe_eEaLLI/AAAAAAAAJxY/7MsD7HiuIlA/s1600/2013-11-27+12+55+25.png" style="width: 720px;" /></a></div>
</p><p>在這篇文章裡,我將示範如何使用 PhotoCap 來製作相片拼貼。首先,從下拉式選單「功能」找到「照片拼貼」:
</p><p><div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/-JRJV3YPhsKc/UpWe_JgrcfI/AAAAAAAAJxU/tzAvRFNUyN0/s1600/2013-11-27+12+58+43.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-JRJV3YPhsKc/UpWe_JgrcfI/AAAAAAAAJxU/tzAvRFNUyN0/s1600/2013-11-27+12+58+43.png" /></a></div>
</p><p>接著會出現載入相片的對話框,按下左上方的「載入照片」:
</p><p><div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/-H2xPiPBmbSw/UpWe_NLuIMI/AAAAAAAAJxg/Wq_6m0mmLdE/s1600/2013-11-27+12+59+04.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-H2xPiPBmbSw/UpWe_NLuIMI/AAAAAAAAJxg/Wq_6m0mmLdE/s1600/2013-11-27+12+59+04.png" style="width: 720px;" /></a></div>
</p><p>然後選擇要加入拼貼的相片:
</p><p><div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/-HhvU7UOP9rI/UpWe_6Pe8oI/AAAAAAAAJxw/WcEuZBh2SGA/s1600/2013-11-27+12+59+30.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-HhvU7UOP9rI/UpWe_6Pe8oI/AAAAAAAAJxw/WcEuZBh2SGA/s1600/2013-11-27+12+59+30.png" style="width: 720px;" /></a></div>
</p><p>載入相片後,若選擇「開啟隨機角度」,那麼就可以製作不規則排列的拼貼了。在這個對話框只是先做隨機的拼貼,按下 OK 後,會進入 PhotoCap 的編修視窗。
</p><p><div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/-AKIkryhSj_s/UpWfAbUKuYI/AAAAAAAAJxo/nOQyRzdiyWo/s1600/2013-11-27+12+59+56.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-AKIkryhSj_s/UpWfAbUKuYI/AAAAAAAAJxo/nOQyRzdiyWo/s1600/2013-11-27+12+59+56.png" style="width: 720px;" /></a></div>
</p><p>在編修視窗裡,右側會將所有加入的相片各自成為一個圖層,此外也可以在調整每一張相片的大小、角度和位置。
</p><p><div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/-hV2nfpEKZAQ/UpWfBAs6YEI/AAAAAAAAJyE/H8uwt_vqBOU/s1600/2013-11-27+13+02+42.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-hV2nfpEKZAQ/UpWfBAs6YEI/AAAAAAAAJyE/H8uwt_vqBOU/s1600/2013-11-27+13+02+42.png" style="width: 720px;" /></a></div>
</p><p><div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/-uapezajmhww/UpWfAvWvWGI/AAAAAAAAJx4/EF-2LB6uPno/s1600/2013-11-27+13+00+32.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-uapezajmhww/UpWfAvWvWGI/AAAAAAAAJx4/EF-2LB6uPno/s1600/2013-11-27+13+00+32.png" /></a></div>
</p><p>這篇文章一開始我使用了白色的背景,若一開始選擇「照片拼貼」前先打開一張相片,那麼就可以用那張相片作為拼貼的背景圖了。
</p><p><div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/-CdO1W_4kQ7A/UpWklHa4AbI/AAAAAAAAJyU/FDijG9UlrX4/s1600/2013-11-27+15+50+04.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-CdO1W_4kQ7A/UpWklHa4AbI/AAAAAAAAJyU/FDijG9UlrX4/s1600/2013-11-27+15+50+04.png" style="width: 720px;" /></a></div>
</p><p>最後,來看一下拼貼完成的照片吧!
</p><p><div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/-eo07OBZ2m9Q/UpWk9o37qiI/AAAAAAAAJyc/zlnMj_fr2ZE/s1600/DSC_2769P1.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-eo07OBZ2m9Q/UpWk9o37qiI/AAAAAAAAJyc/zlnMj_fr2ZE/s1600/DSC_2769P1.JPG" style="width: 720px;" /></a></div>
</p>
闇月千瞳的部落格http://www.blogger.com/profile/16152087862701279897noreply@blogger.com0tag:blogger.com,1999:blog-10519809.post-11949499541504129922013-11-13T16:54:00.001+08:002013-12-02T10:16:23.061+08:00在 Debian GNU/Linux 7 安裝 Node.js<p>在 Debian GNU/Linux 7 的套件庫裡並沒有 Node.js 的套件,若要安裝 Node.js 需要由 <a href="http://nodejs.org/">http://nodejs.org/</a> 下載源碼編譯安裝。
</p><p>首先下載當前的版本 node-v0.10.22.tar.gz,此外亦可以參考以下文章編譯:
</p><p><ol><li><a href="http://opengg.me/857/build-nodejs-deb-debian-squeeze/">在Debian Squeeze 上编译 node.js</a></li></ol>
</p><p>也使用 FPM 將編譯的結果製成 .deb 檔,步驟如下:
</p><p><pre class="prettyprint">$ tar zxvf node-v0.10.22.tar.gz
$ cd node-v0.10.22
$ ./configure
$ make
$ mkdir _install && make install DESTDIR=_install
$ fpm -s dir -t deb -n nodejs -v 0.10.22 -C _install usr</pre>
</p><p>執行完成後會生成 nodejs_0.10.22_amd64.deb 這個檔案,接著安裝即可:
</p><p><pre class="prettyprint">$ sudo dpkg -i nodejs_0.10.22_amd64.deb</pre>
</p>
闇月千瞳的部落格http://www.blogger.com/profile/16152087862701279897noreply@blogger.com0tag:blogger.com,1999:blog-10519809.post-47640205358257948182013-11-11T13:43:00.000+08:002013-12-09T09:36:32.829+08:00在 Debian GNU/Linux 7 安裝 Ruby / FPM<p>關於 FPM 的介紹:
</p><p><a href="https://docs.google.com/presentation/d/11TOsLeg58w7GCt6i7y1VIQWnUYotsx0MzGMJ_dWUJNo/present#slide=id.i0">https://docs.google.com/presentation/d/11TOsLeg58w7GCt6i7y1VIQWnUYotsx0MzGMJ_dWUJNo/present#slide=id.i0</a>
</p><p>FPM 的功能可用於打包套件。
</p><p>在 Debian GNU/Linux 7 安裝 FPM 很簡單,首先要安裝 <b>ruby</b>、<b>rubygems</b>、<b>ruby-dev</b> 幾個套件:</p><p><pre class="prettyprint">$ sudo apt-get install ruby rubygems ruby-dev</pre></p>
<p>然後在執行以下指令安裝 FPM 即可:
</p><p><pre class="prettyprint"><del>$ sudo ruby install fpm</del></pre>
</p><p><pre class="prettyprint">$ sudo gem install fpm</pre>
</p><p>此外,以下也是關於 FPM 的幾篇參考文章:</p><p><ol><li><a href="http://blog.csdn.net/willas/article/details/10329225">用fpm便捷地打RPM包</a></li><li><a href="http://waydee.blog.51cto.com/4677242/834002">Linux--轻松定义自己的RPM/DEB软件包</a></li></ol></p>
闇月千瞳的部落格http://www.blogger.com/profile/16152087862701279897noreply@blogger.com0tag:blogger.com,1999:blog-10519809.post-77003227095454734082013-11-08T01:09:00.000+08:002013-11-27T17:12:38.149+08:00在 Adobe Bridge CS6 裡批次將 RAW 轉 TIFF<P>很長時間來,我已經習慣在 Capture NX 2 裡批次將 RAW 轉成 JPG 或 TIFF 了。不過,最近有機會使用 Canon 的機子拍照,卻突然發現不知道怎麼批次將 RAW 轉 JPG 或 TIFF,畢竟我沒有 Canon 的 Digital Photo Professional (DPP) 這套軟體。
</P><P>經過認真在翻閱 Adobe 的線上文件及在網路上爬文,終於找到如何在 Adobe Bridge CS6 裡批次轉檔的步驟了。首先,在 Adobe Bridge CS6 裡將要轉換的檔案點選起來。
</P><P><div class="separator" style="clear: both; text-align: center;"><a href="http://1.bp.blogspot.com/-uszdeIATteo/UnuZaL-k8bI/AAAAAAAAJn4/mQhddUjACMs/s1600/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-uszdeIATteo/UnuZaL-k8bI/AAAAAAAAJn4/mQhddUjACMs/s1600/1.png" style="width: 720px;" /></a></div>
</P><P>然後從「工具」下拉選單找到「Photoshop」,再往下一層找到「影像處理器」。
</P><P><div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/-vHqwj1xMbIA/UnuZZ2MNeYI/AAAAAAAAJn0/2f0TErXygwk/s1600/2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-vHqwj1xMbIA/UnuZZ2MNeYI/AAAAAAAAJn0/2f0TErXygwk/s1600/2.png" style="width: 720px;" /></a></div>
</P><P>這時,Adobe Bridge CS6 會打開 Adobe Photoshop CS6,並開啟影像處理器的對話視窗,在這個對話視窗裡可以選擇將檔案轉成 JPG 或 TIFF,此外也可以重新調整輸出檔案的尺寸。
</P><P><div class="separator" style="clear: both; text-align: center;"><a href="http://1.bp.blogspot.com/-kcgy86kPX8U/UnuZZrdJnWI/AAAAAAAAJnw/Ko2L4X9Osu4/s1600/3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-kcgy86kPX8U/UnuZZrdJnWI/AAAAAAAAJnw/Ko2L4X9Osu4/s1600/3.png" /></a></div>
</P><P>在這篇文章的示範裡,我只單純示範如何轉成 TIFF,轉出來的結果如下圖。
</P><P><div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/-m9oOeOoFsSY/UnuZarYCb2I/AAAAAAAAJoI/c-WSdg8ir2I/s1600/4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-m9oOeOoFsSY/UnuZarYCb2I/AAAAAAAAJoI/c-WSdg8ir2I/s1600/4.png" style="width: 720px;" /></a></div>
</P>
闇月千瞳的部落格http://www.blogger.com/profile/16152087862701279897noreply@blogger.com0tag:blogger.com,1999:blog-10519809.post-20042378097715863582013-11-07T20:19:00.000+08:002013-11-07T20:19:05.955+08:00Canon 650D 開箱<p>11 月 5 日那天下午走進 Artista Perfetto 後,在吧台邊坐了下來,突然眼前就出現了這個包裹,心裡訝異了一下,咦?難道因為我是第 OOXX 位客人的神秘小禮物嗎?
</p><p><div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/-mvuwZuRcOMo/UnmpGoiFTGI/AAAAAAAAJlQ/AXRElhVyqpg/s1600/DSC_5813.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-mvuwZuRcOMo/UnmpGoiFTGI/AAAAAAAAJlQ/AXRElhVyqpg/s1600/DSC_5813.JPG" style="width: 720px;" /></a></div>
</p><p>先打開看看吧!哇!是 Canon 650D 和 SIGMA 17-50mm F2.8 EX DC OS HSM 這管鏡頭耶!原本我只是 Nikon 的使用者,現在多了台 Canon 650D,終於可以雙修了。 (誤)
</p><p><div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/-PLnPSLYOdPU/UnmpGxANWQI/AAAAAAAAJlY/nJkcTDU0UZQ/s1600/DSC_5816.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-PLnPSLYOdPU/UnmpGxANWQI/AAAAAAAAJlY/nJkcTDU0UZQ/s1600/DSC_5816.JPG" style="width: 720px;" /></a></div>
</p><p>檢查一下機身和鏡頭的外觀,然後開機設定好時間和中文介面顯示。
</p><p><div class="separator" style="clear: both; text-align: center;"><a href="http://1.bp.blogspot.com/-vXnxg12t-9E/UnmpHOTZovI/AAAAAAAAJlU/QYjp8RIQvdI/s1600/DSC_5819.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-vXnxg12t-9E/UnmpHOTZovI/AAAAAAAAJlU/QYjp8RIQvdI/s1600/DSC_5819.JPG" style="width: 720px;" /></a></div>
</p><p><div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/-hnE68OSwCCU/UnmpKDgTHLI/AAAAAAAAJlo/XqdxUqnp18Y/s1600/DSC_5820.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-hnE68OSwCCU/UnmpKDgTHLI/AAAAAAAAJlo/XqdxUqnp18Y/s1600/DSC_5820.JPG" style="width: 720px;" /></a></div>
</p><p><div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/-vU71PJALMSY/UnmpKelS87I/AAAAAAAAJls/E6KpTsHg7s0/s1600/DSC_5822.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-vU71PJALMSY/UnmpKelS87I/AAAAAAAAJls/E6KpTsHg7s0/s1600/DSC_5822.JPG" style="width: 720px;" /></a></div>
</p><p><div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/-IkSLY436t4A/UnmpKb0hXBI/AAAAAAAAJlw/FxeD5Q6IE6E/s1600/DSC_5823.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-IkSLY436t4A/UnmpKb0hXBI/AAAAAAAAJlw/FxeD5Q6IE6E/s1600/DSC_5823.JPG" style="width: 720px;" /></a></div>
</p><p>然後,趕緊將相機背帶纏繞好,不然萬一拿著相機時不小心手殘了一下就要哭哭了。
</p><p>都搞定之後,當然就是拿著相機在 Artista Perfetto 東拍拍西拍拍囉!
</p><p><div class="separator" style="clear: both; text-align: center;"><a href="http://www.flickr.com/photos/yuanfarn/10709672223/" title="Flickr 上 闇月千瞳 的 IMG_0089P1"><img src="http://farm6.staticflickr.com/5471/10709672223_361fbac66c_z.jpg" width="640" height="427" alt="IMG_0089P1"></a></div>
</p><p><div class="separator" style="clear: both; text-align: center;"><a href="http://www.flickr.com/photos/yuanfarn/10699883356/" title="Flickr 上 闇月千瞳 的 IMG_0121P2-1"><img src="http://farm4.staticflickr.com/3673/10699883356_1fff1be803_z.jpg" width="427" height="640" alt="IMG_0121P2-1"></a></div>
</p><p><div class="separator" style="clear: both; text-align: center;"><a href="http://www.flickr.com/photos/yuanfarn/10709408115/" title="Flickr 上 闇月千瞳 的 IMG_0079P2"><img src="http://farm8.staticflickr.com/7442/10709408115_35b2c8400d_z.jpg" width="427" height="640" alt="IMG_0079P2"></a></div>
</p><p><div class="separator" style="clear: both; text-align: center;"><a href="http://www.flickr.com/photos/yuanfarn/10699829876/" title="Flickr 上 闇月千瞳 的 IMG_0084P1"><img src="http://farm6.staticflickr.com/5491/10699829876_2b8e255e62_z.jpg" width="427" height="640" alt="IMG_0084P1"></a></div>
</p><p>因為女孩還在上班,不能擔任 Canon 650D 的開箱員,就請女孩成為 Canon 650D 的第一位 model 囉! ^_^
</p><p>在 Artista Perfetto 玩耍了半個下午,雖然對 Canon 650D 還不是很習慣,但反覆摸索之後,其實也不是很難上手。最後,還是要請 Canon 650D 真正的主人與相機來張合照。呵!我只是幫忙開箱而已啦!
</p><p><div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/-LBUD62rueK4/UnmpL2MelRI/AAAAAAAAJl8/OWXTu5soD1c/s1600/DSC_5842.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-LBUD62rueK4/UnmpL2MelRI/AAAAAAAAJl8/OWXTu5soD1c/s1600/DSC_5842.JPG" style="width: 720px;" /></a></div>
</p><p>啊~~~ 最後一張怎麼好像迷焦了。真不好意思,我的 D90 被操太兇了。 XD</p>
闇月千瞳的部落格http://www.blogger.com/profile/16152087862701279897noreply@blogger.com0tag:blogger.com,1999:blog-10519809.post-75813015363062387992013-10-30T09:29:00.001+08:002013-12-14T10:11:40.133+08:00[台中] 瑪棻咖啡<P>其實,著手撰寫這篇文章時,已經是我第二次造訪這裡了。這裡,可以悠閒地享受早、午餐,可以朋友相約來這兒談心事、話八卦,也可以一個人在這兒享受不被打擾的下午時光。
</p><P><div class="separator" style="clear: both; text-align: center;"><a href="http://1.bp.blogspot.com/-IFUp8XvM7BI/Um93jsMJecI/AAAAAAAAJeo/oQ_ql8kpQzM/s1600/DSC_5742.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-IFUp8XvM7BI/Um93jsMJecI/AAAAAAAAJeo/oQ_ql8kpQzM/s1600/DSC_5742.JPG" style="width: 720px;" /></a></div>
</p><P><div class="separator" style="clear: both; text-align: center;"><a href="http://1.bp.blogspot.com/-iJFtMLTfmso/Um93tSz2_bI/AAAAAAAAJew/elTyY0OyelU/s1600/DSC_5740.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-iJFtMLTfmso/Um93tSz2_bI/AAAAAAAAJew/elTyY0OyelU/s1600/DSC_5740.JPG" style="width: 720px;" /></a></div>
</p><P><div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/-VAtcTIdtPnk/Um937wpHNGI/AAAAAAAAJe4/433sDCPX8Nk/s1600/DSC_5745.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-VAtcTIdtPnk/Um937wpHNGI/AAAAAAAAJe4/433sDCPX8Nk/s1600/DSC_5745.JPG" style="width: 720px;" /></a></div>
</p><P>店裡的燈光氣氛非常溫暖,令人感覺很舒服。
</p><P><div class="separator" style="clear: both; text-align: center;"><a href="http://1.bp.blogspot.com/-Eoc79ZWlkAg/UnBS0gZOXCI/AAAAAAAAJfs/P9iFb2Vn3sg/s1600/DSC_1234.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-Eoc79ZWlkAg/UnBS0gZOXCI/AAAAAAAAJfs/P9iFb2Vn3sg/s1600/DSC_1234.JPG" style="width: 720px;" /></a></div>
</p><P><div class="separator" style="clear: both; text-align: center;"><a href="http://1.bp.blogspot.com/-1Y6hmSp4Xu4/UnBS7Af8WoI/AAAAAAAAJgA/pOuAGW5la-k/s1600/DSC_5739.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-1Y6hmSp4Xu4/UnBS7Af8WoI/AAAAAAAAJgA/pOuAGW5la-k/s1600/DSC_5739.JPG" style="width: 720px;" /></a></div>
</p><P><div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/-Ezr0p7fxttk/UnBSv_3WYnI/AAAAAAAAJfQ/sZBcvyuOMiA/s1600/DSC_1235.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-Ezr0p7fxttk/UnBSv_3WYnI/AAAAAAAAJfQ/sZBcvyuOMiA/s1600/DSC_1235.JPG" style="width: 720px;" /></a></div>
</p><P><div class="separator" style="clear: both; text-align: center;"><a href="http://1.bp.blogspot.com/-wJPt9PzVzpI/UnBS7tBlRwI/AAAAAAAAJgI/Nq1eavl38xw/s1600/DSC_5737.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-wJPt9PzVzpI/UnBS7tBlRwI/AAAAAAAAJgI/Nq1eavl38xw/s1600/DSC_5737.JPG" style="width: 720px;" /></a></div>
</p><P><div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/-G3RUkZCWYSM/UnBSv6UYX2I/AAAAAAAAJfM/JNIPLsIvjCs/s1600/DSC_1239.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-G3RUkZCWYSM/UnBSv6UYX2I/AAAAAAAAJfM/JNIPLsIvjCs/s1600/DSC_1239.JPG" style="width: 720px;" /></a></div>
</p><P>角落的座位有插座可以使用,所以也可以攜帶筆記型電腦來使用。
</p><P><div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/-Nm4myRD2BLs/UnBSxxsSu1I/AAAAAAAAJfc/DNGio3gZ3s0/s1600/DSC_1242.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-Nm4myRD2BLs/UnBSxxsSu1I/AAAAAAAAJfc/DNGio3gZ3s0/s1600/DSC_1242.JPG" style="width: 720px;" /></a></div>
</p><P><div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/-vMY145vtiYg/UnBS5JqmGJI/AAAAAAAAJf0/qB8pK4GwOGU/s1600/DSC_1253.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-vMY145vtiYg/UnBS5JqmGJI/AAAAAAAAJf0/qB8pK4GwOGU/s1600/DSC_1253.JPG" style="width: 720px;" /></a></div>
</p><P><div class="separator" style="clear: both; text-align: center;"><a href="http://1.bp.blogspot.com/-JDaoAkkjzNU/UnBS6lJekwI/AAAAAAAAJf8/TOreNdob8tg/s1600/DSC_5738.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-JDaoAkkjzNU/UnBS6lJekwI/AAAAAAAAJf8/TOreNdob8tg/s1600/DSC_5738.JPG" style="width: 720px;" /></a></div>
</p><P>瑪棻咖啡也有提供有室外的座位,雖然現在天氣漸漸轉涼了,不過這座位區並不怎麼冷。
</p><P><div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/-u1YWd-YtjUw/UnBSy2hRArI/AAAAAAAAJfg/DwVKRo-0wJM/s1600/DSC_1245.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-u1YWd-YtjUw/UnBSy2hRArI/AAAAAAAAJfg/DwVKRo-0wJM/s1600/DSC_1245.JPG" style="width: 720px;" /></a></div>
</p><P>瑪棻咖啡提供早、午餐,餐點種類不少,消費者自行在座位上劃完單,再到櫃台點單就可以了。
</p><P><div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/-iQnJj8TxCVA/UnBapDD7BBI/AAAAAAAAJgc/fSTIlm1Ogl8/s1600/DSC_1273.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-iQnJj8TxCVA/UnBapDD7BBI/AAAAAAAAJgc/fSTIlm1Ogl8/s1600/DSC_1273.JPG" style="width: 720px;" /></a></div>
</p><P><div class="separator" style="clear: both; text-align: center;"><a href="http://1.bp.blogspot.com/-fCHJk-2onj8/UnBaq69er6I/AAAAAAAAJgk/5XSEZelR5nM/s1600/DSC_1274.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-fCHJk-2onj8/UnBaq69er6I/AAAAAAAAJgk/5XSEZelR5nM/s1600/DSC_1274.JPG" style="width: 720px;" /></a></div>
</p><P>餐點的味道挺可口的。我喜歡附餐的蔬果汁,這是現打的,所以不一定每次都是相同的唷!
</p><P><div class="separator" style="clear: both; text-align: center;"><a href="http://1.bp.blogspot.com/--F5I-SnptUk/UnBcDSXLBmI/AAAAAAAAJgw/s19jgquoEuk/s1600/DSC_1248.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/--F5I-SnptUk/UnBcDSXLBmI/AAAAAAAAJgw/s19jgquoEuk/s1600/DSC_1248.JPG" style="width: 720px;" /></a></div>
</p><P><div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/-7_ZGSiLJMCQ/UnBcDxxqQ3I/AAAAAAAAJg4/SdjPNH_E-Fc/s1600/DSC_1249.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-7_ZGSiLJMCQ/UnBcDxxqQ3I/AAAAAAAAJg4/SdjPNH_E-Fc/s1600/DSC_1249.JPG" style="width: 720px;" /></a></div>
</p><P><div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/-TWtq6me5xrQ/UnBcGieVJtI/AAAAAAAAJhM/qWxu4gY9KZw/s1600/DSC_5726.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-TWtq6me5xrQ/UnBcGieVJtI/AAAAAAAAJhM/qWxu4gY9KZw/s1600/DSC_5726.JPG" style="width: 720px;" /></a></div>
</p><P><div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/-C0Koxpn6Qzs/UnBcGnkLy7I/AAAAAAAAJhI/bQZNz4rpo3E/s1600/DSC_5728.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-C0Koxpn6Qzs/UnBcGnkLy7I/AAAAAAAAJhI/bQZNz4rpo3E/s1600/DSC_5728.JPG" style="width: 720px;" /></a></div>
</p><P><div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/-RFMVg-9q_Ro/UnBcG0_mtKI/AAAAAAAAJhQ/c8086QWZL08/s1600/DSC_5735.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-RFMVg-9q_Ro/UnBcG0_mtKI/AAAAAAAAJhQ/c8086QWZL08/s1600/DSC_5735.JPG" style="width: 720px;" /></a></div>
</p><P><div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/-cBxM_2eGeyk/UnBcDgims_I/AAAAAAAAJg0/bPdLj2aHod4/s1600/DSC_1251.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-cBxM_2eGeyk/UnBcDgims_I/AAAAAAAAJg0/bPdLj2aHod4/s1600/DSC_1251.JPG" style="width: 720px;" /></a></div>
</p><P>瑪棻咖啡位於美術館旁的美村路上,附近停車算是挺方便的。
</p><P><b>店家資訊:</b>
</p><P>瑪棻咖啡 (MUFFIN)
</p><P>營業時間: 7:00 AM ~ 5:00 PM (假日至 6:00 PM)
</p><P>提供無線上網,使用插座最低消費 120 元。
</p><P>台中市美村路一段488號
</p><P>04-23751239
</p>
闇月千瞳的部落格http://www.blogger.com/profile/16152087862701279897noreply@blogger.com0tag:blogger.com,1999:blog-10519809.post-43727182598290586472013-10-28T22:29:00.000+08:002013-10-28T22:29:09.894+08:00製作 Linux Mint 的 USB 開機碟<p>之前在《<a href="http://yuanfarn.blogspot.tw/2013/08/debian-usb.html">製作 Debian 的 USB 開機碟</a>》這篇文章裡提到要製作 Debian GNU/Linux 的 USB 啟動碟非常容易,只要在 Linux 的環境裡使用 cp 這個指令就可以了。
</p><p>其實,若要製作 Linux Mint 的 USB 啟動碟也同樣很容易,首先下載 Linux Mint 15 的光碟 ISO 檔 (linuxmint-15-cinnamon-dvd-64bit.iso),然後在 Linux 的環境執行下面指令就可以了:
</p><p><pre class="prettyprint">$ sudo dd if=./linuxmint-15-cinnamon-dvd-64bit.iso of=/dev/sdX oflag=direct bs=1048576
$ sudo sync</pre>
</p><p>其中,/dev/sdX 是 USB 碟的裝置。
</p><p>至於,若要在 Windows 環境裡製作 Linux Mint 的 USB 啟動碟也不是很難,讀者可以自行參閱《<a href="http://community.linuxmint.com/tutorial/view/744">How to install Linux Mint via USB</a>》這篇文章的說明。
</p>
闇月千瞳的部落格http://www.blogger.com/profile/16152087862701279897noreply@blogger.com0tag:blogger.com,1999:blog-10519809.post-32571568865007323472013-10-04T12:01:00.001+08:002013-10-04T12:01:30.802+08:00在 CentOS 6.4 及 Debian GNU/Linux 7 之間使用 sshfs<p>在 Linux 裡如果要掛載遠端主機的磁碟或目錄,大多數可以使用 NFS 或 Samba。不過 SSHFS (SSH Filesystem) 提供了一個很簡單的方式,只要主機提供有 SSH 服務就可以使用了。我手邊正好各有一台 CentOS 6.4 與 Debian GNU/Linux 7,就拿來試試囉!
</p><p><b>在 CentOS 6.4 安裝 SSHFS 套件</b>
</p><p>在 CentOS 6.4 的套件庫裡並沒有 SSHFS 的套件,爬文後參考了《<a href="http://www.solaris-cookbook.com/linux/centos-debian-ubuntu-nfs-smbcifs-alternative-sshfs/">CentOS 6.x / Debian / Ubuntu: NFS or SMB/CIFS alternative sshfs</a>》這篇文章,得知在 EPEL (Extra Packages for Enterprise Linux) 的套件庫裡有這個套件。然後,又在《<a href="http://note.drx.tw/2013/09/working-with-linux-05-reopsiroty-and-mirror.html">[完全用 GNU/Linux 工作] 05. 套件庫及鏡像站</a>》這篇文章裡得知,「請先行安裝 RPMforge 再安裝 EPEL」。
</p><p><div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/-1UOlo5lTkRk/Uk4rv6lLwUI/AAAAAAAAJLE/huZBk4HGopI/s1600/RPMforge-EPEL.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-1UOlo5lTkRk/Uk4rv6lLwUI/AAAAAAAAJLE/huZBk4HGopI/s1600/RPMforge-EPEL.png" style="width: 720px;" /></a></div>
</p><p>於是,我又找了找 RPMforge 的套件庫,確定它也有 SSHFS 的套件,那麼就決定使用 RPMforge 裡的 SSHFS 套件了。
</p><p><pre class="prettyprint">$ sudo yum -y install fuse fuse-sshfs
Loaded plugins: fastestmirror, refresh-packagekit, security
Loading mirror speeds from cached hostfile
* base: ftp.cs.pu.edu.tw
* extras: mirrors.163.com
* rpmforge: ftp.riken.jp
* updates: mirrors.163.com
Setting up Install Process
Package fuse-2.8.3-4.el6.x86_64 already installed and latest version
Resolving Dependencies
--> Running transaction check
---> Package fuse-sshfs.x86_64 0:2.2-1.el6.rf will be installed
--> Finished Dependency Resolution
Dependencies Resolved
================================================================================
Package Arch Version Repository Size
================================================================================
Installing:
fuse-sshfs x86_64 2.2-1.el6.rf rpmforge 44 k
Transaction Summary
================================================================================
Install 1 Package(s)
Total download size: 44 k
Installed size: 103 k
Downloading Packages:
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
Installing : fuse-sshfs-2.2-1.el6.rf.x86_64 1/1
Verifying : fuse-sshfs-2.2-1.el6.rf.x86_64 1/1
Installed:
fuse-sshfs.x86_64 0:2.2-1.el6.rf
Complete! </pre>
</p><p>接著,將允許使用 SSHFS 的使用者加到 fuse 這個 group 裡,指令如下:
</p><p><pre class="prettyprint">sudo gpasswd -a $USER fuse</pre>
</p><p>然後,就可以使用 SSHFS 了。此時,要掛載遠端的目錄指令格式如下:
</p><p><pre class="prettyprint">sshfs username@hostname:/directory /yetanotherlocaldirectory</pre>
</p><p>例如,我要掛載遠端 (192.168.1.106) 使用者 online 家目錄裡的 share 目錄到本地端的 working 目錄時,指令如下:
</p><p><pre class="prettyprint">sshfs online@192.168.1.106:/home/online/share ~/working</pre>
</p><p>卸載的指令格式如下:
</p><p><pre class="prettyprint">fusermount -u /directory</pre>
</p><p>例如,我要卸載剛才掛載的那個目錄,指令如下:
</p><p><pre class="prettyprint">fusermount -u working</pre>
</p><p>最後,我在《<a href="http://cfarm.blog.aznc.cc/%E5%A5%BD%E7%94%A8%E7%9A%84sshfs/">好用的sshfs</a>》這篇文章得知,SSHFS 是以遠端主機的權限來掛載,所以如果兩端的主機 uid/gid 不一致時,會出現權限錯誤的問題。解決辦法是在掛載時加上指定 uid/gid 的選項。因為我已經將 CentOS 6.4 與 Debian GNU/Linux 7 裡的使用者 uid/gid 改成一樣的,例如 online 這個帳號的 uid/gid 均為 1000,於是掛載指令變成如下:
</p><p><pre class="prettyprint">sshfs -o "uid=1000,gid=1000" online@192.168.1.106:/home/online/share ~/working</pre>
</p><p><b>在 Debian GNU/Linux 7 安裝 SSHFS 套件</b>
</p><p>Debian GNU/Linux 7 的套件庫已經收錄了 SSHFS 的套件,因此只要用 apt-get 指令安裝即可。
</p><p><pre class="prettyprint">$ sudo apt-get -y install sshfs
Reading package lists...
Building dependency tree...
Reading state information...
The following NEW packages will be installed:
sshfs
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 0 B/54.8 kB of archives.
After this operation, 147 kB of additional disk space will be used.
Selecting previously unselected package sshfs.
(Reading database ... 119936 files and directories currently installed.)
Unpacking sshfs (from .../archives/sshfs_2.4-1_amd64.deb) ...
Processing triggers for man-db ...
Setting up sshfs (2.4-1) ...</pre>
</p><p>接著,如同 CentOS 6.4 一般,將使用者加入 fuse 這個 group,然後該使用者重新登入後就可以使用 SSHFS 了。
</p><p><b>延伸閱讀:</b>
</p><p><ol><li><a href="http://yuanfarn.blogspot.tw/2013/09/centos.html">CentOS 的第三方套件庫</a></li><li><a href="http://yuanfarn.blogspot.tw/2013/10/centos-uid-gid.html">在 CentOS 裡修改使用者帳號的 UID / GID</a></li></ol>
</p>
闇月千瞳的部落格http://www.blogger.com/profile/16152087862701279897noreply@blogger.com0tag:blogger.com,1999:blog-10519809.post-47233171056456257762013-10-03T10:21:00.001+08:002013-10-03T10:21:28.814+08:00在 CentOS 裡修改使用者帳號的 UID / GID<p>我目前手邊有執行著 Debian GNU/Linux 7 與 CentOS 6.4 的兩台機器。其中,Debian GNU/Linux 預設的 uid/gid 是從 1000 開始計算;而 CentOS 則是從 500 開始計算。為了方便使用,我將 CentOS 裡的使用者帳號 uid/gid 更改成和 Debian GNU/Linux 裡的一樣。主要參考的文章是以下這兩篇:
</p><p>1. <a href="http://thedaneshproject.com/posts/linux-how-to-change-user-uid-and-gid/">Linux How to change user UID and GID</a>
</p><p>2. <a href="http://www.randmonline.com/2009/01/changing-uidgid-in-centos/">Changing UID/GID in CentOS</a>
</p><p>首先,可以使用 <code class="prettyprint">id</code> 這個指令分別在 Debian GNU/Linux 及 CentOS 上查詢使用者帳號的資訊。假設,我使用的使用者帳號為 online,那麼就執行這個指令:
</p><p><pre class="prettyprint">id online</pre>
</p><p>接著,使用 <code class="prettyprint">usermod</code> 這個指令變更 uid,這裡將 uid 變更為 1000:
</p><p><pre class="prettyprint">usermod -u 1000 online</pre>
</p><p>再使用 <code class="prettyprint">groupmod</code> 這個指令變更 gid,這裡將 gid 變更為 1000:
</p><p><pre class="prettyprint">groupmod -g 1000 online</pre>
</p><p>這裡,在使用 usermod 及 groupmod 兩個指令變更使用者帳號的 uid/gid 時,該名使用者「不得」在登入的狀態。所以,如果已經將 online 登入了,請先將這個帳號登出才能變更 uid/gid。
</p><p>最後,要檢查 online 這個使用者的家目錄 (/home/online),usermod 這個指令會同時修改使用者家目錄內的所有檔案、目錄,讓使用者屬性一併變更;但 grouupmod 這個指令似乎不會自動去修改。所以,必須再執行這個指令修改使用者家目錄裡的檔案、目錄屬性。
</p><p><pre class="prettyprint">chown -R :online /home/online</pre>
</p><p>這樣就搞定了。
</p>
闇月千瞳的部落格http://www.blogger.com/profile/16152087862701279897noreply@blogger.com0tag:blogger.com,1999:blog-10519809.post-55049212027762921542013-10-01T12:49:00.000+08:002013-10-01T12:49:02.283+08:00我的 CentOS 6.4 套件安裝記錄<p>之前安裝 CentOS 時,邊安裝就邊思考在 CentOS 裡要安裝那些套件。其實,很快地我就決定參考《<a href="http://yuanfarn.blogspot.tw/2013/09/debian-gnulinux-7-wheezy.html">安裝 Debian GNU/Linux 7 (Wheezy)</a>》這篇文章,儘可能將我在 Debian GNU/Linux 7 裡安裝的套件找出來,同樣在 CentOS 6.4 裡安裝了該套件。
</p>於是,我整理了幾下這個腳本,用它來安裝基本的套件:<p>
</p><p><pre class="prettyprint">#!/bin/bash
# Get information from CentOS
VERSION=`cat /etc/centos-release`
ARCH=`uname -a | awk '{print $12}'`
# Get Account's ID
THIS_ID=`echo $HOME | cut -d '/' -f 3`
echo Hello $THIS_ID, your system is $VERSION, $ARCH.
PKG_BASIC=""
PKG_I18N="cjkuni-ukai-fonts cjkuni-uming-fonts wqy-zenhei-fonts"
# Development
PKG_EDITOR="vim-enhanced ctags cscope"
PKG_COMPILER="make gdb gcc gcc-c++ gcc-java"
PKG_LIBS="ncurses-devel SDL-devel zlib-devel lzo-devel readline-devel glibc-static glibc-devel libstdc++-devel libX11-devel xorg-x11-server-devel xorg-x11-proto-devel libXrender-devel mesa-libGL-devel expat-devel libsx-devel gettext-devel libevent-devel"
PKG_UTILITIES="gnupg2 minicom lrzsz netpbm libtool bison flex doxygen indent fakeroot valgrind gperf zip curl binutils intltool mtools gawk python-setuptools python-markdown genisoimage syslinux squashfs-tools texinfo compat-libtermcap"
PKG_DOCS=""
PKG_KERNEL="kernel-headers kernel-devel kernel-firmware"
PKG_VCTRL="git git-cvs git-svn gitk cvs subversion mercurial mercurial"
PKG_JAVA=""
PKG_EXTRA=""
# Service
PKG_SERVICE=""
# Packages depond on 32-bit or 64-bit
case $ARCH in
"x86_64")
PKG_ARCH="glibc.i686 glibc-devel.i686 libstdc++.i686 zlib-devel.i686 ncurses-devel.i686 libX11-devel.i686 libXrender.i686 libXrandr.i686"
;;
"i686")
PKG_ARCH=""
;;
esac
# All packages
PACKAGES="$PKG_BASIC $PKG_I18N $PKG_EDITOR $PKG_COMPILER $PKG_LIBS $PKG_UTILITIES $PKG_DOCS $PKG_KERNEL $PKG_VCTRL $PKG_JAVA $PKG_EXTRA $PKG_SERVICE $PKG_ARCH"
sudo yum check-update
sudo yum -y upgrade
sudo yum install -y $PACKAGES
echo 'done.' </pre>
</p><p><b>延伸閱讀:</b>
</p><p><ul><li><a href="http://yuanfarn.blogspot.tw/2013/09/centos.html">CentOS 的第三方套件庫</a></li><li><a href="http://yuanfarn.blogspot.tw/2013/09/centos-64-tmux.html">在 CentOS 6.4 上安裝 tmux</a></li><li><a href="http://yuanfarn.blogspot.tw/2013/09/centos-64-oracle-jdk-6.html">在 CentOS 6.4 安裝 Oracle JDK 6</a></li><li><a href="http://yuanfarn.blogspot.tw/2013/09/centos-hostname.html">變更 CentOS 的 hostname</a></li></ul>
</p>
闇月千瞳的部落格http://www.blogger.com/profile/16152087862701279897noreply@blogger.com0tag:blogger.com,1999:blog-10519809.post-26223678702219934952013-09-27T07:34:00.000+08:002013-09-27T07:34:04.126+08:00使用 Hornil StylePix 替相片加上簽名檔<p>在《<a href="http://yuanfarn.blogspot.tw/2013/09/hornil-stylepix.html">Hornil Stylepix</a>》這篇文章裡提到了 Hornil Stylepix 這個軟體;而在《<a href="http://yuanfarn.blogspot.tw/2012/12/photoscape.html">使用 PhotoScape 替相片加上簽名</a>》這篇文章裡,我使用了 PhotoScape 幫相片加上了簽名檔。
</p><p>這裡,我打算使用 Hornil StylePix 替相片加上簽名檔。首先,在 Stylepix 裡開啟相片檔:
</p><p><div class="separator" style="clear: both; text-align: center;"><a href="http://1.bp.blogspot.com/-2L6qZpvt2Z8/UkPebztMiwI/AAAAAAAAJJY/td6AgnXV2iw/s1600/%E5%9C%96%E7%89%87+18.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-2L6qZpvt2Z8/UkPebztMiwI/AAAAAAAAJJY/td6AgnXV2iw/s1600/%E5%9C%96%E7%89%87+18.png" style="width: 720px;" /></a></div>
</p><p>然後,從「對象」選擇「插入圖像」:
</p><p><div class="separator" style="clear: both; text-align: center;"><a href="http://1.bp.blogspot.com/-2P6EWLQoDHY/UkPebtoLfHI/AAAAAAAAJI8/7uQd3NKek7w/s1600/%E5%9C%96%E7%89%87+19.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-2P6EWLQoDHY/UkPebtoLfHI/AAAAAAAAJI8/7uQd3NKek7w/s1600/%E5%9C%96%E7%89%87+19.png" /></a></div>
</p><p>接著開啟簽名檔的圖檔。簽名檔事先準備好,並儲存成透明背景的 PNG 檔,其中準備簽名檔的方法可以參考《<a href="http://yuanfarn.blogspot.tw/2013/06/pixlr.html">使用 Pixlr 的線上編修工具製作個性化簽名檔</a>》這篇文章。
</p><p><div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/-rB0eMGHhqQU/UkPebliz94I/AAAAAAAAJJA/gIqIlCen1kE/s1600/%E5%9C%96%E7%89%87+20.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-rB0eMGHhqQU/UkPebliz94I/AAAAAAAAJJA/gIqIlCen1kE/s1600/%E5%9C%96%E7%89%87+20.png" style="width: 720px;" /></a></div>
</p><p>插入簽名檔的圖片後,可以調整任意調整簽名檔的大小。不過,我試了很久,在 PhotoScape 裡我可以很簡單地直接「<b>等比例</b>」縮放簽名檔圖片的大小,但是在 Stylepix 我一直找不到簡易且精確「等比例」調整簽名檔圖片大小的方法。
</p><p><div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/-EHRUS5181i0/UkPecN17EHI/AAAAAAAAJJQ/PpeNG-DEXak/s1600/%E5%9C%96%E7%89%87+21.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-EHRUS5181i0/UkPecN17EHI/AAAAAAAAJJQ/PpeNG-DEXak/s1600/%E5%9C%96%E7%89%87+21.png" /></a></div>
</p><p>此外,Stylepix 也支援圖層,在圖層 (分層) 裡也可以調整簽名檔圖片的透明度。
</p><p><div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/-jACuKIOQd60/UkPecYb11EI/AAAAAAAAJJM/MSjtnXnpuXk/s1600/%E5%9C%96%E7%89%87+22.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://3.bp.blogspot.com/-jACuKIOQd60/UkPecYb11EI/AAAAAAAAJJM/MSjtnXnpuXk/s1600/%E5%9C%96%E7%89%87+22.png" /></a></div>
</p><p>Hornil Stylepix 的支援的圖像編修功能相當多。但,若要幫相片加上簽名檔,我偏好選擇 PhotoScape,因為它的操作比較簡單容易些。不過,若讀者對相片編修有興趣,將 Hornil Stylepix 與 PhotoScape 搭配一起使用也是個相當棒的選擇。
</p>
闇月千瞳的部落格http://www.blogger.com/profile/16152087862701279897noreply@blogger.com0tag:blogger.com,1999:blog-10519809.post-34509780146492596942013-09-26T14:13:00.000+08:002013-11-27T17:13:19.886+08:00Hornil Stylepix<p>Hornil StylePix 是一個小巧,而功能強大的圖片編修處理軟體。Hornil Stylepix 是 Free 的版本,而進階的 Hornil StylePix Pro 則是付費的版本。
</p><p>使用者只要從 <a href="http://hornil.com/">Hornil</a> 的網站<a href="http://hornil.com/en/downloads/stylepix/">下載最新的 StylePix 1.13.0.4</a>,然後執行下載回來的 HornilStylePix1.13.0.4Setup.exe 安裝就可以了。
</p><p>安裝完成後,執行的程式畫面如下:
</p><p><div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/-IhicGvrOsJ0/UkPPQWFPh-I/AAAAAAAAJIc/lThbE1aeEMI/s1600/%E5%9C%96%E7%89%87+14.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-IhicGvrOsJ0/UkPPQWFPh-I/AAAAAAAAJIc/lThbE1aeEMI/s1600/%E5%9C%96%E7%89%87+14.png" style="width: 720px;" /></a></div>
</p><p>安裝完 Hornil Stylepix 後,它預設似乎是簡體中文的介面,所以習慣上可以改變成繁體中文。在「視图」這項找到選項設定,如下:
</p><p><div class="separator" style="clear: both; text-align: center;"><a href="http://1.bp.blogspot.com/-e4TPZo6NkGc/UkPPtIM1LLI/AAAAAAAAJIk/N5PbyPPJnO4/s1600/%E5%9C%96%E7%89%87+17.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-e4TPZo6NkGc/UkPPtIM1LLI/AAAAAAAAJIk/N5PbyPPJnO4/s1600/%E5%9C%96%E7%89%87+17.png" /></a></div>
</p><p>然後將語言的項目改成「Chinese Traditional」就可以:
</p><p><div class="separator" style="clear: both; text-align: center;"><a href="http://1.bp.blogspot.com/-YLrrS8WVNIw/UkPP056P31I/AAAAAAAAJIs/YB-6TR3C4LA/s1600/%E5%9C%96%E7%89%87+16.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://1.bp.blogspot.com/-YLrrS8WVNIw/UkPP056P31I/AAAAAAAAJIs/YB-6TR3C4LA/s1600/%E5%9C%96%E7%89%87+16.png" /></a></div>
</p><p>Hornil Stylepix 的功能很多,這篇文章主要不介紹它的軟體功能,有興趣的使用者可以安裝起來多多研究。
</p>
闇月千瞳的部落格http://www.blogger.com/profile/16152087862701279897noreply@blogger.com0tag:blogger.com,1999:blog-10519809.post-79641563195858967162013-09-23T10:20:00.001+08:002013-09-23T10:20:49.733+08:00變更 CentOS 的 hostname<p>1. 修改 /etc/hosts,在 127.0.0.1 裡加上變更後的 hostname:
</p><p><pre class="prettyprint">127.0.0.1 new-hostname localhost.localdomain localhost
::1 localhost6.localdomain6 localhost6</pre>
</p><p>2. 修改 /etc/sysconfig/network,將 HOSTNAME 參數的值改成變更後的 hostname:
</p><p><pre class="prettyprint">NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=new-hostname</pre>
</p><p>3. 執行 hostname 指令:
</p><p><pre class="prettyprint">hostname new-hostname</pre>
</p><p>基本上執行完這個步驟就可以了。
</p><p>
闇月千瞳的部落格http://www.blogger.com/profile/16152087862701279897noreply@blogger.com0tag:blogger.com,1999:blog-10519809.post-20712062572969043402013-09-20T09:10:00.000+08:002013-09-20T09:10:19.610+08:00在 CentOS 6.4 安裝 Oracle JDK 6<p>安裝完 CentOS 6.4 後,我發現 CentOS 的套件庫裡也沒有 Oracle JDK 的套件,都是收錄了 OpenJDK。於是,我打算依照之前的作法自行安裝 Oracle JDK 6。在動手安裝之前,我還是爬了爬文,找了幾篇參考的文章:
</p><p><li><a href="https://d.stavrovski.net/blog/how-to-install-and-setup-oracle-java-jdk-in-centos-6/">HOW TO INSTALL AND SETUP ORACLE JAVA JDK IN CENTOS 6</a></li><li><a href="http://www.if-not-true-then-false.com/2010/install-sun-oracle-java-jdk-jre-6-on-fedora-centos-red-hat-rhel/">Install Sun/Oracle Java JDK/JRE 6u45 on Fedora 19/18, CentOS/RHEL 6.4/5.9</a></li><li><a href="http://www.if-not-true-then-false.com/2010/install-sun-oracle-java-jdk-jre-7-on-fedora-centos-red-hat-rhel/">Install Oracle Java JDK/JRE 7u25 on Fedora 19/18, CentOS/RHEL 6.4/5.9</a></li>
</p><p>安裝的步驟並不麻煩,首先自 Oracle 的網站下載了 Oracle JDK 6 的 jdk-6u45-linux-x64-rpm.bin 這個檔案,然後執行它:
</p><p><pre class="prettyprint">$ sudo ./jdk-6u45-linux-x64-rpm.bin</pre>
</p><p>接著,使用 alternatives –install 指令安裝 Oracle JDK:
</p><p><pre class="prettyprint">$ alternatives --install /usr/bin/java java /usr/java/jdk1.6.0_45/jre/bin/java 20000
$ sudo alternatives --install /usr/bin/javaws javaws /usr/java/jdk1.6.0_45/jre/bin/javaws 20000
$ sudo alternatives --install /usr/lib/mozilla/plugins/libjavaplugin.so libjavaplugin.so /usr/java/jdk1.6.0_45/jre/lib/i386/libnpjp2.so 20000
$ sudo alternatives --install /usr/lib64/mozilla/plugins/libjavaplugin.so libjavaplugin.so.x86_64 /usr/java/jdk1.6.0_45/jre/lib/amd64/libnpjp2.so 20000
$ sudo alternatives --install /usr/bin/javac javac /usr/java/jdk1.6.0_45/bin/javac 20000
$ sudo alternatives --install /usr/bin/javac javah /usr/java/jdk1.6.0_45/bin/javah 20000
$ sudo alternatives --install /usr/bin/jar jar /usr/java/jdk1.6.0_45/bin/jar 20000</pre>
</p><p>而根據爬文找到的文章,應該也可以使用像這樣的指令設定 JDK,如:
</p><p><pre class="prettyprint">$ sudo alternatives --set /usr/bin/java java /usr/java/jdk1.6.0_45/jre/bin/java</pre>
</p><p>由於我在 CentOS 6.4 裡也安裝了 java-1.7.0-openjdk-devel,所以我執行了下面這個指令選擇 Oracle JDK 作為預設的 Java:
</p><p><pre class="prettyprint">$ sudo alternatives --config java</pre>
</p><p>但,當我要修改 jar 和 javah 時,卻發現 <code class="prettyprint">/usr/bin/jar</code> 及 <code class="prettyprint">/usr/bin/javah</code> 消失了。
</p><p>最後,我乾脆將 java-1.7.0-openjdk-devel 移除,然後手動建立 <code class="prettyprint">/usr/bin/java</code> 等相關連結。 (悶)
</p><p><pre class="prettyprint">$ ls -l /usr/bin/ja*
lrwxrwxrwx. 1 root root 21 Sep 16 12:51 /usr/bin/jar -> /etc/alternatives/jar
lrwxrwxrwx. 1 root root 27 Sep 16 12:54 /usr/bin/jarsigner -> /etc/alternatives/jarsigner
lrwxrwxrwx. 1 root root 22 Sep 16 12:40 /usr/bin/java -> /etc/alternatives/java
lrwxrwxrwx. 1 root root 23 Sep 16 12:40 /usr/bin/javac -> /etc/alternatives/javac
lrwxrwxrwx. 1 root root 25 Sep 16 12:55 /usr/bin/javadoc -> /etc/alternatives/javadoc
lrwxrwxrwx. 1 root root 23 Sep 16 12:41 /usr/bin/javah -> /etc/alternatives/javah
lrwxrwxrwx. 1 root root 23 Sep 16 12:55 /usr/bin/javap -> /etc/alternatives/javap
lrwxrwxrwx. 1 root root 24 Sep 16 12:37 /usr/bin/javaws -> /etc/alternatives/javaws</pre>
</p><p>其實,<code class="prettyprint">/usr/bin/java</code> 只是一個指向 <code class="prettyprint">/etc/alternatives/java</code> 的連結。而 <code class="prettyprint">/etc/alternatives/java</code> 才是真正指向 Java 的連結。
</p><p><pre class="prettyprint">$ ls -l /etc/alternatives/ja*
lrwxrwxrwx. 1 root root 29 Sep 16 12:51 /etc/alternatives/jar -> /usr/java/jdk1.6.0_45/bin/jar
lrwxrwxrwx. 1 root root 35 Sep 16 12:54 /etc/alternatives/jarsigner -> /usr/java/jdk1.6.0_45/bin/jarsigner
lrwxrwxrwx. 1 root root 34 Sep 16 12:40 /etc/alternatives/java -> /usr/java/jdk1.6.0_45/jre/bin/java
lrwxrwxrwx. 1 root root 31 Sep 16 12:40 /etc/alternatives/javac -> /usr/java/jdk1.6.0_45/bin/javac
lrwxrwxrwx. 1 root root 33 Sep 16 12:55 /etc/alternatives/javadoc -> /usr/java/jdk1.6.0_45/bin/javadoc
lrwxrwxrwx. 1 root root 31 Sep 16 12:41 /etc/alternatives/javah -> /usr/java/jdk1.6.0_45/bin/javah
lrwxrwxrwx. 1 root root 31 Sep 16 12:55 /etc/alternatives/javap -> /usr/java/jdk1.6.0_45/bin/javap
lrwxrwxrwx. 1 root root 36 Sep 16 12:37 /etc/alternatives/javaws -> /usr/java/jdk1.6.0_45/jre/bin/javaws</pre>
</p>
闇月千瞳的部落格http://www.blogger.com/profile/16152087862701279897noreply@blogger.com0tag:blogger.com,1999:blog-10519809.post-66244834813646047752013-09-18T10:21:00.000+08:002013-09-18T10:21:20.835+08:00CentOS 的第三方套件庫<p>感謝洲大 (Kenduest Lee) 告知的資訊,在 CentOS 裡可以將 DAG 及 EPEL 的倉儲匯入,這樣就會有很多的 package 可以用。
</p><p><b>DAG</b>
</p><p>在 <a href="http://wiki.centos.org/">http://wiki.centos.org/</a> 上也能找到《<a href="http://wiki.centos.org/zh-tw/AdditionalResources/Repositories/RPMForge">安裝 RPMforge</a>》這個頁面,根據 Wiki 上的說明,由 Dag 及其他開發人員維護的 RPMforge,為 CentOS 提供超過 5000 個套件。而在《<a href="http://wiki.centos.org/zh-tw/AdditionalResources/Repositories">可供 CentOS 使用的軟件庫</a>》則說明了 RPMforge 有時也被稱為 「DAG 軟件庫」。
</p><p><div class="separator" style="clear: both; text-align: center;"><a href="http://4.bp.blogspot.com/-wYOLWaWu5Ik/UjbFKM6NZvI/AAAAAAAAJHc/DF1o8t3i-qU/s1600/DAG.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://4.bp.blogspot.com/-wYOLWaWu5Ik/UjbFKM6NZvI/AAAAAAAAJHc/DF1o8t3i-qU/s1600/DAG.png" style="width: 720px;" /></a></div>
</p><p>要使用 DAG 庫非常容易,只要安裝 <code class="prettyprint">rpmforge-release</code> 這個套件就可以了。以 64 位元的 CentOS 6.4 為例,執行以下幾個指令即可完成:
</p><p><pre class="prettyprint">$ wget -c http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm
$ sudo rpm --import http://apt.sw.be/RPM-GPG-KEY.dag.txt
$ sudo rpm -K rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm
$ sudo rpm -i rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm</pre>
</p><p><b>EPEL</b>
</p><p>EPEL (Extra Packages for Enterprise Linux) 是為 EL5 及 EL6 重新編譯的 Fedora 套件,在 <a href="http://fedoraproject.org/wiki/EPEL">http://fedoraproject.org/wiki/EPEL</a> 這個頁面可以查看更多資訊。
</p><p><div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/-WuD--NiD4HE/UjbFO1ZNPuI/AAAAAAAAJHk/Xuswm62Ck50/s1600/EPEL.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://2.bp.blogspot.com/-WuD--NiD4HE/UjbFO1ZNPuI/AAAAAAAAJHk/Xuswm62Ck50/s1600/EPEL.png" style="width: 720px;" /></a></div>
</p><p>要使用 EPEL 庫的方法也很簡單,根據 <a href="http://fedoraproject.org/wiki/EPEL">http://fedoraproject.org/wiki/EPEL</a> 這個頁面的說明,只要安裝 <code class="prettyprint">epel-release</code> 這個套件就可以了。也可以參閱《<a href="http://www.thegeekstuff.com/2012/06/enable-epel-repository/">How to Enable EPEL Repository on CentOS for Yum Package Management</a>》這篇文章的說明。
</p><p>以 64 位元的 CentOS 6.4 為例,步驟如下:
</p><p><pre class="prettyprint">$ wget -c http://mirror01.idc.hinet.net/EPEL/6/i386/epel-release-6-8.noarch.rpm
$ sudo rpm --import https://fedoraproject.org/static/0608B895.txt
$ sudo rpm -K epel-release-6-8.noarch.rpm
$ sudo rpm -i epel-release-6-8.noarch.rpm</pre>
</p><p>如果不想繼續使用 DAG 及 EPEL 的來源,只要分別移除 <code class="prettyprint">rpmforge-release</code> 與 <code class="prettyprint">epel-release</code> 就可以了。
</p><p><b>延伸閱讀:</b>
</p><p><ul><li><a href="http://yuanfarn.blogspot.tw/2013/09/centos-64-tmux.html">在 CentOS 6.4 上安裝 tmux</a></li></ul>
</p>
闇月千瞳的部落格http://www.blogger.com/profile/16152087862701279897noreply@blogger.com0