2010年11月25日 星期四

let's play sound with powerbuilder

最近在用PB10做一些觸控裝置的UI(使用者介面,User Interface),雖然是觸控,不過使用起來的UE(user experience)跟 iPhone、iPad實在也差很多,無怪乎用過 iPhone之類的觸控裝至以後對於PC的各類觸控總覺得就是不喜歡。

題外話結束。

在設計這類的句有觸控介面的程式時除了UI要非常易懂、直覺以外,其他的輔助可能就需要那麼一點了。在設計這個CASE的UI時,尤其是數字鍵盤,如若加個語音提示或是導航,也許會減少許多輸入錯誤的機會。

目前PB10尚未支援 .NET ,所以依然使用API設計。

使用方式不困難,因為Windows就有內建一些標準函式可以用了
首先,定義函式呼叫

Function Long auxGetNumDevs() Library "Winmm.dll"
Function Long auxSetVolume (Long uDeviceID , Long dwVolume) Library "Winmm.dll" alias for "auxSetVolume"
Function Boolean sndPlaySound(ref String lpszSound , Long fuSound ) Library "Winmm.dll" alias for "sndPlaySoundW"


然後幾個基本常數

Constant Long SND_SYNC = 0
Constant Long SND_ASYNC = 1
Constant Long SND_NODEFAULT = 2
Constant Long SND_LOOP = 8
Constant Long SND_NOSTOP = 16


再來就是呼叫方式了,大部分常用的呼叫方式有兩種:同步 或 非同步(Synchronous / Asynchronous)

同步方式:採用同步方式的話,程序本身必須等待聲音檔撥完才能繼續執行。

ls_wav = "c:\piano.wav"
sndPlaySound(ls_wav , SND_SYNC)


非同步方式:當聲音檔案播放時,程序會繼續執行,其聲音停止的方式除了播放完畢以外,撥放另一個聲音檔會中斷上一次正在播放的聲音,或是程序結束時。

ls_wav = "c:\piano.wav"
sndPlaySound(ls_wav , SND_ASYNC)


另外若是要調整聲裝置音量大小,可以使用auxSetVolume,使用前需使用auxGetNumDevs來先取得裝置代號。

//調整音量到最大
li_devs = auxGetNumDevs() - 1 // base 0

li_right = 255 //右聲道音量(0-255)
li_left = 255 //左聲道音量(0-255)

for li_dev = 0 to li_devs
ll_vol = (li_right * 256) + li_left //HEX FFFF 高位元右聲道,低位元佐聲道各聲道255階
auxSetVolume(li_dev , ll_vol)
next


不過這個音量調整的Function都一直沒有成功過,原因還在查。

2010年8月24日 星期二

天外之音 - Cecile Corbel


Cecile Corbel被譽為是法國頂級吟唱女音歌手,原本有聽過其名,但是未曾有去特別聽過她的歌在一次偶然的機會下,得知宮崎駿2010年新作《借りぐらしのアリエッティ ノ》請她來配樂,在看過預告之後,發現風格還蠻搭的。

感覺非常的舒服,跟之前宮崎峻的搭配別有另一種味道,只是不知是不是宮崎峻是不是想要刷洗之前幾部票房毒藥的名聲,個人我倒是蠻期待這部 《借りぐらしのアリエッティ ノ》的。


2010年8月3日 星期二

將Datawindow資料存出成EDI檔案

PowerBuilder 的 DataWindow 本身可以將資料存成許多種格式,但偏偏就是缺了一種格式--EDI (Eletronic Data Interchange)--

這種格式在台灣是早期非常普遍的格式,詳見維基百科經建會-解釋「通關作業XML電子資料交換格式」與EDI格式,主要多是公家機關使用,舉凡報稅、金融皆是使用此一格,久而久之就變成了早期台灣電腦最普遍的資料交換檔案格式。

這個格式的特色是每個欄位呈現在文字檔案中都有指定的長度(位元數),各欄位資料之間無分隔符號。所以每個ROW DATA呈現成一串字串,每個ROW字串的長度完全一樣。當然,這種格式的優缺點並非這篇的重點,所以這裡就不討論。

例如:
假設 CSV 格式的資料如下
黃小明,1978/3/2,台中市中山路120號,0922-222-113,15
李大海,1970/12/14台北市忠孝東路三段41號8樓-5,02-12345678,23

