畅想夏日,星巴克全新瓶装冰咖啡饮料出炉

随着逐渐回暖的气温,春天真的来了。而星巴克(STARBUCKS)似乎打算得更为长远,悄悄地推出了全新瓶装冰咖啡系列饮料,开始畅想夏天的阳光与冰爽咖啡带来的美妙。其包装设计与现有的瓶装星冰乐的怀旧风格不同,显得更为硬朗和时尚。瓶口处的明亮的配色更是让人提前感受到了夏天的味道。

透明的瓶身部分的细节与星巴克店内饮料的包装一致:打钩的小方框显得尤为亲切。新品已陆续登陆美国各大城市,希望夏天到来的时候,中国的粉丝们也能看到这个可爱的新瓶子。

五个有趣的拓扑变换问题

    如果你喜欢上次的空间想象能力挑战,你一定会喜欢 V. V. Prasolov 的 Intuitive Topology 一书。书中的第一章有五个非常经典的“拓扑变换”类谜题,在此与大家分享。注意游戏规则:我们假设所有物体都是用橡胶做成的,可以随意地拉伸、挤压、弯曲,但不允许切断、粘连等任何改变图形本质结构的操作。

    1. 能否把左图连续地变形为右图?

      

      2. 能否把左图连续地变形为右图?

      

      3. 左图所示的立体图形表面画有一个圆。能否通过连续变换,把这个圆变到右图所示的位置?

      

      4. 在一个轮胎的表面上打一个洞。能否通过连续变换,把这个轮胎的内表面翻到外面来?

      

      5. 能否把左图连续地变形为右图?

      

                              1. 能否把左图连续地变为右图?

      

      答案是可以的,如下图所示:

      

      这意味着,假如人类的身体可以像橡胶人一样任意变形,那么用两手的拇指和食指做成两个套着的圆环之后,我们可以不放开手指,把圆环给解开来。 Algorithmic and Computer Methods for Three-Manifolds 一书里画了一张非常漂亮的示意图:

[…]

Linux黑历史挖坟(1):shebang的多参数问题

一直想写这么一个系列来着:Linux的黑历史挖坟。从邮件列表里把内核开发者那些不为外人所知的事儿:技术论战、独断专行、暴君式的震怒、各种恶搞和对喷、以及各种文明用语(哔~),当然还有Linux开发过程中一些具有争议的技术决定(这篇文章讲的主要是这方面)全部挖出来做个整理,应该是一件蛮有意思的事情。

引子:/usr/bin/env的用途

举个例子,调用Python解释器执行某脚本的shell命令是这个样子的:

$ python foo.py

如果要想直接把这个脚本当作可执行文件来使用:

$ chmod +x foo.py $ ./foo.py

就必须在脚本的第一行加上shebang:

#!/usr/bin/python print "hello, world"

让系统知道调用何种解释器来执行该脚本。

上面的shebang存在的问题是,在不同的系统上,Python解释器的绝对路径可能并不相同。它可能是/usr/bin/python,也可能是/usr/local/bin/python,甚至可能是~/.local/bin/python。我们需要一种方式更通用的方式来调用当前环境路径下的python命令,而不仅仅局限于/usr/bin/python这个特定的路径。糟糕的是,在绝大多数Unix系统上,你无法直接在shebang中使用环境中的命令,例如:

#!python print "hello, world"

这种写法并不合法。shebang后面只允许跟绝对路径。

为了让脚本中的shebang尽可能地通用,执行时不依赖于具体系统上Python的安装路径,我们需要借助env这个工具:

#!/usr/bin/env python print "hello, world"

在绝大部分现代UNIX系统的发行版上,文件/usr/bin/env是普遍存在的。系统内核在解析这个可执行脚本的shebang后,会首先直接去调用文件系统中的/usr/bin/env,然后由env这个外部工具来间接调用当前环境路径下的python,从而避开了不同系统中python路径不同带来的麻烦。

/usr/bin/env是一个外部命令行工具,它不属于操作系统内核的一部分。在GNU/Linux上,它属于GNU coreutils包。它的作用是把传递给它的第一个参数当作当前环境下的命令来执行,把其后的参数当作该命令的参数传递给该命令,也就是说,在shell下执行:

$ env python foo.py

等效于:

$ python foo.py

而:

$ env awk -f foo.awk

相当于:

$ awk -f foo.awk 关于shebang:它是一个hack;不是POSIX标准

其实写这文章的最初原因是,不止一个Mac用户跟我反映这个AWK程序无法在OS […]

视讯云的云平台迁移之路

文 /  廖雪峰

视讯天下是中国领先的在线视频平台服务商,团队前身是全球最大的OVP(Online Video Platform)服务商Brightcove(NASDAQ:BCOV)的中国研发团队。

视讯云是针对中小企业群体在线视频需求推出的SaaS服务,即通过简便的租用方式为客户提供端到端的互联网视频云服务。客户无需租用带宽和服务器,可直接将视频上传至视讯云平台,由云平台自动处理所有的视频转码、水印、播放器定制、CDN推送以及后续的播放数据统计分析,极大地简化了客户在线发布视频的技术门槛。

视讯云是一个典型的多租户SaaS服务,系统核心为轻量级的无状态Java模块,对外提供REST服务。对于私有云客户,支持普通的NAS接口,同时支持Gluster分布式存储作为公有云的底层存储服务,以提供每天亿次以上的视频播放能力。一组可以在线动态增删的转码集群用于对客户上传的视频进行转码,整个平台架构如图1所示。

图1 视讯云平台架构图

作为Brightcove早期的中国研发团队,我们的开发人员对AWS平台非常熟悉。2010年公司刚成立时,国内还没有一家类似AWS这样能提供IaaS平台服务的公司。我们只能自己购买物理机部署至IDC机房,然后仿照EC2的模式,先将物理机虚拟化成若干虚拟机,再在虚拟机上部署系统和服务。

