时光机器

也不算毫无预兆,但是当连轴转的机器戛然而止的时候,还是觉得一脚急刹车发生太快了。

大约懵了个把小时吧,然后开始恢复职业习惯,计划风险、应对方案等等事项后,终于是得出了“应当以如释重负的心态面对此数十年难遇之时机”。

已经记不得上次过这样的生活是什么时候。一时间思绪仿佛穿越了时间机器。

(1)小帅侠初出茅庐,清理江湖名震阳台

也许那是某个暑假的一个上午,神清气爽却百无聊赖。万事安好,只是无数大头苍蝇在厨房与阳台之间穿梭不止,甚是讨厌。于是我祭出我的塑料宝剑,准备为民除害。

话说此剑乃母亲大人亲自为我置办,青铜色把手凸显主人历经世事、成熟老道,雪白剑身彰显主人品格高贵、光明磊落。这宝剑断不是后现代那种硬塑料材质加声光电的地摊气质,其剑身柔软而坚韧,任凭小朋友们互相砍杀,也决计不会伤及一毫一毛,剑身反复弯曲也不会伤及宝剑本身。

(此图来自知乎“林鸣谦”的一篇文章)

用这把宝剑击杀苍蝇是再合适不过了,然而其毕竟是冷兵器,美中不足却是其杀伤范围及其有限。一想到老师谆谆教诲,我决心一定要想出办法,用科学的精神、用现代的技术改善这种中华传统兵器。在家里有限的两室一厅里反复搜索了一番,我看上了一段电话话筒的线。

How to Keep Telephone Cords from Tangling | ThriftyFun

对不起,一时兴起贴上了旧式美国家庭里流行的超长搞笑电话线。我当时尚且年幼,还不能驾驭这么长的攻击范围,当然了,主要是当时住的房子的阳台也没有那么大。总之就是找到了如下这样的一段话筒线。

如此一般,中华古典武器与现代通讯技术得到完美整合,宝剑可以脱手而出,瞬息间电光火石,苍蝇无不血肉横飞胆颤心惊。击杀敌人之后,我只消心念一动,宝剑即刻回到我手中,当真是杀遍阳台无敌手。

只是如今再回忆起来,却不记得完事之后没有用肥皂水细细清洗后方才将宝剑收回到自己的枕头下面了。

(2)新世代仁感江城,护百姓义不容辞

话说那是另一个燥热的午后,大学里。我大抵是学一或是学二食堂干了五两米饭之后,正前往东九教学楼,心里正盘算着去哪座教学楼哪个教室更有可能实现今日之自习吹空调的人生巅峰。

只见斜刺里突然杀出一员老将,定睛一看,皮肤古铜,衣着褴褛,弓身向我走来。我站定后,问老者何往。且听老者一五一十道来:原本在关山工地干活,不想包工头拖欠农民工工资,前去找工头讨薪理论,却不想工头心狠手辣,纠集手下殴打老者,所幸老者一路逃亡到了关山口男子职校。如今举目无亲、走投无路,身无分文,饥肠辘辘,只求几块钱买顿中饭。

我一听,顷刻炸毛了,彼时和谐社会已成,万事安定,举目之处皆欣欣向荣,既愤于社会主义法治如何能容下此等违法乱纪之事,又怜老者竟遭此不公待遇。所幸今日遇到我,虽不如鲁提辖一般要拳打镇关西,却定要为老者讨回一公道。当即要老者带路去工地,我要质问工头为何做下此等伤天害理之事。

老者却说他害怕被工头抓回去,坚决不愿再去工地,只是几日没吃东西,想要买点吃的。我一听也觉得这是人之常情,人是钢饭是铁,当下应该先带老者填饱肚子。一抬头,韵苑食堂四字正映入眼帘。遂引老者入食堂坐下,当即买了一碗豪华版的面条端给老者,让老者先吃饱后我们再谈打算。

老者却是一口不吃,我又好言慰劝老者先吃饱再做打算。老者却说他因为害怕,吃不下饭。老者说又害怕工头追杀,只求一学生收留于宿舍住几宿,然后再做打算。我一思量,宿舍四个床位已满,怕是无法留宿老者。当下之计,只能求助有关部门。于是打了若干电话,如今时代久远,记忆模糊,大抵联系了保卫科、110等,将情形娓娓道来,均表示他们无法介入。正当两人呆立于韵苑食堂门口无计可施之际,再一抬头,却看到墙上赫然贴着“武汉市长热线”宣传海报。

