顯示包含「程式設計」標籤的文章。顯示所有文章
顯示包含「程式設計」標籤的文章。顯示所有文章

2016年6月3日星期五

使用PowerShell多層資料夾大量轉換檔案繁簡中文

前幾天公司叫我把一個ASP.NET MVC專案由繁體中文轉換成簡體中文,
雖然都知道只是轉字不轉語法,但要求是這樣都沒辦法。
第一時間就想到用古法知名的ConvertZ,但原來ConvertZ只是支援一層資料夾,並不支援Recursive轉換檔案。

還是自己乖乖做小程式,網上一些文章介紹兩種方法,
一是引用VisualBasic.Runtime的Strings.StrConv功能,
二是引用Microsoft Office的Microsoft.Office.Interop.Word中的簡繁互換,
但公司是英文版Office,沒提供Language Pack,所以沒有安裝那個中文繁簡轉換增益集。
最後只可以選擇前者,但完成後,發現轉換不到簡體,既沒有亂碼,
檔案都是有修改過,但文字原封不動。
不知道是否英文Windows + 英文.NET Framework影響,都沒有研究下去。

突然想起之前SSIS專案用過Uniconv,(見UniConv - 超強轉碼工具 BIG5/GB/UTF8/Unicode)
Uniconv除了轉換內碼如Big5,UTF8等等,還可以繁簡轉換的。
花了一點時間研究如何用CMD做Loop之後.......
還是使用PowerShell更簡單。

完成後的程式碼如下:

#取得所有主資料夾和子資料夾所有檔案,可自行設定Filter
$files_table = Get-ChildItem -Path "C:\Source\MVCSite" -Include *.cshtml,*.cs -Recurse
#建立暫存資料夾供uniconv使用
$temp_folder = "C:\Source\Translated\"
foreach ($file in $files_table)
{
    #取得個別檔案所在的路徑
    $origin_folder = Split-Path -Path $file.fullname
    #複製至暫存資料夾的路徑
    $temp_file = $temp_folder + $file.Name
    #uniconv命令行
    $arg = 'UTF8 "' + $file.FullName + '" UTF8 "' + $temp_file + '" ToSimplifiedChinese'
    #write-host是debug用,類似echo或debug.print
    #write-host $arg 
    #啟動uniconv, wait參數是等待一個程序完成才執行下一個
    Start-Process -FilePath "C:\uniconv\uniconv.exe" -Wait -ArgumentList $arg
    #複製回原本的資料夾
    Copy-Item -Path $temp_file -Destination $origin_folder -Force
    #刪除暫存檔案
    Remove-Item $temp_file
}
程序上沒太多技術細節,但我轉換了多層資料夾,大量檔案都沒有問題,而且速度都很快。

要在PowerShell執行多行程序可以使用";"分號代替LineBreak。
$files_table = Get-ChildItem -Path "C:\Source\MVCSite" -Include *.cshtml,*.cs -Recurse;$temp_folder = "C:\Source\Translated\";foreach ($file in $files_table){ $origin_folder = Split-Path -Path $file.fullname;$temp_file = $temp_folder + $file.Name;$arg = 'UTF8 "' + $file.FullName + '" UTF8 "' + $temp_file + '" ToSimplifiedChinese';Start-Process -FilePath "C:\uniconv\uniconv.exe" -Wait -ArgumentList $arg;Copy-Item -Path $temp_file -Destination $origin_folder -Force;Remove-Item $temp_file;}

