Sora 技术讨论以及普通人和开发者如何利用 Sora 改变世界

Sora !!! 近日,互联网上掀起了一阵关于Sora的热潮。作为OpenAI最新推出的技术,Sora赋予了文字生成视频的魔力,其展示的效果令人印象深刻。 在当前,短视频的吸引力已远超过传统的小说和图像漫画。因此,Sora的问世,可能会在视频制作领域引发一场革命。 Sora的魅力在于,它能够基于文本描述生成长达60秒的视频内容,这些内容包括了精细的场景设置、栩栩如生的角色表情,以及流畅的镜头转换。 这项技术能够塑造出多元化的角色,实现特定的动作,并且在主题和背景方面做到与描述高度一致。Sora不仅准确地理解用户的指令,还能深刻洞察这些元素在现实世界中应有的呈现方式。 Sora展现了对语言的深刻洞察力,能够精确捕捉用户的意图,创造出既生动又情感充沛的视频内容。它甚至能在同一视频中呈现多个场景,同时保证角色的连贯性和视觉风格的统一。 然而,Sora并非完美无瑕。在模拟复杂场景下的物理效应,以及理解特定因果关系方面,它仍有待提升。例如,视频中的角色可能会咬一口饼干,却未能在饼干上留下明显的痕迹。 此外,Sora在处理空间细节,如分辨方向,或是描述一段时间内的具体事件,如摄影机的移动轨迹时,也可能显示出一定的局限性。 简单来说,简单来说,Sora 是一种能用文本生成最长 60 秒视频的技术,也可以用来生成图片,因为图片本质上是一帧的视频。 这篇文章,将会从 Sora 的架构,然后到 Sora 的生态,以及最后普通人或者开发者如何利用或者使用 Sora ,为这个 AI 浪潮做准备 ~ Sora的架构与创新 Sora代表了在AI视频生成技术中的一次重大创新,它在架构上与之前的Runway及Stable Diffusion等基于扩散模型的系统有着明显的区别。核心之处在于Sora采用了Diffusion Transformer模型,这是一个结合了扩散模型和Transformer模型的先进架构,为视频生成带来了前所未有的灵活性和质量提升。 架构比较 Runway/Stable Diffusion:这些系统基于扩散模型,通过逐步向图片添加噪点,再逐步去除噪点的方式生成清晰图片。这一过程虽然能够生成高质量的图像,但在视频生成上存在限制,尤其是在处理长视频和维持视频一致性方面。 Sora:Sora利用Diffusion Transformer模型,通过Transformer的编码器-解码器架构处理含噪点的输入图像,并预测出更清晰的图像版本。这不仅提高了图像处理的效率,而且在视频生成上实现了显著的进步。Sora的创新在于它处理的基本单位不是文本的Token,而是视频的“Patch”,即随时间变化的色块,这允许Sora处理任何大小和长宽比的视频,无需预先裁剪或调整。 创新应用 Sora的架构使其能够在训练时使用更多的数据和计算资源,得到更高质量的输出。这种方法不仅避免了视频预处理可能导致的原始构图丢失问题,而且因为能够接收任何视频作为训练输入,Sora的输出不会受到训练输入构图不良的影响。此外,Sora展示了模拟复杂物理现象(如液体动力学)的能力,这得益于其在训练时使用的大量视频数据中包含的物理规则。 研究基础与启示 Sora的开发受到了《Scalable Diffusion Models with Transformers》和《Patch n’ Pack: NaViT, a Vision Transformer for any Aspect Ratio and Resolution》两篇论文的启发,这些研究来自Google,并在Sora项目启动后不久发表。这些研究提供了Sora架构的理论基础和技术细节,为Sora及未来AI视频生成技术的发展奠定了坚实的基础。 通过结合扩散模型和Transformer模型,Sora不仅在技术上实现了突破,而且为视频制作和AI应用开辟了新的可能性,预示着AI在影视制作、内容创作等领域的未来将更加广阔和深入。 Sora 和之前的 AI 视频生成工具有什么升级 Sora在AI视频生成领域的出现,标志着技术进步的一个重要里程碑。与早期的AI视频生成工具相比,Sora引入了一系列创新和升级,这些改进不仅提高了视频的生成质量,而且极大地扩展了视频创作的可能性。以下是Sora与之前AI视频生成工具的主要升级和优化: 提升生成视频的质量和稳定性 Sora的技术进步主要体现在能够生成高质量视频的能力上。与之前的工具相比,Sora生成的视频可以达到长达60秒的长度,同时支持镜头切换、确保画面中的人物和背景的稳定性,以及实现高画质输出。这些改进意味着使用Sora生成的视频更加逼真,观看体验更佳,为用户提供了更为丰富和动态的视觉内容。 创新的技术架构:Diffusion Transformer模型 Sora之所以能够实现上述优势,归功于其基于Diffusion Transformer模型的创新技术架构。这一架构融合了扩散模型和Transformer模型的优点,使Sora不仅能够生成文本内容,而且能够预测生成所谓的“时空补丁”。这些时空补丁可以理解为视频中的一个小片段,包含了几帧视频内容。这种方法使得Sora在训练过程中不受视频长度和显卡性能的限制,生成过程更加灵活多样,能够组合不同的时空补丁来创造出新的视频内容。 灵活性和多样性的增强 与基于Diffusion模型的Pika或基于Transformer模型的LLM和ChatGPT等工具相比,Sora的技术架构赋予了它更高的灵活性和多样性。Pika在处理视频内容时受到显卡性能的限制,而且主要模式集中在基于图片关键帧的视频扩展或风格转换上。Sora则通过其独特的模型,能够无需拘泥于特定的视频分辨率或长度限制,创造出更加丰富和多变的视频内容。 Sora 的算力要求 在讨论Sora的使用成本和算力要求之前,我们需要明白AI视频生成技术特别是像Sora这样的先进模型,其成本和算力需求是由多种因素决定的。这些因素包括但不限于模型的复杂度、生成内容的分辨率、视频的长度、以及所需的生成质量。以下是对Sora使用成本和算力要求的一个专业化和详细的分析。 成本估算基础 在估算Sora生成60秒视频的成本前,我们参考了现有的AI生成技术的定价模式。例如,DALL-E 3的HD图像生成成本为 $0.08 每次生成,而Runway Gen-2的视频生成服务收费为$0.05/秒。这些价格提供了AI生成服务定价的大致范围。 ...

