<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet href='http://feed.feedsky.com/styles/feedsky0.xsl' type='text/xsl' ?><!--这是一个由Feedsy提供技术支持的Feed，为了提高读者阅读的体验，以及满足用户美化自己Feed的需要，我们设计了多种精美的Feed模板，提供给大家选择，所有最终呈现出来的样式，皆由用户自愿选择使用，未经许可，任何团体和个人，请不要擅自修改样式或者盗用，这是对于用户选择权的尊重。--><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:fs="http://www.feedsky.com/namespace/feed" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><atom:link href="http://feed.feedsky.com/alang" type="application/rss+xml" rel="self"></atom:link><fs:self_link href="http://feed.feedsky.com/alang" type="application/rss+xml"></fs:self_link><lastBuildDate>Mon, 13 Feb 2006 02:01:00 GMT</lastBuildDate><title>郎啊郎，别太忙</title><description>阿郎的春秋演义</description><link>http://blog.donews.com/alang</link><sy:updatePeriod>hourly</sy:updatePeriod><sy:updateFrequency>1</sy:updateFrequency><language>en</language><pubDate>Mon, 13 Feb 2006 02:01:00 GMT</pubDate><item><title>个人四金的计算方法</title><link>http://blog.donews.com/alang/archive/2006/02/13/724315.aspx</link><content:encoded>&lt;p&gt;&lt;P&gt;个人四金在工资中的构成：（假如工资600元/月）&lt;BR&gt;养老保险金＝工资×6% + 工资×25.5% =600×6%+600×25.5%=36+153=189&lt;BR&gt;医疗保险金＝工资×1% + 工资×5.5% =600×1%+600×5.5%=6+33=39&lt;BR&gt;失业保险金＝工资×1% + 工资×1% =600×1%+600×1%=6+6=12&lt;BR&gt;住房公积金＝工资×7% + 工资×7% =600×7%+600×7%=42+42=84&lt;BR&gt;除去四金后的工资＝工资－所有的个人交纳相加的和 &lt;/P&gt;&lt;br /&gt;
&lt;P&gt;            个人交纳比例 单位交纳比例 &lt;BR&gt;养老金        6%           25.5% &lt;BR&gt;失业保险金   1%              1% &lt;BR&gt;医疗保险金   1%              5.5% &lt;BR&gt;住房公积金   7%               7% &lt;/P&gt;&lt;/p&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/alang/328216014/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/alang/328216014/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://blog.donews.com/alang/archive/2006/02/13/724315.aspx/feed</wfw:commentRss><slash:comments>0</slash:comments><description>个人四金在工资中的构成：（假如工资600元/月）养老保险金＝工资×6% + 工资×25.5% =600×6%+600×25.5%=36+153=189医疗保险金＝工资×1% + 工资×5.5% =600×1%+600×5.5%=6+33=39失业保险金＝工资×1% + 工资×1% =600×1%+600×1%=6+6=12住房公积金＝工资×7% + 工资×7% =600×7%+600×7%=42+42=84除去四金后的工资＝工资－所有的个人交纳相加的和 
            个人交纳比例 单位交纳比例 养老金        6%           25.5% 失业保险金   1%              1% 医疗保险金   1%              5.5% 住房公积金   7%               7%&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/alang/328216014/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/alang/328216014/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>未分类</category><pubDate>Mon, 13 Feb 2006 10:01:00 +0800</pubDate><author>alang</author><comments>http://blog.donews.com/alang/archive/2006/02/13/724315.aspx#comments</comments><guid isPermaLink="false">http://blog.donews.com/alang/archive/2006/02/13/724315.aspx</guid><dc:creator>alang</dc:creator><fs:srclink>http://blog.donews.com/alang/archive/2006/02/13/724315.aspx</fs:srclink><fs:srcfeed>http://blog.donews.com/alang/Rss.aspx</fs:srcfeed><fs:itemid>feedsky/alang/~1223822/328216014/1225657</fs:itemid></item><item><title>一套值预验证控件，是解决常见bug的有效办法</title><link>http://blog.donews.com/alang/archive/2006/01/19/700969.aspx</link><content:encoded>&lt;p&gt;今天看到了博客园的这篇文章：&lt;a target=&quot;_blank&quot; href=&quot;http://dahuzizyd.cnblogs.com/archive/2006/01/18/319720.html&quot;&gt;细节－质量－态度&lt;/a&gt;&lt;br/&gt;摘一段如下：&lt;br/&gt;
