Buy Reviews
Powered by MaxBlogPress  

Archive for the ‘Languages’ Category

Fat Jar Eclipse Plug-In

星期五, 九月 3rd, 2010點閱人數:0次

在伊莉看到有人在問這個外掛的用法,很好奇查了一下http://fjep.sourceforge.net/,原來這是一個Eclipse的外掛用來將Java的專案佈署成一個可執行的jar檔,這個外掛在Eclipse 3.4版的時候已整合到Eclipse了!

ㄚ琪在一些文章裡,也提到佈署的應用程式,像是免費的Java編譯器、組譯器跟Java Development Kits (JDK)傳播Python應用程式等都有提到,沒想到常用的Eclipse的匯出(Export)就有這個功能了,真是太cool!

稍微show一下圖解試作的情形!我將一隻使用jxl.jar來處理Excel的讀寫程式,試著做看看!

先在專案上按Export

2010-09-02_164834

選擇Runnable JAR file之後,定一些規格,ReadingExcel是我的java檔,MyExcel是我的project,text.jar事我要產生的測試檔!

2010-09-02_165038

2010-09-02_165100

好像有一些警告發生,我沒有理會,繼續按OK!

2010-09-02_165128

後來還是有警告,照樣不理會,按OK!

產生了一個test.jar,直接點擊就可以使用,太好了!

Set Color Number

星期四, 九月 2nd, 2010點閱人數:2次

在看過30天打造OS!作業系統自作入門(附光碟)的04-05 指標的應用(二)這節後,ㄚ琪要進展到04-06 設定顏色編號,http://community.osdev.info/?VGA這裡的視訊DA轉換器是本節會用到的資訊:

  • 0x03c6:ピクセルマスクレジスタ(8bit、R/W)
    • bit0-7:DAコンバータが受け取ったカラーコードは、このレジスタの内容でマスクされた後にRGBに変換され、ディスプレイに送られる。
  • 0x03c7:ステータスレジスタ (8bit、R)
    • bit0-1:これが00だったら書き込み中
    • bit2-7:リザーブ
  • 0x03c7:アドレスレジスタ (8bit、W)
    • ここに書き込みアクセスすると、パレット読み込みモードになる
    • bit0-7:パレット番号
  • 0x03c8:アドレスレジスタ (8bit、W)
    • ここに書き込みアクセスすると、パレット書き込みモードになる
    • bit0-7:パレット番号
  • 0x03c9:データレジスタ (8bit、R/W)
    • bit0-7:RGB成分の一つ(0~63)
      • 書き込むときは上位2ビットを0に、読み込むときは上位2bitを0と見なす
  • パレットのアクセスの手順
    • まず一連のアクセス中に割り込みなどが入らないようにする(たとえばCLI)。
    • 0x03c8に設定したいパレット番号を書き込み、続いて、R、G、Bの順に0x03c9に書き込む。もし次のパレットも続けて設定したいのなら、パレット番号の設定を省略して、さらにRGBの順に0x03c9に書き込んでよい。
    • 現在のパレット状態を読み出すときは、まず0x03c7にパレット番号を書き込んで、0x03c9を3回読み出す。これが順にR、G、Bになっている。これももし次のパレットも読み出したいときは、パレット番号の設定を省略してRGBの順に読み出してよい。
    • 最初にCLIした場合は、最後にSTIする。

貼上日文的自行參考,中文就自己買書來看吧!

接著04-07 矩形的繪製處理,透過用#define顏色的代碼,讓我們不用記那麼多的顏色代碼,其餘看程式怎麼做就行了!

04-08 最終的成果長這樣:

2010-09-02_160526

看到這個徒有沒覺得跟WX的畫面很像啊!原來自己DIY OS是這樣的喔!

java for GPS

星期四, 九月 2nd, 2010點閱人數:1次

今天在伊莉看到有人在求問可以讀取GPS接收器的訊號(NMEA)的JAVA程式,剛好看到陳鍾誠的網站上有一篇如何以 Java 取得衛星定位資訊 ?,我覺得重點是這個gps.zip,它包了javax.comm 這個不在標準 JDK 中的函式庫,你要先這樣安裝:

* 將 win32com.dll 檔案複製到 {JDK}\bin 的目錄下。
* 將 javax.comm.properties 檔案複製到 {JDK}\lib 的目錄下。

這樣編譯執行:

javac -classpath comm.jar;. Gps.java
java -classpath comm.jar;. Gps COM4

程式碼是這樣的:

import java.io.*;
import javax.comm.*;

public class Gps {
  public static void main( String[] args) throws Exception {
     receive(args[0]);    // 接收來自指定的 COM port 的衛星訊號。
  }

