2012年4月23日星期一

一个杀手移动用户界面的七个步骤

  有些微妙,你有一个智能手机,而没有意识到你个人和它已经发展出一种特殊的关系。我们最近了解到,史蒂夫·乔布斯掌管的他自己组建的团队,创建了第一代iPhone——“人们会爱上的电话。”无论我们承认与否,我们与我们的iPhone,黑莓,Android或Windows Phone有着特殊的联系。

  但爱是善变的。最近的哈里斯互动研究表明,坏的移动应用程序,可以极大地损害品牌的声誉。几乎有三分之一的受访者表示,当有一个坏的移动应用程序经验时他们告诉过别人。不过,超过半数表示,他们推荐过有良好体验的移动应用程序。

  为移动应用提供一个良好的用户体验是至关重要的。这里有七个步骤,让你以正确的方式交付伟大的移动应用程序。

  1.定义你的目标

  你想完成的移动应用程序是什么?最重要的是,你的用户拿它想要干什么?你必须确定你的应用程序将达成的目标。对于这一点,你需要了解用户用这个程序每天的活动,围绕它的目标和动机。

  一个好的方法是创建人物 - 代表用户的虚构人物 - 编写敏捷用户故事规格。这种方法使你以正确的心态来为您的应用程序陈述需求。类似这样的东西:“作为保安人员,约翰尼·布拉沃必须用他的手机,找出下一个他应该到检查点,签到,这样他就可以完成随机巡逻。”这种方法可以让你从用户的角度来看应用。

  当然,要考虑移动和桌面应用程序的用户故事之间的差异,尤其是当考虑到移动环境。例如,移动用户可以步行或用一只手。

  经过收集几个这些故事后,你必须根据他们的频率区分优先级。我会解释为什么这非常重要。

  2.分析现有的应用程序

  如果它是第一次你要创建的移动应用程序,仔细看看现有应用的界面。有两个突出的明显的事情:屏幕尺寸很小,所以许多移动设备上使用触摸屏;屏幕上的元素一定要大,所以他们很容易触摸。

  较小的屏幕和更大的元素意味着你在屏幕上的显示的项目数量有限。

  选择在手机屏幕上怎么样做是一个挑战;一些可用性专家甚至主张,在桌面版本之前创建一个移动网站版本。

  区分你的用户故事优先次序对此很有帮助。你要认真研究最重要用户使用的功能。分析出在80%的时间使用的20%的功能,是每一个可用性专家的目标。如果你在移动上做得正确,桌面也将有优先权力。

  3.本机应用或移动Web应用?

  你需要决定是否使用HTML5或本地API.这一决定对用户界面技术实现有很大的影响。本机应用程序通常运行速度更快,是游戏,离线,硬件密集的应用程序的最佳选择。移动Web应用程序可更快地实施,易于维护,并常常更好地适合企业应用程序。混合的方法也是有道理的,如果你想要移动Web应用程序的维护方便,但需要特定的硬件功能,如手机的摄像头或GPS.

  可以利用现有的框架和平台解决方案,但无论您选择什么,确保你可以快速地创建和修改用户界面,以便你可以经常迭代。

  4.快速制作原型

  项目启动时测试移动界面的一种快速方法是使用低保真原型。Palm Pilot推出之前,它说,发明家把小木块大小的设备放进口袋来感觉如何。后来,他在这上面勾勒了几个粗糙版本的用户界面。

  早期的Palm Pilot原型慢慢的接近真实的东西。

  移动应用程序原型制作很简单:铅笔和纸都是你所需要的,因为屏幕小,你不会绘制太多。原型测试通过请用户尝试完成他们的任务。看看他们做什么,问他们,他们正在想什么。其结果对帮助您改进设计是惊人的。一个伟大的设计的口头禅是:“不要让我思考!”如果你的移动设计测试失败,那么你的应用程序也将失败。

  5.避免破坏 UX 用户体验的错误

  当人们开始创建移动应用程序,他们通常会犯一些已知的错误。首先,如果他们创造一个现有网站的移动版本,开发人员常常试图复制桌面上每一个功能,没有考虑到移动用户的意图。

  另一个常见的错误是有太多的导航结构。深层结构不能很好地适用于移动,简单的模型才能更好地工作。希望用户能够轻松地输入文字是另一个错误:移动设备上文本输入很难,所以你要尽量减少输入。

  在手机上运行优秀的应用是让阅读更多内容而不是书写内容。想一想:您最喜爱的移动应用程序需要输入大量的文字?

  6.添加令人愉快的细节

  移动电话永远伴随着你,知道你在哪里,这就是为什么mapping地图应用程序是如此的成功。电话可以听到你所听到和看到你所看到的,这也解释了Shazam和Instagram的普及应用。使用位置,摄像头,麦克风,都是获得用户所处的环境聪明的方法,你可以以独特的方式利用它。

  即使你不使用移动设备的硬件,也有几个技巧你可以用它来取悦用户。动画可以增加你的应用程序的兴奋。如果您正在创建移动Web应用程序,缓存静态内容,并考虑使用 CDN 内容交付网络,使页面载入更快。

  受欢迎触摸移动Web应用程序的另一个是可让用户将它们添加到自己的主屏幕,使他们看起来像本地应用程序的感觉。如果你做到这一点,请记住,在你的用户界面上包含后退按钮,使用户可访问退出选项。

  记住用户在不同会话的选择(例如,最近的项目列表),是另一种智能触摸,这将使应用程序具有上下文感知和解放用户不必重复导航步骤。这些可用性能快速完成操作,使用户的生活更轻松。

  7.失败宁早,恢复快

  即使有设计师和开发人员良好的团队合作,你第一次尝试创建一个移动应用程序可能也会失败。 (最近的一项调查表明,38%的人不满意他们用到品牌应用。)最好的策略是失败宁早和快速迭代,学习人们是如何使用您的应用程序并不断改善。敏捷方法是你交付用户需要的移动用户界面一个伟大的方式。

  杀手移动用户界面是很难的,但在这篇文章中概述的战略将有帮助。认真的考虑它们,以你自己的方式来写一些伟大的移动应用程序吧!

  来源:英文原文,中文编译:IT瘾

