2011年10月15日星期六

阮一峰的网络日志

阮一峰的网络日志


usenet下载最简教程

Posted: 14 Oct 2011 08:49 AM PDT

上周,美国的Giganews公司来信。

他们推出了两个新业务----VPN服务VyprVPN和在线存储服务Dump Truck----想让我帮忙宣传。

我毫不怀疑这两个服务的优异品质,但是也坦率地告诉他们,现在的价格在中国市场不可能有任何竞争力。VPN和网盘,国内市场竞争很激烈,美国的价格直接拿过来,就好像天文数字一样。

Giganews最有竞争力的产品,其实是它的主业usenet。它是全美最大的usenet服务商,在这个领域实力很强。(不了解usenet的朋友,可以看一下我刚刚整理好的系列文章《usenet使用指南》。)

usenet堪称"下载宝库",资源之多难以想象。喜欢高清影视和电子游戏的朋友,其实根本不必PT下载,只要上usenet,应有尽有。

usenet推广的最大困难有两个,一是没有中文内容,二是存在一定的使用门槛。如果有一个针对中国用户的usenet下载搜索引擎,我觉得它的国内市场需求会很大。国内至今没有任何一家公司,提供usenet相关服务,真是很遗憾。

====================================================

对于那些需要usenet下载的朋友,我下面用最简单的语言,告诉你怎么下载。

(1)软件

你首先需要一个下载客户端,可以使用免费软件Grabit教程)或sabnzbd,也可以使用商业软件Newsbin

(2)NZB搜索引擎

你通过nzb文件搜索,找到自己需要下载的文件。免费的搜索引擎有Binsearch.infonzbindex.nl,小额收费的搜索引擎有Nzbmatrix.comNZBsrus.com

Giganews本身有一个搜索引擎mimo,可惜只提供给钻石用户使用。另外,德国的UseNeXT公司有一个自带搜索引擎的客户端,非常易用,我很推荐。

(3)购买usenet账号

由于usenet下载流量非常巨大,所以不存在免费下载,必须付费使用。

Giganews的收费不便宜,最低价是4.99美元/每月,只能下载5GB。如果你想无限量下载,每月价格是24.99美元,大概只有下载发烧友和游戏发烧友才会购买吧。好在Giganews允许14天的免费试用期(下载量不超过10GB)。当你急需下载某个文件时,可以考虑先注册一个账户,然后在14天内注销(否则自动从信用卡扣款)。

写到这里,我帮自己打个广告。如果你点击下面的图片,购买Giganews的服务,我会得到一笔介绍费,欢迎点击。

Giganews Newsgroups

如果觉得Giganews太贵,还有一家Supernews可以考虑,它的价格就很好:每月11.99美元,提供无限量下载。但是,由于是廉价服务,它不提供试用,也不允许退款。

Supernews Newsgroups

(完)

文档信息

2011年10月8日星期六

阮一峰的网络日志

阮一峰的网络日志


乔布斯的告别

Posted: 07 Oct 2011 07:57 AM PDT

斯蒂夫·乔布斯活着的时候,对病情讳莫如深,外界对他的身体状态毫不知情。

现在他去世了,根据各方面透露的信息,我们终于可以还原他的病历,了解像他这样伟人怎样对待生与死。

1.

2000年5月,乔布斯在旧金山WWDC大会(苹果全球开发者大会)上,演示Mac OS X操作系统。这时,他的身体还是完全健康的。

2.

2002年7月17日,乔布斯光临位于纽约Soho的苹果商店。此时,距离他病情确诊还有一年。

3.

2003年1月,乔布斯在旧金山Macworld大会上,介绍新发布的17寸Powerbook。

同年10月,在一次CT检查中,医生发现乔布斯的胰腺有一个肿瘤,但是属于恶性程度较低的癌症:胰岛细胞神经内分泌肿瘤。起初,乔布斯不愿接受手术,想通过饮食调整来控制病情。

4.

2004年1月,乔布斯在旧金山Macworld大会上,介绍新型的iPod。此时,他已经知道自己患有胰腺癌,但是未对外界透露。

2004年7月,由于病情没有得到控制,在坚持饮食疗法9个月后,乔布斯终于接受手术,摘除了肿瘤。8月1日,他首次对外公布病情,表示手术很成功,也不需要化疗或者放疗(另一种说法是,乔布斯本人坚持不要化疗和放疗)。

5.

2004年10月,乔布斯与U2乐队成员Bono等人一起登台,庆祝苹果iPod发售。此时,他刚刚完成癌症手术三个月。

6.

2005年1月,手术后半年,乔布斯展示Mac Mini个人电脑。

7.

2006年8月,手术后两年,乔布斯在WWDC上发布演讲。苹果公司称,他的健康状况良好。

8.

2007年1月,手术后两年半,乔布斯发布iPhone。

9.

2008年6月,手术后第四年,乔布斯发布"全球最薄笔记本电脑"MacBook Air。他显得消瘦憔悴,但是苹果公司称,他只是受到"常见细菌"感染。事实上,现在我们知道,那时他的癌症已经复发,病情扩散到了肝脏。

10.

2009年1月,苹果公司宣布乔布斯患上了"荷尔蒙失衡症",将缺席本年度的WWDC。仅仅过了一周,乔布斯发表声明称,由于病情比原想的复杂,将病休5个月。事实上,此时他已经是重度癌症病人,肝脏布满了癌细胞。

2009年4月,乔布斯在孟菲斯的卫理公会大学附属医院接受肝脏移植手术。院方透露,乔布斯在轮候换肝名单上属病情最严重者,因此当有适合肝脏,便第一时间为他进行移植手术。并说,当乔布斯换肝时,他的肝脏病情已到末期。手术后,乔布斯康复情况良好。

11.

2010年1月27日,肝脏移植手术后九个月,乔布斯宣布推出平板电脑iPad。

12.

2010年6月7日,肝脏移植手术后一年,乔布斯宣布推出iPhone 4。

13.

2010年7月,乔布斯在新闻发布会上宣布,将免费提供胶套以解决iPhone 4信号接收问题。

14.

2010年9月,在旧金山的一个音乐主题媒体活动上,乔布斯面带笑容。

15.

2010年10月,乔布斯出席苹果公司活动时的照片,距离去世只剩一年。

2011年1月17日:乔布斯在一封发给公司员工的电子邮件中宣布因个人健康原因将再次休假。他说,"我是如此热爱苹果,我希望尽快返回公司。"

16.

2011年3月2日,正在休病假的乔布斯意外出席了iPad 2发布会,距离去世只剩半年。

17.

2011年6月6日,乔布斯在WWDC上发布iCloud服务,距离去世只剩4个月。这是乔布斯在公开场合的最后照片。

2011年8月,乔布斯宣布辞去苹果公司CEO。

2011年10月5日,乔布斯去世,终年56岁。

==================================

乔布斯去世后,《纽约时报》的报道,透露了他临终前的一些细节。他的癌症复发是在2010年底发现的,所以乔布斯在2011年1月宣布病休。

2011年2月,医生告诉乔布斯,已经没有治愈可能了,他的时间不多了。但是,乔布斯依然选择出席iPad 2和iCloud发布会,那时他其实已经知道自己将不久于人世。

也是从那时起,乔布斯开始为自己的后事做安排。他选择会见一些老朋友,与他们告别。

《华尔街日报》的莫博士,这样记录自己与乔布斯的会面

"我在他家待了三个小时,中间还到附近的公园走了一圈。虽然他的身体之差令我很担心,但是他坚持要去那里。"

"他说他每天都走路锻炼,而且每天为自己定一个更远一点的目标。今天,社区公园就是他的目标。我们边走边谈,他突然停下来,看上去很痛苦。我央求他回家,因为我根本不懂急救术,万一出事了,第二天报纸标题就是《束手无策的记者眼睁睁看着乔布斯在路边死去》。"

"乔布斯听了就笑了,拒绝回去。片刻之后,他继续向公园走去。我们坐在长椅上,谈起生活、家庭和各自的疾病(我几年前曾经突发心脏病)。他教导我健康的重要性。然后,我们就往回走了。"

2011年8月,乔布斯辞去苹果CEO的时候,他的身体已经彻底不行了,不可能有奇迹了。

生命的最后几个星期,乔布斯非常虚弱,躺在家里,走路也走不动。他最后一次请了几个朋友----Ornish医生、风险投资家John Doerr、苹果公司董事Bill Campbell、迪斯尼公司执行长Robert A. Iger----在Palo Alto的Jin Sho餐馆举行告别宴。在宴会上,他还给即将发布的iPhone 4S出主意。

Ornish医生回忆说:"我问他,养育了四个孩子,对这件事他是否感到满意。他说,这比我做过的任何事都好上10000倍。"

乔布斯还见了他的传记作者Isaacson。后者问他,你如此重视隐私,为什么会授权我写你的传记。乔布斯回答:"我希望我的孩子了解我。在他们成长过程中,我并没有一直在他们身边。我要他们知道为什么,并且理解我所做的事情。"

在他的弥留之际,他的妹妹Mona Simpson说:"最后,他的语调充满了温柔的歉意,为离开我们前走一步,感到非常抱歉。"

==================================

2005年,乔布斯在斯坦福大学毕业典礼上,曾经说过

"我深信,保持前进的唯一动力,就是我热爱自己所做的事。"(I'm convinced that the only thing that kept me going was that I loved what I did.)

他用自己的人生,实践了这句话。他生命的最后八年,是与癌症做斗争的八年,也是创造了惊人成果的八年。在这期间,他一手造就了创造历史的新产品----Macbook、iPhone和iPad----这使苹果公司从濒临破产,变成了世界市值最高的公司。

但是,如果你仔细想想,就会发现他完全没必要这么做,尤其在得了癌症的情况下。在重新入主苹果之前,他已经功成名就了。为什么他工作到生命的最后一刻,只有一个解释,那就是他真的热爱自己所做的一切。

乔布斯的一生是一个奇迹。他是一个弃儿,养父母都是蓝领,大学只读了六个月,曾经靠捡饮料瓶谋生。但就是这样一个人,创造了世界上第一台个人电脑,打造了全世界最辉煌的电脑公司,彻底改变了整个电子工业。他用自己的一生告诉我们,只要你敢于追求自己的梦想,热爱你所做的事情,nothing is impossible(一切皆有可能)。

只要有人记得,他就永不消逝。乔布斯并没有离开我们,未来的人们将永远记得他。因为乔布斯来过这个世界,我们所有人都有了更多希望。

(完)

文档信息

2011年10月3日星期一

阮一峰的网络日志

阮一峰的网络日志


Javascript文件加载:LABjs和RequireJS

Posted: 02 Oct 2011 08:51 PM PDT

传统上,加载Javascript文件都是使用<script>标签。

就像下面这样:

  <script type="text/javascript" src="example.js"></script>

<script>标签很方便,只要加入网页,浏览器就会读取并运行。但是,它存在一些严重的缺陷。

  (1)严格的读取顺序。由于浏览器按照<script>在网页中出现的顺序,读取Javascript文件,然后立即运行,导致在多个文件互相依赖的情况下,依赖性最小的文件必须放在最前面,依赖性最大的文件必须放在最后面,否则代码会报错。

  (2)性能问题。浏览器采用"同步模式"加载<script>标签,也就是说,页面会"堵塞"(blocking),等待javascript文件加载完成,然后再运行后面的HTML代码。当存在多个<script>标签时,浏览器无法同时读取,必须读取完一个再去读取另一个,造成读取时间大大延长,页面响应缓慢。

为了解决这些问题,可以使用DOM方法,动态加载Javascript文件。

  function loadScript(url){

    var script = document.createElement("script");

    script.type = "text/javascript";

    script.src = url;

    document.body.appendChild(script);

  }

这样做的原理是,浏览器即时创造出一个<script>标签,然后"异步"读取Javascript文件。这样不会造成页面堵塞,但会造成另外一个问题:这样加载的Javascript文件,不在原始的DOM结构之中,因此在DOM-ready(DOMContentLoaded)事件和window.onload事件中指定的回调函数对它无效。

外部函数库LABjsRequireJS,可以帮助我们更有效地管理Javascript加载。

下面根据ScriptJunkie的文章,举一个最简单的例子,来说明这两个函数库的基本用法。更高级的用法,请参阅它们的文档。

  <script src="script1.js"></script>

  <script src="script2-a.js"></script>

  <script src="script2-b.js"></script>

  <script type="text/javascript">

    initScript1();

    initScript2();

  </script>

  <script src="script3.js"></script>

  <script type="text/javascript">

    initScript3();

  </script>

上面这段代码,将依次加载4个javascript文件:script1.js、script2-a.js、script2-b.js和script3.js。在加载完前三个文件后,运行两个函数initScript1()和initScript2();加载完第四个文件后,再运行函数initScript3()。

下面,用LABjs对其进行改写:

  <script src="LAB.js"></script>

  <script type="text/javascript">

    $LAB

     .script("script1.js").wait()

     .script("script2-a.js")

     .script("script2-b.js")

     .wait(function(){

       initScript1();

       initScript2();

     })

     .script("script3.js")

     .wait(function(){

       initScript3();

     });

  </script>

首先,$LAB对象替代了<script>标签,然后.script()方法表示加载Javascript文件,不带参数的.wait()方法表示立即运行刚才加载的Javascript文件,带参数的.wait()方法也是立即运行刚才加载的Javascript文件,但是还运行参数中指定的函数。

这里需要注意的是,可以同时运行多条$LAB链,但是它们之间是完全独立的,不存在次序关系。如果你要确保一个Javascript文件在另一个文件之后运行,你只能把它们写在同一个链操作之中。只有当某些脚本是完全无关的时候,你才应该考虑把它们分成不同的$LAB链,表示它们之间不存在相关关系。

接下来是requireJS的改写:

  <script src="require.js"></script>

  <script type="text/javascript">

    require([

      "script1.js",
      "script2-a.js",
      "script2-b.js",
      "script3.js"

     ],

     function(){

      initScript1();
      initScript2();
      initScript3();

     }

    );

  </script>

require()接受两个参数,第一个数组表示所要加载的Javascript文件,第二个是加载完成后所要运行的回调函数。原生的require()不支持按次序加载,所以四个Javascript文件到底先加载哪个,无法事前知道,require()只保证这四个文件全部加载完成之后,才会运行所指定的回调函数。

如果按次序加载对你很重要,你可以使用官方提供的order插件

(完)

文档信息