A Byte of Serverless

最近1个月业余时间在玩Serverless多一点,这里做一下记录。

现在的服务开发趋势基本沿着这样的路径在发展:
服务化(SOA) -> 微服务(Microservices) -> 服务网格(Service Mesh) -> Function Service (Serverless)
看下面的图片会更直观一些(文末会附带一些阅读资源,内容更完善):


Serverless直接从字面可以看出来,服务开发者无需关心服务器运维,只需要做好服务功能开发,高可用、服务容量扩展都无需关心,大大降低开发者的负担。

把一个个服务以函数的方式暴露出来。
前台的应用拼装调用函数实现服务。

厂商

基本上主流的云服务都提供了Serverless服务,这里说一下我实际操作过的几家。

国内厂商:
1、阿里云 函数计算FC
2、腾讯云 无服务器云函数SCF

国际厂商:
1、Amazon AWS Lambda
2、Google Cloud Functions
3、Google Cloud Run

独立Serverless提供商
1、now.sh / zeit.co

语言支持

PHP:阿里云、腾讯云、zeit.co
Python:全支持
Nodejs:全支持
Java:全支持
Go:Google Cloud、zeit.co
其他还有一些语言支持这里不展开说明。
之前Serverless的一个问题就是语言版本相对比较滞后,但就目前看下来,主流服务商基本都可以用到较新的版本,比如Python 3.6,Nodejs 10.x 等。

开发工具包

Serverless现阶段的一个问题就是跟厂商的云服务强绑定,如果说是你的服务是基于AWS来构建,那后面想要迁移到其他云服务并不是件容易的事情,需要改造你的应用代码调用新的厂商的后端服务。但代码基本的运行环境是一样的,这个不用担心。
对于服务依赖的问题:
1、有个基于Nodejs的Serverless程序开发框架,对上层应用层抽象,下层把云服务进行封装,适配不同的云厂商(目前支持8家);
对于环境依赖的问题:
1、今年发布的Google Cloud Run采用的方案是部署Docker镜像,这种借助了Docker来解决环境适配的问题。

Serverless服务开发我自己是主要使用了Python 3.6,下面列举一下相关工具包:
1、https://github.com/Miserlou/Zappa AWS Lambda部署工具
我写的小服务是部署在AWS Lambda,所以我对Zappa有实践经验,下面两个木有。
2、https://github.com/serverlessplus 腾讯云
3、https://github.com/aliyun/fun 阿里云

now.sh / zeit.co

特别单独说说一下这家独立厂商,结合了github的玩法比较有趣,授权github之后,push代码到github的仓库,会自动部署代码到zeit服务器,推荐大家玩一下。

其他

关于服务计费:Serverless真正实现了“按需付费”,应用程序触发执行的时候才计费。对比目前的云服务器,即使你的应用程序无人访问,也需要支付托管费用,这点上Serverless优势很大。
关于服务扩容:无需关心。
冷启动问题:Serverless由于不是常驻服务,如服务没有预热,冷启动的时候响应速度会稍慢(0.x秒),所以这里常见的方案是设置一个定时触发器将应用程序warmup,缓解冷启动速度慢的问题。


我开发的小服务

ProgressBar(进度条):https://progressbar.net/
功能是计算当前时刻年月日的百分比进度。
是偶然的一个机会在Twitter看到一个号:https://twitter.com/ProgressBar201X 得到启发,于是做了这样的一个小服务。
基于Python 3.6开发,开发框架是Flask,使用Zappa部署在Amazon AWS Lambda里。
====
机器人提醒:这个是工作上的小工具,对接了企业微信的群机器人接口,发群消息。使用的是PHP开发,用的是阿里云函数计算。

尾声

最近Python、Nodejs都用了不少,几种语言换着写的有点精神分裂了:P

新的玩具:之前一直计划弄个软路由来着,但NUC只有单个网口。昨天买了一个USB的千兆网卡,后面打算把NUC配置一下路由功能,这样NUC就真的变为:
路由、存储、影音播放一体化的终极设备了。

阅读资源