揭秘排队返现网的数字骗局

  作晚朋友打电话给我,问我关于排队返现网的操作模式。我之前并不知道排队网的模式,我以为跟返利网一样,淘宝返利10%给网站,网站再返利5%给消费者。朋友说不是这样的,是消费100返现100,我说不可能,中间肯定有猫腻,于是上午花了一个小时,做了一回数学题,搞懂了他们的骗局模式。

  按说作为一个互联网从业者,去揭秘这种事是很不地道的,但是我相信大家都是聪明人,迟早都会明白是怎么回事。

  排队返现网站给出的规则是这样的。你去网站的联盟商家买东西,满100元,再送你100元的返现券,然后你拿着返现券去网站排队等返现。关键就在于这个排队上,规则是每新增加20(有的网站是15)个排队号,20个前面的一个排队号就可以返现。如你的排队号是1,那么总排队号到20的时候,你就能返现;如你的排队号在10,那得等到总排队号到200,才轮到你返现。

  网站怎么赚钱呢,商家给你的100元返现券(网站出钱返给你),这个券是商家向网站购买的,目前大多网站是收15元/100元返现券,相当于商家打了8.5折。

  也许你会觉得,排队返利网站只收入了15元,却给消费者返了100元,它不是尽亏85元吗?理论是这样的,可是事实上不是。它的模式就像前几年出现的非法融资模式,理论上它是巨额亏损,实际上它手上钱越来越多。下面我们就来分析这个数字骗局:

  排队返利网每出售20张返现券,才会返100元出去,算下:20X15元=300元,减去100元,剩下200元在手上。如果网站运营不错的话,每10分钟出去一张100返现券,那么每小时出6张,每天按12小时算,每天出72张*15元=1080元,再减去给用户返现的,按4位算,即减去400元。每天收入680元,每月收入20400,不错的收入。

  按照上述的假设,来看看排队的奥秘。假如你的排队号是1,那么总排队号到20,你就可以返利,那么你当天就可以等到返利;排队号是10,那你得等到总排队号到200,即第三天返利;排队号是100,总排队号要到2000,要等到一个月后;排队号到1000,总排队号要到20000,等到返利差不多277天;排队号在10000,总排队号要到20万,你得等到4年后才能返现;要是你排在了10万名的话,恭喜你,你要等到77年后……由你的儿子帮你去领返现吧。

  在等待排队的朋友,你去看看你的排队号是多少吧?随便搜了一个北京的排队拿网站,目前的排队号是3900多,如果你现在加入的话,拿到返现的时间是在3年后。

  现在你知道了,网站上说消费100,返现金100,不是那么容易拿到的。

  来源:投稿,作者:易度,博客地址

2012年4月22日星期日

选择“关机”还是“睡眠”?

  当计算机暂时不需要使用的时候,你会选择“关机”、“混合关机”、“睡眠”、“休眠”还是“混合睡眠”?根据微软所进行的调查,57% 的台式计算机用户和 45% 的笔记本电脑用户会选择关闭他们的计算机,而不是让计算机进入睡眠模式。

  对此,我们将会逐一介绍各个选项,为你找出最佳选择。但是,由于各个选项都有其的不同特点,所以我们分为两种情况进行分析。另外还会解答一些各位最为担心的问题。

选择“关机”还是“睡眠”?

