9
前几天,不幸感冒,在家疗养,对找我而我没能回应的朋友说声抱歉。最近很忙,主要是忙于考研和工作,导致很多项目都在缓慢进行中……
偶然一次发现以前自己弄的一个小扩展,是刚刚接触Shell外壳扩展编程的作品,如果大家感兴趣的话就拿去吧^_^
----------------------14
前段时间打开邮箱发现自己被Google Voice邀请注册了,非常高兴,于是照着网上提供的方法成功注册了Google Voice,我比较看重其免费短信功能,不过可惜的是不支持中文,不过小搞下恶作剧还是可以的^_^。
很想把Google Voice的免费发短信的功能应用在自己的程序上,于是参考了国外博客上的有关Google Voice API的介绍,摸索着写了个ActiveX控件,然后可以很方便的调用了。
首先你必须有Google Voice的帐户,如果没有的话可以选择申请,申请方法可以查看网络,我这里就不多说了。
这个好像是2007年写的了,找出了原来的介绍:
------------------------------------------------------一句话概括一下本软件的主要功能:
本软件可以让你通过键盘上按键或者按键组合达到打开任意文件或者目录。
30
突然找到以前应论坛网友要求编写的一个ActiveX控件,主要是取得Mac地址、唯一物理硬盘ID、物理硬盘信息。应用于网站或者编程对于客户身份的认证。可能写得比较简陋,感兴趣的朋友可以看看。下载地址在这里
另外这个小东东是有有效数字签名的,所以一般情况下不会被浏览器拦截。说到这个数字签名,其实是某段时间一家国外提供证书服务的网站提供的测试签名,虽然有效期比较短,但是加上时间戳(Timestamp),还是能够用的。不过貌似那家网站不再提供这种免费午餐了。
很多朋友估计还会问如何给自己开发的程序签署数字签名等等,等有时间我会说明的,现在把全套数字签名自颁发以及签署等等工具也分享出来(包括makecert.exe、signcode.exe、cert2spc.exe、chktrust.exe、certmgr.exe等等),获取这些工具请访问这里
28
最近整理硬盘时突然发现的自己以前编写一段小脚本,主要是那段时间病毒比较猖獗,加上自己经常出入学校机房,难免会受到病毒的侵扰,后来写了这段脚本,可能在一定程度上缓解了这些问题。
本脚本最主要的功能就是杀死进程,并且可以每隔段时间检查指定进程是否“死而复生”,如果是即立即再次终止,这也就起到了抑制的作用。
脚本运行时会通过记事本显示当然运行的进程列表,貌似有时会显示空白。然后提供结束进程的方式供选择,主要是WMI方式、NTSD命令、Taskkill命令、Tskill命令。
28
昨天咬咬牙写了一百二十几条语法产生式,算是基本构筑了脚本的语法,准备把这些产生式变成LR(1)项目族规范集时犯了难,编译原理一些东西都已经忘得差不多了,哎,一点印象都没有,原先我还记得LR(1)构造项目族规范集的题目我是会做的,现在是一脸茫然,偏偏教科书和作业本没带,看来想唤醒我的记忆还是有点困难的,目前我只能在网上下载点资料看看了,希望能够弄懂。
有人肯定会想一百多条产生式那手工构造LR分析表将是多么困难。恩,的确如此,所以我考虑通过程序自动构建,这样以后灵活性要大点。
准备要画项目集规范族图的,发现电脑上没装Microsoft Visio。算了,我也不准备用那个软件了,因为我找到了好的替代,那就是Dia (http://live.gnome.org/Dia)。感兴趣的同学可以去看看^_^
24
最近还在完善脚本引擎的词法分析部分,语法分析确实难度比较大,至少草稿纸上的产生式文法改了很多遍,希望能够找到突破口吧,在词法分析部分采用了二分查找以加快检索效率,也就是传说中的bsearch函数,说到bsearch就需要提及它的好朋友qsort了,bsearch是Binary Search二分检索,那qsort也就是Quick Sort快速排序了。这两个函数是C语言的库函数,可以直接调用,非常省事。其实这两个函数的发现十分偶然,由于平常Win32 Platform编程比较多,当然也只有Windows下编程我才喜欢去翻MSDN查阅相关API。有次算法老师要求实现快速排序算法,于是我就使用Dev C++编写快排算法了,算法的名字本来准备使用qsort,当敲入qsort时IDE自动提示函数原型,我觉得非常奇怪,难道这个函数已经预先定义了?事后翻阅了MSDN才发现,原来前人已经为我们写好了快速排序的函数了,参考上还举出一个例子,在这个例子中我一眼就发现了bsearch,哈哈,原来二分检索都有现成的了,这下可以偷懒了~~这件事后我决定认真翻阅一遍C的标准库函数。这一翻阅结果发现很多有用的函数,当然我就不一一列举了。如果你有兴趣的话就自己动手翻阅下MSDN吧^_^。
词法分析部分主要特色就是二分查找了,当然具体速度快多少目前我还没有感觉出来,等项目完工后再用专门工具测算吧。
准确的说这个项目目前是我唯一一个使用标准C语言库函数架构的,以前一堆项目都是纯Win32 API构建的,后来发现这样的程序很难移植到其它操作系统上,为此我以后的项目准备好好考虑下可移植性了,哦,对了,原先还有个顾忌,就是使用标准库函数后VC++ 2008的编译后总是链接MSVCR90.DLL上特别麻烦,我希望它能够链接到MSVCRT.DLL上,毕竟这个是通用的动态链接库,不过这个问题现在有了一定的解决,现在编译的使用标准库函数的基本都能链接到MSVCRT.DLL上了,关键是要选对头文件和LIB库。
23
经过几天的奋战脚本解释器的词法分析部分已经完成,接下来就是要完成语法分析部分,复习了编译原理的相关知识,根据以往编译原理实验的成果,打算采用LR分析法,由于我在实验课已经将关键代码写好了,所以语法分析部分的难点就是产生式罗列以及构建ACTION表和GOTO表。
试着写了一组产生式的草稿,发现产生式已经达到五十几条,若根据产生式再去构建LR项目集规范族,然后构造ACTION和GOTO表将是个浩大的工程,更为重要的是,目前尚不知道自己的产生式是否正确,所以有些犹豫。估计等ACTION和GOTO表构建好将十分可观,另外不知道编译器是否支持巨大的数组变量,不过不支持也可以,我就用链表映射的方法构建这个巨大的数组,现在所有的焦点就在这两张表的构建了,晕~不敢去想。
最后一部分将是具有挑战性的部分,主要是将源代码翻译成自定义的指令,然后由虚拟机实现执行,为此重点将是翻译,虚拟机部分我采用虚拟寄存器和堆栈的方式,避开网上讲解的纯堆栈模式,另外我想这套自定义指令应该尽量符合机器汇编指令吧。