于是拨通市长电话,尽管略感失望的是接电话的却不是市长,而是甜美接线员,一通义愤陈词下来,接线员当即表示让我们原地等待,他们马上联系解决此事。挂断电话后不出几分钟,先前表示不能管的派出所打来电话,问清楚所在地址,说马上派人前来处理。紧接着,一辆警车呼啸而至,两名警员前来问询。一番交涉下来,警员表示工地不是他们的管辖范围,如今之计只能送老者去救助站,救助站会帮助老者。我坚持老者人身受到威胁,要求警员帮助,一番纠结下来,警员同意驾驶警车将老者送至救助站。尽管路途稍远,我觉得好人就得做到底,于是生平第二次坐警车,一路护送。

(BTW,第一次坐警车应该是少年时期坐了一次如下的顺风车)

尽管路途漫漫,而我心里却想着约两千年前,玄德公亦是在此荆楚之地护送百姓。谁说当今人心不古?

七弯八拐之下,终于在武昌某条小路的若干商铺之间的一个狭小门面找到了救助站,警员将老者送入救助站,和救助站确认他们会给老者提供食物和返家的车票费用后,我方才随警车返回学校。

路上,警员教育我说将来不要掺和这样的事情,而且还打电话给市长热线,他们按规定是“一旦学校有警情,他们要X分钟到案“,现在开出出来这么远一旦有事他们不能及时赶到的。我严肃地教育了警员说如果每个人都对关心社会的事情,我们的社会会少很多不公与冷漠。

警车终于将我送回到韵苑食堂门口,我一看手机一下午已然过去了。一下午啥事都没做,却又好像做了件天大的事情。

补充记录

前不久一位“远房同学”发信息来问候我,说许久不见我发朋友圈,所以来问问我怎么样。于是才想到确实许久未曾发布一点儿信息了,甚至刷朋友圈都戒了。于是想着找个时间,把各种荒废的工具、记忆都拾掇一番。

先说说何谓远房同学。就是本科期间系同一学院的同学,原来念书的时候并不认识,大概也没有一起上过课,反倒是大流行病期间各种抓马的时候留意到群里几位北美的同学,有舌战群儒,有筹措抗疫钱款物资的,好几位都是个性豪爽,三观爆棚的。于是加上了联系人,偶然招呼一声,并给他们按上了远房同学这样一个头衔。

再说各种荒废的工具与记忆。

自从大流行病开始,迎接来了家里的小妞,经历了辛苦而又甜蜜的各种挑战之后,我们感觉似乎“安内”的任务已然井井有条了,于是太太和我两人先后决定开始“攘外”,先后离开了舒适的原公司决定进一步挑战下一个目标。

太太加入了一个离家比较近的公司,还是老行业,hybrid模式时常去办公室;而我也在待太太工作稳定后,加入一个小小的创业公司,remote模式。于是完全离开了大城市的喧嚣。天气暖和之后,一有机会就出去溜达,看到夏季的处处或风景如画,或静谧和美,于是就和太太感叹四年前来这里看房之时还在幻想如何能过上宁静的田园生活而不放弃现代职业发展、也不必伤神于过长的交通时间。不想到如今美梦成真,而人心却又不肯止于此,开始追求下一个目标。不禁又要问出“这到底是人性的扭曲,抑或是道德的沦丧” – 为我们的场景翻译过来便是,这到底是孜孜不倦的积极向上追求还只是人心不足、贪欲无穷的表象?

自从加入和新公司,显然比起此前照顾瑶瑶期间的原来公司一年休假四个月忙碌多了。不过也算是意料之中,基本达成了关于职业、情绪、家庭的几大预定目标。

Farewell

It was November ***, 2010. The weather was so good. I arrived at the Shenzhen office one day before my first day, it was not a mistake but a drill. I was so nervous about the traffic because it was my first time working at the central business district of Shenzhen. “A drill during ruah hours is necessary to make sure I can meet HR at Morningstar on time the next day.” I thought.

So I did a drill. “Man, I am going to work at a high-end company,” I said to myself at the lobby of the office. It sounds clumsy today, but it was the truth – I was single and a nerd.

The onboarding process was fantastic, so was my entire journey at Morningstar.

Then I worked on a lot of exciting things with our Advisor Workstation crew. At the same time, I met my wife at the Morningstar Shenzhen Volunteer club.

It was September ***, 2016, the colors of the sky were dazzling when I looked through the porthole. I received my second offer from Morningstar, so we migrated to Chicago. “Man, I’m going to work in an English-speaking country, but my English score was terrible back in college, and I had never traveled abroad,” I said to myself on a flight from Hongkong to Chicago.

Then I enjoyed inspiring work in the Product Service, EAMS, and Financial Planning teams. During the pandemic, I welcomed my first baby girl, now we’re a family of three.

