因為現在 SERVER 已經是換機櫃, 藏在雜物間了, 拔機器很麻煩... 隨便換個東西就要半天一天的, 因此先公告一下.
時間不是這週末 (2008/05/10 ~ 11), 就是下週末 (2008/05/17 ~ 18), 會被影響的人請事先作好心理準備吧 [H]
誰會被影響? 不多啦, 只有...
看起來好像很多? 哈哈... 加一加不知道有沒有十個人? [H]
看來是換四核心CPU的時機到了 [H]
之前弄了半天的歸檔程式,效能都卡在 .CR2 -> .JPG 這段。雖然祭出了 ThreadPool,也想盡辦法把獨立的工作湊在一起,盡量提升 CPU 的利用率,不過得到的效果有限,因為最後都是剩下 .CR2 的檔案轉不完啊,其它拿來填空檔的工作早就做完了,實在不成比例... 整體效能還是卡在最慢的 Canon Codec 身上...
這次無意間想到,單一 process 內,Canon Codec 有過多不能重複進入的問題 (不能同時利用到兩顆CPU),那麼拆成兩個獨立的 process 是否就解決了?
想一想還蠻可行的,通常為了安全,都只需要做到 process 內的 LOCK 就夠了,不需要做到全域的 LOCK,除非要 LOCK 的資源是跨 process 會用的到的才需要這樣做... 在真正改程式下去之前,當然要先驗證一下...
用之前的 LIB 簡單寫了個執行檔,就單純的把 .CR2 轉 .JPG 而以。寫好後同時 RUN 兩份,讚! CPU 利用率飆到 80% (雖然離理想的 100% 還有段距離) ... 不過在我的 E6300 CPU,同時跑兩份,執行速度倒沒有下降,差不多..
確定這方式有效之後,花了點時間改我的歸檔程式,把轉檔部份抽成 .exe 然後由歸檔程式來啟動,一樣維持同時有兩個 .CR2 轉檔程序進行。耶! 情況不錯,轉一個檔案一樣要 70 秒,但是 70 秒過後可以轉完兩個檔案... 平均起來等於速度加倍了...
之前一直不想用這個方法,因為一來 IPC (inter-process communication) 是件麻煩事,不想去碰,二來啟動另一個 process,參數的傳遞也是個麻煩事,大概就只能靠檔案或是 arguments ... 或多或少都要處理到一些 parsing 的問題... 三來執行的回傳值也是一樣,總之都碰到 IPC 的問題就不想去碰他了
不過這次評估了一下,這些動作麻煩歸麻煩,至少不是花運算資源的動作,跟一張照片轉 70 秒,一次動則上百張的量比起來,怎麼算都划算...
真糟糕,這樣下去是不是代表該換 Q9450 了? 咳咳...
題外話,這個 plugins 又有小改版了,原網址可以 [下載]..
到這邊差不多告一個段落了,歡迎各位下載回去用。只不過有些功能,你的BLOG SERVER要配合調整才會有效。統一說明一下:
1. CSS
我喜歡用這個函式庫的主要原因,是因為它長出來的HTML很乾淨,因為樣式的部份都拆出來到CSS了。不過缺點也是你必需另外想辦法把CSS放上去... 附上原廠提供的CSS內容,看你的BLOG SERVER可以怎麼改就怎麼改。以我用的CommunityServer為例,只要進入DashBoard,到修改版面的地方,它提供 "Custom Styles (Advanced)" 頁面,把 CSS 貼進去就搞定了!
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: Consolas, "Courier New", Courier, Monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
不過別急著貼!!! 如果你想要下一個功能的話,CSS 還要再多貼一段...
2. COPY CODE
這個功能不難,就透過 JavaScript 把一段文字放到剪貼簿就完成了。不過麻煩的是這些 CODE 怎樣偷渡到文章內容裡... 我用的 CS 預設會把 <SCRIPT> 給檔掉,直接在HTML裡加SCRIPT是行不通的。當然可以改communityserver.config,不過這樣有點麻煩,不喜歡這樣改... 於是我搬出了 HTC..
HTC 的原理很簡單,CSS是統一管理各種樣式,而DHTML的一堆事件,像 onclick="..." onload="..." 等等事件為什麼不能像CSS一樣統一管理呢? 可以的,只不過這就要靠 IE 才支援的 HTC (HTML Component) 才辦的到。後起之秀JQuery其實也有差不多的功能,不過要搭配 CS 的話,一樣得想辦法把 <SCRIPT> 給藏到HTML裡有點麻煩... 所以最後我還是選用 HTC 的方式來實作這個功能。
設定很簡單,CSS 再加一段就好:
.copycode {cursor:hand; color:#c0c0ff; display:none; behavior:url('/themes/code.htc'); }
再來就是把這個 HTC 檔案放到 CSS 裡指定的目錄,以上面的CSS來說,你應該把HTC放在 /Themes/Code.HTC
SERVER 的部份這樣就大功告成了。未來在插入CODE時,只要勾選這個選項 [產生出來的HTML會包含原始程式碼]:
最後輸出的成果就會像這樣,標題右方的 [copy code] 功能就正常了。按下去之後,SAMPLE CODE 就會自動複製到剪貼簿,不會因為加了一堆格式,讓你複製下來的 CODE 不能直接使用...
1: using System;
2:
3: public class Sample {
4: void Method() {
5: Object Obj1 = new Object();
6: Object Obj2 = new Object();
7: Console.WriteLine(Obj1.Equals(Obj2)); //===> false
8: Obj2 = Obj1;
9: Console.WriteLine(Obj1.Equals(Obj2)); //===> true
10: }
11: }
這個功能,在預覽的時後就沒加上去了。另外預覽的畫面也做了點調整,一方面不是直接用IE開啟HTML檔,因為這樣會有一堆安全警告的訊息,我改用HTA (HTML APPLICATION)來實作預覽的功能。為了感謝提供這個LIB的原作者,我也在預覽的畫面裡加上他的首頁了。最後,當然也要讚助一下我自己的網站... 哈哈 [H]
好,這個PLUGINS大概就告一個段落,未來大概就修正BUG了,需要的人歡迎下載使用。如果要散佈請注明出處。
[下載位置]
沒錯,我的文章在四月號的 RUN! PC 刊出來了,之前花了些時間在研究執行緒跟 ASP.NET 搭配起來用的技術問題,有點小心得,就整理了一下投稿了,運氣還不錯,雜誌社也願意刊出。初次投稿花了不少時間,花在重新思考 sample code 怎麼寫比較能突顯主題,圖表要怎麼畫才清楚明瞭等等瑣事上面,原來當個專欄作家 (我沒有專欄啦,只是投稿而以) 也不是這麼簡單的... 文章的內容嘛,看雜誌就知道了,這篇是留著作個紀念,同時也是讓看了這篇文章有話要說的讀者們,有個留下 comments 的地方。 文章裡提到的 sample code 可以到 [這裡] 下載,懶的抓回去執行的人,也可以直接到 [這裡] 試 RUN 看看文章裡提到的範例。 在執行這個範例程式之前,請先注意一下,IE預設只會對同一個網站建立兩個Http Connection,因此有可能會看到不一樣的測試結果。如果想要調大這個限制,請修改下列的註冊機碼,或是下載本文的範例程式,匯入[IE.reg]註冊機碼。 調整IE同時連線數的註冊機碼
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings]
"MaxConnectionsPerServer"=dword:00000008
"MaxConnectionsPer1_0Server"=dword:00000008
有鑑於好奇心強的網友,回應時老愛研究 BotCheck 跟內容的關聯性... (Honga 就是你...),一時興起把 BotCheck 的 ASCX 改寫了一下,會在驗証通過時,把 BotCheck 的題目及答案附加在 comment 的後面,就像這樣:
免的每次都在那邊貼這次的 BotCheck 是啥.. 哈! 特此留念!