<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Codes, Notes &#38; Scribbles &#187; 博客搬家</title>
	<atom:link href="http://blog.tomtung.com/tag/%e5%8d%9a%e5%ae%a2%e6%90%ac%e5%ae%b6/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.tomtung.com</link>
	<description>about programming, music and my life</description>
	<lastBuildDate>Sun, 15 Jan 2012 23:59:24 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>sinablog2wordpress：从新浪博客搬家到WordPress</title>
		<link>http://blog.tomtung.com/2010/02/sinablog2wordpress/</link>
		<comments>http://blog.tomtung.com/2010/02/sinablog2wordpress/#comments</comments>
		<pubDate>Sat, 06 Feb 2010 13:23:16 +0000</pubDate>
		<dc:creator>逆铭</dc:creator>
				<category><![CDATA[新长征路上的代码]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Scala]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[博客搬家]]></category>

		<guid isPermaLink="false">http://blog.tomtung.com/?p=475</guid>
		<description><![CDATA[<a href="http://blog.tomtung.com/2010/02/sinablog2wordpress/" title="sinablog2wordpress：从新浪博客搬家到Wordpress"></a>要从新浪搬到Wordpres，网上广为流传的方法是利用blogbus的博客搬家服务获得blogbus格式的xml，然后再用一个Python写的脚本把它转换成WordPress认识的格式。但是这种方法在最近新浪博客升级以后就失效了。于是自己用现学的scala写了一个小程序，搬家时能保留标签、目录、评论及评论回复这些信息。 猛击[这里]下载。注意，此程序仅支持2010年初的新版新浪博客，之前或之后的版本都不支持。 要运行程序，你需要确保已经安装过JRE。双击运行后显示如图界面，填入自己的博客地址（不要省略“ http:// ”），然后点击“Start”即可。这时“Start”按钮变为灰色，标题栏显示“Extracting”。等待几分钟，当标题栏显示为“Done”、“Start”按钮重新变为可用时，程序所在目录下会出现一个blog.xml文件。把这个文件直接导入WordPress就可以了。 代码也打在jar包里了，MIT协议。欢迎报告bug。 下面是废话。 恩由于新浪用了ajax，评论信息是通过xhr异步读取的，用一般的方法没法抓到。我纠结许久，最后是用了非常ad hoc的方法解决的，不知道有没有什么什么不太麻烦的通用解决方案呢。 再扯两句scala。我都想不起来当初具体是怎么想到要学scala的，也许是为了了解下函数式编程，也许只是想在jvm上有一个喜欢的语言吧——Java写起来太不爽了；Java社区的低效和保守也已经开始显出C++的影子。 scala确实是非常强大和灵活；我在见到一些颇富技巧性的hack之后都有些怀疑scala社区的风气会不会慢慢变得像C++社区一样过分热衷技巧的炫耀。不过scala的设计目标就是以较简单的语法规则获得最大的scalability，不需要通过挖掘语言规范里的犄角旮旯来实现一些必要功能，所以不会像C++一样成为一门本身已相当复杂，却还需要别人反过来教语言发明者如何使用的语言。 scala毕竟表现力比Java强太多，代码也简洁太多。比如这次我需要实现一个抛出异常后重试若干次的逻辑，只需定义一个函数： def tryFor[T](times: Int)(op: =&#62; T): T = { if (times &#60;= 0) throw new RuntimeException("Operation failed.")  try { return op } catch {  case e: Throwable =&#62; e.printStackTrace &#8230;<p class="read-more"><a href="http://blog.tomtung.com/2010/02/sinablog2wordpress/">继续阅读 &#187;</a></p><hr/><blockquote>
可能你对下面的文章也感兴趣：<ol>
<li><a href='http://blog.tomtung.com/2009/03/try-template-meta-programming/' rel='bookmark' title='小试模板元编程'>小试模板元编程</a></li>
<li><a href='http://blog.tomtung.com/2008/10/first-month-in-buaa/' rel='bookmark' title='初来北航一个多月的零零碎碎'>初来北航一个多月的零零碎碎</a></li>
<li><a href='http://blog.tomtung.com/2008/09/cpp-primer-reding-notes-chapter8/' rel='bookmark' title='C++ Primer 读书笔记 &#8211; 第八章'>C++ Primer 读书笔记 &#8211; 第八章</a></li>
</ol></blockquote>]]></description>
			<content:encoded><![CDATA[<a href="http://blog.tomtung.com/2010/02/sinablog2wordpress/" title="sinablog2wordpress：从新浪博客搬家到Wordpress"></a><div class="wp-caption alignnone" style="width: 430px"><a href="http://code.google.com/p/sinablog2wordpress/"><img title="http://upload.tomtung.com/img/sina2wordpress-screenshot.png" src="http://upload.tomtung.com/img/sina2wordpress-screenshot.png" alt="" width="420" height="80" /></a><p class="wp-caption-text">Screenshot</p></div>
<p>要从新浪搬到Wordpres，网上广为流传的方法是利用blogbus的博客搬家服务获得blogbus格式的xml，然后再用一个Python写的脚本把它转换成WordPress认识的格式。但是这种方法在最近新浪博客升级以后就失效了。于是自己用现学的scala写了一个小程序，搬家时能保留<strong>标签</strong>、<strong>目录</strong>、<strong>评论</strong>及<strong>评论回复</strong>这些信息。</p>
<p>猛击<strong><a href="http://sinablog2wordpress.googlecode.com/files/sina2wordpress.jar" target="_self">[这里]</a></strong>下载。注意，此程序仅支持2010年初的新版新浪博客，之前或之后的版本都不支持。</p>
<p>要运行程序，你需要确保已经安装过<a href="http://java.com/zh_CN/download/">JRE</a>。双击运行后显示如图界面，填入自己的博客地址（不要省略“ http:// ”），然后点击“Start”即可。这时“Start”按钮变为灰色，标题栏显示“Extracting”。等待几分钟，当标题栏显示为“Done”、“Start”按钮重新变为可用时，程序所在目录下会出现一个blog.xml文件。把这个文件直接导入WordPress就可以了。</p>
<p>代码也打在jar包里了，MIT协议。欢迎报告bug。</p>
<p>下面是废话。</p>
<p>恩由于新浪用了ajax，评论信息是通过xhr异步读取的，用一般的方法没法抓到。我纠结许久，最后是用了非常ad hoc的方法解决的，不知道有没有什么什么不太麻烦的通用解决方案呢。</p>
<p>再扯两句scala。我都想不起来当初具体是怎么想到要学scala的，也许是为了了解下函数式编程，也许只是想在jvm上有一个喜欢的语言吧——Java写起来太不爽了；Java社区的低效和保守也已经开始显出C++的影子。</p>
<p>scala确实是非常强大和灵活；我在见到一些颇富技巧性的hack之后都有些怀疑scala社区的风气会不会慢慢变得像C++社区一样过分热衷技巧的炫耀。不过scala的设计目标就是以较简单的语法规则获得最大的scalability，不需要通过挖掘语言规范里的犄角旮旯来实现一些必要功能，所以不会像C++一样成为一门本身已相当复杂，却还需要别人反过来教语言发明者如何使用的语言。</p>
<p>scala毕竟表现力比Java强太多，代码也简洁太多。比如这次我需要实现一个抛出异常后重试若干次的逻辑，只需定义一个函数：</p>
<pre class="brush:scala">def tryFor[T](times: Int)(op: =&gt; T): T = {
  if (times &lt;= 0) throw new RuntimeException("Operation failed.")
  try { return op } catch {
    case e: Throwable =&gt; e.printStackTrace
    tryFor(times - 1)(op)
  }
}</pre>
<p>然后这样使用：</p>
<pre class="brush:scala">val source = tryFor(5) {new Source(url)}</pre>
<p>程序就会不断获得网页源代码，并在5次失败后抛出异常。Java实现同样的东西可不会如此优雅了。又如下面这段代码返回一篇博文xml：</p>
<pre class="brush:scala">private def generateEntryXml(entry: BlogEntry) = {
  &lt;item&gt;
    &lt;title&gt;
      {entry.title}
    &lt;/title&gt;
    &lt;wp:post_date&gt;
      {dateFormat.format(entry.postDate)}
    &lt;/wp:post_date&gt;
    &lt;category&gt;
      {entry.category}
    &lt;/category&gt;
    {for (tag &lt;- entry.tags) yield &lt;category domain="tag"&gt;{tag}&lt;/category&gt;}
    &lt;content:encoded&gt;
      {xml.Unparsed(handleNewLines(entry.content))}
    &lt;/content:encoded&gt;
    &lt;wp:status&gt;publish&lt;/wp:status&gt;
    {for (comment &lt;- entry.comments) yield generateCommentXml(comment)}
  &lt;/item&gt;
}</pre>
<p>注意，xml标签直接作为scala的源代码的一部分在代码中出现！虽然我觉得这样会使scala语言多出一种“特殊情况”，增加语言的复杂性，但不得不承认这样的设计确实非常优美简洁。</p>
<p>我比较看好scala，以后自己做跑在jvm上的东西scala应该是首选语言。推荐有兴趣的童鞋也了解一下。</p>

<hr/><blockquote><p>可能你对下面的文章也感兴趣：</p><ol>
<li><a href='http://blog.tomtung.com/2009/03/try-template-meta-programming/' rel='bookmark' title='小试模板元编程'>小试模板元编程</a></li>
<li><a href='http://blog.tomtung.com/2008/10/first-month-in-buaa/' rel='bookmark' title='初来北航一个多月的零零碎碎'>初来北航一个多月的零零碎碎</a></li>
<li><a href='http://blog.tomtung.com/2008/09/cpp-primer-reding-notes-chapter8/' rel='bookmark' title='C++ Primer 读书笔记 &#8211; 第八章'>C++ Primer 读书笔记 &#8211; 第八章</a></li>
</ol></blockquote>]]></content:encoded>
			<wfw:commentRss>http://blog.tomtung.com/2010/02/sinablog2wordpress/feed/</wfw:commentRss>
		<slash:comments>29</slash:comments>
		</item>
		<item>
		<title>Hello World&#8230;Press!</title>
		<link>http://blog.tomtung.com/2010/02/hello-wordpress/</link>
		<comments>http://blog.tomtung.com/2010/02/hello-wordpress/#comments</comments>
		<pubDate>Sat, 06 Feb 2010 11:35:41 +0000</pubDate>
		<dc:creator>逆铭</dc:creator>
				<category><![CDATA[生活在此处]]></category>
		<category><![CDATA[博客搬家]]></category>

		<guid isPermaLink="false">http://blog.tomtung.com/?p=472</guid>
		<description><![CDATA[<a href="http://blog.tomtung.com/2010/02/hello-wordpress/" title="Hello World...Press!"></a>在打算了很久之后，终于从写了三年多新浪博客搬出来了~ 一方面新浪的限制太多，而且每次系统升级一下都可能会破坏我的一部分内容。另一方面，作为一个21世纪有理想有抱负的IT民工，唯一的blog竟然开在新浪实在是情何以堪啊。而在墙内根本选不出理想的BSP情况下，我抱着“DNS白名单一定不会实施”的幻想，终于决心独立出来了。 两年之内不会换的域名：http://blog.tomtung.com/]]></description>
			<content:encoded><![CDATA[<a href="http://blog.tomtung.com/2010/02/hello-wordpress/" title="Hello World...Press!"></a><p>在打算了很久之后，终于从写了三年多新浪博客搬出来了~</p>
<p>一方面新浪的限制太多，而且每次系统升级一下都可能会破坏我的一部分内容。另一方面，作为一个21世纪有理想有抱负的IT民工，唯一的blog竟然开在新浪实在是情何以堪啊。而在墙内根本选不出理想的BSP情况下，我抱着“DNS白名单一定不会实施”的幻想，终于决心独立出来了。</p>
<p>两年之内不会换的域名：http://blog.tomtung.com/</p>

]]></content:encoded>
			<wfw:commentRss>http://blog.tomtung.com/2010/02/hello-wordpress/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

