写点什么

从闭源到开源,明星项目 TDengine 的开源之路

作者:关胜亮

  • 2023-07-04
    北京
  • 本文字数:8802 字

    阅读完需:约 29 分钟

从闭源到开源,明星项目 TDengine 的开源之路

背景介绍

 

首先,让我来介绍一下自己。我是涛思数据的联合创始人,同时也是 TDengine 的核心开发者之一。我主导了 TDengine 从 1.0 到 3.0 的所有版本的迭代开发工作。虽然我也承担着管理者的角色,但我更喜欢作为一名开发者。自从 2019 年开源以来,我每年都在 GitHub 上为开源社区贡献了大量的代码。今年的统计数据显示,涛思数据在中国开源社区的贡献排名第 20 名,而我个人的排名是第 7 位。



TDengine 是一个开源的物联网时序数据库,采用云原生技术实现,以其高性能而闻名。任何人都可以免费下载和使用,欢迎访问官网体验。在 GitHub 上,TDengine 获得了 2 万多个 star,与其他开源云原生数据库(如 TiDB 和 Redis)齐名。在国内的数据库排行榜中,TDengine 稳居第一已经有两三年了。这是一个基本的介绍。



发展里程碑


让我们一起了解一下 TDengine 的发展历程。在大约 2017 年左右,涛思数据成立,那时只有一个原型产品,所以我们并没有选择开源。到了 2018 年,我们发布了第一个商业化版本,拥有了大约三四个客户,并对产品进行了进一步的打磨。在 2019 年 7 月发布的 1.6 版本之后,社区的反馈非常好。在 GitHub 的排行榜上,连续十多天都排名第一。2020 年 8 月,我们发布了 2.0 版本,这两次开源带来了重要的效应和用户增长,我们成功地吸引了经纬、红杉、GGV 纪元等大型投资公司的关注。2022 年 8 月,我们发布了 3.0 版本以及云原生版本。可以说,TDengine 的成功与我们选择的开源策略密不可分。涛思数据将与开源用户一起成长。

 

为什么要开源?


为什么要选择开源?其实,我们一开始是闭源的。但是从成立之初,我们就想要做开源。开源并不是简单的把产品拿出来放出来,它经过了很多系统的思考。我们认为开源能够扩大产品的影响力,能够很好地树立品牌。在 19 年我们开源的时候,创始人陶建辉写了一篇文章叫做《49 岁的这个程序员》,估计很多人都看过,这篇文章的阅读量达到了 20 多万。这样,很多开发者就了解到了我们的 TDengine 并开始使用,知名度成为涛思数据,包括 TDengine 未来一切发展的一个基础。因此,我们要开源首先就是要想好如何推广产品。

 

其次,开源之后,可以很容易地构建开发者社区,建立竞争壁垒。我们现在的微信群里大概有 20 多个 500 人的群,每天都有人在里面提问。如果确实有问题,我们会把这些问题反馈到 GitHub 的需求里,或形成内部工单。也会有很多人写一些文章,包括设计原理、好处、坏处、坑在哪里、优势等等。这些东西成为了我们的财富。我们的竞争者很难获得这么多的关注度,无形之中形成了竞争的壁垒。



发布开源代码后,我们很容易得到市场反馈。由于有大量用户使用我们的产品,他们会提出改进建议和报告 bug。无论反馈是好是坏,这些用户的声音都能促进我们更好地迭代产品。我们迭代速度很快,曾经每周发布一个版本,后来平均每两周发布一个版本。一些用户抨击我们这么快地迭代,认为我们是基础软件,不需要那么快更新。但实际上,如果我们的软件没有人使用,那就永远不会有 bug。我们需要不断迭代才能让产品更加稳定。虽然使用基础软件时很少遇到问题,而且我们的软件已经非常稳定了,但我们的很多新用户来会带来许多新想法,这些想法会成为我们的创新源泉,促进我们持续迭代。

 

