推文按鈕

收進你的MyShare個人書籤

2008年2月26日 星期二

如何善用網路上的開源碼:回收再利用

分享Qing的另一個系列文,「Google時代的程式撰寫」
http://www.javaworld.com.tw/roller/qing/entry/2006_4_18_Google_Programming

作者指出有三大轉變
1. 由於Google搜尋引擎和網路的的發達,現在更容易找到人家分享的開放原始碼(如http://www.codeproject.com
2. 錯誤排除的速度更快了,現在只要把錯誤碼或訊息貼到搜尋引擎,就可以找到一大堆解法
3. 以前的開發方式通常都是靠自己寫或團隊的程式庫,但是現在網路上一大堆open source code,也因此現在
「追蹤原始程式碼、拆解原始程式碼」的能力,可能比自己撰寫程式碼的能力更重要。

開放原始碼的回收與再利用
http://www.javaworld.com.tw/roller/qing/entry/2006_4_19_Recycle_Open_Source

作者分享如何有效利用回收、再利用開放原始碼,增快程式開發能力
1. 在網路上搜尋適合的原始碼:基本規則如下
  • 執行平台、語言相符
  • 版權宣告適合
  • 範圍接近、相依性低
  • 使用者眾(可加上有開發社群)
2. 瞭解程式架構,拆解出自己所需的部份
3. 訂定不同階段,從最小里程碑開始
4. 做最細部拆解,先求能編譯,再求能正確執行
5. 暫時忽略第一個里程碑的內容:適時註解掉不是目前正在處理的部份,以求通過編譯檢查
6. 適度地斬斷關連性,尋找適合的替代品
7. 整理介面,去除不必要的元素
8. 做好心理準備,面對混亂
9. 跨出成功的第一步

開放原始碼的回收與再利用-實例探討:視訊檔案的格式探測
http://www.javaworld.com.tw/roller/qing/entry/2006_10_10_%E9%96%8B%E6%94%BE%E5%8E%9F%E5%A7%8B%E7%A2%BC%E7%9A%84%E5%9B%9E%E6%94%B6%E8%88%87%E5%86%8D%E5%88%A9%E7%94%A8_%E5%AF%A6%E4%BE%8B%E6%8E%A2%E8%A8%8E_%E8%A6%96%E8%A8%8A%E6%AA%94%E6%A1%88%E7%9A%84%E6%A0%BC%E5%BC%8F%E6%8E%A2%E6%B8%AC

作者示範回收再利用開放原始碼的範例

分享很棒的程式開發觀念

今天看到了一個程式設計師qing的部落格,分享了很多篇程式開發的觀念
我覺得很棒,大家一定要點來看!

砍掉重練真的會比較好嗎?
http://www.javaworld.com.tw/roller/qing/entry/%E7%A0%8D%E6%8E%89%E9%87%8D%E7%B7%B4%E7%9C%9F%E7%9A%84%E6%9C%83%E6%AF%94%E8%BC%83%E5%A5%BD%E5%97%8E
作者討論會想要讓程式設計師砍掉重練的情況大致上有5種:
(1)撰碼風格不佳(2)過多重覆累贅的程式碼(3)程式架構疊床架屋(4)架構設計不夠通用(5)所運用的技術跟不上潮流(5)有太多隱藏在深處的臭蟲未爆彈。
但是他認為其實大多數的時候不應該砍掉重練,因為以生產力的角度來說是不划算的。
很多情況只要透過重構(refactoring),將類似的程式碼精鍊即可。

想要砍掉重練,通常是優秀程式員想要維持完美性的心魔,但是這樣可能陷入over-engineering(討論請詳見下一篇),他的看法是程式可以跑最重要!

淺談軟體設計的Over-Engineering
http://www.javaworld.com.tw/roller/qing/category/programming?page=1

作者提到了under-engineering和over-engineering。「under-engineering是絲毫不為日後的可能做準備,而over-engineering則是為尚不可見的未來做太多準備。」

「這種情況的設計者,尤其是剛領教到軟體設計之美的設計者尤其會犯。這類的設計者會有太多的企圖,希望打造一個十分通用、最好是放諸四海皆準的設計。使得日後無論有多少變化,通通都能夠被納入在這個設計當中。」

這個也是我們目前必須警惕到的問題。

此外,作者認為軟體設計是「魚與熊掌不可得兼」,想要建立彈性極佳,可應付未來各種需求的程式設計時,可能就得用效能來交換。

「但是,吊詭的是,其實你往往不需要如你想像中的彈性。建立一個無懈可擊幾近完美的一般化設計,除了美感外,別無用處。但軟體設計的目標並不在展現美感,而是要解決真實的工程問題。」

那麼,「在over-engineeringunder-engineer之 間又要如何拿捏分寸呢?過與不及看來都有問題。你要做的並不是什麼設計都不做,也不是把設計做了過火。你要做的是,去建立一個具演化能力的設計,讓這個設 計能夠隨時依照可見到的迫切需求,在很短的時間內滿足這個迫切的需求,同時繼續為下一次的演化而做準備。就是這樣,每一次的改變,除了滿足目前的需要之 外,同時也為下一次的改變而做準備。」


建立自用的程式庫
http://www.javaworld.com.tw/roller/qing/entry/%E5%BB%BA%E7%AB%8B%E8%87%AA%E7%94%A8%E7%9A%84%E7%A8%8B%E5%BC%8F%E5%BA%AB
鼓勵將開發中的公用需求建立成自己的程式庫,並重複運用,可大幅提高生產力。

「大多數的程式員因為拘泥於物件導向,一想到程式碼的重複運用,往往直接聯想到透過繼承方式取得的重複運用。然而,大多數情況下,除非我們設計的是應用程 式的框架,或者是某種特殊應用的類別庫,否則設計的類別之間並不會存在太多或太複雜的繼承階層關係。這自然意謂著,透過繼承而得的重用程式碼其量不致於太 多,因此也不太可能透過它得到非常多生產力的提昇。」

但是,「當你跳脫出利用繼承得到可重複使用之程式碼的想法後,或許會發現到,重複運用許多在開發過程中會需要的公用程式,也是提高生產力的主要來源之一。」

但是作者也認為「不用追求一次到位式的立即整理出一個好用的公用程式庫,你只需要在開發的過程中,逐步的觀察是否發生了重複性的程式碼片段,倘若有,便利用「重構(refactoring)」中提煉函式或提煉類別的技巧,將它們從應用程式的程式碼中提煉出來,萃取到你自己的公用程式庫中。

如果是在一個開發團隊中,這個公用的程式庫應該是採取團隊共用的模式,相關的議題就會更多,包括:你們應該要制定一個維護公用程式庫的簡單流程,例如應該 通知那一位協調者,應該如何撰寫說明文件、如何對你加入程式庫的公用程式進行測試以維護品質、如何確保不會對公用程式庫的其他程式產生副作用、如何管控公 用程式庫的版本,以及和已開發、開發中的應用系統之間的組態管理等等。」

技術昇級狂熱及新技術焦慮
http://www.javaworld.com.tw/roller/qing/entry/%E6%8A%80%E8%A1%93%E6%98%87%E7%B4%9A%E7%8B%82%E7%86%B1%E5%8F%8A%E6%96%B0%E6%8A%80%E8%A1%93%E7%84%A6%E6%85%AE



化繁為簡,執簡御繁
http://www.javaworld.com.tw/roller/qing/entry/2007_7_25_the_way_to_simplify_%283_3%29
如何找出共通性

2008年2月24日 星期日

37個網路行銷的技巧

你的網站該如何行銷呢?來看看這篇「37個網路行銷的技巧吧」!
看一下人家怎麼做?
或還有什麼行銷手段可以用呢?

原文出處:
List of 37 Internet Marketing Techniques
http://www.ecnow.com/Internet_Marketing.htm


基礎

1. 取一個包含關鍵字的url
2. 簡單易用的網站設計
3. 將價值回饋社群
4. 利用外部資源讓使用者對內容滿意
5. 將你的url放在各個可見的角落
6. 善加利用email簽名檔
7. 將網站盡量提交到搜尋引擎、目錄網站等

優先技巧:將網站盡量推廣出去

8. 點擊付費或其他付費網路行銷
9. 部落格
10. 建立免費的線上電子報
11. 搜尋引擎優化:盡量讓你的網站在搜尋結果的前2頁
12. Podcasting
13. 找到或培養網站大使(evangelist):病毒式行銷
14. 建立合作伙伴計畫:讓其他網站也可以銷售你的產品或取得內容
15. email行銷
16. 撰寫或發佈白皮書於本網站或其他消費性指南網站
17. 發佈文章/書或想辦法在新聞中被提到
18. 舉行線上直播會議
19. 撰寫線上新聞稿並連回網站: 以下網站都有提供新聞稿服務
PRnewswire, BusinessWire, MarketWire, Internet Newsbureau,
PRweb, 24-7PressRelease, PressReleaseWriting, PressReleaseNetworking, ExtraPR, GlobalPRMedia, Eworldwire, ProfNet.org/press.html, Pressbox.co.uk, PrudentPressAgency, Pressreleasenetwork, Urlwire, Webwire, XpressPress
20. 參加商業社交聚會
21. 找出線上社群並參與
22. 建議並帶領線上論壇/社群
23. 在網站上建立wiki,讓使用者可以自行更新網站內容
24. 與產業內的適合網站互惠地交換連結
25. 設定自動回覆信件
26. 發佈調查:相關結果可用於文章、新聞稿部落格等地方
27. 主動的監看或參與線上社群
28. 舉辦拍賣
29. 舉辦比賽,贈送獎品
30. 提供線上的折價券
31. 參與公益網站
32. 在入口網站或網路商場放置連結
33. 參與付費或免費的橫幅式廣告
34. 放置付費或免費的分類廣告
35. 在自己的網站上放置分類廣告
36. 申請並贏取獎項
37. 提供一些免費服務的網頁:例如免費下載軟體等

2008年2月18日 星期一

Google Calendar API

tempo建立了台灣網路活動行事曆
並聽他在blog上介紹Google Calendar 可以發送事件簡訊至手機
這應該可以用在PR 2.0的網站
做為活動提醒的工具

2/19 補充:目前在台灣尚未提供服務
3/6 補充:網友香腸表示中華電信支援此服務,目前不需收費 http://sofree.twbbs.org/blog/2008/03/06/google-calendar-sms/


相關資料如下:
http://code.google.com/apis/calendar/:API首頁
http://code.google.com/apis/calendar/developers_guide_protocol.html
http://groups.google.com/group/google-calendar-help-dataapi :論壇
http://code.google.com/apis/gdata/clientlibs.html:Client Library

目前用Google Calendar 做出來的mesh-up
http://www.programmableweb.com/api/google-calendar/mashups

2008年2月16日 星期六

AJAX 隨手爬

Ext JS:a pure javascript library

http://en.wikipedia.org/wiki/Ext_(javascript_library)
http://extjs.com/learn/Tutorial:Introduction_to_Ext_2.0
http://extjs.com/learn/

Tempo的AJAX by Example



Tempo在AJAX环境下使用RPC
http://www.usstec.com/htmldata/5/18/2007_12/071229332540_5160_1.html

Tempo的Introduction to Google Gadget

HappyWeb 9 聚會

今天去了HappyWeb 9,主辦人tempo和cjin邀請了VeryXD的Xdite及訂便當的ingramchen

Xdite的簡報檔
http://blog.xdite.net/?p=543

http://blog.xdite.net/?p=548 技術文章

另一位ingramchen
http://www.javaworld.com.tw/roller/ingramchen/entry/happyweb_9_%E7%B0%A1%E5%A0%B1%E6%AA%94

分享一些筆記:

在網站效能優化的部份

1. 網站的瓶頸常常會發生在資料庫存取,所以可以用快取(cache)或將常用動態頁面轉成靜態頁面(static page)的方式
2. 搜尋程式(在我們網站上特別指關鍵字搜尋)因為演算法很複雜,會是網站loading的最大來源,所以可以獨立於一台主機上
3. 租用reverse proxy服務,可節省大量頻寬
4. 平衡負載(load balancing):訂便當的網站,設計時盡量以css而不用圖檔,因此以一台主機,平均Load不到1,ADSL 2M 上傳,加上平衡負載器,即可應付流量需求。

網站經營:

1. 網站服務最好維持核心的單一主軸,Simplest is best!不要confuse 使用者
2. 降低進入門檻,可以免註冊方式進行。
3. 對於工具型網站來說,Flash動畫的使用手冊及文件是必須的,而且最好快速的回應,讓網站有活著的感覺!
4. 動態的隨機出圖,可以增加page view

技術:

訂便當用到的技術以java為主,並用了許多套件,請參考。 http://dinbendon.net/do/pub/AboutPage

1. Wicket:一套java framework,可支援javascript,訂便當站長提了好幾次。
相關介紹
http://wicket.apache.org/introduction.html
http://nettrace.blogspirit.com/tag/wicket

2. log4j:設計給Java的日誌系統的framework。http://logging.apache.org/log4j/
(謝謝William的指正)

3. Lucene:java搜尋套件,另外有包成API(Solr),我有一篇文章介紹
http://lonelymisconception.blogspot.com/search/label/%E6%90%9C%E5%B0%8B

4. Quartz:java的工作排程套件,可以用來設計單一程式或者大型電子商務網站。http://www.opensymphony.com/
quartz/

5. JfreeChart:java的畫圓餅圖的套件 http://www.jfree.org/

6. ROME: 解析、產生、發佈RSS的java library

7. JUnit, EazyMock: Unit Test工具

8. JExcel API: java API 可做出Excel效果,http://jexcelapi.sourceforge.net/

今天ingramchen有提到ZK的授權方式,指出商業用途需要收費,我嚇了一跳,我現在正在進行的案子打算用ZK,若收費是不小的成本
後來查了一下ZK的licensing,採GPL與商業授權並行
http://www.zkoss.org/license/gpl.dsp
http://www.zkoss.org/license/cml.dsp

所謂的GPL,也就是MySQL的授權方式,可參考wikipedia的解釋
http://zh.wikipedia.org/wiki/GNU%E9%80%9A%E7%94%A8%E5%85%AC%E5%85%B1%...

我們若要免費使用ZK或MySQL這些GPL的軟體在我們的網站上,就必須在網站上聲明遵守GPL,讓別人可以修改、複製、再發行;但是GPL並不禁止對服務收取費用,同時只要不要再發行,就不一定要公開或開放原始碼。

2008年2月15日 星期五

Google Map API

昨天找到Google Map API中文地址轉經緯度的方法(Geocoding Class),
方法很簡單,只要用http的Get方法即可,
透過HTTP,以http://maps.google.com/maps/geo?q=地址或查詢關鍵字&key=Google Map授權碼&out=xml

* q -- The address that you want to geocode.
* key -- Your API key.
* output -- The format in which the output should be generated. The options are xml, kml, csv, or json.

除了上述方法,也可以用Geocoding物件來實作,可參考

http://5i01.com/topicdetail.php?f=130&t=491638
http://code.google.com/apis/maps/documentation/services.html#Geocoding
http://www.javaworld.com/javaworld/jw-01-2006/jw-0116-google.html?page=2

Google API簡單介紹
http://www.gather8.com/blog/article.asp?id=845
http://blog.roodo.com/syshen/archives/347151.html

用ext-js
http://ongmap.com/blog/?page_id=259

2008年2月11日 星期一

How to Program:病毒式行銷

我們常常會收到社群或交友網站某朋友寄來的邀請函,
其實是該網站提取朋友的聯絡人清單大量寄發的,
這就是所謂的病毒式行銷!
雖然很煩,但是對於剛開始起步想取得第一批使用者的網站來說滿有用的。

找了一些相關資料,關鍵字:"tell a friend"、"retrieve contacts"
MsnPlez:php script to retrieve msn contacts http://www.phpclasses.org/browse/package/4229.html

Contact Grabber:可以存特定的網站取得聯絡人,包含Yahoo, Gmail, Hotmail, AOL, Lycos, Rediff, Orkut & MySpace, LinkedIn
http://sourceforge.net/projects/contactgrabber/

OpenHotmail: 將存取windows live hotmail的HTTP 協定文件化,並提供libraries讓程序員更易撰寫存取hotmail的應用程式
http://sourceforge.net/projects/open-hotmail/

OpenContacts.NET:OpenContacts.NET is open-source library for importing contacts from popular web-mail services. Now supports: GMail, Yahoo! Mail, Live (Hotmail).
http://sourceforge.net/projects/opencontactsnet/

Get your friend's contact information: designed to manage your firend's paper daytimer (address book, appointments, business cards, phone numbers, mail, MSN, ICQ etc) in a single application.
http://sourceforge.net/projects/getcontacts/

2008年2月4日 星期一

Web Widget Maker

這次Demo的大驚喜除了地圖日記獲得票選首獎,令人興起有為者亦若是之感外,
有一個專門讓網友製作Web Widget的網站Sprout也相當有趣。

ReadWriteWeb專文介紹了這家網站,並提供線上示範
快來玩玩吧

PS. 目前Sprout尚未支援中文