﻿<?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-Sealyu-随笔分类-综合</title><link>http://www.blogjava.net/sealyu/category/37522.html</link><description>--- The devil's in the Details (&lt;a href="http://www.sealyu.com"&gt;http://www.sealyu.com&lt;/a&gt;)</description><language>zh-cn</language><lastBuildDate>Fri, 19 Nov 2010 21:08:22 GMT</lastBuildDate><pubDate>Fri, 19 Nov 2010 21:08:22 GMT</pubDate><ttl>60</ttl><item><title>激发程序员创意的6本书(转)</title><link>http://www.blogjava.net/sealyu/archive/2010/11/19/338447.html</link><dc:creator>seal</dc:creator><author>seal</author><pubDate>Fri, 19 Nov 2010 01:25:00 GMT</pubDate><guid>http://www.blogjava.net/sealyu/archive/2010/11/19/338447.html</guid><wfw:comment>http://www.blogjava.net/sealyu/comments/338447.html</wfw:comment><comments>http://www.blogjava.net/sealyu/archive/2010/11/19/338447.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sealyu/comments/commentRss/338447.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sealyu/services/trackbacks/338447.html</trackback:ping><description><![CDATA[在之前的一篇博客中我曾提到：程序员成功的秘诀在于创意和原创性思维。
<div>
<br />
<br />
</div>
<p style="text-align: center;"><img src="http://www.chinaz.com/upimg/userup/225009/22500ZF01010P00003508.jpg" alt="" height="281" width="414" border="0" /></p>
<p> 　　但是如果你没有创意该怎么办？别担心，并非只有你这样。事实上，你所遇到的大部分程序员都缺乏创意。原因在于，跟编程中客观的逻辑性思维相比，创意需要一种不同的思维方式。<br />
<br />
幸运的是，创新思维是可以学习的。我列出了一个可以激发创意的书籍清单。(注：排名不分先后，有两本书没有相应中文名，应该是没有中文版)<br />
<br />
<br />
<strong>《Pragmatic Thinking and Learning: Refactor Your Wetware》 - Andy Hunt</strong> <strong>安迪&#183;亨特<br />
</strong></p>
<div>
<br />
</div>
<p style="text-align: center;"><img src="http://www.chinaz.com/upimg/userup/225009/22500ZF01010P0000I12.jpg" alt="" height="160" width="134" border="0" /></p>
<p> <br />
这是一本为程序员量身定制的激发创意的书，作者安迪自己也是一名程序员。（他也是《程序员修炼之道》的作者之一）。<br />
<br />
<strong>Thinkertoys: A Handbook of Creative-Thinking Techniques - Michael Michalko</strong><br />
<strong>《米哈尔科商业创意全攻略》 - 迈克尔&#183;米哈尔科</strong></p>
<div>
<br />
</div>
<p style="text-align: center;"><img src="http://www.chinaz.com/upimg/userup/225009/22500ZF01010P0000S63.jpg" alt="" height="160" width="129" border="0" /></p>
<p><br />
<br />
迈克尔&#183;米哈尔科通过带领你解决一些拼图游戏来迫使你改变思维方式。对于那些缺乏创意的人来说这可能往往是一项艰巨的任务。<br />
<br />
<strong>Thinkpak: A Brainstorming Card Deck - </strong>Michael Michalko迈克尔&#183;米哈尔科</p>
<div>
<br />
<br />
</div>
<p style="text-align: center;"><img src="http://www.chinaz.com/upimg/userup/225009/22500ZF01010P00009443.jpg" alt="" height="160" width="117" border="0" /></p>
<p> 　　这并不是一本真正的书。基于从《米哈尔科商业创意全攻略》中学到的技术，迈克尔&#183;米哈尔科做了一副卡片，你可以用这副卡片来激发自己的创意，并将你的创意运用于实际应用中。<br />
<br />
<strong>Cracking Creativity: The Secrets of Creative Genius - </strong>Michael Michalko<br />
<strong>《创意的技术：100位天才的9种思考习惯》- </strong>迈克尔&#183;米哈尔科</p>
<div>
<br />
</div>
<p style="text-align: center;"><img src="http://www.chinaz.com/upimg/userup/225009/22500ZF01010P00004X5.jpg" alt="" height="160" width="124" border="0" /></p>
<p><br />
迈克尔&#183;米哈尔科的三本书（资料）中的最后一本。在这本书中，迈克尔着重讲了如何像历史上包括莱昂纳多&#183;达&#183;芬奇和华特&#183;迪士尼在内的创意天才一样进行思考。<br />
<br />
<strong>How to Get Ideas</strong> - Jack Foster, Larry Corby<br />
<strong>《更多好主意》-  </strong>杰克&#183;福斯特 &amp; 拉里&#183;科比</p>
<div>
<br />
</div>
<p style="text-align: center;"><img src="http://www.chinaz.com/upimg/userup/225009/22500ZF01010P00004U7.jpg" alt="" height="160" width="104" border="0" /></p>
<p> 　　拥有原创性的想法是有创意的一个表现，但这些想法从何而来呢？这本书会告诉你如何激发产生新的想法，并让你达到更高的水平。<br />
<br />
<strong>The Innovator&#8217;s Toolkit: 50+ Techniques for Predictable and Sustainable Organic Growth</strong>   -  David Silverstein, Philip Samuel, Neil DeCarlo<br />
<strong>《创新者工具箱: 50+可预见与可持续创新技术》</strong>- 大卫&#183;西尔弗斯坦，菲利普&#183;塞缪尔，尼尔&#183;戴卡洛</p>
<div>
<br />
</div>
<p style="text-align: center;"><img src="http://www.chinaz.com/upimg/userup/225009/22500ZF01010P000042A.jpg" alt="" height="160" width="128" border="0" /></p>
创新与科技的发展是相辅相成的。以Apple或Google公司为例，这些公司在不断地创新计算机硬件和软件。Silverstein等人写的这本书对创新者来说是一本非常棒的参考书。要想成为一名成功的创新者，你也必须是一名充满创意的思想者。<br />
<br />
编程是非常简单的，如果你正在读这篇博客，那么你很可能已经掌握了至少一门编程语言。现在你知道了如何才能达到更高的水平：<strong>要有创意</strong>。<br />
<br />
如果还有有其他书籍激励你成为一名有创意的创新者，或者你知道本文中那两本没有中文译名书籍的中文名，请在微博或评论中和大家一起分享。
<img src ="http://www.blogjava.net/sealyu/aggbug/338447.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sealyu/" target="_blank">seal</a> 2010-11-19 09:25 <a href="http://www.blogjava.net/sealyu/archive/2010/11/19/338447.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>中国电信"我的E家"E8套餐华为EchoLifeHG522无线猫设图解</title><link>http://www.blogjava.net/sealyu/archive/2010/09/16/332198.html</link><dc:creator>seal</dc:creator><author>seal</author><pubDate>Thu, 16 Sep 2010 08:34:00 GMT</pubDate><guid>http://www.blogjava.net/sealyu/archive/2010/09/16/332198.html</guid><wfw:comment>http://www.blogjava.net/sealyu/comments/332198.html</wfw:comment><comments>http://www.blogjava.net/sealyu/archive/2010/09/16/332198.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sealyu/comments/commentRss/332198.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sealyu/services/trackbacks/332198.html</trackback:ping><description><![CDATA[中国电信"我的E家"E8套餐华为EchoLifeHG522无线猫设图解电信封杀路由全部搞定<br />
电信送的华为HG522无线MODEM的路由功能开启<br />
<br />
当吧设备拿到后，先不要连上电话线，其他全部连接好<br />
打开网页http://192.168.1.1/<br />
用帐号密码<br />
用户名：telecomadmin<br />
密码：nE7jA%5m(注意大小写)<br />
<br />
于解决了电信修改了超级用户密码的问题了，也发上来给大家SEE，<br />
<br />
帐户为：telecomadmin<br />
有的设备可能被修改了密码，不是初始密码：nE7jA%5m<br />
本人成功测试过...还有一招自已查电信超级管理账号<br />
下面就教你怎么破解超级用户!<br />
可以用useradmin和设备后面的随机密码登陆<br />
然后地址栏输入：http://192.168.1.1/downloadconfigfile.conf<br />
回车[如图]<br />
<img style="cursor: pointer;" src="http://www.h2ofans.com/attachments/month_201005/201005112327361237.jpg" file="attachments/month_201005/201005112327361237.jpg" thumbimg="1" id="aimg_45340" onmouseover="showMenu({'ctrlid':this.id,'pos':'12'})" alt="201005112327361237.jpg" width="600" height="390" />
<div id="aimg_45340_menu" style="position: absolute; z-index: 301; opacity: 1; left: 217px; top: 2957.4px; display: none;">
<a href="http://www.h2ofans.com/attachment.php?aid=NDUzNDB8ZmE2ZDBmMDJ8MTI4NDYyNTYxMHxiNjY1SXY2R0d6Y1cvcWZaWm9ER1o3M01Tcmk5MVo5UUQ2V254RUpoU1pUeXU4Zw%3D%3D&amp;nothumb=yes" title="201005112327361237.jpg" target="_blank"><strong>下载</strong></a> (0 Bytes)<br />
<div>2010-5-10 15:42</div>
</div>
<br />
<br />
保存到硬盘，用记事本打开<br />
CRTL F搜索Username="telecomadmin"字段<br />
<img src="http://www.h2ofans.com/attachments/month_201005/201005112327361238.jpg" file="attachments/month_201005/201005112327361238.jpg" thumbimg="1" id="aimg_45341" onmouseover="showMenu({'ctrlid':this.id,'pos':'12'})" alt="201005112327361238.jpg" width="582" height="184" />
<div id="aimg_45341_menu" style="position: absolute; z-index: 301; opacity: 1; left: 217px; top: 3412.2px; display: none;">
<a href="http://www.h2ofans.com/attachment.php?aid=NDUzNDF8ZDQ4ODdmMDJ8MTI4NDYyNTYxMHxiNjY1SXY2R0d6Y1cvcWZaWm9ER1o3M01Tcmk5MVo5UUQ2V254RUpoU1pUeXU4Zw%3D%3D&amp;nothumb=yes" title="201005112327361238.jpg" target="_blank"><strong>下载</strong></a> (0 Bytes)<br />
<div>2010-5-10 15:42</div>
</div>
<br />
<br />
如图Username="telecomadmin"Userpassword="telecomadmin02769826"<br />
telecomadmin02769826既电信修改的密码<br />
<br />
大家可以试试，哈哈。<br />
<br />
(以上蓝色字全是怎么破解超级用户进入)<br />
<br />
1、进入后界面<br />
<img style="cursor: pointer;" src="http://www.h2ofans.com/attachments/month_201005/201005112327361239.jpg" file="attachments/month_201005/201005112327361239.jpg" thumbimg="1" id="aimg_45342" onmouseover="showMenu({'ctrlid':this.id,'pos':'12'})" alt="201005112327361239.jpg" width="600" height="314" />
<div id="aimg_45342_menu" style="position: absolute; z-index: 301; opacity: 1; left: 217px; top: 3788.2px; display: none;">
<a href="http://www.h2ofans.com/attachment.php?aid=NDUzNDJ8YzIyYjg5ZWF8MTI4NDYyNTYxMHxiNjY1SXY2R0d6Y1cvcWZaWm9ER1o3M01Tcmk5MVo5UUQ2V254RUpoU1pUeXU4Zw%3D%3D&amp;nothumb=yes" title="201005112327361239.jpg" target="_blank"><strong>下载</strong></a> (0 Bytes)<br />
<div>2010-5-10 15:42</div>
</div>
<br />
<br />
2、下面开始设置你的宽带帐号密码和端口<br />
<br />
<img src="http://www.h2ofans.com/attachments/month_201005/201005112327361240.jpg" file="attachments/month_201005/201005112327361240.jpg" thumbimg="1" id="aimg_45343" onmouseover="showMenu({'ctrlid':this.id,'pos':'12'})" alt="201005112327361240.jpg" width="561" height="540" />
<div id="aimg_45343_menu" style="position: absolute; z-index: 301; opacity: 1; left: 217px; top: 4164.6px; display: none;">
<a href="http://www.h2ofans.com/attachment.php?aid=NDUzNDN8YTFiNjE5ODR8MTI4NDYyNTYxMHxiNjY1SXY2R0d6Y1cvcWZaWm9ER1o3M01Tcmk5MVo5UUQ2V254RUpoU1pUeXU4Zw%3D%3D&amp;nothumb=yes" title="201005112327361240.jpg" target="_blank"><strong>下载</strong></a> (0 Bytes)<br />
<div>2010-5-10 15:42</div>
</div>
<br />
<br />
当你看到这里的时候已纪很多管理和设置项可以看到了...<br />
<br />
跟着一步一步弄..<br />
<br />
3、以下开始配置DHCP服务，可限定IP，以控制上网电脑台数，我是全开的<br />
<img src="http://www.h2ofans.com/attachments/month_201005/201005112327361241.gif" file="attachments/month_201005/201005112327361241.gif" thumbimg="1" id="aimg_45344" onmouseover="showMenu({'ctrlid':this.id,'pos':'12'})" alt="201005112327361241.gif" width="543" height="376" />
<div id="aimg_45344_menu" style="position: absolute; z-index: 301; opacity: 1; left: 217px; top: 4831.8px; display: none;">
<a href="http://www.h2ofans.com/attachment.php?aid=NDUzNDR8ZDZjZGJiZmJ8MTI4NDYyNTYxMHxiNjY1SXY2R0d6Y1cvcWZaWm9ER1o3M01Tcmk5MVo5UUQ2V254RUpoU1pUeXU4Zw%3D%3D&amp;nothumb=yes" title="201005112327361241.gif" target="_blank"><strong>下载</strong></a> (0 Bytes)<br />
<div>2010-5-10 15:42</div>
</div>
<br />
<br />
4、无线网络设置，如果你不用无线，此处可禁用<br />
<img src="http://www.h2ofans.com/attachments/month_201005/201005112327361242.gif" file="attachments/month_201005/201005112327361242.gif" thumbimg="1" id="aimg_45345" onmouseover="showMenu({'ctrlid':this.id,'pos':'12'})" alt="201005112327361242.gif" width="383" height="500" />
<div id="aimg_45345_menu" style="position: absolute; z-index: 301; opacity: 1; left: 217px; top: 5250.2px; display: none;">
<a href="http://www.h2ofans.com/attachment.php?aid=NDUzNDV8MmVhZTJhNTl8MTI4NDYyNTYxMHxiNjY1SXY2R0d6Y1cvcWZaWm9ER1o3M01Tcmk5MVo5UUQ2V254RUpoU1pUeXU4Zw%3D%3D&amp;nothumb=yes" title="201005112327361242.gif" target="_blank"><strong>下载</strong></a> (0 Bytes)<br />
<div>2010-5-10 15:42</div>
</div>
<br />
<br />
5、此处设置远程管理服务，可以禁止电信远程控制你的设备<br />
<img src="http://www.h2ofans.com/attachments/month_201005/201005112327361243.gif" file="attachments/month_201005/201005112327361243.gif" thumbimg="1" id="aimg_45346" onmouseover="showMenu({'ctrlid':this.id,'pos':'12'})" alt="201005112327361243.gif" width="594" height="605" />
<div id="aimg_45346_menu" style="position: absolute; z-index: 301; opacity: 1; left: 217px; top: 5792.6px; display: none;">
<a href="http://www.h2ofans.com/attachment.php?aid=NDUzNDZ8M2M4ODkzODJ8MTI4NDYyNTYxMHxiNjY1SXY2R0d6Y1cvcWZaWm9ER1o3M01Tcmk5MVo5UUQ2V254RUpoU1pUeXU4Zw%3D%3D&amp;nothumb=yes" title="201005112327361243.gif" target="_blank"><strong>下载</strong></a> (0 Bytes)<br />
<div>2010-5-10 15:42</div>
</div>
<br />
<br />
本人现目前本机禁用了.<br />
<br />
6、设置QoS，可提高ITV速度<br />
<img src="http://www.h2ofans.com/attachments/month_201005/201005112327361244.gif" file="attachments/month_201005/201005112327361244.gif" thumbimg="1" id="aimg_45347" onmouseover="showMenu({'ctrlid':this.id,'pos':'12'})" alt="201005112327361244.gif" width="594" height="612" />
<div id="aimg_45347_menu" style="position: absolute; z-index: 301; opacity: 1; left: 217px; top: 6482.4px; display: none;">
<a href="http://www.h2ofans.com/attachment.php?aid=NDUzNDd8NmU3MmJlMDR8MTI4NDYyNTYxMHxiNjY1SXY2R0d6Y1cvcWZaWm9ER1o3M01Tcmk5MVo5UUQ2V254RUpoU1pUeXU4Zw%3D%3D&amp;nothumb=yes" title="201005112327361244.gif" target="_blank"><strong>下载</strong></a> (0 Bytes)<br />
<div>2010-5-10 15:42</div>
</div>
<br />
7、路由配置<br />
<br />
<img src="http://www.h2ofans.com/attachments/month_201005/201005112327361245.gif" file="attachments/month_201005/201005112327361245.gif" thumbimg="1" id="aimg_45348" onmouseover="showMenu({'ctrlid':this.id,'pos':'12'})" alt="201005112327361245.gif" width="542" height="438" />
<div id="aimg_45348_menu" style="position: absolute; z-index: 301; opacity: 1; left: 217px; top: 7136.8px; display: none;">
<a href="http://www.h2ofans.com/attachment.php?aid=NDUzNDh8YjVhMjZhNGF8MTI4NDYyNTYxMHxiNjY1SXY2R0d6Y1cvcWZaWm9ER1o3M01Tcmk5MVo5UUQ2V254RUpoU1pUeXU4Zw%3D%3D&amp;nothumb=yes" title="201005112327361245.gif" target="_blank"><strong>下载</strong></a> (0 Bytes)<br />
<div>2010-5-10 15:42</div>
</div>
<br />
8、DMZ虚拟主机映射可提高内网PC与外网的连接效率，安全性降低<br />
<img src="http://www.h2ofans.com/attachments/month_201005/201005112327361246.gif" file="attachments/month_201005/201005112327361246.gif" thumbimg="1" id="aimg_45349" onmouseover="showMenu({'ctrlid':this.id,'pos':'12'})" alt="201005112327361246.gif" width="510" height="744" />
<div id="aimg_45349_menu" style="position: absolute; z-index: 301; opacity: 1; left: 217px; top: 7597.2px; display: none;">
<a href="http://www.h2ofans.com/attachment.php?aid=NDUzNDl8NThkMGNkZGV8MTI4NDYyNTYxMHxiNjY1SXY2R0d6Y1cvcWZaWm9ER1o3M01Tcmk5MVo5UUQ2V254RUpoU1pUeXU4Zw%3D%3D&amp;nothumb=yes" title="201005112327361246.gif" target="_blank"><strong>下载</strong></a> (0 Bytes)<br />
<div>2010-5-10 15:42</div>
</div>
<br />
<br />
9、启用UPnP提高BT和迅雷的速率<br />
<img src="http://www.h2ofans.com/attachments/month_201005/201005112327361247.gif" file="attachments/month_201005/201005112327361247.gif" thumbimg="1" id="aimg_45350" onmouseover="showMenu({'ctrlid':this.id,'pos':'12'})" alt="201005112327361247.gif" width="463" height="200" />
<div id="aimg_45350_menu" style="position: absolute; z-index: 301; opacity: 1; left: 217px; top: 8383.6px; display: none;">
<a href="http://www.h2ofans.com/attachment.php?aid=NDUzNTB8ZGJmODAyMTN8MTI4NDYyNTYxMHxiNjY1SXY2R0d6Y1cvcWZaWm9ER1o3M01Tcmk5MVo5UUQ2V254RUpoU1pUeXU4Zw%3D%3D&amp;nothumb=yes" title="201005112327361247.gif" target="_blank"><strong>下载</strong></a> (0 Bytes)<br />
<div>2010-5-10 15:42</div>
</div>
<br />
<br />
10、如果你把设备搞乱了，此处可恢复<br />
<img style="cursor: pointer;" src="http://www.h2ofans.com/attachments/month_201005/201005112327361248.gif" file="attachments/month_201005/201005112327361248.gif" thumbimg="1" id="aimg_45351" onmouseover="showMenu({'ctrlid':this.id,'pos':'12'})" alt="201005112327361248.gif" width="600" height="468" />
<div id="aimg_45351_menu" style="position: absolute; z-index: 301; opacity: 1; left: 217px; top: 8626px; display: none;">
<a href="http://www.h2ofans.com/attachment.php?aid=NDUzNTF8MDZkZTYzNjd8MTI4NDYyNTYxMHxiNjY1SXY2R0d6Y1cvcWZaWm9ER1o3M01Tcmk5MVo5UUQ2V254RUpoU1pUeXU4Zw%3D%3D&amp;nothumb=yes" title="201005112327361248.gif" target="_blank"><strong>下载</strong></a> (0 Bytes)<br />
<div>2010-5-10 15:42</div>
</div>
<br />
<br />
11、最后的效果，查看是否成功路由<br />
<img src="http://www.h2ofans.com/attachments/month_201005/201005112327361249.gif" file="attachments/month_201005/201005112327361249.gif" thumbimg="1" id="aimg_45352" onmouseover="showMenu({'ctrlid':this.id,'pos':'12'})" alt="201005112327361249.gif" width="550" height="1043" />
<div id="aimg_45352_menu" style="position: absolute; z-index: 301; opacity: 1; left: 217px; top: 9136.4px; display: none;">
<a href="http://www.h2ofans.com/attachment.php?aid=NDUzNTJ8NDhkZjQxYWZ8MTI4NDYyNTYxMHxiNjY1SXY2R0d6Y1cvcWZaWm9ER1o3M01Tcmk5MVo5UUQ2V254RUpoU1pUeXU4Zw%3D%3D&amp;nothumb=yes" title="201005112327361249.gif" target="_blank"><strong>下载</strong></a> (0 Bytes)<br />
<div>2010-5-10 15:42</div>
</div>
<br />
<br />
再放几张附上电信设置的5个连接的图<br />
<font size="4"><font color="red">（每个省的VPI/VCI参数可能不太一样，如果你不能拨号，可以试试别的VPI/VCI参数，或是打客户电话问客服）</font></font><br />
省的误删了，恢复出厂设置还是没有。<br />
<img src="http://www.h2ofans.com/attachments/month_201005/201005112327361250.jpg" file="attachments/month_201005/201005112327361250.jpg" thumbimg="1" id="aimg_45353" onmouseover="showMenu({'ctrlid':this.id,'pos':'12'})" alt="201005112327361250.jpg" width="478" height="422" />
<div id="aimg_45353_menu" style="position: absolute; z-index: 301; opacity: 1; left: 217px; top: 10292.2px; display: none;">
<a href="http://www.h2ofans.com/attachment.php?aid=NDUzNTN8ODNkOWIwZGF8MTI4NDYyNTYxMHxiNjY1SXY2R0d6Y1cvcWZaWm9ER1o3M01Tcmk5MVo5UUQ2V254RUpoU1pUeXU4Zw%3D%3D&amp;nothumb=yes" title="201005112327361250.jpg" target="_blank"><strong>下载</strong></a> (0 Bytes)<br />
<div>2010-5-10 15:42</div>
</div>
<br />
<br />
<br />
<br />
<img src="http://www.h2ofans.com/attachments/month_201005/201005112327361251.jpg" file="attachments/month_201005/201005112327361251.jpg" thumbimg="1" id="aimg_45354" onmouseover="showMenu({'ctrlid':this.id,'pos':'12'})" alt="201005112327361251.jpg" width="501" height="379" />
<div id="aimg_45354_menu" style="position: absolute; z-index: 301; opacity: 1; left: 217px; top: 10774.2px; display: none;">
<a href="http://www.h2ofans.com/attachment.php?aid=NDUzNTR8MDEwMDg5ZjN8MTI4NDYyNTYxMHxiNjY1SXY2R0d6Y1cvcWZaWm9ER1o3M01Tcmk5MVo5UUQ2V254RUpoU1pUeXU4Zw%3D%3D&amp;nothumb=yes" title="201005112327361251.jpg" target="_blank"><strong>下载</strong></a> (0 Bytes)<br />
<div>2010-5-10 15:42</div>
</div>
<br />
<br />
<br />
<br />
<img src="http://www.h2ofans.com/attachments/month_201005/201005112327361252.jpg" file="attachments/month_201005/201005112327361252.jpg" thumbimg="1" id="aimg_45355" onmouseover="showMenu({'ctrlid':this.id,'pos':'12'})" alt="201005112327361252.jpg" width="488" height="386" />
<div id="aimg_45355_menu" style="position: absolute; z-index: 301; opacity: 1; left: 217px; top: 11213.2px; display: none;">
<a href="http://www.h2ofans.com/attachment.php?aid=NDUzNTV8ZDRkMGM0Mjd8MTI4NDYyNTYxMHxiNjY1SXY2R0d6Y1cvcWZaWm9ER1o3M01Tcmk5MVo5UUQ2V254RUpoU1pUeXU4Zw%3D%3D&amp;nothumb=yes" title="201005112327361252.jpg" target="_blank"><strong>下载</strong></a> (0 Bytes)<br />
<div>2010-5-10 15:42</div>
</div>
<br />
<br />
<br />
<br />
<img src="http://www.h2ofans.com/attachments/month_201005/201005112327361253.jpg" file="attachments/month_201005/201005112327361253.jpg" thumbimg="1" id="aimg_45356" onmouseover="showMenu({'ctrlid':this.id,'pos':'12'})" alt="201005112327361253.jpg" width="484" height="365" />
<div id="aimg_45356_menu" style="position: absolute; z-index: 301; opacity: 1; left: 217px; top: 11659.2px; display: none;">
<a href="http://www.h2ofans.com/attachment.php?aid=NDUzNTZ8YmI0Nzc0OGZ8MTI4NDYyNTYxMHxiNjY1SXY2R0d6Y1cvcWZaWm9ER1o3M01Tcmk5MVo5UUQ2V254RUpoU1pUeXU4Zw%3D%3D&amp;nothumb=yes" title="201005112327361253.jpg" target="_blank"><strong>下载</strong></a> (0 Bytes)<br />
<div>2010-5-10 15:42</div>
</div>
<br />
<br />
<br />
<br />
<img src="http://www.h2ofans.com/attachments/month_201005/201005112327361254.jpg" file="attachments/month_201005/201005112327361254.jpg" thumbimg="1" id="aimg_45357" onmouseover="showMenu({'ctrlid':this.id,'pos':'12'})" alt="201005112327361254.jpg" width="490" height="423" />
<img src ="http://www.blogjava.net/sealyu/aggbug/332198.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sealyu/" target="_blank">seal</a> 2010-09-16 16:34 <a href="http://www.blogjava.net/sealyu/archive/2010/09/16/332198.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>UAT测试 </title><link>http://www.blogjava.net/sealyu/archive/2010/08/10/328369.html</link><dc:creator>seal</dc:creator><author>seal</author><pubDate>Tue, 10 Aug 2010 01:46:00 GMT</pubDate><guid>http://www.blogjava.net/sealyu/archive/2010/08/10/328369.html</guid><wfw:comment>http://www.blogjava.net/sealyu/comments/328369.html</wfw:comment><comments>http://www.blogjava.net/sealyu/archive/2010/08/10/328369.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sealyu/comments/commentRss/328369.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sealyu/services/trackbacks/328369.html</trackback:ping><description><![CDATA[什么是UAT测试
UAT，(user acceptance Test),用户接受度测试 即验收测试
以下是它的一些一般步骤；仅供参考
一步:用户培训手册准备（就是针对要进行UAT测试的对象，及要进行培训的用户，准备一些培训资料：一般是测试对象使用/功能手册及要培训的用户的个人资料等等：就跟教师上课进行备课差不多）
二步：测试脚本发放（如果你公司采用自动化测试，那么每一个功能或一个模块等都有对应的测试脚本，可以把这些测试脚本分发给特定的人员；如果采用手工测试，就要把详细描述一个功能或模块的文档分给相关人员（当然自动化测试也要分发））
三步：用户补充业务测试场景和测试数据（就是：请有代表性的一些最终用户根据实际应用环境及一些常用处理的数据，来给一些补充与建议，越贴近实际应用越好）
四步：顾问补充测试步骤（你可以请项目专家，测试经理，或专门的测试，开发等顾问对测试步骤进行补充）
五步：培训资料及测试脚本文档的确定与最终输出(一般到此，各种资料都基本确定，这时可以将它们进行打印，或形成特别的电子文档）
六步：测试策略的制定（如嵌入测试策略等，http://www.51testing.com/cgi-bin ... 2%CA%D4%B2%DF%C2%D4）
七步：测试用户的确定（大体上从培训人员中选取，因为不是每个接受培训的人员都能有资格去测试的，这里你可以通过一些考核来实现人员的筛选等等）
八步：由专门的测试组织机构确定测试地点，并发出通知
九步：测试网络环境的搭建和保障（包括网络，系统，硬软件，包括一些case工具等）
十步：组织进行测试
十一步：评审分析提交的问题（这就进入了一般bug处理过程，形成了一个循环）
UAT测试的重点,我想主要体现在以下几个方面
一是：培训的资料表述要准确全面，易懂等（这是理论基础）
二是：人员选择，要典型有代表性（用户基础）
三是：测试流程步骤（要周密）
四是：测试策略制定（确定一个适合测试对象及测试人员的测试策略）
五是：问题的表达与处理(因为测试者不是专业开发测试人员，对于问题的表达可能不能到位，或根本就不是那种问题，这就存在如何复现与转化问题等）
<img src ="http://www.blogjava.net/sealyu/aggbug/328369.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sealyu/" target="_blank">seal</a> 2010-08-10 09:46 <a href="http://www.blogjava.net/sealyu/archive/2010/08/10/328369.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>惹恼程序员的十件事(转)</title><link>http://www.blogjava.net/sealyu/archive/2010/08/05/328026.html</link><dc:creator>seal</dc:creator><author>seal</author><pubDate>Thu, 05 Aug 2010 02:56:00 GMT</pubDate><guid>http://www.blogjava.net/sealyu/archive/2010/08/05/328026.html</guid><wfw:comment>http://www.blogjava.net/sealyu/comments/328026.html</wfw:comment><comments>http://www.blogjava.net/sealyu/archive/2010/08/05/328026.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sealyu/comments/commentRss/328026.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sealyu/services/trackbacks/328026.html</trackback:ping><description><![CDATA[程序员应该是一个比较特殊的群体，他们因为长期和电脑打交道所养成的性格和脾气也是比较相近的。当然，既然是人，当然是会有性格的，也是会有脾气
的。下面，让我来看看十件能把程序惹毛了的事情。一方面我们可以看看程序员的共性，另一方面我们也可以看看程序员的缺点。无论怎么样，我都希望他们对你的
日常工作都是一种帮助。
<p><strong>第十位 程序注释</strong></p>
<p>程序注释本来是一些比较好的习惯，当程序员老手带新手的时候，总是会告诉新手，一定要写程序注释。于是，新手们当然会听从老手的吩咐。只不过，他们可能对程序注释有些误解，于是，我们经常在程序中看到一些如下的注释：</p>
<p style="padding-left: 30px;">r = n/2;&nbsp; <span style="color: #008000;">//r是n的一半</span></p>
<p style="padding-left: 30px;"><span style="color: #008000;">//循环，仅当r- n/r不大于t</span><br />
while ((r-n/r) &lt;=t){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8230; &#8230;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; r = 0.5 * (r-n/r); <span style="color: #008000;">// 设置r变量<br />
</span>}</p>
<p>每当看到这样的注释——只注释是什么，而不注释为什么，相信你一定会被惹火，这是谁写的程序注释啊？不找来骂一顿看来是不会解气了。程序注释应该是
告诉别人你的意图和想法，而不是告诉别人程序的语法，这是为了程序的易读性和可维护性，这样的为了注释而注释的注释，分明不是在注释，而是在挑衅，惹毛别
人当然毋庸置疑。</p>
<p><strong>第九位 打断</strong></p>
<p>正当程序沉浸于编程算法的思考，或是灵感突现正在书写程序的时候，但却遭到别人的打断，那是一件非常痛苦的事情，如果被持续打断，那可能会让人一下
子就烦躁起来。打断别人的人在这种情况下是非常不礼貌的。被打断的人就像函数调用一下，当其返回时，需要重新恢复断点时的现场，当然，人不是电脑，恢复现
场通常是一个很痛苦的过程，极端的情况下可能需要从头开始寻找思绪，然后一点一点地回到断点。</p>
<p>因此，我看到一些程序员在需要安静不被打扰的时候，要么会选择去一个没人找得到的地方，要么会在自己的桌子上方高挂一个条幅以示众人——&#8220;本人正执
行内核程序，无法中断，请勿骚扰，谢谢！&#8221;，可能正在沉浸于工作的程序被打断是多么大的开销。自然，被打断所惹毛了的人也不在少数了。</p>
<p><strong>第八位&nbsp; 需求变化</strong></p>
<p>这个事情估计不用多说了。只要是是程序员，面对需求变化的时候可能总是很无奈的。一次两次可能还要吧接受，但也顶不住经常变啊。据说敏捷开发中有一
套方法论可以让程序员们享受需求的变化，不知道是真是假。不过，今天让你做一个书桌，没有让你把书桌改成餐桌，后天让你把餐桌改成双人床，大后天让你把床
改成小木屋，然后把小木屋再改成高楼大厦。哎，是人都会被惹毛了的。那些人只用30分钟的会议就可以作出任何决定，但后面那几十个程序员需要搭上几百个小
时的辛苦工作。如果是我，可能我也需要神兽草泥马帮助解解气了。</p>
<p>不过，这也正说明了，程序员并不懂得怎么和用户沟通，而用户也不懂得和程序员沟通，如果一个项目没有一个中间人（如：PM）在其中协调的话，那么整
个项目可能就是&#8220;鸡同鸭讲&#8221;，用户和程序员都会被对方所惹毛了。如果要例举几个用户被惹毛的事情，估计程序员的那种一根筋的只从技术实现上思考问题的方法
应该也能排进前5名。</p>
<p><strong>第七位&nbsp; 经理不懂技术</strong></p>
<p>外行领导内行的事例还少吗？领导一句话，无论对不对，都是对的，我们必需照做，那怕是多么愚蠢多么错误的决定，我们也得照做。程序员其实并不怕经理
不懂技术，最怕的就是不懂技术的经理装着很懂技术。最可气的是，当你据理力争的挑站领导权威的时候，领导还把你视为异类。哎，想起这样的领导别说是骂人
了，打人的冲动都有了。</p>
<p>其实，经理只不过是一个团队的支持者，他应该帮助团队，为团队排忧解难。而不是对团队发号施令。其实管理真的很简单，如果懂的话，就帮着做，如果不懂的话，就相信下属，放手让下属做。最怕的就是又不懂技术，还不信任下属的经理了。哎，这真是程序员的痛啊。</p>
<p><strong>第六位 用户文档</strong></p>
<p>用户文档本来不应该那么的令人害怕。这些文档记录了一切和我们所开发的软件有关的一些话题。因为我们并不知道我们所面对的用户的电脑操作基础是什么
样的，所以，在写下这样的文档的时候，我们必需假设这个用户什么也不懂。于是，需要用最清楚，最漂亮的语言写下一个最丰富的文档。那怕一个拷贝粘贴的操
作，可能我们都要分成五、六步来完成，那怕是一个配置IP地址的操作，我们也要从开始菜单开始一步一步的描述。对于程序员来说，他们在开发过程中几乎天天
都在使用自己开发的软件，到最后，可能都有得有点吐了，但还得从最简单的部份写这些文档，当然容易令他们烦燥，让程序员来完成这样的文档可能效果会非常不
好。所以，对于这样的用户文档，应该由专门的人来完成和维护。</p>
<p><strong>第五位&nbsp; 没有文档</strong></p>
<p>正如上一条所说的，程序员本来就不喜欢写文档，而因为技术人员的表达能力和写作能力一般都不是太好，所以，文档写的也很烂。看看开源社会的文档可能
就知道了。但是，我们可爱的程序员另一方面最生气的却是因为没有文档。当然，让面说是的用户的文档，这里我们说的是开发方面的文档，比如设计文档，功能规
格，维护文档等等。不过，基本上都是一样的。反正，一方面，我们的程序员不喜欢写文档，另一方面，我们的程序又会被抱怨没有文档，文档太少，或者文档看不
懂。呵呵。原来在抱怨方面也有递归啊。据说，敏捷开发可以降低程序开发中的文档，据说他们可以把代码写得跟文档和示图似的，不知道是真是假。不过，我听过
太多太多的程序员抱怨没文档太少，文档太差了，这个方面要怪还是怪程序员自己。</p>
<p><strong>第四位 部署环境</strong></p>
<p>虽然，程序员们开发的是软件，但是我们并不知道我们的程序会被部署或安装在什么样的环境下，比如，网络上的不同，RAID上的不同，BIOS上的不
同，操作系统的不同（WinXP和Win2003），有没有杀毒软件，和其它程序是否兼容，系统中有流氓软件或病毒等等。当然，只要你的软件出现错误，无
论是你的程序的问题，还是环境的问题，反正都是你的问题，你都得全部解决。所以，程序员们并不是简单地在编程，很多时候，还要当好一个不错系统管理员。每
当最后确认问题的原因是环境问题的时候，可能程序员都是会心生怨气。</p>
<p><strong>第三位 问题报告</strong></p>
<p>&#8220;我的软件不工作了&#8221;，&#8220;程序出错了&#8221;，每当我们听到这样的问题报告的时候，程序员总是感到很痛苦，因为这样的问题报告等于什么也没有说，但还要程
序员去处理这种错误。没有明确的问题描述，没有说明如果重现问题，在感觉上，当然会显得有点被人质问的感觉，甚至，在某些时候还掺杂着看不起，训斥的语
气，当然，程序员基本上都是很有个性的，都是软硬不吃的主儿，所以，每当有这样的语气报告问题的时候，他们一般也会把话给顶回去，当然，后面自己然发生一
些不愉快的事情。所以，咱们还是需要一个客服部门来帮助我们的程序员和用户做好沟通。</p>
<p><strong>第二位 程序员自己</strong></p>
<p>惹毛程序员的可能还是程序员自己，程序员是&#8220;相轻&#8221;的，他们基本上都是持才傲物的，总是觉得自己才是最牛的，在程序员间，他们几乎每天都要吵架，而且一吵就吵得脸红脖子粗。在他们之间，他们总是被自己惹毛。</p>
<ul>
    <li>技术上的不同见解。比如Linux和Win，VC++和VB，Vi和Emacus，Java和C++，PHP和Ruby等等，等等。什么都要吵。</li>
    <li>老手对新手的轻视。总是有一些程序员看不起另一些程序员，说话间都带着一种傲慢和训斥。当新手去问问题的时候，老手们总是爱搭不理。</li>
    <li>在技术上不给对方留面子。不知道为什么，程序员总是不给对方留面子，每当听到有人错误理解某个技术的时候，他们总是喜欢当众大声指证，用别人的&#8220;错误&#8221;来表明自己的&#8220;博学&#8221;，并证明他人的&#8220;无知&#8221;。</li>
    <li>喜好鄙视。他们喜好鄙视，其实，这个世界上没有一件事是完美的，有好就有不好，要挑毛病太容易了。程序员们特别喜欢鄙视别人，无论是什么的东西，他们总是喜欢看人短而不看人长。经常挂在他们嘴上的口头禅是&#8220;太差&#8221;、&#8220;不行&#8221;等等。</li>
</ul>
<p>程序员，长期和电脑打交道，编写出的代码电脑总是认真的运行，长期养成了程序员们目空一切的性格，却不知，这个世界上很多东西并不是能像电脑一样，只要我们输入正确的指令它就正确地运行这么简单。程序员，什么时候才能变成成熟起来&#8230;&#8230;</p>
<p><strong>第一位 程序员的代码</strong></p>
<p>无论你当时觉得自己的设计和写的代码如何的漂亮和经典，过上一段时间后，再回头看看，你必然会觉得自己的愚蠢。当然，当你需要去维护他人的代码的时
候，你一定要在一边维护中一边臭骂别人的代码。是否你还记得当初怎么怎么牛气地和别人讨论自己的设计和自己的代码如何如何完美的？可是，用不了两年，一刚
从学校毕业的学生在维护你的代码的过程当中就可以对你的代码指指点点，你的颜面完全扫地。呵呵。当然，也有的人始终觉得自己的设计和代码就是最好的，不过
这是用一种比较静止的眼光来看问题。编程这个世界变化总是很快的的，很多事情，只有当我们做过，我们才熟悉他，熟悉了后才知道什么是更好的方法，这是循序
渐进的。所以，当你对事情越来越熟悉的时候，再回头看自己以前做的设计和代码的时候，必然会觉得自己的肤浅和愚蠢，当然看别人的设计和代码时，可能也会开
始骂人了。</p>
<img src ="http://www.blogjava.net/sealyu/aggbug/328026.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sealyu/" target="_blank">seal</a> 2010-08-05 10:56 <a href="http://www.blogjava.net/sealyu/archive/2010/08/05/328026.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> 最佳编程语录（转）</title><link>http://www.blogjava.net/sealyu/archive/2010/08/05/328004.html</link><dc:creator>seal</dc:creator><author>seal</author><pubDate>Thu, 05 Aug 2010 01:21:00 GMT</pubDate><guid>http://www.blogjava.net/sealyu/archive/2010/08/05/328004.html</guid><wfw:comment>http://www.blogjava.net/sealyu/comments/328004.html</wfw:comment><comments>http://www.blogjava.net/sealyu/archive/2010/08/05/328004.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sealyu/comments/commentRss/328004.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sealyu/services/trackbacks/328004.html</trackback:ping><description><![CDATA[<p>以前本站发布过《<a rel="bookmark" href="http://coolshell.cn/?p=808" target="_blank">22条经典的编程引言</a>》、《<a rel="bookmark" href="http://coolshell.cn/?p=1212" target="_blank">编程引言补充</a>》、《<a rel="bookmark" href="http://coolshell.cn/?p=1278" target="_blank">Linus Torvalds 语录</a>》还有《<a href="http://coolshell.cn/?p=2424" target="_blank">十条不错的编程观点</a>》。今天向大家介绍&#8220;最佳编程语录&#8221;，条条都是很不错的语录。</p>
<p>下面是&#8220;<a href="http://coolshell.cn/?author=4" target="_blank">Neo</a>&#8221;和&#8220;<a href="http://coolshell.cn/?author=2" target="_blank">陈皓</a>&#8221;的翻译，我们的翻译水平有限，所以，我们提供了中英文对照，有不当之处，还请各位指正。</p>
<blockquote>
<p>A good programmer is someone who looks both ways before crossing a one-way street.   — Doug Linder, systems administrator</p>
<p>好的程序员这样一类人，这类人在横穿一条单行道前都要先看一下路两边。&#8211; Doug Linder, 系统管理员</p>
</blockquote>
<blockquote>
<p>A most important, but also most elusive, aspect of any
tool is its influence on the habits of those who train themselves in
its use. If the tool is a programming language this influence is,
whether we like it or not, an influence on our thinking habits. —
Edsger Dijkstra, computer scientist</p>
<p>关于工具，一个最重要的，也是最不易察觉的方面是，工具对使用此工具的人的习惯的潜移默化的影响。如果这个工具是一门程序语言，不管我们是否喜欢
它，它都会影响我们的思维惯式。 &#8211;Edsger Dijkstra, 计算机科学家，著名的&#8220;程序=数据结构+算法&#8221;的提出者。</p>
</blockquote>
<blockquote>
<p>Being abstract is something profoundly different from
being vague&#8230; The purpose of abstraction is not to be vague, but to
create a new semantic level in which one can be absolutely precise. —
Edsger Dijkstra</p>
<p>抽象和模糊完全地不同，抽象的目的并不是把事情变模糊，而去创建一个新的语义层，在那里是绝对精确的描述。 — Edsger Dijkstra</p>
</blockquote>
<blockquote>
<p>Besides a mathematical inclination, an exceptionally
good mastery of one&#8217;s native tongue is the most vital asset of a
competent programmer. — Edsger Dijkstra</p>
<p>除了数学爱好，对于一个有能力的程序员来说，出色地掌握自己的母语是最宝贵的财富。&#8211; Edsger Dijkstra</p>
</blockquote>
<blockquote>
<p>C makes it easy to shoot yourself in the foot; C++ makes
it harder, but when you do, it blows away your whole leg. — Bjarne
Stroustrup, developer of the C++ programming language</p>
<p>C很容易使你搬起石头砸自己的脚，而C++把这事变得更难，但是如果一定要这么做，那么你的整条腿都会被炸飞 -Bjarne Stroustrup, C++语言的发明者</p>
</blockquote>
<blockquote>
<p>Commentary: most debugging problems are fixed easily; identifying the location of the problem is hard.   — unknown</p>
<p>修复bug很容易，但是定位bug却很困难 &#8211; 匿名</p>
</blockquote>
<blockquote>
<p>Considering the current sad state of our computer
programs, software development is clearly still a black art, and cannot
yet be called an engineering discipline. — Bill Clinton, former
President of the United States</p>
<p>看看当前计算机程序糟糕的事态，软件开发明显一直是一门妖术，其仍然不能被称为一个工程学。 &#8211;比尔.克林顿 美国前总统</p>
</blockquote>
<blockquote>
<p>For a long time it puzzled me how something so
expensive, so leading edge, could be so useless, and then it occurred
to me that a computer is a stupid machine with the ability to do
incredibly smart things, while computer programmers are smart people
with the ability to do incredibly stupid things. They are, in short, a
perfect match. — Bill Bryson, author, from Notes from a Big Country</p>
<p>长期以来，有个事一直困扰着我，那就是越是昂贵的，越是前沿的，就越可能是没用的。然后，困扰我的另一个事是，计算机是一个死的机器，却可以不可思
议地去完成那些巧妙的事情，而计算机程序员是那么聪明人却在做着不可思议的愚蠢的事情，简而言之，他们真是天生的一对。&#8211; Bill
Bryson旅游文学作家 Big Country中的笔记</p>
</blockquote>
<blockquote>
<p>Given enough eyeballs, all bugs are shallow (e.g., given
a large enough beta-tester and co-developer base, almost every problem
will be characterized quickly and the fix obvious to someone). — Eric
S. Raymond, programmer and advocate of open source software, from The
Cathedral and the Bazaar</p>
<p>足够多的眼睛，就可让所有问题浮现(比如：只要给于足够多的beta测试者和开发人员一起工作，那么，几所所有的问题都会很快的出现，而修正也会是显而易见的）</p>
</blockquote>
<blockquote>
<p>Good code is its own best documentation. As you&#8217;re about
to add a comment, ask yourself, &#8216;How can I improve the code so that
this comment isn&#8217;t needed?&#8217; Improve the code and then document it to
make it even clearer. — Steve McConnell, software engineer and author,
from Code Complete</p>
<p>好的代码自己本身就是最好的文档。当你打算加注释的时候，问问自己&#8216;我如何才能把我的代码改善到不需增加注释？&#8217;重构自己的代码，然后使文档让其更清楚。 — Steve McConnell《代码大全》的作者</p>
</blockquote>
<blockquote>
<p>Hey! It compiles! Ship it!   — unknown</p>
<p>嘿，编译通过了！出货！&#8211;匿名</p>
</blockquote>
<blockquote>
<p>Inside every well-written large program is a well-written small program.   — Charles Antony Richard Hoare, computer scientist</p>
<p>在每个编写精良的大程序里面都是一个编写精良的小程序。 &#8211;Charles Antony Richard Hoare,计算机科学家</p>
</blockquote>
<blockquote>
<p>It should be noted that no ethically-trained software
engineer would ever consent to write a DestroyBaghdad procedure. Basic
professional ethics would instead require him to write a DestroyCity
procedure, to which Baghdad could be given as a parameter. — Nathaniel
S. Borenstein, computer scientist</p>
<p>需要注意的是，没有哪个经过规范培训的工程师会赞成写一个DestoryBaghdad（摧毁巴克达）的函数。最基本的职业规范会告诉他们应该去写
一个叫DestoryCity的函数，然后把&#8220;Baghdad&#8221;（巴克达）当成这个函数的参数。——　Nathaniel S.
Borenstein,　计算机科学家</p>
</blockquote>
<blockquote>
<p>Managing programmers is like herding cats.   — unknown</p>
<p>管理程序员就如同养一群猫一样 &#8211;匿名</p>
</blockquote>
<blockquote>
<p>Measuring programming progress by lines of code is like
measuring aircraft building progress by weight. — Bill Gates,
co-founder of Microsoft Corporation</p>
<p>用代码行数来衡量编程的进度，就如同用航空器零件的重量来衡量航空飞机的制造进度一样。——Bill Gates，微软创始人</p>
</blockquote>
<blockquote>
<p>More good code has been written in languages denounced
as bad than in languages proclaimed wonderful — much more. — Bjarne
Stroustrup, from The Design and Evolution of C++</p>
<p>好的代码都都在的批评声中写成的，而差的则是在表杨声中写成的。——Bjarne Stroustrup, 摘自《The Design and Evolution of C++》</p>
</blockquote>
<blockquote>
<p>Programs must be written for people to read, and only
incidentally for machines to execute. — Harold Abelson and Gerald Jay
Sussman, computer scientists and authors, from The Structure and
Interpretation of Computer Programs</p>
<p>代码应该是写给其他人来读的，而能让机器运行的仅仅是附带着的。——　Harold Abelson 与 Gerald Jay
Sussman, 计算机科学家和作家，摘自《The Structure and Interpretation of Computer
Programs》</p>
</blockquote>
<blockquote>
<p>Real programmers don&#8217;t comment their code. If it was hard to write, it should be hard to understand.   — unknown</p>
<p>真正程序员从来不写代码的注释，如果代码非常难写，那么同样代码的注释也会非常难懂 &#8211;匿名</p>
</blockquote>
<blockquote>
<p>Simplicity is prerequisite for reliability.   — Edsger Dijkstra</p>
<p>简单是可靠的前提条件 — 迪杰斯特拉</p>
</blockquote>
<blockquote>
<p>The C programming language — a language which combines
the flexibility of assembly language with the power of assembly
language. — unknown</p>
<p>C语言—— 一门同时具有了汇编语言灵活性和汇编语言强大能力的语言。&#8211; 匿名</p>
</blockquote>
<blockquote>
<p>The first 90% of the code accounts for the first 90% of
the development time. The remaining 10% of the code accounts for the
other 90% of the development time. — Tom Cargill, object-oriented
programming expert at Bell Labs</p>
<p>开始的90%的代码用了90%的开发时间，而剩下的最后的10%的代码会需要另外90%的开发时间。&#8211; Tom Cargill,面向对象编程专家,贝尔实验室</p>
</blockquote>
<blockquote>
<p>The important point is that the cost of adding a feature
isn&#8217;t just the time it takes to code it. The cost also includes the
addition of an obstacle to future expansion. Sure, any given feature
list can be implemented, given enough coding time. But in addition to
coming out late, you will usually wind up with a codebase that is so
fragile that new ideas that should be dead-simple wind up taking longer
and longer to work into the tangled existing web. The trick is to pick
the features that don&#8217;t fight each other. — John Carmack, computer game
programmer</p>
<p>增加一个功能特性的成本并不单单是为这些功能编码所花费时间的成本，还这个成本应该包括特性扩展的障碍成本。当然，任何的功能清单都可以被实现，只
需要有足够的时间。但是除些之外，你应该对你的代码库的脆弱性感到紧张，而那些新的想法应该足够的简单，而不是去花费更多更多的时间去纠缠于现有的蜘蛛
网。这里的决窃是挑选那些不会和别人冲突的的功能。</p>
</blockquote>
<blockquote>
<p>The key to performance is elegance, not battalions of
special cases. The terrible temptation to tweak should be resisted
unless the payoff is really noticeable. — Jon Bently and M. Douglas
McIlroy, both computer scientists at Bell Labs</p>
<p>表现的关键是精美和典雅的，并不是使用大量的特殊案例。对于任何调整的冲动都应该是被限制的，除非其回报真的是值得注意的。&#8211; Jon Bently and M. Douglas McIlroy,  二者都是贝尔试验实的计算机科学家</p>
</blockquote>
<blockquote>
<p>The last good thing written in C was Franz Schubert&#8217;s Symphony Number 9.   — Erwin Dieterich, programmer<br />
最后一件用C做的好作品就是弗朗茨.舒伯特的C大调第9交响曲 — Erwin Dieterich, programmer程序员</p>
</blockquote>
<blockquote>
<p>The problem with using C++ &#8230; is that there&#8217;s already a
strong tendency in the language to require you to know everything
before you can do anything. — Larry Wall, developer of the Perl language</p>
<p>使用C++最大的问题是..在C++语言里，存在这一种很强的趋势，就是如果你不明白C++语言的细节，你就无法做好任何事情。&#8211; Larry Wall, developer of the Perl language</p>
</blockquote>
<blockquote>
<p>The sooner you start to code, the longer the program will take.   — Roy Carlson, University of Wisconsin</p>
<p>你越早开始都手编码，你所花费来编程的时间就越长 — Roy Carlson, University of Wisconsin</p>
</blockquote>
<blockquote>
<p>The value of a prototype is in the education it gives
you, not in the code itself. — Alan Cooper, software author, from The
Inmates are Running the Asylum</p>
<p>原型的价值在于他给你的教训，而不是代码自身 — Alan Cooper, software author, from The Inmates are Running the Asylum</p>
</blockquote>
<blockquote>
<p>There are only two kinds of programming languages: those people always bitch about and those nobody uses.   — Bjarne Stroustrup</p>
<p>世界上只有两类编程语言：人们都抱怨的语言和从来没有人使用的语言 — Bjarne Stroustrup</p>
</blockquote>
<blockquote>
<p>There are two ways of constructing a software design.
One way is to make it so simple that there are obviously no
deficiencies. And the other way is to make it so complicated that there
are no obvious deficiencies. — Charles Antony Richard Hoare</p>
<p>世界上有两个设计软件的方法，一种方法是设计的尽量简单，以至于明显的没有什么缺陷，另外一种方式是使他尽量的复杂，以至于其缺陷不那么明显。</p>
</blockquote>
<blockquote>
<p>Ugly programs are like ugly suspension bridges: they&#8217;re
much more liable to collapse than pretty ones, because the way humans
(especially engineer-humans) perceive beauty is intimately related to
our ability to process and understand complexity. A language that makes
it hard to write elegant code makes it hard to write good code. — Eric
S. Raymond</p>
<p>丑陋的程序就像一座丑陋的吊桥：他们相比漂亮的良好的吊桥起来，更有可能会坍塌，这是因为人类（尤其是工程师）感知漂亮的东西是和我们处理和理解复杂问题的能力相关的。所以，一个程序语言如果很难以优雅地方式编程，那么其就很难写出好的代码。</p>
</blockquote>
<blockquote>
<p>Weeks of programming can save you hours of planning.   — unknown</p>
<p>多做几周的编程可以节省你做计划的时间 —— 匿名 （意思为，只有实践过了，你才更容易做计划，没有实践过，做起计划来将会很头痛）</p>
</blockquote>
<blockquote>
<p>When a programming language is created that allows
programmers to program in simple English, it will be discovered that
programmers cannot speak English. — unknown</p>
<p>当程序语言被设计成允许程序以很简单的英语来编程的时候，人们将会发现编写程序的程序员都来自不会说英语的地方。 &#8211;匿名</p>
</blockquote>
<img src ="http://www.blogjava.net/sealyu/aggbug/328004.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sealyu/" target="_blank">seal</a> 2010-08-05 09:21 <a href="http://www.blogjava.net/sealyu/archive/2010/08/05/328004.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>22条经典的编程引言（转）</title><link>http://www.blogjava.net/sealyu/archive/2010/08/05/328003.html</link><dc:creator>seal</dc:creator><author>seal</author><pubDate>Thu, 05 Aug 2010 01:20:00 GMT</pubDate><guid>http://www.blogjava.net/sealyu/archive/2010/08/05/328003.html</guid><wfw:comment>http://www.blogjava.net/sealyu/comments/328003.html</wfw:comment><comments>http://www.blogjava.net/sealyu/archive/2010/08/05/328003.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sealyu/comments/commentRss/328003.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sealyu/services/trackbacks/328003.html</trackback:ping><description><![CDATA[<p style="text-align: left;">下面的这些经典的引言来自英文，也许有些我翻译的是不很好，所以，我提供了中英对照，如果有问题，请大家指正。</p>
<p style="text-align: left;">过早的优化是万恶之源。Premature optimization is the root of all evil!<br />
<em>- Donald Knuth</em></p>
<p style="text-align: left;">在水里行走和以一个需求规格进行软件开发，有一点是相同的，那就是如果水或需求都被冻住不
了，那么行走和软件开发都会变得容易。Walking on water and developing software from a
specification are easy if both are frozen<br />
<em>- Edward V Berard</em></p>
<p style="text-align: left;">Hofstadter 定理：&#8220;一件事情总是会花费比你预期更多的时间，就算是你已经考虑过本条<em>Hofstadter </em>定理&#8221;。It always takes longer than you expect, even when you take into account Hofstadter&#8217;s Law.<br />
<em>- Hofstadter&#8217;s Law</em></p>
<p>有些遇到问题的人总是会说&#8220;我知道，我会使用正则表达式&#8221;，那么，你现在有两个问题了。（意思是：你本想用正则表达式来解决你已有问题，但实际上你
又引入了&#8220;正则表达式&#8221;的一个新问题）Some people, when confronted with a problem, think &#8220;I
know, I&#8217;ll use regular expressions.&#8221; Now they have two problems<br />
<em>- Jamie Zawinski</em></p>
<p>调试程序的难度是写代码的两倍。因此，只要你的代码写的尽可能的清楚，那么你在调试代码时就不需要那么地有技巧。Debugging is
twice as hard as writing the code in the first place. Therefore, if you
write the code as cleverly as possible, you are, by definition, not
smart enough to debug it.<br />
<em>- Brian Kernighan</em></p>
<p>用代码行来衡量开发进度，无异于用重量来衡量制造飞机的进度。Measuring programming progress by lines
of code is like measuring aircraft building progress by weight.<br />
<em>- Bill Gates</em></p>
<p>PHP被一些不合格的业余人员造就成了一个小恶魔；而Perl则是被一些熟练的但不正当的专业人员造就成了一个超级大恶魔。PHP is a
minor evil perpetrated and created by incompetent amateurs, whereas Perl
is a great and insidious evil, perpetrated by skilled but perverted
professionals.<br />
<em>- Jon Ribbens</em></p>
<p>在两个场合我被问到：&#8220;请你告诉我，如果你给机器输入了错误的数字，那么，是否还能得到正确的答案？&#8221;我并不能正确领会这类想法。（注意，本引言的
作者姓Babbage，这个名字和神父同名，意思是，作者在反问提问的人，你是问我还是向神父祈祷？）On two occasions I have
been asked, &#8216;Pray, Mr. Babbage, if you put into the machine wrong
figures, will the right answers come out?&#8217; I am not able rightly to
apprehend the kind of confusion of ideas that could provoke such a
question.&#8221;<br />
<em>- Charles Babbage</em></p>
<p>在编程的时候，我们一定要想像一下，以后维护我们自己的代码的那个人会成为一个有暴力倾向的疯子，并且，他还知道我们住在哪里？Always
code as if the guy who ends up maintaining your code will be a violent
psychopath who knows where you live.<br />
<em>- Rick Osborne</em></p>
<p>现代的编程是&#8220;程序员努力建一个更大更傻的程序&#8221;和&#8220;世界正在尝试创造更多更傻的人&#8221;之间的一种竞赛，目前为止，后者是赢家。
Programming today is a race between software engineers striving to build
bigger and better idiot-proof programs, and the Universe trying to
produce bigger and better idiots. So far, the Universe is winning.<br />
<em>- Rich Cook</em></p>
<p>我才不关于我的代码是否能在你的机器上工作！我们不会给你提供机器。I don&#8217;t care if it works on your machine! We are not shipping your machine!<br />
<em>- Ovidiu Platon</em></p>
<p>我总是希望我的电脑能够像电话一样容易使用；我的这个希望正在变成现实，因为我现在已经不知道怎么去使用我的电话了。I have always
wished for my computer to be as easy to use as my telephone; my wish has
come true because I can no longer figure out how to use my telephone.<br />
<em>- Bjarne Stroustrup</em></p>
<p>计算机是一种在人类历史上所有发明中，可以让你比以前更快地犯更多的错误的发明，同样，其也包括了&#8220;手枪&#8221;和&#8220;龙舌兰酒&#8221;这两种发明的缺陷。A
computer lets you make more mistakes faster than any other invention in
human history, with the possible exceptions of handguns and tequila.<br />
<em>- Mitch Ratcliffe</em></p>
<p>如果调试程序是一种标准的可以铲除BUG的流程，那么，编程就是把他们放进来的流程。If debugging is the process
of removing software bugs, then programming must be the process of
putting them in.<br />
<em>- E. W. Dijkstra</em></p>
<p>教一群被BASIC先入为主的学生，什么是好的编程风格简直是一件不可能的事。对于一些有潜力的程序员，他们所受到的智力上的伤害远远超过了重建他
们的信心。It is practically impossible to teach good programming style to
students that have had prior exposure to BASIC. As potential
programmers, they are mentally mutilated beyond hope of regeneration.<br />
<em>- E. W. Dijkstra</em></p>
<p>理论上来说，理论和实际是一样的。但实际上来说，他们则不是。In theory, theory and practice are the same. In practice, they&#8217;re not.<br />
<em>- Unknown</em></p>
<p>只有两个事情是无穷尽的：宇宙和人类的愚蠢。当然，我现在还不能确定宇宙是无穷尽的。Two things are infinite: the
universe and human stupidity; and I&#8217;m not sure about the universe.<br />
<em>- Albert Einstein</em></p>
<p>Perl这种语言就好像是被RSA加密算法加密过的一样。Perl &#8211; The only language that looks the same before and after RSA encryption.<br />
<em>- Keith Bostic</em></p>
<p>我爱&#8220;最终期限&#8221;，我喜欢&#8220;嗖嗖嗖&#8221;的声音就像他们在飞一样。I love deadlines. I like the whooshing sound they make as they fly by.<br />
<em>- Douglas Adams</em></p>
<p>说Java好的是因为它跨平台就像好像说肛交好是因为其可以适用于一切性别。Saying that Java is good because
it works on all platforms is like saying anal sex is good because it
works on all genders<br />
<em>- Unknown</em></p>
<p>XML就像是一种强暴——如果它不能解决你的问题，那只能说明你没有用好它。XML is like violence &#8211; if it doesn&#8217;t solve your problems, you are not using enough of it.<br />
<em>- Unknown</em></p>
<p>爱因期坦说，自然界中的一切一定会有一个简单的解释，因为上帝并不是反复无常和独裁的。当然，不会有什么信仰能程序员像爱因期坦那样感到舒服。
Einstein argued that there must be simplified explanations of nature,
because God is not capricious or arbitrary. No such faith comforts the
software engineer.<br />
<em>- Fred Brooks</em></p>
<img src ="http://www.blogjava.net/sealyu/aggbug/328003.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sealyu/" target="_blank">seal</a> 2010-08-05 09:20 <a href="http://www.blogjava.net/sealyu/archive/2010/08/05/328003.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>编程引言补充(转)</title><link>http://www.blogjava.net/sealyu/archive/2010/08/05/328002.html</link><dc:creator>seal</dc:creator><author>seal</author><pubDate>Thu, 05 Aug 2010 01:19:00 GMT</pubDate><guid>http://www.blogjava.net/sealyu/archive/2010/08/05/328002.html</guid><wfw:comment>http://www.blogjava.net/sealyu/comments/328002.html</wfw:comment><comments>http://www.blogjava.net/sealyu/archive/2010/08/05/328002.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sealyu/comments/commentRss/328002.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sealyu/services/trackbacks/328002.html</trackback:ping><description><![CDATA[<p>之前收集过《<a title="22条经典的编程引言 - 1,565 次浏览" href="http://coolshell.cn/?p=808">22条经典的编程引言</a>》，发现还有一些未收录的，下面这些引言也很有意思的，希望你喜欢。</p>
<p>&#8220;The first 90% of the code accounts for the first 90% of the
development time. The remaining 10% of the code accounts for the other
90% of the development time.&#8221; &#8211; Tom Cargill&nbsp;<br />
&nbsp;&#8220;最开始的90%的代码使用了程序员90%的时间，剩下的10%的代码也需要90%的开发时间&#8221;——Tom Cargill（这不就是中国谚语——&#8220;行百步半九十&#8221;）</p>
<p>&#8220;In order to understand recursion, one must first understand recursion.&#8221; &#8211; Author Unknown&nbsp;<br />
&nbsp;&#8220;要知道什么是&#8216;递归&#8217;，你首先需要知道&#8216;递归&#8217;&#8221;——无名氏</p>
<p>&#8220;I have always wished for my computer to be as easy to use as my
telephone; my wish has come true because I can no longer figure out how
to use my telephone.&#8221; &#8211; Bjarne Stroustrup&nbsp;<br />
&#8220;我总是希望电脑能和电话一样好用，现在我的这个愿望成真了，因为我已经不知道怎么使用我的电话了&#8221;&#8211; Bjarne Stroustrup</p>
<p>&nbsp;&#8220;There are two ways of constructing a software design: One way is to
make it so simple that there are obviously no deficiencies, and the
other way is to make it so complicated that there are no obvious
deficiencies. The first method is far more difficult.&#8221; -C.A.R. Hoare<br />
&#8220;我们有两个方法来进行软件设计：一个是让其足够的简单以至于让BUG无法藏身；另一个就是让其足够的复杂，让人找不到BUG。前者更难一些&#8221; — C.A.R. Hoare</p>
<p>&nbsp;&nbsp;&#8220;If builders built buildings the way programmers wrote programs,
then the first woodpecker that came along would destroy civilization.&#8221; &#8211;
Gerald Weinberg<br />
&#8220;如果建筑工人盖房子就像程序员写程序一样，那么只需要一只啄木鸟就可以摧毁人类文明&#8221;&#8211; Gerald Weinberg</p>
<p>&#8220;Nine people can&#8217;t make a baby in a month.&#8221; &#8211; Fred Brooks&nbsp;<br />
&#8220;九个人不能只用一个月就能生出孩子来&#8221;&#8211; Fred Brooks&nbsp;（这是对人月计算法的一个讽刺）</p>
<p>&#8220;Before software can be reusable it first has to be usable.&#8221; &#8211; Ralph Johnson<br />
&#8220;在软件可被重用前，它必需要可以被用&#8221;&#8211; Ralph Johnson</p>
<p>程序员之歌<br />
99 little bugs in the code,<br />
99 bugs in the code,<br />
fix one bug, compile it again,<br />
101 little bugs in the code.<br />
101 little bugs in the code&#8230;.<br />
(Repeat until BUGS = 0)</p>
<p>Any fool can write code that a computer can understand. Good programmers write code that humans can understand. <em>&#8211;Martin Fowler<br />
</em>任何一个傻子都能写出让电脑能懂的代码，而只有好的程序员可以写出让人能看懂的代码 — Martin Fowler</p>
<p><strong>Wirth&#8217;s law:</strong> Software gets slower faster than hardware gets faster. &#8211;<a href="http://en.wikipedia.org/wiki/Niklaus_Wirth" target="_blank" onclick="pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/Niklaus_Wirth?referer=');"><em>Niklaus Wirth</em></a><br />
Wirth定律，软件把性能变慢的速度要快于硬件把性期变快的速度。&#8211; Niklaus Wirth</p>
<p>&nbsp;Better train people and risk they leave &#8211; than do nothing and risk they stay.<br />
&#8211;<em>Anonymous<br />
</em>就算是培训的员工会离开，这也好过他们什么也不做却不会离开。——无名氏</p>
<p>Good judgment comes from experience, and experience comes from bad judgment. &#8211;<a href="http://en.wikipedia.org/wiki/Fred_Brooks" onclick="pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/Fred_Brooks?referer=');">Frederick P. Brooks</a><br />
&#8220;好的判断来自于经验，而经验则来自于坏的判断&#8221;</p>
<p>UNIX is simple. It just takes a genius to understand its simplicity <em>&#8211;Dennis Ritchie<br />
</em>UNIX 简单的，但只有天才才能知道他的简单 — Dennis Rithie</p>
<p>Unix was not designed to stop people from doing stupid things, because that would also stop them from doing clever things. 　<em>&#8211;Doug Gwyn<br />
</em>Unix 并不是设计成——阻止人们做那些愚蠢的事，因为那同样会阻止人们做聪明的事。——Doug Gwyn</p>
<p>如果你想看更多这样的引言，你可以浏览下面这个网页：<br />
<a href="http://www.comp.nus.edu.sg/%7Edamithch/pages/SE-quotes.htm" onclick="pageTracker._trackPageview('/outgoing/www.comp.nus.edu.sg/_damithch/pages/SE-quotes.htm?referer=');">http://www.comp.nus.edu.sg/~damithch/pages/SE-quotes.htm</a></p>
<img src ="http://www.blogjava.net/sealyu/aggbug/328002.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sealyu/" target="_blank">seal</a> 2010-08-05 09:19 <a href="http://www.blogjava.net/sealyu/archive/2010/08/05/328002.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>十条不错的编程观点（转）</title><link>http://www.blogjava.net/sealyu/archive/2010/08/05/328001.html</link><dc:creator>seal</dc:creator><author>seal</author><pubDate>Thu, 05 Aug 2010 01:18:00 GMT</pubDate><guid>http://www.blogjava.net/sealyu/archive/2010/08/05/328001.html</guid><wfw:comment>http://www.blogjava.net/sealyu/comments/328001.html</wfw:comment><comments>http://www.blogjava.net/sealyu/archive/2010/08/05/328001.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sealyu/comments/commentRss/328001.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sealyu/services/trackbacks/328001.html</trackback:ping><description><![CDATA[<p>在<a href="http://stackoverflow.com/" target="_blank" onclick="pageTracker._trackPageview('/outgoing/stackoverflow.com/?referer=http%3A%2F%2Fhi3ms.huawei.com%2Fblog%2F1044_12500.html');">Stack Overflow</a>上有这样的一个贴子《<a href="http://stackoverflow.com/questions/406760/whats-your-most-controversial-programming-opinion" target="_blank" onclick="pageTracker._trackPageview('/outgoing/stackoverflow.com/questions/406760/whats-your-most-controversial-programming-opinion?referer=http%3A%2F%2Fhi3ms.huawei.com%2Fblog%2F1044_12500.html');">What&#8217;s  your most controversial programming opinion?</a>》，翻译成中文就是&#8220;<span style="color: rgb(51, 51, 51);">你认为最有争议的编程观点是什么？</span>&#8221;，不过，在400多个主回贴，以及千把个子回贴中，好像并不是很有争议，而是令人相当的茅塞顿开，下面罗列一些，并通过我自己的经历和理解发挥了一些，希望对你有帮助。</p>
<p><strong>1） The only &#8220;best practice&#8221; you should be using all the time is &#8220;Use Your  Brain&#8221;.</strong></p>
<p>唯一的&#8220;Best
Practice&#8221;并不是使用各种各样被前人总结过的各种设计方法、模式，框架，那些著名的方法、模式、框架只代码赞同他们的人多，并不代表他们适合你，
你应该更多的去使用你的大脑，独立地思考那些方法、模式、框架出现的原因和其背后的想法和思想，那才是&#8220;best
practice&#8221;。事实上来说，那些所谓的&#8220;Best Practice&#8221;只不过是限制那些<a href="http://coolshell.cn/?p=1081" target="_blank">糟糕的程序员们</a>的破坏力。</p>
<p><strong>2）Programmers who don&#8217;t code in their spare time for fun will never  become as good as those that do.</strong></p>
<p>如果你对编程没有感到一种快乐，没有在你空闲的时候去以一种的娱乐方式去生活，无论是编程，还是运动，还是去旅游，那么你只不过是在应付你的工作，
无时无刻不扎在程序堆中，这样下来，就算是你是一个非常聪明，非常有才华的人，你也不会成为一个优秀的编程员，要么只会平平凡凡，要么只会整天扎在技术中
成为书呆子。当然，这个观点是有争议，热情和能力的差距也是很大的。不过我们可以从中汲取其正面的观点。</p>
<p><strong>3）M</strong><strong>ost comments in code are in fact a pernicious form of code  duplication.</strong></p>
<p>注释应该是注释Why，而不是How和What，参看《<a rel="bookmark" href="http://coolshell.cn/?p=340" target="_blank">惹恼程序员的十件事</a>》，代码告诉你How，而注释应该告诉你Why。但大多数的程序并不知道什么是好的注释，那些注释其实和code是重复的，毫无意义。</p>
<p><strong>4）XML is highly overrated</strong></p>
<p>XML可能被高估了。XML对于Web上的应用是不错的，但是我们把其用到了各种地方，好像没有XML，我们都不会编程了。</p>
<p><strong>5）Not all programmers are created equal</strong></p>
<p>这是那些junior经理或是流程爱犯的错，他们总是认为，DeveloperA ==
DeveloperB，只要他们的title一样，他们以为他们的能力、工作速度、解决问题的方法，掌握的技能等等都是一样的。呵呵。更扯的是，在某些时
候，就算是最差的程序员，他们也会认为其比别人强十倍，这就是现代的SB管理。</p>
<p><strong>6）&#8221;Googling it&#8221; is okay!</strong></p>
<p>Google只会给你知识，并不会教给你技能。那里只有&#8220;鱼&#8221;，没有&#8220;渔&#8221;，过度的使用Google，只会让你越来越离不开他，你越来越去要去立马
告诉你答案，而你越来越不会自己去思考，自己去探索，去专研。如果KFC快餐是垃圾食品对我们的身体没有好处，那么使用Google也一种快餐文化对我们
的智力发展大大的没有好处。</p>
<p><strong>7）</strong><strong>If you only know one language, no matter how well you know it, you&#8217;re not a  great programmer.</strong></p>
<p>如果你只懂一种语言，准确的说，如果你只懂一类语类，如：Java和C#，PHP和Perl，那么，你将会被局限起来，只有了解了各种各样的语言，
了解了不同语言的不同方法
，你才会有比较，只有了比较，你才会明白各种语言的长处和短处，才会让你有更为成熟的观点，而且不整天和别的程序在网上斗嘴争论是Windows好还是
Unix好，是C好还是C++好，有这点工夫能干好多事了。世界因为不同而精彩，只知道事物的一面是有害的。</p>
<p><strong>8）Your job is to put yourself out of work.</strong></p>
<p>你的工作不是保守，那种教会徒弟，饿死师父的想法，不但是相当短浅的，而且还是相当脑残的。因为，在计算机世界里，你掌握的老技术越多，你就越没
用，因为技术更新的太快。你对工作越保守，这个工作就越来越离不开你，你就越不越不能抽身去学新的东西，你也就越来越OUT了。记住：If you
can&#8217;t be replaced then you can&#8217;t be promoted!</p>
<p><strong>9）<strong>Design patterns are hurting good design more than they&#8217;re helping  it.</strong></strong></p>
<p>很多程序员把设计模式奉为天神，他们过度的追求设计模式以至都都忘了需求是什么，结果整个系统设计被设计模式搞得乱七八糟，我们叫这种编程为&#8220;<a href="http://coolshell.cn/?p=2058" target="_blank">设计模式驱动编程</a>&#8221;，正如第一点所说，如果你不懂得用自己的大脑思考的话，知其然，不知所以然的话，那么你不但得不到其好处，反而受其所累。</p>
<p><strong>10）</strong><strong>Unit Testing won&#8217;t help you write good code</strong></p>
<p>准确地说，我们可以认为这是Test-Driven开发，其实，这种开发就是先写unit test
case，这样的开发方式的主要目的是，为了防止你不会因为一个改动而引入Bug，但这并不会让你能写出更好的代码。这只会让你写出不会出错的代码。同第
一点，这样的方法，只不过是防止<a href="http://coolshell.cn/?p=1081" target="_blank">糟糕的程序员</a>，而并不是让程序员或代码质量更有长进。反而，通过Unit Test会为程序员的为自己代码做辩解的一种托辞。</p>
<p>最后，顺便说一下，以前去那个敏捷的公司面试，发现那个公司的某些技术人员中毒不浅，具体表现在上述的1）9）10）观点上。</p>
<img src ="http://www.blogjava.net/sealyu/aggbug/328001.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sealyu/" target="_blank">seal</a> 2010-08-05 09:18 <a href="http://www.blogjava.net/sealyu/archive/2010/08/05/328001.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Windows 7 :Adobe Flash CS4 Pro FlashResources.dll is missing</title><link>http://www.blogjava.net/sealyu/archive/2010/06/06/322878.html</link><dc:creator>seal</dc:creator><author>seal</author><pubDate>Sun, 06 Jun 2010 02:20:00 GMT</pubDate><guid>http://www.blogjava.net/sealyu/archive/2010/06/06/322878.html</guid><wfw:comment>http://www.blogjava.net/sealyu/comments/322878.html</wfw:comment><comments>http://www.blogjava.net/sealyu/archive/2010/06/06/322878.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sealyu/comments/commentRss/322878.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sealyu/services/trackbacks/322878.html</trackback:ping><description><![CDATA[FAQ:
FlashResources.dll is missing
Solution:
---------Windows 7---------
Flash.exe 属性 - 兼容性 - 特权等级 - 以管理员身份运行此程序
<img src ="http://www.blogjava.net/sealyu/aggbug/322878.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sealyu/" target="_blank">seal</a> 2010-06-06 10:20 <a href="http://www.blogjava.net/sealyu/archive/2010/06/06/322878.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> Windows 7 Ultimate 旗舰版最新激活序列号神key 5月更新(转)</title><link>http://www.blogjava.net/sealyu/archive/2010/05/21/321516.html</link><dc:creator>seal</dc:creator><author>seal</author><pubDate>Fri, 21 May 2010 01:53:00 GMT</pubDate><guid>http://www.blogjava.net/sealyu/archive/2010/05/21/321516.html</guid><wfw:comment>http://www.blogjava.net/sealyu/comments/321516.html</wfw:comment><comments>http://www.blogjava.net/sealyu/archive/2010/05/21/321516.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.blogjava.net/sealyu/comments/commentRss/321516.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sealyu/services/trackbacks/321516.html</trackback:ping><description><![CDATA[<div id="_mcePaste">其中17个可以在线激活，3个可以通过电话激活</div>
<div>TG664-TJ7YK-2VY3K-4YFY6-BCXF4</div>
<div id="_mcePaste">MVG64-RQDVY-KB9RM-MX9WT-MW824</div>
<div id="_mcePaste">TDTY2-6HJ49-46PCK-6HY88-KQXXX</div>
<div id="_mcePaste">FKDJ2-RCXKD-TFW4H-2PTGK-MMMH8</div>
<div id="_mcePaste">H67R8-4HCH4-WGVKX-GV888-8D79B</div>
<div id="_mcePaste">J4M92-42VH8-M9JWJ-BR7H6-KTFP6</div>
<div id="_mcePaste">76RJX-HDXWD-8BYQJ-GRPPQ-8PP92</div>
<div id="_mcePaste">P3P9R-3DH3Q-KGD38-DWRR4-RF7BC</div>
<div id="_mcePaste">C2236-JBPWG-TGWVG-GC2WV-D6V6Q</div>
<div id="_mcePaste">4HVJQ-4YW7M-QWKFX-Q3FM2-WMMHP</div>
<div id="_mcePaste">YH6QF-4R473-TDKKR-KD9CB-MQ6VQ</div>
<div id="_mcePaste">6VP2W-C8BCH-FBTQT-6CMHK-Y7QBG</div>
<div id="_mcePaste">WYRTJ-8KGKQ-3FDMW-2PQRX-MDYDB</div>
<div id="_mcePaste">MFBG6-2JM2T-VQQ6M-K86FT-P9WCW</div>
<div id="_mcePaste">TRV9M-9DQH8-DQVJF-DFJFQ-PV2JT</div>
<div id="_mcePaste">BB3K3-MMTHM-WFWJK-PCC8G-3DRGQ</div>
<div id="_mcePaste">J6QGR-6CFJQ-C4HKH-RJPVP-7V83X</div>
<div id="_mcePaste">TC48D-Y44RV-34R62-VQRK8-64VYG</div>
<div id="_mcePaste">CTT6T-PWYJD-327V6-W2BWW-RJ29T</div>
<div id="_mcePaste">BP8HR-QV3B8-WG24X-RQ3H3-DK67M</div>
<div>&nbsp;</div>
<img src ="http://www.blogjava.net/sealyu/aggbug/321516.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sealyu/" target="_blank">seal</a> 2010-05-21 09:53 <a href="http://www.blogjava.net/sealyu/archive/2010/05/21/321516.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Twiki中上传和使用图片</title><link>http://www.blogjava.net/sealyu/archive/2010/05/20/321433.html</link><dc:creator>seal</dc:creator><author>seal</author><pubDate>Wed, 19 May 2010 20:24:00 GMT</pubDate><guid>http://www.blogjava.net/sealyu/archive/2010/05/20/321433.html</guid><wfw:comment>http://www.blogjava.net/sealyu/comments/321433.html</wfw:comment><comments>http://www.blogjava.net/sealyu/archive/2010/05/20/321433.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sealyu/comments/commentRss/321433.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sealyu/services/trackbacks/321433.html</trackback:ping><description><![CDATA[在Twiki中插入和使用图片实际上很简单：<br />
1.点&#8220;Attach&#8221;按钮上传图片，例如，上传Smile.gif。<br />
2.在需要使用图片时，点工具栏中的图片按钮，输入url： <code>%ATTACHURL%/Smile.gif</code><br />
<br />
<br />
<br />
<img src ="http://www.blogjava.net/sealyu/aggbug/321433.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sealyu/" target="_blank">seal</a> 2010-05-20 04:24 <a href="http://www.blogjava.net/sealyu/archive/2010/05/20/321433.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一篇好文章，与君共勉</title><link>http://www.blogjava.net/sealyu/archive/2010/04/28/319575.html</link><dc:creator>seal</dc:creator><author>seal</author><pubDate>Wed, 28 Apr 2010 02:34:00 GMT</pubDate><guid>http://www.blogjava.net/sealyu/archive/2010/04/28/319575.html</guid><wfw:comment>http://www.blogjava.net/sealyu/comments/319575.html</wfw:comment><comments>http://www.blogjava.net/sealyu/archive/2010/04/28/319575.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sealyu/comments/commentRss/319575.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sealyu/services/trackbacks/319575.html</trackback:ping><description><![CDATA[<p style="text-indent: 2em;"><font style="font-size: 14px;" size="4"><font style="font-size: 14px;"><span style="font-family: 宋体;">正如</span><span style="font-family: Times new roman;">"</span><span style="font-family: 宋体;">打工皇帝</span><span style="font-family: Times new roman;">"</span><span style="font-family: 宋体;">唐骏说：</span><span style="font-family: Times new roman;">"</span><span style="font-family: 宋体;">我觉得有两种人不要跟别人争利益和价值回报。第一种人就是刚刚进入企业的人，头</span><span style="font-family: Times new roman;">5</span><span style="font-family: 宋体;">年千万不要说你能不能多给我一点儿工资，最重要的是能在企业里学到什么，对发展是不是有利&#8230;&#8230;</span></font></font><span style="font-size: x-large;"><span style="font-size: large;"><font style="font-size: 14px;" size="4"><font style="font-size: 14px;"><span><span style="font-family: Times new roman;">"<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr></span></span>
<span style="font-family: 宋体;">人总是从平坦中获得的教益少，从磨难中获得的教益多；从平坦中获得的教益浅，从磨难中获
得的教益深。一个人在年轻时经历磨难，如能正确视之，冲出黑暗，那就是一个值得敬慕的人。最要紧的是先练好内功，毕业后这</span><span style="font-family: Times new roman;">5</span><span style="font-family: 宋体;">年就是练内功的最佳时期，练好内功，才有可能在未来攀得更高。</span></font></font></span></span><font style="font-size: 14px;"><span>&nbsp;<wbr><br />
<span style="font-size: x-large; font-family: Times new roman;"><span style="font-size: large;"><font style="font-size: 14px;" size="4">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr></font></span></span></span><span style="color: #ff3300; font-family: 宋体;"><span style="font-size: x-large;"><span style="font-size: large;"><font style="font-size: 14px;" size="4">出路在哪里？出路在于思路！</font></span></span></span></font>
<span style="font-size: x-large;"><span style="font-size: large;"><font style="font-size: 14px;" size="4"><font style="font-size: 14px;"><span style="font-family: Times new roman;"><br />
</span><span style="font-family: 宋体;">　　其实，没有钱、没有经验、没有阅历、没有社会关系，这些都不可怕。没有钱，可以通过辛勤劳动去
赚；没有经验，可以通过实践操作去总结；没有阅历，可以一步一步去积累；没有社会关系，可以一点一点去编织。但是，没有梦想、没有思路才是最可怕的，才让
人感到恐惧，很想逃避</span></font></font></span></span><span style="font-size: x-large;"><span style="font-size: large;"><font style="font-size: 14px;" size="4"><font style="font-size: 14px;"><span style="font-family: Times new roman;">!<br />
</span><span style="font-family: 宋体;">　　<span style="color: red;">人必须有一个正确的方向</span>。无论你多么意气风发，无论你是多么足智多谋，无论你花费了多大的心
血，如果没有一个明确的方向，就会过得很茫然，渐渐就丧失了斗志，忘却了最初的梦想，就会走上弯路甚至不归路，枉费了自己的聪明才智，误了自己的青春年
华。</span></font></font></span></span>
<font style="font-size: 14px;"><span><br />
<span style="font-size: x-large; font-family: Times new roman;"><span style="font-size: large;"><font style="font-size: 14px;" size="4">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr></font></span></span></span><span style="font-size: x-large;"><span style="font-size: large;"><font style="font-size: 14px;" size="4"><span style="font-family: 宋体;">荷马史诗《奥德
赛》中有一句至理名言：</span><span style="font-family: Times new roman;">"</span><span style="font-family: 宋体;">没有比漫无目的地徘徊更令人无法忍受的了。</span><span style="font-family: Times new roman;">"</span><span style="font-family: 宋体;">毕业后这</span><span style="font-family: Times new roman;">5</span><span style="font-family: 宋体;">年里的迷茫，会造
成</span><span style="font-family: Times new roman;">10</span><span style="font-family: 宋体;">年后的恐慌，</span><span style="font-family: Times new roman;">20</span><span style="font-family: 宋体;">年后的挣扎，甚
至一辈子的平庸。如果不能在毕业这</span><span style="font-family: Times new roman;">5</span><span style="font-family: 宋体;">年尽快冲出困惑、走出迷雾，我们实在是无颜面对</span><span style="font-family: Times new roman;">10</span><span style="font-family: 宋体;">年后、</span><span style="font-family: Times new roman;">20</span><span style="font-family: 宋体;">年后的自己。毕业这</span><span style="font-family: Times new roman;">5</span><span style="font-family: 宋体;">年里，我们既有很多的不确定，也有很多的可能性。</span></font></span></span></font>
<font style="font-size: 14px;"><br />
<span style="font-size: x-large;"><span style="font-size: large;"><font style="font-size: 14px;" size="4"><span style="font-family: 宋体;">　　毕业这</span><span style="font-family: Times new roman;">5</span><span style="font-family: 宋体;">年里，我们既有很多的待定，也有很多的决定。</span></font></span></span></font>
<font style="font-size: 14px;"><br />
<span style="font-size: x-large;"><span style="font-size: large;"><font style="font-size: 14px;" size="4"><span style="font-family: 宋体;">　　迷茫与困惑谁都会经历，恐惧与逃避谁都曾经有过，但不要把迷茫
与困惑当作可以自我放弃、甘于平庸的借口，更不要成为自怨自艾、祭奠失意的苦酒。生命需要自己去承担，命运更需要自己去把握。在毕业这</span><span style="font-family: Times new roman;">5</span><span style="font-family: 宋体;">年里，越早找到方向，越早走出困惑，就越容易在人生道路上取得成就、创造精彩。无头苍蝇找不到方向，
才会四处碰壁；一个人找不到出路，才会迷茫、恐惧。</span></font></span></span></font>
<font style="font-size: 14px;"><span><br />
<span style="font-size: x-large; font-family: Times new roman;"><span style="font-size: large;"><font style="font-size: 14px;" size="4">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr></font></span></span></span><span style="font-family: 宋体;"><span style="font-size: x-large;"><span style="font-size: large;"><font style="font-size: 14px;" size="4">生活中，面对
困境，我们常常会有走投无路的感觉。不要气馁，坚持下去，要相信年轻的人生没有绝路，困境在前方，希望在拐角。只要我们有了正确的思路，就一定能少走弯
路，找到出路！</font></span></span></span></font><font style="font-size: 14px;"><span>&nbsp;<wbr><br />
<span style="font-size: x-large; font-family: Times new roman;"><span style="font-size: large;"><font style="font-size: 14px;" size="4">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr></font></span></span></span><span style="color: red; font-family: 宋体;"><span style="font-size: x-large;"><span style="font-size: large;"><font style="font-size: 14px;" size="4">成功的人不
是赢在起点，而是赢在转折点。</font></span></span></span></font>
<span style="font-size: x-large;"><span style="font-size: large;"><font style="font-size: 14px;" size="4"><font style="font-size: 14px;"><span><span style="font-family: Times new roman;"><br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr></span></span>
<span style="font-family: 宋体;">不少刚刚毕业的年轻人，总是奢望马上就能找到自己理想中的工作。然而，很多好工作是无法
等来的，你必须选择一份工作作为历练。职业旅程中的第一份工作，无疑是踏入社会这所大学的起点。也许你找了一份差强人意的工作，那么从这里出发，好好地沉
淀自己，从这份工作中汲取到有价值的营养，厚积薄发。千里之行，始于足下，只要出发，就有希望到达终点。</span></font></font></span></span>
<font style="font-size: 14px;"><span><br />
<span style="font-size: x-large; font-family: Times new roman;"><span style="font-size: large;"><font style="font-size: 14px;" size="4">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr></font></span></span></span><span style="font-family: 宋体;"><span style="font-size: x-large;"><span style="font-size: large;"><font style="font-size: 14px;" size="4">起点可以相
同，但是选择了不同的拐点，终点就会大大不同！</font></span></span></span></font>
<font style="font-size: 14px;"><span><br />
<span style="font-size: x-large; font-family: Times new roman;"><span style="font-size: large;"><font style="font-size: 14px;" size="4">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr></font></span></span></span><span style="font-size: x-large;"><span style="font-size: large;"><font style="font-size: 14px;" size="4"><span style="font-family: 宋体;">毕业这几年，我
们的生活、感情、职业等都存在很多不确定的因素，未来也充满了各种可能。这个时候，必须学会选择，懂得放弃，给自己一个明确的定位，使自己稳定下来。如果
你不主动定位，就会被别人和社会</span><span style="font-family: Times new roman;">"</span><span style="font-family: 宋体;">定型</span><span style="font-family: Times new roman;">"</span><span style="font-family: 宋体;">！</span></font></span></span></font>
<font style="font-size: 14px;"><br />
<span style="font-size: x-large;"><span style="font-size: large;"><font style="font-size: 14px;" size="4"><span style="font-family: 宋体;">　　可以这么说：一个人在毕业这</span><span style="font-family: Times new roman;">5</span><span style="font-family: 宋体;">年培养起来的行为习惯，将决定他一生的高度。我们能否成功，在某种程度上取决于自己对自己的评价，这
就是定位。你给自己定位是什么，你就是什么。定位能决定人生，定位能改变命运。丑小鸭变成白天鹅，只要一双翅膀；灰姑娘变成美公主，只要一双水晶鞋。</span></font></span></span></font>
<font style="font-size: 14px;"><span><br />
<span style="font-size: x-large; font-family: Times new roman;"><span style="font-size: large;"><font style="font-size: 14px;" size="4">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr></font></span></span></span>
<span style="font-size: x-large;"><span style="font-size: large;"><font style="font-size: 14px;" size="4"><span style="color: red; font-family: 宋体;">人的命，三分天注定，七分靠打拼，有梦就</span><span style="color: red;"><span style="font-family: Times new roman;">"</span></span><span style="color: red; font-family: 宋体;">会红</span><span style="color: red;"><span style="font-family: Times new roman;">"</span></span><span style="color: red; font-family: 宋体;">，爱拼才会赢</span><span style="font-family: 宋体;">。只要不
把自己束缚在心灵的牢笼里，谁也束缚不了你去展翅高飞。</span></font></span></span></font>
<font style="font-size: 14px;"><span><br />
<span style="font-size: x-large; font-family: Times new roman;"><span style="font-size: large;"><font style="font-size: 14px;" size="4">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr></font></span></span></span><span style="font-size: x-large;"><span style="font-size: large;"><font style="font-size: 14px;" size="4"><span style="font-family: 宋体;">现实情况远非他
们所想的那样。于是，当优越感逐渐转为失落感甚至挫败感时，当由坚信自己是一块</span><span style="font-family: Times new roman;">"</span><span style="font-family: 宋体;">金子</span><span style="font-family: Times new roman;">"</span><span style="font-family: 宋体;">到怀疑自己是一粒</span><span style="font-family: Times new roman;">"</span><span style="font-family: 宋体;">沙子</span><span style="font-family: Times new roman;">"</span><span style="font-family: 宋体;">时，愤怒、迷茫、自卑就开始与
日俱增。</span></font></span></span></font>
<font style="font-size: 14px;"><span><br />
<span style="font-size: x-large; font-family: Times new roman;"><span style="font-size: large;"><font style="font-size: 14px;" size="4">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr></font></span></span></span>
<span style="font-family: 宋体;"><span style="font-size: x-large;"><span style="font-size: large;"><font style="font-size: 14px;" size="4">其实，应该仔
细掂量一下自己，你是否真是金子？是真金，手中要有绝活，才能上要有过人之处才行。一句话：真金是要靠实力来证明的，只有先把自己的本领修炼好了，才有资
格考虑伯乐的事情</font></span></span></span></font>
<font style="font-size: 14px;"><span><br />
<span style="font-size: x-large; font-family: Times new roman;"><span style="font-size: large;"><font style="font-size: 14px;" size="4">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr></font></span></span></span><span style="font-family: 宋体;"><span style="font-size: x-large;"><span style="font-size: large;"><font style="font-size: 14px;" size="4">每颗珍珠原本
都是一粒沙子，但并不是每一粒沙子都能成为一颗珍珠。</font></span></span></span></font>
<font style="font-size: 14px;"><span><br />
<span style="font-size: x-large; font-family: Times new roman;"><span style="font-size: large;"><font style="font-size: 14px;" size="4">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr></font></span></span></span><span style="font-family: 宋体;"><span style="font-size: x-large;"><span style="font-size: large;"><font style="font-size: 14px;" size="4">想要卓尔不
群，就要有鹤立鸡群的资本。忍受不了打击和挫折，承受不住忽视和平淡，就很难达到辉煌。年轻人要想让自己得到重用，取得成功，就必须把自己从一粒沙子变成
一颗价值连城的珍珠。</font></span></span></span></font><font style="font-size: 14px;"><span>&nbsp;<wbr><br />
<span style="font-family: Times new roman;"><span style="font-size: x-large;"><span style="font-size: large;"><font style="font-size: 14px;" size="4">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr></font></span></span></span></span><span style="color: red; font-family: 宋体;"><span style="font-size: x-large;"><span style="font-size: large;"><font style="font-size: 14px;" size="4">天有下雨与
日出，人生高峰与低谷。</font></span></span></span></font><font style="font-size: 14px;"><span style="color: red;">&nbsp;<wbr><br />
<span style="font-size: x-large; font-family: Times new roman;"><span style="font-size: large;"><font style="font-size: 14px;" size="4">&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr></font></span></span></span><span style="font-size: x-large;"><span style="font-size: large;"><span style="color: red; font-family: 宋体;"><font style="font-size: 14px;" size="4">莫为浮云遮望眼，风物长宜放眼量。</font></span></span></span></font></p>
<p style="text-indent: 2em;"><font style="font-size: 14px;"><span style="font-size: 12pt; line-height: 240%;"><span style="font-family: Times new roman;">&nbsp;<wbr><font style="font-size: 14px;">只要拂去阴霾，就能亮出朗朗晴空。如
果你在工作上有些不如意，要相信自己不会一直处于人生的低谷期，总有一天能冲破重重云层。告诉自己：我并没有失败，只是暂时没有成功！只要在内心点亮一盏
希望之灯，一定能驱散黑暗中的阴霾，迎来光明。<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>
&nbsp;<wbr>的确，论资历，他们是不折不扣的职场菜鸟，业务涉及不深，人脉一穷二白，在工作中经常碰壁。他们的压力并不一定都像千钧大石，而是像大雨来临
前的天色，灰色低沉，明明有空间，却被灰色填满每个缝隙，只能等待大雨倾盆之后的晴空。<br />
"起得比鸡早，睡得比狗晚，干得比驴多，吃得比猪差。"这是很多刚刚毕业的人喜欢用来调侃自己生活状态的话。虽然有点儿夸张，但是，他们中的很多人的
确一直都被灰色心情所笼罩--心里永远是多云转阴。记得有位哲人曾说："我们的痛苦不是问题本身带来的，而是我们对这些问题的看法产生的。"换个角度看人
生，是一种突破、一种解脱、一种超越、一种高层次的淡泊与宁静，从而获得自由自在的快乐。<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>
一位哲人说："人生就是一连串的抉择，每个人的前途与命运，完全把握在自己手中，只要努力，终会有成。"就业也好，择业也罢，创业亦如此，只要奋发努力，
都会成功。你是不是准备把生命的承诺全部都交给别人？<br />
毕业后这5年，是改变自己命运的黄金时期。在最能决定自己命运时，如果还不把握，那你还要等到什么时候呢？我的人生我做主，命运由己不由人。<br />
不要活在别人的嘴里，不要活在别人的眼里，而是把命运握在自己手里。<br />
别说你没有背景，自己就是最大的背景。美国作家杰克&#183;凯鲁亚克说过一句话："我还年轻，我渴望上路。"在人生的旅途中，我们永远都是年轻人，每天都应
该满怀渴望。每个人的潜能都是无限的，关键是要发现自己的潜能和正确认识自己的才能，并找到一个能充分发挥潜能的舞台，而不能只为舞台的不合适感到不快。
要客观公正地看待自己的能力，结合自己的实际情况和爱好冷静选择，尽可能到最需要自己、最适合自己的地方。<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>
在人力资源管理界，特别流行一个说法，即"骑马，牵牛，赶猪，打狗"理论：人品很好，能力又很强的，是千里马，我们要骑着他；人品很好但能力普通的，是老
黄牛，我们要牵着他；人品、能力皆普通的，就是"猪"，我们要赶走他；人品很差能力很强的，那是"狗"，我们要打击他。<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>
我想，刚刚毕业几年的你，一样胸怀大志，一样想成为一匹被人赏识、驰骋沙场的千里马吧？那么，就好好沉淀下来。低就一层不等于低人一等，今日的俯低是为了
明天的高就。所谓生命的价值，就是我们的存在对别人有价值。能被人利用是一件好事，无人问津才是真正的悲哀！<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>
能干工作、干好工作是职场生存的基本保障。<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>
任何人做工作的前提条件都是他的能力能够胜任这项工作。能干是合格员工最基本的标准，肯干则是一种态度。一个职位有很多人都能胜任，都有干好这份工作的基
本能力，然而，能否把工作做得更好一些，就要看是否具有踏实肯干、苦于钻研的工作态度了。<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>
&nbsp;<wbr>在能干的基础上踏实肯干。<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>
&nbsp;<wbr>工作中，活干得比别人多，你觉得吃亏；钱拿得比别人少，你觉得吃亏；经常加班加点，你觉得吃亏&#8230;&#8230;其实，没必要这样计较，吃亏不是灾难，不是
失败，吃亏也是一种生活哲学。现在吃点儿小亏，为成功铺就道路，也许在未来的某个时刻，你的大福突然就来了。<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>
&nbsp;<wbr>能吃亏是做人的一种境界，是处世的一种睿智。<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>
在工作中并不是多做事或多帮别人干点儿活就是吃亏。如果领导让你加加班、赶赶任务，别以为自己吃了大亏，反而应该感到庆幸，因为领导只叫了你，而没叫其他
人，说明他信任你、赏识你。吃亏是一种贡献，你贡献得越多，得到的回报也就越多。乐于加班，就是这样的一种吃亏。<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>
舍得舍得，有舍才有得；学会在适当时吃些亏的人绝对不是弱智，而是大智。<br />
给别人留余地就是给自己留余地，予人方便就是予己方便，善待别人就是善待自己。<br />
傻人有傻福，因为傻人没有心计。和这样的人在一起，身心放松，没有太多警惕，就能相互靠近。傻在很多时候意味着执着和忠贞，也意味着宽厚和诚实，让人
不知不觉站到他一边。傻人无意中得到的，比聪明人费尽心机得到的还多。毕业这几年，你的天空中只飘着几片雪花，这样你就满足了吗？成功需要坚持与积累，与
其专注于搜集雪花，不如省下力气去滚雪球。巴菲特说："人生就像滚雪球，最重要的是发现很湿的雪和很长的坡。"让自己沉淀下来，学着发现"很湿的雪"，努
力寻找"很长的坡"。记住：散落的雪花会很快融化，化为乌有，只有雪球才更实在，才能长久。<br />
在毕业这几年里，你要是能做到比别人多付出一分努力，就意味着比别人多积累一分资本，就比别人多一次成功的机会。<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>
什么是职业化呢？职业化就是工作状态的标准化、规范化、制度化，即在合适的时间、合适的地点用合适的方式说合适的话、做合适的事，使知识、技能、观念、思
维、态度、心理等符合职业规范和标准。"在每个行业里，都有很多出色的人才，他们之所以能存在，是因为比别人更努力、更智慧、更成熟。但是，最重要的是，
他们比一般人更加职业化！这就是为什么我现在能当你老板的原因。一个人仅仅专业化是不够的，只有职业化的人才能飞在别人前面，让人难以超越！"不要以为我
们现在已经生存得很安稳了。对于毕业5年的人来讲，一定要认清即将面临的五大挑战。&nbsp;<wbr></font></span></span></font></p>
<font style="font-size: 14px;"><span style="font-size: 12pt; line-height: 240%;"><span style="font-family: Times new roman;"><font style="font-size: 14px;">一、赡养父母。<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>
二、结婚生子。&nbsp;<wbr><br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>
三、升职加薪。&nbsp;<wbr><br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>
四、工作压力。&nbsp;<wbr><br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>
五、生活质量。<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>
&nbsp;<wbr> 有的人为生存而雀跃，目光总是停在身后，三天打鱼两天晒网，有始无终。<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>有的人为发展而奋斗，目光总是盯在正前方，每天进步一点点，坚持不懈。<br />
毕业这几年，不能没有追求和探索，不能没有理想和目标。人生如逆水行舟，不进则退。甘于现状的生活就是不再前行的船，再也无法追上时代前进的步伐。一
定要抓紧每一秒钟的时间来学习，要明白学习不是学生的专利。小聪明的人最得意的是：自己做过什么？大智慧的人最渴望的是：自己还要做什么？<br />
小聪明是战术，大智慧是战略；小聪明看到的是芝麻，大智慧看到的是西瓜。<br />
在这个世界上，既有大人物，也有小角色，大人物有大人物的活法，小人物有小人物的潇洒，每个人都有自己的生活方式，谁也勉强不了谁。但是，小聪明只能
有小成绩和小视野，大智慧才能有大成就和大境界。小企业看老板，中企业看制度，大企业看文化。<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>
小公司与大企业都有生存之道，没有好坏之分，但对一个人不同阶段的影响会不同。<br />
小公司肯定想要发展为大企业，这是一种目标，年轻人也要给自己的职业生涯制定目标。毕业几年的你，是否经常会怯场或者是感到没有底气？居安思危绝对不
是危言耸听！此刻打盹，你将做梦；此刻学习，你将圆梦。在竞争激烈的人生战场上，打盹的都是输家！<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>
每个人在年轻的时候似乎都豪情万丈，什么都不怕，可是随着年龄的增长，每天想着房子、工作、养家糊口这些俗事儿，再也没有年轻时那种敢于"上天探星、下海
捞月"的勇气了。是我们改变了生活，还是生活改变了我们？我们的思想越来越复杂，因为有了越来越多的舍不得、越来越多的顾虑，我们总是在徘徊、总是在犹
豫。毕业开始一两年，生活的重担会压得我们喘不过气来，挫折和障碍堵住四面八方的通口，我们往往在压迫得自己发挥出潜能后，才能杀出重围，找到出路。可是
两三年后，身上的重担开始减轻，工作开始一帆风顺，我们就松懈了下来，渐渐忘记了潜在的危险。直到有一天危机突然降临，我们在手足无措中被击败&#8230;&#8230;毕业这
几年，仍然处于危险期，一定要有居安思危的意识，好好打拼，这样才能有一个真正的安全人生！<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>
生于忧患，死于安乐。如果你想跨越自己目前的成就，就不能画地自限，而是要勇于接受挑战。对畏畏缩缩的人来说，真正的危险正在于不敢冒险！<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>
年轻人在社会的重压下，适应能力已变得越来越强，只是他们不自觉地习惯被环境推着走。他们不敢冒险，怕给自己带来终身的遗憾，于是告慰自己："我对得起自
己、对得起家人，因为我已竭尽全力。"其实，人只有不断挑战和突破才能逐渐成长。长期固守于已有的安全感中，就会像温水里的青蛙一样，最终失去跳跃的本
能。<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>
&nbsp;<wbr>经历了这几年社会生活，你应该明白：这个世界上有富也有贫，有阴也有亮，有丑也有美，到底看到什么，取决于自己是积极还是消极。在年轻时学会
勤勉地工作，用一种光明的思维对待生活，那么，只要张开手掌，你就会发现，里面有一片灿烂的人生。<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>
把感恩刻在石头上，深深地感谢别人帮助过你，永远铭记，这是人生应有的一种境界；把仇恨写在沙滩上，淡淡忘掉别人伤害过你，学会宽容，让所有的怨恨随着潮
水一去不复返，这也是一种人生境界。<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>
学会倒出水，才能装下更多的水。从毕业那天开始，学会把每天都当成一个新的起点，每一次工作都从零开始。如果你懂得把"归零"当成一种生活的常态，当成一
种优秀的延续，当成一种时刻要做的事情，那么，经过短短几年，你就可以完成自己职业生涯的正确规划与全面超越。<br />
在职业起步的短短道路上，想要得到更好、更快、更有益的成长，就必须以归零思维来面对这个世界。不要以大学里的清高来标榜自己，不要觉得自己特别优
秀，而是要把自己的姿态放下，把自己的身架放低，让自己沉淀下来，抱着学习的态度去适应环境、接受挑战。放下"身段"才能提高身价，暂时的俯低终会促成未
来的高就。<br />
年轻人从校园或者从一个环境进入一个新环境，就要勇于将原来环境里熟悉、习惯、喜欢的东西放下，然后从零开始。我们想在职场上获得成功，首先就要培养
适应力。从自然人转化为单位人是融入职场的基本条件。一个人起点低并不可怕，怕的是境界低。越计较自我，便越没有发展前景；相反，越是主动付出，那么他就
越会快速发展。很多今天取得一定成就的人，在职业生涯的初期都是从零开始，把自己沉淀再沉淀、倒空再倒空、归零再归零，正因为这样，他们的人生才一路高
歌，一路飞扬。<br />
在毕业这几年里，我们要让过去归零，才不会成为职场上那只背着重壳爬行的蜗牛，才能像天空中的鸟儿那样轻盈地飞翔。请好好品味一下杰克&#183;韦尔奇说过的
一句话："纠正自己的行为，认清自己，从零开始，你将重新走上职场坦途。"　吐故才能纳新，心静才能身凉，有舍才能有得，杯空才能水满，放下才能超越。<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>
&nbsp;<wbr>归零思维五大表现：心中无我，眼中无钱，念中无他，朝中无人，学无止境。<br />
&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>
年轻人难免带着几分傲气，认为自己无所不能、所向披靡，其实不然，初入职场的新人还是个"婴儿"，正处在从爬到走的成长阶段。在毕业这几年里，一定要让自
己逐步培养起学徒思维、海绵思维、空杯思维，具有这样思维的人心灵总是敞开的，能随时接受启示和一切能激发灵感的东西，他们时刻都能感受到成功女神的召
唤。</font></span></span></font>
<img src ="http://www.blogjava.net/sealyu/aggbug/319575.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sealyu/" target="_blank">seal</a> 2010-04-28 10:34 <a href="http://www.blogjava.net/sealyu/archive/2010/04/28/319575.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何选择打回国用的电话卡++美国长途电话卡资费比较（转）</title><link>http://www.blogjava.net/sealyu/archive/2010/04/08/317737.html</link><dc:creator>seal</dc:creator><author>seal</author><pubDate>Thu, 08 Apr 2010 09:12:00 GMT</pubDate><guid>http://www.blogjava.net/sealyu/archive/2010/04/08/317737.html</guid><wfw:comment>http://www.blogjava.net/sealyu/comments/317737.html</wfw:comment><comments>http://www.blogjava.net/sealyu/archive/2010/04/08/317737.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sealyu/comments/commentRss/317737.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sealyu/services/trackbacks/317737.html</trackback:ping><description><![CDATA[<div style="position: absolute; left: 0pt; top: 0pt; z-index: 1000; font-family: arial; font-size: 13px; margin: 5px; background: none repeat scroll 0% 0% yellow; -moz-border-radius: 5px 5px 5px 5px; opacity: 0.9; display: none;" id="dictdiv"></div>
<p><strong>1.强烈建议联系手机通话服务提供商取消长途电话服务</strong><br />
如果直接拨打国际长途的话，在美国可能高至4美元/分钟，为了防止因使用电话卡失误造成高额话费，建议大家都联系服务商关闭国际长途服务。这也是我在多数
买电话卡的网上看到的建议。</p>
<p><strong>2.本地接入号与toll-free的区别</strong><br />
（1）大多数在美加办过手机或者即将办手机的童鞋相信都听说过family plan，family
plan是几个人一起分享一定分钟数的协议。family plan在9:00pm&#8211;6:00am之间、周末打美国国内电话是免费的。<br />
（2）本地接入号是电话卡服务商提供的一种利用这种family
plan免费时段的服务。在免费时段内可以拨打本地接入号接入服务，通常会便宜一些。但是如果不是在免费时段内拨打本地接入号的话会占family
plan的时间的，family plan的时间用完后即使是打美国国内电话也很贵的噢。而打toll-free号码在任何时段都不会占用family
plan的时间的。此外，toll-free号码可以在公用电话上拨打。<br />
（3）有些prepaid
plan如果不确定自己是否有免费时段，可以拨打toll-free号码拨打，这样选择卡的时候就要首先选择toll-free便宜的卡。<br />
（4）有些手机服务商（AT&amp;T, T-Mobile,
Verizon等）提供亲情号服务（亲情号之间打电话不要钱），可以将本地接入号设为亲情号，这样就可以随时给国内打电话了。</p>
<p><strong>3.选择卡需要注意的事项</strong><br />
（1）有免费时段的童鞋注意选择有本地接入号的卡，不是所有电话卡都有覆盖美国或加拿大全境的本地接入号。万一买了没有本地接入号的卡，你就只能使用稍微
贵点的toll-free的号码拨打了。<br />
（2）接入费：某些卡打电话很便宜，只要0.6cents，但是却需要维护费和接通费。这种卡比较适合电话很多的童鞋使用，反正很快用完，也交不了多少维
护费和接通费。<br />
（3）卡的有效期：对那些只给父母报平安的童鞋来说，打电话其实不多，这样选个有效时间长的卡比较好。</p>
<p><strong>4.购卡安全与推荐</strong><br />
现在在网上买卡多数都比较安全，在国外用信用卡在网上购买是很安全的，网上消费也一般有一个月的安全期，也就是说一个月内你发现自己的卡消费有问题，都可
以取消交易。 （debit card也可以在网上如同credit card消费，只是debit
card没有信用额度，只能自己存多少就花多少，当然一般有credit card后都愿意用credit card购买，这样可以逐渐提高信用记录）。</p>
<p>下面列出了很多电话卡，从美国打到中国，现在选择<a onclick="javascript:pageTracker._trackPageview('/outgoing/click.linksynergy.com/fs-bin/click?id=1thw8lFGlQQ&amp;offerid=121997.10000003&amp;type=3&amp;subid=0');" href="http://click.linksynergy.com/fs-bin/click?id=1thw8lFGlQQ&amp;offerid=121997.10000003&amp;type=3&amp;subid=0" target="_blank">Pingo</a>很划算，现在注册<a onclick="javascript:pageTracker._trackPageview('/outgoing/click.linksynergy.com/fs-bin/click?id=1thw8lFGlQQ&amp;offerid=121997.10000003&amp;type=3&amp;subid=0');" href="http://click.linksynergy.com/fs-bin/click?id=1thw8lFGlQQ&amp;offerid=121997.10000003&amp;type=3&amp;subid=0" target="_blank">Pingo</a>，每买10$的话费送5$。<a onclick="javascript:pageTracker._trackPageview('/outgoing/click.linksynergy.com/fs-bin/click?id=1thw8lFGlQQ&amp;offerid=121997.10000003&amp;type=3&amp;subid=0');" href="http://click.linksynergy.com/fs-bin/click?id=1thw8lFGlQQ&amp;offerid=121997.10000003&amp;type=3&amp;subid=0" target="_blank">Pingo</a>原本从美国打往中国只要1.2美分，toll-free也仅需2.2美分，<strong>算上优
惠的话</strong><a onclick="javascript:pageTracker._trackPageview('/outgoing/click.linksynergy.com/fs-bin/click?id=1thw8lFGlQQ&amp;offerid=121997.10000003&amp;type=3&amp;subid=0');" href="http://click.linksynergy.com/fs-bin/click?id=1thw8lFGlQQ&amp;offerid=121997.10000003&amp;type=3&amp;subid=0" target="_blank">Pingo</a><strong>从美工打往中国仅需0.80美分，toll-free也才1.46美分。而且</strong><a onclick="javascript:pageTracker._trackPageview('/outgoing/click.linksynergy.com/fs-bin/click?id=1thw8lFGlQQ&amp;offerid=121997.10000003&amp;type=3&amp;subid=0');" href="http://click.linksynergy.com/fs-bin/click?id=1thw8lFGlQQ&amp;offerid=121997.10000003&amp;type=3&amp;subid=0" target="_blank">Pingo</a><strong>也不需要接入费的。</strong>wednesday（星期三
）拨打更实惠，只需要半价。</p>
<p><strong>中国打往美国</strong></p>
<table style="border-collapse: collapse; height: 98px;" width="580" border="0">
    <col width="34">
    <col width="98">
    <col width="75">
    <col width="82">
    <col width="53">
    <col width="47">
    <col width="49">
    <col width="90">
    <col width="113">
    <tbody>
        <tr height="19">
            <td style="color: #000000; font-size: 11pt; font-weight: 400; font-style: normal; text-decoration: none; text-align: left; vertical-align: middle; height: 14.25pt; width: 25.5pt;" width="34" height="19">1</td>
            <td style="color: #000000; font-size: 11pt; font-weight: 400; font-style: normal; text-decoration: none; vertical-align: middle; height: 14.25pt; width: 73.5pt;" width="98" height="19">中国电信</td>
            <td style="color: #000000; font-size: 11pt; font-weight: 400; font-style: normal; text-decoration: none; vertical-align: middle; height: 14.25pt; width: 353.25pt;" colspan="7" width="471" height="19">17900电话卡，电信用户0.3元每分钟，移动和联通用户还要加上市话费。
            联通加10193打国际长途0.6元每分钟</td>
        </tr>
        <tr height="40">
            <td style="color: #000000; font-size: 11pt; font-weight: 400; font-style: normal; text-decoration: none; text-align: left; vertical-align: middle; height: 30pt; width: 25.5pt;" width="34" height="40">2</td>
            <td style="color: #ff0000; font-size: 11pt; font-weight: 400; font-style: normal; text-decoration: underline; vertical-align: middle; height: 30pt; width: 73.5pt;" width="98" height="40">rebtel</td>
            <td style="color: #000000; font-size: 11pt; font-weight: 400; font-style: normal; text-decoration: none; vertical-align: top; white-space: normal; height: 30pt; width: 353.25pt;" colspan="7" width="471" height="40">从网站查到的是从国内到美国0.1元就可以（不含本地
            通话费），现在提供40分钟的试用时间（也可以从美国打到中国），有兴趣的可以试试</td>
        </tr>
    </tbody>
</table>
<p><strong>美国打往中国</strong></p>
<table style="border-collapse: collapse; height: 548px;" width="443" border="0">
    <col width="34">
    <col width="84">
    <col width="75">
    <col width="82">
    <col width="53">
    <col width="57">
    <col width="159">
    <tbody>
        <tr height="40">
            <td style="color: #000000; font-size: 11pt; font-weight: 400; font-style: normal; text-decoration: none; text-align: left; vertical-align: middle; height: 30pt; width: 25.5pt;" width="34" height="40"><br />
            </td>
            <td style="color: #000000; font-size: 11pt; font-weight: 400; font-style: normal; text-decoration: none; vertical-align: top; white-space: normal; height: 30pt; width: 56.25pt;" width="75" height="40">卡服务提供商</td>
            <td style="color: #000000; font-size: 11pt; font-weight: 400; font-style: normal; text-decoration: none; vertical-align: top; white-space: normal; height: 30pt; width: 56.25pt;" width="75" height="40">最便宜本地接入费</td>
            <td style="color: #000000; font-size: 11pt; font-weight: 400; font-style: normal; text-decoration: none; vertical-align: top; white-space: normal; height: 30pt; width: 56.25pt;" width="75" height="40">最便宜Toll-free话费</td>
            <td style="color: #000000; font-size: 11pt; font-weight: 400; font-style: normal; text-decoration: none; vertical-align: top; white-space: normal; height: 30pt; width: 39.75pt;" width="53" height="40">是否过期</td>
            <td style="color: #000000; font-size: 11pt; font-weight: 400; font-style: normal; text-decoration: none; vertical-align: middle; height: 30pt; width: 42.75pt;" width="57" height="40">接入费</td>
            <td style="color: #000000; font-size: 11pt; font-weight: 400; font-style: normal; text-decoration: none; vertical-align: middle; height: 30pt; width: 119.25pt;" width="159" height="40">用卡说明</td>
        </tr>
        <tr height="72">
            <td style="color: #000000; font-size: 11pt; font-weight: 400; font-style: normal; text-decoration: none; text-align: left; vertical-align: middle; height: 54pt; width: 25.5pt;" width="34" height="72">1</td>
            <td style="color: #0000ff; font-size: 9pt; font-weight: 700; font-style: normal; text-decoration: underline; vertical-align: middle; white-space: normal; height: 54pt; width: 63pt;" width="84" height="72"><a onclick="javascript:pageTracker._trackPageview('/outgoing/click.linksynergy.com/fs-bin/click?id=1thw8lFGlQQ&amp;offerid=121997.10000003&amp;type=3&amp;subid=0');" href="http://click.linksynergy.com/fs-bin/click?id=1thw8lFGlQQ&amp;offerid=121997.10000003&amp;type=3&amp;subid=0">Pingo</a></td>
            <td style="color: #0000ff; font-size: 9pt; font-weight: 700; font-style: normal; text-decoration: none; vertical-align: middle; white-space: normal; height: 54pt; width: 56.25pt;" width="75" height="72">0.8cents</td>
            <td style="color: #0000ff; font-size: 9pt; font-weight: 700; font-style: normal; text-decoration: none; vertical-align: middle; white-space: normal; height: 54pt; width: 61.5pt;" width="82" height="72">1.46cents</td>
            <td style="color: #0000ff; font-size: 9pt; font-weight: 700; font-style: normal; text-decoration: none; vertical-align: middle; white-space: normal; height: 54pt; width: 39.75pt;" width="53" height="72">不过期</td>
            <td style="color: #0000ff; font-size: 9pt; font-weight: 400; font-style: normal; text-decoration: none; vertical-align: middle; white-space: normal; height: 54pt; width: 42.75pt;" width="57" height="72">无</td>
            <td style="color: #0000ff; font-size: 11pt; font-weight: 400; font-style: normal; text-decoration: none; vertical-align: top; white-space: normal; height: 54pt; width: 119.25pt;" width="159" height="72">电话卡第一推荐，买10送5</td>
        </tr>
        <tr height="26">
            <td style="color: #000000; font-size: 11pt; font-weight: 400; font-style: normal; text-decoration: none; text-align: left; vertical-align: middle; height: 19.5pt; width: 25.5pt;" width="34" height="26">2</td>
            <td style="color: #ff0000; font-size: 11pt; font-weight: 400; font-style: normal; text-decoration: underline; vertical-align: top; height: 19.5pt; width: 63pt;" width="84" height="26"><a onclick="javascript:pageTracker._trackPageview('/outgoing/www.loudclear.com/');" href="http://www.loudclear.com/">Loudclear</a></td>
            <td style="color: #000000; font-size: 11pt; font-weight: 400; font-style: normal; text-decoration: none; vertical-align: middle; height: 19.5pt; width: 56.25pt;" width="75" height="26">1.26cents</td>
            <td style="color: #000000; font-size: 11pt; font-weight: 400; font-style: normal; text-decoration: none; vertical-align: middle; height: 19.5pt; width: 61.5pt;" width="82" height="26">2.83cents</td>
            <td style="color: #000000; font-size: 11pt; font-weight: 400; font-style: normal; text-decoration: none; vertical-align: middle; height: 19.5pt; width: 39.75pt;" width="53" height="26">6个月</td>
            <td style="color: #000000; font-size: 11pt; font-weight: 400; font-style: normal; text-decoration: none; vertical-align: middle; height: 19.5pt; width: 42.75pt;" width="57" height="26">无</td>
            <td style="color: #000000; font-size: 11pt; font-weight: 400; font-style: normal; text-decoration: none; vertical-align: middle; height: 19.5pt; width: 119.25pt;" width="159" height="26"><br />
            </td>
        </tr>
        <tr height="40">
            <td style="color: #000000; font-size: 11pt; font-weight: 400; font-style: normal; text-decoration: none; text-align: left; vertical-align: middle; height: 30pt; width: 25.5pt;" width="34" height="40">3</td>
            <td style="color: #ff0000; font-size: 11pt; font-weight: 400; font-style: normal; text-decoration: underline; vertical-align: middle; height: 30pt; width: 63pt;" width="84" height="40"><a onclick="javascript:pageTracker._trackPageview('/outgoing/www.homerain.com/store/customer/home.php?cat=224');" href="http://www.homerain.com/store/customer/home.php?cat=224">故乡雨</a></td>
            <td style="color: #000000; font-size: 11pt; font-weight: 400; font-style: normal; text-decoration: none; vertical-align: middle; height: 30pt; width: 56.25pt;" width="75" height="40">1.1cents</td>
            <td style="color: #000000; font-size: 11pt; font-weight: 400; font-style: normal; text-decoration: none; vertical-align: middle; height: 30pt; width: 61.5pt;" width="82" height="40">3.0cents</td>
            <td style="color: #000000; font-size: 11pt; font-weight: 400; font-style: normal; text-decoration: none; vertical-align: middle; height: 30pt; width: 39.75pt;" width="53" height="40">180天</td>
            <td style="color: #000000; font-size: 11pt; font-weight: 400; font-style: normal; text-decoration: none; vertical-align: middle; height: 30pt; width: 42.75pt;" width="57" height="40">无</td>
            <td style="color: #000000; font-size: 11pt; font-weight: 400; font-style: normal; text-decoration: none; vertical-align: top; white-space: normal; height: 30pt; width: 119.25pt;" width="159" height="40">可以购买鲜花</td>
        </tr>
        <tr height="45">
            <td style="color: #000000; font-size: 11pt; font-weight: 400; font-style: normal; text-decoration: none; text-align: left; vertical-align: middle; height: 33.75pt; width: 25.5pt;" width="34" height="45">4</td>
            <td style="color: #ff0000; font-size: 11pt; font-weight: 400; font-style: normal; text-decoration: underline; vertical-align: middle; height: 33.75pt; width: 63pt;" width="84" height="45"><a onclick="javascript:pageTracker._trackPageview('/outgoing/www.ecallchina.com/?r=ecallwell');" href="http://www.ecallchina.com/?r=ecallwell">ecallchina</a></td>
            <td style="color: #000000; font-size: 11pt; font-weight: 400; font-style: normal; text-decoration: none; vertical-align: middle; height: 33.75pt; width: 56.25pt;" width="75" height="45">1.5cents</td>
            <td style="color: #000000; font-size: 11pt; font-weight: 400; font-style: normal; text-decoration: none; vertical-align: middle; height: 33.75pt; width: 61.5pt;" width="82" height="45">3.1cents</td>
            <td style="color: #000000; font-size: 11pt; font-weight: 400; font-style: normal; text-decoration: none; vertical-align: middle; height: 33.75pt; width: 39.75pt;" width="53" height="45">180天</td>
            <td style="color: #000000; font-size: 11pt; font-weight: 400; font-style: normal; text-decoration: none; vertical-align: middle; height: 33.75pt; width: 42.75pt;" width="57" height="45">无</td>
            <td style="color: #000000; font-size: 11pt; font-weight: 400; font-style: normal; text-decoration: none; vertical-align: top; white-space: normal; height: 33.75pt; width: 119.25pt;" width="159" height="45">美国到新加坡仅0.8cents</td>
        </tr>
        <tr height="33">
            <td style="color: #000000; font-size: 11pt; font-weight: 400; font-style: normal; text-decoration: none; text-align: left; vertical-align: middle; height: 24.75pt; width: 25.5pt;" width="34" height="33">5</td>
            <td style="color: #ff0000; font-size: 11pt; font-weight: 400; font-style: normal; text-decoration: underline; vertical-align: middle; height: 24.75pt; width: 63pt;" width="84" height="33"><a onclick="javascript:pageTracker._trackPageview('/outgoing/www.hellototheworld.com/');" href="http://www.hellototheworld.com/">hellototheworld</a></td>
            <td style="color: #000000; font-size: 11pt; font-weight: 400; font-style: normal; text-decoration: none; vertical-align: middle; height: 24.75pt; width: 56.25pt;" width="75" height="33">1.15cents</td>
            <td style="color: #000000; font-size: 11pt; font-weight: 400; font-style: normal; text-decoration: none; vertical-align: middle; height: 24.75pt; width: 61.5pt;" width="82" height="33">3.6cents</td>
            <td style="color: #000000; font-size: 11pt; font-weight: 400; font-style: normal; text-decoration: none; vertical-align: middle; height: 24.75pt; width: 39.75pt;" width="53" height="33">一年</td>
            <td style="color: #000000; font-size: 11pt; font-weight: 400; font-style: normal; text-decoration: none; vertical-align: middle; height: 24.75pt; width: 42.75pt;" width="57" height="33">无</td>
            <td style="color: #000000; font-size: 11pt; font-weight: 400; font-style: normal; text-decoration: none; vertical-align: top; white-space: normal; height: 24.75pt; width: 119.25pt;" width="159" height="33"><br />
            </td>
        </tr>
        <tr height="19">
            <td style="color: #000000; font-size: 11pt; font-weight: 400; font-style: normal; text-decoration: none; text-align: left; vertical-align: middle; height: 14.25pt; width: 25.5pt;" width="34" height="19">6</td>
            <td style="color: #ff0000; font-size: 11pt; font-weight: 400; font-style: normal; text-decoration: underline; vertical-align: top; height: 14.25pt; width: 63pt;" width="84" height="19"><a onclick="javascript:pageTracker._trackPageview('/outgoing/www.188connect.com/');" href="http://www.188connect.com/">188connect</a></td>
            <td style="color: #000000; font-size: 11pt; font-weight: 400; font-style: normal; text-decoration: none; vertical-align: middle; height: 14.25pt; width: 56.25pt;" width="75" height="19">1.4cents</td>
            <td style="color: #000000; font-size: 11pt; font-weight: 400; font-style: normal; text-decoration: none; vertical-align: middle; height: 14.25pt; width: 61.5pt;" width="82" height="19">6.4cents</td>
            <td style="color: #000000; font-size: 11pt; font-weight: 400; font-style: normal; text-decoration: none; vertical-align: middle; height: 14.25pt; width: 39.75pt;" width="53" height="19">180天</td>
            <td style="color: #000000; font-size: 11pt; font-weight: 400; font-style: normal; text-decoration: none; vertical-align: middle; height: 14.25pt; width: 42.75pt;" width="57" height="19">无</td>
            <td style="color: #000000; font-size: 11pt; font-weight: 400; font-style: normal; text-decoration: none; vertical-align: middle; height: 14.25pt; width: 119.25pt;" width="159" height="19"><br />
            </td>
        </tr>
        <tr height="19">
            <td style="color: #000000; font-size: 11pt; font-weight: 400; font-style: normal; text-decoration: none; text-align: left; vertical-align: middle; height: 14.25pt; width: 25.5pt;" width="34" height="19">7</td>
            <td style="color: #ff0000; font-size: 11pt; font-weight: 400; font-style: normal; text-decoration: underline; vertical-align: top; height: 14.25pt; width: 63pt;" width="84" height="19"><a onclick="javascript:pageTracker._trackPageview('/outgoing/www.aitalk.com/');" href="http://www.aitalk.com/">aitalk</a></td>
            <td style="color: #000000; font-size: 11pt; font-weight: 400; font-style: normal; text-decoration: none; vertical-align: middle; height: 14.25pt; width: 56.25pt;" width="75" height="19">1.23cents</td>
            <td style="color: #000000; font-size: 11pt; font-weight: 400; font-style: normal; text-decoration: none; vertical-align: middle; height: 14.25pt; width: 61.5pt;" width="82" height="19">不详</td>
            <td style="color: #000000; font-size: 11pt; font-weight: 400; font-style: normal; text-decoration: none; vertical-align: middle; height: 14.25pt; width: 39.75pt;" width="53" height="19">180天</td>
            <td style="color: #000000; font-size: 11pt; font-weight: 400; font-style: normal; text-decoration: none; vertical-align: middle; height: 14.25pt; width: 42.75pt;" width="57" height="19">无</td>
            <td style="color: #000000; font-size: 11pt; font-weight: 400; font-style: normal; text-decoration: none; vertical-align: middle; height: 14.25pt; width: 119.25pt;" width="159" height="19"><br />
            </td>
        </tr>
        <tr height="19">
            <td style="color: #000000; font-size: 11pt; font-weight: 400; font-style: normal; text-decoration: none; text-align: left; vertical-align: middle; height: 14.25pt; width: 25.5pt;" width="34" height="19">8</td>
            <td style="color: #ff0000; font-size: 11pt; font-weight: 400; font-style: normal; text-decoration: underline; vertical-align: top; height: 14.25pt; width: 63pt;" width="84" height="19"><a onclick="javascript:pageTracker._trackPageview('/outgoing/www.sinocalling.com/');" href="http://www.sinocalling.com/">sinocalling</a></td>
            <td style="color: #000000; font-size: 11pt; font-weight: 400; font-style: normal; text-decoration: none; vertical-align: middle; height: 14.25pt; width: 56.25pt;" width="75" height="19">1.17cents</td>
            <td style="color: #000000; font-size: 11pt; font-weight: 400; font-style: normal; text-decoration: none; vertical-align: middle; height: 14.25pt; width: 61.5pt;" width="82" height="19">3.47cents</td>
            <td style="color: #000000; font-size: 11pt; font-weight: 400; font-style: normal; text-decoration: none; vertical-align: middle; height: 14.25pt; width: 39.75pt;" width="53" height="19">180天</td>
            <td style="color: #000000; font-size: 11pt; font-weight: 400; font-style: normal; text-decoration: none; vertical-align: middle; height: 14.25pt; width: 42.75pt;" width="57" height="19">无</td>
            <td style="color: #000000; font-size: 11pt; font-weight: 400; font-style: normal; text-decoration: none; vertical-align: middle; height: 14.25pt; width: 119.25pt;" width="159" height="19"><br />
            </td>
        </tr>
        <tr height="19">
            <td style="color: #000000; font-size: 11pt; font-weight: 400; font-style: normal; text-decoration: none; text-align: left; vertical-align: middle; height: 14.25pt; width: 25.5pt;" width="34" height="19">9</td>
            <td style="color: #ff0000; font-size: 11pt; font-weight: 400; font-style: normal; text-decoration: underline; vertical-align: top; height: 14.25pt; width: 63pt;" width="84" height="19"><a onclick="javascript:pageTracker._trackPageview('/outgoing/www.onesuite.com/');" href="http://www.onesuite.com/">onesuite</a></td>
            <td style="color: #000000; font-size: 11pt; font-weight: 400; font-style: normal; text-decoration: none; vertical-align: middle; height: 14.25pt; width: 56.25pt;" width="75" height="19">2.2cents</td>
            <td style="color: #000000; font-size: 11pt; font-weight: 400; font-style: normal; text-decoration: none; vertical-align: middle; height: 14.25pt; width: 61.5pt;" width="82" height="19">3.7cents</td>
            <td style="color: #000000; font-size: 11pt; font-weight: 400; font-style: normal; text-decoration: none; vertical-align: middle; height: 14.25pt; width: 39.75pt;" width="53" height="19">不详</td>
            <td style="color: #000000; font-size: 11pt; font-weight: 400; font-style: normal; text-decoration: none; vertical-align: middle; height: 14.25pt; width: 42.75pt;" width="57" height="19">无</td>
            <td style="color: #000000; font-size: 11pt; font-weight: 400; font-style: normal; text-decoration: none; vertical-align: middle; height: 14.25pt; width: 119.25pt;" width="159" height="19">提供国际传真</td>
        </tr>
        <tr height="24">
            <td style="color: #000000; font-size: 11pt; font-weight: 400; font-style: normal; text-decoration: none; text-align: left; vertical-align: middle; height: 18pt; width: 25.5pt;" width="34" height="24">10</td>
            <td style="color: #800080; font-size: 11pt; font-weight: 400; font-style: normal; text-decoration: underline; vertical-align: top; height: 18pt; width: 63pt;" width="84" height="24"><a onclick="javascript:pageTracker._trackPageview('/outgoing/www.168talk.com/');" href="http://www.168talk.com/">168talk</a></td>
            <td style="color: #000000; font-size: 11pt; font-weight: 400; font-style: normal; text-decoration: none; vertical-align: middle; height: 18pt; width: 56.25pt;" width="75" height="24">1.3cents</td>
            <td style="color: #000000; font-size: 11pt; font-weight: 400; font-style: normal; text-decoration: none; vertical-align: middle; height: 18pt; width: 61.5pt;" width="82" height="24">2.9cents</td>
            <td style="color: #000000; font-size: 11pt; font-weight: 400; font-style: normal; text-decoration: none; vertical-align: middle; height: 18pt; width: 39.75pt;" width="53" height="24">一年</td>
            <td style="color: #000000; font-size: 11pt; font-weight: 400; font-style: normal; text-decoration: none; vertical-align: middle; height: 18pt; width: 42.75pt;" width="57" height="24">无</td>
            <td style="color: #000000; font-size: 11pt; font-weight: 400; font-style: normal; text-decoration: none; vertical-align: middle; height: 18pt; width: 119.25pt;" width="159" height="24"><br />
            </td>
        </tr>
        <tr height="42">
            <td style="color: #000000; font-size: 11pt; font-weight: 400; font-style: normal; text-decoration: none; text-align: left; vertical-align: middle; height: 31.5pt; width: 25.5pt;" width="34" height="42">11</td>
            <td style="color: #ff0000; font-size: 11pt; font-weight: 400; font-style: normal; text-decoration: underline; vertical-align: middle; height: 31.5pt; width: 63pt;" width="84" height="42"><a onclick="javascript:pageTracker._trackPageview('/outgoing/www.comfi.com/a2/840730/p/best-rates.php');" href="http://www.comfi.com/a2/840730/p/best-rates.php">comfi</a></td>
            <td style="color: #000000; font-size: 11pt; font-weight: 400; font-style: normal; text-decoration: none; vertical-align: middle; height: 31.5pt; width: 56.25pt;" width="75" height="42">0.6cents</td>
            <td style="color: #000000; font-size: 11pt; font-weight: 400; font-style: normal; text-decoration: none; vertical-align: middle; height: 31.5pt; width: 61.5pt;" width="82" height="42">1.6cents</td>
            <td style="color: #000000; font-size: 11pt; font-weight: 400; font-style: normal; text-decoration: none; vertical-align: middle; height: 31.5pt; width: 39.75pt;" width="53" height="42">无限</td>
            <td style="color: #000000; font-size: 11pt; font-weight: 400; font-style: normal; text-decoration: none; vertical-align: middle; height: 31.5pt; width: 42.75pt;" width="57" height="42">16cents</td>
            <td style="color: #000000; font-size: 11pt; font-weight: 400; font-style: normal; text-decoration: none; vertical-align: top; white-space: normal; height: 31.5pt; width: 119.25pt;" width="159" height="42">有接入费</td>
        </tr>
    </tbody>
</table>
其他几个相关地址： http://www.daxuepai.cn/2009/10/%E5%9C%A8%E7%BE%8E%E5%9B%BD%E6%89%93%E7%94%B5%E8%AF%9D%E5%B0%8F%E5%B8%B8%E8%AF%86/<br />
<br />
http://meiguodianhuaka.blog.hexun.com/16410771_d.html<br />
<div id="dictaudio"></div>
<img src ="http://www.blogjava.net/sealyu/aggbug/317737.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sealyu/" target="_blank">seal</a> 2010-04-08 17:12 <a href="http://www.blogjava.net/sealyu/archive/2010/04/08/317737.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在美国生活可要注意这20点（转）</title><link>http://www.blogjava.net/sealyu/archive/2010/03/02/314294.html</link><dc:creator>seal</dc:creator><author>seal</author><pubDate>Tue, 02 Mar 2010 07:43:00 GMT</pubDate><guid>http://www.blogjava.net/sealyu/archive/2010/03/02/314294.html</guid><wfw:comment>http://www.blogjava.net/sealyu/comments/314294.html</wfw:comment><comments>http://www.blogjava.net/sealyu/archive/2010/03/02/314294.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sealyu/comments/commentRss/314294.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sealyu/services/trackbacks/314294.html</trackback:ping><description><![CDATA[<div style="line-height: 150%;"><strong><span style="font-size: 12pt; line-height: 150%;">1</span></strong><strong><span style="font-size: 12pt; line-height: 150%;">．切勿随意搭乘便车</span></strong><span style="font-size: 12pt; line-height: 150%;"> <br />
</span><span style="font-size: 12pt; line-height: 150%;">在
美国，切不可随意搭便车，这是由于美国社会治安情况造成的。搭便车而被抢去钱财或遭到凌辱之类的案件在美国屡见不鲜。有些歹徒看到路边步行的女性，就主动
停车，殷勤要求送上一程。如果误以为他是好意，无异于羊入虎口。碰到这种情况，最好还是冷言拒绝，不要多加搭岔。不仅如此，遇到要求搭便车的人也不要轻易
答应。因为有些歹徒（包括年轻姑娘），专门等候搭乘便车，上车后以威胁等手段诈取钱财。</span><span style="font-size: 12pt; line-height: 150%;"> <br />
<strong>2</strong></span><strong><span style="font-size: 12pt; line-height: 150%;">．夜间不要乘地铁</span></strong><span style="font-size: 12pt; line-height: 150%;"> <br />
</span><span style="font-size: 12pt; line-height: 150%;">
纽约的地下铁道极为脏乱，夜晚时更成为黑社会成员聚集之地。吸毒犯、盗窃犯、流氓、贩毒者齐集于此，气氛令人不寒而栗。如果对此不在意，那么出事之后，
纽约的警官不但不会同情你，可能还要责怪你：&#8220;夜间乘地铁，不等于在鳄鱼聚集的水中游泳吗？出了错，责任在于你自己。&#8221;</span><span style="font-size: 12pt; line-height: 150%;"><br />
<strong>3</strong></span><strong><span style="font-size: 12pt; line-height: 150%;">．不要称呼黑人为&#8220;</span></strong><strong><span style="font-size: 12pt; line-height: 150%;">Negro</span></strong><strong><span style="font-size: 12pt; line-height: 150%;">&#8221;</span></strong><span style="font-size: 12pt; line-height: 150%;"><br />
</span><span style="font-size: 12pt; line-height: 150%;">　　&#8220;</span><span style="font-size: 12pt; line-height: 150%;">Negro</span><span style="font-size: 12pt; line-height: 150%;">&#8221;是英语&#8220;黑人&#8221;的意思，尤指从非洲贩卖到美国为奴的黑人。所以在美国千万不要把黑人称作&#8220;</span><span style="font-size: 12pt; line-height: 150%;">Negro</span><span style="font-size: 12pt; line-height: 150%;">&#8221;，跟白人交谈如此，跟黑人交谈更如此。否则，黑人会感到你对他的蔑视。说到黑人，最好用&#8220;</span><span style="font-size: 12pt; line-height: 150%;">Black</span><span style="font-size: 12pt; line-height: 150%;">&#8221;一词，黑人对这个称呼会坦然接受。</span><span style="font-size: 12pt; line-height: 150%;"> <br />
<strong>4</strong></span><strong><span style="font-size: 12pt; line-height: 150%;">．不能随便说&#8220;</span></strong><strong><span style="font-size: 12pt; line-height: 150%;">I am sorry</span></strong><strong><span style="font-size: 12pt; line-height: 150%;">&#8221;</span></strong><span style="font-size: 12pt; line-height: 150%;"><br />
</span><span style="font-size: 12pt; line-height: 150%;">　　&#8220;</span><span style="font-size: 12pt; line-height: 150%;">I am sorry</span><span style="font-size: 12pt; line-height: 150%;">&#8221;和&#8220;</span><span style="font-size: 12pt; line-height: 150%;">Excuse me</span><span style="font-size: 12pt; line-height: 150%;">&#8221;都是&#8220;抱歉&#8221;、&#8220;对不起&#8221;的意思，但&#8220;</span><span style="font-size: 12pt; line-height: 150%;">I am sorry</span><span style="font-size: 12pt; line-height: 150%;">&#8221;语气较重，表示承认自己有过失或错误。如果为了客气而轻易出口，常会被对方抓住把柄，追究实际不属于你的责任。到时只有&#8220;哑巴吃黄连&#8221;，因为一句&#8220;对不起&#8221;已经承认自己有错。又如何改口呢？</span><span style="font-size: 12pt; line-height: 150%;"> <br />
<strong>5</strong></span><strong><span style="font-size: 12pt; line-height: 150%;">．谦虚并非美德</span></strong><span style="font-size: 12pt; line-height: 150%;"> <br />
</span><span style="font-size: 12pt; line-height: 150%;">
中国人视谦虚为美德，但是美国人却把过谦视为虚伪的代名词。如果一个能讲流利英语的人自谦地说英语讲得不好，接着又说出一口流畅的英语，美国人便会认为
他撒了谎，是个口是心非、装腔作势的人。所以，同美国入交往，应该大胆说出自己的能力，有一是一，有十是十。不必谦虚客气，否则反而事与愿违。</span><span style="font-size: 12pt; line-height: 150%;"><br />
<strong>6</strong></span><strong><span style="font-size: 12pt; line-height: 150%;">．同陌生人打招呼</span></strong></div>
<div style="text-indent: 21pt; line-height: 150%;"><span style="font-size: 12pt; line-height: 150%;">我们在路上、电梯内或走廊里，常常与迎面走来的人打照面，目光相遇，这时美国人的习惯是用目光致意。不可立刻把视线移开，或把脸扭向一边，佯装不见。只有对不顺眼和不屑一顾的人才这样做。</span><span style="font-size: 12pt; line-height: 150%;"> <br />
&nbsp;&nbsp;&nbsp;</span><span style="font-size: 12pt; line-height: 150%;">美国人清晨漫步街道时，若碰到擦身而过的人，会习惯地说一声&#8220;</span><span style="font-size: 12pt; line-height: 150%;">Good morning/ Morning</span><span style="font-size: 12pt; line-height: 150%;">&#8221;。当然，在行人较多的街道上，不必对所有擦肩而过的人都以目光致意或打招呼。</span><span style="font-size: 12pt; line-height: 150%;"> <br />
<strong>7</strong></span><strong><span style="font-size: 12pt; line-height: 150%;">．交谈时的话题</span></strong><span style="font-size: 12pt; line-height: 150%;"> <br />
</span><span style="font-size: 12pt; line-height: 150%;">参加美国人的聚会时，切莫只谈自己最关心、最拿手的话题。谈论只有自己熟悉的话题，会使其他人难堪，产生反感。谈论个人业务上的事，加以卖弄，也会使其他人感到你视野狭窄，除了本行之外一窍不通。</span><span style="font-size: 12pt; line-height: 150%;"> <br />
&nbsp;&nbsp;&nbsp; </span><span style="font-size: 12pt; line-height: 150%;">在谈话间，应该寻找众人同感兴趣的话题。医生可以大谈文学，科学家畅谈音乐，教育家讲述旅行见闻，使整个聚会充满轻松气氛。</span><span style="font-size: 12pt; line-height: 150%;"> <br />
&nbsp;&nbsp;&nbsp; </span><span style="font-size: 12pt; line-height: 150%;">应该注意的是，基督徒视自杀为罪恶，在美国，&#8220;自杀&#8221;这个话题不受欢迎，不论何时何地还是少谈为妙。</span><span style="font-size: 12pt; line-height: 150%;"> <br />
<strong>8</strong></span><strong><span style="font-size: 12pt; line-height: 150%;">．别忘了问候小孩</span></strong><span style="font-size: 12pt; line-height: 150%;"><br />
</span><span style="font-size: 12pt; line-height: 150%;">美国人讲究大人、小孩一律平等。到美国人家中做客，他们的小孩也一定出来见客，打个招呼。这时，千万不要只顾大人冷落了小孩。那样势必使他们的父母不愉快。跟小孩子打招呼，可以握握手或亲亲脸。如果小孩子亲了你的险，你也一定要亲亲他的脸。</span><span style="font-size: 12pt; line-height: 150%;"><br />
<strong>9</strong></span><strong><span style="font-size: 12pt; line-height: 150%;">．同性不能一起跳舞</span></strong><span style="font-size: 12pt; line-height: 150%;"> <br />
</span><span style="font-size: 12pt; line-height: 150%;">　　同性不能双双起舞，这是美国公认的社交礼仪之一。同性一起跳舞，旁人必定投以责备的目光，或者认为他们是同性恋者。因此，即使找不到异性舞伴，也绝不能与同性跳舞。</span><span style="font-size: 12pt; line-height: 150%;"><br />
<strong>10</strong></span><strong><span style="font-size: 12pt; line-height: 150%;">．莫在别人面前脱鞋</span></strong><span style="font-size: 12pt; line-height: 150%;"><br />
</span><span style="font-size: 12pt; line-height: 150%;">
在美国，若是在别人面前脱鞋或赤脚，会被视为不知礼节的野蛮人。只有在卧室里，或是热恋的男女之间，才能脱下鞋子。女性若在男性面前脱鞋子，那就表示
&#8220;你爱怎样就怎样&#8221;；男性脱下鞋子，就会被人当作丛林中赤足的土人一样受到蔑视。无论男女在别人面前拉下袜子、拉扯袜带都是不礼貌的。鞋带松了，也应走到
没人的地方系好。</span><span style="font-size: 12pt; line-height: 150%;"> <br />
<strong>11</strong></span><strong><span style="font-size: 12pt; line-height: 150%;">．女性不能单独喝酒</span></strong><span style="font-size: 12pt; line-height: 150%;"><br />
</span><span style="font-size: 12pt; line-height: 150%;">　　女性不可单独喝酒，如果单独喝酒或几个女性聚在一起喝酒，都被视为&#8220;正在等男士的女人&#8221;。不谙此情的妇女可能受到男士的骚扰。</span><span style="font-size: 12pt; line-height: 150%;"><br />
<strong>12</strong></span><strong><span style="font-size: 12pt; line-height: 150%;">．不可在别人面前伸舌头</span></strong><span style="font-size: 12pt; line-height: 150%;"> <br />
</span><span style="font-size: 12pt; line-height: 150%;">　　美国人认为在别人面前伸出舌头是一件既不雅观又不礼貌的行为，给人以庸俗、下流的感觉，甚至可以解释为瞧不起人。</span><span style="font-size: 12pt; line-height: 150%;"> <br />
&nbsp;&nbsp;&nbsp; </span><span style="font-size: 12pt; line-height: 150%;">小孩子犯了错，可以吐吐舌头，显得天真可爱，成年人千万不可这样做。</span><span style="font-size: 12pt; line-height: 150%;"><br />
<strong>13</strong></span><strong><span style="font-size: 12pt; line-height: 150%;">．不可随便微笑</span></strong><span style="font-size: 12pt; line-height: 150%;"><br />
</span><span style="font-size: 12pt; line-height: 150%;">　　微笑可以带来友谊。但是在某些场合，微笑往往代表对某种事物的允诺。尤其是女性，最好不要随便地微笑。因为暧昧不明的微笑，有时候会被误认为是&#8220;耻笑&#8221;，有时会被误认为&#8220;默认&#8221;，结果造成很大的误会。</span><span style="font-size: 12pt; line-height: 150%;"> <br />
<strong>14</strong></span><strong><span style="font-size: 12pt; line-height: 150%;">．座前通过要弯腰</span></strong><span style="font-size: 12pt; line-height: 150%;"><br />
</span><span style="font-size: 12pt; line-height: 150%;">　　在狭窄的场所，如在电影院，从别人身前走过时，必须道一声&#8220;</span><span style="font-size: 12pt; line-height: 150%;">Excuse(me)</span><span style="font-size: 12pt; line-height: 150%;">&#8221;。这时候，美国人的姿势是背对坐着的人，低头弯身而过。这同欧洲人的习惯不同，欧洲人必须面对坐着的人，低头弯身而过。</span><span style="font-size: 12pt; line-height: 150%;"><br />
<strong>15</strong></span><strong><span style="font-size: 12pt; line-height: 150%;">．宴会上切忌喝醉</span></strong><span style="font-size: 12pt; line-height: 150%;"><br />
</span><span style="font-size: 12pt; line-height: 150%;">　　在宴会上喝酒要适量，始终保持斯文的举止，这是欧美人士共守的礼节。</span><span style="font-size: 12pt; line-height: 150%;"> <br />
&nbsp;&nbsp;&nbsp; </span><span style="font-size: 12pt; line-height: 150%;">在美国人的宴会上，很少看到烂醉如泥的人。即使喝多了，也要坚持到宴会结束，回到自己的房间后才可倒头不起。如果当场酩酊大醉，惹是生非，会招来众人的鄙视。</span><span style="font-size: 12pt; line-height: 150%;"><br />
<strong>16</strong></span><strong><span style="font-size: 12pt; line-height: 150%;">．不乱送礼物</span></strong><span style="font-size: 12pt; line-height: 150%;"><br />
</span><span style="font-size: 12pt; line-height: 150%;">　　送礼必须送得有意义，例如朋友生日、同事结婚可以送上一份礼物，以表心意。但不能动辄送礼，这样对方不但不会感激，还会疑心你另有所图。</span><span style="font-size: 12pt; line-height: 150%;"> <br />
&nbsp;&nbsp;&nbsp; </span><span style="font-size: 12pt; line-height: 150%;">不知送何礼物为宜时，可以送鲜花。做客或参加宴会，鲜花总是得体的。香水和威士忌等也受到普遍欢迎。</span><span style="font-size: 12pt; line-height: 150%;"><br />
<strong>17</strong></span><strong><span style="font-size: 12pt; line-height: 150%;">．外出前别吃大蒜</span></strong><span style="font-size: 12pt; line-height: 150%;"><br />
</span><span style="font-size: 12pt; line-height: 150%;">　　美国人一般对气味很敏感，尤其讨厌闻到大蒜的气味。外出之前，如果吃过蒜，最好先刷牙漱口。否则蒜味熏人，会让对方不快。</span><span style="font-size: 12pt; line-height: 150%;"><br />
<strong>18</strong></span><strong><span style="font-size: 12pt; line-height: 150%;">．不为别人付账</span></strong><span style="font-size: 12pt; line-height: 150%;"><br />
</span><span style="font-size: 12pt; line-height: 150%;">　　中国人的习惯是，几个好友一道出门时，总是抢着付钱买车票、门票等。但如果对美国人这样做，不仅不会得到他们的感谢，反而会使美国人觉得欠了人情帐，心理上很难受。美国人一起外出，总是各付各的费用，车费、饭费、小费无不如此。</span><span style="font-size: 12pt; line-height: 150%;"><br />
<strong>19</strong></span><strong><span style="font-size: 12pt; line-height: 150%;">．使用洗手间后，别把门关严</span></strong><span style="font-size: 12pt; line-height: 150%;"><br />
</span><span style="font-size: 12pt; line-height: 150%;">　　中国人的习惯是随手关门，厕所没人时最好关严。美国人则习惯厕所门开道小缝，表示里面没人。如果关严，意味着里面有人，别人只好在外面苦等。</span><span style="font-size: 12pt; line-height: 150%;"> <br />
<strong>20</strong></span><strong><span style="font-size: 12pt; line-height: 150%;">．别用错手势</span></strong><span style="font-size: 12pt; line-height: 150%;"><br />
</span><span style="font-size: 12pt; line-height: 150%;">　　美国人指自己时，要用手指向鼻尖。如果我们按照自己的习惯，指指胸口，常会使他们不明其意，无法理解。</span><span style="font-size: 12pt; line-height: 150%;"> <br />
&nbsp;&nbsp;&nbsp; </span><span style="font-size: 12pt; line-height: 150%;">叫别人过来时，我们的习惯是招招手，这在美国人看来恰恰是&#8220;再见&#8221;。他们招呼人过来的手势是把手指向着自己，然后以中指和食指朝着自己，轻轻摇动两三次。</span><span style="font-size: 12pt; line-height: 150%;"> <br />
&nbsp;&nbsp;&nbsp; </span><span style="font-size: 12pt; line-height: 150%;">美国人有不少手势习惯，例如用食指和大拇指搭成圈，其余三个手指向上伸开，做个&#8220;</span><span style="font-size: 12pt; line-height: 150%;">OK</span></div>
<img src ="http://www.blogjava.net/sealyu/aggbug/314294.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sealyu/" target="_blank">seal</a> 2010-03-02 15:43 <a href="http://www.blogjava.net/sealyu/archive/2010/03/02/314294.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>赴美签证流程（转）</title><link>http://www.blogjava.net/sealyu/archive/2010/03/01/314140.html</link><dc:creator>seal</dc:creator><author>seal</author><pubDate>Mon, 01 Mar 2010 02:31:00 GMT</pubDate><guid>http://www.blogjava.net/sealyu/archive/2010/03/01/314140.html</guid><wfw:comment>http://www.blogjava.net/sealyu/comments/314140.html</wfw:comment><comments>http://www.blogjava.net/sealyu/archive/2010/03/01/314140.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sealyu/comments/commentRss/314140.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sealyu/services/trackbacks/314140.html</trackback:ping><description><![CDATA[<p>签证申请大致有一下几个步骤：</p>
<p><strong>1、电话预约</strong></p>
<p>预约赴美签证时间，电话是<span style="color: #3366ff;"><span style="text-decoration: underline;">4008－872－333</span><span style="color: #000000;">及</span><span style="text-decoration: underline;">86-21-3881-4611</span></span></p>
<p>话务中心的工作时间是：</p>
<p><span style="color: #000000;">周一至周五：早7：00 — 晚7：00</span></p>
<p><span style="color: #000000;">周六：早8：00 — 晚5：00</span></p>
<p><strong>1)</strong>、缴预约电话费</p>
<p>预约的通话过程是需要钱的，标准是54元/12分钟或者36元/8分钟。可以通过如下两种方式购买通话时间</p>
<ul>
    <li>去中信银行购买加密电话卡，所有网点都有卖</li>
    <li>银行卡缴费，在电话里会提示，也可以采用网上购买的密码</li>
</ul>
<p><strong>2)</strong>、打电话前需要准备</p>
<p>个人信息，中文姓名、姓名拼音、生日、身份证号码、护照号码、联系电话、签证类型、传真和电子邮件</p>
<p>纸和笔，用于记录缴费密码和预约号码</p>
<p><strong>3)</strong>、拨打电话</p>
<p>1、拨通后，先是中英文轮流播放&#8220;欢迎拨打美国驻华大使馆及总领馆签证信息服务中心  &#8230;&#8230;&#8221;中英文各播一遍以后，中英文提示你：&#8221;下面选择语言种类。&#8221;。然后用相对应的各种语言。播报：英语请按1，普通话请按2，广东话请按3，福州话请按4，佛山话请按5。</p>
<p>2、然后&#8220;寻求美国公民服务请按1,进行下一步选择请稍等&#8221; 。不按键，等5秒钟。（如  果选择1的话，会讲大约好几分钟使馆和领事馆提供给美国公民的服务）</p>
<p>3、接下来&#8220;查询有关美国移民的信息请按1,查询有关赴美旅行的信息请按2&#8221; ——按2。</p>
<p>4、按2以后，系统会提示&#8220;这项服务是用户付款服务，费用是12分钟收取人民币54元&#8221;
，有五个选项：&#8220;如果你已通过汇票支付了费用，现在希望服务生效请按1，如果你购买了中信实业银行的密码预付卡请按2，如果你已在网上购买了密码请按3，
如果你已经使用了此项服务，现在想用完剩余的分钟请按4，欲知付款的方法请按5&#8221;
.如果按5，那么系统会提示三个选项：用信用卡支付按1，得到密码以后，就是支付成功了！这个密码一定要记住（可以听不止一次），预约、咨询都要用到，你
可以打多次电话，只要合计不超过12分钟。</p>
<p>5、接下来就是就是输入密码进入排队系统了，&#8220;想听录音资料请按1,将资料传真给您请按2,
联络客服代表请按0&#8221;，如果你想直接预约签证，就按0接通客服代表。你按了0以后，就会进入排队系统，等候空闲的客服代表。计费是从接通客服代表开始的。
经过多次验证，如果这个时候你没有耐心将电话挂掉，你的时间是会扣掉一分钟的。(我预约的时候等待了12分钟)</p>
<p>6、接通电话后，服务小姐会问你中文姓名、姓名拼音、签证地点、以前是否被拒过、哪一类签证、护照号码、身份证号码、联系方式、生日。预约时，会告
诉你签证的时间，几月几号几点，最后还会给你给你个&#8220;预约编号&#8221;，这个编号是12位，后面还有一个校验位，编号和校验位之间有一个横杠。要记住这个编号
（当然了，实际面谈的时候这个号也没有什么用）。</p>
<p>7、如果已经预约了，但是临时有事不能去签证，提前3天打电话取消预约。不打招呼、当天就不去也是可行的。但是为了稳妥起见，还是打电话取消预约吧。</p>
<p><strong>2、缴纳签证申请费</strong></p>
<p>在领事馆面谈前，需要去指定的中信银行缴费943人民币的签证申请费，缴费的时候需要携带申请人护照。</p>
<p>点击<a href="http://www.ecitic.com/bank/personal/chuguo/5.htm" target="_blank">这里</a>查看中信银行代收美国签证费的网点。俺选择淮海中路支行(在上图那儿)</p>
<p><strong>3、填写签证申请表&#8211;DS-156申请表</strong></p>
<p>需用英文填写电子版的DS-156表，该电子版申请表的网址是：<a href="https://evisaforms.state.gov/ds156.asp" target="_blank">https://evisaforms.state.gov/ds156.asp</a></p>
<p>在填完表后，需要按照提示打印申请表，在完成的申请表上会出现条形码。表格分成3页，必须正反面打印，还需要在申请表的第6、7、8、9、15、20、21栏用中文手写相应内容。</p>
<p>填写以后，点击最后的提交，记住只能提交一次。然后系统会生成一个PDF文档，同时在文档里出现条形码。如果你在填写的时候发生问题，可以重新填写并提交，系统生成新的条形码后，在签证的时候携带新的156即可。</p>
<p><strong>4、填写补充申请表&#8211;DS-157</strong></p>
<p>申请表的地址是：<a href="http://www.state.gov/documents/organization/79964.pdf" target="_blank">http://www.state.gov/documents/organization/79964.pdf</a></p>
<p>这张只要打印出来手写即可。</p>
<p><strong>5、拍摄签证照片</strong></p>
<p><strong>6、准备护照</strong></p>
<p><strong>7、准备其他申请材料</strong></p>
<p>其他申请材料主要是用来证明没有移民倾向的。所以需要提供户口簿、工作证明、工资单、财产证明、房产证、照片等来说明申请人和中国有着不可分离的约束力</p>
<p><strong>8、在约定的日子，前往领事馆签证</strong></p>
<p>需要携带如下材料</p>
<ul>
    <li>有效护照，指护照有效期比申请预期赴美停留日期多6个月以上</li>
    <li>填写完整的DS-156表(必须有条形码，正反面打印，且贴好照片)</li>
    <li>填写完整的DS-157表</li>
    <li>中信银行的签证费收据，需要带上所有联的收据</li>
    <li>邀请函</li>
    <li>行程表</li>
    <li>学员通讯录和项目介绍</li>
    <li>第七点提及的其他申请材料</li>
</ul>
<p>有关面谈时的注意事项，是请尽量如实回答</p>
<p><strong>9、获得赴美签证</strong></p>
<p>上海地区的签证获得，是通过邮局寄回护照的。不再是当场发放了。</p>
<p>PS：今天只是做了签证预约和填写DS156表，更多的信息等具体每个步骤进行了会做更多的更新。</p>
<img src ="http://www.blogjava.net/sealyu/aggbug/314140.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sealyu/" target="_blank">seal</a> 2010-03-01 10:31 <a href="http://www.blogjava.net/sealyu/archive/2010/03/01/314140.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>申请赴美签证流程和表格填写指南(上海版)(转载)</title><link>http://www.blogjava.net/sealyu/archive/2010/03/01/314139.html</link><dc:creator>seal</dc:creator><author>seal</author><pubDate>Mon, 01 Mar 2010 02:27:00 GMT</pubDate><guid>http://www.blogjava.net/sealyu/archive/2010/03/01/314139.html</guid><wfw:comment>http://www.blogjava.net/sealyu/comments/314139.html</wfw:comment><comments>http://www.blogjava.net/sealyu/archive/2010/03/01/314139.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sealyu/comments/commentRss/314139.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sealyu/services/trackbacks/314139.html</trackback:ping><description><![CDATA[<pre>美国驻上海总领事馆领事处位于南京西路1038号梅隆镇广场8楼. 领事处只签发<br />
赴美非移民签证. 在上海领事处申请非移民签证的申请人必须居住或工作在上海领事馆<br />
的领事区-包括上海、浙江、江苏和安徽三省一市. 所有移民类签证, 包括未婚妻/未婚<br />
夫签证(K1)由美国驻广州总领事馆受理.(电话:020-81218000,传真:020-81218341) <br />
<br />
申请赴美非移民签证的基本流程<br />
第一步: <br />
购买预付费的加密电话卡.<br />
您可以在中信银行或登录<a target="_blank" href="http://www.usavisainformation.com.cn%e5%9c%a8%e7%ba%bf%e8%b4%ad%e4%b9%b0.%e6%a0%b9%e6%8d%ae%e8%af%a5%e5%8a%a0%e5%af%86/">http://www.usavisainformation.com.cn在线购买.根据该加密</a><br />
号码, 申请人可以致电美国驻华大使馆及总领事馆签证预约服务中心,以确定签证面谈时<br />
间.申请人可根据需要支付 54元人民币获得一个加密号码并可通话12分钟，或支付36元<br />
人民币获得一个加密号码并可通话8分钟. 申请人可在线购买该加密号码,网址为: <br />
<a target="_blank" href="http://www.usavisainformation.com.cn%ef%bc%8e%e5%a4%a7%e5%a4%9a%e6%95%b0%e7%9a%84%e4%b8%ad%e4%bf%a1%e9%93%b6%e8%a1%8c%e5%9d%87%e5%87%ba%e5%94%ae%e9%a2%84%e4%bb%98%e8%b4%b9%e7%9a%84%e5%8a%a0%e5%af%86%e7%94%b5%e8%af%9d/">http://www.usavisainformation.com.cn．大多数的中信银行均出售预付费的加密电话</a><br />
卡．如需中信银行各分支机构的详情，申请人可登录网站www.ecitic.com查询, 申请人<br />
也可以从国内拨打95558致电中信银行的客户服务部门。<br />
<br />
第二步: <br />
致电美国驻华大使馆及总领事馆签证预约服务话务中心,以确定签证面谈时间<br />
申请人的面谈时间可以通过致电中国话务中心进行预约．从中国国内的任何地方致电签<br />
证话务中心均可拨打电话4008-872-333. 国外致电者可拨打86-21-3881-4611．话务中心<br />
的工作时间为：周一至周五早7点至晚7点（节假日除外），周六早8点至下午5点．话务<br />
中心的客服人员可以帮您确定签证面谈时间，还能为您解答有关签证申请流程的问题．<br />
请申请人电话预约时务必提供姓名、出生日期、护照号码、访美目的、是否有过拒签史<br />
及拒签日期等相关信息．<br />
<br />
第三步:<br />
支付930元人民币非移民签证申请费，并保存好申请费收据<br />
非移民签证申请费为人民币930元．您可以在中信银行及其分支机构支付．中信银行将开<br />
具申请费两联收据（一联为白色，一联为浅褐色）．请妥善保存两联收据并于面谈当天<br />
出示．<br />
<br />
第四步:<br />
填写申请表格<br />
所有申请人都需要完整填写DS－156表格．领事处鼓励申请人在网上填写带有条形码的DS<br />
－156表，网址为：<a target="_blank" href="http://evisaforms.state.gov.%e6%9c%89%e6%9d%a1%e5%bd%a2%e7%a0%81%e8%a1%a8%e6%a0%bc%e7%9a%84%e7%ad%be%e8%af%81%e7%94%b3%e8%af%b7%e5%b0%86%e5%be%97%e5%88%b0%e4%bc%98%e5%85%88/">http://evisaforms.state.gov.有条形码表格的签证申请将得到优先</a><br />
处理．年龄超过17岁的申请人还需要填写DS－157表格．所有学生签证，交流访问学者签<br />
证的申请人还需要填写DS－158表格．所有的申请表格可以在中信银行及其分支机构领取<br />
，或在美国驻上海总领事馆官方网站上下载，网址为:<a target="_blank" href="http://www.usembassy-china.org/">http://www.usembassy-china.org</a><br />
.cn/shanghai/visa/.申请人必须用中，英文分别填写表格的中，英文版．外籍人士只需<br />
填写英文版表格．<br />
提示：从2006年1月1日起,领事处将不再要求使用中文申请表.<br />
<br />
第五步:<br />
拍照<br />
申请人务必在中，英文的DS－156表上分别贴好二吋签证申请照片（拍摄于最近六个月内<br />
，约为50毫米x50毫米的正面头像照）。<br />
<br />
第六步:<br />
支付200美金SEVIS费，并保存好收据<br />
SEVIS费仅适用于学生和交流访问学者．学生及交流学者信息系统由美国国土安全部负责<br />
管理和维护．大多数的F-1, F-3, M-1, M-3和J-1类签证的申请人在初次申请时需要支付<br />
此费用．申请人务必于面谈之日前完成支付手续，并于面谈时出示付费收据．详情请参<br />
考：www.fmjfee.com<br />
<br />
第七步:<br />
准备申请材料<br />
请于面谈当日带齐所有申请表格(DS-156, DS-157, DS-158).而且,根据不同的赴美目的,<br />
申请人还应准备并出示:邀请信,学校的录取通知和奖学金的书面证明,银行证明,家庭合<br />
影,结婚证,I-797表(针对H, L, O, P, Q类签证的申请人),DS-2019表(针对J类签证的申<br />
请人), I-20表(针对F,M类签证的申请人),SEVIS费的收据(针对F,M,J类签证的申请人),<br />
中信银行签证申请费两联收据,旧护照,在美期间的延期证明等.根据不同情况,申请人也<br />
可能需要出示个人简历,科研计划,美方导师或研究员的简历和出版物清单等材料.领事馆<br />
建议申请人准备英文的,或者是带有英文翻译的书面材料.同时,您的有效护照的有效期必<br />
须比您本人预计抵达美国的日期长至少六个月.<br />
<br />
领事馆将向符合以下条件的申请人发放赴美签证:您必须有清晰明确的赴美目的,与美国<br />
邀请方有真实可信的关系,有足够的经济能力支付本次旅行所产生的费用,并且能够出示<br />
足够的证据表明您与中国或您的祖国在社会,经济等方面有着牢固而不可分割的约束力,<br />
以确保您在美短期,合法的居留后能够按时返回.<br />
<br />
第八步:<br />
准时到领事馆面谈<br />
美驻沪总领事馆签证处位于南京西路1038号梅隆镇广场8楼.申请人在进入领馆前务必先<br />
在梅隆镇广场江宁路门排队领取号码牌.请注意:任何的包裹,手机,传呼机等电子产品一<br />
律不得带入领馆.如果您有任何疑问,请向领馆保安寻求帮助.<br />
<br />
第九步:<br />
支付签证签发费<br />
根据不同情况,如签证类型,申请人国籍,签证有效期等,您有可能需要支付签证签发费. <br />
签发费的具体数额是依据两国对等条约制定的.(绝大多数的中国籍签证申请人无需支付<br />
签证签发费) 签证签发费将在签证申请批准后,由领事馆的出纳收取.签证签发费及两国<br />
对等条约详情,请参考: <a target="_blank" href="http://www.travel.state.gov/visa/reciprocity/index.htm">http://www.travel.state.gov/visa/reciprocity/index.htm</a><br />
<br />
中信银行代传递服务<br />
有赴美经历者再次申请赴美签证时可享受代传递服务. 凡符合以下所有要求的申请人可<br />
到中信银行指定机构委托办理代传递服务：<br />
<br />
"   申请人必须曾经获得过美国非移民签证, 且最近一次签证是在上海申请的<br />
"   申请人可以在签证有效期内或签证有效期截止日起12个月之内（包括12个月）递交<br />
新申请<br />
"   申请人上一次赴美停留的时间没有超过30天<br />
"   申请人必须申请与最近一次相同类型的美国签证<br />
"   申请人在获得最近一次美国签证以后没有被美国拒签过<br />
<br />
更多信息<br />
如果您需要更详细的信息,请参考美国驻上海总领事馆官方网站:<a target="_blank" href="http://www.usembassy-/">http://www.usembassy-</a><br />
china.org.cn/shanghai/visa/,或致电4008-872-333并根据语音提示了解赴美签证相关<br />
咨讯.<br />
<br />
</pre>
<img src ="http://www.blogjava.net/sealyu/aggbug/314139.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sealyu/" target="_blank">seal</a> 2010-03-01 10:27 <a href="http://www.blogjava.net/sealyu/archive/2010/03/01/314139.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在远程桌面连接时调出任务管理器</title><link>http://www.blogjava.net/sealyu/archive/2010/01/11/308971.html</link><dc:creator>seal</dc:creator><author>seal</author><pubDate>Mon, 11 Jan 2010 00:30:00 GMT</pubDate><guid>http://www.blogjava.net/sealyu/archive/2010/01/11/308971.html</guid><wfw:comment>http://www.blogjava.net/sealyu/comments/308971.html</wfw:comment><comments>http://www.blogjava.net/sealyu/archive/2010/01/11/308971.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sealyu/comments/commentRss/308971.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sealyu/services/trackbacks/308971.html</trackback:ping><description><![CDATA[大家可能经常遇到这样的情况，当Windows自带的远程桌面控制托管在机房中的服务器，登录服务器后，有时候想调出远程机器的任务管理器，但按下Ctrl+Alt+Del后，总是出现本地机器的任务管理器。
<p>&nbsp;&nbsp;&nbsp; 在微软的设置中，Ctrl+Alt+Del总对本地桌面有效，如果想在远程桌面中调出任务管理器，则需要按下Ctrl+
Shift+Esc代替，另外也可以通过Ctrl+Alt+End调出Windows安全对话框，然后再点&#8220;任务管理器&#8221;。另外还有一种方法，就是在远程
桌面的&#8220;开始&#8221;－&#8220;运行&#8221;中输入&#8220;taskmgr&#8221;，这个命令会直接呼出远程桌面的任务管理器，算是一种变通的办法。</p>
<img src ="http://www.blogjava.net/sealyu/aggbug/308971.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sealyu/" target="_blank">seal</a> 2010-01-11 08:30 <a href="http://www.blogjava.net/sealyu/archive/2010/01/11/308971.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>The Pragmatic Programmer --- My Notes</title><link>http://www.blogjava.net/sealyu/archive/2009/12/21/306776.html</link><dc:creator>seal</dc:creator><author>seal</author><pubDate>Mon, 21 Dec 2009 03:43:00 GMT</pubDate><guid>http://www.blogjava.net/sealyu/archive/2009/12/21/306776.html</guid><wfw:comment>http://www.blogjava.net/sealyu/comments/306776.html</wfw:comment><comments>http://www.blogjava.net/sealyu/archive/2009/12/21/306776.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sealyu/comments/commentRss/306776.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sealyu/services/trackbacks/306776.html</trackback:ping><description><![CDATA[<br />
Chapter 1. A Pragmatic Philosophy<br />
<ol>
    <li>Pragmatic Programmer - An attitude, a style, a philosophy of approaching problems and their solutions. They think beyond the immediate problem, always trying to place it in its larger context, always trying to be aware of the bigger picture. <br />
    </li>
    <li>Take responsibility for everything they do. Don't sit idly by and watch their projects fall apart through neglect.<br />
    One of the cornerstones of the pragmatic philosophy is the idea of taking responsibility for yourself and your actions. Don't be afraid to admit ignorance or error. Be honest about our shortcomings-our ignorance as well as our mistakes. Don't blame someone else or make up an excuse. Have a contingency plan. <strong>Provide Options, Don't Make Lame Excuses.</strong><br />
    </li>
    <li>Learning is a continuous and ongoing process.</li>
    <li><strong>Don't Live with Broken Windows。</strong><br />
    Don't leave bad designs,wrong decisions, or poor code unrepaired. It's easy to slip into the mindset of "All the rest of this code is crap, I'll just follow suit." But if you find yourself on a team and a project where the code is pristinely beautiful-clean written, well designed, and elegant, you will likely take extra special care not to mess it up. Everyone dont't want to be the first one to make a mess.<br />
    </li>
</ol>
<br />
<img src ="http://www.blogjava.net/sealyu/aggbug/306776.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sealyu/" target="_blank">seal</a> 2009-12-21 11:43 <a href="http://www.blogjava.net/sealyu/archive/2009/12/21/306776.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>The 7 Rules for Writing World Class Technical Documentation</title><link>http://www.blogjava.net/sealyu/archive/2009/12/01/304381.html</link><dc:creator>seal</dc:creator><author>seal</author><pubDate>Tue, 01 Dec 2009 07:40:00 GMT</pubDate><guid>http://www.blogjava.net/sealyu/archive/2009/12/01/304381.html</guid><wfw:comment>http://www.blogjava.net/sealyu/comments/304381.html</wfw:comment><comments>http://www.blogjava.net/sealyu/archive/2009/12/01/304381.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sealyu/comments/commentRss/304381.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sealyu/services/trackbacks/304381.html</trackback:ping><description><![CDATA[<h2>Introduction</h2>
<p>Writing a technical document is hard. Reading a poorly written
technical document is harder, and probably more painful than writing
one. It takes a lot of work to create a clear, accurate, engaging piece
of technical writing. Thus, in order to make life a little easier for
all parties involved, I am going to share with you the 7 Rules that I
follow when creating a piece of technical documentation. I did not
think these rules up on my own. Rather, I formulated them from having
had the benefit of working with many gifted technical and copy editors
for more than a decade. Anything that I understand is because others
have shown me the way. I cannot be more grateful.</p>
<p>Hopefully after reading this article, you will have some new tools
in your technical writing toolbox that will help you create technical
documents that are clearer, more engaging, less confusing and a lot
more fun to read. Also, I've added at no extra charge to you, the
consumer, a bonus section at the end that describes the process I use
to create a piece of technical writing.</p>
<p>Okay, so here are the 7 Rules:</p>
<ol>
    <li>Dry sucks
    </li>
    <li>Before you start, be clear about what you want your reader to do after you end
    </li>
    <li>Write to a well formed outline, always
    </li>
    <li>Avoid ambiguous pronouns
    </li>
    <li>clarity = illustrations + words
    </li>
    <li>When dealing with concepts... logical illustration and example
    </li>
    <li>Embrace revision </li>
</ol>
<br />
<br />
<script type="text/javascript">
initArticleMenu(document.getElementById("toolBoxShareMenu"));
</script>
<h2>1. Dry sucks</h2>
<p>This is probably the hardest rule to formalize and the most
important rule to follow. In the modern world of the Internet there are
many forces at work vying for the attention of your reader. Boring,
business as usual writing will not work. For better or worse, your
reader wants to be entertained as well as informed. Therefore, if you
create writing that is unclear and not fun, the reader will simply
click the proverbial "next"; button and move on to another web page,
another TV show or his or her Facebook page.</p>
<p>The easiest way that I've found to keep the reader entertained is to
keep myself entertained. I make a significant effort always to write an
article that I will want to read. I strive to have fun when I am
writing. If I'm bored, the reader will be bored. If I'm confused, the
reader will be confused. If I don't really care about the topic at
hand, the reader will never care. It's that simple.</p>
<p>I like humor, so I try to make my writing humorous without
compromising clarity. I try to talk to the reader, not at the reader. I
write about topics that really matter to me. I use illustrations
extensively in order to avoid confusing the reader.</p>
<p>Again, I try always to make the reading experience fun. I am aware
always that I am writing in a competitive environment. There's a lot of
content out there that wants a piece of the reader's attention. Thus,
my advice for Rule #1 is, if you make your writing fun for you, it will
be fun for the reader.</p>
<h2>2. Before you start, be clear about what you want your reader to do after you end</h2>
<p>Technical writing is all about the subsequent behavior of the
reader. The reader is investing time reading your work because he or
she wants to be able to do something after the reading experience is
over. That something may be learning how to make <a href="http://allrecipes.com/recipe/best-chocolate-chip-cookies/Detail.aspx">chocolate chip cookies</a>, power down a <a href="http://www.howstuffworks.com/nuclear-power.htm/printable">nuclear reactor</a> or set up a <a href="http://developer.yahoo.com/hadoop/tutorial/module7.html">Hadoop cluster</a>.
The important thing to remember is that the reader is using your
writing as a means to another end. Your piece is a vehicle to another
well defined behavior.</p>
<p>Thus, it will do you well to be very clear about what you want your
reader to do after the reading experience is over. State your intention
at the beginning. Don't leave the reader guessing. Your declaration can
be something as simple and obvious as, "after reading this article you
will be able to <em>[fill in the blank here]</em>." If you are clear
about what you want your reader to do after you end, the easier it will
be for you to write your piece at the beginning.</p>
<h2>3. Write to a well formed outline, always</h2>
<p>A well formed outline is the skeleton around which your document
grows. Writing a technical document without using an outline is like
trying to navigate the <a href="http://www.mta.info/nyct/maps/submap.htm">New York City Subway System</a> without a map. You can end up <em>anywhere</em> and that <em>anywhere</em> may not be where you intended to go.</p>
<p>Writing to an outline is not about creating more work. It's about
doing less work. When you write to an outline, you know where you've
come from and where you are going to.</p>
<p>There are two rules of outlining that I always use.</p>
<ol>
    <li>A sublevel topic requires at least one peer.
    </li>
    <li>Any outline level requires at least two sentences. </li>
</ol>
<p>Allow me to elaborate. Listing 1 below is an example of an outline that violates the first rule: <em>A sublevel topic requires at least one peer</em>.</p>
<p>Listing 1: A poorly formed outline</p>
<p>1. Making an Orange Cranberry Tangerine Fizzle</p>
<p>1.1. The steps required for the Fizzle</p>
<p>1.1.1. Preparing the ingredients</p>
<p>1.1.2. Mixing the Fizzle</p>
<p>1.1.3. Serving the Fizzle</p>
<p>Notice please that in Listing 1, Level 1, has a single sublevel, <em>1.1 - The steps required for the Fizzle</em>.
This structure is a violation of the first rule. In order for a
sublevel to be well formed, there must be at least one other peer for a
topic. In other words, this means that there must be at least two
sublevels for any given level.</p>
<p>Please look at Listing 2 below. Notice that there are now three sublevels to Level 1, of which the topic, <em>Mixing the fizzle</em>, now has peers. The single level, <em>The steps required for the Fizzle</em>, has been eliminated.</p>
<p>You may ask, "Where is the topic, <em>The steps required for the fizzle</em>?" The answer is that the topic is no longer an outline item but content within the parent topic as shown in Listing 2 below.</p>
<p>Listing 2: A well formed outline that violates the two sentence rule</p>
<p>1. Making an Orange Cranberry Tangerine Fizzle</p>
<p>The section below describes the process that you need follow to make an orange cranberry tangerine fizzle.</p>
<p>1.1. Preparing the ingredients</p>
<p>1.2. Mixing the Fizzle</p>
<p>1.3. Serving the fizzle</p>
<p>Please notice that although Listing 2 presents an outline with a
properly structured sublevel, there is only a single sentence as
content for the Level 1 topic. Having a single sentence only as content
to an outline topic violates the second rule of outlining, <em>Any outline level requires at least two sentences</em>.</p>
<p>Listing 3 below shows the Orange Cranberry Tangerine Fizzle piece adjusted to support the Two Sentence rule.</p>
<p>Listing 3: A well formed outline that supports the Two Sentence Rule</p>
<p>1.Making an Orange Cranberry Tangerine Fizzle</p>
<p>An Orange Cranberry Tangerine Fizzle can be a
welcome treat on a hot summer day. The beverage is made from natural
ingredients with no artificial flavors. An Orange Cranberry Tangerine
Fizzle not only tastes good, but it&#8217;s good for you too!</p>
<p>The sections below describe the process that you need follow to make an Orange Cranberry Tangerine fizzle.</p>
<p>1.1. Preparing the ingredients</p>
<p>1.2. Mixing the Fizzle</p>
<p>1.3. Serving the fizzle</p>
<p>Why all the hubbub about proper outline structure and at least two
sentences to a level? First, following the Sublevel rule forces me to
be very clear about the logical segmentation of my piece. Also the
Sublevel rule ensures that my writing communicates my ideas with a flow
that makes sense and is easy to follow.</p>
<p>Second, The Two Sentence rule forces me to create copy that is
engaging, detailed and makes sense. "One sentence" writing often lacks
detail. And, with the exception of one- liner comedy, writing of the
"one sentence" variety is not the most interesting copy to read.</p>
<h2>4. Avoid ambiguous pronouns</h2>
<p>Ambiguous pronoun references are probably the most typical cause of confusion in the practice of technical writing.</p>
<p>Consider the paragraph in Listing 4.</p>
<div>
<p>Listing 4: A paragraph that has ambiguous pronouns</p>
Trafalgabors
are a fundamental component of the Weebietatas framework. This article
shows you what they are about and how to use them.</div>
<p>This paragraph may seem a bit comical, but it illustrates some
important points. First, the paragraph attempts to put you in a place
that the reader occupies. The reader wants to understand what's going
on but is unfamiliar with the language in play. And because the
language is unfamiliar, the reader is ignorant and thus, vulnerable.
The reader wants new information; he or she wants to get smarter. But
the reader is also a bit anxious. Admitting ignorance, even to one's
self, even at a subconscious level, can be disconcerting. The reader is
cognitively fragile. Concepts and words that you, the writer, take for
granted, might be completely foreign to the reader. One ill explained
concept or one word used without proper clarification can turn the
reader off.</p>
<script type="text/javascript">
initArticleMenu(document.getElementById("toolBoxShareMenu"));
</script>
<p>In
the case of the paragraph above, I would not be surprised were you to
be asking, "What is a Trafalgabor? What is a Weebietata? What is the
paragraph talking about? How to use Trafalgabors? How to use
Weebietatas? How to use both of them? This is confusing. I am going
back to my Facebook page."</p>
<p>If a reader has to take time out from your writing to figure out
what you are trying to communicate, not only is expository flow
compromised, the reader most probably will become confused. Once you
confuse the reader, you've lost. All the other stuff in the world
demanding the reader's attention becomes more attractive than your
work. So, the "next" button is clicked and your work goes unread.</p>
<p>In the case of Listing 4 shown above, the confusion is caused by the ambiguous use of the pronoun, <em>they</em> in the second sentence. Does <em>they</em>
refer to the Trafalgabors, the Weebietatas or both? Remember please
that the reader knows nothing of Trafalgabors or Weebietatas. (Please
see Figure 1 below.)</p>
<p><a href="http://www.developer.com/img/2009/12/trafalgabors.jpg" target="newFrame"><br />
<img alt="Avoid Ambiguous Pronouns" src="http://www.developer.com/img/2009/12/trafalgabors.jpg" width="425" border="0" /> <br />
<font size="3"><em>Click here for larger image</em></font></a><br />
<strong>Figure 1:</strong> The use of ambiguous pronouns makes technical writing confusing <br />
</p>
<p>The solution to the problem is simple. Please take a look at Listing
5 below. The ambiguous pronoun is removed. Clarity is restored.</p>
<div>
<p>Listing 5: A remedy for ambiguous pronouuns</p>
Trafalgabors
are a fundamental component of the Weebietatas framework. This article
shows you what Trafalgabors are about and how to use them</div>
<p>Beware! The ambiguous use of pronouns is a sign post on the road to confusing technical writing.</p>
<h2>5. clarity = illustrations + words</h2>
<p>Please take a look at the photo below. Tell me if you can, what is the graphic about?</p>
<p><a href="http://www.developer.com/img/2009/12/all-01.jpg" target="newFrame"><br />
<img alt="Photo without context" src="http://www.developer.com/img/2009/12/all-01.jpg" width="425" border="0" /></a><br />
</p>
<p>I am not surprised should you find yourself a bit perplexed. It's a
perplexing photo. You know what the items are, but you have no idea
what they mean. Such is the nature of an illustration. A picture
without words lacks context.</p>
<p>When it comes to illustrations, readers require context in order to
avoid confusion. The reader should not need to waste time or thought
trying to figure out what an illustration is about. The easiest way to
avoid confusing illustrations is to provide a caption.</p>
<p>Please take a look at the Figure 2 below. It is the same photo. There is little question as to what the photo is about.</p>
<p><a href="http://www.developer.com/img/2009/12/all-01.jpg" target="newFrame"><br />
<img alt="Photo without context" src="http://www.developer.com/img/2009/12/all-01.jpg" width="425" border="0" /> <br />
<font size="3"><em>Click here for larger image</em></font></a><br />
<strong>Figure 2:</strong> The tools and ingredients required to make an Orange Cranberry Tangerine Fizzle <br />
</p>
<p>When it comes to technical writing, I have found it to be a good
practice to provide numbered, descriptive captions with all
illustrations.</p>
<p>Please, don't create captions that are figure numerals only. Use
both a figure numerals and a descriptive comment in the caption. Also,
you'll do well to avoid orphaning illustrations. An orphan illustration
is a figure that exists within the piece of technical writing yet has
no reference from within the copy.</p>
<p>If you insert an illustration into your writing, make sure to refer
to it in your copy by figure number and location using words such as, <em>above</em> and <em>below</em>.
You don't want to reader taking time out from reading your work to try
to associate an illustration to copy or to locate an illustration
within your article. If you add have a "Figure 4" in your piece, make
sure that you have language in the text that says something like, <em>please refer to Figure 4 below</em>.</p>
<div>
<p align="center"><strong>Note:</strong> The eye is attracted to pictures</p>
<p>A decade back I worked in the group that wrote hard copy user
manuals for a very, very big computer manufacturer. All manuals were
subject to formal, quantitative usability study. One of the things that
the User Experience Ph. Ds taught me is that as a subject reads a
manual, the reader's eye goes to the pictures first. Then the reader
will read the copy around the picture. Thus, the manual writer's tried
to make sure that every page of a manual had at least one picture.</p>
</div>
<h2>6. When dealing with concepts... logical illustration and example, logical illustration and example</h2>
<p>Concepts are hard to understand....that's why they're called,
concepts. So, when it comes time for me to write about a concept,
whether it is, the <a href="http://en.wikipedia.org/wiki/Second_law_of_thermodynamics">Second Law of Thermodynamics</a>,
a piece of coding technique or a full fledged software framework, I use
the following pattern in my writing: concept - logical illustration -
example. I try to never introduce a concept without substantiating the
concept with a logical illustration and then an example.</p>
<p>Let's apply this rule to describe an elementary algebraic concept.</p>
<p>The Transitive Property of Equality is as follows:</p>
<p>If A = B, and B = C, then A = C</p>
<p>Now let's provide a logical illustration that describes the concept. (Please see Figure 3.)</p>
<p><a href="http://www.developer.com/img/2009/12/trans-01.jpg" target="newFrame"><br />
<img alt="Transitive Property of Equality" src="http://www.developer.com/img/2009/12/trans-01.jpg" width="425" border="0" /> <br />
<font size="3"><em>Click here for larger image</em></font></a> <br />
<strong>Figure 3:</strong> Thee Transitive Property of Equality is a fundamental principle of elementary algebra </p>
<p>Listing 6 below shows a few concrete examples to solidify the understanding of the concept at hand.</p>
<p>Listing 6: Some concrete examples of the Transitive Property of Equality</p>
<ul>
    <li>If 7 = 3 + 4, and 3 + 4 = 5 + 2, then 7 = 5 + 2
    </li>
    <li>If 12 + 5 = 7 + 10, and 7 + 10 = 6 + 11, then 12 + 5 = 6 + 11
    </li>
    <li>If x + y = z, and z = 2a, then x + y = 2a </li>
</ul>
<p>Thus, the rule as has been satisfied. We presented the concept, The
Transitive Property of Equality, provided a descriptive illustration
and followed up with concrete examples that substantiate the concept.</p>
<p>Let's move on to a concept that is more relevant to software development and a bit more difficult to understand. The concept is <a href="http://maven.apache.org/pom.html">Maven POM Inheritance</a>.
In Exhibit 1 below you are presented with the concept at hand and then
a logical illustration that describes the concept. Finally, you are
presented with another illustration that shows the concrete use of a
POM files in an inheritance situation.</p>
<p>Exhibit 1: An excerpt of technical writing that describes Maven POM Inheritance</p>
<div>
<p>Understanding POM File Inheritance</p>
<p>A <a href="http://maven.apache.org/pom.html">POM</a> file (Project Object Model) is the XML file that you use to describe and work with a <a href="http://maven.apache.org/index.html">Maven</a>
project. You can set up a Maven project to inherit settings from a
separate parent POM file. The ability to inherit settings from a parent
POM file is called, POM Inheritance. You use the <span style="font-size: 10pt; font-family: Courier New,Courier,monospace;">&lt;parent&gt;</span> element in your POM file to define a parent POM file from which to inherit settings.</p>
<p>Figure 4 below illustrates a fictitious project hierarchy that
represents an example of how you can set up a master POM file from
which other POM files can inherit common settings.</p>
<p><a href="http://www.developer.com/img/2009/12/pom-inheritance.jpg" target="newFrame"><br />
<img alt="POM Inheritance" src="http://www.developer.com/img/2009/12/pom-inheritance.jpg" width="425" border="0" /> <br />
<font size="3"><em>Click here for larger image</em></font></a> <br />
<strong>Figure 4:</strong>You can designate a master POM from which you can inherit common settings </p>
<p>Figure 5 below shows the contents POM.xml files for the Maven projects, <span style="font-size: 10pt; font-family: Courier New,Courier,monospace;">stooges-web</span>, <span style="font-size: 10pt; font-family: Courier New,Courier,monospace;">stooges-api</span> and <span style="font-size: 10pt; font-family: Courier New,Courier,monospace;">stooges-dal</span>. Each project is configured to use the <span style="font-size: 10pt; font-family: Courier New,Courier,monospace;">&lt;parent&gt;</span> element to inherit settings from <span style="font-size: 10pt; font-family: Courier New,Courier,monospace;">stooges-project</span>.</p>
<p><a href="http://www.developer.com/img/2009/12/pom-example.jpg" target="newFrame"><br />
<img alt="POM Files in Action" src="http://www.developer.com/img/2009/12/pom-example.jpg" width="425" border="0" /> <br />
<font size="3"><em>Click here for larger image</em></font></a> <br />
<strong>Figure 5:</strong> Use the <span style="font-size: 10pt; font-family: Courier New,Courier,monospace;">&lt;parent&gt;</span> element to direct a Maven project to inherit settings from an external POM file. </p>
</div>
<p>The example above relies heavily upon figures to provide logical
illustration and a concrete example of the concept at hand. Creating
interesting, engaging and accurate illustrations and examples are a
difficult undertaking, but well worth the effort. Many times creating
the illustrations for a piece of technical writing and providing
example code will take as much, if not more time than writing the
actual copy. Thus, I plan accordingly when allocating my time to meet a
deadline.</p>
<p>When it comes to making a concept crystal clear, illustrate and then provide an example.</p>
<h2>7. Embrace revision</h2>
<p>It's rare to produce a good piece of technical writing right off the
bat. Understanding your topic, organizing your ideas and then finding
the language to present the ideas clearly and accurately takes time as
well as a lot of effort. Therefore, don't constrain yourself by
expecting to get everything right the first time. Rather, plan to write
at least three versions of your piece. The first version just gets some
words in print so that you can understand your intentions. The second
version brings clarity and accuracy to your work. Then, once you have
your facts right, your illustrations clear and your organization
logical, create a third version that makes your work engaging and
special.</p>
<p>To hijack the <a href="http://www.quotationspage.com/quote/24945.html">Thomas Edison quote</a>, <em>"Technical writing is 10% composition and 90% revision!"</em></p>
<h2>Bonus section</h2>
<p>Now that you learned about the 7 Rules for Creating World Class
Technical Documentation, I am going to share with you the process that
I use to create a piece of technical writing. It's short, but to the
point. I call the process, <em>The 7 Steps for Making a Technical Document</em>. Here goes:</p>
<ol>
    <li>I create outline, at least to the second level, hopefully to the third.
    </li>
    <li>I add to the outline my illustration for each concept.
    </li>
    <li>I caption my illustrations.
    </li>
    <li>I fill in the copy to the outline, following the Two Sentence Rule, adjusting my outline to adapt to the copy at hand.
    </li>
    <li>I revise.
    </li>
    <li>I send the piece to a subject matter expert for review. (A
    subject matter expert is a person that can identify inaccuracies and
    unclear writing.) </li>
    <li>I revise again based on the response of the reviewer(s). </li>
</ol>
<p>There you have it. 7 Rules, 7 Steps. Who could ask for more? So, now
that you've learned all of my tricks, feel free to go forth and make
the world a more accurate, engaging, illustrative and interesting place
in which to live. It's worth the effort.</p>
<img src ="http://www.blogjava.net/sealyu/aggbug/304381.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sealyu/" target="_blank">seal</a> 2009-12-01 15:40 <a href="http://www.blogjava.net/sealyu/archive/2009/12/01/304381.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>四大咨询公司 VS 四大会计师事务所</title><link>http://www.blogjava.net/sealyu/archive/2009/11/22/303253.html</link><dc:creator>seal</dc:creator><author>seal</author><pubDate>Sun, 22 Nov 2009 11:52:00 GMT</pubDate><guid>http://www.blogjava.net/sealyu/archive/2009/11/22/303253.html</guid><wfw:comment>http://www.blogjava.net/sealyu/comments/303253.html</wfw:comment><comments>http://www.blogjava.net/sealyu/archive/2009/11/22/303253.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sealyu/comments/commentRss/303253.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sealyu/services/trackbacks/303253.html</trackback:ping><description><![CDATA[以前一直以为毕马威等是四大咨询公司，今天才知道那是四大会计师事务所。<br />
<br />
<div id="blog_text" class="cnt">
<p align="left">普华永道(PwC)和毕马威（KPMG）、安永（Ernst&amp;Young）以及德勤（Deloitte Touche Tohmatsu）合称为四大会计师事务所。</p>
<p align="left">普华永道<br />
普华永道会计师事务所（PriceWaterhouseCoopers或PwC，香港称作罗兵咸永道，俗称水记或水房,台湾称为资诚）是世界最大的专业服
务机构。它是普华（Price Waterhouse）和永道（Coopers&amp;Lybrand）于1998年合并组建而成。</p>
<p align="left">1 普华（Price Waterhouse） <br />
1849年，塞缪尔&#183;普里斯（Samuel Price）在伦敦开始了其会计师生涯。1865年，普里斯与威廉&#183;豪里兰德（William
Holyland）及埃德温&#183;华特豪斯（Edwin
Waterhouse）建立了合伙制的会计师事务所，豪里兰德在此之后很快退出。1874年，该事务所被命名为普里斯&#183;华特豪斯公司
（Price,Waterhouse&amp;Co.）。（&#8220;公司（&amp;Co.）&#8221;的称谓在很久以后才被放弃）到19世纪晚期，普华作为一家会计师
事务所已经取得了广泛的认可。为了应对英国和美国之间快速发展的贸易关系，在1890年，普华在纽约开办了一家分所。美国分所在此之后进行了高速扩张。同
时，原有的英国事务所也在不列颠帝国内部的主要国家不断开办新的事务所。在每个国家都建立了独立的合伙关系，这样就给予了当地合伙人扩张本地业务的强劲冲
动。这样，普华在全世界的扩张不是通过国际范围的合并重组，而是通过建立合作关系的联盟完成的。</p>
<p align="left">2 永道（Coopers&amp;Lybrand） <br />
与普华一样，永道同样可以起源于19世纪。在1854年，威廉&#183;库珀（William
Cooper）在伦敦建立了自己的会计师事务所。七年后，库珀的其他三个兄弟也加入了这家事务所，于是便改称&#8220;库珀兄弟会计师事务所&#8221;（Cooper
Brothers）。在1898年，罗伯&#183;H&#183;蒙哥马利（Rober H. Montgomery）, 威廉&#183;M&#183;莱布兰德（William M.
Lybrand），小亚当&#183;A&#183;罗斯（Adam A.
Ross）和他的兄弟T&#183;爱德华&#183;罗斯在美国成立了莱布兰德-罗斯兄弟-蒙哥马利会计师事务所（Lybrand,Ross Brothers and
Montgomery）。永道（Coopers&amp;Lybrand）是于1957年由&#8220;库珀兄弟（Cooper
Brothers&amp;Co.）&#8221;、&#8220;莱布兰德-罗斯兄弟-蒙哥马利（Lybrand,Ross Brothers and
Montgomery）&#8221;及一家名为&#8220;麦克唐纳-克里（McDonald,Currie and
Co）&#8221;的加拿大事务所合并而成的。在1990年，永道在英国合并了Deloitte
Haskins&amp;Sells。但是，其他绝大多数Deloitte事务所与Touche Ross合并，并最终组建了&#8220;德勤（Deloitte
Touche Tohmatsu）&#8221;。</p>
<p align="left">毕马威</p>
<p align="left">毕马威（KPMG）于1987年由Peat Marwick International (PMI)和
Klynveld Main Goerdeler
(KMG)的各个成员机构合并而成。毕马威历史悠久，发展跨越三个世纪，KPMG的四个字母分别代表其主要创办人的英文名称缩写。<br />
K代表Klynveld, Piet Klynveld于1917年在阿姆斯特丹成立了Klynveld Kraayenhof &amp; Co.<br />
P代表Peat,William Barclay Peat于1870年在伦敦成立了William Barclay Peat &amp; Co.<br />
M代表Marwick,James Marwick和Roger Mitchell于1897年在纽约共同成立了Marwick,Mitchell &amp; Co.<br />
G代表Goerdeler,Reinhard Goerdeler博士多年来一直担任Deutsche Treuhand-Gesellschaft的主席，其后出任毕马威的主席。他为KMG的合并工作奠定了稳固的基础，居功至伟。<br />
<br />
1911年，William Barclay Peat &amp; Co.和Marwick,Mitchell &amp; Co.合并成为一家网络遍布全球的会计及专业咨询机构-Peat Marwick International(PMI).<br />
1979年，Klynveld,Deutsche Treuhand-Gesellschaft和跨国专业服务机构McLintock Main Lafrentz进行合并，组成Klynveld Main Goerdeler (KMG).<br />
1987年，PMI和KMG的成员机构进行合并。自此，它们在全球各地的所有成员机构均以毕马威的名义提供服务，或把毕马威之名纳入其机构名称内。<br />
<br />
毕马威在中国和香港特别行政区的发展历程<br />
<br />
毕马威在中国和香港特别行政区的业务可上溯至1945年。在1941年12月香港沦陷时，汇丰银行总办事处被迫暂时迁往伦敦。该行当时的核数师之一—伦敦
的Peat Marwick Mitchell &amp;
Co.获委任协助该行编制账项。战争结束后，汇丰银行总办事处迁回香港。为了保持核数工作的连贯性及在该行的要求下，当时担任该行联合核数师的Peat
Marwick Mitchell &amp; Co.遂于香港设立办事处。<br />
1945年，Peat Marwick Mitchell &amp; Co.在香港的合伙业务正式成立。<br />
1983年，毕马威在国内设立了首家办事处。<br />
1987年，Peat Marwick Mitchell &amp; Co.与Klynveld Main Goeerdeler进行全球合并，组成了KPMG Peat Marwick.<br />
1992年，毕马威成为首家获准在国内合资开业的国际会计师事务所。<br />
1998年，KPMG Peat Marwick更名为毕马威（KPMG）.</p>
<p align="left">安永</p>
<p align="left">Ernst &amp;
Young(台湾称为致远)至今已有一百多年的历史。1989年，原八大会计事物所之中的1894年成立于美国纽约的Arthur Young
及1903年成立于美国克利夫兰的 Ernst &amp; Whinney 之间的兼并造就了现在的Ernst &amp;
Young。安永现在是全美第二大会计事物所。1998年，公司在全球132个国家设有675个办事机构，共有82,000名员工。 <br />
在华业务由位于香港的中国区总部负责，在北京、成都、大连、广州、澳门、上海、深圳、苏州、武汉设有办事处。</p>
<p align="left">德勤</p>
<p align="left">德勤（Deloitte Touche
Tohmatsu）台湾称为勤业众信,成立于1894年.在1989年，Deloitte Haskins &amp; Sells
International 和在1975年与日本的审计公司 Tohmatsu Awoki &amp; Sanwa 联合的Touche Ross
International 合并，形成了Deloitte Touche Tohmatsu， 即德勤全球。Spicer &amp;
Oppenheim 于1991年加入了我们在香港特别行政区和英国的国际网络。1997年，德勤与香港特别行政区最大的华人会计师事务所 -
关黄陈方会计师事务所 - 合并。</p>
<p align="left"><br />
</p>
<p align="left"><br />
</p>
<p align="left">四大咨询公司：</p>
<p align="left">美国麦肯锡顾问公司、美国波士顿顾问公司、美国&#8220;埃森哲&#8221;顾问公司、德国罗兰&#183;贝格顾问公司</p>
</div>
<br />
<br />
<br />
<img src ="http://www.blogjava.net/sealyu/aggbug/303253.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sealyu/" target="_blank">seal</a> 2009-11-22 19:52 <a href="http://www.blogjava.net/sealyu/archive/2009/11/22/303253.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>What Is A Professional Programmer?</title><link>http://www.blogjava.net/sealyu/archive/2009/11/10/301822.html</link><dc:creator>seal</dc:creator><author>seal</author><pubDate>Tue, 10 Nov 2009 06:00:00 GMT</pubDate><guid>http://www.blogjava.net/sealyu/archive/2009/11/10/301822.html</guid><wfw:comment>http://www.blogjava.net/sealyu/comments/301822.html</wfw:comment><comments>http://www.blogjava.net/sealyu/archive/2009/11/10/301822.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sealyu/comments/commentRss/301822.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sealyu/services/trackbacks/301822.html</trackback:ping><description><![CDATA[<div id="byline">
By <a href="http://www.developerdotstar.com/mag/bios/sarah_george.html" title="Biographical Information About the Software Development Author Sarah George">Sarah George</a>
</div>
<div id="posteddate">Published  April 19, 2006</div>
<div id="articlelinks">
<a href="http://www.developerdotstar.com/community/node/466">Discussion</a>
&nbsp;-&nbsp;
<a href="http://www.developerdotstar.com/printable/mag/articles/software_professionalism.html">Printable</a>
&nbsp;-&nbsp;
<a href="http://www.developerdotstar.com/mag/articles/PDF/DevDotStar_George_Professionalism.pdf">PDF</a>
</div>
<div id="content">
<p>How
do people become professional programmers? Many people go the
"traditional" path through a computer science or software engineering
education and from there into professional programming work.</p>
<p>Others become professional programmers by accident. A person writes
a small program to help at work, and their workmates say, "Oh great,
you can write programs! You're our programmer now!"</p>
<p>Other people start out as hobbyists and follow a less traditional
path, not always getting a degree, but clearly wanting to be
programmers from the start and working actively towards that goal.</p>
<p>I've been a hobbyist programmer since I was 6. I wasn't writing
anything amazing back then but I had started writing and soon found it
was absorbing most of my time. Since I never really stopped, that gives
me 24 years "programming experience" and counting.</p>
<p>At first I was into writing computer games. Later people asked me to
write programs for them, and sometimes I even got paid. From this I
learned that software is always <em>for</em> something. Programs are not
self contained worlds of their own. People expect things out of a
program that have more to do with Japanese or Geophysics or Engineering
(or whatever they've got in mind) than with how a computer works. I had
to learn something about all those domains in order to write programs
for them.</p>
<p>At university it didn't take long before I was a tutor, and that's
where I found I enjoy teaching, and especially enjoy teaching
programming.</p>
<p>While I was at university I got my first "real" job, writing Visual
C++ code for a financial database company. In terms of design and
theory it was lightweight stuff. But in terms of working with others on
a large project I was being thrown in the deep end! They had gigabytes
of source code, growing cancerously through the efforts of a dozen
developers of wildly differing skill levels.</p>
<p>In spite of my programming skills being well above average there, I
learned to settle for being a junior programmer, a little fish in a
large pond.</p>
<p>Skipping along a few more jobs and a lot more years, today I am a
senior developer in a small research group—a big fish in a little pond.
I've had to teach my co-workers a lot about professional programming,
because most of them haven't been in industry to get that taste of what
large code bases and diverse skill levels do to programs if you aren't
using those "professional" skills to keep everyone pointed in the same
direction.</p>
<p>There's quite a gap between "being able to program" and being a
"professional programmer." It took me 15 years to go from beginner to
hotshot programmer, then another 10 years to go from hotshot to
professional—and I'm still learning.</p>
<p>Whatever the path we follow, most professional programmers have in common the fact that they learned to <em>code</em> first and how to be a professional later.</p>
<h2>The Meaning of "Professional"</h2>
<p>So what does it <em>mean</em> to be a professional programmer? What does it mean to be a professional <em>anything</em>?
Some definitions simply say to be a professional is "to make money from
a skill," but true professionals also have a set of qualities often
described as "professionalism." In my opinion, these qualities are:
trustworthiness, teamwork, leadership, communication, constant updating
of skills, an interest in minimizing risks and accountability. Each of
these effect the professional programmer in certain ways.</p>
<p><strong>Trustworthiness</strong> The concept of trustworthiness applies in
several different ways for programmers. Can you be trusted with a job?
To perform a task without someone checking up on you? Can you be
trusted to ask for help when you need it?</p>
<p>If you're given clients' data or have signed a non-disclosure
agreement, then you are being trusted to respect privacy. You are
trusted to check license agreements on third party tools or libraries
and to get licenses or permission as required. And like any
professional you are trusted to simply do a good job.</p>
<p><strong>Teamwork</strong> Will you genuinely cooperate with your team mates?
Will you work to mutual advantage and not just your own? Can you trust
your team to work with you? Can you do your share of the work and trust
your team to do the rest? And can you accept your management (and
sometimes even clients) as part of the team, everyone trying to get the
same job done?</p>
<p><strong>Leadership</strong> Showing leadership means both earning respect from
others and knowing what to do with it. Recognize the skills of your
team members, and make sure you can offer each person challenges and
development without exceeding what they can cope with at a given time.</p>
<p>Leadership involves not always getting to do the "fun" parts of a
project yourself (that scary "delegation" word). It also involves not
asking anyone to do a task that you wouldn't be willing to do yourself.
It's not just the managers and lead programmers who need to show
leadership, it's any professional programmer. The best programmers to
work with are the ones that know what's going on, not just their little
tasks.</p>
<p><strong>Communication</strong> Respecting the people you work with, and your clients, enough to <em>really</em> listen to them is a critical part of communication. Teamwork can't happen without good communication, nor can accountability.</p>
<p>Communication is critical for helping clients to produce usable
specifications and feedback. Will you question whether the specs you
are given really will serve the purpose that the client has in mind?</p>
<p>Communication skills help with making meetings timely and effective.
A professional's communication is effective and to the point, whether
in person, in email, on the phone or in written documents.</p>
<p>Documentation at first seems like a programmer-specific concern
until you consider how many people require documentation in a serious
project: other programmers need high level, API level and in-code
documentation; managers need planning, progress, and bug documentation;
lawyers need proof of what was done and when; and users need
documentation on how to use the software.</p>
<p><strong>Updating Skills</strong> Keeping your skills up to date involves
staying aware of what's going on in your industry. What are the current
ideas about methodologies like eXtreme Programming? What libraries and
tools are out there that might support your project? What are the
current refactoring tools? How about standards, file formats and
protocols? Are you up to date with Unicode, XML, SQL, and all the other
acronyms? Perhaps you're missing out on something if you're not. What
platforms are your potential clients using? Should you be learning
about cross platform development?</p>
<p>Basically you need to possess a genuine interest in your field, and
to read broadly so you know what's out there and which areas to then
read deeply about. You also need to accept that even (or should I say
"especially") the very best programmers are still learning.</p>
<p><strong>Minimizing Risks</strong> Familiarity with best practices, combined
with a healthy dose of common sense, will take you a long way towards
managing risks. Professional programmers keep track of known bugs or
any other change they intend to make. Bugs are risks, and a simple
database can prevent you having a product ship with bugs you'd simply
forgotten.</p>
<p>Another risk that's often not properly considered is any and all
changes to the source code. Source is your livelihood and any change
can be a mistake. There's good software out there that will keep track
of every revision of your source code and even help merge code that
multiple people have changed.</p>
<p>Professional programmers are careful to do enough testing. A
software company will generally have testers but the developers need to
know how to get the most out of testers and also how to write their own
unit and regression tests to make sure every change in behavior is
noticed and checked by a human.</p>
<p>Keeping your code simple and well styled is another commonly
overlooked way to manage risks. If anyone can look at the code and see
right away what it does, you are far less likely to find bugs in it
later, and you are less likely to have a junior programmer attempt to
change something without understanding it first.</p>
<p>Another risk is the client changing their mind, or more often
changing their specifications because they've realized it wasn't what
they had in mind. Write your code to be modular and reusable and you
won't have any trouble adapting it to changing needs.</p>
<p><strong>Accountability</strong> Writing code for others is a <em>responsibility</em>.
You need to make sure your software is reliable. You need to make sure
you and the client truly understand the requirements and
specifications. You need to have documentation of your work, all
current and past bugs, your progress, any problems, signed-off
milestones, and more. You are also required to know about some basic
legal issues, like software licensing, the terms of your employment
contract, and intellectual property law.</p>
<center>*&nbsp;*&nbsp;*</center>
<p>As you can see, there is a huge gap between "coding" and
"professional programming." Most programming courses focus on the
coding side of things, and the professional skills tend to be glossed
over or not covered at all. I have found myself regularly teaching
these skills to new co-workers, which highlighted the need for
"professionalism skills training." Teaching my co-workers reminded me
how much I enjoy teaching. I decided to teach more people by trying my
hand at professional <em>writing</em> for a change.</p>
<p>I set up a web site, which is completely independent from my day job. The site is called <a href="http://www.developingprogrammers.com/" title="Software development web site for hobbyist to professional">Developing Programmers.com</a>.
It is devoted to teaching people how to develop into professional
programmers. Since founding the site, I've been presenting the tools
and ideas that I think professionals should know about.</p>
<p>Some of my articles simply refer to other sites of benefit to
would-be professionals. I research other articles from scratch:
tutorials, guides, and discussions of things professionals should be
thinking about, like revision control, documentation, keeping your
group pointed in the same direction—and of course, each of the aspects
of professionalism that I listed earlier.</p>
<p>These days I consider myself to be a professional programmer, though
I am still discovering the depth and breadth of what exactly that
means. Perhaps that ongoing exploration of programming and of
professionalism is what makes this for me a career and not just a job.</p>
<div id="bottomarticlelinks">
<a href="http://www.developerdotstar.com/community/node/466">Discussion</a>
&nbsp;-&nbsp;
<a href="http://www.developerdotstar.com/printable/mag/articles/software_professionalism.html">Printable</a>
&nbsp;-&nbsp;
<a href="http://www.developerdotstar.com/mag/articles/PDF/DevDotStar_George_Professionalism.pdf">PDF</a>
</div>
<div id="aboutauthor"><a href="http://www.developerdotstar.com/mag/bios/sarah_george.html" title="Biographical Information About the Software Development Author Sarah George">Sarah George</a>
lives in Melbourne, Australia, and holds an honors degree in Computer
Science. She has had a range of programming-related jobs, including
applied programming, teaching computer science practical and tutorial
classes, and is currently working as part of an artificial intelligence
research team at Monash University. Her web site, Developing
Programmers .com, is aimed at programmers who want to become more
professional about their craft.</div>
</div>
<img src ="http://www.blogjava.net/sealyu/aggbug/301822.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sealyu/" target="_blank">seal</a> 2009-11-10 14:00 <a href="http://www.blogjava.net/sealyu/archive/2009/11/10/301822.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>What Is Software Design?</title><link>http://www.blogjava.net/sealyu/archive/2009/11/05/301259.html</link><dc:creator>seal</dc:creator><author>seal</author><pubDate>Thu, 05 Nov 2009 05:46:00 GMT</pubDate><guid>http://www.blogjava.net/sealyu/archive/2009/11/05/301259.html</guid><wfw:comment>http://www.blogjava.net/sealyu/comments/301259.html</wfw:comment><comments>http://www.blogjava.net/sealyu/archive/2009/11/05/301259.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sealyu/comments/commentRss/301259.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sealyu/services/trackbacks/301259.html</trackback:ping><description><![CDATA[<div id="byline">
By <a href="http://www.developerdotstar.com/mag/bios/jack_reeves.html" title="Software Design Author Jack W. Reeves Biography">Jack W. Reeves</a>
</div>
<div id="posteddate">Published  February 23, 2005</div>
<div id="articlelinks">
<a href="http://www.developerdotstar.com/community/node/135">Discussion</a>
&nbsp;-&nbsp;
<a href="http://www.developerdotstar.com/printable/mag/articles/reeves_design.html">Printable</a>
&nbsp;-&nbsp;
<a href="http://www.developerdotstar.com/mag/articles/PDF/DevDotStar_Reeves_CodeAsDesign.pdf">PDF</a>
</div>
<div id="content">
<p>This is Part One of <em>Code As Design: Three Essays by Jack W. Reeves</em>. <a href="http://www.developerdotstar.com/mag/articles/reeves_design_main.html">Click here for the introduction</a>. This essay first appeared in the Fall, 1992 issue of <em>C++ Journal</em>.</p>
<p>Object oriented techniques, and C++ in
particular, seem to be taking the software world by storm. Numerous
articles and books have appeared describing how to apply the new
techniques. In general, the questions of whether O-O techniques are
just hype have been replaced by questions of how to get the benefits
with the least amount of pain. Object oriented techniques have been
around for some time, but this exploding popularity seems a bit
unusual. Why the sudden interest? All kinds of explanations have been
offered. In truth, there is probably no single reason. Probably, a
combination of factors has finally reached critical mass and things are
taking off. Nevertheless, it seems that C++ itself is a major factor in
this latest phase of the software revolution. Again, there are probably
a number of reasons why, but I want to suggest an answer from a
slightly different perspective: C++ has become popular because it makes
it easier to design software and program at the same time.</p>
<p>If that comment seems a bit unusual, it is deliberate. What I want
to do in this article is take a look at the relationship between
programming and software design. For almost 10 years I have felt that
the software industry collectively misses a subtle point about the
difference between developing a software design and what a software
design really is. I think there is a profound lesson in the growing
popularity of C++ about what we can do to become better software
engineers, if only we see it. This lesson is that programming is not
about building software; programming is about designing software. </p>
<p>Years ago I was attending a seminar where the question came up of
whether software development is an engineering discipline or not. While
I do not remember the resulting discussion, I do remember how it
catalyzed my own thinking that the software industry has created some
false parallels with hardware engineering while missing some perfectly
valid parallels. In essence, I concluded that we are not software
engineers because we do not realize what a software design really is. I
am even more convinced of that today.</p>
<p>The final goal of any engineering activity is the some type of
documentation. When a design effort is complete, the design
documentation is turned over to the manufacturing team. This is a
completely different group with completely different skills from the
design team. If the design documents truly represent a complete design,
the manufacturing team can proceed to build the product. In fact, they
can proceed to build lots of the product, all without any further
intervention of the designers. After reviewing the software development
life cycle as I understood it, I concluded that the only software
documentation that actually seems to satisfy the criteria of an
engineering design is the source code listings.</p>
<p>There are probably enough arguments both for and against this
premise to fill numerous articles. This article assumes that final
source code is the real software design and then examines some of the
consequences of that assumption. I may not be able to prove that this
point of view is correct, but I hope to shown that it does explain some
of the observed facts of the software industry, including the
popularity of C++.</p>
<p>There is one consequence of considering code as software design that
completely overwhelms all others. It is so important and so obvious
that it is a total blind spot for most software organizations. This is
the fact that software is cheap to build. It does not qualify as
inexpensive; it is so cheap it is almost free. If source code is a
software design, then actually building software is done by compilers
and linkers. We often refer to the process of compiling and linking a
complete software system as "doing a build". The capital investment in
software construction equipment is low—all it really takes is a
computer, an editor, a compiler, and a linker. Once a build environment
is available, then actually doing a software build just takes a little
time. Compiling a 50,000 line C++ program may seem to take forever, but
how long would it take to build a hardware system that had a design of
the same complexity as 50,000 lines of C++.</p>
<p>Another consequence of considering source code as software design is
the fact that a software design is relatively easy to create, at least
in the mechanical sense. Writing (i.e., designing) a typical software
module of 50 to 100 lines of code is usually only a couple of day's
effort (getting it fully debugged is another story, but more on that
later). It is tempting to ask if there is any other engineering
discipline that can produce designs of such complexity as software in
such a short time, but first we have to figure out how to measure and
compare complexity. Nevertheless, it is obvious that software designs
get very large rather quickly.</p>
<p>Given that software designs are relatively easy to turn out, and
essentially free to build, an unsurprising revelation is that software
designs tend to be incredibly large and complex. This may seem obvious
but the magnitude of the problem is often ignored. School projects
often end up being several thousand lines of code. There are software
products with 10,000 line designs that are given away by their
designers. We have long since passed the point where simple software is
of much interest. Typical commercial software products have designs
that consist of hundreds of thousands of lines. Many software designs
run into the millions. Additionally, software designs are almost always
constantly evolving. While the current design may only be a few
thousand lines of code, many times that may actually have been written
over the life of the product.</p>
<p>While there are certainly examples of hardware designs that are
arguably as complex as software designs, note two facts about modern
hardware. One, complex hardware engineering efforts are not always as
free of bugs as software critics would have us believe. Major
microprocessors have been shipped with errors in their logic, bridges
collapsed, dams broken, airliners fallen out of the sky, and thousands
of automobiles and other consumer products have been recalled - all
within recent memory and all the result of design errors. Second,
complex hardware designs have correspondingly complex and expensive
build phases. As a result, the ability to manufacture such systems
limits the number of companies that produce truly complex hardware
designs. No such limitations exist for software. There are hundreds of
software organizations, and thousands of very complex software systems
in existence. Both the number and the complexity are growing daily.
This means that the software industry is not likely to find solutions
to its problems by trying to emulate hardware developers. If anything,
as CAD and CAM systems have helped hardware designers to create more
and more complex designs, hardware engineering is becoming more and
more like software development. </p>
<p>Designing software is an exercise in managing complexity. The
complexity exists within the software design itself, within the
software organization of the company, and within the industry as a
whole. Software design is very similar to systems design. It can span
multiple technologies and often involves multiple sub-disciplines.
Software specifications tend to be fluid, and change rapidly and often,
usually while the design process is still going on. Software
development teams also tend to be fluid, likewise often changing in the
middle of the design process. In many ways, software bears more
resemblance to complex social or organic systems than to hardware. All
of this makes software design a difficult and error prone process. None
of this is original thinking, but almost 30 years after the software
engineering revolution began, software development is still seen as an
undisciplined art compared to other engineering professions.</p>
<p>The general consensus is that when real engineers get through with a
design, no matter how complex, they are pretty sure it will work. They
are also pretty sure it can be built using accepted construction
techniques. In order for this to happen, hardware engineers spend a
considerable amount of time validating and refining their designs.
Consider a bridge design, for example. Before such a design is actually
built the engineers do structural analysis; they build computer models
and run simulations; they build scale models and test them in wind
tunnels or other ways. In short, the designers do everything they could
think of to make sure the design is a good design before it is built.
The design of new airliner is even worse; for those, full scale
prototypes must be built and test flown to validate the design
predictions. </p>
<p>It seems obvious to most people that software designs do not go
through the same rigorous engineering as hardware designs. However, if
we consider source code as design, we see that software designers
actually do a considerable amount of validating and refining their
designs. Software designers do not call it engineering, however, we
call it testing and debugging. Most people do not consider testing and
debugging as real "engineering"; certainly not in the software
business. The reason has more to do with the refusal of the software
industry to accept code as design than with any real engineering
difference. Mock-ups, prototypes, and bread-boards are actually an
accepted part of other engineering disciplines. Software designers do
not have or use more formal methods of validating their designs because
of the simple economics of the software build cycle.</p>
<p>Revelation number two: it is cheaper and simpler to just build the
design and test it than to do anything else. We do not care how many
builds we do—they cost next to nothing in terms of time, and the
resources used can be completely reclaimed later if we discard the
build. Note that testing is not just concerned with getting the current
design correct, it is part of the process of refining the design.
Hardware engineers of complex systems often build models (or at least
they visually render their designs using computer graphics). This
allows them to get a "feel" for the design that is not possible by just
reviewing the design itself. Building such a model is both impossible
and unnecessary with a software design. We just build the product
itself. Even if formal software proofs were as automatic as a compiler,
we would still do build/test cycles. Ergo, formal proofs have never
been of much practical interest to the software industry.</p>
<p>This is the reality of the software development process today. Ever
more complex software designs are being created by an ever increasing
number of people and organizations. These designs will be coded in some
programming language and then validated and refined via the build/test
cycle. The process is error prone and not particularly rigorous to
begin with. The fact that a great many software developers do not want
to believe that this is the way it works compounds the problem
enormously. </p>
<p>Most current software development processes try to segregate the
different phases of software design into separate pigeon-holes. The top
level design must be completed and frozen before any code is written.
Testing and debugging are necessary just to weed out the construction
mistakes. In between are the programmers, the construction workers of
the software industry. Many believe that if we could just get
programmers to quit "hacking" and "build" the designs as given to them
(and in the process, make fewer errors) then software development might
mature into a true engineering discipline. Not likely to happen as long
as the process ignores the engineering and economic realities.</p>
<p>For example, no other modern industry would tolerate a rework rate
of over 100% in its manufacturing process. A construction worker who
can not build it right the first time, most of the time, is soon out of
a job. In software, even the smallest piece of code is likely to be
revised or completely rewritten during testing and debugging. We accept
this sort of refinement during a creative process like design, not as
part of a manufacturing process. No one expects an engineer to create a
perfect design the first time. Even if she does, it must still be put
through the refinement process just to prove that it was perfect.</p>
<p>If we learn nothing else from Japanese management techniques, we
should learn that it is counter-productive to blame the workers for
errors in the process. Instead of continuing to force software
development to conform to an incorrect process model, we need to revise
the process so that it helps rather than hinders efforts to produce
better software. This is the litmus test of "software engineering."
Engineering is about how you do the process, not about whether the
final design document needs a CAD system to produce it.</p>
<p>The overwhelming problem with software development is that <em>everything</em>
is part of the design process. Coding is design, testing and debugging
are part of design, and what we typically call software design is still
part of design. Software may be cheap to build, but it is incredibly
expensive to design. Software is so complex that there are plenty of
different design aspects and their resulting design views. The problem
is that all the different aspects interrelate (just like they do in
hardware engineering). It would be nice if top level designers could
ignore the details of module algorithm design. Likewise, it would be
nice if programmers did not have to worry about top level design issues
when designing the internal algorithms of a module. Unfortunately, the
aspects of one design layer intrude into the others. The choice of
algorithms for a given module can be as important to the overall
success of the software system as any of the higher level design
aspects. There is no hierarchy of importance among the different
aspects of a software design. An incorrect design at the lowest module
level can be as fatal as a mistake at the highest level. A software
design must be complete and correct in all its aspects, or all software
builds based on the design will be erroneous. </p>
<p>In order to deal with the complexity, software is designed in
layers. When a programmer is worrying about the detailed design of one
module, there are probably hundreds of other modules and thousands of
other details that he can not possibly worry about at the same time.
For example, there are important aspects of software design that do not
fall cleanly into the categories of data structures and algorithms.
Ideally, programmers should not have to worry about these other aspects
of a design when designing code.</p>
<p>This is not how it works, however, and the reasons start to make
sense. The software design is not complete until it has been coded <em>and</em>
tested. Testing is a fundamental part of the design validation and
refinement process. The high level structural design is not a complete
software design; it is just a structural framework for the detailed
design. We have very limited capabilities for rigorously validating a
high level design. The detailed design will ultimately influence (or <em>should</em>
be allowed to influence) the high level design at least as much as
other factors. Refining all the aspects of a design is a process that
should be happening throughout the design cycle. If any aspect of the
design is frozen out of the refinement process, it is hardly surprising
that the final design will be poor or even unworkable. </p>
<p>It would be nice if high level software design could be a more
rigorous engineering process, but the real world of software systems is
not rigorous. Software is too complex and it depends on too many other
things. Maybe some hardware does not work quite the way the designers
thought it did, or a library routine has an undocumented restriction.
These are the kinds of problems that every software project encounters
sooner or later. These are the kinds of problems discovered during
testing (if we do a good job of testing), for the simple reason that
there was no way to discover them earlier. When they are discovered,
they force a change in the design. If we are lucky, the design changes
are local. More often than not, the changes will ripple through some
significant portion of the entire software design (Murphy's Law). When
part of the effected design can not change for some reason, then the
other parts of the design will have to be weakened to accommodate. This
often results is what managers perceive as "hacking", but it is the
reality of software development.</p>
<p>For example, I recently worked on a project where a timing
dependency was discovered between the internals of module A and another
module B. Unfortunately, the internals of module A were hidden behind
an abstraction that did not permit any way to incorporate the
invocation of module B in its proper sequence. Naturally, by the time
the problem was discovered, it was much too late to try to change the
abstraction of A. As expected, what happened was an increasingly
complex set of "fixes" applied to the internal design of A. Before we
finished installing version 1, there was the general feeling that the
design was breaking down. Every new fix was likely to break some older
fix. This is a normal software development project. Eventually, my
colleagues and I argued for a change in the design, but we had to
volunteer free overtime in order to get management to agree. </p>
<p>On any software project of typical size, problems like these are
guaranteed to come up. Despite all attempts to prevent it, important
details will be overlooked. This is the difference between craft and
engineering. Experience can lead us in the right direction. This is
craft. Experience will only take us so far into uncharted territory.
Then we must take what we started with and make it better through a
controlled process of refinement. This is engineering.</p>
<p>As just a small point, all programmers know that writing the
software design documents after the code instead of before, produces
much more accurate documents. The reason is now obvious. Only the final
design, as reflected in code, is the only one refined during the
build/test cycle. The probability of the initial design being unchanged
during this cycle is inversely related to the number of modules and
number of programmers on a project. It rapidly becomes
indistinguishable from zero.</p>
<p>In software engineering, we desperately need good design at all
levels. In particular, we need good top level design. The better the
early design, the easier detailed design will be. Designers should use
anything that helps. Structure charts, Booch diagrams, state tables,
PDL, etc.—if it helps, then use it. We must keep in mind, however, that
these tools and notations are not a software design. Eventually, we
have to create the real software design, and it will be in some
programming language. Therefore, we should not be afraid to code our
designs as we derive them. We simply must be willing to refine them as
necessary.</p>
<p>There is as yet no design notation equally suited for use in both
top level design and detailed design. Ultimately, the design will end
up coded in some programming language. This means that top level design
notations have to be translated into the target programming language
before detailed design can begin. This translation step takes time and
introduces errors. Rather than translate from a notation that may not
map cleanly into the programming language of choice, programmers often
go back to the requirements and redo the top level design, coding it as
they go. This, too, is part of the reality of software development.</p>
<p>It is probably better to let the original designers write the
original code, rather than have someone else translate a language
independent design later. What we need is a unified design notation
suitable for all levels of design. In other words, we need a
programming language that is also suitable for capturing high level
design concepts. This is where C++ comes in. C++ is a programming
language suitable for real world projects that is also a more
expressive software design language. C++ allows us to directly express
high level information about design components. This makes it easier to
produce the design, and easier to refine it later. With its stronger
type checking, it also helps the process of detecting design errors.
This results in a more robust design, in essence a better engineered
design.</p>
<p>Ultimately, a software design must be represented in some
programming language, and then validated and refined via a build/test
cycle. Any pretense otherwise is just silliness. Consider what software
development tools and techniques have gained popularity. Structured
programming was considered a breakthrough in its time. Pascal
popularized it and in turn became popular. Object oriented design is
the new rage and C++ is at the heart of it. Now think about what has
not worked. CASE tools? Popular, yes; universal, no. Structure charts?
Same thing. Likewise, Warner-Orr diagrams, Booch diagrams, object
diagrams, you name it. Each has its strengths, and a single fundamental
weakness—it really isn't a software design. In fact the only software
design notation that can be called widespread is PDL, and what does
that look like.</p>
<p>This says that the collective subconscious of the software industry
instinctively knows that improvements in programming techniques and
real world programming languages in particular are overwhelmingly more
important than anything else in the software business. It also says
that programmers are interested in design. When more expressive
programming languages become available, software developers will adopt
them.</p>
<p>Also consider how the process of software development is changing.
Once upon a time we had the waterfall process. Now we talk of spiral
development and rapid prototyping. While such techniques are often
justified with terms like "risk abatement" and "shortened product
delivery times", they are really just excuses to start coding earlier
in the life cycle. This is good. This allows the build/test cycle to
start validating and refining the design earlier. It also means that it
is more likely that the software designers that developed the top level
design are still around to do the detailed design.</p>
<p>As noted above—engineering is more about how you do the process than
it is about what the final product looks like. We in the software
business are close to being engineers, but we need a couple of
perceptual changes. Programming and the build/test cycle are central to
the process of engineering software. We need to manage them as such.
The economics of the build/test cycle, plus the fact that a software
system can represent practically anything, makes it very unlikely that
we will find any general purpose methods for validating a software
design. We can improve this process, but we can not escape it. </p>
<p>One final point: the goal of any engineering design project is the
production of some documentation. Obviously, the actual design
documents are the most important, but they are not the only ones that
must be produced. Someone is eventually expected to use the software.
It is also likely that the system will have to be modified and enhanced
at a later time. This means that auxiliary documentation is as
important for a software project as it is for a hardware project.
Ignoring for now users manuals, installation guides, and other
documents not directly associated with the design process, there are
still two important needs that must be solved with auxiliary design
documents.</p>
<p>The first use of auxiliary documentation is to capture important
information from the problem space that did not make it directly into
the design. Software design involves inventing software concepts to
model concepts in a problem space. This process requires developing an
understanding of the problem space concepts. Usually this understanding
will include information that does not directly end up being modeled in
the software space, but which nevertheless helped the designer
determine what the essential concepts were, and how best to model them.
This information should be captured somewhere in case the model needs
to be changed at a later time.</p>
<p>The second important need for auxiliary documentation is to document
those aspects of the design that are difficult to extract directly from
the design itself. These can include both high level and low level
aspects. Many of these aspects are best depicted graphically. This
makes them hard to include as comments in the source code. This is <em>not</em>
an argument for a graphical software design notation instead of a
programming language. This is no different from the need for textual
descriptions to accompany the graphical design documents of hardware
disciplines. Never forget that the source code determines what the
actual design really is, not the auxiliary documentation. Ideally,
software tools would be available that post processed a source code
design and generated the auxiliary documentation. That may be too much
to expect. The next best thing might be some tools that let programmers
(or technical writers) extract specific information from the source
code that can then be documented in some other way. Undoubtedly,
keeping such documentation up to date manually is difficult. This is
another argument for the need for more expressive programming
languages. It is also an argument for keeping such auxiliary
documentation to a minimum and keeping it as informal as possible until
as late in the project as possible. Again, we could use some better
tools, otherwise we end up falling back on pencil, paper, and chalk
boards.</p>
<p>To summarize: </p>
<ul>
    <li>Real software runs on computers. It is a sequence of ones
    and zeros that is stored on some magnetic media. It is not a program
    listing in C++ (or any other programming language).</li>
    <li>A program listing is a document that represents a software design. Compilers and linkers actually build software designs.</li>
    <li>Real software is incredibly cheap to build, and getting cheaper all the time as computers get faster.</li>
    <li>Real
    software is incredibly expensive to design. This is true because
    software is incredibly complex and because practically all the steps of
    a software project are part of the design process.</li>
    <li>Programming
    is a design activity—a good software design process recognizes this and
    does not hesitate to code when coding makes sense.</li>
    <li>Coding
    actually makes sense more often than believed. Often the process of
    rendering the design in code will reveal oversights and the need for
    additional design effort. The earlier this occurs, the better the
    design will be.</li>
    <li>Since software is so cheap to build, formal
    engineering validation methods are not of much use in real world
    software development. It is easier and cheaper to just build the design
    and test it than to try to prove it.</li>
    <li>Testing and debugging
    are design activities—they are the software equivalent of the design
    validation and refinement processes of other engineering disciplines. A
    good software design process recognizes this and does not try to short
    change the steps.</li>
    <li>There are other design activities—call
    them top level design, module design, structural design, architectural
    design, or whatever. A good software design process recognizes this and
    deliberately includes the steps.</li>
    <li>All design activities
    interact. A good software design process recognizes this and allows the
    design to change, sometimes radically, as various design steps reveal
    the need.</li>
    <li>Many different software design notations are
    potentially useful—as auxiliary documentation and as tools to help
    facilitate the design process. They are not a software design.</li>
    <li>Software
    development is still more a craft than an engineering discipline. This
    is primarily because of a lack of rigor in the critical processes of
    validating and improving a design. </li>
    <li>Ultimately, real
    advances in software development depend upon advances in programming
    techniques, which in turn mean advances in programming languages. C++
    is such an advance. It has exploded in popularity because it is a
    mainstream programming language that directly supports better software
    design.</li>
    <li>C++ is a step in the right direction, but still more advances are needed. </li>
</ul>
<p>###</p>
<p>This essay first appeared in <em>C++ Journal</em> in
the Fall, 1992 issue. Copyright &#169;1992 by Jack W. Reeves. developer.* is
grateful to Mr. Reeves for granting the right of this publication. All
future rights owned and reserved by Jack W. Reeves. Reprint or
distribute only with written permission of the author.</p>
<p>This is Part One of <em>Code As Design: Three Essays by Jack W. Reeves</em>. <a href="http://www.developerdotstar.com/mag/articles/reeves_design_main.html">Click here for the introduction</a>. This essay first appeared in the Fall, 1992 issue of <em>C++ Journal</em>.</p>
<div id="bottomarticlelinks">
<a href="http://www.developerdotstar.com/community/node/135">Discussion</a>
&nbsp;-&nbsp;
<a href="http://www.developerdotstar.com/printable/mag/articles/reeves_design.html">Printable</a>
&nbsp;-&nbsp;
<a href="http://www.developerdotstar.com/mag/articles/PDF/DevDotStar_Reeves_CodeAsDesign.pdf">PDF</a>
</div>
<div id="aboutauthor"><a href="http://www.developerdotstar.com/mag/bios/jack_reeves.html" title="Software Design Author Jack W. Reeves Biography">Jack W. Reeves</a>
is a senior software developer with over 30 years experience in the
industry. He has worked on systems ranging from simulators for the
space shuttle, military command and control systems, air traffic
control systems, medical imaging systems, financial data distribution
systems, embedded systems, drivers, and utilities. He has exclusively
been an OO developer for the last 15 years.</div>
</div>
<img src ="http://www.blogjava.net/sealyu/aggbug/301259.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sealyu/" target="_blank">seal</a> 2009-11-05 13:46 <a href="http://www.blogjava.net/sealyu/archive/2009/11/05/301259.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>What Is Software Design: 13 Years Later</title><link>http://www.blogjava.net/sealyu/archive/2009/11/05/301260.html</link><dc:creator>seal</dc:creator><author>seal</author><pubDate>Thu, 05 Nov 2009 05:46:00 GMT</pubDate><guid>http://www.blogjava.net/sealyu/archive/2009/11/05/301260.html</guid><wfw:comment>http://www.blogjava.net/sealyu/comments/301260.html</wfw:comment><comments>http://www.blogjava.net/sealyu/archive/2009/11/05/301260.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sealyu/comments/commentRss/301260.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sealyu/services/trackbacks/301260.html</trackback:ping><description><![CDATA[<div id="byline">
By <a href="http://www.developerdotstar.com/mag/bios/jack_reeves.html" title="Software Design Author Jack W. Reeves Biography">Jack W. Reeves</a>
</div>
<div id="posteddate">Published  February 23, 2005</div>
<div id="articlelinks">
<a href="http://www.developerdotstar.com/community/node/135">Discussion</a>
&nbsp;-&nbsp;
<a href="http://www.developerdotstar.com/printable/mag/articles/reeves_13yearslater.html">Printable</a>
&nbsp;-&nbsp;
<a href="http://www.developerdotstar.com/mag/articles/PDF/DevDotStar_Reeves_CodeAsDesign.pdf">PDF</a>
</div>
<div id="content">
<div>This is Part Two of <em>Code As Design: Three Essays by Jack W. Reeves</em>. <a href="http://www.developerdotstar.com/mag/articles/reeves_design_main.html"><u>Click here for the introduction</u>.</a></div>
<p>People have occasionally asked whether
I did any follow-on writing to my "What Is Software Design" article.
The answer has basically been "No, not really." I want to make it clear
that that is not because I forgot about it or otherwise changed my
mind. Allow me to offer a bit of explanation.</p>
<p>When the article appeared, I hoped&#8211;actually expected&#8211;that I would
get some type of rebuttal from some sort of industry "expert." I was
looking forward to this since part of my reason for writing the article
had been hopes of stimulating discussion within the software industry
about the overall software development process. Nothing happened.</p>
<p>There were no letters to the editor that I know about and nothing ever sent directly to me. <em>C++ Journal</em>
became defunct shortly after that issue, and I figured my article had
gone to that great land fill in the sky that swallows most
publications. I went on to doing other things. It wasn&#8217;t until 1997 or
1998 that I got an email from Bob Martin (who had just taken over as
editor of the <em>C++ Report</em>) letting me know there was a wiki page about my article on Ward Cunningham&#8217;s c2.com
web site. This was&#8211;quite literally&#8211;the first time I knew anybody had
read my article (other than the people I personally gave a copy to).</p>
<p>I started to follow the discussions on the wiki page and
occasionally on some news groups, but deliberately stayed out of them
myself for several reasons: a) I was focused on certain other things at
the time, b) it was pretty obvious that other people who had accepted
what I was trying to say were just as qualified&#8211;maybe more so&#8211;to argue
the points as I would have been (I specifically remember Michael
Feathers writing), and c) last but not least, it still looked to me
like there was a lot of opposition to the concept. Unfortunately, most
of the arguments sounded pretty much like the ones I had been dealing
with for almost 15 years by that point (remember, I had had the idea
almost 10 years before I wrote the article).</p>
<p>I had grown tired of trying to deal with people who were totally
incapable of getting past their own pre-conceptions to even consider
the idea rationally. It was like trying to explain that the French
speak a different language to someone who is convinced that "different
language" really just means "different dialect of English". No matter
what you say, they will parse your arguments against their beliefs and
either dismiss you out of hand, or patronize you with their counter
arguments. I had seen a number of projects where "design it in the
code" worked, but even the people on such projects often refused to
accept the reality. My level of cynicism about being able to improve
things was very high.</p>
<p>It still is, but I think it is time I made some attempt to actually
defend myself, rather than let other people do it. Therefore, what I am
going to do is address some of the most common criticisms I have seen
about "What Is Software Design?". </p>
<p><strong>A.</strong> Initially, the most common criticism I would see can be
summarized as "If source code is the design, then programmers are
designers; but obviously they are not, therefore source code cannot be
the design." Nobody states it that baldly, but when you parse what they
do say, it comes down to the same thing. These are circular arguments
that start with the assumption that programming/coding is a
manufacturing type of activity. In logic, this is known as a "Begging
the Question" fallacy. In essence, these people say "your assumption
(i.e. source code is the design) contradicts my assumption (i.e.
programmers are assembly workers), therefore your assumption must be
wrong."</p>
<p>Someone might suggest that I am doing the same thing, i.e. starting
with the assumption that source code is a design. I accept that&#8211;up to a
point. While I will admit that a lot of the article reads like an
attempt to prove that "source code is the design", that was not really
what I was trying to do. The following quote is from the beginning of
the article:</p>
<div>"This article assumes that final source code is
the real software design and then examines some of the consequences of
that assumption. I may not be able to prove that this point of view is
correct, but I hope to show that it does explain some of the observed
facts of the software industry, ..."</div>
<p>I did not set out to prove that "source code is the design"; I will
readily concede that what is a "design" is to some extent a matter of
definition. The point of the article was to try to show how this
assumption led to much better explanations of numerous observed <em>facts</em>. I am still waiting for anyone to offer better explanations based upon alternative assumptions.</p>
<p><strong>B.</strong> These days, thanks in part to the rise of Extreme
Programming and other Agile Methods, people are starting to accept
(grudgingly) that programmers are not assembly line drones.
Unfortunately, that doesn&#8217;t mean they are willing to accept the concept
of "the source code is the design". The arguments can be summarized by
the example that is still on the wiki page:</p>
<blockquote>"As for throwing the whole design thing out, and just designing in code... Hahahahahahahahah no really Hahahahahahahahah :)"</blockquote>
<p>This really makes me angry. For reasons that I do not understand,
reasonably intelligent people insist upon confusing the concept of
design as <em>process</em> versus design as <em>product.</em> You would
think that anyone who passed high school would understand the
difference between the process of writing a paper (for example) and the
paper itself. Certainly, you would expect anyone with a college
background to understand that there are often lots of different ways to
arrive at the same solution.</p>
<p>Nevertheless, people keep insisting that my contention of "the
source code is the design" means "don&#8217;t do design, just code." I never
said anything of the sort. What I did say was:</p>
<blockquote>"In software engineering, we desperately need good design
at all levels. In particular, we need good top level design. The better
the early design, the easier detailed design will be. Designers should
use anything that helps. Structure charts, Booch diagrams, state
tables, PDL, etc.—if it helps, then use it."</blockquote>
<p>Today, I would phrase it differently. I would say we need good
architectures (top level design), good abstractions (class design), and
good implementations (low level design). I would also say something
about using UML diagrams or CRC cards to explore alternatives.
Nevertheless, I will not back away from the following statement:</p>
<blockquote>"We must keep in mind, however, that these tools and
notations are not a software design. Eventually, we have to create the
real software design, and it will be in some programming language.
Therefore, we should not be afraid to code our designs as we derive
them."</blockquote>
<p>This is fundamental. I am not arguing that we should not "do design." However you want to approach the <em>process</em>, I simply insist that you have not completed the process until you have written <em>and</em> tested the code.</p>
<p>Personally, I think a person with his feet on the desk staring at
the ceiling can be "doing design" just as seriously as someone playing
with UML diagrams in ROSE. I have always known that you are better off
if you put some real thought into what you are trying to do before
actually doing it. People differ widely in what helps them think,
however. Some people use pencil and paper. Others like white boards or
even computer tools. Some people like to bounce ideas off of other
people, others like peace and quiet. Some people feel comfortable with
diagrams like UML. Others prefer CRC cards.</p>
<p>What approach they choose doesn&#8217;t matter; until someone starts
insisting that these intermediate designs should be products in their
own right. It&#8217;s the code that matters. If you get good code, does it
really matter how it came about? If you don&#8217;t get good code, does it
really matter how much other garbage you made people do before they
wrote the bad code?</p>
<p>Everybody that has been in this business any length of time has seen
plenty of examples where someone obviously sat down and coded the first
thing that popped into their mind. Later, when it became obvious that
there were shortcomings with the approach, there was too much blood,
sweat, and "skin" invested in the code to scrap it and do something
better. Fine, we all know a little thought can go a long way.</p>
<p>On the other hand, any of us who has spent time on a <em>traditional</em>
development project with its strict rules forbidding the writing of a
single line of code until the "design" is completed and reviewed and
approved, etc. knows you can waste a hell of a lot of time producing
documents that are out of date literally days after the actual coding
starts. Why bother?</p>
<p>You think we could find some happy medium of "enough" design effort,
but not too much. There is no such thing. The only way we validate a
software design is by building it and testing it. There is no silver
bullet, and no "right way" to do design. Sometimes an hour, a day, or
even a week spent thinking about a problem can make a big difference
when the coding actually starts. Other times, 5 minutes of testing will
reveal something you never would have thought about no matter how long
you tried. We do the best we can under the circumstances, and then
refine it.</p>
<p>One last comment: I also did not say that the only necessary
documentation is the source code. I specifically pointed out in the
article:</p>
<blockquote>"...auxiliary documentation is as important for a software project as it is for a hardware project."</blockquote>
<p>The source code may be the master design document, but it is seldom the only one necessary.</p>
<p><strong>B</strong><strong>&#8217;.</strong> I cannot resist
making a remark about a side issue that often comes up in discussions
about Extreme Programming and Agile methods that is related to the
above. This is often phrased as a question: what about the Less Able
Programmer? The issue seems to be that only the very best programmers
can "design" and "code" at the same time. To offset this, we must have
all those intermediate design steps and products mentioned above to
make up for the lack of experience and talent of the average programmer.</p>
<p>To me, this is like asking "what do we do about the less able
physician?" I know the practice of medicine and software development
are not analogous, but bear with me for a moment. An awful lot of the
practice of medicine is pretty much rote (we joke about "take two
aspirin and call me tomorrow"). Nevertheless, the medical profession
still insists upon some pretty high standards of intelligence,
education, and experience before someone is allowed to call themselves
an MD. In other words, we want our doctors to know what they are doing.</p>
<p>In software development, questions about the less able programmer
really come down to trying to substitute a process for intelligence,
aptitude, and experience. Apparently, a lot of people think that if we
force people to create enough UML diagrams (or whatever), have enough
reviews, and otherwise follow a detailed process, that eventually they
will figure out what they are doing and code it correctly. There is no
evidence that such approaches have worked in the past, and I see no
reason to believe they will work in the future. In fact, my own
experience says that properly using tools such as UML involves a
considerable level of expertise and experience in its own right.</p>
<p><strong>C.</strong> Another argument I have seen questions the contention that
the goal of an engineering effort is some type of documentation. Some
people argue that the goal of engineering is a "product" and that real
engineers often "build" things and those "things" are as much a product
of engineering as any documentation.</p>
<p>This argument tries to sidestep the question of "What is a Software
Design?" by implying a parallel between the "things" that other
engineers build and what software developers create. Frankly, this is
nonsense. I will concede that there are engineers who build "things"
with little or no formal design documentation, although I suspect that
even in those cases there is probably some design documentation (even
if it is on the back of an envelope). In any case, I think we can
safely say that such projects produce only one-off products and are
usually done by individuals.</p>
<p>When an "engineering" effort starts involving more than a couple of
people, or when it has a formal manufacturing phase, then documentation
starts to loom larger and larger as the actual product of the
engineering effort. You better believe that the engineers at Toyota or
Motorola produce documentation, and we&#8217;ll not even think about the
engineers at Boeing or Lockheed. So, while it might be true that a lot
of engineers do things besides producing design documents, anyone who
calls himself an engineer knows what a design document in his field
looks like, and probably produces such more often than not. Can we say
the same for "software engineers"?</p>
<p>Incidentally, this contention regarding engineers and documentation
was not mine originally, but instead something I picked up from an
article in <em>Datamation</em> back in 1979. I agree with it completely however.</p>
<p><strong>D.</strong> One final but fairly minor argument I have seen is that
source code is still too high level to be a design. At least one critic
wanted to call source code the "specification." His (or her) take was
that the real design is what comes out of the compiler. In some sense
this is just a matter of definition, but I still disagree with it.</p>
<p>The generally accepted definition is that a "specification" states the <em>what</em>, which is followed by a design document that details the <em>how</em>. While there is a certain amount of flexibility allowed of the compiler in determining the <em>how</em>
of object code, there is certainly no creativity involved. And that is
where I draw the line. When the document is detailed enough, complete
enough, and unambiguous enough that it can be interpreted
mechanistically, whether by a computer or by an assembly line worker,
then you have a design document. If it still requires creative human
interpretation, then you don&#8217;t.</p>
<p>In software development, the design document is a source code listing.</p>
<center>###</center>
<p><em>Copyright &#169;2005 by Jack W. Reeves. Author owns and reserves all
future rights. Reprint or distribute only with written permission.</em></p>
<div>This is Part Two of <em>Code As Design: Three Essays by Jack W. Reeves</em>. <a href="http://www.developerdotstar.com/mag/articles/reeves_design_main.html"><u>Click here for the introduction</u>.</a></div>
<div id="bottomarticlelinks">
<a href="http://www.developerdotstar.com/community/node/135">Discussion</a>
&nbsp;-&nbsp;
<a href="http://www.developerdotstar.com/printable/mag/articles/reeves_13yearslater.html">Printable</a>
&nbsp;-&nbsp;
<a href="http://www.developerdotstar.com/mag/articles/PDF/DevDotStar_Reeves_CodeAsDesign.pdf">PDF</a>
</div>
<div id="aboutauthor"><a href="http://www.developerdotstar.com/mag/bios/jack_reeves.html" title="Software Design Author Jack W. Reeves Biography">Jack W. Reeves</a>
is a senior software developer with over 30 years experience in the
industry. He has worked on systems ranging from simulators for the
space shuttle, military command and control systems, air traffic
control systems, medical imaging systems, financial data distribution
systems, embedded systems, drivers, and utilities. He has exclusively
been an OO developer for the last 15 years.</div>
</div>
<img src ="http://www.blogjava.net/sealyu/aggbug/301260.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sealyu/" target="_blank">seal</a> 2009-11-05 13:46 <a href="http://www.blogjava.net/sealyu/archive/2009/11/05/301260.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>OSGi原理与最佳实践（精选版）（转）</title><link>http://www.blogjava.net/sealyu/archive/2009/10/30/300299.html</link><dc:creator>seal</dc:creator><author>seal</author><pubDate>Fri, 30 Oct 2009 01:12:00 GMT</pubDate><guid>http://www.blogjava.net/sealyu/archive/2009/10/30/300299.html</guid><wfw:comment>http://www.blogjava.net/sealyu/comments/300299.html</wfw:comment><comments>http://www.blogjava.net/sealyu/archive/2009/10/30/300299.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sealyu/comments/commentRss/300299.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sealyu/services/trackbacks/300299.html</trackback:ping><description><![CDATA[<p>
作者
<strong><a href="http://www.infoq.com/cn/bycategory.action?authorName=%E6%9E%97%E6%98%8A" class="editorlink">
林昊</a>
</strong>
发布于
2009年10月16日 上午5时47分
</p>
<dl><dt>社区</dt><dd><a href="http://www.infoq.com/cn/architecture" name="architecture" id="1,390" onclick="try {CategoryPopup.showPopup(this);} catch(e) {}; return false;">Architecture</a>,</dd><dd><a href="http://www.infoq.com/cn/java" name="java" id="739" onclick="try {CategoryPopup.showPopup(this);} catch(e) {}; return false;">Java</a></dd><dt>主题</dt><dd><a href="http://www.infoq.com/cn/opensource" name="opensource" id="833" onclick="try {CategoryPopup.showPopup(this);} catch(e) {}; return false;">开放源代码</a>,</dd><dd><a href="http://www.infoq.com/cn/ApplicationServers" name="ApplicationServers" id="834" onclick="try {CategoryPopup.showPopup(this);} catch(e) {}; return false;">应用服务器</a>,</dd><dd><a href="http://www.infoq.com/cn/platforms" name="platforms" id="3,697" onclick="try {CategoryPopup.showPopup(this);} catch(e) {}; return false;">平台</a>,</dd><dd><a href="http://www.infoq.com/cn/enterprise-architecture" name="enterprise-architecture" id="786" onclick="try {CategoryPopup.showPopup(this);} catch(e) {}; return false;">企业架构</a></dd><dt>标签</dt><dd><a href="http://www.infoq.com/cn/osgi" name="osgi" id="1,049" onclick="try {CategoryPopup.showPopup(this);} catch(e) {}; return false;">OSGi</a>,</dd><dd><a href="http://www.infoq.com/cn/book" name="book" id="1,292" onclick="try {CategoryPopup.showPopup(this);} catch(e) {}; return false;">图书</a></dd></dl>
<p>
<img src="http://www.infoq.com/resource/minibooks/osgi-best-practice/zh/cover/osgi-big-cover.jpg" alt="" /><br />
</p>
<p>OSGi
在Java业界正是风生水起。几乎所有的JEE Server，比如IBM Websphere、Oracle Weblogic和Sun
glassfish，都采用了OSGi作为基础平台，甚至推崇实用主义的SpringSource也挟Spring
DM之势，推出了基于OSGi的应用服务器——Spring DM
Server。山雨欲来风满楼，乘着这股东风，在BlueDavy发布了《OSGi实战》以及《OSGi进阶》之后，国内第一本OSGi的专业书——
《OSGi原理与最佳实践》刚刚面世。InfoQ中文站精选了其中的两章，特做成迷你书，供各位读者免费下载。</p>
<h2>免费下载迷你书</h2>
<p>如果你喜欢本书，请通过<a href="http://www.china-pub.com/195813">购买原版《OSGi原理与最佳实践》</a>支持出版商和InfoQ中文站。</p>
<p><strong>点击这里：
<span id="beforeLogin" style="display: inline;">
<a href="javascript:void(0)" onclick="showLoginWindow(this,ALIGN_RIGHT,new Function('document.getElementById(" beforelogin=""  ;document.getelementbyid(="" afterlogin=""  ).style. display="'none"  ))="">
免费下载这本书（PDF）</a>
</span>
<span id="afterLogin" style="display: none;">
<a href="http://www.infoq.com/resource/minibooks/osgi-best-practice/zh/pdf/OSGi-best-practice-minibook-by-InfoQ.pdf">免费下载这本书（PDF）</a>
</span>
</strong>。</p>
<h2>迷你书目录</h2>
<p><a href="http://www.china-pub.com/195813" target="_blank">《OSGi原理与最佳实践》原书详细信息</a></p>
<p>前言<br />
目录<br />
<br />
第1章 OSGi框架简介<br />
<br />
1.1 Equinox<br />
<br />
1.1.1 简介<br />
1.1.2 环境搭建<br />
1.1.3 HelloWorld<br />
1.1.4 开发传统类型的应用<br />
1.1.5 从外部启动Equinox<br />
<br />
1.2 Felix<br />
<br />
1.2.1 简介 <br />
1.2.2 环境搭建<br />
1.2.3 应用部署<br />
1.2.4 在Eclipse中调试Felix<br />
<br />
1.3 SpringDM<br />
<br />
1.3.1 简介<br />
1.3.2 环境搭建<br />
1.3.3 HelloWorld<br />
1.3.4 Web版HelloWorld<br />
<br />
第2章 基于SpringDM实现Petstore<br />
<br />
2.1 即插即用的Petstore<br />
<br />
2.2 新一代Petstore的实现<br />
<br />
2.2.1 环境准备<br />
2.2.2 Utils模块<br />
2.2.3 Bootstrap模块<br />
2.2.4 ProductDal模块<br />
2.2.5 ShoppingCartDal模块<br />
2.2.6 ProductList模块<br />
2.2.7 ShoppingCast模块<br />
2.2.8 ProductManagement模块<br />
<br />
2.3 部署<br />
<br />
2.4 Petstore的扩展</p>
<h2>BlueDavy《OSGi原理与最佳实践》采访</h2>
<p>InfoQ中文站就这次出版邀请BlueDavy对OSGi的近况、在具体项目上应用OSGi应该注意的问题和解决方法，以及如何在OSGi开发过程中结合使用敏捷实践的问题进行了一番访谈。</p>
<p><strong>InfoQ：自从你上一次发布&lt;OSGi进阶&gt;后，OSGi联盟最近有什么新进展？OSGi社区发展如何？</strong></p>
<p><strong>BlueDavy</strong>：OSGi联盟目前正在制定4.2的规范，并已发布公开草稿版本。在草稿版本中，我很欣慰的看到了OSGi联盟对
OSGi所做出的众多改进，包括了OSGi使用者们期待已久的对于Declarative
Services的细节改进，并将其版本定为1.1，目前Equinox也已推出1.1版本Declarative
Service的实现；除了对DS的改进外，在Core部分也可以看到提出了Framework
Lunch这样的新规范部分，这对于按照标准使用OSGi和嵌入OSGi至其他容器提供了很大的帮助。除了以上这些外，还有其他很多的改进，在《OSGi
原理与最佳实践》一书中对OSGi R4.2的公众草稿版做了更多详细的分析。</p>
<p>但由于公布的公众草稿版本并不涉及企业应用领域，也就是EEG小组的工作，因此尽管大家期待的RFC 119: Distributed
OSGi以及RFC 66: OSGi web container出现在了Early
Draft中，但并没有出现在公众草稿版中，这两个最受大家关注的规范内容应该会被列入EEG出版的规范中。</p>
<p>对于社区这一块，OSGi尽管已经发展这么多年了，到目前为止确实仍然没有非常成熟的社区，但其相关的maillist，例如equinox
maillist、OSGi-Dev maillist以及Spring-DM
maillist都相当的活跃，业界的OSGi的使用者们根据自己的经验提出了不少OSGi的最佳实践，其中Bea的最佳实践总结以及Peter和BJ
Hargrave在2007 JavaOne做的OSGi最佳实践总结给大家提供了很大的帮助。</p>
<p><strong>InfoQ：相信很多人都想在真实项目中使用OSGi。请问如果要基于OSGi开发新系统时需要注意什么问题？如何设计系统的架构才能充分利用OSGi的好处？</strong></p>
<p><strong>BlueDavy</strong>：基于OSGi开发新系统时最值得注意的问题就是如何合理地划分模块的粒度，以及遵循OSGi框架的实现方式来构建真正的模块化、动态化的系统。</p>
<p>由于OSGi的强项在于模块化以及动态化，如果想在系统中充分发挥这两个优势，一方面是要让系统真正的模块化，把握好每个模块需要对外提供的功能，充分合理地使用OSGi提供的模块化交互的方式，例如import-package以及OSGi。</p>
<p>Service另一方面则是要让系统真正的动态化，这包括了基于OSGi框架支持的Bundle生命周期管理以及服务组件生命周期管理合理构建动态
化的模块，同时也需要合理处理动态化时所带来的影响，例如引用的服务的注销、对象状态的保留与恢复等。在《OSGi原理与最佳实践》一书中提供了一些构建
模块化和动态化系统的实践建议以及为什么要如此做的分析。</p>
<p><strong>InfoQ：我们也看到在现实中存在着大量的遗留项目。那么，对于把传统的遗留系统改造成基于OSGi的架构，一般需要注意什么问题？</strong></p>
<p><strong>BlueDavy</strong>：突出的问题一般是模块ClassLoader隔离后带来的问题，对于OSGi的入门者来
说，ClassNotFoundException或者ClassCastException这类异常会成为常见的现象，这就要求使用者能够对
ClassLoader以及OSGi模块隔离和交互这两方面的知识有充分的掌握，就如BEA的microServices的开发者们总结的一样：当你不使
用OSGi来构建模块化系统时，你根本就不知道什么是真正的模块化系统，他们在移植原有的BEA的产品到OSGi上时花了一年多的时间，这也意味着要将传
统系统改造为OSGi架构确实有不小的难度，无论是OSGi知识方面的学习还是设计思想方面的转变。</p>
<p><strong>InfoQ：Oracle收购了Sun，这两家公司势必要在很多方面整合，比如双方对OSGi的态度。我们知道，虽然有很多JEE
Server都选择架构在OSGi之上，但是Oracle Fushion
11G里面却没有采用OSGi，请问你认为Oracle收购Sun对OSGi会产生什么影响？</strong></p>
<p><strong>BlueDavy</strong>：从我2005年接触OSGi而言，对OSGi的前景一直非常的看好，也许在2005、2006年时OSGi的前景
看似一片迷茫，但进入2008、2009后，无论从Java主流应用服务器都基于OSGi来看，还是从Java将从语言级提供对模块化的支持来
看，OSGi已经逐步的得到认可并成为事实性标准。</p>
<p>Oracle在很久之前就开始关注OSGi，并且Oracle也是OSGi联盟的成员之一，尽管Oracle Fushion
11G没有采用OSGi，但我认为这并不表示Oracle否定OSGi，或者不愿意采用OSGi，也许Oracle只是认为目前采用OSGi会对其原有积
累的技术产生不小的冲击，毕竟BEA为了移植到OSGi花了一年多的时间，从另外的角度来看，提供模块化的支持已经成为Java语言发展的必然，OSGi
是目前仅有的已投入实际商业产品使用的模块化规范，另一方面从OSGi对JSR277产生的影响来看，可见OSGi在Java模块化规范方面的领先地位，
因此也许不久后我们就能看到Oracle对OSGi的态度，相信很大概会是好消息。</p>
<p><strong>InfoQ：应用系统开发引入OSGi之后，又如何应用TDD、自动构建等敏捷实践？</strong></p>
<p><strong>BlueDavy</strong>：OSGi Service为POJO方式，再加上OSGi和Spring一样支持方法方式的依赖注入，因此对于依赖关系不复杂的OSGi Service的TDD和自动构建没有问题。</p>
<p>对于依赖状况复杂的而言，在Spring中多数仍然会采用配置文件编写依赖注入关系，启动Spring容器，获取相应的bean进行测试的方式。在
这种情况下，目前OSGi容器的支持则不是很好，较Spring容器的单元测试而言复杂很多。一方面是由于OSGi采用的为Bundle部署机制，这就要
求在测试时将所有需要依赖的Bundle部署至OSGi容器中，在目前的情况下这需要通过编写程序来安装。这个状况等到OBR进入使用阶段后会好很多，原
因在于通 过OBR可以很容易的自动安装所需依赖的Bundle；另外一方面则是由于OSGi并不直接提供在外部获取OSGi
Service的方法，就像Spring可以通过ApplicationContext来获取Bean。但是，也不是没有办法，如何在外部获取OSGi
Service的方法在《OSGi原理与最佳实践》一书中有进行讲解。除了书中讲解的方法外，在OSGi R4.2中新提供的Framework
launch也将有助于在OSGi容器外部获取OSGi Service。</p>
<p>鉴于上面的两个原因，在目前的情况下只能自行实现一个单元测试框架，OSGi China User Group最近会公布一个OSGi单元测试框架以方便大家对OSGi程序进行TDD和自动构建。</p>
<img src ="http://www.blogjava.net/sealyu/aggbug/300299.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sealyu/" target="_blank">seal</a> 2009-10-30 09:12 <a href="http://www.blogjava.net/sealyu/archive/2009/10/30/300299.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Stephan Janssen谈Parleys.com和RIA的前景(转)</title><link>http://www.blogjava.net/sealyu/archive/2009/10/30/300298.html</link><dc:creator>seal</dc:creator><author>seal</author><pubDate>Fri, 30 Oct 2009 01:11:00 GMT</pubDate><guid>http://www.blogjava.net/sealyu/archive/2009/10/30/300298.html</guid><wfw:comment>http://www.blogjava.net/sealyu/comments/300298.html</wfw:comment><comments>http://www.blogjava.net/sealyu/archive/2009/10/30/300298.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/sealyu/comments/commentRss/300298.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sealyu/services/trackbacks/300298.html</trackback:ping><description><![CDATA[<p>
作者
<strong><a href="http://www.infoq.com/cn/bycategory.action?authorName=Jon-Rose" class="editorlink">
Jon Rose</a>
</strong>
译者
<strong><a href="http://www.infoq.com/cn/bycategory.action?authorName=%E7%8E%8B%E4%B8%BD%E5%A8%9F" class="editorlink">
王丽娟</a>
</strong>
发布于
2008年4月1日 下午7时23分
</p>
<dl><dt>社区</dt><dd><a href="http://www.infoq.com/cn/java" name="java" id="739" onclick="try {CategoryPopup.showPopup(this);} catch(e) {}; return false;">Java</a></dd><dt>主题</dt><dd><a href="http://www.infoq.com/cn/ria" name="ria" id="777" onclick="try {CategoryPopup.showPopup(this);} catch(e) {}; return false;">RIA</a>,</dd><dd><a href="http://www.infoq.com/cn/Silverlight" name="Silverlight" id="1,112" onclick="try {CategoryPopup.showPopup(this);} catch(e) {}; return false;">Silverlight</a>,</dd><dd><a href="http://www.infoq.com/cn/rich-client-desktop" name="rich-client-desktop" id="830" onclick="try {CategoryPopup.showPopup(this);} catch(e) {}; return false;">富客户端/桌面</a></dd><dt>标签</dt><dd><a href="http://www.infoq.com/cn/flex" name="flex" id="980" onclick="try {CategoryPopup.showPopup(this);} catch(e) {}; return false;">Flex</a>,</dd><dd><a href="http://www.infoq.com/cn/Flash" name="Flash" id="983" onclick="try {CategoryPopup.showPopup(this);} catch(e) {}; return false;">Flash</a>,</dd><dd><a href="http://www.infoq.com/cn/javafx_script" name="javafx_script" id="1,154" onclick="try {CategoryPopup.showPopup(this);} catch(e) {}; return false;">JavaFX脚本</a>,</dd><dd><a href="http://www.infoq.com/cn/javapolis" name="javapolis" id="3,965" onclick="try {CategoryPopup.showPopup(this);} catch(e) {}; return false;">JavaPolis</a>,</dd><dd><a href="http://www.infoq.com/cn/gwt" name="gwt" id="778" onclick="try {CategoryPopup.showPopup(this);} catch(e) {}; return false;">GWT</a></dd></dl>
<img alt="Parleys.com" src="http://ectropic.com/images/parleys.jpg" height="385" align="right" width="500" />InfoQ.com和Stephan Janssen坐在一起讨论，向他了解了<a id="q7iu" href="http://parleys.com/" goog_docs_charindex="225">Parleys.com</a>的相关情况，并问了他对新兴的RIA平台的看法。Stephan创建了每年于比利时举办的<a id="x7lw" href="http://www.javapolis.com/" goog_docs_charindex="280">JavaPolis大会</a>。
JavaPolis是目前仅次于JavaOne的第二大Java会议。Stephan还是Parleys.com的创始人和工程师主管。
Parleys.com是一个RIA平台，用来发布视频、播客、幻灯片等诸如此类的在线学习资料。除了讨论Parleys.com，Stephan还跟
InfoQ.com的读者分享了他对Adobe Flex/AIR、JavaFX、Google Web
Toolkit（GWT）、以及Silverlight的看法。<br id="fye7" goog_docs_charindex="509" />
<strong id="hszg" goog_docs_charindex="510"><br id="o3ck" goog_docs_charindex="511" />
你能</strong><strong id="i7u9" goog_docs_charindex="515">概述一下</strong><strong id="i7u9" goog_docs_charindex="521">Parleys.com吗？</strong><br id="wf5y" goog_docs_charindex="536" />
<blockquote id="irrf" goog_docs_charindex="537"><a id="kecd" href="http://parleys.com/" goog_docs_charindex="538">Parleys.com</a>是
下一代的RIA电子学习平台，在这个平台上，人们能在浏览器里或是在桌面上观看视频讲座。现在，Parleys.com的默认频道提供来自
JavaPolis、SpringOne、BeJUG、JavaBin、Jazoon、EclipseCon的一些优秀技术演讲视频。顶级品质的Java
内容总共将近有200个小时。<br id="ueew" goog_docs_charindex="703" />
<br id="o.4_" goog_docs_charindex="704" />
Parleys.com
观众也能把这些讲座下载到本地磁盘离线观看，这是一个使用得越来越多的优秀特性。浏览器和桌面应用程序都能让你用全屏模式观看演讲，甚至能在观看时动态调
整播放模板。播放时间轴可以让我们的观众添加注释、标签，并在需要的地方跳过幻灯片。你能在菜单栏选择自己喜欢的幻灯片演示设置（我自己喜欢3D
Cube），或在自己的收藏列表中添加某个演讲、查看其它相关的演讲。<br id="ul50" goog_docs_charindex="887" />
<br id="u3c_" goog_docs_charindex="888" />
浏
览器和桌面应用程序之间无缝集成是一个很好的特性。比如说，你能从浏览器中启动桌面应用程序。桌面应用程序启动之后，如果你在浏览器下载某个演讲，它会被
添加到桌面应用程序的下载队列中。这样当你从浏览器中观看演讲的时候，如果该演讲已经下载过，流数据就会由桌面程序负责从本地磁盘中取得。这会节省你的
（还有我们的）一些带宽。<br id="t5.." goog_docs_charindex="1040" />
<br id="uxcx" goog_docs_charindex="1041" />
另一个顶好的特性是后退按钮能正常工作，你还能对演讲中的某个特定的幻灯片进行深度链接。<br id="hjq6" goog_docs_charindex="1086" />
</blockquote><strong id="s4bv" goog_docs_charindex="1088">构建应用使用的技术是什么呢？架构是什么样的？</strong> <blockquote id="l8n7" goog_docs_charindex="1113">浏
览器版本我选的是Adobe
Flex3，桌面客户端选用AIR。但由于服务器端设计为使用REST的服务层，所以我们可以很容易地添加其它技术类型的客户端。目前，我们正在并行地开
展JavaFX客户端（它看起来非常有发展前景）、GWT、Silverlight的工作。对比较不同技术来说，这是一种有趣而有根据的检验。 </blockquote><strong id="zzvy" goog_docs_charindex="1270">Parleys.com的架构是如何发展的？</strong> <blockquote id="lqq9" goog_docs_charindex="1294">目
前公布的Parleys.com版本（我们的第一个版本）是一个使用轻量级AJAX的Web应用，其中Flash和JavaScript在一起无缝协作。
我们超过十万的用户很快提出了更多的RIA特性需求，像在全屏模式下观看演讲、观看过程中更换播放器模板、甚至下载演讲并离线观看。用DHTML和
Ajax满足不了更进一步的需求，对此类客户端来说，考虑像Flex/AIR、JavaFX这类RIA技术会更有意义一些。在我必须决定选择哪种RIA技
术的时候（2007年6月），JavaFX语言才刚刚发布。于是，合理而实际的选择就是从Adobe工具开始。 </blockquote><strong id="p-:r" goog_docs_charindex="1559">你对Adobe AIR/Flex的总体印象是什么样的？</strong> <blockquote id="hafp" goog_docs_charindex="1589">作为一个Java开发人员，学习面向对象的ActionScript和UI标记语言实在是像公园散步般简单。但问题是（Java）开发人员不是设计人员，而设计人员需要这两项技能来使用RIA技术。这就是我对<a id="fd0v" href="http://labs.adobe.com/wiki/index.php/Thermo" goog_docs_charindex="2101">Adobe的Thermo项目</a>感到非常兴奋的原因。它能在Photoshop设计人员和开发人员之间的鸿沟上架设一个桥梁（很令人兴奋的东西）。<br id="p18q" goog_docs_charindex="2185" />
<br id="gs4v" goog_docs_charindex="2186" />
Flex和AIR的另一个优点是，你能选择不同的通讯策略——比如XML、JSON、AMF（二进制格式）——容易地与Java后端协同工作。Adobe甚至<a id="hj_g" href="http://www.infoq.com/news/2007/12/blazeds" goog_docs_charindex="2261">（在07年的JavaPolis大会上）开源了他们名叫BlazeDS的远程产品（用Java开发）</a>，BlazeDS允许你从ActionScript访问服务器端Java服务。<br id="b.7d" goog_docs_charindex="2347" />
<br id="rzln" goog_docs_charindex="2348" />
与Java比起来，Flex和AIR的不足之处是质量保证方面的工具不足。例如，ActionScript代码的静态分析（像FindBugs、PMD、Simian等）还不可用。<a id="d7y3" href="http://www.infoq.com/news/2008/02/flex-3rd-party-tools" goog_docs_charindex="2433">Jetbrains最近在IDEA 7.0.3中添加了对Flex的支持</a>，我觉得是个惊喜。它让你使用代码分析器分析ActionScript代码，这是一个好的开始。不过，现在我还不确定是否要用Flex去开发一个超过500个屏幕显示的ERP应用。JavaFX对企业世界有很大影响也在于此。<br id="lxmc" goog_docs_charindex="2575" />
<br id="dsqw" goog_docs_charindex="2576" />
对
嵌入式RIA应用来说，另一个机遇是要便于搜索引擎搜索。RIA内容能被搜索引擎索引是非常重要的，这样人们才能通过Google、Yahoo等搜索引擎
查找到你的站点。你可以用一个并行的静态站点来方便搜索引擎，不过这样工作量太大了。我更喜欢用RSS Feeds或Atom
Publisher协议的优势来达成一样的效果&#8230;&#8230;等我们试验成功之后我再告诉你。<br id="ufpi" goog_docs_charindex="2736" />
<br id="qcid" goog_docs_charindex="2737" />
Flex
和Java之间的&#8220;交叉授粉作用&#8221;说起来也很有意思。Annotation在Java中是主流。你能观察到Flex阵营也露出了类似的端倪。比如
说，Flex的元数据标签就用于与Annotation类似的行为。因此可以想象注解过的Java EE
5实体通过类似技术被重用为ActionScript实体，并在客户端映射进SQLlite。<br id="s7mx" goog_docs_charindex="2890" />
<br id="wmx8" goog_docs_charindex="2891" />
我对Flex/AIR较高的期望有：<br id="ftu5" goog_docs_charindex="2909" />
<ul id="bqou" goog_docs_charindex="2910">
    <li id="ose9" goog_docs_charindex="2911">就个人而言，我希望在AIR未来的版本中能出现Socket监听器，因为如果不这样，AIR应用中要实现完全的P2P功能也许只能使用Hack。 </li>
    <li id="cuud" goog_docs_charindex="2981">通过AIR文件部署Java应用也许会非常棒。这可以让我利用在Java中的投入。在我们头脑风暴的时后，还想过用Java语言开发Flex和AIR应用呢。 </li>
    <li id="cuud" goog_docs_charindex="3061"><span id="fa5t" goog_docs_charindex="3146">让签名的</span>Flex应用摆脱Flash沙箱的束缚。</li>
</ul>
</blockquote><strong id="thoj" goog_docs_charindex="3180">作为一个Java的</strong><strong id="thoj" goog_docs_charindex="3191">长期倡导者，社区是如何认可你对</strong><strong id="thoj" goog_docs_charindex="3207">Adobe AIR/Flex的深入研究？</strong> <blockquote id="xttr" goog_docs_charindex="3231">Parleys.com的Flex/AIR版本已在去年12月的JavaPolis 2007大会上发布。在那个主题演讲中，我说明了技术难题，但也解释了我们的观众要求的功能。<br id="cukv" goog_docs_charindex="3316" />
<br id="zzo6" goog_docs_charindex="3317" />
2007
年6月我们决定开发Parleys.com的一个RIA版本。我本来可以继续DHTML/AJAX路线，但我对版本1已经觉得非常痛苦了，我对Ajax的
求知欲消失殆尽。2007年6月，选择JavaFX做为技术路线为时太早，而且由于我在Mac上开发，Silverlight也不可用。所以，合理的选择
就是考虑Adobe
Flex/AIR。服务器端仍然使用WebWork/Velocity、Spring和Hibernate来保持100%的Java。<br id="ipgd" goog_docs_charindex="3539" />
<br id="xfzl" goog_docs_charindex="3540" />
这一选择带来的好事儿就是我的一些Java同僚震惊于Flex版的发布，于是他们决定重用相同的后端开发一个JavaFX和GWT客户端。我必须要说这看起来非常有发展前景。我会在一场非正式的JavaOne技术讨论会中介绍这些不同的Parleys.com策略。<br id="r_xk" goog_docs_charindex="3663" />
<br id="fl:6" goog_docs_charindex="3665" />
你可以观看<a id="pkeq" href="http://www.parleys.com/display/V21Beta/Home#title=Parleys.com%20V2%20BETA%20Program;talk=6553638;slide=1" goog_docs_charindex="3671">Parleys.com的主题演讲。</a><br id="s5mr" goog_docs_charindex="3690" />
</blockquote><strong id="g:4j" goog_docs_charindex="3692">JavaFX发布已经将近一年了，你有哪些</strong><strong id="g:4j" goog_docs_charindex="3714">与此相关的</strong><strong id="g:4j" goog_docs_charindex="3721">经验</strong><strong id="g:4j" goog_docs_charindex="3725">呢？</strong><br id="g.5_" goog_docs_charindex="3729" />
<blockquote id="fq3q" goog_docs_charindex="3730">JavaFX
的工具支持仍需要加强，但更重要的是，我希望Sun
Microsystems也能着手处理Photoshop和JavaFX之间的鸿沟，以便开发人员和设计人员能够协作（就像Adobe正在计划做的那
样）。支持主流的音频、视频编解码器是JavaFX获取成功的另一个重要特性。JavaFX要是想在RIA领域分一杯羹，把JavaFX应用作为
Applets部署（运行在JRE update
N）、具有与Flash一样的（冷/热）启动体验也是至关重要的。希望下一届JavaOne大会上能提供相关信息。 </blockquote><strong id="fq.3" goog_docs_charindex="3981">作为一个平台，</strong><strong id="fq.3" goog_docs_charindex="3990">你认为JavaFX在正确的轨道上吗？它要取得成功必须实现的关键项目是什么？</strong><br id="dfjr" goog_docs_charindex="4029" />
<blockquote id="ji7o" goog_docs_charindex="4030">JavaFX的优势当然是成熟的Java平台和快速的运行时环境，尤其是JavaFX代码编译之后。我发现重新设计现有的（企业）Swing应用有巨大的商机，MVC中的视图部分可以使用更好看的JavaFX皮肤来替换。<br id="w_::" goog_docs_charindex="4135" />
<br id="d5lf" goog_docs_charindex="4136" />
如果JavaFX Mobile允诺的那些都能实现，JavaFX也能得到巨大的推进。Java（FX）、AIR、Silverlight，谁第一个应用于iPhone，让我们拭目以待。 </blockquote><strong id="wnra" goog_docs_charindex="4227">你对GWT的印象如何？你对于把Java编译成JavaScript有什么疑虑吗？</strong> <blockquote id="j0vu" goog_docs_charindex="4402">体验了DHTML/Ajax处理多浏览器/多操作系统的痛苦之后，我越来越欣赏GWT的策略。<br id="w-.h" goog_docs_charindex="4447" />
<br id="kryh" goog_docs_charindex="4448" />
我们已经有了Parleys.com客户端的第一个GWT原型。它看起来很不错，而且在不同的浏览器和操作系统上不需要调整。Google的确实现了他们的承诺，以Google中汇集的脑力是理所当然的。<br id="aknp" goog_docs_charindex="4794" />
<br id="fwfn" goog_docs_charindex="4795" />
开发新的组件有点儿挑战，我希望活跃的GWT社区能继续成长并发布更多的UI组件。发布GWT版本之后我们会关注观众们更喜欢哪一个客户端。我会让你保持消息灵通的。<br id="hlz8" goog_docs_charindex="4874" />
</blockquote><strong id="dzsw" goog_docs_charindex="4876">你花时间研究过</strong><strong id="dzsw" goog_docs_charindex="4885">Silverlight吗？对它的总体印象如何？</strong> <blockquote id="bmsc" goog_docs_charindex="4911">我安装过Silverlight的版本1和版本2早期的一个Beta版。Demo确实能在Mac上的Firefox中运转，除此之外就没什么值得提的了。看看Dolmen公司中负责Microsoft技术的同事能给我带来什么惊喜吧&#8230;&#8230;我可没给你们压力啊 ;) </blockquote><strong id="obd-" goog_docs_charindex="5229">你认为，或者说希望</strong><strong id="obd-" goog_docs_charindex="5240">一年半之后RIA领域会怎样呢？<br id="m48:" goog_docs_charindex="5256" />
</strong><blockquote id="ufa7" goog_docs_charindex="5258">看
DHTML/Ajax阵营是否能像RIA那样进取。GWT将会在这场较量中扮演重要的角色。一年半之后，我们也许就有了Flex4和AIR2。到那个时
候，Photoshop设计人员先绘制出原型，Flex开发人员在上面添加一些逻辑就可以收官了。由于未来因特网和电视之间的趋同，我们将能制造类似
iTunes的应用，在各种操作系统（包括Linux）上在线或离线播放HD交互式视频。<br id="jm33" goog_docs_charindex="5440" />
<br id="h2cq" goog_docs_charindex="5441" />
一年半之后，我应该已经知道Adobe AIR和/或Java（FX）是否运行在iPhone上，还有JavaFX Mobile的承诺能不能落实&#8230;&#8230;美妙的时刻！ </blockquote>Parleys.com
是一个真正的Web
2.0应用。希望InfoQ.com社区能借鉴Parleys.com构建过程中的经验，因为它就像领先的RIA平台相互较量的一个实验台。让我们看看什
么技术能使Stephan成功，还有他的团队最终会为Parleys.com选择什么技术做为他们的主平台。 <br id="u_8q" goog_docs_charindex="5664" />
<span id="h523" goog_docs_charindex="5665"><strong id="gp:d" goog_docs_charindex="5666">查看英文原文：</strong></span><a id="lxjc" title="Stephan Janssen On Parleys.com And The RIA Landscape" href="http://www.infoq.com/news/2008/03/stephan-janssen-parleys-ria" goog_docs_charindex="5676"><font color="#551a8b">Stephan Janssen On Parleys.com And The RIA Landscape</font></a>
<img src ="http://www.blogjava.net/sealyu/aggbug/300298.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sealyu/" target="_blank">seal</a> 2009-10-30 09:11 <a href="http://www.blogjava.net/sealyu/archive/2009/10/30/300298.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>网上购物车数据库设计（转）</title><link>http://www.blogjava.net/sealyu/archive/2009/10/27/299976.html</link><dc:creator>seal</dc:creator><author>seal</author><pubDate>Tue, 27 Oct 2009 13:11:00 GMT</pubDate><guid>http://www.blogjava.net/sealyu/archive/2009/10/27/299976.html</guid><wfw:comment>http://www.blogjava.net/sealyu/comments/299976.html</wfw:comment><comments>http://www.blogjava.net/sealyu/archive/2009/10/27/299976.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sealyu/comments/commentRss/299976.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sealyu/services/trackbacks/299976.html</trackback:ping><description><![CDATA[<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="font-family: 宋体;">一、</span><span style="font-size: 12pt; font-family: 宋体;">概述</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="font-family: 宋体;">网上购物店的数据模型，它主要模式有产品：</span><span style="font-family: TimesNewRoman;">product </span><span style="font-family: 宋体;">，帐户：</span><span style="font-family: TimesNewRoman;">Account</span><span style="font-family: 宋体;">，</span><span style="font-family: 宋体;">定单：</span><span style="font-family: TimesNewRoman;">Order</span><span style="font-family: 宋体;">。和产品相关的表有</span><span style="font-family: TimesNewRoman;">category </span><span style="font-family: 宋体;">，</span><span style="font-family: TimesNewRoman;">product,item, inventory, supplier</span><span style="font-family: 宋体;">；和</span><span style="font-family: 宋体;">用户相关表有的</span><span style="font-family: TimesNewRoman;">account </span><span style="font-family: 宋体;">，</span><span style="font-family: TimesNewRoman;">signon </span><span style="font-family: 宋体;">，</span><span style="font-family: TimesNewRoman;">profile</span><span style="font-family: 宋体;">；</span><span style="font-family: 宋体;">和定单相关的表有</span><span style="font-family: TimesNewRoman;">orders,orderstatus,lineitem </span><span style="font-family: 宋体;">，他们之间的整体关系如下</span><span style="font-family: TimesNewRoman;">.</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: center;" align="center">ERD<span style="font-family: 宋体;">图</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: center;" align="center">FK:Foreign Key</p>
<p style="margin: 0cm 0cm 0pt;"><span style="font-size: 12pt; font-family: 宋体;">二、帐户模型</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="font-family: 宋体;">帐户模型，记录者用户的登录名称，密码。以及个人信息如地址，性名，电话等，还有它在系统中的</span><span style="font-family: TimesNewRoman;">profile</span><span style="font-family: 宋体;">信息。表有</span><span style="font-family: TimesNewRoman;">Account </span><span style="font-family: 宋体;">主键是</span><span style="font-family: TimesNewRoman;">userID,</span><span style="font-family: 宋体;">它记录用户的基本信息，如</span><span style="font-family: TimesNewRoman;">email,name</span><span style="font-family: 宋体;">等。</span><span style="font-family: TimesNewRoman;">Signon </span><span style="font-family: 宋体;">表记录者</span><span style="font-family: TimesNewRoman;">userID</span><span style="font-family: 宋体;">和</span><span style="font-family: TimesNewRoman;">password</span><span style="font-family: 宋体;">，</span><span style="font-family: TimesNewRoman;">Profile</span><span style="font-family: 宋体;">表记录者用户的登录系统的系统设置。可以根据用户的类型，显示不同的登录信息。</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;">（</span><span style="font-size: 12pt; font-family: TimesNewRoman;">1</span><span style="font-size: 12pt; font-family: 宋体;">）</span><span style="font-size: 12pt; font-family: TimesNewRoman;">account</span><span style="font-size: 12pt; font-family: 宋体;">表</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">create table account (</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">userid varchar(80) not null,</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">email varchar(80) not null,</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">name varchar(80) not null,</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">status char(2) null,</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">addr1 varchar(80) not null,</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">addr2 varchar(40) null,</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">city varchar(80) not null,</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">state varchar(80) not null,</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">zip varchar(20) not null,</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">country varchar(20) not null,</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">phone varchar(80) not null,</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">constraint pk_account primary key (userid)</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">)</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="font-family: 宋体;">说明：</span><span style="font-family: TimesNewRoman;">primary key</span><span style="font-family: 宋体;">是</span><span style="font-family: TimesNewRoman;">userID,</span><span style="font-family: 宋体;">它记录帐户的基本信息。</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;">（</span><span style="font-size: 12pt; font-family: TimesNewRoman;">2</span><span style="font-size: 12pt; font-family: 宋体;">）</span><span style="font-size: 12pt; font-family: TimesNewRoman;">Signon </span><span style="font-size: 12pt; font-family: 宋体;">表</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">create table signon (</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">username varchar(25) not null,</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">password varchar(25) not null,</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">constraint pk_signon primary key (username)</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">)</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="font-family: 宋体;">说明：记录登录名和密码。</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;">（</span><span style="font-size: 12pt; font-family: TimesNewRoman;">3</span><span style="font-size: 12pt; font-family: 宋体;">）</span><span style="font-size: 12pt; font-family: TimesNewRoman;">Profile</span><span style="font-size: 12pt; font-family: 宋体;">表</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">create table profile (</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">userid varchar(80) not null,</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">langpref varchar(80) not null,</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">favcategory varchar(30),</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">mylistopt int,</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">banneropt int,</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">constraint pk_profile primary key (userid)</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">)</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="font-family: 宋体;">说明：用户的登录信息，方便个性化定制。</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;">（</span><span style="font-size: 12pt; font-family: TimesNewRoman;">4</span><span style="font-size: 12pt; font-family: 宋体;">）</span><span style="font-size: 12pt; font-family: TimesNewRoman;">Bannerdata </span><span style="font-size: 12pt; font-family: 宋体;">表</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">create table bannerdata (</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">favcategory varchar(80) not null,</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">bannername varchar(255) null,</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">constraint pk_bannerdata primary key (favcategory)</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">)</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="font-family: 宋体;">说明：记录不同的登录信息。</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;">三、产品模型</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="font-family: 宋体;">产品的模型主要有分类，它是产品的大类。表</span><span style="font-family: TimesNewRoman;">category </span><span style="font-family: 宋体;">就是记录分类名称，描述信息。</span><span style="font-family: TimesNewRoman;">Product</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="font-family: 宋体;">记录每个产品的基本信息，包括产品名称，和产品的描述。它是一对多的关系。</span><span style="font-family: TimesNewRoman;">Supplier </span><span style="font-family: 宋体;">表</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="font-family: 宋体;">记录产品的提供者信息，包括提供者的名称，地址，状态等。</span><span style="font-family: TimesNewRoman;">Item </span><span style="font-family: 宋体;">记录产品的提供者，产</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="font-family: 宋体;">品</span><span style="font-family: TimesNewRoman;">ID,</span><span style="font-family: 宋体;">价格，状态。</span><span style="font-family: TimesNewRoman;">Inventory </span><span style="font-family: 宋体;">表记录产品的数量。关系如下：</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;">（</span><span style="font-size: 12pt; font-family: TimesNewRoman;">1</span><span style="font-size: 12pt; font-family: 宋体;">）</span><span style="font-size: 12pt; font-family: TimesNewRoman;"> category</span><span style="font-size: 12pt; font-family: 宋体;">表</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">create table category (</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">catid char(10) not null,</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">name varchar(80) null,</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">descn varchar(255) null,</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">constraint pk_category primary key (catid)</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">)</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;">（</span><span style="font-size: 12pt; font-family: TimesNewRoman;">2</span><span style="font-size: 12pt; font-family: 宋体;">）</span><span style="font-size: 12pt; font-family: TimesNewRoman;">product</span><span style="font-size: 12pt; font-family: 宋体;">表</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">create table product (</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">productid char(10) not null,</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">category char(10) not null,</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">name varchar(80) null,</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">descn varchar(255) null,</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">constraint pk_product primary key (productid),</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">constraint fk_product_1 foreign key (category)</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">references category (catid)</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">)</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;">（</span><span style="font-size: 12pt; font-family: TimesNewRoman;">3</span><span style="font-size: 12pt; font-family: 宋体;">）</span><span style="font-size: 12pt; font-family: TimesNewRoman;"> item</span><span style="font-size: 12pt; font-family: 宋体;">表</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">create table item (</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">itemid char(10) not null,</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">productid char(10) not null,</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">listprice decimal(10,2) null,.unitcost decimal(10,2) null,</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">supplier int null,</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">status char(2) null,</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">attr1 varchar(80) null,</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">attr2 varchar(80) null,</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">attr3 varchar(80) null,</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">attr4 varchar(80) null,</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">attr5 varchar(80) null,</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">constraint pk_item primary key (itemid),</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">constraint fk_item_1 foreign key (productid)</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">references product (productid),</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">constraint fk_item_2 foreign key (supplier)</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">references supplier (suppid)</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">)</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;">（</span><span style="font-size: 12pt; font-family: TimesNewRoman;">4</span><span style="font-size: 12pt; font-family: 宋体;">）</span><span style="font-size: 12pt; font-family: TimesNewRoman;"> inventory </span><span style="font-size: 12pt; font-family: 宋体;">表</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">create table inventory (</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">itemid char(10) not null,</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">qty int not null</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">)</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;">（</span><span style="font-size: 12pt; font-family: TimesNewRoman;">5</span><span style="font-size: 12pt; font-family: 宋体;">）</span><span style="font-size: 12pt; font-family: TimesNewRoman;">supplier</span><span style="font-size: 12pt; font-family: 宋体;">表</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">create table inventory (</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">suppid int&nbsp;not null</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">name&nbsp;varchar(80) </span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">status &nbsp;char(2) </span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">attr1 &nbsp;&nbsp;varchar(80)</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">attr2 &nbsp;&nbsp;varchar(80)</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">city &nbsp;&nbsp;&nbsp;varchar(80)</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">state &nbsp;&nbsp;varchar(80)</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">zip&nbsp;&nbsp;&nbsp;&nbsp;char(6)</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">phone &nbsp;&nbsp;varchar(80)</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">constraint pk_supplier primary key (suppid),</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">)</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;">四、定单模型</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="font-family: 宋体;">定单记录用户的选择产品信息，数量，表主要有</span><span style="font-family: TimesNewRoman;">Orders,</span><span style="font-family: 宋体;">记录用户的地址，帐户信息，总金</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="font-family: 宋体;">额。</span><span style="font-family: TimesNewRoman;">Orderstatus </span><span style="font-family: 宋体;">记录定单状态。</span><span style="font-family: TimesNewRoman;">Lineitem </span><span style="font-family: 宋体;">记录定单中的产品数量，单位价格，产品</span><span style="font-family: TimesNewRoman;">ID</span><span style="font-family: 宋体;">。</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;">（</span><span style="font-size: 12pt; font-family: TimesNewRoman;">1</span><span style="font-size: 12pt; font-family: 宋体;">）</span><span style="font-size: 12pt; font-family: TimesNewRoman;">orders</span><span style="font-size: 12pt; font-family: 宋体;">表</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">create table orders (</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">orderid int not null,</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">userid varchar(80) not null,</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">orderdate date not null,</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">shipaddr1 varchar(80) not null,</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">shipaddr2 varchar(80) null,</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">shipcity varchar(80) not null,</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">shipstate varchar(80) not null,</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">shipzip varchar(20) not null,</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">shipcountry varchar(20) not null,</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">billaddr1 varchar(80) not null,</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">billaddr2 varchar(80) null,</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">billcity varchar(80) not null,</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">billstate varchar(80) not null,</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">billzip varchar(20) not null,</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">billcountry varchar(20) not null,</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">courier varchar(80) not null,</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">totalprice number(10,2) not null,</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">billtoname varchar(80) not null,</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">shiptoname varchar(80) not null,</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">creditcard varchar(80) not null,</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">exprdate char(7) not null,</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">cardtype varchar(80) not null,</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">locale varchar(20) not null,</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">constraint pk_orders primary key (orderid),</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">constraint fk_orders_1 foreign key (userid)</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">references account (userid)</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">)</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="font-family: 宋体;">定单的信息。</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;">（</span><span style="font-size: 12pt; font-family: TimesNewRoman;">2</span><span style="font-size: 12pt; font-family: 宋体;">）</span><span style="font-size: 12pt; font-family: TimesNewRoman;">Orderstatus</span><span style="font-size: 12pt; font-family: 宋体;">表</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">create table orderstatus (</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">orderid int not null,</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">linenum int not null,</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">timestamp date not null,</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">status char(2) not null,</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">constraint pk_orderstatus primary key (orderid, linenum),</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">constraint fk_orderstatus_1 foreign key (orderid)</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">references orders (orderid)</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">)</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="font-family: 宋体;">定单中的产品状态</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="font-size: 12pt; font-family: 宋体;">（</span><span style="font-size: 12pt; font-family: TimesNewRoman;">3</span><span style="font-size: 12pt; font-family: 宋体;">）</span><span style="font-size: 12pt; font-family: TimesNewRoman;">lineitem</span><span style="font-size: 12pt; font-family: 宋体;">表</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">create table lineitem (</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">orderid int not null,</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">linenum int not null,</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">itemid char(10) not null,</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">quantity int not null,</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">unitprice number(10,2) not null,</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">constraint pk_lineitem primary key (orderid, linenum),</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">constraint fk_lineitem_1 foreign key (orderid)</span></p>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left;" align="left"><span style="font-family: TimesNewRoman;">references orders (orderid)</span></p>
<span style="font-family: TimesNewRoman;">)</span>
<img src ="http://www.blogjava.net/sealyu/aggbug/299976.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sealyu/" target="_blank">seal</a> 2009-10-27 21:11 <a href="http://www.blogjava.net/sealyu/archive/2009/10/27/299976.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>小技巧：修复windows 7收藏夹无法展开的问题（转）</title><link>http://www.blogjava.net/sealyu/archive/2009/10/23/299528.html</link><dc:creator>seal</dc:creator><author>seal</author><pubDate>Fri, 23 Oct 2009 12:23:00 GMT</pubDate><guid>http://www.blogjava.net/sealyu/archive/2009/10/23/299528.html</guid><wfw:comment>http://www.blogjava.net/sealyu/comments/299528.html</wfw:comment><comments>http://www.blogjava.net/sealyu/archive/2009/10/23/299528.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sealyu/comments/commentRss/299528.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sealyu/services/trackbacks/299528.html</trackback:ping><description><![CDATA[<p><a href="http://www.kenengba.com/post/676.html" title="win7">win7</a>的资源管理器左侧的&#8220;收藏夹&#8221;提供了相当于&#8220;快捷方式&#8221;的功能。</p>
<p>今天我的windows 7遇到了小问题，<font color="#ff0000"><strong>资源管理器的&#8220;收藏夹&#8221;无法展开</strong></font>，但&#8220;库&#8221;和&#8220;计算机&#8221;都可以。但点击&#8220;收藏夹&#8221;能进入到&#8220;收藏夹&#8221;的文件夹，里面的快捷方式没有丢失。我尝试右击&#8220;收藏夹&#8221;，选择&#8220;还原收藏夹&#8221;链接也没有效果。也就是说，<strong>某些原因导致了windows 7资源管理器的&#8220;收藏夹&#8221;失灵了。</strong></p>
<p>搜索了很久都没有找到答案，于是我使用了英文作为关键词去搜索，经过了几次的链接转跳后，终于找到了答案。</p>
<p><img src="http://farm4.static.flickr.com/3571/3873817310_1b8a464d65_o.png" alt="" height="349" width="524" /></p>
<h2><font color="#3366ff">解决方法：</font></h2>
<p>在&#8220;<a href="http://www.vistax64.com/tutorials/147638-favorite-links-empty.html">vistax64</a>&#8221;论坛里，有网友贴出了Vista下收藏夹被清空和资源管理器的&#8220;收藏夹&#8221;无法展开的问题的解决方案，其中一个修改注册表的方法经测试有效，分享如下：</p>
<blockquote>
<p>1、运行regedit</p>
<p>2、展开到<strong>HKEY_CLASSES_ROOT"lnkfile</strong></p>
<p>3、添加一个字符串值：<strong>IsShortcut ，不需要填写串值，回车即可</strong></p>
<p>4、重新登入</p>
</blockquote>
<p>如果你嫌麻烦，可以直接下载<a href="http://kenengba.googlecode.com/files/Restore_Favorite_Links.reg">这个reg文件</a>，双击导入即可。</p>
<img src ="http://www.blogjava.net/sealyu/aggbug/299528.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sealyu/" target="_blank">seal</a> 2009-10-23 20:23 <a href="http://www.blogjava.net/sealyu/archive/2009/10/23/299528.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Google号召社区力量为互联网加速(转自InfoQ)</title><link>http://www.blogjava.net/sealyu/archive/2009/07/06/285626.html</link><dc:creator>seal</dc:creator><author>seal</author><pubDate>Mon, 06 Jul 2009 00:59:00 GMT</pubDate><guid>http://www.blogjava.net/sealyu/archive/2009/07/06/285626.html</guid><wfw:comment>http://www.blogjava.net/sealyu/comments/285626.html</wfw:comment><comments>http://www.blogjava.net/sealyu/archive/2009/07/06/285626.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sealyu/comments/commentRss/285626.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sealyu/services/trackbacks/285626.html</trackback:ping><description><![CDATA[<p class="info">
作者
<strong><a href="http://www.infoq.com/cn/bycategory.action?authorName=Abel-Avram" class="editorlink">
Abel Avram</a>
</strong>
译者
<strong><a href="http://www.infoq.com/cn/bycategory.action?authorName=%E9%9C%8D%E6%B3%B0%E7%A8%B3" class="editorlink">
霍泰稳</a>
</strong>
发布于
2009年7月5日 上午10时38分
</p>
<dl class="tags2"><dt class="community">社区</dt><dd><a href="http://www.infoq.com/cn/architecture" name="architecture" id="1,390" onclick="try {CategoryPopup.showPopup(this);} catch(e) {}; return false;">Architecture</a></dd><dt class="topics">主题</dt><dd><a href="http://www.infoq.com/cn/Internet" name="Internet" id="5,609" onclick="try {CategoryPopup.showPopup(this);} catch(e) {}; return false;">互联网</a>,</dd><dd><a href="http://www.infoq.com/cn/performance-scalability" name="performance-scalability" id="754" onclick="try {CategoryPopup.showPopup(this);} catch(e) {}; return false;">性能和可伸缩性</a></dd><dt class="topics">标签</dt><dd><a href="http://www.infoq.com/cn/google" name="google" id="1,053" onclick="try {CategoryPopup.showPopup(this);} catch(e) {}; return false;">Google</a>,</dd><dd><a href="http://www.infoq.com/cn/Community" name="Community" id="1,115" onclick="try {CategoryPopup.showPopup(this);} catch(e) {}; return false;">社区</a></dd></dl>
<p>在几周前将<a title="开源网页加速工具" href="http://www.infoq.com/cn/news/2009/06/Page-Speed" id="e8p0">网页加速工具</a>开源后，Google又发布了<a title="一个网站" href="http://code.google.com/speed/" id="go_3">一个网站</a>，意在探寻更多的方法，并推动全互联网的加速进程。这次Google分享了研究数据、网站加速优化指南、有关性能的录制视屏、大量性能优化工具的介绍，以及一个讨论组，期望所有人都能在此分享如何使网页更快的创意。</p>
<p>Google研究部门针对<a title="网页装载速度如何影响用户的搜索结果" href="http://code.google.com/speed/files/delayexp.pdf" id="odmo">网页装载速度如何影响用户的搜索结果</a>做了一个研究，在数据响应阶段他们引入了几个可控的延迟：</p>
<blockquote><img title="gr1" style="border-width: 0px;" alt="gr1" src="http://www.infoq.com/cn/news/2009/07/resource/news/2009/06/Google-Speed-Up-the-Internet/en/resources/gr1.png" border="0" height="255" width="523" /> </blockquote>
<p>在引入这些可控延迟，并对用户监视了4-6周之后，他们在搜索结果数字中发现了如下问题：</p>
<blockquote>
<p><img title="image" style="border-width: 0px;" alt="image" src="http://www.infoq.com/cn/news/2009/07/resource/news/2009/06/Google-Speed-Up-the-Internet/en/resources/gr2.png" border="0" height="182" width="513" /></p>
</blockquote>
<p>虽然0.5%的损失对一般人并不意味着什么，但是Google确信这样的损失对他们来说意味深远，因为在用户执行搜索的数字、广告点击显示的数字以
及收入之间有着直接的关联。除了加速自己的Web服务器，考虑到这样做对其他人也有着积极的作用，Google还想加速全部互联网。</p>
<p>Google认为，除了带宽限制，还有其他多方面的因素导致了互联网的慢速：</p>
<blockquote>
<ul>
    <li>在Web开发中，网站没有遵循最佳实践，导致不必要的慢速；</li>
    <li>Web服务器经常没有专为速度而优化；</li>
    <li>几个互联网协议是在10年或者15年之前设计的，那时候的网站和Web应用和现在大不相同；</li>
    <li>浏览器也是最近才开始关注速度，很多互联网用户还在使用慢速的浏览器。</li>
</ul>
</blockquote>
<p>那么对Google来说，互联网速度应该快到什么程度？从一页导航到另一页的速度应该和翻一页杂志的速度相当；允许视频和图像内容尽可能快；用户之
间的实时协作不能因链接而延迟，包括移动用户等。等等这些，Google想看到HTML得到优化，这一点在HTML
5里也已经得到体现，但是他们还希望优化甚至用一些更好的东西改变HTTP和TCP。然而，考虑到要在目前的基础设施中做这样巨大的投资，这个改变还相当
难以实现。</p>
<p>为了指导其他人如何加速他们的网站，Google提供了如下一些指南：</p>
<ul>
    <li><a href="http://code.google.com/speed/articles/optimizing-css.html">CSS：每个声明只使用一次</a></li>
    <li><a href="http://code.google.com/speed/articles/gzip.html">gzip压缩如何工作</a></li>
    <li><a href="http://code.google.com/speed/articles/caching.html">HTTP缓存</a></li>
    <li><a href="http://code.google.com/speed/articles/identifying-page-speed-problems.html">使用网页加速工具优化网站性能</a></li>
    <li><a href="http://code.google.com/speed/articles/reflow.html">将浏览器回流降至最小程度</a></li>
    <li><a href="http://code.google.com/speed/articles/optimizing-javascript.html">优化JavaScript代码</a></li>
    <li><a href="http://code.google.com/speed/articles/optimizing-images.html">优化Web图片</a></li>
    <li><a href="http://code.google.com/speed/articles/optimizing-php.html">PHP性能技巧</a></li>
    <li><a href="http://code.google.com/speed/articles/prefetching.html">预读取资源文件</a></li>
    <li><a href="http://code.google.com/speed/articles/include-scripts-properly.html">正确包含样式表和脚本文件</a></li>
    <li><a href="http://code.google.com/speed/articles/optimizing-html.html">降低HTML文档的文件大小</a></li>
    <li><a href="http://code.google.com/speed/articles/usability-latency.html">用户体验和网站优化</a></li>
</ul>
<p>他们还从各种信息源收集到以下一些工具：</p>
<ul>
    <li><a href="http://code.google.com/speed/page-speed/">Page Speed</a>（网页加速工具）：这是一个开源的Firefox/Firebug插件。网站管理人员和Web开发人员可以使用网页加速工具估算自己网页的性能，并得到如何优化这些网页的建议。</li>
    <li><a href="http://pagetest.wiki.sourceforge.net/">AOL Page Test</a>（AOL网页测试）：这是一个用来测量和分析使用IE时网页性能的开源工具。</li>
    <li><a href="http://stevesouders.com/cuzillion/">Cuzillion</a>：该工具能够快速构建网页，并发现组件如何交互。每天，浏览器都会有各种无法预料的行为，有时因为浏览器不同，行为也各异。Cuzillion能够让你发现这些行为，并和其他人分享示例网页。</li>
    <li><a href="http://www.fiddler2.com/fiddler2/">Fiddler 2</a>：这是一个Web调试代理工具，能够记录计算机和互联网之间的所有HTTP流量。Fiddler让你能够监测到所有HTTP流量，设置断点，虚拟流入和流出数据。Fiddler有一个强大的基于事件的脚本子系统，能够使用任何.NET语言进行扩展。</li>
    <li><a href="http://getfirebug.com/">Firebug</a>：Firebug和Firefox相集成，让你在浏览网页时就能使用多个开发工具。你可以编辑、调试、监视任何Web页面的CSS、HTML和JavaScript代码。</li>
    <li><a href="http://www.stevesouders.com/hammerhead">Hammerhead</a>：Hammerhead给Firebug增加了一个Tab，用来测量网页的装载时间。</li>
    <li><a href="http://www.hpl.hp.com/research/linux/httperf/">httperf</a>：这个工具能够用来测量Web服务性能。它提供了一个用来创建不同HTTP工作量和测量服务器性能的功能。Httperf的重点不是实现一个特定的标准，而是提供一个自动的、高性能的工具，以帮助构建微观和宏观层面的标准。</li>
    <li><a href="http://www.httpwatch.com/">HttpWatch</a>：这是一个HTTP浏览器和调试器，和IE以及Firefox相集成，在浏览器窗口的配合下，对HTTP和HTTPS进行无缝监视。</li>
    <li><a href="http://www.alphaworks.ibm.com/tech/pagedetailer">IBM Page Detailer</a>（IBM网页设计器）：一个图形工具，让Web站点开发人员和编辑快速而准确地从客户角度估算网页性能。IBM网页设计器提供了网页从何处被传递到Web浏览器的行为细节。这些细节包括时间、大小，以及一个网页中每个条目的身份。</li>
    <li><a href="http://www.jslint.com/">JSLint</a>：一个JavaScript项目，用来查找JavaScript程序中的错误，是一个代码质量工具。</li>
    <li><a href="http://www.crockford.com/javascript/jsmin.html">JSMin</a>：一个过滤器，可以从JavaScript文件中清除评论和不必要的空白。</li>
    <li><a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=119f3477-dced-41e3-a0e7-d8b5cae893a3&amp;displaylang=en">Microsoft VRTA</a>（Visual Round Trip Analyzer）：VRTA工具帮助Web开发人员和测试人员可视化网页下载、寻找最佳实践和改变，以优化Web性能。VRTA检查通讯协议、定位往返过多的原因，以及推荐的解决方案等。</li>
    <li><a href="http://mon.itor.us/">mon.itor.us</a>：提供个性化的Ajax仪表盘界面，检查服务器性能和有效性，创建运行时间报告，跟踪访问者，检查CPU、内存和其他系统资源，并在监测到异常时给用户报警。</li>
    <li><a href="http://wiki.github.com/stubbornella/oocss">OOCSS</a>：允许开发者撰写快速、可维护、基于标准的前台后台代码。</li>
    <li><a href="http://www.pylot.org/">Pylot</a>：一个用来测试Web服务性能和可扩展性的开源工具。它运行HTTP载入测试，这在容量规划、标准、分析和系统调整时都很有作用。Pylot生成并发载入（HTTP请求）、验证服务器响应和产生数据报告。</li>
    <li><a href="http://smush.it/">Smush It</a>：使用图像格式特定无损图像优化工具，挤出你图像中的所有冗余字节——还不改变他们的外观和可视质量。通过优化图像，你可以得到一个所节省字节多少的报告，所有修改的图片也可以作为一个单一zip包下载。</li>
    <li><a href="http://hping.org/wbox/">Wbox</a>：
    该工具意在当你测试HTTP相关文件时，能够多些乐趣。用它可以执行很多任务，包括：为Web应用、Web服务生成内容所用的时间，Web应用负载，无需
    改变本地解析器测试虚拟主机配置，在发出正确的HTTP代码的情况下检查重定向是否工作正常，测试HTTP压缩是否正常工作以及是否让服务器页面更快，将
    其作为一个配置少的HTTP服务器来分享文件。</li>
    <li><a href="http://developer.yahoo.com/yslow/">Yahoo! YSlow</a>：用来分析网页，并基于一套高性能Web页的规则，给出提高性能的方法。YSlow是一个Firefox插件，和Firebug Web开发工具相集成。</li>
    <li><a href="http://developer.yahoo.com/yui/compressor/">YUI Compressor</a>：一个JavaScript压缩器，用来生产比其他大多数工具更高压缩比的文件。</li>
</ul>
<p>最后，<a title="Google加速网站" href="http://groups.google.com/group/make-the-web-faster" id="n67_">Google加速网站</a>包含了一个讨论组，任何人都可以在此分享他们的技术和创意，以用来加快网页的访问速度。</p>
<p>InfoQ网站上相关内容链接：<a title="Google开源网页加速工具Page Speed" href="http://www.infoq.com/cn/news/2009/06/Page-Speed" id="rhli">Google开源网页加速工具Page Speed</a></p>
<p><strong>查看英文原文：</strong><a href="http://www.infoq.com/news/2009/06/Google-Speed-Up-the-Internet">Google Calls for a Joint Effort to Speed Up the Internet</a></p>
<img src ="http://www.blogjava.net/sealyu/aggbug/285626.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sealyu/" target="_blank">seal</a> 2009-07-06 08:59 <a href="http://www.blogjava.net/sealyu/archive/2009/07/06/285626.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>推荐快播免费电影网站</title><link>http://www.blogjava.net/sealyu/archive/2009/07/03/285403.html</link><dc:creator>seal</dc:creator><author>seal</author><pubDate>Fri, 03 Jul 2009 12:07:00 GMT</pubDate><guid>http://www.blogjava.net/sealyu/archive/2009/07/03/285403.html</guid><wfw:comment>http://www.blogjava.net/sealyu/comments/285403.html</wfw:comment><comments>http://www.blogjava.net/sealyu/archive/2009/07/03/285403.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/sealyu/comments/commentRss/285403.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sealyu/services/trackbacks/285403.html</trackback:ping><description><![CDATA[<h3>推荐快播免费电影网站</h3>
<ul><span id="friend">
    <li><a href="http://www.adnim5.cn/Out.asp?userid=9652" target="_blank">www.k585.com</a>
    <li><a href="http://www.adnim5.cn/Out.asp?userid=4373" target="_blank">www.vodtt.com</a>
    <li><a href="http://www.adnim5.cn/Out.asp?userid=1" target="_blank">www.mm023.com</a>
    <li><a href="http://www.adnim5.cn/Out.asp?userid=5764" target="_blank">www.13hp.com</a>
    <li><a href="http://www.adnim5.cn/Out.asp?userid=4974" target="_blank">v.92na.com</a>
    <li><a href="http://www.adnim5.cn/Out.asp?userid=5996" target="_blank">tv.huayushequ.com</a>
    <li><a href="http://www.adnim5.cn/Out.asp?userid=11437" target="_blank">www.145la.cn</a>
    <li><a href="http://www.adnim5.cn/Out.asp?userid=3487" target="_blank">www.gggvod.cn</a>
    <li><a href="http://www.adnim5.cn/Out.asp?userid=9774" target="_blank">www.dv165.com</a>
    <li><a href="http://www.adnim5.cn/Out.asp?userid=12992" target="_blank">ymx18.cn</a>
    <li><a href="http://www.adnim5.cn/Out.asp?userid=6733" target="_blank">www.qvodc.com</a>
    <li><a href="http://www.adnim5.cn/Out.asp?userid=3632" target="_blank">whklg.5944vip.net</a>
    <li><a href="http://www.adnim5.cn/Out.asp?userid=10588" target="_blank">www.lvyoulvyou.com</a>
    <li><a href="http://www.adnim5.cn/Out.asp?userid=10582" target="_blank">zjd240.w18.dns2008.cn</a>
    <li><a href="http://www.adnim5.cn/Out.asp?userid=9559" target="_blank">movie.in0574.com</a>
    <li><a href="http://www.adnim5.cn/Out.asp?userid=7461" target="_blank">www.cctv-tv.net</a>
    <li><a href="http://www.adnim5.cn/Out.asp?userid=10572" target="_blank">zjd.9yz.cc</a>
    <li><a href="http://www.adnim5.cn/Out.asp?userid=10578" target="_blank">www.hcge.net</a>
    <li><a href="http://www.adnim5.cn/Out.asp?userid=10565" target="_blank">19623.800y.net</a>
    <li><a href="http://www.adnim5.cn/Out.asp?userid=10525" target="_blank">www.sdxyyy.com</a> </li>
    </span></ul>
<img src ="http://www.blogjava.net/sealyu/aggbug/285403.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sealyu/" target="_blank">seal</a> 2009-07-03 20:07 <a href="http://www.blogjava.net/sealyu/archive/2009/07/03/285403.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>去除offic2003正版验证提示</title><link>http://www.blogjava.net/sealyu/archive/2009/05/16/271000.html</link><dc:creator>seal</dc:creator><author>seal</author><pubDate>Sat, 16 May 2009 06:57:00 GMT</pubDate><guid>http://www.blogjava.net/sealyu/archive/2009/05/16/271000.html</guid><wfw:comment>http://www.blogjava.net/sealyu/comments/271000.html</wfw:comment><comments>http://www.blogjava.net/sealyu/archive/2009/05/16/271000.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/sealyu/comments/commentRss/271000.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sealyu/services/trackbacks/271000.html</trackback:ping><description><![CDATA[<font size="3">今天上网更新系统，Office 2003 也要正版验证了。<br />
于是上网查查发现现在的用序列号GWH28-DGCMP-P6RC4-6J4MT-3HFDY已经不行了，需要更换为<br />
Office System：&nbsp; &nbsp;&nbsp; &nbsp; FTYBP-J2B4K-K7JHY-3JG2K-MT9VM<br />
FrontPage/OneNote：WFDWY-XQXJF-RHRYG-BG7RQ-BBDHM<br />
<br />
更改Key的方法：<br />
1.删除注册表[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\11.0\Registration\{90110804-6000-11D3-8CFE-0150048383C9}]键中ProductID和DigitalProductID两项。<br />
2.运行Office，出现安装程序，输入keyFTYBP-J2B4K-K7JHY-3JG2K-MT9VM<br />
<br />
3.去</font><a href="http://office.microsoft.com/zh-cn/downloads/maincatalog.aspx?lc=zh-cn" target="_blank"><font size="3"><font color="#2b76b0">http://office.microsoft.com/zh-cn/downloads/maincatalog.aspx?lc=zh-cn</font></font></a><font size="3">验证一下，OK。</font>
<img src ="http://www.blogjava.net/sealyu/aggbug/271000.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sealyu/" target="_blank">seal</a> 2009-05-16 14:57 <a href="http://www.blogjava.net/sealyu/archive/2009/05/16/271000.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>