使用xctool自动打包,测试xcode项目

xctool是facebook开源的一个命令行工具,用来替代苹果的xcodebuild工具。 功能如下: 像xcode一样跑测试用例 结构化输出编译测试结果 彩色且方便阅读的编译内容输出 示例截图: 如何安装xctool 最简单的办法是通过homebrew安装xctool brew update brew install xctool 搞定 如何使用xctool 打包 path/to/xctool.sh -workspace YourWorkspace.xcworkspace -scheme YourScheme archive build path/to/xctool.sh -workspace YourWorkspace.xcworkspace -scheme YourScheme build 测试 path/to/xctool.sh -workspace YourWorkspace.xcworkspace -scheme YourScheme test

关于改善xhprof使用情况的设想

自从去年将xhprof用在生产环境以来,对生产环境的程序调试,性能优化都带来很多便利。但是在使用过程中,还是有一些细节需要改善。 问题 xhprof的profile日志直接以文件形式保存在生产服务器上,需要定时清理,或者收集起来移动到查看日志的工具机上。 由于xhprof生成的profile是一个大数组,所以保存到文件时使用了标准的php serialize,日志文件偏大,一个不留神就容易占用很多服务器磁盘空间。 查看日志列表时,一个个点开查看比较费劲。 针对这几个问题,我有一些小小的设想。 日志存放 部署一个中央日志服务器,采用facebook的scribe来收集日志。生产环境的服务器产生的xhprof日志,都写入到scribe的客户端,由客户端自动同步到中央日志服务器的scribe上,不占用本地的存储空间。在代码上的改动也比较小,只要基于iXHProfRuns接口实现一个XhprofRuns类,调整save_run方法的存储方式即可。 更换序列化方法 xhprof默认是将profile信息用php原生的序列化方法处理后进行保存,而我在前两天比较过igbinary vs serialize vs json_encode的性能和占用字节数,这个测试里igbinary在各方面都有一定优势,尤其是占用存储空间会大幅度减小,所以我只要更换序列化方法为igbinary_serialize即可获得改善。 优化列表展示 我已经厌倦挨个查看profile日志的大图,费时费力还没有针对性。所以我现在的做法是,在profile日志的列表中将前1000个日志的总体执行时间直接输出到列表中,并且将执行时间过长的日志用红色粗体标识。做了这个小小的改动之后,当我想要去视察一下运行情况时,就把日志列表中那些红通通的链接点开看看就行了,真正的省时省力。 如何从xhprof日志文件中获取执行时间?简单的代码如下 /** * 由xhprof日志获得执行时间 * * @param string $log xhprof日志的文件路径 * @return int 执行时间 */ function getSpentTime($log) { $profile = unserialize(file_get_contents($log)); return $profile[‘main()’][‘wt’] / 1000; }

使用nginx做为hiphop-php的前端服务器

