关于作者

用户名:honeyday
笔名:马踏飞燕
地区: 上海
行业:其他

日历  

快速登录

+ 用户名:
+ 密 码:

在线留言



访问统计:
文章个数:5
评论个数:24
留言条数:1




Powered by BlogDriver 2.1

天空之城

 

生于70年代末,历经了中国改革开放的全过程。
思想上有文革末期的保守和激进,也有新时代的叛逆。
北京奥运会,我将步入而立之年。
而现在却还在苦苦的挣扎,为了梦想中美好的明天不懈的努力中,也许明天并不那么美好。
而我,依然不会放弃。
总有一片天为我而开,总有一片云为我而飘。

文章

执子之手 与子偕老  (作者置顶)

  一直欣赏这样一种爱情:没有太多的轰轰烈烈惊天动地,有的是象流水一样绵延不断的感觉;没有太多的海誓山盟花前月下,有的是相对无言眼波如流的默契……这该是一种“执子之手,与子偕老”的感觉吧,在陌生的人群中,在迷失和彷徨间,你却始终安详而从容──因为你知道,冥冥之中,自有一双属于你的双手,它们紧紧地握住你,陪你走过所有的阴天和所有的艳阳天,直到一生一世。

  在我们平凡的生命里,本来就没有那么多琼瑶式的一见钟情,没有那么多甜蜜得催人泪下、痛苦得山崩地裂的爱情故事:在百丈红尘中,我们扮演的是自己,一些平平凡凡地生生死死的普通人。于是我们珍惜爱情,珍惜迎面而来的、并不惊心动魄的感情。

  在这种爱情故事里,男主人公和女主人公不一定是要一见钟情的,最初他们可能会象陌生人一样擦身而过,象最平常的朋友一样,见面只打一声招呼,笑一笑,然后远去。之后有一天,在暮色里,你忽然发现她的背影竟是如此的让你心动;一种让你心疼的怜惜就这样不经意地撞中了你,你这才发觉,不知不觉地,习惯了擦身而过的她已经走入了你的生命,于是你们就开始了一段美丽的爱情。

  爱情都是美丽的,虽然你们的爱情或者并不动人;恋爱中的人们都是美丽的,虽然你们或者都很平凡。舒婷描绘过这样一道风景:大街上,一个安详的老妇人和一个从容的老人微笑着,从不同的方向面对面地走近,走近;然后是微笑着,鼻尖顶着鼻尖地站着,双手紧紧地系在一起,身后西下的阳光把他们的头发和笑容染成一片暖暖的黄。身旁的人们被他们的幸福染成一片温暖。  起初你们还在怀疑这种爱情,因为它毕竟不象当初设想的那样完美、那样精致、那样浪漫。那只是淡淡的一种感觉,没有大喜也没有大悲,没有九百九十九朵玫瑰也没有魂断蓝桥──只是一种手牵着手、并肩漫步的感觉。他们说婚姻是一座围城,进去了的想出来;而你们就这样手牵着手,坦坦然然地一起走入围城里,互相扶持着,把许许多多毫不动人的日子走成一串风景。这么多年了,回忆起来,所有平凡的片断,所有曾抱怨过、曾怀疑过的时光其实是生命中最温馨的篇章;所有淡淡的日子,其实都是象“空山灵雨”一样,淡得韵味绵长。

  执子之手,与子偕老。这该是一种并肩站立,共同凝望太阳的升起、太阳的落下的感觉;该是一种天变地变情不变的感觉,是见证岁月、见证感情的感觉。  他们说时间可以冲淡一切,可总有些东西是地久天长海枯石烂的。天上比翼,地上连理,总有一种爱情,是象山一样执着,象海一样深沉,象天空一样广阔的。在下雨的时候,你在车站孤伶伶地望着纷飞的雨线,你的心情是无可奈何的沉郁。这时从旁边伸过一把伞来,为你遮住了纷飞的雨丝和阴暗的天空;你不用回头,便知到是如山如海如蓝天的他正站在你的旁边了,便有一种极温暖极踏实的感觉涌上心头:雨丝就让它纷飞吧,天就让它阴暗吧,此时你已有了一把伞,而你的心情也因此而阳光灿烂。

  他们说时间可以让一切蒙上灰尘,可总有些东西是历久长新的。牵在你的手中,所有的人生、所有灿烂或不灿烂的日子都变得崭新而明媚。时光它总是在不停地走,回首之时不觉已是满身尘垢;你却仍然愿意蒙上眼睛,毫无保留地把双手都交给这生生世世的恋人……

  执子之手,与子偕老。当你哭泣的时候,有人陪你伤心,倾听你诉说,为你抚平凌乱的发和憔悴的颜容,告诉你明天依旧阳光灿烂;当你笑容明媚的时候,整个世界都和你一起明媚,而他静静地站在一旁,微笑着看着你和阳光一般地灿烂……

  执子之手,与子偕老。这该是一幅两个人同撑起一方天空的风景。象两棵独立的大树,你们共同撑起一方天空,枝叶在蓝天下盛放,树根在地底下相互扶持。风也罢霜也罢,雨也罢雪也罢,执子之手,每一刻都是如此的美好,每一刻都是一首动人的情诗,每一刻都值得用所有的时光去回味……

  ──也许也不回味,只是紧紧地握住你的手,什么话也不说,慢慢地陪你走过今生今世,来生来世。

- 作者: honeyday 2005年05月26日, 星期四 13:15  回复(7) |  引用(0) 加入博采

在Windows上安装Django

最近社区里面问到关于Django安装的问题比较多,现在在这里总结的写一下。

首先要准备好相关的软件:

  • Python 2.4.3
  • PIL for py2.4
  • Mysqldb for py2.4
  • Django 0.95
  • Apache 2.0.x
  • mod_python 3.2.5 for py2.4

以上软件都可以在网上下载。对应的网站如下:

以上软件除了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》。

- 作者: 马踏飞燕 2006年10月12日, 星期四 00:01  回复(3) |  引用(0) 加入博采

编程控制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>

- 作者: 马踏飞燕 2006年10月11日, 星期三 00:36  回复(0) |  引用(0) 加入博采

WinXP共享文档拒绝访问的完全解决方案
摘要:Windows XP C:\Documents and Settings\All Users\Documents 拒绝访问的完全解决方案。 这个问题跟SP2,防火墙,网络防火墙,策略等毫无关系! 请看下文便知晓。 查看全文

- 作者: 马踏飞燕 2006年01月18日, 星期三 12:06  回复(9) |  引用(0) 加入博采

绍兴游记

上个礼拜六(11月5号)一大早,出发!

6点半赶到老婆公司,拿好东西,坐上大巴,开路~

路上颠颠簸簸、迷迷糊糊,一觉醒来已经到了嘉兴了;下车,放水,继续上路。

11点半,到了绍兴市内。被导游拉到一家饭店吃午饭。饭店条件很恶劣,不过饿了也管不了那么多了,吃!20分钟解决战斗,上车,杀向第一个景点。

- 作者: 马踏飞燕 2005年11月7日, 星期一 23:29  回复(0) |  引用(0) 加入博采

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
import time

def printTime():
    print 'Current time is:' ,time.strftime("%H:%M:%S")
 
def stopReactor():
    print 'Stopping the Reactor...'
    reactor.stop()
 
reactor.callLater(1,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的方法。

- 作者: honeyday 2005年11月7日, 星期一 22:23  回复(1) |  引用(0) 加入博采