发布开源代码后可以轻松地打造产品生态。在当前信创趋势下,我们的软件可以融入不同的操作系统,如 ARM、龙芯和鲲鹏等。外部的很多开发人员会为我们贡献代码、连接器和可视化工具等。我们会区分官方发布版本和开发者贡献版本。

 

另外,开源软件更容易获得用户的信任。现在,许多大型公司提供一整套解决方案,特别是在云原生浪潮下,用户可以购买一个 K8s 集群并获得所需的任何工具。然而,一些传统公司可能不想受到大公司的束缚。相比之下,一些成熟的互联网公司更愿意自行开发产品。在这种情况下,开源软件成为一个非常重要的选择。此外,基础软件要想在国内取得成功并获得盈利非常困难。因此,要想真正取得成功,包括所有投资者在内的所有人都认为基础软件是一个很好的趋势。为什么呢?因为在国内,我们的用户数量和数据量都非常大,我们可以通过开源软件更容易地进入其他市场。因此,开源是走向海外的一个非常有效的途径。

为什么要开源最核心的代码


开源的核心代码非常重要,因为如果你不开源这部分最具有竞争力的代码,市场上可能会出现许多替代品。在过去,国内的许多开源软件仅开放了 API 和外围工具,这并没有给用户带来特别多的价值,也没有让贡献者获得很大的成就感。这就像你买一件衣服,如果你觉得不好看,别人送你一件你也不会穿。同样地,用户也不会使用没有价值的软件,因此很难形成一个支持者群体。

 

通过开源具有竞争力的代码,我们可以更好地击败竞争对手。作为基础软件的开源项目,例如数据库,如果没有良好的性能或特色功能,竞争对手很容易替换你的位置。相反,如果你已经做到了某个高度,竞争对手也就没有动力推出与你类似的产品了。因此,开源可以使竞争对手越来越少。特别是对于公司来说,开源带来的好处是很明显的,因为我们需要盈利。 

开源的误区


开源其实存在几个误区。首先,仅仅写出好的代码是不够的。很多人将他们的代码开源出来之后,却没有做任何市场推广。虽然这样的代码确实可以被随意下载,但实际上却无法为产品创造真正有价值的贡献。因此,我们需要在代码写得好的基础上,采取各种各样的配套手段,并且最好能够在一个有计划的时间段内进行执行。

 

其次,我们不能仅仅是写完代码之后就去开源。如下图所示,在我们的项目中,我们的更新速度从 2019 年到 2023 年逐渐加快。虽然这反映出我们的代码肯定不是足够好的,但我们仍然选择开源的原因在于,我们已经有了一定的商业客户基础,可以放心地将代码发布出去,吸引更多的客户并完善我们的产品。因为很多软件的市场定位会随着时间的推移发生变化,只有通过不断地发展,才能真正找到市场定位和盈利点。

 

最后,商业化也不能慢慢来,需要与开源同步推进。当然,并不需要组建一个庞大的商业化团队,因为在国内这样的环境下,商业化必然需要一些定制化开发的工作。随着项目的规模增大,这些长尾工作可能会变得越来越多,需要平衡市场的诱惑和主线版本之间的关系。因此,商业化的进度需要适度地控制,因为商业化既能为我们的开发团队带来信心,也能为投资团队带来信心。这是一个适度的发展过程,在合适的时间选择做好商业化。

 


开源软件成功的关键指标


什么是成功的开源软件呢?我认为衡量开源软件成功的关键指标有四个,其中最重要的指标是它的关注者。因为关注者代表了社区的影响力,而 GitHub 上的 star 数是最直观的衡量指标。虽然 GitHub 上有二三十万个开源软件,但能达到一万个 star 以上的软件只有一两千个。这些软件无一例外地都是业内领先的佼佼者,这是一个很客观的评价指标,而且它无法作假。如果有假冒伪劣的情况被发现,会对公司形象产生致命影响,使公司无法再起步。

 

