2010
07.18

回家有点懒,也没什么时间用电脑,这篇日志基本是等上车的时间用手机打的。
7月16日
学车第一天,一直下着中雨,去练习场的路上还在施工,各种不爽。
上午9点多到场地,在几辆破吉普上稍微转了会方向盘,就开始学倒车了。桩考前总共30个人一辆车,所以要在旁边等很久。等的无聊了,一个高三毕业的小弟弟去买了牌,和两个大三的姐姐开始打斗地主。我没怎么打过,就在旁边观战。
前几个上去开的人中有个大叔,开车老是熄火,看得都很纠结。然后貌似还因为他换档用力过猛,把档位搞坏了,害得我们在一旁等修车。
下午2点多我才第一次倒车,都不知道前后标志物是啥,完全凭感觉开,结果被骂没有方向感、乱开。然后还两次刹车踩下去忘了抬,起步直接熄火,踩着刹车完全没感觉的,亏我还笑别人熄火。。
下午3点多就直接教移库了,等轮到我上车时都到了6点多,上了车师傅一阵教训,直接把动作都忘光了,基本是师傅在车旁拉着方向盘过的。感觉教我们的师傅很没耐心,中间驾校的其他师傅来指点的时候都每个人一点一点说清楚,我们的师傅只讲一遍,做的不好就训话。
7月17日
今天继续练移库,师傅基本不在,没那么紧张了,开的倒还好,就是移库结束开出去的时候老是碰杆。上下午各开了一把,然后晚上近七点的时候我开了最后一把,就结束了,还有几个在旁边苦等的都没轮上。
等上车的时间基本就在打牌,上午在车篷打包分,下午干脆找了个有空调的空房间斗地主,感觉还是很happy的。
回家还是很晚,吃饭洗澡什么的去掉又没什么时间了,觉得一个暑假就要荒废在驾校了。

2010
07.10

世博游记

前天晚上,我们信工6个下周要继续留校的可怜人临时决定昨天去世博玩。因为有同学当过志愿者,我们几乎没有做任何准备,仅仅是查了下去世博的公交路线,其他等进园再商量。
起床已是8点,经过大概2.5小时的车程,11点时我们终于踏进园区。
第一个进的是公众参与馆,稍微走几步路就看完了,除了有个摆世博模型的平台,其他东西并没有给我留下什么特别的印象。
往前走一小段,看到毛利土着在新西兰馆前表演舞蹈,这是新西兰馆日的特有表演,可惜我们当时并不知道,在澳大利亚馆和新西兰馆间犹豫了一下,选择了澳大利亚馆。
预计一个半小时的队伍,只用了不到一小时,在推上聊聊天也就这么过去了。长长的通道,澳大利亚的历史、文明以蜡像、图片等方式陈列在两边,从殖民时代到2008年新任总理陆克文的上任,不过我貌似记得陆克文已经下台了,新的历史并未在此出现。看完了历史,又排了十几分钟队,终于进入电影放映区。进去时,环形银幕收在地下,让我对如何放映充满好奇。也许是因为第一次来世博,当环形银幕升起时,我还被小小的震撼了一下,以不断旋转的屏幕放映和实物变换交替展示的形式也颇有风格。短短几分钟的影片也还是比较有深意的。

继续阅读全文 >>

2010
06.04

今天是上推以来第一个六四纪念日。21年前的真相并不重要,在此我只是为当日的遇难者哀悼,并向这么多年一直追寻真相的人们致敬。

2010
05.31

感谢国家,感谢世博,终于又有一周假期可以回家了。回到学校一直很忙,Blog都一个月没上了,上篇日志还是在家更新的,现在坐在同样的位置,同样的电脑,居然登不上Blog了,还要挂上VPN,情何以堪……
对这个月的生活做下总结:
放完假回到学校,为了二专的一篇论文和一个PPT纠结了大概两个礼拜;
其间顺便研究了一下Twip API的搭建,在收到n个空间的开通信后终于成功的在3个不同的主机上成功了,但真正实用的只有一个;
成功抹掉了小说时间,这个月只读了《1984》;
因为SB的原因整月都是一周七天课,有段时间干脆被作业全占了;
因为间断了太多时间,没能继续背单词;
大致配好了Ubuntu,但只用了3天,还是Win7顺手;
每天花了太多时间挂推,也许该淡一下什么的;
上午出门考了驾驶理论,等暑假回来学车;
貌似就这些了吧,坐在家里无比安逸,也许过两天回学校又要忙了。。

