塑造职业道路:开源简历生成器与专业简历技巧指南

在求职的海洋中,一份精心准备的简历就如同一艘设计精良的帆船,能让你在竞争激烈的浪潮中乘风破浪。随着开源社区的蓬勃发展,现如今市面上涌现出许多优秀的简历生成工具,旨在帮助求职者以最低的成本制作出既专业又具有个性化的简历。本文将为你详细介绍几款顶尖的开源简历生成工具,并提供实用的简历制作和优化技巧。 🌟 精选开源简历生成器 📄 Visiky Resume 如果你想在网页上展示你的简历,并且需要多种定制选项,Visiky Resume 是一个不错的选择。这款工具提供三种内置模板,支持自定义主题颜色和模块标题,甚至还支持中英文双语版本,非常适合具有国际求职需求的用户。 🌍 GitHub 仓库 📝 在线生成器 ✒️ Markdown Resume 对于Markdown的忠实粉丝来说,Markdown Resume 提供了一种极简方式来构建简历。它支持丰富的Markdown编辑功能,并且能够直接导出为PDF,非常适合那些追求内容优先、格式简洁的技术写作者。 📖 GitHub 仓库 🖥️ 在线生成器 🎨 Typora Markdown Resume 通过结合Typora、Markdown和CSS,你可以自由地打造一个个性化十足的简历。对于那些熟悉网页设计或喜欢手动调整每一个细节的创意专业人士来说,这无疑是一个极好的选择。 🛠️ GitHub 仓库 🌐 木及简历 木及简历提供了一个全面且功能强大的在线Markdown简历编辑器,支持实时PDF预览、智能排版和云存储,非常适合那些希望远离繁琐Word处理的用户。 💡 GitHub 仓库 🌐 官方网站 📚 Awesome CV Awesome CV 是 LaTeX 用户的福音,提供多种精美的模板,适合那些追求极致专业外观的求职者。 🎓 GitHub 仓库 🔗 OpenResume 作为一个功能全面的简历生成器,OpenResume 允许用户快速创建现代化的专业简历,并提供在线编辑和预览功能。 🌟 GitHub 仓库 📊 在线使用 🔗 Online-CV: 国外热门的在线简历/在线名片 这是一个基于Jekyll的极简主题,用户只需简单操作即可在GitHub上托管自己的简历(CV)。...

April 19, 2024 · 1 分钟 · 125 字 · 熊鑫伟,我

这是一篇我职业生涯总结的 OpenIM 故障排查指南

如果你想在寻找一篇针对 OpenIM 并且准备好具体的问题想来这里找到答案的话。那么很遗憾的告诉你,这篇并不是记录问题和编写答案的,这篇是读者经过开发和业务实战中以 OpenIM 为例总结出来的故障排查的方法,以及调试的技巧。如果你想从我这里学习到故障的排查以及问题定位的经验,那么请你继续读下去。 我将会从工作中经常出现的一些情况总结成类型来分析。 一个小小的玩笑,或许我比较逆人性,其他人都很害怕遇到 bug 的时候,我倒是对出现 bug 比较兴奋,我们后期读代码的时间和维护代码的时间其实是远远高于写代码的时间的。所以面对 bug, 我们的思考和总结尤其是非常重要,尤其是帮我们在写代码的时候也思考,代码的扩展性,和错误处理,是否可以禁得起考验 ~ 故障排查的基本概念 故障排查,我主要是分为几种情况,分别是,编译的故障排查,启动的故障排查,以及服务运行故障排查。这几种情况的故障排查思路都是大同小异的。 首先,我们需要发现问题,然后定位问题。我们可能需要经过多轮分析排查才能定位到问题的根因,最后去解决问题。排障流程如下图所示: 开始 | V 发现问题 ------> 记录问题的症状和相关情况 | V 定位问题 | V 进行初步分析 --------> 确定可能的原因 | | V | 是否需要深入分析?-----> 是 ------> 进行深入分析 | | | | | V | | 确定具体原因 | | | | | V | <-------- 是否已找到根本原因? | | | 否 | V 是否解决了问题? | 是 ------> 记录解决过程和解决方案 | | 否 ------> 调整策略或寻求帮助 | V 结束 如果想排查问题并解决问题,你还需要具备以下两个基本能力:...

April 16, 2024 · 7 分钟 · 1478 字 · 熊鑫伟,我

探索开源以及开源商业模式研究

