3

Python 的 ctypes 模块实在太方便了!

Posted by Elias on 三 24, 2010 in 混乱的IT世界

最近用到中文分词库 Bamboo ,开始时有点头疼居然没有 Python 封装。。后来发现用 ctypes 模块来封装实在是太简单、太方便了~几乎被感动到内流满面~有了庞大 C 库和 ctypes 模块的 Python ,真是可比当年的数理化——走遍天下都不怕~下面给出通过 ctypes 模块调用 Bamboo 分词的示例代码:

?Download seg.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
 
from ctypes import *
 
# 通过 C 接口载入 libbamboo ,“.dylib”是 Mac OSX 下的动态库后缀, Linux 下应该是“libbamboo.so”:
libbamboo = CDLL('libbamboo.dylib')
# 调用 bamboo_init() 函数得到一个分词器实例:
bamboo_init = libbamboo.bamboo_init
bamboo_init.restype = c_void_p
bamboo_handler = bamboo_init(c_char_p('crf_seg'), None)
# 如果返回的实例是 None (也即 C 中的 Null ),表示实例生成失败,那我们打印出错原因:
if bamboo_handler is None:
    bamboo_strerror = libbamboo.bamboo_strerror
    bamboo_strerror.restype = c_char_p
    print bamboo_strerror()
else:
    # 把文本传给分词器准备分词:
    # 待分词的文本必须是 utf-8 编码的 bytes string ,所以我们要把 unicode string encode 一下:
    libbamboo.bamboo_setopt(bamboo_handler, c_long(0), c_char_p(u'我爱北京天安门'.encode('utf-8')))
    # 真正开始分词:
    bamboo_parse = libbamboo.bamboo_parse
    bamboo_parse.restype = c_char_p
    # 下一行得到分词结果(空格分隔),格式还是 utf-8 编码的 bytes string ,我们把它 decode 成 unicode :
    segged = bamboo_parse(bamboo_handler).decode('utf-8')
    print type(segged), len(segged), segged
# 调用 bamboo_clean() 函数释放分词器实例:
libbamboo.bamboo_clean(bamboo_handler)

感谢国家,感谢什么什么TV,另外感谢沈仙人,当年正是他的博文用 Python 写自己的 C Module让 ctypes 在我脑海里留下了不可磨灭的印象^_^

标签:,

 
2

选择恐惧症是这样产生的~

Posted by Elias on 十二 9, 2008 in 混乱的IT世界

今天算是被源代码版本控制工具雷到了。话说我刚读研那会儿,比较流行的只有CVS一个,于是我踏踏实实地给实验室架了CVS,感觉比较晕,只学会了最简单的用法。后来Subversion出来了,感觉比CVS清晰易用一些,踏踏实实劝说实验室全面转向了Subversion,并且后来还购买了一些相关的技术支持服务。再后来分布式版本控制工具出现了,我考察了一下实验室的具体情况,认为短期内没有必要替换Subversion,而对于业余自用来说,Bazaar-ng是最合适的,因为发布时往静态网站空间上一扔就行了,成本比较低,所以试着在实验室学生中推广Bazaar,但是没有人理我。。再后来想为自己的项目做一些准备,考虑方便合作者使用,因此最好与常用IDE整合插件的成熟度能好一些,于是狠狠心切换成了Mercurial-hg。近期有个项目需要和其他人合作,郁闷地发现对方已经使用了git,这下主要流行的分布式版本控制工具算是都玩过一遍了。这事闹的,怪不得人会变得什么都懂点、什么都不精,这下算是有点明白了,这事儿多少还是较真儿闹的。

话说回来,事情总是发展变化的,我开始用Mercurial的时候,它也开始支持向静态网站空间的发布方式了,而在选用Bazaar的时候还是不灵的;我开始用git的时候,已经有很好的Windows下的二进制移植了(非Cygwin方式),客户端的图形化界面辅助也大大进步,只是与重量级IDE的整合刚刚开始而已,这在以前都是我担心给团队推广造成困难的地方。所以,选择是很难一劳永逸的,我们得经常去重新了解形势发展,还得经常反思到底自己要的是什么(这一点不仅仅适用于IT)。

比较麻烦的是,人的精力是有限的,忘性也总是有的,所以做选择通常还都是一件费劲的事儿。话说国内Python社区里面的ZQ同学首次注意到我的个人网站的时候,大大感叹了一番用Wiki管理个人知识体系要比博客或是书签等方式合理的多,而我当时反而觉得用博客来记录其实更有助于被搜索引擎注意到,因而也更利于积累人气和名声。隔了一阵给ZQ发邮件和他提起一个开源软件的时候,ZQ想起了我这个用Wiki做个人知识管理的家伙,则劝我把内容转移到其他Wiki上更靠谱,毕竟靠个人力量做Wiki是没什么前途的。前者何赞、后者何劝,把我干这儿,都没词回复了。比较明显地,ZQ同学是忘记了咱整这玩意只是个人知识管理,方便自己查询之用,既不是想自建社区,也不是服务于某个项目。我要把我主页上一些零七八碎的非技术内容整到别人Wiki上,人家不因为我乱放垃圾把我屏蔽了那我真得烧个高香^_^忘了就忘了吧,本来就P大点儿事罢了~

标签:,

 
0

