<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>jex (Jex)</title>
    <link>https://ruby-china.org/jex</link>
    <description>I'm Jex.</description>
    <language>en-us</language>
    <item>
      <title>如何把网络上的负能量转化成正能量？</title>
      <description>&lt;p&gt;受 PGP Message 和 &lt;a href="https://en.wikipedia.org/wiki/ROT13" rel="nofollow" target="_blank" title=""&gt;ROT13&lt;/a&gt;启发，无聊的我写了这个小玩具：&lt;a href="https://github.com/CJex/ShunEncode" rel="nofollow" target="_blank" title=""&gt;ShunEncode - 巷议&lt;/a&gt; ，它可以让网络充满正能量！
有了 ShunEncode，不管你放什么屁，它都能将其转化成正能量！
&lt;strong&gt;这可能是目前最经济最高效最节能环保的将负能量转化成正能量的方法！&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;立即免费在线体验：&lt;a href="https://jex.im/ShunEncode/" rel="nofollow" target="_blank"&gt;https://jex.im/ShunEncode/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;你们不准笑我！
正强会优满亲财泰雄优满倩核七妮感弘禄才福珍福长想适想值七惠足升会饭足想妮烈馨志首弘足宽七昭广赞操易贡强&lt;/p&gt;</description>
      <author>jex</author>
      <pubDate>Sun, 22 Mar 2015 15:46:16 +0800</pubDate>
      <link>https://ruby-china.org/topics/24778</link>
      <guid>https://ruby-china.org/topics/24778</guid>
    </item>
    <item>
      <title>中文互联网有没有类似 ROT13 这样的东西？</title>
      <description>&lt;p&gt;就是 &lt;a href="https://en.wikipedia.org/wiki/ROT13" rel="nofollow" target="_blank" title=""&gt;ROT13&lt;/a&gt; ，只适合英文。中文互联网上有出现过类似的东西吗？&lt;/p&gt;

&lt;p&gt;火星文不算&lt;/p&gt;

&lt;hr&gt;

&lt;p&gt;我自己做了一个玩儿：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://ruby-china.org/topics/24778" rel="nofollow" target="_blank"&gt;https://ruby-china.org/topics/24778&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://jex.im/ShunEncode/" rel="nofollow" target="_blank"&gt;http://jex.im/ShunEncode/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <author>jex</author>
      <pubDate>Mon, 09 Mar 2015 15:34:14 +0800</pubDate>
      <link>https://ruby-china.org/topics/24543</link>
      <guid>https://ruby-china.org/topics/24543</guid>
    </item>
    <item>
      <title>分享两个博客，其中有提到两个重要的安全漏洞</title>
      <description>&lt;p&gt;其它 Ruby 博客我都没订阅过，只有这两个。
一个是 &lt;a href="http://codon.com/" rel="nofollow" target="_blank"&gt;http://codon.com/&lt;/a&gt;  ，《Understanding Computation in Ruby》作者（镐头书是神马？我没读过）。&lt;/p&gt;

&lt;p&gt;一个是 &lt;a href="http://cirw.in/" rel="nofollow" target="_blank"&gt;http://cirw.in/&lt;/a&gt; ，一年前我就看到他讲了 Node's Unicode Dragon：&lt;a href="http://cirw.in/blog/node-unicode" rel="nofollow" target="_blank"&gt;http://cirw.in/blog/node-unicode&lt;/a&gt; 
当时我好奇就用这个去测试下 RubyChina，一不小心把 topics 页面搞挂后只好向 &lt;a href="/lgn21st" class="user-mention" title="@lgn21st"&gt;&lt;i&gt;@&lt;/i&gt;lgn21st&lt;/a&gt; 认错 TOT。这个不算多大的安全漏洞，但把网站搞挂是轻轻松松的，我估计像薄荷网之类的都没有修复这个问题。&lt;/p&gt;

&lt;p&gt;很早前他也提到了 Avoiding MongoDB hash-injection attacks：&lt;a href="http://cirw.in/blog/hash-injection" rel="nofollow" target="_blank"&gt;http://cirw.in/blog/hash-injection&lt;/a&gt;
原来 RubyChina 也用 MongoDB 啊，直到今天才中枪：&lt;a href="https://ruby-china.org/topics/23093" rel="nofollow" target="_blank"&gt;https://ruby-china.org/topics/23093&lt;/a&gt;
漏洞详情：&lt;a href="http://wooyun.org/bugs/wooyun-2014-086474" rel="nofollow" target="_blank"&gt;http://wooyun.org/bugs/wooyun-2014-086474&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;国内安全社区 Wooyun 公布这个漏洞已经迟了快一年了：&lt;a href="http://drops.wooyun.org/tips/3939" rel="nofollow" target="_blank"&gt;http://drops.wooyun.org/tips/3939&lt;/a&gt;
PS：我想起今年 Wooyun 上热议的另一个 Flash 漏洞：&lt;a href="http://drops.wooyun.org/papers/1426" rel="nofollow" target="_blank"&gt;http://drops.wooyun.org/papers/1426&lt;/a&gt; ，支付宝也躺枪。其实早在&lt;a href="http://lcamtuf.blogspot.com/2011/03/other-reason-to-beware-of.html" rel="nofollow" target="_blank" title=""&gt;几年前就有人反馈过 ExternalInterface.call 安全漏洞&lt;/a&gt; ，只是奇葩的 Adobe 不肯修复。&lt;/p&gt;

&lt;p&gt;最后，广告时间：
&lt;a href="https://github.com/CJex/PlainSite" rel="nofollow" target="_blank" title=""&gt;PlainSite: A Truly Hackable Static Site Generator!&lt;/a&gt;（&lt;a href="https://ruby-china.org/topics/22876" rel="nofollow" target="_blank"&gt;https://ruby-china.org/topics/22876&lt;/a&gt;）&lt;/p&gt;

&lt;p&gt;&lt;a href="https://jex.im/" rel="nofollow" target="_blank"&gt;https://jex.im/&lt;/a&gt;&lt;/p&gt;</description>
      <author>jex</author>
      <pubDate>Tue, 09 Dec 2014 12:53:12 +0800</pubDate>
      <link>https://ruby-china.org/topics/23103</link>
      <guid>https://ruby-china.org/topics/23103</guid>
    </item>
    <item>
      <title>PlainSite：A Truly Hackable Static Site Generator！</title>
      <description>&lt;p&gt;PlainSite: A Simple but Truly Hackable  Static Site Generator 
&lt;a href="https://github.com/CJex/PlainSite" rel="nofollow" target="_blank"&gt;https://github.com/CJex/PlainSite&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;这个项目其实是去年做的，当时没时间推广。之前看到某 Python 静态站点生成器还特地强调不仅是生成博客而是 &lt;strong&gt;Site&lt;/strong&gt; ，我就低调不下去了。 &lt;strong&gt;PlainSite&lt;/strong&gt; 虽然功能简单，但却具有无限的扩展性，理论上可以生成分类任意复杂的静态站点（只要你会写 Ruby）。没人用太可惜。&lt;/p&gt;

&lt;p&gt;下载运行也和 Jekyll 差不多，&lt;code&gt;gem install PlainSite&lt;/code&gt;，&lt;code&gt;plainsite init&lt;/code&gt;，&lt;code&gt;plainsite build&lt;/code&gt;。支持 Markdown，也用了 FrontMatter 格式。
我先列举下它的亮点：&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;配合 Git，可以只生成更新的文章对应的页面，而不用每次都重新生成整个站点。我记得以前谁说用 Octpress 要是本地 build 话，硬盘卡卡响。PlainSite 可以通过&lt;code&gt;git status&lt;/code&gt;读取哪些文件被修改过，只生成修改过的 Post 相关的 HTML 页面，不会每次都重新生成整个站点。（&lt;code&gt;plainsite build -a&lt;/code&gt;可以重新生成整个）&lt;/li&gt;
&lt;li&gt; 采用 LazyLoad，仅读取需要用到的数据文件。进一步减少硬盘文件读取。&lt;/li&gt;
&lt;li&gt;可以使输出页面中只包含相对路径的 URL，这样站点可以不需要 Web 服务器直接用 File 协议浏览。执行&lt;code&gt;plainsite build -l&lt;/code&gt;就生成一个 local 站点，直接在文件管理器中打开就能浏览。当然 PlainSite 也内置了一个实时预览用的 WebServer，修改文件不需要重启。&lt;/li&gt;
&lt;li&gt;自动清除已被删除文章相应的页面。PlainSite 需要把所有不由它管理的静态文件放到&lt;code&gt;_src/assets&lt;/code&gt;下面，这样它就可以自动删除孤立的文章页面。你删除了某文章，生成的页面也能自动清理。&lt;/li&gt;
&lt;li&gt;分页实在太简单了，下面提到 API 时再说。另外分面列表页面的文件名也作了优化，当有新文章时只需重新生成首页。&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;好了，上面的亮点其实是次要的。最主要的是，PlainSite 是一个 Framework，提供了一套 API，而且这套 API 和 MVC 框架很相近。首先是数据管理，在站点&lt;code&gt;_src/data&lt;/code&gt;目录下，相当一个文件数据库，一个目录表示一个 Category，类似于数据库中的 Table，一个 Markdown 或 HTML 文件表示一个 Post，相应于数据库中一条记录。
如何查询呢？Ruby DSL 的强大体现出来了。
读取 news 目录下的所有 Post，相当于 SQL：&lt;code&gt;SELECT * FROM news&lt;/code&gt;&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="vg"&gt;$site&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;data&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="ss"&gt;:news&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="s1"&gt;'*'&lt;/span&gt;  &lt;span class="c1"&gt;# 返回PlainSite::Data::PostList 对象&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;你要文章置顶功能？&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="vg"&gt;$site&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;data&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="ss"&gt;:news&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="s1"&gt;'*'&lt;/span&gt; &lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;order_by&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="ss"&gt;:top&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;对应在&lt;code&gt;_src/data/news/&lt;/code&gt;目录下的 Post 文件中就写：&lt;/p&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;---
title: Today Top News－Wall down
top: true
---
这里是正文内容

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;你要分页？好，按每页 5 条分页&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="vg"&gt;$site&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;data&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="ss"&gt;:news&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="s1"&gt;'*'&lt;/span&gt;  &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;  &lt;span class="c1"&gt;# 返回 [PlainSite::Data::PostListPage]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;可这数据拿出来又怎么使用呢？对应于 MVC 中的 URL Router，在&lt;code&gt;_src/data/routes.rb&lt;/code&gt;：&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="vg"&gt;$site&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;route&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="ss"&gt;url_pattern: &lt;/span&gt;&lt;span class="s2"&gt;"/{date}-top-news-{title}.html"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
  &lt;span class="ss"&gt;data: &lt;/span&gt;&lt;span class="vg"&gt;$site&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;data&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="ss"&gt;:news&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="s1"&gt;'*'&lt;/span&gt; &lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="ss"&gt;template: &lt;/span&gt;&lt;span class="s1"&gt;'news-list.html'&lt;/span&gt;  
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;上面的代码其实就相当于以 PostList 中每篇 Post 为 Context 去 Render &lt;code&gt;news-list.html&lt;/code&gt;这个模板，URL 模式中用 Post 的属性值去替换。&lt;/p&gt;

&lt;p&gt;那接下来就是模板，PlainSite 使用 ERB，扩展支持 include 和 layout，例如：&lt;/p&gt;
&lt;pre class="highlight erb"&gt;&lt;code&gt;---
layout: base.html   # 相对于当前模板文件的路径
---
&lt;span class="cp"&gt;&amp;lt;%&lt;/span&gt; &lt;span class="n"&gt;content_for&lt;/span&gt; &lt;span class="ss"&gt;:page_title&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;
  &lt;span class="cp"&gt;&amp;lt;%=&lt;/span&gt;&lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt; - &lt;span class="cp"&gt;&amp;lt;%=&lt;/span&gt;&lt;span class="n"&gt;site&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;name&lt;/span&gt; &lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;
&lt;span class="cp"&gt;&amp;lt;%&lt;/span&gt; &lt;span class="k"&gt;end&lt;/span&gt; &lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;
&lt;span class="cp"&gt;&amp;lt;%&lt;/span&gt; &lt;span class="n"&gt;content_for&lt;/span&gt; &lt;span class="ss"&gt;:page_content&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;h1&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;&amp;lt;%=&lt;/span&gt;&lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;Date：&lt;span class="cp"&gt;&amp;lt;%=&lt;/span&gt;&lt;span class="n"&gt;date&lt;/span&gt;&lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
  &lt;span class="cp"&gt;&amp;lt;%=&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;hr&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;

  Use site.url_for to get url,so it can be affected by 'plainsite build --local',results in relative url.
  &lt;span class="cp"&gt;&amp;lt;%=&lt;/span&gt;&lt;span class="n"&gt;site&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;url_for&lt;/span&gt; &lt;span class="s1"&gt;'essays/hello'&lt;/span&gt; &lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;

  Also support includes.
  &lt;span class="cp"&gt;&amp;lt;%=&lt;/span&gt;&lt;span class="kp"&gt;include&lt;/span&gt; &lt;span class="s1"&gt;'footer.html'&lt;/span&gt; &lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;
&lt;span class="cp"&gt;&amp;lt;%&lt;/span&gt; &lt;span class="k"&gt;end&lt;/span&gt; &lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;base.html 文件内容：&lt;/p&gt;
&lt;pre class="highlight erb"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;&amp;lt;%=&lt;/span&gt;&lt;span class="k"&gt;yield&lt;/span&gt; &lt;span class="ss"&gt;:page_title&lt;/span&gt;&lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
  &lt;span class="cp"&gt;&amp;lt;%=&lt;/span&gt;&lt;span class="k"&gt;yield&lt;/span&gt; &lt;span class="ss"&gt;:page_content&lt;/span&gt;&lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;好了，MVC 齐全了。但强大在什么地方呢？强大的不是 PlainSite 而是你会 Ruby！因为&lt;code&gt;routes.rb&lt;/code&gt;就是一个 Ruby Script。所以：&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="c1"&gt;# 给每个分类都生成一个列表页面&lt;/span&gt;
