莫言莫语 6

小朋友快三岁了,好久没记,其实好玩的事情超级多

好吧
不好吧

不知道什么时候开始,回答好或不好都要加一个「吧」,听起来就特别的客气,有商有量的。「我们出去玩吧」「好吧」,「我们回去了好不好」「不好吧」

我喜欢亮亮的,我不要黑黑的

晚上不想睡觉,不让关灯

我喜欢黑黑的,我不要亮亮的,我还要睡觉

早上不想起床,要睡懒觉不让拉开窗帘

晚上不太好吧,晚上没有月亮不太好

过年时说现在还没到元宵节,晚上没有月亮,小家伙就开始掰为什么不喜欢晚上

亲我。这边

过年期间带莫莫出去玩,抱着他在电梯上会开玩笑让他亲亲爸爸,亲了后会要求爸爸来亲亲他,这边亲了要换一边再亲一口。坐一层扶梯能从下面一路亲到上面,看的爷爷都笑死了

不许走!

因为妈妈过年期间医院要值班,所以是叫爷爷奶奶过来过年了,小家伙经常也会来一句「我很想回湖南老家的」,等到爷爷奶奶要回去的时候,直接堵在门口,大喊不许走

看侏罗纪吧,我不怕的,我会保护你的

小男孩对恐龙还是有各种热爱,妈妈给看过一点侏罗纪公园后,就老缠着还要看,跟他说恐龙太可怕了,他表示我不怕的,会保护我们的,然而实际看到恐龙比较恐怖的画面时还是会害怕,紧紧抓着陪他看的人的手。小朋友还是嘴上说说啦,还是要搂着看好好给他安全感的

吃完饭喝果汁吧

家里没人喝酒,过年的时候给大家喝果汁,小朋友尝到甜头后就一直惦记着了,跟他说吃完饭才可以喝,等下一顿才开始吃时,想起来这事立马先约定一下

我已经慢慢慢慢长大了

小小的人儿偶尔不让叫他「莫莫」了,会说「莫莫」是我小时候的名字,我现在长大了我叫 ***,问他你什么时候长大的呀,会很正经的如是说

你再放高点我就拿不到了

小朋友看书是挺爱看书的,不过也很喜欢把各种绘本丢的满地都是,然后拿书的时候还会顺着电视柜往上拿到不想让他无限制吃的饼干糖果啥的,某天回去一看「莫你怎么又把糖拿下来了,我放那么高你都拿得到?」,小家伙抬头一看,往上再指一格,很认真的建议

Python decorator 库和 gevent 冲突的情况

去年写了两篇分析 decorator 的 blog:

在线上项目里一直也没有用 pypi 的 decorator 库去替换自己的实现,最近替换后撞上了一些问题,整个问题追查过程也各种艰辛,记录一下

我们线上用的 flask 0.11.1 + celery 3.1.25 + gevent 1.2.2 在跑任务队列,broken 用的阿里云 redis 2.8,某个周末突然发现 worker 工作不正常,有大量的 db 连接报错,在简短排查后没找到原因,重启整个服务,暂时跳过这个问题,其实后面还在有其他错误,但也没有解决思路

等周一到公司,团队的人对比了下问题现场和思路,只能发现是 celery worker 会莫名卡死,跑到我们的 k8s 集群上看,对应的 pod 是 running,但是 flower 上看监控是 offline,直接切进 pod 看日志,好几个最后都断在 requests 发请求出去的地方,N 脸懵逼,我们又没升级系统又没动依赖,怎么就会冒出来这个问题

既然最后死在 requests 那,虽然看后面的 Changelog 没发现有跟我们直接习惯的,但还是先把 requests 版本从 2.19.0 升到 2.21.0,并把依赖的库也同步升级。然而并没有解决问题,还是一样的死,还是一样的错

后面多看了几个问题现场,只能协助定位还可能会卡死在 db 读写的地方,这个时候开始怀疑 gevent,因为这货帮忙做了 IO 异步优化,强行协程化,而且这个版本也有点老,期间看也有一些可能相关的 Issue,升级 1.4.0 后发现服务起不来,查了下看需要把 celery 升级到 4.x,但 4.x 的 celery 参数序列化从 pickle 改成 json,还要改挺多代码的,只能先搁置

后面还查了下 celery 的版本问题,我们用的 3.x 是有点老了,但 4.x 那个参数结构该动那个有大所以一直没动,另外也查用 redis 做 broken 的锅,没有任何有效的相关信息

出问题前我在代码里替换了一版 lock 的实现,以及 lock_decorator 的实现,但是往这边怀疑也不对,因为有的出错的地方并没有用到锁,而且看日志和报错也跟锁没有关系