  // 以下是衛星接收的主要程式。
  public static void receive(String port) throws Exception {
    // 開啟 COM port (在 Java 中稱為 Serial Port)。
    SerialPort serialPort = ( SerialPort ) CommPortIdentifier.getPortIdentifier( port ).open( "GPS", 60 );
    // 設定接收參數,包含頻率為 4800bps, 8個資料位元後接著一個停止位元,沒有同位位元(parity bit)等。
    serialPort.setSerialPortParams( 4800, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE );
    // 將該 Serial Port 當成檔案一樣開啟,然後不斷讀取即可。
    BufferedReader in = new BufferedReader( new InputStreamReader(serialPort.getInputStream()) );
    while (true ) {
      String msg = in.readLine();
      System.out.println(msg);
    }
  }
}

太好用了,存起來一定會用到的!

Finally Begin to import C Language

星期三, 九月 1st, 2010點閱人數:5次

在看過30天打造OS!作業系統自作入門(附光碟)的03-08 邁向32位元模式前的準備工作這節後,ㄚ琪要進展到03-09 終於開始導入C語言,這一節主的一些指令一定要記起來,不然下週書還了,又不知要如何進行了。

首先使用cc1.exe由bootpack.c製作bootpack.gas。

然後使用gas2nask.exe由bootpack.gas製作bootpack.nas。

接著使用nask.exe由bootpack.nas製作bootpack.obj。

並且使用obj2bim.exe由bootpack.obj製作bootpack.bim。

最後使用bim2hrb.exe由bootpack.bim製作bootpack.hrb。

然後使用copy命令,將asmhead.bin與bootpack.hrb連結起來,就成了haribote.sys。

先試著紀錄這幾個部份,再繼續往下一章看!

在04-03向指標挑戰這裡,使用C語言的指標跟組合語言的關係,在宣告的部份:

char *p; /* BYTE用位址的情況 */

short *p;/* WORD用位址的情況 */

int *p;/* DWORD 用位址的情況 */

程式:

void HariMain(void)
{
int i; /* 変数宣言。iという変数は、32ビットの整数型 */
char *p; /* pという変数は、BYTE [...]用の番地 */

for (i = 0xa0000; i <= 0xaffff; i++) {

p = i; /* 番地を代入 */
*p = i & 0x0f;

/* これで write_mem8(i, i & 0x0f); の代わりになる */
}

for (;;) {
io_hlt();
}
}

用這個去make run的話,會發生

bootpack.c:10: warning: assignment makes pointer from integer without a cast

第10行p = i; /* 代入位址 */這是轉型的問題,只要做p = (char *) i;的修正就可以解決問題!

所以專欄二中,有個進階的寫法:

p =(char *)  i; /* 番地を代入 */
*p = i & 0x0f;

可以寫成:

*((char *) i) = i & 0x0f;

而這又跟組合語言的BYTE [i] = i & 0x0f;很像。

專欄3指標跟位址的說明很清楚,我就不重述紀錄了!

Android Change TextView String Color

星期三, 九月 1st, 2010點閱人數:4次

今天終於可以看Google Android SDK 開發範例大全 2這本書的03-03的變更TextView文字顏色 – 引用Drawable顏色常數及背景色這節了,你可以在http://book.51cto.com/art/200907/140343.htm看到簡體版的文章!

這一節提到了幾個新的方法:

public View findViewById (int id),Finds a view that was identified by the id attribute from the XML that was processed in onCreate(Bundle). Returns The view if found or null otherwise.

一開始乍看之下,會覺得課本的TextView跟View很類似,你繼續查看View的連結可以知道TextView繼承自View,基本上從Java來看,貓繼承自動物,如果本來要傳回的動物型別的話,現在改成貓的型別,似乎應該是要有點問題才對,但是好像很多資料敘述好像都沒關係,那我們就繼續看看情形吧!

getBaseContext()是ContextWrapper的一個方法,它會傳回the base context as set by the constructor or setBaseContext,但是我查不到更詳盡的資訊,ContextWrapper大概是『Proxying implementation of Context that simply delegates all of its calls to another Context. Can be subclassed to modify behavior without changing the original Context.』。有些可能搞不太懂得就繼續放著吧,看看以後會不會比較懂。

想用C#寫出可以把浮水印崁入相片

星期二, 八月 31st, 2010點閱人數:5次

這是在伊莉討論區看到的一個問題,這個問題原本是要在照相手機中,將照片放入浮水印的,我覺得這個很很有趣也很實用,因為現在在網路上分享照片的部落格,幾乎都有用浮水印,當然浮水印功能的軟體太多了,不過可以自己寫的話成就感會滿大的!

當然C#不是我的專長,我查Google有[Winform, C#] 圖片格式轉換 及 浮水印 之範例製作,用Microsoft Visual C# 2010 Express實作測試OK!

