2009年11月17日 星期二

[Linux] 設定 Objective-C 開發環境及教學資料 @ Ubuntu 9.10

差不多該學學 Objective-C 了,手邊也有 iphone 及相關的環境可開發,剩下只有懶散的心情要整頓。至於什麼是 Objective-C ,可以先看看維基百科的介紹,我覺得還滿詳盡的,甚至英文版還有介紹從 C/C++ 跨到 Objective-C 的範例程式,真的就乾心哩,看程式比看英文快上十倍啊。



跟 iphone 開發相關的網頁介紹:



其他相關的教學



接著,就只剩環境架設的部分,


在 Ubuntu 9.10 最簡化版:



  1. 安裝相關套件

    • # sudo apt-get install gnustep-devel

    • The following extra packages will be installed:
        gnustep-back-common gnustep-back0.16 gnustep-back0.16-art gnustep-base-doc gnustep-core-devel gnustep-core-doc gnustep-gpbs gnustep-gui-common
        gnustep-gui-doc gnustep-gui-runtime gnustep-make-doc gorm.app libaspell-dev libaudiofile-dev libgif-dev libgnustep-gui-dev libgnustep-gui0.16
        libjpeg62-dev libpng12-dev librenaissance0 librenaissance0-dev libtiff4-dev libtiffxx0c2 projectcenter.app projectmanager.app zlib1g-dev



  2. 安裝完就能用 gcc 進行編譯囉

    • # gcc -lgnustep-base -lpthread -lobjc -lm -I/usr/local/include/GNUstep -I/usr/include/GNUstep source.m -o source_run



  3. 參考資料



使用 Makefile 的教學:



  1. 建立 GNUmakefile

    • GNUSTEP_MAKEFILES = /usr/share/GNUstep/Makefiles/

      include $(GNUSTEP_MAKEFILES)/common.make
      TOOL_NAME = LogTest
      LogTest_OBJC_FILES = source.m
      include $(GNUSTEP_MAKEFILES)/tool.make

    • 最上頭那段是我自己加的,網路上大部分的文件都是使用 shell 來設置環境變數

      • C shell

        • # source <GNUstep root>/System/Library/Makefiles/GNUstep.csh



      • Bourne shell

        • # . <GNUstep root>/System/Library/Makefiles/GNUstep.sh







  2. 建立 source.m


    • #include <stdio.h>

      /*
      * The next #include line is generally present in all Objective-C
      * source files that use GNUstep.  The Foundation.h header file
      * includes all the other standard header files you need.
      */
      #include <Foundation/Foundation.h>  

      /*
      * Declare the Test class that implements the class method (classStringValue).
      */
      @interface Test
      + (const char *) classStringValue;
      @end

      /*
      * Define the Test class and the class method (classStringValue).
      */
      @implementation Test
      + (const char *) classStringValue;
      {
        return "This is the string value of the Test class";
      }
      @end

      /*
      * The main() function: pass a message to the Test class
      * and print the returned string.
      */
      int main(void)
      {
        printf("%s\n", [Test classStringValue]);
        return 0;
      }



  3. 編譯與測試

    • # mkdir test ; cd test ;

    • # vim GNUmakefile (內容如上)

    • # vim source.m (內容如上)

    • # make ;

    • # ./obj/LogTest


      • 輸出結果:This is the string value of the Test class





  4. 參考資料



 



Learn Objective-C on Ubuntu



2009年11月13日 星期五

[Linux] 安裝 Eclipse & Subclipse Plugin (SVN Client) @ Ubuntu 9.10

最近剛重灌電腦,上次安裝失敗,這次就好好順便紀錄一下安裝過程。


