用Tornado连接新浪微博

前几天心血来潮,稍稍看了一下Tornado框架,感觉这个框架和web.py很像(因为本来Tornado就是在web.py的基础上修改而来的)。

微博的API就是微博官网上的那个新的API,可以从这里下载。网上有很多的教程,不过用的都是原来的API,不过也可以参照。不多说了,直接贴代码,不过这是简写的,不过可以连接到微博了。

#! /usr/bin/env python
# -*- coding: utf-8 -*-

import tornado.web
import tornado.ioloop

from weibo import APIClient

APP_KEY = '*****'
APP_SECRET = '******'
CALLBACK_URL = 'http://apps.weibo.com/webotxyz/callback'
# 这是回调地址,必须在微博应用的域名下面,否则报错

class Index(tornado.web.RequestHandler):
    def post(self): # 注意,这里是post
        client = APIClient(app_key=APP_KEY, 
                           app_secret=APP_SECRET,
                           redirect_uri=CALLBACK_URL)
        url = client.get_authorize_url()
        # self.write('<a href="' + url +'">click</a>') 
        # 用户点击链接后跳转到验证界面
        self.redirect(url) # 直接跳转到验证界面

class Callback(tornado.web.RequestHandler):
    def post(self): # 注意,这里也是post
        code = self.get_argument('code')
        client = APIClient(app_key=APP_KEY,
                           app_secret=APP_SECRET,
                           redirect_uri=CALLBACK_URL)
        r = client.request_access_token(code)
        access_token = r.access_token
        expires_in = r.expires_in
        client.set_access_token(access_token, expires_in)
        # res = client.get.statuses__user_timeline(screen_name='iEverX')
        # 这以后就可以自己调用API了,比如上一句就是抓取我的最近的微博

app = tornado.web.Application([
    (r'/', Index),
    ('/callback', Callback),
])

if __name__ == '__main__':
    app.listen(9009)
    tornado.ioloop.IOLoop.instance().start()

我的应用的源码在这里http://github.com/iEverX/webotxyz,不过我的应用不可能上线的了,因为抓取数据存到邮箱了。。

下面是我在里面用到的一段Python发送邮件的代码,比较短,可以充分的看出Python的简洁

#! /usr/bin/env python
# -*- coding: utf-8 -*-

import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart

def send_mail(mail_from, mail_to_list, subject, content):
    from_format = 'Ever' + '<' + mail_from + '>'
    # 格式应该是这样的 Nickname<username@host.address>,中间无空格
    txt = MIMEText(content, 'html') # 若content中有html编码
    # txt = MIMEText(content) # 若content中没有html编码
    txt.set_charset('utf-8')
    msg = MIMEMultipart()
    msg['Subject'] = subject
    msg['From'] = from_mail
    msg['To'] = ';'.join(mail_to_list)
    msg.attach(txt)
    try:
        s = smtplib.SMTP()
        s.connect(mail_info['host'])
        s.login(mail_info['sender'], mail_info['sender_password'])
        s.sendmail(mail_info['sender_address'], mail_to_list, msg.as_string())
        s.close()
    except:
        return false
    return True

嗯,这篇文章几乎都是代码,就当是自己的备忘录好了。。

香港游小记三(完)

回到了北京,香港之旅正式结束了。这一趟,身在香港的时间,是四天。前两天的情况我已经在前两篇博客中说过了,这篇就主要说说后两天的活动,还有自己对应香港之行的一些感觉。

8月29日

金融管理局

香港金融管理局在香港的国际金融中心(International Financial Center, IFC)的55层,相当于大陆的中央银行。在这里,就是了解了香港的金融发展历史以及港币的真伪辨别知识。不过我并非是学金融、经济的,所以对这个方面并不感冒,感觉上是相当的无聊。

在IFC的二层,有一个苹果的专营店,rMBP,Air,iMac,iPad,iPhone 5等等,应有尽有,而且可以随便玩。整个中午,我们一群人除了吃饭,就是在这里消磨时光。看着这么多的Mac,再看看自己的钱包,只能望洋兴叹了,没办法啊。。

廉政公署