對於C#生手的我們來說,應該要對程式做更多的註解才是。

Filter是OpenFileDialog的屬性,取得或設定目前的檔名篩選字串,以決定出現在對話方塊中 [另存檔案類型] 或 [檔案類型] 方塊的選項。

ShowDialog()是繼承自 CommonDialog,以預設的擁有人來執行通用對話方塊。

DialogResult.OK是DialogResult的一個列舉型別,他有一些成員:
成員名稱 說明
None 對話方塊傳回 Nothing這表示強制回應 (Modal) 對話方塊繼續執行。
OK 對話方塊的傳回值是 OK (通常由標記為 [確定] 的按鈕傳回)。
Cancel 對話方塊傳回值是 Cancel (通常由標記為 [取消] 的按鈕傳回)。
Abort 對話方塊傳回值是 Abort (通常由標記為 [中止] 的按鈕傳回)。
Retry 對話方塊傳回值是 Retry (通常由標記為 [重試] 的按鈕傳回)。
Ignore 對話方塊傳回值是 Ignore (通常由標記為 [忽略] 的按鈕傳回)。
Yes 對話方塊傳回值是 Yes (通常由標記為 [是] 的按鈕傳回)。
No 對話方塊傳回值是 No (通常由標記為 [否] 的按鈕傳回)。

ImageLocation,取得或設定要在 PictureBox 中顯示之影像的路徑或 URL。

Image,取得或設定 PictureBox 顯示的影像。

new Bitmap(pictureBox1.Image)是Bitmap (Image)Bitmap 建構函式之一種。

new StringFormat(),使用指定的 StringFormatFlags 列舉型別,初始化新的 StringFormat 物件。Alignment,StringFormat 屬性,取得或設定字串的水平對齊方式。

FormatFlags,StringFormat 屬性,取得或設定含有格式資訊的 StringFormatFlags 列舉型別。

Graphics.FromImage(OriginalImage),使用 FromImage 方法,從影像建立 Graphics 物件。

DrawString(sWaterMark, new Font(“新細明體”, FontSize, FontStyle.Bold), new SolidBrush(Color.FromArgb(80, 255, 255, 255)), x, y, DrawFormat);,使用DrawString(String, Font, Brush, Single, Single, StringFormat)的多載函式使用指定的 BrushFont 物件,將指定的文字字串繪製於指定的位置。

Dispose(),釋放這個 Graphics 所使用的所有資源。

這樣看起來就差不多了!

Make a True IPL

星期一, 八月 30th, 2010點閱人數:3次

在看過30天打造OS!作業系統自作入門(附光碟)的02-04 針對今後的需要而導入Makefile這節後,ㄚ琪要進展到03-01 製作真正的IPL,這一節主要針對這段程式碼做講解:

; ディスクを読む

MOV        AX,0×0820
MOV        ES,AX
MOV        CH,0            ; シリンダ0
MOV        DH,0            ; ヘッド0
MOV        CL,2            ; セクタ2

MOV        AH,0×02            ; AH=0×02 : ディスク読み込み
MOV        AL,1            ; 1セクタ
MOV        BX,0
MOV        DL,0×00            ; Aドライブ
INT        0×13            ; ディスクBIOS呼び出し
JC        error

也提到使用http://community.osdev.info/?%28AT%29BIOS提到的BIOS的指令。

算是很詳細,只要照著做就可以開機了!

Import Makefile for the Future Needs

星期五, 八月 27th, 2010點閱人數:0次

在看過30天打造OS!作業系統自作入門(附光碟)的02-03 整理開機磁區的製作程序這節後,ㄚ琪要進展到02-04 針對今後的需要而導入Makefile,這一節感覺就是為了以後寫C用的,因為我們都知道Makefile是一個聰明的工具,雖然ㄚ琪尚未搞得很清楚,但是要寫大型程式,這個Makefile這個工具是一定要熟悉的!

而且很沒想到Makefile竟然就像批次檔一樣,可以把組合語言的程式編譯到img檔,這可cool了!

Arrange the process of the Boot Sector

星期五, 八月 27th, 2010點閱人數:2次

在看過30天打造OS!作業系統自作入門(附光碟)的02-02 加油,再繼續加油這節後,ㄚ琪終於進展到02-03 整理開機磁區的製作程序,這一節我歸納的重點就是雙擊!cons之後,執行asm->makeimg->run三個命令,等一下,因為這是課本的方式,但是因為ㄚ琪已改用Bochs,所以執行完makeimg之後,請修改bochsrc-dos.bxrc的floppya: 1_44=d:/os/helloos.img, status=inserted這一行參數,以適合這次的開機執行模擬。