而轉成 EDI 格式就可能如此
黃小明19780302台中市中山路120號             0922-222-113   SIMON           15
李大海19701214台北市忠孝東路三段41號8樓-5   02-12345678    DAVID CHAU      23

2010年7月30日 星期五

替ETC車機OBU DIY一個車用電源

使用ETC已經有一段時間了,差不多在遠通當初推出時沒多久就申請,
只是當初在申請後看到OBU的設計,著實讓我感覺不太好,
主要原因有兩個,一個是紅外線收發裝置的設計(這部分我就不講了,網路上很多人在抱怨),
第二個就是使用電池當電源,這讓我很納悶,為什麼用電池?
為什麼不用車電源?
或是讓使用者可以選擇?

另一個最奇怪的問題就是,遠通電收還提醒我不可以用『金頂電池』,建議使用『勁量電池』
這就怪了,為什麼?
因為...金頂電池電流太高,會把OBU燒壞。
噗!!!!!!
我差點沒把剛吃過的飯噴出來...

詢問之下得到的答案真是哭笑不得,雖然我看回答我的人也只是照著公司發的公告來唸,
但是這個答案也太離譜了吧,學電子的人大多都可以感覺到這答案太過敷衍。

如果金鼎電池電流太高(注意喔,他並不是說電壓)會把OBU燒掉,
那告誡一下遠通電收,你們RD部門真的是可以『呷賽』去啦。
金頂電池也算是屬一屬二的電池廠牌了,
RD在開發OBU的時候連個簡單的電源相容測試都沒做好,
何況電池並非『定電流』的電源供應來源,
我看負責這專案的人會考慮用紅外線,而不使用RFID真的是『頭殼壞壞去』(啊,又扯到技術這裡)。

2010年7月29日 星期四

引用:Tree's Blog: Blogger code block

來源:Tree's Blog: Blogger code block

由於部落格主要是貼程式碼的地方,因此會需要使用到CODE標籤
可是常常改版面的結果,就是CODE的CSS描述會需要重貼,這就挺麻煩的
所以,引用了 TREE 的這篇文章,每次更改版面時就要記得貼回這段程式碼。
(貼入位置在 /* posts 區段)

code, .code {
display: block; /* fixes a strange ie margin bug */
font-family: Courier New;
font-size: 8pt;
overflow:auto;
background: #f0f0f0 url(http://klcintw.images.googlepages.com/Code_BG.gif) left top repeat-y;
border: 1px solid #ccc;
padding: 10px 10px 10px 21px;
max-height:200px;
line-height: 1.2em;
}

使用Powerbuilder在EXCEL欄位插入圖片

這是由 calvin 提供的
主要是想把圖片插入EXCEL裡面

可以參考下列片段:



string ls_filename1,ls_path1,ls_range

//要插入的圖
ls_pic = "c:\sign.bmp"

OleObject Loo_Excel

Loo_Excel=create oleobject

if Loo_Excel.ConnectToNewObject("Excel.Application") <> 0 then

messagebox('提示','系統未安裝Excel,無法運行此操作!')
  return
end if

Loo_Excel.Workbooks.Open(ls_filename)

//選好要插入的儲存格

Loo_Excel.Application.Range( "M22").Select

Loo_Excel.Application.ActiveSheet.Pictures.Insert(ls_pic).Select

Loo_Excel.application.ActiveWorkbook.Save()

Loo_Excel.Application.ScreenUpdating = True

Loo_Excel.Application.workbooks.close()

Loo_Excel.DisconnectObject()

destroy Loo_Excel



其他的部分都可以依理延伸。

2010年6月25日 星期五

Avatar這個字

前陣子看了電影『阿凡達』,然後沒多就又出了一部電影『降世神通:最後的氣宗』


突然之間,覺得好像有什麼關聯,後來去回顧了一下『降世神通』的卡通,突然發現


AVATAR這個字


本來阿凡達出來時,對這個單字蠻陌生的,本以為只是一個音譯的結果,但卻看到有兩部片子用了同樣的單字,很好奇。

所以就去上網查了一下,居然GOOGLE大神的翻譯器翻不出來!!(YAHOO翻譯,譯典通都有找到)

後來,查詢綜合各方資訊得到結果是:

此字元本源自於梵文:अवतार ,在拉丁文的寫法就是:AVATAR
意思源自印度哲學中 神靈與人世間肉體之間的關係,也就是神靈經過深思熟慮,具有某種目的而從天界下降到人世的意義,一般也有『下降』、『轉世』的意義存在。一般俗稱『天神降臨』、『天神附體』、『降世神通』、『天神下凡』等等的意思存在。

