2010年10月 存档

VBS也玩验证码识别

2010年10月31日,星期日

这几天不是在学Python嘛,怎么还老写VBS的东西。

其实我学Python有两个原因,一是很多开源的BT下载软件是用Python写的,哪天没事可以改改源码做做弊什么的;二是以前无意中看到《python验证码识别之Discuz》的系列文章,顿时感到Python之强大,验证码都能识别,想做什么不行?

几天下来学了点Python的皮毛,于是迫不及待的看了一下《python验证码识别之Discuz(一) 》,发现依然看不懂。并不是看不懂语法,而是看不懂算法。PIL库固然强大,但是光靠库本身还是无法识别验证码,还得加上图形算法。可见语言什么的都是浮云,会算法才是王道。

于是Google了一下验证码识别的原理,自己尝试着用VBS识别晨光BT(该网站需要IPv6网络才能访问)的验证码,发现并没有想象中的困难。之所以选择晨光BT的验证码,是因为它本身比较简单,再加上我还有它的源码,识别起来会相对容易些。

鉴于大部分网络依然是IPv4,我把生成验证码的页面放到了博客的测试目录中,可以点击这里查看。

(更多…)

JavaScript调用VBS中的InputBox和MsgBox函数

2010年10月30日,星期六

严格的是应该是JScript,不过很多不明真相的同学不区分JavaScript和JScript,于是标题就写JavaScript了。JScript和VBScript相互调用搞来搞去都是ScriptControl,一点技术含量也没有。

JavaScript版MsgBox函数,后面两个参数忽略掉,用了那么久VBS我从来没有用过MsgBox最后两个参数。

(更多…)

VBS中Property Set和Property Let的区别

2010年10月28日,星期四

说好不玩VBS来着,但是今天有人问我,简单的写一下吧。

对于这个问题,《VBScript Programmers Reference》第215页说的很清楚:

Functionally, Property Let and Property Set procedures do the same thing. However, the Property Set procedure has two differences:

  • It makes it clearer that the property is an object-based property (any technique that makes the intent of the code more explicit is preferable over any other equally correct technique).
  • Code outside of your class must use the Set Object.Property = Object syntax in order to write to the property (also a good thing, because this is the typical way of doing things).

从功能上说,这两者的作用是一样的。但是Property Set有两点不同:第一,它说明了这个属性是一个与对象有关的属性;第二,在类的外面给属性赋值的时候必须使用Set关键字。

文件说明太抽象了,举个例子:

(更多…)

用VBS精确计算2的100次方

2010年10月27日,星期三

即Grade school multiplication(小学乘法?)算法的VBS实现。既然Python可以计算2的100次方,那么我就要用VBS实现。不过这个效率嘛,计算2的10000次方Python用了0.009013秒,VBS用了120.9805秒,不是一个等级的,我就不多说什么了。

直接上代码: (更多…)

Python中的长整型(Long)乘法C源码分析

2010年10月26日,星期二

最近学Python看的书是《Learning Python》第三版,在Chapter 2里有一个示例

print 'hello world'
print 2 ** 100

然后说了句“我将在这本书的后面解释print语句,以及为什么在Python中计算2的100次方不会溢出”。

I’ll explain the print statement, and why you can raise 2 to the power 100 in Python without overflowing, in later parts of this book.

Python中的长整型(long)和C语言的long有很大的区别(C语言的long对应Python里的plain integer),Python中的long可以实现无限精度(unlimited precision),很好奇这个在C代码中是怎么实现的,于是看了一下Python的C源码。

虽然求幂运算也有对应的算法,但是最终还是依赖于乘法来实现,所以在这里只研究一下Python的长整型乘法。长整型乘法在Python源码中的Objects目录的longobject.c中定义。 (更多…)