Monday, October 31, 2005
花的姿態
剛剛聽完期待好久的陳綺貞花的姿態演唱會
嗯嗯...
大概只能用一個「讚」字來形容吧!
用了我舊舊的數位相機照了一些模糊的照片
只好用Photoshop修一修丟上來給大家看囉 :)
拿出相機一起拍
Saturday, October 29, 2005
Ruby on Rails
最近在看一些Bruce Tate的書跟文章
像是快看完的Better, Faster, Lighter Java跟準備有空要翻一下的Beyond Java
這位同時也是Bitter Java、Bitter EJB作者的Java專家
對Java是越來越感冒了(從他的書名就看的出來)
今天在我看到了他的Moving Past Java這篇文章後
忍不住好奇心就去玩玩這個據說可以比開發Java web application快至少十倍以上的新東西
也就是Ruby on Rails
如果你不想像我一樣自己玩它的話
看看這個15m intro video吧!
會讓你覺得很神奇的
Ruby on Rails透過定義好的script造出web application的雛形(照MVC分的架構)
啟動內建的web server
code generator與reflection的結合
再加上Ruby精簡的語法
這種開發速度的確是比一般我們用java去寫web application快上太多了
難怪越來越多人去玩它
至於未來它會不會成為主流呢?
我覺得也蠻難講
說不定過一陣子就會類似的東西在其它的語言上出現了吧!
Sunday, October 23, 2005
Modern Web Development
這是2005-10-02我們的專題討論的講題
來幫我們講演的是Yahoo的web developer - 王璽先生
這場次比起我聽過的其它專題
顯得是淺顯地多
內容也比較吸引我
所以特別blog下來
其中提到了網頁的一些構成元素
- 內容
- 樣式
- 互動行為
你的網頁就是一個「tag soup」
另外一個指標就是當代性
包含了親和力與無障礙性
但是我想一般人本來就很難去注意到這些東西
不然這些web developer是怎麼混飯吃的呢?
我也收集了一些我在場次內覺得還不錯的網站
- css Zen Garden - css設計的極致運用
- htmldog.com - 教學
- 豆瓣 - 電影評論
- Jotspot - 網路共筆
- ROLLYO - 社會性搜尋
我有把王先生的del.icio.us記下來
真不愧是web developer
幾乎都是跟網頁設計有關的東西
最近紅翻天的AJAX、web 2.0的東西都有
大家有興趣也可以去看看
所以說,如果我以後要寫一個會讓別人想用的web application
除了ranking、commet、people+keyword(tag)之類的「基本功能」外
還要能有高度的自訂化(personal portal)
運用一大堆DHTML的技術讓web application操作起來就像desktop application一樣(新的Yahoo Mail看起來真的蠻可怕的)
真的是工程浩大阿..
喔...我忘了,還要有blog與wiki的功能喔~
Friday, October 21, 2005
Reusability?
到底要如何去解釋、宣稱、說明、斷定、評估一個軟體系統擁有很好的Reusability呢?
用Google查了一下Reusability的定義(define:Reusability):
- The ability of a package or subprogram to be used again without modification as a building block in a different program from the one it was originally written for.
www.adaic.org/docs/craft/html/glossary.htm - Capable of being used again or repeatedly.
www.haley.com/resources/Glossary.html - (voir Réutilisabilité) Capacity of a component to function and integrate within more than one environment.
www.erudium.polymtl.ca/html-eng/glossaire.php - The characteristic of a component that allows it to be used in more than the application for which it was created, with or without modification.
www.cio.com/archive/030197/glossary.html - In computer science and software engineering, reusability is the likelihood a segment of structured code can be used again to add new functionalities with slight or no modification. Reusable code reduces implementation time, increases the likelihood that prior testing and use has eliminated bugs and localizes code modifications when a change in implementation is required.
en.wikipedia.org/wiki/Reusability
似乎是因為我學的第一個語言是物件導向語言
看過的書裡面大多都是OO的code
對種種的reuse感到習以為常
沒有在不是OO的領域裡面打過滾
要去解釋這個"常理",會覺得這種評斷似乎是有點抽象
就像是要去說明"人為什麼要大便?"一樣很難解釋(好像也沒有很難解釋)
這次老師要我補強一篇paper
文中要強調此系統的reusability
我對其中說明的種種reuse方式總是覺得有點領悟不過來
為什麼這樣做就是在reuse呢?
這麼做是要reuse什麼東西?
發現了其實我對"reusability"的認識原來還是蠻粗淺的...
有人整理出來OO的reuse種類:A Realistic Look at Object-Oriented Reuse
我就這篇文章提出的這幾點想一下要如何說明我的系統中存在這種reuse
- Code Reuse:
sharing common classes or collections of functions and procedures
(procedures reuse只有C++能夠做到,Java無法支援procedures reuse)
- Inheritance Reuse:
透過inheritance,subclass可以去reuse到superclass中所有不是private的field與method(與constructor)
這種"is a"的關係的確是一種reuse的方式
但不一定是最好的方式,因為inheritance會有許多的限制
根據物件導向的原則,我們應該要"Favor composition over inheritance"
所以說雖然有reuse,但是更需要良好的設計去support此一技術 - Template Reuse:
根據文中的說明,我看不出來這跟系統中元件的reuse有什麼關係
至少我覺得系統在run的時候應該不會有感覺出此種reuse... - Component Reuse:
Component reuse refers to the use of prebuilt, fully encapsulated components in the development of your application.
Components are typically self-sufficient and encapsulate only one concept.
這應該是我在paper中比較需要去著墨的一種reuse
但我必須先把系統中這些component找出來
說明我有去使用到這些component,它們提供了什麼功能
不過這種component好像可以是一個物件、一組物件、甚至是一整個package
要如何寫一小段code去說明我的component很好reuse呢?
是不是用圖形表示出這些componet會更容易說明呢?
還要多想一下 - Framework Reuse:
Framework感覺上是由一堆component組合來的
我們必須去學著如何使用一個Framework
因為Framework已經幫我們做掉很多事情了
它應該提供了一些既定好的東西讓我們去follow
只要另外寫一些code就可以達到我們想要的功能
看到了這裡我開始懷疑我們的系統到底是提供了一個framework還是一組component? - Artifact Reuse:
這不是軟體層級的reuse - Pattern Reuse:
With pattern reuse, you're not reusing code; instead, you're reusing the thinking that goes behind the code.
這種reuse的level蠻高的,事實上我們應該都是去reuse別人的pattern
還沒有到提出pattern去讓別人reuse的功力 - Domain Component Reuse:
針對某個domian的較高階的component reuse,蠻難體會的
文中還提到了"The Secrets to Reuse Success":
- You can't call something reusable unless it's been reused at least three times on three separate projects by three separate teams.
我們系統中的component好像還沒有在三個不同team中的project中進行reuse
必須要假設這個目標是可以達成的,不然會感覺自己是在胡說吹牛
但我要在paper中提出來這個假設,真的要舉三個例子嗎?
或是我可以進行一種更高層次的假設
想到這些看paper的人都有舉一反三的能力,事實上我覺得大多數paper的作者都好像是這麼做 - Reusable items must be well-documented and have one or more real-world examples of how to use them.
必須要更仔細地去說明這些component能夠reuse的功能
還有要舉更實際的例子 - The only way you'll make reuse a reality is if you plan for it.
沒錯,這也是我弄這篇paper的目的 - Reuse is an attitude.
這論點可以在Conclusion中提出來,還不賴
說實在,改別人寫的paper好像會比自己寫paper更讓自己惶恐
深怕對原本作者表達的會錯意,並要把自己的想法加在別人的想法之上
希望我能把這件事弄好 @@"
Monday, October 17, 2005
筆記整理(2005-10-17)
ASE
must read: Code Complete, Second Editiondefensive programming: 對付bad data (assert)
每段單純傳達一件事
software architecture: 模組, 子系統, 介面
AOS
Linux source code: Cross-Referencing LinuxCh1,2重點:
- interrupt
- user, kernel mode
idea
- visual metaphor object + code templete
- 3D UML
- UML motion
陳綺貞簽名CD
昨天跟兔寶一起去西門町的陳綺貞簽名會
好險我們早了快半個小時到
因為後來根本就看不出來人到底排到哪裡去了 @@"
可惜工作人員不讓我們跟陳綺貞照相
真的是很可惜耶
偷照一下是不行嗎? >"<
在陳綺貞的簽名會之前還有梁靜茹的簽唱會
沒照到陳綺貞
照照梁靜茹也不賴啦~
Sunday, October 16, 2005
Aspect-Oriented Programming
自從上次研究Amount-of-Reuse開始
我就開始研究AOP
並且在報告的時候用Java+AspectJ寫了一個demo程式
老師一看到就知道這是個很有潛力的技術
就我的感覺
AOP已經有一隻腳在實驗室門外
快要走出實驗室了
所以我的研究目標就先定在AOP與WfMS上面
當然基本的OO design還是不能少的
我看的書是Manning的AspectJ in Action
有一些整理後的東西放在我的網站上了
http://www.ice.ntnu.edu.tw/~swanky/aop/
日後還會繼續整理這份資料
以後應該會能夠用上的
Friday, October 14, 2005
我的系上網站
今天去申請了系上的帳號
包含了mail、web、ftp...等等服務
原本只是為了要去抓老師上課的資料才去申請的
想說既然有空間就丟一些資料上去吧
網址是http://www.ice.ntnu.edu.tw/~swanky/
上面會放一些我報告的東西
還有整理的資料
希望幾年下來會有更多有用的資料放在上面囉!
Thursday, October 13, 2005
我想去聽陳綺貞的演唱會...
我想去聽陳綺貞的演唱會...
可是票在我看到可以買票之前就賣光了...
真是怪我消息的不靈通
也後悔當除沒有在我的螢幕上貼一張3M提醒我要去注意
為了想去
於是我去Yahoo拍賣上找找看有沒有人在賣黃牛票的
沒想到真的有很多在賣
原本找了一個賣兩張800元票的去標
想說我出到兩三千應該也讓黃牛賺很多變更黃了
最後居然有人4500給他買了兩張800塊的票
真的是十分地Orz
沒辦法只好繼續去找別的標了...
真希望信箱中不要再出現"Yahoo!奇摩拍賣︰出價被超過(XXXXXXX)"
這些愛亂出比我高價的人還真是討厭
另外由於這次慘痛的經驗
我把年代售票的網站加入的我的del.icio.us書籤中
時常觀察會有什麼將會很popular的節目即將售票
方便日後把我這次虧掉的錢
以其人之道還施其人之身
在拍賣網的說明我已經有很多樣版了
像是
- 我實在是很想要去,但因為工作的關係無法前往觀賞,所以忍痛將此票脫手
- 因為朋友託我買的,但是他後來又不想去很機車,只好拿出來賣
- 我買錯票了,所以拿出來賣
- 我家裡養的貓突然懷孕了,不能前去觀賞,只好割愛給有緣人
- 不知道為什麼我家裡信箱多了這一張票,可能是有人不想去拿來送我的,但我也不是很想去,所以拿出來賣
這樣我就可以好好地賺回來一筆...
Wednesday, October 05, 2005
Spaghetti Code
最近在看Big Ball of Mud
想到之前在Java 2005有去聽介紹AntiPattern的場次
故在此整理一下之前聽到有關Spaghetti Code的資料
何謂AntiPatterns?
- AntiPatterns are Negative Solutions that present more problems than they address
- AntiPatterns are a natural extension to design patterns
- AntiPatterns bridge the gap between architectural concepts and real-world implementations
- Understanding AntiPatterns provides the knowledge to prevent or recover from them
Spaghetti Code–雜亂無章的程式碼 (Development AntiPattern)
Definition: Spaghetti code an undocumented piece of software source code that cannot be extended or modified without extreme difficulty due to its convoluted structureSymptoms
- Quick demonstration code that became operational
- "Lone Ranger" programmer (who was that masked man?)
- Obsolete or scanty documentation
- 50% of maintence spent on system rediscovery
- Hesitant Programmer Syndrome
- More likely to break it than extend it
- Easier to just rewrite it
- Cannot be reused
- System software and COTS packages can't be upgraded
- Performance cannot optimized
- User work around
Object-Oriented Spaghetti Code –非物件導向Code
- Many object methods with no parameters
- Suspicious class or global variables
- intertwined and unforeseen relationships between objects
- Process-oriented methods, objects with process-oriented names
- OO advantage lost - inheritance cannot be used to extend the system, polymorphism not effective either
Refactored Solution
- Refactor to generalize: Create an abstract superclass
- Make subclass function signatures compatible
- Add function signatures to the superclass
- Make function bodies and variables compatible
- Mirgate common code to the superclass
- Refactor to specialize: Simplify conditionals
- For each condition, create a subclass with matching invariant
- Copy the code into the subclass
- Simplify code based upon invariant
- Specialize the superclass constructor
- Refactor to combine: Capture aggregations and components
- Type A: Move members from an aggregate class to a components class
- Type B: Move members from component classes to aggregate class
- Type C: Convert inheritance into an aggregation
Strategy: Reform the software process
- Refactoring as you program
- incremental development
- Refactoring to improve structure
- Incremental test
- Iterate
- Use programming discipline
- Keep track of defects (metrics)
- Learn to avoid programming defects
- Use Architecture-Centered development
- Define enforceable system boundaried
- Use design patterns to document software
Monday, October 03, 2005
洪志鵬的深夜MSN對談真好看!
這是一篇廣告
詳情請點下上面標題的超連結
洪老大又出書了,真是恭喜他耶
但是很慚愧地
到現在我還沒有買老大出的書 @@"
都只是在書店看到時拿起來瞻仰一番
也沒有我學長的好運能夠在Java 2005上抽到老大的書
相信有看到我這篇廣告的
會知道這本書有多好看了
另外...為什麼抓圖要先按住Ctrl
我直接按Prt Scr也可以抓耶 @@"
PS.難怪我今天看browser上上下下MSN就是用這個當ID,感覺不像他會做的事...