[资源]CMS系统架构

mikel阅读(1262)

joe.zhang 投递 "作者: 车东 Email: chedongATbigfoot.com/chedongATchedong.com
写于:2003/03 最后更新:
07/27/2004 11:17:25 Feed Back >> 
Creative Commons License

版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者
信息及本声明
http://www.chedong.com/tech/cms.html
关键词:"content manage system" cms 内容管理系统
内容摘要:


内容管理系统概述
内容管理系统是一个很泛的概念:从商业门户网站的新闻系统到个人的Weblog都可以称作发布系统。

  • 框架型:本身不包含任何应用实现,只是提供了底层框架,具体应用需要一定的二次开发,比如Cocoon,Vignette;
  • 应用型:本身是一个面向具体类型的应用实现,已经包含了新闻/评论管理,投票,论坛,WIKI等一些子系统。比如:postNuke xoops等;


但 无论如何,在发布系统选型之前,首先了解自己的实际需求是最重要的:想根据现成系统将自己的需求硬往上照搬是非常不可取的。访问量,权限控制和各种功能需 求。每个模块和功能自己都比较清晰一点以后,再去网上找找类似的实现:你会发现其实每个环节到目前上都有比较成熟的实现了,而且还在不断完善和发展中,如 果没有:你的需求太特殊,或者可以尝试分解成更小的系统组合实现。
内容管理系统被分离成以下几个层面:各个层面优先考虑的需求不同

  1. 后台业务子系统管理(管理优先:内容管理):新闻录入系统,BBS论坛子系统,全文检索子系统等,针对不同系统的方便管理者的内容录入:所见即所得的编辑管理界面等,清晰的业务逻辑:各种子系统的权限控制机制等;
  2. Portal系统(表现优先:模板管理):大部分最终的输出页面:网站首页,子频道/专题页,新闻详情页一般就是各种后台子系统模块的各种组合,这种发布组合逻辑是非常丰富的,Portal系统就是负责以上这些后台子系统的组合表现管理;
  3. 前台发布(效率优先:发布管理):面向最终用户的缓存发布,和搜索引擎spider的URL设计等……

内 容管理和表现的分离:很多成套的CMS系统没有把后台各种子系统和Portal分离开设计,以至于在Portal层的模板表现管理和新闻子系统的内容管理 逻辑混合在一起,甚至和BBS等子系统的管理都耦合的非常高,整个系统会显得非常庞杂。而且这样的系统各个子系统捆绑的比较死,如果后台的模块很难改变。 但是如果把后台各种子系统内容管理逻辑和前台的表现/发布分离后,Portal和后台各个子系统之间只是数据传递的关系:Portal只决定后台各个子系 统数据的取舍和表现,而后台的各个子系统也都非常容易插拔。
内容管理和数据分发的分离:需要要Portal系统设计的时候注意可缓存性(Cache Friendly)性设计:CMS后台管理和发布机制,本身不要过多考虑“效率”问题,只要最终页面输出设计的比较Cacheable,效率问题可通过更前端专门的缓存服务器解决。
此外,就是除了面向最终浏览器用户外,还要注意面向搜索引擎友好(Search engine Friendly)的URL设计:通过URL REWRITE转向或基于PATH_INFO的参数解析使得动态网页在链接(URI)形式上更像静态的目录结构,方便网站内容被搜索引擎收录;
————— ————— —————
|新闻管理子系统| | BBS论坛子系统| | 商城子系统 |
————— ————— —————
| / | / 内
| ———-|— / 容 | / | / 管
————— | ————— 理
|专题制作子系统| | |全文检索子系统|
————— | —————
| /
————————-|———————————————
| / 频
————— 道 | Portal 系统 | 管
————— 理
|
————————-|———————————————
| 前
| 台 ————— 发
|前台发布系统 | 布
—————
/
/
————— —————
| 用户浏览器 | |Search Engine|
————— —————
这里,我把在内容发布系统选型中找到的一些资料总结如下:

内容管理系统的选型
关键词:CMS Content Manage System
CMS行业研究
http://www.cmswatch.com
http://www.cmsreview.com
http://www.cmsinfo.org
CMS讨论邮件列表
http://www.cms-list.org
商业软件和开源项目列表:
http://directory.google.com/Top/Computers/Software/Internet/Site_Management/Content_Management/
推荐:基于XML的发布框架
http://cocoon.apache.org/
具体实现复杂程度可能会根据需求的不同而不同,但越是大型的系统越是需要分工:将内容(数据),表现(模板)和应用逻辑(程序)尽可能分离和对这3 者的管理。
Portal—门户系统
Open source Projects:
http://jportlet.sourceforge.net/
Apache Software Foundation: Jakarta JetSpeed 1.3
JetSpeed home page: http://jakarta.apache.org/jetspeed/site/index.html
JetSpeed Portlet API: http://cvs.apache.org/viewcvs/jakarta-jetspeed/proposals/portletAPI/
http://www.liferay.com/home/index.jsp
http://basicPortal.com/
http://www.jahia.org/
http://jporta.sourceforge.net/
商业软件:
BEA WebLogic Portal – http://edocs.bea.com/wlp/docs81/javadoc/com/bea/Portal/model/Portlet.html
IBM Websphere Portal – http://www.software.ibm.com/wsdd/zones/Portal/
Oracle Portal Developer Kit – http://Portalstudio.oracle.com/
其它:
PSML – http://jakarta.apache.org/jetspeed/site/psml.html
BEA: Web Logic Portal 4.0 http://www.bea.com/products/weblogic/Portal/index.shtml
IBM: WebSphere Portal 2.1 http://www-4.ibm.com/software/webservers/Portal/
iPlanet: iPlanet Portal Server 3.0 http://www.iplanet.com/products/iplanet_Portal/home_Portal.html
Oracle: oracle 9i Portal http://www.oracle.com/ip/deploy/ias/Portal/index.html
SAP Portal: http://www.iviewstudio.com
Epicentric Portal: http://www.epicentric.com/solutions/products/efs/
参考:
Wafer:Java开发框架研究
http://www.waferproject.org/index.html
门户(Portal)系统相关开发框架:
http://udoo.51.net/mt/archives/000011.html
广告管理系统
关键词:ad server
广告系统和内容的分离,可以大大降低系统之间的关联度。
 