等过了一周,第二个周末的时候开脑洞说好像现在有问题的方法都有修饰器包着,而且这些修饰器都用了 decorator 库,也许这里可能有问题?我们的 decorator 用的是 4.3.0,最新的版本是 4.3.2,大致看了下 Changelog,似乎提到有修复协程问题,但是是 python 3.5 的,不过反正不用改代码,先升了再说

升完后问题真的消失了,那么就来看看到底哪里可能有问题吧。对比期间的变更记录 https://github.com/micheles/decorator/compare/4.3.0…4.3.2,除了一些文档变化和对 py3.5 的协程修复,比较值得怀疑的是 https://github.com/micheles/decorator/commit/eb890d98739196b83f1ecb5cb7bcfe9739a9502c 这个提交,decorator 的原理是在内存里新建一个虚拟文件,把要修饰的方法的相关属性写到这个虚拟文件里,然后通过虚拟文件里的同名方法调装饰器逻辑,装饰器方法里再去调到最终的方法,而这个虚拟文件如果只用 itertools.count(),在 gevent 的协程调度下可能会重名,然后整个代码体系就崩了

产品的一致性很重要

上周,在评审一个旧功能的改造过程中,发现同一件事,可以在多个场景适用,可以在单独的管理页面来管理,也可以在正常的流程中通过弹窗等方式管理,那么,同样的交互,如增删改,给用户的感觉,其内在逻辑和操作交互就应该都是一样的

对产品而言,保持逻辑一致,有助于降低用户认知成本,提高使用效率

对设计而言,是设计规范的一致性体现

对开发而言,能更好归纳总结需求,实现时一并处理,减少重复(并避免给未来留坑)

顶级工匠都在干掉行业内的低端从业者

最近做一个项目推动,期望是让设计师和开发人员之间可以用大量共识去快速推动新业务的开发上线,就是各种前端规范和组件,终极目标是希望产品人员直接原型给到开发,开发就可以根据已有的规范组件直接实现出来,而不需要设计再去设计页面交互等

其实想想,在这个过程中,需要参与的设计人员,是需要更高的抽象能力和把控能力,来促成这一项目完成,在完成后,就是让各种美工级别的同事没活干。推广一下,在工匠这个范畴内,顶级的从业者都是在不断的演化技术和能力,(在事实上)不停的干掉低端从业者,在对行业外人员提供更简单的应用的同事,抬高行业门槛

比如程序员和架构师,一直在发布更简单易用的开发语言和开发框架,后续的从业者要么是框架开发维护人员,要么就是产品人员整理好需求就可以直接产出结果,低端码农,只管从详细设计到实现的这一个层级,会被彻底干掉

比如设计师,在标品里提供设计规范,从而可以让产品原型直达开发人员,只要按规范直接产出就能有不错的界面效果,干掉切图仔和低端美工

比如历史上的打字员,在输入法各种改进后,人人都能轻松输入(拼音、语音 etc),整个职业直接消失

还有流水线工人和机器人应用,还有快递外卖和无人送货,等等等等

为 VPS 开启 BBR,生活更美好

Google 开发发布的 bbr 是为了优化 TCP 协议上的拥塞问题,早就被人各种安利,自己也一直也懒得整。前几个月另外买了台 bwg 的 vps 后,想起来有这么个东西,把在 vultr 和 bwg 的 vps 都开起来 bbr,开启后果然网速和丢包情况都得到了肉眼可见的显著改善,大赞。关于开启方法,现在的内核版本都跟上来了,不用像早期那样要各种折腾,基本是傻瓜式操作就可以解决,善用搜索,我就不制造垃圾信息了

还被安利了 kcptun 和 v2ray 之类的好久,一直也没有太大动力去整,毕竟我并不太在乎让某些人不爽的用法,仅仅只是能维持连通就行

大道至简

上年纪了就喜欢各种絮叨,开始给小朋友们灌鸡汤。当然,正面一点的说法是慢慢的也经历了这么多事情,开始归纳总结下人生经验

技术做久了,也经历那么多项目和需求,最后发现,还是大道至简。凡是能简单搞定的事情,就不要搞复杂了。做复杂了做的成本要高很多,用起来的学习成本和推广成本也要高很多,而且复杂后出问题的概率也要高很多

当然,怎么把复杂的问题拆解归纳,将其简单化,这也是非常重要的一个技能,在技术圈,面对源源不断的精力更旺盛的年轻人,这才是年资长的人的立身之本

大道至简。重剑无锋,大巧不工。无招胜有招。很多这样的武侠精义说的其实都是类似的观点

莫言莫语 5

爸爸你不要去上班了,妈妈去上班赚钱

早上不想爸爸走,但是不够啊

妈妈你是在当医生么

