软件开发中的破窗效应
应该有很多人已经知道破窗效应【注1】这个社会学 (犯罪学)的词语,破窗效应最先由社会学家James Q. Wilson和George L. Kelling在一篇名为《Broken Windows》的文章中提出【注2】: “一个房子如果窗户破了,没有人去修补,隔不久,其它的窗户也会莫名其妙地被人打破;一面墙,如果出现一些涂鸦没有被清洗掉,很快 的,墙上就布满了乱七八糟、不堪入目的东西;一个很干净的地方,人们不好意思丢垃圾,但是一旦地上有垃圾出现之后,人就会毫不犹疑地抛,丝毫不觉羞愧。” 我们一直在喊敏捷开发,其实敏捷开发的一个很重要的目的就是消除浪费,防止破窗效应的发生。事情太难,就让它简单,更简单。流程太重,就让它轻点,更轻点。尽量扫清开发的障 碍,消灭破窗形成的环境。下面我会从软件构建的很多方面来描述如何防止“软件开发中的破窗”。 脏
http://www.cyqdata.cn/cnblogs/article-detail-184
关于Javascript模块化和命名空间管理
最近闲下来的时候,稍微想了想这个问题。【关于模块化以及为什么要模块化】 先说说我们为什么要模块化吧。其实这还是和编码思想和代码管理的便利度相关(没有提及名字空间污染的问题是因为我相信已经考虑到模块化思想的编码者应该至少有了一套自己的命名法则,在中小型的站点中,名字空间污染的概率已经很小了,但也不代表不存在,后面会说这个问题)。 其实模块化思想还是和面向对象的思想如出一辙,只不过可能我们口中所谓的“模块”是比所谓的“对象”更大的对象而已。我们把致力完成同一个目的的功能函数通过良好的封装组合起来,并且保证其良好的复用性,我们大概可以把这样一个组合代码片段的思想称为面向对象的思想。这样做的好处有很多,比如:易用性,通用性,可维护性,可阅读性,规避变量名污染等等。 而模块化无非就是在面向对象上的面向模块而已,我们把和同一个项目(模块)相关的功能封装有
http://www.cyqdata.cn/cnblogs/article-detail-183
Web在线操作Office文件
最近公司有个项目,需要直接在IE浏览器中操作Word文档,随后在网上搜了一些资料,感觉都不是很理想.
不过,最后还是找到了一个功能比较强的控件,是老外开发的控件,需要注册.还好,没有注册时,只是在页面关闭时弹出一个对话框,如果某人能把它…掉,本人非常感激,嘿嘿
好了,废话不多说.先说说最近搜集的成果,不同级别的功能有不同级别的对应方案,要看大家需要了,这里我提三个方案.
第1个方案,原汁原味
Word,Excel或Vioso文档等Office,2003以后的版本,是都可以进行转换的,比如转换为Xml或Html,所以最简单的方案就是直接通过代码将Word文档转为Html格式,这样就可以在线浏览,只是在线浏览,是不能编辑的.
其中,Excel文件如果转为Xml
http://www.cyqdata.cn/cnblogs/article-detail-182
深入浅出Flex Viewer 2.1(二)——体系结构
一、概述
在上一篇文章《深入浅出Flex Viewer 2.1(一)——概述》中,笔者对Flex Viewer用于构建以地图为中心的富客户端(RIA)应用的原型的功能和价值做了简要地介绍。在本文中,笔者将继续介绍该框架的体系结构。通过本文,读者可以详细了解到Flex Viewer框架源代码的关键目录和文件结构,以及这些文件中所包含或涉及到的系统的哪些构件(第二章);以及这些构件间的逻辑关系和连接这些构件所用的关键技术,如:消息总线(EventBus)、配置项管理(Config Manager)、数据共享机制(DataManager)的基本介绍(第三章)。
二、框架源码的结构视图
一般来说默认的Flex Viewer框架的源代码的结构如下图所示,
http://www.cyqdata.cn/cnblogs/article-detail-180
SQLServer2008:助您轻松编写T-SQL存储过程(原创)
本文主要介绍 SQLServerExpress2008不用第三方工具调试T-SQL语句,经过本文的介绍,用SQLSERVER2008 Manage studio 编写、调试T-SQL存储过程都将是一件轻松、快乐的事情。
一、回顾早期的SQLSERVER版本:
早在SQL2000时代,查询分析器的功能还很简陋,远不如VS那么强大。到SQL2005时代,代码高亮、SQL优化等功能逐渐加强,但是依然无法调试SQL语句。好一点的第三方的SQL语法编辑器似乎也不够完美,这样导致一些人抱怨存储过程不便于维护,开发的时候能不用则不用。
二、SQLSERVER2008
http://www.cyqdata.cn/cnblogs/article-detail-178
WCF面向服务应用程序系列之十五:托管(Hosting)-WAS托管
WAS托管:Windows激活服务(WAS)是一个系统服务,是IIS7的一部分,也可以独立的安装与配置。IIS与WAS的主要区别在于WAS并不局限使用HTTP,它支持所有可用的WCF传输协议、端口与队列,支持的协议包括:HTTP、TCP、IPC、MSMQ。
WAS提供了大量基于自托管的强大功能,包括应用程序池、回收机制、空闲时间管理(Idle Time Mannagement)、身份管理(Identity Management) 以及隔离(Isolation);宿主进程可以根据情况选择使用这些功能。
下面我们通过一个DEMO来介绍WAS托管(net.tcp绑定)。
&n
http://www.cyqdata.cn/cnblogs/article-detail-177
浅析jQuery的链式调用 之 each函数
如果对于jquery的$()包装器函数还不是很清楚,请先参阅我的上一篇日志:浅析jQuery的链式调用
话说回来,虽然jQuery让学习前端技术的越来越多了起来,(本人就是因为学校图书馆偶然间遇到了一本jQuery基础教程(二)开始想深入的学习前端技术),关于jQuery的博文甚至多于javascript,它让编程的门槛大大的降低了,但是它隐藏了太多细节了,形如$('#id').append('<p>xxx</p>').clone().appendTo(x).end().css(...)................这样操作的模式已经很难找到常规javascript的影子。浏览器的差异仿佛一去就不见了踪影,我不认为大部分都能在这安逸的环境再重新回到考虑javascript如何在不同浏览器能表现一致等问题,是福是祸真的很难说。
接下来言归正传.....
http://www.cyqdata.cn/cnblogs/article-detail-173
程序员,设计才是王道!
今天,编程和网络世界已经发生了巨大的变化。Flash,Expression Blend,Silverlight和WPF的流行,已经证明会写代码已经不是一个优秀的程序员的唯一标准了。那些曾经有专门的设计人员在团队中的日子早已一去不复返了。这在大型企业和大型团队仍可能存在,但是在小型企业是不现实的。而大部分工作来自小企业的来,这些企业需要万能型的程序员。也就是说,你不仅仅需要编写代码,还需要会设计。 我们可以看到现实中存在的一些的矛盾:很多程序员和新生都热衷于编程,而不是设计或者其他方面的工作。还可以看到,很多好的程序员不擅长于设计。我们也可以注意到能设计的程序员比纯粹的程序员的需求要大。 如果,现在你想多我进行职业咨询。我会说去成为一个设计人员而不是编码人员。如果你确实想
http://www.cyqdata.cn/cnblogs/article-detail-172
绝对超强C#也能PS图片,还能为网站Ajax上传图片同时生成微缩图(附Demo)
本文旨在与各位朋友们分享我是如何在项目中用C# “ps图片” 为网站生成同比例微缩图的解决方案。如有不足之处欢迎您指出。
一、技术概述:
1.Ajax无刷新上传图片,详情请阅我的这篇文章。(jquery + c# ashx)
2.C#位图处理 System.Drawing;
二、微缩图处理方法:
生成微缩图的核心方法:
CreateThumbnailPicture
Code highli
http://www.cyqdata.cn/cnblogs/article-detail-171
三谈 C# 交互窗口
在上一篇随笔“再谈 C# 交互窗口”6楼的评论中,DiryBoy 园友指出 csharp.exe 在 Windows 操作系统中运行出错貌似 .NET 4 新的安全规则在作怪,并给出一个解决类似问题的网址。具体原因是 .NET Framework 4 中引入了两级透明度,.NET Framework 4 规则使用第二级透明度(SecurityRuleSet.Level2),而 .NET Framework 2.0 规则使用第一级透明度(SecurityRuleSet.Level1)。所以在 Mono.CSharp.dll 的 C# 源程序代码的 AssemblyInfo.cs 文件文件中加入以下语句就可以解决这个问题:[assembly: SecurityRules(SecurityRuleSet.Level1)]
但是这样一来在 Ubuntu 操作系统中使用 mono 编译就无法通过了。
http://www.cyqdata.cn/cnblogs/article-detail-170
程序员应知 -- 如何分析海量数据
在这个云计算热炒的时代,如果你没有处理过海量数据的话,你将不再是个合格的Coder。现在赶紧补补吧~
前一阵子分析了一个将近1TB的数据群(gz文件,压缩10%)。因为第一次分析如此巨大的数据,没有经验,所以浪费了许多时间。下面是我整理的一些经验,方便后者。
欢迎各种补充,我会不断更新这篇文章;觉得有用的话,速度分享链接;有不同意见的话,请果断拍砖;
下载数据
Q:怎么自动下载多个文件?
这是我遇到的第一个问题。当数据量很大时,一般都会分成很多个文件存放。这时下载文件比较麻烦。
A:用Wget命令。Windows下花费一点时间去下载安装。但之于手动下载,能省不少时间。
我提供两种方式方式下载文件,
a)用Wget的递归下载选项 “-r”。一般命令如下
wget –r http://<下载数据的根目录>/ -o <下载记录
http://www.cyqdata.cn/cnblogs/article-detail-169
【日常小记】内存分配方式及常见错误
积少成多,滴水穿石——自勉 内存操作对于程序开发人员来说,永远是一块雷区。在这片区域,总是不断的埋雷、排雷,而且往往是排雷花了非常大的代价。记得在公司实习时,有大概2个星期的时间,team的几个人去排雷——有地方发生了memory leak! 而以我现在的认知来看,只有极少数的programer敢拍着胸脯说,非常熟悉内存操作,手到擒来不会排雷。针对这个情况,我要求自己在尽量去探索,以求少埋雷、甚至不埋雷(这是一个很大的挑战)。以下内容摘自《高质量C++/C编程指南》(作者: 林锐 博士),以警醒自己。更多详细、深入的东西有待我继续深入调查、学习。 1、内存分配方式 内存分配方式有三种: (1) 从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。 (2) 在栈上创建。在执行函数时,函数内局部变量的存储单元都可
http://www.cyqdata.cn/cnblogs/article-detail-168
对于前台的一些想法
做前端已有三、四个月了。最有感触的是昨天,三个月前写的前台代码,在现在的我看来竟然如此地差劲,或者自己的实力有所增强吧。
<div style="">这种写法,可能以前的我还能接受,但是自从有一次被项目经理骂了之后,很少写这样的代码,基本上把样式都分离出去。那一次被骂,记忆比较深刻,他是这样说的:“可能我对你的要求太高了,但是我希望你能这样做”。
我很认同一个观点,就是一个程序员去写前台代码,往往会比一个不懂程序的人写得更优秀,因为写过后台的人知道前台哪里是动态的数据,这一点比较重要,因为牵涉到小幅度改动和大幅度改动的问题。所以,我更加能体会到样式分离的重要性。
三个月前写的代码,除了一些
http://www.cyqdata.cn/cnblogs/article-detail-167
选择结构(if..else..,switch,try..catch..)的拆分
编程中经常遇到很多条件,以及条件套条件的情况,以至于一个方法会写得非常地长。有多种方法可以规避这个问题。比如反射,策略模式,表驱动等等。先抛开这些方法不讲,从根本需求来探索这个过程。
一个switch结构可能是这样:
swicth(case)
case 1:
//do1
break;
case 2:
//do2
break;
.....
这里注释的do部分代码可能会是很多很多行,以及嵌套switch,if结构。
进一步,这个模型演化成
swicth(case)
case 1:
do1();
break;
case 2:
do2();
break;
.....
do1(){}
do2(){}
也就是将里面的代码模块化。这个方法有效的减小了一个方法的代码长度。实际上
http://www.cyqdata.cn/cnblogs/article-detail-166
Visual studio 2010几个比较酷的功能
今天在微软teched2010的会上,了解到vs2010中几个比较酷,也比较实用的功能。
1. 先上车后买票
通常使用类的时候,先需要对其定义,然后才能使用。但在vs2010中,可以先写上类的使用方式,然后把类的定义交给vs.net来完成。不仅仅对类的定义,其上的public Property/Method,也可以先使用,其定义由vs.net完成。对于Property,vs2010同时会自动生成一个对应的private filed。
比如,这么写:
Student xiaoA = new Student();
或者Student xiaoE = new Student("xiao e");
事先并没有对Student做定义或声明,右键选择完成其定义。visual stud
http://www.cyqdata.cn/cnblogs/article-detail-164
Linux内核里的智能指针
众所周知,C/C++语言本身并不支持垃圾回收机制,虽然语言本身具有极高的灵活性,但是当遇到大型的项目时,繁琐的内存管理往往让人痛苦异常。现代的C/C++类库一般会提供智能指针来作为内存管理的折中方案,比如STL的auto_ptr,Boost的Smart_ptr库,QT的QPointer家族,甚至是基于C语言构建的GTK+也通过引用计数来实现类似的功能。Linux内核是如何解决这个问题呢?同样作为C语言的解决方案,Linux内核采用的也是引用计数的方式。如果您更熟悉C++,可以把它类比为Boost的shared_ptr,或者是QT的QSharedPointer。
在Linux内核里,引用计数是通过struct kref结构来实现的。在介绍如何使用kref之前,我们先来假设一个情景。假如您开发的是一个字符设备驱动,当设备插上时,系统自动建立一个设备节点,用户通过文件操作来访问设备节点。
如上
http://www.cyqdata.cn/cnblogs/article-detail-163
Think in SharePoint 2010 OOTB Project: Site Columns & Site Content Type
SharePoint 2007 OOTB 项目力求快速开发SharePoint Portal,项目上主要是以OOTB Feature为主,在开发上大部分是在用SharePoint Designer。
这样的模式有以下缺点:
1. 没有应用程序周期管理的支持(ALM),没有源代码管理工具,没有利用解决方案包进行部署。
2. 所有自定义的内容都在数据库中,不能利用文件模板(Ghosted Page)来增强访问效率。
没有源代码管理工具对站点进行开发的风险是很大的,没有用Solution Package 部署这样会对效率上造成一些影响。开发这类型的站点如果部署Solution 也必须要在Farm级别,这也是直接用SPD的原因了。
目前SP 2010 + VS2010 + TFS2010开发站点,再加上Sandbox Solution不需要Farm管理员只要Site C
http://www.cyqdata.cn/cnblogs/article-detail-162
工作日志之项目经理篇
接上篇:《工作日志之部门经理篇》 大多数研发项目经理都遇到过这种困惑:“作为项目经理,安排进我项目的人中总会有不少人同时在其它项目中,我发现他们有时在我的项目中工作,不知何时又跑到其他项目中工作去了。表面上看部门经理分配了不少开发人员给我,其实真正在我这里干活的人没多少。我理解公司研发人力紧张,人员项目共享严重也是迫不得已,但是我想知道,名义上属于我项目的开发人员究竟在我的项目中投入了多少工作量。” 同样,如果不采取矩阵式管理,或者人力资源极其丰富的情况下,这时投入到项目的每个成员都是100%的投入,项目经理就不会有这个困扰了。然而几乎没有哪个项目会处于这种理想状况,大多数团队还是面临或多或少的人员跨项目共享的情况。 下面的统计视图可以很好的回答项目经理的人力投入问题: 如果一个项目成员填写的某次工作日志的活动记录中含有该项目,那么工作日志的项目次数就会被统计。 项目
http://www.cyqdata.cn/cnblogs/article-detail-161
利用多态重构为带参方法
《重构之美》之二 我在阅读遗留代码时,经常发现存在这样一种情形。在一个类中存在两个方法,它们做了相似的工作,区别仅在于方法内部某些对象的类型。例如: public class WorkSheet{ private void fillHeader() { Header header = createHeader(); for (String title:header.getTitles()) { fillCel
http://www.cyqdata.cn/cnblogs/article-detail-160
走向ASP.NET架构设计-第六章-服务层设计(前篇)
走向ASP.NET架构设计 第六章-服务层设计(前篇)
前篇:本章的内容比较的多:讲述ASP.NET项目中服务层的设计,什么是SOA架构,以及为什么需要SOA;在服务层设计的时候涉及到的设计模式和架构模式;最后用一个WCF的例子作为本篇的结尾。
本篇的议题如下:
服务层的概述
SOA架构讲述
SOA的基本原则
&
http://www.cyqdata.cn/cnblogs/article-detail-159