2008年9月28日 星期日

First 接觸 Android

因應 google要上市了,趕快來接觸一下Android
進入Android的官網,先download再說直趨至 Download the SDK
二件事,第一件就是先下載SDK 選擇了 Windows版本
目前的版本是
Windows android-sdk-windows-1.0_r1.zip

接著就是 使用用熟悉的IDE eclipse裝置 ADT的plug-in
筆者使用的是Eclipse 3.4 (Ganymede),直接透過 Software Updates.... 來做安裝
下載好SDK,直接解壓放在適合的目錄,SDK內有三個目錄
tools/, samples/, 和 others
把Path指向tools,以方便可以 console上直接呼叫執行程式
接著設定eclipse對ADT的位置做設定
eclipse => Windows => Preferences => Android 設定剛剛解壓縮SDK的位置
接著在eclipse 點new就可以看到Android的選項
選擇Android Project,即會出現如下























接著輸入以下資訊
Project Name 專案名稱
Package Name 即java裡的package name
Activity Name 即java的 class name
Application Name 程式標
按下Finish後,即產生如下程式碼(HelloAndroid.java/R.java)及設定檔(AndroidManifest.xml)













先打開HelloAndroid.java













接著加上一段TextView在程式裡


2008年9月25日 星期四

Enterprise IDE Plugin for Flex Builder Public Free Beta

[原文出處]http://www.mail-archive.com/flexcoders@yahoogroups.com/msg102327.html

Flex企業級開發Plug-In

The Enterprise IDE Plugin ™ is an architect and developer productivity suite for Adobe(R) Flex (R) Builder ™ 3 designed to simplify and aid the development of Enterprise Flex Applications using Flex Builder 3. The Enterprise IDE Plugin is immediately available in a public, free time-expiring beta release. It includes new tools for code navigation, code generation and code documentation, as well as general tools for increased Flex developer and architect productivity, and provides built-in support for major third party Flex and ActionScript open source frameworks. For more information and installation instructions, please visit http://www.idefactory.com

Enterprise IDE Features: ------------------------

*Code Navigation Tools

- Enterprise IDE Perspective.

- Flex package explorer view.

- Flex hierarchy explorer view.

- Flex code metrics explorer.

- Flex code dependency explorer.

- Cairngorm explorer view.

* Code Generation Tools

- Enhanced AS3, MXML, and Cairngorm wizards.

- FlexUnit test and test suite generators (for project or class).

- AS3 code generation from UML Model

- Cairngorm end-to-end class generators for REST, Web Service (WSDL) and Remoting services.

- Support for multiple Cairngorm versions.

- Generation of getter and setters for existing AS3 variables.

- Java Value Object generation from Cairngorm VOs.

- Generation of interactive Flex Cairngorm service test application and graphical FlexUnit test runner.

* General Tools

- e4x editor and expression builder.

- AS3 and MXML code formatters (for project or source file).

- Customizable with Eclipse Enterprise Preference page.

- AS3 and MXML source code TODO and FIXME tasks.

- Help integrated with Eclipse Help System.

- Flex RSS Feed Reader

* Code Documentation Tools

- UML Model generation from Flex project AS3 classes.

- Single click ASDoc documentation generation.

Luis Lejter IDE Factory ™ L.L.C. http://www.idefactory.com "The Source for Enterprise Flex Development Tools"

2008年9月20日 星期六

See flash10,flex4,AIR1.5,Fxg,Thermo,Degrafa

I usually avoid any online video presentations that last longer than 15 minutes (my attention span limit), but in this case, I made an exception. This one hour and ten minute video is loaded with some VERY good content including information and demos of Flash 10, Flex 4, AIR 1.5, FXG / MXMLG, Thermo and the announcement of the collaboration of Degrafa and Adobe.

The video is the keynote from last week’s 360Flex event by Mark Anders, Adobe’s senior principal scientist.

So, gather your kids, make some popcorn, sit back and enjoy. You will also find this and other 360Flex sessions on Adobe Media Player:

If you feel the player screen too small,maybe you can link below link

http://link.brightcove.com/services/player/bcpid1596744118?bctid=1741161343

2008年9月18日 星期四

