服务器发送了意外的返回值(405 Method Not Allowed),在响应“MKCOL”的请求

刚刚在通过TortoiseSVN客户端往SVN Server提交数据的时候,出现了以下错误:
服务器发送了意外的返回值(405 Method Not Allowed),在响应 “MKCOL” 的请求
解释一下现场发生之前我的操作:
我删除了一个文件夹后又创建了一个同名文件夹,在删除文件夹时未进行提交
解决方法:
删除出现错误的文件夹
SVN Update
这时服务器上存在的文件夹会出现在本地
删除原有的文件夹
SVN Commit
重新创建文件夹
SVN Commit
OK!

比较使用Linq To Entity、自已编写ORM映射、以及使用缓存保存常用数据之间的性能

第1步 建立数据库

首先我们模拟1个需求环境:会员参加活动,生成活动记录,会员有性别、所属区域字段。
第1步,建立Sql Server数据库,Members表保存成员的基本信息,其中SexId、AreaId为外键,分别关联Sex性别表、Areas区域表;Activitys表保存活动的标题;ActivityRecords表保存成员参加活动的记录,其中MemberId、ActivityId为外键,分别关联Members成员表、Activitys活动表。

下面是创建表结构的Sql语句:
Continue reading “比较使用Linq To Entity、自已编写ORM映射、以及使用缓存保存常用数据之间的性能”

深入理解依赖注入(Dependency Injection)

本来想自己写1下对依赖注入(Dependency Injection,简称DI)的理解,发现这篇文章已经写的比较全面和深入,并且易懂,遂转,希望能够给各位带来1定的帮助。

目录

1. IGame游戏公司的故事

1.1 讨论会

1.2 实习生小李的实现方法

1.3 架构师的建议

1.4 小李的小结

2. 探究依赖注入

2.1 故事的启迪

2.2 正式定义依赖注入

3. 依赖注入那些事儿

3.1 依赖注入的类别

3.1.1 Setter注入

3.1.2 Construtor注入

3.1.3 依赖获取

3.2 反射与依赖注入

3.3 多态的活性与依赖注入

3.3.1 多态性的活性

3.3.2 不同活性多态性依赖注入的选择

4. IoC Container

4.1 IoC Container出现的必然性

4.2 IoC Container的分类

4.2.1 重量级IoC Container

4.2.2 轻量级IoC Container

4.3 .NET平台上典型IoC Container推介

4.3.1 Spring.NET

4.3.2 Unity

参考文献

1. IGame游戏公司的故事

1.1 讨论会

话说有一个叫IGame的游戏公司,正在开发一款ARPG游戏(动作&角色扮演类游戏,如魔兽世界、梦幻西游这一类的游戏)。一般这类游戏 都有一个基本的功能,就是打怪(玩家攻击怪物,借此获得经验、虚拟货币和虚拟装备),并且根据玩家角色所装备的武器不同,攻击效果也不同。这 天,IGame公司的开发小组正在开会对打怪功能中的某一个功能点如何实现进行讨论,他们面前的大屏幕上是这样一份需求描述的ppt:
Continue reading “深入理解依赖注入(Dependency Injection)”

自己写的1个简单但易懂实用的广告幻灯片切换代码

代码比较简单,可操作性较强,可以自己组合。主要使用的是jquery的自有功能实现,我把代码贴出来,有空的可以参考1下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<script type="text/javascript" src="jquery-1.6.2.min.js"></script>

