Rainyboy 发表于 2010-12-13 14:03

大家来找茬:一个关于程序员的剧本


    有个朋友要拍个短片子,其中有一个场景,背景设定于1998年,某个住在北京胡同里的程序员,他和他的团队正在开发某个在当时看来比较新的软件。这个场景想截取这个程序员和他项目经理的对话,来展现他正在做的工作,以及他在当时的情形下,对互联网发展未来的展望。
    他们非得让我来写剧本……我1999年才有的第一台电脑,2000年才开始上拨号网……而且只是个业余编程爱好者,天知道该怎么写……不过他们说让他们写的话可能更没谱……所以我就只好勉为其难了。
    贴在这里……是想让大家看看里面有哪些描述是不符合当时的情形的……当然,其他建议和意见也可以随便提……我想通了,总是要拿出来丢人的,早死早超生……多谢大家!

==========================内容分割线========================================
    程序员正在为他设计的软件框架做最后的修正,设计这个框架的想法缘自不久前他所使用的一款名叫ICQ的软件,这是一款由国外的Mirabilis公司于两年前开发的,利用万维网(World Wide Web)在个人计算机(PC)之间建立通信连接,从而实现网络聊天功能的软件。这个软件具有令所有网络冲浪爱好者眼前一亮的特色,然而在互联网应用方兴未艾的中国,阻碍它迅速蹿红的原因有两个:英文的界面,以及远在国外的服务器。由前者所带来的使用困难无须赘述,后者的存在不仅意味着访问的困难,更使得你很难在ICQ上找到一个中国人……
    现在,本土化的网络通信工具正在孕育之中,在这间陋室的某页稿纸之上,在桌上那台配备赛扬667高性能处理器的个人电脑里。然而,在的这个新成立不久的项目组里,没有人比他更了解这项工作的意义,作为系统架构师,他的团队仍然需要他给出一个小的Demo,在其中给出这套软件最基本的功能,来验证他所设计的框架的可行性。
    今天,第一个Demo的编写已经接近尾声,程序员正在逐一排查可能的漏洞。在程序设计领域,一项工作的初试啼声通常是由“Hello World”程序开始的,“Hello World”程序所做的,只是对着输出端(通常是屏幕)说一声“Hello World”,这不只是你的程序对这个陌生世界的第一声招呼,正如著名的Perl程序员Simon Cozens所说,“它是编程之神的传统咒语,可以帮助你更好的学习语言”。程序员决定让他的Demo也采用同样的方式,在同一台电脑上运行两个Demo,让其中的一个对另一个说,“Hello World”,另一个回答“Hello World”。事情当然是以各种失败开始的,这两个程序要么无法连接,要么以各种各样奇怪的方式对话,例如,现在,一个程序对另一个说,“Hello World”,另一个程序收到的却是:“Hello World烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫”,然后报错“Demo.exe 访问了0x0000000内存,该内存只能为Read 不能为Write!按 确定 退出程序”程序员单击了报错对话框下面的“确定”按钮,结果,号称比Win95更稳定的Win98蓝屏了……
    程序员心头一凉,刚才当机时,尚有部分工作没有保存;程序员心头又隐隐的有某种兴奋,因为不管收到的“Hello World”后面有多少个“烫”,这至少表明连接已经建立,正确的信息已经被传递,这是一个典型的内存溢出漏洞,通常发生在字符串结尾处没有加上正确的结束符。    程序员重新启动了电脑,继续调试他的程序……
    (三个小时后……SA是程序员,Manager是团队的项目经理,程序员给经理打电话)[SystemArchitect]:您好,是*经理吗?我是**啊,我给您说过的那个软件啊,我写了个Demo,刚才跑通了!当然,这只是……[Manager]:等等……哪个软件?什么Demo?:就是咱们正在评估可行性的PC通信软件项目啊,功能跟ICQ有点类似的按那个?刚才……:哦,那个项目啊,我想起来了,你的Demo做出来了?:对对对,用MFC加上Socket实现的,就像我上次说的那样,微软这个新出的框架非常好用!测试的时候在本地开了两个Instance,目前是可以相互通信的了。当然,这只是在本地连接了,但是基本的框架已经有了!要在公网上实现的话,还需要建立一个服务器,记录每个账号的密码和联系人,做成C/S系统,哦,服务器上还要存聊天记录,恩……聊天记录也可以存在本地,不过这样要是用户在不同的机器上登……:好的……好的……软件的架构这块儿你再整理整理吧,明天项目会把刘部长请来,你好好讲讲,让公司更重视咱们网络应用组,不要让他们觉得咱们就是给公司做网页和当网管的!:哈哈,咱们当然不是公司的网管啦!后天的会那既然刘部长要来,这些技术细节我就不展开了,多说说应用前景吧。主要是将这个应用和网页浏览结合起来,您想想,以前,您是怎么浏览网页的啊?一个人输入网址,一个人看,看完了觉得好第二天上班给大家讲——您实际上还是生活在现实的世界中,电脑和网络对您来说不过是一个频道更多的电视而已,你和它们之间的关系的单向的,冰冷的……:大家不都是这样么,我觉得挺好的,现在有些人还不知道网络,甚至大多数人还没有电脑呢!:是的,现在这样没什么不好,甚至比那些没有电脑更不知道网络的人强多了。但是你想想,假如您在浏览网页的时候随时可以跟一帮朋友聊天呢?您看到什么新闻您随时都可以告诉大家伙儿,您写了篇技术杂谈您可以放个人主页里让大家去看,您看到一本书或者一件衣服,您马上就可以问问在哪能买到,甚至您可以把胡同口小卖部的阿姨添加为联系人,问问她那儿有没有……:胡同口小卖部的阿姨她字儿都未必多认识几个还上网,你这个有点科幻了啊……:不见得是不可能,谁知道网络的普及和网速的发展会到什么程度呢?谁知道个人电脑是不是真的会人手一个呢?但是如果些都实现了,说不定每个小卖部都会有一个网页,您需要什么您看好了马上就告诉售货员,让他帮您订货,您下班的时候顺道就拿了。总的来说,网络让信息流转更快速,但是您得自个儿去找网站,去被动的获取信息。而利用通信工具,您可以让您的个性化的信息流通到指定的地方或者人那儿去,它与您的关系是双向的,人情味儿的,会让咱们的生活过得更有意思。:这也是我们尝试开发这个软件的最终目的吧,行吧,你下午下过来咱们看看那个Demo吧。:恩,呵呵。好的好的,*经理下午见!
