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

2009年2月10日 星期二

重新出發

OK,我離開了暫留之處,重新回到原本的規劃。希望能在三、五年內有所小成,再考慮下一階段的目標。

2008年11月21日 星期五

原來是盤菜

糟糕羞道人的慫恿之下,我終於決定出手,為家裡的主機添兩條RAM,順便也幫忙振興國家經濟(但是衰敗我的荷包)。

一面思索著這龍頭產業怎麼會變成這樣,一面看著3C賣場的報價。

當看到DDR2報價不是預期的阿拉伯數字,而是中文「時價」二字時。

我不禁脫口說出:「喔~~原來DRAM是盤菜啊!」

2008年10月18日 星期六

USB Device Over Current Status Detected

今天家裡Gillain前方USB突然間不能用,換了好幾隻裝置情形都是一樣,確定應該是主機的問題。硬著頭皮重新開機,竟然就死了。

症狀是開機執行POST之後,會出現USB Device Over Current Status Detected,然後就會在15秒後關機。

問了google後,他說可能有三,一:BIOS有問題、二:USB Device有問題、三:USB前面版短路。

稍微踹了一下,發現答案是「三」,所以把USB前面版拔掉後,機器就正常了,壞處是現在要用裝置都必須繞道後方。這個機殼才買沒多久,現在在考慮是不是要買個類似的USB前面板來置換。

2008年8月3日 星期日

2008年2月10日 星期日

OSSF::自由軟體鑄造場 - Sun 併購開放源碼資料庫公司 MySQL AB

OSSF::自由軟體鑄造場 - Sun 併購開放源碼資料庫公司 MySQL AB
是我後知後覺了,到今天才發覺有這檔事(雖然我都用PGSQL,沒差)。但是Sun一向以做事機車而聞名,這項收購確實不太算是好消息啊。

2007年12月31日 星期一

各位鄉親,別再問我相同的問題了

名古屋這邊也是相同的情形,請別再問了。

2007年11月1日 星期四

Attansic L1 in Debian

Attansic L1 Gigabit Ethernet driver for Linux v1.0.41.0(也就是華碩主機版隨機光碟片中所附帶者),這個版本有些問題。典型的症狀是下載可以達到全速,但上傳的時候卻會完全堵住。在Linux 2.6.18 x86_64(Debian 4.0r0 Etch)的實測中,確認有此一問題。

遇到此問題,可以到 http://sourceforge.net/projects/atl1 下載新的驅動程式,重新編譯、安裝後即可排除此一問題。

但要注意的是,2.x 版驅動程式需搭配 2.6.19 以上的 kernel ,所以Etch可能要用到 unstable 版的 kernel。我測試過 2.6.22-4 + Atl1 v2.0.7 工作正常。

不喜歡 unstable 版者必須使用 1.x 版的驅動程式。舊版的驅動程式放在,http://www.hogchain.net/attansic/attansic.html。在下測試過 2.6.18-5(aka. dfsg.1-13etch4) + Atl1 v1.2.40.2 工作正常。

比較奇怪的是,在使用 amd64 kernel 環境下編譯 Atl1 v1.2.40.2,於 make 時會出現錯誤訊息,"code model ‘kernel’ not supported in the 32 bit mode"。因為我實在懶得去trace哪邊出了問題,所以就乾脆硬上。方法就是用linux32(apt-get install linux32)作為前導蒙混過去就可以了(測試結果當然是OK!)。

簡單來說,就是
# wget 'ftp://hogchain.net/pub/linux/attansic/vendor_driver/l1-linux-v1.2.40.2.tar.gz'
# tar zxf l1-linux-v1.2.40.2.tar.gz
# cd l1-linux-v1.2.40.2/src
# sudo linux32 make install
就可以收工了。

2007年10月31日 星期三

不公平的世界

