亚洲源码转
1. 为何Google、微软、华为将亿级源代码放一个仓库
作者 | 夕颜
编辑 | Just
出品 | AI 科技 大本营(ID:rgznai100)
大公司应该如何进行代码管理?微软研发并采用 VFS For Git 的过程和这个系统本身有哪些可以借鉴的地方?为了更深入了解 VFS For Git 和代码管理相关问题,AI 科技 大本营(ID:rgznai100)采访了微软亚洲研究院首席研发经理邹欣,他对这些问题进行了解答。
为什么要做 VFS For Git?
邹欣回忆,在将代码迁移到 GVFS 前,微软曾使用多个主要的代码管理平台,包括 SLM, Source Depot (上世纪 90 年代开始)、TFS 的源代码控制 TFVC (2006 年开始)。直到 2017 年,微软用三个月的时间完成代码迁移到 Git,并推出了 Git 的变种,针对特大 repo 的 GVFS,并沿用至今。
GVFS 是一个 Git 虚拟文件系统,全称为 Git Virtual File System,允许 Git 处理 TB 规模的代码库,比如 270 GB 的 Windows 代码库。GVFS 的 V 就是 Virtual(虚拟),它解决了Git 原来的设计缺陷(每个客户端都有所有版本的代码),而是用虚拟文件来代替那些本地用不着的文件, 大大 减少了文件传输和本地机器存储的压力,让微软内部技术人员可以进行高效协作。
一段小插曲是,GVFS 从发布之初就引起了争议,原因是 GNOME 项目的虚拟文件系统也叫 GVfs,而 GNOME 的 GVfs 最早发布于 2006 年,之后的教程、文档、论坛都沿用这个名字。在微软的 GVfs 项目发布后,很快超过了 Gnome GVfs 项目的搜索排名,且由于二者都与虚拟文件系统有关,导致用户在查找信息时容易出现混淆。于是,很多开发者要求微软改名,经过一番周折后,微软终于在 2018 年将 "GVFS" 项目的名字改为 "VFS For Git"。
邹欣表示,当时微软将代码迁移到 Git 主要是为了统一微软百花齐放的内部工具,并没有一个绝对好的选择,领导团队选择了 Git, 但从现在的结果来看,这是一个比较好的选择。如今,微软仍然在对 Git 系列的工具做改进,也把改进回馈到 Git 社区。
现在,VFS For Git 已经是微软内部统一的工具,同时被其他大型企业采用:https://vfsforgit.org/
VFS For Git 在 GitHub 上也已开源:
GitHub开源地址:https://github .com /microsoft/VFSForGit
除了微软,我们发现,很多大公司的代码托管已经向自己内部开发的版本控制系统迁移,比如 Google 就把使用不同语言编写的超过 10 亿文件,近百 TB 源代码都存放在自行开发的版本管理系统 Piper 中,只当项目开源且需要外部协作时,才会使用业界流行的 Git。(详见文章《为何Google将几十亿行源代码放在一个仓库?》)
再如华为的内源(Inner Source)平台,承载着华为 1100 亿源代码、60 万+ 代码仓库、每天 60 T 的下载容量、1 万次/秒的 高峰 并发下载。
这是否说明在大公司中流行的单一仓库就是最好的做法? 这些公司在选择采用代码托管方式时需要考虑哪些不同的问题?
邹欣解释,在他看来,用 GVFS 也可以创建各种独立的仓库。用一套工具有利于公司内部进行代码共享,让人员流动、代码复审、改进工具变得更简单,效率提高。
其次,大公司有很大量的代码,很长的 历史 和很多工具,如果贸然选择一个新工具就会出现以下问题:
a) 一些市面上的工具并不是为大规模代码设计的,处理不了大量代码, 我们以前用第三方的代码分析工具, 结果处理 Office 的代码的时候,自己崩溃了,因为 Office 的代码量太大,这个工具的开发者没有为如此大的代码设计软件。
b) 很多工具在 历史 中不断演化, 有自己独特的特点,很多和企业内部的某些特殊需求有关,外部工具很难都实现这样的功能。
很多工具联合在一起,会形成了一个工具的生态,但如果只改变一个工具,让其他的工具变得不兼容, 那整个团队的很多工作流就会出现问题。
此外,邹欣表示,代码托管与 AI 结合是未来发展方向。例如,这种结合会告诉你昨天晚上签入代码有问题, 或者签入代码和某个其他团队的代码相似,建议重用。或者告诉你签入的代码是从网上拷贝来的, 而且把原来代码中的 bug 也拷贝过来了。
最后,AI 科技 大本营引用此前微软云开发服务副总裁 Brian Harry 于 2017 年发表的一篇博文内容,在微软推出 VFS For Git 三个月后,他分享了该平台的更多细节及其未来目标,包括扩大开放源代码并改善其在 Microsoft 上的运行表现,想要了解 VFS For Git 更详细的信息,不妨仔细研读一下这篇文章:
每日检出量
https://devblogs.microsoft .com /bharry/the-largest-git-repo-on-the-planet/
2. MKV转换器兼容性
随着avi格式的年代逐渐增长,尽管它在早期通过VD技术可支持2个音轨,但近年来并未有显着的改进。与此同时,ogm格式的兴起带来了多音轨的新可能,最多可以合成8个以上的音轨,音频格式增加了ogg,更令人兴奋的是其内置的"软字幕"功能,允许用户自定义8个以上srt格式的字幕,但对亚洲字符支持不足,且ogm的源码曾一度封闭,开发进度缓慢。
在ogm遇到瓶颈时,mkv应运而生,由俄罗斯程序员以开源形式推出,因此吸引了众多开发者参与,使得开发速度迅速提升。mkv保留了ogm的优点,如多音轨和Real格式支持,且增添了Gabest公司开发的Plugin,如Media Player Classic(MPC)和mkv Mux,特别是针对Real格式的解决方案,弥补了rmvb在音频处理上的不足,支持AC3和DTS合成,使得mkv在音频效果上更具竞争力。
mkv的特点还包括对多种格式的兼容,高达16条的软字幕支持,以及段落选择功能,这些都让用户可以根据制作人的设定进行个性化播放。总的来说,mkv以其强大的功能,如Real格式的支持、多音轨、多字幕选项和自定义播放特性,成为了一个综合性的视频格式解决方案。
(2)亚洲源码转扩展阅读
MKV转换器属于视频转换类软件,其广义的定义即对MKV进行编解码的软件。那么,何为对MKV进行编解码呢,对MKV进行解码,通俗来说即将MKV转换成其他格式,如将MKV转RMVB、MKV转AVI、MKV转MP4、MKV转3GP、MKV转DVD等等,对MKV进行编码,即将其他格式转换成MKV,如将RMVB转MKV、AVI转MKV、MOV转MKV等等。综上所述,MKV转换器根据转换类型不同分为两类,对MKV进行解码和对MKV进行编码的两类软件。
3. 三十、QuantLib C++源码改写计划(2):Java的改写
在金工领域,QuantLib C++链接库已稳固其领导地位,产品广泛,模型深入,难以被其他链接库超越。然而,在实际的金融IT产业中,很难直接获益于QuantLib,主要原因是大部分IT公司倾向于使用Java语言开发大型商业应用系统,而C++并非市场主要工具。QuantLib架构复杂,没有熟悉金融市场的金工人员指导,IT人员难以理解其对象的继承关系与金融计算逻辑。
一位在金融科技产业的朋友遇到金工模型开发瓶颈,我建议他使用QuantLib链接库解决此问题。QuantLib可以透过SWIG的包覆提供Java接口。在协助下,他们顺利产生正确的计算结果,获得了全球金工专家的免费支持来开发核心计算模块。然而,使用SWIG调用C++的DLL会降低计算效能,且QuantLib C++不支持多线程运算,特别是在执行蒙地卡罗模拟法时效果不佳。
QuantLib架构的限制来源于20年前的决定,当时计算机性能不佳,为避免系统进行无谓计算,项目人员采用了特定的设计样式(Design Patterns),并搭配Lazy Object模式。然而,现代计算机性能已有巨大提升,多核芯片成为主流,异质性计算架构如GPU、FPGA也已成熟,金融市场的风险和实时风险评估需求也日益提升。QuantLib的C++程序代码虽然公开,但与使用Java程序代码的IT公司采购系统生态不兼容,导致困扰。
为解决这个问题,朋友公司技术长请求我研究以Pure Java Code改写QuantLib链接库,以实现与公司程序代码的完全兼容,并提升计算效能。我意识到,以Java改写QuantLib的构想始于2008年,但项目最终未能成功。通过重新分析C++与C#的继承架构,并结合两者优点,我尝试了新的改写路径。在苏州的两个月里,我成功完成了相当一部分的改写工作。
我发现,QuantLib的C++架构利用多重继承,每个实用类别继承多个父代。而Java与C#都是单一继承的语言,这导致在改写过程中需要正确选择主要继承关系,并通过接口实现次要继承,以保持代码结构清晰。这需要对金融类别关系有深入理解,以确保改写正确。
在改写过程中,我不仅解决了计算效能问题,还成功实现了多线程运算和GPU加速,满足金融市场的实时风险评估需求。此外,我将每次改写的内容都记录下来,留下足够的轨迹,便于指导年轻朋友学习QuantLib架构与内容。这有助于建立亚洲华人区金融市场计算能力,对抗长期由英美基督教文明主导的金融产业。
我将部分代码上传到GitHub,供有兴趣的人士参考。明年四月与七月,我计划分别提供Python与C++的计算机实操演练班,通过网络录制影片与在线直播,让参与者深入了解QuantLib并发挥其价值。课程将分为三个阶段,涵盖从基础使用到高级开发技术,包括解析解、二叉树、有限差分法、模拟法、GPU金融程序开发等。听众主要为硕士学历的业界工作人士。
如果你对QuantLib开发实作班感兴趣,可以通过电子邮件 or 微信与我联系,获取更多详情和报名方式。我的电邮为 [email protected],微信ID为 andydong3137,均请注明对QuantLib开发实作班有兴趣。
4. 代码utf8转成gbk
首先在你的head标签中,加入<meta http-equiv="Content-Type" content="text/html; charset=gb18030" />
然后在你的编辑器中(或者使用记事本),选择采用ANSI编码保存你的源代码文件。
这样就可以了。