二月 24, 2024 · 2 分钟 · 221 字 · 熊鑫伟,我

Go 源码里的这些 go: 指令 && go 自动化工具

Go 源码里的这些 go: 指令 && go 自动化工具 开发人员有很强的自动化重复性任务的倾向,这也适用于编写代码。 样板代码可能包括设置基本文件结构、初始化变量、定义函数或导入库或模块等操作。 在某些情况下,包提供样板代码作为开发人员构建的起点,通常是在代码行为配置之后生成。 尽管样板代码对于应用程序功能可能是必要的和有价值的,但它也可能是浪费和冗余的。出于这个原因,有许多工具可以最小化样板代码。 go generate 是Go编程语言的命令行工具,允许自动生成代码。您可以使用 go generate 为您的项目生成易于修改的特定代码,使该工具在减少样板文件方面功能强大。 go generate 这个命令通常用于在编译前自动生成代码。它可以用来创建那些重复性高或者模式化的代码,从而节省时间和减少错误。想想看,这在哪些情况下会特别有用呢?🤔 比如说下面有一个简单的例子,在代码中: //go:generate echo Hello, cubxxw ! 在这个例子中,当我们运行 go generate 命令时,它将执行注释中指定的命令。在这个例子里,它会打印出 “Hello, cubxxw !"。 因此,元编程(metaprogramming)的主题是一个开发和研究的热门领域,可以追溯到 1960 年代的 Lisp。元编程中一个特别有用的领域是代码生成(code-generation)。支持宏的语言内置了此功能;其他语言扩展了现有功能以支持这一点。 go:generate 在我们之前的讨论中,我们已经介绍了 “Go Generate” 命令的基础知识。现在,我们将深入探讨一些更具体的用例和实践技巧。🚀 让我们从一些术语开始。go generate 工作方式主要由三个参与者之间协调进行的: Generator:是由 go generate 调用的程序或脚本。在任何给定的项目中,可以调用多个生成器,可以多次调用单个生成器等。 Magic comments:是 .go 文件中以特殊方式格式化的注释,用于指定调用哪个生成器以及如何调用。任何以文本 //go:generate 行开头的注释都是合法的。 go generate : 是 Go 工具,它读取 Go 源文件、查找和解析 magic comments 并运行指定的生成器。 需要强调的是,以上是 Go 为代码生成提供的自动化的全部范围。对于其他任何事情,开发人员可以自由使用适合他们的任何工作流程。例如,go generate 应该始终由开发人员手动运行; 它永远不会自动调用(比如不会作为 go build 的一部分)。此外,由于我们通常使用 Go 将二进制文件发送给用户或执行环境,因此很容易理解 go generate 仅在开发期间运行(可能就在运行 go build 之前);Go 程序的用户不会知道哪部分代码是生成的以及如何生成的。(实际上,很多时候会在生成的文件开头加上注释,这是生成的,请别手动修改。) ...

一月 25, 2024 · 5 分钟 · 973 字 · 熊鑫伟,我
向量数据库学习

向量数据库的学习

