in

搜趣堡 - 中心街区

沈阳人的网上综合社区

半冬眠的壳儿

岁月需要回忆朋友要相聚,缘分需要偶遇生命要延续;该来就来该去就去,无所谓歌舞升平无所谓灯红酒绿;只为人生更加美丽!
  • [转]牟长青:寻找友情链接的一些手段

    此文是自己之前做了1个多月友情链接工作总结出来的一些经验,今天和大家分享下。文中主要是讲两个方面,一是如何找愿意交换链接的网站(针对只看PR,不看网站类型的朋友),二是如何找适合交换的网站(针对一些对交换网站的行业类型有要求的朋友)
     
    1 :友情链接互换 QQ
    网上有很多专做互换的友情链接QQ群,或网站商务BD群。可以直接用QQ群搜索功能查找http://group.qq.com/index.shtml?keyword=友情链接会出来几百个专门交换友情链接的QQ群。就这里的资源,就够大家交换一段时间了,而且什么类型的网站都有。只是这里面的人大部分都是为了SEO才去做友情链接的。

    2:专业的友情链接互换论坛版区 
    去一些站长论坛发布和寻找友情链接的信息。在论坛发布信息的好处就是,你发个帖子,留个联系方式,就可以等着别人来找你了。如果帖子沉下去了,偶尔去顶顶就好。
     
    比如站长交易论坛的链接版区:http://bbs.admin5.com/forum-287-1.html
    落伍者站长论坛的链接版区:http://www.im286.com/forum-119-1.html
    中国站长论坛的链接版区:http://bbs.chinaz.com/Links/list-1.html
     

    3:合作伙伴的友情链接 
    找某一些行业网站做友情链接的时候,直接通过已经做友情合作的同行网站的友情链接,能找到特别多。发现合适的,还可以直接问合作伙伴要对方的联系方式。
     

    4:关键词搜索寻找合适的网站 
    想找什么类型的网站,就直接搜索该类型网站的通用关键词一般排在前面的,普遍PR比较高,或者网站权重比较高的,都适合互换的同类网站。
     

    5:通过网站排名的分类导航网站 
    比如中国站长站的 http://top.chinaz.com  (按照ALEXA进行的排名) 
    艾瑞的网站排名 http://www.iwebchoice.com/ 
    中国网站排名 http://www.chinarank.org.cn/category
    这三个网站都是按照所谓的网站排名做的分类,而且有按各行业分类。排在越靠前的一般网站质量都还行。
     

    6:站长类的SNS网站

    比如kdd.cc(快典空间)里面有不少站长,里面有个专门的友情链接交换的群组。发现不少站长朋友在里面换得不亦乐乎,而且网站质量都还比较不错。真人实名在里面进行友情交换,对信誉也有保证。

    7 :链接资源互换  
    网上有很多像我们这样,专门做外部链接的网站或人群。比如58同城 赶集网(这些网站都是上10人的团队专门做友情链接)。或者一些专业做SEO的公司。我们可以跟对方交换友情链接的资源。比如互相交换50个PR3以上网站的联系方式。节约双方的时间,从而很快做到适合链接的目标网站。 

                                                                                                牟长青(mcq0544)留

                                                                                                  2008.10.28  23:57

    本文首发地址牟长青网络推广博客:http://www.muchangqing.com(转载请保留)

  • 我的成分分析

    分析你整個人
    测试地址

    嘴巴臭=講話沒品:16.6%
    宇宙毀滅必備的原料:15.6%
    聖母峰雪人的棄嬰:12.1%
    先天蒙古症的青蛙頭 :11.9%
    幼稚園程度的高中生:11.8%
    上帝失手摔下來的舊洗衣機:8.1%
    生命力腐爛的半植物:7.6%
    出門只帶皮包<窮鬼>:5.1%
    愛斯基摩人的恥辱:3.5%
    新火山噴發口 :3.4%
    科學家也不敢研究的原始物種:1.8%
    人類歷史上最強的廢材:1.5%
    能思考的無腦袋生物:0.4%
    你常吃屎:0.1%
    丐幫的一份子:0.0%

  • 门禁的读卡器有那些类型

    读卡器依据读卡的类型分为:接触卡和非接触卡
    接触卡是早期门禁产品采用的IC卡读卡器
    非接触分为以下几种:
    ID卡读卡器
    M1卡读卡器
    其他的还有logic卡、TM卡、INDALA卡读卡器

    门禁系统用得最多的卡片类型和格式分别有: EM(ID只读)卡,Mifare one (简称M1 可读可写)卡、logic卡、TM卡等。其中M1卡和EM卡几乎占据了非接触卡90%以上的市场份额。如果你看重的是卡的通用性和兼容性,建议你选用M1卡和EM卡做门禁系统。其他不常用的卡,不建议你采用,因为他们的市场份额小,有可能会退出中国市场,那么以后产品的升级和扩容就会存在问题。EM卡的特点是:性格优势,市场占有率最高,读卡距离长,缺点是只读,适合门禁、考勤、停车场等系统,不适合非定额消费系统,并且安全性较差,很多工厂甚至可以根据你的要求随意定制卡号,不能确保卡的唯一性,复制卡较容易,这样就会造成外面有多张卡能够打开你的门禁,给安全造成威胁。
    如果你要考虑到消费的一卡通,就最好采用M1卡。M1卡,优点是可读可写的多功能卡,缺点是:价格稍贵,感应距离短,适合非定额消费系统、停车场系统、门禁考勤系统等。
    卡片类型和读卡器类型有对应关系,请注意。如果你以前就购买了考勤系统或者消费系统,最好是继续沿用原来的卡片类型,这样的费用最低。
    如果你看重的是卡的安全性和唯一性,那INDALA(Motorola)卡是首选,因为INDALA卡和读卡器的Flexpass加密技术是世界最先进的,还可根据用户的特殊要求定制独特的加密格式,并且确保每张卡的全球唯一性,确保门禁系统的安全性。
    门禁通常分为联网型门禁和独立型门禁
    联网型门禁大致包括以下设备:
    控制器(单门、双门、四门等)
    读卡器
    电子锁(电插锁、磁力锁、静音锁等)
    门禁开关
    RS232-RS485转换器
    门禁控制软件
    独立型门禁包括:
    控制器(与读卡器一体)
    12V门禁电源
    电锁
    门禁开关
  • 门禁系统原理

    门禁系统原理
    门禁系统是最近几年才在国内广泛应用的又一高科技安全设施之一,现已成为现代建筑的智能化标志之一。在越来越注重商业情报和安全的今天,对进出一些重要机关、科研实验室、档案馆、以及关系到国计民生的公用事业单位的控制中心、民航机场等场所的工作人员,给予进出授权控制。

    经济的增长有时引发犯罪的发生,对安全感的追求导致现代化楼宇对保安系统的要求也越来越高。楼宇保安系统不仅包括闭路电视及防盗报警,此外还包括一些门锁、防盗门、防盗网及保安人员等,以满足不了人们日益增加的安全要求。

    ----保安管理功能,可以设置使用人的权限和进出时间,可以将使用人的姓名、年龄、职务、相片等多达18种内容的数据输入电脑中,便于查询统计及验证身份;
    ----考勤功能,可以根据实际情况将人员编组分类,针对各种节假日,工作日进行考勤记录;
    ----巡更功能,可以记录保安员巡更的路线,时间以及巡更点发生的事件如房门损坏,电梯故障等;
    ----多种门禁方式组合,可以设置门锁为只进不出,长开,定时开关等多种功能及各种组合;
    ----应急及统计功能,本系统可以在电脑上显示出指定持卡人所处的物理位置,便于及时联系。发生火警等紧急情况时,防火门会自动打开,便于逃生,出入口也可以自动打开;当发生非法进出时,会
     
    自动报警;本系统还可以根据客户的需要,打印出各种统计报表。
    门禁系统属公共安全管理系统范畴。在建筑物内的主要管理区、出入口、电梯厅、主要设备控制中心机房、贵重物品的库房等重要部位的通道口,安装门磁开关、电控锁或读卡机等控制装置,由中心控制室监控,系统采用计算机多重任务的处理,能够对各通道口的位置、通行对象及通行时间等实时进行控制或设定程序控制,适应一些银行、金融贸易楼和综合办公楼的公共安全管理。
    门禁系统作用在于管理人群进出管制区域,限制未授权人仕进出特定区域,并使已授权者在进出上更简捷。系统可用感应卡、指纹、密码等,作为授权识别,通过控制机编程,记录进出人仕时间日期,并可配合警报及闭路电视系统以达致最佳管理。适用于各类型办公室、计算机室、数据库、停车场及仓库等。
    出入口门禁控制系统采取以感应卡来取代用钥匙开门的方式。使用者用一张卡可以打开多把门锁, 对门锁的开启也可以有一定的时间限制。如果卡丢失了,不必更换门锁,只需将其从控制主机中注销。出入口门禁控制系统是通过对出入口的准入情况进行控制、管理和记录的设备,对何人何时在何地进行详细跟踪,以实现中心对出入口的24小时控制、*作、监视及管理。
    每一个出入口设置一个读卡器,所读取的门禁卡参数经由控制器判断分析:准入则电锁打开,人员可自行通过。禁入则电锁不动作而且立即报警并作出相应的记录;用户可以选择各种类型的读卡器:磁卡读卡器、韦根式读卡器、感应式读卡器、免持式读卡器、遥距式红外线读卡器,也可选用数字密码键盘开锁;管理软件不仅可以对不同出入口读卡器的开启时间、准入时间进行编程,还可以对每一张门禁卡允许进入的区域、时间进行限制防止人员“误入歧途”,并可随时查询出入情况;可根据用户的具体要求定做考勤软件,统计加班时间、迟到时间、次数,并计算当月应得工资、应扣工资及实得工资等;对于单位领导等特别人员,可以有特殊的权限设定,从而达到对每个出入口和每个出入人员的单独编程、统一管理;对于整个系统的每个动作,如哪扇门开启,时间多长,是谁在开门等情况,管理中心全部记录在案。一旦有事故发生,这些记录将成为有力和无法更改的证据。
    系统具有防返传功能:防止有人进入某区域后,将卡回传给区域外企图用同一张卡进入的另一人员;具有人员追踪功能:在外门未关闭之前,无法打开内门;若发生强行破门、恶意破坏读卡器或键盘、无效卡或错误密码企图开门等不正常事件,管理中心立即获知并提醒值班警卫。系统同时启动现场探照灯、录像机等相关设备。
    感应卡特点:
    因为感应卡的上市,使用者再也不需要携带钥匙,更免除了钥匙被复制的烦恼,再也不必耽心财物可能蒙受损失。感应式讯号发送器的封装形式有许多种,包括卡片式、钥匙圈式、笔心式、玻璃管式、麦克笔……等等,体积有大小差别,而体积的大小往往与感应距离成正比,一般来说,使用人员于门禁及停车场管制时,为了方便携带,通常做成卡片式,故俗称感应卡。
    动作原理:
    感应卡(Promixity Card)一般以接触卡称之,磁卡在使用时要有「刷卡」的动作以达到管制目的。通常一张感应卡中有IC芯片、感应线圈及电容原件。感应卡为发射应答端,而感应式卡片阅读机为接收端,类似发电机,持续发送频率。当卡片靠近卡片阅读机发射频率的范围内时,卡片内的线圈会接受此频率并产生能量,此能量储存在电容器内,当能量到达激磁的状态时,会将卡片中IC芯片上所烧录的密码发送给卡片阅读机卡片阅读机辨识过后,便可开门,坊间各厂牌的卡片阅读机所发射出的频率不同,故卡片不会有互通并可使用状况发生。
    设置门禁管理系统主要目的是保证上述区域及区域内设备安全,便于人员的合理流动,对进入这些重要区域的人员实行各种方式的进出许可权管理,以便限制人员随意进出。当员工要进入被管制的区域时,必须先在门旁的读卡器中刷卡,门才能被打开。每道门边的读卡器均通过现场控制介面单元和系统集中控制器受到监控终端的控制。每一张卡根据系统设置,只能在规定时间内打开规定范围的门。同时防止外来人员随便闯入,如有人强行破门或下班没有关门,门禁装置将发出报警信号,监控终端上马上显示报警的门号。门禁系统设计之目的是为实现人员出入权限控制及出入信息记录。

    门禁系统原理
    1、对需控制的出入口,安装受电锁装置和感应器(如:电子密码键盘、读卡器、指纹阅读器等)控制的电控门;
    2、授权人员持有效证卡,或密码和自己的指纹,就可以开启电控门;
    3、所有出入资料,都被后台计算机记录在案;通过后台计算机可以随时修改授权人员的进出权限;
    4、该系统还可以加入考勤系统功能;

    系统要求
    高度集成化:实现与其他系统的完全联动,包括:消防报警系统、CCTV系统、电梯系统、资讯通讯系统、停车场系统及楼宇控制系统等。
    高保安性:要求整个系统性能稳定、安全可靠,防伪性强。
    冗余率大:具备大容量的可扩充性,如需扩充设备,不用另外增加主控部分,只需增加前端设备和现场控制单元即可。

    系统功能
    权限管理:对人员出入权限设置、更改、取消、恢复。
    存储功能:存储人员出入的日期、时间、卡号、是否非法等相关信息。
    集中管理功能:后台管理工作站可建立用户资料库,定期或实时采集每个出入口的进出资料,同时可按各用户进行汇总、查询、分类、打印等。
    异常报警:非法闯入、门锁被破坏等情况出现时系统会发出实时报警信息传输到管理中心。
    联动功能:可实现消防联动,当出现火警等情况时,由中心统一开启出入通道,可启动CCTV实现联运实时监控。

    门禁系统的微机管理功能
    系统管理:
    这部分软件的功能是对系统所有的设备和数据进行管理,有以下几项内容
    ——设备注册
      比如在增加控制器或是卡片时,需要重新登记,以使其有效;在减少控制器或是卡片遗失、人员变动时使其失效。
    ——级别设定
      在已注册的卡片,哪些可以通过那些门,哪些不可以通过。某个控制器可以让哪些卡片通过,不允许哪些通过。对于计算机的*作要设定密码,以控制哪些人可以*作。
    ——时间管理
      可以设定某些控制器在什么时间可以或不可以允许持卡人通过;哪些卡片在什么时间可以或不可以通过哪些门等。
    ——数据库的管理
      对系统所记录的数据进行转存、备份、存档和读取等处理。

    事件记录:系统正常运行时,对各种出入事件、异常事件及其处理方式进行记录,保存在数据库中,以备日后查询。
    报表生成:能够根据要求定时或随机地生成各种报表。比如,可以查找某个人在某段时间内的出入情况,某个门在某段时间内都有谁进出等,生成报表,并可以用打印机打印出来。进而组合出“考勤管理”、“巡更管理”、“会议室管理”等。
    网间通信:系统不是作为一个单一的系统存在,它要向其它系统传送信息。比如在有非法闯入时,要向电视监视系统发出信息,使摄像机能监视该处情况,并进行录象。所以要有系统之间通信的支持。
    管理系统除了完成所要求的功能外,还应有漂亮、直观的人机界面,使人员便于操作。

    门禁系统的组成
    被控制的门;控制器;门磁锁;读卡器及卡片;手动按钮;钥匙;指示灯;与上位机通讯的线缆;上位PC机;专用软件

    门禁系统的功能
    刷卡开门: 若卡号不对或属黑名单将闭门并报警
    手动按钮开门: 门内人员出门用
    钥匙开门: 门禁系统管理员使用
    上位机指令开关门: 在特殊情况下由上位机指令门的开关
    门的状态及被控信息记录到上位机中: 可方便的进行查询
    上位机负责卡片的管理: 发放卡片及登录黑名单
  • 马尔代夫 W宁静岛(W Retreat & SPA Maldives) 七日游之二——启程

    马尔代夫 W宁静岛(W Retreat & SPA Maldives) 七日游之二——启程

    转载请注明出处。

    原帖地址:http://showcheap.com/community/blogs/orivan/archive/2008/10/27/6611.aspx

    上海浦东国际机场

    虽然是9月22日去马尔代夫的飞机,不过我9月20日就到了上海,可以看看上海的朋友,还能逛逛街购购物,比如到奥特莱斯(outlets)买点打折的运动服沙滩裤什么的,在上海盘桓了两天之后,终于等到了出发的日子,新加坡航空托运行李限每人一件,每件30kg,小小地超重了,也难怪,在上海又买了不少东西都塞进去了(后来事实证明有些东西还是有必要的),不过因为我们一行六人,人均下来并没有超重,所以没遇到什么麻烦。

    为了以防万一,我们提前了很多到达机场,托运完行李直接过海关,不过过程非常顺利,顺利得没有国际航班的感觉,以至于我们还可以悠闲的在上海机场吃顿饺子。

    新加坡航空

    新航的服务确实不错,机组服务人员也是多国部队,可能是为了更好的为各种语言的客人提供服务。看看电影玩玩游戏喝着鸡尾酒,前半段5个多小时的航程度过得很快。我们的航班是SQ831和SQ452,中途有50分钟时间在新加坡换飞机,在飞机上问过空服人员,新加坡机场有3个航站楼,我们下飞机之后需要确定待转飞机的登机门,然后坐火车到登机门所属的航站楼,所以尽管登机牌在手我们还是不敢耽误,好在机场的导航非常的明确,在飞机上拿的机场地图没有什么用处,加上我们不用自己处理托运行李,顺利地完成转机,伴着飞机的轰鸣,我们在梦境中继续向马尔代夫进发了。

    新航的价格相对于其它可选航班确是贵了一些,不过到马尔代夫旅行,跨时差的长途飞行应该算是为数不多会觉得辛苦的部分了,在经济条件允许的情况下选择一个好的航班个人认为还是比较值的。新加坡航空飞机上有一种叫做“新加坡司令”(反正菜单上是这么翻译的)的特色酒,味道不错,酒精含量也适中,男女皆宜(酒精过敏者勿试: p),让自己即日启程的兴奋在微醺的状态下催化,是打发时间忘却疲劳的不错选择。

    Male Relax Inn

    又经过了四个多小时的飞行,我们22:00(马累时间)准时在马尔代夫机场降落,出机场的时候需要办理落地签证,就是把在飞机上填好的表格和护照交给海关备案盖章。阿里(W酒店安排的接站)直接带我们上船前往马累(MALE),因为到达的时间已经没有上岛的水上飞机,我们需要在马累住一晚,在 Male Relax Inn 办理完入住带着行李上楼已经是北京时间凌晨两点多,虽然飞机上已经睡了一会,不过还是感觉挺困,心情也不算太好,为啥?看看上面的照片,这样的一个房间一晚上要一千多人民币心情能好么?!

    从酒店入住开始就要开始准备点零钱美钞了,对,小费是要给地。其实就算不给我个人觉得小黑也不会杀人,不过我们认为可有可无的东西对于某些职位来说是他们认为一定的收入,比如酒店帮你提行李的服务生。

    马尔代夫马累港口

    一夜无话,次日清晨回到马累的码头,坐船前往水上飞机场候机,天阴沉沉的,好像马上就要下雨了,有一对和我们同船的游客起来晚了,大家都在等。其实从昨晚入住在 MALE RELAX INN 开始,好心情就打了折扣,坐在船上埋怨着不给面子的天气,心情和天气一样抑郁。

    所幸的是我的坏心情并没有维持多久,所以就让我快点跳过这个部分写点开心的东西吧,不然一边写一边心情就要down掉了。
    心情的转折是从到W岛专门的水上候机厅开始的,虽然同样是身处异地,不过当看到W字母的时候,颇有点要到家的感觉。长途飞机,船,小黑屋(Relax Inn),船,巴士,陌生的过度,陌生的语言,陌生的人,折腾了这么久终于让我们觉得终点即将临近,有点望梅止渴的意味。另外,在候机厅吃的自助早餐是我觉得W提供的最美味的一顿饭(后文解释)。
    在水上飞机上看到了在很多马尔代夫游记(MALDIVES)中照片里出现过的景观。

    马尔代夫水上飞机景观

    下飞机咯,下飞机咯,一起感受 W Retreat & SPA 的海, W Retreat & SPA 的天, W Retreat & SPA 的云。

    马尔代夫水上飞机

    我要投诉,投诉 Male Relax Inn 的存在是个阴谋,那个小黑屋就是用来对比的,它存在的目的只是为了让我们震撼,让我们在下了水上飞机之后感觉自己来到了天堂。

    马尔代夫快艇

    我们的船来接我们了,W(W RETREAT SPA),我们来了!!

    我们一直奇怪为什么水上飞机不停得离岛再近一点,难道只是为了让我们在快艇上领略由远及近的全岛景观么?我们上岛之后才知道,水上飞机停靠的距离可以避免让已经上岛的住客听到噪音而破坏他们的美丽的早晨。

    转载请注明出处。

    原帖地址:http://showcheap.com/community/blogs/orivan/archive/2008/10/27/6611.aspx

  • 马尔代夫 W宁静岛(W Retreat & SPA Maldives) 七日游之一

    马尔代夫 W宁静岛(W Retreat & SPA Maldives) 七日游之一

    转载请注明出处。

    原帖地址:http://xxorld.com/community/blogs/orivan/archive/2008/10/18/6548.aspx

    W宁静岛水上飞机候机厅

    马尔代夫机场外景

    随着W字母慢慢地变小,我们一行人终于要离开了,带着些许不舍和些许对回家的期待,离开这个带给我们非凡体验的小岛。

    马尔代夫W宁静岛

    我总在想,马尔代夫拥有什么让酒店信心满满的在欢迎便签上写着:“WELCOME TO PARADISE”?是罕有工业污染的纯净空气,是没有杂质的碧海蓝天,是争食面包屑的五颜六色的热带鱼,还是在人身边大摇大摆的水鸟?在这个优哉游哉只需一个小时就能徒步绕行一周的小岛,我们度过了近乎与世隔绝的七天,我们总觉得度假应该是一种放松的过程,虽然充分的准备可以让这个过程愈加完美,但少一点如临大敌,多一点顺其自然仍然应该是这个过程的主旋律。没有刻意地改变生活习惯和模式,只是经历了时空的转换,竟然真的让我们有时会有置身天堂的感觉,是因为阳光般灿烂的微笑,还是无时无刻不流露出的彬彬有礼,就在我们离开的一刻,我仍然说不清楚。再见了马尔代夫,再见了W宁静岛,再见了岛上的人们,You're all angels, working in paradise.

    转载请注明出处。

    原帖地址:http://xxorld.com/community/blogs/orivan/archive/2008/10/18/6548.aspx

  • 棋盘山真人CS活动简要回顾

    这几天感觉我的大腿已经不是我自己的了,走起路好像拖着两条假腿,每次坐下的时候龇牙咧嘴的表情总让旁人误以为我坐到了电门上,这都要归功于前几天的一次野外拓展训练——棋盘山某处的真人CS。真人CS这东西已经流行了有一段时间了,每每有朋友邀约总是有各种不参与的理由(部分借口),所以现在不服老可以,不服懒就是不面对现实了,挑战惰性,遂前往!

    场地在棋盘山的后身,经人带领到达目的地发现其实所谓的模拟赛场就是盖在山上的几个别墅,可能实在卖不出去闲着也是闲着就利用起来干了这个买卖。装备不复杂,就是一身迷彩服,一个中控背心(信号接收器)加上一把模拟枪(信号发射器),因为枪的材质是类塑料的物质,并不是开始预期的金属仿真枪,所以整套装备并不怎么重,而且还有给MM准备的微型冲锋枪,还是挺人性化的。如果是新兵,教练会做一些关于设备使用方法游戏规则的简单的培训,最开始的时候我听说对手是老兵的时候还以为对手是部队退伍的陪练呢,后来才知道管来参加游戏的人都叫兵,可能也是为了满足我等的军人情结想出来的称呼。

    游戏结果是惨败,不过能保持竞技状态完成这一天的模拟战斗对我来说已经是胜利了,自己已经不是那么好胜了,可能是对经验产生的差距认识得非常充分,所以现在很少有创造奇迹的念头了,这也是自己心理上和以前的不同。

    回来的时候走了另一条路,发现是从棋盘山景区绕出来的,原来从后山进入景区是不需要交钱的。费用方面人均¥100/天,中午管饭,不过啤酒单算钱,吃的都是农家菜,味道还可以,如果说还有什么额外费用就是回来后为了解除肌肉疲劳连着做了两天的按摩。

    附一张满装备照片,护膝战斗服中提供,但是下次再参加应该自带护肘,个人觉得还是必要的。
     
    Posted 七月 09 2008, 01:03 下午 by 壳儿 with 4 comment(s)
    所属分类:
  • [转]比尔·盖茨与巴菲特同大学生对话(二)

    Posted 六月 29 2008, 02:41 上午 by 壳儿 with 2 comment(s)
    所属分类:
  • [转]比尔·盖茨与巴菲特同大学生对话(一)

    妙语连珠

    Format: ???
    Duration: --:--

    Posted 六月 29 2008, 02:23 上午 by 壳儿 with 1 comment(s)
    所属分类:
  • CommunityServer 2007 升级日志三 - 内容编辑功能的改进

    (三) 内容编辑功能的改进

    1. 整合 CuteSoft WYSIWYG 编辑器
    以前在 Community Server 2.1 版本的时候就做过同样的事,前一阵子也对 Cute Editor for .NET 6.0 做了一些了解,不过实际操作的话还是要仔细一点,毕竟版本的提升带来了一些变化。
    {1} 将 Cute Editor 的 dll 文件、证书文件以及拼写检查字典文件复制到 ~/bin 下。
    {2} 复制 CuteSoft_Client 到 ~ 下的某个文件夹,并在 web.config 的 <appSettings> 区域添加 <add key="CuteEditorDefaultFilesPath" value="~/xxx/CuteSoft_Client/CuteEditor" />
    {3} 对 CuteEditor 进行包装
    [1] 新建类库工程生成 dll 文件至 ~/bin 下,新建继承自 CuteEditor.Editor 并实现 CommunityServer.Controls.ITextEditor 接口的类 oEditor 。

  • CommunityServer 2007 升级日志二

    (二)

    1. 汉化
    只需在 /communityserver.config 文件中的 defaultLanguage 属性设置成 "zh-CN",同时在 /Languages/languages.xml 文件中开启 <language name="Chinese Simplified" key="zh-CN" />,然后把汉化资源文件复制到 /Languages/zh-CN 文件夹下即可。

    2. 虽然对 communityserver 2007 没有深入了解,但是感觉母版机制好像和以前有一点区别。修改 /Themes/default/Common/UserWelcome.aspx 和 /ControlPanel/Masters/ControlPanelMaster.ascx 文件中的相关代码部分去掉社区页面顶部的 help 链接。

    3. 国内论坛的使用习惯是在主题列表项前的小图标单击可以在新窗口中打开,但是 CommunityServer 确始终是在当前窗口打开帖子,为了实现这个小功能,需要做点改动。
    /Themes/default/Forums/threadlist.aspx 中 ID 为 FilteredThreadList 的 CSForum:ThreadList 是通常情况下显示的列表,图片的显示代码是:ForumFormatter.StatusIcon( (Thread) Container.DataItem ),所以需要修改 CommunityServer.Discussions.Components 的 static string threadStatusIcon 值为 "<a href=\"{2}\" target=\"_blank\"><img title=\"{0}\" alt=\"{0}\" src=\"{1}\" border=\"0\" /></a>",同时需要在 StatusIcon(Thread) 方法中将 Globals.GetSiteUrls().Post(thread.PostID) 的值附加到其中。

    4. UrlRewrite
    CommunityServer 2007.1 的默认首页已经是一个完全空白的占位了,直接被重写到 /Themes/default/Common/home.aspx 这是和 2.X 版本不同的地方。当默认的 CommunityServer.Urls.UrlReWriteProvider.GetRewrittenUrl 执行重写过程时检测当前的 url 是否是 /Themes 或 /controlpanel 中的一个,这意味着新版本的 WEB 文件的物理位置就是在这两个位置之中。
    通过 SiteUrls.config 也可以了解一般的匹配规则并且可以做一些社区 URL 的定制修改。

    5. 搜索
    如果不是使用 windows 服务来运行索引等任务,直接修改 communityserver_override.config 中的配置项来适应自己的环境,同时把 dll 文件复制到 /WEB/BIN 文件夹下再清理一下数据库的索引选项就可以了,详细说明可以参看官方指引。

    6. 就在我觉得应该进一步改善下社区的编辑功能的时候,我发现有的博客通过 TAG 或是日期来筛选的结果不存在了,我还以为是在升级的时候出了什么问题,但是在官方网站的一个帖子看到在 CommunityServer 2007 中,如果没有在写博客的时候选择 "Publish to my aggregate list(发布到我的博客首页)" 选项的时候是不显示的,这是在使用习惯上和 2.X 版本有很大区别的地方。
    测试在新开博客中发帖,发现从帖子提交到在博客首页和个人首页上显示中间的间隔比较长,跟踪代码就可以知道博客帖子提交后是直接插入到数据库表的,但是帖子的读取确优先读取缓存,而同步数据库和缓存是有一定的时间间隔的,如果在 communityserver.config 中 cacheFactor 设置为默认值 5,这个间隔可能会达到 10 分钟以上,这种缓存机制对于一些博客比较少的站点来说有点过于缓慢,可以适当调整,cacheFator 在这项功能上每单位大约为 2 分钟。(相关的代码可以参看:
    CommunityServer.Blogs.Controls.WeblogPostList.DataSource;
    CommunityServer.Blogs.Components.WeblogPosts.Add;
    CommunityServer.Blogs.Components.WeblogPosts.GetBlogThreads;
    CommunityServer.Data.GetBlogThreads)
    题外话:communityserver wiki add-on 讨论帖插件总结博客帖

  • Windows Live Services 了解

    Windows Live Web Services 是微软提供的一些公开的 Web Services 接口,可以让开发者和用户集成微软的一些功能。

    Widnows Live ID

    Windows Live ID 是可以集成在应用中的身份验证系统。欲详细了解可访问 Windows Live Developer CenterWidnows Live ID
    为了简化服务端和客户端整合,服务采用工业标准的 SOAP 协议公开接口。
    SDK 包括 服务端SDK(Relying Party Suite SDK),除了提供很多标准功能外,更重要的是其还提供了"配置刷新(configuration refresh)",可以根据条件(需要服务的用户地理位置等)自动选择最优的配置。

    MSDN 也为 Windows Live ID Web Authentication 1.0 SDK 提供了帮助文档。
    Web Authentication 工作原理是通过特殊格式的链接将用户信息发送到 Windows Live ID 登录页面。服务会给网站返回一个唯一的身份标识,可以通过唯一的身份标识执行管理个性化内容,赋予用户权限等操作,但 Windows Live ID Profile 数据是不与用户站点共享的。
    1. 为 Windows Authentication 注册一个 Application ID。注册这项基本比较简单,如果当前只是处于测试阶段并不需要注册,因为 QuickStart Sample 用预定义的默认值作为 Application ID 。

    2. 安装并运行测试
    ASP.NET QuickStart Sample 默认的安装路径是 X:\Program Files\Windows Live ID\WebAuth ,并且预定义的 ReturnURL 是 默认的 ReturnURL 是 http://localhost/webauth/sample/webauth-handler.aspx ,所以如果想简单地测试效果的话在配置到 IIS 的时候把别名设置成 webauth 会比较方便。
    如果想用自己注册的 Application 替换默认值,修改 web.config 文件即可。范例中的 WindowsLiveLogin.cs 文件就是 Windows Live ID 的类库了,可以通过源码或阅读参考手册来了解其它额外的功能。

    3. 显示登录链接
    4. 解密 Windows Live ID 返回的唯一标识符
    5. 显式或者保存个性化设置
    6. 注销用户

    Windows Live Contacts

    Windows Live Contacts Control

    可以在页面上显示一个 WEB 方式的 WINDOWS LIVE MESSENGER ,在登录之后可以把自己的联系人信息发送给网站。

    我最初的目的是想解决用户本机 Windows Live Messenger 已经登录的情况下网站可以得到其在线的状态和用户标识,网站页面可以识别用户的身份并允许最低权限的交互(高于匿名用户),对用户来说某些简单的交互对应着简单的操作,不需要频繁登录,但通过各种演示来看这是一个不可能的任务。比较折中的方法还是要使用 Windows Live ID 让用户通过 WEB 方式签入以便网站获得用户的标识,这样如果用户允许当前站点具备访问联系人权限的情况下站点才可以和用户共享数据,现在国内的 MSN 用户个人信息设置得不怎么详细,而且让用户相信你的站点并共享自己的联系人数据的难度也比较大,更何况费这么大劲只是获取当前登录的用户的一些资料感觉对于用户来说复杂度也不低于注册一个网站自己的用户了。

  • CommunityServer membership 整合学习

    先整理一些零散的内容:
    官方论坛有篇帖子是提问如何将 COMMUNITYSERVER 整合到已经开发的 ASP.NET 2.0 MEMBERSHIP 中。
    Jose Lema(jlema):这正是 Morpheus(新的权限系统) 致力解决的场景之一,有两种选择:
    1. 网站与 COMMUNITYSERVER 共用一个数据库,缺点是有点乱。
    2. Morpheus 方法是让 COMMUNITYSERVER 指向其它数据库。
    笔者:个人觉得努力打破 membership 和主数据库的强耦合关系主要是为了实现跨站共享用户,毕竟这种场景越来越多,象 ASP.NETsilverlight.netwindowsclient.net
    以上第二种方法需要三步:
    1. 在配置文件中添加一个指向现存站点 MEMBERSHIP 数据库的连接字符串。
    2. 使 MEMBERSHIP, PROFILE, AND/OR ROLE 的 PROVIDER 使用新的数据库连接字符串。
    3. 执行一些存储过程使 COMMUNITYSERVER 更有效率的方法访问数据库。
    第三步是必须的,因为现存 MEMBERSHIP 数据库必须存在一些新的存储过程。
    最后:Morpheus 允许两个 COMMUNITYSERVER 共用一个 MEMBERSHIP,在这种情况下就不用执行以下存储过程了。
    cs_Membership_GetUsersByName
    cs_Membership_IsUserNameTaken
    cs_Membership_RenameUser
    cs_Membership_ChangePasswordAnswer
    cs_Membership_ValidatePasswordAnswer
    cs_Profile_GetPropertiesForUsers
    cs_Role_Get
    cs_Roles_CreateRole
    cs_Roles_UpdateRole
    cs_Roles_GetRoleIdsForUsers
    cs_Roles_Get
    帖子还进行了一些进一步地讨论,如果 Application name 和现存网站不一致,或者 COMMUNITYSERVER 中存在着现存网站没有的用户,就会出现异常,那么如果要升级旧的 COMMUNITYSERVER 应该怎么解决这个问题呢?还有跟帖说 Morpheus 只是共享注册数据,但是不能共享登录状态,意味着想正常使用两个站点的受限功能可能需要登录二次,如果想共享登录状态还是需要 SSO 。

    在 COMMUNITYSERVER 官方文档中有关于 Morpheus 的概述,进一步的了解可以通过站内搜索或浏览 Jose CS Wiki

     

    除了 Morpheus 之外,COMMUNITYSERVER 的 Single-sign on(SSO) 也是为了解决 MEMBERSHIP 整合问题。<Authentication><machineKey> 作为 ASP.NET 2.0 MEMBERSHIP 中身份验证方式的配置基础,在跨应用程序进行 Forms 身份验证中需要保持不同应用中 WEB.CONFIG 的相关配置属性一致,但我还没有对目前身份验证信息能共享的程度和能否适应单机多应用程序池情况进行测试

    题外话:关于 CommunityServer 中文名注册

    虽然或许可以通过放宽正则验证的方式开通中文注册名,但是毕竟无法确定 CommunityServer 在这种情况下会出现什么问题,因为以前遇到使用中文博客随笔导致全站无法使用的情况。
    所以采用折中一点的方法,使用 CommunityServer 的昵称功能,不过不知道老外的想法,昵称是可以重名的,所以如果需要在某些地方明显区分,可以通过修改某些显示控件定制显示。
    相关属性:
    Component.User.CommonNameOrUserName
    Component.User.DisplayName
    Component.User.UserName
    Component.User.Profile

  • CommunityServer 2007 升级日志 - (一)Telligent.Registration.dll 类库初步了解

    (一) Telligent.Registration.dll 类库初步了解

    Telligent.Registration.Products 中的各个类都继承自 Telligent.Registration.License ,通过 Telligent.Registration.Licensing 中的属性返回各个类的实体,每个 Products.类 实体属性的 get_ 方法都会调用一个 private static $MD$5F$PST() 方法(已混淆),然后通过加密的字典关键字返回 private static IDictionary 中相应的 License 子类的实体。在 Licensing 中存在的 IDictionary 类型变量和 ReadOnlyDictionary 类型变量以及 Licenses 属性的值是相同的,只是为证书数据提供不同的访问接口。
    再来看看 $MD$5F$PST 方法所做的事。调用 cs_Licenses_Get 存储过程获取数据库中的相关证书数据,将返回的数据集合中的 LicenseValue 字段交给 Telligent.Registration.LicenseCollection.ParseLicense 方法分析并返回一个 LicenseCollection ,再把 InstallDate 字段的值赋给 LicenseCollection 并将其添加到 Licensing 的一个 IList 类型的容器属性中完成一次数据读取的循环。
    数据读取完毕后会对 Licensing 的 IList 类型变量进行二级遍历,循环检查 License 是否已经过期(IsExpired == true),过期不再处理,如未过期接下来的处理稍微复杂一些:大体上是通过 Telligent.Registration.LicenseCollection.ParseLicense 方法将从数据库中读取的 XML 字符串经过一系列处理最终添加到 Telligent.Registration.Licensing 类的一个 IDictionary 的字典容器变量(已混淆)中,如果 XML 字符串不具备完整的信息,将通过反射调用 Telligent.Registration 程序集中所有 License 子类的 CreateBaseLicense 方法创建每个子类最基本的证书信息。

    如果对 Telligent.Registration 程序集中的实现细节不是那么感兴趣,可以利用 Reflector 的分析功能了解类库之间的依存关系,将 SDK\Source\lib 下的所有 dll 文件添加到 Reflector 中,筛选出引用 Telligent.Registration 的库文件某个程序集并得到对 Telligent.Registration 的调用信息(一级):

    CommunityServer.Reader.dll-->
    Boolean CommunityServer.Reader.Components.Feeds.ValidateUserAccess() 该方法判断 Licensing.CommunityServer.NumberOfContentMirrors 是否等于 0x7fffffff ,如果等于该值则返回 true 。

    CommunityServer.Points.dll-->
    source\Web\ControlPanel\Tools\PointSystem.aspx.cs(77)-->
    Void CommunityServer.Points.PointsModule.Init(CSApplication, XmlNode) 如果 Licensing.CommunityServer.IsComponentEnabled("Points") 返回 true 则执行必要的初始化。
    Boolean CommunityServer.Points.PointsHelper.CaculateAllPoints() 如果 Licensing.CommunityServer.IsComponentEnabled("Points") 返回 true 对积分进行计算并返回 true

    CommunityServer.MailGateway.dll-->
    IDictionary CommunityServer.MailGateway.MailRoom.MailingLists.GetMailingListsTable(Boolean, Boolean, Boolean) 在 CSContext 和 CSCache 中获取 MailingLists-Site:CSContext.get_Current().get_SiteSettings().get_SettingsID() 的值,如果当前邮件列表数量已经大于 Licensing.MailGateway.MaxEmailAddress 则提示如下出错信息:
    Exceeded number of allowable lists. Only the licensed number of lists will be functional. Please update your lists or inquire about purchasing additional licenses

    CommunityServer.IPBanning.dll-->
    Void CommunityServer.IPBanning.Components.IPBanningModule.Init(CSApplication, XmlNode) 只有在 Licensing.CommunityServer.IsComponentEnabled("IPBanning") && Licensing.CommunityServer.IsLocal 同时为 true 的情况下才会执行操作。

     

    除了类库对 Telligent.Registration 的引用外源码中也有很多引用,既然要看源码,就没道理不用 VisualStudio 2005 。依然很土地把 CommunityServerWeb20 (Internal).csproj 项目文件移到上一级文件夹中,手动修改项目文件中引用和包含文件的路径,修改解决方案中该项目文件的路径,同时把 SDK 类库生成 dll 的路径修改到 Source\Web\bin 下,再建立一个 Web Site Project,所做的一切就是解决自己不太会利用 Web Application Project 调试的弱项。:(

  • CommunityServer 2007 升级准备

    我期待着每次的软件升级,尽管有时候升级带来的麻烦比欣喜还要多。不过个人感觉在 CommunityServer 这块不要盲目地追求最新的版本,每一个关键的版本最少要等到 SP2 ,对于 CommunityServer 2007 来说,社区最近发布的 2007.1 应该是个不错的选择。

    现在发布的安装版包括三个版本,在 Installing Community Server 中做了大致的介绍,如果和我一样是通过 2.x 版本升级可以看看 Upgrading from a previous version

    可以在下载汇总页下载 SDK ,Single Sign-on Modules ,Enterprise Search ,Enterprise (NNTP) News Server, Enterprise File Server 等。

    根据安装指引简单浏览了一下手动安装的步骤:

    1 下载 Community Server Web installation package
    2 解压缩文件
    3 配置 IIS
    4 给 [machine name]\ASPNET (or NT Authority\Network Service on Windows Server 2003) 用户赋予 web 文件夹的“读”权限并且给该用户赋予以下文件夹的“完全控制”权限。
    blogs/files
    photos/cache
    photos/storage
    files/storage
    Utility/RankIcons
    Utility/RoleIcons
    5 ...
    6 建立并允许对新建数据库访问。如果正在使用 Windows Authentication,启用 integrated security 并运行 user.sql 脚本。如果使用 CommunityServer 以外的名字作为数据库的名称,需要对 user.sql 进行必要的修改。windows authentication 是推荐技术。如果正在使用 Sql Authentication ,登录用户需具备对新建数据库的相关访问权,Community Server 最少需要 db_securityadmin db_ddladmin db_datareader db_datawriter 角色,如果使用 ASP.NET 2.0 Membership Provider ,还需要将登录用户添加到 aspnet_* roles 中。
    7 ...
    8 建立社区。exec cs_system_CreateCommunity 'localhost/cs', 'dev', 'admin@example.com', 'admin', 'sTrongPassw0rd', 0, 0
    9 在 web.config 文件中修改正确的数据库配置。

    从 2.1 更新到 2007.1 指引的真是 very easy !备份所有的文件和数据库,停掉运行的网站,执行数据库更新脚本,建立新的文件夹并复制文件,修改数据库连接字符串,将 IIS 配置到新的文件夹,It's done !但是选择手动安装,甚至运行中的网站是通过 SDK 编译的定制版本,那么意味着什么?意味着所有自己进行的界面修改,代码级修改和二进制文件的修改都要从头来过,这真是一件非常懊恼的事!修改代码的注释定位和文档记录真的是太重要了!

更多 下页 »