博文

目前显示的是 五月, 2012的博文

AD

破碎的心情 落幕、缺失

五阶魔方,无意间掉在地上,棱块散列一地……http://hi.baidu.com/b1acknight/vphoto/item/d5ebb8fe6ac146fbb3fb955e.html

破碎的魔方,心情、回忆 四阶魔方

那天,我亲手把四阶魔方拆成一个个的零件,似乎回忆、心情、温暖也一点点全部被拆成一片片……http://hi.baidu.com/b1acknight/vphoto/item/a241c7870f422e6d54fb965e.html

梦想的准备

今天收拾了收拾东西,把该邮寄的东西早上早早去邮寄到朋友家了。然后两个人就背着个从邮局买的布袋,另类的杀到了龙眠大道的义务小商品城,在斯得户外,有人正好在买手电筒,东西比我们预想的要贵。于是在转角看到一家新店,店主是一个精瘦的老头。也许是老店了,只是以前的脚步太匆忙,忽略了罢了。        昨天,我们俩讨论了到底是徒步,还是包车什么的。因为LEE的意思是距离远的包车,平常就住客栈或者酒店,帐篷和睡袋是应急用的。而我更偏向于徒步穷游,不想走马观花,想好好体会这边的景色和休憩自己的心灵。        在这个小店,购置了手电筒、隔潮垫/地席还看了一下睡袋和帐篷,帐篷里面有些部件是塑料的,感觉很不牢靠,而且杂乱的店面和随意的包装,让我对这家店的质量有所怀疑。随后两个人去买了墨镜,哈哈,我自己挑了一个大大的墨镜, 现在发现很多以前模仿别人,为了扮cool,而买个墨镜,所以就以为墨镜是用来扮cool耍帅的,到现在才发现,原来这个东西是有实际用途的。此时想起小春?春的那个墨镜,他那个装墨镜的布袋子,被我霸占当做了零钱袋。^_^ ——,墨镜价格很低,二三十快钱的东西。        我心里还是更想去斯得哪里问一下睡袋和帐篷,而且我也还缺一个帽子。又返回斯得,有个大叔在买配件,生意挺好的,不知道大叔和前面的年轻人是年少的激情冲动,还是逃离都市,亦或是为了旅游而旅游呢?在这个店铺,买了顶差不多的帽子,突然有弄个光头的冲动,O(∩_∩)O哈哈~,不过想到去的地方可能太阳太晒或者太冷,加上以后去应聘的话形象不好,只好作罢了。又看了一下帐篷,和睡袋,于是直接买了,LEE又在店里搜刮了一堆小件,有钥匙扣,哨子。我中意的一个多功能刀卡也落入囊中了,哈哈。       不过在斯得的时候,我的魔方不小心落地上,散掉了。哎~~~。LEE要会公司收拾一下,回ZH?。结果等我下地铁了,才发现没要他信用卡号,到家后又发现忘记了采购药品,真是够粗心大意的。       晚上聊了聊要采购的药品清单,感觉还是分歧比较大,LEE要的比较全,还有不少大件,甚至连登山可能用的都要备,而我的意见相反,希望备点儿常用的,便于携带的,如果真的发生一天搞不定或治疗麻烦的伤病,趁早返程。最后我列了一个清单,明天去门口的店铺购买。        今天LEE没买到合适的车票,他在公司撑了一下帐篷,说帐篷是夏天的,汗…

python笔记之——函数参数和变量

先上程序————————————————————————————————————————————————————#!/usr/bin/python
# Filename function test#定义字符串变量str0 ,并输出结果
str0='001122334455'
print ('str0 is '+str0+'n')
print('=============================')#定义字符串变量str1,
str1='str1 test'#定义函数pprint,其中str1和str2永远默认值,为关键参数
def pprint(choice,str1=' is done',str2=' '):#定义__doc__内容
'''This function is for test function.

choice is for your input choice;
str1&&str2 just for output.'''#在函数内部修改函数外部变量str0的值,此处的值只在函数内部生效,不影响函数外str0原本的值
str0='str0 is changed'#无法将形参str2定义为全局参数
 #global str2#在函数内部定义全局变量/全局参数,并修改值global cc
