2010/07/30

[C#] 讀取圖檔中的 GPS 基本資訊

由於現在很多 Google Map 的應用, 主要用到圖片的 GPS 資訊不外乎緯度, 經度, 高度, 版本.
所以本篇僅說明如何利用 .Net 本身的 Library 從圖檔中取出這些資訊.
不過, 若圖檔本身未包裝這些資訊進去, 程式本身亦不可能讀到.
在說明如何取得這些資訊前, 請記得參考以下資訊:

[C#] 在 .Net 程式中呼叫 Java 的 Web Service

先前測過 Java 中呼叫 .Net 的 Web Service (here), 現在反過來, 在.Net 中呼叫 Java 的 Web Service.
環境說明:
  • Java 開發工具: Netbeans 6.5.1
  • Java Web Server: Tomcat 6.0.18
  • Java Web Service 套件: JAX-WS 2.1

[ASP.Net] Regular Expression 的密碼驗證

其實用 Regular Expression 做密碼複雜度的驗證已不是什麼創舉, 用 google 輸入關鍵字 "regular expression password" 就會有一堆參考.
由於 (?=) 和 (?!) 的用法之前有在 這篇文章 大略提過, 所以此篇就當做是為了避免自己忘掉, 且做為衍生應用寫的吧.

[Other] ADO Stream 的轉碼說明

一般在使用 AJAX 時, 會遇到回傳資料的中文亂碼問題.
不過, 因為網頁瀏覽器的安全性設定問題, 所以使用 AJAX 呼叫的頁面都是在同網域頁面.
也就是說, 呼叫的頁面是在開發者能掌控的範圍 (包括可修改).
因此, 許多網頁對於 AJAX 所呼叫的頁面傳回亂碼的解答, 就會是建議開發者去修改被呼叫頁面的 charset.

[ASP.Net] Session.IsNewSession 與 Session.SessionID

在微軟的 MSDN 中有 Asp.Net 的 Session 說明:
http://msdn.microsoft.com/zh-tw/library/system.web.sessionstate.ihttpsessionstate_members(VS.80).aspx
其中 SessionID 與 IsNewSessiont 的說明如下:
  • IsNewSession: 取得值, 指出工作階段是否以目前要求建立.
  • SessionID: 取得工作階段的唯一工作階段識別項.

2010/07/29

[SQL Server] 建立 SQL Server Express 的定期自動備份

在 SQL Server 的 Express 版本中, 沒有自動備份的功能可使用.
一般備份就分成兩種方式:
  1. 透過 Management Studio Express 進行手動備份.
  2. 自行撰寫 T-SQL 的 Script, 或是寫程式去呼叫 T-SQL 的備份指令, 進行資料庫備份.

[ASP] 設計 UTF-8 網頁的注意事項

過去很多人在撰寫中文網頁時, 常以 Big5 編碼做為顯示和資料儲存的編碼方式.
不過, Big5 能顯示的字集畢竟沒 UTF-8 多. 所以, 若要讓網頁可顯示更多的字(簡體中文, 日文等), UTF-8 編碼是不錯的選擇.
以下分別就資料庫, 前端網頁, 後端程式三個部分, 說明若要讓網頁顯示 UTF-8 編碼, 有哪些地方需要調整.

[Other] 讓 IE7 的 RSS 按鈕 On

有些人會以為 IE7 上面那個看起來像是 RSS 訂閱的按鈕, 是瀏覽器在閱讀 RSS 資料時會開啟, 然後讓使用者按下那個按鈕進行訂閱.
不過實際上, 那個按鈕是在 HTML 網頁 <head> 中有一個特定的 <link> 時才會開啟.
參考如下:

2010/07/28

[C# & Java] .Net 加密 (DESCryptoServiceProvider) VS. Java 解密

前言: 這邊只列出我工作上有遇到的情況, 並未對所有的加解密做很完整的舉例/說明.
        不過如果有人能提供其他情況, 我是可以試著去解看看.
情境: 在 .Net 中, 利用 DESCryptoServiceProvider 進行加密. 加密的 Mode 為 ECB, Padding 為 None, Zeros 與 PKCS7.

[c#] Regular Expression 抓取/取代特定資料的說明

在網路上常見到一些想用 Regular Expression 取資料的問題.
有些解答看起來很複雜, 實際上只要一個一個 pattern 拆解, 就不難發現道理其實很簡單.
以下的例子將視情況進行補充:

[C#] 利用 Regex 查詢 Html/Xml 標籤中的屬性值

作用: 取得 HTML 或 XML 內容中, 某個標籤下所指定的屬性值.
輸入參數:
  • strHtml(string): HTML 或 XML 的內容.
  • strTagName(string): 標籤名.
  • strAttributeName(string): 屬性名.

[ASP.Net] 利用 RegularExpressionValidator 排除特定字串

在常被用來檢查欄位的驗證控制項中, RegularExpressionValidator 算是最常被用到的.
不過還是不要為了用 RegularExpressionValidator 而用, 以免為了兜出想要的 ValidationExpression 而傷透腦筋. 舉例來說, 設計一個只允許數字的輸入欄, 我們可以用以下兩種做法:

[ASP.NET] 在 html 中加入遠端網頁的內容

  1. 使用 <iframe>: 這種方式大概是最常被使用到的.
    Sample:
    <iframe NAME="outer_frame" width="100%" height="100%" 
      frameborder="0" src="http://www.w3schools.com/" ></iframe>
    Note: iframe 的 width 或 height 設定成 100% 時, 並不會依 iframe 網頁內容而造成無捲軸的現象. 若要透過 javascript 去依 iframe 的內容調整 iframe 的 width 或 height, 也只有同 iframe 所嵌頁面與外部網頁同 domain 的情況下可行, 不同 domain 會因 access deny (存取被拒) 而無法完成此修改 width 或 height 的動作.

[C#] 使用 Regex 將 0123456789 轉成中文

有時在處理數字的顯示時, 會有一種需求是希望將 "第123期" 轉為 "第一二三期", 或是將其轉為 "第壹貳參期".
像這種一對一的轉換, 有一種寫法如下:

[Java] 在 Java 程式中呼叫 .Net 的 Web Service

開發工具:
  • Java: Netbeans6.5 (plugins: Web Services)
  • dotNet: Microsoft Visual Studio 2008
dotNet 部分 (Web Service Server) :
  1. 透過 VS2008 在網站 (Ex: MyTest) 中建立一個名為 HelloWs.asmx 的 Web 服務.
    HelloWs.cs 的程式碼如下:

[C#] 利用 Regex 或 XPath 查詢 xmlns, 並設定 XmlNamespaceManager

本文所使用的 XML 檔案 (ns.xml) 如下:
<?xml version="1.0" encoding="utf-8" ?>
<root>
  <h:table xmlns:h=http://www.w3.org/TR/html4/>
    <h:tr>
      <h:td>Apples</h:td>
      <h:td>Bananas</h:td>
    </h:tr>
  </h:table>
  <f:table xmlns:f="http://www.w3schools.com/furniture">
    <f:name>African Coffee Table</f:name>
    <f:width>80</f:width>
    <f:length>120</f:length>
  </f:table>
  <table>
    <name>Microsoft Visual C# 2008 Step by Step</name>
    <author>John Sharp</author>
  </table>
</root>

[ASP.NET] XML 與 XSL 的操作

users.xml 的內容如下:
<?xmlversion="1.0"encoding="utf-8" ?>
<root>
  <user>
    <account>John</account>
    <name>王小明</name>
  </user>
  <user>
    <account>Mary</account>
    <name>吳阿美</name>
  </user>
  <user>
    <account>David</account>
    <name>徐丁丁</name>
  </user>
</root>

[C#] 利用 XPath 的 translate 函式查詢資料

XPath 中有一個函式: translate(string1,string2,string3)
w3schools 網站對其函式的說明: Converts string1 by replacing the characters in string2 with the characters in string3.
利用這個函式, 我們可以進行不區分大小寫的查詢 (如下):

[Other] 好用的 XCOPY

這邊舉例兩個有關 XCOPY 指令的應用:
  • 匯出GAC中的組件:
    1. 切換到 Windows 的 assembly 目錄: cd C:\WINDOWS\assembly
    2. 將 GAC 目錄中的檔案複製到 C:\Temp: XCOPY /S .\GAC C:\Temp
  • 匯出某時間點後異動的檔案: 將 C:\Test 目錄中, 2008-11-20 以後異動的檔案 (連同子目錄) 搬移至 C:\Temp 
    XCOPY C:\Test C:\temp /S /D:11-20-2008

[ASP.Net] 廣告輪播的控制項 (without AJAX)

由於最近要在網頁上加入一個廣告輪播的功能, 且 AJAX Toolkit 的 SlideShowExtender 又因為 OutputCache, 未能正常地產生輪播效果, 所以我使用 JavaScript 搭配 UserControl 做了以下的範例.

[Virtual PC] Virtual PC 的 Image 瘦身 (shrink)

網路上已經有很多這部分的教學, 大致整理如下:
  1. 在虛擬作業系統中進行磁碟清理.
  2. 在虛擬作業系統中進行磁碟重組. (這個步驟不要使用 Windows 內建的磁碟重組工具, 因為會導致後續瘦身的功效不彰)
    網路上有很多免費的磁碟工具可以用, 我是使用 Smart Defrag 這套工具(有支援繁體中文), 不過要記得重組的選項要選"重組&優化", 不然也會失去瘦身的效果.

[ASP.NET] 縮減 AJAX 的 axd 內容大小

由於使用 AJAX 時發現網頁因為包含了一些 axd 內容要下載, 所以整個網頁的內容會變得蠻大的.
為了讓 axd 檔的 size 減少, 讓網頁載入的時間縮短, 所以查了一些網路資料並整理如下:

2010/07/27

[C#] 利用 OleDb 讀取 csv 檔

透過 OleDb 的方式讀取 csv 檔常會遇到型別轉換的問題.
以機關 OID 為例, "2.16.886.101.20003" 會被轉成 "2.1688"
若要解決這問題,就要參考微軟提供的這個設定檔的說明 (http://msdn.microsoft.com/en-us/library/ms709353.aspx).

[ASP.Net] 驗證上傳檔案的副檔名

利用 RegularExpressionValidator 進行檢查:

  1. 僅限上傳PDF檔案(pdf):
    ValidationExpression="^.+\.((p|P)(d|D)(f|F))$"
  2. 僅限上傳WORD檔案(doc,docx):
    ValidationExpression="^.+\.((d|D)(o|O)(c|C))(x|X)?$"
  3. 僅限上傳圖檔(gif,jpg,jpeg,png):
    ValidationExpression =
    "^.+\.(((g|G)(i|I)(f|F))|((j|J)(p|P)(e|E)?(g|G))|((p|P)(n|N)(g|G)))$"

因為 RegularExpressionValidator 控制項, 沒有設定 Regular Expression case-insensitive 的地方, 所以只好用 (e|E) 的方式進行.
雖然看起來有點醜, 不過可以用就好.

[SQL Server 2005] 在查詢中建立小計的資料列並排序

在SQL的應用中, 常見到要查出數量與小計的問題.
以下提供一個以 SQL Server 2005 的 ROW_NUMBER() 與 RANK() , 在一次的查詢中將資料查出數量與小計的方式.
不過還是建議在程式中進行這些作業, 以避免當資料量大時, 查詢效能或擴充性不好的問題.

[CSS] 相容 IE 與 FireFox 的 CSS 寫法

IE 與 FireFox (FF) 在 CSS 的屬性值上有著許多差異, 例如: center與-moz-center
以下是整理網路上的討論並測試出的兩個做法:

[C#] Regular Expression 的 Named Group

概念:
使用 (?<GroupName>Regular Expression) 將符合 Regular Expression 的字串放進群組, 並以 GroupName 做索引值來取用.
以下範例來自於 [藍色小鋪]
範例1:
將 [QryGuideIDList:0001+2=g1+n1+g2+n2+g3+n3] 拆成
PGID: 0001
ListSize: 2
GuideID: g1,g2,g3
GuideName: n1,n2,n3