2015年3月6日 星期五
2015年3月2日 星期一
DOUBLE 第十天
嗯......
希望不會變成雙日刊
雖然說吸收狀況已經沒問題了但是想玩的東西還是多到爆
目前已經把時間調回10點左右躺下可以睡得很好的狀態
接下來只要繼續保持基本上就可以把事情穩穩的做好了
另外今天應該也不會有時間寫自我觀察計畫的東西
就寫寫這兩天玩graphiz和關於gcc的事情
之前都是在windows系統下試著用graphiz寫東西
結果發現原來graphedit不能正常存取中文
(應該沒拼錯,就是視窗化的editor)
改在linux下執行就沒問題,只要存成UTF-8(預設)就可以了
甚至連自行都不用特別設定就能在圖上正確的畫出來(graphedit要設定)
另外,subgraph的命名需要用特別的關鍵字才能正常的畫出來
ex:cluster_xxx{}
命名規則(或者說選項)我還沒去翻document,畢竟暫時不需要
要找也是先找排版相關的XD
關於gcc的話則是了解到中間會有一個中介語言
叫做 RTL (Register Transfer Language)
目前看起來跟LLVM的 IR (Intermediate Representation)
兩個同樣都是一種 IF (Intermediate Form)
就wikipedia上的說法LLVM可以使用gcc編譯出來的IF(RTL)
另外clang目前也把gcc當作底下的預設compiler
如果要gcc把中間的檔案列出來的話需要加上"-fdump-rtl-all"(RTL)或者"-fdump-tree-all"(TREE)
另外stack overflow上的人提到說如果要研究這方面東西最好不要用gcc當作目標
因為很多東西都跟manual不太一樣,也沒有完全實作理論上的東西
有興趣的話可以找LLVM或者某php的compiler(忘記名子惹~)來看看
希望不會變成雙日刊
雖然說吸收狀況已經沒問題了但是想玩的東西還是多到爆
目前已經把時間調回10點左右躺下可以睡得很好的狀態
接下來只要繼續保持基本上就可以把事情穩穩的做好了
另外今天應該也不會有時間寫自我觀察計畫的東西
就寫寫這兩天玩graphiz和關於gcc的事情
之前都是在windows系統下試著用graphiz寫東西
結果發現原來graphedit不能正常存取中文
(應該沒拼錯,就是視窗化的editor)
改在linux下執行就沒問題,只要存成UTF-8(預設)就可以了
甚至連自行都不用特別設定就能在圖上正確的畫出來(graphedit要設定)
另外,subgraph的命名需要用特別的關鍵字才能正常的畫出來
ex:cluster_xxx{}
命名規則(或者說選項)我還沒去翻document,畢竟暫時不需要
要找也是先找排版相關的XD
關於gcc的話則是了解到中間會有一個中介語言
叫做 RTL (Register Transfer Language)
目前看起來跟LLVM的 IR (Intermediate Representation)
兩個同樣都是一種 IF (Intermediate Form)
就wikipedia上的說法LLVM可以使用gcc編譯出來的IF(RTL)
另外clang目前也把gcc當作底下的預設compiler
如果要gcc把中間的檔案列出來的話需要加上"-fdump-rtl-all"(RTL)或者"-fdump-tree-all"(TREE)
另外stack overflow上的人提到說如果要研究這方面東西最好不要用gcc當作目標
因為很多東西都跟manual不太一樣,也沒有完全實作理論上的東西
有興趣的話可以找LLVM或者某php的compiler(忘記名子惹~)來看看
2015年2月28日 星期六
2015年2月26日 星期四
第六天
嗯.....資料查詢的一天
進展依然不大(雖然說之前再做GUI進展也沒多了不起
單純就是把diary用的file type訂定出來了
file_object:
file_title ->檔案名稱
object_member_num ->這個file有多少個object
file_time_range ->數字,以月為單位
object ->diary物件(以天為單位)
file_object的主要思考是在於要把object組織成一個檔案
所以object會做成linked list的模式
object:
object_size ->作為搜尋下一個物件的shift
objecttype_id ->作為以後擴充的檔案格式標記
object_id ->不同檔案之間識別的標記(流水號)
source
text
next_object
而source(chapcher)和text(section)則是兩種資料的格式
目前想法是以後會把這兩種資料分別拆開放在統計和測驗用
所以各自都會有各自的時間、標題
source:
source_file_size ->作為shift用
sourcetype_id ->作為以後擴充的檔案格式標記
source_id ->不同檔案之間識別的標記(流水號)
titles ->標題
date ->時間
info_size ->資源資訊長度
info ->資源內容
text:
text_file_size ->作為shift用
texttype_id ->作為以後擴充的檔案格式標記
file_id ->不同檔案之間識別的標記(流水號)
titles ->標題
date ->時間
text_size ->文字長度
text_cont ->文字內容
至於memberfunction則還沒決定
但目前想法是在這層面利用file_object和object來進行操作
而source和text都沒有member function,純粹當作資料使用
而各種file type則一起放在同一個.h檔中以方便操作
進展依然不大(雖然說之前再做GUI進展也沒多了不起
單純就是把diary用的file type訂定出來了
file_object:
file_title ->檔案名稱
object_member_num ->這個file有多少個object
file_time_range ->數字,以月為單位
object ->diary物件(以天為單位)
file_object的主要思考是在於要把object組織成一個檔案
所以object會做成linked list的模式
object:
object_size ->作為搜尋下一個物件的shift
objecttype_id ->作為以後擴充的檔案格式標記
object_id ->不同檔案之間識別的標記(流水號)
source
text
next_object
而source(chapcher)和text(section)則是兩種資料的格式
目前想法是以後會把這兩種資料分別拆開放在統計和測驗用
所以各自都會有各自的時間、標題
source:
source_file_size ->作為shift用
sourcetype_id ->作為以後擴充的檔案格式標記
source_id ->不同檔案之間識別的標記(流水號)
titles ->標題
date ->時間
info_size ->資源資訊長度
info ->資源內容
text:
text_file_size ->作為shift用
texttype_id ->作為以後擴充的檔案格式標記
file_id ->不同檔案之間識別的標記(流水號)
titles ->標題
date ->時間
text_size ->文字長度
text_cont ->文字內容
至於memberfunction則還沒決定
但目前想法是在這層面利用file_object和object來進行操作
而source和text都沒有member function,純粹當作資料使用
而各種file type則一起放在同一個.h檔中以方便操作
2015年2月25日 星期三
第五天
今天根本沒做什麼事結果就過了一天.....
在準備做內容的時候才發現當時竟然忘記要想貯存的檔案結構了
section_file目前想法是用binary file存,並且當作一個小object包在diary_file裡面:
filetype_id
作為以後擴充的檔案格式標記
file_id
不同檔案之間識別的標記(流水號)
titles
標題
date
時間
text_size
文字長度
text
文字內容
詳細的部份打算參考一下bmp的header file到底定義了什麼以確定沒有其他漏掉的
到時候還會把resource(chapcher_file)的資料也包在一起
並且要定義一下code內部的命名規則
在準備做內容的時候才發現當時竟然忘記要想貯存的檔案結構了
section_file目前想法是用binary file存,並且當作一個小object包在diary_file裡面:
filetype_id
作為以後擴充的檔案格式標記
file_id
不同檔案之間識別的標記(流水號)
titles
標題
date
時間
text_size
文字長度
text
文字內容
詳細的部份打算參考一下bmp的header file到底定義了什麼以確定沒有其他漏掉的
到時候還會把resource(chapcher_file)的資料也包在一起
並且要定義一下code內部的命名規則
2015年2月23日 星期一
第四天
今天的時間有點早(遠望
今天不過是把diarywidget做出來而已
做出了一個超級陽春的介面.....
接下來要開始做實際的member function了
感覺會非常刺激阿!!!
在寫的時候很多東西都是沒有完全整理好,整個就是粗製濫造的coding style
這些東西也要趁著這時候慢慢整理起來
不然之後在玩的時候一定會長出很多不知名的bug
目前來說完全沒有規劃,都是長相先出來再說
光是這樣視窗就已經多的開開關關超麻煩....
(依然不想用QtCreator的只有vim自幹才是王道的無聊堅持
然後接下來要去救一下我的顯卡&主機板!!
沒有高階CPU的日子雖然也不無聊但是很麻煩阿!
最後的最後讓醜不啦機介面出曬曬太陽
有人能猜到他最後會長成什麼樣子嗎XDDD
今天不過是把diarywidget做出來而已
做出了一個超級陽春的介面.....
接下來要開始做實際的member function了
感覺會非常刺激阿!!!
在寫的時候很多東西都是沒有完全整理好,整個就是粗製濫造的coding style
這些東西也要趁著這時候慢慢整理起來
不然之後在玩的時候一定會長出很多不知名的bug
目前來說完全沒有規劃,都是長相先出來再說
光是這樣視窗就已經多的開開關關超麻煩....
(依然不想用QtCreator的只有vim自幹才是王道的無聊堅持
然後接下來要去救一下我的顯卡&主機板!!
沒有高階CPU的日子雖然也不無聊但是很麻煩阿!
最後的最後讓醜不啦機介面出曬曬太陽
有人能猜到他最後會長成什麼樣子嗎XDDD
第三天
發生了一個奇妙的error messiage
搞了一個小時之後才發現被繼承的class要在header file裡面就宣告(include)
其實前面就有做過正確的作法
但一直以為那是亂來,正確作法應該要把全部的實作都放在.cpp裡
結果就是GG
只是我好奇的是 header file 的 include 宣告難道不會因為重複宣告就出問題嗎?
例如:(實際寫法當然不會這樣,只是懶惰所以把function body寫在.h裡面)
解決方法就是把每個檔案都各自跑出object file再用linker連在一起
另外就是如果一個Widget class要掛東西的話不要打成parent,要打this
雖然很明顯但是因為這個打所以又花了半個小時在debug
接下來會再把diary widget做出來,但是感覺還有很多沒解決跟沒想完整的事情
還有要把研究用的視窗介面做出來還有上課時可能會用到的程式......
感覺還有好常的一段路要走
搞了一個小時之後才發現被繼承的class要在header file裡面就宣告(include)
其實前面就有做過正確的作法
但一直以為那是亂來,正確作法應該要把全部的實作都放在.cpp裡
結果就是GG
只是我好奇的是 header file 的 include 宣告難道不會因為重複宣告就出問題嗎?
例如:(實際寫法當然不會這樣,只是懶惰所以把function body寫在.h裡面)
解決方法就是把每個檔案都各自跑出object file再用linker連在一起
另外就是如果一個Widget class要掛東西的話不要打成parent,要打this
雖然很明顯但是因為這個打所以又花了半個小時在debug
接下來會再把diary widget做出來,但是感覺還有很多沒解決跟沒想完整的事情
還有要把研究用的視窗介面做出來還有上課時可能會用到的程式......
感覺還有好常的一段路要走
2015年2月22日 星期日
使用gcc編譯出assembly code
用gcc -S[1]指令就可以在編譯出assembly code時停下並輸出
不會直接輸出binary file
但輸出的檔案是AT&A的syntex格式[2]
要加入-masm=intel才會變成Intel的格式
下一步打算查查看gcc和gnu assembler的設定
GNU Assembler[3]
How to use assembly language to write an OS[4]
ISA extensions and compiler/assembler/linker flow from source code to an executable[5]
有一個非常詳細的程式compile流程圖
[1]http://ccckmit.wikidot.com/cp:callasasm
[2]http://stackoverflow.com/questions/4070922/assembly-instruction-set-for-my-processor
[3]https://linux.web.cern.ch/linux/scientific4/docs/rhel-as-en-4/index.html
[4]http://mikeos.sourceforge.net/write-your-own-os.html
[5]http://www.gordoni.com/cygnus/evaluate.html
不會直接輸出binary file
但輸出的檔案是AT&A的syntex格式[2]
要加入-masm=intel才會變成Intel的格式
下一步打算查查看gcc和gnu assembler的設定
GNU Assembler[3]
How to use assembly language to write an OS[4]
ISA extensions and compiler/assembler/linker flow from source code to an executable[5]
有一個非常詳細的程式compile流程圖
[1]http://ccckmit.wikidot.com/cp:callasasm
[2]http://stackoverflow.com/questions/4070922/assembly-instruction-set-for-my-processor
[3]https://linux.web.cern.ch/linux/scientific4/docs/rhel-as-en-4/index.html
[4]http://mikeos.sourceforge.net/write-your-own-os.html
[5]http://www.gordoni.com/cygnus/evaluate.html
第二天
嗯.....
玩得不亦樂乎然後啥都沒做到一個下午就過去了.....
QBoxLayout 和 QGroupBox 傻傻弄不清楚
睡眠不足影響真的太大了
還有遇到了利用default argument來定義兩個overloading function的問題
第一個是正確用法
下面那個是傻子在用的來著XDD
另外需要好好的把整個程式的架構分析一下
今天在介面的部份玩太久了~
額外:
Qt的connect呼叫法在object裡和外面有點不太一樣
object裡面:connect(.....)
object外面:QObject::connect(...)
沒有在object裡面呼叫的話就需要在前面加上"QObject::"
(:: is scope resolution operator)
玩得不亦樂乎然後啥都沒做到一個下午就過去了.....
QBoxLayout 和 QGroupBox 傻傻弄不清楚
睡眠不足影響真的太大了
還有遇到了利用default argument來定義兩個overloading function的問題
第一個是正確用法
下面那個是傻子在用的來著XDD
另外需要好好的把整個程式的架構分析一下
今天在介面的部份玩太久了~
額外:
Qt的connect呼叫法在object裡和外面有點不太一樣
object裡面:connect(.....)
object外面:QObject::connect(...)
沒有在object裡面呼叫的話就需要在前面加上"QObject::"
(:: is scope resolution operator)
2015年2月21日 星期六
程式人常用的部落格平台以及編輯工具
Github page or Torchpad or 點部落
logdown
^---但聽說免費功能很爛
hexo
編輯工具:
用來嵌入程式碼:github gist
logdown
^---但聽說免費功能很爛
hexo
編輯工具:
用來嵌入程式碼:github gist
一個開始
一直都有打算開發一些玩具來玩
想法其實很多,但總覺的不夠成熟
需要的工具不少,但老是學到一半
到底在哪個平台開發、用哪種語言來開發等等之類的
現在,2015年
雖然還沒想清楚最後想要做出甚麽
雖然工具還不夠熟
雖然平台每個都很想玩
雖然打在網誌上還是感覺很害羞
但不管怎樣,我想做
感覺這會是個十分有趣的經驗
如果有誰路過有有趣的想法的也請多多指教
這是個用Qt 5.2.1版開發的軟體
製作目的是想把自己曾經經歷過的東西用一個簡單的介面除存下來並分析
目前規劃主功能有:紀錄、統計、測驗、發展圖
紀錄原則上是每天,可以有多個不同紀錄,每個紀錄裡面有一個資源分配紀錄器
統計就是拿來分析資源的,預計做成一整塊的綜合比較視覺介面
測驗可以用來修正統計結果
例如:每天記5個單字,但是卻會有忘記的情況。這時候就用測驗來計算到底有多少達成率
發展圖是用來規劃進度以及下一個目標的工具
想法其實很多,但總覺的不夠成熟
需要的工具不少,但老是學到一半
到底在哪個平台開發、用哪種語言來開發等等之類的
現在,2015年
雖然還沒想清楚最後想要做出甚麽
雖然工具還不夠熟
雖然平台每個都很想玩
雖然打在網誌上還是感覺很害羞
但不管怎樣,我想做
感覺這會是個十分有趣的經驗
如果有誰路過有有趣的想法的也請多多指教
這是個用Qt 5.2.1版開發的軟體
製作目的是想把自己曾經經歷過的東西用一個簡單的介面除存下來並分析
目前規劃主功能有:紀錄、統計、測驗、發展圖
紀錄原則上是每天,可以有多個不同紀錄,每個紀錄裡面有一個資源分配紀錄器
統計就是拿來分析資源的,預計做成一整塊的綜合比較視覺介面
測驗可以用來修正統計結果
例如:每天記5個單字,但是卻會有忘記的情況。這時候就用測驗來計算到底有多少達成率
發展圖是用來規劃進度以及下一個目標的工具
2015年2月11日 星期三
Qt&c++學習資源
[1]大陸網站,各種講解 http://www.devbean.net/2012/08/qt-study-road-2-catelog/
[2]QT的推廣部(QT大使) http://quitcoding.com/?page=home [3]亂找的c++網站http://www.tutorialspoint.com/cplusplus/cpp_variable_scope.htm
[2]QT的推廣部(QT大使) http://quitcoding.com/?page=home [3]亂找的c++網站http://www.tutorialspoint.com/cplusplus/cpp_variable_scope.htm
2015年2月9日 星期一
C與C++混合程式(如何交互CALL的方法)
#ifndef H_SOMECODE
#define H_SOMECODE
#ifdef __cplusplus
extern "C" {
#endif
void foo(void);
#ifdef __cplusplus
}
#endif
#endif /* H_SOMECODE */
[1] 用法
[2]深入講解Compiler做的事,還有更新和有趣的文章
[1] https://isocpp.org/wiki/faq/mixing-c-and-cpp
[2]http://mqjing.blogspot.tw/2008/10/c-c-c-function.html
2015年2月7日 星期六
c++學習指南
基礎篇
認識 C++ 語言
如何編譯與執行
基本內建型態與物件
指標與參考
變數命名規則
運算式與陳述
選擇
迴圈
函數
類別
物件導向與封裝
建構函數
設計專屬的標頭檔
軟體開發篇
Encrypt 類別
實作 set_code_array()
繼續測試
修正後的數學公式
編碼
解碼
型態轉換問題
前置處理
認識標準程式庫
認識第三方程式庫
GUI 篇
Qt Creator 使用簡介
專案的檔案組成
記憶體管理
設計介面
跳到信號槽
QString 的問題
整合 Encrypt
存檔與載入
完成版的 encrypt_gui
下一步
附錄
在 Qt Creator 中建立新專案
利用 Qt Designer 設計 GUI
http://pydoing.blogspot.tw/2014/06/cpp-guide.html
認識 C++ 語言
如何編譯與執行
基本內建型態與物件
指標與參考
變數命名規則
運算式與陳述
選擇
迴圈
函數
類別
物件導向與封裝
建構函數
設計專屬的標頭檔
軟體開發篇
Encrypt 類別
實作 set_code_array()
繼續測試
修正後的數學公式
編碼
解碼
型態轉換問題
前置處理
認識標準程式庫
認識第三方程式庫
GUI 篇
Qt Creator 使用簡介
專案的檔案組成
記憶體管理
設計介面
跳到信號槽
QString 的問題
整合 Encrypt
存檔與載入
完成版的 encrypt_gui
下一步
附錄
在 Qt Creator 中建立新專案
利用 Qt Designer 設計 GUI
http://pydoing.blogspot.tw/2014/06/cpp-guide.html
關於RAII的探討(資源獲取與洩漏)
需要注意資源獲取(宣告)後是否在該區段內就free掉
對於RAII的解說[4]
Reference:
[1]https://www.ptt.cc/man/C_and_CPP/D8D2/DA94/DDBB/M.1127480790.A.3B6.html
[2]http://darkranger.no-ip.org/content/loki-software-1998-2001
[3]http://blog.monkeypotion.net/gameprog/advanced/profiling-in-pooled-allocation-techniques
[4]http://www.cppblog.com/jinq0123/archive/2008/05/20/50522.aspx
The RAII Idiom[1]
作者: gocpp (cpp) 看板: C_and_CPP
標題: [心得] The RAII Idiom
時間: Sun Aug 14 13:43:46 2005
RAII 是什麼,或許 C++ 用了很久的人也沒聽過。不過即使沒聽過,
在程式中也應該早已大量應用 RAII 的手法了。
常有人問 C++ 與 C 有何不同,這個問題。簡單地說,C 語言支援的
是單純的程序導向(procedural based) 編程,而 C++ 除此之外還
支援
1.object-based
2.object-oriented
3.generic
這三種編程的觀念。學習 C++ 的時候,不要只侷限在這個 keyword 是
什麼意思,那個標準容器怎麼用(當然,這些還是要懂的),種種微末
細節。更重要的是,必須了解 C++ 所支援與 C 不同的設計概念,在接
觸一個新的語言機制或用法時,最好先了解它之所以「存在的目的」,
為什麼要用到這些手法,和舊的方法相比,「有什麼好處」,又「有什
麼限制」…等等,才是提高整體編程水平的捷徑。
本篇的主題 RAII,其實就是 C++ 所支援,而是 C 所缺乏的第一個主要
的概念: object-based(以物件為基礎的)編程。當然,object based
的範疇遠比 RAII 大的多,RAII 只是其中一部份,但卻是非常重要的一
部份。
RAII 指的是「Resource Acquisition Is Initialisation」,直接的意
思是:「資源獲得即初始化」。意即:一旦在程式中有「資源配置」的
行為,也就是一旦有「配置、釋放」的動作,就讓「配置」成為一個初
始化的動作,如此,釋放動作就變成自動的了(依物件的 scope 決定)。
簡單地說,RAII 就是善用 C++ class 的解構式(destroctor),來達成
資源自動管理的目的。簡單應用如下:
void f() // 一、使用 auto_ptr 避免手動 delete
{
// 假設由於某種原因,TMemoryStream 必須以 new 的方式建立
std::auto_ptr<TMemoryStream> p(new TMemoryStream);
...
if (...) { throw 1; }
...
} // OK, 沒問題,一旦碰到右大括號,即使發生異常,p 也會正確被釋放。
void g() // 二、使用 vector 取代手動配置 array
{
int N;
std::cin >> N;
std::vector<int> v(N);
...
if (...) { throw 1; }
...
} // OK, 沒問題,即使發生異常,也不必操心 v 內部的記憶體管理
std::string g2() // 三、以回傳物件的方式,取代回傳函式內部 new 的物件的指標
{
std::string s;
...
return s;
} // OK, 外部模組不必擔心忘記釋放記憶體的問題。
以上三個例子都很簡單,看起來沒什麼,但這就是 RAII 的基本精神,
再舉個多緒程式的例子,普通是像這樣寫:
void f() // 未考慮「異常安全」的版本
{
...
ThreadLock(...);
... // 在此區域內,不允許兩個執行緒同時進入。
ThreadUnlock(...);
...
};
以上的程式看起來沒問題,但要是在 Lock 和 Unlock 之間,程式發生
異常(而且被上層處理掉了),Unlock 就沒被執行到,就出大事了。因
此,最保險的方法是應用 RAII 的精神,把「鎖定」和「解除」的功能
封裝起來:
struct Lock
{
Lock(...) { ThreadLock(...); }
~Lock() { ThreadUnlock(...); }
...
};
如此,以上的 f 函式就可以改寫如下:
void f2() // RAII 版本
{
...
{
Lock lock(...);
...
} // OK, 不管是否發生異常,lock 物件一旦至此就會被解構。
...
}
著名的 Loki 函式庫[2][3]中的處理多緒程式的幾個 class,就是用這種
方式設計的。
有些 C++ 編譯器支援類似 Java 或 C# 的 try __finally 的功能,
就是為了解決在複雜程式迴路下,資源配置和釋放的問題。但其實
對 C++ 來說是不需要的,只要善用 RAII 就可以了。只要僅記「資
源配置即初始化」,這個基本原則,解構式就是最自然最方便的自
動化資源管理機制。
對於RAII的解說[4]
Reference:
[1]https://www.ptt.cc/man/C_and_CPP/D8D2/DA94/DDBB/M.1127480790.A.3B6.html
[2]http://darkranger.no-ip.org/content/loki-software-1998-2001
[3]http://blog.monkeypotion.net/gameprog/advanced/profiling-in-pooled-allocation-techniques
[4]http://www.cppblog.com/jinq0123/archive/2008/05/20/50522.aspx
2015年2月6日 星期五
關於資料庫(SQL)(mariaDB為MySQL被買走後的新替代品)
資料庫管理系統[1]:
即MySQL等等的資料庫軟體,簡稱資料庫,常用的規範是
在程式中使用資料庫:
需要使用ODBC(Open Database Connectivity)[2],是一個API
資料來源:
[1]http://zh.wikipedia.org/wiki/%E6%95%B0%E6%8D%AE%E5%BA%93%E7%AE%A1%E7%90%86%E7%B3%BB%E7%BB%9F
[2]http://zh.wikipedia.org/wiki/ODBC
訂閱:
意見 (Atom)
