Archive for 编程

n久前就有这样的冲动,这次读了淫神的代码后,决定还是动一下手。 语言语法主要类似python的,靠缩进来定义代码块,动态语言/静态语言还没想好0 0(应该会静态类型)。 以前想做的时候看过,flex,yacc/bison什么的,看了淫神的代码突然想自己实现一下,问题是难免的,出现问题解决问题。不下手不会知道问题会出在哪,这也是成长过程。看了淫神的代码开始想使用python写,后来觉得有必要复习一下c了,c语言用的太少了,是时候提高一下水平了。 再一个临时的决定是使用llvm,虽然现在还不是很懂其中的奥秘,看看文档慢慢来吧。这也是发现现在好多语言都在用来提示速度,dropbox也在搞py的实现,期待能达到更快的速度。 感觉如果用flex,bison ,llvm 写一个语言应该超简单。。。当然是写一个玩的而不是用的。 我看了淫神的代码 ,然后去翻python的源代码parse部分,无从下手,打眼也抽不出来各部分功能,然后就放弃了,自己慢慢搞。汗 更新 周末,屋里又看了一下python parser部分的源代码,找到了基本流程,开始基本就在Parser/pgenmain.c和Python/pythonrun.c这两个文件,流程我也过了一遍,函数里边具体的分析没仔细看。突然感觉流程都差不多,我可以借鉴一下python的c代码,质量不用说肯定是不错的,偶卡卡。

Continue

好吧,我先把yin语言的java代码看了个差不多才想编译一下,主要原因还是想打印点测试的东西,并不是想写点什么。 总的来说像淫神说的,写得代码却是容易阅读。我java只是上学的时候开过课,再没用过,看的过程中只查了两三个的函数就看完了。看完了发现写个括号语言不算太难0 0,我的意思仅仅是学习知识不是编写一个可以用的语言。编译原理的课也开了,都是理论,传说中的龙书又是啥书的,我几分钟看来一遍,感觉和课本没什么区别。看一个编写初期的代码更容易理解一些东西。以前也想自己实现过,想想解析代码的复杂程度就怕了。 环境需求,参照github的wiki上。 java jdk 1.7,ubuntu12.04自带好像是openjdk 我以前搞安卓游戏的时候换过了。 maven 3.2 我直接从官网下载的二进制版本,http://maven.apache.org/download.cgi。解压到/opt/maven-3.2.1,vim /home/a0x55aa/.bashrc,添加export PATH=/opt/maven-3.2.1/apache-maven-3.2.1/bin:$PATH。source一下。mvn -version看一下。应该没问题了 然后mvn compile,自动下了一堆的东西0 0。pom.xml配置文件也看不懂。 mvn exec:java -Dexec.mainClass="org.yinwang.yin.Interpreter" -Dexec.args="tests/assign1.yin" 又下载了一堆东西。。。java果然不是一般人能搞的。我草。太恶心了,都不知道什么用。

Continue

$ sudo apt-get install build-essential xorg-dev libgtk2.0-dev 编译bochs $ ./configure --enable-debugger --enable-disasm $ sudo make $ sudo make install 记录几个目录: /usr/local/bin/bochs Bochs启动程序 /usr/local/bin/bximage Bochs带的制作磁盘镜像文件的工具 /usr/local/share/doc/bochsrc-sample.txt Bochs的配置文件例子 配置文件官方给的例子有详细的解释,修改一下就好。比如我编译的bochs的版本为 bochs-2.5.1,提示错误: device: hd message:ata0-0:could not open hard drive image file '30M.sample' 你可以新建一个hd img 也可以把配置文件里hd注释掉,再修改一下boot就好了. 这样安装的bochs带有调试功能,如果你想直接运行,可以执行c命令。 [caption id="attachment_698" align="alignnone" width="227" caption="ubuntu bochs调试"]ubuntu bochs调试[/caption]

Continue

