Archive for September, 2005

周末无主题

家长要来视察工作了

  今天晚上出发,明天就得早起去火车站迎接老妈了。老妈上次来上海还是20多岁的时候,比我现在还要年轻。家长来了,我们小两口的生活要轻松一段时间了,呵呵。好吃的东西会有不少,不过减肥形势要更加严峻了。

  

鄙视电视购物

  昨天晚上央视生活频道揭露了部分电视购物的猫腻。我是从来不相信电视购物的,天生的对那种夸张的语气急促的语速还有虚假的内容感到恶心。印象最深的是橡果国际这个公司,还在读高中的时候就看过它们代理的产品广告,一直在愤怒为什么监管部门对这种骗子公司还有脑白金之流一直放任自流。

  

拒绝加班

  刚刚上司过来,意思说是马上放长假了,明后天来单位加班吧。回答很简单:NO!我得陪老妈和老婆。嘿嘿,任务完成了就是底气足。

  

2 Comments

又吃了苍蝇

  最近这几个月信箱和手机里面经常收到各种垃圾邮件和短信,很是无奈。每次看到这种东西,感觉就像吃了只苍蝇,要腻味半天。所以,前不久看到上海将实现手机号码实名制,打心眼里面感到赞同,至于前段时间争议颇大的网络实名制,只要能够保护我的隐私,实名注册似乎也没有什么不好,反正本人一不反党二不反人类,从来也没有动过在网上骗人钱财骗人情感的念头。有人说实名制侵犯了个人通信自由,说我这样的拥护者是习惯于做奴才,我要说与其被垃圾邮件和垃圾短信骚扰我的心情,我选择放弃匿名的自由。

  可惜的是,有我这么好的顺民,但是现在的网络运营商能不能够营造出一个干净的通信空间,我的信心不足。水至清则无鱼,没有这些猫腻,运营商的油水似乎也要少一些。

  By the way:微软的hotmail值得表扬,到目前为止,几乎没有什么垃圾邮件能够通过它的甄别,而Tom提供的邮箱则以平均每天3封以上的速度收到垃圾邮件。

Leave a comment

双休日★中秋节

  中秋节刚好遭遇双休日,于是更多了几分轻松。
  第一天
  熬夜观看了男篮亚锦赛的我依旧很早就醒来,而且精神很不错。白天在家胡乱翻翻书看看电视打扫卫生,还有和燕子讨论工作。呵呵,双休日还要坐在一起讨论怎么调试怎么写程序还有推敲文档的翻译理解的情侣应该很少,不过我们两个还是很开心,这也算我们的共同话题吧。
  转眼到了下午4点半,两人决定出门散散步:食品商店里面买两块月饼一边逛街一边分而食之,为中秋节应个景;菜场里买条黑鱼,还有鸡肉豆腐,小小的犒劳一下自己;音像店里买两张盗版DVD,晚上就有了助兴节目……94年关中汉子张艺谋拍了电影《活着》述说一个道理活着就是幸福(05年的《十面埋伏》只告诉我们张郎才尽),05年上海小伙子刘翔在这一天里再次在家门口夺得冠军。我和燕子在上海的某个角落幸福的度过我们自己的周末。
  鱼头熬汤,依次加入豆腐、鱼块、鸡块,以及花椒、茴香、葱结、姜片、蒜末、花生一起煮。曾经去书店买过一本家常菜谱,但几乎每次都是不按照套路而是自由发挥,效果却还真得不错。
  第二天
  白天依然是在简单平淡中度过,一同去常去的理发店剪发,一同和熟悉的理发师说笑调侃。出来时天色已黑,一边找餐馆吃晚饭一边在天空中寻找月亮,却失望的发现看不见月亮。幸运的是走过几家人满为患的餐馆,终于找到一家刚好有两人的位置。简单的三个菜:脆皮鲈鱼、滑蛋牛柳、咸肉冬瓜腐竹煲,再加一壶菊花茶。我问燕子是否记得2003年我们一起度过的第一个中秋,在保淑路跑了一圈最后回到青芝坞要了一盆酸菜鱼。
  走出餐厅抬头一看,意外的发现了月亮。原来一开始太早了,月亮还没有露脸呢。天空中似乎有薄薄的云,给月亮蒙上了一圈“华”,可是月光依旧很亮,甚至能看见飞机留下的划过大半个天空的尾迹。

2 Comments

周末感言

  周末,做个小总结吧。
  工作:非常顺利,给自己定的几个目标都完成了。
  生活:比较幸福,小两口的日子简单但是和谐。
  身体:基本健康,似乎燕子有点疲倦,心疼。
  娱乐:很少,所以要在周末尽情放松一下。
  中秋节要到了,希望所有人都能够快快乐乐。特别想念爸爸妈妈,不过下个礼拜老妈就要来上海了,期待中……
  

3 Comments

