Monthly Archives: April 2013

2013 QCon Beijing 游记3

很快就到第三天了,上午也是相对比较固定的在Node.js相关的会场呆着,中途去听了一场新浪云平台的分享,不过感觉还不够深入,倒是Node.js方面,新浪的另外一位讲师分享了使用Node.js开发的MySQL的数据库中间件,通过这个中间件来管理MySQL集群,这个和新浪云那个一结合,大概如何做一个开放式的MySQL集群服务就有大致的思路了。

网易游戏的谢骋超分享的Node.js的polemo网游Server端框架非常有意思,Demo也比较完整,做移动应用&游戏的同学有福了。网易在国内开源社区方面也算是树立了一个标杆。想了解的可以迅速移步:http://pomelo.netease.com/index.html

下午四场都是集中式的专题演讲了,其中NASA的工程师Khawaja Shams明显的就是Amazon的“形象代言人”了,NASA去年的火星探测器后端的数据处理全部Hosting在Amazon的AWS上,非常的Cool~

Oracle的Java那个专题基本上很无趣,原因是Java 8的这些新特性已经讲的非常多了,连我这个不做Java的都听的耳朵快磨出老茧了,更别说那些专职Java的工程师们了。这个演讲直接导致我旁边的同学鼾声大起…

晚上本来大会行程已经Over,不过腾讯云单独加了个专场,就去听了听。腾讯真是一个非常低调务实的公司。我比较看好腾讯云在游戏行业的拓展。目前腾讯云官方的主要的几个Case也都是游戏方面的。

三天很快结束,真是意犹未尽~期待明年仍然有机会去参加新的QCon大会~

2013 QCon Beijing 游记2

QCon第二天位置比较固定了,上午一直听的都是UI和产品设计相关的专场,四场分享一个比一个精彩。百度的香超分享了很多移动App UI设计方面的经验;豆瓣的屈雪则分享了豆瓣FM从零开始,如何定义产品,如何分析产品需求,如何设计产品UI的前前后后和点点滴滴;Jing.fm分享者是一个很酷的中俄混血帅哥施凯文,如果套用昨天的道哥的标题(山寨微信…),Jing.fm则是《这一次,我们重新定义了音乐搜索》;来自eico的张伟所分享的有关设计的细节非常值得所有的产品经理和设计人员细细体会。
其中印象最深的还是Jing.fm,从音乐类型分类开始,到音乐乐器识别,最后再到歌曲的情感分析,Jing.fm团队做了深入的研究和大量的创新,真正将自然语言描述化的融入了音乐搜索当中。比如“德国带有钢琴演奏的轻音乐”,再比如“周杰伦的悲伤的歌”,或者是“我喜欢周杰伦,我失恋了,给我来首歌吧”。

下午前3场一直在《跨终端的Web》这个专题里猫着,其中来自腾讯的黄悦所分享的《响应式Web设计在跨终端广告创意中的应用》很合我胃口,只可惜腾讯内部的这些工具我们“只可远观而不可亵玩焉”。

最后一场去听了新蛋伍涛分享的《Solr与Cassandra二级缓存实践》,个人感觉前半部分分享的过于细节了,所以后面很多踩过的“坑”没法一一细说。其实在开源的项目上,这些“坑”有些时候反而是更重要的。原因是方案大致上确定了之后,翻翻代码,基本上都有思路,有些“坑”不可避免的要走一周,但是有些“坑”提前知道了,则会节省很多时间。

PPT都在InfoQ的微盘分享里了,就不一一贴出:http://vdisk.weibo.com/u/1746173800

 

2013 QCon Beijing 游记1

感谢国家,感谢@郑旭进 同学的努力争取,感谢老板@付增学 掏钱,让我等有机会与大人物们近距离接触,感受软件工业界的这一盛会。

第一次这么早出门上地铁,不过还好是从8号线起始站上,人也不是很多。很快赶到鸟巢。天气很不错,早上人不多,零星的有些旅游观光的人。另外没有杂七杂八的卖什么罗汉豆之类的小商贩,走在奥林匹克公园的广场上很是惬意。
国际会议中心比较好找,之前也来过一次,应该是09年的Google开发者大会。很快办理了入场手续后找了个离大屏幕近的地方就坐。上午的4场全部都是主题演讲,英文的还有同声传译(去的晚的同学就没有了…)。下面重点说说自己的感受吧。
第一场是Douglas,思维观念部分听的比较晕乎,不过编程风格部分倒是非常清晰。说实话,那个Javascript的例子确实也解决了很久以来积压在我心头的一个问题:为什么Vistual Studio针对Javascript的格式化一直默认保持K&R style风格(大括号的开始总是与上一行代码在同一行),而不是和C#一致的Allman style风格(大括号的开始总是独占一行)?
PS:各种风格参考 http://en.wikipedia.org/wiki/Indent_style
原因参考PPT:http://vdisk.weibo.com/s/yTOrU/1366857734

