也谈设计模式

February 27th, 2008 Michael Posted in C / C++ / 其他技术, 心情 / 生活 16 Comments » 2,768 views

最近可以用三个字来形容“忙”“乱”“烦”,其实我估计很多人也都这状态,如同家家有本难念的经,人人都有没法说的烦恼。

在这状态下,已经很久没有写一些跟技术相关的东西了,前两天想升级BSD的系统到最新的6.3版,结果cvsup了一个多小时源码树没有完,就心烦气躁的Ctrl+C放弃了,最近因为诸多项目启动,连续一周多写系统分析文档,一个项目一整就是三十来页的分析文档,其实还是很草的那种,实在也没有精力和心思给写得彻彻底底的,估计真完全弄踏实了,少说也得上百页才能算合格的系统分析文档。

写这两份文档的中间儿,想到了我的兄弟们在拿着文档开发过程中可能会面临的一些问题,其中最担心的就是在面向对象开发的时候面临的对象间关系处理问题,专业术语讲,那就是设计模式的问题。

这东西也老生常谈了,说实话,如同大学里面学的那几门计算机基础知识一般,设计模式实在很重要,貌似很基础的东西,一讲大部分都能明白,但是真正用起来和项目结合,还是一头雾水,这就跟咱们大学学数据结构一样,回想起来,有几个在后来工作中用过那些最基本的二叉树、链表、图一类的东西? 原来3721的老哥李钊说得很经典,中国为啥计算机科学落后,缺少的不是高级程序员,缺少的是对计算机基础知识理论理解透彻的人。很多武侠小说里面的高手,到最高境界不是会多少套路和拳法,而是用最简单的招式化解一切高深的套路。

相比之下,设计模式对于面向对象开发来说,有点儿类似的味道,会写类、继承、重载、抽象一类的东西不难,但是把这些东西用更简单的思路来看待和组织就有难度了,设计模式不是把他们复杂化,而是为了让问题更简单。把简单的东西发挥到极致比把复杂的东西学会往往更有价值。

说到这里,估计也看出我这还是没有在讲技术,是啊,一真进入技术话题,设计模式不是这么简单三言两语能说明白的,常见的23种模式,经典的21种,随便一种都得且说呢,记得看过一个哥们的blog上用星际争霸的实现思路来讲述了大部分的设计模式基础,感觉真不错,大家可以google一下。

今天写这些,主要是因为最近的几个项目系统分析文档中涉及到不少地方需要运用设计模式,于是乎准备在最近给我的兄弟们找个时间讲堂课,说说常见的设计模式的应用,最近正准备动手弄个PPT,所以就先酝酿酝酿思路和情绪。

真正有兴趣、有决心、有信心、有恒心深入一下的朋友,去看看这本书吧:《设计模式》,经典至极,该书作者均是国际公认的面向对象软件领域的专家,号称“四人帮”。

AddThis Social Bookmark Button

重构和敏捷软件开发

July 18th, 2007 Michael Posted in C / C++ / 其他技术 1 Comment » 2,963 views

  其实一直一来任何个人、团队和公司都在潜意识中,不知不觉的进行着这样的努力,只不过近些年才成为一个专门的课题被单独的提出来,得到广泛深入的关注。

  重构是各个持续性大型项目都会面临的问题,而敏捷软件开发则是很多团队都在尝试的软件开发思路,不过在实际的情况中,很少有团队能够得心应手的实施起来,而今,我们的团队也面临了这样的问题,在以前的一个公司,当时为了一个大型项目得以顺利重构,重构之前对团队的每个成员进行了大规模的重构和敏捷开发的培训和路演,然后再得以成功实施,而我们这次的项目重构同时还面临了沉重的新产品开发压力,不太可能这样来实施,肩上的担子很重啊。

  推荐几本经典书给想深入研究软件开发的朋友:
  测试驱动开发——实用指南       中国电力出版社
  设计模式:可复用面向对象软件的基础  机械工业出版社
  重构:改善既有代码的设计(中文版)   中国电力出版社
  敏捷软件开发:原则、模式与实践    清华大学出版社