https://serverless.ink/
http://jolestar.com/serverless-faas-current-status-and-future/
https://amio.github.io/serverless-zhcn/
https://jimmysong.io/posts/what-is-serverless/
https://martinfowler.com/articles/serverless.html
https://aws.amazon.com/cn/blogs/china/iaas-faas-serverless/
https://aws.amazon.com/cn/blogs/china/lambda-serverless/

 

How to make wealth

原版链接:http://www.paulgraham.com/wealth.html
中文翻译版Copy来源:http://oyangwin.blogspot.com/2015/03/how-to-make-wealth.html

Paul Graham在《黑客与画家》这本书中也放进了这篇文章,在他的博客上可以看到英文原版内容。阐述了如何通过创业的过程,创造财富,让你实现财务自由和生活自由。“How to Make Wealth”

自古以来,创业是通向致富道路的最靠谱的方法。并且科技领域的创业公司成活率更高,尤其是当前互联网飞速发展的环境下更是如此。文章还描述了创业公司为什么随着规模的膨胀开始走下坡路,以及创业公司需要注意的事项。

关于创业致富的命题(The Proposition)

从经济学的角度考虑,你可以将创业看成是将你一生的工作时间压缩在几年内完成的过程。假如你年薪10万,一辈子大概总收入在300万。而创业就需要你在3、5年内赚到300万,也就是说一年赚到100万。这需要你在创业阶段疯狂的工作,没有时间休闲、陪家人、看电影,你需要付出辛苦的劳动,甚至透支你的健康。

创业本就不是什么神秘的事情,他没有改变创造财富的规律:得到越多,付出越多。创业是将你一生需要面临的压力放在三五年内经历完,这个守恒定律不可改变,所以创业不是一件简单的事,需要你有充分的思想和体力准备。

几百万而不是几十亿(Millions, not Billions)

目标定成几百万更现实一些,毕竟比尔盖茨那样的幸运儿太少了。几十亿的目标让这个目标丧失可达性。虽然比尔盖茨聪明绝顶,但是如果没有IBM的决策失误,他也只会是一个普通的成功创业者而已,运气这种东西不在我们的讨论范围内。致富的方法很多,比如通过继承遗产、坑蒙拐骗、买彩票等等,但是我们只讨论一种:通过创造有价值的产品合法的获取财富。这种致富的方法最靠谱,也最直截了当,做人们需要的、想要的东西,仅此而已。

财富不等于钱(Money Is Not Wealth)

社会财富这种东西自打有人类就出现了,而钱是更晚才出现的产物。比如你卖掉一个小提琴,然后购买一些土豆,这里小提琴和土豆是社会财富,而钱只是推动了社会财富的流动,钱是一个中间媒介,钱本身并不属于真正的社会财富。通常我们做生意,好像只是为了赚钱,其实我们是通过自己创造的财富,换取另一类财富而已。因此做生意的真谛应该是:生产人们想要的东西。

蛋糕是有限的谬论(The Pie Fallacy)

从小到大我们被灌输的理论经常是蛋糕是有限的,有人分的多,就注定有人分的少。这是多么毁人的谬论呀!通过创业的过程你会慢慢发现,社会财富这块蛋糕不是固定大小的,你可以无限制的将蛋糕做大,在不损害任何人利益的同时你也可以创造并获取财富。比如你将自己的一辆破旧的车修好,整个社会财富增加了,但是并没有任何人因此损失自己的蛋糕。事实上人类历史上社会财富一直在被创造出来、被消耗掉。

工匠、手艺人(Craftsmen)

通过上面的财富创造理论可以看出,好像一些手工艺人更容易创造社会财富,而随着工业化的程度加深,工匠这样的岗位越来越少,所剩为数不多的手艺人中程序员是一个极大的群体。

程序员坐在电脑前通过编写代码创造财富。如果你编写并发布一个比IE、Chrome更易用的浏览器,你就将整个社会财富蛋糕增大了。我们经常听到一些庸人的抱怨:社会50%的财富被5%的人占据了,这不公平!但是这些庸俗的小人从来没有想到过,5%的程序员开发的优秀软件占了99%的份额。

财富创造出来后不一定非要变现成钱,比如科学家的研究无偿贡献给社会,基于此产生的青霉素挽救了无数人的生命,创造了不可估量的财富(生命无价)。同样出现在软开开发领域,无数开源软件,如知名的FreeBSD、Apache等创造的社会财富也是无法用钱来衡量的。

