《人月神话》读后感
作者:admin 日期:2008-12-30
能一直留传到现在的软件工程的经典书籍不多,这本书不看,对于搞开发,做软件项目的人来说那就确实有点遗憾了。好不好,不需要我这种小卒子去评论,我把这本书认真的看了三遍。
25年来,软件工程的发展不可同日而语,可做软件项目的精髓思想确实没有多大的改变。---这仅仅是个人的看法。如果做了几个项目再回头来读读这本书,可能很多有切身的体会。比如说:软件项目的乐趣所在,软件项目中的时间管控问题,软件项目中的资源配置问题,这些都很实在,很朴素,可是我们却总不能很好地去做好它,去管控整个项目.大到一个商业系统,小到一个模块,其实都存在一个做项目的思想,可现实中我们很难做到这点。
我读此本书个人的一些体会:
1.是什么让我大学毕业便抛弃自己专业踏入IT的之路?
兴趣,对编程的乐趣,当别人使用你做的系统或软件时那种成就感。这就是如书中所言:职业的乐趣所在:创建事物的快乐,开发对他人有用的东西,将零散的文字组装成一个有用的东西,不断学习的乐趣,创造性的工作。 这些确实是吸引我一直在这路上奔波的东西。
2.是什么困扰我们的项目不能按时交付的因素?
缺乏合理的时间进度管控是造成项目滞后的主要原因。 有些时候对于乐观,有些时候过于妥协,常常缺乏坚持。做了几个项目,发现自己在时间管控方面需要努力,当然,客户的不确实需求因素也常常会左右我的决定--毕竟,在企业做IT项目与纯粹的软件公司做软件项目有不一样的地方。
3.很多项目的失败,是因为彼此之间缺乏沟通以及交流的结果
这点我深有体会,因为我吃过大亏。很多时候在制造性企业做IT,客户的前期需求有很大的不确定性,可能在开始时大家都以为说的是同一个事儿,但当做出来之后客户发现与自己想像的相差太远。同时,用户在操作上的习惯问题也会成为一个不能忽视的因素,这也应该算作是需求的一部分吧。用户与开发项目组如果不在需求上认真“较真”,那以后的问题就会不断涌来了。这些需要靠什么去约束呢?靠文档,靠白字黑字的文档。
4.软件系统可能是人类创造中最错综复杂的事物
往往一个很小的功能,其实也需要开发人员的架构设计方面的完善,对其它模块的影响及扩展,以及代码编写工作。用户在前台可能看到的只是几个文字,实际是中开发人员日夜奋战的结果。很多时候,客户的需求修改,在他们眼里看起来是如此地Easy,可他们却忽视了很多他们看不到的因素---当然,这不是说怪我们的客户。我只是觉得,只有大家彼此沟通,彼此理解,才会做出精品来。
书中还有很多经典的观点,就不用我一一述说了。影响我的另一本好书《代码大全2》也是很值得大家去看看的。
强烈推荐IT人员读此书。
用户权限管理设计(2)
作者:admin 日期:2008-12-23
上篇讲完了数据库的设计,这次我们讲讲在Net中的实现
UI的实现,主要是方便用户操作,考虑用户体验,这个没有什么好说的
后台管理菜单
角色管理列表
新增用户
权限分配
现在,我们根据数据库生成实体类。实体类的设计一般跟数据库的字段相差不大,可以用相关的ORM帮你生成
我们再看看BLL层
我这里是用户-角色的代码,其它的只要根据数据库存储过程就可以看出对应的方法是什么的
UI的实现,主要是方便用户操作,考虑用户体验,这个没有什么好说的
后台管理菜单
角色管理列表
新增用户
权限分配
现在,我们根据数据库生成实体类。实体类的设计一般跟数据库的字段相差不大,可以用相关的ORM帮你生成
我们再看看BLL层
我这里是用户-角色的代码,其它的只要根据数据库存储过程就可以看出对应的方法是什么的
复制内容到剪贴板 程序代码
/// <summary>
/// UserRole业务逻辑层
/// </summary>
public class MemberRole:ABC.IDAL.Sys.IMemberRole
{
private static readonly ABC.IDAL.Sys.IMemberRole dal = ABC.DALFactory.DataAccess.CreateMemberRole();
/// <summary>
/// 增加
/// </summary>
/// <param name="Model">Model</param>
/// <returns>bool</returns>
public bool Insert(ABC.Entity.Sys.MemberRoleInfo Model)
{
return dal.Insert(Model);
}
/// <summary>
/// 修改
/// </summary>
/// <param name="Model">Model</param>
/// <returns>bool</returns>
public bool Update(ABC.Entity.Sys.MemberRoleInfo Model)
{
return dal.Update(Model);
}
/// <summary>
/// 删除
/// </summary>
/// <param name="memberRoleID"></param>
/// <returns>bool</return...
/// UserRole业务逻辑层
/// </summary>
public class MemberRole:ABC.IDAL.Sys.IMemberRole
{
private static readonly ABC.IDAL.Sys.IMemberRole dal = ABC.DALFactory.DataAccess.CreateMemberRole();
/// <summary>
/// 增加
/// </summary>
/// <param name="Model">Model</param>
/// <returns>bool</returns>
public bool Insert(ABC.Entity.Sys.MemberRoleInfo Model)
{
return dal.Insert(Model);
}
/// <summary>
/// 修改
/// </summary>
/// <param name="Model">Model</param>
/// <returns>bool</returns>
public bool Update(ABC.Entity.Sys.MemberRoleInfo Model)
{
return dal.Update(Model);
}
/// <summary>
/// 删除
/// </summary>
/// <param name="memberRoleID"></param>
/// <returns>bool</return...
用户权限管理设计(1)
作者:admin 日期:2008-12-13
用户管理权限设计一直是大家讨论的热点,因为几乎涉及到每一个开发的业务系统。我找了很多很多的资料,大家的核心基本上都是一样的:基于角色管理. 用户,角色,模块,权限的相互组合,就可以形成一个强大的权限管理系统。
最近在一个项目中设计的一个用户权限的设计,很乐意与大家一起讨论及分享.
设计思路
我的设计思路或者说是我想要实现的功能
1.用户的权限通过角色来控制,一个用户可以拥有多个角色.
2.用户拥有不同角色时,其权限应该是多个角色相互的补集.
3.一个角色拥有多个模块
4.用户的前台菜单显示根据角色所拥有的模块所决定,不同的用户在前端显示的操作菜单是不一样的。
5.页面中的功能按钮根据模块中所包含的功能所定义,通过模块及角色所拥有的权限进行控制
6.可看某个模块有哪些用户,哪些对应角色,并对其进行特殊权限设置.
7.可以针对单个用户进行特殊设置
我在我的Project中,基本上达到了以上的效果及功能,但在实际过程中发现有些不足之处。因为整个权限设计是基于数据库来设计中,所以数据的读取当数据量大时(我所说的数据量是以万以上来计)可能对性能有一定的影响。但对于一般来说,几千用户之类的我想还是可以承受的。我会在后面说明不足之处。
数据库设计
基本设计:
1.首先,设计数据库.
数据库的设计其实我估计大家都很熟悉了
基本表:用户表,角色表,模块表,功能表,管理员表.如果涉及到企业性质的,可能会根据需要加上组织结构表,群组表等其它辅助表
用户
管理员
角色
模块
(我的模块表考虑了子模块的因素,所以会有深度,父模块ID这两个字段,在后来开发过中,由于思路的转变,IsRootModule,FunctionCode我都没有用到,为了让整个权限系统通变得更通用,我都将其单独设计成了另一个表)
功能表(功能表就是模块对应的功能:增加,删除,修改,详细,列表,浏览,导出,导入之类的)
业务表:用户-角色表 模块-功能表 角色-模块表
要实现一个用户多个角色(1 to n),一个角色多个模块(1 to n),一个模块多个功能(1 to n),那就得加上几个相关的业务表,之前考虑用视图去实现,我个人之见,视图最好只用来读取数据,不要用来进行数据操作.后来证明是不可取的,这里要注意的就是在实际的业务操作中,应该尽量避免重复的数据录入. 这些表都很简单,但却很关键
用户-角色:
角色-模块:
模块-功能:
大家可以看到,表结构很简单,字段也很少,设计也差不多。都是将相关联的字段ID取出来做数据存取。
视图:用户-角色-模块-功能视图
可能大家会觉得很奇怪,为什么这里出现member_role呢。因为我们在数据表中只存取了ID值,而对应的RoleName字段并没有包含其中,这里的视图就是获取关联表中其他所需要的字段数据了。另外两个视图大家看名字应该就知道他的用处了。
存储过程:各自表的增加,删除,修改,及列表数据. 判断是否存在相同的数据
(CUDLIS-Create, Update,Delete,IfExist,Show,List)
存储过程我就不一一列出了,很简单的,你只要写出下面这些基本上你在开发过程就不会有太多问题了. 注意的是:在相互关联的业务表中,最好能对数据插入进行重复数据判断(用户角色表,模块功能表,角色模块表,尽量避免重复的数据插入)我把大致需要实现的业务列个表给大家参考:
用户表:(Insert ,Update ,IfExist ,Show, Delete)
用户角色表:(Insert ,Update,IfExist,Delete,RoleListByUserID,UserListByRoleID)
角色表:(Insert,Update,IfExist,Show,Delete)
角色模块表:(Insert,IfExist,Delete,Show,RoleListByModuleID,ModulistByRoleID)
模块表:(Insert,Update,IfExist,Show,Dlete,ListByRootModuleID,ListByModuleLevel)
模块功能表:(Insert,Update,Delete,FunctionListByModuleID)
针对用户直接获取其所有的权限时,应该有个单独的Procedure从视图中Member_Role_Module_Function中获取其对应的数据,这样就可以得到想要的东西了。
数据库设计部分应该就这样差不多了。我想这应该是通用的。在实际运用过程中,我个人认为应该有一些改进点:
1.模块与功能部分,可以用字符串的形式将模块对应的功能存在一个数据字段中,这样可能在你的代码编写中可以省下较多的时间并带来更多的便利(主要是可以用split()来代替频繁的数据获取业务)这个我在最初设计中没有想到这点,有点失策.
2.针对N级模块的权限展现问题,如何让父模块继承子模块的权限这个是我没有考虑到的,不过我想应该可以用IsRootModule这个字段来作文章,可惜我还没想到如何去整这个字段。当子模块很多时,在前端UI展示的时候是否会出现很慢的情况?这个我没有去做测试。带有一定的风险
但在前端UI展示我还没想到或实现好的办法,我能想到的应该是像GridViewTree那种不错。
这个权限设计已经在我的Project中运用,暂时没有发现什么问题,而且为我以后对其它系统集成也很有帮助。至于如何在C#中实现业务,个人认为只要知道数据库如何整的,那C#中的业务实现只是一个取数操作过程。下篇与大家再共同分享讨论.
最近在一个项目中设计的一个用户权限的设计,很乐意与大家一起讨论及分享.
设计思路
我的设计思路或者说是我想要实现的功能
1.用户的权限通过角色来控制,一个用户可以拥有多个角色.
2.用户拥有不同角色时,其权限应该是多个角色相互的补集.
3.一个角色拥有多个模块
4.用户的前台菜单显示根据角色所拥有的模块所决定,不同的用户在前端显示的操作菜单是不一样的。
5.页面中的功能按钮根据模块中所包含的功能所定义,通过模块及角色所拥有的权限进行控制
6.可看某个模块有哪些用户,哪些对应角色,并对其进行特殊权限设置.
7.可以针对单个用户进行特殊设置
我在我的Project中,基本上达到了以上的效果及功能,但在实际过程中发现有些不足之处。因为整个权限设计是基于数据库来设计中,所以数据的读取当数据量大时(我所说的数据量是以万以上来计)可能对性能有一定的影响。但对于一般来说,几千用户之类的我想还是可以承受的。我会在后面说明不足之处。
数据库设计
基本设计:
1.首先,设计数据库.
数据库的设计其实我估计大家都很熟悉了
基本表:用户表,角色表,模块表,功能表,管理员表.如果涉及到企业性质的,可能会根据需要加上组织结构表,群组表等其它辅助表
用户
管理员
角色
模块
(我的模块表考虑了子模块的因素,所以会有深度,父模块ID这两个字段,在后来开发过中,由于思路的转变,IsRootModule,FunctionCode我都没有用到,为了让整个权限系统通变得更通用,我都将其单独设计成了另一个表)
功能表(功能表就是模块对应的功能:增加,删除,修改,详细,列表,浏览,导出,导入之类的)
业务表:用户-角色表 模块-功能表 角色-模块表
要实现一个用户多个角色(1 to n),一个角色多个模块(1 to n),一个模块多个功能(1 to n),那就得加上几个相关的业务表,之前考虑用视图去实现,我个人之见,视图最好只用来读取数据,不要用来进行数据操作.后来证明是不可取的,这里要注意的就是在实际的业务操作中,应该尽量避免重复的数据录入. 这些表都很简单,但却很关键
用户-角色:
角色-模块:
模块-功能:
大家可以看到,表结构很简单,字段也很少,设计也差不多。都是将相关联的字段ID取出来做数据存取。
视图:用户-角色-模块-功能视图
可能大家会觉得很奇怪,为什么这里出现member_role呢。因为我们在数据表中只存取了ID值,而对应的RoleName字段并没有包含其中,这里的视图就是获取关联表中其他所需要的字段数据了。另外两个视图大家看名字应该就知道他的用处了。
存储过程:各自表的增加,删除,修改,及列表数据. 判断是否存在相同的数据
(CUDLIS-Create, Update,Delete,IfExist,Show,List)
存储过程我就不一一列出了,很简单的,你只要写出下面这些基本上你在开发过程就不会有太多问题了. 注意的是:在相互关联的业务表中,最好能对数据插入进行重复数据判断(用户角色表,模块功能表,角色模块表,尽量避免重复的数据插入)我把大致需要实现的业务列个表给大家参考:
用户表:(Insert ,Update ,IfExist ,Show, Delete)
用户角色表:(Insert ,Update,IfExist,Delete,RoleListByUserID,UserListByRoleID)
角色表:(Insert,Update,IfExist,Show,Delete)
角色模块表:(Insert,IfExist,Delete,Show,RoleListByModuleID,ModulistByRoleID)
模块表:(Insert,Update,IfExist,Show,Dlete,ListByRootModuleID,ListByModuleLevel)
模块功能表:(Insert,Update,Delete,FunctionListByModuleID)
针对用户直接获取其所有的权限时,应该有个单独的Procedure从视图中Member_Role_Module_Function中获取其对应的数据,这样就可以得到想要的东西了。
数据库设计部分应该就这样差不多了。我想这应该是通用的。在实际运用过程中,我个人认为应该有一些改进点:
1.模块与功能部分,可以用字符串的形式将模块对应的功能存在一个数据字段中,这样可能在你的代码编写中可以省下较多的时间并带来更多的便利(主要是可以用split()来代替频繁的数据获取业务)这个我在最初设计中没有想到这点,有点失策.
2.针对N级模块的权限展现问题,如何让父模块继承子模块的权限这个是我没有考虑到的,不过我想应该可以用IsRootModule这个字段来作文章,可惜我还没想到如何去整这个字段。当子模块很多时,在前端UI展示的时候是否会出现很慢的情况?这个我没有去做测试。带有一定的风险
但在前端UI展示我还没想到或实现好的办法,我能想到的应该是像GridViewTree那种不错。
这个权限设计已经在我的Project中运用,暂时没有发现什么问题,而且为我以后对其它系统集成也很有帮助。至于如何在C#中实现业务,个人认为只要知道数据库如何整的,那C#中的业务实现只是一个取数操作过程。下篇与大家再共同分享讨论.
《秘密》读书心得
作者:admin 日期:2008-12-12
收到书的时候,被那很精致的封面及包装搞得很意外。先前订购也是因为其嚎头吸引--我好像不知什么时候有了读畅销书的习惯。
书还没看完,但实在看不下去了。这可能跟自己还没到达这个高度吧。通篇书中都在一个“秘密“,一个让大家为之疯狂的秘密。我个人感觉就是有点故弄玄虚的感觉,其实通篇的实质就是把一些哲学上的观点通俗化了。因为考研时背多了马克思主义哲学之流的东西(这可能是我感觉现在受益最大的东西吧),书中的秘密就是其中的一些方法论及世界观的解释吧。当然,这只是我个人的感觉,反正我感觉很多是废话的(就是那些名人们所说的话)
我把自己对书中的一些东西,根据个人的理解,总结了一下.大致主要扯到了这些内容:
1.万事皆有定律,任何事情或事物都要按规律办事。
2.万事皆有矛盾。
3. 做事要用计划,做事要有目标,并保持对目标的关注,促使自己不断的去实现它。
4.要有开放的心态去迎接困难,要懂得感恩。
5.从小事做起,要对自己有信心。
说它是心灵鸡汤是合适的,里面的一些句子不错:
1.要改变你的状况,首先必须改变你的想法.
2.你当下的思想正在创造你的未来。你最常想的,或最常把焦点放在上头的,将会在出现你的生命中,成为你的人生.
3.没有什么是有限的,不论是资源或是其他任何事物;有局限的,只会是人的心。
4.笑,是最佳良药。
5.要让某种关系顺利,就把焦点放在对他人的欣赏上,而非抱怨。当你把焦点放在他们的优点上时,你就会发现他们更多的优点。
6.如果你对待自己,并没有像希望别人对待你的那样,那你永远也无法改变事情的状况。
7.专注于金钱的不足,就不可能在人生中带来更多的金钱。
8.爱的感觉,是你所能发出最高的频率。
9.你拥有改变一切的力量,因为选择思想和感受感觉的,就是你自己。
这个秘密法则就是:思想--变成--事物
我觉得这很像IBM的一个广告里所说的:停止空谈,有了目标就要去实现。我们每个人都会在不同阶段不同范围为自己制定不同的计划或目标,预想目标时雄心壮志,激情澎湃,恨不能马上动手就做,可却很难一直坚持下来。把思想变成事物,确实不是一件简单的事儿,付出的代价是你想像不到的。不过,有付出就有收获,就始终相信这句话。
看来,这本书可以用来睡觉前翻翻看,心情郁闷时拿来瞅瞅,还是不错的。我还里需要去读点哲学上的东西,看来,对这方面的东西极度缺乏。
以上只是个人之见,与大家分享。欢迎指正。
ListBox与数据库的绑定操作
作者:admin 日期:2008-12-11
ListBox,DropDownList,checkBox这几个控件的属性跟使用方法几乎一样,在做系统的进修使用的频率也多。我这里主要与大家分享一下如何用listbox绑定数据据,及增加数据库,从列表中移除选择项的几个操作方法。其实用javascript也完全可以实现。我这里是用服务器端控件与数据库绑定操作来实现的。各有各的的优缺点。
由上图可知:左边的ListBox我是通过DropDownList的选择来进行绑定数据的。所以ListBox是跟上面的部门DropDownList绑定的,所以我应该在DropdownList的selectedx_changed事件中写绑定ListBox的代码
int departmentID = Convert.ToInt32(ddlDepartment.SelectedValue); //获取Dropdownlist中的选择项的值并转成整型
BLL.Sys.Member bllMember = new ABC.BLL.Sys.Member(); //初始化一个BLL业务操作层的对象
if (bllMember.CountByDepartment(departmentID) != 0) //如果绑定的数据总数不为0的情况下
{
lstDeptMember.DataSource = bllMember.ListByDepartment(departmentID, 1, bllMember.CountByDepartment(departmentID)); //业务层绑定方法,也就是listBox的数据来源
lstDeptMember.DataValueField = "MemberID"; //绑定ListBox单项的选择值
lstDeptMember.DataTextField = "TrueName";//绑定ListBox单项的文字值
lstDeptMember.DataBind();
}
else
{
lstDeptMember.Items.Clear(); //清除ListBox的所有项目
ListItem item = new ListItem();
item.Text = "暂时无用户";
item.Value = string.Empty;
lstDeptMember.Items.Add(item);
}
加入所选用户
加入所选用户的Button是对右边所选择的值进行一个简单的for循环检测,选中的加到右边的ListBox中
if (lstDeptMember.SelectedIndex != -1) //lstDeptMember.SelectedIndex!=-1判定是否未选择
...
由上图可知:左边的ListBox我是通过DropDownList的选择来进行绑定数据的。所以ListBox是跟上面的部门DropDownList绑定的,所以我应该在DropdownList的selectedx_changed事件中写绑定ListBox的代码
复制内容到剪贴板 程序代码
int departmentID = Convert.ToInt32(ddlDepartment.SelectedValue); //获取Dropdownlist中的选择项的值并转成整型
BLL.Sys.Member bllMember = new ABC.BLL.Sys.Member(); //初始化一个BLL业务操作层的对象
if (bllMember.CountByDepartment(departmentID) != 0) //如果绑定的数据总数不为0的情况下
{
lstDeptMember.DataSource = bllMember.ListByDepartment(departmentID, 1, bllMember.CountByDepartment(departmentID)); //业务层绑定方法,也就是listBox的数据来源
lstDeptMember.DataValueField = "MemberID"; //绑定ListBox单项的选择值
lstDeptMember.DataTextField = "TrueName";//绑定ListBox单项的文字值
lstDeptMember.DataBind();
}
else
{
lstDeptMember.Items.Clear(); //清除ListBox的所有项目
ListItem item = new ListItem();
item.Text = "暂时无用户";
item.Value = string.Empty;
lstDeptMember.Items.Add(item);
}
加入所选用户
加入所选用户的Button是对右边所选择的值进行一个简单的for循环检测,选中的加到右边的ListBox中
复制内容到剪贴板 程序代码
if (lstDeptMember.SelectedIndex != -1) //lstDeptMember.SelectedIndex!=-1判定是否未选择
...
Web技术电子期刊2008年第12期(总第28期)
作者:admin 日期:2008-12-09
ABC作业成本数据平台项目
作者:admin 日期:2008-12-09
ProjectName: ABC
Member:三位专职开发兼测试,外加相关使用人员互补测试
Requirement:需求就比较麻烦了,因为涉及公司机密,就不一一描述。总之,这是一个具有BKK特色的ABC作业成本分析平台.
开发环境:Vs2008Team + SQL2000
系统设计工具:starUML
系统文档生成工具:MS SandCastle
相关文档:有兴趣的不妨搜索一下以下文章
系统管理员的Usercase:
设计思路:
因为不同部门不同人员所看到的模块及功能不一样,所以这里就要考虑到比较复杂的一个权限操作。至于其它的基本模块,由于还没涉及到复杂的报表操作,只是简单的增删除改操作。每个模块的功能主要是增加,删除,修改,导入,导出,查询,详细,这些通用的基础功能。当然还包括各字段各表单的相互关联,比如产品,部门与各个模块间的关联。为了以后的整合方便,我们采用了接口设计来为以后的功能扩展作好基础.而基于整个系统的架构,我们还是采用通用的petshop模式。在用户界面方面,使用了VS.Net自带的Ajax控件,尽量避免页面不断刷新。在输入数据方面也用了比较多的小功能,方便基层的录入员操作。系统整个UI设计是通过ASP.NET的theme去控制的。当然,除了两个登录界面.作UI还是要花一点功夫的。同时还要考虑不同浏览器不同显示器不兼容的情况。
系统架构:
登录界面:
[译]连接池和 "Timeout expired"异常
作者:admin 日期:2008-11-27
原文标题:Connection Pooling and the "Timeout expired" exception FAQ
来源:http://blogs.msdn.com/angelsb/archive/2004/08/25/220333.aspx
作者:angelsb
System.InvalidOperationException: Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool. This may have occurred because all pooled connections were in use and max pool size was reached.
Timeout expired 异常是个很棘手的异常,想必几乎每个人都碰到过。有时可真是对它咬牙切齿,拿它没办法。 angelsb这篇文章很好,希望对大家有用。我也是看到他讲得很好,才翻译过来的,水平有限,请多多指教.
System.InvalidOperationException: Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool. This may have occurred because all pooled connections were in use and max pool size was reached.
哎!在另一个进程中,又出现了连接池已满的问题,这是个最让人头痛却又是最常出现的连接池问题之一.原因是在开发过程中很少碰到这个头痛的问题,但在部署APP到客户端时,却总是不经意地跑出来了.我想,我应该花些许时间对这个问题进行一次完整的总结吧.
发生的本质是什么?
我们来认真看一下可能会发生这种异常的两种情况
1) 你使用了超过最大的连接池连接数(默认的最大连接数是100)
在大部分应用程序中,这种情况是很少出现的. 毕竟当你使用连接池时,100个并行连接是一个非常大的数字.根据我的经验,会造成这种异常的原因的最大可能,应该是在一个纯种下打开了100个连接.
SqlConnection[] connectionArray = new SqlConnection[101];
for (int i = 0; i <= 100; i++)
{
connectionArray = new SqlConnection("Server=.\\SQLEXPRESS ;Integrated security=sspi;connection timeout=5");
connectionArray[i].Open();
}
解决方案:如果你确定你将会使用超过100个并行连接(在同一连接字符串上),你可以增加最大连接数.
2) 连接泄漏
我个人认为的连接泄漏定义是你打开了一个连接但你没有在你的代码中执行close()或dispose().这范围不仅仅是你忘记了在connection后连接后使用dispose()或close()对期进行关闭,还包括一些你已经在相关connection后写好了close()却根本没有起作用的情況.我们来看看下面的代码:
using System;
using System.Data;
using System.Data.SqlClient;
public class Repro
{
public static int Main(string[] args)
{
Repro repro = new Repro();
for (int i = 0; i <= 5000; i++)
{
try{ Console.Write(i+" "); repro.LeakConnections(); }
catch (SqlException){}
}
return 1;
}
public void LeakConnections()
{
SqlConnection sqlconnection1 = new SqlConnection("Server=.\\SQLEXPRESS ;Integrated security=sspi;connection timeout=5");
sqlconnection1.Open();
SqlCommand sqlcommand1 = sqlconnection1.CreateCommand();
sql...[/i]
来源:http://blogs.msdn.com/angelsb/archive/2004/08/25/220333.aspx
作者:angelsb
System.InvalidOperationException: Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool. This may have occurred because all pooled connections were in use and max pool size was reached.
Timeout expired 异常是个很棘手的异常,想必几乎每个人都碰到过。有时可真是对它咬牙切齿,拿它没办法。 angelsb这篇文章很好,希望对大家有用。我也是看到他讲得很好,才翻译过来的,水平有限,请多多指教.
System.InvalidOperationException: Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool. This may have occurred because all pooled connections were in use and max pool size was reached.
哎!在另一个进程中,又出现了连接池已满的问题,这是个最让人头痛却又是最常出现的连接池问题之一.原因是在开发过程中很少碰到这个头痛的问题,但在部署APP到客户端时,却总是不经意地跑出来了.我想,我应该花些许时间对这个问题进行一次完整的总结吧.
发生的本质是什么?
我们来认真看一下可能会发生这种异常的两种情况
1) 你使用了超过最大的连接池连接数(默认的最大连接数是100)
在大部分应用程序中,这种情况是很少出现的. 毕竟当你使用连接池时,100个并行连接是一个非常大的数字.根据我的经验,会造成这种异常的原因的最大可能,应该是在一个纯种下打开了100个连接.
复制内容到剪贴板 程序代码
SqlConnection[] connectionArray = new SqlConnection[101];
for (int i = 0; i <= 100; i++)
{
connectionArray = new SqlConnection("Server=.\\SQLEXPRESS ;Integrated security=sspi;connection timeout=5");
connectionArray[i].Open();
}
解决方案:如果你确定你将会使用超过100个并行连接(在同一连接字符串上),你可以增加最大连接数.
2) 连接泄漏
我个人认为的连接泄漏定义是你打开了一个连接但你没有在你的代码中执行close()或dispose().这范围不仅仅是你忘记了在connection后连接后使用dispose()或close()对期进行关闭,还包括一些你已经在相关connection后写好了close()却根本没有起作用的情況.我们来看看下面的代码:
复制内容到剪贴板 程序代码
using System;
using System.Data;
using System.Data.SqlClient;
public class Repro
{
public static int Main(string[] args)
{
Repro repro = new Repro();
for (int i = 0; i <= 5000; i++)
{
try{ Console.Write(i+" "); repro.LeakConnections(); }
catch (SqlException){}
}
return 1;
}
public void LeakConnections()
{
SqlConnection sqlconnection1 = new SqlConnection("Server=.\\SQLEXPRESS ;Integrated security=sspi;connection timeout=5");
sqlconnection1.Open();
SqlCommand sqlcommand1 = sqlconnection1.CreateCommand();
sql...
the page contains markup that is not valid 解决办法
作者:admin 日期:2008-11-13
问题描述:
the page contains markup that is not valid when attached to a master page 当使用了样式跟皮肤的时候,打开.aspx页,就会出现这个东西了。不知是不是Bug
这是MSDN的反馈:
http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=314745
我的解决办法很奇怪:
打开Source视图:
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
<uc1:Add ID="Add1" runat="server" />
</asp:Content>
在这里随便打一个回车再返回到view视图就可以了~~~
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
<uc1:Add ID="Add1" runat="server" />
</asp:Content>
//注意区别:我上面多了两个空行
我查了一下国外的资料,还有一种方法是:
将aspx或master里面的
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
换成
<!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">
这种方法没有试过,大家可以试一下。
小记一下。但愿能给您带来帮助.
公司的一个自助平台项目
作者:admin 日期:2008-11-11
一个门户项目的总结
作者:admin 日期:2008-11-11
很出意外,因为是老顾客,没有去顾及到很多潜在的不稳定因素。项目在最后的时候居然出现了我们不想看到的问题。现在金融危机,客户可能确实受此影响~~~ 暂且抛开那些让人不开心不快乐的东西,还是总结一下这个项目的体会吧。
项目整体架构: 很基本很标准的三层架构,也就没有什么新意了。
页面设计:DIV+XHTML
开发平台:Asp.Net+C#+SQL2000
开发工具:VS2008+ Ms SQL+EditPlus
其它工具:
project2003 用来画WBS
StarUML 作UML图,项目架构设计,类设计
PowerDesign 数据库设计
visio 画项目中流程图,页面框架
因为现在很多服务器不支持Net Framework3.5或3.0,所以只能用VS2008来做VS2005的东西,很多Vs2008的新特性也就没有应用了。
功能需求:
功能需求
1,本程序主要功能包括:企业会员、商贸机会、产品展示、求职招聘、行业信息、商贸助手、全方位搜索;
2,强大的程序后台功能,包括网站基本信息、系统权限设置...企业管理,商机管理等等一应俱全;
3,产品及商机留言和查看功能;
4,强大的企业会员后台管理功能,能对企业自己发布的信息进行全面整体管理;
5,企业会员分为三个级别(试用会员、普通会员、VIP会员);
6,企业会员注册时可选择是否试用或直接注册VIP会员;
7,可设置普通或VIP收费及收费标准;
8,可设置企业会员是否注册开通;
9,可设置收费会员要求交费日期,超过此日期则提示会员服务到期;
10,可设置企业注册是否发送欢迎邮件;
11,可设置试用企业会员试用时间;
12,可设置直接申请VIP赠送天数;
13,企业会员注册登录全程提示功能;
14,总后台可对任意会员进行详细资料修改;
15,总后台可对任意会员进行会员类型修改;
16,会员到期续签功能;
17,后台企业密码恢复功能;
18,在线广告管理,支持广告位置、尺寸、价格设定,租售情况等查看
19,在线友情连接功能,支持在线申请及后台审核功能,支持图片、文字连接
项目总结:
1。每次商谈的结果都应该有项目会议记录,必须有实在的说明记录。我很在意这个东西,所以我每次以客户沟通的时候都会将重点记录下来。
2.尽量控制项目的进度,与客户方或需求方不断交流沟通,在项目开发过程中要让客户参与其中,可以较早地发现项目中需求的诉求差异,这点我觉得在此项目中做得很好,至少我们会不断征求客户方的意见。
3.定期汇报项目进度,让客户方心里有个底。我们这个也做到了,在每个周一或周期五都会定期跟客户方负责人进行项目汇报,虽则是远程汇报一个在南一个在北,但还是能让客户大致知晓项目的进度.
4.向客户方提供一些良好的建议,很可惜,我们一直在做这样的工作,希望能让项目能做得入流一点,并提供一些良好的例子给客户方,但客户方大多数没有听取我们的建议,我个人认为,这网站虽则在功能上也其它同类型的网站不相上下,但在栏目的设置上显得小气,不适合一个门户的设置。
5.做大项目要签合同,不能有丝毫的马虎.诚信很重要.双方都以此为基础展开合作,但有冲突的时候,诚信不能当饭吃。一方尽力做到自己的承诺,另一方因其它因素受滞于项目,这个时候就很为难了。你说讲交情还是不讲交情呢?讲情义,又如何结项呢?也许个人水平原因,这点做得不好。
6.要做计划,要控制项目的进度. 这个就不用我废话了。用一些项目管理工具来做就可以的吧。关键还是要看人去执行。
7.做得不好的是,没有做一模块与用户确认一块,看来我还是要下点功夫去学学敏捷开发模式吧
现在越多越多的人选择了在家里做soho,也越来越多的公司将项目外包.大项目个人认为还是需要面对面的沟通很重要,很多东西还是要有一定的流程,一定的规范才行。
一些截图:
页面截图:
visio的框架图:
wbs:
欢迎大家多多指教,共同进步。
项目整体架构: 很基本很标准的三层架构,也就没有什么新意了。
页面设计:DIV+XHTML
开发平台:Asp.Net+C#+SQL2000
开发工具:VS2008+ Ms SQL+EditPlus
其它工具:
project2003 用来画WBS
StarUML 作UML图,项目架构设计,类设计
PowerDesign 数据库设计
visio 画项目中流程图,页面框架
因为现在很多服务器不支持Net Framework3.5或3.0,所以只能用VS2008来做VS2005的东西,很多Vs2008的新特性也就没有应用了。
功能需求:
功能需求
1,本程序主要功能包括:企业会员、商贸机会、产品展示、求职招聘、行业信息、商贸助手、全方位搜索;
2,强大的程序后台功能,包括网站基本信息、系统权限设置...企业管理,商机管理等等一应俱全;
3,产品及商机留言和查看功能;
4,强大的企业会员后台管理功能,能对企业自己发布的信息进行全面整体管理;
5,企业会员分为三个级别(试用会员、普通会员、VIP会员);
6,企业会员注册时可选择是否试用或直接注册VIP会员;
7,可设置普通或VIP收费及收费标准;
8,可设置企业会员是否注册开通;
9,可设置收费会员要求交费日期,超过此日期则提示会员服务到期;
10,可设置企业注册是否发送欢迎邮件;
11,可设置试用企业会员试用时间;
12,可设置直接申请VIP赠送天数;
13,企业会员注册登录全程提示功能;
14,总后台可对任意会员进行详细资料修改;
15,总后台可对任意会员进行会员类型修改;
16,会员到期续签功能;
17,后台企业密码恢复功能;
18,在线广告管理,支持广告位置、尺寸、价格设定,租售情况等查看
19,在线友情连接功能,支持在线申请及后台审核功能,支持图片、文字连接
项目总结:
1。每次商谈的结果都应该有项目会议记录,必须有实在的说明记录。我很在意这个东西,所以我每次以客户沟通的时候都会将重点记录下来。
2.尽量控制项目的进度,与客户方或需求方不断交流沟通,在项目开发过程中要让客户参与其中,可以较早地发现项目中需求的诉求差异,这点我觉得在此项目中做得很好,至少我们会不断征求客户方的意见。
3.定期汇报项目进度,让客户方心里有个底。我们这个也做到了,在每个周一或周期五都会定期跟客户方负责人进行项目汇报,虽则是远程汇报一个在南一个在北,但还是能让客户大致知晓项目的进度.
4.向客户方提供一些良好的建议,很可惜,我们一直在做这样的工作,希望能让项目能做得入流一点,并提供一些良好的例子给客户方,但客户方大多数没有听取我们的建议,我个人认为,这网站虽则在功能上也其它同类型的网站不相上下,但在栏目的设置上显得小气,不适合一个门户的设置。
5.做大项目要签合同,不能有丝毫的马虎.诚信很重要.双方都以此为基础展开合作,但有冲突的时候,诚信不能当饭吃。一方尽力做到自己的承诺,另一方因其它因素受滞于项目,这个时候就很为难了。你说讲交情还是不讲交情呢?讲情义,又如何结项呢?也许个人水平原因,这点做得不好。
6.要做计划,要控制项目的进度. 这个就不用我废话了。用一些项目管理工具来做就可以的吧。关键还是要看人去执行。
7.做得不好的是,没有做一模块与用户确认一块,看来我还是要下点功夫去学学敏捷开发模式吧
现在越多越多的人选择了在家里做soho,也越来越多的公司将项目外包.大项目个人认为还是需要面对面的沟通很重要,很多东西还是要有一定的流程,一定的规范才行。
一些截图:
页面截图:
visio的框架图:
wbs:
欢迎大家多多指教,共同进步。
Web技术电子期刊2008年第10 11期(总第27期)
作者:admin 日期:2008-11-07
久违的感动--《山楂树之恋》有感
作者:admin 日期:2008-11-01
作 者: 艾米 著
出 版 社: 江苏文艺出版社
对有关爱情的小说,我已很长很长时间不去关注,不去寻找。因为对于爱情两字,似乎已经麻木,或有种可望不可及的感觉. 二年前,当我离开深圳不长时间在MSN上看见一位朋友的签名:时间会冲淡一切那一刻起,我总会故意或刻意让自己不再去想起那一段看似单纯恋爱经历或不再去想起某某人。二年后的今天,时间还是最好佐证.
去哪里寻找静秋和老三这样纯净的爱情呢?越来越现实的人们,越来越浮躁的社会。会存在这样的爱情吗??
泛性时代爱情唾手可得,但它很可能将爱简约成性,感官很可能替换了感情-马策
每个人的初恋都是刻骨铭心的,恋爱使人成长,恋爱也会带给人难以磨灭的人生印记。可人们往往都把初恋埋藏在心底的最深处,很少很少向人述说。我不太关注有多少男人能做到老三那样(我想还是很多的),也不想去深讨静秋是不是一个纯洁般的美女之类的。 初恋,往往就是书中所述的这般经历,这般感觉吧。在这个有点不把性当回事性药满天飞的年代,我们能得到这样的经历已经实属不易了。
如果真的爱一个人,那不是空虚般的口号,而应该是实实在在的做事。对于男的而言,应该是一种对对方的责任,让她能过得更好,过得更快乐。实在做不到的话,那就应该选择放手,让对方能找到让她更幸福的伴侣.
不是每个人都会把自己为她做的事情时常挂在嘴边,不是每个人的体贴都会让她能感受到他的用心良苦。有些时候双方的理解不一致往往会带来的结果是惨重的。每个人在恋爱中都会犯错,可每个人的结果都会不一样。能做到有些时候想起来确实残酷,所以现实中能做到的人,也就少之又少了。细微出真知,做事是一样,爱一个人更应该这样。
恋爱中对一个人的承诺很简单,可要真正去实现承诺,那需要极大的付出和极强的包容性。
文字朴素,感情挚真。感谢此书,让我找回一种很久以来曾有过的感动,也让我又想起了那段深藏心底深处的感情,当然,也给我带来的伤感。面对家人的焦虑,面对着朋友同事这么热情的为我婚烟考虑的时候,我总以“事业未立,何以成家”来搪塞,现在是不是也应该放开心怀,去寻找真正属于我的那一半呢?呵呵,现实的人们都说在追求简单的平凡的生活,可大家却往往忘记了最简单的生活也需要最极大的付出啊.
《浮沉》读后感
作者:admin 日期:2008-10-24
放下手中厚厚的专业编程书,花了几个夜晚的时间来看这本号称是最激励人心的职场生存小说,看完的感觉就像是流水账,不像书中所吹呼的那么NB,充其量也就是一本讲述一个未完成的大单的故事。当然,这只是我个人的感觉,别人的感觉可能不一样吧。
总体感觉,上当受骗了。
我不否认乔莉在这单生意中的不断成长,但看不出她有什么质的变化,很多时候往往是由别人替他来做决定的,想要作为一个真正的业务牛人,应该像是何乘风这种类型的。运筹帷幄于账中而决胜千里之外。至于乔莉的老大陆帆,也没有看出有很出众的地方。至于其它货色,简直就是垃圾了.
生意场上,大家都是棋子。说得好听点就是斗志斗谋,说点直接点就是相互利用。谁能把谁利用好,谁就能掌握主动。当然,机遇也是很重要的。我们常常听别人说,机遇是要靠自己去创造的,我对此持保留意见,不见得你努力就会有机遇的。我的第一任老板跟我说过的一句话我至今难忘:做生意就是投机,你不懂得投机,你就会打败仗。几年工作下来,不得不佩服他的精辟总结。很遗憾,我不懂得投机,或者说道不够深。因此,我想,成不了投机致富的富翁,还是踏实点好。
在我的工作经历中,外资公司应该是比较正规的吧。也可能是我的级别太低,没有爬到过人家这样高的位置,所以很多事情还没体会到。
对生活要淡定,要淡定.... ....
海南.三亚.海口
作者:admin 日期:2008-10-18
三亚是小两口子去的好地方,天涯海角人太多了,大家就是去看三块石头(天涯 海角 南天一柱)......积支洲岛是个度蜜月的绝佳地方,新婚的小两口去这个地方是非常非常非常不错的,就是岛上的消费太高太高太高了。
面对大海,确实有一种心胸开阔 豁然开朗的感觉。最让我难忘的是一群40 50来岁的阿姨站在大海的石头边,面对着大海高喊:大海!我来了!!那景象,确实可爱。最好的收获就是认识了青春不老的花阿姨--美丽,活泼,开心果,对后辈的关心,对生活的乐观,让我这个比她小几辈的后生小子,不得不甘拜下风。
我在海滩上把自己的脚印也拍下来了,但愿以后的人生能一步一步,脚踏实地,勇往直前.
面对大海,确实有一种心胸开阔 豁然开朗的感觉。最让我难忘的是一群40 50来岁的阿姨站在大海的石头边,面对着大海高喊:大海!我来了!!那景象,确实可爱。最好的收获就是认识了青春不老的花阿姨--美丽,活泼,开心果,对后辈的关心,对生活的乐观,让我这个比她小几辈的后生小子,不得不甘拜下风。
我在海滩上把自己的脚印也拍下来了,但愿以后的人生能一步一步,脚踏实地,勇往直前.
[译]使用ASP.NET2.0生成Excel报表
作者:admin 日期:2008-10-13
文章来源:
http://www.beansoftware.com/asp.net-tutorials/generating-excel-reports.aspx
文章作者:Sushmita Kumari
这是一篇很老的文章了,很长时间没有翻译文章,拿来练一练. 同时把作者的VB版,改成了C#版
源文件:
点击下载此文件
Excel几乎是所有公司都要用来分析数据的一个超级工具,然而十年后的互联网已不可日而语,几乎所有的呈现的数据都是动态生成的,也就是说通过一个数据库里的数据交互产生所要的数据结果.有时,我们可能需在一个Excel的文件中,通过使用Excel的某些特性让分析的数据更好的适应我们的需要并呈现出来.在这篇文章中,我们可以学习到如何与Excel文件中的数据进行包括读写的交互操作.
相关源文件下载:
点击下载此文件
相关的文件:为了更好的演示本文章,我们先找到了一个一个包含学生分数数据的一个Excel文件.里面的数据都是随机的.
Excel - ASP.NET Scenarios
让我们新建一个接口从Excel文件中获取数据.如图
注意引入以下组件及命名空间:
VB Code
Protected Sub btnSearch_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnSearch.Click
Try
Dim strExcelConn As String = System.Configuration.ConfigurationManager.ConnectionStrings.Item("ExcelConnection").ToString()
Dim dbConn As New OleDbConnection(strExcelConn)
Dim strSQL As String
strSQL = "Select * FROM [" & cmbSheets.SelectedItem.ToString() & "$]"
dbConn.Open()
Dim cmd As New OleDbCommand(strSQL, dbConn)
Dim dsExcel As New DataSet
Dim daExcel As New OleDbDataAdapter(cmd)
daExcel.Fill(dsExcel)
dgResults.DataSource = dsExcel
dgResults.DataBind()
Catch ex As Exception
Throw ex
End Try
End Sub
C# Code
protected void btnSearch_Click(object sender, System.EventArgs e)
{
try {
string strExcelConn = System.Configuration.ConfigurationManager.ConnectionStrings.Item("ExcelConnection").ToString();
OleDbConnection dbConn = new OleDbConnection(strExcelConn);
string strSQL;
...
http://www.beansoftware.com/asp.net-tutorials/generating-excel-reports.aspx
文章作者:Sushmita Kumari
这是一篇很老的文章了,很长时间没有翻译文章,拿来练一练. 同时把作者的VB版,改成了C#版
源文件:
点击下载此文件
Excel几乎是所有公司都要用来分析数据的一个超级工具,然而十年后的互联网已不可日而语,几乎所有的呈现的数据都是动态生成的,也就是说通过一个数据库里的数据交互产生所要的数据结果.有时,我们可能需在一个Excel的文件中,通过使用Excel的某些特性让分析的数据更好的适应我们的需要并呈现出来.在这篇文章中,我们可以学习到如何与Excel文件中的数据进行包括读写的交互操作.
相关源文件下载:
点击下载此文件
相关的文件:为了更好的演示本文章,我们先找到了一个一个包含学生分数数据的一个Excel文件.里面的数据都是随机的.
Excel - ASP.NET Scenarios
让我们新建一个接口从Excel文件中获取数据.如图
注意引入以下组件及命名空间:
复制内容到剪贴板 程序代码
Imports System.Data.OleDb
Imports System.Data
Imports System.Data
VB Code
复制内容到剪贴板 程序代码
Protected Sub btnSearch_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnSearch.Click
Try
Dim strExcelConn As String = System.Configuration.ConfigurationManager.ConnectionStrings.Item("ExcelConnection").ToString()
Dim dbConn As New OleDbConnection(strExcelConn)
Dim strSQL As String
strSQL = "Select * FROM [" & cmbSheets.SelectedItem.ToString() & "$]"
dbConn.Open()
Dim cmd As New OleDbCommand(strSQL, dbConn)
Dim dsExcel As New DataSet
Dim daExcel As New OleDbDataAdapter(cmd)
daExcel.Fill(dsExcel)
dgResults.DataSource = dsExcel
dgResults.DataBind()
Catch ex As Exception
Throw ex
End Try
End Sub
C# Code
复制内容到剪贴板 程序代码
protected void btnSearch_Click(object sender, System.EventArgs e)
{
try {
string strExcelConn = System.Configuration.ConfigurationManager.ConnectionStrings.Item("ExcelConnection").ToString();
OleDbConnection dbConn = new OleDbConnection(strExcelConn);
string strSQL;
...
《沉思录》读书笔记
作者:admin 日期:2008-10-08
作 者: 马可•奥勒留 著 何怀宏 译
出 版 社: 中央编译出版社
看到《沉思录》的介绍是在卓越网购买技术方面的书看到的,"温总理天天在读的书"这个嚎头确实把我给吸引过去了,然而买回来的结果却是我从来没很认真地花时间去从头到晚来看。快二个月了我也只是在工作间歇,在早晨起来去上班之前,在睡觉之前偶尔随意翻来覆去的.却总是很不经意地看到一些短句,让我联想到生活中,做人中的种种情形.给我最深的体会书中似乎流露一种"随遇而安"的感觉,万事以和为贵,确实很符合当今有点狂燥的社会。没有过多的点缀或修饰,一句句很朴实无华的语言,却总是给人一种很踏实,很本分的感觉。其实书中所说的那些事儿,那些话儿,都是很常见很实在,有时往往大家都知道应该这样做,可事实却不是这样去做。可想而知,一个人真的要做到“出淤泥而不染,濯清涟而不妖”的境界,是非常非常难的,尤其是在现在这样的社会。
印象很深的几句:
当你做摆在你面前的工作时,你要认真地遵循正确的理性,精力充沛,宁静致远,不分心于任何别的事情,而保持你神圣的部分纯净,仿佛你必定要直接把它归还似的;若你坚持这一点,无所欲望亦无所畏惧,满足于你现在合乎本性的活动,满足于你说出的每个词和音节中的勇敢的真诚,你就能生存得幸福。没有任何人能阻止这一点。
一个人不应当听从所有人的意见,而只是听从那些明白地按照本性生活的人们的意见。
无论什么事情对你发生,都是在整个万古永恒中就为你预备好的,因果的织机在万古永恒中织着你和你相关联的事物的线。
没有任何人能阻止 你按照你自己人的理智本性生活;没有任何违反理智本性的事情对你发生。
如果有一件事是你难于完成的,不要认为它对于人也是不可能的,但如果什么事对于人是可能的,是合乎他的本性的,那么想来这也是你能达到的。
现代生活讲究个性,讲究率真,因为欲望、利益、权力的诱惑往往在过程中强调了自己的角色而忽略了其它人的存在,也许我们往往因此可以得到一时的快乐与享受---因为欲望与权力的诱惑,却有可能在往后的日子发现会失去更多。能让人静下心来去想人生本就是件难事,能让人按本性去生活难就是难上加难了。不过,有的时候,我们确实需要去反思一下自己的人生旅途呀......
推荐大家读此书,却不要刻意花时间去读它。
借此特别感谢小胡同学送的生日礼物,人老了一岁,碰到事情也就有点“疲”了,有点“疲”了,人也就会随遇而安了,这只是我的胡乱感想。
一个首页设计(div+css) 提供下载
作者:admin 日期:2008-10-04
影响企业信息化的几个因素
作者:admin 日期:2008-10-04
从纯粹的软件开发人员转型到制造性企业的IT部门,除了一些日常的开发工作外,更多的职责是放在了辅导IT部门的老大们,把一个个大大小小的软件系统在企业中逐步实施。之前没有在工厂呆过的我,原以为这是一件很容易的事,结果这一年半载下来,才体会到其中的酸甜苦辣。一个企业的信息化之路,表面上在于IT部门的不断推动,其实更多的因素包含其中,往往让项目实施进展艰辛,甚至有半途妖折的命运。有些领域,IT项目在国内的企业实施失败已属正常,如ERP,PLM之列的大型系统实施成功率很难让人满意,也正是因为如此,企业对IT系统有所顾忌,怕影响企业的正常运作等因素。
1.了解企业的文化
一个企业的信息化之路,表面上在于IT部门的不断推动,而真在的核心却在于使用这些系统或软件的关键用户及使用用户,不同的企业有着不同的企业文化,所造就的工作习惯也就有所不同.在小的公司往往可以不去讲究什么企业文化之类的东西,但在一个一两百人甚至上千上万人的企业,在信息化的过程中,企业文化的作用不可小视.企业的办事风格,企业的员工的人格品质,都会或多或少地影响着一个系统或IT项目实施.一个企业的办事习惯,表面上对企业信息化的影响可以忽略,但在实施过程中却往往成为一种不可忽视的阻力。很多时候,实施的系统或项目都因为种种的操作上的不习惯使使用人员对新系统新项目产生厌恶感,给IT人员诉说总总的不便。毕竟,一个人的习惯是很难改变的,放大来看,那一个企业的作事风格,作事习惯就更加难以改变了。有些观念在企业中已经到了根深地步的程序,而要在短时间内让一个企业“洗脑”那几乎是不可能做到的事情,只有顺着别人的路,变着法子地抓机会去改变一些可以改变的东西。有的企业讲究雷厉风行,而有的企业讲究平稳推进,不学会捉摸企业的企业文化,在IT项目实施过程中,碰到钉子也是早晚的事了。
2.领导层的支持力度。领导的执行力
在绝大多数领导的眼中,一个企业的IT部门是企业花钱的部门,是为其他部门服务的部门。同样,一个企业进行信息化,也就是更好的让部门办事效率能得到提高。而在国内的企业信息化过程中,企业信息化往往是与一个企业的流程变更,流程优化密不可分的。当然,有人推崇华为的“先僵化,再固化,再优化”,也许对于一个有着超强执行力的超强企业来说这样做确实可以,但在一般的中小型企业来说,能玩得起这样的方法么?很多时候,企业进行信息化都是为了流程或业务而服务,为了达到改善或优化某个流程或业务而进行。IT信息化的成果,有些收益是无形的、难以界定,或者说是比较模糊的。往往正是因为这种原因,很多企业的领导或中高层管理人员在思想上很难接受“花钱不创造价值”的东西,或者说即使接受了,在财政支出上也往往很难投入足以支持信息化所需要的资金.一个IT项目的实施,如果没有高层领导的强力支持,是很难走得远的。一个企业的信息化工程,往往会涉及到组织结构上的变化,人员的变动等各种因素,不可避免地会对企业中的某些职员或员工的利益产生一定的影响,这里面所隐藏的一些非确定因素总会在IT项目的实施过程中暴露出来。如果没有“镇得住”的人物说话,可以想象在实施过程中所遇到的阻力,而往往受难的也就是实施项目的IT人员了。
3.沟通的重要性
正所谓得人心者得天下,讲究攻心为上,攻城为下.任何一个项目或事情,离开了沟通,一切事情都会变得很难很难。企业信息化过程就是一个循序渐进与人沟通的过程. 企业信息化,全员总动员,关系到企业的发展,关系到任何一位企业人员的“钱途”,要让每个人员都能毫无顾忌地接受新理念,新观念,新思想那几乎是不可能的。对管理人员,要与之沟通企业信息化的重要性。对关键用户,要与之沟通企业信息化的效率。对使用人员,要与之沟通企业信息化的便利性。只有大家都觉得确实认识到了企业上IT系统,IT项目的必要性,迫切性,大家都达成了共识,上起来才会比较顺利。IT人员要与关键用户沟通,要为使用人员做培训,这一切都归于沟通。在项目实施过程中,要不断与相关人员沟通,不断发现问题,不断了解他们的需求,使用感受等,及时给予反馈,把其看作顾客,这样可能让项目实施起来更加顺畅一些。
1.了解企业的文化
一个企业的信息化之路,表面上在于IT部门的不断推动,而真在的核心却在于使用这些系统或软件的关键用户及使用用户,不同的企业有着不同的企业文化,所造就的工作习惯也就有所不同.在小的公司往往可以不去讲究什么企业文化之类的东西,但在一个一两百人甚至上千上万人的企业,在信息化的过程中,企业文化的作用不可小视.企业的办事风格,企业的员工的人格品质,都会或多或少地影响着一个系统或IT项目实施.一个企业的办事习惯,表面上对企业信息化的影响可以忽略,但在实施过程中却往往成为一种不可忽视的阻力。很多时候,实施的系统或项目都因为种种的操作上的不习惯使使用人员对新系统新项目产生厌恶感,给IT人员诉说总总的不便。毕竟,一个人的习惯是很难改变的,放大来看,那一个企业的作事风格,作事习惯就更加难以改变了。有些观念在企业中已经到了根深地步的程序,而要在短时间内让一个企业“洗脑”那几乎是不可能做到的事情,只有顺着别人的路,变着法子地抓机会去改变一些可以改变的东西。有的企业讲究雷厉风行,而有的企业讲究平稳推进,不学会捉摸企业的企业文化,在IT项目实施过程中,碰到钉子也是早晚的事了。
2.领导层的支持力度。领导的执行力
在绝大多数领导的眼中,一个企业的IT部门是企业花钱的部门,是为其他部门服务的部门。同样,一个企业进行信息化,也就是更好的让部门办事效率能得到提高。而在国内的企业信息化过程中,企业信息化往往是与一个企业的流程变更,流程优化密不可分的。当然,有人推崇华为的“先僵化,再固化,再优化”,也许对于一个有着超强执行力的超强企业来说这样做确实可以,但在一般的中小型企业来说,能玩得起这样的方法么?很多时候,企业进行信息化都是为了流程或业务而服务,为了达到改善或优化某个流程或业务而进行。IT信息化的成果,有些收益是无形的、难以界定,或者说是比较模糊的。往往正是因为这种原因,很多企业的领导或中高层管理人员在思想上很难接受“花钱不创造价值”的东西,或者说即使接受了,在财政支出上也往往很难投入足以支持信息化所需要的资金.一个IT项目的实施,如果没有高层领导的强力支持,是很难走得远的。一个企业的信息化工程,往往会涉及到组织结构上的变化,人员的变动等各种因素,不可避免地会对企业中的某些职员或员工的利益产生一定的影响,这里面所隐藏的一些非确定因素总会在IT项目的实施过程中暴露出来。如果没有“镇得住”的人物说话,可以想象在实施过程中所遇到的阻力,而往往受难的也就是实施项目的IT人员了。
3.沟通的重要性
正所谓得人心者得天下,讲究攻心为上,攻城为下.任何一个项目或事情,离开了沟通,一切事情都会变得很难很难。企业信息化过程就是一个循序渐进与人沟通的过程. 企业信息化,全员总动员,关系到企业的发展,关系到任何一位企业人员的“钱途”,要让每个人员都能毫无顾忌地接受新理念,新观念,新思想那几乎是不可能的。对管理人员,要与之沟通企业信息化的重要性。对关键用户,要与之沟通企业信息化的效率。对使用人员,要与之沟通企业信息化的便利性。只有大家都觉得确实认识到了企业上IT系统,IT项目的必要性,迫切性,大家都达成了共识,上起来才会比较顺利。IT人员要与关键用户沟通,要为使用人员做培训,这一切都归于沟通。在项目实施过程中,要不断与相关人员沟通,不断发现问题,不断了解他们的需求,使用感受等,及时给予反馈,把其看作顾客,这样可能让项目实施起来更加顺畅一些。