BlazeDS Introduction in remote object of FLEX3 (用英文打了一篇,文法或字有打錯請指教)

For flex,we should retrieve data from the dababase,but in flex framework.It has no function to retrieve directly.We should use some kind of component to achieve that.Because my familiar computer language is java,so I will introduce java data comunication for retrieve data.Here we use BlazeDS.BlazeDS is a j2ee liberary for how to convert the Java data(or said Java Object) to AMF.

And BlazeDS is the only function that I only know how to retrieve the data from java.Next I will introduce how We need to add to the j2ee server to enable the BlazeDS work.First we should download BlazeDS archive,the link is here ,when we have downloaded the file ,please upzip it,we will get two file,one is a .html file,the other is a .war.We all knew that a .war is compression file so we can upzip the war file,then we can see the web application structure.So the need is the three things(1.web.xml2.flex folder 3.lib folder).


We can see a fragement in the web.xml







The BlazeDS must reading the services-config.xml
So we go to the services-config.xml then we can see the below fragement






Because we use RemoteObject component,so we look the remoting-config.xml






Then we should add the tag destination after default-channels

In the destination tag,we must define id ,and name the id attribute,then put the child node properties and its child node source.In the source node,we will put our java class with its package name.














Below is the java method



Below is its method named sendMail,then we can use RemoteObject to call sendMail method of java side.



and use the RemoteObject(flex) instance to call java method(sendMail)



So our RemoteObject(flex) can call the java method successfully.

2008年9月14日 星期日

Flex 初認識

