这个应该是OpenGL的hello world了。
上计算机图形学的老师还花了两节课去给同学讲解怎么在windows安装配置opengl,以及怎么编写第一个opengl程序。其实,如果用Ubuntu+Python,只需要安装一个python-opengl就行了。
apt-get install python-opengl
然后编写以下几行代码运行:
继续阅读
这个应该是OpenGL的hello world了。
上计算机图形学的老师还花了两节课去给同学讲解怎么在windows安装配置opengl,以及怎么编写第一个opengl程序。其实,如果用Ubuntu+Python,只需要安装一个python-opengl就行了。
apt-get install python-opengl
然后编写以下几行代码运行:
继续阅读
因为EMSVPS的服务器实在有太多的问题,故现在改回比较稳定的burst.net机器。现在Paypal支持Unionpay的卡,5.95USD/mo大概人民币38元。burst.net的机器提供512M内存和2个IP地址,内存充足的时候跑起Wordpress的确轻松很多了。现在一个IP用作博客服务,另外一个IP用作提供一些Web服务。
因为不同的Web服务都需要监听一个服务端口,为了能让他们共用一个IP上的80端口,需要一个代理分发请求的程序。例如
访问http://lab.xiaoxia.org/server/*的请求分发到localhost:10000的服务,
访问http://lab.xiaoxia.org/whois/*的请求分发到localhost:10001的服务,
而访问http://lab.xiaoxia.org/*的请求,直接获取www目录下的资源文件,例如index.html。
因为使用的都是同一个域名,不同的只是路径,要根据不同的路径选择不同的服务端口,我使用了正则表达式来解决这个问题。
监听一个端口,提供HTTP接口,通过访问Web地址,调用程序获取各种信息。
例如,想在远程服务器上执行free命令查看远程服务器的内存使用情况,
free -m 的base64编码为 ZnJlZSAtbQ==,则访问下面的地址:
http://xiaoxia.org:10000/ZnJlZSAtbQ==
提交之后返回类似于下面的结果,
total used free shared buffers cached Mem: 118 114 4 0 3 36 -/+ buffers/cache: 74 44 Swap: 255 56 199
为了安全使用,在CommandList文本文件里保存着一个命令列表,即可以允许调用的程序。
ps aux
free -m
netstat -na
cat /proc/meminfo
cat /proc/cpuinfo
使用Python的内置函数print支持可变参数,也就是说,print的调用参数是不固定的。例如:
# 一个参数 print "Hello China!" # 两个参数 print "Your name is", name # 三个参数 print "The number of", what, "is", count, "!"
在Python里使用*和**来设置可变参数,它们的区别是*传递一个参数列表(准确来说是参数元组),**传递一个参数字典。二者可以同时混合使用。
>>> def printArgs(*argList, **argDict): ... print "argList =", argList, ", argDict =", argDict ... >>> printArgs("The end of the world is", 2012, lastMan = "Xiaoxia") argList = ('The end of the world is', 2012) , argDict = {'lastMan': 'Xiaoxia'}
下面举一个例子来模仿print的实现,
继续阅读
在Python里可以使用ctypes库来调用其它语言编译的动态链接库程序,使用方法很简单,Linux和Windows都测试过可行。
用C语言写一个简单的动态链接库,譬如一个加法函数,
int plus(int a, int b) { return a + b; }
编译一下!(Linux下还要加 -fPIC 参数来编译成so文件)
gcc foo.c -o foo.dll -shared
在同一目录编写python脚本,代码如下:
>>> import ctypes >>> foo = ctypes.cdll.foo >>> print foo.plus(1, 2) 3 >>> print foo.plus(100, -1) 99
写了很多年C/C++代码了,有时候换了一种语言去写程序,还是发觉自己的代码始终没有摆脱C的风格和思想。
正当我考虑是否用Python里struct的pack和unpack函数来实现C里的结构功能的时候,我想起来有个东西叫做pickle,可以把一个对象编译成字符串然后保存到外部文件。既然可以这样做,那么我想可不可以用它来把一些数据都用pickle来打包,然后把生成的字符串通过网络传输到另外一个程序,然后得到这些数据内容呢?经过了一些测试,我发现是可行的。
在Python的官网文档上说,有个叫cPickle的东西,和pickle实现了一样的功能,只不过cPickle是用C语言实现的,工作起来效率高很多。另外还了解到Python的marshal也可以实现一样的功能,只不过它没有文档化,不是一个公共的库,会随着版本变化而改变,所以不推荐使用。
对pickle使用方法的详细文档在http://docs.python.org/library/pickle.html。
背景
笔记本硬盘坏了,数据没了,盘里面的数据价值肯定超过联想数据恢复的RMB1500高价,不过当时身五分银,还是算了。。。
新硬盘需要重装很多东西,今晚在群里看到给宿舍评分的给力投票,网址上的验证码做得很水,想涉足一下传说中的验证码识别技术!
一段Python代码测试域名是否可以注册。用到了panda.www.net.cn提供的一个接口,返回的是一个XML数据。
例如
在浏览器里输入
http://panda.www.net.cn/cgi-bin/check.cgi?area_domain=xiaoxia.org
返回值是
<?xml version="1.0" encoding="gb2312"?>
<property>
<returncode>200</returncode>
<key>xiaoxia.org</key>
<original>211 : Domain name is not available</original>
</property>
使用xml.etree.ElementTree来解析上面的XML数据。
因为它不支持gb2312,所以需要在解析前,转换成utf-8格式的。
然后判断original的值来得知域名是否可用。 继续阅读
Python版本
实现了比之前的xxftp更多更完善的功能 🙂
1、继续支持多用户
2、继续支持虚拟目录
3、增加支持用户根目录以及映射虚拟目录的权限设置
4、增加支持限制用户根目录或者虚拟目录的空间大小
xxftp的特点
1、开源、跨平台
2、简单、易用
3、不需要数据库
4、可扩展性超强
5、你可以免费使用xxftp假设自己的私人FTP服务器
测试地址
ftp://xiaoxia.org
匿名帐号可以使用!
匿名根目录只读,映射了一个虚拟目录,可以上传文件但不允许更改!