<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>jiyinyiyong (题叶)</title>
    <link>https://ruby-china.org/jiyinyiyong</link>
    <description>题叶</description>
    <language>en-us</language>
    <item>
      <title>友邻社区线上活动, 请到 justjavac 来做 AMA, 欢迎参与</title>
      <description>&lt;p&gt;React 中文论坛上请到了 JavaScript 的 justjavac 来回答各种问题：&lt;a href="http://react-china.org/t/justjavac/20694" rel="nofollow" target="_blank" title=""&gt;我是 justjavac，可以来问我任何问题&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;justjavac（迷渡），知名前端开发工程师，极客，辍学生，曾在 GDG、TFC、D-Day 等进行过多次前端技术分享。正在出版《代码之谜》。JSON API 中文规范维护者，Flaurm 中文社区创始人。平时混迹于 GitHub，参与众多开源项目。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;欢迎前来参与~&lt;/p&gt;</description>
      <author>jiyinyiyong</author>
      <pubDate>Wed, 25 Apr 2018 10:02:08 +0800</pubDate>
      <link>https://ruby-china.org/topics/35526</link>
      <guid>https://ruby-china.org/topics/35526</guid>
    </item>
    <item>
      <title>luna 语言, 看上去挺好玩的</title>
      <description>&lt;p&gt;&lt;a href="https://github.com/tj/luna" rel="nofollow" target="_blank"&gt;https://github.com/tj/luna&lt;/a&gt;&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def greet(name:string)
  return "Hello " + name
end
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ruby 语法加类型...&lt;/p&gt;</description>
      <author>jiyinyiyong</author>
      <pubDate>Sun, 06 Mar 2016 11:29:22 +0800</pubDate>
      <link>https://ruby-china.org/topics/29224</link>
      <guid>https://ruby-china.org/topics/29224</guid>
    </item>
    <item>
      <title>Clojure 中文社区的地址</title>
      <description>&lt;p&gt;地址 &lt;a href="http://clojure-china.org/" rel="nofollow" target="_blank"&gt;http://clojure-china.org/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Discourse 不好改，不然就求友链了.
对 Clojure 跟 ClojureScript 感兴趣的同学欢迎来交流。&lt;/p&gt;</description>
      <author>jiyinyiyong</author>
      <pubDate>Fri, 21 Aug 2015 13:32:10 +0800</pubDate>
      <link>https://ruby-china.org/topics/27017</link>
      <guid>https://ruby-china.org/topics/27017</guid>
    </item>
    <item>
      <title>一个 Crystal 语言分享视频</title>
      <description>&lt;p&gt;从 Youtube 上扒了视频下来看了下，顺便传土豆上..
&lt;a href="http://www.tudou.com/programs/view/IJ322jFIpPo/" rel="nofollow" target="_blank"&gt;http://www.tudou.com/programs/view/IJ322jFIpPo/&lt;/a&gt;
没看有写多少类型声明，性能真的已经接近 C 了，有点震撼..
官网 &lt;a href="http://crystal-lang.org/" rel="nofollow" target="_blank"&gt;http://crystal-lang.org/&lt;/a&gt;&lt;/p&gt;</description>
      <author>jiyinyiyong</author>
      <pubDate>Sun, 26 Jul 2015 22:34:03 +0800</pubDate>
      <link>https://ruby-china.org/topics/26653</link>
      <guid>https://ruby-china.org/topics/26653</guid>
    </item>
    <item>
      <title>[链接] Consider static typing</title>
      <description>&lt;p&gt;先看介绍：&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Matz announced in his RubyConf 2014 keynote that Ruby 3.0 might have a static type system. What does that really mean? How should we feel about it? Will Ruby 3.0 still be Ruby? In this article I’ll unpack what Matz said and make some educated guesses at what it tells us about the future of the language.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="http://codon.com/consider-static-typing" rel="nofollow" target="_blank"&gt;http://codon.com/consider-static-typing&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;我好像有点混淆了，原来发布时间是二月份的... 但是 Ruby 要是真的加静态类型，也算大新闻吧&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Published at 1:30pm on Thursday 5th February 2015.&lt;/p&gt;
&lt;/blockquote&gt;</description>
      <author>jiyinyiyong</author>
      <pubDate>Mon, 04 May 2015 23:29:24 +0800</pubDate>
      <link>https://ruby-china.org/topics/25428</link>
      <guid>https://ruby-china.org/topics/25428</guid>
    </item>
    <item>
      <title>做了个玩具, 用 Cirru Sepal 来裸写 Ruby AST</title>
      <description>&lt;p&gt;用我的 Toy Language 裸写 AST 感觉挺好玩的..
编程语言到底写的还是 AST, 只是 AST 通常太难看了，Cirru 还算好...&lt;/p&gt;

&lt;p&gt;之前已经实现 ES6 的版本，CirruScript 用来生成 JavaScript
&lt;a href="https://github.com/Cirru/cirru-script" rel="nofollow" target="_blank"&gt;https://github.com/Cirru/cirru-script&lt;/a&gt;
看到 Julia 可以编译 LLVM 就弄了个 Julia AST 的版本，原型而已..
&lt;a href="https://github.com/Cirru/CirruSepal.jl" rel="nofollow" target="_blank"&gt;https://github.com/Cirru/CirruSepal.jl&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;这周看到有文章描述了 Ruby 可以元编程可以 &lt;code&gt;eval&lt;/code&gt;..
&lt;a href="https://www.igvita.com/2008/12/11/ruby-ast-for-fun-and-profit/" rel="nofollow" target="_blank"&gt;https://www.igvita.com/2008/12/11/ruby-ast-for-fun-and-profit/&lt;/a&gt;
用到了 &lt;code&gt;ruby2ruby&lt;/code&gt; 生成 AST, 用 &lt;code&gt;ruby_parser&lt;/code&gt; 来查看 AST
那我想，用 Cirru 语法照着生成 Ruby 代码没啥问题了&lt;/p&gt;

&lt;p&gt;然后就先把 CoffeeScript 写的 parser 直接转成 Ruby:
&lt;a href="https://github.com/Cirru/parser.rb" rel="nofollow" target="_blank"&gt;https://github.com/Cirru/parser.rb&lt;/a&gt;
然后改了先逻辑，把解析到的 JSON 转换成 &lt;code&gt;ruby2ruby&lt;/code&gt; 用的表达式:
&lt;a href="https://github.com/Cirru/sepal.rb" rel="nofollow" target="_blank"&gt;https://github.com/Cirru/sepal.rb&lt;/a&gt;
&lt;code&gt;cirru-sepal&lt;/code&gt; 这个包暴露了基本的接口可以对代码进行编译，
另外提供了命令行，直接把一个 &lt;code&gt;.cirru&lt;/code&gt; 的文件转化成 Ruby 执行 (&lt;code&gt;eval&lt;/code&gt;).
注意 &lt;code&gt;:demo&lt;/code&gt; 实际上是生成 &lt;code&gt;"demo"&lt;/code&gt;, 算是 Cirru 特征的奇葩写法..(&lt;code&gt;": a"&lt;/code&gt; 表示 &lt;code&gt;" a"&lt;/code&gt;)&lt;/p&gt;

&lt;p&gt;最终效果是这样一个 &lt;code&gt;demo.cirru&lt;/code&gt; 文件，
数字，字符串，&lt;code&gt;nil&lt;/code&gt; 三者做了特殊处理。其他的都内容转化为 Symbol:&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;lasgn a :1
lasgn b 1

call nil p (lvar a)

defn p2 (args x)
  call nil p (lvar x)

call nil p2 :demo

call nil p
  call (call 1 + 2) + 3
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;实际上被编译成这样的 Ruby 代码然后 &lt;code&gt;eval&lt;/code&gt;:&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;"1"&lt;/span&gt;
&lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;

&lt;span class="nb"&gt;p&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;p2&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="nb"&gt;p&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="n"&gt;p2&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"demo"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nb"&gt;p&lt;/span&gt;&lt;span class="p"&gt;(((&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;对应的 AST:&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:block&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:lasgn&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"1"&lt;/span&gt;&lt;span class="p"&gt;)),&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:lasgn&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:lit&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)),&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:call&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kp"&gt;nil&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:p&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:lvar&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:a&lt;/span&gt;&lt;span class="p"&gt;)),&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:defn&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:p2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:args&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:x&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:call&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kp"&gt;nil&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:p&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:lvar&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:x&lt;/span&gt;&lt;span class="p"&gt;))),&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:call&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kp"&gt;nil&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:p2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"demo"&lt;/span&gt;&lt;span class="p"&gt;)),&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:call&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kp"&gt;nil&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:p&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:call&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:call&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:lit&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:lit&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)),&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:lit&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;))))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;没有进一步设计语法糖，命令行工具也没去完善... 感兴趣的同学看着玩一下 :P&lt;/p&gt;</description>
      <author>jiyinyiyong</author>
      <pubDate>Fri, 24 Apr 2015 23:45:57 +0800</pubDate>
      <link>https://ruby-china.org/topics/25308</link>
      <guid>https://ruby-china.org/topics/25308</guid>
    </item>
    <item>
      <title>编写 Gem 的时候报错 undefined method [已解决]</title>
      <description>&lt;p&gt;模块内部的局部变量引用跟其他动态语言差别么？&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;➤➤ ruby -v
ruby 2.0.0p481 (2014-05-08 revision 45883) [universal.x86_64-darwin14]
➤➤ uname -v
Darwin Kernel Version 14.3.0: Mon Mar 16 23:12:31 PDT 2015; root:xnu-2782.20.48
➤➤ bundle gem a-b
      create  a-b/Gemfile
      create  a-b/Rakefile
      create  a-b/LICENSE.txt
      create  a-b/README.md
      create  a-b/.gitignore
      create  a-b/a-b.gemspec
      create  a-b/lib/a/b.rb
      create  a-b/lib/a/b/version.rb
Initializing git repo in /Users/chen/Drafts/ruby/a-b
➤➤ tree
.
├── Gemfile
├── LICENSE.txt
├── README.md
├── Rakefile
├── a-b.gemspec
└── lib
    └── a
        ├── b
        │&amp;nbsp;&amp;nbsp; └── version.rb
        └── b.rb

3 directories, 7 files
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;Rakefile&lt;/code&gt;&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s2"&gt;"bundler/gem_tasks"&lt;/span&gt;

&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;'a/b'&lt;/span&gt;

&lt;span class="n"&gt;desc&lt;/span&gt; &lt;span class="s1"&gt;'show'&lt;/span&gt;
&lt;span class="n"&gt;task&lt;/span&gt; &lt;span class="s1"&gt;'show'&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
  &lt;span class="no"&gt;A&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;B&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;show&lt;/span&gt; &lt;span class="s1"&gt;'demo'&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;lib/a/b.rb&lt;/code&gt;&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s2"&gt;"a/b/version"&lt;/span&gt;

&lt;span class="k"&gt;module&lt;/span&gt; &lt;span class="nn"&gt;A&lt;/span&gt;
  &lt;span class="k"&gt;module&lt;/span&gt; &lt;span class="nn"&gt;B&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nc"&gt;B&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;show&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="nb"&gt;p&lt;/span&gt; &lt;span class="s2"&gt;"in b show a:"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;
      &lt;span class="n"&gt;xmethod&lt;/span&gt; &lt;span class="n"&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="nf"&gt;xmethod&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="nb"&gt;p&lt;/span&gt; &lt;span class="s2"&gt;"in x show a"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;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="k"&gt;end&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;运行时候报错了：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;➤➤ rake show
"in b show a:"
"demo"
rake aborted!
NoMethodError: undefined method `xmethod' for A::B:Module
/Users/chen/Drafts/ruby/a-b/lib/a/b.rb:7:in `show'
/Users/chen/Drafts/ruby/a-b/Rakefile:7:in `block in &amp;lt;top (required)&amp;gt;'
Tasks: TOP =&amp;gt; show
(See full trace by running task with --trace)
&lt;/code&gt;&lt;/pre&gt;</description>
      <author>jiyinyiyong</author>
      <pubDate>Fri, 24 Apr 2015 10:28:18 +0800</pubDate>
      <link>https://ruby-china.org/topics/25290</link>
      <guid>https://ruby-china.org/topics/25290</guid>
    </item>
    <item>
      <title>怎么把 ruby_parser 解析得到的 AST 用 JSON 保存下来?</title>
      <description>&lt;p&gt;看了下网上的例子觉得挺好玩的，但是我希望 AST 跟 JSON 能够互相转换，有相关的 gem 可以用吗？
&lt;a href="https://www.igvita.com/2008/12/11/ruby-ast-for-fun-and-profit/" rel="nofollow" target="_blank"&gt;https://www.igvita.com/2008/12/11/ruby-ast-for-fun-and-profit/&lt;/a&gt;&lt;/p&gt;</description>
      <author>jiyinyiyong</author>
      <pubDate>Mon, 20 Apr 2015 10:19:52 +0800</pubDate>
      <link>https://ruby-china.org/topics/25205</link>
      <guid>https://ruby-china.org/topics/25205</guid>
    </item>
    <item>
      <title>在看 Joe 老爷子的 Twitter, 笑死了, 吐槽了 Gems</title>
      <description>&lt;p&gt;&lt;a href="https://twitter.com/joeerl" rel="nofollow" target="_blank"&gt;https://twitter.com/joeerl&lt;/a&gt;&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Wasted 4 hours. 

Deleted all old vsns of ruby.
Got the latest sources.

  ./configure
  make
  sudo make install

Works !
0 replies 5 retweets 11 favorites
 Reply 
&lt;/code&gt;&lt;/pre&gt;</description>
      <author>jiyinyiyong</author>
      <pubDate>Tue, 20 Jan 2015 20:10:10 +0800</pubDate>
      <link>https://ruby-china.org/topics/23845</link>
      <guid>https://ruby-china.org/topics/23845</guid>
    </item>
    <item>
      <title>用 Discourse 搭了个 React 中文社区</title>
      <description>&lt;p&gt;跟 &lt;a href="/undoZen" class="user-mention" title="@undoZen"&gt;&lt;i&gt;@&lt;/i&gt;undoZen&lt;/a&gt; 和 fracerxu 一起在弄的社区&lt;/p&gt;

&lt;p&gt;微博：&lt;a href="http://weibo.com/reactchina" rel="nofollow" target="_blank"&gt;http://weibo.com/reactchina&lt;/a&gt;
论坛 &lt;a href="http://react-china.org" rel="nofollow" target="_blank"&gt;http://react-china.org&lt;/a&gt;
GitHub: &lt;a href="https://github.com/react-china" rel="nofollow" target="_blank"&gt;https://github.com/react-china&lt;/a&gt;
视频列表：&lt;a href="http://www.tudou.com/plcover/xsb8ZVc3wK4/" rel="nofollow" target="_blank"&gt;http://www.tudou.com/plcover/xsb8ZVc3wK4/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;跟踪国外的进入，React 前段时间突然非常火爆，现在也有大量的人在跟进，
不知道国内多不多，我们自己扯扯好像还挺好玩的，就是有点冷清.
也不清楚现在有哪些公司开始用 React 了，我是说公司项目。&lt;/p&gt;

&lt;p&gt;论坛是用 Discourse 搭在 DigitalOcean 一个 512M 的服务器上的，目前没啥访问量
目前挺要紧的是文档，等 &lt;code&gt;0.12&lt;/code&gt; 正式发布以后要考虑下翻译的问题
不知道有没有同学有兴趣一起来让更多人了解 React.&lt;/p&gt;</description>
      <author>jiyinyiyong</author>
      <pubDate>Tue, 21 Oct 2014 18:03:48 +0800</pubDate>
      <link>https://ruby-china.org/topics/22174</link>
      <guid>https://ruby-china.org/topics/22174</guid>
    </item>
    <item>
      <title>Joe Armstrong 的演讲 'The Mess We're In'</title>
      <description>&lt;p&gt;看到名字马上就转了，还没看里边讲的什么，,
&lt;a href="http://www.tudou.com/programs/view/a8Y6uROluKs/" rel="nofollow" target="_blank"&gt;http://www.tudou.com/programs/view/a8Y6uROluKs/&lt;/a&gt;
原视频..是 Strange Loop 最近的大会上的，需要的 Twitter 上搜索一下
一起的还有 Clojure 作者，Mathmatica 作者，React 作者... 我也转了 - -!
&lt;a href="http://www.tudou.com/plcover/1UNyZGAE3Uw/" rel="nofollow" target="_blank"&gt;http://www.tudou.com/plcover/1UNyZGAE3Uw/&lt;/a&gt;
希望他讲的东西跟 Erlang 有关吧...&lt;/p&gt;</description>
      <author>jiyinyiyong</author>
      <pubDate>Sat, 20 Sep 2014 23:11:14 +0800</pubDate>
      <link>https://ruby-china.org/topics/21639</link>
      <guid>https://ruby-china.org/topics/21639</guid>
    </item>
    <item>
      <title>volt 框架是搞什么名堂?</title>
      <description>&lt;p&gt;&lt;a href="https://github.com/voltrb/volt" rel="nofollow" target="_blank"&gt;https://github.com/voltrb/volt&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A ruby web framework where your ruby runs on both server and client&lt;/p&gt;

&lt;p&gt;Volt is a ruby web framework where your ruby code runs on both the server and the client (via opal.) The DOM automatically update as the user interacts with the page. Page state can be stored in the URL, if the user hits a URL directly, the HTML will first be rendered on the server for faster load times and easier indexing by search engines.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;看表述上是连 React 的 DOM 更新的都学去了，但是怎么看怎么怪，有人看过吗？&lt;/p&gt;</description>
      <author>jiyinyiyong</author>
      <pubDate>Mon, 15 Sep 2014 23:08:26 +0800</pubDate>
      <link>https://ruby-china.org/topics/21544</link>
      <guid>https://ruby-china.org/topics/21544</guid>
    </item>
    <item>
      <title>Markdown 发布标准了...</title>
      <description>&lt;p&gt;官网是 &lt;a href="http://standardmarkdown.com/" rel="nofollow" target="_blank"&gt;http://standardmarkdown.com/&lt;/a&gt;
手册在 &lt;a href="http://jgm.github.io/stmd/spec.html" rel="nofollow" target="_blank"&gt;http://jgm.github.io/stmd/spec.html&lt;/a&gt;
有个 Demo &lt;a href="http://jgm.github.io/stmd/js/" rel="nofollow" target="_blank"&gt;http://jgm.github.io/stmd/js/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;然后 Jeff Atwood 专门发文章介绍了啊。&lt;a href="http://blog.codinghorror.com/standard-flavored-markdown/" rel="nofollow" target="_blank"&gt;http://blog.codinghorror.com/standard-flavored-markdown/&lt;/a&gt;
大概就说 Markdown 方言太多太乱，于是做了个标准，别人都通不过，只好重新..之类的.
还用 discourse 论坛的 Markdown 做例子 &lt;a href="http://talk.standardmarkdown.com/" rel="nofollow" target="_blank"&gt;http://talk.standardmarkdown.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;忍不住要吐槽，行尾两个空格换行这个事情写在标准里边，真是没法忍.
当然不管怎么说标准话了都是好事情。&lt;/p&gt;

&lt;hr&gt;

&lt;p&gt;感觉剧情出现了逆转，我在那边论坛吐槽时候有人告诉我规范里是要求对 soft breaks 设置选项的：&lt;/p&gt;

&lt;p&gt;&lt;a href="http://jgm.github.io/stmd/spec.html#soft-line-breaks" rel="nofollow" target="_blank"&gt;http://jgm.github.io/stmd/spec.html#soft-line-breaks&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A renderer may also provide an option to render soft line breaks as hard line breaks.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;这么一来也算能接受了。&lt;/p&gt;</description>
      <author>jiyinyiyong</author>
      <pubDate>Thu, 04 Sep 2014 19:46:04 +0800</pubDate>
      <link>https://ruby-china.org/topics/21391</link>
      <guid>https://ruby-china.org/topics/21391</guid>
    </item>
    <item>
      <title>Yosemite 升级到了 Ruby 2.0 于是 brew 跪了</title>
      <description>&lt;p&gt;升级完 Nginx 起不动了，于是打算用 brew 重装一下，结果 brew 不能跑了..
结果发现还真是有问题，Homebrew 维护者也忙着修 &lt;a href="https://github.com/Homebrew/homebrew/issues/29795" rel="nofollow" target="_blank"&gt;https://github.com/Homebrew/homebrew/issues/29795&lt;/a&gt;
我手动给 brew 改了 2.0 的 Ruby 可惜 Nginx 还是跑不起来&lt;/p&gt;</description>
      <author>jiyinyiyong</author>
      <pubDate>Tue, 03 Jun 2014 21:50:44 +0800</pubDate>
      <link>https://ruby-china.org/topics/19713</link>
      <guid>https://ruby-china.org/topics/19713</guid>
    </item>
    <item>
      <title>更新了我的模版引擎 Cirru HTML</title>
      <description>&lt;p&gt;想做成脚本语言结果 HTML 写得挺顺的 - -!&lt;/p&gt;

&lt;p&gt;代码：&lt;a href="https://github.com/Cirru/cirru-html" rel="nofollow" target="_blank"&gt;https://github.com/Cirru/cirru-html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;在线的 Demo: &lt;a href="http://repo.cirru.org/html" rel="nofollow" target="_blank"&gt;http://repo.cirru.org/html&lt;/a&gt;
可以修改左边的框框，点击按钮右边显示编译结果&lt;/p&gt;

&lt;p&gt;&lt;img src="http://ww1.sinaimg.cn/large/62752320tw1eg12hwc8qzj21540oijvv.jpg" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;借鉴了 Vue.js 模版的形态，所以一个列表是这样展开的：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@repeat (@ list)
  div
    = a line
    p $ = (@ @key)
    p $ = (@ @value)

    @if (@ @last)
      p $ = this is last one

    @if (@ @first)
      p $ = this is the first
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;目前我个人用这个工具来生成简单的 HTML.&lt;/p&gt;

&lt;p&gt;这个项目是 Cirru 的一部分：&lt;a href="http://cirru.org/" rel="nofollow" target="_blank"&gt;http://cirru.org/&lt;/a&gt;
另外目前代码可以尝试在 Chrome 当中编辑 &lt;a href="http://v2ex.com/t/110156" rel="nofollow" target="_blank"&gt;http://v2ex.com/t/110156&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Bug 略多，欢迎吐槽。&lt;/p&gt;</description>
      <author>jiyinyiyong</author>
      <pubDate>Sat, 03 May 2014 14:32:52 +0800</pubDate>
      <link>https://ruby-china.org/topics/18977</link>
      <guid>https://ruby-china.org/topics/18977</guid>
    </item>
    <item>
      <title>用协作工具开展以 Sprint 为分类的敏捷开发</title>
      <description>&lt;p&gt;在敏捷开发这个词越来越火之后，我们的研发团队也逐渐向敏捷方向转型。前段时间团队用 teambition 来帮助进行敏捷开发，今天把我们团队如何以 Sprint 为分类进行敏捷开发的方法分享给大家。首先我们从产品的需求管理开始说起。&lt;/p&gt;
&lt;h3 id="产品的需求收集"&gt;产品的需求收集&lt;/h3&gt;
&lt;p&gt;以我们公司正在进行的 iOS 客户端开发为例，在名为“iOS app 开发”的项目中，产品负责人（以下简称 PO）会创建一个 Product Backlog 的任务分组，用来收集产品的需求和用户故事。PO 会按优先级顺序排列来帮助自己管理需求。
&lt;img src="//l.ruby-china.com/photo/2014/5eec33646b0c5a82617ba86bb4645a5b.png" title="" alt=""&gt;&lt;/p&gt;
&lt;h3 id="以Sprint来安排开发的排期"&gt;以 Sprint 来安排开发的排期&lt;/h3&gt;
&lt;p&gt;研发团队用 Sprint Backlog 的任务分组，来进行工作量的预估和安排。
&lt;img src="//l.ruby-china.com/photo/2014/1e86fbc4b25f10ee56416a42aaaf9566.png" title="" alt=""&gt;&lt;/p&gt;
&lt;h3 id="确定项目Backlog"&gt;确定项目 Backlog&lt;/h3&gt;
&lt;p&gt;通过 Sprint 计划会议，PO 从 Product Backlog 中选出需求点作为本次迭代的目标，将其移动到 Sprint Backlog 中。
&lt;img src="https://striker-ga.teambition.com/thumbnail/6f/9f/8dce7eb423c195e87b222d63a935.png/w/660/h/660" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="https://striker-ga.teambition.com/thumbnail/81/2f/b456348898f071b0440c14ac28e1.png/w/660/h/660" title="" alt=""&gt;
这个目标的时间周期一般为 1-4 个星期，研发团队将这个目标细化成一个个可执行的任务，以此来建立完整的 Sprint Backlog。
&lt;img src="https://striker-ga.teambition.com/thumbnail/bc/2c/993b8ca899eec89d91cf26385e69.png/w/660/h/660" title="" alt=""&gt;&lt;/p&gt;
&lt;h3 id="确定Sprint进度"&gt;确定 Sprint 进度&lt;/h3&gt;
&lt;p&gt;任务的进度条可以展示整体的 Sprint 排期完成情况。
&lt;img src="https://striker-ga.teambition.com/thumbnail/c4/a1/57849976b31e7a7e36188d1418d8.png/w/660/h/660" title="" alt=""&gt;&lt;/p&gt;
&lt;h3 id="任务板显示开发进程"&gt;任务板显示开发进程&lt;/h3&gt;
&lt;p&gt;每个 Sprint 都会有一个新的 Sprint Backlog 任务板，任务板的阶段可以设置为“需求   计划中   进行中  测试中  已完成”，如下图所示：
&lt;img src="https://striker-ga.teambition.com/thumbnail/3c/6d/6c61daaef311873e2e6edfb1c6d6.png/w/660/h/660" title="" alt=""&gt;
当任务需要进行下一阶段时，可以通过拖拽任务卡片，将其移动到下一阶段。同时，你可以通过修改执行者，来告诉对方可以进行下一步的工作了。
&lt;img src="https://striker-ga.teambition.com/thumbnail/d7/88/7e70734048df6acdf42d5db94181.png/w/660/h/660" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;当一个需求目标所涉及的所有任务都完成时，该目标会被移动到“已完成”，表示该目标已实现。
这样操作的好处，我认为有以下几点：&lt;/p&gt;

&lt;p&gt;Ÿ1 对于不同类型的事情，只需要进行头像的拖拽，就可以快速分配出去；
Ÿ2 可以给每个需求设置截止时间，当任务完成的时间超过预期时，会用红色标注显示；&lt;/p&gt;

&lt;p&gt;&lt;img src="https://striker-ga.teambition.com/thumbnail/0c/2c/d6e4b4c74408dd3c07869b2de758.png/w/660/h/660" title="" alt=""&gt;
Ÿ3 所有的讨论和任务状态的变化，任务相关者都可以看到。将产品的功能参数填写在备注中并进行更新，备注中永远呈现最新的内容；
&lt;img src="https://striker-ga.teambition.com/thumbnail/9c/21/a8f09205c3c67eed691dde4238be.png/w/660/h/660" title="" alt=""&gt;
Ÿ4 上传的文档，会与任务附着在一起，找寻方便。
&lt;img src="https://striker-ga.teambition.com/thumbnail/01/b6/63a1b9c2cfae2823da09d3dee1ee.png/w/660/h/660" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;﻿
虽然 teambition 并不是专门为敏捷开发而设计的产品，但是对于需要经常、快速、高质量地发布软件的研发团队而言无疑是非常适用的，在高效的团队协作的基础之上，帮助我们打造高质量的敏捷团队。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.teambition.com/blog" rel="nofollow" target="_blank" title=""&gt;文章来自 teambiton&lt;/a&gt;&lt;/p&gt;</description>
      <author>jiyinyiyong</author>
      <pubDate>Tue, 01 Apr 2014 11:45:53 +0800</pubDate>
      <link>https://ruby-china.org/topics/18307</link>
      <guid>https://ruby-china.org/topics/18307</guid>
    </item>
    <item>
      <title>更新一下侧边栏 CNode 图片吧</title>
      <description>&lt;p&gt;右边侧边栏的图都是好久以前了，更新一下吧:
&lt;a href="http://cnodejs.org/public/images/cnode_logo_128.png" rel="nofollow" target="_blank"&gt;http://cnodejs.org/public/images/cnode_logo_128.png&lt;/a&gt;
&lt;img src="http://cnodejs.org/public/images/cnode_logo_128.png" title="" alt=""&gt;&lt;/p&gt;</description>
      <author>jiyinyiyong</author>
      <pubDate>Sat, 29 Mar 2014 13:37:21 +0800</pubDate>
      <link>https://ruby-china.org/topics/18246</link>
      <guid>https://ruby-china.org/topics/18246</guid>
    </item>
    <item>
      <title>继续更新 Cirru 文法的进展</title>
      <description>&lt;p&gt;先给我学长做个广告，他在开发编程语言 Tea &lt;a href="https://github.com/xuld/Tea/wiki" rel="nofollow" target="_blank"&gt;https://github.com/xuld/Tea/wiki&lt;/a&gt;
号称接近 C++ 的执行效率，超过 Java 的开发效率..
我还想直接说 C# 不得了.. 可他的功底扎实，我怎么也说不过他...
后面我就在他的影响下对 Cirru 继续做一些更新... 距离上次发贴 3 个月&lt;/p&gt;
&lt;h3 id="主页和社交"&gt;主页和社交&lt;/h3&gt;
&lt;p&gt;Cirru 的主页粗略做了下 &lt;a href="http://cirru.org" rel="nofollow" target="_blank"&gt;http://cirru.org&lt;/a&gt;
目前没有完全确定方向，所以只是罗列了子项目...&lt;/p&gt;

&lt;p&gt;相关项目转移到了单独的团队账户 &lt;a href="https://github.com/Cirru" rel="nofollow" target="_blank"&gt;https://github.com/Cirru&lt;/a&gt;
专门搞了一个 Twitter 帐号发布更新 &lt;a href="https://twitter.com/cirrulang" rel="nofollow" target="_blank"&gt;https://twitter.com/cirrulang&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Cirru 名字来源于 "Cirrus Clouds", 因为半图形化编辑器想有种未来感像是卷云
读音硬生生从 Cirrus 掐断了，叫做 &lt;code&gt;/ˈsɪɹə/&lt;/code&gt;... 刚好和下边的单词读音一样 - -!
&lt;a href="https://www.google.com/#q=sirrah" rel="nofollow" target="_blank"&gt;https://www.google.com/#q=sirrah&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="Logo"&gt;Logo&lt;/h3&gt;
&lt;p&gt;专门搞了一个 Logo, 形状不大好，以后有机会再改进下..
就想弄一个云的图腾，勉强凑成 &lt;code&gt;Cr&lt;/code&gt; 两个字母，,
为了半透明阴影还给 Snap.svg 提 Issue, 维护者好心给我加了&lt;/p&gt;

&lt;p&gt;&lt;img src="http://logo.cirru.org/cirru-400x400.png" title="" alt=""&gt;&lt;/p&gt;
&lt;h3 id="Go 平台"&gt;Go 平台&lt;/h3&gt;
&lt;p&gt;Go 语言尝试了下，学得不怎么样，还好 CoffeeScript 的功能他都有..
先是手动把 Cirru Parser 代码转到了 Go, 然后做了一个粗糙的解释器
代码在这里：&lt;a href="https://github.com/Cirru/cirru-interpreter.go" rel="nofollow" target="_blank"&gt;https://github.com/Cirru/cirru-interpreter.go&lt;/a&gt;
我本地开发时能用命令编译出一个可执行文件，然后通过传入文件名来启动&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# go get ...&lt;/span&gt;
➤➤ go build bin/cli.go
➤➤ &lt;span class="nb"&gt;mv &lt;/span&gt;cli go-cirru &lt;span class="c"&gt;# 默认编译到文件名&lt;/span&gt;
➤➤ ./go-cirru cirru/map.cirru
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;在 [&lt;code&gt;cirru/&lt;/code&gt;][cirru-dir] 下可以看到我当初设计的一些代码...
只是做了基本的数据结构和格式化，函数的实现比较囧，其他复杂功能没做&lt;/p&gt;

&lt;p&gt;[cirru-dir]: &lt;a href="https://github.com/Cirru/cirru-interpreter.go/tree/master/cirru" rel="nofollow" target="_blank"&gt;https://github.com/Cirru/cirru-interpreter.go/tree/master/cirru&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="语法高亮"&gt;语法高亮&lt;/h3&gt;
&lt;p&gt;不过 &lt;code&gt;.cr&lt;/code&gt; 在 GitHub 上被 Crystal 占用了.. 我原先的代码被识别错了
我决定抢一下先机，就 fork 了 Pygments, 在里边添加了 Cirru 的高亮
又搞了下 Ace Editor 的高亮支持，后来也顺利合并到仓库..
最后提交了 PR 给 GitHub 的语言识别仓库，让 GitHub 识别我的代码
只不过 Ace 和 Pygments 都没发布新版本，目前 GitHub 上不高亮&lt;/p&gt;

&lt;p&gt;另外还有些语法高亮，Rainbow, Brackets, 以及一个手写的高亮工具
LightTable 水太深，没搞定，, 另外几个大型的 IDE 没想过，
再就是我没用过的编辑器也没做过... 那个真心有点难
虽然知道不会有什么人来用，但是先做一些事情来铺路好了
写高亮顺便也做了一些学习笔记在 SegmentFault 那&lt;/p&gt;
&lt;h3 id="重构半图形化编辑器, 增加语法"&gt;重构半图形化编辑器，增加语法&lt;/h3&gt;
&lt;p&gt;春节假期主要是把 Cirru Editor, 借鉴了 Backbone 一些思想，重构了一下
Chrome 的同学可以戳这里体验下 &lt;a href="http://repo.tiye.me/cirru-editor/" rel="nofollow" target="_blank"&gt;http://repo.tiye.me/cirru-editor/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="http://cirru.org/pics/cirru-editor.jpg" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;其实 Cirru Editor 上的样子才是 Cirru 文法的真实形态，就是嵌套的树形结构
为了一致，我增加了一个逗号语法来追加表达式，&lt;/p&gt;

&lt;p&gt;以后 &lt;code&gt;(a (b c) d e (f))&lt;/code&gt; 可以写成下面这样，通过 &lt;code&gt;,&lt;/code&gt; 来消除括号：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;a
  b c
  , d e
  f
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然后又做了一个 [Cirru Writer][writer] 用来把 JSON 格式反向转化到 Cirru 文法...&lt;/p&gt;

&lt;p&gt;[writer]: &lt;a href="https://github.com/Cirru/cirru-writer.coffee" rel="nofollow" target="_blank"&gt;https://github.com/Cirru/cirru-writer.coffee&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="往后的计划"&gt;往后的计划&lt;/h3&gt;
&lt;p&gt;我学长老是问我说，这语言怎么样，别人能用了没，, 搞得我好紧张
我现在能想到 Cirru 的用途，仅仅是作为配置语言，语法很灵活嘛
但为了人们能用，我得提供各平台的 parser 和 writer 才行
后面要做的事情，比如用 Ruby 写写啦.. 加个 Lua 的模块啦，难度不高
貌似会浪费很多时间，这个想法已经被他吐槽惨了&lt;/p&gt;

&lt;p&gt;考虑接下来要专心工作，打算多做 HTML 相关的部分，主要是文档
总是觉得 Sphinx 和 Golumn 不顺眼，一直没能力写，打算搞一个
这方面主要是 MVC 图形界面，毕竟大半年工作在上边，多少有点进展了
这样 Cirru 的文档到时候可以做一个炫一些的...&lt;/p&gt;
&lt;h2 id="重点重点, 别人会来用 Cirru 吗"&gt;重点重点，别人会来用 Cirru 吗&lt;/h2&gt;
&lt;p&gt;然后被我学长吐槽了，问这有人用么... 花了那么多时间，Cirru 能跑了么？
我.. Cirru 都没设计好呢，Cirru 的文法具备同像性，要做代码即数据，
函数在实现中分成两部分，一是原生代码，一是上下文，做个简化的调用：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;set f $ block (a b c)
  print a b c

call f (int 1) (int 2) (int 3)

f (int 1) (int 2) (int 3)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;不过这也不够啊.. 代码需要的是抽象的能力，而单单这样远远不够
我设计了这样的语言，实现什么样的功能？需要哪些基本的抽象的手段？
那么调试方案呢？包管理和可维护性呢？基本的错误提示要有吧？
另外编译到 JS 或者 LLVM 代码呢？性能可是比语法高亮更重要的是啊...&lt;/p&gt;

&lt;p&gt;表示后面要工作要专心对付 JS 平台了，会暂停 Cirru 文法相关的项目
有时间会做做文档工具，接着把 Cirru 的文档整理一遍，录录视频什么的..
我恐怕要好多年才能知道我究竟应该在设计怎样的功能来用呢？
Cirru 的文法是够灵活够我折腾了，结果后边更难...&lt;/p&gt;
&lt;h3 id="参与"&gt;参与&lt;/h3&gt;
&lt;p&gt;目前文法定下来了，具体的解析结果可以看这个目录下对应的 JSON 结果
&lt;a href="https://github.com/Cirru/cirru-parser.coffee/tree/master/cirru" rel="nofollow" target="_blank"&gt;https://github.com/Cirru/cirru-parser.coffee/tree/master/cirru&lt;/a&gt;
因为一直都是当学习和装逼做的，没有专心往细节做
具体到语言执行特别是编译的细节我也不懂，目前直接打算搁置&lt;/p&gt;

&lt;p&gt;有没有同学要接下来玩下吗，比如写 parser/writer 或者讨论语言特性之类的？
暂定 [cirru.org 的 Issue][org] 作为讨论的地方，欢迎来讨论.
虽然我觉得 Cirru 应该仅仅一套文法，加各种解释器设计和实现..
毕竟我设计了灵活的语法可不是为了搞个僵化的语言来...&lt;/p&gt;

&lt;p&gt;[org]: &lt;a href="https://github.com/Cirru/cirru.org/issues" rel="nofollow" target="_blank"&gt;https://github.com/Cirru/cirru.org/issues&lt;/a&gt;&lt;/p&gt;</description>
      <author>jiyinyiyong</author>
      <pubDate>Tue, 04 Feb 2014 20:51:38 +0800</pubDate>
      <link>https://ruby-china.org/topics/17078</link>
      <guid>https://ruby-china.org/topics/17078</guid>
    </item>
    <item>
      <title>Crystal 语言, 书写 Ruby 式语法, 编译执行代码</title>
      <description>&lt;p&gt;玩的时候用了 &lt;code&gt;.cr&lt;/code&gt; 作为后缀，结果被 GitHub 识别成其他语言了，
跑过去一看，真有这么个编程语言抢我后缀.. Crystal 语言，Ruby 的语法，代码是编译执行的：&lt;/p&gt;

&lt;p&gt;&lt;a href="http://crystal-lang.org/" rel="nofollow" target="_blank"&gt;http://crystal-lang.org/&lt;/a&gt;&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Compute prime numbers up to 100 with the Sieve of Eratosthenes&lt;/span&gt;
&lt;span class="n"&gt;max&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;

&lt;span class="n"&gt;sieve&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Array&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;max&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kp"&gt;true&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;sieve&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="kp"&gt;false&lt;/span&gt;
&lt;span class="n"&gt;sieve&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kp"&gt;false&lt;/span&gt;

&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="o"&gt;...&lt;/span&gt;&lt;span class="n"&gt;max&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;i&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;sieve&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;step&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;max&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;)&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;j&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
      &lt;span class="n"&gt;sieve&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kp"&gt;false&lt;/span&gt;
    &lt;span class="k"&gt;end&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="n"&gt;sieve&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;each_with_index&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;prime&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;number&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
  &lt;span class="nb"&gt;puts&lt;/span&gt; &lt;span class="n"&gt;number&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;prime&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;搜索论坛被提到过一次 &lt;a href="http://ruby-china.org/topics/10389" rel="nofollow" target="_blank"&gt;http://ruby-china.org/topics/10389&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Crystal 的博客上提到下面几点：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Garbage Collector&lt;/li&gt;
&lt;li&gt;Bootstraped the compiler&lt;/li&gt;
&lt;li&gt;Type inference (part 1)&lt;/li&gt;
&lt;li&gt;Shortcut syntax for writing one-argument blocks&lt;/li&gt;
&lt;li&gt;Null Pointer Exception&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;具体代码还是 pre-alpha 的... 等正式发布玩一下... 不过不知道发布要几几年啊..&lt;/p&gt;</description>
      <author>jiyinyiyong</author>
      <pubDate>Sun, 29 Dec 2013 15:56:25 +0800</pubDate>
      <link>https://ruby-china.org/topics/16489</link>
      <guid>https://ruby-china.org/topics/16489</guid>
    </item>
    <item>
      <title>曾经搜集不少编程语言相关的内容到 Wiki.. 然后...</title>
      <description>&lt;p&gt;几个月前的时候，开始在 Github 上搜集关于编程语言的资料
&lt;a href="https://github.com/coffee-js/languages/wiki/_pages" rel="nofollow" target="_blank"&gt;https://github.com/coffee-js/languages/wiki/_pages&lt;/a&gt;
虽然沒什么意义，, 但是觉得挺有意思的，特别是看这么多编程语言
整理多种语言对比的网站很多，我当时觉得还是挺有趣的...
然后开扯....&lt;/p&gt;

&lt;p&gt;大二大三就不知道编程语言是什么东西，看到一个东西就梦想这梦想那的
以为学了这个以后就能怎么怎么，函数式编程，太厉害了，怎么怎么的..
以至于荒废学业到会去看，每天追 HN, 每天看半懂的英语
以为学了这个以后就能像大牛们一样，写各种把人吓得张大嘴巴的程序出来&lt;/p&gt;

&lt;p&gt;当然目标也不是为了吓人，但是我想，脑子里想的东西，却无法表达，多郁闷啊
可以在脑海里说，这个微博是应该这样设计的，聊天是应该有那些功能的，
笔记要有这个功能人们才不容易失去焦点，命令行其实应该是那样的.
导航图标应该这样设计的。论坛应该有那个功能，, 什么什么..&lt;/p&gt;

&lt;p&gt;后来有机会维护学校一些 Linux 了，就很想搬真实的东西到上边去...
比如说一个聊天功能的页面，比如说天气，比如说挂校园照片..
比如活动列表，比如，什么都可以吧.. 网络只要能把很多人连接到一起就好了
即便在有那么多人游荡的校园里，依然能觉得不知道怎么找很多人
我就想学编程学编程搞出一块空间来，吸引来视线，这样就好&lt;/p&gt;

&lt;p&gt;然后然后就是离开学校，, 工作，去适应原先用各种理由厌烦的 JS
开始懂 MVC, 跟朋友重学 C, 开始放开那些以为自己叫做梦想的东西
模块化，快速开发，一个人搞定前后端，做各种玩具，造脚本语言.. 这都是很远很远的梦想啊
而且这些不能赚钱，不能逗妹子开心，甚至都达不到做技术的期待&lt;/p&gt;

&lt;p&gt;甚至以后的很多年，我们都不会是设计个人的门户，把自己吐露在网上
也不是每个人戴着眼镜，让网络完完全全成为生活的一部分
即便有网络，我们还是走回到生活的去和各种真实打交道
像我们曾经以为自己厌弃的那种生活一样，然后活下去...&lt;/p&gt;

&lt;p&gt;我说到哪了...? 哦，终于发现这些东西其实仅仅是技术而已啊
人们的生活随之改变却从不会变成我们曾期待的那个样子，或许对于很多人只是不重要
然后其实编程语言重要的是后边的理论支撑，再也不是当初想象怎么的有趣了&lt;/p&gt;

&lt;p&gt;又觉得自己来放广告的了... &lt;a href="http://weibo.com/jiyinyiyong" rel="nofollow" target="_blank" title=""&gt;微博&lt;/a&gt;, &lt;a href="http://www.douban.com/people/jiyinyiyong/" rel="nofollow" target="_blank" title=""&gt;豆瓣&lt;/a&gt;, &lt;a href="http://user.qzone.qq.com/910756450" rel="nofollow" target="_blank" title=""&gt;QQ&lt;/a&gt;, &lt;a href="http://google.com/+jiyinyiyong" rel="nofollow" target="_blank" title=""&gt;G+&lt;/a&gt;~
外面世界真的好大，, 求向导...&lt;/p&gt;</description>
      <author>jiyinyiyong</author>
      <pubDate>Thu, 28 Nov 2013 22:36:31 +0800</pubDate>
      <link>https://ruby-china.org/topics/15873</link>
      <guid>https://ruby-china.org/topics/15873</guid>
    </item>
  </channel>
</rss>
