网页上的 iOS 体验 | 优化 Ruby JSON 序列化 | 伪3D道路引擎技术 | GO 的 Ergo Chat 服务器

开发 前端
在深度学习领域,优化器的选择一直是研究的重点。近期,一项名为 SGD-SaI 的新方法引起了广泛关注。该方法通过在初始化阶段对不同参数组进行学习率缩放,有效解决了传统优化器的一些问题。

尝试在网页上重现 iOS 体验

https://homescreen.app/

图片图片

尝试在网页上重现 iOS 体验,这是一个有趣的挑战。虽然许多人认为这在技术上难以实现,但这个项目证明了现代 Web 技术的强大能力。通过利用各种现代 Web API 和功能,开发者成功地模拟了 iOS 的许多界面元素和交互方式。

项目亮点

  • 高度还原的 UI:该项目在视觉上几乎完美地模仿了 iOS 的界面,包括图标、动画和过渡效果。
  • 现代 Web 技术的应用:通过使用 HTML5、CSS3 和 JavaScript,项目展示了 Web 平台的潜力,打破了人们对 Web 应用能力的固有认知。
  • 用户体验:尽管大部分时间都花在了细节上,但最终的结果令人印象深刻,尤其是在 Safari 浏览器上运行时。

用户反馈

  • 网友 yesimahuman:这个项目真的很好,特别是考虑到我曾经构建过一个相当流行的移动 Web 框架(Ionic),它也复制了很多 iOS UI。不过,我发现滑动手势没有工作。这说明,虽然技术上可行,但实现细节仍然非常重要。
  • 网友 deanc:我曾经为诺基亚做过类似的事情,当他们的手机转向 Windows Phone 时。确实,90% 的时间都花在了模仿动画和过渡效果上。
  • 网友 c-fe:在 Safari 上看起来非常流畅。如果我无法分辨这是不是模拟的,那对你来说绝对是一种赞美!
  • 网友 kookamamie:图标看起来有点模糊。

小编锐评

这个项目不仅展示了现代 Web 技术的强大能力,还提醒我们在追求高度还原的 UI 时,细节的重要性。虽然滑动手势等一些小问题还需要进一步完善,但整体效果已经非常接近 iOS 体验。对于那些对 Web 开发感兴趣的开发者来说,这是一个很好的学习案例,也为我们未来在 Web 上实现更多复杂应用提供了信心。

如果你对这个项目感兴趣,不妨亲自试试看,相信你会被它的精细程度所震撼!

No More Adam: 学习率初始化缩放才是王道

https://arxiv.org/abs/2412.11768

图片图片

在深度学习领域,优化器的选择一直是研究的重点。近期,一项名为 SGD-SaI 的新方法引起了广泛关注。该方法通过在初始化阶段对不同参数组进行学习率缩放,有效解决了传统优化器的一些问题。

背景与动机

传统的自适应梯度方法(如 Adam)虽然在许多任务中表现出色,但其内存占用较高且计算复杂。SGD-SaI 旨在简化这一过程,通过在初始化阶段根据梯度信号噪声比(g-SNR)调整学习率,从而实现高效优化。

主要贡献

  • 简化优化过程:SGD-SaI 不依赖于自适应二阶动量,减少了内存使用,提高了计算效率。
  • 性能优越:在多种任务中,SGD-SaI 与 AdamW 相比,不仅在性能上匹配甚至超过,还在内存使用上大幅节省。
  • 鲁棒性强:SGD-SaI 在超参数变化下表现出较强的鲁棒性,适用于不同的应用场景。

实验结果

  • 图像分类:在 ImageNet-1K 数据集上,使用 Vision Transformers (ViT) 进行分类,SGD-SaI 表现优异。
  • 自然语言处理:在 GPT-2 预训练任务中,SGD-SaI 也取得了显著成果,尤其是在大规模语言模型(LLMs)的微调任务中。
  • 内存节省:对于 GPT-2(1.5B 参数)和 Llama2-7B 模型,SGD-SaI 分别减少了 5.93 GB 和 25.15 GB 的内存使用。