廉政公署(Independent Commission Against Corruption, ICAC)成立于1974年,是专门负责打击贪污行贿受贿的腐败行为,是香港清廉的一大原因。和大陆的反腐机构反贪局相比,ICAC独立于政府,也就是说,ICAC办案工作等,政府是无权干涉的。而大陆的反贪局则隶属于检察机关,原本检察机关和政府也是两个平行的机构,但是由于大陆的复杂情形,地方政府和检察机关往往是相互纠缠在一起,也就失去了独立性,从而使得反腐工作难以有效进行。

8月30日

今天上午,我们来到了香港的高等法院,旁听案件。不过,我们一群人进到法庭,完全失望了。大约在法庭上待了40多分钟,一直只有法官一个人在说,而且是标准的英式英语(我猜的,因为感觉不是美音),完全就是听不懂,只能偶尔听见几个单词。怎一个郁闷了得。。在我们退出法庭后,吕广基先生说了下,大致就是这是一个贩卖毒品的案件,现在法官再向陪审团介绍案情,一丝不漏的介绍,从而使得陪审团确定几个嫌疑人是否有罪,若有罪,法官量刑,否则,释放。虽然感觉上这个不是一个无聊的案件,可惜英语水平不行,再加上并没有看见自己原本期待的原告被告律师的辩论,只能得出无聊二字而已。。

香港印象

在香港的时间只有短短的几天,却也对香港有了一个初步的印象。

  1. 风水
    我的感觉是,香港人很信风水。才到香港,导游就和我们讲了香港的一些和风水相关的事情,比如黎姿改名、两面三刀、政府大楼前面的龙等等。在某天晚上,我去庙街,道旁一溜都是算命先生,而且确实有人在问卦看相等等。风水先生完全不用为生活发愁,而那些名气大的风水先生(我记不住名字,香港人一定是知道的), 那就更不用说了。对于风水是否迷信,我以为就是,信则灵。

  2. 自由
    香港是个自由的城市,不论哪个方面。当然感受最深的还是言行自由。在香港,没有Great Fire Wall,访问Google、YouTube等等完全无压力,没有出版物审查,传媒不会受到政府的左右,更不会传为政府的传声筒,即使在大街上,都是随处可以见到许多的保钓宣言、反共标语、法轮功宣传和反法轮功宣传等等,这一切在大陆都只是传说而已。应该说,这是一个值得大陆去学习的地方。在目前,虽然说,大陆在言论上是趋于自由的,但是在涉及到政治的言论上,绝对是一下摁死。我认为,正是这种过于苛刻的政治化的审查、监管力度,才导致许多对于共产等的不满言论。治水,都要讲究堵不如疏,更何况人呢?

  3. 消费
    在香港,收入都是以万为衡量单位的。当然,收入高,平均的消费水平也高了,这几天在香港,每天在外吃饭,最便宜的一餐是20港币,平均是三四十港币,相当于人民币25到35元,注意,这是普通的小店消费,在北京,这种小店的消费最多20元到头。不过,香港的生活日用品比大陆便宜,电子产品、奢侈品等就要比大陆便宜一大截,因为香港是实行零关税,自然价格就相比于其他地区的加关税的价格更有竞争力。所以许多赴香港旅游的旅客,基本上会有一天或者两天时间是专门用于购物的。

  4. 公共环境
    注重公共环境是香港的一大特色。第一天到香港,导游就和我们介绍了一些法规,随地吐痰,罚款1500港,闯红灯,罚款2000港,公共场所吸烟,罚款1500港。这些,都说明了香港人对公共环境的重视。同时,在香港,如果在地铁或者大巴上吃东西或者喝饮料(可以喝水)都会被罚款1500港,因为吃东西会散发气味,影响到其他人。

  5. 贫富差距
    贫富差距,不论在哪个国家、哪个地区,都必然存在,香港同样不例外。在香港,最贫穷的人,叫做笼民,他们住的地方,是一个笼子,一家人晚上睡在里面,白天上班,把笼子锁上。笼子就是他们的家。条件稍微好一点的人,一家两代或者三代,住在十几二十平米的小屋,只有一个窗户,这种房子叫廉租屋。再好一些,就是自己买个几十平米的房子。而最富有的人,香港的大富豪们,比如周星驰、周润发、李嘉诚等等,那就是住在香港最富的地区了。

