程序人生

十年漫漫程序人生,打过各种杂,也做过让我骄傲的软件;管理过十多人的团队,还带领一班兄弟姐妹创过业.关注程序人生,了解程序猿,学做程序猿,让我们的人生不再屌丝化.

Latest articles

2020 活久见:欧美主流 app「熔断」了

世界上只有两件事是不可避免的,那就是税收和死亡。— 本杰明·富兰克林在海外做移动端应用开发,有一家公司是几乎不可避免的:facebook(以下简称 FB)。它打造(并且几乎垄断)了从获客到获利(广告)的一条龙服务,使得你无法抵制那巨大的诱惑 —— 前提是你要在自己的 app 里装入 FB 的 SDK。在 app 里装第三方的 SDK,享受很多「免费」的服务集成,在业内并不是什么新鲜事。开发者们,尤其是中小开发者,对于来自像 FB 这样的大厂的,开源的,并且不得不用的 SDK,天然有一种信任感:那么多人都在用,总不会出问题吧。然而,今天(5/6/2020)美国西海岸时间下午 15:30 左右(最早的问题可以追溯到 14:44,因为这是一个滚动升级),所有使用了 FB SDK 的应用遭遇大面积崩溃,那场面,是相当壮观:其中包括海外版抖音,目前风头正劲的...

为什么有的语言「不能」编译成 WASM?

在上一篇文章「dart:失之东隅收之桑榆」里,我写了这样一句:dart 也许未来可以支持 WebAssembly(类似 golang,有没有意义再说);而 TypeScript 没有这种可能。于是很多 TypeScript 的拥趸不开心了,为什么说我家宝宝不能支持 WebAssembly(下文称 WASM)?有人找出了证据:看,AssemblyScript[1] 明明就可以支持 TypScript 转换成 WebAssemby 嘛。我不知道说这话的人是否真的看过 AssemblyScript,还是道听途说,仅仅知道有这个么东西,就像北京的的哥那样,说着让人不明觉厉的话。其实只要去 AssemblyScript 的 repo 看一眼,hub clone assemblyscript/assemblyscript,随便运行一下里面的例子,你就会发现:不好意思,走错片场了:为什么?为什么明明是...

dart:失之东隅收之桑榆

一个月前,如果我要为自己最看不上的三个半语言排个名,dart 恐怕会位列其中。dart 是 google 在 2011 年就推出的编程语言,目标是成为一个结构化的 web 编程语言,暗藏着取代人们天天用又天天骂的 javascript 的野心。记得大约 2014 年前后,我在 youtube 上看了 goto conference 的一个关于 dart 语言的 keynote[1],于是就对 dart 有些关注了。当时我的感觉是:这特么又一个「编译成 js」的语言 —— 天知道我们需要多少这样的语言。2014 年前后的前端生态还没有今天这么百花齐放 —— 如今一个编程语言没有对应的「编译成 js」的方案,就像没有化妆的女孩儿,都不好意思出门。那个时代 TypeScript 还没有什么人用,「编译成...

flutter: 一周感悟

对于一个喜欢追求新技术的人来说,flutter 火爆了一年多我却没有尝鲜,实在是说不过去。我之所以对 flutter 不感冒,源于我对 flutter 所使用的 dart 语言的无知 —— 我觉得既然市面上有 typescript 这样可以满足 flutter 需要的语言,为何要用 dart 这样一个行将就木的语言呢?但最近有个朋友给我展示了他用 flutter 做的一个私人项目,惊艳到我,于是我开始学 flutter。我学 flutter 的历程和其它语言有些不同 —— 比如学 rust,我直接边看官方文档边写代码,整个过程非常顺畅;而学 flutter,可能是我没有什么移动端开发经验的缘故吧,我读官方文档总有种「从入门到放弃」的感觉,于是我便找了一些视频课程来看。我先是跟着 youtube...

如何制作教学视频?看看我的探索之路吧

自从去年 9 月以来,我每天晚上花差不多一个小时给闺女小宝上课。上课的内容很杂,从周一到周日,依次是:历史故事,数学,scratch,科学探索,纪录片,励志电影,以及几何。每每上完课后,我在朋友圈「炫耀」,朋友们都会鼓励我何不干脆把内容做成视频,独乐乐不如众乐乐。后来我做过一些尝试,然而直接录制我跟小宝上课的过程效果不太好,因为一来它太定制化了,二来时间太长,有效信息量不够,除非被逼着,或者闲得无聊,否则不会有人愿意听一个小时左右,没有经过深度加工的,由并不专业的老师讲述的「课程」。我也尝试过把我跟小宝讲的数学课或者科学探索课压缩,去芜存菁,以「李永乐老师」或者「妈咪说」的形式呈现,然而这并不是我擅长的方式,刻意模仿反而失去了我自己讲课的灵魂。所以录制视频这事,就搁下了。二月初新冠病毒越来越肆虐,我天天刷着新闻,和全国人民一样,为武汉的遭遇共情,产生了轻微的创伤后应激障碍(PSTD)——...

新年快乐!