除此之外,开源软件的成功还可以从使用者的数量方面衡量。不同软件的使用者衡量标准可能不同。例如,底层软件的数据库,前端组件都无法用统一的方式衡量它们的用户量。部署实例的数量也不好衡量,因为有些软件部署在内网中,无法与外界通信,也无法获取相关信息。一些用户也可能关闭上报信息的配置项。但是,我们可以从趋势上看到软件在哪些版本中得到了更好的使用,哪些特性更加重要。

 

在开源社区中,贡献者的数量虽然反映了用户对软件的投入和反馈,但并不是衡量软件重要性的唯一标准。外部贡献者的增多可能增加软件风险,因为出现问题时可能难以立即找到他们进行定位和修复。

 

在选择开源软件时,大企业更注重的是维护者和团队的背景和能力,以及他们的稳定性。核心提交是否来自于团队的内部以及团队对代码的控制能力,是衡量软件质量的重要指标之一。

 

什么样的产品适合开源?


关于哪些产品适合开源,我认为有三类:一类是用户量较大的产品,另一类是相对标准化的产品。这两类产品一旦打好口碑,就会像很多互联网热门的 APP 一样一夜爆红,迅速获得用户。但是我们也需要具备技术硬核软件,这是第三类。这类产品是以技术取胜的。而一些以解决业务上痛点或创新为主的软件则不太适合开源,因为一旦公布,容易被仿造。这类软件最好选择闭源。创业者们应该根据自己的情况,做出明智的选择。

 

开源产品的定位


如果我们要真正开源一个产品,那么它的定位就必须面向全球市场。这可以从一些顶尖的开源产品的目标市场中看出来,这些软件的共同特点是它们的目标市场都是全球,因为作为一款基础软件,如果不走向全球市场,它的想象空间将非常有限。此外,如果你的核心团队没有足够的激励,那么这款产品很可能也无法生存下来。在目前的 ToB 形势下,只有全球前三名的软件才能生存下来。

 


比如芯片,目前市场份额大概有 80~90%由英特尔和 NVIDIA 占据,而 ARM 则占据一小部分份额。国内很多芯片厂商靠政策或资本支持才勉强生存,希望有一天能够进入前三。所以我们的目标必须是远大的。如果这款产品的定位不是全球性的,如果不能在技术上处于全球领先地位,那么它的意义就不大。我相信,在任何一个细分市场中,都可以诞生出独角兽。现在,估值超过 10 亿美元的公司就可以叫独角兽了,它不一定是一个全面的软件平台。 

我适合做开源的创业吗?


在考虑将产品开源化并创业时,需要先确定产品的方向。目前,软件行业有点像之前的汽车行业,出现了越来越多的零部件制造商,每个公司专注于自己的一小块工作,由集成商将它们最终组装完成。类似地,开源领域,特别是大数据领域,也逐渐实现了零部件化。许多公司专注于自己擅长的领域,将与业务相关的部分交给第三方集成商处理。例如,国内的东软、神州和中科软等公司会处理这些客户的需求,而其他技术型公司则会专注于自己产品的研发。

 

如果要创业,团队小而精干,但至少要有一个人擅长技术推广。这个人应该有意愿去推广产品,并成为优秀的市场推广人才。如果团队中没有这样的人才,就需要重新考虑如何组建团队。因为软件开发不仅仅是技术,技术只是一个必要的条件。

 

我们需要逐渐将传统的软件思维转化为互联网思维,更进一步,转化为创造共赢的思维。我们只需要专注于自己的组件,与其他相关公司共同构建整个生态系统。这意味着我们需要与上下游企业建立良好的合作关系,以实现共同的成功。

产品开源后就能带来巨大的成功吗?

开源成功的关键