选择“关机”还是“睡眠”?

  一、如果希望启动之后进入全新会话:

  1. 选择“关机”

  如果选择“关机”,系统将会通知还在运行的应用程序,通知它们保存数据和设置。之后,系统将会关闭每个已登录用户的用户会话,而且陆续关闭服务。然后,系统将会通知设备,并关闭系统会话、保存待处理的数据。最后,系统通过 ACPI 接口发送信号关闭计算机。

  “关机”较为节约能源,而且关机速度很快。启动之后将会进入全新会话。另外,如果需要更改硬件设备或者系统存在故障,一般建议使用关机,避免出错。

  2. (最佳)选择“混合关机”

  如果选择“混合关机”,那么系统将会如同“关机”一样关闭所有用户会话,但是系统将不再关闭内核会话,而是将其休眠。

  由于启动时只需读取休眠文件并重新初始化驱动程序,所以启动速度相比选择“关机”要快得多。“混合关机”较为节约能源,而且启动速度较快。需要注意的是,这是 Windows 8 才新增的功能,默认取代关机。


  二、如果希望启动之后进入工作状态:

  1. 选择“睡眠”

  如果选择“睡眠”,那么系统将会关闭大部分的设备。此时,一般只有内存仍然在上电,用于维持内存数据。有时为了能够从其它方式唤醒,还会给网卡、USB 接口等上电。唤醒之后用户能够快速进入工作状态。

  2. 选择“休眠”

  如果选择“休眠”,那么系统将会在关闭计算机之前将系统状态和内存内容保存到磁盘上的一个文件(hiberfil.sys)中。在恢复时系统将会重新读取该文件,并将内容恢复到内存中。借助休眠机制,用户不仅能够较快进入工作状态,而且还能完全避免关机时的电源消耗。

  3.(最佳) 选择“混合睡眠”

  如果选择“混合睡眠”,那么系统将会在睡眠的基础上保存系统状态以及内存数据到磁盘。这在台式计算机上是默认开启的。

  唤醒计算机时,如果计算机电源没被切断时,可以快速进入工作状态;如果电源已被切断时,便可读取磁盘上的休眠文件,恢复工作状态,而你的会话内容却不会丢失。

  对于使用电池或有不间断电源的电脑,更为常见的是默认睡眠,电量不足时休眠。


  三、疑难解答

  1. 什么是“全新会话”?

  全新状态,就是用户选择“关机”之后再次启动系统所进入的一种状态。用户可以打开所需软件进入工作状态,但是耗时较长。启动速度只是代表进入全新会话所需的时间。

  2. 什么是“工作状态”?

  工作状态,就是用户能够立即开始工作的一种状态。如果你在浏览一些网页,那么工作状态可能就是打开浏览器、音乐播放器、即时通讯软件等等。进入工作状态速度则是代表进入工作状态所需的时间。

  3. 睡眠时的功耗如何?元件会因此损耗吗?

  上面已经说过,在睡眠时系统一般会关闭其它设备,只为内存上电以维持数据。这种情况只会消耗很少电能(大约在 7.5W 左右),而且由于元件处于静止状态,它的损耗不会很大,几乎可以忽略不计。

  4. 休眠文件严重“吞噬”磁盘空间,是否应该果断删除?

  根据某些优化软件或安全软件的说法,休眠文件严重吞噬磁盘空间,所以被列为其必删项目之一。然而,休眠文件(hiberfil.sys)默认只占物理内存容量的 75% 左右,如果觉得磁盘空间紧张,还可以调整休眠文件的预留大小。

  休眠文件用于保存休眠数据,如果执行“powercfg /hibernate off”回收此空间,那么这意味着休眠、混合睡眠、快速启动(混合关机)将会彻底禁用。考虑到使用休眠等功能带来的诸多好处,与删除后所获得的少量空间,除非磁盘空间极为有限,否则不应删除。

  5. 如果睡眠之后无法唤醒,应从怎样排查故障?

  首先,请确认是否有部分系统文件被某些优化软件或安全软件当作垃圾文件删除,否则,请检查 BIOS 设置是否有被更改,看看主板支不支持 ACPI 接口。另外,驱动更新、系统更新以及一些第三方软件均可能造成计算机在睡眠之后无法被唤醒。


  四、反思习惯

  今天是世界地球日,它是最初在 1970 年的美国开始的一项世界性的环境保护活动。活动旨在唤起人类爱护地球、保护家园的意识,促进资源开发与环境保护的协调发展,进而改善地球的整体环境。

  然而,到了今天,我们对于环保方面的认识还是不够深刻。不少用户在短暂离开时都会继续打开计算机,而不是将其睡眠或关机,这样造成了巨大的能源浪费。

  一般情况之下,如果计算机暂时不需要使用的时候,应该选择“睡眠”、“休眠”或者集上述两者之长的“混合休眠”,因为这样能够快速恢复工作状态,能够节约不少时间,这比“关机”更为合理。“关机”应该在需要更改硬件或者系统出现故障时才使用。

  为什么我们要去抗拒这些新的方式呢?依靠“睡眠”等功能快速进入工作状态,远比你在进行删除启动项、关闭服务、“优化”系统、清理“垃圾”、评分电脑等操作之后使用关机、传统启动然后获得一个提示“您这次开机共用了 xx 秒,您的开机速度击败了全国 xx% 以上的电脑……”要实用得多,而且要有意义得多。

  来源:投稿,作者:EMLink,原文链接

