月度归档:2011年11月

选举

作为天朝普通的一介屁民,已经满二十一周岁的我今天第一次见到了选票。那个激动啊,终于可以行使自己的公民权了,有木有!可是看到选票我傻眼了:

这候选人都是谁啊?连个介绍都木有!就算这选举是作秀,也出来秀秀嘛,只有干巴巴的名字让我们肿么选?

所以,普通青年看哪个名字好听选哪个;正义青年果断全打叉,不能玷污了手中的权利;文艺青年把选票当成创作工具;二逼青年投了苍老师。。。

不做过多评论,这选举是怎么操作的,大家都懂得。

天朝有很多特色!

继“限娱令”后广电总局又推出“限广令”,从明年起,电视剧中间将禁止插播广告。这到底是好事还是坏事呢,可以去围观一下知乎里这个问题:广电总局明年禁止电视剧中间插播广告,对电视观众来说究竟是好事还是坏事?为什么? 不过对于基本上不看电视的我,基本上没什么影响。

但我道想问问了,广电局怎么有这样的权利?

光电局是中国众多应该撤销的部门之一,它的存在,严重的制约中国文化的发展。如果你觉得广电局这么做是件好事,那么它有权禁止广告,就有权禁止播放电视剧电影,有权禁止播放娱乐节目,有权让每个电视台转播新闻联播。事实上,它已经这么做了。

一个商业化,市场化的电视台,其收入大部分来自广告。通过投资拍摄或购买电视剧等节目来获取收视率,从而获得广告营收。广告多了,收视率就会降低;广告少了,电视台会亏本。调节这个平衡的就是市场中那个“看不见的手”。

广电局这么来,就是政府干预市场的典型,这不算是历史的倒退么?

我看腾讯

作为中国最大的互联网公司,腾讯一直不缺少话题。不过在 QQ 的用户群里,我相信有相当比例的用户不知道 QQ 和腾讯的关系这个最基本问题,或许他们就是某些人所谓的“低端用户”吧,呵呵。骂腾讯的,赞腾讯的大都是业内人士,外行人也就看了乐呵,顶多跟着起个哄罢了。并且大多数人的观点并不是来自自己的独立思考,而是有意无意的接受了某些组织的软文,比如 3Q 大战中周鸿祎那庞大可怕的水军。

前几天知乎上有一个热帖:腾讯这家公司的核心竞争力是什么?为什么? 顶在最上边的一个回答是腾讯无线国际业务产品总监 Andy Pan 的回答,这个回答很长,下面评论中有人总结了一下:1. 腾讯是平台公司,也是一路从弱小、残酷竞争慢慢走来的,所以它今天触及各个细分领域,形成“垄断”局面,是他十多年来积累所应得的; 2. 腾讯的核心竞争力:一是已经形成的平台效应,二是公司的氛围仍然是拼搏向上的;前者是已有的基础,后者是继续前进的动力。这两点还是很中肯的,但我对文中所说的员工加班到深夜是竞争力实在不能赞同。一个健康的公司,是不应该鼓励员工加班的,即使是员工自愿也不应当提倡。如果员工不加班不能按时完成工作,那就是这个公司的管理出问题了。所以我对这个答案没有点赞同,也没有点反对。

昨天酷壳也更新了一篇文章 腾讯,竞争力 和 用户体验。这个博客是比较知名的技术博客,博主陈浩技术造诣很深,但这篇评论我却觉得没什么价值,作者带有很明显的偏见写下这篇文章。我很反感那种把用户划分为所谓的高中低端,企业的作用是满足用户需求,给用户带来价值,而不是以高端自居,充当教化民众的角色。另外,作者关于腾讯价值和互联网的核心竞争力的看法,是以一个工程师的角度来思考,这本身就有问题。

在我看来,腾讯是一家创造了巨大价值的公司,它最大的价值是通过 QQ 这个产品把人们在互联网上连接了起来,改变了中国人的交流、通讯方式。QQ 本身已经不止是一款 IM 工具,而是一个关系网,它才是中国最大的 SNS 网络。这方面和 QQ 相比, FaceBook 都算是后起之秀。不过文化和基础不同,发展轨迹也不同,在欧美通过一款即时通信软件获取像腾讯这样的成功几乎是不可能的。美国是互联网的发源地,在 web 发展起来之前,人们已经建立起了以 email 为中心的联系网,IM 对它们来说只是一个工具而已。但在中国,九十年代末互联网的发展是一穷二白,IM 工具正好填补了用户与用户联系需求的空白。QQ 作为一款杀手级应用吸引了大量的用户,反过来促进了互联网的发展。以至于很多人,包括很多不会上网的人认为上网就是上 QQ。