稍微整理了一下堆積零食的廚櫃--
這真是個不公平的世界的世界,不受歡迎的過了一年還放在這裡積灰塵,受歡迎的隔天就銷售一空,現實就是這麼殘忍。

至於我--
決定了這些冷門傢伙的未來。往後,只要有人來家中拜訪,就努力把他們銷出去;現在,我還是拿起我的最愛,遠離這個道盡事間不公的零食堆吧。

2007年10月26日 星期五

GMail IMAP

Official Gmail Blog: Sync your inbox across devices with free IMAP: "post"

真是「千呼萬喚始出來」,有了這個功能之後的Gmail,愈加地是個神兵利器了,現在就算不裝Gspace, GmailFS等外掛,用單純的mail client(Thunderbird, Mutt, Outlook等)也可以對於這個隨處可存取的4G空間,進行folder式的管理了。

不過「猶抱琵琶半遮面」的是,繁體中文的介面似乎還無法依照網頁上的啟動方法設定IMAP,請暫時將語言切換成美式英文,才可以看到這個選項。不過想來這應該不是什麼困難的問題,可以想見不久之後,繁體中文介面也會直接提供這個選項。

2007年10月1日 星期一

新增Google Reader分享

放在右邊,眼尖的人應該已經發現了。大致上可以看的出來我在看的大多是一些科技新聞....。

2007年9月20日 星期四

咳嗽

這幾天老是咳~咳~咳~,好不容易熬過了最嚴重的幾天,真的感覺快死╭( ̄m ̄*)╮,但現在卻成了不上不下的局面:既不是掛病號也不是痊癒。現在只要安安靜靜地好好工作,惱人的咳嗽就會止住,然而想開口和人交談,聲音還沒發出來,咳~咳~咳~就先衝出來報到。哀~~~~~~

季節交替之際,各位也請保重身體。

2007年9月5日 星期三

微軟機關算盡,仍難如意(Open XML)

Taiwan.CNET.com : 企業應用 : 主題中心 : 微軟在Open XML標準表決中跌跤

微軟為將其發展之OOXML推上國際標準的寶座,可說是無所不用其極,甚至連銀彈土石流這種擺明被唾棄的招式都使的出來,可見其用心。

但對於微軟而言,結果似乎不是那麼如意,於稍早ISO的表決過程中,OOXML格式雖獲得已投票中74%的支持,但未獲得規章所訂全體會員2/3支持,結果仍是闖關失敗。因此此一標準化程序將陷入冗長的草案修改與爭辯過程,微軟必須盡力爭取未表態的18個會員的支持,以期在明年二月的第二輪投票中獲得支持。

但要獲得這些未表態會員國的支持,其Open XML草案勢必要經過相當幅度的修改,反對此草案者也可趁此機會大砍特砍,將其中夾帶的專利、含糊定義與非標準技術一一拔除。

如此一來等於是通過一個全新的標準,微軟和他的競爭者同樣都要修改其產品才能符合此標準,但耗費金錢、時間將其推上國際標準,卻僅得這樣的微薄的利益。微軟是否還要繼續燒錢玩下去,或是認份地與ODF共存,我們拭目以待。

2007年9月2日 星期日

死了一個孩子之後 : 都是網路害的? 還是溝通出了問題? « Mr./Ms. Days - �

「 今天1是全國中小學開學第一天,就傳出一名高職新生燒炭自殺的不幸事件。宜蘭縣這名十五歲的高職學生,因為沉迷電腦網路遊戲,又不滿媽媽把電腦鎖碼,不准他再玩網路線上遊戲,竟然燒炭自殺,還留下遺書說他自己很傻。 」PChome新聞

這件事情是網路害的嗎?還是溝通出了問題?我想這個答案是見仁見智,各人各有不同的說法。

