.PHONY in Makefile

Make 主要的工作目標都是針對檔案,所以萬一你定義的工作目標並不是檔案,或是正好與檔案重複的時候,其實是會讓人丈二金剛摸不著頭的。
所以,.PHONY 被用來定義假工作目標,這樣 Make 就知道這不是針對檔案。
Make 預設的假工作目標有:

  • all
  • install
  • clean
  • distclean
  • TAGS
  • info
  • check

用了 Make 也用了三四年了吧,現在看了”GNU Make 專案開發工具”這本書才知道…
慚愧…

VFPWiki升級之路(4)最終篇-bigdump.php

在此特別感謝網友阿凱推薦了這篇文章:BigDump-MySQL資料匯入好幫手,讓我得以解決 sql 檔案過大的問題。
這裡記下所有步驟:

  1. 備份原先VFP Wiki的資料庫,上傳到虛擬機器上,備份時,這些選項要記得選起來:
    • 資料庫輸出選項:
      • 加入刪除資料表語法
    • 結構:
      • 加入刪除資料表語法
      • 加入 if not exists
      • 建立/更新檢查日期
  2. 修改 bigdump.php 裡的資料庫設定,上傳到虛擬機器上
  3. 從瀏覽器去訪問bigdump.php,然後找到剛剛的備份sql檔案,進行匯入
  4. 下載 MediaWiki-1.6.8,1.7.x已經改用 PHP 5.0 了,所以跟環境不符合,不能用
  5. 解開 MediaWiki-1.6.8,丟到虛擬機器上的 /var/www,修改 /etc/apache2/sites-availables/default,將原來的 apache2-default 改成 mediawiki-1.6.8
  6. 下載原本的 LocalSettings.php,同樣也是丟到 /var/www
  7. 以 ssh 連到虛擬機器,這邊要作 upgrade,切換到 /var/www/mediawiki-1.6.8/maintenance,執行 php update.php
  8. 與原來的VFP Wiki作比對,比較是否有遺失頁面。不知道為什麼,的確有些頁面無法連到了,資料庫仍然存在這些頁面,只是我不知道該怎麼弄出來,後來因為這種情況的頁面不多,所以手動從原本的站台複製。
  9. 從虛擬機器上的 phpMyAdmin 再次匯出資料庫(參考步驟1)。
  10. 上傳匯出的SQL檔與bigdump.php
  11. 上傳 MediaWiki-1.6.8 與設定檔,當然記得要修改一下LocalSettings.php,因為虛擬機器還是與現實環境有差距。
  12. 經過一點點曲折以後,大功告成。

終於了卻一樁長久以來想做卻沒完成的心願。

VFPWiki升級之路(3)-MySQL

搞了半天,才發現MySQL版本裝錯。於是就先移除掉,再重新安裝。
可是卻無法啟動,看了/var/log/daemon.log之後,發現有這麼一行錯誤訊息:

Fatal error: Can’t open privilege tables: Table ‘mysql.host’ doesn’t exist

原來是 /var/lib/mysql 路徑下沒有 mysql 這個資料夾,於是我們改採手動建立,並且變更 owner 以及 permission。
再執行 mysql_install_db 來建立基本資料庫即可。

#cd /var/lib/mysql
#mkdir mysql
#chown mysql:mysql mysql
#chmod g+w mysql
#chmod o-rx mysql
#mysql_install_db

重新啟動 mysql,雖然是順利啟動了,可是卻出現錯誤訊息:

/usr/bin/mysqladmin: connect to server at ‘localhost’ failed
error: ‘Access denied for user: ‘debian-sys-maint@localhost’ (Using password: YES)’

停止mysql時也一樣有錯誤訊息:

/usr/bin/mysqladmin: shutdown failed; error: ‘Access denied. You need the SHUTDOWN privilege for this operation’

看來都是一樣的問題,所以需要手動GRANT權限給debian-sys-maint這個user,首先參考/etc/mysql/debian.cnf,得知帳號與密碼,再使用GRANT指令即可:

#cat /etc/mysql/debian.cnf
#mysql
>GRANT all on mysql.* TO ‘debian-sys-maint’@’localhost’ IDENTIFIED BY ‘your_password’;
>GRANT SHUTDOWN on *.* TO ‘debian-sys-maint’@’localhost’;

完工。

SQL 與 Text

今天想到蠻有趣的構想。
SQL 一如我們所知,是查詢資料表格用的。除此之外,也可以查詢 Excel 或是 具有特定格式的 Text。
如果今天以 regular expression 用來查詢一個文字檔,像這樣:

select pos from mybase.txt where str=’a*c’

或是這樣

select pos from mybase.txt where str=’\d\d\d\d’

然後我們就得到一份表格,告知我們 ‘a*c’ 或 ‘\d\d\d\d’ 在 mybase.txt 裡出現的位置。
喔~這看來很方便呢~~
如果要替換某些字串呢?像這樣

update mybase.txt set str=’abcd’ where str=’\d\d\d\d’

把所有是四個位數的數字替換成 abcd。
刪除也可以囉~

delete from mybase.txt where str=’^void’

把所有一開頭是 void 的 void 都刪掉…
新增?沒啥特殊功能可以加上,就是 append 到最後吧…

insert into mybase.txt ( str ) values (‘end of file’)

歸納一些關鍵字如下:

  • str 表示要找的字串或是找到的字串
  • pos 則表示在檔案中的位置,也許可以再延伸出 line 與 column,來表示列與行的位置。
  • 當然也要支援 count() 之類的函數,這樣就可以統計共出現幾次。

我想我會找時間來完成這個有趣的構想吧…
補充:
剛剛又想到,其實也可以以 Lucene 來當作資料來源,這樣也很有趣…

VFPWiki升級之路(2)-安裝必要的套件

大抵有下列套件需要安裝
mysql-server 4.x, apache2, php4, phpmyadmin, proftpd
因為無法登入實體 server 的 console,幾個方針要特別注意:

  1. 資料庫資料的匯入盡量利用 phpmyadmin。
  2. 程式盡量利用 ftp 上載。

但是卻遇到了最大的困難,資料量過大,無法利用 phpmyadmin 來匯入資料庫。
有沒有什麼更好的方法呢?

VFPWiki升級之路(1) – VMWare server on Fedora Core 5

因為太久沒更新wiki版本,又為了避免站主過於操煩,所以我決定架設一個跟他環境一樣的 server,來先行實驗升級看看。
首先,到VMWare官方網站下載官方提供的 rpm,並且索取 serial-number。
接著就是安裝:

#rpm -ivh VMware-server-1.0.0-28343.i386.rpm

畢竟以前也裝過幾次,接著就是設定 VMWare:

#vmware-config.pl

這部份應該沒問題,依照問題回答即可,大部分都只要按下 Enter 選擇預設值即可。
這個問題是比較詭異的,他說 gcc-4.1.1 可能會有問題;不過我不管他,還是輸入了 yes,等有問題的時候再說吧。

Your kernel was built with “gcc” version “4.1.0”, while you are trying to use
“/usr/bin/gcc” version “4.1.1”. This configuration is not recommended and
VMware Server may crash if you’ll continue. Please try to use exactly same
compiler as one used for building your kernel. Do you want to go with compiler
“/usr/bin/gcc” version “4.1.1” anyway? [no] yes

安裝完成以後,可以在Gnome環境下的 應用程式>系統工具 下找到 VMWare server console,執行他。
這可以幫助我們建立一個virtual machine。
下載 debian 的網路安裝光碟映像檔:debian-31r2-i386-netinst.iso,大約只有一百多MB,算是很小。
之後我們將利用 apt-get 直接從網路下載並安裝。
所以就直接把 virtual macine 的光碟機對應到這個映像檔上,進行 Power On,接下來就跟安裝 Debian Linux 一樣啦(不知道怎麼作的話,去買書吧)。
安裝完成之後,記得先暫時關閉 virtual machine,將光碟機對應到實體磁碟機上,免得又要再安裝一次。
開機之後,Debian 會很貼心的進行首次使用前的設定,也是照步驟進行即可。
這樣就大功告成啦,下次來安裝 apache + mysql + php。

