2010年2月3日 星期三

基本資料與作品介紹

蔡子宸 Stella Tsai
電話:0982572030
Email:stellalove.family@gmail.com


2010/04 – present  美商鳳凰(phoenix)科技公司 BIOS 工程師

2009/08 - 2010/03 財團法人資訊工業策進會 軟體工程師

2007/08 - 2009/08 神達電腦(Mitac)股份有限公司 BIOS 工程師

2005/09 - 2007/06 中央大學(資訊工程學系) 碩士

2001/09 - 2005/06 義守大學(資訊工程學系) 學士


開發經驗:
C/ C++, x86/x64 asm, C#, ASL, Shell, ACPI

BIOS architecture: AMI and Dell Legacy BIOS, Phoenix UEFI, Intel EDK2

BIOS porting/bring up: SMI, SCI, PCI, PCIE, I2C, LPC, Core Multi-processor, Hyper-threading, Power management, SIO

Other: HTML, CSS, Java, Cluster, OpenGL


開發專案:

Power on Tablet (CloverTrail) base on Intel EDK2

Porting Sandy Bridge processor with Multi-processor, Hyper-threading, Power Management, and Digital thermal sensor base on UEFI

Development UEFI Shell Utility tools.

Development 2-in-1 MRC of Lynnfield and Clarkdale chipset base on x86 asm.

Bring up Intel’s Nehalem and VIA chipset base on x86 asm.

Development BIOS menu feature base on C code.


論文研究: An Automatic Semantic-Segment Detection Method in the HTML Language.



一、工作經驗:

在美商鳳凰(phoenix)科技公司從事BIOS的開發設計,主要負責CPU silicon的程式開發與除錯,協助FAE(field application engineer)解決客戶問題,與其他BIOS部門共同合作開發模組化功能,讓客戶的客制化設計可以得到快速開發。也和同事共同開發核心程式,擴充EDK功能,以及與Intel公司一起合作導入EDK2架構進行開發平板機種,支援Win8 OS。在公司無論做任何target都非常盡心盡力,努力認真負責,也極積督促自我成長,快速學習,專研BIOS技能,與同事共同分享BIOS知識,做事態度和同事相處共事,深受主管認同。


在神達電腦(Mitac)公司從事BIOS的開發設計,依硬體設計及客戶需求,客制化設計符合需求的BIOS。在事盡心盡力,力求完美,是個有信用且負責的好夥伴,認真負責的態度。曾獨力完成開發Dell legacy BIOS 的2-in-1支援雙CPU 的BIOS 架構,遠勝敵方,深受主管肯定

2-in-1 MRC development:
The System can automatically build 2-in-1 MRC code in system BIOS. To detect correct entry point of 2-in-1 MRC depend on Device ID of Clarkdale or Lynnfield processor. (Bus0 Device0 Function0 Register2)



在財團法人資訊工業策進會從事高階軟體開發設計與整合系統,依硬體設備及需求規格,與Web服務結合,操控周邊硬體設備動作及Client程式介面呈現。

善用工具,積極學習,快速完成交付工作,進度掌控良好,認真負責,是個值得放心交付工作的部屬,主管總能放心讓我自由安排個人進度。

題目:電子公仔服務平台
程式:C#
特色:高階軟體開發設計與整合系統,依硬體設備及需求規格,與Web服務結合,操控周邊硬體設備動作及Client程式介面呈現。




二、碩士研究領域:

將網頁有效率模組化拆解,自動偵測語意區塊,產生更適合使用者觀看的內容調適網頁。分析整合HTML語言特性,開發自動化語意區塊偵測引擎,該研發成果建構於.Net framework 之上,利用Visual studio C# 語言開發。該研究兼俱理論價值和實作的完整性。
研究過程中,發現問題和瓶頸,我會不在乎睡眠不足所產生的疲備,完全專注地思考、研究及測試,探索導致此狀況的原因,具不怕吃苦的能耐及鍥而不捨的決心,個人非常喜歡從研究中找到樂趣及成就感,很喜歡實務開發的工作。

題目:網頁內容調適引擎
課程:碩士論文 程式:C#
特色:將網頁有效率模組化拆解,自動偵測語意區塊,產生更適合使用者觀看的內容調適網頁。



三、大學專題研究:


在Linux平台下,利用大學所學的基礎為理論根據,進行分析平行處理效能。包括區域網路及網際網路之間的差異,計算機組織管線特色,作業系統執行程序管理…等等知識理論。並且利用C語言開發,加上使用OpenGL的函式庫實作研究所需的驗證程式工具。

大學求學時期,總是要求自己時時保持像塊乾燥的海綿一樣,竭盡全力吸收知識, 對於所學的知識,也可以融會貫通,加以運用。

題目:平行處理效能分析
課程:專題研究(大學) 程式:C
特色:在Linux平台下,實作驗證工具




學生作品介紹

題目: 放大選取範圍 課程: 專題研究(大學) 程式:C
特色:可以用滑鼠在螢幕上點選,使圖形會放大


題目:設計小畫家 課程:計算機圖學 程式:C
特色: 使用OpenGL函式庫,設計可以畫點、畫色彩三角形、透明三角形、漸層三角形、色彩正方形、橡皮擦、清除畫布等功能的小畫家



題目: 小遊戲 課程:計算機圖學 程式:C
特色: 親手設計遊戲
功能:
a. 隨機變數產生小茶壺的位置
b. 個個小茶壺顏色均不相同,且隨機變數產生變色效果
c. 大茶壺當接到小茶壺時,會變色,且放大,表團聚的喜悅

題目:建樹及畫樹 課程:資料結構 程式:C++
特色: 程式可印出含左斜線或右斜線的樹狀圖


題目:河內塔搬重過程 課程:資料結構 程式:C++
特色: 靈活應用程式撰寫技巧,達到可以漂亮印出執行結果。

基礎能力自我評估(學士課程)



基礎能力自我評估(碩士課程)

2010年1月28日 星期四

Eclipse RCP (Rich Client Platform) Life Cycle

Eclipse RCP (Rich Client Platform) life cycle
我們可以從What is the Eclipse RCP (Rich Client Platform)?明白application class會來實做(implements)具bootstrap功能的介面(interface) IApplication。 指定應用程式的執行進入點。而RCP就是實作IApplication的開發平台,因為我們可以在只被平台呼叫的而不可以直接程叫的start function 中(圖一),了解RCP application說穿了就是一個一直在workbench中執行的事件。
生命週期:(圖一)
1. 建立display (SWT):圖形系統的實作,負責接收事件傳給RCP的listen來完成事件處理。
2. 建立workbench advisor:控制workbench 的生命週期,異常處理,傳遞重要參數給Workbench。
3. 執行workbench:一個RCP應用程式,只能有一個Workbench
4. 回覆中斷碼
5. 結束display

(圖一) start function