但殺死他的既不是網路也不是溝通。對,我說這孩子是被殺的,人若不是被逼上絕路又何必自殺。雖然動手的人是自己,但令他別無選擇只能用自己的手結束自己的生命的又是誰?人要面對死亡已經是不容易了,更何況是親手招來死亡。萬萬不能認同那些浪費時間譴責自殺之人,既有餘力做這樣不知所謂的事情,何不將力量放在問題的癥結上--到底是誰逼死這些自殺者的?

那是誰殺了這孩子--是遊戲業者?是家長?我認為非常明顯,即便業者加註警語,要求玩家強制下線,甚至故意將遊戲做的不好玩,也無濟於事。新的娛樂方式不斷地出現,禁的了網路遊戲,卻不過是替下一代娛樂產業創造利基。但人際間的疏離、家庭功能的喪失與當事人意願的不被尊重,以上種種將人逼上絕路的挫折感,卻不是消滅網路遊戲可以解決的。

是誰殺了孩子,答案相當明顯。身邊的人,只要有任何一位願意伸出援手,給他一條活下去的路,誰會想要尋死。

你身邊也有默默不語躲在陰暗角落的人嗎?請不要再說他是文靜、內向,更不要以自以為光明的方式照耀他,這麼做愛之足以害之。越是所謂文靜、內向的人,越是渴望別人能夠傾聽他的心聲,理解什麼才是他需要的。

--「請付出多一點時間 留住你珍惜的人」

1. 該篇報導日期為2007年8月30日

2007年7月3日 星期二

當GPLv3碰上DRM(二)

繼續上次詳細的解釋。

所謂的「反規避法」(原文作Anti-Circumvention Law),是指禁止未經著作權人許可之人對於「有效的科技保護措施」進行「規避」。以我國著作權法第80-2條第1項而言,其法條規定為「著作權人所採取禁止或限制他人擅自進入著作之防盜拷措施,未經合法授權不得予以破解、破壞或以其他方法規避之」。可明白這邊説的規避包含「破解」、「破壞」,再參照立法理由尚有「解密(decrypt)」、「解波(descramble)」等。再以美國法(對,就是你熟悉的那個DMCA)而言,任何對於科技保護措施所為的「避免(avoid)」、「迴避(bypass)」、「移除(remove)」、「關閉(deactivate)」或「損壞(impair)」皆屬於這邊所説的規避。如果這樣還不清楚的話,日本法提供了另一種觀點,「將科技保護措施所用的訊號,進行除去、改變之類的行為,導致該措施本來防止的行為,變成無法防止。或使該措施本來想要對複製品進行的妨礙(例如加入雜訊),變成不發生妨礙」。

了解所謂的「規避」之後,更想明白的是,什麼叫做「科技保護措施」,這就得從WCTWIPO COPY TREATY談起,WIPO是聯合國下的一個專責組織,專門負責有關於智慧財產權保護之事宜,其中最重要的任務之一即是擬定世界性的著作權保護條約,其成果即為WCT。該條約第11條賦予所有締約國立法義務,必須在其國內法制訂適當的法律保護和有效的法律救濟方式,以對抗規避有效科技措施的行為。但基於國際利益角力,該條約並沒有明確制定何謂科技保護措施,留待諸國各自表述。我國法則是在第3條並稱之為「防盜拷措施」,指著作權人所採取有效禁止或限制他人擅自進入或利用著作之設備、器材、零件、技術或其他科技方法。簡而言之,保護的對象要是「著作」,設定保護的人要是「著作權人」,方法必須是「科技的方法」,限制的行為要和著作的「使用」有關。最後,這個措施要「有效」,這邊説的有效,是指這個科技保護措施在原本的設計上是用以達成上面所説的目的,除非他自始客觀上不能達成效果(指自始設計失誤),不然即便其後被破解,仍為這邊所說的「有效的」。各國對於科技保護措施的定義雖有差異,但台灣的定義基本上還算中規中矩。