2010
05.04

一直期待传说中的Ubuntu 10.04发布,好尝试着改变一直用Windows的状况。

预定发布日期为4月29日,中午我就在网上搜到了别人破解出来的链接,禁不住诱惑就直接开始了偷跑。因为担心安装过程中出现什么问题,下完后还是选择了晚上再装。

说到安装Ubuntu,作为一个技术小白我还是老老实实选择了在Win下安装,10.04的安装程序做的很傻瓜化,在连接网线安装的情况下自动下好了语言包、输入法等,基本不用再做任何额外的设置。下载使用的软件源居然还是自带的中国服务器,速度还算不错,连添加软件源的工作都省去了。

其实最让我担心的并不是基本的安装,而是笔记本的无线驱动到底要怎么搞定。上次曾经装过一次Ubuntu 9.04,因为无线网卡不兼容又不想总连着根网线,就直接放弃了。这次安装前,我还特意搜集了一堆网卡驱动教程,结果安装完成后发现无线网卡被自动识别了,使用一切正常,倒是省了不少时间。

关于界面
我对Ubuntu没什么了解,对传说中的更为漂亮新界面也仅仅是感觉还不错而已。因为对Mac风格的标题栏实在是不太习惯,就down了个Ubuntu Tweak改掉之。至于3D桌面什么的目前还没有装,打算过段时间再说。

关于软件
Ubuntu里的Firefox的版本还是比较新的,安装完系统后第一件事就是给Firefox装上几个顺手的插件,然后同步下收藏夹什么的。唯一不爽的是Echofon在这里竟然无法工作,去网上搜了下也没有结果,只能换其他方法上推。
这次10.04还直接附带了个聊天聚合软件,在时间栏的左边,用GTalk自然没有问题,QQ的话把版本号改成2008后貌似也可以用。至于那个广播功能因为不能改API,直接无视。

其他常用软件还是很齐全的,然后放歌什么的会自动提示下载解码器,照做就是了。

关于上推
Ubuntu下貌似没有什么有名的Twitter客户端,为了替代Echofon,我选了跨平台的Mixero。安装之前要先装上Adobe AIR。方法如下:
1.下载Adobe Air For Linux的最新版本:访问http://get.adobe.com/cn/air/ Adobe会自动识别你的操作系统,你要下载的文件是AdobeAIRInstaller.bin .
2. 将下到的文件其移动至主文件夹(位置-主文件夹)中.
3.打开终端 输入
chmod +x AdobeAIRInstaller.bin
sudo ./AdobeAIRInstaller.bin
即可完成AIR的安装。然后下载Mixero的安装文件,直接双击运行即可。

关于其他
作为一个Ubuntu小白,还在尝试中。。。

2010
04.26

昨天从推特教牧师(@newsinchina)的淘宝店购入域名flyingkk.net,从此这个博客也算有了独立的一级域名。

在域名停放过程中出了点小问题,昨天拿到的域名今天下午才算正常工作。不过既然有了Money的投入,我想以后我会继续努力,不让这里荒废的^_^

2010
04.24

5 模块
为了在其他程序中重用已经写好的代码,可以使用模块。模块就是个包含你要重用的函数和变量的python文件。
使用模块的方法:import modulefrom module import * (module为模块名)
使用import的时候,系统先在当前目录下查找模块,找不到时再去sys.path里所记录的路径下查找,其中sys为标准库模块,包含与Python解释器和它的环境有关的函数。因为系统module都存放在sys.path所记录的目录下,所以如果在当前目录下有和系统module重名的模块的话会优先调用当前目录下的模块,可能会导致一些错误的发生,所以命名module时要注意一些。

下面是一个调用sys模块的例子:
>>>import sys
>>>print sys.path

这个例子会输出sys.path变量的内容,其中点号表示path是sys模块中的变量,用同样的方式也可以表示模块中的函数,比如下面的module模块