安裝環境:Ubuntu 9.10 Desktop i386



  1. 安裝 Eclipse

    • # sudo apt-get install eclipse



  2. 安裝 Subclipse

    • 開起 eclipse

    • [Help] -> [Install New Software] 點選 Add


      • Name : subclipse

      • Locatioon : http://subclipse.tigris.org/update



    • 點選 Subclipse Plugin -> Subclipse

    • 接著就 Next 進行囉 (記得版權那邊要勾一下才能按 Finish 安裝喔)



  3. 設定 Eclipse

    • [Window]->[Preferences]->[Team]->[SVN]

    • 此時會蹦出錯誤訊號窗

      • Failed to load JavaHL Library.
        There are the errors that were encountered:
        no libsunjavahl-1 in java.library.path
        no svnjavahl-1 in java.library.path
        no svnjavahl in java.library.path
        java.library.path = /usr/lib/jvm/java-6-openjdk/jre/lib/i386/cclient:/usr/lib/lib/jvm/java-6-openjdk/jre/lib/i386:......:/usr/lib/jni:/usr/lib

      • 這是因為一開始預設是用 JavaHL 關係



    • 解決方式有兩種

      • 第一種:在剛剛的頁面上,有 SVN interface 選項,有 JavaHL(JNI) 跟 JavaSVN(Pure  Java) 兩種可選,切換成 JavaSVN 就行了!

      • 第二種:安裝 JavaHL

        • # sudo apt-get install libsvn-java

        • 只是我安裝完仍有看到錯誤訊息

          • Failed to load JavaHL Library.
            There are ther errors that were encountered:
            no libsvnjavahl-1 in java.library.path
            Incompatible JavaHL library loaded, 1.3.x or later required.



        • 然而自己就很懶得再繼續解下去,就略過這個解法,改用 JavaSVN(Pure  Java) 啦







  4. 測試

    • [File]->[New]->[Other]->[SVN]->[Checkout Projects from SVN]->[Create a new repository location]

      • 若預設就在這個選項,但又不能按 Next ,就先選另一個選項再切回來就可以選 Next 啦



    • 剩下的就只是選你要 checkout 的目錄囉,選完按 Finish 就能跑了




以上純粹只是在 Linux 上使用安裝 Subclipse plugin for Eclipse 而已,並不是要開發 Java 類的程式,因此僅利用預設的環境。


2009年11月6日 星期五

使用 find regex 與 xargs 將特定檔案打包壓縮

通常使用 find . -name "*.txt" 已經很夠用了,但如果要多個附檔名時卻又有點困擾。


這時可以使用 find . -regex 的方式,它是接受正規表示法的。但須留意用法,原先 find . -name "*.txt" 需更新成 find . -regex ".*\.txt",原理部份請參考 regular expression 。


處理多個副檔名的範例:


# find . -regex ".*\.jpg\|.*\.txt"


如果要順便打包壓縮:


# find. -regex ".*\.jpg\|.*\.txt" | xargs tar -rvf test.tgz


製作 Motion JPEG (Mjpeg) 影片 - 將連續的照片串成影片

如果有一連串稍稍變化的照片,好比如 100 張連續變化的照片,像運動比賽,甚至街景的變化等,有時就想把它弄成影片來玩玩。這時,若那些照片都是 jpeg ,那就有一些現成的工具可以拿來用囉。


關於 Motion JPEG 可以參考這些資訊:



在網路上隨手一查,不少可用的方式



以下在 Ubuntu 的環境先試了 mjpegtool



  • jpeg2yuv −f 25 −I p −j image%05d.jpg > result.yuv

  • jpeg2yuv −b 1 −f 25 −I p −n 60 −j image*.jpg | yuv2lav −o stream_without_sound.avi


發現它會要求 jpeg 的 width 要 16 的倍數



  • **ERROR: [jpeg2yuv] The image width isn't a multiple of 16, rescale the image


所以最後我用了 mencoder



  • mencoder mf://1.jpg,2.jpg,3.jpg -mf w=800:h=600:fps=1:type=jpeg -ovc copy -o out.avi

  • mencoder mf://%.jpg -mf w=800:h=600:fps=1:type=jpeg -ovc copy -o out.avi


其中 -ovc 和 -oac 分別代表要如何處理視訊跟聲音的動作,此例為 copy 不進行轉換。後來發現,原來 mencoder 還可以把網路上的串流(mms://)給轉換成影片呢!



  • mencoder mms://www.example.com/test.wmv -ovc copy -oac copy -o 輸出檔名

  • mms 的部份也可以接受 asf , wma 等格式,但這邊我就沒試,我主要是要玩 mjpeg 囉


參考資料



Facebook SPAM Quiz !

雖然這陣子開發一些簡單的 Facebook 的 Quiz 程式,但自己真的沒用玩過幾個 Quiz ,心血來潮是了兩個別人推薦的邀請,一玩下去才發現!開始有 SPAM 的味道了。SPAM就是擾人的廣告性的事物。


那些 Quiz 通常在第二頁列出制式的官方邀請函介面,但骨子裡卻已經幫你送出邀請函!若 Facebook API 等架構不變動的話,再不用多久,可能 SPAM Quiz 滿天飛,接下來就是沒人想再玩 Quiz 了。