2012年4月17日星期二

Instagram完全新手指南

  今天世界的目光都聚焦到了 Instagram 上,因为在这个星球上最大的社交网站 Facebook 宣布将以10亿美元收购 Instagram 和它背后的团队。在不到两年的时间内,发展为拥有3300万用户的 Instagram 为何拥有如此魔力呢? 在我们之前的之前 Instagram 成功的关键节点 曾有讨论。考虑到很多人或许还没有玩过 Instagram ,今天想带给大家的是如何快速上手并玩转 Instagram ,因为它必然有着和其他社交应用不同的地方。

  怎样拍一张好的图片

  我们曾在简单而又不简单的手机摄影里面提到未来的手机拍照会更加娱乐化、趣味化和社交化。而 Instagram 刚好体现了这一点。当然要想用 Instagram 拍出一张好的照片,有一些必备的手机拍照技巧还是需要掌握的。

  1. 学会简单构图

  对于手机摄影简单的构图也是必须的,三分法则、黄金分割法则、对角线法则都应该简单了解一下,避免无论拿起收起拍什么都是不加考虑的放在屏幕正中间。当然,也不要拘泥于这些条条框框上。

  2. 学会从不同角度取景

  取景构图与画面水平线是没有关系的,要学会从不同角度取景,例如俯视、仰视或以拍摄物的角度去取景都值得尝试(不建议45度),这样拍出一张有新意的照片机率就大多了。

  3. 利用“移轴”效果

  手机拍照不具备专业相机相同的控制景深的能力,而使用线条、重叠及前后景空间可以做到这一点。所以要学会利用 Instagram 里的“移轴”效果来让照片具有纵深感。

  4. 注意光线

  光线的好坏决定着你拍出的照片的好坏,例如要尽量避免顶光和正面光拍摄,多用侧光或逆光,尤其是逆光下出现的剪影效果会使你的照片既有层次感又有表现力。

  5. 使用恰当滤镜

  丰富滤镜一直是 Instagram 的特色,将原始图片加上滤镜效果后不仅能掩盖掉手机拍照的一些小的瑕疵,它还能够起到调和色彩饱和度或明亮反差,当然前提是你要能选对正确的滤镜。如何选择呢?当然是多尝试几个然后对比出哪个效果最好就选哪一个。

  6. 借助其他 App

  除了 Instagram 外还有其他几个做的比较好的摄影/图片工具也是值得推荐的,如果能把它们跟 Instagram 在一起使用的话效果会更好。例如能够将照片自动调整为 Instagram 正方形比例的Squaready、滤镜组合更强大的 Camera+、具有怀旧相机镜头感的 Hipstamatic 等。

  7. 注意裁剪和边框

  在使用 Instagram 拍摄时,要时刻记住裁剪问题,尽量适配其 1×1 的画面比例。此外要合理选择 Instagram 的边框来增加相应的艺术感。