社区反馈

  • 网友 rob_c:这种方法看起来很有潜力,特别是内存节省方面。不过,需要注意的是在训练初期,SGD-SaI 的性能可能不如 AdamW,需要更多的时间才能达到最佳效果。
  • 网友 eden-u4:尝试了源代码在一个简单的模型上,Adam 在 2 个 epoch 内完成了训练,而 SGD-SaI 在 20 个 epoch 内没有明显进展。可能是实现有问题,需要进一步调试。
  • 网友 amunozo:标题有点夸张了,但确实提出了一个有趣的观点。希望未来能看到更多实验结果来验证这种方法的有效性。

小编锐评

SGD-SaI 的提出无疑为优化器领域带来了新的思路。虽然目前仍有一些争议,但其在内存节省和性能提升方面的表现值得进一步关注。期待更多的研究和实践能够验证其实际效果,或许这真的会成为未来优化器的新标准。

优化 Ruby 的 JSON 序列化性能

https://byroot.github.io/ruby/json/2024/12/15/optimizing-ruby-json-part-1.html

json gem 的维护者在修复了一些旧 bug 之后,将大部分精力集中在了其性能优化上。经过一系列的优化,现在的 json gem 在大多数基准测试中已经成为最快的 JSON 解析器和生成器。

为什么需要优化?

虽然 ruby/json 之前确实比一些流行的替代品如 oj 慢,但差距并不大。例如,在解析一个由 100 条推文组成的 JSON 文档(约 467KB)时,ruby/json 2.7.2 需要 1.9ms,而 oj 只需 1.6ms。在生成 JSON 文档时,ruby/json 2.7.2 需要 0.8ms,而 oj 只需 0.4ms。虽然 oj 快了两倍,但在大多数实际用例中,这种差距并不会造成显著影响。

然而,oj 的广泛使用让作者感到困扰。它被包括 Shopify 在内的许多项目所采用,给作者带来了无数的头痛问题。其中一个主要问题是 oj 的猴子补丁功能(如 Oj.mimic_JSON 和 Oj.optimize_rails),这些功能可能会引入安全漏洞和其他微妙的问题。

优化策略

  • 避免冗余检查:通过利用 Ruby 字符串的编码范围属性,避免重复扫描字符串以验证其编码。
  • 先检查更便宜且更可能的条件:优化缓冲区扩展函数,减少不必要的条件检查。
  • 减少初始化成本:减少生成 JSON 时的初始化工作,特别是在微基准测试中表现出色。
  • 避免指针追逐:通过直接检查编码索引而不是调用 rb_enc_get,减少内存访问开销。
  • 使用查找表:通过预计算静态数组,减少每个字符的多次比较操作,显著提高性能。

评论精选

  • 网友 izietto:作为一名 Rails 开发者,我非常赞同作者的观点。不同命名约定(Ruby 使用 snake_case,JavaScript/JSON 使用 camelCase)的转换确实很烦人,希望未来能有更好的解决方案。
  • 网友 hahahacorn:读完这篇文章,感觉 oj 的优势不再那么明显了。未来还有必要继续使用 oj 吗?
  • 网友 mfkp:很棒的文章,让我想开始优化我的 Ruby 代码了。感谢作者的分享!
  • 网友 thiago_fm:作者的工作令人钦佩,不仅贡献巨大,而且效率惊人。希望更多 Ruby C 语言开发者能多写些文章,帮助社区进步。
  • 网友 bornelsewhere:json gem 是否使用了内在函数?如果可以的话,会对性能有进一步提升吗?

伪3D道路引擎技术详解

http://www.extentofthejam.com/pseudo/

图片图片

伪3D道路引擎技术是一种经典的计算机图形学技巧,广泛应用于早期赛车游戏。这篇文章详细介绍了如何实现这种效果,从最基本的原理到复杂的曲线和山丘效果。

基本原理

伪3D道路引擎的核心思想是利用透视效果来模拟3D道路。具体来说,通过改变每行像素的宽度和位置,可以创建出道路逐渐远去的视觉效果。这种方法计算简单,适合早期硬件性能较低的游戏机。

曲线和转向

图片图片

