Monthly Archives: May 2012

Oakland’12

写下这个标题的时候比较心虚,因为我并没有去这个刚刚结束的会议。

anyway,papers和slides公布出来了,可以一饱眼福了。

papers: Google “site: www.ieee-security.org/TC/SP2012/”

slides: www.ieee-security.org/TC/SP2012/program.html

两个熟悉的团队,NCSU的Jiang,PKU的Wang,又一次分别发了论文。Jiang的这篇有些让人失望,我以为会是一个android malware’s meta-data platform for further researching,结果主要贡献是开放了样本集,以及分析了去年的趋势。

ReDeBug项目在更大的代码库中寻找重复代码导致的漏洞,依然有非常多实质性的漏洞报告产出。这一次是语言无关的,还没有细看他们是怎么做到的。我好奇的是,在漏洞有效性上,如何高效率地验证?

最佳论文和最佳学生论文都落到了移动安全上。这也是大势所趋。不知道移动安全还能火多少年,无论如何,现在正是黄金时期。

Prudent Practices for Designing Malware Experiments则是我认为这次最有意思的论文。最近几年,经常看到这种大牛在顶级会议上就研究方法的一些基本问题进行探讨和否定的。这种基本都很好玩,还有的会很卖萌……至于这篇,先读完正文再评价。

x32 ABI

kernel 3.4发布了,其中一个更新是加入对x32 ABI的支持。

与此前曾介绍的armel与armhf关系一样,x32并不是intel处理器的一种新架构,而是在intel 64位处理器上(也许将来也会用到ARM上?)的一种二进制程序调用规范。它的主要想法是:

在64位处理器上,所有的指针自然也应该是64位的,但很多应用程序在运行时并不需要超过4GB的内存,因此64位的指针是浪费的。这些浪费体现在程序大小上、程序运行后可执行代码占用的内存上,当然这些都是相对来说不必考虑的,但从CPU cache的角度考虑,64位的指针和32位的指针,对本来容量就很小的cache就意义重大了。从逻辑上,32位指针应该可以让cache缓存更多内容,并且在一致性维护上的开销更小。

但如果在64位CPU上纯粹地以兼容模式跑32位程序,又无法充分利用64位CPU的一些特性,例如更大的寄存器、更快的函数参数传递、更快的浮点运算、更快的syscall等。

因此,出现了x32这种折中。与armhf类似,它的改动也很简单:在x64 ABI基础上,将指针全部改为32位。

一份性能测试结果如下(完整介绍在这里):

On Core i7 2600K 3.40GHz:
Improved SPEC CPU 2K/2006 INT geomean by 7-10% over ia32 and 5-8% over Intel64.
Improved SPEC CPU 2K/2006 FP geomean by 5-11% over ia32.
Very little changes in SPEC CPU 2K/2006 FP geomean, comparing against Intel64.
Comparing against ia32 PIC, x32 PIC:
Improved SPEC CPU 2K INT by another 10%.
Improved SPEC CPU 2K FP by another 3%.
Improved SPEC CPU 2006 INT by another 6%
Improved SPEC CPU 2006 FP by another 2%.

作为一种独立于编译工具和应用程序的通用优化方法,这种改进的效果可以说是非常显著而有价值的。

虽然说起来简单,但实际要做的工作并不少。因为这两种调用约定在二进制级别并不能兼容,从armel到armhf迁移的经验来看,需要的工作应该是:开发工具链、内核支持和迁移、公用代码库迁移、常用软件迁移等。这一次kernel的更新,应该是指第二步已经完成了。

linux社区在armhf和x32这两种新的ABI上的动作,给我两种感觉:从小的来说,随着编译优化的不断前进,以往忽略的ABI可能是性能的瓶颈,在这方面是否还有进一步修改优化的余地?从大的看,ABI这种已经形成实施标准的东西,居然也是可以迁移和并存的,考虑另一些领域,例如网络、例如总线,在广泛应用的事实标准存在的情况下,有没有可能出现新的更优方案?以往总认为代价太大而不值得,但现在这两件事提供了参考。

当前的阅读方法和工具

阅读是获得知识的主要途径(另一个是交流),怎么样挑选要阅读的内容、怎么样高效地利用工具以保证阅读效果和效率,是值得花心思的。

我把阅读分为几类:资讯、论文、书籍、延伸。对这四类,分别用不同的方法和工具来管理。

资讯

资讯的特点是:来源很多,每天都有,绝大部分不重要,但也需要看。从聚合的角度,最好的方式是RSS;从筛选的角度,很可惜,我知道的范围内,目前还没有新闻推荐的服务或应用。

主要的平台是Google Reader。国内也有很多在线或者本地的RSS阅读工具,使用Google Reader只有两个理由,一是简洁,二是能抓取墙外博客(blogspot上有不少高质量内容)。