在寫Web Application時為了求畫面上的統暢度及User Friendly,
總是要找了一堆現成的JavaScript元件來逹到需求,也就是現在時下最流行的WEB 2.0,
又或稱Ajax技術(或稱觀念)。在使用這些Ajax套件時,必需的條件就是要懂得JavaScript、CSS、及DOM的關念。其中最不好學的應該就屬JavaScript,由於JavaScript所使用的語法太過彈性,反而在各家Liberary上所使用的方式有了各自的特色。在專案一開始時,最好就選定單一種Liberary去做為達到Ajac的元作,若在一個專案使用了多種的Liberary(通常是該Liberary未提供所需之元件時),必會造成後續在寫時語法上的混淆不清,或者是該Liberary與另一個Liberary相衝突的情況(jQuery與prototype.js有了換實體名的解決方式),再者敝人在開發過程中,對於JavaScript的debug,確實有不好debug的情況,debug過程現在都是依賴FireBug,再不然就是使用最常使用的alert在每一行程去埋打印程式碼,打印程式碼確實可以清楚的trace到程式中實際運作的狀況,但對於要拿掉打印程式,卻又要再花上一大段工,很花時間。再者,寫WebApplication還有一個較難解決的問題就是各家Browser百家爭鳴,其主要就是分為$M及Mozila這二大陣營(當然也有其它的,筆者較少使用),在Dom的定義上及JavaScript元件的定義上難以統一,使用最常遇到的一件事就是,程式明明在IE跑起來是正常的,但當使用FireFox時,就會出現不Work的情況。遇這種情況還需多加上判斷Browser的程式碼去跑二種版,若再加上Ajax所提供出來的元作只支持單一Browser時,就只能考慮系統會是多數使用者的環境下去開發。難道沒有一種比較好的解決方案來讓開發可更一致性,找問題可更容易??
在java中提出一毎概念Write Once Run Anywhere,這個概其最主的意圖就是希望可以透過編寫單一種程式碼的情況下,可在不同的平台上去執行,而不需為了每種平台單獨的去寫各平台適用的程式碼。當java提出這種概念時,真是讓程式設計師大為感動,不再需要去考慮平台的問題。
目前我們可以看到在一個聲光效果完整的WebApplication或網站上,一定是會有Flash的元素在上面的,flash確實是增加網站讓使用者更容易親近的感受。所對於網站要能成功,除了畫面上有了豐富的圖片及美觀的排版外,再加上了flah的的動畫,勢必能讓一個網站更吸引人。
我們都知道Ajax是在2005時開始發光,在這個Ajax名詞出現後,開始有了有量Ajax解決方案,大部份是需要寫JavaScript的,當然也有很多解決方案把JavaScript包在應用下面,讓使用可以不用去編寫JavaScript,但對於底層來說仍然是以JavaScript運作,這樣仍會遇到Browser不相容的問題發生。基於flash在網站上應用的成功,Marcomedia(現己被Adobe收購)找到了一個進入Ajax的機會點,於是發展了flex這個的一個framework,把flash做成一個個的單個元件,讓程式編寫者透過編寫WebApplication的概念來寫flash,並把flash變成可與使用者互動的元件。於是Flex就在這種情境下誕生,在flash player的運作下就可以達到java所提出的觀念WORA,程師設計師只要在編寫只在考慮flash的內在環境,即可只要照著Flex定義的方式去編寫自己想要的程式碼,即在各種不同的平台上執行(不論Browser或OS)。
依上方的說明各位應該就可以了解筆者一直提到flash,這裡不是要講的是Flex嗎??怎麼會提到flash呢??其實Flex Framework主要包含了二個主要的元素 A.ActionScript B.MXML。我們知道flash中有一個程式語言ActionScript,這個語言主要就是來控制flash上的圖形元件與使用者產生互動的一個程式語言。然而整個Flex Framework實際在底層運作的就是ActionScript,Flex Framework是open source的,當我們去看Flex安裝目錄時我們可以發現裡頭是有一堆帶 .as附檔名的檔案,所以可以了解到對Flex 而言最終所生成的執行內容就是flash檔案。那麼什麼又是MXML呢? 從字義上我們可以看到這個字是由M(Marcomedia) +XML這樣組合而成,所以MXML說穿了其實就是一份XML,所以我們在寫MXML時,就一定要符合XML的格式才行。
那麼對於要學習Flex會有又要造成程式設計師要花時間再多學一種語言呢?筆者認為學新的程式語言勢必是一定要花時間的,但學完這個程式語言對於後續要花的時間,及這個應用在未來十年二十年的變化大不不大又是另一個考量。必竟每一種技術在當時的時空環境下是有它的一定的優勢,又或每一種技術到了一定時間點時,會有面臨逃汰的情況(e.g.紅及一時的Applet,現應該較少網站上看的到用Applet寫出的程式,未來是不是有可能面臨洮汰?這個要讓時間來考驗著Applet),筆者認為flash這個技術在未來的十年或二十年在網站上應該是會伴演著變重要的角色(以增加網站的互動的立場而言)。以筆者學習Flex及應用的經驗,認為學習Flex只要建立在二個基礎上應該就可以很快的把Flex學起來,A.OO的程式基礎 B.HTML的基礎,方才提到ActionScript對應的就是A的部份,而MXML對應就是B的部份,如果有了這二個基本的概念的程式設計師應該不難在一個禮拜就把Flex學習完成(Adobe也是提供一個線上學習,目前只有到第三天,後面的課程應該蠻快就會補上)。再來就是工具的學習使用,Flex是opensource,所以對於要使用這個工具來編寫,其實是只要使用文字編輯器(notepad,utraleditor,editplus etc.)都可以來編寫Flex程式,只不過若要這麼寫,肯定要花上非常多的時間在看API文件,所以Flex提供了FlexBuilder這個工具,這個工具在Marcomedia時是架構在DreamWeavae等平台上,到了Adobe時代己搬到eclipse平台,對於工具的學習來說,只要對於這平台有概念者,就可很快的使用FlexBuilder。
以上對Flex做個簡單初認識介紹,後續再開始來介紹Flex在開發的內容。筆者盡可所寫的內容不要和一般舫間所介紹的內容相同(大部份的介紹可能會從Flex的歷史介紹,介紹完就帶一個HelloWorld等)。但若若真內容相同或無法滿足你的需求,但然直接前往ADOBE官網會是最完整的內容。

2008年9月10日 星期三

build出s3c2410x的 uboot.bin

