博文
一位软件工程师的6年总结(2009-01-17 09:45:00)
摘要:一位软件工程师的6年总结
作者:成晓旭
(声明:欢迎转载,请保证文章的完整性)
“又是一年毕业时”,看到一批批学子离开人生的象牙塔,走上各自的工作岗位;想想自己也曾经意气风发、踌躇满志,不觉感叹万千……本文是自己工作6年的经历沉淀或者经验提炼,希望对所有的软件工程师们有所帮助,早日实现自己的人生目标。本文主要是关于软件开发人员如何提高自己的软件专业技术方面的具体建议,前面几点旨在确定大的方向,算是废话吧。
谨以此文献给那个自己为你奉献3年青春与激情的开发团队。还有团队成员:PPL、YT、YK 、TYF、LGL、CHL、CDY、CB、DPD。
1、 分享第一条经验:“学历代表过去、能力代表现在、学习力代表未来。”其实这是一个来自国外教育领域的一个研究结果。相信工作过几年、十几年的朋友对这个道理有些体会吧。但我相信这一点也很重要:“重要的道理明白太晚将抱憾终生!”所以放在每一条,让刚刚毕业的朋友们早点看到哈!
2、 一定要确定自己的发展方向,并为此目的制定可行的计划。不要说什么,“我刚毕业,还不知道将来可能做什么?”,“跟着感觉走,先做做看”。因为,这样的观点会通过你的潜意识去暗示你的行为无所事事、碌碌无为。一直做技术,将来成为专家级人物?向管理方向走,成为职业经理人?先熟悉行业和领域,将来自立门户?还是先在行业里面混混,过几年转行做点别的?这很重要,它将决定你近几年、十年内“做什么事情才是在做正确的事情!”。
3、 软件开发团队中,技术不是万能的,但没有技术是万万不能的!在技术型团队中,技术与人品同等重要,当然长相也比较重要哈,尤其在MM比较多的团队中。在软件项目团队中,技术水平是受人重视和尊重的重要砝码。无论你是做管理、系统分析、设计、编码,还是产品管理、测试、文档、实施、维护,多少你都要有技术基础。算我孤陋寡闻,我还真没有亲眼看到过一个外行带领一个软件开发团队成功地完成过软件开发项目,哪怕就一个,也没有看到。倒是曾经看到过一个“高学历的牛人”(非技术型)带一堆人做完过一个项目,项目交付的第二天,项目组成员扔下一句“再也受不了啦!”四分五裂、各奔东西。那个项目的“成功度”大家可想而知了。
4、 详细制定自己软件开发专业知......
RFC792:Internet 控制信息协议(ICMP)(2009-01-15 15:56:00)
摘要:
不停的积累protocol
1. 介绍
在被称为 Catenet 的系统中,IP 协议被用作主机到主机的数据报服务。网络连接设备称为网关。这些网关通过网关到网关协议(GGP)相互交换用于控制的信息。通常,网关或目的主机将和源主机通信,例如,为报告在数据报过程中的错误。为了这个目的才使用了 ICMP,它使用 IP 做为底层支持,好象它是一个高层协议,而实际上它是 IP 的一部分,每一种 IP 模块必须实现 ICMP。
ICMP 消息在以下几种情况下发送:当数据报不能到达目的地时,当网关的已经失去缓存功能,当网关能够引导主机在更短路由上发送。
IP 并非设计为绝对可靠,这个协议的目的是为了当网络出现问题的时候返回控制信息,而不是使 IP 协议变得绝对可靠,并不保证数据报或控制信息能够返回。一些数据报仍将在没有任何报告的情况下丢失。上层协议必须使用自己的差错控制程序来判断通信是否正确。
ICMP 信息通常报告在处理数据报过程中的错误。若要避免信息无限制地返回,对于 ICMP 消息不会单独成包发送,而且 ICMP 信息只在处理数据报偏移量为 0 时发送。
2. 消息格式
ICMP 消息以基本 IP 头发送。数据的第一个字节是 ICMP 类型域;此域的值决定了了其余数据的格式。任何标记为 " 未使用 " 的域都是为以后的扩展保留的,在传送过程中必须全部是 0 。除非在个别的格式之下,包头域如下格式:
版本: 4
IHL : Internet 头长度大小以 32 位字为单位。
服务类型: 0 · 总长度:包头长度和数据长度。
标识符( Identification )、标志( Flags )、段偏移量:在分段时使用。
生存周期:以秒计,此域在每台机器处理数据报时减少,此值必须大于要传送它的网关所消耗的时间。
协议: ICMP = 1
包头校验码: 16 位数据反码和再取反而得。为计算校验码,此域应该为 0 。在将来可以会取代这一域。
源地址:创建 ICMP 信息的网关或主机地址,除非说明,它可以是任何网关地址。
目的地址:信息要发送到的网关或主机地址。
......
[转]GDB 调试程序简说(2009-01-14 11:32:00)
摘要: 用 GDB 调试程序
GDB 是GNU开源组织发布的一个强大的UNIX下的程序调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在 UNIX平台下做软件,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。所谓“寸有所长,尺有所短”就是这个道理。
一般来说,GDB主要帮忙你完成下面四个方面的功能:
1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。
2、可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式)
3、当程序被停住时,可以检查此时你的程序中所发生的事。
4、动态的改变你程序的执行环境。
从上面看来,GDB和一般的调试工具没有什么两样,基本上也是完成这些功能,不过在细节上,你会发现GDB这个调试工具的强大,大家可能比较习惯了图形化的调试工具,但有时候,命令行的调试工具却有着图形化工具所不能完成的功能。让我们一一看来。
一个调试示例
——————
源程序:tst.c
1 #include
2
3 int func(int n)
4 {
5 int sum=0,i;
6 for(i=0; i
7 {
8 sum+=i;
9 }
10 return sum;
11 }
12
13
14 main()
15 {
16 int i;
17 long result = 0;
18 for(i=1; i cc -g tst.c -o tst
使用GDB调试:
hchen/test> gdb tst ......
HTTP协议--Status Code and Reason Phrase(2009-01-08 10:13:00)
摘要:老忘记这些,就把它给摘了下来
6.1 状态行 (Status-Line)
响应消息的第一行是状态行(stauts-Line),由协议版本以及数字状态码和相关的文本短语组成,各部分间用空格符隔开,除了最后的回车或换行外,中间不允许有回车换行.
Status-Line = HTTP-Version SP Status-Code SP Reason-Phrase CRLF
6.1.1状态码与原因短语 (Status Code and Reason Phrase)
状态码是试图理解和满足请求的三位数字的整数码,这些码的完整定义在第十章。原因短语(Reason-Phrase)是为了给出的关于状态码的文本描述。状态码用于控制条件,而原因短语(Reason-Phrase)是让用户便于阅读。客户端不需要检查和显示原因短语。
状态码的第一位数字定义响应类型。后两位数字没有任何分类角色。第一位数字有五种值:
-1xx: 报告的 - 接收到请求,继续进程.
-2xx 成功 - 步骤成功接收,被理解,并被接受
-3xx 重发 - 为了完成请求,必须采取进一步措施.
-4xx 客户端出错 - 请求包括错的顺序或不能完成.
-5xx 服务器出错 - 服务器无法完成显然有效的请求.
下面列举了为HTTP/1.1定义的态码值,和对应的原因短语(Reason-Phrase)的例子。原因短语在这里例举只是建议性的----它们也许被一个局部的等价体代替而不会影响此协议的语义。
Status-Code =
"100" ; 10.1.1节: 继续
&n......
【转】VC6.0+icc编译STLPort5.2(2009-01-06 12:48:00)
摘要:帅得不敢出门
C++哈哈堂 31843264
编程`灌水`交流 24372952
C++爱好者灌水天堂 3503799
VC6.0(sp6)+Intel c++ Compiler For Windows v9.0.025 Final编译STLPort5.2.1
转载请保留此信息
*/
编译前的准备:请确保 环境变量 path中有D:\vc6.0\MSDev98\Bin 原因及如何设置后面会说到(没设置的可先看后面)
1. 到www.stlport.org下载STLPort。我下载的是stlport5.2.1
(http://sourceforge.net/project/showfiles.php?group_id=146814)
2. 把下载的stlport压缩包解压,我假设解压到D:\VC98\STLport(其子目录是src,doc,stlport等目录)
3. 编译stlport
(1)编译d:\VC98\bin\vcvars32.bat
给INCLUDE 变量 加上 %MSVCDir%\STLport\stlport
给LIB变量加上 %MSVCDir%\STLport\lib
改后应为
set INCLUDE=%MSVCDir%\STLport\stlport;%MSVCDir%\ATL\INCLUDE;%MSVCDir%\INCLUDE;%MSVCDir%\MFC\INCLUDE;%INCLUDE%
set LIB=%MSVCDir%\STLport\lib;%MSVCDir%\LIB;%MSVCDir%\MFC\LIB;%LIB%
开启一个console窗口, 运行 d:\VC98\bin\vcvars32.bat
如果成功会提示:
Setting environment for using Microsoft Visual C++ tools.
(2)CD到STLport目录下执行如下命令:
D:\VC98\STLport>c......
[转]C++ STL轻松导学(2008-12-30 12:56:00)
摘要:
名称
C++ STL轻松导学
作者
晨光(Morning)
简介
本教程介绍有关学习C++ STL的预备知识和STL的相关背景知识,适合想对STL做大致了解的初学者。
声明
本教程版权为晨光(Morning)所有,未经允许,请勿复制、传播,谢谢。
目录1 初识STL:解答一些疑问
1.1 一个最关心的问题:什么是STL
1.2 追根溯源:STL的历史
1.3 千丝万缕的联系
1.3.1 STL和C++
1.3.2 STL和C++标准库
1.3.3 STL和GP,GP和OOP
1.4 STL的不同实现版本
1.4.1 HP STL
1.4.2 P.J. Plauger STL
1.4.3 Rouge Wave STL
1.4.4 STLport
1.4.5 SGI STL 2 牛刀小试:且看一个简单例程
2.1 引子
2.2 例程实作
2.2.1 第一版:史前时代--转木取火
2.2.2 第二版:工业时代--组件化大生产
2.2.3 第三版:唯美主义的杰作
2.3 历史的评价
2.4 如何运行
作为C++标准不可缺少的一部分,STL应该是渗透在C++程序的角角落落里的。STL不是实验室里的宠儿,也不是程序员桌上的摆设,她的激动人心并非昙花一现。本教程旨在传播和普及STL的基础知识,若能借此机会为STL的推广做些力所能及的事情,到也是件让人愉快的事情。
1 初识STL:解答一些疑问
1.1 一个最关心的问题:什么是STL
"什么是STL?",假如你对STL还知之甚少,那么我想,你一定很想知道这个问题的答案,坦率地讲,要指望用短短数言将这个问题阐述清楚,也决非易事。因此,如果你在看完本节之后还是觉得似懂非懂,大可不必着急,在阅读了后续内容之后,相信你对STL的认识,将会愈加清晰、准确和完整。不过,上述这番话听起来是否有点像是在为自己糟糕的表达能力开脱罪责呢?:)
不知道你是否有过这样的经历。在你准备着手完成数据结构老师所布置的家庭作业时,或者在你为你所负责的某个软件项目中添加一项新功能时,你发现需要用到一个链表(List)或者是映射表(Map)之类的东西......
HTTP和socks代理[来自XFocus](2008-12-28 20:31:00)
摘要: 二、关于代理
一般做坏事的时候都害怕对方发现自己的真实IP,怎么办?用代理是简单的办法。下面描述如何编程使用各种代理。
1、HTTP代理
HTTP代理可以把我们的HTTP请求通过HTTP代理服务器转发到我们要访问的HTTP服务器,再把结果返回给我们,以达到代理的目的。但其功能单一,只能实现HTTP的代理,具体可以查看RFC 2068、2616等相关RFC文档。
正常情况下,我们请求HTTP服务是这样的:首先和目的服务器的HTTP服务端口建立TCP连接,然后做类似“GET /index.html HTTP/1.0”的请求,HTTP服务器返回结果。当通过HTTP代理的时候是这样工作的:首先和HTTP代理服务器的服务端口建立TCP连接,然后做类似“GET http://目标服务器地址/index.htm HTTP/1.0”的请求,代理服务器对你的目标服务器做请求后返回结果给你。
相关的代码在网上很容易可以找到,这里就不列举了。
2、socks代理
socks是一个简单灵活的协议框架,包括4和5两个版本,sock5是由IETF核准的基于TCP/IP协议的基本应用程序代理协议,socks由两个部分组成,服务端和客户端。具体信息可以查看RFC 1928相关文档,在网上也可以搜索到许多基于socks5的开源项目,对照RFC文档,你可以了解这个协议的使用。
『以下信息来直接摘自互联网』
sock5代理客户端的工作程序是:
1.客户端向代理方服务器发出请求信息。
2.代理方服务器应答
3.客户端接到应答后发送向代理方服务器发送目的ip和端口
4.代理方服务器与目的连接
5.代理......
什么是高级C++?——软件工业化时代的C++价值观(2008-12-25 13:09:00)
摘要:什么是高级C++?
——软件工业化时代的C++价值观
孟岩
《程序员》杂志社
开门见山
主要论点:
1. C++本质上是一种重“创新”而轻“生产”的语言,到目前为止仍然是主流语言中最适合技术创新的一个;
2. 1995年之前,整个软件产业处于“创新为王”的阶段,C++是最适合这个阶段的语言,这是C++红极一时的大背景和根本原因。
3. 1995年发生了一系列影响深远的事件,软件产业整体上转向工业化,为了支持工业化,创新的重点由技术创新转向体系创新。然而C++没有能够迅速适应这一变化。
4. 今天,C++应当准确定位,弥补不足,有针对性地发展,它将仍然是最重要的几种工业级语言之一。
从一本书说起
James Coplien,Advanced C++ Programming Styles and Idioms, Addison Wesley, 1991
—— 市面上唯一一本名副其实的“高级”C++书(Scott Meyers)
●面向对象特性的运用和把握
●面向对象的程序风格
●动态特征的运用和超越
●符号语言模拟
●设计模式
这本书代表了当时专家们对于“高级C++”的理解,换句话说代表了当时C++社群的一个审美价值取向。我们看到了什么?技术、技巧、风格、模式,但没有与工程相关的东西。更有意思的事情是,这本书的中文版12年后被剽窃出版,此时书中对于C++面向对象能力发挥到了我当时没有想到的程度。这说明即使在 template被广泛应用之前,C++语言的技巧性就达到了如此的高度。然而耐人寻味的是,书中最高深的技巧从来就没有在C++实践中流行过。
另一本书...
Scott Meyers, Effective C++ ,1991年第1版,1998年第二版,2005年第三版。
●来自教学经验
●最初想开发一个代码扫描工具
●包含实际工程建议
●历史上......
SIP开发环境的搭建(2008-12-22 11:53:00)
摘要:要在windows或者linux平台下开发基于SIP的软电话,需要以下软件
服务器端软件: 注册多个客户端到服务器上,可以进行通话测试
SIP客户端软件:主要用于测试,可以对别人已经完成的客户端进行抓包,以比对自己程序的发包数据
SIP协议栈:基于某个现成的SIP协议栈来开发会加快开发进度
RTP栈:传输语言或者视频数据的协议栈
抓包测试工具:调试网络程序最有效的办法
以下介绍这些软件主要以开源软件为主
一 服务器端软件
1. Asterisk:Linux系统下开源的IPPBX,功能强大稳定,主要用c语言开发。配置稍麻烦。 http://www.asterisk.org/
2. Vocal:Linux系统下开源的SIP服务器端。可以作为IPPBX也可以作为运营系统。很多voip虚拟运营商都用这个作为自己的运营系统。提供BS结构的管理界面。http://www.vovida.org/
3. YATE:跨平台(Linux,Windows)的开源SIP服务器端。在windows下安装非常简单。其他方面没有进行过测试。http://yate.null.ro/pmwiki/
4. SER:Linux平台下重量级的SIP服务器断。功能比较丰富,也是很多voip虚拟运营商的系统选择。不过据说配置比较麻烦,具体没有试过。http://www.iptel.org/ser/
5. sipX:Linux平台下的SIP服务器。这个好像不能作为客户端再次注册到其他SIP服务器上。提供BS结构的管理界面。 http://www.sipfoundry.org
二 SIP客户端软件
1. Windows Messenger 5.1:微软出的SIP客户端,操作方便。
2. YATE Client:跨平台(Linux,Windows)的开源SIP客户端软件。安装方便,功能简单。http://yate.null.ro/pmwiki/
3. xten:windows平台下的SIP软电话。功能齐全,使用方便。http://www.xten.com/
三 SIP协议栈
1. osip:跨平台的开源SIP协议栈。用c语言实现,体积小。http://www.gnu.org/software/osip/
2. exosip:对osip进行封装,使其方便SIP客户端软件开发。同样......
几种开源SIP协议栈对比(2008-12-22 11:52:00)
摘要:
随着VoIP和NGN技术的发展,H.323时代即将过渡到SIP时代,在H.323的开源协议栈中,Openh323占统治地位,它把一个复杂而又先进的H.323协议栈展现在普通程序员的眼前,为H.323普及立下了汗马功劳。而然当在SIP时代,则出现了群雄割据的状况,SIP相对于 H.323简单,灵活,于是各种协议栈层出不穷,下面将详细对比最具有代表性的5个开源项目:OPAL,VOCAL,sipX,ReSIProcate, oSIP
OPAL是Open Phone Abstraction Library,是Openh323的下一个版本,它仍然使用了Openh323的体系结构,并在其基础上进行扩展,同时实现了SIP,H.323,但在音频和视频的编码和传输部分有较大改动。OPAL初衷设计是包含任何电话通信协议,所以其底层进行了高度的抽象化,所以也能够很容易的支持MGCP, PSTN和将来会出现的协议。不过由于Openh323的最后一个版本还在开发中,所以原本6月发布的OPAL也被推迟,现有的OPAL还非常不完善, BUG也非常多,不过相信以Openh323的开发班底,一定能让OPAL十分优秀。
CVS : :pserver:anonymous@cvs.sourceforge.net:/cvsroot/openh323/opal
Language : C++
VxWorks port : Yes
Win32 port : Yes
Linux port : Yes
Supports RFC 3261 : Yes
Supports RFC 2327 : Yes
Supports RFC 3264 : Yes
Supports RFC 3263 : No
Supports RFC 3515 : Yes
Supports RFC 3262 : No
Supports RFC 3311 : No
TCP : Yes
UDP : Yes
SIZE : 8MB
License : MPL
Document : None
Samples : UA,GK
VOCAL是vovida.org开发的SIP系统,VOCAL应该是目前功能最完善......