今天学习 rust ,发现 rust 是非常适合编写数据库的语言,找到了一个宝藏的项目 tikv,它的 github 项目地址是 https://github.com/tikv/tikv ,是一个非常活跃的项目,但是我今天的主题是 AI 领域的向量数据库,话不多说,我们马上开始吧。 先决条件 0.1 基础知识介绍:了解向量数据库的基本定义及其与传统数据库的区别。 0.2 数据结构基础:学习向量和其他基本数据结构,如何在数据库中表示和操作这些结构。 0.3 线性代数入门:介绍向量运算,包括向量加法、减法和点乘。 0.4 相似性度量:了解如何计算向量间的相似度,例如余弦相似性。 0.5 数据库索引基础:介绍数据库索引的基本概念,特别是在向量数据库中的应用。 0.6 搜索算法初步:学习基础的搜索算法,理解如何在大型数据集中进行有效的搜索。 0.7 应用案例研究:研究向量数据库在不同领域(如推荐系统、图像识别)中的应用。 主要课程 1.1 向量数据库深入:探索向量数据库的高级特性和优势。 1.2 算法探究:深入了解在向量数据库中使用的关键算法,包括索引和搜索算法。 1.3 数据库设计:学习如何设计和实现一个有效的向量数据库架构。 1.4 集成机器学习:了解如何将向量数据库与机器学习模型集成,以提高性能和功能。 1.5 实际案例分析:通过分析实际案例来加深对向量数据库应用的理解。 1.6 高级数学概念:深入学习相关的高级数学概念,如高维空间的向量表示和操作。 1.7 项目实践:开展一个小型项目,实践向量数据库的设计和应用。 1.8 回顾和评估:复习所学内容,并通过评估来测试理解和应用。 0.1 基础知识介绍 向量数据库是一种特殊类型的数据库,它们使用数学向量来表示和存储数据。这与传统数据库有很大的不同,传统数据库通常使用表格和行来组织数据。 向量数据库的定义 💡 向量数据库是如何工作的? 在向量数据库中,数据以向量的形式进行存储和处理,因此需要将原始的非向量型数据转化为向量表示。数据向量化是指将非向量型的数据转换为向量形式的过程。通过数据向量化,实现了在向量数据库中进行高效的相似性计算和查询。此外,向量数据库使用不同的检索算法来加速向量相似性搜索,如 KD-Tree、 VP-Tree、 LSH 以及 倒排索引 等。在实际应用中,需要根据具体场景进行算法的选择和参数的调优,具体选择哪种算法取决于数据集的特征、数据量和查询需求,以及对搜索准确性和效率的要求。 它们是如何使用向量来存储和处理数据的? 向量数据库使用数学向量来存储和处理数据,这与传统的数据库存储方式有显著不同。这里的关键步骤和概念包括: 数据转换为向量 🔄 在向量数据库中,数据首先被转换为数学向量的形式。例如,文本数据可以通过自然语言处理技术转换为向量,图像数据可以通过深度学习模型转化为向量。 向量表示 📈 每个数据项都被表示为一个向量,这个向量在多维空间中有其特定的位置和方向。这些向量通常在高维空间中,每个维度代表数据的一个特征。 相似性搜索 🔍 向量数据库的一个关键功能是相似性搜索。它通过比较数据项的向量之间的距离(例如,使用余弦相似性)来找到相似的项。这对于处理复杂查询和大数据集特别有效。 索引和检索 📚 向量数据库使用高效的索引机制来快速检索和访问数据。这些索引帮助数据库快速定位查询中涉及的向量,从而加快搜索速度。 机器学习集成 🤖 许多向量数据库可以与机器学习模型紧密集成。这允许数据库不仅存储数据,还可以通过模型直接处理和分析数据,从而提供更高级的数据处理和分析能力。 通过使用向量来表示和处理数据,向量数据库能够处理更复杂、更丰富的数据类型,同时提供更快的搜索和检索性能。这使它们在如今的数据驱动世界中变得越来越重要。 ...

一月 20, 2024 · 5 分钟 · 963 字 · 熊鑫伟,我
高效的版本控制和测试工作流程

OpenIM:构建高效的版本控制和测试工作流程

OpenIM 构建高效的版本控制和测试流程 开源项目的成功与否在很大程度上取决于其质量管理和协作流程。在 OpenIM 开源社区中,项目管理和测试流程的规范性至关重要,以确保代码的质量和稳定性。本文将简要介绍我们的测试方案、分支管理和质量控制策略,以及如何应用于 main 分支、PR 测试分支和稳定的 release 分支,以满足开发者、测试人员和社区管理者的需求。除此之外,还将介绍OpenIM开源社区的规范、测试方案和项目管理策略,旨在提供清晰的指导,以确保项目的稳定性和可持续性。 分支管理与版本控制 对于 OpenIM 来说分支的版本管理策略是尤其重要的,这里面设计到两块,一块是 OpenIM 的部署分支策略,一个是镜像版本策略,这两块分别参考下面的文章: 分支以及 tag 的版本策略 镜像的版本策略 总的来说: 在OpenIM社区中,main 分支被视为稳定版本的代表。所有代码必须经过严格的代码审查和测试,确保其质量和稳定性,然后才能合并到 main 分支中。 release 分支用于发布稳定版本。在 openim-docker 以及 openim-k8s 中使用的镜像版本也都是 release-v3.* 。在 release 分支上的任何更改都应该是针对已知问题的修复或功能的精心策划的添加。测试工作应重点关注于 release 分支,以确保发布版本的可靠性。 测试方案 Main 分支测试 在 main 分支上进行的测试应覆盖核心功能和关键路径,以确保基本功能的稳定性。测试工作应包括单元测试、集成测试和端到端测试。这部分所有的工作全部交给自动化去做,而不需要测试干预。 Release 分支测试 对于三种仓库,分别是 https://github.com/openimsdk/open-im-server 仓库,https://github.com/openimsdk/chat 仓库,https://github.com/openimsdk/openim-sdk-core 仓库。 在 release 分支上进行的测试要求更严格。测试团队应深入测试所有功能,并着重检查先前已知的问题是否已解决。确保在发布前没有潜在的问题。 这里的 PR 合并规则: 以 这个PR 为例: 首先是 PR 标题,PR 标题 fix pageFindUser ,首先,我们知道 git commit 信息包括是三种: ...