Introduction就不提了
因為手中的板子是samsung 2410x的板子
所以就來build個可放在2410上的 bootloader
因為2410是 arm的processor所以首先將cross compiler裝起來
先至gnu arm 下載 看是喜歡自己重新build或是 直接使用己build 好的binary 包
依個人需求下載囉
下載好將path做個設定
令/etc/profile
多加一行 export PATH=$PATH:/usr/local/gnuarm-3.4.3/bin
以上為個人的設定,請依自己放置的路徑放置
方便可不用再每次都要設定
設好後測試一下,重新登入後,在console試一下
[root@localhost local]# arm-elf-gcc -v
Reading specs from /usr/local/gnuarm-3.4.3/bin/../lib/gcc/arm-elf/3.4.3/specs
Configured with: ../gcc-3.4.3/configure --target=arm-elf --prefix=/srv/shared/gnuarm/gnuarm-3.4.3 --enable-interwork --enable-multilib --with-newlib --with-headers=../newlib-1.12.0/newlib/libc/include --enable-languages=c,c++,java --disable-libgcj
Thread model: single
gcc version 3.4.3
這個部份很重要哦 先記一下我的compiler 是要用到是
arm-elf-gcc
若在cygwin環境下的朋友,請要 至 bin下確認 gcc的正確名字是什麼
我記在cygwin下的cross-compiler不是用這個名字 等會介紹 為什麼要記住這個部份
ok看到版本號碼 cross-compiler 己經完成
接著至sourceforge下載 uboot 現在的版本是 1.1.6版
下載後將它解壓縮 tar -jxvf u-boot-1.1.6.tar.bz2
進入u-boot cd u-boot-1.1.6
剛才有提到我的cross-compiler是
arm-elf-gcc
所以在Makefile我們需設定我的 CROSS_COMPILE
arm-elf- 沒錯就只要設到這裡就好
請依照Makefile內的內容做設定
(在原本的
CROSS_COMPILE後接的可能是 arm-linux-)
因為我們要biuld的是s3c2410x的bootloader
所以我們要請make指令幫我們做個configure
make smdk2410_config (i.e.若是其它的processor即make xxxx_config)
接著
再下
make
當我們看到了
arm-elf-objcopy --gap-fill=0xff -O binary u-boot u-boot.bin
這行字時,ok 我們bootloader就完成了
u-boot u-boot.bin


U-Boot簡介

 

Das U-boot (The Universal Boot Loader), 最早是由Magnus Damm2000年時加入sourceforge的一個open source project: PPCBoot所開始的, 2002年的時候這個project支援了4ARMprocessor, 因此改名為Das U-Boot, 目前的project leaderWolfgang Denk

Bootloader (有時也可以叫作boot monitor) 是一小段硬體power on之後執行的程式碼, 我想在PC上面的linux大家應該對於lilo以及Grub非常熟悉, 這類bootloader的動作不外乎是等待BIOS作完硬體初始化動作後(包含CPU, memory controller...等等), 負責將linux kernel載入執行以及傳遞kernel參數給kernel image。 但是在大部份Embedded System中並不會有BIOS, 而且Embedded System中的processor通常不是像PC般的具有一般性, 彼此間的差異有時十分 之大, 因此Embedded Systembootloader也相對比PCbootloader具有較複雜的行為。

簡 單來說, 一的Embedded System bootloader至少應該完成

(1)初始化硬體: 尤其是processormemory controller

(2)載入kernel image與執行kernel (傳遞kernel參數也是一項, 但是我覺得不一定需要,因為linux kernel的參數可以在build kernel的階段予以設定, 我想Embedded linux應該比較不需要不同的 執行參數選擇)

另 外, 一些開發時期的功能也 是bootloader的附加功能, 譬如讀寫特定記憶體的 內容, 經由其他媒介載入新的image (例如透過網路利用TFTP或是CompactFlash card), 還有從RAM寫回flash的方式。

U-boot目前支援許多不同的processor, 包含PowerPC, ARM, XScale, MIPS, Coldfire, NIOS, Microblazex86, u-bootsource根目 錄下的cpu目錄可以找到你使用的 版本支援的processor。下面是U-Boot-1.1.6cpu目錄

list-cup
U-boot支援許多的開發板, 關於硬體相關的設定檔 存放在u-boot-version/include/configs的目錄下, 下面是1.1.6所支援的硬體

list-configs

如 果你使用的硬體有被支援, 你只要在U-Boot source的根目錄執行

 

