Time of Update: 2018-12-04
字元類別參考文檔:http://www.gnu.org/software/emacs/manual/html_node/elisp/Char-Classes.html#Char-Classes字元類別使用時需要在外面再加上方括弧,比如字串:abcd 3 ab\ ef要想匹配裡面的數字,需要使用字元類別: [:digit:]Regex寫法是:"[[:digit:]]"[:xdigit:] 用來匹配16進位數字forward-sentence命令運行命令:forward-sentence
Time of Update: 2018-12-04
自訂函數用Emacs建立一個test.el檔案。編寫如下代碼:(defun add2 (x) (+ 2 x))(add2 8)第一段是定義了一個函數add2,傳遞任意數值x,都會加上2後返回,在這個函數的最後的括弧後面運行C-x C-e,建立該函數。然後在到第二段調用代碼最後面執行C-x C-e在Mini-buffer可以看到和為10.如果想要調用一個不存在的函數,解析器會報錯:(void-function
Time of Update: 2018-12-04
false 和 true如果一個值不是false(或nil)的,都認為是true.symbol t 的值是true.symbol nil 的值是false.if語句下面的代碼列印出"true"(if 'true (message "true"))注意,true前面必須加單引號,否則報錯:error: (void-variable
Time of Update: 2018-12-04
今天一個server程式出現問題,在開發機器上正常,到了產品伺服器上就總是崩潰。原因查了很久,總是報shared_ptr內部的錯誤。不知為什嗎?最後決定提升GCC編譯器的warning
Time of Update: 2018-12-04
幾個檔案說明:~/.newsrc如果訂閱了某個新聞群組,那麼該檔案就會記錄下你訂閱的新聞群組,比如我的檔案內容如下:休閑娛樂.諷刺與幽默: 1-669117,749271當然如果某個文章被閱讀過,也會被記錄下來。~/.newsrc-dribble 檔案是為了在emacs crash的之後(此時.newsrc檔案沒有被寫入正確內容),能夠還原回去。該檔案是自動儲存的。下面的文章解釋了dribble
Time of Update: 2018-12-04
方法很簡單,用update-alternatives命令 update-alternatives --config editorThere are 5 choices for the alternative editor (providing /usr/bin/editor). Selection Path Priority Status-----------------------------------------------------------
Time of Update: 2018-12-04
最簡單的形式(while TRUE-OR-FALSE-TEST BODY...)比如:(setq x 10 total 0)(while (plusp x) ; while x is positive (incf total x) ; add x to total (decf x)) ; subtract 1 from
Time of Update: 2018-12-04
Ubuntu內建的apt-get install方式安裝的CMake版本有點老。項目中需要最新版本的CMake 2.8.9, 這個版本還是採用CPack打包的,為了體驗一把CPack的發布的便利性,就試用一下。首先卸載已經安裝的舊版的CMakeapt-get autoremove cmake然後下載:cd /usrwget http://www.cmake.org/files/v2.8/cmake-2.8.9-Linux-i386.tar.gz解壓:tar zxvf
Time of Update: 2018-12-04
出於一個美好的目的,當代碼提交之前,需要自動通知相關人員進行代碼review,當review代碼的人批准後才能將代碼提交到代碼倉庫中,否則修改後再次review。項目的工程師可能不在一個地方辦公,比如我們ESRI,工程師分布在不同的國家的不同部門。因此需要Email和Web網站來協同工作。我們的代碼管理也是多種多樣,美國團隊使用Starteam,我們中國使用Git. 本來在Git之上有一個很好的review工具,叫做gerrit。不過考慮到能夠照顧不同的倉庫管理軟體,還是先試用Review
Time of Update: 2018-12-04
這是一個簡單的練習,如果一個list中有幾個數字,寫一個函數,找出最大值。(setq number-list '(5 8 9 10 87 34))(defun max-number(n-list) (let ((tmp (car n-list)) (max tmp)) (while n-list (setq tmp (car n-list)) (if (> tmp max) (setq max tmp)) (setq n-list (cdr
Time of Update: 2018-12-04
最重要的,story和task的tracker不能相同。否則在taskboard中會將task和story並列顯示,儘管它們是父子關係。因此比較好的做法是,story使用redmine預設的tracker:Support, Bug 和Feature. 而另外建立一些tracker用來跟蹤task。這時需要管理員登入,在http://localhost/trackers 頁面中建立新的tracker,比如Dev task, Test case task和 Test task.
Time of Update: 2018-12-04
參考文檔:http://www.gnu.org/software/emacs/manual/html_node/elisp/Macros.html#Macroshttp://www.emacswiki.org/emacs/EmacsLispManual_Chinese_Notes#toc54簡單的例子:文檔中少了一行代碼,我補上:(defmacro inc (var) (list 'setq var (list '1+ var)))(setq x 1)(inc
Time of Update: 2018-12-04
有時候同事會不小心安裝中文版本。不是中文不好,而是出錯資訊也友好的變成中文後在互連網上經常找不到答案。用下面的方法可以還原回英文系統。1.到/etc/default/locale檔案中將所有的 zh_CN替換位en_USzh 替換成en2.安裝en_US語言套件sudo apt-get install
Time of Update: 2018-12-04
本文描述如何使用Gerrit2.4.2設定審批次程序。首先Gerrit中已經有了兩個帳號,一個是我的帳號,屬於管理員,另一個是工程師。本文就描述一個簡單的審批次程序:工程師提交代碼,我Review通過,然後將代碼提交。step1:
Time of Update: 2018-12-04
互動式編寫Regex比如buffer中有一個字串abcd 3運行命令:M-x:re-builder會出現一個小buffer,在雙引號裡面輸入Regexd ,上面有字串的buffer馬上高亮d字元,如果輸入3,則高亮3字元。特殊字元參考文檔:http://www.gnu.org/software/emacs/manual/html_node/elisp/Regexp-Special.html#Regexp-Special'.' 代表任意一個字元(除了分行符號),因此"a.c"能夠匹配abcd
Time of Update: 2018-12-04
最新CryptoPP32.dll封裝了Crypto++551的常用功能. 使用VC80編譯. 使用者需要首先編譯Crypto++551的靜態庫, 然後就可以編譯CryptoPP32了. 新的CryptoPP32去除了STL資料類型的介面, 改用C類型資料. 這樣, 整個庫可以很方便的被C語言調用. 或者封裝成C動態庫(需要代碼做些改變). 下載全部工程檔案:上傳失敗, 等改日再傳!包括了CryptoPP32, Crypto++551和Crypto++54.工程採用VC8.0編譯.
Time of Update: 2018-12-04
多人協同開發,使用Git經常會看到警告資訊包含術語:fast forward, 這是何義?簡單來說就是提交到遠程中心倉庫的代碼必須是按照時間順序的。比如A從中心倉庫拿到代碼後,對檔案f進行了修改。然後push到中心倉庫。B在A之前就拿到了中心倉庫的代碼,在A push成功之後也對f檔案進行了修改。這個時候B也運行push命令推送代碼。會收到一個類似下面的資訊:chenshu@sloop2:~/work/189/appengine$ git pushTo ssh://csfreebird@10.1
Time of Update: 2018-12-04
為什麼分兩個步驟:先展開宏,再求值。因為單單有一個宏定義(這裡稱macro body)是不能在編譯時間求值的,宏的參數還沒呢。宏的參數必須要等到編譯器看到宏調用代碼的時候才能知道。因此將宏參數傳遞給宏定義,然後展開宏再求值,是唯一能行的方法。很好理解,這裡就像C++的一樣。反引號(Backquote)`最簡單的情況下,和‘功能相同,代表不要對一個list求值 `(a list of (+ 2 3) elements) ⇒ (a list of (+ 2 3)
Time of Update: 2018-12-04
下面的宏實現了一個邏輯:首先將expression求值,然後賦值給var如果var為真,則執行then參數求值後的運算式否則執行else參數求值後的運算式,else參數為可選。感謝danlei帶來的例子。該文章他的回答解釋了為什麼比C/C++宏強大的原因。http://stackoverflow.com/questions/10535684/lisp-macro-special-usage/10539594#comment13658407_10539594(require
Time of Update: 2018-12-04
install CMake我用CMake並不關注它的跨平台特性,因為我只專註於64位 Linux C++ server領域。sudo apt-get install cmake# cmake --versioncmake version 2.8.7HelloWorld工程mkdir -p examples/helloworldcd examples/helloworld建立main.cpp 檔案,代碼如下:#include <stdio.h>int main(){