Levix 空间站
1.06K subscribers
261 photos
12 videos
22 files
1.86K links
主要分享前端、AI 以及前沿科技资讯。

🚫 禁止人身攻击:请在评论区保持尊重和友好,避免不当言论和负面互动。

🚫 禁止违规内容:请勿发布任何黄赌毒、宗教极端、政治敏感或其他违反社区规定的内容。
主要分享前端以及业界科技资讯。

🚫 禁止广告与刷屏:为了维护良好的交流环境,请不要进行任何形式的广告推广、黑产活动、刷屏行为及发布不适内容。

🔒 保护个人信息:请注意个人隐私和网络安全,不要在评论区泄露个人信息或点击不明链接。
Download Telegram
Git 诞生 20 年,从一个简单的内容管理工具成长为全球最广泛使用的版本控制系统之一。

So, happy birthday Git. You are still weird. You are still wonderful.

20 年前的今天,Linus Torvalds 做出了 Git 的第一次提交,当时 Git 只是一个小型的个人项目,但如今它已成为最强大的版本控制系统。Scott Chacon 与 Git 的渊源颇深,他在 Git 初期就开始使用它,并且参与了 GitHub 的创立,还撰写了广受欢迎的《Pro Git》一书,为推广 Git 做出了重要贡献。

Git 的诞生源于 Linux 内核开发社区对版本控制和协作的不满。当时,内核社区主要通过邮件列表进行协作,这种方式虽然高效,但现有的版本控制系统功能不足,无法满足需求。因此,Linus Torval 决定开发 Git,最初的目标是更好地管理补丁和 tarball(一种压缩文件),而不是作为一个版本控制系统。Git 的数据结构设计(如文件树的链表、内容可寻址的 blob 存储)从一开始就确定了,并且一直延续至今。

Git 的第一次提交,当时的 Git 只是一个简单的“愚蠢内容跟踪器”,包含七个基础工具,例如 write-tree 和 commit-tree。这些工具后来逐渐演变为 Git 的底层命令,如 git cat-file 和 git write-tree。从第一天起,Git 就能够构建“快照”、记录变更集,并读取数据库结构。

Scott 还分享了自己最初接触 Git 的经历。他和同事 Nick Hengeveld 在一家名为 Reactrix 的初创公司工作时,将 Git 用作分布式内容跟踪器,而不是版本控制系统。他们利用 Git 的高效性来更新数字广告内容,通过 Git 的内容可寻址文件系统,实现了对大量资产的高效管理和更新。

Git 如何从一个底层工具逐渐发展为一个完整的版本控制系统。最初,Git 的命令非常底层,许多功能是通过脚本实现的。例如,最早的 git log 是一个简单的脚本,调用了 git-rev-list 命令。而 git rebase 的诞生则源于 Junio 和 Linus 在 2005 年关于工作流程的讨论,Junio 提供了一个简单的脚本,首次引入了“rebase”这个概念。

GitHub 的吉祥物“Octocat”(章鱼猫)的由来。在 Git 的早期邮件列表中,“octopus”一词被用来描述一种多父节点的合并策略,GitHub 的创始人之一 Tom 在寻找适合 Git 的吉祥物时,选择了“章鱼”这一形象,并最终确定了可爱的“Octocat”形象。

#Git

https://blog.gitbutler.com/20-years-of-git/
一种仅使用 CSS 实现模糊图像占位符(LQIP,Low Quality Image Placeholder)的技术,通过一个自定义 CSS 属性即可实现,无需额外的 HTML 包装元素或 JavaScript 代码。

<img src="…" style="--lqip:483606">


#CSS

https://leanrada.com/notes/css-only-lqip/
GitHub Copilot 推出了一系列新功能和升级。Agent 模式 和 MCP(Model Context Protocol)支持现已向所有 VS Code 用户推出。Agent 模式能够将用户的指令转化为代码操作,支持终端命令建议和运行时错误自我修复等功能。GitHub Copilot 还发布了新的 GitHub MCP 服务器,允许开发者将 GitHub 功能添加到任何支持 MCP 的 LLM 工具中。

GitHub Copilot 推出了新的 Pro+ 计划,为个人开发者提供每月 1500 次高级请求和对最新模型(如 GPT-4.5)的访问权限,价格为每月 39 美元。此外,Copilot Pro 用户将从 2025 年 5 月 5 日起每月获得 300 次高级请求,Copilot Business 和 Copilot Enterprise 用户将分别从 2025 年 5 月 12 日至 19 日起获得每月 300 次和 1000 次高级请求。用户还可以选择按需购买额外的高级请求,每次请求费用为 0.04 美元起。

