随笔-60  评论-98  文章-0  trackbacks-0
re: Visual Studio VS C++Builder07 不同的公司,同样的Bug 创建更好的解决方案 2010-02-03 14:38
@试试其他的
int和unsigned int表达范围一样吗?
re: Visual Studio VS C++Builder07 不同的公司,同样的Bug 创建更好的解决方案 2010-02-03 12:06
@clear
2*1024*1024*1024,距离32位溢出,还有50步呢
re: Visual Studio VS C++Builder07 不同的公司,同样的Bug 创建更好的解决方案 2010-02-02 20:21
// 更为离谱的事情发生了,同为10*1024*1024的两个数值,由于一个是成员变量,一个是临时变量,右移之后结果居然不同

DWORD64 dw64Tmp = m_dw64FileSize;
UINT dwTmp2 = (m_dw64FileSize>>32); // 还是10*1024*1024
UINT dwTmp1 = (dw64Tmp>>32); // 0
re: hello,everyone 创建更好的解决方案 2009-06-19 09:22
处女地,哦耶~~
re: 一年过去了... 创建更好的解决方案 2009-05-25 10:10
都是这么过来的

很快你就会发现更好玩的东西,enjoy~~
// 这段代码可以读出多数exe文件的版本信息,无法读取dll版本信息
String GetVersionFromPath(String IDEPath)
{
DWORD dwLen = 0;
char* lpData = NULL;

dwLen = GetFileVersionInfoSize(IDEPath.c_str(), 0);
if (0 == dwLen)
return String("");

lpData =new char [dwLen+1];

if(!GetFileVersionInfo(IDEPath.c_str(), 0, dwLen, lpData))
{
delete lpData;
return String("");
}

LPVOID lpBuffer = NULL;
UINT uLen = 0;

BOOL bSuccess = VerQueryValue(lpData,
TEXT("\\StringFileInfo\\040904b0\\FileVersion"), //0409英文,0804中文
//04b0即1252,ANSI
//可以从ResourceView中的Version中BlockHeader中看到
//可以测试的属性
/*
CompanyName
FileDescription
FileVersion
InternalName
LegalCopyright
OriginalFilename
ProductName
ProductVersion
Comments
LegalTrademarks
PrivateBuild
SpecialBuild
*/
&lpBuffer,
&uLen);
if (!bSuccess)
{
delete lpData;
return String("");
}
String Ret = (char*)lpBuffer;
// Ret.Replace(',', '.');
// Ret.Replace(' ', '0');

delete [] lpData;
return Ret;
}
re: 初始化const, static, const static, static const成员变量 创建更好的解决方案 2009-01-12 08:02
const + static 即使static成员函数也无法改变其值@到底
re: 数值转换的想当然 创建更好的解决方案 2008-08-18 11:08
文中有误:0.9999999999999996才会强转出1来
re: 关于实战测试驱动开发的一点感想。 创建更好的解决方案 2008-03-18 18:02
通过添加DLL/源码测试开关,开发人员和测试人员共用一套测试代码,开始走上靠谱的道路。@创建更好的解决方案
re: 关于实战测试驱动开发的一点感想。 创建更好的解决方案 2008-03-11 14:19
我的想法是由开发组提供模块代码的.obj文件和测试用例的源文件,这样测试人员可以随时构建出自己需要运行的版本,感觉上就像手里有模块的源代码一样,只是不能进去debug。

这种设想有点问题。

首先obj文件没用,因为测试用例的源文件包含了接口文件和实现文件的头文件,hoho,更改之后的compile会把大家都牵扯进来。

