發表文章

目前顯示的是 2011的文章

GPS座標度分秒轉換

圖片
之前使用GPS接收器接收到的經緯度格式都是【度度.分分秒秒秒】,但是手機上卻不是這樣,手機上卻是直接發送出GPS的訊號卻是轉換過的地圖格式,這點害我吃了大虧,因此在這裡分享一下度分秒的轉換方式。 經緯度 → 度分秒(假設有個緯度是23.12345) 度數 : 整數的部分23 這個就是轉換後的度數(°) 分數 : 小數的部分0.12345 * 60 = 7.407 ,取整數的部分,因此 7(')就是轉換後的分數 秒數 : 分數計算後的小數部分,也就是0.407 * 60 = 24.42,因此24.42(")就是轉換後的秒數 因此23.12345轉換後就是23° 7' 24.42" 度分秒 → 經緯度(假設有個度數是23° 7' 24.42") 轉換公式 : x度 y分 z秒 = x + y/60 + z/3600 度 (23) + (7/60) + (24.42/3600) = 23 + 0.11666.... + 0.00678333.... = 23.123443....

GoogleMap 讀取kml檔

圖片
前一陣子網路上有一個網友寫信給我要我幫忙調整一個問題我才發現GoogleMap API本身有提供直接讀取kml檔的類別。原本我已為kml檔只能匯入GoogleEarth或者匯入Google地圖裡面,看來我不了解的是還真不少><,下面我就簡單的介紹一下GoogleMap所提供的API操作。 GoogleMap 本身有提供一個專門讀取kml檔的 KmlLayer物件,因此只要有一個正確的kml檔,就可以直接載入所需的資訊。

C#讀取DBF檔

圖片
最近有玩到一個比較陌生的資料庫,副檔名是.dbf檔,網路查一下是Visual FoxPro的資料庫格是,分享一下如何使用C#來讀取,使用C#讀取dbf檔其實一點也不難,查了一下文件大家都比較推薦使用OLE DB,首先需要下載安裝 Microsoft OLE DB Provider for Visual FoxPro 9.0 ,接下來就可以直接使用C#來操作OLE DB。 //Data Source 為資料庫資料夾的路徑 string strConnection = @"Provider=vfpoledb;Data Source=c:\;Collating Sequence=machine;"; OleDbConnection oleCon = new OleDbConnection(); oleCon.ConnectionString = strConnection; OleDbCommand oleCom = new OleDbCommand(); oleCom.Connection = oleCon; DataTable myTable = new DataTable(); //xxx.dbf為資料庫檔案名稱 string strSql = "select * from [xxxx.dbf]"; oleCom.CommandText = strSql; OleDbDataAdapter oleDap = new OleDbDataAdapter(); oleDap.SelectCommand = oleCom; oleDap.Fill(myTable); 操作畫面如下 本文附件 :  VFPOLEDBSetup.msi  : Visual FoxPro9.0 ReadDBF.rar : Sample Code (需要密碼請留言給我) bar.DBF : 測試資料庫

在Xcode中使用自己定義的viewController

圖片
我照著網路上的範例單純的拉一個viewController沒想到這一個簡單的動作竟然搞了我好久,在這裡我就先寫下來免得下次我用忘記。 1. 首先Create一個專案命名為HaicomViewer,如下圖所示原本Create出來的專案只有下圖紅框的基本檔案,這個也是一開始預設的視窗,為了方便程式管理,我調整了一下資料的分類,所以看起來可能會有些不同。

在新的執行緒(Thread)中執行 Toast訊息提示

在Android當中若要在新的執行緒當中使用TOAST都會出現以下的錯誤訊【java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()】。若要可以正常執行請參閱以下解決方式。

Android 2.3 使用Facebook API

圖片
這幾天為了寫一個在Android 手機上調用Facebook API ,沒想到一個看起來很簡單的動作,卻整整折磨我三天的時間。在這裡大概說明一下是什麼原因。 話說我寫了一個GoogleMap搭配Facebook打卡的程式,在模擬器的環境都跑的好好的,於是我就很興奮把程式裝到我的手機上面,結果出現了一個錯誤訊息。

C++寄信

