# Thursday, November 13, 2008

CLR Via C# 2    随着人们对身边事物的不断认知和熟悉,我们逐渐开始需要追溯事情的根源,了解事物的本质。而软件开发人员水平不断提高,则同样会去研究技术表面下的实质,使得自己向一个更高的层面发展。.NET框架已经发展到3.5(SP1)的版本,4.0也正向我们款款走来。很多人感叹微软技术更新的过快,更不上框架和开发工具的版本更新速度。而个人认为,一个好的开发人员不会因为技术更新速度而受到太大影响,因为这些技术的本质没有太大改变,了解本质后学习新技术则是另外一种景象了。我想了解技术本质有两种比较可行的方法:读源代码(IL,汇编代码),读大师们的书。前者对技术人员自身的水平本身要求较高,也就是说需要有一定的底层技术积累才可以。所以对普通的技术人员要学习技术的本质最方便的途径就是读书了。当然了,读书呢,需要读好书,读不好的书不如不读!
    《CLR Via C#(Second Edition)》这本书,个人认为是一部非常不错的书,值得向大家推荐一下。本书的原作者是:Jeffrey Richter,他从1999年就开始为微软.NET Framework团队做顾问,经历了.NET的孕育、诞生和发展,可谓.Net方向最有发言权的顶级技术专家,而他写的书也应该是我们.NET技术方向的开发人员必读的书:D。本书的写作风格可谓出色,语言也通俗易懂,写出的例子也是很精妙,常常一针见血,文中适时的提醒一些读者容易忽略的问题,提点一些重要的技术信息。配合MSDN文档我们可以从本书较好的学习到:

  • 源代码如何转化为中间语言(IL)的,他们是如何存储、管理和执行的
  • 描述运行时可用的代码元数据及其用法
  • 数据的分类、组织和管理
  • 描述类的成员(字段、属性、方法等)
  • 异常处理和垃圾回收的原理
  • 反射
  • 多线程
  • ……

  该书让读者扎实的理解CLR底层概念、巩固技术基础,具备迅速而轻松编写出可靠、安全、高性能的托管代码,真正成为一个.Net高手而非编码工人。

  该书分五个部分共24章,个人推荐已经了解部分.NET底层知识的人,重点阅读第4部分(基本类型)和第5部分(CLR实用特性)。

  本书有中文版本《框架设计(第二版)》是清华大学出版社出版的,译者是:周靖和张杰良。翻译的还不错,但也有一些地方存在一些欠妥的地方,有时候一些原著的内容确实很难将原意用中文翻译好,但这里仍然希望国内的译者们再努力提高一下自身的专业技术水平和专业英文的翻译能力,期待下个版本能翻译的更好。当然了,翻译得虽然有这样那样一些细节的问题,但对普通的.NET方向开发人员来说,阅读中文版本也同样会获得很大帮助的。英文不好的朋友,可以购买翻译版本的读一下:D
Posted on Thursday, November 13, 2008 5:59:01 PM (China Standard Time, UTC+08:00)  #    Comments [0]
# Wednesday, November 12, 2008

    很荣幸在Tech.ED2008北京场的社区技术专场中,本人讲了一场《如何成倍提升企业级Web应用开发效率》的课程。这次讲座是第一次在Tech.ED场合讲座,不过作为非正式课程,我很高兴的看到不少人放弃了正式课程的内容来听社区技术专场的内容。也许是这类课程更贴近大家的工作吧,形式也不拘泥,大家可以面对面地探讨,气氛比较好。不过我的课程时间把握的不是太好,造成了后期给大家讲解的内容有点仓促,不是很细,希望参会的朋友们原谅。讲课过程中,发现听课的人逐渐增多,而且似乎开始就过来听的朋友们都没有中途离场的,这对我是莫大的鼓舞。我将努力在以后的日子给大家带来一些更好的内容,敬请关注哦:D

     在这里为大家提供本次课程的课件Demo文件下载,希望对大家能有所启发和帮助,如果能真正使得大家在企业级WEB应用开发过程中提高了不少效率,将是莫大的欣慰和荣誉。

