2008年12月16日

攝影社人像外拍-寶妮@四四南村(2008/12/13)

http://www.flickr.com/photos/28494839@N07/tags/20081213/















2008年12月14日

IIS6+PHP5 (ISAPI) 安裝攻略

IIS6+PHP5 (ISAPI) 安裝攻略
先把 php-version-win32-installer.msi 這個安裝檔找出來
1 -
點兩下以後, 按下 Next
2 -
這裡會出現 Change , Repair , Remove 我們選 Change(),如果是第一次安裝,該步驟略過。
3 -
這時候會出現很詭異的樹狀圖, 其實就是會安裝的東西和套件.
(建議這時候絕對不可以全選 ... 會有一堆extension無法載入!!)
基本上選預設 + Extensions -> MySQL + MySQLi
後面如果還需要什麼套件 選一選吧!
curl.dll
gd2.dll
mbstring.dll
mcrypt.dll
mysql.dll
mysqli.dll
openssl.dll
zip.dll

4 -
裝到底 ... 點 Finish
5 -
對 安裝PHP 目錄增加 IIS_WPG 群組及 IUSR_XXXX 使用者的讀取及執行權限。
6-
加入系統環境變數 (讓 extension 及 php.ini 能順利被找到)。
Path=C:\PHP5;
PHPRC=C:\PHP5

7-
開啟 IIS 管理員,
主目錄-->應用程式設定-->新增/編輯應用程式副檔名對應
執行檔指定PHP的PHP5ISAPI.Dll位置
副檔名填入 .PHP ,指令動詞選[所有的指令動詞]

8. 網頁服務延伸。
新增網頁服務延伸
延伸名稱填入PHP5ISAPI
需要的檔案,指定PHP的PHP5ISAPI.Dll位置

2008年12月12日

MySQL 授權的詳細情況

資料來源處:http://www.2be.com.tw/?p=200

MySQL 授權的詳細情況

關於 MySQL 授權的祥細情況,眾說紛紜,真正瞭解者甚少

其實 MySQL 官方都有詳細文件可以參考

我們需要的只是適當的中文翻譯

常見的錯誤觀念如:

MySQL 是 open source, 與授權方式無關, 商業用收費也不表示它不是 Free Software (not Price Free)

http://www.mysql.com/company/legal/…ce-license.html

“To all free software enthusiasts we

recommend our products under the *GPL* license.”

上面這個是常見的「斷章取義」錯誤觀念

為什麼錯誤?∼底下會逐步解釋

要瞭解 MySQL 的詳細授權情況

首先我們必須知道 MySQL 到底有哪些授權

