Shell's Home

Sep 10, 2008 - 1 minute read

语言的对比

最近贝壳在学(或者准备学)三门语言,python,ruby,scheme。全部都是高级抽象语言,都是脚本语言。加上贝壳本身已经非常熟悉的几门语言,C/C++,Java,Asm,bash,贝壳这次是正宗的要”精通”七门语言了。当然,如果加上勉强会用如vb这些,十多种也不成问题。做为一个学了多种语言用了多种语言的程序员,我想写一下自己多这些语言的认识,作为后来者的参考。 首先是C,当然,是不包含C++特性的C。这门语言可以说是贝壳所见的语言中,最强大最广泛最具备生命力的语言。其他任何一种语言说到混编接口,基本就是C语言接口。C语言也可以模拟非常多的特性,COM,C++,都可以用C模拟。当然,模拟的复杂程度是另外回事情。并且可以编写其他语言的解析器/虚拟机,而这点来说其他语言很难做到。其实本质上说,C语言就是跨机器跨平台的万能汇编语言,所以才具备这些强大特性。C的核心思想是指针,其整个语言构架都是基于指针的。通过指针,我们直接操纵着内存地址的读写。当然有利必定有弊,C语言太难掌握,效率太低了。使用C写代码,就是和机器打交道。你得控制数据的读出写入,控制设备的初始化,控制内核交互。根本上说,一个强大的C程序员,并不强大在算法和创意上,而是强大在对系统的方方面面的了解上,强大在对基础原理的掌握上。 其次是C++,说实话,这语言有点高不成低不就。如果要掌握系统的方方面面,他不比C。如果要抽象要构架要快速要敏捷,他比不上所有的抽象语言。但是 C++的长处在于在系统的层级上引入了算法抽象,增强了编码效率。如果你确定需要在系统层级上编程,又不高兴从C的角度去写。C++可以极大的增加你写代码的速度。当然,他的弊端就是对底层的掌控力和抽象实现的复杂程度。C++(我指的当然是包括STL和Boost的)的长处在系统层级,所以你写代码的时候必须了解抽象的实现方式。然而抽象实现的越强大(例如boost的share_ptr),其底层的机制就越复杂,你掌握的时间也越长。而如果不了解底层,往往会发生很多很奇怪的问题。例如smart pointer的问题,在其他语言中,这是语言系统的bug。而在C++中,则是你自己的问题。因此,想要真正玩好C++的程序员,必定首先是一个C高手,而不是拿着C++的OO特性把C++当普通OO语言的人。 再次是Asm,这种语言可以说没有什么生命力,因为他变化的太快了。一旦硬件构架改革,汇编就要调整。而且抽象层级不够高。除非你正好做操作系统底层,编译器优化和系统破解,否则最好不要考虑这种语言。这种语言的核心构架是寄存器。 然后是java,当然,还有很类似的C#。这类语言开始,语言的抽象层次提高了,因此可以提供反射(python中叫做自省)。反射是高级语言中必要的特性,然而C/C++并没有提供,原因么则必须说一下编译型和解释型语言。一般语言分为编译型和解释型,编译型的代码成型后只需要相关的库支持(其主要目的是代码复用减少复杂度和内存消耗),而解释型的语言需要解释器。如果仅仅从方便使用角度说,解释型语言远远不如编译型(因为要单独安装解释器,当然,像 bash这类怪胎就表说了),而且解释型的语言运行效率仅有编译型的1/10左右。然后当今语言界,编译型语言远远比不上解释型使用广泛。其根本原因有三个,一个是编译过程,一个是反射,最后一个就是内存管理。 如果读者有编译代码的例子,应当知道,除非在同等的条件下,否则编译C++代码是很麻烦的事情。而配置同等的编译条件则彻底失去了C++跨平台的意义。因此C++在不同平台下反复编译的时候,需要考虑大量的问题来达到跨平台的目的。往往这种事情麻烦到需要作者亲自指导编译的地步。如果一个软件,发布的时候声明可以跨平台,然而使用前需要作者指导用户做一堆繁复的操作。估计这个软件只会受到专业用户的欢迎吧。 所谓的语言编译,其实需要经过两步,编译和链接。编译的主要目的是将每行代码翻译成对应的汇编语言,而链接则是将符号引用转换为地址引用。举例来说,我使用了一个变量str来存放一个字符串,这个变量str就是一个符号。我需要在上文中声明(declear)这个变量,以便编译器在编译的时候代换这个符号对应的内存地址,和理解如何使用这个符号(关于上文没有声明的情况下的错误,请看”向下引用”特性)。我使用str的第四个字符的时候,str[3]就会被翻译到固定的内存地址或者基于基址的偏移,机器完全不用理会str是什么。而这点,则是反射实现的最大障碍。反射可以提供一个对象是什么,有什么的信息,并且可以动态创建对象。有了反射以后,才可以实现序列化,分布式等等高级应用。而C类语言在编译后失去了符号是什么的信息,只剩下一个名字,链接后连名字都没了。这种情况下,你怎么知道一个对象是什么呢? Java/C#可以提供反射,因此属于解释型语言。但是他们又不属于完全的解释型,而是解释型的一个特殊分支,中间代码。中间代码型的语言,需要编译,执行的时候又需要解释器。看起来没什么好处,可是在支持反射的基础上,大概可以以C代码1/2的速度运行,比纯解释快多了。原因何在呢?我们可以看看 C++为什么不支持反射。反射是保存针对执行结构的数据并且提供交互,而C++则在编译时生成后丢弃了这些数据。因此,理论上说只要保存了这些数据就可以实现C++的反射。这就是中间代码语言所做的事情。当然,考虑到跨平台特性,编译的结果并不是汇编代码,而是类似汇编的代码(Java叫P代码,C#叫 IL)。后JVM直接执行P代码,C#则通过引擎编译IL到本地代码。因此JVM执行的时候效率基本恒定,而C#初次执行速度慢,后来则是比C++慢不了多少。 最后就是Java/C#的最强特性,动态内存管理。使用这个特性,可以使得程序员彻底的从内存分配和管理的泥潭中脱身出来。白痴的程序员写的程序可用,强大的程序员写程序的效率提高。可是成也萧何败也萧何,内存不到底不回收,又有额外的内存开销,结果导致系统的缓存命中率下降。我们平时觉得Java类语言执行慢最大原因在这里,半解释才不是根本原因。 因此这些语言的特点就是中间代码,其核心思想是对象。这类语言的最大特性就是抽象和构架,使用强大的设计模式,将大型问题拆分成多个小型问题解决。在解决问题的时候,其代码量并不比C++少多少。 再然后是python和ruby,当然,某种程度上还有bash,只不过他弱了点。这类语言的核心思想是抽象数据,例如字典,字符串等。bash是围绕着字符串处理设计的,python是围绕着集合设计的。这些语言解决问题的速度非常快,但是模块化特征和抽象特征相对弱。一般情况下,和C++相比,解决问题的速度大概是1:5,代码量则是1:3。

