<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>SunNing&#039;s Blog</title>
	<atom:link href="http://sunng87.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://sunng87.wordpress.com</link>
	<description>Mirror to http://sunng.info/blog/</description>
	<lastBuildDate>Tue, 14 Feb 2012 00:29:12 +0000</lastBuildDate>
	<language>zh-cn</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='sunng87.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>SunNing&#039;s Blog</title>
		<link>http://sunng87.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://sunng87.wordpress.com/osd.xml" title="SunNing&#039;s Blog" />
	<atom:link rel='hub' href='http://sunng87.wordpress.com/?pushpress=hub'/>
		<item>
		<title>爬山！</title>
		<link>http://sunng87.wordpress.com/2012/02/01/%e7%88%ac%e5%b1%b1%ef%bc%81/</link>
		<comments>http://sunng87.wordpress.com/2012/02/01/%e7%88%ac%e5%b1%b1%ef%bc%81/#comments</comments>
		<pubDate>Wed, 01 Feb 2012 14:42:06 +0000</pubDate>
		<dc:creator>Sunng</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://sunng87.wordpress.com/?p=979</guid>
		<description><![CDATA[今天是2月1号，本人决定从今天开始到月底的每个工作日中午去爬山锻炼身体，以摆脱目前体重极速增长的困局。口说无凭，立此为据。 CuiPing_HillShow embedded map in full-screen mode<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sunng87.wordpress.com&amp;blog=7585375&amp;post=979&amp;subd=sunng87&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>今天是2月1号，本人决定从今天开始到月底的每个工作日中午去爬山锻炼身体，以摆脱目前体重极速增长的困局。口说无凭，立此为据。</p>
<p>CuiPing_Hill<br /><a href="http://sunng.info/blog/wp-content/plugins/leaflet-maps-marker/leaflet-fullscreen.php?marker=2"><img src="http://sunng.info/blog/wp-content/plugins/leaflet-maps-marker/img/map-rss-feed.png" /><br />Show embedded map in full-screen mode</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/sunng87.wordpress.com/979/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/sunng87.wordpress.com/979/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/sunng87.wordpress.com/979/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/sunng87.wordpress.com/979/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/sunng87.wordpress.com/979/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/sunng87.wordpress.com/979/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/sunng87.wordpress.com/979/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/sunng87.wordpress.com/979/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/sunng87.wordpress.com/979/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/sunng87.wordpress.com/979/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/sunng87.wordpress.com/979/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/sunng87.wordpress.com/979/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/sunng87.wordpress.com/979/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/sunng87.wordpress.com/979/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sunng87.wordpress.com&amp;blog=7585375&amp;post=979&amp;subd=sunng87&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://sunng87.wordpress.com/2012/02/01/%e7%88%ac%e5%b1%b1%ef%bc%81/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/2c05c29685aa4bfefc599fa0d3755549?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">sunng87</media:title>
		</media:content>

		<media:content url="http://sunng.info/blog/wp-content/plugins/leaflet-maps-marker/img/map-rss-feed.png" medium="image" />
	</item>
		<item>
		<title>ClojureDocs Android App</title>
		<link>http://sunng87.wordpress.com/2012/01/24/clojuredocs-android-app/</link>
		<comments>http://sunng87.wordpress.com/2012/01/24/clojuredocs-android-app/#comments</comments>
		<pubDate>Tue, 24 Jan 2012 08:37:34 +0000</pubDate>
		<dc:creator>Sunng</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://sunng87.wordpress.com/?p=977</guid>
		<description><![CDATA[利用春节的假期写了一个Android应用，可以在ClojureDocs.org上搜索clojure API，浏览文档、源代码和社区贡献的代码实例。ClojureDocs在我学习Clojure的过程中起了很大的作用，所以我想这个网站应该对很多人有用。 无暇去学习Android平台上繁琐的知识，不过好在有Phonegap这样的框架，可以把网页应用转化为本地应用，并且提供访问本地设备的API。通过Phonegap开发的程序还可以直接移植到iphone平台上。ClojureDocs Android就是运行在Phonegap中。 首页： 搜索界面 API函数界面 你可以从github获得代码和签名过的apk：https://github.com/sunng87/clojuredocs-android Known Issue，phonegap程序在屏幕旋转时会崩溃，已经在2.3和3.2上重现，目前还不清楚具体的原因。 欢迎任何的pull request。<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sunng87.wordpress.com&amp;blog=7585375&amp;post=977&amp;subd=sunng87&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>利用春节的假期写了一个Android应用，可以在<a href="http://clojuredocs.org" target="_blank">ClojureDocs.org</a>上搜索clojure API，浏览文档、源代码和社区贡献的代码实例。ClojureDocs在我学习Clojure的过程中起了很大的作用，所以我想这个网站应该对很多人有用。</p>
<p>无暇去学习Android平台上繁琐的知识，不过好在有Phonegap这样的框架，可以把网页应用转化为本地应用，并且提供访问本地设备的API。通过Phonegap开发的程序还可以直接移植到iphone平台上。ClojureDocs Android就是运行在Phonegap中。</p>
<p>首页：<br />
<img src="http://i.imgur.com/zdMCt.png" alt="" /></p>
<p>搜索界面<br />
<img src="http://i.imgur.com/MVCz4.png" alt="" /></p>
<p>API函数界面<br />
<img src="http://i.imgur.com/M0fEI.png" alt="" /></p>
<p>你可以从github获得代码和签名过的apk：<a href="https://github.com/sunng87/clojuredocs-android" target="_blank">https://github.com/sunng87/clojuredocs-android</a></p>
<p>Known Issue，phonegap程序在屏幕旋转时会崩溃，已经在2.3和3.2上重现，目前还不清楚具体的原因。</p>
<p>欢迎任何的pull request。</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/sunng87.wordpress.com/977/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/sunng87.wordpress.com/977/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/sunng87.wordpress.com/977/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/sunng87.wordpress.com/977/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/sunng87.wordpress.com/977/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/sunng87.wordpress.com/977/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/sunng87.wordpress.com/977/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/sunng87.wordpress.com/977/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/sunng87.wordpress.com/977/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/sunng87.wordpress.com/977/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/sunng87.wordpress.com/977/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/sunng87.wordpress.com/977/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/sunng87.wordpress.com/977/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/sunng87.wordpress.com/977/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sunng87.wordpress.com&amp;blog=7585375&amp;post=977&amp;subd=sunng87&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://sunng87.wordpress.com/2012/01/24/clojuredocs-android-app/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/2c05c29685aa4bfefc599fa0d3755549?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">sunng87</media:title>
		</media:content>

		<media:content url="http://i.imgur.com/zdMCt.png" medium="image" />

		<media:content url="http://i.imgur.com/MVCz4.png" medium="image" />

		<media:content url="http://i.imgur.com/M0fEI.png" medium="image" />
	</item>
		<item>
		<title>OpenStreetMap Nanjing: A Year of Edits</title>
		<link>http://sunng87.wordpress.com/2012/01/19/openstreetmap-nanjing-a-year-of-edits/</link>
		<comments>http://sunng87.wordpress.com/2012/01/19/openstreetmap-nanjing-a-year-of-edits/#comments</comments>
		<pubDate>Thu, 19 Jan 2012 13:22:26 +0000</pubDate>
		<dc:creator>Sunng</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://sunng87.wordpress.com/?p=975</guid>
		<description><![CDATA[这是2011年OpenStreetMap上，南京的编辑情况。高亮的部分是2011年创建或更新的要素。从这张图上可以看出最近的这一年，南京的数据从无到有到逐渐的完善，这里面倾注了本地几位贡献者结结实实的心血。 对这个可视化感兴趣，可以参考这里的代码和样式表。<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sunng87.wordpress.com&amp;blog=7585375&amp;post=975&amp;subd=sunng87&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><img src="http://i.imgur.com/0mVFk.png" alt="osm nanjing" /></p>
<p>这是2011年OpenStreetMap上，南京的编辑情况。高亮的部分是2011年创建或更新的要素。从这张图上可以看出最近的这一年，南京的数据从无到有到逐渐的完善，这里面倾注了本地几位贡献者结结实实的心血。</p>
<p>对这个可视化感兴趣，可以参考<a href="https://gist.github.com/1639915" target="_blank">这里的代码和样式表</a>。</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/sunng87.wordpress.com/975/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/sunng87.wordpress.com/975/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/sunng87.wordpress.com/975/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/sunng87.wordpress.com/975/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/sunng87.wordpress.com/975/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/sunng87.wordpress.com/975/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/sunng87.wordpress.com/975/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/sunng87.wordpress.com/975/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/sunng87.wordpress.com/975/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/sunng87.wordpress.com/975/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/sunng87.wordpress.com/975/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/sunng87.wordpress.com/975/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/sunng87.wordpress.com/975/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/sunng87.wordpress.com/975/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sunng87.wordpress.com&amp;blog=7585375&amp;post=975&amp;subd=sunng87&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://sunng87.wordpress.com/2012/01/19/openstreetmap-nanjing-a-year-of-edits/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/2c05c29685aa4bfefc599fa0d3755549?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">sunng87</media:title>
		</media:content>

		<media:content url="http://i.imgur.com/0mVFk.png" medium="image">
			<media:title type="html">osm nanjing</media:title>
		</media:content>
	</item>
		<item>
		<title>Clojure on CloudFoundry</title>
		<link>http://sunng87.wordpress.com/2012/01/13/clojure-on-cloudfoundry/</link>
		<comments>http://sunng87.wordpress.com/2012/01/13/clojure-on-cloudfoundry/#comments</comments>
		<pubDate>Fri, 13 Jan 2012 13:37:19 +0000</pubDate>
		<dc:creator>Sunng</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://sunng87.wordpress.com/?p=973</guid>
		<description><![CDATA[In this article, I will show you how to develop and deploy clojure web application on CloudFoundry. As you may know, CloudFoundry is an opensource PaaS backed by VMWare. Java, Ruby and Nodejs are officially supported. As a JVM language, clojure is born to be also available on this platform, although it&#8217;s not listed. CloudFoundry [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sunng87.wordpress.com&amp;blog=7585375&amp;post=973&amp;subd=sunng87&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>In this article, I will show you how to develop and deploy clojure web application on CloudFoundry. As you may know, CloudFoundry is an opensource PaaS backed by VMWare. Java, Ruby and Nodejs are officially supported. As a JVM language, clojure is born to be also available on this platform, although it&#8217;s not listed. </p>
<p>CloudFoundry accepts a .war file for Java web application deployment. So you don&#8217;t need the ring-jetty-adaptor and a procfile as heroku requires. To help your development and deployment, I strongly recommend the lein-ring plugin:</p>
<div class="codecolorer-container clojure twitlight" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;">
<div class="clojure codecolorer" style="font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;padding:5px;">&nbsp; :<span style="color:#555;">dev</span><span style="color:#66cc66;">-</span>dependencies <span style="color:#66cc66;">&#091;</span><span style="color:#66cc66;">&#091;</span>lein<span style="color:#66cc66;">-</span>ring <span style="color:#ff0000;">&quot;0.5.4&quot;</span><span style="color:#66cc66;">&#093;</span><span style="color:#66cc66;">&#093;</span></div>
</div>
<p>CloudFoundry provides backend services like mysql, redis, mongodb and more. The connection information are stored as environment variables. <a href="http://env.cloudfoundry.com/env" target="_blank">Here</a> you can find a subset of them. </p>
<p>Take mongodb as example, connection information (host, port, username and password) are encoded as JSON, stored in environment variables. You can get them with this function:</p>
<div class="codecolorer-container clojure twitlight" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;">
<div class="clojure codecolorer" style="font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;padding:5px;"><span style="color:#66cc66;">&#040;</span><span style="color:#b1b100;">defn</span> mongo<span style="color:#66cc66;">-</span>config <span style="color:#66cc66;">&#091;</span>key<span style="color:#66cc66;">&#093;</span><br />
&nbsp; <span style="color:#66cc66;">&#040;</span><span style="color:#b1b100;">if-let</span> <span style="color:#66cc66;">&#091;</span>services <span style="color:#66cc66;">&#040;</span>System<span style="color:#66cc66;">/</span>getenv <span style="color:#ff0000;">&quot;VCAP_SERVICES&quot;</span><span style="color:#66cc66;">&#041;</span><span style="color:#66cc66;">&#093;</span><br />
&nbsp; &nbsp; <span style="color:#66cc66;">&#040;</span><span style="color:#b1b100;">let</span> <span style="color:#66cc66;">&#091;</span>services<span style="color:#66cc66;">-</span>dict <span style="color:#66cc66;">&#040;</span>json<span style="color:#66cc66;">/</span>read<span style="color:#66cc66;">-</span>json services false<span style="color:#66cc66;">&#041;</span><span style="color:#66cc66;">&#093;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color:#66cc66;">&#040;</span><span style="color:#66cc66;">-&gt;</span> services<span style="color:#66cc66;">-</span>dict<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#66cc66;">&#040;</span>get <span style="color:#ff0000;">&quot;mongodb-1.8&quot;</span><span style="color:#66cc66;">&#041;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#b1b100;">first</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#66cc66;">&#040;</span>get <span style="color:#ff0000;">&quot;credentials&quot;</span><span style="color:#66cc66;">&#041;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#66cc66;">&#040;</span>get key<span style="color:#66cc66;">&#041;</span><span style="color:#66cc66;">&#041;</span><span style="color:#66cc66;">&#041;</span><span style="color:#66cc66;">&#041;</span><span style="color:#66cc66;">&#041;</span></div>
</div>
<p>In the server bootstrap function, create the mongodb connection:</p>
<div class="codecolorer-container clojure twitlight" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;">
<div class="clojure codecolorer" style="font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;padding:5px;"><span style="color:#66cc66;">&#040;</span><span style="color:#b1b100;">defn</span> app<span style="color:#66cc66;">-</span>init <span style="color:#66cc66;">&#091;</span><span style="color:#66cc66;">&#093;</span><br />
&nbsp; <span style="color:#66cc66;">&#040;</span><span style="color:#b1b100;">def</span> db<span style="color:#66cc66;">-</span>conn <span style="color:#66cc66;">&#040;</span>make<span style="color:#66cc66;">-</span>connection<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color:#66cc66;">&#040;</span><span style="color:#b1b100;">or</span> <span style="color:#66cc66;">&#040;</span>mongo<span style="color:#66cc66;">-</span>config <span style="color:#ff0000;">&quot;db&quot;</span><span style="color:#66cc66;">&#041;</span> <span style="color:#ff0000;">&quot;lazypress&quot;</span><span style="color:#66cc66;">&#041;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;:<span style="color:#555;">host</span> <span style="color:#66cc66;">&#040;</span><span style="color:#b1b100;">or</span> <span style="color:#66cc66;">&#040;</span>mongo<span style="color:#66cc66;">-</span>config <span style="color:#ff0000;">&quot;hostname&quot;</span><span style="color:#66cc66;">&#041;</span> <span style="color:#ff0000;">&quot;localhost&quot;</span><span style="color:#66cc66;">&#041;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;:<span style="color:#555;">port</span> <span style="color:#66cc66;">&#040;</span><span style="color:#b1b100;">or</span> <span style="color:#66cc66;">&#040;</span>mongo<span style="color:#66cc66;">-</span>config <span style="color:#ff0000;">&quot;port&quot;</span><span style="color:#66cc66;">&#041;</span> <span style="color:#cc66cc;">27017</span><span style="color:#66cc66;">&#041;</span><span style="color:#66cc66;">&#041;</span><span style="color:#66cc66;">&#041;</span><br />
&nbsp; <span style="color:#66cc66;">&#040;</span><span style="color:#b1b100;">when-not</span> <span style="color:#66cc66;">&#040;</span><span style="color:#b1b100;">nil?</span> <span style="color:#66cc66;">&#040;</span>mongo<span style="color:#66cc66;">-</span>config <span style="color:#ff0000;">&quot;username&quot;</span><span style="color:#66cc66;">&#041;</span><span style="color:#66cc66;">&#041;</span><br />
&nbsp; &nbsp; <span style="color:#66cc66;">&#040;</span>authenticate db<span style="color:#66cc66;">-</span>conn<br />
&nbsp; &nbsp; &nbsp; <span style="color:#66cc66;">&#040;</span>mongo<span style="color:#66cc66;">-</span>config <span style="color:#ff0000;">&quot;username&quot;</span><span style="color:#66cc66;">&#041;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color:#66cc66;">&#040;</span>mongo<span style="color:#66cc66;">-</span>config <span style="color:#ff0000;">&quot;password&quot;</span><span style="color:#66cc66;">&#041;</span><span style="color:#66cc66;">&#041;</span><span style="color:#66cc66;">&#041;</span></div>
</div>
<p>By adding check for nil, local databased is also supported. This is pretty convenience for local development. These environment variables are consistent on all cloudfoundry application, so it&#8217;s possible to deploy the application on multiple accounts without any changes.</p>
<p>Then you can add your web stuff just like standard clojure web development. (If you are using compojure, place your static files under resource/public.)</p>
<p>Finally, package it. (Suppose your application is named as &#8220;lazypress&#8221;)</p>
<div class="codecolorer-container bash twitlight" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;">
<div class="bash codecolorer" style="font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;padding:5px;">lein ring uberwar lazypress.war</div>
</div>
<p>Use the vmc tool to deploy it:</p>
<div class="codecolorer-container bash twitlight" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;">
<div class="bash codecolorer" style="font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;padding:5px;">vmc update lazypress</div>
</div>
<p>For more usage about the vnc tool, you can read <a href="http://blog.cloudfoundry.com/post/13481010498/simplified-application-deployment-with-cloud-foundry-manifest" target="_blank">this article</a>.</p>
<p>So you have finished deploying your clojure web application to cloudfoundry.</p>
<p>Backed by spring and vmware, cloudfoundry is more Java-friendly than other PaaS like heroku. You don&#8217;t have to start a Java process by yourself (&#8220;lein run&#8221; isn&#8217;t a graceful way to start your app in product environment). And you don&#8217;t have to worry about your web container settings (configure jetty with limited options via ring-jetty-adaptor). All you have to do is package the application as a portable war file, which you can deploy to tomcat, glassfish, and also cloudfoundry. The vmc tool could detect you war file and handle it correctly.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/sunng87.wordpress.com/973/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/sunng87.wordpress.com/973/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/sunng87.wordpress.com/973/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/sunng87.wordpress.com/973/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/sunng87.wordpress.com/973/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/sunng87.wordpress.com/973/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/sunng87.wordpress.com/973/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/sunng87.wordpress.com/973/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/sunng87.wordpress.com/973/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/sunng87.wordpress.com/973/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/sunng87.wordpress.com/973/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/sunng87.wordpress.com/973/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/sunng87.wordpress.com/973/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/sunng87.wordpress.com/973/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sunng87.wordpress.com&amp;blog=7585375&amp;post=973&amp;subd=sunng87&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://sunng87.wordpress.com/2012/01/13/clojure-on-cloudfoundry/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/2c05c29685aa4bfefc599fa0d3755549?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">sunng87</media:title>
		</media:content>
	</item>
		<item>
		<title>Weekend Project: LazyPress</title>
		<link>http://sunng87.wordpress.com/2012/01/08/weekend-project-lazypress/</link>
		<comments>http://sunng87.wordpress.com/2012/01/08/weekend-project-lazypress/#comments</comments>
		<pubDate>Sun, 08 Jan 2012 15:52:17 +0000</pubDate>
		<dc:creator>Sunng</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://sunng87.wordpress.com/?p=971</guid>
		<description><![CDATA[发布一个典型的weekend project, 名字叫做LazyPress.顾名思义,这是一个在线的写作系统. 取名Lazy, 除了因为它用Clojure写成,更因为他的简单: 没有繁琐的注册,没有繁琐的分类tag,没有繁琐的格式化,无论是使用还是开发都力求做到最简单. LazyPress采用Mozilla刚刚发布的BrowserID. 技术作为账号系统, 用户只需要在首次登录后提供一个ID即可(原本这一步也可以省略, 但是为了保护您的邮箱隐私, 现在需要一个LazyPress专用的ID). 这样LazyPress本身不存储用户的密码,也简化了用户账号管理的代价. BrowserID的登录流程非常简单, 速度也比传统的OpenID和OAuth要快, 用户体验要比多次跳转好很多. LazyPress使用Markdown进行文本格式化, 简单的编辑器可以支持绝大多数格式的要求. 另外,在浏览器后台LazyPress使用HTML5 LocalStorage技术自动保存用户的文本草稿, 如果用户没有成功发布, 可以在下次浏览器打开时进行恢复. LazyPress后台存储采用mongodb. 正是mongodb的schema free特性降低了项目功能重构的成本, 促进了人们更快更频繁地优化产品的模型. 这应该是文档型数据库之于传统关系型数据库最大的优势. (犹如git之于svn, 开分支的成本要低得多, 看似是一个普通的功能改进, 实则鼓励促进了开发人员通过开分支实现自己的修改) LazyPress运行在最近发布的compojure 1.0.0和ring 1.0.0上, 打包为标准的Java web应用直接部署在cloudfoundry上. 前端继续使用的是我偏爱的Mootools库, 因为使用了很多新的浏览器技术, 所以目前只能保证在最新的Firefox和Chromium/Chrome上正常使用. Fork me on github: http://github.com/sunng87/lazypress<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sunng87.wordpress.com&amp;blog=7585375&amp;post=971&amp;subd=sunng87&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>发布一个典型的weekend project, 名字叫做<a href="http://lazypress.cloundfoundry.com">LazyPress</a>.顾名思义,这是一个在线的写作系统. 取名Lazy, 除了因为它用Clojure写成,更因为他的简单: 没有繁琐的注册,没有繁琐的分类tag,没有繁琐的格式化,无论是使用还是开发都力求做到最简单.<br />
LazyPress采用Mozilla刚刚发布的<a href="http://browserid.org/">BrowserID</a>. 技术作为账号系统, 用户只需要在首次登录后提供一个ID即可(原本这一步也可以省略, 但是为了保护您的邮箱隐私, 现在需要一个LazyPress专用的ID). 这样LazyPress本身不存储用户的密码,也简化了用户账号管理的代价. BrowserID的登录流程非常简单, 速度也比传统的OpenID和OAuth要快, 用户体验要比多次跳转好很多.<br />
LazyPress使用Markdown进行文本格式化, 简单的编辑器可以支持绝大多数格式的要求. 另外,在浏览器后台LazyPress使用HTML5 LocalStorage技术自动保存用户的文本草稿, 如果用户没有成功发布, 可以在下次浏览器打开时进行恢复.</p>
<p>LazyPress后台存储采用mongodb. 正是mongodb的schema free特性降低了项目功能重构的成本, 促进了人们更快更频繁地优化产品的模型. 这应该是文档型数据库之于传统关系型数据库最大的优势. (犹如git之于svn, 开分支的成本要低得多, 看似是一个普通的功能改进, 实则鼓励促进了开发人员通过开分支实现自己的修改)<br />
LazyPress运行在最近发布的compojure 1.0.0和ring 1.0.0上, 打包为标准的Java web应用直接部署在cloudfoundry上. 前端继续使用的是我偏爱的Mootools库, 因为使用了很多新的浏览器技术, 所以目前只能保证在最新的Firefox和Chromium/Chrome上正常使用.</p>
<p>Fork me on github: <a href="http://github.com/sunng87/lazypress">http://github.com/sunng87/lazypress</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/sunng87.wordpress.com/971/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/sunng87.wordpress.com/971/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/sunng87.wordpress.com/971/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/sunng87.wordpress.com/971/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/sunng87.wordpress.com/971/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/sunng87.wordpress.com/971/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/sunng87.wordpress.com/971/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/sunng87.wordpress.com/971/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/sunng87.wordpress.com/971/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/sunng87.wordpress.com/971/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/sunng87.wordpress.com/971/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/sunng87.wordpress.com/971/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/sunng87.wordpress.com/971/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/sunng87.wordpress.com/971/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sunng87.wordpress.com&amp;blog=7585375&amp;post=971&amp;subd=sunng87&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://sunng87.wordpress.com/2012/01/08/weekend-project-lazypress/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/2c05c29685aa4bfefc599fa0d3755549?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">sunng87</media:title>
		</media:content>
	</item>
		<item>
		<title>slacker 0.4.0 released</title>
		<link>http://sunng87.wordpress.com/2012/01/04/slacker-0-4-0-released/</link>
		<comments>http://sunng87.wordpress.com/2012/01/04/slacker-0-4-0-released/#comments</comments>
		<pubDate>Wed, 04 Jan 2012 12:52:12 +0000</pubDate>
		<dc:creator>Sunng</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://sunng87.wordpress.com/?p=969</guid>
		<description><![CDATA[Slacker 0.4.0 has been released to clojars.org . There are new features and breaking changes in this release. Breaking Changes New maven coordinator: [slacker "0.4.0"] (groupId renamed to slakcer) defremote renamed to defn-remote SlackerException removed. slacker now uses slingshot for exception handling Rename :async option of defn-remote to :async? What&#8217;s new in 0.4.0 Add new [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sunng87.wordpress.com&amp;blog=7585375&amp;post=969&amp;subd=sunng87&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Slacker 0.4.0 has been released to clojars.org . There are new features and breaking changes in this release.</p>
<h3>Breaking Changes</h3>
<ul>
<li>New maven coordinator: [slacker "0.4.0"] (groupId renamed to slakcer)</li>
<li>defremote renamed to <strong>defn-remote</strong></li>
<li>SlackerException removed. slacker now uses slingshot for exception handling</li>
<li>Rename :async option of defn-remote to <strong>:async?</strong></li>
</ul>
<h3>What&#8217;s new in 0.4.0</h3>
<ul>
<li>Add new serialization type <strong>:clj</strong></li>
<li>New interceptors: execution time stats, args logger, slow watch dog</li>
<li>New HTTP interface</li>
<li>Server inspect commands	</li>
<li> utility functions/macros <strong>defn-remote-all</strong>, <strong>defn-remote-batch</strong> and <strong>meta-remote</strong></li>
</ul>
<p>Get more information on <a href="https://github.com/sunng87/slacker" target="_blank">github</a>.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/sunng87.wordpress.com/969/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/sunng87.wordpress.com/969/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/sunng87.wordpress.com/969/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/sunng87.wordpress.com/969/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/sunng87.wordpress.com/969/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/sunng87.wordpress.com/969/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/sunng87.wordpress.com/969/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/sunng87.wordpress.com/969/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/sunng87.wordpress.com/969/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/sunng87.wordpress.com/969/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/sunng87.wordpress.com/969/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/sunng87.wordpress.com/969/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/sunng87.wordpress.com/969/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/sunng87.wordpress.com/969/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sunng87.wordpress.com&amp;blog=7585375&amp;post=969&amp;subd=sunng87&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://sunng87.wordpress.com/2012/01/04/slacker-0-4-0-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/2c05c29685aa4bfefc599fa0d3755549?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">sunng87</media:title>
		</media:content>
	</item>
		<item>
		<title>Code 2011</title>
		<link>http://sunng87.wordpress.com/2011/12/31/code-2011/</link>
		<comments>http://sunng87.wordpress.com/2011/12/31/code-2011/#comments</comments>
		<pubDate>Sat, 31 Dec 2011 15:22:43 +0000</pubDate>
		<dc:creator>Sunng</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://sunng87.wordpress.com/?p=967</guid>
		<description><![CDATA[成功人士是不写总结的，所以我来写个总结。 今年的coding从ABAP开始，这个很多人现在不知道以后也不用知道最好永远也不要知道的语言和他的平台，是一个脱胎于Pascal，在发展过程里又杂糅了SQL和C++的怪物，最后几乎变成了满屏幕关键字。再加上缺乏文档，实在是一段不堪回首的记忆。 3月份开始，我又重新开始了一个python项目叫做jip，他兼容maven，可以与virtualenv和setuptools集成，帮助你解决jython项目的java依赖，简化jython项目的发布，提高工作效率。这个小工具倾注了我不少时间，如果你某一天要和jython打交道的话，可以试试看。 今年还尝试了coffeescript，它恰到好处地消除了javascript里一些ugly的部分，大大提高了编码速度。我用它改写了网站首页的js。 6月份我又重拾起1年前的javascript库heatcanvas，和lbt05协作完善了程序。通过HTML5的Web worker API改善了渲染canvas时的用户体验，增加了对Google Maps，OpenLayers,Baidu Map以及Leaflet的支持。这个项目的介绍被顶到hackernews的首页，这是一种前所未有的感觉。 7月份开始迎来了一个重大的转折。断断续续学习了一年半的clojure，终于开始写第一个库，reddit.clj，用clojure封装reddit网站的API。通过这个入口算是真正走进了clojure的世界，七月底reddit.clj基本完成之后我开始写他的第一个应用，rageviewer。这是个clojure的web项目，借着这个契机又接触了compojure和ring。而且写rageviewer的时候恰逢clojurescript公开，一不做二不休，于是这个项目就成了一个full stack的clojure项目：前后端都是clojure。最后rageviewer部署在当时刚刚开始邀请测试的cloudfoundry上。 8月参加了在上海的cn-clojure列表第一次聚会后，我开始用clojure克隆一个已有的并不复杂的程序，当时选择了beanstalkd，一个轻量级的task queue。这个项目取名为clojalk。最后它成功地支持了beanstalkd协议的所有命令，支持了通过Write-ahead log做持久化和恢复。这个项目用到了aleph，见识了一把clojure思维下的网络编程。 另外我还帮clojure-control写了一个leiningen的插件，现在这个插件已经合并到clojure-control项目里了。clojure能有这么快的发展，leiningen作为构建工具也有很大的帮助。就好比上半年做jip时，感受到jython的小世界里就没有一个好的方案来同时解决java和python的项目管理问题，而且人们也不重视这个问题。 年底还有一个clojure RPC框架的诞生，这个项目叫做slacker。项目还没有到总结的时候，我的org file列表上还有一长串的TODO。 总得来说，我觉得今年学习clojure的这个过程很有借鉴价值。对于一个新语言新平台新生态系统，如何入门并且getting real。你可以从一个功能简单的库开始，比如包装一个网站的API，或者（对于clojure来说），包装一个已有的java的库。在完成之后，利用这个库，写一个web应用，进而去了解这个平台上的web开发。再下一步，可以去克隆一个其他平台上的项目，规模不要太大。如此循序渐进，学习的效果很不错。另外，无论做了什么，只要是有用的，就应该说出来，这不仅是自我鼓励，有时候也能找到志同道合的朋友一起参与。 最后除了clojure之外，今年还接着gnome-shell的发布和更新，接触了gnome-shell的gjs扩展开发。又是一个不堪回首的平台，也许是还没有finalize吧，没有任何文档，而且一个平台上的库连变量拼写的风格都不一样！我是不会再浪费时间了，当然，以后的这个豆瓣电台的control还是会继续跟着gnome-shell的发布一直维护的。 除了上面提到的，今年还尝了一些groovy，common-lisp，甚至octave，不管怎么说都算是一个big year了。但愿明年能把这种状态保持下去，享受这种愉悦。<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sunng87.wordpress.com&amp;blog=7585375&amp;post=967&amp;subd=sunng87&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>成功人士是不写总结的，所以我来写个总结。</p>
<p>今年的coding从ABAP开始，这个很多人现在不知道以后也不用知道最好永远也不要知道的语言和他的平台，是一个脱胎于Pascal，在发展过程里又杂糅了SQL和C++的怪物，最后几乎变成了满屏幕关键字。再加上缺乏文档，实在是一段不堪回首的记忆。</p>
<p>3月份开始，我又重新开始了一个python项目叫做<a href="https://github.com/sunng87/jip" target="_blank">jip</a>，他兼容maven，可以与virtualenv和setuptools集成，帮助你解决jython项目的java依赖，简化jython项目的发布，提高工作效率。这个小工具倾注了我不少时间，如果你某一天要和jython打交道的话，可以试试看。</p>
<p>今年还尝试了coffeescript，它恰到好处地消除了javascript里一些ugly的部分，大大提高了编码速度。我用它改写了网站<a href="http://sunng.info/scripts/action.coffee" target="_blank">首页的js</a>。</p>
<p>6月份我又重拾起1年前的javascript库heatcanvas，和<a href="http://nihuajie.com/" target="_blank">lbt05</a>协作完善了程序。通过HTML5的Web worker API改善了渲染canvas时的用户体验，增加了对Google Maps，OpenLayers,Baidu Map以及Leaflet的支持。这个项目的介绍被顶到hackernews的首页，这是一种前所未有的感觉。</p>
<p>7月份开始迎来了一个重大的转折。断断续续学习了一年半的clojure，终于开始写第一个库，<a href="https://github.com/sunng87/reddit.clj" target="_blank">reddit.clj</a>，用clojure封装reddit网站的API。通过这个入口算是真正走进了clojure的世界，七月底reddit.clj基本完成之后我开始写他的第一个应用，<a href="https://github.com/sunng87/rageviewer" target="_blank">rageviewer</a>。这是个clojure的web项目，借着这个契机又接触了compojure和ring。而且写rageviewer的时候恰逢clojurescript公开，一不做二不休，于是这个项目就成了一个full stack的clojure项目：前后端都是clojure。最后rageviewer部署在当时刚刚开始邀请测试的cloudfoundry上。</p>
<p>8月参加了在上海的cn-clojure列表第一次聚会后，我开始用clojure克隆一个已有的并不复杂的程序，当时选择了beanstalkd，一个轻量级的task queue。这个项目取名为<a href="https://github.com/sunng87/clojalk" target="_blank">clojalk</a>。最后它成功地支持了beanstalkd协议的所有命令，支持了通过Write-ahead log做持久化和恢复。这个项目用到了aleph，见识了一把clojure思维下的网络编程。</p>
<p>另外我还帮clojure-control写了一个leiningen的插件，现在这个插件已经合并到clojure-control项目里了。clojure能有这么快的发展，leiningen作为构建工具也有很大的帮助。就好比上半年做jip时，感受到jython的小世界里就没有一个好的方案来同时解决java和python的项目管理问题，而且人们也不重视这个问题。</p>
<p>年底还有一个clojure RPC框架的诞生，这个项目叫做<a href="https://github.com/sunng87/slacker" target="_blank">slacker</a>。项目还没有到总结的时候，我的org file列表上还有一长串的TODO。</p>
<p>总得来说，我觉得今年学习clojure的这个过程很有借鉴价值。对于一个新语言新平台新生态系统，如何入门并且getting real。你可以从一个功能简单的库开始，比如包装一个网站的API，或者（对于clojure来说），包装一个已有的java的库。在完成之后，利用这个库，写一个web应用，进而去了解这个平台上的web开发。再下一步，可以去克隆一个其他平台上的项目，规模不要太大。如此循序渐进，学习的效果很不错。另外，无论做了什么，只要是有用的，就应该说出来，这不仅是自我鼓励，有时候也能找到志同道合的朋友一起参与。</p>
<p>最后除了clojure之外，今年还接着gnome-shell的发布和更新，接触了gnome-shell的gjs扩展开发。又是一个不堪回首的平台，也许是还没有finalize吧，没有任何文档，而且一个平台上的库连变量拼写的风格都不一样！我是不会再浪费时间了，当然，以后的这个<a href="https://extensions.gnome.org/extension/24/exaile-doubanfm-control/" target="_blank">豆瓣电台的control</a>还是会继续跟着gnome-shell的发布一直维护的。</p>
<p>除了上面提到的，今年还尝了一些groovy，common-lisp，甚至octave，不管怎么说都算是一个big year了。但愿明年能把这种状态保持下去，享受这种愉悦。</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/sunng87.wordpress.com/967/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/sunng87.wordpress.com/967/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/sunng87.wordpress.com/967/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/sunng87.wordpress.com/967/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/sunng87.wordpress.com/967/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/sunng87.wordpress.com/967/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/sunng87.wordpress.com/967/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/sunng87.wordpress.com/967/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/sunng87.wordpress.com/967/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/sunng87.wordpress.com/967/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/sunng87.wordpress.com/967/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/sunng87.wordpress.com/967/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/sunng87.wordpress.com/967/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/sunng87.wordpress.com/967/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sunng87.wordpress.com&amp;blog=7585375&amp;post=967&amp;subd=sunng87&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://sunng87.wordpress.com/2011/12/31/code-2011/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/2c05c29685aa4bfefc599fa0d3755549?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">sunng87</media:title>
		</media:content>
	</item>
		<item>
		<title>使用Enlive作为模板引擎</title>
		<link>http://sunng87.wordpress.com/2011/12/29/%e4%bd%bf%e7%94%a8enlive%e4%bd%9c%e4%b8%ba%e6%a8%a1%e6%9d%bf%e5%bc%95%e6%93%8e/</link>
		<comments>http://sunng87.wordpress.com/2011/12/29/%e4%bd%bf%e7%94%a8enlive%e4%bd%9c%e4%b8%ba%e6%a8%a1%e6%9d%bf%e5%bc%95%e6%93%8e/#comments</comments>
		<pubDate>Thu, 29 Dec 2011 13:22:12 +0000</pubDate>
		<dc:creator>Sunng</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://sunng87.wordpress.com/?p=965</guid>
		<description><![CDATA[在所有的clojure web开发例子里，对模板的介绍都很少。很多的简单例子都是以hiccup作为页面生成的手段。hiccup是个clojure的html DSL，例子里用这样的DSL生成页面确实很酷，可是他是real world吗，当然不是。 好在clojure世界里早就有了enlive，它不仅是一个通过css selector解析html的库，本身也可以作为模板引擎应用在web开发中。我不知道这种通过css selector的方式是否是enlive首创，不过他实在是非常新颖独特，而且平滑了页面设计和程序的集成。 例如这样一个模板 index.html： &#60;div id=&#34;cc&#34;&#62;Sample Text&#60;/div&#62; 在clojure程序中，使用enlive的deftemplate &#040;deftemplate index &#34;index.html&#34; &#160; &#091;ctx&#093; &#160; &#091;:div#cc&#093; &#040;content &#040;:data ctx&#041;&#041;&#041; 在控制器里，可以很MVC地渲染页面 &#040;index &#123;:data &#34;rendered text&#34;&#125;&#041; 除了content用于渲染文本，还有html-content可以渲染含html标签的内容，以及set-attr用来修改页面元素的属性。 和传统的模板引擎相比，最大的不同是enlive里没有嵌入模板的直观的控制流，没有循环和条件判断，但是并非不可实现。 循环输出一组list 页面 list.html &#60;ul id=&#34;the-list&#34;&#62; &#60;li class=&#34;list-item&#34;&#62;&#60;/li&#62; &#60;/ul&#62; 定义一个enlive的snippet &#040;defsnippet item-model &#34;page.html&#34; &#091;:.list-item&#093; &#160; &#091;ctx&#093; &#160; &#091;:.list-item&#093; &#040;content &#040;:data ctx&#041;&#041;&#041; 在页面模板里 &#040;deftemplate list-page &#34;list.html&#34; &#160; [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sunng87.wordpress.com&amp;blog=7585375&amp;post=965&amp;subd=sunng87&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>在所有的clojure web开发例子里，对模板的介绍都很少。很多的简单例子都是以hiccup作为页面生成的手段。hiccup是个clojure的html DSL，例子里用这样的DSL生成页面确实很酷，可是他是real world吗，当然不是。</p>
<p>好在clojure世界里早就有了enlive，它不仅是一个通过css selector解析html的库，本身也可以作为模板引擎应用在web开发中。我不知道这种通过css selector的方式是否是enlive首创，不过他实在是非常新颖独特，而且平滑了页面设计和程序的集成。</p>
<p>例如这样一个模板 index.html：</p>
<div class="codecolorer-container html4strict twitlight" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;">
<div class="html4strict codecolorer" style="font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;padding:5px;"><span style="color:#009900;">&lt;<a href="http://december.com/html/4/element/div.html"><span style="color:#000000;font-weight:bold;">div</span></a> <span style="color:#000066;">id</span><span style="color:#66cc66;">=</span><span style="color:#ff0000;">&quot;cc&quot;</span>&gt;</span>Sample Text<span style="color:#009900;">&lt;<span style="color:#66cc66;">/</span><a href="http://december.com/html/4/element/div.html"><span style="color:#000000;font-weight:bold;">div</span></a>&gt;</span></div>
</div>
<p>在clojure程序中，使用enlive的deftemplate</p>
<div class="codecolorer-container clojure twitlight" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;">
<div class="clojure codecolorer" style="font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;padding:5px;"><span style="color:#66cc66;">&#040;</span>deftemplate index <span style="color:#ff0000;">&quot;index.html&quot;</span><br />
&nbsp; <span style="color:#66cc66;">&#091;</span>ctx<span style="color:#66cc66;">&#093;</span><br />
&nbsp; <span style="color:#66cc66;">&#091;</span>:<span style="color:#555;">div</span>#cc<span style="color:#66cc66;">&#093;</span> <span style="color:#66cc66;">&#040;</span>content <span style="color:#66cc66;">&#040;</span>:<span style="color:#555;">data</span> ctx<span style="color:#66cc66;">&#041;</span><span style="color:#66cc66;">&#041;</span><span style="color:#66cc66;">&#041;</span></div>
</div>
<p>在控制器里，可以很MVC地渲染页面</p>
<div class="codecolorer-container clojure twitlight" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;">
<div class="clojure codecolorer" style="font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;padding:5px;"><span style="color:#66cc66;">&#040;</span>index <span style="color:#66cc66;">&#123;</span>:<span style="color:#555;">data</span> <span style="color:#ff0000;">&quot;rendered text&quot;</span><span style="color:#66cc66;">&#125;</span><span style="color:#66cc66;">&#041;</span></div>
</div>
<p>除了content用于渲染文本，还有html-content可以渲染含html标签的内容，以及set-attr用来修改页面元素的属性。</p>
<p>和传统的模板引擎相比，最大的不同是enlive里没有嵌入模板的直观的控制流，没有循环和条件判断，但是并非不可实现。</p>
<p>循环输出一组list</p>
<p>页面 list.html</p>
<div class="codecolorer-container html4strict twitlight" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;">
<div class="html4strict codecolorer" style="font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;padding:5px;"><span style="color:#009900;">&lt;<a href="http://december.com/html/4/element/ul.html"><span style="color:#000000;font-weight:bold;">ul</span></a> <span style="color:#000066;">id</span><span style="color:#66cc66;">=</span><span style="color:#ff0000;">&quot;the-list&quot;</span>&gt;</span><br />
<span style="color:#009900;">&lt;<a href="http://december.com/html/4/element/li.html"><span style="color:#000000;font-weight:bold;">li</span></a> <span style="color:#000066;">class</span><span style="color:#66cc66;">=</span><span style="color:#ff0000;">&quot;list-item&quot;</span>&gt;&lt;<span style="color:#66cc66;">/</span><a href="http://december.com/html/4/element/li.html"><span style="color:#000000;font-weight:bold;">li</span></a>&gt;</span><br />
<span style="color:#009900;">&lt;<span style="color:#66cc66;">/</span><a href="http://december.com/html/4/element/ul.html"><span style="color:#000000;font-weight:bold;">ul</span></a>&gt;</span></div>
</div>
<p>定义一个enlive的snippet</p>
<div class="codecolorer-container clojure twitlight" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;">
<div class="clojure codecolorer" style="font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;padding:5px;"><span style="color:#66cc66;">&#040;</span>defsnippet item<span style="color:#66cc66;">-</span>model <span style="color:#ff0000;">&quot;page.html&quot;</span> <span style="color:#66cc66;">&#091;</span>:<span style="color:#66cc66;">.</span>list<span style="color:#66cc66;">-</span>item<span style="color:#66cc66;">&#093;</span><br />
&nbsp; <span style="color:#66cc66;">&#091;</span>ctx<span style="color:#66cc66;">&#093;</span><br />
&nbsp; <span style="color:#66cc66;">&#091;</span>:<span style="color:#66cc66;">.</span>list<span style="color:#66cc66;">-</span>item<span style="color:#66cc66;">&#093;</span> <span style="color:#66cc66;">&#040;</span>content <span style="color:#66cc66;">&#040;</span>:<span style="color:#555;">data</span> ctx<span style="color:#66cc66;">&#041;</span><span style="color:#66cc66;">&#041;</span><span style="color:#66cc66;">&#041;</span></div>
</div>
<p>在页面模板里</p>
<div class="codecolorer-container clojure twitlight" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;">
<div class="clojure codecolorer" style="font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;padding:5px;"><span style="color:#66cc66;">&#040;</span>deftemplate list<span style="color:#66cc66;">-</span>page <span style="color:#ff0000;">&quot;list.html&quot;</span><br />
&nbsp; <span style="color:#66cc66;">&#091;</span>ctx<span style="color:#66cc66;">&#093;</span><br />
&nbsp; <span style="color:#66cc66;">&#091;</span>:<span style="color:#555;">ul</span>#the<span style="color:#66cc66;">-</span>list<span style="color:#66cc66;">&#093;</span> <span style="color:#66cc66;">&#040;</span>content <span style="color:#66cc66;">&#040;</span><span style="color:#b1b100;">map</span> item<span style="color:#66cc66;">-</span>model <span style="color:#66cc66;">&#040;</span>:<span style="color:#555;">some</span><span style="color:#66cc66;">-</span>list ctx<span style="color:#66cc66;">&#041;</span><span style="color:#66cc66;">&#041;</span><span style="color:#66cc66;">&#041;</span><span style="color:#66cc66;">&#041;</span></div>
</div>
<p>这样在页面里列表项会被循环输出，而在页面设计时这里可以放任意个li，并且直接交给后台作为模板。</p>
<p>条件判断</p>
<p>页面，设计时显示所有的内容 msg.html</p>
<div class="codecolorer-container html4strict twitlight" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;">
<div class="html4strict codecolorer" style="font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;padding:5px;"><span style="color:#009900;">&lt;<a href="http://december.com/html/4/element/span.html"><span style="color:#000000;font-weight:bold;">span</span></a> <span style="color:#000066;">id</span><span style="color:#66cc66;">=</span><span style="color:#ff0000;">&quot;msg&quot;</span>&gt;</span>只在一定条件下显示<span style="color:#009900;">&lt;<span style="color:#66cc66;">/</span><a href="http://december.com/html/4/element/span.html"><span style="color:#000000;font-weight:bold;">span</span></a>&gt;</span></div>
</div>
<p>在模板中通过clojure的if进行判断</p>
<div class="codecolorer-container clojure twitlight" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;">
<div class="clojure codecolorer" style="font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap;padding:5px;"><span style="color:#66cc66;">&#040;</span>deftemplate msg <span style="color:#ff0000;">&quot;msg.html&quot;</span><br />
&nbsp; <span style="color:#66cc66;">&#091;</span>ctx<span style="color:#66cc66;">&#093;</span><br />
&nbsp; <span style="color:#66cc66;">&#091;</span>:<span style="color:#555;">span</span>#msg<span style="color:#66cc66;">&#093;</span> <span style="color:#66cc66;">&#040;</span><span style="color:#b1b100;">if</span> <span style="color:#66cc66;">&#040;</span>:<span style="color:#555;">show</span> ctx<span style="color:#66cc66;">&#041;</span> identity <span style="color:#66cc66;">&#040;</span>html<span style="color:#66cc66;">-</span>content <span style="color:#ff0000;">&quot;&quot;</span><span style="color:#66cc66;">&#041;</span><span style="color:#66cc66;">&#041;</span><span style="color:#66cc66;">&#041;</span></div>
</div>
<p>解决了这两个问题，基本上用enlive作为模板引擎就没有障碍了。不过enlive也有一点小问题，其一可能是性能的问题，方便的selector显然要比传统的模板语言消耗更多的CPU。另外，在开发过程里，页面文件在服务器启动后不能热加载，修改页面必须重启ring才能看到。也许有时间的话，可以给它加一个reload选项。</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/sunng87.wordpress.com/965/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/sunng87.wordpress.com/965/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/sunng87.wordpress.com/965/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/sunng87.wordpress.com/965/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/sunng87.wordpress.com/965/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/sunng87.wordpress.com/965/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/sunng87.wordpress.com/965/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/sunng87.wordpress.com/965/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/sunng87.wordpress.com/965/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/sunng87.wordpress.com/965/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/sunng87.wordpress.com/965/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/sunng87.wordpress.com/965/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/sunng87.wordpress.com/965/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/sunng87.wordpress.com/965/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sunng87.wordpress.com&amp;blog=7585375&amp;post=965&amp;subd=sunng87&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://sunng87.wordpress.com/2011/12/29/%e4%bd%bf%e7%94%a8enlive%e4%bd%9c%e4%b8%ba%e6%a8%a1%e6%9d%bf%e5%bc%95%e6%93%8e/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/2c05c29685aa4bfefc599fa0d3755549?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">sunng87</media:title>
		</media:content>
	</item>
		<item>
		<title>Roar for mootools 1.4</title>
		<link>http://sunng87.wordpress.com/2011/12/24/roar-for-mootools-1-4/</link>
		<comments>http://sunng87.wordpress.com/2011/12/24/roar-for-mootools-1-4/#comments</comments>
		<pubDate>Sat, 24 Dec 2011 15:22:34 +0000</pubDate>
		<dc:creator>Sunng</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://sunng87.wordpress.com/?p=963</guid>
		<description><![CDATA[早在天下大势还处在分久必合的时候，那时候mootools还有不少简单实用的小库，比如我今天搜索&#8221;mootools notification&#8221;就找到这个08年的库叫做Roar。不过遗憾的是从那以后，这个库就再也没有更新过了。 Mootools本身也沉寂了很久，这个项目恐怕也要思考自己未来的发展方向了。今年9月Mootools迈进了1.4，API上有一些变化。现在的下载页也能看到with/without backward compatibility的版本分开下载。为了用上Roar，我尝试了这两个版本发现都不能使用。最后downgrade到1.2可以确定Roar本身在当时是没有什么问题。 这么多年对mootools痴心不改，所以顺手维护了一下Roar，现在可以在1.4 without compatibility的发布下运行了。主要是几个小修改，大多是一些多年deprecated函数被正式删除： Type常量，原先的String.type，Object.type现在统一到一个Type对象下，变成Type.isString和Type.isObject $empty 常量被删除了，现在直接用function()或Function.from()代替 $pick 方法被Array.pick取代，参数现在也必须接受数组类型了 $merge 方法被Object.merge取代 $type 被typeOf取代 函数对象的create方法被删除了，现在可以用函数对象的bind方法替代 Browser.Engine 被删除了，需要用其他Browser的API替代 修改后的Roar，放在这个gist里，测试过可以在firefox和chromium上健康使用。IE没有做测试。这个08年的库，眼看四年过去了，用起来依然不错。 作为mootools的铁杆，我还是会一直专一地坚守下去的。（于是，我也已经变成了多年前那些我眼中为旧事物顽抗到底的老家伙了）<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sunng87.wordpress.com&amp;blog=7585375&amp;post=963&amp;subd=sunng87&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>早在天下大势还处在分久必合的时候，那时候mootools还有不少简单实用的小库，比如我今天搜索&#8221;mootools notification&#8221;就找到这个08年的库叫做<a href="http://digitarald.de/project/roar/" target="_blank">Roar</a>。不过遗憾的是从那以后，这个库就再也没有更新过了。</p>
<p>Mootools本身也沉寂了很久，这个项目恐怕也要思考自己未来的发展方向了。今年9月Mootools迈进了1.4，API上有一些变化。现在的下载页也能看到with/without backward compatibility的版本分开下载。为了用上Roar，我尝试了这两个版本发现都不能使用。最后downgrade到1.2可以确定Roar本身在当时是没有什么问题。</p>
<p>这么多年对mootools痴心不改，所以顺手维护了一下Roar，现在可以在1.4 without compatibility的发布下运行了。主要是几个小修改，大多是一些多年deprecated函数被正式删除：</p>
<ul>
<li>Type常量，原先的String.type，Object.type现在统一到一个Type对象下，变成Type.isString和Type.isObject</li>
<li>$empty 常量被删除了，现在直接用function()或Function.from()代替</li>
<li>$pick 方法被Array.pick取代，参数现在也必须接受数组类型了</li>
<li>$merge 方法被Object.merge取代</li>
<li>$type 被typeOf取代</li>
<li>函数对象的create方法被删除了，现在可以用函数对象的bind方法替代</li>
<li>Browser.Engine 被删除了，需要用其他Browser的API替代</li>
</ul>
<p>修改后的Roar，放在<a href="https://gist.github.com/1516568" target="_blank">这个gist</a>里，测试过可以在firefox和chromium上健康使用。IE没有做测试。这个08年的库，眼看四年过去了，用起来依然不错。</p>
<p>作为mootools的铁杆，我还是会一直专一地坚守下去的。（于是，我也已经变成了多年前那些我眼中为旧事物顽抗到底的老家伙了）</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/sunng87.wordpress.com/963/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/sunng87.wordpress.com/963/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/sunng87.wordpress.com/963/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/sunng87.wordpress.com/963/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/sunng87.wordpress.com/963/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/sunng87.wordpress.com/963/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/sunng87.wordpress.com/963/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/sunng87.wordpress.com/963/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/sunng87.wordpress.com/963/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/sunng87.wordpress.com/963/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/sunng87.wordpress.com/963/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/sunng87.wordpress.com/963/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/sunng87.wordpress.com/963/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/sunng87.wordpress.com/963/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sunng87.wordpress.com&amp;blog=7585375&amp;post=963&amp;subd=sunng87&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://sunng87.wordpress.com/2011/12/24/roar-for-mootools-1-4/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/2c05c29685aa4bfefc599fa0d3755549?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">sunng87</media:title>
		</media:content>
	</item>
		<item>
		<title>TF101 101</title>
		<link>http://sunng87.wordpress.com/2011/12/22/tf101-101/</link>
		<comments>http://sunng87.wordpress.com/2011/12/22/tf101-101/#comments</comments>
		<pubDate>Thu, 22 Dec 2011 15:52:36 +0000</pubDate>
		<dc:creator>Sunng</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://sunng87.wordpress.com/?p=961</guid>
		<description><![CDATA[上周末决定不再忍耐，又入了一个大件：华硕的平板，变形金刚。TF101上市已经半年了，而且现在TF102号称四核的版本已经开始接受预订了，所以差不多也到了应该出手的时候了。因为我知道如果去等102的话，我还会像现在这样地去和103做比较。 选择这款的主要原因即他的键盘配置，平板加键盘的组合彻底把上网本推进深渊。对于我这种还算是制造内容比率比较高的人来说，有个强有力的输入设备是必要的。目前市面上有这种搭配的只有transformer和think的，而且think似乎又只有配图和说明，没见真正卖那款键盘的。更严重的是，当然，think太贵了。 接下来开始说问题： 第一关叫做充电。TF101在充电方面有严重的缺陷。当电池电量极低时，会出现无法充电的情况。明明接着电源，可是电量提示一直是0%。如此情况下我整整充了一天拔下电源依然无法开机。最后看了网上的说法，在充电自动开机后关机了半个小时终于起死回生。 第二个小问题，键盘底座的平板本身电源是分离的，二者各自充电。所以在前面〝整整充了一天〞之前还有整整充了一晚上键盘。早晨起来键盘电满了，平板没充进去。 系统出厂是Android 3.0，这个系统的伟大之处在于从他一启动开始，就开始不断有程序报出错退出，不断有应用停止响应。他简直都对不起这个版本号。直到后来充上电升级到3.2之后才可以用。但是，还是有浏览器突然僵死然后突然从眼前消失的场面。再有就是机捆绑的什么人人网，电子书，开心网什么的，让你想不root都不行。 再有andrid 3.x上应用可能本来就不多，随机捆的又是一个流氓市场，除了满眼的流氓软件和山寨以外，就是版已经过时的软件。可怜这挺好一机器都不知道该装点什么。要说TF101硬件已经很可以了，只是配上这么个系统，用范伟的话说，白瞎你这个人了。手放键盘上，真恨不得能打开个终端来挡住这个浅薄的外观。等有时间我一定要尝试在这台机器上装个正经系统。也算是对得起这硬件了。 一句话概括一下的话，硬件还好，软件拉倒。<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sunng87.wordpress.com&amp;blog=7585375&amp;post=961&amp;subd=sunng87&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>上周末决定不再忍耐，又入了一个大件：华硕的平板，变形金刚。TF101上市已经半年了，而且现在TF102号称四核的版本已经开始接受预订了，所以差不多也到了应该出手的时候了。因为我知道如果去等102的话，我还会像现在这样地去和103做比较。</p>
<p>选择这款的主要原因即他的键盘配置，平板加键盘的组合彻底把上网本推进深渊。对于我这种还算是制造内容比率比较高的人来说，有个强有力的输入设备是必要的。目前市面上有这种搭配的只有transformer和think的，而且think似乎又只有配图和说明，没见真正卖那款键盘的。更严重的是，当然，think太贵了。</p>
<p>接下来开始说问题：<br />
第一关叫做充电。TF101在充电方面有严重的缺陷。当电池电量极低时，会出现无法充电的情况。明明接着电源，可是电量提示一直是0%。如此情况下我整整充了一天拔下电源依然无法开机。最后看了网上的说法，在充电自动开机后关机了半个小时终于起死回生。</p>
<p>第二个小问题，键盘底座的平板本身电源是分离的，二者各自充电。所以在前面〝整整充了一天〞之前还有整整充了一晚上键盘。早晨起来键盘电满了，平板没充进去。</p>
<p>系统出厂是Android 3.0，这个系统的伟大之处在于从他一启动开始，就开始不断有程序报出错退出，不断有应用停止响应。他简直都对不起这个版本号。直到后来充上电升级到3.2之后才可以用。但是，还是有浏览器突然僵死然后突然从眼前消失的场面。再有就是机捆绑的什么人人网，电子书，开心网什么的，让你想不root都不行。</p>
<p>再有andrid 3.x上应用可能本来就不多，随机捆的又是一个流氓市场，除了满眼的流氓软件和山寨以外，就是版已经过时的软件。可怜这挺好一机器都不知道该装点什么。要说TF101硬件已经很可以了，只是配上这么个系统，用范伟的话说，白瞎你这个人了。手放键盘上，真恨不得能打开个终端来挡住这个浅薄的外观。等有时间我一定要尝试在这台机器上装个正经系统。也算是对得起这硬件了。</p>
<p>一句话概括一下的话，硬件还好，软件拉倒。</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/sunng87.wordpress.com/961/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/sunng87.wordpress.com/961/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/sunng87.wordpress.com/961/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/sunng87.wordpress.com/961/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/sunng87.wordpress.com/961/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/sunng87.wordpress.com/961/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/sunng87.wordpress.com/961/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/sunng87.wordpress.com/961/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/sunng87.wordpress.com/961/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/sunng87.wordpress.com/961/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/sunng87.wordpress.com/961/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/sunng87.wordpress.com/961/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/sunng87.wordpress.com/961/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/sunng87.wordpress.com/961/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sunng87.wordpress.com&amp;blog=7585375&amp;post=961&amp;subd=sunng87&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://sunng87.wordpress.com/2011/12/22/tf101-101/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/2c05c29685aa4bfefc599fa0d3755549?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">sunng87</media:title>
		</media:content>
	</item>
	</channel>
</rss>
