且行且珍惜

发布在

今天就是实习的最后一天了,做完了工作交接还真是清闲阿~祈祷明天是个好天气吧!!可千万不要像马航一样飞飞就消失了T_T。

也正因为清闲,所以看到了一个让我十分震惊的“小说”。突然后悔起来,怎么就没事瞎看,怎么就还全都看完了。有时候,无知真的是福气。

如果是几年之前的我看到这个,一定不会是现在这么冷静吧。这就是成长?不过真是没想到如此“曲折”的事情居然真的会发生,果然是艺术来源与生活阿!每个人都有自己选择未来之路的权力,最为一个旁观者,或许只能从文字之间去体会作者的情感了。

人生几十年,总是有人出现在我们的生命中,也总是有人消失在我们的生命中。从相识到相知再到最后的相离,其中掺杂了无数的苦辣酸甜,也正是这些构成了每个人不一样的回忆。我们无法控制何时相识、何时相离,或许想做到分离时“挥一挥衣袖,不带走一片云彩”,对别人来说却是“挥一挥衣袖,带走了整个天空”。分离时的撕心裂肺到几年、几十年后也云淡风轻了吧,或许还会成为大多数人不曾有过的回忆。

能够平静面对分离,真是一种境界。

最后,就像那句话说的——且行且珍惜(貌似这句话最近快被玩坏了?)。祝愿那些曾在生命中出现的过客安好。

评论和分享

趣文:追MM的各种算法

发布在

转自:http://blog.jobbole.com/65500/

动态规划

基本上就是说:你追一个MM的时候,需要对该MM身边的各闺中密友都好,这样你追MM这个问题就分解为对其MM朋友的问题,只有把这些问题都解决 了,最终你才能追到MM。因此,该问题适用于聪明的MM,懂得“看一个人,不是看他如何对你,而是看他如何对他人。”的道理,并且对付这样的MM总能得到 最优解。但确定是开销较大,因为每个子问题都要好好对待……

贪心法

基本上就是:你追一个MM的时候,从相识到相知,每次都采用最aggressive的方式,进攻进攻再进攻!从不采用迂回战术或是欲擒故纵之法!目标是以最快的速度确立两人的关系。该法优点是代价小,速度快,但缺点是不是每次都能得到最优解……、

回溯算法

基本上就是:追一个MM,但也许你还是情窦初开的新手,不知道如何才能讨得MM的欢心,于 是你只好一条路一条路的试,MM不开心了,你就回溯回去换另一种方式。当然其间你也许会从某些途径得到一些经验,能够判断哪些路径不好,会剪枝(这就是分 支估界了)。你也可以随机选择一些路径来实施,说不定能立杆见影(这就是回溯的优化了)但总的来说,你都需要一场持久战……该算法一般也能得到最优解,因 为大多数MM会感动滴!!但其缺点是开销大除非你是非要谈一场恋爱不可,否则不推荐使用。特别是你可能还有许多其他的事情要做,比如学习,比如事业……

阅读全文

今天需要在虚拟环境下使用pycurl,使用pip安装时候没问题,不过再代码中import后则报错:

1
ImportError: pycurl: libcurl link-time ssl backend (nss) is different from compile-time ssl backend (none/other)

解决方法:

  1. 卸载pip uninstall pycurl
  2. 执行:export PYCURL_SSL_LIBRARY=nss
  3. 使用easy_install pycurl重新安装。

转自http://www.tuicool.com/articles/qAFBvi

评论和分享

调试python程序

发布在 Python

怪不得这几天头疼的厉害,原来是发生了2件大事:官方的XP彻底和我们告别了and爆发了OpenSSL HeartBleed漏洞。这个漏洞可以说是一场大地震,不知道又会有多少网站被“扒光脱裤”,过一阵又得改密码玩了。面对这种网络安全问题,真的是一种待宰羔羊的无力感。

调试python程序我知道有3个东东:pdb,ipdb,pudb。

第一个是python自带模块,第二个如果安了ipython的话貌似自己就被安装了,最后一个有图形界面,十分复古的——蓝底,真是让人怀念。后2个都可以使用pip安装。
ipdb支持语法高亮,不过貌似中文支持不太好。

阅读全文

python列表展开

发布在 Python

某网站今年笔试题,本质就是把某多维数组变成一维数组并去重。本来要求用JS实现,不过用python更简洁一点,就是对列表进行展开操作,递归就KO了。

首先来个不简洁的:

1
2
3
4
5
6
7
8
9
10
11
12
13
arr = [1, [1, 2, [2, 3]], [4], [4]]
final=[]
def change(x):
print "x is:",x
if isinstance(x, list):
for l in x:
print "l is:",l
change(l)
else:
final.append(x)
print "now final is",final
change(arr)
print final

简洁的:

1
2
change = lambda x: [y for l in x for y in change(l)] if type(x) is list else [x]
print change(arr)

至于去重就使用set()就可以了。

评论和分享

Mongodb初用记录

发布在 Linux

关于介绍以及缺点等网上介绍很多,这里记录一下我遇到的问题:

首先就是使用yum install安装后的mongodb无法设定开机启动。其次,即使修改了/etc/monggdb.conf文件的相关路径,运行时还必须手动指定dbpath参数才可运行。

于是按照官方指南说明的方法,添加了mongodb的源,安装yum install mongo-10gen mongo-10gen-server之后chkconfig mongod on才能设定成为开机启动。不过使用service mongod start启动、停止、重起服务会出现假死。但是不影响使用。

配置文件为:/etc/mongod.conf

初始化脚本为:/etc/rc.d/init.d/mongod

数据存储路径:/var/lib/mongo/

日志文件存储路径:/var/log/mongo/

守护进程运行用户为:mongod

任何数据最最基本的操作不外乎增删改查:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
> db.test.save({a:1})
> db.test.find()
{ "_id" : ObjectId("530d3ec2d93e8e1410a1caf6"), "a" : 1 }
> doc = {author:'xsy',created: new Date('02/26/2014')}
{ "author" : "xsy", "created" : ISODate("2014-02-25T16:00:00Z") }
> db.test.insert(doc)
> db.test.find()
{ "_id" : ObjectId("530d3ec2d93e8e1410a1caf6"), "a" : 1 }
{ "_id" : ObjectId("530d3f1ed93e8e1410a1caf7"), "author" : "xsy", "created" : ISODate("2014-02-25T16:00:00Z") }
> db.test.update({author:'xsy'},{$inc:{check:400}})
> db.test.find()
{ "_id" : ObjectId("530d3ec2d93e8e1410a1caf6"), "a" : 1 }
{ "_id" : ObjectId("530d3f1ed93e8e1410a1caf7"), "author" : "xsy", "check" : 400, "created" : ISODate("2014-02-25T16:00:00Z") }
> db.test.remove({a:1})删除
> db.test.find()
{ "_id" : ObjectId("530d3f1ed93e8e1410a1caf7"), "author" : "xsy", "check" : 400, "created" : ISODate("2014-02-25T16:00:00Z") }
>

更换数据库:默认情况下启动mongodb shell后自动使用的是test库,想换的话使用命令 use newname:

1
2
3
4
5
6
7
> use mydb
switched to db mydb
> db.mydb.save({a:2})
> db.test.find()
> db.mydb.find()
{ "_id" : ObjectId("530d498ed93e8e1410a1caf8"), "a" : 2 }
>

如上所示,当切换(或者说新建)数据库mydb后,再查询test数据是不显示的。而数据库目录下也多处了mydb.ns、mydb.0等相关文件。

看了增删改查的操作后,发现mongodb的操作更类似于编程语言,操作都是对于函数的调用,条件则是函数的参数。而且居然还支持正则表达式的查询方式,甚至for\foreach这两种循环都有。带$符号的则是关键字。