Posted on Wednesday, November 12, 2008 1:29:00 AM (China Standard Time, UTC+08:00)  #    Comments [0]
# Monday, July 07, 2008

    近期在对一些客户做技术培训的时候,发现了一个问题。一些我们平常天天在用的软件工具,比如:Windows、Office、SQL Server、Visual Studio等等,很多都没有得到用户较充分的使用。很多已经被软件厂商早已攻克的问题,却在用户那里在被重复研究解决方案,原因为什么?因为用户根本不知道原来这个每天都在用的软件工具还有这样或那样的功能,可以解决我们目前所碰到的问题。比如说:

  • Excel就已经可以轻松解决家庭的收支结算问题,有人却偏偏要安装什么管家婆或者形形色色的所谓家庭财务管理软件,甚至还要求你安装个sql server呢。难道你只把excel当作一个普通表格使用吗?
  • 不少人抱怨Word排版很差,对文章分层次时,要手工敲入那些“第一、第二”或者“1)、2)”等,为什么不用编号功能呢?
  • sql server 2005 有个“数据库引擎优化顾问”,可以在一定程度上帮助优化数据库,而对应于sql 2000中也存在“索引优化向导”,而他们都依赖于sql profile,另外数据库有执行计划等一系列分析优化的工具,为什么连这些都没用过就问人索要什么优化工具呢?
  • Windows自身就带有磁盘清理等系统优化工具,为啥你只为了清理一下系统盘的空间,却要安装“超级**”或是“**优化大师”呢?

    上述都只是一些简单的例子,但在相当多用户中存在类似的问题,而在软件开发人员中问题依然不少见。问题出在哪里,用户自身是问题之一,而作为软件提供商来说,是否应该考虑一下自身的问题,是否应该下一下功夫对用户进行培训教育呢?UI是否可以设计的再合理一些,让用户更直接的了解到软件的已有功能呢?

     正如某些分析师说的:“微软的Windows、Word和Excel等产品中功能丰富,但消费者却并不完全了解.其结果就是,消费者耗费大量的时间来解决一些微软产品已经攻克的问题.因此,鲍尔默应该在该领域投入一笔资金,以帮助用户了解微软产品的功能”。个人认为这样这个问题不光是微软应该考虑的问题,IBM、Oracle以及我们国内的金山等软件企业是否也应该思考呢?共享软件作者亦应如此。

Posted on Monday, July 07, 2008 5:22:05 PM (China Standard Time, UTC+08:00)  #    Comments [0]
# Sunday, May 25, 2008
最近给一些技术公司进行asp.net开发方向的培训,培训过程中曾发现一些简单的问题却几乎全军覆没的答错,而其中不乏一些曾在多年使用C#进行过项目开发的技术人员。比如说,我曾经出过一个题让参加培训的人员回答:int a=13/2的结果。技术人员的答案有以下几种情况
Posted on Sunday, May 25, 2008 2:38:00 PM (China Standard Time, UTC+08:00)  #    Comments [0]
# Saturday, March 15, 2008
最近在项目中由于一个特殊的要求,需要使用类似于js的document.getElementsById的css class调用的实现。于是到网上搜索了一下,似乎并没有真正能较好达到目的且效率较理想的。于是乎,自己简单的写了一个,效率还凑合,而且支持多class名称的标签。
Posted on Saturday, March 15, 2008 2:28:00 PM (China Standard Time, UTC+08:00)  #    Comments [0]
# Thursday, January 31, 2008

在C#中有个较为重要,而常被一些人忽视的符号——问号(?)。在这里整理一下它在C#的几种情况:

  1. 可空类型修饰符“T?”:可空类型的基础类型可以是任何非可空值类型或任何具有struct约束的类型参数,但不能是可空类型或引用类型。例如:int?代表是可空的整形,而int??则是无效类型。即可空类型可以表示其基础类型的所有值和一个额外的空值。语法T?是System.Nullable<T>的缩写形式。可空类型具有一个HasValue的bool类型只读属性,当可空类型实例的该属性为true时,则表示该实例是非空实例,包含一个已知值Value;HasValue为false时,访问Value属性将导致System.InvalidOperationException。可空类型T?具有一个类型为T的单个参数的公共构造函数,如new int?(123)将获得一个值为123的int?类型实例。从T?到由T实现的任何接口都存在装箱转换,并且从由T实现的任何接口都存在到T?的拆箱转换。但是任何情况下可空类型都不满足接口约束,即使基础类型实现了该特定接口
  2. 条件运算符“x ? y : z” : “x ? y : z”的意思大部分程序员应该都熟悉,稍微啰嗦一下:) 如果表达式x为true,则计算y;如果x为false,则计算z。省却if{}else{}的简单形式了。
  3. 空合并运算符“??”:该运算符是在泛型出现后,C#词法语法中新增加的标记,同时出现的还有一个“::”(命名空间别名限定符)。形式为“a??b”的空合并表达式要求a为可空类型或引用类型。如果a为非空则表达式“a??b”返回的结果为a;否则返回b。空合并运算符为结合运算符,即操作时从右向左进行组合的。如,“a??b??c”的形式按“a??(bb??cc)”计算。