专业行业研究网站:
http://adres.internet.com
相关厂商和开源项目:
http://directory.google.com/Top/Computers/Programming/Languages/PHP/Scripts/Ad_Management/?il=1
http://directory.google.com/Top/Computers/Software/Internet/Servers/Advertising/?tc=1
http://www.jspin.com/home/apps/admanage?cob=winedit
http://www.scriptdex.com/dex/php_ad_management.shtml
推荐:
http://www.phpadsnew.com/ 功能性比较强
http://oasis.sourceforge.net/ 免费 基于日志记录和定期导入MYSQL统计,可以负载50万请求/每小时 以上
如果看重广告的第3方特性,可以选择第三方服务:
http://www.doubleclick.net/
http://www.allyes.com/
论坛/社区系统 关键词: BBS FORUM
论坛软件介绍:
http://directory.google.com/Top/Computers/Internet/Web_Design_and_Development/Message_Boards/
推荐:
http://www.phpBB.com PHP + MySQL open source
http://www.vbulletin.com/order/ PHP + MySQL  有付费的商业支持85-160$
http://www.jivesoftware.com/products/pricing.jsp 商业论坛系统,1000$-2500$ 有知识库扩展应用
http://yazd.yasna.com/features.jsp 基于 Java
所见即所得(WYSIWYG)编辑器在内容的录入管理方面,所见即所得是比较重要的,这样可以大大简化对系统中布局排版的需求。
基于浏览器的WYSIWYG(所见即所得)编辑器是CMS设计中,编辑工具的主要考虑方面。目前主要是通过JavaScript调用IE或其他浏览器的内置方法实现。其中基于IE5.5浏览器的实现最为简洁。这里有一个完整的例子:
Building a WYSIWYG HTML Editor Part 1/2
Building a WYSIWYG HTML Editor Part 2/2
主要功能:

  • 能够通过JavaScript实现的基本功能:加粗,斜体字,居中,添加链接,添加图片,模式切换:HTML和文本模式的切换,
  • Word垃圾代码过滤
  • 图片上载接口:图片上载最好通过其他独立模块实现。

选型指标:

  • 不依赖服务器端代码:只通过JAVASCRIPT或客户端控件实现代码,可以保证以后系统迁移的方便。
  • WORD垃圾代码过滤

可视化编辑器大全:
http://www.bris.ac.uk/is/projects/cms/ttw/ttw.html
推荐:
http://www.aine.be/aynhtml/
图片/文件上传组建图片和文件等非结构化数据还是分别使用另外的服务解决比较好。这样可以大大简化CMS本身的复杂程度。
推荐:
文件上传:
Apache Commons项目
http://jakarta.apache.org/commons/
ImageJ:图片处理缩略图生成和水印等
http://rsb.info.nih.gov/ij/
关于Blog系统的选型,目前主流的基于PHP的包括:
· Nucleus 3.0 www.nucleuscms.org
· pmachine 2.3 www.pmachine.com
· b2evolution 0.9.0.3 www.b2evolution.net
· Serendipity 0.6 www.s9y.org
· WordPress 1.2 www.wordpress.org
· bBlog 0.7.3 www.bblog.com
· pLog 0.3.1 www.plogworld.org
· Simplog .9 www.simplog.org
· Textpattern 1.18a www.textpattern.com 原文出处:http://www.chedong.com/tech/cms.html

[问题]FSO组件不可用的解决方案

mikel阅读(690)

解决办法:
权限出现了问题,打开注册表加入权限!
在 开始-运行中敲入regedit,然后找到HKEY_CLASSES_ROOT\Scripting.FileSystemObject
右击权限,加入everyone用户并有”写入,完全控制的权限”确定,然后重新启动IIs即可搞定!

[资源]Flash 3D引擎

mikel阅读(767)

Flash 3D 应用目前是一个趋势,多半是使用以下几个引擎。
毫无疑问,Flash 10 (CS4) 也会支持一些 3D 特性.
只不过是软模拟,而非真正意义上的 3D.

欢迎补充…

 P.S.顺便推荐一个应用演示:
Spectra visual newsreader


[Flex]使用FLEX的HttpService与ASP.NET进行动态交互之一

mikel阅读(677)

现在RIA技术可以说在互联网上是风风火火,adobe公司有FLEX,微软有银光。现在可以说是个有个的好处,不过做为互联网上最为风行的FLASH,我想它的支持率是大家有目共睹的,银光虽好,不过也得需要个一二年的成熟期哪。

以前我在cnblogs上搜过是否有FLEX的文章,找到的比较少,记得好像是大部分都是采用了WEBSERVICE或者是WCF来实现的,关于HTTPService实现的方法就比较少了,也许各位大侠比较喜欢用webserivce吧。

首先我先介绍一下什么是httpservice,flex中的httpservice通信方式,说白了就是采用get与post方法进行数据传送, 和我们平时用的表单提交没有什么不同。httpservice对象位于mx.rpc.http包中,它主要用来发送http形式的get或post请求. 对POST与GET的区别我就不说了,我想大部分都是明白的,这种方式最大的好处就是通用性高,不管它是PHP、ASP、JSP或者是我心爱的 ASP.NET都可以对FLEX提交过来的数据进行处理与回递。

