|
|
读了一下觉得很不错,转载一下给大家~
在IT领域做自由职业者是很合适的。有很多开发者都有过做自由职业者的经历。有很多书籍和文章将了如何让客户满意以及如何及时的交付正确的软件。但是很少文章讲述客户在项目过程中应该如何做。虽然客户付了钱,但这并不意味着我们要容忍他们非常粗鲁的态度和错误的习惯。

1. 好的软件一定不便宜 我常常遇到的一个问题是,客户想要花不到500欧元建立一个全功能的企业网站。这个价钱你可以找我隔壁的12岁小男孩,用Joomla帮你搭一个,但是专业的软件开发者,懂得软件架构,懂得如何开发安全,稳定,能良好运行的软件的一点比这个价格要贵很多。软件开发和别的职业是一样的,需要花大量的时间学习。
除此以外,很多客户往往在合同以外要求添加一些功能,免费的。你的医生不会免费工作,你的扫地阿姨不会免费工作,你也不会免费,为什么要求软件工程师免费工作?
我有见到很多客户雇佣了一些便宜的、自称专业的开发者,或者外包开发到印度,越南,结果往往很失望。这些渠道看上去是便宜了一些,但是后期的软件维护成本非常昂贵。所以很多客户尝试了一次以后,还是回头来找我开发。
2. 需求要明确 我们知道一开始就能列出所有详细的需求是很困难的。这也是为什么我们发明了敏捷开发这样的技术。但是如果你给我们错误的需求,我们也只能交付错误的软件。你可以因为软件不好用而责怪我们,但是你给了我们不对的需求在先。最终浪费了双方大量的时间,也浪费了很多钱。软件开发者也许很聪明,但是只有你了解你的业务需求!
3. 好的软件需要配合完成 为了交付一个好的软件,开发者应该在项目中全力以赴。但是客户也不能坐在一边对这个项目不闻不问。如果你想要你的软件按时、正确的交付,你应该和开发者保持联系,所以我们能及时发现问题并修正。这并不需要你无时无刻的盯着我们工作,你只要及时的回复我们的email就可以了,比如说24个小时之内。我有遇到过一些客户,在合同签完以后彻底消失,然后到软件交付的时候,跟我讲为什么没有开发完成?你说呢?!
4. 并不是所有的功能都是可见的 没有绚丽的界面和大量的新功能并不意味着我们没有努力工作。事实上,大量的工作都是和前台无关的。这也是为什么我们应该投入资源来改进后台的代码。根据 Pareto Principle http://en.wikipedia.org/wiki/Pareto_principle ,20% 的代码 解决了80% 的问题。这些问题有可能是服务器性能瓶颈或者数据损坏。虽然你花钱在这些方面你看不到软件的界面变化,但是它是值得的。
5. 提前给出准确的时间预测很困难 在任何一个领域,给出项目的时间预测是一件困难的事情。在IT领域更是如此,因为客户往往不知道他们到底想要什么。告诉我们你的想法,我们会给你一个时间估算,仅仅是估算。需求往往在开发过程中变化,所以不要老拿预估的时间来说事。
6. 程序员也是人 我们也许工作起来,思维方式像是机器人,我们也许长时间在办公室里不出来,但这并不意味着我们不是人类。当你在餐馆吃晚饭,或者做飞机安全着陆的时候,你会对厨师和飞行员表示感激,当你的家人在医院治愈的时候,你会对医生表示感激。那么请也把这份感激、尊重带给我们。
7. 告诉我要做什么,不要指挥我怎么做 你描述你的问题,让专业的人来提出解决方案。请让开发者做他擅长的事情:解决你的问题。在IT领域,开发者懂的往往远远比客户多。也就是说开发者知道不同的方案的优点与缺点,他会选择正确的解决方案。请不要把简单的问题复杂化,不要告诉我们如何解决问题,专业的问题由专业的人来解决,可以节省你的很多时间和金钱。
8. 听听我们的建议 正如上一段提到的那样,开发者在技术领域也许比你(客户)懂的多。如果你想要在你的网站放一个自动播放的视频,而开发者建议你不要这么做,那么听他的。因为他已经做过类似的案例,并且知道自动播放让很多人很厌烦。你喜欢这个视频,但是其他人不一定。如果你的开发者建议你不要使用Flash,那么相信他。他知道使用Flash的不好的地方,也许你不知道。
结论 软件开发者需要做所有的努力来完成一个好的软件。有很多书籍讲述了关于如果控制软件质量,怎么做需求分析,敏捷开发等等。但是作为客户,你也应该遵循一些基本的原则。最大的问题往往是客户希望项目的预算越低越好,却不断的更改需求,还没有很好的沟通。
开发背景:
有人曾经要我开发一个根据不同选择而显示不同颜色的管理工具。我开始考虑利用下拉框来实现条目背景及显示颜色根据条目名称不同而进行变化,根据这个思路我在网上搜了半天也没有找到任何相关的解决方案,最后我想到了一个比当初需求要复杂的方案(包括数据库),所以我尝试着找到一个更简单的实现方案。
该文主要是演示如何读取系统颜色并在下拉框中的每个条目中显示对应的颜色,该源码主要展示以下内容:
1、如何获得System.Drawing.KnownColor颜色控件的列表枚举
2、如何排除系统环境颜色,如“Active Border”
3、如何分配颜色到下拉框的每个条目
代码详解:
命名下拉框为ddlMultiColor 来显示颜色名称及颜色,用<div>标签显示右侧矩形结果,Aspx代码如下
<table>
<tr>
<td>
<asp:DropDownList ID ="ddlMultiColor"
OnSelectedIndexChanged="ddlMultiColor_OnSelectedIndexChanged"
runat="server" AutoPostBack="true">
</asp:DropDownList>
</td>
<td>
<div id="msgColor" runat="server">
</div>
</td>
</tr>
</table>
在cs文件中我们需要引用以下命名空间:
using System;
using System.Web;
using System.Reflection;
using System.Drawing;
using System.Collections.Generic;
我们先看一下Page_Load事件,在Page_Load中我们对选中的下拉列表进行处理显示
protected void Page_Load(object sender, EventArgs e)
{
if (Page.IsPostBack == false)
{
populateDdlMultiColor(); //51aspx.com
colorManipulation();
}
}
现在让我们来看一下populateDdlMultiColor() 函数
private void populateDdlMultiColor()
{
ddlMultiColor.DataSource = finalColorList();
ddlMultiColor.DataBind(); //liudao 翻译
}
finalColorList()方法
private List finalColorList()
{
string[] allColors = Enum.GetNames(typeof(System.Drawing.KnownColor));
string[] systemEnvironmentColors =
new string[(
typeof(System.Drawing.SystemColors)).GetProperties().Length];
int index = 0;
foreach (MemberInfo member in (
typeof(System.Drawing.SystemColors)).GetProperties())
{
systemEnvironmentColors[index ++] = member.Name;
}
List finalColorList = new List();
foreach (string color in allColors)
{
if (Array.IndexOf(systemEnvironmentColors, color) < 0)
{
finalColorList.Add(color);
}
}
return finalColorList;
}
System.Drawing.KnownColor是Asp.net系统本身自带颜色,我已经通过枚举列出了这些颜色并通过finalColorList()函授进行绑定。为了实现该功能,我使用了最基本的枚举特征之一:Enum.GetNames() 共享方法,该方法对枚举内容进行检测并输出结果为字符串序列,该字符串中每个值都对应枚举中的每个结果。
然而,该方法还是有些问题的。按照上面的思路,枚举金额过中会包括系统环境颜色,比如“Active Border(注:活动边框)”,为了解决该问题,我扩展了系统环境颜色。我用了System.Reflection.MemberInfo类。
这里我用System.Drawing.SystemColors属性填充systemEnvironmentColors ,然后创建一个名称为finalColorList 的图形列表,在finalColorList 中我只调用已知颜色,但是不在系统环境颜色中。然后把finalColorList绑定到ddlMultiColor中。至此,我们已经有了一个包括全部颜色名称的下拉框,下面让我们来操作一下:
private void colorManipulation()
{
int row;
for (row = 0; row < ddlMultiColor.Items.Count - 1; row++)
{
ddlMultiColor.Items[row].Attributes.Add("style",
"background-color:" + ddlMultiColor.Items[row].Value);
}
ddlMultiColor.BackColor =
Color.FromName(ddlMultiColor.SelectedItem.Text);//liudao翻译
}
下拉框中的每一行背景颜色的Style]属性都与该行显示的颜色名称对应的。在OnSelectedIndexChanged 事件中下拉框中被选中的行通过下面的函数结合<div>标签进行高亮显示,同时右侧的矩形颜色也随之变化。
protected void ddlMultiColor_OnSelectedIndexChanged(object sender,
EventArgs e)
{
ddlMultiColor.BackColor = Color.FromName(ddlMultiColor.SelectedItem.Text);
colorManipulation();
ddlMultiColor.Items.FindByValue(ddlMultiColor.SelectedValue).Selected =
true;
msgColor.Attributes.Add("style", "background:" +
ddlMultiColor.SelectedItem.Value + ";width:30px;height:25px;");
}
至此,我们学会了如果获取System.Drawing并排出系统环境颜色,并绑定颜色名称到下拉列表。
完整源码下载地址>>
原作者:Fuad Bin Omar 翻译:liudao
微软官方配合Asp.net2.0推出了一些体验程序,比如说petshop等,其中据官方说MyWebPagesStarterKit是一个综合的CMS管理系统,说句实话我最早看到MyWebPagesStarterKit时还不知道这个源码有什么特点,究竟怎么用。最近也是一次偶然的机会听到微软的一位讲师朋友给我大概说了一下这个程序,我看了一下官方(http://www.codeplex.com/Wiki/View.aspx?ProjectName=MyWebPagesStarterKit)资料,最新版本是The final version of 1.1.2 is now available! (1.1.2 Final)。下载下来配置了一下,觉得还不错,是多语言版本,可惜就是没有中文,在google上搜了一下,介绍MyWebPagesStarterKit的中文资料真是少之又少,更不用说中文版本了,所以一气之下配置上了示例数据把大部分内容都给汉化了,希望对大家有用,还是抓两个图先睹为快!
特点我总结了一下,主要有这些:
·可以在线添加文章、下载、留言板、友情链接等板块
·支持多语言、多皮肤(自带16个皮肤)
·可以在线添加模块并可以设置用户访问权限
·页面编辑器为FCKeditor
·另外该系统还支持Silverlight的相册显示,我配置了一下,可惜没有成功!
该系统需要设置IIS以支持Silverlight(主要用于相册显示),IIS设置步骤:站点—〉HTTP-Header—>MIME Types 新建,扩展名.xaml,MIME type: application/xaml+xml
·说明文件是英文的,不过参照我翻译的这个配置基本就不用看帮助了
该系统数据文件均存储为.config格式,没有任何数据库,不知道性能方面会如何
声明:该系统为微软官方程序,由liudao汉化及添加配置内容,首发于51aspx.com,转载请注明!
翻译不准确之处,还请大家指出!
中文版下载地址:http://www.51aspx.com/CV/MyWebPagesStarterKit/ (5.5M)
英文原版下载地址:http://www.codeplex.com/MyWebPagesStarterKit/Release/ProjectReleases.aspx?ReleaseId=3737
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/liudao/archive/2007/07/20/1699997.aspx
上周五、周六在望京的微软(中国)参加了Web Camps北京站的活动,由大名鼎鼎的Scott和James亲自授课,发几张图上来与大家感受现场气氛。
实验环节主要是Asp.netMVC的开发使用,图片陆续补充中
大会上Asp.net大师Scott Hanselman给51Aspx的题词 (感谢陆地)
一般的复制文件方法就不说了,我的这个是因为拷贝ntoskrnl.exe还提示错误的解决办法
发生这种问 题主要可能有以下原因:Boot.ini 文件的 [Boot Loader] 部分中的 Default 值丢失或无效、Ntoskrnl.exe文件丢失或损坏、Boot.ini 文件中的分区路径设置不正确。可以这样解决:使用Windows XP安装光盘启动电脑,按照屏幕上的提示按下R键进入故障恢复控制台,使用Administrator账号登录系统。在提示符后输入"bootcfg /rebuild"命令然后按下回车。当屏幕上询问"将安装添加到启动列表吗?"时按下"Y"键,出现"输入加载标识符"的时候输入"Windows XP",到询问"输入OS加载选项"时直接按下回车。完成后重启动电脑到正常模式。 这样做可以修复boot.ini文件。如果是文件本身损坏或者丢失了, 也可以在故障恢复控制台下修复
Ntoskrnl.exe是初始化执行程序子系统并引导系统的驱动程序 丢了就不能进系统了 使用windows的光盘启动 在故障恢复控制台下输入expand (光驱盘符):\I386\NTOSKRNL.EX_ C:\WINDOWS\SYSTEM32\NTOSKRNL.EXE
Ntoskrnl.exe文件在WINXP系统中存储了WIN XP的启动LOGO画面 修改启动画面有可能因为Ntoskrnl.exe的版本不同而出现这个问题内存问题造成的,你可以用擦铅笔字用的橡皮认真擦亮内存金手指和清洁内存插槽.还可以借内存来试
数据传输出错 没读入初始文件 换个硬盘数据线看看
现在很多从51aspx上下载或一些书籍中的很多Asp.net程序都是Sql2005格式的,其中相当一部分都是放在App_Data这个文件夹下面,今天我对App_Data这个文件夹研究了一下,发现Sql2005数据库放在其下有以下优点:
用在Sql中进行数据库附加等操作即可进行数据库控制和连接设置:
因为这个可以直接通过VS2005自带的SqlExpress进行打开(如图所示),一般web.config中涉及不到服务器名称和帐号密码等信息,如:“Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\MyBooksDB.mdf;Integrated Security=True;User Instance=True”,当然前提是Web程序要与数据库在同一台服务器上,同时要授予一定的权限,这样对于虚拟主机用户来说就可以不用单独买Sql数据库也可以使用Sql数据库了。
附:如何用VS2005打开Sql2005数据库?
一般App_Data出现在WebSite方式的情况下比较多,首先搭建好IIS站点,然后用VS2005打开->站点,然后右侧就会出现App_Data文件夹,这样你就可以看到里面的数据库了(右键单击*.mdf文件-》打开=》显示表数据,是不是看到里面的数据了呢),当然就可以进行数据的操作啦!是不是,没有像Sql企业管理器管理起来一样方便啊?