自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(43)
  • 收藏
  • 关注

原创 已经有14年没更新博客了

最近突然想起这里,来了才发现,已经14年没更新了,而且之前发的部分文章居然还有超过10万次的阅读量。感谢大家的阅读。先就写到这吧。冒个泡,表明我的CSDN密码没忘。哈哈。

2021-11-30 10:59:24 331 1

原创 数字家庭 (一) 开机

数码产品种类越来越多,让人目不暇接。当多种数码产品以及电脑、网络等放到一起的时候,就是我们充分发挥想象力,创造各种奇特的应用的时候了。就拿这开机说起吧。当只有一台电脑的时候,开机是件再普通不过的事情了,轻轻按一下电源,开机就实现了。而当有两台电脑时,一台电脑已经打开了,现在我要打开另一台,是不是一定要站起来,走过去,按下电源呢?答案就不一定了。这里我要举两个例子,一是用一台电脑为另一台电脑开机

2008-12-04 23:21:00 2364

原创 C#中的try与finally

 C#中的try与finally 1 finally与returntry-catch-finally是很常用的语法结构,用来控制可能发生异常时的程序流程,其中catch和finally至少要有一个。初学try语法时可能会要问一个问题:如果在try块中return,那么finally还会执行吗?答案是肯定的。这个非常容易验证,就不举例子了。这样带来一些很好的特性,例如我们可以在try

2008-03-17 20:58:00 5230 1

原创 反对任何应用程序以任何理由抢焦点

 反对任何应用程序以任何理由抢焦点 今天登录网上银行,因有属于两个不同银行的账号要查寻,所以开了两个页面,第一个页面打开后我在上面输入了卡号,然后按TAB键切换到了输密码的地方。正当我低头输入密码的时候,另一个银行的页面加载完成了,于是自动跳到了前面,并且抢了用户的输入焦点,就这样在我没注意到的情况下我把第一个账号的密码输入到了第二个账号的卡号的地方。因为输入卡号的密码没有加密,密码明

2007-10-19 22:16:00 3457

原创 我的一个长久以来的误区,关于C

 我的一个长久以来的误区,关于C 很久以前学C语言的时候就知道了#define,它可以用来定义宏,宏至少有两个作用,一是作为常量,二是作为很短的函数或代码段。后来学到C++,提到了取代#define的两个关键字,一是const,一是inline。上大一的时候学校也开了C语言课,后面有一章是介绍C++,其中涉及到C++的两个关键字,分别是const和volatile,前者用来定义常量,后

2007-09-19 22:46:00 4425 2

原创 深入C++的new