參考:
[C#].net的簡繁轉換
CODE-封裝Office繁簡轉換服務
用vb.net自製一個簡繁互換!!不用再開Word去互換

2013年3月12日星期二

創業,寫手機遊戲程式,停一停,諗一諗...

手機Apps市場都是報喜不報憂,聽到的都是XYZ遊戲令A君一夜間成百萬富豪,一年內成矽谷新秀,三年後比某某NASDAQ主板公司收購等等消息。

但...寫Apps是否真的必勝?
我不認同亦不否定,但剛看到網絡上有過來人寫的文章,他們都是Solo的獨立開發者,工作就是寫(賣)Apps。
Apps的銷量就等同他們的收入。

激情過,努力過,當預見到事與願違時,應該及時斬纜,還是堅持獨守孤城呢?

想藉寫Apps創業的朋友,特別值得一看,從中可以啟發一下。
一個人獨立開發iPhone App的甘苦談…
一個人獨立開發iPhone App一年(半?)回顧
iPhone独立开发者没有神话,只有故事
一个80后独立开发者的话,依然没有奇迹,只有故事

Candy Crush Saga - King.com CEO - Riccardo Zacconi

2012年9月24日星期一

Free Metro UI ICON

現在若要找一些圖示給Windows程式或網頁程式使用,都可謂隨處可得。
但若用在Windows 8 Metro UI的App上,便要用Metro式的Icon了。


找到兩個有關的Metro UI Icon的資源,都是免費的。

Metro Studio – Your Modern UI Style Icons Paradise

Syncfusion Metro Studio 2
- 內建超過1700個Metro-style icon。
- Metro Icon Editor,自訂建立Icon。
https://www.syncfusion.com/downloads/metrostudio



The Noun Project

http://thenounproject.com
免費的Symbols資源網站,這類純色Icon,正好用來建立Metro Icon。

2012年1月10日星期二

JavaFX的Free Load/Stress Test Tool - loadUI

因為近期現職公司打算由Shared Hosting搬至自家Server,所以要對幾百個User的Server做Load Test。

整天都在找一個免費,比較易用的Load Test (或者叫做Stress Test)的軟件。
第一時間不用說,上Google Search "Free Load Test Tool",結果都是連去StackOverFlow網站。
另外還找到兩個SQA方面的資源網站 :
Software QA and Testing Resource Center - Load and Performance Test Tools
Software Quality Assurance Testing and Test Tool Resources - Performance Test Tools

試用過多個在Windows上可行的方案,到最後都落空,因為沒有一個"我"認為是稱得上好。
我需要這個軟件的要求很簡單,不是要把Server跑到半死為止,純粹是想在多個(100-200+)的New Session User下的Performance 圖表和Request/Response時間參考數值等等而已,更莫說Disk I/O,CPU loading方面,免費但簡單易用的,就可以。

原以為很多選擇,但原來事情沒這麼簡單...
OpenSTA
首先試用的是OpenSTA
最後更新日期已經是2007年,最後支援Capture & Record模式的IE版本竟然是IE7。
已心知不妙,但即管用一下。程式很累贅 - 有三個元件 : OpenSTA Commander / OpenSTA NameServer / Web Relay Daemon。

奇怪古老的介面,很難接受,但始終我要的是功能吧...新增Http Script,按錄影後,雖然OpenSTA只支援IE7,但沒有IE7的情況下會如常叫出Default Browser - IE9。
IE9會Load入Plugin去Record,但完成的時候,Ops!竟然不能Save或Replay。出現Error Message :
Compiling... NEWSCRIPT.HTP
scl: error (openout), Error Opening NEWSCRIPT.TOF as Output
-Invalid argument

上Google搜尋,很多人有同樣問題,是軟件本身不支援Windows Vista/7/2008,我都懶得去再試。

20120109_222342_000-t.jpg20120109_223349_000-t.jpg

Web Capacity Analysis Tool (WCAT)

WCAT,微軟出品,必屬User Friendly,但竟然是Command Line軟件,沒有官方的GUI,原因我估都是因為Visual Studio有Team System / Test Editon的Application Center Test (ACT)做Load Test,不想搶去自己的客人吧?

雖然有人寫了WCAT Fiddler Extension,但是沒有用的。看看下圖,我實在不知怎樣搞。
WCAT Performance test didn't produce output file

20120109_224529_000-t.jpg
但我沒有放棄,因為我對微軟有信心。唯有從Command Line入手。
找到個教學網站和Doc:
Stress testing with Microsoft Web Capacity Analysis Tool (WCAT)
WCAT 6.3 Documentation

我花了幾小時,依然搞不到一個Test,需要人手去修改兩個Script Files - home.ubr/settings.ubr,感覺上就是差一點點就搞定,但總之失敗,再次放棄。

JMeter
這個名字叫JMeter的軟件,在SOF上,很多人推薦
Apache官方出品,但程式使用上是極度困難,需要花時間學習。
網上教學是幾多的 - http://www.google.com/search?q=jmeter教學
我順著以下幾個教學相互補短,亦可以執行到Test。
Apache jmeter 2.3教學
JMeter 使用入門 -- HTTP Request
Stress Testing your website with Apache jMeter

但出來的Graph,怪怪的,而且運行後,我的電腦接近癱瘓。
Image-39-t.jpg

Fiddler2+StresStimulus

這個就開始像樣,支援100個virtual users及Input Field的Parameter,換句話說,你可以用它的Parameterization功能去Fill Form/Post Form,這個是很重要的,例如要測試一個搜尋頁面,需要自動化輸入關鍵字已經是一個好例子。
但依然有很多限制 - Free and Pro Editions Comparison Chart

20120109_230747_000-t.jpg20120109_230943_000-t.jpg

loadUI
到最後試用的是這個名字叫loadUI的軟件,官方網頁裡頭的介紹 - What is loadUI? 是這樣說的:

loadUI is a open source Load Testing solution that is free and cross-platform.
With a visual, drag-and-drop interface, it allows you to create, configure and redistribute your Load Tests interactively and in real-time.

It supports all the standard protocols - from HTTP(S), HTML, SOAP/WSDL and REST to AMF, JDBC, JMF and POX.

In a single test environment, loadUI provides complete test coverage, including Web Load Testing, Automated Testing, Stress Testing, and more.

很利害的介紹,安裝的時候,竟然要求我電腦安裝JavaFX!?我第一次使用軟件要安裝JavaFX,正好見識一下,好喇,要就安裝喇。
之後Double-Click short-cut,雖然等了幾十秒介面才出來,但GUI十分漂亮。經歷之前幾次的失敗,還是使用上才是最重要。

軟件幾易用,很簡單就可以搞到一個Stress Test,配合同公司免費的soapUI可以一併做automated test。暫時未試到有太大限制,值得一用。
本身有Sample Project已經是做HTTP Load Test,所以幾乎你開啟軟件後,改一改設定,已經可以立即使用。
老實說,JavaFX給我幾大驚喜,之前幾乎沒接觸過JavaFX的軟件。

loadUI-Image-001-t.jpgloadUI-Image-002-t.jpg

到最後我決定會用Fiddler2+StresStimulus和loadUI互補地使用,但後者是比較值得去研究一下的。

其實我見到有部份Blog友說用SeleniumWatin這類Automation Test軟件做Stress Test,但其實是很不同的。一直我說的New Session User以及模擬真正的Browser就是原因。

可以看看這裡的說法:
How do You Stress Test Your Web Application?

WatiN
This tool isn’t really intended as a stress test tool. It’s primary use is for UI testing. It provides a nice API to launch and operate Firefox and IE so that you can write C# UI tests. However by launching multiple instances one of my correspondents has been successfully using it for stress testing. I guess my main question would be, how much hardware I would need to run enough instances of Firefox or IE to simulate high loads.

Selenium Grid
Selenium is another UI test tool, similar to WatiN. It’s what I use for UI based tests. Selenium Grid allows you run to many Selenium tests in parallel. Once again, it’s primary design goal is to aid UI integration build tests, but there’s no reason you couldn’t use it run stress tests.

Selenium 2 has merged in WebDriver which can drive the headless browser HtmlUnit (see below), this might mean that sufficiently high loads can be driven from minimal hardware.

2011年12月29日星期四

Programming / Unit Test 的Google Trends & Insights

一直考慮是否轉用xUnit做日後新Project的UnitTest,上Google Trends搜尋一下,結果很驚人。
再搜尋多幾個關鍵字,結果實在令人很難相信。
雖然到最後都只可以說是參考數值,但出自Google的,又有一定的參考性。

首先就是.NET的Unit Test,可見是每年下跌,是什麼原因呢?
http://www.google.com/trends?q=nunit%2C+mbunit%2C+mstest%2C+xunit


之後再用較新品的Google Insights再比較一下,結果差不多。
NUnit vs MBUnit vs MSTest vs xUnit
http://www.google.com/insights/search/?hl=zh-HK#q=nunit%2Cmbunit%2Cmstest%2Cxunit&date=1%2F2007%2060m&cmpt=q



再看多一點,ASP.NET vs PHP vs JSP
PHP竟然有下跌跡象...
http://www.google.com/insights/search/#q=asp.net%2Cphp%2Cjsp&date=1%2F2007%2060m&cmpt=q



難道Google Insights是大淡友,只吹淡風?
看看近幾年應該不會下跌的技術 - jQuery
結果就正常得多。
看過,想一想可能性的原因,思考一下罷了。
http://www.google.com/insights/search/?hl=zh-HK#q=jquery&date=1%2F2007%2060m&cmpt=q

2011年3月11日星期五

網頁程式員必須知道的Web Test

假如你找工作時,遇到有人問你 : (你的網頁程式是如何做測試的?)
最常見的答法或者是:(完成後,自己試試,看看有沒有Error,速度好不好,試一試如SQL Injection之類的安全性。)
或者會"專業一點"答:(做一做Unit Test,Stress Test吧。)
但如果再追問你:(做多少次?)
面對這個問題,無論你答多少次都是Fail...

就如上面所講,很多人都知道什麼是UnitTest,LoadTest,StressTest,即使沒有做太多,但都有概念。
但以現今複雜性高的網頁程式來說,單單對程式碼做UnitTest,針對Server做StressTest其實不夠意思。

倒不如做我現在要說的Web Test
Web Test的意義在於實際模擬使用者情況下操作程式,使用者數目可以是單人或模擬多人使用,並循環地測試。

如一開始所說,試想一想你要測試一個Registration Form,人手做一千次,每一次資料要不同,你想一想時間要多久?
或者測試一個Shopping Cart,由登入 > 購買 > Checkout > 打Billing/Shipping Address 到完成,即使有一些AutoFill Form軟件幫助,相信做100次你已經夠悶。

所以我們需要靠一些WebTest軟件幫助,如果你比較熟悉Visual Studio,你應該聽過Visual Studio Team System版本,VSTS版本其中一個獨有功能就是Web Testing,但我暫時不打算介紹它,始終VSTS是較特殊版本,未必很多人有機會使用到,而且假如你寫PHP,Ruby & JSP的話就用不到。


基本上這類軟件大前題就是要做到Automated,全自動化去代替人手測試,如果在Google搜尋Web Test Tool Software,你會找到很多形形式式的軟件,但今次我想介紹給大家三套免費Free的WebTest Software,而且是比較易上手的。

1. iMacros
有使用Firefox的人一定不會陌生,因為iMacros是長期穩佔官方Firefox Extension的主頁上。
iMacros可以整合Firefox,亦有IE的版本。
隨了可以記錄你Mouse/Keyboard操作,還有兩種錄影模式,一種是用Form Element的ID去記錄,另一種是X/Y定位形式。
功能上都很夠一般使用,支援Random資料輸入等等。
但缺點就是你只可以模擬一個使用者,雖然你可以開多個Browser操作,但我自己所測試,有機會會Crash。
另一樣缺點就是Random資料的Data Soruce你需要自己寫Javascript或者用VBScript連接DataBase。
但無論是個人或商業用都是免費的。


2. Badboy
很另類的軟件名稱,這個是獨立軟件,不依靠任何Browser。
跟iMacros功能大致一樣,但其中一樣我喜歡的是Data Source方便比iMacros做得好很多。
無論Excel或SQL,Badboy可以經ODBC去連接取得資料。
而且更可以以Multi Thread形式去模擬多使用者
但不是沒有不足之處的,首先是Badboy的Browser Engine是IE,即使最新版本都不能轉Firefox或Chrome,而且軟件本身免費授權方式是非商業用。



3. Load Tester Free
這個是最專業的一個,除了上述所講的錄影,DataSource,模擬多使用者功能,還包含一些 Profilering /Stress Test功能,亦有詳細報告等等。
免費版本和收費版本分別是,免費版最多模擬10人使用和有限度去記錄Report項目,但其實我覺得都很夠了。
另外吸引我之處是這款軟件對ASP.NET作出針對性優化,ASP.NET是有一種東西叫ViewState,ViewState消失的話,整個ASP.NET頁面便告死亡。
所以在做自動化工作時,維護ViewState很重要。
有興趣可以看看 Load Testing 101: ASP.NET Web Applications



以上三款軟件,我自己暫時使用iMacros,不排除會轉用其他兩個,始終各有優缺點。
最後想說的是,就我個人而言,我自己都很少做Unit Test,除了工作時間緊迫關係之外,我覺得做這類實際的Web Test比較重要。
因為WebTest最大意義是自己做一次UAT程序。
配合程式本身的Exception Logging,其實都已經足夠。

2010年11月30日星期二

Interview 問題 - 如何防止多使用者同時修改同一Record

昨天見了兩份System Analyst的工作,其中一份,又再被問起老生常談的問題。其實這個問題,我已經被人問了幾次,所以我決定寫出來,和大家分享一下。

問題如下:

不論是WinForms還是WebForms,假如有兩個使用者Tom 與 May,同時已經打開Edit Form,在修改同一個紀錄。
Tom正在埋頭苦幹更新紀錄,May卻慢條斯理工作。

Tom首先完成更新工作後,在12:10pm按下[Submit]按鈕,更新工序完成。
但與此同時,May還在更新,最後在12:20pm才完成工作,那當May按下[Submit]按鈕時,便會Overwrite Tom所更改的資料。
如何防止這個情況?


大家花幾分鐘,先想一想....



這個問題有幾個方向,我們要先決定 :
(1.) 是否容許讓多個使用者開啟同一個紀錄,並可以寫入資料庫?
(2.) 較遲的開啟者只能唯讀?
(3.) 完全防止其他人開啟同一個紀錄?
因為如果決定是(2)和(3)作解決方案的話,換句話說,在Tom進入時,我們已經要有一個Flag去讓May知道有其他人在更改資料中,再由Application 層面去決定如何提示和防止載入。

但很明顯沒有太多人會認為(2)和(3)的做法是最好,因為問題來自那一個Flag會產生DeadLock問題,先解釋一下為什麼 :
假設要做到(2)和(3)的話,可能大家會想到以下做法 :
1. 在SQL Table中加入一個Column - 叫[Locked], DataType Bit, Default 0
2. 當Tom 進入時執行: Update MyContent Set Locked=1 Where id=@id
3. 當May 開啟紀錄前,會檢查[Locked]是否等於1,是的話,就不能更改或進入。
4. 當Tom更新完成後,把Locked設回0


但問題就來了,假如Tom的電腦Hang機或Reboot,那一個紀錄就永遠是Locked=1,其他人亦不能修改,需要由Admin把Locked設回0。


那好了,說了那麼多,那應該怎麼做?

不知道大家有沒有接觸一些Version Control 或者Source System , 例如SVN,每次Commit一個檔案,都會有一個Revision流水號。

參考SVN的原理,我會把那一個Flag Column刪除,加入以下Column
ADD VersionNumber INT;
ADD Modifier Int; /*(記錄StaffID)*/
ADD ModifyDate DATETIME;

在軟件層面上加入一個Version Checking方法,
不論你是WinForms或者WebForms使用Timer或者SetTimeOut + Ajax都是一樣。

程序大約如下:
1. Tom和May都可以同時進入Edit Form修改紀錄,兩個人得到的VersionNumber都是1。
2. 當Tom按下Submit時,會Update VersionNumber/Modifier/ModifyDate,假設是VersionNumber=VersionNumber + 1。
3. 當May之後按下Submit時,會進行一個Version Checking,因為Tom已經把VersionNumber轉變為 2,所以May會被提醒Version不同,這時候可以在讓May選擇覆寫? 檢視更新版本? 還是取消修改?
4. 在軟件層面中用Timer加上剛剛說的Version Checking,即使在編輯途中,也可以知道文件已變更。

以上就是我個人推薦的解決方面,沒有複雜的技術,但這可以解決到多人執行的問題,即使是三個,四個,五個人都可以應付到。
因為他們都可以有選擇權去繼續還是取消。

但當然我不得不承認,這還有很多解決方法。

再假設一個比較不真實的例子:
假如在同時同分同秒同微秒去執行讀寫Query的話,那會怎樣呢?

例如:
一部出單系統的過程是: (當然這是簡單虛構的Flow以容易理解)
1. 輸入Product ID查詢是否有貨
2. 有貨的話,提出貨品,並扣減數量
(1)和(2)之間沒有選擇,是連續性進行。

貨倉只剩下最後一部iPhone,有兩個Sales (Tom 和 May),同時想賣iPhone給客人,假設我虛構成是同一刻進行的話,兩者同時輸入ProductID,按下確定,會怎麼樣?
雖然大家都覺得這種在同一微秒的交互執行是幾乎沒有可能,但既然Programming是對錯誤零容忍的話,就深入看一看究竟。

而上述問題,已經變成SQL Server的Transaction Isolation Level 和 Lock的問題,之後我會再寫編文和大家分享。

2010年8月9日星期一

Eclipse artifacts.xml ???

今天突然在D:\ Driver出現一個artifacts.xml File。
位於
D:\_opt\public\technology\epp\epp_build\36\eclipse.S-3.6RC4-201006031500\

由於我用的Eclipse只是PDT+Subclipse,相信是Subclipse update後出現的,

2010年8月1日星期日

2010年7月16日星期五

外國人眼中的電腦程式員等級

剛剛看到這篇文 - What makes a programmer “senior”?
起英美地方的Programmer一樣細分
  • Junior Programmer
  • Programmer
  • Senior Programmer

詳細內容大家可以自行去看看,不過我Highlight文中所講的五點:
  1. You know more than one (programming) language
  2. You regularly code outside of work
  3. You’ve built software from conception to implementation to support
  4. You innovate
  5. You apply software to solve real problems

  • 第1點我不同意,雖然大多數有若干年經驗的Programmer都能操超過一種Language,但其實只係Primary和Secondary關係,好似我本人來說,.NET平台是Primary,PHP只是Secondary for hobby,但其實同做唔做到Senior似乎冇關係,我經常放起口邊的 : (做電腦,寧願做一種技術的Expert,好過周身刀,冇張利。)
  • 第2點更加不同意,廿多歲時,心中還有團火,好多人慢慢漸大時,其實工餘時間再去Coding的動力已經不大。
  • 第3點即是所謂一條龍服務,其實香港好多人都係,但.....
  • 至於第4和第5點,其實取決於不同公司的方針吧...有很多老闆接受不到太新的事物,怕行先死先...而solve real problems...其實即是solve boss's money problem...

文中的留言比內文精彩,有印度人留言話 : ( Here in India, anyone who can grind for long hours is a Senior Developer.)

這個Blog我本人已Bookmark,有很多都幾適合香港同行睇的文如:
Programmers are people, too
Outsourcing Doesn't Work
都講出我的心聲,即使用Google Translate慢慢看,我都要看完它。

2010年6月3日星期四

終於收到TechNet Plus和MSDN Subscription通知



若果要說做Microsoft的MVP有什麼好處,我相信除了可以比一舨人快得知微軟內部消息之外,最大權益就是TechNet Plus和MSDN Subscription,或者普通用家可能會很陌生,讓我介紹一下。

TechNet Plus SubscriptionMSDN Subscription其實是一種軟體授權模式。
兩者的共通點都是可讓用家優先下載使用新版和舊版的軟件,而且並不是試用型式,是有正式產品序號的。有效期限為期一年,在這一年內,Subscription包含的軟件都可合法使用。
過期後,若不續期,你依然可以繼續使用,但不能再次取得新的產品序號,以一些有經驗的用家所說,其實Subscription的序號是專屬的,並不會過期,只要保存序號就可以用下去,當然這是未經小弟証實的,不過可以理解的是,網上流傳的什麼完全版ISO,什麼"神Key",就是由一些違反授權的用家放出,當然這類"神Key"很快便會失效,因為Subscription不是大量授權,是以Single User計算的。

在軟件上,TechNet Plus SubscriptionMSDN Subscription都共同擁有以下授權:
  • Windows XP至Windows 7
  • Windows Server 2003至2008
  • Office 2007至2010

分別在於MSDN的有Visual Studio,而TechNet的就會有如ISA Server,BizTalk Server這類選擇。

當然亦因為這樣,價格不菲,MSDN的就要USD$11,899,TechNet的就USD$349。為什麼TechNet的便宜很多,我估計最大原因是Subscription License是不能用在商業環境下。原意都只是想給開發管理人員有一個"較完美"的測試環境,但TechNet的產品,遍遍就大部份只能在商業環境下才用得上場,我想價格便宜都算是一種利誘,等你以"正式版型式去試用"吧。
詳細看看這個比較表就知道為什麼了

所以其實微軟對我這類支持者,還算不錯了吧。 :hehe:
我的Windows 7, Visual Studio 2010, Office 2010都是靠它。


了解TechNet Plus Subscription
了解MSDN Subscription

2010年3月2日星期二

Fixed Wolrd Wide Web Publishing Service Error:1068

我其中一台VPS Server是用Windows Server 2003 Enterprise R2 SP2版,前天遇到一個嚴重問題就是IIS 6.0完全死亡。
起初我完全找不到原因,後來Format過後,行完Windows Update後,問題又重現,所以我肯定是Windows Update後出現問題。
死亡症狀是以下的Service都不能啟動:
- Http SSL
- Server Service
- WorkStation Service
- World Wide Web Publishing Services
- IIS 6 Application Pool

而錯誤訊息是
中文: 無法啟動本機電腦的World Wide Web Publishing Service 服務 錯誤1068: 相依服務或群組無法啟動
英文: Could not start the World Wide Web Publishing Service service on Local computer. Error 1068: The dependency service or group failed to start



找尋各Update Items後,發現就是這個KB973917殺死我的IIS,Google後果然有千千萬萬既人已經中招

因為到現在MS依然把它放在高優先權的更新。

解決方法有兩個
1. 去Control Panel ->新增移除程式->uninstall KB973917
2. 重新安裝一次SP2
而我既選擇係不安裝KB973917...

事實上Microsoft 技術支援都有說明 : Internet Information Services 6.0 may not function correctly after installing KB973917

2010年1月28日星期四

Java入門資源

近期對Android手機開發有點興趣,而且我覺得人力市場上,似乎手機開發比Windows軟件或者Web開發需求會更大,Windows軟件不用說,早就開始式微,就算公司內部用的CRM,HRM,POS甚至ERP都搬上Web平台,但亦同時因為太多Open source的Web App,其實長遠來說,會對Web Programmer需求慢慢減低。
而且已經得知Windows Mobile 7不會兼容WinForm軟件,所以我對.NET Compact Framework已經死心,當是興趣又好,前途又好,玩下Java都無妨。

貼一個Java入門資源 - Java 學習筆記
Part 1 | Part 2
下載版 :
Part 1 | Part 2

是繁體中文的,由淺入深,我相信就算完全未接觸過Programming都可以學有所成,因為這個台灣網友真的寫得很好,你可以當是"快快樂樂學XX"系列。(有一定電腦年資的應該知道什麼是"快快樂樂學XX"系列,如果你不知道是什麼,上Google Search "快快樂樂學" 吧。)

如果你好像我一樣由C#轉去Java,或者你需要這篇
Java vs. C# Comparison

Reference Document / Sample Code可以到以下兩個網站,對初階或中階的人來說,相信足夠有餘。
Java Notes (比較整齊,亦有程式上的解說,推薦這個。) | java2s (這個Sample Code是十分多,但可惜不是解說得很詳盡。)

至於IDE方面,不是Netbeans就是Eclipse了,反正我們是學語言,不是學用IDE,找一個使用起來感覺比較好就可以了。

2010年1月20日星期三

Apple iPhone Apps開發 VS Google Android Apps開發

到目前為止,.NET CF 4.0 (.NET Compact Framework) 都沒有任何消息,雖然VS2010 RC推出日期是TBA (原定2月中,但已証實Delay),但就正如我之前所說,.NET CF 4.0是Windows Mobile最後希望,即使未來.NET CF 5.0會有什麼大更新都不可能追過iPhone平台或者Android。
但現在WM已經在垂死邊緣,WM6.5對End User和開發者都沒有驚喜,WM7推出遙遙無期,HTC都開始推Android多過WM。

而且iPhone和Andriod的勢頭實在太強,到處都是相關討論,我想是時候去研究一下其他平台。
如果你和我一樣都想從iPhone和Android中,二擇其一的話,定必要看看以下兩篇文章。
軟體商怎選Apple iPhone與Google Android?
Android versus iPhone Development: A Comparison

特別是zdnet那一篇,其實我都幾同意,iPhone的門檻較高,先要買部Mac機,學用Mac之餘,再買XCode IDE,再來就是學Objective-C,
而Android就較易入門,Eclipse CDT加上ADT就可以,語言方面則是Java。

我個人則對Android比較有興趣,如果你打算開始的話,我建議先看看這篇文,除了固有Java的Class之外,還有Android的API,和軟件架構。
Android開發筆記
http://code.google.com/p/androidbmi/wiki/DiveIntoAndroid

2010年1月6日星期三

2010

遲來了的新年第一Post。
半個幾月冇寫Blog~因為實在忙於打機同清晒電腦中既日劇...
今天公司出了雙糧,十分Happy,因為第一次拎到一張有咁多錢的支票,不過依然動搖不了我5月轉工的決心。
這段時間又要準備OU於2月8日的第三科考試,最後一份功課都未做好,所以依然都是很忙的一月。

上次講左會寫WM手機版的高登,核心部份都完成。不過寫WM軟件就令我覺得WM手機失敗之處和.NET CF有莫大關連。
.NET CF是.NET Framework的Subset,即使相同的Class,但Compact版本的功能都是弱得很。

很多方面都要如VB6般調用API,而且Compact版本上的Control UI樣子是異常地醜陋,所以為什麼大家一般見到的WM軟件都是很Window95 Look的...不是做的人懶,而是先天的問題,各Control可 customize 的 Property 都不多。
不過...當大家睇到微軟的WM開發部門Team人員後,不難理解....
有時我見到個樣咁"山寨"都會冇心機寫下去...

聽聞MS會在Mix10大會公佈.NET CF 4.0支援Xaml的WPF Form,希望是真的,這是唯一的希望,沒有第三方軟件支持的話,即使WM7都沒有用,要嬴iPhone和Android ,這是最後機會,因為如果UI部份還是這樣,我相信沒有太多人願意寫WM軟件。

20100105_gm1-t.png20100105_gm2-t.png20100105_gm3-t.png20100105_gm4-t.png

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
iphoneui_1-t.jpgiphoneui_2-t.jpg

另外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版高登,進度非常之好,我花了星期六和星期日各一點時間,已經寫好大部份討論區的功能。
進度如下:
  • 抓取吹水台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版高登新年前應該可以完成吧。
2009-12-14-20-43-42-t.png

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/


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,我會答你至少都要"懂"。