2006年12月26日 星期二

How Do I Learn Programming(C/C++ as example)

最近為了幫助學弟們學習C++,我整理了一些東西在這
現在已經要2007了,雖然說書還是要K,不過網路可以變成一種方便補助學習
根據C++的學習路徑,而分類幾個主題來列出相關網路資源

學習程式設計


必要條件:

  • 自我學習

  • 記住正確的詞彙

  • 善用搜尋

  • 分享及討論

  • 學好英文


學習程式設計大概會遵照這個流程,從12開始之後因為所有的語言都一樣,所以只要學一次。接著你就會從1~11學習各種不同的語言:

2006年12月22日 星期五

Trac - 與Subversion整合


Trac


Trac是一個Project Management System,他整合了Wiki,並且使用Wiki的方式,以輕量化,快速的角度來建立專案的issue item(他稱做ticket)。你可以管理Milestone(軟體分支或主線),事項(ticket)。而狀態管理項目有priority, severity, ticket type, version。可以從timeline來觀察專案事項的處理時間,也可以從roadmap來觀察專案的進度。並且整合了subversion的web介面。

2006年12月19日 星期二

Ten reasons why every web programmer should learn Perl


  1. Perl is the oldest Web Programming Language, and then influences PHP, Python and Ruby. If you want to get those language started very fast, you better learn Perl first.

  2. Perl Compatible Regular Expression(PCRE) has many instances on utilitites and editors, and also on many Web Programming Languages. If you wish to match your text quickly, learn PCRE first.

  3. Perl provides programmers more than one way to write with flexible syntax, this also has effects on later Web Programming Languages such as Ruby.

  4. The main data structures of Perl are scalar, list, associative array. However string, regular expressions are also important. These are all essentials of later Web Programming Languages, through Perl that you will understand how to manipulate them with your code.

  5. Using Perl to wirte CGI code looks somehow inefficient, but helps you integrate other Client Side languages to it. Generating code with Perl's string processing, reference or OOP also helps you get well to differences between Server Side and Client Side programming, and how to coordinate them.

  6. In those old years with Perl, we use CGI program to show HTML and process HTML forms. If you practice this now, you can know the structure of HTTP and the actual data a web server gets. When debugging in HTTP level, you will resolve the bug in a very short time. Most Web Programming Languages

  7. Perl can combine C libraries effectively, that's how later Web Programming Languages make stable. Once your code needs acceleration, you can write C libraries to be used in your web application. Most Web Programming Languages for now support this way.

  8. Load mod_perl into your apache web server, this makes you realize how mod_php and modules for other language work. Use CGI wrappers to run your code if you find it hard to do so, and you will notice some security problems with your code.

  9. When reading Perl docs, or writing code with POD(perl's documentation format) on it, you can use perldoc to generate API documentation. You will learn that writing code is writing beautiful documents.

  10. There is a huge software library called CPAN, you can use it to install libraries, or join software projects. You may learn how an opensource project works. CPAN has been running for 10 years, with 280 mirror sites, more than 5000 authors and 10000 libraries. This is a goal of most Web Programming Languages.


The purpose I write this article isn't telling everyone to write your applicaiton with Perl. My previous article has talked about, I don't even really want to write for now because Perl spend me a lot more time.
Many of Web Programmers depend on Framework and ignore essential of web technology.
Obviously, after learning a language like Perl (and resolve hard problems), they will understand what HTTP, Apache, CGI is. Myabe read some documents of it such as PCRE will help.

2006年12月15日 星期五

Ten reasons why every programmer should learn C

http://www.jubling.com/ten-reasons-why-every-programmer-should-learn-c.html

我應該去寫個Ten reasons why web programmers should learn perl ...

為什麼Script Language可以這樣彈性?
Script Language一定就慢嗎?他又是怎樣才能寫的快?
為什麼只需要幾種基本型態如Array,Hash就足夠?
結構化且直線的Perl CGI程式如何撰寫?跟Ruby的View又有啥關係?
Perl如何促成了Web Programming?
我認為答案都在Advanced Perl Programming裡(已經絕版 ...)

我記得兩年前我讀這本書的時候,也正是PHP,Python在熱門的時候。而Perl雖然快要成灰燼了,卻在某些系統管理的角度還是很有用。

我並不是Perl的死忠支持者,但我相信在Web Programming越來越簡單的今天,設計師們不應該只是用簡單的物件堆疊,元件拖拉放,做出固定的視窗表單風格,或是犧牲效能完成程式。應該更注重Web的本質,多善用各種特校,ajax及排版來增強使用者經驗及改善效能。Web之所以能夠造成與視窗程式截然不同的發展方向與高人氣,也是因為這原因。

目前我已經將發展方向移往Ruby,我確實在我的學弟身上發現學習Perl對他們後來學習Php及Ruby有相當大的幫助。

2006年12月8日 星期五

WOGTA 2006 (12/7-8)

看起來今天的演講都很不錯

Reconfigrable Hardware

演講的是印度人,聽說也是花上一些力氣請來的,可是我怎樣也想不懂
為啥會請到一個講硬體的
又因為印度人的口音,所以理論上大家都聽不懂

主要介紹說為了要進行高效能運算,硬體的設計必須針對特定的運算如矩陣,字串比對做最佳化。
但是以現今CPU的架構,因為指令及已經固定,很難再花費這樣複雜的設計去實做這些東西。所以現在就有類似運算加速卡的東西,在超級電腦上,以DSP的角色,或是附加卡的角色,搭配CPU進行運算。而現在這樣的運算加速用DSP,還加上可以即時地去組合在FPGA裡的1bit ALU,來達到最佳化的指令集。

當然這樣的東西一定造價驚人,目前也應該沒有很好的應用及Compiler可以處理。

Tsubame Grid Cluster

http://ganglia.cc.titech.ac.jp/

基本上我認為這個主題根本是日本的國力展示。國高的研究助理與我推算一下,大約是台灣一個Grid計畫預算的40倍以上預算。光電力就要1.2MW,更別說耗掉這樣多電力的硬體是要多少錢。

Tsubame Grid Cluster 在2006/6的時候,以38TFLOPS到達了Top 500的9位,說起來Earth Emluator已經過變成過去式。
http://china5.nikkeibp.co.jp/china/news/news/elec200611160123.html

http://www.gsic.titech.ac.jp/~ccwww/tgc/bm/

http://www.top500.org/list/2006/11/100

後來看一下,國高的電腦,從本來有進top 500到已經不知道掉到哪去...結果現在進榜的是智冠科技

http://www.sciscape.org/news_detail.php?news_id=2082

Integrate P2P and Grid

就我學到的Service Oriented Programming/Contract Based Design,可以想像Grid的大方向。終究Grid是要讓人或程式使用,所以便站在服務的觀點進行很多規劃。但是Grid的實做沒有人不能規定是P2P。

這個結論大家或許心裡都有數,因為Service是一種設計,但沒有可以限定其實做。 也就是說,在Grid內部有關訊息傳遞,資料交換都可以應用。

結論有些實驗數據,還有這計畫作了兩年。

2006年12月6日 星期三

WiMAX ?

http://cpro.com.tw/channel/news/content/?news_id=52839
最近看了不少文章,有許多wimax的建置好像雨後春筍一樣

但實際上會不會有所謂的「無線ADSL」呢?

我想還是得好好期待了

2006年10月30日 星期一

Web2.0:過去,現在及未來


本篇文章主要在介紹Web的發展歷史,目前技術上的發展情況,以及未來的景象。

Web


在有Internet的時候,歐洲高能物理實驗室(CERN)的研究員Tim Berners-Lee,在1989~1991的時候,參考了TCP及DNS,設計了HyperText(超本文),以及HTML(HyperText Markup Language)及用來傳輸HTML的HTTP(HyperText Transfer Protocol)。他也設計了第一套HTTP伺服器NCSA Httpd,在NextStep系統上的第一套瀏覽器WorldWideWeb,以及世界上第一個網站http://info.cern.ch/。隨後,他創立了W3C(WWW Consortium)組織來開發及建立WWW上的協定及共通標準。

2006年8月10日 星期四

OpenSource CMS動態




距離之前研究也有一陣子,忽然發現狀態並不見得單純的branch而已。
無奈一心無法兩用~晚上來惡補一下。

PostgreSQL vs MySQL

http://docs.moodle.org/en/Arguments_in_favour_of_PostgreSQL

要仔細想想,自己的堅持並不是道聽途說,也不是人云亦云。

MySQL的3byte Unicode發生過無法透過MyODBC正確敵select的問題,所以我這裡用途不能夠使用MySQL。
目前是因為這樣而無法使用。


PostgreSQL資料庫本身我「還沒有」遇過問題。
PostgreSQL的管理介面沒有MySQL豐富,社群也沒他大,這並不是代表他沒有問題,免錢的有這種成績我已經要感謝上蒼,
而只是如果我是要做商業用途,我應該找一個自己用起來符合要求的資料庫。
因為這樣我選擇PostgreSQL。

選那邊站不重要,重要的是目標有達成。
我應該維持一個立場,如果今天是我整握大局,那就應該由我決定要用什麼,而決定了就更不應該懷疑自己的決定。

2006年6月27日 星期二

Yahoo UI Library

http://developer.yahoo.com/yui/index.html

這個blog…

幾乎被我用來寫技術文章了,所以可能少了些閒聊瞎扯的事情
不過也是有考慮寫一些動畫的瞎扯...

說到動畫,最近食了不少詭異的玩意兒。

2006年6月23日 星期五

有關PostgreSQL好笑的文章

http://my.so-net.net.tw/seiliki/pgsql-advocacy1.html

說好笑應該是在那一段拿機車公車比喻mysql與postgresql的一段,覺得真的是很傳神。
總歸起來mysql適合輕量,只有資料,關連單純的應用,他保證你快。
而postgresql適合良好或是複雜設計的應用,你會用到trigger, stored procedure等功能來處理你的資料(你總不會說論壇的文章需要這些東西吧),那你應該選擇postgresql。
postgresql的穩定度真是嚇死人,以前我把pgcluster的load balancer操爆了,結果DB還沒事。
當然還是一句老話各有優缺點,你應該要慎選你所適合的DBMS,不要人云亦云!

至於為啥都沒提到MSSQL和Oracle,也不過就是因為他們要錢,對於一些小型的專案真的是不可能去使用的...


更多閱讀
http://www-css.fnal.gov/dsg/external/freeware/mysql-vs-pgsql.html

HeartBeat安裝


介紹


heartbeat為linux high availibility計畫所釋出的套件,目前stable版本為1.2.3。heartbeat包含了幾個元件,ipfail,Stonith,Ldirectord。

ipfail的功能直接包含在heartbeat裡面,是一個能夠在探知服務IP失效了便立即將服務IP抓取來用的功能。

Stonith是為了要在任何server停止時,確保剩下的server不會被正在運作的server所影響,可以選擇性強制停止一些server的解決方案。可能會使用在例如共用資料的情況之下。

Ldirector是一個負載平衡的服務器。

PGCluster安裝及設定

0. 介紹
PGCluster是日本作者修改PostgreSQL,使其達到Auto Replication, Load Balance 的能力。操作方式與原本PostgreSQL沒有太多差異,新增增加的幾個功能也會在下面介紹。

在安裝之前也建議將所有的node使用NIS/NFS管理。

php與MVC

[b]有褒有貶[/b]

看到一些文章,真的是對php在MVC的發展上有褒有貶。我並不是一個會專注一個程式語言,一種曉以大義的全功能解決方案,然後死扒著他覺得非用他不可的人。儘管我現在的工作需求也確實需要在php上發展MVC。在一開始的時候,我也曾經很認真地去追究Asp.Net, jsp, php的優缺點,並不是為了選出選美皇后,而是想想到底誰適合什麼?

想當然爾,php怎樣也拼不過java或是.Net原本忠實可以呈現MVC模式的環境,那這樣子似乎連我這篇文章都要寫不下去。

2006年6月21日 星期三

2006年6月15日 星期四

FON-WiFi Sharing

http://blog.yam.com/twfon
FON是什麼?

Fon是無線網路的共享。

現在家家有網路,可是你要到很多地方去,還不見得有網路可以用。難不成進人家家門借嗎?又不是借廁所!

如果有人將他的網路共享出來,利用剩下的頻寬多給人一點便利,自己也希望受益。例如說,我希望接到我這來的人也共享你想要分享的硬碟資料,因為我想看看有啥好玩的。更好的情況是,在你連到我家的的時候,你會看見「Kiwi的家」,並且看到我讓你可以使用的寬頻頻寬,以及我願意分享給你的檔案。我希望可以管理連線進來的人,因為如果有人只是要抓檔案,我便給他很小的頻寬。如果有人願意也分享他的頻寬,加上他有大量的檔案分享,我甚至就乾脆也全開放給他。

我家這一棟的的網路,本來就是ADSL且有足夠的頻寬,我只需要買一台小小的AP,因為我剛好也沒有AP給我的NB用,經常線拔來拔去。如果這台AP很便宜,功能又多,那有啥不好?現在一台AP動則2000,依照市場破壞性行銷的理論,1000出頭的AP,又有Web Login,不需要裝802.1x cleint,實在太划算。

要用的時候很簡單,上網去FON申請一個帳號,跟MSN還是Skype都一樣,馬上就可以用。

Web 2.0以人為出發點的應用

今天在公司聽到很有趣的事情

上司舉了一個例子叫做CRM(Customer Relationship Management),他是一個熱門的名詞,因為在2006年的今天,一個企業要能夠成長,他就是要重視客戶的需求,以及瞭解客戶。所以很多大廠不惜砸下重金引進CRM系統,龐大的資料讓人員難以管理。所以有http://www.salesforce.com/就建立了CRM服務,並且以企業可以負擔的價格讓企業快速引進CRM系統。

那麼,誰說一定要是customer?

2006年6月14日 星期三

自訂Cakephp的資料來源

http://www.thinkingphp.org/tutorials/view/rest-api-in-cakephp-and-google-calendar/
這篇文章詳述了如何在cakephp裡使用自訂的appmodel來建立外部資料來源

基本上就是$useTable=false,接下來不管是連線啥的都得自己管理了

2006年6月12日 星期一

Oracle Installation Guide for RHEL 4


前言


在2005年的時候,因為SRB的關係我開始使用Oracle 10g,他強大的效能真是令人震攝。
SRB使用Oracle的效能差異,也附上了簡短的註記,可以參考:
http://kiwi.csie.chu.edu.tw/blog/srb/srb-with-oracle-memo/

有關快速的安裝,可以參考
http://kiwi.csie.chu.edu.tw/blog/srb/srb-with-oracle-install/

有關完整的安裝請參考
http://www.puschitz.com/InstallingOracle10g.shtm

下載


http://www.oracle.com/technology/software/products/database/oracle10g/index.html

請先註冊OTN的帳號

本文章將介紹Oracle Database 10g Release 2 (10.2.0.1.0) for Linux x86

2006年6月6日 星期二

Web 2.0的發展與迷思

發展
想想,我用網路用了多久了?
一開始的電話撥接BBS(trumpet winsock),
小學時開始有hinet撥接,而這持續了很久一陣子
國中時HTML,Mail開始有聽說,而開始風行
高中時是靠internet,FTP下載東西燒成CD
大學時大家靠internet來找作業...

我想這些都是小市民的過去,一定也是有一堆人跟我一樣過了類似的生活。

大一拿phpbb當作計概作業,不然就是上討論版找分享
大二時一堆討論版變成xoops
大三時google,yahoo購物無人不曉
大四時開始出現blog,wiki
大五的現在...web 2.0

Ajax based component

http://www.scbr.com/docs/products/dhtmlxGrid/index.shtml

2006年6月2日 星期五

進階PHP程式設計-單元測試



  • Why Unit Test(單元測試)?


在本篇文章,要來討論的是Unit Test。
由於文章中會談到許多物件導向分析與設計,軟體工程的觀念,比較適合正在參與或是實做中大型專案的程式設計師閱讀。

Google Trends


估狗大神又多了奇怪的功能囉~
這一次可以很明確地瞭解大家喜歡怎樣的主題
也就是那樣東西的熱門度了

http://www.google.com/trends

舉例:

java,ruby,php
http://www.google.com/trends?q=java%2C+ruby%2C+php

之前看到的範例是
java j2ee , ruby rails, php smarty
http://www.google.com/trends?q=java+j2ee+%2C+ruby+rails%2C+php+smarty

不知道這樣的比較是不是一個好現象...
不過由此可見ruby的發展確實指日可待

IE和Firefox Debugging

請參考
http://www.ruby.oss.tw/html/modules/newbb/viewtopic.php?topic_id=87&forum=10

轉自ruby台灣社群

2006年5月10日 星期三

進階PHP程式設計-php與 COM




  • COM


在微軟的架構中,有一個著名的技術稱做COM(Component Object Model),本篇文章先不從技術面探討,而是從應用面。微軟大部分的產品都具備COM的能力,不管是什麼程式,都按照COM的介面Type Lib來開發。造成微軟的所有產品,下到OS,上到自己開發的應用程式(如果照著COM的架構設計),都可以藉由COM架構進行溝通。舉例說你可以利用IE呼叫Word或是任何語言所撰寫的ActiveXObject,這便是所謂的ActiveX技術。或是在Excel中嵌入一個IE,並且控制IE內部的任何物件,甚至是HTML物件,這是所謂的OLE Automation技術。可以瞥見這些技術都來自於COM。

2006年5月8日 星期一

Things About Ruby !


首先先來看看程式語言的比較
http://www.jvoegele.com/software/langcomp.html

已經有篇文章整理的很好了
http://ibloggedthis.com/2006/04/16/ruby-on-rails-an-extensive-roundup-of-resources-projects-books-links-and-more/

從這一篇可以理解Ruby的優勢...我想這個也是php在好久好久以前興起的原因
http://pityathome.com/blog/articles/2005/08/14/syntax-matters
這個也是
http://www-128.ibm.com/developerworks/tw/library/j-ruby/

由於台灣社群這些前輩們的大力推廣,台灣已經有這些站台了
http://www.ruby-lang.tw/
http://www.ruby.oss.tw/html/
也希望有興趣的人可以加入社群

這本書你一定要K的啦!
http://www.rubycentral.com/book/
給習慣C#或Java的人看的書
http://onestepback.org/articles/10things/

2006年4月29日 星期六

進階PHP程式設計-Ajax


這一篇文章主要是教導各位怎樣在php的環境上開發Ajax程式
如果要撰寫ajax,HTML及JavaScript的基礎是相當必要的。

2006年4月18日 星期二

php資源(06/23 updated)

XML Data Mapping

在最近的專案中,可以發現幾個方向
XML資料存取分做三個方面來討論

我們嘗試過XML對Control的Mapping,但顯然地還是比較屬於自創的作法
並沒有相當好的泛用性
參考了Java的Castor,瞭解了Mapping其實只是一種簡單的關係

2006年4月1日 星期六

良好的系統的設計準則

綜合了一些結論,既有系統的設計方式,我可以發現到一些原則。

如果是應用系統

  1. UI的結果必須正確,不能有顯示在使用者前的描述是和任一其他描述的事實衝突,也就是說盡量要做到系統有完整性。
    例如說,明明使用者還可以透過同一台伺服器線上更新,卻將伺服器本身的錯誤推給網路問題。

  2. 如果有領域知識,要用圖形和文件妥善說明。
    例如說,系統是應用在什麼地方,應該要先瞭解怎樣的相關知識。

  3. 盡力描述這個系統能做到的及不能做到的(在需求分析階段)。
    尤其是不能做到的,例如以前有人要我們的專案管理系統可以掃毒...

  4. 不要有任何系統設計相關文件。
    使用者會產生用途的混淆,因為設計架構並不見得和應用的領域有關。例如說你大量使用哪一種設計樣式(Pattern),但是你在你的設定檔裡也都是那種樣式的名詞,像是Proxy對於寫程式跟網路應用就代表了兩種實做上不一樣的東西。

  5. 錯誤要描述清楚,可能應該有自動回報錯誤的機制,或系統本身有良好的錯誤控制機制。
    不要什麼都請洽系統管理員...


如果是系統框架(Framework)

  1. 框架的概念不應該有任何平台(任何OS或是任何程式語言)相依的描述,意思就是要完全抽象,或者只是單純說明領域知識。
    因為框架的實做很有可能在不同的平台上,如果真的要和平台有關連,也盡量寫在安裝或操作文件內,而不是概念文件。如果有許多不同領域的抽象概念,那也應該事先解釋清楚和哪種領域關連。

  2. 使用的字詞應該盡量和既有IT領域相關名詞雷同(儘管被人罵作太簡單),但這直接影響了接受度。
    例如Datagrid的SRB他們提出Resource,Domain,Zone,但卻給他與字面了不同的定義,導致他們每一次都必須解釋這些是什麼。而ComputingGrid的Globus雖然複雜,名詞也很多,卻並沒有太改變字面上的意義,像ResourceManager確實如其名(但都比較經常被說是GRAM)。

  3. 如果創造名詞,在同一個版本內不應該超過一個
    最讓我讚賞的就是驢子,一直到後來才出現Kad這樣的名詞,而他也不會告訴你他實做了什麼演算法。直到你開啟了進階選項,才有比較多的名詞是不常見的。而要說他的積分系統名詞比較多,但對使用者來說都是積分系統。

  4. 系統的目的要解釋清楚
    很多系統確實都沒有依照原來的目的,而失去焦點。例如Install Shield就是我最近認為的一個過份複雜的系統。給使用者的資訊已經超出「建立安裝套件」許多,而總是圍繞在商業化行為。如果說系統的發展很快,那應該分做子系統而不是繼續合併在一起。

程式設計的迷思

我今天被問到一個問題,「那我們還要學程式幹嘛?」

確實,我當下並沒有直接回答。如果人寫的東西能夠取代程式,那何必要存在程式這種東西呢?就如同以前教Socket的老師(研究領域是嵌入式系統)跟我說,物件也不過是將邏輯轉成比較接近人類,可是回歸到CPU都是一樣的,這點是千真萬確,那為什麼不寫比較接近CPU的語言?當時,我也無法問他為啥什麼都不寫組合語言,也無法反駁他說,那你為啥還要用C Compiler。

所以就如同現在我的工作上所接觸到的,讓我開始思考是不是描述語言會當道。我的同事們被教導,CPU已經很快了,所以不需要在Code上下太多功夫,只要思考設計,只要讓人好寫,只要有抽象概念即可,實做都可以是暴力法。反而我的Code被嫌說沒有可讀性,讓我也是無法反駁,所以我只好再說明上多多撰寫。

我其實不應該去將什麼事情都用二分法,但確實一個本來就沒有特定作法的事情,某人的作法到底好或是不好,也就無法定論。例如現在同事們的想法都是偏向,「可被描述的資料和程式結構」加上「簡單的程式邏輯」。而我的想法卻是在「可被描述的資料結構」加上「複雜的程式邏輯」。確實我的程式很複雜,可是也不需要使用者理解任何抽象觀念,只要資料即可。他們將程式邏輯變成描述,就必須理解他們的程式抽象觀念,到時候又是名詞一堆。加上我還聽到說,希望用程式去產生描述,總覺得好像哪裡錯了。

而我現在所贊同的道路,還是比較偏向將內部作法封裝起來,將系統的解釋都用現有平台的名詞去定義,或是運用簡單的知識,除非有必要,否則不創造新名詞。我相信使用者需要的不是彈性,那是開發者需要的。使用者需要的,還是完善的文件,範例,諮詢,正確簡單,漂亮炫麗的UI。如果真的要用XML進行邏輯描述,那應該是相當泛用的,不然就讓人會有半調子的感覺。

2006年3月30日 星期四

將程式邏輯抽離至XML描述

比起程式化或者是需要設計者藉由程式結構去製造,似乎有一些方向是偏向使用XML產生程式的邏輯。如果說一個系統大部分是由XML構成,真正撰寫程式的人會接受嗎?

以往我們將寫程式的能量耗在大量的結構化,物件導向,樣式的構思或設計,而如今可能換成使用描述的方式去編寫程式,似乎比較合乎那時候我的阿公提出來的概念,「程式不應該由人去寫」。那是否我們都應該將程式的邏輯或是變數抽離,以便讓更多使用者使用?

我從Hibernate的設計架構知道了實際上一個很好的系統,他會在可以改變的地方使用XML,如此好進行程式邏輯的改變(很像硬要將編譯式語言寫成直譯式語言,而造成如同PHP那樣連高中生都會寫)。但實際上,不久之前我還是堅持很多東西物件化,這樣因為我自己寫起來會覺得很輕鬆,但似乎那也只是限定在C#上。

如果這樣子的話,似乎連libSrbCluster的撰寫也變得有相當的難度。或者我得說,這是一種經過分析的暴力法吧!不過這樣一來,就算不花太多時間去想流程,演算法,也會「看起來很複雜」並且很有深度,至少是經過分析過的。

但是以現在的觀念而言,XML程式設計有他原來所不能做到的,在怎樣說他也不能當作程式跑吧!

2006年3月15日 星期三

中研院Grid Administrator Turtorial

http://www.twgrid.org/

Agenda:

http://lists.grid.sinica.edu.tw/cdsagenda/fullAgenda.php?ida=a0617

整體說起來應該主離有點失焦,本來是所謂的「管理」,卻沒見到他們提到有任何管理上的經驗分享。只是單純叫研究人員說出資料整理而已。

主題內容


相較於GT3或GT4的設計,LCG已經使用了GT2很大規模的整合,而不是單純分散的API或是指令介面,而且這些作法應該很早已前就有了。或許如果他們有心想做,gLite(前LCG套件)可以是一個將GT包得很好的東西,如此可以加快不熟悉的使用者,他們的開發。現在玩Grid的門檻很高,還是一個大問題。

是不是LCG對於關連式資料庫會有很好的整合?可以在R-GMA見到一點點有趣的東西。很可惜的是,他也只是換個方式來進行Grid資料的取得。

有關中研院與LCG


中研院在這一點可能偏向太專注在推廣了,LCG不見得是唯一值得推廣的Grid組織。不過很顯然地他們的策略相當好,實際上不太需要告訴使用者太多不關優缺點的問題,只要告訴他們,LCG的加入方法即可。因為他們的背後已經是一個很完整的組織了,加入我想只是會有好處而已。
但是我卻希望他們的推廣不要光是在實做上或是只是推廣,Grid的觀念其實還無法身為台灣人所接受,這個現象可以在P2P的世界中發現。大家都在想說要怎樣去哪裡取得資源,但是何時才會認真地想說自己得提供些什麼?
今天所聽到Deploy Team的結論是說,他們也只能夠身為Tier 1 Site,然後用很大的資源去吸引使用者分享了。

中研院目前是LCG的其中一個大Site,他們儘管可以推廣,但是究竟什麼時候Grid才是一個真正民生用的東西呢?

2006年3月6日 星期一

DoxyGen

 

DoxyGen的功能相當多,目前我已經使用在C/C++,C#,php,perl,javascript上
此軟體也附了GUI介面來快速產生Doxyfile
以下就對各種平台及語言的安裝做個介紹

 

平台


Windows
Linux
MacOS X
Solaris9
FreeBSD 

下載頁面

在可以安裝apt的平台上,你也可以找得到doxygen

 


               

語言共同特性


在這之前,你可以先參考以下文章
http://www.dev.idv.tw/wp/index.php?p=22
http://cdblog.twbbs.org/post/119/1657
http://www.longwin.com.tw/~jon/blog/archives/000299.html
這些文章會讓你先熟悉各種操作及撰寫方式。
本文主要在比較告種語言的撰寫過程及會遇到的問題。

各種語言有其不一樣的註解方式,不過遵循以下的註解方式,會讓文件比較不會出錯 。
注意到第二行開始的*都是有一個空白在前面的,雖然我曾嘗試過不依照這種法則,不過會發生有文件解析不出來的情況。對於各種語言,只要維持原本程式本身的註解樣式即可。但是註解要怎樣搭配各種程式語言,就是本篇文章要討論的。

JAVADOC_AUTOBRIEF

將這個選項開啟,你將可以用下列方式撰寫。

[code lang="cpp"]
/** 第一行是簡述 
 * 這邊開始才是詳文
 */
[/code]

否則你就必須在第一行加上@brief
 

C#,Java


C#和Java比較簡單的是,照著IDE預設撰寫的方式,就很容易地產生文件。
雖然有個工具可以輔助Visual Studio.Net 2003快速新增註解,叫做DoxyComment,不過在2005上跑是有問題的。

再設定Doxyfile的時候,還是要注意windows平台使用的都是絕對位置,所以更動專案的位置會導致問題。不過WorkingSpace卻不需要指定,重新開啟doxyfile就會自動決定。

php4


在這裡要討論的是比較舊的PHP4。
PHP說起來在Doxyfile的設定並沒有什麼太大的不同,但tag與phpDocumenter比較起來,就少了@var的tag。由於PHP4並沒有accessor(如public, protected),所以要記得在private member的名字前加上" _ "來和public member做區別。Doxygen只會掃瞄到public method,不會掃到任何class內的public member。所以撰寫php的時候,還是比較像撰寫C++的習慣,會寫get,set來存取property,而var的宣告,就只能當作private property了。

PHP對於原生型態的判斷,如is_null,is_object等。如果是撰寫物件導向,就經常會遇到物件型態的判斷。
[code lang="php"]
function testInput($arg)
{
if(gettype($arg) == "object")
{
if(get_class($arg) == "domdocument")
print "input domdocument"
elseif(get_class($arg) == "domelement")
print "input domelement"
}
elseif(gettype($arg) == "string")
{
print "input is string"
}
else
{
print "input wrong type"
}
return $arg
}
?>
[/code]
就這個範例來說,在註解的時候,就比較不能像是php官方文件經常會看到的mixed arg這樣的註解方式。我還是比較推薦,使用以下的註解:
[code lang="php"]
/**
* @param arg
* DomDocument: 輸入DomDocument object
* DomElement: 輸入DomElement object
* string: 輸入string會自動建立...
* @return
* DomDocument: 原DomDocument object
* DomElement: 原DomElement object
* string: 原string...
*/
[/code]
如此便不會有輸入型態錯誤的問題,你的程式如果釋出的是函示庫,使用者撰寫你的函示庫也會比較得心應手。

Perl


Doxygen並不支援Perl,也是因為Perl的物件導向撰寫有大大的不同。BigSister團隊也使用doxygen,他們自己撰寫了perl doxygen filter,產生出來的文件會比較像是php撰寫的。

安裝相當簡單
[code lang="cpp"]
tar zxf doxygenfilter-1.01.tar.gz
cd doxygenfilter-1.01
perl Makefile.PL
make all install
[/code]

之後在你的Doxyfile內加上
INPUT_FILTER = doxygenfilter
FILE_PATTERNS = *.pm *.pl

註解的樣式也是要特別注意,開頭沒有兩個#加一個空白是不行的。
[code lang="perl"]
## @file
# 檔案的描述
# @class MyClass
# class的描述
package Some::Name::Space::MyClass;
## @cmethod new($arg,%opt)
# 建構子
# @param arg
# XML::DOM::Document: 傳入Document
# XML::DOM::Element: 傳入Element
# string: 輸入string會自動建立...
# @param opt
# [optional]Debug=>Integer,值可以是1.
# [required]Run=>Boolean
sub new {
my ($class,$arg,%opt)=@_;
...
}
[/code]

Perl也是很難做物件型態的判斷,所以還是要註解清楚。

2006年3月1日 星期三

SyncFusion UI Library

今天見識了一下SyncFusion的玩意兒,有些乍看之下很有趣,想想卻滿無聊,不過還是得找一天將真正有用途的介紹一下。

我不是一個喜歡追求別人寫好東西的人,不過真正有意義且有用途的函示庫,總是會流傳萬史。

UI Library

Docking
MDI,SDI Docking

Editor
AutoComplete:有用途不過不好看,似乎可以使用在很多不同的Box類元件上
ColorUIControl:小軟竟然連自家常用的東西都不釋出UI@@,有預設Web,System Color,不過我比較偏好Macromedia的
ComboBox系列: 有DataBinding功能,似乎如同Web上的需要
Currency系列:同樣有DataBinding,也有快速計算編輯器
DateTime系列:有DateTimePicker,MonthCalendar
DomainUpDown:有支援無上下限制的
TextBox系列:有支援數字格式化,autoComplele的,直接可取Integer或Bouble。MaskEdit支援正規表示法,也可以DataBind。
PercentTextBox總是會加個%任意文字,可能會有廣泛用途
Font系列:有ComboBox及ListBox
MuliColumnComboBox:比較特殊,在ComboBox裡有DataGrid
PopupControl:如同IntelliSence裡使用的彈出盒

Groupbar
MSN,XP,Outlook,VS.Net裡使用的各種群組顯示功能

LayoutManager:支援多種Layout

Menus
ControlBar:有點不同的工具列,不過還是有點Bug
MDI,SDI menus

Notification
GradiantPanel:有相當多的通知區域都是漸層彩色
ProgressBarAdv:也是多樣式的
SplashControl:可以擺在任何地方,包括systray,一樣有事件
StatusBarAdv:可以塞入不同的Control

TabbedMDI:可獨立使用的分頁MDI

TabPage:有XP或自訂樣式的

TreeView:支援各種樣式,動態產生,塞入各種Control

Wizard
WizardControl:就是精靈介面囉
XPTaskPane:XP樣式的工作導引



Shared Library

AppstateSerializer:支援XML,Binary,Ini,Registery的物件序列化

MouseController, RecordNavigator, ScrollControl:都是使用捲軸或滑鼠來取得絕對資料,然後及時繪製

其他函示庫

Calculate:類似簡易版Mathmatica,進行簡單的數學算式計算

Chart:支援Area Chart, Bar Chart, Box Whisker Chart, Bubble Chart ,Candle Chart ,Column Chart ,Column Range chart ,Combination Chart ,Hi-Lo Chart ,HiLoOpenCloseChart ,KagiChart ,LineChart ,PieChart ,PointAndFigureChart ,PolarChart ,RadarChart ,RenkoChart ,ScatterChart ,SplineAreaChart ,SplineChart ,StackingAreaChart ,StackingBarChart ,StackingColumnChart ,StepAreaChart ,StepLineChart ,ThreeLineBreakChart 支援WinForm和WebForm

Diagram:功能很多,有點誇張

Edit:強大的程式化功能,除了所有編輯器的功能外,可以針對自己定義的語言撰寫syntax

ExcelRW:不需要COM的函示庫,支援Excel BIFF 8 格式

Grid:有WinForm和WebForm,功能類似Excel

Grouping:針對資料進行分群與排序,輸出

HtmlUI:類似瀏覽器,不過是程式化地輸入Html

PDF:程式化的PDF產生器

2006年2月26日 星期日

頁面更新

其實...這是因為我忘記備份檔案及資料庫造成的,之前的Unibox也僅有留下安裝套件。

SRB的部分,已經重寫新的說明文件,支援3.4.0的,找個時間在放上去