Jump to Navigation

Document

Programming articles and books.

python开发两项小记

最近用python做了些试验性开发,除了前面一篇的的语法缩进规范不爽之外,其他的还可以。

1、打包方式
最近使用python开发了小工具程序,然后自然想到了打包,顺便总结下了python的打包方式。

python的打包一般使用setup.py的方式,
但setup.py其实是一段python程序,根据不同的打包要求,格式也不相同。
setup.py包括以下几种:
* pip规范
*

这些规范适合系统机打包,依赖可以邮包管理来处理。
还有一种比较特殊的,类似静态打包的要求,当然也有多个选择:
* cxfreeze项目
* pyinstaller项目
* py2exe项目

这种需求比较少,虽然有选择,但也不是哪一个都能满足所有要求。
cxfreeze支持全平台,支持py3k,但不支持打包为单一文件。
pyinstaller项目,支持全平台,实验支持py3k,不完善。
py2exe支持windows平台,支持打包为单一文件。

目前看比较方便的cxfreeze,也先使用了这个作为基础工具。

以上是关于打包的一点总结。

shadowsocks安装,portable化

sss

配置文件:

创建toxcore初始节点与快速测试

使用正式的toxcore网络,目前速度上还有些慢,包括连接到网络上,以及添加好友等操作。
可能是因为toxcore的节点还不是那么多,DHT程序上也优化的不够吧。

可以使用一种简单的方式,实现一个快速的toxcore网络,
用这个小网络做测试,然后再加入到正式的toxcore网络测试。

建立一个自己的toxcore网络,
首先要启动一个初始节点,在toxcore源码树中other/bootstrap_daemon/目录中,
编译出tox-bootstrapd程序,配置该目录中的示例配置文件,启动命令,
tox-bootstrapd tox-bootstrapd.conf

注意,如果要把这个节点作为一个新的toxcore网络的初始节点,
需要把bootstrap_nodes=()一段置空,或者删掉这一段。

115syncd项目介绍

115网盘是个比较好用的网盘,提供比较大的磁盘容量。

该115syncd项目主要提供以下功能,
自动模拟登陆115网盘api。
以服务模式运行。
指定本地目录以及对应的115网盘目录。
监控指定目录,如有目录或者文件发生变化,则自动上传到115网盘对应的目录。
指定目录对可配置多个。
本地目录与网盘目录能够保持一到,在缺少目录时自动创建。
支持任务队列式并发上传控制,默认3个并发上传。
文件上传采用POST协议方式,有上传文件大小限制。
能够自动过滤掉一些指定的临时文件。
能够实现仅上传模式功能,即本地删除而网盘不删除,这样保持本地空间远小于网盘空间。
反复修改重复上传的文件,根据哈希去重,只保留最近一次上传的文件。

该实现使用PyQt5,在linux系统上安装使用都非常简便。
项目地址:https://github.com/kitech/115syncd

ToxCore 客户端基本处理流程图

每一个使用toxcore的程序,都可以算是一个toxcore客户端程序。
而这个客户端大都有一个共有的处理流程,以下提供一个简单流程图,仅供参考:

ToxCore API本次升级总结

在2015年早些时候,ToxCore完成了一次比较大的升级API升级,影响到所有的使用原API的程序。
最近又拾起来了toxcore项目,在些基础上做些项目与研究,在升级API的过程中整理了一下,公布在之儿。如有不完善不正确之处,请指正。

这次api从外面看主要是命名的规范化的提升,其中也不乏大的改动,像文件API部分,有API的增删。

Qt5的ruby语言绑定实现系列:JIT ExecuteEngine与IR Module重用优化

# JIT ExecuteEngine与IR Module重用优化

在项目的原型阶段,为了代码的简洁与直接,很多地方都使用了新实例实现相关功能。
包括JIT ExecuteEngine和IR Module两个大模块。

这种方式由于大量使用了new操作,会浪费大量的内存与CPU资源。
本次改进的目的也是针对这两方面的,以提高现阶段该项目的可用性。

本文从优化的整体架构说明,到每个分模块一一介绍,到最后简单的测试,
希望能够对本次优化做到清晰说明。

###

概要

为什么提高效率,优化内存使用,可行的方式就是资源的重用。

经过项目原型实现的分析,基本整理出来两个关系性比较强,可以重用的模块:
第一个是自动生成的IR代码的重用。
第二个是JIT执行引擎的重用。

以下所有的改进都是围绕这两个部分进行的。

###

Category:

实现Qt的go语言绑定的两种方式

# 实现Qt的go语言绑定的两种方式

Qt是一个成熟优秀的C++ GUI开发库,

###

第一种方式

自动生成完整的cgo代码的方式。

基本原理,
使用一工具扫描使用了qt的go源代码,根据调用特征,生成完整的cgo封装代码。
生成的代码放在项目的目录树中,编译整个项目即可。

这种方式比较直接,编译出来的程序使用cgo的C包直接调用qt类和方法。
这中间完全没有动态处理过程,编译出来的最终程序效率还会比较好。
一个坏处生成的代码量还是比较大的,生成的代码也比较复杂,好在一个项目中可能用到的qt类和方法数量有限,应该可行。
另一个是由于注入了cgo,需要执行C++编译过程,速度比较慢,有点与go追求的极速编译冲突了。

###

第二种方式

使用JIT在类虚拟机ruby-jit-qt后端上即时执行方式。

基本原理,
使用一工具扫描使用了qt的go源代码,根据调用特征,生成调用JIT后端的cgo封装代码。
生成的代码放在项目的目录树中,编译整个项目即可。

Category:

Qt库的ruby语言绑定的探索与实现过程笔记

# Qt库的ruby语言绑定的探索与实现过程笔记

一直一来我经常使用Qt做一些简单的linux桌面工具软件,也算是对Qt库比较熟悉了。
而真正开始搞Qt库的ruby语言的绑定,出于当时觉得ruby是个比较有意思的编程语言,并开始接触学习ruby语言。
虽然在ruby最热门的时期作为web快速开发框架面世的,实现上我认为ruby也是一种非常不错的系统脚本语言。

在不断深入的学习ruby语言的过程中,越来越希望所有的开发工作都使用ruby语言实现,
并且这不只是希望,也尽可能的使用ruby完成一些开发工作。

不过,在这时,遇到一个需要更复杂的项目,希望能为这项目开发GUI界面功能。
经过一番网上搜索,也发现其实已经有qt的ruby语言绑定相关库了,
像kde项目中的rubyqt,还有qtbindings这个gem包,这两个包也比较成熟稳定了。
在试用的过程中了解到这两个包其实是同源的,并且都只支持Qt4版本。

Category:

Qt5的ruby语言绑定实现系列: Clang AST 树遍历优化

目前要实现查找AST树中匹配方法或者函数symbol符号名字的Decl,通过遍历AST树方式实现。
但是,现在这个方式耗时很多,占用整个过程的50%时间,希望能在这个点上优化掉接近一半的时间。

以下就这个功能特点,分析整理可能的优化机制。

虽然所有是在整个AST树中,但实际不需要在整个树的根开始查找,而是从树的一个节点开始。
遍历过程,可能要加入新的新的结点。

实现上,可以看作一个森林数据结构,初始状态时,森林只有一个根节点。
执行过程中,遍历遇到另个函数声明,如果在这次调用中需要,则需要把这个节点加入到森林中,作为森林的一个新的根节点。

根据以上分析,实现执行会有回溯过程,并且回溯时的节点也变化了。
可以暂时把这种方式叫做回溯遍历方法。

考虑到这个过程,只需要关注inline的方法或者函数,可以不断进行深度遍历,
在整个遍历路径上遇符合条件的节点,回调执行相应的处理函数。
如果遍历方式没有问题的话,应该能够一次遍历完成所有的处理工作。
暂时把这种方式叫做单次扩展遍历方法。

分析完功能需求和可能的方式,接下来分析clang提供的遍历相关功能。

页面

订阅 RSS - Document


Main menu 2

by Dr. Radut