It was a long way – Morningstar’s unlimited opportunities helped me build my career and my whole family. It was such a short time – I feel like I didn’t get to spend enough time with all my Morningstar colleagues and friends yet.

February ***, 2022 is my last day at Morningstar. I am so thankful for the privilege to work with my Morningstar colleagues over the past 11 years.

My family and I will still live in Naperville. Let’s keep in touch. My email is fabiushust@hotmail.com and my LinkedIn is https://www.linkedin.com/in/fabius-chiang/.

I will miss everyone! I wish you the best of luck and stay healthy!

pic

令人害怕的小老虎

在遥远的东方,有一片大陆,人们把那叫做亚欧大陆,亚欧大陆的东边,有两条又宽又长的河流。其中南边的河流特别长,住在那附近的人们把这条河流取名叫做长江。

长江特别长,从西往东流,当它流经一块低洼地的时候,水就积蓄在这块地里,后来人们把这块积水的地方叫做洞庭湖,湖的北边被称为湖北,湖的南边就被取名为湖南。

湖的南边不太远的地方,有一连串高山,被人们叫做衡山。很久很久以前,衡山附近还没有住很多的人类,山峰上、山坡上和山谷里到处都覆盖着茂盛的植被,有森林,也有灌木。山峰和植物给动物们提供了可以隐藏的安全的住所,而且还提供各种丰富美味的食物。于是很多的小动物都非常喜欢居住在衡山附近,衡山附近有数不清的各种小动物,有小猫、小竹鸡、小猴子、小穿山甲、小老鼠、小兔子、小娃娃鱼、小青蛙、小老鹰、小豺狗、小老虎等动物。

其中有一户动物家就住着小老虎,再过几个月小老虎就要两岁了。其他动物都比小老虎年长,一直都很照顾小老虎,常常和小老虎一起玩耍。

可是最近情况发生了一些变化,小老虎发现其他小动物都越来越害怕自己了。比如当大家一起分享食物的时候,小老虎觉得口渴了,于是小老虎就大叫一声想要拿到喝水的杯子,但是不知道为什么其他的小动物就一哄而散了全部都溜走了。

这一天小老虎在路上走着,遇到小兔子。小兔子正在吃胡萝卜,小老虎觉得胡萝卜又美味又健康,也想尝一尝。于是小老虎掏出自己的小芹菜想要和小兔交换胡萝卜。小老虎走上前,向小兔子大叫一声,想要和小兔子交换,可是没有想到小兔子被吓了一大跳,都没有来得及和小老虎说话就一溜烟地逃跑了。

小老虎很纳闷,可是他也不知道为什么。

于是小老虎继续向前走。小老虎走着走着,遇到小猴子。小猴子正在玩耍它从地里刚挖出来的竹笋,竹笋倒过来之后简直和陀螺一模一样,小老虎觉得有趣极了,也想玩一玩。于是小老虎掏出自己的小积木想要和小猴子交换竹笋。小老虎走上前,向小猴子大叫一声,想要和小猴子交换,可是没有想到小猴子被吓了一大跳,都没有来得及和小老虎说话就窜上了一棵大树藏起来了。

小老虎很纳闷,可是他也不知道为什么。

小老虎继续向前走。小老虎走着走着,遇到小老鹰。小老鹰正在读一本介绍云彩的书,小老虎从来没有飞翔过,他也很想通过读书知道云彩到底有多少种颜色。于是小老虎掏出的自己的小人书想要和小老鹰交换书本。小老虎走上前,向小老鹰大叫一声,想要和小老鹰交换,可是没有想到小老鹰被吓了一大跳,都没有来得及和小老虎说话就飞上天空藏到白云中不出来了。

小老虎很生气,又很伤心,为什么其他的小动物都不愿意和他交换,甚至都没有和他说话。于是小老虎回到家把今天的遭遇告诉了妈妈。妈妈听了之后,告诉小老虎说,当遇到其他的动物时,如果小老虎需要和他们说话,就要用真正的语言表达自己的需求,而不是遇到想要的食物或者玩具就大叫一声。其他的小动物可不明白小老虎大叫一声是什么意思,只有用大家都能明白的语言,大家才可以互相帮助、分享食物和玩具。

小老虎听了之后,这才恍然大悟。以后遇到其他的小动物,当小老虎想要和他们说话的时候,小老虎都用礼貌的语言表达自己的意愿,再也不会大叫一声了。从此以后,其他的小动物再也不会突然被小老虎吓坏了。于是小老虎和其他的小动物一起继续住在衡山,他们一起分享各种好吃的和好玩的,开心极了。