現今最多的說法是『化身』意思。

當然以英文單字來說也有 incarnation 和 incarnate 兩種,所以很容易搞混,英文字中的incarnate用意比較廣。可以用來罵人如:She is devil incarnate (她是惡魔的化身) 等

而VATAR意思比較限制用於神祇的化身。

2010年5月30日 星期日

自製吹泡泡水

家中有小孩以後,難免要花上需多錢,尤其是小孩的娛樂...

當然我也不是鐵公雞,但是常常只要出去玩,一到旅遊景點,小孩子總是會望著吹泡泡的小販一直看,起初不以為意,想說滿個泡泡水給小孩玩也不是啥大問題的。

但是每次出門去玩就幾乎會買,久而久之就會驚覺這筆費用還真是不少啊!!

有感於此便到網路上找找有沒有人會用泡泡水的DIY,來自己做看看,也節省一點費用。順便喚起我的童年回憶。

後來找到一些親子網提供的泡泡水配方,很高興的抄起來自己去DIY....

真的是蠻有挫折感的,因為常是很多方法,結果都不理想,後來在百般嘗試後大概得出了一些心得。所以乾脆自己記錄下來,免得以後需要用到時就忘記配方了。

首先準備主要的配方材料如下圖:
從左起依序:洗碗精、洗髮精、甘油、膠水

2010年5月29日 星期六

Coldfusion 內建變數

Coldfusion 本身系統已經內建好一些特殊用途的變數,而這些變數可以依照各種場合去存取使用,所以就先大概來了解一下這些特殊使用的變數吧。

CGI變數
當瀏覽器發出請求到服務器,Web服務器和瀏覽器創建這個環境變數,包含的資訊有IP位址、瀏覽器類型,驗證用戶名等等。要注意的是這個變數只能用來讀取不能修改。
CGI.SERVER_SOFTWARE : 請求回應的伺服器軟體的名稱與版本。
CGI.SERVER_NAME : 伺服器的主機名稱,DNS別名,IP位址。
CGI.GATEWAY_INTERFACE : CGI修訂版本。
CGI.SERVER_PROTOCOL : 伺服器的協定名稱與修訂版本。
CGI.SERVER_PORT : 伺服器的服務阜號碼。
CGI.SERVER_PORT_SECURE : 伺服器的服務阜號碼加密方式。
CGI.REQUEST_METHOD : 請求服務的方式,如在HTTP就可能是GET、POST、HEAD等等。
CGI.PATH_INFO : 延伸的存取路徑訊息(通常是虛擬路徑)。
CGI.PATH_TRANSLATED : 在虛擬路徑對應後會得到PATH_INFO的轉譯版本訊息。
CGI.SCRIPT_NAME : 虛擬路徑的執行腳本。
CGI.QUERY_STRING : 在URL中?號後面的查詢字串。
CGI.REMOTE_HOST : 請球對象的伺服器名稱。
CGI.REMOTE_ADDR : 請球對象的伺服器IP位址。
CGI.AUTH_TYPE : 如果伺服器支援用戶驗證,且執行受保護的程式碼,這裡必須指明驗證方式。
CGI.AUTH_USER : 如果伺服器支援用戶驗證,且執行受保護的程式碼,這裡必須指明驗證使用者。
CGI.REMOTE_USER : 同上。
CGI.AUTH_PASSWORD : 如果伺服器支援用戶驗證,且執行受保護的程式碼,這裡必須指明驗證密碼。
CGI.CONTENT_TYPE : 附加訊息的資訊格式,像是HTTP的POST或PUT的 x-www-form-urlencoded或multipart等。
CGI.CONTENT_LENGTH : 附加訊息的資訊長度。
CGI.CONTEXT_PATH : 附加訊息要求的執行路徑。
CGI.HTTP_REFERER : 發出請求的頁面名稱。
CGI.HTTP_USER_AGENT : 發出請求的瀏覽器/軟體/版本資訊。
CGI.HTTP_IF_MODIFIED_SINCE : 距離上次請求的時間(不同的請求)。
CGI.HTTP_ACCEPT : 客戶端可接受的文件種類。
CGI.HTTP_ACCEPT_ENCODING : 客戶端可接受的編碼種類。
CGI.HTTP_ACCEPT_LANGUAGE : 客戶端的編碼。
CGI.HTTP_CONNECTION : 客戶端連線資訊。
CGI.HTTP_COOKIE : 客戶端COOKIE資訊。
CGI.HTTP_HOST : 客戶端請求的主機。
CGI.CERT_SUBJECT : 由客戶端發出的認證主旨資訊。
CGI.CERT_ISSUER : 由客戶端發出的認證協議。
CGI.CERT_SERVER_SUBJECT : 由伺服端發出的認證主旨資訊。
CGI.CERT_SERVER_ISSUER : 由伺服端發出的認證協議。
CGI.CERT_COOKIE : 客戶端驗證的COOKIE內容。
CGI.CERT_FLAGS : 驗證狀態。
CGI.CERT_KEYSIZE : 驗證公鑰的長度。
CGI.CERT_SECRETKEYSIZE : 驗證密鑰長度。
CGI.CERT_SERIALNUMBER : 驗證序號。
CFI.CF_TEMPLATE_PATH : 伺服器樣版文件路徑。
CGI.HTTPS : 加密驗證主機。
CGI.HTTPS_KEYSIZE : 加密公鑰長度
CGI.HTTPS_SECRETKEYSIZE : 加密密鑰長度。
CGI.HTTPS_SERVER_ISSUER : 加密伺服端協議。
CGI.HTTPS_SERVER_SUBJECT : 加密伺服端主旨。
CGI.WEB_SERVER_API :(保留未使用.)

