Categories
不学无术 木有技术

matplotlib 存储到内存文件 save to memory file(buffer) instead of disk file / PyQt4

References:
http://stackoverflow.com/questions/4330812/how-do-i-clear-a-stringio-object
http://stackoverflow.com/questions/8598673/how-to-save-a-pylab-figure-into-in-memory-file-which-can-be-read-into-pil-image
 
In fact Python have a StringIO module to deal with this problem, it works pretty fine with PyQt and matplotlib.
Procedures:
1. [SAVE] Create a StringIO object (or cStringIO which have faster speed)
2. [SAVE] Call savefig method of matplotlib and use the StringIO object instead as the input variable
3. [LOAD] Use QImage to read from StringIO object (via fromData method)
4. [LOAD] Use QPixmap and blabla to show the image….
 
Code:
 

# StringIO with matplotlib test
import matplotlib.pyplot as plt
import cStringIO
from PyQt4 import QtCore, QtGui
import sys
import cPickle
fig = plt.figure()
plt.plot([1, 2])
buf = cStringIO.StringIO()
plt.savefig(buf, format='png')
buf.seek(0)
app = QtGui.QApplication(sys.argv)
widget = QtGui.QWidget()
widget.resize(250, 150)
widget.setWindowTitle('simple')
qimg = QtGui.QImage.fromData(buf.getvalue())
pixmap = QtGui.QPixmap.fromImage(qimg)
label = QtGui.QLabel(widget)
label.setPixmap(pixmap)
label.setGeometry(0, 0, 250, 150)
widget.show()
sys.exit(app.exec_())

 
 

Categories
不学无术

PyQt使用线程更新GUI

给几个参考文章:
http://stackoverflow.com/questions/9957195/updating-gui-elements-in-multithreaded-pyqt
http://stackoverflow.com/questions/2585442/sending-custom-pyqt-signals
http://stackoverflow.com/questions/14090353/sending-messages-between-two-widgets-using-signals-and-slots
http://themkbytes.blogspot.com/2012/06/pyqt-qthread-signal-gui-examples.html

Threading with PyQt4

Categories
木有技术

PyCharm 3.4.1 注册码及注册机

==警告==

注册机打开时360系列娱乐软件会报毒,各位自己看着办

=======

注册机下载链接:http://pan.baidu.com/s/1jGvDZ62 密码:hh3o
 
提供几个注册码,用户名是EMBRACE222

===== LICENSE BEGIN =====
55646-12042010
000024fGr86dKEeR"6kGLRKZiBAxxy
CmiOVN!JfXO63IVEYHBFXcAprMLrq3
gWkFOBuZNzTLVG!WHRAAg2JjCI41H!
===== LICENSE END =====
===== LICENSE BEGIN =====
78431-12042010
00001L0arVmZEjYNqU9pOXrZxlUzw4
iIUK0doPnpphNSU8HtRXOGSGIruBGi
4VbvDvfj6FAfcFcxjzuEzpLJpkLVHt
===== LICENSE END =====
===== LICENSE BEGIN =====
50314-12042010
00001TbPnl4kVwEoPuO0tY9y!QEqUr
sjCXCi40IlDo8zEN44PXXnDlxicCbv
JPjGZJsEVRt3pTOh8MMP!wFlXcaesB
===== LICENSE END =====
===== LICENSE BEGIN =====
07662-12042010
00000JtsEpNfwGPO1tSRaiG2ykW0yC
1JyfK2"s6Ei0TUDTHsnl!AG2iFqOEp
Bj4SPEFXtBdnIRXIRCyKs4CINhNTVD
===== LICENSE END =====

 

Categories
不学无术

python format string (转)

来源不可考
在python中也有类似于c中的printf()的格式输出标记。在python中格式化输出字符串使用的是%运算符,通用的形式为 


格式标记字符串 % 要输出的值组 
其中,左边部分的”格式标记字符串“可以完全和c中的一致。右边的’值组’如果有两个及以上的值则需要用小括号括起来,中间用短号隔开。重点来看左边的部分。左边部分的最简单形式为: 

%cdoe 
其中的code有多种,不过由于在python中,所有东西都可以转换成string类型,因此,如果没有什么特殊需求完全可以全部使用’%s‘来标记。比如: 

