I'll take a quiet life. A handshake of carbon monoxide.

0%

原创文章,转载请标明出处:Soul Orbit
本文链接地址:WPA入门(一) —— 到底为什么这么慢?

2013年10月20日,WPT终于迎来了新一轮的更新,在这次更新之后,我们在WPT的目录下已经找不到xperfview的身影了,而WPA则添加了多项新的功能。由于平时用WPA还算用的比较多,而且这工具实在相当好用,所以在这里打算写一些文章介绍一下它。

1. WPT简介

WPT的全名是Windows Performance Toolkit,是Windows下用来进行性能分析的一套工具,它的功能非常强大,你可以使用它来监控CPU,内存,磁盘和网络等等的活动,从而来确定当前系统的性能瓶颈。虽然它功能强大,但是却完全免费。它包含在Windows Assessment and Deployment Kit (Windows ADK)中,最新的版本是8.1,你可以通过MSDN来下载并随意使用它:http://www.microsoft.com/en-US/download/details.aspx?id=39982

WPT主要包含两个部分:Windows Performance Recorder (WPR)和Windows Performance Analyzer (WPA)。从名字我们就很容易看出来,前者是用来记录性能数据的,后者是用来分析性能数据的了,后面我们会更加详细的介绍这两个工具。

2. 这东西怎么做到的?

原理,我们喜欢原理。和其他的性能分析工具不同,它是由Windows本身的事件机制来提供支持的——Event Tracing for Windows (ETW)。

2.1. Event Tracing for Windows (ETW)

ETW是从Windows 2000开始就引入的一种高速的事件记录机制,而在Vista之后,Windows又对其进行了完善,使其可以记录比之前多的多的信息,比如系统CPU上正在运行的堆栈,而现在它已经成为Windows中最主要的一种分析性能问题的方法了。

下面这张图来自MSDN,展现了ETW的主要基本架构,主要分成4个部分:Session,Controller,Provider和Consumer。

  • Provider:ETW的事件提供者,我们在最后的记录文件中看到的事件就是来自于他们。
  • Consumer:ETW的事件接收者,比如我们实现一个实时的Consumer来查看系统中当前有那些事件正在发生。
  • Controller:用于开关ETW的事件。
  • Session:它存在在内核中,用于表示一个ETW事件记录会话。系统中可以存在多个Session,每个Session都可以接收来自于多个Provider的事件,最后我们可以将多个Session中的事件写入一个日志文件中,这个日志文件就叫做Trace。
    etw-overview

通过ETW,我们可以将系统所有关键的地方都加入事件,记录其行为和堆栈,比如CPU执行,线程切换和读写磁盘,这样我们就可以利用这些信息来进行分析了。

Read more »

原创文章,转载请标明出处:Soul Orbit
本文链接地址:Go语言学习笔记:搭建Windows下的Go开发环境

最近突然对Go语言产生了兴趣,主要是因为在使用python的时候遇到了一些不爽的问题,然后发现了Go。Go是Google出的一个动态语言,语法和C++接近性能也非常的好,而且还支持编译成exe发布,并且不依赖任何虚拟机(其实是打包在exe里面了),这种好语言怎么能够错过?所以便一时兴起,开始学习了起来。由于本人还处于异常小白的阶段,所以文章中可能不免有些错误,欢迎大家各种指正。

1. 安装Go

前往Go语言的官方网站:http://golang.org/,下载对应平台的安装包。如果是x86的系统可以就下载i386的,如果是x64的系统,那么就安装amd64的就可以了。另外Go语言在Windows下的的安装包有两种:msi和zip的。zip的是免安装的,解压在配置一些环境变量之后就可以使用,msi的则是安装包版本的,安装的时候会设置好对应的环境变量。为了方便,我就下了x64上的msi安装包:go1.1.2.windows-amd64.msi。下好安装包后,安装过程就很简单了,下一步到底就好了。 虽然msi会自动配置一些环境变量,但是本人在安装完之后还是遇到了部分环境变量丢失的情况,所以在安装完Go之后,我们最后还是检查一些所有的环境变量是否正常。主要的环境变量有以下几个:

  • GOROOT:Go的安装目录
  • GOPATH:用于存放Go语言Package的目录,这个目录不能在Go的安装目录中
  • GOBIN:Go二进制文件存放目录,写成%GOROOT%\bin就好
  • GOOS:操作系统
  • GOARCH:指定系统环境,i386表示x86,amd64表示x64
  • PATH:需要将%GOBIN%加在PATH变量的最后,方便在命令行下运行Go
  • 我们还可以使用go env来查看所有其他的环境变量的定义
    go-env

