今年的新年,加入了浩浩荡荡的旅游跨年大军,去了日本。

前后玩了 13 天,关西 8 天(大阪、奈良、京都),札幌滑雪泡温泉 4 天,最后在东京 Shopping 1 天,加上前后飞机的时间,足足在外头呆了 15 天。

因为是第一次带妈妈们和宝宝出远门,行程较为宽松,基本上一天一个活动,每次留一天的时间来跨城市交通(Checkout & Checkin);另外也尽可能以轻松的方式逛更多的地方,吃不同的美食,满足妈妈们体验日本的不同。

大阪、奈良和京都

环球影城,还是只适合大宝宝玩😂,一天下来只有霍格沃茨、小黄人和蜘蛛侠好玩,其他基本就是逛逛,冗长到想睡觉的终结者,不玩也罢。大阪阴雨绵绵,在外面并不好走,人也特别多,宝宝和妈妈们只能去儿童区域排排队玩玩旋转木马,旋转史努比。

从大阪到京都,也就一个多小时火车。在京都住的都是民宿,人多摊下来其实还蛮划算的,有厨房特别方便一家人自己动手。晚饭时间依房东推荐直奔花见小路,简直就是网红打卡点,不知道吃啥逛啥,阴雨绵绵的天气,又冷又饿随便找一家店吃,竟然还是烧焦的大阪烧😂。

后来回到住宿,还是跟老婆去全家,买了寿司、刺身和梅酒,以“正常”的方式犒劳了一下大家一顿宵夜。一行人围在温暖的榻榻米上,一边品尝来自超市的美味,一边吐槽花见小路和大阪烧,欢声笑语,随便一个普通超市的便当就很好吃啊!刺身跟梅酒怎么这么搭!

京都第二天,去了奈良。日本的火车真的很方便,所有车站都有升降梯,推着 Baby 车完全无压力,车次也密集,说走就走。奈良是一个很小很简单的城市,景区的鹿特别精,一副不给吃就要顶 PP 的流氓样。宝宝跟小鹿一路斗智斗勇,小鹿看到宝宝小还企图欺负她,宝宝就绕到身后拍小鹿屁股,把我们逗得哈哈大笑。

变革和成长的一年。

团队

上半年经历了很大的团队变动,让我更加深刻地理解 Manager 跟 Leader 的区别。对于一团队的“新人”,加大了各种 Coaching 的力度,鼓励角色流动互补,每个人都是 Owner。从理解需求到主导开发节奏,再到负责发布以及跟踪发布质量,应急处理。从凡事亲力亲为,到放手营造一个允许且不怕失败的环境,这可能是对自己,对团队最大的信任。

一个良好的,互相认可,互相帮助的团队,才能最大程度发挥每个人的价值。Jerry 曾问我,怎么衡量你在团队的价值?在一个成长型的技术团队,应该利用我的经验和资源,在踩过坑的地方让团队少走弯路,在能够抽象的地方让团队少做重复工作,从而创造这样一个共享和支持的氛围,帮助每个人找到自己对团队的价值,然后最大化这个价值。

变革

产品的增长迟缓,大家都承当着很大压力。下半年整体调动,跳出过往的职业族,客户端团队重组,这样的拥抱变化在腾讯还挺少见的,对整个团队的应变能力提出了更高的要求。由于过去各个技术栈的一些粗浅经验,这样的变动,对我可能是个更好的舞台。

从新手留存切入,了解用户行为日志,学点 Spark 脚本取出来做关联分析,从渠道到新用户 OnBoarding,两周内便稳住了12个点的留存提升;一步一步地深入所有日志的存储和查询逻辑,从内容质量,用户分群,渠道分析几个角度并行支撑起内容运营和产品的决策,参与优化了统计系统的查询性能之后引入了灰度分桶统计,为对照实验提供了更多便利。

