科技の卷

學習 jQuery 從入門到精通只要兩小時!

Posted in 學習の卷, 科技の卷 on 九月 6th, 2009 by Jaric – Be the first to comment

黑暗執行緒站長 Jeffrey 親自操刀、費時數月完成的邊做邊學 jQuery 系列影片(含文章)終於完整上線,一共 15 集精闢入裡的 jQuery 觀念解說與精彩範例 (錄影的時間總共 126 分 15 秒),絕對能讓原本就會一些 JavaScript 的開發人員快速上手 jQuery,甚至於我認為已經在使用 jQuery 的開發人員更應該看一遍這些影片與文章,也許能帶給你許多意外的收穫喔!

工欲善其事,必先利其器!在開始學習之前,先告訴各位一個不可或缺的學習工具:Mini jQuery Lab

若在學習 jQuery 的過程中需要練習編寫 jQuery 程式碼時,可以利用 Mini jQuery Lab 進行線上實驗,這讓任何人不需要在本機編輯網頁就能測試 jQuery 的效果,非常的方便!

短短兩個小時的精彩課程絕對不可錯過,以下是所有課程的連結:

read more »

在深入了解之前,沒有資格說不喜歡 – symfony

Posted in 學習の卷, 工作の卷, 科技の卷 on 七月 14th, 2009 by Jaric – Be the first to comment

php 的 相關framework 在之前比較有研究的,就是 Codeigniter

特別是在 Rasmus 對各家Framework 做過 benchmark之後,更是對於 Codeigniter 信心倍增。

至於 symfony,在最初的 survey 時有看過,不過當時覺得 symfony的輕巧性,完全比不上 Codeigniter。

最近因為某些因素,恰巧有機會可以讓我好好重新認識一次 symfony 。

赫然發現,symfony 做到的,遠遠超過我對於 PHP framework的期待。

Ten reasons why Symfony rocks – Part 1

Ten reasons why Symfony rocks – Part 2

Codeigniter & Symfony 都是值得花時間好好了解的 framework。

在深入了解一個東西之前,絕對沒有資格說不喜歡。

[YQL] Parse Pixnet

Posted in 科技の卷 on 五月 20th, 2009 by Jaric – Be the first to comment

Chunghe 推薦的 xpath toturial

http://www.zvon.org/xxl/XPathTutorial/Output/example1.html

 

http://www.slideshare.net/cheilmann/open-hack-london-introduction-to-yql?type=presentation
 select * from flickr.photos.info where photo_id in (select id from flickr.photos.search where woe_id in (select woeid from geo.places where text = ‘london,uk’) and license=4)
 http://github.com/spullara/yql-tables/tree/master 這個好阿

read more »

[Share]如何在大陸連上無名、youtube

Posted in 科技の卷 on 五月 17th, 2009 by Jaric – Be the first to comment

 

在大陸想連無名、youtube,又害怕使用proxy會被敲門的捧友有福了:D

根據友人Ronald在大陸(東莞)的實際測試,安裝使用之後,可以連到無名小站Youtube

read more »

Top 10 SQL Performance Tips

Posted in 學習の卷, 科技の卷 on 四月 8th, 2009 by Jaric – 3 Comments

From

Interactive session from MySQL Camp I:

Specific Query Performance Tips (see also database design tips for tips on indexes):

  1. Use EXPLAIN to profile the query execution plan
  2. Use Slow Query Log (always have it on!)
  3. Don’t use DISTINCT when you have or could use GROUP BY
  4. Insert performance
    1. Batch INSERT and REPLACE
    2. Use LOAD DATA instead of INSERT
  5. LIMIT m,n may not be as fast as it sounds
  6. Don’t use ORDER BY RAND() if you have > ~2K records
  7. Use SQL_NO_CACHE when you are SELECTing frequently updated data or large sets of data
  8. Avoid wildcards at the start of LIKE queries
  9. Avoid correlated subqueries and in select and where clause (try to avoid in)
  10. No calculated comparisons — isolate indexed columns
  11. ORDER BY and LIMIT work best with equalities and covered indexes
  12. Separate text/blobs from metadata, don’t put text/blobs in results if you don’t need them
  13. Derived tables (subqueries in the FROM clause) can be useful for retrieving BLOBs without sorting them. (Self-join can speed up a query if 1st part finds the IDs and uses then to fetch the rest)
  14. ALTER TABLE…ORDER BY can take data sorted chronologically and re-order it by a different field — this can make queries on that field run faster (maybe this goes in indexing?)
  15. Know when to split a complex query and join smaller ones
  16. Delete small amounts at a time if you can
  17. Make similar queries consistent so cache is used
  18. Have good SQL query standards
  19. Don’t use deprecated features
  20. Turning OR on multiple index fields (<5.0) into UNION may speed things up (with LIMIT), after 5.0 the index_merge should pick stuff up.
  21. Don’t use COUNT * on Innodb tables for every search, do it a few times and/or summary tables, or if you need it for the total # of rows, use SQL_CALC_FOUND_ROWS and SELECT FOUND_ROWS()
  22. Use INSERT … ON DUPLICATE KEY update (INSERT IGNORE) to avoid having to SELECT
  23. use groupwise maximum instead of subqueries

Scaling Performance Tips:

  1. Use benchmarking
  2. isolate workloads don’t let administrative work interfere with customer performance. (ie backups)
  3. Debugging sucks, testing rocks!
  4. As your data grows, indexing may change (cardinality and selectivity change). Structuring may want to change. Make your schema as modular as your code. Make your code able to scale. Plan and embrace change, and get developers to do the same.

Network Performance Tips:

  1. Minimize traffic by fetching only what you need.
    1. Paging/chunked data retrieval to limit
    2. Don’t use SELECT *
    3. Be wary of lots of small quick queries if a longer query can be more efficient
  2. Use multi_query if appropriate to reduce round-trips
  3. Use stored procedures to avoid bandwidth wastage

OS Performance Tips:

  1. Use proper data partitions
    1. For Cluster. Start thinking about Cluster *before* you need them
  2. Keep the database host as clean as possible. Do you really need a windowing system on that server?
  3. Utilize the strengths of the OS
  4. pare down cron scripts
  5. create a test environment
  6. source control schema and config files
  7. for LVM innodb backups, restore to a different instance of MySQL so Innodb can roll forward
  8. partition appropriately
  9. partition your database when you have real data — do not assume you know your dataset until you have real data

MySQL Server Overall Tips:

  1. innodb_flush_commit=0 can help slave lag
  2. Optimize for data types, use consistent data types. Use PROCEDURE ANALYSE() to help determine the smallest data type for your needs.
  3. use optimistic locking, not pessimistic locking. try to use shared lock, not exclusive lock. share mode vs. FOR UPDATE
  4. if you can, compress text/blobs
  5. compress static data
  6. don’t back up static data as often
  7. enable and increase the query and buffer caches if appropriate
  8. config params — http://docs.cellblue.nl/2007/03/17/easy-mysql-performance-tweaks/ is a good reference
  9. Config variables & tips:
    1. use one of the supplied config files
    2. key_buffer, unix cache (leave some RAM free), per-connection variables, innodb memory variables
    3. be aware of global vs. per-connection variables
    4. check SHOW STATUS and SHOW VARIABLES (GLOBAL|SESSION in 5.0 and up)
    5. be aware of swapping esp. with Linux, “swappiness” (bypass OS filecache for innodb data files, innodb_flush_method=O_DIRECT if possible (this is also OS specific))
    6. defragment tables, rebuild indexes, do table maintenance
    7. If you use innodb_flush_txn_commit=1, use a battery-backed hardware cache write controller
    8. more RAM is good so faster disk speed
    9. use 64-bit architectures
  10. –skip-name-resolve
  11. increase myisam_sort_buffer_size to optimize large inserts (this is a per-connection variable)
  12. look up memory tuning parameter for on-insert caching
  13. increase temp table size in a data warehousing environment (default is 32Mb) so it doesn’t write to disk (also constrained by max_heap_table_size, default 16Mb)
  14. Run in SQL_MODE=STRICT to help identify warnings
  15. /tmp dir on battery-backed write cache
  16. consider battery-backed RAM for innodb logfiles
  17. use –safe-updates for client
  18. Redundant data is redundant

