自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

求索

Make Something Different

  • 博客(295)
  • 资源 (28)
  • 收藏
  • 关注

原创 [Chrome Net Stack]用户行为统计算法

Chrome为了让用户有更好的上网体验,提供了一些以统计为基础的策略。目的在于预知用户的下一步行为,并提前发起操作,以减少用户等待时间。详细的内容可以参考之前的翻译:Google Chrome中的高性能网络>> 。主要的类图如下:                  其中应用的就是统计中的预测方法:指数平滑预测方法(Smoothing Parameter)。指数平滑算法属于时间序

2013-11-05 23:04:34 3368

原创 实时监控Android设备网络封包

对Android网络抓包分析,一般是使用tcpdump抓个文件,再到PC用Wireshark打开分析。能不能达到直接使用Wireshark的效果? 答案是可以的,至少已经非常接近了。实现起来很简单,原理就是将tcpdump的数据重定向到网络端口,再通过管道(pipe)转到wireshark就可以了。使用到的指令有tcpdump, netcat和wireshark。

2013-09-19 00:37:14 10596 1

原创 [Android Webkit]JNI基础及Java层与C++层的交互

1. JNI 注册1.1. JNI的基础结构      JAVA == JNI == Native Code     JNI(Java Native Interface)是Java与Native Code(C/C++/...)代码交互的中介,Java+JNI构成主程序, JNI+Native Code以动态库的形式供程序调用。

2013-09-02 23:30:55 9027

转载 Android平台webkit组件java层代码分析

转自ITeye: constGU本文将围绕android平台webkit组件中,java层的几个主要类进行分析,说明各个类的职责以及类之间的关系。若有错误疏漏之处,望不吝指出。(源码所在目录  ${framework_sourcecode_loc}\core\java\android\webkit )一、概述Android平台webkit组件java层封装了一系列浏

2013-09-02 22:56:19 3772

翻译 Google Chrome中的高性能网络 (三)

.使用预连接优化了的TCP连接管理.使用预连接优化了TCP连接管理.应用Browser Prefreshing优化资源加载.使用预渲染优化页面浏览

2013-09-02 00:24:15 17521

翻译 不去做所有事情,就能做成任何事情

常常想如何能让每天多一时间?其实我们一直在浪费时间。道理其实很简单,我们要善于选择做什么,而不是如何去做。多花些时间去做正确的事。

2013-08-28 20:30:43 2281

翻译 Google Chrome中的高性能网络(二)

Chrome会随着使用变得更快。 它这个特性是通过一个单例对象Predictor来实现的。这个对象在浏览器内核进程(Browser Kernel Process)中实例化,它唯一的职责就是观察和学习当前网络活动方式,提前预估用户下一步的操作。

2013-08-28 01:06:54 8294 2

原创 项目经理的动态管理 - 领导生命周期理论[项目管理摘录]

在项目管理:计划、进度和控制的系统方法>>里作者讲述到领导生命周期理论在项目管理环境下的应用。领导生命周期理论(Life-cycle Leadership)模型指出,存在4个基本的领导风格,而且要想有效运用它们需要使用领导风络与被领导者的成熟度相适应。这里成熟度的定义是:与工作相关的经验,接受工作任务的意愿及完成任务的愿望。它不只是与做好工作有关,还与"想"做好工作有关。最重要的是,它

2013-08-06 13:16:13 3824

翻译 Google Chrome中的高性能网络(一)

驱动Chrome继续前进的核心原则包括: *Speed: 做最快的(fastest)的浏览器. *Security:为用户提供最为安全的(most secure)的上网环境。 *Stability: 提供一个分健壮且稳定的(resilient and stable)的Web应用平台。 *Simplicity: 以简练的用户体验(simple user experience)封装精益求精的技术(sophisticated technology)。本文关将注于第一点,速度。

2013-08-01 21:45:17 11349

原创 表驱动法应用的难点

表驱动法就是两个过程: i. 提取共性,做到为每个元素做一样的事。把共性放到表中, 用查表法取代switch。 ii. 提供支持函数,因为提取共性后会要求有为这些共性服务的函数。第1步是比较简单的,把第2步想透了才会提升使用表驱动法的层次。