=============================================================================

fxuestc 发表于 2010-12-14 21:19

不错,你很有潜力啊,鼓励个{:{39}:}{:{23}:}{:{23}:}

fxuestc 发表于 2010-12-15 17:17

那个“烫烫烫烫烫烫”是咋回事,我今天跳程序时也出现了{:{13}:}{:{13}:}

Rainyboy 发表于 2010-12-16 10:09

回复 3 # fxuestc 的帖子

一般是字符串没有结尾,或者因为什么操作“破坏”了字符串的结尾符'\0'造成的。

fxuestc 发表于 2010-12-17 10:55

回复 4 # Rainyboy 的帖子

又学习了。。。

Rainyboy 发表于 2010-12-17 10:57

回复 5 # fxuestc 的帖子

把你写的什么信号处理程序什么的发上来让大家开开眼嘛,呵呵{:{36}:}

firecat_2 发表于 2010-12-21 11:42

这么有才

Rainyboy 发表于 2010-12-21 11:47

回复 7 # firecat_2 的帖子

哪里……其实我基本上是在臆测……但是也许被帮忙的人觉得我来臆测比她来臆测要好……

fxuestc 发表于 2010-12-21 21:42

本帖最后由 fxuestc 于 2010-12-21 21:44 编辑

回复 6 # Rainyboy 的帖子

我写了一个MATLAB嵌入c的程序一直有内存泄露,就贴这里,你帮我看下如何?void Row_Product_BM_Decoding_Algorithm_Matlab(Engine *ep,double *row_correct_num,double *code,double *decoded)
{


mxArray *mxcode = NULL, *mxccode = NULL, *mxcn=NULL;

mxcode=mxCreateDoubleMatrix(511,511,mxREAL);

mxccode=mxCreateDoubleMatrix(511,511,mxREAL);

mxcn=mxCreateDoubleMatrix(511,1,mxREAL);

memcpy((void *)mxGetPr(mxcode),(void *)code,511*511*8);



engPutVariable(ep, "code", mxcode);

engEvalString(ep, "=decode(decoder,code)");

engEvalString(ep,"clear cmess;");

mxccode=engGetVariable(ep,"ccode");

mxcn=engGetVariable(ep,"cn");

memcpy((void *) decoded,(void *)mxGetPr(mxccode),511*511*8);

memcpy((void *) row_correct_num,(void *)mxGetPr(mxcn),511*8);

engEvalString(ep,"clear ccode;");

engEvalString(ep,"clear cn;");

engEvalString(ep,"clear code;");

mxDestroyArray(mxcode);

mxDestroyArray(mxccode);

mxDestroyArray(mxcn);
}



fxuestc 发表于 2010-12-21 21:46

回复 6 # Rainyboy 的帖子

我主要搞的是信道编码这块,对信号处理的几乎没有。

Rainyboy 发表于 2010-12-22 09:53

回复 9 # fxuestc 的帖子

看不懂……{:{19}:}

fxuestc 发表于 2010-12-22 09:58

回复 11 # Rainyboy 的帖子

我觉得我在这个函数里用CreateDoubleMatrix分配了3块内存,后面都释放了啊,而MATLAB工作空间里的变量我除了编译码器这个结构体没有释放外,其余的变量也都清除了的,而且这是是重复利用应该不存在反复分配的问题啊,但是我运行程序时就会出现内存泄露的问题。。。。

Rainyboy 发表于 2010-12-24 20:29

回复 12 # fxuestc 的帖子

你是怎么发现内存泄露的呢?我是说,是怎么确定是内存泄露故障的呢?

fxuestc 发表于 2010-12-25 15:11

回复 13 # Rainyboy 的帖子

我调试运行,运行完这个程序,用任务管理器看,内存就增加了,每调用一次增加一次,而且不减少,直到内存不足。。。。

Rainyboy 发表于 2010-12-25 15:21

回复 14 # fxuestc 的帖子

你确定内存的泄露来自于那三个矩阵的话,可以跟一下断点,看看在mxDestroyArray前后,指针的值有没有变化,矩阵的内容有没有变化。
页: [1] 2
查看完整版本: 大家来找茬:一个关于程序员的剧本