圖片
本文我要記錄一下在C++中,使用 CHILKAT 所提供的函式來寄送電子郵件。 首先必須先到官網下載 C/C++ Libraries ,並且解壓縮下載的檔案,可以看到include、libs兩個資料夾,再來就是開啟我們建立好的Win32主控台專案,在本範例當中使用的Visual Studio 2010來操作。

Server2008 上安裝MySQL服務無法啟用

這幾天在VM新建一台2008的Server並安裝MySQL,但卻發生了服務無法啟動的問題,網路上的解法千奇百怪,說什麼移除,清掉註冊檔等等怪方法,可是那些解法似乎是發生在安裝完又移除在安裝才會發生的,我是第一次安裝,況且我嘗試了他們交的方法都無效,最後我發現了一件事。 安裝完MySQL後預設的路徑是在【C:\Program Files\MySQL\MySQL Server 5.5】底下,一開始我一有錯誤就開始調整這裡的my.ini,但是我發現似乎都不鳥我,就連錯誤的紀錄檔(data\Server.err)也都沒有產生,就開始覺得好像不太對。 Google了一下終於發現MySQL安裝完雖然會在預設路徑產生一堆.ini檔,但是真正執行的地方似乎是在【C:\Documents and Settings\All Users\Application Data\MySQL\MySQL Server 5.1】,於是調整了這裡的組態檔,Yes終於可以正常Work了。

Silverlight初探(四) - DataGrid資料繫結篇

圖片
前面一篇文章有大概說明如何使用WCF來傳遞資料,可是沒有明確的說明如何使用,這篇文章就是要說明如何真正的在Silverlight上運用WCF來繫結資料。 首先我們要先在Silverlight Page上拉一個DataGrid,在Grid當中放了兩個Template 【DataGridTemplateColumn.CellEditingTemplate】、【DataGridTemplateColumn.CellTemplate】,這兩個Template的目的是為了讓在編輯模式和顯示模式呈現不同的元件,其中單擊資料欄位會出現CheckBox的編輯模式。

Silverlight初探(三) - 使用WCF存取資料庫篇

圖片
本文要示範如何在Silverlight當中使用WCF,何謂WCF,簡單的說就是WebService,詳細說明請參閱本文下方連結,首先我先簡單的示範如何寫一個正常的WCF,我根據了Steven的心得筆記寫出了下面語法的WCF。

Silverlight初探(二) - 表格設定篇

本文要來說明如何使用Silverlight來畫類似HTML的Table,先說一個簡單的HTML表格如下表        

Silverlight初探(一) - Style設定篇

圖片
Silverlight這個技術剛出來的時候,小弟我其實就想學了,但是一直拖到現在才開始訴諸行動,為什麼拖了這麼久,不是我懶惰,只是Silverlight1.0的時候我就有稍微喵了一下書籍,那時候書本一直提到Silverlight不是Flash,光是這點我就有點心動了,因為我本身也有想要學Flash這塊,但是本人美工不強,而且一直走C#這塊實在沒有餘力再走ActionScript了,於是就想說乾脆來學Silverlight好了,但是書本一翻開,shit.... 為什麼不是用C# ~"~ ,用的還是JavaScript,而且看來看去怎們感覺好像Flash,似乎跟書本說的不太一樣,要是要重學我乾脆學ActionScript,所以就放棄了。

解決使用BloggerAds廣告拖垮部落格載入時間的問題

最近我的網誌加入的BloggerAds的廣告,但是卻發現我的網頁載入速度變的異常的慢,本來我以為大概是我的Server的關係,但是久了情況似乎沒有改善,於是我就先把我的廣告拿掉,結果速度就變快了,於是我只好將廣告的那一段JavaScript獨立出來在另外一個html檔來執行,相信網路上大家也可以找到很多篇相關的文章,沒錯就是用iframe,但是我要稍為教大家用一下跟網路上教的不太一樣的方法。 在網路上的文章大都教寫死高度的方式,但本人認為此方法不太妥,萬一廣告的高度如果調大或調小,又要進來改一次程式,這實在是太不符合經濟效益了,我教大家另外一種方法,也是先前兩篇文章有說到的方式請參閱【 IFrame在非IE瀏覽器指定Src及動態改變高度的問題 】和【 iframe頁面呼叫主視窗的JavaScript Method 】,廢話不多說請大家自行參考下面的語法。

解決Visual Stduio2010開發SilverLight 4 Debug模式出現問題

