IEEE Spectrum 编程语言最新排行:大数据是赢家

一年一度的IEEE Spectrum编程语言排行盛宴又来了,来看看今年7月26日发布的前十名榜单。这个排行榜已经进行了三年。IEEE Spectrum的排序是来自10个重要数据源的综合,例如 IEEE Xplore, GitHub, CareerBuilder 等等,他们根据数据源对48种语言给出不同角度的排列。调整不同的权重,可以得到不同的排序结果。用户甚至可以根据自己的情况,调整权重,得到相应的排序 结果。 感兴趣的朋友可以点击这个链接进入网站查看结果:Interactive: The Top Programming Languages 2016。 我们来对比一下去年和今年的前十榜单(左边2016年,右边2015年),看看这一年的趋势。 可 以发现,C取代Java成为第一名,Python和C++换了位置,C和R换了位置,PHP和JavaScript保持原来的位置不动。另外,需要重点提 出的是,2016年第十名出现了新的角色:Go,Go原来在去年榜中排第13位,而去年第10名的Matlab在今年榜中位居第14名。 总体而言,仅就前10名来看,上升的语言有:C、Python、R和Go。 纵观整个48种语言此起彼伏的发展势头,参与排行榜制作的Nicholas Diakopoulos撰文表示,与大数据相关的语言普遍存在上升趋势,比如Go、Julia、R、Scala甚至是Python。 榜 单前十名的竞争是最为激烈的。谷歌的Go前年第19名,去年第13名,今年更是挤进前10,充分说明了其日益增长的影响力。Diakopoulos分析 说,Go的快速上升跟Github上的使用率上升有关。据统计,2016年Github上以Go为主要语言的的原始仓库数量是2014年的四倍,另外在 Reddit上人们对Go的讨论也较多,如今有关Go的帖子比2014年翻了三倍。 专 门用于数据统计分析的R语言排名一路飙升,从14年的第13名,到15年的第6名,再到今年的第5名。但是R语言最重要的一点,是它在学术研究论文中被提 及的次数显著上升。IEEE Xplore是收录了数百万的学术论文、行业标准和专著的权威数据库,这个排行榜也给IEEE Xplore的数据源以较大权重。数据显示,2015年IEEE Xplore中仅有39篇论文讨论R语言,今年相关论文数量达到了244篇。 而Scala从前年第18名升至今年15名,Julia 从去年40名跃升至今年的33名。 在 招聘市场的权重里,虽然Java 和Python一直在人才市场中居于霸主地位,但Diakopoulos表示雇主们对于R和Scala的兴趣明显在上升。2014年招聘网站 CareerBuilder和Dice上所列的R和Scala相关工作只有136个,但到2016年这一数量翻了四倍,达到631个。 榜单一定程度上反映了学术和市场趋势,读者可以根据自己的实际情况来参考,来规划自己的学术和职业发展方向。 稿源:雷锋网 from:http://www.oschina.net/news/75640/ieee-spectrum-latest-rank

龙生   29 Jul 2016
View Details

阿里巴巴分布式数据库同步系统 otter

otter 基于数据库增量日志解析,准实时同步到本机房或异地机房的mysql/oracle数据库. 一个分布式数据库同步系统。 工作原理: 原理描述: 1. 基于Canal开源产品,获取数据库增量日志数据。 什么是Canal, 请点击 2. 典型管理系统架构,manager(web管理)+node(工作节点) a. manager运行时推送同步配置到node节点 b. node节点将同步状态反馈到manager上 3. 基于zookeeper,解决分布式状态调度的,允许多node节点之间协同工作.   osc地址:http://www.oschina.net/p/otter

龙生   29 Jul 2016
View Details

PHP 图像处理库 Grafika

Grafika 是一个 PHP 的图像处理库。可用于改变图像大小、剪切、比较,以及添加水印等操作。同时可以创建一些文本图片、几何图形并应用一些过滤器。基于 Imagick 和 GD 构建。 特征 智能裁剪 图像比较 感知哈希 高级图像处理过滤器 贝塞尔曲线 示例代码: ? 1 2 3 4 5 6 7 useGrafika\Grafika; $editor= Grafika::createEditor(); $editor->open( "path/to/jpeg/image.jpg"); $editor->resizeExact( 200, 200 ); $editor->save( "path/to/edited.jpg", null, 90 ); osc地址:http://www.oschina.net/p/grafika

龙生   29 Jul 2016
View Details

Incorrect string value: '\xF0\x90\x8D\x83…' for column… Emoji表情字符过滤的Java实现

Emoji表情字符现在在APP已经广泛支持了。但是Mysql的UTF8编码对Emoji字符的支持却不是那么好。所以我们经常会遇到这样的异常: Incorrect string value: '\xF0\x90\x8D\x83…' for column 原因是Mysql里UTF8编码最多只能支持3个字节,而Emoji表情字符使用的UTF8编码,很多都是4个字节,有些甚至是6个字节。 解决的方案有两种: 1.使用utf8mb4的mysql编码来容纳这些字符。 2.过滤掉这些特殊的表情字符。 关于第一种解决方法,请参考:http://segmentfault.com/a/1190000000616820 和 http://info.michael-simons.eu/2013/01/21/java-mysql-and-multi-byte-utf-8-support/ 有大量细节需要注意,例如:mysql版本,mysql的配置,mysql connector的版本等等。。 因为我们使用的云数据库,所以我选择了过滤这些特殊字符。其实过滤的方式很简单,直接使用正则表达式匹配编码范围,然后替换就行了。 下面是我的代码。 更多可以参考:http://stackoverflow.com/questions/27820971/why-a-surrogate-java-regexp-finds-hypen-minus import org.apache.commons.lang3.StringUtils; public class EmojiFilterUtils { /**      * 将emoji表情替换成*      *       * @param source      * @return 过滤后的字符串      */ public static String filterEmoji(String source) { if(StringUtils.isNotBlank(source)){ return source.replaceAll("[\\ud800\\udc00-\\udbff\\udfff\\ud800-\\udfff]", "*");         }else{ return source;         }     } public static void main(String[] arg ){ try{             String text = "This is a smiley \uD83C\uDFA6 face\uD860\uDD5D \uD860\uDE07 \uD860\uDEE2 \uD863\uDCCA \uD863\uDCCD \uD863\uDCD2 \uD867\uDD98 ";             System.out.println(text);             System.out.println(text.length());             System.out.println(text.replaceAll("[\\ud83c\\udc00-\\ud83c\\udfff]|[\\ud83d\\udc00-\\ud83d\\udfff]|[\\u2600-\\u27ff]", "*"));             System.out.println(filterEmoji(text));         }catch (Exception ex){             ex.printStackTrace();         }     } } from:http://blog.csdn.net/shootyou/article/details/44852639

龙生   27 Jul 2016
View Details

&nbsp|&quot|&amp|&lt|&gt等html字符转义

No. 文字表記 10進表記 16進表記 文字 Comment 001 &quot; &#34; &#x22; """ quotation mark = APL quote 002 &amp; &#38; &#x26; "&" ampersand 003 &lt; &#60; &#x3C; "<" less-than sign 004 &gt; &#62; &#x3E; ">" greater-than sign 005 &nbsp; &#160; &#xA0; " " no-break space = non-breaking space   iSO 8859-1 characters char glyph HTML tag &nbsp; ¡ &iexcl; ¢ &cent; £ &pound; ¤ &curren; ¥ &yen; ¦ &brvbar; § &sect; ¨ &uml; © &copy; ª &ordf; « &laquo; ¬ &not; &shy; ® &reg; ¯ &macr; ° &deg; ± &plusmn; […]

龙生   26 Jul 2016
View Details

用node.js进行微信公众平台的开发

基本原理 用nodejs怎样来实现对微信公众平台的开发呢? 别的就不多说了,先来简单介绍微信公众平台的基本原理。 微信服务器就相当于一个转发服务器,终端(手机、Pad等)发起请求至微信服务器,微信服务器,然后将请求转发给自定义服务(这里就是我们的具体实现)。服务处理完毕,然后转发给微信服务器,微信服务器再将具体响应回复到终端;通信协议为:HTTP;数据格式为:XML。   具体的流程如下图所示: 其实,我们需要做的事情,就是对HTTP请求,做出响应。具体的请求内容,我们按照特定的XML格式去解析,处理完毕后,也要按照特定的XML格式返回。 平台注册 要想完成对微信公众平台的开发,我们需要注册一个微信公众平台帐号。注册步骤如下:   打开微信公共平台的官网,https://mp.weixin.qq.com/,点击“立即注册”。 然后根据提示,填写基本信息,邮箱激活,选择类型,信息登记,公众号信息,完成注册。 在注册完成以后,我们要对公众号进行一些基本的设置。登录公众号,找到【公众号设置】,然后设置头像以及其它信息。 nodejs环境搭建 我们需要在公网上找一台服务器,以便可以启动我们的nodejs的环境,启动环境后通过设置访问地址,我们就可以接收微信服务器发送的消息了,并且我们也可以向微信服务器发送消息了。 在公网的服务器中安装完成nodejs以后,我们还需要安装一些nodejs所用到的模块,如:express,node-xml,jssha等模块。可以通过npm命令进行安装。 我们通过nodejs来实现向微信服务器消息的发送与接收,以及与微信服务器的签名认证。 在我们右面的编辑环境中已经为同学们安装了nodejs环境。我们在接下来内容中就为同学们来实现微信服务器的签名认证。 创建express框架 我们在前面的课程中已经安装了express模块,并且在我们右面的环境中已经创建了一个名为app.js的文件。现在我们就在这个文件中完成express框架。如下代码:

然后再添加一个名为test.html的文件。写入以下内容

我们还要添加一个名为index.js的文件,来实现我们的路由。点击编辑环境中的添加文件按钮,添加文件,然后我们写入以下代码,其中GET请求用来验证配置的URL合法性,POST请求用来处理微信消息。

这样我们需要的express框架就完成了,当然我们还可以添加public公共文件夹以及我们要用到的中间件。保存文件,点击【提交运行】,然后点击【访问测试】,去试试吧。记下访问测试的地址,我们将在下一节中会用到该地址。 微信服务器配置 我们登录微信公众平台,在开发者模式下面找到基本配置,然后修改服务器配置。如图所示: 首先URL要填写公网上我们安装nodejs接收与发送数据的路径。我们可以填写上节中【访问测试】的地址,然后加上对应的路由就可以了。

上面代码是我的访问测试的地址,然后加上前面课程中的路由,同学们要根据自己的访问测试地址与路由来填写。 Token要与我们自定义服务器端的token一致。填写完成以后,就可以点击提交了,在提交以前,我们启动app.js(点击【提交运行】)。这样根据我们的路由匹配就可以验证签名是否有效了。 当配置完成以后,一定要启用配置。 网址接入 公众平台用户提交信息后,微信服务器将发送GET请求到填写的URL上,并且带上四个参数:

开发者通过检验signature对请求进行校验(下面有校验方式)。若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,否则接入失败。 signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。 加密/校验流程: 将token、timestamp、nonce三个参数进行字典序排序; 将三个参数字符串拼接成一个字符串进行sha1加密; 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信。 参数排序 首先我们确认请求是来自微信服务器的get请求,那么就可以在index.js文件中进行添加代码了。然后在app.get('/interface',function(req,res){});的function中进行添加。 先来获取各个参数的值,如下代码:

我们在这里对token进行设置,让其与微信服务器中设置的token一致。 然后对其中的token、timestamp、nonce进行排序,如下代码:

这样我们就完成了排序。 参数加密 在上节中我们已经对参数进行了排序,然后我们在这一节中要将参数组成一个字符串,进行SH-1加密。在加密以前要用到jssha模块,在我们的文件中要引用该模块。

在上一节课中我们已经对参数排序完成,并存放在数组中,我们可以通过join方法来生成一个字符串,如下代码:

最后对该数据进行加密,如下代码:

好了这样就生成了我们需要的签名字符串scyptoString。 签名对比 我们已经得到了我们想要的签名字符串scyptoString,然后我们就可以与来自微信服务器的签名进行对比了,对比通过,则我们就可以接收与发送消息了。

本参考了如下网站,更多内容也请访问: http://www.hubwiz.com/course/569dc7fdacf9a45a69b051cd/ from:http://my.oschina.net/u/2275217/blog/630770

龙生   25 Jul 2016
View Details

作为一个新手程序员该如何成长?

“哦,天那。相比其他开发者,我又笨又没准备。老板会知道我是多么无能,我要被炒鱿鱼了。” 这种想法,在我们作为一名软件开发人员刚进入工作领域的时候,非常常见。我也不例外。这种想法会让人觉得自己不如其他的开发者,感觉自己是滥竽充数的,感觉自己像一个全面的傻瓜,当涉及到写代码的时候。 在短短的几个月后,我第一次获得一份真正编程工作的兴奋——改善和维护一个基于 web 的研究平台——终于变成了绝对的恐惧,那些消极负面的想法在我的脑海里不断地涌入。即使在我去了更大节奏更快的组织机构,以及之后终于开创了我自己的企业,这些想法也在不断地蚕食我。 我总是觉得自己写的每一行代码都那么笨重,低效,如果展示给任何其他有才干的开发者看绝对会被批判得体无完肤。我感觉自己很笨,他们发现这一点不过是时间问题。 听起来很熟悉?如果你有我这种想法,有绝大多数软件开发者都有的这种想法,很大的可能是会惶惶而不可终日。 下面我要介绍一些我发现的有助于,你作为一个初出茅庐的开发人员,提升你自己和你的职业生涯前景的关键策略,并在推动职业发展时保持一种健康的心态。 作为一个初出茅庐的开发人员提升自己和职业生涯前景 无论你是正在找你的第一份工作,还是盯上了潜在的晋升,在一定程度上你都需要与其他的开发者竞争。为了确保你能从中脱颖而出,这里有一些关键的步骤可以帮助你迈向成功。 1. 找一种你喜欢用到工作中的语言。 要成为一个更优秀的程序员,需要定时经常性地练习编程并用不同的语言和技术扩宽你的经验,但是语言是如此之多,很多时候你不知道从哪里开始,也不知道该选择什么语言才最适合你要解决的问题风格。 如果你还没有想好具体的语言,并且想要先试验下的话,我会建议你搜索求职网站,例如 Stack Overflow Careers、Indeed 和 Monster,看看是什么语言最抢手。如果你想或者目前的职位要求的话,你可以牢牢掌握一些特定的语言,然后开始研究和试验。 The TIOBE Index 可用来查看哪些语言更受欢迎 当我开始我的第一份工作的时候——一个基于 web 研究平台的开发者——我进入了学习的阵营:虽然我有足够的技能在面试时通过编程测试,但是这份工作要求我加强 PHP、JavaScript 和 SQL 技能。于是下班后以及周末,我都会磨练自己在那三方面的技能,以便于能够在工作中表现良好,能够拥有更多基于 web 开发的机会,而这些对于我现在能够拥有和打理我自己的 web 开发公司有很大的贡献。 不管你恰巧遇到或选择了什么语言,关键是经常练习。尝试不同的语言,通过一些小例子编码,然后用它们构建小的项目。一旦你找到了能与你产生共鸣的一种或一系列语言以及如何处理问题的方法,坚持下去,并经常性地定期实践练习。 2. 发现问题或任何让你觉得生气的事情。 正如随着我职业生涯的向前迈进,我进入了一家大的临终护理组织,担任 web 开发者。虽然我的工作主要是改善和维护我们的在线计费和 CRM 系统,但是许多医务人员经常抱怨:病人总是报告说系统运行得异常缓慢。这让我很生气,它让员工更生气——因为不得不去修复。 临终护理几乎纯粹运行在微软技术上,并且数据库也不例外——Microsoft SQL Server(MSSQL)。虽然它不是我感觉最舒服的查询语言,但是我依然在家里研究、阅读、练习构建小型的 MSSQL 项目。通过我的努力,我渐渐能够建立一些示例报告来向数据库管理员展示报告可以如何改进。随着时间的推移,我帮助实现的优化促使我得到了晋升,通过修复那 个问题学到的技能帮助我获得了一份数据库管理的工作。 和一种语言一起成长和点燃学习激情的最好办法是,使用你学到的知识来帮助解决令你感到苦恼的问题。不仅要学习语言本身,也要学习语言可以如何应用到实际生活中的问题。 3. 公开发布到 Github 或其他公共代码平台上。 即使你不认为有人会使用它,喜欢它,或者甚至看上一眼,还是要发布你的代码,一旦你觉得它达到生产标准的话。你的项目可能不会改变世界,但它可以让你脱颖而出,让你可以坦然对待别人查看和批评你的工作。此外,它可以让你的简历增色不少。 4. 写博客,展示你正在学习的东西,怎么学习以及为什么。 向世界(以及将来的雇主)展示你正在学习,以及你有主动的学习意愿,就可以让你领先于 95% 以上的同行业开发人员。你也可以练习你的写作技巧,这个过程也能让你学到很多关于自我方面的东西——你如何处理问题,如何分解和解决。你还需要整理一下你 常用的思考方式,如何学习和成长,以及如何取得进步。 5. 在软件开发社区中表现活跃。 解决问题,看别人怎么解决问题,说出自己的声音和意见。我通过 Stack Overflow 和编程社区做到这些。这还不是最宽容的文化,因为你将会遇到一些非常眼尖的开发者咆哮你怎么在伪代码中忘记了后面那个括号,但这能让你与其他的开发者交 流,使得具备接受诚实(有时是残酷)批评的经验,并知道其他人可能会如何处理问题,从而打开思考问题的新思路。 6. 学会如何简明扼要地解释给技术和非技术人员听。 我总是听到大家说沟通是实现职业成功时,要掌握的最难和最重要的事情之一。在早期,我认为这是无稽之谈——只是跟人讲电话,会议期间交谈,发送电子 邮件能有多难?任何有着专业沟通经验的人都会对这种看法嗤之以鼻,我现在也会。你会惊讶地发现误解的快速突然出现,工作流程是如此之复杂,以及项目进程的 拖延。 要真正掌握高效的沟通,你需要对实际工作中你需要工作于什么有一个基本的了解(我强烈推荐 Charles Petzold 的《Code》)并彼此交互。写博客,并与编程社区互动有助于有效地提高沟通能力。 如果你能掌握简练,实事求是,通俗易懂(如果需要的话)的沟通方式,并将复杂的问题和解决方案分解为可理解和很小的块,那么你就能在软件开发领域立于不败之地。你会发现项目经理,其他的程序员,以及执行主管等都会争夺你去他们的团队。 保持健康的心态 专业软件开发人员的成长之路没有一条不充满着荆棘和困难,所以你很容易掉入不健康的自我思考和职业选择的陷阱。通过了解每个人都会有的专业的不安全感,可以在你对自己失去信心的时候更好的激励自己。 1. 要知道,每个人都感觉自己像骗子。 你在你的职业和生活中遇到的每个人都在与骗子综合征做斗争。我们每个人都觉得自己正处在被发现自己是骗子,然后被公开批评无能的边缘。了解这一点能在精神领域帮助你觉得公平,而且还能帮助你认识到,每一个做过值得夸耀的事情的人曾几何时的想法就和你现在一样。 这种心态可以帮助你坚持下来!如果再加上具有建设性的渠道方法——学习新的语言,开发方法,以及解决问题的方法——你的整个职业生涯都将有极大的提高,并且能够快速让你成为技艺大师。 2. 知道自己会陷入困境。 毫无疑问,就是在编程中我终于接受了我是人这个事实——我也有犯迷糊,笨手笨脚,错误频出的时候。没错,你也是如此。你会错过最后期限,太多次点击“全部回复”,滑动捕捉一些严重的错误,或者在应用程序架构中轻易放过一个令人难以置信的 bug。 要想保持快乐和健康,那就得让自己去分析错误,然后从中学习,还要应用所学的东西以便于下次完成得更好。 […]