Sep 9, 2008 - 1 minute read

程序员的几个分类

程序员有高下之分,可高下怎么分?到底什么是高程?程序员要完成哪些任务,怎么评价是否完成的很好? 下面由贝壳同学来胡诌一下他的个人感想,以下的程序员都指商业程序员。当然,爱好者可以类推。 首先我们先讨论一个风马牛不相及的问题,程序值钱么?废话,人家账单大门兄都已经是世界首富了。可贝壳认为,程序不值钱,算法也不值钱,如果说值钱的话,就和软件光盘上面的光盘一样,是个成本性质的辛苦钱。软件里真正值钱的是软件的思想,我们大可以想象一下,写一个让人想穿脑子也想不出怎么用的程序——当然,会写的程序员想穿脑子——然后想想值钱不值钱。大家就会了解到,其实程序员,编程本身,是和装配线上的装配工一样的低附加值行业。不同之处在于,不同培训程度的人劳动生产率不同,而且生产率差异远远大于普通行业而已。好的Coding比差的生产率会高上数倍,而且很难多找几个差的来替换好的,水平不足。但是,做Coding,无论做多快,其价值只会线性增长。 那么为什么软件也被称为今年来发展最迅猛的产业呢?其实关键在于软件业让人可以实现以前无法实现的一些想法。例如,以前不会有人能做到让地球上所有的人 (好吧,是大多的人)坐下来一起讨论一个事情的方法。那么,今天我们的技术已经可以做到。有个人针对当前的技术,设计出一个很好的让所有人坐下来讨论事情的系统。包括一个BBS,带自动翻译系统。在线视频会议中心,可以附加购买在线翻译。一个邮件列表,带存档功能。一个文档编辑和管理系统,带同步编辑,版本管理和资料索引。当我说出上面这堆东西的时候,可能有的人已经晕了,当然,六牙四皂小姐估计已经不继续看了。不过做过一些时间和电脑有关商务的童鞋应当都理解这些东西的意义,并且可以想象这些东西带来的便利。在线翻译的支持系统,邮件列表存档系统,同步编辑,版本管理,资料索引,这些都是技术。尤其是资料索引和自动翻译,更是技术的巅峰之作。可是如果不是结合起来让客户用的舒服,这些东西有价值么? 软件业的价值在于将技术转换为客户的满意,并且最终转换成客户的钞票。越成功的规划,越能满足更多的客户,并且让他们付更多的钱。从这个角度讲,不论软件做的怎么样,微软的规划是全球一流的。同时,能促进这个过程的人,才是具有价值的。不过遗憾的说,到这步基本就不是程序员,而是CTO了—— 程序员的最高价值,在于根据技术和行业,判断应当发展什么技术,采用什么框架,从而低成本,高效的做出让客户满意度最高的系统——而且不是一个系统,而是一堆。这有两个非常苛刻的要求同时存在,对于技术非常熟悉,视野开阔感觉敏锐,否则怎么去感觉技术的价值,判断应当研发的技术?就这点而言,许多程序员在超过30岁后往往都可以在熟悉的领域内做到,有条件的话大概可以在多数领域做到。然而最麻烦的在于,做这个事情的时候,你必须熟悉客户,熟悉客户需要什么。这点往往是不可能的!客户是不可理喻的!技术不是万能的!要知道,使用最好的技术,设计你最喜欢的系统,往往是客户最讨厌的事情。行业客户如此,通用客户更如此。 如果上点你做不到,自然有高水准(也许吧)的人来做,那么你可以做次之的工作。什么呢?执行他们制定的方向。上层的人会告诉你应当发展什么技术,采用什么框架。现在要求你——不用会——能够整合实现这个目标。说明白点,你可以招,但是要求能留下人,低成本。你可以培训,但是要求能做事。你可以研发,但是要求好用。你可以买,但是要求低成本。如果你能实现这些目标,那么同样,你也是有价值的。 这个层次的程序员往往是Project Manager(当然,很多PM根本不是程序员)/Team Leader/Core Programmer。对于他们的要求往往是兼顾技术,行政和人事的。他们需要能够组织研发,积累技术,产生产品。很遗憾的,个人编程能力往往又是次之。不过程序员是很艺术化和个性化的一群人,在这个位置上的人,如果没有相当的技术水准,很难镇住下面的人,用普通管理人员来管理程序员的结果往往是给程序员联合起来耍。因此一般情况下也需要了解大致的程序,并且最好有一定技术水准。 最下面一个层次的人,基本就是能够实现程序,会用上面决定的框架和技术,编码效率高,工资要求低——别的没了——当然,以上是从职业分工来讲一个职业程序员的价值的,你可能说上面没道理,贝壳乱讲。不过事实是,职业的情况下就是上面的状态。当然,从业余爱好者,技术研发者来说,程序员又有另外一种不同的分法。 第一个层次,是刚刚学会技术。能够使用某种特定语言,按照一些例子编写一些程序。实话说,按照贝壳的程度,入手一般语言做到这点不超过7天。然而很多人会徘徊在这个水准无法进步,原因在于——他们能写程序了,而且写了能用。从这个引申开来,顺便说一下,程序员的进步是个很吊诡的事情。一方面来说,要勤于钻研技术才能进步。但另一方面来说,如果不够懒,是很难有足够动力学程序的。因此,好程序员都是勤于钻研的懒汉。 第二个层次,学会了使用框架,并且能够设计一些中度复杂的系统,开始接触第二语言。和初级程序员不同的是,他们能实现一套完整的系统,而不是一个个零散的功能了。这要求他们了解框架,什么时候触发什么函数,系统间怎么互相通讯。并且,有水准的还可以写一些小型的框架。 再上一个层次,了解软件工程对软件的意义,能够跨多种语言编程,灵活使用设计模式,能够设计复杂框架,习惯文档化。和上面的区别看起来不大,不过是能多用几种语言,朴素的设计被设计模式所规范,设计的框架复杂化,并且会写一堆无聊的文档。不过从这步开始,程序员开始了迈向大道的第一步,在这个层次以下的只能算爱好者。无论是研究技术,研究数学理论,还是什么,规范化都是必须而且是非常重要的。我们很难想象一堆工程师,各画各的图纸,最后房子还建的多快好省的。同样,作为高级程序员,头一步就是学会和别人合作。使用设计模式的规范进行设计,使用文档描述系统,可以跨越多种语言协作,了解多种语言思想,这是必须的。 再上一个层次,就已经不是程序员的境界了。作为程序员,上个水准已经到头了。更强的程序员意味更规范?效率更高?那是八级钳工!作为程序员,你可以不认识英文,你可以大字不识一个,然而你必须是个数学高手(其实现在数学高手大字不识一个几乎不可能)。作为程序员的巅峰,你可以很轻易和他人协作,使用合适的语言,然而无法规避的是对问题的抽象描述和求解。在贝壳作为程序员的这段时间里,无数次的碰到数学问题,有些往往是大学里面我们所不屑一顾的。例如蒙特卡洛法,拉格朗日乘子算法,这些在程序里面都有很重要的应用。有的时候更要自行抽象数学模型,并且设计满足时间限制和空间限制的解法。能够抽象问题,解决问题的,才是真正的技术系的高手。 OK,上面,贝壳从两个方面(工程和技术)论述了程序员的高下之分,作为他胡诌的结果,他目前的水准大致是——不知道。并且很遗憾的告诉大家,目前贝壳能看到的就这么多,再上面是什么样子——要么等到了再告诉您?