在FLEX程序中,想要使用httpservice对象很方便,格式如下:

<mx:HttpService id="userRegForm" url="useradd.aspx" method="get|post">

以上是最简单的写法,还有一种就是用XML来写,请看下文:

   1:      <mx:HTTPService showBusyCursor="true"
   2:                      id="getuser" result=""
   3:                      url="http://localhost:6666/Default.aspx">
   4:          <mx:request>
   5:              <username>
   6:   
   7:              </username>
   8:              <userpassword>
   9:   
  10:              </userpassword>
  11:          </mx:request>
  12:      </mx:HTTPService>
这里面有许多的属性可能大家不是很清楚,我来一一给大家解释:
ShowBusyCursor属性是指在提交请求时,是否显示忙碌的状态
id比较好理解它就是这个httpservice请求的标示
result是指请求之后的回调方法,主要是发送请求之后,需要得到一个结果
URl是发送的地址
<mx:request>中主要发着一些请求参数,相信大家也能看得懂。
当我们有了这些基础之后,我们就可以来编写一个最简单的FLEX交互程序了,首先打FLEX,先做一个界面,界面的样式如下图:
Snap1 
具体的代码:
   1:  <?xml version="1.0" encoding="utf-8"?>
   2:  <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
width="320" height="219">
   3:      <mx:HTTPService showBusyCursor="true"
   4:       id="getuser" result="getuserproc();"
   5:        url="http://localhost:6666/Default.aspx">
   6:          <mx:request>
   7:              <username>
   8:                  {this.txtUserName.text}
   9:              </username>
  10:              <userpassword>
  11:                  {this.txtUserPassWord.text}
  12:              </userpassword>
  13:          </mx:request>
  14:      </mx:HTTPService>
  15:      <mx:Script>
  16:          <![CDATA[
  17:          import mx.controls.Alert;
  18:          
  19:              public function getuserproc():void
  20:              {
  21:                  var returnValue:String=getuser.lastResult.Result.chu888;
  22:                  if(returnValue=="ok")
  23:                  {
  24:              Alert.show("您成功的登录了","提示信息",Alert.OK,this,null,null,Alert.YES);
  25:                  }
  26:                  else
  27:                  {
  28:              Alert.show("您的登录失败了","提示信息",Alert.OK,this,null,null,Alert.YES);
  29:                  }
  30:              }
  31:          ]]>
  32:      </mx:Script>
  33:      <mx:Panel id="UserRegPanel" x="9.15" y="9.05" width="302" 
  34:                height="204" layout="absolute">
  35:          <mx:Label x="10" y="22" text="用户名:" id="lblUserName" 
  36:                    enabled="true" fontSize="15"/>
  37:          <mx:Label x="10" y="64" text="密   码:" id="lblUserPassWord" 
  38:                    enabled="true" fontSize="15"/>
  39:          <mx:TextInput x="83" y="22" fontSize="15" id="txtUserName"/>
  40:          <mx:TextInput x="83" y="63" fontSize="15" id="txtUserPassWord"/>
  41:          <mx:Button x="96.45" y="108" label="登录" width="89" height="36" 
  42:                     fontSize="15" enabled="true" click="getuser.send()">
  43:              <mx:icon>@Embed(source='../libs/001_54.png')</mx:icon>
  44:          </mx:Button>
  45:      
  46:      </mx:Panel>
  47:  </mx:Application>
流程处理:
演示文稿1 
之后哪,我们新建一个Default.aspx的页面,页面内容很简单,代码如下:
   1:  namespace WebApplication4
   2:  {
   3:      public partial class _Default : System.Web.UI.Page
   4:      {
   5:          protected void Page_Load(object sender, EventArgs e)
   6:          {
   7:              if (Request.QueryString["username"].Equals("chu888"))
   8:              {
   9:                  Response.Write("<Result>");
  10:                  Response.Write("<chu888>ok</chu888>");
  11:                  Response.Write("</Result>");
  12:              }
  13:              else
  14:              {
  15:                  Response.Write("<Result>");
  16:                  Response.Write("<chu888>error</chu888>");
  17:                  Response.Write("</Result>");
  18:              }
  19:          }
  20:      }
  21:  }
之后哪,将Flex的内容发布,附加到ASP.NET的程序即可,这里面有一个地方,需要大家注意的就是,由于每一次ASP.NET的文件服务器产生
的端口是不一样的,你需要将端口固定,要不然你的程序会出现找不到程序的。
Snap2 

[3D]flash 360度3D虚拟实境(cubicVR)实现原理

mikel阅读(793)

flash 360度3D虚拟实境(cubicVR)实现原理

flash的3D虚拟实境最早源自于德国的flash图形学大牛andre.michelle在其labsite:lab.andre- michelle.com上发表了一篇关于虚拟实境的文章,并提供了一个实例(NaN sourcecode).为了深入虚拟实境,在接下来的2个月里我陆续找到一些cubicVR的源文件并尝试破译了一些源码,我同时尝试开发了一个简单的 flash3D引擎以及图片3D拉伸算法,所有这些的思想均来自于andre-michelle在其日志中提到的一些idea.现在在这篇文章中所用的实 例依然是我对andre早期版本的整理,虽然目前我开发的新版本有更好的结构以及执行效率,但此版本的编程思想更通俗易懂。我想利用这个假期时间开发出 flash球型虚拟实境,使它变得更真实。