要注意的是對於一個「有效的科技保護措施」的保護,除了禁止進行規避之外,用以幫助規避的工具也不允許「流通」(製造、輸入、提供公眾使用或為公眾提供服務)。但許多系統工具本身或多或少都有幫助規避的效果(例如一些raw dump工具就可以用來挖一些廠商不想給你看的資訊),如果把這些工具一律加以禁止,有欠公平。因此各國通常都將規避工具限縮於:(一)主要供破解、破壞或規避之用者,(二)除規避外,其商業用途有限者,以及(三)為供規避之用而行銷者。我國的限縮規定未見於法條之中,而是放在行政命令之中。

因此在過去GPLv2的架構下,如果廠商基於GPL code發展出一套「科技保護措施」程式,此程式在該國法律下被認可為有效的。則於該廠商開始傳送(販賣、出租、公開傳輸等)此保護程式時,你雖然可以基於GPL要求他公開程式碼,但是卻不能對其程式碼進行修改(至少不能使原本被廠商禁止的功能,變成不被禁止),否則可能會觸犯到前述反規避的規定。而且,雖然你可以依照GPL的規定向廠商直接取得原始碼,但是如果你想要對於此原始碼再進行傳送,則可能會觸犯反流通的規定,尤其是當你已經對這個程式碼進行過修改,使原本被禁止的功能變為不禁止時,更是如此。

所以在GPLv2的架構下,產生了保護軟體自由的漏洞,因為廠商並沒有修改程式的授權條件,也確實履行了提供程式碼的義務,但是由於立於契約之外的--「法律」規定,產生了一個可以規避GPL,限制軟體自由的空間。因此,於GPLv3中,嘗試於法律允許的範圍,並於契約可及的範圍內,解決此一問題。

2007年7月2日 星期一

當GPLv3碰上DRM(一)

GPLv3一如預期地加入了所謂的「反反規避條款」,讓我們來看看他到底規定了什麼。

3條:保護使用者的法定權利免於反規避法之威脅

  • 被涵蓋的著作不應被視為任何適用法下,有效的「科技保護措施」之一部分,且該適用法是用以履行1996年12月20日通過之WIPO著作權條約(WCT)中第11條所規定之義務,或其他禁止或限制該措施的規避之類似的法律。
  • 當你傳送被涵蓋的著作時,你便對於基於本授權書關於被涵蓋的著作之實施權利,於影響該權利的範圍內,拋棄任何禁止規避科技保護措施之法律上的主張,且你亦放棄任何藉由限制此著作的操作或修改為方法,以此對抗著作的使用者、強制你或第三人的法定權利至禁止規避科技保護措施之意圖
看不懂是正常的。所以,簡單來説這條到底想表達什麼意思?GPLv3 FAQ如是説:
GPLv3是否禁止DRM?
  • 否,你可以使用在GPLv3下發行的程式碼,作為發展任何你喜歡的DRM科技。然而,如果你如此作,第三條規定該系統不該被認定為一個有效的科技「保護」措施,此意味著如果某人破壞了此DRM,他將亦得以自由散布其軟體,不受DMCA或其他類似法律的規制。
  • 一如往常,GNU GPL並不限制人們對於軟體作什麼,他僅是阻止他們限制其他人。
詳細來説,依照第0條之定義:
  • 「本授權書」:係指GNU General Public License第三版。
  • 「此程式」:係指任何受著作權保護之創作,並基於本授權書被授權者。在此所稱的「你」即是指每個被授權人。「被授權人」和「接受者」得是為個人或組織。
  • 「修改」著作:係指以需要著作權許可的方法對於著作進行複寫,或進行全部或部分地改寫,此有別於製作單純的複製品。依前述方法而生的著作被稱為前著作的「修改版」或「基於」前著作的著作。
  • 「被涵蓋的著作」:係指未經修改之此程式或基於此程式的著作。
  • 「傳播」著作:係指對其進行任何行為,擅自為之將使你在適用法(著作權)下,直接地或間接地負有侵權責任,但僅將之執行於電腦或對私有的重製物為修改除外。傳播行為包含「重製」、「散佈」(無論修改與否)、「對公眾提供」及在某些國家中其他類似的活動。
  • 「傳送」著作:係指任何傳播方式,其使他方能夠製作或接受重製物者。但僅經由電腦網路與使用者互動,卻未伴隨重製物的傳輸者,並非傳送。
  • 互動式的使用者介面所顯示的「相關法律聲明」,其範圍包含便捷且明顯的特徵,此特徵:(1)顯示相關的著作權聲明,且(2)告知使用者對著作不負擔保責任(願提供擔保者除外)、被受權人得基於本授權書傳送該著作及如何檢視本授權書之副本。如果該介面顯示使用者命令或選項的列表(像是選單),則於列表中的顯著項目即符合此一規範。
