为什么云计算服务是亚马逊先做出来?

Image result for aws google cloud azure最近看了一个知乎的帖子,大家讨论为什么是Amazon先把云计算服务做出来,而不是Google。类似的问题我遇到过好几次了,之前还在亚马逊的时候,我觉得利益相关等等原因,自己不太适合回答这个问题;而现在,又看到各路人马大神已经把这个问题从各个角度分析得底朝天了,于是觉得似乎又没有太大必要了。不过现在,回头看到这个帖子的时候,我还想再从我的视角总结总结,不只是为什么Amazon先把云服务做出来,还有为什么现在它可以一路领先。虽然说Google也是云服务的三驾马车之一(另两驾是Amazon和微软),但如今许多方面它都和另两驾还有不少的差距。我记得刚加入Oracle的时候,但凡听说我从Amazon来,

[……]阅读全文

关于RESTful不足的思考

Related image在Amazon的时候,公司内有大量的组来维护不计其数的service,而service之间的通用通讯方式是公司内部的一个框架,协议是自定的,客户端也是内部的;现在到了Oracle,我看到这个变成了RESTful,也就是说,协议本身变成了最常见和适用的一种。我看到有太多论述RESTful优点的文章了,而实际工作中也确实有所体会,比如接口和报文的可读性好,不需要特制的客户端,上手和调试都比较容易等等。但是,如果看到某个东西被冠以过多正面的评价,就要当心了。我也慢慢地体会到了一些问题。不过,在谈谈我的思考之前,我想先明确一下我对REST的认识,而这点,鉴于历史原因,也是我不太愿意花时间争辩的内容。我

[……]阅读全文

推荐最近玩的几款独立游戏

如今各种平台上的大作满天飞,可是不知道有多少人和我一样,很难对这些大作燃起热情。可是凭着怀旧的心态,去回味一下老游戏,或者所谓的“经典”的时候,却又发现时过境迁,物是人非,一样缺少玩下去的动力。平时工作生活就很忙了,留下属于自己的时间不太多,也不太愿意沉迷太多的时间给或新或老的游戏,再加上随着年龄的增长,似乎对越来越多的事情失去了兴趣。直到某些“独立游戏”出现,由于资金、人力的关系,它们大多没有绚烂的画面,繁冗的剧情,以及漫长的游戏时间,但是由于开发者可以决定它们的走向,始终围绕核心想法构建,于是它们或精致或别样,总能把某一游戏性发挥到极致,让我重新找到许多游戏的快乐。我不算什么资深玩家,在这

[……]阅读全文

关于国内程序员肉身翻墙

Image result for 翻墙本来是没有倾向谈论这个话题的,但是最近邮件或者微信问我这个问题的国内程序员朋友很多,我在这里一并介绍一下,也算作简单的解答。同样的问题就直接参阅即可。事实上,我很乐意收到这样或者那样的问题,也包括肉身翻墙这样的话题,混熟了的话瞎扯也开心。但是也请大家注意一点礼貌,有好几次有程序员没头没脑地微信上跳出来问问题,然而话都说不清楚,或者连个招呼也不会打,更有甚者二话不说直接把log贴过来让我看问题,实在是让人觉得很不舒服。有些我回复了,有些我实在是不想回复了。另外,具体的问题我比较好解答,像有不少人问我,“你觉得美国怎么样?”,我都不知道从何说起。具体问题还是邮件沟通更合适,我答复起来也更舒服,微信[……]阅读全文

评审的艺术——谈谈现实中的代码评审

曾经写过一点关于代码评审(code review)的文章,比如这篇这篇,现在觉得关于它的认识又有了不少更新。软件工程的技术和实践分成两部分,一部分是和书本知识一致的,大约占一半,这部分基本上在大学里就可以学,自学只要方法得当、刻苦努力也可是途径;但是第二部分来自于实际团队、经验,内容通常无法从书本当中获得,而且难说对错,不同的人和不同的经历造就了不同的认识。代码评审就是第二部分颇具槽点,可以大加讨论的典型。

代码评审是展现个性和性格的途径

我本人特别反对一种颇为常见的观点,就是“一个良好运作的项目,不同的人,应该写出一样的代码”。我非常理解这种观点的初衷,一个良好规范约束的团队中[……]阅读全文

接触Python后的一点感受记录

python最近因为工作的关系开始学习Python了。以前从不曾正儿八经地学过,如果说工作学习经验带来改变的话,那么编程语言的学习就是个很好的例子。如果在十年前,我要学习Python的话大概会买本系统介绍的Python教程,然后一页一页慢慢看,估计能够啃完大半本,跳过一些自认为次要的特性。等到在项目中使用已经得是一两个月之后了吧。但是如今我显然不太会做一样的事情,我现在会拿着我那些熟悉的编程语言来比较,不同的特性上面,Python是怎样的,是先进还是落后,适合解决什么问题,在哪些领域可以大行其道,但在遇到哪些问题的时候事倍功半。

想起以前接触过的编程语言里,事实上有一半都不能算系统地学过,大致上只是零散地