众所周知,无论是双线机房还是BGP机房都存在很多弊端,运维成本过高,尤其是出现问题时不能快速灵活地响应和处理。因此,当我们得知阿里云服务推出时,第一时间进行了试用。最终,在2012年8月,与阿里云达成合作,将公有云视频在线服务部署在阿里云。

整个系统部署到阿里云大概只花费了一周时间,使用了10台云服务器和1个RDS(关系型数据库服务),整个系统就能在阿里云上正常运转。不过,从部署成功到实际应用仍有一段路要走。

迁移OSS

第一要解决的问题是存储。如果我们使用一台云服务器的本地硬盘通过NFS作为一个临时的存储方案,性能肯定很差,原因除了多台云服务器的I/O压力外,还在于阿里云云服务器的本地硬盘实际上也是远程挂载的(这一点在我们预料之中),因此这就比普通物理服务器的硬盘速度要慢。当然最合理且优化的解决方案是使用阿里云的OSS(开放存储服务)。于是我们通过阿里云给的Python SDK开发包,经过一周的时间在原有的挂载Gluster的接口上又开发出了挂载OSS的接口。通过将存储迁移至阿里云OSS,不但解决了I/O的性能问题,还获得了以下好处:

OSS提供了比Gluster更强大的分布式存储解决方案,并且不需要我们自己维护了; OSS的分布式特性有更好的I/O性能,多台云服务器同时读写OSS性能完全没有问题; OSS提供的HTTP接口可以直接让用户通过浏览器访问文件而无需经过云服务器,这在一定程度上解决了我们的源站问题,部分文件可以无需源站而通过OSS直接实现CDN加速。

实战RDS

RDS(关系型数据库服务)也是我们深度依赖的一个服务。我们原有的系统使用MySQL Master-Slave机制保证实时热备,再通过脚本实现每天定时完全备份。使用了RDS后,主从热备的问题解决了,还有定期自动备份的功能。现在,我们的数据库运维工作几乎没有了,只有一个脚本每天定时从RDS下载数据库备份到办公室。

当然,在使用RDS的过程中,功能也是在不断完善的。一开始我们发现,无法在RDS中创建只读用户。因为出于系统安全性的考虑,开发和运维人员在排查故障时,使用只读用户更加安全。通过与阿里云的反馈与沟通,两周以后,只读用户功能上线。

应用SLB

随着我们把部分测试用户的视频数据逐步转移到阿里云,我们发现新的问题又接踵而来。

首先,单台云服务器的出口带宽有限,常常成为性能瓶颈,而单独为每台云服务器增加带宽又很不合算。我们了解到阿里云已经推出了SLB负载均衡服务,这非常适合解决出口带宽问题,于是我们将SLB作为前端负载均衡使用。

最早的SLB服务只支持HTTP 1.0。因此,我们很快就发现源站在处理大量小文件时性能急剧下降。随后,阿里云添加了SLB的TCP支持,我们采用TCP负载均衡后解决了HTTP 1.1的连接问题。

稍后,我们又启用了SLB来支持HTTP REST API服务,但位于内网的云服务器无法取得用户的公网IP。于是,我们继续反馈给阿里云,希望在负载均衡上添加X-Forwarded-For字段。几天后,我们终于能拿到用户的公网IP了。

经过几个月的磨合和测试,架构在阿里云平台的SaaS服务已经稳定运行了近半年时间,目前我们运行在阿里云的服务架构如图2所示。

迁移至阿里云平台之后,极大地降低了我们的运维成本。目前,我们仅有一名运维人员即可完成整个视频云的运维任务。同时,我们可以根据客户的不断增长来随时添加新的云服务器,以满足客户需求和用户访问的压力。从购买1-2台阿里云云服务器,到部署系统上线服务,一般只需要半个小时,对于传统IDC机房来说,这个效率是不可想象的。

虽然整个迁移的过程并不是一帆风顺,阿里云也尚有一些我们需要的服务还未推出,例如类似Amazon的Simple Queue Service(SQS,简单消息服务)、Route 53(DNS服务)和CloudFront(CDN服务)等。但在与阿里云的合作过程中,我们对于阿里云平台的服务质量以及成长还是非常有信心的。我们已开始陆续把正式用户迁移至阿里云,租用的云服务器从最初的10台已经到现在近百台,而OSS的存储空间也从100GB增长到几十TB的规模。最近,我们又开始准备把数据统计分析服务迁移到阿里云的ODPS(开放数据处理服务)上,以便充分利用阿里云提供的海量数据分析与挖掘服务。

2012年2月,Brightcove的成功上市,又一次证明了国际资本市场对视频云服务行业具有很高的期待。随着三网融合、宽带速度的网络瓶颈的解决,云视频的需求在教育、电子商务等各个平台上会得到快速发展。而中国市场的特殊格局也给本土的创业公司提供了难得的机遇。作为创业公司,我们深刻地感受到云平台带来的产业变革。而随着云计算产业的变革与发展,越来越多的公司会将IT基础设施以及SaaS服务等建立在以阿里云代表的云计算平台之上,这从国外成功的创业公司如Instagram、Dropbox等均选择了在Amazon的IaaS上构建自己的SaaS服务,可以看出业界不可阻挡的云计算趋势。视讯天下也将自己的SaaS服务建立在阿里云的IaaS平台上,既充分利用阿里云提供的弹性计算能力,又将精力集中在业务架构和客户服务上,对比传统的存储和IDC成本计算,可能某些时候IaaS的服务成本偏高,但节省的运维和开发成本是隐性而巨大的。视讯天下希望借由此文,分享些许迁移云平台的经验,希望能对大家有所帮助或启发。

作者廖雪峰,视讯天下产品总监。10年软件开发经验,精通Java、Python、iOS等,对开源框架有深入研究,著有《Spring 2.0核心技术与最佳实践》一书,创建了多个开源框架,目前在视讯天下从事在线视频平台的产品和研发。个人博客是http://www.liaoxuefeng.com。

更多精彩内容敬请关注《凌云》专区

《程序员》2013年杂志订阅送好礼活动火热进行中

 

[…]

Android软件安全开发实践(下)

