Category: IT

RTB广告平台价格结算机制

RTB广告平台价格结算机制有多种,常见的有GFP, GSP, VCG等。 已经有很多人写过很好的文章介绍这些机制的优劣,就不重复了,想了解的请参看如下文章:

  1. 互联网广告拍卖机制设计
  2. 谈谈广告平台的竞价原理:GFP,GSP,VCG

下面谈谈其他相关问题。

  1. GSP的变体
    GSP有不少变体,其中常用的有UWR和QWR。

    1. UWR – Unweighted reserve price
      指定一个最低门槛价格,也就是底价,该价格对所有竞价者都相同,竞价者的竞价必须大于等于底价。Google,Baidu, 玉米AdExchange用的都是这种方法。
    2. QWR – Quality reserve price
      也是指定一个底价,但这个底价对不同竞价者是存在差异的,根据他们的广告质量(点击率,转化率等)指定不同底价,从而最大化媒体方的收益。
  2. 底价
    制定底价的方法也有多种。

    1. 双底价
      最早就是一个底价。 现在出现了两个底价的模式:一个是软底价(soft floor price),一个是硬底价(hard floor price), 硬底价低于软底价。 竞价者的出价必须高过或等于硬底价。 当出价高于软底价时, 结算方法为GSP,就是价高者得,而结算价格为第二高位出价加1分。 当出价低于软底价,而高过硬底价时, 结算方法转为GFP,也是价高者得,结算价格就是出价。
    2. 动态底价(dynamic floor price)
      根据流量的不同特征,不同的时段,给予不同的底价, 从而最大化媒体收益。
  3. 纳什均衡
    设计出价机制时很重要是尽量让系统得到纳什均衡,纳什均衡的定义是在非合作类博弈中,如果参与者当前选择的策略形成了“纳什均衡”,那么对于任何一位参与者来说,单方更改自己的策略不会带来任何好处。
    GFP模式就不可能达到纳什均衡,他会鼓励竞价者不断的调整自己的出价。

RTB是一个很好的游戏规则,能优化资源使用效率,实现买家卖家的双赢。而在RTB这个大规则下还有很多的小规则,例如上面谈的结算机制,底价设定方法。这些小规则的设计和选择很重要,决定了广告交易平台以后的走向。

本人正带队开发玉米AdExchange,有感兴趣计算广告技术方面的朋友欢迎交流。

Tags:

categories IT

Python老兵的新征程

用Python已经有近9年了, 大多数时候都是用它来做些内部使用的小工具,写的都比较随意(唯一的正式项目经历,就是写一个用户评论搜索引擎,那个网站已经关闭了,当年的页面可在archive.org看到)。 做这些开发时,开发的方法思路其实和十来年前没啥差别,当然有了些更好的辅助工具,例如Git,Pycharm等, 但主要方法没啥大变化。 这周用Python做另一个正式项目,尝试采用了和以前都不一样的方法,通过这一个星期学习到了不少新东西。

  1. pyenv来管理python的不同版本,
    因为项目用了Python 3.5, 而系统是Python 2.7
  2. 用了Python 3.5的Type Hints
  3. PyScaffold初始化了项目
    以前也用Django来生成过web项目,但非web项目还是第一次用生成器生成。
  4. commitizen来写git commit message, 这样能够用cz-conventional-changelog自动生成change log
  5. pylintflake8做代码检查
  6. tox做测试
  7. 在Git pre commit hook中加入pylint,flake8,tox检查
  8. SQLAlchemy来做ORM, 用Alembic做数据库的版本升级管理
    以前都是直接写SQL -_-;,当然是参数化的。 这次先用phpMyAdmin直接在mysql上设计数据表,然后用sqlacodegen生成model代码,再用Alembic做版本管理。
  9. Travis做系统集成
  10. pip做依赖管理
    1. 用pip freeze > requirements.txt 来记录依赖
    2. 再用pip install -r requirements.txt来重建依赖环境
    3. 正在研究virtualenv以实现依赖的隔离
    4. 另:以前研究过Docker,遇到些问题没能搞定,有经验的还请指点一二
  11. Slack集成
    现在已经能从Slack里看到Github的提交,Pull request提醒,并能看到Travis持续进程测试结果。上线时还要实现从聊天频道里直接下指令部署。

感觉现在开发的思想,哲学都比起20年前,甚至比起10年前都有了根本的改变,我们正迎来程序开发上的工业革命,生为这个时代的程序员是何其的幸福啊 :)。

Tags:

categories IT