当环境变量都配置正常之后,Go就已经安装完毕了。现在打开命令行,运行go,大家应该就可以看到如下的提示了。

Read more »

原创文章,转载请标明出处:Soul Orbit
本文链接地址:PE文件解析库 – LibPE v0.1 Preview

最近突然想学习一下PE文件的结构,所以就写了一个PE文件的解析库,纯属好玩。于是经过了1个月的业余时间的折腾,LibPE v0.1 Preview终于诞生了。

项目名称:LibPE
项目地址:https://github.com/r1f/libpe
License:The BSD 2-Clause License

欢迎大家去围观,如果有人参与那就更加的Happy鸟~Licese是BSD的,所以基本上大家可以拿来随便用了。

1. 功能

现在这个库到底能做什么呢?说出来真的是太简单了,所以才把这个版本定位v0.1 Preview,供围观之用。

  • 解析磁盘上的PE文件,暂时不支持解析映射好的PE。
  • 支持解析32位(PE32)和64位(PE32+)的PE文件。
  • RVA,VA,FOA转换
  • 解析PE基本头部信息,段表,导出表,导入表,资源表,重定向表和导入函数地址表
  • 支持获取PE文件的原始数据结构,并且对结构中的字段提供想对应的getter,如IPEOptionalHeader::GetFieldDllCharacteristics
    (注意:这里拿到的是原始数据,在文件中和在映射好后的映像中可能会不一样)

好了,围观完了之后,我们现在再大概描述一下LibPE想做什么吧~

Read more »

原创文章,转载请标明出处:Soul Orbit
本文链接地址:duilib学习笔记

前段时间对皮肤引擎比较感兴趣,于是在VS第一人称快的无法直视的dot大神推荐下,看了一个小巧又好用的皮肤引擎:duilib。

1. duilib简介

duilib是一个开源的DirectUI界面库,简洁但是功能强大。而且还是BSD的license,所以即便是在商业上,大家也可以安心使用。

现在大家可以从这个网站获取到他们所有的源码:http://code.google.com/p/duilib/

为了让我们能更简单的了解其机制,我们按照如下顺序一步一步的来对他进行观察:

  1. 工具库:用于支撑整个项目的基础
  2. 控件库:这是dui最关键的部分之一,相信也是大家最关注的部分之一,另外这里也来看看它是如何管理这些控件的
  3. 消息流转:有了控件库,我们需要将Windows窗口的原生消息流转给这些控件,另外在这里也来看看Focus,Capture等等的实现
  4. 资源组织和皮肤加载:有了上面所有的这些,我们再来看看它是如何自动创建皮肤的
  5. 简单使用:最后,来看看到底要如何使用它

以下是duilib工程带的一副总体设计图,在看代码之前看看这幅图,对看代码会很有帮助。
duilib

Read more »

原创文章,转载请标明出处:Soul Orbit
本文链接地址:近期随想:科技发展的终结

最近看了一些视频,世界进步的真是好快。

希拉・尼伦伯格:用假体眼睛治疗失明 [Link]

Google Glass [Link]

Anthony Atala:三维细胞打印机打印肾脏 [Link]

看到这里,我不由得开始乱想,现在的科技已经发展到了现在这种程度,学科的分支已经如此的多,想学通多个分支已经相当的难。那到底什么时候才是科技发展的尽头呢?是不是很幼稚?:D,不要当真,乱想嘛。

Read more »

原创文章,转载请标明出处:Soul Orbit
本文链接地址:《程序员修炼之道》读书笔记

前段时间读了《程序员修炼之道》,读之前以为这本书估计基本是在重复《Unix编程艺术》,《编程珠玑》,《重构》等等里面的各种思想,结果我发现我错了,这本书完全不是那么一回事。其他的书说的只是代码或工程的哲学,而这本书除了讲述工程方面的哲学之外,还在讲述程序员应该如何规划自己的人生。看完之后确实是受益匪浅,越看到后面,越觉得这世间的万事万物其实是相通的。事物的表现或许不同,但是背后的规律却是如此的相似。

1. 修行啊,属于程序员的修行

