談自由軟體之疏離與資本主義特徵

在我每天固定拜訪的資訊新聞網站中,三不五時會看到某位仁兄發表一些非資訊類的高見。前幾天又看到一篇 網際網路的左翼傳統 。不涉及學理的前半段內容大致正確,但後半段的結論卻是偏頗失當。從字裡行間,可以看出他矢志於左翼運動,以左翼人士自許。不過他恐怕與大多數自許為左翼者相同,不清楚什麼是馬克思與社會主義。

以自由軟體而言,其分享方式完全是盲目而不加選擇地授與任何人使用、複製、散佈與修改之權利。因此連 Bill Gates 也可使用 GPL 的軟體,也可修改與再散佈。雖然就我所知 Bill Gates 從未這麼做,但那是他不行使之故,而非 GPL 不許他使用。儘管 Bill Gates 非常討厭自由軟體,而自由軟體陣營也同樣厭惡他所代表的智財權陣營,但他使用自由軟體的權利仍然與其他任何人一樣,毫無二致。就這一點而言,他是自由的。在學理上,這樣的分享方式、亦即權利關係之建立,完全是疏離的,這是資本主義的特徵。 Karl Popper 在其著作《開放社會及其敵人》中曾生動地比喻所謂資本主義之生產與交換關係,完全是蒙著面、隔著紗簾窗進行,誰也不知道交易對象是誰。而馬克思稱這種現象為「異化(Entfremdung)」或稱「疏離」(See also: 馬克思,《資本論》;楊世雄,《馬克思的經濟哲學》)。

字元編碼轉換、基本檔案讀取與建立壓縮檔

Ruby 練習程式。讀取UTF-8編碼文字檔,轉換成Big5編碼後顯示。開啟檔案後分別以 Loop 式的 gets, Iterator 的 each, 以及一次讀入陣列的 readlines 三種形式操作。再以封絕(Closure)方式完成開啟、讀取及轉碼輸出。最後嘗試以 popen 進行管線(pipe)操作,呼叫壓縮工具將轉碼後的資料壓縮儲存。

以 REXML 將 CSV 文件轉換成 MS Excel 2k/XP XML 文件

Tags: ruby xml spreadsheet

本文示範以 Ruby 標準庫 REXML 實踐 MS Excel 2k/XP XML 文件之匯出工作。首先讀取一個 CSV 文件 test.csv,再以 REXML 建立一份 XML 文件實例,接著按 MS Excel 2k/XP 之 XML 文件結構,將自 CSV 讀取之資料存入 XML 文件實例,最後儲存為 test.xml 。該文件可以 MS Excel 2k/XP 讀取。

關於 MS Excel 2k/XP XML 文件之相關訊息,請見《A note of creating XML document by SimpleXML》。

A note of creating XML document by SimpleXML

本文嚐試利用 PHP5 提供的 SimpleXML 函數組 ,建立一份可供 MS Excel 2000/XP 版本使用的 XML 文件。

需求起因於資料庫之資料匯出需求。以往大都採用 CSV 格式匯出,然而 CSV 文件用於保存 Big5 內碼編碼之資料時水土不服,容易發生分欄錯誤之情況。儘管我們將字元編碼改為 UTF-8 後便可避免此問題,但是卻又面臨 MS Excel 2000/XP 無法以正確之字元編碼讀取 CSV 文件的窘境。因此我需要一個可為 OpenOffice 以及 MS Excel 2000/XP 兩者共同辨識的資料格式。經我測試後,確認 MS Excel 2000/XP 之 XML 試算表格式符合此需求。

xt~Commerce 之散佈問題

標籤: GPL 自由軟體 free_software

TWPUG 討論區中, xt:Commerce 之中文化作者 xtc_sun 為 xt:Commerce 漢語版 之散佈問題,而與 TWPUG 之管理者 kiang 交涉,要求 kiang 移除其置於 TWPUG 主機之軟體散佈連結。交涉內容詳見 xt:Commerce 漢語版正式釋出。 xtc_sun 之理由有兩點: 一、xt:Commerce 商標;二、提供使用者取得最新最完整的版本。但以法律觀點觀之,xtc_sun 對 kiang 交涉之內容,有違 GPL 精神。法律觀點有三:

  1. 以 GPL 授權散佈的軟體,根據 GPL 的條文內容, xtc_sun 不得額外要求禁止 kiang 散佈其合法取得的軟體。就此案例, kiang 係自 xtc_sun 公佈之公開連結中取得軟體,並非以非法手段如入侵、竊取帳號等手段取得。
  2. kiang 並未不當利用 xt:Commerce 之商標,不構成商標侵權。
  3. kiang 提供之下載頁面所引文字之內容不屬 xt:Commerce 軟體之一部份,係 xtc_sun 為介紹 xt:Commerce 所創作之著作。 kiang 應移除或加上明確的引用標示。

