星期三, 11月 05, 2014

快速學習一個程式語言

想要快速學習一個程式語言,我會採用如下幾個階段的作法。

第一階段,了解基礎語法:

  1. 先看一個Hello world的範例,了解一個基本的程式的結構大概長怎樣。
  2. 看它的的基本變數用法。像是支援的變數型態,整數,浮點數及字串的使用。
  3. 看他的直述式,條件跳躍,迴圈,函數的語法怎麼寫。
  4. 其他進階概念的語法。像是物件導向的語法,functional programming的語法等等。(如果你之前沒有接觸過這些進階概念,那就跳過第四步,以後再說。)

星期五, 2月 28, 2014

使用pefile module顯示執行檔案所需要的DLL

最近才發現原來Python有一個可以讀取Portable Executable格式的module pefile[1]。於是就拿來練習,寫了一個可以顯示執行檔所需要的DLL的小程式。

星期日, 11月 17, 2013

如何取得利用PyInstaller所包入的資料檔案

PyInstaller可以協助我們將Python程式包裝成單一的執行檔案。同時也可以協助我們程式所需的資料檔案一併包裝起來。資料檔案一般我們都是在PyInstaller的spec檔案中加入如下的敘述:

a.datas += [('images/my.png', '/src/images/my.png', 'DATA'), ('images/other.png', '/src/images/other.png', 'DATA'), ('db/main.db', 'main.db',  'DATA')]
但是如果你在程式中寫上,像是
fd = file('db/main.db', 'rb')
或是
fd = file('main.db', 'rb')
不管是哪一個,你只有在未包裝前可以正確的開啟檔案,一旦包裝起來再執行就無法正確取得檔案了。其原因在於你的包裝好的執行檔案在執行時的時候,所有的東西會被解到一個暫時的目錄去,這個目錄你無法在寫程式的時候就確定好。所以就無法直接取得檔案。

星期三, 8月 21, 2013

有點兒怪的生蛋拌麵

前幾日在看日本的料理東西軍時,看到了一個料理是把麵煮好以後再把生蛋打上去攪和著吃。看起來滋味不俗!電視節目結束後立馬衝入廚房準備材料開始實作!

家裡沒有什麼蕎麥麵,就隨便拆了包泡麵煮熟,順便把冰箱裏面擺很久的甜不辣與貢丸拿出來一起煮熟,然後切條切片後放在麵上當配菜。

星期日, 5月 19, 2013

小熊餅乾變身紀錄

這幾天網路上很紅的一個消息,就是日本有個人買了一盒小熊餅乾,回家搖了30分鐘後,竟然變成了巧克力球!!今天終於忍不住衝到便利商店買了一盒來玩!!


星期五, 4月 26, 2013

筆記:TDD三原則

所謂的測試導向開發的三原則
http://butunclebob.com/ArticleS.UncleBob.TheThreeRulesOfTdd
  1. You are not allowed to write any production code unless it is to make a failing unit test pass.
  2. You are not allowed to write any more of a unit test than is sufficient to fail; and compilation failures are failures.
  3. You are not allowed to write any more production code than is sufficient to pass the one failing unit test.
翻譯成白話一點的中文就是
  1. 沒有測試單元,不寫程式。
  2. 不寫測試條件以外的測試程式。
  3. 不寫不屬於任何測試單元的產品程式。

星期五, 4月 19, 2013

MongoLab提供的免費MongoDB服務

MongoDB是NoSQL資料庫中的佼佼者。如果您對NoSQL略有涉獵,應該也有聽過他的大名。如果你沒有時間自己假設一個MongoDB伺服器,但是又很想試用看看。MongoLab的新服務正是為你所準備的!

http://mongolab.com/

只要連到上面的網站,然後註冊一個帳號,就可以申請免費500MB的MongoDB服務。500MB看起來很多,依照應用的不同,或許很快就滿了。無論如何,作為試用也好,小型應用也好,有人免費幫你架設系統並且提供頻寬,不是很好嗎?

MongoLab本身提供了REST API讓你可以使用標準的方式來與其資料庫進行溝通,同時,它也針對幾個著名的雲端系統提供服務:
  • Amazon
  • Joyent
  • Rackspace
  • Windows Azure
他也提供了容易使用的Web介面的管理工具,然你可以透過瀏覽器就對你的資料庫進行操作。他還提供了Replication與backup服務,如此就不用擔心資料安全性的問題了!

星期三, 3月 27, 2013

在Qt中用OpenCV2透過Webcam拍照


最近在練習使用OpenCV,順手紀錄一些用法。下面這段code可以用來控制電腦上的webcam進行拍照並且轉換成QImage物件,以便後續的使用。

#include <opencv2/opencv.hpp>

CvCapture *camera;
IplImage *frame;

camera = cvCreateCameraCapture(-1);  

/* We need to call cvRetrieveFrame twice here to get the last frame.
 * TODO: figure out the root cause and use correct method instead of
 *       the workaround.
 */
cvGrabFrame(camera);
frame = cvRetrieveFrame(camera);
frame = cvRetrieveFrame(camera);
if (frame)
{
QImage image(reinterpret_cast(frame->imageData),
frame->width, frame->height,
frame->widthStep, QImage::Format_RGB888);
QImage colorCorrectedImage(image.rgbSwapped());

/* Show colorCorrectedImage which contains the picture. */
...
}

cvReleaseCapture(&camera);

星期四, 2月 14, 2013

如何建立可攜帶的Qt開發環境


本文將會向您展示如何建立一個Windows平台上面的可攜式Qt開發環境。本文是建立在Qt 5.0.1及MinGW 4.7之上。
事前準備
  1. 準備一個用來安裝Qt及MinGW的Windows系統。
  2. 從Qt project的網站下載qt-windows-opensource-5.0.1-mingw47_32-x86-offline.exe。