步驟可參考 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月20日 星期四
2014年3月6日 星期四
ubuntu上用python的pdfminer進行pdf文字抽取
參考 http://imsardine.wordpress.com/page/5/
ubuntu上可以如此安裝:
sudo apt-get install python-pdfminer
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
官網 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 學習筆記 :特別把進階的東西放到最後面,即使從頭看起負擔也不會太大
如果已經精熟其它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字而已,趕時間可以快速瀏覽一下
參考 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上是很順的完成編譯及執行了。
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
2014年1月22日 星期三
新買ssd要灌win 8.1 x64或/及轉移原有win7 x86系統的流程
註:下述win7系統均為win7 x86,win8 均為win8.1 x64版本
註2:建議先看過 "[教學] Win8 和 Win7 雙系統建置" , "快速修復BCD開機檔案"
<<使用acronis true image premius 2014備份原系統硬碟>>
這沒什麼好講的,要注意的是,即使要轉移的只有其中一個partition,也一定要用backup disk,再選其中的partition,而不要backup partition,否則還原時的universal restore會無法勾選!!
<<切割ssd並置換原系統之硬碟>>
這沒什麼好講的,用外接線連到電腦,使用磁碟管理員分割。要注意的是,分割要比要放進去的映象檔大,這點非常重要,否則還原映象檔時,程式不會讓你還原到這個分割。
<<異機復原>> 有兩種作法(作法2僅供參考,我沒試過)
1.使用Acronis Universal Restore。為節省空間起見,通常硬碟會沿用mbr而非gpt分割,uefi bios中啟動也要選legacy而非secure boot。備份時一定要backup disk再選所要的partiton,不要直接選backup partition,否則在復原時不會有universal restore的選項可選!!新的partition一定、一定要比舊的partition大!!新機器的driver 要先準備好,在復原時有個步驟會要你指定這些driver所在的目錄,新機器或許號稱沒有舊os版本的driver ,但是新版本通常x86/x64全都有,而且通常向下相容。還原快結束時可能會出現找不到10250759驅動程式的錯誤,略過是沒關係的。(以上字字血淚,摸出這些細節花了一個禮拜)
2.使用 VMware-converter-all 把實體機內容轉移到 VMware-player。 參 http://tw.knowledge.yahoo.com/question/question?qid=1513061105044
<<異機復原之系統轉移前注意事項>>
0 .由於win7開始使用的bcd開機檔格式非常不好改,而且隱藏了很多細節,因此在系統轉移時造成非常多的問題。很多時候系統轉移不成功都是因為沒有處理好這個地方,很多人因此認為系統轉移是不可行的,非常可惜。以下是我的一些觀察和心得。(以下劃底線部分是我的觀察,不保證正確!!要注意,根目錄的boot.ini基本上是沒有影響的,因為boot.ini的任何修改,都要在下次正常開機時,由系統在bcd中進行對應的修改。轉移系統後,若無法正常開機,那麼對boot.ini做的任何修改,基本上都無法立即反映在bcd中,自然也無法藉此修正無法開機的問題。而事前用easyBCD進行任何修改也都是徒勞的,因為事前你沒有新硬碟的任何資訊。參 http://zh.wikipedia.org/wiki/Windows_Boot_Manager)
1.要知道作用中的bcd到底在哪裏。尤其是安裝了兩個以上的 win7 以上的系統,磁碟有兩個以上的分割時。我的例子是,作用中的 bcd 位置在第一次安裝 win7 的分割中(姑且稱之為partition A),而經常使用的系統也是 win7 ,但是位置在另一個分割中(partition B)。因此,如果要轉移系統,只轉移partition B時,因為bcd沒有一起複製,因此完全無法開機。相對的,只轉移partiton A時卻可以正常開機。
2.如上的例子,同時轉移兩個系統到新機器上,仍然無法使partiton B開機,則使用win7光碟(或使用usb flash disk製作開機碟)開機並進行系統修復,即可解決bcd造成的問題。(我後來沒有嘗試只轉移partiton B然後使用win7光碟修復,不過我認為是可行的。)
3.如果轉移了兩個win7系統到新機器上,然後想在不常用卻具有bcd資訊的分割中重灌win 8.1,請儘量選擇升級的方式,讓bcd資訊可以被保留下來。否則,格式化了原來具有bcd 資訊的分割,新的win 8.1系統沒有 bcd 資訊,看不到舊的win7系統,因此認為只有自己這個開機系統,因此在開機選單中也不會有舊的 win7 的選項。
4.如果因為 ssd 1g要值三、四十塊,讓你還是決定在雙系統中格式化掉具有bcd的partiton來安裝win 8.1,那麼在裝完win 8.1,你驚覺開機選單中沒有win 7時,請不要慌,參考第2點,使用win7光碟(或使用usb flash disk製作開機碟)開機並進行系統修復,即可解決bcd造成的問題。
5.但是在win7 win8存在的雙系統中,使用 win7 光碟修復 bcd,所建立的開機選單又變成只有win7的選項…沒關係,再拿起win8開機光碟,再作一次系統修復。之後,win7 win8都會出現在開機選單中了!!
6.我的觀察是,win8修復光碟發現了新的硬碟配置,以及作用中的bcd事實上存在於某個win7系統碟中,因此挪出約350mb,建立新的分割來存放對硬碟掃描後計算所得到新的bcd。
<<全新安裝 win 8.1>>
由於新的notebook機器出貨都是oem版,使用寫在bios中的序號,因此傳統上用光碟灌系統的方式不work,以下記錄一下我試了近一週的方式
0.參考一些像"滄者極限"或mydigitallife的論壇,知道那裏去找一些"合適的"光碟映象檔進行安裝
1.(optional ,方便下載巨大的iso檔而不中斷) 安裝 megadownloader ,網址:megadownloaderapp.blogspot.com
2.下載win 8.1的iso檔。
[2014.4.5] 使用Easeus partition master調整分割大小後,BCD位置若有變動,也會無法開機,解決方法是一樣的…以win7/win8開機光碟開機,再作一次系統修復即可。
[2014.6.21] 拆下來的硬碟,如果原機有光碟機,很有可能可以拆下來借給原硬碟,可參考我今天寫的文章,裏面有需要的零件
註2:建議先看過 "[教學] Win8 和 Win7 雙系統建置" , "快速修復BCD開機檔案"
<<使用acronis true image premius 2014備份原系統硬碟>>
這沒什麼好講的,要注意的是,即使要轉移的只有其中一個partition,也一定要用backup disk,再選其中的partition,而不要backup partition,否則還原時的universal restore會無法勾選!!
<<切割ssd並置換原系統之硬碟>>
這沒什麼好講的,用外接線連到電腦,使用磁碟管理員分割。要注意的是,分割要比要放進去的映象檔大,這點非常重要,否則還原映象檔時,程式不會讓你還原到這個分割。
<<異機復原>> 有兩種作法(作法2僅供參考,我沒試過)
1.使用Acronis Universal Restore。為節省空間起見,通常硬碟會沿用mbr而非gpt分割,uefi bios中啟動也要選legacy而非secure boot。備份時一定要backup disk再選所要的partiton,不要直接選backup partition,否則在復原時不會有universal restore的選項可選!!新的partition一定、一定要比舊的partition大!!新機器的driver 要先準備好,在復原時有個步驟會要你指定這些driver所在的目錄,新機器或許號稱沒有舊os版本的driver ,但是新版本通常x86/x64全都有,而且通常向下相容。還原快結束時可能會出現找不到10250759驅動程式的錯誤,略過是沒關係的。(以上字字血淚,摸出這些細節花了一個禮拜)
2.使用 VMware-converter-all 把實體機內容轉移到 VMware-player。 參 http://tw.knowledge.yahoo.com/question/question?qid=1513061105044
<<異機復原之系統轉移前注意事項>>
0 .由於win7開始使用的bcd開機檔格式非常不好改,而且隱藏了很多細節,因此在系統轉移時造成非常多的問題。很多時候系統轉移不成功都是因為沒有處理好這個地方,很多人因此認為系統轉移是不可行的,非常可惜。以下是我的一些觀察和心得。(以下劃底線部分是我的觀察,不保證正確!!要注意,根目錄的boot.ini基本上是沒有影響的,因為boot.ini的任何修改,都要在下次正常開機時,由系統在bcd中進行對應的修改。轉移系統後,若無法正常開機,那麼對boot.ini做的任何修改,基本上都無法立即反映在bcd中,自然也無法藉此修正無法開機的問題。而事前用easyBCD進行任何修改也都是徒勞的,因為事前你沒有新硬碟的任何資訊。參 http://zh.wikipedia.org/wiki/Windows_Boot_Manager)
1.要知道作用中的bcd到底在哪裏。尤其是安裝了兩個以上的 win7 以上的系統,磁碟有兩個以上的分割時。我的例子是,作用中的 bcd 位置在第一次安裝 win7 的分割中(姑且稱之為partition A),而經常使用的系統也是 win7 ,但是位置在另一個分割中(partition B)。因此,如果要轉移系統,只轉移partition B時,因為bcd沒有一起複製,因此完全無法開機。相對的,只轉移partiton A時卻可以正常開機。
2.如上的例子,同時轉移兩個系統到新機器上,仍然無法使partiton B開機,則使用win7光碟(或使用usb flash disk製作開機碟)開機並進行系統修復,即可解決bcd造成的問題。(我後來沒有嘗試只轉移partiton B然後使用win7光碟修復,不過我認為是可行的。)
3.如果轉移了兩個win7系統到新機器上,然後想在不常用卻具有bcd資訊的分割中重灌win 8.1,請儘量選擇升級的方式,讓bcd資訊可以被保留下來。否則,格式化了原來具有bcd 資訊的分割,新的win 8.1系統沒有 bcd 資訊,看不到舊的win7系統,因此認為只有自己這個開機系統,因此在開機選單中也不會有舊的 win7 的選項。
4.如果因為 ssd 1g要值三、四十塊,讓你還是決定在雙系統中格式化掉具有bcd的partiton來安裝win 8.1,那麼在裝完win 8.1,你驚覺開機選單中沒有win 7時,請不要慌,參考第2點,使用win7光碟(或使用usb flash disk製作開機碟)開機並進行系統修復,即可解決bcd造成的問題。
5.但是在win7 win8存在的雙系統中,使用 win7 光碟修復 bcd,所建立的開機選單又變成只有win7的選項…沒關係,再拿起win8開機光碟,再作一次系統修復。之後,win7 win8都會出現在開機選單中了!!
6.我的觀察是,win8修復光碟發現了新的硬碟配置,以及作用中的bcd事實上存在於某個win7系統碟中,因此挪出約350mb,建立新的分割來存放對硬碟掃描後計算所得到新的bcd。
<<全新安裝 win 8.1>>
由於新的notebook機器出貨都是oem版,使用寫在bios中的序號,因此傳統上用光碟灌系統的方式不work,以下記錄一下我試了近一週的方式
0.參考一些像"滄者極限"或mydigitallife的論壇,知道那裏去找一些"合適的"光碟映象檔進行安裝
1.(optional ,方便下載巨大的iso檔而不中斷) 安裝 megadownloader ,網址:megadownloaderapp.blogspot.com
2.下載win 8.1的iso檔。
[2014.4.5] 使用Easeus partition master調整分割大小後,BCD位置若有變動,也會無法開機,解決方法是一樣的…以win7/win8開機光碟開機,再作一次系統修復即可。
[2014.6.21] 拆下來的硬碟,如果原機有光碟機,很有可能可以拆下來借給原硬碟,可參考我今天寫的文章,裏面有需要的零件
訂閱:
文章 (Atom)