龙生   25 Jul 2016
View Details

避免成为优秀程序员

我曾经和我认为优秀的程序员一起工作,但是他们是真正优秀的程序员吗?是什么让他们如此优秀?(或者,他们只是普通的程序员?) 最近读到Mark Pearl博客里一篇名为《Programming, a Subset of Writing》的文章,其中的观点让我十分推崇,尤其是下面这段: 优秀程序员和普通程序员最大的区别在于,优秀的程序员会使用整洁、易于理解的方式进行编程,任何不必要的复杂代码均不会出现。和我工作过的那些真正优秀的程序员总是尊学这样的编程步骤:写代码、重构、进一步重构。 就像日常生活技能一样,提高自己的办法唯有不断练习, 但是除了重构和进一步重构之外,你还能做些什么? 还有一种提升自我的方法,很简单,只需要对编程的其他重要要素保持开放的心态就好了。如单元测试、异常处理甚至交流技巧都非常重要。如果忽略或轻视这些因素也许会导致你过度自信,甚至成为一个自负的人。 我认为鼓吹“忽略实际情况,循规蹈矩地遵守软件开发实践就能成为一个优秀程序员”的说法非常荒谬。有时我会认为他们只是些 “自负的程序员”,虽然,老实说,他们中的一些人还是很优秀的。 我非常赞同我以前的同事 Russell Politzky 曾经说过的一句话: 那些自负的程序员往往是教条、狭隘和不切实际的。在我们的业务中,这会导致他们做出不合适的和有缺陷的设计。 如下是一些程序员经常挂在嘴边的话: 所有的测试必须是单元测试 要不惜代价达到100%的代码测试覆盖率 所有使用mocks/stubs的测试,必须基于mock库进行实现 不管业务目标是什么,所有的应用程序都必须建立在DDD模式之上 所有使用数据库的程序必须使用ORM来操作数据 不使用ORM是非常糟糕的,而且难于维护 代码注释不应该存在于代码中,因为存在注释表明代码不够清楚明了,不能直接表达其含义,应该总是使用代码来表达程序的含义而不是注释 任何一个你产出的文档,比如说设计文档,总是会过时的,用处很少 你唯一需要的文档就是代码 你唯一需要的模型也是代码 自顶向下的设计是不会成功的,这种尝试总会失败,拥护这种设计的人只是没找着门路,最终他们还是会折服于“演进式设计”所带来的优越性,没错,就是TDD 除了面向对象,你用别的编程范式根本写不出好的软件,因为只有OO能降低复杂度 你认识这类程序员吗?如果是,你认为他们的水平如何?经验表明这类极端的思维,既不是完全正确也不是完全错误,只是不合逻辑。 更加切实的考虑和合理的推理才能帮助你成为一名优秀的程序员。磨练技艺,增强技能固然很好,但是当我们在做这些事情的时候,应该从实际情况出发,认真考虑实施其所需的范围、成本、环境等各种因素。将这些合理的因素纳入考虑范畴需要成熟的思考,才能成为优秀的程序员。 当然,也需要大量的练习。 稿源:ThoughtWorks洞见   from:http://www.oschina.net/news/75493/avoid-become-good-programmer

龙生   25 Jul 2016
View Details

《精灵宝可梦:Go》带来的软件质量启示

如果您的应用拥有2100万活跃用户,且随时保持在线,那么需要处理的质量难题一定不计其数。为了避免出现严重问题,我们将共同探讨如何抢先一步搞定体验保障工作。 《精灵宝可梦:Go》终于上线。这款手游的人气有多高?很简单,其已经成为全美有史以来最流行的移动游戏,目前拥有2100万活跃用户。 但兴奋的玩家们在游戏时却发现了大量问题。我个人就发现自己无法使用谷歌凭证完成登录,因为其“无法接入该服务器”。后来虽然登录完成,但却由于“GPS连接丢失”而无法捉住身边的妙蛙种子。网上报告该游戏问题的帖子层出不穷,同时也给出了一些潜在的解决方案。Google Play与iTunes出现了大量用于“修复”该游戏问题并保持玩家顺利游玩的相关应用。 我们不禁要问:为什么会有这么多故障? 难道是游戏开发者们没有为汹涌的玩家做好充分准备?或者,他们没有测试全部可能用例——包括地理位置、设备、操作系统、硬件等等? 在上线后的头一周,几乎每天都会出现《精灵宝可梦:Go》服务器崩溃以及影响人们使用体验的报告。值得庆幸的是,这些都没有影响到这款游戏的人气。目前其开发商Niantic公司已经掌握并修复了多种问题,然而随着此游戏在更多国家的上线,恐怕他们还要面临规模更大、强度更为夸张的冲击。 凭借着对游戏的热爱,下面我们一起来看应当从中吸取的四项软件质量保障教训: 教训一:你的实际水平由短板决定——测试并监控API 《精灵宝可梦:Go》的核心在于API。无论是登录应用、识别位置、查看增强现实效果、收集宝可梦小怪物、对战还是开着游戏街,这一切都依靠着API实现数据与请求传递。其中部分API由Niantic公司独立开发,也有一些属于流行的公共API——例如谷歌地理API。 然而很多玩家发现游戏无法检测到GPS位置,或者有时会给出错误位置。 相关问题包括: •    API端点可用性 •    响应请求的具体速度 •    载荷的功能正确性 由于整款游戏基于地理位置的正确性与严谨性而建立,因此即使是小小的误差也会影响到用户体验。游戏厂商不仅需要在部署之前测试不同API功能,还应当立足不同场景监控API功能的正确性——包括地理位置、设备、操作系统与服务供应商对效果的影响。 教训二:验证用户生成的数据 事实上,《精灵宝可梦:Go》并不是Niantic公司的首款增强现实游戏。早在2011年,他们就曾发布了Ingress的beta版本,其允许用户在世界各地的标志性建筑及历史地点收集“门户位置”。正是凭借着这部分数据,该公司才能够建立起《精灵宝可梦:Go》中的竞技场与宠物商店数据库。 虽然群众提供的数据非常庞大,但仍然有可能带来错误的结果。另外,其指向的某些偏僻位置甚至有可能给玩家带来人身安全风险。谁该对此进行控制?当然是游戏厂商! 教训三:测试并监控前端 在《精灵宝可梦:Go》这款游戏中,需要由API与GUI相配合以共同完成信息收集,这也意味着对二者进行测试变得非常重要。 前端图形用户界面(简称GUI)不仅需要API响应,同时亦需要配合设备硬件/传感器数据。举例来说,玩家所处地点由基于位置的传感器GPS提供,而其反过来又会影响到游戏GUI的表现。这意味着测试人员需要利用集成化GUI与API测试工具进行问题分析。 与此同时,要建立起规模化且坚实的自动化测试战略,我们还需要关注GUI与API层的行为优化。我们以此为基础建立更多单元测试,而后是API测试,最后完成数量进一步减少的UI测试。 由于游戏厂商有着极为庞大的全球化推广野心,因此为了在不同区域提供一致的使用体验,前端错误或可用性问题必须得到高度重视。 教训四:准备好应对一切潜在用户场景 与任何一款应用一样,《精灵宝可梦:Go》所面对的用户也是形形色色。他们来自不同的国家、身处不同地点、利用不同设备访问应用,但却希望获得同样的性能表现。 事实上根据我的个人经验,这款游戏在Android设备上非常耗电,我甚至不得不在尝试了几天之后选择将其删除。 我认为游戏开发商在增强现实游戏领域才刚刚起步,这类应用能够带来新的发展方向与潜在可能性,但同时也面临着种种前所未有的挑战。第一次尝试做到这样已经足够令人赞叹,也希望他们能够在未来继续积累经验,真正在软件质量层面带来让每个人满意的成果。 【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】 原文标题:4 Software Quality Lessons From Pokemon Go’s Wild First Week 原文链接:https://dzone.com/articles/4-software-quality-lessons-from-pokemon-gos-wild-f 核子可乐译 from:http://developer.51cto.com/art/201607/514878.htm

龙生   22 Jul 2016
View Details
1 260 261 262 432