以上就是对香港一些初步印象,可能还有一些其他的东西,但是我写不出来,也可能有些东西写出来了,但是不是很正确或者过于泛泛。。不过限于文笔,只能如此。。

香港游小记二

GAMA协会吕广基先生演讲

8月28日,早8点30分,我们登上了大巴。除了导游之外,还有一个陌生的精干男子,大约40多岁的样子。我原以为这名男子是旅游公司的人。在之后,我发现自己错了。男子自己介绍,自己有52岁,而且是今天就是他要在今天上午给我们做一个演讲。

来到目的地GAMA协会,他做了自我介绍,他名字叫做吕广基,英文名叫做Aaron Lui。吕广基先生给我们做了一个长约两小时的演讲。由于其幽默风趣的演讲风格以及确实言之有理、有极大启迪意义的演讲内容,我们一行人从他的演讲中获益良多。

从他的演讲中,我主要学到了一下几点:

  1. 敢于突破
    吕广基先生曾经有一份月薪2万6的一个政府公务员职位,这是一个相当稳定的职业。但是他却并不想今后的一辈子就是这样的度过,他认为自己应该有更大的价值,毅然放弃了优厚的待遇,投身保险行业,并且在新行业近8个月,薪水就已经和公务员时期持平了。在当时的大环境下,这样一种行为,在别人看来,显然是一种理智的行为。不过,在吕广基先生看来,这是一种对于自我价值的追求。这一步突破,就是为了能够更好的实现自己的价值。

不仅仅如此,在保险行业工作了很长世界之后,吕广基先生又做了一次“大胆”的举动,辞掉了保险公司的工作,继续追寻更高的价值。 我想,现在的我,如果在遇到吕广基先生所遇到的情况,我会和他坐一样的抉择的可能性是多少呢?我也不清楚,不过会很低,因为我不是一个喜欢冒险的人,毕竟新的工作和旧的已经相当熟悉的旧的工作要相差好多。我想,之所以如此,和我自己的性格有关,但也和自己思想上的桎梏相关,因为我并没有那种必须要突破,必须要追寻自己的更高的价值的意识。

  1. 成功之路
    一个人想要获得成功,吕广基先生结合他自身的情况,认为以下是最重要的的几条。 > * 梦想(Dream) > * 目标(Target) > * 欲望(Desire) > * 行动计划(Action Plan) > * 定期检查(Check Point)

    想要获得成功,这五点不可或缺。其中,梦想是自己的一种并不是很具体的一种“梦”,而目标则是具体的事情。欲望则是获得成功的路上不可或缺的。不过,前面的几条都是一种说的层次上,要想真正的实现自己的价值,获得成功,行动计划必不可缺,没有行动计划,一切的“梦”,目标等等,都只是一句空话而已。同时,必须要定期检查以确定行动计划是否完成了预定的目标,从而改善行动计划。

  2. 生活态度
    从吕广基先生的演讲中,可以清晰地感觉出他对于生活的态度,从他对于他的家庭的描述,也可以看书他是一个非常乐观的人。除却乐观,他能够吧工作和生活分开来看。工作就是工作,不会把工作的心情带回家,更不能由于工作上的事情在家里生气。

我认为,这是一种相当好的生活态度。工作的事情,在怎么烦心都是工作上的事情,在家里面,这件事情完全是无关的事情,不能让家里人也受到工作的影响。

香港迪士尼乐园游玩

上午的演讲,是对我们的一种教育,下午的迪士尼,则是纯粹的游戏玩乐。

Thank to the very hot weather in the afternoon,再加上背着一个双肩背,自己的背部一直就是湿的。不过湿的衣服并不能影响我们玩乐的热情。在我玩过的几个项目中,最刺激的那就是“飞越太空山”了,这就是一个过山车,疾速行驶的过山车,伴着或高或低,或缓或急的变速,给人以强烈的刺激。此外,4D电影也是极其的震撼,戴着眼镜坐在座位上,看着一个一个的物体尽在眼前,跟着剧情乘坐飞毯,并且感受着极其和电影中人物同样的感受,淋水、香气等等,确实让人回味无穷。