开源为我带来了很多的成长,很多的成长经验和学习途径都是通过开源获取到并且学习到的。 这里有一篇我的第一次开源的成长指南:https://nsddd.top/zh/posts/open-source-contribution-guidelines/ 第一次参与开源还是一个刚刚接触大学没多久 ~ ,调研了解到很多优秀的开源项目都会有很多业界大佬坐镇,因此会让大家以为只有“大牛”才能参与开源。实际上,开源社区经常会听到 “我是小白,我可以参与开源吗?” 这种声音,发出这种声音的同学往往是对开源感兴趣,但并不知道如何入手的小伙伴。 从开源定义来看,我们不需要成为“大牛”才能够参与开源。所谓开源,其实是一种促进个人成长和开源领域发展的行为,通过分享自身技术和经验来促进大家的技术交流,从这方面讲,开源是没有门槛的,只要有想要分享的东西,所有人都可以参与开源。 从参与要求来看,我们需要具备一定的知识积累才能参与开源。开源社区不是学校,社区会解答你的疑问,但首先你要有一定了解,才能准确提出你的疑问。对开源项目一无所知是无法参与开源的。当然,这与你是否成为“大牛”也并没有什么关系。因此,只要具备一定的技术积累,就可以参与相应的开源项目。 “罗马不是一天建成的”。没有人天生就是“大牛”,“大牛”们也是在参与中不断成长的,不要被虚无的 title 所困扰,只有不断的坚持和探索才能让自己不断成长! 在开源社区中,我慢慢学习到了非常多的技巧,比如这里我总结出一篇开源社区的提问技巧:https://nsddd.top/zh/posts/the-art-of-asking-questions-in-open-source-communities/ 我对整个的开源成长也有自己的思考总结,写了这篇关于开源的成长性指南阶段,从我们第一次加入开源项目开始,到最后开源和维护自己的项目,以及商业化成长,可以参考: https://nsddd.top/zh/posts/stage-growth-of-open-source/https://nsddd.top/zh/posts/stage-growth-of-open-source/ 非常推荐阅读 ~ 在加入 OpenIM 的社区一年中,我将自己的开源理解和运营技巧都集成在了 OpenIM 的开源布道上,将 OpenIM 社区带入到了一个顶级的开源社区中来。除此之外,我参与过其他的优秀开源项目的贡献和维护,我会从自己的角度上来介绍如何运营一个优秀顶级的开源社区。 开源不仅是我的热爱,也逐渐成为我的一大优势。在我与开源的互动中,我们相得益彰。 开源除了给个人以及公司带来技术影响力之外,更为重要的是通过开源实现商业化价值,而这部分才是很多开源项目成功的实际驱动力。本文会介绍我对开源的理解,以及着重介绍自己对开源以及开源商业模式做了一个系统的研究,为决策项目是否应该开源、采用何种开源策略以及开源商业化路径提供参考意见。 如果你对我有兴趣,可以关注我的开源的 github 账户: https://github.com/cubxxw 什么是开源 「开源」一词对应英文 Open Source,最初起源于软件开发领域,因此也称为「开放源代码」,对应的软件则称为开源软件(Open Source Software)。除了我们熟知的开源软件以外,开源的表现形式还有开源硬件(Open Source Hardware)、开放设计(Open Design)、开放文档(Open Document)。 我们最常见的是开源软件和开放文档 ~ 先来谈论一下 开源软件 一般很容易理解就是 是不是公开源代码的软件就是开源软件呢? 实际上并不是。按照 OSI 组织 (opens new window)(Open Source Initiative Association)的 OSD 定义 (opens new window),除了公开源代码,开源软件的发行条款还必须符合以下十个条件: 序号 条款 简单说明 1 Free Redistribution 允许自由地再发布软件 2 Source Code 程序必须包含所有源代码 3 Derived Works 可以修改和派生新的软件 4 Integrity of The Author’s Source Code 发布时保持软件源代码的完整性 5 No Discrimination Against Persons or Groups 不得歧视任何个人或团体 6 No Discrimination Against Fields of Endeavor 不得歧视任何应用领域(例如商业) 7 Distribution of License 许可证的发布具有延续性 8 License Must Not Be Specific to a Product 许可证不能针对于某一个产品 9 License Must Not Restrict Other Software 许可证不能限制其他软件 10 License Must Be Technology-Neutral 许可证必须是技术中立的 你可以通过查阅OSI官方许可证的目录 Open Source Initiative 认可的开源许可证...

