随想录

一念之间,一步之遥

  DonewsBlog  |  Donews首页  |  Donews社区  |  Donews邮箱  |  我的首页  |  联系作者  |  聚合   |  登录
  21篇文章 :: 0篇收藏:: 32篇评论:: 0个Trackbacks

文章

收藏

相册

存档


正在读取评论……


2006年09月29日

    最近在玩Python,觉得它是一个简练、但高效,而且很有意思的一门语言,据说在google是使用频率最高的三大语言之一了。今晚看的是<Dive into Python>的正则表达式部分,正则表达式是搜索、替换和解析复杂字符模式的一种强大而标准的方法。

    字符串也有很多方法,可以进行搜索(index, find, 和 count), 替换(replace)和解析 (split), 但他们仅限于处理最简单的情况。搜索方法查找单个和固定编码的子串,并且他们总是大小写敏感的。对一个字符串s, 如果要进行大小写不敏感的搜索,则你必须调用 s.lower() 或 s.upper() 将s转换成全小写或者全大写,然后确保搜索串有着相匹配的大小写。replace 和 split方法有着类似的限制。

   如果你要解决的问题利用字符串函数能够完成,你应该使用他们。他们快速、简单且容易阅读,而对于快速、简单、可读性强的代码等方面有很多内容。但是,如果你发现你用了许多不同的字符串函数和 if语句来处理一个特殊情况,或者你组合使用了 split 、join 等函数而导致用一种奇怪的甚至读不下去的方式理解列表,此时,你也许需要转到正则表达式了。

    其中有个电话号码匹配正则表达语句巨牛,一条语句完成了可能c++或JAVA 几十条语句完成的功能,而且如果考虑时效开销,Python的正则表达式的优势是十分明显的。以下是通过正则表达式匹配电话号码的语句:

   >>> phonePattern = re.compile(r'^\D*(\d{3})\D*(\d{3})\D*(\d{4})\D*(\d*)$')
   >>> phonePattern.search('(800)5551212 ext. 1234').groups()                
   ('800', '555', '1212', '1234')
   >>> phonePattern.search('800-555-1212').groups()                          
   ('800', '555', '1212', '')
   >>> phonePattern.search('work 1-(800) 555.1212 #1234')                    
 >>>
 然而改进后的表达式更牛,摆到明是无论如何都要找到你丫电话号码了,哈哈

    >>> phonePattern = re.compile(r'(\d{3})\D*(\d{3})\D*(\d{4})\D*(\d*)$')
   >>> phonePattern.search('work 1-(800) 555.1212 #1234').groups()       
   ('800', '555', '1212', '1234')
   >>> phonePattern.search('800-555-1212')                               
   ('800', '555', '1212', '')
   >>> phonePattern.search('80055512121234')                             
   ('800', '555', '1212', '1234')
     让我想起了c++或java语句来实现他的N多个if , for,iptr++。。。。。,所以说Python在某些方面还是很有优势的。咔咔,下面贴写Python的小结:

^ 匹配字符串的开始。
$ 匹配字符串的结尾。
\b 匹配一个单词的边界。
\d 匹配任意数字。
\D 匹配任意非数字字符。
x? 匹配一个可选的x字符(换句话说,它匹配1次或者0次x 字符)。
x* 匹配0次或者多次x字符。
x+匹配1次或者多次x字符。
x{n,m} 匹配x字符,至少n次,至多m次。
(a|b|c)要么匹配a,要么匹配b,要么匹配c。
(x) 一般情况下表示一个记忆组(remembered group). 你可以利用re.search函数返回对象的groups()函数获取它的值。



2006年09月27日

嵌入式解决方案
在做ucLinux+xgui+net+dns+2.4.20-8的解决方案的过程中
1:编译Busybox
 其中包括/bin /sbin 尤其是/sbin/init等,这个很熟,就不累书了
2:文件系统,用uclibc做为库文件
   为节约空间,/lib下的库直接做指向/usr/uclinu-i386-uclibc的符号连接
3:启动配置
这个是最难,极易出错的地方。
其中/etc/inittab中配置如下
==================
::sysinit:/etc/init.d/rcS
::respawn:-/bin/login
tty2::respawn:-/bin/login
tty3::respawn:-/bin/login
tty4::respawn:-/bin/login
::restart:/sbin/init
::ctrlaltdel:/etc/init.d/rc.reboot
::shutdown:/etc/init.d/rc.reboot
===================
   
