AMP Email——构建可交互的动态邮件

想像下你能在邮件里完成一个医生预约,更新预约,发表就诊体验留言,或者把喜欢的推荐产品加到购物清单里(wishlist),或者查看订单的物流信息,节省了打开多个Tab加载各种不一样的网页来完成一个任务的时间。

Robinhood又双叒叕宕机了——浅谈幕后黑手“Thundering Herd”

Robinhood是美国知名的零佣金券商,尤其在年轻人中特别受欢迎。它支持零手续费交易股票、期权和加密货币交易,开创了零佣金券商的一个新时代,以致老牌劲旅TD Ameritrade、Merrill Edge等近年来也不得不割肉加入零佣金的队伍。然而三月开来,受COVID-19持续蔓延等因素的影响,美股接连几日大幅度震荡,Robinhood在三月二号和三号的交易日持续挂彩——全站宕机,导致数百万用户无法交易,推特上一片鬼哭狼嚎。

我的2019技术之路小结

时间飞逝,19年即将进入尾声,子曰:温故而知新,作为一个在技术之路上孜孜不倦地奋斗的一线软件工程师,今天就来回顾总结下19年的技术之路,以作承上启下之用。

聊聊美国科技公司的compensation结构设计

在美国工作一转眼已经四年多了,在硅谷Google工作了一年半多,之后搬到了纽约加入了纽约的一家成长型创业公司Squarespace。加上这几年与身边同行朋友茶余饭后的交流,对美国科技公司的compensation\(薪酬\)结构设计有了较为清晰的了解。大部分刚在美国念完本科或者研究生的中国留学生在这方面所知甚少,导致在offer negotiation的时候吃了哑巴亏。希望这篇文章能起到一点科普作用,帮助读者更好地衡量offer,少走一点弯路。

基于testcontainers的现代化集成测试进阶之路

大型的软件工程项目除了大量的产品级代码外必不可少的还有大量的自动化测试。自动化测试包含从前端到后端甚至到产品线上不同模块和环境的各种类型的测试。一个比较经典的关于自动化测试分布的理论就是测试金字塔,是说在一个正常的项目中合理的测试数量应该是单元测试 > 组件测试 > 集成测试 > 端到端测试(系统测试)> 人工验证测试。

时间回到去年,德云社来纽约演出,在纽约的华人们全城出动,把林肯中心堵得水泄不通。上次见到这番盛况还是纽约国际电影节时是枝裕和的《小偷家族》首映,满眼望去都是穿着精致的亚洲面孔。 那场演出里郭德纲和于谦有一段相声叫“艺术人生”,从郭德纲阐述相声的艺术引入“艺术艺术,既要有艺,也要有术。只有艺没有术,曲高和寡卖不动票;只有术没有艺,作品难成气候。“ 第一次从一位在相声行业深耕多年的大师级的人物口里听到这番对于艺术的阐释,颇有醍醐灌顶之意…

自从12年开始入迷建站技术以来,Wordpress一直是我首选的建站工具。简单易学的PHP脚本语言,可本地部署测试的LAMP架构,丰富的技术社区资源,高度可自定义化的模块化设计,这些都是Wordpress吸引无数入门者的亮点。回首我刚开始折腾时,Wordpress最新的官方模板还是Twenty Ten, 第一次见到“娄琦彬的个人博客”网站标题赫然出现在Twenty Ten的标题一栏,内心激动不已,仿佛悟到了什么真谛。

提到Java没有人不想到大名鼎鼎的NPE(Null Pointer Error),可见广大程序员受其毒害之深。所以做接口设计的时候,一个好的习惯就是注明Nullbility。 对于Nullable的参数或者返回值,从Java 8后Optional 是推荐的方式,因为它强迫接口使用者显示进行空值检测。 但如果接口设计中是想注明非空的情况呢,通常情况下你会发现有两个看起来很类似的annotation, @NotNull 以及 @Nonnull, 而且你可能会发现代码库里使用两者的都有。但是,正如Stackoverflow上的这个帖子分析道…

举个例子:在windows系统中,有用户“Farmer John"(注意中间有空格分隔),在用户根目录下有用户的头像图片”C:UsersFarmer Johnphoto.jpg“。现在有一对图片操作的库函数foo,foo的输入参数即为图片路径,由于foo的实现不完善导致如果路径中包含空格符的话会有bug(比如遇到空格截断),但用户又不能修改该函数,更不可能为了这个bug而去修改用户名,此时的一个很好的hack方式就是用mklink来fix包含空格的那个目录或者文件。对于现在这个bug,可以这么解决…

收到SAE发来的云豆不足的通知,提醒我该去给他进贡铜臭了。话说我差不多已经做了半年的SAE的付费用户了,每个月交个10多元我那几个小网站差不多就能撑起来了,BAE从此就是路人了。不过由于上次github的Edcucation Package想到好像有送1~2的云主机优惠,于是就简单看了下。DigitOcean又有绑定信用卡太蛋疼也怕不安全,意外发现了亚马逊的AWS支持一年的free tier试用,花了点时间研究了下,最后决定把主机挪到AWS一年玩玩。 这是网站第二次大迁移…

It is a rule in math that the absolute value of a number must be no less than zero. Is it true in computer languages? Well, most of the case except one. Let me take C language for example.

For a 32-bits C interger, its value ranges from [-2147483648, 2147483647] .So for x = -2147483648, what is the result of abs(x)? 2147483648, -2147483648, 2147483647, 0 or something else?

闲的蛋疼又来改首页了。二话不说,先上结果:戳我!。 为什么要改版呢?一来老的版本看腻了。。二来之前那个内容太少,加上flickr老是被屏蔽,网页上就真没啥东西可以看的了。而且其实之前1.0的时候对移动设备支持不太好,基本在手机上就是废了…

很多情况下在写一些小页面时想用一些字符串模板,但Javascript又不原生支持字符串模板,只好用一些第三方库,但引用第三方库的缺点在于很多功能的冗余, 浪费前端加载时间和流量,甚至会造成命名冲突等问题。 其实有时候的需求很简单,不需要很高级的字符串模板功能,只需要像'My Name is {name}. Hello {herName}这样的线性替换就行。其实这个需求实现起来非常容易,四行代码就搞定了。如下…