Sep 8, 2008 - 1 minute read

火灾

2008年9月7日下午15时45分前后,南泉路1200弄门口的餐馆二楼厨房着火。火灾造成了部分居民家中电视线路中断,从而引发了居民围观。目前着火原因并不清楚,有附近居民说该厨房使用柴油工作,因为墙壁挂油起火。火势在16点前后得到控制,渐渐熄灭。 下面请自己去看相簿,里面有六张照片,并且贝壳手里有10分钟左右的录像,需要的可以在http://shell909090.3322.org/fire.3gp下载到内容,http://shell909090.3322.org/fire.rar可以下载到全部照片。

Sep 6, 2008 - 1 minute read

C++下的Variant

所谓C++语言,是一种强类型语言。即是说,C++种的某个变量,在使用时类型是已经确定的。这个并不是设计者的喜好或者是偏心,而是C++中的变量都会被翻译成准确的内存地址和大小,如果类型不确定是不可能处理的。但是在事实中,我们经常要处理一种”变类型”。例如,我们可能需要解析表达式,这个时候我们可能用一个或者两个栈来解决这个问题。可栈里面塞的东西就精彩了,对象,函数,数据,都在里面。这时候,如果是python,我们可以直接用list,他是弱类型的。但是C++怎么办? 一般来说,我们会使用Variant类型来解决这个问题。这是C++面对对象机制和算子机制所派生出来的产物,能够让用户自行定义对象的行为。如果一个对象,可以表现的像这个又像那个,那不就解决问题了?因此在COM中就有一个variant。不过贝壳看过机制,是一堆东西的集合,非常的不美丽。今天贝壳又看到一个variant的实现,漂亮多了。 废话少说,上代码。 #include using namespace std; #include using namespace boost; int _tmain(int argc, _TCHAR* argv[]) { any a; a = 10; printf ("%s: %dn", a.type ().name (), any_cast(a)); a = 10.5; printf ("%s: %fn", a.type ().name (), any_cast(a)); a = string ("str"); printf ("%s: %sn", a.type ().name (), any_cast(a).c_str ()); return 0; } 当类型错误时,出现bad_cast exception。