就像很多人所说的,腾讯核心的竞争力是它庞大的用户量和中国最完善的用户关系链。腾讯借助这个平台,通过互联网增值业务获得了巨大的成功。也是这样,腾讯最害怕自己失去用户,所以它千方百计的去遏制对手,防止一切失去用户的可能。腾讯微博就是一个很好的例子,在看到新浪微博在用户关系链上的不断发展后,腾讯推出了自己的微博来打防御战。这点也无可厚非,但给人一种很小气的感觉。另外,腾讯之前的“一站式网络生活服务平台”战略,希望在自己的帝国里给用户提供一切他想要的东西(这和当前互联网的开放思想格格不入)。所以,腾讯几乎什么都做,看到一个产品或一种模式可行就跟进,然后利用自己丰富的资金技术资源和庞大的用户量打败对手。也因此,它背上了无数抄袭和山寨的骂名。当一个公司成为行业公敌之后,就该好好反思自己的模式了。虽然目前腾讯已经着手开放,但我感觉现在腾讯的开放还很混乱。其开放平台 Q+ 也没什么意思,看不出有什么特色,也一直没有试用。腾讯目前还是一家以产品和利益为驱动的公司,不然的话怎么不去认真的做 Linux 上的 QQ 客户端呢?

腾讯还有一个很重要的竞争力,就是对人才的竞争力。能否留住人才对一个公司发展至关重要,从人才的流动方向也可以看出一个行业的发展动向。除了优越的工作环境和各种人性化的制度,财大气粗的腾讯在薪资上很不小气,从校园招聘中趋之若鹜的求职者也可以看得出来。另外,牛人越多的地方,越能吸引牛人,牛人都是相吸的。对于应届生,毕业能去大公司是一个很好的职业起点,大公司完善的培训制度也能一定程度上拟补当前国内教育的不足。还有,作为一名程序员,如果你的代码能够被数亿人运行,难道不是一件很自豪的事情吗?

目前,腾讯的发展仍停留在增值业务和通过 QQ 为其他产品带来的巨大流量上,对但用户关系链的发掘和在开放平台的建设上还在起步阶段。所以腾讯发展远未到头,还有相当大的潜力。比如 Google 通过用户关键词匹配,FaceBook 通过分析用户详细资料,都建立起精准广告系统,获取了巨额利润。但在互联网广告方面,腾讯的营收少的可怜,在这方面,腾讯尚大有可为。还有,如果人们能够在几乎所有需要注册登录的网站使用 QQ 号快速方便的登录,无论对用户还是网站都是很有价值的事情。腾讯如果能建立起像这样完善的开放平台,那么就真的可以成为中国互联网的水和电了。建立起良性发展的开放平台,在促进行业良性发展的同时也提升了自身的价值,也能少点骂名了。

不要给自己懒惰找借口

这学期开学以来,自己越来越懒惰了。该看的书没有看完,该做的事情总是拖延。

我不断的给自己的懒惰找接口:找借口不看书,找借口不去上课,找借口睡懒觉。我告诉自己,给自己放一段假,结果假期一直难以结束;我还会告诉自己,最近精神状态不好,结果不知道是应为精神不好造成懒惰,还是因为太懒惰造成精神状态不好,越来越感到压抑、烦躁。

给自己懒惰找接口是不是一种懒惰的表现呢?

懒惰一种习惯,就像勤奋一样。

习惯了懒惰,然后习惯了给自己懒惰找借口,结果越来越糟。懒惰会影响情绪,导致一系列的恶性循环。

改掉这个习惯就是让勤奋变成习惯。

让自己忙碌起来,让事情变得更好而不是更糟。

从现在开始吧!

我爱 Python

哦,别误会了,我说的 Python 不是这玩意,而是一种编程语言。

这几天用 Python 语言完成了一个项目,包括一个数据分析统计模块和一个简陋的 GUI (图形用户界面)模块,大约一千行代码左右。这是我第一次用 Python 写这么大的程序(对我来说算是够大的了)。从这个项目中充分体会到了 Python 语言的强大和易用。

一个语言是否简洁,有多简洁,从它的 hello world 程序中就可以看得出来:

print 'hello world'

