(下)苹果有开源,但又怎样呢?
一开始,因为 MacOS X ,苹果与 FreeBSD 过往从密,不仅挖来 FreeBSD 创始人 Jordan Hubbard,更是在此基础上开源了 Darwin。但是,苹果并没有给予 Darwin 太多关注,作为苹果的首个开源项目,它算不上成功。(详情请戳:《(上)苹果有开源,但又怎样呢?
》)
再后来,苹果攻坚浏览器,WebKit 成为幕后英雄。在这个时期,苹果开始涉入开源的深水区,不仅要与 WebKit 上游的开源社区 KDE 磨合,还要面临与竞争对手谷歌的开源合作。面对外界的压力和指责,苹果从 WebKit 的开源上,应该学到了不少。(详情请戳:《(中)苹果有开源,但又怎样呢?
》)
随着开源软件对行业的渗透越来越深,即使是苹果,似乎也不得不作出成长和改变。这种在开源上的成长,苹果在 Swift 上表现得十分明显。有人说,开源改变世界,那么,开源会改变苹果吗?
下篇: Swift “统治世界” 是从开源开始的吗?
除了 Jordan Hubbard,Chris Lattner
是苹果招入麾下的另一个开源大佬。
在业内,Chris Lattner 被冠以 “编译器大神” 的称号,因为他是 LLVM(Low Level Virtual Machine)的主要发起人与作者之一,同时还是 Clang 编译器的作者。
2000 年,苹果 Darwin 开源,初涉自主开源。同年的 Chris Lattner 刚从波特兰大学本科毕业,正准备去 UIUC(伊利诺伊大学厄巴纳香槟分校)攻读计算机硕士和博士。正是在 UIUC,Chris Lattner 开始使用一种用于优化编译器的创新基础架构,去设计和构建 LLVM,这也成为了他的博士学位论文的主题。
年轻时的 “小鲜肉” Chris Lattner
不同于 Jordan Hubbard,Chris Lattner 几乎是被苹果一手发掘和培养的。
2005 年,Chris Lattner 正值毕业,LLVM 仍然是一个高级研究项目。另一头,苹果也为了编译器焦头烂额。在 LLVM 之前,苹果的软件产品都依赖于整条 GCC 编译链(GNU Compiler Collection,就是自由软件运动发起人 RMS 捣鼓的那个)。
那时,苹果在 GCC 上投入大量资金,想要新增很多特性,但 GCC 开发者不怎么愿意专门为了苹果公司的要求优化和改进 GCC 代码;而且,到后期 GCC 的代码质量也变得难以保障了。
为了摆脱 GCC 的束缚,苹果开始寻找 “替代品”。而 Chris Lattner 的 LLVM 显然是个不错的选择。由此,苹果开始成为 LLVM 计划的主要资助者。2005 年,Chris Lattner 刚毕业,苹果就直接雇用了他及他的团队。
我在读博的时候就开始写 LLVM 了。当时 LLVM 是我的博士研究项目,我想把它做成工业界中颠覆性的产品。当时我异想天开,尝试了各种架构设计,想解决以往编译器所有的弊端 —— 结果当然没有如愿。我毕业后,就希望能接着搞 LLVM ,当时只有苹果允许我入职之后继续设计并实现 LLVM 。我想都没想就加入了苹果。
—— Chris Lattner
在苹果,Chris Lattner 又发起了 Clang 项目,并在多项指标上超过 GCC。如虎添翼的 LLVM 开始走向成熟。至此,Chris 在苹果可谓是如鱼得水,在编辑器上立下大功,后来直接坐上了苹果开发者工具部门主管的位子,领导 Xcode、Instruments 和编译器团队。
除了 LLVM 和 Clang,Swift 是 Chris Lattner 所缔造的第三个伟大的项目。2015 年,Swift 官宣开源,迅速成为当下最炙手可热的编程语言之一。
这次,苹果的开源,似乎没有以前强势了。Chris Lattner 注重社区的力量,同时苹果也想要通过开源让更多的人来使用这门语言,傲慢和强势的态度没有益处。
PS:2017 年 1 月,Chris Lattner 离开了自己工作了 12 年的苹果,去过特斯拉、谷歌和 SiFive 等公司。2022 年 2 月,Chris Lattner 被曝
因为遭到多人侮辱大吼,已于去年离开 Swift 核心团队。
01 Swift 一诞生,就是冲着开源去的
时间调回到 2010 年。那年的 WWDC(苹果全球开发者大会)上,苹果刚刚在 Clang 中推出了 C++ 支持。
为了让 Clang 支持 C++,Chris Lattner 和他的团队付出了巨大的努力,有点筋疲力尽。这不禁让他们开始思考
一个问题:为什么不得不实现 C++ 呢?难道不应该有更好的语言吗?
你也知道 C++ 写起来有多丑,但是做个编辑器支持 C++,完善 C++ 这门语言就是另一回事了,我们当时搞了好久,终于完成的时候特别有成就感。无论是 C 语言,C++,还是 Objective-C,都有一些我不是很满意的地方。所以,我就想要不我们搞个新的语言来吧。新的语言要越简单越好。
—— Chris Lattner
就是这样,Chris Lattner 没有声张,在和苹果软件团队负责人 Bertrand Serlet 聊了几次后,他们明确了建立一种新语言的想法。当时它的代号是 “Shiny”,“就好像你正在建造一个闪亮的新东西。” 2019 年 Chris Lattner 回忆
道。
一旦确立想法,Chris Lattner 立马就开工了。从 2010 年夏天开始一直到第二年年末,他利用晚上和周末的时间,就那么吭哧吭哧地干着,没有告诉任何其他人,当他在伊利诺伊大学厄巴纳香槟分校的导师 Vikram Adve 知道后,都惊叹苹果的口风有多紧。
我秘密实现了大部分基本语言结构:其他一些人在 2011 年底开始认真贡献。 2013 年 7 月,它成为苹果公司开发者工具组的主要关注点。
我们在做 Swift 的时候,很多 iOS 开发者,包括苹果内部的工程师,都在吐槽我们这几年在 Objective - C 上毫无建树,都在说你们为什么不做这个那个。我们当然不能告诉他们我们在全力开发 Swift,而他们所要的语法功能我们都会给。
—— Chris Lattner
2011 年,Chris Lattner 将这门编程语言的骨架搭建完毕了,但显然仅靠他一个人是不够的。那年 4 月,他向公司管理层透露了自己的秘密,这个项目立马得到了重视,数名资深工程师加入了进来,团队不断扩大,甚至成为了苹果的主要关注对象。
很难说,苹果这种严密的保密文化是好是坏,苹果的确是受够了创意被偷走了(微软和谷歌都干过);但从开发者的角度来说,有点残酷,要知道当 Swift 已经成为苹果内部的主推项目时,开发者们还在苦学 Objetive-C。当 Swift 出世的那一刻,他们得多心碎。
2015 年 12 月,苹果兑现了 6 月在 WWDC 中的承诺,将新编程语言 Swift 开源,同时苹果还开源了两个项目:Swift 核心库项目和全新的 Swift 包管理器项目。这次,苹果采用的是 Apache 2.0,软件开发者将可以对这款新编程语言根据自己的需要进行修改。
在 Swift 之前,苹果不是没有语言。1988 年,乔布斯的 NeXT 公司获得了 Objective-C 的授权,并开发出了其语言库和 NEXTSTEP 的开发环境。此后,Objective-C 是苹果的当家语言,且随着 2007 年 iOS 移动设备的爆发,让这门 iOS 应用开发的主要语言获得了火箭一般的蹿升速度。
而 Swift 正是作为 Objective-C 的继任者的姿态出现的。2012~2013 年,苹果试图对 Objective-C 进行大规模的优化和升级改进,增加了各种现代语言的特性,让编写 App 更加容易,以吸引更多的程序员投入到了 App Store 的生态圈里。
这些努力都不如直接来上一款开源新语言有效。事后,Chris Lattner 表示,动手做 Swift 的原因有三:
第一,如果我们大幅优化 Objective - C,把很多 Swift 的特性加进去,这对开发者来说是灾难性的,因为他们要对原来的 APP 要进行大幅修改;
第二,Objective - C 很多特性积重难返,比如它安全性上的问题;
第三,Objective - C 是基于 C 开发的语言,所以你无论怎么优化,它必然有 C 语言自身的缺陷。
更重要的一点是,Swift 是开源的,而且这次苹果的开源的确更开放了。
在 Chris Lattner 在职期间,苹果已经彻底开放了 Swift,不仅仅是开源而已,还构建了一整套社区开放合作的规范,Swift 语言的协议也是很宽松,社区十分活跃。这些动作,为 Swift 及生态圈打下了一个很好的可持续的基础。
首先,这得益于 Chris Lattner 对开源的态度:
我持有的默认观点之一是,开放比封闭好。如果你能让更多的人参与进来,你会得到更好的东西。
我个人感到最骄傲的一点是,我们并不打算仅通过内部去把它做到完美 —— 我们开源、我们依靠社区,这样一门语言才能在无数开发者的实战中得到检验和改进。我想,这才是 Swift 最棒的地方。
当 Swift 开源,它的发展进化就变成一件非常了不起的事情。从效率方面看,开源或许并不理想,但开源是使 Swift 真正与众不同的重要部分。我认为,这完全归功于那些社区里花时间去塑造和推动 Swift 的人们。
其次,早期的社区反馈确实在塑造 Swift 1 和 2 上,功不可没。
Swift 1 的头一两年,很多事情都是由社区直接推动的。甚至多年后,Chris Lattner 仍将 Swift 的成长归功于社区的力量:“ Swift 现在很好的主要原因之一是有一大群人在写博客和反馈,当人们有抱怨时,就是推动进步的时候。”
再次,正是在开源的推动下,Swift 项目乃至苹果都对开源实践有了许多心得。
社区的建设,意味着 Swift 能从很多核心团队以外的地方收获。比如,Codable 协议的设计就来自于苹果的一个框架团队(他们甚至不在 Swift 团队中);Result 类型进入 Swift 5,也是因为社区力量推动的。这些巧妙的设计被证明是很有意义的。
除此之外,为了更好地和社区产生互动合作,苹果采取了强制一定数量的文档和流程的方法。多年来,Swift 一直在平衡社区力量上作出努力,比如,是否将设计权限分配给社区?还是分配给社区优先级能力?这些问题都很有挑战性。
我从 Swift 的进化过程中学到的第一件事是:如何适当地催化社区力量。Swift 真正召集了一个语言极客社区,我一直在寻找有什么催化剂可以让 Swift 包生态或者 Swift-on-the-server 社区起飞,让社区团结起来做一些很酷的事情。
—— Chris Lattner
在开源的推动下,Swift 有了出人意料的成长。
一开始,Chris Lattner 仅仅设想这门语言会在几年后在苹果内部圈子里产生影响,而苹果则认为这是一个更快速、更有效开发 iPhone、iPad 以及 Mac 电脑软件应用的工具。
2015 年 WWDC 大会上,苹果公司高级副总裁 Craig Federighi 表示,“我们认为未来 20 年 Swift 将成为编程的标准语言。我们认为它将成为未来主要的编程语言之一。” 同时,他也表示,如果想要给更多企业开发者开发自己的移动应用提供支持的话,最好的办法就是开源。
开源之后,Swift 发展之好让我咋舌。当年我们开源了 LLVM 和 Clang,它们也发展喜人。但是,跟 Swift 比起来,它们的发展也太慢了,LLVM 和 Clang 开源后完全没有 Swift 这么火。
Swift 就不同了,开源一年之后,我们就有了上百万的开发者在使用这门语言 —— 我和很多有丰富开源经验的老工程师都吓了一跳,这简直了!然后我们每天收到无数的邮件和 pull requests,要求更新这个、要求优化那个,我们的节奏完全被打乱了。
我现在觉得开源这个决定至关重要。一来大家会帮着优化;二来我们有个巨大的论坛,在那里大家可以畅所欲言,全世界的人都在帮着 Swift 进步,这真的很棒。我们虽然没有一开始就具体计划要开源,但是苹果内部当时都觉得 Swift 肯定有一天要开源。
—— Chris Lattner
曾经有一句话很火 ——“Swift 统治世界”。这是 Chris Lattner 开玩笑说的,但渐渐地,无论是主创团队还是苹果其他人,都开始将 Swift 当成是未来世界的主流语言来看,在他们眼里,它将会超越 Python,甚至有一天取代 C。
在 Chris Lattner 的规划中,开源是重要的一环;然后,Swift 必须要有一个杀手级的产品;再然后,就要把 Swift 应用到服务器端;再接下来,Swift 要取代 Java。
02 开源多年,苹果也有委屈,大家过度揣测了吗?
尽管 Swift 致力开放,且雄心勃勃;但始终难以摆脱苹果封闭的刻板印象。
大家始终觉得, Swift 只是苹果自己搞出来的东西,是苹果自己的玩具,只能用在苹果自己的 iOS 系统和 macOS 系统上。对此,Swift 不断加大开源和构建社区的力度,希望 Swift 能更好地被接受,并在系统开发领域追上来。
我们的目标是建立一个包容的社区。但是,如果您不是 Apple 开发人员,每次搜索 Swift 的东西时都会陷入有关 iOS 的讨论,这会让人感到疏远。
这会让你觉得自己像个局外人,这是个错误的信号。我想,没有人打算让这种情况发生,但这个效果是真实的。这是我们作为一个社区面临的挑战。而且,我不知道这些问题有没有好的、简单的答案。
—— Chris Lattner
情况究竟是怎样的呢?在 Swift 社区网站写着这样一段话:
Swift.org 社区的唯一目标是打造世界上最好的通用编程语言。我们将共同开发该语言,并由任何希望参与的人提供贡献。
Swift 语言是公开开发的,所有关于语言或社区流程的技术或管理主题都应提交给 Swift 公共论坛。鼓励公开对话,积极的 Swift 语言开发人员应关注相关论坛类别。
在结构上,Swift 项目由一个核心工程师团队(7 人)管理,该团队通过与社区合作来推动战略方向。技术领导者来自贡献者社区,任何人都可以获得领导 Swift 领域的权利。
但是,Apple Inc. 是项目负责人并担任该项目的仲裁者。Ted Kremenek(Chris Lattner 离开社区后,钦点的继任者)是苹果的指定代表,并担任项目负责人的代言人。
这意味着,苹果并没有打算将 Swift 完全交给外部人员,苹果始终保持着领导权,外部开发者能参与进来,引导 Swift 的发展,为它的运作和功能作出贡献,并且他们的工作将会公开。
苹果的确在把握着主导权,但外界对此的揣测只会层层加码。这种刻板印象和怀疑论调,在 Chris Lattner 的离职风波中,得到了很好的体现。
2017 年,Chris Lattner 离开了苹果,下一个东家是特斯拉。媒体从苹果之前多次发动的专利战争、被专利出庭困扰而辞职的前员工、特斯拉在专利上的开放态度等 “蛛丝马迹” 揣测
Chris Lattner 离开的真正原因。更有多位自称 Chris Lattner 的 “朋友” 出来表示,Chris Lattner 确实是因专利态度加入特斯拉。
没过多久,2017 年 1 月 13 日,Chris Lattner 不得不站出来在 Twitter 上辟谣:
我的决定与(专利)“开放” 无关,所谓的 “朋友” 要么是捏造的,要么是投机的。大众只是想让苹果难堪而已。
在开源上,Chris Lattner 力挺老东家。他表示,苹果其实有开源的传统, LLVM 虽然不是始于苹果,但是最终是苹果完成并将其开源。Clang 则完完全全是生于斯开源于斯。还有其他工具,比如 LLDB、libc+ 以及 compiler-rt 都是如此。
但是,媒体和外界的看法是冷峻的。更多人认为,开源从来都是不是苹果的初衷,而是一场不得不顺势而为的改变。
第一,在过去的 15 年间,开发者已经显示了对开源工具和平台的偏爱。如果苹果继续让开发者适应自己的技术,远离第三方技术,是很有风险的。这会让苹果与开发者的关系变得疏远,苹果对外开放是迟早的事。
第二,最近几年,新编程语言层出不穷,谷歌的 Go 语言、Mozilla 的 Rust、Meta 的 Hack 和 D 语言等,都是开源的!他们之中甚至会有可能出现下一个软件开发的标准。
而且,2014 年,微软开源了 .NET 框架,这个框架被正式许可在包括 iOS 和 macOS 等的非 Windows 环境使用。(有意思的是,直到 2020 年 9 月,苹果才正式官宣将 Swift 引入 Windows,也不知道为啥动作那么慢。)面对这样的挑战,苹果没有选择,Swift 必须开源。
第三,多年来,苹果一直致力于完善自己的的闭环生态圈,Swift 的开源也与此脱不开干系。尤其是在移动互联不断深入以后,要想抢占先机,就必须要有强有力的技术支持和出色的用户体验。
如今,苹果自己的硬件设备市场占有率正在稳步提升,iOS、macOS、iPadOS 等系统则在不断完善。不少人认为,推出开源的 Swift 对于丰富应用体系、挖掘人才等方面有很好的促进作用,苹果下的这盘棋很大。
目前苹果主要的几个软件平台
03 结语:通过开源,苹果能实现自我超越吗?
有句名言:开源吞噬世界。
我们能够看到,这个世界的确在被开源软件改变着,包括微软这样的专有软件大本营。2015 年,当微软拿出印有 “Microsoft Loves Linux” 字样的 T 恤和徽章时,也不知道有多少人被咖啡呛到了。
开源声势很大,苹果在开源界也难免一鼻子灰,比如,与 GCC 的合作。现在,苹果又不得不向开源靠拢。除了 Darwin、WebKit 和 Swift,苹果还有一些其他开源项目。但是,苹果每次开源,都会有异样的声音。
比如,2018 年苹果宣布开源一款增强型 NoSQL —— FoundationDB(是苹果在 2015 年的时候收购的开源公司开发的项目),就有人表示,商业巨头总是这样,自己不想维护了,就丢出来给社区维护,等社区维护好了,又闭源拿来卖钱。
除此之外,苹果还积极参加各种开放计划、开源基金会等,比如 Facebook (当时还叫这名)领军的开放计算项目(Open Compute Project, OCP)以及 Blender 基金会、开放媒体联盟等。
一路上,苹果不停招兵买马。这两年,苹果不断发布有关 RISC-V 开发者和开源项目工程师的招聘,想要从开源界吸收力量。
2011 年,乔布斯去世,苹果始终没能走出他的影响。在乔布斯的构建下,苹果对软硬件有强烈的控制欲,并发展出一种独特的闭源方式:封闭系统代码的同时,通过和第三方分享利益的方式来构建生态。
电影《史蒂夫・乔布斯》中,法鲨饰演的乔布斯刚刚复仇归来,面对昔日伙伴 Wozniak 的质问,他将所有的一切归罪于 “开放”
在 Tim Cook 的领导下,苹果的商业模式始终没有脱离软硬件一体化消费电子公司的范畴,依旧需要不断推出远远超过市场预期的新品来维持地位。
通过开源,苹果能超越自己一直以来的封闭模式吗?
相关文章:

(下)苹果有开源,但又怎样呢?
一开始,因为 MacOS X ,苹果与 FreeBSD 过往从密,不仅挖来 FreeBSD 创始人 Jordan Hubbard,更是在此基础上开源了 Darwin。但是,苹果并没有给予 Darwin 太多关注,作为苹果的首个开源项目,它算不上…...

row_number 和 cte 使用实例:考场监考安排
row_number 和 cte 使用实例:考场监考安排 考场监考安排使用 cte 模拟两个表的原始数据使用 master..spt_values 进行数据填充优先安排时长较长的考试使用 cte 安排第一个需要安排的科目统计老师已有的监考时长尝试使用 cte 递归,进行下一场考试安排&…...

2023天梯赛记录
文章目录 L2-001 紧急救援L2-002 链表去重L2-004 这是二叉搜索树吗?L2-005 集合相似度L2-006 树的遍历L2-007 家庭房产L2-010 排座位L2-011 玩转二叉树L2-012 关于堆的判断L2-013 红色警报L2-014 列车调度L2-016 愿天下有情人都是失散多年的兄妹L2-019 悄悄关注L2-0…...

被吐槽 GitHub仓 库太大,直接 600M 瘦身到 6M,这下舒服了
大家好,我是小富~ 前言 忙里偷闲学习了点技术写了点demo代码,打算提交到我那 2000Star 的Github仓库上,居然发现有5个Issues,最近的一条日期已经是2022/8/1了,以前我还真没留意过这些,我这人懒…...