Aug 27, 2008 - 4 minute read

python的性能问题

贝壳最近在一个朋友的网站上看到了关于SICP零钱兑换问题的python求解,使用了记忆机制,然后他给出了代码。然而他的代码计时上有点小问题,也没有用包装器(奇怪的是,有写),而且python的栈深度有限。因此贝壳做了几个修改的版本,需要测试下性能,下面就是关于性能的几个问题和过程。 本文详细论述了python语言下和C++语言下使用各种方法测试代码性能的方法,以及粗略的关于两种语言不同算法性能对比。 原始的python代码是这样的: def change_coins(money): first_denomination = { 1: 1, 2: 5, 3: 10, 4: 25, 5: 50, } def cc(amount, kinds_of_coins): if amount == 0: return 1 elif amount < 0 or kinds_of_coins == 0: return 0 else: kind = cc(amount, kinds_of_coins - 1) kind += cc( amount-first_denomination[kinds_of_coins], kinds_of_coins) return kind print("change_coins return %s" % cc(money, 5)) change_coins(300) 利用记忆原理包装后是这样的: def memoiza(fun): cache = {} def proc(*arg): if arg in cache: return cache[arg] else: x = fun(*arg) cache[arg] = x return x return proc def decorator_change_coins(money): first_denomination = { 1: 1, 2: 5, 3: 10, 4: 25, 5: 50, } @memoiza def cc(amount, kinds_of_coins): if amount == 0: return 1 elif amount < 0 or kinds_of_coins == 0: return 0 else: kind = cc(amount, kinds_of_coins - 1) kind += cc( amount - first_denomination[kinds_of_coins], kinds_of_coins) return kind print("decorator_change_coins return %s" % cc(money, 5)) decorator_change_coins(300) 不记忆,利用栈模拟递归展开是这样的:

Aug 15, 2008 - 1 minute read

运气真好

昨天晚上吃完晚饭,觉得应该勤快点,还指不定什么时候回去呢,把衣服洗了。刚刚把衣服放进去,电话过来,说系统出问题了,要赶快去看看。于是,贝壳赶快出门,去看看系统有什么问题。 进去被一顿狂说,怎么这么不稳定,怎么解决。贝壳一个头两个大。马上去看看什么问题,一看把我气个半死。原来新华社的稿件都是一个xml,一个txt,一个图片,主文件名一样,贝壳的程序也是基于这个原理写的。现在到好,只有图片没有xml,或者只有xml没有图片。这叫贝壳做个P啊!据说是因为新华社要推新格式,所以老格式不怎么支持了。问题是,上面说保奥保奥,居然奥运期间来这手,这不是要整死人么?而且通知都没有的,要不过来看,黑锅就我背定了。 抱怨归抱怨,贝壳还是赶快改程序,做了个入新格式的。进度还挺快,虽然差异一堆,但是做到早上三点半基本就做好了。到实验机器上一跑,全部通过。然后到生产环境中一炮——全部报错。 OK,下面可就是贝壳无能为力的了。毕竟数据库那里应该都是一样的,而且也不是贝壳写的,无法调试。于是今天只有这样,回去睡觉。走到电梯里面,贝壳觉得不对,味道不对,一股臭脚的味道。这种味道只有两种可能,一种是中国男足来过了,一种是下雨。出门一看,果然,大雨滂沱。最要命的是,贝壳只带了两套衣服,还有套正在水池里面泡着~~~ 于是贝壳一路狂奔,跑过去没两步,哗的一声,贝壳就不知道陷到什么里面去了。吓了一跳,赶快站直,包举高。仔细看看,原来前面马路修路,旁边的土还没有填完整,给水一冲就变成了泥浆坑。贝壳就是陷到这里去了,水刚好漫过小腿肚。 慢慢爬上来,然后贝壳就不敢跑了。前面毕竟还是有几个没有完成的井的。万一掉里面去,连申诉都不会有人管的,毕竟那是还没修好的工地。于是慢慢慢慢走回去,到宾馆的时候全身湿透,外带两脚泥。而且两套衣服全报销了,连第二天吃饭怎么出门都不知道~~~ 奥运期间,这个运气还真是——无敌了。

Aug 11, 2008 - 1 minute read

最近悟到了一个道理

贝壳问上帝,中国房价什么时候下来。上帝说,通涨结束,或者居民消费上去就下来了。 贝壳问上帝,中国居民消费什么时候上去。上帝说,全民保障体系搞好就上去了。 贝壳问上帝,中国什么时候结束通涨,搞好全民保障体系呢?上帝哭着说,我看不到那天了。 上面是拿中国足球的玩笑改的一个玩笑,不过贝壳真的悟到了房价高的原因。通涨乱高无比,保障一塌糊涂,赚了钱不敢花,也不能放,当然只有买房了。房价上涨,通涨更加高高高。

Aug 3, 2008 - 1 minute read

程序员入门的12个问题