一月 15, 2024 · 2 分钟 · 304 字 · 熊鑫伟,我

AI元年: 2024年的新兴挑战与趋势

2024年1月6日大语言模型分享会 模型的局限: 深度学习 预训练模型 大语言模型 大语言模型的涌现能力: 💡 复杂系统学科里已经对涌现现象做过很久的相关研究。那么,什么是“涌现现象”?当一个复杂系统由很多微小个体构成,这些微小个体凑到一起,相互作用,当数量足够多时,在宏观层面上展现出微观个体无法解释的特殊现象,就可以称之为“涌现现象” Link: 大语言模型进化之谜:涌现现象的挑战与争议_AI_张俊林_InfoQ精选文章 大语言模型的特点趋势的转变: 大语言比人更懂人类的习惯。 使用 RLHF 训练 使用人类习惯的方式交互 大语言模型的发展脉络: 开源模型越来越多,比例越来越大。 预训练模型依旧是非常多的,但是微调的比例越来越高 如何学习大语言模型 模型结构的配置 大语言模型的微调 使用技巧 自己训练模型 不一定要只是单一的数据,也可以是数据的混合(包括自己提供的业务文档或者代码) 训练的数据来源: 💡 数据安全和重复数据的去重,数据筛选很重要(这一步该怎么做?) 当处理和准备用于机器学习模型训练的数据时,确保数据的质量、安全性、和去重非常重要。这里有一些关键步骤和方法,可以帮助你实现这一目标: 质量过滤(Quality Filtering): 确保数据准确无误:移除或修正任何错误的、不完整的或者是不准确的数据。 保证数据的一致性:确保所有的数据遵循同样的格式和标准。 数据去重(Data Deduplication): 识别和移除重复数据:使用算法或者工具来识别完全相同或高度相似的数据项,并将其合并或删除。 对于文本数据,可以使用哈希算法或者基于内容的去重方法。 隐私去除(Privacy Removal): 确保数据中不含有任何个人可识别信息(PII),如姓名、地址、电话号码等。 在某些情况下,可以使用数据脱敏技术,如匿名化或伪匿名化,来保护用户隐私。 分词(Tokenization): 对于文本数据,分词是将连续文本分割成更小单元(如单词、短语或字符)的过程。 分词的方法依赖于特定语言的语法和词汇结构。对于中文,可能需要特定的分词工具,因为中文是一个无空格分隔的语言。 解码器结构 “causal decoder"和"prefix decoder"是两种不同的解码器结构,它们在处理序列数据,尤其是在文本生成任务中扮演着重要角色。下面是这两种解码器的对比: Causal Decoder (因果解码器) 定义和应用: 因果解码器,如在GPT系列模型中所使用的,是一种单向解码器。 它在生成文本时,仅考虑已经生成的或给定的前文(即,它只看到左侧的上下文)。 工作原理: 在处理每个新词时,因果解码器仅使用前面的词作为上下文。 这种模式模拟了人类自然语言的生成方式,即基于已知信息顺序地产生新信息。 用途: 适用于文本生成任务,如故事叙述、自动写作、聊天机器人等。 特点: 保证了生成的文本是连贯的,并且在逻辑上遵循了之前的上下文。 不能回看或考虑未来的词汇或句子结构。 Prefix Decoder (前缀解码器) 定义和应用: 前缀解码器是一种可以同时考虑前文和后文的解码器,类似于BERT中的masked language model(MLM)。 它在处理数据时,可以同时考虑序列中的前缀和后缀信息。 工作原理: 在处理每个词时,前缀解码器使用前面的词和后面的一些占位符或掩码作为上下文。 这种方式使得解码器在生成某个词时,可以考虑到整个序列的结构。 用途: 常用于需要双向上下文理解的任务,如文本填空、句子完善、语言模型训练等。 特点: 能够在生成文本时考虑到更全面的上下文信息。 更适合于理解整个句子或段落的结构和含义。 模型结构的优化 模型结构优化一直以来都是比较fancy的工作,优秀的模型结构设计,可以大大提高模型参数的效率,甚至小模型效果可以超过大模型。本文我们以XLNet、ALBERT、ELECTRA为例进行分析。虽然他们也可以认为是预训练任务优化和模型轻量化方面的工作,但鉴于模型结构创新力度很大,我们还是在模型结构优化这个版块来分析他们。 ...

一月 14, 2024 · 3 分钟 · 582 字 · Xinwei Xiong, Me
关于2023年

回顾与前瞻:我的2023年度总结报告