曾有人说过“细节决定胜负”,我们程序员应该更好的把握编程语言的细节才能更好的保证软件质量。

特此整理存档:D

Posted on Thursday, January 31, 2008 4:31:34 PM (China Standard Time, UTC+08:00)  #    Comments [0]
# Tuesday, November 27, 2007

在一些网站或者软件系统中,由于安全或者程序异常等问题,可能会在SQL Server 2000中造成一个异常问题:在企业管理器中打开数据库发现有一些“坏表”,即无法使用,也无法正常删除。其原因往往是因为在尝试建表的过程中,只向数据库服务器的系统表sysobjects中写入了类型为“U”的记录,却并未真正在数据库中成功创建该表的实体。ok,解决问题有思路了:

假设“坏表”的表名为cmd,那么我们在查询分析器中对当前的数据库写一个sql语句:

delete from sysobjects where [name]='cmd' and xtype='U'

按F5执行,可能会碰到一个错误提示:“未启用对系统目录的特殊更新。系统管理员必须重新配置 SQL Server 以允许这种操作。” 解决这个小小的问题的方法是:打开mssql server 属性---》服务器选项----》启用对系统目录的特殊更新(允许对系统目录进行直接修改)  即可。之后重新在查询分析器中执行刚才的sql语句。

执行成功后。在企业管理器中会发现那个坏表已经不存在了。

[ 注:SQL2005中,由于微软做了重大调整,正常情况下不允许对系统表进行即席更新操作。所以本文提到的问题目前仅适用于SQL2000数据库,敬请注意 ]

Posted on Tuesday, November 27, 2007 11:35:54 PM (China Standard Time, UTC+08:00)  #    Comments [0]
# Friday, October 19, 2007

youku0.3     近日党的十七大召开,而我没有电视看,就喜欢到优酷网上看看别人上传的相关视频,部分视频希望能在机器上有所保留,但优酷自己并不提供文件的下载功能。找了个维棠FLV视频下载软件,却发现它无法完整下载较长的优酷视频,我稍作了原因分析后,发现是优酷的一些较长的视频是采用多文件连播的方式,也就是一个视频由多个文件共同组成,于是乎自己花了一大袋烟的工夫用c#写了这个小工具,直接将视频所在的网页地址复制到该软件的指定位置,然后点击“Go!”按钮就开始下载了,哈哈……
    鉴于支持和促进和谐社会发展,俺也把这个自写小工具共享出来给朋友们使用。由于时间仓促,有一些不完善的地方敬请原谅,抽空俺也会继续更新这个小工具的:D

声明:本软件仅因个人爱好而开发,跟优酷网无任何关系:)

名     称:优荡
当前版本:0.5
环     境:Windows ,Microsoft .NET Framework 2.0
作     者:衣明志(网名:qihangnet)
最近更新:
             2007年10月19日(0.5.0.0版):
                          代码进行进一步优化
                          加快了视频分析速度
                          显示视频文件总大小
                          显示当前已下载文件文件大小
                          显示下载总进度的进度条
                          添加了单视频的多文件自动合并功能(一些视频优酷使用多文件存储的,本软件下载后将同一视频的多文件进行的无缝合并,并随后删除原始文件)
                          修复了多项小Bug
             2007年10月17日(0.3.0.1版):
                          修复了2个界面上的小bug
下载地址:http://www.qihangnet.com/content/binary/YouDown.exe

Posted on Friday, October 19, 2007 1:52:30 AM (China Standard Time, UTC+08:00)  #    Comments [3]
# Tuesday, October 09, 2007