在flash里部署3D虚拟实境无疑是一个革命性进步,我们再也不用去安装java虚拟机和QTVR了,事实上,在基于flash的可编程矢量图形 界面基础上开发出来的虚拟现实可以通过创新的用户界面以达到完美的用户体验。city8.com既采用这种技术来部署他们的全景体验城市地图。

demo:鼠标拖拽以转换camera视角

原理:

点透视与投影

通过1点透视来产生远小近大的变化以产生空间感,在cubicVR中,设想观察者camera在一个正六面体中央,通过一点透视来计算每个面的在空间投影中的位置,以产生透视效果。

demo:没有导入透视方程的情况:

细分贴图

flash的matrix类只支持2D图形变换:切变、缩放、平面位移。位图无法实现3D变换,这与openGL不同,openGL只需要在定义多 边型顶点和贴图法线,位图就会自动贴到一个面片上,而且整个贴图过程完全由GPU完成。而在flash中必须使用细分贴图的方法来欺骗人们的眼睛,既:将 一张图片细分为n张小的三角面片,再将小三角面片进行平面切变,正因为如此,flash3D一旦涉及贴图必然导致大量占用cpu运算资源。

细分贴图的demo:
http://godson.blueidea.com/archives/2006/3708.shtml

消隐算法

如果没有消隐算法,那么观察者只能看到离屏幕最近的面,而不能看到整个3D空间,理论上消隐算法有3个步骤:1在一个六面体中,面法线与视锥体夹角 大于180度则应设为不可见,2在同一个像素上,只显示与camera最近的多边形(Zbuffer算法),3投影在屏幕以外的多边型不可见,但这三种算 法非常占用cpu资源,andrew设计了一种更简单的算法:1多边形的中心与camera重合,在camera坐标系中Z值<0的多边形不可 见,2投影在屏幕以外的多边型不可见。

经典论坛讨论
http://bbs.blueidea.com/thread-2717880-1-1.html

本文链接:http://www.blueidea.com/tech/multimedia/2007/4486.asp

[资源]JS编辑器

mikel阅读(841)

  1. 非常实用的163邮箱编辑器

    new163Editor.rar (395.12 KB)
    2 soEditor v 2.5 lite

官方: http://www.siteobjects.com/pages/index.cfm
下载: http://www.siteobjects.com/pages/order.cfm
可以下载的是lite版, 目前还没找到pro版的. 可以支持ASP,Coldfusion,ASP.NET.
界面做的很整洁,但没有文件管理,最大的问题是对于直接从其他处复制来的图片
不会做自动修正.当然这个也仁者见仁了.
soEditor 2.5 is an extremely powerful browser-based WYSIWYG content authoring tool

designed specifically for dynamic web applications. This customizable editor allows

developers to make it possible for anyone to create, edit and maintain web content

without the need for HTML knowledge or programming expertise.
3 AreaEdit V 0.4.2
演示:
http://www.formvista.com/uploaded_html/demos/areaedit/examples/simple_example.php
下载: http://www.formvista.com/goalTracker/stream_download.php/14/areaedit_0.4.3.tar.gz
支持: http://www.formvista.com/forum
修改htmlarea的编辑器增加了图片文件管理器
htmlarea 作为在线编辑器领域的开源作品享有不错的知名度
有很多的支持者和插件开发者,这些都得益于html良好的扩展性.
AreaEdit is a formVista compatible fork of the rapidly developing Xinha project.

It is the code that is generated by the formVista FVML <htmleditor> tag during rendering.
Xinha itself is a fork of the original HTMLArea component created by Mihai Bazon and

sponsored by Interactivetools. AreaEdit maintains the original HTMLArea (modified BSD)

license and is free to use.
While it is designed to work within formVista without modification, AreaEdit does not

requre formVista. It is a fully functional editor component supporting a number of

plugins and can as easily be used as a standalone editor component for any PHP web

application.
The primary difference between AreaEdit and Xinha is one of focus. The Xinha project

aims to be a rapidly developing feature-filled editor with many plugins.
By contrast, AreaEdit takes a slower minimalists approach. It aims first and foremost

to be functional and maintainable. The feature set we are focusing on is targeted

squarely at the serious non-technical business user. Business users don't care

about the nuances of HTML <br> and <p> tags, they just want the editor to work as

they would expect.
If your audience is primarly composed to developers or those familar with HTML, you

 should take a look at Xinha.
AreaEdit is known to work with MSIE 5.5 or later and any modern Gecko based

browsers. (FireFox, Mozilla).
4 DevEdit Version 5.0.1 破解版
官方网站:
http://www.interspire.com
演示: http://www.interspire.com/devedit/demo.php
下载: http://bbs.80nian.net/thread-259-1-1.html?acdt=/devedit.rar
警告: 本程序是商业程序,仅供网友研究学习,请在下载后24小时内删除. 对于由此产生的法律问题本站概不负责
5 Web Wiz Rich Text Editor v3.0
下载:
http://www.webwizguide.info/asp/sample_scripts/RTE_application.asp
演示: http://www.richtexteditor.org/demo/
支持在线文件管理,跨浏览器,但对表格编辑功能不强,界面不够精致
6 KTML.Pro.v3.5.6-SPK100
下载:
http://bbs.80nian.net/thread-259-1-1.html?acdt=/KTML_PRO-3.5.6.ZIP
警告: 本程序是商业程序,仅供网友研究学习,请在下载后24小时内删除. 对于由此产生的法律问题概不负责.
有着类似dw一样的属性栏,这个是pro版,提供了lite版没有的对表格的属性编辑等功能,

