加载中…
个人资料
xialulee
xialulee
  • 博客等级:
  • 博客积分:0
  • 博客访问:788,420
  • 关注人气:305
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
评论
加载中…
留言
加载中…
友情链接
访客
加载中…
好友
加载中…
博文
(2017-11-04 22:04)
标签:

usb

pyusb

libusb

openusb

python

分类: 计算机与 Internet
    现在几乎我听说过的开源项目全部都在Github上安家了,有海量的代码资源可供阅读。在开源时代,不读点代码,是不会有什么长进的。实际上,自己写代码解决问题时发明了某种方法,之后在阅读他人代码时发现他们也使用了相同的方法,顿时有种英雄所见略同的快乐。这次我们就简单了解一下PyUSB里面有什么。
    首先当然是打开IPython。打开之后才想起来事先应该用lsusb命令查看一下系统中有哪些USB设备。不过也没关系,IPython支持使用感叹号“!”直接调用系统命令:


为了方便做实验,我们从lsusb输出的结果中找一个比较容易操作的设备,比如一个USB键盘:
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
标签:

python

分类: 计算机与 Internet
    在Ubuntu16.04上安装好了Python3.6和相应的pip,用
pip3 install ipython
安装了IPython之后,却发现不知道该怎么启动。默认的ipython命令启动的是Python2.7的IPython。我虽然不知道官方的办法,Stackoverflow上有人提问却也没有得到满意的答复。但是实际上,自己动手其实很好解决。
    首先确定ipython命令的位置:


这个命令在/usr/local/bin里面,现在进入这个目录
cd /usr/local/bin
查看一下ipython命令是什么东西:
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
标签:

python

reikna

pycuda

cuda

分类: 计算机与 Internet
    reikna提供的GPU算法的确可以解决一些实际问题,按照reikna官方的测试,在某些情况下它的FFT比cuFFT还要高效一些。这次就简单看一下和二维数组有关的一些实际中会用到的算法。
    首先是在二维数组上按行或者按列的FFT。注意不是2D FFT,而是对二维数组的各个行(或者)列向量执行的1D FFT。reikna实现的1D FFT在一维数组上执行运算早在《GPU Powered Python(三)——使用reikna计算FFT
中就已经讨论过。只需要在之前的操作中作小小的修改,即可实现针对二维数组的行或者列的FFT运算。

首先当然是import
from reikna.fft import FFT
import reikna.cluda as cluda
import numpy as np

第二步,创建一个thread对象,用来管理CUDA运行时:
api = cluda.cuda_api()
thr = api.Thread.create()

第三步,确定FFT运算是施加到什么尺寸的二维数组,比如,如果要将FFT施加到一个4x4的二维数组上,就先生成一个4x4的二维数组:
X = thr.to_device(np.zeros((4,
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
标签:

python

com

comtypes

excel

safearray

分类: 计算机与 Internet
    自从发现comtypes可以直接对接口进行定义以后,相比简单易用的win32com,我们更倾向于可以进行更多底层数据结构操作的comtypes。
    为了给WaveSyn添加与Excel进行数据交换的功能,采用了COM方式,在python中通过comtypes与Excel进行通信。一开始的测试非常高效,尤其是给Excel传送一维数组。但是后来测试给Excel传送矩阵,却发现无法得到正确的结果,Excel接收的矩阵总是不完整。这个问题也有老外遇到过,见StackOverflow上的帖子:Setting an Excel Range with an Array using Python and comtypes?
    我一开始是放弃的,打算重新用回win32com。但总是觉得心有不甘。comtypes不是用纯Python实现的吗?那么在理论上我们就应该可以通过阅读源码发现其中的玄机,并进行修正。
    经过不懈的努力,终于发现,通过comtypes给Excel的Range赋值时,最终会调用safearray.py中_make_safearray_type函数里定义的类“_”的create这个classmeth
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
标签:

python

iprogressdialog

comtypes

分类: 计算机与 Internet
    越来越多的Windows API以COM接口的方式提供。好像很多年前我就在《COM原理与应用》上看到说:以C函数提供的Win32 API是平面化的,不方便组织和管理;而以COM接口的方式提供API,则能够提供一种立体化的API层次结构。不知道是不是这本书上说的,记不清了。
    如果说以后越来越多的Windows API会以接口的形式提供,对于不能操纵接口的语言来说,无疑是一个坏消息。从《让Joystick为我所用(三点一)——纯Python的音量控制代码》开始,我们就掌握了借助comtypes利用纯Python语言描述接口的方法。所以现在在Python中描述和操作接口对于我们来说已经是很简单的事情了。今天我们就试着实现了IProgressDialog,描述接口的关键代码如下:

CLSID_ProgressDialog GUID('{F8383852-FCD3-11d1-A6B9-006097DF5BD4}')

class IProgressDialog(IUnknown):
    _iid_   GUID(
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
标签:

word

兼容性设置

word97

分节符

分类: 计算机与 Internet
    今天同事发来一个Word文档,大概是什么期刊的模板,出现的问题是即使特意使用“连续分节符”,依然会导致分页。分节符有分页和不分页的,使用连续分节符是不应该导致分页的。我看了半天,也找不出问题的所在。于是在网上搜了一下,还真找到了解决方法,见《WORD插入脚注后连续分节符变成了 ...》
    在Word2010中打开原始文档,尽管使用了连续分节符,后面的内容仍然被顶到了下一页:

解决办法:点击“文件”->“选项”
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
标签:

python

com

comtypes

分类: 计算机与 Internet
    之前我们在《让Python-Tkinter窗口的任务栏图标显示进度(For Win7)(续)》中,在comtypes的帮助下,使用纯Python语言描述了ITaskbarList4接口。ITaskbarList4实际上继承了ITaskbarList3,3又继承了2,2继承了ITaskbarList。但是我当时实现的时候并没有使用继承机制而是把所有自己的和继承来的方法都写在了ITaskbarList4的Python的定义中。这样没有什么问题,因为接口在继承的时候,如果没有使用多继承,那么不管继承几次,虚函数表只有一张,虚函数表中的函数按继承的先后顺序排列(多继承的时候情况要复杂一些,见《C++中使用多继承时对象指针类型转换的问题》)。这一点从shobjidl.h中用C语言定义的接口的描述方式就可以验证。shobjidl.h不仅给出了C++的接口描述,也给出了C的接口描述。在C的描述中,首先用结构体描述了虚函数表,然后在接口结构体的第一个元素定义了一个指向虚函数表结构体的指针。
    虽然把从ITaskbarList到ITaskbarList4所有四个接口的函数全部写在ITaskbarList
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
(2015-10-30 19:10)
标签:

python

win32

api

分类: 计算机与 Internet
    有时候需要一个控件的句柄时,我们就用spy++或者AutoIt自带的WindowInfo去探测。探测完毕之后,查看十六进制句柄。比如之前的《读取其它进程进度条的进度并显示在任务栏图标上》,脚本需要得到进度条的句柄,才能在任务栏上显示该进度条的进度。总觉得这样用起来相当不方便。于是这次我们就提供了一个辅助工具:windowselector.py。
    windowselector.py是一个Python脚本,用Tk实现了界面。启动脚本之后,脚本内部就会定时用GetCursorPos读取当前鼠标指针的坐标,然后用WindowFromPoint获取坐标对应的窗口/控件的句柄。脚本的界面是一个窗口,只包含一个按钮。这个窗口会自动把自己的左上角与当前鼠标指针所在的窗口/控件的左上角对齐。确定了窗口/控件之后,点击脚本的窗口上的select按钮,脚本的执行就结束了,同时在stdout上输出选定的窗口/控件的句柄。像下面这样:
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
标签:

python

idle

tk

语法高亮

分类: 计算机与 Internet
    Tk虽然是很多语言自带的GUI库,但是和Qt这样大名鼎鼎的GUI库比起来,在技术网站和论坛上一直不温不火。很多帖子也认为Qt等可以实现非常复杂和酷炫的效果,Tk相比之下就不是那么高大上了。可是无论团队里的小弟如何抱怨(为什么不使用那些高大上的框架啊),为什么我在大学的时候负责的项目一直使用Tk呢?虽然不愿意承认,实际上Wx,Qt等等我都不会(小弟们也不会)。突然整一个我不会的框架进来你叫我如何领导队伍按时完成订单?另外,Tk简单,小巧,方便,Python自带,嵌入matplotlib也可以实现复杂图像和曲线的显示,基本上满足目前做过的项目的需求。此外,可以嵌入其它wigets的text和基于对象的方式绘图的canvas可以用来实现非常高级的效果。选择Tk还有一个小弟们都不知道的重要原因:我买的第一本Python实体影印书是PP3E,里面GUI的部分将的就是Tk。如果当时买的是别的书现在也许用的就是别的GUI库了。
    idlelib顾名思义,是IDLE的lib。IDLE是Python中用Tk实现的IDE(虽然很简陋,姑且这么叫吧,毕竟包含了一个带有AutoComplete的Syntax Highlight的交互式界面和编辑器)。我以前根本就没有在意过它,直到WaveSyn中需要我自
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
标签:

python

com

win32api

分类: 计算机与 Internet
    从Win7开始,任务栏图标可以用来显示进度了。但是仍然有很多需要显示进度的程序并没有将这一功能用起来,其中甚至包括Windows自身的蓝牙传输。我想写一个程序,它拥有一个任务栏图标,它可以读取其它程序窗口中的进度条,并将进度显示在自己的任务栏图标上。要实现一个这样的程序,有三个问题需要解决:
(1) 如何获取想要监视的进度条的句柄;
(2) 如何获取进度条的进度;
(3) 如何在任务栏图标上显示进度。
    对于第一个问题,我觉得自己写稍微有些麻烦,实际上可以借助现成的工具,比如Visual Studio自带的Spy++。但是Visual Studio是一个昂贵而庞大的开发环境,不是每个人都有。AutoIt自带的Window Info是一个不错的选择,而且当过管理员管理过几台电脑的人都会用两下子AutoIt吧,毕竟安装软件什么的苦活累活一般都交给AutoIt这样的自动化软件来做了。
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
  

新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

新浪公司 版权所有