产品开源并不一定能够获得成功。像我之前说的,将软件放在互联网上并不是结束,这只是一个简单的开始。我发现很多同行都有开源的产品,但是它们宣布开源后,文章可能阅读量不超过 1000 个甚至更少,没有什么反响。实际上,对于这些产品,开源与否并没有什么意义,还不如闭源做好自己的客户服务。因此,开源的软件需要有一个合理的规划。开源的软件必须达到一定的质量标准,这也是为什么我们的产品在 2 年之后才选择开源的原因,因为基础软件成长周期相对较长。而一些软件的成长周期可能较短,我们可以适当缩短这个过程。但是无论如何,在进行开源宣传时,产品一定要有一个足够打动人心的亮点。也就是说,你要能回答使用你的软件能够带来什么样的价值。除了有一定的质量保证,软件还需要有稳定的维护和团队支持,需要组建公司或小型工作室来维护稳定的团队,并做好市场推广。

开源的商业模式



开源并不意味着免费,也不表示缺乏商业模式。我们公司一直在探索与开源相关的商业模式。目前业内很多领先的软件公司也都在摸索如何孵化。从一开始,我们就考虑了一些策略,因为我们知道靠着热情可以坚持 1~2 年,但工作性质总是会发生变化,因此确定商业模式非常重要。作为 TDengine,我们有三个版本的商业模式。

 

第一个版本是社区版,这是免费下载的版本,其主要目的是建立品牌,建立开发者社区,吸引越来越多的用户,提高用户口碑。一些用户可能一开始使用的是开源产品,但随着公司的不断扩大,可能会做出一些新的商业决策。例如,我们有一个典型的案例,有一个工程师非常了解我们,后来他去到理想汽车公司,觉得可以用上我们的产品,就为获得了一个非常好的客户,社区版发挥了很重要的推广作用。

 

在企业版中,我们提供了两种收费模式:独立部署和订阅。独立部署是一种一次性买断的收费模式,而订阅则是一种长期的收费模式。这两种模式各有优劣。对于国有企业来说,他们可能更喜欢独立部署这种买断式的收费模式。从产品发展和估值的角度来看,我们更喜欢订阅模式。我们销售的是什么呢?由于我们的核心代码已经开源,剩下的是一些辅助功能。如果不需要像审计、加密等高级功能,或者你的公司有足够的技术能力来维护这些软件,那么可以选择不购买这些技术服务。然而,对于许多中小型公司来说,他们虽然拥有技术能力,但也不想将其投入到软件维护上,而是希望将其投入到业务发展上,这个时候就可以考虑购买企业版。

 

我们也有云服务的版本。尽管公有云的需求正在下降,但私有云的需求仍然很高。我们可以在客户公司的私有环境中部署云环境,以满足他们的需求。

开源带来的销售变革


开源有哪些好处呢?首先,开源改变了传统的 ToB 销售模式,我们不再只是去找企业,而是面对活生生的个人客户,这些客户通常都是能够对软件购买产生决策的架构师等人群。这也是我们在软件大会上宣传产品的原因。传统的登门拜访转变为线上销售,PoC 流程也大为减少,因为真正联系我们的客户已经了解软件的使用模式和优缺点。他们只需要检查公司的最佳实践和业务场景是否匹配,以及技术和维护能力是否足够即可。这样,我们需要投入 PoC 的人员也会非常少,售前团队也会变得更小。长远来看,这对公司的成本有很大帮助,我们将从资源型销售转变为技术和产品型销售。我们现在招聘的销售人员很多都是毕业生,只要他们了解行业的基础知识就可以胜任,而传统的到各个圈子走访的销售可能会把资源带走,难以管理。通过这些措施,我们可以把 ToB 的生意变成 ToC 的生意,变成开发人员喜欢的简单生意。所以像能力强的架构师、开发人员都喜欢去大厂,因为工作比较简单。如果我们也能做到这一点,就可以吸引更多的人才加入基础软件行业。

开源带来的生态变革


