动态语言(Python...)
文章平均质量分 71
猛禽
Python爱好者。这个人很菜,除了BUG,什么都没有留下。
展开
-
Django学习笔记
既然传说中Django(据说读作“脏狗”)可以号称Python on rails,那就一定要试试的。(以下均以Windows平台为例)一、安装篇安装前的准备工作:1、安装Python。这个纯属废话,不过还是要提一下,注意版本问题,我装的是Python 2.3.5,MySQL的Python驱动中,for Python 2.3的只能支持到MySQL 4。故我将使用PostgreSQL 8.1。2、安装原创 2005-11-14 15:07:00 · 4175 阅读 · 1 评论 -
从BLOG到电子书——把wordpress备份的WXR转为epub
古人云,敝帚自珍。虽然自己写的BLOG都是些没营养的东西,但还是想收藏起来。花了点时间研究了一下epub格式,写了段转换程序,把Wordpress导出的备份文件WXR转成epub格式。本想贴代码凑数,结果发现代码还是多了点,所以还是改成下载吧。第一个是生成epub的库:epubbuilder.py(源码附后)之后是解析WXR并调用epubbuilder生成epub的主程序:wxr2epub.py(原创 2011-09-28 21:57:36 · 31099 阅读 · 0 评论 -
使用gunicorn部署web.py应用
经常看到有人问python的web应用如何部署的问题。常见的方案是用apache的mod_wsgi,或者高端一点的用uWsgi。但是个人觉得这些都太复杂了,使用维护都不方便,我一般是推荐用gunicorn,配合Apache或Nginx,可以实现简单高效的应用部署和维护。为此特地写了这么个文档来介绍,并且本文提交pull request到web.py项目的cookbook,只是Aaron Swart原创 2013-03-16 15:59:22 · 37249 阅读 · 4 评论 -
RESTful客户端库:RestClient
WebService话说我刚知道这词的时候还是十二年前…大约2001年,微软的.net刚出来的时候,这货就热了,只不过当年这货的标配通讯协议是SOAP。当年我觉得这货还是很方便的,但是在尝鲜过后,我根本没有兴趣将它用于实际的应用…它实在是太笨重了。这种笨重包括几个方面:首先SOAP本身的数据结构就很啰嗦,加上XML就更啰嗦了。其次,各种实现技术在高层逻辑上的定义各有一套,实际上并不那么通用。最主要原创 2013-06-01 21:32:20 · 32223 阅读 · 3 评论 -
把从Google Reader备份的BLOG做成电子书
一个将用 GReader-Archive 生成的 Google Reader 备份转成 epub 电子书的工具。原创 2013-07-11 16:53:35 · 2996 阅读 · 1 评论 -
bottle的几个小坑
距离我在《web.py应用工具库:webpyext 》里说要换用bottle,已经过去快两个月了……其实在那之前我已经开始着手在换了。目前那个用于 Backbone.js 介绍的例子程序已经完成更换,其它一些原来基于web.py的应用也在逐步重写中。期间各种小坑不断,还好至今还没有碰到什么大坑……不过目测应该也不会有大坑。unicode作为非英文应用的开发者,unicode是一个绕不过去的坑。 w原创 2013-07-01 17:51:53 · 5180 阅读 · 3 评论 -
傅里叶级数拟合实验
这是11月研究matplotlib的成果,顺便复习了一下高数。下面是程序的运行结果,蓝色为随机生成的源数据,绿色为用傅里叶级数(19项)拟合的结果,效果还是蛮好的。中间上方的小图为误差分布,接近标准正态分布。标题程序中比较复杂的部分都是数学计算有关的,一个是傅里叶级数展开的方程组生成——通过源数据作最小二乘拟合;另一个是用高斯消元法解这个方程组,得到傅里叶级数的系数。其它就是调...原创 2007-01-09 10:40:00 · 15182 阅读 · 6 评论 -
gcrawler:一个基于gevent的简单爬虫框架
模仿Scrapy的工作方式用gevent实现了一个简单的爬虫小框架:gcrawler原创 2011-03-06 16:54:00 · 16889 阅读 · 12 评论 -
重写了一下gcrawler
去年做过一个《gcrawler:一个基于gevent的简单爬虫框架》,当时因为是模仿Scrapy的,所以整个实现其实很不gevent,太难看,并且实际上效率也不高。这次因为要改写一个以前用Scrapy写的爬虫,于是就拿这个自己做的东西来用——去年其实也拿这个东西做过,只是有一段时间没用了。改写了一部分以后发现原来的代码有很多改进的方面,本来想修改修改就算了,不过改了一部分以后发现还是把整个结构重新原创 2012-11-07 23:33:35 · 3183 阅读 · 0 评论 -
sqlalchemy的关联子查询
SQLAlchemy也算是用过好几年了,不过一直都用着其中相对简单的一小部分,最近写个程序碰到个问题,需要作一个关联子查询,试了很久才解决。原创 2015-09-25 17:13:09 · 10660 阅读 · 2 评论 -
Bottle的插件与view装饰器冲突问题
其实这个问题由来已久,早在2012年就有人在bottle那报告过,但是因为python的inspec库本身的问题,它的wraps函数不能保留被包装函数的参数信息,所以一直不能彻底解决。问题大致是这样:@app.get("/")@view("index")def get_index(): return dict(a="a")上面是一个典型的使用view decorator的请求响应函数。原创 2015-10-22 22:32:16 · 3687 阅读 · 1 评论 -
几个bottle插件
上篇《Bottle的插件与view装饰器冲突问题》里说到的问题就是我在写这几个插件时碰到的问题。为便于使用bottle写了一组插件。最初自己用的时候是把所有功能都写在一个插件里,感觉有点笨重,不适合灵活组合,所以分拆改写成现在的样子。包含beaker.BeakerPluginparams.ParamsPluginlogin.LoginPluginbeaker.BeakerPluginBeaker原创 2015-11-22 20:59:46 · 3771 阅读 · 1 评论 -
基于fabric和hg的自动化部署
自动化部署fabric是个很好用的自动化部署工具,虽然功能比起puppet,saltstack之类要弱一些,但胜在用python,而且免安装服务端。原创 2015-12-25 00:42:53 · 4091 阅读 · 0 评论 -
阿里大鱼短信接口(Python3版)
最近因为需要用到短信接口,选型的的结果是用阿里大鱼的短信服务,然而淘宝开放平台(TOP)的SDK已经很多年没有更新了,不支持python3,自己动手改了半天,还是不太正常,索性不用它,自己写一个算了。我才不会跟你们说我嫌弃它的代码,所谓大公司也就这样了。用法用法与TOP提供的SDK差不多,不过实现代码大幅简化,因为只用了短信功能,另外我这个只支持python3。原创 2016-03-16 20:21:52 · 8163 阅读 · 6 评论 -
快速文件hash
最近打算把家里服务器上的文件理一下,想把重复的文件找出来,虽然我已经用了ZFS的dedup,实际占用空间并不会重复,但是还是觉得有必要理一下……写个程序扫描一遍并不复杂,但是要判断文件是不是重复就比较麻烦,可靠的方法当然是做全文件HASH,但是对于T级的硬盘来说,这样效率太低了,所以写了一段小代码来做一个快速的HASH。def get_filemd5(fullpath, filename):原创 2016-10-31 23:56:21 · 5187 阅读 · 0 评论 -
解决多进程中APScheduler重复运行的问题
问题在一个python web应用中需要定时执行一些任务,所以用了APScheduler这个库。又因为是用flask这个web框架,所以用了flask-apscheduler这个插件(本质上与直接用APScheduler一样,这里不作区分)。在开发中直接测试运行是没有问题的,但是用gunicorn部署以后发生了重复运行的问题:每个任务在时间到的时刻会同时执行好几遍。注意了一下重复的数量,恰恰是gun原创 2017-04-04 22:34:30 · 18986 阅读 · 12 评论 -
一个Redis Cache实现
这次的目标是需要实现一个比较通用的cache,支持各种数据类型,有超时更新机制,超时更新需要有锁原创 2017-06-29 22:09:45 · 5135 阅读 · 0 评论 -
一个Redis消息队列实现
对前文所介绍的Redis Cache作了一点简单的扩展,增加了消息队列功能。原创 2017-07-14 23:39:10 · 2073 阅读 · 0 评论 -
继续小测python web server
上次的测试见《小测几种python web server的性能》。前两天参加了PyCon2012上海站。虽然今年的PyCon被各种吐槽,但还是有点收获的。比如ShellXu的元编程,赖总的state/message,沈大侠谈的pypy等。回来就想测一下用pypy跑web应用看看性能如何。顺便也对上次的测试范围作了点扩大化。PyCon上谈到的Pyramid我虽然没用过,但是前身Pylons和Turb原创 2012-10-23 12:39:43 · 6001 阅读 · 0 评论 -
在FreeBSD的virtualenv环境下安装pysqlite和gevent
virtualenv是个好东西,可以为各个python应用建立各自独立的虚拟环境,对于开发和部署都是很有用的。特别是增强版的virtualenvwrapper,好用到爆。但是它也会带来很妖蛾子的问题。比如之前我就曾经碰到过这样的问题:题外话:Mac OS X 10.6 Snow Leopard 下 virtualenv 发生 install_name_tool 错误在Mac OS X 10.6 S原创 2012-09-02 16:57:34 · 4001 阅读 · 0 评论 -
关注LAMP
看了第11期的《程序员》才知道还有LAMP这种说法。而按照维基百科的说法(中国大陆地区请穿墙访问),LAMP一词最早诞生于1998年。LAMP是一个缩写,四个字母分别代表:Linux, Apache,MySQL和PHP/Perl/Python。当然,现在的LAMP已经不仅仅限于此了,它代表了一种基于开源软件的包括操作系统、WEB服务器、后台数据库和脚本语言四个方面的完整解决方案。比如操原创 2005-11-22 10:44:00 · 3776 阅读 · 1 评论 -
试玩matplotlib碰到的问题
不知道是不是因为年纪大了的缘故,最近研究新的技术总是碰壁。上周尝试TurboGears,结果那个20分钟实现WIKI的教程我跑了两天也没有跑通,最后才发现是因为我装的版本跟教程所用的版本不一致。晕S。今天令狐推荐了一个好东东:matplotlib结果装好后写了一个最简单的试验程序:from pylab import *show()就运行失败,报错:AttributeErro原创 2006-11-14 14:30:00 · 6133 阅读 · 2 评论 -
一个批量更改文件名的Python脚本
本程序要解决的需求是这样的:比如有一堆用随机字符串命名的文件,需要改成形如:a001.xxx, a002.xxx ...或是一堆形如:a1.xxx, a2.xxx .... a100.xxx,需要改成:a001.xxx, a002.xxx ... a100.xxx又或者是一堆长短不一的文件名,需要在前/后面加一个前后缀什么的……程序的用法如下:renpat.py [-R] [-T] d原创 2006-12-27 11:34:00 · 5346 阅读 · 1 评论 -
Genshi笔记
正式决定从KID改到Genshi。虽然Jinja的性能的确好,但是Script风格的Web template毕竟还是不如XML风格的好看和规范。试了一下发现,Genshi与KID的差别也不是很大,迁移过来还是很方便的。Genshi是一个日文词汇“原糸(げんし)”——咋又是日本人整出来的捏?啥时国人能整出点像样的东东来,别只会弄些烧香的熊猫之类,一点建设性都木有——它的设计目标就是修改KID以提原创 2007-02-25 17:33:00 · 4047 阅读 · 1 评论 -
在BCB中使用Lua
(2007-03-06)由于想要在一个原生应用里提供脚本功能,而Python的发布不能不说是一件麻烦事。因为所需要的脚本功能很简单,所以决定试试传说中的Lua。第一步,下载源码。虽然Lua有提供二进制版本下载,但是因为我是用Turbo C++ Explorer(即C++Builder的免费版),所以我决定还是自己编译一下源码。下载位置当然是Lua的官方网站:http://www.lua.o原创 2007-04-20 11:43:00 · 5305 阅读 · 3 评论 -
TurboGears的Widget
首先B4一下令狐,想当年偶用Django的时候,他向偶推荐TurboGears,结果现在他自己要做Web开发了,却用起了Django。嘿嘿。8 过偶还是喜欢TG,因为它提供了更多的选择——我这两天又去看了一下Django的文档,并没有看到有关可以自已选择改用SQLAlchemy(ORM) 或是Genshi(WebTemplate)的说明,看来传说中的“支持”并非官方选项,而是为专家准备的。不过原创 2007-07-20 14:05:00 · 4618 阅读 · 1 评论 -
Genshi笔记(续)
前文见《Genshi笔记》。这一年多来做了几个小的WEB应用,都是用的Genshi,总体感觉还不错,不过真要系统地写点什么,貌似也写不出来,只能做点笔记了。一、输出XHTML:Genshi默认是输出HTML的,作XHTML校验时不能通过,但Genshi是支持输出为XHTML的。在TurboGears里的设置是在 app.cfg 配置文件里:tg.defaultview = "genshi"gens原创 2008-11-03 16:20:00 · 4743 阅读 · 1 评论 -
SD2C之三种Python的Web框架
在SD2C上的另外一些收获来自于Web应用方面。一个是董洵的GAE讲座,一个是钱宏武关于大型WEB应用的讲座。钱宏武有一个观点谈到关于技术选型一定要选择那种久经考验资源丰富的解决方案。比如对于WEB应用来说,PHP就是这样一种靠谱的方案。这个我很赞同,像ASP就是在过去一些年里未能通过考验而可耻滴被淘汰的技术——傍上MS又如何,现实是残酷的,连MS自己也放弃了ASP。一个朋友有一个ASP做原创 2009-01-13 10:09:00 · 5371 阅读 · 2 评论 -
xpath在XHTML解析中的应用
前一阵参加了一个Python的活动,其间老董的讲座是讨论网页爬虫技术的。其中提到了一下关于页面解析的问题,他推荐了三种技术。其中有用到libxml2里的xpath来处理,我就跟令狐谈到我曾经也用过这个东东。令狐建议我把这个东东说一下,于是我就写了这一篇。惭愧的是我最初在python里用xpath时用的不是libxml2,而是一个不记得是什么的XML库。后来因为那个库不知道为什么找不到了或者原创 2009-08-27 15:37:00 · 5707 阅读 · 2 评论 -
xpath在HTML解析中的应用(加强版)
经过一番研究以后才发现原来libxml2其实已经内置了对HTML的解析——即使是不很规范的HTML。所以上篇《xpath在XHTML解析中的应用》完全是我学艺不精的产物。囧不过好处是顺便学习到了j7a7c7k7兄推荐的tidy(用的是令狐提供的µTidylib),这也是个好东东。现在来看如何直接使用lxml(即前文说过的libxml2的一个python binding)处理那个原创 2009-09-03 17:52:00 · 24360 阅读 · 3 评论 -
用unittest测试web2py应用中的非页面部分
虽然web2py在文档中建议采用doctest对controller进行测试的方式,但是一则我对doctest不熟,二则只对controller层进行测试覆盖虽然很全面,但是测试粒度太大,对我来说测得不够细。我的设计习惯是controller层只进行简单的调用转换,实际的业务逻辑放在module层(注意:不是model层)处理,虽然在model里进行设置后借助于GenericVie原创 2009-10-09 10:21:00 · 2951 阅读 · 1 评论 -
Twisted开发Web应用笔记
(最近忙,发点旧文凑数-_-|||,这是三月份试用Twisted时记的一点笔记) Twisted是一个功能极为强大的异步网络应用开发库——当然是Python的。印象中大概也就只有ACE有这么强悍,但Twisted在易用性方面要好很多——这其中当然少不了Python的功劳(ACE是用C++的)。 但Python也有其缺点,其中之一就是因为GIL的存在使得用Python写多线程应用的意原创 2010-05-18 09:47:00 · 10462 阅读 · 1 评论 -
带OAuth的twip安装手记
主要的安装过程就不多废话了,看上面那篇链接就好,下面主要说一些注意事项。原创 2010-09-03 16:35:00 · 5919 阅读 · 0 评论 -
给web.py加点仿TG的功能
以前用Turbogears 1.x的时候觉得它有一些功能真是很方便,比如expose decorator。这两天就给web.py写了一个。另外,现在RESTful的API都喜欢提供多种格式的结果返回,于是顺便也给自己写的这个东东增加了这样的功能。原创 2010-12-22 17:39:00 · 3763 阅读 · 0 评论 -
python的logging库
虽然limodou老大早就写过,不过我觉得他那个用法还是不够方便,就看了一下帮助文档弄了个简单的。原创 2011-02-16 13:09:00 · 4590 阅读 · 1 评论 -
用gcrawler进行多级页面并发下载的例子
基本的思路就是scheduler生成器在生成完所有urls以后继续等待下一步的解析结果,然后继续将解析结果生成返回。在worker方法里则增加一个解析方法调用,然后把返回的结果能过类成员传递给scheduler。这样包括下一级页面在内的所有链接都可以通过并发的方式下载了。原创 2011-04-07 18:15:00 · 4896 阅读 · 1 评论 -
PyCon 2011 China记
感谢在Sting等人的努力下促成了本次大会,同时也感谢各大赞助商。两天的会程内容丰富,干货很多,收获很大。会议的全部内容(视频和幻灯片)可以访问这里:http://e.gensee.com/v_3df867沈崴这次虽然没谈什么具体技术,只是泛泛地谈了Python的过去现状和未来,不过鉴于每次见到他,他都会提到PyPy,所以我也测试了一下,在计算密集型的应用中,PyPy的性能比标准Python要快将原创 2011-12-12 15:32:50 · 2816 阅读 · 0 评论 -
搭建python数据分析平台
基本结构其实没什么高深的东西,无非是常用的那一套:pandas, numpy, matplotlib…但是为了更方便使用,加持了 jupyter notebook(即以前的ipython notebook)……又为了更方便使用,前端加了nginx或apache反代……双为了更安全,加持了Let’s Encrypt的HTTPS原创 2017-09-19 23:17:57 · 5021 阅读 · 0 评论