2010年5月28日 星期五

Coldfusion 系統保留單字

Coldfusion 與一般程式相同都有特定的保留字,由於這些是系統使用的單字,所以在設計Coldfusion文件時請勿使用,以免發生錯誤。

設計表單(FORM)時,底下列舉的單字請勿使用
  • _integer
  • _float
  • _range
  • _date
  • _time
  • _eurodate
  • _required

HTTP GET and POST basic

HTTP(Hypertext Transfer Protocol)是網路上最普遍的一種訊息交換協定,基本上它就是用來向服務主機發出要求的基本通訊方式,當然網路上也有其他衍生模式,如HTTPS、FTP等等。本篇僅簡述HTTP項服務主機發出的兩種方式,與實際產生的格式。

如果你需要撰寫SERVER端的服務,就必須稍微了解HTTP發出的請求訊息會長什麼樣子。

GET
get是屬於比較基礎的請求方式,例如網頁連結
<a href="http://www.site.com/hello.html"></a>
產生的訊息就會如下
GET /hello.html HTTP/1.1
Host: www.site.com
User-Agent: Mozilla/4.0

如果是帶有參數的請求,例如利用連結或是表單
<a href="http://www.site.com/login.html?id=john&pwd=9982"></a>
<form action="http://www.site.com/login.html" method="GET">
  user ID:<input name="id" type="text" /><br />
  password:<input name="pwd" type="password" /><br />
  <input type="submit" value="login">
</form>

產生的結果就會如下
GET /login.html?id=john&pwd=9982 HTTP/1.1
Host: www.site.com
User-Agent: Mozilla/4.0

在 submit 後瀏覽器上面的URL字串就會出現
http://www.site.com/login.html?id=john&pwd=9982
GET雖然好用,但也有一些問題,例如GET字串長度不可以太長,目前多數瀏覽器多定義在256個字元以內,隱密性不足,遇到非英數字的字元會無法傳送(通常瀏覽器會將其字元解析成HEX如%65),參數名稱與內容不可以使用關鍵字等等問題存在。

2010年5月25日 星期二

Powerbuilder夾帶檔案發送郵件的方法

案例版本:PowerBuilder 6.5
powerbuilder本身有呼叫exchange郵件的能力,所以發送郵件只需要使用內定物件與函數即可達成,但是有許多需要注意的地方,例如附件檔案、郵件內容等等。

先看一下畫面的設計:

收件者欄位是 sle_recipient
主旨是 sle_subject
附加檔案是 lb_1
郵件內容是 mle_notetext

2010年5月13日 星期四

郭采潔 - My'Car 與原曲Mika - Lollipop

最近真的快忙死了
手上2-3個程式專案要做,還得應付處理行銷政策,加上一個跟不上進度的工程師,很多程式都快做不出來啦...

以上僅是牢騷話.....

最近,裕隆不斷的推 my car 這個廣告,本來不太注意的,沒想到我家的女兒有一天突然哼哼的唱起來,我才發現這廣告對女孩子的吸引力很強啊!



2010年4月30日 星期五

報表使用滑鼠滾輪就會發生問題-PowerBuilder6.5