Init进程一进来就执行inittab,这个也很熟,不说什么了。
做完以上,其实已经可以跑起来一个最基础的babylinux了,ok,接下来添加系统模块。
4:添加设备文件
   必须添加的设备为:
   null console zero tty0 tty1 fb fb0
   如果没有console的话在嵌入式系统启动时候会报:
   Unable to open an initial console的错误,do be silly!
   而其中null和zero是用来接受系统的输出,默认情况null和zero会忽略他们,不会显示也不会保持。
   也可以通过:
   mknod –m 660 console c 5 1
   mknod –m 660 null c 1 3
5:添加网络模块
   网络模块是系统内核支持,所以其首先要求系统引导的内核支持网络模块
   如果内核支持网络模块,那么系统需要和内核版本匹配的内核驱动模块
   例如:kernel是2.4.20-8,那么网络驱动模块也要相应该硬件的匹配2.4.20-8的版本
   网络模块的地址是:
   /lib/modules/[kernel vesion]/kernel/drivers/net
   注:kernel version是内核版本号,我的版本号是2.4.20-8
   而我的网卡是8139系列的,所以我的内核驱动是:
   /lib/modules/2.4.20-8/kernel/drivers/net/8139too.o
   但在加载这个模块前,可以通过查看
   /lib/modules/2.4.20-8/kernel/modules.dep
   查看到8139模块依赖于mii模块
   所以我们也需要添加mii模块,该模块和8139too.o要放在一个目录。
   所以要添加网络模块的命令可以写入/etc/profile,让系统每次启动自动加载。
   其中/etc/profile的配置如下
modprobe /lib/modules/2.4.20-8/kernel/drivers/net/mii.o
modprobe /lib/modules/2.4.20-8/kernel/drivers/net/8139too.o
ifconfig eth0 202.38.215.121
ifconfig eth0 up
route add default gw 202.38.215.254
6:配置网络
   配置网络静态ip是ifconfig,这个非常熟悉,
其中要说明的是route添加网关,too naive,犯了一个非常非常低级低级的错误,把网关和dns搞混了,一直把202.38.193.33来作为网关往上面加,于是出现了:
SIOCADDRT :Network is unreachable
搞得都快崩溃了,无意中巧了254才ping通,基础还是不扎实啊,怎么基础的东西,艾。。。。讲出来自己都觉得好笑。不过回来看其实人家的错误提示已经不错了,网络不可达,也就是你的数据链路和193.33不通,但是你可以拼通你内网215以内的ip,所以要想的办法是如何ping到外面去,所以要的是254作为网关帮你转发。
注:其实这个问题核心还是没有搞懂网关和dns的概念,混淆了。网络差不多忘光了。
7:配置DNS
   这个本来应该是比较复杂的,记得当初陪牛哥在外面公司加班加点就是配DNS,但是也不知道为什么居然让我不是花很大功夫就搞定了,看来最近rp不错啊,^_^。
   Uclinux的dns依赖与以下几个文件:hosts , hosts.conf , nsswitch.conf, resolv.conf
   # /etc/host.conf
   order hosts,bind
 
   # /etc/resolv.conf
nameserver 202.38.193.33

   # /etc/hosts
# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1 localhost.localdomain localhost
202.38.193.33    dnsserver

# /etc/nsswictch.conf
host:filesdns

其中各个文件的功能和作用不想写了,网上有很多的,一查uclinux dns或者busylinux d ns就很多。(baidu在中文搜索还是比google好一些)
   
8: 网络自解析
在hosts里面加上
211.94.144.100 www.baidu.com
64.233.189.104 www.google.com
202.112.17.188 www.scut.edu.cn
可以将一些常用的网址的ip地址写入hosts里面,以后访问以上网址的,系统不用dns服务,直接转入该ip连接。
9:难点、突破点
   难点在于内核模块加载的部分
modprobe /lib/modules/2.4.20-8/kernel/drivers/net/mii.o
modprobe /lib/modules/2.4.20-8/kernel/drivers/net/8139too.o
   开发人员如何知道加那些模块、怎么加了?这个问题困惑了我很久,从一年前到现在,总算搞清楚了。Modprobe is the key!
   在大系统modprobe可以看到系统加载的模块
   其中有8139 和mii,
   再执行: modprobe –l |grep ‘8139’
   可以知道8139模块指向的具体模块位置:
/lib/modules/2.4.20-8/kernel/drivers/net/8139too.o
   可通过执行:depmod 8139 调用module.conf
得知其依赖于mii模块。
然后用insmod加载就ok了,不知道为什么modprobe的效果好像不佳。
10:牢骚、期望
虽然写下来不多,但是其实在做的过程中还是很多挑战,要对linux系统的运行机制非常了解,所以做的过程中还是比较伤脑筋的,但是也正是有调战,才显的很有意思。
整体就看到我在不停的reboot,在大系统和嵌入式系统中转换,多希望能分多一台机 器给我,让我可以在两个系统中自由切换,可极大极大极大的提高工作效率。
艾。。。又做梦了。






    摘要:苦干、实干加巧干,迎接国庆     (全文共464字)——点击此处阅读全文


