發表文章

目前顯示的是 8月, 2009的文章

實作Queue

現在不論使用何種語言,基本的資料結構大都不用再自己動手實作。有可能語言本身就有提供不錯用的資料結構物件,或是多多少少也都可以拿到免費的實作完成版本。 不過,說真的有時你還真的會需要自己去動手實作某種資料結構物件。 最近,我就有一個需求需要自己動手做一個Queue。姑且不論我的需求是什麼,單是要實作一個基本型的Queue就花了我一些時間。主要的問題就在於: 如何判斷Queue是空的,還是滿的:基本上在實作Queue時,一般都是先配置一個固定大小的空間,這空間可能是以陣列的方式實作的。接著就是用兩個指標的代表可放置資料的索引值(TailIndex),以及要取得第一份資料的索引值(HeadIndex)。這兩個索引值在這個固定大小的空間中,基本上就是巡迴使用的。也就是當某個指標移動到所配置空間的結尾時,就要再移到第一個位置,從頭再來。所以有可能HeadIndex會是<TailIndex的。這樣你要如何才能判斷資料是空的,還是滿的呢? 當空間不足時,你如果決定採用自動增加空間的演算法的話,那你要如何配置空間,以及將舊資料移到新的空間呢? 這些問題是我在實作一個Queue時遇到且花了一些時間思考的。雖然,終就是實作出我自己的一個Queue版本,而且也再接續改良出我所需的Queue。但還是覺得自己的實作版本可能有缺陷。 於是就上網查了一下資料,沒想到就查到兩篇看起來像是學術性的文章。一篇是 用陣列來實作Queue ;另一篇是 用linked-list來實作Queue 的。有興趣的人可參考一下囉。

太神奇了吧,可以這樣讓小孩不哭

今天突然在Mobile01上看到的一些文章,其中有個國外在教導 如何讓小孩不哭的方法 。 相當神奇喔,有興趣的人可以去看看。

Ubuntu 9.0.4 在VirtualBox 2.2.4中使用全螢幕

今天在VirtualBox 2.2.4中重新安裝了新版的Ubuntu 9.0.4。 安裝一切還算順利,不過,當我將VirtualBox的視窗放大到全螢幕時,發現Ubuntu並不會跟著放大到全螢幕。於是就上網查詢了一下資料,原來只要再額外安裝Virtual Box的額外套件就可以了。 最近版本的VirtualBox 2.2.4要安裝額外套件的設定也比較簡單了。只要到Virtual Box視窗上方的工具列的「裝置」中,選取最後一個選項「安裝客端額外功能」,此時Virtual Box就會自動將它的ISO檔掛載到您的磁碟機中。 一般來說,Ubuntu應該會自動執行才對。不過,我的狀況是它並沒有自動執行。所以我是開啟這個ISO檔的內容,並手動執行其中的autorun.sh。執行後,它會進行自動化的安裝。安裝完成後,重新啟動,只要變更視窗的大小,Ubuntu的桌面也就會自動跟著變更了。

wicatch免費無線網路

現在離開家中到外面時,如果想要上線的話,不外乎要使用以下幾種方式: WiFi:要收費的,而且只有幾個特定的熱點 店家提供的免費網路:店家有時會提供免費的無線網路供消費者使用,不過,這樣的店家也是可遇不可求。 3G上網:自己申請電信業者的3G上網,只要有信號的地方就可以上網。不過,費用也是不便宜。 除了上述幾種方式之外,最近開始流行一種 wicatch免費無線上網 。 這種方式跟上述第二種的方式差不多,不過店家如果採用wicatch的方式的話,或許還可以從中得到一些回饋金。比自行免費提供要來得更有經濟效益。 wicatch的作法就是店家提供免費的無線上網頻寬,而結合wicatch來提供給使用者。不過使用者必須安裝wicatch的用戶端軟體才能連上無線網路。當然使用上是完全免費的,不過就是用戶端軟體會在使用者的螢幕的某個小區塊,播放一些廣告。而播放廣告的收入則會回饋給店家。 目前加入wicatch的店家其實還不多,大都是集中在台大公館附近的咖啡店。 個人覺得這樣的作法應該可以使提供無線上網頻寬的店家再多出一些額外的收入,未來應該也可以支撐提供無線上網頻寬的費用,強化服務。這樣總比完全免費提供要來得更有經濟效益吧。

A股、B股、H股

一開始有點搞不懂這些股,正好看到一份資料,就寫下來當作筆記囉。 A股:以人民幣計價,針對中國公民發行且在中國境內上市的股票;簡單說,就是大陸人民才能買的股票 B股:以美元、港幣計價,針對境外投資者發行且在中國境內上市的股票;簡單說,就是讓外國投資者買的中國股票。 H股:以港幣計價,在香港發行並上市的中國境內企業股票。

OpenCV使用MSVCR80.dll

在開始第一個OpenCV專案時,跟著網路上的範例將程式碼輸入一個新建的Win32命令列專案中,經過編譯及連結,所有過程完全順利,最後產生了一個可執行檔。 結果一執行時,就出現缺少MSVCR80.dll的訊息。怎麼會這樣呢?我執行的環境中是有安裝Visual Studio 2005的開發環境的啊。照理說,在這樣的環境下是不會缺少什麼DLL的吧。而且,這種一看就是Visual Studio本身會有的DLL,一般而言都是安裝到System32中了,不需要再另外複製一份到程式的執行檔目錄中才對啊。 於是就上網查了一下相關的資訊,原來大家都有遇過這種問題。只不過,他們可能不是使用OpenCV。 解決的方式好像有三種 。不過這篇文章中最後一種方式,我試過是沒有用的。後來是使用了第二種方式才解決問題。第二種方式主要是 在manifest檔案中加入相依性的參考 。 一開始如果方案建置完成時,你的manifest檔的內容應該是: <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <dependency> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.VC80.DebugCRT" version="8.0.50727.4053" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity> </dependentAssembly> </dependency> <dependency> <dependentAssembly> <assemblyIdentity type=&q

在VC++中使用OpenCV

在 VC++中使用OpenCV ,主要就是先設定好環境變數,將Lib、Header、以及source code的路徑設好,再開始一個新的專案。 在這篇文章中,作者是叫我們連結cv.lib、cxcore.lib以及highgui.lib這些函式庫。不過,如果你是在Debug模式下的話,那建議你要連結debug版本的,也就是cv100d.lib(100是版本號,表示1.0.0,也可以用新版的1.1.0)、cxcored.lib、highguid.lib。 假如你是自行編譯OpenCV函式庫的話,那請開啟OpenCV的方案檔,再設定成Debug模式,重新編譯。 如果你有注意看到OpenCV函式庫的編譯模式的話,會發現它多了一種Debug OpenMP 以及 Release OpenMP。 OpenMP 是平行式運算,主要是一組能同時利用多個CPU來進行運算的函式庫。OpenCV因為是影像處理的函式庫,為了加速運算速度,所以也提供了平行式運算的版本。