圖片
今天想要開始嘗試玩Silverlight的時候,跟著 阿源哥哥 的部落格架了一個SiliverLight網站,直接按下Debug模式,結果馬上跳出【Unable to start Debugging.The SilverLight Developer Runtime Not Installed. Please Install a matching version】的錯誤訊息。如下圖所示。

JSP開發的一些基礎問題

最近剛開始接觸JSP,本文內容並不是要教大家寫JSP,只是單純的紀錄我遇到的一些小問題。 1. 在Tomcat中建立類似IIS中的虛擬目錄。 使用方式 : Create一個資料夾【Studio】,一般來說只要直接將資料夾放在Tomcat安裝路徑下的webapps中就可以正常使用,但是該資料夾要是在其它地方就無法使用。如:http://lawrence.serveblog.net/Studio 錯誤訊息描述 : 找不到該檔案HTTP Status 404 解決辦法 : 修改{$Tomcat}\conf\server.xml這支檔案({$Tomcat}為安裝路徑),新增以下語法。 < Host name =" localhost " appBase =" webapps " unpackWARs =" true " autoDeploy =" true " xmlValidation =" false " xmlNamespaceAware =" false " >      < Context path =" /studio " reloadable =" true " docBase =" X:\JSP\Studio " workDir =" X:\JSP\Studio\work " /> </ Host >

Android手機開發更換自己喜歡的字型

圖片
前幾天自己在寫一個Android手機版大樂透程式的時候突然想到,之前在寫Windows Mobile的時候可以更換字型,但是在Android找了老半天似乎沒有發現相同設定的屬性,查了一下Android Developer找到了 setTypeFace 這個Method,自己try了一下發現OK可正常使用,在下文當中就教大家如何更換Android手機程式的字型。

Android開發直接使用實體手機進行測試

圖片
最近老婆大人通融給我買了一支HTC的手機,手機買來不進行開發實在是太可惜了,於是在網路上看了一堆文件後就開始進行開發,一開始我都是使用模擬器進行開發,模擬器開發固然方便,但是還是有一些功能無法實際的測試(感測器等等...)。都要透過編譯完的apk檔傳到手機、安裝,最後才可以測試,但是這樣實在太麻煩了,這邊提供如果有手機的開發者可以直接透過手機開發的設定方式給大家。

Windows Form中使用GoogleMap

圖片
儘管GoogleMap在Web上的應用已經很廣泛了,甚至現在都已經開始支援Flash了,但是在桌面應用程式的應用還是很少見,這幾天在網路上Google了一下發現網路上有個免費的元件 GMap.NET 可以讓我們很輕鬆的開發GoogleMap的桌面應用程式,GMap.NET不但支援NET,而且還是開放原始碼提供人家下載,在這裡講了這個多的GMap.NET的好處並不是要教大家使用GMap.NET,因為小弟不才,與其要看他們的原始碼(太複雜了,看完我頭髮也白了),不如我自己寫。

程式碼產生器

圖片
寫程式也寫了四五年了,每天這樣下來總覺得好像機器人一樣,寫來寫去都差不多一樣的東西,麻痺到自己都感覺自己跟剛畢業的學生的程度差不了多少,回想當初為什麼會開始寫程式,就是想當駭客,於是就冒著不怕死的危險,跑到中國的黑客教學網下載了一堆東西來研究,當然啦結果就像我想像的一樣駭客沒當成反而成了 害客 ,但是也不是全然沒有收穫,其中一項就是我想要介紹的東西【 程式碼產生器】(這個很白話了,但是我還是解釋一下,就是寫一個程式,這個程式的用途是幫人家寫程式) 。

查詢 LinkServer 自定義Function問題

圖片
使用本機端查詢(A電腦)另外一台DataBase(B電腦)的時候,有兩種方法。 方法一在B電腦開啟遠端連線設定(這裡不解說如何設定,有興趣可參考我先前的 文章 )。 方法二使用LinkServer,但是最近有個Case就是使用方法二的時候發現在讀取B電腦自定義的 Function出現了【 訊息 4122,層級 16,狀態 1,行 1不允許遠端資料表值函數呼叫。 】 的錯 誤訊息,仔細查看了一下問題,可以發現我們在建LinkServer的時候SQL Server只幫我們建立了Table和View(如下圖)。

NET.FrameWork 3.5 WebSite 升級 NET.FrameWork 4.0錯誤問題修正

