2009年12月25日 星期五

C# 運用 AssemblyName 叫用 Method範例

最近在試一個東西,首先,要從 XML 讀取檔案,

裡面記錄了每個類別的 AssemblyFullName、是否需要執行此類別,以及它執行時所需要的參數。

接著我需要藉由程式判斷是否叫用此類別。類別的架構設計如下面範例所示:

AbstractShape
Triangle
Rectangle

AbstractShape 中有兩個函數,GetNameGetArea

我要在程式動態載入的時候呼叫 GetArea,語法如下:

2009年12月22日 星期二

NPOI 的儲存格自訂格式

最近在移植舊的寫法轉換成為 NPOI 的元件時,突然被一個問題卡了許久...

那就是 Excel 的儲存格格式。

雖然從 Tony Qu 大大的文章中得知了一些設定的必要條件,

文章中說明了當使用 Excel 內嵌的格式與 Excel 所支援的自訂格式設法,

.Net 存取 Excel 檔案的新方法

最近觀看了在 CodePlex 發表的文章發現原來早在很久之前,詳情請點我

原來 Apache Software Foundation 早就針對 Java 存取 Office 文件深入操作-POI,

POI 這個專案完全支援 Office Open XML standards (OOXML) 與 OLE 2 Compound Document format (OLE2複合文件格式),

也就是說連 OFFICE 2007 也可以用!! 真是造福不少人阿...

不過現在連 .Net 終於可以擺脫原先使用 COM 存取 Excel 速度不彰的問題,那就是藉由 NPOI 來達成!

NPOI 其內容是由 tonyqus 大大移植 POI 來的,

目前 release 的 1.2.1 版是根據 POI 2008/10/19 發佈的 3.2 final 版本實作

相信日後還會持續更新,請各位做好長期抗戰準備....

2009年11月20日 星期五

OUTER JOIN的注意事項

首先先說明一下什麼是OUTER JOIN。


SELECT * FROM A
JOIN B
ON A.ID = B.ID


上例是典型的 INNER JOIN,其意思為將 A 資料表 與 B 資料表 其 ID 欄位資料相等的結果列出。

OUTER JOIN 則是當我們有某些資料不僅是要 show 出兩個資料表相等的結果,

可能有一方以上的資料需要全部顯示,即使另一方沒有該筆資料的情況下,

就要使用 OUTER JOIN,沒有資料的另一方會顯示為NULL。

2009年11月15日 星期日

SQL 查詢時的差異

好一段時間沒有發表新的內容了!

最近在撰寫程式時,越來越覺得SQL語法的重要性。

所以查詢了一下JOIN的寫法,發現 Garadin 大大所說明的內容實在很有用,

因此就把它記下來,以便日後快速查閱。詳情請點我

首先就來看一下下面兩句 SQL 語法有何差異吧!


SELECT A.*
FROM A LEFT JOIN B ON A.ID = B.ID
WHERE B.ID = 4



SELECT A.*
FROM A LEFT JOIN B ON A.ID = B.ID AND B.ID = 4


原先乍看之下,覺得兩者其實沒什麼不同!後來發現我錯了..

以第一句來說,其執行步驟是先做 LEFT JOIN 後,針對 B.ID = 4 的條件做過濾

而第二句則是針對 A 與 B 資料表做 LEFT JOIN 的同時,

當 B.ID = 4 的情況下,列出所有 A 資料表與 B.ID = 4 做 LEFT JOIN 的所有結果!

此兩者的差異可說非常大,雖然查詢的結果有可能一樣,但是其觀念差異頗大,因此特別紀錄下來.

2009年10月23日 星期五

.Net Framework 出現的0x8007007E 問題排解

最近在幫客戶安裝系統的時候, 發生了一個很詭異的問題-「找不到指定的模組」

在此先說明一下系統的環境:
OS: Windows 2003 Server R2 SP2 Standard Ed. x64
Software: Office 2007、Visual Studio 2008 Profession Edition、.Net Framework 3.5

原先看到找不到指定的模組是因為 assembly 沒有辦法載入,所以找了一下關於.Net Framework dll載入機制的文章
以為只要將此次需要使用的 third party component 新增到GAC就可以,
但是結果還是一樣...囧

