November 14, 2011

Gitit - git based wiki

No comments:
最近又換了新的 wiki 系統來做個人筆記,雖然使用了 [pmwiki] 很長一段時間,遇上 [gitit] 之後我還是毅然決然地換過來。只因我發現原本希望 pmwiki + git 能夠做到的事情,在 gitit 上面更完整地做完了。

簡單來說 gitit 非常適合 git 狂熱份子

前些日子因為接案的需求,使用了不少 github 上面的 wiki。github 的 wiki 使用 markdown 的語法,甚至可以把整個 wiki clone 下來,在 local 端寫完東西之後直接 push 上去。這樣的使用情境非常符合我的需求,想說有沒有類似的 open source 工具,果不其然,用 haskell 寫成的 gitit 就擺在那裡。

gitit 有以下的特色是我特別重視的

  • 有搜尋功能,包括中文搜尋
  • 不要有 mysql 之類的 database
  • 不需要 Apache
  • 可以直接用 vim 等工具來編輯,紀錄東西就像寫文字檔一樣簡單
  • 使用 markdown 語法,寫完的文件能夠與其他工具接軌
  • 因此,網頁介面可以直接匯出 epub, odt...之類的檔案
  • 直接使用 git 管理 wiki 內容,寫程式習慣用 git 的人,寫起來毫無窒礙感
  • 由於使用 git 管理純文字檔,因此容易備份、重建


debian 系要安裝 gitit 非常簡單,一行指令就裝完了

$ sudo aptitude install gitit

啟動也非常簡單,只要開一個空目錄,在該目錄下執行指令

$ gitit

就會自動產生需要的檔案,並且啟動一個網頁伺服器。瀏覽器只要打開 http://localhost:5001 就可以存取了。在網頁介面上頭編寫內容之後,記下 comment 並儲存,檔案內容就會透過 git 紀錄在 wikidata 目錄底下。換句話說,只要備份 wikidata 這個目錄就不必擔心筆記會隨著硬碟損壞而消失。



gitit 有些預設的選項我不是很喜歡,譬如說
  • 預設要註冊一個帳號才能編輯 # 我是個人私用,理論上使用者只會有我一個人
  • 檔案上傳限制太小  # 所謂上傳檔案,就是把某個檔案加進 git 裡面
  • 預設版面我不喜歡  # 雖然我的螢幕不小,但我習慣 1024px 的寬度,太寬會讓文字排版變很醜
  • 我不喜歡原來的 logo
  • 預設的 html table 或是 code block 沒有特別的背景或是邊框

總而言之,我自己把我所需要的 config 打包了起來,大致看起來如下圖



使用方法也很簡單

# 產生一個目錄叫 wiki,取出我打包的東西之後在裡面產生一個 branch 叫 mynote
$ mkdir wiki && cd wiki
$ git clone git://github.com/walkingice/gitice.git wikidata
$ git --git-dir=`pwd`/wikidata/.git branch mynote
# 用來備份,別忘了在 myhost.net 上面產生一個 backup.git 的 git 目錄
$ git --git-dir=`pwd`/wikidata.git remote add myhost foo@myhost.net:~/path/to/backup.git
# 以後只要一行指令就可以備份了,放進 crontab 更是備份地神不知鬼不覺
$ git push myhost mynote:master
# 指定 config 檔來執行
$ gitit -f wikidata/gitit/config

必須注意的是,因為我更改了 config 檔,指定 static 與 templates 目錄位在 wikidata/gitit/ 底下,所以執行 gitit 的位置影響著 gitit 尋找 static templates 這兩個目錄。換言之,你要在 wikidata 這個目錄的上層目錄執行 gitit,才會正確找到這兩個目錄。

此外,gitit 還有 plugin 的功能,不過我不懂 haskell,就還沒有試過了。

你如果注意到有個 Category 的分類,其實它更像是 gmail 裡面的 label 功能,只要在某一個 page 的最上方加入

---
categories: Geek Tool
...

上方三個減號,下方三個點,中間補上 categories,這個 page 就會出現於 Geek 與 Tool 兩個分類之中。

Update:

用 Linux 系統的人,當然要把啟動的指令放在 rc 裡面,我在 /etc/init.d 底下新增了一個 launch-gitit
#!/bin/sh

### BEGIN INIT INFO
# Provides:          launch-gitit
# Required-Start:    $all
# Required-Stop:     $all
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start gitit
# Description:       start gitit by walkingice 
### END INIT INFO

set -e

GITIT=/path/to/your/gitit

case "$1" in
  start)
      cd ${GITIT}
      su walkingice -c "gitit -f wikidata/gitit/config &"
      ;;
  stop)
      killall gitit
      ;;
  *) echo "Usage: $0 {start|stop}" >&2; exit 1 ;;
esac

exit 0

我們就可以用指令啟動或停止 gitit
$ sudo /etc/init.d/lanch-gitit start
$ sudo /etc/init.d/lanch-gitit start

或著設定好,在系統啟動的時候就會自動執行
$ sudo insserv launch-git  # Debian 6 之後不再使用 update-rc.d


Update:

在意效能的人,打開 top 的時候可以看見 gitit 總是佔用的 1% 的 CPU resource,原因是 haskell 的 GC 反覆地在執行,個人使用的 wiki 由於修改量比較小,並不需要這麼頻繁的 GC 來消耗筆電電力。

對此,github 上面有一份說明,執行 gitit 的時候加入 runtime option 把 GC 關掉就好。很不幸地,至少 Debian 系已經把 runtime option 關掉了
gitit -f my.conf +RTS -I0 -RTS
gitit: Most RTS options are disabled. Link with -rtsopts to enable them.

查了一下文件,大體原因是打開 Runtime options 會在執行 CGI 的時候產生一些 security issue。因為我實在是受不了持續浪費 CPU/電力的事情,還是決定重編一次 gitit

準備編譯(Preparing)
$ mkdir /tmp/gitit; cd /tmp/gitit
$ sudo apt-get build-dep gitit # 安裝需要的 dependency packages,這時應該會安裝超肥的 ghc
$ sudo apt-get source gitit
$ cd gitit-0.10.0.1

加入 rtsopts (Adding link options)

平常透過 dpkg-buildflags 把編譯的選項動態加入,但是 gitit 的情況有點不一樣。它用 ghc 編譯,自帶一套編譯的邏輯,所以要先修改 gitit.cabal,找到 Executable gitit 的區塊把 -rtsopts 加入
Executable        gitit
....
  ghc-options:  -Wall -threaded -fno-warn-unused-do-bind -rtsopts

開始編譯

$ dpkg-source --commit  # commit your chages of gitit.cabal
$ dpkg-buildpackages # build deb file
$ sudo aptitude remove ghs # remove the HUUUUUGE ghc packages

接著重新安裝編出來的 deb 檔就行了。另外要注意的是,因為版號大小不同,升級的時候會蓋掉我們自己編譯的版本,只要打開 aptitude 把 gitit 用「=」給鎖起來不讓它自動升級即可。當然手動升級的時候還是可以更新,不過又要重編一次了 :P

現在你的 gitit 可以用 +RTS -I0 - RTS 了,enjoy it

Update:

如果在 Debian 想要用 plugin,記得要安裝 libghc-gitit-dev

August 7, 2011

Klip.Me and Kindle

2 comments:
前幾天 Kanru 介紹了 Klip.Me 給我之後,一用之下驚為天人,深深地覺得有 Kindle 真是太好了。

背光螢幕盯久了總是容易累,閱讀許多文字的頁面時,用 Kindle 還是舒服些,Klip.Me 的網站把這件事情簡化到一個按鍵就能做完:把你現在打開的網頁,傳送到 Kindle 裡面來閱讀。

從使用者的角度而言,只需要關心兩件事情:按下 Send 鍵後選 OK,約莫一分鐘便能從 Kindle 上面閱讀,就這樣!

文章會先傳送到 Klip.Me 的網頁,接著網頁會發信到你在 Amazon 上面的信箱,你的 Kindle 會透過網路連過去收信,接著就會出現在 Kindle 裡面了。