Workbench是Eclipse 最上層的user interface,所以一個RCP應用程式,只能有一個Workbench,用由管理workbench windows, dialogs, wizards, 和其他的workbench-related windows。而PlatformUI是一個核心的class,它利用Workbench class來Create display (createDisplay)及create work bench advisor(ApplicationWorkbenchAdvisor),存取Eclipse platform user interface(createAndRunWorkbench); (1)Workbench.createAndRunWorkbench(Display display, WorkbenchAdvisor advisor)建創一個workbench且結合display 和workbench advisor(new Workbench(display, advisor)), 再執行workbench UI ((2)workbench.runUI())進行開啟應用程式的主視窗,等待且處理按鍵,滑鼠等視窗事件,直到主視窗關閉,是屬於一個持繼處理event 的loop。
而workbench.runUI()會先初始化Workbench包括JFace, window manager, service order, default services, activity support, fonts, colors, applicationColorss等等所有的初始化,接下來會先對workbench做充分的初始化,才會turn on advisor ( 2-1)WorkbenchAdvisor.initialize -> (2-2)WorkbenchAdvisor.preStartup(只有在第一個workbench window被open或被restore 之前被執行特別的code,一般是不會被override實作的,除了特別需求) -> (2-3) WorkbenchAdvisor.openWindows(流程是先讀取以前設定的workbench狀態(IWorkbenchConfigurer.restoreWorkbenchState)會參考workbench.xml檔,當讀取失敗了才會執行IWorkbenchConfigurer.openFirstTimeWindow來取得不是儲存的值而是初始化的workbench值, 不管是否讀取成功最後才開啟一個特別的perspective pag和一個新建的workbench window (2-3-1) WorkbenchWindow.WorkbenchWindow以及初始化的(2-3-1-3)shell style和(2-3-1-4)action bars(WorkbenchWindow.fillActionBars)
(新建的workbench window (2-3-1) WorkbenchWindow.WorkbenchWindow的流程:為新的workbench window初始化command-based服務, addMenuBar, addCoolBar, addStatusLine 等基本地設定以及一些更多的設定於(2-3-1-1)WorkbenchWindowAdvisor.preWindowOpen(在window被open之前被執行特別的code,一般是不會被override實作的,除了特別需求 -> (2-3-1-2) WorkbenchWindowAdvisor. createWorkbenchWindowAdvisor(新建立Work bench Window Advisor用於控管實體視窗的樣式及生命週期和事件(new ApplicationWorkbenchWindowAdvisor)))
(2-3-2) ApplicationWorkbenchWindowAdvisor.createWindowContents(Shell shell) 用來建立window的內量物,預設值有a menu bar, a cool bar, a status line, a perspective bar, and a fast view bar.
(2-3-3) WorkbenchWindowAdvisor.postWindowRestore(在window被restore之後還沒運作之前被執行特別的code,一般是不會被override實作的,除了特別需求)
(2-3-4)Workbench.openWindowsAfterRestore 在workbench開啟windows
(2-3-4-1)WorkbenchWindowAdvisor.postWindowCreate(在window被restore及create之後還沒運作之前被執行特別的code,一般是不會被override實作的,除了特別需求)
(2-3-4-2) WorkbenchWindowAdvisor.openIntro() 在第一次打開時要看到的內容,之後不要,則可以在這裡設計,因為這方法的IWorkbenchPreferences.SHOW_INTRO預計是true, 第一次打開視窗後,這值會設成false,只有在WorkbenchConfigurer.getSaveAndRestore() 方法返回True,以及關閉視窗後這值才會被更改為true,否則不會被執行設計在第一次打開的時候執行的code。
(2-3-4-3).ApplicationWindow.open開啟main window, ps:最高層級的應用程式視窗的主視窗是嵌入一個非必要的標準menus, 一個非必要的toolbar , 一個非必要的status line。
(2-3-4-4)Workbench.fireWindowOpened開啟listening 去監聽window lifecycle events(ex: part lifecycle events)
(2-3-4-5)WorkbenchWindowAdvisor.postWindowOpen(在window被開啟之後被執行特別的code)

(loop)WorkbenchAdvisor.eventLoopIdle(Display display)


參考:
http://wiki.eclipse.org/images/d/d9/EclipseCon_RCP_Tutorial_2006.pdf
http://www.eclipsecon.org/2005/presentations/EclipseCon2005_Tutorial26.pdf
http://chenying.blog.51cto.com/614874/123516
http://internet.hk/doc-view-24799.html

2010年1月21日 星期四

What is the Eclipse RCP (Rich Client Platform)?

定義:
Eclipse RCP就是運用許多內建功能來進行開發Client應用程式的一個開發平台


元件架構:
一個minimal standalone RCP application一定包含最基本的三個元件
  •  主程式 - 由org.eclipse.core.runtime.applications來定義RCP main application class(參考圖二)的擴充進入點,這application class會來實做(implements)具bootstrap功能的介面(interface) IApplication。也就是說,要執行一個Eclipse RCP 程式,必須先定義application,它就如同是一個程式的main()function,application會控制整個RCP的生命週期。 
  •  perspective(透視圖) - 由org.eclipse.ui.perspectives來定義perspective class(參考圖二)的擴充進入點,這perspective class會來實做(implements) IPerspectiveFactory介面(interface),在Workbench範圍中可被視覺化物件的操控與呈現。也就是說,perspective是一個可視的容器,收集著許多可視物件和編輯器。 
  •  workbench advisor(工作台顧問)-由application class建構(new)出來的,它是控制workbench的外觀配置。

基本檔案:
我們可以從How to create the new Eclipse Rich Client Platform (RCP)? 得知如何快速建構RCP的eclipse application project。

建構完成後,會自動產生:
  •  程式檔:
    Activator.java,
    Application.java,
    ApplicationActionBarAdvisor.java,
    ApplicationWorkbenchAdvisor.java,
    ApplicationWorkbenchWindowAdvisor.java
    Perspective.java等

  • 其他project資訊檔案: 
    MANIFEST.MF,
    build.properties,
    plugin.XML 等


圖一 RCP基本檔案


我們可以從MANIFEST.MF in META-INF folder得知project資訊和更改其設定值,只要點擊MANIFEST.MF就會出現Eclipse圖視化設定界面視窗,可在Eclipse圖視化界面視窗進行設定project資訊及extension points,Eclipse圖視化界面視窗會自動更改MANIFEST.MF, plugin.xml, build.properties檔案。

可從plugin.xml檔中了解有關插件的擴充進入點和所有擴充點清單,換言之,所有的plugins一定會被列入plugin.xml清單中,也就是我們是可以從plugin.xml檔中得知application 的 runtime applications 擴充進入點,如同main function,當application結束時,整個程式會中止。

圖二 org.eclipse.core.runtime.applications擴充進入點的設定


從plugin.xml檔中得知perspectives的擴充進入點,這class 實做了(implements) IperspectiveFactory介面的page layout的初始化。perspective是一個可視的容器,收集著許多在Workbench範圍中的可視物件和編輯器。


圖三 org.eclipse.ui.perspectives擴充進入點的設定


總結一下什麼是Eclipse RCP application,它是用來開發Client應用程式的平台,擁有許多豐富的功能,主要keyword是利用application控制整個RCP程式的生命週期, 建立了workbench advisor(工作台顧問)來配置workbench的外觀以及使用perspective class來實做在Workbench範圍中的可視物件和編輯器等元件。

2010年1月14日 星期四

How to create the new Eclipse Rich Client Platform (RCP)?

Create new RCP application project //建立新的RCP專案
  1. Create a plug-in Project //新建一個Plug-in 專案
  2. Key Project name //輸入專案名稱
  3. Select “Yes” with Rich Client Application //選取建立一個Rich client application 
  4. Select “RCP application with a view” available templates
  5. Select “Add branding”
  6. Run Configurations in Run menu //在run configurations 中建立新的eclipse application 的執行專案為自行建立的專案



2009年1月21日 星期三

Memory mode

Real mode:20位元的記憶體任址空間(1M), 可以直接存取BIOS常式及週邊硬體,沒有保護功能。
Protected mode:可存取到4G的空間,而且擁有分段,分頁,保護機制,會將每個段的重要訊習記錄在特定的table中(GPT,LDT,IDT...),包括存取權限,段的特權級資訊,達到保護功能,例如我們可以在一個segment的訊習描敘中,設定是否可寫,可讀或可被執行等限定,來保護每個segment不同的功能。除此之外,還有GPTR, LDTR, IDTR, TR 4個記憶體管理暫存器,指定記憶體分段管理的"系統表之基底位址"再配合訊習記錄中的segment大小,來保護每個segment 的獨立(如果存取大於偏移位置的空間,會產生異常)。 以上是分段的用途。至於分頁的最大用途是讓記憶體空間要比電腦實際記憶體容量更大(虛擬記憶體),而分頁的硬體設備(實作方法),是使用一小塊的實體記體(RAM or ROM)來存配置空間表,加上外部儲存空間(硬碟)來存放真正的
Data,達到虛擬記憶體的擴大法。
System management mode(big real mode) (SMM):由1M大小擴大到4G的存取空間(A20的開啟(bios)),但沒有保護模式的保護機制,也沒有分頁功能。
補充:所謂的SMM是指觸發SMI(system manage interrupt)後,CPU register 設定mode切換,讓CPU進入SMM模式,處理例外事件。
Virtual 8086 mode:在保護模式機制下,模擬出real mode,達到直接存取BIOS常式及週邊硬體。
Intel 64: (IA-32e) supports a 64-bit programming environment, 有兩種模式,(1)64bit 模式:支援64bit的os和軟體(2)相容模式:讓傳統的軟體可以和64bit的os和軟體共存。
--------------------------------------------------------------

不管是IA-32或intel 64架構,在power-up和reset的一開始,都是跑real mode,透過控制cpu register 及 flage來控制mode的切換。
CR0(cpu 內部register)中的保護控制位(Bit0:PE(protection enalbe) Bit31:PG(Paging))
PE:保護模式和真實模式的切換,如果保護模式要含有分頁機制,則PE和PG都要被set
PG:如果沒有分頁機制,邏輯位址對應的線性位址,就是記憶體上的實體位址。