<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>ccok (rockllei)</title>
    <link>https://ruby-china.org/ccok</link>
    <description></description>
    <language>en-us</language>
    <item>
      <title>搞了一个专门用来学习 Ruby 和 Rails 的 GPT: RubyChat</title>
      <description>&lt;p&gt;做了一个专门用于学习 Ruby 和 Ruby on Rails 的 ChatGPT: RubyChat，内容来自于我们之前录制的所有视频，整理出的文字大概有 160 万字，可以回答 Ruby 和 Rails 相关的问题，还在完善中&lt;/p&gt;

&lt;p&gt;开发思路：&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;把蛋人网所有的视频使用 ffmpeg 转出音频&lt;/li&gt;
&lt;li&gt;使用 whisper 再转为文本&lt;/li&gt;
&lt;li&gt;使用 ChatGPT 的修正语法和文本&lt;/li&gt;
&lt;li&gt;切分文本为小的 chunk&lt;/li&gt;
&lt;li&gt;使用 embedding 接口来生成向量&lt;/li&gt;
&lt;li&gt;导入 weaviate 数据库&lt;/li&gt;
&lt;li&gt;根据问题生成向量，再搜索 weaviate，发送匹配内容到 ChatGPT，生成摘要返回客户端&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;目前发现的问题主要是在提取音频时因为术语太多（还有发音问题），在转文字时会有问题，比如 username 在对话中会显示成 user name 等等，以及变量和方法名称有大小写和拼写错误等问题&lt;/p&gt;

&lt;p&gt;地址：&lt;a href="https://www.343cloud.com/rubychat" rel="nofollow" target="_blank"&gt;https://www.343cloud.com/rubychat&lt;/a&gt;&lt;/p&gt;</description>
      <author>ccok</author>
      <pubDate>Tue, 18 Apr 2023 08:19:45 +0800</pubDate>
      <link>https://ruby-china.org/topics/43013</link>
      <guid>https://ruby-china.org/topics/43013</guid>
    </item>
    <item>
      <title>Rails 7 + Vite + React + Docker</title>
      <description>&lt;p&gt;写了一个脚手架，可以帮助快速地创建 Ruby on Rails 7 项目，支持 Vite、React 和 Docker。&lt;/p&gt;

&lt;p&gt;项目地址：&lt;a href="https://github.com/eggmantv/rails7vite" rel="nofollow" target="_blank"&gt;https://github.com/eggmantv/rails7vite&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;使用说明请参考 github 页面。&lt;/p&gt;</description>
      <author>ccok</author>
      <pubDate>Wed, 24 Aug 2022 17:56:55 +0800</pubDate>
      <link>https://ruby-china.org/topics/42610</link>
      <guid>https://ruby-china.org/topics/42610</guid>
    </item>
    <item>
      <title>[北京] 魔门云 招聘后端开发工程师一名 (10 -15k)</title>
      <description>&lt;h3 id="公司介绍"&gt;公司介绍&lt;/h3&gt;
&lt;p&gt;魔门云 - &lt;a href="https://www.cachemoment.com" rel="nofollow" target="_blank"&gt;https://www.cachemoment.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;魔门云成立于 2015 年，致力于打造一个企业级的云平台，提供场景化 SaaS/PaaS 服务。目前推出了基于大数据分析的页面性能优化 (Web Content Optimization)，融合式 CDN（Global Multi-CDN）产品。2016 年 9 月魔门云获得了创客 100 基金和 CDN 巨头企业蓝汛 (ChinaCache) 百万级天使轮投资。目前全球有超过 500 家的企业使用由魔门云提供的产品。&lt;/p&gt;
&lt;h3 id="职位"&gt;职位&lt;/h3&gt;
&lt;p&gt;后端开发工程师 (1 名)&lt;/p&gt;

&lt;p&gt;职责&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;负责后端业务的开发;&lt;/li&gt;
&lt;li&gt;负责后端 API 的设计和开发；&lt;/li&gt;
&lt;li&gt;与产品经理合作按时完成计划任务；&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;技能要求&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;掌握 Ruby 和 Ruby on Rails；&lt;/li&gt;
&lt;li&gt;掌握 HTML5, CSS3, Javascript;&lt;/li&gt;
&lt;li&gt;熟悉 jQuery 和 React 等前端开发框架；&lt;/li&gt;
&lt;li&gt;熟悉 PostgreSQL / MongoDB 等数据库；&lt;/li&gt;
&lt;li&gt;有完整的 Web 应用开发经验；&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="待遇"&gt;待遇&lt;/h3&gt;
&lt;p&gt;10k - 15k，具体面议&lt;/p&gt;
&lt;h3 id="地点"&gt;地点&lt;/h3&gt;
&lt;p&gt;北京回龙观区域&lt;/p&gt;

&lt;p&gt;简历请投到：andykong@cachemoment.com，请注明“应聘”&lt;/p&gt;

&lt;p&gt;谢谢！&lt;/p&gt;</description>
      <author>ccok</author>
      <pubDate>Mon, 22 May 2017 11:47:59 +0800</pubDate>
      <link>https://ruby-china.org/topics/33034</link>
      <guid>https://ruby-china.org/topics/33034</guid>
    </item>
    <item>
      <title>[已关闭，结果公布] 第二轮活动，送出几个蛋人网的订阅账号</title>
      <description>&lt;p&gt;第二轮活动，为了感谢 Ruby China 社区，免费送出 5 个蛋人网 &lt;a href="https://eggman.tv" rel="nofollow" target="_blank"&gt;https://eggman.tv&lt;/a&gt; 的付费订阅账号，规则如下：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;回帖留言就行，不用事先在蛋人网注册账号&lt;/li&gt;
&lt;li&gt;截止时间 2017-04-20 18:00:00 (北京时区)&lt;/li&gt;
&lt;li&gt;通过我们的系统随机抽取&lt;/li&gt;
&lt;li&gt;抽取结果会在 2017-04-21 18:00:00 前公布，我们会在这里 @ 中奖的朋友&lt;/li&gt;
&lt;li&gt;中奖的同学 @ 我你在蛋人网账号的 Email 地址，我们会为你设置会员&lt;/li&gt;
&lt;li&gt;赠送会员时长为：15 天&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;保留最终解释权。&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;在第一轮中已经中奖的同学给其他同学留点机会，即使抽中不会再次赠送了，第一次活动链接 &lt;a href="https://ruby-china.org/topics/32455" rel="nofollow" target="_blank"&gt;https://ruby-china.org/topics/32455&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;</description>
      <author>ccok</author>
      <pubDate>Thu, 13 Apr 2017 11:45:22 +0800</pubDate>
      <link>https://ruby-china.org/topics/32772</link>
      <guid>https://ruby-china.org/topics/32772</guid>
    </item>
    <item>
      <title>蛋人网优惠码</title>
      <description>&lt;p&gt;优惠码：&lt;strong&gt;YEAR50&lt;/strong&gt; 年度订阅减 50，截止日期 2017-03-31&lt;/p&gt;

&lt;p&gt;优惠码：&lt;strong&gt;QUARTER20&lt;/strong&gt; 季度订阅减 20，截止日期 2017-03-31&lt;/p&gt;

&lt;p&gt;&lt;a href="https://eggman.tv" rel="nofollow" target="_blank"&gt;https://eggman.tv&lt;/a&gt;&lt;/p&gt;</description>
      <author>ccok</author>
      <pubDate>Tue, 28 Mar 2017 10:32:22 +0800</pubDate>
      <link>https://ruby-china.org/topics/32648</link>
      <guid>https://ruby-china.org/topics/32648</guid>
    </item>
    <item>
      <title>另一个微信开发的 Ruby Gem: wechat-gate</title>
      <description>&lt;p&gt;wechat-gate: &lt;a href="https://github.com/eggmantv/wechat_gate" rel="nofollow" target="_blank"&gt;https://github.com/eggmantv/wechat_gate&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="WechatGate"&gt;WechatGate&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;微信公众平台开发库&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;支持的接口：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;access_token(后端 API 使用)&lt;/li&gt;
&lt;li&gt;用户授权信息获取 (OAuth2)&lt;/li&gt;
&lt;li&gt;JS-SDK&lt;/li&gt;
&lt;li&gt;回复消息封装&lt;/li&gt;
&lt;li&gt;菜单接口&lt;/li&gt;
&lt;li&gt;素材接口&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;功能特点：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;自动管理 access_token 和 JS-SDK 的 ticket 刷新和过期&lt;/li&gt;
&lt;li&gt;多微信公众号支持&lt;/li&gt;
&lt;li&gt;多环境支持 (development, production)，方便本地测试&lt;/li&gt;
&lt;li&gt;Controler 和 helper 方法 (微信 session 管理等等)&lt;/li&gt;
&lt;li&gt;接口简单，方便定制&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;使用视频教程：&lt;a href="https://eggman.tv/c/s-wechat-development-using-ruby-on-rails" rel="nofollow" target="_blank" title=""&gt;微信公众号开发&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="Installation"&gt;Installation&lt;/h2&gt;
&lt;p&gt;Add this line to your application's Gemfile:&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;gem&lt;/span&gt; &lt;span class="s1"&gt;'wechat-gate'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And then execute:&lt;/p&gt;

&lt;p&gt;$ bundle&lt;/p&gt;

&lt;p&gt;Or install it yourself as:&lt;/p&gt;

&lt;p&gt;$ gem install wechat-gate&lt;/p&gt;
&lt;h2 id="公众号"&gt;公众号&lt;/h2&gt;
&lt;p&gt;在开工之前你需要在微信公众账号平台做以下配置：&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;开通你的公众号（服务号），并开通微信认证（300 元认证服务费）&lt;/li&gt;
&lt;li&gt;在公众号后台“公众号设置” － “功能设置”中设置你的 JS 接口安全域名，就是你的公众号调用的网站的域名&lt;/li&gt;
&lt;li&gt;在“接口权限” － “网页授权获取用户基本信息”中设置你的授权回调页面域名，这个用于 OAuth2 的回调域名认证&lt;/li&gt;
&lt;li&gt;在“基本配置”中查看并配置你的 AppID 和 AppSecret&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="配置"&gt;配置&lt;/h2&gt;
&lt;p&gt;在 Rails 项目 config 目录下建立文件 wechat.yml，并配置你的公众号信息。&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# 区分不同的环境
eggman:
  development:
    host: http://wechat-test1.eggman.tv

    wechat_id: xxxxxxxxxx
    app_id: xxxxxxxxxx
    app_secret: xxxxxxxxxx

    oauth2_redirect_uri: "http://wechat-test1.eggman.tv/wechat/users/callback"

    push_url: "http://wechat-test1.eggman.tv/wechat/push"
    push_token: xxxxxxxxxxxxxxxxxxxx
  production:
    host: https://eggman.tv

    wechat_id: xxxxxxxxxx
    app_id: xxxxxxxxxxxxxxxxxxxx
    app_secret: xxxxxxxxxxxxxxxxxxxxxxxxxx

# 如果不需要多环境支持，也可以这样
app_name:
  app_id: &amp;lt;%= ENV['WECHAT_APP_NAME_APP_ID'] %&amp;gt;
  app_secret: &amp;lt;%= ENV['WECHAT_APP_NAME_APP_SECRET'] %&amp;gt;
  oauth2_redirect_uri: &amp;lt;%= ENV['WECHAT_APP_NAME_OAUTH2_REDIRECT_URI'] %&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然后在 ApplicationController 中指定当前要读取的公众号名称：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;self.wechat_gate_app_name = 'eggman'
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="后端调用"&gt;后端调用&lt;/h2&gt;
&lt;p&gt;后台 API 操作 (比如微信用户信息获取等等操作)。&lt;/p&gt;

&lt;p&gt;默认情况下在 controller 中已经初始化了配置，方法为&lt;strong&gt;wechat_gate_config&lt;/strong&gt;，直接使用就行。&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;wechat_gate_config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;users&lt;/span&gt; &lt;span class="c1"&gt;# 获取用户列表&lt;/span&gt;
&lt;span class="n"&gt;wechat_gate_config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;user&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'ONE_OPEN_ID'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# 获取一个用户的详细信息&lt;/span&gt;
&lt;span class="n"&gt;wechat_gate_config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;access_token&lt;/span&gt; &lt;span class="c1"&gt;# 获取当前access_token&lt;/span&gt;

&lt;span class="c1"&gt;# OAuth 2&lt;/span&gt;
&lt;span class="n"&gt;wechat_gate_config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;oauth2_entrance_url&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;scope: &lt;/span&gt;&lt;span class="s2"&gt;"snsapi_userinfo"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;state: &lt;/span&gt;&lt;span class="s2"&gt;"CURENT_STATE"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# 获取当前OAuth2授权入口URL&lt;/span&gt;
&lt;span class="n"&gt;wechat_gate_config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;oauth2_access_token&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"TOKEN"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# 根据OAuth2返回的TOKEN获取access_token&lt;/span&gt;
&lt;span class="n"&gt;wechat_gate_config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;oauth2_user&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"ACCESS_TOKEN"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"ONE_OPEN_ID"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# 获取一个用户的信息&lt;/span&gt;

&lt;span class="n"&gt;wechat_gate_config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;medias&lt;/span&gt; &lt;span class="c1"&gt;# 获取素材列表, 参数type: image | video | voice | news (图文)&lt;/span&gt;

&lt;span class="n"&gt;wechat_gate_config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;menu_get&lt;/span&gt; &lt;span class="c1"&gt;# 获取菜单&lt;/span&gt;
&lt;span class="n"&gt;wechat_gate_config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;menu_create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="no"&gt;MENU_HASH&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# 创建菜单&lt;/span&gt;

&lt;span class="n"&gt;wechat_gate_config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;generate_js_request_params&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="no"&gt;REFERER_URL&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# 返回JS-SDK的验证参数，供前端JS-SDK使用&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;当然你也可以手工来初始化配置，甚至指定配置文件的路径：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;config = WechatGate::Config.new('eggman', '/path/to/what/ever/you/want.yml')
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;access_token 和 JS_SDK 中 ticket 都有过期时间和刷新次数限制，这里已经考虑了，你可以不用管，如果你想手工刷新，可以这样：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;config.refresh_access_token
config.refresh_jsapi_ticket
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;配置文件支持 erb&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;更多接口和文档请直接看源码，写的很详细&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="JS-SDK"&gt;JS-SDK&lt;/h2&gt;&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;ticket&lt;/span&gt;
  &lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;CGI&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;unescape&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:url&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="c1"&gt;# 微信中用户访问的页面&lt;/span&gt;
  &lt;span class="vi"&gt;@data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;wechat_gate_config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;generate_js_request_params&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# 生成微信JS-SDK所需的jsapi_ticket，signature等等参数供前段js使用&lt;/span&gt;
  &lt;span class="n"&gt;render&lt;/span&gt; &lt;span class="ss"&gt;content_type: &lt;/span&gt;&lt;span class="s2"&gt;"application/javascript"&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ticket.js.erb:&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;var wxServerConfig = &amp;lt;%= @data.to_json.html_safe %&amp;gt;;
&amp;lt;%= params[:callback] %&amp;gt;();
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然后在微信端页面引入以下代码：&lt;/p&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;ticket&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createElement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;script&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;ticket&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;src&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;http://localhost/api/wechat_ticket/ticket.js?url=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nf"&gt;encodeURIComponent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;location&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;href&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;#&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;&amp;amp;callback=wxCallback&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;s&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElementsByTagName&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;script&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
  &lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;parentNode&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;insertBefore&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ticket&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;})();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="其他功能"&gt;其他功能&lt;/h2&gt;&lt;h3 id="自定义菜单"&gt;自定义菜单&lt;/h3&gt;
&lt;p&gt;首先设置菜单配置文件，config/wechat_menu.yml，支持 erb，格式请参考&lt;a href="https://mp.weixin.qq.com/wiki" rel="nofollow" target="_blank" title=""&gt;微信自定义菜单文档&lt;/a&gt;:&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;button:
  - type: view
    name: 我的2
    url: &amp;lt;%= @config.oauth2_entrance_url(scope: 'snsapi_userinfo', state: 'profile') %&amp;gt;
  - type: view
    name: 课程
    sub_button:
      - type: view
        name: 免费课程
        url:  &amp;lt;%= @config.oauth2_entrance_url(scope: 'snsapi_userinfo', state: 'free') %&amp;gt;
      - type: view
        name: 付费课程
        url:  &amp;lt;%= @config.oauth2_entrance_url(scope: 'snsapi_userinfo', state: 'paid') %&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;其中的 &lt;a href="/config" class="user-mention" title="@config"&gt;&lt;i&gt;@&lt;/i&gt;config&lt;/a&gt; 变量为当前微信公众号实例，请不要修改，直接使用&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;然后执行 rake 任务：&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$rails&lt;/span&gt; wechat_gate:create_menu &lt;span class="nv"&gt;APP_NAME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;eggman &lt;span class="nv"&gt;CONFIG&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/path/to/wechat.yml &lt;span class="nv"&gt;MENU&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/path/to/wechat_menu
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;其中，CONFIG 默认为 config/wechat.yml，MENU 默认为 config/wechat_menu.yml，APP_NAME 必须指定&lt;/p&gt;
&lt;h2 id="TODO"&gt;TODO&lt;/h2&gt;
&lt;p&gt;添加测试&lt;/p&gt;</description>
      <author>ccok</author>
      <pubDate>Wed, 22 Mar 2017 13:34:36 +0800</pubDate>
      <link>https://ruby-china.org/topics/32604</link>
      <guid>https://ruby-china.org/topics/32604</guid>
    </item>
    <item>
      <title>[已关闭，结果公布] 送几个蛋人网的订阅账号</title>
      <description>&lt;p&gt;为了感谢 Ruby China 社区，免费送出 5 个蛋人网 &lt;a href="https://eggman.tv" rel="nofollow" target="_blank"&gt;https://eggman.tv&lt;/a&gt; 的付费订阅账号，办法如下：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;回帖留言就行，不用事先在蛋人网注册账号&lt;/li&gt;
&lt;li&gt;截止时间 2017-03-09 18:00:00 (北京时区)&lt;/li&gt;
&lt;li&gt;通过我们的系统随机抽取&lt;/li&gt;
&lt;li&gt;抽取结果会在 2017-03-10 18:00:00 前公布，我们会在这里 @ 中奖的朋友&lt;/li&gt;
&lt;li&gt;中奖的同学 @ 我你在蛋人网账号的 Email 地址，我们会为你设置会员&lt;/li&gt;
&lt;li&gt;赠送会员时长为：15 天&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;保留最终解释权。&lt;/p&gt;</description>
      <author>ccok</author>
      <pubDate>Mon, 06 Mar 2017 11:52:08 +0800</pubDate>
      <link>https://ruby-china.org/topics/32455</link>
      <guid>https://ruby-china.org/topics/32455</guid>
    </item>
    <item>
      <title>基于 Rails 5 的 B2C 电商开源项目</title>
      <description>&lt;p&gt;Demo 地址：&lt;a href="http://rails5-b2c.eggman.tv/" rel="nofollow" target="_blank"&gt;http://rails5-b2c.eggman.tv/&lt;/a&gt;&lt;br&gt;
源码地址：&lt;a href="https://github.com/eggmantv/master_rails_by_actions" rel="nofollow" target="_blank"&gt;https://github.com/eggmantv/master_rails_by_actions&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;这个项目离真正的线上使用还差得远，毕竟只是技术目的的教学使用，如果有哪位朋友想把它真的做到线上使用的程度的话，欢迎联系我，对于我来说精力可能不够了&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;该项目主要是我们自己开发的用于教学目的一个开源项目，项目基于 Rails 5，实现的功能就是传统的 B2C 电商平台中常用的功能，包括：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;用户注册登录（支持手机验证码或者邮箱）&lt;/li&gt;
&lt;li&gt;购物车&lt;/li&gt;
&lt;li&gt;收货地址&lt;/li&gt;
&lt;li&gt;订单&lt;/li&gt;
&lt;li&gt;支付（集成了支付宝支付功能）&lt;/li&gt;
&lt;li&gt;后台管理功能（涵盖商品管理，商品图片，一二级分类）&lt;/li&gt;
&lt;li&gt;前台其他相关功能（比如商品搜索，分类页面，单品页，用户中心）&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;项目使用技术：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt; ruby 2.3&lt;/li&gt;
&lt;li&gt;rails 5 &lt;/li&gt;
&lt;li&gt;mysql&lt;br&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;前台框架：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;bootstrap &lt;/li&gt;
&lt;li&gt;font-awesome&lt;br&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;涉及到的主要 Gem: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;sorcery &lt;/li&gt;
&lt;li&gt;ancestry &lt;/li&gt;
&lt;li&gt;paperclip &lt;/li&gt;
&lt;li&gt;rest-client &lt;/li&gt;
&lt;li&gt;rspec&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;适用对象：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;想从产品或者技术角度学习电商平台核心功能的同学&lt;/li&gt;
&lt;li&gt;ruby 和 rails 已经入门的同学&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;项目地址：&lt;a href="https://github.com/eggmantv/master_rails_by_actions" rel="nofollow" target="_blank"&gt;https://github.com/eggmantv/master_rails_by_actions&lt;/a&gt;&lt;/p&gt;</description>
      <author>ccok</author>
      <pubDate>Wed, 22 Feb 2017 13:55:32 +0800</pubDate>
      <link>https://ruby-china.org/topics/32359</link>
      <guid>https://ruby-china.org/topics/32359</guid>
    </item>
    <item>
      <title>在线培训的收费模式</title>
      <description>&lt;p&gt;之前发过一个帖子是介绍我们的 Ruby 和 Rails 在线培训项目蛋人网 &lt;a href="http://eggman.tv" rel="nofollow" target="_blank"&gt;http://eggman.tv&lt;/a&gt;, 目前线上培训收费模式基本就是两种，一种每个课程单独收费的（比如国内的慕课网和极客学院），一种就是订阅的方式（railscast，egghead 等等）,也有两种结合的；我们目前是采用的订阅方式，但是有很多同学反映说还是单独课件收费比较好，选择更灵活；同时我们自身也在考虑转变成按课件收费的方式，因为我们的课件覆盖面拉宽的话，确实对不同的人有更多的选择空间，比如有的同学对 Ruby 就不感兴趣，只想看 Rails 的课程。&lt;/p&gt;

&lt;p&gt;不知道大家对这两种收费方式怎么看？谢谢！&lt;/p&gt;</description>
      <author>ccok</author>
      <pubDate>Thu, 17 Nov 2016 11:16:07 +0800</pubDate>
      <link>https://ruby-china.org/topics/31618</link>
      <guid>https://ruby-china.org/topics/31618</guid>
    </item>
    <item>
      <title>Ruby 中 Singleton 方法的另一种理解方式</title>
      <description>&lt;p&gt;Ruby 中的 Singleton 方法是 Ruby 中一个重要的知识点，也是做 Ruby 元编程的一个重要技巧。
简单的说就是在 Ruby 中任何自定义类都是 Class 这个类的一个实例，所以 Singleton 方法其实就是一个实例所拥有的方法，比如：&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"hi"&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nc"&gt;a&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;you&lt;/span&gt;
  &lt;span class="s2"&gt;"hi,  you"&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;you&lt;/span&gt; &lt;span class="c1"&gt;# =&amp;gt; hi, you&lt;/span&gt;

&lt;span class="s2"&gt;"hello"&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;you&lt;/span&gt; &lt;span class="c1"&gt;# =&amp;gt; undefined method 'you'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;上面的 a.you 方法就是 a 这个字符串实例的 Singleton Method。&lt;/p&gt;

&lt;p&gt;同样如果拿我们最熟悉的类举例子的话就是：&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;A&lt;/span&gt;
  &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nc"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;hi&lt;/span&gt;
    &lt;span class="s1"&gt;'hi A'&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="no"&gt;A&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;hi&lt;/span&gt; &lt;span class="c1"&gt;# =&amp;gt; hi A&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;上面的定义方法所有的同学应该都知道，其实就是类方法的定义，在 Ruby 中类方法其实就是类的 Singleton Method，就像上面说的因为 A 也是 Class 这个类的一个实例（通过 A.class 就可以知道），所以，其实上面的方法也可以这样定义：&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;A&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nc"&gt;A&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;hi&lt;/span&gt;
  &lt;span class="s1"&gt;'hi A'&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="no"&gt;A&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;hi&lt;/span&gt; &lt;span class="c1"&gt;# =&amp;gt; hi A&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这样的话，就和上面字符串 a 的效果一样，就更容理解了。
所以关键是理解我们所定义的类也是 Class 这个类的一个实例，这是关键。&lt;/p&gt;

&lt;hr&gt;

&lt;p&gt;其实我想说的，下面才是关键，&lt;/p&gt;

&lt;p&gt;蛋人网 &lt;a href="http://eggman.tv" rel="nofollow" target="_blank"&gt;http://eggman.tv&lt;/a&gt; 的最新系列大课程已经开坑了，从今天开始会陆续更新，第一节视频课件已经放出，免费的，&lt;a href="http://eggman.tv/c/s-ruby-meta-programming" rel="nofollow" target="_blank"&gt;http://eggman.tv/c/s-ruby-meta-programming&lt;/a&gt; ，计划每周更新两期，上面讲述的是课件一部分内容，我们计划会在整个课件中为大家讲述：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ruby 基础类结构&lt;/li&gt;
&lt;li&gt;Module Mixin 设计模式&lt;/li&gt;
&lt;li&gt;instance_eval 和 class_eval 的使用，以及&lt;em&gt;_eval 类和&lt;/em&gt;_exec 类的区别&lt;/li&gt;
&lt;li&gt;Singleton 方法的原理和各种使用场景&lt;/li&gt;
&lt;li&gt;ActiveSuppot::Concern 的实现原理&lt;/li&gt;
&lt;li&gt;define_method &amp;amp; method_missing&lt;/li&gt;
&lt;li&gt;Block 的进阶使用&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;等等众多深入内容的讲解，当然还包括众多的实例演示和如何使用这些高级技巧，欢迎各位大哥大嫂前来支持。&lt;/p&gt;</description>
      <author>ccok</author>
      <pubDate>Wed, 19 Oct 2016 10:04:23 +0800</pubDate>
      <link>https://ruby-china.org/topics/31374</link>
      <guid>https://ruby-china.org/topics/31374</guid>
    </item>
    <item>
      <title>关于 Ruby 的线上视频培训</title>
      <description>&lt;p&gt;我们 Rails 5 源码分析的课程也开坑了，欢迎大家提意见 &lt;a href="http://eggman.tv/c/s-digging-into-rails-5-source-code" rel="nofollow" target="_blank"&gt;http://eggman.tv/c/s-digging-into-rails-5-source-code&lt;/a&gt;&lt;/p&gt;

&lt;hr&gt;

&lt;p&gt;目前国内做线上技术培训的不在少数，知名的也有很多，但是基本都是大而全的，而且定位大都是初中级水平，半年前和几个做技术的朋友计划搞一个面向中高级水平的线上培训，因为我自己做 Ruby 有近 10 年了，因此我们的定位就是 Ruby, Rails 和 Web 开发方面的，模式就是采用类似于 railscast 的方式，定期推出视频课件，有付费和免费的，以后的内容会扩展到 mongodb，erlang 和 react。&lt;/p&gt;

&lt;p&gt;我们的项目最近上线了 &lt;a href="http://eggman.tv" rel="nofollow" target="_blank"&gt;http://eggman.tv&lt;/a&gt; 蛋人网，目前里面主推的有两个大课程，一个是 Ruby 高级开发，一个是 Rails 高级开发，都相对全面和深入的讲解了 Ruby 和 Rails，以后每周会定期推出新的技术视频。&lt;/p&gt;

&lt;p&gt;程序员创业，希望大家能多多支持提意见，有想法的朋友也可以联系我 mytake6@gmail.com&lt;/p&gt;

&lt;hr&gt;

&lt;p&gt;&lt;strong&gt;关于网站名称和设计&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;有朋友说蛋人网这个名称听着蛋疼（有超人为什么不能有蛋人？你说!），其实我们是先想的中文名字后定的英文名字，当时想中文名字时定位就是想胡逼点，不要那么正式，以后我们会推出比如程序员采访此类的视频，走胡逼恶搞的风格，当然技术类的视频都是严谨装 B 的，都是搞程序的，何必整天那么学院派呢，这是我们理想的发展方向。网站设计参考（或者抄袭）了 teamtreehouse 和 egghead，程序员做设计，天生残废，只要不丑我们就对得起观众了。我们前期重视的是内容，内容做好了，再说设计。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;关于 Ruby 和 Rails 的课程&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;rails 和各种 gem 再深奥也是基于 ruby 的灵活的，这个大家可以看下 Ruby 课程中讲解 class 和 module 的相关的几节课，相信会对理解 rails 的源码有帮助；目前的课程中尤其是 rails 的大课程中我们并没有采用第三方的 gem 来完成演示项目的功能，除了分页的采用的是 will_paginate 之外，其它的都是 rails 默认依赖的 gem，目的就是想原生的来给大家讲解怎么手工实现一些基础的功能，用 gem 的话几步就搞了，达不到培训的目的；当然以后我们肯定也会专门有课程给大家讲 gem 的使用，毕竟公司更在乎的是效率。&lt;/p&gt;

&lt;p&gt;基础方面的内容 ruby 估计以后不会再有基础方面的课件了，rails 的话应该还有，目前大家可以参考 &lt;a href="http://eggman.tv/c/s-ruby-advanced" rel="nofollow" target="_blank"&gt;http://eggman.tv/c/s-ruby-advanced&lt;/a&gt; 和 &lt;a href="http://eggman.tv/c/s-rails-advanced" rel="nofollow" target="_blank"&gt;http://eggman.tv/c/s-rails-advanced&lt;/a&gt; 这两个系列课程，都是从 ruby 和 rails 的基础开始说的，比较全面，我相信即使你有多年 ruby/rails 使用经验，也能有新的收获，不过还是需要你有其它编程语言的基础，我们总体课程以后的发展计划是基础的只会有 20% 不到的比例。&lt;/p&gt;

&lt;p&gt;以后我们会有专门的系列课程来分析 rails 和各种设计比较好的 gem 的源码，敬请期待。&lt;/p&gt;

&lt;p&gt;另外给使用 rails 或者其它框架的同学一些建议，一定要静下心来把 ruby 系统的好好学习一遍，理解透，这样你在 rails 或者各种 gem 中就能得心应手。&lt;/p&gt;</description>
      <author>ccok</author>
      <pubDate>Mon, 10 Oct 2016 10:39:59 +0800</pubDate>
      <link>https://ruby-china.org/topics/31275</link>
      <guid>https://ruby-china.org/topics/31275</guid>
    </item>
    <item>
      <title>[关闭][南阳] 创业公司招聘 Ruby On Rails 开发工程师 /  互联网产品经理 / 前端开发工程师 15k+</title>
      <description>&lt;h3 id="工作地点"&gt;工作地点&lt;/h3&gt;
&lt;p&gt;南水北调的源头南阳，诸葛亮、张仲景、张衡和商圣范蠡的故乡。地处中原，河南经济排名前三的历史文化名城，这里风景秀丽，北有世界地质公园，西有恐龙遗址、漂流和五 A 级景区龙潭沟、老君洞，东南有水帘洞和数不清的景点，天然的盆地。水资源极其丰富，是个理想的宜居之地！&lt;/p&gt;
&lt;h3 id="项目"&gt;项目&lt;/h3&gt;
&lt;p&gt;项目是做石材类的垂直类 B2B2C 多用户网站，类似于天猫，涵盖的内容会比较多，比如平台本身，物流，线下体验店等等。
再说说出资人，出资人是南阳本地人，是个矿老板，资金不是问题，楼主已经接触好多次了，而且相比其他来自传统行业的老板，比较容易能够听取别人的意见，比较好沟通，不会让技术到时候太为难。&lt;/p&gt;
&lt;h3 id="薪水"&gt;薪水&lt;/h3&gt;
&lt;p&gt;薪水是一线城市的水平，中级职位在 5k - 15k，高级职位在 15k+，相信在一线城市工作的朋友应该知道这个价位应该是不错的了。&lt;/p&gt;
&lt;h3 id="职位"&gt;职位&lt;/h3&gt;
&lt;p&gt;Ruby on Rails 开发工程师
精通 Ruby, Ruby on Rails,
精通 HTML, CSS3, HTML5, Javascript, jQuery，
熟悉 MySQL, 查询优化，事务，锁机制等等，
有独立开发整站的经验，
开发环境必须为 Mac 或者 Linux，
熟悉 Git。&lt;/p&gt;

&lt;p&gt;互联网产品经理
3 年以上互联网产品设计经验，
对需求分析和原型设计有丰富的经验，
对互联网电子商务有丰富的经验，
熟悉目前主流电商平台用户流程和体验，
在 UE 方面有丰富的经验，
熟悉常用的 prototype 原型设计工具，比如 Sketch / Axure。&lt;/p&gt;

&lt;p&gt;前端开发工程师
精通 Javascript, HTML5, CSS3，
熟悉 WEB 标准，浏览器兼容性，
熟悉 jQuery，bootstrap 等常用 js, css 库，
熟悉 AJAX, JSON 等技术，能够配合后端工程师实现业务逻辑，
有整站开发经验，
熟悉 Git。&lt;/p&gt;
&lt;h3 id="福利"&gt;福利&lt;/h3&gt;
&lt;p&gt;三险一金正常缴纳。
年终奖金。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;中高级职位都在招人，互联网产品经理，UI 设计也在招人。&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;尤其老家是河南或者南阳的朋友，如果想回老家这是个不错的契机，欢迎和楼主联系。&lt;/p&gt;

&lt;p&gt;邮箱：rockllei@live.com
也可以加我 qq 或者微信：113053482，请注明“应聘”&lt;/p&gt;

&lt;p&gt;谢谢！&lt;/p&gt;</description>
      <author>ccok</author>
      <pubDate>Tue, 07 Jul 2015 13:48:46 +0800</pubDate>
      <link>https://ruby-china.org/topics/26361</link>
      <guid>https://ruby-china.org/topics/26361</guid>
    </item>
  </channel>
</rss>
