Soul Orbit

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

一年一度的公司旅游,结果去的地方我已经去过了,于是抓住机会请了三天年假,想在家里好好休息休息。当然MM还要上课,所以去不了什么远的地方,于是,打算这几天在北京逛逛,然后听听音乐会就这么休息过去吧。
中央音乐学院真是一个好地方,时不时就有演出可以看,有时候还是大师来演出,质量也是相当的高,最后外加一个双休,五天听了五场,很爽很震撼。

第一天是一场几米的漫画主题音乐会,开场比较搞,为了和几米的漫画造成反差,居然用了德国战车的Engel当开头,不过后面真的很感人,期间有一首德彪西的音乐,基本上改变了我极度不喜欢他的看法,后面在看《蓝石头》+ 《空顶之光》的时候,居然被感动到流泪了,没有办法,那样干净的旋律,配上蓝石头这么煽情的剧情,再加上一个杯具的北漂程序猿,怎么不感动。当然最后被MM狂笑了一顿。。。。。一个爷们,感情神马的,哪来这么丰富。。。。。
day1-jimmy-comic

Read more »

C++多重继承一直是一个让人搞不太清楚的一个问题,但是有时候为了实现多个接口,多重继承是基本不可避免,当然在Windows下我们有强大的COM来帮我们搞定这个事情,不过如果你想自己实现一套类似于COM的东西出来的时候,麻烦事情就来了。

在COM里面,有两个很基础的,而且我们都会用到的特性:

  1. 纯虚接口:一般使用一个只有纯虚函数的类来作为接口
  2. 引用计数:在C++中一般都使用引用计数来管理对象的生命周期

这两个功能在一般设计C++接口的时候也经常用到。其实说到底,上面这两个特性牵扯到的是多重继承的二个表现:

  1. 多重继承中的数据存储
  2. 多重继承中的虚函数

在COM中,纯虚接口是使用的interface来定义的,引用计数是通过IUnknown接口来实现的,所有的接口都是从IUnknown这种接口中派生出来的。当我们需要某一个类实现多个接口的时候,就经常会遇见这样的多重继承:
multi-inheritance-com

哦?!是不是很眼熟,ios,istream,ostream,iostream。。各种C++书籍最喜欢用的一个示例。好吧,现在我们先自己实现一个吧,看看到底要怎么使用多重继承。

Read more »

看Chrome已经有一段时间了,但是一直都没有沉淀些内容下来,是该写写笔记什么的了,免得自己忘记了。看的都是Windows平台下的代码,所以记录也都是记录的。。。废话。。

那么首先,先从最基础的东西记录起吧:Chrome的线程模型和消息循环。

1. 多线程的麻烦

多线程编程一直是一件麻烦的事情,线程执行的不确定性,资源的并发访问,一直困扰着众多程序员们。为了解决多线程编程的麻烦,大家想出了很多经典的方案:如:对资源直接加锁,角色模型CSPFP等等。他们的思想基本分为两类:一类是对存在并发访问资源直接加锁,第二类是避免资源被并发访问。前者存在许多问题,如死锁,优先级反转等等,而相对来说,后者会好很多,角色模型,CSP和FP就都属于后者,Chrome也是使用后者的思想来实现多线程的。

Read more »

快四月份了,传说中的樱花终于盛开了,于是和MM一起跑到玉渊潭,准备来一场浪漫的樱花之旅。结果。。。

这是我幻想中的樱花节:
河河路花花路路路花花路河河
河河路花花路路路花花路河河
河河路花花路人人花花路河河
河河路花花路路路花花人河河
河河路花花路路路花花路河河
河河人花花路路路花花路河河
河河路花花路路路花花路河河
河河路花花路路路花花人河河
河河路花花路路人花花路河河
河河路花花路路人花花路河河

结果现实中的樱花节是这样的:
土土土土土土土土人土土土土
人土树土土树树土土土土人土
土人树土土土土土土树土土土
土土土土土树树人人土人土土
土土树树土人土人人人人人土
人土土土土土人树树人树人土
土土土土树土人人人花人人土
土人树土土土土人人树人人土
土土人土土人土人人人人土土
土土土树土土树土树土树土土
土土人土土土土土土土土土土

=。=||| 真是坑爹啊!不过,凑近了看,看是有好看的景色的。。嗯。。凑近了看。。近了看。。了看。。看。。
yyt-sakura

前几天想在wordpress里面插入一小段ubb来生成一些链接,结果发现居然没有,于是自己写了一个很弱的小插件来管理自己的ubb代码。语言暂时只有英文,不过内容是中文也是可以用的。

Wordpress的用户信息真的不是很友好啊,找了半天也没有找到我自己的项目列表,寒。

现在代码总算是提交了,不过也不知道什么时候才能生效,姑且先这么放着,看看明天结果如何。

============= 我是欢乐的分隔线 =============

**插件名称:**ubb-master
插件地址:http://wordpress.org/extend/plugins/ubb-master/
插件用法:
一段典型的ubb代码,一般如下:

1
[search]put your keyword here[/search]