工作是什么(What a Job Is)

现在这个社会,大部分个人都从属于一个机构,比如某某某,10岁,就读于某某某小学。某某某,30岁,工作与某某某公司。你为之工作的公司,作为一个整体创造社会财富,满足用户的需求,制造某类物品或者提供某类服务。你的工作需要和公司其他的人绑定到一起,才能让公司创造财富,你个人的工作只是其中很小的一部分。因此公司创造的财富很难说某人占了10%的功劳,另一个人占了15%的功劳,很不容易衡量。

人们之所以选择工作,是要做一些创造价值的事情,要创造人们愿意使用的产品。不管是大公司里的一员,还是创业的草根,都要认识到满足用户才能生存。

努力工作(Working Harder)

大公司的问题就在于他无法准确衡量一个人是否足够的努力,平均主义降低个人工作积极性。一个人如果玩命疯狂的工作,生产效率将十倍甚至百倍于大公司的普通职员。虽然大公司有相应的奖励机制,但是你不能跟你老板说:从现在起我将以十倍的干劲工作,你给我十倍的工资吧。这是不可能的,因为老板不知道你真的能否产生十倍的价值,这是无法度量的。

不过销售和公司CEO的努力是可以度量的工种,比如销售额、公司业绩等,都可以按比例给这两个工种提成。此外其他岗位基本都是一种耦合性极高的考核方法,你无法衡量一个产品的成功是因为好的设计、好的制造还是好的客服,只能采用平均主义。

在大公司的职员经常有种感觉,你想努力的干出惊人的业绩,受制于体制和他人,单凭你个人取得成绩微乎其微,其他人将你的努力平均掉了,他们拖了你的后腿。长此以往,一些能干的有野心的人跳出创业去了,另一些人随波逐流成了庸才。

可度量、影响力(Measurement and Leverage)

想获得巨大的财富,你需要让你的工作具有可度量性,还要善于利用你自己的影响力。

只有可度量性是不够的,比如计件工资的工人,工作量是可精准度量的,但是因为他缺少影响力,没有话语权,基本不可能发财。CEO之所以比较富有,是因为他们的工作可度量(公司业绩),他们具有足够的影响力(做决策)。

具有这两个能力的人都具有致富的潜力,比如CEO、演员、对冲基金经理、运动员等等。这些人的命运和前途掌握在自己手里,他们需要足够聪明足够努力,稍不留神就名败身裂。这些工作风险都很高,如果你的工作比较稳定(如公务员),那注定了你无法获得高额回报。

高风险,高回报。就这么简单。

不过你也不一定非要去当CEO,在一个规模小的创业公司,成为骨干力量,一样具有上面两个因素促使你成功。

规模小=可度量(Smallness = Measurement)

如果无法精准度量每一个个体的价值,起码你可以估算一个小团体的价值。用划船比赛来比喻公司和职工,大公司就好比一千个人一起滑动大船,一个人的努力或者懒惰不会带来太大影响,而小的创业公司划船者都是精干力量,每个人都很卖力,自然能取得更惊喜的成果。

斯蒂夫.乔布斯曾经说过:”一个创业公司能否成功取决于开始阶段的前十个员工”。这最开始的精干力量你可以精挑细选,他们可不止是十个人,而是十个像你一样的干将,是一支全明星队伍。

真正崇尚自我价值的人,是不屑于混迹在大公司臃肿的团队里的,他们乐于在小团体里挥洒自己的智慧与干劲,与志同道合者一起创业,为用户创造无限的价值。

技术=影响力(杠杆力量)(Technology = Leverage)

创业公司之所以能产生巨大影响力,是因为他们大多借助技术的杠杆力量。

纵观人类历史,技术革新者往往取得巨大的收益,让技术发明者致富,让培养革新力量的国家强大。

公司规模小并不会影响技术革新,反而更有利于发明新技术。一些前沿技术变化太快,淘汰也太快,大公司往往来不及做出应对策略,而小公司不受约束,船小易调头,更容易取得惊人的成绩。

