这几天收拾的时候发现了Phidget,这还是上一个案子客户给的。型号是1014_2,记得是当时拿来做压力测试用的。
过太久都忘了怎么用了,所以再拾遗一下。
因为重装Ubuntu 16.04的系统,所以就从头装一遍phidget在Linux平台上的运行环境。
可参考Phidget官网,这里只是大体说一下。

Linux环境的搭建

安装libusb的开发库

1
sudo apt-get install libusb-1.0-0-dev

安装Phidget库

点击下载路径下载Phidget库。
解压后,依次执行:

1
2
3
./configure 
make
sudo make install

Read More

什么是Manager管理器

首先Manager是models 模块里面的一个类
管理器是Django 的模型进行数据库查询操作的接口
Django 应用的每个模型都拥有至少一个管理器,默认为objects

在Django Book提到的Manager有以下两个用处:

向管理器类中添加额外的方法

以最近的看的案子中代码为例:

1
2
3
4
5
6
7
8
9
10
11
12
13
class TestManager(models.Manager):
class Meta:
abstract = True

def is_existing(self, username):
try:
return self.get(username= username)
except:
return None

class UserInfo(models.Model):
email = models.EmailField(blank=False, null=False, unique=True)
objects = TestManager()

Read More

中间件是什么

我们在Django Book中看到一张图很好,在正常的请求和响应阶段,Middleware充当的角色见下图

其实说白了,中间件就是古代皇宫传话,传旨的公公(这里我们假设是宦官专政的朝代,皇帝听什么说什么都通过公公传达).

Read More

Python中有很多函数式编程的方法,本文介绍的是最常见的几个函数
注:本文基于python2.7.不同的版本可能会导致差异

Zip - 集资

标准格式zip(seq[, seq[, seq]])
举个栗子:

1
2
3
4
a = (i for i in range(3))
b = [4, 5, 6]
c = (7, 8, 9)
abc = zip(a, b, c)

abc的结果为[(0, 4, 7), (1, 5, 8), (2, 6, 9)]
所以zip函数的作用已经很明显了,它就好比abc三家集资,一家出一个.
那当c家很富,a家没那么富怎么办呢?

1
2
3
4
a = (i for i in range(2))
b = [4, 5, 6]
c = (7, 8, 9, 10)
abc = zip(a,b,c)

abc三家集资的结果为[(0, 4, 7), (1, 5, 8)],说好的一家出一个,你家没有了,那我也就不出了(你看,代码也这么现实…)

之所以举的栗子不全是list,就是想说明一个小的注意点,zip接受的都是具有迭代的属性的参数(__iter__),这个后面会讲

Read More

前前后后在苏州出差好多次了,即使不爱拍照的我也留了不少图片。人生的一个阶段吧!
EIK的这个动作我是理解成在警告我,一定要把他放到封面啊!!!

Read More

本文转自Python中关键字yield有什么作用?


例如下面这段代码:

1
2
3
4
5
def node._get_child_candidates(self, distance, min_dist, max_dist):
if self._leftchild and distance - max_dist < self._median:
yield self._leftchild
if self._rightchild and distance + max_dist >= self._median:
yield self._rightchild

下面是调用它:

1
2
3
4
5
6
7
8
result, candidates = list(), [self]
while candidates:
node = candidates.pop()
distance = node._get_dist(obj)
if distance <= max_dist and distance >= min_dist:
result.extend(node._values)
candidates.extend(node._get_child_candidates(distance, min_dist, max_dist))
return result

Read More

虽然这里不会有太多人来看,文章大多数也是自己的个人看法,鉴于自己的阅历和技术水平,难免会有纰漏。
但是每一篇原创文章自己都有花心思在上面,所以我会在每篇原创的文章最后添加<<<<<原创 装载请注明出处>>>>>的信息(虽然到现在也没发现被别人转载过什么T_T)

鉴于每次POST文章都要手动添加那一行,这个操作感觉有点反人类,所以决定添加自动在文章底部添加版权信息的功能。
这里要感谢培豪的文章 - Hexo - 文章版权追加,里面为我提供了漂亮的css模板和处理的方法。
但是可能是因为使用的主题有差(我用的是Jacman-master主题),所以还要做部分的修改。

Read More

前面有学习了SocketServer模块,之前说过SocketServer算是最基本的python服务器框架,那本文讲的BaseHTTPServer模块就是基于SocketServer,而SimpleHTTPServer模块则是基于BaseHTTPServer模块,所以他们的继承关系就很明了了.本文还是会以一个小栗子开始,结合类继承图和程式执行过程图来学习原码.

注:本文基于python2.7,不同的版本可能会导致差异.

类的继承关系和执行流程

图中用不同颜色来划分不同类的方法,有方法重写的部分则是将该方法归于重写方法的类.

Read More

之前看python网络编程那一块的时候,有学习SocketServer的代码,上网有查过这个lib的用法,但是发觉不看source code的话很难真正厘清内部的运作.所以这篇博文主要从一个简单的例子从原码的角度做分析整个SocketServer类的解析.
注:本文基于python2.7,SocketServer的版本为0.4.不同的版本可能会导致差异

类的继承关系

我们首先先要厘清一下SocketServer里面基本的类的关系,我将大体的继承关系用下图表示:

可以看到,SocketServer主要包含4个基本类:BaseServer(socket server建立的基类,主要的方法:serve_forever),BaseRequestHandler(request的处理类,主要的方法:handle方法的重写),还有两个使用分叉和线程来处理异步通信的类:ForkingMixInThreadingMixIn
其他的类都是在以上四个基类的基础上延伸出来的.我们用到的最多的是针对TCP流式套接字的类:TCPServer.后面的简单例子也是基于此

另外看source code的时候有一个关于多个类同时继承的地方需要多注意,也就是关于新式类和经典类的继承区别.详情请参考Python新式类和经典类的继承区别

Read More