不知道大家有没有这样的感觉,时间总是那么的不够用,想要学的东西太多,学习的速度太慢,有时候还不一定有激情。我们没有龙珠里面的时间与精神的小屋,也没有岛国的时间停止器,修行是一辈子的事情,而且有时候没有想象中的那么简单。

1.1. 重中之重:注重实效

这四个字是书中最关键的几个字,在书中频繁出现,仿佛作者写这本书就只是想将这四个字潜移默化给大家一样。方法和过程都因人而异,但是只有注重实效是永远不变的。

1.2. 投资并管理好你的知识

曾经有一个同事F对我说:“一个技术人员最不可或缺的是什么?技术。如果没有技术的,那其他的东西,如人际,都没有意义,因为那些都只是加分而已。”。这句话我觉得说的很对。所以,一个技术人员在修炼自己之前,首先需要有一个意识:你的知识就是你的资产,学会如何经营他。在这本书里面,作者给出了如下几个建议:

  • 定期评估已有资产,并进行投资
    定期的回顾你已经学习到的东西,并找出其中你遗忘的或者你想学的,以后会有用的内容,进行学习。说不定,以后这些知识就真的能够帮到你。

    书中推荐的几个目标是:

    • 每年学习一个新的语言,从新语言中学习新的解决问题的思想。
    • 每季度看完一本技术书籍,专业领域当然不能拉下。
    • 当然也要看看非技术书籍,和你打交道的他们都是人,不要什么时候都纯技术。
  • 多元化
    多元化投资是长期成功的关键,谁也不知道以后的市场会有怎样的突变,偶尔去看看别的方面,对自己是有好处的。也许你现在很熟悉C++了,那么尝试着去看看动态语言吧。如果你已经做了两三年Windows上的开发了,那么去看看Unix吧。分散的投资到最后总会有一处会收到回报。

    注意,这并不是让大家乱学知识,什么都不深,看着这段时间语言排行榜一变,就一股脑钻进去了。多元化的投资的前提是,你已经有一个擅长的专长或领域了。

  • 平衡风险和回报
    学习和投资一样,有风险有回报,管理好学习的风险,不要学了很久,也许带来不了任何回报,开阔眼界是好的,但是也要注意,你的时间是有限的。不要瞎忙活。

  • 主动联系大神们,向他们学习
    互联网带来的最大的好处就是将所有人和事物的关系都拉近了,主动的寻找你这个方向的大神,并向他们请教,也许他们不会马上回复你,组织好自己的问题,耐心一点,礼貌一点,总会有结果的。

Read more »

这几天旅游去了一次日本,跟着旅行团,几天之内晃悠了大半个日本,所以路上非常的紧张,而且还很不幸的遇上了台风,导致风景自然就没有那么好看了,不过这一趟还是不虚此行的。

第一天,我们在成田下了飞机到了酒店,刚到酒店,台风就登陆了,雨开始哗啦啦的下了起来,但是即便这样也挡不住我们一群人想要撒欢的心。下午自由活动的时候,我们自己坐了1个半小时的地铁到了东京塔,登上塔上的时候,天已经黑了,正好在上面俯瞰东京的夜景。东京塔上是一个很浪漫的地方,特别是在晚上,要是带上MM一起去,真是一件非常舒服的事情,可惜这次我没有,感觉真是格外的寂寞。
japan-tokyo-tower

当然,在东京塔上看台风也是有一番别样的感觉,那种冲击的感觉,实在是相当刺激。听说最顶层的眺望台还会被风吹得晃动,幅度可以达到1m!

Read more »

Mirror 0.2的x86版本已经膨胀到了793KB了,这让我觉得很好奇,到底是什么东西在疯狂的膨胀呢?实在想一探究竟。
于是杯具的事情发生了:Mirror的方向终于还是跑歪了,偏离了窗口,朝着编译器的方向走了弱弱的一小步。

加载pdb,就可以看到代码段大小的分布。
mirror-pdb

发现还是stl膨胀的比较猛,特别是map和vector。但是没有想想中的那么多,代码只有400多k,还有300多k估计是资源什么的,这个可能要等写完pe分析了之后才能知道了。