make mrproper

make _config 為 你的開 發板名稱

 

U-Boot會自動將設定檔的compile條件設定好, 讓我們以ARM xscale的開發板lubbock為例。在lubbock.h, 首先設定cpu typeboard type

 

#define CONFIG_PXA250 1 /* This is an PXA250 CPU */

#define CONFIG_LUBBOCK 1 /* on an LUBBOCK Board */

 

這 裡設定了你的CPUxscale pxa250以及設定了board typelubbock。這些設定主要影響了 你的硬體連接設定, 舉例來說pxa250具有MMC interface controller, lubbock的板子上也有使用MMC interface, 因此若你會看到在u-boot-1.1.1/cpu/pxa下面的mmc.c中有這麼一段

 

#ifdef CONFIG_LUBBOCK

set_GPIO_mode( GPIO6_MMCCLK_MD );

set_GPIO_mode( GPIO8_MMCCS0_MD );

#endif

 

lubbock使用GPIO 68來連接MMC, 所以要設其相對的GAFR (GPIO Alternate Function Register)68GPIOalternate function, 所以如果你是非標準的 開發板, 相對的GPIO設定要加入相關的值才 能使得你的硬體正常運作。至於GPIO的 相關設定方式可能就 要與你的硬體人員研究一下, 而且我的硬體知識弱到 不行, 因此就不多加著墨啦。

另 外你的記憶體設定記得要設定正確 (假設你的配置與其他開 發板不同), lubbock.h裏面配置如下

 

#define CONFIG_NR_DRAM_BANKS 4 /* we have 2 banks of DRAM */

#define PHYS_SDRAM_1 0xa0000000 /* SDRAM Bank #1 */

#define PHYS_SDRAM_1_SIZE 0x04000000 /* 64 MB */

#define PHYS_SDRAM_2 0xa4000000 /* SDRAM Bank #2 */

#define PHYS_SDRAM_2_SIZE 0x00000000 /* 0 MB */

#define PHYS_SDRAM_3 0xa8000000 /* SDRAM Bank #3 */

#define PHYS_SDRAM_3_SIZE 0x00000000 /* 0 MB */

#define PHYS_SDRAM_4 0xac000000 /* SDRAM Bank #4 */

#define PHYS_SDRAM_4_SIZE 0x00000000 /* 0 MB */

 

#define PHYS_FLASH_1 0x00000000 /* Flash Bank #1 */

#define PHYS_FLASH_2 0x04000000 /* Flash Bank #2 */

#define PHYS_FLASH_SIZE 0x02000000 /* 32 MB */

#define PHYS_FLASH_BANK_SIZE 0x02000000 /* 32 MB Banks */

#define PHYS_FLASH_SECT_SIZE 0x00040000 /* 256 KB sectors (x2) */

 

#define CFG_DRAM_BASE 0xa0000000

#define CFG_DRAM_SIZE 0x04000000

 

#define CFG_FLASH_BASE PHYS_FLASH_1

 

若 是一切設定OK, 直接進行make的動作就可以產生出一 個U-Boot image (當然你要有相對映的cross-compiler), 接下來你便可以利用jtag將你的image燒進你的flash中啦 (或是任何可以寫入flash的設備)

GWT 學習 I

到http://code.google.com/webtoolkit/

首先看到Build AJAX apps in the Java language這段文字
是我熟悉的一塊,看起應該不會太難上手

即然還不是很了解什麼東西
看了一堆說明我想應該還不不懂是什麼東西
直直衝往Get Started Guide吧 (做中學,學中做 是我最愛的學習方式)
http://code.google.com/webtoolkit/gettingstarted.html#Install

在解開的目錄下有一個 command file
打開console 直接輸入 applicationCreator com.leon456.client.Test
開始發生了不可思議的事了
經由這個指令 發生以下的事