Storage Engine Performance Tips:

  1. InnoDB ALWAYS keeps the primary key as part of each index, so do not make the primary key very large
  2. Utilize different storage engines on master/slave ie, if you need fulltext indexing on a table.
  3. BLACKHOLE engine and replication is much faster than FEDERATED tables for things like logs.
  4. Know your storage engines and what performs best for your needs, know that different ones exist.
    1. ie, use MERGE tables ARCHIVE tables for logs
    2. Archive old data — don’t be a pack-rat! 2 common engines for this are ARCHIVE tables and MERGE tables
  5. use row-level instead of table-level locking for OLTP workloads
  6. try out a few schemas and storage engines in your test environment before picking one.

Database Design Performance Tips:

  1. Design sane query schemas. don’t be afraid of table joins, often they are faster than denormalization
  2. Don’t use boolean flags
  3. Use Indexes
  4. Don’t Index Everything
  5. Do not duplicate indexes
  6. Do not use large columns in indexes if the ratio of SELECTs:INSERTs is low.
  7. be careful of redundant columns in an index or across indexes
  8. Use a clever key and ORDER BY instead of MAX
  9. Normalize first, and denormalize where appropriate.
  10. Databases are not spreadsheets, even though Access really really looks like one. Then again, Access isn’t a real database
  11. use INET_ATON and INET_NTOA for IP addresses, not char or varchar
  12. make it a habit to REVERSE() email addresses, so you can easily search domains (this will help avoid wildcards at the start of LIKE queries if you want to find everyone whose e-mail is in a certain domain)
  13. A NULL data type can take more room to store than NOT NULL
  14. Choose appropriate character sets & collations — UTF16 will store each character in 2 bytes, whether it needs it or not, latin1 is faster than UTF8.
  15. Use Triggers wisely
  16. use min_rows and max_rows to specify approximate data size so space can be pre-allocated and reference points can be calculated.
  17. Use HASH indexing for indexing across columns with similar data prefixes
  18. Use myisam_pack_keys for int data
  19. be able to change your schema without ruining functionality of your code
  20. segregate tables/databases that benefit from different configuration variables

Other:

  1. Hire a MySQL ™ Certified DBA
  2. Know that there are many consulting companies out there that can help, as well as MySQL’s Professional Services.
  3. Read and post to MySQL Planet at http://www.planetmysql.org
  4. Attend the yearly MySQL Conference and Expo or other conferences with MySQL tracks (link to the conference here)
  5. Support your local User Group (link to forge page w/user groups here)

PHP : Performance Improvement Tips