GitHub Copilot 的 代码审查功能现已正式发布,过去一个月的预览期间已有超过 100 万开发者在 GitHub 上使用该功能。此外,“下一步建议”功能 也已正式推出,帮助开发者通过快捷键快速完成代码编辑。

GitHub Copilot 的 Agent 模式支持多种语言模型,包括 Anthropic Claude 3.5、3.7 Sonnet、Google Gemini 2.0 Flash 和 OpenAI GPT-4o。用户可以根据需求选择不同的模型来完成任务。

#Github #MCP #Agents #AI

https://github.blog/news-insights/product-news/github-copilot-agent-mode-activated/
送几个 Folo 邀请码,已经用了的麻烦评论一下。

WR_QY5Dgci

hCoez5XPvv

6ZMunqnY0o

VrIFF2dwBV

DYRl4q0g4e


#Folo

https://follow.is/
2
AI 在软件开发中的应用,尤其是 `vibe coding`(一种基于聊天的编程方式)以及 `coding agents`(编码代理)的发展趋势,对行业从业者,尤其是初级开发者和高级开发者的影响。

vibe coding,一种通过与大型语言模型(LLM)聊天来编写代码的方式,开发者只需提出需求,模型会生成代码,开发者再将结果反馈给模型以继续改进。这种编程方式与传统编程或代码补全工具截然不同。vibe coding 目前处于一个特殊的发展阶段:一方面,80% 的行业从业者对其一无所知;另一方面,它正在迅速普及,甚至被一些公司采用,尽管其定义仍存在争议。与此同时,一些开发者已经开始转向更先进的 “agent-based coding”(基于 Agent 的编程),这种编程方式比聊天式编程更高效,因为它减少了人工干预,让 AI 代理自行完成更多任务。

未来编程方式将经历多个阶段的演变:从传统的手动编程(2022 年),到基于补全的编程(2023 年),再到聊天式编程(2024 年),随后是编码代理(2025 年上半年)、代理集群(2025 年下半年)以及代理舰队(2026 年)。每一种新的编程方式都比前一种更高效,且增长速度呈指数级上升。例如,聊天式编程的效率可能是手动编程的 5 倍,而编码代理的效率又可能是聊天式编程的 5 倍。这种快速的演变意味着开发者需要不断适应新的工具和技术,否则可能会被行业淘汰。

`coding agents`(编码代理)的工作原理和影响。这些代理能够在文本终端中运行,通过与 LLM 的交互来完成复杂的编程任务,如修复 JIRA 票据中的问题、编写测试代码、运行测试等。它们可以独立完成大量工作,减少了人工干预的需要,从而极大地提高了开发效率。然而,这些代理目前还处于发展的早期阶段,只能处理相对较小的任务,并且需要开发者对其进行监督和指导。尽管如此,它们的潜力巨大,未来有望进一步提升开发效率。

在财务方面,`coding agents` 的使用成本相对较高,每小时可能需要花费 10 至 12 美元的 LLM 代币。这意味着企业需要为每个开发者每天预留 80 至 100 美元的预算,以便他们能够充分利用编码代理。随着代理集群和代理舰队的发展,开发者将能够同时运行多个代理,从而进一步提高生产力。然而,这也意味着企业的运营成本将大幅增加,可能需要重新调整预算。

初级开发者比高级开发者更愿意接受和使用 AI 技术。初级开发者通常更愿意学习新技术,并将其应用于实际工作中。相比之下,一些高级开发者可能对新技术持怀疑态度,或者担心新技术会威胁到他们的工作。然而,那些拒绝接受 AI 的开发者最终会失去竞争力。因为 AI 技术不仅可以提高开发效率,还可以降低企业的运营成本。那些能够快速适应新技术的开发者,尤其是初级开发者,将在未来的软件开发行业中占据更有利的位置。

软件开发行业正在经历一场由 AI 驱动的变革。开发者需要适应新的编程方式,学会使用编码代理和其他 AI 工具。否则,他们可能会被市场淘汰。同时,企业也需要为这种变革做好准备,调整预算,以支持开发者使用新的技术和工具。无论是开发者还是企业,都应该积极拥抱 AI 技术,以保持竞争力。
Sourcegraph 正在研究如何将这些 AI 技术与企业的知识产权和代码库相结合,以提高开发效率和生产力。尽管目前 AI 技术的应用成本较高,但其带来的价值将远远超过成本。未来,软件开发将更多地依赖于 AI 代理的管理和监督,而不是传统的手工编码。

#AI #Agents

