﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-绿浪轻舟</title><link>http://www.blogjava.net/aaronsky/</link><description>读书，读事，读人</description><language>zh-cn</language><lastBuildDate>Sat, 04 Apr 2026 02:04:06 GMT</lastBuildDate><pubDate>Sat, 04 Apr 2026 02:04:06 GMT</pubDate><ttl>60</ttl><item><title>Unix shell script - conditional modifiers</title><link>http://www.blogjava.net/aaronsky/archive/2011/03/21/346672.html</link><dc:creator>Aaron.Chu</dc:creator><author>Aaron.Chu</author><pubDate>Mon, 21 Mar 2011 03:10:00 GMT</pubDate><guid>http://www.blogjava.net/aaronsky/archive/2011/03/21/346672.html</guid><wfw:comment>http://www.blogjava.net/aaronsky/comments/346672.html</wfw:comment><comments>http://www.blogjava.net/aaronsky/archive/2011/03/21/346672.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/aaronsky/comments/commentRss/346672.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/aaronsky/services/trackbacks/346672.html</trackback:ping><description><![CDATA[<p>${name-aaron} &nbsp;如果name没有定义，用值aaron代替${name}，但变量name依然没有定义。</p>
<p>${name=aaron} 如果name没有定义，将name设成aaron。注意与前面的区别。</p>
<p>${name+aaron}如果name已经定义，值为aaron，否则为null。有点奇怪，对吧？</p>
<p>${name?"not assigned"} 如果name没有定义，显示name：not assigned</p>
<p><br />
</p>
<p>有时虽然变量已经定义了，但是个null值，这样就不起作用了。可用通过在操作符(-,=,+,?)前加个：来解决。冒号的意思就是将null当成未定义处理。</p>
<p>例子：</p>
<p>name=</p>
<p>echo ${name-aaron}</p>
<p>显示空值</p>
<p>echo ${name:-aaron}</p>
<p>显示aaron</p>
<p><br />
</p>
<img src ="http://www.blogjava.net/aaronsky/aggbug/346672.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/aaronsky/" target="_blank">Aaron.Chu</a> 2011-03-21 11:10 <a href="http://www.blogjava.net/aaronsky/archive/2011/03/21/346672.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Unix shell script - filename wildcarts</title><link>http://www.blogjava.net/aaronsky/archive/2011/03/21/346665.html</link><dc:creator>Aaron.Chu</dc:creator><author>Aaron.Chu</author><pubDate>Mon, 21 Mar 2011 02:23:00 GMT</pubDate><guid>http://www.blogjava.net/aaronsky/archive/2011/03/21/346665.html</guid><wfw:comment>http://www.blogjava.net/aaronsky/comments/346665.html</wfw:comment><comments>http://www.blogjava.net/aaronsky/archive/2011/03/21/346665.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/aaronsky/comments/commentRss/346665.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/aaronsky/services/trackbacks/346665.html</trackback:ping><description><![CDATA[<p>文件名中可用下列通配符：</p>
<p>* &nbsp; 匹配0多过个字符</p>
<p>？ 匹配一个字符</p>
<p>[...] &nbsp;匹配方括号中的任意一个字符，可用[ - ]表示字符范围，如[1-3]表示匹配1,2,3 中的任意一个。</p>
<p>[!...] &nbsp;匹配任意不在方括号中的字符。</p>
<p><br />
</p>
<p>例子： 文件处理成功后会加个前缀'_', 想要查看哪些文件没被成功处理，可用命令：ls [!_]*</p>
<img src ="http://www.blogjava.net/aaronsky/aggbug/346665.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/aaronsky/" target="_blank">Aaron.Chu</a> 2011-03-21 10:23 <a href="http://www.blogjava.net/aaronsky/archive/2011/03/21/346665.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Unix Shell script - debug</title><link>http://www.blogjava.net/aaronsky/archive/2011/02/22/344800.html</link><dc:creator>Aaron.Chu</dc:creator><author>Aaron.Chu</author><pubDate>Tue, 22 Feb 2011 01:37:00 GMT</pubDate><guid>http://www.blogjava.net/aaronsky/archive/2011/02/22/344800.html</guid><wfw:comment>http://www.blogjava.net/aaronsky/comments/344800.html</wfw:comment><comments>http://www.blogjava.net/aaronsky/archive/2011/02/22/344800.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/aaronsky/comments/commentRss/344800.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/aaronsky/services/trackbacks/344800.html</trackback:ping><description><![CDATA[bash [-n|-v|-x]&nbsp; script<br />
<br />
-n: 读一遍脚本中的命令，但不执行，用于检查脚本中的语法错误。<br />
-v: 一边执行脚本，一边将执行过的脚本命令打印到标准错误输出。<br />
-x: 提供跟踪执行信息，将执行的每一条命令和结果依次打印出来。<br />
<br />
也可在脚本中用set命令启用或禁止参数。<br />
<br />
...<br />
#启用-x参数<br />
set -x&nbsp; <br />
...<br />
#禁止-x参数<br />
set +x<br />
<br />
这样可实现对某一段脚本的跟踪。<br />
<br />
<img src ="http://www.blogjava.net/aaronsky/aggbug/344800.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/aaronsky/" target="_blank">Aaron.Chu</a> 2011-02-22 09:37 <a href="http://www.blogjava.net/aaronsky/archive/2011/02/22/344800.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Unix Shell script - function</title><link>http://www.blogjava.net/aaronsky/archive/2011/02/22/344797.html</link><dc:creator>Aaron.Chu</dc:creator><author>Aaron.Chu</author><pubDate>Tue, 22 Feb 2011 01:23:00 GMT</pubDate><guid>http://www.blogjava.net/aaronsky/archive/2011/02/22/344797.html</guid><wfw:comment>http://www.blogjava.net/aaronsky/comments/344797.html</wfw:comment><comments>http://www.blogjava.net/aaronsky/archive/2011/02/22/344797.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/aaronsky/comments/commentRss/344797.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/aaronsky/services/trackbacks/344797.html</trackback:ping><description><![CDATA[Shell中的函数没有返回值，也没有参数列表。 如：<br />
foo(){ echo "this is a foo function"; }<br />
<br />
foo&nbsp; ---- call the foo function.<br />
<br />
{与后面的命令必须有空格或换行， 如果最后一条命令与}在同一行，必须用；隔开。<br />
函数调用不需要写(), 直接写函数名就可。<br />
参数以$1, $2的方式传入。<br />
sayHello(){ echo "Hi, $1, how are you doing" ; }<br />
sayHello Aaron<br />
<br />
<img src ="http://www.blogjava.net/aaronsky/aggbug/344797.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/aaronsky/" target="_blank">Aaron.Chu</a> 2011-02-22 09:23 <a href="http://www.blogjava.net/aaronsky/archive/2011/02/22/344797.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Unix shell script - 位置参数</title><link>http://www.blogjava.net/aaronsky/archive/2011/02/22/344796.html</link><dc:creator>Aaron.Chu</dc:creator><author>Aaron.Chu</author><pubDate>Tue, 22 Feb 2011 01:13:00 GMT</pubDate><guid>http://www.blogjava.net/aaronsky/archive/2011/02/22/344796.html</guid><wfw:comment>http://www.blogjava.net/aaronsky/comments/344796.html</wfw:comment><comments>http://www.blogjava.net/aaronsky/archive/2011/02/22/344796.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/aaronsky/comments/commentRss/344796.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/aaronsky/services/trackbacks/344796.html</trackback:ping><description><![CDATA[$0 - 函数名本身<br />
$1, $2, $3... - 函数参数<br />
$# - 参数个数<br />
$@ - 参数的集合，可用在for循环的in后面<br />
$? - 上条命令的返回值<br />
$$ - 当前进程号<br />
<br />
位置参数可用shift移动，如 shift 1，这样原来的$1被丢弃，$2变成原来的$1,以此类推。<br />
<br />
<img src ="http://www.blogjava.net/aaronsky/aggbug/344796.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/aaronsky/" target="_blank">Aaron.Chu</a> 2011-02-22 09:13 <a href="http://www.blogjava.net/aaronsky/archive/2011/02/22/344796.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Unix shell script - if/while</title><link>http://www.blogjava.net/aaronsky/archive/2011/02/22/344794.html</link><dc:creator>Aaron.Chu</dc:creator><author>Aaron.Chu</author><pubDate>Tue, 22 Feb 2011 01:06:00 GMT</pubDate><guid>http://www.blogjava.net/aaronsky/archive/2011/02/22/344794.html</guid><wfw:comment>http://www.blogjava.net/aaronsky/comments/344794.html</wfw:comment><comments>http://www.blogjava.net/aaronsky/archive/2011/02/22/344794.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/aaronsky/comments/commentRss/344794.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/aaronsky/services/trackbacks/344794.html</trackback:ping><description><![CDATA[1. 条件测试命令： test or [<br />
&nbsp; 逻辑判断跟普通的相反，当条件为真时，返回0，否则返回1.<br />
number=2<br />
test $number -gt 1<br />
echo $?<br />
0<br />
<br />
[ $number -gt 3 ]<br />
echo $?<br />
1<br />
<br />
note: [ ] 是个命令，括号中间是参数，命令和参数之间要有空格。<br />
常见的测试命令:<br />
[ -d dir ]<br />
[-f file ]<br />
[-z string ]&nbsp;&nbsp; String 长度为0时为真<br />
[ -n string ]&nbsp; String 长度非0时为真<br />
[arg1 op arg2 ]&nbsp; op: -eq, -ne, -lt, -gt, -ge, -le<br />
<br />
[ expr1 -a|-o expr2 ] -a=&amp;&amp;&nbsp; -o=||<br />
&nbsp;<br />
2. if/then<br />
<br />
if [ -d tmp ] ; then<br />
&nbsp;&nbsp; echo "tmp is a directory"<br />
fi<br />
<br />
这里有三条命令， if [-d tmp ] 是第一条，then是的而条，fi是第三条。两条命令在一行上，必须用;隔开。如果then令起一行，则不用分号。<br />
<br />
3. &amp;&amp; ||<br />
shell中的&amp;&amp;相当于 if..then.., ||则相当于if not ... then...,<br />
上面的if/then语句也可写成 [ -d tmp ] &amp;&amp; echo "tmp is a directory"<br />
<br />
4. case<br />
shell的case不仅能匹配整形和字符型，还能匹配字符串和wildcard, 每条分支必须以;;结束, 不需要break语句跳出。<br />
echo "input your choice:"<br />
read choice<br />
case $choice in<br />
Yes|yes|y)<br />
&nbsp;&nbsp; echo "you choose Yes";;<br />
[N|n]*)<br />
&nbsp;&nbsp; echo "you choose No";;<br />
esac<br />
<br />
<br />
<br />
<br />
<img src ="http://www.blogjava.net/aaronsky/aggbug/344794.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/aaronsky/" target="_blank">Aaron.Chu</a> 2011-02-22 09:06 <a href="http://www.blogjava.net/aaronsky/archive/2011/02/22/344794.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>CSD培训回顾</title><link>http://www.blogjava.net/aaronsky/archive/2010/12/30/341993.html</link><dc:creator>Aaron.Chu</dc:creator><author>Aaron.Chu</author><pubDate>Thu, 30 Dec 2010 07:33:00 GMT</pubDate><guid>http://www.blogjava.net/aaronsky/archive/2010/12/30/341993.html</guid><wfw:comment>http://www.blogjava.net/aaronsky/comments/341993.html</wfw:comment><comments>http://www.blogjava.net/aaronsky/archive/2010/12/30/341993.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/aaronsky/comments/commentRss/341993.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/aaronsky/services/trackbacks/341993.html</trackback:ping><description><![CDATA[CSD - Certified Scrum Developer, 如果你已经是CSM了，参加为期三天的培训，就可以成为CSD了。CSM培训主要是介绍Scrum的框架，其中会做一些团队游戏来加深对团队合作的理解，但主要还是以理论介绍为主。CSD培训则非常注重实践，团队通过开发一个具体的项目来感受敏捷原则，实践。比如time-box develop, TDD, refactoring, pair programming等等。Trainer每天会安排2小时介绍一些敏捷实践，如PP，TDD等等。其余的时间则用来开发项目。每天一个sprint，从planning, stand-up meeting到 review, retrospective,麻雀虽小，五脏俱全。经过3个sprint，我们完成了4个高优先级的user story，并顺利递交。test case（包括unit test 和自动化测试）通过率100%，test coverage 达到92%。Sonar中没有Major及以上的violation。<br />
<br />
下面是一些restrospective meeting notes，摘录如下：<br />
Did well:<br />
<br />
1. 大伙的passion都非常高，每个人都积极的参与进来，task都是自己领取的。<br />
2. 全程采用pair programming, 每个sprint大家互换pair。<br />
3. 采用测试优先的开发模式。<br />
4. 跟PO的交流非常好，每个user story都有相应的test case，并且经过PO的review，最终PO对产品非常满意，另外一个team由于缺乏跟PO的交流，导致最终的产品不是PO想要的。<br />
<br />
To be improved:<br />
<br />
1. 由于采用了新的version control工具Mercurial，team在第一天不是很适应，在代码的同步上花了较多时间。<br />
2. 第一天的test case没有经过PO review，最后发现并不是PO想要的。第二个sprint定义了新的流程，所有的test case都必须经过PO review.<br />
3. automation testing tool没有选好，开始采用testpartner,遇到比较多的问题，后来改用Fest。<br />
4. 与developer的需求交流以口头方式，交流时没有参照test case, 并且有多个team member同developer交流需求，导致某一功能实现与需求不符。重新定义流程：只安排一个人同developer交流特定功能的需求，并且要参照test case文档。<br />
<img alt="" src="http://www.blogjava.net/images/blogjava_net/aaronsky/IMAGE_200.jpg" width="708" height="533" /><br />
<br />
<img src ="http://www.blogjava.net/aaronsky/aggbug/341993.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/aaronsky/" target="_blank">Aaron.Chu</a> 2010-12-30 15:33 <a href="http://www.blogjava.net/aaronsky/archive/2010/12/30/341993.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>简析各类字符集</title><link>http://www.blogjava.net/aaronsky/archive/2010/12/07/339962.html</link><dc:creator>Aaron.Chu</dc:creator><author>Aaron.Chu</author><pubDate>Tue, 07 Dec 2010 02:45:00 GMT</pubDate><guid>http://www.blogjava.net/aaronsky/archive/2010/12/07/339962.html</guid><wfw:comment>http://www.blogjava.net/aaronsky/comments/339962.html</wfw:comment><comments>http://www.blogjava.net/aaronsky/archive/2010/12/07/339962.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/aaronsky/comments/commentRss/339962.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/aaronsky/services/trackbacks/339962.html</trackback:ping><description><![CDATA[ASCII，ISO8859，ANSI，utf-8，这些名字想必大家都很熟悉，但要讲出这些字符集的区别，还真有点糊涂，我也是今天才弄明白他们的意思，特记录之。<br />
<br />
1. ASCII, 编码结构为7位，第8位没有使用，主要包括基本的大小写字母与常用符号。其中，32-127表示大小写字符，32表示空格，32以下是控制字符。<br />
<br />
2. ISO-8859，在ASCII编码基础上制定的编码标准。包括128个ascii字符，并新增了128个字符，用于西欧国家的符号。<br />
<br />
3. ANSI， 代表本地编码，是为使计算机支持更多语言而实现的编码方案， 通常使用0x80-0xff范围的2个字节来表示1个字符，比如，汉字&#8220;中&#8221;，使用[0xD6,0xD0]这两个字节存储。由于各个国家有自己的编码标准，如我国用gb2312， 台湾用Big5等。这些使用2字节来代表1个字符的各种文字延伸编码方式，称为ANSI编码。<br />
<br />
4. GB2312, 用两个数来编码汉字和中文符号，又称区位码。 GBK是对gb2312的扩充，包含2万多个字符。<br />
<br />
5. Unicode字符集, 按其基本长度所用位数分为utf-8/16/32三种。 UTF是所有其他字符集标准的一个超集，它保证与其他字符集是双向兼容的，就是说，如果将任何文本字符串转换到utf格式，然后再翻译回原编码，也不会丢失任何信息。<br />
&nbsp;&nbsp;&nbsp; a. UTF-8: 保持字母数字一个字节，其他的用不定长编码到最多6个字节，前64k的unicode编成utf-8只需3个字节。<br />
&nbsp;&nbsp;&nbsp; b. UTF-16: 长度固定，用2个字节表示，超出部分用2个utf-16，即4个字节表示。UTF-32同理。<br />
<br />
摘自杜江的《php与mysql web开发技术详解》<br />
<br />
<img src ="http://www.blogjava.net/aaronsky/aggbug/339962.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/aaronsky/" target="_blank">Aaron.Chu</a> 2010-12-07 10:45 <a href="http://www.blogjava.net/aaronsky/archive/2010/12/07/339962.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Scrum摘录</title><link>http://www.blogjava.net/aaronsky/archive/2010/10/26/336213.html</link><dc:creator>Aaron.Chu</dc:creator><author>Aaron.Chu</author><pubDate>Tue, 26 Oct 2010 12:07:00 GMT</pubDate><guid>http://www.blogjava.net/aaronsky/archive/2010/10/26/336213.html</guid><wfw:comment>http://www.blogjava.net/aaronsky/comments/336213.html</wfw:comment><comments>http://www.blogjava.net/aaronsky/archive/2010/10/26/336213.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/aaronsky/comments/commentRss/336213.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/aaronsky/services/trackbacks/336213.html</trackback:ping><description><![CDATA[前阵子看了些Scrum相关的资料，一些话个人觉得不错，特摘录如下：<br />
<br />
1. <span style="color: red;">Scrum</span>团队采取自组织的方式，团队成员自己决定如何完成当前sprint的任务。<br />
<br />
2. ScrumMaster不是管理者的角色，更像一个领导者，更多的是为<span style="color: red;">scrum</span>团队服务，而不是指手画脚。 ScrumMaster主要负责为团队排除障碍，保证开发的顺利进行， 确保团队按照<span style="color: red;">Scrum</span>的简单规则进行开发。<br />
<br />
3. 在设计良好的团队中领导才能来自于团队的每个成员，而非仅仅是被任命的领导者，所以，你没有必要也不应该等待一个任命的到来。这与<span style="color: red;">Scrum</span>的理念非常相似。<span style="color: red;">Scrum</span>弱化PM的功能，强调团队的自主性。<br />
<br />
4. ScrumMaster like a sheepdog, responsible for keeping the flock together and the wolves away.<br />
<br />
5.&nbsp; A <span style="color: red;">Scrum</span> project is controlled by means of frequency inspection of the project followed by necessary adaption.<br />
<br />
6. All the development artifacts like design documents that existed only to
support the waterfall approach are recommended to be eliminated. <span style="color: red;">Scrum</span> relies on high-bandwith, face-to-face communication and teamwork. 对于分布式团队，尤其是跨国团队来说，设计文档还是很有必要的。<br />
<br />
7. <span style="color: red;">Scrum</span> team is cross-functional: in
situations where everyone is chipping in to build the functionality, you
don't have to be a tester or a designer to design.
感觉就像在说，我就是社会主义的一块砖，哪里需要哪里放。<br />
<br />
<img src ="http://www.blogjava.net/aaronsky/aggbug/336213.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/aaronsky/" target="_blank">Aaron.Chu</a> 2010-10-26 20:07 <a href="http://www.blogjava.net/aaronsky/archive/2010/10/26/336213.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>持续改进才能叫敏捷</title><link>http://www.blogjava.net/aaronsky/archive/2010/10/24/336013.html</link><dc:creator>Aaron.Chu</dc:creator><author>Aaron.Chu</author><pubDate>Sun, 24 Oct 2010 02:37:00 GMT</pubDate><guid>http://www.blogjava.net/aaronsky/archive/2010/10/24/336013.html</guid><wfw:comment>http://www.blogjava.net/aaronsky/comments/336013.html</wfw:comment><comments>http://www.blogjava.net/aaronsky/archive/2010/10/24/336013.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/aaronsky/comments/commentRss/336013.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/aaronsky/services/trackbacks/336013.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp; &nbsp;2010 Agile tour 杭州站， 熊节讲了两个城市的团队的敏捷之路。 这应该是很早以前的故事了，两个团队对于敏捷都没什么概念，项目做的一团糟也是意料之中的。在咨询师的帮助下，他们开始了敏捷之旅。团队1从持续集成入手，团队2从沟通入手，都取得了立竿见影的效果。故事并没有到此结束，项目虽然相比以前改善了许多，但还是有很多问题。可喜的是，两个团队都认识到了敏捷带来的好处，他们并没有停下来，而是继续把一些敏捷实践应用到项目中来。 团队1做的是路由器产品，为了提高产品质量，项目内部开始使用自己的路由器，即所谓eat your own dog food. 团队2开始着手自动化测试。&nbsp;</p>
<p>&nbsp;&nbsp; 应该说两个团队都步入了正轨，虽然问题还有很多，虽然他们只应用了部分敏捷实践，但并不妨碍称他们为敏捷团队。 敏捷团队是那些能够利用敏捷实践来解决项目问题，保证项目高质量提交的团队。那些所谓的&#8220;我们做了TDD了，所以我们是敏捷开发&#8221;，&#8220;我们是敏捷开发，所以我们没有设计文档&#8220;， 都是一叶障目，不见泰山。 敏捷开发是一种不断自我反省，持续改进的过程。所谓的stand up, iterative, retrospective, 都是它的一种表现形式而已，千万别被这些所谓的形式禁锢了自己。</p>
<img src ="http://www.blogjava.net/aaronsky/aggbug/336013.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/aaronsky/" target="_blank">Aaron.Chu</a> 2010-10-24 10:37 <a href="http://www.blogjava.net/aaronsky/archive/2010/10/24/336013.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>利用Apache配置http expires值提高网站性能</title><link>http://www.blogjava.net/aaronsky/archive/2010/10/21/335761.html</link><dc:creator>Aaron.Chu</dc:creator><author>Aaron.Chu</author><pubDate>Thu, 21 Oct 2010 01:36:00 GMT</pubDate><guid>http://www.blogjava.net/aaronsky/archive/2010/10/21/335761.html</guid><wfw:comment>http://www.blogjava.net/aaronsky/comments/335761.html</wfw:comment><comments>http://www.blogjava.net/aaronsky/archive/2010/10/21/335761.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/aaronsky/comments/commentRss/335761.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/aaronsky/services/trackbacks/335761.html</trackback:ping><description><![CDATA[<p>
</p>
<p>HTTP头中有个expires参数，设置一个未来的时间，在这时间以前，浏览器会先从cache读取，如果没有再从服务器中读取。对于像图片，css，script等静态内容，只需发一次http request就可，以后就可从cache中读取，一方面提高了响应时间，也减少了http rquest的次数。</p>
<p>具体的格式如下： <strong>Expires = "Expires" ":" HTTP-date。</strong></p>
<p><strong>Example:</strong> Expires: Thu, 01 Dec 2010 16:00:00 GMT.</p>
<p>Expires有个缺点就是它只能设置绝对时间，这样每当到达预设时间点后必须重设expires值。HTTP/1.1提供了一个新的参数cache-control可以设置相对时间。</p>
<p><br />
</p>
<p><strong><span style="font-size: 12pt; "><span style="font-size: 14pt; ">Cache-Control：Max-age</span></span></strong></p>
<p>Cache-Control使用max-age直接指定component能被缓存多长时间. 它定义了新的方式用秒为单位. 假如当前时间与上次返回时间差小于上次返回的max-age,那么浏览器使用缓存的版本。如果需要缓存10年，你可以这样指定：</p>
<p><strong>Cache-Control: max-age=315360000</strong></p>
<p><strong>PS: </strong>如果同时设置了cache-control和expires，cache-control会覆盖expires。</p>
<p><br />
</p>
<p><span style="font-size: 12pt; "><span style="font-size: 14pt; "><strong>Apache中配置expires</strong></span></span></p>
<p>Apache提供了mod_expires.so模块，可以轻松的设置expires值，以下是配置的范例：</p>
<p><br />
</p>
<p>LoadModule expires_module modules/mod_expires.so</p>
<p>ExpiresActive On</p>
<p>ExpiresDefault "access plus 300 seconds" &nbsp;#默认300秒过期</p>
<p>&lt;Directory "/myProject/webResources"&gt; &nbsp; #文件所在目录</p>
<p>&nbsp;&nbsp; &nbsp;Options FollowSymLinks MultiViews</p>
<p>&nbsp;&nbsp; &nbsp;AllowOverride All</p>
<p>&nbsp;&nbsp; &nbsp;Order allow,deny</p>
<p>&nbsp;&nbsp; &nbsp;Allow from all</p>
<p>&nbsp;&nbsp; &nbsp;ExpiresByType text/html "access plus 1 day" &nbsp;#设置cache时间为1天</p>
<p>&nbsp;&nbsp; &nbsp;ExpiresByType text/css "access plus 1 day"</p>
<p>&nbsp;&nbsp; &nbsp;ExpiresByType text/javascript "access plus 1 day"</p>
<p>&nbsp;&nbsp; &nbsp;ExpiresByType image/gif "access plus 1 day"</p>
<p>&nbsp;&nbsp; &nbsp;ExpiresByType image/jpg "access plus 1 day"</p>
<p>&nbsp;&nbsp; &nbsp;ExpiresByType image/png "access plus 1 day"</p>
<p>&nbsp;&nbsp; &nbsp;ExpiresByType application/x-shockwave-flash "access plus 1 day"</p>
<p>&nbsp;</p>
<p>参考文档：</p>
<p>1.&nbsp;<a href="http://kuppalli.wordpress.com/2009/07/14/apache-configuration-for-etags-gzip-and-expires-header/">http://kuppalli.wordpress.com/2009/07/14/apache-configuration-for-etags-gzip-and-expires-header/</a></p>
<p>2.&nbsp;<a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.32">http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.32</a></p>
<p>3.&nbsp;<a href="http://www.meichua.com/archives/168.html">http://www.meichua.com/archives/168.html</a></p>
<img src ="http://www.blogjava.net/aaronsky/aggbug/335761.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/aaronsky/" target="_blank">Aaron.Chu</a> 2010-10-21 09:36 <a href="http://www.blogjava.net/aaronsky/archive/2010/10/21/335761.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>php-mode 在 emacs 23 上的配置</title><link>http://www.blogjava.net/aaronsky/archive/2010/10/18/335466.html</link><dc:creator>Aaron.Chu</dc:creator><author>Aaron.Chu</author><pubDate>Mon, 18 Oct 2010 08:36:00 GMT</pubDate><guid>http://www.blogjava.net/aaronsky/archive/2010/10/18/335466.html</guid><wfw:comment>http://www.blogjava.net/aaronsky/comments/335466.html</wfw:comment><comments>http://www.blogjava.net/aaronsky/archive/2010/10/18/335466.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/aaronsky/comments/commentRss/335466.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/aaronsky/services/trackbacks/335466.html</trackback:ping><description><![CDATA[<p>emacs22在ubuntu10上的界面简直惨不忍睹，只好升级成emacs23，不过传统配置php-mode的方法在emacs23上不起作用了。下面是具体的配置方法：</p>
<p>1. 下载php-mode 1.5，解压到~/elisp 目录</p>
<p>2. 在用户目录（~/）下找到.emacs 文件，如果没有，就新建一个。</p>
<p>3. 把下列内容加到。emacs文件中：</p>
<p>&nbsp;&nbsp;(autoload 'php-mode "~/elisp/php-mode" "Major mode for editing php code." t)</p>
<p>&nbsp;&nbsp;(add-to-list 'auto-mode-alist '("\\.php$" . php-mode))</p>
<p>&nbsp;&nbsp;(add-to-list 'auto-mode-alist '("\\.inc$" . php-mode)</p>
<p><br />
</p>
<p>4. 重启emacs。</p>
<p><br />
</p>
<p>参考地址：&nbsp;<a href="http://stackoverflow.com/questions/898063/making-php-mode-compatible-with-emacs-23">http://stackoverflow.com/questions/898063/making-php-mode-compatible-with-emacs-23</a></p>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<img src ="http://www.blogjava.net/aaronsky/aggbug/335466.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/aaronsky/" target="_blank">Aaron.Chu</a> 2010-10-18 16:36 <a href="http://www.blogjava.net/aaronsky/archive/2010/10/18/335466.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>对象健身操</title><link>http://www.blogjava.net/aaronsky/archive/2009/10/28/300022.html</link><dc:creator>Aaron.Chu</dc:creator><author>Aaron.Chu</author><pubDate>Wed, 28 Oct 2009 02:48:00 GMT</pubDate><guid>http://www.blogjava.net/aaronsky/archive/2009/10/28/300022.html</guid><wfw:comment>http://www.blogjava.net/aaronsky/comments/300022.html</wfw:comment><comments>http://www.blogjava.net/aaronsky/archive/2009/10/28/300022.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/aaronsky/comments/commentRss/300022.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/aaronsky/services/trackbacks/300022.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 最近看了thoughtworks的精选文集，第一章就是对象健身操，定了了九条编码规范：<br>1. 方法只使用一级缩进。<br>2. 拒绝使用else关键字。<br>3. 封装所有的原声类型和字符串。<br>4. 一行代码只有一个‘.'运算符。<br>5. 不用使用缩写。<br>6. 保持实体对象简单清晰。<br>7. 任何类中的实例变量都不要超过2个。<br>8. 使用一流的集合。<br>9. 不使用任何Getter/Setter/Property。&nbsp;&nbsp;<a href='http://www.blogjava.net/aaronsky/archive/2009/10/28/300022.html'>阅读全文</a><img src ="http://www.blogjava.net/aaronsky/aggbug/300022.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/aaronsky/" target="_blank">Aaron.Chu</a> 2009-10-28 10:48 <a href="http://www.blogjava.net/aaronsky/archive/2009/10/28/300022.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>丹佛国际机场</title><link>http://www.blogjava.net/aaronsky/archive/2009/09/03/293799.html</link><dc:creator>Aaron.Chu</dc:creator><author>Aaron.Chu</author><pubDate>Thu, 03 Sep 2009 15:11:00 GMT</pubDate><guid>http://www.blogjava.net/aaronsky/archive/2009/09/03/293799.html</guid><wfw:comment>http://www.blogjava.net/aaronsky/comments/293799.html</wfw:comment><comments>http://www.blogjava.net/aaronsky/archive/2009/09/03/293799.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/aaronsky/comments/commentRss/293799.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/aaronsky/services/trackbacks/293799.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 因为曾经去过丹佛，所以对丹佛的一切还是比较感兴趣的，包括丹佛机场。机场本身我也没留下太多的印象。今天查了下wiki，发现丹佛机<br>场在美国的地位还是蛮辉煌的。&nbsp;&nbsp;<a href='http://www.blogjava.net/aaronsky/archive/2009/09/03/293799.html'>阅读全文</a><img src ="http://www.blogjava.net/aaronsky/aggbug/293799.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/aaronsky/" target="_blank">Aaron.Chu</a> 2009-09-03 23:11 <a href="http://www.blogjava.net/aaronsky/archive/2009/09/03/293799.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>反模式 - Call Super</title><link>http://www.blogjava.net/aaronsky/archive/2009/09/02/293614.html</link><dc:creator>Aaron.Chu</dc:creator><author>Aaron.Chu</author><pubDate>Wed, 02 Sep 2009 08:28:00 GMT</pubDate><guid>http://www.blogjava.net/aaronsky/archive/2009/09/02/293614.html</guid><wfw:comment>http://www.blogjava.net/aaronsky/comments/293614.html</wfw:comment><comments>http://www.blogjava.net/aaronsky/archive/2009/09/02/293614.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/aaronsky/comments/commentRss/293614.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/aaronsky/services/trackbacks/293614.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 昨天看了一下反模式，居然发现call super也是其中一种，所谓的call super就是在子类的重载方法中去调用父类的被重载的方法，说的通俗点，就是在方法中调用super.xxx(). 这种写法在Java中真是太普遍了，且不说Java的构造方法会自动调用父类的构造方法，我们自己也是经常在用super.xxx()。为什么它是一种反模式，却又用的如此普遍呢？&nbsp;&nbsp;<a href='http://www.blogjava.net/aaronsky/archive/2009/09/02/293614.html'>阅读全文</a><img src ="http://www.blogjava.net/aaronsky/aggbug/293614.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/aaronsky/" target="_blank">Aaron.Chu</a> 2009-09-02 16:28 <a href="http://www.blogjava.net/aaronsky/archive/2009/09/02/293614.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Websphere Commerce Contract data model</title><link>http://www.blogjava.net/aaronsky/archive/2009/09/01/293446.html</link><dc:creator>Aaron.Chu</dc:creator><author>Aaron.Chu</author><pubDate>Tue, 01 Sep 2009 06:29:00 GMT</pubDate><guid>http://www.blogjava.net/aaronsky/archive/2009/09/01/293446.html</guid><wfw:comment>http://www.blogjava.net/aaronsky/comments/293446.html</wfw:comment><comments>http://www.blogjava.net/aaronsky/archive/2009/09/01/293446.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/aaronsky/comments/commentRss/293446.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/aaronsky/services/trackbacks/293446.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Contract在B2B model中显得极为重要，从产品的显示，价格选择，到最后的支付等等，都跟Contract相关，Commerce中有关Contract的概念有 Business Account，Contract，Terms and Conditions，Participants等。&nbsp;&nbsp;<a href='http://www.blogjava.net/aaronsky/archive/2009/09/01/293446.html'>阅读全文</a><img src ="http://www.blogjava.net/aaronsky/aggbug/293446.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/aaronsky/" target="_blank">Aaron.Chu</a> 2009-09-01 14:29 <a href="http://www.blogjava.net/aaronsky/archive/2009/09/01/293446.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Websphere Commerce Member Data Model</title><link>http://www.blogjava.net/aaronsky/archive/2009/08/27/292787.html</link><dc:creator>Aaron.Chu</dc:creator><author>Aaron.Chu</author><pubDate>Thu, 27 Aug 2009 03:27:00 GMT</pubDate><guid>http://www.blogjava.net/aaronsky/archive/2009/08/27/292787.html</guid><wfw:comment>http://www.blogjava.net/aaronsky/comments/292787.html</wfw:comment><comments>http://www.blogjava.net/aaronsky/archive/2009/08/27/292787.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/aaronsky/comments/commentRss/292787.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/aaronsky/services/trackbacks/292787.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: member data model是Commerce中最基本的model，它描述了Organization，user，role，address等信息及相互的关系。如果涉及到Commerce与后台ERP的整合，这块内容就是整合的第一步。&nbsp;&nbsp;<a href='http://www.blogjava.net/aaronsky/archive/2009/08/27/292787.html'>阅读全文</a><img src ="http://www.blogjava.net/aaronsky/aggbug/292787.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/aaronsky/" target="_blank">Aaron.Chu</a> 2009-08-27 11:27 <a href="http://www.blogjava.net/aaronsky/archive/2009/08/27/292787.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Commerce中国论坛开通了</title><link>http://www.blogjava.net/aaronsky/archive/2009/08/26/292724.html</link><dc:creator>Aaron.Chu</dc:creator><author>Aaron.Chu</author><pubDate>Wed, 26 Aug 2009 14:24:00 GMT</pubDate><guid>http://www.blogjava.net/aaronsky/archive/2009/08/26/292724.html</guid><wfw:comment>http://www.blogjava.net/aaronsky/comments/292724.html</wfw:comment><comments>http://www.blogjava.net/aaronsky/archive/2009/08/26/292724.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/aaronsky/comments/commentRss/292724.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/aaronsky/services/trackbacks/292724.html</trackback:ping><description><![CDATA[最近朋友做了个Commerce论坛，为开发Commerce提供了一个专业的交流平台，有兴趣的朋友多多捧场啊。<br />
<br />
网址： <a href="http://www.myecom.cn">www.myecom.cn<br />
</a>QQ群：87604343
<img src ="http://www.blogjava.net/aaronsky/aggbug/292724.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/aaronsky/" target="_blank">Aaron.Chu</a> 2009-08-26 22:24 <a href="http://www.blogjava.net/aaronsky/archive/2009/08/26/292724.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Websphere Commerce简述篇</title><link>http://www.blogjava.net/aaronsky/archive/2009/03/11/259226.html</link><dc:creator>Aaron.Chu</dc:creator><author>Aaron.Chu</author><pubDate>Wed, 11 Mar 2009 14:06:00 GMT</pubDate><guid>http://www.blogjava.net/aaronsky/archive/2009/03/11/259226.html</guid><wfw:comment>http://www.blogjava.net/aaronsky/comments/259226.html</wfw:comment><comments>http://www.blogjava.net/aaronsky/archive/2009/03/11/259226.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/aaronsky/comments/commentRss/259226.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/aaronsky/services/trackbacks/259226.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Commerce是一个电子商务的开发平台，基本上所有的电子商务模式它都支持，我们平常熟悉的也就是B2B，B2C之类的模式，像extended sites，value chain，demand chain之类的模式，它也支持。电子商务涉及的业务，它基本上都实现了，像catalog，sales，order，markeing，member等功能。我们所要做的就是在它的基础上做些customization。还有一点值得一提的是Commerce提供强大的整合功能，它提供了强大的MQ，SAP，web service接口，使得Commerce能与企业现有系统实现很好的对接。这功能是其他的eCommerce开发平台所不及的。<br>&nbsp;&nbsp;<a href='http://www.blogjava.net/aaronsky/archive/2009/03/11/259226.html'>阅读全文</a><img src ="http://www.blogjava.net/aaronsky/aggbug/259226.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/aaronsky/" target="_blank">Aaron.Chu</a> 2009-03-11 22:06 <a href="http://www.blogjava.net/aaronsky/archive/2009/03/11/259226.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Websphere Commerce 安装篇</title><link>http://www.blogjava.net/aaronsky/archive/2009/03/09/258691.html</link><dc:creator>Aaron.Chu</dc:creator><author>Aaron.Chu</author><pubDate>Mon, 09 Mar 2009 15:15:00 GMT</pubDate><guid>http://www.blogjava.net/aaronsky/archive/2009/03/09/258691.html</guid><wfw:comment>http://www.blogjava.net/aaronsky/comments/258691.html</wfw:comment><comments>http://www.blogjava.net/aaronsky/archive/2009/03/09/258691.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/aaronsky/comments/commentRss/258691.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/aaronsky/services/trackbacks/258691.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 最近一直在做Commerce相关的项目，摸索了几个月，终于有点头绪。项目也完成了详细设计，开始进入编码阶段了。关于Commerce的中文资料几乎没有，国内估计也没几家公司在用这个东西，这玩意实在有点复杂。我打算把我学习的一些感受写下来，一方面可以更好的理解Commerce，也希望能与热衷与Commerce的朋友共同交流。&nbsp;&nbsp;<a href='http://www.blogjava.net/aaronsky/archive/2009/03/09/258691.html'>阅读全文</a><img src ="http://www.blogjava.net/aaronsky/aggbug/258691.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/aaronsky/" target="_blank">Aaron.Chu</a> 2009-03-09 23:15 <a href="http://www.blogjava.net/aaronsky/archive/2009/03/09/258691.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>