好吧,我承認我是老古董
powerbuilder 6.5的開發工具我還是在使用的.....
<<題外話結束>>

如果你設計的報表在遇到滑鼠滾輪滾動時就會出現『Sybase Inc. Product File發生問題,必須關閉,僅此致歉。』的訊息

請注意兩件事:
一、DataWindow中的Detail Band 高度被設為 0。
二、PBVM60.DLL有問題

解決方式:
一、不要故意設計Detail Band高度為0的報表(我知道有時候這樣設計統計表比較方便)。
二、在datawindow視窗物件事件上禁止滑鼠滾輪動作。但如果遇到報表比較長的就很麻煩。
三、更新pbvm60.dll ,如果你要問我哪裡找,我想可能很難吧,畢竟都是骨董級軟體。

目前我還是有保留,需要的人可以留言給我向我索取,不過不確定100%可用於你的PB6版本。
如果想用盡只滑鼠滾輪的方式處理可以參考另外一篇『如何在datawindow中禁止使用者使用滑鼠滾輪』。

如何在datawindow中禁止使用者使用滑鼠滾輪

這不算太難,只要懂點MSDN的人大概都能明白吧

Datawindow視窗物件上的兩個事件都可以用,擇一即可

一、寫在 OTHER EVENT

CONSTANT integer WM_MOUSEWHEEL = 522

if message.number = WM_MOUSEWHEEL then
   message.processed = True
   message.returnvalue = 1
end if


二、新增事件ue_syscommand 並繼承pbm_syscommand

CONSTANT integer WM_MOUSEWHEEL = 522

if CommandType = WM_MOUSEWHEEL then
   message.processed = True
   message.returnvalue = 1
end if


用的原理就是利用截取WINDOWS API 的事件訊息,並由PB物件的事件規則去決定返回值,當API收到指定的值,就會發生對應動作。

2010年4月7日 星期三

真假慈悲?

現在的人都很慈悲為懷。

但是卻不是每個人都能了解慈悲的意義。
讓我說個故事吧:

從小,我就跟爺爺奶奶住一起,我們家是傳統的務農人家,
爺爺每天的工作就是耕鋤,早上5點就起床稻田裡去工作,
我們小孩則是6點起床、7點上學、下午4點半回家。

2010年3月19日 星期五

將WEB上傳的檔案轉存到FTP-ColdFusion

一般來說,使用ColdFusion指令讓使用者上傳檔案,並不是什麼大難題,你可以下個指令就可以完成了。

<cffile action="upload" filefield="upfile" destination="C:\InetPub\wwwroot\uploads" >

假如,除了WEB伺服器外你還有FTP伺服器提供給客戶使用不同方式上傳檔案的話,當客戶習慣於不同場合由不同伺服器上傳檔案,這樣你會很難將客戶的檔案統一管理,你必須頻於WEB伺服器與FTP伺服器間處理客戶上傳的檔案,這時如果又有另一部(或多部)WEB伺服器加入戰局,你可以想像要管理分散在各處的客戶上傳檔案,會是相當惱人的了。因此簡單的作法是將客戶上傳的檔案全部導向同一部伺服器上,以減少分散的管理問題。

2010年3月18日 星期四

製造點菜機、發票機、櫃員機的廠商

這家公司是 普士科技 (拍檔集團) http://www.taiwan-pos.com/

本來年初公司規劃今年更換老式發票機,
因為再不換就會面臨民國100年的問題。
本來想直接買新的發票機,

但是找了找,發現能夠處理民國100年問題的發票機也不便宜
加上需要有統一編號檢查機制的發票機,
選擇性就更少了。

2010年2月24日 星期三

JUMPCN網站漫畫下載程式

上一篇是抓 kukudm 網站的程式,由於該站常改程式碼且不穩定,所以最後停止更新該站的擷取。後來經網友推薦的網站中,大概看了一下 jumpcn 網站比較沒那麼多的"機關",因此決定以此站為抓取對象,直接修改上一次的程式"kukucatch"以便節省開發時間。

下載位置:按這裡
軟體版本:2.2.1.5
檔案大小:5MB(RAR壓縮)
解壓密碼:無
需要安裝:免安裝
***************************************************************************************************
*2011-08-30*另外網友 Wolfar 提供了他開發的版本,可以到下面網址
http://jumptocatch.blogspot.com/
他的版本目前有持續更新,建議各位網友可以去看看
***************************************************************************************************