我的 2023 年度总结 2023 很快就要过去了,转眼间大学生活只剩下最后半年了,我一个朋友说过,工作的越久越是觉得:*可怕的不是你失去了工作的激情,而是再也找不回来了。* 这一年经历了很多,接触了很多人,遇到过很多事情,慢慢的对自己的三观有种雏形。很喜欢马斯洛需求层次理论(Maslow’s hierarchy of needs) 从中找到自己的状态。我喜欢挑战,无论是工作还是业余爱好(爬山,骑车 …)我似乎已经成功地满足了马斯洛需求层次理论中的前四个级别:生理需求、安全需求、社交需求和尊重需求。我目前所处的阶段很可能是自我实现需求。但是值得一提的是,虽然马斯洛的理论是分层的,但实际上人的需求可能不会那么线性或固定。例如,即使一个人达到了自我实现的阶段,他们仍可能在不同时间遇到其他层次的需求。例如,如果一个人失去了工作或遭遇经济困难,他们可能会重新关注安全需求,比如财务安全和稳定。同样,如果一个人经历了亲密关系的结束或社交网络的变化,他们可能会重新感受到对社交需求的渴望。甚至在日常生活中,像是在生病或饥饿时,我们的注意力可能会暂时从更高层次的需求,如自我实现,转移到生理需求上。 我认为我们应该认识到,虽然人们可能在不同时间点上侧重于不同的需求层次,但这并不意味着他们在个人发展上有所倒退。相反,这是一个自然的、动态的过程,反映了人生的复杂性和多变性。在面对挑战和变化时,能够灵活地调整自己的需求焦点,是适应和个人成长的一部分。所以,顺其自然,把握节奏,不断学习,不断思考,是我的成长生存名言。 户外很大一个程度上,放松了我的思想,让我能站在一个局外的角度看待整个棋局。纵穿整个成长的周期,我们就像是深处在一个棋局上,每一个角色都不可或缺,但却都有自己的局限性。 今年有一种冲劲,很讨厌温水煮青蛙的生活,以及安于现状的人生,偶尔出现一点点的 idea,或者是灵光一闪,偶然间有一个冲动想自己创业做下去。这些想法也被我一点点的记录在本子上,我总觉得以后可能有机会会翻起,那时候会孤注一掷的去做。处在马斯洛的自我实现需求的层级上,渴望做出自己的事业。事业和工作,事业指人们所从事的具有一定目标,规模和系统的对社会发展有影响的经常活动;而工作指在长时间内做着重复的一系列动作或事情。很明显,我们都知道,如果人生是一个游戏,那么后者的角色就是一个 NPC,做的永远都是重复,没有任何价值的增效的工作,不利于个人成长,对社会的进步也是微乎其微。做事业和做生意也是有所区别的,生意是以短期赚钱为导向,事业是以人生高度为导向。 在重庆游玩的时候,也是和一个非常厉害的创业前辈交流过(经历和认知,文化水平卓越),明白了,对于以赚钱为驱动,那么就是在做生意;如果是以梦想,热爱,坚持为驱动,那么就是真正的做事业,赚钱,只是这个过程中的水到渠成。作为一个螺丝钉,在一线上工作,尽管象棋中的兵看似不起眼,但它们是实现战略目标的基础。在创业中,前线员工(开发、测试、运维)和日常运营团队就像这些兵,他们执行日常任务,是企业运行的基石。但是,如果只是做士兵,那么当然可以安于现状,但是,如果你期望做出自己的事业来,那么当然是不够的,只专注于日常的业务操作而没有更广阔的视野,可能会错失重要的战略机会。你还需要跳跃出你的思维和格局,要结合象的远见、马的创新思维和车的执行力。这意味着你需要能够制定长远的战略规划(象)、灵活地应对突发情况并创造性地解决问题(马),以及直接推动业务前进(车)。甚至是要有战略性思维,如果是作为企业的战略领导者,类似于象棋中的国王。具备全局视角,设定公司的长远目标和战略方向。虽然国王在棋盘上的移动有限,但却是游戏的核心。同样,作为创业者,我们可能不会直接参与每一个细节,但是,作为决策者的的决策和愿景对公司至关重要。从此,无论是工作中还是项目中,我常常是将自己带入到棋盘中的各个角色,去认真感受棋局以及每个角色的变化。 在职业生涯中,遇到面试官反问的环节,我比较喜欢询问的几句话: 在您看来,员工为什么选择留在这家公司?他们对工作最热情的方面是什么? 您为什么要选择这家公司,您个人在这里工作的最大动力是什么?您认为同事们最看重公司的哪些方面? 您能描述一下这里的工作环境吗?员工通常是怎样描述他们在这里的工作体验的? 您作为老板,能告诉我您的创业经历吗,为什么要选择创业,创业意味着什么? 您能分享一下公司领导的领导风格吗?他们是如何激励团队和推动创新的? 这些问题潜在的可以帮助你了解员工和老板的工作状态,思想。 在中国传统教育框架体系中,成功的定义是,拥有自己的事业。当然在课本上也并非如此,成功其实是一种感觉,可以说是一种积极的感觉,它是每个人达到自己理想之后一种自信的状态和一种满足的感觉!总之,我们每个人对于成功的定义是各不相同的!在简易的成功学中,成功的定义是:*天赋,努力和运气* 。用我们平常 code 的思维理解,三者中或只有 努力 是可以读写操作的,而天赋和运气都是可读的,但并不能写操作。所以,对于我们大部分普通的人来说,都是 “尽人事,听天命” 的状态。记得有首励志的歌这么说的:你尽管努力,剩下的交给天意 。 于是,这就是今年形成的思想,勇敢的去做,不要怕失去,努力也是一种投资,就像二级市场的 K 线图一样,有涨有跌。拿三种曲线举例,第一条曲线前期曲曲折折,突然在一个转折点扶摇而上,直冲云霄;第二条曲线前期曲曲折折,后期也是曲曲折折,不上不下;第三条曲线前期也是曲曲折折,突然一个转折点暴跌,坠入低谷;我们大部分人都渴望走第一条曲线的道路,但是,前期的曲曲折折,是否会迎来某一个转折点,没有人知道。有时候我们可能会感到停滞不前,甚至是跌宕起伏,但这并不意味着失败。稳定可以是成长和自我反思的机会,也可能是积蓄能量、准备下一次跳跃的阶段。勇敢地面对挑战,不惧怕失去,将努力视为一种投资,是通向成长和成功的关键。生活和职业道路有其起伏,这些在儒家思想中可见,对待得与失、荣与辱、成与败等等,乃至人生的吉凶祸福,人们应注重“求诸己”,不假外力,更不应怨天尤人。重要的是如何应对这些起伏,以及我们从这个过程中学到了什么。 接下来以下面的几个议题快速的对自己做年度总结: 首先,专业上,最具有代表性的是我的专业名片,github 地址 Github 的贡献的小绿点: 我的 gihtub 2023 徽章: 一、开源项目贡献 以 github 代表为例,今年的 ossinsight 表现: 项目参与: 2023 年主要参与的开源项目: openim , 参加了阿里的开源项目 sealer ,网易的 gitops 项目 horizon ,贡献了 kubernetes 项目、k8sgpt 。提出了基于 AI和大语言模型的智能客服 openkf …… 技术成长: ...