当时在写这个功能的时候,我想到的方法有两种:

  1. 使用dbghelp.dll提供的Symbol Api使用这种方法来写的话,需要将dll加载起来才能进行分析,但是实际上,我们需要的内容在pdb文件里面就已经都有了,所以这么做就有点多此一举了。
  2. 自己手写pdb的分析类
    虽然较为简单的分析代码,应该可以从breakpad中找到,但是我还是觉得这种方法太蛋疼,难道就没有现成的库来使用么?这不像是Windows的风格啊。

正当我纠结的蛋疼的时候,幸运的事情发生了,无意中在vs中发现了一个的pdb分析库:Debug Interface Access SDK。这个库随着vs的发布而发布,反正Mirror也只有开发人员才会用,所以基本上机器上应该都有vs,所以就直接使用这个SDK来实现了。

这个库里面有两个最主要的类:

  • IDiaDataSource:提供通过Exe,dll和Pdb加载调试信息的接口。功能类似于IDiaSession的类厂。
  • IDiaSession:通过IDiaDataSource创建,通过这个Session可以获取文件内部各种详细的调试信息。

关于这个SDK,微软已经给出了非常好的使用方法,所以这里就不罗列代码了,大家可以照着这个step by step来学习使用。
另外微软还提供了一个完整的实例程序Dia2dump展示Dia的方方面面:http://msdn.microsoft.com/en-us/library/b5ke49f5

今天来看博客的草稿箱,发现这篇文章已经放置有将近一年了,本来是2011年8月份的时候,写天津之行的,结果一直放到现在。
一晃一年过去了,走了一些地方,满足了一些自己的好奇心,原来在上海,没有去杭州。在深圳,去了香港,没去澳门。现在来到了北京,周边城市什么的还是去看看比较好。就先去了天津。

当时还是由于T哥家在天津,想着还能有个伴,就带着MM和T哥一起去玩了两天。去的时候,我对天津的印象只有两个:竹板这么一打呀,别的咱不夸,夸一夸咱们那个狗不理包子!

到了天津算是去了不少地方:瓷房子,五大道,意大利风情街,劝业场。不过最搞的还是古玩街。
tianjin

嗯,原来只听过泥人张,结果。。。这。。。。。简直就是张家村呀~

Read more »

原创文章,转载请标明出处:Soul Orbit
本文链接地址:玩了一天就实在忍不住要吐槽暗黑3了

难得有时间,玩了一天整的暗黑3,感觉不知道要如何表达,有些内容实在忍不住要吐槽一下了。
p.s. 我的游戏时间才一天,对游戏的理解肯定不深,下面这些都只是我的个人YY而已,暴雪出品,必是精品,这句话我还是坚信的。如果说的有什么地方不对,欢迎各种指正。

1. 写在前面

现在的电脑游戏已经越来越简单,这是真的!以前,你见过中间休息一下就能补满血的FPS游戏么?你见过杀第一个小怪就弹出什么类似于“初出茅庐”的成就么?你见过走几步就弹一个还带视频的教学的RPG么?你见过按一个键就能发大招的KOF么?而现在这种简单的趋势在暗黑3中更是表现的淋漓尽致。
另外,我实在觉得3里面有太多2的影子,以至于让我产生了一种在玩2的新资料片的感觉。。。这。。。应该不太正常吧。。。
好吧,现在我们来细细的聊一下我觉得的各种槽点吧~

2. 故事背景

暴雪的CG依然是那么的给力,每到CG开始我都特别激动。但是故事背景还是那么的单纯,具体是什么,你懂的。在暗黑2的时代,毕竟大家见的少,弄一个出来很新鲜。但是现在这种RPG已经遍地都是,所以感觉总是缺乏新意。当然,我们可以说暗黑3的剧情必须要继承暗黑的传统去发展,所以才不会有特别大的变化。不过即便是这样,我还是觉得少了点什么。
可能是对暴雪期望太高,毕竟暗黑2是一个里程碑。

3. 人物设定和游戏操作

现在我总共也才玩一天,我接触到的也还是一些最简单的部分,比如最浅显的人物设定和基本的游戏操作。

3.1. 游戏大厅

在暗黑2中,一旦你登录到战网中,首先看到的是一个战网大厅,大家可以在里面聊天,组团,约着一起打怪,要么刷巴尔,要么刷莫非斯托,大家都很high。
但是在暗黑3中,这一切都没有了,取而代之的是一个自动加入房间的入口。这算什么?!欢乐斗地主么?而且就连斗地主也没有取消大厅啊!这样多不利于大家交流啊。

Read more »