使用上非常快樂,設定上稍微麻煩,不過只要麻煩一次即可。底下分成三個步驟解說
  1. 設定 Amazon
  2. 設定 Klip.Me
  3. 測試

July 5, 2011

pmwiki + git

No comments:
身為一個記性不好的阿宅,最煩惱的一點莫過於工作上閱讀過的東西,過了一段時間就忘光光。當然我也有做筆記的習慣,但有時候某些指令就只記在本子裡,偏偏需要用到的時候本子就不在身邊。

於是乎,我在自己的電腦裡面弄一個簡單的 wiki 來作筆記。

非常感謝網路上許多朋友的幫忙,尋找 wiki 的時候給了很多建議。當時朋友給的建議我都有一個個去嘗試,最後根據我的需求決定了 pmwiki,一直用到現在有一年多的時間了。

我的需求大致如下,pmwiki 不見得全部涵蓋
  • 有搜尋功能,包括中文搜尋
  • 不要有 mysql 之類的 database
  • 容易備份
  • 容易重建
  • 最好不要有 Apache

作筆記這種事情,最昂貴的就是投注知識的時間,寫在紙本上如果弄丟就什麼都沒有了。雖然用數位的方式來紀錄,理論上來說要更容易保存。但我們都知道,硬碟很容易壞,事實上我們更常弄丟電腦裡的資訊。

解決這個問題的方法就是異地備援,但是身為一個人,尤其是現代人,最怕的就是麻煩。如果備份與回復的方式很麻煩,相信沒有人會持續備份。

選擇 pmwiki 的原因在於它不需要 mysql,所有的資料都用純文字儲存,而且支援中文搜尋。東西寫多了就是需要靠搜尋。

既然是純文字,搭配 git 來作管理就變得很方便。於是乎,備份或是重建 wiki 的動作,就僅僅只是 git 的 push 或是 clone 而已。這是我每天都在做的事情,太簡單了!

寫了一個很簡單的小 script,執行一次它就會以當下的時間為 log 做一次 commit,並且 push 到 remote server 去。

配合 crontab 每天執行一次,就此我只要專心寫我的筆記就好。換新電腦的時候,只要架好 apache,一個 git clone 的指令我就可以繼續筆記。

Installation

Apache
很不幸地,還是需要安裝 Apache。詳細的過程我忘記了,依稀記得需要兩個模組才能夠在自己的家目錄底下執行 pmwiki
$ sudo aptitude install libapache2-mod-suphp libapache2-mod-php5
$ sudo gedit /etc/suphp/suphp.conf  # 把 check_vhost_docroot 的值由 true 改成 false
Git
$ mkdir $HOME/public_html
$ cd $HOME/public_html
$ git clone git://github.com/walkingice/pmwiki.git
到這邊開始,就有 pmwiki 可以用了,在瀏覽器打開 127.0.0.1/~YOURID/pmwiki/pmwiki.php 應該就能看見。

How to backup
首先你要在別的機器上面有一個 git repository,假設那台機器的位置是 git.my.server,你在上面的帳號叫做 foo
$ ssh foo@git.my.server
$ mkdir mywiki
$ cd mywiki
$ git init --bare
接著進到自己電腦裡面的 pmwiki 目錄底下編輯 updater.pl,把幾個值改成
my $LOCAL_BRANCH  = 'master';
my $REMOTE_NAME   = 'brainless';
my $REMOTE_SERVER = 'foo@git.my.server';
my $REMOTE_BRANCH = 'master';
執行 ./updater.pl,它應該會開始把東西 push 上去,以後只要定期跑 updater.pl 就可以了。
其中 REMOTE_NAME 只是替 remote server 取一個名字而已,隨便取沒關係。如果你會使用 git,希望在自己家裡面弄好幾個筆記的 branch,才需要動到 LOCAL_BRANCH 跟 REMOTE_BRANCH。

Update:
Xdite 建議了 gollum,有興趣的鄉親也可以試試看
https://github.com/github/gollum

December 19, 2010

混很大 蛙咖啡混音派對簡記