一些需要高额投入的技术研发,如航天航天、生物基因工程等,大公司更擅长,但即使在这些领域,他们也需要小创业公司的帮助。在创新领域,小即是好。

在创业初期,要注意构建技术壁垒,防止过多竞争对手的快速跟进,还需要做好专利保护工作。不过靠专利不是太高明的办法,因为大公司可以故意侵犯版权,而打官司这事他们最擅长。

因此最好的方法还是让你的技术足够领先,让对手无法复制。毫不犹豫选择解决最困难的问题。

注意事项(The Catch(es))

一旦走向创业的道路,你可能就无法选择在何处停止。你不能认为自己已经比别人努力两倍、三倍,就想获得同等的待遇。努力干到什么程度,不是你自己决定,而由你的竞争对手决定。

并不是说你付出就百分百有回报。大部分创业公司都在无声无息中消亡了。假设创业的平均收益是三十倍,那最高的可能达到1000倍,绝大多数人可能收益是零,什么都没有得到,除了教训。

满足用户(Get Users)

我们建议创业到一定阶段,卖掉公司,进行更多元化的价值创造。因为运营一家公司和创业是完全两码事,技术的更新换代很快,让我们将时间和精力放到更有价值的事情上,商业运行交给穿西装的那些人吧。

为了让你的创业公司卖个好价钱,你需要确保自己的创业产品真正的满足了用户需求,拥有忠诚的用户群。这是你谈判的筹码。

另外,有个小窍门让你更顺利的卖掉自己的创业公司。引入多个买主,让他们竞争。一般大公司都很担心竞争对手的强大,也很担心竞争对手抢得购买先机。

财富与权力(Wealth and Power)

财富的形态多种多样,人类历史上奴隶、土地、矿山都属于财富的象征。财富还曾经被赋予坏名声。而随着社会的发展,发生了两件事让社会财富得以正名并促进其发展,一个就是法律的诞生,另一个就是工业化。

中世纪的欧洲出现了法律,它保证了财富创造人能够享用自己的成果,而不用担心强权者的掠夺。这也是促进工业化进程的一大因素。

创业者是那种想加倍努力换取高额回报的人,如果高额的付出换取的财富无法得到保护,或者社会不允许他比别人更卖力的工作,那这样的社会其实是在鼓励平庸。这将导致技术革新不会出现,人类社会文明停滞不前。

发明创造技术革新不是一件容易的事情,革新者有权利获得高额的回报,只有如此才能促使更多人投入到创业、技术发明中。

欧洲之所以在工业化进程中积累了大量财富,不是因为他的地理位置优越、不是因为欧洲人更聪明、不是因为他们人种优秀,而是他们承认:创造财富的人有权利保有并享用财富。

技术革新让一个国家更强大,一个简单的例子是,隐形飞机的技术原理是一个苏联的科学家发明的,但是因为苏联缺少高性能计算机,这个理论对他们毫无价值,而美国人利用这一理论率先制造出了隐形飞机。

冷战以及二战的种种结果表明,掌权者千万不要折腾创业家,只有这样才能让技术创新,社会财富增加,国家强盛。Let the nerds keep their lunch money, and you rule the world.

 

DIY U2F/FIDO2 Key

YubiKey略贵,找了一些方案打算DIY一个,当然Hacking的过程中更有乐趣。

Arduino的方案
https://linux.cn/article-6568-1.html
https://tinyhack.com/2015/11/08/teensy-lc-u2f-key/
https://hackaday.com/2015/11/09/turning-a-teensy-into-a-u2f-key

开源方案:
U2F Zero:https://github.com/conorpp/u2f-zero有国人根据资料自己做出来
SoloKeys:https://github.com/solokeys/solo,下面重点说说SoloKeys这个项目。
Tomu:https://tomu.im/,很小巧。
nRF52:https://wiki.makerdiary.com/nrf52-u2f/
SMT32:https://github.com/gl-sergei/u2f-token

SoloKeys
Conor Patrick一开始做了U2F Zero,社区反馈不错,卖了几千套。
后来又开发出了一个改进版,支持FIDO2,支持NFC,并改名叫做SoloKeys,在KickStarter上众筹,取得了不错的成果。

