2009年8月24日 星期一

emacs設macro

改程式像我這種健忘又駑鈍的最常做一個動作就是把這行註解起來,然後再複製一行下來改,Vim裡可以可方便的用yy複製一行,然後註解掉, 再p貼上就可以了‧Emacs雖然有Ctrl-C Ctrl-C加註解,但是不是我要的...就自己錄一個macro來試試, 做了三個:

Alt-yy就跟Vim的yy指令一樣
Alt-yyc就是複製一行再貼上,並且把上一行註解起來
Alt-cc就是到這行開頭加//註解

;; my macro
(fset 'yy
[?\C-a ?\C-@ ?\C-e ?\M-w])
(fset 'yyc
[?\C-a ?\C-@ ?\C-e ?\M-w return ?\C-y up ?\C-a ?/ ?/])
(fset 'cc
"\C-a//")

駑鈍如我覺得打Alt太麻煩,所以用function key更快
(global-set-key [f2] 'yy)
(global-set-key [f3] 'yyc)
(global-set-key [f4] 'cc)

註解只用//是很呆的事,像python或shell就不適用了,相信會有更聰明的做法。

----
後來發現真的有很帥的方法!! 用elisp神奇的advise功能擴充~~
http://www.emacswiki.org/emacs/SlickCopy

沒有選取時, C-w會砍整行, M-w會複製整行, 就像Vim的dd和yy

PHP的regular expression

原本的一些函式如ereg_開頭的或split等在PHP 5.3版就要丟棄、6.0則會移除。ereg不是binary safe, 也許有心人可以跳過檢查,輕易注入null bytes: 手冊有寫,所以要聽。現在最好使用PCRE(Perl-Compatible)類的, 也就是preg_開頭的。

MySQL的GROUP_CONCAT

現在才發現有這種好功能:如果抓出來的資料有很多筆,但是又只想顯示在一個row裡就可以直接用GROUP_CONCAT搞定,讚!
GROUP_CONCAT([DISTINCT] expr [,expr ...]
[ORDER BY {unsigned_integer | col_name | expr}
[ASC | DESC] [,col_name ...]]
[SEPARATOR str_val])

要搭配GROUP BY才可以用
MySQL手冊

emacs的unicode

emacs 23有了unicode支援
趕快把預設改成utf-8,才有安心的感覺~
;; set up unicode
(prefer-coding-system 'utf-8)
(set-default-coding-systems 'utf-8)
(set-terminal-coding-system 'utf-8)
(set-keyboard-coding-system 'utf-8)

2008年6月9日 星期一

DirectShow on Windows Mobile 5/6的Debug版

Windows Mobile 5.0 PocketPC SDK和Windows Mobile 6.0 Professional SDK沒有strmbasd.lib, 所以Build Debug版有問題。難道要自己去build debug的baseclass?!

2008年4月28日 星期一

__GSHandlerCheck

舊的VS2005 project重新compile發生以下錯誤:
error LNK2001: unresolved external symbol __GSHandlerCheck

把C/C++ /Code Generation的Buffer Security Check設成no (/GS-)

詳細看:

2008年4月16日 星期三

pow() 和log10()在Visual Studio 2005有C2668的error

程式專案用Visual Studio 2005開時, 會發生以下錯誤訊息

error C2668: 'pow' : ambiguous call to overloaded function

MSDN說: 在Visual C++ 2005, pow(int, int)不支援重載了,要把第一個參數轉換(cast)成double, float, 或是long double

log10也是一樣, 原本log10(j)要改成
log10( static_cast(j))