No comments:
先給任何為了查詢蛙咖啡地址而逛到這裡來的人一點訊息:Google Maps 上面只會顯示大略地址,位在八里的蛙咖啡就在關渡大橋的下方。關渡大橋的兩側皆有人行道/自行車道,靠近北邊八里的那一側出口就可以看見蛙咖啡。今天晚上要離開時在門口拍了這張照片,可以從照片中猜出蛙咖啡的位置,也說明該處夜色不錯。


要從捷運竹圍站走到關渡大橋,出站之後面對民權路,在捷運站的左側有一個地下道,可以繞過捷運接上自行車道,從那邊才能上關渡大橋。

好了,回到活動本身。一段時間前為了投影片的授權,想要找 CC 授權的圖示時,偶然看見這個活動 - [混很大 蛙咖啡混音派對]。我個人在寫程式的時候非常喜歡聽 Vocal Trance,對於這些音樂究竟是如何被產生有著濃厚的興趣,雖然毫無相關知識也來不及害羞,本著鄉民看熱鬧的心情當下就報了名。

為何前面要詳記道路資訊?話說今日我從竹圍站出來就照著腦海中的地圖趕路,怎知怎樣都上不了關渡大橋,總是在民權路上隔著捷運鐵軌望關渡大橋流淚,從竹圍站一直走到快要關渡站才找到路,又從關渡站走回關渡大橋,打開 Google Maps 你就會知道我到底走了多遠 (淚目)。問我為何不搭計程車?都走了那麼多路,接下來就算要繞台北市一圈我也不肯放棄!!(再度淚目)

一直以為這個活動會很輕鬆簡單,大概是大家坐下來喝咖啡聊是非,到了活動地點才知道主辦單位很認真!座位與單槍都安排好就別說了,兩旁還有兩個超大音箱,每個講師都帶足了混音用的傢伙以及一票的另狗電腦,用心之程度一掃我剛剛走錯路的陰霾。

謝謝主辦單位,今天的活動讓我非常開心,看到很多充滿創意的表演,有前衛派也有實用派,由於現在還要趕工寫程式,恕我不詳細紀錄今天的活動,就跳著說幾項意思一下。(開始原地跳.....)

李駿提到了一個詞:「Circuit Bending」,Wikipedia 上面的 [解釋] 是「拆解機器並加入一些元件,讓它發出原先意想不到的聲音。那些機器可能是數位合成器,甚至是小孩的玩具」,提到這就不免想到 [Holy Fuck]。附帶一提我很喜歡 Wiki 上面的一段話,關於 Circuit Bending 的哲學:「那是電路的平行世界,我們覺得它並不存在,但事實上它就是在那裡」。個人則是覺得 Holy Fuck 呼應了張耘之老師所提及,這些前衛充滿藝術性的東西可以試著跟流行文化做結合。

矩陣老爸的三位講師分別演示了 Pure Data 與 Processing 的操作過程,後半段 Live Demo 時,[阿亂] 一反我們平常 MTV 中用影像動作去配合音樂節拍的邏輯,他用影像來指揮聲音,而且他用 Playstation 的搖桿來操作影像,十分有趣。



MoShang 的音樂比較偏向 Lounge,有著台灣老婆的他中文其實很不錯,他擅長用影片去解釋他如何[做音樂],今天他在現場解釋如何用公開的 Vocal 素材去做出自己想要的音樂,好比他用 Public Domain 的吟詩人聲,調整後 mix 出他的音樂。有興趣的可以看看他的網站[MoShange.net],還有 PodCast 可以訂閱唷!

Well, 夜深了,我想應該要趕快開始寫 code 了 Q__Q

November 7, 2010

紀錄片 光影豔紅菱

1 comment:
實質上來說,應該這才是新鞋櫃的第一篇文章,總是要擠點東西出來否則朋友還以為這邊是假的。

說說金馬影展的事吧。08 年初上台北工作,09 年文青一詞大行其道之後,才從幾位宅青朋友口中得知有金馬影展這東西。湊熱鬧不落人後,今年用 ibon 買了幾張票也來看看有什麼稀奇古怪的電影。