這個時候真的沒啥頭緒了!後來又再次針對 「0x8007007E」這個關鍵字查詢,
找到了一篇有用的文章,詳閱點我

這篇文章說明了系統環境因為第三方元件有使用到VC++,但是沒有辦法載入它的vc++的dll,
所以找了一下檔案相依性的問題,發現了一個好用的工具-Dependency Walker
這個工具在點選了第三元件之後,果然將找不到的模組一一列出。
最後這個謎題就此解開了....

2009年6月3日 星期三

資料庫的文字型態差異

以前都是習慣使用 MySQL,因此接觸 SQL Server 的時間不算長,

可是卻常常分不清 varchar 、char 與開頭多了一個 n 在的差異在哪?

雖然之前有看過不同之處,但是常常忘記...所以決定寫一篇把這件事記起來。

2009年5月22日 星期五

抽象化的好處

最近拜讀「深入淺出-設計模式」一書後,常常很有感觸,

對於物件導向程式設計的觀念懂得還是太短淺了!

以前寫程式時很少考慮程式的擴充性與元件和元件的耦合力問題,常常會有牽一髮動全身的感覺!囧...

2009年5月20日 星期三

JSLint建議使用[]取代new Array()的原因

最近想要查詢一下 Javascript 的語句寫法,查看一下一些平常我沒有接觸過的內容。


不經意地發現了 JSLint 這個網站,它有一項線上檢驗語法寫的好壞的功能,有興趣的朋友可以試試看,


結果是....我被踐踏的體無完膚啊~~~跟標準還有一段差距!囧


雖然寫出來的程式能夠正確執行,但是卻不是使用標準寫法,這讓我有點對自己生氣。


2009年5月13日 星期三

網頁的文件定義

最近客戶常常反應網頁的排版有問題...原來是微軟已經把 IE 8 設為更新的項目之一!!! 囧

剛好公司都有訂購 iThome 的雜誌,翻了一下才知道 IE 8 與其之前版本的差異頗大....

根據 iThome 393期的報導指出,IE 8 遵循國際網頁標準,那...也就是說之前的版本(IE 7、IE 6)都不符合,

才會導致網頁設計師常常為了 FF 與 IE 兩套瀏覽器需要各自撰寫。囧

雖然微軟有針對邁向標準化提出向下相容的作法,但是實際上,使用後發現,原本在IE 7與IE 6能正常顯示的,

使用IE 8 的相容性檢視卻還是會出問題,也證明了它的相容性檢視並不是直接用IE 7的kernel來剖析。

2009年5月9日 星期六

Google Map的註標連結地址

最近突然好奇 Google Map 要怎麼能夠查找地址,所以就翻了一下他的官方文件

發現主要查找地址的功能來自於 GClientGeocoder 這個類別,它提供我們取得經緯度的位置(getLatLng) ,
以及運用經緯度或是地址抓取它的相關資訊(getLocations),實際操作內容請點我

2009年5月5日 星期二

序列化(Serialization)

其實看到這個詞已經很久了,但是常常覺得似懂非懂...

今天總算找了一點時間了解這個序列化有何作用。

其實它主要的作用就是為了讓程式保留物件的狀態傳送至目的端,而目的端能夠了解傳送來的物件是什麼。

這對於 OO 來說是一件很重要的事,畢竟,我們自己如果還要花費大量的力氣在傳遞資料以及轉換資料實在是太囧了!

2009年3月31日 星期二

IE與FF排版的差異

只要是常常寫網頁的人經常會發現有些頁面在 IE 可以正常瀏覽但是在 FF 底下卻會有偏移的情況。

會發生這個原因其實不是 FF 的錯,而是大部份台灣的網頁設計師都以 IE 為主軸,

因此常常只要在IE下能夠看到正確的內容就好。囧...

最近在做下拉式選單的時候,為了要讓 IE 與 FF 皆能相容的情況下,卻看到兩者編排時有些許不同,

查找了一下資料發現兩者在區塊的呈現方式會有相差 2 pixel 的誤差詳細資料請點我

2009年3月29日 星期日

SQL查詢時的執行順序