2013-07-31 23:21:03 5236

原创 讲义:第五项修炼(学习型组织的艺术与实践)

主要内容:  作者及书。  Part I. 我们的行动如何创造事实,我们如何才能改变现实。  Part II. 第五项修炼:学习型组织的基石。  Part III. 建立学习型组织。  Part V. 实践中的反思。第五项修炼 (学习型组织的艺术与实践)from Horky Chen

2013-07-23 12:14:15 3973 1

原创 代码大全之内训资料

分享两个在PRIMAX分享的PPT, 原件放在SlideShare上, CSDN不支持iFrame,只能用链接了。两个PPT分别是代码大全和程序员实践的内容。

2013-07-23 09:07:46 2092

原创 GDB扩展之Command File - 提高调试效率

工欲善其事,必先利其器。GDB的扩展可以通过command file和python脚本完成,这里针对Command file,一个简单高效的扩展方案。GDB Command File可以简单地理解为一串自定义的GDB指令,也就是GDB允许用户使用define将一串GDB操作定义为一个指令。

2013-07-18 19:03:47 9908 1

原创 [WebKit]C++类的数据结构及在反汇编上的应用

在反汇编常常要在无法使用调试信息和源代码的情况下查看数据内容,数据结构比较好处理,如果是C++的类,就需要做些总结了。基础 - POD?C++的成员变量的排列顺序关键在于区别是不是POD(Plain Old Data)类型,从而确定是否需要有VPTR。POD类型会保持和struct相同的数据排列顺序,但在类的定义中不能出现虚函数、析构函数及拷贝的赋值函数等,否则编译器会增加一个Vi

2013-06-17 23:56:17 4376 1

原创 [WebKit] JavaScriptCore解析--高级篇(三) Register Allocation & Trampoline

Register Allocation对于一个JIT而言,寄存器分配对系统的消耗通常是一个瓶径。之前有Graph Coloring Allocators, Chaitin style等分配方式,现在要介绍的是DFG JIT使用的Linear Scan算法。其基本工作方式是将占用寄存器的变量根据生命周期长短排列出来,在使用时查看可以回收哪些寄存器加以利用。先看一些定义:•Live

2013-06-12 08:18:14 5551 2

转载 基本垃圾回收算法

原文地址:ITeye 基本垃圾回收算法可以从不同的的角度去划分垃圾回收算法:按照基本回收策略分引用计数(Reference Counting):比较古老的回收算法。原理是此对象有一个引用,即增加一个计数,删除一个引用则减少一个计数。垃圾回收时,只用收集计数为0的对象。此算法最致命的是无法处理循环引用的问题。 标记-清除(Mark-Sweep):

2013-06-11 22:19:07 1653

原创 [WebKit] JavaScriptCore解析--高级篇(一) SSA (static single assignment)

在编译器优化领域,数据结构的选择会直接影响程序优化的有效性。SSA是一种编译器使用的中间语言(intermediate language), 作为编译优化的基础(也是DFG JIT的基础),它和Control Dependence Graph一起被用来表示程序的数据流和控制流。大家都知道编译器是这样工作的:解析、优化,最后生成代码。中间会使用到一个中间语言的进行过度,好的中间语言一定要

2013-06-11 15:55:00 5809

翻译 [WebKit] JavaScriptCore解析--高级篇(二) 类型推导(Type Inference)

类型推导是DFG JIT最重要的一个基础,WebKit官网对此做了一点解释,翻译如下做为学习参考。Type inference通过profiling values来做到的,先是预测对哪些类型操作进行分析,再添加类型检查,最后基于类型检查的结果建立类型统计数据。用下面的例子来说明这个过程:o.x * o.x + o.y * o.y其中o是一个对象,x和

2013-06-11 09:44:57 4275

原创 Safari插件机制研究(二) 插件的视图管理

Note:首先相对于WebKit官网的代码,iOS上的版本使用WAKView代替了NSView。 比如Mac OS中将PlatformWidget定义为 NSView*, 而在iOS中则是WAKView *. 详细的内容可以参考Hursing的博客。Overview观察一份含有视频的页面的视图结构:Hierarchy of UIWebView   |    |

