pretty code

2014年10月26日 星期日

Autosize in wxWidgets with wxDev-C++

If you want the app to change it's layout when window is maximal, you must use sizers. There are many sizers in wxWidgets, such as wxBoxSizer, wxGridSizer and wxFlexGridSizer.

When I have two vertical parts in window and I want the bottom part is fixed size, I can use wxBoxSizer and put two panels on wxBoxSizer. Here is settings about these components.

wxBoxSizer:
Orientation is wxVertical.

wxPanel1(top):
wxALIGN_TOP is true.
wxEXPAND is true.
Stretch Factor is 1.

wxPanel2(bottom):
wxALIGN_BOTTOM is true.
wxEXPAND is true.

If you set Stretch Factor, the part will be adjusted size when window is maximal.


2014年10月19日 星期日

大法官觀後感

昨天去看了電影-大法官
覺得這部電影有很多點可以在看完後好好想想
But 人生總是會有 But ...

看完電影準備去運動時
開車由建國高架往南
剛從南京上閘道後就被後面一台小車撞到
我前面因為有車要下建國
當時我的車已踩煞車
幾乎是快停止的狀態
居然也能被撞到
不知道駕駛當時在想什麼

不過最白吃的還是我本人
當時看一下以為只撞到保險桿
就叫他開車要小心點
換來一句謝謝後就離開

開到公園後
下車仔細看看
才發現左輪上方板金受損
輪圈受損
保險桿也受損
害我一整個心情不好

幸好熟悉的輪胎行晚上有營業
晚上花了 7000 換掉 4 個輪圈
輪胎因為沒事故不用換掉
不然至少還要換掉 2 個才能平衡
再加上板金
我想這次被撞沒花個一萬塊跑不掉

那位大哥
遇到我是你運氣好
請你下次好好小心開車
車上還載著家人
為什麼不更小心點

可憐我的小白


2014年10月18日 星期六

How to catch windows message in wxWidgets

1. Add define in your header file.

WXLRESULT MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam);

2. Add implement in your cpp file.

WXLRESULT XXX::MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam)
{
    switch(message)
    {
        case WM_KEY:
            break;
        default:
            break;
    }  
 
    return ZZZ::MSWWindowProc(message, wParam, lParam);
 }

XXX is your class name and ZZZ is the base class that you derive.

3. You can catch the windows message what you want now.

2014年10月10日 星期五

Update wxWidgets' libs in wxDev-C++

Because the wxWidgets's version is 2.9.3 in wxDev-C++, I want to use the new version, this is the steps how to do:

My wxDev-C++'s installing path is "C:\wxDev-Cpp".

1. Download the wxWidget's source and unzip to C:\wxWidgets.
2. Open cmd window and type "set path=C:\wxDev-Cpp\MinGW32\bin". Then "cd wxWidgets\build\msw".
3. Type "mingw32-make -f makefile.gcc UNICODE=1 SHARED=0 BUILD=release MONOLITHIC=1".
4. After compiling it, copy "C:\wxWidgets\lib\gcc_lib\*.a" to C:\wxDev-Cpp\lib\wx\gcc_lib".
5. Replace "C:\wxDev-Cpp\include\common" from "C:\wxWidgets\include".
6. Copy "C:\wxWidgets\lib\gcc_lib\mswu\wx\setup.h" to "C:\wxDev-Cpp\include\common\wx".
7. Change wxWidgets's version in wxDev-C++ -> Tools -> Compiler Options -> Version info.
8. Before you compile old project, remember to del all *.o in "project\Objects\MingW".
9. Enjoy it.

2014年8月15日 星期五

Ubuntu 啟動相關檔案

/etc/init.d/xxxxx
啟動 script 放置處

/etc/rcx.d/
啟動 level 對應的服務 script, 由系統產生

為了避免影響其他服務
開機想要自動執行的
可以寫在 /etc/rc.local


2014年7月16日 星期三

cmd 指定路徑

cmd /K "cd /d D:\PathName"

只要在批次檔用此語法
便可以開啟一個指定路徑的 DOS 視窗
在 XP 應該蠻有用的

如果是 Win7 以上
只要在資料夾按下 Shift + 滑鼠右鍵
便可以開啟該路徑的 DOS 視窗

2014年7月5日 星期六

自然人憑證解鎖 6981 錯誤

不管是使用 HiCOS 或是 MOICA 網站上的解鎖功能
如果出現 6981 的錯誤代碼
請先檢查是否使用有鍵盤的讀卡機
據客服說法是因為解鎖時程序被有鍵盤的讀卡機擋下所致
此問題只能找讀卡機廠商解決

感覺這個問題不太好解
廠商回了一次電話後就沒有下文

最快的解決之道就是找人借一個普通的讀卡機
終於我又有自然人憑證可用了

另外如果像我是使用 Win8 64 的人
如果有遇到安裝讀卡機驅動失敗的情形
請先記得將讀卡機拔掉
安裝程序便能順利安裝成功

2014年7月4日 星期五

計算機組織與設計