April 13, 2024 · 5 分钟 · 926 字 · 熊鑫伟,我

Sora Ease 指南:开发者掌握 Sora AI 的全面指南

Sora 中文的提示词 | 调教指南。各种场景使用指南。学习怎么让它听你的话。兼顾了 Sora 的多场景应用。 这篇文章来源于 https://github.com/SoraEase/sora-prompt-zh 开源项目,SoraEase 希望为 sora 相关的开发者提供自动化,便捷,快速上手的工具和指南。 Sora | 索拉 是一个AI模型,可以从OpenAI的文本指令中创建逼真和富有想象力的场景。OpenAI正在教AI理解和模拟运动中的物理世界,目标是训练模型,帮助人们解决需要现实世界交互的问题。 如果你是 sora 的学习者,希望获取到 sora 的最新的咨询和相关的开发项目,以及 sora 相关的开源项目,这里 awesome-sora 提供了 sora 相关的Sora 中文指南,指令指南,应用开发指南,精选资源清单,Sora 开发者精选工具框架。 索拉可提供以下功能: 文本到视频 动画 扩展生成的视频 视频到视频编辑 连接视频 图像生成(文本到图像) 在这个存储库中,你会发现各种可以和索拉一起使用的提示。我们根据视频的风格分配了不同的标签,让你可以根据标签快速找到提示示例(Prompt)和生成的视频,并根据需要进行修改。 虽然索拉尚未正式发布,但我们正在全面收集提示,以帮助你快速开始使用索拉生成你想要的视频。 提示词 官方提示词生成器 视频生成提示 官方视频生成提示 一位时尚女性穿着一件黑色皮夹克,一条长长的红色裙子和黑色靴子,手拿一个黑色的手提包,在热闹的东京街道上行走。周围充满了温暖的霓虹灯和动态的城市标识。她戴着太阳镜和红色口红,自信而随意地行走。街道潮湿而反光,形成了五彩灯光的镜面效果。许多行人在周围走动。 生成视频链接 几只巨大的长毛猛犸象漫步在积雪覆盖的草地上,它们的长毛在微风中轻轻飘动,远处是积雪覆盖的树木和戏剧性的雪山,午后的光线和稀薄的云彩以及高高悬挂的太阳形成了温暖的光芒。低角度的摄像视角令人惊叹,捕捉到了这些大型毛茸茸的哺乳动物和美丽的摄影,景深感非常强烈。 生成视频链接 一个电影预告片,讲述了一位30岁的太空人的冒险故事,他戴着一顶红色的羊毛编织头盔,蓝天,盐沙漠,电影风格,35mm胶片拍摄,色彩生动。 生成视频链接 无人机俯视着波涛汹涌的大苏尔加雷角海滩的崎岖悬崖。蓝色的海水拍打着,形成了白色的波浪,而夕阳的金光照亮了岩石海岸。远处有一座灯塔的小岛,悬崖边覆盖着绿色的灌木。从道路到海滩的陡峭下滑是一个戏剧性的壮举,悬崖边突出在海面上。这是一个捕捉到海岸的原始美和太平洋海岸公路崎岖风景的景色。 生成视频链接 动画场景展示了一个近距离的短毛怪兽跪在一个正在融化的红色蜡烛旁边。艺术风格是3D和逼真的,重点放在光线和纹理上。画面的情绪是惊奇和好奇,怪兽睁着大眼睛,张着大嘴盯着火焰看。它的姿势和表情传达出一种天真和俏皮的感觉,好像它是第一次探索周围的世界一样。温暖色调和戏剧性的光线进一步增强了图像的舒适氛围。 生成视频链接 一个华丽的纸艺世界,一个丰富多彩的珊瑚礁,到处都是色彩缤纷的鱼类和海洋生物。 生成视频链接 这个特写镜头展示了维多利亚皇冠鸽子引人注目的蓝色羽毛和红色胸膛。它的羽冠由精致的蕾丝羽毛制成,而它的眼睛是醒目的红色。鸟的头微微倾斜,给人一种威严和威严的印象。背景模糊,突出了鸟的引人注目的外观。...

March 14, 2024 · 2 分钟 · 250 字 · 熊鑫伟,我

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使用成本和算力要求的一个专业化和详细的分析。...

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

双剑合璧:结合GitHub与Google Workspace的项目管理艺术