2006年09月24日


    摘要:昨晚小上海从上海来广州,我们借机在广州和广州附近的同学趁机在校门口北雪湘园聚餐,大家见见面。    (全文共885字)——点击此处阅读全文


2006年09月22日


    摘要:一直以来想自己写一个mini Linux的制作文章,今天发现了一篇不错的emLinux文章,转贴过来。    (全文共27095字)——点击此处阅读全文


2006年09月21日


    摘要:标准Linux系统的进程、线程和uClinux的多进程处理     (全文共2309字)——点击此处阅读全文




    摘要:

上午下班,从实验室回来,去饭堂打饭,然后回来的路上,看到一张张稚气又陌生的师弟师妹的面孔,呵呵,我都研二了,在华工呆了5年了,真的过的很快

上午google的时候无意中发现了一个耒阳老乡的blog,也是在清华读研,牛人啊,是个基础扎实、技术超强的牛淫,同时耒阳老乡,同是计算机的研究生,人家可以做的那么好,而我只有高山仰止的份。。。

感觉自己还是比较浮,不扎实,但要怎么改了?好像很多想法,但又无从下手,迷茫

    (全文共227字)——点击此处阅读全文




    摘要:难道这就是IT 技术人员的宿命?整晚感慨良多,有点失眠,思绪象一只脱缰的野马,在脑海里转个不停。。。     (全文共890字)——点击此处阅读全文


2006年09月20日


    摘要:

有几句说的非常好的话,用来自省:

只有永远看到别人优点的人,才是进步最快的人;

经常议论别人的缺点,你就是一个道德水准低下者;经常议论人类的缺点,你就是一个思想家。 

    (全文共124字)——点击此处阅读全文


2006年09月19日

两个星期瘦了六斤。。。

哈哈哈哈哈哈

今晚心情好,可以睡个好觉




两个星期瘦了六斤。。。

哈哈哈哈哈哈

今晚心情好,可以睡个好觉




回家,妈妈都说我胖~~~哼哼,所以下定决心要好好锻炼身体,增强体质。

从北京回来的路上是座火车就发现在火车上我很难受,可能是上半年比赛、考试、实验室的压力太大,自己一直象只陀螺,一直转个不停,所以自己都发现好像身体差了很多,而且身体差的副产品就是“胖了很多”

下定决心减肥了,每天东湖半小时慢跑,25个仰卧起坐一组,每晚4组,每组间隔不超过一分钟。。。

要慎重的对待饮食,少吃油腻、多吃清淡的东西,多吃水果~~~~

 





    摘要:有所得,坚持    (全文共614字)——点击此处阅读全文


2006年08月26日


    摘要: 跟着超级Mary忙活了一个暑假,人都皮了,盼星星,盼月亮,总算盼到了假期。dissmiss一个星期!~yeah    (全文共212字)——点击此处阅读全文


2006年08月24日

        最近在玩Robocode,一个在2003年很火很火的一个坦克大战,这个游戏是程序员基于Robocode平台,调用其接口,自己设计坦克的行动、扫描、战斗策略,然后把自己 的机器人拿上去和别人的坦克单挑。

        这个idea 非常不错,即刺激了程序员的好奇心,也大大的激化了程序员的虚荣心,通过自己设计代码,定制自己的坦克策略,放到战场上“厮杀”。。。很cool吧! 不过很可惜,robocode之父,就职于IBM advanced tech lab的某某工程师说:robocode可用来java初级者入门和教学!!狂汗,原来将高数、统计学、模式匹配是java初学者该用的东西,原来我还停留在初学者,入门阶段!艾。。。什么都别说了,好好学吧,孩子。

       今天很开心,中国队出现,奉献了绝杀!同时今天也是我接触robocode的第六天,差不多一个星期了,今天下午我拿我设计的坦克和robocode example里面的坦克pk了一下,大概总共10多个吧,嘿嘿,全胜!bingo~~哈哈,我把每个坦克都试了一下,我绝大部分是10局全胜,有几个甚至是没有被对方击中一炮,全部是我追着他打。嗯,应该赞自己一下。

        当然,除了和电脑单挑,还要找其他程序员玩家的来单挑一下,从官方网站下载了世界排名第一的坦克下来,单挑了一下,比较惨,10局败了7局,而且嬴的那3局只能用两个字形容“惨胜”,最后的比分是1731:971

        嗯,找到目标拉,接下来要好好研究一下概率统计、统计学瞄准、模式匹配等高级策略,争取下次不要输的那么惨,要求不高,嘿嘿,加油加油。