解釋之,這裡所謂的「傳播」著作,於我國法指的就著作權法第22~29條所規定的重製權、公開口述權、公開播送權、公開上映權、公開演出權、公開傳輸權、公開展示權、編輯權、散布權、出租權(但要注意有些權利跟電腦程式本身的性質相衝突難以適用),未經著作權利人許可,擅自為之將使你負上直接或間接侵害著作權的責任。但僅將之執行於電腦即便會發生暫時性重製,且電腦程式的暫時性重製在我國法下仍全然屬於著作權利人所專有的重製範圍內,但GPLv3並不對此作任何限制。另外,私有的重製物為修改但並未做進一步公開散佈,雖然也可能在我國法下被解釋為暫時性重製(甚至改作?),但GPLv3仍表示不對此作任何限制。
再者「傳送」著作,指的就是所有向公眾傳達型的利用方式(如公開播送、公開傳輸等),及散佈型的利用方式(含移轉所有權之散佈、出租等)。將GPL軟體用於網路伺服器,是否必須對客戶提供原始碼,本來有在吵,但最終版的GPLv3基於各種考量,在此明文排除。

2007年4月14日 星期六

火狐與冰鼬

Fwd: Bloglines - Tetralet: Debian 和 Mozilla(r) 在 Firefox 的 LOGO 和 名稱 上的爭議 - mozcn | Google 網上論壇

把手上的 sarge 換成 etch 後發覺火狐竟然不見了,取而代之的則是冰鼬。一查之下,發覺背後竟然有這段秘辛,這倒是一個好研究題目。說到電腦程式與商標權之間的關係,就不得不讓人想起Sega v. Accolade案,遊戲主機廠商(sega)以遊戲卡夾製造商(accolade)未經授權,在電視螢幕上顯示主機廠商的商標,而提起訴訟(請回想一下,你家遊戲機開機的時候,會秀出一塊欠缺美感彩色碎布並伴隨著一段詭異的音效)。但弔詭的是,之所以會顯示此商標
是因為遊戲機所必須的 initialization code,若無此code則無法載入遊戲;反之,若有此code則會顯示"PRODUCED BY OR UNDER LICENSE FROM SEGA ENTERPRISES LTD"。主機廠商即基於此點和侵害著作權為由,控告哪些沒有經過授權,卻自行利用還原工程製造製造相容遊戲卡夾的製造商(即accolade)。

這個古老的案子和Mozilla與Debian間的爭議差異自然是很大,但令我感到興趣的是商標權的範圍究竟廣到何種程度,就裡而言商標的意義在於「區隔產品與服務」換而言之就是用來讓消費者作為「識別」與「分辨」之用,因此不許非商標權之人擅自使用該商標,以免消費者產生「混淆誤認」或有潛在性地危險(有混淆誤認之虞)。但是現在我們看到的這些案子,其本質都在於以商標權為名,對於其下遊產業產生控制的效果,於過去是遊戲主機廠商欲控制其遊戲卡帶的製造商,於現在而言則是瀏覽器軟體組織欲控制作業系統套件組織。這樣的商標權應用是否恰當?法理上該如何解釋其與自由軟體授權間關係?值得深思。