今天用python进行网站数据采集,该站主要有这么几种措施防止数据采集: 1、div标签不标准。闭合标签跑太远,导致采集不准确。 2、放置干扰字符。这种直接提示错误,没有办法采集。错误提示:'ascii' codec can't encode character u'\u3009' in position 5 解决方案: 第一种如果处理不好会带有许多原站信息,采用缩小div标签的范围,但是效果不明显。感觉用正则判断比较不错,但是又经常将标签前后放置很多空格和换行,还是很麻烦。 第二种,根据提示的字符,找到对应的字符“〉”,我到原文中搜索一看,差,震惊。竟然这么写的:“<p〉”。我是没有直接替换,采用保存到文件,然后手动修改,再读取文件处理。

Continue

在抓取网页数据进行html分析的时候,以前一直使用HTMLParser,文档:http://docs.python.org/library/htmlparser.html 自从知道HTMLParser后,一直感觉他就是一个神器,分析简单快捷,几行代码搞定了。 这次在总页面抓取使用HTMLParser,没有问题,很快实现结果。但是在获取详细信息的页面时候,开始提示错误了:HTMLParseError: malformed start tag,各种google,其中有一大部分的结果是关于Beautiful Soup的,于是我了解了Beautiful Soup。HTMLParser还有一个缺点,对编码的处理也不是很友好。 开始安装的Beautiful Soup最新版本4.4.1,有问题,也是报这个错误。由于前面搜索知道换成版本3.07a就好了,直接又换了一个版本。先说官网地址:http://www.crummy.com/software/BeautifulSoup/,Beautiful Soup 3.07a下载地址:http://www.crummy.com/software/BeautifulSoup/bs3/download//3.x/。 测试通过,没有报错。能否抓取成功下面试试。正在看官方文档,版本3的文档不一样,贴地址:http://www.crummy.com/software/BeautifulSoup/bs3/documentation.zh.html 时隔二分钟,测试成功。发现Beautiful Soup更加简单,文档也不错只看了开始的例子就会用了,速度应该不会太好,不过我只是满足自己需要。很好很强大。 刚刚结合文档总结了几个用法,很多根据文档写出文档没写的例子: #基本的标签查找 asd = soup.find('div', id="productDescription") #可以这样写 soup.findAll('td', {'class':"bucket normal"})[0] #想要进行查询结果中查找 aaa = BeautifulSoup(str(asd)) #查找多个不同class,或 bbb = aaa.findAll('div', {'class':["leftImage","rightImage"]})

Continue

这是一篇转载文章,原文链接:http://www.jb51.net/article/17560.htm 刚写了一个汉字的图片验证码,被错误提示折腾了。看到这篇文章便分享。 报错“UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)” 字符串在Python内部的表示是unicode编码,因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unicode编码(encode)成另一种编码。 decode的作用是将其他编码的字符串转换成unicode编码,如str1.decode('gb2312'),表示将gb2312编码的字符串str1转换成unicode编码。 encode的作用是将unicode编码转换成其他编码的字符串,如str2.encode('gb2312'),表示将unicode编码的字符串str2转换成gb2312编码。 因此,转码的时候一定要先搞明白,字符串str是什么编码,然后decode成unicode,然后再encode成其他编码。 代码中字符串的默认编码与代码文件本身的编码一致。 如:s='中文' 如果是在utf8的文件中,该字符串就是utf8编码,如果是在gb2312的文件中,则其编码为gb2312。这种情况下,要进行编码转换,都需要先用decode方法将其转换成unicode编码,再使用encode方法将其转换成其他编码。通常,在没有指定特定的编码方式时,都是使用的系统默认编码创建的代码文件。 如果字符串是这样定义:s=u'中文' 则该字符串的编码就被指定为unicode了,即python的内部编码,而与代码文件本身的编码无关。因此,对于这种情况做编码转换,只需要直接使用encode方法将其转换成指定编码即可。 如果一个字符串已经是unicode了,再进行解码则将出错,因此通常要对其编码方式是否为unicode进行判断: isinstance(s, unicode) #用来判断是否为unicode 用非unicode编码形式的str来encode会报错 如何获得系统的默认编码? #!/usr/bin/env python #coding=utf-8 import sys print sys.getdefaultencoding() 该段程序在英文WindowsXP上输出为:ascii 在某些IDE中,字符串的输出总是出现乱码,甚至错误,其实是由于IDE的结果输出控制台自身不能显示字符串的编码,而不是程序本身的问题。 如在UliPad中运行如下代码: s=u"中文" print s 会提示:UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)。这是因为UliPad在英文WindowsXP上的控制台信息输出窗口是按照ascii编码输出的(英文系统的默认编码是ascii),而上面代码中的字符串是Unicode编码的,所以输出时产生了错误。 将最后一句改为:print s.encode('gb2312') 则能正确输出“中文”两个字。 若最后一句改为:print s.encode('utf8') 则输出:\xe4\xb8\xad\xe6\x96\x87,这是控制台信息输出窗口按照ascii编码输出utf8编码的字符串的结果。 unicode(str,'gb2312')与str.decode('gb2312')是一样的,都是将gb2312编码的str转为unicode编码 使用str.__class__可以查看str的编码形式 原理说了半天,最后来个包治百病的吧:)