有兴趣的可以去官方看看lite版.
7 TextArea Rich v3.0
下载:
http://bbs.80nian.net/thread-259-1-1.html?acdt=/textarea.rich.v3.0.rar
做的很干净的编辑器,适合于CMS.功能强大.
8 Tabula WYSIWYG HTML editor ver. 2.2
演示:
http://www.tabula.biz/showArticle.asp?articleid=253
下载: http://www.tabula.biz/ShowArticle.asp?MID=5&ArticleID=257
和ewebsoft很像的编辑器右键功能强悍,界面做的稍稍差了点点:)
9 TinyMCE 2.0RC3
官方网站:
http://tinymce.moxiecode.com/
官方演示: http://tinymce.moxiecode.com/example_full.php?example=true
下载: http://keihanna.dl.sourceforge.net/sourceforge/tinymce/tinymce_2_0RC3.zip
有一个很好的开源编辑器,界面,功能和可扩展性做的都很好
10 网页在线编辑器 mEditor ASP 中文版 v2.0
下载:
http://bbs.80nian.net/thread-259-1-1.html?acdt=/meditor.zip
运行环境支持:
操作系统支持: Windows 2000 系列 / Window Xp 系列 / Window 2003 系列
网络服务器支持:
Asp 版本要求安装IIS 5.0版本或更高版本
浏览器支持: 正常运行在IE5.5以上版本,部分特殊功能要求IE版本升级到6.0以才能使用
>>> 在网络服务器设置完成后,运行index.asp进行样式管理.
>>> 建议将mEditor放在项目的根目录.
注意事项 有关无组件上传类
v2.0 升级事项
1.修正内核部分字符编码的问题.
2.增强系统运行的健壮性与稳定性.
3.增加了"模式按钮"栏式管理,可随意启用/取消模式按钮.
4.在编辑器的样式上进行了整体的修改.
5.增加了编辑器的缩放功能,仅适用于IE5.5以上版本.
6.增加了"搜索替换"功能(快捷键CTRL+R),仅适用于IE5.5以上版本.
7.将部分功能移植到"代码模式"使用,如:"全选","删除","复制"…..
8.增加快捷键CTRL+1(预览模式),CTRL+2(代码模式),CTRL+3(视图模式),CTRL+R(查找替换).
11
EWELive JScript Editor 0.4
6

下载:  
http://www.ewelive.com/downloads/0_64_JS.zip
我曾经仔细的去汉化过这个版本的编辑器,加了一些自己的界面设计和按钮.
速度很快,功能简单使用,容易修改. 对于喜欢简单一族的朋友可以下来看看.
官方:
http://www.ewelive.com
演示: http://www.ewelive.com/demo_js/sample.php
12 InnovaStudio WYSIWYG Editor v2.3
警告: 本程序是商业程序,仅供网友研究学习,请在下载后24小时内删除. 对于由此产生的法律问题概不负责.
界面做的很是精细, 功能极强大,非常优秀之作,强烈推荐
下载
http://www225.fixdown.com/code/sp-iwe23.rar
13 CuteEditor for ASP Enterprise License
警告: 本程序是商业程序,仅供网友研究学习,请在下载后24小时内删除. 对于由此产生的法律问题概不负责.
Cuteditor 我曾研究过,不亏为成熟的商业作品,各方面做的都很规范,功能强大,也提供简体中文语言包,

个人非常喜欢.强烈推荐
下载: http://bbs.80nian.net/thread-259-1-1.html?acdt=/CuteEditor_for_ASP_Enterprise_License.rar
14 FCKeditor 2.6 精简版第三版新增表格功能
http://bbs.80nian.net/viewthread.php?tid=158&highlight=FC

[观点]RAM硬盘

mikel阅读(805)

Jim Gray在过去40年中对技术发展有过巨大的贡献,“内存是新的硬盘,硬盘是新的磁带”是他的名言。“实时”Web应用不断涌现,达到海量规模的系统越来越多,这种后浪推前浪的发展模式对软硬件又有何影响?
Tim Bray早在网格计算成为热门话题之前,就讨论过以RAM和网络为中心的硬件结构的优势,可以用这种硬件建立比磁盘集群速度更快的RAM集群。

对 于数据的随机访问,内存的速度比硬盘高几个数量级(即使是最高端的磁盘存储系统也只是勉强达到1,000次寻道/秒)。其次, 随着数据中心的网络速度提高,访问内存的成本更进一步降低。通过网络访问另一台机器的内存比访问磁盘成本更低。就在我写下这段话的时候,Sun的 Infiniband产品线中有一款具备9个全互联非阻塞端口交换机,每个端口的速度可以达到30Gbit/sec!Voltaire产品的端口甚至更 多;简直不敢想象。(如果你想了解这类超高性能网络的最新进展,请关注Andreas Bechtolsheim在Standford开设的课程。)

Tim还指出Jim Gray的名言中后半句所阐述的真理:“对于随机访问,硬盘慢得不可忍受;但如果你把硬盘当成磁带来用,它吞吐连续数据的速率令人震惊;它天生适合用来给以RAM为主的应用做日志(logging and journaling)。”
时间闪到几年之后的今天,我们发现硬件的发展趋势在RAM和网络领域势头不减,而在硬盘领域则止步不前。Bill McColl提到用于并行计算的海量内存系统已经出现

内 存是新的硬盘!硬盘速度提高缓慢,内存芯片容量指数上升,in-memory软件架构有望给各类数据密集的应用带来数量级的性能提升。小型机架服务器 (1U、2U)很快就会具备T字节、甚至更大量的内存,这将会改变服务器架构中内存和硬盘之间的平衡。硬盘将成为新的磁带,像磁带一样作为顺序存储介质使 用(硬盘的顺序访问相当快速),而不再是随机存储介质(非常慢)。这里面有着大量的机会,新产品的性能有望提高10倍、100倍。