乱想 – 无线脑电波沟通

人类的沟通,通过语言,动作,眼神,书写。 这些过程都需要人类脑内思维翻译到这些外部的媒介,再被他人接收,再翻译成回脑部信号。 那么人脑之间能否越过这些中间的媒介而直接沟通呢?

这些年人类在脑电波控制上已经有了很多进展,可以用脑电波控制游戏,控制假肢。
12
那么人类有没有可能通过脑电波直接沟通呢? 如果可以,那一定会有很多有趣的事:

  1. 跳过了翻译过程,人脑之间直接用电波沟通,沟通效率会提高很多
  2. 因为跳过了翻译的中间环节,人与人间的误解会大大减少
  3. 人类之间可遇不可求的心有灵犀一点通的美妙感觉,用脑电波沟通可能会变得非常容易
  4. 到时,人们耳朵上带的就不再是蓝牙耳机,而是能帮助人与人间无线脑电波沟通的仪器
  5. 那时社交网络会有直接寻找脑电波匹配的人的交友服务,比通过分析什么各种兴趣爱好会准的多,保证两人一见能一拍即合
  6. 因为都是通过无线脑电波直接沟通,人们无论在哪里都可以高效的沟通,会有更多SOHO的工作者。
  7. 开会时可以一起组个脑波局域网
  8. 估计为了防止一些意外,脑波网络也需要有防火墙

IE11在Windows 7中不能启动的问题

今天韩国阿姨的机器上突然IE11打不开了,点IE11的图标IE窗口死活不出现,而用Task Manager能看到IE的进程。 查看Windows update发现昨天刚安装了KB3058515, 一个关于IE11的安全补丁。在安全模式下,IE11启动没问题,看来是这个安全补丁和IE11的哪个插件冲突了。 于是把IE11的所有Addon disable掉,可依然不行。 还卸载了一堆可能和IE有关的软件,但毫无效果。 查杀了木马病毒,也毫无发现。

在网上也找到有人说是注册表权限问题,发现这台机器不是那个问题。

最后用Process Monitor查看系统中的进程,发现有个Baiduprotect.exe 进程很奇怪,明明这台机器没安装过任何百度的东西啊。 最后在C:\Program Files (x86)\Common Files\Baidu\BaiduProtect1.3\1.3.0.619 找到uninst.exe运行,卸载了Baiduprotect。 卸载后IE11终于恢复正常。

重写?重构?

今天看到Gu Lu的Blog《知乎回答:入职后发现项目组代码异常混乱,是去是留?》中谈重写还是重构的问题,说的很好, 读了很有些感触。重写与重构的抉择问题存在于很多公司,尤其是创业企业。下面说说自己的意见:

先说结论:如果是功能单一的某模块,重写问题不大,而复杂系统在绝大多数情况下,都不赞同推翻重写。

原因如下:

  1. 复杂系统的推翻重写需要投入的开发资源很大,周期很长才能见到效果。对企业来说这是一种孤注一掷的赌博,风险很高。
  2. 而且重写期间,旧有系统得不到根本改进,公司要冒着长时间内业务需要的技术支持无法得到改善的风险。
  3. 还有,看到过的推翻重写的复杂系统,很多没什么好结果。不少重写出来的东西同样百病缠身,甚至还不如原有系统。