前陣子公司常常為了資料庫煩惱不已,因為查詢的時間實在是太久了!
就好比開個網頁要等個幾十秒難以讓人忍受。

而會發生這個問題即來自於 table 的 join 效率不彰,大家都知道當兩個 TABLE(A、B) 要 JOIN 時,
其 JOIN 的總數量是 A的總筆數 乘以 B的總筆數
當 JOIN 時如果兩個 TABLE 皆以數千萬筆資料來擷取所需的資料是多麼可怕的一件事。

2009年3月19日 星期四

IE/FF瀏覽器偵測onMouseDown事件的差異

最近實作踩地雷時,由於踩地雷有一個功能是九宮格中如果所有的炸彈都猜到了,

就可以滑鼠左右鍵同時按下把周圍的格子都打開,沒想到當我用onMousedown偵測時卻發現,

這個event可以偵測到點擊的按鍵是左鍵、右鍵還是滾輪,但是在IE與FF下卻會觸發不同次數。

實際結果大家可以測試下列範例即可得知。

2009年3月17日 星期二

透過PHP產出EXCEL

相信有許多人都曾經需要產EXCEL的檔案,包括我也不例外。

以前曾經試著自己用COM連結EXCEL,許多程式語言也有提供此方法連接,

然而卻發現這個方法並沒有想像中好用,主因來自於SERVER與EXCEL之間的溝通非常的耗時,

導致效能不彰,所以找了一下相關的文獻是否有好的方法能夠產出,

最後找到Creating excel files through PHP這篇文章,

提到其實可以運用HEADER傳送MIME為EXCEL格式並且設定其為附加檔案,即會出現一個下載視窗。

而此方法是運用EXCEL剖析HTML表格以得到最終的結果,因此當轉出前需確認轉出的內容已為表格形式。

2009年3月13日 星期五

踩地雷的概念

這次在實作踩地雷的時候,其實遇到了許多問題需要克服,

哈~~其實也算是我對網頁的語法還不夠熟悉吧!

原本想說在自己的電腦能夠正常運作的script,直接在我的blog開一個page放上來應該就能正常運作了!

沒想到卻遇到了天大的麻煩,後來查找了一下,終於知道我用的css語法,

如果是絕對定位的話,一定要在width、height、top和left後面加上pixel。

但是如果這些是用變數代入的時候要怎麼寫呢?答案就是x + 'px'如此而已...卻苦惱了我一兩個小時!暈...

然而我為什麼要寫踩地雷呢?哈~~因為我以前非常喜歡玩,而且以前沒有用到一些資料結構的觀念。

本次實作的內容完全運用HTML DOM以javascript取得節點來完成,而不是使用document.write或是innerHTML。

2009年3月10日 星期二

.Net 1.1 Treeview的checkbox如何影響子節點

最近客戶在瀏覽某個樹狀結構表示時反映其在點選核取方塊後,它所有的子階層要跟著此核取方塊更動。

http://www.w3.org/TR/NOTE-HTMLComponents

2009年3月5日 星期四

反矩陣(inverse matrix)運算

在介紹反矩陣運算之前,需要先知道矩陣的加減乘法是怎麼運作,才有辦法理解反矩陣的運算規則。

並不是每一個矩陣都會有反逆陣,如果有反矩陣則稱此矩陣是可逆的(invertible)或是非奇異的(nonsingular),反之則稱之奇異的(singular)。

由於矩陣只有加減乘法,並沒有除法運算,所以我們如果需要計算兩矩陣相除時,

需先將除數的矩陣轉換為逆矩陣再做相乘運算即可得到同樣的結果。


由於自己怕忘記實作的反矩陣到底是怎麼實作的,以及所實作的方法又是什麼?因此在這邊加以說明。

反矩陣的算法有很多種(高斯消去法、伴隨矩陣/行列式(adj(A)/|A|).....等),而我所用的則是「高斯消去法」,主要就是運用單位矩陣 In,來達成目的。

底下列出實作的程式碼內容,由於本實作沒有運用分數計算的觀念,因此會有些許小數點誤差,但是其觀念並無錯誤。

2009年2月28日 星期六

Deprecated的用途

這邊我參考JAVA所寫的文件說明,來解釋為何需要使用這個關鍵字,請點我