十二月 31, 2023 · 2 分钟 · 272 字 · Xinwei Xiong, Me

对开源商业化的思考 & 全球流量大会(GTC)学习以及总结

引言:深圳福田会展中心的全球视野 2023年12月6日,在深圳福田会展中心,GTC 2023 全球流量大会如火如荼地展开。这场盛会汇集了来自全球的技术精英,共同探索互联网行业的前沿动态和未来发展趋势。身为参与者,我有幸深入这场融合科技与商业的交流盛会,特别是“聚焦开源,扩展出海新领航”这一议题,让我收获颇丰,印象深刻。 大会聚焦于全球化的多元话题,包括出海市场的选择、广告推广策略等,与我此前参加的专注于日本市场出海活动的公司非常相似。然而,这次大会让我首次深入接触开源社区,不仅结识了众多开源界的领袖和布道者,也与许多杰出的开发者交流了心得。通过这些交流,我不仅学习到了许多新知识,还在思想上得到了升华。 在这篇博客中,我将对这次独特的经历进行深入的反思和总结,分享我在开源和全球化交汇中的洞见和学习。 对于 OpenIM 来说,我们现阶段正在全力准备奔向海外市场,希望打开国界,将 OpenIM 好用而且免费的开源核心功能贡献给全世界开发者。 开源项目天生就是分布式协作的,这是一种松散的结构。以 OpenIM 的开发者为例,我们现在有很多贡献者,开发者,虽然社区有双周会,但是还是很难和人或者同事有深层次的交流。 但对于开源商业公司而言,并不能简单的使用这种远程工作模式。在商业公司中,协作会更加的密切,而且对时效性的要求更高,当面沟通更能保证信息传递的完整性,这是远程工作难以替代的。当然,远程工作也有自己的优势,那就是吸引全球的人才。 所以,开源商业公司采用远程协作并没有问题,但一定要保证沟通的足够充分,拉平信息: 要视频沟通,文字只作为最终的记录。视频是沟通过程中信息丢失比较少的方式,是远程工作交流的首选方式。千万不要用文字来讨论非技术问题,这会带来巨大的信息差和误解。 保证沟通的尊重和善意。在开源项目中,大家因为没有雇佣关系,都是无偿做贡献,所以在异步沟通时特别强调尊重和善意;而在商业公司的远程办公时,因为缺少同事之间的沟通、吐槽和心理按摩,就更要注意沟通的尊重。 定期线下见面,增加相互之间的了解和信任。 另外一点,长期的远程协作,对于参与的工程师来说,除了需要很高的自律和自我管理的要求外,也要注意工作和生活的隔离,保持正常的社交活动和运动健身,否则很容易与社会脱节。 之前和 Apache APISIX 的某个小姐姐聊天,她说的一句话感触很深。也有很多适应不了远程工作的同事一一离去,这也是一个适者生存的达尔文法则。 关于 OpenIM 的远程工作,以及企业的文化,强烈推荐阅读下面的博客: Englist Version 中文版本 出海挑战:中国互联网企业的全球化之旅 中国互联网企业在全球化道路上的探索充满挑战与机遇。从初涉海外市场的尝试到在竞争激烈的国际环境中求生存,它们不断在新的市场环境中寻找增长点。这一过程中,企业需要超越传统的商业模式,适应多元文化和不同的市场需求。 首先,来到了第一个话题,为什么要去做海外社区? 和很多的开源社区的布道者和专家沟通交流,然后反思,我深信建立一个活跃的海外社区是开源项目成功的关键。在全球化的今天,开源不仅是关于代码的分享,更是一种文化和思想的交流。通过建立海外社区,我们不仅能将技术带到世界的每个角落,还能促进不同文化背景下的思想碰撞和创新。 人性化地讲,建立海外社区意味着建立更广泛的连接和共鸣。每一位开源贡献者,不论身处何地,都希望他们的声音被听见,他们的贡献被认可。海外社区提供了一个平台,让来自世界各地的开发者能够参与到项目中来,分享他们独特的视角和经验。这种多元化的参与不仅丰富了项目本身,还激发了更多创新的火花。 同时,海外社区的建立也是对开源精神的一种致敬。开源精神强调的是开放、协作和共享,而这些价值观在全球范围内都是通用的。当我们向海外扩展时,我们不仅在分享代码,更在传播这种包容和合作的精神。 此外,对于开源项目而言,海外社区的建立还意味着更广阔的市场和使用场景。不同的地区和文化背景下,用户对技术的需求和应用方式可能截然不同。这些多样性的输入是项目发展不可或缺的,它们有助于项目更全面地成长,更好地服务于全球用户。 我从大一开始接触 Github ,这个成功打开我通往未来的钥匙。 从2020年左右我开始接触开源,觉得开源比业务代码更有意义。因为开源不仅有技术积累,而且能把你学到的东西分享给其他人,一起成长,所以开源对程序员来说是一个双赢的事。 最开始的时候,我通过学习做笔记,分享笔记到 GitHub ,到后面做项目,参与到一些顶级的开源项目中来,然后慢慢的追求精益。整个过程,我很清晰的看到自己的成长。 甚至我的代码,就像 Git 或者 区块链的默克尔树结构,一步步的串起来记录,每当一个时间段,看到以前的 PR ,满满的都是回忆和尴尬 … 同样,我也是一个云原生的爱好者。 在如今这个时代,开源已经成为了一个不可逆的潮流,尤其是在云原生的领域。以微软为例,他们在 Github 上的开源项目贡献位居全球前列,这充分体现了他们对开源的全面拥抱。在云原生时代,如果你不拥抱开源,不利用开源组件去构建和优化你的核心系统,很可能会在激烈的市场竞争中落后。云原生技术的迅猛发展要求企业和开发者必须快速适应新技术和方法论,而开源社区正是这种创新和合作的孵化器。在这个时代,开源不仅仅是技术选择,更是一种必要的战略思维。 开源社区国际化选择:第一站,启航 美国:开源发展的领头羊 美国仍然是全球最大的开发者社区,拥有超过2000万的开发者,过去一年增长了21%。美国的开源社区历史悠久且成熟,是全球开源活动的重要推动者。 亚太地区:快速增长的新星 亚太地区,尤其是印度、日本和新加坡,正经历着显著的开源社区增长。印度的开发者社区增长尤为显著,预计到2027年将超过美国,成为全球最大的开源社区。 非洲:充满潜力的新兴市场 非洲各地区,尤其是尼日利亚、加纳和肯尼亚,也在迅速发展成为技术公司的新兴枢纽。这些地区的开发者数量每年都在显著增长。 南美洲:稳健增长的活跃区域 南美洲的开发者社区,特别是在阿根廷和巴西,也在持续增长,与亚太和非洲的增长速度相仿。 欧洲:稳定增长的成熟市场 欧洲的开源社区虽然增长速度较美国慢,但在西班牙、德国和英国等国家仍保持稳定增长。 Github 年度总结分析 2023 年 Github 年度报告精华: 生成式 AI 项目和个人贡献者数量的显著增长 ...

