
生产力
Horky
爱探索、爱技术!简单地快乐着!
展开
-
文本压缩算法的对比和选择
本文主要粗略介绍数据压缩主要算法类别,以及最新针对Web文本资源的zStd和Brotli算法的设计要点。为Web业务应用如何使用它们替换传统gzip提供些参考。最后是一个文本有损压缩的尝试。原创 2017-07-15 16:21:23 · 17356 阅读 · 3 评论 -
关于代码布局(Coding Layout)
研究发现,缩进可以提高程序员的理解能力(Program Indentation and Comprehensibility>>, Miaria et al. 1983)。缩进是代码布局的一项技术。作为代码布局并不像命名和注释那样明确,它更像一种感觉。比如摄影的构图,或者国画的留白。虽然很难给一个标准的评价标准,但是>的作者Steve.McConnell和>的两位作者还是给了一些建议。 首先原创 2012-07-25 23:10:49 · 2507 阅读 · 0 评论 -
什么是好的测试用例[51Testing]
这项研究部分基于NSF制定的EIA-0113539 ITR/SY+PE:“提高软件测试者的教育。” 材料中表达的任何观点、发现和结论或者评论都属于作者,不代表国家科学基金会(NSF)的观点。摘要 设计好的测试用例是一门复杂的艺术。其复杂性有三个原因: 1.测试用例能帮我们发现信息。不同类型的测试对不同类型的信息有效。 2.转载 2013-03-21 22:58:33 · 4941 阅读 · 0 评论 -
提高编译效率:Unity Builds
最近,我发现了一个方法来减少在C/C++项目的编译时间,就是所谓的Unity Builds(UB)。这项技术非常简单, 通过减少磁盘访问的数量而减少了编译时间。在编译过程中include的文件会被多次访问, 每一个编译单元(Translation Unit,指的是编译出一个object文件的过程)都会访问到。除非你用一个固态磁盘,不然一般的硬盘一定会拖慢编译过程。在示例的项目中翻译 2013-04-03 00:18:41 · 4807 阅读 · 0 评论 -
iOS上的一个自动化测试工具
在模拟器打开Accessibility可以观看到每个控件,即使是在网页上的. 所以是有可能做到更精准的自动化测试的。下面转了份博客,如果有兴趣可以找时间一起研究如何应用。虽说回归测试很重要,反复执行的事可以让脚本去做。今天找到了一个开源的工程,官网:testingwithfrank.com Features Easy Setup -原创 2013-03-19 23:12:08 · 3888 阅读 · 0 评论 -
GDB秘技--调试时执行代码中的特定函数
在使用GDB调试程序时,有时遇到看到数据不知所云,必须对照定义才能看懂, 有时还要做些运算才能看出来,这样效率显然不高. 如果需要查看一个变量类的当前值,简单的数据类型还好说,如果遇到一些枚举型的变量或特殊条件,想要看到清晰的数据输出,就会比较繁琐. 好在GDB提供了一个调试时执行某个函数的功能:call, 在需要时能帮你解决大问题. 举个简单的例子,如果有一个类定义了一原创 2012-07-29 22:26:35 · 26415 阅读 · 8 评论 -
使用LLDB脚本简化打印复杂数据的操作
上次提到用了LLDB脚本来扩展一些功能。 这次是简化打印复杂数据的操作。 不知道大家都没有遇到过在gdb和lldb里输出一个类时困扰,常常要一个个属性展开下去,或者调用提供函数来检查。分享一个使用LLDB脚本来简化变量输出的方法。 以输出Element的属性为例,其下面的属性很多,我们其实只想知道属性名称和值就可以了。数据结构展开如下: 如果使用lldb脚本,只需要输入原创 2013-01-14 22:38:32 · 4127 阅读 · 1 评论 -
LLDB中的Python脚本
上次说了查看当前视图和参数的方法,要记住一串`*(int*)($esp+4)` 实在不爽。 于是查到可以使用LLDB脚本来完成。写了一个脚本(下载),本来想做个递归查询的,因为不是源代码调试,就没办法直接做到,需要花更多的时间,现在没空了。 脚本自己看,参考的资料在这里, 不是很详细,就算是有: LLDB Python Reference Using Scripting a原创 2012-12-21 00:56:08 · 5052 阅读 · 4 评论 -
[iOS逆向工程] 在汇编语言调试中获取当前实例句柄
在分析Safari行为的时候想到要用objective-c的特性随时可以语义化的查看一下UIView的各种状态,比如在UIView方法内部设了个断点,想看一下当前视图结构。只要得到当前实例的句柄就可以了。查了一些资料,记录一下。函数参数的传递iOS Simulator里应用是跑在32bits模式下的(在Activity Monitor可以看到),依据>里关于Intel 32原创 2012-12-19 01:03:32 · 6546 阅读 · 5 评论 -
开发工作中使用的软件列表
工欲善其事,必先利其器! 在这管理我的工具列表了:Team Suite - GForge, FusionForgeVersion Control: Subversion,Git,Bazaar Mac OS:svnX,SCPlugin, Versions Windows: Tortoises SVN Linux:KDESVNLOC counting: B原创 2012-07-23 22:51:54 · 4233 阅读 · 1 评论 -
[WebKit]C++类的数据结构及在反汇编上的应用
在反汇编常常要在无法使用调试信息和源代码的情况下查看数据内容,数据结构比较好处理,如果是C++的类,就需要做些总结了。基础 - POD?C++的成员变量的排列顺序关键在于区别是不是POD(Plain Old Data)类型,从而确定是否需要有VPTR。POD类型会保持和struct相同的数据排列顺序,但在类的定义中不能出现虚函数、析构函数及拷贝的赋值函数等,否则编译器会增加一个Vi原创 2013-06-17 23:56:17 · 4427 阅读 · 1 评论 -
实时监控Android设备网络封包
对Android网络抓包分析,一般是使用tcpdump抓个文件,再到PC用Wireshark打开分析。能不能达到直接使用Wireshark的效果? 答案是可以的,至少已经非常接近了。实现起来很简单,原理就是将tcpdump的数据重定向到网络端口,再通过管道(pipe)转到wireshark就可以了。使用到的指令有tcpdump, netcat和wireshark。原创 2013-09-19 00:37:14 · 10699 阅读 · 1 评论 -
转换GDB调用栈到流程图
如果你想在GDB调试时把调用堆栈保存下来归档,那下面这个脚本就方便你了。原理是将调用堆栈的函数抽取出来,再完成调用关系就可以了。稍加改动就可以同时读取多个调用栈,生成一张流程图。原创 2014-04-09 23:58:02 · 6640 阅读 · 4 评论 -
让工作节奏慢一点, 再简单的工作也能做出大成就
快,是当下的工作主旋律。拿到任务,快刀斩乱麻,达成目标交差。相对于这种做事做到恰到好处的做法,我更喜欢要做就往大了做。除了解决问题,我自己能从其中得到什么提高产品能做什么改变。总之有机会就要尝试慢下来,让事情更具广度和深度。只有深入到细节,才更有机会发现优化和创新的机会,根本不需要依赖从一个高大上的项目中来提高自己。原创 2014-10-26 20:24:03 · 5971 阅读 · 1 评论 -
几个有用的R小函数
最近写的代码基本是R脚本了,越发感到R的强大。现在用它做一些数据分析以及进行一些模拟。收几个常的函数在这里。1. 批次替换data frame中的数据 i. 将所有为0的数据替换为100 res2$valueX[res2$valueX %in% 0] ii.将NA替换为0 res2$valueX[is.na(re原创 2014-01-16 13:23:25 · 14651 阅读 · 0 评论 -
Perl & Python编写CGI
最近偶然玩了一下CGI,收集点资料写篇在这里留档。 现在想做HTTP Cache回归测试了,为了模拟不同的响应头及数据大小,就需要一个CGI按需要传回指定的响应头和内容,这是从老外的测试页面学习到的经验。CGI其实就是使用STDIN和环境变量作为输入, STDOUT做为输出,依照Http协议生成对应的数据。一. 数据输出数据输出遵循HTTP协议,分为四部分: 状态行 (Status Line)原创 2014-04-24 08:29:20 · 4895 阅读 · 0 评论 -
程序员看数据分析
“世上有三种谎言:谎言、该死的谎言和统计” ------这是一句著名的西方谚语,其中让统计有如此名声的非平均值莫属了,可见数据分析并不能只是简单地求和、求平均。 作为程序员现在也开始接触到大量数据,也需要有数据分析的工作。比如在发布前进行一系列的测试,对测试结果进行分析,以便决定能否正式上线。本人不是学习统计的,这里只是总结一下工作中使用R进行数据可视化分析的经验。概括为三个步骤:原创 2014-04-06 20:38:46 · 6532 阅读 · 1 评论 -
GDB扩展之Command File - 提高调试效率
工欲善其事,必先利其器。GDB的扩展可以通过command file和python脚本完成,这里针对Command file,一个简单高效的扩展方案。GDB Command File可以简单地理解为一串自定义的GDB指令,也就是GDB允许用户使用define将一串GDB操作定义为一个指令。原创 2013-07-18 19:03:47 · 10063 阅读 · 1 评论 -
R绘制动态曲线
使用R语言绘制动画可以方便地观察到数据的变化行为。以之前Chrome在收集页面资料时使用的指数平滑算法为例,绘制一个在不同系数且目标值不断变化(应用场景不是页面访问统计)的情况下的曲线逼近行为。首先要确保在R中安装了animation包, 如果需要保存成GIF动画,还需要安装ImageMagick。GIF的每一帧是基于一个plot操作的。原创 2013-12-01 11:32:49 · 5834 阅读 · 0 评论 -
程序员统计知识-看懂数据
中位数、平均值、标准差、箱形图原创 2013-11-25 23:44:41 · 3296 阅读 · 0 评论 -
[Mac OS/iOS]反汇编工具Hopper分析Crash Log
在Mac OS下分析Crash Log有很多种方法,这里不是要说明如何分析的Crash Log, 主要是展示下Hopper的使用。 强大的IDA大家可能已经知道,但它的Mac OS版本又让人回到了DOS时代。幸运的是Mac OS有了一个小巧的替代品:Hopper, 基本上满足了工作上的反汇编的需要,包括伪代码以及控制流图(Control Flow Graph),支持ARM指令集并对Objectiv原创 2012-12-12 06:40:45 · 19144 阅读 · 1 评论 -
iOS:应用程序的线程安全性
本文在于说明iOS应用的Objective-C代码的线程安全性。先是简单介绍一下线程安全的基本知识,然后通过一个小例子来观察非线程安全代码,最后会稍稍介绍一个可以用来分析线程安全隐患的工具。1) 基础知识 (Threading Basics)当启动一个应用时,iOS会对应创建一个进程(process)和一块为之分配的内存。简单地说,一个应用进程的内存包括三个部分: (更详细翻译 2012-11-01 00:41:51 · 11410 阅读 · 4 评论 -
Chrome中的开发者插件
在这里列举几个在Chrome下的开发插件,希望可以帮助提高工作效率,更主要的是抛砖引玉,更多的好工具还要不断发现。1. Developer Tool 第一位的自然是Chrome集成的开发工具了,几乎涵盖了所有你需要的功能。查看组件、获取XPath、性能分析、更改浏览器UA、调试JavaScript等等。特别值得一提的是在Element中获取xpath的功能,对于解析HTML数据会很原创 2012-08-08 23:03:48 · 5315 阅读 · 2 评论 -
关于好的代码(Aspects to good code)
我常常思考是什么造就了好的代码 (good code).使用最新的语言特性、最佳的模式(best pattern)、最好的层次化设计(best layered design)、使用最少内存、亦或最佳的执行性能(performs the best)?很明显,这些项目都会在设计时考虑,但它们是首先要最主要的原因吗(the first things you think of)?或许并不是!翻译 2012-07-24 23:32:18 · 2428 阅读 · 0 评论 -
思维惯性引发的编程问题
为什么程序要了解思维的障碍,并要练习有意识的加以克服?这里举一个实际发生的问题。写代码像写作一样,有时思如泉涌,顺着思路就把一段代码写得有模有样。下面是一个状态码检查的例子(这种写法本身并不严谨,但这里要讨论是一个更为严重的问题.):typedef enum { STATE_DEFAULT, STATE_A = 1, STATE_B = 2, S原创 2012-08-07 22:03:53 · 2206 阅读 · 0 评论 -
结构化思维
对于结构化思维引入我用了Matrix里面的一张宣传图片,Matrix矩阵本身就很好了体现了结构化思维的一个重点,即事物是分维度的,是分层的。同时用 这张图还强调一点结构化思维的包含了数字思维,用数据来说话,通过数据来分析和论证本身也就是结构化思维的体现。 结构化思维的三个步骤是:确定目标——资源分析——制订计划。如果从这点上来看,结构化思维更加像目标驱动的项目管理思维。而这三个步转载 2012-07-23 00:28:03 · 1828 阅读 · 0 评论 -
函数的单一职责原则(SRP)
结构化编程强调单一出口的原则,其目的在于增强函数流程的逻辑性。本身这个原则有些过于死板,但其保持代码逻辑性的目的是非常正确的。在面向对象设计,我们都知道要遵循单一职责原则(SRP),而函数也应遵循这一原则,以保证函数体逻辑的清晰并且高内聚。 以下示例中,UpdateValue函数与下面m_value的赋值语句造成了逻辑的分散:当需要变更m_value的赋值逻辑时,往往会修改Up原创 2012-08-06 23:08:51 · 4770 阅读 · 0 评论 -
如何有效地解Bug (RED方法)
转载请注明来源:http://blog.youkuaiyun.com/horkychen 解bug应当是修复代码中的缺陷,而不只是隐藏起来!(译注 :解Bug时常发生分析时总感觉快找到答案了,而后面却一再陷入僵局。比如,将线程同步问题引起的一些时而有,时而没有的问题。分析时可能会认为这是个典型的线程同步问题,A线程没有按照预期的方式改变某个变量,导致了B线程处理出错。这样的分析结果如果没有调试(Deb翻译 2012-06-23 16:10:37 · 4081 阅读 · 1 评论 -
为XCode 4加速
转载请注明出处:http://blog.youkuaiyun.com/horkychen 1. XCode 4打开时,自动加载上次的工程,需要较长时间。 这是因为Lion提供了新功能让应用程序恢复上次关闭时的状态。如果仅是临时不希望下去打开时不要打开现在使用的项目,可以在退出使用CMD+Q+OPTION代替CMD+Q。 如果默认不希望再打开,就可以使用下面的指令:原创 2012-07-12 22:50:28 · 8684 阅读 · 2 评论 -
如何认识一个系统
转载请注明出处:http://blog.youkuaiyun.com/horkychen工作常常需要快速学习分析一个系统,我尝试着做了些思考。其中最关键应当是有一个系统化的过程。下图为思维导图:*开始时使用Doxygen对代码归档,从而建立了一张系统地图,会有不小的帮助!原创 2012-06-11 21:30:02 · 1778 阅读 · 0 评论 -
编写小程序查看优快云博客信息(ASIHTTPRequest+TFHpple)
转载请注明出处:http://blog.youkuaiyun.com/horkychen作为一个iOS练习,使用ASIHTTPRequest+TFHpple写了个小程序读取优快云博客的已读等信息。其中ASIHTTPRequest负责发送HTTP Request以获取博客主页,然后使用TFHpple (XPath)解析出指定的HTML元素,然后读取相关的信息。注意,关于两个库的使用,已经有不少资料原创 2012-06-19 21:48:49 · 4134 阅读 · 0 评论 -
如何使用搜索技巧来成为一名高效的程序员(Google, Bing, Yahoo or Baidu)
没有人是完全独立的孤岛,每个人都是整体的一部分。——约翰·多恩 (至少你拥有95%以上的知识在网上都可以找到! 你遇到的问题中至少80%是别人也可能遇到过的!) 对于缺乏编程知识的人来说,完全有可能编写一个网页或小程序。如果在用Google搜索相关示例时幸运的话,可以搜到现成的代码。即使是经验丰富的程序员,通常也会为了节省时间和精力而在网上搜索解决方案。如果不借助搜索技术、转载 2012-07-25 23:50:27 · 4445 阅读 · 0 评论 -
调试程序时在不中断程序的情况下输出函数调用信息(Mac OS,Linux & Windows)
转载请注明出处:http://blog.youkuaiyun.com/horkychen有时在查找问题时,不想中断程序运行就输出一下某个条件下的函数执行顺序可以帮助定位问题。在Xcode下可以编辑断点设置中的Action设为Debugger Command, 如果你使用GDB作为调试器(项目设置),然后输入backtrace如下:记得勾选"Automatically continue原创 2012-06-25 21:54:49 · 8214 阅读 · 0 评论 -
推荐淘测试的Instrument Driver (iOS下的自动化测试)
今天看到了下面这篇博客,是淘测试开发的iOS自动化测试工具,非常值得学习应用: InstrumentDriver,对iOS自动化测试说 Yes!InstrumentDriver 是 Mobile自动化小组最近实现的基于 instrument,针对 iOS 的自动化测试框架,目前支持 java 语言编写测试用例。 研究过iOS自动化测试的同学肯定对 instrument U原创 2012-10-15 22:30:26 · 10365 阅读 · 1 评论 -
为什么我们依然困于柏油坑?
《人月神话》发表了近30年了,柏油坑依然在那里。如果软件零缺陷是个神话,为什么我们还始终将陷于Bug修复视为常态?为什么普遍认为软件是解Bug解出来的? 虽然以前微软总被嘲笑补丁打不完,而我们也常常是在打补丁。 一个问题发生了,我们运用智慧的大脑先分析,再找方案! 大部分情况想到的是以最小的代价修复Bug,从而新方案反而引入新Bug。如此往复,构成了程序员工作的主要内容。为原创 2012-08-24 23:33:36 · 2255 阅读 · 0 评论 -
[《人件》摘录]: 生产力:赢得战役和输掉战争
下次当你听某人谈到生产力时,仔细听一听说话的人是否用了“人员调整”一词,很大的可能性是他或她没有提到这个词。多年来从听到的关于生产力的讨论或看到的数以百计的关于这方面的文章中,我们从没有遇见一个专家谈到有关人员调整这个主题的任何事情。然而只谈论一个而不谈论另外一个有什么意义呢?下面评价一下公司在改进生产力方面要做的一些典型的事情:. 强迫人们加班加点. 产品开发过程的机械化转载 2011-11-18 20:01:45 · 2345 阅读 · 0 评论 -
程序员要学会偷懒---正确运用自动化技术
马云语录: 世界是由懒人来支撑的! 懒不是傻懒,如果你想少干, 就要想出懒的方法。 要懒出风格,懒出境界。McConnell在他的>提到三种"懒":"实在的懒","开明的懒"以及"一劳永逸的懒"。并说明第三种"懒"才是最具产值的"懒",因为它需要运用工具或者代码来为自己完成任务:这就是工作中的自动化。<<The Pragmatic原创 2011-04-15 00:41:00 · 5087 阅读 · 2 评论 -
使用 Sonar 进行代码质量管理
Sonar 概述Sonar 是一个用于代码质量管理的开放平台。通过插件机制,Sonar可以集成不同的测试工具,代码分析工具,以及持续集成工具。与持续集成工具(例如 Hudson/Jenkins等)不同,Sonar并不是简单地把不同的代码检查工具结果(例如 FindBugs,PMD等)直接显示在 Web页面上,而是通过不同的插件对这些结果进行再加工处理,通过量化的方式度量代码转载 2012-07-24 23:49:00 · 2908 阅读 · 0 评论 -
使用脚本简化工作
转载请注明出处:http://blog.youkuaiyun.com/horkychen *今天新建了一个类别:生产力。主要想集中写一些提升工作效率的思考和实践,用技术解决问题。据说Google都有专门的生产力部门,专司研究工具和方法,可见生产力虽然零碎,但如果能有系统的加以研究,一定会些收获。 如果工作中有一些需要从网上获取资料的工作,比如获取哪些人还有多少Bug之类的事情,那么下面的内容或许原创 2012-07-10 22:25:05 · 3561 阅读 · 0 评论 -
懒人可以用Automator提高工作效率
转载请注明出处:http://blog.youkuaiyun.com/horkychenMac OS里除了Apple Script, 还有一个更简单的自动化工具Automator,恰当运用可以提高工作效率。 下面举一个简单的例子, 比如在Mac OS执行Android模拟器,不想用AVD再选对,而是想直接运行我想要的模拟器,可以在命令行执行: emulator -avd avd_na原创 2012-07-02 20:32:18 · 13471 阅读 · 0 评论