網(wǎng)頁上的 iOS 體驗 | 優(yōu)化 Ruby JSON 序列化 | 偽3D道路引擎技術(shù) | GO 的 Ergo Chat 服務(wù)器
嘗試在網(wǎng)頁上重現(xiàn) iOS 體驗
圖片
嘗試在網(wǎng)頁上重現(xiàn) iOS 體驗,這是一個有趣的挑戰(zhàn)。雖然許多人認(rèn)為這在技術(shù)上難以實(shí)現(xiàn),但這個項目證明了現(xiàn)代 Web 技術(shù)的強(qiáng)大能力。通過利用各種現(xiàn)代 Web API 和功能,開發(fā)者成功地模擬了 iOS 的許多界面元素和交互方式。
項目亮點(diǎn)
- 高度還原的 UI:該項目在視覺上幾乎完美地模仿了 iOS 的界面,包括圖標(biāo)、動畫和過渡效果。
- 現(xiàn)代 Web 技術(shù)的應(yīng)用:通過使用 HTML5、CSS3 和 JavaScript,項目展示了 Web 平臺的潛力,打破了人們對 Web 應(yīng)用能力的固有認(rèn)知。
- 用戶體驗:盡管大部分時間都花在了細(xì)節(jié)上,但最終的結(jié)果令人印象深刻,尤其是在 Safari 瀏覽器上運(yùn)行時。
用戶反饋
- 網(wǎng)友 yesimahuman:這個項目真的很好,特別是考慮到我曾經(jīng)構(gòu)建過一個相當(dāng)流行的移動 Web 框架(Ionic),它也復(fù)制了很多 iOS UI。不過,我發(fā)現(xiàn)滑動手勢沒有工作。這說明,雖然技術(shù)上可行,但實(shí)現(xiàn)細(xì)節(jié)仍然非常重要。
- 網(wǎng)友 deanc:我曾經(jīng)為諾基亞做過類似的事情,當(dāng)他們的手機(jī)轉(zhuǎn)向 Windows Phone 時。確實(shí),90% 的時間都花在了模仿動畫和過渡效果上。
- 網(wǎng)友 c-fe:在 Safari 上看起來非常流暢。如果我無法分辨這是不是模擬的,那對你來說絕對是一種贊美!
- 網(wǎng)友 kookamamie:圖標(biāo)看起來有點(diǎn)模糊。
小編銳評
這個項目不僅展示了現(xiàn)代 Web 技術(shù)的強(qiáng)大能力,還提醒我們在追求高度還原的 UI 時,細(xì)節(jié)的重要性。雖然滑動手勢等一些小問題還需要進(jìn)一步完善,但整體效果已經(jīng)非常接近 iOS 體驗。對于那些對 Web 開發(fā)感興趣的開發(fā)者來說,這是一個很好的學(xué)習(xí)案例,也為我們未來在 Web 上實(shí)現(xiàn)更多復(fù)雜應(yīng)用提供了信心。
如果你對這個項目感興趣,不妨親自試試看,相信你會被它的精細(xì)程度所震撼!
No More Adam: 學(xué)習(xí)率初始化縮放才是王道
https://arxiv.org/abs/2412.11768
圖片
在深度學(xué)習(xí)領(lǐng)域,優(yōu)化器的選擇一直是研究的重點(diǎn)。近期,一項名為 SGD-SaI 的新方法引起了廣泛關(guān)注。該方法通過在初始化階段對不同參數(shù)組進(jìn)行學(xué)習(xí)率縮放,有效解決了傳統(tǒng)優(yōu)化器的一些問題。
背景與動機(jī)
傳統(tǒng)的自適應(yīng)梯度方法(如 Adam)雖然在許多任務(wù)中表現(xiàn)出色,但其內(nèi)存占用較高且計算復(fù)雜。SGD-SaI 旨在簡化這一過程,通過在初始化階段根據(jù)梯度信號噪聲比(g-SNR)調(diào)整學(xué)習(xí)率,從而實(shí)現(xiàn)高效優(yōu)化。
主要貢獻(xiàn)
- 簡化優(yōu)化過程:SGD-SaI 不依賴于自適應(yīng)二階動量,減少了內(nèi)存使用,提高了計算效率。
- 性能優(yōu)越:在多種任務(wù)中,SGD-SaI 與 AdamW 相比,不僅在性能上匹配甚至超過,還在內(nèi)存使用上大幅節(jié)省。
- 魯棒性強(qiáng):SGD-SaI 在超參數(shù)變化下表現(xiàn)出較強(qiáng)的魯棒性,適用于不同的應(yīng)用場景。
實(shí)驗結(jié)果
- 圖像分類:在 ImageNet-1K 數(shù)據(jù)集上,使用 Vision Transformers (ViT) 進(jìn)行分類,SGD-SaI 表現(xiàn)優(yōu)異。
- 自然語言處理:在 GPT-2 預(yù)訓(xùn)練任務(wù)中,SGD-SaI 也取得了顯著成果,尤其是在大規(guī)模語言模型(LLMs)的微調(diào)任務(wù)中。
- 內(nèi)存節(jié)?。簩τ?GPT-2(1.5B 參數(shù))和 Llama2-7B 模型,SGD-SaI 分別減少了 5.93 GB 和 25.15 GB 的內(nèi)存使用。
社區(qū)反饋
- 網(wǎng)友 rob_c:這種方法看起來很有潛力,特別是內(nèi)存節(jié)省方面。不過,需要注意的是在訓(xùn)練初期,SGD-SaI 的性能可能不如 AdamW,需要更多的時間才能達(dá)到最佳效果。
- 網(wǎng)友 eden-u4:嘗試了源代碼在一個簡單的模型上,Adam 在 2 個 epoch 內(nèi)完成了訓(xùn)練,而 SGD-SaI 在 20 個 epoch 內(nèi)沒有明顯進(jìn)展??赡苁菍?shí)現(xiàn)有問題,需要進(jìn)一步調(diào)試。
- 網(wǎng)友 amunozo:標(biāo)題有點(diǎn)夸張了,但確實(shí)提出了一個有趣的觀點(diǎn)。希望未來能看到更多實(shí)驗結(jié)果來驗證這種方法的有效性。
小編銳評
SGD-SaI 的提出無疑為優(yōu)化器領(lǐng)域帶來了新的思路。雖然目前仍有一些爭議,但其在內(nèi)存節(jié)省和性能提升方面的表現(xiàn)值得進(jìn)一步關(guān)注。期待更多的研究和實(shí)踐能夠驗證其實(shí)際效果,或許這真的會成為未來優(yōu)化器的新標(biāo)準(zhǔn)。
優(yōu)化 Ruby 的 JSON 序列化性能
https://byroot.github.io/ruby/json/2024/12/15/optimizing-ruby-json-part-1.html
json gem 的維護(hù)者在修復(fù)了一些舊 bug 之后,將大部分精力集中在了其性能優(yōu)化上。經(jīng)過一系列的優(yōu)化,現(xiàn)在的 json gem 在大多數(shù)基準(zhǔn)測試中已經(jīng)成為最快的 JSON 解析器和生成器。
為什么需要優(yōu)化?
雖然 ruby/json 之前確實(shí)比一些流行的替代品如 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 快了兩倍,但在大多數(shù)實(shí)際用例中,這種差距并不會造成顯著影響。
然而,oj 的廣泛使用讓作者感到困擾。它被包括 Shopify 在內(nèi)的許多項目所采用,給作者帶來了無數(shù)的頭痛問題。其中一個主要問題是 oj 的猴子補(bǔ)丁功能(如 Oj.mimic_JSON 和 Oj.optimize_rails),這些功能可能會引入安全漏洞和其他微妙的問題。
優(yōu)化策略
- 避免冗余檢查:通過利用 Ruby 字符串的編碼范圍屬性,避免重復(fù)掃描字符串以驗證其編碼。
- 先檢查更便宜且更可能的條件:優(yōu)化緩沖區(qū)擴(kuò)展函數(shù),減少不必要的條件檢查。
- 減少初始化成本:減少生成 JSON 時的初始化工作,特別是在微基準(zhǔn)測試中表現(xiàn)出色。
- 避免指針追逐:通過直接檢查編碼索引而不是調(diào)用 rb_enc_get,減少內(nèi)存訪問開銷。
- 使用查找表:通過預(yù)計算靜態(tài)數(shù)組,減少每個字符的多次比較操作,顯著提高性能。
評論精選
- 網(wǎng)友 izietto:作為一名 Rails 開發(fā)者,我非常贊同作者的觀點(diǎn)。不同命名約定(Ruby 使用 snake_case,JavaScript/JSON 使用 camelCase)的轉(zhuǎn)換確實(shí)很煩人,希望未來能有更好的解決方案。
- 網(wǎng)友 hahahacorn:讀完這篇文章,感覺 oj 的優(yōu)勢不再那么明顯了。未來還有必要繼續(xù)使用 oj 嗎?
- 網(wǎng)友 mfkp:很棒的文章,讓我想開始優(yōu)化我的 Ruby 代碼了。感謝作者的分享!
- 網(wǎng)友 thiago_fm:作者的工作令人欽佩,不僅貢獻(xiàn)巨大,而且效率驚人。希望更多 Ruby C 語言開發(fā)者能多寫些文章,幫助社區(qū)進(jìn)步。
- 網(wǎng)友 bornelsewhere:json gem 是否使用了內(nèi)在函數(shù)?如果可以的話,會對性能有進(jìn)一步提升嗎?
偽3D道路引擎技術(shù)詳解
http://www.extentofthejam.com/pseudo/
圖片
偽3D道路引擎技術(shù)是一種經(jīng)典的計算機(jī)圖形學(xué)技巧,廣泛應(yīng)用于早期賽車游戲。這篇文章詳細(xì)介紹了如何實(shí)現(xiàn)這種效果,從最基本的原理到復(fù)雜的曲線和山丘效果。
基本原理
偽3D道路引擎的核心思想是利用透視效果來模擬3D道路。具體來說,通過改變每行像素的寬度和位置,可以創(chuàng)建出道路逐漸遠(yuǎn)去的視覺效果。這種方法計算簡單,適合早期硬件性能較低的游戲機(jī)。
曲線和轉(zhuǎn)向
圖片
文章詳細(xì)講解了如何實(shí)現(xiàn)道路的曲線效果。通過逐行改變道路中心線的位置,可以模擬車輛轉(zhuǎn)彎的效果。這種技術(shù)不僅可以用于簡單的左轉(zhuǎn)和右轉(zhuǎn),還可以實(shí)現(xiàn)復(fù)雜的S型彎道。
山丘效果
文章還介紹了一種靈活的方法來實(shí)現(xiàn)山丘效果。通過調(diào)整每行像素的高度,可以模擬道路的起伏。這種方法不僅計算量小,還能準(zhǔn)確跟蹤位于地平線以下的對象。
實(shí)際應(yīng)用
文章提到了幾款經(jīng)典游戲,如《OutRun》和《Pole Position》,這些游戲都使用了偽3D道路引擎技術(shù)。通過對這些游戲的分析,我們可以更好地理解這種技術(shù)的實(shí)際應(yīng)用。
評論精選
- 網(wǎng)友 blackfur:這篇文章是一顆寶石。多年前我在制作一個經(jīng)典的偽3D賽車游戲時偶然發(fā)現(xiàn)了它,雖然最終沒有完成,但它給我提供了很多靈感。
- 網(wǎng)友 komadori:作為一個老派3D效果愛好者,我喜歡這篇教程。特別是看到駕駛游戲中的效果與光線投射的垂直切片類似,感覺非常有趣。
- 網(wǎng)友 Netcob:我小時候不喜歡這些偽3D賽車游戲,感覺它們更像是播放動畫,而不是真正的駕駛體驗。不過,這篇文章讓我重新認(rèn)識了這些技術(shù)的魅力。
- 網(wǎng)友 elevationapi:記得《Vroom》在 Atari ST 上的表現(xiàn)非常出色,深度感和流暢度在當(dāng)時是非常驚人的。
Ergo Chat – 用 Go 語言編寫的現(xiàn)代 IRC 服務(wù)器
https://github.com/ergochat/ergo
Ergo(前身為 Oragono)是一個用 Go 語言編寫的現(xiàn)代 IRC 服務(wù)器。它的核心設(shè)計理念包括易用性、高性能和可擴(kuò)展性。Ergo 是從 Ergonomadic IRC 守護(hù)進(jìn)程派生而來,旨在提供一個穩(wěn)定且功能豐富的 IRC 服務(wù)器解決方案。
主要特點(diǎn)
- 低資源需求:Ergo 的資源消耗非常低,適合在各種環(huán)境中部署,包括小型服務(wù)器和個人計算機(jī)。
- 多客戶端支持:允許同一昵稱下的多個客戶端同時在線,提高了用戶體驗。
- WebSocket 支持:內(nèi)置 WebSocket 支持,方便集成到 Web 應(yīng)用中,提供網(wǎng)頁客戶端。
- 聊天記錄支持:支持聊天記錄功能,確保用戶不會錯過任何重要信息。
- 用戶賬戶系統(tǒng):通過用戶賬戶系統(tǒng),用戶可以注冊昵稱和頻道,增強(qiáng)社區(qū)管理和安全性。
部署指南
- 下載最新版本:訪問 GitHub 發(fā)布頁面下載最新版本。
- 解壓并配置:將下載的文件解壓到一個目錄,然后運(yùn)行以下命令:
cp default.yaml ircd.yaml
vim ircd.yaml # 修改配置文件
./ergo mkcerts
./ergo run
- 生產(chǎn)環(huán)境部署:參考手冊中的生產(chǎn)化指南,獲取有效的 TLS 證書,并進(jìn)行其他必要的配置。
用戶評價
- 網(wǎng)友 donio:我已經(jīng)為朋友和家人使用 Ergo 一年了。由于其易于托管、低資源需求以及我對協(xié)議和代碼庫的理解,選擇 Ergo 是非常明智的。v3 聊天記錄支持和多客戶端功能大大提升了現(xiàn)代聊天體驗。
- **網(wǎng)友 emmanueloga_**:盡管 IRC 協(xié)議存在一些問題,但 Ergo 的實(shí)現(xiàn)非常出色。IRC 的非結(jié)構(gòu)化消息格式確實(shí)帶來了不少挑戰(zhàn),但 Ergo 的設(shè)計和實(shí)現(xiàn)很好地解決了這些問題。
- 網(wǎng)友 linsomniac:Ergo 是否可以連接到其他 IRC 服務(wù)器?我希望將其與現(xiàn)有的 ngircd 鏈接,以便用戶嘗試后再決定是否遷移。
- 網(wǎng)友 th0th:很高興看到這樣的項目,許多人以為只有 Slack 和 Discord 是唯一的選擇。最近我在為家庭和公司圈選擇合適的聊天工具,考慮過 XMPP 和 Matrix,最終選擇了 Matrix。不過,Ergo 的“始終在線”功能讓我印象深刻。
小編銳評
Ergo Chat 以其低資源需求、多客戶端支持和現(xiàn)代功能,為 IRC 服務(wù)器帶來了新的活力。對于那些希望擁有一個輕量級、高性能聊天解決方案的用戶來說,Ergo 是一個值得嘗試的選擇。雖然 IRC 協(xié)議本身存在一些局限性,但 Ergo 的實(shí)現(xiàn)和功能優(yōu)化使其成為了一個非常有吸引力的選項。如果你正在尋找一個可靠的聊天服務(wù)器,不妨試試 Ergo。
Show HN: ImPlot3D – 為 Dear ImGui 打造的 3D 繪圖庫
https://github.com/brenocq/implot3d
圖片
ImPlot3D 是一個擴(kuò)展了 Dear ImGui 的 3D 繪圖庫,提供了易于使用且高性能的 3D 繪圖功能。受 ImPlot 啟發(fā),ImPlot3D 為已經(jīng)熟悉 ImPlot 的開發(fā)者帶來了熟悉的 API。ImPlot3D 旨在渲染具有自定義標(biāo)記、線條、表面和網(wǎng)格的 3D 圖表,是需要 3D 數(shù)據(jù)可視化應(yīng)用的理想選擇。
主要特點(diǎn)
- GPU 加速渲染:確保高性能。
- 多種圖表類型:線圖、散點(diǎn)圖、表面圖、四邊形圖、三角形圖、網(wǎng)格圖、文本圖。
- 交互式旋轉(zhuǎn)、平移和縮放:增強(qiáng)用戶體驗。
- 多種樣式選項:10 種標(biāo)記類型、可調(diào)節(jié)標(biāo)記大小、線寬、輪廓顏色、填充顏色等。
- 16 種內(nèi)置色圖:支持用戶自定義色圖。
- 可選圖表標(biāo)題、軸標(biāo)簽和網(wǎng)格標(biāo)簽。
- 可配置的圖例:快速顯示/隱藏圖表項目。
- 默認(rèn)樣式:基于當(dāng)前的 ImGui 主題,也可完全自定義。
- 簡單的 API:類似于 Dear ImGui 和 ImPlot。
使用方法
- 初始化 3D 圖表:調(diào)用 ImPlot3D::BeginPlot()。
- 繪制數(shù)據(jù):使用 PlotX 函數(shù)(如 PlotLine()、PlotScatter()、PlotSurface())。
- 結(jié)束 3D 圖表:調(diào)用 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 的各種功能。將此文件添加到項目中,并在更新循環(huán)中調(diào)用 ImPlot3D::ShowDemoWindow(),即可查看各種 3D 圖表示例。
集成步驟
- 確保有一個工作中的 Dear ImGui 環(huán)境。
- 添加源文件:implot3d.h、implot3d.cpp、implot3d_internal.h、implot3d_items.cpp。
- 創(chuàng)建和銷毀 ImPlot3D 上下文:與 ImGui 上下文一起創(chuàng)建和銷毀。
注意事項
- 高密度 3D 可視化問題:默認(rèn)情況下,Dear ImGui 使用 16 位索引,可能會導(dǎo)致復(fù)雜表面或網(wǎng)格的斷言失敗、數(shù)據(jù)截斷或視覺故障。建議啟用 32 位索引或確保渲染器支持 ImGuiBackendFlags_RendererHasVtxOffset 標(biāo)志。
評論精選
- 網(wǎng)友 flohofwoe:令人驚訝的是,Dear ImGui 的組件擴(kuò)展思想如此成功,盡管 API 本身沒有明顯的擴(kuò)展點(diǎn),但組件只是普通的函數(shù),可以組合成更高層次的 UI 小部件。
- 網(wǎng)友 db48x:非常棒。幾乎希望我能找到使用它的機(jī)會。
- 網(wǎng)友 forrestthewoods:DearImGui 和 ImPlot 非常好,這是一個非常棒的補(bǔ)充。
- 網(wǎng)友 laurentlb:很有趣!建議在 README 中添加一些截圖。
- 網(wǎng)友 Fraterkes:有人有使用 ImGui 制作的、具有良好文本和抗鋸齒效果的例子嗎?看起來真的很酷,但所有用它制作的東西似乎都有“粗糙”的感覺。
- 網(wǎng)友 Implicated:24GB 顯存的 GPU 對于運(yùn)行機(jī)器學(xué)習(xí)模型非常有用,即使性能不如 NVIDIA,只要能跑起來就很好。這種卡會非常受歡迎。
XOR 紋理:2004 年的經(jīng)典圖形編程技巧
https://lodev.org/cgtutor/xortexture.html
圖片
2004 年,doener 發(fā)布了一篇關(guān)于 XOR 紋理的文章,介紹了如何使用簡單的位運(yùn)算生成復(fù)雜的視覺效果。文章中的代碼片段展示了如何通過 x ^ y 運(yùn)算生成一個獨(dú)特的紋理圖案。具體實(shí)現(xiàn)如下:
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 運(yùn)算生成了一個彩色的紋理圖案,每個像素的顏色由 x 和 y 坐標(biāo)的異或值決定。這種技術(shù)不僅簡單,而且效果獨(dú)特,吸引了許多編程愛好者的關(guān)注。
網(wǎng)友評論精選
- **256_**:我曾經(jīng)用 x86 匯編編寫了一個類似的程序,但使用的是 1 位顏色。通過 parity(x ^ y),即如果 x ^ y 的 1 位數(shù)量為偶數(shù),則顯示一種顏色,否則顯示另一種顏色。這種圖案看起來像是一種幾乎重復(fù)但不完美的瓷磚效果。
- tashian:這讓我想起了哈明距離紋理:鏈接
- arcastroe:我在中學(xué)時就開始接觸編程,但只會編寫一些簡單的命令行應(yīng)用程序。后來偶然發(fā)現(xiàn)了 Lode 的計算機(jī)圖形教程,終于有了易于理解的例子,學(xué)會了如何打開窗口并在屏幕上繪制圖形。這使我能夠重新創(chuàng)建許多經(jīng)典游戲(如 Pacman、Snake、Space Invaders 等),這些游戲在終端上是不可能實(shí)現(xiàn)的。感謝 Lode,他為我的軟件開發(fā)職業(yè)生涯奠定了基礎(chǔ)。
- nicknash:一個有趣的小知識:XOR 紋理中的每個點(diǎn)都是其上方或左側(cè)未出現(xiàn)的最小整數(shù)。(順便提一下我的博客:鏈接 )
- zazaulola:有一個網(wǎng)站上有成千上萬這樣的例子:鏈接 Dwitter 類似于 Twitter,但用于發(fā)布一行 JavaScript 代碼的示例,用戶限制在 140 字節(jié)內(nèi)創(chuàng)作。
- fabiensanglard:Lode 的網(wǎng)站是我當(dāng)年學(xué)習(xí)光線追蹤的資源。他的網(wǎng)站是純金。今天我甚至更喜歡它的布局。
- mg:現(xiàn)在的 JavaScript 沙箱技術(shù)如何?我想構(gòu)建一個類似算法藝術(shù)的網(wǎng)站,用戶可以粘貼 JS 代碼片段并查看生成的圖像。類似于我的即時預(yù)覽 HTML 編輯器:鏈接 但是否可以做到代碼不能跳出結(jié)果框架?例如,不允許外部 HTTP 請求、操作窗口等?
小編銳評
XOR 紋理不僅是圖形編程的一個經(jīng)典技巧,更是激發(fā)了許多初學(xué)者對編程的興趣。Lode 的教程和網(wǎng)站為無數(shù)程序員提供了寶貴的學(xué)習(xí)資源。如今,雖然技術(shù)日新月異,但這些基礎(chǔ)知識依然具有重要的參考價值。如果你對圖形編程感興趣,不妨嘗試自己動手實(shí)現(xiàn)一個 XOR 紋理,感受其中的樂趣吧!