#!/usr/bin/python
# Filename: mymodule.py
def sayhi():
print 'Hi, this is mymodule speaking.'
 
version = '0.1'
# End of mymodule.py

在模块中定义了一个叫sayhi的函数,调用的方法:
>>>import module
>>>module.sayhi()

模块的__name__属性
一般用于判断模块是否被单独运行,可以用if __name__ == ‘__main__’语句,如果是单独运行为True,否则就是被其他模块导入的。

dir()函数
dir()函数用于列出模块定义的标志符,包括函数、变量、类等。
dir(module) 返回module中的标志符,dir()返回当前所有模块中的标志符。

6 数据结构
python中有三种内置数据结构——列表、元组和字典

列表(list)
list类似C中的数组和C++中的vector,用于存储顺序结构数据,list的元素包括在方括号中,以逗号分割。
list的定义:a=[] 或 b=[1,2,'s'],list中的元素可以是包括list在内任何类型。
list的下标:list的下标从0开始,到n-1,如a[2]。但list也支持负数下标,-1表示最后一个元素,-n表示第1个元素。大于n-1或小于-n的下标会报错。
子list:可通过下标制定范围,提取子list,如a[1:4]表示a中第2到第5个元素。不指定的情况下起始默认为0,结束默认为-1,如a[:4],a[1:]等。子list是原来list的一个拷贝,改变子list不会改变原来的list。
list的处理方法:list.append(a)追加元素,len(list)返回长度,list.count(a)返回a出现的次数,list.sort()排序,list.insert(index,a)在index处插入元素a等等,具体方法参阅help(list)
list的解析:下例获得一个新的list,其每个元素是li中元素的2倍。
>>> li = [1, 9, 8, 4]
>>> [elem*2 for elem in li]
[2, 18, 16, 8]
>>> li
[1, 9, 8, 4]

用类似的格式可以解析字符串、字典等。

元组(tuple)
tuple是常量list,用()表示,一经定义,不可改变。
tuple可用于多个变量的赋值,如a,b=(1,2)。在元组中只有一个元素时应写成a=(1,),否则会被当成含括号的表达式处理。
tuple可用于格式化输出,如 print ‘%s is %d years old’ % (name, age) 其中%s表示字符串,%d表示整数。

字典(dict)
字典是键-值对的集合,以{}表示。
定义:a={key1:value1,key2:value2},其中的键值对是没有顺序的。
调用:a[key1]得到value1。
dict的方法:a.clear()清空a;a.copy()得到a的拷贝;a.get(key,default),返回a[key],不存在时返回default,default不写默认None;a.has_key(key) a中是否有键为key的,有返回value,无返回False。其他参加help(dict).

字符串(str)
字符串就是个所有元素都是字符的list,有很多实用的方法,参见help(str).

2010
04.24

二十岁之前相信的很多东西,后来一件一件变成不相信。
曾经相信过爱国,后来知道“国”的定义有问题,通常那循循善诱要你爱国的人所定义的“国”,不一定可爱,不一定值得爱,而且更可能值得推翻。
曾经相信过历史,后来知道,原来历史的一半是编造。前朝史永远是后朝人在写,后朝人永远在否定前朝,他的后朝又来否定他,但是负负不一定得正,只是累积渐 进的扭曲变形移位,使真相永远掩盖,无法复原。说“不容青史尽成灰”,表达的正是,不错,青史往往是要成灰的。指鹿为马,也往往是可以得逞和胜利的。
曾经相信过文明的力量,后来知道,原来人的愚昧和野蛮不因文明的进展而消失,只是愚昧野蛮有很多不同的面貌:纯朴的农民工人、深沉的知识分子、自信的政治 领袖、替天行道的王师,都可能有不同形式的巨大愚昧和巨大野蛮,而且野蛮和文明之间,竟然只有极其细微、随时可以被抹掉的一线之隔。
曾经相信过正义,后来知道,原来同时完全可以存在两种正义,而且彼此抵触,冰火不容。选择其中之一,正义同时就意味着不正义。而且,你绝对看不出,某些人 在某一个特定的时机热烈主张某一个特定的正义,其中隐藏着深不可测的不正义。
曾经相信过理想主义者,后来知道,理想主义者往往经不起权力的测试:一掌有权力,他或者变成当初自己誓死反对的“邪恶”,或者,他在现实的场域里不堪一 击,一下就被弄权者拉下马来,完全没有机会去实现他的理想。理想主义者要有品格,才能不被权力腐化;理想主义者要有能力,才能将理想转化为实践。可是理想 主义者兼具品格及能力者,几希。
曾经相信过爱情,后来知道,原来爱情必须转化为亲情才可能持久,但是转化为亲情的爱情,犹如化入杯水中的冰块──它还是冰块吗?
曾经相信过海枯石烂作为永恒不灭的表征,后来知道,原来海其实很容易枯,石,原来很容易烂。雨水,很可能不再来,沧海,不会再成桑田。原来,自己脚下所踩 的地球,很容易被毁灭。海枯石烂的永恒,原来不存在。