圖片
在升級網站Framework版本的時候出現了下圖的錯誤訊息, MSDN 上有提供解決方法: 如果在安裝 .NET Framework 4 後啟用 .NET Framework 3.5 WCF HTTP 啟動,則會發生這個錯誤。 若要解決這個問題,請從 Visual Studio 2010 命令提示字元內部執行下列命令列 aspnet_regiis.exe -i -enable

ASP.NET 自訂多語系(不使用IE瀏覽器設定的語系)

一般來講如果使用ASP.NET來架構網站,只需要程式對應的目錄底下的App_LocalResources資料夾內加上一支與AP相同的資源檔就可以實作多國語系了(這裡不解釋如何做,不會的請自己在網路上Google一下應該很多答案)。 但是這樣出來的結果就是,Client端的瀏覽器是哪一國的語系那們NET本身的機制就會使用哪一國的語系。如果客戶有個需求就是每個使用這可已切換到自己的 語系的話那這個方式似乎就失效了,好在ASP.NET本身提供了另外一個機制讓我們可以直接在Global.asax (註1) 裡面直接撰寫一 些語法來改變使用者所看到的語系,詳見以下語法。

SQL函數 ROW_NUMBER

ROW_NUMBER() OVER ( [ <partition_by_clause> ] <order_by_clause> ) 傳回結果集資料分割內某資料列的序號,序號從 1 開始,每個資料分割第一個資料列的序。(說白話一點就是說幫每個查尋回來的資料列給予自動編號) 例如 : select row_number() over (order by fieldname asc) n umber,fieldname from tablename

DataTable進階操作

有些時候我們要進行一些數據的運算很難由SQL語法直接串出來,必須透過迴圈的方式算出有用的數據來使用,而DataTable本身就又提供一些我們平常比較少用的語法,下面我就針對這些方式進行介紹,目前只先使用幾種後來要是我在有用到在繼續補充在本文。

GoogleMap 判斷多個座標位置動態改變Zoom Size

最近有個需求就是一個地圖畫面可以隨意的讓使用者加入多個地標,而且要在第一次載入畫面的同時自動調整地圖大小來將所有地標呈現在可視範圍內。 在網路上找了許多文章,但幾乎(或者我沒找到)都是用GoogleMap API V2來實現,但是此次我試的例子是使用GoogleMap API V3來完成,因此沒辦法適用,在這裡我先說明一下V2的版本如何來完成。 //首先宣告 GLatLngBounds物件 var bounds = new GLatLngBounds(); //跑回圈將所有的座標加入 for(var i = 0; i V3版本,人家講了一大堆,結果都是Copy的根本無法使用,最後來是乖乖的上Google API 找答案比較快,解決方法如下(jQuery使用的是先前自己擴展的方法,這裡不再敘述) //在V3的版本請改用此物件 var bounds = new google.maps.LatLngBounds(); for (var i = 0; i

double型態乘法問題

圖片
前一陣子同事在抓一個程式的Bug的時候發生了一件百思不得其解的問題,double型態在進行兩個變數比較的時候出現了【24.9 != 24.9】的詭異現象。下面法法中可以發現當變數A=24.9; B=8.3*3;這樣出來比較出來竟然出現了false的情況,在將兩變數轉換成字串型態後比較竟然又相等了。有此可見,雙精倍數在儲存變數的時候可能內含了極小的小數,小到在轉換成字串型態的時候無法出現所導致。

JavaScript跨網域讀取資料問題

先前的 文章 中有提到使用jQuery.get('xxx.html',{},function{});可以直接讀取同網域所回傳的資料,如XML...,但是最近有遇到一個Case就是要去讀取Google API 所提供的資料就一直發生問題。網路上有一些文章提到跨域存取要使用其它的方法,個人覺得這樣太麻煩了,於是提供大家另外的方法來使用。

從程式端動態加入多個UserControl

圖片
自己在玩寫一個購物網站的時候,有個需求就是查詢歷史購物清單,原本打算在該查詢畫面使用動態的方式畫出多個GridView,但是真正要寫的時候發現動態產生多個GridView還要從程式多加入GridView的Template等等...,有點麻煩,於是就想說從UC來下手。

ASP.NET 使用 CKEditor和CKFinder