2013-06-06 20:31:56 3505

翻译 面向对象其实不需要封装

Note: 这里的‘封装(Encapsulation)’指的是限制对象访问的语言特性,也被称为信息隐藏(information hiding)。翻译的初衷在于看看一些不同的想法,作者的思考在某个层次上是有道理的,但并是完全正确。总之这里有一个决策和角度的问题。没有封装的OOP?Python支持Object Oriented Programming, 却没有封装(encapsula

2013-06-05 18:55:28 2751

原创 Safari插件机制研究(一)

Overview在Safari里有一个单例对象WebPluginDatabase负责管理本地的插件,每个plugin对应一个WebBasePluginPackage,存放在plugins里。在第一次调用sharedDatabase()会遍历当前系统有哪些可用的插件,并加到列表中管理。每个插件有其支持的MIME types和文件扩展名(Extension),在加载完成后,还会向Web

2013-06-05 18:18:04 5708

原创 浏览器多用户共享操作的思考

可惜这个想法已经被一家做电子阅读的公司申请专利了,就算做了一次关于产品的思考吧!欢迎一起讨论浏览器的社交化方向!基本架构     两台运行指定浏览器的设备可以通过三种方式进行交互:  1. 在相同WiFi网络内使用TCP/UDP连接。  2.与适配过的设备通过蓝牙协议连接。  3.使用账号或当前地理信息利用远端服务器与指定的用户或附件的人连接。

2013-06-05 00:23:01 3720 1

原创 [WebKit] JavaScriptCore解析--基础篇(四) 页面解析与JavaScript元素的执行

很多地方都已经介绍了JavaScript在浏览器是如何被执行的,这里介绍一下WebKit是如何实现的。主要涉及JS的async,defer及普通脚本的解析与执行过程的代码实现。1. 概要说明先概要说明一下浏览器如何执行JavaScript的。 首先浏览器的页面解析器(Document Parser)遇到就会发起下载(脚本内容在页面内的就不用下载了)。然后针对不同情况执行的方式有所不

2013-06-01 07:00:47 13816

原创 C++的RAII在WebKit中的应用

先看下面这段WebKit中的代码:{ NestingLevelIncrementer nestingLevelIncrementer(m_scriptNestingLevel); //Do something else...}看看NestingLevelIncrementer的实现,就知道与另一种写法看似是等价的:{ ++m_scriptNesting

2013-05-30 19:46:25 2086

原创 新人入职引导的思考

周末参加了入职引导人的培训,现在结合我的经验总结一下个人感受最深的五方面内容。0. 明确入职引导人的目的和目标作为入职引导人,虽然不是一个岗位,也一定要清楚自己的角色和责任(Role & Responsibility)。理解责任,除了细节的条条之外,最为重要是清楚目的和目标。目的和目标要分开谈,目的(purpose)是深层次的要素或者驱动力,目标(target)是则一个清晰明确的定

2013-05-28 01:54:17 6918 4

原创 [WebKit] JavaScriptCore解析--基础篇(三)从脚本代码到JIT编译的代码实现

前面说了一些解析、生成ByteCode直至JIT的基本概念,下面是对照JavaScriptCore源代码来大致了解它的实现。从JS Script到Byte Code首先说明Lexer, Parser和ByteCode的生成都是由ProgramExecutable初始化过程完成的。先在JSC的API evaluate()中会创建ProgramExecutable并指定脚本代码。然后传

2013-05-23 00:34:17 14471

转载 [WebKit]浏览器的加载与页面性能优化

非常棒、非常系统的一份资料,值得阅读!原文来自百度泛用户体验。 作者:nwind本文将探讨浏览器渲染的loading过程,主要有2个目的:了解浏览器在loading过程中的实现细节,具体都做了什么研究如何根据浏览器的实现原理进行优化,提升页面响应速度由于loading和parsing是相互交织、错综复杂的,这里面有大量的知识点,为了避免过于发散本文将不会对每个细节都

2013-05-16 09:15:58 5728 1

原创 [WebKit] JavaScriptCore解析--基础篇(二)解释器基础与JSC核心组件

这一篇主要说明解释器的基本工作过程和JSC的核心组件的实现。作为一个语言,就像人在的平时交流时一样,当接收到信息后,包含两个过程:先理解再行动。理解的过程就是语言解析的过程,行动就是根据解析的结果执行对应的行为。在计算机领域,理解就是编译或解释,这个已经被研究的很透彻了,并且有了工具来辅助。而执行则千变万化,也是性能优化的重心。下面就来看看JSC是如何来理解、执行JavaScript脚

2013-05-15 08:18:05 8465 2

原创 [WebKit] JavaScriptCore解析--基础篇 (一)JSC与WebCore

先看一下官方的基本介绍,短短几句就塞满了关键字。SquirrelFish,正式名称是JavaScriptCore,包括register-based(基于寄存器的虚拟机), direct-threaded, high-level bytecode engine(字节码引擎).它使用基于内置copy propagation(复制性传播算法)的一次性编译器(one-pass compiler),

2013-05-12 00:02:47 15518 2

转载 JavaScript核心指南 (ECMA-262-3)

本文非常详细的说明了JavaScript的核心概念,也是理解JavaScript解释器的重要基础。中文版本可以看这里,但不一定是最新的内容。所以下面放了英文版本供学习使用。原文地址点这里。This note is an overview and summary of the “ECMA-262-3 in detail” series. Every section conta

2013-05-11 07:50:49 5533

原创 [WebKit]遭遇Mac OS私有API

WebKit并不是完全开源的, Apple封装了一部代码在一个静态库(libWebKitSystemInterfaceXXXX.a)中,并没有提供源代码。而且不同版本的OS (包括iOS),会有特定的版本。这就是我今天从分析中了解到的, 觉得过程比较有趣,记录一下。1. 在WebKit中有这样一段源代码 (Laguage.mm):static String httpSt

2013-05-09 22:49:55 3766 2

原创 [WebKit]WebCore之页面加载的设计与实现(一)

这里主要分析WebContentProcess中加载页面的过程,主要针对HTTP请求的处理。主要结构WebKit2从接受到loadURL开始,就会准备尝试加载网络数据。不同平台用于处理HTTP请求的网络模块不同,可以简单得描述为下面这个块图:   *Mac OS平台上现在默认使用的是NSURLConnection.   *NSURLConnection的使用方式可以参考这里

2013-05-05 23:24:52 5031 1

转载 Mark-and-Sweep Garbage Collection

This section presents the mark-and-sweep   garbage collection algorithm. The mark-and-sweep algorithm was the first garbage collection algorithm to be developed that is able to reclaim cyclic data s

2013-05-01 21:16:28 2219

转载 Software Inspections

When an old idea is a good idea that improves to become a better idea, we should all want to benefit from that evolution. Software Inspection was a good idea when started in 1972. Inspections have c

2013-05-01 00:06:02 2145

翻译 提高编译效率:Unity Builds

最近,我发现了一个方法来减少在C/C++项目的编译时间,就是所谓的Unity Builds(UB)。这项技术非常简单, 通过减少磁盘访问的数量而减少了编译时间。在编译过程中include的文件会被多次访问, 每一个编译单元(Translation Unit,指的是编译出一个object文件的过程)都会访问到。除非你用一个固态磁盘,不然一般的硬盘一定会拖慢编译过程。在示例的项目中

2013-04-03 00:18:41 4718

原创 优化解耦的设计思考

基于开源项目进行开发已经越来越普遍,WebKit和Android都有很多的深度定制的版本。对这样庞大工程修改的逻辑越来越多,日后想要同步升级就要面对更大的复杂性和风险。跟随开源项目同步升级,寻求上层的创新和优化才比较适合未来的产品开发策略。深度定制的方式会遭遇越来越多的尴尬。修改是必要的,但如何最大化地降低耦合和隔离对原生代码逻辑的修改?逻辑碎片的风险也许大家都体会过。以下是我对一

2013-04-01 23:17:15 3464

原创 代码管理要责任到位

为什么我们在考虑代码管理的时候会担心影响程序员的积极性?精英化的团队是不是能完全解决代码质量的问题? 战功文化会引入什么样的代码管理问题? 以下是我对这些问题的思考。代码之于程序员,就像沙场之于将军。普遍希望完全控制代码,可以自由驰聘、攻城掠地。但对于一个团队合作下的代码,这种行为却隐藏着极大的风险。特别是在一个崇尚战功文化的团队里,在鼓励大家承担更多责任的同时,同时也要注重对代码上的

2013-03-31 19:48:41 2773 1

转载 什么是好的测试用例[51Testing]

这项研究部分基于NSF制定的EIA-0113539 ITR/SY+PE:“提高软件测试者的教育。” 材料中表达的任何观点、发现和结论或者评论都属于作者,不代表国家科学基金会(NSF)的观点。摘要     设计好的测试用例是一门复杂的艺术。其复杂性有三个原因:       1.测试用例能帮我们发现信息。不同类型的测试对不同类型的信息有效。       2.

2013-03-21 22:58:33 4880

原创 iOS上的一个自动化测试工具

在模拟器打开Accessibility可以观看到每个控件,即使是在网页上的. 所以是有可能做到更精准的自动化测试的。下面转了份博客,如果有兴趣可以找时间一起研究如何应用。虽说回归测试很重要,反复执行的事可以让脚本去做。今天找到了一个开源的工程,官网:testingwithfrank.com  Features     Easy Setup -

2013-03-19 23:12:08 3834

翻译 为什么集成测试比单元测试更重要

单元测试很棒。在假定一些数据的环境下,能顺利通过测试的系统就可算是一个好系统。不过,现在可以直连外部资源的集成测试才让程序更有价值。谁知道那些内容商(供应商,vendor)会做出什么傻事来!很多人一直尝试着让测试达到100%的代码覆盖率,这是很棒的想法,但我倒觉得它有些基本概念上的问题。LosTechies, Ryan Svihla 提出了"反模式(anti

2013-03-18 01:55:42 11159 14

Google Chrome中的高性能网络

内容是"The Performance of Open Source Applications" (POSA)的草稿, 也是The Architecture of Open Source Applications的后继者. POSA囊括了一批针对性能的优化和设计,以及开发过程中的性能管理等内容的论文

2013-09-03

WebKit中两个小设计(以小见大)

通过介结WebKit中使用的两个小的技术点,来展示一些设计概念。

2013-07-26

Java虚拟机即时编译器的一种实现原理

讲述了JIT中的Trampoline的实现,对于了解JIT很有帮助.

2013-06-09

面向 HTML5 的图形加速和面向移动设备的 JAVASCRIPT 引擎 JIT 优化

本文将首先介绍 HTML5 带来的性能挑战。由于渲染引擎和 JavaScript 引擎 是 Web 运行时两个重要的基本构造模块,本文随后将讨论图形加速技术和 即时 (JIT) 优化技术应用于英特尔® 凌动TM [2] 处理器平台的解决方案,以显 著提升这两大组件的性能。文中评估了我们的解决方案对典型 HTML5 和 JavaScript 基准测试的影响,同时展望了未来工作的走向。

2013-06-09

主动自我优化的编译器

ADAPTIVE OPTIMIZATION FOR SELF - RECONCILING HIGH PERFORMANCE WITH EXPLORATORY PROGRAMMING 关于编译器优化的好文章,包括Inline Cache, Type feedback, Adaptive Recompilation, Performance Evaluation, Self Improving compiler...

2013-06-09

LLDB查看数据类型的示例脚本

不知道大家都没有遇到过在gdb和lldb里输出一个类时困扰,常常要一个个属性展开下去,或者调用提供函数来检查。我分享一个使用LLDB脚本来简化变量输出的方法。

2013-01-14

软件维护计划示例

软件维护计划的例子. 涉及范围、成本、风险等内容。

2013-01-07

McCabe的复杂度论文

McCabe关于软件复杂度的论文,全面而细节。反观现在许多关于McCabe复杂度的介绍却没能这么详细透彻。

2013-01-07

LLDB的Python扩展脚本

在LLDB下可以使用Python编写脚本扩展指令。 可以参考http://blog.csdn.net/horkychen

2012-12-20

Trace-based JIT简介(对Method JIT的改进)

IBM的一份对Method JIT和Trace JIT说明的文档。

2012-08-22

二维条码的插件(Chrome)

做了一个二维条码的插件,默认将当前网页地址转为二维条码。

2012-07-20

二维条码生成插件

二维条码生成插件,重构后。支持右击菜单,简化JS.

2012-07-20

二维条码生成插件 (Chrome)

做了一个二维条码的插件,默认将当前网页地址转为二维条码。

2012-07-14

Extreme Programming Explained英文版 第2版

XP的专业名词翻译得五花八门。这本书是正统之作,有个英文版,可以对照看看一些专业名词。

2012-06-28

Delphi数据库开发入门

2004年左右为同学写的Delphi数据库开发的入门教程,有一些纪念意义。

2011-11-23

代码优化的三个阶段

很久以前写的一个PPT,讨论了算法、流程及编码技巧三个层次的代码优化。

2011-11-23

<<突破思维障碍>>的思维导图 (Freemind)

<<突破思维障碍>>的思维导图 (Freemind)

2011-10-18

使用Cocoa开发的二十四点计算程序

使用Cocoa写了一个小的二十四点计算程序,可供初学者学习Cocoa使用。中间有一个递归调用的示例。 *XCode 3.2

2011-05-21

Lenovo LJ2000打印机驱动

以前自己分析了LJ2000数据所写的驱动程序,可以支持Mac OS及Linux,原来放在MacLinux.cn上,后来网站关掉了。偶然发现竟然有人在引用它,觉得它可能还有点用,就放上来分享.里面包含三个包: Linux:2 (DEB&RPM) Mac OS:1

2010-12-06

代码大全之编程基本功

小组内对代码大全学习的资料,包含的是程序撰写的基本概念!

2010-10-03

PMBOK 3思维导图(第3&4章)

利用MindManager绘制的PMP第3及4章的思维导图,有助于组织记忆!

2010-05-23

The book of Wireless

比较系统的介绍Wireless的资料! 涉及Wireless的基础知识和技术背景!很值得参考,唯一不足是英文书!

2010-03-20

UPnP Device Architecture

UPnP 参考资料! UPnP是实现DLNA的核心,所以读一读会有一些基本概念!

2010-03-18

STL Documents from SIG.com

将SIG上的STL Documents下载后转为CHM文件,方便查询! 本来cnheying已经做了,可惜下载不了,我重做了一下跟大家分享!

2009-09-20

实战KDevelop进行Linux软件开发

很多高手在Linux下很喜欢使用Makefile进行开发,但事实上并不是所有人都适合使用Makefile,尤其是初入Linux世界的人。 许多年来,Linux很难得以普及,就是因为使用及开发的难度被无端地夸大了,许多高手都以能运用复杂的指令为荣,而不愿意轻意妥协于那些更易于掌握的工具。而我认为不要在意用什么开发,只要关注你要开发什么!所以至于工具,自然由你决定。KDevelop也是一个选择,至少它可以使开发者摆脱Makefile体系的困扰! 软件开发要以产品论英雄,任何工具都是熟能生巧罢了,结果也都是殊途同归,没什么复杂的。

2009-03-11

实战KDevelop进行Linux软件开发

很多高手在Linux下很喜欢使用Makefile进行开发,但事实上并不是所有人都适合使用Makefile,尤其是初入Linux世界的人。 许多年来,Linux很难得以普及,就是因为使用及开发的难度被无端地夸大了,许多高手都以能运用复杂的指令为荣,而不愿意轻意妥协于那些更易于掌握的工具。而我认为不要在意用什么开发,只要关注你要开发什么!所以至于工具,自然由你决定。KDevelop也是一个选择,至少它可以使开发者摆脱Makefile体系的困扰! 软件开发要以产品论英雄,任何工具都是熟能生巧罢了,结果也都是殊途同归,没什么复杂的。

2009-03-11

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除