热烈祝贺空叉星舰SN15飞行任务圆满成功

上一次SN11试飞在三月25日,爆炸声中,星舰化为灰烬,一同付之一炬的还有我那一场投身航天事业的一场大梦。

After careful considerations, I’m afraid that the team has made the decision not to move forward with your candidacy. They feel they have other candidates with more directly applicable experience to address their current needs.

那天,傍晚邮件提示音的响起,最后一封来自@spacex.com的邮件为一个半月的SpaceX面试之路画上句号。

2021新年刚过,手中又拿到了进入敏感行业(ITAR)的最基本的通行证,我决定去试试自己的生活和事业是否能与太空和宇宙产生交叠。无论是看发射现场直播,还是事后的大红瓶,或是各式各样新闻,甚至是三体、云图这样的故事——我相信人类必定走得更远。

做了些功课,西雅图有越来越多的航空航天公司在此落脚——马一龙的空叉和贝佐斯的蓝色起源在这里都设有办公室,其余的还有些各式各样做卫星,做雷达,做传感器的小公司。作为一个码农,我“深知”哪里都少不了一个程序员,于是便去这些公司的网站的招聘页面试试水。果然,与我想的完全相反,几乎没有几家小公司对程序员有兴趣,招募的基本都是射频,无线,卫星等我的老本(科)行。真正有软件工程师职位的也就是SpaceX和Blue Origin这样的“大厂”了。快速浏览了一下,大部分职位还都与卫星挂钩——给卫星编程,需要有在类似卫星这样的硬件平台上搭建软件的经验。捂脸。SpaceX的大本营不在这,不过星链的大部队却在这。七七八八一排除,没想到还真剩下俩仨个看似靠谱的job description,于是精心修改了几份简历,欲投其所好。其中Blue Origin投的似乎是一个开发硬件测试环境的岗位,而SpaceX则投了一个Starlink做CI/CD的,以及一个做Starlink Network的岗位。回想一下过去在AWS和Azure的经历,无论是Network还是Kubernetes都还算挺合适。

一月份的我还是很清醒的——中美关系急转直下的尘埃正压在我身上,不出一周Blue Origin的拒信就收到了——Thank you for your interest。:)之后也没再收到新的消息。直到一个月后。

没想到SpaceX的HR竟然向我伸出了橄榄枝。那个时候我猛地一惊,简短的聊了一下之后我便顺利拿到了第一轮电话面试。根据HR的说法,这轮面试应该是一轮技术面试,我两手一摊知道没啥面经可寻,想着看招拆招,可没想到整轮面试竟然完全是行为面试。当时的我还完全没开始准备行为面试,根本不知道前东家的STAR必胜法宝,就这样瞎扯了一小时。提心吊胆的过了几天以后竟然得到了HR的Good news。与之而来的却是另一个Big Test。

我被要求在48小时内写一个程序,给定输入与输出。HR邮件中说,这个任务一般需要4-6小时,拿到题目后你有一个半小时的时间可以问问题。我琢磨——给定输入与输出写程序,这不就是ACM嘛。紧接着我便度过了让我记忆犹新的2021年二月的最后两天。

一份pdf收到,果然和Starlink有关,虽说给定了输入,输出却没有一个标准答案。记得那个周五可下了一场好雪,周六一定是个粉雪天。我决定给自己点压力,通个宵——如果进度不错差不多搞定,周六就去爽一把,不然就乖乖在家为梦想流泪。/* NDA */ 还记得大概用了两三个小时在网上各种寻找题目背景来理解题目,又花了一个小时搭建了一个程序框架,最后写完全部算法的时候已经天亮了。当时做完题像是回到了学生时代,通宵写程序然后提交到一个在线终端看到程序跑通以后打印出来四个大大的等宽字母PASS,那种激动。于是直接起床带上装备出发雪场!

当天的粉雪果然值得!PNW的西雅图和水晶山竟然滑出了干粉的感觉。全天题目抛之脑后,晚上又有火锅下肚,人间值得。周日一大早起来,决定花费剩下的八个小时做一些收尾工作——写注释,写测试,写文档。一个小小程序被扩展成生产环境预备的小项目。晚上提交后,自信满满迎接三月。