圖片
一兩年前有分享過一篇FCKEditor的HTML編輯器,這幾年都改寫系統所以就比較少用到了,這陣子朋友講到什麼CKEditor,本來想說是少講嗎?還是,結果查了一下發現原來是新版的HTML編輯器。 自己稍微測試加上Google了一下,發現CKEditor搭配CKFinder功能更加強大,抹彩挖(台)特地寫了一個文字編輯器來使用了,結果這麼強大的功能害我不得不放棄我自己的文字編輯器(有點難看如下圖),在這裡不不打算說明功能如何強大,有興趣的人可以自己到 官網 查詢,在本文我只要簡單的敘述一下該怎麼在ASP.NET中使用CKEditor就好。

使用jQuery擴展GoogleMap APIV3

網路上找到的Google Map API 教學大部分都是 V2 之前的版本,但是目前Google Map API 的版本都已經更新到V3 + ,因此在這裡就分享一下自己用jQuery來擴展新版的GoogleMap API 1. 首先必須宣告一個DIV區域用來顯示GoogleMap

IE瀏覽器無法使用jQuery來讀取ASP.NET產生的XML檔

在 上一篇 文章中有提到jQuery可以直接讀取XML檔案,但是如果XML檔的產生是使用ASP.NET Response.Write的方式產生的,還需要另外做點手腳,否則在IE瀏覽器中讀取Tag的時候會有取不到值的問題。解決的方法如下 //這句一定要指定 Response.ContentType = "text/xml"; Response.Expires = 0; Response.Write(" "); Response.Write(" "); Response.Write(" "); Response.End();

網頁AJAX技術,非Micorosft AJAX

在ASP.NET裡面有提供UpdatePanel來達成非同步的JavaScript與XML技術(AJAX),但是直接使用此方式固然方便,但是要是此頁面非常複雜又有多個Events都必須觸發PostBack的話,那麼會使的該頁面的效能極差無比,這時候就是使用XMLHttpRequest來完成的最好時機了。 舉幾個例子來看 1. 生日 → 如果要使用另外一個網頁來驗證回傳星座(當然也可以直接使用JavaScript來完成) 2. 帳號驗證 3. XML格式的資料清單

iframe在非IE瀏覽器指定Src及動態改變高度的問題

在IE瀏覽器內想要改變iframe頁框的Src值,只需要直接指定 iframe.src='XXXX.htm'; ,如此就可以改變連結的路徑,但是其他瀏覽器可就不吃這一套了(至少我試了Firefox,Chrome都是如此)。 1. 在其它瀏覽器內iframe若要指定src有反應,必須要補齊所需要的網頁元素。如 html,head,body ...... 2. 另外若要動態指定iframe的高度IE瀏覽器也與其它瀏覽器有所不同 IE  →  iframe.Document.body.scrollHeight Other →  iframe.contentDocument.body.offsetHeight

iframe頁面呼叫主視窗的JavaScript Method

我們有時候在A畫面嵌入一個IFrame的時候會有一些特殊需求需要IFrame載入的時候主畫面要做某些動作,舉例來說,在我的部落格裡有運用到iframe畫面PostBack後需要動態改變主畫面iframe頁框的高度,因此我就必須先在主畫面定義一個Method來提供iframe畫面呼叫,詳細的說明如下語法( 注意本範例使用jQuery來完成,必須先引入jqery.js )

刪除資料夾(包含裡面的所有檔案)

正常情況下刪除資料夾只需要直接刪除即可,但是要是遇到資料夾目錄底下還有其他檔案的話會發生錯誤,因此必須要另外指定第二個參數true,才不會發生錯誤。 for (int j = 0; j

showModalDialog 子視窗搖控父視窗在IE以外流覽器失效

在IE我們在使用showModalDialog打開一個畫面後,如果要使用子視窗來改變父視窗的值只需要使用 window.dialogArguments.document.getElementById("父視窗物件ID").value = "想改變的值"; 但是我在FireFox使用此方法發現無效,原來除了IE以外的瀏覽器,大部分的瀏覽器不是使用此方法來改變父視窗的值而是採用下面此方法來達成 if (window.dialogArguments != null) //IE使用 var querytype = window.dialogArguments.document.getElementById("父視窗物件ID"); else //其他如 Friefox,Chrome var querytype = opener.window.document.getElementById("父視窗物件ID"); querytype.value = 'Return Value'; window.close();