在项目中引入细分领域的开源软件

1. 引言 开源软件已是信息社会的基石。 GitHub上软件种类众多,市场定位和成熟度也各不相同。 对于成熟的通用软件,例如Linux,NGINX等。将这类软件引入自研项目中不存在太多顾虑,因为通用所以用的人多。可以找到大量的成功案例,众多的开发维护人员。一旦碰到问题,也容易在网上搜到答案。 但还有一类开源软件, 定位相对没有那么通用,虽然其在细分领域已经做的比较好了,但由于生态环境较小,在项目中引入时候,还是有很多因素需要考虑: 现有的开发人员有能力掌握并承接后续开发吗? 如果使用中出现问题, 有没有合适的开发人员去解决?或者去做二次开发? 系统上线后,有没有合适的人员去长期维护? 对这类软件,在引入到项目中前,有两种办法增强信心: 找到合适的人 成为该软件开源社区的一员 2. 找到专家 有如下几个方法。 在软件的开发者中搜索是否有中国开发者,尝试建立联系。 百度该软件相关的讨论区,QQ群等。 加入并倾听,识别出专家。 寻找并参加该软件相关的培训。 寻找GitHub上该软件的相关软件。 例如引用该软件的软件,该软件的Plugin等等。并合作者建立联系。 以上的目的都是在现实世界建立起和专家的联系。 然后通过和专家的电话,邮件,吃饭喝茶等各种交流来进一步了解该软件在国内的生态情况,以及软件的优缺点。 为后续引入打好基础。 和专家建立起联系后, 后续也方便和专家进一步在项目上合作共赢。 3. 融入开源社区 如果国内找不到专家。 就只能撸胳膊上,让自己成为专家了。 3.1. 学习使用 主要看如下几方面的内容: 软件自身的官方文档 Youtube上的介绍视频,以及第三方教程 软件的单元测试 以上,结合大粒度的源码分析,可以掌握软件的大体脉络。 3.2. 和同行讨论 一般开源软件社区有如下几个地方。 GitHub项目Issues GitHub项目Discussions Discord或者Slack等讨论组 Email邮件组 通过加入并查看大家在讨论哪些问题,能了解到软件的一些使用细节和适用场景。 在学习的同时,也要多思考,多提问题, 多回答社区的问题。 回答社区的问题可以针对和自己项目相关的领域问题,积极回答问题有两点好处: 驱动自己认真深入思考,如果我在项目中碰到这个问题,该怎么处理? 和其它社区用户,以及软件开发维护者们建立联系 以上是 Headless CMS Directus 的项目讨论社区。 我最近在调研用Directus来做API中间件,watch了该项目的讨论区,GitHub会把所有讨论实时发到我一个特定的邮箱里面。 通过查看大家的讨论,有很多收获。我也把自己学到的经验总结提炼出来帮助其它用户, “Most Helpful”榜单排名第5的就是我。 3.3. 小规模MVP验证 在看的基础上,也需要动手做。 按照自己项目的特点,定义一个和该软件相关的最小MVP流程,尝试引入该开源软件实现。 以上三点,相辅相成,可以同步进行。 理想的结果是: 自己变成了专家,后续在项目中引入 研究过程中发现软件不适用,果断放弃

2022年2月25日 · 1 分钟

自由泳抱水和推水的体会

用核心来推水 有两个陆上辅助练习: 滚动带动推水 前伸臂做出抱水姿势, 保持肘部和两肩成一条直线。 通过肩膀滚动,形成入水手一侧的伸展。 同时,抱水一侧尽可能长的保持肘部和两肩一条直线。 以上关注点是抱水肘部和两肩三点一线。 肘尖沿着两肩延长线向前上方顶出去,前臂自然下垂。 通过这个关注点,体会通过肩膀的滚动和后撤来完成推水。胳膊只关注稳定好抱水的形状,不要发力主动推。尤其是在前半程。后半程退肩到一定程度后,肩胛骨处在发力的有利位置后可以主动推。 用腰部的力量 在上一个练习基础上, 抱水时候,体会抱水侧腰部伸展。 滚动,退肩的同时,同侧腰部也有意收紧。 以上,通过腰部伸展抱到更多的水,通过腰部带动背阔肌发力推水。 2022 PB 今天泳池人很少,游出了2022年的PB。

2022年2月20日 · 1 分钟

Leo editor在python下的开发即将结束

Leo 要停止开发了 早上在邮件列表里面读到EKR的一封信: Leo 6.6 may be the last substantial release in Leo’s history. At present, the 6.6 to-do list contains five items. There are no items at present on the 6.7 to-do list. Many open items remain, but I have little desire to do any of them. Expect 6.6 final in a month or so. The leojs project now seems like the future of Leo. Indeed, it melds Leo with vs code, an unbeatable combination imo. ...

2022年2月19日 · 1 分钟

JavaScript的异步执行机制

回顾: JavaScript语言定义的 callback, promise, await, asyc JavaScript/NodeJS 引擎(libuv) 操作系统IO多路复用(epoll). 了解 JavaScript 异步函数的运行和实现机制,方便阅读和调试JavaScript代码。 1. 简介 对于习惯了线程池/多进程/消息队列的程序员,使用JavaScript/NodeJS,有几个概念需要了解。 Callbacks, Promises, Async Await IO多路复用和异步访问 2. Callbacks, Promises, Async Await Youtube有个视频Async JS Crash Course - Callbacks, Promises, Async Await, 用24分钟把这几个概念演示的很清楚。 Callback是最基本的,但是Callback有一个问题,在写异步函数的时候,需要把callbank函数作为参数传进去。 如果这个函数本身是个异步函数,它也有一个callback函数作为参数。如果层数很多,就产生了callback hell。 函数可读性很差。 为了解决这个问题, Promise引入了一层封装, 在定义异步函数时候不需要指明callback函数了。 可以在Promise定义后再: 通过then来定义执行成功后的回调 通过catch定义执行异常情况下的回调 Async Await是对Promise的进一步封装。让异步函数看起来象同步函数(不再需要Promose里面的then来显式定义回调)。 下面抄自google官方文档 async function myFirstAsyncFunction() { try { const fulfilledValue = await promise; } catch (rejectedValue) { // … } } 如果在函数定义之前使用了 async 关键字,就可以在函数内使用 await。 当您 await 某个 Promise 时,函数暂停执行,直至该 Promise 产生结果,并且暂停并不会阻塞主线程。 如果 Promise 执行,则会返回值。 如果 Promise 拒绝,则会抛出拒绝的值。 ...

2022年2月12日 · 2 分钟