在我所接触到的编程语言中,Python 代码最接近自然语言。强制缩进和一种问题只有一种解决办法的思想使得 Python 代码很整齐,看起来和伪代码一样。虽说这样少了自由度,但再也不用去管那些大括号匹配,行末位分号等,你会对此心存感激的。Python 是真正的为人类设计的语言。

Python 是一种动态语言,也就是说没有了编译步骤,代码就是程序,程序就是代码。并且在使用变量时用不着声明,想用就用,不用那么多废话。在使用一个变量时,也不用太考虑类型问题,直接用就是。

Python 有一个涵盖面很广的标准库,很多问题都已经在此解决了。我想如果这个项目我用 C/C++ 语言写的话,那么几乎要自己从新实现这些 Python 标准库就提供的功能。加上 C/C++ 语言的啰嗦程度,估计代码行数要增加一个数量级。

还有一个是 Python 没有指针,不用手动管理内存。Python 内建的内存管理和垃圾回收机制很完善,再也不会遇到莫名其妙的段错误了。

Python 的好处太多了,可以看看维基百科的介绍。

Python 是一门很容易学习的语言,也被推荐为入门者应该学的第一门语言。事实上,如果你是一名有经验的程序员,那么你能在两个小时内学会 Python 语言的语法并写出有用的程序。简明 Python 教程 是一个很不错的学习资料,深入学习的话可以看看 Dive Into Python 中文版Python 的官方网站是你应该常去的地方,也是各种文档资料最多的地方。

Python 可以说是一个很“酷”的编程语言,它被列为黑客应该学习的五中编程语言之一,它的资深使用者几乎都是很厉害的程序员。它被使用的也很广泛,豆瓣网的后台开发语言就是 python, Google 主要使用的三种编程语言也包括 Python.

Python的创始人为吉多·范罗苏姆(Guido van Rossum),关于他还有一段有意思的故事:Guido 去 Google 面试,简历只有一句话:I wrote Python (我写 Python),结果面到第10轮 Google 才明白过来这句话的真正意思。

当然每种编程语言都有它合适的领域,相对来说 Python 是一种开发效率较高的语言,但其运行效率则相对较差,如果和 C 语言写出的同样功能程序相比的话,有时候甚至要慢上几个数量级。在一些项目中,牺牲运行效率来提升开发效率还是很直当的。比如在我的这个项目中,写一个桌面程序,对于用户来说,一毫秒和一秒的反应时间真没什么区别。不过 Python 语言和 C 语言结合的很紧密,一些对效率要求很高的模块可以用 C 语言来写,Python 执行时导入该模块即可。实际上,Python 本身就是 C 语言写的。由于 Python 的代码即程序的特点,所以如果算法需要保密的话,也可以用 C 来写,这样别人就看不到你的源码了。

有很多工具可以将 Python 程序转换为 Windows 可以在不用安装 Python 解释器直接执行的 exe 文件。我根据这篇文章:使用py2exe打包pyqt程序为exe 提供的方法成功将 PyQt 程序打包成了 exe.

另外,Python 语言是一个由社区驱动的自由软件,任何人都可对其做贡献,它的源码也是很好的学习 C 语言资源。

延伸阅读:

每个程序员都应该学习使用Python或Ruby

Zen of Python — 蟒之禅!

PyQT 介绍和一些资源

这几天学习了 PyQt , 照猫画虎的做出了一个图形界面。

Python 是功能很强大的脚本语言,Qt 是跨平台的界面开发语言,二者的结合就是PyQt, 它是 Python 语言的 GUI (图形用户界面)编程解决方案之一,而 QT 是由诺基亚开发的应用软件框架。使用 PyQt 编写程序图形界面可以在不修改代码情况下在很多种平台比如 Windows, Linux 和 MacOs 上运行。

PyQt 官方网站:http://www.riverbankcomputing.co.uk/software/pyqt/intro

安装:

如果你使用的是 Windows, 需要首先安装 Python, 如果你对这篇文章感兴趣的话你肯定已经安装了 Python. 然后到 PyQt 官网上下载一个 Windows 安装包进行安装,注意应根据你安装的 Python 版本号进行选择。 PyQt 的 Windows 安装包已经包含了一份 Qt, 安装的时候注意选择你安装 Python 的目录。

如果你使用的 Ubuntu Linux, 那么已经默认安装了 Python, 运行下面命令就可以自动的安装所依赖的软件包:

sudo apt-get install python-qt4

然后运行命令:

sudo apt-get install python-qt4-doc

安装 PyQt 的文档和示例。