資料來源:MySQL Licensing Policy FAQ (http://www.mysql.com/company/legal/licensing/faq.html)

What is MySQL’s software licensing model?

MySQL uses a “dual licensing” business model. Under this model, users may choose to use MySQL products under the free software/open source GNU General Public License (commonly known as the “GPL”) or under a commercial license.

With the GPL license, MySQL is available free of charge. Users may download the software for free and modify, integrate and distribute it. However, GPL users must abide by the rules of the GPL, which stipulate that if a MySQL-based application is redistributed, the complete source code for this application must also be open and available for redistribution.

MySQL AB offers a commercial license for organizations that do not want to release the source code for their application. Commercial license customers get a commercially supported product with a level of assurance from MySQL AB, without the requirement that their MySQL-based software must be “open sourced”. MySQL is able to provide a commercial license because it has full ownership of the MySQL code.

MySQL’s dual licensing increases freedom in two ways: first, it encourages the growth of free software by licensing MySQL under the GPL; second, it makes it possible to use our software in situations where the GPL is not applicable.

MySQL 的軟體授權模式為何?

MySQL 使用「雙授權條約」模式,在這個模式下,使用者可以選擇如何使用 MySQL 產品,這將決定 MySQL 是自由的 GPL 授權,或者商業授權。

在 GPL 授權下,MySQL 是自由且免費的,使用者可以免費下載 MySQL,並且可以修改它的原始碼,重新整合後再散佈。不管如何,GPL 使用者必須履行來自 GPL 授權賦加的條件,亦即規定假如一個基於 MySQL 而運作的應用程式被重新散佈,那麼這個應用程式的完整的原始碼,也必須可以被自由取得。 (譯註:此部分符合 GPL 授權條約)

MySQL AB 另外提供一個商業授權,給那些不願意開放應用程式原始碼的組織,購買商業授權的顧客可以獲得商業版的產品技術支援保證。否則的話,任何基於 MySQL 運作的軟體,都必須開放原始碼。MySQL 之所以能提供商業授權,是因為 MySQL 組織擁有 MySQL 程式碼的一切版權。

(譯註:即便是 GPL 授權的軟體,原始作者在法律上仍擁有版權,甚至專利權,軟體專利權至今仍未廢除,作者擁有當地法律上的一切著作權,相關資料可參考 GPL 授權的研究文章)。

MySQL 的「雙授權條約」模式,對雙方都有利。第一,它鼓勵自由軟體的發展;第二,它使的即便 GPL 不適用的情況下,使用我們的軟體也成為可能。

MySQL 和多數軟體一樣,是採用雙授權的方式
亦即大家印象中的「免費版」和「商業版」

授權的方式,決定在於 user 使用 MySQL 的「方法」
而非 user 自己決定要採用哪種授權

如果要簡明扼要的解釋 MySQL 「雙授權模式」是如何運作的?

簡單的說,如果應用程式本身是 GPL,MySQL 也是 GPL。

如果應用程式是商業軟體,或者自行開發,並且不想開放原始碼,則必須購買 MySQL 商業授權。

再來往下看關於「免費版」授權的部份

MySQL Open Source License (http://www.mysql.com/company/legal/licensing/opensource-license.html)

Our software is 100% GPL (General Public License); if yours is 100% GPL compliant, then you have no obligation to pay us for the licenses. This is a great opportunity for the open source community and those of you who are developing open source software.

我們的軟體是 100% GPL;假如你的(軟體)也是100% GPL 的話,你便不需要在法律上付錢給我們買授權。這對開放原始碼社群,或者像你們這樣發展開源軟體的人來說,都是一個很棒的機會。

MySQL Open Source License 其第一段明確指出:

此授權僅適用於「應用軟體」為 GPL 的情況下,否則就必須購買商業版授權。

此處的「應用軟體」,指的是需要靠 MySQL 才能運作的軟體,例如:資料庫前端系統,論壇程式…..等等

如果這些軟體,並非 GPL 授權,也就是非自由軟體 (開放原始碼,允許任意修改、散佈),便不能適用於 MySQL Open Source License。

普遍認為 MySQL 可以內建於 Linux 或者 FreeBSD 中

那麼它必定是自由軟體?

其實不然∼

第一,必須瞭解到即便是 Linux,某些 distro 內包進的套件,也不全然是自由軟體。

以 Debian 為例,它是一套非常嚴僅的 Linux distro,在它的套件中,非常刻意的去區分四大體系: main(自由軟體)、 contrib (本身是自由軟體但相依的套件不是自由軟體)、 non-free (非自由軟體)、 non-US (加密或者有專利權的軟體)。

第二,MySQL 本身是採用雙授權模式,它是 GPL 或者 商業授權,完全取決於使用者怎麼用它。

當 MySQL 被包進 Linux 或 FreeBSD 之時,它還沒開始使用,或者周邊搭配相依套件皆是 GPL 軟體,因此在這部份並無不妥。

但如果使用者加入非自由軟體,搭配 MySQL 使用,此時它的授權型態即發生轉變,必須購買商業授權。

以上為針對 MySQL 授權的研究心得結果,如有錯誤歡迎指正

當然,MySQL 並不是一家喜歡打官司的公司,即便是打官司如吃飯的微軟,對於家用盜版者也是睜一隻眼閉一隻眼。因此雖有法律實質意義存在,個人使用只能說還是道德約束為主,但企業上使用,打開門來做生意的,永續經營的,則必須重視版權問題。

2008年12月10日

【安裝】PHP5 於 Windows+IIS 安裝備忘錄

【安裝】PHP5 於 Windows+IIS 安裝備忘錄
1. PHP5 不要安裝 installer 版本,因為不容易具擴充性。將 ZIP 檔解壓縮後放入如 C:\PHP5 目錄。

2. Control Panel -> System 設定環境變數。
 1). 於 "PATH" 變數內新增 C:\PHP5
 2). 新增 "PHPRC" 環境變數,其值設定為 C:\PHP5

3. PHP的主要設定檔為 php.ini。將 C:\PHP5\php.ini-recommended Rename 為 php.ini,設定並修改儲存之。

4. IIS 內設定 PHP 最好使用 ISAPI,非 CGI。效能較好。

5. 所有額外的擴充模組位於 \PHP5\ext 內。PHP5 已將 MySQL Client 模組抽離,所以需要 enable 該 extension。

6. 主要修改 php.ini 的地方:
 extension_dir = "C:/PHP5/ext"
 extension=php_mysql.dll
 extension=php_mysqli.dll

7. 可以利用 phpinfo() 來測試 php.ini 的設定是否正確。
 (可下載該檔案儲存為 phpinfo.php 並置於 c:\Inetpub\www_root\ 下)