Posted in 科技の卷 on 四月 5th, 2009 by Jaric – 5 Comments
  1. Don’t use foreach loop as long as you can avoid it, for loops are faster than any other looping constructs.
    When it comes to various looping constructs and control statements it could differ based on case to case. Please refer http://www.phpbench.com/ by Chris Vincent, he has done remarkable job by providing detailed benchmarks with various combinations. 
  2. echo is faster than print. As echo is one of the language construct which don’t return anything while print will return 0 or 1 based on success or failure. 
  3. include_once is costlier then include statement. As it will have to look whether class definition you are trying to include is already included or not? 
  4. Always use single quotes for long strings and not the double quotes. Because for double quotes php will try to search and evaluate $vars found in that string. So in that case echo ‘It was really a long story to finish ‘. $name is faster then echo “It was really a long story to finish $name”.
    But then echo ‘It was really a long story to finish’ , $name can be faster then first one too, as it don’t required any string manipulation from php and just outputting all arguments to screen. This matters most when we need to do lots of text processing or html to be generate from our application/scripts.
  5. Magic methods like __string,__set,__get can slow down things. But it’s okey as it can give more clarity in our code. Personally I like to use __set and __get as it let me stay away from getter and setter methods. __autoload is expensive and if you don’t really need it then don’t use them. 
  6. Don’t use for($i=0; $i<=count($arrPerson); $i++) {..} instead use,
    for($i=0,$total = count($arrPerson); $i<$total; $i++) {..}. The previous one will call count function for each iteration of the loop while the second one will call count function just once. 
  7. If you can declare a method as static then let it be static, they are faster around 33% then member functions. 
  8. $arrPerson[‘name'] is faster than $arrPerson[name]. So try using single quotes for associative arrays. 
  9. If you can solve your any problem without using regular expressions, then don’t use them. Regex functions are slower than their php counterparts. For example use str_replace instead of preg_replace if it can do serve your purpose. 
  10. If you will provide array as any argument for str_replace it will be faster instead of giving string inputs for single search and replacement.
    Slow:
    str_replace( ‘search’, ‘replace’,$strAssay);
    Fast:
    str_replace(array(‘search’),array(‘replace’),$strAssay);
  11. Try to minimize the relative paths for file include. For relative path includes it will search into default include path then current directory and so on.. So file search in that case can take long time. Instead specify WEB_ROOT constant which will be physical path of your web directory and which could be defined by following way.
    define(’WEB_ROOT’,str_replace(array(’\’),array(’/’),dirname(__FILE__)) . ‘/’);
  12. Identical operator (===) is faster than (==) operator as identical operator will include type checking also. So If( 1 == ‘1′) will return true, If( 0 == ”) will return true while if you use identical operator both this conditions If( 1 === ‘1′) and If(0 === ”) will return false. So it is recommended to use identical operator when you are going to use some boolean variables for deciding the flow/control of your application. 
  13. Don’t use short tags <? and try using <?php, it can heart you when you go an deploy your application on some other servers. 
  14. Don’t use or relay on register_globals or magic quotes and read and configure your php.ini settings carefully. You can read comments over parameters and can set those parameters based on your server setup and application requirement for optimum performance. 
  15. Disable or comment extensions you are not going to use ever from php.ini

In addition to all this develop or follow coding standard for variables, classes, methods and file naming. It will reduce development time due to certainty. Always use proper variable names there is nothing wrong having variable name like $blnIsVARAdminLoggedIn. Proper naming convention will help you and your team members while it comes to maintenance part of the project. Writing comments for not understandable variable or method names would be less helpful. Use editors with auto-complete feature like Eclipse, Aptana which would reduce the hard-work for typing long variable or method names.

Related Material: PHP Coding Standard by Fredrik Kristiansen / DB Medialab

受保護的文章:code sniffer

Posted in 科技の卷 on 四月 1st, 2009 by Jaric – 輸入密碼方能觀看迴響。

本文受密碼保護,須填寫您的密碼才能閱讀。


PHP CodeSniffer

Posted in 科技の卷 on 四月 1st, 2009 by Jaric – Be the first to comment

http://pear.php.net/manual/en/package.php.php-codesniffer.intro.php

pecl install php_codesniffer

使用方法 : 

Checking a file with PHP_CodeSniffer

phpcs /path/to/code/myfile.php

FILE: /path/to/code/myfile.php
--------------------------------------------------------------------------------
FOUND 5 ERROR(S) AFFECTING 2 LINE(S)
--------------------------------------------------------------------------------
  2 | ERROR | Missing file doc comment
 20 | ERROR | PHP keywords must be lowercase; expected "false" but found "FALSE"
 47 | ERROR | Line not indented correctly; expected 4 spaces but found 1
 51 | ERROR | Missing function doc comment
 88 | ERROR | Line not indented correctly; expected 9 spaces but found 6
--------------------------------------------------------------------------------

 

Checking a directory with PHP_CodeSniffer

phpcs /path/to/code

FILE: /path/to/code/myfile.php
--------------------------------------------------------------------------------
FOUND 5 ERROR(S) AFFECTING 5 LINE(S)
--------------------------------------------------------------------------------
  2 | ERROR | Missing file doc comment
 20 | ERROR | PHP keywords must be lowercase; expected "false" but found "FALSE"
 47 | ERROR | Line not indented correctly; expected 4 spaces but found 1
 51 | ERROR | Missing function doc comment
 88 | ERROR | Line not indented correctly; expected 9 spaces but found 6
--------------------------------------------------------------------------------

FILE: /path/to/code/yourfile.php
--------------------------------------------------------------------------------
FOUND 1 ERROR(S) AND 1 WARNING(S) AFFECTING 1 LINE(S)
--------------------------------------------------------------------------------
 21 | ERROR   | PHP keywords must be lowercase; expected "false" but found
    |         | "FALSE"
 21 | WARNING | Equals sign not aligned with surrounding assignments
--------------------------------------------------------------------------------

[轉錄]全球軟體專利發展趨勢與自由軟體

Posted in 生活の卷, 科技の卷 on 三月 28th, 2009 by Jaric – Be the first to comment

http://0rz.tw/DTZDp

Written by 葉名軒 自由軟體鑄造場/摘錄    Friday, 25 April 2008
袁建中 資策會網多所顧問工程師/主講 

◎ 無所不在的軟體與不可忽視的軟體專利

隨著電腦網路的演進和發展,每個人越來越依賴電腦軟體的便利,但多數人對軟體專利越來越多、多到自己一不小心便會侵權的情況毫無所覺。本次自由軟體法律研討會邀請到資策會網多所的顧問工程師袁建中,來為各位對全球軟體專利發展趨勢和自由軟體做一番介紹。 開場他先秀了一個 The European E-Commerce Emergency 的網頁,一個頁面上有多達數 10 個號碼標示,每個號碼都代表一個有專利的商業活動,來告訴與會者,現今軟體專利處於一個無所不在的狀況,用「專利叢林」來形容也不為過。

袁建中說:「今天在網路上做一個活動,你不侵害人家的專利,幾乎是不可能。」他表示,當使用者瀏覽一個網頁,從在鍵盤上按下 Enter 開始算起,到伺服器端傳資訊回來,整個過程至少會涵蓋 30 幾個標準及上萬個專利。「簡單來講,就是這個情況。」

根據統計調查,美國軟體專利基本上在各行業領域中,排名第一的是通訊產業,其次依排名羅列則是 Operating system、Image processing、Vehicles 等,可以說只要在資訊、IT 領域的範疇幾乎都有涵蓋到。

而在相同、關聯產品和服務上,軟體專利佈署密度高於其他產業,國外軟體公司擅於藉由公開在產品、服務上佈署的專利,迫使競爭者不敢進入市場。且軟體專利不打官司則已,一打上官司,金額都十分龐大,如 Doyle 告微軟侵權一案(聯邦地方法院專利案號:5,838,906),其對微軟求償金便達 5.2億美元,判決時更追加至 5.75 億美元。目前,台灣國內廠商對專利觀念仍集中在硬體,較少著墨軟體,常忽略具有價值的軟體也可申請專利保護。

◎ 專利和著作權的差異和區別

要談專利,必須先瞭解專利和著作權的定義及關係,兩者乍看之下很相似,但其實卻相差許多。袁建中先舉了抓老鼠的例子,來告訴在場觀眾,Idea、Concept 是不受專利和著作權保護的,專利保護的立場必須是具體事實、或是具有方法流程、技術內涵的事物,簡單來說就是具技術性的東西;就如同住家附近老鼠很多,某甲想到那就來殺老鼠吧!但他不能把殺老鼠這個 Idea 變成專利,藉此向每個想殺老鼠的人收取專利費用,他必須要把殺老鼠的技術(如電擊老鼠等)具體陳述,才能對此「技術」申請專利。

著作權則是保護事物所展現出來的表現型式,而非關它的技術內涵,簡單來講,就是具藝術性的東西,且很重要的一點是它必須具「原創性」。舉例來說,若一本食譜禁止人家拷貝書上的照片圖說,這是著作權所保護的;若是一位廚師寫了一份食譜,聲稱:「任何人根據這份食譜上的作法所做出來的菜,要付錢給我。」這是專利所保護的範疇。

著作權的世界中,可容許同一個作品各自擁有著作權,只要能證明「你是原創」;而專利則不管你是否先前有看過該專利-是否為原創對專利來講並不重要,只要你的東西「跟申請專利者一樣」,就是侵權。不過,專利與著作權兩者所持保護標的迥異,然而兩者卻是可以並行不悖的,兩者並非互斥,只是所保護的性質不同罷了。

最早,軟體是以著作權來做保護,現在是以專利來做保護較多,當然用著作權做保護的軟體還是存在。但軟體用著作權來保護,因為著作權是保護藝術性的東西,但是程式重點在其「功能」,用著作權來保護有點奇怪,也會有一些不利訴訟的弱點。

他談到,自己所接到的軟體類訴訟案,只要是用著作權保護的情況,勝訴的可能性幾乎都很低,因為通常被告看到你的程式後再做的東西,絕對會跟你的東西不會是一樣的(無論是在程式碼或使用介面上),一定會有差異。所以,他也給了一個小建議:若要用著作權做保護,可以在程式或是介面上留一些良性 bug、暗號,比如在 Source code 中留一串亂碼等,以利在法庭上對質時能成為有力證據。

此外,袁建中表示,軟體專利有個很重要的要件,叫做「充分揭露」,他並舉傅培美食譜和美國裹蜂蜜烤花生申請專利的例子告訴在場觀眾,要申請專利必須將所有數值都講清楚,讓任何人根據該步驟方法做,做出來的結果都會一樣才行。他表示,這跟自由軟體的精神有點像。

至於什麼樣的態樣可以納入專利法保護的範疇呢?他表示,通常「可專利性(patentable)」要有五個要件:法定標的、產業利用性(此兩個是絕對要件)和新穎性、進步性(此兩種是相對要件),以及前面所提過的「充分揭露」。但他也提醒在場聽眾,符合上述態樣並不代表一定可以拿到專利,申請專利這只是前置條件,之後還有一段漫長的路得走。

◎ 美國軟體專利發展演進

美國是最早承認軟體專利、且立法也最成熟的國家,1960 年代以前由於個人電腦尚未出世,沒有所謂的軟體,只有機器。直到1970-80 年代才陸續立法,如 Mental Steps Doctrine 便在當時認定軟體是人為設定的東西,不應有專利等等。

1980 年,美國國會依據國家新科技使用著作物委員會的建議,正式將電腦程式納入著作權保護範疇。而國際上也在後來陸續有了相關的公約來管理專利問題,如在聯合國底下的巴黎公約,以及在 WTO 底下的 TRIPS 公約等等,這些基本仍不離用著作權方式來保護程式的概念。值得一提的是,由於台灣並非聯合國會員,但卻是 WTO 會員,故基本上,台灣要遵守 TRIPS 公約,而非遵守巴黎公約。

◎ 各國專利判斷標準

軟體服務經常是跨區域性的,故瞭解各國不同的專利判斷標準,也是軟體公司和自由軟體開發者必須瞭解的課題。根據袁建中的看法,他主要將美日分為兩大不同派別:美國是以 Practical Application,即看「該申請專利的事物是否有應用價值」,日本則是著重在審查「硬體和程式之間的實施步驟」(How to use H/W resource),而歐洲判定的標準又與美日有部分重疊,但其是以「技術價值」的貢獻來做判定(Technical contribution)。

◎ 軟體專利 / 著作權保護的範圍是?

由於電腦程式是透過紀錄媒體媒介、硬體系統、以及網路下載等路徑傳佈,所以關於專利和著作權有保障到哪一個流程步驟,必須細細切割每一步驟來觀察分析。基本上,軟體本身包含其程式主體和資料架構、Source code、Object code、Sequence、Organization以及 User Interface等都囊括在著作權所保護的範疇。不過,著作權所保護的,僅止於「符號排列形式」,而非關程式的功能及技術實施方面。

實際上,一個程式要能發揮其功能和執行,單靠程式本身是不可能運作的。首先它必須有載體(ex:隨身碟、光碟片等)來存取程式本身到硬體(ex:PC)的系統上讀取執行。而自從有了網路之後,透過通訊協定傳輸下載的資訊內容及程式軟體,也成為新的存取方式。所以專利法的保護隨著電腦的逐步演進,也從方法發明、漸漸擴及到系統發明、紀錄媒體形式之發明及程式產品本身。

袁建中在介紹 Doyle 告微軟侵權一案時,提到美國有不少人藉專利法的判定標準,藉機海撈一筆。他也提醒,在台灣的公司若有此類國際性專利訴訟案在不同國家進行時,必須謹記:在美國法庭的訴訟切勿隱匿不報,即便在另一個國家的判決不利於己方,也應該將案件附上,以免被美國法庭認定己方不誠實,對判決影響甚鉅。另外,台灣人常見的掛名惡習所引起的「軟體發明人不實」問題,也是在此類訴訟進行時,需要注意的。

◎ 自由軟體 V.S. 專利軟體

自由軟體的基本權利是任意使用軟體的自由、研究軟體如何運作方式的自由,並可修改使其符合自身需求的自由、有再散布該軟體的自由、有改善再利用該軟體的自由,並可以發表改寫版供公眾使用,這與專利軟體的概念可說是背道而馳,因此,自由軟體支持者反對軟體專利的態度是顯而易見地,其反對軟體專利原因不外乎:降低競爭和阻礙創新。

但袁建中表示,至今為止,並沒有明確案例和研究報告能對「軟體專利降低競爭及阻礙創新」提出顯著相關的數據。他認為自由軟體在開發與散布上具有特殊性,而軟體專利對於這樣的開發與散布方式有很大的威脅性。且在法律位階上,專利是一個法,是各國都有的立法,但自由軟體則是一個合約關係,這兩者之間位階是不一樣的。合約上沒訂定的東西,基本上是以法來看,這也是自由軟體開發者必須注意的事情。

自由軟體是力主使用者有四大自由的軟體,軟體專利保護制度則是從保護商業利益出發,使用者自由與商業利益在本質上無法完全兼顧,因此自由軟體支持者和軟體廠商常站在對立的兩端,他講道:「只能說,這是一場制度災難。」

◎ 對自由軟體開發者的小提醒

演講的尾聲,他也提醒自由軟體開發者,根據台灣的專利法第 56 條所述,專利法其實只管軟體在製造、販賣、進口及使用上有無侵權事宜,對「開發」其實是不管的,所以只是純粹進行程式開發時無須擔憂侵權問題,但是一旦牽涉到商業流程,如網路提供下載(散布)並收取費用(販賣)時,便必須留意程式是否侵犯他人專利的問題了。

另外,當身處專利侵權官司時,答話也需留意。當自己被告時,應該先主張該專利權無效,不構成侵權;不被庭上接受時才再以「合理使用」作為論述點,千萬別一開始就說自己是合理使用,「因為你在主張合理使用的時候,你已經承認自己是侵權了。」袁建中說。

最後他也提醒在座聽眾,由於自由軟體接受度逐漸提高,許多軟體廠商也開始試圖開放其部份源碼提供自由軟體開發者使用,但還是必須注意其軟體公司在專利授權的合約內容,哪些部份有授權、使用上有哪些但書,以免為此吃上官司。

◎ 其他演講摘要,請見100 & 101期電子報
◎ 簡報 & 影片下載

 

CRM software on sourcefoge

Posted in 科技の卷 on 三月 24th, 2009 by Jaric – 1 Comment

Cite CRM
vtiger CRM
Sugar CRM