文/肖梓航

《程序员》2012年第9期中,我们讨论了数据存储、网络通信、密码和认证策略等安全问题和解决方案,本期将继续从组件间通信、数据验证和保全保护等方面来实践Android软件安全开发之路。

组件间通信

组件间通信的安全问题是Android所独有的,也是目前软件中最常出现的一种问题。

我们先回顾一下组件间通信机制。Android有四类组件:activity、service、broadcast receiver和content provider。在同一个软件之中或不同软件之间,前三种组件使用Intent相互调用,使用ContentResolver对象访问content provider,共同实现软件的功能。使用Intent,可以显式或隐式地调用:

显式(explicit):调用者知道要调用谁,通过组件名指定具体的被调用者; 隐式(implicit):调用者不知道要调用谁,只知道执行的动作,由系统选择组件处理这个请求。

如下面的代码所示:

无论是显式还是隐式,如果要跨应用调用,还需要被调用的组件是对外暴露的。默认情况下,service、broadcast receiver和content provider是暴露的,申明了Intent-filter的actvity也是暴露的。

抽象地说,组件A要调用组件B,以期待B完成某个功能;它可以发送一些数据给组件B,也可以获得B执行后的返回结果。在这个模型中,问题出现在A和B之间不一定互相可信。

如果B是暴露的,任何软件都可以调用它,包括攻击者编写的软件。攻击者可能但并非总能成功:

直接调用暴露的B,以获得其执行结果; 构造特定的数据,并用于调用暴露的B,从而试图影响B的执行; 调用暴露的B,并获取它执行完返回的结果。

如果A用的是隐式调用,任何软件都可以实现它的action从而响应调用。攻击者可能(但并非总能成功):

构造伪造的组件C,响应A的Intent,以读取A要发给B的数据; 构造伪造的组件C,响应A的Intent,弹出虚假的用户界面以展开进一步攻击(例如钓鱼); 构造伪造的组件C,响应A的Intent,返回伪造的执行结果。

这样说可能比较抽象。下面我们对这两种情况分别讨论。

组件暴露的问题

看一个例子。在一个第三方深度定制的ROM中,预装了名为Cit.apk的软件,用于手机的硬件测试。它的AndroidManifest.xml局部如下:

可以看到,它申明一个名为.CitBroadcastReceiver的receiver,响应名为android.provider.Telephony.SECRET_CODE的action,并且指定了URI格式。

再来看这个receiver的代码片段(下面的代码是我反编译得到的,不一定与软件源码完全一致):

可以看到,当调用这个receiver,并且提供的URI中host字段为284时,会以root权限调用本地的bugreport工具,并将结果输出至m_logFileName指定的文件中。

默认情况下receiver是暴露的,因此这个receiver可以被其他软件调用,代码如下:

当这四行代码执行时,就会触发CitBroadcast-Receiver的那段代码。从上下文看,输出文件m_logFileName位于SD卡,任何软件都可以随意读写。因此,攻击者可以获得bugreport的输出结果,其中包含大量系统数据和用户数据。

请注意,在这个例子中,攻击者的软件不需要任何特殊权限,尤其是不需要root权限。这种由于组件暴露获得额外权限的攻击,被称之为permission re-delegation(权限重委派)。

怎么避免由于组件暴露产生的安全问题?有的组件必须暴露,例如入口activity,或者确实对外提供服务或跨软件协作;但也有的组件没必要暴露。接下来我们分别讨论。

不需要暴露的组件

再次回顾,默认情况下,service、broadcast receiver和content provider是暴露的,申明了Intent-filter的actvity也是暴露的。如果它们只被同一个软件中的代码调用,应该设置为不暴露。很容 易做到—在AndroidManifest.xml中为这个组件加上属性android:exported=”false”即可。

需要暴露的组件

如果组件需要对外暴露,应该通过自定义权限限制对它的调用。

首先,在实现了被调用组件的软件的Android-Manifest.xml中自定义一个权限:

接下来,为被调用组件添加这个权限限制,即在AndroidManifest.xml中为这个组件添加android:permission属性:

另一种方法是在组件的实现代码中使用Context.checkCallingPermission()检查调用者是否拥有这个权限。

最后,要调用这个暴露的组件,调用者所在的软件应该申明使用这个权限,即在AndroidManifest.xml中添加相应的use-permission申明。

进一步地,还可以将这种组件暴露的需求分为两种情况。

如果这个组件只打算给自己开发的其他软件使用,而不希望暴露给第三方软件,在定义权限时,protectionLevel字段应该选择signature。 这种设置要求权限使用者(即调用者)与权限定义者(即被调用者)必须由相同的证书进行签名,因此第三方无法使用该权限,也就无法调用该组件。 如果这个组件要暴露给第三方,则protection-Level应使用normal或dangerous。此时,任何软件都可以使用该权限,只在安装时会 […]

云推荐——大数据时代的个性化互联网服务解决之道

文 / 韩定一

个性化是商业的未来

现代社会是一个商业社会,工业化解决了批量生产商品的问题,促进商业蓬勃发展。随着社会的不断发展,商品也越来越多样化,以期满足大众的不同需求。以电视机为例,最初只有尺寸的区别,后来可以选择品牌型号。直到2011年9月27日,海尔和天猫在网上发起用户定制电视的活动:用户可以在电视机生产以前就选择电视尺寸、边框、清晰度、能耗、颜色、接口等属性,再由厂商组织生产并送货到客户家中。这样的个性化服务受到广泛欢迎,2天内1万台定制电视的额度被抢光。类似的定制服务在空调、服装等商品上都受到用户欢迎。这些事例已经展示了未来商业的曙光——通过满足个性化需求来使用户得到更满意的产品,进而缩短设计、生产、运输、销售的周期来提升商业运转的效率。

大数据是实现个性化的基础