雖然 xtc_sun 之立意良好,但根據 GPL 之內容, xtc_sun 不得禁止 kiang 另行散佈軟體。再者, GPL 允許自由散佈軟體之目的,在使軟體取得之途徑不受任何限制。 kiang 於其他儲存空間中儲放並散佈,可令使用者取得軟體之途徑不受主機、網路故障中斷等原因限制,此為 GPL 所鼓勵之行為。據 xtc_sun 之用意,則 xt:Commerce 應透過 CVS/SVN 之類的匿名提取服務,以提供使用者最新之程式碼版本,而非禁止他人散佈。

四月新番大潮來臨! 於是我的四月病又發作了

最近blog的發文量變少了, Ruby 文件的翻譯動作也緩了。因為本人一年一度的4月病又發作了 XD 謎之聲: 什麼4月病,根本是四月新番動畫太多看不完吧。

哎,這都是因為全球化的關係 (謎之聲: 又扯到全球化了)。這個時期正好是日本每年動畫產量最多的第二季新番上檔時期,透過全球化的奇蹟,我身處台灣卻也感染到了4月病。按照以往的經驗,大概到5月時就會正常了。

精霊の守り人、Heroic Age、RomeoXJuliet、DARKER THAN BLACK 黒の契約者、瀬戸の花嫁、ハヤテのごとく! 桃華月憚、アイドルマスター XENOGLOSSIA、ひとひら、怪物王女、Kissdum、藍蘭島、魔砲少女SS、風の聖痕、Sola 等等。第一話燒錢燒得凶啊,看似強作不少,希望中途不要崩壞,我不想看到更多高麗菜...

JavaScript Hijacking and How to

Tags: ajax javascript webdev 資安

日前 Fortify 發表了一份文件《Fortify Software Documents Pervasive and Critical Vulnerability in Web 2.0》,描述惡意網站如何透過瀏覽器取得基於 Ajax 及 JSON 規範傳遞之跨網域的隱密資料。它將此方式稱之為 JavaScript Hijacking 。詳細的 Hijacking 內容請至《JavaScript Hijacking Vulnerability Detected》下載文件。

本文將說明 JavaScript Hijacking 概念以及一個範例。

神與智慧設計說

Mark's 的《智慧設計》簡要地敘述了「智慧設計說 (Intelligent Design)」。然而,「智慧設計說」只從人的有限生命去看才成立。從信神者之觀點來看,智慧設計說也有問題,甚至可說它否定了神的智慧。

從人的觀點來看,幾千萬世代是漫長而不可能的事;但從神的觀點來看,幾千萬世代不過是眨眼之事。自「這個宇宙」創造以來,目前已知至少經過了140億年的時間,在這個宇宙中並創造了以人類目前計數系統而言可稱無限多的星體數。在這140億年的無限多星體數中,早已發生了『幾千萬次「幾千萬世代」』。容我提醒,「這個宇宙」也是在『幾千萬次「幾千萬世代」』的無限多宇宙中的其中一個罷了。

最後,以人的立場問神,為什麼大能全知的神,以衪的智慧卻只在地球這個小地方設計了不完美的人。光憑這點,就足以視「智慧設計說」否定了神的智慧。我個人反倒以為演化論是一種更高的智慧表現。

人–也就是我們–憑什麼認為我們是神所創造出一枝獨秀、為神所鍾愛及眷顧的物種呢?我們應該要更謙卑地看待自己:人只是萬物之一。

一天兩篇,談演化與智慧設計

演化論者並不否認智慧,但智慧設計有其限度,甚至也是演化論中的一個實例。

在經濟學中,有個「有限理性」的說法。我們確實有能力進行智慧設計,但有限度,極有限度。其限度不能超出個人行為與選擇。這又如同「性擇」於演化論中之地位,性擇是個體有意識、有目的的行為調整,但這樣的改變仍然要經過環境及個體間互動才能決定其存續。經濟學中對有限理性與完全理性、超級智慧之討論也是相當深入的。

PHP mail() and charset encoding question

不知從何時開始, PHP 內建的 mail() 行為改變了,使用 mail() 寄發電子郵件時,似乎會固定將內文之字元編碼轉為 iso-8859-1 字元集。於是用 mail() 寄中文郵件時變亂碼、寄東歐文字郵件時變亂碼、寄日文郵件時變亂碼等等問題一一出現。如何寄非英文語系郵件幾乎成了 FAQ 級問題。

釘丁戶問題,中共落實物權法的頭關

中共自從改革開放後,地方政府為了促進開發,多與開發商合作,由開發商規劃土地用途及興建建物。在此過程中,地方政府以補償拆遷方式處理開發土地之原有住戶。然而在拆遷過程中每多發生住戶因補償不公而抗爭保地之事 (人民政府要徵地,人民要抗爭)。 「釘子戶」即為土地開發過程中出現的抵制戶。