第二场是来自Github的运维工程师Jesse,重点介绍了Github中运维用的”协同办公”工具Chatbot和Hubot,这两个工具思路非常有意思:让OPs的运维过程也能协同起来。比如对于异地入职的新员工,由于无法像同一个Office的团队一样,无法真实观摩一次同事的部署过程,使用Chatbot就能很好的解决问题:我演示给你看,你自己回头也应该这么做。如果是同一个团队,这个“演示”毫不费力,但是对于异地的Office就无法很好的做到这一点了。
PPT下载:http://vdisk.weibo.com/s/yTyLo/1366856893

第三场是来自百度的林仕鼎,感觉比较厉害,但是这个架构设计与架构师的话题感觉有些抽象,回头写本书倒是可以看看。不过能够感受到一点,这个分享的确是从系统非常基础的层面开始准备和整理的,需要花些时间消化消化。
PPT下载:http://vdisk.weibo.com/s/yT-n-/1366862570

第四场是Kevlin Henney,《程序员应该知道的97件事》的作者,是个“实战派”人物,不但总结的精辟,还上了emacs和C++的现场编译演示的例子,不过演示系统缺又偏偏不给力…
PPT下载:http://vdisk.weibo.com/s/yUjup/1366864019
下午行程:二号厅的A->B->A->C
首先还是Github的Jesse,分享了Github背后用到的那些Open Source的基础架构。包括LVS,MySQL,Redis,Memcache,Git,Unicorn(Ruby的Http Server,Github大部分应用均是Ruby开发)…都非常常见。不常见的是Github的Private Respo可以通过SSH访问,Github自己实现了一个从SSH到Git协议转发的Proxy(不知道我理解的是否正确)
详情参考PPT:暂无

