Jump to Navigation

WEB

WEB/PHP开发

python开发两项小记

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

cgo封装C库总结

简介

cgo是go语言提供的一种与C语言相互调用的方式。

cgo能够让开发者直接在.go源代码文件中嵌入C代码。

在嵌入的C代码比较长的时候,还允许在分离.c文件中编写C代码。

cgo的基本处理机制是,根据特定格式的cgo指令,解析出C源代码和编译参数,

调用gcc编译并把结构合并到最终二进制程序中。

带来的问题,编译速度慢了很多。 两种模型,

cgo用法:

声明使用cgo

在.go文件中,插入这么几行,表示开启cgo功能:

/*

*/

import "C"

其实这并不是一个简单的开关,而是特定的语法序列标识,当go解析器遇到该语法序列时,

自动进入cgo模式,处理与cgo有关的功能。

注意,这个注释确实是注释,并没有写错。在这个注释段能够添加C源代码。

一般把这个块叫做“C语言嵌入注释块”。

还有一个需要注意的是在注释结尾处,要紧跟着import "C"语句,否则这块注释会被当作注释忽略了。

配置服务设计

背景

现在,一个完整的系统一般从设计上都是松耦合的,可能包含不同的子系统,并且子系统都可能是定制化开发的。像定制化开发的redis、beanstalkd这类服务,用于实现更好高可用等目标。还有可能开发的各种独立的队列worker程序。

虽然这些程序上有调度维护和管理,但其相关配置一般如果没有统一的方式,容易造成配置数据的混乱,出现多份配置的问题,配置不一致的问题,配置更新的非原子化,维护成本高等问题。

目标

配置服务用途比较多,有php层次的,有定制服务层次的,或者有完全自主开发的服务层次的。有些是一次读取,有些则需要运行时多次读取。需要对这些不同需求综合考虑,实现以下目标:

1、服务化的

2、可靠的

3、高效的

4、可扩展的

5、可维护的

6、易用的

7、一致性的

基于以上场景,根据需求,引入一种配置服务etcd模块,并在此模块为基础上,构建统一的配置服务系统,将在根本上改善有关配置数据的诸多问题。

Category:

记网站被黑客注入

最近三个月来,这个博客已经两次被注入了,

第一次被注入了NYC shell

第二次被Kai-H4xOrR改了首页

以前没有注意安全方面的事情,主目录下存放的文件比较乱,看来需要好好清理一下这个站点了。

网站被注入的原因分析与解决方法:
经过检查,发现表面上原因是由于开启了PHP内容格式。
但实际上,如果没有哪个模块有bug的话,也不会被修改了内容。
所以,虽然现在已经禁用了PHP内容格式,但还不知道具体是哪个模块导致了注入。
另一方面,升级了一下drupal主模块和所有有更新的第三方模块。

PHP中的函数式编程特性分析

一、引言
在写此文时,想起之前看过的一句话,如果要学习一门新的语言,那么就学习一门能够改变你的思维方式的语言。
本着这句对我触动比较大的一句话,一直在关注着LISP/Scheme这类直接产生函数式编程方式的语言。
在这中间看过一些相关的资料,试着编写过一些代码,却一直停留在学习试验阶段,很难写出像样的可用程序来。

在最近几年中,又是一个计算机界推出新语言高潮。比较新的有Closure,Go等。
并且一些比较老的语言像C++,Python,Perl,发展变化的步伐也变大了。
在C++11中,也添加了匿名函数的支持。nodejs的javascript语言,更是标榜着“披着C语言外衣的LISP”。
从这些变化除了让程序更高效,功能更丰富全面外,也提供了大量使用函数式思维解决程序复杂度不断上升的问题的特性。

配置系统进化

系统就像生物进化,从原始粗糙进化的强大灵巧。

一、从配置的起源说起

二、配置的最初阶段

三、配置的变异阶段

四、配置的变异后优化

五、配置的归类隐藏

六、配置去哪儿

平台化建设步伐

hehhe

Category:

快速php json扩展jsond

jsond是最近发现的一个解码速度比php自带的json扩展速度快的扩展。
对于比较长的json串解码其优势特别明显。

另一个非常好的特点是功能上与php自带的扩展功能完全兼容。
不过函数名与扩展名使用是使用的前缀jsond_xxx,
这一点与php自带扩展稍微有些区别。

如果希望替代php自带的扩展,还需要对这个扩展做一点修改。
即使不改这扩展的代码,在代码中兼容使用这个扩展也非常方便。

而对于当前正在做的平台化产品,在代码层做兼容代价比较大,
需要所有项目都注意这一点,非常不方便。
目前已经通过修改,无论在扩展名和使用上都与json扩展兼容了。

jsond扩展主页:https://github.com/bukka/php-jsond

Category:

使用NGINX+PHP实现comet服务的nginx配置

正常情况下,nginx为了最大化优化其负载能力,
大量使用缓存技术,比如缓存http响应内容直到缓冲区满再输出,可以最大化提高网络吞吐量。
在nginx连接fastcgi时,也使用相同的缓存技术。
但是,对于comet来说,缓存只能让comet的传输信息延迟更大,甚至可能收不信息。

在现在的nginx版本中,提供了一些参数,可以优化这种应用场景。

一般comet的实现,需要尽量关闭不需要的所有缓存,在无法关闭的时候减小缓冲区大小。
还需要尽量能保持连接跟踪,以便能在有信息时及时响应。

这里说明的是使用php fastcgi实现简单的comet服务端的情况。
具体在nginx中,配置需要注意这些参数,
fastcgi_keep_conn on; # < solution
proxy_buffering off;
gzip off;
fastcgi_buffer_size 100;
fastcgi_buffers 2 100;
fastcgi_busy_buffers_size 100;

Category:

页面

订阅 RSS - WEB


Main menu 2

by Dr. Radut