Eric 则是由 Python 开发的一款支持 PyQt 的 IDE, 可以很方便的使用 Qt Designer 设计界面,安装和使用可以看这篇文章:Eric+PyQt打造完美的Python集成开发环境。也许在编写大程序时 IDE 是很有用的,但我更喜欢用一个自己喜欢的文本编辑器手工 Hack.

学习资源:

PyQt Reference Guide

The PyQt4 tutorial

Rapid GUI Programming with Python and Qt

GUI Programming with Python: QT Edition

PyQt – PythonInfo Wiki

不过上面都是英文的,再次证明了学好英文对搞计算机的重要性。中文资料很少,有一个翻译了 The PyQt4 tutorial 的资源:

http://www.czug.org/python/pyqt4/

还有这个:

http://code.google.com/p/pyqt-doc-cn/

http://www.ibm.com/developerworks/cn/linux/l-qt/

在安装好 PyQt 后,程序自带的一些例子也是很好的学习资源。

Windows 中例子位于:python目录Libsite-packagesPyQt4examples

Linux 中例子位于:/usr/share/doc/python-qt4-doc/examples

在编写程序时,查看官方文档很有用,列出了所有模块中对象的可用方法、参数和它继承的对象等

我在使用 QtGui.QFileDialog.getOpenFileName 方法时,遇到如果文件路径中包含汉字时打开文件会出错的问题,估计又是因为该死的字符编码。我没有搜索到解决方法,最后自己试了几次,用如下代码解决了问题。我不知道为什么,但它能正常工作 :-)

fname = str(QtGui.QFileDialog.getOpenFileName(self, u'选择文件',
	'/home', u"ACMi 文件(*.acmi)").toLocal8Bit())
f = open(fname, 'r')

多平台兼容时字符编码问题

我把自己在 Win 下写的 Python 程序拿到 Linux 下运行,遇到了一些问题。

第一个问题是汉字乱码问题。问题出现在 Win 下汉字的默认字符编码格式是 ANSI 格式,而 Linux 下默认使用 UTF-8 格式。如果你用的是 Ubuntu, 可以看看这篇文章:Gedit中文乱码。如果你想让你的程序能在多平台下正常运行,最好在编写程序时使用通用的 UTF-8 格式编码,或者在你的代码中不要出现除了 ASCII 码之外的字符。

第二个问题:在 Linux 的脚本程序第一行中写类似于下面的代码:

#!/usr/bin/python

可以指定运行脚本的程序,从而可以直接运行脚本文件。但是我的程序并没有直接运行成功,shell 提示找不到解释器文件。只能以类似如下命令方式运行:

python test.py

也就是说第一行代码没有起作用。

猜测出现这个问题是因为 Win 和 Linux 下文本换行符格式不一样。在 Linux/UNIX 下,换行符为 ‘n’, 而 Win 下为 ‘rn’, Mac 下为 ‘r’, 所以 shell 在运行文件时,’/usr/bin/python’ 后多出了一个字符 ‘r’, shell 按照这个文件名当然找不到。解决办法:在编写代码时以 UNIX 格式新建文件,使用 notepad++ 文本编辑器可以很容易做到这一点。

但在我使用了 UNIX 格式新建文件和 UTF-8 文本编码格式保存后程序还是无法直接运行。我试着以UTF-8 无 BOM 格式编码后问题得到解决。查找了资料,了解到:BOM (Byte-Order Mark),字节顺序记号,中文也叫字节顺序记号。对于 UTF-16 和 UTF-32,BOM 的作用是在文件开头加上三个字节来标识文件的字节序,即采用的是大端法还是小端法。但对 UTF-8 来说,没有字节序的问题,BOM 的作用只是来标识这是一个 UTF-8 编码的文本文件。在 UTF-8 中,BOM 在文件开头占三个字节为 EF BB BF (十六进制)。在类 UNIX 系统中,UTF-8 BOM 这种作法则不被建议采用。但是在windows系统中,它是默认存在的。UTF-8 BOM 可以在不知不觉间导致一系列莫名其妙的问题。

总结一下

如果你想让你的代码不但能在 Win 下,也能在 Linxu 下都正常运行(其他平台没有测试),那么最好以 UNIX 格式新建文件,使用 UtF-8 无 BOM 格式编码。Win 下推荐使用 notepad++ 文本编辑器

扩展阅读

字符编码笔记:ASCII,Unicode和UTF-8 —— 阮一峰

UTF-8文件的Unicode签名BOM(Byte Order Mark)问题