2012年4月26日 星期四

在*nix上使用 google drive 同步程式

google drive 竟然發佈了,但竟然沒有附帶給 linux 的 client !!! 好吧只好自力救濟,拿win32版湊合著用。

方法:
  1. 先找一台安裝好google drive sync的機器(推薦找WinXP 32bits),把 C:\Program Files\Google\Drive 這目錄 copy 出來。
  2. 在你要跑的 *nix 機器上裝好 wine1.3 和 winetricks
  3. 執行 winetricks 選擇 "Select the default wineprefix" => "Install a Windows DLL or component", 把 "ie8", "mdac28", "vcrun2008" 這三項勾起來,按下確定,然後等對話框出現,按確定、按確定、按確定。
  4. 把步驟1.複製出來的檔案放進 wine 的 virtual disk 下的路徑。
  5. 以 wine 執行 googledrivesync.exe 
我在 Ubuntu 11.10 上以 wine1.3 測試正常。

附註 : 第一次安裝時因為要答一些對話框,所以一定得在 GUI 下跑,但一次設定完畢後,其實gui幾乎就用不到了。所以可以考慮改用 Xvfb 來執行,讓他變成背景 daemon。

2012年3月11日 星期日

中斷沒有timeout參數的php function

注意:
  1. 這種方法只能用在cli下, apache,(f)cgi 下使用可能會出現難料的結果
  2. 沒看過別人用這招,考靠度未經驗證,所以有支援timeout的function還是用他內建的為先
  3. 測試過後還是有些function不吃這招(只好再想別的方法中斷他)
<?php
declare(ticks = 1);

function throw_exception($signal) {
  pcntl_signal(SIGALRM, SIG_IGN);
  throw new Exception('throw_exception');
}

pcntl_signal(SIGALRM, "throw_exception", false);
pcntl_alarm(1);

$connect_timeout = false;
try{
  $data = file_get_contents('http://1.1.1.1');
  pcntl_signal(SIGALRM, SIG_IGN);
}catch(Exception $e){
  $connect_timeout = true;
}

if($connect_timeout){
  echo "timeout!\n";
}else{
  echo "ok got data:".$data."\n";
}
?>

2012年2月26日 星期日

整理太亂的tabs

Components.utils.import("resource://gre/modules/Services.jsm");
var gBrowser = Services.wm.getMostRecentWindow("navigator:browser").gBrowser;
var tabs = [];
for (var i = 0; i < gBrowser.tabs.length - 1; i++){
  tabs[i] = gBrowser.tabs[i];
}
tabs.sort(
  function(a, b)(
    (a.linkedBrowser.currentURI.asciiSpec < b.linkedBrowser.currentURI.asciiSpec) ? -1 : 1
  )
);
tabs.forEach(gBrowser.moveTabTo.bind(gBrowser));

2011年9月8日 星期四

Gmail 智慧標籤 hack

Gmail 智慧標籤 請見

這東西很好用 問題是沒有 document ,讓人不知道如何 customize
但至少給我找出他的進階搜尋語法了



個人(Personals) => label:^smartlabel_personal
大量(Bluks)  => label:^smartlabel_newsletter
最新消息(Promotion) => label:^smartlabel_promo
論壇(Forums) => label:^smartlabel_group
通知(Notifications) => label:^smartlabel_notification


2009年3月20日 星期五

在Linux下以DVD+R/RW作為定期備份工具-構思

定期備份是避免災難的必定事項。
傳統 UNIX 下有 dump, tar, cpio 等工具來輔助備份的工作,這些工具的使用可參考 Unix 備份與回復 ,這不是我現在要研究的核心問題。

現在面臨的問題是產生出的檔案包/資料,該存在哪裡?存在本機硬碟是只是最初的步驟,若不後續進行異地備份,一但意外發生,備份資料很自然地會連同原本的資料一起上西天。

過去睡長輩曾經開釋過以 gmail 進行備份的方法,這招確實不錯,只要使用 cron 搭配 sendmail ,就可以天天餵資料到 gmail 上去。

但網路備份只是一個環節,並非全部,我仍然想要有實體的備份放作手邊,做為網路不通時回覆的來源。對於資料量大者,灑錢買台磁帶機是個好方法,但對於我這種小咖,一張4G的DVD+R/RW就很夠用了。

重點在於如何與 cron 搭配,讓備份的過程完全自動化。

初期的想法
方法一:使用 UDFtools 將 DVD+R/RW 片 mount 成為 rw 就可當作硬碟來用
方法二:使用 UDF的VAT extension 遞增寫入
方法三:使用 ISO9660 的 multi-session 每次多開一個 session