啊哈,mongodb的存储过程居然是用js写,书到用时方恨少阿!!真得抽时间学学JS了…

继续看,发现可以直接把文件存放在mongo数据库中,用到了gridfs。突然想起,mysql中有一种类型叫做blob,用于存放文件。

要在python中操作mongodb,需要一个pymongo,文档:http://api.mongodb.org/python/current/tutorial.html

评论和分享

django自带的评论模块

发布在 Django

某个设计本来采用了一个比较不错的在线评论模块,不过答辩的时候丫居然不给网!!想偷个懒还是挺难啊….

那就用自带的评论模块吧,django版本是1.5.3。

首先把'django.contrib.comments'添加到INSTALLED_APPS中,然后添加url:

1
2
3
4
5
urlpatterns = patterns('',
......
url(r'^comments/', include('django.contrib.comments.urls')),
......
)

在需要显示评论的HTML中:

1
2
3
{% load comments %}
{% render_comment_list for post %} <!--显示所有属于这个文章的评论-->
{% render_comment_form for post %} <!--显示自带的添加评论的form-->

不过自带的添加评论实在太丑了,我们可以自己改造一下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{% get_comment_form for post as form %}
<form action='{%comment_form_target%}' method='post'>
{% csrf_token %}
{{form.object_pk}}
{{form.content_type}}
{{form.timestamp}}
{{form.security_hash}}
<p><label for="id_name">姓名(必填):</label><input name="name" id="id_name"></p>
<p><label for="id_email">邮箱(必填):</label><input name="email" id="id_email"></p>
<p><label for="id_url">网站(可选):</label><input name="url" id="id_url"></p>
<p><label for="id_comment">评论(必填):</label></p>
<p><textarea id="id_comment" rows="10" cols="40" name="comment"></textarea></p>
<p style="display:none;"><label for="id_honeypot">垃圾评论。</label>
<input type="text" name="honeypot" id="id_honeypot"></p>
<p><input name="post" value="发表" type="submit" /></p>
<input type='hidden' name='next' value="/blog/post/{{post.id}}"/> <!--这个是提交后的重定向,使用软编码总报错...-->
</form>

然后再进行CSS或者JS一类的特效美化就OK了。

评论和分享

自己封装了一个logging在django中使用,结果发现输出的时候总是重复输出,比如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
DEBUG---- 2014/03/31 10:38:13:
!!
DEBUG---- 2014/03/31 10:38:13:
!!
DEBUG---- 2014/03/31 10:38:13:
!!
DEBUG---- 2014/03/31 10:38:13:
!!
DEBUG---- 2014/03/31 10:38:13:
140091903388560
DEBUG---- 2014/03/31 10:38:13:
140091903388560
DEBUG---- 2014/03/31 10:38:13:
140091903388560
DEBUG---- 2014/03/31 10:38:13:
140091903388560

可以看出,id都是一样的。而且我查了一下,正好4个地方引入了mylog。mylog的完整代码见以前日志,这里给出导致错误的原因:
self.logger = logging.getLogger(__name__)

简单测试:

1
2
3
4
5
6
mlog = MyLog()
print id(mlog)
print id(mlog.logger)
xmlog = MyLog()
print id(xmlog)
print id(xmlog.logger)

结果如下:

1
2
3
4
123456666
123456789
123457777
123456789

可以看出虽然类id不同,不过核心的logger却是一个。因为我们执行runserver后,__name__就确定为mylog了,所以不管我们引用的时候如何写,__name__不变则都指向了同一个logger。更简单的例子如下:

1
2
3
4
5
6
In [1]: x = 1
In [2]: y = 1
In [3]: id(x)
Out[3]: 11279464
In [4]: id(y)
Out[4]: 11279464

更细节的原因可以看《python源码分析》。

改起来就让__name__不一样就解决了。比如:

self.logger = logging.getLogger(str(uuid.uuid4()))

评论和分享

  • 第 1 页 共 1 页
作者的图片

Roy

微信公众号:hi-roy


野生程序猿


China