<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>编程</title><link>http://fish.cndev.org/category/17.aspx</link><description>编程</description><managingEditor>Fish</managingEditor><dc:language>zh-CHS</dc:language><generator>.Text Version 0.95.2004.101</generator><item><dc:creator>Fish</dc:creator><title>一个软件故障问题的根源</title><link>http://fish.cndev.org/archive/2008/08/26/59355.aspx</link><pubDate>2008-08-26 14:10:00Z</pubDate><guid>http://fish.cndev.org/archive/2008/08/26/59355.aspx</guid><wfw:comment>http://fish.cndev.org/comments/59355.aspx</wfw:comment><comments>http://fish.cndev.org/archive/2008/08/26/59355.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://fish.cndev.org/comments/commentRss/59355.aspx</wfw:commentRss><trackback:ping>http://fish.cndev.org/services/trackbacks/59355.aspx</trackback:ping><description>&lt;P&gt;前段时间，在上个公司做过的项目的业主反映：系统自从某段&lt;BR&gt;时间以来就出现了问题。&lt;/P&gt;
&lt;P&gt;为这个事，上个公司的老同事和业主先后联系过我几回，有关&lt;BR&gt;日志文件我也看了。主要步骤就是：&lt;BR&gt;1. 省里的软件负责下发参数到中心接口库；&lt;BR&gt;2. 中心的软件负责启用中心接口库的新参数；&lt;BR&gt;3. 中心的软件在启用后负责下发这些新参数；&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;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;BR&gt;于是....终于....就在此时，问题的根源就此被发现了，它就是：&lt;BR&gt;&lt;BR&gt;&lt;FONT color=#ff0000&gt;服务程序的执行文件和参数配置文件一个多月前被人删掉了！&lt;/FONT&gt;&lt;/P&gt;&lt;img src ="http://fish.cndev.org/aggbug/59355.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Fish</dc:creator><title>SQL Server 2000 无法在 Win2003 SP2 中安装！</title><link>http://fish.cndev.org/archive/2008/05/11/58836.aspx</link><pubDate>2008-05-11 20:48:00Z</pubDate><guid>http://fish.cndev.org/archive/2008/05/11/58836.aspx</guid><wfw:comment>http://fish.cndev.org/comments/58836.aspx</wfw:comment><comments>http://fish.cndev.org/archive/2008/05/11/58836.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://fish.cndev.org/comments/commentRss/58836.aspx</wfw:commentRss><trackback:ping>http://fish.cndev.org/services/trackbacks/58836.aspx</trackback:ping><description>&lt;P&gt;这几天一业主反应在他们新装的 Windows 2003 服务器上无法&lt;BR&gt;安装 SQL Server 2000，总是在最后拷完文件后配置时出错，&lt;BR&gt;说无法配置。查看他们发给俺的日志，好像是帐号问题。&lt;/P&gt;
&lt;P&gt;今天在 QQ 上给业主演示，为了更好地说明，俺把俺的测试&lt;BR&gt;机器上的 SQL 卸载了，然后边安装边截图说明情况。&lt;/P&gt;
&lt;P&gt;结果狠尴尬，到后来，发现俺自己也装不上了！出现了跟业&lt;BR&gt;主一样的情况。查看安装日志和数据库启动的日志，说是无&lt;BR&gt;法绑定到端口 1433 和 1434 上。&lt;/P&gt;
&lt;P&gt;一开始怀疑是防火墙，后来又怀疑机器人路过放养了马，但&lt;BR&gt;是检查后确信没事。期间，修改过若干设置，又反复安装若&lt;BR&gt;干次，结果都遭到了可耻的失败。&lt;/P&gt;
&lt;P&gt;......&lt;/P&gt;
&lt;P&gt;思考，到底俺当初装成功和现在失败的环境有何不同呢？&lt;BR&gt;&lt;BR&gt;SP2！&lt;/P&gt;
&lt;P&gt;于是，把系统的 SP2 先卸载了，再安装，结果一次成功！&lt;BR&gt;然后赶紧再重新打 SP2 补丁，以防机器人和其同伙路过。&lt;/P&gt;
&lt;P&gt;奇怪啊郁闷啊，又费了不少时间&lt;/P&gt;&lt;img src ="http://fish.cndev.org/aggbug/58836.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Fish</dc:creator><title>乐观与悲观</title><link>http://fish.cndev.org/archive/2008/05/10/58831.aspx</link><pubDate>2008-05-10 22:06:00Z</pubDate><guid>http://fish.cndev.org/archive/2008/05/10/58831.aspx</guid><wfw:comment>http://fish.cndev.org/comments/58831.aspx</wfw:comment><comments>http://fish.cndev.org/archive/2008/05/10/58831.aspx#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://fish.cndev.org/comments/commentRss/58831.aspx</wfw:commentRss><trackback:ping>http://fish.cndev.org/services/trackbacks/58831.aspx</trackback:ping><description>&lt;P&gt;&lt;A href="http://hanlei.name/archive/2008/01/10/100818.aspx"&gt;http://hanlei.name/archive/2008/01/10/100818.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;看了 grhunter 的这篇 blog，俺在想：&lt;BR&gt;&lt;BR&gt;为啥领导们都总是那么乐观&lt;/P&gt;
&lt;P&gt;而俺这个写程序的却总是那么悲观......&lt;/P&gt;&lt;img src ="http://fish.cndev.org/aggbug/58831.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Fish</dc:creator><title>臭名远扬</title><link>http://fish.cndev.org/archive/2008/04/27/58768.aspx</link><pubDate>2008-04-27 11:09:00Z</pubDate><guid>http://fish.cndev.org/archive/2008/04/27/58768.aspx</guid><wfw:comment>http://fish.cndev.org/comments/58768.aspx</wfw:comment><comments>http://fish.cndev.org/archive/2008/04/27/58768.aspx#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://fish.cndev.org/comments/commentRss/58768.aspx</wfw:commentRss><trackback:ping>http://fish.cndev.org/services/trackbacks/58768.aspx</trackback:ping><description>某日，QQ上一前同事找俺，俺问啥事。答曰：女朋友&lt;BR&gt;写毕业设计，论文已写好，就差一软件。要求用VB写&lt;BR&gt;一个小数据库软件。&lt;BR&gt;&lt;BR&gt;我倒，连忙说VB俺不会。结果就这样了。&lt;BR&gt;&lt;BR&gt;某日，一前同事来电，俺问啥事。答曰：要写一个用&lt;BR&gt;.NET实现某某系统的三层方案。问俺有没有或者是否&lt;BR&gt;帮忙写一个。&lt;BR&gt;&lt;BR&gt;我倒，连忙说.NET俺不会。结果就这样了。&lt;img src ="http://fish.cndev.org/aggbug/58768.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Fish</dc:creator><title>用进废退</title><link>http://fish.cndev.org/archive/2008/03/18/58498.aspx</link><pubDate>2008-03-18 15:04:00Z</pubDate><guid>http://fish.cndev.org/archive/2008/03/18/58498.aspx</guid><wfw:comment>http://fish.cndev.org/comments/58498.aspx</wfw:comment><comments>http://fish.cndev.org/archive/2008/03/18/58498.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://fish.cndev.org/comments/commentRss/58498.aspx</wfw:commentRss><trackback:ping>http://fish.cndev.org/services/trackbacks/58498.aspx</trackback:ping><description>&lt;P&gt;最近给业主写个软件，又要考虑界面和写报表。&lt;BR&gt;&lt;BR&gt;前者一直是自己的弱项，以前大部分时间都是写底层的软件，&lt;BR&gt;（相对公司的软件而言），界面一直折腾得少。现在折腾了&lt;BR&gt;半天，还是觉得界面难看。不管了，难看就难看吧。&lt;BR&gt;&lt;BR&gt;报表这个就更啰嗦了。以前有段时间自己一人包揽整个系统&lt;BR&gt;时，报表用得还是挺熟的，从 ReportBuilder 到 FastReport，&lt;BR&gt;都轻车熟路，还在其基础上写了若干控件。可是几年没整，&lt;BR&gt;一下子似乎竟无从下手。只好把几年以前的程序翻出来，&lt;BR&gt;又看了一下文档，才慢慢恢复过来。&lt;/P&gt;
&lt;P&gt;折腾......&lt;/P&gt;&lt;img src ="http://fish.cndev.org/aggbug/58498.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Fish</dc:creator><title>喜事之后是烦恼</title><link>http://fish.cndev.org/archive/2007/12/30/57768.aspx</link><pubDate>2007-12-30 00:08:00Z</pubDate><guid>http://fish.cndev.org/archive/2007/12/30/57768.aspx</guid><wfw:comment>http://fish.cndev.org/comments/57768.aspx</wfw:comment><comments>http://fish.cndev.org/archive/2007/12/30/57768.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://fish.cndev.org/comments/commentRss/57768.aspx</wfw:commentRss><trackback:ping>http://fish.cndev.org/services/trackbacks/57768.aspx</trackback:ping><description>&lt;P&gt;下午坐车从大良回广州，前前后后电话不断，都是工作上的事情，让人颇费&lt;BR&gt;心思。加上这两天的工作电话、同学电话，手机又快没电了。&lt;BR&gt;&lt;BR&gt;六点左右回到家里，先给手机充电，然后打开电脑，用读卡器接上借的数码&lt;BR&gt;相机里的xd卡，结果导了几张之后提示出错，然后把xd卡放回相机，又说没&lt;BR&gt;格式化。烦恼！上网一查，原来xd卡如此娇气难伺候，这么容易就出故障了。&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;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;PS，这个过程中，收到移动发来的提醒曾有多少错过电话的来电（因为手机&lt;BR&gt;死机了），一数，四个人十几次电话！就是这个通知来得晚了点，在收到这&lt;BR&gt;个通知之前，这些人已经又先后多次给俺打过电话了。&lt;BR&gt;&lt;/P&gt;&lt;img src ="http://fish.cndev.org/aggbug/57768.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Fish</dc:creator><title>症状重现</title><link>http://fish.cndev.org/archive/2007/11/30/57358.aspx</link><pubDate>2007-11-30 08:46:00Z</pubDate><guid>http://fish.cndev.org/archive/2007/11/30/57358.aspx</guid><wfw:comment>http://fish.cndev.org/comments/57358.aspx</wfw:comment><comments>http://fish.cndev.org/archive/2007/11/30/57358.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://fish.cndev.org/comments/commentRss/57358.aspx</wfw:commentRss><trackback:ping>http://fish.cndev.org/services/trackbacks/57358.aspx</trackback:ping><description>晚上做梦还在写程序，早上六点来钟醒过来，原想再眯到&lt;BR&gt;往常的六点五十再起床，但是总在想程序之一的某些流程&lt;BR&gt;的处理，怎么也睡不了.....&lt;BR&gt;&lt;BR&gt;十几年前某阶段的症状又回来了......&lt;img src ="http://fish.cndev.org/aggbug/57358.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Fish</dc:creator><title>终于解决多设备共用DLL时出现的问题</title><link>http://fish.cndev.org/archive/2007/11/15/56780.aspx</link><pubDate>2007-11-15 16:54:00Z</pubDate><guid>http://fish.cndev.org/archive/2007/11/15/56780.aspx</guid><wfw:comment>http://fish.cndev.org/comments/56780.aspx</wfw:comment><comments>http://fish.cndev.org/archive/2007/11/15/56780.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://fish.cndev.org/comments/commentRss/56780.aspx</wfw:commentRss><trackback:ping>http://fish.cndev.org/services/trackbacks/56780.aspx</trackback:ping><description>&lt;P&gt;问题：同一个应用程序要使用两台IC卡读写器，分别使用不同的&lt;BR&gt;串口。在初始化时发现第二个读写器怎么也无法初始化成功。因&lt;BR&gt;为要考虑多种读写器之间的兼容性，所以我们的软件全部采取动&lt;BR&gt;态加载动态库的方法来处理这些库。&lt;BR&gt;&lt;BR&gt;初始化的过程是：&lt;BR&gt;1. 调用公司甲提供的动态库A；&lt;BR&gt;2. 公司甲的动态库A又调用设备厂家乙的某动态库B，过程中，&lt;BR&gt;这个动态库B又调用厂家的其他两个动态库C和D。&lt;/P&gt;
&lt;P&gt;分析：&lt;BR&gt;一个 Windows 程序多次加载同一个 DLL 时，实际上在内存里是&lt;BR&gt;共享代码和数据的。估计公司甲和厂家乙都没有考虑到这种应用&lt;BR&gt;情况，其函数设计里存在一些问题，比如使用了静态数据之类的&lt;BR&gt;做法，导致第二次加载时，第二个读写器初始化串口会失败。&lt;/P&gt;
&lt;P&gt;解决：&lt;BR&gt;因为特定原因，不可能让公司甲和厂家乙来修改他们的库，怎么&lt;BR&gt;办？还是从加载动态库的过程中着手。思路是为第二个读写器启&lt;BR&gt;用一套全部不同名的有关动态库，这样 Windows 应该会视其为不&lt;BR&gt;同的动态库来处理，避免共享内存代码和数据带来的问题。&lt;BR&gt;&lt;BR&gt;具体解决办法：&lt;BR&gt;1. 将所有的动态库另复制一套，放在别的目录；&lt;BR&gt;2. 先将动态库A改名；&lt;BR&gt;3. 用 UE 修改动态库 A，将里面用到动态库B的地方改个名；&lt;BR&gt;4.&amp;nbsp;将动态库B的文件名改为步骤3中的名字，同时，还需要修改&lt;BR&gt;&amp;nbsp;&amp;nbsp; 库中定义输出函数部分的名字；&lt;BR&gt;5. 按照上述步骤处理剩余的动态库C和D；&lt;BR&gt;&lt;BR&gt;如此一番修改，问题解决，设备初始化正常，目前工作也正常。&lt;/P&gt;
&lt;P&gt;UE是个好东东，TDUMP也是个好工具。&lt;BR&gt;&lt;/P&gt;&lt;img src ="http://fish.cndev.org/aggbug/56780.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Fish</dc:creator><title>再次折腾</title><link>http://fish.cndev.org/archive/2007/11/15/56774.aspx</link><pubDate>2007-11-15 09:01:00Z</pubDate><guid>http://fish.cndev.org/archive/2007/11/15/56774.aspx</guid><wfw:comment>http://fish.cndev.org/comments/56774.aspx</wfw:comment><comments>http://fish.cndev.org/archive/2007/11/15/56774.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://fish.cndev.org/comments/commentRss/56774.aspx</wfw:commentRss><trackback:ping>http://fish.cndev.org/services/trackbacks/56774.aspx</trackback:ping><description>上次根据总工的说法，将软件里使用的IC卡读写器从两个改回&lt;BR&gt;一个。昨天去到厂家看最终的车道设备方案，又再次确定，总&lt;BR&gt;工的说法是错误的，还是两个读写器。&lt;BR&gt;&lt;BR&gt;再改回去....&lt;BR&gt;&lt;BR&gt;另外，又增加了一种外场设备要控制......&lt;img src ="http://fish.cndev.org/aggbug/56774.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Fish</dc:creator><title>折腾</title><link>http://fish.cndev.org/archive/2007/11/09/56461.aspx</link><pubDate>2007-11-09 15:48:00Z</pubDate><guid>http://fish.cndev.org/archive/2007/11/09/56461.aspx</guid><wfw:comment>http://fish.cndev.org/comments/56461.aspx</wfw:comment><comments>http://fish.cndev.org/archive/2007/11/09/56461.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://fish.cndev.org/comments/commentRss/56461.aspx</wfw:commentRss><trackback:ping>http://fish.cndev.org/services/trackbacks/56461.aspx</trackback:ping><description>&lt;P&gt;关于现在手上的这个项目，之前上面的方案一直是说一台&lt;BR&gt;电脑接两个IC卡读写器。为此，花了诸多精力分析和完善&lt;BR&gt;底层硬件接口模块，还重写了若干单元。上端软件也为此&lt;BR&gt;改了不少。花费的时间和精力就不说了。&lt;BR&gt;&lt;BR&gt;今天测试硬件时发现同时接两个有问题，第二个无法正确&lt;BR&gt;初始化。再去问老总，要设法找别的厂家的读写器来测试，&lt;BR&gt;才了解到当初老总搞错了，还是一个读写器两个天线......&lt;/P&gt;
&lt;P&gt;命苦，继续改.....&lt;BR&gt;&lt;BR&gt;好在代码调整以后，现在改回去倒是容易不少&lt;BR&gt;&lt;/P&gt;&lt;img src ="http://fish.cndev.org/aggbug/56461.aspx" width = "1" height = "1" /&gt;</description></item></channel></rss>