突破習慣領域、開創新思維

公司內部開的課程,講師是郭騰尹,他是實踐家知識管理集團副董事長兼習慣領域推廣中心正式講師,以下是講義以及一些筆記,不過筆記居少啦。
人是透過互動來完成他自己的習慣,主要影響習慣的因素:

  • 環境(地):塑造性格、培養能力。反思:如何建構好環境?
  • 時代背景(天)

一個人的思想與格局成正比

  • 重複為學習之母
  • 沒有夕陽工業,只有夕陽觀念 (行銷創造消費習慣、新的生活型態)
  • 創造力最大的殺手,是人們滿於現狀、自我設限。
  • 習慣很好,讓我們熟能生巧、有效率、省時間、也保護我們。習慣很麻煩,讓我們保守、不願創新與改革、有盲點、缺乏觀察。(創新來自反省自我的習慣;檢討失敗為成功之母)
  • 潛在領域與實際領域的運用:潛在領域就是腦海思維的總和,實際領域則是當下的思維、當下想到的、當下作的選擇。潛在領域要大,實際領域要靈活反應。反思:如何找到夠大的潛在領域?多見聞,才能識廣。冷靜的分析,才能靈活運用潛在領域下的其他念頭。

創新思維的有效方法

  1. 虛心學習,學習力即競爭力。
    1. 要有誠心、謙卑,要放下身段。
    2. 處處留心皆學問。
    3. 模仿是最有效的學習。
  2. 升高察思
    1. 站在高的位置,或以長遠的時間點來思考問題。
    2. 尋找更高一層的意義。
  3. 事物的聯想
    1. 想像力比知識更為重要。
    2. 有關係,找關係;沒關係,強迫發生關係。
  4. 改變參數
    1. 找到看得到的參數以及看不到的參數。
    2. 分解、組合、替換
  5. 腦力激盪
    1. 三個臭皮匠勝過一個諸葛亮
    2. 注意發散與收斂的過程
  6. 改變環境
    1. 搬家、移民、輪調、退伍、旅行
    2. 讀不同的書、走不同的路、問不同的人
  7. 以退為進
    1. 事緩則圓,退一步海闊天空
    2. 暫時離開問題(或壓力)
  8. 靜坐禱告
    1. 萬物靜觀皆自得
    2. 每天給自己20分鐘,讓自己的思緒澄靜。

額外紀錄:

  • 上等人談思想、中等人談事情、下等人談是非。
  • 豐沛的情感是創造力和行動力的來源。如何培養?可以閱讀文學、加強人文素養、看戲劇、繪畫、聽音樂。
  • 創意是生活的態度
  • 善問不如善答。

來不及講到的部份:曼陀羅心智的運用。

如何使用 Mono.GetOptions?

Mono.GetOptions 是做什麼的?問的好。
如果你曾經在 Linux 下開發過 console 應用程式,相信你對於getopt這個 library 應該不陌生才對。
Mono.GetOptions 就是一個類似 getopt 的組件。

這裡主要是介紹怎麼使用,下面就列出步驟:

  1. 安裝Mono
  2. 在 AssemblyInfo.cs 裡面加入:
    //填入簡單的用法說明,顯示 help 時會用到
    [assembly: Mono.UsageComplement("[-t:param] [-o] [-h] [-v] [-u]")]
    //填入關於這程式的說明,也是顯示 help 時會用到
    [assembly: Mono.About("A sample about how to use Mono.GetOptions")]
    //作者
    [assembly: Mono.Author("your_name")]
    //有錯誤時可以通報誰,可填可不填
    [assembly: Mono.ReportBugsTo("your_name@your_domain.com")]
    //更詳細的說明,可填可不填
    [assembly: Mono.AdditionalInfo("This is a sample about how to use Mono.GetOptions.  It's only a small program.  If you want to know more about Mono.GetOptions, you can hack Mono.GetOptions source code.")]
    //是屬於哪個套件,可填可不填
    [assembly: Mono.IsPartOfPackage("Samples")]
    

    然後在原來的地方應該會有這些:

    [assembly: AssemblyTitle("Mono.GetOptions Sample")]
    [assembly: AssemblyProduct("getoptions_sample")]
    [assembly: AssemblyCopyright("your_name or your_organization")]
    [assembly: AssemblyVersion("1.0.*")]
    

    請記得都填入。

  3. 引用 Mono.GetOptions 組件,用SharpDevelop的話,可以很方便的選 Add mono reference。
  4. 記得 using Mono.GetOptions。
    using Mono.GetOptions;
  5. 新增一個類別,繼承 Options。
    using System.Collections.Generic;
    class ProgramOptions : Options
    {
    private string _outputFolder = "output";
    public string OutputFolder
    {
    get { return _outputFolder; }
    set { _outputFolder = value; }
    }
    private List _templateFolders;
    // 表示最多容許兩個,參數可以用 -t 或是 --template
    // 用法大致是 -t:test 或 --template:test
    [Option(2, "Template folder, default is 'default'", 't', "template")]
    public WhatToDoNext DoTemplate( string s )
    {
    //Console.WriteLine( "template={0}", s );
    _templateFolders.Add( s );
    return WhatToDoNext.GoAhead;
    }
    // 預設只容許一個,參數是 -o 或 --output
    [Option("Output folder, default is 'output'", 'o', "output")]
    public WhatToDoNext DoOutput( string s )
    {
    //Console.WriteLine( "output={0}", s );
    _outputFolder = s;
    return WhatToDoNext.GoAhead;
    }
    public ProgramOptions()
    {
    // 表示同時接受 Linux / Windows 的命令列常態用法
    this.ParsingMode = OptionsParsingMode.Both;
    _templateFolders = new List();
    }
    }
    
  6. 在 Main 裡面使用剛剛新增的類別:
    ProgramOptions options = new ProgramOptions();
    options.ProcessArgs(args);
    foreach( string s in options.TemplateFolders )
    Console.WriteLine( "Template folder = {0}", s );
    Console.WriteLine( "Output folder = {0}", options.OutputFolder );
    

    就這麼簡單。

  7. Build 以後,你可以在命令列模式或是 linux 的 console 模式下試試看了~這邊我假設你編譯出來的目的檔是 your_program:
    $your_program -h
    $your_program --help
    $your_program --template:t1 --template:t2 --output:o1
    $your_program -t:t1 -t:t2 -o:o1
    $your_program -u
    $your_program -V
    $your_program --version
    

