小武哥博客Chrome WebStore App发布啦~

2011年5月29日 17 条评论

好消息,好消息,小武哥博客Chrome Webstore App发布啦~~

喜欢使用chrome的同学,可以通过下面几种方式下载安装应用: 阅读全文…

分类: 站长日志 标签: , , , 250 views

送知乎邀请码

2011年5月27日 12 条评论

知乎(www.zhihu.com),是创新工场旗下模仿国外的Quora(www.quora.com)所做的一个问答社区。它与一般的像百度知道、搜搜问问那样的问答社区不一样,它只接受被邀请的人注册,只有注册的会员才能参与问题的回答与相关内容的查看。它里面回答问题的都是一些相对比较高端、专业的人士,因此,问题的答案相对比较高质量、权威。前段时间,小武哥也被朋友邀请注册了知乎社区,目前知乎的邀请码相对来说还是比较难得的,在泡了一段时间后,小武哥也陆续有了一些邀请名额。在这里分享给长期以来关注我博客的朋友。第一枚邀请码送给第10个回复的朋友,请留言的朋友留下自己的邮箱,谢谢!另外,接下来小武哥有了邀请的名额,会陆续放出来,具体是哪一楼的朋友,这里先卖个关子,敬请期待,我会在后面继续更新此文告知大家,此文长期有效,谢谢大家的关注! 阅读全文…

分类: 站长日志 标签: , , 237 views

轻博客(MicroBlogging)

2011年5月21日 6 条评论

互联网是个风生水起的天地,近年来,一直有各式各样的新潮的产品出来,从以Fackbook为代表的SNS社区,到以Twitter为代表的微博。这些个产品,引领了最近几年互联网发展的潮流。Fackbook的出现,国内涌现出校内,开心,朋友,白社会等各式各样的类似产品,Twitter的出现,国内各家互联网公司也争先推出自己的微博产品。时下,这两个还是相当火的互联网概念。最近,互联网上又出现了一个新的名词——轻博客,英文名是MicroBlogging。我们知道,当前我们用的微博都叫做MicroBlog,而这个轻博客又叫MicroBlogging,那到,轻博客到底是什么样的?它与微博有什么区别呢? 阅读全文…

分类: 我的观点 标签: , , 384 views

手把手教你调试STL容器(下)

2011年5月16日 1 条评论

本文是《手把手教你调试STL容器》系列的下篇,阅读本文之前,请先阅读上篇《手把手教你调试STL容器(上)》。上篇中主要介绍了STL中string, vector, list, deque这些基本的容器。本篇将介绍由红黑树实现的map/set/multimap/multiset这些容器,以及由hashtable实现的hash_map/hash_set/hash_multimap/hash_multiset这些容器。

  • 1. 红黑树(Red black tree)
  • 我们知道, STL中的map/set/multimap/multiset,都是由红黑树实现的,因此我们要了解map/set/multimap/multiset这些容器是如何实现的,就首先要了解红黑树的基本组成: 阅读全文…

    分类: 程序人生 标签: , , , , , , , , 1,130 views

    wuzesheng.com大事记——新主机,优化手机版

    2011年5月12日 7 条评论

    为了得到更佳的访问体验,为了提供更加稳定的服务,小武哥的博客(wuzesheng.com)于最近更换了主机。新的主机是多线机房的,应该能在最大程度上照顾到在不同网络环境下访问的朋友,小武哥在这里感谢所有朋友的支持,我会一如继往,继续努力推出一系列优质的内容。另外,随着iphone/android平台越来越流行,网站在移动设备上的体验也显得越来越重要,因此,小武哥的博客在更换主机的同时,也发布了手机版本。在手机上访问的朋友,也是用相同的域名www.wuzesheng.com,得到的页面会根据手机屏幕自动适配,更加适合在移动设备上阅读,希望大家能够喜欢。下面是在我的milestone2上体验的截图:

    当然,由于时间仓促,换主机的过程中难免会出现一些疏漏,新主机也难免会出现一些难以预料的问题,所以如果朋友们在访问的过程中发现什么不友好的地方,甚至是bug的话,请给小武哥留言,我会及时改近,谢谢大家!

    分类: 站长日志 标签: , 124 views

    把错误扼杀在编译期——static assert

    2011年5月8日 3 条评论

    随着泛型编程在C++中用得越来越广泛的使用,更好的静态检查(static checking)以及可定制型错误消息的需求显得越来越有必要。本文的主要内容是讲一些如何在编译期对程序做一些检查、把错误尽可能扼杀在编译期(Complie Time)的方法,这里称之为static assert技术。

    Static assert技术主要是利用C++编译器及语言本身的特性来完成,它所用到的主要思想包括以下两点:

  • 1. 表达式在编译期计算所得的结果是常数
  • 2. 传给编译器一个表达式,如果是非零便合法,如果是零则非法
  • 有了上面的思想,我们便可以想办法,利用C++语言的特性,来实现static assert,这里不再卖关子,直接给出几点事实: 阅读全文…

    分类: 程序人生 标签: , 855 views

    手把手教你调试STL容器(上)

    2011年5月3日 3 条评论

    众所周知,调试(Debugging)是每个程序员所要必备的基本的技术素养,尤其是对C/C++的程序员来说。对于在linux下用C/C++开发的朋友,相信对GDB不会陌生,当程序有bug或者是出现core dump的时候,GDB是我们最好的朋友。STL是C++相较于C而言,增加的非常强有力的工具,它从某种程度上把C/C++程序员从繁琐的基本数据结构中解放了出来。不过,STL虽然用起来十分方便,但是,用GDB调试过C/C++程序的朋友都有这样痛苦的经历,在GDB状态下,要知道某个STL对象(比如容器)中的数据内容,并不是那么直接、简单。本文的主要内容就是介绍STL中大家比较常用到的容器的基本组成,帮助大家能够在调试的时候更好的驾驭它们。

  • 1. string
  • string是STL中最为常用的类型,它是模板类basic_string用char类型特化后的结果,下面我们来看一下string类型的基本组成: 阅读全文…

    条件变量(Condition Variable)详解

    2011年4月24日 9 条评论

    条件变量(Condtion Variable)是在多线程程序中用来实现“等待->唤醒”逻辑常用的方法。举个简单的例子,应用程序A中包含两个线程t1和t2。t1需要在bool变量test_cond为true时才能继续执行,而test_cond的值是由t2来改变的,这种情况下,如何来写程序呢?可供选择的方案有两种:

  • 第一种是t1定时的去轮询变量test_cond,如果test_cond为false,则继续休眠;如果test_cond为true,则开始执行。
  • 第二种就是上面提到的条件变量,t1在test_cond为false时调用cond_wait进行等待,t2在改变test_cond的值后,调用cond_signal,唤醒在等待中的t1,告诉t1 test_cond的值变了,这样t1便可继续往下执行。
  • 很明显,上面两种方案中,第二种方案是比较优的。在第一种方案中,在每次轮询时,如果t1休眠的时间比较短,会导致cpu浪费很厉害;如果t1休眠的时间比较长,又会导致应用逻辑处理不够及时,致使应用程序性能下降。第二种方案就是为了解决轮询的弊端而生的。然而条件变量在使用的过程中,比较容易出错,如何用得不正确的话,会适得其反的,接下来,我将详细分析如何来使用条件变量,希望能够给在使用条件变量过程中遇到问题的朋友有所帮助。 阅读全文…

    分类: 程序人生 标签: , , 14,307 views

    最近好忙

    2011年4月20日 5 条评论

    最近好忙,希望接下来的两周,项目能顺利些,早日release!写此文勉励自己,坚持最后的两个星期,小武加油!伙伴们加油!

    分类: 生活感悟 标签: 181 views

    c++ template特化小trick

    2011年4月11日 1 条评论

    前几天在看boost/asio代码的时候,遇到一个奇怪的语法,后查c++ std文档,发现是template特化过程中一个小小的trick,特做此记录,分享给遇到同样问题的朋友,下面先看例子:
    阅读全文…

    分类: 源码分享, 程序人生 标签: , , 578 views

    事件处理模式之Reactor(二)

    2011年4月5日 2 条评论

    本文是上一篇《事件处理模式之Reactor(一)》的下一篇,上一篇主要介绍了reactor模式的基本理论,这一篇主要通过实例,来介绍Reactor模式的具体使用。在开始本文之前,有必要再说明一下,reactor的源码的地址:reactor源码, 感兴趣的读者朋友可以自己用svn客户端check out到本地。
    如左图所示为reactor项目的基本结构,整体项目分为三个部分:

  • 一是libreactor项目,用来生成reactor相关的lib;
  • 二是server项目,是用reactor实现的一个时间服务器程序;
  • 三是client项目,是用reactor实现的一个客户端程序。
  • 服务端和客户端之间通过telnet协议进行交互,目前仅支持time和exit两个命令,客户向服务端发送time命令,服务端返回当前时间;客户端向服务端发送exit命令,服务端断开客户端连接。如果要实现其它命令,可以直接通过扩展相关处理逻辑来实现。这里我们关注的重点是reactor模式,因此不在支持的命令方面做过多的扩展,感兴趣的朋友可以自己进行扩展。 阅读全文…

    事件处理模式之Reactor(一)

    2011年3月28日 3 条评论

    写过大中型网络服务器的朋友相信对事件处理模型(有时也叫事件触发模型)不陌生。今天要讲的Reactor就是在事件处理模型中用的比较多的一种设计模式。请大家先看下面的图,有个初步的印象:

    在上图中,可以看到主要有以下四种角色:
    1. Reactor:
    Reactor是Reactor模式中最为关键的角色,它是该模式最终向用户提供接口的类。用户可以向Reactor中注册EventHandler(3),然后Reactor在“反应(react)”的时候,发现用户注册的fd上有事件发生,就会回调用户的事件处理函数。下面是一个简单的设计: 阅读全文…

    linux程序分析工具介绍(二)—-ldd,nm

    2011年3月19日 2 条评论

    本文要介绍的ldd和nm是linux下,两个用来分析程序很实用的工具。ldd是用来分析程序运行时需要依赖的动态库的工具;nm是用来查看指定程序中的符号表相关内容的工具。下面通过例子,分别来介绍一下这两个工具:

    1. ldd, 先看下面的例子, 用ldd查看cs程序所依赖的动态库:

    wuzesheng@wuzesheng-ubuntu:~/Public$ ldd cs
    	linux-gate.so.1 =>  (0xffffe000)
    	libz.so.1 => /lib/libz.so.1 (0xb7f8c000)
    	libpthread.so.0 => /lib/libpthread.so.0 (0xb7f75000)
    	libcrypto.so.0.9.8 => /usr/lib/libcrypto.so.0.9.8 (0xb7e4d000)
    	libpcre.so.0 => /usr/lib/libpcre.so.0 (0xb7e21000)
    	libstdc++.so.6 => /usr/local/gcc4.5.1/lib/libstdc++.so.6 (0xb7d40000)
    	libm.so.6 => /lib/libm.so.6 (0xb7d18000)
    	libgcc_s.so.1 => /usr/local/gcc4.5.1/lib/libgcc_s.so.1 (0xb7cfd000)
    	libc.so.6 => /lib/libc.so.6 (0xb7bbc000)
    	/lib/ld-linux.so.2 (0xb7fab000)
    	libdl.so.2 => /lib/libdl.so.2 (0xb7bb7000)

    阅读全文…

    分类: 程序人生 标签: , , , 16,699 views

    分享:Discuz论坛自动发帖机

    2011年3月6日 15 条评论

    最近,因为工作上需要,要往自己搭建的discuz论坛系统上发帖。刚开始,在网上找了好多,总是出现各种各样的问题,有的要注册,有的要收费,还有的在用的过程中不稳定,经常出现各种异常。浪费了一整天的时间,没有找到合适的,于是决定自己写一个。下面分享一个做的过程中遇到的一些问题,以及解决的方法。最后,我会把源码分享出来,希望能够对有需要的朋友有所帮助。

    1. 准备工作

    开始动手写程序之前,需要了解一下discuz发帖的基本原理。这里最好的方法就是用抓包工具来抓取浏览器发包时与web服务器之间的交互过程。可选的工具有Firebug和HttpWatch。Firebug是Firefox上专用的,是免费的,不过功能没有HttpWatch强大。HttpWatch是可以在IE和Firefox上用的,功能比较强大,但是收费的,不过网上应该能下到免费版的。我个人比较推荐使用功能强大的HttpWatch。 阅读全文…

    做一个懒惰的程序员

    2011年3月3日 3 条评论

    首页声明一下,本文的作者不是我,是一位搞IT的同仁的写的,看了之后,深入感触,于是和大家分享一下,原文的地址是:http://blog.imalbert.com/archives/35.html,下面是原文:

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~(华丽丽滴分界线)

    本文写给所有可爱的程序员,(我)你们都是一群可爱的,用双手建造世界的思想家。

    从今天起,我要做一个懒惰的程序员。

    第一 拒绝鼠标

    从今天,我将拒绝鼠标。

    鼠标,是鼠标手的根源,无数的程序员都被鼠标手所困扰,这似乎已经成为了程序人员的专利。我们养成了一个一个的“恶习”,比如,滥用鼠标右键刷新,看文档的时候,喜欢用鼠标来标记正在阅读的段落等等。这些非常规的使用使我们的手得了严重的疾病,我不知道,这样继续下去,当我们牙齿掉光的时候,是否还有能力抚摸妻子动人的面庞。

    所以,我要从以下几个方面拒绝鼠标的诱惑:(虽然某些时候它真的很方便) 阅读全文…

    分类: 程序人生 标签: , , , 736 views