要实现个性化的商业模式,充足的数据是基础。比基尼生产厂商都知道他们的产品在海滩边或滨海城市有市场。可有谁能料到新疆和内蒙古的男人最爱给自己女人买比基尼呢?这样的“潜规则”隐藏在数据中,需要深挖才能见天日,就像“啤酒和尿布”的经典故事那样。而“大数据”相对于传统的数据挖掘更进一步。数据量大、数据种类多、数据之间有潜在关联是挖掘大数据的前提。整个互联网的用户和所有的商品本身就是一个足够大的数据空间,加上空间、时间、天气等潜在相关因素,想要知道每个用户的喜好,所需要的数据量是巨大的。数据越多对用户的理解越精准。

互联网大数据处理的技术挑战

处理互联网大数据充满挑战,首当其冲的就是处理大数据的能力。为使消费数据的速度赶超生成数据的速度,拥有足够的计算资源是必要条件。在此基础上,线性扩展的计算框架、高效稳定的程序设计以及精准的算法都是大数据处理的核心能力。

第二个挑战便是时效性。用户在互联网上的操作不断地暗示其意图,只有及时感知到这些意图,才能在用户下一次操作前做出有效的响应,最终给用户带来便捷。这样的时效性要求系统的计算框架能够以数据流的方式来运转。最终导致系统在如何实时分流负载、实时容错等问题上采用与传统批量大数据处理截然不同的技术方案。

为了更大程度地满足个性化需求,还必须具有足够强大的定制能力。一方面,尽管单个用户的定制需求可能很小,但用户数量巨大,定制需求迥异,不是几个工程师努力下就能完全解决问题的。需要有像数据库SQL语言那样给用户足够多的自由,使再小的需求通过简单的操作就能满足。这样的定制能力要在数据的存储、运算、查询、展现等多方面都有体现。

阿里云的解决之道——云推荐