最近在重看這本大學用書
第一次看是在資策會時
但印象中只有上前兩章
有些章節之前考地特時為了找答案有翻過

果然是本很硬體的書
但第二章寫的還不錯

進度有點慢
趕快邁向第三章吧

2014年6月29日 星期日

stack frame

x86 intel gcc

stack 由高位元往低位元長
parameters
return address
ebp
local variables

2014年6月26日 星期四

查詢 MySQL table 空間 語法

SELECT table_name, table_rows,
       IF(Index_length=0, Data_length, Data_length*Index_length) AS 'Table Size'
FROM information_schema.tables
WHERE table_schema='mk'
ORDER BY 'Table Size', table_rows DESC;

1.  mk 是資料庫名
2.  IF是判斷式,如果Index_length是0

MySQL 自創欄位

也是之前面試回家才想到犯的錯誤

SELECT DNAME, '1st table' AS 'Table名' FROM DEPARTMENT
UNION
SELECT DNAME, '2nd table' AS 'Table名' FROM DEPARTMENT;

同一張表都多出來一個欄位,但欄位名稱不一樣
因為是字串,故記得加單引號

MySQL ROWNUMBER

之前面試答不出來的問題
今天突然想到解法

SET @rownum:=0;
SELECT LNAME, BDATE, (@rownum:=@rownum+1) AS '名次'
FROM EMPLOYEE
ORDER BY BDATE;

重點在 @rownum:=@rownum+1
會讓 @rownum 一直累加

如果沒有 SET @rownum:=0;
重複執行 SELECT 敘述 @rownum 會延續上一次 SELECT 後的值

2014年6月19日 星期四

看來我跟資料庫無緣

終於跟某家公司說了我的決定
那家是我第二想去的公司
可惜目前卡在第一想去的公司流程上
總不能讓人家一直等我
真的很抱歉

I am sorry

2014年6月18日 星期三

車輛機電問題紀錄

問題發生點:
打方向燈的瞬間,機電發生故障
(門鎖解除,無法打燈,空調失效)

猜測原因:
先從保險絲查起

備註:
買來10年次數約10次
上一次至少是半年前
都發生在夏天?

2014年6月17日 星期二

查詢 MySQL table 空間


1. SHOW TABLE STATUS

2. Data_length * Index_length

2014年6月16日 星期一

Garmin Vivofit Bug Fix

感覺要解決睡眠時間沒有上傳的問題
不過坦白說我也懶得試了
就讓他當個稱職的計步器吧

後來上網查了一下
國外的討論區有提到是因為 2.6 版本的關係
但台灣的討論區都沒有看到
看起來台灣沒什麼人拿來偵測睡眠狀態吧



2014年6月12日 星期四

刪除 Win8 的服務

之前安裝 MySQL 因為版本不一致無法順利安裝
也因為安裝不成功導致電腦管理的服務裡還殘存 MySQL

以前都是直接進 registry 去刪除
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\
但這招在 Win8 卻無法成功

有一個錯誤的訊息掛在服務裡看著也是礙眼

找了一下
只要直接下命令
sc delete [service name]
就可以順利的移除服務

2014年6月10日 星期二

機器週期

以下內容出自 教育部數位教學資源入口網 http://content.edu.tw/senior/computer/ks_ks/et/cpu/index.htm

我們從鍵盤鍵入一個命令、資料或用滑鼠從畫面中選取某個選項之後,電腦系統為了執行此一命令或處理資料時,會先翻成電腦內部看得懂的機械語言指令(Machine Language Instruction)。而處理每一個機械語言指令時,資料會傳送或來自記憶體或輸入/輸出單元。如此每一次的傳送或接收的動作稱為機器週期(Machine Cycle)。機器週期又可分為兩部份:指令週期(Instruction cycle,I-cycle)與執行週期(Execution cycle,E-cycle)。 在指令週期中,控制單元會從記憶單元取出下一待執行的指令。在執行週期(E-cycle)內所執行的工作包含:找出資料、執行指令,以及將結果存到累加器內。

指令週期

控制單元從主記憶體中提取下一個所要執行的指令。
控制單元從指令予以解碼(decode) 控制單元將指令中用來說明要執行什麼動作的這一部份,存入指令暫存器
控制單元將指令中用來說明相關資料所儲存之位置這一部份,存入位址暫存器。

執行週期

控制單元根據位址暫存器內的資訊,從主記憶體中讀啟所需的資料,並將其存入ALU的儲存暫存器內。
控制單元根據指令暫存的資訊,命令ALU去執行所需的運算。
ALU執行所需之運算,它會將發現於儲存暫存器以及累加器內的數值予以相加。
運算結果再存回累加器內,這個動作會清除累加器原先所儲存的數值。

2014年6月5日 星期四

CodeIgniter trace code 1

最近想嘗試了解 CI
想知道如何實現 MVC 的架構
故花 10 分鐘簡單的 trace 一下