两天后果然迎来了下一个Good news。也又一次迎来另一个surprise。我要在招人的这个组全组面前做一个presentation,介绍我之前写的这个程序——如何解决这个问题,为什么我认为我的解决办法足够好,以及哪些进步空间。之后还有一轮白板编程(终于)以及一轮和Hiring Manager的聊天。在微软,大家常常就是对着Wiki或者一份Word文档做演讲,现在又要我重拾PPT技术,难!好在之前程序写了不少内容,也做了挺多的探索,PPT的框架很快就建好了。不过还是敌不过紧张,面试前一天晚上辗转反侧不能寐,最后还是决定写一份演讲稿,一写就写了3000字——半小时的演讲,大致每分钟100个词。

当天,我早早准备好视频会议,加入房间。没想到除了我之外竟然没有一个人打开摄像头——果然是我一个人的表演。为了掩饰尴尬,我迅速打开PPT,开始present,并关掉我的摄像头……演讲在所有人都mute的蜜汁安静的情况下进行。半小时后,大家陆陆续续开始提问题,好在问题并不刁钻,我也“见招拆招”。之后的两轮面试相较于之前的面试经历就正常多了,虽然面试官也都不开摄像头(整个公司显得极端神秘),题目虽然从未见过但也不算出格。与老板的谈话主要还是介绍组里情况,项目进展。谈得最多的词还是technical debt,小公司成长不易。一个下午下来,感觉像是结束了一场野雪trip,累。

接下来的时间开始了真正的煎熬。我对我的面试表现虽然充满自信,却完全捉摸不透对方的反应。看不到脸也无从捉摸表情。当时我在blind上面已经了解到了SpaceX的“臭名昭著”的WLB还有与微软不相上下的低薪,但是我意已决——爱是不需要理由的。之前和朋友提过一个理论:爱+工资=常数。现在的爱无穷大,谁还关心余项呢。一周后,HR打来了电话。Congratulations! 这样的开头简直让我的心狂跳。万万没想到竟然还有一轮——Mark Juncosa。这感觉像是“通天河遇鼋湿经书”。HR言辞凿凿,这一轮就是一个聊天,了解一下公司文化,你也展现一下你的爱和承诺。

于是又过了一周,我接通了这通来自德州的电话。在挂电话前,我问出了我的最大的的疑问——你觉得离人类登上火星还有多久?

电话结束以后我久久意难平。没想到这意难平竟然难了整整两周,直到最后SN11的爆炸。

现在SN15成功,我意也已平。所以还是要献上最大祝福,希望Mark不打诳语——2030年前在火星留下人类的脚印。

茭白与荸荠

在遇见茭白之前,偶尔也会买几次荸荠。遇见——是前几周突然间在超市里见到了新鲜的茭白,不被提醒的话差点就会错过。放在泡沫箱里,整齐安静的摆放在冰块之上——就像小时候水果摊卖的荔枝。茭白的白色差不多快要融在泡沫箱的白色里了,一捆一捆被透明塑料袋套着。乖乖,要八刀一磅。上次吃到茭白还是在去年去湾区的时候下馆子,在饭店里惊现清炒茭白。当时还好奇得询问老板茭白是从何得来。

小时候作为一种时令菜,茭白每年总能在固定的时候出现在家中的饭桌上,或者清炒,或者油焖,清炒时切成细丝,油焖时切成滚刀块。茭白有一种说不上来的独特味道,像笋——既是说口感,也是说样子。笋的经典菜肴不也是清炒和油焖嘛。样子上,茭白和笋都是被一层层的壳儿样子的外衣裹着,笋的外衣是黄的,茭白的则是青绿色。辨别味道时候,最大的特点就是茭白带着水甜味儿,笋则带着山中的泥土的土涩。

来美国许久,很多江南的蔬菜这里都见不到,譬如茭白。所以当发现超市里竟然看到了新鲜的茭白时免不了心潮澎湃——这据说是非本土的入侵物种啊!茭白长在水里,像水稻,据说也会长出菰米,可从未见过吃过。但是茎因为寄生了一种独特的真菌而膨大变成了茭白。这样奇怪的组合让本身的蔬菜长成了一块肉。我果断下单,回去开火食之。果然是那个味儿——特别的鲜甜口味,在翻炒的过程中吸收了汤汁变得柔软,切成丝的茭白细长像是面条,切成块的茭白在酱油沁润下又像好似杏鲍菇,牙齿咬下去能感受到一丝丝的纤维带来的阻力,爽脆又滑嫩。