继续阅读全文 >>

2010
04.21

哀悼

今天是玉树地震全国哀悼日,在此为所有在地震中遇难的同胞表示哀悼。死者已逝,幸存的人应该更加坚强的活下去。默哀……

PS:我的博客主题本来就是黑的,就不改了吧…

2010
04.17

接上次的继续记,这次从网上找到一本《Python学习笔记》的电子书作参考,当然原书写的比较全,我这个只能算山寨产品。

4 函数
定义方式:
def 函数名(形参):
函数代码块
函数中需要用到全局的变量时用global指明,如global x,y,当然如果函数中没有定义的参数会自动去全域中找,无需特别定义。
用return指明函数返回值,如果没有return,返回None,表示没有值。

个数可变参数:
如def printf(format,*arg):,其中*arg放在最后,*表示接受任意多个参数,多余参数作为一个tuple传递给函数,可用arg访问。
另一种方法:def printf(format,**keyword):,其中**keyword放在最后,以dictionary形式传递多个参数,但调用时要制定参数名称,如printf(“ok”,One=1,Two=2,Three=3),此时["One","Two","Three"]相当于key,[1,2,3]相当于values。
两种方法可以结合起来用,此时*arg在前,**keyword在后。即函数先接受固定参数,然后是可选参数,任意参数,最后是带名字的任意参数。

DocStrings:
DocStrings,文档字符串,指在函数的第一个逻辑行的字符串。
文档字符串的惯例是一个多行字符串,它的首行以大写字母开始,句号结尾。第二行是空行,从第三行开始是详细的描述。 强烈建议 你在你的函数中使用文档字符串时遵循这个惯例。
可以用函数名.__doc__(注意双下划线)调用文档字符串对象。

lambda函数
lambda 的函数,是从 Lisp 借用来的,可以用在任何需要函数的地方。
一些示例:

>>> def f(x):
...     return x*2
...
>>> f(3)
6
>>> g = lambda x: x*2
>>> g(3)
6
>>> (lambda x: x*2)(3)
6

总的来说,lambda 函数可以接收任意多个参数 (包括可选参数) 并且返回单个表达式的值。lambda 函数不能包含命令,包含的表达式不能超过一个。不要试图向 lambda 函数中塞入太多的东西;如果你需要更复杂的东西,应该定义一个普通函数,然后想让它多长就多长。

使用lambda函数可以使程序显得很简洁,比如求1000的阶乘可以写成:
print reduce(lambda x,y:x*y, range(1,1001))
其中range(1,1001)表示生成1到1000的连续整数列表(List)
reduce(functionA,iterableB),functionA为需要两个变量的函数,并返回一个值。iterableB为可迭代变量,如 List等。reduce函数将B中的元素从左到右依次传入函数A中,再用函数A返回的结果替代传入的参数,反复执行,则可将B reduce成一个单值。
在此,是将1到1000的连续整数列表传入lambda函数并用两个数的积替换列表中的数,最后得到1000!

嵌套函数
Python中函数定义时可以嵌套,但内层函数不能访问外层函数的变量。如:

>>> def outfun(a,b):
... def innerfun(x,y):
... return x+y
... return innerfun(a,b)
...
>>> outfun(1,2)
3

接下来一章是模块,先研究下,下次再写吧。。