Tech Spike and Estimation

I didn’t really expect this personal entertainment project would cause much attention though, recently my friend started to ask about the progress of AirCares. One of my project manager friends started asking me if I need aid for project management. Sigh, what should I say – am I impacted by the global supply chain crisis? (which is true actually). Anyway, after recovering from some unexpected errands, here is the update!

The conclusion is here: Azure IoT Service Spike (/2021/10/23/azure-iot-service-spike/)

Tech Solution

The whole system includes basically two parts: a centralized server-side controller and a few clients which either provide status from sensors or stand by for executing some actions.

Client

I’m neither a hardware engineer nor interested in hardware for a long-term career goal, so I’ll just choose a popular, affordable single-board computer as far as it works. Not to say my friend Sean even provided me his project experience.

Then I’ll use Python or Node.js to write a small client-side program to collect temperature data and send signals to drive the circulation fan.

Server

A very nature idea for the server-side is Lambda+Api Gateway. While Lambda + API Gateway is nothing new to me, I was thinking if it would make more sense for me to explore the IoT service provided by popular Cloud Platforms.

I turned to Azure for two reasons: 1. I have had a personal Azure subscription with monthly credit, so I don’t need to pay extra money for any Cloud service as my traffic will be just minimal. 2. If there have been wheels, at least let me try if the wheels meet my requirement before I reinvent my customized wheels.

Budget

As I mentioned – I am really impacted by the global supply chain crisis, the inexpensive $10 Raspberry Pi Zero W is out of stock in adafruit. So I still need to figure where can I find a supplier without paying too much for the product or shipping.

ItemQuantitySubtotal
Raspberry Pi Zero W1$10
Raspberry Pi Zero W (with header)1$14
DS18B20 Digital temperature sensor + extras4$15.8
Premium Male/Male Jumper Wires – 20 x 6″ (150mm)1$1.95
Adafruit STEMMA Non-Latching Mini Relay3$17.85
STEMMA JST PH 3-Pin to Male Header Cable – 200mm3$3.75
Premium Female/Female Jumper Wires – 20 x 6″ (150mm)1$1.95
Premium Female/Male ‘Extension’ Jumper Wires – 20 x 3″1$1.95
Adafruit Perma-Proto Half-sized Breadboard PCB – Single1$4.5
Total$71.75

Estimation

EpicEstimation
Manually create server-side Azure resourceSmall
Details of server-side Azure FunctionMedium
Build client-side softwareMedium
Build client-side hardwareLarge
Manage server-side resources per IaCLarge
Build extra QA environment plus CICDMedium
System monitorSmall

Azure IoT Service Spike

Architecture of AirCares

Architecture of AirCares

Summary of the POC

Notes of the Spike

  1. Basic concepts: events, insight and action: https://docs.microsoft.com/en-us/azure/architecture/example-scenario/iot/introduction-to-solutions
  2. Create a IoT Hub: https://www.youtube.com/watch?v=A4TKvsLu2Yw
  3. Quick start of IoT Hub: https://docs.microsoft.com/en-us/azure/iot-develop/quickstart-send-telemetry-iot-hub?pivots=programming-language-nodejs
    1. Get connection string of the IoT Hub: az iot hub connection-string show –hub-name ${nameOfIoTHub}
    2. Run a simulated device:
      1. Create a device
      2. run https://github.com/Azure/azure-iot-sdk-node/tree/master/device/samples/pnp
    3. Listen the message sent from the simulated device: az iot hub monitor-events –output table –device-id ${nameOfDevice) –hub-name ${nameOfIoTHub}
  4. Create logic layer to process events from IoT Hub: https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-event-iot-trigger?tabs=csharp
  5. Use Azure Function
  6. Send Cloud to device message:
    1. Overview: https://docs.microsoft.com/en-us/azure/iot-hub/iot-hub-devguide-messaging
    2. Details: https://docs.microsoft.com/en-us/azure/iot-hub/iot-hub-node-node-c2d
    3. Notes: the connectonString for device and service can only be used for specific purpose correspondingly.
  7. Azure loggin system

Work journal of AirCares

Timestamp: 9/11/2021 1 hour:

explored the IoT architecture, Cloud platform options, and hardware solutions.

  • http://hubbins.github.io/post/sensor-part1/
  • https://opensource.com/article/21/7/temperature-sensors-pi
  • https://www.circuitbasics.com/raspberry-pi-ds18b20-temperature-sensor-tutorial/
  • https://docs.microsoft.com/en-us/azure/architecture/reference-architectures/iot
  • https://www.adafruit.com/shopping_cart