文章详细讲解了如何实现道路的曲线效果。通过逐行改变道路中心线的位置,可以模拟车辆转弯的效果。这种技术不仅可以用于简单的左转和右转,还可以实现复杂的S型弯道。

山丘效果

文章还介绍了一种灵活的方法来实现山丘效果。通过调整每行像素的高度,可以模拟道路的起伏。这种方法不仅计算量小,还能准确跟踪位于地平线以下的对象。

实际应用

文章提到了几款经典游戏,如《OutRun》和《Pole Position》,这些游戏都使用了伪3D道路引擎技术。通过对这些游戏的分析,我们可以更好地理解这种技术的实际应用。

评论精选

  • 网友 blackfur:这篇文章是一颗宝石。多年前我在制作一个经典的伪3D赛车游戏时偶然发现了它,虽然最终没有完成,但它给我提供了很多灵感。
  • 网友 komadori:作为一个老派3D效果爱好者,我喜欢这篇教程。特别是看到驾驶游戏中的效果与光线投射的垂直切片类似,感觉非常有趣。
  • 网友 Netcob:我小时候不喜欢这些伪3D赛车游戏,感觉它们更像是播放动画,而不是真正的驾驶体验。不过,这篇文章让我重新认识了这些技术的魅力。
  • 网友 elevationapi:记得《Vroom》在 Atari ST 上的表现非常出色,深度感和流畅度在当时是非常惊人的。

Ergo Chat – 用 Go 语言编写的现代 IRC 服务器

https://github.com/ergochat/ergo

Ergo(前身为 Oragono)是一个用 Go 语言编写的现代 IRC 服务器。它的核心设计理念包括易用性、高性能和可扩展性。Ergo 是从 Ergonomadic IRC 守护进程派生而来,旨在提供一个稳定且功能丰富的 IRC 服务器解决方案。

主要特点

  • 低资源需求:Ergo 的资源消耗非常低,适合在各种环境中部署,包括小型服务器和个人计算机。
  • 多客户端支持:允许同一昵称下的多个客户端同时在线,提高了用户体验。
  • WebSocket 支持:内置 WebSocket 支持,方便集成到 Web 应用中,提供网页客户端。
  • 聊天记录支持:支持聊天记录功能,确保用户不会错过任何重要信息。
  • 用户账户系统:通过用户账户系统,用户可以注册昵称和频道,增强社区管理和安全性。

部署指南

  1. 下载最新版本:访问 GitHub 发布页面下载最新版本。
  2. 解压并配置:将下载的文件解压到一个目录,然后运行以下命令:
cp default.yaml ircd.yaml
vim ircd.yaml # 修改配置文件
./ergo mkcerts
./ergo run
  1. 生产环境部署:参考手册中的生产化指南,获取有效的 TLS 证书,并进行其他必要的配置。

用户评价

  • 网友 donio:我已经为朋友和家人使用 Ergo 一年了。由于其易于托管、低资源需求以及我对协议和代码库的理解,选择 Ergo 是非常明智的。v3 聊天记录支持和多客户端功能大大提升了现代聊天体验。
  • **网友 emmanueloga_**:尽管 IRC 协议存在一些问题,但 Ergo 的实现非常出色。IRC 的非结构化消息格式确实带来了不少挑战,但 Ergo 的设计和实现很好地解决了这些问题。
  • 网友 linsomniac:Ergo 是否可以连接到其他 IRC 服务器?我希望将其与现有的 ngircd 链接,以便用户尝试后再决定是否迁移。
  • 网友 th0th:很高兴看到这样的项目,许多人以为只有 Slack 和 Discord 是唯一的选择。最近我在为家庭和公司圈选择合适的聊天工具,考虑过 XMPP 和 Matrix,最终选择了 Matrix。不过,Ergo 的“始终在线”功能让我印象深刻。

小编锐评

Ergo Chat 以其低资源需求、多客户端支持和现代功能,为 IRC 服务器带来了新的活力。对于那些希望拥有一个轻量级、高性能聊天解决方案的用户来说,Ergo 是一个值得尝试的选择。虽然 IRC 协议本身存在一些局限性,但 Ergo 的实现和功能优化使其成为了一个非常有吸引力的选项。如果你正在寻找一个可靠的聊天服务器,不妨试试 Ergo。

