类别归档:译林

外语文献翻译

RSS feed of 译林

OpenShift - 不只是另一个主机托管平台

我选择PHP,MySQL和WordPress作为我的个人项目平台已经有几年时间了。当你不需要任何别的东西时,事情变得非常简单。只需要建立网站,支付一个主机托管计划,上传文件就大功告成了。即使预算比较紧张也可以找到一些便宜(甚至免费)的网络主机作为起步,在需要时加以扩展。

在我做前端开发的过程中接触过几个不同的技术栈。但无论它是什么——Python,.NET或者别的东西——要使用这些技术做一些严肃的开发还是比较困难的。OK,我已经完成了Codecademy课程,掌握了一些基础知识,现在我想要用Django或者.NET建立我的个人主页。我在哪里可以找到一个价格合理的托管平台?

然后偶然间,我发现了Ghost博客平台,并把我的波兰语 blog搭建在上面。Google了许多Node.js主机,我还不想付钱买一个VPS。最后,我找到了Red Hat(红帽云)的OpenShift。它几乎免费,开源而且强大。简直难以置信。

但很快我发现这并不是一个典型的网络主机。完全理解其工作原理并开始着手有效的使用它需要花费一些时间。但这是值得的。

OpenShift是什么?

大部分关于OpenShift的文字描述提到了术语"PaaS"(platform-as-a-service 平台即服务)和"云",但它们都没有从一般终端用户的角度描述服务的工作原理。我们换一个角度来加以解释。

想象一个NES终端。或者红白机。如果你是波兰人,你可能会想到Pegasus(一种类似于红白机的电子产品)。

你的终端大概就是一个小盒子,上面有一个可以插入卡带的洞。如果想要玩超级玛丽,只需要把超级玛丽的游戏卡带放在插槽中。想要玩一两圈Micro Machines(微型机器,一种赛车游戏),用另一盘卡带就行了。十分简单。

现在想象一下你有3个任天堂终端。它们每一个都有3个卡槽,你可以放置任何你想要的卡带。这就是OpenShift大概的样子。你放置卡带的洞就叫做gears(齿轮)

每一个应用可能包含许多个放置在齿轮里的卡带。如果你坚持要完全免费,每个应用至多可以使用3个卡带。每一个卡带代表一项特定的工具或者技术——通常是编程环境或者数据库实例。如果你需要WordPress博客,你选择PHP和MySQL卡带。第三个齿轮可以用来放置phpMyAdmin卡带,或者让应用具备可伸缩性。

另外还可以在同一个账号中搭建WordPress博客,Django应用和Redmine实例。你只需要用不同的卡带创建3个应用就行。

你是说:可伸缩?

齿轮可以是小型、中型或者大型。小齿轮在免费计划中就可以使用,包含1GB的磁盘空间,512MB的内存和无限制的带宽。对我来说这足够运行我的大部分站点项目了。但是如果用户达到上万级别这可能不太够用。

这时候可伸缩性就能够派上用场了。

如果你将应用设置为可伸缩,OpenShift将其放在一个HAProxy实例的代理之后。它监控网络流量并在需要时自动在另一个齿轮里克隆一个卡带,从而可以应付大规模的访问。当网络流量回到正常水平时,空闲的卡带会被自动销毁。就这么简单。

免费?但是真的,真的免费吗?

现在有3个计划可供使用,并且其中的2个是免费的。OpenShift免费版本限制为3个小齿轮的3个应用。OpenShift青铜版几乎和OpenShift免费版一样,外加可以使用中型和大型齿轮(至多16个)。如果需要全功能和专业支持,你可以使用OpenShift白银版,20美元/每月,外加标准齿轮限制之外的费用。

这就是全部内容吗?

不,我们还没有讲完。还有许多令人兴奋的东西呢。

使用OpenShift是一个不同于传统网络主机的崭新体验。它绝对是一个可以撰写很多博客的主题,并且我会在将来描述更多的内容。与此同时,你可以自己尝试一下OpenShift。另外,可以阅读一下Katie Miller 和 Steven Citron-Pousty编写的电子书,包含了你需要了解的所有基础知识。另外还可以访问OpenShift团队的推特。

原文链接:http://lukesays.com/openshift-just-not-another-hosting-platform

C++单链表逆置的迭代实现与递归实现

Implement the reversal of a singly linked list iteratively and recursively.

链表逆置既可以用迭代实现也可以使用递归实现。在我看来,迭代法应该比其递归形式的等价实现更加高效,内存开销更小。(试想对一个包含百万个元素的链表执行递归的逆置操作!很快栈空间就会用尽)

递归实现的代码行数更少,但是要想把代码写对会比较困难。另一方面,迭代实现代码行数较多但是比较容易验证。

1) 迭代实现:

void reverse(Node*& head) {
  if (!head) return;
  Node* prev = NULL;
  Node* curr = head;
  while (curr) {
    Node* next = curr->next;
    curr->next = prev; ...

继续阅读

深入了解Alexa排名

什么是Alexa排名?

Alexa排名反映了一个网站的受欢迎程度。最受欢迎的网站的Alexa排名为1。如果Alexa的排名为100,000,则说明这个网站是全球第100,000受欢迎的网站。通常人们提到的Alexa排名指的是全球排名,此外Alexa还有各个国家的网站排名。

怎样获取某个特定网站的Alexa排名?

你可以安装浏览器扩展(官方工具栏 或者 Chrome , Firefox工具栏),然后当你浏览网站时就可以看到对应网站的Alexa排名了。

或者也可以直接访问http://www.alexa.com,在搜索框中键入网站域名进行查询。

Alexa排名是怎样计算的?

如前所述,许多用户安装了Alexa的浏览器工具栏或者扩展,它们会将用户访问网站的信息发送给alexa.com。你可能很惊讶,但有数百万的人在这样做。Alexa跟踪这些人最近3个月访问的网站数据,并据此对网站进行排名。

Alexa的创始人是谁?

Alexa最早由两个合伙人创办于1996年,命名为Alexa互联网公司。名字的灵感来自于著名的亚历山大图书馆(Library of Alexandria)。他们基于用户的数据开发了一个为用户提供网站浏览推荐的“接下来去哪”的工具栏(where to go next)。他们的梦想是开发一个智能搜索引擎。但实际上他们做到的远不止这些,他们在1998年赚了370,000美金。幸运的是,Amazon于1999年以$250,000,000的高价收购了这家公司。并且Amazon现在仍然在运营该网站为我们提供服务。

Alexa的数据应当怎样使用?

  1. 比较你的网站与竞品网站之间的访客数据。你可以了解哪些网站的访客比你的网站多,哪些比你的网站少。
  2. 估计潜在竞争对手的访客数。稍后我们会讨论。
  3. 暗中监视你的竞争对手-因为远不止Alexa排名可供使用。稍后会有例子说明。

Alexa的数据精确程度如何?

这取决于你的目标和分析网站的类型。

可以明确地是Alexa掌握的数据越多,则其产生的评估数据也就越精确。这也就是为什么著名站点的数据会精确的多。Alexa声称他们对于排名前100,000的网站的数据质量很好。根据我的经验,你可以信任其前500,000的网站数据。

因而,只要你的目标如下,你就可以采用他们的数据:

  • 评估你的竞争对手的流量;
  • 需要为投资者提供正确的数据;
  • 向你的老板证明某个网站非常的受欢迎。

在得出结论以前,还需要确保被分析的网站非常的有名。否则,数据可能会存在比较大的偏差。因此,如果订货方从线下渠道得到了真实的数据,你可能会为做出偏差10-100倍的错误评估数据感到羞愧。(Therefore, if the ordering party will get ...

继续阅读

基数排序,桶排序,计数排序算法的区别

基数排序(Radix Sort)、桶排序(Bucket Sort)和计数排序(Counting Sort)都是非比较排序算法。也就是说,它们并不是通过比较元素之间的大小关系来进行排序的。

首先,让我们看看三种排序算法的时间复杂度:

基数排序:O(dn) (d次调用桶排序),空间复杂度 O(k) (稍后详解)

桶排序:O(n)时间复杂度,O(n)空间复杂度

计数排序:O(n)时间复杂度,O(k)空间复杂度,每一个元素都是整数,并且位于0到k - 1之间

计数排序

假设:数组中的每一个元素都位于[0, k-1]的区间内

算法:此处不做详细描述

它是一种稳定排序:

时间复杂度:O(n)

空间复杂度:O(k)

基数排序

假设:它基于下面的假设:

k1 k2 k3 ... kd,其中对于每一个元素ki均位于[0, k-1]的范围内,ki是数字。k是键(key)的基(base)。如果k=10,则键就是一个十进制数。

算法过程如下:

对于每一个数位,按照这一位对数组执行计数排序。

算法假设每一次调用计数排序时,结果都是一次稳定的排序。否则基数排序就行不通了。

时间复杂度:O(dn) 

空间复杂度:O(k)

显然,你可以通过增加k值减少d,同时牺牲一部分空间。

桶排序

假设:它使用了具有固定范围的“桶”。它假设每一个元素都会落在这些桶内。每一个桶的范围是固定的。如果桶的范围是1,则该算法就与计数排序很相似了,唯一的不同之处是,它存储的是元素本身而不是它们的计数。

算法:

假设有k个桶:B0, B1, ... ...

继续阅读

Python vs. PHP下一个项目应该用什么

PHP和Python目前是世界上最流行的两种Web编程语言,自然都有其各自的优点和缺点。然而,在澳大利亚IDG公司——Techworld Australia的出版商——我们在过去的18个月左右的时间里,正在从PHP迁移到Python。虽然我们还没有为这个决定感到后悔,但如果你觉得从PHP切换至Python是一个简单的决定,就大错特错了。

PHP vs. Python: 语言流行程度

毋庸置疑PHP非常的流行;实际上,它现在是最流行的开源编程语言。PHP开发者和PHP工作都是一抓一大把。现在,在Seek.com.au上,澳大利亚就有大概3790个PHP职位。并且这种需求通常转化为一个巨大的开发者资源池,在需要扩展你的团队时,随时可以从中选出可用的开发者。(And this demand generally translates into a large pool of developers that can be tapped into when you want to expand your team.

Python从来没有这么流行过。不过,反过来,它没有PHP那么流行有时候也是一种优势。Python开发者可能会更加稀缺,但我发现他们通常素质更高。虽然我确定市场上有一些比较差的Python开发者,但我还没有在面试时遇到过。我很希望PHP开发者也可以这样。

PHP vs. Python: 语言语法

PHP有着非常类似C的语法。任何接触过类C语言的人都可以直观地看到这一点。花括号和分号和你见过的完全一样,感觉很熟悉。在我用PHP开发第一个项目时并没有PHP经历。仅仅花了2个小时,我阅读了一个小教程,发现了我要找的bug并且修复了问题,提交到生产环境。

Python就没有这么容易了。取代了花括号的有意义的空格需要花费一些时间来适应。这个变化需要刚刚开始使用Python的开发者多花一些时间来适应。随着时间的推移,这个缺点就会自行消失,并且,由于Python语法通常极为简单,实际上读起来像伪代码。

PHP vs. ...

继续阅读