2009年10月22日 星期四

Emacs強大的Org Mode (持續更新)

本來以為Org Mode只是無聊的TODO模式,沒想到還有很多強大而且有用的功能,我又大失敬了!

  • 編大網 - 有顏色highlight顯示, 自動縮排, 加tag, 分類

  • TODO - 可以和calendar/diary搭配, 有DEADLINE, SCHEDULED, DONE等關鍵字

  • 超方便編表格 - 文字檔格式, 自動用空白幫你排的漂漂亮亮(但中英文混合字還是會沒對齊)

  • Agenda buffer - 以星期為單位的備忘錄,一目了然

可以拿來作很紅的GTD(Getting Things Done),暫時先把Remember The MilkGoogle Calendar放一邊了。

目前只是剛上手,等用一陣子後再來寫一下心得~

快速入門
開一個副檔名為org的新檔,就可以編了:
* 主標題
** 副標題 (按TAB會折疊)
*** 請選擇 [/]或是[%] -> 會自動顯示[1/2]或[50%], 要打C-c #啟動
[] 選擇一 (checkbox)
[X] 選擇二

[[link][說明]]

先打這樣就好:
|Name|Phone|Age|
|-
|Peter|1234|17|

再按一些Tab,就會排的漂漂亮的:

| Name | Phone | Age |
|-------+-------+-----|
| Peter | 1234 | 17 |
| Anna | 4321 | 25 |


自己常用的快速鍵
* 一般
M-S-ENTER (增加新item)
C-c C-c (點選checkbox)
C-c , (加入priority)
Tab (折疊)
S-Tab (全部折疊)
M-S Left/Right | 減/加星(層級)
C-c [ / ] 此org檔加入/移除agenda
** tag
C-c C-q (edit tag)
C-c \ (search tag)
** timestamp
也可以在calendar上用滑鼠點
C-c . (加timestamp)
C-c C-d (加DEADLINE)
C-c C-s (加SCHEDULED)

* Outline
C-c C-n/p (下/上個標題)
C-c C-f/b (下/上個同級的標題)
C-c C-u (上一級標題)
C-c C-j (jump?)

* 表格 Table
M-Left/Right (欄位左/右移)
M-S-Left (砍此欄)
M-S-Right (加新欄至右邊)
M-Up/Down (此列上/下移)
M-S-Up (砍此列)
M-S-Down (加新列至下行)

* Agenda Buffer
p/n (上/下)
L (另一視窗顯示org檔,並畫面置中)
TAB(另一視窗顯示org檔)
ENTER (進入org檔, 並關掉agenda)
F (跟隨模式, 移游標, 另一視窗的org跟著動)
* 輸出 export
M-x org-export-as-html 輸出HTML
#+OPTIONS: "\n:t" 換行, 把\n變成


設定(.emacs)
Emacs22.1版後就有了,所以無需再安裝。

