<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>RaySong (Ray-D-Song)</title>
    <link>https://ruby-china.org/RaySong</link>
    <description></description>
    <language>en-us</language>
    <item>
      <title>Rails hotwire 或者 erb 模板渲染，如何实现多 tab 页的需求？</title>
      <description>&lt;p&gt;简单来说就是这种多 tab 页切换的需求。&lt;/p&gt;

&lt;p&gt;&lt;img src="https://l.ruby-china.com/photo/RaySong/64d7156f-b425-4dcb-a1ab-2a86fa9ad297.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;通过 hotwire 控制器确实可以实现类似前端框架的效果，但是有一些需要记住状态的场景，比如在第一页有一些编辑操作，切换到别的页面再切回来的话，hotwire 能保存状态吗？&lt;/p&gt;</description>
      <author>RaySong</author>
      <pubDate>Fri, 11 Jul 2025 12:53:58 +0800</pubDate>
      <link>https://ruby-china.org/topics/44217</link>
      <guid>https://ruby-china.org/topics/44217</guid>
    </item>
    <item>
      <title>开发了一个 Github 用户分析和排名的网站</title>
      <description>&lt;p&gt;&lt;a href="https://github-persona.pages.dev/" rel="nofollow" target="_blank"&gt;https://github-persona.pages.dev/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;大家可以试试&lt;/p&gt;</description>
      <author>RaySong</author>
      <pubDate>Mon, 25 Nov 2024 12:45:20 +0800</pubDate>
      <link>https://ruby-china.org/topics/43966</link>
      <guid>https://ruby-china.org/topics/43966</guid>
    </item>
    <item>
      <title>关于论坛如何避免 spam</title>
      <description>&lt;p&gt;昨天的分享刚发出来，评论就被 spam 了：&lt;/p&gt;

&lt;p&gt;&lt;a href="https://ruby-china.org/topics/43960" rel="nofollow" target="_blank"&gt;https://ruby-china.org/topics/43960&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;我很好奇这种 spam 是如何实现的？论坛或者应用又该如何防范这种 spam 攻击呢？&lt;/p&gt;</description>
      <author>RaySong</author>
      <pubDate>Fri, 22 Nov 2024 10:47:28 +0800</pubDate>
      <link>https://ruby-china.org/topics/43961</link>
      <guid>https://ruby-china.org/topics/43961</guid>
    </item>
    <item>
      <title>分享最近解决的小众需求：在浏览器里检测代码文本是什么语言</title>
      <description>&lt;p&gt;仓库：&lt;a href="https://github.com/ray-d-song/guesslang-js" rel="nofollow" target="_blank"&gt;https://github.com/ray-d-song/guesslang-js&lt;/a&gt;&lt;br&gt;
效果展示：&lt;a href="https://ray-d-song.github.io/guesslang-js/" rel="nofollow" target="_blank"&gt;https://ray-d-song.github.io/guesslang-js/&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;最近我正在完成一个叫 &lt;a href="https://github.com/Ray-D-Song/EchoRSS.git" rel="nofollow" target="_blank" title=""&gt;EchoRSS&lt;/a&gt; 的阅读器项目，有一个我非常想要的功能，就是拦截订阅中的外链跳转（阅读全文、引用啥的），直接在当前页内显示。  &lt;/p&gt;

&lt;p&gt;有一个问题是返回的 HTML 代码块失去了语言标注（或者原先在 pre 和 code 标签上就没有标注语言），这样没法用 shiki 或者 prism.js 之类的工具进行代码高亮。  &lt;/p&gt;

&lt;p&gt;我找到了三个检测代码语言的方案：  &lt;/p&gt;
&lt;h2 id="1. linguist"&gt;1. &lt;a href="https://github.com/github-linguist/linguist" rel="nofollow" target="_blank" title=""&gt;linguist&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;这是一个部署在服务器上的 Ruby 项目，Github 用它来检测仓库的语言构成，如果你需要极高的准确度且可以在服务端运算的话，这是最优解。&lt;/p&gt;
&lt;h2 id="2. hljs"&gt;2. &lt;a href="https://github.com/highlightjs/highlight.js" rel="nofollow" target="_blank" title=""&gt;hljs&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;highlight.js 是一个非常知名的网页代码高亮库，也是唯一一个提供自动代码检测的高亮库。&lt;br&gt;
原理很简单，就是枚举语言的关键词，用这些关键词去一个个匹配文本，最后看哪个的匹配度最高。  &lt;/p&gt;