Show HN: ImPlot3D – 为 Dear ImGui 打造的 3D 绘图库

https://github.com/brenocq/implot3d

图片图片

ImPlot3D 是一个扩展了 Dear ImGui 的 3D 绘图库,提供了易于使用且高性能的 3D 绘图功能。受 ImPlot 启发,ImPlot3D 为已经熟悉 ImPlot 的开发者带来了熟悉的 API。ImPlot3D 旨在渲染具有自定义标记、线条、表面和网格的 3D 图表,是需要 3D 数据可视化应用的理想选择。

主要特点

  • GPU 加速渲染:确保高性能。
  • 多种图表类型:线图、散点图、表面图、四边形图、三角形图、网格图、文本图。
  • 交互式旋转、平移和缩放:增强用户体验。
  • 多种样式选项:10 种标记类型、可调节标记大小、线宽、轮廓颜色、填充颜色等。
  • 16 种内置色图:支持用户自定义色图。
  • 可选图表标题、轴标签和网格标签。
  • 可配置的图例:快速显示/隐藏图表项目。
  • 默认样式:基于当前的 ImGui 主题,也可完全自定义。
  • 简单的 API:类似于 Dear ImGui 和 ImPlot。

使用方法

  1. 初始化 3D 图表:调用 ImPlot3D::BeginPlot()。
  2. 绘制数据:使用 PlotX 函数(如 PlotLine()、PlotScatter()、PlotSurface())。
  3. 结束 3D 图表:调用 ImPlot3D::EndPlot()。
float x_data[1000] = ...;
float y_data[1000] = ...;
float z_data[1000] = ...;
ImGui::Begin("My Window");
if (ImPlot3D::BeginPlot("My Plot")) {
    ImPlot3D::PlotLine("My Line Plot", x_data, y_data, z_data, 1000);
    ImPlot3D::PlotScatter("My Scatter Plot", x_data, y_data, z_data, 1000);
    // ...
    ImPlot3D::EndPlot();
}
ImGui::End();

示例

在 implot3d_demo.cpp 中提供了全面的示例,展示了 ImPlot3D 的各种功能。将此文件添加到项目中,并在更新循环中调用 ImPlot3D::ShowDemoWindow(),即可查看各种 3D 图表示例。

集成步骤

  1. 确保有一个工作中的 Dear ImGui 环境。
  2. 添加源文件:implot3d.h、implot3d.cpp、implot3d_internal.h、implot3d_items.cpp。
  3. 创建和销毁 ImPlot3D 上下文:与 ImGui 上下文一起创建和销毁。

注意事项

  • 高密度 3D 可视化问题:默认情况下,Dear ImGui 使用 16 位索引,可能会导致复杂表面或网格的断言失败、数据截断或视觉故障。建议启用 32 位索引或确保渲染器支持 ImGuiBackendFlags_RendererHasVtxOffset 标志。

评论精选

  • 网友 flohofwoe:令人惊讶的是,Dear ImGui 的组件扩展思想如此成功,尽管 API 本身没有明显的扩展点,但组件只是普通的函数,可以组合成更高层次的 UI 小部件。
  • 网友 db48x:非常棒。几乎希望我能找到使用它的机会。
  • 网友 forrestthewoods:DearImGui 和 ImPlot 非常好,这是一个非常棒的补充。
  • 网友 laurentlb:很有趣!建议在 README 中添加一些截图。
  • 网友 Fraterkes:有人有使用 ImGui 制作的、具有良好文本和抗锯齿效果的例子吗?看起来真的很酷,但所有用它制作的东西似乎都有“粗糙”的感觉。
  • 网友 Implicated:24GB 显存的 GPU 对于运行机器学习模型非常有用,即使性能不如 NVIDIA,只要能跑起来就很好。这种卡会非常受欢迎。

XOR 纹理:2004 年的经典图形编程技巧

https://lodev.org/cgtutor/xortexture.html

图片图片