[……]阅读全文

写在Oracle入职一个月之时(兼招人帖)

OCI加入Oracle的OCI(Oracle Cloud Infrastructure)团队一个月了,感触颇多。事实上每一次团队的更换都是一次体验记录和整理的好机会。技术方面的东西有很多,在允许的范围内,我会在以后慢慢再谈,但是其他方面,现在我想稍微谈一谈,特别是和我的老东家Amazon比较地看。以下的文字更像一篇帖子,而不是文章。

先说工作中的生活。Amazon的总部在西雅图,整个SLU满大街走着大亚麻的人,但是OCI目前只有downtown两栋楼的几层,人数要少得多。对我来说,每天上班从van pool改成了bus,commute的时间代价略高,但由于车次很多,因此也能够接受。Downtown的

[……]阅读全文

开发环境上的代码同步

最近在搭建开发环境,大致的布局是这样的:一个专门的数据库VM,一个用于编译和代码执行的VM(dev virt,装的RedHat),还有用来写代码和运行这两个虚拟环境的Mac(local)。这里我需要一个工具,可以满这样的需求:

  • 能够把Mac上写的代码同步到dev virt上去。
  • 不需要手动触发,每当有修改,应该能够自动同步。

我把我的解决办法简单记录在这里。在接下去记录之前,需要回答这样两个问题:

  • 为什么需要把编译和执行环境放到VM里面去?因为尽量使得代码的编译执行环境接近于生产线。
  • 为什么要在Mac上写代码,而不在dev virt那个VM上写代码?因为在Mac上

[……]阅读全文

再见,亚马逊时光

IMG_6884新入职Oracle已经超过一周了,但是一直没敢下笔,写一点东西纪念将近6年的亚马逊时光,总有惶恐的感觉。现在觉得不能再拖了,文字不在多寡,仿佛一种仪式,把整个亚马逊的经历画上句号。离开老东家的时候,往往是喜忧参半的,并且难免对前任颇有微词。在我离开华为的时候,便是如此,多为感怀和想念,但是诚实地说,也有一些厌烦的情绪,于是有释放之后的舒坦。这其中的缘由,我在以前的文中写到过。但是离开亚马逊,我却仿佛不再有这些负面的情绪,除了感伤和怀念,便是感激。要说明的是,如今亚马逊的股票直往上蹿,它却远非完美,也有诸多令人遗憾的风言风语。我觉得它在某些方面可以被称为“美国的华为”,做企业的成就自不必说,但是

[……]阅读全文

《Person of Interest》剧评

POI

看完美剧Person of Interest(POI,疑犯追踪,下同),心有波澜,写一点点文字,零零散散,算是剧评。

