![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
软工与管理
金庆
这个作者很懒,什么都没留下…
展开
-
TortoiseGit is OK but GitExtensions fails
TortoiseGit is OK but GitExtensions failsGitExtensions and Git fail:"git" pull --progress "origin"git@github.com: Permission denied (publickey).fatal: Could not read from remote repository.Please make sure you have the correct access rightsand the r原创 2022-04-24 13:50:21 · 1045 阅读 · 0 评论 -
命名
命名摘自:[警惕软件复杂度困局][1]软件中的API、方法、变量的命名,对于理解代码的逻辑、范围非常重要,也是设计者清晰传达意图的关键。然而,在很多的项目里我们没有给Naming /命名足够的重视。我们的代码一般会和一些项目关联,但是需要注意的是项目是抽象的,而代码是具体的。项目或者产品可以随意一些命名,如阿里云喜欢用中国古代神话(飞天、伏羲、女娲)命名系统,K8s也是来自于希腊神话,这些都没有问题。而代码中的API、变量、方法不能这样命名。一个不好的例子是前一段我们的Cluster API转载 2020-12-31 09:35:36 · 152 阅读 · 0 评论 -
MySQL无法本地连接
MySQL无法本地连接(金庆的专栏)Linux重启后,发现不知怎么的MySQL无法本地连接。结果phpMyAdmin, Zentao都无法正常工作了。远程的连接用了TCP是正常的,本地连接用了本地socket, 有问题。本地运行mysql客户端会报错:Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.s原创 2011-10-21 16:22:08 · 4878 阅读 · 0 评论 -
网游更新安全第一
网游更新安全第一对于已经上线的网游服务器,更改代码时要把安全性放在第一位,避免引入错误。添加某个功能或修正某一个错误时,应该将变更的范围尽量控制在最小范围。尽量不要造成对其他现有功能的影响。例如,实现某个功能有2种设计方案。一是调整现有的架构,使新功能能够轻易地添加。另一种是在现在的架构下,进行特殊化处理来实现新的功能。第1种方案是正确的设计,改进了原有原创 2010-05-19 17:49:00 · 1011 阅读 · 0 评论 -
C++测试框架的选择
C++测试框架的选择(金庆的专栏) 本文以表格形式总结了 “Exploring the C++ Unit Testing Framework Jungle”( http://gamesfromwithin.com/exploring-the-c-unit-testing-framework-jungle )一文对各种单元测试框架的比较,并添加了原文所还没有加入的Goog原创 2010-04-13 10:39:00 · 10866 阅读 · 8 评论 -
随机数生成器应该如何单元测试?
有个随机数生成函数,按以下分布随机生成1个1-100的整数:90%概率为1-50,10%概率为51-100. 单元测试应该如何进行呢?生成10000个数然后计算分布比例应该可以,只要在90%上下就算通过。但是仍有极小可能产生测试失败的可能。如何做一个具有确定性结论的测试用例?原创 2010-01-09 12:24:00 · 2852 阅读 · 1 评论 -
圈复杂度和代码覆盖率
圈复杂度和代码覆盖率(转载请注明来源于金庆的专栏)100%代码覆盖率的单元测试并不代表是足够的测试,下面是一个例子:int foo(bool isOK){ const int ZERO = 0; int* pInt = NULL; if (isOk) { pInt = &ZERO; } ret原创 2010-03-09 09:40:00 · 7280 阅读 · 2 评论 -
如何保持软件开发团队的稳定性
转自:http://bbs.icxo.com/viewthread.php?tid=297528 一个公司想要获得成功,有两个基本点:一个是好的人才;一个是好的业务。 好的业务能够吸引到好的人才;而好的人才也能创造出好的业务。 成功的公司在这方面形成了良性循环,相反糟糕的公司形成了恶性循环。 保持团队的稳定性说来容易,其实对于每一个优秀的研发经理和公司转载 2010-01-20 13:20:00 · 1546 阅读 · 3 评论 -
你愿意别人更改你的代码吗?
看到怪盗KID的文章( http://hi.baidu.com/kidcdf/blog/item/2cefd85c9d13f449fbf2c09f.html )最后一句: 没有一个人喜欢看着自己辛辛苦苦做的东西被反复删掉重写.个人觉得别人更改自己写的代码是我乐意接受的. 不知大家有什么想法?你愿意别人更改你的代码吗?A) 代码一旦提交, 就是大家公有的代码, 无所谓谁原创 2009-11-21 12:54:00 · 1184 阅读 · 5 评论 -
函数参数的理想个数
摘译自: Clean CodeA Handbook of AgileSoftware CraftsmanshipRobert C. MartinFunction ArgumentsThe ideal number of arguments for a function iszero (niladic). Next comes one (monadic),原创 2009-08-03 17:37:00 · 1423 阅读 · 1 评论 -
测试替身(Test Double)的定义
测试替身(Test Double)的定义 测试替身型别描述Dummy最简单、最原始的测试替身型别。Dummy 没有实作,最常用于需要参数值但不使用它的情况。Null 可视为是 Dummy,但真的 Dumm转载 2009-05-18 18:50:00 · 3441 阅读 · 0 评论 -
按照旧系统做准没错,年底的奖金肯定多
摘自:软件开发经验总结在一些软件公司中,总存在着一些“高人”,他们写代码从来不写文档,不做设计,代码不写注释,跟用户瞎扯几句之后就开始动手写代码了,他们的代码一般人都看不懂,经过无数次改BUG之后,他们做开发的系统居然也上线了,再经过用户无数次的蹂躏,系统也越跑越稳定。该系统成为了该公司至高无上的产品,普通人如果想看懂该系统,必须在它的代码上摸索个10年8年的,什么“设计模式、分层结构”的思想,在转载 2008-12-27 13:31:00 · 1518 阅读 · 1 评论 -
TortoiseSVN也可以用来比较两个文件
TortoiseSVN也可以用来比较两个文件(转载请注明来源于金庆的专栏)TortoiseSVN的Diff菜单一般用来比较当前文件作了哪些更改.无意中发现TSVN的Diff也可以比较两个文件.只要选中两个文件, 然后右键Diff就会比较这两个文件了.原创 2008-12-10 13:01:00 · 10935 阅读 · 0 评论 -
解决TSVN的diff显示中文件不全的问题
解决TSVN的diff显示中文件不全的问题TortoiseSVN的diff显示中文有些问题, 多数不能完整显示出来.好像是整个TortoiseSVN对中文字符都有问题, 如blame会崩溃,但是选中"Use test viewer..."用Notepad显示就会正常.所以想到应该可以用一个外部的diff工具替换TSVN的默认的比较工具.打开TortoiseSVN Setting, 选择Diff V原创 2009-02-14 13:29:00 · 2093 阅读 · 0 评论 -
最实用的管理小技巧,一次只说一件事
转自:http://bbs.icxo.com/viewthread.php?tid=222235亲身体会:最实用的管理小技巧,一次只说一件事 有很长一段时间,我常为团队的「笨」感到困扰,我交代的事,常常不能如期完成;许多的事,我经常一讲再讲转载 2008-09-26 19:34:00 · 1236 阅读 · 0 评论 -
svn日志乱码
svn日志乱码(金庆的专栏)Windows上用TortoiseSVN提交, 在Linux上查看日志时显示的是乱码.中文字符变成了一个问号和一个8进制数, 如: ?\227。将日志输出为xml: svn log -r 123456 --xml > log.xml然后用iconv手工原创 2011-08-08 11:10:03 · 6671 阅读 · 0 评论 -
给VS2005的编辑器添加右边界线
http://www.cnblogs.com/duzouzhe/archive/2009/08/05/1539292.html好的代码风格是生成高质量软件的基础,其中有一点就是代码的每行不能太长,一般建议每行不超过80个字符。VS2005里面有个隐藏的功能是可以设置编辑器的边界线转载 2011-09-19 15:49:27 · 1040 阅读 · 0 评论 -
SVN重命名时不要更改内容
SVN重命名时不要更改内容(金庆的专栏 2019.9)svn rename 某个文件并更改内容后提交,历史就会丢失。如果 svn rename 后不改内容,立即提交,就可以延续原有历史。所以改名这样的操作应该独立提交一次。git 改名就强大多了,会比较内容确定其原来的文件。但更改太多也会判断出错。...原创 2019-09-20 14:43:44 · 1189 阅读 · 1 评论 -
删除隐性的git submodule
删除隐性的git submodule(金庆的专栏 2018.8)正常的submodule会在 .gitmodule 文件中,TortoiseGit 会有 Submodule Update 菜单。 还有一种隐性的 submodule, .gitmodule 文件中看不到它,无法 update. golang开发中的vendor目录下经常会不小心添加一个带 .git 的目录,就变成了一个假...原创 2018-08-30 10:55:44 · 667 阅读 · 0 评论 -
用docker stack开启redis集群
用docker stack开启redis集群(金庆的专栏 2017.10)有5个docker swarm节点,开启redis cluster.每个机器上开2个redis节点,共10个redis节点。采用官方的redis:alpine镜像。docker-stack.yml 如下:version: "3"services: redis001: image: redis:alpine vo原创 2017-10-26 12:03:44 · 2644 阅读 · 0 评论 -
Lua区分公有私有接口
Lua区分公有私有接口(金庆的专栏 2017.8)Lua语言没有提供public, private的概念,所有模块或类中的接口都是公有的。可以通过注释来区分公有私有接口。ldoc 提供了一个 @section 标签,可用作此功能--- Test module.-- @module my_modlocal M = {}--- Public functions-- @section public---原创 2017-08-18 18:48:51 · 915 阅读 · 0 评论 -
Lua53 premake
Lua53 premake(金庆的专栏 2017.2)参考:用premake5创建lua532工程 http://blog.csdn.net/jq0123/article/details/51242780-- premake5.lua--[[Usage examples: for windows: premake5.exe --os=windows vs2015 fot li原创 2017-02-18 21:55:13 · 839 阅读 · 0 评论 -
Windows运行GitStats
Windows运行GitStats(金庆的专栏)GitStats - git history statistics generatorhttp://gitstats.sourceforge.net/GitStats是git统计工具。只是一个python脚本,使用 gnuplot 画图。Windows下运行需要安装 python, git, gnuplot.需要设置path, 使这些工具可以在命令行原创 2016-05-31 11:48:44 · 4197 阅读 · 0 评论 -
CMake搜索Boost1.57失败及解决
CMake更新到3.1.0,Boost更新到1.57,结果CMake搜索Boost失败: Unable to find the Boost header files. Please set BOOST_ROOT to the root directory containing Boost or BOOST_INCLUDEDIR to the directory containing Boo原创 2015-01-20 12:15:21 · 16565 阅读 · 2 评论 -
代码那些事之命名
摘自:代码那些事之命名——《可读代码的艺术》读后感转载 2014-11-04 20:56:42 · 1086 阅读 · 0 评论 -
TSVN客户端复制文件
TSVN客户端只有Rename功能,没有原创 2014-08-17 09:38:26 · 1079 阅读 · 0 评论 -
CMake生成版本号
CMake生成版本号(金庆的专栏)原来的CMake需要用shell脚本生成SVN版本号,再作为cmake参数传入。CMake调用脚本示例:#!/bin/sh# cmake.shServerCodeRoot=~/Code/ServerCodeRevNum=`svn info ${ServerCodeRoot} | grep Revision | awk -F' ' '{ print $2 }'`cm原创 2012-08-15 12:24:13 · 4675 阅读 · 0 评论 -
CMake区分debug、release版本
摘自: http://www.cppblog.com/tx7do/archive/2010/08/19/124000.html建立debug/release两目录,分别在其中执行cmake -DCMAKE_BUILD_TYPE=Debug(或Release),需要编译不同版本时进入不同目录执行make即可;Debug版会使用参数-g;Release版使用-O3 –DNDEBUG转载 2012-03-27 13:52:10 · 15992 阅读 · 0 评论 -
数据库的版本控制是必须的
摘自:程序员开发利器:源代码管理的十条建议( http://tech.it168.com/a2012/0307/1321/000001321198_1.shtml )数据库的版本控制是必须的这是有很多人想做,但是觉得很困难而做不到的一点。这里的问题是,很多应用没有数据库根本无法运行。所以如果你不把数据库加入版本控制的话,你的应用是不完整的。大部分的版本控制系统只针对文件系统工作,例如 HTML,C转载 2012-03-08 14:13:42 · 1428 阅读 · 0 评论 -
TortoiseSVN 上的 keywords 设置
SVN可以对代码文件中的一些关键词进行自动扩展,最常用的是$Id$关键词,它扩展为文件名,版本号,日期,提交用户,如$Id: Test.cpp 55 2008-08-08 08:09:09 jinq $TortoiseSVN 在 properties 中设置,添加键 svn:keywords, 值为 $Id$.可对整个目录设置,但只会在该目录下的文件上显示该设置。我的理解是,文件提交时对源文件进行原创 2008-08-07 08:56:00 · 1389 阅读 · 0 评论 -
用SourceNavigator看代码
Source-Navigator是代码阅读工具,功能与Source Insight相同,但它是开源的。Source-Navigator项目在sourceForge上,http://sourceforge.net/projects/sourcenav/Windows上的版本下载解压就可以用了,Linux上的需要从源码make。解压目录不能有空格,可能有中文也不行。它自带详尽的帮助。对于带中文的C++原创 2008-07-29 08:37:00 · 2884 阅读 · 1 评论 -
发现错误是好事
发现错误是好事(转载请注明来源于金庆的专栏)Its better to catch a bug at design time than at coding/compile time. Its better to catch a bug at coding/compile time than during unit testing. Its better to catch a bu原创 2008-05-08 15:39:00 · 1345 阅读 · 0 评论 -
评“加班文化”对软件企业的危害
评“加班文化”对软件企业的危害http://blog.csdn.net/zhangyuk/archive/2006/06/27/841430.aspx原文指出加班危害三点:1. 以苦劳掩饰平庸2. 用态度代替效率3. 假进度破坏诚信总结为加班有问题。我认为没有点到软件企业加班危害的实质。加班是各行业通行的做法。正确运用加班这一措施,可以让一个企业渡过时间压力的难关。可是滥用加班,甚至形成“加班文件原创 2006-07-04 17:08:00 · 3784 阅读 · 4 评论 -
敏捷式开发质疑传统软件过程
敏捷式开发质疑传统软件过程在六十年代末期提出了软件危机的概念,因此提出了非常有纪律性的方法即软件工程学,试图从电子工程学、技术工程学提炼出一些东西来用于软件工程学,他们想从中提炼出一种方法,使得软件开发的流程更有预测性。但软件业的人在做软件的过程中发现这些方法并没有减少软件开发过程中遇到的问题。近年来有人发现软件工程学里一些基本的假设是不正确的,并使用了一些新的开发方法,称为敏捷式开发。敏捷式开发转载 2006-06-26 12:35:00 · 2939 阅读 · 1 评论 -
玩技术,不要被技术玩
[转]严重质疑J2EE4年前就开始怀疑,边怀疑边用,现在只有更加怀疑......用户都以为J2EE能够给他们带来光明的IT前景,其优点是由一堆眩目的名词组成的,并且体现出了你能想像到的技术所能体现的一切优势。然而,事实表明,它只是为IT部门找到了一个可以无节制地花钱的不可反驳的借口。J2EE告诉人们,好的技术架构很重要。然而,J2EE所推崇的技术架构,每年都在改变和出新。每转载 2006-11-06 11:27:00 · 1542 阅读 · 0 评论 -
我对系统分析的简单化理解-读"做自己的系统分析师"一文
我对系统分析的简单化理解-读 "做自己的系统分析师" 一文有感.读此类文章都是一读一大篇, 读完了比没读之前更多迷惑.其实多出来的迷惑是好事, 表示心中有思考. 我的思考是: 系统分析有这样复杂吗?系统分析做了些什么?我认为最好的系统分析就是用一句话说出系统要干什么.系统分析员是什么样的人?就象是卖猪肉的屠夫, 能告诉客户各个部位的名称, 并能一块块分割开来卖.系统分析产生的主要文档是需求分析报告原创 2006-06-23 12:41:00 · 1575 阅读 · 2 评论 -
有感程序员的自驱力
程序员本身就有这样一种驱动力--尽自己的能力去做的最好,从而使自己自我感觉良好。成功感又反过来会增强他的自驱力。很多问题的发生是因为分配的任务与个人的价值观、激励因素或才能不相吻合。主要是程序员不怕难,就怕无聊。只有在分配的任务能够和他们意愿、能力、强项结合在一起的时候,他们的表现才最佳。变硬性分配任务为主动承担任务会极大地激励个人。原创 2006-06-07 13:02:00 · 1806 阅读 · 2 评论 -
"XP practices" 应翻译为"XP惯例"
XP pratices 有翻译成"实践", "实施技巧"等多种.意思是很明白,可是总觉得不尽意或不简洁.查一下词典, 意思应该为: 惯例性的行为或办事方式.再参考"国际惯例(international practice)"一词, "XP practices" 应翻译为"XP惯例".原创 2006-06-20 16:05:00 · 1285 阅读 · 0 评论 -
对VSS代码管理的几点评论
评论 项目的分工策略与源代码管理!!!1. 几个人要修改同一个类?类太大了吧!一个人编写一个模块或部件,包含一组相关的类,分成数个文件。只有稳定下来了,才可以让其他人作一些小规模的修改,一般是改BUG。如果是作者正在写这部分代码,有什么要改的就直接让作者改好了。如果是两个人合作写一个类,他们肯定是坐在一起。2. 怎样将所有更新重新编译?比如需要建立每日创建系统(Daily Build).比较复杂原创 2006-05-26 15:57:00 · 2453 阅读 · 0 评论 -
管理者该干什么
管理者当然是管理。分为管人与管事。管人比管事重要。管理者要有足够的时间去管人,尽量少管事。越是高级的管理者,管理人员的时间就越多。怎么管人?就是提高下属的办事能力。管理者的能力不是看他解决问题的能力,而是看他下属的能力。管理者要努力提高下属的技术能力。原创 2006-05-25 14:49:00 · 2286 阅读 · 0 评论