在dotNET環境下要產生隨機亂數可以使用簡單的方法,但是當你在多執行緒環境時,產生出來的亂數始終不會很亂,似乎在同一個時間裏面所產生出來的亂數都是一樣的。
在網路上找了些解決方法,然後經過實做的改進,演變出一個可以重複使用的亂數產生器,這個原理是利用Guid.NewGuid()每一次所產生出來的結果都是不同的,在用它產生雜湊碼來當成亂數產生器的種子,這樣所產生出來的亂數就真的很亂了。
在dotNET環境下要產生隨機亂數可以使用簡單的方法,但是當你在多執行緒環境時,產生出來的亂數始終不會很亂,似乎在同一個時間裏面所產生出來的亂數都是一樣的。
在網路上找了些解決方法,然後經過實做的改進,演變出一個可以重複使用的亂數產生器,這個原理是利用Guid.NewGuid()每一次所產生出來的結果都是不同的,在用它產生雜湊碼來當成亂數產生器的種子,這樣所產生出來的亂數就真的很亂了。
最近重新檢視一些程式,物件一多起來越寫越覺得心虛,總覺得程式變得有點混亂。整理的過程中發現一些特殊的方法,慢慢的釋出已經定案的。
以前在用[VB.NET實現多執行緒]這篇文章裏面描述了多執行緒的寫法,如果只是一個那也就直接利用就好了,複製貼上還是蠻簡單的,在整理類神經網路時,試著使用多執行緒去實現它,速度的確提高不少,但程式碼就是覺得不漂亮,於是發明了這個類別。
最近弄了部新電腦四核+SSD的硬體,由於我使用電腦主要是用來開發軟體,因此對於系統的環境有比較多的要求。原本以為SSD應該可以讓系統整體效能提高,的確再開機還有啟動軟體的時候速度快了非常多,但是瀏覽網頁量多了以後,明顯感覺速度被拖慢了,硬碟的燈不停的在閃,猜測是SSD的讀取速度很快,但是寫入速度太慢所造成的,因此開始研究這方面的訊息。
1.裝好Windows 7,主機板顯示卡等驅動
每個程式設計師都會有一套自己的程式庫,爲了叫用方便通常都是寫成static class,這樣就可以不用建立一個類別庫實體就可以直接使用它的方法。而其中有些方法(其實只是函數,因為通常跟這個類的命名關係不大,反正就是全部丟在一起)是用來擴充原來.NET所提供的類別。以台灣人來說,最常見的就是轉換成民國年。
1: public static string ToROCDateString(this DateTime value, string separator) {
2: int yy = value.Year - 1911;
3: return string.Format("{0}/{1:00}/{2:00}", yy, value.Month, value.Day);
4: }
在現在的應用程式開發中,經常會使用到樹狀結構,但是因為樹狀結構有許多種形態,而C#內建的物件又似乎找不到這樣的類別,每一次都要重寫很是麻煩,於是發起想寫一個的念頭。
1: public interface ITreeNode {
2: void AddChild(ITreeNode newChild);
3: void Remove();
4: }
5:
6: public class TreeNode: ITreeNode {
7: public ITreeNode ParentNode = null;
8: public List<ITreeNode> Childs = new List<ITreeNode>();
9:
10: public void AddChild(ITreeNode newChild) {
11: ((TreeNode)newChild).ParentNode = this;
12: this.Childs.Add(newChild);
13: }
14:
15: public void Remove() {
16: foreach (ITreeNode childNode in this.Childs) {
17: childNode.Remove();
18: }
19: ((TreeNode)this.ParentNode).Childs.Remove(this);
20: }
21: }
由於類神經網路需要處理大量的資料與運算,非常適合使用多工的方式設計,以加快整個網路的運作。實際上,類神經網路在求解是非常快速的,意思就是說如果將一個範例丟到輸入單元到整個算完得到輸出值是非常快的,那麼思考方向就不應該是將單一的神經元做成多工的模式。因為當你要建立一個執行緒(thread)也是需要花時間,而一個神經元在做輸出運算也不過是一兩個浮點運算的事情而已,這樣會變得非常不值得,甚至會比沒有多工的時候還要慢。
會有效率上的問題實際上是會發生在學習的過程中,以股票分析為例子,一年就有365個範例需要進行學習,假設一個範例平均要用1000次來進行收斂,那麼就有365,000次的學習運算需要反復的做,因此設計的時候以一個範例為一個執行緒會是比較有效率的設計方式。
由於最近漠哥我開始從萬惡的微軟帝國開始轉戰到PHP上面去發展,按照以前的習慣就是到重慶南路去找書籍,最好是有範例集這樣的書,可以減少我學習的時間。但是到天龍書局一看整個傻眼,PHP相關書籍只有十本不到,而且每一本都幾乎差不多,到隔壁的簡體書店也找不到幾本有用的,這才深深的體會到台灣的資訊環境已經完全被微軟所佔領。
我會轉戰PHP一個很重要的原因,就是它的成本低,又因為我在上海待了很長的時間,可以感覺到PHP在中國市場的佔有率,而且世界上的超大型網站幾乎都是使用PHP所開發出來的,而我正在開發一個大型網站,這麼多的原因,使我不得不放棄使用了數十年的微軟開發環境。
一般我們在寫網頁,表格的數量都是相等而且可控制的,但偶爾會遇到每一行的<td></td>數量是不固定的情況,例如在製作報表的時候,如果沒有將不足的行補滿,表格將會呈現出殘缺的狀況,非常難看。
這在ASP.NET有內建的類別可以處理這樣的問題,而PHP卻沒有內建的方法,必須自己去拼湊,當然每次硬寫程式碼解決也行,但維護起來就會非常痛苦。直接實做ASP.NET的類別是解決這個問題的根本之道。
<?PHP
class HtmlTag {