My Sabbatical Projects

This is no news – the pandemic is impacting everyone now. My problem is, it has been the 4th year since my last time visiting families in Asia because all previous travel plans were interrupted by all kinds of reasons.

Every four years, Morningstar provides a generous fully paid six weeks sabbatical to its employee. I was about to spend my six weeks sabbatical back in Asia but now it seems unreachable. So I decided to spend the six weeks in the US. Travel domestically? I hope I won’t be the one help spreading the virus.

So finally I choose to stay home for my personal projects:

1. An engineering project: I’d like to complete a small engineering project. I want to ensure I won’t be bored while coding is entertainment to me. The other reason is, I hope this small project can provide insights and reminders to my second project.

2. A summary project: I started my career journey 13 years ago. I worked on a lot of projects, enjoyed various tech stacks, pursued open-minded leadership, experienced innovation from waterfall to agile and on-premise to cloud. But I was always busy, either for work or for my family. Though I do summaries and exchange ideas with my wife (she works in the software product management domain) periodically, I’ve never gotten a chance to aggregate those ideas, approaches, lessons, and opinions with a dedicated time. It’s time.

For the engineering project, I prefer to do something I am not so familiar with, like IoT, but I didn’t find a real fun and useful project yet. While I was using Excel to manage the cashflow of my family, I plan to create a simple tool to help me, and probably other folks who think it’s overkill to hire a financial advisors. If you have any ideas about small projects, it’s not too late yet and I would appreciate it!

For the summary project, I’ve started the agenda of the summary. I was a bit surprised that I listed so many worked items to build a modern software. Each item could be a real big topic, let me choose a few priorities to start my record.

https://fabiuslela.com/static/summary.html

Fly Away

瑶瑶像往常一样,早就开始了她夜间12个小时的甜蜜睡眠,太太今日也累了于是早早上床休息了。整个房子都安静下来,我几乎都要无所适从,想起明日是垃圾日,于是去料理垃圾,然后又从堆积了两周的信件中整理出来各种有用的文件。

处理完这些琐事,回到办公室坐下,我可以完成LetsEncrypt剩余的自动化,或是有点时间写点文章。想了一想,LetsEncrypt随时可以写,而文章却只能是可遇而不可求。看看上一篇文章,已经是三个月前了,心中似乎也若有所思,记录下来罢。

夜已经够静了,还是带上了防噪耳机。也不知道是这玩意发出的声音还是它戴在头上的那丁点重力压迫在起作用,总之带上之后,总觉得心绪更能集中。

音乐的惯性对人的影响真是可怕,十几二十个年前听进去的音乐在心中那种地位,无论如何都无法被新音乐取代。耳机里传出的那些老音乐不断在我记忆中激起涟漪。

想到中学时代的好朋友可能已经有十来年未曾联系了,大学时代亲密的室友们,如今天各一方。离开武汉和深圳之时,只是想到现代交通已然如此发达,不曾想到自此一别后生活工作杂事缠身,哪怕是下一次回首,或许都要以十年为单位。

思绪几乎都任由QQ音乐的随机播放摆布着,《雨一直下》又使我想起那年物理竞赛失利,不能正确面对成败而选择在雨中漫步的那中二少年,不禁心中一恸,也说不清楚是感慨还是悲伤。感慨是因为我们人生往往经历很多事情,其中一些事情往往让当时的我们以为非常重要,然而事后看来其实只是漫漫人生路中一场小雨而已。悲伤则是因为中二少年不再中二,已经蜕变为中青年了,再也不见少年之时那般青涩与天真,只是留下一个事事淡然只想醉心田园的伪农夫。

今年是我们迁来芝加哥第五年了,五年之间结识了不少很好的朋友,我们也曾经一起露营、一起逛吃、一起旅行、一起滑雪、拍照、烧烤、派对等等等等,美好的记忆那么多,然而最难以忘怀的却是送别朋友们离开的场景。大概这就是伊州人口净流出在我们生活中的具体表象吧。

想要吟一首《白雪歌送武判官归京》,此时却未到芝加哥天寒地冻之季节;想要诵读一遍《黄鹤楼送孟浩然之广陵》,此地却距离黄鹤楼千万里。怅怅然然,似乎听到语文老师念诵“天下大事,分久必合,合久必分”,而物理老师则说“运动是绝对的,静止是相对的”。

尽管思绪混乱,但还是著杂文一篇,以祝西柚成为吃饭积极分子,祝麦穗成为睡觉积极分子,祝蛋蛋不再受不可食米饭之苦,祝April永远犀利。珍重,再会!