ActiveRecord SessionScope/Transaction

ActiveRecord是很方便沒錯,只是如果你要處理大量時,底層的NHibernate會以你意想不到的方式去逐條更新資料表格,可想而知,這很慢~
幸好官方有提供了文件(Using Scopes :: Castle Project, Understanding Scopes :: Castle Project),告知你如何利用SessionScope來完成批次處理,也就是先行處理完畢以後,再一次寫入,這樣子速度就可以達到一定程度的提昇。

Edward Yang

Edward Yang 就是楊德昌,上週悄悄登上 Times weekly 的某頁。
20070711-edwardyang-01

電影流水帳(2007/7/2~2007/7/15)

這幾天有瞄到一些電影的片段,像是火盃的考驗Herbie Fully Loaded,但可惜,都沒看完,不過我相信會有機會的。

血光之災2007

這並不是某部電影的名字,而是算命的結果。為甚麼加上 2007?因為人要體認到無常,隨時都可能會有血光之災的發生。
記得是四月還五月的時候,岳母與他的四千金一起去台中某個以祭拜濟公為主的神壇,去請教濟公一些事情。
岳母很好心的幫我問了今年的運勢,結果是可能會有血光之災。根據濟公表示,找三太子幫忙,應該可以化解。
於是老婆回來之後,就告訴我後半年要特別小心。
最近,還記掛著這件事情的岳母,就到台北某座以祭拜三太子為主的神壇,去請教三太子,三太子也告知了同樣的結果。
既然兩位神明都這麼說了,於是岳母就要了我的貼身衣物,幫我祭解。祭解以後,三太子還說,要在初一、十五到大廟裡去拜拜。
所以岳母就跟我老婆講,我老婆再跟我講。
雖然我自己是不太喜歡算命,不過既然人家都已經算了,而且也這麼說了,那麼,最好就是要凡事小心,免得出事。然後,還要記得初一、十五要去附近的大廟:太平宮拜拜。

在 Windows 下 build php 的方法

幾個月前嘗試著要自己重新 build PHP

其實方法都可以在原始碼解開以後的 README.WIN32-BUILD-SYSTEM 裡面找到。這裡只是算是一些小補充而已。
不過,我最後的結果是失敗,好像還缺了些東西,後來也沒有繼續試,這邊還是先記錄下來,有機會繼續嘗試。

  1. 下載官方提供的原始碼壓縮檔。
  2. 解開,請先看過 README.WIN32-BUILD-SYSTEM 一遍,這會是很好的指引。
  3. 安裝以下東西:
    • Visual Studio 6 或 Visual Studio 2003
    • Platform SDK
    • 官方提供的 win32build.zip
    • 其他必要的 library(自己參考說明吧)
  4. 打開 Command Prompt,切換到解壓以後的目錄下。輸入 buildconf 並按下 enter。
  5. 解開 win32build.zip。
  6. 設定環境變數:
    set lib=win32build_unzipped_directory\lib
    set include=win32build_unzipped_directory\include
    set path=%path%;win32build_unzipped_directory\bin
    

    接著再執行 C:\Program Files\Microsoft Platform SDK\setenv.cmd。

    "C:\Program Files\Microsoft Platform SDK\setenv.cmd" /2000

    "C:\Program Files\Microsoft Platform SDK\setenv.cmd" /xp32
    
  7. 進行設定,這會產生 Makefile。
    cscript /nologo configure.js --disable-ipv6 --disable-fastcgi --enable-cli-win32 --disable-calendar --disable-filter --disable-ftp --disable-zlib --without-wddx --without-xml --disable-xmlreader --disable-xmlwriter --without-dom --without-simplexml --without-gd --without-t1lib --disable-ctype --without-iconv --disable-bcmath --disable-com-dotnet --disable-json
  8. 執行 nmake,應該就會大功告成。

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

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

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

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

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

創新思維的有效方法

  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 之後,就大功告成。(當然還是要參考官方文件,自己加上必要的設定啦。)

    參考資料:

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