https://sourcegraph.com/blog/revenge-of-the-junior-developer?&aid=recprFVVBFf1s8qMk&_bhlid=df4d652e0627f0f693f0df00d18a04e53cce6279
Forwarded from 扫地僧º笔记 (mastergo)
分享一个 总结文章的提示词特有趣!
1.寻找文章中违反一般常识的事实、观点,或者超出一般常识的事实、观点,用平实的语言输出
2.有限度地演绎文章中的事实、观点,使之违反一般常识,用夸张、挑衅的语言输出
3.都使用中文输出
谷歌云部门宣布将在 2025 年第三季度推出 Google Distributed Cloud 服务,允许企业客户在其自有数据中心运行谷歌的 Gemini 人工智能模型。这一举措旨在满足那些希望在使用谷歌云技术的同时,保留对自身数据控制权的客户需求。

谷歌的这一服务与竞争对手形成对比。例如,Anthropic 和 OpenAI 尚未开放其模型在物理数据中心运行,因为这会削弱它们对技术质量和速度的控制。而另一家 AI 创业公司 Cohere 虽然允许客户在其自有基础设施上部署模型,但该公司表示,这种方式的设置速度比通过公司自身或使用云端的方式更慢。

谷歌此次的举措可能会吸引一批新的潜在客户。许多公司、学校和政府部门仍然维持着自己的数据中心硬件,尽管近年来云服务已经变得相当普遍。谷歌还表示,即使是符合美国政府机密和绝密级别的客户,也将能够通过断网的 Google Distributed Cloud 空气隔离版本使用 Gemini 模型。

此外,谷歌还宣布与 Nvidia 合作,将 Gemini 模型引入 Nvidia 的 Blackwell 图形处理单元(GPU)。企业可以通过谷歌或其他渠道购买这些芯片。根据行业研究公司 Gartner 的数据,2023 年全球云基础设施支出总计达到 1400 亿美元,其中谷歌占据了 8% 的市场份额,而 Amazon 和 Microsoft 分别占据了 39% 和 23% 的市场份额。

#资讯 #云服务 #Google

https://www.cnbc.com/2025/04/09/google-will-let-companies-run-gemini-models-in-their-own-data-centers.html
VERT 是一个开源的下一代文件转换工具,完全本地运行且永久免费。它利用 WebAssembly 技术实现在用户设备上直接转换文件,无需依赖云端服务,从而确保数据隐私和安全性。VERT 支持多种文件格式的转换,包括但不限于图片、视频和文档等,且不受文件大小限制,具有高度的灵活性和实用性。

#Tools

https://vert.sh/
一份关于大学生使用 Claude AI 的教育报告,研究了高等教育环境中学生如何将 AI 工具融入学术工作。

STEM 学生尤其是计算机科学专业的学生是 AI 工具的早期采用者。计算机科学专业学生仅占美国学士学位的 5.4%,但在 Claude 的对话中占比高达 36.8%。相比之下,商业、健康和人文学科的学生采用率较低。

学生与 AI 的互动方式可分为四种模式:直接解决问题、直接输出创作、协作解决问题和协作输出创作,每种模式在对话中占比相近(23%-29%)。

学生主要使用 AI 进行内容创作(如设计练习题、编辑论文)和分析(如分析法律概念),这与布卢姆教育目标分类学中的高阶认知功能相符。然而,这也引发了学生是否会将关键认知任务外包给 AI 的担忧。

学生在不同学科中使用 AI 的方式存在差异。例如,自然科学与数学领域的对话倾向于问题解决,而计算机科学、工程学和自然科学与数学则更倾向于协作式对话。教育领域的对话中,输出创作占比最高(74.4%),但其中可能包含教师使用 Claude 制作教学材料的情况。

此外,报告通过布卢姆教育目标分类学分析了学生委托给 AI 的认知任务,发现 AI 主要完成高阶认知功能,如“创造”(39.8%)和“分析”(30.2%),而低阶认知任务如“应用”(10.9%)、“理解”(10.0%)和“记忆”(1.8%)较少。这种分布因互动风格而异,输出创作任务更多涉及创造功能,问题解决任务则更多涉及分析功能。

报告的局限性在于,数据集可能仅涵盖早期采用者,无法完全代表整个学生群体;且仅分析了 Claude.ai 的使用情况,忽略了其他 AI 工具的使用。此外,由于隐私考虑,仅分析了 18 天内的数据,无法反映学生全年使用模式的变化。报告也未研究学生如何将 AI 输出用于学术工作,以及这些对话是否真正支持学习成果。

#报告 #Claude #AI