“new”是C++的一个关键字,同时也是操作符。关于new的话题非常多,因为它确实比较复杂,也非常神秘,下面我将把我了解到的与new有关的内容做一个总结。new的过程当我们使用关键字new在堆上动态创建一个对象时,它实际上做了三件事:获得一块内存空间、调用构造函数、返回正确的指针。当然,如果我们创建的是简单类型的变量,那么第二步会被省略。假如我们定义了如下一个类A:class A{  

2007-07-23 21:46:00 148065 30

原创 最近较忙,BLOG要暂停更新了

面临毕业,面临入职,很多事要做,近期没有时间更新BLOG了。预计下月起可以恢复更新。 

2007-06-19 23:16:00 2784

原创 一些匿名语言元素

 一些匿名语言元素 本文将涉及Java语言的匿名类、C#语言的匿名委托和Javascript的匿名函数。由于具体的名称不同,这里统称它们为“匿名语言元素” 1 Java的匿名类匿名类是Java语言中很重要的特性,从很早开始就得到Java语言的支持了。例如:publicinterface MyInterface ...{    void doSomething()

2007-05-11 16:19:00 3685

原创 结合短路法和逗号表达式,代替if和三目运算符

C/C++系列语言中,if-else语句是最主要的条件分支语句:if(A) B;else C;其功能就是如果A成立,则执行B,否则执行C。类似的还是三目运算符:A?B:C;其功能与if语句类似,并且由于是表达式,它也有返回值,返回的就是被实际执行的语句的返回值。但如果既不使用if语句又不使用三目运算法,有没有办法也进行条件分支呢?答案是肯定的,方式就是使用“短路法”。C/C++系列语言的逻辑运算法

2007-04-03 00:50:00 6090 2

原创 为什么需要override关键字

为什么需要override关键字override是Object Pacsal和C#的一个关键字,用来表示一个方法是个重载方法(好像Java 1.5里也有,我对Java不是很了解),刚开始接触C#时还觉得这个关键字挺多余的,但仔细琢磨就能明白,这是个非常有用的关键字。C++就没有这个关键字,在声明虚函数时,只需要在函数声明前加上关键字virtual,而在重载虚函数时virtual则是可选的。即使

2007-03-21 15:30:00 9002

原创 越帮越忙的珊瑚虫快捷键

珊瑚虫的QQ增强包别的都好,就是这个快捷键太讨厌了.它默认内置了Ctrl+=的快捷键,而且还是全局的.只要按下Ctrl+=,就会跳出珊瑚虫一键锁定的对话框.我平常如果要锁定机器肯定是使用WIN+L快捷键了,即使是在WIN2000下,也会按CTRL+ALT+DEL再按L,也很方便,根本不需要珊瑚虫来多此一举.更麻烦的是,这个快捷键和我常用的很多快捷键冲突了,例如PHOTOSHOP中CTRL+=是图片

2007-03-05 20:59:00 3467 1

原创 对《基于动态代码生成技术的动态对象工厂》一文的补充

 写完《基于动态代码生成技术的动态对象工厂》一文后我一直很奇怪为什么动态代码生成的方法相对于直接使用new有如此大的劣势?道理上说动态代码一旦生成,那么它和原生代码应该也没什么区别了,那么它的执行效率应该和相应的原生代码差别不大才对。仔细观察Creator.New版本的执行过程,我猜测问题并不是出在动态生成的代码本身,而是出在周围的代码上。在我的测试程序中,我对以下代码返复调用1000万次:

2007-02-24 02:00:00 4832 1

原创 基于动态代码生成技术的动态对象工厂

 C#中所有的引用类型的实例都需要在运行时动态创建,创建对象实例最常见的办法就是使用new操作符,使用new操作符就需要在编译器明确的知道要创建的对象的类型,如果在编译器并不能明确,就需要用到反射技术,例如:            String className = "MyNamesapce.MyClass";            ConstructorInfo ci = 

2007-02-20 21:46:00 8332 4

原创 应用程序上屏蔽FLASH控件的右键菜单并获得左键消息

 使用FLASH做界面美化是一种较为常见的方式,FLASH动画制做简单,美观大方,而且将FLASH嵌入到应用程序界面上也是非常容易的,只要放置一个Shockwave Flash控件即可。但这样做出来的界面有两个问题,一是在FLASH上点击右键会有FLASH的菜单,二是在FLASH上点击的鼠标消息从应用程序里是获取不到的,FLASH控件并不会向用应程序发送WM_LBUTTONDOWN等鼠标消息。

2007-02-14 22:13:00 6512 6

原创 我的QQ终于能传文件了

前一段时间我的QQ不能收发文件了,开始以为是网络不好,但并非如此,我又以为是因为我家里同时使用了带路由的猫和无线路由器,受这两层网关的影响而不能传,但后来发现把电脑直接接在不带路由的猫上也不能传文件。后来又发现另一台由我装的电脑上也不能传文件,这回怪了,看来问题应该出在我的安装过程上。因为我主观的认为QQ的安装组件里全都是像宠物、自动更新这些没用的东西,所以在安装时看也没看就把所有能去掉的选项都去

2007-01-10 01:48:00 3058

原创 设想一种防U盘病毒的方法,不知道是否管用

如今U盘病毒实在是太普遍了,也太烦人了。把U盘往别人电脑上一插,再往自己电脑上一插,自己的电脑就很可能中毒了。从前一阵的RavMon.exe,到后来的tel.xls.exe,再到大规模泛滥的viking,病毒基本上都是利用Windows的自动播放功能来运行自己,进而传播的。可能当初MS在设计这个功能时认为能生产光盘的人很少,所以往盘里面加恶意程序的机会也不多,而如今随着网上ISO、光盘刻录机的流行

2006-12-28 00:44:00 3379 2

原创 我为什么喜欢用WIN2000而非WINXP

WINXP的光芒已经几乎被WINDOWS VISTA盖过去了,但到今天我的台式机用的还是WIN2000,原因是什么?其实原因非常简单,就在输入法上。WINXP和OFFICE XP开始引入了高级文字服务,结果是带来了一个让我摸不着门的输入法切换系统。由于我平常都喜欢使用五笔,如果遇到了只有拼音的电脑我宁愿用英文,但XP下我经常需要切换好几次才能找到我想要的五笔输入法(我只用OFFICE2000自

2006-12-19 14:16:00 6446 6

原创 今年的“武林外传”会是谁呢?

我从1997年开始就不看春晚了,算来已经有10年了。05年春节时我看了一通宵的《钢之炼金术师》,看完很受触动。06年春节期间,《武林外传》和春晚展开PK。我并没有在第一时间发现这个片子,后来经人介绍才发现了它。我从BT、电驴上下载,下完一集看一集,直到三十晚上,看了整整一晚上,实在是太过瘾了。眼看2006年即将过去,07年的武林外传又会是谁呢? 

2006-12-13 23:02:00 2556

原创 感谢周杰伦

周杰伦应该不是第一个擅长说唱的人,但他对将说唱普及到大众的过程中却是功不可没的。我一直欣赏换个角度看问题,本来嘛,谁也没规定“唱歌”就必须用七个音符来表现,说唱同样是一种很不错的表演形式,特别是,对于像我这样天生五音不怎么全,但嘴皮子耍的快的人,说唱给了我们走进K歌厅的自信。假期里有一次和朋友们去K歌,大家一展歌喉,其中不乏唱的很不错的。但我如果只是坐着一声不吭也不合适啊,唱一曲吧,但我唱歌的

2006-12-02 18:10:00 3199 1

原创 用内联汇编调虚函数 理解VTABLE原理

虚函数和动态绑定是C++面向对象编程的核心内容之一。要理解C++虚函数的调用本质,就不得不说VPTR和VTABLE。所有拥有虚函数的C++类的大小都比可看到的内容多至少4个字节(如果派生树中存在多继承,就可能多于4个字节),这多出来的4个字节就是VPTR,它位于每个实例的最前方。VPTR的内容就是一个unsigned int的地址,指向一个内存区域,而这个被指向的内存区域就是VTABLE,所谓虚函

2006-11-17 13:16:00 3259 1

原创 初探google toolbar上关键词标记的实现方式

 google toolbar的功能之一是把指定的关键字高亮显示出来,只要在搜索框里写上想要高亮显示的内容,再按“切换此网页上搜索字词的标明状态”按扭,网页上所有这些内容就以某种背景显示出来了。猜想要实现“以某种背景显示出来”这个功能,应该是通过CSS,也就是说google toolbar通过调用浏览器的功能,动态的修改网页的内容,并设置了一些CSS样式。为了证实这个想法,我写了一个简单的网页,内

2006-11-16 22:20:00 3160 3

原创 “对口答辩”随想

之前有过一个设想,就是带PPT的相声,两个演员你一言我一语,同时前面摆一台笔记本,把相声中的相关场景以PPT的形式展现出来。不过这个设想从来没实践过,呵呵。今天看博士师兄师姐预答辩,突然想,如果答辩改为对口的,会怎么样?一个博士展示自己的PPT,为“逗答”,旁边站一个硕士,接长问短,为“捧答”。博士说:这里是我的一个创新点。硕士问:那怎么就创新了呢?博士说:我说说你听听,在想当初……很

2006-11-15 23:32:00 1345

原创 Win32环境下两种用于C++的线程同步类(下)

 上一篇中我介绍了一种通过封闭Critical Section对象而方便的使用互斥锁的方式,文中所有的例子是两个线程对同一数据一读一写,因此需要让它们在这里互斥,不能同时访问。而在实际情况中可能会有更复杂的情况出现,就是多个线程访问同一数据,一部分是读,一部分是写。我们知道只有读-写或写-写同时进行时可能会出现问题,而读-读则可以同时进行,因为它们不会对数据进行修改,所以也有必要在C++中封装

2006-10-17 15:17:00 2602

原创 Win32环境下两种用于C++的线程同步类(上)

 线程同步是多线程程序设计的核心内容,它的目的是正确处理多线程并发时的各种问题,例如线程的等待、多个线程访问同一数据时的互斥,防死锁等。Win32提供多种内核对象和手段用于线程同步,如互斥量、信号量、事件、临界区等。所不同的是,互斥量、信号量、事件都是Windows的内核对象,当程序对这些对象进行控制时会自动转换到核心态,而临界区本身不是内核对象,它是工作在用户态的。我们知道从用户态转换到核心

2006-10-17 13:58:00 4293 1

原创 一种取得BSTR内容字节数的写法

BSTR是一种和VB兼容的字符串,它的特点是不再依靠/0来作为字符串结束的标记,而是在内容之前加了4个字节作为长度标志。BSTR本身是一个指向字符内容首部的指针,而长信息是在这个指针之前的4个字节,其值等于字符串内容长度,注意BSTR本身保存的是UNICODE编码的字符串,所以对于英文来说,它的长度是实际字母个数的2倍。因为这种特殊的存储结构,BSTR不能直接用C语言的malloc、free来

2006-08-02 15:40:00 2043

原创 关于server to server通信时dialback握手的问题

我尝试让我编写的XMPP服务器能与其他服务器互通,下面是与GOOGLE TALK互通时握手的数据: [2006-6-22 1:22:04] 从64.233.166.129收到数据: xmlns:stream="http://etherx.jabber.org/streams" xmlns="jabber:server" xmlns:db="jabber:server:dialback"> [200

2006-06-24 13:55:00 2838

原创 笑话

今天白天,同学甲发短信问同学乙,我们学校的DNS设成什么?我建议回答:dns.nankai.edu.cn。类似的还有:Keyboard error. Press any key to continue.问:这个抽屉的钥匙在哪?答:在抽屉里。 

2006-06-20 00:31:00 1666 1

原创 用.Net的动态代码生成功能实现AOP

随着AOP的概念被越来越多的讨论,动态代码生成技术也正受到更多人的重视。动态代码生成可以分为动态生成源代码、动态生成中间代码、动态生成机器码等几个层次。动态生成源代码最为简单,各种WEB开发环境都可以理解为这一层次,例如,用ASP很容易写出如下代码:% Response.Write "alert(hello world);" %>而动态生成中间代码或机器代码则要复杂得多,一般来

2006-06-16 19:04:00 3943 3

原创 一种WEB表单验证的简单方法

WEB表单的客户端验证有各种各样的写法,登录为form的onsubmit事件或submit按扭写一个函数,例如使用asp.net的validator系列控件等。对于小表单(只有一两个表单域的表单)我想就不必再专门写一个验证函数了,只需要在form的onsubmit事件里加上:onsubmit="return domainname.value==?(alert(请输入搜索内容),fals

2006-06-15 10:42:00 2242

原创 突然发现我的文章被转载了

今天GOOGLE了一下才发现我下面的那篇.net 2.0 AOP的文章被IT168转载了,呵呵,地址是http://tech.it168.com/n/2006-06-03/200606031413219.shtml说高兴吧,总算是自己的成果被人认可了;说不高兴吧,他们也没通知我一声 :P不过以前我开网站时转别人的文章也没打过招呼,呵呵,所以也就无所谓了。

2006-06-09 11:37:00 1839

原创 一种基于.Net 2.0的另类AOP

说这种方法是AOP其实有些牵强,只能说是多少带出了一点面向切面编程的影子。不过它的实现方法很简洁,不需要任何复杂的库的支持,唯一需要的就是C# 2.0,使用的关键技术是泛型编程和匿名委托。我的需求是这样的:比如有一个函数,要从一个配置中取得一个整数值:int GetIntValue(){  try  {    return Int32.Parse(System.Configuration.Conf

2006-05-31 23:08:00 2815 1

原创 Flash的Socket与WebService功能

最近接触了Flash。当然以我的能力肯定做不了动画的,而是把Flash当成一个受管的编程平台,去做一些小程序的开发了。第一个问题是Socket。Flash是支持TCP Socket的,但实现起来有点别扭。首先我没有发现Flash有监听端口的能力,这也正常,如果用户打开一个带Flash的网页,就会监听一个端口,那确实有点不厚道。在flash中Socket类叫做XMLSocket,通过Connec

2006-05-31 23:00:00 3508 2

原创 .Net中的TLS(线程局部存储)

一些编译器(如VC++中的CL)支持所谓“TLS(Thread Local Storage)”的特性,它的意思是让静态变量的唯一性只作用于线程内,在一个类中声明的一个静态变量对于两个线程来说是两个变量,如:__declspec(thread) static int a;.Net下也支持TLS,它是通过变量属性的方式来声明的。例如,下面的代码: using System;using

2006-05-31 22:59:00 2589

原创 胡乱思考一些和COM有关的问题

今天突然想起来一些和COM有关的问题,自己答不上来,列在这里,也许有一天能答上来了再把答案补在后面。各位朋友如果有好的答案也希望能不吝赐教,呵呵。问题: 1 对于实现IDispatch的对象,如果不依靠IDE的支持,还需要为每个方法写IDispath的访问代码吗(即如何把对Dispatch ID的访问变为真正的方法调用)?2 VB、VBScript这样的语言只能使用实现了IDispat

2006-05-31 22:57:00 1362

原创 理解HTTP消息头 4

服务器返回的消息服务器返回的HTTP消息也分为消息头和消息体两部分。前面连载的第二篇里已经介绍了返回消息中常见返回代码的含义。对于非正常的返回代码的处理比较简单,只要照着要求去做就好了,而对于正常的返回代码(200),其处理方式就多种多样了。1 Content-TypeContent-Type是返回消息中非常重要的内容,它标识出这个返回内容的类型,其值为“主类型/子类型”的格式,例如最

2006-05-31 22:55:00 2086 1

原创 理解HTTP消息头 3

(三) 客户端发送的内容这一次主要来观察HTTP消息头中客户端的请求,从中找到一些有意思的内容。 1 HTTP_REFERER写两个简单的网页:a.htm:to page bb.htm:haha内容很简单,就是网页A中有一个到B的链接。把它们放到IIS上,并访问网页A,从中再点击到B的链接,于是看到了B页的“haha”。那么这两次请求有什么不同吗?观察它们所发送的HTTP消息头,最明显的区

2006-05-31 22:54:00 2369 2

原创 理解HTTP消息头 2

常见的HTTP返回码上一篇文章里我简要的说了说HTTP消息头的格式,注意到在服务器返回的HTTP消息头里有一个“HTTP/1.1 200 OK”,这里的200是HTTP规定的返回代码,表示请求已经被正常处理完成。浏览器通过这个返回代码就可以知道服务器对所发请求的处理情况是什么,每一种返回代码都有自己的含义。这里列举几种常见的返回码。1 403 Access Forbidden如果我们试

2006-05-31 22:53:00 4146 1

原创 理解HTTP消息头 1

但凡搞WEB开发的人都离不开HTTP(超文本传输协议),而要了解HTTP,除了HTML本身以外,还有一部分不可忽视的就是HTTP消息头。做过Socket编程的人都知道,当我们设计一个通信协议时,“消息头/消息体”的分割方式是很常用的,消息头告诉对方这个消息是干什么的,消息体告诉对方怎么干。HTTP传输的消息也是这样规定的,每一个HTTP包都分为HTTP头和HTTP体两部分,后者是可选的,而前者是必

2006-05-31 22:52:00 3421

原创 VB调用DLL导出函数出现“Bad DLL call convention”的解决

用VB6调用VC6下编译的DLL中的导出函数,调试运行时会报告“Bad DLL call convention”,而编译成EXE以后直接运行则没有问题。上网查阅文章后发现,解释方式下的VB调用C语言写的函数,仅限于PASCAL调用约定的函数,也就是stdcall方式,而C方式的函数(cdecl)是不行的,编译运行时无此限制。解决方法,打开DLL文件源代码,在导出函数的声明和实现前面都加上关

2006-05-31 22:48:00 4893

原创 思考一个模式识别与机器学习相关的问题

(上高中时产生的想法,但不知道有没有人做过相关的研究)我们知道,模式识别与机器学习方法在文字扫描识别和手写识别领域有着非常成功的应用,我们可以通过断的指出机器识别手写文字的错误来让机器逐渐适应我们的手写字体,从而不断提高机器的识别正确率。但这种识别的一个弱点在于,我们总需要人为的指出机器识别的错误,机器是不可能自己觉得自己有错的。设想一种有前提约束的条件,例如,要识别一串文件,里面的数字5和字母S

2006-05-31 22:44:00 2434 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除