<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">

  <title><![CDATA[暴走编程]]></title>
  <link href="https://2019.vibejun.com/atom.xml" rel="self"/>
  <link href="https://2019.vibejun.com/"/>
  <updated>2019-08-29T12:13:38+08:00</updated>
  <id>https://2019.vibejun.com/</id>
  <author>
    <name><![CDATA[XuYiJun]]></name>
    
  </author>
  <generator uri="http://octopress.org/">Octopress</generator>

  
  <entry>
    <title type="html"><![CDATA[新款 MacBook Pro 无法连接 2.4G WiFi？]]></title>
    <link href="https://2019.vibejun.com/blog/2019/05/29/the-reason-why-the-new-macbook-pro-cannot-connect-to-2-dot-4ghz-wifi/"/>
    <updated>2019-05-29T22:52:00+08:00</updated>
    <id>https://2019.vibejun.com/blog/2019/05/29/the-reason-why-the-new-macbook-pro-cannot-connect-to-2-dot-4ghz-wifi</id>
    <content type="html"><![CDATA[<h2 id="section">问题的发现</h2>

<p>尝试优化 5G WiFi 传输速率时，发现我的 MacBook Pro(2016 Multi-Touch Bar 高配版) 无法连接 2.4G 的 WiFi。一开始是输入正确的密码，也无法连接，之后是连输入密码这一步都到不了，直接提示无法连接。用其他设备可以正常连接 2.4G WiFi，可以排除，不是路由器的问题。</p>

<p><img src="https://cdn.jsdelivr.net/gh/junxy/junxy.github.com/images/2019/5/WX20190529-225620@2x.jpg" alt="" /></p>

<p>以前没有发现这个问题，还以为是 macOS Mojave 系统问题，重启系统、更新系统版本到 <code>10.14.5 (18F132)</code> 问题依旧。</p>

<h2 id="section-1">原因</h2>

<p>查了不少资料，中文很少有说到点，最后用英文关键词搜索 <code>macos mojave cannot connect 2.4g</code> 应该是找到了答案：<strong>USB3.0 会干扰 2.4G WiFi</strong>。</p>

<p><img src="https://cdn.jsdelivr.net/gh/junxy/junxy.github.com/images/2019/5/WX20190529-225621@2x.png" alt="" />
Ref: <a href="https://forums.macrumors.com/threads/wifi-issues-with-new-mbp-on-2-4ghz.2064959/#post-27194251">https://forums.macrumors.com/threads/wifi-issues-with-new-mbp-on-2-4ghz.2064959/#post-27194251</a></p>

<p>赶紧验证一下：</p>

<ul>
  <li>拔掉 <code>Type-C to USB 转接口</code>(相当于断掉所有外设)，重连 2.4G WiFi，秒连 ✅</li>
  <li>插上 <code>Type-C to USB 转接口</code> + <code>USB2.0 的机械键盘</code>，重连 2.4G WiFi，秒连 ✅ (也排除，不是转接口的问题)</li>
  <li><code>Type-C to USB 转接口</code> + <code>USB3.0 移动硬盘</code>，无法连接 2.4G WiFi ❌</li>
  <li><code>Type-C to USB 转接口</code> + <code>USB3.0 Hub(不连接其他设备)</code>，也无法连接 2.4G WiFi ❌ (特意拆开 Hub，看了一下里面有电路和芯片，即使不连接其他外设也会激活 USB3.0)</li>
</ul>

<p><strong>基本可以确认，使用 USB3.0 时会严重干扰 2.4G WiFi（尤其是 WiFi 连接认证的时候）</strong></p>

<h2 id="section-2">解决方案</h2>

<ol>
  <li>尽量使用 5G WiFi（推荐），（BTW：有时候 5G WiFi 也有可能会被干扰到，主要是在连接认证的时候，碰到过1次）</li>
  <li>连接 2.4G WiFi 认证时，拔掉外设，连上之后再插回去。(我试了下，连上后可以正常上网，但稳定性不好说，时间长不知道会不会掉线重连)</li>
  <li>用 USB 2.0，像键盘是可以，没什么影响，移动硬盘用 USB2.0 就太慢了</li>
  <li>给 USB 3.0 线和设备增加更好的屏蔽层（理论上应该可以，但有些不切实际）</li>
</ol>

<p>后面用中文搜索关键词 <code>macos mojave 无法连接 2.4g</code>，发现知乎 <a href="https://www.zhihu.com/question/52372614">https://www.zhihu.com/question/52372614</a> 也有提到这个问题。</p>

<p>这个问题应该是个设计问题，至少目前 Apple 公司无法解决（2016/2017 MacBook Pro，都有这个问题，会不会解决还不清楚），可能和推出 Type-C 接口有很大关系。</p>

<h2 id="section-3">相关参考：</h2>

<ul>
  <li><a href="https://discussions.apple.com/thread/8440574?answerId=33563118022#33563118022">https://discussions.apple.com/thread/8440574?answerId=33563118022#33563118022</a></li>
  <li><a href="https://www.intel.com/content/www/us/en/products/docs/io/universal-serial-bus/usb3-frequency-interference-paper.html">https://www.intel.com/content/www/us/en/products/docs/io/universal-serial-bus/usb3-frequency-interference-paper.html</a></li>
  <li><a href="https://apple.stackexchange.com/questions/329970/usb-c-dongles-killing-wifi-on-2016-2017-macbooks-who-s-to-blame">https://apple.stackexchange.com/questions/329970/usb-c-dongles-killing-wifi-on-2016-2017-macbooks-who-s-to-blame</a></li>
</ul>

<h2 id="wifi-">最后分享两个 WiFi 相关的</h2>

<p>1.在 macOS 中点击 WiFi 图标时，按住 <code>option</code> 键，可以查看到详细的 WiFi 连接信息
<img src="https://cdn.jsdelivr.net/gh/junxy/junxy.github.com/images/2019/5/WX20190529-225622@2x.png" alt="" /></p>

<p>2.关于 5G WiFi 的优化的方法之一，使用 DFS 频道。所谓 DFS 频道，就是不同国家和地区限制部分 5Ghz 频道的使用，但符合相关设定也可以使用。</p>

<p>如果所在环境 5G WiFi 非常多的话，频道不够用，可以考虑使用 DFS 频道减少干扰（在有些国家和地区，不恰当使用可能违法。要遵守，在室内，在限制的发射功率内使用，避免干扰公共设施）。</p>

<p>有些路由器系统可以开启所有支持的频道，我实际测试下来，使用 DFS 频道效果不明显，不知道是不是兼容问题。不过周围 5G WiFi 频道不多，干扰不大，就先这样了。</p>

<p><img src="https://cdn.jsdelivr.net/gh/junxy/junxy.github.com/images/2019/5/WX20190529-225623@2x.png" alt="" />
<img src="https://cdn.jsdelivr.net/gh/junxy/junxy.github.com/images/2019/5/WX20190529-225624@2x.png" alt="" /></p>

<p>了解 DFS 更多：</p>

<ul>
  <li><a href="https://netbeez.net/blog/dfs-channels-wifi/">https://netbeez.net/blog/dfs-channels-wifi/</a></li>
  <li><a href="https://zh.wikipedia.org/wiki/WLAN%E4%BF%A1%E9%81%93%E5%88%97%E8%A1%A8#5_GHz_(802.11a/h/j/n/ac)[11]">Wikipedia:WLAN信道列表#5<em>GHz</em>(802.11a/h/j/n/ac)[11]</a></li>
</ul>

<p>优化 WiFi 的时候可以借助像 <code>WiFi Explorer</code> 的 App 来帮助分析所在环境 WiFi 频道使用情况
<img src="https://cdn.jsdelivr.net/gh/junxy/junxy.github.com/images/2019/5/WX20190529-225625@2x.png" alt="" /></p>

<p>关键词： Mac、WiFi、DFS</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[ASP.NET web application automated deployment using MS WebDeploy - client-side configuration - part 2]]></title>
    <link href="https://2019.vibejun.com/blog/2014/03/27/asp-dot-net-web-application-automated-deployment-using-ms-webdeploy-client-side-configuration-part-2/"/>
    <updated>2014-03-27T22:57:00+08:00</updated>
    <id>https://2019.vibejun.com/blog/2014/03/27/asp-dot-net-web-application-automated-deployment-using-ms-webdeploy-client-side-configuration-part-2</id>
    <content type="html"><![CDATA[<p>FYI  ; )</p>

<div><script src="https://gist.github.com/1eff6ccf8ed5fcdad05a.js"></script>
<noscript><pre><code>&lt;html&gt;&lt;body&gt;You are being &lt;a href=&quot;https://github.com/gist/1eff6ccf8ed5fcdad05a&quot;&gt;redirected&lt;/a&gt;.&lt;/body&gt;&lt;/html&gt;</code></pre></noscript></div>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[ASP.NET web application automated deployment using MS WebDeploy - server-side configuration - part 1]]></title>
    <link href="https://2019.vibejun.com/blog/2013/11/29/asp-dot-net-web-application-automated-deployment-using-ms-webdeploy-server-side-configuration-part-1/"/>
    <updated>2013-11-29T23:14:00+08:00</updated>
    <id>https://2019.vibejun.com/blog/2013/11/29/asp-dot-net-web-application-automated-deployment-using-ms-webdeploy-server-side-configuration-part-1</id>
    <content type="html"><![CDATA[<h1 id="ms-webdeploy--aspnet-web----">使用 MS WebDeploy 自动化部署 ASP.Net Web 程序 - 服务端配置（上）</h1>
<p>## 一、环境配置 ##</p>

<ol>
  <li>安装 Windows Server（Current 2012）、配置IIS（Google 一大把，这里不做介绍了…）</li>
  <li>安装 Web Deploy （Current 3.5），使用 Web 平台安装程序。</li>
</ol>

<p><img src="https://2019.vibejun.com/images/2013/015c2b7dgw1eb1ouygmyxj20fd0e90uh.jpg" alt="选择安装0" /></p>

<p>首次使用 Web 平台安装程序，会提示并要求安装</p>

<p><img src="https://2019.vibejun.com/images/2013/015c2b7dgw1eb1n9eowg8j20oo0gqacp.jpg" alt="选择安装1" /></p>

<p>选择安装  Web Deploy，URL重写工具（可选）</p>

<p><img src="https://2019.vibejun.com/images/2013/015c2b7dgw1eb1n9f47w8j20jc0c8ac2.jpg" alt="安装完成" /></p>

<p>安装完成！</p>

<p><img src="https://2019.vibejun.com/images/2013/015c2b7dgw1eb1n9fu8djj20fc04bdg4.jpg" alt="确认安装0" /></p>

<p>确认安装是否成功</p>

<p><img src="https://2019.vibejun.com/images/2013/015c2b7dgw1eb1omkd3hcj20gp08gabc.jpg" alt="确认安装1" /></p>

<p>看到管理委派默认配置，恭喜你，环境配置完成 ；）</p>

<p><img src="https://2019.vibejun.com/images/2013/015c2b7dgw1eb1omksxmrj20qb09s75v.jpg" alt="确认安装2" /></p>

<p>安装 Web Deploy 默认会创建这两个账户，不要改动他</p>

<h2 id="web-deploy">二、配置网站支持 Web Deploy</h2>
<ol>
  <li>创建 Web Deploy 网站发布用户账号，支持Windows账户和IIS用户账号，这里我们选择使用IIS用户账号。</li>
</ol>

<p><img src="https://2019.vibejun.com/images/2013/015c2b7dgw1eb1pjcd5hyj20ky0c6dhu.jpg" alt="创建账号0" /></p>

<p><img src="https://2019.vibejun.com/images/2013/015c2b7dgw1eb1pbixd7jj20d009vwf4.jpg" alt="创建账号1" /></p>

<p>添加用户，要求设置强密码</p>

<p>2.设置站点允许使用 Web Deploy 作为发布方式</p>

<p><img src="https://2019.vibejun.com/images/2013/015c2b7dgw1eb1pao9duhj20eq0jngoa.jpg" alt="启用发布0" /></p>

<p><img src="https://2019.vibejun.com/images/2013/015c2b7dgw1eb1paoosf8j20ds0dot9w.jpg" alt="启用发布1" /></p>

<p>选择之前创建的 IIS 用户账号，其他可以不用设置</p>

<p><img src="https://2019.vibejun.com/images/2013/015c2b7dgw1eb1q0vbq1vj20dr0dmwg4.jpg" alt="启用发布2" /></p>

<p>设置，当看到类似结果，恭喜你，服务端配置到此完毕！</p>

<p>接下来我将介绍 使用 Web Deploy 部署项目的部署配置，最终通过结合 Jenkins CI 达到自动化部署产品，敬请期待～ ；）</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[如何将 SVN 迁移至 GIT 并保留所有历史记录]]></title>
    <link href="https://2019.vibejun.com/blog/2013/09/06/how-to-migration-svn-to-git/"/>
    <updated>2013-09-06T23:06:00+08:00</updated>
    <id>https://2019.vibejun.com/blog/2013/09/06/how-to-migration-svn-to-git</id>
    <content type="html"><![CDATA[<h2 id="section">前言</h2>

<p>GIT 已经无处不在，你们还在用 SVN 管理源代码吗？如果你和你的小伙伴们正在考虑，从 SVN 迁移至 GIT，如果你们的 SVN 仓库已经够庞大（1W+ commits）和复杂（后面复杂情况详解），又想在迁移之后保留所有更改记录，这篇文章也许正是你要找的。</p>

<h2 id="section-1">准备工作</h2>

<p>需要安装那些软件&amp;工具？</p>

<ol>
  <li><a href="http://subgit.com/index.html">SubGit</a></li>
  <li><a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html">JRE</a></li>
  <li><a href="http://subversion.apache.org/packages.html#windows">Subversion</a> </li>
</ol>

<p><a href="http://subgit.com/index.html">SubGit</a> 是个提供从 SVN 安全迁移至 GIT 的商业工具软件，这里主要是用到它将 SVN 提交历史翻译为 GIT 提交这一免费功能。其官网提供二进制包<a href="http://subgit.com/download/index.html">下载</a>（目前最新版本2.0.0，支持远程 SVN 地址）。
因为 SubGit 跨平台，基于 Java 写的，需要安装 <a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html">JRE</a>（JAVA 运行环境） 才能够运行。
此外，还将用到 SVN 命令，需要安装 <a href="http://subversion.apache.org/packages.html#windows">Subversion</a> 并配置至 <code>%PATH%</code> 环境变量（这里我是直接使用 VisualSVN Server 安装目录下 bin 自带的 Subversion）。</p>

<h2 id="section-2">一. 简单情况</h2>

<p>只需要几个步骤就能完成 SVN 至 GIT 的转换：</p>

<div class="bogus-wrapper"><notextile><figure class="code"><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class="line-number">1</span>
<span class="line-number">2</span>
<span class="line-number">3</span>
<span class="line-number">4</span>
<span class="line-number">5</span>
<span class="line-number">6</span>
<span class="line-number">7</span>
<span class="line-number">8</span>
<span class="line-number">9</span>
<span class="line-number">10</span>
<span class="line-number">11</span>
<span class="line-number">12</span>
<span class="line-number">13</span>
<span class="line-number">14</span>
<span class="line-number">15</span>
<span class="line-number">16</span>
<span class="line-number">17</span>
</pre></td><td class="code"><pre><code class="bat"><span class="line">＃ <span class="m">1</span>. 解压 SubGit<span class="m">-2</span>.<span class="m">0</span>.<span class="m">0</span>.zip 至路径如：x:\SubGit<span class="m">-2</span>.<span class="m">0</span>.<span class="m">0</span>，x: 替换为实际分区。
</span><span class="line">＃ <span class="m">2</span>. 执行配置，会生成默认配置，如需密码访问远程 SVN 服务器，
</span><span class="line">＃    在 SubGit_repository_name\SubGit\password 设置访问密码，
</span><span class="line">＃ 说明：
</span><span class="line">＃   SubGit_repository_name\SubGit\authors.txt 配置 SVN 中用户提交转换 GIT 提交后对应的用户名和邮箱，
</span><span class="line">＃   可将多个 SVN 帐号映射到一个用户名和邮箱，格式如下
</span><span class="line">＃   svnUser <span class="o">=</span> Git User <span class="p">&lt;</span><span class="n">user</span>@example.com<span class="p">&gt;</span>
</span><span class="line"><span class="n">x</span>:\<span class="p">&gt;</span> <span class="n">x</span>:\SubGit<span class="m">-2</span>.<span class="m">0</span>.<span class="m">0</span>\bin\SubGit.bat configure --svn-url [http:<span class="n">//svn.domain.com/svn/svn_repository_name/</span> or file:<span class="n">///x:/svn_repository_name]</span> SubGit_repository_name
</span><span class="line">
</span><span class="line"># 执行安装
</span><span class="line">x:\<span class="p">&gt;</span> <span class="n">x</span>:\SubGit<span class="m">-2</span>.<span class="m">0</span>.<span class="m">0</span>\bin\SubGit install x:\SubGit_repository_name
</span><span class="line">
</span><span class="line"># Git Bash 中输入，克隆一份 GIT 仓库，不含工作区，推送至指定 GIT 服务器
</span><span class="line">$ git clone SubGit_repository_name working-tree --bare
</span><span class="line">$ git remote add remote_name git@github.com<span class="n">/own_name/project_name.git</span>
</span><span class="line">$ git push remote_name --all
</span><span class="line">$ git push remote_name --tags
</span></code></pre></td></tr></table></div></figure></notextile></div>

<h2 id="section-3">二. 复杂情况</h2>

<p>有哪些复杂情况？</p>

<h3 id="section-4">1. 目录变更</h3>

<p>前期 SVN 仓库创建时没有使用标准结构（trunk，branchs，tags），后期修改为标准结构，比如： <code>/svn/project_name/ &lt;=&gt; /svn/project_name/trunk …）</code>，想保留这些提交历史记录。</p>

<p>比较麻烦的就是这种情况，目前还没发现有哪些转换工具可以直接支持，这里通过一种变通的方式，即先把包含不正确结构历史记录的 SVN 仓库转换为都正确结构历史记录的 SVN 仓库。</p>

<p>用到几个 SVN 的命令：
&lt;div class=&#8217;bogus-wrapper&#8217;&gt;<notextile><figure class="code">&lt;figcaption&gt;<span></span>&lt;/figcaption&gt;&lt;div class=&#8221;highlight&#8221;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#8221;gutter&#8221;&gt;&lt;pre class=&#8221;line-numbers&#8221;&gt;<span class="line-number">1</span>
<span class="line-number">2</span>
<span class="line-number">3</span>
<span class="line-number">4</span>
<span class="line-number">5</span>
<span class="line-number">6</span>
<span class="line-number">7</span>
<span class="line-number">8</span>
<span class="line-number">9</span>
<span class="line-number">10</span>
<span class="line-number">11</span>
<span class="line-number">12</span>
<span class="line-number">13</span>
<span class="line-number">14</span>
<span class="line-number">15</span>
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#8217;code&#8217;&gt;&lt;pre&gt;<code class="bat"><span class="line"># -r <span class="m">1391</span><span class="nl">:1391</span>：指定导出范围
</span><span class="line"># --incremental 增量导出
</span><span class="line"># SVN 仓库存放路径
</span><span class="line"># 导出文件存放路径
</span><span class="line">x:\<span class="p">&gt;</span> <span class="n">svnadmin</span> dump -r <span class="m">1391</span><span class="nl">:1391</span> --incremental x:\Repositories\project_name <span class="p">&gt;</span> <span class="n">x</span>:\temp\svn-project_name<span class="m">-1391-1391</span>-bak.dump
</span><span class="line">
</span><span class="line"># 创建一个临时仓库，导入 SVN 记录
</span><span class="line">x:\<span class="p">&gt;</span> <span class="n">svnadmin</span> create x:\Repositories\project_name_temp
</span><span class="line"># 原来是什么样，导入后还是什么样
</span><span class="line">x:\<span class="p">&gt;</span> <span class="n">svnadmin</span> load x:\Repositories\project_name_temp <span class="p">&lt;</span> <span class="n">x</span>:\temp\svn-project_name<span class="m">-1391-1391</span>-bak.dump
</span><span class="line"># 将特定目录的提交分离出来
</span><span class="line">x:\<span class="p">&gt;</span> <span class="n">cat</span> x:\temp\svn-project_name<span class="m">-0-1390</span>-bak.dump <span class="p">|</span> <span class="n">svndumpfilter</span> exclude Documents --drop-empty-revs --renumber-revs <span class="p">&gt;</span> <span class="n">x</span>:\temp\svn-project_name<span class="m">-0-1390</span>-eDocuments-bak.dump
</span><span class="line">x:\<span class="p">&gt;</span> <span class="n">cat</span> x:\temp\svn-project_name<span class="m">-0-1390</span>-bak.dump <span class="p">|</span> <span class="n">svndumpfilter</span> include Documents --drop-empty-revs --renumber-revs <span class="p">&gt;</span> <span class="n">x</span>:\temp\svn-project_name<span class="m">-0-1390</span>-iDocuments-bak.dump
</span><span class="line"># 导入至目录：trunk<span class="n">/source，即</span> svn<span class="n">/abc</span> &lt;<span class="o">=</span><span class="p">&gt;</span> <span class="n">svn/trunk/source/abc</span>
</span><span class="line">x:\<span class="p">&gt;</span> <span class="n">svnadmin</span> load --parent-dir trunk<span class="n">/sources</span> x:\Repositories\x:project_name_temp <span class="p">&lt;</span> <span class="n">x</span>:\temp\svn-project_name<span class="m">-1391-1391</span>-bak.dump
</span></code>&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</figure></notextile>&lt;/div&gt;</p>

<h3 id="section-5">2. 有开发分支</h3>

<p>在 SVN 仓库中有设 Develop 分支，比如：<code>svn/project_name/trunk（稳定分支）,svn/project_name/develop（开发分支）</code></p>

<p>通过修改 SubGit 配置，可以实现转换后 GIT 包含 develop 分支。</p>

<div class="bogus-wrapper"><notextile><figure class="code"><figcaption><span>【config_001】 - x:\SubGit_repository_name\SubGit\config </span><a href="http://subgit.com/book-remote/index.html#N202CE">SubGit Remote Book</a></figcaption> <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class="line-number">1</span>
<span class="line-number">2</span>
<span class="line-number">3</span>
<span class="line-number">4</span>
<span class="line-number">5</span>
<span class="line-number">6</span>
<span class="line-number">7</span>
</pre></td><td class="code"><pre><code class="bash"><span class="line">	…
</span><span class="line">	<span class="nv">trunk</span> <span class="o">=</span> trunk:refs/heads/master
</span><span class="line">	<span class="nv">branches</span> <span class="o">=</span> Develop:refs/heads/develop <span class="c"># 新增，Develop 指对应 SVN 目录（svn/project_name/Develop），注意大小写</span>
</span><span class="line">	<span class="nv">branches</span> <span class="o">=</span> branches/*:refs/heads/*
</span><span class="line">	<span class="nv">tags</span> <span class="o">=</span> tags/*:refs/tags/*
</span><span class="line">	<span class="nv">shelves</span> <span class="o">=</span> shelves/*:refs/shelves/*
</span><span class="line">	…
</span></code></pre></td></tr></table></div></figure></notextile></div>

<h3 id="section-6">3. 实例</h3>

<h4 id="section-7">说明</h4>
<p>项目A，托管在 Windows Server 安装的 VisualSVN Server 上，已有超过 1W+ commits，项目前期采用的结构为【1】。大概在 Commit Revesion：<code>1391-1394</code> 时，有位小伙伴意识到，我们应该用分支需要 Branchs，Tags，于是结构调整为【2】。再后来来了位新伙伴，说你们项目怎么没有 Develop 分支呢？于是调整新增了【3】：<code>svn/project_a/develop</code> 作为开发分支。</p>

<div class="bogus-wrapper"><notextile><figure class="code"><figcaption><span>【1】 - 项目初期  </span></figcaption>
 <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class="line-number">1</span>
<span class="line-number">2</span>
<span class="line-number">3</span>
</pre></td><td class="code"><pre><code class="bash"><span class="line">svn/project_a
</span><span class="line">	+ sources
</span><span class="line">	+ documents
</span></code></pre></td></tr></table></div></figure></notextile></div>

<div class="bogus-wrapper"><notextile><figure class="code"><figcaption><span>【2】 - Commit Revesion 1391-1394  </span></figcaption>
 <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class="line-number">1</span>
<span class="line-number">2</span>
<span class="line-number">3</span>
<span class="line-number">4</span>
<span class="line-number">5</span>
<span class="line-number">6</span>
<span class="line-number">7</span>
<span class="line-number">8</span>
</pre></td><td class="code"><pre><code class="bash"><span class="line">svn/project_a
</span><span class="line">	+ trunk
</span><span class="line">		+- sources
</span><span class="line">			+- documents
</span><span class="line">	+ tags
</span><span class="line">		…
</span><span class="line">	+ branchs
</span><span class="line">		…
</span></code></pre></td></tr></table></div></figure></notextile></div>

<div class="bogus-wrapper"><notextile><figure class="code"><figcaption><span>【3】 - 新增开发分支  </span></figcaption>
 <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class="line-number">1</span>
<span class="line-number">2</span>
<span class="line-number">3</span>
<span class="line-number">4</span>
<span class="line-number">5</span>
<span class="line-number">6</span>
<span class="line-number">7</span>
<span class="line-number">8</span>
<span class="line-number">9</span>
<span class="line-number">10</span>
<span class="line-number">11</span>
</pre></td><td class="code"><pre><code class="bash"><span class="line">svn/project_a
</span><span class="line">	trunk
</span><span class="line">		sources
</span><span class="line">			documents
</span><span class="line">	+ develop
</span><span class="line">		+ sources
</span><span class="line">			+ documents
</span><span class="line">	tags
</span><span class="line">		…
</span><span class="line">	branchs
</span><span class="line">		…
</span></code></pre></td></tr></table></div></figure></notextile></div>

<h4 id="section-8">操作</h4>

<div class="bogus-wrapper"><notextile><figure class="code"><figcaption><span>实例 - 将 SVN 中所有提交历史记录，包括所有分支(branchs)和标签(tags)，迁移至 GIT。  </span></figcaption>
 <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class="line-number">1</span>
<span class="line-number">2</span>
<span class="line-number">3</span>
<span class="line-number">4</span>
<span class="line-number">5</span>
<span class="line-number">6</span>
<span class="line-number">7</span>
<span class="line-number">8</span>
<span class="line-number">9</span>
<span class="line-number">10</span>
<span class="line-number">11</span>
<span class="line-number">12</span>
<span class="line-number">13</span>
<span class="line-number">14</span>
<span class="line-number">15</span>
<span class="line-number">16</span>
<span class="line-number">17</span>
<span class="line-number">18</span>
<span class="line-number">19</span>
<span class="line-number">20</span>
<span class="line-number">21</span>
<span class="line-number">22</span>
<span class="line-number">23</span>
<span class="line-number">24</span>
<span class="line-number">25</span>
<span class="line-number">26</span>
<span class="line-number">27</span>
<span class="line-number">28</span>
<span class="line-number">29</span>
<span class="line-number">30</span>
<span class="line-number">31</span>
<span class="line-number">32</span>
<span class="line-number">33</span>
<span class="line-number">34</span>
<span class="line-number">35</span>
<span class="line-number">36</span>
<span class="line-number">37</span>
<span class="line-number">38</span>
<span class="line-number">39</span>
<span class="line-number">40</span>
</pre></td><td class="code"><pre><code class="powershell"><span class="line"><span class="c"># 原仓库 x:\Reposities\project_a</span>
</span><span class="line"><span class="c"># 1. 创建临时仓库</span>
</span><span class="line"><span class="n">svnadmin</span> <span class="n">create</span> <span class="n">x</span><span class="err">:</span><span class="p">\</span><span class="n">Repositories</span><span class="p">\</span><span class="n">project_a_temp</span>
</span><span class="line">
</span><span class="line"><span class="c"># 2. 将目录改变的 Commits 提取出来 在临时仓库中顺序移至到了前面</span>
</span><span class="line"><span class="n">svnadmin</span> <span class="n">dump</span> <span class="n">-r</span> <span class="n">1391</span><span class="err">:</span><span class="n">1391</span> <span class="p">-</span><span class="n">-incremental</span> <span class="n">x</span><span class="err">:</span><span class="p">\</span><span class="n">Reposities</span><span class="p">\</span><span class="n">project_a</span> <span class="p">&gt;</span> <span class="n">x</span><span class="err">:</span><span class="p">\</span><span class="n">temp</span><span class="p">\</span><span class="n">svn-project_a</span><span class="p">-</span><span class="n">1391</span><span class="p">-</span><span class="n">1391-bak</span><span class="p">.</span><span class="n">dump</span>
</span><span class="line"><span class="n">svnadmin</span> <span class="n">load</span> <span class="n">x</span><span class="err">:</span><span class="p">\</span><span class="n">Reposities</span><span class="p">\</span><span class="n">project_a_temp</span> <span class="p">&lt;</span> <span class="n">x</span><span class="err">:</span><span class="p">\</span><span class="n">temp</span><span class="p">\</span><span class="n">svn-project_a</span><span class="p">-</span><span class="n">1391</span><span class="p">-</span><span class="n">1391-bak</span><span class="p">.</span><span class="n">dump</span>
</span><span class="line">
</span><span class="line"><span class="n">svnadmin</span> <span class="n">dump</span> <span class="n">-r</span> <span class="n">1394</span><span class="err">:</span><span class="n">1394</span> <span class="p">-</span><span class="n">-incremental</span> <span class="n">x</span><span class="err">:</span><span class="p">\</span><span class="n">Reposities</span><span class="p">\</span><span class="n">project_a</span> <span class="p">&gt;</span> <span class="n">x</span><span class="err">:</span><span class="p">\</span><span class="n">temp</span><span class="p">\</span><span class="n">svn-project_a</span><span class="p">-</span><span class="n">1394</span><span class="p">-</span><span class="n">1394-bak</span><span class="p">.</span><span class="n">dump</span>
</span><span class="line"><span class="n">svnadmin</span> <span class="n">load</span> <span class="n">x</span><span class="err">:</span><span class="p">\</span><span class="n">Reposities</span><span class="p">\</span><span class="n">project_a_temp</span> <span class="p">&lt;</span> <span class="n">x</span><span class="err">:</span><span class="p">\</span><span class="n">temp</span><span class="p">\</span><span class="n">svn-project_a</span><span class="p">-</span><span class="n">1394</span><span class="p">-</span><span class="n">1394-bak</span><span class="p">.</span><span class="n">dump</span>
</span><span class="line">
</span><span class="line"><span class="c"># 3. 导出结构【1】时的 Commits，在临时仓库中重写 Commit是 为结构【2】</span>
</span><span class="line"><span class="n">svnadmin</span> <span class="n">dump</span> <span class="n">-r</span> <span class="n">0</span><span class="err">:</span><span class="n">1390</span> <span class="p">-</span><span class="n">-incremental</span> <span class="n">x</span><span class="err">:</span><span class="p">\</span><span class="n">Reposities</span><span class="p">\</span><span class="n">project_a</span> <span class="p">&gt;</span> <span class="n">x</span><span class="err">:</span><span class="p">\</span><span class="n">temp</span><span class="p">\</span><span class="n">svn-project_a</span><span class="p">-</span><span class="n">0</span><span class="p">-</span><span class="n">1390-bak</span><span class="p">.</span><span class="n">dump</span>
</span><span class="line">
</span><span class="line"><span class="c"># 3.1 分别过滤 &amp; 提取 Document 文档的提交记录，并将其重写 svn/sources/Documents/ &lt;=&gt; svn/trunk/sources/Documents</span>
</span><span class="line"><span class="n">cat</span> <span class="n">x</span><span class="err">:</span><span class="p">\</span><span class="n">temp</span><span class="p">\</span><span class="n">svn-project_a</span><span class="p">-</span><span class="n">0</span><span class="p">-</span><span class="n">1390-bak</span><span class="p">.</span><span class="n">dump</span> <span class="p">|</span> <span class="n">svndumpfilter</span> <span class="n">exclude</span> <span class="n">Documents</span> <span class="p">-</span><span class="n">-drop-empty-revs</span> <span class="p">-</span><span class="n">-renumber-revs</span> <span class="p">&gt;</span> <span class="n">x</span><span class="err">:</span><span class="p">\</span><span class="n">temp</span><span class="p">\</span><span class="n">svn-project_a</span><span class="p">-</span><span class="n">0</span><span class="p">-</span><span class="n">1390-eDocument-bak</span><span class="p">.</span><span class="n">dump</span>
</span><span class="line"><span class="n">svnadmin</span> <span class="n">load</span> <span class="p">-</span><span class="n">-parent-dir</span> <span class="n">trunk</span><span class="p">/</span><span class="n">sources</span> <span class="n">x</span><span class="err">:</span><span class="p">\</span><span class="n">Reposities</span><span class="p">\</span><span class="n">project_a_temp</span> <span class="p">&lt;</span> <span class="n">x</span><span class="err">:</span><span class="p">\</span><span class="n">temp</span><span class="p">\</span><span class="n">svn-project_a</span><span class="p">-</span><span class="n">0</span><span class="p">-</span><span class="n">1390-eDocument-bak</span><span class="p">.</span><span class="n">dump</span>
</span><span class="line">
</span><span class="line"><span class="n">cat</span> <span class="n">x</span><span class="err">:</span><span class="p">\</span><span class="n">temp</span><span class="p">\</span><span class="n">svn-project_a</span><span class="p">-</span><span class="n">0</span><span class="p">-</span><span class="n">1390-bak</span><span class="p">.</span><span class="n">dump</span> <span class="p">|</span> <span class="n">svndumpfilter</span> <span class="n">include</span> <span class="n">Documents</span> <span class="p">-</span><span class="n">-drop-empty-revs</span> <span class="p">-</span><span class="n">-renumber-revs</span> <span class="p">&gt;</span> <span class="n">x</span><span class="err">:</span><span class="p">\</span><span class="n">temp</span><span class="p">\</span><span class="n">svn-project_a</span><span class="p">-</span><span class="n">0</span><span class="p">-</span><span class="n">1390-iDocument-bak</span><span class="p">.</span><span class="n">dump</span>
</span><span class="line"><span class="n">svnadmin</span> <span class="n">load</span> <span class="p">-</span><span class="n">-parent-dir</span> <span class="n">trunk</span><span class="p">/</span><span class="n">sources</span> <span class="n">x</span><span class="err">:</span><span class="p">\</span><span class="n">Reposities</span><span class="p">\</span><span class="n">project_a_temp</span> <span class="p">&lt;</span> <span class="n">x</span><span class="err">:</span><span class="p">\</span><span class="n">temp</span><span class="p">\</span><span class="n">svn-project_a</span><span class="p">-</span><span class="n">0</span><span class="p">-</span><span class="n">1390-iDocument-bak</span><span class="p">.</span><span class="n">dump</span>
</span><span class="line">
</span><span class="line"><span class="c"># 4. 将剩下的 Commits 导出导入至临时仓库</span>
</span><span class="line"><span class="n">svnadmin</span> <span class="n">dump</span> <span class="n">-r</span> <span class="n">1396</span><span class="err">:</span><span class="n">HEAD</span> <span class="p">-</span><span class="n">-incremental</span> <span class="n">x</span><span class="err">:</span><span class="p">\</span><span class="n">Reposities</span><span class="p">\</span><span class="n">project_a</span> <span class="p">&gt;</span> <span class="n">x</span><span class="err">:</span><span class="p">\</span><span class="n">temp</span><span class="p">\</span><span class="n">svn-project_a</span><span class="p">-</span><span class="n">1396</span><span class="err">:</span><span class="n">HEAD-bak</span><span class="p">.</span><span class="n">dump</span>
</span><span class="line"><span class="n">svnadmin</span> <span class="n">load</span> <span class="n">x</span><span class="err">:</span><span class="p">\</span><span class="n">Reposities</span><span class="p">\</span><span class="n">project_a_temp</span> <span class="p">&lt;</span> <span class="n">x</span><span class="err">:</span><span class="p">\</span><span class="n">temp</span><span class="p">\</span><span class="n">svn-project_a</span><span class="p">-</span><span class="n">1396</span><span class="err">:</span><span class="n">HEAD-bak</span><span class="p">.</span><span class="n">dump</span>
</span><span class="line">
</span><span class="line"><span class="c"># 5 SubGit 配置</span>
</span><span class="line"><span class="n">x</span><span class="err">:</span><span class="p">\&gt;</span> <span class="n">x</span><span class="err">:</span><span class="p">\</span><span class="n">SubGit</span><span class="p">-</span><span class="n">2</span><span class="p">.</span><span class="n">0</span><span class="p">.</span><span class="n">0</span><span class="p">\</span><span class="n">bin</span><span class="p">\</span><span class="n">SubGit</span><span class="p">.</span><span class="n">bat</span> <span class="n">configure</span> <span class="p">-</span><span class="n">-svn-url</span> <span class="n">file</span><span class="err">:</span><span class="p">///</span><span class="n">x</span><span class="err">:</span><span class="p">/</span><span class="n">Reposities</span><span class="p">/</span><span class="n">project_a_temp</span> <span class="n">x</span><span class="err">:</span><span class="p">\</span><span class="n">Reposities</span><span class="p">\</span><span class="n">SubGit_project_a</span>
</span><span class="line">
</span><span class="line">
</span><span class="line"><span class="c"># 5.1 编辑开发者映射列表 SubGit_project_a\SubGit\authors.txt</span>
</span><span class="line"><span class="c"># 5.2 编辑SubGit配置【config_001】，支持 Develop 分支导入</span>
</span><span class="line">	
</span><span class="line"><span class="c"># 6. 执行安装，漫长的等待…</span>
</span><span class="line"><span class="n">x</span><span class="err">:</span><span class="p">\&gt;</span> <span class="n">x</span><span class="err">:</span><span class="p">\</span><span class="n">SubGit</span><span class="p">-</span><span class="n">2</span><span class="p">.</span><span class="n">0</span><span class="p">.</span><span class="n">0</span><span class="p">\</span><span class="n">bin</span><span class="p">\</span><span class="n">SubGit</span> <span class="n">install</span> <span class="n">x</span><span class="err">:</span><span class="p">\</span><span class="n">Reposities</span><span class="p">\</span><span class="n">SubGit_project_a</span>
</span><span class="line">	
</span><span class="line"><span class="c"># 7. 使用 Git Bash，克隆一份 GIT 仓库，不含工作区，推送所有分支（branchs）和标签（tags）至指定 GIT 服务器</span>
</span><span class="line"><span class="p">$</span> <span class="n">git</span> <span class="n">clone</span> <span class="n">SubGit_project_a</span> <span class="n">working-tree</span> <span class="p">-</span><span class="n">-bare</span>
</span><span class="line"><span class="p">$</span> <span class="n">git</span> <span class="n">remote</span> <span class="n">add</span> <span class="n">remote_name</span> <span class="n">git</span><span class="nv">@github</span><span class="p">.</span><span class="n">com</span><span class="p">/</span><span class="n">own_name</span><span class="p">/</span><span class="n">project_a</span><span class="p">.</span><span class="n">git</span>
</span><span class="line"><span class="p">$</span> <span class="n">git</span> <span class="n">push</span> <span class="n">remote_name</span> <span class="p">-</span><span class="n">-all</span>
</span><span class="line"><span class="p">$</span> <span class="n">git</span> <span class="n">push</span> <span class="n">remote_name</span> <span class="p">-</span><span class="n">-tags</span>
</span></code></pre></td></tr></table></div></figure></notextile></div>

<h2 id="section-9">写在最后</h2>
<p>1W+ Commits 的 SVN 仓库迁移至 GIT 大概需要4-6个小时（源代码100Mb，仅当参考，但这已经比 GIT 提供的 <code>git svn</code> 命令不知要快多少倍了 ）， 当完成迁移后为安全起见，我们还需要对源代码做一次校验，即，捡出 SVN 最新代码（<code>svn/project_a/develop</code>）和 GIT 最新代码（<code>git clone git@gitserver.com project_a -b develop</code>），让后使用 <a href="http://www.scootersoftware.com"><code>BCompare</code></a> 或类似工具做一次差异比较，确认所有源代码无差异，这才恭喜你，完成了迁移。</p>

<p>由于 GIT 的学习有一定曲线，如果小伙伴开发团队比较大（20+ 人），小伙伴们对 GIT 接受程度肯定有所差异，为了减少迁移至 GIT 对大伙的影响，可以考虑采用 SubGit 提供的方案，同时支持 SVN 和 GIT 双向提交。</p>

<p>由于作者最开始这么做已经是半年前的时候（当时 SubGit 还是 <code>v1.x.x</code> 现在都 <code>v2.0.0</code>），其中 SubGit 配置和安装部分直接替换为 <code>v2.0.0</code> 用法。实例部分直接参考之前生产环境操作记录，重要部分也经过测试，但个人精力测试范围有限，如有遗漏或异常欢迎留言和反馈。</p>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[学习 coffee-script 及环境安装 （Mac）]]></title>
    <link href="https://2019.vibejun.com/blog/2013/05/01/learning-coffee-script/"/>
    <updated>2013-05-01T17:42:00+08:00</updated>
    <id>https://2019.vibejun.com/blog/2013/05/01/learning-coffee-script</id>
    <content type="html"><![CDATA[<h2 id="keyword">Keyword</h2>
<p>Homebrew: <a href="http://mxcl.github.io/homebrew/index_zh-cn.html">http://mxcl.github.io/homebrew/index_zh-cn.html</a></p>

<p>V8: <a href="https://code.google.com/p/v8/">https://code.google.com/p/v8/</a></p>

<p>NodeJS: <a href="http://nodejs.org/">http://nodejs.org/</a></p>

<p>Coffee: <a href="http://coffeescript.org/">http://coffeescript.org/</a></p>

<p>npm: <a href="https://npmjs.org/">https://npmjs.org/</a></p>

<h2 id="os-x">环境安装（OS X）</h2>
<p>首先确保 Homebrew <a href="https://github.com/mxcl/homebrew/wiki/Installation">安装</a>了，
&lt;div class=&#8217;bogus-wrapper&#8217;&gt;<notextile><figure class="code">&lt;figcaption&gt;<span></span>&lt;/figcaption&gt;&lt;div class=&#8221;highlight&#8221;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#8221;gutter&#8221;&gt;&lt;pre class=&#8221;line-numbers&#8221;&gt;<span class="line-number">1</span>
<span class="line-number">2</span>
<span class="line-number">3</span>
<span class="line-number">4</span>
<span class="line-number">5</span>
<span class="line-number">6</span>
<span class="line-number">7</span>
<span class="line-number">8</span>
<span class="line-number">9</span>
<span class="line-number">10</span>
<span class="line-number">11</span>
<span class="line-number">12</span>
<span class="line-number">13</span>
<span class="line-number">14</span>
<span class="line-number">15</span>
<span class="line-number">16</span>
<span class="line-number">17</span>
<span class="line-number">18</span>
<span class="line-number">19</span>
<span class="line-number">20</span>
<span class="line-number">21</span>
<span class="line-number">22</span>
<span class="line-number">23</span>
<span class="line-number">24</span>
<span class="line-number">25</span>
<span class="line-number">26</span>
<span class="line-number">27</span>
<span class="line-number">28</span>
<span class="line-number">29</span>
<span class="line-number">30</span>
<span class="line-number">31</span>
<span class="line-number">32</span>
<span class="line-number">33</span>
<span class="line-number">34</span>
<span class="line-number">35</span>
<span class="line-number">36</span>
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#8217;code&#8217;&gt;&lt;pre&gt;<code class="bash"><span class="line"><span class="nv">$ </span>brew --version
</span><span class="line">0.9.4
</span><span class="line">
</span><span class="line"><span class="nv">$ </span>brew update
</span><span class="line">
</span><span class="line"><span class="c"># 安装 NodeJS</span>
</span><span class="line"><span class="nv">$ </span>brew install nodejs
</span><span class="line">
</span><span class="line"><span class="c"># 如果之前安装过旧版本的 NodeJS，升级到当前最新版本</span>
</span><span class="line"><span class="nv">$ </span>brew upgrade nodejs
</span><span class="line">
</span><span class="line"><span class="nv">$ </span>node --version
</span><span class="line">v0.10.5
</span><span class="line">
</span><span class="line"><span class="nv">$ </span>npm --version
</span><span class="line">1.2.18
</span><span class="line">
</span><span class="line"><span class="c"># 安装 Coffee</span>
</span><span class="line"><span class="nv">$ </span>npm install -g coffee-script
</span><span class="line">npm http GET https://registry.npmjs.org/coffee-script
</span><span class="line">npm http 200 https://registry.npmjs.org/coffee-script
</span><span class="line">npm http GET https://registry.npmjs.org/coffee-script/-/coffee-script-1.6.2.tgz
</span><span class="line">npm http 200 https://registry.npmjs.org/coffee-script/-/coffee-script-1.6.2.tgz
</span><span class="line">/usr/local/share/npm/bin/coffee -&gt; /usr/local/share/npm/lib/node_modules/coffee-script/bin/coffee
</span><span class="line">/usr/local/share/npm/bin/cake -&gt; /usr/local/share/npm/lib/node_modules/coffee-script/bin/cake
</span><span class="line">
</span><span class="line"><span class="nv">$ </span>/usr/local/share/npm/bin/coffee --version
</span><span class="line">CoffeeScript version 1.6.2
</span><span class="line">
</span><span class="line"><span class="c"># 安装 V8 JavaScript Engine，用于在 terminal 中运行 Javascript 并输出运行结果</span>
</span><span class="line"><span class="nv">$ </span>brew install v8
</span><span class="line"><span class="nv">$ </span>v8
</span><span class="line">V8 version 3.18.2 <span class="o">[</span>sample shell<span class="o">]</span>
</span><span class="line">&gt; print<span class="o">(</span>1+1<span class="o">)</span>
</span><span class="line">2
</span><span class="line">&gt;
</span></code>&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</figure></notextile>&lt;/div&gt;</p>

<h2 id="coffee-">编写一个 Coffee 脚本</h2>
<div class="bogus-wrapper"><notextile><figure class="code"><figcaption><span>example_01.js.coffee</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class="line-number">1</span>
<span class="line-number">2</span>
<span class="line-number">3</span>
</pre></td><td class="code"><pre><code class="ruby"><span class="line"><span class="n">square</span> <span class="o">=</span> <span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">x</span> <span class="o">*</span> <span class="n">x</span>
</span><span class="line"><span class="n">cube</span> <span class="o">=</span> <span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">square</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="o">*</span> <span class="n">x</span>
</span><span class="line"><span class="nb">print</span> <span class="n">cube</span><span class="p">(</span><span class="mi">5</span><span class="p">)</span>
</span></code></pre></td></tr></table></div></figure></notextile></div>

<p>将 Coffee 编译成 Javascript：</p>

<div class="bogus-wrapper"><notextile><figure class="code"><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class="line-number">1</span>
</pre></td><td class="code"><pre><code class="bash"><span class="line"><span class="nv">$ </span>/usr/local/share/npm/bin/coffee -c example_01.js.coffee
</span></code></pre></td></tr></table></div></figure></notextile></div>

<p>编译后对应生成的 Javascript 文件
&lt;div class=&#8217;bogus-wrapper&#8217;&gt;<notextile><figure class="code">&lt;figcaption&gt;<span></span>&lt;/figcaption&gt;&lt;div class=&#8221;highlight&#8221;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#8221;gutter&#8221;&gt;&lt;pre class=&#8221;line-numbers&#8221;&gt;<span class="line-number">1</span>
<span class="line-number">2</span>
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#8217;code&#8217;&gt;&lt;pre&gt;<code class="bash"><span class="line"><span class="nv">$ </span>ls
</span><span class="line">example_01.js.coffee	example_01.js.js
</span></code>&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</figure></notextile>&lt;/div&gt;</p>

<div class="bogus-wrapper"><notextile><figure class="code"><figcaption><span>example_01.js.js</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class="line-number">1</span>
<span class="line-number">2</span>
<span class="line-number">3</span>
<span class="line-number">4</span>
<span class="line-number">5</span>
<span class="line-number">6</span>
<span class="line-number">7</span>
<span class="line-number">8</span>
<span class="line-number">9</span>
<span class="line-number">10</span>
<span class="line-number">11</span>
<span class="line-number">12</span>
<span class="line-number">13</span>
<span class="line-number">14</span>
<span class="line-number">15</span>
</pre></td><td class="code"><pre><code class="js"><span class="line"><span class="c1">// Generated by CoffeeScript 1.6.2</span>
</span><span class="line"><span class="p">(</span><span class="kd">function</span><span class="p">()</span> <span class="p">{</span>
</span><span class="line">  <span class="kd">var</span> <span class="nx">cube</span><span class="p">,</span> <span class="nx">square</span><span class="p">;</span>
</span><span class="line">
</span><span class="line">  <span class="nx">square</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">x</span><span class="p">)</span> <span class="p">{</span>
</span><span class="line">    <span class="k">return</span> <span class="nx">x</span> <span class="o">*</span> <span class="nx">x</span><span class="p">;</span>
</span><span class="line">  <span class="p">};</span>
</span><span class="line">
</span><span class="line">  <span class="nx">cube</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">x</span><span class="p">)</span> <span class="p">{</span>
</span><span class="line">    <span class="k">return</span> <span class="nx">square</span><span class="p">(</span><span class="nx">x</span><span class="p">)</span> <span class="o">*</span> <span class="nx">x</span><span class="p">;</span>
</span><span class="line">  <span class="p">};</span>
</span><span class="line">
</span><span class="line">  <span class="nx">print</span><span class="p">(</span><span class="nx">cube</span><span class="p">(</span><span class="mi">5</span><span class="p">));</span>
</span><span class="line">
</span><span class="line"><span class="p">}).</span><span class="nx">call</span><span class="p">(</span><span class="k">this</span><span class="p">);</span>
</span></code></pre></td></tr></table></div></figure></notextile></div>

<p>运行 example_01.js.js 
&lt;div class=&#8217;bogus-wrapper&#8217;&gt;<notextile><figure class="code">&lt;figcaption&gt;<span></span>&lt;/figcaption&gt;&lt;div class=&#8221;highlight&#8221;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#8221;gutter&#8221;&gt;&lt;pre class=&#8221;line-numbers&#8221;&gt;<span class="line-number">1</span>
<span class="line-number">2</span>
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#8217;code&#8217;&gt;&lt;pre&gt;<code class="bash"><span class="line"><span class="nv">$ </span>v8 example_01.js.js
</span><span class="line">125
</span></code>&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</figure></notextile>&lt;/div&gt;</p>

<h2 id="section">使用体会</h2>
<p>简而言之，Coffee 的语法有点像 Ruby，数组的语法又是 <a href="http://yaml.org/">yaml</a>，对与熟悉 <a href="http://rubyonrails.org/">Rails</a> 写过 <a href="http://www.ruby-lang.org/">Ruby</a> 的很容易上手，反之，对于新手，因继承了 Ruby 的一些优点，学习来也容易理解，加上很人性的<a href="http://coffeescript.org/#language">官方文档</a>，学习的过程中可以说是一种享受，这里可能需要注意的是，如果之前没有接触过<a href="http://zh.wikipedia.org/zh/%E5%8A%A8%E6%80%81%E8%AF%AD%E8%A8%80">动态类型的语言</a>，比如从事的语言 Java 比较多，可能会受些干扰，其实他们之前没有什么必然联系。如果是 C Sharp 可能稍微好些，用过 Linq 的应该有体会，包括从 C Sharp 4.0 之后加入了一些动态语言的特性.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Jenkins中Git仓库变更集中文注释显示乱码问题（二）]]></title>
    <link href="https://2019.vibejun.com/blog/2013/04/10/jenkins-git-changes-mojibake-2/"/>
    <updated>2013-04-10T20:04:00+08:00</updated>
    <id>https://2019.vibejun.com/blog/2013/04/10/jenkins-git-changes-mojibake-2</id>
    <content type="html"><![CDATA[<p>之前 <a href="http://2019.vibejun.com/blog/2013/01/11/jenkins-git-changes-mojibake/">一篇文章</a> 写过：Jenkins 中使用 Git 仓库中有 Log 日志非 <a href="http://en.wikipedia.org/wiki/ASCII">ASCII</a> ，变更集会出现乱码以及一些解决过程。如今终于有人提交了这个 BUG 的修复，在 Jenkins 插件 Git Plugin 介绍页面可以看到最新的 <a href="https://wiki.jenkins-ci.org/display/JENKINS/Git+Plugin#GitPlugin-Changelog">Changelog</a>，但是目前最新的版本还是 1.3，要等到下一版本发布才能享用？既然都有人提交了修复此 BUG 代码，那自己动手编译一个插件吧，于是尝试在自己的 MBP·13’ 把 <a href="https://github.com/jenkinsci/git-plugin">git-plugin 源码</a> Clone 下来，开始编译插件（Jenkins 插件通过 <a href="http://en.wikipedia.org/wiki/Apache_Maven">Maven</a> 来编译，最后编译成 .hpi 格式的文件，可以在 Jenkins 直接上传安装），编译过程颇为麻烦，主要是首次编译需要下载很多依赖，而国内网络你懂得，为此还发了一条<a href="https://twitter.com/jun_cn/status/321606102598946817">推</a>，最后确认2个原因导致编译失败：</p>

<ol>
  <li>Clone 下来的源码 Master 分支总是构建失败，可能是代码有问题，具体没去排查，JAVA虽学过，这么多年没用就不折腾了。</li>
  <li>切换工作区至 tag：git-1.3.0，发现编译还是有错误，原因硬盘的名称中有空格，路径转换时对空格处理的不一样，导致找不到某些文件，在磁盘工具中把名称改了，发现 Terminal 中名称没改变，还重启了电脑（编译一次要4-5分支，重启只要20秒），重试，编译OK，成功后可以在 target 目录里看到名称为 git.hpi 文件。</li>
</ol>

<p>既然这样，那就好办了，我可以 Checkout git-1.3.0 稳定版，在稳定版的基础上通过 <code>git cherry-pick cdf149a73a51861bff07897aa42fa0535b88f99e</code> 合并 Fixd 的提交，并做了一点点<a href="https://github.com/junxy/git-plugin/compare/git-1.3.1-fix-log-utf8">修改</a>，最后顺利编译成功，不想折腾可以下载我已经编译好的 <a href="http://vdisk.weibo.com/s/x5uCM">git.hpi</a>，这样就可以提前享用，不用等官方发布啦。</p>

<p><strong>相关知识</strong>：</p>

<p>Maven：</p>

<p><code>$ mvn package</code> ＃本地打包</p>

<p><code>$ mvn cleanup</code> ＃清理编译</p>

<p><em>以上命令直接在项目根目录，pom.xml 文件所在目录下执行即可</em></p>

<p>更多参考：<a href="http://maven.apache.org/guides/getting-started/maven-in-five-minutes.html">http://maven.apache.org/guides/getting-started/maven-in-five-minutes.html</a></p>

<p>Git:
<a href="https://www.kernel.org/pub/software/scm/git/docs/git-cherry-pick.html">git cherry-pike</a></p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Mac OS X Mountain Lion GIT Auto Completion]]></title>
    <link href="https://2019.vibejun.com/blog/2013/02/05/mac-os-x-mountain-lion-git-auto-completion/"/>
    <updated>2013-02-05T13:31:00+08:00</updated>
    <id>https://2019.vibejun.com/blog/2013/02/05/mac-os-x-mountain-lion-git-auto-completion</id>
    <content type="html"><![CDATA[<p>MacBook Pro 很早就安装了 Git，平时用的不多，也就没配置自动完成提示，今天有点时间在 Mac 上，想把自动提示配置加进去，网上找了发现有不同的方法，这里就记录下符合我这种情况下的。首先，要安装 Git，怎么安装就不说了，Google 上有很多教程，我是通过 Homebrew 安装的，
运行： $ <code>brew install git bash-completion</code>
安装过了的 brew 会提示： </p>

<div class="bogus-wrapper"><notextile><figure class="code"><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class="line-number">1</span>
<span class="line-number">2</span>
</pre></td><td class="code"><pre><code class="bash"><span class="line">Error: git-1.8.1.2 already installed
</span><span class="line">Error: bash-completion-1.3 already installed
</span></code></pre></td></tr></table></div></figure></notextile></div>

<p>接着， besh $ <code>vim ~/.bash_profile</code></p>

<p>加入下面代码：
&lt;div class=&#8217;bogus-wrapper&#8217;&gt;<notextile><figure class="code">&lt;figcaption&gt;<span></span>&lt;/figcaption&gt;&lt;div class=&#8221;highlight&#8221;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&#8221;gutter&#8221;&gt;&lt;pre class=&#8221;line-numbers&#8221;&gt;<span class="line-number">1</span>
<span class="line-number">2</span>
<span class="line-number">3</span>
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&#8217;code&#8217;&gt;&lt;pre&gt;<code class="bash"><span class="line"><span class="k">if</span> <span class="o">[</span> -f <span class="sb">`</span>brew --prefix<span class="sb">`</span>/etc/bash_completion <span class="o">]</span>; <span class="k">then</span>
</span><span class="line">	. <span class="sb">`</span>brew --prefix<span class="sb">`</span>/etc/bash_completion
</span><span class="line"><span class="k">fi</span>
</span></code>&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;</figure></notextile>&lt;/div&gt;</p>

<p>保存，重新进入 bash，$ <code>git c</code> 按两下 <code>Tab</code> 键，看到下面提示，配置就完成了。 </p>

<div class="bogus-wrapper"><notextile><figure class="code"><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class="line-number">1</span>
<span class="line-number">2</span>
<span class="line-number">3</span>
</pre></td><td class="code"><pre><code class="bash"><span class="line">checkout                 ci                       clean                    column                   credential
</span><span class="line">cherry                   citool                   clone                    commit                   credential-osxkeychain
</span><span class="line">cherry-pick              cl                       co                       config
</span></code></pre></td></tr></table></div></figure></notextile></div>

<p>参考：<a href="https://github.com/bobthecow/git-flow-completion/wiki/Install-Bash-git-completion">https://github.com/bobthecow/git-flow-completion/wiki/Install-Bash-git-completion</a></p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[happy new year]]></title>
    <link href="https://2019.vibejun.com/blog/2013/02/02/happy-new-year/"/>
    <updated>2013-02-02T18:25:00+08:00</updated>
    <id>https://2019.vibejun.com/blog/2013/02/02/happy-new-year</id>
    <content type="html"><![CDATA[<p>还有四天回去过春节了，大家新年快乐哈~~</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[hello world]]></title>
    <link href="https://2019.vibejun.com/blog/2013/02/02/hello-world/"/>
    <updated>2013-02-02T15:54:00+08:00</updated>
    <id>https://2019.vibejun.com/blog/2013/02/02/hello-world</id>
    <content type="html"><![CDATA[<p>哈哈哈，八爪鱼，love it!!</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[终于解决Jenkins中Git仓库变更集中文注释显示乱码问题]]></title>
    <link href="https://2019.vibejun.com/blog/2013/01/11/jenkins-git-changes-mojibake/"/>
    <updated>2013-01-11T03:17:00+08:00</updated>
    <id>https://2019.vibejun.com/blog/2013/01/11/jenkins-git-changes-mojibake</id>
    <content type="html"><![CDATA[<p>问题描叙： 借用这个图片，也是这位仁兄提到的问题（http://bbs.51cto.com/thread-952489-1.html）</p>

<p><img src="#//img2.51cto.com/attachments/month_1209/20120903_7e526eb2c0772fad70c68EbGhmDiVZme.png.thumb.jpg" alt="Jenkins使用Git仓库变更集乱码图示" /></p>

<p>解决方法：</p>

<p>x:\Jenkins\jenkins.xml 新增<del>蓝色</del>粗体标记参数(-Dfile.encoding=utf-8)，然后重启Jenkins服务，完毕！</p>

<p>&lt;arguments&gt;-Xrs -Xmx256m <strong>-Dfile.encoding=utf-8</strong> -Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle -jar “%BASE%\jenkins.war” –httpPort=8080&lt;/arguments&gt;</p>

<p>原因： 为什么Jenkins 使用 SVN 仓库不会出现非 ANSI 字符乱码，因为 Git 插件获取变更集时 保存的不是 XML格式文档，虽然后缀都 .xml ，这就导致了显示的时候不知道已什么编码方式来显示，就使用了系统默认编码，中文的也就是 GBK。 而 GIT Commit 注释默认是 UTF-8。</p>

<p><strong>更新</strong>：发现 msbuild 输出的 log 显示时乱码，想到把 cmd 页码也该为 UTF-8，最后试验了，问题解决。中文系统默认代码页 936 ，需要改为 65001，通过修改注册表的方式：参考：<a href="http://hi.baidu.com/study_together/item/b6dda48330b99be1e496e0f9">http://hi.baidu.com/study_together/item/b6dda48330b99be1e496e0f9</a></p>

<p><strong>2013/04/10更新</strong>：已经有更好的方式来解决:<a href="http://2019.vibejun.com/blog/2013/04/10/jenkins-git-changes-mojibake-2/">（二）</a></p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[msbuild利用cpu多核加速]]></title>
    <link href="https://2019.vibejun.com/blog/2012/09/19/p-29001/"/>
    <updated>2012-09-19T10:26:00+08:00</updated>
    <id>https://2019.vibejun.com/blog/2012/09/19/p-29001</id>
    <content type="html"><![CDATA[<p>:&gt; msbuild /t:Rebuild /p:Configuration=Release <strong>/m</strong></p>

<p>/m 自动检测cpu数量启动对应数量进程</p>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[使用NuGet包不提交到源代码控制]]></title>
    <link href="https://2019.vibejun.com/blog/2012/09/19/using-nuget-without-committing-packages/"/>
    <updated>2012-09-19T10:10:00+08:00</updated>
    <id>https://2019.vibejun.com/blog/2012/09/19/using-nuget-without-committing-packages</id>
    <content type="html"><![CDATA[<p>参考：</p>

<ul>
  <li>http://docs.nuget.org/docs/workflows/using-nuget-without-committing-packages</li>
  <li>http://blog.nuget.org/20120518/package-restore-and-consent.html</li>
  <li>http://stackoverflow.com/questions/11261310/nuget-dont-see-allow-nuget-to-download-missing-packages-during-build</li>
</ul>

<p>错误：error : Package restore is disabled by default. To give consent, open the Visual Studio Options dialog, click on Package Manager node and check &#8216;Allow NuGet to download missing packages during build.&#8217; You can also give consent by setting the environment variable &#8216;EnableNuGetPackageRestore&#8217; to &#8216;true&#8217;.</p>

<p>解决：提示在环境变量中新增一个变量：</p>

<p><strong>EnableNuGetPackageRestore = true</strong></p>

<p>手动改变配置：</p>

<p>1..sln主项目中新增：</p>

<pre><code>Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".nuget", ".nuget", "{07BDA4AF-B93E-4F33-9E09-2FCA670A0A98}"
	ProjectSection(SolutionItems) = preProject
		.nuget\NuGet.Config = .nuget\NuGet.Config
		.nuget\NuGet.exe = .nuget\NuGet.exe
		.nuget\NuGet.targets = .nuget\NuGet.targets
	EndProjectSection
EndProject
</code></pre>

<table>
  <tbody>
    <tr>
      <td>2.拷贝.nuget目录包含3文件(nuget.config</td>
      <td>exe</td>
      <td>targets)</td>
    </tr>
  </tbody>
</table>

<p>3.子项目文件.csproj新增：</p>

<pre><code>&lt;Project ....
  &lt;PropertyGroup&gt;
	**&lt;SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'"&gt;..\&lt;/SolutionDir&gt;**
	**&lt;RestorePackages&gt;true&lt;/RestorePackages&gt;**
  &lt;/PropertyGroup&gt;
  **&lt;Import Project="$(SolutionDir)\.nuget\nuget.targets" /&gt;**
	.....
&lt;/Project&gt;
</code></pre>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[近况]]></title>
    <link href="https://2019.vibejun.com/blog/2012/08/03/life-2012-8-3/"/>
    <updated>2012-08-03T15:20:00+08:00</updated>
    <id>https://2019.vibejun.com/blog/2012/08/03/life-2012-8-3</id>
    <content type="html"><![CDATA[<p>七月过去了，进入八月，近一段时间总感觉颇为疲惫，工作效率有所下降，被公司那坑爹的系统搞的头都大了，不确定的需求，带来的是重复的工作，疲惫的主要来源。穿插不同的任务之间，需要并行处理能力支撑着，否则不但效率底下，质量也将大打折扣，好在曾第一份工作就有过这样的机会训练，虽不能说做得好，但抗压力能力还能继续…</p>

<p>周末，终于可以休息一下子了，明天或者后天去一个学校的书店看看，自考的学习资料早该买回来了，报了2科死记硬背的科目也要过了啊，报考费不能白白浪费，再就一边学习学习python、ruby、mac下熟悉熟悉vim等等，不要把自己筐死在某个领域，说不定后面有自己更适合的事物，自己的惰性也改去去，总这样下去也不是办法，一年很快就过去，若干年后也不想自己还停留在目前这样，人总得有所追求，哪怕失去一些自认为不能失去或重要的东西，即时麻木了，差不多就够了，活着就得好好的活，活出自己，不要浪费粮食、浪费空气、到了老去的那一天，发现自己找不到一个值得留念的事情，那就白活了，你说是吗</p>

<p>找回之前那个有上进心，向上，无忧无虑，爱学习的自己，实现自己的梦想，想我所想，做我所做，加油！！这就是此刻的自己，记录存档。</p>

<p>engineer</p>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[NuGet Server 配置 错误：未能从程序集“Nuget.Server, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null”中加载类型“NuGet.Server.DataServices.Packages”]]></title>
    <link href="https://2019.vibejun.com/blog/2012/07/13/nuget-server-setting-error/"/>
    <updated>2012-07-13T06:15:00+08:00</updated>
    <id>https://2019.vibejun.com/blog/2012/07/13/nuget-server-setting-error</id>
    <content type="html"><![CDATA[<p>上次配置 nuget server 时遇到些错误：未能从程序集“Nuget.Server, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null”中加载类型“NuGet.Server.DataServices.Packages”。，还以为是因为服务器的 webdav 有关（当时没报出错误，只是访问会出现404之类的错误），今天赫然发现，我建项目时的命名和nuget server引用的dll有些相同，于是乎，重命名建了个项目，发布到服务器上，貌似可以了，总结nuget server配置可能的几个原因：</p>

<ul>
  <li>webdav冲突，在iis &amp;ldquo;处理程序映射&amp;rdquo;中删除/禁用 webdav</li>
  <li>新建项目名称和nuget server名称冲突，换一个名称</li>
  <li>nuget server 已知bug，更新至最新版本</li>
</ul>

<p>标题所示说的问题应该不是问题，当时我SB了。</p>

<p>Okay, enjoy it!</p>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[开始学习 Ruby on Rails]]></title>
    <link href="https://2019.vibejun.com/blog/2012/07/11/ror/"/>
    <updated>2012-07-11T15:30:00+08:00</updated>
    <id>https://2019.vibejun.com/blog/2012/07/11/ror</id>
    <content type="html"><![CDATA[<p>安装完rails后</p>

<p>#创建一个rails项目</p>

<p>rails new project_name</p>

<p>cd project_name</p>

<p>#创建一个控制器</p>

<p>rails generate controller</p>

<p>#启动一个rails服务器</p>

<p>rails server</p>

<p>*提高速度</p>

<p>#跳过bundle安装，加快速度</p>

<p>rails new project_name –skip-bundle</p>

<p>bundle install –local</p>

<p>*中文编码问题</p>

<p>#coding: UTF-8</p>

<p>&amp;nbsp;</p>

<p>taobao rubygems mirror:</p>

<p><a href="http://ruby.taobao.org/">http://ruby.taobao.org/</a></p>

<p><strong>2013/04/10更新：</strong></p>

<p>比较全的ruby&amp;rails环境搭建教程：</p>

<p><a href="http://www.moncefbelyamani.com/how-to-install-xcode-homebrew-git-rvm-ruby-on-mac/">http://www.moncefbelyamani.com/how-to-install-xcode-homebrew-git-rvm-ruby-on-mac/</a></p>

<p>未完待续。。。</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[重来]]></title>
    <link href="https://2019.vibejun.com/blog/2012/07/10/restart/"/>
    <updated>2012-07-10T15:23:00+08:00</updated>
    <id>https://2019.vibejun.com/blog/2012/07/10/restart</id>
    <content type="html"><![CDATA[<p>以前写的博客，很久没备份，很久没更新，托管服务商（dotnet-host.com）(被黑客??)也玩消失了，资料貌似找不回了，那就重来，不能浪费这个域名，之前的域名（blog.pcme.info）就转发到当前（blogger.pcme.info）域名了，最近工作上事情有些麻烦，明天有做不完的事情，其实也没做多少事情，这种感觉不太好，这是让我感觉到时间管理的重要性，当然这样需要大家一起来管理时间，各自有计划的工作，才能有效提高效率，开心的是前几天去了香港，当然主要不是去玩，而是把macbook带回来了，这下就有很多事情可以做了，空闲之余就可以学学ruby、python、rails、还有object C，扩展下自己的视野，这也算是我的娱乐了，哈哈…</p>

<p>今天还要奖励下小芳同学把网络弄好了，虽然我觉网速不够，不过那个价格还挺便宜的，就要求不那么高了，好好学习天天向上，其次早睡早起，生活有点规律。</p>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[mark]]></title>
    <link href="https://2019.vibejun.com/blog/2012/06/20/mark/"/>
    <updated>2012-06-20T16:12:00+08:00</updated>
    <id>https://2019.vibejun.com/blog/2012/06/20/mark</id>
    <content type="html"><![CDATA[<p>标记一下，成功安装GAE博客程序</p>
]]></content>
  </entry>
  
</feed>