https://www.anthropic.com/news/anthropic-education-report-how-university-students-use-claude
优秀程序员的特质

1. 深入理解工具:他们不仅会使用工具,更会深入理解工具的原理、历史、维护者、局限性和生态系统。例如,后端工程师如果大量使用 Kafka,就应该对其有深入的了解,而不仅仅是通过 Reddit 等渠道获取的碎片化信息。

2. 重视阅读错误信息:优秀程序员会认真阅读错误信息并尝试理解其含义,从而能够从有限的上下文中推断出大量信息,自行解决大部分问题。这种能力甚至被形容为一种“超能力”,可以帮助他人解决难题。

3. 善于分解问题:面对难题,他们会将其分解为更小、更易于解决的部分。这是一种需要大量经验积累的技能,也是专业开发人员的主要工作内容。通过正确分解问题,可以使工作变得相对轻松。

4. 不惧怕接触代码:优秀程序员乐于阅读和修改代码,不会因代码的复杂性或陌生性而退缩。他们相信通过时间和努力可以掌握任何所需的技能,并且往往因为是团队中第一个勇于接触某部分代码的人而成为该领域的专家。

5. 乐于助人:尽管优秀工程师通常很忙,但他们总是愿意帮助他人。这种乐于助人的品质不仅源于他们的善良,更源于他们天生的好奇心和解决问题的能力,这使得他们成为团队中不可或缺的一员。

6. 注重写作能力:优秀的程序员通常也是出色的写作者。他们通过博客、演讲、开源项目等方式分享知识。写作能力与编程能力之间存在很强的相关性,良好的写作能力意味着清晰、有条理的思维方式,这也会反映在代码风格上。

7. 持续学习:一些顶尖的程序员即使年过六十依然保持着学习的热情,不断尝试新的工具和技术,从而能够始终跟上时代的步伐。他们不会盲目跟随潮流,但会对新技术进行谨慎评估,能够明确指出其优缺点及适用场景。

8. 不看重地位:优秀程序员不会因职位高低而区别对待他人,他们愿意从每个人身上学习,无论是资深的首席工程师还是初出茅庐的初级开发人员。新人往往不受办公室政治的影响,思维更加灵活,能够提出创新的解决方案。

9. 建立声誉:要想成为顶尖程序员,不仅要做好工作,还要让自己的工作被更多人知晓。可以通过构建关键服务、开发知名工具、贡献开源项目或撰写书籍等方式来扩大影响力。建立声誉是一个长期目标,需要持续努力,但随着时间的推移,优秀的工作成果会逐渐得到认可。

10. 保持耐心:对计算机和人类都要有耐心,尤其是对自己。遇到问题时,要保持冷静,不要急于指责他人或外部环境。优秀的程序员能够保持耐心,专注于解决问题,而不是被情绪左右。

11. 不指责计算机:当遇到看似随机的错误时,优秀程序员不会将责任归咎于软件或其他外部因素。他们相信任何问题都有逻辑上的解释,只是尚未找到而已。这种态度使他们能够不断进步,学到别人学不到的东西。

12. 勇于承认“不知道”:在面试中,优秀候选人会坦诚地表示“不知道”,但同时会尝试通过逻辑推理来寻找答案。这种态度表明他们具有学习的潜力,而不是盲目自信或防御性地掩饰自己的无知。

13. 避免猜测:在面对不确定性时,应避免猜测,而是通过提问、查阅资料、使用调试工具等方式来获取准确答案。错误的猜测可能导致错误的假设,进而影响后续的开发工作。

14. 保持简单:优秀的工程师倾向于编写简单易懂的代码,而不是追求复杂巧妙的解决方案。简单性通常足以满足需求,并且更容易维护。在适当的时候追求完美,但在大多数情况下,简单是更好的选择。

#思考 #编码

https://endler.dev/2025/best-programmers/
Agent2Agent (A2A) 协议,实现 AI Agents 之间的无缝协作与互操作性。

A2A 协议的核心目标是让不同供应商或框架构建的 AI 代理能够在动态的多代理生态系统中跨孤立的数据系统和应用程序进行协作。通过实现代理之间的互操作性,可以提高自主性,显著提升生产力,同时降低长期成本。该协议基于谷歌在扩展代理系统方面的内部经验,旨在解决在为客户提供大规模多代理系统部署时所面临的挑战。

#A2A #Google #AI

https://developers.googleblog.com/en/a2a-a-new-era-of-agent-interoperability/
一个全面的键盘快捷键表格,涵盖了多种操作系统(如 Windows、macOS、Linux 等)以及常见的软件应用程序(如浏览器、文本编辑器等)中的键盘快捷键。

