金山卫士 可牛和可牛能同时运行吗,会不会有什么不好。

一个QA的零零碎碎
金山卫士开源了,参见
。 抱着学习研究的目的下了一份看看。看了一些代码,觉得被忽悠了。中国知名通用软件厂商,民族软件业的一面旗帜就这代码水平
代码显然达不到工业级的标准,只能算是实习生练手的水准。为了给有意拿这份代码当学习资料的初学者提个醒,不被误导,做出了一个艰难的决定,写博文来评论金山卫士的代码。
先说说代码中的几个突出问题
的应用不过关。该用
的时候不用
代码封装做的不好,调用者知道被调用者很多细节,且对被调用者做了过多假设。
文件和函数命名不规划。不能表达内容,且容易引起误解
测试靠打印而不是
很难自动化验证。且测试代码未与工程代码分离。
太多的
if-else
而不会用表驱动
函数逻辑不严格,有明显漏洞。 一点一点的看 1
的应用不过关。该用
的时候不用 ro\PrivacyProtection\rule\IRule.h
cla IRule
: // MichaelPeng: Name函数可以设置为co t virtual LPCTSTR Name(
; virtual void Enable(BOOL Enable){} // MichaelPeng: Match从语义上也应为co t,且参数pData也应为co t virtual BOOL Match(KAcce Data
* Data) = 0
; // MichaelPeng: DbgPrint从语义上也应为co t virtual void DbgPrint(
2 代码封装做的不好,调用者知道被调用者很多细节,且对被调用者做了过多假设。 ro\PrivacyProtection\rule\KDirRelateRule.c BOOL KDirRelateRule::Match(KAcce Data* pData)
{ BOOL RetCode = FALSE; td::map
CString, td::vector
CString
::iterator iter; for (iter = m_mapDirRelates.begin() iter != m_mapDirRelates.end() iter
) { co t CString
&am trDir = iter
first; // MicahelPeng: 在向m_mapDirRelated中插入数据时都调用MakeLower转化成了小写,但在比较时却不转化,假定调用者作了转化?? if (strDir.GetLength() = Data
nFileDirLe &am am memcmp((LPCTSTR)strDir, Data
szFilePath, trDir.GetLength() * sizeof
(TCHAR)) == 0
) { td::vector
CString
::iterator iterRelate; td::vector
CString
> am vecStr = iter
second; for (iterRelate = vecStr.begin() iterRelate != vecStr.end() ++
iterRelate) { int MemSize = Data
nProcPathLe * sizeof
(TCHAR); CString
&am trTem = *
iterRelate; if (strTemp.GetLength() == Data
nProcPathLe &am am memcmp((LPCTSTR)strTemp, Data
szProcPath, MemSize) == 0
) { return TRUE } } } } // MichaelPeng:szProcPath应当类似于C:\windows\notepad.exe, 这里需要保证nProcPathLen和nProcDirLen都被正确设置, // 最好是KAcce Data提供方法SetProcPath,在其中将szProcPath, ProcPathLen, ProcDirLen均设置了 // 但没有这种函数,需要靠调用者去保证每次都将这三个变量同时正确设置j int ProcNameLe = Data
nProcPathLe - Data
nProcDirLe LPCTSTR ProcStr = Data
szProcPath + Data
nProcDirLe // MicaelPeng: 遍历的容器都一样,没有必要声明两个iterator td::map
CString, td::vector
CString
::iterator iter2;
} 3 文件和函数命名不规划。不能表达内容,且容易引起误解 RuleManager.c ,你看到这个文件名第一反应这个文件 是做什么用的?管理rule的是吧,接下来看到的代码会超越你所有的常识。 // KRuleManager.c : Define the entry oint for the co ole a lication.
#include "
stdafx.h
#include "
KFileExte ionRule.h
#include "
KProcFileRule.h
#include "
KFileDirRule.h
#include "
KFilePathRule.h
#include "
KFileExtRelateRule.h
#include "
KFileNameRelateRule.h
#include "
KDirRelateRule.h
#include "
KProcPathRule.h
#include "
KSignDataRule.h
#include "
KVariableString.h
#include "
KRuleConfig.h
#include "
KTree.h
#include "
KRuleImpl.h
#include "
KRuleTestImpl.h
#include "
signverify.h
#include "
KSignCache.h
#include "
KProcNameCache.h
void TestFileExte ionRule(KAcce Data
* Data)
{ KFileExte ionRule rule; rule.AddFileExt(_T(
)); rule.AddFileExt(_T(
)); rule.AddFileExt(_T(
)); rule.AddFileExt(_T(
)); rule.AddFileExt(_T(
)); rule.RemoveFileExt(_T(
)); BOOL RetCode = rule.Match(pData); // MichaelPeng: 通过打印而非A ert来校验测试结果,不可重复和自动化 DPrintA(
KFileExte ionRule::Match return:%d\n
, RetCode);
void TestTree(
{ KTree
tree; tree.SetValue(
); tree.AddLeft(
); tree.AddRight(
); // MichaelPeng: 这里测了啥?没有抛异常就OK了???
void TestRule(
{ ....... // MichaelPeng: 这么多KAcce Data设置的雷同代码,为何不放到一个数组中用表驱动实现 { KAcce Data data; // MichaelPeng: 拷贝字符串和设置长度可放到KAcce Data的成员函数中一次完成 // 代码冗余,暴露给外界太多信息,且这里也未设置nProdDirLen,与BOOL KDirRelateRule::Match(KAcce Data* Data)的要求矛盾 _tcscpy(data.szProcPath, _T(
d:\\a\\b.exe
)); _tcscpy(data.szFilePath, _T(
c:\\a\\b\\b.doc
)); data.nProcPathLen
= _tcslen(data.szProcPath); data.nFilePathLe = _tcslen(data.szFilePath); TestKDirRelateRule(
&am data); } { KAcce Data data; _tcscpy(data.szProcPath, _T(
c:\\a\\b\\e.exe
)); _tcscpy(data.szFilePath, _T(
c:\\a\\b\\b.doc
)); data.nProcPathLen
= _tcslen(data.szProcPath); data.nFilePathLe = _tcslen(data.szFilePath); TestKProcPathRule(
&am data); } { KAcce Data data; _tcscpy(data.szProcPath, _T(
c:\\WINDOWS\\system32\\notepad.exe
)); _tcscpy(data.szFilePath, _T(
c:\\a\\b\\b.doc
)); data.nProcPathLen
= _tcslen(data.szProcPath); data.nFilePathLe = _tcslen(data.szFilePath); TestKSignDataRule(
&am data); } { KAcce Data data; _tcscpy(data.szProcPath, _T(
c:\\Program Files\\Commo Files\\Kingsoft\\kiscommon\\kisui .exe
)); _tcscpy(data.szFilePath, _T(
c:\\a\\b\\b.doc
)); data.nProcPathLen
= _tcslen(data.szProcPath); data.nFilePathLe = _tcslen(data.szFilePath); TestKSignDataRule(
&am data); } TestKVariableString(); TestCreateRules(); TestTree();
int _tmain(
int argc, _TCHAR
* argv[])
{ CSignVerify::I tance().Initialize(); //
TestRule(); //
TestRuleImpl(); //
TestRuleImplMultiThread(); //
TestRuleTestImpl(); //
TestSign(); //
TestSignCacheAndProcNameCache(); //
TestUserConfig(); // MichaelPeng: 测试代码未与工程代码清晰分离 TestLoadRule(); return 0
} 4 测试靠打印而不是
很难自动化验证。且测试代码未与工程代码分离。
见上例 5 太多的
if-else
而不会用表驱动 ro\PrivacyProtection\rule\KSystemEnvirVar.h cla KSystemEnvirVar
: // MichaelPeng: 应为静态函数 CString GetValue(LPCTSTR zVariable) { TCHAR zFolderPath[MAX_PATH + 1
} // MichaelPeng: if else太多,应做成表驱动 if (
0 == _tcsicmp(szVariable, _T(
%Desktop%
))) { ::SHGetSpecialFolderPath(NULL, zFolderPath, CSIDL_DESKTOP, 0
); } else if (
0 == _tcsicmp(szVariable, _T(
%Internet%
))) { ::SHGetSpecialFolderPath(NULL, zFolderPath, CSIDL_INTERNET, 0
); } else if (
0 == _tcsicmp(szVariable, _T(
%Programs%
))) { ::SHGetSpecialFolderPath(NULL, zFolderPath, CSIDL_PROGRAMS, 0
); } else if (
0 == _tcsicmp(szVariable, _T(
%Controls%
))) { ::SHGetSpecialFolderPath(NULL, zFolderPath, CSIDL_CO***OLS, 0
); } else if (
0 == _tcsicmp(szVariable, _T(
%Printers%
))) { ::SHGetSpecialFolderPath(NULL, zFolderPath, CSIDL_PRINTERS, 0
); } else if (
0 == _tcsicmp(szVariable, _T(
%Personal%
))) { ::SHGetSpecialFolderPath(NULL, zFolderPath, CSIDL_PERSONAL, 0
); } else if (
0 == _tcsicmp(szVariable, _T(
%Favorites%
))) { ::SHGetSpecialFolderPath(NULL, zFolderPath, CSIDL_F***ORITES, 0
); } else if (
0 == _tcsicmp(szVariable, _T(
%Startup%
))) { ::SHGetSpecialFolderPath(NULL, zFolderPath, CSIDL_STARTUP, 0
); } else if (
0 == _tcsicmp(szVariable, _T(
%Recent%
))) { ::SHGetSpecialFolderPath(NULL, zFolderPath, CSIDL_RECENT, 0
); } else if (
0 == _tcsicmp(szVariable, _T(
%Sendto%
))) { ::SHGetSpecialFolderPath(NULL, zFolderPath, CSIDL_SENDTO, 0
); } else if (
0 == _tcsicmp(szVariable, _T(
%Bitbucket%
))) { ::SHGetSpecialFolderPath(NULL, zFolderPath, CSIDL_BITBUCKET, 0
); } else if (
0 == _tcsicmp(szVariable, _T(
%StartMenu%
))) { ::SHGetSpecialFolderPath(NULL, zFolderPath, CSIDL_STARTMENU, 0
); } else if (
0 == _tcsicmp(szVariable, _T(
%Mydocuments%
))) { ::SHGetSpecialFolderPath(NULL, zFolderPath, CSIDL_MYDOCUMENTS, 0
); } else if (
0 == _tcsicmp(szVariable, _T(
%Mymusic%
))) { ::SHGetSpecialFolderPath(NULL, zFolderPath, CSIDL_MYMUSIC, 0
); } else if (
0 == _tcsicmp(szVariable, _T(
%Myvideo%
))) { ::SHGetSpecialFolderPath(NULL, zFolderPath, CSIDL_MYVIDEO, 0
); } else if (
0 == _tcsicmp(szVariable, _T(
%Desktopdirectory%
))) { ::SHGetSpecialFolderPath(NULL, zFolderPath, CSIDL_DESKTOPDIRECTORY, 0
); } else if (
0 == _tcsicmp(szVariable, _T(
%Drives%
))) { ::SHGetSpecialFolderPath(NULL, zFolderPath, CSIDL_DRIVES, 0
); } else if (
0 == _tcsicmp(szVariable, _T(
%Network%
))) { ::SHGetSpecialFolderPath(NULL, zFolderPath, CSIDL_NETWORK, 0
); } else if (
0 == _tcsicmp(szVariable, _T(
%Nethood%
))) { ::SHGetSpecialFolderPath(NULL, zFolderPath, CSIDL_NETHOOD, 0
); } else if (
0 == _tcsicmp(szVariable, _T(
%Fonts%
))) { ::SHGetSpecialFolderPath(NULL, zFolderPath, CSIDL_FONTS, 0
); } else if (
0 == _tcsicmp(szVariable, _T(
%Templates%
))) { ::SHGetSpecialFolderPath(NULL, zFolderPath, CSIDL_TEMPLATES, 0
); } else if (
0 == _tcsicmp(szVariable, _T(
%CommonStartMenu%
))) { ::SHGetSpecialFolderPath(NULL, zFolderPath, CSIDL_COMMON_STARTMENU, 0
); } else if (
0 == _tcsicmp(szVariable, _T(
%CommonPrograms%
))) { ::SHGetSpecialFolderPath(NULL, zFolderPath, CSIDL_COMMON_PROGRAMS, 0
); } else if (
0 == _tcsicmp(szVariable, _T(
%CommonStartup%
))) { ::SHGetSpecialFolderPath(NULL, zFolderPath, CSIDL_COMMON_STARTUP, 0
); } else if (
0 == _tcsicmp(szVariable, _T(
%LocalA date%
))) { ::SHGetSpecialFolderPath(NULL, zFolderPath, CSIDL_LOCAL_APPDATA, 0
); } else if (
0 == _tcsicmp(szVariable, _T(
%CommonA data%
))) { ::SHGetSpecialFolderPath(NULL, zFolderPath, CSIDL_COMMON_APPDATA, 0
); } else if (
0 == _tcsicmp(szVariable, _T(
%Windows%
))) { ::SHGetSpecialFolderPath(NULL, zFolderPath, CSIDL_WINDOWS, 0
); } else if (
0 == _tcsicmp(szVariable, _T(
%System32%
))) { ::SHGetSpecialFolderPath(NULL, zFolderPath, CSIDL_SYSTEM, 0
); } else if (
0 == _tcsicmp(szVariable, _T(
%ProgramFilesComm%
))) { ::SHGetSpecialFolderPath(NULL, zFolderPath, CSIDL_PROGRAM_FILES_COMMON, 0
); } else if (
0 == _tcsicmp(szVariable, _T(
%CommonDocuments%
))) { ::SHGetSpecialFolderPath(NULL, zFolderPath, CSIDL_COMMON_DOCUMENTS, 0
); } else { CString trVariable(szVariable); trVariable.Remove(_T(
)); TCHAR
* zTem = _tgetenv(strVariable); if (szTemp) { if (_tc tr(szTemp, L
)) { ::GetLongPathNameW(szTemp, zFolderPath, MAX_PATH); } else { _tc cpy(szFolderPath, zTemp, MAX_PATH); } zFolderPath[MAX_PATH] = 0
; } } return zFolderPath; }
protected
}; 6 函数逻辑不严格,有明显漏洞 ro\PrivacyProtection\rule\KVariableString.h BOOL KVariableString::RelpaceVariable(CString
&am trString)
{ BOOL Retur = TRUE; int StartPo int EndPo CString trTemp(strString); CString trVariable; CString trValue; for ( ) { StartPo = trTemp.Find(_T(
); if (nStartPo != -
) EndPo = trTemp.Find(_T(
), StartPo + 1
); if (nStartPo == -
1 || EndPo == -
) break
; trVariable = trTemp.Mid(nStartPos, EndPo - StartPo + 1
); trValue = GetVariable(strVariable); if (strValue.IsEmpty()) break
; // MichaelPeng: 对于%abc%xxx%def%abc%ghi%,会出现错误的替换,正确的是替换掉%abc%, %def%, %ghi%,但这段代码会替换掉两个%abc% trTemp.Replace(strVariable, trValue); } if (strTemp.Find(_T(
)) != -
#ifdef OUTPUT_INIT_WARNING
#ifdef __log_file__ CString trTempVar(strString); trTempVar.Replace(_T(
)); DPrintW(L
KVariableString::RelpaceVariable fail, variablename:%s\n
, trTempVar); CString trMsg; trMsg.Format(_T(
查找环境变量失败:%s
), trString); ::Me ageBox(NULL, trMsg, _T(
隐私保护器
), MB_OK);
#endif return FALSE; } // MicaelPeng: 这个替换功能不能从函数名体现出来 do { StartPo = trTemp.Find(_T(
)); if (nStartPo == -
) break
; trTemp.Replace(_T(
)); } while (
); trString = trTem ro\PrivacyProtection\rule\KFunction.c // MichaelPeng: DirCount是什么意思?路径数目?DirLength更合适
int KFunction::GetDirCount(LPCTSTR zPath)
{ LPCTSTR zChr = _tcsrchr(szPath, _T(
)); if (
! zChr) return -
; return zChr - zPath + 1
// MicahelPeng: count应为length
int KFunction::GetFileNameCount(LPCTSTR zPath)
{ LPCTSTR zChr = _tcsrchr(szPath, _T(
)); if (
! zChr) return -
; return _tcslen(
++ zChr);
// MichaelPeng: count应为length
// 若文件没有后缀而路径有后缀,如C:\a.b.c\dfgh 则结果应为0或-1,但函数返回7
int KFunction::GetFileExtCount(LPCTSTR zPath)
{ LPCTSTR zChr = _tcsrchr(szPath, _T(
)); if (
! zChr) return -
; return _tcslen( zChr);
} 才看了一小部分代码就发现了这么多的问题。这还不是我看到的全部问题,只是挑了几个比较典型的。如果是园子里初学者练手的项目这种质量是没问题的。但号称专业级的安全保护模块就是这种级别的代码水准,不禁让人对其专业性产生疑虑。 绿色通道:
posted on 2010-12-02 09:00
阅读(26886) 3 2010-12-02 16:34 @jiang3118
真是对你很无语啊,说话一点逻辑也没有。
我说过WPS的代码怎么地了么?我一个普通用户我能知道他代码怎么地?WPS输的可不仅仅只是营销,一个软件公司最可悲的不是用户抱怨它的软件不好用,而是你白给我用我都不想用。没错,我是在用盗版office,但是如果WPS好用我会去用盗版office么?三个方面,一是本身就不好用,这是个用户体验的问题;其次是跟office的兼容做得不好,能兼容但是做的不好;最后才是营销的问题。我问人家还用金山的软件不,别人说用WPS,接着来一句“装完系统还没装office的时候能顶一下”,各种滋味自己琢磨去吧。
至于金山毒霸当年跟XP的不兼容问题,你自己查查当年的资料吧,你的解释本身就很可笑,亏你还来笑别人,“每个软件都有运行环境”,这叫什么话?如果它标明是Mac环境,Linux环境或者XP下有特殊要求的环境,出了问题我绝对不说什么,就这样也能拿出来卖钱?
其余两个我就不多说了。
  2010-12-02 16:35 风中de梧桐
请问我为谁去5毛? 有理说理,整天就知道五毛五毛,你懂什么叫五毛?
  2010-12-02 16:35 风吹云动
哈哈~~顶~~~估计他不知道~
  2010-12-02 16:39 陈梓瀚(vczh)
PCSTR NAME() CONST {} 不就是co t char* name() {}吗?
为什么要限制函数体也是CONST,有必要吗?
  2010-12-02 16:39 1.代码和产品是不一样的 ,如果都要最求代码的优雅,产品可能无限延期
2.程序大了的时候,关注点在架构而不在代码,不管怎么实现,能通过测试的代码就ok
3.程序员有菜鸟也有高手
4.能开源也不错,取其精华,去其糟粕
  2010-12-02 16:39 DDRII:
@jiang3118
真是对你很无语啊,说话一点逻辑也没有。
我说过WPS的代码怎么地了么?我一个普通用户我能知道他代码怎么地?WPS输的可不仅仅只是营销,一个软件公司最可悲的不是用户抱怨它的软件不好用,而是你白给我用我都不想用。没错,我是在用盗版office,但是如果WPS好用我会去用盗版office么?三个方面,一是本身就不好用,这是个用户体验的问题;其次是跟office的兼容做得不好,能兼容但是做的不好;最后才是营销的问题。我问人家还用金山的软件不,别人说用WPS,接着来一句“装完系统还没装office的时候能顶一下”,各种滋味自己琢磨去吧。
至于金山毒霸当年跟XP的不兼容问题,你自己查查当年的资料吧,你的解释本身就很可笑,亏你还来笑别人,“每个软件都有运行环境”,这叫什么话?如果它标明是Mac环境,Linux环境或者XP下有特殊要求的环境,出了问题我绝对不说什么,就这样也能拿出来卖钱?
其余两个我就不多说了。
说真的,你可以不用买。 问一句了,你做过一个成熟的基础软件么。
  2010-12-02 16:41 $等待$
你做过C++的商业产品吗?
  2010-12-02 16:46 cdy20
我现在还真是没再买过金山的东西了,我本身也不是做基础软件开发的,我作为一个软件用户就不能提出不满了么? 从另一个方面来讲,金山作为民族软件,我对他很有期望,但是他让人太失望我说两句不行么?这才是主要的。
  2010-12-02 16:48 DDRII
你各种言论除了诋毁~~还有什么?
你能写出来一个卫士么?
你能写出来一个词霸么?
你能写出来一个w 么?
批评可以~但是你完全没有看到别人的优点~
看来你这人在社会上也是如此~
永远无法长进~永远不懂取长补短~
所以~~小孩子~~不要在这当圣人~~你~太嫩~
  2010-12-02 16:52 风中de梧桐
我在餐馆里吃饭,厨师做的菜不好吃我能不能抱怨?我一定要会做菜才能说你盐给多了?说话有点逻辑好吧? 诋毁?我如果捏造事实你可以说诋毁,我拿我的使用经历说话这算诋毁?
看你说话的样子恐怕你更像是小孩子吧
  2010-12-02 16:53 DDRII
你这句话我接受。 这里本来就是讨论技术,也可以交流感情的地方。
作为用户你可以说不满。
技术人员:
也别说民族 民族,在中国 IT就是个屁,盗版漫天飞,这谁的责任,
了解历史的人,都知道,如果不是中国这样的环境,微软算个屁,办公这一块那有他那么多份额。
  2010-12-02 16:54 superkey007
博主 一激动,什么都忘了
  2010-12-02 16:55 代码质量就说代码质量,不用扯到民族的高度。
  2010-12-02 17:20 团队不同于个人
速度比质量更优先
  2010-12-02 17:30 对于开源,大家要包容。
有些错误也正常的。
  2010-12-02 17:38 superkey007:
@陈梓瀚(vczh)
PCSTR NAME() CONST {} 不就是co t char* name() {}吗?
为什么要限制函数体也是CONST,有必要吗?
就是这样很多人都不知道各种co t是干什么的co t才没用的。
函数上co t,不过是增加了一个不怎么靠谱的语义限制。可以通过指针变换绕开。造成语义不一致。co t的另一好处,优化时可将多次调用合并成一个,这个也是编译器来计算,所有co t的函数,就是只调用co t函数和运算符的函数,不应该对程序员造成负担,况且还是这么底层的语言。
与其纠结这种问题,还不如好好把指针传递时的in,out都指定好,以及区分指向单个对象的指针、指向数组的指针、指向数组中某个位置的指针。
至少这样语义比这种co t的清晰得多。
  2010-12-02 17:48 llzhzh :
爱因斯坦的论文数学公式太少,甚至干脆不用,哪像一个科学家写的。
被设计模式洗脑的太多了,有用的不学,尽搞花哨的。
有意思
  2010-12-02 17:51 风中de梧桐:
你各种言论除了诋毁~~还有什么?
你能写出来一个卫士么?
你能写出来一个词霸么?
你能写出来一个w 么?
批评可以~但是你完全没有看到别人的优点~
看来你这人在社会上也是如此~
永远无法长进~永远不懂取长补短~
所以~~小孩子~~不要在这当圣人~~你~太嫩~
难不成金山的员工都吃饱了,不去修改自己的垃圾代码,跑出来训人?
金山安全卫士开源成了兽兽视频,大家惊奇地发现了黑木耳。
  2010-12-02 17:52 开源的目的是分享 不是让写博批判的 要是 这样的话 你代码晒出来让大家瞅下 说不定…… 谁都做不到极致 先要保证产品没问题
  2010-12-02 17:55 如果楼主本着为人民服务的心态,那在写完评批意见以后附上一份你认为好的代码。
  2010-12-02 17:57 金贵软件
金山开源有两个目的,
一是提高自己的口碑,因为外行人总认为源代码是软件中最值钱的东西,其实不然,任何一篇文章都是开源的,也没见谁读了谁的文章就仿造一篇更好的出来。
二是培养一批免费的兼职程序员完善他的金山卫士,就像人人网的小游戏一样。
  2010-12-02 18:24 看来都是些高手哈!
  2010-12-02 18:30 金山卫士在我的电脑上经常死掉了,我就估计可能代码质量应该不咋滴,但博主全篇都是批评抱怨,还有篇首那讥讽意味很深的措辞让我有点怀疑楼主的真实目的。
金山开源的商业目的暂且不论,但就开源本身而言,是为了让有能力的人去取精去糙,去改进它。真正初学的谁又会拿这种代码去作学习教材呢。
开源是应该鼓励的,可以批评,可以提出不同意见,可以改进,但是不管怎样,都不该嘲讽,就算你能将更好的产品质量更高的代码开源,你都不应该嘲讽不如你的人。
总的来说,除开第一段话,博主这篇是篇好博文
  2010-12-02 19:02 Ja :
很怀疑楼主的来历,且不说代码水平如何,能开源已经让很多竞争对手感到恐惧,360不开源代码就水平就高吗?QQ不开源就专业吗?
金山卫士开源了,至少让部分专业的程序员大家能知道他真的不流氓。就像人一样,敢敞开心扉给人看。
金山的开源跟开源精神毫无关系,它开源的目的纯粹就是为了打压对手。
  2010-12-02 19:02 DDRII
这分析太给力了,是啊
号称……可产品…… :(
  2010-12-02 19:58 WCF技术联盟:
很怀疑楼主的来历,且不说代码水平如何,能开源已经让很多竞争对手感到恐惧,360不开源代码就水平就高吗?QQ不开源就专业吗?
金山卫士开源了,至少让部分专业的程序员大家能知道他真的不流氓。就像人一样,敢敞开心扉给人看。
金山的开源跟开源精神毫无关系,它开源的目的纯粹就是为了打压对手。
你这个说法就是有点阴冒论的味道了,金山卫士开源就是打压对手的话,微软开源是不是更是充满阴某的行为?
  2010-12-02 20:29 C++学了个皮毛的默默走过
  2010-12-02 20:40 开源仅仅是第一步而已......
改进才是目的.
你看到了不足,你可以加入他的开源计划,然后自己改进啊!
  2010-12-02 21:48 关于CONST可参见以下我对此些的博:
别的我有时间在写评论。
  2010-12-02 21:52 胡卜规:
关于CONST可参见以下我对此些的博:
别的我有时间在写评论。
2010前头多个空格导致URL不存在
  2010-12-02 22:10 赚钱才是硬道理,到用户和应用达到一定等级自然会懂得去优化、规范。至少金山还是成功的
  2010-12-02 23:09 DDRII
只说w ,不知道你用过DOS下的w 没有。
windows来了之后,office也来了,MS跟金山说咱们搞兼容吧,金山同意了,于是,w 就被出卖了。于是现在只知办公软件的MS office,不知当年的w 了。
所以,你光说w 如何如何差是不对的。毕竟它也风光过,虽然它在跟MS的争斗中是一个悲剧。
  2010-12-02 23:15 对金山映象还停留在剑侠情缘上0-0
  2010-12-02 23:19 胡卜规
半桶水。
  2010-12-02 23:35 开源::
只不过是他软件起家的beta版的开源版,现在的代码质量估计已经很的蛮不错的,只不过没公开,公开只会给你公开beta的,再说核心代码最重要,只有申请加入才可看到和参与到,真正的代码中~~
以上纯粹鄙人个人之言~~~~
  2010-12-03 00:19 // MichaelPeng: 这里测了啥?没有抛异常就OK了???
还用问吗?这个函数测试的就是那个什么Tree那个模板类被,调用了几个成员函数。为什么要抛异常呢。
  2010-12-03 00:24 // MicahelPeng: count应为length
这一点lz指出的非常正确。count是个数的意思(尤其在 C# 里面)。这里的函数名用count会引起误解。
  2010-12-03 00:29 风吹云动
LZ说的不是返回值,是常成员函数。LS好多人已经说了,不再赘述。
  2010-12-03 02:28 文人相轻,程序员也相轻?
  2010-12-03 08:31 代码好错坏只看一部分是无法判断出来,要经过整体运行测试才知道,框架是一个架子,微软没说“你们开发必须使用架子”这话,爱使用什么爱怎么是个人自由,只要速度效率最高就是最好的
个人估计LZ是360的吧
  2010-12-03 09:33 ttyang
@Jerry Qian
看到好多人在问,我的理解是,表驱动可能就是一种一维或者二维的数据结构,或者更复杂一些的,用来精简程序的代码量,比如把条件值放到数组中,然后在原来if-else的地方改成从查询表,然后做出相应的处理,这样在未来扩展的时候只需要修改表中的数据就可以了。
  2010-12-03 09:34 支持楼主,问题就是要讲出来,便于大家分析学习。IT技术领域不能搞差不多,要精益求精。
  2010-12-03 09:53 WPS的没落一开始是由于它迟迟不愿意兼容windows而造成的。估计那阵子,求总看win95就和今天在xp下看win7差不多吧。金山似乎认准了DOS才是主流系统,因此让MS占得先机,自己的windows下的WPS迟了那么久才出来,面对几乎已经被MS的office占领的市场,只能被动的去兼容竞争对手的产品,于是基本就被判死了当时。
  2010-12-03 10:15 我也来说两句,虽然我的C++很水,但说看完楼主的说法心里还很有感触的。
第一,商业代码肯定是在产品完成后慢慢改进,要给企业和团队改进的时间和空间。
第二,最初的设计失败和逻辑缺陷是导致最后产品失败的主要原因,应为升级就等于重构,时间和经历还有公司盈利都是不允许的。
第三,每个团队都有自己的编码习惯和团队定义,这是国内最大的代码BUG。
所以总结出来代码的完美漂亮只要这团队里通用也就管不着了,但是设计逻辑的缺陷就会导致产品的严重失败。做产品不是做外包,不是能运行就好,逻辑的失败必定导致系统漏洞,这就是金山不杀毒,查不到木马的原因。
我不抵制这个国内的老带头人,但我服务器上被上木马串改主页他不管就让人很气愤了。
  2010-12-03 10:27 我纯粹是来支持楼主的。同时我也支持金山开源的行为。
  2010-12-03 10:44 楼主太强了!!!支持
  2010-12-03 11:57 不是金山拿垃圾骗人,就是金山是垃圾!
  2010-12-03 12:36 喜欢开源的东西,如果不地道,就当反面教材吧!
  2010-12-03 12:42 要是在XX公司, 这种代码别说开源. 在内部评审就被干死了.
  2010-12-03 12:43 不是特殊需要,例如查询表比较大的时候,我不赞成用表驱动。
表驱动分离了表内容和使用,如果只使用一次,那么就无形中增加了代码的阅读难度。没什么好处。
  2010-12-03 12:46 hunklee:不是金山拿垃圾骗人,就是金山是垃圾!
用c++写出好代码不容易。要不然也没有java,c#立足之地了。
co t 函数这个概念在c#根本就没有,不一样活得好好的,所以要抓住主要矛盾,次要矛盾就扔到太平洋吧。
  2010-12-03 12:53 诺贝尔:
hunklee:不是金山拿垃圾骗人,就是金山是垃圾!
用c++写出好代码不容易。要不然也没有java,c#立足之地了。
co t 函数这个概念在c#根本就没有,不一样活得好好的,所以要抓住主要矛盾,次要矛盾就扔到太平洋吧。
道理不错,只是例子不好。C#不但有co t,还有C++没有的readonly……
  2010-12-03 13:15 楼主厉害
  2010-12-03 13:16 我也曾挑出来过microsoft .net framework代码的漏洞或缺陷,可是那完全不影响正常使用。
  2010-12-03 13:30 什么时候微软开源了才好!!SYSTEM32里面一大堆EXE文件
谁知道是干什么用的!
  2010-12-03 15:27 首先感谢金山公司,敢于开源是需要勇气的,
对于象搂主这样分析,我们通常只进行到模块(PE模块)间调用接口这样级,因为对普通程序员来说这样的要求太高了。
所以我想问搂主谈co t成员问题的那个IRule,究竟是模块间的接口呢,还是模块内部的一个接口? 当然我假定了IRule是一个接口,其实不是:因为带了Enable方法实现。所以我估计是一个模块内部的抽象类,是程序员定义来简化代码的,这样就没必要吹毛求疵了。
另外对于A ert和打印的问题,我们通常是模块内参数断言用A ert,模块间的问题就靠打印了:程序大了很难把所有模块都放在一起调试;而且到了Release程序不能一个小问题就直接崩溃,有时候这部分不能工作,打印一些信息(log),还可以继续走,用户可以抓紧时间做一个存盘什么的。
回头也拿一些自己的代码出来,请搂主评一评。
  2010-12-03 16:06 特地注册帐号来回复....
用printf来输出测试数据算不上错误,编译正式release的时候都会无效化的.a ert这条有点过激了.
一片if else真的过分了.已经算得上脑残级别了.说明那边的程序员大概只会复制粘贴了.
  2010-12-03 16:12 引用
空明流转:
不是特殊需要,例如查询表比较大的时候,我不赞成用表驱动。
表驱动分离了表内容和使用,如果只使用一次,那么就无形中增加了代码的阅读难度。没什么好处。
重复地写if-else是很脑残的行为,增加程序体积,后期无法优化性能,而且看上去还非常恶心.如果我的下属写出这种代码,我绝对会把那家伙拉出去***毙半个小时.
2010-12-03 17:09 ark royal
printf输出测试数据没错,错的是那个代码明显是测试,但没有判断测试结果,只能每次运行完人眼去观测结果有没有问题,费时费力且不可靠。我说的也不是c库里的a ert,而是测试框架里的那种可以表示测试结果是否正确,同时输出错误信息但不会让程序中断,可以继续向下执行其它测试的那种。
2010-12-03 17:11 hoodlum1980
没说要抛异常,我的意思是那几行代码除了能判断调用的函数没有异常中断外,不能测试其任何行为是否符合预期。
void TestTree(void)
KTreeint tree;
tree.SetValue(0);
tree.AddLeft(1);
tree.AddRight(2);
// MichaelPeng: 这里测了啥?没有抛异常就OK了???
  2010-12-03 17:12 我觉得楼主说的很对,软件要做的好,编码是关键,一堆很烂的代码堆砌出来的产品,你还能指望它有多好?
金山开源的确是个很大的进步,不管其初衷如何,楼主本着严谨的态度提供一些意见,这本来就是给金山改进的机会啊,不知道一大堆说楼主苛刻的人是怎么想的,难道对自己的代码要求都这么低么??
2010-12-03 17:13 hoodlum1980
也没有苛求测试写的如何,可一个叫RuleManager的文件里居然是一堆Test,这个代码可读性不好,别的程序员以为这里面是管理rule的代码,进来一看会是什么表情
2010-12-03 17:19 winter-cn
我是QA,写过一些单元测试,整个codebase系统里的测试是十万以上的规模,有几个cluster的机器每天在跑各种测试,有专门团队维护build/test服务器。每次check-in以前要作peer review,测试覆盖率都有要求
2010-12-03 17:21 m web
参见coderzh一系列关于单元测试的文章
我记得coderzh好像就是金山的
2010-12-03 17:22 Janja
参见郑烨的代码之丑系列
  2010-12-03 17:27 Michael Peng
// MichaelPeng: 通过打印而非A ert来校验测试结果,不可重复和自动化
DPrintA(KFileExte ionRule::Match return:%d\ quot;, bRetCode);
呃.这是LZ注释的代码.至少这条感觉上这个可能只是打印调试信息.
用print无可厚非.
a ert中文翻译为断言,就是在这里肯定可以预言bRetCode是多少的时候才需要用.这玩意是错误处理的一门艺术.自动化测试方面,我就不是很清楚用法了.
2010-12-03 17:30 AirSpuer
没有相轻有意思。要是觉得代码里有值得学习的地方我也会写出来的。
  2010-12-03 17:41 ark royal:
重复地写if-else是很脑残的行为,增加程序体积,后期无法优化性能,而且看上去还非常恶心.如果我的下属写出这种代码,我绝对会把那家伙拉出去***毙半个小时.
没必要说成脑残吧,搂主,难道要写成这样才叫程序?
co t struct {
LPCTSTR co t descriptio co t int csidl;
} ecial_folders[] = {
_T(%Desktop%), CSIDL_DESKTOP,
_T(%Internet%), CSIDL_INTERNET,
}, * TCHAR
szFolderPath[MAX_PATH] = {0};
p = &am ecial_folders[0];
for (int i = 0; i sizeof( ecial_folders) / sizeof( ecial_folders[0]); ++i, ++p)
if (0 == _tcsicmp(szVariable, p-description)) {
::SHGetSpecialFolderPath(NULL, szFolderPath, p-csidl, 0);
return szFolderPath;
我的原则是:对于代码,差不多就可以了;对于接口,需要反复推敲。否则会让很多普通程序员可能陷入一些语言的技巧中无法自拔。
  2010-12-03 17:55 hejiang' blog
呃,我不是楼主...
改过以后不是干净很多嘛?想知道内容看表就是了.没有很难读啊.
脑残这个评价我还是想保留的.
如果不是几十个条件而是成百上千个呢?
也是这么if else下去么?
如果这个函数被调用的次数很多,必须优化检索速度呢?
换一个角度来说.如果是做节点覆盖的代码测试,一个我只需要测一个循环加一个判断,而另一个我就必须要测试所有的分支.这样的代码虽然可以运行,但在我眼中是绝对不可以容忍的.这不是可不可以用的问题,而是原则问题.多分支等于多错误-这个是真理.少用if和switch会让程序bug少很多.
  2010-12-03 18:30 Michael Peng:
@winter-cn
我是QA,写过一些单元测试,整个codebase系统里的测试是十万以上的规模,有几个cluster的机器每天在跑各种测试,有专门团队维护build/test服务器。每次check-in以前要作peer review,测试覆盖率都有要求
我就不评价了 你做的工作跟你看过的大型程序与否没关系 即使你做的事情完全与软件无关 也有大把开源项目可以参考 根据你所说 你做的项目流程很不错
如果你这篇文章叫作编写良好C++代码指南,然后你拿金山的代码举例子,我觉得完全赞成。
但是你要评价一个开源项目,在你说出被忽悠了,达不到工业级标准之前,你最好先把这些代码的架构和设计看明白。
你这种看了几行就下结论的态度,正是寄于开源社区甚至一切技术社区的毒瘤,你阅读金山代码到评论出来,唯一获得的就是虚荣,你只看到了不好的东西,就忽略了所有有价值的东西,结果就是你一无所得。
我没有看金山卫士的代码 也许它真的很差 但是达不到工业级标准这样的论点,绝不是你举出来的那几个论据能支撑的
  2010-12-03 18:49 南柯之石
好吧。
没有必要。
  2010-12-03 19:10 ark royal
没说你是楼主,搂主而已
co t struct {
// 这里用匿名结构,co t修饰指出内容为co t
LPCTSTR co t descriptio // co t修饰指出指针为co t,LPCTSTR中的C只是指出指向的内容为co t
co t int csidl;
// co t修饰指出内容为co t
} ecial_folders[] = {
_T(%Desktop%), CSIDL_DESKTOP, // 这里不必用{}将每一项分开, 编译器明白
_T(%Internet%), CSIDL_INTERNET, // 即使是最后一项,后面的逗号也可以保留,编译器会安全的忽略它(同javascript)
}, * // 再用一个指针,在枚举时可以加速,编译出来比每次用 ecial_folders[i]少几个机器码
TCHAR szFolderPath[MAX_PATH] = {0}; // 内容初始化为0
p = &am ecial_folders[0]; // 也可以写成 p = ecial_folders, 但这样写更正规,编译结果一致
for (int i = 0; i sizeof( ecial_folders) / sizeof( ecial_folders[0]); // 利用sizeof在编译时计算,性能考虑
++i, ++p)
// 从语义上讲,用++i, ++p比i++, p++编译器更容易优化
if (0 == _tcsicmp(szVariable, p-description)) {
::SHGetSpecialFolderPath(NULL, szFolderPath, p-csidl, 0); // 这里不需要判断返回值,根据函数定义,失败时直接返回空串
return szFolderPath;
恕我直言,大部分中国的软件公司都是数代码行数来看程序员工作量的。这样考虑的话,我们的程序员每天能写几行代码啊?
  2010-12-03 23:30 hejiang' blog
这位兄台,先别动气。
可能C++技巧你比我更娴熟,但是我一直强调的是程序的合理结构,不是利用语言特性的hack。
为什么推荐使用表驱动我可以有以下理由:
1.代码清晰,后期维护简便,由于是重复代码,完全可以通过代码自动生成工具来进行维护,可谓一次投入享受终身。
2.测试轻松,如果按照节点覆盖测试法来测试全是if的程序,那将会是很痛苦的,因为你必须测试所有的分支。编码规范严苛的公司完全可能会让你一丝不苟地全部测试这无谓的重复代码。
3.在完成1的代码工具后可以通过工具建立有序表,使表检索速度大大加快。
等等等等。
我平时做嵌入式开发的。对资源很敏感。一共就64kRom如果都这么浪费的话程序根本没办法写地下去。而且你说的代码量估计工作量那是很古早的历史了。我在完成核心代码之后,一天通过工具自动生成的代码可能就超过3千行。
因为平时写设备用程序,是绝对不允许出错或者死机的。出错或者死机就代表着事故。少用分支,多利用程序结构来解决问题绝对是经验之谈,带来的直接好处就是3w行代码的程序还能拍着胸脯保证绝对不会死机。
  2010-12-04 00:21 我看到新闻是说“金山卫士将逐步公开开源代码,首期开源隐私保护器及漏洞扫描器。”
于是这些代码应该是指这两个小东西里的吧?实话实说,作为附加的两个小工具,写成这样已经不错了,如果你真的在大公司赶工做过产品你就明白。所以如果其他厂商有胆子开源,你会看到大家都差不多。
  2010-12-04 00:23 ark royal
你说的“程序结构”具体是什么技巧?
  2010-12-04 04:35 功能实现就好,
传说这只是个壳,,,,核心的东西要申请。。。
  2010-12-04 10:43 要知道金山的人全去做网游了,金山卫士是被金山收购的一个公司做的。现在是雷军控股的可牛把金山卫士吞并了。
其实有很多系统都是运行很多年了。在稳定运行下,重构的风险是很大。
对用户来说代码良好 并不能比的上稳定运行。系统停摆一个小时的损失是巨大的。
  2010-12-04 11:09 晕,说代码质量问题的博客都在回复些什么啊……就不知道就事论事么?
2010-12-04 12:53 winter-cn ro里有50个c 文件,rule目录里有30个,除开驱动相关和界面相关,主要逻辑都在这里.如果我读了这60%的代码还不能对这个项目作个评价,那要如何才算.
当然没开源的我还没读过,也不知道质量如何.但从我读到的代码质量来说可以说 ro里的是不够专业的.别的问题不论,RuleManager里放一堆像测试不是测试的东西,文件名和内容对不上,对以后维护会造成很大困扰,怎么来说都不会是一件很专业的事.
  2010-12-04 17:12 // MichaelPeng: count应为length
// 若文件没有后缀而路径有后缀,如C:\a.b.c\dfgh 则结果应为0或-1,但函数返回7
int KFunction::GetFileExtCount(LPCTSTR szPath)
LPCTSTR zChr = _tcsrchr(szPath, _T('.'));
if (! zChr) return -1;
return _tcslen( zChr);
这个的确有问题。。。。应该先去找到最后一个'\'再去找最后一个'.'
  2010-12-06 10:47 hejiang' blog
说别人脑残的人其实是没明白编写的上下文。这个函数本意是对各种不同的环境变量进行展开。当时设计时考虑的是会有各种环境变量并有不同的展开方式。只是没想到会有这么多甚至可说基本是调用SHGetSpecialFolderPath的而已。难以做成表驱动。
  2010-12-06 10:58 另外大家做的工作不一样,对编码规范的看法也不一样。
有的人做的是那种长期的工程,对质量要求自然也高。
这个无可厚非。但如果做过这种互联网产品的肯定深有体会,
1周一个版本,自动化测试是绝对没有时间的。
能保证尽量快速发布才是最重要的,后续进行bug修复和升级。
这种情况下那些所谓的co t、表驱动啊都是些无关紧要的问题,
如果要改动必须自己担负由此可能带来的隐患,
试问这种情况哪个程序员会没事改动那些已经跑在上千万用户、没有明显bug的代码?
所以那些对代码吹毛求疵的人设身处境的为别人想想吧。
当然楼主说的部分编码规范还是很有必要的。
  2010-12-06 11:36 vforkk
同意这位仁兄,写代码也好,做架构也好,总有疏漏之处,更何况是安全软件这种规模不小的东西。
楼主揪出代码中有坏味道的地方这种精神是好的,但是带有主观感***彩的话,就有点过了,金山是国内软件行业的翘楚,但是就算再牛叉的人也有可能犯错误,我们应该带着学习的态度去指正,而不是看到什么就去骂,对骂不是问题的解决之道,吸取经验教训才是正道,楼主以为呢?
  2010-12-06 12:14 专门注册账号上来感谢楼主,其实楼主说的挺中肯
  2010-12-06 12:44 专门注册一个账号,感谢楼主的发现
  2010-12-06 13:22 很明显,rule目录下是一个完整的测试工程,RuleManager.c 的所有函数都是测试用的,执行代码中没有调用到。别跟我说那些测试代码不规范,你一个人从开始写到正式发布,只用四五天时间,有测试代码就很好了。
楼主有些见解很肤浅,如:
// MichaelPeng: Match从语义上也应为co t,且参数pData也应为co t
解:规则会写入数据到pData中的,怎么可以是co t?
// MicahelPeng: 在向m_mapDirRelated中插入数据时都调用MakeLower转化成了小写,但在比较时却不转化,假定调用者作了转化??
解:这是一个监控软件,对匹配速度要求很高;作者在参数传入的时候,统一做了预处理,如:小写化,路径长度,后缀长度等,都是给后续匹配省了时间。你这里的评论只能说明,你没有深入看细节!
同意189楼的见解,大家工作内容不一样,代码质量自然不同。如果你仅仅批评代码风格,我赞同你。如果你因此就批评程序作者,或者金山公司,那就说明你太浅溥了!
  2010-12-06 13:25 我做不到,并不表示我就不能评论,或者说我就不能批评?是不是?
为什么有些人对于 批评 就这么的不能接受?
  2010-12-06 13:29 其实我觉得博主写的确实不错。从另外一个思路去考虑的话,我认为市场和技术是不成比例的,技术好不一定市场就好,同样有的产品市场很好但可能代码就这个水平。
  2010-12-06 13:46 ark royal
有一定道理。另外,代码的每个分支要测试,表的每个入口其实也是需要测试的,概念转换了本质还是一样的;
对于代码工具的问题,有时候是会生成一些源码,但应该尽量使用模板的方式(当然如果简单用类继承就搞定更好),将这些通用的代码和程序员编写的业务代码分离,这样既避免了偶尔的人为错误也方便了调试,比使用工具生成一些代码,然后让程序员在其中填格子要好些。
  2010-12-06 13:47 这个irule接口是模块内使用的,并不是导出接口,楼主要求过分了~
那个DPrint在调试版会写日志文件,可以清楚的看到某一条路径匹配了哪些规则,并且各自的返回值。在测试过程中,如果某些路径匹配错了规则,完全可以通过日志追溯到原因。毕竟,系统文件访问量非常大,问题往往一闪而过,所以这个方法是非常有效的~
此程序的规则完全从文件读取,规则与逻辑分的很清楚,从规则中看不到规则文件的描述,没有耦合。
匹配逻辑用一个二叉树来完成,没有使用if,else呀,挺有创意的,主体结构非常好~
请楼主深入看清楚,不要被一些不紧要的细节迷惑,可能这个程序的参与者水平不一样,所以个别地方写的不太恰当。
深入看了之后,我就觉得还是学了不少东西的~感谢金山开源~
  2010-12-06 13:55 weolar
我想这只是他口头禅而已,不是要故意骂人。表驱动在做驱动时的确用的很多,主要原因是驱动比较结构化,比较容易抽象成表的形式;而做应用则很难规划得这么整齐和模式化:有时候代码写成了,才发现它是同一个模式,于是想改一改,但转念一想,万一明天发现一种新的情况(分支)需要加入呢,还是别改算了。很多时候都这样。
  2010-12-06 15:37 像你这样水准的程序员,在中国还是很少的,特别是C++程序员,已经被C++中的语法细节搞昏头了。
其实,上面你提的错误,还不能算是非常严重的问题,一个项目有没有问题,主要看它整体的设计有没有问题,你那些错误,还是能很快 的完善起来的,因为,如果只是co t的问题,加上去就好了。不会扩散到全局去。
  2010-12-06 20:44 混口饭吃罢了...
各位牛人多提点纯技术的观点吧
我等小虾在围观中
  2010-12-06 21:22 围观。。。
  2010-12-06 21:42 柳晛:
@金贵软件
金山开源有两个目的,
一是提高自己的口碑,因为外行人总认为源代码是软件中最值钱的东西,其实不然,任何一篇文章都是开源的,也没见谁读了谁的文章就仿造一篇更好的出来。
二是培养一批免费的兼职程序员完善他的金山卫士,就像人人网的小游戏一样。
扫了下代码,感觉金山此次是开放了c++的界面编程而已,并没有什么神秘的东西!!!我看打击360的手段多点,忽悠下我等小虾之辈罢了,当然究竟是不是如此,也许只有时间能证明了!ksafefilemon.sys不知道里面写了什么东西,估计我等入都没机会看到了。。。
  2010-12-06 21:44 从本质上说这里面就是个trade off,也就是平衡和取舍的问题。产品项目的预算投入,进度压力,各方面人员的协调,风格和习惯的统一,等等。
许多优秀开源项目,比如Boost,其中很多作者本身都是学者兼开发或者是带有研究性质的开发人员,在高校、非盈利组织或者商业企业的非直接盈利项目的资金支持下,在很少进度压力和商业压力的情况下,精雕细琢,多次迭代后,构建出的精品代码。用这样的标准来要求所有的软件产品,特别是商业产品(当然除去少数关系重大和长远的基础核心部分外)的构建,是不科学的,也是不合算的,因为及时占领市场和足够的盈利才是商业软件最重要的目标。
回头来看金山目前开源的这些产品,比如这里讨论的金山卫士,其从推出就是免费的,是为了市场上的先期推出的同类工具软件及时比拼占领些许相关市场份额,其并不是金山的基础和核心产品;从这些先天的条件看,这个产品的商业投入不会很大同时又有快速推出的要求,能有目前这样的产品质量,是合理的,从企业角度和用户角度看也都是可以接受的。
说到这里,就感觉有必要涉及一下“重构”,这个现在大家都很重视同时也经常谈及的话题。为何大家都很重视?而且常常谈及?这其中当然有软件构建本身的特点,比如对需求理解的不断深入和调整、设计的不断改善和演进、代码风格的统一以及细节的完善等等;但是,有个大家在潜意识里都感觉到,平时却很少谈及的缘由--进度和成本,因为有了这些压力,产品的第一版往往不是很完美的,然后如果还做后续版本的话,那么就要引入重构;因为有了这些压力,在经过多年之后,如果这个产品还存在的话,那么就要进行大规模的重构。简单的说,重构之所以重要,不仅仅是软件构建本身特点所引发,也是商业压力之下的构建过程的有效应对之道。
  2010-12-07 11:23 有些地方太吹毛求疵了
公司写的软件是商品而不是艺术品、试验品
是在有限的时间和人力条件下完成的,完美的代码不等于完美的产品。
第5条写了这么多条件判断确实不应该。把字段串和id的映射放到map中就好了
  2010-12-11 17:44 jiang3118
统一1楼,代码能开放就已经不错了。三人行必有我师焉,
”完美的代码不等于完美的产品“-引用【#204楼 】
  2011-01-07 11:08 楼主说的很好,我非常赞同。
中国人的一个毛病就是自我要求不严格,所以有一种倾向,每当遇到批评的时候,不管这批评是指向谁的,都要跳出来庇护一翻。理由往往就是这样:1)能做到这样已经不错了,不要太苛刻;2)提出批评的这人,你来做一个试试?3)这些批评根本不是问题,是鸡蛋里挑骨头。
同胞们啊,如此搅混水,这是进步的好势头么?
金山开源,确实是一件很好的一件事,是很大的一个进步。一个人的力量是有限的,一个人的思想也是有局限的,开源的意义,就在于集众人之力,集众人之智慧,共同把一个软件变得更加完美。博主在这里批评代码的质量,这正是开源者所渴求的,是对开源做出贡献的一种方式。
  2011-01-08 12:07 感觉知道别出明显漏洞就凑合着用呗
  评论共3页: 3 注册用户登录后才能发表评论,请
最新IT新闻
最新知识库文章
简洁版式:
网站导航:
2010年12月
随笔 - 52
文章 - 0
评论 - 403
引用 - 0
昵称:
园龄:
粉丝:
关注:
搜索 常用链接
我的标签
随笔档案
最新评论
编译就不应该过
--光庸
符合LZ要求的大有人在.~人家开的价,一般地公司会请不起的.~
还是酌情考虑吧~
--dotNetDR_
给vs team 开了个bug,已经被关了,resolved as by design,详情可以去看,大意是这里循环里的i的确已经out of scope了,但debugger实际上延伸了i的作用域,...
--Michael Peng
这么大个的Vs2010有点Bug是正常的
--toEverybody
师父的功力又深了啊
--胡晓航
阅读排行榜
评论排行榜
Powered by:
Copyright Michael Peng搜索框载入中...
你的位置:
阅读文章
中国互联网正迎来历史上最大规模的不兼容事件:金山、搜狗、傲游、可牛、百度五家厂商今早联手举行发布会,表示
。但不兼容的方式尚未确定,有业内人士称此举意在联手给360制造舆论压力。
在上述五家厂商联手发布的新闻稿中,列举了“八大谎言”,称360长期以来打着“安全保护”,实施的却是“恐吓用户”,指出“360漏洞补丁最安全”、“云查杀”、“尊重用户”等均为谎言。
上述厂商称今天公布的八大谎言“仅是
的冰山一角”,“现在已经掌握了更多的谎言证据,未来将进一步公布”。
新闻稿同时披露,“4亿用户均沦为360筹码,用于满足其商业利益野心”,相对应的事件是“360就先后以安全的名义手刃金山网盾、拦截可牛杀毒、硬拆遨游浏览器、恶评百度软件,污蔑腾讯公司”。
五家厂商在现场要求“360立即放弃自己的满篇谎言,真心的向全体中国网民道歉”,并表示如果360“坚持欺骗和绑架用户”,五大厂商将选择不兼容360系列软件。“我们将选择最惨烈的方式,不惜玉石俱焚,与360战斗到底,永不妥协!”
这是继腾讯在装有360机器上停止运行QQ后,互联网第二批企业联手对360“宣战”,意味着中国互联网将迎来历史上最大规模的不兼容事件。
不过目前,上述五家厂商具体的不兼容360系列软件措施,尚未对外公布。有业内人士称此举意在联手给360制造舆论压力。
虽然昨晚360发布声明称,在国家相关部门的强力干预下,目前QQ和360软件已经实现了完全兼容。但腾讯方面表示360的说法不实,腾讯的既定部署未变,不会做出妥协。
据第一财经网披露,工信部电信研究院相关负责人4日接受记者采访时透露,针对此次360和腾讯纠纷的工信部官方调查程序正式启动。接下来工信部电信研究院会召开专家会议,对此事进行讨论。
互联网业内人士及法律专家均认为腾讯及360侵犯了用户利益,认为此次恶性竞争的程度前所未有,业内人士呼吁当时双方冷静,并呼吁权威软件管理机构进行协调。
目前360并未就此事进行回应。
以下为五家厂商联合公布“八大谎言”:
谎言1:
金山网盾不安全。事实:以安全名义恐吓用户,强制用户卸载金山网盾,开创软件业最恶毒竞争之先河。 金山网盾首创防挂马、防钓鱼等功能,保护数千万用户的浏览器安全,深受用户喜爱,用户量增长迅猛。360在感到金山网盾带来的威胁之后,先是强行抄袭产品 创意,推出山寨的360网盾,苦苦追赶半年时间但终因底层技术实力不足导致差距巨大。为除后患,2010年5月,360悍然发动了对金山网盾的攻击,捏造多项莫须有罪名,频繁弹窗对金山网盾大肆抹黑,同时启用云拦截、云暗杀、自动卸载等技术,强迫用户放弃金山网盾。在将金山网盾驱逐出用户的机器之 后,360又在用户中强行推广技术结构完全抄袭金山网盾的山寨360网盾,达到自己彻底驱逐竞争对手的目的。
谎言2:
只有360的漏洞补丁最安全。事实:为产品竞争视用户安危为儿戏,阻止用户***高危漏洞补丁。漏洞修复是安全类软件最吸引用户的功能,360为了保证用户只用自己的漏洞修复功能,专门针对金山卫士、QQ电脑管家等软件设计了恐吓拦截框,当用户使用同类 软件***补丁时,360会弹出该框,恐吓用户“此漏洞补丁将导致系统不稳定”。但同样一个补丁,如果用360***,则无任何提示。更令人发指的是,即便是 windows官方推荐的高危漏洞补丁,360也照拦不误,这相当于把用户的系统拱手交予病毒木马。但这对360似乎并不重要,重要的是能够赢得竞争。
谎言3:
360是“专业”安全厂商。事实:欺骗4亿用户,胡乱解读“超级工厂”病毒。国际权威的反病毒厂商 卡巴斯基指出,对于“超级工厂”这样一款标志着全球网络安全进入“基础设施保护时代”的恶性病毒,目前全球尚未有好的应对解决方案。之所以中国所受影响不 大,是因为该病毒并没有大规模进入中国。但360为了改变自己的“不专业”的安全厂商形象,在连超级工厂的基本技术原理都没搞清楚的情况下,不惜欺骗全体中国网民,大肆渲染“病毒疫情”,营造“超级工厂”病毒即将大规模入侵中国的恐怖气氛,然后自我吹捧:“因为有360系列安全软件的存在”,“中国已躲过 ‘超级工厂’病毒攻击”。自编自导自演了一出欺骗4亿网民的宣传大戏。
谎言4:
云安全!事实:云暗杀。2010年5月25日晚21:30,可牛免费杀毒第一个版本仅仅上线5分 钟,就遭遇360安全卫士的拦截,经过可牛工程师分析发现,360在可牛发布前一天已部署好云端的暗杀指令,只要360安全卫士判断文件是可牛杀毒,云端就会发布指令进行拦截,阻止用户***。更加令人发指的是,这个360的超级黑名单中除了可牛杀毒以外,还有金山网盾和遨游浏览器。这个名单可以根据
云端随时部署和撤销,杀对手于无形之中,真正的神不知鬼不觉。
谎言5:
云安全!事实:云偷窃!我们的工程师在360浏览器里发现一个惊天秘密,360浏览器竟然有一个 “偷窃名单”!当用户用360浏览器访问这个偷窃名单中的网站时,360浏览器会向360云端网站偷偷发回一些加密数据,360将获知用户访问这些网站的 行为,便于达到其不可告人的目的。而用户访问名单之外的网站时,360浏览器则显得很“正常”。目前在偷窃名单中的网站有:遨游官网、暴风影音官网。这个名单可以接受来自云端的指令,随时更换名单里的网站
谎言6:
360尊重“用户选择”!事实:尊重钱的选择。付钱即为好评,没钱即为恶意。360曾多次找到百度,恳请开展合作关系,在360系列产品中推荐百度搜索, 便于从百度公司获得巨额分成收入。在双方合作期间,百度的工具栏和地址栏产品在360软件中被定义为好评。然而,合作一旦终止,360立刻变脸,操纵用户 投票结果,把百度工具栏和百度地址栏两款软件定义为“恶评插件”,并描述为“此类插件具有恶意行为,可能会危害您的电脑,建议您立即清理”。在商业利益面 前,360肆意更改用户评价,用户选择沦为
谋利和恶性竞争的挡箭牌,遮羞布。
谎言7:
360挑战霸权,屏幕硬汉!事实:利益驱动,金钱导向!360与卡巴斯基的合作,曾经给无数网民带 来了实惠。为了获取分成收益,360更是卖力向用户推荐卡巴斯基,关系亲如兄弟。而伴随着360与卡巴斯基合作的终止,360防火墙开始频频拦截卡巴斯基 升级。前不久360之所以攻击腾讯,根本原因不是反霸权,也不是真正关心用户隐私,而是因为腾讯的电脑管家触动了360的利益链条!360在微博上苦心打 造的硬汉形象,其实驱动力完全来自于利益!
谎言8:
只有360浏览器是安全的!事实:为了利益,360把全世界的浏览器都定义为不安全。360浏览器 每年为360带来高达上亿收入,为了保证商业利益的最大化,360会阻止遨游、搜狗、腾讯等全世界的任何浏览器成为默认浏览器。当用户设置浏览器默认时,360弹出巨大的危险提示框,将这一完全正常的操作描述为:“可能会被木马利用,建议阻止”。用户如果在15秒内不作选择,则自动替用户阻止。
为了利益,置安全厂商的基本信义于不顾,以安全名义恐吓、劫持用户,使用户放弃对其他浏览器的自由使用,这是对用户基本知情权和选择权的严重践踏!
虽然,我们市场的份额小于360的份额
虽然,我们不会用煽动性的语言,诱导和欺骗用户
虽然,我们不能组织网络上庞大的七毛水军,为自己摇旗呐喊,制造民意
但是,
我们有着自己的商业道德底线,
我们有着维护行业正常发展的责任和义务。
我们深知,这种谎言满篇,恐吓、诱骗用户的竞争方式,最终将导致行业发展的生态灾难,最终损害的是我们4亿网民的切身利益!
我们要求,360立即放弃自己的满篇谎言,真心的向全体中国网民道歉!如果360继续执迷不悟,要将“欺骗用户和恐吓用户”的行为继续到底,那么,我们将选择最惨烈的方式,不惜玉石俱焚,与360战斗到底,永不妥协!
属于分类:
本文标签:
文章作者:
流行热度:
正在感受现场气氛...
生产日期:10年11月5日 - 16时11分34秒
上一篇 :
下一篇 :
真的,我猜你也会喜欢的:
温 说:
360很流氓的
温 说:
沙发,很好。。。
叫姐 说:
腾讯很无耻的
Hugh 说:
挤挤~
360,TX都很流氓。
几天没登QQ今天上了下差点卡死!
360不说了,卡巴免费放出一年激活码了,懒得理它!
ro lan 说:
360是小偷小摸,QQ\百度 等是江洋大盗。360是犯法了,但是由江洋大盗来告一个人小偷小摸是不是太搞笑了?
西门又吹灯 说:
能掐起来的俩货都不是什么好鸟
羡慕嫉妒恨 说:
支持腾讯
夺 说:
腾讯不窃取隐私是怎么知道我装了360的?qq web2.0的gmail事件没人知道吗???***手去死吧
夺 说:
百度工具条不流氓??《电脑爱好者》有一篇各种工具条测评,让你知道什么是流氓又无耻
360确实有点垃圾,本来就不怎么看好他。又返回他的前身了
了无痕 说:
好一个 马甲
我儿是李刚 说:
你更垃圾
theend 说:
360***自焚,自取灭亡
哈哈 说:
哥们,做人不要太腾讯啊
嗷嗷 说:
360一开始出来的时候山寨得半死!
现在还坑人。。。
0.0 说:
腾讯不是山寨死了?
xmagicj 说:
之前卡巴斯基确实有这个BUG 导致 win7无法启动
真的` 在 新版中 更新过这个BUG“
其他的 不好说 `百度插件 确实评价不高`一直被各大网友评为流氓软件,经常绑定其他软件***`
醉酒愿兮 说:
百度、搜狗、遨游被TX抄袭都不吭声,360估计还是拗不过TX,不过TX确实太霸道了!
WTC 说:
360要被灭了,QQ电脑管家就可以大行其道了。反正360不能倒,金山 遨游 百度之流也只能在TX底下当个小喽啰
wei 说:
不之是腾讯流氓点还是360流氓点
iPC是少有的没有***手的净土
KILL YOU 说:
LZ是TX请来的吧!
新闻来源:新浪科技
11月5日中午消息,金山、搜狗、傲游、可牛、百度今早联手举行发布会,宣布五家厂商的客户端软件将不兼容360系列软件。不过蹊跷的是,搜狗的相关负责人并没有出席今日的发布会,而搜狐CEO张朝阳也公开表示搜狗没有上述计划。
据了解,搜狗实际上最初并未出现在上述联合信息发布者的名单中,但在今日早间的发布会上,已经出现了搜狗的名称。
然而在今日的发布会开始之后,主持人宣布搜狗CEO王小川因为临时有事不能出席,并因此向大家致歉。不过更加蹊跷的是,在发布会临近结束的时候,搜狐CEO张朝阳公开表示:“据我所知,搜狗没有与360不兼容的计划”。
针对上述事件,新浪科技科技***联系张朝阳和王小川,但二人的手机均没有人接听。至截稿时,搜狗官方也没有发出详细信息。
千里含笑 说:
继续围观中
dd 说:
腾讯不扫描,怎么知道我装了360?????qq只是个聊天软件???简直是放屁
这个 知道你装什么软件 根本不用扫描硬盘。。
调用一个WINDOWS的系统函数就行。
360蒙蔽了太多小白了
叫姐 说:
不管扫没扫影盘,一个聊天软件,对我装了什么软件了如指掌,这是他该干的事??他想干啥??以腾讯的一惯作风,不窃你隐私是不可能的
☆诺♂迷★ 说:
调用函数神马的那个“dd”不懂,别怪他。
Fi all 说:
360只会说一些骗小白的话,懂一点软件和系统构架知识的都知道根本不需要扫描硬盘才能知道系统运行了什么软件,唉没知识真可怕
垃圾360 说:
张口闭口就是扫描,切丝~
Lan 说:
对小白来说360就是神啊~随便蒙骗几下就行了~
Raul 说:
也只有小白才用360这样的垃圾软件,不仅垃圾,而且流氓,况且,这次的战争,根本就是360单方挑起的,我希望TX干死360。
小肥脸塘泥 说:
楼上那几位。。。。调用函数是360的经理说的。。。。。。
hdhdd 说:
楼上这些人搞得貌似自己技术很精湛。。你们有深度研究过QQ的源代码?否则不要直接下结论,行不?QQ扫描硬盘其他文件很早就知道了。只是360现在才公开曝光出来。。不过360也不是什么好东西。。
TianSIR 说:
看来装技术流的也不少,照楼上某位所说,我调用个函数实现文件上传就不算窥探隐私了?!我想问下一个软件的功能有多少不是调用函数实现的???
ROC 说:
晕死。大家不知道QQ有自己的安全保护吗?既然要保护,必然要扫描文件。难道360不扫描文件就能杀毒?
草根小猫 说:
360确实虚伪~为什么这次要这么针对腾讯?!是因为qq软件管家?!
konghy 说:
看完了,感觉腾讯以及腾讯的走狗们不是在威胁360,而是在威胁我,如果我继续使用360的话,他们就把我踢出网络世界。此时此刻,我想说生命诚可贵,自由价更高!没有人给你们这种权利,来决定我们应该***什么软件!我反对霸权主义,反对强权政策!
T_Twi 说:
看到支持360的我就蛋疼,是什么让他们对360这么有感情
亦复如是 说:
看见你我也蛋疼
Lan 说:
因为无知 要么就是因为7毛~你懂的 ~10万水军呐~
虽然QQ不是好东西~但360这种蒙骗用户的水货流氓更该死
ROC 说:
是啊。无知的很多,估计很多挺360的根本就不用360。说实话,非常喜欢以前的360,但是今年以来,发现360臃肿了。而且动辄用安全威胁其他浏览器,其他杀毒软件,这次又劫持QQ按钮。虽然我也很不喜欢QQ的广告什么的,但站在用户的角度看:360蒙蔽并讨好了用户,QQ为了自己的利益强制用户作出选择。站在纯产品的角度看:360劫持了QQ的程序,这个是最流氓的,最无耻的,是违法行为。这个是不容置疑的。虽然我也不喜欢QQ的广告,但是人必须有基本的道德底线。今天360能用流氓手段对付腾讯,将来要干掉比他弱小的就更肆无忌惮了。
123 说:
我也比较喜欢以前的360(应该是08年的时候***的吧…)
现在受不了了,就换成QQ的管家了.结果也很垃圾…等以后QQ也不行了不知道要换什么…
话说我们学校之前这几天很多人在说这事…
不过大多数支持360…
亦复如是 说:
我RI你大爷, 腾讯太不要脸了,还有这么多的水军,收钱的死一***,包括迁出的
低调の王 说:
一坨落井下石的XX、什么联手都TMD是为了自己的利益。少JB来冠冕堂皇的指责什么。
且歌且行 说:
看到有些人还在那里替TX辩解,我真想问候你母亲!都TM垄断成什么样了,也难怪,TX没少***,谁是***谁就是***下的!
Lan 说:
你让那些360的水军情以何堪???
对IT业有了解你就知道谁养的G多了~
就你这素质一看也不是神马好鸟
yangchenx 说:
恩…..话说扫描一下注册表就可以知道很多信息了
这就是这些公司的水平。。。看透了,回去装McAfee
Lan 说:
Mc不错的啊~Dell上很多都内置这个~
↗尛茬. 说:
唉,我讨厌tx,360挺好用的
A 说:
我有装遨游,但是从没被360提示有问题,连改默认浏览器都无上述表现!
我不知道这TX跟360谁对谁错~但是我就是讨厌有人要挟我!我用什么软件关你什么事,你区区一小企鹅凭什么左右我!难道你以为没有你地球不会转?
Jack 说:
支持 哥们 你说我心坎里去了
且歌且行 说:
回复Lan:你也别“神马好鸟”了,把舌头捋直了说话。360流氓出身不假,但是就这几天的斗争来说,QQ民心尽失,当然,像你们这样支持它的也挺多!我是在骂***,不知道哪里沾着你了?也就是国家法制不健全,不然像腾讯这样的公司,真的早就破产了!往往令我气愤的,打个比喻,汉奸比鬼子更可恨!腾讯本身那样做,是因为关乎他本身的利益,可是还有一些人跟在他后面替他擦屁股,这些人,连腾讯都不如!
散漫 说:
我觉得腾讯公关这一点做的很NB,贼喊捉贼,一直叫嚣着360十万水军什么的,结果普通用户根本不敢说腾讯的坏话,一说话就被指为360的7毛,这一点可以去CB看。
事情发展到现在这个样子,本来围观的群众被腾讯一个艰难的决定拖下水,真的很不爽!
别拿windows api来做掩护,你腾讯一个IM,凭什么扫描我装了什么软件?不扫描硬盘扫描***的软件就不叫侵犯隐私?
我眼见他起朱楼,眼见他宴宾客,眼见他楼塌了!
365 说:
360不是过去的3721.谢谢,支持360.而且就是不明白360浏览器也影响QQ的安全了?tx真够无耻的
245766006 说:
360就是班上第一的人,被考不过他的TX,金山,傲游等几个同学欺负。现在为腾讯和那些竞争不过的公司较好的就是大白!
ctlive 说:
我虽不用360,可是我更讨厌TX!
TianSIR 说:
都淡定,说白了两家都是利益之争
360SB 说:
360 7毛水军好强悍,几乎每条反360的都被辱骂性回复,TX要嘛没水军,要嘛水军素质太差不专业,大部分反TX的评论下甚至连回复都没有。。。
fishbone 说:
为什么要联手其它网商呢,就是看不习惯这QQ
霸道,这些网商都是出现过问题的。现在就集合大家来打击360。
而且为什么TX可以那么快复制到那么多的人的东西,这是我最想不通的,真的,他们有那么强大的实力?
fishbone 说:
其实我觉得大家都是冲着这TX的霸道而来。他太不人道。
端 说:
腾哥300个亿,360穷蛋,最看不惯钱多的人,有钱大晒啊,老是欺负穷人
雷雷 说:
最早接触360,发现用起来有点怪,就没继续用。原来发现背后还这么多故事~~
leo 说:
人不能无耻到这个地步
流沙 说:
在360与腾讯的这场大战愈演愈烈之时,有不少人都幻想一位灰发长辈把周鸿祎与马化腾叫到一起,慢悠悠地点燃一根烟说,“竞争不是乱搞。你们一个管10亿注册号、一个管3亿,乱弹窗的事儿已经搞大了,再打下去恐怕民众会遭殃。我看,差不多就收手吧!”
  出手易,收手难。更何况这已经不是单挑,是“群架”。
  “今天的互联网就是江湖,单打独斗肯定不行。兄弟们,一定要团结一切可以团结的力量,抱团打天下!”UCWEB董事长雷军过去写在微博上的一句话,本与“腾讯360大战”并无关系,但竟意外契合如今的态势。
  无论盖着怎样的美好说辞,在这场争夺背后,市场的利益才是站队的决定要素。从牌面上看,腾讯拉拢了百度、金山,360也有盛大、搜狐等撑腰,可是两大互联网阵营间和阵营内又有怎样的故事呢?《每日经济新闻》将逐一讲解。
  A
  腾讯阵营与360的恩怨
  金山 VS 360
  周鸿祎的金山旧缘
  金山和360的纠葛由来已久。两者最早一次大规模口水战发生在2009年下半年。9月份,周鸿祎炮轰“国内的传统杀毒软件20年没有创新,已经不能有效解决互联网安全问题”。一个月后,360公司高调发布永久免费的360杀毒1.0正式版。周鸿祎的“传统杀软无用论”引起金山反感。金山匆匆结束与360不足百日的合作推广“蜜月期”,梁子就此结下。
  双方最近的一次开火是在今年5月21日。金山安全突然指责“360安全卫士以存在兼容性等问题诱骗用户强制卸载金山网盾,置百万用户于威胁当中于不顾”。360公司则反称,金山网盾存在难以卸载、非正常强行注入等问题。
  5月25日,周鸿祎连发微博42条,历数金山种种问题。或受此影响,次日金山股价下跌。
  5月31日,口水战上升为双方相互诉讼,金山召开新闻发布会,宣布正式起诉奇虎360董事长周鸿祎侵害金山公司的企业信誉,要求周鸿祎公开道歉,并赔偿经济损失1200万元。同一天周鸿祎也宣布,鉴于金山故意破坏360安全卫士,危害用户电脑安全,决定正式起诉金山。
  卡巴斯基、瑞星 VS 360
  同行对手历次翻脸
  说到金山,就不能不提360和“老对手”卡巴斯基和瑞星的典故。
  2002年,俄罗斯的杀毒软件卡巴斯基进入中国,但一直未能有效开拓市场。2006年7月,卡巴斯基与刚刚成立不久的360安全部门合作,两者捆绑成一体,360安全卫士为网民提供免费查杀恶意软件、系统诊断及修复等服务,卡巴斯基提供半年的免费使用激活码。不到一年,卡巴斯基和360安全卫士双双进入安全产品的前三。不过,这对“好搭档”在2008年7月360宣布进入杀毒市场后分道扬镳,卡巴公开宣布中止与360的合作关系。
  2010年6月,卡巴斯基亚太区董事总经理张立申发表了一份致周鸿祎的公开信,痛陈了几年来周鸿祎“伤害”卡巴斯基的言论,并劝诫其“回头是岸”。10月,卡巴斯基称360不懂专业,胡乱解读“超级工厂”病毒,360宣布就此起诉卡巴斯基。
  瑞星与360的仇怨与其他杀毒软件厂家大同小异。2007年7月,当周鸿祎宣布要推出免费杀毒软件时,瑞星的反响最为激烈,曾一日给媒体发4封邮件,炮轰“360搅局”,紧接着双方就为 “误杀”事件干了一架,此后明刀暗***始终没断过。
  可牛 VS 360
  傅盛与周鸿祎的共同点
  出现在腾讯阵营的可牛公司,角色颇为复杂。有人说它是金山公司的“马甲”,据传两家公司在资本层面有着千丝万缕的联系,并正在进行合并。不过这一消息尚未得到金山方面或可牛公司的正式确认。
  也有人说,可牛身上有360的影子,因为傅盛。
  2006年3月,周鸿祎出任奇虎公司董事长,彼时,360安全卫士在公司内部只是一个不被关注的小项目,整个团队不足10人,由傅盛带队。7月,360安全卫士正式面世,成长喜人。2008年3月,360安全卫士已成为公司最核心业务,周鸿祎把360从奇虎剥离出来,成立独立公司运作,傅盛出任新公司总经理。傅盛本该一直陪伴360成长,可是在2008年8月,周鸿祎宣布进军免费杀毒的同时,傅盛黯然离开。据称,双方理念不合,失去了继续合作的动力。
  离开360后的傅盛在与360的18个月竞业禁止协议后,摩拳擦掌准备推出“可牛杀毒”。却不料5月25日晚间,刚刚发布5分钟的可牛杀毒就被360安全卫士拦截了。这次傅盛真的生气了,他通过网络向周鸿祎发出一连串质问,斥责“网络霸权”。
  傅盛试图借可牛杀毒挑战360、没想到却被自己研发的360生生拦在门口。这不由让人想起周鸿祎也是通过360安全卫士绞杀了自己一手创办的3721。从这个角度来看,两人还有些相似。10月29日,周鸿祎推出“扣扣保镖”紧盯QQ的同时,傅盛也立即扑上,“以彼之道还施彼身”,推出“361特警”扑杀360安全卫士。
  百度 VS 360
  从3721开始结怨
  百度此次公开站队到腾讯阵营,当然不是因为跟腾讯关系有多铁,其逻辑可能用“敌人的敌人是朋友”来解释更为妥帖。百度与360的恩怨恐怕要追溯到3721时代对 “中文上网”的火拼,以及360打击恶意软件时期与百度的恶仗。从那时起,周鸿祎和李彦宏两位业界大佬就成为老死不相往来的对手。
  那些都已是陈芝麻烂谷子的事了,双方肯定现在争的是当下的利益——百度和360正纠缠在两桩互诉的官司里。
  今年8月,百度以侵犯著作权并构成不当竞争为由向法院提出向360安全卫士所属的北京奇智软件索赔1000万元。360所在的奇智软件也以百度 “未按约定推广360浏览器”为由将百度告上法庭,索赔金额为惊人的5400万元。业内人士告诉《每日经济新闻》,百度与360纠纷的最根本问题不在于以上合同问题,而是感到了360扩张的威胁,尤其是其对百度核心业务“搜索”的觊觎。
  360阵营与腾讯的情仇
  盛大 VS 腾讯、百度游戏文学场上的争斗
  在360与腾讯纷争所引发的口水战中,盛大是最早表明立场的。
  10月初,盛大在旗下游戏《永恒之塔》的官网上发布了一条名为“360安全卫士安全提醒”的公告,称“鉴于最近360安全卫士发布报告指出,腾讯QQ存在侵犯用户隐私的问题。我们提醒您在输入账户密码、付费充值、进行私密对话时,请先关闭QQ,以保证个人信息安全。”
  盛大非常明显地针对腾讯,主要是因为自从腾讯冷不防超越盛大,坐上其捂热的网游业头把交椅后,今年第二季度,盛大又被网易超过,排名下滑到第三,憋了一肚子怨气。眼见着腾讯游戏的市场份额持续提升,盛大却持续下降,盛大只好先趁此撒撒气了。
  盛大与百度的摩擦也不少,尤其是盛大文学自诞生之初即自称与百度“搏命”,今年年初,盛大文学就为百度贴吧的盗版问题提出诉讼。近期最吸人眼球的事件之一,莫过于盛大文学CEO侯小强在网上叫板百度。10月27日到11月2日,侯小强连发数条微博,怒指百度公司需为盗版问题以及国内文化创意产业式微负责,并呼吁出版业同仁联合起诉。
  搜狐 VS 腾讯输入法引发的大战
  搜狐董事局主席张朝阳也在第一时间站出来力挺360。10月1日,张朝阳在其微博上写道,“在没有有效司法约束的中国互联网丛林,需要一种像自然界所存在的制衡力量,来把垄断公司作恶的行为限制在一定的可以忍受的范围。360对腾讯的检测就是这样一种制衡,让腾讯知道不可以仗势为所欲为。”
  张朝阳如此旗帜鲜明的表态,是因为腾讯与搜狐在门户、网游、输入法等方面都存在激烈竞争。
  今年6月,搜狐、腾讯互诉不正当竞争的“中国输入法软件第一案”暂告一段落。腾讯诉搜狐公司不正当竞争纠纷案,搜狐败诉并判赔24万元;搜狐起诉腾讯不正当竞争案,腾讯败诉并赔款23.15万元。
  双方的输入法恩怨起于2009年。搜狗称,腾讯在推广“QQ拼音输入法”时,恶意诱导用户删除搜狗拼音,构成不正当竞争。判决结果以“各打五十大板”,张朝阳按捺不住两次喊话:“某善于抄袭的公司原封不动抄袭了这一创新,如今反倒来告搜狗,真有脸啊,贼喊捉贼!”“要在美国,这种规模那么明显的抄袭最轻判赔也要在几亿美元以上。所以,在中国产生硅谷是个妄想!”
  其他 VS 腾讯各领域的正面交锋
  酷狗、世界之窗、鲁大师、迅雷、快播、暴风影音、多玩、UCWEB、人人网等公司也自动加入了腾讯的对立阵营,它们要么被周鸿祎投资过、要么在360公布的 “超级黑名单”中“惊讶地发现了自己公司的路径,非常愤怒”。无一例外的是,它们与腾讯在播放器、游戏、社区、移动互联网等领域有过正面交锋。
  值得玩味的是,网易等在此次“腾讯、360大战”中表现出的态度,似乎并没有介意360在今年9月“应用户投票”将其列入广告过滤名单。
  阵营内部斗争
  站到同一阵营的队友,并不表示“桌上吃饭、桌下互踹”的事就不存在。
  腾讯阵营中,金山、瑞星、卡巴斯基等杀毒软件的多年厮杀自不必提,只是在被360逼入免费杀毒的“坑”时,利益终于达到空前一致。
  作为国内互联网市值最大的两家企业,腾讯和百度的关系也一直微妙,双方在搜索引擎、即时通讯、媒体业务、视频、社区、电子商务、网络游戏等领域几乎是贴身竞争。
  360阵营中,搜狐与迅雷为了视频盗版的口水大仗还历历在目。2009年10月,迅雷CEO罗为民称与搜狐积怨已久,并指张朝阳因嫉妒而“指手画脚、误导舆论”,搜狐方面则拉来激动网、优朋普乐等成立“中国网络视频反盗版联盟”,与迅雷死磕。
  另一个有趣之处是,此次搜狐公司站到了360阵营中。而旗下搜狗仍身处在今年6月由金山号召成立的 “软件行业自律联盟”中,与360对撼。
流沙 说:
不好意思
忘记写了,来源:每日经济新闻
CEO 说:
360这次真的暴露狐狸尾巴了,搞大了
小Y 说:
更讨厌腾讯
经常疯 说:
本人用360***,1年下来感觉良好。也没发现360对遨游动手动脚,遨游现在还装着。百度工具条是流氓软件不假,我以前手工删过,那叫一个痛苦。拦截它一点不冤。360不太舒服的方面是下载更新时自说自话,也不问一声,突然就硬盘狂读,然后告诉你更新了多少多少病毒特征。
曼珠沙华 说:
看不惯TX克隆!360一般般!改用MSN吧!
个人意见!
鄙视你们 说:
金山:你的网盾我用了明显感觉自己系统变慢,启动时带太多你本公司的东西,你否认吗?
搜狗:***强制***公司产品,跳出什么有道词典之类,你反驳吗?
傲游:从没用过不评论
可牛:只用你的看图,不知道你的杀毒
百度:你呀最流氓,当初就卸载不了你的浏览器插件,你还好意思说,为了卸载你的插件我花了多少时间啊,我了个擦
微软做出了一个非常艰难的决定,如果检测到用户的电脑里有使用腾讯软件 将在五分钟内蓝屏,死机,重启 直到用户卸载腾讯软件为止
可口可乐做出了一个非常艰难的决定,如果检测到用户胃里有百事可乐,将自动释放敌敌畏和鹤顶红
中国移动做出一个非常艰难的决定,如果方圆百米内检测到有联通用户 将使这些用户不间断自动拨打110
迅雷做出一个非常艰难的决定,如果检测到用户电脑内***快车,将拒绝下载***
蒙牛做了个艰难的决定,如果监测到用户胃里有伊利牛奶,将自动释放三聚氰胺
可口可乐做了个艰难的决定,如果监测到用户胃里有百事可乐,将自动释放农药和汞。
中石化做了个艰难的决定,如果监测到用户汽车油箱里有中石油,将自动释放电火花。
杰士邦做了个艰难的决定,如果监测到用户有使用杜蕾斯,将自动释放艾滋病毒。
广电总局做了个艰难的决定,如果发现用户下载美剧,将自动转化成新闻联播
闽院电信门 说:
支持360
孰是孰非,
worlde ier 说:
组团趁火打劫!!
随便呀 说:
╮(╯▽╰)╭好讽刺的文章·
五十步笑百步
腾腾 说:
说明360很强大,说心里话,360的诞生,恶意插件的确省了不少事,看看今天反对360的几家破玩意,产品都不错,确都有垃圾插件,无耻之至,更何况腾讯现在针对的事牵涉到用户群
乐乐 说:
去死吧!***手!
黑魔道 说:
异次元还是一块少有的没有***手的净土,楼上自重
CEO 说:
360与这么多公司有矛盾,怀疑他人品有问题,这些东西出来很长时间不报毒,一夜之间全报毒,要么杀软不行,要么恶意误报,不管哪样,不光确定了人品问题,还确定了严重人格问题。的的确确,周鸿祎本事大不假,但是本事大了破坏力越强,最终会被人类唾骂
red_yaker 说:
腾讯已经不是原来的腾讯了,360不错,我觉得挺好,有机会一定不会用腾讯
百度操你妈 说:
异次元发的文章很少有这种***,真是了
Timele 说:
“(中国互联网的竞争)就像一个没有规矩的竞技场里,角斗士战斗到死。”
选择360卸载QQ的人,属于电脑实用主义,理智,思维缜密,平时用QQ无非是延伸了***和手机功能而已;而真正视QQ如命的,是因为他们的QQ加了许多让他们心如鹿撞的熟悉的陌生人!
QQ和百度是中国互联网最多bug的巨无霸公司。要抓弱点一抓一大把,但要打死他几乎不可能。
金山毒霸垃圾到连不懂电脑的人都不敢用它,它不去闷头研发自己的产品还在这里叽歪什么?!
可牛也算得上个人物吗?!选择可牛的人不过是些以P图为娱乐的小白们,没时间研究强大的PS,随便玩玩而已,可牛还真以为自己可以称得上老大了吗?!
Libra 说:
用过360的都知道好,没用过当然不会体会什么叫为用户着想,要不是依赖QQ,还会这么说??
小小名侦探 说:
很奇怪,反对360的,一般也都觉得疼讯不怎么样。但是支持360的,很多都认为360就是正义的。
Jack 说:
我做出一个非常艰难的决定,卸载QQ
Jzl 说:
看着它们..笑笑就好!
国产软件有几个是好东西?
2222 说:
中国的大企业没几个有良心的,支持那一方到最后还是蛋疼。。。。。
amx 说:
360好不好先不去管它,腾讯的垄断与抄袭行为已经人神共愤,要不是中国的互联网法律不清不楚,TM的腾讯能做到现在这规模,这次有机会打压TM,决不能放过这机会,挫挫它的锐气,如果能铲除它最好,有TM在,中国的互联网未来几十年还会走下坡路
hum_j1e 说:
妳客觀的角度來看看這件事~
amx 说:
小偷和流氓都可恶,但非要让从中我选一个去死,TM这小偷去死吧~~人家流氓好歹有文化,小偷呢,手贱人更贱,屡教不改本性难移~~够客观了吧
wmyd 说:
就事论事,360流氓和这次的事件没任何关系,关键是这次腾讯完全把自己当个鸟了。而且我使用360多年了,没感觉他哪流氓了,别拿3721说事,我5岁就听过“你爹是贼,你也一定是贼”的笑话,你水军可以,但别拿自己的智商开玩笑,小心弄假成真
jememouse 说:
和百度搞在一起的没几个不是垃圾.
cjcj999 说:
360是自找的,但我不希望qq赢,qq这么做和360一样是耍流氓,只不过耍的比较有“素质”而已,如果说360的老爸是李gang,那么qq就是李gang。
Mi 说:
邪恶的企鹅,给老子滚远点!
360?361倒是听说过,杀软只用Mcafee
m4king 说:
祝360早日倒闭,就这样,这件事情百度等已经做的够仁慈的,360把自己当成什么了?
不要脸 说:
搜狗是被腾讯强加进去的,好像上到张朝阳,下到王小川都说没参加过这个申明。
腾讯的牛逼到了一个地步了,居然强行摊派了任务给其他公司。
123 说:
360几百人的小公司为何处处针对腾讯,背后一定有一个巨大的财团在支持他,而且360从隐身器到扣扣短短一个月就推两款软件,哪有这么快的研发进度,因为推出一款软件,首先要市场调研,分析评估,试验,内测,再到推出,复杂的过程 哪么可以说明360陷害腾讯的阴谋,应该在半年前就己经有了
456 说:
全部不兼容才好,我从此不再用金山,搜狗,傲游,可牛,百度,我只用360.从此世界清静了.
评论内容:(必填)
( Ctrl+Enter快速提交 ) 你的大名:(必填)
邮箱地址:(必填)
你的网站:
热门围观趋势榜:
好多好多的分类:
好多好多的关键字:
随便拿点来看看:
刚刚有人说:
哇哦。。漂亮哦。。
站个位...
板凳?
喜欢,下载了。
前排...
终于抢到沙发了
只能说
国内的网站真TM乱
大把的垃圾
国外的很简洁
总是感觉中国现在很乱,产品质量完全谈不上,会发生这样的事故就像定时炸弹,只是还没有到,希望以人性为本,不需要你为国家做很大的贡献,只要做好每一...
旗下网站 | 基于
技术构建 |
| 本站使用2010-11-13 13:06
【谁能接替360?】360安全卫士PK金山卫士PKQQ电脑管家PK可牛杀毒
钓鱼挂马拦截
  * 360安全卫士:★★★★★
  * 金山卫士:★★★★
  * QQ电脑管家:★★
  * 可牛杀毒:★★★★
  如今挂马与钓鱼已经成为威胁个人电脑安全的两大顽疾,随便一家杀软公司都能在一个月内截获数以百万计的挂马网站,因此防挂马和防钓鱼也就成为了本次测试中第一个要测试的内容。
  与钓鱼网址相比,挂马网址的获取可要麻烦多了,由于监管部门的查处,很多网址在测试前便已经失效,因此整个测试颇费了一番周折。也正是由于这个原因,当您看到这篇文章时,个别链接同样也可能失效,结果以文中评测为准!
图1 挂马拦截测试
图2 钓鱼网站测试
  小结:
可以看到和传统杀软相比,安全软件在反挂马拦截上还是要逊色许多,整组测试几乎以全军覆没告终。不过钓鱼网址拦截却表现得非常不错,除QQ电脑管家外,其余三款软件均以较高的拦截率完成了测试。当然由于样本个数有限,上述结果也许并不能代表四者的真实水平,但既然如此少的样本都能落后,QQ电脑管家的确应该在该环节

参考资料

 

随机推荐