修改一下:通过dunit框架load dll并导出对象,供测试组调试测试用例之用。这样的测试用例不仅可以用来测试dll,也可以用来做单元测试。
re: 关于实战测试驱动开发的一点感想。 创建更好的解决方案 2008-03-07 10:51
是啊,通过半个月的沟通,在测试组码了两个人,负责完善测试用例的,我先趟趟水,随时交流进展。@LOGOS
re: 关于实战测试驱动开发的一点感想。 创建更好的解决方案 2008-03-06 17:47
大家处境都差不多,探索出一条好的工作流程,可以添加测试用例不再那样痛苦,才是解决的办法。靠一己之力,过于绵薄了吧。@LOGOS
@火夜风舞
本文是读书笔记,心得,非译文。
多交流,多读书,测试+重构,此为程序员修炼之道,呵呵。
@土仔
这位兄台误会了,cnpack的是IDE专家,接口的命名,IDE专家帮不上忙。
re: 读《修改代码的艺术》 创建更好的解决方案 2008-02-26 08:29
@turingbook
原来是刘主编,久仰久仰。
从卓越抓了一本,果然质地优良。
小弟读书时也曾为电子工业出版社译过一本大部头的国外教材。
re: 我和充斥臭味代码的战争 创建更好的解决方案 2008-01-22 17:33
@abettor
割了吧,都烧焦了。
re: 我和充斥臭味代码的战争 创建更好的解决方案 2008-01-22 17:29
@岁月流冰
呵呵,8k行是不是太重量了些。
我看到2k行以上的代码都会心有戚戚焉。
所以都控制在2k以内吧(或许我们的项目规模就不够大吧)。
re: 我和充斥臭味代码的战争 创建更好的解决方案 2008-01-15 22:01
@菌子
那要看你对代码的要求了。
代码能工作,没错。
但是这是基本的要求,可扩展性、可移植性、可测试性也要考虑啊。
这些指标在团队中尤为重要。
re: 我和充斥臭味代码的战争 创建更好的解决方案 2008-01-15 08:01
@菌子
好的模块你动它干嘛?
有臭味的模块,不动,留它干嘛?
re: 我和充斥臭味代码的战争 创建更好的解决方案 2008-01-14 12:17
@<a href=http://minidx.com>minidxer</a>
你可是我见过的最细心的管理员啊,呵呵
re: 我和充斥臭味代码的战争 创建更好的解决方案 2008-01-14 08:33
@小笨象
我刚工作半年多点,代码写的少了一些。到了10万行的时候,或许会提高一下层次。
re: 我和充斥臭味代码的战争 创建更好的解决方案 2008-01-14 08:31
@LOGOS
书中讲的大都是以有测试的系统为前提,但是以前老前辈们写的程序,连注释都少的可怜,基本上不考虑封装,改起来真是痛苦啊!

re: 旧语 创建更好的解决方案 2007-12-22 16:44
欧阳:你幸福是因为你愚昧。
re: sony笔试题-3 费波那其数列 创建更好的解决方案 2007-10-31 13:15
@张旋
呵呵,现在改用vector了,比指针安全,清理起来还方便,你说呢,呵呵
re: GOOGLE笔试题之找零钱 创建更好的解决方案 2007-10-12 16:20
http://blog.csdn.net/paradise80/archive/2004/12/05/205519.aspx
田东专栏修改后的C#代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Implememtations
{
/// <summary>
/// Calculates the minimum count of change.
/// </summary>
public class MoneyChanger
{
/// <summary>
/// Initializes an instance of <c>MoneyChange</c> with par values.
/// </summary>
/// <param name="parValues">Par values(e.g 10, 5, 2, 1 for RMB).</param>
public MoneyChanger(int[] parValues)
{
if (parValues == null)
{
throw new ArgumentNullException("parValues");
}

this.parValues = this.FilterParValues(parValues);

if (this.parValues.Count == 0)
{
throw new ArgumentException("Invalid par values");
}
}

/// <summary>
/// Gets change with minimum count of par values.
/// </summary>
/// <param name="amount">Total amount to be changed.</param>
/// <returns>(parValue, count) pairs.</returns>
public virtual Dictionary<int, int> Change(int amount)
{
Dictionary<int, int> result = new Dictionary<int, int>(this.parValues.Count);

foreach (int par in this.parValues)
{
result.Add(par, amount / par);
amount %= par;
}

return result;
}

#region Fields

/// <summary>
/// Stores par values.
/// </summary>
private List<int> parValues;

#endregion Fields

#region Supports Methods

/// <summary>
/// Filters par values with following rules:
/// 1. All values are greater then zero.
/// 2. All have different value.
/// 3. Sorted in descending order.
/// </summary>
/// <param name="parValues">Array of par values.</param>
/// <returns>Filtered par values.</returns>
private List<int> FilterParValues(int[] parValues)
{
List<int> temp = new List<int>(parValues.Length);
List<int> list = new List<int>(parValues.Length);

// Filters positive integers.
foreach (int par in parValues)
{
if (par > 0)
{
temp.Add(par);
}
}

// Sorts values.
temp.Sort();

// Adds to list in descending order.
for (int i = temp.Count - 1; i >= 0; i--)
{
if (list.Count > 0)
{
// Ingores the duplicate value.
if (temp[i] == list[list.Count - 1])
{
continue;
}
}

list.Add(temp[i]);
}

return list;
}

#endregion Supports Methods
}
}
re: UI美学 创建更好的解决方案 2007-10-12 16:05
我们常常挖空心思编写代码,期待给用户惊喜

对的,常常的,用户也能从其中收获惊喜

更常见的情况是,用户很难fall in love with software at first glance

难以上手的软件,功能再强大,也是Unfriendly的

是不符合UI美学的