發表文章

CFSCRIPT 基本陳述式

這段是給我自己常常忘記如何使用的註記: ColdFusion 的標準 tag 語法法以外,還有 script 語法, 下面是基本的 script 語法使用方式: script語法是包在一個 <cfscript> ... </cfscript> 之間的 每一行指令要用semicolon ; (分號)結尾,但備註與{大括號}結尾不用加 註解方式 //這是單一行的註解 mojo = 1; //這是放在指令後面的註解 /*     這是多行的     註解 */ 設定變數 foo = "foo bar";

耳機擴大器DIY

圖片
由於公司客服部門並不是獨立的隔離單位,接電話時常常受到其他部門的聲音影響。 雖然是客服人員帶著客服耳機聽電話,但由於客服耳機既不是全罩式,也不是雙耳式, 所以客服人員老是抱怨客戶來電聲音聽不清楚, 然而,電話機音量已經調整到最高了,效果依然不理想。 後來想到利用耳機擴大器來增加話筒音量, 可是網路查了又查,即便是網路拍賣的最便宜的也要近千元, 況且又不能直接使用,因為客服專用耳機的接頭就不太一樣,所以一定要改裝, 這樣下來,十幾部的客服電話的花費就會增加許多, 天啊,我只要簡單的把耳機音量擴大啊!!? 所以找上了一個國外專門自己DIY耳機的網站 http://gilmore2.chem.northwestern.edu/projects/index.htm  的 A Pocket Headphone Amplifier 章節 這個網站的幾乎都是愛好者的聚落,文件資源豐富,解說也很清楚。 所以我就參考了其中一組大家常用的耳機擴大器來自製,首先把基本結構電路先建立起來: 圖1:OP2134基本耳機擴大電路(單路)

在Powerbuilder下使用API執行Ping指令

利用 Windows 現成的 API 來實現這個功能 1.定義需要使用的結構變數 str_wsadata unsignedinteger   version unsignedinteger   highversion character   description[257] character   systemstatus[129] unsignedinteger   maxsockets unsignedinteger   maxupddg string   vendorinfo str_inaddr unsignedlong   s_addr str_ip_option_information character   ttl character   tos character   flags character   optionssize unsignedlong   optionsdata str_icmp_echo_reply unsignedlong   address unsignedlong   status unsignedlong   roundtriptime unsignedlong   datasize unsignedinteger   reserved unsignedlong   ptrdata str_ip_option_information  options character   data[256] 2.定義 External Functions //Open the socket connection. FUNCTION Integer WSAStartup( uint UIVersionRequested, ref str_WSAData...

sizeof in powerbuilder

PowerBuder 開發資料庫應用程式是相當的方便, 但是對於比較低階的資料處理,常常顯得捉襟見肘, 像是有使用到外部 API 時,需要傳遞變數,更多時候都需要一並傳遞該變數的長度, 此時,如果變數是很單純的,例如:char、integer、long 等, 而這些變數長度大致上都可由 help 來查得, 但是對於比較複雜的變數例如 structure 那就真的麻煩了,尤其是 structure 裡面又包 structure, 若是學過 C/C++ 的人都知道裡面有個 sizeof(var) 的函數, 但唯獨在 PowerBuilder 裡面就是沒有, 這也讓開發者真的挫折不少,每次都要自己算。 網路上我找了很久,終於找到可以實用的方法。 所以底下實做一個物件 nvo_sizeof (PB10) 來完成這個 PowerBuilder 所缺少的部份: 1.建立使用者物件 nvo_sizeof 2.將 AutoInstantiate 勾選 3.建立 Instance Variables Private: CONSTANT integer SIZE_BOOLEAN  = 1   // Boolean CONSTANT integer SIZE_CHAR  = 1   // Char CONSTANT integer SIZE_INT  = 2   // Signed integer CONSTANT integer SIZE_UINT  = 2   // Unsigned integer CONSTANT integer SIZE_LONG  = 4   // Signed Long CONSTANT integer SIZE_ULONG  = 4   // Unsigned Long CONSTANT integer SIZE_STRING  = 4   // As...

Javascript的Array中文排序

續上一篇 , 資料讀取到 Array 以後,偶爾使用者會需要排序這些列表資料, 當然 javascript array 有 sort 這個方法來排序,只是這個排序, 只比較合適於內容值為數值的排序,對於文字的排序就不怎麼靈光,不好用了。 因此 javascript 提供的另外一種排序方式 就比較合適文字/中文的排序方式: //SORT data function sortDW1(field,kind){     dwset.sort(function(a,b){         if (kind=="A"){             return a[field].localeCompare(b[field])         }else{             return b[field].localeCompare(a[field])         };     }); }; 關於 localeCompare 可以參考系列網頁資料: http://www.w3school.com.cn/js/jsref_localeCompare.asp http://www.southmaster.com/article/pub.php?page=red2.php&id=5408

將SQL讀出的資料暫存到JavaScript的Array以方便利用

有時候網頁需要讀取列表資料的時候, 通常我會把 SQL 執行語法交由另外一個 Coldfusion page 去執行, 然後取得回傳的內容並且儲存起來。 (這個方式當然是使用 ajax 方式,才不會動不動就要重新 RUN 一次版面) 為什麼要這麼做? 因為多數的時候,這個列表內容可能非常多(1~2千筆), 因此,這個列表就需要動用到分頁顯示, 然而,若是以前的作法是,每次點擊不同的分頁,就必須重新呼叫 SQL 查詢, 並只過濾出我需要顯示的範圍,而這種方式的處理,資料庫讀取就變得相當頻繁,

背景讀取 DataWindow 的方法

很多時候,DataWindow 的設計目的在於監視列表的資料,尤其是會自動定期更新的列表。 譬如說,我有一個紀錄狀態的 Table ,裡面紀錄的狀態一直在改變, 因此,我會需要一個 DataWindow 定時的去 Retrieve 這些紀錄資料,並將它顯示到畫面上, 讓管理人員可以一目了然。 當然,你會說這有什麼困難?用一個 DataWindow 加上 Timer 就可以解決啦! 但如果,這些資料多到螢幕容納不下時會發生什麼事? 如果你設定必需2秒更新一次又會怎麼樣? 事實是,當管理人員下拉(Scroll)該 DataWindow 以便檢視下方被遮住的資料時, 由於 Retrieve 的關係,所以畫面又跳回第一筆 Row 啦!!! 管理人員會落入不勝其擾的拉下又跳回、拉下又跳回的無間地獄了。 也許加大 Timer 間隔是個方法,不過對於資料的即時性就大打折扣了, 尤其是特別重要的資料更是如此,例如即時股票的變化..... 所以需要一點小技巧來達成這樣的運作模式,利用下面的程式碼技巧可以避開 DataWindow 的顯示畫面 reflash 動作: DataStore lds_src Long ll_row , ll_rcount Integer li_col , li_ccount //建立一個資料倉儲並使之與資料視窗的來源物件相同 lds_src = Create DataStore lds_src.DataObject = dw_1.DataStore lds_src.SetTransObject(SQLCA) //由資料倉儲來讀取資料 lds_src.Retrieve() ll_rcount = lds_src.RowCount() li_ccount = integer(dw_1.Object.DataWindow.Column.Count) for ll_row = 1 to ll_rcount   for li_col = 1 to li_ccount     //複製資料蓋掉畫面上的資料     dw_1.Object.Data[ll_row , li_col] = lds_src.Object.Data[ll_row...