AngularJS 起手式

我是參考這篇教學:Learn to Build Modern Web Apps with the AngularJS Tutorial

教學裡使用的是 yeoman ,這真的有方便。首先要安裝 nodejs 跟 npm,在 Ubuntu 13.10 裡,就用 sudo apt-get install nodejs npm 就行了,如果是 Ubuntu 12.04,得另外裝 chris lea 的 PPA,再 update/install。教學裡的第一步,就是安裝 yeoman,用 sudo npm install -g yo 來安裝,可是我不太喜歡直接裝到 /usr 系統資料夾去,所以找了一下,看能不能像 Python 的 pip install xxx –user 一樣裝到使用者目錄下。

搜尋的結果是可以的,但需要做些設定。設定值大致如下:

這樣就可以不用 sudo,然後用 npm install yo 就可以把相關模組都裝到使用者目錄下了,而且相關的指令也都可以用。

參考資料:

LightTable

今天早上看到 LightTable 開放原始碼的消息:新一代IDE Light Table开源:让编程工作更简单,上去 github 看了一下,完全搞不清楚用什麼語言寫的,既然搞不清楚,那就只好裝來試試看了。

我的環境是 Ubuntu 12.04,安裝經過:

  1. git clone https://github.com/LightTable/LightTable
  2. 執行 ./linux_deps.sh ,提示說要安裝 leiningen,搜索了一下,找到 Leiningen 網站,閱讀之後,才知道 LightTable 應該是 Clojure 。Leiningen 應該是類似 Gradle 之類的軟體,可以自動化建置 Clojure 專案的工具。
  3. 如果 Ubuntu 有,當然是用 apt-get 安裝:sudo apt-get install leiningen ,但經過試驗,會有一些問題,版本太舊了。leiningen 網站上也建議自己另行安裝,不要使用 1.x 的版本。安裝的步驟可以參考 leiningen 的 README,只是簡單下載一個 bash 檔就能用了,然後先輸入 lein version 檢查看看版本,如果是第一次執行,會先下載檔案到 $HOME/.lein 下。
  4. 重新執行 ./linux_deps.sh ,這個步驟就會開始下載必要的檔案,然後建置,並放到 deploy 目錄下了。
  5. 執行 deploy/LightTable 就可以了。

LightTable 應該是使用 Clojure 寫的,至少 plugin 是,從下載過程看來,使用了 Maven,因此看起來是有借重 Java 的跨平台能力。Clojure 的語法真的是…看不太懂啊!! 似乎是該找 Clojure Tutorial 來看看了??

Apple TV 與 mt-daapd

Apple 寄信來說 1/10 有特價活動,上去一看,剛好看到 Apple TV。稍稍找了一下,Apple TV 可以用來播放影片、音樂之類的,就想說,那我可以架個 Media Server ,讓 Apple TV 存取嗎??

 

轉換超級大的檔案為 MySQL 可用的 .sql 檔

在大致看過原始檔案以後,可以知道原始檔案大致的格式是是這樣:

  • 每筆記錄以只有 ‘@’ 存在的行做分隔。
  • 每筆欄位,也就是每行以 @field: value 存在。
  • @content: 該行比較特別,有可能是多行,有可能是單行。

最簡單的想法就是逐行解析。一開始是先寫了一個小程式,確定一下有哪些欄位,結果這樣就執行了好久好久。所以為了實驗方便,後來改以 head -n 2000000 | tail -n 1000000 大致取了一小段來使用,來確定有多少欄位。為了以防萬一,有刻意改變數字,從尾段取部分、從中段取部分,確定三者得到的欄位都一致,就確定了 MySQL table 所需的欄位。這應該也算是統計吧,以採樣的方式來取得概略值。(之後稱這些部分的檔案為樣本檔)

接著用 grep ‘@content:’ | wc -l 算了一下樣本檔,想不到這樣就有上萬筆!! 看來逐行解析然後新增到 MySQL 伺服器裡是不太現實的,不管是新增或是導出 SQL 敘述檔案肯定都會花許多的時間。因此就改變策略,要把每筆記錄都輸出到檔案,然後再根據檔案來逐檔轉換。但是這樣也出了問題,Linux 檔案系統的 inode 就這樣被我用盡,即使 df 的結果顯示還有空間,但就是沒辦法再新增檔案了。只好再次改變策略,分割為每十萬筆記錄為一個檔案。

針對檔案的解析並不難,那想要直接輸出 SQL 敘述,使用字串參數的方式未免太麻煩。這裡藉助了 mosql 模組的幫忙,只要丟一個 dict 進去,可以很簡單的輸出 SQL INSERT 敘述。

接著為了要讓 CPU 能用到所有核心,使用了 python 的 multiprocessing 模組,先把上述分割好的檔案名稱存為 list,然後以 multiprocessing.Pool 的 map 方法去執行,這樣就大幅的縮短了處理時間。

針對大型的檔案處理,必須要分割為多個小檔案,才能善用運算資源,速度才會快。

InSync in CentOS5