跟在上班的妈妈视频,看到妈妈穿着白大褂

我口水都要流出来了

晚饭后说拿个橘子来给他吃,刚起身去拿,小馋猫就开始务必期待

你没有带快递么?

经常回家的时候会带着快递(特别是给莫莫的玩具啥的),小朋友经常看到爸妈回来两手空空,就会略失望下

你帮我剥开下

自己开门,自己找到放零食的纸盒子,自己拆包装,到最后铝塑包装撕不开了就会巴巴跑过来要求拆

我还要吃维生素!

按科学喂养每天补充维生素软糖,一天一颗,但是似乎这玩意儿味道还挺好的?有个娃总还想着多吃,经常还会闹着要。最近一次已经学会自己按住盖子拧开了。不过,这个要按住盖子才能拧开的设计,不就是防小朋友乱来的么?果然儿童锁都只能防一岁以内的儿童和老人?

莫言莫语 4

爸爸你要说「谢谢」,妈妈你要说「不用谢」

带了两个快递回家,有一个是给莫莫的白板,妈妈先拿了剪刀在拆自己的快递,莫莫催爸爸问妈妈要剪刀,等妈妈把剪刀给爸爸后马上安排爸爸说「谢谢」,等爸爸说了谢谢立马提醒妈妈还要说「不用谢」。现在的日常礼仪做的还挺好,有时候他说了「谢谢」或「对不起」,大人没回他「不用谢」和「没关系」,会很严肃的说「你没有说不用谢」

我们都剪了头发,我们都是小帅哥

给莫莫剪了头发,没两天爸爸也去理发了,某天在家陪莫莫玩,他突然盯着爸爸来了这么一句。妈妈表示你还挺臭美的

我够得着,我会自己想办法

家里贴了块白板贴到客厅墙上,莫莫最喜欢在上面各种画,有一盒笔放在玄关柜子上,他得踮起脚来才能够到,发现爸爸在看他,立马很得意的如是说

叶喵!

爸爸总这样叫妈妈,结果莫莫有时候叫妈妈没理的时候,也会学爸爸这样大喊,妈妈很无奈「我不叫叶喵啊」

我会自己想办法的

小朋友已经学会搬各种高矮凳子爬上去来让自己够到电视柜上面的各种零食,有大人看到会担心他摔了,想过去保护他时,反倒被得意反秀

你留一点给我嘛

妈妈吃零食,莫宝总是很机警的问「你在吃什么」「哪来的」「还有吗」「是给小朋友吃的吗」「小朋友可以吃吗」,某次妈妈又找出来某吃的时候,莫宝拖长了音用小委屈样对妈妈喊

我就吃一个

莫莫和妈妈吃葡萄干,一包都快吃完了,留了一点给爸爸,等爸爸把剩下的几颗全倒手上,问莫莫你还要不要吃,过来看看说我就吃一个,塞嘴里后立马伸手又把剩下的几颗都拿了往嘴里一塞,喂喂你说好了只吃一个的呢

民智未开:Google 靠什么赚钱?

前两天看到一个微信公众号的新闻,内容是微软时隔十多年,重新回到市值第一的位置,因为跌的少,超过了最近在大下行趋势下跌的更多的苹果和 Alphabet(Google 现在的母公司,其实就是以前大家意义上的 Google),下面不知何故扯上 Google,有人说「Google 靠广告赚钱」,然后就有脑残粉跳出来说「那些说 Google 靠广告赚钱的是把 Google 和百度混为一谈么」,以及「谷歌推动人工智能投了多少钱等等等等」,看完真的是气笑了,民智未开啊

有很多脑残粉,真的是一粉顶十黑。Google 在很多技术领域有卓越的贡献和引路作用,也提供了非常好的服务,但作为一个盈利性的公司,目前他的主要收入来源和商业模式确实就是广告。广告本身不是什么坏东西,笨狗做过几年互联网广告算法,个人理解广告的本质就是一种信息,至于这个信息是真是假,以及是否是推送给需要的场景,那是广告审核和广告效果考虑的问题。说 Google 靠广告赚钱,真不是要抹黑脑残粉心中的圣殿,而是事实如此,Google 的财报,新员工入职的培训等,都主动明确的阐述了自己的主要收入来源是广告

关于商业模式真的也挺有意思的,互联网其实就只有这几个主要收入方式:1) 广告;2) 增值服务;3) 实体售卖;4) 虚拟物品(游戏)。广告其实是绝大部分互联网企业的收入方式,包括 Google,Facebook,YouTube,微博,阿里巴巴等,这里可能出现了几个大家觉得奇怪的名字,后面会细说。增值服务拓展一下其实包括的内容挺多,包括服务订阅,比如 QQ 的会员,视频网站的付费会员,或按订阅付费的商业服务如 Office365。实体售卖比如纯粹的电商,低进高出,自己赚个差价。虚拟物品就像 QQ 秀(其实这个到底算虚拟还是算增值还有待商榷),以及各种游戏里的充值和物品

