This is an article I translated for TS media for the Chinese Edition of Linux Journal. Original article on Linux Journal: Not Cooking the Books. 本文為筆者替天充文化翻譯 Linux Journal 中文版之文章,本譯文於2001 年 4 月號凌客誌中見刊。
Linux顧問的幾道佳餚
Marcel要替Linux的顧問們提供一些計時(time tracking)與記帳(bookkeeping)的訣竅
作者:Marcel Gagn’e / 譯者:劉自強(TzuChiang Liou)
放輕鬆點,法蘭西斯!我知道你的確是萬中選一的人才,但是我的朋友阿!你知道嗎?想要自己成立一家顧問公司可不是那麼簡單的事情歐!不過既然你問起我,我當然也很樂意給你一些我的經驗和看法。但在這之前,不知道你注意到沒,我們的客人都已經到了,所以就麻煩你先幫他們帶一下位吧!
歐,我的好友們,大家好啊!歡迎再次來到Ches Marcel餐館,法蘭西斯,還不快替我們的客人端上酒來!我想今天就來喝喝1997年份的「Vouvray Cuvee Constance」好了。
親愛的朋友們,剛剛法蘭西斯正在問我,如果以後改行不做餐廳而跑去開顧問公司的話,他會遭遇到哪些問題。為什麼會有這樣的想法呢?那是因為他對Linux的知識越來越豐富,所以自認應該已準備好可以幫助其他人、或是可以做些代理的工作了。
謝啦,法蘭西斯,來,大家請喝!
事實上從許多角度來看,Linux一直都是電腦顧問們的好夥伴,因為即使您不在主機旁也沒關係,各個發行套件中都含有一套完整的工具,可以讓您用許多不同的方法來連接主機。舉例來說,您的系統可以成為郵件伺服器、Telnet的客戶端、或是SSH的客戶端主機等等。
同時Linux也替您準備好許多充滿特色的程式開發工具:如C++的編譯器、Perl、Python、Tcl/Tk等等許多開發語言。事實上,一個典型的Linux發行套件當中包含的工具,足以讓您可以成為自己的ISP、並且建構一個完備的網站,您唯一沒有的工具大概就只剩下一些企業經營手段和生財的工具了!
講實際點,這也就是和錢扯上關係啦,這也是理所當然的囉,畢竟你們工作的原因除了希望能讓三餐溫飽外,也希望能偶爾來Ches Marcel餐館拜拜五臟廟吧。所以,為了要讓自己可以拿到應得的薪水,您必須告訴客戶,在他們的專案上您盡了多少心力;接著,您必須要向他們收費,把錢收齊並且追蹤整個工作流程。因此可以說,獨立顧問的生活可以說是自我規律強、一人當家的企業,而也就是這種工作的本質。是否覺得有點煩瑣呢?別擔心,那些由開放原碼的程式設計師們所組成的社群,除了讓Linux成為大家最能負擔的起、並可以任意客製化的工作站或伺服器外,其實也曾建構一些對付銀行(或這些繁瑣手續)的工具,接下來就讓我們一一品嚐吧!
身為一個顧問第一件事就是要學會「計算時間」(track time),所以在此先提供你們一些解決方案,首先是一個名為「tt」的低卡路里命令列工具:
tar -xzvf tt-1.0.tar.gz
cd tt-1.0
./configure
make
make install
使用的方法很簡單,只要在命令列輸入「tt」即可,請注意第一次執行時會回應一個錯誤訊息,告訴您並沒有完成動作,但同時也會在您的家目錄中產生一個名為「.tt」的目錄。接著請您切換到該目錄並且建立「projects.conf」這個檔案,這個檔案中主要儲存的資訊是您想紀錄時間的專案名稱列表。其中每個專案名稱都以中括弧標示,以下是我目前正在進行的專案:
[cook] # 非常重要
[eat] # 您可以這個賺錢嗎?
[drink_wine] # 可能的話啦
[write_recipes] # 這才是真正的工作,不是嗎?
您隨時可以使用「tt」的列表命令「tt –list ‘*’」把目前正在進行的專案全都列出來;而如果您想要開始追蹤某一個專案時,只需要在指令後面加上「–start」這個參數即可。例如喝酒除了是一種享受外也是工作的一部份,不過很抱歉的是我必須要收費(當然是開玩笑啦!),但假設真的要收費的話,我們可以使用下面的方式來計算:
tt --start drink_wine
當我完成這項…咳…嗯…“工作”時,只要在同樣的命令後面使用參數「–stop」即可:
就一個簡單的程式而言,「tt」已經算非常夠力了,而這個程式的另一個比較有趣的用法使把它當作任務的時間統計(time wrapper)。比如說您現在正在替Henri-s Fine Wines這家公司工作,主要負責在公司的網路伺服器上架設一個電子商務網站。然而這項工作卻完全以遠端的方式完成,且您是用「Telnet」連線的方式來進行作業,此時就可以將「tt」這個命令整合到「telnet」當中,用以自動地幫您進行時間追蹤動作,如下所示:
#!/bin/bash
tt henri_wines --start
telnet henri_website.com
tt henri_wines --stop
這樣就可以啦,如此一來當您需要報告時,只要用下面的指令便迅速地能產生所需的時間報表,如下所示:
tt drink_wine --export
project 'drink_wine' (closed):
Tue Dec 19 2000 16:53:31'Tue Dec 19 2000 16:53:56: 00h00m25s
Wed Dec 20 2000 12:10:39-fri Dec 22 2000 16:52:59: 52h42m20s
Fri Dec 22 2000 16:56:18-fri Dec 22 2000 17:01:04: 00h04m46s
Tue Dec 19 2000 16:53:31-fri Dec 22 2000 17:01:04: 52h47m31s
不僅如此,您還可以使用「-format」這個參數來修改輸出的格式,甚至也可以建立一個SQL資料庫來存放相關資訊,「tt」目前可以支援MySQL與PostgreSQL,舉例來說,我可以先使用下面的指令在PostgreSQL裡面建立一個資料庫:
createdb myconsultancy
接著,使用這個命令把「tt」的資料輸出:
tt drink_wine --export -format pgsql | psql myconsultancy
有了這項資訊後,我也能從PostgreSQL資料庫中產生一個客製化的報表,方法如下:
psql -c "select * from tt_timing;" my_consultancy
您將發現「tt」幾乎把每件您想做的事都完成了,這真是太好了!但如果您人在遠方,而需要一些能遠端管理時間報表的工具時,那下一道菜或許可以滿足您挑剔的胃口。又或者當您的顧問事業做的很成功,並且僱用許多員工來幫忙的話,這個工具也可以幫上大忙歐!
以瀏覽器為介面的應用程式有個很不錯的特點就是幾乎可以讓您在任何地方進行工作。只要啟動瀏覽器、輸入適當的網址、等待幾秒鐘的頁面顯示時間,一切就完美了!這裡要介紹給您的就是這樣一個準備就緒、新穎、好用的應用程式:在計時與付費的領域裡,幸運的讓我找到OnShore 公司所設計的程式「TimeSheet」,這是一個很棒的程式,值得大家仔細看看。它的介面非常的乾淨、簡潔,並且針對全職員工和簽約的顧問提供不同的管理介面與使用者資訊,也可以讓不同的顧問或特別的客戶產生不同的報表:
tar -xzvf onshore-timesheet-current.tar.gz
cd onshore-timesheet-2.2
在您開始執行make之前,謙虛的大廚師我在此向大家坦承,我在安裝這套軟體時忽略的一個重要的守則因而失敗,那個守則就是:「安裝前必須要詳讀所有的INSTALL及README檔」,在花了點時間仔細閱讀說明之後,我又重新回到OnShore TimeSheet的網站,結果發現只要在Makefile檔中作一點修改就可以讓安裝過程成功。其實所需要做的改變很少,全部都在Makefile檔案內最上面幾行,在此我列出其中一部分:
PERLINC := /usr/lib/perl5/site_perl/5.005
APPROOT := /usr/local/apache/htdocs/timesheet
TIMESHEET_URL := /timesheet
CONFFILE := timesheet.conf
GUEST_ACCOUNT := no
WWWUSER := www
APPOWNER := www
因為OnShore的「TimeSheet」這個程式本身就含有一些必要的Perl模組,所以您必須將「PERLINC」這個參數修改為您網站中「site_perl」安裝的目錄(上面是我的範例)。而「APPROOT」則是您伺服器上應用程式的位置,預設值是Red Hat的安裝預設路徑「/home/httpd/html」,請針對您的安裝路徑加以修改,至於我的網站則全部將Apache重新建構在「/usr/local/apache/htdocs」這個目錄中。
下一個需改變的是應用程式的預設網址,如果您在「APPROOT」中選擇了「timesheet」作為最終目錄(也就是預設值),則在此也必須要改為「/timesheet」。接著決定修正檔(configuration file)的名稱;再來,如果您需要的話,安裝程式也可以建立一個預設的「guest」帳號,在此我決定自己建構所有必需存在的使用者,因此改成「no」。最後兩個參數我都設為「www」,其中「WWWUSER」是您網站中預設的使用者ID,請注意在許多其他的系統中,通常預設值都設為「nobody」,所以您必須要視情況來設定。而最後一個參數是「APPOWNER」,這是用來設定整個程式的權限。
是不是覺得有點不耐煩了呢?馬上我們就要進入最後的步驟囉!如果您執行的系統是Debian,此時可以執行「make install-debain」,在其他系統上,請執行「make」就可以了。執行後將會看到螢幕上輸出一些訊息,顯示出系統正使用管理者的帳號建立一個預設的PostgreSQL資料庫,這樣大致上就完成了。如果要執行這個程式,請先確定您的網路伺服器可以支援並正確執行「.cgi」程式,如果沒有的話,可以在您的「httpd.conf」檔案中加入下面這一行敘述。(請注意,需要修改的檔案可能會依照您伺服器的安裝而有所不同,在某些系統中要修改的檔案可能是access.conf;而這些檔案可能會出現在 /usr/local/apache/conf或/etc/htpd/conf這兩個目錄中)
AddHandler cgi-script .cgi
Options +ExecCGI
AddHandler cgi-script .cgi
在此使用這個指令集,如此您就可以執行安裝在任何地方的cgi程式,不過要注意的是,通常cgi命令稿是放在「cgi-bin」的目錄中執行,而不是一般的html或是htdocs目錄中。
最後一個重點是,請確定您的PostgreSQL資料庫執行時有加上「-i」這個選項。舉例來說,在我的「my /etc/rc.d/init.d/postgresql」這個啟動檔案中(如果您使用Debian,則請看 /etc/init.d/postgresql),有下面這一行敘述:
su 'l postgres -c '/usr/bin/postmaster -s -D /var/lib/pgsql'
我的做法是簡單的修改了預設的開機敘述,在「postmaster」這個字後面加上「-i」這個選項,接著重新啟動PostgreSQL與 Apache後就可以了。現在只要在您的瀏覽器中輸入下面的網址即可看到相關訊息囉:http://my_webserver/timesheet/.
在出現的頁面中,您需要輸入管理者的帳號及密碼,兩者的預設值都是「admin」,所以很顯然的,首先要做的事情就是把這兩個資料改成比較安全一點;同時也可以開始建立您的使用者群:可以建立為永久員工、顧問、或是其他的管理者等等。您在圖一中可以看到OnShore TimeSheet執行的樣子。
恭喜啦!您現在可以記錄您的時間了,依據工作時間表,您可以開發票給客戶以獲取您辛苦努力的成果了!把錢收齊後其他的就交給會計去煩惱吧,等一下,會計師的工作不就是需要處理一些財務的資料嗎?其實這就是任何企業最懼怕的怪獸:記帳(bookkeeping)!還好對Linux使用者而言,我們也可以找到一些解決方案,來吧,親愛的朋友,接下來就讓我們來體驗一些針對Linux設計的會計套裝軟體吧!
Linux環境下會計軟體的出現代表著使用者對於不同工具的需求日增,幸運的是,目前這些軟體也正逐漸增加中。它們可能是商用程式、也可能遵循 GPL發行條款、或是自由軟體,而既然我們討論的是開放原始碼程式,所以接下來的菜單裡將集中在這方面作介紹。首先,如果您的需求不會很複雜的話,或許可以先看看「BANAL」這個程式,這個縮寫代表的意思是「BANAL-s Absolutely Not A Ledger」,這是個由Matthew Rice所開發出來的程式,雖然非常簡單但卻擁有很大的想像空間,我會這樣說是因為「BANAL」可以完成許多工作,有時候甚至可以輕易地完成大量的作業。您可以使用「BANAL」來追蹤時間、維繫客戶及供應商、開發票、追蹤開銷、開支票等等,而使用「BANAL」除了會花點時間之外,幾乎沒有其他的成本。
這個軟體是遵循BSD發行條款,所以可以自由下載,同時也非常容易安裝,當然您可以下載所有的原始碼並安裝tarball包裝的程式,但是大廚我謙虛的建議大家使用RPM套件比較方便。在此總共需要兩個RPM套件:一個是客戶端程式、一個是伺服器端程式;不過話說回來,tarball包裝中包含一些諸如加強版PHP命令稿等額外的東西,這對某些人來說可能很有價值也很好用啦。RPM的安裝方式非常快速且簡單:
rpm -ivh banal'*
套件安裝時會執行很多指令,其中一項是「BANAL」會在您的「/etc/passwd」當中建立一個使用者,並且啟動伺服器。雖然「BANAL」使用起來非常容易,但是我仍然建議各位務必詳讀安裝時所附的「quickstart」這個檔案:
/usr/doc/banal-client-0.10/quickstart.txt
在進行下一步之前,請先注意一件事情,在我的系統上(或許你們的也是一樣),程式「bk」預設會嘗試去開啟「/usr/bin/vi」,但因為我的系統中「vi」的執行檔路徑是「/bin/vi」,所以我們可能需要建立一個符號連結(symbolic link)來解決這個問題,或者也可以指定編輯器(EDITOR)的環境變數,用以覆寫「BANAL」內建的編輯器路徑,除此之外,您也可以藉此機會選擇慣用的編輯器,如下所示:
export EDITOR=pico
完成之後,便可以開始建立您的帳號、個人資料、供應商、支出帳戶等等資訊,而這些都可以用「bk」這個指令來完成:
BANAL-FTL bookkeeping system
「bk」是BANAL在命令列環境下的客戶端工具,簡介如下:
bk help commands 可以秀出指令列表
bk help command 可以針對某個特定的指令提供解釋
bk help usage 可以秀出命令列環境下的參數
開始執行程式之前,您必須使用「bk client 您的_公司_名稱」這個指令來建立一個初始客戶(也就是您的公司),然後請加以儲存(但請確定各個必要欄位都有填入適當的資訊)。接著您需要修改一些公司資訊設定值,以確保這個客戶檔案就是代表您的公司:
$bk setting /UserInfo/CompanyID
您將會發現系統切換到編輯器模式,並且出現下面這些資訊:(在此請記得將Value欄位中的ChesMarcel改成其他資訊歐!)
#A BANAL Settings Specification.
#
#Setting: Unique Setting ID
#Value: Value @@ REQUIRED
#Description: Item description
Setting: /UserInfo/CompanyID
Value: ChesMarcel
嗯,這樣就可以了,簡單吧!如果您的顧問工作常常需要使用時間表(timesheet)的話,也有一個名為「GnuCash」的圖形化使用者介面的軟體可供使用(您可以在LJ英文版 2001年四月後中看到GnuCash的介紹文章)。這個軟體使用GPL的發行條款,是個相當好用而且完全免費的會計套件。
在此我決定從頭開始安裝「GnuCash」,因此首先我從GnuCash的網站下載最新版的原始碼套件,如果您比較沒有耐性,在這裡也可以找到預先編譯好的二進位版本套件。
這個程式主要是使用GNOME的函式庫,所以不論您是從原始碼安裝或是使用二進位版本,都需要先載入相關的函式。當然囉,如果您的桌面環境就是 GNOME的話,將會發現相關的gnome-lib已經載入;但如果您使用其他的桌面環境,則需要載入gnome-lib以及其他必要的支援函式庫(特別是GTK)。雖然這會需要花一點時間,但用過之後您將發現「GnuCash」的確值得您花這些功夫。除了GNOME framework之外,您還需要「guile」、「swig」、「slib」、以及「g-wrap」等等工具,其中「g-wrap」這個套件可以在「GnuCash」的FTP站中下載。雖然還有一些必要的程式(比較重要的像是「libjpeg」、「libpng」等),但這些大多應該已經預先安裝在您的系統上了。例如若您有安裝「umb-scheme」套件的話,則「slib」套件應該已經存在系統中了。您可以在相關資源裡找這些網站的網址。
當下載好所需的軟體時,第一件事當然就是解壓縮囉,可以用下面這個大家都很熟悉的步驟來完成:
tar -zxvf gnucash-1.4.9.tar.gz
cd gnucash-1.4.9
./configure
make
make install
此時,您應該要檢查幾個非常重要的連結,當大廚我剛開始用這個食譜時並不是非常順利(特別是與「slib」相關時),因為「guile」函式庫會針對「slib」所在位置等資訊做一些假設。這對大部分的系統而言可能不是問題,但是在我的Red Hat上卻造成錯誤,我的解決方法是先切換到「/usr/share/guile」目錄下,然後建立下面這些符號連結:
In -s /usr/lib/umb-scheme/slib slib
In -s /usr/lib/umb-scheme/slibcat slibcat
In -s /usr/lib/umb-scheme/slib/mklibcat.scm mklibcat
因為「umb-scheme」套件是我的Red Hat系統預設安裝的scheme函式庫(還記得剛剛介紹的slib嗎?),所以當我加入這些連結後,程式運作起來就正常多了。完成這些手續之後,只要在命令列下輸入「gnucash」就可以執行這個程式了。如果您曾經使用過Intuit的「Quickbooks」套件的話,將會發現「GnuCash」真的很不錯,您可以藉由非常親切的介面來建立理財用帳戶、信用卡交易以及其他相關的統計表(請參考圖二)。此套件除了有個非常好用的“可回復” (reconciliation)特點外,同時也內建有許多的報表(包含損益報表等等),如此就可以輕易地知道在特定時間內您總共賺了多少錢。它甚至還針對全球化的顧問公司提供多種貨幣運算的功能勒。我唯一能想到對於小企業的缺點就是它沒有提供開發票的功能,所以,您必須用人工來完成這項動作。
我的天阿,法蘭西斯,時候不早了可是還有很多事要忙勒!不過還是請你再幫我們的朋友們倒杯酒吧!嗯,怎麼了?你打消了兼職作顧問的念頭啦?是因為我的緣故嗎?不用擔心啦,我不會叫你太多事情的囉,會有足夠的時間啦!我們待會再來好好談談吧,現在要多關照的是我們的客人,再來一杯酒!
親愛的朋友們,如果您決定要單獨成立顧問公司的話,請記住您其實並不孤單。因為選擇了Linux,您可以針對所有高科技顧問需要的工具作完全的掌控,再加上一些開放原始碼大廚們的幫忙,或許還會發現你們的理念是相同的勒,這麼一來,搞不好哪天就可以在Chez Marcel餐廳裡看到您的食譜歐!
下一次,Chez Marcel的大門仍然為您敞開!
祝大家身體健康,有個美好的一餐!
Marcel Gange (mggagne@salmar.com) 居住在安大略之Mississauga。在真實世界裡,他是Salmar Consulting Inc.(http://www.salmar.com/) 的總裁,那是一家系統整合和網路顧問公司。他同時也是一位飛行員、也寫一些科幻小說、也擔任「TransVersions」的編輯(一本科幻和恐怖小說的雜誌,不過馬上就要變成一本文選了)。他酷愛 Linux 及所有 UNIX氣息,甚至還將之融入公眾。事實上,他目前正忙著撰寫於 Linux System Administration: A User’s Guide這本書,相信很快就會由Addison Wesley Longman 出版了。您可以透過mggagne@salmar.com和他聯繫,同時也可以上他的個人網站http://www.salmar.com./來發掘更多有關他的故事。
sideword
在計時與付費的領域裡,幸運的讓我找到OnShore 公司所設計的程式-「TimeSheet」。
別擔心,那些由開放原碼的程式設計師們所組成的社群,除了讓Linux成為大家最能負擔的起、並可以任意客製化的工作站或伺服器外,其實也曾建構一些對付銀行(或這些繁瑣手續)的工具!
從許多角度來看,Linux一直都是電腦顧問們的好夥伴。
來吧,親愛的朋友,接下來就讓我們來體驗一些針對Linux設計的會計套裝軟體吧!
captions
圖一:TimeSheet執行的樣子
圖二:GnuCash執行的樣子
相關資源
BANAL:http://www.starnix.com/banal/
GnuCash Web Site:http://www.gnucash.org/
SWIG Home Page:http://www.swig.org/
onShore TimeSheet:http://www.onshore-timesheet.org/
SLIB Home Page:http://swissnet.ai.mit.edu/~jaffer/SLIB.html
Track Time Spent Tool (tt):http://awacs.dhs.org/software/tt/
The WINE Headquarters:http://www.winehq.com/