2008年12月4日

CentOS5 使用VNC server

請安裝 vnc 跟 vnc-server 這兩個套件

# yum install vnc
# yum install vnc-server

編輯 /etc/sysconfig/vncservers,
# VNCSERVERS="2:myusername"
# VNCSERVERARGS[2]="-geometry 800x600 -nolisten tcp -nohttpd -localhost"
其中2,是port的最後一個數字, 如 5801, myusername指預設vnc登入的身份
請修改為預設root登入
VNCSERVERS="1:root"

設定登入的密碼
# vncpasswd
Password:
Verify:

# vi ~/.vnc/xstartup
解除註解以下兩行
unset SESSION_MANAGER
exec /etc/X11/xinit/xinitrc

重新啟動 VNC Server
# service vncserver restart
設定開機時啟動vncserver
#chkconfig vncserver on

# chkconfig --list | grep vncserver
vncserver 0:off 1:off 2:on 3:on 4:on 5:on 6:off

# netstat -lt
你可以看到以下就表示 vnc server 已經啟動了,它監聽5801, 所以要注意防火牆要打開
tcp 0 0 *:5801

使用VNC client或者在有安裝JAVA的瀏覽器連線即可

Windows Server 2003備份bat檔

Windows Server 2003備份bat檔
最近需要在windows server 2003將所備份的檔案copy到網路磁碟NAS上然後加上星期予以區隔。
在網路爬了些文章,終於寫好了。以下就僅供記錄參考了。

set wk=%date:~10,15%
if %wk%==星期一 goto mon
if %wk%==星期二 goto tue
if %wk%==星期三 goto wed
if %wk%==星期四 goto thu
if %wk%==星期五 goto fri
if %wk%==星期六 goto sat
if %wk%==星期日 goto sun

:mon
copy d:\backup\backfile.txt Y:\backfile_mon.txt
goto finish

:tue
copy d:\backup\backfile.txt Y:\backfile_tue.txt
goto finish

:wed
copy d:\backup\backfile.txt Y:\backfile_wed.txt
goto finish

:thu
copy d:\backup\backfile.txt Y:\backfile_thu.txt
goto finish

:fri
copy d:\backup\backfile.txt Y:\backfile_fri.txt
goto finish

:sat
copy d:\backup\backfile.txt Y:\backfile_sat.txt
goto finish

:sun
copy d:\backup\backfile.txt Y:\backfile_sun.txt

:finish
pause

2008年11月29日

別人憑什麼教你?

這裡貼一篇很久之前的網路轉貼文章。
別人憑什麼教你?

看過日本一個很受歡迎「搶救貧窮大作戰」嗎? 在那個依照案例做不同規劃的單元節目中,總跑不掉幾個公式:貧窮原因的分析、為了擺脫所做的努力、和最後的成功。而不斷上演的樣版中,所謂的大師與料理名人,總是龜毛、變態、吹毛求疵、甚至極盡所能的虐待試圖搶救貧窮的個體。每每發生這樣悽慘的景況,我那年幼被保護極好的姪子都會問我: 「他就不能對他好一點嗎?」 而我也總是說著一樣的答案:「憑什麼別人要把成功的技巧教給你?」

是的,「憑什麼?」這句話我自己也同樣深深的體會過。

從18歲進入職場,經常遇到肯「虐待」我的主管;要不就是賺得很多,卻摳得要死的老闆,極盡所能的要求我為他無償加班或犧牲休假;要不就是遇到龜毛至極的主管,要求我遵守他的生活習慣與處事哲學;更多的,是混到無與倫比,卻總讓我做到死的老大級豬頭。每每遇到這種角色,我都為了「怎麼可能會賺錢?」這個問題而困擾的想死,每次離開那個職位時,總是出去大快朵頤一番,來犒勞自己這段日子的辛勞奉獻,但,我卻總是掉入所謂「勝者的詛咒」,自以為脫逃,卻又什麼都拿不到的痛苦中。

於是,我曾經發誓要做個極為體貼而人性化的上司,對待我的員工要視如己出。但從因為砍掉新人而哭了三天的小主管,到現在,我也成為龜毛且殘酷的人,這條路教會了我一件非常重要的事:「如果你沒有心,我憑什麼教你?」

一位目前是副機長的朋友曾經說過,降落的技巧每個人都不一樣,必須透過所有前輩的教導,才能夠從中揣摩自己的方式,但是要怎麼才能夠學到,必須要靠你主動的去問、去學、無論對方願不願教你,你也要睜大眼睛去看。而往往要取悅正駕駛教你,你必須極盡所能的配合他的要求與習慣,也要以最大的耐性和肯學的謙卑去與他溝通。到現在,每個月坐擁十萬收入,購屋、買房、降落經驗職達千次以上的他,比起七年前剛從美國拿到執照回台的狂妄,現在的他,多了謙卑、和緩、與容忍的耐性。
也許,你現在也遇到了這樣的主管,常常讓你有生不如死的痛苦。也許,你正為了老闆的無理要求覺得自尊比發展重要。但,在這樣的景氣和競爭的環境下,他能活著,就比你有出息、有辦法,而且,有許多生存的技巧與方式,值得你去虛心請教。
只要一天,你尚未達成自己的夢想與目標,都要記得這句話:「別人憑什麼教你」。

2008年11月22日

修復及壓縮 ACCESS 的 MDB

修復及壓縮 ACCESS MDB

3 種方式 :

方法 1:

使用 DAO 物件 ( Data Access Object )

設定引用項目 Microsoft DAO x.x Object Library

目前 DAO 物件有 3.51 版的 Microsoft DAO 3.5 Object Library ( For Access 97 以前的 MDB ) 
3.6 Microsoft DAO 3.6 Object Library  ( For Access 2K 以後的 MDB )

不設定引用 ( Early Binding ) 也可使用 Late Binding 方式來建立 DAO 3.5 3.6 版本的 DBEngine
Set dbe = CreateObject("DAO.DBEngine.35") ' Set dbe = CreateObject("DAO.DBEngine.36") 

Compact
壓縮 ( Defragmentation ) 資料庫 動作如下

語法