开源使得技术和产品的竞争变得更加激烈,而不是仅仅依靠销售资源。这将会促进更多以产品为导向的公司的出现,当然平台型公司也会有很大的成长空间。我们相信在各个细分领域,都会出现一些全球性的企业。即使我们只是做螺丝钉,也可以成为全球前三名之一,我们也可以很好地生存下去。我们还可以帮助许多大众型企业降低成本,使他们能够将精力集中在核心业务上。随着这些企业逐渐成长,我们可以获得更多长尾价值。

开源需要组织支撑


我认为开源项目需要一个组织来提供支持。即使你将软件捐赠给 Apache 基金会等组织,也需要有商业孵化公司提供支持。虽然有开发能力和贡献精神的个人可以自己维护和开发软件,但企业使用开源软件需要强有力的支持,以确保软件的稳定性。特别是在发布大版本时,例如从 2.0 升级到 3.0 或从 3.0 升级到 4.0,需要封闭性开发、大量测试、DevOps、CI/CD、手工测试等。个人贡献者不愿意从事这些工作,他们只想编写核心代码。如果这些任务被忽略,软件将无法发布。如果开源软件没有组织支持,它的发展速度将逐渐下降,需要寻找新的方式来维持软件的生命周期,这是一个更长远的问题。



在某次会议上,我听到有人说开源只是一种好玩的东西,但我对他提出质疑,因为开源并不是一个简单的好玩的事情。不同类型的软件公司必须将开源作为他们的事业,并且对待它的态度不能仅仅是好玩。不能因为某个人觉得不好玩了,就停止参与开源工作。尤其对于 ToB 领域的软件,这个思路必须清晰。

开源产品运营的正确姿势

开发者运营是一个项目

 

开源软件需要设立开发者运营部门来协同各类资源,促进开发者生态的搭建和完善,尤其在企业发展到一定规模时。虽然研发人员的开发能力很强,但很多人不愿意写文章或者做演讲报告,而市场推广和商务部门的技术能力相对较弱,无法胜任这些任务。因此,我们需要协调资源,为软件推广提供更好的支持。为此,越来越多的公司开始设立开发者运营部门和布道师岗位,把它视为一个新项目来管理。该项目的主要指标是用户规模的增长,其中用户体验的提升是其中一个关键点。用户体验不仅包括产品本身的使用体验,还包括是否能够在各种搜索引擎中找到所需信息,是否有相关案例、最佳实践和文档,以及在出现问题时能否联系到合适的人进行沟通等。开发者运营的工作很大程度上涉及到这些方面,同时也要参与各种有技术影响力的活动,如写文章和公开演讲,推进技术影响力的提升。通过这些活动和案例的积累,我们可以更容易地为商业赋能。知名度对于线下生意也是一个非常好的支撑。现在我们的开源软件 TDengine 已经走上正轨,客户选择我们也不会被质疑。通过这些方法,我们可以让客户成功,持续了解他们的新需求并加入到我们的产品路线图中。

 

开发者运营的日常工作



作为一个项目,开发者运营需要有很多人员,每天也要处理很多日常工作。第一是用户运营。我们将用户分为几类:顶层灯塔用户、普通用户和企业用户等。对于这些用户,我们提供的支持可能也不同。此外,我们还会制定一定的激励体系,并定期与贡献者进行沟通,授予荣誉证书或分配一些开发任务等。

另外,内容运营也很关键。我们需要编写大量的基础文章、用户案例并指导用户自己撰写。此外,我们还需要发布培训视频和短视频等,这些都是提升影响力的重要部分。

 

活动运营也是项目的一部分,包括线上和线下活动。我们在本次大会上也有展台,展示我们的产品,并回答大家的问题。另外,开源项目肯定需要在某个平台上运行,例如在 GitHub 上,我们需要不断回答用户问题,维护平台并发布新版本,同时还要进行产品培训等。

 