TWPUG問答 - 如何不將 PDF 回傳給瀏覽器後列印,而直接由印表機印出

請問 PDF 可以不要顯示在瀏覽器上面,而是直接按下列印鈕(列印)後,直接由印表機印出嗎?
Taiwan PHP User Group所見問題

可以,但不要忘了 PHP 是在 server 端執行,所以 PHP 將使用 server 端設定的印表機輸出列印資料。請把設計思維整個切換到 client-server 架構,然後想想你的軟體運作環境是否方便從 server 端的印表機輸出資料。如果是公司內部那就可以,因為公司內部大部份是將資料集中到網路印表機輸出,當然也可以讓 PHP 直接把 PDF 輸出到網路印表機。如果是公開環境,例如使用者坐在自己家裡上網,那就不行了。

Ajax anti-patterns 與個人經驗談

《老子》有云「不善人者善人之資」。了解不適當與錯誤的方式,也是學習中重要的一環。在程式設計的領域中亦如是,好的設計方式會 patternalization ,壞的設計方式也會。Jack D Herrington 于 Ajax and XML: Five Ajax anti-patterns 列舉了 5 種常見的 Ajax anti-patterns 。這5種確實常見,我個人也有不少經驗可與之聯繫。

走上程式設計之路是否須具備興趣?

FireFoxer 于 要不要走程式設計這一行 提到「興趣」對於一個想走程式設計這一行的人是否必要。

個人看法以為興趣是必要的。Programming 基本上是一種「設計」工作,尤其對我這種傾向 Agile method 的程序人員而言更是如此。設計就是編程,編程就是設計。我們不但要達成功能需求,更在其中追求技藝之美。如果沒興趣,將得到一個「程式碼打字人員, code typist」,而不是一個「程式設計人員, program designer」;兩者之差別在「創造力」,其差異宛如臨摹者與畫家之分。

在我看來資訊軟體產業中也分很多行,而程式設計 != 資訊軟體產業。我並不輕視 code typist ,因為資訊軟體產業這一行還是需要 code typist ,但走這條路不等於走程式設計這一行。再者就我週遭經驗,沒有興趣以及一定偏執程度的人,通常在這條路上都待不久。儘管他們不會離開資訊軟體產業,但不會再投入編程工作了。

我在《軟體工程的 GPS》說「一個人寫程式,其實很苦悶;兩個人一起寫,就頗有樂趣了」。這句話發自心腑。獨行之路不好走,沒有興趣走不下去。

W3C Ruby 標注文字的注音、假名

前幾天我在每天固定活動的某ACG論壇中,看到有人問如何在文章的漢字上標注假名。某元老人士說可以用 HTML 中的 Ruby 標籤。這我以前沒用過,當下就去搜尋相關資訊。

Ruby 標籤屬於 W3C XHTML 1.1 規範項目,規範內容查閱《Ruby Annotation》。原本是 Micorsoft IE 5.5版加進的延伸功能,後來成為 W3C XHTML 1.1 規範項目之一,目前 IE 以外的瀏覽器仍未普遍支援此標籤。Firefox 的使用者可以安裝 ぴろ 氏提供的「XHTML Ruby Support」擴充套件。

TWPUG問答 - 按了重新整理後又新增一筆相同資料?

當使用者按下瀏覽器的「重新整理」按鈕後,又再次新增一筆相同的資料,要如何避免這種情形? Taiwan PHP User Group所見問題

使用者按「重新整理」時,瀏覽器會再次送出表單資料 (現在的瀏覽器應該都會警告使用者將再次送出)。說白了,這等於問使用者是不是要再新增一筆同樣的資料。

解決方式不難,處理表單的 PHP 程式輸出一個要求瀏覽器重導向到檢視頁面的動作即可,「重導向」動作就是引導瀏覽器轉向其他頁面。當頁面重導向後,瀏覽器就不會於重整時再次送出表單。

例如使用者於 input.php 填入表單,表單送交 save.php 處理, save.php 處理之後引導瀏覽器至 list.php 。根據 HTTP 協定,引導瀏覽器轉向新網頁的導向動作為 header('Location: 新網頁之URL');。See also: header()

在 GoogleCode 建立軟體專案的第一步

Google Code 是一項開放源碼專案管理服務平台 - Google Code Home,它採用 Subversion 作為版本控制系統(See also: Programming with Subversion Quickstart)。想申請建立專案非常容易,只要到 Prject Hosting 中填好申請表格即可建立專案。唯一限制是軟體授權證一定要採用 Google Code 提供的開放源碼授權證 (如 GPL, Apache License, New BSD License)。必須先登入 Gmail 帳號之後,才會出現 Create a new project 的申請表連結。提醒事項: