Posts

Showing posts from February, 2010

[ironpython] AddReference

在ironpython 中為使用 .net 函式庫, 需要加入一個reference給 .net assembly,  由此動作後 import進來的 namespace 才能夠被辨識 ex.  from System.IO import TextReader class PythonFileReader(TextReader):     def __init__(self, f):         self.f = f     def Read(self, buffer, index, count):         chars = self.f.read(count).ToCharArray()         chars.CopyTo(buffer, index)         return  len(chars) import clr clr.AddReference('System.Xml') from System.Xml import XmlReader f = open('test.xml') fr = PythonFileReader(f) xr = XmlReader.Create(fr) while xr.read():   if xr.IsStartElement():       print xr.Name, 上面的動作是 1. 建立一個python file-like ojbect  PythonFileReader 繼承自.net TextReader  2. 將 PythonFileReader 傳給.net的 api. 3. print all name of tags in 'test.xml' 在module clr中的AddReference method family有: - clr.AddReference - clr.AddReferenceByName - clr.AddReferenceByPartialName 這幾個是在load 物件到 assembly. 其實這些都是Assembly.*下的一些function的wrappers,  像是 Assembly.Load, Assembly.LoadWithPartialName 等 - clr.AddReferen

[c++] namespace

寫過一些些c++, java跟 python 但是對於物件導向(Object-Orientated) 的解釋,一直說不上話 今天來複習一下... 1. 命名空間 namespace 這是一開始寫c++時都會停住的問題,就竟什麼是命名空間? 為什麼需要有命名空間? 看了網上諸多解釋後,我自己認為是由於程式越長越大時,常會有變數、函式或類別名稱 相同的情況,甚至同類別名稱又同變數名稱等,這時後容易混淆,甚至覆蓋掉先前的定義。 c++提供一個空間的概念,即在各自的空間上定義的任何變數、函式,彼此是互斥的。 使用的方式是 namespace NAME {     // method, variable, etc. } ex. #include using namespace std; namespace cat{   int shout;   int act; } namespace dog{   double shout;   double act; } int main(void) {   cat::shout = 2   cat::act = 4   dog::shout = 1   dog::act = 3      cout< <   cout< <   cin.get();   return 0; } 亦可寫作兩個file ex. cat.h namespace cat{    int shout;    int act; } main.cpp #include #include "cat.h" using namespace std; int main(void) {     cat::shout = 9;     cat::act = 2;     cout << cat::shout + cat::act < }   上面要記得的是     1. 用 '::' 來提取該範圍內的member  用法是  <命名空間名稱> :: <該空間的成員>     2. using namespace std  這個表示c++的 standard library 命名空間,所以必須在每次寫一個    新的.cpp檔時,都需加入此行。     3. using的用法,可以

[讀書心得] 金字塔原理

"清楚寫作唯一重要的行動,便是控制表達觀點的順序。" -- Barbara Minto 之前YEF的業師推薦了麥肯錫的一本書"金字塔原理",是用來訓練邏輯思考與寫作的書。 因為覺得自已的邏輯思考能力的不足,偶然間想起這本書,所以在這個過年借了本來瞧瞧。 作者說一般人詞不達意有兩個原因,一個是缺乏練習、另一個則是文章的結構出了毛病。 然而對於讀者而言,最簡單的順序是先接受主要的、最抽象的觀點,接著才是次要的、支持性的觀點。基於主要的觀點永遠源自於次要的觀點,而這些觀點的最理想結構,則是源自於中心思想綁住好幾個觀點所組成的一個金字塔結構。 這些觀點彼此的關係可以是縱向 (任何一層的一個論點永遠是下面一層組成觀點的總結) ,也可以是橫向 (幾個觀點因為共同呈現一個邏輯論點而被歸類為一組)。利用 question/answer dialogue 的方式,當讀者對於某個論點基礎產生質疑時,其金字塔的下一層就是要回答那個問題。 這本書主要是說明 1. 為什麼金字架構的反應最好 2. 組成金字塔的邏輯子結構間如何互動 3. 教你一些基本原則,幫助你將想法建構成簡單的金字塔結構。

[python] naming

python 的命名規則... 其實從前我一直很不care這個,不過為了code的可讀性還有交接  所以還是記錄一下好了 1. lowercase_with_underscores : 用於modules 與internal variables(包括function/method variables) [ 除了__init__裡頭的參數例外。 ] 2. MixedCase  :  用於 modules 與 public properties 3.  mixedCaseExceptFirstWord : 用在 public methods 及functions 4. _lowercase_with_leading_undersore : 用在 private functions, methods, properties 5. __lowercase_with_two_leading_underscore : 用在不被 overwritten的private properties 6. CAPS_WITH_UNDERSCORES  : 用在costants 7. gMixedCase : globals (盡量少用.) 一個標準的 py module : 第一行 #!/usr/bin/env python 第二行開始做一個敘述 """Provides NumberList and FrequencyDistribution, classes for statistics. NumberList holds a sequence of numbers, and defines several statistical operations (mean, stdev, etc.) FrequencyDistribution holds a mapping from items (not necessarily numbers) to counts, and defines operations such as Shannon entropy and frequency normalization. """ 接著import函式庫(先是built-in, 再是3rd party, 最後才是自己的) from math