- 浏览: 1152044 次
- 性别:
- 来自: 上海
最新评论
-
LD_21:
...
无锡旅游归来 -
cat:
赞,这招有点创意。一般他们提交的demo都是些什么样的?
招人不难 -
daly1987:
不错啊,找到这个帖子学习。
ANTLR学习心得——表达式(1) -
hbsycw:
文笔不错,平铺直叙,坦诚~
我的野蛮成长 -
RonQi:
potian后来没有回复吗
与potian兄闲聊
openis 系统的历史、目标与方案的选择
1.0版
2004-01-16
庄表伟
一、历史
1、PHP版本,最初的试验
在2000年6月左右,我开始使用PHP为公司开发门户网站,当时有一个最初的设想,
来源于各种各样的“栏目”,在一个门户网站中,存在各种各样的栏目,每一个栏目都
有不少的文章,栏目还包括子栏目,子栏目下也可以 包括不少的文章。以往的设计
都是为不同的栏目设计不同的表,定下不同的字段,为了这些不同的表和字段写不同
的程序。于是我就考虑,能不能只用两个表来表示这所有的信息,栏目表、内容表。
无论哪个栏目的内容,都放在一个表里,这些内容的不同的字段,我通过一个包含了
各种冗余字段的内容表,来存放不同的内容。这样的设计当然是不符合数据库设计与
经典的软件开发的思路的。当时也遭到了一些反对。但是这样的好处就是,我可以写
一个统一的访问栏目与内容的函数层,整个网站的开发,不再需要考虑数据库结构的
设计,也不再需要写不同的数据库访问程序,项目的焦点,就直接集中于表现层,开
发的进度大大加快。至于系统的效率,当时确实没有考虑。
2、Java版本,命名为iMIS
在具体的应用中,我发现,不但栏目需要加子栏目,内容也可能需要加子内容。比
如BBS中,栏目就是板块,帖子就是内容,但是每一个帖子也可以有多个跟帖。不但栏
目是树状的,内容也应该是树状的。另外就是相关性,某一篇新闻的相关新闻,也需
要有所记录。
于是在新的开发项目中,我将栏目与内容统一命名为节点(Node)。 每个节点都可
以跟子节点。节点与节点的区别就是节点类型的不同。不但内容发布的信息是节点,
用户群组与 用户也是节点,产品类别是节点,具体的产品也是节点。只要能够想到
的信息,都是某种节点。节点与节点的 关系也有很多种,比如厂商节点与产品节点
存在“生产”关系,新闻节点与新闻节点存在“相关”关系,用户节点 与内容/栏目节点
存在“权限”关系等等。
这个系统被命名为iMIS,也就是集成管理信息系统的意思。这其中含义包括四个方
面“数据集成”,“应用集成”,“管理集成”,“界面集成”。但是这个系统并没有完成他
的命名所预定的目标,就已经完成了当时需要开发的项目的目标:)在公司来说,就不
再支持后续的开发了。
3、openis,一个全新的开始
一个全新的系统,不与某个具体的项目挂钩--虽然与具体的项目挂钩能够得到公
司的支持。2004-01-10开始。
二、目标
1、提高开发速度
最重要的目标就是提高开发速度,终极的目标是系统对于用户来说是“立等可取”的。
开发的过程变成修改的过程,而对于系统的修改成为常态。使得软件工程师与客户之间
能够直接交流,不再经过咨询人员的“低效率翻译”,也不用“UML”之类的高科技使用户
望而生畏,而是提供一种双方都能直接理解的需求定义的方式。
2、降低学习成本
无论是软件公司,还是使用软件的政府与企业,都不需要更多的学习,而是能够通过
一些简单的讲解,就能理解和应用。
3、规范开发流程
通过使用openis,在软件公司实现规范的,合理的,科学的开发流程,在清晰定义的
结构中,每个人都能明白自己的任务和目标。
4、提供整体方案
一方面在openis能够覆盖的范围内(Web上的管理信息系统),各种项目都能在一个
整体方案中得到实现。
另一方面,通过openis,能够整合现有的各种应用,进而对于用户显示出一个整体。
5、不断提高系统的性能
性能不是最重要的选择,但是必须在openis的开发过程中,不断提高。
三、方案的选择
1、同时支持java与.NET
java程序员与.NET程序员,都需要一套快速开发平台。
2、java而不是j2ee
j2ee华而不实。
3、ASP.NET而不是ASP
ASP对于扩展性的支持,远不如ASP.NET,另外C#与java的类似性,也是选择.NET的
原因。
4、jsp+taglib≈C#+ASP.NET
ASP.NET的服务器控件是一种非常好的Web开发方式,jsp+taglib,能够基本实现类
似ASP.NET的服务器控件。
5、数据库作为主要存储方式
有很多人试图开发自己的存储方式与算法,但是这不划算,而且不太可能超过数据库
的性能。
6、提供一套完整的对象模型
这套模型目前要能够支持信息发布,内容管理,工作流,事务处理,以及版本控制。
而且在java与.NET中,应该用法一致。
openis 系统的特性
1.0版
2004-01-16
庄表伟
一、统一信息访问
在openis中,信息分为两大类,一类称为“节点”,另一类称为“关系”。具体的节点
与关系的说明,将在概念模型中描述。这里的“节点”可以是任何类型的信息,例如数
据库中的一条记录,一个本地文件,一个FTP能够访问的文件,一个HTTP能够访问的文
件,一个Web Service的返回结果等等。
访问这样的信息,有统一的路径,类似URI,规则如下:
协议[.子协议]://[用户名]:[密码]@地址[:端口]/路径/节点名或表达式[.节点类型][#操作][?[参数1][&参数2]]
例如:
file://local/c:/temp/info.xml
这样就能访问一个本地的XML文件
db.mysql://192.168.1.31:3306/mysql/user/id=1.user
这样就能访问192.168.1.31下的mysql数据库,其中的mysql库user表,id=1
的记录,这个记录取出来之后,作为user类的对象
core://192.168.1.31/info/news/nnodeid=1.news
这样就能访问192.168.1.31下的核心数据库中/info/news/路径下的nnodeid=1
的记录,这个记录取出来之后,作为news类的对象
core://192.168.1.31/ntreeid=1&nnodeid=1.news
对于核心数据库,可以只用treeid与nodeid定位一个节点,取出之后,作为news
对象
http://192.168.1.31/news/index.php
ftp://tiger:123@192.168.1.31/temp/temp.xml
这不用解释了吧
db.mysql://192.168.1.31:3306/mysql/user/id=1.user#modify?username=jack
将user表中的id=1的用户名改为jack
下面详细解释一下。
1、协议.子协议
访问任何信息都需要通过协议,http,ftp是我们常见的协议,file协议是用于访问
本地文件或者某一台局域网服务器上的共享文件。db代表了数据库访问协议,访问不同
数据库的jdbc作为子协议。core代表核心数据库,可以采用更加快捷的方式访问。
目前打算支持的协议有:
core
db.*
file
http
ftp
https
socket
smtp
ldap
2、用户名与密码
访问大多数的信息,都需要用户认证,或者以匿名的方式访问。
3、地址与端口(略)
4、路径
路径的概念来自文件系统,所有树状结构的信息,都可以通过路径访问。而对于关系
型数据库,则需要作出约定,用“库名/表名”表示。
5、节点名或表达式
对于文件系统,文件名即可以定位一个节点,而对于关系型数据,则需要表达式,约
定为只包含关键字段的表达式。否则可能查出多条记录。另外,一个文件的扩展文件名
并不是节点类型。
6、节点类型
系统提供一个基础对象Node,其他类型的节点继承Node对象,可以命名为NewsNode。
当不指定节点的类型时,就认为这是一个缺省的Node对象。
7、操作
不同的节点类型支持不同的操作,其中Node对象中有一个缺省的show操作,如果操作
省略,就代表调用show操作。
8、参数
与不同的操作有关,可变
二、节点
统一访问标识的是一个特定的节点,不同的节点可以有各种不同的属性,任何类型的节
点,都可以转化为核心数据库中的一条记录,如果一个项目不需要集成外部的数据和文件,
则单纯的核心数据库就可以满足大多数开发需求。每一个信息节点,包含以下信息:
--------基本字段
ID号
路径
父节点ID
名称
标题
创建者ID
创建时间
最后修改者ID
最后修改时间
子节点最后ID
类别
状态
-------扩展字段
n个varchar字段
n个int字段
n个datetime字段
n个float字段
-------内容字段
一个CLOB
一个BLOB
-------打包字段
一个CLOB
我们对于一个节点,通常有这样几个方面的查询需求,一个是对基本字段的查询,一个
是对于不同的节点可能产生的含义不同的查询,还有就是通过一个节点与其他节点的关系,
查询其他节点。从其他应用集成进来的信息,除了需要查询的字段我们放入扩展字段之外,
其他的就打包入一个CLOB字段中。
三、关系
任何节点之间都可以存在关系,整个系统允许数目不限的关系种类。每一种关系只存在于
两个节点之间,多于两个节点的关系,总可以转化为多个两个节点之间的关系。
例如:相关新闻,管理权限,项目与工作,BBS里的一篇文章在精华区中的位置等等
关系分为对等关系与不对等关系。相关新闻这样的关系就是对等的,而管理权限,意味着
某个用户对某个节点有管理权限,关系的左边是用户类节点,右边是普通节点,就不能交换。
可以通过操作取得某个节点的某一类相关节点。
四、操作与工作流
每一个节点都可以允许多种操作,但是在不同的状态下,这个节点所允许的操作是不同的。
我们可以用两个表来表示:
操作状态表:表示经过某个操作后,这个节点可能将处于的状态。
+---+---+---+---+
| |状态1|状态2|状态3|
+---+---+---+---+
|操作1| * | | |
+---+---+---+---+
|操作2| | * | * |
+---+---+---+---+
|操作3| | | * |
+---+---+---+---+
状态操作表:表示在某个状态下,这个节点允许的操作。
+---+---+---+---+
| |操作1|操作2|操作3|
+---+---+---+---+
|状态1| | * | |
+---+---+---+---+
|状态2| * | | * |
+---+---+---+---+
|状态3| | | * |
+---+---+---+---+
通过这样两个表格,我们就可以完全清楚的定义一个节点的所有操作的相互依赖关系。如果
我们进一步定义,在某一特定的时刻,某个特定的用户能够对这个节点有什么样的操作权限。
则一个工作流的定义也就已经完成了。
在简单的情况下,我们可以假设一篇新闻,有是否被推荐两个状态,当一篇新闻被推荐时,
将无法被修改,而只能对其进行撤回操作,在未被推荐时,才能进行修改和删除操作。图表如
下:
操作状态表:
+--+--+---+
| |推荐|未推荐|
+--+--+---+
|推荐| *| |
+--+--+---+
|撤回| | * |
+--+--+---+
|修改| | * |
+--+--+---+
|删除| | * |
+--+--+---+
状态操作表:
+---+--+--+--+--+
| |推荐|撤回|修改|删除|
+---+--+--+--+--+
|推荐 | | *| | |
+---+--+--+--+--+
|未推荐| *| | *| *|
+---+--+--+--+--+
而对于更加复杂的状态流转情况,这样的表格同样可以胜任。在操作状态表中,一个操作可
能到达的状态有多个,这就需要在具体的节点中通过程序来实现了。
五、历史、版本与事务控制
对于一个节点进行各种操作之后,可能改变这个节点的状态,这个节点的上一个状态如果需
要,可以存入另一个历史记录库中,历史记录表与核心表完全相同,但是增加一个字段,既原
本那个节点的ID号。
添加与删除的操作,则彻底改变了一个节点的存在,因此需要一个系统级的历史记录表。
如果在历史记录表中,也体现出树状的结构,就可以记录一个节点的不同版本,成为一个版
本树。
当我们进行事务操作时,只要一次事务中的每一个操作都在历史表中记录了上一次的节点状
态,则这次事务就是可回滚的。无论这个事务跨越了多少个不同的表、文件、甚至服务器。
六、运行时服务器
1、统一节点访问接口
2、节点缓存与关系缓存
3、事务支持
4、日志服务
5、分布式访问支持
6、权限控制
七、TagLib
八、系统配置
1.0版
2004-01-16
庄表伟
一、历史
1、PHP版本,最初的试验
在2000年6月左右,我开始使用PHP为公司开发门户网站,当时有一个最初的设想,
来源于各种各样的“栏目”,在一个门户网站中,存在各种各样的栏目,每一个栏目都
有不少的文章,栏目还包括子栏目,子栏目下也可以 包括不少的文章。以往的设计
都是为不同的栏目设计不同的表,定下不同的字段,为了这些不同的表和字段写不同
的程序。于是我就考虑,能不能只用两个表来表示这所有的信息,栏目表、内容表。
无论哪个栏目的内容,都放在一个表里,这些内容的不同的字段,我通过一个包含了
各种冗余字段的内容表,来存放不同的内容。这样的设计当然是不符合数据库设计与
经典的软件开发的思路的。当时也遭到了一些反对。但是这样的好处就是,我可以写
一个统一的访问栏目与内容的函数层,整个网站的开发,不再需要考虑数据库结构的
设计,也不再需要写不同的数据库访问程序,项目的焦点,就直接集中于表现层,开
发的进度大大加快。至于系统的效率,当时确实没有考虑。
2、Java版本,命名为iMIS
在具体的应用中,我发现,不但栏目需要加子栏目,内容也可能需要加子内容。比
如BBS中,栏目就是板块,帖子就是内容,但是每一个帖子也可以有多个跟帖。不但栏
目是树状的,内容也应该是树状的。另外就是相关性,某一篇新闻的相关新闻,也需
要有所记录。
于是在新的开发项目中,我将栏目与内容统一命名为节点(Node)。 每个节点都可
以跟子节点。节点与节点的区别就是节点类型的不同。不但内容发布的信息是节点,
用户群组与 用户也是节点,产品类别是节点,具体的产品也是节点。只要能够想到
的信息,都是某种节点。节点与节点的 关系也有很多种,比如厂商节点与产品节点
存在“生产”关系,新闻节点与新闻节点存在“相关”关系,用户节点 与内容/栏目节点
存在“权限”关系等等。
这个系统被命名为iMIS,也就是集成管理信息系统的意思。这其中含义包括四个方
面“数据集成”,“应用集成”,“管理集成”,“界面集成”。但是这个系统并没有完成他
的命名所预定的目标,就已经完成了当时需要开发的项目的目标:)在公司来说,就不
再支持后续的开发了。
3、openis,一个全新的开始
一个全新的系统,不与某个具体的项目挂钩--虽然与具体的项目挂钩能够得到公
司的支持。2004-01-10开始。
二、目标
1、提高开发速度
最重要的目标就是提高开发速度,终极的目标是系统对于用户来说是“立等可取”的。
开发的过程变成修改的过程,而对于系统的修改成为常态。使得软件工程师与客户之间
能够直接交流,不再经过咨询人员的“低效率翻译”,也不用“UML”之类的高科技使用户
望而生畏,而是提供一种双方都能直接理解的需求定义的方式。
2、降低学习成本
无论是软件公司,还是使用软件的政府与企业,都不需要更多的学习,而是能够通过
一些简单的讲解,就能理解和应用。
3、规范开发流程
通过使用openis,在软件公司实现规范的,合理的,科学的开发流程,在清晰定义的
结构中,每个人都能明白自己的任务和目标。
4、提供整体方案
一方面在openis能够覆盖的范围内(Web上的管理信息系统),各种项目都能在一个
整体方案中得到实现。
另一方面,通过openis,能够整合现有的各种应用,进而对于用户显示出一个整体。
5、不断提高系统的性能
性能不是最重要的选择,但是必须在openis的开发过程中,不断提高。
三、方案的选择
1、同时支持java与.NET
java程序员与.NET程序员,都需要一套快速开发平台。
2、java而不是j2ee
j2ee华而不实。
3、ASP.NET而不是ASP
ASP对于扩展性的支持,远不如ASP.NET,另外C#与java的类似性,也是选择.NET的
原因。
4、jsp+taglib≈C#+ASP.NET
ASP.NET的服务器控件是一种非常好的Web开发方式,jsp+taglib,能够基本实现类
似ASP.NET的服务器控件。
5、数据库作为主要存储方式
有很多人试图开发自己的存储方式与算法,但是这不划算,而且不太可能超过数据库
的性能。
6、提供一套完整的对象模型
这套模型目前要能够支持信息发布,内容管理,工作流,事务处理,以及版本控制。
而且在java与.NET中,应该用法一致。
openis 系统的特性
1.0版
2004-01-16
庄表伟
一、统一信息访问
在openis中,信息分为两大类,一类称为“节点”,另一类称为“关系”。具体的节点
与关系的说明,将在概念模型中描述。这里的“节点”可以是任何类型的信息,例如数
据库中的一条记录,一个本地文件,一个FTP能够访问的文件,一个HTTP能够访问的文
件,一个Web Service的返回结果等等。
访问这样的信息,有统一的路径,类似URI,规则如下:
协议[.子协议]://[用户名]:[密码]@地址[:端口]/路径/节点名或表达式[.节点类型][#操作][?[参数1][&参数2]]
例如:
file://local/c:/temp/info.xml
这样就能访问一个本地的XML文件
db.mysql://192.168.1.31:3306/mysql/user/id=1.user
这样就能访问192.168.1.31下的mysql数据库,其中的mysql库user表,id=1
的记录,这个记录取出来之后,作为user类的对象
core://192.168.1.31/info/news/nnodeid=1.news
这样就能访问192.168.1.31下的核心数据库中/info/news/路径下的nnodeid=1
的记录,这个记录取出来之后,作为news类的对象
core://192.168.1.31/ntreeid=1&nnodeid=1.news
对于核心数据库,可以只用treeid与nodeid定位一个节点,取出之后,作为news
对象
http://192.168.1.31/news/index.php
ftp://tiger:123@192.168.1.31/temp/temp.xml
这不用解释了吧
db.mysql://192.168.1.31:3306/mysql/user/id=1.user#modify?username=jack
将user表中的id=1的用户名改为jack
下面详细解释一下。
1、协议.子协议
访问任何信息都需要通过协议,http,ftp是我们常见的协议,file协议是用于访问
本地文件或者某一台局域网服务器上的共享文件。db代表了数据库访问协议,访问不同
数据库的jdbc作为子协议。core代表核心数据库,可以采用更加快捷的方式访问。
目前打算支持的协议有:
core
db.*
file
http
ftp
https
socket
smtp
ldap
2、用户名与密码
访问大多数的信息,都需要用户认证,或者以匿名的方式访问。
3、地址与端口(略)
4、路径
路径的概念来自文件系统,所有树状结构的信息,都可以通过路径访问。而对于关系
型数据库,则需要作出约定,用“库名/表名”表示。
5、节点名或表达式
对于文件系统,文件名即可以定位一个节点,而对于关系型数据,则需要表达式,约
定为只包含关键字段的表达式。否则可能查出多条记录。另外,一个文件的扩展文件名
并不是节点类型。
6、节点类型
系统提供一个基础对象Node,其他类型的节点继承Node对象,可以命名为NewsNode。
当不指定节点的类型时,就认为这是一个缺省的Node对象。
7、操作
不同的节点类型支持不同的操作,其中Node对象中有一个缺省的show操作,如果操作
省略,就代表调用show操作。
8、参数
与不同的操作有关,可变
二、节点
统一访问标识的是一个特定的节点,不同的节点可以有各种不同的属性,任何类型的节
点,都可以转化为核心数据库中的一条记录,如果一个项目不需要集成外部的数据和文件,
则单纯的核心数据库就可以满足大多数开发需求。每一个信息节点,包含以下信息:
--------基本字段
ID号
路径
父节点ID
名称
标题
创建者ID
创建时间
最后修改者ID
最后修改时间
子节点最后ID
类别
状态
-------扩展字段
n个varchar字段
n个int字段
n个datetime字段
n个float字段
-------内容字段
一个CLOB
一个BLOB
-------打包字段
一个CLOB
我们对于一个节点,通常有这样几个方面的查询需求,一个是对基本字段的查询,一个
是对于不同的节点可能产生的含义不同的查询,还有就是通过一个节点与其他节点的关系,
查询其他节点。从其他应用集成进来的信息,除了需要查询的字段我们放入扩展字段之外,
其他的就打包入一个CLOB字段中。
三、关系
任何节点之间都可以存在关系,整个系统允许数目不限的关系种类。每一种关系只存在于
两个节点之间,多于两个节点的关系,总可以转化为多个两个节点之间的关系。
例如:相关新闻,管理权限,项目与工作,BBS里的一篇文章在精华区中的位置等等
关系分为对等关系与不对等关系。相关新闻这样的关系就是对等的,而管理权限,意味着
某个用户对某个节点有管理权限,关系的左边是用户类节点,右边是普通节点,就不能交换。
可以通过操作取得某个节点的某一类相关节点。
四、操作与工作流
每一个节点都可以允许多种操作,但是在不同的状态下,这个节点所允许的操作是不同的。
我们可以用两个表来表示:
操作状态表:表示经过某个操作后,这个节点可能将处于的状态。
+---+---+---+---+
| |状态1|状态2|状态3|
+---+---+---+---+
|操作1| * | | |
+---+---+---+---+
|操作2| | * | * |
+---+---+---+---+
|操作3| | | * |
+---+---+---+---+
状态操作表:表示在某个状态下,这个节点允许的操作。
+---+---+---+---+
| |操作1|操作2|操作3|
+---+---+---+---+
|状态1| | * | |
+---+---+---+---+
|状态2| * | | * |
+---+---+---+---+
|状态3| | | * |
+---+---+---+---+
通过这样两个表格,我们就可以完全清楚的定义一个节点的所有操作的相互依赖关系。如果
我们进一步定义,在某一特定的时刻,某个特定的用户能够对这个节点有什么样的操作权限。
则一个工作流的定义也就已经完成了。
在简单的情况下,我们可以假设一篇新闻,有是否被推荐两个状态,当一篇新闻被推荐时,
将无法被修改,而只能对其进行撤回操作,在未被推荐时,才能进行修改和删除操作。图表如
下:
操作状态表:
+--+--+---+
| |推荐|未推荐|
+--+--+---+
|推荐| *| |
+--+--+---+
|撤回| | * |
+--+--+---+
|修改| | * |
+--+--+---+
|删除| | * |
+--+--+---+
状态操作表:
+---+--+--+--+--+
| |推荐|撤回|修改|删除|
+---+--+--+--+--+
|推荐 | | *| | |
+---+--+--+--+--+
|未推荐| *| | *| *|
+---+--+--+--+--+
而对于更加复杂的状态流转情况,这样的表格同样可以胜任。在操作状态表中,一个操作可
能到达的状态有多个,这就需要在具体的节点中通过程序来实现了。
五、历史、版本与事务控制
对于一个节点进行各种操作之后,可能改变这个节点的状态,这个节点的上一个状态如果需
要,可以存入另一个历史记录库中,历史记录表与核心表完全相同,但是增加一个字段,既原
本那个节点的ID号。
添加与删除的操作,则彻底改变了一个节点的存在,因此需要一个系统级的历史记录表。
如果在历史记录表中,也体现出树状的结构,就可以记录一个节点的不同版本,成为一个版
本树。
当我们进行事务操作时,只要一次事务中的每一个操作都在历史表中记录了上一次的节点状
态,则这次事务就是可回滚的。无论这个事务跨越了多少个不同的表、文件、甚至服务器。
六、运行时服务器
1、统一节点访问接口
2、节点缓存与关系缓存
3、事务支持
4、日志服务
5、分布式访问支持
6、权限控制
七、TagLib
八、系统配置
评论
2 楼
jianfeng008cn
2006-12-21
有些olap web系统好象也是这样设计的吧 针对olap的不同的配置文件通过不同的engineer来处理 感觉很棒的一种设计,化繁为简!
1 楼
lordhong
2006-11-29
寒...OPENIS...大哥,名字不大雅观啊...O...PENIS...
发表评论
-
作为一个JavaEye的老会员,我感到羞愧
2010-12-08 12:36 3915这次的Bambook SDK大赛,我在其中做一些社区联络与维护 ... -
开发应用程序 白拿Bambook
2010-11-11 22:29 2344本月,盛大电子书Bambook程序达人赛将正式启动。大赛奖 ... -
TCDatabase介绍(3)
2010-05-15 22:57 2742四、存储数据结构 1、TCT的存储数据结构 TC的不同 ... -
TCDatabase介绍(2)
2010-05-11 21:35 2340三、TokyoTyrant的网络协 ... -
TCDatabase介绍(1)
2010-05-08 22:54 3126TCDatabase,是我在创新院的同事,riceball的一 ... -
美国软件和菜头——《软件随想录》读后感
2010-01-16 22:44 3095一口气读完了《软件随想录》(More Joel on So ... -
与potian兄闲聊
2009-10-03 23:01 3225昨天的一篇blog,potian兄 ... -
帖子虽老,却不过时
2009-10-02 20:43 5527我昨天发的那篇《咱圈真乱 》,potian在下面留了一个言: ... -
架构师应该掌握哪些设计模式
2009-09-20 23:29 5845今天去参加了北京博文 ... -
《观止》读后感
2009-09-06 10:21 1960这篇blog,我是先在twitter上写的,然后再转帖过来,这 ... -
有关语言设计的一些联想
2009-08-01 21:51 1907引发我这些思考的,是最近一篇InfoQ的文章:《语言约束 ... -
我用Twitter的烦恼与解决方案
2009-07-20 23:12 2431挺早以前,我就注册了 ... -
我最想做的是什么?
2009-07-14 23:18 2015《费曼的彩虹》,是我最近读到的一本极好的书。最 ... -
JavaEye的历史,翻开了新的一页!
2008-11-19 22:06 6465JavaEye的Robbin昨天发了一篇blog,题目叫做《推 ... -
外国大牛也不过如此——《梦断代码》读后感
2008-09-13 20:51 8306花了一周的时间, ... -
IT开发与管理——新收获
2008-09-08 22:02 31149月4日,我略尽地主之宜,招待了大概20多位朋友。那一场研讨会 ... -
Play with Quiz — 找零钱 (3)
2008-05-06 22:50 2430要改进这两种算法,都是一个目标,就是寻找不需要列出所有解的办法 ... -
Play with Quiz — 找零钱(2)
2008-05-03 23:25 2607接着上回的讨论,我们需要写两个方法,一个找出所有的零钱组合,g ... -
Play with Quiz — 找零钱 (1)
2008-05-01 23:14 3146先把题目再抄一遍: 这周的题目是找零钱,假设我们需要找给别人3 ... -
Play with Quiz (0)
2008-04-29 22:45 2449自从Quake Wang在JavaEye贴出第一个Ruby每周 ...
相关推荐
在日常运营中,有时我们需要调整文章的发布时间,例如将一篇旧文设定为新发布,或者因为时间调整而更新所有相关文章的时间戳。这个插件就解决了这一需求,让批量修改变得轻而易举。 除了修改发布时间,此插件还支持...
本篇文章将为您介绍如何设置 Word2021 文档的自动保存功能,以避免在意外情况下丢失文档内容。 一、自动保存设置方法 要设置 Word2021 文档的自动保存功能,需要按照以下步骤进行: 步骤一、单击选择 Word 菜单栏...
标题“wordpress文章自动翻新发布【实用插件】”表明我们将讨论一个能够自动更新旧文章并重新发布的WordPress插件。这种插件的主要目的是提升网站内容的时效性,以便在搜索引擎中获得更高的排名。 描述中提到“已...
6. **版本控制**:为了防止误操作或需要回溯历史版本,新云文章系统可能会有文章版本控制功能,保存每次编辑的历史记录,用户可以随时查看和恢复旧版内容。 7. **统计分析**:对于运营者而言,系统可能提供文章的...
这个功能在某些情况下非常实用,比如你想将一篇旧文章重定向到新的相关内容,或者暂时将某个页面指向一个活动页面。 302临时重定向是一种HTTP状态码,表明请求的资源已被临时移动到一个新的URL。这种跳转对于SEO...
本篇文章将深入探讨如何使用Opencv进行摄像头录像并保存为avi格式。 首先,我们需要了解avi格式。AVI(Audio Video Interleave)是由Microsoft开发的一种音频/视频文件格式,支持多音轨和同步的视频流。尽管它相对...
这种转变,正如“旧时光_csdn”这篇文章所勾勒出的个体记忆与怀旧情绪,让我们不禁对过去与现在进行深思。 数字设备的普及,让我们可以随时随地回顾过去,那些通过数码相机、智能手机拍摄的照片、视频,以及在社交...
本篇文章将深入探讨如何使用Java进行Excel的读取和保存,主要依赖于一个名为`jxl.jar`的库。 `jxl.jar`是Java Excel API的简称,它是一个开源库,允许开发者在Java应用程序中方便地读写Microsoft Excel文件。首先,...
这篇文章,以“初中语文文摘人生棉花糖保存的秘密”为题,不仅在字面上吸引读者的好奇心,更在内涵上向我们展示了一个关于幸福哲学的深刻思考。 文章开篇,便将棉花糖描绘成一种承载着童年记忆与甜美滋味的象征物。...
3. **Repository(仓库区/本地仓库)**:本地仓库保存了所有提交过的版本历史,它比工作区和暂存区的内容更旧。`git commit`后,暂存区的内容会被同步到本地仓库。 4. **Remote(远程仓库)**:远程仓库是团队协作...
优化系统是提高电脑性能的重要步骤,尤其是在老旧硬件上运行XP时更为关键。这可能涉及到以下几个方面: 1. **关闭不必要的启动项**:通过"运行"命令输入`msconfig`,然后在“启动”选项卡中取消不必要程序的勾选,...
《初中语文文摘生活纸上的旧时光》便是这样一篇深入探讨旧物与记忆的联系,以及它们在我们生活中留下的不可磨灭痕迹的文章。 首先,文章通过家庭记忆与传承这一线索,带领我们回顾了一个家族的历史。母亲对家中那些...
- **选中单篇文章以开始更多操作**:选中某篇文章后,将解锁更多的管理选项。 - **删除文章**:对于不再需要的文章,可以选择性地删除。 - **拖动文章进行排序**:同文集管理区域类似,通过拖拽可以重新排列文章的...
WordPress的一个核心特性是其内置的文章管理系统,它为每篇文章分配一个唯一的ID以帮助识别和追踪。然而,有时用户会遇到文章ID不连续的问题。这一问题可能由多种原因引起,包括插件冲突、数据导入、删除文章、系统...
本篇文章将深入探讨如何在MSP430X20X3系列MCU上进行Flash存储器的编程,以及如何利用Flash来持久保存数据,特别是在启动过程中直接调用预设值。 Flash存储器是嵌入式系统中的一种非易失性存储器,即使在电源断开后...
本篇文章将深入探讨Android如何管理和利用搜索历史记录,以及开发者如何在自己的应用中实现这一功能。 一、Android搜索历史记录的管理 1. 系统级搜索历史: Android系统有一个内置的搜索框架,用于处理全局搜索...
本篇文章将深入探讨如何实现简洁的Excel下载代码,帮助开发者更高效地处理Excel文件。 首先,我们要理解Excel文件的两种主要格式:`.xls`(旧版,Excel 97-2003)和`.xlsx`(新版,Excel 2007及以后版本)。这两种...
4.纠正后台文章编辑,保存远程图片到本地,如果缩略图是网络图片没纠正成本地路径的BUG 5.删除网站参数设置里无用字段信息 6.后台友情链接新增 链接注释信息 栏 7.后台栏目编辑和单篇页编辑,加入模式选择(栏目、...
代码的修改揭示了一个现象:直接保存`element`对象或者与`element`相关的列表(如`[element_text_list, element]`)会影响元素的行为。 这种看似诡异的现象其实是由Python的垃圾回收机制引起的。在Python中,对象的...
本篇文章将深入探讨如何在React组件中安全地使用`localStorage`,以及与之相关的最佳实践和注意事项。 ### React组件与localStorage 1. **生命周期方法**:在React组件的生命周期方法中使用`localStorage`是最常见...