做出重写或重构的决定很容易,但真正让一个系统能有提高,真正让一个团队能更进一步,需要的是一些更深层次的改变。

 

  1. 重构应该贯穿代码开发的始终
    好的代码是改出来的,代码需要不停的重构, 重构应该贯穿代码开发的整个阶段。很多人能在创业初期迅速开发出能工作的系统,但他们把这期间的遗留的问题称为技术债务,总希望能抽出专门的时间来解决它。这种事自己也做过,但现在不赞同专门抽时间重构,而是认为重构应该贯穿开发的始终。这之间的差别貌似很小,其实是开发方法上的本质差别。
  2. 自动测试
    当面对的是一个很庞大复杂的系统, 很难在短期内通过简单的阅读代码就彻底读懂它。这时你的一些改动如果没有测试去做检查,那弄不好就会造成系统的一些很严重的问题。 这个问题在代码缺乏良好的风格,缺乏良好的架构情况下会更突出。但如果手工测试的话,过程会很漫长,会造成整个系统迭代速度极其缓慢。而且手工测试本身也是有不低的错误率的。 复杂系统的重构必须要有自动化测试做保障。单元测试的技术已经很成熟,而seleniumappium等测试工具的出现则为为浏览器,app等终端产品UI的自动测试提供了很好的手段。robot framework等测试框架的出现,则为搭建自己的测试系统提供了很好的支持。而云技术发展,则为搭建可自动缩放的测试系统提供了很好的基础。 当几百个测试用例可以在半个小时就全部跑完的时候,重构的迭代速度会大大加快,而且会是有质量保障的速度。
  3. 可测试性
    代码的可测试性大家谈的不多,很多编程名著里见不到他的踪影。代码的可测性可能在开发简单系统,比如单机软件时还不那么重要。但在开发复杂的系统时,当你需要重构它的时候,可测试性的重要性怎么强调都不为过。 当你重构出现问题时,可测试性好的代码应该能让你迅速发现问题,定位问题。可测性不好的系统,自动测试的意义会大打折扣。至于什么是可测性,大家可参看同济大学的朱少民老师写的一个非常好的ppt:谈软件可测试性,这里就不重复了。可测试性不只是有利于在开发阶段调试代码,在生产环境中,可测试性好的系统也有助于迅速发现定位问题,减少问题造成的损失。
  4. 其他
    1. 持续集成
      有了持续集成,你就可以从打包,到测试,到生产环境部署都可以全自动化完成。 一旦发现问题可以立刻自动回滚。
    2. 在线生产环境监测
      应该建立一套生产环境监测系统,并不断完善,一旦发现问题立刻发出警报, 甚至能自动做一些自动应急修复错误。

 

做好上面几点,重构就可以放心大胆的进行。否则重构也是很冒风险的,这也是为什么很多公司都有些大家都不敢动的老代码的原因。

说到底让团队能做好重构工作,是要在团队里建立一种开发文化:

  1. 产品快速构建,小步快速迭代
  2. 重视测试,重视软件工程

===========================================

曾经做过很成功的一次重构,在半年后旧有代码已经很少,几乎90%以上都是新代码,系统性能和稳定性都大幅提高。有可能从半年后的视角,会觉得这是一次重写,但这其实都是每天一点点重构带来的。整个重构的过程系统不断稳步提升,整个改变平滑顺利。除了重构代码的工作,还做了不少别的:

  1. 当时重构工作开始的第一天,就安排专人开发自动测试系统
  2. 后来又开发了生产环境的监控系统
  3. 给系统增加了不少专用的监测接口
  4. 当时业务人员遇到问题常常直接捅到开发这边来,后来给系统增加了一个接口,能迅速帮助业务人员定位是使用错误还是系统错误,如果是使用错误是具体什么错误。增加这个接口后,从业务那边过来的技术支持压力一下少了很多。这也算是增加了整个系统的可测试性。
  5. Gulu文章中提到的幽灵替补,灰度发布的方法都用到了

也有些方面没做好:

  1. 当时的持续集成一直想做,但因为各种原因一直没做起来,真正持续集成是在现在的公司才做到
  2. 当时的自动测试系统只能做基于Web API的测试,UI自动测试做了尝试,一直没真正做起来。这也是到了现在公司才真正知道怎么做。
  3. 柔性服务的思想很好,当时没想到,希望以后能试试。

 

狼图腾

春节在北京看了《狼图腾》的电影,感觉非常惊艳。于是把多年前只读了开头的同名小说再捡起来,一口气读完了。 下面对比一下《狼图腾》的小说和电影:

  1. 小说对草原生态环境的描述更细致,不单是狼,而是旱獭,羊,马,牛,老鼠,蚊子等构成的一个复杂的生态圈。 这方面电影因为时间所限没能展开
  2. 坦白的说,小说的文笔比较差。 作者总想把自己的想法强加给读者,缺乏技巧。电影不愧是世界知名导演执导,艺术技巧高出很多。
  3. 小说中塑造了包顺贵这个反派形象,容易让人把整个草原悲剧推到他个人代表的少数人身上,显得肤浅。其实这是整个中国的悲剧,电影这方面处理就比较好。
  4. 电影对小说中很多人物进行了删减合并,故事的推进有些环节稍欠逻辑。这方面小说好很多,塑造了很多性格各异,背景各异的人物。
  5. 小说中小狼的结尾让人不好受,电影的结尾更好些。
  6. 小说中对汉族传统文化的贬低及推崇草原民族的狼文化到了有点歇斯底里的程度, 有人批评这本书法西斯也不是没有道理。而电影主题突出,专注在人和自然,动物之间的相处,立意上高出一筹。
  7. 电影中狼群追逐马群的镜头非常震撼,这点小说的表现力是自愧不如的,强烈建议去电影院感受大屏幕带来的冲击。

