假設有 10 人同時進入公司
依照目前主流的想法,資深=職位高
那麼是不是 20 年後,這 10 人都是主管呢??
假設不是 10 人,而是 1000, 10000 人的時候呢??
所以,真的資深了,就要當主管了嗎??
我覺得這應該還是要適才適性吧~
VFP on Linux – 與 Wine 共舞的樂章
寫在前面
========
老實說,這篇文章充其量,祇能說是整理而已.
純粹去網路找文章,實作,遇到與文章不符的地方,就自己動手找資料,實驗,找答案,就這樣而已.
我想,大概有百分之五十是參考資料,百分之四十是翻譯;剩下百分之十,才是我的心得與實作過程.
Wine 的歷史
===========
請直接參考 2003/08/15 的 Wine Traffic
http://kt.zork.net/wine/wn20030815_183.html#5
安裝,from tarball
=================
以 tar xzf 解開之後,進行 patch, patch 檔網址在此:
http://www.paulmcnett.com/vfp/wine/vfpwinepatchwinsize
這個 patch 檔主要是修正 WAIT WINDOW 和 TooltipText window 無法正確顯示的問題.
Patch 方法:
cat vfpwinepatchwinsize | patch -p1
也可以手動編輯 wine/dlls/x11drv/winpos.c
在約 887 行的地方,找到
BOOL
X11DRV_SetWindowPos( WINDOWPOS *winpos )
這個 function,並在裡面的
TRACE(
“hwnd %p ……
之前加上
/* This is needed to flush pending X ConfigureNotify events on this window */
MsgWaitForMultipleObjectsEx( 0, NULL, 0, 0, 0 );
存檔以後即可.
執行 ./tools/wineinstall
它會出現訊息,建議不要以 root 身分來安裝
如果你堅持要以 root 身分來安裝, 請修改此 script,讓他忽略此訊息
(178~184 行,前面加上’#’ )
再執行此 script.
當然如果要用別的身分來安裝,請用 su 指令切換到其他 user 帳號
或重新以其他 user 帳號登入即可.
此 script會執行 ./configure,設置必要的設定檔以及路徑.
然後再執行
make depend && make && make install
進行編譯及安裝工作.
若以其他user進行安裝的話,就依照 script指示即可
wine 最後會以 SUID 形式存在.
RPM 安裝
========
請到官方網站下載符合你 Linux distribution 的 RPM 版本
然後執行 rpm -ivh wine-2003xxxx.ix86.rpm
即可~
但要注意的是,不保證可以用,建議還是以 tarball 安裝較佳.這樣也可加上 patch.
Usage
=====
winhelp, notepad, regsvr32, regedit 這幾個不用說明,就跟Windows 上的一樣~
progman 的話就跟 Windows 3.1 上的 Progman 一樣,執行以後,
有用過 Windows 3.1 的人,大概會很懷念~
winefile 則是檔案總管
wcmd 是”命令提示字元”
uninstaller 則是”新增/移除程式”
winecfg 則是調校 wine 設定的程式
執行軟體時,以 wine 執行之,假設你複製了小算盤(calc.exe)進去
那麼就輸入 wine calc.exe 即可~
安裝軟體,也一樣,執行 setup 即可: wine setup.exe
Configuration
=============
“Version”Section 的 Windows key 值改為 win2k
“DllOverrides” Section 中所有 key 值改為 “native, builtin”
此外把你自己 Winnt\system32 或 Windows\system 下的
OLEAUT32.DLL
COMMDLG.DLL
COMDLG32.DLL
SHELL.DLL
SHELL32.DLL
SHFOLDER.DLL
SHLWAPI.DLL
SHDOCVW.DLL
ADVAPI32.DLL
MSVCRT*.DLL
VFP6*.DLL
ODBC32.DLL
ODBC32GT.DLL
ODBC16GT.DLL
ODBCINT.DLL
ODBCCONF.DLL
都複製到 ~/c/windows/system 下
此外,OLE32.DLL, ADVAPI32.DLL, NTDLL.DLL 是不需要複製的,因為會造成無法執行.
REGEDIT.EXE 也請複製到 ~/c/windows 下,因為我們要把 ODBC 的 Registry import 進去.
你也許會問 wine 不是提供了 regedit.exe 嗎?可是根據我自己的試驗,它並無法匯入.
請在 Windows 下執行 regedit.exe 將
HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\ODBC Drivers
以及
HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\Microsoft Visual FoxPro Driver
這兩個機碼都匯出.分別存為 ODBCDrivers.reg 及 VFPDriver.reg
然後編輯 ODBCDrivers.reg ,將其他 Driver 都刪掉,只留下 Microsoft Visual FoxPro Driver 即可
接著就拿到 Linux 上,執行 regedit.exe 匯入囉.
開始使用 VFP
============
我自己是建議不要用 setup 安裝,網路上的一些狐友也這樣說
就是用 copy 的方式把 Program Files 目錄下的 VFP 目錄直接複製到 ~/c/Program Files 下
再參考上面的 Configuration 一節作修正.
接著就可以執行 wine VFP6.EXE 啦~~
進入以後,你會發現 command window 無法顯示游標,請用 Alt+TAB 切到別的視窗, 再按一次 Alt+TAB 切回 VFP,即可.
Issue
=====
Declare DLL ok
大部分函數都已經實作出來了~
可能會發生的問題,多半是路徑問題,此問題可以藉著修改 ~/.wine/config 來解決.
Record locking
20030318 版之前是有問題的,但之後的版本就都可以了
ActiveX
有些 ActiveX 會無法使用,那是因為有些 function 還沒實作出來的原因.
中文
對我們來說,這是最大的問題了
Linux 中雖然已經支援中文,可是 wine 看來是還未支援,也因此,文字無法輸入到 VFP 視窗中.
此外,字型名稱也是一大問題,由於小弟對中文字型設定這部分還不是很熟
再加上目前 X 組織又提出一個新的技術 Xft 要解決字型名稱問題,所以請期待吧~
其他
沒有 HTML Help.
在 Class Designer/Form Designer 裡面無法 copy/paste 物件.
Undocked windows 需要被設定為 undockable (在Title band 按下滑鼠右鍵) 或他們無法取得 focus.
EULA(End User Licence Aggreement) – Microsoft 的阻撓
====================================================
以下大致從 http://www.linuxtransfer.com/h/misc_vfplinuxjackofhearts.htm 譯出.
僅將大意譯出,如果譯的不好,還請見諒.
事情是這樣開始的,就在今年的四月左右,Ken Levy,Whil Hentzen在展示一個關於 VFP on Linux 的 Demo 之後,他接到一通來自微軟的電話,告知他說,這樣的一個 Demo 將可能會與 VFP EULA 衝突.後來這件事情就慢慢的擴散….
什麼是 EULA ?? EULA 就是 End User Licence Aggreement 的縮寫.
以下就是與 VFP on Linux 有關的 VFP8 EULA條款:
3.1 General Distribution Requirements.
(a) If you choose to redistribute Sample Code, or Redistributable Code (collectively, the “Redistributables”) as described in Section 2, you agree:
(i) except as otherwise noted in Section 2.1 (Sample Code), to distribute the Redistributables only in object code form and in conjunction with and as a part of a software application product developed by you that adds significant and primary functionality to the Redistributables (“Licensee Software”);
(ii) that the Redistributables only operate in conjunction with Microsoft Windows platforms;
在 VFP 社群要求微軟作進一步說明的一星期後,這是微軟的說明(澄清):
Visual FoxPro was designed and tested for use in creating applications that run on the Microsoft Windows platform; the same applies to the components that are provided to developers for redistribution with Visual FoxPro-based applications. If a developer wishes to distribute the Visual FoxPro runtime with an application, the runtime may only operate in conjunction with a Microsoft Windows platform. As with any contract, you should seek your own legal counsel’s advice when interpreting your rights and obligations under the Visual FoxPro End User License Agreement.
大意是,VFP本身是在 Windows 平台上發展及測試的,和VFP一起提供給開發者散佈的元件也是.如果開發者想要將VFP runtime和應用程式一起發佈,runtime 應該只能(may only)在Microsoft Windows 平台上運行.如同任何的合約,你應該尋求你的法律顧問的建議.
在這篇文章中,http://www.linuxtransfer.com/h/misc_vfplinuxjackofhearts.htm
提出了三點疑問,
1.Running the VFP Development Environment on Linux
VFP 開發者想要在一台 Linux 機器上將 VFP 當作一個開發環境.
這個企圖正是 McNett’s FoxTalk 文章的主旨,而且是Levy舉辦該活動的主題,卻又宣告他是與VFP7 和 VFP8 的 EULA 衝突,不允許公開展示.
2.Deploying custom VFP applications on Linux workstations
VFP 如同大家所知的,AP都是要與 runtime 一同包裝,並安裝到客戶那兒.以前很簡單,都只要幾個DLL檔案就行了,現在,最後一版的VFP,都是以MSM 形式給Installer tool使用.只有這些 MSM 檔案列在 REDIST.TXT 中,卻沒有明確的指定是哪些VFP DLL 檔案.
所以只要用這個方法是不是就可以避免了呢?
第一個問題是,如果發布自訂的VFP DLLs 在 EULA 裡是不被允許的,那麼
(1)如果不用 Windows Installer 技術的話,那麼市場上還有許多不使用 Windows Installer 技術的安裝工具,這些工具是不是就與 VFP EULA 衝突了呢??
(2)為什麼從6.0 到7.0,這樣的一個改變,卻沒有任何公告??就正常來說,一個產品的改變應該會被公告於 “Read Me” 或 “What’s New” 檔案中.可是這卻被放到 EULA 中,而缺乏任何說明.
ok,假設VFP EULA 禁止散佈 VFP DLLs,只能使用 Windows Installer 技術.
總之,看起來,Microsoft 就是想把它們的應用程式綁在他們的 OS 上.
3.The Business Issues
Microsoft 之所以需要 VFP, FoxBase 和 FoxPro, 主要就是為了要打擊Desktop database市場上其他的對手.那個時候,幾乎所有產品都不需要 runtime license,就這樣,一直延續到現在.Microsoft長期忽略 VFP,大概與Business Model有關,他們寧可開發者用VB 和 SQL Server,這樣就可從 SQL Server 那兒收到 licenses 費用.
VFP 可以在 Linux 上執行是非常吸引人的,想想一套便宜(或免費)的作業系統加上一個不貴又有威力的開發工具,和一個便宜(或免費)的後端資料庫,是多麼的不錯.很簡單的可以看出來為什麼 Microsoft 要試著去對抗他,並強加了和以往不一樣的的授權限制.
參考網址: (謝謝Ruey提供部份資料)
===============================
安裝:
http://www.pinpub.com/FT/FTmag.nsf/0/843B563D8FB169F485256D6700710C3A
http://www.paulmcnett.com/vfp/vfp7wine.html (安裝)
http://www.paulmcnett.com/vfp/wine/foxtalk1.html
相關資料收集:
http://fox.wikis.com/wc.dll?Wiki~VFPandLinux~VFP
http://www.associateddata.co.uk/VFPLinux.htm
微軟的恫嚇與EULA的相關討論:
http://www.linuxworld.com/story/32665.htm
http://mail.linux.ie/pipermail/ilug/2003-April/002197.html
http://www.linuxtransfer.com/h/misc_vfplinuxjackofhearts.htm
http://www.linuxjournal.com/article.php?sid=6869&mode=thread&order=0
Wine 官方網站 Guide:
http://www.winehq.com/Docs/wine-user/
Wine 應用程式相容性:
http://appdb.winehq.com/
http://frankscorner.org/
Wine 所收錄的 VFP Profile:
http://appdb.winehq.com/appview.php?appId=296;PHPSESSID=9e9d479fa55fb6c759ad092fd5aa3184
C++之人生
#include <iostream>
#include <string>
#include <cstdio>
#include <cstdlib>
#include <adodb.h> // CRecordset is defined here.
typedef int 成熟度;
#define RANDOM( max ) ( (int)(max*rand()/RAND_MAX) )
class CPerson {
public:
int 年齡,人脈,意志;
bool 戀愛,懷孕;
long long 金錢;
成熟度 技術;
CRecordset 履歷表;
string 性別;
CPerson 配偶,父,母,女友;
public:
CPerson() {}
};
bool
is家有錢( CPerson& p ) {
if( (person.父.金錢+person.母.金錢)>10000000 )
return true;
else
return false;
}
bool
is墮胎( CPerson& p ) {
// 不可預期
randomize();
return RANDOM( 1 );
}
bool
is鬧很大( CPerson& p ) {
// 不可預期
randomize();
return RANDOM( 1 );
}
bool
can結婚() {
//有鑒於目前社會的一些現況,
//調整最低年齡為15,最高年齡為無
if( person.年齡 > 15 )
if( has適當對象()
&& person.戀愛==true )
return true;
return false;
}
int
結婚() {
// nothing special
}
bool
isEnough( CPerson& p ) {
if( p.戀愛==true ) {
if( p.女友.懷孕==true &&
is墮胎(p.女友)==false
&& is鬧很大()==true ) {
if( can結婚() )
結婚();
return true;
}
}
if( is家有錢()==false )
return true;
if( 意志==0 )
return true;
return false;
}
int
求學() {
// nothing special
}
int
服役() {
// nothing special
}
int
上班() {
if( 實力不足() )
培養實力();
else {
if( 薪水 < 能力
&& 有更好的機會()==true )
跳槽();
else if( 薪水 >= 能力 ) //滿意
NULL; // do nothing
else if( 薪水 < 能力
&& 有更好的機會()==false )
認命();
}
if( 錢 > (錢 + 之前的錢) && 閒 = true )
度假休息();
if( can結婚()==true )
結婚();
if( has機會() )
創業();
else
作哈巴狗();
}
int
main() {
CPerson person=人_出生();
if( is家有錢( person ) )
exit( EXIT_FAILURE );
else {
while( isEnough( person )==false )
求學();
if( person.sex==string("男") )
服役();
while( isDead( person )==false )
上班();
}
// The person is dead,
// C++ will release person automatically.
}
雜亂的記憶之卷
觀察
人是一種很有趣的動物
有時候真想定點架一台攝影機
一直錄一直錄
看看會經過些什麼人
什麼時候人特多
什麼時候人又特少
….等等的
就跟觀察動物一樣
我想應該會很有趣吧~
In love with you
今天早上聽到這首歌
回想起很早以前聽到這首歌時的感動~
這是張學友跟黎晶合唱的
我忘記黎晶是哪裡人了,總之是外國人
他的歌聲不錯~很好聽~~可惜在台灣只出了兩張唱片
這首歌是收錄在第一張唱片中,因為那時候張學友好像很紅,又剛好是同公司(寶麗金),所以特地找張學友來抬轎~
我家裡還有卡帶呢~~突然就很想把它拿出來轉成 mp3~~
可是~~缺少設備~~ >_< 呵呵~~
行行走走去去死
以前在一本講打油詩還是笑話的書裡面看到
這句話 "行行走走去去死"
一直不很明白他的意思,
前後文也忘記了
只記得這句話
最近終於解出他的謎團
它應該是這樣解的:
"行,行走,走去,去死"
談電腦如何儲存整數
這好像是蠻嚴肅的話題~
說來話頭長~~~
某天早上吃稀飯的時候
陳小姐跟我說,說要買 kavod,到現在都還沒買~
我心裡想,什麼是 kavod 呢??
我很快就得到答案
原來她說的是 Vodka.
沒學電腦的人可能不知道
整數的儲存方式有所謂的 Little endian 跟 Big endian, 也就是順著擺跟倒著擺~
而顯示出來的數字都是正確的
也就是說,電腦會自行依據整數擺放的方式做處理
我想,陳小姐可能沒有把資料處理過,就講出來
所以才會偶爾把一些名詞講倒反吧~~
鮭魚豆腐
將豆腐洗淨置於盤中
再將鮭魚洗淨,置於豆腐之上
灑下一些豆鼓,蔥,薑,蒜苗,再淋上適量的醬油,少量米酒以及適量調味料
放到電鍋蒸即可~
哭
其實我國二以前(含), 都還是很愛哭的~
國二的時候,甚至有一次在上課的時候,被前面同學惡整了,然後就翻臉哭起來了.
上課的老師是國文老師也是導師,她對我很好
我哭完,她還幫我圓場,說哭是一種情緒的發洩,不要排斥這種行為.
現在想起來覺得真是糗~
還有一次,是在家裡看魯冰花的時候
哭的實在是讓我頻頻跑廁所去洗臉
以作為掩飾.
啊~~~愛哭的童年~~
後來國三以後,想哭也哭不出來了~應該說是很難哭出來.
哭的次數屈指可數~
其實現在有時候看到一些很 touching 的事物,也會很想哭,但就還是差了那麼一點~
我自己覺得很悲哀~那種情緒放在心裡的感覺是很奇妙的~~
嗯,不知道該說是幸還是不幸.
麵包超人變奏曲
麵包超人打算把全世界人的頭都變為跟它一樣可以替換.
(什麼,你不知道麵包超人的頭可以換,找時間看看卡通吧!!!)
所以就請果醬爺爺開始建造工廠,開始大量製造.
為了要大量製造,他們需要很多的電,很多的木材,很多的水,很多的奴隸去種麥子.
於是麵包超人就開始去到處抓人,開始亂砍樹,開始建核能發電,開始幫人亂換頭~~~~
過了沒多久就把地球搞的烏煙瘴氣的~~
細菌人看不下去~~他說,怎麼可以有人比我還壞!!!
所以就夥同小病毒開始反抗麵包超人~~
再經過了很長時間的努力,終於到了最後決戰的關頭.
麵包超人:”妳們這樣阻撓我,到底有什麼好處??”
細菌人:”那當然是為了全人類啊!!!”
小病毒:”對呀!!對呀~~”
麵包超人,果醬爺爺與奶油妹聽到這麼噁心的話真的是很受不了,就開始吐吐吐,把果醬啊,奶油,紅豆什麼的都吐了出來~~然後他們就輸給了細菌人跟小病毒~~
就這樣,細菌人跟小病毒消滅了麵包超人及其同黨:果醬爺爺與奶油妹.
世界就重新恢復了和平~~而那些頭已經被換掉的人~~因為沒有了新頭,只能小心翼翼的保護頭轉戰地下,繼續麵包超人的野心~~
就這樣~~
小紅帽
小紅帽問:”婆婆,為什麼你的眼鏡那麼大,好嚇人啊?”
婆婆說:”那是為了要把你看清楚啊.”
小紅帽:”那為什麼你的聲音那麼的沙啞呢??”
婆婆說:”那是因為快要看到你,心情很好整天唱歌,唱到嗓子都啞了”
小紅帽:”那為什麼你的手毛茸茸的?”
婆婆說:”最近天氣太冷,所以就長出毛來禦寒啦~~”
小紅帽:”那那,婆婆,為什麼你的嘴巴那麼的大,牙齒又那麼的尖??”
婆婆說:”那是為了要吃掉你啊~~”
於是就一口把小紅帽吃掉了~~
=====
恐怖喔~~恐怖的不得了喔~~
小紅帽能不能活著回來呢??
請繼續收看.
=====
之一
小紅帽被吞到肚子裡面之後
感到非常害怕
四周一片黑暗
他試著向四周張望,期望能找到一點憑藉
非常幸運的,他發現了一絲絲的亮光~
他向亮光走去~發現亮光之處有三個人以及一張桌子~
而那三個人正頹喪的靠在桌子上~
其中有一個人正是他的外婆!
他很高興的叫著~
外婆聽到他的聲音,非常的高興~~
對另外兩個人說,我們可以打牌了!!
於是,他們四個人就很高興的打起牌來了.
這下子,反而是大野狼困擾了
因為他們打牌的聲音,使的他沒辦法再去打獵(獵物被嚇跑?!)也使得他沒辦法睡覺~~
最後只好去找醫生開刀,把他們放了出來~~
=====
之二
大野狼在吞入小紅帽之後,心情非常輕鬆~
於是就在床上睡了起來.
小紅帽被吞進去之後,絲毫不見慌亂
只見他鎮定的取出一把剪刀~
喀擦喀擦地,把大野狼的肚皮給剪開了!!
而且還把昏迷的外婆救了出來.
接著,她去搬了許許多多的大石頭
放到大野狼的肚子裡
然後重新縫了起來.
之後就和外婆躲了起來.
大野狼起床以後,不知怎麼地
覺得口好渴,身體好重
於是就到了小溪邊喝水
當他俯下喝水的時候
一不小心就跌到溪裡,又因為石頭,他實在是浮不起來
就這樣淹死了~~
極短篇-螳螂捕蟬,黃雀在後(2)
“呼~~累死了”
螳螂好不容易搞定”蟬”這個客戶.
“蟬”是個大公司,也因此被上層交代要特別照顧.
也因此螳螂特別用心在這個案子上~~
這一天晚上,螳螂剛輔導完蟬的上線,直接回到公司.
公司的辦公室空蕩蕩的,一個人也沒有
他苦笑著~
Schedule 就已經快要 Delay, 今天白天的時候,他好說歹說的,希望蟬能夠延緩一下時程,蟬卻說”你們總經理,黃雀,說時程絕對不會 Delay 的,我想你應該沒問題吧!”
螳螂心裡想:”該死!!又被扯了後腿.”
不過,螳螂還是很努力地和蟬周旋,費盡心思,總算還是爭取到一些緩衝的餘地.
不過站在這個空蕩的辦公室,他的心不禁涼了~~
把資料丟在位子上後,他鎖上公司的大門,踏上台北沁涼夏夜的街頭.
懷著沉重的心情,漫步在台北的街頭,環顧周遭的五光十色,他下定了決心,搞定這個案子以後,就要離職了~~
這就是”螳螂捕蟬,黃雀在後”的故事~~
極短篇-螳螂捕蟬,黃雀在後(1)
蟬是一個街頭的流浪兒
他被黑街的老大-螳螂所控制
每天必須去偷東西回來交給老大
而老大則負責保護他不被其他區域的老大欺負
黃雀,是這個管區的警察
他負責管理這個管區的治安
為此,他和螳螂有一定程度的默契
只要螳螂不要太誇張
每個月給他固定的油水
那麼,黃雀就睜一隻眼閉一隻眼~~
於是故事就這樣展開了~~~~
Cable Car
2003/05/12
除了一些沒仔細去逛的地方,如博物館之類的之外~~
已經逛到沒什麼地方好逛的了~~ >__<
接著我們就搭另一班公車,改到市中心.
打算搭乘聞名的 Cable Car.
今天運氣真的不錯,排隊的隊伍沒有很長.
不過我們還是等了快半個小時,才等到車車.
Cable Car 的特色就是"車是鏤空的,座位朝外,外邊則有腳踏板,人可以站著"
除此之外,我覺得它跟電車差不多.
花了兩元,就開心了上了車.
路上,到了某個站牌,才稍停一下,就有人站了上來~~
那是一個笑的很漂亮的女孩子~
不得不讓我仔細的打量了她一下
一頭俏麗的深褐色短髮,帶著泛染的金黃
脖子上則箍著很有特色的頸圈
她就這樣站在我前面,讓我用最帥氣的笑容一直看著她~
甚至還偷偷拍了兩張照片 ^_^
後來,因為我帥氣的笑容,她還主動跟我打了招呼,還問我要不要她幫我拍照~
就這樣讓我跟她聊了兩句.
本來我還以為她也是觀光客,所以才那麼興奮,帶著甜美笑容的搭 Cable Car.
結果她是本地人,只是因為很久沒有坐了,今天才給她試試看.
這個女孩真的是不錯~在我回到旅館以後,還是心悸不已~~
不過她身材不是很好~
我想這應該不是很重要啦~~
重要的是我已經結婚了,不能亂把馬子 8-p
感想只有一個,真的,在外面的男人容易因為寂寞而外遇.
下車以後就是 Fisher Man Wharf 啦~~
又給他逛了一下下
真的是~~不知道要幹麻~~
後來就又給他逛回旅館去了~~
路上又看到那個女孩,在顧一個賣彩色蠟燭的攤子.
如果照一些騙女孩子的規則,這時候應該是要走過去,假意要買蠟燭,並且開始寒喧.
接著應該就可以問到姓名,電話…然後隔天晚上就可以約出來吃個晚餐…然後…嘿嘿嘿…
可惜,沒有然後了,我只是再次用我的笑容跟她打個招呼,而她也認出我,跟我打了一個招呼~~
就這樣,沒有然後了~~
^_^
套句飛天小女警的收場詞
就這樣,小鎮村再次得到了安寧~~