然后我们就可以这样替换这段ubb代码了:

  • !{content}: 在[ubb]和[/ubb]标签之间的内容。
  • !{encoded_content}: 经过urlencode之后的!{content}
  • !{attr:attribute_name}: [ubb]标签中名为attribute_name的属性
  • !{encoded_attr:attribute_name}: 经过urlencode之后的!{attr:attribute_name}

比如,如果我们将search的ubb格式定为如下这段代码:

1
<a target="blank" href="http://www.google.com/search?ie=UTF-8&q=!{encoded_content}">!{content}</a>

那么上面这段ubb在输出中将会被转变为如下的内容:

1
<a target="blank" href="http://www.google.com/search?ie=UTF-8&q=put+your+keyword+here%26%238230%3B">put your keyword here…</a>

这样,我们就可以自己定义自己的ubb代码,而不用四处找适合自己的wordpress插件了。

原创文章,转载请标明出处:Soul Orbit
本文链接地址:[WordPress Plugin] UBB Master——管理你自己的UBB代码

好,看完了如何使用breakpad,我们现在看看breakpad在Windows下到底是如何实现的呢?

1. 代码结构

在我们来看breakpad是如何实现其强大的功能之前,我们先来看一下他的代码结构吧。

  • Google breakpad的源代码都在src的目录下,他分为如下几个文件夹:
  • client:这下面包含了前台应用程序中捕捉dump的部分代码,里面按照平台分成各个子文件夹
  • common:前台后台都会用到的部分基础代码,字符串转换,内存读写,md5神马的
  • google_breakpad:breakpad中公共的头文件
  • processor:用于在后台处理崩溃的核心代码
  • testing:测试工程
  • third_party:第三方库
  • tools:一些小工具,用于处理dump文件和符号表

我们先来看Windows下前台实现的部分,也就是client文件夹下的代码。

Read more »

Google breakpad是一个非常实用的跨平台的崩溃转储和分析模块,他支持Windows,Linux和Mac和Solaris。由于他本身跨平台,所以很大的减少我们在平台移植时的工作,毕竟崩溃转储,每个平台下都不同,使用起来很难统一,而Google breakpad就帮我们做到了这一点,不管是哪个平台下的崩溃,都能够进行统一的分析。现在很多工程都在使用他:最著名的几个如Chrome,Firefox,Picasa和Google Earth。另外他的License是BSD的,也就是说,我们即便是在商业软件中使用,也是合法的,哈哈,这么好的东西,我们能放过么?现在就让我们来看看这个神奇的软件吧。

1. 原理简介

breakpad抓取dump的方式和一般我们抓取dump的方式不一样。在breakpad的wiki上有一幅图可以很好的概括他的原理。
Breakpad

breakpad把应用程序分成三个部分,代码,breakpad客户端和调试信息。

  1. 在build system中,通过symbol dumper用平台相关的调试信息生成平台无关的symbol文件。这样做的好处很明显,一旦平台无关了,所有平台的崩溃就可以做统一的分析了。
  2. breakpad采取进程外转储和分析崩溃的方式,他使用C/S结构,客户端用来捕获当前进程中发生的崩溃,并通知服务端崩溃发生。服务端用来响应客户端,抓取dump文件。这样做的目的是为了减少崩溃进程对dump的影响。
  3. Dump生成后转发到崩溃分析器中,这个部分可以在本地也可以在服务器上,他对Dump文件进行解析,生成可读的堆栈信息。

这就是breakpad处理dump大概的流程。

Read more »

好不容易读完了重构——2010年下半年唯一读了的一本书。只能说这半年以来很忙,来了北京之后连个喘息的机会都没有,半年都没有管过博客了,写写读后感,就当作是除除草吧。
以下只是我的一些读书笔记,不过虽然是笔记,但是里面并没有关于重构方法的细节记录,而只是粗略的记下了我理解的重构的大致思路。和《重构》这本书不同,这本书本身说的很细,作者把每一步重构的都拆成了很小的步骤,每一步都可以轻松的回滚,所以有兴趣的可以去看看这本书,肯定都会有一定收获的。
我现在只是一名小菜,过段时间之后,我自己回头看这篇文章,可能都会觉得自己很傻,所以如有不对,还请多多指教,如果实在看不顺眼,就请纯当笑话看吧。
好,下面进入正题。

注:因为是读书笔记,所以可能会有抄袭等等奇奇怪怪的问题,如果发现有版权问题,请联系我,我会尽快删除本文。

===================== 我是欢乐的分隔线 =====================

1. 重构的目的

我们总希望自己的代码能写的更加好看,以至于我MM把我写代码比喻成为打扮自己。没有错,代码就是一个程序员的外表。而重构就是为了让你的代码更加好看。
但是仅仅是好看而已么?
不是,好看意味着简洁,好理解,好维护,好扩展。这就是我们真正要达到的目的。
那这些目的最终又是为了完成什么呢?我们最后再说。

2. 设计模式和重构

设计模式想必大家肯定已经不陌生了,平时在开发的时候,大家也肯定用过各种各样的模式来解决遇到的问题。而当你现在手头的代码使用的模式不能很好的支持你继续开发的时候(可能是不够灵活,也可能是过于灵活),你就需要使用重构来修改它,将你的代码变得更加优雅。

Read more »
0%