#!/usr/bin/env python
#coding=utf-8
s="中文"

if isinstance(s, unicode):
#s=u"中文"
print s.encode('gb2312')
else:
#s="中文"
print s.decode('utf-8').encode('gb2312')

Continue

今天把操作系统作业做完了,本来以为很简单的一个程序几十行就写完了。没想到写了有二百行,各种添加变量,各种添加if,各种添加for,直接晕菜了。 写得很乱,说不定明天就忘记写得神马意思了。先贴出来,等上机的时候在优化一下。<操作系统课程设计--短作业优先作业调度> code:

#include
#include
#include
#define MAXNUM 5
#define MAXTIME 20
struct sjf 
{
	char name[8];
	int arrivetime;
	int servicetime;
	int runtime;
	int is_over;//是否运行完
	int starttime;
	int finishtime;
	int turnaroundtime;
	float rightturnaroundtime;
}p[MAXNUM];


static int j=0,k=0,l=0;//j当前正在执行的进程	k当前时间已经到达的最大进程 l是否没有进程运行


//读取进程数据
void readProcess()
{
	int i;
	char str[200];
	FILE *fp;
	char *token;
	if ((fp=fopen("Process","rt"))==NULL)
	{
		printf("读取文件失败!\n");
		getchar();
		exit(1);
	}
	printf("|--------------------------------------|\n");
	printf("|--进程名称--|--到达时间--|--服务时间--|\n");
	for (i=0;i

Continue

几天前的事了,断断续续也写了几天。用了wxpython写的界面,在ubuntu下写的,在xp下编译成功,win7测试成功。 为防止工具乱用,只支持一个贴吧。代码很多是参考别人的写法,省去了自己阅读javascript的时间,所以总体比较简单,借机大体学习了wxpython,很强大,就是用py2exe编译出来的文件太大了。可能是自己没有优化吧。 现在写程序发现总是调用别人写的代码,神马时候能有水平写个接口让别人用一下T_T..

Continue

用了一个javascript的插件,json传送过来的时间需要是Date对象类型的开始的思路就错了,以为可以直接返回这种类型的数据。差,天真了。后来又看到直接返回含有js语句的json文本,非常不喜欢。就想能不能转成js中Date能识别的格式,哈哈果然有。方法如下: 我用的 ,用json也行哇。views.py里的代码

from django.utils import simplejson

 li = []
    for a in articles:
        article={}
	article["start"] = a.datetime.strftime('%Y-%m-%dT%H:%M:%S')
        article["content"] = a.content
        li.append(article)
    json = simplejson.dumps(li)
    return HttpResponse(json)
其中strftime('%Y-%m-%dT%H:%M:%S') 是格式化为Date对象格式的字符串,方便在浏览器的javascript中转换为Date对象. html文件比较简单判断json的长度 循环变成Date对象,jsvascript
var i=0;
for(i=0;idjango发送json数据并格式化datetime时间数据风波二

Continue

http://pypi.python.org/pypi/mmseg 拼音加加5.0 Fundset优选词库多音字容错 http://fundset.ys168.com/ python-segment是一个纯python实现的分词库 http://code.google.com/p/python-segment/

其他中文分词项目:什么语言也有

http://judou.org/trac/

Continue