#Tools

https://en.wikipedia.org/wiki/Table_of_keyboard_shortcuts
Firebase Studio 是一个全栈 AI 工作空间,旨在加速整个开发生命周期。支持构建后端、前端和移动应用,所有操作均可在一个平台上完成。与 Gemini AI 工具集成,可完成编码、调试、测试、重构、代码解释和文档编写等多种任务。AI 助手能够与代码库交互并代表用户执行操作。新的 Gemini Code Assist 代理可帮助完成从迁移代码到 AI 测试的各种任务。

#Google #AI #IDE

https://firebase.studio/
JavaScript 开发者在 2025 年应该了解的一些重要特性

1. Iterator helpers

在处理大型数组时,传统的链式数组操作(如 arr.slice(10, 20).filter(el => el < 10).map(el => el + 5) )会创建多个临时数组,导致性能低下。

JavaScript 引入了迭代器方法,这些方法不会创建临时数组,而是通过迭代器逐个处理数据,从而节省内存。

常用迭代器方法:

Iterator.prototype.drop():跳过迭代器开头的指定数量元素。
Iterator.prototype.take():从迭代器开头取指定数量的元素。
Iterator.prototype.some() 和 Iterator.prototype.every():分别用于测试迭代器中是否有元素满足条件或所有元素是否满足条件。
Iterator.prototype.filter()、Iterator.prototype.find()、Iterator.prototype.flatMap():分别用于过滤、查找和展平迭代器中的值。
Iterator.prototype.forEach()、Iterator.prototype.map()、Iterator.prototype.reduce():分别用于遍历、映射和归并迭代器中的值。
Iterator.prototype.toArray():将迭代器中的值转换为数组。

2. Array at() method

Array.prototype.at() 是一种替代方式,用于访问数组中的第 n 个元素。它支持负索引,从数组末尾开始计数。

[10, 20, 30].at(-1) 返回 30。

3. Promise.withResolvers()

Promise.withResolvers() 可以直接返回一个包含 promise、resolve 和 reject 的对象,简化了代码。


const { promise, resolve, reject } = Promise.withResolvers();


4. String.prototype.replace() / String.prototype.replaceAll() callback(字符串替换的回调函数)

String.prototype.replace()String.prototype.replaceAll() 的第二个参数可以是一个回调函数,而不仅仅是字符串。


let counter = 0;
console.log("NUMBER, NUMBER, NUMBER".replaceAll("NUMBER", (match) => match + "=" + (++counter)));
// 输出:NUMBER=1, NUMBER=2, NUMBER=3


5. Swapping variables(交换变量)


let a = 1, b = 2;
[a, b] = [b, a];


6. structuredClone()(结构化克隆)

开发者通常使用 JSON.stringify()JSON.parse() 来深拷贝对象,但这种方法存在以下问题:

- 不支持某些值(如 NaN、undefined 和 bigint)。
- 无法处理包含循环引用的对象。
- 对于大型对象,效率低下且浪费内存。

structuredClone() 是浏览器提供的 API,可以更高效地深拷贝对象,并且自动处理循环引用。


const obj = {};
obj.selfReference = obj;
const clonedObj = structuredClone(obj);
console.log(obj === clonedObj); // false
console.log(clonedObj.selfReference === clonedObj); // true



7. Tagged templates

标记模板允许通过函数解析模板字符串。第一个参数是一个字符串数组,其余参数是表达式的值。可以在插值值(或整个字符串)上执行自动转换。

8. WeakMap / WeakSet

WeakMapWeakSet 是类似于 Map 和 Set 的数据结构,但它们的键必须是对象,且不支持迭代器。当键的所有引用丢失时,键和可能的值可以被垃圾回收器回收,从而避免内存泄漏。

9. Set operations

JavaScript 现在支持对 Set 对象进行布尔运算。

Set.prototype.difference():返回一个新集合,包含当前集合中但不在给定集合中的元素。
Set.prototype.intersection():返回一个新集合,包含当前集合和给定集合的交集。
Set.prototype.union():返回一个新集合,包含当前集合和给定集合的并集。
Set.prototype.symmetricDifference():返回一个新集合,包含当前集合和给定集合的对称差集。
Set.prototype.isDisjointFrom():判断当前集合与给定集合是否没有交集。
Set.prototype.isSubsetOf():判断当前集合是否是给定集合的子集。
Set.prototype.isSupersetOf():判断当前集合是否是给定集合的超集。

#JavaScript #新特性

https://waspdev.com/articles/2025-04-06/features-that-every-js-developer-must-know-in-2025