在邮件组里看到有人问能不能把多个hiphop-php编译后的程序跑在同一个端口上,想想也是合理的要求。如果一个服务器上跑了多个站点,那肯定都得用80端口,当大家共同租用服务器的时候,这个需求更为强烈。当时我所想到的解决办法是在前面搭个nginx之类的做代理,实际编译后的程序跑在别的端口,然后没过几天就看到了这份wiki – Using nginx as front server to HipHop。 简单的nginx配置示例 /etc/nginx/conf.d/ooso.conf: server { listen *:80; server_name *.ooso.net ooso.net; location / { root __SERVER_ROOT__; index index.html index.php index.htm; } location ~ \.php$ { proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host www.ooso.net; proxy_pass http://localhost:4247; } } 把hiphop-php编译后的代码跑在4247端口,然后通过nginx把所有对php的请求转发到这个端口,看上去就像我们平常配置的php fastcgi,不是吗? 这样做有什么好处 支持负载均衡 支持ssl 支持gzip压缩 用nginx来挡住DoS攻击 因为我们的代码需要经过编译才能上线,代码多起来这个时间还真不短,不能像之前单纯的php那样爽快覆盖就完事。把经过编译的最新代码部署在别的端口上,用nginx快速切换,应该是一个比较实际的用法。 额外的技巧 看wiki学到的额外技巧。以下配置段可以防止某些人把别的垃圾域名指向你的主机,结果被搜索引擎认为你用多个域名搞了一堆重复的内容建设,降低搜索权重。 server { listen […]

快速安装hiphop-php的捷径

不得不说,现在安装hiphop-php实在是太麻烦了,如果有rpm包一次搞定那该多好?就说周边那些零散的依赖库,也有不少安装比较繁琐的硬骨头。 Centos用户的好消息 Update: 在centos 64位机上完全通过rpm安装hiphop-php的步骤也已经提供了。 在邮件组上看到有人提供了centos下安装hiphop相关的rpm列表,把这些rpm装好,再按照wiki上专心编译hiphop即可。也许再过一阵,就会有人直接提供hiphop的rpm包,那就彻底方便了。 rpm列表 libicu42-4.2.1-1.x86_64.rpm libicu-devel-4.2.1-1.x86_64.rpm icu-debuginfo-4.2.1-1.x86_64.rpm icu-4.2.1-1.x86_64.rpm libcurl4-devel-7.20.0-1.x86_64.rpm libcurl4-7.20.0-1.x86_64.rpm curl-debuginfo-7.20.0-1.x86_64.rpm curl-7.20.0-1.x86_64.rpm libevent-1.4.13-1.x86_64.rpm boost-devel-1_37_0-1.x86_64.rpm boost-debuginfo-1_37_0-1.x86_64.rpm boost-1_37_0-1.x86_64.rpm cmake-2.6.4-7.el5.x86_64.rpm Ubuntu 9.10用户的安装指南 Building and Installing on Ubuntu 9.10 看起来还是ubuntu用户最清爽。 注:如果使用了32bit的ubuntu,请使用patch过的hiphop-php进行编译。 Fedora用户的编译步骤 Building HipHop PHP for Fedora 12 on 64 bit and 32 bit Systems BTW: 目前hiphop-php仅支持64位操作系统。

初次体验hiphop-php

昨天facebook在github上发布了hiphop-php的源代码。之前听说这玩意能把php代码翻译成c++代码,然后带来巨大的性能提升,所以第一时间编译了一份hiphop-php。 我的机器环境是 Centos 5.3 x86_64 8G内存 Intel(R) Xeon(R) CPU E5420 @ 2.50GHz 安装注意事项 编译的时候碰到的问题很多,但是基本上都是按照wiki上的步骤进行的。我觉得比较重要的几点: wiki上的Required Packages包包列表都要检查一遍,比如版本号,是否安装过,像binutils-dev这种就很容易忽略 版本符合的话,直接用yum安装这些包就可以了 wiki上有类似Boost 1.37 is the minimum version字样,说明开发者可能就是在这个版本下开发的,我试了下最新版本的boost,编译到后来反而出错 如果yum上没有符合版本的lib库,可以手动编译,但是编译时建议就放在自己的home下,比如: ./configure –prefix=/home/user tbb Intel’s Thread Building Blocks这个包有些麻烦,记得按照wiki上说的步骤安装 测试hiphop-php 安装完成之后,时间也不是太多,所以我仅仅是简单的测试了一个php文件,代码如下: <?php $i = 0; for($j = 0; $j < 1000000; $j++) $i += $j; echo $i, "\n"; ?> 用hphp进行编译: hphp/hphp test.php –keep-tempdir=1 […]

git的代码review工具

facebook在GitHub上托管了大量的开源项目,足足有26个。其中hiphop-php以及xhp在这阵子炒的比较热,的确是让人印象深刻的东西。顺手把别的项目翻出来看,也有很实用的工具,比如git-review。 git-review为git新增了一个很方便的代码review途径,利用这个命令,可以调用别的工具比如vimdiff来review代码的改动。下面简单记录一下使用的过程: 下载并安装 首先确认已经装好了git,剩下的事情比较简单。 git clone git://github.com/facebook/git-review.git cd git-review python setup.py install 这几步为git新增了一个review命令。 git-review的使用 查看指定版本的改动 git review 58e2fb834793f5c6c1fdd900a1c0224a44735962 出现提示 Now processing modified file foo.php foo.php [diff]> 由于我配置了diff工具为vimdiff,所以接下来就可以用vimdiff查看foo.php在58e2fb834793f5c6c1fdd900a1c0224a44735962这个版本与最新版本之间有什么不同。 查看两个版本之间的改动 git review 5b744bdc5f5bcbcfd6bb65f815aebe6bdce8c427 58e2fb834793f5c6c1fdd900a1c0224a44735962 在review每个代码之前,都可以使用help查看git review命令的帮助,如果放弃review,那么直接敲退出就可以了。

facebook平台真的开源了

facebook平台开源了,这次开源的部分是API infrastructure, FQL parser, FBML parser以及FBJS。facebook真是超级彪悍,不需要解释。开放的很彻底,绝对步兵——无码。比某些公司口里喊着开放,实际上还遮遮掩掩要好上百倍。 正在下载中,呆会好好端详一下。 This release includes the API infrastructure, the FQL parser, the FBML parser, and FBJS, as well as implementations of many common methods and tags. We’ve included samples and some dummy data to help you get started fast.