一晃 2020 年快过完 1/12 了。你的新年计划是否也如期进行了 1/12?过去的这一个月来让人心里堵得慌,先后几起伤医案,令人发指;接着武汉的疫情愈演愈烈,令人揪心。我好些在北京的朋友,大过年的,有家不能回,只能在遥祝家里的亲人;在武汉的朋友,反倒豁达,终于可以清净一下,不用走亲访友的,做个快乐的死肥宅。我跟朋友聊起来,都觉得相对于疫情的可怕,人心的崩溃才是最大的风险。我想起有次送我父亲去机场,后来得知他的航班要延误大半天,我在微信里急得团团转,他却优哉游哉地在航站楼里刷步,还跟家人说:好久没锻炼了,正好趁这个机会锻炼锻炼。我没记错的话,那天他走了两万多步。很多时候,信息本身并不重要,重要的是我们怎么去解读。疫情这事,对每个人,每个公司(尤其是还在生死线挣扎的创业公司),每个行业都会有不同的影响。与其焦虑,我们不如去想:事已至此,我们如何让它带来的影响朝着好的方向发展?或者,最坏的预期是什么?我们如果不能扭转局势,如何让结果比最坏的预期要好?好。闲话不多说。今天的文章除了给大家拜年,还想顺带帮忙参与梳理一个大家年年都要遇到的春节难题:大长假该怎么度过我才不后悔?读书篇首先隆重推荐的是微信读书里的《几何原本》。这本书我看了一阵子了...

暴走的程序员

今天一篇 "a sad day for rust" 霸榜了 hacker news。actix-web 的作者 fafhrd91 在无法忍受 "unsafe shitstorm" 之后,决绝地将这个在各大评测网站名列第一的 web 框架下线了。一时间社区叫苦不迭,所有使用了 actix-web 作为依赖的项目,都受到(潜在的)影响。这件事的威力虽然不如之前让半个互联网瘫痪的 leftpad 事件,但也够开源社区喝一壶的。让我先为各位吃瓜群众简单介绍一下前因后果。actix-web 是 rust 语言下的一个很有影响力的 web 开源框架,常年在 TechEmpower 排行榜雄踞第一(目前作者已经移除了 actix-web):它这么快是有原因的 —— fafhrd91 使用了大量的 unsafe(rust...

用 noise 协议的思路来点对点加密文件?

在之前介绍 noise 协议的时候,我写了这样一种应用方案:此外,Noise 协议还可以用于加密文件 —— 只要我有你的公钥,我可以使用单向握手(7.4)加密某个文件(附带握手时发送的消息),然后传输到某个不安全的位置(比如网盘,FTP,IPFS,甚至区块链中),该文件只有拥有私钥的人才能解密。这种应用很有意思,因为它具备非对称加密的安全性,同时又具备对称加密的加解密速度。后来重读这段的时候,我突然发觉,这是个很有意思的思路,搜了一圈,似乎没有人这么干,于是决定自己撸袖子试试。正好,rust 下面有一款很赞的 noise 协议的实现:snow,libra 也在使用这个库(通过 rust-libp2p),于是我便用 snow 展开尝试。模式的选择Noise 协议 7.4 里提到有几种 "one-way...

致敬时间的价值:一品十年

江汉曾为客, 相逢每醉还。浮云一别后,流水十年间。欢笑情如旧,萧疏鬓已斑。何因不归去?淮上有秋山。—— 韦应物《淮上喜会梁州故人》引子对我而言,2010 年是个奇妙的起点。一次不经意的饭局,就像洛伦兹那扇着翅膀的蝴蝶,把我卷入了波澜壮阔的互联网时代。如果说之前的十年,是互联网在泡沫之后自我救赎逐渐重生的十年,这个十年就是金戈铁马气吞万里如虎的十年。我有幸亲历其中,入局,出局,再入局,期间从北京到旧金山,从旧金山到西雅图,浮浮沉沉,走出了一条自己的道路。我曾经在我的「长日无痕」系列文章的开篇写道:总而言之,现在完全不可能让时钟倒转了。你不能永远总是对过去也许会发生的事耿耿于怀。你应该认识到你与大多数人一样地过得很好,或许还要好得多,那就应该心满意足了。十年前我根本无法想象十年后我能如此幸运而又意外地拥有她(小宝),正如十年后我无法预料她会变成什么样子。我可以为我的职业生涯,还有她的人生做"deliberate"的打算,但我无法控制结果。过去的十年,我遇到了很多很多十字路口。重要的是,我做出了选择。我很高兴我的人生经历与大多数人一样丰富,或许还要丰富得多,我很高兴我有很多很多故事讲给我的孩子们听。以下是我过去这十年发生的大事记。当我把这些...

# 如何安全地保存密码?

如今的互联网生活,让每个人都离不开密码 — 操作系统有开机密码(用户密码),各种应用有登录密码,甚至还有交易密码。形形色色的密码让用户头皮发麻,要么使用重复的不那么健壮的密码,要么不得不依赖于各种密码保存服务,比如 1password。我常常在想,有没有一种方式,可以让所有的密码从一个主密码中派生出来,就像比特币 BIP44 钱包派生那样?正巧,今早看了 Signal(一个加密通讯工具)的一篇博文 Technology Preview for secure value recovery,介绍了他们用 intel 的 SGX 技术来创建一个 "secure enclave" 进行安全地密码保护的工具。文中介绍了一种派生密码的手段:使用 Argon2 算法将用户密码延展成一个 32 字节的密钥 stretch_key通过...

Discover, share and read the best on the web

Subscribe to RSS Feeds, Blogs, Podcasts, Twitter searches, Facebook pages, even Email Newsletters! Get unfiltered news feeds or filter them to your liking.

Get Inoreader
Inoreader - Subscribe to RSS Feeds, Blogs, Podcasts, Twitter searches, Facebook pages, even Email Newsletters!