不论是收集大数据的计算和存储能力,还是处理个性化问题所需要的实时计算和算法技术,对于网站站长和开发者而言都是不容易快速得到解决的问题。阿里云正试图通过云端服务来降低个性化服务的门槛,使更多网站站长和开发者能够低成本享有自己的个性化服务。其中,云推荐(http://tui.cnzz.com/)便是一个典型。

如果某网站是介绍美食菜谱的,用户在浏览“茶树菇鸡汤”的时候,若能有些相关菜谱推荐,那么便可以让用户在网站内停留更多时间,访问更多内容。事实上,有多种推荐算法可以找到用户感兴趣的内容。

从用户访问日志里面也许发现用户访问好这个菜谱以后五成用户都会去看看“补血益气乌鸡汤”,这种现象一定有其背后的理由,也许会成为一个不错的推荐。 既然用户在看“鸡汤”类别的菜谱,那就可以把网站里面其他热门的“鸡汤”菜谱推荐出来,如“香菇鸡汤”。 通过分析某一个用户过去历史的访问记录,或许能发现该用户相对于其他用户更偏向于文火慢炖的汤,那就应该适当推荐出类似“炖鸡汤”这样的菜谱。 相对于“鸡汤”而言,“羊肉汤”也是汤类别的热门品种,用户也许会吃鸡汤吃腻了想换换口味。

然而,要实现这样的推荐,传统的做法需要大量人工编辑工作。既不能做到即时,也很难保证效果。人工编辑更难验证这些推荐算法是否能在真实流量上产生足够好的效果。一个精准的推荐模型,必须对算法本身的整体效果以及用户对各种算法推荐结果的偏好作一个综合评估,这样才能找到适合每一个用户的精准推荐模型。最终让用户享受到推荐展位“千人千面”的个性化服务。

<script  type=”text/javascript” charset=”utf-8″ src= “http://tui.cnzz.net/cs.php?id=1000001234″></script>

使用云推荐服务,只需网站开发人员在云推荐网站(http://tui.cnzz.com/)注册申请,得到一个十位应用ID,如“1000001234”。并将系统生成的JavaScript代码(如上例)内嵌在网页代码中便可以得到个性化推荐结果(如下图)。这个过程一般一分钟即可完成。随后的事情就交给云端系统了。它会开始对网站进行礼貌的抓取和深度分析:识别出真正包含内容的页面,并抽取出页面标题、图片等作为推荐的素材。系统还会持续根据展现的点击效果自动调整推荐算法的模型和权重。

在云推荐的管理界面里,网站开发人员可以定制推荐位置大小、推荐内容条目数、URL范围、展现形式等参数。网站站长还能看到推荐展位的点击情况,并根据建议适当调整推荐位置参数以改善效果。

云推荐服务还针对主流建站工具Wordpress、Discuz!、DeDeCMS等提供插件支持。开发人员在安装插件之后,即可在建站工具管理界面来操作并管理云推荐的各项功能,详情请参考云推荐官网(http://tui.cnzz.com/)。

根据后台统计,网站启用云推荐后的整体流量会提升10%。这样的个性化服务让人感觉就像是钱存银行能拿到利息一样,是大数据魅力的展现。相信随着数据的不断积累及用户数量的累积,个性化服务在大数据时代能给人带来的远不止10%流量提升这样的惊喜!

作者韩定一,阿里云计算有限公司高级专家,上海交通大学博士。目前负责用户行为分析部门研发工作,产品包括:移动搜索应用技术、全网数据平台、全网用户行为分析平台等。加盟阿里云之前,在上海交通大学从事信息检索方向的研究工作,发表过论文20多篇。《Web数据挖掘》译者之一。

更多精彩内容敬请关注《凌云》专区

《程序员》2013年杂志订阅送好礼活动火热进行中

 

当写字变成一门生意

有一个故事,我颇讲过几回,这里不厌其烦再说一回。

日本有一个超一流棋手叫大竹英雄,棋风属于“堂堂正正”型。有一回记者问他:大竹君,你热爱围棋,又可以靠围棋生活,想必十分满意吧。大竹英雄回答说:番棋无妙棋。这里要稍许解释一下,番棋就是日本棋手互相比试,番棋有奖金,虽然落败者也有,但胜利者的收获不知高出败者的几许。番棋是有实力棋手的主要收入来源(商业模式)。大竹英雄所谓番棋无妙棋的意思便在于,由于奖金放在那里,棋手比较容易患得患失,也不太敢兵行险着,精妙绝伦的棋是不多见的。

这个故事我大概是在很迷围棋的高中时代看到的,有些细节的地方可能记忆有误(我甚至已经不敢再确定这话是大竹英雄说的),但“番棋无妙棋”这五个字我是牢牢记住的。这五个字其实说明一个事:当兴趣爱好变成谋生手段时,这个兴趣爱好就忽然面目可憎起来。

现在说回写字,再说一个故事先。

文坛上有一对写字的父子非常有名,大小仲马是也。大仲马写《三个火枪手》之类的小说,十分多产。为人豪爽,喜欢结交权贵,而且除了写字外还建立了写字的商业模式:开剧院,因为写完戏剧总是要上映的,流水线一条龙了。虽然坚持用黑人姓氏做他的笔名,但法定名字还是一个贵族名字,有侯爵爵位,体面人。小仲马是大仲马的私生子,除了被抚养以外爹也不太愿意给他拼,特别是《茶花女》问世后,父子情感变得十分微妙。个人商业模式很简单:就是写字——几乎不成其为商业模式,因为生活潦倒。但这对父子在文坛上的地位是不同的。后人一般认为小仲马造诣高于大仲马,极端的甚至认为一部《茶花女》就超越了大仲马一生上百部作品。

大小仲马的故事老让我想起大竹英雄的话语。大仲马靠写字成名但最终受制于写字的商业模式,作品不敢直面当时动荡的法国社会,即便想说两句,也要借古喻今,走的是历史剧惊悚剧路子。小仲马也靠写字吃饭但个性上更为不羁一些,成就便超过了其父。

写字能不能靠卖字养活自己?

放以前是可以的,我祖父就是一写字的,可以养活一大家子。但随着时代演变,慢慢卖字就养不活自己了。我老爸也是写字的,但我琢磨着他怕是光靠卖字是养不活一大家子的。我就更不用谈了,平均稿费五毛钱一个字,还是税前的,标准五毛党——近来正在琢磨要不要提个价到六毛七毛什么的,通货膨胀亚历山大啊——即便一个月连写二十天,每天码上一千字,月入不过一万,光够养活自己,幸好我收入比较多元化。

一方面写字的人多了,内容供给增加,根据供求原理,价格下跌是很自然的。另外一方面,大众受教育程度普遍变高,眼界宽了,要伺候好他们不容易。我爷爷要放今天,大概就是个高中到大专的学历水平,没关系,40年代的大众如果认字的话普遍就是个小学水平。高中生和小学生差别还是很明显的,随便掉两个书袋就能忽悠住。但今天大众以本科大专为主,即便学历高于他们,差别相对其实不大,更何况读到高等学历后,学历已经不再说明什么问题了。

作为一个很勤快的写字的,其实我一点都不在乎盗版,多年以前还在意,现在真是全然不当回事。虽然说“我不盗你版你靠什么传播名气”之类的说法属于强盗逻辑,但扪心自问一下,这个强盗逻辑是成立的。渠道强于内容的想法,于我而言,根深蒂固。至于说天底下都盗版了就没人写字了,纯属胡言乱语虚言恫吓,根本不可能。

因为不是每个人都把写字当一门生意的。

卖字养不活了以后,靠广告行不行?一手交稿一手给钱转为一手交稿一手得用户再一手把用户卖给客户,这事做得过做不过?

我没做过,虽然主观上认为不靠谱,但也许真有做成的,我又不是全知全能者,字桶一枚,犯错是常态,正确才是变态。但我以为,如此写字,写着写着就成大仲马了。商业模式一旦建立起来以后,必定会受制于商业模式。

前店后工厂的作坊生意,虽然收入不高,但胜在自由,唯一要看的就是买字者的脸色。一旦成为一种流水线生产,或者说生意上参与方多了以后,利益就更要掂量掂量了。我得很坦白地承认一句,即便我这种不靠广告主的人,写字上有时候也有些受限。圈子混久了,总有些场面上的朋友,有时候说话就会权衡一下。虽然违心地吹捧不会,但违心的闷声不说话,这种事我经历不少的。

真正意义上写字,最好离钱远一些。金庸写武侠部小说,写成大腕,衣食无忧财务自由后,才敢放手去写一部《鹿鼎记》。即便到了那个份上,还得给韦小宝一个讨了七个老婆的结局来讨好读者。等到年事已高不用在意什么的时候,总算彻底放开,去修订他的作品:爱怎么写怎么写,管你看了后爽不爽。

念念不忘,未必必有回响。念念不忘,必有牵挂,倒是确然的。

既然说到金庸,提一下他笔下的人物们。女性上我最欣赏胡夫人(胡一刀老婆),男性上最喜欢令狐冲。特别说说令狐冲。

这个人有本事,开宗立派不在话下,但他全然没有这个兴趣。倒不是因为看透了,而是天性使然。武功一高,就会想开宗立派(商业模式,名也好利也好),一个开宗立派,就要合纵连横,则必有牵挂(短暂的恒山掌门生涯已经说明了这一点)。就算天下第一高手,如果不小心从事,东方不败就是前车之鉴。争权夺利的结果不是没夺着,就是夺得越多越不自由。令狐冲有这个天性真是好福气,可惜金老先生还非要塞个任盈盈给他。要是任大小姐一不小心死了,令狐冲那就真心完美了。

其实博客这玩意儿挺好的,当年有一帮人非要争一个“网志”、“blog”就是不爱说博客,7-8成就是在争一个名头,剩下2-3成才是在意诸如“一个博客商的博客今儿在ta的博客上写了篇博客”这种不易区分的话。

但走着走着,忽然冒出一个“自媒体”来,这就立马变成一个生意。博客写作者和阅读者是“社会规范”的关系,媒体写作者和阅读者就偏向“市场规范”了(两种规范可参见怪诞行为学一书)。管你是付费阅读(两方交易)还是免费+广告(三方交易),生意就是生意。就好比本来闲云野鹤的一个乡下练家子,没事在家里后院练个武强个身或者逗逗自家孩子,今儿忽然树个牌坊说:我要做掌门了——当然,护法是没有的,堂主可能也是不需要的,自媒体嘛————要么收徒收钱,要么免费带徒出去卖艺收钱,混好了还可以让徒弟去做有钱人保镖然后抽个头神马的。商业模式多多,只有不敢想没有不敢做的。

但令狐冲去做什么创始人、董事局主席、首席主笔、CEO,真是好煞风景。

惟愿有朝一日,我能纯写博客。

Copyleft © 2013 知识共享署名-非商业性使用-禁止演绎 注意:转载勿改标题!ItTalks — 魏武挥的Blog (digitalfingerprint:fc4f8fc31f70097eea4b780b13146415)

欢迎 关注我的微博 订阅我的微信公众账号:ittalks

无觅猜您也喜欢: Facebook:小生意的大故事 LBS其实是一门大生意 给电子阅读器降点温 香港 浸会 传播学 无觅

[…]

传统消费电子产业升级,从云开始——酷开网IT架构变革之路

文 / 王翔

关于酷开网

深圳市酷开网络科技有限公司是由创维集团深圳创维-RGB电子有限公司全资成立的高新技术企业。依靠创维集团庞大的产业资源优势,结合公司本身的技术特点和产业链结构,重点研发和运营高水平的互联网电视平台技术。

酷开网凭借自主研发的、行业领先的互联网电视技术,为电视机及其周边产品提供多媒体内容集成和运营服务;搭建酷开智能电视平台,开展影视、音乐、教育、健康、运动、游戏等频道服务;拓展酷开电视周边产品业务等。酷开网在融合各类型资源的同时,注重自主研发,掌握尖端互联网电视平台核心技术,在全球范围内掀起云电视普及风暴,让更多用户享受云端应用体验给生活带来的改变。

电视在“云端”

“酷开云电视”,是指在智能电视基础上,运用云计算、云存储等技术对现有应用进行升级的智能化云设备,它拥有海量存储、远程控制等众多应用优势,并能实现软件更新和内容的无限扩充,极大提升了智能电视的实用性。

只要用一根网线连接上互联网,电视终端用户就可即时实现最新应用并随时提取海量资源的共享,将电视与互联网无缝连接起来。从智能手机、平板电脑刮起的“云概念”之风,终于完全进入了电视终端领域。通过连接上云端的电视终端,用户可以在任何时间、任何地点,通过云端实现终端设备(TV、PC、Pad、Phone)的多屏互动,进行视频、音频、资讯等多种内容的共享;更可实现物联生活,连接“家庭云”、“社交云”、“娱乐云”、“教育云”等所有云端,通过连接“家庭云”,甚至可进行家电的物联,自由控制家庭中的洗衣机、冰箱等各种设备。

初识云计算

基于业务特性,我们将许多重要业务部署在传统IDC机房,为保障这些业务的平稳运行,实施了一些安全高可用的方案。但随着企业业务的快速增长,随之带来的就是我们需要更快速的部署服务能力。按照传统做法,即简单增加大型机设备资源,但由于购买硬件、带宽、寻找IDC机房需要消耗大量时间,且后期还有部署工作,费用、时间成本以及运维的压力制约了企业随需而变,传统的做法在业务发展中已不能适应企业当前的需求。

我们希望找到一种能够快速部署业务、动态平滑增加计算能力,同时能够抵制一定攻击的解决方案。在研究并评估国内外现有的云计算产品的过程中,我们慎重考虑了很多因素,包括云计算服务提供商的产品是否成熟、软硬件双重安全保障、产品服务稳定性及易用性、技术支持服务响应速度等因素,最终选择了信任阿里云提供的云计算产品。

从传统IDC到云平台的变革

云平台以丰富化的方式,方便用户使用

经过实践考察,阿里云目前的云计算产品表现不俗,在做好测试的情况下可大胆使用。我们目前使用了云服务器、云盾、负载均衡、云监控产品,还在测试RDS、OSS服务,借助这些产品已经可以构建出替代传统形式的运营平台。值得一提的是:在使用云计算产品之前一定要先深入了解不同产品的特性,经过深入了解,可将不同特性的云计算产品功能发挥到最大。在大流量应用场景下不可一味照搬使用物理服务器的惯性思维,一定结合自己的业务场景选择使用。

图1 酷开网资源聚合平台

图1是酷开网以云平台作为资源聚合平台的图示,我们要求所有内容提供商以定期推送资源清单信息的方式汇总到酷开网,然后酷开网对资源清单进行整合、分类、整理或者信息聚合(RSS),并生成要推送的资源清单信息到网络电视用户。

云平台以快速化的方式,提升部署效率

非常幸运的是,在选择阿里云提供的云计算产品服务之后不久,我们便在创维“万人大团购”活动中成功应用。从接到“万人大团购”任务到活动开始只有不到2周的时间。时间紧任务急,如果按照以往传统选择IDC开展业务,需要快速购买机器部署业务,在短时间内很难保证业务上线。我们立刻与阿里云方面沟通,由其提供所有服务需要的云服务器,同时还使用了负载均衡(SLB)服务,使得整个架构的构建快速可靠。如此一来,我们的精力就可以集中在业务部署和线上测试过程,减小了基础资源的采购压力,更重要的是大大提高了整个业务的部署时间,为业务的正常上线赢得了时间。由于云主机整体的成本较低,可靠性高,可快速增加计算能力和抵制一定的攻击,同时阿里云提供的云盾服务可以快速检测并预警,大大提高了系统的安全性。我们的维护压力大大减少,大幅度压缩了运营成本。在这一次业务需求的应对过程中,云计算部署的便利性及扩容灵活性得以淋漓尽致的展现。

云平台以服务化的方式,降低运维压力

云平台以服务化的方式提供,不仅是提供云产品,而且免费快速备案操作的便利性、售后技术支持的专业性,都是吸引我们选择阿里云平台的原因。

我们曾经因网络原因导致办公室与阿里云服务器之间通信故障,而故障发生之时正处于晚间电视收看高峰,压力如山。阿里云方面委派专门的工程师,在短短5分钟之内就快速响应,协助我们共同解决问题,这样的服务体系对于IT运维人员来说是极大的帮助。日常售后服务在系统工单上就可以轻松搞定,普通的问题在后台提交服务工单,可以很快得到答复,而且在问题解决之后会有专门的售后同学进行电话联系确认。

图2 阿里云服务工单

领先上云,产业升级

借助于市场和政府的推动,各行各业都已对云计算有了较清楚的认识,了解了云计算所带来的优势。但不可否认的是,虽然国内云计算如火如荼,由于信息敏感或谨慎等原因,很多传统企业仍处于试点或尝试接受阶段。而我们得益于集团清晰的云战略,领先走上云端。酷开在消费电子领域,可谓是第一个吃螃蟹的公司,在信息化时代云计算普及的浪潮之下,希望能够依托云计算作为底层的承载,释放更多精力专注于产业创新升级,为我们的全国电视终端用户的体验做出更多努力。

作者王翔,深圳市酷开网络科技有限公司运维工程师,负责服务器运维和安全。

更多精彩内容敬请关注《凌云》专区

《程序员》2013年杂志订阅送好礼活动火热进行中

同步盘牵手阿里云,构建企业文档管理利器

文 /  田超

同步盘是由易美云研发和运营的面向企业的在线云服务, 它以安全的企业数据存储为基础,在其上提供了多种在线的数据展示、文件编辑、数据共享与协作的功能,为企业解决文档协作的相关问题。

当前市场中已经有了不少网盘产品,与一般的网盘产品相比,同步盘是一个面向企业级的云存储产品,立足于满足企业对安全数据存储的需求,更加致力于开发基于企业文档之上的协作和沟通服务。企业在同步盘的帮助之下会逐步体现企业核心价值的知识库,构建关键业务流,共享各个离散的业务系统输出的文档和数据,进一步发挥出企业的竞争力。

云计算探索之路

作为SaaS云存储服务提供商,同步盘也是国内云计算技术的先行者之一。我们对于云计算相关的技术有着较为深刻的理解与认识。采用云计算技术作为底层的支撑对于我们也是一种自然的选择。在同步盘创建之初,Amazon的S3和EC2平台在国外已经营了多年,并积累了很好的口碑,Amazon平台实际上也成为了国外创业公司的首选。但国内的IaaS和PaaS服务那时还处于刚起步的状态,因此当时,我们也采用了传统的自建IDC及分布式机群的方式来构建我们的应用。

自建IDC实际上是一项复杂的系统工程,尤其是对于网盘这样的复杂交互式应用来说,对于底层平台的稳定性、扩展性,数据传输的高效性都有较高的要求。并且当业务扩展时,底层的数据存储平台还要能够无缝地扩充,这些都是对系统运维的挑战。首先作为一个数据存储平台,分布式文件系统是必不可少的。我们当时也搭建了自己的分布式文件系统集群。随着业务的发展,我们的服务器要不断扩容,且扩容的过程对于上层应用来说要保证是透明的。在这个过程中我们积累了一些经验,开发人员当时做了很多自动化的工具来保证这些运维工作的高效性。例如,我们尽量保证硬件资源和软件资源的同质化,也就是机器的硬件配置和软件环境基本上都是相同的;同时我们自己维护了一套公司的软件依赖库,每台机器的初始化和依赖更新过程都是全自动的等。在当时看来,我们的运维工作做得还算不错,不过随着机器的不断增加,可以想象到,这一部分的工作也会越来越重。

自建IDC的另一个更大的挑战就是如何保证网络带宽的质量。网盘是一个对于网络带宽质量非常敏感的应用,而国内IDC的带宽环境又非常复杂。不同地方的带宽价格差距很大,质量却又参差不齐。我们的服务要保证联通、电信、移动三家运营商的用户都能高速访问,一些IDC可以提供多线BGP的带宽,但价格昂贵,扩展起来也很不方便。因此自建IDC的过程中,对于带宽质量的选择和测试就要花掉很多时间。

因此在2011年,我们希望参考国外的Dropbox和Amazon的合作模式,在国内寻找一家云计算平台服务提供商进行合作。在这样的合作模式下,底层的云计算平台将会成为我们整个产品技术体系重要的组成部分,因此我们的选择非常谨慎。我们认为云计算平台不仅应该包含有从存储到计算的完整的服务,同时应该延伸出一个健康的生态环境。我们不仅仅看重平台本身所提供的核心产品的功能与品质,也非常看重使用云计算平台后能够得到的技术服务以及它背后生态系统给予的各项支持。同时对于一个平台系统来说,开放性也是我们关注的重要方面,强大的开放性更适合我们这种技术型的创业公司更好地发展自身业务。

2011年底,在充分调研了国内几家云计算平台之后,同步盘开始与阿里云合作,将服务整体迁移到阿里云平台之上,开始陆续使用阿里云的相关服务,包括OSS(开放存储服务)、OTS(开放结构化数据服务)、RDS(关系型数据库服务)、云服务器、云盾、云监控、SLB(负载均衡服务)等。随着这些云服务的使用,我们系统运维的效率有了一个较大的提升。虽然硬件使用的成本略有提升,但综合算起来,相当于我们把部分底层运维的业务“外包”给了阿里云,所以整体成本是下降的。而且我们获得了阿里云平台提供的高效运维能力。

云平台中的系统架构优化与运维经验

迁移到阿里云平台之后,我的一个深刻感受是,系统运维所面对的问题有了很大的变化。自建集群时,我们需要花费很多精力来维护底层的集群环境和网络环境,同时我们也要花大量的精力来保证分布式系统的高速访问和高可用性。在云计算环境中,这些问题的优先级降低了很多,因为阿里云的同事们帮我们提供了一个相对稳定的底层系统。我们的精力可以更多地花在产品功能的演进之上。

在这里和大家分享阿里云环境中,我们运维的几个小经验。

优化方法比解决问题重要。优化方法是我们团队工作的一个重要原则。作为一家创业公司,我们经常会面临各种问题。而解决问题的效率是一家创业公司生存的关键。对于运维工作更是如此,每天对几十台机器的部署和维护,如果没有优化的方法的话,会占据我们大量的时间。因此我们搭建了许多监控系统和精确到秒级的日志流过滤系统,通过这些系统能够实时检查到系统的运行状态。 图形化一切可以图形化的东西。在最早的时候,我们的运维同学每天都要跑脚本算日志,然后将结果导出到Excel中,这种工作的效率非常低下。本着优化方法的思路,我们构建了自己的日志管理系统,所有的日志都会发送到统一的日志管理平台来处理,且通过Ganglia实时画成曲线。例如实时的QPS,每个API的响应时间,都是图形化访问的。我们通过这个系统解决了很多之前忽略掉的问题。 通过算法来降低成本。这是我们针对云平台做的一个优化。阿里云OSS为我们提供了稳定的存储和高速的带宽,但按照流量收费的模式是我们运营成本的一大来源。与此同时,我们的服务器是按照带宽收费的,低峰时段,带宽的利用率并不高。因此我们所做的一个优化就是将数据下载流在OSS与我们的云服务器之间进行调度。我们根据用户的历史记录信息,确定用户的数据工作集,将工作集中的数据在OSS和我们服务器之间做数据调度。通过这一技术,我们降低了30%以上的流量成本。

云计算:中小企业创业的催化剂

从国外云计算的发展经历来看,云计算平台对于中小企业的创业起到了一个催化剂的作用。例如Dropbox、Netflix等,美国已有大批基于AWS的成功创业案例。国内的云计算市场这几年也开始了高速的发展。客观地讲,国内现有的云计算平台和国外成熟的云计算平台如AWS等相比,还是有一定差距的。无论是国内的云计算平台公司,还是开始尝试使用云服务的中小企业来说,都还需要不断的实践、磨合与完善。作为构建在云计算平台之上的云计算应用服务提供商,同步盘愿意与同行探讨、交流云计算技术,分享云服务的使用体验,同时与阿里云这样的云计算平台共同成长,为企业提供安全可靠的文件存储与协作服务,一起积极推进云计算在国内的发展。

作者天超,现任同步盘技术总监,主管公司研发工作,方向为分布式存储、分布式计算。曾就职于雅虎北京全球研发中心搜索组和云计算组,方向为实时搜索、垂直搜索、分布式存储和计算平台的研发。本科毕业于天津大学,并于中科院计算所获得硕士学位。

更多精彩内容敬请关注《凌云》专区

《程序员》2013年杂志订阅送好礼活动火热进行中

代码重构:HTML与语义化

在前端开发过程中,很多人谈到“模块化”,很少人特别关注“语义化”,简单的说大多数人更关注功能的实现,而忽视了实现的细节。所谓HTML语义化,就是尽可能的理解要表达的内容,选择适合的HTML标签,将内容转换成浏览器认识的语言,通过浏览器传达信息给用户。

目前很多的前端书籍取名就叫精通DIV+CSS,让人感觉DIV可以搞定一切,但是DIV标签仅代表一个块状标记,HTML的每个标签都有它特定的意义,而语义化就是让我们在适当的位置用适当的标签,以更好的让人和机器(机器可理解为浏览器可理解为搜索引擎)都一目了然。

下面来说说HTML语义化具体的作用

1、对于用户

整个语义化对已用户的影响微乎其微,没有多少个用户会在看网页时直接查看源代码,网站上也不太可能出现样式丢失的问题。所以此点基本上可以忽略。

2、对于搜索引擎

页面的语义化对搜索引擎的理解非常重要,因为现有的很多搜索引擎目前注重的还是依依标记,而非表现标记。例如H1-H6的合理使用。strong标签的合理使用都会给SEO带来很好的效果。需要注意的是,语义化并不特指H1~H6和strong标签。

3、对于开发人员

W3C给我们定了一个很好的标准,在团队中大家都遵循这个标准,可以减少很多差异化的东西,方便开发和维护,提高开发效率,利于模块化的开发。

HTML 规范其实一直在往语义化的方向上努力,许多元素、属性在设计的时候,就已经考虑了如何让各种用户代理甚至网络爬虫更好地理解HTML 文档。HTML5 更是在之前规范的基础上,将所有表现层(presentational)的语义描述都进行了修改或者删除,增加了不少可以表达更丰富语义的元素。为什么这样的语义元素是有意义的?因为它们被广泛认可。所谓语义本身就是对符号的一种共识,被认可的程度越高、范围越广,人们就越可以依赖它实现各种各样的功能。

HTML5 并非 Web 语义唯一倚仗的规范,除了 W3C 和 WHATWG 外,还有其它的组织在为扩展、标准化 Web 语义做着贡献。只要有浏览器厂商、搜索引擎原意支持,它们的规范一样可以成为通用的基础设施。例如 microformats 社区以及 http://Schema.org 上都有对 HTML 以及 Microdata 规范的扩展词汇表,Google、Bing、Yahoo! 等搜索引擎以及各个主流浏览器都不同程度地接纳了其中定义的语义扩展,并应用在了生产中。

讲了这么多内容,但是可能还是不太理解什么是语义化HTML。要求:将下面的内容转化成语义化HTML~

以上内容的代码实现为:

<!DOCTYPE HTML> <html> <head> <meta charset="UTF-8"> <title>旅游产品经理(出境游)招聘</title> </head> <body> <h1>旅游产品经理(出境游)</h1> <dl> <dt>工作地点</dt> <dd>广州</dd> <dt>职位类别</dt> <dd>产品运作</dd> <dt>学历要求</dt> <dd>本科</dd> <dt>人数</dt> <dd>2</dd> <dt>更新日期</dt> <dd>2011-09-16</dd> </dl> […]

Category

Archives