此外,还需要进行数据方面的运营。这些数据主要是供我们自己内部使用的,因为我们需要衡量做的这么多事情中,哪些是有用的,哪些是没用的。这样可以让公司高层了解下一步该如何做,并成为评价指标。如果没有人给你一个明确的评价,那么即使你取得了成就,也会感到不满足。我们正在建立评价体系,并希望通过数据运营的方式,为生态者部门本身提供很好的评价指标。

为什么要进行开发者运营



为什么我们需要进行开发者运营呢?因为开发者就是产品的用户。实际上,直接使用我们的产品的人都是我们的开发者,他们的技能和水平也在不断提高,他们也不会一直待在某一家公司。因此,我们不应该忽视任何一个开发者,无论他们所在的公司是否与我们的业务有交集。开发者是我们技术的伙伴,活跃的开发者对于开源项目的长期繁荣发展至关重要。他们可能也会成为我们生态的伙伴,我们可以与他们共同寻求平台化或生态化运作,实现共同的价值。事实上,有一项调查表明,57%以上的开发者认为他们对基础软件的购买有一定的影响力。

如何让开发者成功


我们应该让开发者成功,让他们开发的软件被市场所接受和喜爱,这样才能让客户成功,最终也才能实现我们自己的成功。为了让开发者成功,我们需要做以下几件事情。

 

  1. 让开发者用起来放心:不用担心产品中的各种坑和后门,不用担心被厂商绑架。

  2. 让开发者用起来安心:不用担心出问题没人管。

  3. 让开发者用起来顺心:不用花费过多的力气去学习、去开发。

  4. 让开发者用起来开心:让开发者开发的应用大获成功。 

开源在中国的机会


在中国开源软件的机会还是很大的。中国的企业可以利用这个机会去颠覆传统软件,就像几年前互联网公司进军企业软件一样。然而,简单地将互联网思维套用于传统软件并不会产生深刻的价值,也不容易获得成功,因为传统软件的业务非常复杂。如果我们能够在开源软件中为其创造一些特别的亮点和特色,如将服务器数量从 100 台降至 10 台,或将响应时间从 10 分钟缩短至秒级,就可以为其赋能,使其更好地进行二次迭代和新项目的申请。因此,在中国开源基础软件仍然有许多机会。

 

中国有许多工程师,价格便宜、数量充足,因此我们可以用较低的人民币薪资生产类似的软件。中国是制造大国和消费大国,有所有的应用场景,而且数据量巨大,我们可以在国内做好一些试验,之后再将其开源。一旦我们开源软件,它将变得非常可靠,这也是我们向全球市场进军的最好路径。

 

最近参加的一次会议讨论了如何拓展海外市场并制定相应的计划。许多方法都被提出,但开源无疑是其中非常重要的一环。开源并不意味着免费,一旦确定好收费模式,就可以更好地推广产品。

 

“有所为,有所不为”是指要不忘初心,即在创建公司时要明确业务场景和所期望的效果,始终记得这一点。虽然可以进行修改,但不应因获得大型客户合同而进行修改。例如,今天有一个 3 千万的项目,你应该接还是不接呢?如果接了,企业中可能有一半以上的重要员工将去做这项开发工作,甚至可能无法预期项目何时完成。一旦开始这样的项目,会有越来越多的类似需求出现,销售人员也会为自己的 KPI 而推销更多需求。这家原本是基础软件公司的企业,可能会变成一个集成商。如果一直继续这样,最终会发现,两三年后,原本擅长的领域已有更多竞争者,软件也无法更好地发展。因此,如果我们能够坚持五年或八年来发展自己的产品,仍然有可能在该领域取得垄断地位。

参与开源社区的好处