getopt有興趣的話,可以參考getopt
這是對岸同志寫的介紹,很簡短:

  • Mono项目提供的一个控制台程序辅助包GetOptions – 自由、创新、研究、探索…… – 博客园
  • 這篇也是 Tutorial,寫的很好:The PumaCode.org Blog :: GetOpt style command line processing in C# with Mono.GetOptions

    如何在 CentOS 安裝 mod_proxy_html

    1. 先到官方網站下載源碼,或是利用 subversion 直接 checkout 最新的 code。這裡直接 checkout 最新的 3.0:
      #svn co http://apache.webthing.com/svn/apache/filters/proxy_html/ mod_proxy_html
    2. 安裝必要的開發套件:
      #yum install httpd-devel libxml2-devel
    3. 進行安裝:
      #apxs -I /usr/include/libxml2 -c -i mod_proxy_html.c
    4. 在 httpd.conf 裡面加上
      LoadFile /usr/lib/libxml2.so
      LoadModule proxy_html_module modules/mod_proxy_html.so
    5. 重新啟動 httpd 之後,就大功告成。(當然還是要參考官方文件,自己加上必要的設定啦。)

    參考資料:

    備註:曾幾何時,我居然也看懂希臘文了~ =_="

    如何在 CentOS 4/4.5 裡安裝 mono

    這裡,我假設你用 yum 來管理你的套件。

    1. 下載 mono.repo 然後放到 /etc/yum.repos.d/ (以 root 身份)
    2. #yum update
    3. #yum install mono-complete xsp mod_mono
    4. 完成啦!

    很簡單,對吧~
    如果你用 Fedora Core 3/4/5 或者是 RHEL 4,你可以參考Mono 下載頁面
    安裝的方法跟上面所說得非常地類似。

    吹冷氣

    結婚快五年啦~搬到自己買的房子也已經兩年多了,終於,在今年四月裝了冷氣。
    習慣吹冷氣的人大概很難想像我跟我老婆可以在酷熱的夏天裡在沒冷氣的房子裡過日子吧(而且還過了四年!)~
    這不是重點,我想說的是,自己真的沒有那個命去吹冷氣睡大頭覺。
    每次晚上蓋棉被吹冷氣,隔天總是頭痛、精神不振~感覺上沒睡好。
    唉~看來晚上吹冷氣睡覺也是需要時間去適應的啊~

    詐騙電話

    星期六一天,就接到兩通詐騙電話,一通是冒充監理站,一通則是冒充中華電信。
    他們共通的特徵就是語音電話之後,會告訴你按下0,即可直接與監理站或中華電信人員通話。
    監理站那通是這樣子的…
    他告知我有罰單未繳納,而這張單子是在高速公路上開的,我當然是極力爭辯說我沒有車子~(這時我開始覺得怪怪的,因為那女人的口音不對)
    於是他說,可能是有人冒用我身份去領牌,請我跟交通大隊備案,接著幫我轉給交通大隊。
    轉給交通大隊之後,跟他講了半天,要開始備案了,這時我說,”可以留下電話號碼,我再回撥回去嗎?”
    掛斷查證以後,我確定電話沒錯(用104),接著打過去,轉總機,再轉到備案單位,最後警察跟我說…”你應該打反詐騙專線 165..因為,那是詐騙電話…”
    真是好家在,不過我的名字跟電話號碼還是被騙去了…嗚嗚~
    有了第一次的經驗,下午接到中華電信的語音電話之後,當下就先掛斷,再打中華電信的服務專線 123 去查。
    果然沒錯,的確是詐騙電話。
    詐騙電話的手法真的是日新月異,稍稍一不注意就可能會被騙,大家要小心啊~

    電影流水帳(2007/6/21~2007/6/25)

    要托誰的福?老婆週末上班,週日開一季一次的大會,應該是托她的福吧~
    這次很多片子其實以前都看過了,算是重溫吧~

    • Jerry Maguire(IMDB),征服情海,記得是在當兵的時候上的片子,正好是春節檔。我放假回來的時候,約了以前一位國中女同學一起去看,結果時間不對,卻看了Daylight (1996),後來…嗯。好吧,這不是重點,重點是這部片子蠻好看的,主因是劇本好,幾位主角也表現的可圈可點。
    • Gone in Sixty Seconds (2000),驚天動地60秒,動作片,還不錯看的片子,最後主角沒有因為偷車而被定罪,也跟弟弟冰釋前嫌,所以算是喜劇片嗎?
    • Kill Bill (Vol. 1/Vol. 2 on IMDB),殺了比爾(追殺比爾?)。從頭殺到尾,最令我屏息的一段,就是第二集破棺而出的那段,光是想到那種被活埋的壓迫感,就感到不寒而慄。雖然整個劇情只有唬爛可以形容,不過還是很好看。
    • Lord of War(IMDB),軍火之王,很深沈的片子,同時也是我喜歡的傳記類型電影,值得深思。
    • Jurassic Park(on Wikipedia; on IMDB: Jurassic Park (1993), The Lost World: Jurassic Park (1997)),Star Movie 連續播了兩集,只差沒接著播第三集。還是第一集好看,Tim 從電網上被電下來那段,每次看都令人心驚膽跳。
    • Jane Austen’s Mafia!(IMDB),胡說霸道。這是一部搞笑片,不過…不好笑,而且我只看了 15 到 20 分鐘就轉台了。導演,對不起。
    • The Tuxedo (2002),燕尾服。之前就看過了,這邊只是剛好電視上有看到,順帶提一下而已。娛樂動作片,女主角相當不錯,只是後來好像沒什麼人找她拍電影了。

    電影流水帳(2007/6/13~2007/6/20)

    拼拼湊湊,還是勉強看完不少片子。不過有些看完就忘了~記性越來越糟。

    • Casino Royale,雖然很多人對這片的男主角有所詬病,但這並不影響我對這片的看法。導演/編劇在這片做出相當大的改變,試圖扭轉世人對Bond的印象,這點很值得嘉許。此外,這片裡面最吸引人的,算是Eva Green(IMDB)了,她僅有27歲,不過在本片裡面相當搶眼,不遜於男主角。最後的結局有點突兀,卻又合理。
    • Miss Congeniality 2 – Armed and Fabulous,重看好幾次了,每次都是看到結局,這次則是有看到前面,普普通通。
    • In good company,我覺得蠻好看的片子,雖然我漏看了中間的一小段。片尾時,年輕 Carter 對 Dan 說的一句話,讓我印象深刻,他說”謝謝你花那麼多時間讓我碰釘子,我因此學到很多…”。
    • Solar Attack,男主角人脈廣、又有錢,完全靠他跑來跑去,因此拯救世界,不怎麼樣的片子。不過片中甲烷因為太陽風暴而開始在天空燃燒的一幕,非常令人印象深刻。
    • Fantastic 4: Rise of the silver surfer,特效不俗。不知道是錯覺還是怎麼樣~Jessica Alba 看起來比上集來的黑,此外露的身材也不多,可惜。片尾看起來是還會有第三集~真糟。
    • The Stepford Wives,蠻驚悚的片子,強要改變一個人的確很難,但是換掉~可能就簡單多了。

    Regular expression 是貪婪的

    前兩天才赫然發現,自己完全忽略了這個特性,導致結果完全不是我所預期…
    這個特性就是貪婪(請參考:一輩子受用的 Regular Expressions — 兼談另類的電腦學習態度)。
    所以當你想要利用這個式子:\<title\>(?<titleStr>.*)\</title\> 去這堆文字: <title>AAA</title>…other tags…<title>BB</title> 取得每對 <title>…</title> 裡面的文字時,實際上只得到一個結果,內容是 AAA</title>…other tags…<title>BB
    >_< 這下該怎麼辦?
    我想到幾種方式:

    • 取得每個 <title> 的位置,然後再利用 String.IndexOf 去搜尋 </title>,取得位置之後,就可以取得<title>…</title> 裡面的文字。
    • 分別用 Regular Expression 取得<title>與</title>的位置,然後再依據結果,去取裡面的字串。

    希望是能有更好的解~