How to generate QR code

We can use qrencode utility to generate QR code:

https://fukuchi.org/works/qrencode

 

Example:

     qrencode     https://blog.zhenglei.net     -o   blog_url.png

Check Result:    display blog_url.png

 

 

Encrypt WordPress Server with Let’s Encrypt SSL certificate

# Install acme.sh tool
git clone https://github.com/Neilpang/acme.sh.git

cd acme.sh

./acme.sh --install

#install cert
cd ~/.acme.sh
# issue a RSA cert
sudo ./acme.sh --issue -d blog.zhenglei.net -w /var/www/html/wordpress

# issue a ECC cert
sudo ./acme.sh --issue -d blog.zhenglei.net -w /var/www/html/wordpress --keylength ec-256

# Copy the cert into target directory
sudo mkdir -p /etc/nginx/ssl

sudo ./acme.sh --installcert -d blog.zhenglei.net --key-file /etc/nginx/ssl/blog.zhenglei.net.ecc.key --fullchain-file /etc/nginx/ssl/blog.zhenglei.net.ecc.bundle --ecc
sudo ./acme.sh --installcert -d blog.zhenglei.net --key-file /etc/nginx/ssl/blog.zhenglei.net.key --fullchain-file /etc/nginx/ssl/blog.zhenglei.net.bundle
# Update nginx config
server { #listen 80; listen 443; ssl on; ssl_certificate ssl/blog.zhenglei.net.bundle; ssl_certificate_key ssl/blog.zhenglei.net.key; ssl_session_timeout 5m; ssl_protocols SSLv3 TLSv1; ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv3:+EXP; ssl_prefer_server_ciphers on; ... }
server {
listen 80 default_server; server_name blog.zhenglei.net;

# Let's Encrypt, http method
location ~ \.well-known
{
root /var/www/html/wordpress/;
allow all;
access_log on;
log_not_found on;
} return 301 https://$server_name$request_uri; }

转: 十家你必須認識的NPE

蔣士棋╱北美智權報 編輯部

在產業界內,沒有人喜歡到處提告的「專利蟑螂」,因為它們往往都是憑著手中幾件專利就隨意向大公司討賠償,光是繁複的法律程序就搞得企業內的法務和專利人員苦不堪言。如果放寬一點來看,其實包括個人發明者、大學以及政府或民間資助的法人研究機構,都可以被納入所謂的NPE(Non-practicing Entities,非專利實施實體)當中,也有像ARM之類專門以技術授權金為營收來源的業者。不管喜不喜歡,第一步都得先從認識他們開始。

猜猜看:一件專利可以提起多少件侵權訴訟?想要回答這個問題,必須得認識US 6,266,674 B1這件專利。這件2001年獲證、所有權人為eDekka LLC的專利,目前總共提起了超過兩百件的專利侵權訴訟,盯上了256個被告。如果這件專利未來繼續有效,這兩個數字必然還會再攀升。

2015年,NPE控告人數與提告案量雙雙成長

根據RPX的調查,NPE的活動,經過2014年的沉寂後,到了2015年又回到高峰。就案量來看,從2010年至2013年,美國每年的專利侵權訴訟案都維持在700~800案的成長,其中由NPE所發動的案件數量,一度出現每年翻倍成長的趨勢(圖1),但在2014年、也就是美國正式實施專利複審程序(Inter Partes Review, IPR)之後的兩年,整體的案量出現明顯下滑,卻在2015年又回到2013年左右的水準。

圖1:2010~2015年美國專利侵權案件量(按NPE/非NPE區分)

資料來源:2015 NPE Activity

若是從被告人數來看,NPE的活動力更為明顯。在2015年,NPE以及非NPE以專利侵權提告的人數總和,是五年以來第二多的,然而,其中屬於非NPE案件的被告為2485名,反而是五年來最少的。也就是說,在2015由NPE提告的人數(5349名),已經大幅超越了過去數年(圖2)。

圖2:2010~2015年美國專利侵權案件被告人數(按NPE/非NPE區分)

資料來源:2015 NPE Activity

美國專利侵權訴訟的變化,與專利複審程序的改革不無關係。本刊在前文(USPTO提交多方專利複審程序(IPR)修正建議)中曾經分析,美國發明法案(AIA)實施的多方複審程序,可以讓被控侵權的廠商向專利訴訟及上訴委員會(PTAB),以更透明、成本更低廉的方式提出專利無效的異議,無形中增加了NPE興訟的成本,所以在2014年才會出現專利侵權訴訟案量與被告人數減少的現象;但就2015年的數字來看,似乎NPE也已經逐漸熟悉這套規則,也發展出了新的應對之道。未來IPR程序是否還能發揮牽制NPE的效果?值得繼續關注。

另一方面,包括前文提及的eDekka LLC在內,RPX也依據提告人數,統計出2015年全美前十大的NPE(見表1):

表1:2015年美國前10大NPE(按提告人數排序)

Rank NPE Defendants

1 Leigh M. Rothschild 139

2 eDekka LLC 102

3 IPNav 96

4 Empire IP LLC 81

5 Wi-LAN Inc. 75

6 CryptoPeak Solutions, LLC 65

7 Shipping & Transit, LLC 65

8 Hawk Technology Systems LLC 59

9 Olivistar LLC 57

10 Acacia Research Corporation 56

資料來源:2015 NPE Activity

從這份名單中可以發現,雖然有不少NPE僅以技術授權或訴訟維持營運,但排名第一的,卻是不折不扣的個人發明家。根據Rothschild本人的說法,比起把實際投入生產,他對於專心從事發明工作更有興趣。為了打點他的專利授權事業,Rothschild更成立了十家公司來分門別類管理他所發明的上百件專利。

美國前十大NPE 不乏專業發明人與資深科學家

此外,排名第五的Wi-LAN Inc.可是大有來頭,創辦人之一的Hatim Zaghloul在通訊領域就是個大師級人物,其所發明的WODFM技術也是IEEE在802.11a的產業標準。2014年,Wi-LAN Inc.的權利金收入就高達9千8百萬美元(約32億台幣)。

在美國,專利產業的發展百花齊放,即使大多數的NPE仍然以興訟為主業,但不可否認的是,NPE也讓只懂技術鑽研卻無力付諸生產的純發明家們,多了個獲利的機會。就算再怎麼不認同他們的濫訴手法,也必須正視此一現象的存在,並及早規劃應對方法,若是真的被盯上,恐怕就後悔莫及了。

參考資料:

2015 NPE Activity, PRX Corporation, 2016/01/04
Leigh Rothschild | Intellectual Ventures, Inventor Spotlight, Intellectual Ventures,
WiLAN

转: USPTO提交多方專利複審程序(IPR)修正建議

蔣士棋╱北美智權報 編輯部

2011年開始實施的美國發明法案(Leahy-Smith America Invents Act),堪稱近年來美國專利制度的最大一次變革;在實施滿四年之後,今年九月,美國專利商標局(USPTO)向美國國會提交了一份關於美國發明法案(AIA)的檢討研究報告,其中最值得台灣廠商注意的,就是多方複審程序的兩大修正建議。

2011年,美國國會通過了由Leahy以及Smith兩位議員領銜的美國發明法案(AIA),引進了許多新制度,大幅改變既有的美國專利遊戲規則,例如專利所有權的認定基準,從長年施行的先發明原則(first-to-invent)改變為先申請原則(first-inventor-to-file)、允許USPTO自訂專利年費規則、允許第三人在專利審查階段案提出先前技術等等;但最重要的,恐怕還是專利獲證後的異議程序。

根據AIA的規定,一項專利獲證之後,如果第三人有異議,可以在獲證之後的九個月內提出領證後複審(Post Grant Review, PGR),若是超過九個月,則需提出多方複審(Inter Partes Review, IPR)。兩項複審程序;其中PGR可針對專利的新穎性、進步性和專利文件缺漏提出異議,但IPR則只能對新穎性、進步性等可專利性的實質要件提出異議。

實施AIA後,專利獲證後異議程序更加接近司法運作

這兩項複審程序都必須由新成立的專利訴訟及上訴委員會(Patent Trial and Appeal Board, PTAB)進行審理。與過去的覆核(Re-examination)不同的是,PTAB的運作更加接近司法系統:對於每一件異議案,PTAB都會由三名資深審查官轉任的專利裁判員(Administrative Patent Judges, APJ)進行裁判,如果遇到特別困難的案件,可增加APJ的人數至七名,與司法系統中的聯席審判制度(en banc)類似。如果異議雙方對於PTAB的裁決結果不符,可再向管轄智財權案件的美國聯邦巡迴上訴法院(CAFC)提請上訴。

Orrick Law Firm合夥律師張亞樵解釋,實施IPR的目的是為了改進過去覆核制度成本高昂、效率低落的缺點,進而使專利複審更透明而具彈性,例如只要異議人與專利權人達成和解(settlement),PGR與IPR的程序都可以隨時終止。自從2012年實施以來,PTAB每年的IPR收案量都相當顯著地成長,如2014年時聲請IPR的案件數共1310件,但2015年度光是上半年,IPR收件數就高達1319件(表1)。

表1:PTAB歷年IPR案件處理狀況統計

資料來源:http://uspto.gov

張亞樵指出,PTAB在累積了數千件的裁判經驗後,發現在IPR的審判程序上有兩點應該進行修正。首先,在實務上,美國許多非專利實施實體(Non-Practice Entity, NPE)會以同一件專利向不同廠商控告侵權,為了反制此類濫訴,遭控告的廠商都會向PTAB申請IPR;如此一來,就會有許多異議人對同樣一件專利申請多方複審,徒增行政上的困擾。PTAB建議的修正方向,就是參考美國民事裁判中的團體訴訟(class action)制度,讓在相近時間內、對於同一件專利提出IPR的異議人加入同一件裁判案,以減輕聲請人以及PTAB的負擔並加快IPR進程。

IPR的利害關係人揭露應給予補正機會

此外,在IPR程序中,聲請人必須在提出聲請時就列齊所有利害關係人(real parties in interest)。張亞樵指出,這一條規定對於「利害關係人」的定義太過於寬廣,以至於每年有許多IPR複審案,就是因為這項缺失而無法成案。他舉例,「如果一家公司把自己的專利分割出來成立一家新公司,這家新公司申請IPR時,母公司要不要列入利害關係人?或者當群創申請IPR時,鴻海算不算他的利害關係人?如果鴻海算,那鴻海旗下的子公司是不是也得全部列出來?」PTAB因此建議,因為利害關係人的認定在每個案例上都不盡相同,只要聲請人不是故意欺瞞,都應該允許其在事後一定期間內補充或修正,以免聲請人的權益因此受損。

不過,張亞樵還是提醒,雖然PTAB的運作相當接近司法審判,但與真正的民事訴訟還是有差距。「美國的民事程序允許中途加入新證據、加入新的原告或被告,但是IPR爭執的就是專利本身的專利性,」張亞樵解釋,在IPR中,獲勝的關鍵其實就是一開始提交給PTAB的書面資料,如果內容不夠充分,後續就很難扳回劣勢;而且,因為參與裁判的APJ都是資深的專利審查官,聲請人也應該有被問及專業技術問題的準備。總而言之,在提出IPR前就把事實以及技術相關資料準備妥當,不過度依賴訴訟技巧,就是在IPR中獲勝的關鍵。

資料來源:

「通訊產業專利趨勢與訴訟分析」研討會會議資料
Report to Congress – Study and Report on the Implementation of the Leahy-Smith America Invents Act, USPTO, Sep. 2015

WPAC file for windows 10

Using socks instead of socket in windows 10,

cat wpad.us:

function FindProxyForURL(url, host)
{
if (isInNet(host, “172.16.0.0”, “255.240.0.0”)||
isInNet(host, “192.168.0.0”, “255.255.0.0”)||
isInNet(host, “10.0.0.0”,”255.0.0.0″)||
isInNet(host, “127.0.0.0”,”255.0.0.0″)||
isInNet(host, “comforthost.net”,”255.255.255.255″)||
isInNet(host, “www.comforthost.net”,”255.255.255.255″)||
isInNet(host, “panel.comforthost.net”,”255.255.255.255″)||
dnsDomainIs(host, “.cn”)||
dnsDomainIs(host, “.jd.com”)||
dnsDomainIs(host, “.baidu.com”)||
dnsDomainIs(host, “.taobao.com”)||
dnsDomainIs(host, “.tmall.com”)||
dnsDomainIs(host, “.springtour.com”))
{ return “DIRECT“; }
if ( isInNet(host,”60.254.128.0”, “255.255.192.0”)||
isInNet(host,”103.246.248.0″, “255.255.255.0”)||
isInNet(host,”113.29.0.0″, “255.255.128.0”)||
isInNet(host,”117.74.96.0″, “255.255.240.0”)||
isInNet(host,”171.16.0.0″, “255.240.0.0”)||
isInNet(host,”171.32.0.0″, “255.254.0.0”)||
isInNet(host,”171.64.0.0″, “255.240.0.0”)||
isInNet(host,”202.2.96.0″, “255.255.224.0”)||
isInNet(host,”202.72.96.0″, “255.255.224.0”)||
isInNet(host,”203.31.234.0″, “255.255.255.0”)||
isInNet(host,”203.144.48.0″, “255.255.240.0”)||
isInNet(host,”203.187.128.0″, “255.255.224.0”)||
isInNet(host,”216.0.0.0″, “254.0.0.0”)
)
{ return “SOCKS 127.0.0.1: 1080″; }
if ( isInNet(host,”1.0.0.0″, “255.0.0.0”)||
isInNet(host,”14.0.0.0″, “255.0.0.0”)||
isInNet(host,”27.0.0.0″, “255.0.0.0”)||
isInNet(host,”36.0.0.0″, “255.0.0.0”)||
isInNet(host,”39.0.0.0″, “255.0.0.0”)||
isInNet(host,”42.0.0.0″, “254.0.0.0”)||
isInNet(host,”45.64.112.0″, “255.255.254.0”)||
isInNet(host,”49.0.0.0″, “255.0.0.0”)||
isInNet(host,”54.222.0.0″, “255.254.0.0”)||
isInNet(host,”58.0.0.0″, “254.0.0.0”)||
isInNet(host,”60.0.0.0″, “254.0.0.0”)||
isInNet(host,”91.234.36.0″, “255.255.255.0”)||
isInNet(host,”101.0.0.0″, “255.0.0.0”)||
isInNet(host,”103.0.0.0″, “255.0.0.0”)||
isInNet(host,”106.0.0.0″, “255.0.0.0”)||
isInNet(host,”110.0.0.0″, “254.0.0.0”)||
isInNet(host,”112.0.0.0″, “240.0.0.0”)||
isInNet(host,”139.9.0.0″, “255.255.0.0”)||
isInNet(host,”139.129.0.0″, “255.255.0.0”)||
isInNet(host,”139.148.0.0″, “255.255.0.0”)||
isInNet(host,”139.155.0.0″, “255.255.0.0”)||
isInNet(host,”139.159.0.0″, “255.255.0.0”)||
isInNet(host,”139.170.0.0″, “255.255.0.0”)||
isInNet(host,”139.176.0.0″, “255.255.0.0”)||
isInNet(host,”139.183.0.0″, “255.255.0.0”)||
isInNet(host,”139.186.0.0″, “255.255.0.0”)||
isInNet(host,”139.189.0.0″, “255.255.0.0”)||
isInNet(host,”139.192.0.0″, “255.240.0.0”)||
isInNet(host,”139.208.0.0″, “255.248.0.0”)||
isInNet(host,”139.216.0.0″, “255.252.0.0”)||
isInNet(host,”139.220.0.0″, “255.254.0.0”)||
isInNet(host,”139.224.0.0″, “255.255.0.0”)||
isInNet(host,”139.226.0.0″, “255.254.0.0”)||
isInNet(host,”140.75.0.0″, “255.255.0.0”)||
isInNet(host,”140.143.0.0″, “255.255.0.0”)||
isInNet(host,”140.205.0.0″, “255.255.0.0”)||
isInNet(host,”140.206.0.0″, “255.254.0.0”)||
isInNet(host,”140.210.0.0″, “255.255.0.0”)||
isInNet(host,”140.224.0.0″, “255.255.0.0”)||
isInNet(host,”140.237.0.0″, “255.255.0.0”)||
isInNet(host,”140.240.0.0″, “255.255.0.0”)||
isInNet(host,”140.243.0.0″, “255.255.0.0”)||
isInNet(host,”140.246.0.0″, “255.255.0.0”)||
isInNet(host,”140.249.0.0″, “255.255.0.0”)||
isInNet(host,”140.250.0.0″, “255.255.0.0”)||
isInNet(host,”140.255.0.0″, “255.255.0.0”)||
isInNet(host,”144.0.0.0″, “255.254.0.0”)||
isInNet(host,”144.7.0.0″, “255.255.0.0”)||
isInNet(host,”144.12.0.0″, “255.255.0.0”)||
isInNet(host,”144.52.0.0″, “255.255.0.0”)||
isInNet(host,”144.123.0.0″, “255.255.0.0”)||
isInNet(host,”144.255.0.0″, “255.255.0.0”)||
isInNet(host,”150.0.0.0″, “255.255.0.0”)||
isInNet(host,”150.115.0.0″, “255.255.0.0”)||
isInNet(host,”150.121.0.0″, “255.255.0.0”)||
isInNet(host,”150.122.0.0″, “255.255.0.0”)||
isInNet(host,”150.129.0.0″, “255.255.0.0”)||
isInNet(host,”150.138.0.0″, “255.254.0.0”)||
isInNet(host,”150.223.0.0″, “255.255.0.0”)||
isInNet(host,”150.242.0.0″, “255.255.0.0”)||
isInNet(host,”150.255.0.0″, “255.255.0.0”)||
isInNet(host,”152.104.128.0″, “255.255.128.0”)||
isInNet(host,”153.0.0.0″, “255.255.0.0”)||
isInNet(host,”153.3.0.0″, “255.255.0.0”)||
isInNet(host,”153.34.0.0″, “255.254.0.0”)||
isInNet(host,”153.36.0.0″, “255.254.0.0”)||
isInNet(host,”153.99.0.0″, “255.255.0.0”)||
isInNet(host,”153.101.0.0″, “255.255.0.0”)||
isInNet(host,”153.118.0.0″, “255.254.0.0”)||
isInNet(host,”157.0.0.0″, “255.255.0.0”)||
isInNet(host,”157.18.0.0″, “255.255.0.0”)||
isInNet(host,”157.61.0.0″, “255.255.0.0”)||
isInNet(host,”157.122.0.0″, “255.255.0.0”)||
isInNet(host,”157.148.0.0″, “255.255.0.0”)||
isInNet(host,”157.156.0.0″, “255.255.0.0”)||
isInNet(host,”157.255.0.0″, “255.255.0.0”)||
isInNet(host,”159.226.0.0″, “255.255.0.0”)||
isInNet(host,”161.207.0.0″, “255.255.0.0”)||
isInNet(host,”162.105.0.0″, “255.255.0.0”)||
isInNet(host,”163.0.0.0″, “255.255.0.0”)||
isInNet(host,”163.47.4.0″, “255.255.252.0”)||
isInNet(host,”163.48.0.0″, “255.248.0.0”)||
isInNet(host,”163.125.0.0″, “255.255.0.0”)||
isInNet(host,”163.142.0.0″, “255.255.0.0”)||
isInNet(host,”163.177.0.0″, “255.255.0.0”)||
isInNet(host,”163.179.0.0″, “255.255.0.0”)||
isInNet(host,”163.204.0.0″, “255.255.0.0”)||
isInNet(host,”166.111.0.0″, “255.255.0.0”)||
isInNet(host,”167.139.0.0″, “255.255.0.0”)||
isInNet(host,”167.189.0.0″, “255.255.0.0”)||
isInNet(host,”168.160.0.0″, “255.255.0.0”)||
isInNet(host,”171.0.0.0″, “255.128.0.0”)||
isInNet(host,”171.208.0.0″, “255.240.0.0”)||
isInNet(host,”175.0.0.0″, “255.0.0.0”)||
isInNet(host,”180.0.0.0″, “255.0.0.0”)||
isInNet(host,”182.0.0.0″, “254.0.0.0”)||
isInNet(host,”192.124.154.0″, “255.255.255.0”)||
isInNet(host,”192.188.170.0″, “255.255.254.0”)||
isInNet(host,”192.188.172.0″, “255.255.255.0”)||
isInNet(host,”202.0.0.0″, “254.0.0.0”)||
isInNet(host,”210.0.0.0″, “254.0.0.0”)||
isInNet(host,”216.0.0.0″, “248.0.0.0”)||
isPlainHostName(host)
)
{ return “DIRECT“; }
return “SOCKS 127.0.0.1: 1080″
}

 

中银国际在线行权平台

BOCI Online Platform (All in Hong Kong Time) 中银国际在线行权平台(以下均为香港时间)

Cash Exercise (24-hour)
现金行权 24小时)

Cashless Exercise (20-hour)
非现金行权(20小时)

Order Time
下单时间

Trade Day
交易的执行日

Order Time
下单时间

Trade Day
交易的执行日

T Day 00:00 ~ 15:30
于当日00:0015:30之间下单

T Day
交易于当日执行

T Day 00:00 ~ 16:00
于当日00:0016:00下单

T Day
交易于当日执行

T Day 15:31 ~ 23:59
于当日15:3123:59之间下单

T+1 Day
交易顺延一个工作日执行

T Day 16:01 ~ 20:00
于当日16:0120:00下单

Do Not Accept Online Transactions
在线行权系统不接受下单

T Day 20:01 ~ 23:59
于当日20:0123:59下单

T+1 Day
交易顺延一个工作日执行

Delete spam wordpress comment by script

bash tool to delete spam or un-approved comment in WordPress:

http://dl.dropbox.com/u/45095875/wp_comment_v1.sh

where:

WP_DIR is the directory where WordPress instaled.

Call WP_del_SPAM_Comment to remove spam comments

Call WP_del_UA_Comment to remove un approved comments.

 

 

Install Alfresco 3.4 on debian

# Install open office in headless mode

apt-get  install   openoffice.org-headless

 

# Install imagemagick

apt-get install imagemagick

 

# Build swftools from source code

apt-get install build-essential

wget http://www.swftools.org/swftools-0.9.2.tar.gz

apt-get install libjpeg62-dev libfreetype6-dev libpng3-dev libt1-dev libungif4-dev

tar xvfz swftools-0.9.2.tar.gz

cd  swftools-0.9.2

./configure –prefix=/opt/local/swftools

make

make install

apt-get remove –purge libjpeg62-dev libfreetype6-dev libpng3-dev libt1-dev libungif4-dev

 

# Install tinymce

apt-get install tinymce

 

# Install Sun JVM6 from non-free repository

apt-get install sun-java6-jdk

 

 

# Install tomcat6

apt-get install tomcat6  tomcat6-admin

/etc/init.d/tomcat6 stop

 

Creating standard Tomcat6 directory layout

mkdir /opt/tomcat   

cd /opt/tomcat   

ln -s /etc/tomcat6/ conf   

ln -s /usr/share/tomcat6/bin/ bin   

ln -s /usr/share/tomcat6/lib/ lib   

ln -s /var/lib/tomcat6/webapps webapps   

ln -s /var/log/tomcat6/ logs

 

# Creating a Tomcat admin user by add the following line into /opt/tomcat/conf/tomcat-users.xml

<user name=“ADMIN_USERNAME” password=“ADMIN_PASSWORD” roles=“admin,manager” />

 

# Creating directory for alfresco in tomcat

mkdir -p /opt/tomcat/shared/classes

# Add the following content into  file of  /opt/tomcat/conf/catalina.properties

shared.loader=${catalina.home}/shared/classes,

 

#Install and config mysql for Alfresco

http://blog.zhenglei.net/2011/12/9/alfresco_mysql.html

 

#Install AlfrescoCommunity 3.4e

http://blog.zhenglei.net/2011/12/9/alfresco_mysql.html