‘%s %s %s’ % (1, 2.3, [‘one’, ‘two’, ‘three’]) 
它的输出为’1 2.3 [‘one’, ‘two’, ‘three’]’,就是按照%左边的标记输出的。虽然第一个和第二值不是string类型,一样没有问题。在这个过程中,当电脑发现第一个值不是%s 时,会先调用整型数的函数,把第一个值也就是1转成string类型,然后再调用str()函数来输出。前面说过还有一个repr()函数,如果要用这个 函数,可以用%r来标记。除了%s外,还有很多类似的code: 

整型数:%d 
无符号整型数:%u 
八进制:%o 
十六进制:%x   %X 
浮点数:%f 
科学记数法: %e   %E 
根据数值的不同自动选择%e或%f: %g 
根据数值的不同自动选择%E或%f: %G 
就跟前面说用进行转义一样,这里用%作为格式标记的标识,也有一个%本身应该如何输出的问题。如果要在”格式标记字符串“中输出%本身,可以用%%来表示。 
上面说的只是格式标记的最简间的形式,来看复杂一点的: 

‘%6.2f’ % 1.235 
在这种形式中,在f的前面出现了一个类似小数的6.2它表示的意思是,总共输出的长度为6个字符,其中小数2位。还有更复杂的: 

‘%06.2f’ % 1.235 
在6的前面多了一个0,表示如果输出的位数不足6位就用0补足6位。这一行的输出为‘001.24’,可以看到小数也占用一位。类似于这里0这样的标记还有-、+。其中,-表示左对齐,+表示在正数前面也标上+号,默认是不加的。最后来看最复杂的形式: 

‘%(name)s:%(score)06.1f’ %{‘score’:9.5, ‘name’:’newsim’} 
这种形式只用在要输出的内容为dictionary(一种python的数据类型)时,小括号中的(name)和(score)对应于后面的键值 对中的键。前面的例子可以看到,”格式标记字符串“中标记的顺序和”要输出的值组”中的值是一一对应的,有顺序,一对一,二对二。而在这种形式中,则不 是,每个格式标记对应哪个值由小括号中的键来指定。这行代码的输出为:’newsim:0009.5’。 

有时候在%6.2f这种形式中,6和2也不能事先指定,会在程序运行过程中再产生,那怎么输入呢,当然不能用%%d.%df或%d.%d%f。可 以用%*.*f的形式,当然在后面的”要输出的值组“中包含那两个*的值。比如:’%*.*f’ % (6, 2, 2.345)就相当于’%6.2f’ % 2.345。 

这是这本书到此为止看起来最复杂的内容。不过如果记不住,或不想那么耐烦,完全可以全部用%s代替,或者用多个”+”来构造类似的输出字符串。这里的%真有点除法的味道,怪不得设计者会选择用%这个除号。 


象C 中的sprintf函数一样,可以用“%”来格式化字符串。 

Table 3.1. 字符串格式化代码 

格式 描述 
%% 百分号标记 
%c 字符及其ASCII码 
%s 字符串 
%d 有符号整数(十进制) 
%u 无符号整数(十进制) 
%o 无符号整数(八进制) 
%x 无符号整数(十六进制) 
%X 无符号整数(十六进制大写字符) 
%e 浮点数字(科学计数法) 
%E 浮点数字(科学计数法,用E代替e) 
%f 浮点数字(用小数点符号) 
%g 浮点数字(根据值的大小采用%e或%f) 
%G 浮点数字(类似于%g) 
%p 指针(用十六进制打印值的内存地址) 
%n 存储输出字符的数量放进参数列表的下一个变量中

Categories
不学无术 木有技术

AttributeError: 'module' object has no attribute 'AF_INET'

主要症状如下:

Traceback (most recent call last):
  File "C:Documents and SettingsaDesktopsocket.py", line 1, in <module>
    import socket
  File "C:Documents and SettingsaDesktopsocket.py", line 6, in <module>
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
AttributeError: 'module' object has no attribute 'AF_INET'

原因:
自己的文件名变成socket.py了,import时的导入就变成了导入自己这个文件,然后就….呵呵了
解决方法:
改个文件名吧~
 
参考文献:http://stackoverflow.com/questions/13422356/socket-isnt-working-in-python

Categories
木有技术

两种APACHE域名跳转法简单完成重定向

本文转载自:http://www.sodone.com/apache-domain-name-redirect/

