2014年3月22日 星期六

一句話說明心智圖的原理

http://actsmind.com/blog/archives/3309

"要記憶大量資訊資料的秘密就是要有區分類別(categories)和層次結構(hierachies)。心智圖法發明者Tony Buzan在《The Mind Map Book》一書中將它稱作『基本序列點子』(Basic Ordering Ideas)。"

我覺得就是樹狀結構的建構。是同一層次的概念?還是不同層次的概念?這是把概念結合為沒有冗餘的心智圖的心法。否則,建構得不好的心智圖,一樣是難以了解、記憶的。

2014年3月20日 星期四

emacs打開dos/windows文件出現^M的處理

步驟可參考 http://ergoemacs.org/emacs/emacs_line_ending_char.html

像c語言的\n這種跳脫字元,以emacs的術語來說叫做"C Escape Code",emacs的世界有它自己的表示方式叫"caret notation",其間的對應可參考:

http://ergoemacs.org/emacs/keystroke_rep.html

以\n為例,其caret notation為^J

2014年3月6日 星期四

ubuntu上用python的pdfminer進行pdf文字抽取

參考 http://imsardine.wordpress.com/page/5/

ubuntu上可以如此安裝:

sudo apt-get install python-pdfminer

2014年3月1日 星期六

ubuntu上用beautifulsoup進行網頁資訊擷取

要說javascript因為jquery而脫胎換骨實不為過,這很大一部分要拜精心設計的selector語法所賜。而在python中,託其執行期環境之福,結合上beautifulsoup也可以做到大部份相同的事。再搭配上瀏覽器本身的開發者工具,例如在chrome中按滑鼠右鍵,選"檢查元素",即可查到該元素的tag及原始碼位置。

官網 http://www.crummy.com/software/BeautifulSoup/

中文化文件 http://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html

安裝指令

sudo apt-get install Python-bs4 #官網文件中少寫了sudo


python的中文教學資源

如果是初心者,Python Tutorial 系列文章,算是crash course(速成)的好開始

如果已經精熟其它OOPL,那麼以下兩個網站我覺得可以帶領讀者快速上手

1.程式語言教學誌 :架構比較古典而詳盡,建議挑想了解的部分看就好

2.Python 學習筆記 :特別把進階的東西放到最後面,即使從頭看起負擔也不會太大




2014年2月7日 星期五

長時間沒有merge的branch要如何在master已有多個commit後安全的將delta匯入(以git版本控制為例)==>你要的是rebase

我所面臨的情境是這樣的,最開始是clone了一個project下來自己改自己用,沒想過要push回remote repo,然後時間飛快過了一年,驚覺master的子版本已經跳了3次,已經不知道要怎麼merge起了。

參考 wiki對merge的解釋 ,可以了解,由於使用了"共祖"的觀念(嗯…怎麼有點演化生物學的感覺),經由 diff3  / three-way merge 的使用,各段程式碼中,三者皆同的部分是不用更動的,兩兩相同時,只有本地分直不同者也是不用更動,只有遠端不同時則使用遠端版本,只有共祖不同時則發出衝突訊息。只要本地及遠端的變更沒有重疊到,基本上都能合併出正確的程式碼。由於:

git pull = git fetch + git merge (所以想要看 diff report 的話就不能直接 pull,要先fetch,再diff,再pull)

所以原則上會使用一次到位的 git pull 指令。但是請參考 "使用 git rebase 避免無謂的 merge" 這篇文章,顯然當我們手上開發的 feature 和 master 沒有什麼重疊的時候,一堆因為與遠端 merge 進而產生出來的節點會讓線圖太複雜,此時 rebase 是一個更清爽的解決方案,它減少了每次因為 merge 而產生出來的那個 dummy 節點。 wiki 上也對這個過程作了一些解釋,基本上就是說,每個 commit 間的 patch 都會同步進行調整演算,讓 rebase 能得到正確的結果。所以下達以下指令:

git pull --rebase

要指定非預設repo/branch時則應下達以下指令:

git pull --rebase repo branch

ps.更詳細的操作可參考 pro git ,簡要列表可參考 版本控制系統 Git 精要 ,branch 圖解還可以參考這篇, rebase 還可以參考這篇 和更詳細的Git-rebase 小筆記
ps2.更複雜的情況,有不止一個 repo 時,diff的方式可參考這篇 ,典型的衝突解決方式參考這篇 和 這篇

20171010更新:

這篇 gitbook 寫得很簡潔,大約500字而已,趕時間可以快速瀏覽一下


2014年2月4日 星期二

ubuntu上開源文件檢視器evince的make手記(3)

首先,由原始碼之取得到建置的程序,官網改放在這個網頁:(2014-2-4所見)

https://wiki.gnome.org/Apps/Evince/GettingEvince

其次,之前遇到過的建置時發生的問題,似乎都已有修正,但也引出新的問題。

官網上提供的 jhbuildrc-evince 及 evince.modules , 它們是整個gnome的jhbuild縮減版,其中libsecret由於未指定版本,故可能直接抓了最新版,結果所要求的glib2版本為38,但evince.modules提供的為36,明顯不足。抓下 evince.modules ,修改此檔以指定glib版本為2-38,重新編譯即可。假設使用者為XXX,jhbuild目錄放在家目錄下,則下達的命令為:

jhbuild -f ~/jhbuildrc-evince -m ~/jhbuild/evince.modules

而當在checkout/evince子目錄下修改了部分程式碼後,要進行make時,所下達命令則如下:

jhbuild -f ~/jhbuild/jhbuildrc-evince -m ~/jhbuild/evince.modules make

執行所建置出來的evince時所下達命令為:

jhbuild -f ~/jhbuildrc-evince run evince

因此在我新安裝的ubuntu 13.10上是很順的完成編譯及執行了。