Created directory C:\Work\RES\gwt-windows-1.2.22\src
Created directory C:\Work\RES\gwt-windows-1.2.22\src\com\leon456
Created directory C:\Work\RES\gwt-windows-1.2.22\src\com\leon456\client
Created directory C:\Work\RES\gwt-windows-1.2.22\src\com\leon456\public
Created file C:\Work\RES\gwt-windows-1.2.22\src\com\leon456\Test.gwt.xml
Created file C:\Work\RES\gwt-windows-1.2.22\src\com\leon456\public\Test.html
Created file C:\Work\RES\gwt-windows-1.2.22\src\com\leon456\client\Test.java
Created file C:\Work\RES\gwt-windows-1.2.22\Test-shell.cmd
Created file C:\Work\RES\gwt-windows-1.2.22\Test-compile.cmd

就是這麼一個指令
注意最後二行 又有二個cmd檔

按常理source code完成了當然就是compile
我們先來試試Test-compile.cmd

Output will be written into C:\Work\RES\gwt-windows-1.2.22\www\com.leon456.Test Copying all files found on public path Compilation succeeded

到www目下看一下結果
直接點開Test.html

























再來試試另一個command file






這次是google 所提供的一個web server monitor 及一個browser幫你測剛剛完成Test
(事實上可以直接就執行Test-shell.cmd就可完成compile的動作)
就是這麼的簡單,一行程式都沒寫到
整個過程下來
總是,覺得少了自己動作的彈性吧
下回再來玩玩它的其它 features吧











試玩 DWR

心血來潮至dwr 看了一下資料
ajax這是一個最近炒的挺熱的話題
目前是對這個工具還沒完全了解
以下做個簡單的紀錄
1st step:
雖然在寫網頁時是用不到 JSP的語法(至少我在第一個example裡沒用到)
首先是要先下載dwr.jar 這個核心 下載
將下載的dwr.jar放到 WebApp/WEB-INF/lib下

2rd step:

撰寫我們的網頁UI

<p>Messages:</p>
<div id="chatlog"></div>
<p>
Your Message:
<input id="text"/>
<input type="button" value="Send"
onclick="sendMessage()"/>

</p>


以及java code





Message.java





package testdwr.bean;





public class Message


{


public Message(String newtext)


{


text = newtext;


if (text.length() > 256)


{


text = text.substring(0, 256);


}


text = text.replace('<', '['); text = text.replace('&', '_'); } public long getId() { return id; } public String getText() { return text; } long id = System.currentTimeMillis(); String text; }




Chat.java






package testdwr.bean;





import java.util.List;


import java.util.LinkedList;





public class Chat


{


public List addMessage(String text)


{


if (text != null &&


text.trim().length() > 0)


{


messages.addFirst(new Message(text));


while (messages.size() > 10)


{


messages.removeLast();


}


}





return messages;


}





public List getMessages()


{


return messages;


}





static LinkedList messages =new LinkedList();


}





將這二個class加到WEB-INF下







3nd step:


在web.xml加上這段宣告





<servlet>
<servlet-name>dwr-invoker</servlet-name>
<display-name>DWR Servlet</display-name>
<servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>

<init-param>
<param-name>debug</param-name>
<param-value>true</param-value>
</init-param>
</servlet>

<servlet-mapping>
<servlet-name>dwr-invoker</servlet-name>
<url-pattern>/dwr/*</url-pattern>
</servlet-mapping>

接著再
WebApp/WEB-INF 增加一個dwr.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC
"-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN"
"http://www.getahead.ltd.uk/dwr/dwr10.dtd">

<dwr>
<allow>

<create creator="new" javascript="Chat">
<param name="class" value="
testdwr.bean.Chat"/>
</create>
<convert converter="bean" match="
testdwr.bean.Message"/>
</allow>
</dwr>

4th step:
在browser 輸入 http://localhost:8080/WebApp/dwr
會出現剛定義的 Chat的hyperlink
點選進入後

<script type='text/javascript' src='/JSFExample/dwr
/interface/Chat.js'></script>
<script type='text/javascript' src='/JSFExample/dwr
/engine.js'></script>
<script type='text/javascript' src='/JSFExample/dwr
/util.js'></script>

<script type="text/javascript">
function sendMessage(){
var text = DWRUtil.getValue("text");
DWRUtil.setValue("text", "");
Chat.addMessage(text);
DWRUtil.setValue("chatlog", text);
}

</script>


把這以上java script放到UI上
最後在輸 http://localhost:8080/
WebApp
即可測試