当我们变更网站域名,或者申请多个域名指向一个网站的时候,这个时候我们就会用到域名跳转(或者叫域名重定向redirect、域名转向)。下面用最简单的文字讲两种apache的域名跳转方法。

假设我们想把www.old.com转向到www.sodone.com。

1.用php域名跳转
在apache里给不同的域名建立不同的虚拟主机。分别对应 www.old.com 与www.sodone.com。

然后在www.old.com的目录里面建立一个index.php文件,文件内容如下:
<?php
header(‘HTTP/1.1 301 Moved Permanently’);
header(‘Location: http://www.sodone.com/’);
?>

重新启动apache服务器,用户访问www.old.com时就自动跳转为www.sodone.com。

2.用.htaccess做域名跳转
apache默认是开启.htaccess的。如果实际用的过程中下边的相关配置不起作用,可能是.htaccess关闭了,可按下边的方法打开:
编码apache的配置文件httpd.conf,把相应的内容修改为:
Options FollowSymLinks
AllowOverride All
LoadModule rewrite_module modules/mod_rewrite.so #也就是把这一行前的注释去掉
然后重启动apche服务器。

编辑apahce中web根目录下.htaccess文件(如题没有此文件,则直接新建立一个既可)。

RewriteEngine On
RewriteCond %{HTTP_HOST} ^old.com [NC]
RewriteRule ^(.*) http://www.sodone.com/ [R=301,L]

访问www.old.com同样会转向到www.sodone.com。

注:从搜索引擎优化(seo)的角度来看,建议大家尽量用301重定向。上面两种方法都为301跳转。

作者: sodone
版权属于: SoDone酥蛋
转载请用链接形式注明作者与版权信息。
Categories
不学无术

WR703N Gargoyle石像鬼固件的USB打印问题

刷了这个固件发现USB打印一直连接不上去,后来发现好像是打印端口的问题~

设备名称:Gargoyle
石像鬼(Gargoyle)版本:1.6.1
型号:TP-LINK TL-WR703N v1
设备配置:网关

参考了这篇文章:http://wiki.openwrt.org/doc/howto/p910nd.server
里面提到了这么一句

On older versions the device /dev/usb/usblp0 is created. More recent versions create the normal /dev/lp0 device, even for usb printers. (Attitude Adjustment 12.09 actually creates /dev/usb/lp0

结果查了一下果然是这个原因,p910nd默认的设备位置是/dev/lp0来着,我去/dev下看了看发现其实是/dev/usb/lp0,所以把配置文件改改就好啦~
配置文件是:/etc/config/p910nd
把里面对应的改掉
另外修改好后重启下服务哦

/etc/init.d/p910nd stop
/etc/init.d/p910nd start

 
 

Categories
生活琐碎

设置zju邮箱账号|zju邮箱别名

手机下设置zju邮箱账号
1)    客户端使用pop3协议服务器地址及端口号:
接收邮件服务器:pop3.zju.edu.cn 端口:110  (使用SSL端口:995)
发送邮件服务器:smtp.zju.edu.cn 端口:25   (使用SSL端口:994)
2)    客户端使用IMAP协议服务器地址及端口号:
接收邮件服务器:imap.zju.edu.cn 端口:143  (使用SSL端口:993)
发送邮件服务器:smtp.zju.edu.cn 端口:25   (使用SSL端口:994)
(下面介绍pop和imap 协议下不使用ssl的操作方法)
 
邮箱别名去myvpn.zju.edu.cn

Categories
木有技术

好奇怪啊,为什么我按SHIFT+检查更新,不能自由选择固件

按Ctrl+Shift+检查更新
原因可能是你最近检查过更新了
按下Ctrl+检查更新 能强制再检查一遍
而加上Shift就能自由选择固件了

Categories
不学无术

什么是 静态/动态 黑盒/白盒 测试

从《软件测试》书中找到的内容,写的比较精炼。

静态黑盒测试是指检查产品说明书,并在软件编写之前找出问题。
动态黑盒测试是指在不了解软件如何工作的前提下进行测试。
静态白盒测试是指通过正式审查和检验检查代码的细节。
动态白盒测试是指在看到软件的工作方式时,根据获得的信息对软件进行测试。

 
意思就是,
静态、动态:不运行、运行程序。
黑盒、白盒:不深入、深入到代码。
 
另外需要注意,动态白盒测试不等于软件调试,前者用来找到缺陷,后者用来解决缺陷。