對我來說,雖然從學生的身分畢業也三年了,但是學習這件事算是個終身事業吧,也是讓人視野提升的一個方法,一直到近年來才可以體會學習歷程從我自身上的昇華,心境上也從一個青澀的小男孩變成社會人士,這樣的可以分為五個階段:
2014年8月5日 星期二
抽象工廠模式(Abstract Factory)
- 抽象工廠特性:
- 意義在於在工廠內,把產品抽象出來,交由實體工廠生產,產品可以由不同元件(object)所合成,客製化生產不同類別的產品,讓各個實體工廠可以去實作實際的生產細節
- 應用的OO精神 :多用合成(Composition),少用繼承(Inheritance)
- 這邊合成的意思是於Client端只會應用interface(例如:AbstractFactory)來生產各種產品,而不需要明白指定是哪種實體的產品(concrete product),也不需要知道AbstractFactory會怎麼合成產品的細節,AbstractFactory會封裝工廠的產品生產過程,Client 端只需要會使用抽象工廠即可,不需要去明白工廠製作細節
- 網路上各種例子表示抽像工廠和工廠方法的界定十分模糊,這裡的Abstract Factory的"Abstract"只是一個觀念,並非一定要用Java 或C#語言中的Abstract Class 修飾詞(modifier),有時候可以用Interface來實作,有時候會使用Abstract,因此符合上述概念,抽象工廠模式有相當大的實作彈性
Labels:
軟體工程
在多層巢狀Container控制項的結構中無法正確resize
- 如果設計的WinForm包含多層container的結構(例如: 一個tab container裡面加了另一個tab container, 然後裡面又包含其他panels等等...),有可能在resize 這個WinForm的同時造成畫面縮放混亂(例如:無法正確執行Panel的Anchor、Dock行為,或者是畫面字體縮成一團等問題),這是一個windows的bug,當container再resize的當下如果本機資源不足或者Kernel的stack空間資源用完才會造成的問題,因此不一定每次都會發生。
- 解決方法:再Parent container或是WinForm要複寫 base.OnSizeChanged()方法去正確的顯示縮小放大,如圖下:
- 參考連結
- C#: Anchored Panel won't resize properly:
- Deeply nested controls do not resize properly when their parents are resized:
Labels:
C#
2014年7月23日 星期三
讀書心得-共同基金必勝法則(上)
這本書是基金界的泰斗John C. Bogle所著,他所創立的先鋒基金(Vanguard)是指數型投資的始祖。這本書的特色在於他從歷史數據的脈絡中分析基金的各種構面並且保留這本書第一版的理論放到十年後的2009年再重新驗證,將先前的理論和結果相互輝映並提出修正和預測。最後在歸納出一般投資人要在共同基金獲利的先決條件,這本書有相當多的篇幅在針對基金的成本做討論,將各種不同的基金(價值股、成長股、各種公債等)透過成本級距分門別類再做比較。
Labels:
讀書心得
2014年7月20日 星期日
簡單工廠模式(Simple Factory)
- 簡單工程模式又稱作靜態工廠方法(static Factory Method),這個模式的主要特色是把物件生產的細節封裝起來交給Factory生產,客戶端只需要傳遞生產參數給Factory的靜態方法,進而產生相對的物件,不需要處理製造細節
- 這個單一工廠可以完全負責產品的生產流程,不需要依賴其他工廠製造物件(否則就需要採取抽象工廠模式)
- 應用的物件導向守則:
- 物件要開放擴充新類別、關閉修改舊類別
- 將物件中不允許修改的部份給以封裝
- 需要被擴充的部份便開放複寫(override)
Labels:
軟體工程
2014年7月16日 星期三
使用handler處理自訂副檔名(file extension)
- 如果有需要使用自訂的附檔名的檔案,舉例來說(*.abc), 這個.abc檔案必須透過自訂的handler來處理(因為沒有建立關連之前不會有任何程式認得這個檔案格式),因此必須要修改註冊的方式來建立兩者關連。以下透過兩個步驟來達成:
Labels:
C#
2014年7月11日 星期五
2014年7月7日 星期一
讀書心得-超棒小說這樣寫
從十幾歲開始就夢想著要成為一個小說家,但是幾經嘗試創作之後卻越來越沒有信心,不是對在白設計上平淡無奇,不然就是苦於安排精采的情節。雖然腦中已經勾勒了一個簡單結局(我都從先想到一個絕妙的結局開始),但是要怎麼從頭鋪成,安排故事情節和相關技巧都付之闕如。我才發現寫小說不是埋頭硬寫就可以完成的一份事業。過了好幾年,都即將年屆而立之前,有幸在網路上接觸了這本書,看了書評和內容摘要之後就立刻下訂了這本書。雖然我也有一頭熱的不理性購物衝動,但是讀完這本書之後,慶幸自己做了個好決定。作者淺顯易懂的敘述一部小說的結構和應該具有的元素,讓我有種「啊!早點知道就好了」的感嘆。簡單整理從中書所學到的知識,之後可以透過這些要點進行寫作練習。
Labels:
讀書心得
2014年7月5日 星期六
XSL介紹
XSL(EXtensible Stylesheet Language)屬於XML相關技術之一,用途在於可以將XML文件轉換成為HTML, TXT或併入另一種XML檔案格式,另外也支援內崁CSS語法豐富文件樣式
基本上XSL可以分為三大部分:
- XSLT - a language for
transforming XML documents
- X-PATH - a language for
navigating in XML documents
- XSL-FO - a language for
formatting XML documents
XSLT代表EXtensible Stylesheet Language Transformation, 可以透過XSL將XML文件轉化成不同的檔案格式如XML, HTML, XHTML等,另外XSL也使用Xpath來導覽XML節點文件,對Xpath相關的教學文件可以參考這裡
再轉化的過程當中, XSML使用Xpath來解析XML的原始內容, 如果解析到相對應的模式(pattern)情況, 就會XSML就會轉化當中的文件成為輸出的檔案格式:
1. 如何建立一份XSL?
宣告一份XSL的開頭可以採用以下兩者標籤其中之一:
1. xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
2. xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
一份XSL文件都是先宣告 標籤起頭定義這是份XSL文件, 接下來做個練習, 以下有一份XML和XSL文件:
在這份XSL文件當中match="/" 標籤代表找尋XML文件的template(樣版),則是Xpath當中的定義, "/"則是代表從root element開始來解析全部文件, 代表從XML文件當中找尋特定的元素, 並且把它給轉化成輸出的格式, 當中的select的值則代表Xpath的語法, 這個元素可以用來使用某特定Node List的迴圈語法, 以下的例子:
可以使用的外卡(wild card)字元如:
- = (equal)
- != (not equal)
- < less than
- > greater than
在的標籤當中, 可以加入此標籤來排序某特定元素,此標籤為XSL的條件判斷, 以下例子說明如果標籤通過expression則輸出內容
expression
">
...some output if the expression is true...
則是用來做單一的元素判斷, 而則可以用來做多種判斷。
Labels:
XML
2014年7月4日 星期五
當多執行緒同時存取同一個檔案問題
這個問題可以在方法上面加載一個 attribute [MethodImpl(MethodImplOptions.Synchronized)] 來避免不同的執行緒存取同一個檔案,另一個方式則是使用Lock方法
參考資料:
http://stackoverflow.com/questions/541194/c-sharp-version-of-javas-synchronized-keyword
Labels:
C#
2014年7月3日 星期四
Zip Components Investigation
前陣子研究了一下各家Zip元件的各方面比較,下面是整理過後的報告:
| .NET ZipForge | Chilkat.NET Zip | DotNETZIP |
Create self-extracting EXE up to 4GB | V | V | V |
Custom SFX stub | V | X | V |
Create a big ZIP size up to 10GB | V | V | V |
License | Royalty free – For 4 Developers | Royalty free – A Site-Wide license is for any number of developers at a single company location | MS-GPL |
Price | €699 | $249 | Free |
Labels:
C#
訂閱:
文章 (Atom)