Instagram 完全新手指南

  怎样使拍摄的照片获得关注

  1. 创作高质量的照片

  2. 创作受欢迎的照片

  3. 善用标签推广

  Instagram 没有锐推,没有转发,所以要想使你的照片获得关注只能就是通过你的粉丝或通过添加 # Tag 归类来获得关注。关于话题归类,你可以定期搜寻一下最热门的 Instagram tag ,上传照片后立即把这些 tags 评论上去,这样就会有 Instagram 过来,如果 Like 数量短时间比较多(达到20个或以上)你就能登上热门榜了。那时候你的照片就面向所有的 Instagram 用户了。这些的前提是你的照片是高质量的。

  4. 关注其他用户

  如何更好的玩转 Instagram

  如果你能做到上面那几点就说明你在 Instagram 已经算基本入门了,要想更好的玩转 Instagram 请继续观看下面的高级进阶手册。

  2011年1月,Instagram 向第三方开发者开放了其应用程序接口(API),之后基于 Instagram API 的手机应用和网站就逐渐增多,到现在全球至少已经有 2500 个围绕着 Instagram 的第三方扩展程序,它们有着各式各样的辅助功能,学会善用它们可以更好的玩转 Instagram 。

  完全同步大法

  虽然 Instagram 本身就已经拥有很强的同步分享功能,包括国外的 Facebook、Twitter、Flickr、Tumblr、Posterous、Foursquare 和国内的新浪微博。但是它还有不少服务没有覆盖到。

  iFoto:将 Instagram 照片自动同步到新浪、人人、饭否和豆瓣。

  Instadrop:将 Instagram 照片自动备份Dropbox(之后可以利用 Picasa 再自动同步到 Google+)

  Instaprint:将 Instagram 照片同步打印  

  此外还可以将 Instagram 整合到 WordPressJekyll 和 Octopress

  备份自己照片/下载别人的分享照片

  有可以打包下载 Instagram 照片(全部下载到一个 zip 压缩包中)的 Instaport 、支持更多选项下载保存的 Copygr.am 、ZangZing 及 Mac 应用 InstaBackup、 iOS应用 Instake

  新式 Instagram 浏览形式

  1. 根据地理位置(LBS)显示

  InstabamCartagr.amInstaRaderInstacolor(Instagram和Color的合体) 都可以根据地理位置信息实时查看周边用户分享照片。

  2. 虚拟增强现实(AR)显示

  InstARgram 可以通过手机摄像头在现实图层上显示周边的 Instagram 的照片

  3. 汇聚显示

  Photopile:Instagram 照片墙  

  Instakitty :只汇聚猫图片

  InstaPuppyL:只汇聚狗图片

  4.网页显示分析

  Extragr.amInstagridStatigr.am

  5.桌面显示分析

  Mac客户端 CarouselInstadesk 以及 PC 客户端 Instagrille 。

  6. 其他

  Picafight:Instagram 照片分享PK  

  Calendagram:Instagram 照片日历  

  Instamory:Instagram 照片对对碰游戏  

  Clockstagram:将 Instagram 照片拼成时钟显示  

  Screenstagram:将 Instagram 图片墙设置为屏保  

  Printstagr:打印 Instagram 分享的照片并做成贴纸  

  InstaDM:此应用可以让 Instagram 用户之间相互之间发私信(Instagram 本身不提供私信功能)。

  可以看到 Instagram 的自身极简与 API 的开放使得它像 Twitter 有了更多的玩法,这就是开放的力量。反观国内,低质量的竞争环境造成的现状是各家群起围绕着不多的图片分享市场份额进行蚕食,这也是国内迄今为止还没有出现一个影响力能媲美 Instagram 应用的原因。

  来源:Afio投稿,原文链接

2012年4月15日星期日

程序员真的很懒

  可能除了哲学家以外,笔者认为程序员是最懒的一群人。他们的职业看起来又似乎有一定的劳动强度。

  想想看,生物学家要亲自做所有的实验…给数百只小白鼠注射药物不可能自动完成。医生必须给病人进行身体检查;教授每年都要教授同样的课程;建筑师从各个角度制定方案,并手工地将方案一笔一划绘制出来。

  让我们再来看看更为辛苦的一些职业,情况更糟。营销人员要不断重复地进行同样的产品宣传;理发师日复一日地做着同样的事情;收营员每天都以相同的方式对货物进行结算…工厂工人…

  你面前呈现出了一幅图片,世界上有很多这样的人,他们每一小时,每一天,每一年,有些甚至一辈子都在重复做着几乎相同的事情。 

  来看看程序员

  每当我们想连续两次做同样的事情时—我们会尝试想一个方法来自动完成此过程。每当你写的代码是完成同样的一件事时,你会开始寻找一个库;每当你启动一个类似的项目时,你会去寻找一个模板。

  程序员的生活就是致力于消除重复的工作。

程序员真的很懒

  将琐碎地任务从我们的工作流程中剔除,这能让每个人生活得更轻松。这里有一个经典的笑话,说一个程序员情愿用一周的时间来写一个拷贝脚本,也不愿意将相同的文件复制粘贴两次,尽管复制粘贴可能只需要两分钟。

  该死的,我们要遵循DRY(Don’t Repeat Yourself不要重复自己)的原则。这个原则的基本内容是宁愿创建一个令人费解的抽象类,也不要将不相同但非常相似的代码写两次。

  这当然会导致很多问题。

  一般的软件项目充满了在顶层抽象类上构建的抽象类,你慢慢地会不清楚这些顶层抽象类将如何工作。甚至你完全不知道其代码在做什么。”Dizzying but invisible depth“,涉及到这个问题时,你真的应该读读这篇短文。

  另一方面,懒惰本身已经证明了历史上许多科学和工程发展所带来的背后推动力。用有轮子的拖车运东西比人工搬运要轻松;用船在水中前行比游泳来得容易;甚至如果你他妈的想炸掉一座城市,你投掷一颗原子弹也比投掷几千个小炸弹来的容易。

  所以这也许并不是说程序员是懒惰的。也许真正懒惰地是工程师们。只是恰巧在这样一个历史时刻,程序员作为工程师中最鲜明的一类,总是将世界向更好更光明的未来推动。而其它大多数领域已经在某种程度上稳定下来,或者需要更长的时间去适应新的工具。

  这里有一个重要的问题要问:程序员天生就懒吗?聪明懒惰的人容易被编程工作吸引吗,或者这是一种社会效应?懒惰源于最好的编程实践?还是最好的编程实践源于懒惰呢?

   

  一个比较

  最近,我有机会将一个建筑专业学生的一天与一个计算机科学专业的学生(就像我自己)的一天进行比较。

  大多数的建筑系学生的生活充满了这样或那样劳动密集的任务,这些任务是她工作的一部分。在任何时候,她都有可能要对一些模型进行拼凑粘合,在AutoCAD中从50个不同的角度对同一个物体进行绘图,或者在其它3D建模软件中重复相同的事情…然后将这些图片导入到Photoshop中成为真正好看的图。

  这种事会接连不断的发生。我估计她花费在课程作业上的时间比她实际上课的时间多一倍还不止(事实上她说花了5倍还多)。更糟糕的是,更好的完成这些任务并不能真正加快完成任务的进程,这只是意味着你多知道了几个键盘快捷键,意味着下次画图时你可能会少犯几个错误。

  熟练和精通完全无法优化关键的部分。

  相比之下,当我不上课时,我通常都在做自己的项目。因为我可以,因为我有充足的时间。当有作业布置下来时,一般情况下,我都可以在几个小时内完成…即使是最关键最重要的项目,老师也很少给我们超过一周的时间来集中完成作业,最多两周。

  精通编码并不意味着你打字更快(与建筑专业中等同的能力不同)。它意味着想出的解决方案更容易实现,利用工具来达到事倍功半的效果,诸如此类。最终,通过互联网进行测试评判,而实现过程是最无关紧要的部分,因为每个人都会。如果你有一天的时间,你可以实现某些东西。如果你有更多的时间,你可以使这些东西实现得更漂亮,模块化更高,可重用性更强,等等。

  基本上你能够快速地实现眼前的任务,你工作中大部分时间都在致力于使你的任务完成得更加漂亮。但这对于你手头的任务来说其实并不重要,你这样做是因为你可以。

  甚至于当程序员对自己的优化工作都产生厌倦时,他们会立马转而去创建工具来完成优化工作。

  事情就这样周而复始地重复着。

  接下来的家伙会使用他创建的新工具,使实现过程变得更快,接着优化它直到他最终厌倦,然后创建了一个新的更好的工具。

   所以…是辛苦的工作?

  但回到我最初的观点,辛苦工作对程序员的生产效率存在多大的影响?对于那些每天辛苦工作13小时以上,以取得竞争优势的创业者来说,这又意味着什么?这是值得考虑的一种优势吗?

   

  辛苦的工作可能对程序员工作效率产生负面的影响。它掩盖了背后所做的优化工作“哦,我可以手动把它完成,这将只需要10分钟时间”(其实这需要20分钟)。下一次,一个相似的任务到来时,你可能需要再次手动把它完成,长此以往…

  最重要的是,辛勤地工作会使你变得很笨。许多研究表明,持续疲劳的状态会使你做出错误的决策,甚至过多的决策也会让你会出错误的决定(称为决策疲劳)。事情上,这可能是我们喜欢创建抽象类并使用它们的原因—让其它人做大多数的决策,这样我就可以只专注于关键的部分。

  但是,我仍然没弄懂,到底是懒惰的人更喜欢编程,还是编程使他们变得懒惰… 

  原文:Swizec Teller    编译:伯乐在线 – 肖翔

2012年4月13日星期五

开发一个iOS应用没有那么容易

  导读:这是来自新加坡的 iOS 开发者 Kent Nguyen 发表在1月底的一篇博文。这篇吐槽文在 iOS 开发圈子里流传甚广,从原文150多个评论就可见一斑,现翻译如下。

  让我们开门见山吧:做一个iPhone应用需要花多少钱?

  就是这个最常见的问题,我的很多朋友(大多是些西装革履的商务人士),还有我那些个对技术一知半解的客户们,他们都问过我这个的问题。通常,我会先给出一个大致的报价,这个报价并没有细致到需要签合同确认每一个功能点的地步。即便是这样,每当的我报价一出口,对方都毫无例外的给惊着了(当然不是因为便宜)。

  说实话,我没有狮子大开口。看看StackOverflow上这个著名的帖子吧,讨论的是开发Twitterific这样一款应用需要多少钱,后来讨论范围扩展到开发一个iOS应用的合理费用范围。虽然这个帖子是在2008年发布的,而帖子的最佳答案是由一名来自Twitteriffic的开发人员于2010年回答的,但是时至今日,帖子里面讨论的数字仍然是很靠谱的,而且我预计到2012年底依然有效。而我的报价和这个帖子里面的数字比起来,简直是小巫见大巫了。

  现在的趋势是,什么公司什么业务都想搞个iOS客户端,并且这种趋势在2012年看似依然火爆。所以我想起来写这篇博文,我想说一下开发一个iOS应用会碰到的各种细节问题和横生的变数,借此解释为什么iOS应用开发成本这么贵。如果你在考虑搞一个iOS应用,而你本身是搞业务而不是做技术的,如果你目前正在招标或者仅仅是想了解一下,那我这篇博会对你有帮助。当然,我说的东西并不局限于iOS应用开发,对Android、Windows Phone或者是Blackberry(如果RIM还能活的话)等移动应用平台基本上也是适用的。