Dare Obsanjo指出如果不把这句真言当回事,会带来什么样的恶劣后果—— 也就是Twitter正面临的麻烦。论及Twitter的内容管理,Obsanjo说,“如果一个设计只是简单地反映了问题描述,你去实现它就会落入磁盘 I/O的地狱。不管你用Ruby on Rails、Cobol on Cogs、C++还是手写汇编都一样,读写负载照样会害死你。”换言之,应该把随机操作推给RAM,只给硬盘留下顺序操作。
Tom WhiteHadoop Core项目的提交者,也是Hadoop项目管理委员会的成员。他对Gray的真言中“硬盘是新的磁带”部分作了更深入地探讨。White在讨论MapReduce编程模型的时候指出,为何对于Hadloop这类工具来说,硬盘仍然是可行的应用程序数据存储介质:

本 质上,在MapReduce的工作方式中,数据流式地读出和写入硬盘,MapReduce是以硬盘的传输速率不断地对这些数据进行排序和合并。 与之相比,访问关系数据库中的数据,其速率则是硬盘的寻道速率(寻道指移动磁头到盘面上的指定位置读取或写入数据的过程)。为什么要强调这一点?请看看寻 道时间和磁盘传输率的发展曲线。寻道时间每年大约提高5%,而数据传输率每年大约提高20%。寻道时间的进步比数据传输率慢——因此采用由数据传输率决定 性能的模型是有利的。MapReduce正是如此。

虽然固态硬盘(SSD)能否改变寻道时间/传输率的对比还有待观察,White文章的跟贴中,很多人都认为SSD会成为RAM/硬盘之争中的平衡因素
Nati Shalom对内存和硬盘在数据库部署和使用中的角色作了一番有理有据的评述。 Shalom着重指出用数据库集群和分区来解决性能和可伸缩性的局限。他说,“数据库复制和数据库分区都存在相同的基本问题,它们都依赖于文件系统/硬盘 的性能,建立数据库集群也非常复杂”。他提议的方案是转向In-Memory Data Grid(IMDG),用Hibernate二级缓存或者GigaSpaces Spring DAO之类的技术作支撑,将持久化作为服务(Persistence as a Service)提供给应用程序。Shalom解释说,IMDG

提供在内存中的基于对象的数据库能力,支持核心的数据库功能,诸如高级索引和查询、事务语义和锁。IMDG还从应用程序的代码中抽象出了数据的拓扑。通过这样的方式,数据库不会完全消失,只是挪到了“正确的”位置。

IMDG相比直接RDBMS访问的优势列举如下:

  • 位于内存中,速度和并发能力都比文件系统优越得多
  • 数据可通过引用访问
  • 直接对内存中的对象执行数据操作
  • 减少数据的争用
  • 并行的聚合查询
  • 进程内(In-process)的局部缓存
  • 免除了对象-关系映射(ORM)

你是否需要改变对应用和硬件的思维方式,最终取决于你要用它们完成的工作。但似乎公论认为,开发者解决性能和可伸缩性的思路已经到了该变一变的时候。

查看英文原文:RAM is the new disk…

[MVC]asp.net的MVC编程、MV编程以及URL重写

mikel阅读(799)

前一段时间做一个网站项目(运行于win2003+.net2.0环境),其间自己写了一个MVC架构,觉得比较适合团队快速开发ASP.NET web站点,现在拿出来和大家一起共享,请多指正。

一、MVC编程:
      针对用户的浏览器来说,网站可以看作一个实体、一个接口,其接收浏览器的请求,并将相应的信息返回给浏览器;因此,网站程序完全可以用一个程序来完成,而 实际上也确实如此,IIS、apache等web服务器本身就是一个程序,而运行其中的asp、aspx、php、jsp、html等等的单个页面,只不 过是帮助web服务器来实现一定功能而已。

      由此可以引申出:我们完全可以用一个aspx页面来处理针对网站的所有动态请求。

      而这个页面,我们就把它起名为index.aspx吧。

      在apache、tomcat等web服务器,都有相应的技术,将网站符合一定规则的所有http请求,都转向一个程序页面(如index.jsp或 index.php)来处理。而IIS在IIS7(前面提到,我们的网站服务器是windows2003,IIS版本为6.0)出来以前,只能借助于第三 方组件实现(windows2008的IIS7.0可以不借助第三方组件实现URLRewrite,网上可以找到相关代码)。这其中比较有名的2个是 ISAPI_Rewrite(Full版收费,Lite版免费)和IonicIsapiRewriter(免费),而对于我们这个MVC架构来 说,ISAPI_Rewrite Lite版(下载ISAPI_Rewrite Lite这里有ISAPI_Rewrite Lite的最新版本,我们使用的是ISAPI_Rewrite3_0047_Lite.msi)就足够了,由它来控制请求到我们的index.aspx(具体代码参见DotNetMVC示例网站代码)。

(一) 网站的目录结构
      为了使图片、css文件、js文件、html文件等免于ISAPI_Rewrite处理,需在网站根目录建立一个单独的mvc目录,其中存放MVC架构需要的aspx文件,从而网站的目录结构如下:
ROOT
  |–App_Code
        |–DotNetMVC
              |–DAL
                  |–UserDA.cs
              |–Model
                  |–User.cs
              |–Util
                  |–ControllerUtil.cs
                  |–DBUtil.cs
  |–Bin
      |–log4net.dll
  |–css
  |–images
  |–js
  |–mvc
      |–application
             |–controllers
                  |-default.aspx
                  |-user.aspx
             |–views
                  |–default
                       |-index_view.aspx
                  |–share
                  |–user
                       |-home_view.aspx
                       |-list_view.aspx
      |–cache
      |–log
      |-index.aspx
  |-Default.aspx
  |-Global.asax
  |-web.config

      上面的结构中,css、images、js放什么文件分别存放站点用的样式文件、图片文件、JavaScript脚本文件;Bin存放公共组件(目前有一 个日志组件log4net.dll,其配置信息在web.config配置文件中),App_Code存放自定义的公共类,这是.net2.0规定 的,mvc目录的作用上面说了,不再赘述。

     下面再看App_Code和mvc下的子目录构成:
      App_Code->Util目录,存放一些实用工具类,目前有2个,DBUtil.cs是SQLServer数据库处理工具类,而 ControllerUtil.cs则是我们这个MVC架构比较核心的URL路由工具类,其中ParseUri方法解析URI返回控制器、控制分支、参数 等,LinkTo方法产生需要的网站链接URL(具体代码参见DotNetMVC示例网站代码)。大家还可以在其中添加一些需要的功能,如上传、Email、字符串、分页、图形处理等。
      而App_Code->DAL和App_Code->Model目录中的内容一起组成MVC架构中M层逻辑,其中Model目录的仅仅是数据 库表的数据抽象类(这些类可以自己写,也可以通过工具结合数据库表自动生成),DAL目录中的类则通过访问数据库返回数据抽象类的对象实例或实例列表,供 控制层调用。
      mvc根目录下的index.aspx文件,如上所述是MVC架构的入口文件。
      mvc->cache和mvc->log目录分别存放缓存文件和日志文件,如果需要的话。
      mvc->application目录中的controllers目录和views目录分别是控制器文件和视图文件,即MVC架构中的C和V层,其 中一个控制器对应一个aspx文件(如user.aspx),并在views目录中有一个视图子目录对应(如views->user),其中存放多 个此控制器可能用到的视图文件(如home_view.aspx和list_view.aspx等);views->share目录中,则是一些视 图文件可能用到的公共文件,如头尾包含页、母板页等。

(二)MVC运转流程:

      前面曾经提到,要把所有针对本站点的动态请求,都统一到index.aspx这个文件来集中处理,因此需要借助ISAPI_Rewrite,在ISAPI_Rewrite Lite的配置文件httpd.conf(位于ISAPI_Rewrite Lite的安装目录)中增加下面一条记录即可:
RewriteRule /mvc/(.*)$ /mvc/index.aspx\?idu=$1 [NC,NE]

      这条规则是将针对/mvc这个URI及其后的所有访问,都导向到index.aspx这个文件来处理,并将URI路径作为idu参数的值传给index.aspx
      下面看看index.aspx文件的内容:

<%@ Page Language="C#" %>
<%@ import namespace="System.Threading" %>
<%
    
string controller;
    
string method;
    
string[] parameters;
    
string uri_string = Request.QueryString["idu"];
    DotNetMVC.Util.ControllerUtil.ParseUri(uri_string, 
out controller, out method, out parameters);

    Context.Items.Add(
"method", method);
    Context.Items.Add(
"parameters", parameters);
    
    
string ctlpage = "system/application/controllers/" + controller + ".aspx";
    
try
    
{
        Server.Transfer(ctlpage, 
true);
    }

    
catch (HttpException e)
    
{
        log4net.LogManager.GetLogger(
"LogFile").Error("\r\n客户机IP:" + Request.UserHostAddress + "\r\n错误地址:" + Request.Url, e);
    }

%>

      上面代码的关键是,通过对idu值的解析,取得controller、method、parameters这3个参数;其中controller对应于一 个控制器文件,method对应控制器中的一个控制分支,parameters则是参数的字符串数组(参数顺序自己把握),其对应URI如下:
/mvc/controller/method/parameter1/parameter2/parameterN
      目前这个MVC架构的URI,都是一个控制器,后跟一个分支,再后跟多个参数,如果没有controller、method、parameters,则默 认调用default控制器的index分支,如果没有method、parameters,则默认调用本控制器的index分支;如果以上不满足要求, 大家可以自己更改ControllerUtil类的ParseUri方法或者写一个复杂的URL Routing(我个人认为不管什么,够用就好,controller、method已经能够表达复杂的网站层次了)。Server.Transfer方 法的第2个参数为true,是确保request、cookie、session等变量能够传递到控制器程序中。

      下面通过default.aspx这个控制器(可以一个功能或一个模块作为一个控制器)说明一下控制器的流程:

<%@ Page Language="C#" %>
<%@ import namespace="DotNetMVC.Util" %>
<%
string method = (string)Context.Items["method"];
string[] parameters = (string[])Context.Items["parameters"];
try
{
    
if (method == "index")
    
{
        Context.Items.Add(
"loginurl", ControllerUtil.LinkTo("user""login"""));
        Context.Items.Add(
"userlisturl", ControllerUtil.LinkTo("user""list"""));
        Server.Execute(
"application/views/default/index_view.aspx");
    }

}

catch (HttpException e)
{
    log4net.LogManager.GetLogger(
"LogFile").Error("\r\n客户机IP:" + Request.UserHostAddress + "\r\n错误地址:" + Request.Url, e);
}

%>

      上面代码中,首先通过Context获取index.aspx中 得到的method、parameters参数,然后根据method值的不同,走不同的处理分支(这里可以调用M层获取数据)产生数据并保存在 Context(目前仅找到用Context来传递数据到视图)中,再调用不同的视图;这里只有一个默认index分支,去调用首页视图 index_view.aspx。


      最后看看views->default目录下index_view.aspx这个视图文件内容:

<%@ Page Language="C#" EnableViewStateMac="false"%>
<%
    
string loginurl = (string)Context.Items["loginurl"];
    
string userlisturl = (string)Context.Items["userlisturl"];
%>
<!– #include file="../share/top.aspx" –>
<center>
<form name=frm1 method=post action=<%=loginurl %>>
昵称:
<input type=text name=nick size=20>&nbsp;&nbsp;
密码:
<input type=password name=pass size=20>
<input type=submit value=登陆> &nbsp;<a href=<%=userlisturl %>>去用户列表</a>
</form>
</center>
<!– #include file="../share/bottom.aspx" –>

      这个视图文件中的代码则通过Context接收控制器传过来的数据并显示它。
      至此,整个MVC的运转流程就完成了;其他更复杂的一些操作,大家可以参照DotNetMVC示例网站代码,相信根据这个示例,就可以直接建立并快速开发自己的MVC网站了,并有URL重写功能;在其中的user控制器及视图中,大家可以看到这种编程有一个好处,那就是可以充分利用visual studio的代码智能感知功能。
      不过,有一点需要大家注意,因为需要经过ISAPI_Rewrite过滤器与Transfer、Execute处理,所以会有一些性能损失。根据流程的复 杂程度,其损失所占比重会有所不同:越复杂的流程,其损失所占比重越小,越简单的流程,其损失所占比重越大;所以大家在用这套流程开发网站时,应充分注意 这一点,并适当进行程序优化,或者干脆别用它了

二、MV编程:

      大家在看上面的DotNetMVC示例网站代码的时候,肯定有一个感觉:在控制层产生数据,要赋给Context,视图层再从Context中取出数据来显示,似乎多此一举;所以引出下面的MV编程(可能会丧失一些灵活性和可维护性,但开发一般的网站应该足够了)。

      我们只需要把DotNetMVC示例网站代码中的代码简单做一下修改就可以了。

      首先,修改index.aspx如下:

<%@ Page Language="C#" %>
<%@ import namespace="System.Threading" %>
<%
    
string controller;
    
string method;
    
string[] parameters;
    
string uri_string = Request.QueryString["idu"];
    DotNetMVC.Util.ControllerUtil.ParseUri(uri_string, 
out controller, out method, out parameters);

    Context.Items.Add(
"method", method);
    Context.Items.Add(
"parameters", parameters);

    
string ctlpage = "application/views/" + controller + "/" + method + ".aspx";
    
try
    
{
        
//Server.Transfer(ctlpage, true);
        Server.Execute(ctlpage);
    }

    
catch (HttpException e)
    
{
        log4net.LogManager.GetLogger(
"LogFile").Error("\r\n客户机IP:" + Request.UserHostAddress + "\r\n错误地址:" + Request.Url, e);
    }

%>

      这里直接用controller和method组合出视图路径,并用Server.Execute去执行它(因为Server.Transfer总是抛出 System.Threading.ThreadAbortException异常,虽然不影响运行,这似乎是ASP.NET的一个小问题)。
      然后删除控制器目录的内容,并将控制器页面中的代码转移到视图中即可,具体请参看DotNetMV示例网站代码。这样,既减少了编程复杂度,又增加的开发效率和运行性能,同时URL重写和代码智能感知等优点仍然得以保留。

附:

      下载DotNetMVC示例网站代码DotNetMV示例网站代码到本地后,请注意示例网站代码是一个完整的网站架构,大家可以直接在VS中打开此网站(VS2005和VS2008),根据实际修改web.config文件,在IIS中配置dotnetmv(c)为站点根目录,并配置站点属性“目录安全性”标签为“集成windows身份验证”,同时将站点应用程序配置为“启用ASP服务器脚本调试”和“启用ASP客户端脚本调试”;运行调试前,请先安装ISAPI_RewriteLite(下载ISAPI_Rewrite Lite),并修改其配置文件;调试时,请注意修改站点的“启动选项”使用本地IIS,因为VS中的DevelopWebServer无法加载ISAPI_Rewrite过滤器。
      另外,测试数据表建立脚本给出如下:

Create TABLE [dbo].[users](
    
[id] [int] IDENTITY(1,1NOT NULL,
    
[nick] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL,
    
[pass] [varchar](20) COLLATE Chinese_PRC_CI_AS NULL,
    
[reg_date] [datetime] NULL CONSTRAINT [DF_test_inputdate]  DEFAULT (getdate())
ON [PRIMARY]

[资源]Lucene.net的相关网站

mikel阅读(708)

 lucene 官方网站,  Luncene.net 官方网站(英文) 这两个网站大家应该都知道了,里面还有一个邮件列表,有兴趣可以加入这个邮件列表,这样就可以和全球的爱好者一起来讨论Lucene.net的相关问题了。
    中文资源
    博客园 lucene.net 讨论小组 一个园子里面的,当然要重点推荐一下了。
    博客园 搜索引擎讨论小组 我创建的小组,主要讨论搜索引擎技术,数据挖掘技术和中文分词技术,由于和lucene高度相关,所以一些lucene的问题也会在这个小组中进行讨论。
    Nutch中文网论坛 Lucene学习资料 
    JavaEye lucene爱好者
    
    中文资源目前就找到这么一点,感觉实在太少了,还望大家补充。
    
    英文资源
    lucene apache 组织中的 wiki 这个网址有很多lucene 的相关资源
    lucene 的英文博客网站 这个是lucene的鼻祖Doug Cutting的Blog
    维基百科Lucene相关的介绍
    Lucene forum at nabble.com
    http://groups.drupal.org/lucene-and-nutch
    http://lucene.grantingersoll.com/