2025-08-18 Hacker News Top Stories #
- PuTTY 推出了新网站 putty.software,方便用户查找和下载,解决了依赖第三方算法寻找网站的不便。
- 在 GPT 辅助编程的背景下,文章强调了创建小规模项目的价值,抵制规模化扩张,享受现代工具带来的自由。
- LinkedIn 已经成为充满空洞内容的平台,用户为了个人品牌发布“有毒平庸”内容,影响职业发展。
- 研究发现,含有头发中的角蛋白的牙膏可能保护和修复受损牙齿,未来两到三年内可能上市。
- LL3M 是一个利用大型语言模型在 Blender 中创建和编辑 3D 资产的工具,支持迭代细化和用户反馈。
- 文章总结了开发人员在编程中可能遇到的常见陷阱,涵盖 HTML、CSS、Unicode、浮点数、时间等多个方面。
- 现代要求 Ioniq 5 车主付费获取网络安全补丁,引发争议,用户质疑收费的合理性。
- Edka 平台允许用户在 Hetzner 账户上部署 Kubernetes 集群,提供低成本和简化的配置管理。
- 文章分享了大型企业工作的一年心得,揭示了复杂性、资源浪费和荒谬现象。
- Dev Compass 是一个编程哲学测试工具,帮助开发者通过 20 个问题确定自己的编程风格偏好。
PuTTY has a new website #
PuTTY 是一个免费的 SSH 客户端软件,适用于 Windows 和 Unix 系统,包括一个类似 xterm 的终端模拟器。该软件主要由 Simon Tatham 编写和维护。用户可以直接访问下载页面获取最新版本,或者访问主网站了解更多信息。
HN 热度 489 points | 评论 255 comments | 作者:GalaxySnail | 2 days ago #
https://news.ycombinator.com/item?id=44919891
- PuTTY 的新网站域名 putty.software 比之前的域名更容易找到,因为用户习惯在 URL 中看到项目名称。
- 依赖第三方控制的概率算法来寻找网站并不是一个明智的策略。
- 有人认为 Google 搜索结果的不可靠性可能是 PuTTY 更换域名的原因之一。
- 有人发现搜索"putty"时,putty.org 排在搜索结果的第一位,但该域名并非 PuTTY 项目官方所有。
- 有人建议使用更短的域名,如 putty.greenend.org.uk,但这个建议基于错误的假设。
- 有人通过搜索"chiark putty"来找到 PuTTY 的官方网站,认为这是一个可靠的方法。
- 有人认为直接在 Mac 的命令行中使用 OpenSSH 生成 SSH 密钥比下载第三方软件更安全。
- 有人提到,使用命令行生成 SSH 密钥比下载第三方软件更安全,但也提醒只有在可靠的来源推荐时才应该这样做。
- 有人指出 OpenSSH 和 OpenSSL 是两个完全独立的项目。
- 有人提到维基百科上的 PuTTY 页面链接到了官方网站,而不是诈骗网站。
Do things that don’t scale, and then don’t scale #
https://derwiki.medium.com/do-things-that-dont-scale-and-then-don-t-scale-9fd2cd7e2156
在这篇文章中,作者 Adam Derewecki 探讨了在当前技术环境下,特别是 GPT 辅助编程的兴起,我们可能不再需要追求规模化发展。他提出,现在可以轻松地创建一些不具规模的项目,这些项目可能只服务于个人或一个小圈子,但这样的小规模项目可能正是它们最好的形态。
作者分享了自己的几个小规模项目案例。他运营一个只有一百人左右的 Slack 工作空间,这个空间保持了一定的私密性和亲密感,如果规模扩大,这种氛围就会消失。他还提到了自己为母亲设计的 PostcardMailer 服务,最初是自动发送 Instagram 照片的明信片,后来转变为一个简单的电子邮件服务,只服务于他和他的小圈子。另一个例子是他为提醒母亲服药而编写的应用程序,这个程序通过 Twilio 每天三次打电话给他的母亲提醒她服药,这个程序的成本几乎为零,且仅服务于他的母亲。
文章强调了一种新的模式:识别出对你个人重要的需求,构建最简单的解决方案,抵制扩大规模的冲动,并享受这个过程。作者认为,使用现代工具构建软件的真正奢侈之处不在于速度、成本或 AI 的魔力,而在于有选择停下来的自由。在追求规模化的世界中,有一种安静的满足感来自于接受“足够好”的状态。
HN 热度 487 points | 评论 202 comments | 作者:derwiki | 1 day ago #
https://news.ycombinator.com/item?id=44925380
- AI 技术降低了项目启动的门槛,使得原本复杂的项目变得简单。
- 云服务是实现这些项目的关键,而不是 LLMs。
- LLMs 帮助克服“白纸”瘫痪和学习大量库的困难。
- 即使是编程新手,也能通过 LLMs 快速实现项目。
- 能够从 GenAI 中获得价值的能力几乎完全取决于识别不良模式的能力。
- 担心 LLMs 会加大新手和老手之间的差距,影响初级市场。
- 一些公司招聘“初级 AI 工程师”,但这种做法并不理想。
- Excel 是最受欢迎的声明式编程语言,需要改进默认日期处理和标记数据库表的功能。
- 通过 LLMs 快速生成的代码被称为“即时遗留代码”。
- 软件行业缺乏问责制,人们频繁跳槽,可以推卸责任。
- Python 语言和 LLMs 的结合使得原型开发的数量大幅增加。
- 认为 LLMs 不应该因为它们只是提供了一层外衣而获得所有赞誉。
- 认为 LLMs 降低了进行这些项目的障碍,使得业余项目的数量大幅增加。
- 认为文章是为科技创业公司写的,而不是个人项目。
- 认为应该停止建立亏损的科技创业公司,转而创建能够立即盈利的公司。
Sunny days are warm: why LinkedIn rewards mediocrity #
https://www.elliotcsmith.com/linkedin-toxic-mediocrity/
Elliot Smith 在 2025 年 8 月 17 日发表的文章中表达了对 LinkedIn 的不满。他认为 LinkedIn 的初衷很好,但现在变成了一个充满平庸内容的平台,人们为了建立个人品牌而发布空洞无物的帖子。他批评这些帖子过度包装、内容空洞,表面上看似有深度,实则毫无意义。Smith 指出,这些所谓的“有毒平庸”内容被鼓励,就像搜索引擎优化(SEO)内容一样,虽然可能增加了浏览量,但实际价值有限。
Smith 强调,LinkedIn 上仍有一些有价值的内容,但它们被大量无意义的帖子淹没。他特别指出,LinkedIn 的算法将用户互动视为提高网站停留时间的手段,这导致用户为了获得更多的专业网络积分而参与这种内容的互动。他认为,这种为了点赞而发布的内容对职业发展并无帮助,反而可能产生负面影响。
文章最后,Smith 建议人们应该记住 LinkedIn 是一个微软旗下的网站,其目的是通过用户在网站上的时间来赚钱。他鼓励人们专注于做有意义的工作,并通过深度而非频率来吸引关注。如果在线写作对你很重要,他建议开始写博客,虽然可能获得的浏览量和互动较少,但这样可以避免为了点赞而发布无意义的内容。Smith 还建议,作为内容消费者,应该奖励那些不参与这种游戏的真实内容创作者,或者选择关闭电脑,走出去享受现实生活。
HN 热度 429 points | 评论 362 comments | 作者:smitec | 16 hours ago #
https://news.ycombinator.com/item?id=44930186
- LinkedIn 对于职业发展和收入有显著影响,但同时也带来了焦虑和压力
- 营销不仅仅是“吹牛”,它包括定价策略、分销、理解销售渠道和建立客户关系等重要方面
- 营销是说服人们购买他们不需要的东西,这是对社会资源的浪费
- 如果产品真的好,口碑会自然传播,不需要广告
- 广告和营销在帮助产品达到临界用户量之前是必要的
- 加强对欺诈行为的打击可以减少营销带来的社会问题
- 好的营销可以吸引人们的注意力并转化为销售,而不仅仅是欺骗
- 人们应该对自己的购买行为负责,而不是完全归咎于广告的影响
Toothpaste made with keratin may protect and repair damaged teeth: study #
https://www.kcl.ac.uk/news/toothpaste-made-from-hair-provides-natural-root-to-repair-teeth
伦敦国王学院的科学家们发现,头发中发现的角蛋白可以修复牙釉质并阻止早期蛀牙的发展。这项新研究发表在《先进医疗材料》杂志上,研究团队发现角蛋白与唾液中的矿物质接触时,会产生一种模仿天然牙釉质结构和功能的保护层。与骨头和头发不同,牙釉质一旦丢失就无法再生。酸性食物和饮料、不良的口腔卫生习惯以及衰老都会导致牙釉质的侵蚀和蛀牙,进而引发牙齿敏感、疼痛,最终导致牙齿脱落。
虽然目前使用含氟牙膏来减缓这一过程,但基于角蛋白的治疗方法被发现可以完全停止蛀牙的发展。角蛋白形成了一个密集的矿层,保护牙齿并封闭导致敏感性的暴露神经通道,提供结构性和症状性缓解。这种治疗可以通过日常使用的牙膏或作为专业应用的凝胶(类似于指甲油)来实现更有针对性的修复。研究团队已经在探索临床应用的途径,并相信基于角蛋白的牙釉质再生技术在未来两到三年内可以向公众提供。
HN 热度 422 points | 评论 195 comments | 作者:sohkamyung | 2 days ago #
https://news.ycombinator.com/item?id=44922571
- 该牙膏可能只是形成保护层,并非真正修复牙齿
- Novamin 能够促进牙齿的再矿化,但并非重新生长牙釉质
- 任何含氟牙膏也具有再矿化效果,Novamin 可能更有效
- 有些人认为 Prevident Rinse 漱口水对再矿化更有效
- Novamin 可能阻止氟和唾液接触牙釉质,影响修复效果
- 早上使用 Novamin 牙膏可能更好,因为它能提供保护层
- 刷牙应在饭后进行,而不是饭前
- 刷牙前应等待一段时间,因为食物残渣会使牙齿变软
- 刷牙习惯因人而异,很多人只是遵循习惯,缺乏科学依据
- Novamin 牙膏可能在军事应用中失败,最终被牙膏制造商购买
- 使用 Novamin 牙膏的人对其效果有不同感受,有些人觉得有效,有些人则没有明显感觉
- 有些人在使用 Novamin 牙膏时感觉到热度,认为这表明化学反应在起作用
- 有些人认为这种牙膏只是保护牙齿,并不能重建已丢失的牙釉质
- Sensodyne 牙膏有两种系列,一种含有止痛成分,另一种声称能修复牙齿小裂缝
- 不同国家销售的 Sensodyne 牙膏成分可能不同,例如英国版含有 Novamin,而美国版则含有氟化锡
LL3M: Large Language 3D Modelers #
https://threedle.github.io/ll3m/
LL3M(Large Language 3D Modelers)是由芝加哥大学开发的一个项目,它利用一系列大型语言模型来编写 Python 代码,以便在 Blender 中创建和编辑 3D 资产。该系统能够根据用户的文本指令从头开始创建具有表现力的形状,并在代码中实现复杂、精确的几何操作。
与传统的代码写作大型语言模型(LLMs)主要用于特定子任务或受限的程序和原语不同,LL3M 能够创建不受限制的资产,包括几何形状、布局和外观。使用高级代码作为 3D 表示,LL3M 的流程自然是一个迭代细化和共同创造的循环:代理执行自动代码和视觉自我批评,用户可以提供持续的高级反馈。清晰的代码和生成的 Blender 节点和结构中透明的参数进一步编辑的途径。
LL3M 的方法包括三个阶段:初始创建、自动细化和用户引导细化。这些是创造过程中的概念阶段,每个阶段涉及不同的代理角色。第一阶段创建初始形状,第二阶段自动纠正和改进不合理的配置,如断开的靠背和过于简单的几何形状。之后,系统可以接受用户的额外编辑指令,允许交互式和迭代的 3D 资产生成。
LL3M 能够生成多样化的形状。结果展示了详细的部分(例如风车建筑特征)在复杂的排列(例如钢琴键、鼓组)中,甚至丰富的外观(例如滑板)和材料属性(例如光泽的灯座)。该方法的一个显著特点是每个网格都是通过可解释、可编辑的 Blender 代码生成的。
从 LL3M 产生的不同初始网格开始,使用相同的细化提示将风格更改为蒸汽朋克,LL3M 成功地解释并应用相同的风格概念到每个帽子上。每个风格化的网格产生不同的变化,包括几何修改和外观变化。
给定由系统产生的初始网格,LL3M 能够编辑网格上特定部分的材料(例如刀片),通过创建全面的程序材料通过着色节点。
LL3M 支持对同一 3D 资产进行多次连续编辑。修改忠实于用户的指令,仅编辑指定的元素,同时保留角色的身份。
LL3M 生成的 Blender 代码易于理解和遵循。代码有详细的注释、清晰的变量名和结构化的逻辑。这种可解释的代码使得潜在地更改变量(例如键宽)或甚至算法逻辑(例如键盘模式)变得容易。
通过生成 Blender 代码来生成形状,LL3M 允许用户通过代码和生成的 Blender 节点和结构中透明的可解释参数进行直观编辑。例如,在生成材料时,系统会创建一整套着色节点。用户可以轻松调整视觉属性,如直接在 Blender 中调整颜色或条纹图案,以实现所需的输出。
尽管视觉差异,形状通常共享高级代码模式(例如循环、修改器和节点设置),这些模式在类别间重复出现。这种共享结构允许模型转移知识,从广泛的提示中生成多样化、可编辑和模块化的代码。
LL3M 能够生成多个对象并将它们以适当的空间关系排列在单个场景中。系统使用复杂的操作,如实例化和父子关系,构建场景层次结构。编码代理还可以使用父子关系为更复杂的单个对象(例如灯)生成形状,当明确提示时。这样做会生成具有人类可读的层次结构和场景内部分之间的父子关系的图形。这使得 Blender 中的场景图行为得以实现,其中应用于父对象的变换会传播到其子对象。图中的每个部分也被分配了一个有意义的语义名称。
HN 热度 361 points | 评论 157 comments | 作者:simonpure | 14 hours ago #
https://news.ycombinator.com/item?id=44930808
- 使用 meshy.ai 结合 gpt5 或 midjourney 等图像模型,可以将图片转换成 3D 模型,再在 Blender 中进行编辑,提高工作效率。
- 将原始图片转换成类似哑光渲染网格的样式,去除多余细节和透明度效果,有助于提升 meshy.ai 的 3D 转换效果。
- 有人对 GPT-5 和 ChatGPT 在图像处理方面的应用表示困惑,认为 GPT-5 是文本模型,而 ChatGPT 仍使用 4o 处理图像。
- 有人认为使用这类工具学习 Python 和 Blender Python API 基础可能有帮助,但对于创建复杂模型来说,这些工具生成的模型过于简单。
- 有人反驳说,对于不想成为 3D 模型艺术家但想使用 3D 模型的人来说,这项技术非常有用。
- 有人认为这些例子中的模型非常简单,通过进一步学习可以在一天内达到类似的效果。
- 有人分享了自己学习 Sketchup 的经历,强调一旦掌握了基本操作,建模就变得容易。
- 有人指出,对于 2D 艺术来说,使用笔工具画出线条容易,但决定画什么线条则需要高超的技能。
- 有人强调,对于 3D 建模来说,理解 Blender 用户界面比拿起铅笔更难,但通过教程视频应该能够掌握。
- 有人提出,学习使用工具并不难,难的是如何进行开放式创作,决定需要哪些基本元素、尺寸和位置。
- 有人认为,只有极少数人能够掌握 3D 雕塑和复杂的 3D 工具链,而大多数人没有时间、耐心或精力去接触这些系统,他们希望快速轻松地拥有定制的 3D 游戏和内容。
- 有人预测,这些模型很快会生成整个 3D 世界,最终超越人类建模师的能力,以极快的速度提供惊人的结果。
Traps to Developers #
https://qouteall.fun/qouteall-blog/2025/Traps%20to%20Developers
以下是对开发人员在编程中可能遇到的一些陷阱的详细总结:
HTML 和 CSS #
-
**Flexbox 和 Grid 的最小宽度 **:
- 默认情况下,flexbox 和 grid 内的
min-width
是auto
。这使得最小宽度由内容决定,优先级高于许多其他 CSS 属性,包括flex-shrink
、overflow: hidden
、width: 0
和max-width: 100%
。建议设置min-width: 0
。
- 默认情况下,flexbox 和 grid 内的
-
** 水平与垂直的区别 **:
width: auto
通常试图填满父容器的可用空间,而height: auto
通常只是扩展以适应内容。- 对于内联元素、内联块元素和浮动元素,
width: auto
不会试图扩展。 margin: 0 auto
水平居中,而margin: auto 0
在垂直方向通常会变为margin: 0 0
,这不会居中。在设置为flex-direction: column
的 flexbox 中,margin: auto 0
可以实现垂直居中。- Margin 合并只发生在垂直方向,而不会在水平方向发生。
- 布局方向改变时(例如
writing-mode: vertical-rl
),上述情况会翻转。
-
** 块格式化上下文(BFC)**:
- 使用
display: flow-root
可以创建 BFC。 - BFC 可避免 margin 合并,垂直相接的兄弟元素可能会重叠其 margin。子元素的 margin 可能 “泄漏” 到父元素外部,但 BFC 可以避免这种情况。
- 如果父元素只包含浮动子元素,其高度会坍塌为 0,BFC 可用于修复此问题。
- 使用
-
** 堆叠上下文 **:
- 特定属性(如
transform
、filter
、opacity
等)会创建新的堆叠上下文。 position: fixed
或position: sticky
会创建堆叠上下文。- 指定
z-index
和position
为absolute
或relative
,也会创建堆叠上下文。 - 在不同的堆叠上下文中,
z-index
无法跨越,且position: absolute
或fixed
是基于最近的定位祖先来计算。
- 特定属性(如
-
** 移动浏览器的高度问题 **:
- 在移动浏览器中,滚动页面时顶部地址栏和底部导航栏可能会消失。
100vh
对应的是在顶部和底部栏消失时的高度,通常比顶部和底部栏显示时的高度大。现代解决方案是使用100dvh
。
- 在移动浏览器中,滚动页面时顶部地址栏和底部导航栏可能会消失。
-
** 其他 CSS 陷阱 **:
position: absolute
不是基于其父元素,而是基于最近的定位祖先。- 如果父元素的宽度 / 高度没有预设,则百分比宽度 / 高度(如
width: 50%
、height: 100%
)不会有效。 display: inline
会略宽度、高度和上下 margin。- HTML 中的空白会折叠,多余的空白会合并为一个。
text-align
只对文本和内联元素有效,对块元素无效。- 默认情况下,宽度和高度不包括填充和边框。使用
box-sizing: border-box
可以使宽度 / 高度包括边框和填充。 - 推荐为
<img>
指定宽度和高度属性,以避免由于图像加载延迟引起的布局移动。
Unicode 和文本编码 #
-
** 字符和字形的概念 **:
- 代码点(rune)与字形集(grapheme cluster)的区别。
- 可见的 ASCII 字符通常是一种代码点,也是一种字形集;而表情符号可能由多个代码点组成。
-
** 不同语言中的字符串行为 **:
- Rust 使用 UTF-8 编码,字符串长度以字节为单位,不允许直接索引。
- Go 的字符串类似字节数组,但最常用的编码是 UTF-8。
- Java、C# 和 JavaScript 的字符串概念上使用 UTF-16 编码,索引基于 2 字节单元。
- Python 中,
len (s)
返回代码点数量,索引返回一个包含一个代码点的字符串。
-
** 字符处理注意事项 **:
- 一些文本文件可能在开头有字节顺序标记(BOM),如 UTF-8 编码的文件。
- 不同的换行符(如 Windows 的 CRLF 和 Linux/Mac 的 LF)。
- 汉字统一化的问题。
浮点数 #
-
**NaN 和无穷大 **:
- 浮点 NaN(Not a Number)与任何数字(包括自身)不相等。
- 有正无穷和负无穷,它们不是 NaN。
- 负零 -0.0 在某些计算中与正零不同。
-
**JSON 对浮点数的支持 **:
- JSON 标准不允许 NaN 或无穷值。
- JS 的
JSON.stringify
会将 NaN 和无穷值转换为null
。
-
** 浮点数比较 **:
- 直接比较浮点数的相等性可能会失败,推荐使用
abs (a - b) < 0.00001
的方式来比较。 - JS 中的数字使用浮点表示,最大 “安全” 整数为
2^53-1
。
- 直接比较浮点数的相等性可能会失败,推荐使用
-
** 其他浮点数计算的注意事项 **:
- 除法运算比乘法慢,优化时可以先计算倒数再进行乘法。
- 浮点计算的精度可能因硬件不同而不同。
时间 #
-
** 闰秒与时间戳 **:
- Unix 时间戳在转换为 UTC 时间时忽略闰秒。
- 推荐在数据库中存储时间戳并在 UI 中转换为人类可读的时间。
-
** 时区与夏令时 **:
- 人类可读时间依赖时区,而 UTC 和 Unix 时间戳是全球统一的。
- 在分布式系统中,不同节点使用不同的时区可能会导致问题。
-
** 硬件时钟与系统时钟 **:
- 硬件时钟不关心时区,Linux 默认将其视为 UTC,Windows 默认将其视为本地时间。
Java #
-
** 比较对象 **:
- 使用
==
比较对象引用,应使用.equals
比较内容。 - 忘记重写
equals
和hashCode
会导致使用对象身份比较。
- 使用
-
** 返回类型问题 **:
- 方法可能返回可变的
ArrayList
或不可变的Collections.emptyList ()
,尝试修改后者会抛出异常。
- 方法可能返回可变的
-
** 线程与异常处理 **:
- 线程池默认不记录任务的异常,需从返回的 Future 中获取异常。
Go #
-
** 内存管理 **:
append ()
在容量允许的情况下重用内存,向子切片追加可能覆盖父切片的内容。
-
** 延迟执行 **:
defer
在函数返回时执行,而不是在词法作用域退出时执行。
-
** 接口与 nil 的奇异行为 **:
- 接口指针是包含类型信息和数据指针的胖指针,数据指针为
nil
时但类型信息不为nil
,则不等于nil
。
- 接口指针是包含类型信息和数据指针的胖指针,数据指针为
C/C++ #
-
** 指针与容器 **:
- 存储
std::vector
中元素的指针,如果vector
扩展,可能导致指针失效。 std::string
从字面字符串创建可能是临时的,调用c_str ()
是错误的。
- 存储
-
** 迭代器失效 **:
- 修改容器时遍历它可能导致迭代器失效。
-
** 数字表示法 **:
- 以 0 开头的字面数字会被视为八进制。
以上是开发过程中可能会遇到的一些常见陷阱和注意事项,了解这些可以帮助开发者避免常见错误,提高代码质量。
HN 热度 246 points | 评论 103 comments | 作者:qouteall | 2 days ago #
https://news.ycombinator.com/item?id=44922020
- 一些路由器和防火墙会在不通知应用程序的情况下静默终止空闲 TCP 连接,可以通过配置系统 TCP keepalive 或使用 HTTP Connection: keep-alive 头来解决。
- TCP Keep-Alive 可能与移动设备不兼容,因为移动操作系统可能禁用了低于应用级别的 Keep-Alive。
- 在 Kotlin 中,返回 Optional
类型时传入 null 已经是编译错误,不需要额外的注解。 - 有人质疑在有 null 的语言中使用 Optional
的智慧,认为如果 Python 函数返回 Optional 类型而不是 T | None 会很奇怪。 - Python 实际上在标准库中定义了 Optional[T]作为 T | None。
- 在 Scala 中 Optional
工作得很好,尽管 Scala 仍然容忍 null,因为它在 JVM 上并且需要与 Java 互操作。 - Java 因为对向后兼容性的热爱而饱受 optional 的困扰,不太可能从标准库中移除 null。
- 有人提到 Java 9 引入模块时的情况,以及 Java 21 将所有 javax.*重命名为 jakarta.*的情况,指出 Java 对向后兼容性的重视。
- 有人提到 Optional<Optional
> 与只有 null/None 的情况不同,通常不会直接写出这种类型,但在组合泛型代码时可能会意外实例化这种类型。 - 在某些情况下,需要区分“不在缓存中”和“缓存条目中 API 返回 null”的情况,因此需要 Optional.of(null)和 null 之间的区别。
- Java 的 Map.computeIfAbsent 函数返回一个可空值,不需要两层 if absence 就能工作。
- 通常来说,你要么有数据要么没有,这种细微的差别是可以忽略的。
- 人们经常使用 optional 或 nullable 类型作为 Either 类型的便捷近似。
- 在 JSON/REST API 绑定中,需要区分空对象、包含 null 的对象和包含值的对象,因此可能会使用嵌套的 Optional。
- 在从另一个系统或数据库获取内部 Optional
,而外部 Optional<Optional > 是该值的本地缓存的情况下,使用嵌套 Optional 是很自然的。
Hyundai wants loniq 5 customers to pay for cybersecurity patch in baffling move #
近年来,随着技术在汽车市场的广泛应用,消费者体验也在不断升级。然而,现代汽车面临的网络安全问题也日益凸显。最近,现代汽车公司(Hyundai)在英国市场推出了一项令人费解的服务:向 Ioniq 5 电动汽车的车主收取费用,以提供一项网络安全补丁。
据报道,一些电动汽车的锁定机制被类似 Game Boy 的手持设备破解,这些设备能够破解现代 Ioniq 5、起亚 EV6 和 Genesis GV60 使用的无线协议。现代汽车现在通过软件和硬件升级为 Ioniq 5 客户提供安全补丁,但这项服务在英国网站上以 49 英镑(约合 65 美元)的价格“可选”提供,而在美国似乎没有类似的服务。
现代汽车的这一决定令人困惑,因为它似乎是在要求客户为公司自身的安全漏洞买单。这种做法也令人沮丧,因为 Ioniq 5 是一款相对较新的电动汽车,按照现代全球标准制造。现代汽车辩称,Ioniq 5 在开发和认证过程中符合所有监管标准,包括网络安全要求。但由于这种威胁被归类为最近才出现的“演变”问题,现代认为向客户收取“补贴”升级费用是合理的。
Ioniq 5 车主可以访问相关门户网站,通过输入车辆识别号(VIN)来查询自己的车辆是否符合付费升级的条件。如果车辆受到影响,车主需要决定是否值得支付这笔费用。需要注意的是,据报道,这种汽车盗窃设备的成本约为 2 万美元,因此小偷拥有这种设备的可能性并不高。
HN 热度 243 points | 评论 198 comments | 作者:duxup | 23 hours ago #
https://news.ycombinator.com/item?id=44928497
- 硬件更换需要补偿劳动成本,但这并不能证明向顾客收费是合理的。
- 如果顾客购买了有缺陷的硬件,卖家有责任用工作正常的硬件替换。
- 硬件没有故障,因此不应该替换。
- 软件和硬件之间的界限在 ASICs 和 FPGAs 中难以区分,但它们仍应对核心功能(如锁)负责。
- 任何锁都可能被打开,区别在于所需的努力程度。
- 有些锁不能在没有正确钥匙的情况下打开,例如 Abloy 和 BiLock。
- 制造商应该开放规格,以便社区可以更新软件。
- 如果设备不能保证安全,且不愿更新软件,则应升级硬件。
- 保修期并不长,对于 6 年以上的旧 iPhone,不应期望免费更换。
- 如果设备仍在服务期内且因安全问题需要公开披露,制造商应尽力修复与客户的关系。
- 汽车安全是一个范围问题,如果不喜欢,应该提高警察的效能。
- 交换软件、渗透测试、测试、QA、CI/CD 管道等都是必要的步骤。
Show HN: Edka – Kubernetes clusters on your own Hetzner account #
Edka 是一个分布式基础设施配置平台,能够在不到 2 分钟内提供完整的基础设施,并帮助用户减少高达 70% 的云成本,同时保持对资源的完全控制。该平台允许用户在自有的 Hetzner 账户上部署生产级别的 Kubernetes 集群,直接享受 Hetzner 的云定价,通常比 AWS 或 GCP 低至 70%,并且只需支付一个固定的每集群费用,即可覆盖自动化、集成、升级和备份服务。Edka 还允许用户随时脱离平台,工作负载继续运行,所有资源仍然属于用户。
Edka 平台提供了 PaaS 的简便性,同时不牺牲灵活性。用户可以在 Hetzner 上使用 GitOps 工作流、一键式插件和内置监控来配置、扩展和管理 Kubernetes 集群。平台支持即时配置和扩展,可以轻松地跨区域自动扩展 k3s Kubernetes 集群。用户还可以将 GitHub 或 GitLab 仓库连接起来,实现自动化 CI/CD、每个拉取请求的预览环境和无缝部署。此外,Edka 提供一键安装数据库、入口控制器、可观测性工具等插件,以定制基础设施。内置的仪表板可以让用户实时了解性能、资源使用和成本指标。
Edka 基于 CNCF 的开放标准,支持可移植性,无供应商锁定,并可节省高达 70% 的基础设施成本。如果用户在 AWS 或 GCP 上的支出超过 3000 美元,Edka 可以以 1000 美元的成本运行。平台还提供迁移、优化或混合解决方案。
Edka 的客户案例包括法国初创公司 Aicole,该公司为学生、教育工作者和机构提供服务,通过迁移到 Edka,实现了 64% 的运营成本降低,同时保持性能和可靠性。另一个客户 TROI Ticketing Solution 迁移到 Edka,以实现更可扩展和成本效益更高的环境,主要目标是显著降低运营成本,并使开发者能够无缝部署应用程序,无需管理基础设施的负担。迁移后,TROI Ticketing Solution 实现了 72% 的成本节省。
Edka 提供多种应用和插件供用户在集群上安装,包括数据库、入口、监控、日志等。用户可以探索所有插件,如 Cert Manager、CloudNative PG、Keel、External Secrets、Metrics Server 和 Nginx Ingress 等。
HN 热度 243 points | 评论 77 comments | 作者:camil | 2 days ago #
https://news.ycombinator.com/item?id=44915164
- Edka 使得在 Hetzner 上部署 Kubernetes 集群变得简单快捷。
- Edka 提供了一键部署常用工具和应用的功能,简化了 Kubernetes 集群的配置和管理。
- 有人提到 Hetzner 的服务有时会出现问题,导致部署卡住。
- 与 kops 等成熟工具相比,Edka 提供了简化的 Kubernetes 部署和常用应用配置。
- 有人提到了 Talos 作为另一个支持 Hetzner 的类似工具。
- 有人对 Edka 公司的合法性和透明度表示担忧,因为没有提供公司地址和联系方式。
- 作者回应了关于公司合法性和透明度的担忧,并提供了 VAT 号码和注册信息。
- 有人建议在网站上添加公司法人的名字和面孔以增加信任度。
- 作者提供了 LinkedIn 个人资料链接以增加个人可信度。
The Enterprise Experience #
https://churchofturing.github.io/the-enterprise-experience.html
这篇文章是一位在大型企业 $ENTERPRISE 工作一年的软件工程师的心得体会。作者之前在初创企业和中小企业工作了近十年,去年决定加入大型企业以寻求乐趣和经济利益。文章中,作者分享了他在大型企业工作的一些观察和感受,包括:
- 大型企业中的复杂性:作者描述了在大型企业中,一些小企业中不成问题的事情变得难以解决。例如,他遇到了一个他从未见过的工具生成的错误,但花了很长时间才找到负责该工具的人。
- 资源浪费:作者对比了在小企业和大型企业中的资源使用情况,指出在大型企业中存在大量的资源浪费,如项目失败、过度依赖昂贵的云服务等。
- 同事能力不一致:由于大型企业中很少因为绩效问题而解雇员工,导致员工能力参差不齐。作者提到了一些荒谬的情况,如技术部门的负责人不会使用电脑,或重要分析师无法说英语。
- 工作紧急性的判断:在大型企业中,工作紧急性的判断变得复杂。作者分享了一些例子,说明了如何区分真正的紧急情况和人为制造的紧急情况。
- 安全表演:作者讨论了软件安全的重要性和复杂性,但在大型企业中,安全工作往往被简化为数字和图表,以满足管理层的需求。他讽刺地描述了一些安全供应商的行为,以及企业如何通过表面工作来展示安全成果。
HN 热度 221 points | 评论 63 comments | 作者:Improvement | 8 hours ago #
https://news.ycombinator.com/item?id=44932980
- 企业软件并不一定是垃圾,关键在于如何在满足复杂需求的同时制作出优秀的企业软件。
- 企业环境中的员工往往不关心软件的易用性,因为他们的工作评价并不基于此。
- 企业不愿意为优秀的软件支付高昂的费用,因为他们认为成本过高。
- 在大公司工作意味着有机会领导更大的项目,这是小公司难以提供的。
- 职业发展不仅仅是赚更多的钱,而是伴随着更多责任和改变的能力。
- 即使软件质量差或对用户造成伤害,有些人仍然能从中获得满足感。
- 并不是所有的大公司都不好,好坏是具体情况而定的。
- 在大公司中,由于员工众多,对特定职位的需求和机会也更多。
- 职业发展意味着能够承担更大的项目和领导更大的团队。
- 并不是所有的初创公司和小公司都是好的,好坏取决于具体情况。
- 公司之所以能变大,往往是因为它们更加专注于金钱,这可能导致它们做出不道德的行为。
Dev Compass – Programming Philosophy Quiz #
https://treeform.github.io/devcompas/
Dev Compass 是一个帮助开发者了解自己编程哲学的工具。它通过两个关键维度来映射用户的偏好:抽象风格与具体风格,以及易于人类理解与易于计算机处理。用户需要回答 20 个关于编程偏好的问题,以确定他们在开发者指南针上的位置。
首先,用户需要选择他们偏好的编程风格,包括函数式风格、团队最舒适的风格、命令式风格和面向对象风格。完成这 20 个问题后,用户将获得自己的编程哲学结果,包括在抽象与具体、人类友好与计算机友好之间的定位。用户还可以选择再次进行测试,以探索不同的编程风格和哲学。
HN 热度 204 points | 评论 99 comments | 作者:todsacerdoti | 1 day ago #
https://news.ycombinator.com/item?id=44927244
- 许多问题的答案取决于具体情境,没有上下文就无法给出具体意见
- 很多问题的答案都是“以上都有,但在不同情境下选择不同的答案”
- 认为这种没有上下文的问题是设计上的缺陷,因为实际编程中总是有上下文的
- 通过迫使人们在没有上下文的情况下做出决定,可以测试他们是否倾向于依赖上下文
- 即使在没有明确偏好的情况下,依赖上下文的工程师会快速回答,最终在所有维度上都接近中心
- 这种测试可能有助于区分那些声称自己是高级开发者但实际上给出极端答案的人
- 有经验的工程师会有“这取决于”的直觉,如果没有额外的上下文,问题就没有意义,任何答案都是无用的
- 这种测试最多是一个简单的 5 分钟筛选,而且很容易被伪装成“这取决于”的回答
- 测试应该更多地关注“你喜欢使用哪些问题解决工具?”
- 认为这种测试对于识别初级开发者或不太优秀的开发者是有用的
- 测试应该考虑人们在偏好的工作和工具中的表现,而不是在任何情况下使用正确的工具
- 认为这种测试有“互斥答案”的问题,应该使用单选和多选的组合
- 认为这种测试是一个有趣的调查,更多地关注“你喜欢使用哪些问题解决工具?”