2004 年,doener 发布了一篇关于 XOR 纹理的文章,介绍了如何使用简单的位运算生成复杂的视觉效果。文章中的代码片段展示了如何通过 x ^ y 运算生成一个独特的纹理图案。具体实现如下:

int main(int argc, char *argv[]) {
    screen(256, 256, 0, "The XOR Texture");
    ColorRGB color;
    for(int y = 0; y < h; y++)
        for(int x = 0; x < w; x++) {
            Uint8 c = (x ^ y);
            color = HSVtoRGB(ColorHSV(c, 255, 255));
            pset(x, y, color);
        }
    redraw();
    sleep();
    return 0;
}

这段代码通过 XOR 运算生成了一个彩色的纹理图案,每个像素的颜色由 x 和 y 坐标的异或值决定。这种技术不仅简单,而且效果独特,吸引了许多编程爱好者的关注。

网友评论精选

  • **256_**:我曾经用 x86 汇编编写了一个类似的程序,但使用的是 1 位颜色。通过 parity(x ^ y),即如果 x ^ y 的 1 位数量为偶数,则显示一种颜色,否则显示另一种颜色。这种图案看起来像是一种几乎重复但不完美的瓷砖效果。
  • tashian:这让我想起了哈明距离纹理:链接
  • arcastroe:我在中学时就开始接触编程,但只会编写一些简单的命令行应用程序。后来偶然发现了 Lode 的计算机图形教程,终于有了易于理解的例子,学会了如何打开窗口并在屏幕上绘制图形。这使我能够重新创建许多经典游戏(如 Pacman、Snake、Space Invaders 等),这些游戏在终端上是不可能实现的。感谢 Lode,他为我的软件开发职业生涯奠定了基础。
  • nicknash:一个有趣的小知识:XOR 纹理中的每个点都是其上方或左侧未出现的最小整数。(顺便提一下我的博客:链接 )
  • zazaulola:有一个网站上有成千上万这样的例子:链接 Dwitter 类似于 Twitter,但用于发布一行 JavaScript 代码的示例,用户限制在 140 字节内创作。
  • fabiensanglard:Lode 的网站是我当年学习光线追踪的资源。他的网站是纯金。今天我甚至更喜欢它的布局。
  • mg:现在的 JavaScript 沙箱技术如何?我想构建一个类似算法艺术的网站,用户可以粘贴 JS 代码片段并查看生成的图像。类似于我的即时预览 HTML 编辑器:链接 但是否可以做到代码不能跳出结果框架?例如,不允许外部 HTTP 请求、操作窗口等?

小编锐评

XOR 纹理不仅是图形编程的一个经典技巧,更是激发了许多初学者对编程的兴趣。Lode 的教程和网站为无数程序员提供了宝贵的学习资源。如今,虽然技术日新月异,但这些基础知识依然具有重要的参考价值。如果你对图形编程感兴趣,不妨尝试自己动手实现一个 XOR 纹理,感受其中的乐趣吧!

责任编辑:武晓燕 来源: Piper蛋窝
相关推荐

2013-03-27 10:06:02

服务器虚拟化

2022-05-24 16:40:08

戴尔

2014-07-28 17:09:54

Cocos

2009-12-14 08:58:25

HTML5网页3DWebGL

2009-07-29 13:39:02

JSON序列化和反序列ASP.NET AJA

2016-10-20 15:54:08

Python数据序列化

2013-03-11 13:55:03

JavaJSON

2012-11-13 10:52:15

大数据3D可视化

2011-06-01 15:05:02

序列化反序列化

2021-11-18 07:39:41

Json 序列化Vue

2018-03-19 10:20:23

Java序列化反序列化

2018-01-17 16:38:07

MSONJSON序列化

2024-09-04 23:19:29

2015-04-27 15:35:42

Cocos3D场景编辑器

2010-01-08 11:11:38

JSON 序列化

2024-10-07 08:26:53

2022-08-06 08:41:18

序列化反序列化Hessian

2009-06-14 22:01:27

Java对象序列化反序列化

2022-09-14 09:23:51

Java3D引擎

2017-12-18 11:11:04

点赞
收藏

51CTO技术栈公众号