GAE Python Rewrite Blogger post views

星期四, 八月 26th, 2010點閱人數:18次

記得上個月底,ㄚ琪很想Blogger 可以有WP-PostRating和WP-PostViews這樣的功能ㄚ琪還在沾沾自喜安裝了Blogger 點閱次數測試成功,但是你絕對想不到,它永遠都是1,不管你怎麼給它點,點文章進去,都是1,這個1搞得我有點火大了 ,還好akiko有提醒我,不然我永遠不會知道這個事實。看來求人不如求己,ㄚ琪這兩三天只好抱病來寫Blogger post views,Google了很久,發現有一個很大的問題就是,這一類的程式常常會因為程式主機不再服務,而無法使用顯示文章閱覽人次的功能。另一個問題是Blogger的Template還真有夠難搞的,它偏偏就要跟人家的搞不一樣的系統。

第一個問題還滿好解決的,雖然對我來說也不盡然,但是只要你有主機,放支程式進去就可以跑了,你可以參考Individual Post Views Counter For Blogger – Using Your Own Web Host,用PHP寫的程式,來實現文章閱覽人次的功能,但是我想會使用Blogger的人應該沒有自己的主機吧!如果放在免費的主機上面,或許也行得通,但是什麼時候會陣亡不清楚。好吧!我們是用Blogger的老闆是Google,那麼用Google的主機好了,反正如果Google倒了的話,那麼Blogger跟主機就一齊不能用,那問題就不大,雖然問題還是很大,因為如果你寫了一大坨的文章,發現Google倒了的話,那會事情很大條的,所以要有危安意識,隨時記得要備份文章。

好了廢話一堆,Google的主機也算很難搞,沒有PHP程式可以放,只有Python跟Java可放,這是用Google 應用服務引擎來實現的,還好ㄚ琪以前有看過書Google 應用服務引擎,自認為不是很難,所以就捲起袖子來做了,試了很久,終於有眉目了,當然Tony的GAE Java Blogger PageView count,給了我很大的幫助,當然他有暗藏一些步數,沒有寫出來,而且也是用Java做的,我想我已經用Python試了一會兒了,不想再用Java來做,雖然也是可以,而且可以練SCJP的功力,不過我想Google是很偏好Python的,所以如果以後想去Google上班,會Python應該不可少。當然你要完成這個工作,你還得下載Python 專用的 Google 應用服務引擎 SDK

好了,這也不是重點,最重點就是Blogger 難搞的Template要應付了,我從Tony的<data:post.id/>、

<b:if cond='data:blog.pageType == "item"'>、expr:src

這幾個方向試了很久,發現裡面還有一些眉眉角角的,研究自己的Template終於搞出來了,哈哈!

你一定很想知道ㄚ琪是怎麼完成這個曠世巨作的吧,就讓我來揭開這個神秘面紗吧!

<h3 class=’post-title entry-title’>

<b:if cond=’data:post.link’>

<a expr:href=’data:post.link’><data:post.title/></a>

<b:else/>

<b:if cond=’data:post.url’>

<a expr:href=’data:post.url’><data:post.title/></a>

<b:else/>

<data:post.title/>

</b:if>

</b:if>

</h3>

你在Templeate中注意到這幾行,然後在後面加上

<b:if cond=’data:blog.pageType == &quot;item&quot;’>

psot views:<script expr:src=’&quot;http://tw-counter.appspot.com/?b=1664225421371581189&amp;p=&quot; + data:post.id + &quot;&amp;t=&quot; + data:post.title + &quot;&amp;y=1&quot;’/>

<b:else/>

psot views:<script expr:src=’&quot;http://tw-counter.appspot.com/?b=1664225421371581189&amp;p=&quot; + data:post.id + &quot;&amp;t=&quot; + data:post.title + &quot;&amp;y=0&quot;’/>

</b:if>

ㄚ琪研發的這幾行代碼,就是&quot;、+、&amp;這幾個符號讓我搞了大半天的,好了,完工!

對了,你絕對不可以複製這幾行到你的Template中喔,因為這個1664225421371581189是我的BlogID,你copy了一樣功能無法用,你改成你的BlogID也無法用,因為怕Google關掉這免費主機,只因你的龐大的流量造成的。

那怎麼辦?,好吧,只要你幫ㄚ琪推薦Fun Taiwan,將http://funtaiwan.achi.idv.tw放到你的Blog中,並且訂閱Fun Taiwan的RSS,在ㄚ琪又要送飲料囉!回覆你放我的連結處,以及你的BlogID,我就可以幫你開通使用這個功能,現在到8/6止還可以抽獎送飲料喔,歡迎你來使用,這個功能的Demo網站:http://funtaiwan.achi.idv.tw