<style>
* {font-family: "Lucida Grande" , "微软雅黑" , "宋体" , "黑体" , "幼圆" , "隶书" , "华文行楷", Verdana, Lucida, Arial, Helvetica, sans-serif;}
body {
    font-size:12px;
    border:0px;
    font-variant: normal;
    color: #bcbcbc;
    text-decoration: none;
    margin: 0px;
    padding: 0px;
    background-color: #fff;
    width:100%;
}
ul,li,ol,dl,dt,dd,form{padding:0px;margin:0px;}
li{ list-style:none}
form,img { border:none;}
.left{ float:left;}
.right{ float:right}
.clear{ clear:both}
.buttons li a {width:100px;height:50px; background:#069; display:block}
.buttons li a:hover{ background:#CCC}
.buttons li a.mouseover{background:#CCC}  /* 定义鼠标移上的效果*/
</style>

<script type="text/javascript">
//焦点图功能
$(function(){
    var ad_img = $("#imgs"); //定义幻灯图片组的id,可以根据实际情况修改
    var ad_button = $("#buttons"); //定义幻灯按钮组的id,可以根据实际情况修改
    var ad_imgs = ad_img.find("li");  //图片组的li集合
    var ad_buttons = ad_button.find("li") //按钮组的li集合
    var ad_mouseoverCls="mouseover" //定义鼠标移上的class的名称,可以根据实际情况修改
    ad_imgs.hide() //默认将图片组隐藏
    ad_imgs.eq(0).show() //默认将第1张图片显示
    var ad_i = 1; //计数器,默认从第2张图片开始淡入
    ad_buttons.mouseover(function(){
        ad_i = ad_buttons.index(this); //鼠标移上的是第几个
        ad_imgs.hide()
        ieFilter(ad_imgs[ad_i]); //执行滤镜
        ad_imgs.eq(ad_i).show(); //将对应的图片显示
        ad_buttons.find("a").removeClass(ad_mouseoverCls);
        ad_buttons.eq(ad_i).find("a").addClass(ad_mouseoverCls);
        })

    //如果是ie浏览器则执行滤镜
    var ieFilter = function(o){
        if($.browser.msie){
            $(o).css("filter","progid:DXImageTransform.Microsoft.RevealTrans(Duration=1, Transition=23)") //设置滤镜
            o.filters[0].apply();
            o.filters[0].    transition=23; //每次出现不同样式
            o.filters[0].play();
            }
        }
    var ad_autoMarquee = function(){
        if(ad_i<ad_imgs.length){
            ad_imgs.hide()
            ieFilter(ad_imgs[ad_i]); //执行滤镜
            ad_imgs.eq(ad_i).show(); //将对应的图片显示
            ad_buttons.find("a").removeClass(ad_mouseoverCls);
            ad_buttons.eq(ad_i).find("a").addClass(ad_mouseoverCls);
            ad_i++; //将计数器增1
            }else{
                ad_i=0; //重置计数器
                }
        }
    var focusAd = setInterval(ad_autoMarquee,3000)
    })    
</script>
</head>

<body>
<div >
<div id="imgs">
    <ul>
    <li><img src="Chrysanthemum.jpg" /></li>
    <li><img src="Desert.jpg" /></li>
    <li><img src="Hydrangeas.jpg" /></li>
    </ul>
</div>
<div     class="right buttons" id="buttons">
    <ul>
    <li><a href="#">1</a></li>
    <li><a href="#">2</a></li>
    <li><a href="#">3</a></li>
    </ul>
</div>
</div>
<div     class="clear"></div>
<h1><a href="http://zhuoyue.me">卓越.Me</a></h1>
</body>
</html>

你也可以看1下在线演示的效果:http://demo.zhuoyue.me/js/Ad/zi-ji-bian-xie-de-jian-dan-yi-dong-de-huan-deng/
当然你可以把源代码和图片下载下来:自己编写的简单易懂实用的广告幻灯代码

使用Data URI scheme来编码你的小图片

今天很有意思,没事在对员工编写的导入excel功能进行产品测试的时候,由于偷懒直接将不太满意的地方使用QQ截图存储到剪辑板中,然后又到项目的web管理平台当中录入Bug,并且继续发扬偷懒精神,直接使用ctrl+v粘贴截图到Bug描述(使用KindEditor超文本编辑器)当中,居然发现1个奇怪的现象:那张Bug截图居然正常的显示在编辑器当中,它可是网页上的编辑器啊,不是Windows应用软件啊,我印象中这种事以前只发生在客户端的1些软件之间的啊。
是的,根据以往的经验,我不太相信这件事,认为它可能是使用的本地系统的绝对文件路径,形如:file://c:/windows/temp/…,但是抱着死猪不怕开水烫的态度,我还是使用html源码进行了查看,这不看不要紧,1看吓1跳,发现下面代码:

<img src="data:image/png;base64,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" alt="" />

Continue reading “使用Data URI scheme来编码你的小图片”

回顾1些在项目管理中遇到的问题和解决方式

从事软件开发很长很长1段时间了,除去在校时光,正式进行社会工作也已经4年光景了。记得最初的时候,我还是使用ASP,那会儿asp还很流行,.net framework1.1才出来不久,那会儿是2003年吧;那会儿你要既会vbscript也要会javascript;那会儿你要既会css也要会html4;那会儿你要既懂vb.net 2003,也要懂c++;总之那会儿,我接触到了很多语言、思想之类的东西。
工作4年了,大小遇到过的项目也有三四十个了吧,由于1直以来,从踏入社会的那1刻就从事项目管理和开发的工作,所以在实践的道路上遇到过很多问题,通常是通过自己翻阅资料,以及寻求互联网帮助来解决,现在也慢慢的喜欢上这种方法。
现在把1些近期项目中遇到的问题记录如下,另外也附带了自己当时的处理方法和思路:
1.信息的不对称和不及时,这个问题是所有问题的根源。打个比方,进入某个迭代的产品测试环节,产品告诉美术根据客户需求,需要将新闻和公告互换位置,美术将更改后的效果图发送至项目经理和产品进行确认,项目经理可能还不知道这样1件事,项目经理、产品、客户确认过后,美术将效果图发送至前端,前端可能还不知所以然,问:“这是什么呀?”,然后美术又需要将修改的地方告诉前端。
这种信息的不对称和不及时,在项目的开发过程中,会浪费很多时间和工作量,我们应该使用1种网络软件管理或电邮等方式,要让所有项目组的人及时清楚,以及明确各自的责任。这个环节我目前使用的是zentao来进行管理。
Continue reading “回顾1些在项目管理中遇到的问题和解决方式”

共青团苏州市沧浪区委“会员制”志愿者管理服务系统

这段时间1直在负责公司的1个项目,这也是为什么今天周六大家都没有休息的原因,按照计划25日就要项目结束的了,还有13天。我来简单谈谈这个项目吧,上周这个项目也获得了苏州市经信委市级加快信息化建设专项资金扶持。
项目的主办方是共青团苏州沧浪区委,他们1直在计划这样1个平台:大家可以看到现在每天早晚会有很多挽着“志愿者”标志的广大社会人士在苏州市交通要道指挥交通,这些人叫做志愿者,他们1直有志于回报社会,当然这是非常值得提倡和学习的,目前社会志愿者也日益成为我国现代社会管理的重要力量,团区委希望搭建这样1个平台,在这个平台上广大普通社会人士可以申请注册成为1名志愿者,当他的信息通过审核后,团区委会给他发送1张能够唯一标识他身份的会员卡片,并且他能够登陆这个平台,在平台上获取感兴趣的志愿活动信息,然后申请报名相应志愿活动,1旦活动报名通过,他就能够去现场参加这些志愿活动,比如:去照顾老人、带小孩、指挥交通等等,同时团区委为了发扬和扩大志愿者精神和队伍,也会对志愿者们进行小小的奖励,就是在他每参加完1次志愿活动后,会在平台系统里给他记录1定数量的积分,当志愿者的积分达到1定量的时候,可以去团区委的指定机构兑换1些纪念礼品。
本身这个项目是比较简单的,相对比较复杂的就是:由于志愿者在参加完活动后需要记录积分,那么就需要有联网的设备对会员卡片进行刷卡操作,以将会员卡号、活动编号发送到平台;由于志愿者在积分达到1定程度的时候,可以去指定机构兑换礼品,那么同样需要有联网的设备对会员卡片进行刷卡操作,以将会员卡号、礼品编号发送到平台。
这也是我们目前尚未解决的问题,我们将这个需求扩展以后,形成了以下这样2条需求:“某志愿者通过某终端刷卡机参加了某活动,获得了多少积分;某志愿者通过某终端刷卡机兑换了某礼品,消费了多少积分”。为了实现这2条需求,团委领导、公司老板及我先后接触了多家公司,第1家是建行苏州分行,我们计划使用建行的信用卡或者借记卡来实行会员卡的功能,刷卡终端采用银联POS机或建行其它设备来实现,但后来由于建行信用卡发卡需要较多的用户信息,并且信用卡需要年费,未成立人需要监护人签字等条件,建行借记卡不能零消费,还有小额管理费等条件,我们和建行的洽谈就结束了;第2家我们找的是中国移动苏州分公司,刚开始他们给我们介绍了1款叫做CUPMobile智能SD卡的产品,这款产品是第3方供应商提供的,叫做海瑞斯信息科技,这款产品大小和1般mini sdcard相仿,可以作为普通的sdcard插入手机sdcard插槽中,不同的是该sd卡是智能sd卡,带有可以和终端设备进行交互的芯片,能够进行编程罢了,该方案后来由于必须走银联通道而告终,因为走银联通道意味着每次刷卡银联就要收取手续费,并且银联也不允许零消费操作;第3家还是中移苏分,不过这次他们推荐的是他们自己的产品,1张带有天线的芯片卡,可以放进普通的手机里,如果放不进去的,也可以做成1张普通IC卡片,无奈该方案也不完美,就是该方案终端设备上相配套的终端软件需要独立开发,这是我们目前的方案1。
当前该项目即将要结束,却陷入僵局,没有较完美的终端刷卡方案。期间我也计划了另外1套方案,使用二维码技术,每次志愿者上网报名活动和兑换礼品,我们生成1个唯一的2维码图片给志愿者,他可以选择打印或者保存,我们也可以通过彩信通道将2维码图片发送至他的手机上,志愿者只要活动结束或者礼品兑换现场将2维码图片出示并在电脑或手机前1扫,我们就可以获得该二维码图片所代表的网址信息,我们将网址打开就实现了刷卡,这是我们目前的方案2。
这个项目采用的是PHP,使用的Zend Framework MVC方式,目前90%功能部分和页面已经完成,但是时间相当紧迫,辛苦了这帮弟兄们了。

不错的Jquery幻灯插件KinSlideshow

今天同事在做某个项目的前端代码的时候,由于页面自身有多处幻灯效果需要展现,从网络某处找到1款叫KinSlideShow的Jquery幻灯插件,出于兴趣爱好我自己也测试了1下,感觉不错,遂收藏。
应用该插件最简单的代码:

$(function(){
    $("#KinSlideshow").KinSlideshow();
})

更多的方法和属性可以查看演示:http://demo.zhuoyue.me/js/KinSlideshow/
此处下载完整源代码KinSlideshow源代码包,下载之前,请对我的分享表示支持,评论1下哈。