- 博客(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 11350
原创 表驱动法应用的难点
表驱动法就是两个过程: i. 提取共性,做到为每个元素做一样的事。把共性放到表中, 用查表法取代switch。 ii. 提供支持函数,因为提取共性后会要求有为这些共性服务的函数。第1步是比较简单的,把第2步想透了才会提升使用表驱动法的层次。
2013-07-31 23:21:03 5237
原创 讲义:第五项修炼(学习型组织的艺术与实践)
主要内容: 作者及书。 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 9915 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 5709
原创 浏览器多用户共享操作的思考
可惜这个想法已经被一家做电子阅读的公司申请专利了,就算做了一次关于产品的思考吧!欢迎一起讨论浏览器的社交化方向!基本架构 两台运行指定浏览器的设备可以通过三种方式进行交互: 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 6919 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 15522 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 3767 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 2220
转载 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 3465
原创 代码管理要责任到位
为什么我们在考虑代码管理的时候会担心影响程序员的积极性?精英化的团队是不是能完全解决代码质量的问题? 战功文化会引入什么样的代码管理问题? 以下是我对这些问题的思考。代码之于程序员,就像沙场之于将军。普遍希望完全控制代码,可以自由驰聘、攻城掠地。但对于一个团队合作下的代码,这种行为却隐藏着极大的风险。特别是在一个崇尚战功文化的团队里,在鼓励大家承担更多责任的同时,同时也要注重对代码上的
2013-03-31 19:48:41 2774 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中的高性能网络
2013-09-03
面向 HTML5 的图形加速和面向移动设备的 JAVASCRIPT 引擎 JIT 优化
2013-06-09
主动自我优化的编译器
2013-06-09
LLDB查看数据类型的示例脚本
2013-01-14
Lenovo LJ2000打印机驱动
2010-12-06
STL Documents from SIG.com
2009-09-20
实战KDevelop进行Linux软件开发
2009-03-11
实战KDevelop进行Linux软件开发
2009-03-11
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人