2010年12月31日

yUML - 線上繪製UML的免費服務

yUML(http://yuml.me)提供線上UML繪製服務,只要呼叫它的API,傳入以純文字描述的UML繪製語法,就可以產生一組簡易的UML圖。目前提供的圖型種類有:Class Diagram、Activity Diagram及Use Case Diagram,雖然它只能無法繪製複雜的圖型,不過當我們需要用UML圖來表示一個簡單的概念時,這個服務就能派上用場。

使用 yUML API 很簡單,只要複製及修改以下的圖片位址。
http://yuml.me/diagram/class/[Customer]+1->*[Order], [Order]++1-items >*[LineItem], [Order]-0..1>[PaymentMethod]

藍字部分是指定產生哪一種類型的圖,紅字的部分必須需要經過UML編碼。以下是來自 yUML 提供的一些範例。


# Cool UML Diagram
[Customer]+1->*[Order]
[Order]++1-items >*[LineItem]
[Order]-0..1>[PaymentMethod]

Class Diagram

(start)->logged in->(Show Dashboard)->|a|->(end)
not logged in->(Show Login)->|a|

Activity Diagram

[User]-(Login)
[User]-(Logout)
(Login)<(Reminder) (Login)>(Captcha)

Use Case Diagram

創造週期性的點閱人潮

想要在某個時間點一到,網站就不斷被點閱嗎?其實有個小撇步可以應用,讓網站在設定的期間,不斷湧入人潮,而且不花一毛錢廣告。

說穿了方法很簡單,就是掌握關鍵字的趨勢,而且是週期性的熱門關鍵字。如此一來,花一次工夫建置好的內容,就可以每年都帶來一些流量成長。右圖是我以自己的網站做的實驗,在12/01至12/31之間的流量變化,說明了這個方法的有效。

Google Analytics的統計報表可以清楚掌握流量的變化,而Google Trends則是輔助用來創造流量的工具。下圖是一張Google Trends產生的統計圖表,在每年年底形成一根長柱,而且逐年遞增,請猜猜看這張圖用什麼關鍵字產生?


答案很顯而易見,就是「跨年」這個關鍵字。也就是說,在這個關鍵字熱潮來臨之前,先把網頁內容提早準備好,就有機會在這段期間創造流量成長。而提早多久準備內容,也是一個需要考慮的因素,過早準備好的內容會失去新穎性,少掉了一些被連結及點閱的機會;太接近才準備的內容可能來不及被搜尋引擎登錄。

但也不是週期性的熱門關鍵字都會逐年成長,下圖就是一張逐年衰退的例子。
「音樂祭」的關鍵字趨勢統計

2010年12月28日

推薦幾個適合HTPC的多媒體播放程式

現在的高畫質液晶電視都支援VGA、HDMI輸入,應該有不少朋友使用HTPC當作客廳的多媒體播放機吧!在播放高清畫質(Full HD)的影片,使用不同的軟體播放,效果會有些許差異,如果很在意播放品質,可以多試試幾套多媒體播放程式,調整一下最佳化設定,就可以讓影片更流暢、清晰一些。以下依照個人測試後,從效果最好到普通的排序。

Potplayer (http://tvpot.daum.net/video/live/PotplayerSpec.do)
The KMPlayer (http://www.kmplayer.com/korea/index.php)
Splayer 射手播放器 (http://www.splayer.org/)
K-Lite Mega Codec Pack - Media Player Classic (http://www.free-codecs.com/download/k_lite_mega_codec_pack.htm)
Potplayer是The KMPlayer的改良版,相當輕巧、播放品質也很棒;但為了方便比較差異,我這兩套都有安裝。Splayer最大的好處是它可以自動從射手網取得字幕,播放網路下載的「完整版預告片」很方便,不用到處找字幕。K-Lite Mega Codec算是老牌,它內建的Media Player Classic很精簡,但基本功能具備,安裝好Mega Codec之後,Windows就能吃下大多數的影片格式,只是對於高清影片並沒有特別的處理。

2010年12月27日

快快樂樂認識Grails

Ruby on Rails(RoR)給網頁應用(webapp)帶來不少敏捷開發的啟發,對於許多深陷JavaEE泥沼中的開發者,成天和一堆XML設定奮戰,被複雜的框架搞得心不從心,看到RoR快速簡單的開發方式,都會投以一種渴望卻得不到的眼神。得不到的原因是很多JavaEE的專案,相當程度地依賴一些Java穩固的基礎建設,畢竟Java的發展有十多年之久,許多成熟的解決方案並不容易在RoR找到相等的替代方案。

發展一個網頁應用程式,有許多瑣碎的事情要做,建立資料庫和查詢語法、發展商業邏輯、撰寫測試程式碼及增加一些AJAX功能。這些事情很平常,但為了讓基礎能夠完整穩固,我們可能加入Hibernate讓資料存取抽象化,用EJB或Spring Framework發展商業邏輯的元件,不情願地寫了些JUnit的測試程式,為AJAX加入DWR。為了發展一個專案去做這些事並不難,但是對於不斷在創造新產品的團隊,要一直把新的創意實現出來,很多瑣碎的事情重覆做起來也是很麻煩。

RoR幫我們把很多瑣事自動化,Grails是JavaEE的解決方案,它受到RoR的啟發,可以用來快速開發網頁應用程式,但骨子裡是Spring/Hibernate這些強大的基礎。Grails使用Groovy(Java的Scripting語言)為基礎,可以用比Java更簡潔、動態的語法開發程式。Grails實現了MVC架構,以Groovy語法開發Model/Controller程式碼,而View則是以GSP(Groovy Server Page)或JSP(搭配Grails自訂的Tag)設計。
The Grails ecosystemis a powerful confluence of people,ideas, and technology.
參考資料

  • Grails in Action, 2009, Manning

2010年12月26日

用VirtualBox體驗Ubuntu 11.04的Unity桌面

Unity是Ubuntu針對小筆電(netbook)設計的桌面外觀,在明年(2011)發行的Ubuntu 11.04(代號natty),將會把Unity變成Desktop版本預設的Gnome桌面。這個決定當然也引發一些反對的聲音,但不想用它的使用者,可以在登入前選擇Classic模式切換成傳統桌面。

如果想要搶先體驗11.04的Unity桌面功能,可以使用VirtualBox 4.0的虛擬機器安裝Ubuntu 11.04。VirtualBox 3.2經測試並無法順利啟用Unity,原因是Unity的桌面特效需要硬體3D支援,即使打開VirtualBox 3.2的3D顯示加速選項,仍無法在Ubuntu 11.04中使用3D功能。

目前Ubuntu 11.04最新發行版是Alpha1,也可以在Daily Build取得每日打包的最新版本。VirtualBox 4.0的安裝請參考這篇

要啟用Unity桌面,除了在VirtualBox 4.0安裝Ubuntu,還需要兩項調整。
  1. 在虛擬機器的設定值中,找到「顯示、視訊、延伸功能」,將「啟用3D加速」的選項打勾。
  2. 在虛擬機器中「安裝Guest Additions」
this week in linux發表的「First Look At Ubuntu 11.04 Natty Narwhal Alpha 1」短片:

免費強大的虛擬機器軟體 VirtualBox 4.0 發佈

VirtualBox 4.0在12/22日(2010)發佈了,這個版本跟3.2版最大的差異在使用者介面有一些調整。VirtualBox是一款免費的x86虛擬機器軟體,支援常見的Windows/Linux/MacOSX/Solaris等作業系統,可以安裝的客體作業系統(Guest OS)也非常多,功能媲美VMWare等商業軟體,操作簡單執行效能很不錯。對於一台電腦想要安裝多種作業系統,例如在Windows 7下執行Windows XP、Ubuntu Linux,使用VirtualBox可以讓多個作業系統同時執行,對於擁有多核心處理器(雙核以上)、高容量記憶體(4GB以上),這是一個充分發揮電腦效能、一台電腦當多台用的方式。

先前VirtualBox 3.2版本有區分完整版及OSE(Open Source)版本,OSE版少了USB2.0的支援等,但是到了4.0就沒有這種區分,但是安裝好之後預設是不支援USB2.0功能,必須另外下載安裝Extension Pack(個人使用免費,下載後滑鼠點擊即可安裝)。

  • VirtualBox 4.0 Oracle VM VirtualBox Extension Pack All platforms
    Support for USB 2.0 devices, VirtualBox RDP and PXE boot for Intel cards
連結
  1. 版本差異說明(http://www.virtualbox.org/wiki/Changelog)
  2. 下載區 (http://www.virtualbox.org/wiki/Downloads)
  3. 下載區 for Linux (http://www.virtualbox.org/wiki/Linux_Downloads)
  4. 重灌狂人VirtualBox Windows版安裝教學 (http://briian.com/?p=5690)
  5. VirtualBox for Ubuntu Linux版安裝教學 (http://www.webupd8.org/2010/12/install-virtualbox-40-stable-in-ubuntu.html)
  6. 免安裝中文版 (http://azo-freeware.blogspot.com/2008/09/virtualbox-166.html)
  7. phpVirtualBox AJAX網頁版本的遠端虛擬機器管理 (http://code.google.com/p/phpvirtualbox/)

Python的工作機會 - 精靈數位科技

今天偶然從網路廣告點進一家「精靈數位科技」公司的網站,發現他們正在找Python開發工程師,這在台灣算是不多見的職缺。從104的公司簡介,不難看出精靈數位的前衛的做法,他們的產品以Web 2.0、iPad、Cloud、SmartPhone相關應用為主,目前推出的兩項產品服務,一個是智慧型手機的餐廳應用,另一個則是雲端服務管理系統。

在Web 2.0網站應用的部份,精靈數位採用Python程式語言及Django開發框架(web framework),而非業界普遍保守的選擇:.NET、PHP、J2EE。這種前衛的選擇看似具有風險,但其實Django從2005年迄今也歷經5年發展,而Python從1991年發展到現在,又是Google所採用的主要開發語言之一,說需要擔心似乎是有點多慮了。

這讓我想到「選擇程式語言」,對於一家新創公司的發展,或許有著某種重要程度的關聯。

一家公司採用Python(或Ruby?)作為主要的開發工具,會有什麼有趣的結果呢?如果這家公司的文化夠創新,或許就能夠不斷吸引到「對軟體創作真正有興趣的那群人」。我們不能說懂Python的人就比較厲害或怎樣;但是同樣是大學畢業的新鮮人,如果已經熟悉Python及相關的解決方案,我們就能臆測這個人八成是很熱愛創作軟體,曾經下過不少苦心鑽研,對技術的熱誠超乎常人,未來投入相關的開發工作也肯定具有一定水準的生產力,不需要太多鞭策他就會自己努力。

以目前來說,在高中職的課程安排中,通常是教C或VisualBasic,到了大學則是教進階一點的C/C++、Java等。有些學生會依照自己的興趣,利用選修課或專題的機會,學習其他非主要的核心科目,例如Linux、SmartPhone的程式設計。

但是像Python的學習就需要花費額外的不少功夫,一來不懂的地方問老師可能也不懂;想跟同學朋友討論,他們不是沒聽過就是問你學這個要幹嘛;就算學會了對考試也沒幫助,市面上能參考的書不多,幾乎只能存錢買粉貴的原文書,或從網路的原文資料一點一點慢慢吸收;想要找到同好,就必須犧牲晚上或週末,老遠跑去參加人數不會太多的聚會;而且還可能以後工作也沒機會用到,但在一股狂熱的驅使下,還是無怨無悔地努力學習。

簡單地說,當多數的大學生晚上都窩在宿舍或實驗室打電動,或是出去聯誼逛街唱歌,而有人卻不合群地一直努力學著Python,這樣的人,你說他能不變態嘛?

當然一家公司的組成,也不能都是前衛的狂熱份子,因為他們不用人推就會向前走,但想拉的時候卻也拉不住。還是要有守成、穩紮穩打的一群人,才能維持劈荊斬棘換來的成果。

Google Demo Slam: Streetview Road Race 虛擬馬拉松橫越美國

影片中的兩位老兄,用Google Map的Streetview功能,跑了一段橫越美國的虛擬馬拉松,從舊金山直奔紐約。什麼時候才能開始用街景服務虛擬台灣環島呢?!

2010年12月23日

升級MySQL 5.5的五個理由

Ronald Bradford是一位MySQL專家,日前他在部落格發表一篇文章,列出五個將MySQL升級至5.5版的理由。
  1. Improved integration
    InnoDB由Plugin正式成為內建預設的儲存引擎。
  2. Improved performance
    可以在多核心的硬體上執行大量執行緒時增加效能,InnoDB也帶來一些效能的加強。
  3. Improved recoverability
    更好的可回復性。
  4. Improved instrumentation
    提供較多可以協助找出效能問題的資訊。
  5. Improved development methodology
    目前Oracle對MySQL作出的計畫是正面的。
這篇文章看起來重點還是在更換InnoDB的部分,我的專案本來就是採用InnoDB,參數也是為InnoDB調整,還沒出現非升級不可的理由。所以若知道怎麼在MySQL 5.1使用和調校InnoDB,還是繼續用吧! :XD

參考資料

《他們在畢業的前一天爆炸》第一集 1-5 完整

前天,睡前我用Android手機上YouTube隨意找了些節目,發現公視《他們在畢業的前一天爆炸》5集迷你連續劇,劇情是一群高中生的校園生活。這是部很會利用網路做行銷的電視短劇,喜歡這個節目的朋友,在YouTubePTS公共電視台有提供720p的HD畫質節目,劇本的PDF在這邊,也可以參觀部落格或加入Facebook粉絲專頁

很多節目都是先在電視上首播,之後才被網友錄製成短片放上YouTube,但是這麼一來畫質就降低了不少。《爆炸》劇的鄭有傑導演很有創意,他在12/18日電視首播之前,就將第一集用高品質的影片格式(HD 720p)完整上傳至YouTube,在正式開播前就先在網路上"爆炸"。

如此一來,12/18日連續播出第一集和第二集,相信很多看過的人,都會想知道第二集的故事怎麼發展,而在第一時間坐在電視機前面收視,不必花大錢宣傳就能得到更多收視率。然而要透過網路宣傳,第一件事情就是先把內容的品質做好,否則結果就會適得其反。









[心得] GUNNAR 數位光學眼鏡 WEEZER 調酒師 (瑪瑙黑)

由於我的工作有超過90%都必須依賴電腦才能完成,即使不是工作,很多休閒娛樂也必須靠電腦,不管什麼評比都是不折不扣的重度電腦依賴者。結果就是,一星期至少有超過三天,一天必須看螢幕超過10個小時。

雖然使用電腦十多年,只有輕微近視(50及75度),但眼睛疲勞痠痛、紅腫及乾燥的問題,卻是經年累月的困擾。在開始依賴電腦工作之後,我很重視螢幕的問題,桌上型的螢幕至少要DELL UltraSharp系列(IPS面板),筆記型的螢幕則必須挑選霧面。

在電腦前愈是專心工作(還好我經常因為各種原因分心),愈是容易成為電腦視覺症候群(Computer vision syndrome,CVS)患者。最好的預防方式是多休息,並使用醫生建議的眼藥水滋潤保養。可是這說來容易要做到卻很難,以軟體設計的工作來說,必須專注一段時間後,才能進入有效率的工作狀態(腦力時間),如果工作15~30分鐘就要眺望遠方的樹林,或是起來到處走走,就很容易打斷高效率的工作狀態,要重新進入高效率的工作狀態,又必須重新花更多時間盯著螢幕。

雖然現在的(面板好一點的)液晶螢幕,長時間盯著看,比較不會像傳統CRT那樣傷眼睛,可是也更容易因此在電腦前一坐就忘了休息。最近注意到一個電競玩家專用的光學眼鏡品牌「GUNNAR 」,已經悄悄在國內正式代理,台中市靠近大里也有家實體店面(電腦零組件的專賣店)可以試戴。我試戴了幾款後,決定先買基本款的WEEZER回家使用一段時間,看看實際的效果。
GUNNA WEEZER 黑
剛開始配戴GUNNAR眼鏡,最明顯的視覺差異是畫面變得偏黃、並稍微放大,而且會略感頭暈。我在使用2~3次之後,只要配戴個十分鐘左右就會習慣,也不會有頭暈的現象了。但如果平常去電影院用3D眼鏡會暈的人,說不定要花比較多時間才能適應,在討論區也看過有人說戴了一星期還是頭暈,最後就退貨,所以這還是要考慮到個人實際使用的差異。

GUNNAR眼鏡採用德國ZEISS認證的鏡片,黃色鍍膜據說可以阻絕對眼睛有害的藍光。它的黃色濾光鏡片,跟一般黃色的運動防風鏡不一樣,用傾斜角度可以明顯看出GUNNAR鏡片將藍光反射。

它對我比較有用處的地方,是在編輯白底黑字的畫面時,眼睛要專注在某一段落會比較容易,這可能是光線經過調節,讓大片的白色區塊變得不會那麼刺眼。可以做個小實驗,準備一份白底黑字文件,有滿滿一篇文字,字體用標準的12、行高固定100%,和螢幕保持40~50公分距離,眼球肌肉放鬆盯著某個段落看一段時間。對我來說,要在眼球肌肉放鬆的狀態看完一段文字很困難,當要專注看那段文字寫什麼的時候,眼睛就會不由自主地緊繃。

我在這篇文章寫了很多的文字,其實就是想測試GUNNAR的效果,例如在編輯這一段的時候,如果戴著GUNNAR眼鏡,可以比較容易眼球放鬆的狀態下,專注編輯這個段落。但拿掉眼鏡裸視的狀態下,眼睛的專注力就很容易被上下段落影響,而必須更用力才能_這一段文字。

說不定使用比較好、具偏光效果的螢幕保護貼,會有類似的效果;不過我自己有十多台螢幕,並不想要每台都貼(很貴,而且有些螢幕不是我自己的)。透過螢幕的亮度、對比及色彩調整,也可以讓眼睛舒服一點,但是編輯文字、看電影、電玩、上網或繪圖最合適的設定都不一樣,每次都要切換很麻煩。如果戴上眼鏡就能解決工作時的需求,那算是個花錢換方便的解決方式吧。

可能因為我自己對鏡框很挑剔,GUNNAR讓我覺得最大的敗筆,就是沒有看到一款會非常喜歡的鏡框,所以我只對三千元以下、功能取向的基本款又興趣,如果未來能夠有不同品牌結合的特別設計款,例如GUCCI鏡架+GUNNAR鏡片,那才會有多犧牲一些小朋友的衝動。而萬元以下的GUNNAR眼鏡都是沒有度數的,對於有近視而且不想戴隱形眼鏡的人來說,想要訂製專用的有度數鏡片,差價已經足夠多配幾副名牌眼鏡。

因為明年(2011年)開始法規修訂,此類眼鏡不能在網路販售,PCHome年底前GUNNAR七五折出清,價格下調到基本款$2,550就可以入手。因為PCHome可以零利率分期付款,利用這次優惠我再訂了一支PPK,這款跟WEEZER主要的差異是「扁」鏡架,這個設計是方便長時間戴全罩式耳機,寬扁的鏡架比較不會壓迫導致疼痛。

GUNNAR PPK 黑
文章連結

2010年12月22日

PPStream禁播歐美影集

歐美影集在這個月,徹底從PPStream網路電視消失。之前,只要安裝解鎖版或是累積一定的在線等級,就可以看得到歐美影集。在台灣的第四台節目質量不佳的現況下,P2P網路電視原本是個很棒的替代品,不過看樣子對岸當局也開始(被施壓?)重視版權問題。

這次的事件影響包括PPS、土豆網及優酷等,如果一直沒有正式合法的授權,或許很快就會出現地下化的網路電視。

相關新聞連結

2010年12月20日

Google將WindowBuilder及CodePro Profiler捐贈給Eclipse基金會

Google在今(2010)年12月15日,宣布將WindowBuilder及CodePro Profiler兩套軟體,捐贈給Eclipse基金會。預計在明(2011)年六月釋出的新版Eclipse(代號Indigo),就會內建這兩套軟體的功能。在此之前,開發者必須以附加方式自行安裝。 (請參考iThome新聞)

WindowBuilder Pro是一套所視即所得的圖形介面開發工具,同時支援Java平台的SWT(Standard Widget Toolkit)、Swing兩大Java GUI主流,以及RCP(Rich Client Platform)、XWT(XML Windowing Toolkit)及GWT(Google Web Toolkit)等。在過去,Eclipse發行的Java開發工具,並沒有內建視覺化的UI設計工具,開發者必須另外安裝其他廠商的附加軟體,才能提供類似VisualStudio、Delphi或NetBeans等,拖曳方式建立視窗程式的開發環境。
WindowBuilder (Eclipse Proposals)
CodePro Profiler是Java應用程式的分析工具,可以用來檢驗執行中的程式,找出效能的瓶頸,偵測記憶體漏洞,解決執行緒同步處理的問題。在Eclipse目前的提案中,新的發行版將加入RAT(Runtime Analysis Tools)功能,就是來自於CodePro Profiler。
CodePro Profiler (Eclipse Proposals)
先花錢把軟體(公司)整個買下來,然後再捐出去,谷歌真牛啊!

2010年12月19日

Seagate Barracuda ST31000528AS-3Y/P硬碟測試

最近入手一顆SEAGATE 7200RPM 1TB(ST31000528AS)的硬碟,應付已經不敷使用的Linux農場伺服器。只是運氣挺背的,第一次裝上去,H.D.D. Smart就已經出現重新分配磁區數量(Reallocated Sectors Count)異常,後來換回一顆新的就正常了。

測試環境:Ubuntu Linux 10.04 LTS x86_64

hdparm -Tt 測試結果

  •  Timing cached reads:   6950 MB in  2.00 seconds = 3476.99 MB/sec
  •  Timing buffered disk reads:  352 MB in  3.00 seconds = 117.18 MB/sec

FACEBOOK網路行銷超簡單(二) 零成本發行優惠券

過去要舉辦促銷活動,不僅要花錢又很麻煩,不但要準備印刷品(實體的折價券或摸彩券等),還要大肆宣傳,免得活動都過期了還沒什麼人知道。

在Facebook的時代,可以透過線上免費工具,結合社群的力量舉辦促銷活動,這個過程相當簡單,這篇教學以Facebook的『好康活動 Hot deals』為例,示範十分鐘之內可以完成的線上舉辦促銷活動。

首先,你還是要有一組Facebook帳號,完成登入,並成立粉絲專頁
接著,打開『好康活動 Hot deals』的主網頁(http://www.facebook.com/myhotdeals)。
點選左上方的『前往應用程式』,會進入熱門好康的應用程式畫面。
再點選管理好康活動的頁籤,從管理粉絲專頁的下拉選單中,挑選一個要舉辦活動的粉絲專頁。
在管理活動的選項中,選取製作優惠券
填寫優惠券的各項資料及設定,按完成後送出。
製作好的優惠券,可以將訊息透過Facebook發佈給朋友,這時候,平時有沒有認真經營個人交友及粉絲團,就會影響到有多少人能看到一手訊息,但可別為了商業活動而製造朋友不喜歡的垃圾訊息,那結果就會適得其反了。

FACEBOOK網路行銷超簡單(一) 成立粉絲團

在全民瘋Facebook的時代,除了玩開心農場,還可以利用這個廣大的社群做什麼事呢?相信你已經感覺到許多企業,正在利用Facebook做行銷。這些行銷方式,不會像電視廣告一樣打斷你的娛樂,也不會像垃圾郵件ㄧ樣,讓你刪到手軟、厭惡至極,而是透過你的交友圈來傳遞,好的行銷廣告,會一傳十、十傳百,最後出現在你面前,而你也可能再將它推薦給你的朋友。

如果你擁有以下任何一項,那麼你該認真考慮成立Facebook粉絲團了!
  1. 擁有一間公司
  2. 創造了某一項產品
  3. 成立一個品牌
  4. 經營一家店
  5. 想打響個人的名號
  6. 部落格作者
  7. 寫了一本書
  8. 拍一系列攝影作品
  9. 發表一項專題
  10. 具有特殊技能?!
要動手玩Facebook網路行銷,你不必花錢去聽演講,也不用聘請專家顧問,你只需要擁有一組Facebook帳號,然後從下面的連結,開始成立你的第一個粉絲專頁。


可以參考以下的教學:



Mac OS X 的螢幕擷圖功能

MacBook的鍵盤沒有 [PrtScr(Print Screen)] 按鍵,所以要擷取螢幕畫面,必須透過組合鍵完成。雖然剛開始用起來比較麻煩,但習慣之後就會發現,內建就能夠選取自訂區域的功能,對於編寫文件時,很容易處理只需要擷取部份畫面的需求。

儲存成檔案

  • [Command] + [Shift] + [3]: 整個螢幕擷圖後儲存成桌面的圖片檔案
  • [Command] + [Shift] + [4]: 接著再選擇一個區域,將自定區域擷圖後儲存成桌面的圖片檔案
  • [Command] + [Shift] + [4] + [Space]: 接著再點選一個視窗,將視窗擷圖後儲存成桌面的圖片檔案


複製到剪貼簿

  • [Command] + [Control] + [Shift] + [3]: 整個螢幕擷圖後複製到剪貼簿
  • [Command] + [Control] + [Shift] + [4]: 接著再選擇一個區域,將自定區域擷圖後複製到剪貼簿
  • [Command] + [Control] + [Shift] + [4] + [Space]: 接著再點選一個視窗,將視窗擷圖後複製到剪貼簿


在Leopard作業系統,自訂選取區域時還可以搭配以下的按鍵(在選取區域範圍時按住不放)。

  • [Space]: 固定目前的選取範圍,移動滑鼠時,選取範圍的位置也會跟著改變。
  • [Shift]: 限制選取範圍只能往水平或垂直方向改變。
  • [Option]: 以選取範圍的中心點作為基準點,移動滑鼠時,可以控制選取範圍放大或縮小。


本文同步發表於: http://lyhdev.com/mac:keyboard_shortcuts

2010年12月12日

不必花錢的進修,史丹佛開放課程

Stanford on iTunes U (http://itunes.stanford.edu/) 是史丹佛大學的線上課程,只要透過Apple iTunes軟體就可以免費訂閱,課程共分為十三類:

  • Business
  • Engineering
  • Fine Arts
  • Health & Medicine
  • History
  • Humanities
  • Language
  • Literature
  • Mathematics
  • Science
  • Social Science
  • Society
  • Teaching & Education

在安裝好iTunes軟體後,打開下列的網址,就會自動開啓iTunes Store,在iTunes Store免費訂閱最新的課程影片。

目前最令我感興趣的是,Stanford的Science分類下,有iPhone程式開發課程。

2010年12月9日

發揮多核心處理器的運算效能,使用 C# 及 Task Parallel Library

.NET Framework 4 提供一組平行處理函式庫「Task Parallel Library」(簡稱TPL),可以很容易用 C# 或 VB.NET 寫出多核心環境的平行運算程式。

使用TPL必須先引用Namespace:
using System.Threading.Tasks;

以下範例使用 Math.Sqrt 計算平方根:

//循序處理的寫法
for (int i = 0; i <= int.MaxValue/2; i++)
{
  Math.Sqrt(i);
};



//平行處理的寫法
Parallel.For(0, int.MaxValue/2, i =>
{
  Math.Sqrt(i);
});



測試環境是 Intel Core2Duo P8700 (2.53GHz雙核心)、Windows 7 32bit作業系統。從CPU Usage的圖形可以看出,循序處理的版本要花費很長的時間才能完成,過程中CPU也僅有60-70%的使用率,根本無法發揮多核心電腦應有的效能。使用平行處理的版本,整個執行過程耗費的時間減少很多,而且兩個CPU都是以100%滿載運作。

※ 本文同步發表於「dotNET探索樂園

2010年12月8日

12項程式設計應該避免的錯誤

一、未善盡責任
基礎知識不足或偷懶,使得程式碼不夠穩固;例如數字計算未事先避免divide-by-zero、將字串寫入資料庫之前沒有檢查最大長度。程式交付到使用者手上,往往都會被以意想不到的方式操作,因此各種潛藏的錯誤都可能發生,甚至造成資訊安全漏洞。
程式語言或開發工具的改善,或許可以幫助我們免於整個系統掛點,例如Java程式的Exception機制,在某個功能拋出Exception時,即使我們沒有加以善後,程式仍然可以繼續執行;但是這些機制並不能真正幫助我們解決問題,因為要解決問題,必須有業務面的考量。舉例來說,執行某功能發生NullPointerException時,如果我們只是catch、顯示error stack訊息之後就置之不理,能夠防止系統crash,對於開發人員也很容易從錯誤訊息得知解決方法;但是對於不了解系統內部設計的end user而言,將很難從中找到修正的做法,例如在執行此功能之前必須先做某項設定之類的操作。

二、過量不必要的細節
假設使用者在網頁填寫一個電子郵件信箱,送到伺服器時必須經過十個function處理,為了徹底防止不正確的資料,每個function都用regular expression檢查信箱格式、並且建立SMTP連線測試是否存在真實的郵件伺服器。這種設計固然做到滴水不漏,但無止盡的過度設計實際上並不可行,因為程式設計必須考量系統資源、網路頻寬、回應時間、開發時程、執行效能等。

三、控制不夠簡化
開發Ruby on Rails應用的程式設計師,會習慣一種「約定取代設定(convention over configuration)」的做法,當程式中建立一個Name類別的model,擁有兩個屬性first及last,那麼就可以預期資料庫中,也會建立命名一致的Name資料表及first、last兩個欄位。程式開發時採用一些約定成俗的慣例,就可以省去很多額外設定的麻煩。

四、對框架過多的託付
框架幫你處理掉很多瑣碎的事情,例如Ruby on Rails將約定的URL格式轉換成controller method呼叫,通常不必知道它怎麼運作。Mike Morton(一位程式設計師)說:「它們(框架)就像用轎子把你抬上九成的山路,但剩下的那一成必須靠你自己攜帶氧氣攀岩才能完成。」

五、太過相信客戶端
我們無法預期網路另一端的使用者怎麼操作系統,就像一個網頁的表單資料,即使我們已經在瀏覽器端用JavaScript做好一些基本的檢查,但送出的資料的過程仍可能遭到惡意竄改,例如使用者用某些瀏覽器外掛,在表單填入原本不允許的資料,或是駭客偽造表單資料進行SQL Injection攻擊。即使是我們自己的程式回傳的資料,只要是來自客戶端,就不該相信它一定照規矩,檢查資料是不是存在威脅很難做得徹底,因此一個好的實踐方式,就是只讓符合條件的資料通過。

六、不夠信任客戶
有時候降低一些對安全的要求,可以讓程式開發比較容易,使用者也比較好操作。例如一個提供八卦閒聊的論壇系統,如果註冊時需要自然人憑證及信用卡驗證,每次登入都需要動態密碼及一連串身分辨識,每一次送出的訊息都經過特殊加密,雖然在資安方面可能有極高的成效,但肯定不會是個好的系統。

七、重度依賴神奇魔術盒
當你買了一個神奇的資料庫備份軟體,你不必管它怎麼運作,因為銷售員告訴你「It just works.」是否就此高枕無憂,再也不必擔心資料庫發生問題?許多買來的函式庫、開發工具很好用,我們只需要知道怎麼用,而且大部分的時候它都很順利,但是有一天它鬧個彆扭,災難就此發生。

八、重新發明輪子
如果你需要一個加密的演算法,應該要找一個好的演算法實作,如果覺得它不夠好,那麼就動手去改善它(如果是自由軟體那麼更需要這樣做);反之,如果你丟棄別人已經辛苦幾年做出的成果,想要重新打造一個自己專屬的演算法,那不僅是浪費時間,也等於是向駭客敞開大門。

九、過多的功能讓使用者困擾
智慧型手機的兩大主流平台,iPhone及Android各自有其愛好者,Android在安裝新軟體時,很詳細地將新軟體有哪些存取權限告訴使用者,讓使用者自己判斷新軟體潛在的安全問題,例如一個可以存取SIM卡資料的軟體,就有可能透過網路把你的個人隱私洩漏出去。但是對於end user而言,根本看不懂這些涉及技術面的問答題,他們最後還是會在不懂有哪些潛在危害的情況下確認安裝。iPhone贏在操作起來"通常"比較簡單,讓完全不懂科技產品的消費者,也能很快就愛上這款新奇的科技產品。試想在登入一個網頁時,你還要選擇是否啟用SSL、GZIP網頁壓縮,要發表一篇文章時,還要設定使用哪一種所視即所得編輯器,使用者哪管這些?大多數人喜歡的系統就是,方便、不必太多思考(參考 Don't make me think)。

十、使用者想的和你不一樣
有些Web郵件系統沒有「新增子資料夾」的設計,但可以用標籤來達到同樣的功能,標籤比子資料夾好用,因為一封郵件設定了多個標籤,就有同時存放於多個資料夾的效果。但並非每一位使用者都願意接受這種操作模式,他們就是喜歡先建好一堆樹狀的資料夾結構,等真的收到郵件的時候,再決定分類到哪個資料夾。

十一、封閉程式碼
許多發展商業軟體的公司,總喜歡用盡各種手段保護程式碼不會洩漏,不但要編碼加密,還要加入防止逆向工程的設計。對軟體公司而言,程式碼是一項資產,要把它分享出去,是件有挑戰的事。並不是每一種程式碼都是需要保護,有些程式碼可以公開,可以藉由分享變得更好;例如在一個專案中,實作了一組方便的郵件發送函式庫,把它公開分享,並不會影響專案的收益,卻能得到知名度的提升及使用者意見回饋的好處。

十二、開放不是萬靈丹
有大量的開放源碼專案在SourceForge、GitHub、Google Project Hosting等網站上線,但僅有少數能夠獲得人們參與維護、修正及擴充代碼。如果軟體專案缺的是人力,即使把它變成開放源碼的方式分享出去,也不見得就能獲得問題的解決,因為很容易找到其他相似的替代品,即使現在沒有,也會在未來出現。而且將產品開放,可能也意謂著將失去財務上的支持,更可能被拿去做違反自由軟體精神的應用,例如某些程式碼被拿去開發成商業產品的一部分,並且衍伸的程式碼並沒有同樣分享出來或回饋給創始者。

參考資料

樂趣,工作的原力 (五) 解除迷思

天下雜誌網站近日發表一篇「好玩為成功之本」,其內容最早刊登在2004年的Cheers快樂工作人雜誌。這篇文章很適合想找回工作樂趣的人參考,以下斜線部份節錄片段文字與讀者分享。

過去,組織時代強調人人一致,但是創意階級卻主張獨立性、自我陳述、包容差異,以及多面向的經驗。最明顯的現象,就是從前人們透過職業(農夫、工人……)來識別身分,但今天更多人喜歡用各種創意活動,像作家、美食家、設計師、顧問...來稱呼自己。


無獨有偶,德國最暢銷的企管書作者萊納德史布萊格爾(Reinhard K. Sprenger)與理查隔海遙相呼應。他在新作《個體的崛起》一書中提出,今天的經濟環境中,只有「獨具特色」的人,才有機會出人頭地。什麼叫「獨具特色」?史布萊格爾的看法是:「專注於最拿手、最能展現天賦的領域」,而且這項能力能受到肯定、得到讚許。 (節錄自天下雜誌好玩為成功之本)


個體的崛起」這本書,在「IT自由工作者」這篇文章中也曾經推薦,但出版已經有五年,在一般書店不太好找;近期有一本「工作大解放」,由37 signals創辦人著作,也是值得閱讀的一本書


工作的趨勢在改變,社會對人才的衡量,不再是這個「人」隸屬哪一家公司,而是這「個人」具備什麼樣的能耐,在把公司、頭銜的光環拿掉之後,還存在什麼樣的價值。過去的管理思維著重團隊領導,不容許個人主義、也不重視員工的個體性,企業希望把員工組織成軍隊般有效率地運作,有效地為組織的利益奮鬥。


傳統企業的運作方式,讓中年失業成為許多忠誠員工的噩夢,他們甚至在走投無路的那天,還不懂是誰偷走了乳酪。


傳統的工作,一切的價值建立在組織之上,因此員工離開的時候,通常需要一筆足夠過下半輩子的退休金;如果在這一項保障兌現之前,就失去了工作,要捲土重來並不容易。


過去,只要在一家夠大的企業待得夠久,往往不必擔心年邁的生活。

但是當多數企業不再能提供這種保障時,工作者自己必須及早換個腦袋思考,在長年工作之後,到底累積多少真正屬於自己的經驗、知識及學問,結束一段工作生涯後,能夠在下一個工作生涯創造更高價值。

即使是處在民主自由的社會,我們多數人其實都是被控制的。為了讓每個人都往同一個目標努力,有個手段叫作「排名」。


「排名」在台灣社會過度被重視,在學校裡,成績的排名決定哪些人優秀、需要被獎勵;升學時,排名決定哪些人可以進入優秀學校、繳比較低的學費;找工作時,排名決定哪些人可以進入百大企業;在公司裡,績效的排名決定哪些人可以被升遷、加薪。為了不要在排名上落後他人,許多人兢兢業業,但現實是一種排名只會有一位第一名,而多數的人最後被淘汰、被犧牲。

當名列前茅不再能保障你擁有理想的生活,那又為何要在意排名呢?

要成為快樂的工作者,得跨出無視於排名的第一步,不要再去競爭多數人都想要的第一名,不要再去擠百大企業,不要再去埋首為得到鐵飯碗辛苦拼命。每個人都有機會在自己獨特天賦的領域成為佼佼者,做自己的第一名並不難,把快樂加進來計算,獲得的報酬也不見得比較低。

2010年12月7日

VirtualBox 虛擬IDE及SATA控制器效能實測

最近在研究怎麼讓VirtualBox跑快一點,從Google找到多篇資料,都是講硬碟控制器從IDE轉換成SATA之後效能會提高,於是就自己動手測試一遍。

HOST作業系統
$ uname -a
Linux desktop 2.6.35-23-generic #41-Ubuntu SMP Wed Nov 24 11:55:36 UTC 2010 x86_64 GNU/Linux


HOST處理器
kyle@desktop:~$ cat /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 30
model name : Intel(R) Core(TM) i5 CPU 760 @ 2.80GHz
stepping : 5
cpu MHz : 1197.000
cache size : 8192 KB


HOST記憶體
$ free
total used free shared buffers cached
Mem: 8185352 8111476 73876 0 1557100 2566644
-/+ buffers/cache: 3987732 4197620
Swap: 2000088 92 1999996


HOST硬碟讀取測試(硬碟格式化為ext4)
$ sudo hdparm -Tt /dev/sda
/dev/sda:
 Timing cached reads:   17238 MB in  2.00 seconds = 8627.19 MB/sec
 Timing buffered disk reads:  268 MB in  3.00 seconds =  89.26 MB/sec


VM硬碟控制器(IDE及SATA)
Intel(R) 82371AB/EB PCI Bus Master IDE Controller
Intel(R) ICH8M-E/M SATA AHCI Controller


使用IDE控制器

使用SATA控制器

結果,改用SATA控制器沒比較快,不過這次的實驗是用VMDK的虛擬磁碟,而不是VBox自家的VDI格式,還有些其他的影響因素,等下次改用乾淨的實驗環境再比較。

最近的開發環境愈來愈依賴虛擬機器,再過不久應該會將工作站升級到16GB RAM/64GB SSD/2TB * 4 RAID5的規格。
lyhcode by lyhcode
歡迎轉載,請務必註明出處!