about 1 month ago - No comments
自从最近这次换工作以后,空闲时间一下子变得奢侈起来,博客最近也写得少了,一些喜欢的小东西也无暇顾及。 ——————无聊分割线————————- 一直对python很钟情,不过最近很少用,能记得比较完整的程序就是“用Python做了个Spider”,当时在一个Linode的VPS上跑了几个月。最近处理数据时候又重新用python来做,做完之后还是继续感慨它的便利性。 用python的一个最大的优点就是可以快速的迭代式开发,不断的重构,这一点在这次体会尤深。 其中有几次跳跃式的重构如下: 第一次的重构在书写了几个数据段的解析函数之后,决定定制一个规则,然后通过解析规则来处理各种字段。于是有了一个大约20条记录的标签库(后来再加一个文件解析的时候又增加了6行),然后就处理了近30种数据段,而且可以很方便的定制扩充。 第二次重构在输出报告的完成了一个数据段的汇总后,抽象出了一个Report类,完全控制报告的输出。也就有了后来用css+html的报告时候的顺理成章。 另外一次不大的重构,在于利用的简化的有限状态自动机的思想来处理各种特殊情况。当然只是思想而不是一个完整的自动机。 这一条在N年前给sudidi同学的abaqus数据文件提取工具中就大体考虑过,可以说轻车熟路。 后来用配置文件来设置参数,打包exe。从开始学习到成功,大约花了30分钟,代码10行,我爱python。 除去一些修饰性的代码和css样式表,核心代码不到500行。如果用c++的话,代码量至少要翻2倍,时间2倍不止。 Eclipse+PyDev是目前开发python程序的不二选择,除去log外,一个完善的Debug环境还是很赞的。 ——————无聊分割线2——————– 有些东西记下来权当笔记,免得以后再找。 1. 文件路径的相关处理 用 os.path 就完全解决所有问题,包括路径拼接、路径拆分、相对路径提取、文件存在性判断、文件遍历、递归遍历等等。相关函数有: os.path.join os.path.basename os.path.exists os.makedirs os.path.isdir os.path.splitext 2. 文件的遍历 目录下的文件遍历有两种,一种是os.listdir,一种是用os.walk。如果需要递归,则后者更为方便。 1: files = os.listdir(proj_dir) 2: for f in files: 3: filepath = os.path.join(proj_dir,f) 4: if os.path.isdir(filepath): continue 5: if f.find(‘—-’)>-1: 6: shutil.copy(filepath, self.REPORT_DETAIL_DIR) 使用os.walk则很容易进行遍历: 1: for root,dirs,files…
about 2 years ago - 4 comments
Get Rendered HTML Source In Python 前因: 现在的网页越来越动态和漂亮,大量地用到了Javascript,包括但是不限于Ajax,这样一来直接查看网页源代码的话的,获取到的并不是真正的渲染完成后的页面。这对采集来说,是一个很大的挑战。 在火车头当中,对于Ajax获取的数据的话,可以手动分析页面提取的Ajax的处理url,然后来提取。但是对于复杂的session验证(特别是.NET的网站来说)处理比较困难。 另外一方面,对于javascript生成的页面,火车头也没法直接提取。 思路: 首先明确的是必须获取Javascript渲染结束后的结果。这一点是明确的,具体就是方法就因人而异。 而自己解决Javascript渲染无异于痴人说梦,所以必须借助现有的浏览器核心,比如Gecko、WebKit、IE。如果用Java开发的话可以Jrec这个库,它封装了Gecko。如果其他的语言,而且是在windows平台上的话,最简单的就是用—— COM,用Internet Explorer 提供的com组件。 解决方案: 突破了这层关系,下面的就水到渠成了。 在python下,对IE封装的比较完善而且文档齐全的就是PAMIE(http://sourceforge.net/projects/pamie),它的本意是作为自动化测试工具使用的。 需要注意的是,在页面加载完之后需要留出一定时间来让页面的js代码执行渲染完成后再提取html代码。这个时间需要通过试验确定。 需要注意的是: 前面所述的利用PAMIE来获取渲染后的html内容的方法是可行的,但是缺点是效率非常低。对于最常见的ajax动态内容页面来说,最直接的方法还是构造ajax请求,来获取相应内容。这样效率很高,而且返回数据都是结构化的xml或者json数据,比html更容易处理。
about 2 years ago - 4 comments
前因: 前些天为TAR写了一个Python的接口插件tar_pytar后,对python的兴致很高。 本博上面最火的文章就是“开源的火车头采集-Wordpress2.7.1免登录发布接口”,看来大家利用采集做垃圾站的热情也很好。 著名的火车头采集器LocoySpider也出2009版了,解决了.Net 3.5不兼容问题,而且采集标签进行了语法高亮。很好很强大。但是免费版不支持任意附件下载功能… 想下载点资料,但是论坛里面一个一个点击太烦… 于是: 自己做一个吧,python做这个肯定很合适,与火车头的功能做个对比: 说明: 私人玩具,无意公开。
about 2 years ago - 2 comments
TAR(Type And Run)是我一直以来所用的快速启动软件,最喜欢的是它那个快捷键呼出的超级简洁的命令行,而且TAR支持自动提取系统中已经注册的别名,比如excel就可以打开excel,mspaint打开画图。另外TAR支持插件,最常用的就是tar_math,可以对输入命令行的计算式进行计算,给出结果。 当然tar_math也存在缺点,那就是对大整数不支持,而且函数也不够丰富。另外还想增加一个查字典的功能。于是决定给TAR做个插件,取名叫tar_pytar。tar_pytar不只是个插件,而是一个python的接口插件。有了这个插件之后,就可以直接用python给TAR增加功能,而不是重新编译。 官方网站上有插件接口文件找不到了,于是给作者-=GaLaN=-发邮件要来了接口。TAR是拿Delphi写的,不过没关系。 时间紧张,只说明一下tar_pytar通过python接口提供的功能: 完整的math功能,完全可以取代tar_math。因为背后是python嘛。 词典功能,输入查询的英文单词,可以返回中文解释。(从dict.cn查询,同样感谢python的强大) 以后: 作为一个工作的中心,就是一些人对待emacs/tc的态度。
about 3 years ago - 6 comments
在经历了两个RC版本后,今天终于发布了WordPress 2.7 Final。由于主机服务商的一键升级还没有提供,于是继续“使用SVN升级Wordpress”。由于从这个版本开始,系统已经内置了在线升级Wordpress核心的功能,所以这应该是最后一次手动升级了。 svn co http://svn.automattic.com/wordpress/tags/2.7/ wordpress-svn cp wordpress-svn/* satwe.com/ –f –r http://www.satwe.com/wp-admin/upgrade.php 升级之后的系统完全正常。 相对以往来说,Wordpress 2.7 版本增加了许多新鲜特征,其中最大的改变是后台的布局。另外,根据Wordpress以往的习惯,由于一些特性已经被Wordpress集成,这次更新又会导致一批插件下岗。 主要特性有: 后台界面布局大更新。更加符合使用和管理习惯,效率比以前有了极大的提高。 WordPress core updates,从此不用再手动升级了,就像现在自动更新插件一样快捷。 One Click Plugin Installs,一键安装插件,不用在ftp或者ssh去服务器操作了。 XML RPC Comments API,这个为相关软件或者插件或者Widget的开发提供了丰富的想象空间。 Default Sitemaps,生成网站地图,相关插件要下岗。 Comment Threading,留言回复功能。 Subscribe to Comments,留言订阅。 Batch Editing of Posts,博客批量编辑 其他的就不是我所关心的了,详细的可以去官方网站查询。 最后,附一张2.7后台图片:
about 3 years ago - No comments
换台电脑工作也还是件很麻烦的事情,特别是所有一切都得自己来装的时候。真后悔没把当初电脑全盘复制下来。。。 由于还是建造一套开发支持环境,沿着多年的习惯,自然还是要Apache,PHP,Mysql,Python…但是脑子里还是很清晰的记得,经过多次尝试之后,有一个AMP的套装用起来很惬意,但是搜索时候,发现脑袋里对它的名字一片空白。 既然记不起来就google吧,找到几个都不是目标,知道后来找到这里:Comparison of WAMPs,心想作为最伟大权威的资料库,这里面肯定有它的影子,果然找到了,它就是XAMPP,你说叫啥不好,非要出来一个X,最后还要加个P。 ps1:人有时候就是很贱,非要熬夜才有效率。 ps2:hygeen每周末要狂奔700mile去牛郎织女,可歌可泣,四个轮子也的确比两个轮子好。
about 3 years ago - No comments
由于WordPress用来抓取RSS的Snoopy库存在安全漏洞,导致攻击者可以入侵服务器。WordPress今天升级到2.6.3来修补漏洞。 以前都是通过Dreamhost的OneClick来升级Wordpress,后来下载tar文件来覆盖升级,今天想既然平常都用subversion来开发,为啥不试一下svn升级呢。 于是下面步骤,与官方的略有不同: ssh登录进系统,建立目录wordpress 使用svn得到官方的2.6.3的版本 svn co http://svn.automattic.com/wordpress/tags/2.6.3/ ./wordpress/ 覆盖到你的blog目录,注意如果你修改了default或者classic主题,需要提前备份。建议自己换个名字。 copy –R –f wordpress/* ~/satwe.com/ 浏览器访问 http://www.satwe.com/ wp-admin/upgrade.php来进行数据库升级。 注意,如果想得到2.6分支的最新版本,需要check out下面地址: svn co http://svn.automattic.com/wordpress/branches/2.6/ ./wordpress/ 如果想试用最新版本(目前是2.7beta),则 svn co http://svn.automattic.com/wordpress/trunk ./wordpress/ 如果对Subversion感兴趣,可以访问这里:Subversion专题。
about 3 years ago - No comments
Subversion-1.5终于发布了,这次版本更新相对于1.4来说增加了许多激动人心的特征: * 合并跟踪(基础) * 稀疏检出(通过新的–depth选项) * 交互式的冲突解决 * 变更列表支持 * svn:externals的相对URL和peg修订版本 * 对于ra_svn和svnserve的Cyrus SASL支持 * 通过sharding对于FSFS的大规模开发的支持 * FSFS优化,通过不变的文件隔离 * WebDAV的透明通过代理写 * copy 和move的改进 * 速度改进,取消响应改进 * 更简单的使用试验ra_serf DAV访问模块 * API改变、改进以及语言绑定 * 超过150的bug修正,改进 具体的更新说明文档:http://subversion.tigris.org/svn_1.5_releasenotes.html 相应的,TortoiseSvn也更新到了1.5版本,更新说明:http://tortoisesvn.tigris.org/tsvn_1.5_releasenotes.html。 下载Subversion-1.5 下载TortoiseSvn-1.5 注意:使用TSVN1.5后,会自动的把本地的working copy升级到1.5格式。服务器更新Subversion-1.5之后,版本库不会自动升级为1.5,如果升级,需要执行svnadmin -upgrade命令。
about 4 years ago - No comments
Subversion有着非常好的特性,但是默认的用户权限以及Repository管理都是通过手工修改服务器上的配置文件来实现,非常不方便。(题外:可以通过配置apache使用mysql来管理用户(mod_auth_mysql),但是用户组以及代码仓库的管理还是不方便) 所幸,我们遇到的问题就是大家遇到的问题,SVNManager就是为了解决这个问题而出现的 SVNManager的介绍不太复杂,但是由于一些依赖的库的关系,第一次安装确可能会遇到各种问题,而官方文档上并没有解释。下面罗列一下具体的步骤。 1.软件下载 Apache-2.0.59 PHP-5.1.2, 这里要求是5.0以上版本 PHP Pear, 这个在5.1.2中默认已经包括了,不过需要执行一个安装的步骤 VersionControl_SVN,这个可以通过pear安装 mysql or sqlite: 需要在php.ini中配置好 SvnManager-0.39 2.安装(这里为windows平台下,linux平台类似) (假设SVN以及Apache已经配置好,如果没有请参考本文底部的“相关文章”) 安装pear 安装完php-5.1.2之后(包括msi或者zip版本),在php的安装目录有go-pear.bat批处理文件,运行之。 运行完后,检查c:\windows\php.ini中是否包括这一行: include_path = “.;F:\apache\php\PEAR” 安装VersionControl_SVN,可以通过命令行来自动下载安装 pear install VersionControl 或者从网站下载后解压缩到PEAR目录 根据需要,检查php是否已经开启了mysql或者sqlite的支持 在c:\windows\php.ini查看下面两行前面的分号已经去掉: extension=php_pdo.dll extension=php_sqlite.dll或者extension=php_pdo_mysql.dll 并确保php扩展的目录制定正确: extension_dir = “F:\apache\php\ext” 可以通过phpinfo()检查是否加载成功。 安装SVNManager 上面完成之后,安装SVNManager就非常简单。 将SVNManager解压缩到网站目录,修改config.php,主要是设定htpasswd, svn, svn-admin以及svn_passwd_file等文件位置,参考注释很容易修改。 浏览器中打开SVNManager网址,之后可以使用config.php中的临时管理用户密码登录,并添加第一个管理员帐号(一定要做)。然后通过这个帐号就可以进行用户以及代码仓库的管理工作。 3. 附录 DAV svn SVNParentPath “F:/SVNData/svn” SVNListParentPath on AuthzSVNAccessFile F:/SVNData/svn_access_file Require…
about 4 years ago - No comments
在学习过Python Tutorial,有了基本一点概念之后,阅读Dive Into Python无疑是非常合适的。 Dive Into Python是一本免费的图书,可以在线阅读或者下载回来离线阅读,目前有英文、中文等多种语言版本。 这本书非常类似 Head First Design Patterns的写作风格,以几个简单但是非常有代表性的例子,深入浅出的讲解Python的概念和思想。
about 4 years ago
如果需要同时集成svn和apache的话,目前在win平台一定选择apache2.0.x,因为apache2.2.x的module目前还很少。