我不觉得我是一个美剧狂热的爱好者,但是确实也看了好几部美剧。读书的时候开始看Friends(六人行),后来顺着相同的风格,看Two and a Half Men(好汉两个半),以及How I Met Your Mother(老爸老妈浪漫史)等等,都是很欢快的风格;另一条线看一些悬疑、枪战、罪犯之类的片子,比如最早看Prison Break(越狱),看24(反恐24小时),后来看Breaking Bad(绝命毒师),看Crime Scene Investigation(犯罪现场

[……]阅读全文

折腾的快乐

sde

先讲个故事

公司里有这么一个小小的差事,某一个月,每天都要把Excel的某一列的数据根据某种规则换算以后拷贝到另一列去。

DA(数据分析师)看了以后说,就手工完成吧。反正只有一个月,这件事情每天做3分钟,也没有多耽误时间。

TPM看了以后说,这事情每天做做很简单啊,写一张便签贴在屏幕上,每天就不会忘记了。

Dev Manager看了以后说,衡量一下这个很小的时间成本,用其它的方式来解决是不划算的,还是手工搞定吧。

……

不过地球上还有一种特殊的物种不同意。它门叫做程序员——这么重复性的劳动难道不能用脚本完成吗?

就是,用geek的脚趾头想一想,这还用问?

于是写脚本,调试,测试,整合,两个钟

[……]阅读全文

2017年总结

summary

一周前才家人送上飞机回国过年,这两个月要一个人安安静静呆着了,就从写一点东西回顾这个过去的2017开始吧。

健康

我总是把健康放在首位。就像我之前写的,健康是一个拥有它的时候不会注意到它的东西。Crohn’s Disease时不时回来找我,但是总的来说,仅仅急性地比较严重地犯了一次,其它都还可控,比2016年好;抑郁症的问题也基本得到控制,虽然有时候还会头晕,特别是天气不好的时候,这也比2016年好。除了药物以外,时间越长我越能够理解自己的身体,总的来说我已经很满意了。当然,要是没有一个比较好的状态,我也没有办法完成面试求职这些事情。

孩子出生以后,爬山的次数明显不如[……]阅读全文

时间投入上的权衡

time management

时间管理被很多人忽略了。被忽略的一个原因是,我们被洗脑洗得太久,读到的鸡汤文太多,觉得一个人的主观努力程度扮演了过度重要的作用。事实上,这里有两个问题,一个是如何评价目标的达成,特别是人一生这个大的范围内的评价,鸡汤文中总把一个人在事业上的“成功”列为最大的目标,但实际我觉得这只对一部分人成立;另一个是,即便这个目标成立,主观努力依然被高估了——或者说,主观努力当然重要,而且对于大多数人来说,天赋并无法起到决定性作用,但是,许多人的主观能动力是类似的,结果却大相径庭。这里面,除了主观努力和先天天赋以外,明显还有别的因素在起作用,而时间管理就是其中之一。

几年前写过一点关于时间的文字,不过都是

[……]阅读全文

Blog安全问题小记

xmlrpc

最近Blog遭遇了几个安全问题,折腾了几个钟头,在此记录一下。

最大的问题是blog访问时不时地出现“502 bad gateway”,即便不出现,latency也能达到接近三十秒。

于是登上vps去看原因,top命令发现CPU都用完了。靠,十个php-fpm居然都在满功率工作。研究了一下,通常php-fpm在没有请求的时候是不应该占用那么多CPU资源的,而且mysql也高,似乎有人在访问网站,但是去access log里面却没找到东西:

top - 02:08:12 up 56 min,  1 user,  load average: 10.18, 9.41, 8.68

[……]阅读全文

职业生涯下一站

career

水文一篇。

在亚马逊已经呆了五年多了,想起第一次换工作的情形仿佛还历历在目。如今,就在我还有半年多就将迎来我第十个工作的年头,经历了骑驴找马的面试,不久我将迎来第二次职业生涯的重大变更,下一站:Oracle,Bare Metal Cloud组。

我的工作经历,可以用多样来形容,也可以用乱七八糟来形容。其中的原因有客观的,也有主观的。客观的原因是项目和团队的需要,本来工程师团队如同资源池,就是要去解决不同的问题,这些问题是由当时的境况和市场决定的。主观的原因是,我本来就是一个领域涉猎相对广泛的程序员,而且兴趣三年两头自己都弄不清楚,有时候这未必是好事,但是这也让我得以尝试各种风格的项目和团队。

[……]阅读全文

几个系统设计问题的解决思路

曾经写过一些系统设计方面的思考(比如这个这个),但是最近准备面试,又接触了更多系统设计方面的问题。这里我想简单记录一些典型系统设计问题的思路。通过学习常见的系统,在心中形成一些问题解决的套路,以在思考和分析新问题的时候提供一些既定思路。很抱歉时间关系写得很简略,主要是提示一些思路和方向。

设计Tweeter
两种常见模型的trade off:

  • Pull on demand: merge x timelines
  • Push on change: async, read once to get them

缓存的设计,cache through

设计Web crawl[……]阅读全文

近期面试求职的经历和感受

好久没有更新了。回来报个到,也向关注和提醒我blog更新的朋友们道个歉。原因在于,最近非常忙,忙于找工作。现在下家还没有定下来,手头有几个offer,还在考虑中,但是很快会决定下来,然后更新更进一步的信息。无论如何,blog的更新已经恢复正轨。
通常人的一生中不会有太多属于自己的求职季节,尤其像我这样的,总觉得在一个地方需要积累,因而并不是频繁跳槽的粉丝。第一份工作在华为,我干了三年半;第二份工作在亚马逊,直到现在,超过了五年半。职业生涯的前方就将是第10个年头。

为什么是现在?

三年半前我通过L签证来到西雅图,而L签证是不能够更换雇主的,因而自然也不用考虑工作变更的可能性。去年[……]阅读全文

求第K个数的问题

一道经典的题目。给一堆乱序的数,如果它们从小到大排好,求第k个是多少。假设排列的下标从1开始,而非0开始。

这个问题如此之简单而熟悉,可它却可以是很多现实问题的某一个子问题的抽象。它本身相关的问题其实就不少,而且还可以不断演进,成为不同复杂程度的问题。

看到这个问题,脑海里的第一反应是一左一右红蓝两条分支——堆排序或者快排。Java中快排用Arrays.sort就可以了,如果是堆排序需要用到PriorityQueue。 用Arrays.sort写起来最简单(这里的参数校验都省掉了):

public int getKth(int[] nums, int k) {
    int[

[……]阅读全文

分布式系统中唯一ID的生成

其实老早就像写一点这个话题。几乎我见过的所有大型系统中,都需要一个唯一ID的生成逻辑。别看小小的ID,需求和场景还挺多:

  • 这个ID多数为数字,但有时候是数字字母的组合;
  • 可能随机,也可能要求随时间严格递增;
  • 有时ID的长度和组成并不重要,有时候却要求它严格遵循规则,或者考虑可读性而要求长度越短越好;
  • 某些系统要求ID可以预期,某些系统却要求ID随机性强,无法猜测(例如避免爬虫等等原因)。

独立的生成服务

比如数据库。最常见的一种,也是应用最多的一种,就是利用数据库的自增长序列。比如Oracle中的sequence的nextVal。有多台application的h[……]阅读全文

back to top