DBEngine.CompactDatabase OldDb, NewDb, Locale, Options, Password 

  
OldDb   :  
欲處理之來源 MDB 

 
  NewDb   :   為處理後之目的 MDB 

   Locale 參數 :
       dbLangGeneral   :   English, German, French, Portuguese, Italian, and Modern Spanish 
       dbLangChineseSimplified   :   Simplified Chinese (
繁體中文
       dbLangChineseTraditional   :   Traditional Chinese (
簡體中文 )

   Options 參數 :
       dbVersion10   :   M$ Jet db engine ver 1.0 file format while compacting. 
       dbVersion11   :   M$ Jet db engine ver 1.1 file format while compacting.
       dbVersion20   :   M$ Jet db engine ver 2.0 file format while compacting.
       dbVersion30   :   M$ Jet db engine ver 3.0 file format (compatible with ver 3.5) while compacting. 

       dbEncrypt   :   Encrypt the database while compacting.
       dbDecrypt   :   Decrypt the database while compacting 

   PS : Jet ( Joint Engine Technology ) 

Sample : 

DBEngine.CompactDatabase "C:\Src.mdb", "C:\Dst.mdb", _
         dbLangChineseTraditional, dbVersion40 + dbEncrypt 

PS : dbVersion40
請調整成適當的版本 

By the way , DAO  3.5
有提供 MDB 修復 ( Repair ) 的方法
DBEngine.RepairDatabase "MDB
路徑 + 檔名"  

PS : 3.5
以後之版本已無此方法 ( 已併入 CompactDatabase )  

 

================================================================

 


方法 2:  

使用 JRO 物件

設定引用項目 Microsoft Jet and Replication Objects X.X library  

語法

JetEngine.CompactDatabase(SourceConnection, DestConnection) 

參數

SourceConnection  :   String 值,指定與欲壓縮之來源資料庫的連接。 
      
SourceConnection 指定的資料庫已經開啟,就會發生錯誤。 

DestConnection  :   String 值,指定與壓縮後才建立之目的地資料庫的連接。 
      
DestConnection 指定的資料庫已經存在或已經有相同名稱的其它檔案存在,就會發生錯誤。 

Connection String :
 

屬性 

說明 

Provider 

 

指示提供者的名稱,用來連接到資料來源。
若未指定此屬性,會採用 Microsoft.Jet.OLEDB.4.0 提供者。
若來源字串的提供者名稱和目的地字串的提供者名稱不同,就會發生錯誤。 

Data Source

指示資料庫的名稱。
來源和目的地連接資訊都需要此屬性。

User Id

若來源資料庫設有安全保護時,指示使用者的名稱。

Password

若來源資料庫設有安全保護時,指示使用者的密碼。

Locale Identifier

指示新資料庫的國別 id
若省略此 id,則目的地資料庫的國別 id 會和來源資料庫相同。
國別指定資料庫字串比較的排列順序。

Jet OLEDB:Database Password

若資料庫設有密保護,指示密碼

Jet OLEDB:Engine Type

 

指示要開啟或將建立的來源資料庫版本。
您可以使用的 OLE DB 引擎類型為:
1 for JET Version 1.0
2 for JET Version 1.1
3 for JET Version 2.x
4 for JET Version 3.x
5 for JET Version 4.x
若省略目的地資料庫的此資訊,它會預設成 5
目的地資料庫的值不可以是比來源資料庫的版本還新。

Jet OLEDB:Registry Path

設定 Windows Registry 機碼的資訊,包括 Microsoft Jet Database Engine 的值。

Jet OLEDB:System Database

指示系統資料庫的位置。

Jet OLEDB:Encrypt Database

指示是否加密新的資料庫。若此省略此參數,則新的資料庫會和來源資料庫擁有相同的加密。

Jet OLEDB:Don't Copy Locale on Compact

指示資料庫要使用的排列順序,取代任何每個資料行國別設定。(Boolean.)

Jet OLEDB:Compact Without Relationships

指示是否複製關係至新的資料庫。 (Boolean.)

Jet OLEDB:Compact Without Replica Repair

指示是否試著尋找其它抄本來修復受損複寫式資料庫。(Boolean.)

 

Sample:

Dim jro As New jro.JetEngine

jro.CompactDatabase "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=
來源MDB", _
                                    "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=
目的MDB;Jet OLEDB:Engine Type= 4"


 

================================================================

 

 

方法 3:  

 

如果機器上有裝 M$ Access , 也可直接使用 Access Repair / Compact MDB資料庫

 

或寫程式來呼叫 Access來做

 

建立 Access 應用程式物件

    設定引用項目 Microsoft Access X.X Object Library

    Dim objAcc As New Access.Application

    Dim objAcc As Object

    Set objAcc = CreateObject("Access.Application")

之後

    Call objAcc.CompactRepair("c:\A.mdb", "C:\B.mdb", False)

即可

 

 

VB.Net 透過 JRO 修復 Access MDB

資料來源處:http://blog.blueshop.com.tw/hammerchou/archive/2006/10/11/42107.aspx

 

VB.Net 透過 JRO Compact / Repair Access MDB

 

Imports System

Imports System.IO

 

Public Class Form1

 

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        ' C:\db1.mdb Compact / Repair

        If Compact_MDB("C:\db1.mdb") Then MessageBox.Show("OK !")

    End Sub

 

    Private Function Compact_MDB(ByVal strFile As String) As Boolean

 

        ' Jet Access (MDB) 連線字串; Jet ( Joint Engine Technology )

        Dim strCn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0}"

 

        ' "Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Jet OLEDB:Engine Type=5"

 

        ' Path.GetTempFileName 方法: 在磁碟上建立具命之零位元組的唯一暫存檔案,

        '   然後傳回該檔案的完整路徑。

        Dim strTmpFile As String = Path.GetTempFileName.Replace(".tmp", ".mdb") ' tmp 副檔名改成mdb

 

        ' 建立物件陣列存放引數(參數) , 來源, 目的

        Dim objPara As Object() = New Object() {String.Format(strCn, strFile), String.Format(strCn, strTmpFile)}

 

        ' Activator 成員: 包含本機或遠端建立物件型別的方法,或者取得對現有遠端物件的參考。

        ' Activator.CreateInstance 方法(Type)  : 使用最符合指定參數的建構函式,建立指定型別的執行個體。

        Dim objJRO As Object = Activator.CreateInstance(Type.GetTypeFromProgID("JRO.JetEngine"))

        ' Type.GetTypeFromProgID 方法: 取得與指定的程式識別項(ProgID) 關聯的型別;

        '   如果在載入Type 時發生錯誤,則傳回null

        ' JRO.JetEngine Microsoft Jet and Replication Objects X.X library 

 

        ' Type.InvokeMember 方法

        ' Type.InvokeMember (String, BindingFlags, Binder, Object, Object[])

        objJRO.GetType.InvokeMember("CompactDatabase", Reflection.BindingFlags.InvokeMethod, _

                                                                    Nothing, objJRO, objPara)

 

        ' 使用指定的繫結條件約束並符合指定的引數清單,來叫用指定的成員。

        ' BindingFlags 列舉型別,InvokeMethod 指定要叫用方法。

 

        File.Delete(strFile) ' File.Delete 方法: 刪除Compact 前之mdb

        File.Move(strTmpFile, strFile) ' File.Move 方法: Compact 過的mdb 檔改成()正確檔名

 

        ' Marshal.ReleaseComObject 方法釋放JRO COM 物件

        Runtime.InteropServices.Marshal.ReleaseComObject(objJRO)

        objJRO = Nothing

 

        Return True

 

    End Function

 

End Class