&lt;p&gt;hljs 有四个问题。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;对代码长度的要求很高，大多数语言至少要 300 个字符才能达到比较合格的准确度。&lt;br&gt;
&lt;/li&gt;
&lt;li&gt;检测语言的部分并不是单独的模块，而是跟 parser、render 紧紧的耦合在一起，代码写的也非常命令式，很难提取有用的部分&lt;/li&gt;
&lt;li&gt;如果不提取检测模块，直接用 hljs 高亮，会丢失代码原有的一些格式（换行和缩进）&lt;/li&gt;
&lt;li&gt;需要进行大量的正则匹配，性能较差，又因为原因 2，没法放到 web worker 中运行。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="3. guesslang"&gt;3. &lt;a href="https://github.com/yoeo/guesslang" rel="nofollow" target="_blank" title=""&gt;guesslang&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;guesslang 是一个基于 tensorflow.js 的机器学习项目。&lt;br&gt;
Microsoft 在 2021 年用 tensorflow.js 将这个项目移植到 node.js 上，为 vscode 增加了&lt;a href="https://code.visualstudio.com/updates/v1_60#_automatic-language-detection" rel="nofollow" target="_blank" title=""&gt;自动语言检测&lt;/a&gt;的功能。  &lt;/p&gt;

&lt;p&gt;一个越南小哥&lt;a href="https://github.com/hieplpvip" rel="nofollow" target="_blank" title=""&gt;hieplpvip&lt;/a&gt;三年前又将这个项目移植到了&lt;a href="https://github.com/hieplpvip/guesslang-js" rel="nofollow" target="_blank" title=""&gt;浏览器上&lt;/a&gt;，不过也有三个问题：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;漏内存，疯狂漏内存...&lt;/li&gt;
&lt;li&gt;只支持 &lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt; 标签引入 umd 格式，不支持 esm，不支持 bundle&lt;/li&gt;
&lt;li&gt;同样又因为原因 2，不支持 web worker&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;而且这位小哥已经不再维护这个项目，3 月份有个支持 esm 的 feat request 一直没有回复。  &lt;/p&gt;

&lt;p&gt;所以我提取了 hljs 中的检测模块，又 fork guesslang-js 修复了上面那些问题，对比了一下两种方案，最终 guesslang 胜出，产物就是这个：
&lt;a href="https://github.com/ray-d-song/guesslang-js" rel="nofollow" target="_blank"&gt;https://github.com/ray-d-song/guesslang-js&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;貌似叨太多了，也许未来会有人需要这个，所以 po 一下。&lt;/p&gt;

&lt;p&gt;如果有人了解 tensorflow.js 的话，希望可以推荐一些学习材料，我想进一步改为 web gpu 计算来提升效率。&lt;/p&gt;</description>
      <author>RaySong</author>
      <pubDate>Thu, 21 Nov 2024 22:26:19 +0800</pubDate>
      <link>https://ruby-china.org/topics/43960</link>
      <guid>https://ruby-china.org/topics/43960</guid>
    </item>
    <item>
      <title>吐槽一下刚刚尝试 Ubuntu 遇到的抽象事...</title>
      <description>&lt;p&gt;先叠个甲，我基本没用过 Linux desktop。  &lt;/p&gt;

&lt;p&gt;最近终于有时间试一下 DHH 的 omakub。装完后配置搜狗输入法，把键盘输入系统换成了 fcitx，重启系统后键盘挂了，按啥都没反应。&lt;/p&gt;

&lt;p&gt;我想着肯定是我配的有问题，就想用屏幕键盘先进系统再说。
结果这个屏幕键盘的回车触发不了登录界面的确认，界面本身也没有一个独立的确认按钮。&lt;/p&gt;

&lt;p&gt;虽然最后命令模式进去改好了，但是这无障碍体验也太操蛋了，西八...&lt;/p&gt;</description>
      <author>RaySong</author>
      <pubDate>Sun, 17 Nov 2024 16:48:35 +0800</pubDate>
      <link>https://ruby-china.org/topics/43951</link>
      <guid>https://ruby-china.org/topics/43951</guid>
    </item>
    <item>
      <title>Rails world 2024 DHH 演讲（熟肉）</title>
      <description>&lt;p&gt;&lt;a href="https://b23.tv/cl8g93u" rel="nofollow" target="_blank"&gt;https://b23.tv/cl8g93u&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;2023 那个也是我翻的，这次出货比较晚，是因为我两个项目里有一个难产了。&lt;img title=":joy:" alt="😂" src="https://twemoji.ruby-china.com/2/svg/1f602.svg" class="twemoji"&gt;&lt;br&gt;
一个是用 wasm 在浏览器里压制字幕，这个没啥问题。&lt;br&gt;
&lt;a href="https://subpress.pages.dev/" rel="nofollow" target="_blank"&gt;https://subpress.pages.dev/&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;另一个是白嫖 Cloudflare Worker AI，用 worker 免费的 whisper 生成字幕 qwen 翻译字幕。&lt;br&gt;
结果这免费的 whisper 只能处理短音频，而且不稳定，有时候 10 分钟崩，有时候 5 分钟的音频也崩。&lt;br&gt;
&lt;a href="https://github.com/Ray-D-Song/worker-ai-subtitle" rel="nofollow" target="_blank"&gt;https://github.com/Ray-D-Song/worker-ai-subtitle&lt;/a&gt;&lt;br&gt;
最后还是用我之前写的 Python 程序本地翻译...   &lt;/p&gt;

