Search Engine Optimization

近來試下做一做 Search Engine Optimization (SEO),於是建了一個 Andrew Wat website http://andrew.aboutmy.info,希望能被 search engine 注意得到

uHub OS X Client

uHub 是 PCCW 提供的雲儲存服務。Server 在香港,所以 upload 同 download 都很快,這是我中意它的最重要原因。雖 uHub Plus 推出了,但問題多多,而且 uHub 有別於 uHub Plus 或 OneDrive 或 Google Drive 或 Dropbox,它是沒有在本機留底,它並非同步盤,檔案完全在線,就好似 56K 年代的 X-Drive 咁。用來於一些不是經常存取的檔案又或零碎的相片就最合適。 uHub 已被 PCCW 遺棄,官方 uHub client 並不支持最新 Mac OS X。安裝時,會被拒絕。用 xar 解壓 uHub client 的 .pkg 會發現 script 指明需要 OS X 10.7 – 10.9 (含)。 是否 OS X… Read More »

初嘗 Apache Cassandra

傳統 RDBMS 設計是用來做 transactions 要保持 consistency,並不適合儲存 Big Data。犧牲一些 consistency 及 fancy SQL,換取分散式架構,那就是 Cassandra。 Cassandra 可靠嗎?Apple 用左 75,000 nodes 儲存了超過 10 PB 資料。Cassandra 難安裝嗎?解壓就 run 得。 不過要注要一下,Cassandra 的預設 config 好進取,如果部 server 有其他野 run 梗,好容易會 out of memory error,要調一調 con/jvm.options 中的 heap size,也可以把 assertions 關掉。GC 也有得選。 加 node 也很容易,設好連接的 seeds 便可。預設是為左 quick start,真正用時改一改 endpoint_snitch 做 PropertyFileSnitch 及設置… Read More »

使用 Command 開啟 Mac OS X 的 Remote Management

如果唔記得開 Mac OS X 的 Remote Management,又或者想轉 password,又或想 restart Remote Management,只要能 SSH 入去,就可以用以下 command 開啟 Remote Management (一行過,用你想要的 password 代替 “password”) sudo /System/Library/CoreServices/RemoteManagement/ARDAgent.app /Contents/Resources/kickstart -activate -configure -access -off -restart -agent -privs -all -allowAccessFor -allUsers -clientopts -setvncpw -vncpw password

Web Service Load Balancing

而家 RESTful web service 及 AJAX 流行,server 同 client 多數用 JSON / Protocol buffers 交換資料。Server side 對 Java EE / J2EE 需求大減,特別是 mobile Apps,更本用不著 Java EE,偏向用 Node.js 或 Python 或 Go 來做 server API。由於在 web API 做 multi-thread 會很麻煩,花大量時間做 development 及 testing,而基於 JavaScript 的 Node.js 更加沒有 multithreading,而是用 callback。 如果想用盡 CPU cores,最容易的方法是把用 Node.js 或 Python 或… Read More »

CT File Encrypt – OS X

由於 Qt 4.8 在新版 OS X drag-and-drop 時 QMimeData 的 url 會有問題,必須升級 Qt 5,而 Qt 5.4 source code 有個 struct _Nullable,咁岩 clang 新版又加了 Nullable。要自己 patch 先 compile 到。Qt 5.5 又有其他問題。搞左好耐,終於出到 OS X GUI 版 (之前只能用 command) 下載:CT File Encrypt

CT File Encrypt

