|
用户名:honeyday 笔名:马踏飞燕 地区: 上海 行业:其他 |
| 日 | 一 | 二 | 三 | 四 | 五 | 六 |
生于70年代末,历经了中国改革开放的全过程。 思想上有文革末期的保守和激进,也有新时代的叛逆。 北京奥运会,我将步入而立之年。 而现在却还在苦苦的挣扎,为了梦想中美好的明天不懈的努力中,也许明天并不那么美好。 而我,依然不会放弃。 总有一片天为我而开,总有一片云为我而飘。
执子之手 与子偕老
(作者置顶)
一直欣赏这样一种爱情:没有太多的轰轰烈烈惊天动地,有的是象流水一样绵延不断的感觉;没有太多的海誓山盟花前月下,有的是相对无言眼波如流的默契……这该是一种“执子之手,与子偕老”的感觉吧,在陌生的人群中,在迷失和彷徨间,你却始终安详而从容──因为你知道,冥冥之中,自有一双属于你的双手,它们紧紧地握住你,陪你走过所有的阴天和所有的艳阳天,直到一生一世。
在我们平凡的生命里,本来就没有那么多琼瑶式的一见钟情,没有那么多甜蜜得催人泪下、痛苦得山崩地裂的爱情故事:在百丈红尘中,我们扮演的是自己,一些平平凡凡地生生死死的普通人。于是我们珍惜爱情,珍惜迎面而来的、并不惊心动魄的感情。
在这种爱情故事里,男主人公和女主人公不一定是要一见钟情的,最初他们可能会象陌生人一样擦身而过,象最平常的朋友一样,见面只打一声招呼,笑一笑,然后远去。之后有一天,在暮色里,你忽然发现她的背影竟是如此的让你心动;一种让你心疼的怜惜就这样不经意地撞中了你,你这才发觉,不知不觉地,习惯了擦身而过的她已经走入了你的生命,于是你们就开始了一段美丽的爱情。
爱情都是美丽的,虽然你们的爱情或者并不动人;恋爱中的人们都是美丽的,虽然你们或者都很平凡。舒婷描绘过这样一道风景:大街上,一个安详的老妇人和一个从容的老人微笑着,从不同的方向面对面地走近,走近;然后是微笑着,鼻尖顶着鼻尖地站着,双手紧紧地系在一起,身后西下的阳光把他们的头发和笑容染成一片暖暖的黄。身旁的人们被他们的幸福染成一片温暖。 起初你们还在怀疑这种爱情,因为它毕竟不象当初设想的那样完美、那样精致、那样浪漫。那只是淡淡的一种感觉,没有大喜也没有大悲,没有九百九十九朵玫瑰也没有魂断蓝桥──只是一种手牵着手、并肩漫步的感觉。他们说婚姻是一座围城,进去了的想出来;而你们就这样手牵着手,坦坦然然地一起走入围城里,互相扶持着,把许许多多毫不动人的日子走成一串风景。这么多年了,回忆起来,所有平凡的片断,所有曾抱怨过、曾怀疑过的时光其实是生命中最温馨的篇章;所有淡淡的日子,其实都是象“空山灵雨”一样,淡得韵味绵长。
执子之手,与子偕老。这该是一种并肩站立,共同凝望太阳的升起、太阳的落下的感觉;该是一种天变地变情不变的感觉,是见证岁月、见证感情的感觉。 他们说时间可以冲淡一切,可总有些东西是地久天长海枯石烂的。天上比翼,地上连理,总有一种爱情,是象山一样执着,象海一样深沉,象天空一样广阔的。在下雨的时候,你在车站孤伶伶地望着纷飞的雨线,你的心情是无可奈何的沉郁。这时从旁边伸过一把伞来,为你遮住了纷飞的雨丝和阴暗的天空;你不用回头,便知到是如山如海如蓝天的他正站在你的旁边了,便有一种极温暖极踏实的感觉涌上心头:雨丝就让它纷飞吧,天就让它阴暗吧,此时你已有了一把伞,而你的心情也因此而阳光灿烂。
他们说时间可以让一切蒙上灰尘,可总有些东西是历久长新的。牵在你的手中,所有的人生、所有灿烂或不灿烂的日子都变得崭新而明媚。时光它总是在不停地走,回首之时不觉已是满身尘垢;你却仍然愿意蒙上眼睛,毫无保留地把双手都交给这生生世世的恋人……
执子之手,与子偕老。当你哭泣的时候,有人陪你伤心,倾听你诉说,为你抚平凌乱的发和憔悴的颜容,告诉你明天依旧阳光灿烂;当你笑容明媚的时候,整个世界都和你一起明媚,而他静静地站在一旁,微笑着看着你和阳光一般地灿烂……
执子之手,与子偕老。这该是一幅两个人同撑起一方天空的风景。象两棵独立的大树,你们共同撑起一方天空,枝叶在蓝天下盛放,树根在地底下相互扶持。风也罢霜也罢,雨也罢雪也罢,执子之手,每一刻都是如此的美好,每一刻都是一首动人的情诗,每一刻都值得用所有的时光去回味……
──也许也不回味,只是紧紧地握住你的手,什么话也不说,慢慢地陪你走过今生今世,来生来世。
在Windows上安装Django
最近社区里面问到关于Django安装的问题比较多,现在在这里总结的写一下。
首先要准备好相关的软件:
以上软件都可以在网上下载。对应的网站如下:
以上软件除了Django以外,其它的都下载exe的安装版。
准备工作做完之后就可以开始安装了。下面是具体的安装步骤:
1、安装python
这一步很简单,直接双击运行python的安装程序,按照向导一路next即可。在路经方面建议设置一个比较好找的目录,例如我就是设置为d:\python_home\python24\这个目录。这样,其它的python相关的资源就都可以组织进python_home这个目录里面了。
2、安装PIL
PIL是Python Imaging Library缩写,主要用来处理图片用的,这里安装它是为了在Django系统中用它来对上传的图片自动的生成缩略图的。安装方法也相当的简单,直接双击运行PIL-1.1.5.win32-py2.4.exe这个文件,然后一路next即可。因为之前已经安装好了python,所以PIL的安装程序会从注册表中读取到python安装的路经,然后就自动地把PIL安装到python\lib\site-packages\PIL下面了。
3、安装mysqldb
方法同安装PIL,就不废话了。
4、安装Django
激动人心的时刻到了。你可以从django的网站上下载最新的release 0.95版,也可以从svn中同步一个最新的回来。如果是下载的release版,就解压到一个目录里,例如d:\python_home\django\下面。
由于Django现在采用python.egg的方式,所以在安装Django之前需要安装setuptool。这一步非常简单,打开一个命令提示符窗口,然后进入到D:\python_home\django>,输入命令python ez_setup.py,它会自动检查系统中是否安装了setuptool,如果没有它就连线到互联网下载一份最新的回来并且安装。接下来就是安装Django了。输入python setup.py install,这个命令将会把Django安装到site-package下面并同时设置好sys.path。
到此,Django基本的安装就结束了。
5、安装apache
上面安装的仅是开发环境,虽然可以运行但是却不能作为生产系统。这里我们采用apache+mod_python的组合来实现一个生产系统。
安装apache也相当的简单,双击安装文件,按照向导做下去即可。
6、安装mod_python
双击安装文件,按照向导一路的next即可。在下载mod_python的时候要注意与apache版本的匹配,目前mod_python的windows版本还没有对应apache 2.2的,所以如果你apache安装的2.2的话就不能用了。
一切都安装完成了,接下来就是测试一下mod_python是不是能用,还有就是把Django开发的应用部署到apache上面了,关于这些内容请看我翻译的Django文档里面的一篇《如何在 mod_python 环境中使用Django》。
编程控制SELECT框
最近在使用AJAX做一个项目,过程中遇到了一个需要在客户端用JS来判断数值,并且回显到select框中。其它的框直接用value属性都可以写进去了,可是select框则不同,它是一组的option元素组成的。于是采用DHTML的方式来操作之。
下面是完整的页面代码
原理:通过对html中的select元素中的option进行循环,然后用option的value属性与要比较的值进行比较,如果相同的话就设置当前的option的selected属性为true。
这样,就可以动态的来设定select元素的选择和值了。其中的fillsel()函数是为了给select动态的添加元素,这样测试起来更加的方便,效果更加的明显。
1 <html>
2 <head>
3 <title> control select </title>
4 </head>
5
6 <body onload="fillsel();">
7 <script language="JavaScript">
8 <!--
9 function s()
10 {
11 var osel = document.all.sel;
12 alert(osel.value);
13 }
14 function t()
15 {
16 var oset = document.all.set;
17 var osel = document.all.sel;
18 var oSelOptions = osel.options;
19 for (var i=0; i<oSelOptions.length; i++)
20 {
21 if (oSelOptions[i].value==oset.value)
22 {
23 oSelOptions[i].selected=true;
24 break;
25 }
26 }
27 //alert(oset.value);
28 document.all.msg.innerHTML = "sel's value now is:" + osel.value;
29 }
30 function fillsel()
31 {
32 var oset = document.all.set;
33 var osel = document.all.sel;
34 for (var i=0; i<1000; i++)
35 {
36 option = document.createElement('OPTION');
37 option.value = i;
38 option.text = i;
39 osel.add(option);
40 option2 = document.createElement('OPTION');
41 option2.value = i;
42 option2.text = i;
43 oset.add(option2);
44 //oset.add(option);
45 }
46 }
47 //-->
48 </script>
49 <select id="set" onchange="t();">
50 <option value="A">A</option>
51 <option value="B">B</option>
52 <option value="C">C</option>
53 <option value="D">D</option>
54 <option value="E">E</option>
55 </select>
56 <select id="sel" onchange="s();">
57 <option value="A">A</option>
58 <option value="B">B</option>
59 <option value="C">C</option>
60 <option value="D">D</option>
61 <option value="E">E</option>
62 </select>
63 <div id="msg"></div>
64 </body>
65 </html>
WinXP共享文档拒绝访问的完全解决方案
绍兴游记
上个礼拜六(11月5号)一大早,出发!
6点半赶到老婆公司,拿好东西,坐上大巴,开路~
路上颠颠簸簸、迷迷糊糊,一觉醒来已经到了嘉兴了;下车,放水,继续上路。
11点半,到了绍兴市内。被导游拉到一家饭店吃午饭。饭店条件很恶劣,不过饿了也管不了那么多了,吃!20分钟解决战斗,上车,杀向第一个景点。
Twisted学习笔记[一]
今天重新编译了一遍Twisted Network Programming Essentials,这样我的电脑就能看了。可能是原来下载的chm文件是老版本编译器制作的吧,在我的电脑上面无法使用。
从头开始看。
首先是获取并安装最新版的twisted。
到 http://twistedmatrix.com/projects/core/ 下载最近的压缩包。
TwistedSumo-2005-11-06.tar.bz2,该文件为tar打包,bz压缩的。
在windows下面无所谓的,使用winrar就可以解压出来了。
linux下面用tar -xjvf TwistedSumo-2005-11-06.tar.bz2 命令来解压。
解压后进入生成的目录,安装twisted。
由于twisted需要zope3的接口支持,而我已经安装过zope3了,所以安装过程相当的顺利。
在命令行输入 python setup.py install ,就可以安装了。
其间还需要.NET 1.1来编译一下,.NET我也装过,嘿嘿,一路成功!
如果搞不定的话,就下载一个exe安装程序吧,不过就可能不是最新版的,但是对于学习来说也没有什么影响的。
twisted的API文档可以到http://twistedmatrix.com/documents/current/api 在线查看。
下面开始学习第二章:建立简单的客户端和服务器。
twisted是一个事件驱动的框架。event loop叫做反应堆(reactor)。
下面是一个启动reactor的一个例子:
from twisted.internet import reactor print "Running the reactor..." reactor.run( ) print "Reactor stopped." |
这个例子实现了一个event loop,尽管它仅仅是一个空的什么都不作的loop。
下面对这段代码添加一些内容,让他可以做些事情。
from twisted.internet import reactor def printTime(): reactor.callLater(2,printTime) reactor.callLater(3,printTime) reactor.callLater(4,printTime) reactor.callLater(5,printTime) reactor.callLater(6,stopReactor) print 'running reactor...' reactor.run() print 'stop reactor.' |
这段代码添加了2个函数。并且使用了reactor的一个叫callLater的方法。该方法从名字上可以看出,并不是马上调用,而是later调用。通常可以作为连接超时的判断和执行一些计划任务等。
callLater有2个必选的参数,第一个是延迟的秒数,第二个是要调用的方法。在这个例子里,前5个是调用一个显示当前时间的函数,并打印出来,最后一个是调用结束event loop的方法,通过reactor.stop()来停止event loop。
接下来,我们建立一个TCP连接。
| from twisted.internet import reactor, protocol class QuickDisconnectProtocol(protocol.Protocol): def connectionMade(self): print "Connected to %s." % self.transport.getPeer( ).host self.transport.loseConnection( ) class BasicClientFactory(protocol.ClientFactory): protocol = QuickDisconnectProtocol def clientConnectionLost(self, connector, reason): print "Lost connection: %s" % reason.getErrorMessage( ) reactor.stop( ) def clientConnectionFailed(self, connector, reason): print "Connection failed: %s" % reason.getErrorMessage( ) reactor.stop( ) reactor.connectTCP('www.google.com', 80, BasicClientFactory( )) reactor.run( ) |
这一句话是上面一段程序的关键:
| reactor.connectTCP('www.google.com', 80, BasicClientFactory( )) |
这里有2个类参与了客户端的连接过程。 ClientFactory和Protocol类,它们被设计为处理所有的连接事件,例如连接建立、连接失败、收到数据等等。ClientFactory和Protocol类扮演者不同的角色并且有并不相同的用途。ClientFactory管理连接相关的事件,并为每一个成功的连接创建一个Protocol对象。当连接建立之后,Protocol将接管事件的处理,例如发送/接受数据,以及是否要断开连接等等。ClientFactory中的Factory字样是由于它可以为每一个连接创建一个新的Protocol对象实例,这样看上去很像工厂的行为,所以就叫他客户端工厂(ClientFactory)了。
在上面一段程序中,QuickDisconnectProtocol是继承自protocol.Protocol。它重写一个connectionMade()方法,该方法在连接一建立的时候就触发。BasicClientFactory是继承自protocol.ClientFactory。它重写了clientConnectionLost和clientConnectionFailed这两个ClientFactory的方法。