在本地,使用Reeder阅读器,它的主要优点有三个方面。一,良好的阅读效果,包括一致性的排版以及内嵌的webkit浏览器;二,与Google Reader的完美交互,包括双向的同步,同步内容则包括订阅源、新闻、用户习惯,这样可以保证在本地的点击情况依然会被Google统计,进一步形成阅读趋势统计数据;三,与Safari的完美结合,可以自动发现页面的RSS源,一键订阅到Reeder中(最后同步到Google Reader上)。另外,Reeder支持发送到Read It Later(Pocket),这个非常棒。

在手机上,使用网易阅读器。主要是到现在仍然老土地使用2G网络,流量很少,所以希望有离线阅读功能。网易的新闻和阅读两个app是近一年我见过体验最好的两个应用,除了支持完全的离线,使用起来也很舒服。用网易阅读器读Google Reader中内容比较麻烦,因为网易想搞自己的一套服务,直接与Google Reader为对手。两种方法,一是把Google Reader中订阅的源一条条再导入到网易阅读器中(不得不说,后者的功能还是比较缺乏的,比如批量导入导出,比如所有新闻放在一起看等,都是基本需求),因为网易阅读至今还不支持不同来源混合到一起显示,只能一个个源地看,所以很不推荐——如果订阅了100个博客,在这里就会有100个栏目。另一种方法是,在Google Reader里对这些源做成群组,然后公开,拿到公开的atom源,导入到网易阅读器。主要缺点是,经常抓取出错。

内容管理上,我把所有源归为四类,一是个人的收藏,以小众网站和博客为主;二是普通媒体,大量产出价值不高新闻为主,例如cnbeta这样的水站;三是下载更新类的,比如itpub或者皮皮书屋,更新很多但只用看标题;四是工作相关的资讯和网站等。以前是按来源类型分,最后分类基本没有意义了。这样分,对个人收藏的类别,一般都是精读;对普通媒体,时间很多的时候或者无聊的时候翻一翻;对第三类,定期排查,就可以了。

此外,关于前面提到的Read it later,可以把所有需要细读的文章离线下载到手机里或者本地,利用空闲时间来读。

论文

对论文和报告,最近开始用Papers2来读。这是个非常棒的本地科研管理平台,对阅读pdf来说,全文搜索、高亮标注、页内笔记等,都是很实用的功能。其他方面,包括论文管理、导入导出、检索等方面也很完美。只希望以后会出现论文推荐的功能。

书籍

目前用Kindle DXG。普通Kindle用来读非技术书已经足够了,而且便携。但是看里面有代码的,有图表的,还得是DXG。把系统升级到3.2.1,然后越狱刷中文字体后,无论是显示效果还是刷新速度,都已经可以接受。

关于在amazon买书,如果淘宝一下,会有意外的收获。

实体书依然无法替代。一是Kindle实在不适合随机翻;二是还是有一些中文书不错的。

大的打算是,希望把实体书逐渐电子化,用Papers2来管理和阅读。

延伸

与学习一样,阅读最大的问题不是没去看什么,而是不知道自己没看到什么。也就是说,依然存在如何扩宽视野,接受别人推荐的问题。

对书籍,现在用豆瓣来管理,然后用豆瓣的推荐功能,基本ok。

对资讯,目前用Reddit和Hacker News两个平台,看看相关topic下热门的话题是什么,看看别人推荐的东西。

再次可惜一下,我知道的范围内,还没有针对资讯和论文的个人阅读习惯的推荐服务。希望哪一天可以看到。

保护树木,无纸生活

在《Linux/Unix设计思想》中,提到“保护树木”原则。大概意思是,数据应该存储在内存、磁盘或者网络上;一旦将其打印到纸上,就无法再次移动、筛选、排序、修改、转换、检索、加密等。

看到这里,把“数据”缩小一下范围,变成书籍、论文和笔记这几样东西。发现以往的想法确实有些问题。

看实体书,如何快速查询某一个关键词?怎么摘录?怎么做笔记或者标记?做了笔记/标记以后又怎么提取它们进行分享?怎么再次查找?对论文、对写到笔记本上的笔记,也有同样的问题。

相反,如果用电子书、电子版论文、电子的笔记,上面的问题就都很好解决了。这也是一个数据处理的问题,当数据固化到纸面上,不论是打印下来的还是手写下来的,就无法再次处理了。而从Unix的观点看,无法再次数据的数据,价值为0。

把这些阅读和记录,从纸质媒介转到电子媒介,遇到的主要问题可能是工具。硬件上,笔记本、平板、手机是自然的选择,而且各有其用(但是感觉用MacBook Air的话,平板可以省掉)。软件上,阅读和笔记软件,最近在使用Papers、Evernote和FreeMind,感觉还不错。尤其是Papers中对PDF文件的管理、批注、高亮功能,非常棒。

另一个问题是电子的书从哪里来。目前的解决方案是,看amazon的kindle书。绝大部分值得读的书,都有出kindle版。最后的问题是国内的书,这个只能尽量采用图书馆共享的方式了。

从过去几个月的实践看,我对不用纸的阅读和记录很有信心。