CT File Encrypt 可以把你重要的文件、相片用 AES-256 加密。 點解要自己整,市面已有好多依類軟件?原因之一是我覺得自己寫安全一點,沒有後門。但最重要是坊間找不到同類的:一拖即加密/解密、無須密碼! 使用場景:先把有個人資料的文件加密再放上雲存儲或由互聯網傳送、唔想放 share folder / NAS 的東西給同事、家人看到 我好怕記密碼,複雜的怕唔記得,簡單的又怕唔安全。SSH 登入 Linux / OSX 都用 private key 的我,就寫了一個用 key 來加密/解密的工具。簡單、易用、安全就是設計理念。 看回 git 記錄,2014 年 8 月已開始整,2015 年 5 月我已一直用,其間有畀過其他人試用,開始時已計劃開源,只是沒有時間整埋源碼,今次終於放上了 GitHub 了。 重要訊息: 第一次開啟時,會在 %USERPROFILE% 中建立 key 這個檔案。這個 key 是唯一的,萬一不見了,我也沒有辦法幫你解密檔案,請小心保管!可以用 7z AES-256 把它備份好。 已知問題: 1. 未有 OS X 版 2. 未支援資料夾 (可先… Read More »

Android 螢幕拍攝

Android 由 Kitkat 開始自帶了螢幕拍攝 (screen record) 功能,只要在 adb shell 中輸入 screenrecord –-bit-rate 8000000 /sdcard/record.mp4 就會把螢幕錄下來,放在 /sdcard/record.mp4,直至按下 Ctrl + C 停止。 screenrecord –help 可以查看說明。screenrecord 是放在 /system/bin/screenrecord。

Mac OSX RAM Disk

如果你 Mac 有足夠的 RAM 做 RAM Disk,很簡單,只需在 Terminal 打 diskutil erasevolume HFS+ ‘RAM’ `hdiutil attach -nomount ram://8388608` 就可以建立一個 4GB 的 RAM Drive 註:4096 * 2048 = 8388608

快倉輸入法

快倉輸入法,在 Linux 上是我用過最好用的倉頡,也有 Windows 版 http://www.scj2000.net/download 快倉六是以 GNU General Public License version 3 (GPLv3) 授權發放,輸入法之源程碼可在 http://download.scj2000.net/src/ 找到。在各 Linux 分發版內之快倉六套件(建議安裝分發版內之快倉六): Ubuntu 11.04: ibus-table-scj6 Fedora 15: ibus-table-cangjie (包含快倉六) Debian sid: ibus-table-scj6 Debian stable: ibus-table-scj6

在 Linux 上安裝 Oracle Database 的小經驗

Oracle Database 用就用得多。Enterprise Edition 就未安過,只是安過 Express。要安裝 Oracle,有一大堆手續。例如:加 user、改 .bash_profile、改 Kernel 參數等等,但一如其他 Linux 軟件,最煩的是 dependencies。 如果用類 CentOS Linux,最簡單的是從 Oracle 中安裝一個叫 oracle-rdbms-server-11gR2-preinstall 的套件。套件只是幾十KB,只是佢會令你安裝一些需要的套件。 # Download Repos wget –no-check-certificate https://public-yum.oracle.com/public-yum-ol6.repo -O /etc/yum.repos.d/public-yum-ol6.repo # Download GPG Key wget https://public-yum.oracle.com/RPM-GPG-KEY-oracle-ol6 -O /etc/pki/rpm-gpg/RPM-GPG-KEY-oracle # 安裝 oracle-rdbms-server-11gR2-preinstall yum install oracle-rdbms-server-11gR2-preinstall 但這個時候我不會真的安裝它,而是 cancel 後自行補安需要的套件。再把 /etc/yum.repos.d/public-yum-ol6.repo 刪除又或改為 .bak。否則,加入 Oracle Respo 後,你的 CentOS 會被安裝其他 Oracle… Read More »

強制 Firefox pop-up 開新頁而非新視窗

其中一個我喜愛 Safari 的原因,Safari 可以強制網頁 pop-up 例如 e-banking 的登入畫面在新分頁而新視窗打開。雖然 Firefox 有 “Open new windows in a new tab instead” 這個選項,但對於這些 pop-up 是無效的。終於在網上找到了方法。 在 Firefox 網址列打 about:config 再 search browser.link.open_newwindow.restriction,把其預設由 2 改成 0 便可

JavaScript array with named index

JavaScript 其中一個 Magic 的地方就是 array 可以有 named index,即是 var arr = []; arr[‘blue’] = 1; arr[‘red’] = 2; 但當 JSON.stringify(arr) 時,只會出現 []。如果真的要 stringify,那麼就只能只用 map,即是: var arr = {}; // 或直接 var arr = { blue:1, red: 2}; arr.blue = 1; arr.red = 2; 用 map 都可以當成 array 用, var keys = Object.keys(arr); 就可 iterate keys… Read More »

Microsoft Mobile Office

Microsoft 終於推出了 Android 及 iOS 的手機版 Office,限時免費送,請到以下連結下載: Android 版: https://play.google.com/store/apps/details?id=com.microsoft.office.officehub iOS 版: https://itunes.apple.com/hk/app/microsoft-office-mobile/id541164041?l=zh&mt=8 該 iOS 版並未為 iPad 優化。Microsoft 另為 iPad 推出 Microsoft Word for iPad、Microsoft Excel for iPad、Microsoft Powerpoint for iPad。雖然,view 是 free,但 edit 就需要買 Office 365。不過,只要有 lightening to VGA/HDMI,就足夠用 iPad 做 present,無需拎 notebook 了, Powerpoint 仲送 leaser pointer,長按就有了。另外,OneNote 都幾好用 Word: https://itunes.apple.com/hk/app/microsoft-word-for-ipad/id586447913?mt=8 Excel: https://itunes.apple.com/hk/app/microsoft-excel-for-ipad/id586683407?mt=8 PowerPoint:… Read More »

在 CubieBoard2 上 compile Node.js

在 CubieBoard2 上 compile Node.js source code,build 完,一執行任何 JavaScript 就出現 Segmentation Fault,Hello World 都行唔到。但在 WandBoard 就無事。 Google 一下,發現原來部份 ARM CPU 上會出現這問題,解決方法是 configure 的時候,加上 –without-snapshot 就無問題。snapshot 是用來加快 JavaScript 的啟動,但在部份 ARM CPU 上就有 bug

Firefly Media Server

大家都知 iTunes 可以 Share Music 去全家電腦 (後來 Windows Media Player 都有此功能),但好多 router 只支援 WMP 分享 我找到了開源的 Firefly Media Server,成功在 ARM board 上 compile,令 CubieBoard2 可做埋 Media Server Firefly Media Server source code

Passwordless 檔案加密

唔想記密碼,又想把自己的檔案加密 (AES-256),可以用這個。 Download enc.exe 後,只需把檔案拖去 enc.exe 便可加密。把加密後的檔案拖去 enc.exe 便可解密。第一次用會在 enc.exe 隔離生成 key,不要遺失這個 key 檔案!key 唔見了,解密後也會是爛 file! 除了 drag and drop (OSX 不能 drag and drop),進階用家可以打 command 用,執行 enc.exe 便有說明 http://my.no-ip.info/carlos/pub/enc_binary/

node(.js) 和 JavaScript 很給力

我愛 Google Go,但也喜歡 node。有人說 node 不濟,因為 JavaScript 很爛。的確,JavaScript 很爛,但也很有趣,很神,識得用會好好用 node(.js) 真的很神奇。其實應該是 JavaScript 很給力!簡單地就用到 log4j 的效果 // logger.js exports.getLogger = function(className){  return {   now: function(){ /* 省略 */},   info: function(message){    console.log(this.now() + ‘ [‘ + className + ‘] ‘ + message);   }  }; } // 之後,只要的用法就如著名的 log4j 一樣 var logger = require(‘./logger.js’).getLogger(‘main’); logger.info(“hello world”);

JavaScript String

JavaScript String 本身是沒有 trim function,但透過簡單 regular expression 便可做到: String.prototype.ltrim = function(){ return this.replace(/(^\s*)/g, “”); } String.prototype.rtrim = function(){ return this.replace(/(\s*$)/g, “”); } String.prototype.trim = function(){ return this.replace(/(^\s*)|(\s*$)/g, “”); } 還有這個用來測試是否 ASCII 也很實用: String.prototype.isAscii = function() { return !/[\u0080-\uFFFF]/.test(this); }

fork and printf

題目:請問下面的程序一共輸出多少個 “-“? #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <unistd.h> int main(int argc, char *argv[]) {  for (int i = 0; i < 2; i++){   fork();   printf("-");  }  return 0; } 就咁睇,答案是 6,但實際是很 tricky 的 8。這是 printf 把 "-" 放到了緩存中,並沒有真正的輸出,在 fork 的時候,緩存被複製到了子進程空間,所以,就多了兩個