Micorosoft Visual Web Developer 2005 Express Edition:立即构建网站    时代在进步,社会在发展,IT技术则以更快的速度成长着。IT人需要不断的学习才能使得自己处于不败之地,而想踏入这个行业的学生和IT技术爱好者们更希望以最快的速度踏上这趟“动车”,占据有利位置。而在SaaS(Software-as-a-service 软件即服务)甚至S+S(Software + service 软件加服务)概念被不断被赋予新意的今天,Web技术变成了超热门。从微软的.Net诞生那天开始,asp.net技术就以它超群的表现冲击着web领域,尤其是asp.net 2.0。那么对一个asp.net2.0的新手而言,一个可以带领自己快速入门的工具是必要的,而Visual Web Developer 2005 Express Edition就是这工具!
    记得在2005年的微软Tech.Ed大会上,我在王洪超主持的“微软技术聊斋”会议中,提出了加大对高校学生及编程爱好者市场的力度方面的建议后获得“最佳建议奖”时,心里暗暗替学生们和编程爱好者们高兴。学生本来就是个高消费群体,那里买得起价格昂贵的商业版VS套件,更何况很多学生的电脑配置并不是很高的,运行那些高级版本的开发环境,未必会有真正好的体验,即使运行良好,作为新手看着庞大的界面和超大量的功能会有找不到北的感觉,失去学习的积极性。再者,若我们平常做的都是一些小型的开发,用庞大的商业版VS套件,总有一种炮打蚊子的感觉。微软推出2005版的Express Edition系列工具后,这些问题全都解决了:免费、小巧、功能完整——这正是我们需要的!Visual Web Developer 2005 Express Edition是微软Visual Studio 2005套件的一个功能完整的子集开发软件。它是为初学者、编程爱好者和学生量身定制的新型开发环境,内置完备的开发套件,可以帮助您快速上手Web应用开发;通过所见即所得的拖拽界面就可以创建出美观、易用的网站;内置60余种控件、上百段代码片断,可以帮助您大幅度降低创建互动式Web应用的时间;支持页面模板,从而使您可以统一的管理网页的排版与布局;通过IntelliSense,可以更快的访问资源库和方法;只需一下点击,就可以通过Common Tasks 和 Smart Tags 调用最常用的Web开发功能。它可伴跟随用户共同成长,随着用户对开发需求的不断增加,只需要在Visual Studio产品线中升级到更高一级产品即可。
    《Microsoft Visual Web Developer 2005 Express Edition:立即构建网站》是微软送给asp.net技术爱好者的又一惊喜,它几乎告诉了你Microsoft Visual Web Developer 2005 Express Edition的全部功能和asp.net 2.0技术的全部特性,让你在鼠标拖拽和键盘敲击中享受web开发的乐趣。这本书是由美国的Jim Buyens编著,微软出版社出版,在中国又由上海世界图书出版公司重印发行的不错的工具类图书。该书继承了微软出版社图书的优良传统,思路清晰,言语简洁到位,配图准确清晰,并非常详细了罗列了一些重要功能的优缺点、注意事项和提示信息,是我个人非常喜欢的风格。
    全书分为16章,每章基本都有2-5个主要的小节组成。从工具的简介、安装、用户界面的熟悉到创建网站站点,从拖拽现成控件、编写代码到创建用户控件、网页模板、皮肤,从界面表现到数据处理,都在关键点上有清晰的陈述。读者可以从第一章开始一步步走进asp.net技术的殿堂,也可以直接阅读自己喜欢的章节,学习某方面的web技术技能,不断提高自己的web技术能力。推荐初学者、编程爱好者和学生阅读该书学习。
    正所谓“师傅领进门,修行在个人”,书籍是良师益友,但起决定作用的往往在于自己。阅读什么书都应该保持良好的心态,多实践多思考。Web技术博大精深,但基础表现的也由为重要,所以建议新手们在想进一步发展自己之前,学好html、css、js等基础技术,而借助于Microsoft Visual Web Developer 2005 Express Edition会增快您学习web基础内容的进度。正如书名上写的“Build a Web Site”立即构建网站吧!

Posted on Tuesday, October 09, 2007 8:18:45 AM (China Standard Time, UTC+08:00)  #    Comments [0]
# Wednesday, June 13, 2007
asp.net 2.0中引入的Membership机制给我们做web开发带来很多便利,使得我们在做很多项目开发时处理用户和角色及权限问题时减少了相当的工作量。不过我们开发中可能会碰到一个小小的问题
Posted on Wednesday, June 13, 2007 2:41:02 PM (China Standard Time, UTC+08:00)  #    Comments [0]