软件“乌托邦”

Posted by Elias on 十一 1, 2008 in 混乱的IT世界

近来急剧觉得软件实在是相当复杂的一件事,想做好不但要花费大量精力,而且最好还要兼具技术和管理上的若干技巧。工作对象本身的复杂特性,也就造就了与此相关的工作环境的复杂——我指IT业界是相当复杂和混乱的。前几天在社区里看到FreeBSD界的名人——delphij同学的一个简短帖子,大意是说(也许我记错了,并且我的理解并不代表delphij本人的言论):有些公司用开放源码授权发布软件的一个免费版本,让大家都用,然后却使用其他授权协议发布企业版等方法,将商业用户需要的技术支持绑定到自己公司,于是该领域的产业环境变恶劣了,很多公司会被挤垮,于是在这个领域开展工作的总体力量衰减了,这种方式对产业环境带来的伤害恐怕不亚于微软采取的“盗版占领市场”策略。我觉得这个言论有其合理性,但是当时看完没有什么反应,因为我不知道delphij是以哪个公司作为例子来说的。

我自己所观察到的现实是,很多自称是开放源代码软件的产品其授权协议都相当复杂,不但GPL之类的协议本身即具有“传染性”,而且很多公司还会对产品使用双许可证甚至多许可证(比如MySQL),也有一些公司还会对原始协议添加一些冲突或不冲突的附加条款,比如Alfresco的企业版虽然自称是GPL,但是对二次发布有一些既复杂而小心眼的限制,最终在事实上变成了没法二次发布的GPL,也就是假GPL了。于是当今业界,严肃的用户在使用新的软件模块时,总是小心翼翼地仔细研究附带的许可证条款,而与软件相关的各种侵权诉讼或者叫骂,其结果基本上都成为一笔笔糊涂账。这显然不是大多数人理想中的产业环境,问题出在哪儿呢?我想想觉得还是软件产业比较年轻、开放源代码授权比较年轻,以至于很多公司还没有弄清楚该如何合情合理合法地赚到切切实实的真金白银,慌乱之下,难免做出胡乱制定软件授权等乱七八糟的事情。

我承认,站在用户角度上,能够“不用花钱”就获得完成某件事的能力(比如修改出一张有意思的照片),的确觉得很爽——简直就是天上掉馅饼嘛~可是反过来想,天上不会真的掉馅饼,馅饼仍然总是由某位大师傅做出来的,即使不提大师傅本人应该取得适当的劳动所得,大师傅也总得挣点钱养家糊口吧~免费的馅饼雨难免会有一天变得无以为继。在早期对《大教堂与集市》的分析中,主流观点认为这是“礼物经济”的一个结果,人们制作优秀的开源软件主要目的是获取名声。类似这样的人是有,但是当开源软件影响到整个业界的时候,只让为了名声的人们来干活是不够的,总会有一些以挣钱吃饭甚至发财的目的而进来的人,于是公司或者个人,总要想方设法发掘有效的盈利模式。这样的盈利模式已经有了一些,比如与硬件绑定、提供支持服务、卖广告等等,但具体到一个软件产品上,这些既有模式是否真的有效实在难说得很。

本人最近正打算就着开源软件来做一些工作,因而可以预见我必然会被迫对开源盈利模式方面做一些探索。在遇到困难的时候,人们总是梦想有一个乌托邦(就像《奋斗》里面出现的那样一样)。在软件的乌托邦里,人们可以用合理的代价得到解决目标问题的恰当软件工具。是的,我在这个乌托邦里没有说免费,因为事情总会是有代价的,如果没有再收钱,那肯定是这部分内容的价钱已经体现在其他地方,或者有其他人替扛了这部分代价,亦或许是不知哪位前辈在人类还是猴子的时候为这些事儿奠定了点儿基础^_^在软件的乌托邦里,历史上曾经出现过的软件都是开放源码的,人们即使不能找到现成工具处理自己的问题,至少在大多数时间拥有一些像是那么回事儿的组件。于是解决新问题的门槛儿降低了,这位老兄登高一呼,就有更大的可能出现无数健儿,愿意提供一个合理报价来解决这个问题(在共产主义没实现、货币没有消失之前,恐怕还是会有报价吧)。需要解决问题的仁兄则可以参照报价人在开源社区的名声来选择一个成功率较高的人或者团队来做。最后搞定的新玩意儿也加入开放源码库,造福后人。其实这也不算是乌托邦梦想,即使在现在的环境下,这么做也是现实的。不必被商业公司的垄断报价吓倒,但也不要全盯着免费的馅饼,人们需要弄清楚自己为了面对的问题值得怎样的代价。2008年的人们应该明白,开源不等于免费。当人们愿意向开源界的自由游侠们提供一些资源时,我得说这样的代价会比人们的预想低廉得多,产生的成果也要靠谱得多。不信?这不能靠空言辩论了,去试试看,然后带着事实回来。

PS:忽然很想要loft,可是比没有钱更严重的问题是,发现北京绝大多数声称是loft的房产其实都是伪loft……

标签:,

Elias的邪异门 is proudly powered by WordPress.(京ICP备10013669号 瑞豪开源提供VPS)Theme design by Laptop Geek.
Copyright © 2018 All rights reserved. Entries (RSS) and Comments (RSS).