其次是Apache Camel DSL in Scala。选这个没什么特别的理由,只是不了解Apache Camel和DSL,想听一听。 先不说Scala,这个用Java的肯定都了解。Camel还是一个挺有意思的项目,用于路由规则和中介引擎。DSL对我也是一个比较陌生的概念,回来也好好补了补课(具体请参考:领域特定语言 http://baike.baidu.com/view/1616623.htm)
PPT分享:http://vdisk.weibo.com/s/yYtnx

除了@fenng小道消息道哥的黑板报也是我每天必看的微信帐户之一。以前只是大致看过安全宝的介绍,没有详细了解过,这次道哥不但详细介绍了重新定义的WAF(Web Application Firewall),还特别介绍了创业路上的各种坑,其中不乏中国特色的。另外以前公司每次有门户方面的需求,我的第一个反应都是能不能用Wordpress,DedeCMS之类的来实现,但是安全问题却又总是绕不过去:万一有漏洞怎么办?安全宝则给我们提供了一个很好的解决方案。
PPT分享:http://vdisk.weibo.com/s/yYpJ3

最后是七牛云存储的持续集成部署的分享。对于云存储这种较为底层的服务,代码的上线发布环节需要十分严谨,但在这样的情况下,每天还能做到几次到十几次的发布,还是很惊人的。不过堪称敏捷团队的典范。
PPT分享:http://vdisk.weibo.com/s/yYZ9x

 

[原创]浅谈移动App广告平台的设计

前言

依靠广告盈利占据了国内移动App盈利模式的半壁江山。很多App刚刚有点流量的时候都会考虑是不是做个自己的广告投放系统以支撑业务未来的需求。

笔者在工作中有幸接触到了一些有这类需求的App,这些App在自有广告系统中总有这样或那样的功能性缺失,这不可避免的会造成一些业务上的损失。
主要的功能缺陷集中在对品牌类广告主的需求满足上。相对于效果广告主来说,品牌广告主是一类让人又爱又恨的主儿。爱是因为品牌们都是有钱的主儿,能被品牌们看上也说明了自己的江湖地位。恨是因为品牌们都是事儿妈,销售和运营们7*24的伺候着不说,还总提出层出不穷匪夷所思的投放功能需求才是最让人恨的地方。

尽量使用国内服务

这一点很重要,必须先说明:不管你看到的国外的某个网站有多牛,追踪效果、报表有多酷,但是只要你的目标用户在国内,尽量使用国内的服务,原因不细说,心里明白就行。

使用WebView展示广告

从最基本的图片显示需求开始,80%的开发者首先想到的肯定都是有个尺寸,图片地址,点击地址,在App上使用一个Image View显示一下应该就足够了吧,因为业务人员往往就是这样描述他们的业务场景的。但是在实际的业务场景中往往会有很多变数:比如需要增加展示监控,增加广告关闭按钮(免得金山毒霸之类的给你的App上加一个,还有可能引发不兼容等问题)。
此外,移动领域的广告让品牌广告主非常心动的一点就是有丰富的人机互动和表现能力,比如晃动,涂抹,重力感应等。如果有这类需求开发人员会发现原来的ImageView太简陋了,而且需求不明确的情况下也没法实现开发和投放,因此基本上调研之后都会转而使用Web View来展示广告。WebView的缺点是比较消耗资源,一个WebView的创建一般都需要200ms左右,但是只要稍微做些优化,这个损耗和App3,4秒的启动速度相比就不足挂齿了,用户体验不会有明显差异。比如WebView要渲染完毕再展示,出场有个动画(这个地方的灵活性可以参考jquery的动画)就可以给用户更好的体验。
。这时候投放系统可以实现图片,文字链,视频,HTML5动画等广告展示形式,几乎无所不能了,如果仔细研究一下各家专业移动广告平台的投放,这些几乎已经是标配。

展示监控

很多品牌广告主往往一上来就指明要展示监控,说简单一些就是用户每次看到广告,需要通知广告主发生了一次展示。品牌广告主们往往不会拥有自己的系统,而是找代理商,代理商有时还会再找个第三方监控平台以示公正。这一点要是不能满足,这单估计就保不住了。做展示监控要特别注意几点:

  • 展示监控链接会有跳转行为,所以千万别访问一下就完事,要有两跳,但至多三跳。一般来说四跳非常非常少见,五跳以上基本可以认为对方的系统出问题了…;
  • 有的监控链接还会要求有动态参数,一般是用户的标识符,包括iOS的MAC地址,广告追踪ID,OpenUIDID(UDID可以不用再考虑了);Android的EMSI SIMID AndroidId等;
  • 有些情况下也可以做服务器转发,但是客户端的IP之类的信息得附带上,同时得与代理商和第三方监控提前沟通,否则转发服务器的IP会被认为是作弊;
  • 展示次数差异一般上下浮动10%是正常现象,因为国内网络复杂度及终端用户的网络质量都是不可控因素。

点击链接

点击链接与显示链接一样,可能会有参数的替换。所以在App前端的系统设计上千万不要把参数和顺序定死,最好的方式是模板式替换。如果App本身也带监控,最好是采用多线程式同时触发。可以想到如果采用顺序式触发万一某个服务挂了就会影响后续的监控。
在点击链接的跳转上,每一次跳转可能都有5%左右的损失,所以要提升到达率就需要尽可能减少跳转的次数。
不同的系统兼容性不一样,这里还有一个URLencode的坑:要注意每一个链接都是有多个参数的,拼接跳转链接时记得做URLencode处理,不要丢参数;同时每一个参数最好做一次decode的检查,特别是参数有中文的情况下,没有URLencode过的要专门处理一下。
点击之后的打开行为,一般分为应用内打开,应用外打开,其他行为三类。手机上比较独特的一点就是其他行为,包括拨打电话,发送短信,邮件,启动其他应用等,这些基本都可以通过系统调用实现,在开发的时候要特别注意。
iOS6以后有个应用内下载功能要注意集成进App,能非常大的提升App类广告的转化率。
笔者深有体会的是Android的应用外打开非常坑爹,会导致50%以上的点击丢失!原因是用户安装了两款以上的浏览器时系统会询问用户。一个非常有用的实践中得来的经验是App内置一个浏览器来打开着陆页,或者强制指定一个默认浏览器。

屏幕密度

Android上的屏幕密度问题。得益于苹果高超的工业设计和制造水准,将高清屏引入了智能手机产品当中。但悲摧的是由于Android的制造厂家众多,标准不一,在Android上要特别注意对高清屏的处理,否则 图片尺寸变形在所难免。

视频广告

视频广告虽然目前还不是主流,但还是值得一提。首先是视频的自动播放,一般广告主会要求在Banner上点击以后全屏播放,如果用着陆页直接链接视频文件的方式,可以实现自动播放,但是会无法追踪用户的后续行为。解决办法是要么在Banner上直接播放,要么自己用Native Code处理一下。其次是用户观看视频的时长追踪。举个栗子,假如一个视频有25秒,广告主如果要求提供看完视频的用户个数,看完20秒视频的用户个数,看完15秒视频的用户个数,系统得能够支持这样的追踪。而且视频广告一定要提前在不同的Android机型和系统版本上测试兼容性。

广告后台

广告后台要注意的首先就是各种定向的需求,专业广告平台的定向类型非常多,但是作为非专业的App后台,只需包含地域定向和按小时包段投递等简单定向即可。如果想更进一步深入研究广告投放系统,可以参考一下
百度广告管家(http://adm.baidu.com/index.html)
谷歌DFP(https://www.google.com/dfp/)
OpenX(http://www.openx.com/mobile)
以及师徒网的计算广告学这门课程(http://sheetoo.com/app/course/ov?course_id=200)

最后再说说广告的投放和渲染。为了节约服务器流量,投放出来的广告一般是数据加模板地址,模板放在CDN上,本地可以对模板和图片等广告物料资源进行缓存。其余诸如把模板下载到本地,然后填充数据,再使用WebView渲染等都是非常基础和具体的开发工作了,这里就不再一一细说。