这其中最大的成长,莫过于从原先处理一个平台的一批需求,到参与和主导解决一系列产品问题,再到平台化思考如何抽象运营和产品的需求,提供增长的支撑。跳出了终端这条路,视野比预期的要广阔许多。如同刚毕业那会,每天都是一边学习一边工作,Chrome 还开着 Spark ,HBase 甚至 Python 各种文档,MindNode 一边系统化地整理,终端还一边码着脚本,跑着分析。

成长

今年贡献给 Pocket 的时间骤减(相比去年),还是工作转型的缘故,在微信读书里产生的在读也有限,大部分是工作所需的内容,总体加起来可能差不多40本书,印象最深的是《投资中最简单的事》,讲价值投资讲的很通俗易懂。

工作上所需,接触了一些统计分析的内容,也算入门了“大数据”,技术栈又丰富了一些。很多时候需要解决问题,因为人少都得挽起袖子自己干,今年算是除了 DevOps 之外的事情全弄了一轮。

其实衡量自己成长的指标,不是自己学会或者做了多少工作,而是在有限的时间里,解决了多少实际的问题,产生了多少有效的价值。几年前 Quote 过 Rework 里的一句话:

条件受限是好事,因为条件受限可以让你小材大用,让你没有办法再用蛮力来完成工作,让你必需去思考使用知识密集型的解决方案来更聪明的解决问题。

很多时候,甚至没有人告诉你 Deadline 在哪里。

旅行

五月初去了意大利,飞奔在托斯卡纳的田野,沉浸在乌菲兹美术馆,摇晃在威尼斯的小船上,穿过一缕一缕的时光。才发现知识实在是太匮乏了,每块砖头都有说不完的故事。

圣马可广场

十月底团建去了台湾,干净的街道和亲切的台北人,“良好”的政治人文环境,空气中仿佛都有着自由的气息。同为华人,为什么差异这么大?小宇说,台湾和香港都是经济和社会素养同步发展的,由此演化成为服务型社会,但是中国揠苗助长式的经济增长,社会素养的断层在所难免,还需要时间去弥补和成长。从诚品搬回来《向下扎根! 德國教育的公民思辨課》系列,希望可以找到些答案。

十一月趁着妹妹回国的空隙,把全家人拉到了长滩岛,总算圆了一次带着妈妈去旅行的梦想,宝宝刚学会走不久,一路东倒西歪横冲直撞大呼小叫的非常引人注目,从胆小不敢踩沙滩,到后来一到沙滩上就往海里冲。

宝宝

看着宝宝一天一天长大,绞尽脑汁想法子给她玩儿,每个周末几乎都带着出去乱跑。而最有意思的,不管距离长短,宝宝总是奇迹般地坚持着上车睡觉,下车拍照的优良传统。上半年还小的时候,更是能在大人吃饭的时候她识趣地睡觉,大人吃完她醒目地起床喝奶。

而不知是因为过于嗜睡还是奶的质量太好的缘故,年初宝宝竟然因为太胖被医生“勒令”减肥,哭笑不得地我们坚持折腾了她一年(各种运动,游泳,爬行,走路,爬楼梯),总算保持了宝宝一年没增长体重的光辉成绩。

这一年,工作日平均每天陪伴时间应该有一小时以上,下半年特别忙晚上无法早回的时候,早上还是早起陪她玩一会。能够陪着她度过生命中最依赖父母的阶段,还是很幸运的。

Android 不仅系统版本众多,机型众多,而且各个市场都各有各的政策和审核速度,每次发布一个版本对于开发同学来讲都是一种漫长的煎熬。相比于 iOS 两三天就能达到 80% 的覆盖速度而言,Android 应用版本升级至少需要两周才能达到 80% 的升级率,严重阻碍了版本迭代速度。也导致市场上 App 版本分散,处理 bug 和投诉等也越来越麻烦。

  • 修复的 bug 需要等待下个版本发布窗口才能发布 …

在日常的应用开发中,把代码放到哪总是可以纠结很久,而且这种纠结消耗的时间丝毫不弱于给变量起名字。

MVC/MVP/MVVM.. 等等一系列架构里,关注点在 C 层,M 和 V 其实比较少提到。可能是由于这两层的定位过于纯粹,而 C 层跟业务有更加密切的关系,对其抽象的需求更强一些。