十二月 7, 2023 · 3 分钟 · 479 字 · 熊鑫伟,我

Kubernetes Kustomize 学习指南

介绍 关于 kustomize github 地址 Get Started Kustomize 是一个专为 Kubernetes 设计的开源配置管理工具,它能帮助用户定制 Kubernetes 对象,并以声明式的方式管理这些对象,而无需修改原始的 YAML 文件1 。这意味着你可以保留应用和组件的基本设置,同时通过应用名为“补丁”的声明式 YAML 文档来覆盖默认设置,而不会更改原始文件 。Kustomize 提供了一种声明式的方法,符合 Kubernetes 的哲学,并且能够以一种可重用、快速生成、易于调试和可伸缩的方式定制 Kubernetes 配置。 Kustomize 的主要功能包括: 声明式配置: 允许你以声明式的方式定义和管理 Kubernetes 对象,例如部署、Daemonsets、服务、ConfigMaps 等,为多个环境提供支持,而无需修改原始的 YAML 文件 配置层叠: 通过利用层叠来保留应用和组件的基本设置,并通过覆盖声明式的 YAML 文档(称为补丁)来选择性地覆盖默认设置 集成与独立使用: Kustomize 可以作为一个独立的工具使用,或者与 kubectl 结合使用。从 Kubernetes 1.14 版本开始,kubectl 也开始支持使用 kustomization 文件来管理 Kubernetes 对象 Kustomize 提供了一种自定义 Kubernetes 资源配置的解决方案,该方案摆脱了模板和 DSL。 版本关系 & kubectl 集成 要查找kubectl最新版本中嵌入的kustomize版本,请运行 kubectl version : $ kubectl version --short --client Client Version: v1.26.0 Kustomize Version: v4.5.7 kubectl v1.14中添加了v2.0.3的kustomize构建流。kubectl中的kustomize流在kubectl v1.21更新到v4.0.5之前一直冻结在v2.0.3。它将定期更新,这些更新将反映在Kubernetes发布说明中。 ...

