發表文章

用實例談CSS, jQuery搭配ASP.NET

感謝電子情報刊出我的文章: "用實例談CSS, jQuery搭配ASP.NET"。去年家裡多了一個成員, 小朋友現在滿周歲了, 這一年多來, 我回家都沒有時間做自己的事情。在電腦前面坐一下, 馬上就有一隻小手手要來幫你按東按西; 不然就是會有人問說: "那個重要嗎? 一定要現在做嗎?" 所以這篇文章幾乎都是白天利用工作之餘, 一點一滴慢慢累積而成。 而且在投稿後, 又有做一些修改; 這一點很對不起雜誌社的編輯先生小姐, 真的很謝謝他們。 但是還是有未來得及修改的部份, 就是程式碼十三, 應該如下:               程式碼十三 : 包裹 jQuery 指令碼及 ScriptManager 的類別 public static class js_Utility {     public static void Alert( Page p, string message)     {         message = message.Replace( "\n" , " " );         string js = @"var smb=$('#dialog p span').clone();                     $('#dialog p').remove();                     $('#dialog').append('<p> </...

微軟ODBC driver for oracle的問題

圖片
我知道微軟之前已宣告不再為Oracle資料庫寫driver了, 而且微軟的ODBC driver for oracle最近的版本, 也是2008年了, 距今也有4年多, 可算是很舊的。 不過, 十幾年前我開始使用微軟的ODBC driver for oracle時, 用得還很順手。和PowerBuilder配合起來也沒什麼問題, 可能我用的功能很少很單純! 後來, 碰到一些問題, 同事告訴我有一些SQL語句, 這個driver沒有辦法解析, 他的解決方法是把這個driver換掉, 換成Oracle自家寫的ODBC driver, 問題就解決了! 最近我也碰到同樣的情況: select xxx from p, e, d, s, ed, dp, ( select a, sum(hours) h from ( select a, 0 hours from p wherer y = :year union all select a, hours from pof where b between :d1 and :d2 ) group by a ) v where p.a = e.c and d.a = s.s ... and p.a = v.a 這個SQL語句, 使用微軟的ODBC driver時, 會傳回錯誤訊息ORA-01861:文字與格式字串不符, 但是把ODBC driver換成Oracle自家寫的那支, 卻會很正常的跑完, 並傳回正確的結果。那就換driver不就好了, 還有什麼好討論的呢? 問題就在於, 有些奇奇怪怪的情況下, 一定要用微軟的那支driver, 這個時候就很頭大了。 我試了一下, 發現這個SQL語句的問題在於: 1. 可能是太多層的子查詢, 2. 或者是union 3. 反正太複雜了會造成微軟那支driver出問題。 所以, 我把SQL語句改寫: select xxx from p, e, d. s. ed, dp, ( select a, sum(hours) h from pof where b between :d1 and :d2 group by a ) v where p.a = e.c and d.a = s.s ... and p.a = v.a...

FreeBSD mail指令出現/tmp: write failed, filesystem is full錯誤

在我的一台FreeBSD主機出現如下情況: 當我下mail指令時, 出現如下錯誤訊息: /tmp: write failed, filesystem is full 在一個連線中, 下mail指令後, 開另一個連線, 一直用df指令觀看, 果然看到/tmp一直被吃掉! 本想用加大/tmp的方式(把/tmp ln到更大的分割區)來處理, 但想想現有/tmp已經有500MB了, 還要加多大? 所以覺得應該看看為什麼500MB還不夠mail指令用, 也不用想太多, 其實就是因為我用root帳號, 而預設所有系統訊息都會寄給root, 但我卻從不去清其郵件, 如下: # ls -l /var/mail total 3084208 -rw------- 1 clamav clamav 0 Jul 30 2009 clamav -rw------- 1 cyrus cyrus 0 Jul 30 2009 cyrus -rw------- 1 root wheel 3156647058 Feb 18 11:01 root -rw------- 1 spamd spamd 0 Jul 30 2009 spamd root的信件已經3GB大了, 當然mail程式在讀取的時候就需要超過500GB的空間, 自然會爆掉了。只要把/var/mail/root清掉就好了。 #rm /var/mail/root #touch /var/mail/root

如何為Linux上的Oracle 11g做異地備份

異地備份, 好像很高貴的樣子, 當911發生後, 很多廠商推異地備份方案, 都不便宜。我們自己弄了一個不太花錢的簡單版: 其實就只是把備份的檔案, 利用網路FTP到另一個地點, 只要事後可以由備份檔還原資料即可。 規劃要備份的檔案有三種: 1.archivelog, 2. full backup, 3. export dump files 前兩者合在一起, 可以做幾乎任一個時點的資料還原, dump檔則可以簡單的找出之前資料的樣子, 算是多一個保險, 多一個還原資料的方式。 這三種檔案各寫一個Script來備份: 1. Archivelog #!/bin/sh HOST='ftp-server' USER='user1' PASSWD='pass1' #D1=`date -d '1 day ago' "+%Y_%m_%d"` ftp -n -i $HOST <<END_SCRIPT quote USER $USER quote PASS $PASSWD bin cd archivelog mkdir $1 cd $1 lcd /u03/app/oracle/FRA/PRINCO/archivelog/$1 mput * quit END_SCRIPT exit 0 2. Full Backup #!/bin/sh HOST='ftp-server' USER='user1' PASSWD='pass1' ftp -n -i $HOST <<END_SCRIPT quote USER $USER quote PASS $PASSWD bin cd backupset lcd /u03/app/oracle/FRA/PRINCO/backupset/$1 mput *FULL*.bkp quit END_SCRIPT exit 0 3. Export dump files #!/bin/sh HOST='ftp-server' USER='user1' PASSWD='pass1...

ASP.NET AJAX Update Panel don't work

最近參與一個ASP.NET網站的程式撰寫, 寫了一個用Ajax Tool Kit做ModalPopup的頁面, 為了在其Panel中不產生full postback, 以免讓該ModalPopup出來的Panel跳掉, 所以使用UpdatePanel將button, gridview包起來。在自己的開發環境中, 都運作正常。Check in回server後, 同事整合code後, 測試時, 卻發現modal popup的panel都會跳掉, 看起來是update panel沒有正常運作。 仔細檢查, 確實在我的開發機器上是可以正常運作的。但在同事的機器上, update panel也真的運作不正常。 後來, 同事檢查我的機器上的Web.config檔, 發現他的Web.config多了一行: <xhtmlconformance mode="Legacy"/> 將此行移掉(remark掉)後, 程式運作就正常了。 我們猜想, 應該是因為我們的專案是由之前ASP.NET 1.1的一路升級來的。也許升級程式自動加了這一行以求相容性XD。但是開發機器是最近安裝, 全新的。

薪資媒體申報檔200->250字

今年(2012)1月要各個公司要為每個員工申報去年的薪資所得, 因為過年的關係, 好像可以延到2月。不過, 今年的中英文媒體申報檔格式有改動, 由原來的200字, 改成250字。主要是要容納更多的資料。例如, 名字部份加長了。 可是我們這些公司的系統, 並沒有這些需要, 反而是要因應這些變動, 而要改寫系統產出的文字檔格式。如果我們有10個系統, 那就要改10支程式。想想, 有點笨; 所以, 最後只寫了一支程式, 用來將原本200字的文字檔, 改成250字文字檔格式。那麼原本的10個系統都不用動, 也不用測試。還好, 使用者也能接受, 因為問題不是我們造成的, 要怪, 也只能怪國稅局了。 其實國稅局的申報程式, 應該有兩個功能, 一個可以讀200字的中英文合併檔, 一個可以讀新的250字的中英文合併檔, 那就皆大歡喜。 不過, 在那之前, 使用者急著申報作業, 我們還是把轉檔程式做好先。 我用C#的Windows Form來寫, 因為可以XCOPY部署, 還蠻方便的。程式只有三個輸入: 1. 舊的中英文合併檔檔名(完整路徑)    ----> tbFileName 2. 所得期間(起) (3碼年, 2碼月; 民國年)-----> tbStart 3. 所得期間(迄) (3碼年, 2碼月; 民國年)-----> tbEnd Button按下後的程式: Encoding ec = Encoding.GetEncoding("Big5");             StreamReader rdr = new StreamReader(tbFileName.Text, ec);             StreamWriter wtr = new StreamWriter(tbFileName.Text.ToString() + ".250", false, ec);         ...

Using Apple wireless keyboard under Windows 7

圖片
  我買了一支Apple的無線鍵盤, 很久了, 在Win7下也用了一段時間。當初怎麼安裝的, 現在也有點忘了! 平常用的好好的, 開機後看一下燈號, 很快就可以輸入密碼登入系統了。其實安裝不是很難, 主要是安裝驅動程式, 這只要在BootCamp光碟中找就可了(在網路上看的), 我自己則是在網路上google看到有人從BootCamp光碟中把Apple Wireless Keyboard的驅動單獨包出來, 實在太懶了, 也太不怕死了, 我就用這個來路不明的驅動程式! 運氣不錯, 是可以正常運作的。 Apple這支無線鍵盤是藍牙無線, 而我的桌機沒有藍牙, 就找了一支沒有牌子的Dongle, Win7也抓得到, 就這樣裝了起來。在裝置和印表機(如圖)中, 就可以看到那支藍牙Dongle; 此時再按'新增裝置', 就會出現另一個視窗, 這時候趕快按一下鍵盤的電源鍵, 讓燈號開始閃, 正常的話, 就會看到視窗中出現Apple Wireless Keyboard的圖像, 按下一步, 接著會出現PIN碼配對的畫面, 只要在鍵盤上輸入那個PIN碼, 再按Enter, 就會開始安裝驅動了。   其實我要記錄的不是怎麼在WIN7下安裝Apple的無線鍵盤, 而是用了一段時間後, 也許是電池沒電了, 或者是其他原因, 會發生鍵盤抓不到的情況。我的經驗是有兩種可能:   1. 因為鍵盤和其他的設備也有配對過, 例如iPod Touch; 如果不小心把iPod Touch的藍牙打開, 就會先和它配對, 結果按了半天, 覺得很奇怪, 為什麼電腦沒有回應? 鍵盤有問題嗎? 其實是沒問題, 只是連到別的設備了。   2. 真的和WIN7連不到, 就算把它由'裝置和印表機'中移除, 再用'新增裝置'的方式重抓, 就是偵測不到。每次有這種狀況, 我只要把藍牙Dongle拔下來, 重新插上去; 之後再新增裝置, 就會出現新配對PIN碼的畫面了, 重新在鍵盤上輸入新PIN碼, 配對就好了。也許這顆沒牌的藍牙Dongle, 是有點問題吧!