参加开源社区肯定有好处。我们可以了解到业界广泛应用的各项技术,并学习到高质量设计的思路。即使你认为他们写的代码很平凡,但是他们的流行性基本代表了业界的高水平。此外,公开的程序和文档强制你严格要求自己。在公司内部写一个文档可能只需要随便写两句,但一旦要公布出去,就需要仔细斟酌。这也包括在公司内部做报告时,你可能不会花费时间去准备完善的 PPT,但在开源社区,你需要不断磨练自己,提高自己的技能水平。参加越来越多的顶级开源软件项目也是你技能的一个很好的证明。如果别人能够 approve 你的 commit,就说明你的水平达到了这个软件的基本水平,这也是你简历中最好的证明之一。

 


欢迎大家加我的微信,我们可以线下聊聊。此外,如果你对 TDengine 感兴趣,可以在 GitHub 上下载代码。TDengine 是一款开源、高性能、云原生的时序数据库,专为物联网(IoT)、连接汽车、工业物联网和 DevOps 而优化。谢谢大家!

 

2023-07-04 14:304919

评论

发布
暂无评论
发现更多内容

给新手学习MySQL的建议

Simon

MySQL

一例智能网卡(mellanox)的网卡故障分析

安第斯智能云

后端

短视频获客软件系统开发公司

我的职场规划

escray

学习 极客时间 朱赟的技术管理课 7月日更

外包学生管理系统的架构设计

面向对象的猫

图解红黑树

Ayue、

数据结构

小透明学弟的华为上岸之路

程序员鱼皮

Java c++ Python 大前端 后端

如何基于磁盘 KV 实现 Bitmap

Kvrocks

redis BitMap storage KV存储引擎

最壕逆天改命:18名Java程序员凭阿里P8笔记,同时斩获一线大厂offer

Java架构师迁哥

还在用Jenkins?试试Gitlab的CI/CD功能吧,贼带劲!

以1敌10不是梦,Spring Boot企业级真实应用案例

博文视点Broadview

来自网络资源资产管理的灵魂拷问

鲸品堂

网络 资源 运营商

哔哩哔哩B站视频下载器推荐(简单又好用)

资源君

工具 分享 哔哩哔哩 b站视频下载 教程分享

开源 Rainbond 5.3.2 版本发布,易用的云原生应用管理平台

Barnett

云计算 开源 基础软件 小版本升级

一个Android程序员的腾讯面试心得,进阶学习资料!

欢喜学安卓

android 面试 移动开发 程序猿

经典译文 | 项目经理必读的基本工作法则

LigaAI

项目管理 项目经理

SpringBoot启动加载监听器以及监听应用启动阶段事件

捡对象的cy

springboot

财务或类财务系统数值精度设计

路边水果摊

数字 财务 精度 数值

抖音获客系统开发

获客I3O6O643Z97

抖音 头条抖音 抖音霸屏

电脑里的视频被误删了可以用EasyRecovery恢复吗?

淋雨

EasyRecovery 文件恢复 硬盘数据恢复

带你认识MindSpore量子机器学习库MindQuantum

华为云开发者联盟

mindspore 量子机器 MindQuantum 量子机器学习库

Cypress 自动化测试

admin

自动化测试 Cypress 测试 单元测试 UI测试

手把手教你实现Android编译期注解

vivo互联网技术

android 注解 sdk

科技监管能源运作?智慧能源从光热发电技术开始描述

一只数据鲸鱼

数据可视化 智慧能源 光热发电

Unity ML-agents 参数设置解明

行者AI

CWE发布2021年最危险的25种软件缺陷

华为云开发者联盟

安全 隐私保护 安全漏洞 cwe 软件缺陷

英特尔加速制程工艺和封装技术创新

E科讯

Python OpenCV Canny 边缘检测知识补充

梦想橡皮擦

Python 7月日更

私域流量系统开发,APP源码搭建

获客I3O6O643Z97

私域流量 抖音霸屏

论文解读丨Zero-Shot场景下的信息结构化提取

华为云开发者联盟

测试 图网络 信息结构化 图卷积网络 zero-shot

秒懂 Java 的三种代理模式

从闭源到开源,明星项目 TDengine 的开源之路_数据库_InfoQ精选文章