相关程序和硬件都是开源的,还提供了一份USB版的BOM清单,所以目前计划是DIY个SoloKeys,硬件上跟大伟初步沟通了一下,目前基本没啥问题

其他
USB armory,跟这个主题没多大关系,去年看到的,Mark一下,相关的硬件设计和Bom都是开源的,后面有空也可以玩一下。

 

将斐讯N1盒子改造成游戏机

斐讯N1在矿难之后价格一路下滑最低到60多包邮,我在拼多多上75包邮买下,也算是第一次正式使用拼多多,当时拼多多股价还在20USD左右,之后看涨拼多多,目标价翻倍。

斐讯N1本质上是一个电视盒子,默认是安卓系统,可以直接接到电视上使用。
基本硬件配置:
SoC:S905d
内存:2G
网口:千兆
USB:2个2.0接口
HDMI:1个
存储:8G eMMC
这个盒子的硬件配置秒杀树莓派

Armbian
几年前有个俄罗斯队大神balbes150成功把armbian移植到Amlogic S805/S905方案的电视盒子上,一下子扩展了这类电视盒子的玩法,其他相关的衍生发行版也都实现了在电视盒子上运行。
所以理论上所有基于Amlogic S805/S905系列的电视盒子都可以改造成游戏机。

原计划是刷Armbian系统然后作为主力网关设备,并且规划了如下一些功能:
1、家庭网络接入网关
2、Syncthing主节点
3、离线下载
4、电话语音短信网关
5、游戏模拟器
6、视频、音乐播放服务器
7、NAS存储

第一次尝试:
1、降级Bootloader(这个是必须的步骤)
2、将5.74版本4.20内核的Armbian刷入到U盘
3、启动到U盘系统(我们没有将系统刷入到内部的eMMC存储),接HDMI显示器,启动成功,发现网络不通,网上找了一些资料以及加了群问了一下别人没找到解决方案,于是打算使用5.44版本的Armbian

第二次尝试:
1、刷入5.44版本3.14内核的Armbian
2、apt安装retroarch,启动retroarch极度卡顿,应该是GPU驱动未加载,硬件加速有问题
3、加群问人以及网上找资料未找到解决方案

第三次
1、找了SX05RE这个三合一镜像(Lakka、CoreElec、ES)刷入运行很流畅
2、这个发行版来历:OpenElec -> LibreElec -> CoreElec -> SX05RE
3、CoreElec是专门为S805/S905定制的LibreElec版本
4、SX05RE是在CoreElec基础上整合了游戏模拟器
5、有线、无线、蓝牙全部正常
6、调整定位,N1盒子只用作游戏机

硬件外设:
1、游戏手柄原打算买一个山寨版的PS3手柄,偶然在一个论坛看到有人推荐HORI这个牌子,下单买了一个HORI的蓝牙PS3手柄,70;
2、另外又额外买了2个USB接口的红白机经典手柄,2个手柄21块包邮;
3、感叹一下,我爱中国制造。

系统设置:
1、我安装是系统包,不带游戏,从网上找了几个经典游戏ROM:魂斗罗、打坦克、超级玛丽、泡泡龙,通过网络共享放到ROMS目录之后重启即可;
2、中文游戏名”口口”问题:替换ES主题文件夹里字体为中文字体即可。

参考链接:
刷机教程:https://www.mivm.cn/phicomm-n1-unofficial/
SX05RE使用指南:https://vipiu.net/archives/2018/05/22/426.html

 

愿望清单

这里是之前的那份:https://www.mudone.com/?p=2360

2019年的愿望清单,跟之前的有调整,希望未来几年内能陆续达成。

1.Honda Odyssey Hybrid。
7座车,家庭出行比较方便。续航1200KM 800KM,长途场景能大大缓解我的里程焦虑。车长4.8M,比许多B级车还要短,比较好停车。
继续选择Honda是因为目前Honda Jade开下来不错,省心。

2.中外环100平
今年把计划的一些事情做好,争取明年能够落实这件事情。
目前所在小区的居民素质实在不行,之前因为有人私占车位跟别人吵过好几次,跟居委会反映也无作为,不抱希望了。
前天老板娘也跟楼下的一个人吵了一次,所以下定决心今早搬离这里。

