Bitwise和Shifting写乘法函数

写在前面——

准备从这周开始,平常每两天一道题,周末争取一天一道题,练练招式。题目会源自一个叫做CareerCup的网站(需翻了个墙),上面有各种IT公司的面试题,基本集中在基础算法方面。这将成为我的博客中的一个系列——“做做题”。

今天的题目是:

“Write a code which return square of any number, but you can not use Star or caret sign”

我的第一个思路就是把这个数加N遍就好了:

def square(a):
    result = 0
    for i in range(0,a):
        result += a
    return result

但是这个解显然只对整数有效,并且效率低下,我试了一下100000000,一分钟过去了还的不到结果,然后强制终止的时候,python崩溃了…… (more…)

实习,在豆瓣

写下题目后,面对白色的博客模板,脑中竟也是一片空白。那9个月的实习时间流水般涌向指尖,意欲跳跃在键盘上敲出排列的很好看的文字,却发现自己好似无重量一般不能让白色的按键有些许的下陷。

于是只好无意识的在各个窗口间切换,浏览器、终端、音乐播放器、邮件、IM……等等,邮件客户端?客户端标题栏里四位数的邮件总数很是醒目,提醒着我这几个月,我确然存在于一个叫做豆瓣的地方,顶着实习工程师的帽子,在她的服务器里留下了几十个Ticket,几百封邮件,几千行代码和不知道多少条报错日志和数据库记录。

然后借着这几个存在于云端的数字,那些踊跃的记忆才仿佛有了存在感和重量一般,无比欢乐的跳出来,叽叽喳喳。 (more…)

关于咆哮体生成器的那点事


上上周末,大概是3月12号的晚上,Leon同学在工作室里安安静静的鼓捣了一下午后,扔给了我一个网址,我打开一看是他做的一个咆哮体生成器的应用,输入一些句子,然后会生成看起来有种咆哮风范的句子。他告诉我思路来自于校内上的一篇咆哮体写作规范,我一看挺有意思,然后跟他探讨了一些具体的改进。如把一段话拆做一行一段,把增加的感叹号个数变得随机,“尼玛”、“有木有”等类似的词的添加随机等等。其中最重要的发现要算,“尼玛”这个词,放在句子里靠前位置的任意一个地方,基本上都是读的通的。比如说“尼玛我要买个电视机”,“我尼玛要买个电视机”,“我要尼玛买个电视机”,“我要买尼玛个电视机”等等。于是我们就在一句话的前几个字符里随机插入“尼玛”,这往往会给句子带来意向不到的效果。

这时候所有东西都是在google app engine中用python写的。

(more…)

用lxml来解析大型xml文件+命令行中的python

上周被布置了一个任务,要解析一个大约有600MB左右的xml文件,从中提取所需的信息然后输出成一个csv文件。从来没有做过类似东西的我,加上不太熟悉的python、linux和vim,这样一个简单的东西花了一天半才解决,不过解决的还算比较完美吧,用lxml这个库,原本以为要至少10几分钟的解析过程其实只用了1分钟左右,说起来,还是c比较强大啊,lxml的底层使用c实现的,换成python恐怕就够呛了。好了废话不多说,讲讲lxml的用法和我在做这个任务里碰到的几个问题吧,权当复习和备份。

用lxml载入xml文件

lxml是c中的libxml的python实现,在保证效率的情况下,为程序员免去了内存管理方面的麻烦,具体介绍大家还是移步它的官网吧。

首先在python里import lxml的etree模块,然后用etree里的parse函数从文件中解析xml,解析得到的是一个ElementTree的实例,用这个实例的getroot函数就能得到xml中的root。root是对象Element的一个实例,对这个root可以做indexing,即用过root[n]可以得到root下相应的子节点,这些子节点同样也是Element的实例,所以通过root[n][m]就可遍历各个节点。

>>>from lxml import etree

>>>tree = etree.parse(open(“file_name”,“rb”))

>>>root = tree.getroot()

另外,对一个Element还可以进行iterate操作,iterate会依次遍历Element下的所有子节点、子节点的子节点,然后按照顺序,返回一个所有节点的序列。

如果我们有这样一个xml:

(more…)

关于网络电台的一些思考(一)- 作为背景音乐的电台

昨天开会,收获很多,自己一边听一边想,也思考了很多。这一系列文章会把自己关于网络电台和相关的服务、模式还有体验等等方面的思考都记录下来。没想到写着写着会有这么多,会分成两到三部分完成,分别是“作为背景音乐的电台”,“社会化的电台”和“电台商业化”。

互联网上的服务大致可以分为两类。一类是原生于网络的,在这个产品出来之前,现实生活中并没有原型。如Twitter,如4square(其实这个可以算“到此一游”的数字化……)。另外一类就是把已经有的原型互联网化,如网络购物等等。基本上这类服务都是将原来的名字前面加一个“网络”的标签。网络电台很明显的属于后者,更进一步讲,网络电台是把传统电台中的音乐节目剥离出来做成一个独立的服务。

截图00(via)

(more…)