代码改变世界

RSH的网络通信细节

2011-04-20 09:25 by zhenjing, 1153 阅读, 0 推荐, 收藏, 编辑
摘要:Normal 0 7.8 pt 0 2 false false false MicrosoftInternetExplorer4 rsh服务侦听514/TCP口,client建立到server的514/TCP的连接。服务端会先检查TCP连接的源端口是否位于[512,1023]区间,否则服务端进程终止。*nix最早要求范围是[1,1023],后来为消除一些安全隐患,改成[512,1023]。但这是实现相关的,并且各个系统的man手册可能与其当前实现不同步,某些版本Solaris的man手册就有问题,应实测。 为什么rshd有这个限制?一般rsh、rcp、rlogin被设置成setuid-to-. 阅读全文

读书笔记--修改代码的艺术

2011-04-20 09:23 by zhenjing, 665 阅读, 0 推荐, 收藏, 编辑
摘要:本书内容关于如何有效处理遗留代码,遗留代码是指没有编写测试的代码。因此,为遗留代码编写测试是改善遗留代码的首要任务。对一个大系统,不可能从头开始编写每一处的单元测试,一般只能从当前需要改动的地方开始,逐步添加单元测试,形成“软件夹钳”,进而修改并改善现有代码。遗留代码修改算法: (1) 确定改动点;(前提:理解代码)(2) 找出测试点;(前提:理清代码间的联系)(3) 解依赖;(解依赖是为类编写单元测试的前提)(4) 编写测试;(编写符合代码当前行为的特征测试)(5) 修改、重构。(在存在测试覆盖的前提下,修正bug、改善设计等)从上述算法可以看出,前4条是关于如何编写测试代码的,而解依赖是编 阅读全文

内存数据的十六进制Print

2011-04-20 09:22 by zhenjing, 4255 阅读, 0 推荐, 收藏, 编辑
摘要:在程序的调试过程中,经常需要输出各种数据,正常情况下使用printf和cout即可实现数据输出。然而在输出二进制数据时,printf和out却有点无能为力。那么如何比较二进制数据是否正确呢?方案一:文件输出。文件可以输入任何数据,但是需要在程序之外比较文件,这对于少量数据并不划算。方案二:实现自定义的十六进制输出函数。当然,也可是八进制,一般而言十六进制更易看懂(习惯)。下面给出一个最近实现的此类函数。该函数可将指定长度任何内存数据以十六进制格式输出。这个程序对32和64位的PC均适用。注意:%x无法正确打印负数,负数总是打印成32bit整型数,64位PC也是如此。#include <s 阅读全文

GCC/G++常见链接错误

2011-04-20 09:21 by zhenjing, 1161 阅读, 0 推荐, 收藏, 编辑
摘要:链接错误的直接表现就是:****符号未定义。几种常见的链接错误如下:缺少*.o文件 ---- 对策:将相应的文件加入Makefile或命令行*.o文件未更新 ---- 对策:删除旧*.o文件重新编译或者依赖于最新的depend来编译(增删文件时确保make depend)。缺少相应的库文件 ---- 对策:将相应的文件加入Makefile或命令行依赖的库文件版本不对或未更新 ---- 对策:重新生成所依赖的库文件库文件的出现顺序不对 ----- 对策:根据库的依赖关系,调整库出现的顺序。原则:只允许先出现的库依赖于后出现的库。其中,第5种错误最难发现。如果发现程序所需的库都已经引入,但仍出现链 阅读全文

[wxWidget系列] wxWidget的事件机制

2011-04-20 09:11 by zhenjing, 2560 阅读, 0 推荐, 收藏, 编辑
摘要:Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4 wxWidget的事件机制wxWidget通过在编译期生成静态的事件表来实现事件类的事件处理。所有想要使用事件处理机制的地方都需要继承wxEvtHandler类(直接或间接)。由于window控件需要处理自身的UI时间,故wxWidget将实现为exEvtHandler的基类,这就意味着所有的wxWidget的控件均是事件类,可以直接定义事件表。a) 定义事件表的基本步骤:1) 定义一个直接或间接继承自wxEvtHandler的类;2) 定义所需的事件处理函数,函数. 阅读全文

[Boost系列] Boost学习

2011-04-20 09:10 by zhenjing, 3625 阅读, 0 推荐, 收藏, 编辑
摘要:Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4 Boost学习作者:陈珍敬Boost安装下载boost源代码包,解压,进入boost目录,执行./configure->生成Makefile->执行make即可。 自动执行:./tools/build/jam_src/bin.linuxx86/bjam-sPYTHON_ROOT=/usr -sPYTHON_VERSION=2.3 -sTOOLS=gcc法二:在configue之后,将bjam文件拷贝到boost主目录下,执行./bjam调用build sy 阅读全文

[wxWidget系列] Updating wxWidget from 2.6.X to 2.8.X

2011-04-20 09:10 by zhenjing, 478 阅读, 0 推荐, 收藏, 编辑
摘要:Compile Error and Solution:1. wxSizer::IsShown -> wxSizer::IsShown must take one argument.2. Int GetCount() const->unsign Int GetCount() const3. wxCommandEvent's members is protected, please use related interfaces to access them.4. wxHIDE_READONLY is not supported by wxFileDialog.5. The ty 阅读全文

[Advance] How to debug a program (下):示例

2011-03-23 13:10 by zhenjing, 1237 阅读, 0 推荐, 收藏, 编辑
摘要:原理:程序=指令+数据。 指令:用户代码(Text)+静态库+动态库。反汇编可得程序指令。 数据:Data -- 已初始化的全局数据,包括常量字符串;BSS -- 未初始化的全局数据;Heap; Stack;Register 阅读全文

[Advance] How to debug a program (上)

2011-03-22 12:16 by zhenjing, 2191 阅读, 1 推荐, 收藏, 编辑
摘要:介绍64位linux系统下的一种高级调试技巧。32位类似,内存分布略有区别。 阅读全文

[转] Real-World Concurrency

2011-03-15 13:37 by zhenjing, 539 阅读, 0 推荐, 收藏, 编辑
摘要:1. Know your cold paths from your hot paths. 弄清楚代码里的热门执行路径和冷门执行路径。 2. Intuition is frequently wrong—be data intensive. 直觉常常是错的,要靠数据说话。 3. Know when—and when not—to break up a lock. 知道什么时候把一个锁拆成多个,并知道什么时候不必这样做。 4. Be wary of readers/writer locks. 警惕读写锁。 5. Consider per-CPU locking. 考虑用每个 CPU 用一个锁。 6. Know when to broadcast—and when to signal. 知道什么时候用单个唤醒,什么时候用广播唤醒。 7. Learn to debug postmortem. 学会验尸 8. Design your systems to be composable. 设计系统(s),使之能相互组合。 9. Don’t use a semaphore where a 阅读全文
上一页 1 ··· 4 5 6 7 8 9 10 11 12 ··· 15 下一页