Pulpcode

捕获,搅碎,拼接,吞咽

0%

gun

解决问题,最好是简单粗暴,这也是我所理解的python的哲学,下面我们把这种哲学贯彻到编辑器emacs的使用上去。

如果你确实想要在vim上装逼,又要比那群vim党装的更好,那么emacs就是你最好的选择。

当然我是在搞笑,实际上在linux下,你真没有什么好用的编辑器,要么用vim,要么用emacs,emacs只不过比vim要强大一些。但是emacs的学习曲线是很陡峭的,这就像你如果想玩好魔兽世界这个游戏,那么你如果没受过几年魔兽历史的熏陶,打过几年的魔兽争霸的积淀,是很难理解这个游戏的。实际上emacs的话题也很多,包括和vim不同的设计哲学,甚至包括elisp程序(因为emacs其本身就是一个lisp解释器)。所以看到这里你因该懂了,这篇博客就是满足既想用emacs装逼,又想立牌坊。哦不,说错了,又不想花太多时间学习的人,那么我们可以尝试用性价比的方式来解决这个问题。

首先你要安装一个emacs,需要注意的是,默认的yum或者是apt-get所能安装的emacs版本都是比较老的(可能是23的)。建议你安装24或者更高的版本,我们后面介绍的emacs配置也要求是24或者更高的版本。。所以去官网下载就是最好的选择了:http://www.gnuemacs.org/

阅读全文 »

“好吧,有两段梦都跟我爸有关,很怪。我梦里比他要老20岁。所以,可以说他比我年轻。
第一个梦记不太清楚,应该是关于在城里某处和他相见他给了我一些钱,我想我弄丢了。
第二个梦,我跟他都回到旧时过去某个夜晚,我骑马穿过山上小路,天气很冷,地上有雪。他骑马超过我,
继续往前什么也没说,只是继续往前骑。他从头到脚都用毯子盖着,并且头低着,当他超过我身边时,我见到他拿着一把牛角火炬就像从前人们一样。
而且我从火光里可以将牛角看的很清楚,就跟月亮的颜色一样,在梦里,我知道他将继续往前骑去,好像他要在寒冷的黑夜里,到某处去生火。我知道,无论何时我到了那里。他都会在那里,然后,我就醒了。”

— 摘自08年奥斯卡最佳影片《老无所依》结尾台词。

我刚上大学的时候,崇拜过两代程序员,一代是70后程序员,一代是80后程序员。给他们贴个标签吧,或者说,我想象中他们是什么样的。

阅读全文 »

在python中使用单例模式非常的“容易”。

你在一个模块中初始化一个对象,然后去引用这个对象就行了。因为python中万物皆对象,哪怕是一个包(package),也可以当作一个对象。但是这种方式并不好,因为你的代码会看上去非常耦合,所以我从来不建议把包当成一个对象,你仅仅当成一个包就可以了。我再解释一下我的意思,就是你不应该直接从一个包中import一个对象,虽然你可以这么做。你应该import进来一个类,然后通过这个类,来创建对象,这才是单例模式正确的使用方式。而且对于IDE来说,那种从包中导入的对象,因为是动态的,所以你goto define也是找不到的。

而且如果你明白了我的意思,这些来来回回传递的对象,当你想要把一个函数封装出来单独写测试时,你会发现要把这些对象当做上下文当做传入的时候,简直头疼的要死。

阅读全文 »

初中那个时候,电脑的显示器都是crt的,实际上那个时候的电视也是那样的。其实那种显示器,玩什么红色警戒2和星际争霸,简直是绝配,这些游戏在液晶显示器上打反而效果不明显。当然初中我并不知道星际魔兽这些游戏。

我们在电脑课上经常偷偷打的游戏,一个是弹球和纸牌,一个是不停的往下跳,看能坚持多久,貌似叫是男人就坚持三十秒?,还有一个是两个比卡丘玩排球。不过我记忆最深刻的是一个滑雪的游戏,那个游戏的画面很诡异,尤其是我记得滑雪的时候,会突然冲出来一个怪物,一口吃掉你。这些都算是趁着老师不在的时候,偷着玩的小游戏。

阅读全文 »

我如果深度回忆起自己的小时候,我记得第一次接触游戏因该是几次看游戏的回忆。

一次是在我奶奶的邻居家,一个比我大一些的哥哥在玩一个游戏,如果没错的话,应该是《荒野大镖客》,当然这个哥哥自从搬走之后就再也没有见过了。还有一次是在我一个亲戚家,看见我的姨和舅们在那里玩,我记得他们笑得不亦乐乎,后来我才知道那个游戏叫《马戏团》。还有一次是在一个离家不远的理发馆,里面居然有一个街机,我看见一个比我大的人在玩,他还骗走我的两毛钱,实际上,到现在我也不知道那个街机游戏是什么。实际上我都不知道哪一件是先发生的,反正都是在小学的时候。

阅读全文 »

前言

实际上关于python装饰器,有很多可以写的,我这里仅仅对一些关键的概念进行梳理。

我喜欢跟人说,装饰器类似于在你执行一件事情(函数调用的时候)的前方做一些事儿,在后方做一些事儿。

我这个说法也许更应该算是解释,装饰器到底在干什么。实际上装饰器就是一个语法糖。

阅读全文 »

起因

实际上之前一直使用tornado异步,也大概知道tornado Coroutine yield的原理,从来不知道tornado可以支持“同时多个异步并发执行,等它们的结果都获取到再返回”,官网中给出类似的写法:

You can also yield a list or dict of Futures, which will be started at the same time and run in parallel; a list or dict of results will be returned when they are all finished:

1
2
3
4
5
6
7
8
9
@gen.coroutine
def get(self):
http_client = AsyncHTTPClient()
response1, response2 = yield [http_client.fetch(url1),
http_client.fetch(url2)]
response_dict = yield dict(response3=http_client.fetch(url3),
response4=http_client.fetch(url4))
response3 = response_dict['response3']
response4 = response_dict['response4']

所以这篇博客就来挖掘一下原因。

阅读全文 »