在這邊小小抱怨一下,劃位的時候似乎一位難求,因為不是搶在第一時間買票,這場光影豔紅菱理所當然地分到奇爛無比的位置。誰知電影開始了,中間最佳觀影位置只有三三兩兩為數不多的人,那麼 ibon 劃位又是怎麼回事?Bug 嗎?假如中間位置都被公關票用去,只能說老實買票的人是笨蛋。




光影豔紅菱是一部紀錄片(我竟然花錢去電影院看紀錄片),紀錄傑克卡迪夫(Jack Cardiff) 一生的電影軌跡。執導或拍攝了上百部電影,諸如非洲皇后、紅菱豔,還有一部就是大家都看過的第一滴血。他是第一位獲得奧斯卡終身成就獎的攝影師,以表彰他卓越攝影技巧對於電影的貢獻。

片頭一開始就以奧斯卡頒獎典禮,達斯汀霍夫曼的介紹作為開場:「在座的我們都還沒出生的時候,他就已經在拍電影了」。此言不假,Dustin Hoffman 於 1937 年生,而 1918 年 Jack Cardiff 四歲的時候就已經在一部默片 My Son, My Son 裡演出,年紀漸長後也進入片廠工作。

Cardiff 回憶起當年因為膠片很貴,每一次拍攝工作都很重要,於是決定「開拍」這個重要動作理所當然要由導演下指令。說穿了就是打板喊「第 n 幕,Action!」不過導演們隨即很快就發現這個工作很無聊,於是交給了小助手們去做,Cardiff 就從打板小弟開始當起。

古早的攝影器材比起現在龐大許多,拆開古董級的裝置後 Cardiff 詳細地說出光線如何進入,如何在裝置中作用。好像工程師一般把弄著手中的工具。除此之外 Cardiff 很喜歡繪畫,常常臨摹許多畫家的作品。他戲稱:「因為我買不起,只好自己試著畫一張。沒錯,這是複製,但是在複製之前,我也必須花很長一段時間去分析畫」在這種興趣的訓練之下,Cardiff 對於顏色的掌握幾乎無人能出其右。



紀錄片到這裡,很慶幸自己是在電影院裡面看這個片段,要是在電腦螢幕上面看想必色偏會讓我摸不著頭緒。有一幕是 [Black Narcissus] (黑水仙) 的片段,一位修女背對螢幕跪著,金黃色的陽光灑進整間教堂,我瞬間整個被顏色感動到心頭震了一下(梵谷是對的!)(對了,不是我抓的這張擷圖),喜歡印象畫派的 Cardiff,拍出來的畫面真的是「畫」。此外 Cardiff 還解釋了許多光線運用的方式,自此才頓悟許多好片為何經典。

繪畫的能力幫了他許多忙,有時天候不佳,Jack Cardiff 竟然在玻璃上面畫出天空,透過鏡頭拍出當時根本沒有的天氣。拍 [七海霸王] 其中一幕,海面的霧氣不夠,便對鏡頭吹一口氣製造出濃霧與淡出的效果。又或著場景寬闊而攝影棚不夠大,上方的燈架拍攝時一定會入鏡,不但再次在玻璃上作畫以擋住燈架,還利用燈光在玻璃上的反射模擬太陽。克服種種不可能,用鏡頭拍出實際上沒有或是難以促成的事,亦是這位攝影師偉大之處。看看黑水仙的 [Trailer],這是 1947 年全程在片廠拍出來的電影。

即使年事已高 Cardiff 依然持續拍片,物換星移之下許多事情也讓他有點不習慣,好比拍攝的時候人們會說:「你不用擔心,後製組會處理掉這些問題」。如今電影不乏特效,以前要倚靠攝影師的巧思,現在可以靠後製特效解決很多問題。Cardiff 並不會像我這種不入流的人痛罵後生晚輩不長進,反倒是自我調侃了一番,大師的溫暖風采表露無遺。

「He is nobody」Cardiff 笑著說他現在被年輕人這麼認識著。憑藉著對電影、攝影的熱情,持續在電影界工作:「我不喜歡退休那樣的字,可以的話我希望能夠死在片場。」

Jack Cardiff 出生於 1914 年,2009 年在自然的情況下辭世,享年 94 歲。