DIY性能监视器

  做需要频繁处理大数据量的应用程序时对性能非常敏感,最直观的两个指标就是CPU占用率和内存使用量了。最简单的监控方法当然是打开系统自带的任务管理器,不过要在一排进程列表中找到自己感兴趣的一个或者几个进程,似乎不是很方便。比较专业一点的方法是使用系统管理工具里面的性能监视器,常用的、不常用的各种指标都能够在这里找到并且绘制出性能曲线来。不过,我不敢保证所有客户都能够或者愿意来进行设置,能够有一个性能监视整合到软件当中,是一个不错的方法。
  还是去MSDN中查询,很快在Platform SDK文档中找到有专门的一个章节Performance Monitoring,剩下的事情就是仔细研读了。
  (说句题外话,在微软的平台上作开发,阅读MSDN远远比在论坛中发问有用多了)
  性能监控与计数主要有两种手段,一种是直接利用PDH函数,另外一种就是访问注册表。通过比较,我觉得只要基本熟悉一些系统定义好的结构,直接调用API比后者曲线救国要方便直观一些。基本流程可以归纳成下面几步:
  PdhOpenQuery
  创建一个查询:参数是一个句柄指针
  PdhAddCounter
  添加一个计数器,参数包括前面的句柄,而且需要传递一个对计数器的描述字符串,比如需要监控某个进程的CPU占用率时的字符串如下:
  Process(%s)% Processor Time %s是进程名
  需要监控某个进程的内存使用情况,字符串如下:
  Process(%s)Working Set %s是进程名
  成功添加计数器后就可以开始查询了,分别调用
  PdhCollectQueryData
  PdhGetFormattedCounterValue
  前者收集查询数据,后者把数据按照制定格式填充到一个系统定义结构当中,最后访问这个结构就可以获得我们关心的性能指标了。如果查询失败,返回值将会是-1。
  原理清楚了,就可以将这个流程封装起来成为一个类,放在一个独立的线程当中通过定时器定期查询一下软件的各项性能指标,以消息的形式抛给主界面所在线程以图表方式显示出来或者做其他处理都可以。
  补充一下:系统中提供的指标还有很多很多,我们可以看看管理工具中的性能监视器,性能监视器中的指标名是什么,基本上也就知道添加计数器的时候的描述字符串是什么了。

Leave a comment

RPWT

  这两天都是在跟软件的运行效率较劲,看着每次扫描数据的处理时间一点点缩短,心里无疑是开心的。但是这里还是给自己遗留下了一个问题,如果不能用我所能够认识的理论来解释的话,我只能把它归结为人品问题了。
 
  问题描述
  在一次完整的处理流程当中,包括了大量的文件读写。但是这些文件的读写应该说是没有什么直接关系的。因为在此之前,所有的数据都已经准备好了。
  ……
  PrepareData(); // (1)
  ……
  WriteData1();  // (2)
  WriteData2();  // (3)
  ……
 
  经过优化,上面三个步骤的运行时间都已经降到了几十毫秒这一数量级。特别是第一步的准备数据,每次运行的时间基本上波动不超过10毫秒,非常稳定。但是后面两个写文件的操作却发生比较大的波动,在50毫秒到100毫秒之间。不过总共加起来还是远远小于我一开始设定的最大值。
  于是我把它们连在一起运行,奇怪的事情发生了。步骤1和步骤2的计时基本上没有什么变化,但是步骤3的运行时间一下子却变成了500多毫秒至1000毫秒,放大了近十倍。
  问题出在哪里?
  很明显,算法本身应该没有太大的潜力可以挖了,一千五百多个文件的写操作在50毫秒之内完成应该没有什么太大的问题。独立运行虽然有波动,但是绝对没有大到这个地步。文件冲突?不对啊,这根本就是不同路径下的文件,怎么会冲突呢。文件打开方式虽然有一个细微的差别,但是这个因素很快就被实际测试给否定了……
  问题的解决:诡异
  郁闷了将近一个下午,问题却意外的得到了解决,但是原因我还是不知道。解决的方式很诡异,那就是把2和3给调换一下秩序!因为我无意中发现注释掉2后,3的运行时间马上变得正常了而且很稳定。然后把2给移到3的后面呢?有趣了,这下居然没有无谓的占用太多的时间。
  天哪,难道真的是人品问题?需要补充说明的几点,2和3谁先运行谁后运行,在逻辑上一点差别都没有;另外一个有趣的现象是,把2移到3之后运行后,运行时间变成了稳定的100毫秒左右,但是此前经常能够达到最短的运行时间为50毫秒。

3 Comments

傍晚

  书上有个说法:傍晚太阳快下山的时候是摄影的好时机,此刻的天空将会呈现非常迷人的宝蓝色……可惜的是我却不能把眼前这一刻的美好景色很好的捕捉出来。
  下班前在窗口所拍。

Leave a comment