AddThis Social Bookmark Button

顺利从T60迁移到T61

July 9th, 2007 Michael Posted in C / C++ / 其他技术 4 Comments » 1,871 views

  前两天终于拿到期盼已久的T61宽屏,外观没有想象中好看,不过至少满足了我两点需求:宽屏和一如既往的Thinkpad , 接下来面临的最大问题就是安装系统,每次重新安装系统都是非常痛苦的事情,没有个两三天是没法彻底搞定的,各种开发工具、环境配置、银行客户端啥的,很麻烦,于是琢磨着怎么能省事。

  手头正在使用的T60系统基本还算稳定,最佳的办法就是把这上面的整套东西搬到T61上,我对比了一下两个型号间的配置,发现变化并不大,于是开始动手,第一个想到的办法就是整个硬盘对拷,可以使用类似Ghost或者Acronis这样的软件来实现,问题是需要把硬盘拆下来挂到T60上,尝试把硬盘拆下来,再找了个移动硬盘盒,结果发现硬盘盒是IDE接口,没法插上SATA的硬盘,郁闷,只能使用最原始的办法,就是Ghost,我在T60上挨着一个盘一个盘的Gohost,刻录成DVD后在Ghost恢复到T61硬盘上,虽然费事,但是在T61上顺利看到Windows登陆界面的时候,还是很兴奋的。

  接下来重新安装了T61的显卡驱动、网卡驱动、硬盘SATA驱动,升级了Tinkpad的Hot key软件,居然就全部ok了,实现了无缝的迁移。

  使用了几天,没有发现任何问题和不稳定现象,也逐渐适应了T61的样子以及相比T60更生硬的键盘,宽屏的确就是爽 :)

AddThis Social Bookmark Button

个性化搜索引擎时代到来

June 27th, 2007 Michael Posted in C / C++ / 其他技术 38 Comments » 28,767 views

  大家多少都用过搜索引擎,google、yahoo、baidu还有很多搜索引擎目前都有个特点,就是你和我使用同一个keyword去搜索,得到的结果将是一样的,但事实上我们两个因为个人性格、爱好、文化背景等不一样,对同样的搜索结果的满意度是不一样的,有没有办法能让搜索引擎自动根据我们两个之间的这种差异,返回给我们最适合各自的结果呢? 答案是肯定的,这就是个性化搜索,根据不同人的不同特点,提供不同的搜索结果。
Read the rest of this entry »

AddThis Social Bookmark Button

搞定SVN的Non-ASCII character错误

May 25th, 2007 Michael Posted in C / C++ / 其他技术, Linux / BSD No Comments » 3,340 views

  FreeBSD上的目录或者文件的名字如果存在中文,就将在默认设置下导致svn出错,解决方法两种:

  1、把中文目录或者文件都改成英文的。
  2、设置BSD环境的Locale,可以是全局的设置,也可以是当前用户运行时的环境locale,通过export命令设置locale为en_GB.UTF-8或者其他跟你实际环境一致的值,可以通过locale -a得到全部的列表。

  小问题把我折腾够呛。。。

AddThis Social Bookmark Button

被SVN的 Non-ASCII character 错误困扰,郁闷之极。

May 24th, 2007 Michael Posted in C / C++ / 其他技术, Linux / BSD 2 Comments » 2,525 views

  这两天在BSD上遇到 SVN的 Non-ASCII character (code xxx) detected 错误,导致svn无法使用,搞了很久也没有搞定,实在郁闷,影响到项目进度了,不知道谁能帮忙一下。

AddThis Social Bookmark Button

用svn的post-commit钩子实现类似vss的shadow功能

May 22nd, 2007 Michael Posted in C / C++ / 其他技术, Linux / BSD No Comments » 1,627 views

   原来用vss开发项目的时候,习惯了使用shadow,而svn默认不支持这样的功能,研究了一下hooks,轻松使用post-commit搞定之,对svn的印象好了一些。