香港游小记一

8月25日5点出发,8点上火车,26日晚10点左右到达香港明白英奇酒店,再到现在,其实在香港才逛了一天,不过还是有些东西想要写下来,或者是一些感受,或者就是一些流水帐似的记录。

火车上

在火车上,其实是大家认识的一个过程。总共30人,在之前,大家都是谁都不认识谁。而在火车上的24个小时,就是提供了一个让大家相互了解的机会。这么多人主要分成了两个大拨,一拨是杀人游戏,一拨是三国杀,24小时里,基本上有16个小时,我一直在杀,两个杀都玩了。这样,24个小时的火车也就不会那么无聊了。。下火车的时候,已经可以把大部分人的名字和模样对上号了。。

逛旺角

旺角是香港的繁华地带,但是呢,我们起得太早了。因为在香港,一般的铺面是在早10点才开始营业的。而我们在8点半就集合带出酒店了。原因么,可能是,我们原来定的是上午去香港中文大学,但是因为一些时间上的问题,改到了下午,然后我们还是按照原定的8点半集合了。。然后我们就真正的逛了一个上午的“街”。

港中大和香港理工

下午我们去了港中大和香港理工两所大学。这是我们此行参观访问的唯“二”的大学。

港中大

香港中文大学建校于1963年,到现在也才50年不到。不过,港中大的学术地位,已经不容质疑。同时,港中大还是香港惟一的一所书院制大学。港中大提倡“全人教育”,理智学院负责学生的“形式教育”,也就是专业课等课程,而书院则负责学生的“非形式教育”,包括通识教育、非专业课以及各种活动等,同时负责学生的生活、住宿等。

相比于大陆的大学,重视学生的专业刻教育,却对德育等其他方面有所欠缺,港中大所提成的“全人教育”显然更加注重学生的“全面发展”,而非只是一种大陆常提的“口号”。

这一点在三个港中大的学生的一些对于港中大学习生活的分享中也可以看到。我清晰的记得其中一个林姓的同学说,他们书院的义工活动不仅仅关注香港的老人儿童,他们去了乌干达、柬埔寨等等落后的地区,提供义务服务。我不知到大陆的大学是怎样的,但是我知道我的学校肯定是没有这样的活动的。 PS,即使2013年,也就是明年就是港中大的50年校庆,港中大内(至少我们乘坐大巴的这一大段路上)并没有为了校庆而大兴土木以至于无法通车、干扰正常生活等等现象。

香港理工

在香港理工我们听了一些关于香港理工的介绍,也参观了它的工程中心和图书馆。给我感触最深的还是图书馆。

香港理工的图书馆,称作包玉刚图书馆,共有六层,其中一、三、四层藏书,五层是期刊阅览室。和大陆不同,香港采用的并非国图分类法,而是美国国会图书馆分类法。同时,除了书和期刊,包玉刚图书馆还提供有音像制品的外借服务,比如一些音乐CD,电影碟片等等。在图书馆的每一层都设有若干的电脑,供学生查阅电子资料。而最让我喜欢的是,图书馆提供了85个Research Carrel,供研究生和任课老师使用。所谓的Research Carrel,就是一个小的单间,配有电脑和一张相当不小的桌子,以便可以不受影响的做些研究。除了这些,包玉刚图书馆的环境很好,虽然是1972年建馆,但是新近没有装修的几个楼层,完全看不出有什么老旧之处。

相对于包玉刚图书馆,我不免对于本校的图书馆有些失望。先说硬件,我不清楚本校的图书馆是何时成立的,但是显然,并没有包玉刚图书馆看起来新。然后说软件,藏书量上,我不清楚,但是本校的图书馆并不提供阅览用的电脑(或者是有,但是我不知道,而且即使有应该也是收费的),至于音像制品当然更是没有(对于音像制品,并不是一个图书馆必备的条件,也不是一个图书馆是否足够好的一个判断标准,这里只是陈述一个事实)。其他的一些我也说不清楚,但是,如果让我选哪个图书馆更好的话,显然是包玉刚图书馆。而且,显然一个好的图书馆会对学生的查阅资料、进行研究有一些正的加成。

从以上港中大和香港理工的一些小方面来看,大陆高等教育的不发达可见一斑。

平顶山

杜莎夫人蜡像馆

杜莎夫人蜡像馆享誉全球,我们一行人也在晚上来到了这里。不过,可能对于杜莎夫人蜡像馆的期望值过高,馆中的真人蜡像并不能完全的打动我。里面当然有些栩栩如生的蜡像,比如美国总统奥巴马,真的是相当的逼真。不过,其他的一些蜡像并不是那么的惟妙惟肖,特别是眼睛,可能也是由于眼睛是心灵的窗户,而蜡像是没有心灵的,所以也就没有传神的眼睛。不过,虽然如此,我们也是玩得相当的痛快,毕竟拍在照片里,还是足以以假乱真的。在杜莎夫人蜡像馆里,除了蜡像,还有一个鬼屋。不过,在我之前那一队人进入之后,工作人员说需要等一个小时才能轮到我们(可能是出现了什么问题,没有说),但是我们还有一个小时不到就要集合了,无奈只能放弃。更可气的是,在我走后大约10分钟,就可以近人了。。Oh,shit!

幻彩咏香江

如果说杜莎夫人蜡像馆只是一点点的不那么的逼真,那么,我看到的幻彩咏香江就是完全的名不副实。8点钟,我们集中到平顶山的一个观景台。预想中的灯光璀璨、绚丽场景并没有出现,有的只是几道白光偶尔的直射灰暗的天空。不清读是我们的观景为止不好,还是幻彩咏香江本来就如此,抑或是之前导游的描述让我对幻彩咏香江有了太高的期待。不过,在平顶山观看夜景,可以看到相当美丽的一幅画面。不过,所有的人关注的几乎都是那个知名度极高的幻彩咏香江,又有几人会欣赏这美景呢?或许只有幻彩咏香江结束之后,才会有人注意到吧。

浮躁的暑假浮躁的我

没有几天,暑假就结束了。从6月26日正式放假以来,感觉自己在放假之前画的大饼完全没有实现,可以说,整个暑假是一事无成。个人感觉都是浮躁惹的祸。

总结一下自己在暑假之前画的大饼

  1. 预习数据库
  2. 看算法导论,学习算法,POJ
  3. 好好学习C++
  4. 用博客记录自己的进步历程
  5. 学习Android开发,参加Google的Android开发大赛
  6. 学习一些Linux内核方面的东西,做实验项目
  7. 学习游泳
  8. 充实英语,看英文小说The Twilight Saga(因为我有这个系列的纸质书)

感觉好多啊。然后这个暑假自己做的和这些相关的事情

  1. 数据库在暑假前几天看了一些,《数据库系统概念》,很经典的书,呵呵。第四章没看到,就再没看过
  2. 算法导论看到了栈和队列,还有好多部分是在暑假之前看的。之后也撂下了
  3. C++的书,看了些《泛型编程与STL》,不过这不是我之前要干的事情。我想的是强化基础,看这个完全是临时起意
  4. 博客,除了一篇关于Linux内核编译的,再没写过一篇,而且那篇由于那是实验室给了个编译内核的任务。这个博客是在这里
  5. Android开发,只会一些最基本的东西。完全没有能力做出一个App来。管我们这组的师兄估计要哭了
  6. Linux内核方面,《Linxu内核设计与实现》看到了中断的下半部(bottom half),之后就没看了,现在也忘的差不多了
  7. 游泳还算做的不错,现在可以游几十米了,虽然换气换不好,动作不标准。
  8. 这个小说只在暑假前几天看了些,查了词典。之后就看得很少,到现在为止只看完了一章。

然后是自己做的另外一些事情

  • 看Haskell,完全是一时兴起,在网上看的Real World Haskell,只看了两三章
  • 看Ruby,这个其实只看了一下,几个小时。然后是一点都不会写
  • 搭建Jekyll的博客,就是你先在看到的这个。这个花费了大量的时间和精力
  • 然后也想着看看C#的,结果宿舍同学的书写实在是太烂了,没法用,就没看、
  • 用Python跟着教程写了一个Todo应用。又写了一个博客系统selog,当然博客系统没完成,效率也有待提高,现在还是一个渣

最后列出的那几个,其实都是自己在执行预定目标时,不想继续进行了,才临时想到去做的。可以算是一种逃避,也可以说是浮躁,急于求成,急于看到成果。这个结果就是自己每样都了解浅浅的一层,一到动真格的,就废了。其实发现自己这个问题很长时间了,但是一直就改不掉(貌似知道毛病在哪,但就是改不掉也是我的一个毛病,囧。就比如晚睡晚起,每天晚上睡不着,有时候是困死了就是不睡,每天都都睡到中午。但就是明知道症结就是在晚睡上面,还是会晚睡)。现在,就期望自己能够渐渐的学会控制自己,压抑住浮躁,否则我还真是无计可施。

最后说一下对于下个学期的打算,这次希望不会再和这个暑假一样了

  • 数据库、编译、软件工程三个有大作业的课大作业按时完成,不能像这个学期一样都压倒期末
  • 在保证课上成绩的同时,研究操作系统,主要是Linux内核,不能说去实验室就是去玩的
  • 英语还要继续努力,大学毕业六级成绩600分是我的梦想
  • 体育锻炼,下个学期的体育报的是长跑体能,这个估计够我练的了。时不时再去锻炼一下游泳技巧。好滋润

在最后,浮躁横行的社会,必须能够沉下心来,才能做出成绩!

编译Linux内核

这几天实验室交给任务,编译linux内核。然后就开始做了。

师兄给了两篇参考文章,这篇这篇。第一篇比较简略,说了总体的过程,而第二篇比较而言就比较详细了。

好了,现在说说自己的编译的过程吧。

下载源码并解压

源码从这里下载,我下载的是最新的3.5-rc6。具体那个版本都是差不多的。然后需要把源码解压到/usr/src这个目录下,我是ubuntu用户,其他发行版相似

sudo cp /path/to/file/linux-3.5-rc6.tar.bz2 /usr/src
sudo tar jxvf linux-3.5-rc6
cd linux-3.5-rc6/  # 进入源码的目录,以后所有操作均在该目录下完成

删除之前编译的残留文件

sudo make mrproper

如果是第一次编译的话,可以不用执行这一步。而如果之前曾经编译过,务必执行这一步,清除残留文件,否则可能会导致编译失败。

配置编译选项

sudo make config
sudo make menuconfig
sudo make xconfig

这三个命令任选一个执行就好了。区别是

  • make config
    问答式的配置,选错之后无法更改,所以一般人都不会用这个。

  • make menuconfig
    这个命令需要ncurses库的支持,ncurses是字符界面下的图形界面库。可以通过apt-get install libncurses5-dev来安装。ncurses是字符界面下的图形界面库,所以如果使用的字符控制台,就可以用选用menuconfig了

  • make xconfig
    这个命令需要Qt,这是个跨平台的图形界面库。可以通过sudo apt-get install libqt...来安装,具体是那个包忘记了。xconfig就是图形界面下的配置环境了。

xconfig用着最舒服,menugconfig也可以,不过界面难看了些。config自己没用过,也不推荐用。

这一步其实应该是很重要的一步,不过由于选项众多,且众多选项和硬件相关,需要有足够的硬件知识,并且对自己电脑的硬件配置有足够的了解才可能完全配置的好。网上有许多专门讲这一步的文章,比如金步国的这篇经典文章,不过由于版本还是2.6,所以有许多选项文章里面没有讲到。

由于本人是个菜鸟,对于硬件以及其他的知识都不是很清楚,再加上这么多的选项,所以大部分都是默认的选项。当然,这样就使得modules过多,使得之后的make modules的时候花费了大量的时间。所以应该尽量的减少不需要的模块,特便是其中的许多针对不同的硬件的驱动。

编译内核

sudo make bzImage

在我参考的第二篇文章中说,他编译出来的内核大约在800k-900k左右,可是实际上我编译出来的内核一般在4500k左右。可能是由于版本的差异吧,不用纠结在这个上面。

