<?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:creativeCommons="http://backend.userland.com/creativeCommonsRssModule">

<channel>
	<title>Yining.write() &#187; Yining</title>
	<atom:link href="http://www.yining.org/author/yining/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.yining.org</link>
	<description>public virtual stream Yining.write()</description>
	<lastBuildDate>Fri, 04 Jun 2010 12:01:50 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/3.0/</creativeCommons:license>		<item>
		<title>记一次结对编程</title>
		<link>http://www.yining.org/2010/06/04/today-on-pair-coding-on-applesoft-basic/</link>
		<comments>http://www.yining.org/2010/06/04/today-on-pair-coding-on-applesoft-basic/#comments</comments>
		<pubDate>Fri, 04 Jun 2010 11:54:05 +0000</pubDate>
		<dc:creator>Yining</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[Geek]]></category>

		<guid isPermaLink="false">http://www.yining.org/?p=409</guid>
		<description><![CDATA[几天前尔宁找到VirtualII这个软件，凌晨两人聊天回忆过去，觉得该玩点什么，在模拟机上显示几个大字符应该不错，还有意义，于是开始动手。
一开始最直接的想法就是直接在低分辨率模式下用HLIN, VLIN画线条，我标记出各个点线坐标，尔宁在虚拟机上输入代码（那虚拟机还能模拟软盘的读写声音，太亲切太好玩了！），类似：

10 HLIN 1, 3, AT 2 : VLIN 2, 3 AT 1
20 HLIN 2, 3, AT 3 : VLIN 4, 6 AT 5

嗯，看来我们还没有忘记太多。
遇到第一个问题，这么写代码很繁琐，容易出错，发现出错后还不容易修改，而且不容易修改摆放的位置（比如居中，一个字符的点阵是6&#215;8，不是8&#215;8，屏幕是40&#215;24，不是40+24 ;-) ）
为解决移动和居中，可以引入两个代表屏幕位移的变量，比如：

10 HLIN 1 + X, 3 + X, AT 2 + Y : VLIN 2 + Y, 3 + Y AT 1 + X
20 HLIN 2 + X, 3 + [...]]]></description>
			<content:encoded><![CDATA[<p>几天前尔宁找到VirtualII这个软件，凌晨两人聊天回忆过去，觉得该玩点什么，在模拟机上显示几个大字符应该不错，还有意义，于是开始动手。</p>
<p>一开始最直接的想法就是直接在低分辨率模式下用HLIN, VLIN画线条，我标记出各个点线坐标，尔宁在虚拟机上输入代码（那虚拟机还能模拟软盘的读写声音，太亲切太好玩了！），类似：</p>
<pre class="prettyprint">
10 HLIN 1, 3, AT 2 : VLIN 2, 3 AT 1
20 HLIN 2, 3, AT 3 : VLIN 4, 6 AT 5
</pre>
<p>嗯，看来我们还没有忘记太多。</p>
<p>遇到第一个问题，这么写代码很繁琐，容易出错，发现出错后还不容易修改，而且不容易修改摆放的位置（比如居中，一个字符的点阵是6&#215;8，不是8&#215;8，屏幕是40&#215;24，不是40+24 ;-) ）</p>
<p>为解决移动和居中，可以引入两个代表屏幕位移的变量，比如：</p>
<pre class="prettyprint">
10 HLIN 1 + X, 3 + X, AT 2 + Y : VLIN 2 + Y, 3 + Y AT 1 + X
20 HLIN 2 + X, 3 + X, AT 3 + Y : VLIN 4 + Y, 6 + Y AT 5 + X
</pre>
<p>不爽的是这样不仅代码不好看，而且做不到最后只用一行代码实现（那时候我们都互相比在一行代码中用更少的字符数）。</p>
<p>于是就想到不妨用代码来生成代码，上面提到的问题都容易解决。</p>
<p>我们同意这个思路可行，做法：</p>
<p>1 把画字符的线段方向和坐标用数组表示，每个字符是由多个笔画数组的数组，四个字符就有四个数组;<br />
2 循环这四个数组，再循环它的笔画数组，生成画图语句的字符串，输出;</p>
<p>这样生成代码的程语言选择就多了，更好的是这样就可以用自己习惯的开发环境，不需要直接在那个模拟机下写。我们选择了PHP，简单，够快。</p>
<p>这时候，轮到我写代码，尔宁在旁观察，提醒拼写错误，偶尔讨论一下。</p>
<p>每次修改了PHP代码，就运行一次，把输出的代码放到<a href="http://www.calormen.com/applesoft/">一个用javascript实现的Applesoft BASIC解析器</a>里运行看结果。</p>
<p>结果在<a href="http://erning.net/archives/applesoft-basic-code-sample">尔宁的blog</a>上可以看到，还有最终<a href="http://www.flickr.com/photos/zendragon/4666724359/">运行结果的截屏</a>。</p>
<p>回顾</p>
<p>这居然是我们兄弟俩第一次的结对编程 :D</p>
<p>再次证明:</p>
<p>0 结对编程可以很好玩，能够很快进入并保持状态;</p>
<p>1 好的测试环境和工具很重要（那个javascript BASIC 解析器省了我们很多时间）;</p>
<p>2 尽量不在受限的部署环境下开发;</p>
<p>3 写程序是为了解决问题;</p>
<p>4 如果写程序中遇到了问题，可以再写程序来解决写那个程序解决问题时遇到的问题。GOTO 3;</p>
<p>5 不要忘记 GOTO</p>
<p>两人用一台i5 CPU, 4G内存的笔记本和一台1.6GHz CPU，2G内存笔记本（跑VirutalII），来实现一个在48K，40&#215;24, 16色显示器的代码&#8230;&#8230; 够搞的，好玩 :D</p>
<p>好吧，可以说我们兄弟俩今天是够Nerd的，但肯定不是Nervous的 ;-)</p>
<p>P.S. 如果一定要看的话，PHP代码在<a href="http://www.yining.org/20100604-php-code-snippet/">这里</a>。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.yining.org/2010/06/04/today-on-pair-coding-on-applesoft-basic/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Meet the Brothers</title>
		<link>http://www.yining.org/2010/05/30/meet-the-brothers/</link>
		<comments>http://www.yining.org/2010/05/30/meet-the-brothers/#comments</comments>
		<pubDate>Sun, 30 May 2010 11:42:24 +0000</pubDate>
		<dc:creator>Yining</dc:creator>
				<category><![CDATA[Geek]]></category>
		<category><![CDATA[brothers]]></category>
		<category><![CDATA[mac]]></category>
		<category><![CDATA[macbook-pro]]></category>
		<category><![CDATA[mackbookpro]]></category>
		<category><![CDATA[mbp]]></category>
		<category><![CDATA[兄弟]]></category>
		<category><![CDATA[苹果]]></category>

		<guid isPermaLink="false">http://www.yining.org/?p=400</guid>
		<description><![CDATA[
:) :)
more, and the most interesting one ;)
]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.flickr.com/photos/zendragon/4651677601/" title="Brothers by Zhang Erning, on Flickr"><img src="http://farm5.static.flickr.com/4057/4651677601_fcc3840426.jpg" width="500" height="375" alt="Brothers" /></a></p>
<p>:) :)</p>
<p><a href="http://www.flickr.com/search/?w=94315637%40N00&#038;q=apple+desktop&#038;m=tags">more</a>, and <a href="http://www.flickr.com/photos/zendragon/4651701833/">the most interesting one</a> ;)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.yining.org/2010/05/30/meet-the-brothers/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>进iPad的理由+1</title>
		<link>http://www.yining.org/2010/05/19/get-ipad-reason-plus-one/</link>
		<comments>http://www.yining.org/2010/05/19/get-ipad-reason-plus-one/#comments</comments>
		<pubDate>Tue, 18 May 2010 18:49:05 +0000</pubDate>
		<dc:creator>Yining</dc:creator>
				<category><![CDATA[Gadgets]]></category>
		<category><![CDATA[Life]]></category>
		<category><![CDATA[drawing]]></category>
		<category><![CDATA[ipad]]></category>
		<category><![CDATA[sketch]]></category>

		<guid isPermaLink="false">http://www.yining.org/?p=391</guid>
		<description><![CDATA[买一台iPad的理由可以有很多，但不同的人等都会有不同的理由；对其他人，不买或者继续观望的理由也同样可以有很多；至于我自己买iPad的理由，今天又多了一个。
下午在玩@tbcat的iPad上看到LiveSketch HD，随手试了一下，就喜欢上了。很久没动手画画了，在iPad的触摸屏上还不习惯，有些局促，也没有曾经用铅笔和画纸的手感和质感，但整体的感觉还是很棒的，可以说有小惊喜。类似这样非常简单的软件（还有更强大的SketchBook Pro，还没时间认真尝试），就已经能促发起我重新开始画画的欲望，足以成为新的一个拥有自己的iPad的理由 :)
速描1(茶具):

速描2:

(能看出那个递归么，虽然没画好 :P) 
]]></description>
			<content:encoded><![CDATA[<p>买一台iPad的理由可以有很多，但不同的人等都会有不同的理由；对其他人，不买或者继续观望的理由也同样可以有很多；至于我自己买iPad的理由，今天又多了一个。</p>
<p>下午在玩<a href="http://twitter.com/tbcat">@tbcat</a>的iPad上看到LiveSketch HD，随手试了一下，就喜欢上了。很久没动手画画了，在iPad的触摸屏上还不习惯，有些局促，也没有曾经用铅笔和画纸的手感和质感，但整体的感觉还是很棒的，可以说有小惊喜。类似这样非常简单的软件（还有更强大的SketchBook Pro，还没时间认真尝试），就已经能促发起我重新开始画画的欲望，足以成为新的一个拥有自己的iPad的理由 :)</p>
<p>速描1(茶具):</p>
<p><a href="http://www.flickr.com/photos/yining/4617838499/" title="ipad 速描 - 茶具 by ZhangYining, on Flickr"><img src="http://farm5.static.flickr.com/4050/4617838499_3eb67c73a0.jpg" width="375" height="500" alt="ipad 速描 - 茶具" /></a></p>
<p>速描2:<br />
<a href="http://www.flickr.com/photos/yining/4617838381/" title="ipad 速描 - 速描 by ZhangYining, on Flickr"><img src="http://farm5.static.flickr.com/4028/4617838381_719e9f96c7.jpg" width="375" height="500" alt="ipad 速描 - 速描" /></a></p>
<p>(能看出那个递归么，虽然没画好 :P) </p>
]]></content:encoded>
			<wfw:commentRss>http://www.yining.org/2010/05/19/get-ipad-reason-plus-one/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Code Swarm</title>
		<link>http://www.yining.org/2010/05/12/codeswarm/</link>
		<comments>http://www.yining.org/2010/05/12/codeswarm/#comments</comments>
		<pubDate>Tue, 11 May 2010 16:34:34 +0000</pubDate>
		<dc:creator>Yining</dc:creator>
				<category><![CDATA[Geek]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[codeswarm]]></category>
		<category><![CDATA[code_swarm]]></category>
		<category><![CDATA[infographics]]></category>
		<category><![CDATA[scm]]></category>
		<category><![CDATA[visualization]]></category>

		<guid isPermaLink="false">http://www.yining.org/?p=380</guid>
		<description><![CDATA[codeswarm 是个很有意思的工具，它把一个软件开发项目中开发者往代码管理工具(git/hg/svn等)提交代码的历史记录用视频的方式表现出来。
这是我把之前在做的一个项目的svn log 做成的codeswarm演示:

稍微注意就能看出，项目初期过了一段时间commit才开始活跃起来，code base比较小，代码也比较集中，后来虽然项目比较赶，但在公共假期（十一元旦春节）内，没有或者几乎没有代码提交。
这个视频在两个月前一次员工培训的PPT里演示过，发现从一个有趣、动态的角度来观察自己的工作让工程师们在感到非常新奇之外，能有效激发他们频繁提交代码的动力（使用中心化的scm如svn时，工程师们不是那么积极提交，即使口头上说过好几次）。建议不妨给项目写个脚本定期制作和发布codeswarm的视频，让工程师们主动频繁提交代码的效果也许比任何考核要好。
虽然直接运行codeswarm就能得好很不错的效果，它还提供了灵活的配置选项，比如我这个codeswarm里就添加了legend,并且自定义了不同文件类型所对应的颜色。
除了scm的提交历史外，codeswarm目前已经mediawiki的更新记录，维基百科的志愿者不妨试试，也许能从一个新的角度去了解和介绍维基百科。
另外提一下，随着web的发展，越来越多的数据被产生，因此数据分析的要求也必然会越来越多，而用图形来展示不同数据之间的关系（即data visualization, infographics）也会越来越重要。这又要提一下processing这个很适合制作infographics的语言，codeswarm就是用了processing的。

Code_swarm的主页
google code上的项目代码，wiki上有制作视频的步骤的详细介绍，在这就不写了。

]]></description>
			<content:encoded><![CDATA[<p>codeswarm 是个很有意思的工具，它把一个软件开发项目中开发者往代码管理工具(git/hg/svn等)提交代码的历史记录用视频的方式表现出来。</p>
<p>这是我把之前在做的一个项目的svn log 做成的codeswarm演示:</p>
<p><object type="application/x-shockwave-flash" width="400" height="300" data="http://www.flickr.com/apps/video/stewart.swf?v=71377" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"><param name="flashvars" value="intl_lang=en-us&#038;photo_secret=87c52cd96a&#038;photo_id=4434166299"></param><param name="movie" value="http://www.flickr.com/apps/video/stewart.swf?v=71377"></param><param name="bgcolor" value="#000000"></param><param name="allowFullScreen" value="true"></param><embed type="application/x-shockwave-flash" src="http://www.flickr.com/apps/video/stewart.swf?v=71377" bgcolor="#000000" allowfullscreen="true" flashvars="intl_lang=en-us&#038;photo_secret=87c52cd96a&#038;photo_id=4434166299" height="300" width="400"></embed></object></p>
<p>稍微注意就能看出，项目初期过了一段时间commit才开始活跃起来，code base比较小，代码也比较集中，后来虽然项目比较赶，但在公共假期（十一元旦春节）内，没有或者几乎没有代码提交。</p>
<p>这个视频在两个月前一次员工培训的PPT里演示过，发现从一个有趣、动态的角度来观察自己的工作让工程师们在感到非常新奇之外，能有效激发他们频繁提交代码的动力（使用中心化的scm如svn时，工程师们不是那么积极提交，即使口头上说过好几次）。建议不妨给项目写个脚本定期制作和发布codeswarm的视频，让工程师们主动频繁提交代码的效果也许比任何考核要好。</p>
<p>虽然直接运行codeswarm就能得好很不错的效果，它还提供了灵活的配置选项，比如我这个codeswarm里就添加了legend,并且自定义了不同文件类型所对应的颜色。</p>
<p>除了scm的提交历史外，codeswarm目前已经mediawiki的更新记录，维基百科的志愿者不妨试试，也许能从一个新的角度去了解和介绍维基百科。</p>
<p>另外提一下，随着web的发展，越来越多的数据被产生，因此数据分析的要求也必然会越来越多，而用图形来展示不同数据之间的关系（即data visualization, infographics）也会越来越重要。这又要提一下<a href="http://processing.org/">processing</a>这个很适合制作infographics的语言，codeswarm就是用了processing的。</p>
<ul>
<li><a href="http://vis.cs.ucdavis.edu/~ogawa/codeswarm/">Code_swarm的主页</a></li>
<li><a href="http://code.google.com/p/codeswarm/">google code上的项目代码</a>，wiki上有制作视频的步骤的详细介绍，在这就不写了。</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.yining.org/2010/05/12/codeswarm/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>从HTTP GET和POST的区别说起</title>
		<link>http://www.yining.org/2010/05/04/http-get-vs-post-and-thoughts/</link>
		<comments>http://www.yining.org/2010/05/04/http-get-vs-post-and-thoughts/#comments</comments>
		<pubDate>Tue, 04 May 2010 11:05:41 +0000</pubDate>
		<dc:creator>Yining</dc:creator>
				<category><![CDATA[Random Thoughts]]></category>
		<category><![CDATA[WebDev]]></category>
		<category><![CDATA[learning]]></category>
		<category><![CDATA[学习]]></category>

		<guid isPermaLink="false">http://www.yining.org/?p=371</guid>
		<description><![CDATA[在推特上抱怨面试时问HTTP GETE和POST的区别得到回答都不满意，有人不清楚，当时只回复了看 RFC2616。趁有空说说
面试时得到的回答大多是：POST是安全的，因为被提交的数据看不到，或者被加密的，其它的还有GET的时候中文出现乱码（在地址栏里），数据最大长度限制等等。
说 POST 比 GET 安全肯定是错的，POST跟GET都是明文传输，用httpfox等插件，或者像WireShark 等类似工具就能观察到。
POST和GET的差别其实是很大的。语义上，GET是获取指定URL上的资源，是读操作，重要的一点是不论对某个资源GET多少次，它的状态是不会改变的，在这个意义上，我们说GET是安全的（不是被密码学或者数据保护意义上的安全）。因为GET是安全的，所以GET返回的内容可以被浏览器，Cache服务器缓存起来（其中还有很多细节，但不影响这里的讨论）。
而POST的语意是对指定资源“追加/添加”数据，所以是不安全的，每次提交的POST，参与的代码都会认为这个操作会修改操作对象资源的状态，于是，浏览器在你按下F5的时候会跳出确认框，缓存服务器不会缓存POST请求返回内容。
很遗憾到目前为止没有应聘者能够提到这一点。我猜测这背后的原因大概有两个，一是也许大多数人往往（我也一样）满足于只要完成任务就好，不管用哪个，表单提交了，数据处理了，内容显示或者重新定向到另外一个页面，就算完成了一个任务，从任务表里划掉，结束。而且对大部分项目(OA, CRM, MIS)的大部分情况下，用哪个似乎都可以。
同时，在被商业机构在媒体和书籍上宣传兜售的WS-*概念和使用集成开发环境提供的“方便”的代码生成工具后，“了解”到所有Web服务调用都是通过POST，更潜意识里确定了POST和GET是一样的，而且GET能做的，POST都能做，POST简直就是GET++嘛。自然，能用POST就用POST，不必在乎两者的差别了。
这又让我想起最近学到的一个概念: Radius Of Comprehension，理解的半径:
当学习概念A的时候，需要先了解概念B，而概念C又是理解B的前提。当B和C都是新的需要学习的概念时，可以说A的理解半径是2，如图:

A --> B --> C
&#124;--1--&#124;--2--&#124;

在学习Web开发时，接触到GET和POST时，“理解的半径”可能包涵:

POST vs. GET
     &#124;---> Conditional GET -> ETag -> Cache
     &#124;         `--> Status Code
     `---> HTTP的方法 --> URL

往往因为仅仅满足于完成手上被要求的任务，或者懒于问一个为什么，我们就把自己的理解半径设置成零，那么就学不到更深入的东西，也因此仅仅知道POST和GET不同，而不再会了解不同在哪里，什么是Conditional GET和缓存header等概念。
从一个简单的面试问题谈到这，貌似小题大作了，写到哪算哪吧。 [...]]]></description>
			<content:encoded><![CDATA[<p>在推特上<a href="http://twitter.com/yining/status/12993863581">抱怨面试时问HTTP GETE和POST的区别得到回答都不满意</a>，有人不清楚，当时只回复了看 RFC2616。趁有空说说</p>
<p>面试时得到的回答大多是：POST是安全的，因为被提交的数据看不到，或者被加密的，其它的还有GET的时候中文出现乱码（在地址栏里），数据最大长度限制等等。</p>
<p>说 POST 比 GET 安全肯定是错的，POST跟GET都是明文传输，用<a href="http://code.google.com/p/httpfox/">httpfox</a>等插件，或者像<a href="http://www.wireshark.org/">WireShark </a>等类似工具就能观察到。</p>
<p>POST和GET的差别其实是很大的。语义上，GET是获取指定URL上的资源，是读操作，重要的一点是不论对某个资源GET多少次，它的状态是不会改变的，在这个意义上，我们说GET是安全的（不是被密码学或者数据保护意义上的安全）。因为GET是安全的，所以GET返回的内容可以被浏览器，Cache服务器缓存起来（其中还有很多细节，但不影响这里的讨论）。</p>
<p>而POST的语意是对指定资源“追加/添加”数据，所以是不安全的，每次提交的POST，参与的代码都会认为这个操作会修改操作对象资源的状态，于是，浏览器在你按下F5的时候会跳出确认框，缓存服务器不会缓存POST请求返回内容。</p>
<p>很遗憾到目前为止没有应聘者能够提到这一点。我猜测这背后的原因大概有两个，一是也许大多数人往往（我也一样）满足于只要完成任务就好，不管用哪个，表单提交了，数据处理了，内容显示或者重新定向到另外一个页面，就算完成了一个任务，从任务表里划掉，结束。而且对大部分项目(OA, CRM, MIS)的大部分情况下，用哪个似乎都可以。</p>
<p>同时，在被商业机构在媒体和书籍上宣传兜售的WS-*概念和使用集成开发环境提供的“方便”的代码生成工具后，“了解”到所有Web服务调用都是通过POST，更潜意识里确定了POST和GET是一样的，而且GET能做的，POST都能做，POST简直就是GET++嘛。自然，能用POST就用POST，不必在乎两者的差别了。</p>
<p>这又让我想起最近学到的一个概念: Radius Of Comprehension，理解的半径:</p>
<p>当学习概念A的时候，需要先了解概念B，而概念C又是理解B的前提。当B和C都是新的需要学习的概念时，可以说A的理解半径是2，如图:</p>
<pre>
A --> B --> C
|--1--|--2--|
</pre>
<p>在学习Web开发时，接触到GET和POST时，“理解的半径”可能包涵:</p>
<pre>
POST vs. GET
     |---> Conditional GET -> ETag -> Cache
     |         `--> Status Code
     `---> HTTP的方法 --> URL
</pre>
<p>往往因为仅仅满足于完成手上被要求的任务，或者懒于问一个为什么，我们就把自己的理解半径设置成零，那么就学不到更深入的东西，也因此仅仅知道POST和GET不同，而不再会了解不同在哪里，什么是Conditional GET和缓存header等概念。</p>
<p>从一个简单的面试问题谈到这，貌似小题大作了，写到哪算哪吧。 </p>
<p>&lt;UPDATE&gt;<br />
看到Fenng <a href="http://www.google.com/buzz/dbanotes/BuxABaL5oam/%E4%BB%8EHTTP-GET%E5%92%8CPOST%E7%9A%84%E5%8C%BA%E5%88%AB%E8%AF%B4%E8%B5%B7-Yining">Buzz 了这篇文字</a>，引起一些评论，因此在这再讨论两个概念: <a href="http://tools.ietf.org/html/rfc2616#section-9.1">安全的(Safe)和幂等的(Idempotent)</a>。</p>
<p>安全的是指没有明显的对用户有影响的副作用(包括修改该资源的状态)。HTTP方法里的GET和HEAD都是安全的。</p>
<p>幂等的是指一个方法不论多少次操作，结果都是一样。PUT(把内容放到指定URL)，DELETE(删除某个URL代表的资源)，虽然都修改了资源内容，但多次操作，结果是相同的，因此和HEAD，GET一样都是幂等的。</p>
<p>所以根据HTTP协议，GET是安全的，也是幂等的，而POST既不是安全的，也不是幂等的。<br />
&lt;/UPDATE&gt;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.yining.org/2010/05/04/http-get-vs-post-and-thoughts/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Another great prototype tool &#8211; WireframeSketcher</title>
		<link>http://www.yining.org/2009/06/08/wireframesketcher-review/</link>
		<comments>http://www.yining.org/2009/06/08/wireframesketcher-review/#comments</comments>
		<pubDate>Mon, 08 Jun 2009 06:01:27 +0000</pubDate>
		<dc:creator>Yining</dc:creator>
				<category><![CDATA[WebDesign]]></category>
		<category><![CDATA[WebDev]]></category>
		<category><![CDATA[tools]]></category>
		<category><![CDATA[mockup]]></category>
		<category><![CDATA[prototype]]></category>

		<guid isPermaLink="false">http://www.yining.org/?p=342</guid>
		<description><![CDATA[I have enjoyed paper/white-board prototyping for a long time, even made it my teams&#8217; one of first &#8220;rules of engagement&#8221;. I have also been a big fan of Balsamiq Mockups, and today I would like to introduce you another great quick prototyping tool: WireframeSketcher.
In a nutshell, WireframeSketcher is, as its home page says:

WireframeSketcher is an [...]]]></description>
			<content:encoded><![CDATA[<p>I have enjoyed paper/white-board prototyping for a long time, even made it my teams&#8217; one of first &#8220;rules of engagement&#8221;. I have also been a big fan of Balsamiq Mockups, and today I would like to introduce you another great quick prototyping tool: <a href="http://wireframesketcher.com/">WireframeSketcher</a>.</p>
<p>In a nutshell, WireframeSketcher is, as its home page says:</p>
<blockquote><p>
WireframeSketcher is an Eclipse plugin for creating wireframes, screen mockups and UI prototypes.
</p></blockquote>
<p>Having tried it out on two small projects in the last two weeks, I am impressed. It&#8217;s a neat, and pleasant tool to use and fits very well with both my personal and my team&#8217;s development process.</p>
<p>First, a screen-shot showing it in action:</p>
<p><a href="http://www.flickr.com/photos/yining/3603998655/" title="wireframesketcher-screenshot by ZhangYining, on Flickr"><img src="http://farm4.static.flickr.com/3402/3603998655_06f1080193.jpg" width="500" height="305" alt="wireframesketcher-screenshot" /></a></p>
<p>Being an Eclipse plugin, it means</p>
<ul>
<li>developer friendly, as it&#8217;s right inside an environment already familiar to many developers (80% of my team uses eclipse on a daily basis), there is no extra software or framework or platform to install, and developers can just svn up project&#8217;s design mockup folder, then open the mockups in the same IDE, very neat and appealing experience compared to that of other prototype tools;</li>
<li>cross platform;</li>
<li>enjoys the benefits Eclipse plugin infrastructure brings, like update mechanism</li>
</ul>
<p>Highlights I want to mention:</p>
<ul>
<li>The fastest and most responsive prototype tool I have tried and used;</li>
<li>Mockups are stored as xml documents instead of image files, that means it&#8217;s friendly to scm tools like Subversion and diff;
<li>
<li>Has annotation support, good for asynchronous communication;</li>
<li>Grouping of UI elements can be nested, i.e. I can group a label and an input box first, then group them with a button as another group, when ungrouping the latter, the first group of label and input box is still intact;</li>
<li>Presentation of a mockup or a storyboard is handy, it&#8217;s right inside Eclipse. There is no need to export them to images first then pasted to a .ppt file in order to just show the mockups or the sequence of the mockups;</li>
</ul>
<p>The most pleasant surprise to me is &#8220;Master Screen&#8221;, which allows me to pick any existing mockup as the base of a new mockup, this helps save time particularly when many of a site pages share the same header and footer. And there&#8217;s more. When I later make changes to the master screen, all screens that are &#8220;derived&#8221; from it automatically get updated without their xml files being modified (again, very friendly to Subversion and the like).</p>
<p>A close look of my sample mockups:</p>
<p><a href="http://www.flickr.com/photos/yining/3604672304/" title="wireframesketcher-1 by ZhangYining, on Flickr"><img src="http://farm3.static.flickr.com/2484/3604672304_dbdc046073.jpg" width="500" height="455" alt="wireframesketcher-1" /></a></p>
<p>Storyboard example:</p>
<p><a href="http://www.flickr.com/photos/yining/3603866819/" title="wireframesketcher-storyboard by ZhangYining, on Flickr"><img src="http://farm4.static.flickr.com/3196/3603866819_374bcaf03a.jpg" width="500" height="368" alt="wireframesketcher-storyboard" /></a></p>
<p>Some nitpicks or features I would like to see in the future WireframeSketcher:  </p>
<ul>
<li>annotation does not provide link from notes to the annotated element</li>
<li>I strongly believe url is an important element of user experience, but currently there is no way to specify the url on the browser control (I would suggest it takes two lines of input, the first being the page title, and the second line for the url);</li>
<li>I couldn&#8217;t find a way to reuse a group of UI element, my idea is to allow user to have a collection of custom built (e.g. Paginator, Chinese version of &#8220;Loren Lpsum&#8221;) or assembled controls  or control groups (e.g. a text input field always comes with a label and input box) as a separate category, this would help productivity among a project team at least;</li>
<li>colors support in more controls (e.g. form validation error, and different colors in progress bar, red for slow progressed, and green for complete or near complete)</li>
<li>One feature I particularly like about Balsamiq Mockups is the command line script to batch process (e.g. export to image files), I use it in my Ant build script to export mockup images. I hope this feature is coming to WireframeSketcher soon;</li>
<li>Hopefully, a community could grow out of this tool, like what Balsamiq has achieved with <a href="http://www.mockupstogo.net/">Mockups To Go</a>;
</ul>
<p>Conclusion? I would strongly encourage any developer or any development team that live and breathe in Eclipse to give WireframeSketcher a serious try.</p>
<p>Oh, did I mention a tiny problem with it being an eclipse plugin? <a href="http://www.rescuetime.com">RescueTime</a> now can not tell if I am actually using a Dev Tool or a Design Tool &#8230; But heck, I sure can live with that given such a great prototype tool.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.yining.org/2009/06/08/wireframesketcher-review/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>又脱了</title>
		<link>http://www.yining.org/2009/04/09/css-naked-day-2/</link>
		<comments>http://www.yining.org/2009/04/09/css-naked-day-2/#comments</comments>
		<pubDate>Thu, 09 Apr 2009 06:36:55 +0000</pubDate>
		<dc:creator>Yining</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[WebDesign]]></category>
		<category><![CDATA[css-naked-day]]></category>

		<guid isPermaLink="false">http://www.yining.org/?p=337</guid>
		<description><![CDATA[为什么说“又”呢？
]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.yining.org/2008/04/09/css-naked-day/">为什么说“又”呢？</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.yining.org/2009/04/09/css-naked-day-2/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>也说绿色IT生活</title>
		<link>http://www.yining.org/2009/01/21/on-eco-friendly-it-life/</link>
		<comments>http://www.yining.org/2009/01/21/on-eco-friendly-it-life/#comments</comments>
		<pubDate>Tue, 20 Jan 2009 20:27:09 +0000</pubDate>
		<dc:creator>Yining</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[Random Thoughts]]></category>
		<category><![CDATA[environment]]></category>
		<category><![CDATA[green]]></category>

		<guid isPermaLink="false">http://www.yining.org/?p=294</guid>
		<description><![CDATA[Fenng 前阵子写了“绿色IT生活“，分享了一些心得和建议。
我已经做到或者基本做到的有:

无线网络，网线再见；这个基本做到了，除了特殊情况，比如速度、安全或者稳定要求高的特殊情况。
不用光盘，网上下载；
不换电话，少打电话；从手机更新频率（现在的手机是一年半前买的）和话费，都属于运营商定义的“垃圾用户”；
不写笔记，多写网志 ；这给我改成写在Wiki上（毕竟我写在网志上的东西不会写在纸上，笔记上的也多半不会放在网志上）；
买东西尽量买同类商品中品质好一点的那个；这个毛病/习惯我早就有了；
少弄一些劣质 T 恤。穿过一次就扔掉了，太浪费。牛仔裤也尽量少买，发扬&#8221;一条裤子穿三年&#8221;的革命朴素主义精神。－ 这里一定要赞一下自己，过去的365天里没买一件/双 衣服/袜子/鞋子（除了网志年会和厦门马拉松的T-shirt，那都已经算在报名费里的）；
不去领一些惠而不费的礼品。基本上都没什么实际用途的东西，尤其是一些展会上厂商分发的玩意儿。－ 恩，我也没这样的机会 :-D

我确定做不到或者有别的办法的有：

少买图书，不买杂志；这点对我来说，那是相当的难啊。的确，图书杂志浪费纸张，不环保，在家里还占地方。但又不能不买，解决办法是可以跟朋友同好共享，比如互相借阅或者交换，跟Fenng在线上曾经讨论过，他说异地借书需要快递，可快递也浪费资源。可那至少减少浪费纸张了，再不行就本地朋友之间借阅吧。对了，家里占地方的旧杂志可以废物利用，比如：Craft a Table Using Old Magazines，省了买家具；
抛弃鼠标，这点确实做不到，买个好点的鼠标和鼠标垫（参见前面“买东西尽量买同类商品中品质好一点的那个”一项 :-D）；至于尽量熟悉键盘快捷键，减少鼠标操作对阅读造成的中断，这点我赞成并要不断提高；

自己再补充几条：

关于读书，多读电子书，并继续订阅O&#8217;Reilly的Safari在线图书馆，昨天看到O&#8217;Reilly也裁员了，继续订阅也算是继续支持他们；
使用白板，不仅办公室里用，家里房间里也摆一块，页面设计，程序设计，To-Do-List都可以用。尽量用环保的马克笔，实在不行可以争取废品回收；
使用dopplr.com来记录自己的每一次旅行，dopplr会提供每次和一年里旅行所产生的C2O值，这也算保持对环保的意识和对自己的监督吧；
使用小软件来控制和优化电脑的电源使用，比如：Local Cooling和省省看；
重复利用硬件，废品回收。看看今年有没有机会做个硬件复用的项目，到时候汇报；
去咖啡屋买咖啡争取带自己的杯子，据说这样会被人说是213，213就213吧，比那什么还少37不是？
少抽烟到不抽烟，现在每天在线汇报并记录，自我监控；

最后，对作为写代码的（SA和DBA也需要写代码的）来说，也是最重要的：
写高效率的代码，减少和优化CPU和硬盘使用；
先记这些，年底的时候再回头看看自己做得怎么样。
问题：假设有n个城市C1,C2,&#8230;Cn，每个城市里有Mi(1&#60;i&#60;n)个人，他们互相信任并愿意交换和借阅各自拥有的图书，每两个城市(x,y)之间的快递所需耗费的能源已知是Exy，且已知每个人拥有并愿意借出的书(Bi1,Bi2,&#8230; )和想看的书；设计一个算法能够：1）让他们所有人能够借阅到自己想看的书，且；2）因快递图书而导致的能源消耗最少。
这要是延伸做个豆瓣App应该很赞吧？
]]></description>
			<content:encoded><![CDATA[<p>Fenng 前阵子写了<a href="http://www.dbanotes.net/mylife/green_it_life.html">“绿色IT生活“</a>，分享了一些心得和建议。</p>
<p>我已经做到或者基本做到的有:</p>
<ul>
<li>无线网络，网线再见；这个基本做到了，除了特殊情况，比如速度、安全或者稳定要求高的特殊情况。</li>
<li>不用光盘，网上下载；</li>
<li>不换电话，少打电话；从手机更新频率（现在的手机是一年半前买的）和话费，都属于运营商定义的“垃圾用户”；</li>
<li>不写笔记，多写网志 ；这给我改成写在Wiki上（毕竟我写在网志上的东西不会写在纸上，笔记上的也多半不会放在网志上）；</li>
<li>买东西尽量买同类商品中品质好一点的那个；这个毛病/习惯我早就有了；</li>
<li>少弄一些劣质 T 恤。穿过一次就扔掉了，太浪费。牛仔裤也尽量少买，发扬&#8221;一条裤子穿三年&#8221;的革命朴素主义精神。－ 这里一定要赞一下自己，过去的365天里没买一件/双 衣服/袜子/鞋子（除了网志年会和厦门马拉松的T-shirt，那都已经算在报名费里的）；</li>
<li>不去领一些惠而不费的礼品。基本上都没什么实际用途的东西，尤其是一些展会上厂商分发的玩意儿。－ 恩，我也没这样的机会 :-D</li>
</ul>
<p>我确定做不到或者有别的办法的有：</p>
<ul>
<li>少买图书，不买杂志；<a href="http://www.douban.com/book/list/yining/wish">这点对我来说，那是相当的难啊</a>。的确，图书杂志浪费纸张，不环保，在家里还占地方。但又不能不买，解决办法是可以跟朋友同好共享，比如互相借阅或者交换，跟Fenng在线上曾经讨论过，他说异地借书需要快递，可快递也浪费资源。可那至少减少浪费纸张了，再不行就本地朋友之间借阅吧。对了，家里占地方的旧杂志可以废物利用，比如：<a href="http://www.re-nest.com/re-nest/how-to/how-to-craft-a-table-using-old-magazines-060208">Craft a Table Using Old Magazines</a>，省了买家具；</li>
<li>抛弃鼠标，这点确实做不到，买个好点的鼠标和鼠标垫（参见前面“买东西尽量买同类商品中品质好一点的那个”一项 :-D）；至于尽量熟悉键盘快捷键，减少鼠标操作对阅读造成的中断，这点我赞成并要不断提高；</li>
</ul>
<p>自己再补充几条：</p>
<ul>
<li>关于读书，多读电子书，并继续订阅<a href="http://safari.oreilly.com">O&#8217;Reilly的Safari在线图书馆</a>，昨天看到<a href="http://fyi.oreilly.com/2009/01/changes-at-oreilly.html">O&#8217;Reilly也裁员了</a>，继续订阅也算是继续支持他们；</li>
<li>使用白板，不仅办公室里用，家里房间里也摆一块，页面设计，程序设计，To-Do-List都可以用。尽量用环保的马克笔，实在不行可以<a href="http://gogreen.theconsortium.co.uk/teachers-are-you-eco-friendly-with-your-whiteboard-marker-pens/">争取废品回收</a>；</li>
<li>使用<a href="http://www.dopplr.com">dopplr.com</a>来记录自己的每一次旅行，dopplr会提供每次和一年里旅行所产生的C2O值，这也算保持对环保的意识和对自己的监督吧；</li>
<li>使用小软件来控制和优化电脑的电源使用，比如：<a href="http://www.localcooling.com/">Local Cooling</a>和<a href="http://www.appinn.com/shengshengkan/">省省看</a>；</li>
<li>重复利用硬件，废品回收。看看今年有没有机会做个硬件复用的项目，到时候汇报；</li>
<li>去咖啡屋买咖啡争取带自己的杯子，据说这样会被人说是213，213就213吧，比那什么还少37不是？</li>
<li>少抽烟到不抽烟，现在每天在线汇报并记录，自我监控；</li>
</ul>
<p>最后，对作为写代码的（SA和DBA也需要写代码的）来说，也是最重要的：</p>
<p><em style="font-weight:bold">写高效率的代码，减少和优化CPU和硬盘使用；</em></p>
<p>先记这些，年底的时候再回头看看自己做得怎么样。</p>
<p>问题：假设有n个城市C1,C2,&#8230;Cn，每个城市里有Mi(1&lt;i&lt;n)个人，他们互相信任并愿意交换和借阅各自拥有的图书，每两个城市(x,y)之间的快递所需耗费的能源已知是Exy，且已知每个人拥有并愿意借出的书(Bi1,Bi2,&#8230; )和想看的书；设计一个算法能够：1）让他们所有人能够借阅到自己想看的书，且；2）因快递图书而导致的能源消耗最少。</p>
<p>这要是延伸做个豆瓣App应该很赞吧？</p>
]]></content:encoded>
			<wfw:commentRss>http://www.yining.org/2009/01/21/on-eco-friendly-it-life/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>推荐一款界面设计工具 Balsamiq Mockups</title>
		<link>http://www.yining.org/2009/01/09/balsamiq-mockups-review/</link>
		<comments>http://www.yining.org/2009/01/09/balsamiq-mockups-review/#comments</comments>
		<pubDate>Thu, 08 Jan 2009 16:38:14 +0000</pubDate>
		<dc:creator>Yining</dc:creator>
				<category><![CDATA[WebDesign]]></category>
		<category><![CDATA[WebDev]]></category>
		<category><![CDATA[tools]]></category>
		<category><![CDATA[balsamiq]]></category>
		<category><![CDATA[balsamiq-mockups]]></category>
		<category><![CDATA[mockup]]></category>
		<category><![CDATA[prototype]]></category>

		<guid isPermaLink="false">http://www.yining.org/?p=236</guid>
		<description><![CDATA[平时工作中在界面设计的时候，我总是要求工程师先在纸上画图，初步确定后，仅仅用HTML+CSS做出静态的界面再次与用户（主要是其他业务部门）确认后，再动手写实际的代码。
纸上的原型设计是经常使用（至少我自己）的初期设计方式，办公室里用白板（空间大，而且环保些）和马克笔。这种办法不仅快，能尽早发现在文字和口头的沟通上理解不一致的地方，同时也尽可能减少开发成本和因为理解不一致导致返工的情况。纸上的原型设计在可用性上能起到很大作用，也有专门一本书介绍和探讨，这就不多说了。
但是这也有它们本身的不足。首先是没法很好地保留设计和讨论的内容，我曾经尝试用数码相机把白板上的内容拍下来，但仅仅是为了保留，没法有效地在后续的讨论和工作中继续使用。
几年前发现过一个做网站的设计草图的工具软件，Denim，这是一个大学的项目，学术性和尝试性的味道强了些，界面设计上有很多新颖的地方，但毕竟不是从每天蹲在“战壕”中的工程师的角度出发，玩玩可以，实际工作上还是不大可能用上。（附：Denim的截图）。
前阵子发现了一个新软件：Balsamiq Mockups，用下来发现它真正抓住了原型设计的核心与平衡点，既能快速设计草图，又能比较好地进入到平时团队工作的流程和工具中，可以说是击中了原型设计的Sweet Spot，强烈推荐。
先看看截图：

再说说功能和亮点：

操作方面，拖拽，控件分组，甚至元素之间的对齐都做得很贴心；
预制了很多界面元素，从简单的输入框，下拉框，浏览器主要元素，到经常用得到的导航条，日历，表格，到复杂的Tag Cloud，Cover Flow, 地图，WYSWYG的格式工具栏等，有了这些不用从头画起，往往比用白板都快；
界面元素的修改很简单，比如导航条的几个标签页的label，就是用逗号分隔的文字，下拉框的选项就是分行的文字；
使用xml语言来记录和保存界面元素和布局，

这使得每个设计都能被很好得放进SVN，Git，和CVS等工具中进行管理和跟踪；
可以设计复杂的界面元素，保存后，以后可以重复使用（包括修改）；


可以将设计导出成PNG格式的图片；


可以用命令行进行导出操作，这样就能让我写个脚本，从svn里checkout某个目录下的所有设计文件后，导出图片，打包后用邮件发到项目经理，工程师甚至客户那；
跨平台，Balsamiq Mokups是用Flex和Air实现的，所以在Mac OS, Linux和Windows下都能使用；
不仅仅有桌面版本，还有能集成在Confluence，JIRA，和XWiki中的版本，使得异地在线协作更方便有效；

据作者说，现在这款软件的设计就是用它自己来设计的，经典的“吃自己的狗粮”，这也让我对其更有信心，因为它是开发者为开发者写的软件。
更多信息，大家可以到它的网站上了解。
还有值得一提的是Balsamiq Mokups的在GetSatisfaction上的用户支持和服务，作者Peldi对问题报告，新需求的回应很积极和及时。而且根据这个讨论上看，到月底就会有一个专门用来分享界面控件设计的社区网站了，很期待。
再要说的一点是这款软件是要付费的，79美元（也可以免费，具体如何免费，请看网站上的说明），相对于它能节省下来的时间和提高的效率，是很值得的。Peldi说在2008年，这款软件就从1,322位付费用户那获得了162,302美元的收入（其中仅12月份就有39,000美元），这令人鼓舞地证明了只要是提供真正价值的服务和软件，就能够创造很好的收入，即使在经济萧条的寒冬里。
另外说一句, GetSatisfaction也是一个很不错的服务。
]]></description>
			<content:encoded><![CDATA[<p>平时工作中在界面设计的时候，我总是要求工程师先在纸上画图，初步确定后，仅仅用HTML+CSS做出静态的界面再次与用户（主要是其他业务部门）确认后，再动手写实际的代码。</p>
<p><a href="http://en.wikipedia.org/wiki/Paper_prototyping">纸上的原型设计</a>是经常使用（至少我自己）的初期设计方式，办公室里用白板（空间大，而且环保些）和马克笔。这种办法不仅快，能尽早发现在文字和口头的沟通上理解不一致的地方，同时也尽可能减少开发成本和因为理解不一致导致返工的情况。纸上的原型设计<a href="http://www.alistapart.com/articles/paperprototyping">在可用性上能起到很大作用</a>，也有<a href="http://www.paperprototyping.com/">专门一本书介绍和探讨</a>，这就不多说了。</p>
<p>但是这也有它们本身的不足。首先是没法很好地保留设计和讨论的内容，我曾经尝试<a href="http://flickr.com/photos/yining/88144964/in/set-1247998/">用数码相机把白板上的内容拍下来</a>，但仅仅是为了保留，没法有效地在后续的讨论和工作中继续使用。</p>
<p>几年前发现过一个做网站的设计草图的工具软件，<a href="http://dub.washington.edu:2007/projects/denim/">Denim</a>，这是一个大学的项目，学术性和尝试性的味道强了些，界面设计上有很多新颖的地方，但毕竟不是从每天蹲在“战壕”中的工程师的角度出发，玩玩可以，实际工作上还是不大可能用上。（附：<a href="http://flickr.com/photos/yining/29077927/in/set-1247998/">Denim的截图</a>）。</p>
<p>前阵子发现了一个新软件：<a href="http://www.balsamiq.com/products/mockups">Balsamiq Mockups</a>，用下来发现它真正抓住了原型设计的核心与平衡点，既能快速设计草图，又能比较好地进入到平时团队工作的流程和工具中，可以说是击中了原型设计的Sweet Spot，强烈推荐。</p>
<p>先看看截图：<br />
<a href="http://www.flickr.com/photos/yining/3179518234/" title="balsamiq markup screenshot by ZhangYining, on Flickr"><img src="http://farm4.static.flickr.com/3085/3179518234_47b7d81a11.jpg" width="500" height="439" alt="balsamiq markup screenshot" /></a></p>
<p>再说说功能和亮点：</p>
<ol>
<li>操作方面，拖拽，控件分组，甚至元素之间的对齐都做得很贴心；</li>
<li>预制了很多界面元素，从简单的输入框，下拉框，浏览器主要元素，到经常用得到的导航条，日历，表格，到复杂的Tag Cloud，Cover Flow, 地图，WYSWYG的格式工具栏等，有了这些不用从头画起，往往比用白板都快；</li>
<li>界面元素的修改很简单，比如导航条的几个标签页的label，就是用逗号分隔的文字，下拉框的选项就是分行的文字；</li>
<li>使用xml语言来记录和保存界面元素和布局，
<ol>
<li>这使得每个设计都能被很好得放进SVN，Git，和CVS等工具中进行管理和跟踪；</li>
<li>可以设计复杂的界面元素，保存后，以后可以重复使用（包括修改）；</li>
</ol>
</li>
<li>可以将设计导出成PNG格式的图片；<br />
<a href="http://www.flickr.com/photos/yining/3179518230/" title="balsamiq mokup exported to png by ZhangYining, on Flickr"><img src="http://farm4.static.flickr.com/3451/3179518230_5ec1947cb9_m.jpg" width="240" height="164" alt="balsamiq markup exported to png" /></a>
</li>
<li>可以用命令行进行导出操作，这样就能让我写个脚本，从svn里checkout某个目录下的所有设计文件后，导出图片，打包后用邮件发到项目经理，工程师甚至客户那；</li>
<li>跨平台，Balsamiq Mokups是用Flex和Air实现的，所以在Mac OS, Linux和Windows下都能使用；</li>
<li>不仅仅有桌面版本，还有能集成在Confluence，JIRA，和XWiki中的版本，使得异地在线协作更方便有效；</li>
</ol>
<p>据作者说，现在这款软件的设计就是用它自己来设计的，经典的“吃自己的狗粮”，这也让我对其更有信心，因为它是<em style="font-weight:bold">开发者为开发者写的软件</em>。</p>
<p>更多信息，大家可以到<a href="http://www.balsamiq.com/products/mockups">它的网站</a>上了解。</p>
<p>还有值得一提的是<a href="http://getsatisfaction.com/balsamiq">Balsamiq Mokups的在GetSatisfaction上的用户支持和服务</a>，作者<a href="http://getsatisfaction.com/people/peldi">Peldi</a>对问题报告，新需求的回应很积极和及时。而且<a href="http://getsatisfaction.com/balsamiq/topics/balsamiq_design_patterns_website_portal">根据这个讨论上看</a>，到月底就会有一个专门用来分享界面控件设计的社区网站了，很期待。</p>
<p>再要说的一点是这款软件是要付费的，79美元（也可以免费，具体如何免费，请看网站上的说明），相对于它能节省下来的时间和提高的效率，是很值得的。<a href="http://www.balsamiq.com/blog/?p=531">Peldi说在2008年</a>，这款软件就从1,322位付费用户那获得了162,302美元的收入（其中仅12月份就有39,000美元），这令人鼓舞地证明了只要是提供真正价值的服务和软件，就能够创造很好的收入，即使在经济萧条的寒冬里。</p>
<p>另外说一句, <a href="http://getsatisfaction.com">GetSatisfaction</a>也是一个很不错的服务。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.yining.org/2009/01/09/balsamiq-mockups-review/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
		<item>
		<title>2009厦门马拉松报告 － 跑得保守了些</title>
		<link>http://www.yining.org/2009/01/04/xiamen-marathon-2009-report/</link>
		<comments>http://www.yining.org/2009/01/04/xiamen-marathon-2009-report/#comments</comments>
		<pubDate>Sat, 03 Jan 2009 17:27:07 +0000</pubDate>
		<dc:creator>Yining</dc:creator>
				<category><![CDATA[Running]]></category>
		<category><![CDATA[marathon]]></category>
		<category><![CDATA[xiamen]]></category>
		<category><![CDATA[厦门]]></category>
		<category><![CDATA[马拉松]]></category>

		<guid isPermaLink="false">http://www.yining.org/?p=246</guid>
		<description><![CDATA[先报告成绩吧，4小时35分多，还是没能跑进4小时30分，遗憾。
再看我的Polar S625X上的记录，先是心跳和速度在距离上的变化：

这是心跳和速度在时间上的变化：

除了最后的冲刺，全程心跳保持在每分钟150到160之间，前两年后半程心跳都提高到了160以上，这很大提高了我继续提高成绩的信心。
这次最大的进步就是全程是一路跑下来，中途没走路，这要归功于之前训练中有过三次32公里的长距离跑；
跑得保守了些，如果积极些胆子大点儿，跑进4小时30分应该没问题，回去应该增加速度和路跑的训练。
插播两张图片：

演武大桥下来，看起来和自我感觉都比前两年轻松多了。

前面这两位也是福州来的跑友，右边这位很风趣也很有经验，一路上和路边的啦啦队互动，同时也不断叮嘱一起跑的朋友要控制速度不要太早加速。我从20公里左右后10公里都在他们后面跟随，速度保持在每公里6分半左右。
跑完这次马拉松，完成之前预定的跑完全程和4小时45分内的前两个目标，但是没能完成4个半小时的第三个目标。但也算完成了今年”跑一次马拉松“的目标，可以准备”争取跑两个马拉松“了，扬州是四月份，杭州好像是10月11月间，上海是12月。
就先写这么多吧。
]]></description>
			<content:encoded><![CDATA[<p>先报告成绩吧，4小时35分多，还是没能跑进4小时30分，遗憾。</p>
<p>再看我的Polar S625X上的记录，先是心跳和速度在距离上的变化：</p>
<p><a href="http://www.flickr.com/photos/yining/3163342528/" title="marathon-xm-2009-by-distance by ZhangYining, on Flickr"><img src="http://farm4.static.flickr.com/3094/3163342528_90e90134cf.jpg" width="500" height="300" alt="marathon-xm-2009-by-distance" /></a></p>
<p>这是心跳和速度在时间上的变化：</p>
<p><a href="http://www.flickr.com/photos/yining/3163342518/" title="marathon-xm-2009-by-time by ZhangYining, on Flickr"><img src="http://farm4.static.flickr.com/3120/3163342518_11e4d8a005.jpg" width="500" height="300" alt="marathon-xm-2009-by-time" /></a></p>
<p>除了最后的冲刺，全程心跳保持在每分钟150到160之间，前两年后半程心跳都提高到了160以上，这很大提高了我继续提高成绩的信心。</p>
<p>这次最大的进步就是全程是一路跑下来，中途没走路，这要归功于之前训练中有过三次32公里的长距离跑；</p>
<p>跑得保守了些，如果积极些胆子大点儿，跑进4小时30分应该没问题，回去应该增加速度和路跑的训练。</p>
<p>插播两张图片：</p>
<p><a href="http://www.flickr.com/photos/yining/3163453938/" title="下演武大桥-2 by ZhangYining, on Flickr"><img src="http://farm4.static.flickr.com/3267/3163453938_0a517b2684.jpg" width="500" height="334" alt="下演武大桥-2" /></a></p>
<p>演武大桥下来，看起来和自我感觉都比<a href="http://www.yining.org/2008/01/07/xiamen-marathon-2008-report/">前两年</a>轻松多了。</p>
<p><a href="http://www.flickr.com/photos/yining/3163453912/" title="下演武大桥-1 by ZhangYining, on Flickr"><img src="http://farm4.static.flickr.com/3089/3163453912_a3bf055661.jpg" width="500" height="334" alt="下演武大桥-1" /></a></p>
<p>前面这两位也是福州来的跑友，右边这位很风趣也很有经验，一路上和路边的啦啦队互动，同时也不断叮嘱一起跑的朋友要控制速度不要太早加速。我从20公里左右后10公里都在他们后面跟随，速度保持在每公里6分半左右。</p>
<p>跑完这次马拉松，完成之前预定的跑完全程和4小时45分内的前两个目标，但是没能完成4个半小时的第三个目标。但也算完成了今年”跑一次马拉松“的目标，可以准备”争取跑两个马拉松“了，扬州是四月份，杭州好像是10月11月间，上海是12月。</p>
<p>就先写这么多吧。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.yining.org/2009/01/04/xiamen-marathon-2009-report/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
	</channel>
</rss>