cc='golbal'
 cc=cc+' test !!!'#pprint函数具体内容
print(choice+str1+str2+'n')
choice=choice+' ^_^ '
print(choice+str1+str2+'n')#查看str0的值,是否变化,验证发现,无变化
print('str0 is still '+str0+'n')
print('=============================')#调用pprint函数
pprint("for")
pprint('while',&…

python笔记之——函数定义和关键参数

图片
python中的函数定义和使用非常简洁方便,抛开“形参”、“实参”这些不谈,主要说一下里面的”关键参数“       python中,允许在函数定义的时候,对某些参数设置默认值,这些参数称为”关键参数“。并且这些关键参数可以在函数内部进行修改,或者在调用函数的时候,重新制定为自己预期的值。这样给python的函数使用带来了很强大的灵活性和简便性。当然,在带来方便高效的同时,需要程序猿注意下面几种情况:       函数中的关键参数,也就是拥有默认值的参数,可以在函数内进行再次处理,当然,修改后的值有效范围只限于函数内部。由此可以引申出来:不能将这些形参(哪怕是关键参数)设置为”global“!。这和程序语言是相悖的。       如果在调用函数的时候,想要重新指定关键参数的值,一定要将这些新制定的语句,放在参数前面,否则会出现问题的。

最后发一个测试的图(附带吐槽,print函数,尼玛,不带这样玩的,还有TAB和空格)


几个运算符:按位与、按位或、按位异或、按位反转(求反)

按位与(&):双目运算符,将两数的二进制位相与,二进制位全为1,结果位为1,否则0.        作用:将某些位清零或保留某些位。清零某些位,则将次位置0,保留则置1。完成后则为&后面的那个运算的数。        示例:将数字N的高八位清0,保留低八位。N&255  (255=(0000000011111111))按位或(|):双目运算符,将两数的二进制位相或,二进制位有一个为1,结果位为1,全部是0,则结果位为0。        作用:将数字的某位置1.其他位不变。        示例:将N的低八位置1,N|255按位异或(^):双目运算符, 将两数的二进制位相异或,对应的二进制位相异,则结果位为1,否则为0。        作用:1、不引入第三变量,交换两个变量的值;
                   2、使特定位的值取反。
         示例:a=a1 b=b1
                   a=a^b , b=b^a , a=a^b 
                   最终结果:a=b1 , b=a1

按位反转/求反(~):单目运算符,右结合性。对参与运算的二级制位按位求反。        示例:~9=~(00001001)=(11110110)=-10

这个月,落幕

一切繁华,终将落幕。今天没有去上班,身体不舒服。中午和LEE聊了聊,其实所有的事情都不过如此,没有“难在哪里”。行动了,最多变成一坨屎,怕什么呢?很多人活着就像一坨屎。一直没敢说出口的话,终于说出来了,原来这么简单。尽管眼睛不自然的眯起来,肌肉也在颤动。但换来你曾有的一下感动。可能我出现的太晚,如果有可能,我希望自己是陪你的那个人。下个月,你要回去了。如我猜测,因为婚姻。还有预测之外的工作。看来这个月,果然是落幕的时候啊。那一刻,我差点儿抑制不住自己的眼泪。四阶魔方复原了,然后我亲手拆碎了,里面的零件比我想象中的多,看着这一堆的零件,我心情很平静,可能激动已经在看到你的微博和自己发微博的时候宣泄完了吧。如我所说,我不是你的谁的谁,我们没必要为彼此的心情负责人。我不了解你正如你不了解我一样。不过,我想在落幕的时候,自私一次,让自己幸福快乐一次。就似乎感觉时间太紧了,马上就好高考了,希望不要让爸妈担心,不要影响弟弟。太累了,我不希望这个行动就如同一把烈火,一直在我心头燃烧,也许太多的奢望,就变成了无法控制的欲望。但我依然想,去做一次,哪怕为此付出自己的所有,哪怕在过程中变成一坨屎,哪怕我倒在路上,哪怕当我到达那个地方,发现一切美好都变成了肮脏。但至少,我要去做一次,把那团火扑灭,自我救赎或者自我超越。

python的 raw string

图片
尼玛,看翻译的东东果然不靠谱啊。今天看PDF,看到里面有个神马名词叫“自然字符串”,说在字符串前面加上“r”或者“R”,可以制定为自然字符串,目的是指示某些不需要转义符特别处理的字符串。在其他编程语言里面木有听过有这玩意儿啊。       我踏上度娘之旅,希望能再度娘的文档里面找到这个名词的蛛丝马迹,结果,我蛋疼了。只好请出谷姐大婶,感觉谷姐大婶还是比较给力的,在几分钟后,我点了N个连接后,我发想,谷姐大婶也不给力了,尼玛不是说谷姐很看重python的吗!!!        把我的收获给大家分享一下:       1、 “自然字符串”,又名“原生字符串”,原名:“raw string”。而“raw”有 “生的,未煮过的” ,“未加工的;处于自然状态的”的意思。       2、这个raw string ,主要是针对反斜杠“”等在python中有转移作用的字符。如果某个字符要使其消失转义作用,原原本本的输出,则需要在这个字符串前面加上“r”或者“R”,成为“自然字符串”,表示字符原来的意义,不被转义。        例如:r"dan teng de raw string n",print后会输出:“"dan teng de raw string n”。“n“中的”“没有起转义作用。       3、这个自然字符串,在写正则的时候,会方便不少。针对正则中的”“,会让正则简洁清楚很多。       4、特别提示:在使用raw string时,反斜杠”“虽然不在做转义用,但某些情况下任然有一定的作用的。          例如: pach=r'c:python32'         如果进行输出,将会爆错误。因为最后的单引号被转义了,所以这个字符串没有了和前面配对的单引号” ‘ “。         raw string 是为了方便写正则的,不适合windows路径。在正则表达式中,反斜杠也是转义字符,因此不可能出现以反斜杠结尾的正则表达式。最后附图一张,大家注意看最后一行path1的输出

大数据的分词索检

起因:乱码今晚问我,近2000条数据,去25W的数据池中进行索检,严格匹配后再做下一步操作。目的:要能高效快速的将近2000条数据和25W数据进行索检匹配,严格匹配。 目的是将2000条数据里面的每一条,都能找到和25W数据里面的能严格匹配的那条。效率!效率!还是TMD效率!!!自己想法:(本人对数据库了解有限,菜鸟一枚,如果有大牛光临寒舍看到拙文,欢迎指教。)算法名称:大数据的分词索检实现思想:首先对近2000条数据进行处理,按照一定规则,跳出几个keyword,例如ABC, EFG等,按照频率高低,进行排序,并统计每个keyword的出现数目。要保证2000条数据中的每天数据包含的keyword ≤ 3。(此处可以优化,提示:分层关键词)(此处实现有问题)其次,将关键词,根据关键词长度和频率高低,进行加权计算后,进行二次排序。(此处需要多次调整加权值)第三步:将频率最高的关键词去25W的数据池中进行索检(此处参考注1),模糊查询即可。每进行一次查询,对属于数据池的数据进行标记。结果会有两种:第一种,有匹配结果。则将2000条数据的第一条数据,和数据池中标记的数据进行包含查询。        查询结果有两种,第一种,有匹配结果,则进行严格匹配。如果符合,进行下一步操作,然后从数据池中移除该数据;        第二种,无匹配结果,则将排序第二的关键词进行包含匹配, 如果包含有该关键词,则进行严格匹配查询。       以此轮询。如果不包含所有关键词,则从数据池中移除。第二种,无匹配结果。进行2000条数据的第二条数据进行索检,参考第一种结果。注1:可以采用分块的方式,将25W的数据,进行分块,对第一个分块操作完后,在执行第二个数据池分块。问题:里面可能影响效率的地方,第一个是轮询进行查询,第二个是对模糊查询的25W数据的标记最重要的,我本意是想不断缩小25W的数据池大小,结果敲下来这些文字,发现这个算法根本没缩小数据池的大小,所以,这个算法不正确或者某个环节不正确
一开始只是个灵光一闪的想法,现在写博文的时候,感觉这个想法还有很多不足和不正确的地方。明天抽空写个demo,先试试再说

写给明年某天的自己

我不知道明年的你,是否还是一个人,如孤狼,躲在夜色的某个角落独自舔舐伤口;是否还是一个人,欺骗自己说不在乎;一个人,明知懦弱,懒惰,却依然给自己理由;我不知道明年,你是否还在辛苦工作,是否还在一个人,那么多的罪恶是否已经把你淹没,是否做事情做人还是犹犹豫豫。总是种种种种,现在的我,懒得想,懒得写。写这些只是告你,你在此时此刻做了一个并不坚定的决定:明年工作告一段落,是时候开始旅程了。

用户体验≠傻瓜化操作

今天看了一个报道,是关于某浏览器的新闻。里面包含了三个视频,来介绍这个浏览器。我耐心看完后,只想说用户体验≠傻瓜化操作
不要打着所谓用户体验的幌子,来宣传自己的浏览器是多么的操作便利,多么的快捷。

我个人认为i,真正注重的用户体验,应该是能调动用户去发掘问题,解决问题。增长用户的智慧,而不是去做一些傻瓜化,便捷化的操作,让用户去习惯这些,这样其实限制了用户智慧的积累和增长。

今天太晚了,先记录这些,明天要去招投标,得早起。

RING0、RING3和SMM

Intel的CPU将特权级别分为4个级别:RING0,RING1,RING2,RING3。Windows只使用其中的两个级别RING0和RING3,RING0只给操作系统用,RING3谁都能用。

Windows系统只使用了2个级别的权限级别的原因是为了和其他一些硬件系统兼容,这些硬件系统只有2个级别的权限,如Compaq Alpha和Silicon Graphics MIPS等。

每个用户模式的进程有其私有的地址空间,这些进程在最低的权限级别下运行(称为Ring3或者用户模式),它们不允许执行CPU的特权指令,对系统所属的数据、地址空间以及硬件等的访问也是被严格限制的,例如,如果某个用户程序访问4G地址空间中的高位2G,那么系统就会立即将其终止执行。要注意的是,进程调用系统功能的时候,可以切换到内核模式执行,但是调用结束后,就返回到用户模式了。       用户模式的进程总是被认为是对操作系统稳定性的潜在威胁,所以它们的权限被严格地限制,任何触及这些限制的举动都将使进程被终止。而内核模式的组件则可以共享这些受保护的内核模式内存空间,在特权级别下运行(也称为Ring0),允许执行任何CPU指令,包括特权指令,可以无限制地访问系统数据、代码和硬件资源。内核模式代码运行在系统地址空间中,并总是被认为是可信任的,一旦被装载运行后,驱动程序就是系统的一部分,可以无限制地做任何事情。
总的来说,用户模式程序被完全从操作系统隔离,这对操作系统的完整性来说是件好事情,但对某些种类的应用程序来说就太头痛了,比如Debug工具。幸运地是,这些在用户模式几乎不可能完成的任务完全可以通过内核模式的驱动程序来完成,因为这些驱动程序的操作是不受限制的。因此,如果你打算从用户模式存取操作系统内部的数据结构或者函数的话,唯一的方法就是将一个内核模式驱动程序装载到系统的地址空间中(并调用它),这是很简单的事情,操作系统完全支持这样的操作。



关于SMM的解释,请参考另一篇日志:http://hi.baidu.com/b1acknight/blog/item/b1db38237fe9b863ac4b5f4e.html





扩展链接:

http://blog.csdn.net/jingzu/

http://apps.hi.baidu.com/share/detail/20123359

SMM漏洞初探——个人思考

SMM漏洞初探——个人思考     2009年3月13日,波兰著名女黑客Joanna Rutkowska公布了一条令人震惊的消息:将于一周后发布一篇论文,公布如何利用Intel CPU的Cache机制漏洞,利用这个漏洞,可以将CPU的运行特权级由Ring 0提升到SMM(系统管理模式),这种攻击方法在新近的主板和Intel CPU上都有效。

       国内外许多IT网站纷纷转载此消息,一时间“x86系统都得死”、“Intel遭遇CPU Rootkits,目前无药可医”等恐慌性言论纷纷出现在各大IT网站上,大有“语不惊人誓不休”之势,更有人相信“阴谋论”,直指这件事情是“美国政府在Intel CPU中故意留的后门,严重威胁国家安全,应尽快发展国产CPU才是彻底的解决之道!”也有某些著名IT网站出来辟谣,发表“Intel CPU重大安全漏洞真相揭秘”、“杯弓蛇影”等文章,或是自行分析,或是引用Intel公司专家的话,竭力证明这个漏洞“没有什么大不了”、“早已被Intel公司修补”、“没有太大实用价值”……总之不用担心。       抛开这些喧嚣的言论,透过现象看本质,从纯技术角度进行分析,应该如何看待这个漏洞和可能出现的CPU Rootkits呢?本文试图对这个漏洞的机制和CPU Rootkits进行简要的“可行性分析”,并给出一些评价。
        要了解这个漏洞,首先应该了解一下什么是SMM,SMM是System Management Mode(系统管理模式)的缩写,对于Intel IA-32体系结构CPU早已不是什么新东西,从Intel 80386SL CPU开始就引入了这种模式,486以上的CPU就更是毫无疑问地支持SMM了。根据Intel官方的《IA-32 Intel体系结构软件开发者手册第3卷:系统程序员指南》中的描述:SMM提供了一种预留的操作环境,可为有效的电源管理、控制系统硬件或者运行特殊的私有代码提供监控和管理各种各样的系统资源(硬件)的能力。SMM是一种特殊用途的操作模式,为处理系统级功能提供,例如电源管理、系统硬件控制或者运行厂商设计(OEM)的特殊私有代码。

    简而言之,SMM是为了系统控制活动而设计的一种模式,例如电源管理就属于系统控制活动之一。SMM用于BIOS(主板固件)和专门的底层设备驱动程序,而不是用于操作系统。实际上S…

python还是C++?

以前被c#害的不浅,现在杯弓蛇影, 最近纠结于重拾编程,到底选择什么语言的问题。身边的同事和朋友忽如一夜春风来,开始轰轰烈烈的python之旅,我自己则在由于是开始全新的python还是依靠以前对c#的熟悉,开始VC++。  以前是因为c#无法深入系统底层,无法搞驱动。而且网络方面也很蛋疼,可能还是我技术问题吧。所以这次选择格外谨慎,担心重蹈覆辙。这次主要关心的是,语言的通用性和跨平台和能否深入系统底层做一些类似驱动开发的事情。查来查去,没什么头绪,就顺便记录在这里吧。我已经知道的:python比较快,但还是比不上c++的效率和速度python的资料比较少python现在的发展和影响在扩大(从我身边的人就可以看出来)python可以混编c++、c代码python是解释型语言,只要有解释器就可以运行,没有编译这一步(其实我觉得还是有的)python和perl都是动态解释型语言,java c++都是静态编译型语言python界面还是问题,特别对于我这种伪完美主义者,是个致命伤刚刚看到,有人出主意:主攻c++,python脚本语言辅助。我感觉这个方法对于程序猿还是很不错的。但对于我这种把编程作为一种兴趣和辅助的人来说,还是不靠谱,太占用时间和精力。 在敲这些字的时候,我脑海里一会儿决定c++,一会儿决定python。实在是人生纠结之极致啊。于是乎决定,当我发表这些文字的时候,就是我决定的时候:鉴于本事各种陋习,本人决定,转投python的怀抱,如果到时候遇到驱动问题,再恶补c++。至此,提示。