十月 31, 2023 · 6 分钟 · 1202 字 · 熊鑫伟,我

设计 OpenIM 使用 Harbor 构建企业镜像仓库

需求 OpenIM 提供了多种公共的镜像注册地址,比如说 aliyun, github, Docker hub ~ 阅读 https://github.com/openimsdk/open-im-server/blob/main/docs/conversions/images.md 获取更多的镜像构建指南。 大部分企业都会选择自己做镜像仓库,使用 Harbor 来搭建企业级的镜像仓库,将它集成 CICD Pipeline 流程中,最终替换 Docker Hub,进一步降低镜像存储的成本。 此外,在生产环境下,Harbor 一般都会开启 TLS,所以你还需要准备一个可用的域名。 中国的服务器使用域名,需要对域名进行备案 安装 Helm Helm,以及 集群的部署参考 https://github.com/openimsdk/open-im-server/tree/main/deployments 安装 Cert-manager 接下来我们安装 Cert-manager,它会为我们自动签发免费的 Let’s Encrypt HTTPS 证书,并在过期前自动续期。 首先,运行 helm repo add 命令添加官方 Helm 仓库。 $ helm repo add jetstack https://charts.jetstack.io 然后,运行 helm repo update 更新本地缓存。 $ helm repo update 接下来,运行 helm install 来安装 Cert-manager。 $ helm install cert-manager jetstack/cert-manager \ --namespace cert-manager \ --create-namespace \ --version v1.10.0 \ --set ingressShim.defaultIssuerName=letsencrypt-prod \ --set ingressShim.defaultIssuerKind=ClusterIssuer \ --set ingressShim.defaultIssuerGroup=cert-manager.io \ --set installCRDs=true 此外,还需要为 Cert-manager 创建 ClusterIssuer,用来提供签发机构。将下面的内容保存为 cluster-issuer.yaml。 ...

十月 25, 2023 · 3 分钟 · 476 字 · 熊鑫伟,我
自动化测试学习

自动化测试的学习(一)

云原生领域中GitHub开源Go项目的自动化测试实践与策略 介绍 作为 Github 上的 热门项目 OpenIM,如何在云原生时代中创造出价值,这是非常重要的,OpenIM 是一个优质的小团队,我们在自动化中并没有特别深入的见解。 使用 GitHub Actions 进行持续集成和持续交付 (CI/CD): GitHub Actions 提供了一个平台,可以自动构建和测试 Go 语言项目。通过配置 GitHub Actions 工作流,你可以在代码更改时自动运行测试,确保代码的质量和功能 。 KubeVela 项目实践: KubeVela 是一个 Go 语言的云原生和开源项目,它展示了如何在云原生环境中组织 CI/CD 过程,包括自动化测试。KubeVela 使用声明性工作流来协调 CI/CD 过程,你可以参考 KubeVela 的 GitHub 仓库来理解和应用这些实践3 4 [5](https://github.com/kubevela/workflow#:~:text=KubeVela Workflow is an open,engine in your own repository)。 云原生测试框架与工具: 在云原生开发中,合约测试(Contract Testing)是一种常见的测试实践,它确保服务间的通信符合预定义的 API 协议。例如,Cloud-Native Toolkit 中使用 Pact 进行合约测试。通过编写和集成测试,你可以验证服务间的通信是否符合预期6 。 代码覆盖率检查: 在进行自动化测试时,检查代码覆盖率是一个好的实践。许多测试框架内置了代码覆盖率检查功能,可以配置它们来报告测试的代码覆盖率。例如,使用 SonarQube 工具来读取和报告代码覆盖率信息6 。 利用开源工具和框架: 你可以利用开源工具和框架来进行测试,例如使用 Cypress 进行云原生应用的测试[7](https://dev.to/litmus-chaos/cloud-native-application-testing-automation-2bh5#:~:text=Cloud Native Application %26 Testing,Testing Using Cypress for)。还有其他的项目和资源,例如在 GitHub 上的 learning-cloud-native-go/myapp 仓库,提供了云原生 Go 项目的完成示例,你可以参考这些示例来理解和应用云原生测试实践[8](https://medium.com/learning-cloud-native-go/lets-get-it-started-dc4634ef03b#:~:text=The completed project can be,The completed API)。 自定义自动化测试流程: 通过结合 GitHub Actions 和开源工具,你可以定制项目的 CI/CD 流程,包括自动化测试和验证步骤9 。 自动化测试的价值量化 自动化很明显,是后期的手动成本很低,也就是说,随着时间的推移,自动化运行的次数增多,自动化的价值 ROI 变高 ...

十月 14, 2023 · 18 分钟 · 3700 字 · 熊鑫伟,我