以下题目是应一个朋友问而写的,适用于刚刚入门有志或者有需要做程序的朋友的题目。题目脱胎于日常编程中常见的一些问题,很多是贝壳实际碰到问题的变形。题目不注重所用语言,每道题目可以用不同语言解决。有意思向计算机方向发展的可以试试用不同语言来解决,看看哪种语言最方便解决这种问题。如果打算增加难度的话,请使用C++来做,并且尽量抽象复用。在这个过程中积累下来的可复用代码会对以后编程有很大帮助。 1.读出文件中的以下格式内容,计算逆矩阵,并按照同样格式输出。 1 2 4.5 3 0 1 9 5 2 数字间以空格分割,行以回车分割。 难点: 输入和输出应当可以选择是键盘输入还是文件输入,输出到屏幕还是输出到文件。 逆矩阵计算中有可能求不出,出现除零。设法避免直接的报错。 评价: 很中规中矩的一个问题,有点竞赛的味道。只要做过程序的人一般不会失手。 2.某个XML,其中记录了一些信息。信息是按照时间-地点-人物的顺序记录的,例子如下: … 现在需要你颠倒一下,变成这样的: … 难点: 看看能想出多少解决问题的方法。 试试尽量减小内存消耗。 评价: 解决问题的方法很多,比较一下这些方法的优劣。 有一年以上程序经验的就可以最终解决,但要解决的比较完善需要两到三年经验。 3.下载google的首页,跟踪二级连接(二级连接,就是首页中连接指向的页面,上面连接指向的页面)。 并计算其中所有页面,显示出的非空白字符的个数。(显示的文字中的非空白字符) 难点: 试试看跟踪js脚本链接。 登陆后的google首页是不一样的,包括提示,语言类型,设法统计登陆后的首页。 如果是多级呢? 评价: 宽度优先和深度优先算法的应用,对集合运算有一定要求。 重点在于获取和处理html页面的方法。 一年以上即可解决,完善程度和技术水平关系不大。 4.运行两个程序,A和B,将A的输出输入到B中。 难点: 需要等待A的输出和B的输入,以及程序的终止条件。 评价: 需要对系统熟悉,知道管道和用法。知道进程间交互的API。 需要研究过系统,程序水平没有要求。 5.遍历某个目录,找出其中的特定图片文件。 难点: 怎么分析图片文件?文件名是比较粗略的方法,更好的是使用文件签名分析。 下次遍历的时候速度怎么提高(假定文件不变化)。 评价: 还是深度和宽度搜索题目,分析文件是难点。 扩展要求对于数据缓存有一定要求。 一年以上即可解决,文件签名分析看个人水平。 6.监视某个目录的变化,将新加入的mp3的相关信息(IDv3)邮件发给我。 难点: 怎么监视目录变化? 怎么提取MP3的内容? 怎么发邮件? 怎么保证不漏内容。 评价: 要对系统熟悉,了解mp3格式或者能够自行寻找库扩展语言。 了解邮件发送协议,或者能使用系统库发送邮件。 两年以上可解决,完善需三年以上水准。 7.写一个程序,可以计算加减乘除,支持括号。 难点: 让你的程序算算1+2*3,看看是多少。正确应当是7,设计不良是9。 看看你的程序,2/6*3得多少,是不是1.0(最好是1)。 让你的程序设法支持乘方和函数。 评价: 对数据结构和算法要求很高。 一年以上可解决,要扩展支持算符和算法,需要三年水准。 8.画一只乌龟,保存为图片。 难点: 让用户动手画? 试试保存为各种格式的图片。 评价: 实用项目,按照书本教程最多12小时就可以掌握。 然而需要自行解决并做好,至少一年以上。

Jul 31, 2008 - 2 minute read

avast4 collide with ext2ifs

引用 Affected Product: Avast4 home edition ext2ifs 1.10c ext2ifs 1.11 Description: avast4 home edition is a free anti-virus tools. In 2008-07-30 it update some files, include some file called ‘aswSP.sys’. According infomation in autoruns, it’s avast self protection module. [Here is info from autoruns.] aswSPavast! self protection module ALWIL Software c:windowssystem32driversaswsp.sys [Here is info from update-log] 2008-7-30 7:36:14 file Direct move of file: C:Program FilesAlwil SoftwareAvast4SetupINFAMD64aswSP.sys 2008-7-30 7:36:14 file Installed file:C:Program FilesAlwil SoftwareAvast4SetupINFAMD64aswSP.