How to branch/tag in TortoiseSVN

Subversion手冊裡面詳細的介紹了關於 trunk / branches,實際上所謂的 branches,其實也就是把 trunk 搬到 branches 目錄下並換個名稱而已。
TortoiseSVN建 branch/tag 的方法相當簡單。

  • 首先在 checkout 出來的目錄上,按下滑鼠右鍵,選擇 TortoiseSVN > branch/tags
  • 指定 url,改成 http://xxxxx/branches/your_branch_name,填上說明,左下角打勾,這樣 branches 完之後,TortoiseSVN會幫你把整個目錄切換到指定的 branch
  • 大功告成

ok, 那麼要怎麼切換回 trunk (主要開發分支) 呢?

  • 首先在 checkout 出來的目錄上,按下滑鼠右鍵,選擇 TortoiseSVN > Switch
  • url 改為 https://xxxxx/trunk
  • 大功告成

Grep in vim

怎麼直接在 vim 裡面直接去 grep 檔案呢?
答案在這裡:grep.vim – Grep search tools integration with Vim。
安裝步驟很簡單,下載以後,把 grep.vim 丟到 $HOME/.vim/plugins (Windows 就是 c:\documents and settings\your_name\vimfiles\plugins)。
接著就是設定啦,打開你的 $HOME/.vimrc (Windows 是 c:\documents and settings\your_name\_vimrc ),加入下面設定,主要是告訴 grep.vim grep 與 find 的路徑。因為我是用Native Win32 ports of some GNU utilities,又安裝在 c:\tools,所以就是:

let Grep_Path=’C:\tools\UnxUtils\usr\local\wbin\grep.exe’
let Grep_Find_Path=’C:\tools\UnxUtils\usr\local\wbin\find.exe’
let Grep_Xargs_Path=’C:\tools\UnxUtils\usr\local\wbin\xargs.exe’
let Grep_Skip_Dirs=’CVS’
let Grep_Default_Options=’-ir’
let Grep_Cygwin_Find=0
let Grep_Null_Device=’NUL’
let Grep_Shell_Quote_Char=””

完成這些步驟之後,重新打開vim,就可以用 :Grep your_pattern 來進行搜尋了。
搜尋的結果,vim會切割出另外一個 Windows 來顯示(通常在下面),你可以切換到該視窗(ctrl+w j),直接瀏覽搜尋結果,如果確定該行是你要的結果,也可以直接按下 Enter,vim 就會自動打開那個檔案並移到該行去。
這比你利用 console 去 grep,再手動切回 vim 來開檔要快多了。
如果要關閉搜尋結果,輸入 :cclose 就可以關閉。
:copen 是打開搜尋結果。
:colder 是切換到上一個搜尋結果。
:cnewew 是切換到較新的搜尋結果。
更多的用法,可以參照官方網頁。

cvs2cl.pl

早上試了半天,怎麼樣都無法讓 cvs log 輸出成比較美的樣子…
後來還是請 Google 大神幫忙,很快他就告訴我,可以用 cvs2cl.pl 這個 perl script 來幫忙。
由於我是在 CygWin 下執行 CVSNT,所以我稍稍修改了一下 script,將這行

my @log_source_command = qw( cvs log );

修改為

my @log_source_command = ( “/cygdrive/c/program files/cvsnt/cvs”, “log” );

果然很快就搞定了~~
輸出的結果果然就跟坊間的 ChangeLog 一樣。
Note:
Perl 的 qw( ) 會把內容拆成字串陣列,所以 qw( cvs log ) 會被拆開成兩個字串 “cvs” 與 “log”。
非常感謝這位大德的投影片。

sp_attach_db

用法很簡單…

EXEC sp_attach_db @dbname = N’pubs’,
@filename1 = N’c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs.mdf’,
@filename2 = N’c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs_log.ldf’

在 osql command line mode 下輸入以後,記得再輸入 go,表示執行指令。
參考資料: