我Google Reader訂閱的幾個Blog都同時講呢件事,大概係中國Microsoft一個新網站抄襲另一個叫Plurk的網站。
可以睇下以下兩個網站就知什麼事。
電腦玩物 : 中國微軟的MSN聚酷疑似剽竊噗浪程式碼
Live Sino : MSN 中国“抄袭门”:聚酷抄袭 Plurk 界面和源代码
據說是Layout Design連Javascript Source Code直接Copy過去....
但是反而由這件事我才知道原來中國Microsoft部份產品是一間外判公司承包的 -
原文 : 美斯恩(MSN 中国)的品牌危机?
咁就解開我一直的疑問,記得之前我有用MSN群的時候,我實在不太明白Microsoft中國為什麼接受咁多廣告,而且那個MSN群的PlugIn又不似是Microsoft的作風。
原來中國Microsoft把部份業務外判,是次抄襲事件,就正正反映電腦業務外判問題。
2009年12月16日星期三
2009年12月15日星期二
4 iPhone UI & Fluid TouchFLO Library for Windows Mobile
類似iPhone的轉頁效果,HTC公司早以用TouchFLO做到,但其實.NET CF上的軟件,自己都可以做。
CodePlex上就有4個這類Library,令你寫的WM軟件更加"iPhone"。
首先是iPhone UI,模擬iPhone介面,程式Menu:
http://iphoneui.codeplex.com/
較深入可以看看 : http://www.codeproject.com/KB/mobile/IPhoneUI.aspx
另外3個就是TouchFLO換頁效果,
Touch UI
http://touchui.codeplex.com
Project Description :
This sample will help you build great looking and touch-enabled user interfaces for Windows Mobile and Windows phone (using compact framework).
Mobile UI
http://mobileui.codeplex.com/
Project Description :
An application framework for developing composite user interfaces (similar to Silverlight/WPF) on Windows Mobile 5 and 6 devices. It contains controls and graphic primitives that support rotation, scaling, animation, behaviours and transitions. Make awesome looking WinMo apps.
Fluid - Windows Mobile .NET Touch Controls
http://fluid.codeplex.com/
Project Description :
Fluid is a .NET 2.0 control library for Windows Mobile 6.0/6.1 with touch controls.
CodePlex上就有4個這類Library,令你寫的WM軟件更加"iPhone"。
首先是iPhone UI,模擬iPhone介面,程式Menu:
http://iphoneui.codeplex.com/
較深入可以看看 : http://www.codeproject.com/KB/mobile/IPhoneUI.aspx
另外3個就是TouchFLO換頁效果,
Touch UI
http://touchui.codeplex.com
Project Description :
This sample will help you build great looking and touch-enabled user interfaces for Windows Mobile and Windows phone (using compact framework).
Mobile UI
http://mobileui.codeplex.com/
Project Description :
An application framework for developing composite user interfaces (similar to Silverlight/WPF) on Windows Mobile 5 and 6 devices. It contains controls and graphic primitives that support rotation, scaling, animation, behaviours and transitions. Make awesome looking WinMo apps.
Fluid - Windows Mobile .NET Touch Controls
http://fluid.codeplex.com/
Project Description :
Fluid is a .NET 2.0 control library for Windows Mobile 6.0/6.1 with touch controls.
香港高登Windows Mobile版
現在寫的Windows Mobile版高登,進度非常之好,我花了星期六和星期日各一點時間,已經寫好大部份討論區的功能。
進度如下:
最困難除了高登Server本身非常之慢,測試困難之外,其次就是介面上,手機軟件的世界和Windows軟件可謂兩個世界。
電腦上,空間比較大,設計介面上自由度大很多,但手機上,要如何盡量利用320x240的有限空間顯示資料就已經很考功夫。
另外就是.NET Compact Framework提供的Controls實在太簡化,功能少,樣子醜陋。
所以唯有自己寫UserControl,雖然網上有商業的UI Controls,但閒閒地都要幾千$$$,好貴。
免費的又不合用,我只想要一個類似Repeater的東西。
打開Visual Studio 2010 Beta2看看,原來還未包含.NET CF,上MSDN看,Microsoft似乎會Port現在的WPF去.NET CF 4.0去對抗iPhone UI。
預計這個WM版高登新年前應該可以完成吧。
進度如下:
- 抓取吹水台Topic List - 100%
- 觀看內文 - 100%
- 登入 - 100%
- 開新 - Post 30%
- 回Post - 30%
- 引用文章 - 100%
- 搜查文章 - 100%
- 將高登Icon轉至Local Resource - 0%
- Bookmark - 0%
最困難除了高登Server本身非常之慢,測試困難之外,其次就是介面上,手機軟件的世界和Windows軟件可謂兩個世界。
電腦上,空間比較大,設計介面上自由度大很多,但手機上,要如何盡量利用320x240的有限空間顯示資料就已經很考功夫。
另外就是.NET Compact Framework提供的Controls實在太簡化,功能少,樣子醜陋。
所以唯有自己寫UserControl,雖然網上有商業的UI Controls,但閒閒地都要幾千$$$,好貴。
免費的又不合用,我只想要一個類似Repeater的東西。
打開Visual Studio 2010 Beta2看看,原來還未包含.NET CF,上MSDN看,Microsoft似乎會Port現在的WPF去.NET CF 4.0去對抗iPhone UI。
預計這個WM版高登新年前應該可以完成吧。
Thunderbird Addon - CompactHeader
我用Email Client沒有什麼要求,純粹用來看Newsgroup多,Thunderbird 3.0版沒有什麼驚喜,但就修改了Message Header欄的大細。
舊版可以打開/摺合,3.0新版反而不可以,而且顯示更多無謂資料。這對我來說很不便,因為我在公司偷偷地看Newsgroup時,Thunderbird 要開到很細才不會被捉到。
好彩有人和我一樣都抗拒這個新設計,有人做了一個Addon叫CompactHeader可以摺合它,省回一點空間。
CompactHeader :
https://addons.mozilla.org/en-us/thunderbird/addon/13564
舊版可以打開/摺合,3.0新版反而不可以,而且顯示更多無謂資料。這對我來說很不便,因為我在公司偷偷地看Newsgroup時,Thunderbird 要開到很細才不會被捉到。
好彩有人和我一樣都抗拒這個新設計,有人做了一個Addon叫CompactHeader可以摺合它,省回一點空間。
CompactHeader :
https://addons.mozilla.org/en-us/thunderbird/addon/13564
2009年12月12日星期六
2009年12月8日星期二
Google也有Free DNS了
Google都開放類似OpenDNS的DNS服務
DNS Address為
8.8.8.8
8.8.4.4
與OpenDNS的相比
208.67.222.222
208.67.220.220
我想Google的,會比較易記。
其實這類DNS服務很好用,好多時我家用,Server,甚至PSP,NDS,手機的Wifi設定都用這類DNS。
Google Public DNS
http://code.google.com/intl/zh-HK/speed/public-dns/
DNS Address為
8.8.8.8
8.8.4.4
與OpenDNS的相比
208.67.222.222
208.67.220.220
我想Google的,會比較易記。
其實這類DNS服務很好用,好多時我家用,Server,甚至PSP,NDS,手機的Wifi設定都用這類DNS。
Google Public DNS
http://code.google.com/intl/zh-HK/speed/public-dns/
2009年12月4日星期五
日本IT行業 35歲退休傳說
唔~原來日本IT業個環境同香港差唔多~大概都係話做IT做到約40歲就要搾兜,工時長,人工低。
雖然係日文,但係有打機Level既日文程度應該都睇得明。
我Quote左主要果幾段,全文就要睇下Link。
轉自:http://allabout.co.jp/career/corporateit/closeup/CU20080220A/
ITを提供しているITベンダーに勤務している人がどの業界へ転職しているかの調査です。
54.5% 会社は違っても同じITベンダーへ転職した人
45.5% 別の業界へ転職(流出)した人
た だ同じITベンダーと言いながらIT系以外の職種(営業、経理、人事など)へ移ることもありますし、別の業界と言いながらユーザー企業のシステム部門へ転 職する人もいます。移った業界で多かったのが「商社・流通・小売業」、「建設・土木・不動産」、「教育・研究」でした。
次はIT業界の勤 務経験がある転職経験者についてのアンケート調査です。仕事内容がIT関係から同じIT関係となり、引き続きITに関する仕事をしている割合が36.8% でした。ITからの人材流出、つまりITとは全然関係のない別の仕事に転職した人が45.0%になっています。
全体では半数(47.6%)の人が転職前の仕事に「満足」と回答しています。次に職種別に満足度をみてみましょう。
■「非常に満足」、「満足」と答えた割合が高かった職種ベスト3
1位 81.8% 研究開発・特許
2位 63.6% セールスエンジニア
3位 59.3% オープン・Web系SE
※「その他」はのぞく
■「非常に不満」、「やや不満」が多く満足度の低い職種ワースト3
1位 22.2% 制御・組込系SE
2位 38.5% 通信・ネットワーク・サーバSE
3位 39.6% プログラマ
回答者全員に尋ねた「転職の理由」です。
1位 給与・待遇が良くない
2位 会社の将来性が見えない
3位 仕事の内容にやりがい・面白さが感じられない
労働時間が長いが転職理由
■IT関連職種から別職種へ転職した理由
1位 給与・待遇が良くない
2位 労働時間が長い
3位 会社の将来性が見えない
雖然係日文,但係有打機Level既日文程度應該都睇得明。
我Quote左主要果幾段,全文就要睇下Link。
轉自:http://allabout.co.jp/career/corporateit/closeup/CU20080220A/
IT業界の人間はどの業界へ転職するのか
ITを提供しているITベンダーに勤務している人がどの業界へ転職しているかの調査です。
54.5% 会社は違っても同じITベンダーへ転職した人
45.5% 別の業界へ転職(流出)した人
た だ同じITベンダーと言いながらIT系以外の職種(営業、経理、人事など)へ移ることもありますし、別の業界と言いながらユーザー企業のシステム部門へ転 職する人もいます。移った業界で多かったのが「商社・流通・小売業」、「建設・土木・不動産」、「教育・研究」でした。
次はIT業界の勤 務経験がある転職経験者についてのアンケート調査です。仕事内容がIT関係から同じIT関係となり、引き続きITに関する仕事をしている割合が36.8% でした。ITからの人材流出、つまりITとは全然関係のない別の仕事に転職した人が45.0%になっています。
満足度の高い職種、低い職種
全体では半数(47.6%)の人が転職前の仕事に「満足」と回答しています。次に職種別に満足度をみてみましょう。
■「非常に満足」、「満足」と答えた割合が高かった職種ベスト3
1位 81.8% 研究開発・特許
2位 63.6% セールスエンジニア
3位 59.3% オープン・Web系SE
※「その他」はのぞく
■「非常に不満」、「やや不満」が多く満足度の低い職種ワースト3
1位 22.2% 制御・組込系SE
2位 38.5% 通信・ネットワーク・サーバSE
3位 39.6% プログラマ
転職する理由
回答者全員に尋ねた「転職の理由」です。
1位 給与・待遇が良くない
2位 会社の将来性が見えない
3位 仕事の内容にやりがい・面白さが感じられない
労働時間が長いが転職理由
■IT関連職種から別職種へ転職した理由
1位 給与・待遇が良くない
2位 労働時間が長い
3位 会社の将来性が見えない
2009年12月1日星期二
IT搵工哀歌
起香港討論區,淡友集中地-資訊科技版搵到呢張圖,睇完呢篇文,冇乜感覺,只因文中既說話我自己都講得太多。
其實諗返當初我有機會免學分讀IVE HD,真係唔應該揀讀電腦...令到我Degree都要順勢讀返電腦。如果俾我重新揀多一次,我會讀社工,除左幫到人,人工高之外,就係前景好,香港未來只會有更多社會問題,需要更多社工。
不過其實電腦行業,工作空缺真是"一浸浸"的,有時幾日既Job AD都未必有一份岩自己,但有時就一連有幾份心水。
所以我見到香港討論區網友經常追求"專業"資格,
不如盡量裝備自己,而且做電腦最忌"乜都識,冇樣精。",到有好工時至知道未夠料已經太遲。
雖然有好多人都同我講過話學咁多o野,最後都係"Dup石仔",但做得耐電腦呢行,深明"技術"未必係升職條件,但絕對係生存條件,就算突破唔到樽頸位,做唔到管理級數,但起咁惡劣既行頭下,至少亦未怕失業。不過我自己每天都仲係"捱驢仔",預計最做到4月,岩岩好夠一年又要轉工了。
其實諗返當初我有機會免學分讀IVE HD,真係唔應該揀讀電腦...令到我Degree都要順勢讀返電腦。如果俾我重新揀多一次,我會讀社工,除左幫到人,人工高之外,就係前景好,香港未來只會有更多社會問題,需要更多社工。
不過其實電腦行業,工作空缺真是"一浸浸"的,有時幾日既Job AD都未必有一份岩自己,但有時就一連有幾份心水。
所以我見到香港討論區網友經常追求"專業"資格,
不如盡量裝備自己,而且做電腦最忌"乜都識,冇樣精。",到有好工時至知道未夠料已經太遲。
雖然有好多人都同我講過話學咁多o野,最後都係"Dup石仔",但做得耐電腦呢行,深明"技術"未必係升職條件,但絕對係生存條件,就算突破唔到樽頸位,做唔到管理級數,但起咁惡劣既行頭下,至少亦未怕失業。不過我自己每天都仲係"捱驢仔",預計最做到4月,岩岩好夠一年又要轉工了。
2009年11月18日星期三
香港人製作的出色XNA遊戲
微軟的XNA推出了幾年,甚少見到亞洲區有作品,其實國外一樣都不算多,始終開發一隻遊戲,粗略去做都要一年半載,程式加美術還要種種功夫,人力物力不會少,寫完出來即使自己有滿足感,但沒有人玩都好像沒有太大意思。
而且正如早前我聽過一句話:( 起香港,搞High Tech就High o野,Low Tech就真係撈o野),咁既情況下,要香港還有人去寫Game真係難上加難。
不過今日見到一個Blog,有幾個幾高質素的XNA遊戲 (當然你不能搵商業作品去比較...),一開始我見到個Blog是繁體中文,以為是台灣人。
最後看多幾下至知道原來係香港人出品!!!
其實香港已經很少熱心的人非謀利咁去做開發了,值得支持一下。
Zephyr[XNA] : 遊戲設計 X 遊戲開發
http://koetap.mysinablog.com/
Hong Kong Indie Game Development Blog
http://percytse.blogspot.com/
而且正如早前我聽過一句話:( 起香港,搞High Tech就High o野,Low Tech就真係撈o野),咁既情況下,要香港還有人去寫Game真係難上加難。
不過今日見到一個Blog,有幾個幾高質素的XNA遊戲 (當然你不能搵商業作品去比較...),一開始我見到個Blog是繁體中文,以為是台灣人。
最後看多幾下至知道原來係香港人出品!!!
其實香港已經很少熱心的人非謀利咁去做開發了,值得支持一下。
Zephyr[XNA] : 遊戲設計 X 遊戲開發
http://koetap.mysinablog.com/
Hong Kong Indie Game Development Blog
http://percytse.blogspot.com/
2009年11月17日星期二
Object Oriented CSS Framework For ASP.NET & PHP
無論你是寫網頁程式還是網頁設計,近幾年應該經常聽到Framework這個字。
Javascript有Framework (jQuery, ExtJS, Prototype...) ; PHP有Framework (Zend , CodeIgniter , CakePHP ...) ; ASP.NET本身屬.NET Framework,最近又有MVC Framework等等。
或者很多Web Designer看到"Framework"這個字,都會避之則吉,看似都是和Programming有關,但如果你忽略了的話就走寶了。
近這一年,CSS Framework慢慢冒出來,在delicious.com都開始很多同類Bookmark,亦有很多討論區開始比較各種CSS Framework。
如果你想了解什麼是CSS Framework,建議先看看這幾篇文章。
Definitive List of CSS Frameworks – Pick Your Style
CSS Frameworks: Pros and Cons
CSS framework 利弊淺見
現時CSS Framework大概分兩種,大多數的一種是本身已經定義了很多Style,例如Grid式的Table Template,Header或Footer Style,甚至排板方面都可以直接套用CSS Framework而快速建立完整Design。由於現時CSS Framework定義其實沒有很統一,不同的CSS Framework提供不同的"功能",但肯定的是,全部都輔助你快速建立Layout。
提供一個CSS Framework選擇參考連結:
10 Promising CSS Framework That Worth A Look
至於另一種亦是我有興趣的是Object Oriented CSS Framework,這種Framework是針對編寫CSS方面,和之前講的一種相反,本身並沒有包含"罐頭"的"即食"樣式。
CSS加上Object Oriented,本身兩種在網頁開發上沒有關係的字詞,很難想像到會是什麼,但看到以下例子後,如果加上少少Programming知識,你就明白箇中奧妙。
Variables
把@brand_color設定成變數重覆使用,假若日後要更改的話,只需要修改一行就可以。
Mixins
Define 名稱為rounded_corners 的 Property後,可以整個打包去其他的style中使用。
Operations
在CSS中直接進行加減乘除計算。
Nested Rules
這類似是OOP的中Class。
使用OO寫法的CSS可以簡潔很多,而且可以重覆使用或者承繼。不過暫時OO的CSS選擇並不多。
ASP.NET 的話可以試試.less CSS就有齊以上的功能,PHP的話可以試試xCSS,兩隻都是很容易使用和Setup的。
Javascript有Framework (jQuery, ExtJS, Prototype...) ; PHP有Framework (Zend , CodeIgniter , CakePHP ...) ; ASP.NET本身屬.NET Framework,最近又有MVC Framework等等。
或者很多Web Designer看到"Framework"這個字,都會避之則吉,看似都是和Programming有關,但如果你忽略了的話就走寶了。
近這一年,CSS Framework慢慢冒出來,在delicious.com都開始很多同類Bookmark,亦有很多討論區開始比較各種CSS Framework。
如果你想了解什麼是CSS Framework,建議先看看這幾篇文章。
Definitive List of CSS Frameworks – Pick Your Style
CSS Frameworks: Pros and Cons
CSS framework 利弊淺見
現時CSS Framework大概分兩種,大多數的一種是本身已經定義了很多Style,例如Grid式的Table Template,Header或Footer Style,甚至排板方面都可以直接套用CSS Framework而快速建立完整Design。由於現時CSS Framework定義其實沒有很統一,不同的CSS Framework提供不同的"功能",但肯定的是,全部都輔助你快速建立Layout。
提供一個CSS Framework選擇參考連結:
10 Promising CSS Framework That Worth A Look
至於另一種亦是我有興趣的是Object Oriented CSS Framework,這種Framework是針對編寫CSS方面,和之前講的一種相反,本身並沒有包含"罐頭"的"即食"樣式。
CSS加上Object Oriented,本身兩種在網頁開發上沒有關係的字詞,很難想像到會是什麼,但看到以下例子後,如果加上少少Programming知識,你就明白箇中奧妙。
Variables
把@brand_color設定成變數重覆使用,假若日後要更改的話,只需要修改一行就可以。
@brand_color: #4D926F; #header { color: @brand_color; } h2 { color: @brand_color; }
Mixins
Define 名稱為rounded_corners 的 Property後,可以整個打包去其他的style中使用。
.rounded_corners { -moz-border-radius: 8px; -webkit-border-radius: 8px; border-radius: 8px; } #header { .rounded_corners; } #footer { .rounded_corners; }
Operations
在CSS中直接進行加減乘除計算。
@the-border: 1px; @base-color: #111; #header { color: @base-color * 3; border-left: @the-border; border-right: @the-border * 2; } #footer { color: (@base-color + #111) * 1.5; }
Nested Rules
這類似是OOP的中Class。
#header { color: red; a { font-weight: bold; text-decoration: none; } }
使用OO寫法的CSS可以簡潔很多,而且可以重覆使用或者承繼。不過暫時OO的CSS選擇並不多。
ASP.NET 的話可以試試.less CSS就有齊以上的功能,PHP的話可以試試xCSS,兩隻都是很容易使用和Setup的。
2009年11月16日星期一
ASP.NET使用Throw中止頁面
通常新接觸ASP.NET的朋友,都會把程式碼放進Page_Load事件中,如果因為不符合某條件而要中止網頁運行的話(例如一些要檢查登入的頁面),可能會用Exit Sub(VB)或者return(C#)退出Page_Load事件。
當然如果整個載入過程只有Page_Load的話,這個做法都還可以的。但假如還有其他Stage,例如Page_Init , Page_LoadComplete... (可參考ASP.NET Page Life Cycle Overview),單純地退出Page_Load事件就可以為你帶來一些程式上的錯誤。
當然概念上,大家要注意,即使你沒有寫上其他Stage的程式碼,但Runtime時,ASP.NET都會經過的,所以不要認為只把程式碼放進Page_Load事件中,便不會觸發其他Stage Event。
以下面段Code為例,網頁載入的過程會經過三個Stage : Page_Init => Page_Load => Page_LoadComplete
假如我使用return;(Exit Sub)的話 :
Output Window便會顯示出
換句話說,return並不會中止其後的事件。但如果我們使用throw的話:
這樣Page_Load和Page_LoadComplete都不會執行,而頁面會轉去錯誤信息頁。
當然throw也是一個決定性的做法,正常未必需要因為不符合要求就把瀏覽者轉向錯誤頁面。
但大家從這個範例也可以看出一些ASP.NET Page Cycle上要注意的地方。
當然如果整個載入過程只有Page_Load的話,這個做法都還可以的。但假如還有其他Stage,例如Page_Init , Page_LoadComplete... (可參考ASP.NET Page Life Cycle Overview),單純地退出Page_Load事件就可以為你帶來一些程式上的錯誤。
當然概念上,大家要注意,即使你沒有寫上其他Stage的程式碼,但Runtime時,ASP.NET都會經過的,所以不要認為只把程式碼放進Page_Load事件中,便不會觸發其他Stage Event。
以下面段Code為例,網頁載入的過程會經過三個Stage : Page_Init => Page_Load => Page_LoadComplete
假如我使用return;(Exit Sub)的話 :
partial class DefaultPage : System.Web.UI.Page { protected void Page_Init(object sender, System.EventArgs e) { object intNum = "abcde"; int _intNum = 0; if (!Int32.TryParse(intNum, _intNum)) { return; } System.Diagnostics.Debug.Print("Page_Init is Loaded."); } protected void Page_Load(object sender, System.EventArgs e) { System.Diagnostics.Debug.Print("Page_Load is Loaded."); } protected void Page_LoadComplete(object sender, System.EventArgs e) { System.Diagnostics.Debug.Print("Page_LoadComplete is Loaded."); } }
Output Window便會顯示出
Page_Load is Loaded. Page_LoadComplete is Loaded.
換句話說,return並不會中止其後的事件。但如果我們使用throw的話:
partial class DefaultPage : System.Web.UI.Page { protected void Page_Init(object sender, System.EventArgs e) { object intNum = "abcde"; int _intNum = 0; if (!Int32.TryParse(intNum, _intNum)) { throw; } System.Diagnostics.Debug.Print("Page_Init is Loaded."); } protected void Page_Load(object sender, System.EventArgs e) { System.Diagnostics.Debug.Print("Page_Load is Loaded."); } protected void Page_LoadComplete(object sender, System.EventArgs e) { System.Diagnostics.Debug.Print("Page_LoadComplete is Loaded."); } }
這樣Page_Load和Page_LoadComplete都不會執行,而頁面會轉去錯誤信息頁。
當然throw也是一個決定性的做法,正常未必需要因為不符合要求就把瀏覽者轉向錯誤頁面。
但大家從這個範例也可以看出一些ASP.NET Page Cycle上要注意的地方。
2009年11月13日星期五
Hornil StylePix - 超強的Portable Image Editor
我在這Blog介紹過的免費Image Editor都有好幾次,之前曾經介紹過Artweaver / PicPick,不過前者開始商業化,後者就不支援Layer而且功能比較少,雖然Paint.NET前幾天終於推出3.5版本,不過Paint.NET的Lasso Tool依然沒有改進,很難使用,所以我再物色一下有什麼新軟件。
今次介紹這個叫Hornil StylePix,韓國人出品。
這個Software幾好用的,介面很似Photoshop,除了基本應該有的修圖功能。
更支援Filter,Layer,和Batch processing,這幾個功能都是很多免費軟件都缺乏的,中文字支援方面我試過沒有問題。
Hornil StylePix更有Portable版本供選擇。
Download Hornil StylePix
http://hornil.com
Hornil StylePix功能說明
http://hornil.com/en/products/stylepix/features.html
Hornil StylePix Screen Shot
http://hornil.com/en/products/stylepix/screenshots.html
今次介紹這個叫Hornil StylePix,韓國人出品。
這個Software幾好用的,介面很似Photoshop,除了基本應該有的修圖功能。
更支援Filter,Layer,和Batch processing,這幾個功能都是很多免費軟件都缺乏的,中文字支援方面我試過沒有問題。
Hornil StylePix更有Portable版本供選擇。
Download Hornil StylePix
http://hornil.com
Hornil StylePix功能說明
http://hornil.com/en/products/stylepix/features.html
Hornil StylePix Screen Shot
http://hornil.com/en/products/stylepix/screenshots.html
2009年11月12日星期四
Javascript - Passing arguments as Function
在Javascript中,Call Function絕對不會陌生,但如果有若干數量的Function因應不同的情況才Call怎麼辦呢?
當然有很多可能性,其中最常見的亦是傳統做法不外乎
這就可以把 condition 移至外部,用Helper去呼叫Function更加靈活。而且Array中的項目,Function的arguments不只是資料型態(String,Int...),更可以是function()吧。
當然有很多可能性,其中最常見的亦是傳統做法不外乎
if..(condition)..then...而我的做法就是自行寫一個Helper,用Array以arguments型式去呼叫Function。
function1();
function2();
function3();
...
function SayGoodBye() { $('#hello').html('GoodBye'); } function SeeYou() { $('#hello').html($('#hello').html() + ',' + 'See you next time!'); } function caller(aryfunc) { $.each(aryfunc,function(i,n) //用jQuery的each { Function.call(n()); } ); } $(document).ready(function() { //if..(condition)..then... var myFunc = new Array(SayGoodBye,SeeYou); //and more... caller(myFunc); //Print out : GoodBye,See you next time! }); <div id="hello"></div>
這就可以把 condition 移至外部,用Helper去呼叫Function更加靈活。而且Array中的項目,Function的arguments不只是資料型態(String,Int...),更可以是function()吧。
PhotoImpact正式死亡
今晚上Corel睇下有冇新版本,誰不知完全找不到產品介紹頁,連Download都沒有了。
再去Corel的官方討論區,連PhotoImpact的版塊都刪除了,已經心知不妙~回到Ulead的官方討論區看,果然Corel已經停止開發PhotoImpact,而且是想PI消失於世上,連未代的X3版本都不再出售。
可以看看這Post,Ulead前公司的人員都証實了 -
Photoimpact Dead ?
http://phpbb.ulead.com.tw/EN/viewtopic.php?t=35779
Corel已經前後殺死幾個好用的軟件,例如COOL 3D, GIF Animator, MediaStudio Pro...
其實我都不知Corel收購Ulead幹什麼,我又不覺得Corel的PaintShop Pro好用過PhotoImpact。(而且PaintShop Pro都是收購自Jasc)
PI我由第5代用到最後的X3,前前後後都有10年有多的時間,軟件來說都算是有感情的一個。
再去Corel的官方討論區,連PhotoImpact的版塊都刪除了,已經心知不妙~回到Ulead的官方討論區看,果然Corel已經停止開發PhotoImpact,而且是想PI消失於世上,連未代的X3版本都不再出售。
可以看看這Post,Ulead前公司的人員都証實了 -
Photoimpact Dead ?
http://phpbb.ulead.com.tw/EN/viewtopic.php?t=35779
Corel已經前後殺死幾個好用的軟件,例如COOL 3D, GIF Animator, MediaStudio Pro...
其實我都不知Corel收購Ulead幹什麼,我又不覺得Corel的PaintShop Pro好用過PhotoImpact。(而且PaintShop Pro都是收購自Jasc)
PI我由第5代用到最後的X3,前前後後都有10年有多的時間,軟件來說都算是有感情的一個。
2009年11月7日星期六
jQuery - 當Javascript Ajax遇上Loop
之前已經略略打過一篇jQuery 的Async和sync的問題:
jQuery – Why Ajax return blank data?
近日我再次遇上近似的問題,我把一段jQuery.ajax 放在一段For...Loop中運行,發現同樣會出現同步問題。
再次上網查證一下,發現原來這不是jQuery的問題,問題在於Javascript原生的XMLHttpRequest和Synchronous問題。
出現問題的程式碼如下:
ASP.NET 2.0 Web Service :
網頁上的jQuery Ajax CallBack :
運行程式後,得出的alert不是順序的12345678910,有可能是4231789...或者9714523。
最後把async設成false就可以解決問題,但是運行時,Browser會呈現硬直狀態。
解決方法雖然是找到了,但是為什麼會這樣?
可以睇睇國外高手的Blog文:
Ajax and javascript don't use threads
Ajax, javascript and threads : the final truth
睇過之後,不難理解為什麼會出現這個同步問題。
jQuery – Why Ajax return blank data?
近日我再次遇上近似的問題,我把一段jQuery.ajax 放在一段For...Loop中運行,發現同樣會出現同步問題。
再次上網查證一下,發現原來這不是jQuery的問題,問題在於Javascript原生的XMLHttpRequest和Synchronous問題。
出現問題的程式碼如下:
ASP.NET 2.0 Web Service :
<WebMethod()> _ Public Function returnString(ByVal inputString As String) As String Return inputString End Function
網頁上的jQuery Ajax CallBack :
<script type="text/javascript"> $(document).ready(function () { for (var i = 1 ;i <= 10;i++) { var Options= { type: "POST", url: "webservice/DataService.asmx/returnString", data:'{ inputString: ' + i +'}', async: "true", contentType: "application/json; charset=utf-8", dataType: "JSON", success: function(response) { alert(response); } } $.ajax(Options); } }); </script>
運行程式後,得出的alert不是順序的12345678910,有可能是4231789...或者9714523。
最後把async設成false就可以解決問題,但是運行時,Browser會呈現硬直狀態。
解決方法雖然是找到了,但是為什麼會這樣?
可以睇睇國外高手的Blog文:
Ajax and javascript don't use threads
Ajax, javascript and threads : the final truth
睇過之後,不難理解為什麼會出現這個同步問題。
2009年10月27日星期二
ASP.NET Server Side & Client Side資料加密處理
對於ASPX網頁上暫存資料方面,ServerSide最常用多數都是用Session,ClientSide應該都是ViewState吧,前者應該沒有太多保安問題,但後者的ViewState其實要Decode根本不難,所以加密功夫其實很重要的。近期工作上經常要使用 jQuery + Web Service處理資料,有些敏感資料會經JSON傳回Browser,又或者經Hidden Field傳回Server,有些情況是很難避免的 (特別是上司要求...),我看過有些懶人只用Base64轉碼就當是加密其實真的很危險。
.NET Framework其實本身在System.Security.Cryptography NameSpace下已經提供了大量加密方式,在MSDN看過後,取了幾種針對String加密的,做了少少資料搜集有關 3DES / DES / RSA 和 AES (Rijndael) 的比較,其實4種方法同樣都需要一項Key才可以進行正常解密,所以即使知道你網頁中加密後的字串,而不知道你所設定的Key都不可能正常解密的。
論安全性,粗略評估後的排行應該是 AES (Rijndael) > AES > 3DES > RSA / DES。
至於使用方面,Client-Side可以使用以下的Javascript 解密AES:
http://www.movable-type.co.uk/scripts/aes.html
Server-Side方面,其實MSDN上已有很清晰的Sample,以下就是使用AES (Rijndael)方式對String進行encrypt和decrypt的例子。
.NET Framework其實本身在System.Security.Cryptography NameSpace下已經提供了大量加密方式,在MSDN看過後,取了幾種針對String加密的,做了少少資料搜集有關 3DES / DES / RSA 和 AES (Rijndael) 的比較,其實4種方法同樣都需要一項Key才可以進行正常解密,所以即使知道你網頁中加密後的字串,而不知道你所設定的Key都不可能正常解密的。
論安全性,粗略評估後的排行應該是 AES (Rijndael) > AES > 3DES > RSA / DES。
至於使用方面,Client-Side可以使用以下的Javascript 解密AES:
http://www.movable-type.co.uk/scripts/aes.html
Server-Side方面,其實MSDN上已有很清晰的Sample,以下就是使用AES (Rijndael)方式對String進行encrypt和decrypt的例子。
using System; using System.Security.Cryptography; using System.Text; using System.IO; class RijndaelSample { static void Main() { try { // Create a new Rijndael object to generate a key // and initialization vector (IV). Rijndael RijndaelAlg = Rijndael.Create(); // Create a string to encrypt. string sData = "Here is some data to encrypt."; string FileName = "CText.txt"; // Encrypt text to a file using the file name, key, and IV. EncryptTextToFile(sData, FileName, RijndaelAlg.Key, RijndaelAlg.IV); // Decrypt the text from a file using the file name, key, and IV. string Final = DecryptTextFromFile(FileName, RijndaelAlg.Key, RijndaelAlg.IV); // Display the decrypted string to the console. Console.WriteLine(Final); } catch (Exception e) { Console.WriteLine(e.Message); } Console.ReadLine(); } public static void EncryptTextToFile(String Data, String FileName, byte[] Key, byte[] IV) { try { // Create or open the specified file. FileStream fStream = File.Open(FileName, FileMode.OpenOrCreate); // Create a new Rijndael object. Rijndael RijndaelAlg = Rijndael.Create(); // Create a CryptoStream using the FileStream // and the passed key and initialization vector (IV). CryptoStream cStream = new CryptoStream(fStream, RijndaelAlg.CreateEncryptor(Key, IV), CryptoStreamMode.Write); // Create a StreamWriter using the CryptoStream. StreamWriter sWriter = new StreamWriter(cStream); try { // Write the data to the stream // to encrypt it. sWriter.WriteLine(Data); } catch (Exception e) { Console.WriteLine("An error occurred: {0}", e.Message); } finally { // Close the streams and // close the file. sWriter.Close(); cStream.Close(); fStream.Close(); } } catch (CryptographicException e) { Console.WriteLine("A Cryptographic error occurred: {0}", e.Message); } catch (UnauthorizedAccessException e) { Console.WriteLine("A file error occurred: {0}", e.Message); } } public static string DecryptTextFromFile(String FileName, byte[] Key, byte[] IV) { try { // Create or open the specified file. FileStream fStream = File.Open(FileName, FileMode.OpenOrCreate); // Create a new Rijndael object. Rijndael RijndaelAlg = Rijndael.Create(); // Create a CryptoStream using the FileStream // and the passed key and initialization vector (IV). CryptoStream cStream = new CryptoStream(fStream, RijndaelAlg.CreateDecryptor(Key, IV), CryptoStreamMode.Read); // Create a StreamReader using the CryptoStream. StreamReader sReader = new StreamReader(cStream); string val = null; try { // Read the data from the stream // to decrypt it. val = sReader.ReadLine(); } catch (Exception e) { Console.WriteLine("An error occurred: {0}", e.Message); } finally { // Close the streams and // close the file. sReader.Close(); cStream.Close(); fStream.Close(); } // Return the string. return val; } catch (CryptographicException e) { Console.WriteLine("A Cryptographic error occurred: {0}", e.Message); return null; } catch (UnauthorizedAccessException e) { Console.WriteLine("A file error occurred: {0}", e.Message); return null; } } }
2009年10月23日星期五
Google Chrome Portable
portableapps.com終於都出佢自家的Google Chrome Portable。
之前在其他地方都見過有人製作的Portable版,不過我就不太相信一些不知名人士製作的Portable軟件。
因為有部份只是從installer extract file出來,run得到,就當是Portable,但亦有機會寫入資料至Registry 或分散元件檔案至其他地方等等。
portableapps.com出品就肯定品質有保証了。
Google Chrome Portable
http://portableapps.com/apps/internet/google_chrome_portable
之前在其他地方都見過有人製作的Portable版,不過我就不太相信一些不知名人士製作的Portable軟件。
因為有部份只是從installer extract file出來,run得到,就當是Portable,但亦有機會寫入資料至Registry 或分散元件檔案至其他地方等等。
portableapps.com出品就肯定品質有保証了。
Google Chrome Portable
http://portableapps.com/apps/internet/google_chrome_portable
2009年10月21日星期三
Visual Studio 2010 Beta 2
Visual Studio 2010 Beta 2今日剛剛Release,照以往推出時間來看,應該下年年頭約1,2月就會出正式版。
除了Visual Studio 2010轉了新Logo外,MSDN的Logo都轉了。
而整個MSDN主色都轉為紫色,文章部份再分為Classic / Lightweight / ScriptFree 三個顯示模式,取代之前的 loband (low bandwidth) 模式。
MSDN上已經有大量有關.NET Framework 4.0和Visual Studio 2010的文章可以參考,順道整理一下:
.NET Framework 4.0
Visual Studio 2010
ASP.NET 4
- What's New in ASP.NET 4 Beta 2 and Visual Web Developer
- ASP.NET 4.0 and Visual Studio 2010 Web Development Beta 2 Overview
C# 2010
Visual Basic 2010
Labels:
.NET Framework
2009年10月17日星期六
Unbox MVP Award Kit!
2009年10月13日星期二
Aptana PHP Plugin停止開發~轉用PHP Designer 7
今天看到一直用的Aptana慢慢轉向商業化經營了...原本Domain是aptana.com,現在瓜分為.com和aptana.org for community plugins。最可惜的是Aptana已聲明PHP Plug-in停止開發 (見 Aptana PHP Plugin discontinued? ) ,會把現有的module移至Eclipse PDT。但我真的用不慣Eclipse系的IDE,可能我個人太Visual Studio向,用起Eclipse甚至Netbeans都覺得怪怪地。
唯有再看看其他PHP IDE有冇更新,有沒有更新至我要求的HTML + JavaScript Code Completion / PHP Code Hints等等。
我對工作上/興趣上的軟件要求很高,而且Programming的IDE更是我謀生工具,豈能兒戲。
我堅信 "工欲善其事,必先利其器。"的道理,無論軟件介面設計,Right-Click的menu command"就不就手"都有要求。
試過很多,比較出名的PHPEdit , PhpED , Zend Studio , Komodo IDE都試過,依然不稱心,主要都是不如Visual Studio無論HTML,JS,CSS都主面支援。
再試試PHP Designer 7,原來前幾天剛出新版,看ChangeLog見到這幾項,立即試試 :
試用過後,算是不錯,感覺很完整,無論HTML,JS,CSS,PHP的 Code Completion都做得不錯,但依然有半秒到Delay(即使我已set 0ms delay)。
介面都較接近返Visual Studio,不錯不錯。
Screenshots of phpDesigner 7
http://www.mpsoftware.dk/phpdesigner_screenshots.php
唯有再看看其他PHP IDE有冇更新,有沒有更新至我要求的HTML + JavaScript Code Completion / PHP Code Hints等等。
我對工作上/興趣上的軟件要求很高,而且Programming的IDE更是我謀生工具,豈能兒戲。
我堅信 "工欲善其事,必先利其器。"的道理,無論軟件介面設計,Right-Click的menu command"就不就手"都有要求。
試過很多,比較出名的PHPEdit , PhpED , Zend Studio , Komodo IDE都試過,依然不稱心,主要都是不如Visual Studio無論HTML,JS,CSS都主面支援。
再試試PHP Designer 7,原來前幾天剛出新版,看ChangeLog見到這幾項,立即試試 :
New. JavaScript code completion
New. Support for JavaScript Object-oriented programming (OOP)
New. JavaScript code tip with extended information/documentation
New. Support for user-defined JavaScript functions
New. Support for user-defined JavaScript variables
New. Code Explorer for JavaScript
New. Jump to JavaScript declarations
New. Support for the JavaScript framework jQuery
試用過後,算是不錯,感覺很完整,無論HTML,JS,CSS,PHP的 Code Completion都做得不錯,但依然有半秒到Delay(即使我已set 0ms delay)。
介面都較接近返Visual Studio,不錯不錯。
Screenshots of phpDesigner 7
http://www.mpsoftware.dk/phpdesigner_screenshots.php
2009年10月8日星期四
Ajax Control Toolkit (v3.0.30930) released
5月時才大更新了一次,那時加入了
估不到幾個月後又有新版。
新版v3.0.30930加入兩個極之重大的新Control :
估不到幾個月後又有新版。
新版v3.0.30930加入兩個極之重大的新Control :
- Seadragon - JavaScript版本的Deep Zoom
- AsyncFileUpload - 就是Asynchronous AJAX File Upload Control,這個才是重點,因為大部份Async FileUpload的Control都要收錢,現在有這個就好了。
2009年10月7日星期三
Project Manager 唔識 Program
起香港做電腦行業,要上位做到Manager級,
大概可以分三類,1.高相關學歷 2.真材實料 3.靠吹水 。
第1.和第2. 是無可厚非的,至於第3.認唔認同就因人而異,個人就唔太認同。
在Google上輸入Keyword : Project Manager 唔識 Program ,已經可以找到相關討論:
香港討論區 - 各行各業 - 資訊科技界 I.T.
PM需唔需要識Programming? 我覺得絕對要識,但需唔需要超強?咁又未必。
當然如果Coding 都強的話當然就更加好喇,我諗任何人都唔想有事時,PM十問九唔知,話知但又唔肯定的,最後叫你自己Google吧。
Project Manager - 職責就是Project Management : Resource Control / Documentation / Source Control 等等之外,本身不應接觸Implement層面,但萬一真是要的話,就出事了。
以近期我接手做Project的Database design做例,我估是PM技癢情況下Design schema的,就說明現實中PM要不要懂Programming。
這個Table有幾點都有問題 :
1. ParentMenuCode和Code,實際data是INT,但DataType卻有理冇理Set Nvarchar....
2. ParentMenuCode是FK Reference Code,實質就是主Menu和副Menu的關係,但理應分開兩個Table,現在放在一起,就會出現recursive的情況,到需要第三層目錄時就麻煩,再者Code是not null, ParentMenuCode是allow null , 是不是很奇怪...
3. ImageURL和RedirectURL 長度不一,一個是100,另一個是200。雖然好像太吹毛求瑕,但實際寫program時,要set input的max lenght就查一查長度都幾煩。
還有一些不方便公開ScreenShot的,例如Table名有空格,Primary Key / Constraints / Default value,應有則冇等等問題。
出現這些問題,原因就是設計的人沒有由Programming角度出發。
例如Table有空格,沒錯,看起來更清楚,但每次條Query都要用 [ ] (MSSQL) 或 ` ` (MySQL) Quote起來。
明明是應該Default是空白的卻可以Null,令到每次新增一條Record時都可能要特地Insert一個空白入去,或者相反用IsDBNull之類的Function是檢查,首當其衝當然是我這個寫Code的人。
所以現在你問我PM要不要識寫Program,我會答你至少都要"懂"。
大概可以分三類,1.高相關學歷 2.真材實料 3.靠吹水 。
第1.和第2. 是無可厚非的,至於第3.認唔認同就因人而異,個人就唔太認同。
在Google上輸入Keyword : Project Manager 唔識 Program ,已經可以找到相關討論:
香港討論區 - 各行各業 - 資訊科技界 I.T.
PM需唔需要識Programming? 我覺得絕對要識,但需唔需要超強?咁又未必。
當然如果Coding 都強的話當然就更加好喇,我諗任何人都唔想有事時,PM十問九唔知,話知但又唔肯定的,最後叫你自己Google吧。
Project Manager - 職責就是Project Management : Resource Control / Documentation / Source Control 等等之外,本身不應接觸Implement層面,但萬一真是要的話,就出事了。
以近期我接手做Project的Database design做例,我估是PM技癢情況下Design schema的,就說明現實中PM要不要懂Programming。
這個Table有幾點都有問題 :
1. ParentMenuCode和Code,實際data是INT,但DataType卻有理冇理Set Nvarchar....
2. ParentMenuCode是FK Reference Code,實質就是主Menu和副Menu的關係,但理應分開兩個Table,現在放在一起,就會出現recursive的情況,到需要第三層目錄時就麻煩,再者Code是not null, ParentMenuCode是allow null , 是不是很奇怪...
3. ImageURL和RedirectURL 長度不一,一個是100,另一個是200。雖然好像太吹毛求瑕,但實際寫program時,要set input的max lenght就查一查長度都幾煩。
還有一些不方便公開ScreenShot的,例如Table名有空格,Primary Key / Constraints / Default value,應有則冇等等問題。
出現這些問題,原因就是設計的人沒有由Programming角度出發。
例如Table有空格,沒錯,看起來更清楚,但每次條Query都要用 [ ] (MSSQL) 或 ` ` (MySQL) Quote起來。
明明是應該Default是空白的卻可以Null,令到每次新增一條Record時都可能要特地Insert一個空白入去,或者相反用IsDBNull之類的Function是檢查,首當其衝當然是我這個寫Code的人。
所以現在你問我PM要不要識寫Program,我會答你至少都要"懂"。
PHP Comments Remover & Space Cleaner
一個免費的PHP Comments Remover,去PHP和HTML格式的Comment,另有去空白和內建obfuscator。
我試用過還不錯,用Universal Extractor後便是Portable版。
如果想進一步除去Line Break可以用用這個 PHP Code Cleaner and Indenter
Download PHP Comments Remover
我試用過還不錯,用Universal Extractor後便是Portable版。
如果想進一步除去Line Break可以用用這個 PHP Code Cleaner and Indenter
Download PHP Comments Remover
2009年10月2日星期五
當選Microsoft MVP
7月時參選Microsoft MVP,在差不多已經忘記的時候收到Microsoft的Email通知當選了ASP/ASP.NET的MVP。
填報名表的時候,主要都是靠這個Blog的各類Programming文章,部份jQuery的教學文章和各大國外討論區如,StackOverFlow,MSDN Forum之類的回應文章得選。
看看下年有沒有機會連任了。
填報名表的時候,主要都是靠這個Blog的各類Programming文章,部份jQuery的教學文章和各大國外討論區如,StackOverFlow,MSDN Forum之類的回應文章得選。
看看下年有沒有機會連任了。
小心選擇Facebook Application
近日有點時間,開始寫Facebook Application,大概是一個Facebook API + Google Map API 的小程式。
寫的過程發現到經Facebook API的Users.getInfo Call 可以取得很多個人資料,開始查證一下Facebook的Guidelines,看看是否容許儲存Profiles的資料。
一看之下,原來Facebook已表明有什麼是Storable Data,其他資料一概不可以儲存超過24小時。
但我相信以Facebook Application的架構,其實是沒有可能知道程式背後對資料做過什麼,如果程式把資料Copy至另一個媒體,其實已經追查不到。
就算是單單一個"送禮物","占卜","每日一字"的小程式,只要你加入Application前,一按"Allow",程式已經可以無限制地存取你的資料。唯一可以防止的方法就是去Privacy Settings選擇你公開什麼資料,但Facebook的default setting差不多是全開的。所以很多人胡亂去增加Application其實是有風險的。
寫的過程發現到經Facebook API的Users.getInfo Call 可以取得很多個人資料,開始查證一下Facebook的Guidelines,看看是否容許儲存Profiles的資料。
一看之下,原來Facebook已表明有什麼是Storable Data,其他資料一概不可以儲存超過24小時。
但我相信以Facebook Application的架構,其實是沒有可能知道程式背後對資料做過什麼,如果程式把資料Copy至另一個媒體,其實已經追查不到。
就算是單單一個"送禮物","占卜","每日一字"的小程式,只要你加入Application前,一按"Allow",程式已經可以無限制地存取你的資料。唯一可以防止的方法就是去Privacy Settings選擇你公開什麼資料,但Facebook的default setting差不多是全開的。所以很多人胡亂去增加Application其實是有風險的。
2009年9月23日星期三
SongBird - iTunes Alternative 終於可以放棄Winamp
MP3 Player我用過的實在不多,十幾年前初玩電腦時用Real Player G2,後來用Musicmatch Jukebox (當時很出名的,那時Winamp還未成名),後來才用Winamp至今超過10年都有。不過 Winamp被買乜死乜既AOL收購左之後,果然同ICQ一樣越出越衰。
現在很多人都用iTunes,不過我個人對Apple出品沒有興趣,到現在我連一部iPod都沒有....而iTunes強迫人安裝QuickTime我更加不會想用它。
前幾日試用過SongBird,感覺不錯,是用Firefox改出來的iTunes替代品,不過軟件介面幾好用,完全是我想要的東西。
SongBird本身其實已經有齊基本播放/管理功能,其他功能可以藉由和Firefox一樣大量的Addon達成,當然亦有大量Theme可用。
SongBird除左安裝版本 : http://getsongbird.com/
亦有Portable版本 : http://portableapps.com/apps/music_video/songbird_portable
個人推薦以下Addon :
directory browser: 不用Import media file,只需要揀音樂檔案擺放的資料夾就可以播放。
LiveTweeter: Tweeter和Live Messenger的Now Playing Addon。
MinimizeToTray revived: 縮小至system tray。
Now Playing List : PlayList Addon。
現在很多人都用iTunes,不過我個人對Apple出品沒有興趣,到現在我連一部iPod都沒有....而iTunes強迫人安裝QuickTime我更加不會想用它。
前幾日試用過SongBird,感覺不錯,是用Firefox改出來的iTunes替代品,不過軟件介面幾好用,完全是我想要的東西。
SongBird本身其實已經有齊基本播放/管理功能,其他功能可以藉由和Firefox一樣大量的Addon達成,當然亦有大量Theme可用。
SongBird除左安裝版本 : http://getsongbird.com/
亦有Portable版本 : http://portableapps.com/apps/music_video/songbird_portable
個人推薦以下Addon :
directory browser: 不用Import media file,只需要揀音樂檔案擺放的資料夾就可以播放。
LiveTweeter: Tweeter和Live Messenger的Now Playing Addon。
MinimizeToTray revived: 縮小至system tray。
Now Playing List : PlayList Addon。
訂閱:
文章 (Atom)