<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>xhj6</title>
    <link>https://ruby-china.org/xhj6</link>
    <description></description>
    <language>en-us</language>
    <item>
      <title>为什么说绝大多数人都没搞懂区块链接，区块链的实质创新是什么</title>
      <description>&lt;p&gt;因为比特币的飞涨，区块链受到了前所未有的关注，信奉者们认为区块链技术必将改变世界，但其中的绝大多数人却说不清楚为什么能改变、改变什么以及如何改变。&lt;/p&gt;

&lt;p&gt;一直到昨天下午，我都认为区块链实在是过誉了，是资本家们为了操盘加密货币而炒作出来包装出来的概念而已，并没有多少实质创新。然后，昨天晚上突然就顿悟了，突然就意识到区块链的实质创新是什么了，当我意识到这一点后，我不得不承认，区块链技术，的确有可能改变世界。&lt;/p&gt;

&lt;p&gt;比如，被区块链拥趸们反复提及的 &lt;strong&gt;immutable&lt;/strong&gt; 和 &lt;strong&gt;decentralized&lt;/strong&gt; 这两个关键词，真的就是能改变世界的的伟大创新吗？显然不是，它们甚至连创新都谈不上，无论是加密技术还是 P2P 技术，都已在这个世界上存在好多年了，可以这样说，immutable 和 decentralized，在区块链这个术语提出之前，就已经发挥作用在&lt;strong&gt;改善世界&lt;/strong&gt;了，在提出区块链这个概念之后，显然不太可能突然就麻雀变凤凰，一下子就跃身为&lt;strong&gt;改变世界&lt;/strong&gt;的技术了。那么，区块链的实质创新究竟是什么呢？它就真是只是一个夸大其词的噱头吗？我一直百思不得其解。&lt;/p&gt;

&lt;p&gt;当我突然顿悟了之后，才明白 99.99% 的人都误读了区块链，而真正搞懂了的人都在闷声发大财，资本家们有一条黄金定律是：&lt;strong&gt;都看得懂的部分不值钱，大家都看不懂的部分才值钱&lt;/strong&gt;。&lt;/p&gt;

&lt;p&gt;我不是资本家，所以我免费的告诉大家：其实，区块链的实质创新是非常非常的简单明了，一句话就说得清楚：&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;immutable&lt;/strong&gt; 和 &lt;strong&gt;decentralized&lt;/strong&gt; 都是烟雾弹，区块链的实质创新是 &lt;strong&gt;token&lt;/strong&gt;。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;敲黑板！记重点！！要考的！！！&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;区块链即 token&lt;/strong&gt;，用大白话来说就是，在比特币中，比特不值钱，币才值钱。&lt;/p&gt;

&lt;p&gt;那些一天到晚币圈、链圈什么的挂在嘴边的肯定要出来翻白眼了，但是别慌，我跟你们说的根本就不是一回事好不好。&lt;/p&gt;

&lt;p&gt;我的意思是，比特币的实质创新是通过在记账的过程中产生的 token 来支付记账的成本。我们不应该去关注不可篡改和去中心化那些没有什么卵用的噱头，那些噱头无非不过是在说它的账记得非常好而已，账记得好不好不是重点，重点是记账这项活动与产生 token 之间的对等性，而正是这种对等性让这项活动实现了自我驱动和自我实现。&lt;/p&gt;

&lt;p&gt;敲黑板！敲黑板！！记重点： &lt;strong&gt;自我驱动和自我实现&lt;/strong&gt;。&lt;/p&gt;

&lt;p&gt;从这个意义上看，这个世界上 99.99% 的 ICO 所说的那些区块链接技术实现的项目中，完全都是在生拉活扯，硬生生制造出来的使用场景，毕竟，还有什么活动有借方和贷方这么平等、这么均衡、以及对活动本身的需求这么完全一致呢？这样的人类活动场景其实是非常少的，但是，一旦存在这样的关系，那么它就是区块链的绝佳完美适用场景。&lt;/p&gt;

&lt;p&gt;所以，那些正在学习或正在实践区块链的小伙伴们，忘掉 immutable 和 decentralized 吧，那些只会让你误入歧途，苦海无边，回头是岸，是时候停下来想一想了：&lt;/p&gt;

&lt;p&gt;第一，你究竟是要记更好的账，还是要驱动一项人类活动？如果你正在试图记更好的账，趁早收摊回家过年吧，家人们都在等着你，很温暖，真的。&lt;/p&gt;

&lt;p&gt;第二，你的活动中参与各方平等吗？他们对活动的兴趣是一致的吗？比如作者和读者之间平等吗，销售者和购买者之间平等吗，显然他们都不平等，兴趣点也完全不一致。以借贷来举例：并不是有借方和贷方参与的活动就是借贷活动，有借方和贷方参与，只能说这样的活动中包含了借贷活动，比如卖家可以选择授受比特币支付，而比特币支付是实现借贷活动的一种手段。我们甚至可以这样大胆的断言：&lt;strong&gt;凡是以生产者和消费者关系为主的活动，都不适用区块链&lt;/strong&gt;。&lt;/p&gt;

&lt;p&gt;第三，没有了，各位大神补充。&lt;/p&gt;

&lt;p&gt;一家之言，仅供参考，如果你们就此发了大财，记得分 0.001% 的股份给我，以 token 的形式支付也行。弊帚自珍，转载或引用请注明出处：作者 xhj6@rubychina，谢谢！&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;BONUS&lt;/strong&gt;：在下大胆预测，除了电子货币外，区块链技术最有可能变革的主战场之一很可能是：在线广告。&lt;/p&gt;</description>
      <author>xhj6</author>
      <pubDate>Sat, 10 Feb 2018 12:35:31 +0800</pubDate>
      <link>https://ruby-china.org/topics/35021</link>
      <guid>https://ruby-china.org/topics/35021</guid>
    </item>
    <item>
      <title>『编程项目赚了两千万』，这些人的良心不会痛吗？</title>
      <description>&lt;p&gt;偶然看到一个在台湾拥有极多负面评价的某某 和 一个在大陆负面评价和粉丝一样多的某来在撕逼，然后某来就讲了这个一个『事实』，真心为花天价的学员们心疼，他们现在都在哪里啊？&lt;/p&gt;</description>
      <author>xhj6</author>
      <pubDate>Thu, 28 Dec 2017 23:46:07 +0800</pubDate>
      <link>https://ruby-china.org/topics/34788</link>
      <guid>https://ruby-china.org/topics/34788</guid>
    </item>
    <item>
      <title>两年免息分期，手续费率为 5%，实际年利率等于多少？</title>
      <description>&lt;p&gt;Q5 现在有个两年免息分期、手续费率为 5% 的金融方案，销售顾问极力推荐，说贷款 24 万，只需付区区 1.2 万元手续费而已，还说厂商贴息了多少云云。&lt;/p&gt;

&lt;p&gt;幸好我前几天才在朋友圈看了一篇文章，马上就活学活用， &lt;del&gt;结果算出来的实际年利率是 9.94%，各位兄弟，黑吧？&lt;/del&gt;&lt;/p&gt;

&lt;p&gt;所以除了免息免手续费，银行的一切分期都是吓死人的高利贷。&lt;/p&gt;

&lt;p&gt;当然，Q5 是绝对没有买的，我只不过是有点饿了，顺路转进去喝口水吃点蛋糕而已。&lt;/p&gt;</description>
      <author>xhj6</author>
      <pubDate>Sun, 08 Feb 2015 21:10:41 +0800</pubDate>
      <link>https://ruby-china.org/topics/24165</link>
      <guid>https://ruby-china.org/topics/24165</guid>
    </item>
    <item>
      <title>Ruby 程序员这么难招，我来搞个 Ruby 就业培训班或培训学校怎么样？</title>
      <description>&lt;p&gt;我恰好在教育系统，培训资质之类的东西估计比较好弄，我预期的模式是学费先收后返，考核合格全额返还学费，这些考核合格的学生如果没人要就我自己要了，然后基础内容我自己来讲（我最近系统的恶补了一下基础），高级内容外聘各位大牛，但真要搞的话，现在有这么几个问题：&lt;/p&gt;

&lt;p&gt;1、这事有最基本的可行性没有？&lt;/p&gt;

&lt;p&gt;2、学费收多少合适？&lt;/p&gt;

&lt;p&gt;3、这个课程内容如何设计？&lt;/p&gt;

&lt;p&gt;4、各位大牛是否有意出任高级讲师？&lt;/p&gt;

&lt;p&gt;5、如果您有意出任高级讲师，讲师成本大概会是多少？讲课费 + 机票 + 住宿=？&lt;/p&gt;

&lt;p&gt;恳请各位多多指点，不胜感谢！&lt;/p&gt;</description>
      <author>xhj6</author>
      <pubDate>Fri, 09 Jan 2015 12:43:52 +0800</pubDate>
      <link>https://ruby-china.org/topics/23629</link>
      <guid>https://ruby-china.org/topics/23629</guid>
    </item>
    <item>
      <title>紧急求助：请推荐可以在线生成 iPhone 和 iPad 界面效果图的网站，谢谢！</title>
      <description>&lt;p&gt;以前在网上看到过一个网站，上传界面图片，然后它可以把这个界面图片套到场景图片中，并且有很多模板可供选择，当时嫌贵没有收藏，现在要用找不到了，紧急求助，不胜感谢！&lt;/p&gt;</description>
      <author>xhj6</author>
      <pubDate>Thu, 06 Nov 2014 14:38:42 +0800</pubDate>
      <link>https://ruby-china.org/topics/22527</link>
      <guid>https://ruby-china.org/topics/22527</guid>
    </item>
    <item>
      <title>[重庆] 重庆创业团队招聘技术合伙人、Rails 开发工程师、前端工程师和设计师</title>
      <description>&lt;p&gt;  重庆市宽景网络技术有限公司是重庆本地的一家创业公司，目前致力于“健康老龄化”信息服务产品研发，与中科院重庆分院、重庆市科学院和重庆医科大学等单位已经建立了良好的合作关系，在社会老龄化程度迅速发展的形势下，我们研发的产品和服务具有广阔的市场前景。&lt;/p&gt;
&lt;h2 id="Rails 开发工程师 2名"&gt;Rails 开发工程师 2 名&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;基本要求：&lt;/strong&gt;我们需要的是全职的 Rails 全栈工程师，我们并不奢望您已经是 Github 或 StackOverflow 上的名人，只是希望您用 Rails 开发过真实的项目，从前端到后端，从开发到部署，您都做过就行。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;加分项：&lt;/strong&gt;熟练、高效；充满热情，富于激情；非完美主义者。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;待遇：&lt;/strong&gt;3-12k，我们欢迎有潜力的新手。&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="移动前端工程师 1 名"&gt;移动前端工程师 1 名&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;基本要求：&lt;/strong&gt;负责产品的 iPad 客户端开发，该客户端是基于 HTML5 的 Hybird 应用，因此希望您熟悉 Cordova 开发，熟悉 Sencha Touch 或了解 AngularJS + Ionic 开发。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;加分项：&lt;/strong&gt;熟悉 iOS 开发。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;待遇：&lt;/strong&gt;8-15k，我们需要的是熟手。&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="界面设计师 1 名"&gt;界面设计师 1 名&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;基本要求：&lt;/strong&gt;具有良好的美术功底，有吸引力的作品集。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;加分项：&lt;/strong&gt;完美主义者，对设计有浓厚的兴趣和热情，执着于像素级的细节。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;待遇：&lt;/strong&gt;8-18k，我们需要的是高手。&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="技术合伙人："&gt;技术合伙人：&lt;/h2&gt;
&lt;p&gt;  您，成竹在胸，自成体系；您，不在乎眼前的薪水高低，只关心事情的价值和意义；那么我们或许可以坐下来好好谈一谈，我们正需要这样的您，找的就是您！&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;工作地点&lt;/strong&gt;：两路口新干线大厦
&lt;strong&gt;工作时间&lt;/strong&gt;：弹性工作制，每周保证 20 个小时到公司即可。
&lt;strong&gt;联系方式&lt;/strong&gt;：huajian28 AT gmail.com&lt;/p&gt;</description>
      <author>xhj6</author>
      <pubDate>Mon, 12 May 2014 10:03:27 +0800</pubDate>
      <link>https://ruby-china.org/topics/19188</link>
      <guid>https://ruby-china.org/topics/19188</guid>
    </item>
    <item>
      <title>把外置键盘放在 MBP 的键盘上时，你们是如何关闭内置键盘的？</title>
      <description>&lt;p&gt;我在网上找到一种方法是简单粗暴的卸载模块：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo kextunload /System/Library/Extensions/AppleUSBTopCase.kext/Contents/PlugIns/AppleUSBTCKeyboard.kext/
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;但是我发现这样做的话，当电脑休眠后醒来时，外置内置键盘都失效了，咋整？&lt;/p&gt;

&lt;p&gt;各位，你们有没有更优雅的解决方案？&lt;/p&gt;</description>
      <author>xhj6</author>
      <pubDate>Tue, 06 May 2014 19:47:01 +0800</pubDate>
      <link>https://ruby-china.org/topics/19056</link>
      <guid>https://ruby-china.org/topics/19056</guid>
    </item>
    <item>
      <title>导出 iBooks 中的电子书 (epub 格式)</title>
      <description>&lt;p&gt;近日发现用零碎时间用 iPad 看看书还是不错的，就想把电脑中的来路不明的 epub 全部转移到 iPad 中，但是，电脑中的 epub 全部被 iBooks 解压成目录了，怎么办？&lt;/p&gt;

&lt;p&gt;随手写了个小脚本，提取书名，并将已解压了的文件重新打包，几十本书几分钟就全部重新回来了，会编程，就是这么屌！&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="c1"&gt;#!/usr/bin/env ruby&lt;/span&gt;

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

&lt;span class="n"&gt;ibooks_home&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'/Users/xiehuajian/Library/Containers/com.apple.BKAgentService/Data/Documents/iBooks/Books/'&lt;/span&gt;

&lt;span class="no"&gt;Dir&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;foreach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ibooks_home&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;dir&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="no"&gt;File&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;extname&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dir&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s2"&gt;".epub"&lt;/span&gt;
    &lt;span class="n"&gt;dir&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ibooks_home&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;dir&lt;/span&gt;
    &lt;span class="no"&gt;File&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dir&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s2"&gt;"/iTunesMetadata.plist"&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;f&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
      &lt;span class="n"&gt;doc&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Nokogiri&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;XML&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="n"&gt;book_name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;doc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;xpath&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'//key[text()="itemName"]/following::string'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;first&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;text&lt;/span&gt;
      &lt;span class="no"&gt;Dir&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;chdir&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dir&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="nb"&gt;print&lt;/span&gt; &lt;span class="s2"&gt;"."&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="sx"&gt;%x(zip -r "&lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;book_name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sx"&gt;.epub" .)&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="sx"&gt;%x(mv "&lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;book_name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sx"&gt;.epub" ~/Downloads/)&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="nb"&gt;puts&lt;/span&gt; &lt;span class="s2"&gt;"Done!"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;</description>
      <author>xhj6</author>
      <pubDate>Wed, 16 Apr 2014 18:11:50 +0800</pubDate>
      <link>https://ruby-china.org/topics/18639</link>
      <guid>https://ruby-china.org/topics/18639</guid>
    </item>
    <item>
      <title>卡萨布兰卡，让您发霉的老代码重新发亮吧</title>
      <description>&lt;h2 id="前因"&gt;前因&lt;/h2&gt;
&lt;p&gt;很多年前，我有个师兄，姓唐名朝，用 Delphi 开了一套单机软件，叫“智能中医诊断系统”，就是用户输入自己的症状，他那个软件就分析这些症状，有针对性的再问用户几个问题，最后给出一两个方子。当年他开发出来后，放到高交会上去展示，效果很好，他大喜，立马定价 888 元一套，结果买了大半年都只买了几套出去，房租又贵，只好关了公司重新打工去了。&lt;/p&gt;

&lt;p&gt;前些天刚好本地有个单位叫我给他们的 DLL 算法程序弄一下压力测试，做的过程中突然想到了我那不太走运的师兄，如果他那套程序搬上网会怎么样呢？很有技术含量的啊，算法都用了一大堆，在网上一定会大发特发的吧？光是买春药广告都不得了。。。&lt;/p&gt;
&lt;h2 id="卡萨布兰卡"&gt;卡萨布兰卡&lt;/h2&gt;
&lt;p&gt;去年，微软开源了代码为 Casablanca 的 &lt;a href="http://casablanca.codeplex.com/" rel="nofollow" target="_blank" title=""&gt;C++ REST SDK&lt;/a&gt;，目的主要是为了让 C++ 编程时更加方便的消费 RESTful 服务。但最近它新增了一项功能：&lt;code&gt;New experimental features such as HTTP Listener library&lt;/code&gt;，正是这项功能的出现，我认为它会成为一个比较具有潜力的项目，简单的说，利用 Casablanca，可以搭建起一个原生代码与云计算服务之间的双向桥梁，轻轻松松的把那些用 C、C++、Delphi 甚至是 VB 写的单机程序转变成 Web 服务，让单机时代的优秀创意在云计算时代重新闪亮！&lt;/p&gt;
&lt;h2 id="感受一下"&gt;感受一下&lt;/h2&gt;&lt;h2 id="准备DLL（假设说它就是您的过时代码）"&gt;准备 DLL（假设说它就是您的过时代码）&lt;/h2&gt;
&lt;p&gt;作为示例，我们开发一个 DLL，这个 DLL 调用 OpenCV 的图形处理功能将一张彩色图片转换为灰度图，代码如下，很简单：&lt;/p&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="cp"&gt;#include&lt;/span&gt; &lt;span class="cpf"&gt;"stdafx.h"&lt;/span&gt;&lt;span class="cp"&gt;
#include&lt;/span&gt; &lt;span class="cpf"&gt;"TestFuncDLL.h"&lt;/span&gt;&lt;span class="cp"&gt;
#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;lt;stdexcept&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;
#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;lt;opencv\cv.h&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;
#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;lt;opencv\highgui.h&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;
&lt;/span&gt;
&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="k"&gt;namespace&lt;/span&gt; &lt;span class="n"&gt;cv&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="k"&gt;namespace&lt;/span&gt; &lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;namespace&lt;/span&gt; &lt;span class="n"&gt;TestFuncs&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;MyTestFuncs&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;count&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;MyTestFuncs&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Gray&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;input&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;char&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;output&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
        &lt;span class="n"&gt;Mat&lt;/span&gt; &lt;span class="n"&gt;image&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

        &lt;span class="n"&gt;image&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;imread&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;input&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="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;image&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
            &lt;span class="n"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;" No image data &lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt; "&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
            &lt;span class="k"&gt;return&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="p"&gt;}&lt;/span&gt;

        &lt;span class="n"&gt;Mat&lt;/span&gt; &lt;span class="n"&gt;gray_image&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="n"&gt;cvtColor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;image&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;gray_image&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;CV_BGR2GRAY&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="n"&gt;imwrite&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;output&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;gray_image&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&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;p&gt;具体步骤为：&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;打开 VS 2013，新建一个 Win32 应用，在应用程序设置那一步选择“DLL”，建立一个 DLL 工程。&lt;/li&gt;
&lt;li&gt;使用 NuGet 程序包管理器，安装 OpenCV 支持。&lt;/li&gt;
&lt;li&gt;创建头文件和源文件，注意要加入&lt;code&gt;#define _CRT_SECURE_NO_DEPRECATE&lt;/code&gt;，不然链接 OpenCV 时会报错。&lt;/li&gt;
&lt;li&gt;编译，DLL 完工。&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;这里值得一提的是&lt;a href="http://docs.nuget.org/docs/start-here/overview" rel="nofollow" target="_blank" title=""&gt;NuGet&lt;/a&gt;，这玩意儿用起来比 gem 还方便，搜索程序包，然后点安装，就完事了。&lt;strong&gt;如果不看看 Ruby 之外的东西，真不知道各家的技术都这么好用了。&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="C++ Web Service"&gt;C++ Web Service&lt;/h2&gt;
&lt;p&gt;不废话，直接上代码。不到 100 行就可以把一个原生代码函数开放成一个 json web service，您还等什么呢，压箱子底的老旧代码都拿出来吧！&lt;/p&gt;

&lt;p&gt;这是侦听程序：&lt;/p&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="cp"&gt;#include&lt;/span&gt; &lt;span class="cpf"&gt;"stdafx.h"&lt;/span&gt;&lt;span class="cp"&gt;
#include&lt;/span&gt; &lt;span class="cpf"&gt;"TestListener.h"&lt;/span&gt;&lt;span class="cp"&gt;
#include&lt;/span&gt; &lt;span class="cpf"&gt;"TestFuncDLL.h"&lt;/span&gt;&lt;span class="cp"&gt;
#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;lt;iostream&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;
#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;lt;string&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;
&lt;/span&gt;
&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="k"&gt;namespace&lt;/span&gt; &lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;namespace&lt;/span&gt; &lt;span class="n"&gt;TestService&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;TestListener&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;TestListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;uri&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;m_litenser&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;http_listener&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="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;m_litenser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;support&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;methods&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;GET&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tr1&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;bind&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;TestListener&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;handle_get&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tr1&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;placeholders&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;_1&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
        &lt;span class="n"&gt;m_litenser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;support&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;methods&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;POST&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tr1&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;bind&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;TestListener&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;handle_post&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tr1&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;placeholders&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;_1&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;

        &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;m_litenser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;open&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="n"&gt;then&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="p"&gt;](){&lt;/span&gt; &lt;span class="n"&gt;wcout&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="s"&gt;"Test listener started."&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;endl&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}).&lt;/span&gt;&lt;span class="n"&gt;wait&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
            &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;exception&lt;/span&gt; &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
            &lt;span class="n"&gt;wcout&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;what&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;endl&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="n"&gt;TestListener&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;handle_get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;http_request&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
        &lt;span class="n"&gt;utility&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;string_t&lt;/span&gt; &lt;span class="n"&gt;greeting&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;U&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"您好！您现在访问的是测试引擎..."&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;field_map&lt;/span&gt; &lt;span class="n"&gt;answer&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="n"&gt;answer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;push_back&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;make_pair&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;string&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;U&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"greeting"&lt;/span&gt;&lt;span class="p"&gt;)),&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;string&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;greeting&lt;/span&gt;&lt;span class="p"&gt;)));&lt;/span&gt;
        &lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;reply&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;status_codes&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;OK&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;object&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;answer&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nf"&gt;wCharToChar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="kt"&gt;wchar_t&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;orig&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;nstring&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
        &lt;span class="kt"&gt;size_t&lt;/span&gt; &lt;span class="n"&gt;origsize&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;wcslen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;orig&lt;/span&gt;&lt;span class="p"&gt;)&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="kt"&gt;size_t&lt;/span&gt; &lt;span class="n"&gt;convertedChars&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="n"&gt;wcstombs_s&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;convertedChars&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;nstring&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;origsize&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;orig&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;_TRUNCATE&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;


    &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;handle_request&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;http_request&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;function&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;field_map&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;action&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;field_map&lt;/span&gt; &lt;span class="n"&gt;answer&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

        &lt;span class="n"&gt;request&lt;/span&gt;
            &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;extract_json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
            &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;then&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;answer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;action&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="n"&gt;pplx&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;task&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;task&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;try&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="k"&gt;auto&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;jvalue&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;task&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

                &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;jvalue&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;is_null&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
                &lt;span class="p"&gt;{&lt;/span&gt;
                    &lt;span class="n"&gt;action&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;jvalue&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;answer&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
                &lt;span class="p"&gt;}&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;
            &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;http_exception&lt;/span&gt; &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="n"&gt;wcout&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;what&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;endl&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;}).&lt;/span&gt;&lt;span class="n"&gt;wait&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

        &lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;reply&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;status_codes&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;OK&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;object&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;answer&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="n"&gt;TestListener&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;handle_post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;http_request&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;

        &lt;span class="n"&gt;handle_request&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="p"&gt;[](&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;jvalue&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;field_map&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;answer&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="n"&gt;input&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
            &lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="n"&gt;output&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;

            &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;auto&lt;/span&gt; &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;jvalue&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;first&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;is_string&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;second&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;is_string&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
                &lt;span class="p"&gt;{&lt;/span&gt;
                    &lt;span class="k"&gt;auto&lt;/span&gt; &lt;span class="n"&gt;key&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;first&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;as_string&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
                    &lt;span class="k"&gt;auto&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;second&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;as_string&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
                    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;U&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"input"&lt;/span&gt;&lt;span class="p"&gt;)){&lt;/span&gt;
                        &lt;span class="n"&gt;wCharToChar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;c_str&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="n"&gt;input&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
                    &lt;span class="p"&gt;}&lt;/span&gt;
                    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;U&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"output"&lt;/span&gt;&lt;span class="p"&gt;)){&lt;/span&gt;
                        &lt;span class="n"&gt;wCharToChar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;c_str&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="n"&gt;output&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
                    &lt;span class="p"&gt;}&lt;/span&gt;
                &lt;span class="p"&gt;}&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;

            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;strlen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;input&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;strlen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;output&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
                &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;TestFuncs&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;MyTestFuncs&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Gray&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;input&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;output&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;   
        &lt;span class="p"&gt;});&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;p&gt;这是主程序：&lt;/p&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="c1"&gt;// TestWebService.cpp : 定义控制台应用程序的入口点。&lt;/span&gt;
&lt;span class="c1"&gt;//&lt;/span&gt;

&lt;span class="cp"&gt;#include&lt;/span&gt; &lt;span class="cpf"&gt;"stdafx.h"&lt;/span&gt;&lt;span class="cp"&gt;
#include&lt;/span&gt; &lt;span class="cpf"&gt;"MainListerner.h"&lt;/span&gt;&lt;span class="cp"&gt;
#include&lt;/span&gt; &lt;span class="cpf"&gt;"TestListener.h"&lt;/span&gt;&lt;span class="cp"&gt;
#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;lt;thread&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;
&lt;/span&gt;
&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="k"&gt;namespace&lt;/span&gt; &lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;mainListener&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
    &lt;span class="n"&gt;TestService&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;MainListener&lt;/span&gt; &lt;span class="n"&gt;listener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;L"http://localhost/welcome"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;testListener&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
    &lt;span class="n"&gt;TestService&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;TestListener&lt;/span&gt; &lt;span class="n"&gt;listener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;L"http://localhost/test"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nf"&gt;_tmain&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;argc&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;_TCHAR&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;argv&lt;/span&gt;&lt;span class="p"&gt;[])&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;cout&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="s"&gt;"启动测试引擎服务..."&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;endl&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kr"&gt;thread&lt;/span&gt; &lt;span class="n"&gt;t_main&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;mainListener&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="kr"&gt;thread&lt;/span&gt; &lt;span class="n"&gt;t_test&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;testListener&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;t_main&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;join&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="n"&gt;t_test&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;join&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;p&gt;在主项目中，除了要添加 DLL 引用外，同样，也用 NuGet 添加 c++ rest sdk 支持。&lt;/p&gt;
&lt;h2 id="这么点代码，它完成了什么功能"&gt;这么点代码，它完成了什么功能&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;TestFuncDLL.dll 完成的功能很简单，就是调用 OpenCV 将一张彩色图片转换为灰色图片，计算量肯定比你们的程序小很多。&lt;/p&gt;

&lt;p&gt;TestWebService.exe 是封装好了的程序，它提供两个接口：&lt;a href="http://localhost/welcome" rel="nofollow" target="_blank"&gt;http://localhost/welcome&lt;/a&gt; 和 &lt;a href="http://localhost/testhttp://localhost/welcome" rel="nofollow" target="_blank"&gt;http://localhost/testhttp://localhost/welcome&lt;/a&gt;，其中 只接受 GET 请求，/test 接口接受 GET 和 POST 请求。&lt;/p&gt;

&lt;p&gt;GET 请求均只是简单的返回一个欢迎字符串，比如 welcome 返回 {"greeting":"您好！中科院重庆分院美妆引擎正在为您服务..."}。&lt;/p&gt;

&lt;p&gt;/test 接口接受 json 数据的 POST 请求，json 数据格式为：{"input": "源图片路径", "output": "输出图片路径"}，显然，这里只考虑了本机访问的情况，如果外网访问，这两个参数应是“地址”而不是“路径”。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="平台支持"&gt;平台支持&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;由于 Casablanca 目前还只是实验性的，目前只支持 Windows 7, 8 和 Linux，其中 Linux 下不支持 https、认证等功能。&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="新代码用得上吗"&gt;新代码用得上吗&lt;/h2&gt;
&lt;p&gt;当然也用得上，比如在计算机视觉、图形图像等领域，C++ 被大量使用，这些代码除了以传统的中间件（如 ICE 等）的形式整合到线上外，Casablanca 的出现，我们可以有了另一种比较轻便、廉价的选择。&lt;/p&gt;
&lt;h2 id="疑问"&gt;疑问&lt;/h2&gt;
&lt;p&gt;最后，我有一个疑问，相比 Casablanca 把原生代码封装成 WebService，还有一种更加简单的方案，就是直接用 Ruby/Python/.NET 等调用 DLL。是啊，直接调用 DLL 就完了嘛，需要 卡萨布兰卡 吗？需要吗，不需要吗？我怎么本能感觉用语言直接调用 DLL 不太靠谱呢？&lt;/p&gt;

&lt;p&gt;各位分析一下，直接调用是不是真的不靠谱，哪点不靠谱了，还是仅仅只是我自己想复杂了？&lt;/p&gt;</description>
      <author>xhj6</author>
      <pubDate>Sat, 25 Jan 2014 01:37:52 +0800</pubDate>
      <link>https://ruby-china.org/topics/16982</link>
      <guid>https://ruby-china.org/topics/16982</guid>
    </item>
    <item>
      <title>好多年没摸微软家的东西了，这算不算是一种自我封闭呢？</title>
      <description>&lt;p&gt;我 6、7 年前还写过 C# 程序的，当时感觉 C# 写着挺顺手的（相对于 Java）, VS + Reshaper 也很好用。&lt;/p&gt;

&lt;p&gt;不知道什么时候就完全只在 Linux + Mac 的环境下折腾了，生命不息，折腾不止，对微软的东西下意识的总是绕着走，结果——&lt;/p&gt;

&lt;p&gt;结果，今天一兄弟对我说：听说你 Web 开发挺厉害的，帮我们做个压力测试吧？&lt;/p&gt;

&lt;p&gt;好的，没问题！包在我身上！！&lt;/p&gt;

&lt;p&gt;文件传输中……【OK】&lt;/p&gt;

&lt;p&gt;这是什么？我问。&lt;/p&gt;

&lt;p&gt;哦，忘了给你说了，这个运行环境是 windows 2008，需要 OpenCV 支持，核心算法封装在 DLL 中，麻烦做个压力测试，谢谢，我下了哈~！&lt;/p&gt;

&lt;p&gt;然后，各位大神，怎么给 DLL 做压力测试呢？&lt;/p&gt;

&lt;p&gt;我在这儿问这个问题，答案是次要的，而是想知道，如果不得不做，那么和我的技术背景大致差不多的你们，从何着手？感想如何？有没有另一片天地的感觉？&lt;/p&gt;</description>
      <author>xhj6</author>
      <pubDate>Mon, 13 Jan 2014 23:25:46 +0800</pubDate>
      <link>https://ruby-china.org/topics/16774</link>
      <guid>https://ruby-china.org/topics/16774</guid>
    </item>
    <item>
      <title>有人用过 paloma 这个 gem 吗？貌似能够解决 rails 项目中 js 按页面执行和向 js 传递变量这两大痛点，很有点心动啊！</title>
      <description>&lt;p&gt;地址在&lt;a href="https://github.com/kbparagua/paloma" rel="nofollow" target="_blank" title=""&gt;这儿&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;刚才发现的，很想动手试试，但近期没有时间，&lt;/p&gt;

&lt;p&gt;各位瞅瞅，你们认为它科学吗？好用吗？比起 &lt;a href="https://github.com/gazay/gon" rel="nofollow" target="_blank" title=""&gt;gon&lt;/a&gt; + jbuilder 如何？&lt;/p&gt;</description>
      <author>xhj6</author>
      <pubDate>Tue, 24 Dec 2013 21:57:47 +0800</pubDate>
      <link>https://ruby-china.org/topics/16400</link>
      <guid>https://ruby-china.org/topics/16400</guid>
    </item>
    <item>
      <title>支持中文分词的 sunspot_solr</title>
      <description>&lt;p&gt;前几天在折腾搜索功能，发现 &lt;a href="https://github.com/sunspot/sunspot/" rel="nofollow" target="_blank" title=""&gt;solr&lt;/a&gt; + &lt;a href="https://github.com/sunspot/sunspot/" rel="nofollow" target="_blank" title=""&gt;sunspot&lt;/a&gt; 仍应是当前的首选，成熟度以及开发文档、开发实例的完备性和丰富性等方面都比 &lt;a href="http://www.elasticsearch.org/" rel="nofollow" target="_blank" title=""&gt;elasticsearch&lt;/a&gt; + &lt;a href="https://github.com/karmi/retire" rel="nofollow" target="_blank" title=""&gt;tire&lt;/a&gt; 要好一些，如果你钟情于 elasticsearch，也许应再等一等&lt;a href="https://github.com/elasticsearch/elasticsearch-ruby%E2%80%8E" title=""&gt;elasticsearch-ruby&lt;/a&gt; 的开发进度，比方说等到&lt;a href="https://github.com/elasticsearch/elasticsearch-ruby/issues/6" rel="nofollow" target="_blank" title=""&gt;这个问题&lt;/a&gt;关闭了之后。&lt;/p&gt;

&lt;p&gt;与 elasticsearch 相比，solr 的安装配置稍显麻烦，但是 &lt;a href="/quakewang" class="user-mention" title="@quakewang"&gt;&lt;i&gt;@&lt;/i&gt;quakewang&lt;/a&gt; 做了&lt;a href="https://github.com/quake/sunspot_chinese_example" rel="nofollow" target="_blank" title=""&gt;一个脚本&lt;/a&gt;，可以一步完成 solr 的下载安装，已经非常简单了，但在开发测试环境中还是没有 sunspot 自带的 sunspot_solr 使用起来方便，于是我就直接修改了 sunspot_solr，将其中的 solr.war 替换为 solr 4.3.1 版，并集成了 mmseg4j 1.9.1 中文分词插件，在开发测试环境中安装使用 solr 就可以完全 gem 化了（在生产环境中使用也是完全可以的）：&lt;/p&gt;

&lt;p&gt;安装：&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;'sunspot_rails'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'~&amp;gt; 2.1.0'&lt;/span&gt;
&lt;span class="n"&gt;group&lt;/span&gt; &lt;span class="ss"&gt;:development&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:test&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
  &lt;span class="n"&gt;gem&lt;/span&gt; &lt;span class="s1"&gt;'sunspot_solr'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;github: &lt;/span&gt;&lt;span class="s1"&gt;'xhj/sunspot'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;require: &lt;/span&gt;&lt;span class="s1"&gt;'sunspot_solr'&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 ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;bundle&lt;/span&gt; &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="n"&gt;rake&lt;/span&gt; &lt;span class="n"&gt;sunspot&lt;/span&gt;&lt;span class="ss"&gt;:solr:start&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;简单吧？哈哈！&lt;/p&gt;</description>
      <author>xhj6</author>
      <pubDate>Sat, 30 Nov 2013 10:51:47 +0800</pubDate>
      <link>https://ruby-china.org/topics/15897</link>
      <guid>https://ruby-china.org/topics/15897</guid>
    </item>
    <item>
      <title>RMBP 外接显示器效果如何，字体会不会模糊</title>
      <description>&lt;p&gt;最近准备入手一个外接显示器，但我看到网上说 RMBP 外接显示器字体会比较模糊，是真的吗，用过的兄弟伙出来讲一下，谢谢！&lt;/p&gt;</description>
      <author>xhj6</author>
      <pubDate>Mon, 15 Jul 2013 20:54:26 +0800</pubDate>
      <link>https://ruby-china.org/topics/12528</link>
      <guid>https://ruby-china.org/topics/12528</guid>
    </item>
    <item>
      <title>天热了，有觉得在床上用 MBP 很蛋疼的没有？</title>
      <description>&lt;p&gt;非常蛋疼！MBP 的棱角都太锋利了，半躺在床上，以肚子为支撑，双腿为支点，不一会儿就在腿上和肚子上搁出两条刀割似的红印出来，很不舒服。平放在肚子上呢，敲键盘时手又不能自然舒展，并且肚子圆鼓鼓的，也放不牢靠。&lt;/p&gt;

&lt;p&gt;如何才能在床上很轻松的使用电脑呢？&lt;/p&gt;</description>
      <author>xhj6</author>
      <pubDate>Thu, 13 Jun 2013 22:42:41 +0800</pubDate>
      <link>https://ruby-china.org/topics/11707</link>
      <guid>https://ruby-china.org/topics/11707</guid>
    </item>
    <item>
      <title>正则表达式，如何匹配所有的标点符号，但不匹配单词中间的单引号？</title>
      <description>&lt;p&gt;几十年以来，一直都对正则表达式一塌糊涂的，现在紧急求助：&lt;/p&gt;

&lt;p&gt;如何过滤掉字符串中的所有标点符号，但不得过滤类似于 don’t 这种单词中间的单引号？&lt;/p&gt;

&lt;p&gt;现在一点思路都没有，求指点，求提示，谢谢！&lt;/p&gt;

&lt;p&gt;另，&lt;code&gt;/\p{P}/&lt;/code&gt; 为什么无法过滤掉 &lt;code&gt;“”‘’&lt;/code&gt; 这四个引号？&lt;/p&gt;</description>
      <author>xhj6</author>
      <pubDate>Wed, 24 Apr 2013 09:52:04 +0800</pubDate>
      <link>https://ruby-china.org/topics/10453</link>
      <guid>https://ruby-china.org/topics/10453</guid>
    </item>
    <item>
      <title>8G 内存不够用啊啊啊啊啊~~~~~~</title>
      <description>&lt;p&gt;&lt;img title=":scream:" alt="😱" src="https://twemoji.ruby-china.com/2/svg/1f631.svg" class="twemoji"&gt; &lt;img title=":scream:" alt="😱" src="https://twemoji.ruby-china.com/2/svg/1f631.svg" class="twemoji"&gt; &lt;img title=":scream:" alt="😱" src="https://twemoji.ruby-china.com/2/svg/1f631.svg" class="twemoji"&gt;&lt;/p&gt;

&lt;p&gt;没装虚拟机之前还好，感觉刚刚够用，为了测试方便用 Parallels 装了个瘟妻，一下内存就紧张了，8 大 8G 啊，为什么 Mac 这么耗内存啊~~~~&lt;/p&gt;

&lt;p&gt;ps：哪位兄弟知道内存是插上去的还是焊上去的，有没有办法升为 16G？&lt;/p&gt;</description>
      <author>xhj6</author>
      <pubDate>Sat, 16 Feb 2013 16:48:15 +0800</pubDate>
      <link>https://ruby-china.org/topics/8708</link>
      <guid>https://ruby-china.org/topics/8708</guid>
    </item>
    <item>
      <title>真心求教：unicorn 错误日志中的这种出错信息如何解决？</title>
      <description>&lt;p&gt;&lt;strong&gt;背景：&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;手头的某个项目系统上线运行了很长一段时间了，之前一直在给客户解决功能性的需求问题，现在才着手处理系统运行中的稳定性问题和性能问题。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;环境：&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Ruby 1.9.3-p374 + Rails 3.2.11 + Unicorn 4.5.0 + Nginx&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;现象：&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;现象 1：&lt;/strong&gt;unicorn.stderr.log 中几乎每天都有几条这样的出错信息：&lt;code&gt;Error: Couldn't open file ':source'&lt;/code&gt;（就这么一行几个单词，前面连时间都没有），nginx 的 error.log 中时不时也有这样的出错信息：&lt;code&gt;2013/01/06 13:56:58 [error] 1484#0: *12266 upstream timed out (110: Connection timed out) while reading response header from upstream...&lt;/code&gt;，但在 production.log 中却没有显示&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;现象 2：&lt;/strong&gt;系统运行时似乎存在内存泄漏，内存占用会一直地缓慢上升，让我不得不十天半个月左右重启一下 unicorn&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;问题：&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;问题 1：&lt;/strong&gt;现象 1 中的&lt;code&gt;Error: Couldn't open file ':source'&lt;/code&gt;是否就是&lt;code&gt;upstream timed out&lt;/code&gt;引起的？（由于 unicorn 的这一条出错信息前没有时间，所以我只是怀疑，无法肯定）&lt;strong&gt;原因是什么？如何消灭它？&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;问题 2：&lt;/strong&gt;内存泄漏一般说来是什么引起的？是我代码的问题还是 Rails 本来就有这个问题？&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;请各位不吝指教，谢谢。&lt;/strong&gt;&lt;/p&gt;</description>
      <author>xhj6</author>
      <pubDate>Wed, 06 Feb 2013 17:04:27 +0800</pubDate>
      <link>https://ruby-china.org/topics/8629</link>
      <guid>https://ruby-china.org/topics/8629</guid>
    </item>
    <item>
      <title>神啊，赞美一下写软件的可怜人儿吧</title>
      <description>&lt;h2 id="案例一"&gt;案例一&lt;/h2&gt;
&lt;p&gt;几个月前，一家物流公司的需求有所变化，组织结构有所调整，我写的软件不太适应这个变化，物流公司要求我改。&lt;/p&gt;

&lt;p&gt;我小心翼翼的有点委屈，于是对老婆的表妹夫联发科的一位硬件工程师说，他们这个需求变化了怎么能怪我的软件呢，联发科的同学一听，立马判断，那肯定是你软件没写好啊！&lt;/p&gt;

&lt;p&gt;我一愣，对啊，确实是自己的软件没写好啊。&lt;/p&gt;
&lt;h2 id="案例二"&gt;案例二&lt;/h2&gt;
&lt;p&gt;元旦期间感冒了，发烧了，连续烧了两天两夜，稍好点了之后，我向老婆抱怨说她开的抗生素一点作用都没有起。&lt;/p&gt;

&lt;p&gt;老婆大怒，到办公室给同事们讲，xhj 说我不该给他开拜复乐，应该给他开青霉素，众医生皆大笑，说，下回让他自己开药嘛。&lt;/p&gt;

&lt;p&gt;我无地自容……&lt;/p&gt;
&lt;h2 id="总结"&gt;总结&lt;/h2&gt;
&lt;p&gt;求安慰，求赞美！！！&lt;/p&gt;</description>
      <author>xhj6</author>
      <pubDate>Sun, 06 Jan 2013 17:00:32 +0800</pubDate>
      <link>https://ruby-china.org/topics/7810</link>
      <guid>https://ruby-china.org/topics/7810</guid>
    </item>
    <item>
      <title>新浪 SAE 部署过程中的几个小坑</title>
      <description>&lt;p&gt;首先感谢 &lt;a href="/lgn21st" class="user-mention" title="@lgn21st"&gt;&lt;i&gt;@&lt;/i&gt;lgn21st&lt;/a&gt; 送的邀请码。&lt;/p&gt;

&lt;p&gt;得到邀请码后，昨天就把自己刚开始开发的一个项目部署上去了，总体而言，非常的简单，按官方的文档操作就是了。我这里把它综合一下，主要是减少初次接触 Cloud Foundry 的兄弟的 google 时间。&lt;/p&gt;
&lt;h2 id="1. Gemfile"&gt;1. Gemfile&lt;/h2&gt;
&lt;p&gt;官方文档中有这么一段：&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="c1"&gt;# For Ruby 1.9 Cloud Foundry requires a tweak to the jquery-rails gem.&lt;/span&gt;
&lt;span class="c1"&gt;# gem 'jquery-rails'&lt;/span&gt;
&lt;span class="n"&gt;gem&lt;/span&gt; &lt;span class="s1"&gt;'cloudfoundry-jquery-rails'&lt;/span&gt;

&lt;span class="c1"&gt;# For Ruby 1.9 Cloud Foundry requires a tweak to devise.&lt;/span&gt;
&lt;span class="c1"&gt;# Uncomment next line if you plan to use devise.&lt;/span&gt;
&lt;span class="c1"&gt;# gem 'cloudfoundry-devise', :require =&amp;gt; 'devise'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;但是 &lt;code&gt;cloudfoundry-jquery-rails&lt;/code&gt; 和 &lt;code&gt;cloudfoundry-devise&lt;/code&gt; 都差不多有一年没有维护了，咋整？&lt;/p&gt;

&lt;p&gt;其实是文档中没有把 &lt;code&gt;require a tweak&lt;/code&gt; 说清楚，事实上只不过就是 jquery-rails 和 devise 的 gemspec 中的作者姓名中包含有非 ASCII 的 UTF 字符，把这些字符去掉就可以了。如果你嫌自己 fork 代码麻烦，也可以直接用我 fork 的：&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;'jquery-rails'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:git&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'git://github.com/xhj/jquery-rails.git'&lt;/span&gt;
&lt;span class="n"&gt;gem&lt;/span&gt; &lt;span class="s1"&gt;'devise'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:git&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'git://github.com/xhj/devise.git'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="2. MySQL"&gt;2. MySQL&lt;/h2&gt;
&lt;p&gt;据说 Cloud Foundry 是支持自动化配置 MySQL 的，但我没有试，因为手工配置也是很简单的，如下：&lt;/p&gt;