开发一个iOS应用没有那么容易

  开发之前需要仔细考虑的

  别做拍脑瓜的决策,在开工之前你需要考虑的比你想象的要多。我通常会帮助或者指导客户把以下几个要素都过一遍:

  一:和客户谈他们的移动应用,最让我吃惊的是他们从来没有想过支撑一个iPhone应用运行,背后需要涉及到的方方面面。他们想象中的iPhone是独立存在于这个宇宙的,是如此的简单,以至于他们要我很快就给出一个项目预算报价,而不用讨论诸多细节。我问他们:“你们是否考虑过后台服务器的事情?你们的应用需要和后端服务器做数据通讯?” 什么,听不懂?好吧,我用地球人的语言再把这个问题讲 一遍:“你们的应用不是需要用户注册嘛,你们考虑过把用户的数据存放在哪里了吗?我们需要一个地方去保存这些以后会用到的数据。” 第一次碰到这样的客户时,哥简直就怒了。后来我发现这不是客户的错:我是搞编程的,CS架构对我来说就像吃饭睡觉一样是不假思索的东西,而我的客户尽是些高富帅,他们懂个毛CS架构!

  所以,如果你不大懂技术,那请仔细听我说:如果你想做的移动应用需要用户注册和登录,或者你想随时控制移动应用的一些输出,甚至是你仅仅是需要一个用户反馈意见调查表这么简单的功能,那么,你得搞一台后端服务器。

  二:好了,现在你知道你需要一台后端服务器。同时你还需要想办法让你的iOS应用和你的服务器能够对话,就是相互间接收数据什么的。不,这个问题不是简答靠什么标准的即插即用的东东就能解决的,不是你们想象的那样!所有的东西都需要定制化开发,这就好比发明一门语言:你希望你的服务器和你的应用之间能够通过一种语言沟通,但是你不希望其他人听得懂这门语言。

  用行话说这就是制定服务器端API接口,或简称API。这些API应该在开发iPhone客户端之前就到位了。为什么?因为你必须先规定好一门语言的单词和语法,然后才能用这门语言说话吧!?好了,这就带出了第三点—如何开发这些API。

  三:API的成功定制是项目成功的一半(反之亦然),所以千万不要掉以轻心。你要考虑你的业务数据模型、业务流程、调用业务需要提供的参数、特定事件发生时数据间该如何互动等等。简单来说,我们要做的就是开发一个网站,上门跑着你的业务流程,只不过这个网站的所有运行结果都不是通过网页形式展现出来,而是呈现在一行行的文本和数字中。举个例子:一个登录成功的反馈页面仅仅包含YES一个单词。

  iPhone应用需要访问这些预先定义好的接口,并且按预定义格式提供必要的输入(比如用户名和密码),然后要对服务器端的反馈(YES或者NO)做出解析处理。所以,没有什么移动应用能够自动的含有用户注册和登录功能。

  服务器端开发需要考虑的问题太多了:选择服务器,选择用什么语言开发,主机放在哪里才能增加访问速度,等等,这里我就不展开了。如果这一切对你来说很陌生,那么你最好去问问团队里的技术负责人,或者干脆让开发人员做决策。

  四: 所以,关于服务器端API,你或者让自己的技术团队把它开发好,再将完善的API文档交给iPhone应用开发人员;或者你支付iPhone应用开发人员额外的报酬来搞定这些。你找的iPhone应用开发人员可能会服务器端开发也可能不会。如果他会的话,我建议最好让他也同时负责服务器端开发,因为他最清楚iPhone应用中需要哪些服务器端API。

  如果你的服务器端API已经存在了,那么除了向iPhone应用开发人员提供相关文档之外,你还要考虑让他能够便捷的同服务器开发团队沟通,因为大多数情况下,iPhone应用需要在已有API基础上增加一些新的接口。

  现在我们来看看iPhone应用开发本身

  扯了大半天,我们终于开始谈iPhone应用开发本身了。一般来说,iOS平台上做所有事情都不能随心所欲。你最好在开发人员写代码之前把所有的需求都确认好好。这和开发网站不一样,按照实现签订的合同开发iOS应用,开发过程中对需求变更的容纳度可能很低:

  用户界面:无论你打算采用iOS标准界面还是自定义元素,在开发开始前一定要确认清楚,因为应用的程序架构是根据界面和用户使用流程来设计的。一个很好的例子就是在界面底部使用了iOS标准的标签栏(Tab Bar),此后如果你想让标签栏里面的图标变成彩色的,这个代码改动量可没你想象的那么小!

  代码之间的耦合:如果是开发网站,你可以随意的添加一个页面或者一处链接。做iOS应用就没有那么简单了,很多东西一开始都要设计好,后期的一处改动会牵连很多东西,具体原因是你无法理解的。iOS应用的代码写好之后,再改动行不行?行!但必须小心。 这就像设计电路板一样, 如果你不小心把那根线搭错了,整块电路板就会不工作。有人说架构优良的程序可以有很高的延展性,那纯属纸上谈兵。在About屏幕上添加一个电子邮件按钮可能只需要几行代码的工作量,而添加一个转发到新浪微薄的按钮(译者注:原文是添加一个Facebook Like)就完全不是那么简单的事儿了! 

  让一个iPhone应用同时也支持iPad:如果要评选最坑爹“需求变更”,那么这个绝对是当之无愧的。理由很简单:支持iPad根本不是TMD什么附加功能!iPad应用基本上都比iPhone应用来得要复杂,界面设计和用户体验也大不一样。我问你,制造一辆电动自行车,然后把它改装成一部烧汽油的摩托车,这能是一回事儿吗!?电动自行车跟摩托车看起来是很像,但是制造它们完全是两码事。

  拿广受欢迎的Facebook官方应用来说,它的iPhone和iPad版本看似相似,实际用户操作流程完全不同。不仅仅是界面上的不同会带来额外的工作,对后台服务器API的需求也可能不一样。拿我熟悉的一个应用Denso来说(我熟悉它因为这是我开发的),它的iPad版本比iPhone多了几个功能,这些都需要额外的服务器端API来支持。记住,iPhone和iPad应用的用户体验需求是完全不一样的。 

  准备好开始了吗?

  希望此文能够帮助你和你的团队了解移动应用开发幕后的方方面面。除非你们要做一个像计算器那么简单的单机应用,否则你们很难用极低的成本搞定。综上所述,如果你觉得外包成本太高,那你只好招人自己开发。

  当然,如果你决定了要外包移动应用开发,那么我还要提醒一点:公司政治。如果你是在一家大公司或者有着严格制度的机构里面干活,那么帮助合同开发者搞定那些个规章制度上的繁文缛节,对你来说是非常重要的一项工作,必要的时候甚至可以做一些政策上的变通。 我同几个大型企业客户接触过,当我要求看他们的服务器端数据接口的时候,他们流露出很不安的表情。我想这或许是因为他们受制于公司规定而不能透露信息,这无可厚非;或者他们还没有想好这种情况下该如何操作;或者他们的品牌制度蛋疼到需要在移动应用的每个屏幕上都摆着公司logo!最终我没有和这样的企业客户合作,因为我无法想象如果有一天我需要增加一些服务器端API接口的话,和他们的规章和流程折腾,那将会是多么悲剧的事情。

  PS:开发移动应用很耗费时间,你最好有耐心。   

  英文原文:Kent Nguyen   编译:伯乐在线 – 陈远

2012年4月12日星期四

中国出现大范围网络故障

  今天早上11点左右,大量中国网络用户反馈出现断网问题,所有的国外网站均无法访问,而国内网站则访问正常。断网涉及到全国大量地区,影响范围十分广泛。

  根据我的实际测试,几乎所有的境外网站均无法从浏览器访问,包括Yahoo,Microsoft、Alexa、Bing、MSN Hotmail等等,而境内网站访问正常。除了HTTP无法访问之外,HTTPS、FTP和SSH等其他协议也无法访问,显示的现象是境外网站全部中断。

  据相关媒体报道,2012年4月12日10:40分左右,中国电信骨干网发生重大问题,导致香港、日本、美国、韩国、荷兰、澳大利亚、新加波都发生访问网站局部无法访问的情况。检测中,发现了谷歌香港地址在全国访问内很多地区都无法访问。此次故障,是由于中国骨干线路故障引起。

中国出现大范围网络故障

  截止到中午时分,部分地区的网络已经逐步恢复正常。