OpenGL(三)——着色器
目录 一、前言 二、Shader 2 Shader 2.1 顶点着色器 2.2 片段着色器 三、APP 2 Shader 四、顶点颜色属性 五、着色器类C 一、前言 着色器Shader是运行在GPU上的小程序,为图形渲染管线的某个特定部分而运行。各阶段着色器之间无法通信,只有输入和输…...

【MySQL】单表查询
一、表的准备 查询操作的SQL演示将基于下面这四张表进行,我们先创建好这四张数据表,并为其添加数据。 1、第一张表为部门表,名称为包含三个字段:部门编号(deptno),部门名称(dname&…...

第一章 安装Unity
使用Unity开发游戏的话,首先要安装Unity Hub和Unity Editor两个软件。大家可以去官方地址下载:https://unity.cn/releases/full/2020 (这里我们选择的是2020版本) Unity Hub 是安装 Unity Editor、创建项目、管理帐户和许可证的主…...

20230425----重返学习-vue项目-vue自定义指令-vue-cli的配置
day-057-fifty-seven-20230425-vue项目-vue自定义指令-vue-cli的配置 vue项目 vuex版 普通版纯axios:切换页面,就会重新发送一次ajax请求普通版升级:vuex版vuex的常用功能 vuex 数据通信vuex 缓存数据 前进后退,切换页面&#…...

el-input 只能输入整数(包括正数、负数、0)或者只能输入整数(包括正数、负数、0)和小数
使用el-input-number标签 也可以使用typenumbe和v-model.number属性,两者结合使用,能满足大多数需求,如果还不满足,可以再结合正则表达式过滤 <el-input v-model.number"value" type"number" /> el-i…...

Docker Compose的常用命令与docker-compose.yml脚本属性配置
Docker Compose的常用命令与配置 常见命令ps:列出所有运行容器logs:查看服务日志输出port:打印绑定的公共端口build:构建或者重新构建服务start:启动指定服务已存在的容器stop:停止已运行的服务的容器&…...

with语句和上下文管理器(py编程)
1. with语句的使用 基础班向文件中写入数据的示例代码: # 1、以写的方式打开文件f open("1.txt", "w")# 2、写入文件内容f.write("hello world")# 3、关闭文件f.close()代码说明: 文件使用完后必须关闭,因为文件对象会占用操作系统…...

《JavaEE初阶》HTTP协议和HTTPS
《JavaEE初阶》HTTP协议和HTTPS 文章目录 《JavaEE初阶》HTTP协议和HTTPSHTTP协议是应用层协议:使用Fiddler抓取HTTP请求和响应:Fiddler的下载和基本使用:Fiddler的中间代理人身份:其他抓包工具: 先简单认识HTTP请求与HTTP响应:HTTP请求:HTTP响应: HTTP请求详解:首行࿱…...

微信小程序 | 基于高德地图+ChatGPT实现旅游规划小程序
🎈🎈效果预览🎈🎈 ❤ 路劲规划 ❤ 功能总览 ❤ ChatGPT交互 一、需求背景 五一假期即即将到来,在大家都阳过之后,截止到目前这应该是最安全的一个假期。所以出去旅游想必是大多数人的选择。 然后&#x…...

Excel技能之实用技巧,高手私藏
今天来讲一下Excel技巧,工作常用,高手私藏。能帮到你是我最大的荣幸。 与其加班熬夜赶进度,不如下班学习提效率。能力有成长,效率提上去,自然不用加班。 消化吸收,工作中立马使用,感觉真不错。…...

黑马程序员Java零基础视频教程笔记-运算符
文章目录 一、算数运算符详解和综合练习二、隐式转换和强制转换三、字符串和字符的加操作四、自增自减运算符五、赋值运算符和关系运算符六、四种逻辑运算符七、短路逻辑运算符八、三元运算符 一、算数运算符详解和综合练习 1. 运算符和表达式 ① 运算符:对字面量…...

Microsoft Data Loss Prevention(DLP)部署方案
目录 一、前言 二、部署流程 步骤一:确定数据需求 步骤二:规划信息保护策略...

win系统使用frp端口映射实现内网穿透,配置“任务计划程序”提高稳定性
Github下载最新版frp: https://github.com/fatedier/frp/releases/download/v0.48.0/frp_0.48.0_windows_amd64.zip 解压把frpc.exe和frpc.ini放到D:\program\frp目录下,修改frpc.ini内容如下: [common] server_addr 服务器域名或IP,假设…...

python工具方法 39 大图裁剪为小图|小图还原成大图(含生成大图伪标签)
在进行遥感影像的处理中,通常都是几万x几万的大型影像,这给数据标注(图像尺寸过大使标注软件不能正常打开或过大给标注带来困难)、训练模型(只能使用小图)、测试图片(在小图上预测需要还原成大图)、生成伪标签(需要大图的伪标签,而不是小图的)都带来了困难。针对此进…...

MUSIC算法仿真
MUSIC算法原理及仿真 DOA波达方向估计MUSIC算法概述MUSIC算法原理MUSIC算法MATLB仿真 DOA波达方向估计 DOA(Direction Of Arrival)波达方向是指通过阵列信号处理来估计来波的方向,这里的信源可能是多个,角度也有多个。DOA技术主要…...

redis 数据类型详解 以及 redis适用场景场合
1. MySqlMemcached架构的问题 实际MySQL是适合进行海量数据存储的,通过Memcached将热点数据加载到cache,加速访问,很多公司都曾经使用过这样的架构,但随着业务数据量的不断增加,和访问量的持续增长,我们遇…...

python基于轻量级YOLOv5的生猪检测+状态识别分析系统
在我之前的一篇文章中有过生猪检测盒状态识别相关的项目实践,如下: 《Python基于yolov4实现生猪检测及状态识》 感兴趣的话可以自行移步阅读,这里主要是基于同样的技术思想,将原始体积较大的yolov4模型做无缝替换,使…...

阅读笔记 First Order Motion Model for Image Animation
文章解决的是图片动画的问题。假设有源图片和驱动视频,并且其中的物体是同一类的,文章的方法让源图片中的物体按照驱动视频中物体的动作而动。 文章的方法只需要一个同类物体的视频集,不需要而外的标注。 方法 该方法基于self-supervised策…...

【计算机图形学】课堂习题汇总
在直线的光栅化算法中,如果不考虑最大位移方向则可能得到怎样的直线? A:斜率为1的线 B:总是垂直的 C:离散的点,无法构成直线 D:总是水平的 在直线的改进的Bresenham算法中,每当误…...

国外导师对博士后申请简历的几点建议
正所谓“工欲善其事,必先利其器”,想要申请国外的博士后职位,就要准备好相应的申请文书材料。如果说Cover Letter是职位的窍门砖,那么申请者的简历就是争取职位的决定性筹码。 相信大家已经看过许多简历的模版了,但是…...

【五一创作】Scratch资料袋
Scratch软件是免费的、免费的、免费的。任何需要花钱才能下载Scratch软件的全是骗子。 1、什么是Scratch Scratch是麻省理工学院的“终身幼儿园团队”开发的一种图形化编程工具。是面向青少年的一款模块化,积木化、可视化的编程语言。 什么是模块化、积木化&…...

数据库基础篇 《17.触发器》
数据库基础篇 《17.触发器》 在实际开发中,我们经常会遇到这样的情况:有 2 个或者多个相互关联的表,如商品信息和库存信息分别存放在 2 个不同的数据表中,我们在添加一条新商品记录的时候,为了保证数据的完整性&#…...

03 - 大学生如何使用GPT
大学生如何使用GPT提高学习效率 一、引言 在当今的高速发展的信息时代,大学生面临着越来越多的学习挑战。作为一种先进的人工智能技术,GPT为大学生提供了一种强大的学习工具。本文将介绍大学生在不同场景中如何使用GPT来提高学习效率,并给出…...

【P1】Jmeter 准备工作
文章目录 一、Jmeter 介绍1.1、Jmeter 有什么样功能1.2、Jmeter 与 LoadRunner 比较1.3、常用性能测试工具1.4、性能测试工具如何选型1.5、学习 Jmeter 对 Java 编程的要求 二、Jmeter 软件安装2.1、官网介绍2.2、JDK 安装及环境配置2.3、Jmeter 三种模式2.4、主要配置介绍2.4.…...

字节的面试,你能扛住几道?
C , Python 哪一个更快? 读者答:这个我不知道从哪方面说,就是 C 的话,它其实能够提供开发者非常多的权限,就是说它能涉及到一些操作系统级别的一些操作,速度应该挺快。然后 Python 实现功能还…...

NOPI用法之自定义单元格背景色(3)
NPOI针对office2003使用HSSFWorkbook,对于offce2007及以上使用XSSFWorkbook;今天我以HSSFWorkbook自定义颜色为例说明,Office2007的未研究呢 在NPOI中默认的颜色类是HSSFColor,它内置的颜色有几十种供我们选择,如果不…...