AddThis Social Bookmark Button

对SNMP的MIB总算有所了解

April 20th, 2007 Michael Posted in C / C++ / 其他技术 No Comments » 2,605 views

  MRTG用了多年,也搞过一段RRDTool和Cacti做监控画图,但是一直都对SNMP的MIB库定义感到模棱两可,尤其那堆类似 .1.3.6.1.2.1.6.9.0 的数字感到迷惑,这回收集了一些资料,好好整理了一下,自己感觉清晰了不少,把收集整理的资料做个笔记,也分享给朋友。

SNMP协议介绍
  简单网络管理协议(SNMP:Simple Network Management Protocol)是由互联网工程任务组(IETF:Internet Engineering Task Force )定义的一套网络管理协议。该协议基于简单网关监视协议(SGMP:Simple Gateway Monitor Protocol)。利用SNMP,一个管理工作站可以远程管理所有支持这种协议的网络设备,包括监视网络状态、修改网络设备配置、接收网络事件警告等。虽然SNMP开始是面向基于IP的网络管理,但作为一个工业标准也被成功用于电话网络管理。
Read the rest of this entry »

AddThis Social Bookmark Button

顺利重装了postfix

March 14th, 2007 Michael Posted in C / C++ / 其他技术 5 Comments » 7,305 views

  昨晚把新服务器上唯一没有弄的postfix邮件系统给搞好了,之前担心这是个困难的事情,因为前一台服务器上的postfix邮件系统当初就是费了很多周折,最后也是糊里糊涂给弄好的,之前一直想整理一份详细笔记,结果由于事情忙和想着这事就头大而一拖再拖,最后直到机器挂了也没有写。好在顺利运行了有一年多都很稳定,一直也不想区触碰这个敏感的东西,这回没法,被逼的!

  过程比想象中的顺利,凭着当初的一点印象,挨着东西装,要不说我喜欢FreeBSD呢,在ports下安装这些东西真的很方便,依赖关系完全不用管,我把ports默认的fetch下载替换为prozilla多线程下载,安装的时候下载快了N倍,的确很爽。 先后分别安装了这些东西,openssl、courier-imap、cyrus-sasl2、postfix、clamav、spamassassin、mailscanner、webmail,最后实在有点兴奋,把mailscanner-mrtg也弄上了,嘿,没想这个东西还真不错,监控内容非常全,这下邮件的监控也齐了!想看mailscanner-mrtg效果的朋友访问这里 http://mrtg.toplee.com/mailscanner-mrtg/ ,用户和口令都是demo

  这回再遇到配置postfix,我真的就不怵了!呵呵,给我发邮件吧 lee # toplee.com (替换#为@)

AddThis Social Bookmark Button

面向高负载的架构Lighttpd+PHP(FastCGI)+Memcached+Squid

December 21st, 2006 Michael Posted in C / C++ / 其他技术, 西拉东扯 7 Comments » 6,344 views

  因新项目,开始从Apache上转移到Lighttpd上,同时还有Memcached的大量使用,借此机会把toplee.com的服务器环境也进行一些改造,顺便整理一份文档留存!
  更多大型架构的经验,可以看我之前的一篇blog:http://www.toplee.com/blog/71.html

12.31 截至今天完成以下内容:
    1. 完成lighttpd的安装配置,并且做了大量的优化;
    2. 几乎全部看完了http://trac.lighttpd.net/trac/wiki上的文档;
    3. 配置了lighttpd和php的fastcgi支持;
    4. 增加了php对XCache的支持;
    5. 设置了部分域名在lighttpd上的解析;
    6. 完成了Apache通过mod_rewrite和mod_proxy将部分域名以及全部的php访问转到lighttpd上;
    7.完成Memcached的环境搭建,并且修改了部分数据库操作缓存到MC上;

Read the rest of this entry »

AddThis Social Bookmark Button