在编译结束后,会告诉你bzImage的位置,然后执行

sudo cp /path/to/bzImage /boot/vmlinuz-3.5-rc6

把其放到/boot目录下。这里我把它重命名为vmlinuz-3.5-rc6?为什么是这个名字?自己看看/boot,更深层原因我也不知道了。

编译模块

sudo make modules

上边也说了,这个阶段的时间是和配置选项那一步中选择的模块的多少直接相关的。有时可能会遇到rts5139.ko undefined的错误,可以在配置选项时去掉rts5139这个模块。

安装模块

sudo make modules_install

这一步没什么说的。有时可能会出错,并让你make CONFIG_MISMATCH=y(这个选项记不清了,不过差不多了),可以不用理。

安装内核

sudo make install

这一步比较快。在这一步,系统会自动更新grub。

如果以上完全弄好了,那么就可以重启进入新的内核体验了。不过有的同学在重启后可能会遇到这样一个问题,就是无法进入图形界面了。 提示类似如”ubuntu run in a low-graphic mode”,“Your screen, graphic card, input devices cannot detected correctly. You need configure it yourself.“等等。 这时可以Ctrl-Alt-F1或者Alt-F1进入控制台,sudo apt-get install gdm之后选择gdm即可。如果还不能解决问题,对于ATI显卡,可以安装fglrx。由于我不是ATI的显卡,所以是否可行我就不是很清楚了。更具体的可以google之。

Python的逻辑运算

Python的逻辑运算(and,or,not)与C/C++、Java等语言不太一样。这些语言的逻辑运算返回的值都是bool值,而Python返回的则不同。

先说非运算,Python的非运算与这些语言相比,并没有特别的地方。not只有两个返回值,True和False。在Python中,真值为假的对象,包括False,None,数字0,空字符串以及空的容器类型。除此以外的任何对象均为真。

接下来是与运算,Python的与运算的规则是

  • 若左边的表达式为真,则返回右边表达式的值
  • 否则,返回左边表达式的值

初看起来比较奇怪,一个逻辑运算搞得这么复杂干嘛?这么做当然是有目的的。当我们需要的不是一个表达式的bool值而事实其表达式的值,但是只是需要根据这个表达式的bool值确定下一步的动作,就会发现这种规定的好处了。

比如需要统计一下重量在500克以上的桃子的重量,用C写,可能会写成这样

for (i = 0; i < n; ++i) {
    if (weights[i] > 500)
        sumofweight += weights[i];
}

用Python,就可以这样写

for x in weights:
    sumofweights += x > 500 and x

显然是简单了许多。

最后再来说或运算,Python的或运算的规则是

  • 若左边的表达式为真,则返回左边的表达式的值
  • 否则,返回右边的表达式的值

这个规定和或运算的目同出一辙,都是为了简化代码,增加效率。

可能有些同学觉得and和or的规则比较复杂,不容易记忆。其实,这是不需要记忆的,因为,无论是and还是or,其结果的值就是最终决定整个表达式真值的表达式的值

对于与运算

a and b
  • 如果a为真,继续计算b,b将决定最终整个表达式的真值,所以,结果为b的值
  • 如果a为假,无需计算b,就可以得知整个表达式的真值为假,所以,结果为a的值

对于或运算

a or b
  • 如果a为真,无需计算b,就可得知整个表达式的真值为真,所以结果为a的值
  • 如果a为假,继续计算b,b将决定整个表达式最终的值,所以结果为b的值

最后再说一下and or表达式,通常所说的and or表达式是指如下的表达式

condition and a or b

这个表达式和C中的唯一一个三目运算符

condition ? a : b

比较相似,但稍有不同。C中三目表达式的语义如下

if condition:
    a
else:
    b

但是Python的and or则不同,由于Python的逻辑表达式的运算规则,必须保证a的真值为真,才和C的三目运算符相同,而若a为假,不论condition的真值为何,总会选择b而非a。

可以说,Python的逻辑运算给程序员带来了极大的编程快捷,但是若不能理解其如此设计的原因,就不能自如的运用其便捷性,甚至造成错误而不知。