程式入口點是 index.php -> core/CodeIgniter.php
裡面有 1 個 $OUT 變數會去 load CI_Output 的 class
最後會呼叫 __display 或是 _display_cache 的方法(視有無 catch 而訂)
至於在 __display 裡面會 echo $output
$output 便是網頁呈現的內容

2014年5月26日 星期一

Garmin Vivofit 讓人失望

買來已經快一個月了,原本都用得很開心
從上星期開始,陸續出現幾個問題:

1. 電腦同步後進入 Connect 首頁,於睡眠方塊頁面中會出現確認睡眠時間的視窗訊息方塊(發生2次)。
2. 電腦同步後進入 Connect 首頁,睡眠的結束時間不正確(發生3次)。

今早詢問客服後,據客服說法:

1. 每次都詢問才是正常,所以是我新電腦不正常?
2. 同1,確認方塊的預設時間是原本設定的,而不是每天按到 SLEEP MODE 跟起床長按解除的時間。

根據說明書58頁的說明

看起來是我中文不好,誤會了說明書的意思?

另外, Connect 首頁,於裝置方塊頁面中按下常見問題集,會跳出一個 500 error 的視窗,若不是沒有說明頁,我才懶得打電話問客服,感覺客服訓練不是很好,像在公家機關詢問公文系統廠商的感覺一樣,對他們的回答都必須打問號。

總之,一整個讓人失望。

Bug 紀錄:
1. 5/29 同步後,發現 5/28 的睡眠結束時間又錯亂了。
2. 5/30 同步後,發現 5/29 的睡眠結束時間又錯亂了。


感覺就是放在 Server 上的資料有問題,真是讓人生氣。
誰要 500 我就給他,這樣的出錯頻率,不值 3990 的價值。

2014年5月1日 星期四

Garmin Vivofit 睡眠紀錄

睡眠的品質有夠差




2014年4月6日 星期日

美國隊長

我算是個很少看電影的人
偶然在 HBO 中看到美國隊長1
就深深地喜歡上這個角色

喜歡他對自己信念的堅持
以及那種勇往直前的勇氣
還有拯救人類的偉大情操

這個世界就是太無奈了
真該多一些像美國隊長這樣的人

不過都是你害我看第 2 集小哭了一下
雖然我看很多電影都會哭 哈

2014年3月21日 星期五

gnuplot 畫圖

這 2 天寫程式寫到有點煩。

突然想看看寫給其他部門程式的使用狀況,就寫了支程式把 MySQL 的 Log 抓回來分析,並以月為單位統計出查詢次數。

原本只想匯入 Excel 看看畫圖的結果,但是資料一變動就要重匯也是有點小笨。

以前都沒機會玩玩 gnuplot,不如就趁現在來 try try。

昨天還被參數搞到頭昏腦脹,今天不知道為什麼就開竅了?

有圖有真相,但這個系統看起來都沒有人用是怎樣!


2014年3月1日 星期六

daily money 搜尋 ready

感謝 Lancelot
直接用他改好的 Code
我的 daily money 終於可以 search 了

幸好一直有在 follow
才知道改了什麼
不過也是花了我半小時

下次可能就沒那麼幸運了
我的版本已經跟作者版和 Lancelot 版越差越多了

不會 java 改 Android 真是辛苦呀

2014年2月3日 星期一

SNMP 監控印表機

原本監控公司所有的印表機耗材使用情形是使用自己寫的程式。

原理是將每個印表機的耗材網頁抓回來,再去裡面 parsing 出我要的資料,不過遇到 EPSON 機器就沒輒,因為他使用 java applet,呈現出來的不是文字網頁,所以我也沒辦法 parsing。

之前有想過利用 SNMP 協定來跟 EPSON 機器溝通,但我一直以為 EPSON 是用 private 的 ID,故一開始方向就錯了,當然也不可能在網路上找到相關資料,理論上 private 也是要註冊,故找到管理組織應該也是可以?

最近剛好看到 1 個 PHP SNMP Library,試了一下還是無法抓取 EPSON 的資料,不過在研究 source code 的過程中,才發現原來是我誤會了,只要用 snmpwalk 的方式,就能順利抓到資料。

2014年1月5日 星期日

IBM R51 SSD

最近一直在考慮要不要換筆電
Lenovo ThinkPad T430 2344-1D9

目前 R51 有 2 個問題
1. 關機後延長線開關不能關,否則開機要重設日期時間
2. 超過 1 天以上沒開機,按下開關沒有回應

以上 2 個問題好像是互斥的,但他就是發生了XD
個人猜測是水銀電池的問題

不過 IBM 模組感覺是直接焊在電池上
所以我也懶得拆機來換

T430 考慮了老半天
龜毛的我還是放棄

買了顆 INTEL SSD 530 + 光碟機抽換盒
開機跟操作果然明顯變快
不過只能跑在 UDMA2

當初如果買 2.5 吋 mSATA to IDE 轉卡 + INTEL mSATA
不知道是不是就能夠順利跑在 UDMA5

功課果然做太少
果真千金難買早知道

SSD HD Tune
SSD Test1

SSD Test2

IDE 320G HD Tune

IDE 320G Test