果然是时令蔬菜,再来超市时就已不见踪迹。不过好在发现了网购渠道,又下单一回,还邀请了从未感受过新鲜茭白风味的东北小伙也来尝个鲜——茭白、毛豆和肉丝的完美组合,好评。

然而心血来潮写这篇文章却非深夜回味茭白美味时嘴角留下了感动的泪水,而是吃了下午才买回来的荸荠心生愤懑。不甜,不脆,不白,不嫩,甚至不新鲜。理想中的荸荠(小时候才不知道这俩字怎么读怎么写,总喊之为“菩荠”)是个个大而饱满的。棕红带紫的硬皮下面应该是雪白色或带一点点嫩黄的牙白色。咬在嘴里像咀嚼甘蔗一般充满汁水,又好像鸭梨一样沙沙的颗粒和纤维的口感,甜味好像是未熟透的西瓜,不似汹涌而来如蜜,却清爽像春天的溪水。嗐,就该春天吃,现在我凑啥热闹。口中嚼蜡,甚至略带有变质的酸苦味,果肉不再洁白,有些地方变成棕色,有些又发黑。不得已,吃了大半,丢了小半,懊恼。

说到荸荠,就会想到江南,于是乎,不得不想到才吃过的茭白。说起来,还有菱角,还有莼菜……原来,它们还有个组合,叫水八仙啊。

Takeaways from Building a Static Website on Azure

Several official documents have already described clearly about how to build a static website on Azure. By following the step-by-step tutorials, one could successfully create its own website without much to bother with. I have collected the scattered pages together which belong to different components here for better references.

After this step: <storage_account>.<region_code>.web.core.windows.net (primary endpoint) is created.

  • https://docs.microsoft.com/en-us/azure/storage/blobs/storage-custom-domain-name (option I)
    This is an easier option for one to enable custom domain by adding a CNAME record in one’s www subdomain to direct traffic to the blob. However, this does NOT allow one to either access the static website via the root domain (without www prefix) or secure the website with HTTPS. Since my goal is to achieve both, an Azure CDN is required.

After this step: CNAME record www.<domain_name>.<domain> -> <storage_account>.<region_code>.web.core.windows.net (primary endpoint) is created.

  • https://docs.microsoft.com/en-us/azure/cdn/cdn-storage-custom-domain-https (option II)
    The reasons of using Azure CDN are straightforward - support HTTPS and rules engine for redirection. This is the tutorial describing how to access storage blobs using an Azure CDN custom domain over HTTPS, which links to multiple documents below:

    After this step: <endpoint_name>.azureedge.net is created.

    • https://docs.microsoft.com/en-us/azure/dns/dns-delegate-domain-azure-dns
      This one talks about adding a CNAME record mapping to the destination CDN endpoint and associate the domain with the CDN endpoint. However, what is missing here is how to map the root domain to the endpoint. While a CNAME record cannot be placed on a root domain, an A record could. One piece of information sit elsewhere illustrates how to point zone apex to Azure CDN endpoints. With the help of the A record, one can access the site using domain without www prefix.

    After this step: A record www.<domain_name>.<domain> -> <endpoint_name>.azureedge.net is created; A record <domain_name>.<domain> -> <endpoint_name>.azureedge.net is also created;

    • https://docs.microsoft.com/en-us/azure/cdn/cdn-custom-ssl
      This is a simple manual of configuring HTTPS. The note left here is that CDN-managed certificates are not available for root domains. Since HTTPS is already available for www subdomain, redirection with the rules engine could be an easy choice.

    After this step: HTTPS on www.<domain_name>.<domain> is enabled; HTTP 301 HTTP -> HTTPS is enabled.

    After this step: HTTP 301 <domain_name>.<domain> -> www.<domain_name>.<domain> is enabled.

After setting everything up, the redirection chain is ready.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
>>> http://cheng.st

> --------------------------------------------
> 301 Moved Permanently
> --------------------------------------------

Status: 301 Moved Permanently
Code: 301
Location: https://cheng.st/
Server: Microsoft-IIS/10.0

>>> https://cheng.st/

> --------------------------------------------
> 301 Moved Permanently
> --------------------------------------------

Status: 301 Moved Permanently
Code: 301
Location: https://www.cheng.st/
Server: Microsoft-IIS/10.0

>>> https://www.cheng.st/

> --------------------------------------------
> 200 OK
> --------------------------------------------

Status: 200 OK
Code: 200
Server: Windows-Azure-Web/1.0 Microsoft-HTTPAPI/2.0