InSync 本身可以使用 insync-headless 來啟動(http://goo.gl/bsKS2N),輸入 insync-headless –help 就可以看到可使用的指令。第一次要先 start ,然後 add_account ,add_account 時,會告訴你一個網址,你需要用 browser 去訪問這個網址,最後會取得 authcode。把 authcode 複製起來,輸入 insync-headless add_account authcode $HOME/insync 就可以把帳號加進去了。之後就只要 insync-headless start 就行。

在 CentOS 5 會比較麻煩的是,InSync 網站上取得的 portable 版本使用的是 GLIBC 2.7 ,但 CentOS 5 用的卻是 GLIBC 2.5。幸好,在 InSync 支援網站上有人詢問,而 InSync 也釋出了給 CentOS 5 使用的版本:Test CentOS 5.9 build 。這個版本裡只有 insync-portable 這指令,因此要把前面的 insync-headless 改為 insync-portable,這樣就行了。

Windows XP 的自動更新不簡單

之前幫家裡電腦重新安裝 Windows XP,結果在升級到 Service Pack 3 以後, Windows Update 頻頻失敗,我還以為是我安裝步驟出錯,重裝了好幾次,很氣人。上網找解決方案,是有找到幾個,但是都沒辦法真正徹底解決。

後來想,好像有人自己弄 Service Pack 4,不如找來試試看吧,於是就找到三秒的偽 SP4 :三秒練功房v3: (偽) Windows XP Pre-SP4。下載的網址在 github 上,檔案很小,解開以後可以看到裡面只有下載的 batch file 跟 wget.exe,點選 build.cmd 以後,就會開始去微軟網站下載個別的更新檔案。下載完畢以後,還沒 SP3 的,就升級到 SP3,然後裝 IE8、WMP11 。裝好以後,點選 hotfix.cmd 就開始真正的安裝 SP4 。

安裝完成以後,重新開機,Windows Update 就可以順利運作並且安裝其他更新了。

百度雲網盤檔案的下載

前一陣子有趁中國那邊拼的火熱的時候去申請,拿到 1TB,現在升級成 2TB 了,是說也不知道該放些什麼。

後來才聽朋友說,可以 BT 下載,只要上傳種子以後,百度雲就會幫你下載。如果已經有人下載過,會一瞬間就下載完成,我試過幾個 Linux distro 都是如此,真的是瞬間下載好。但是人生往往就是這個 But,雖然已經下載好放到雲端,你還是要從雲端拉回本地端,這時候就杯具了,你要不就用百度提供的軟體,要不就只能用瀏覽器慢慢下載。我自己大部分時間都在 Linux 上,只能用瀏覽器,還蠻斷線的,而且還不能續傳。

後來找到好方法,可以取得真正的下載網址,然後就可以用續傳軟體下載。我自己是用 Firefox,然後在 http://userscripts.org 上找到 baidupandownloadhelper ,安裝以後,當你在百度雲的網頁介面上勾選要下載的檔案之後,上方會出現「批量下載」的按鈕,按下去以後,就可以看到連結,就可以拿這個連結來下載了。

我後來是額外安裝了 aria2,可以在 console 下載的工具,正好 baidupandownloadhelper 也可以直接複製 aria2 指令,真的是相得益彰。

GoAgent 3.0.8 小記

升級以後,就爆炸了。而我居然直接覆蓋,沒留原來的檔案,只能摸摸鼻子把它修好。

是故,得重新設置,主要就只要改 proxy.ini 。第一個要動的部分是把 [proxy] 裡的 enable 設為 1,然後修改 host/port,這是因為公司內部需要透過 proxy 上網,而我又弄了 cntlm 去繞過 microsoft proxy server 的 NTLM 的關係,這裡的 host/port 是我的 cntlm 的 proxy/port。第二個要動的是 [gae] 裡的 appid/profile/obfuscate,appid 是 goagent 說明文件有特別提到的部分,profile 是為了解決 403 錯誤,詳情可以閱讀 【已解决】goagent打开页面出现403错误:Your client does not have permission to get URL /2 from this server,obfuscate 則是為了解決 Connection() argument 1 must be OpenSSL.SSL.Context 問題,這是我閱讀 local/proxy.py 以後看到的,設置 validate 應該也可以解決,但我沒試。

server 部分只要執行 server/uploader.bat 重新上傳就行了,執行的時候,會詢問你 appid/帳號跟密碼,依次輸入就可以。uploader.bat 裡蠻有趣的是, python 可以直接執行一個 .zip 檔。在閱讀原始碼的時候,發現 server 的版本沒跟著調整,仍然是 3.0.7 版。在上傳以後可以在瀏覽器裡輸入 <your_appid>.appspot.com/2 看是否順利運行。

Vim C-] 失效

問題描述:vim 裡確定 tags 的設定都正確,但按下 Ctrl-] 卻沒有跳到游標所在函式的定義。

問題發生要件:

  1. 使用 gcin
  2. 使用 gnome-terminal, terminator … 等非 xterm 的終端機程式

原因:

gcin 設定的「內定輸入法」裡,「Ctrl 輸入標點符號」被勾選了。將這個設定取消,就沒有問題了,因為勾選時, gcin 會將 Ctrl-] 轉譯為 “」”。

gtk+ windows 應用程式裡的文字亂碼

大多數的 gtk+ Windows 應用程式都有相似的問題。

第一步,要先知道應用程式是使用哪裡的 gtk+ library,一般省麻煩的,會自己包在一起,安裝時會放在安裝目錄下。所以可以找到 etc/gtk-2.0 這個目錄,請編輯 gtkrc ,加上:

style "user-font"
{
    font_name="Sans 12"
}
widget_class "*" style "user-font"

就可以解決了。

如果不是在安裝目錄下的,就得自己回想一下看之前安裝在哪裡了。