&lt;p&gt;果然免费的东西限制还是多...  &lt;/p&gt;</description>
      <author>RaySong</author>
      <pubDate>Mon, 30 Sep 2024 15:36:06 +0800</pubDate>
      <link>https://ruby-china.org/topics/43898</link>
      <guid>https://ruby-china.org/topics/43898</guid>
    </item>
    <item>
      <title>最近发现的一个很好用的产品 (金数据的 AI 出题) 居然是 Ruby 写的。</title>
      <description>&lt;p&gt;最近要考个证，但是这方面的知识没什么题库，就想上网找个用 gpt 出题的软件。&lt;br&gt;
试了一下金数据，产品的好用程度不像是国内的产品.
没有别的意思，单纯是国内产品，尤其是大厂出品，看起来非常的拥挤，很没有品味&lt;/p&gt;

&lt;p&gt;看到国内还有这种人数的公司在用 Ruby 写好的产品... 让我死去的 Ruby 之心又复燃了起来。&lt;/p&gt;

&lt;p&gt;(没有任何利益相关，确实是很好用，而且设计的很漂亮)
&lt;a href="https://jinshuju.net/about" rel="nofollow" target="_blank"&gt;https://jinshuju.net/about&lt;/a&gt;&lt;/p&gt;</description>
      <author>RaySong</author>
      <pubDate>Sun, 23 Jun 2024 23:09:44 +0800</pubDate>
      <link>https://ruby-china.org/topics/43762</link>
      <guid>https://ruby-china.org/topics/43762</guid>
    </item>
    <item>
      <title>Rails 纪录片「自制双语搬运」</title>
      <description>&lt;p&gt;&lt;span class="embed-responsive embed-responsive-16by9"&gt;&lt;iframe class="embed-responsive-item" src="//player.bilibili.com/player.html?bvid=1Re411D7tc" allowfullscreen=""&gt;&lt;/iframe&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;「你知道比 web 服务更难拓展的是什么吗？寻找可以持续 20 年且仍然感觉良好的基础思想」&lt;/strong&gt;&lt;br&gt;
片子里这句话像子弹一样打在我的眉心上。&lt;/p&gt;</description>
      <author>RaySong</author>
      <pubDate>Sat, 11 Nov 2023 01:43:57 +0800</pubDate>
      <link>https://ruby-china.org/topics/43469</link>
      <guid>https://ruby-china.org/topics/43469</guid>
    </item>
    <item>
      <title>GitLab CE 为什么需要如此高的配置</title>
      <description>&lt;p&gt;背景是一个朋友出来创业，我经常去找点乐子顺带无偿帮忙。&lt;br&gt;
之前代码托管在 gitee 上，最近赚钱了，想转移到自部署的代码库。我对 gitlab 的理解还停留在几年前部署的 v9, 当时也就 2g 内存的 vps 可以轻松跑起来。所以这次一开始是用 &lt;code&gt;2c2g 的 lightsail&lt;/code&gt;, 没想到启动即崩溃。&lt;br&gt;
参考网上的功能瘦身方法后起步内存降低到 2.6g, 可以在 &lt;code&gt;ec2 2c4g&lt;/code&gt; 的实例上跑起来，一周后还吃满干爆了。 &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;最终选择是转移到本地服务器部署，云上稳定运行需要 4c16g 朋友实在是肉疼.
好奇 gitlab 为什么会有如此高的占用.
这么一想 github、gittee 的服务成本也太高了...&lt;/p&gt;
&lt;/blockquote&gt;</description>
      <author>RaySong</author>
      <pubDate>Thu, 09 Nov 2023 10:33:42 +0800</pubDate>
      <link>https://ruby-china.org/topics/43463</link>
      <guid>https://ruby-china.org/topics/43463</guid>
    </item>
    <item>
      <title>【渣翻双字】Rails World2023 开幕演讲，host by dhh</title>
      <description>&lt;p&gt;&lt;a href="https://b23.tv/QLNwkpz" rel="nofollow" target="_blank"&gt;https://b23.tv/QLNwkpz&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;如题，压这玩意差点干爆我 2017 年的 x1c&lt;/p&gt;</description>
      <author>RaySong</author>
      <pubDate>Thu, 12 Oct 2023 14:53:54 +0800</pubDate>
      <link>https://ruby-china.org/topics/43395</link>
      <guid>https://ruby-china.org/topics/43395</guid>
    </item>
  </channel>
</rss>