而日常开发中,M 层提供数据的角色很清晰,却不能够含糊对待,从后台获 …

从 2012 年之后,就再没有写过总结,经历了 2013 的彷徨,2014–2015 的状态回归,2015–2016 生活发生了巨大变化,感觉该简单总结一下。

2013

工作

一年都在挣扎,大公司病去到创业团队变成一颗毒瘤,工作不得要领,很是慵懒地度过每一天。中午 13:00 起床吃饭遛狗,凌晨 3 点睡觉。

整一年,都在写爬虫,接私单,糊里糊涂做完了几个单,可是资金一直没有到位,到年底几个项目都有黄了的迹象,从创业团队离开之后,好几个月都在花过去的积蓄,很慌。

那个时候想明白一个道理,可能这样自由的环境并不适合我,还是想要一个稳定的环境做点技术工作,而这一年技术上几乎没有进步,大部分都是在“消耗”自己过去的东西,只是写爬虫的时候需要考虑一些系统设计的问题略有收获。

生活

陪着小四度过她最开心的一年,从把她抓在手心,到每天各种二逼的乱跑乱叫。

8月走了一趟青海湖,迷迷糊糊不知所措。

团队一步一步走过来,习惯使用纯粹的 SQL 来设计表和执行查询,为了满足非常丰富复杂的查询需求,我们的 SQL 可以写成几百行甚至上千行。

刚开始的时候,需求变化非常快,想法圈在整个产品发布前迭代了接近 30 个版本,几乎两周一次推倒重来,我们开始考虑如何在已有的基础上做一些抽象工作以减少劳动力。

外面很多的数据框架不能照搬过来用(很难满足如此快 …

平时上网,DNS 是卡着网络的第一个口,一个不好的 DNS 可能把人带的满世界跑。举个例子:老婆公司的 VPN 服务器明明在广州,DNSPod 的 DNS 却把他解析到美东,如此一来,每个包都有接近 400ms 的延迟,而换成 114 就可以顺利解析到广州了。

黑/白名单策略

所以家里找个机器部署一下 DNS 缓存很有必要,配合这份中国域名列表,可以区分国内外域名的 …

这里介绍一下如何自己搭建一套 SSL Proxy 的方案。

Server(stunnel + squid)

参考 Digital Ocean 这篇文章。给 OpenSSL 打上 CloudFare 这份补丁用以支持 ChaCha,对于移动设备性能更好,事实上,x86 的性能也有显著提升。

openssl $ ./config --prefix=/opt/openssl --openssldir=/opt/openssl no-shared -fPIC && make && [sudo] make install

然后用这个 OpenSSL 编译 stunnel 即可。

stunnel $ ./configure --with-ssl=/opt/openssl && make

Client(haproxy)

haproxy 在 1.5 已经完整支持了 SSL Proxy,所以客户端不再需要运行 stunnel 的 client 模式,同样用打了 ChaCha 补丁的 OpenSSL 编译 haproxy。

make TARGET=linux2628 USE_OPENSSL=1 ADDLIB=”-L/opt/openssl/lib -ldl” ADDINC=-I/opt/openssl/include USE_TFO=1

安全

Server 端开启强校验,自己生成根证书,客户端生成密钥用根证书签名后下发,并用 fail2ban防止错误碰撞

性能调优

主要参考 Shadowsocks 的优化,线路稳定的话还可以用一些 CDN 上用的 TCP 优化来提高吞吐率和初始化速度。

Squid 可以直接不缓存,节省内存,还可以减少由于磁盘速度跟不上网络的窘境。可通过以下命令查看缓存命中率:

$ squidclient cache_object://localhost/info | grep hit

另外因为 stunnel 是流量透传,Squid 实际请求的时候还是需要重新请求 DNS 的,在 Server 端做 DNS 缓存可以有效提速。

Frank Xu

WeRead at WeChat. Growth Analyst, Data & Infra Engineer.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store