总的来讲小说还是很不错的:

  1. 它给人带来中国很久以来缺乏的一种更全面的历史观, 认为中国的历史是草原民族与农耕民族共同写就。有可能自己是少数民族的关系,对中国以汉族为中心的历史描述方式很是不感冒。中国这片土地,汉族长期统治过的地方只有三分之一,可史书中讲那三分之二的土地上的人和事太少太少了。
  2. 对狼文化的思考很有趣,带给人全新的视角。
  3. 《狼图腾》描述的草原生活也是前所未有的细致, 让人们更多的了解了草原。以前看老鬼写的《血色黄昏》,虽然也是知情去内蒙插队的故事,但他不是和牧民一起生活,还是在学生堆里。
  4. 豆瓣上有老鬼及其他一些曾经的插队知青批评《狼图腾》的文字,建议大家也看看,兼听则明。

 

 

红米Note如何使用64G TF卡

上周买了红米Note增强版。手里有个现成的64G TF卡,可是红米Note的规格说明里只支持32G TF卡。 把64G卡插上去,果然用不了,总是格式化失败,说是外部媒介状态不明。 后来发现这是因为Android不支持exfat,ntfs等格式,以前的TF卡格式化成Fat32格式。 而Fat32虽然理论上支持2TB容量,但实际上在XP上Fat32最大只支持到32G。 所以微软对大于32G的卡,推出了exfat格式,WP手机可以很好的支持这个格式。因为专利问题,android官方并不支持该格式。

在网上有人说红米Note能很好的支持64G的TF卡,可并没有详细说如何支持,害得我摸索了半天。 现在把经验分享如下,为其他红米用户节省些时间。

步骤如下:

  1. 首先要Root,推荐用Root大师,用百度的一键Root不行。 (Root大师会在手机上安些垃圾应用,没办法,大家都要吃饭不是,只要安好以后卸载即可, 但“root大师”和“授权管理”要留下)
  2. 在Google play市场寻找安装Paragon NTFS
    1. 如果没有google play,那要先去小米市场安装“谷歌应用下载器”,安装google play service及google play市场
  3. 把TF卡用TF读卡器接到电脑上,格式化成NTFS格式
  4. 将64G TF卡插入后重启手机,然后再运行Paragon NTFS, SD卡会被自动Mount到sdcard1,这就可以用64G的TF卡了

 

虽然两个月前,小米3留下了很糟糕的印象,但经过这段时间的适应,发现小米还是有不少优点的。用了快一个星期的红米Note增强版,感觉虽然缺点不少,但比起它的价格来说,性价比是非常高的,尤其是用它的大屏读电子书感觉非常舒服。

 

精仿,超精仿

精仿Note3

精仿Note3

前一阵在Taobao买了个三星Note 3, 是买的港行(香港行货),三千多的价格。 买来后外观看着确实很好,运行速度也非常流畅,屏幕看着也很好。运行3DMark, 安兔兔等跑分程序成绩很好, 安兔兔还直接给出结论:性能与三星Note3相仿。 结果很偶然发现,显示的内存大小不对。因为Note3内存应该是3G,而看到的实际上只有1.4G (大家注意看一下图中红框标识出的位置)。

就是看到这个也没能让我想到这个Note3是假的,因为这个手机没有以前见到的山寨机的粗糙感觉,非常精细。不但速度相仿正品Note3,三星Note系列特别支持的S-Pen等功能,该手机均完美支持。

后来经过仔细查找资料才发现自己真是严重落伍了。以前只听说过高仿的山寨机, 现在的山寨技术日新月异,出来了新词:精仿和超精仿。 精仿的山寨机普通人已经很难分辨,而超精仿的手机,普通人想识别是非常困难的。 我买到的这个应该算是精仿Note3, 大家去淘宝搜“精仿Note3”,能搜到很多,价格大约在1400 – 1600元左右,而超精仿Note3价格在2000左右。 这样算下来,卖家把一个精仿Note3卖出港行价格,利润在1400 – 2000左右。

还好发现及时,很快退货了,但估计上当的人很多。因为那个卖家是皇冠卖家,在淘宝上的Note3出货量相当大。 向淘宝投诉卖家卖假货,结果石沉大海。

经过这件事,已经再也不敢在淘宝上买电子产品了。以后只信官网,品牌直营的专卖店和京东。 早就想买小米路由器,淘宝上原价甚至送礼品卖的很多,但现在只敢去小米官网排队买。