&lt;p&gt;首先在 Gemfile 中加入&lt;code&gt;gem  'cf-runtime'&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;然后在 database.yml 中这么配置：&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="ss"&gt;adapter: &lt;/span&gt;&lt;span class="n"&gt;mysql2&lt;/span&gt;
  &lt;span class="ss"&gt;encoding: &lt;/span&gt;&lt;span class="n"&gt;utf8&lt;/span&gt;
  &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sx"&gt;% require &lt;/span&gt;&lt;span class="s1"&gt;'cfruntime/properties'&lt;/span&gt; &lt;span class="o"&gt;%&amp;gt;&lt;/span&gt;
  &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sx"&gt;% db_svc &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;CFRuntime&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;CloudApp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;service_props&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'mysql'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;%&amp;gt;&lt;/span&gt;
  &lt;span class="ss"&gt;database: &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sx"&gt;%= db_svc[:database] rescue 'xxx_production' %&amp;gt;
  username: &amp;lt;%=&lt;/span&gt; &lt;span class="n"&gt;db_svc&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:username&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="k"&gt;rescue&lt;/span&gt; &lt;span class="s1"&gt;'xhj'&lt;/span&gt; &lt;span class="o"&gt;%&amp;gt;&lt;/span&gt;
  &lt;span class="ss"&gt;password: &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sx"&gt;%= db_svc[:password] rescue 'xhj_love_xxx' %&amp;gt;
  host: &amp;lt;%=&lt;/span&gt; &lt;span class="n"&gt;db_svc&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:host&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="k"&gt;rescue&lt;/span&gt; &lt;span class="s1"&gt;'localhost'&lt;/span&gt; &lt;span class="o"&gt;%&amp;gt;&lt;/span&gt;
  &lt;span class="ss"&gt;port: &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sx"&gt;%= db_svc[:port] rescue '3306' %&amp;gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;最后再新建一个初始化文件&lt;code&gt;cf_db_migrate.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="s1"&gt;'cfruntime/properties'&lt;/span&gt;

&lt;span class="c1"&gt;# Run the equivalent of rake db:migrate on startup&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="no"&gt;CFRuntime&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;CloudApp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;running_in_cloud?&lt;/span&gt;
  &lt;span class="n"&gt;migrations&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Rails&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;root&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'db'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s1"&gt;'migrate'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;migrations&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;directory?&lt;/span&gt;
    &lt;span class="no"&gt;ActiveRecord&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Migrator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;migrate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;migrations&lt;/span&gt;&lt;span class="p"&gt;)&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;h2 id="3. 504"&gt;3. 504&lt;/h2&gt;
&lt;p&gt;然后我就开始部署了：&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;vmc push &lt;span class="nt"&gt;--runtime&lt;/span&gt; ruby19
Would you like to deploy from the current directory? &lt;span class="o"&gt;[&lt;/span&gt;Yn]: y
Application Name: xxx
Detected a Rails Application, is this correct? &lt;span class="o"&gt;[&lt;/span&gt;Yn]: y
Application Deployed URL &lt;span class="o"&gt;[&lt;/span&gt;xxx.scfapp.com]: 
Memory reservation &lt;span class="o"&gt;(&lt;/span&gt;128M, 256M, 512M, 1G, 2G&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;256M]: 
How many instances? &lt;span class="o"&gt;[&lt;/span&gt;1]: 
Create services to &lt;span class="nb"&gt;bind &lt;/span&gt;to &lt;span class="s1"&gt;'xxx'&lt;/span&gt;? &lt;span class="o"&gt;[&lt;/span&gt;yN]: y
1: mongodb
2: mysql
3: rabbitmq
4: redis
What kind of service?: 2
Specify the name of the service &lt;span class="o"&gt;[&lt;/span&gt;mysql-ef6f0]: mysql-xxx
Create another? &lt;span class="o"&gt;[&lt;/span&gt;yN]: N
Would you like to save this configuration? &lt;span class="o"&gt;[&lt;/span&gt;yN]: y
Manifest written to manifest.yml.
Creating Application: OK
Creating Service &lt;span class="o"&gt;[&lt;/span&gt;mysql-xxx]: OK
Binding Service &lt;span class="o"&gt;[&lt;/span&gt;mysql-xxx]: OK
Uploading Application:
  Checking &lt;span class="k"&gt;for &lt;/span&gt;available resources: OK
  Processing resources: OK
  Packing application: OK
  Uploading &lt;span class="o"&gt;(&lt;/span&gt;24M&lt;span class="o"&gt;)&lt;/span&gt;: OK   
Push Status: OK
Staging Application &lt;span class="s1"&gt;'xxx'&lt;/span&gt;: ...............................Error &lt;span class="o"&gt;(&lt;/span&gt;JSON 504&lt;span class="o"&gt;)&lt;/span&gt;: &amp;lt;html&amp;gt;
&amp;lt;&lt;span class="nb"&gt;head&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&amp;lt;title&amp;gt;504 Gatewa...
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;看着一个个绿色的 OK，心想不对啊，TMD 顺利得一塌糊涂的，怎么也应该出点错啥？&lt;/p&gt;

&lt;p&gt;然后马上就如愿以偿了，来了个红色的 504 错误，啥玩意儿？&lt;/p&gt;

&lt;p&gt;答案：内存整小了，把默认的 256M 改成 512M 就过了。&lt;/p&gt;

&lt;p&gt;end.&lt;/p&gt;</description>
      <author>xhj6</author>
      <pubDate>Sun, 25 Nov 2012 15:39:33 +0800</pubDate>
      <link>https://ruby-china.org/topics/7083</link>
      <guid>https://ruby-china.org/topics/7083</guid>
    </item>
    <item>
      <title>网上有哪些付费的学习资源，各位大神推荐一下</title>
      <description>&lt;p&gt;先简介一下个人情况，资深新手一枚，三十老几了，上次写程序还是八年前用 Java 为一个骗子公司写一个支付平台，比支付宝还早，用的 Struts+iBatis，当时人们还普遍在用 asp 或 jsp 呢，呵呵。&lt;/p&gt;

&lt;p&gt;比 Java 更早的语言经历是学了一点 c 语言，非谭浩强版，天地良心，就这么点基础。&lt;/p&gt;

&lt;p&gt;离开骗子公司之后，俺的中文硕士也毕业了，分配到了教育行业，经过八年抗战，成为了一名资深的教育理论专家，中心核心期刊发表文章 n 篇……然后，最近奶粉钱不够了，准备重操旧业，捡起八年前的家伙和各位小兄弟抢饭吃，不过发现 java 不太好使了，特别是对于我这种个体户而言，挑来挑去，Ruby 看着比较顺眼。&lt;/p&gt;

&lt;p&gt;言归正传，我是学中文的，英文基础比较差，一天看个 20 来页书，就老眼昏花了，学习进度很慢，无意中发现 codeschool，讲些什么 git, rspec, backbone 之类的东东，虽然不知道讲的什么，但看上去是很牛逼的样子，果断砸出 1 罐奶粉钱，订了一个月，发现虽然程度很浅，过经过脉的地方还是都涉及到了，结合看书，收效颇丰。&lt;/p&gt;

&lt;p&gt;但是，毕竟讲得太浅了，各位小兄弟大神们，网上还有哪些类似的收费资源？推荐一下子！先谢了！&lt;/p&gt;</description>
      <author>xhj6</author>
      <pubDate>Sun, 19 Aug 2012 13:05:34 +0800</pubDate>
      <link>https://ruby-china.org/topics/5026</link>
      <guid>https://ruby-china.org/topics/5026</guid>
    </item>
  </channel>
</rss>