双剑合璧:结合GitHub与Google Workspace的项目管理艺术 之前写过一篇 从理论到实践的项目管理打通 。 其中介绍了 Github 的项目管理方式 Github Projects,以及配合 Github 实现整个开发和项目管理打通,但是可能会出现一些问题,今天来聊聊其中会出现的问题,以及给出对应的解决方法,顺便总结一下现阶段自己认为的开源项目做项目管理的最佳实践方法。 google projects VS github projects GitHub Projects 针对开发者:GitHub Projects特别适用于软件开发项目,因为它紧密集成了GitHub的代码仓库、问题跟踪(Issues)和拉取请求(Pull Requests)。 项目管理功能:提供看板(Kanban)和项目里程碑跟踪,便于管理项目的进度和任务。 开源友好:对于开源项目尤其友好,使得与全球开发者的协作变得简单。 集成和自动化:通过GitHub Actions,可以实现持续集成和持续部署(CI/CD)等自动化流程,与项目管理紧密结合。 Google Projects Google Workspace集成:如果你已经在使用Google Workspace(前身为G Suite),那么Google Projects(指的是Google的某些项目管理工具,如Google Tasks或者更广泛的Google Workspace应用)可能提供更好的集成体验。 通用项目管理:可能更适合非软件开发的项目管理,如营销活动、HR项目等(如Google Docs、Sheets、Slides等)。 协作和共享:Google应用的强项在于实时协作和文件共享,适合需要紧密协作的项目团队。 以前是单打独斗,或者是简单的开发小团队,那么 Github Projects 必然是最合适的,如今需要考虑到更多人的参与,更有序的资源和文档的管理,那么对于现在来说,可能需要更多的优化协作。 比如说一些重要的文档记录,一些重要的表格,以及 PPT 演示,会议记录,以及一些日程安排。但是对项目本身来说,结合Github问题追踪和拉取请求又非常重要。 我希望组合使用GitHub Projects和Google Projects(或Google Workspace的相关工具)进行项目管理,可以根据各自的优势制定一个最佳实践方案。这样做可以充分利用两个平台的优点,实现更高效和全面的项目管理: 1. 使用GitHub Projects管理开发活动 代码管理和追踪:利用GitHub的核心优势,将所有代码管理任务(包括版本控制、分支管理等)以及与代码直接相关的活动(如Bug追踪、功能请求等)保留在GitHub。 自动化工作流:通过GitHub Actions实现自动化,比如自动测试、构建和部署,以及自动化的问题和拉取请求管理。 项目看板:使用GitHub Projects的看板功能跟踪开发进度,如待办事项、进行中和已完成任务。 2. 利用Google Workspace管理项目的其他方面 文档和文件共享:使用Google Docs、Sheets和Slides来创建和共享项目文档、计划和报告,利用它们强大的实时协作功能。 通信和会议:通过 Google Meet 和 Gmail 进行项目会议、沟通和更新,保持团队成员之间的紧密联系。 任务和日程管理:利用 Google Tasks 和 Calendar 管理非开发任务(如市场活动、人力资源计划等)以及重要的项目里程碑和会议安排。 最佳实践方案 集成工具使用:探索和使用第三方工具或脚本实现GitHub和Google Workspace之间的数据同步。例如,可以自动同步GitHub Issues到Google Sheets作为任务列表,或者在GitHub里程碑变更时自动更新Google Calendar。 明确分工和规范:在项目开始时明确规定哪些任务和活动应该在GitHub上管理,哪些应该使用Google Workspace工具。制定明确的团队协作和沟通规范,确保所有项目成员都清楚使用哪个工具以及如何使用。 定期检查和调整:项目管理方法和工具的选择应根据项目的实际情况进行调整。定期回顾团队的工作流程和工具使用情况,根据反馈和项目需求进行必要的调整。 谷歌项目管理工具:所有你需要知道的 对于 Github 的项目管理,可以阅读 从理论到实践的项目管理打通 ,以及 Github Projects 官方网站 https://docs....

February 22, 2024 · 3 分钟 · 595 字 · 熊鑫伟,我

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 程序的用户不会知道哪部分代码是生成的以及如何生成的。(实际上,很多时候会在生成的文件开头加上注释,这是生成的,请别手动修改。)...

January 25, 2024 · 5 分钟 · 973 字 · 熊鑫伟,我

Go 语言中的并发类型检查与跨平台开发