;(global-set-key "\C-ca" 'org-agenda) ; 說明文件是用這個顯示agenda mode, 但我用以下代替
(global-set-key [f11] 'org-agenda) ; 按F11就顯示agenda mode比較方便
(setq org-agenda-include-diary t) ; 整合diary mode和org的agenda mode


The Org Manual (一頁HTML)
Org tutorials 一些教學文件和強者的使用經驗談

不過在org mode裡會跟WindMove(按Shift和方向鍵可以在各視窗間移動)和CuaMode衝突

Emacs的calendar-mode

.emacs 設定
;;;; calendar
(setq calendar-week-start-day 1) ; 第一天為星期一
(setq view-diary-entries-initially t) ; 開calendar時也顯示diary
(setq mark-holidays-in-calendar t) ; 開calendar時也顯示 holiday

;; 隱藏跟我無關的節日
(setq holiday-general-holidays nil)
(setq christian-holidays nil)
(setq hebrew-holidays nil)
(setq islamic-holidays nil)
(setq solar-holidays nil)
(setq bahai-holidays nil)

; 按p C顯示天干地支, from http://forum.slime.com.tw/post1100258-1.html
(setq chinese-calendar-celestial-stem
["甲" "乙" "丙" "丁" "戊" "已" "庚" "辛" "壬" "癸"])
(setq chinese-calendar-terrestrial-branch
["子" "丑" "寅" "卯" "辰" "巳" "午" "未" "申" "酉" "戌" "亥"])

;; diary
(setq diary-file "~/mydiary") ; 設diary檔案路徑(預設是diary)
; diary-mode fancy display 炫麗顯示
(setq view-diary-entries-initially t
mark-diary-entries-in-calendar t
number-of-diary-entries 7)
(add-hook 'diary-display-hook 'fancy-diary-display)
(add-hook 'today-visible-calendar-hook 'calendar-mark-today)
(add-hook 'fancy-diary-display-mode-hook
'(lambda ()
(alt-clean-equal-signs)))
; via http://www.emacswiki.org/emacs/DiaryMode

; set date format
(setq calendar-date-display-form '(year "-" month "-" day))
; diary檔用iso日期格式(預設是美國式)
(setq calendar-date-style 'iso)

(setq local-holidays '((holiday-fixed 10 2 "我生日")
));加很多人的生日


操作

. (today)
M-}/{ (上/下個月的同一天)
M-a/M-e (上/下個月的頭/尾)
M->/< (去/明年)
d (show diary date)
s (show diary file)
i d (insert date)
i a (insert anniversary)

The Calendar and the Diary (Emacs Manual)

漸漸捨棄google calendar...

2009年10月21日 星期三

Emacs分頁瀏覽 tabbar.el

Emacs也可以分頁瀏覽,但要安裝tabbar.el。
原本emhacks上的沒有再更新了,是1.3版的,Aquamacs Emacs有改了一個2.0的版本,長的也比較漂亮(下載: tabbar.el),另外debianemacs-goodies-el套件也可以找到,跟Aquamacs是一樣的。

; 不要自動分組 (全部分在同一組)
(setq tabbar-buffer-groups-function
(lambda ()
(list "All"))) ;; code by Peter Barabas


參考:
http://www.emacswiki.org/emacs/TabBarMode
http://www3.ntu.edu.sg/home5/pg04878518/EmacsTools.html (tabbar設定)

dot (未完)

使用中文必須指定字型
fontname="/usr/share/fonts/truetype/fireflysung.ttf"
node[fontname = "PMingLiu"];
// node[fontname="simhei.ttf"];
//node [ fontname = "C:\Windows\fonts\kaiu.ttf" ];
node [ fontname = "C:\Windows\fonts\kaiu.ttf" ];
node [ fontname = "C:\Windows\fonts\times.ttf" ];


註解用C++的/* */或//都可以

graph
非指向性(沒箭頭的), 連接用--
digraph
指向性, 連接用->

宣告為graph, 用->就無效, 反之亦然


rankdir=TD
rankdir=LR

大括號
{}

subgraph cluster_xxx


Node Shape
Arrow Shapes [arrowhead=dot]
Color Names

2009年10月15日 星期四

MYSQL如何選數量最多前10名 SELECT TOP 10

要選數量最多前10名(排行榜)
SQL Server可以用

SELECT TOP 10 * FROM item_table ...

但是MySQL就沒有TOP可以用,所以就要用COUNT, ORDER BY和LIMIT來實現
以下按照type分組, 取每組最多資料的前10名:

SELECT COUNT(*) as sum FROM item_table GROUP BY type ORDER BY sum DESC LIMIT 10"

2009年10月5日 星期一

PHP的Data Filtering初步整理

為了過濾使用者輸入的資料,PHP 5.2.0後就有filter extension可用,主要分成二種: validation和sanitization。validation是過濾資料形態是否為email, ip, url或為int, float, boot...等。sanitization是會自動把不該有的字元移除。不過drupal的討論裡看到用filter_var($value, FILTER_VALIDATE_URL)會有很多錯誤。

相關的函式:
htmlspecialchars - 轉換HTML的特別字元
'&' (ampersand) becomes '&'
'"' (double quote) becomes '"' when ENT_NOQUOTES is not set.
''' (single quote) becomes ''' only when ENT_QUOTES is set.
'<' (less than) becomes '<' '>' (greater than) becomes '>'

htmlentities - 全部字元都轉換

差別:

$str = "test>ä";
echo $str; //test>ä
echo htmlentities($str); //test&gt;&Atilde;&curren;
echo htmlspecialchars($str); //test&gt;ä

2009年10月4日 星期日

C/C++ 運算子優先順序

只列出常用到的:

()
foo++ (後置)
foo-- (後置)
----------------
++foo (前置)
--foo (前置)
!
~
&
----------------
*
/
%
+ (二元運算)
- (二元運算)
<<
>>
<
<=
>
>=
==
!=
& (位元運算AND)
^ (位元運算XOR)
| (位元運算OR)
&& (邏輯)
|| (邏輯)
= (設定)
*=, /=, %=, +=, -=