我们提到 Google 经常会觉得是人类之光的存在,但一个商业公司终究还是要活下去的,那么 Google 就是利用他的入口优势,在搜索结果里明示嵌入和当前搜索意图相关的广告信息,从而获利(AdWords),以及,把搜索结果扩展到各种其他站点的嵌入区域(AdSense),还有视频、地图等场景(YouTube)。之所以会有 Google 各种伟光正的感觉,一是 Google 的广告审核相对严格,不至于把各种虚假诈骗等信息堂而皇之的放出来,二是 Google 的广告匹配算法相对高效,确有其相关性,不至于很突兀,三是 Google 的广告展示还是相对克制,不至于一屏大部分都是广告而没有自然结果。再加上 Google 对国内市场也不占优,国人看到的广告的确少,所以道德婊们无法接受把 Google 和某些被唾骂的公司相提并论,事实上如果挂上美帝代理,搜英文结果看看更普适情况下的 Google,可能会让某些人大失所望

微博自己纯粹的广告体系不足以支撑那么大的估值,会员服务也不给力,必然会导致官方或大 V 有各种软广,比如热搜榜,比如大 V 软文带货,这也是社区无法避免的困境。Facebook 好在市场足够大,自己的相关度和效果跟踪也足够明确,所以还可以靠比较纯粹的广告体系提供营收,但一旦用户活跃度下降,市场压力下估计也难独善其身,这也是为什么现在 FB 在下行大环境下掉的比大盘多那么多,大家都有这样的担心。如果说看衰 FB 是杞人忧天,那么隔壁的 Twitter 总是个现成例子吧,看看过去的财报和数据,事实胜于雄辩

阿里对民众包装的都是个卖货的平台,除了阿里云这种企业服务,天猫收佣金,其他的大头也还是广告。阿里在 07 年的时候公开拒绝百度收录和提供搜索结果,所有的购物搜索还是从淘宝自己的入口进来,控制了入口,控制了流量分配,就决定了广告市场有多大。(事实上 07 年的事技术上挺难做到屏蔽,但公开喊话了百度也不太合适拉下面子去做这种还有点下三滥的事)

记得之前还在做广告算法时有位大神吐槽过「我们这个年代最聪明的人,不是探索未知星辰大海,而是竭尽所能让人们去点广告,真是可悲」,的确,因为互联网企业的高薪水,现在的聪明人大部分都去了这些互联网企业,很多人也确实在各种优化广告效果。对这个吐槽,反驳无能,像「只是为人们提供更匹配的信息服务」这样的理由还是苍白无力。公司和员工都还是要活下去的,金钱也不可能凭空生成,后面离开这个行业,多少也有点这个原因。现在做企业服务,就是帮人节省时间或人力,收取比他节省部分更少的服务费用,双赢,也更踏实

人人网备份工具终于算个活跃的 GitHub 项目了

人人网社交资产真的卖给了多牛所致,renrenBackup 这个项目在 GitHub 上很快多了好多 star(也是自己跑到人人和 v2ex 上安利了一波),也有人提 issue 和 PR,这样也挺好,项目有人用有人吐槽,才算一个合适的项目

开心的是

  1. 自己做的东西有人用,能帮到人,这是做技术的人最开心的吧
  2. 有更多奇怪的边界条件被挖掘到,从而增强项目健壮性
  3. 有人帮忙提 PR,主动帮忙处理边界条件

好气也好笑的有

  1. 各种无脑提需求或试图引入各种第三方库来实现某些功能的,我都各种努力把 BeautifulSoup 和 pyquery 给从依赖去掉,你还要我加回去?目标还是能尽可能的简单的运行起来,我还想做 .exe 的版本给 Windows 用呢
  2. 人人改过登录逻辑,不用每次都取加密 key 了,在撞上验证码时无法正常工作。修复前还跟人争了半天,不过之前那个取验证码的逻辑也写的有问题,多取了一次
  3. 真的是各种意想不到的脏数据
    • 评论里有用户已经销号,有字段缺值,返回的 json 都是不合法的
    • 相册加密,能看到里面的张数但是打不开
    • 抓别人的留言板遇上留言板不公开,第一页都打不开

比较不高兴的有

  1. 提问题像大爷一般,好像欠着他什么一样的口气,我做这个又没收你钱,做着玩的东西,大家有问题一起好好分析,能解决去解决,不能解决把问题复现步骤更明确的给出来让有能力的人去解决就好,谁也不欠谁