&lt;span class="c1"&gt;# $site.data.subs 是子目录,返回 Category[]&lt;/span&gt;
&lt;span class="vg"&gt;$site&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;subs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;each&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;category&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
  &lt;span class="vg"&gt;$site&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;route&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="ss"&gt;url_pattern: &lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;category&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/{slug}.html"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="c1"&gt;# category.posts/5 means category.posts.paginate(page_size:5)&lt;/span&gt;
    &lt;span class="c1"&gt;# return PostListPage[]&lt;/span&gt;
    &lt;span class="ss"&gt;data: &lt;/span&gt;&lt;span class="n"&gt;category&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;posts&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;# category.posts is same as category / '*'  .&lt;/span&gt;
    &lt;span class="ss"&gt;template: &lt;/span&gt;&lt;span class="s1"&gt;'list.html'&lt;/span&gt;
  &lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="c1"&gt;# 要RSS？&lt;/span&gt;
&lt;span class="vg"&gt;$site&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;route&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="ss"&gt;url_pattern: &lt;/span&gt;&lt;span class="s1"&gt;'rss.xml'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="ss"&gt;data: &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="ss"&gt;posts: &lt;/span&gt;&lt;span class="vg"&gt;$site&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;data&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="s1"&gt;'**'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="c1"&gt;# RubyChina代码高亮补丁：/&lt;/span&gt;
  &lt;span class="ss"&gt;template: &lt;/span&gt;&lt;span class="s1"&gt;'rss.erb'&lt;/span&gt;  &lt;span class="c1"&gt;# rss.erb在PlainSite中已经内置，`plainsite init`会自动生成这个文件&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;#你要给每个分类单独生成一个RSS？&lt;/span&gt;
&lt;span class="vg"&gt;$site&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;subs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;each&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;category&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
  &lt;span class="vg"&gt;$site&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;route&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="ss"&gt;url_pattern: &lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;category&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/{slug}-rss.xml"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="ss"&gt;:category&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="ss"&gt;template: &lt;/span&gt;&lt;span class="s1"&gt;'category-rss.html'&lt;/span&gt;
  &lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;而且模板是 ERB，你想怎么搞就怎么搞：&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="c1"&gt;# routes.rb 中写&lt;/span&gt;
&lt;span class="vg"&gt;$site&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;route&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
   &lt;span class="n"&gt;url_pattern&lt;/span&gt;&lt;span class="ss"&gt;:'jobs'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
   &lt;span class="ss"&gt;data: &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;jobs&lt;/span&gt;&lt;span class="p"&gt;:(&lt;/span&gt;&lt;span class="vg"&gt;$site&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;data&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="ss"&gt;:jobs&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="s1"&gt;'*'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;order_by&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="ss"&gt;:pay_money&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;  &lt;span class="c1"&gt;#按付的钱排序&lt;/span&gt;
   &lt;span class="ss"&gt;template: &lt;/span&gt;&lt;span class="s1"&gt;'jobs.html'&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然后&lt;code&gt;jobs.html&lt;/code&gt;:&lt;/p&gt;
&lt;pre class="highlight erb"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;%&lt;/span&gt;&lt;span class="n"&gt;jobs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;each&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;job&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;
   &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;&amp;lt;%=&lt;/span&gt;&lt;span class="n"&gt;job&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;title&lt;/span&gt;&lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
&lt;span class="cp"&gt;&amp;lt;%&lt;/span&gt;&lt;span class="k"&gt;end&lt;/span&gt;&lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;好了，明白了吧，意思就是只要你会写代码，那它扩展性是无限的。
Who choosed PlainSite？好吧，其实只有我自己一个人在用：&lt;a href="https://jex.im/" rel="nofollow" target="_blank"&gt;https://jex.im/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;另外我告诉你们一个网站：&lt;a href="https://staticsitegenerators.net/" rel="nofollow" target="_blank"&gt;https://staticsitegenerators.net/&lt;/a&gt;  ，想用哪个随便挑&lt;/p&gt;</description>
      <author>jex</author>
      <pubDate>Wed, 26 Nov 2014 11:37:26 +0800</pubDate>
      <link>https://ruby-china.org/topics/22876</link>
      <guid>https://ruby-china.org/topics/22876</guid>
    </item>
  </channel>
</rss>