主要會用到這個的原因即是來自於我們已經不再建議使用這個類別、方法或是屬性,

通常會發生的原因是以前所考慮的範圍現在已經無法滿足現況,可能需要更多的資訊或是更正確的內容

可能使用的原因為:

  • 舊的元件不安全、有bug或是條件不足

  • 未來將不再有此元件

  • 用了錯的方法


2009年2月27日 星期五

ComponentArt如何編輯Grid後選取Checkbox

最近在公司實作ComponentArt Grid時,由於資料是可以編輯,

並且Grid中的checkbox要能夠隨著編輯的內容能夠選取起來,老實說,這的確是個艱難的任務。

大家都知道,文件如果不足,範例又不夠,要實作時往往事倍功半,

並且 Javascript 要除錯時又特別的困難,當某個物件不是自己所寫的,

要知道這個物件所擁有的屬性有哪些是一件非常麻煩的事,

好在最近在 Mozilla Developer Center 找到一個非常有用的function能夠幫助我們了解物件的屬性,

詳情可以查看 Displaying Show Event properties 這個example,或是點我下載

2009年2月23日 星期一

小型計數器

今天用 JavaScript 在實作計數器(Timer.js)時碰到了許多問題,
主因來自於兩個:

  1. Internet Explore(IE)與FireFox(FF)的語法不一

  2. javascript並非物件導向


而第二個問題倒是比較困惱著我,好在這些問題也曾經有人遇過得以解救
主要參考的文獻都是馮旭平大大(哈~~請見諒我直呼名諱)的文章。
因為我打算用 Javascript 撰寫類別的概念,但是此語言並非Class-Based,
而是Prototype-Based,因此寫起來跟以往在寫C#與JAVA時格外不同。

2009年2月21日 星期六

身份證驗證機制

第一碼英文字代表該組號碼配賦時所屬的縣市﹝非出生地﹞


第二碼數字1為男生2為女生


第3碼至第10碼為任意一串數字,


但含英文字之全部號碼可用公式加以核算該組號碼是否正確,


例如R123456783,R=25,


檢查公式是:2+5*9+1*8+2*7+3*6+4*5+5*4+6*3+7*2+8*1=167,


其167再除以10求餘數結果。


其餘數結果的個位數為7以10減去得3(檢查碼)。


其餘數結果的個位數為0時,則得0(檢查碼)。


A=10 B=11 C=12 D=13 E=14 F=15 G=16 H=17 J=18 K=19 L=20 M=21 N=22


P=23 Q=24 R=25 S=26 T=27 U=28 V=29 W=30 X=31 Y=32 Z=33 I=34 O=35



2009年2月10日 星期二

Google Map Sample

這篇所要實作的內容是Google Map,首先需要至Google Map API首頁
然後點選右方的 "Sign Up for the Google Maps API"

以取得屬於自己網域的API key,取得以後就可以開始實作你自己的專屬地圖了。
假設我已經知道自己家的座標位置為<25.029213, 121.500316>,
我想要將他初始的時候顯示在圖片的正中央,我需要new GLatLng(25.029213, 121.500316)
底下我還多設置了三個Control元件,
分別是GLargeMapControlGMapTypeControlGScaleControl
並且new一個訊息視窗(openInfoWindow)顯示一個註解文字

程式命名規則

古語有云,名不正則言不順。

如果用在程式撰寫上,

命名規則不一,亦或沒有規則可循,那將造成後來維護時無法找出原先寫法的用意。

在此列出命名的規則,首先需先說明兩種基本的方式:

Pascal Case:


每個單字的第一個字母大寫。EX: NormalDistribution


Camel Case:


除了第一個單字皆為小寫,其餘單字的第一個字母大寫。EX: normalDistribution


2009年2月5日 星期四

開張大吉

在畢業以後,終於有一個屬於自己完全控制的環境,而且是免費的....

在這個免費空間我可以使用 php, MySQL, Smarty, YUI, 和這套Blog軟體WordPress。

以後在這邊將會以技術性的文章為主,探討自己有興趣的主題與研究。

希望各位大大瀏覽到此站的時候能夠不吝惜的指教,在此先謝謝囉