3.硕士学历
本科学历不足够,打算落实一下硕士学历,目前倾向MBA。

4.绿卡
新加坡绿卡,不太喜欢上海冬季的湿冷。

持续更新。

 

推荐“镰仓衬衫”

TOP10商品:
http://www.kamakurashirts-china.com/shop/pages/best10.aspx

 

ABZ计划

Ref:https://www.pingwest.com/a/1986

 

2018年总结以及2019展望

Once Upon 2018

慢写。

关于心态
尽人事、平常心,有点佛系

Live

Company

Future

Don’t Judege

生活
比较重要的一件事情就是把的事情弄好了,感谢公司。
有燕小达护体,这个事情迟早都会搞定,但是早一些总是比晚一些要方便一些。

身体
例行每年都会自己去做一下体检,今年公司有了体检福利。
身体情况总体还行,看体检报告是说100人中打败了79人,算是比较好的状态。
体检报告显示胆固醇高值:5.89,比正常指导范围5.2高了一些些,于是重视起来,运动+饮食调整。

运动上买了一双亚瑟士Nimbus20,缓震系列跑鞋,夏天的时候早上去家里隔壁的河边公园跑个来回大概3KM,更多的是早起到公司的跑步机上运动一下。

饮食调整,则坚决避开动物性脂肪,每天吃燕麦片,多吃蔬菜,减少米面等碳水化合物的摄入,多摄入低脂蛋白:鱼+肌肉+豆制品等等,油炸食品、蛋糕等等也不再吃。

经过三个多月的调整,指标降到4.2,同时体重也降低了一些,到12x了。

另外修复了身体上的另外一个小Bug——后背表皮囊肿,蛮久了,最近2年感觉变大。于是在瑞金预约了一个简单的门诊手术,切开拿掉,一切正常。

心理
整体大部分时间处于比较焦虑的状态,睡眠差,脾气差。
跟自己较劲,强迫症有点厉害。
自我诊断应该是有点轻度了。
自己做了一些调整:
1. 放下一些事情;
2. 平常心,有点佛系;
3. 写下这篇本身也是一种调节方式;
缓解焦虑,最近稍好一些。

 

通过AT指令操作串口收发短信

在之前配置短信语音网关的时候买了一台华为EC122(CDMA)插电信卡使用,配置到gammu之后执行发送命令提示SMSC没有配置。
查了一下貌似CDMA没有什么短信中心号的东西。

且这台设备好多操作指令都是华为自定义的,gammu无法直接操作。
决定自己写程序操作设备串口实现短信收发。

基本思路:
1、程序文件打开串口设备,轮询串口返回;
2、当接收到+CMTI指令的之后解析指令的值,例如:+CMTI:”ME”,37,该指令意思是接到一条短信,存储在手机内存,存储Index为37;
3、通过指令:AT^HCMGR=37,读取短信内容,短信内容编码为UCS2格式,需要进行转码;

4、发送短信指令:AT^HCMGS=”电话号码” \CR\CL 之后跟着短信内容,然后输入Ctrl+Z即可发出。发送之前确认一下当前发送短信的内容格式:AT+CMGF,0为PDU格式,1为Text格式。

HUAWEI CDMA AT Command文档
Ref: http://www.letswireless.com/asp_bin/downfile/2009929121443234.pdf

TODO: 理论上上网卡总是可以通过程序操作串口发送AT指令进行操作,后续考虑完全自己实现,连gammu都不用了。

 

根宝了不起

作为一个伪球迷,昨天也是一个相当开心的日子:上海上港足球俱乐部夺得中超联赛冠军。
这是中国顶级足球联赛冠军时隔23年重回上海(上一次还是1995年,根宝带领的申花)。

我倒是基本上一直粉球星不太粉球队,比如之前德国队的巴拉克、西班牙队的托雷斯,再到武磊,差不多是2013年前后开始粉武磊。

早上刷微博,看到一张图,从昨天晚上开始累积的情绪瞬间释放 在中环上 止不住的泪流满面,触碰到心里柔软的地方。

还有多少人记得当年的根宝足球网?