&lt;pre style=&quot;font-family: Courier New; margin-left: 40px;&quot;&gt;&lt;font size=&quot;2&quot;&gt;来看看一个&lt;span lang=&quot;EN-US&quot; style=&quot;&quot;&gt;TextBox&lt;/span&gt;可能涉及到的测试项，下面所列出的测试项，在实际项目中数目还会有更多，有几条也可以合为一个&lt;br/&gt;，但一般的项目都会涉及到：&lt;/font&gt;&lt;/pre&gt;
&lt;pre style=&quot;font-family: Courier New; margin-left: 40px;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;&quot;&gt;1.&lt;span style=&quot;font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;是否必输&lt;/font&gt;&lt;/pre&gt;
&lt;pre style=&quot;font-family: Courier New; margin-left: 40px;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;&quot;&gt;2.&lt;span style=&quot;font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;输入长度限制是否正确&lt;/font&gt;&lt;/pre&gt;
&lt;pre style=&quot;font-family: Courier New; margin-left: 40px;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;&quot;&gt;3.&lt;span style=&quot;font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;特殊输入类型的检查是否正确&lt;/font&gt;&lt;/pre&gt;
&lt;pre style=&quot;font-family: Courier New; margin-left: 40px;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; l&lt;span style=&quot;font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;数字&lt;span lang=&quot;ZH-CN&quot; style=&quot;&quot;&gt; &lt;/span&gt;：位数正确吗？&lt;/font&gt;&lt;/pre&gt;
&lt;pre style=&quot;font-family: Courier New; margin-left: 40px;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; l&lt;span style=&quot;font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;&quot;&gt;Email&lt;/span&gt;：是否有效&lt;/font&gt;&lt;/pre&gt;
&lt;pre style=&quot;font-family: Courier New; margin-left: 40px;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; l&lt;span style=&quot;font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;货币：小数位，四舍五入正确吗？货币类型？&lt;/font&gt;&lt;/pre&gt;
&lt;pre style=&quot;font-family: Courier New; margin-left: 40px;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; l&lt;span style=&quot;font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;电话：格式化正确吗？&lt;/font&gt;&lt;/pre&gt;
&lt;pre style=&quot;font-family: Courier New; margin-left: 40px;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; l&lt;span style=&quot;font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;小数：小数位数正确吗？&lt;/font&gt;&lt;/pre&gt;
&lt;pre style=&quot;font-family: Courier New; margin-left: 40px;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&amp;nbsp;&amp;nbsp; l&lt;span style=&quot;font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;名字：如果是老外的名字，首字母大写&lt;/font&gt;&lt;/pre&gt;
&lt;pre style=&quot;font-family: Courier New; margin-left: 40px;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;&quot;&gt;4.&lt;span style=&quot;font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;&quot;&gt;Tab&lt;/span&gt;键顺序正确吗？&lt;/font&gt;&lt;/pre&gt;
&lt;pre style=&quot;font-family: Courier New; margin-left: 40px;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;&quot;&gt;5.&lt;span style=&quot;font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;颜色表示正确吗？（有可能分为必输项，非必输项&lt;span lang=&quot;EN-US&quot; style=&quot;&quot;&gt;,&lt;/span&gt;当前输入项）&lt;/font&gt;&lt;/pre&gt;
&lt;pre style=&quot;font-family: Courier New; margin-left: 40px;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;&quot;&gt;6.&lt;span style=&quot;font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;文本框长度和数据库中长度对应吗？&lt;/font&gt;&lt;/pre&gt;
&lt;pre style=&quot;font-family: Courier New; margin-left: 40px;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;&quot;&gt;7.&lt;span style=&quot;font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;输入的长度不足时是否自动补位？&lt;/font&gt;&lt;/pre&gt;
&lt;pre style=&quot;font-family: Courier New; margin-left: 40px;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;&quot;&gt;8.&lt;span style=&quot;font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;初始化时焦点的设置正确吗？&lt;/font&gt;&lt;/pre&gt;
&lt;pre style=&quot;font-family: Courier New; margin-left: 40px;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;&quot;&gt;9.&lt;span style=&quot;font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;初始化时&lt;span lang=&quot;EN-US&quot; style=&quot;&quot;&gt;Enable&lt;/span&gt;属性设置正确吗？&lt;/font&gt;&lt;/pre&gt;
&lt;pre style=&quot;font-family: Courier New; margin-left: 40px;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;&quot;&gt;10.&lt;span style=&quot;font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;&quot;&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;初始化时的内容正确吗？&lt;/font&gt;&lt;/pre&gt;
&lt;pre style=&quot;font-family: Courier New; margin-left: 40px;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;&quot;&gt;11.&lt;span style=&quot;font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;&quot;&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;当界面上进行其他操作时，文本的&lt;span lang=&quot;EN-US&quot; style=&quot;&quot;&gt;Enable&lt;/span&gt;属性设置&lt;/font&gt;&lt;/pre&gt;
&lt;pre style=&quot;font-family: Courier New; margin-left: 40px;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;&quot;&gt;12.&lt;span style=&quot;font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;&quot;&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;文本框命名&lt;/font&gt;&lt;/pre&gt;
&lt;pre style=&quot;font-family: Courier New; margin-left: 40px;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;&quot;&gt;13.&lt;span style=&quot;font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;&quot;&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;如果有回车替换&lt;span lang=&quot;EN-US&quot; style=&quot;&quot;&gt;Tab&lt;/span&gt;，是否正确&lt;/font&gt;&lt;/pre&gt;
&lt;pre style=&quot;font-family: Courier New; margin-left: 40px;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;&quot;&gt;14.&lt;span style=&quot;font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;&quot;&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;是否可以多行&lt;/font&gt;&lt;/pre&gt;
&lt;pre style=&quot;font-family: Courier New; margin-left: 40px;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;&quot;&gt;15.&lt;span style=&quot;font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;&quot;&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;字体设置正确吗？&lt;/font&gt;&lt;/pre&gt;
&lt;pre style=&quot;font-family: Courier New; margin-left: 40px;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;&quot;&gt;16.&lt;span style=&quot;font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;&quot;&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;取&lt;span lang=&quot;EN-US&quot; style=&quot;&quot;&gt;Text&lt;/span&gt;属性时对空格的控制（&lt;span lang=&quot;EN-US&quot; style=&quot;&quot;&gt;Trim&lt;/span&gt;）正确吗？&lt;br/&gt;&lt;br/&gt;&lt;/font&gt;&lt;span lang=&quot;ZH-CN&quot; style=&quot;font-family: SimSun;&quot;&gt;但是大家可以算算这样一个界面，只有&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;&quot;&gt;5&lt;/span&gt;&lt;span lang=&quot;ZH-CN&quot; style=&quot;font-family: SimSun;&quot;&gt;个&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;&quot;&gt;TextBox&lt;/span&gt;&lt;span lang=&quot;ZH-CN&quot; style=&quot;font-family: SimSun;&quot;&gt;，但是在&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;&quot;&gt;TextBox&lt;/span&gt;&lt;span lang=&quot;ZH-CN&quot; style=&quot;font-family: SimSun;&quot;&gt;处理上隐含了多少个&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;&quot;&gt;bug&lt;/span&gt;&lt;span lang=&quot;ZH-CN&quot; style=&quot;font-family: SimSun;&quot;&gt;，&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;&quot;&gt;50&lt;/span&gt;&lt;span lang=&quot;ZH-CN&quot; style=&quot;font-family: SimSun;&quot;&gt;个？太多了，取一半，&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;&quot;&gt;25&lt;/span&gt;&lt;span lang=&quot;ZH-CN&quot; style=&quot;font-family: SimSun;&quot;&gt;个。&lt;br/&gt;现在把添，删，查，改加上，再算算，这样一个简单的单表维护界面上就隐含了多少个&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;&quot;&gt;bug&lt;/span&gt;&lt;span lang=&quot;ZH-CN&quot; style=&quot;font-family: SimSun;&quot;&gt;，保守点也&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;&quot;&gt;30&lt;/span&gt;&lt;span lang=&quot;ZH-CN&quot; style=&quot;font-family: SimSun;&quot;&gt;个！要达到&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;&quot;&gt;50&lt;/span&gt;&lt;span lang=&quot;ZH-CN&quot; style=&quot;font-family: SimSun;&quot;&gt;也不是没有可能的。&lt;br/&gt;如果我们再加上一些其他的&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;&quot;&gt;CheckBox&lt;/span&gt;&lt;span lang=&quot;ZH-CN&quot; style=&quot;font-family: SimSun;&quot;&gt;，&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;&quot;&gt;ComboBox&lt;/span&gt;&lt;span lang=&quot;ZH-CN&quot; style=&quot;font-family: SimSun;&quot;&gt;，&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;&quot;&gt;ListBox&lt;/span&gt;&lt;span lang=&quot;ZH-CN&quot; style=&quot;font-family: SimSun;&quot;&gt;什么的，编辑查看附件，发送什么的附加功能，测试点会膨胀到什么程度？&lt;br/&gt;&lt;/span&gt;&lt;span lang=&quot;ZH-CN&quot; style=&quot;font-family: SimSun;&quot;&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;这个问题在数据库操作的企业应用软件中特别普遍。我们的软件在开始阶段出现的也大多是这类问题。如果有一个问题没有测试出来而在用户那里出现了，这时程序员会推卸责任，测试人员觉得冤枉，总之这种低级错误让人不爽。&lt;/p&gt;
&lt;p&gt;问题在哪呢？是在于对细节的态度吗？&lt;/p&gt;
&lt;p&gt;关于细节的重性，我们已经非常重视了。但人总有疏忽的时候，不能指望一个人总是不犯错。&lt;/p&gt;
&lt;p&gt;问题在于没有一个良好的机制，一个注重细节检查的机制。让自动化的、预先检查的机制，来代替成本非常之高的人工检查。&lt;/p&gt;
&lt;p&gt;一个很好的、行之有效的解决办法，就是&amp;ldquo;验证控件&amp;rdquo;。把原来程序员要单独的、一个一个去检查的控件，封装成一套完整的、带验证方法的控件，把保贵的程序员的精力解放出来。&lt;/p&gt;
&lt;p&gt;比如，我们可以做字符串控件，有个最长值的属性；可以做数值控件，只能录入数值，这样程序员取得的值直接是数值而不用再手工转换；数值控件也有很多种，整数的，小数的等等；email控件、phone控件、日期控件等等。&lt;/p&gt;
&lt;p&gt;做控件的时间是可控的、很少的；而在有繁杂界面的企业应用中，一套这样的控件可以节省的测试人工成本、避免出错的带来的经济损失是非常有用的，收益是永久的。一套控件可以用在其它的案例中，收益更是长久的。&lt;/p&gt;
&lt;p&gt;我看到过的一些web framework，无不把控件的值校验功能放在核心层面，这样做也已经证明是非常成功的。哪些？Ruby on Rails!TurboGears!Java下的一些大的筐架。&lt;/p&gt;
&lt;p&gt;.Net下面为什么没有？等着你自己来做呢。微软可没有这个经验。看了原文后面的评论，感觉还是有很多还没有意识这个问题的根本。还在争论什么面向对象编程、面向过程编程，希望多&amp;ldquo;想些实际问题，少谈些主义&amp;rdquo;。能解决问题的方法，就是好方法。&lt;/p&gt;
&lt;p&gt;再补充一点：不能把所有的事情都丢给测试 人员。测试人员的时间、精力也一样是有限的，测试本身也不是万能的。如果软件质量不好，统统怪测试人员，那样一方面解决不了根本问题，程序员该犯的错还是会继续犯；一方面还会在公司内部造成测试与开发的对立，测试永远低开发一等，这样不利于良好的团队合作精神的养成。&lt;/p&gt;
&lt;p&gt;我是项目经理，我一向的观点是，不能把保证软件质量的担子全部落到最后测试的身上。软件质量的责任是整个小组中每一个人都应该承担的，每一个环节都应该重视的。&lt;br type=&quot;_moz&quot;/&gt;&lt;/p&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/alang/328216015/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/alang/328216015/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://blog.donews.com/alang/archive/2006/01/19/700969.aspx/feed</wfw:commentRss><slash:comments>0</slash:comments><description>今天看到了博客园的这篇文章：&lt;a target=&quot;_blank&quot; href=&quot;http://dahuzizyd.cnblogs.com/archive/2006/01/18/319720.html&quot;&gt;细节－质量－态度&lt;/a&gt;&lt;br/&gt;摘一段如下：&lt;br/&gt;&lt;pre style=&quot;font-family: Courier New; margin-left: 40px;&quot;&gt;&lt;font size=&quot;2&quot;&gt;来看看一个&lt;span lang=&quot;EN-US&quot; style=&quot;&quot;&gt;TextBox&lt;/span&gt;可能涉及到的测试项，下面所列出的测试项，在实际项目中数目还会有更多，有几条也可以合为一个&lt;br/&gt;，但一般的项目都会涉及到：&lt;/font&gt;&lt;/pre&gt;&lt;pre style=&quot;font-family: Courier New; margin-left: 40px;&quot;&gt;&lt;font size=&quot;2&quot;&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;&quot;&gt;1.&lt;span style=&quot;font-style: normal; font-variant: normal; font-weight: normal&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/alang/328216015/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/alang/328216015/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>管理</category><pubDate>Thu, 19 Jan 2006 09:50:00 +0800</pubDate><author>alang</author><comments>http://blog.donews.com/alang/archive/2006/01/19/700969.aspx#comments</comments><guid isPermaLink="false">http://blog.donews.com/alang/archive/2006/01/19/700969.aspx</guid><dc:creator>alang</dc:creator><fs:srclink>http://blog.donews.com/alang/archive/2006/01/19/700969.aspx</fs:srclink><fs:srcfeed>http://blog.donews.com/alang/Rss.aspx</fs:srcfeed><fs:itemid>feedsky/alang/~1223822/328216015/1225657</fs:itemid></item><item><title>大腕web2.0</title><link>http://blog.donews.com/alang/archive/2006/01/18/700462.aspx</link><content:encoded>&lt;p&gt;&lt;P&gt;从&lt;A href='http://blog.360.yahoo.com/blog-NKh9rTIyc6OutMYtzjsD&quot; target=&quot;_blank'&gt;车东&lt;/A&gt;这儿看到的：&lt;/P&gt;&lt;br /&gt;
&lt;P&gt;一定得选最好的托管中心&lt;BR&gt;全套Cisco的网络设备加SUN的服务器&lt;BR&gt;建就建最酷的用户体验&lt;BR&gt;免费注册帐户&lt;BR&gt;每个帐户存储空间最少也得两个G&lt;BR&gt;什么AJAX呀、Tag呀、Rss呀&lt;BR&gt;能给他整地全部给他整上&lt;BR&gt;社区附带一个VIP区，有牛人7&amp;#215;24小时蹲点帮你解惑&lt;BR&gt;Blog上常驻一个叫Keso的家伙&lt;BR&gt;留小辫儿，特大牛的那种&lt;BR&gt;只要一打开页面，甭管有事没事都得用Skype跟人家说&lt;BR&gt;“你丫赶紧给我注册！”&lt;BR&gt;一口地道的京片子&lt;BR&gt;倍儿有面子&lt;BR&gt;网站里还要建一个wiki系统&lt;BR&gt;全部翻译自维基百科&lt;BR&gt;每天翻译量起码百兆计算吧&lt;BR&gt;再建一个站内搜索&lt;BR&gt;支持所有内容全文检索&lt;BR&gt;文本呀、RSS呀、Blog呀，你要搜什么我给你找出什么&lt;BR&gt;就是一个字——快&lt;BR&gt;全站搜一次才用0.00001秒&lt;BR&gt;在这里注册用户的不是CEO就是网络精英&lt;BR&gt;你要是分不清Blog和WebLog&lt;BR&gt;你都不好意思去TrackBack人家&lt;BR&gt;你说这样的网站，VC会投多少？&lt;BR&gt;我觉得怎么着也得两千万美金吧？&lt;BR&gt;两千万美金？那是成本&lt;BR&gt;四千万美金起&lt;BR&gt;你别嫌贵，我还挑东家呢&lt;BR&gt;你得研究VC的投资心理&lt;BR&gt;能掏起两千万的主儿&lt;BR&gt;根本不在乎再掏两千万&lt;BR&gt;什么叫Blogger，你知道吗？&lt;BR&gt;Blogger挑服务商都用最2.0的，不用最好的&lt;BR&gt;所以，我们做web2.0的口号就是：&lt;BR&gt;不求最好，但求最2！&lt;/P&gt;&lt;/p&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/alang/328216016/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/alang/328216016/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://blog.donews.com/alang/archive/2006/01/18/700462.aspx/feed</wfw:commentRss><slash:comments>0</slash:comments><description>从车东这儿看到的：
一定得选最好的托管中心全套Cisco的网络设备加SUN的服务器建就建最酷的用户体验免费注册帐户每个帐户存储空间最少也得两个G什么AJAX呀、Tag呀、Rss呀能给他整地全部给他整上社区附带一个VIP区，有牛人7x24小时蹲点帮你解惑Blog上常驻一个叫Keso的家伙留小辫儿，特大牛的那种只要一打开页面，甭管有事没事都得用Skype跟人家说“你丫赶紧给我注册！”一口地道的京片子倍儿有面子网站里还要建一个wiki系统全部翻译自维基百科每天翻译量起码百兆计算吧再建一个站内搜索支持所有内容全文检索文本呀、RSS呀、Blog呀，你要搜什么我给你找出什么就是一个字——快全站搜一次才用0.00001秒在这里注册用户的不是CEO就是网络精英你要是分不清Blog和WebLog你都不好意思去TrackBack人家你说这样的网站，VC会投多少？我觉得怎么着也得两千万美金吧？两千万美金？那是成本四千万美金起你别嫌贵，我还挑东家呢你得研究VC的投资心理能掏起两千万的主儿根本不在乎再掏两千万什么叫Blogger，你知道吗？Blogger挑服务商都用最2.0的，不用最好的所以，我们做web2.&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/alang/328216016/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/alang/328216016/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>综合</category><pubDate>Wed, 18 Jan 2006 20:45:00 +0800</pubDate><author>alang</author><comments>http://blog.donews.com/alang/archive/2006/01/18/700462.aspx#comments</comments><guid isPermaLink="false">http://blog.donews.com/alang/archive/2006/01/18/700462.aspx</guid><dc:creator>alang</dc:creator><fs:srclink>http://blog.donews.com/alang/archive/2006/01/18/700462.aspx</fs:srclink><fs:srcfeed>http://blog.donews.com/alang/Rss.aspx</fs:srcfeed><fs:itemid>feedsky/alang/~1223822/328216016/1225657</fs:itemid></item><item><title>别人笑我太疯癫，我笑他人看不穿</title><link>http://blog.donews.com/alang/archive/2006/01/18/700458.aspx</link><content:encoded>&lt;p&gt;&lt;P&gt;桃花坞里桃花庵，桃花庵下桃花仙。&lt;BR&gt;桃花仙人种桃树，又摘桃花换酒钱。&lt;BR&gt;酒醒只在花前坐，酒醉还来花下眠。&lt;BR&gt;半醉半醒日复日，花落花开年复年。&lt;BR&gt;但愿老死花酒间，不愿鞠躬车马前。&lt;BR&gt;车尘马足显者事，酒盏花枝隐士缘。&lt;BR&gt;若将显者比隐士，一在平地一在天。&lt;BR&gt;若将花酒比车马，彼何碌碌我何闲。&lt;BR&gt;别人笑我太疯癫，我笑他人看不穿。&lt;BR&gt;不见五陵豪杰墓，无花无酒锄作田。 &lt;/P&gt;&lt;br /&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;br /&gt;
&lt;P&gt;从这个&lt;A href='tingxs.com&quot; target=&quot;_blank'&gt;听相声&lt;/A&gt;的QQ群里看到的。以前老记不全。&lt;/P&gt;&lt;br /&gt;
&lt;P&gt;一群喜欢相声的人在里玩得可欢了。群号：207184309&lt;BR&gt;&lt;/P&gt;&lt;/p&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/alang/328216017/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/alang/328216017/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://blog.donews.com/alang/archive/2006/01/18/700458.aspx/feed</wfw:commentRss><slash:comments>1</slash:comments><description>桃花坞里桃花庵，桃花庵下桃花仙。桃花仙人种桃树，又摘桃花换酒钱。酒醒只在花前坐，酒醉还来花下眠。半醉半醒日复日，花落花开年复年。但愿老死花酒间，不愿鞠躬车马前。车尘马足显者事，酒盏花枝隐士缘。若将显者比隐士，一在平地一在天。若将花酒比车马，彼何碌碌我何闲。别人笑我太疯癫，我笑他人看不穿。不见五陵豪杰墓，无花无酒锄作田。 
&amp;#160;
从这个听相声的QQ群里看到的。以前老记不全。
一群喜欢相声的人在里玩得可欢了。群号：207184309&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/alang/328216017/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/alang/328216017/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>综合</category><pubDate>Wed, 18 Jan 2006 20:38:00 +0800</pubDate><author>alang</author><comments>http://blog.donews.com/alang/archive/2006/01/18/700458.aspx#comments</comments><guid isPermaLink="false">http://blog.donews.com/alang/archive/2006/01/18/700458.aspx</guid><dc:creator>alang</dc:creator><fs:srclink>http://blog.donews.com/alang/archive/2006/01/18/700458.aspx</fs:srclink><fs:srcfeed>http://blog.donews.com/alang/Rss.aspx</fs:srcfeed><fs:itemid>feedsky/alang/~1223822/328216017/1225657</fs:itemid></item><item><title>忆CoDelphi、韩磊及大鱼儿</title><link>http://blog.donews.com/alang/archive/2006/01/18/700446.aspx</link><content:encoded>&lt;p&gt;&lt;P&gt;&lt;STRONG&gt;走过了delphibbs, &lt;BR&gt;走过了codelphi &lt;BR&gt;走过了csdn &lt;/STRONG&gt;&lt;/P&gt;&lt;br /&gt;
&lt;P&gt;&lt;STRONG&gt;也走过了delphi/C++ builder &lt;BR&gt;走过了Borland &lt;BR&gt;身边的人们纷纷走向了不同的地方 &lt;/STRONG&gt;&lt;/P&gt;&lt;br /&gt;
&lt;P&gt;&lt;STRONG&gt;身后 &lt;BR&gt;小草繁茂 &lt;BR&gt;绿树荫荫 &lt;BR&gt;凡花点点&lt;/STRONG&gt;&lt;/P&gt;&lt;br /&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;/STRONG&gt;&amp;nbsp;&lt;/P&gt;&lt;br /&gt;
&lt;P&gt;我诌了点了上面的东西。也算是曾经的一段岁月的回忆吧。&lt;/P&gt;&lt;br /&gt;
&lt;P&gt;写于韩磊在&lt;A href='http://blog.hanlei.name/archive/2006/01/07/6129.aspx&quot; target=&quot;_blank'&gt;忆CoDelphi&lt;/A&gt;一文的尾巴后面。不过，不小心把自己的&lt;A href='http://blog.donews.com/alang&quot; target=&quot;_blank'&gt;blog&lt;/A&gt;地址写错了。&lt;/P&gt;&lt;br /&gt;
&lt;P&gt;其中谈到了&lt;A href='http://blog.dayuer.com/&quot; target=&quot;_blank'&gt;大鱼儿&lt;/A&gt;，我记得这家伙是在搞codelphi.net的blog系统时知道的，那时也用的是.Text的系统，还和&lt;A href='http://blog.joycode.com/&quot; target=&quot;_blank'&gt;博客堂&lt;/A&gt;的&lt;A href='http://blog.joycode.com/joy/&quot; target=&quot;_blank'&gt;开心就好&lt;/A&gt;为了汉化版.Text抄袭问题打过嘴架，&lt;A href='http://blog.dayuer.com/index.php/2006/01/17/37.html/trackback/&quot; target=&quot;_blank'&gt;现在还不忘记寒开心MVP一把&lt;/A&gt;（”至于所谓的MVP，那是什么玩意？”）。&lt;/P&gt;&lt;br /&gt;
&lt;P&gt;咳，都是&lt;STRONG&gt;曾经年少&lt;/STRONG&gt;啊！&lt;/P&gt;&lt;/p&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/alang/328216018/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/alang/328216018/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://blog.donews.com/alang/archive/2006/01/18/700446.aspx/feed</wfw:commentRss><slash:comments>1</slash:comments><description>走过了delphibbs, 走过了codelphi 走过了csdn 
也走过了delphi/C++ builder 走过了Borland 身边的人们纷纷走向了不同的地方 
身后 小草繁茂 绿树荫荫 凡花点点
&amp;#160;
我诌了点了上面的东西。也算是曾经的一段岁月的回忆吧。
写于韩磊在忆CoDelphi一文的尾巴后面。不过，不小心把自己的blog地址写错了。
其中谈到了大鱼儿，我记得这家伙是在搞codelphi.net的blog系统时知道的，那时也用的是.Text的系统，还和博客堂的开心就好为了汉化版.Text抄袭问题打过嘴架，现在还不忘记寒开心MVP一把（”至于所谓的MVP，那是什么玩意？”）。
咳，都是曾经年少啊！&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/alang/328216018/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/alang/328216018/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>综合</category><pubDate>Wed, 18 Jan 2006 20:28:00 +0800</pubDate><author>alang</author><comments>http://blog.donews.com/alang/archive/2006/01/18/700446.aspx#comments</comments><guid isPermaLink="false">http://blog.donews.com/alang/archive/2006/01/18/700446.aspx</guid><dc:creator>alang</dc:creator><fs:srclink>http://blog.donews.com/alang/archive/2006/01/18/700446.aspx</fs:srclink><fs:srcfeed>http://blog.donews.com/alang/Rss.aspx</fs:srcfeed><fs:itemid>feedsky/alang/~1223822/328216018/1225657</fs:itemid></item><item><title>土法搞定easy_install的egg</title><link>http://blog.donews.com/alang/archive/2006/01/18/700315.aspx</link><content:encoded>&lt;p&gt;&lt;P&gt;几天以来，&lt;A title=CherryPy href=&quot;http://cherrypy.org/&quot;&gt;CherryPy&lt;/A&gt;的2.2.0beta一直在更新，但是&lt;A title=&quot;Kevin Dangoor&quot; href=&quot;http://www.blueskyonmars.com/&quot;&gt;Kevin Dangoor&lt;/A&gt;一直没有出新的egg版本，ez_setup.py又不会自动装上2.2的，所以新的&lt;A title=TurboGears href=&quot;http://www.turbogears.com&quot;&gt;TurboGears&lt;/A&gt;总是用不了。&lt;/P&gt;&lt;br /&gt;
&lt;P&gt;今年下午有点空，想继续做自己的todo小项目，就想着自己build它的egg。&lt;/P&gt;&lt;br /&gt;
&lt;P&gt;看了install_tools的文档，还是没有看明白，我觉着写得就不算很清楚。那个build的命令就是不成功。&lt;/P&gt;&lt;br /&gt;
&lt;P&gt;后来在CherryPy的svn目录下面，看到了一个make-sdist文件，没有扩展，凭直觉应该是一个linux下的脚本，打开看了一下：&lt;/P&gt;&lt;br /&gt;
&lt;P&gt;&lt;FONT style=&quot;BACKGROUND-COLOR: #ffff00&quot;&gt;rm MANIFEST&lt;BR&gt;python setup.py sdist &amp;#8211;formats=gztar&lt;/FONT&gt; &lt;/P&gt;&lt;br /&gt;
&lt;P&gt;&lt;FONT style=&quot;BACKGROUND-COLOR: #ffffff&quot;&gt;这个&lt;FONT style=&quot;BACKGROUND-COLOR: #ffff00&quot;&gt;python setup.py sdist &amp;#8211;formats=gztar&lt;/FONT&gt; 会不会可以用呢？&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;
&lt;P&gt;试了一下，真的开始了打包。不过，最后却没有成功，为什么？提示说没有tar这个程序。原来如此。我手工把压缩成zip包，再改成egg后缀。&lt;/P&gt;&lt;br /&gt;
&lt;P&gt;easy_install XX.egg一通安装，没有报错。不会这么简单吧？&lt;/P&gt;&lt;br /&gt;
&lt;P&gt;打开安装之后的文件夹一看。果然问题多多。除了目录又包了一层外，少了一个egg-info的目录，包信息不对头。没有关系，对照着cherrypy.2.1.1.egg的目录改。&lt;/P&gt;&lt;br /&gt;
&lt;OL&gt;&lt;br /&gt;
&lt;LI&gt;先把老的egg-info目录完全复制过来，再拷贝新的PKG-INFO文件过来替换老了，就是这个文件里面写着重要的版本信息。其它的文件没有关系。&lt;br /&gt;
&lt;LI&gt;再把包了一层的cherrypy模块目录移上层，也就是移出来。&lt;br /&gt;
&lt;LI&gt;最后，删除不必要的目录。&lt;/LI&gt;&lt;/OL&gt;&lt;br /&gt;
&lt;P&gt;不放心的话，到easy-install.pth文件中检查一下注册的入口是不是这样的：&lt;/P&gt;&lt;br /&gt;
&lt;P&gt;&lt;FONT color=#8000ff&gt;c:\python24\lib\site-packages\cherrypy-2.2.0beta.egg&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;
&lt;P&gt;再运行我的todo，一切正常。&lt;/P&gt;&lt;br /&gt;
&lt;P&gt;不过这是土法。正当的法子是什么，我还是不清楚。文档里面没有讲清楚。&lt;BR&gt;&lt;/P&gt;&lt;/p&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/alang/328216019/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/alang/328216019/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://blog.donews.com/alang/archive/2006/01/18/700315.aspx/feed</wfw:commentRss><slash:comments>0</slash:comments><description>几天以来，CherryPy的2.2.0beta一直在更新，但是Kevin Dangoor一直没有出新的egg版本，ez_setup.py又不会自动装上2.2的，所以新的TurboGears总是用不了。
今年下午有点空，想继续做自己的todo小项目，就想着自己build它的egg。
看了install_tools的文档，还是没有看明白，我觉着写得就不算很清楚。那个build的命令就是不成功。
后来在CherryPy的svn目录下面，看到了一个make-sdist文件，没有扩展，凭直觉应该是一个linux下的脚本，打开看了一下：
rm MANIFESTpython setup.py sdist --formats=gztar 
这个python setup.py sdist --formats=gztar 会不会可以用呢？
试了一下，真的开始了打包。不过，最后却没有成功，为什么？提示说没有tar这个程序。原来如此。我手工把压缩成zip包，再改成egg后缀。
easy_install XX.egg一通安装，没有报错。不会这么简单吧？
打开安装之后的文件夹一看。果然问题多多。除&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/alang/328216019/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/alang/328216019/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>开源</category><pubDate>Wed, 18 Jan 2006 18:12:00 +0800</pubDate><author>alang</author><comments>http://blog.donews.com/alang/archive/2006/01/18/700315.aspx#comments</comments><guid isPermaLink="false">http://blog.donews.com/alang/archive/2006/01/18/700315.aspx</guid><dc:creator>alang</dc:creator><fs:srclink>http://blog.donews.com/alang/archive/2006/01/18/700315.aspx</fs:srclink><fs:srcfeed>http://blog.donews.com/alang/Rss.aspx</fs:srcfeed><fs:itemid>feedsky/alang/~1223822/328216019/1225657</fs:itemid></item><item><title>一个没有权限管理的业务系统，只能是一个玩具</title><link>http://blog.donews.com/alang/archive/2006/01/18/700276.aspx</link><content:encoded>&lt;p&gt;&lt;P&gt;实际的业务系统是一个动态的系统，会有动态的人员、岗位设置，是根本不可能用脚本解决的。&lt;/P&gt;&lt;br /&gt;
&lt;P&gt;一开始根本就没有考虑到这一块的问题。现在发现在脚本中根本无法定义权限。并且权限根本是不可以在脚本中定义的。&lt;/P&gt;&lt;br /&gt;
&lt;P&gt;在一开始的设计中，就要考虑到权限。实现上并不高深，最简单的令牌机制就可以解决了。调用某功能时，先检查一下有没有此令牌。给权限的过程，就是一个给令牌的过程。&lt;/P&gt;&lt;br /&gt;
&lt;P&gt;以前的那个系统的权限功能，真叫一个烂字！后来基本上推翻了又重写。这个“平台”估计是一样的命运，一定会返工作大幅的修改的。&lt;/P&gt;&lt;br /&gt;
&lt;P&gt;光是实现一个O/R map机制，一个UI，再一个弱弱的工作流系统，就做了2年半。&lt;/P&gt;&lt;br /&gt;
&lt;P&gt;NND说了N年的分层，现在才想到必须要做。一帮撞了墙才知道路子不对的人。&lt;/P&gt;&lt;br /&gt;
&lt;P&gt;算了，不说了。技术的事不管了，市场销售多跑些。找一些做不了的项目回来，再挑明。现在还不是时候。上面的人都知道是怎么回事，都不愿讲，因为有XX在上面顶着。现在只是把我放在这儿当枪使。&lt;/P&gt;&lt;/p&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/alang/328216020/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/alang/328216020/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://blog.donews.com/alang/archive/2006/01/18/700276.aspx/feed</wfw:commentRss><slash:comments>0</slash:comments><description>实际的业务系统是一个动态的系统，会有动态的人员、岗位设置，是根本不可能用脚本解决的。
一开始根本就没有考虑到这一块的问题。现在发现在脚本中根本无法定义权限。并且权限根本是不可以在脚本中定义的。
在一开始的设计中，就要考虑到权限。实现上并不高深，最简单的令牌机制就可以解决了。调用某功能时，先检查一下有没有此令牌。给权限的过程，就是一个给令牌的过程。
以前的那个系统的权限功能，真叫一个烂字！后来基本上推翻了又重写。这个“平台”估计是一样的命运，一定会返工作大幅的修改的。
光是实现一个O/R map机制，一个UI，再一个弱弱的工作流系统，就做了2年半。
NND说了N年的分层，现在才想到必须要做。一帮撞了墙才知道路子不对的人。
算了，不说了。技术的事不管了，市场销售多跑些。找一些做不了的项目回来，再挑明。现在还不是时候。上面的人都知道是怎么回事，都不愿讲，因为有XX在上面顶着。现在只是把我放在这儿当枪使。&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/alang/328216020/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/alang/328216020/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>管理</category><pubDate>Wed, 18 Jan 2006 17:43:00 +0800</pubDate><author>alang</author><comments>http://blog.donews.com/alang/archive/2006/01/18/700276.aspx#comments</comments><guid isPermaLink="false">http://blog.donews.com/alang/archive/2006/01/18/700276.aspx</guid><dc:creator>alang</dc:creator><fs:srclink>http://blog.donews.com/alang/archive/2006/01/18/700276.aspx</fs:srclink><fs:srcfeed>http://blog.donews.com/alang/Rss.aspx</fs:srcfeed><fs:itemid>feedsky/alang/~1223822/328216020/1225657</fs:itemid></item><item><title>区别就在于细节</title><link>http://blog.donews.com/alang/archive/2006/01/16/697102.aspx</link><content:encoded>&lt;p&gt;&lt;P&gt;软件开发人员一向有做大而全、赶英超美的习惯，号称我们要做一个比XX软件先进多少的系统，从架构、功能、界面各方面打败它。然后就开始西里华拉的写代码了。&lt;/P&gt;&lt;br /&gt;
&lt;P&gt;做出来了一看，问题多多。最大的问题是，我们做这个系统到底是为了什么？就是为了“超过XX软件”吗？老板钱多的烧得慌。&lt;/P&gt;&lt;br /&gt;
&lt;P&gt;我们的系统要解决什么问题？不知道，XX软件有什么我们就做什么。&lt;/P&gt;&lt;br /&gt;
&lt;P&gt;架构师回答不上来。只是不断的说，在XX功能上，我们要比他们强；在XX功能上，我们很灵活，可以自定义；在XX功能上，现在比他们弱，但是再有半年，一定比它强。。。&lt;/P&gt;&lt;br /&gt;
&lt;P&gt;一切都停留在软件的模仿和抄袭上。而忽略了软件的主体：用户的需求，用户的体验。&lt;/P&gt;&lt;br /&gt;
&lt;P&gt;以这种赶英超美的心态做软件，是做不好的。与XX软件的区别，不在架构，不在技术，不在界面，不在功能，只在用户的使用细节上。&lt;/P&gt;&lt;br /&gt;
&lt;P&gt;我们没有详细的、亲自的分析过用户的需求，不知道用户到底需要什么样的用户体验，甚至软件的设计者自己都不曾经使用过自己写的软件超过一天。所有的需求都是copy过来的，并且走样了。&lt;/P&gt;&lt;br /&gt;
&lt;P&gt;细节，统统被忽略了。就是这点区别，我们与XX软件的差距何止5年？&lt;/P&gt;&lt;br /&gt;
&lt;P&gt;举个实例：我们也有自己做的一堆UI控件，很漂亮，很cool。但是有个细节就没有注意到，数字控件不能输入全角的数字、不会自动的把全角的句号转换成小数点。考虑到我们的用户群都不是电脑使用水平很高的，都是年纪比较大的，全角半角分得不是很清，界面上很多地方要输入汉字，再要输入数字时就要切换。用户一天可能有上百张单据要录入，非常麻烦。&lt;/P&gt;&lt;br /&gt;
&lt;P&gt;这个用户体验有两种办法解决。一种办法是遇山开路，输入的全角数字自动的转成半角的，在全角状态下把打的“。”句号自动转成小数点。&lt;/P&gt;&lt;br /&gt;
&lt;P&gt;还有一个更好的解决办法，微软老早就注意到了，就是在指定的控件上打开、关闭输入法。用过office的用户特别是access的用户应该深有体会，在录入数字的地方，自动把输入法关掉，在录入文字的地方，再把输入法打开。这个用户体验一下子就好起来了。&lt;/P&gt;&lt;br /&gt;
&lt;P&gt;XX软件采用的是第一种办法，也够了。&lt;/P&gt;&lt;br /&gt;
&lt;P&gt;细节非常重要。一定要引起设计者的充分重视。用户眼中的“好用”，不一定就是设计者眼中的“cool”。用户总在说我们的软件不好用，并不是因为什么很了不得的、石破天惊的、神密莫测的原因，原因就在于这些细节，我们没有考虑到。&lt;/P&gt;&lt;/p&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/alang/328216021/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/alang/328216021/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://blog.donews.com/alang/archive/2006/01/16/697102.aspx/feed</wfw:commentRss><slash:comments>0</slash:comments><description>软件开发人员一向有做大而全、赶英超美的习惯，号称我们要做一个比XX软件先进多少的系统，从架构、功能、界面各方面打败它。然后就开始西里华拉的写代码了。
做出来了一看，问题多多。最大的问题是，我们做这个系统到底是为了什么？就是为了“超过XX软件”吗？老板钱多的烧得慌。
我们的系统要解决什么问题？不知道，XX软件有什么我们就做什么。
架构师回答不上来。只是不断的说，在XX功能上，我们要比他们强；在XX功能上，我们很灵活，可以自定义；在XX功能上，现在比他们弱，但是再有半年，一定比它强。。。
一切都停留在软件的模仿和抄袭上。而忽略了软件的主体：用户的需求，用户的体验。
以这种赶英超美的心态做软件，是做不好的。与XX软件的区别，不在架构，不在技术，不在界面，不在功能，只在用户的使用细节上。
我们没有详细的、亲自的分析过用户的需求，不知道用户到底需要什么样的用户体验，甚至软件的设计者自己都不曾经使用过自己写的软件超过一天。所有的需求都是copy过来的，并且走样了。
细节，统统被忽略了。就是这点区别，我们与XX软件的差距何止5年？
举个实例：我们也有自己做的一堆UI控件，很漂亮，很c&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/alang/328216021/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/alang/328216021/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>综合</category><pubDate>Mon, 16 Jan 2006 15:57:00 +0800</pubDate><author>alang</author><comments>http://blog.donews.com/alang/archive/2006/01/16/697102.aspx#comments</comments><guid isPermaLink="false">http://blog.donews.com/alang/archive/2006/01/16/697102.aspx</guid><dc:creator>alang</dc:creator><fs:srclink>http://blog.donews.com/alang/archive/2006/01/16/697102.aspx</fs:srclink><fs:srcfeed>http://blog.donews.com/alang/Rss.aspx</fs:srcfeed><fs:itemid>feedsky/alang/~1223822/328216021/1225657</fs:itemid></item><item><title>过度设计的例子之一</title><link>http://blog.donews.com/alang/archive/2006/01/16/697045.aspx</link><content:encoded>&lt;p&gt;&lt;P&gt;&lt;EM&gt;记下软件开发过程中出现的问题，解决方法，及经验教训。&lt;/EM&gt;&lt;/P&gt;&lt;br /&gt;
&lt;P&gt;&lt;STRONG&gt;动态的树形控件折叠效果&lt;/STRONG&gt;&lt;/P&gt;&lt;br /&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;br /&gt;
&lt;P&gt;有一个自家人做的格子控件，外加一个树，用来操作目录的层级。如果有下一级，那么这一级的最前面就会出现一个+号按钮，点它就会在当前级格子的下面增加格子显示下一级的所有内容。再点这个＋号按钮，就会删除下级格子，只显示上级。&lt;/P&gt;&lt;br /&gt;
&lt;P&gt;&lt;BR&gt;关键就是在这个展开、折叠效果上，他们过度设计，把这个界面动作搞成动态的了，有个动画的展开、折叠效果。这只是其一。&lt;/P&gt;&lt;br /&gt;
&lt;P&gt;&lt;BR&gt;其二，折叠时，会从打开的最下一层开始折叠。比如最下一层是第5层，这时想把它折叠成只显示第一层，这会老大会先折叠第5层，再折叠第4层，再一直下去，直到第一层。&lt;/P&gt;&lt;br /&gt;
&lt;P&gt;&lt;BR&gt;想法太简单直白了，只会一层层搞。并且那个变态的、完全多余的动画效果，加剧了它的可笑程度，如果你先把所有的目录层级全部展开，光标定位到最后一个并且是最下层的记录，再点“全部折叠”按钮，你会看见，动画片开始了：先折叠最后一个记录的，从它的最下层开始折叠，再是倒数第二个，从最下层，再&amp;#8230;.不想再说了。&lt;/P&gt;&lt;br /&gt;
&lt;P&gt;&lt;BR&gt;最有效率的办法就是在内存中直接只显示第一层内容，清空原来的DC，再把新的画上去。结了。搞那么多飞机，一层层的折叠！？还动画？&lt;/P&gt;&lt;br /&gt;
&lt;P&gt;&lt;BR&gt;如果有100个记录，每个下面有5级，这个过程就要持续很长一段时间。界面没有反映，用户在那里只能看动画片。&lt;/P&gt;&lt;br /&gt;
&lt;P&gt;&lt;BR&gt;算是开了眼了，没有见过这么愚蠢的。这个程序员可是有5年经验的C++程序员啊！&lt;/P&gt;&lt;br /&gt;
&lt;P&gt;&lt;BR&gt;总结：再怎么会玩弄技巧程序员，不会高效的解决真正的问题，那这个人也不是一个合格的人。&lt;/P&gt;&lt;/p&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/alang/328216022/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/alang/328216022/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://blog.donews.com/alang/archive/2006/01/16/697045.aspx/feed</wfw:commentRss><slash:comments>0</slash:comments><description>记下软件开发过程中出现的问题，解决方法，及经验教训。
动态的树形控件折叠效果
&amp;#160;
有一个自家人做的格子控件，外加一个树，用来操作目录的层级。如果有下一级，那么这一级的最前面就会出现一个+号按钮，点它就会在当前级格子的下面增加格子显示下一级的所有内容。再点这个＋号按钮，就会删除下级格子，只显示上级。
关键就是在这个展开、折叠效果上，他们过度设计，把这个界面动作搞成动态的了，有个动画的展开、折叠效果。这只是其一。
其二，折叠时，会从打开的最下一层开始折叠。比如最下一层是第5层，这时想把它折叠成只显示第一层，这会老大会先折叠第5层，再折叠第4层，再一直下去，直到第一层。
想法太简单直白了，只会一层层搞。并且那个变态的、完全多余的动画效果，加剧了它的可笑程度，如果你先把所有的目录层级全部展开，光标定位到最后一个并且是最下层的记录，再点“全部折叠”按钮，你会看见，动画片开始了：先折叠最后一个记录的，从它的最下层开始折叠，再是倒数第二个，从最下层，再....不想再说了。
最有效率的办法就是在内存中直接只显示第一层内容，清空原来的DC，再把新的画上去。结了。搞那么多飞机，一层&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/alang/328216022/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/alang/328216022/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>管理</category><pubDate>Mon, 16 Jan 2006 15:05:00 +0800</pubDate><author>alang</author><comments>http://blog.donews.com/alang/archive/2006/01/16/697045.aspx#comments</comments><guid isPermaLink="false">http://blog.donews.com/alang/archive/2006/01/16/697045.aspx</guid><dc:creator>alang</dc:creator><fs:srclink>http://blog.donews.com/alang/archive/2006/01/16/697045.aspx</fs:srclink><fs:srcfeed>http://blog.donews.com/alang/Rss.aspx</fs:srcfeed><fs:itemid>feedsky/alang/~1223822/328216022/1225657</fs:itemid></item><item><title>egoSurf查找自已blog的排名</title><link>http://blog.donews.com/alang/archive/2006/01/12/691941.aspx</link><content:encoded>&lt;p&gt;&lt;P&gt;在&lt;A href=&quot;http://webleon.net/2006/01/egosurf.html&quot;&gt;这里&lt;/A&gt;看到的。&lt;/P&gt;&lt;br /&gt;
&lt;P&gt;&lt;A href=&quot;http://www.egosurf.org&quot;&gt;&lt;EM&gt;egoSurf&lt;/EM&gt;&lt;/A&gt;&lt;EM&gt;就是这样一个简单而又好玩的工具，只要输入你的名字和你 Blog的地址，就可以知道你各个搜索引擎上的名气究竟如何。egoSurf的原理是在搜索引擎中搜索你的名字，然后查找属于你Blog的内容在搜索结果中的排名。egoSurf还支持搜索结果的RSS输出，可以给热衷ego surfing的Blogger一个更方便的途径。&lt;/EM&gt;&lt;/P&gt;&lt;br /&gt;
&lt;P&gt;看了一下，我的pynux排在google的465位。&lt;/P&gt;&lt;br /&gt;
&lt;P&gt;那一段图片链接发不上来。删掉了这篇文章才发成功。&lt;/P&gt;&lt;/p&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/alang/328216023/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/alang/328216023/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://blog.donews.com/alang/archive/2006/01/12/691941.aspx/feed</wfw:commentRss><slash:comments>0</slash:comments><description>在这里看到的。
egoSurf就是这样一个简单而又好玩的工具，只要输入你的名字和你 Blog的地址，就可以知道你各个搜索引擎上的名气究竟如何。egoSurf的原理是在搜索引擎中搜索你的名字，然后查找属于你Blog的内容在搜索结果中的排名。egoSurf还支持搜索结果的RSS输出，可以给热衷ego surfing的Blogger一个更方便的途径。
看了一下，我的pynux排在google的465位。
那一段图片链接发不上来。删掉了这篇文章才发成功。&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/alang/328216023/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/alang/328216023/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>酷闻</category><pubDate>Thu, 12 Jan 2006 12:21:00 +0800</pubDate><author>alang</author><comments>http://blog.donews.com/alang/archive/2006/01/12/691941.aspx#comments</comments><guid isPermaLink="false">http://blog.donews.com/alang/archive/2006/01/12/691941.aspx</guid><dc:creator>alang</dc:creator><fs:srclink>http://blog.donews.com/alang/archive/2006/01/12/691941.aspx</fs:srclink><fs:srcfeed>http://blog.donews.com/alang/Rss.aspx</fs:srcfeed><fs:itemid>feedsky/alang/~1223822/328216023/1225657</fs:itemid></item></channel></rss>