好久没有更新了
突然不知道该说些什么好
一般自己的心情,都会写在这里
虽然有时会看不明白
可是,散乱的思绪,也正是我的心情
一年一年,一天一天
我不愿意我的文字这样的悲凉
我想有那种活泼,激情的文字
只是,现实会让一个人,变的
我不想这样变,内心不想
可是,表现出来,却毫无力气
好久没有更新了
突然不知道该说些什么好
一般自己的心情,都会写在这里
虽然有时会看不明白
可是,散乱的思绪,也正是我的心情
一年一年,一天一天
我不愿意我的文字这样的悲凉
我想有那种活泼,激情的文字
只是,现实会让一个人,变的
我不想这样变,内心不想
可是,表现出来,却毫无力气
怎样鉴别黄色歌曲
作者: 《人民音乐》编辑部 / 伍雍谊 / 陆维 / 周荫昌 / 瞿维 / 丁善德 / 王云阶 / 周大风 / 南咏 / 应国靖
统一书号: 8026-4045
页数: 60
定价: 0.22元
出版社: 人民音乐出版社
出版年: 1982
书籍当中强悍的观点
文/蔷薇猫
1、许多表现妇女失恋或被遗弃时哀怨悲苦情调的黄色歌曲,它们并不是出于对这些被凌辱的妇女的同情,也不是为了表现她们的不幸,而是为了她们要博取廉价的怜爱的需要。
2、音乐并不是和黄色的内容表现无关的东西,而是形成整首歌曲的黄色感染力的一个重要部分。
3、黄色歌曲的特点是:音乐上,大量采用软化,动荡,带有诱惑性的节奏;旋律多采用叙述性与歌唱性相结合的写法;配写比较细致的伴奏。演唱上,大量采用轻声,口白式唱法;以其裹声;吐字的扁处理;大量使用滑音与装饰音;演唱中出现歌腔延迟和重音倒置。
4、《根》(高又泰唱)“要回去,回去生长的地方,去拯救,去拯救,去拯救根的灾难”这里“要回去”是回到哪里去?“根的灾难”含义是什么?如何“拯救”?……这首歌在伴奏中还用了象征出师开阵的鼓声。所有这一切,其用心不是很清楚么?……它为什么出版发行于一九七九年?
5、“流行音乐”是资本主义社会走下坡路时代的音乐现象,不能把我们的音乐和它相混在一起。
6、此类庸俗歌曲……对我国某些青年男女,实是色情引诱之声,精神麻痹之剂。
7、摇滚乐和酗酒,吸毒,斗殴,同性恋等等相伴而行。一场摇滚乐集会实际上就是一场疯狂的骚乱,有人甚至在其中丧生。……流行音乐发展到摇滚乐,实际上已经成为资本主义社会的一种不治之症。
8、流行音乐之所以在资本主义世界盛行,是由资本主义社会制度本身决定的。
who.is查询域名注册信息,包括注册域名
instantwordsearch.com/ 是一个提供很简单服务的网站,主要提供快速的单词查询服务。你只需要输入你想要查找单词的部分字母便可以进行查询,你可以限定搜索的字幕是在单词的最前面和最后面。
suggest.name/是一个提供Web2.0域名的在线生成工具。Suggest.name提供了Web2.0网站常用的词根,你可以利用这些Web2.0网站常用的词根进行重新组合,然后找到新的域名组合。
makewords.com/ 域名生成该网站,支持
*域名长度设置 MIN & MAX
*语言设置
*关键词搜索
*首字母及尾字母
*常见后缀及前缀的添加
*快速的注册入口
上次回忆我的大学生活,是在一年前了。那时写这些,是处于心情极度低潮的时期,在无法排遣的时候,就好好回忆下过去,来让自己更加抑郁。
人还是应该向前看,转眼间,物是人非,唯有记忆可以让人有少许安慰或者说,记忆让人不愿意向前。
总之,自从上次写了,心里一直有了缺憾:一直没有继续写下去的时间和勇气,不会这样的,不过,那时写和现在写的方式也许会不一样,心情不同了。
大二上学期,不知道大学班里的文艺委员是做什么用的,好像跟男生关系不大,而且,好像只有搞娱乐的时候才有的用到。不过,娱乐活动并不多。
因为昌杰的原因,我当上了我们班的文艺委员,这个原因,现在不是很具体了,大概就是昌杰要做什么班干部,但是要拉我一起,嘿嘿。
文艺委员当上了,其实并没有什么事情做,直到。。。迎新晚会,就是每个系每年都有迎接新生的一个晚会,惯例。而我们物理学系-电子信息工程系(名字太长)也照样要办,于是在某天被召集起来开会。系的文娱委员是个02级的女生,叫谢素芝,呵呵,我确实记得她的名字,她说我脸上有好多青春痘,她很漂亮,长的很甜美。当时确实是在想,要是我能有这样的女朋友。。。。呵呵,anyway,人家现在都结婚了。除去客观原因,我自己是非常的胆小,或者说不自信。。。,在大学的后几年,还有时会见到她,也有时候打招呼。唉——记得要自己争取,不成功也不会有遗憾!
总之,文艺委员要求每个班报个节目,我绞尽脑汁,还是想不出来,但是一看到她甜美的眼睛——哈哈,我决定弄个小小的小品,关于唐僧的东东,找了剧本,找人,就找我们宿舍几个人,哈哈,昌杰-猪,奎元-沙和尚,林健-猴子,张择-妖怪,我就是唐僧了。
然后开始了排练。那时好简单啊,把每个人自己的台词打印出来,就在一间空教室练了起来,虽然水平不怎么样,但是还是有被人围观过的~~哈哈
在排练中确实有问题,时间紧,我们几个人有时候时间或心情又不能统一,不过,不能放弃(现在好像很多事情太容易放弃了,要改,一定要改!!),努力去认真做好。
那时候舞台上的设备是很原始的,最明显的就是,没有那种微型的无线话筒,但是我们是小品哦,不可能每人拿一个话筒,而且还带着长长的电线吧。那我们就参照之前别人的经验——录音,然后表演时候对口型。在某天晚上,我们几个人召集到一块,用当时我们宿舍最先进的电脑——昌杰的17寸~用cooledit先把每人说的台词录一个文件,就形成了很多个单个的声音了,然后再按照剧本中的时间顺序把这些声音组合起来,加配乐,呵呵,就成了一个了声音~~有了这个,我们在排练的时候也方便多了。至今,这个声音文件,我都没有丢,有机会放上来,现在听来,确实很幼稚的。
通过了初选,我们顺利进入了演出。到了演出快开始了,谢素芝呢帮我们去定服装,确实好漂亮,不是说服装。。。而且,还自己在宿舍做了个唐僧的帽子~哈哈,以后对自己喜欢的,千万不要错过了,即使是有可能别人没有意思,也要为自己去尝试,这是我在大学里面学到的,现在想起来,确实很唏嘘。。
有个插曲,系的实践部拉到一个广告,王老吉的,要求在小品中展示出来这个品牌,嘿嘿,结果我们就让唐僧的斋饭是龟苓膏了。
开始演出,一上去面对那么多人,心里真的害怕,还好是对口型,不然不知道会不会出问题呢~不过,录音中有个地方有个脏话,竟然被删掉了,其实删掉也可以,但是竟然没有人和我们说,结果,演的时候,发现怎么少了一句啊!慌死了,还好当时糊弄过去了,哈哈。不过心里就有点不爽了。
结果,演出成功了,我是“我见过的最丑的唐僧”——后台一个小孩子跟我说的。而那个漂亮可爱的女生,就没有机会再接触了。这是个遗憾,真的。
模块的搜索路径
模块的搜索路径都放在了sys.path列表中,如果缺省的sys.path中没有含有自己的模块或包的路径,可以动态的加入(sys.path.apend)即可。下面是sys.path在Windows平台下的添加规则。
1、sys.path第一个路径往往是主模块所在的目录。在交互环境下添加一个空项,它对应当前目录。
2、如果PYTHONPATH环境变量存在,sys.path会加载此变量指定的目录。
3、我们尝试找到Python Home,如果设置了PYTHONHOME环境变量,我们认为这就是Python Home,否则,我们使用python.exe所在目录找到lib\os.py去推断Python Home。
如果我们确实找到了Python Home,则相关的子目录(Lib、plat-win、lib-tk等)将以Python Home为基础加入到sys.path,并导入(执行)lib/site.py,将site-specific目录及其下的包加入。
如果我们没有找到Python Home,则把注册表Software\Python\PythonCore\2.5\PythonPath的项加入sys.path(HKLM和 HKCU合并后加入),但相关的子目录不会自动添加的。
4、如果我们没有找到Python Home,并且没有PYTHONPATH环境变量,并且不能在注册表中找到PythonPath,那么缺省相对路径将加入(如:.\Lib;.\plat-win等)。
总结如下
当在安装好的主目录中运行Python.exe时,首先推断Python Home,如果找到了PythonHome,注册表中的PythonPath将被忽略;否则将注册表的PythonPath加入。
如果PYTHONPATH环境变量存在,sys.path肯定会加载此变量指定的目录。
如果Python.exe在另外的一个目录下(不同的目录,比如通过COM嵌入到其他程序),Python Home将不推断,此时注册表的PythonPath将被使用。
如果Python.exe不能发现他的主目录(PythonHome),并且注册表也没有PythonPath,则将加入缺省的相对目录。
标准Import
Python中所有加载到内存的模块都放在sys.modules。当import一个模块时首先会在这个列表中查找是否已经加载了此模块,如果加载了则只是将模块的名字加入到正在调用import的模块的Local名字空间中。如果没有加载则从sys.path目录中按照模块名称查找模块文件,模块文件可以是py、pyc、pyd,找到后将模块载入内存,并加入到sys.modules中,并将名称导入到当前的Local名字空间。
可以看出了,一个模块不会重复载入。多个不同的模块都可以用import引入同一个模块到自己的Local名字空间,其实背后的PyModuleObject对象只有一个。
说一个容易忽略的问题,import只能导入模块,不能导入模块中的对象(类、函数、变量等)。如一个模块A(A.py)中有个函数getName,另一个模块不能通过import A.getName将getName导入到本模块,只能用import A。如果想只导入特定的类、函数、变量则用from A import getName即可。
嵌套Import
嵌套import,我分两种情况,一种是:本模块导入A模块(import A),而A中又有import语句,会激活另一个import动作,如import B,而B模块又可以import其他模块,一直下去。
对这种嵌套比较容易理解,注意一点就是各个模块的Local名字空间是独立的,所以上面的例子,本模块import A完了后本模块只能访问模块A,不能访问B及其他模块。虽然模块B已经加载到内存了,如果要访问还要在明确的在本模块中import B。
另外一种嵌套指,在模块A中import B,而在模块B中import A。这时会怎么样呢?这个在Python列表中由RobertChen给出了详细解释,抄录如下:
[A.py] from B import D class C:pass [B.py] from A import C class D:pass
为什么执行A的时候不能加载D呢?
如果将A.py改为:import B就可以了。
这是怎么回事呢?
RobertChen:这跟Python内部import的机制是有关的,具体到from B import D,Python内部会分成几个步骤:
从<module B>的__dict__中获得符号"D"对应的对象,如果"D"不存在,则抛出异常
如果符号B不存在,则创建一个新的module对象<module B>,注意,这时,module对象的__dict__为空。执行B.py中的表达式,填充<module B>的__dict__ 。
从<module B>的__dict__中获得"D"对应的对象,如果"D"不存在,则抛出异常。
所以,这个例子的执行顺序如下:
1、执行A.py中的from B import D
由于是执行的python A.py,所以在sys.modules中并没有<module B>存在,首先为B.py创建一个module对象(<module B>),注意,这时创建的这个module对象是空的,里边啥也没有,在Python内部创建了这个module对象之后,就会解析执行B.py,其目的是填充<module B>这个dict。
2、执行B.py中的from A import C
在执行B.py的过程中,会碰到这一句,首先检查sys.modules这个module缓存中是否已经存在<module A>了,由于这时缓存还没有缓存<module A>,所以类似的,Python内部会为A.py创建一个module对象(<module A>),然后,同样地,执行A.py中的语句。
3、再次执行A.py中的from B import D
这时,由于在第1步时,创建的<module B>对象已经缓存在了sys.modules中,所以直接就得到了<module B>,但是,注意,从整个过程来看,我们知道,这时<module B>还是一个空的对象,里面啥也没有,所以从这个module中获得符号"D"的操作就会抛出异常。如果这里只是import B,由于"B"这个符号在sys.modules中已经存在,所以是不会抛出异常的。
上面的解释已经由Zoom.Quiet收录在啄木鸟了,里面有图,可以参考一下。
Package(包) Import
包(Package)可以看成模块的集合,只要一个文件夹下面有个__init__.py文件,那么这个文件夹就可以看做是一个包。包下面的文件夹还可以成为包(子包)。更进一步,多个较小的包可以聚合成一个较大的包,通过包这种结构,方便了类的管理和维护,也方便了用户的使用。比如SQLAlchemy等都是以包的形式发布给用户的。
包和模块其实是很类似的东西,如果查看包的类型import SQLAlchemy type(SQLAlchemy),可以看到其实也是<type ‘module’>。import包的时候查找的路径也是sys.path。
包导入的过程和模块的基本一致,只是导入包的时候会执行此包目录下的__init__.py而不是模块里面的语句了。另外,如果只是单纯的导入包,而包的__init__.py中又没有明确的其他初始化操作,那么此包下面的模块是不会自动导入的。如:
PA
–__init__.py
–wave.py
–PB1
–__init__.py
–pb1_m.py
–PB2
–__init__.py
–pb2_m.py
__init__.py都为空,如果有以下程序:
当执行#1后,sys.modules会同时存在PA、PA.wave两个模块,此时可以调用PA.wave的任何类或函数了。但不能调用PA.PB1(2)下的任何模块。当前Local中有了PA名字。
当执行#2后,只是将PA.PB1载入内存,sys.modules中会有PA、PA.wave、PA.PB1三个模块,但是PA.PB1下的任何模块都没有自动载入内存,此时如果直接执行PA.PB1.pb1_m.getName()则会出错,因为PA.PB1中并没有pb1_m。当前Local中还是只有PA名字,并没有PA.PB1名字。
当执行#3后,会将PA.PB1下的pb1_m载入内存,sys.modules中会有PA、PA.wave、PA.PB1、PA.PB1.pb1_m四个模块,此时可以执行PA.PB1.pb1_m.getName()了。由于使用了as,当前Local中除了PA名字,另外添加了m1作为PA.PB1.pb1_m的别名。
当执行#4后,会将PA.PB2、PA.PB2.pb2_m载入内存,sys.modules中会有PA、PA.wave、PA.PB1、PA.PB1.pb1_m、PA.PB2、PA.PB2.pb2_m六个模块。当前Local中还是只有PA、m1。
下面的#5,#6,#7都是可以正确运行的。
注意的是:如果PA.PB2.pb2_m想导入PA.PB1.pb1_m、PA.wave是可以直接成功的。最好是采用明确的导入路径,对于./..相对导入路径还是不推荐用。
验证是否已经安装了MySQLdb:
==========================================================
d:\usr\local\Python25>python
Python 2.5.4 (r254:67916, Dec 23 2008, 15:10:54) [MSC v.1310 32 bit (Intel)] onwin32
Type “help”, “copyright”, “credits” or “license” for more information.
>>> import MySQLdb
Traceback (most recent call last):
File “<stdin>”, line 1, in <module>
ImportError: No module named MySQLdb
==========================================================
如果有类似于上面的”No module named MySQLdb”,表明MySQLdb尚未安装或安装的不成功!
MySQL 版本:5.0.67
下载地址:http://dev.mysql.com/downloads/mysql/5.0.html#downloads
下载exe文件并安装
==========================================================
Python 版本:2.5
下载地址:http://www.python.org/download/releases/2.5.4/
下载msi文件并安装
MySQLdb版本: MySQLdb Windows binary for Python 2.5
下载地址:http://biohackers.net/wikiattach/Python2(2e)5/attachments/MySQL-python.exe-1.2.1_p2.win32-py2.5.exe
参见:http://forums.mysql.com/read.php?50,129618,140611#msg-140611
常见问题:
1.无法定位程序输入点 mysql_server_init 于动态链接库 LIBMYSQL.dll 上。
—————————————————————————————————-
D:\usr\local\Python25>python
Python 2.5.4 (r254:67916, Dec 23 2008, 15:10:54) [MSC v.1310 32 bit (Intel)] on win32
Type “help”, “copyright”, “credits” or “license” for more information.
>>> import MySQLdb
Traceback (most recent call last):
File “<stdin>”, line 1, in <module>
File “D:\usr\local\Python25\Lib\site-packages\MySQLdb\__init__.py”, line 19, in <module>
import _mysql
ImportError: DLL load failed: 找不到指定的程序。
—————————————————————————————————-
解决方法:把mysql安装目录的bin\libmySQL.dll文件复制到python安装目录的Lib\site-packages下
==========================================================
Python 版本:2.6
下载地址:http://www.python.org/download/releases/2.6.1/
下载msi文件并安装
MySQLdb版本: MySQL-python-1.2.2.win32-py2.6.exe
下载地址:http://home.netimperia.com/files/misc/MySQL-python-1.2.2.win32-py2.6.exe
参见:http://sourceforge.net/forum/forum.php?thread_id=2316047&forum_id=70460
常见问题:
1.ImportError: DLL load failed: 找不到指定的模块。
—————————————————————————————————-
D:\usr\local\Python26>python
Python 2.6 (r26:66721, Oct 2 2008, 11:35:03) [MSC v.1500 32 bit (Intel)] on win32
Type “help”, “copyright”, “credits” or “license” for more information.
>>> import MySQLdb
Traceback (most recent call last):
File “<stdin>”, line 1, in <module>
File “D:\usr\local\Python26\Lib\site-packages\MySQLdb\__init__.py”, line 19, in <module>
import _mysql
ImportError: DLL load failed: 找不到指定的模块。
—————————————————————————————————-
解决方法:下载libmmd.dll(附件)和libguide40.dll(附件)两个dll文件并复制到python安装目录的Lib\site-packages下。
参见:http://sourceforge.net/forum/message.php?msg_id=5613887
2.ImportError: DLL load failed: 找不到指定的模块。
—————————————————————————————————-
D:\usr\local\Python26>python
Python 2.6 (r26:66721, Oct 2 2008, 11:35:03) [MSC v.1500 32 bit (Intel)] on win32
Type “help”, “copyright”, “credits” or “license” for more information.
>>> import MySQLdb
D:\usr\local\Python26\lib\site-packages\MySQLdb\__init__.py:34: DeprecationWarning: the sets module is deprecated
from sets import ImmutableSet
—————————————————————————————————-
解决方法:
1) file “__init__”, replace:
from sets import ImmutableSet
class DBAPISet(ImmutableSet):
with
class DBAPISet(frozenset)
2) file “converters.py”, remove:
from sets import BaseSet, Set
3) file “converters.py”, change “Set” by “set” (IMPORTANT: only two places):
line 48: return set([ i for i in s.split(‘,’) if i ])
line 128: set: Set2Str,
参见:http://sourceforge.net/forum/message.php?msg_id=5808948
我的是vista,在按照网上的教程安装django后,使用django-admin.py startproject newtest命令运行一直不成功:会直接把django-admin.py文件的内容显示出来。
在前面加个 python, 会提示找不到文件django-admin.py。于是,我在命令行下进入C:\Python26\Scripts, 再运行python django-admin.py startproject newtest,就会看到一个新的文件夹newtest出现,应该是这样了。
我的工作目录想设施为d:\django,于是,我将django-admin.py复制到d:\django,命令行下进入d:\django,运行python django-admin.py startproject newtest,这时候就成功了。
不知道为什么会这样,网上的文章都是说直接用“django-admin.py startproject newtest”就可以运行,而且好像是说任意目录都可以运行,也许只有我自己的电脑是这样?我的系统是vista home版本。
#python程序练习–简单电话薄
#樊海军
#fanhaijun.com
#Python 2.6.2
import cPickle as p
import string
class phonebook:
def __init__(self):
pblist=[]
def pb_add():
#print "This is the ADD function"
while 1:
print ‘\nPlease input a NEW name["Q" to back to main menu]:\n’
add_name=raw_input("Name:")
if add_name=="Q":
main()
else:
add_sex=raw_input("Sex:")
add_tel=raw_input("Tel:")
pbdict={"Name":add_name,"Sex":add_sex,"Tel":add_tel}
print "You just input:"
for i in pbdict.items():
print ("%s:%-5s ") % (i[0],i[1]),
pb.pblist.append(pbdict)
del pbdict
print ("\nRecord added sucessfully! Continue?(Y/N)\n")
while 1:
con=raw_input()
if con=="Y":
pb_add()
elif con=="N":
pb_save()
main()
else:
print ("\nError! Continue?(Y/N)\n")
def pb_browser():
#print "This is the BROWSER function"
#print pb.pblist
print "\nThere are %s records:\n"% len(pb.pblist)
print "*******************************************"
print " ID NAME SEX TEL"
print "*******************************************"
for i in pb.pblist:
#print "==========================================="
print "%3s " % (pb.pblist.index(i)+1),
print "%-8s" % i["Name"],
print "%-8s" % i["Sex"],
print "%-8s" % i["Tel"]
print "==========================================="
main()
def pb_del():
#print "This is the DEL function"
while 1:
print "\nPlease input the ID of the record you want to delete:[Input 0 to main menu]\n"
del_id=raw_input()
if int(del_id)==0:
main()
elif del_id=="" or int(del_id)<0 or int(del_id)>len(pb.pblist):
#print "\nPlease input a RIGHT ID :\n"
continue
elif int(del_id)<=len(pb.pblist) and int(del_id)>0:
del pb.pblist[int(del_id)-1]
pb_save()
def pb_search():
#print "This is the SEARCH function"
while 1:
print "Please input what ever you want to search:"
s=str(raw_input()).lower()
k=0
id_list=[]
for i in pb.pblist:
if s in i["Name"].lower() or s in i["Sex"].lower() or s in i["Tel"].lower():
k+=1
id_list.append(pb.pblist.index(i))
print "\nThere are %s results:\n"% k
#print id_list
print "*******************************************"
print " ID NAME SEX TEL"
print "*******************************************"
for j in id_list:
print "%3s " % str(j+1),
print "%-8s" % pb.pblist[j]["Name"],
print "%-8s" % pb.pblist[j]["Sex"],
print "%-8s" % pb.pblist[j]["Tel"]
print "==========================================="
print ("\nContinue?(Y/N)\n")
while 1:
con=raw_input()
if con=="Y":
pb_search()
elif con=="N":
main()
else:
print ("\nError! Continue?(Y/N)\n")
def pb_file():
#print "This is the file function"
try:
f=file(pbfile)
pb.pblist=p.load(f)
except:
pb.list=[]
finally:
f.close()
def pb_save():
#print "This is the SAVE function"
try:
f=file(pbfile,"w")
p.dump(pb.pblist,f)
print "\nRecords saved successfully!\n"
finally:
f.close()
def pb_quit():
print "Thanks for your using!"
exit()
def main():
print """\
____________________________________________________
| Please select your choice: |
|__________________________________________________|
| [A]: Add a record. |
| [B]: Browser the records. |
| [D]: Delete a record. |
| [S]: Search. |
| [Q]: Quit. |
|__________________________________________________|
\
"""
while 1:
opp=raw_input()
if opp=="A":
pb_add()
if opp=="B":
pb_browser()
if opp=="D":
pb_del()
if opp=="S":
pb_search()
if opp=="Q":
pb_quit()
pb=phonebook()
pbfile=("pb.dat")
pb_file()
main()
Plone
Plone是什么?
Plone是免费的、开放源代码的内容管理系统(Content Management System,CMF)。Plone着重于适合各种组织使用。它带有一个工作流引擎、预先配置的安全和角色系统、一组内容类型和多语言支持。有来自全世界的众多开发者、作者和测试者每天为Plone做各种贡献。Plone是基于内容管理框架的。(Content Management Framework)。
主页:http://www.plone.org 中文主页:http://www.czug.org 中文商业支持:http://www.zopen.cn
什么是内容管理系统?
要给内容管理系统(CMS)下个定义很困难,比找个要卖给你CMS的人还难。简单来说,CMS用来管理内容,通常是为了web site管理内容。CMS的主要目的是用来方便的进行内容的创建、发布和修复,以适应商业应用。
内容管理的麻烦在于它的琐碎或不可能实现
不同CMS可以是否集成web分成两类:基于web的系统和非基于web的系统。Plone是免费的、开放源代码的基于web的内容管理系统。
为什么使用基于web的内容管理系统?
理解Plone这样的内容管理系统最简单的方法就是将它与标准web站点设计工具(如Macromedia Dreamweaver)进行比较。他们都可以在远程计算机上制作页面,并提交用来确认或发布。但有以下四个方面的区别:
任何具有所需权限的用户可在任何位置制作网页,使用标准浏览器,无需任何特殊软件。CMS的使用比Dreamweaver和FTP容易,只需很少的培训,许多制作任务可分配给不熟练的人员。因此,CMS使得更多的用户可在WEB上创建和编辑内容。同时,较少的培训和较低的技巧使得制作和维护的成本降低。
通过输入文本、上载文件到站点预先制作的模板中来制作页面,保证页面的统一风格。即使直接制作发布web页面的人员非常多,也可保证风格的统一,更重要的是内容结构的一致性也可保证。
CMS中的工作流控制可充分使用,web管理员的工作可有效的分配给工作在不同地点人员,并不会降低安全性,并保证质量标准。
不同版本的文档自动保存,需要时可进行自然的审核跟踪。
内容管理系统的这些优点对大型组织或大型合作项目更为重要。
什么是内容管理框架?
内容管理框架是一个应用,包括一系列Zope工具。这些工具构成的框架提供了许多内容管理系统需要的关键服务。内容管理框架可作为单独产品使用,或者如 Plone一样建立在它的基础之上。内容管理框架提供了核心的工具如Workflow(工作流)、个性化和目录化。内容管理框架的开发由Zope公司领导,是一个开发源代码的产品,受益于世界上众多的开发者的辛勤劳动。
什么是Zope?
Zope是一种开发源代码的web应用服务器,用python语言编写。它是可升级、稳固、功能强大的系统,包括一个对象数据库、web服务器和多种模板语言。Zope主要由Zope公司开发和提供支持,也可从来自世界各地的开发者得到帮助。
主页:http://www.zope.org 中文主页:http://www.czug.org 中文商业支持:http://www.zopen.cn
为什么使用Zope和Plone?
Zope和Plone是开放源代码软件(OSS),也就是说任何人可自由取得源代码。制作Zope和Plone的人的商业模型是从咨询服务中获取利益,主要在于定制或企业化应用。其他开放源代码CMS系统还有Midgard,Bitflux,OpenCMS和Wyona。
专有的和开放源代码的内容管理系统从技术上讲并没有什么不同。在两个阵营中,都有好的、中等的和较差的产品。文档和支持的质量也有很大不同。主要的不同是开放源代码的CMS相比专有系统而言,开放源代码的CMS由较小的公司制作。这就增加了对这些小公司能够持续多长时间,能够提供怎样的支持的怀疑。以我来看,不同之处更多的是表面的,而不是实际的东西。开放源代码的产品更小,对一个客户或一个关键人物的离去更加敏感,而专有系统产品较大,受收购(如 Allaire被Macromedia收购)和IT股票市场的反复无常(如Broadvision)的影响。不同在于,对开放源代码产品,用户可以取得源代码,可以进行维护、定制和开发。没有制作者的积极介入,这些工作对专有系统是无法完成的。这才是采用开放源代码产品的关键原因。
为什么采用Zope和Plone而不是其他开放源代码的CMS?Plone基于Zope,Zope是为建设内容管理软件的一个框架。在某种意义上, Zope是web应用的操作系统。CMF就是一个web应用,用来方便建设CMS。Plone就是一个基于CMF,运行在Zope上的内容管理系统,带有自己的一组模板和文件类型。以我们的观点(我们指的是由Web和Internet指导组WISG设立的CMS工作组的观点)Zope比其他竞争性产品更胜一筹在于以下原因:
Zope是面向对象的,在某种意义上,在Zope中出现的所有内容(网页、图像、链接、文件等)都是对象,包含在一个对象数据库中。数据库是层次化的,而不是关系型的,特别适合于层次化的文件结构。技术人员会认为数据库是行列结构的表格的集合,与主键值相关。Zope的数据库是不同的,与普通的文件系统结构很类似,对象包含在对象中。
Zope对象数据库中包含对象的所有老版本,这对撤销修改,对协作文档的版本控制和需要审核轨迹的元素非常有用。
Zope中包括大量特别适合大型组织和协同工作的工具,后面的手册中会介绍。例如:预定义的数据库搜索,基于灵活的搜索标准,自动显示符合特定用户定义条件的所有对象。
Zope可在所有平台上使用,包括:Unix,Linux,Mac OS和广受欢迎的Windows(98,2000,XP,NT),而其他开放源代码CMS或专有系统并非如此。
Zope是一个非常友好的开发环境。可通过点击按钮完成脚本的定制拷贝,而将原始版本保留在原来的位置,这是我遇到过的具有最好安全性的系统。
Zope中可方便的设计结构化XML文档,带有链接到文档结构的工作流。这是大型组织管理系统的基本特性,促进了文档结构和风格的一致性和流水线工作流。
最后,Zope为大型组织使用而设计,具有以下特性:大量贡献者致力于合作项目,他们位于不同地点,使用不同的平台。强大的组织需要灵活性和安全性,需要定义具有不同浏览、书写、编辑、批准大型项目不同部分权限的本地角色,可伸缩到大量对象和服务器。
第七,Zope team与竞争者的文化的不同对大型组织至关重要。Zope的一个客户US Navy,使用Zope管理RDproject,这是一个大型,公共部门组织,关注灵活性和安全性,对大部分公司都一样,无论公共的还是私有的。
就Plone(区别于Zope)而言,我认为超越基于Zope的通用的CMS的概念。Plone至少给Zope增加了两个有用的特性,对工程科学web站点非常重要:
整洁、雅致的导航框架,依赖于文件夹和内容视图,而不是html文档链接(需要更新)。受益于导航快捷方式(如公告栏,显示最近几天创建和修改的对象,避免了要浏览整个站点才能找到这些对象)的帮助
创建复杂结构文档的简单工具,如PIQ和UPC表单,每个文档的不同部分对不同的观众可见,可定制的确认路径
第一个特性使基于Plone的站点可以简单,快速的开始使用。第二个特性使它易于管理,不像其他CMS更多的构思发布而不是内容的处理。
什么是Python?
Python是功能强大的、解释性、交互式、面向对象的编程语言。Python是开放源代码的,可运行在几乎所有系统平台之上。Zope主要由Python编写,部分用C语言进行了优化。google的核心语言就是python,大名鼎鼎的BT下载软件
主页:http://www.python.org http://www.python.cn
BitTorrent也是python写的。
上述文章引用自: http://blog.sina.com.cn/s/blog_4bc5a0960100073x.html
===============================
以下文章转自:http://ddhjwxy.spaces.live.com/blog/cns!8A016BC37DDEF613!237.entry
CMS内容管理网站zope+plone的建立(安装篇)
这两天突然有个做个内容网站的想法,于是先把网站假设好了。现在先把安装部分先贴出来,以免年后正式开始建立网站的时候出现疏漏。
下面就开始我的安装过程:
我市全新安装一台Linux FC4(rhel 4和 rhel 3也可以),安装时只要选中Develop Tools就可以了,其他的软体都是用不到的。
一、安装python2.3.5(43MB)
1.从www.python.org下载到python2.3.5解压到临时目录下。
2.进入python的解压目录。
3.运行 ./configure –with-threads
4.运行 make && make install
5.在python2.3.5安裝后將/usr/local/bin/目錄下的python2.3和python拷貝到/usr/bin/目錄下(这一步仅在rhel3中需要,原因是/usr/bin/目錄下有python2.3和python這兩個文件,但是据我的觀察,這兩個文件的實質還是我原來的python2.2的,所以一定要有上面的那個步驟,这也可能是巧合)
二、安装PIL(Python Imaging Library 1.1.5 or higher)
1.从http://effbot.org/downloads/#Imaging下载PIL软件tar包,并解压到临时目录。
2.进入解压的目录。
3.运行$cd Imaging-1.1.5
4.运行$python setup.py build_ext -i
5.运行$python selftest.py
6.运行$python setup.py install
PS.为保证PIL安装的正确性,编译前请先确定TKINTER(需要tix的rpm包和devel包、fontconfig的rpm和devel包以及xorg-X11-devel),TCL(包括devel包),libjpeg(包括devel包),freetype2(包括devel包),zlib(包括devel包)这些包必须安装,否则无法正常安装完毕。
三、安装zope
1.从http://www.zope.org 下载并解压安装包
2.运行./configure –prefix=/usr/local/zope
3.运行make && make install
4.建立一个用户zope密码zope
5.运行/usr/local/zope/bin/mkzopeinstance.py
home 设定为 /home/zope
user 设定为 zope
密码 设定为 zope
四、安装Plone 2.1.1
1.从www.plone.org上下载与zope相应版本plone的tarball
2.解压到临时目录。
3.将解压出的内容都拷贝到/home/zope/Products下,并注意文件权限。group和owner都设定成zope用户和zope组。
4.将/home/zope/etc/zope.conf中的effectiv-user 设定为zope
五、运行/home/zope/bin/runzope &
六、打开浏览器输入http://ip:8080测试网站的正确性。点击Zope Management Interface 进入设定界面,需要输入的用户名密码就是三-5中设定的用户。
这样CMS(zope with plone)就搭建成功了。