OpenIM 跨平台源代码类型检查工具 开始 问题 在 OpenIM 的自动化道路中,涉及到越来越全面的自动化设计和测试,在这个过程中,我遇到了一个问题,于是完成了从 go 语言类型检测再到集成本地以及 CI 的全套体验。 问题是这个 issue:https://github.com/openimsdk/open-im-server/issues/1807 我们的 Go 代码在 32 位系统(linux/386)上运行时遇到了整数溢出问题。出现这个问题的原因是 Go 中的 int 类型随体系结构的不同而大小不同:在 32 位系统上相当于 int32,而在 64 位系统上相当于 int64。 恰好在 64 位机器上正常运行,但是在 32 位机器上会出现溢出的问题,于是想着去做一套检测的工具,来解决各个平台的类型检测。 第一部分:Go 语言基础回顾 在深入探讨代码之前,让我们回顾一下 Go 语言的一些基本概念,特别是包管理、并发编程和类型系统。这些概念是理解和使用 Go 语言进行有效编程的基础。 包管理 包的概念 Go 语言中的每一个文件都属于一个包,包是多个 Go 文件的集合。 包用于组织代码,防止命名冲突,并提高代码复用性。 导入包 使用 import 语句来导入其他包。 可以导入标准库包、第三方包,或自定义包。 创建自定义包 在项目中创建一个新的目录,该目录下的 Go 文件属于同一个包。 包名通常与目录名相同,但不是强制性的。 并发编程 Goroutine Go 语言的并发单元称为 goroutine。 使用 go 关键字来启动一个新的 goroutine。 Goroutine 比线程更轻量,能有效利用多核处理器。 Channel Channel 是用于在 goroutines 之间传递消息的管道。 可以是带缓冲的或无缓冲的。 通过 channel 进行数据传递可以避免竞态条件。 类型系统 类型声明 Go 是一种静态类型语言,每个变量都有一个明确的类型。 支持基本类型(如 int, float, bool),复合类型(如 struct, slice),以及用户定义的类型。 接口 接口类型是一种抽象类型,它指定了一组方法,但不实现这些方法。 任何具有这些方法的类型都可以实现该接口。 接口提供了一种方式来指定对象的行为。 类型断言和反射 类型断言用于检查接口值的动态类型。 反射是一种检查、修改变量类型和值的方法。 类型声明 在 Go 语言中,类型声明是定义新类型的方式。Go 支持多种类型,包括基本类型(如 int、float64、bool)、复合类型(如 array、slice、map、struct),以及接口类型。通过类型声明,你可以创建自定义的类型,这对于编写清晰、易于维护的代码非常重要。...

January 24, 2024 · 15 分钟 · 3176 字 · 熊鑫伟,我

向量数据库的学习

今天学习 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 以及 倒排索引 等。在实际应用中,需要根据具体场景进行算法的选择和参数的调优,具体选择哪种算法取决于数据集的特征、数据量和查询需求,以及对搜索准确性和效率的要求。 它们是如何使用向量来存储和处理数据的? 向量数据库使用数学向量来存储和处理数据,这与传统的数据库存储方式有显著不同。这里的关键步骤和概念包括: 数据转换为向量 🔄 在向量数据库中,数据首先被转换为数学向量的形式。例如,文本数据可以通过自然语言处理技术转换为向量,图像数据可以通过深度学习模型转化为向量。 向量表示 📈 每个数据项都被表示为一个向量,这个向量在多维空间中有其特定的位置和方向。这些向量通常在高维空间中,每个维度代表数据的一个特征。 相似性搜索 🔍 向量数据库的一个关键功能是相似性搜索。它通过比较数据项的向量之间的距离(例如,使用余弦相似性)来找到相似的项。这对于处理复杂查询和大数据集特别有效。 索引和检索 📚 向量数据库使用高效的索引机制来快速检索和访问数据。这些索引帮助数据库快速定位查询中涉及的向量,从而加快搜索速度。 机器学习集成 🤖 许多向量数据库可以与机器学习模型紧密集成。这允许数据库不仅存储数据,还可以通过模型直接处理和分析数据,从而提供更高级的数据处理和分析能力。 通过使用向量来表示和处理数据,向量数据库能够处理更复杂、更丰富的数据类型,同时提供更快的搜索和检索性能。这使它们在如今的数据驱动世界中变得越来越重要。...

January 20, 2024 · 5 分钟 · 954 字 · 熊鑫伟,我

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 信息包括是三种:...

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