posts - 134, comments - 28, trackbacks - 41, articles - 2
  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理

2008年1月2日

刚刚走上社会的年轻人,充满了蓄势待发的豪情、青春的朝气、前卫的思想,梦想着丰富的待遇和轰轰烈烈的事业。可是,社会毕竟是一所包罗万象、喧嚣复杂的大学校,这里没有寒暑假,拒绝虚假和肤浅,更拒绝空想和庸碌,难以预告何时开课何时放学。

  如何在涉世之初少走弯路,有一个好的开端,开始一番成功的事业?以下是一些先行者积累的10条有益的涉世忠告。好好地遵循、把握这些忠告和建议吧,比起所学的课堂课程来,它毫不逊色!

1. 买个闹钟,以便按时叫醒你。贪睡和不守时,都将成为你工作和事业上的绊脚石,任何时候都一样。不仅要学会准时,更要学会提前。就如你坐车去某地,沿途的风景很美,你忍不住下车看一看,后来虽然你还是赶到了某地,却不是准时到达。“闹钟”只是一种简单的标志和提示,真正灵活、实用的时间,掌握在每个人的心中。

2. 如果你不喜欢现在的工作,要么辞职不干,要么就闭嘴不言。初出茅庐,往往眼高手低,心高气傲,大事做不了,小事不愿做。不要养成挑三拣四的习惯。不要雨天烦打伞,不带伞又怕淋雨,处处表现出不满的情绪。记住,不做则已,要做就要做好。

3. 每个人都有孤独的时候。要学会忍受孤独,这样才会成熟起来。年轻人嘻嘻哈哈、打打闹闹惯了,到了一个陌生的环境,面对形形色色的人和事,一下子不知所措起来,有时连一个可以倾心说话的地方也没有。这时,千万别浮躁,学会静心,学会忍受孤独。在孤独中思考,在思考中成熟,在成熟中升华。不要因为寂寞而乱了方寸,而去做无聊无益的事情,白白浪费了宝贵的时间。

4. 走运时要做好倒霉的准备。有一天,一只狐狸走到一个葡萄园外,看见里面水灵灵的葡萄垂涎欲滴。可是外面有栅栏挡着,无法进去。于是它一狠心绝食三日,减肥之后,终于钻进葡萄园内饱餐一顿。当它心满意足地想离开葡萄园时,发觉自己吃得太饱,怎么也钻不出栅栏了。相信任何人都不愿做这样的狐狸。退路同样重要。饱带干粮,晴带雨伞,点滴积累,水到渠成。有的东西今天似乎一文不值,但有朝一日也许就会身价百倍。

5. 不要像玻璃那样脆弱。有的人眼睛总盯着自己,所以长不高看不远;总是喜欢怨天尤人,也使别人无比厌烦。没有苦中苦,哪来甜中甜?不要像玻璃那样脆弱,而应像水晶一样透明,太阳一样辉煌,腊梅一样坚强。既然睁开眼睛享受风的清凉,就不要埋怨风中细小的沙粒。

6. 管住自己的嘴巴。不要谈论自己,更不要议论别人。谈论自己往往会自大虚伪,在名不副实中失去自己。议论别人往往陷入鸡毛蒜皮的是非口舌中纠缠不清。每天下班后和你的那些同事朋友喝酒聊天可不是件好事,因为,这中间往往会把议论同事、朋友当做话题。背后议论人总是不好的,尤其是议论别人的短处,这些会降低你的人格。

7. 机会从不会“失掉”,你失掉了,自有别人会得到。不要凡事在天,守株待兔,更不要寄希望于“机会”。机会只不过是相对于充分准备而又善于创造机会的人而言的。也许,你正为失去一个机会而懊悔、埋怨的时候,机会正被你对面那个同样的“倒霉鬼”给抓住了。没有机会,就要创造机会,有了机会,就要巧妙地抓住。

8. 若电话老是不响,你该打出去。很多时候,电话会给你带来意想不到的收获,它不是花瓶,仅仅成为一种摆设。交了新朋友,别忘了老朋友,朋友多了路好走。交际的一大诀窍就是主动。好的人缘好的口碑,往往助你的事业更上一个台阶。

9. 千万不要因为自己已经到了结婚年龄而草率结婚。想结婚,就要找一个能和你心心相印、相辅相携的伴侣。不要因为放纵和游戏而恋爱,不要因为恋爱而影响工作和事业,更不要因一桩草率而失败的婚姻而使人生受阻。感情用事往往会因小失大。

10. 写出你一生要做的事情,把单子放在皮夹里,经常拿出来看。人生要有目标,要有计划,要有提醒,要有紧迫感。一个又一个小目标串起来,就成了你一生的大目标。生活富足了,环境改善了,不要忘了皮夹里那张看似薄薄的单子

posted @ 2008-01-02 16:46 李海 阅读(40) | 评论 (1)编辑

当互联网吵吵嚷嚷的进入2.0时代,当互联网的技术不再是那么高不可攀,当复制变成家常便饭,互联网热闹起来了

    myspace火了,中国冒出更多的myspace

    youtube刚刚起来,中国的视频网站就遍地开花

    51拔地而起,中国出了无数的SNS

    facebook则改变了中国站长的抄袭方式,不再学chianren了,校内火了
    ..........

    当抄袭变成习惯,我想说的是,模仿,站长,你准备好了吗?

    如果你打算做垃圾站,或者赚点广告费的网站,请不要点击这篇文章,我从技术角度方面谈谈WEB2.0网站的模仿问题。

    当投资和流量都不是问题的时候,我想说的是,您真的一帆风顺吗?

    拿SNS网站来说,当匆匆上线的2.0,当一笔笔投资砸进去的时候,当流量上去的时候,您的困惑在什么地方?

    我做过多个2.0公司的技术顾问,简单的谈谈2.0公司遇到的问题(涉及隐私,我用A B C D代替),这里就不再赘述大家众所周知的页面静态化,缓存和代码安全等问题了,有点技术的2.0公司的CTO都知道这些东西,我们谈点发展之后的问题

A公司

    A公司做的是SNS网站,程序是两个毛头小伙子做的,目标直指51,程序开发是一帆风顺,功能也比51牛多了,推广也是一帆风顺(A公司有自己独到的推广方式。但是当ALEXA到2W的时候问题出来了,每天下午4点左右,网站速度慢的惊人,基本上打不开,公司三台服务器CPU100%,让人郁闷的是公司的网络配置方式,居然是双WEB的集群,而单独一台DB数据库。整个瓶颈在数据库,于是我建议做DB的集群,分析了一下数据结构,MD,典型的WEB程序员的作品,没有一点数据库设计规范,功能实现是可以,如果要扩展,不可能,集群基本上是不可能的,怎么办?不能办,于是,一个月的时间修改程序,数据结构基本上换了一遍 前期砸进去的几十万打了水飘,用户走光了。

    结论:WEB2.0前期设计的时候不应该只考虑功能,应该认真考虑一下底层和数据结构了。

B公司

    B公司也是做的SNS网站,程序是3个人开发的,CEO是某名牌大学的经济学硕士,有点知己网的味道,又有一些特色出来,说实话,公司的潜力不错,CEO有很强的运作能力,感觉前景不错。系统架构还行,但是---但是系统崩溃了,why?系统没有考虑到用户有个海量的说法,文件也有个海量的说法,用户的相册,图片全部存贮在WEB服务器的一个分区上,每个用户一个目录,而打开性能监视器,磁盘的IO高的惊人,基本上无暇响应。众所周知,文件系统也是一个数据库,单独大文件无所谓,关键是整个是300多个G的零碎文件,大量的读写操作,系统崩溃,数据丢失,文件系统的一个链断了,用户数据全部丢失!!!这是一个非常沉重的问题,系统整整停了一个月来做数据恢复(单独文件很容易,但是海量文件目前还没有一个软件能组织起来软件架构)。解决方案:修改程序架构,做分布式文件存贮(程序修改用了8天,但是文件转移却又用去了将近一个月),20万用户损失殆尽

    结论:WEB2.0前期的设计应该有应付海量存贮的考虑,整个涉及了程序架构的修改,前期规划不好的话基本上思路一条。

C公司

    C公司是一个值得尊敬的公司,CEO技术出身,和比尔盖茨一样,大学未毕业出来做网络,01到03年做短信狠赚了一笔,后来做的小项目也小有所成,说实话,我很佩服。公司做的是校友方面,但是更偏重myspace风格,注重个人主页,推广方面也下了大手笔。系统崩溃的原因其实很简单,由于采用的是微软的SqlServer,而微软直接就告诉了我们,SQLSERVER不支持集群,他们的数据库超负载,100%就没有下去过,只能横向增加配置,采用了4路4核CPU系统,但是系统还是崩溃了... 高互动注定了高负载。解决方案: 现从基本入手,解决掉几个程序耗能大户,对数据库采用横向切割,将用户每10万进行分组,同时对数据库系统进行散列,将多个表垂直分割,同时进行文件分组 ,解决问题. 因为修改了数据结构,程序也基本上大动了一下。 好在系统没有出大错,损失不算很大,不过对用户体验造成了很坏的影响。

    结论:WEB2.0前期设计应该有良好的散列考虑,程序应该能有配合的扩充性,符合数据库的扩充

D公司

    D公司是一个各个方面做的比较好的公司,做了CDN加速,图片也独立分出了N个服务器,数据库不错的一个,(CTO是个数据库专家),系统崩溃的原因在于WEB,按道理说WEB很容易做集群的,但是发现集群并解决不掉问题,他们的集群只允许做4台的WEB集群,但是4台都当掉了。仔细分析,找到原因,我估计整个也是大部分CTO最容易犯的一个错误,或者说他们根本就想不到的问题,就是WEB上传的问题,上传的时候由于时间的原因,线程是保持链接的,300个线程就可以把一个WEB Server当掉了。解决方案:这个最简单,把上传和其他耗能大户分离出独立出来。程序改动不是很大,但是之前半个月速度满对用户体验的损失也不可小视。

    结论:没有什么结论了,毕竟有海量访问经验的CTO不多,也就是那几个大站的。

    总结:不是泼冷水,模仿其实是很容易的,随便找几个WEB程序员就能做到,并且很简单,速度可能还很高效,因为WEB2.0无非就是跟数据库打交道,会操作数据库就会做。但是真正做大并不容易,因为能应付海量访问的程序并不简单,现在的程序员都太自命不凡,其实真正有经验的并不多,不要相信一个月薪5K--10K的程序员能给你多大的惊喜,能应付海量访问的程序员不是那个价格。如果您想做2.0,想做大,有几个个建议:

    一.找DBMS的专家设计好数据库,大部分程序员都不知道分区视图,数据散列,数据组的概念

    二.设计好程序架构(这个其实不难,有个高人指导就行了),保持良好的扩展性,成本考虑可以找兼职的系统架构设计师做好系统架构,确定将来的发展瓶颈。

    三.考虑好文件存贮的问题。文件存贮的技术含量看起来很低,其实是很高的,可以考虑反向代理的方案。文件存贮出问题了,站点基本上就完蛋了,不仅仅是RAID的问题和存贮服务器的问题,不过道理倒是一点就破的

    四.中国国情考虑,这个最致命,需要考虑电信和网通的问题,CDN并不能解决所有问题。互动性的东西并CDN并不是很有效。最关键的是,现有的双线机房遇到DDOS攻击基本上都会当掉,原因很简单,双线机房都是私人机房,本身就不会有太高的带宽,随便攻击一下就可以D掉(顺带提一个笑话,我知道一个双线机房的老总总共1G的带宽却买了4G的金盾墙,很简单800M的攻击就可以搞定)。

    五.网络延迟的问题,这是分布式系统必须要考虑的,程序要能容忍0到100秒的数据延迟的功能,也就是同步的问题。不要小看这几十秒,问题很大的,如果你的站点有交互式功能,比如即时聊天,你可以想象一下是个什么结果。对于即时聊天的东西,可以用反向代理来解决(成本较高)。但是对于留言和评论的影响不大,但是如果系统为了健壮做了缓存和静态化的时候,这个东西可能就是灾难性的了。

    六.分散你的程序,如果你没有太多的资金构筑动辄百万的服务器,建议把功能分散开来,比如相册一台服务器,留言一台服务器

    七.看好你的程序员,如果没有很好的激励措施的话你的程序员很容易写出敷衍性的代码,而这个可能就是将来的大患,程序架构定下来后要修改可能就要费牛劲了。最好你的CTO能对你100%的衷心,100%的负责。

    八.文件同步的问题,这个问题可能你觉得没有必要,如果你看一下网通和电信的TTL就明白了,同步要支持续传,并且不能是持续的,否则你的成本会高出N倍,不要期望能通过你的软件实现,交给你的程序员吧,把上面的话告诉他他就知道怎么做了。

    九.最狠的一个问题了,也是吃亏最大的问题,不管您跟网警的关系多好,看好你的用户,审核好你的东西,一被停机可能就致命,本人就吃过N次亏。

    十.最后,祝各位站长一番风顺,大展宏图。

posted @ 2008-01-02 16:43 李海 阅读(25) | 评论 (0)编辑

“又是一年毕业时”,看到一批批学子离开人生的象牙塔,走上各自的工作岗位;想想自己也曾经意气风发、踌躇满志,不觉感叹万千……本文是自己工作6年的经历沉淀或者经验提炼,希望对所有的软件工程师们有所帮助,早日实现自己的人生目标。本文主要是关于软件开发人员如何提高自己的软件专业技术方面的具体建议,前面几点旨在确定大的方向,算是废话吧。

谨以此文献给那个自己为你奉献3年青春与激情的开发团队。还有团队成员:PPL、YT、YK 、TYF、LGL、CHL、CDY、CB、DPD。

1、 分享第一条经验:“学历代表过去、能力代表现在、学习力代表未来。”其实这是一个来自国外教育领域的一个研究结果。相信工作过几年、十几年的朋友对这个道理有些体会吧。但我相信这一点也很重要:“重要的道理明白太晚将抱憾终生!”所以放在每一条,让刚刚毕业的朋友们早点看到哈!

2、 一定要确定自己的发展方向,并为此目的制定可行的计划。不要说什么,“我刚毕业,还不知道将来可能做什么?”,“跟着感觉走,先做做看”。因为,这样的观点会通过你的潜意识去暗示你的行为无所事事、碌碌无为。一直做技术,将来成为专家级人物?向管理方向走,成为职业经理人?先熟悉行业和领域,将来自立门户?还是先在行业里面混混,过几年转行做点别的?这很重要,它将决定你近几年、十年内“做什么事情才是在做正确的事情!”。

3、 软件开发团队中,技术不是万能的,但没有技术是万万不能的!在技术型团队中,技术与人品同等重要,当然长相也比较重要哈,尤其在MM比较多的团队中。在软件项目团队中,技术水平是受人重视和尊重的重要砝码。无论你是做管理、系统分析、设计、编码,还是产品管理、测试、文档、实施、维护,多少你都要有技术基础。算我孤陋寡闻,我还真没有亲眼看到过一个外行带领一个软件开发团队成功地完成过软件开发项目,哪怕就一个,也没有看到。倒是曾经看到过一个“高学历的牛人”(非技术型)带一堆人做完过一个项目,项目交付的第二天,项目组成员扔下一句“再也受不了啦!”四分五裂、各奔东西。那个项目的“成功度”大家可想而知了。

4、 详细制定自己软件开发专业知识学习计划,并注意及时修正和调整(软件开发技术变化实在太快)。请牢记:“如果一个软件开发人员在1、2年内都没有更新过自己的知识,那么,其实他已经不再属于这个行业了。”不要告诉自己没有时间。来自时间管理领域的著名的“三八原则”告诫我们:另外的那8小时如何使用将决定你的人生成败!本人自毕业以来,平均每天实际学习时间超过2小时。

5、 书籍是人类进步的阶梯,对软件开发人员尤其如此。书籍是学习知识的最有效途径,不要过多地指望在工作中能遇到“世外高人”,并不厌其烦地教你。对于花钱买书,我个人经验是:千万别买国内那帮人出的书!我买的那些家伙出的书,!00%全部后悔了,无一本例外。更气愤的是,这些书在二手市场的地摊上都很难卖掉。“拥有书籍并不表示拥有知识;拥有知识并不表示拥有技能;拥有技能并不表示拥有文化;拥有文化并不表示拥有智慧。”只有将书本变成的自己智慧,才算是真正拥有了它。

6、 不要仅局限于对某项技术的表面使用上,哪怕你只是偶尔用一、二次。“对任何事物不究就里”是任何行业的工程师所不应该具备的素质。开发Windows应用程序,看看Windows程序的设计、加载、执行原理,分析一下PE文件格式,试试用SDK开发从头开发一个Windows应用程序;用VC++、Delphi、Java、.Net开发应用程序,花时间去研究一下MFC、VCL、J2EE、.Net它们框架设计或者源码;除了会用J2EE、JBoss、Spring、Hibernate等等优秀的开源产品或者框架,抽空看看大师们是如何抽象、分析、设计和实现那些类似问题的通用解决方案的。试着这样做做,你以后的工作将会少遇到一些让你不明就里、一头雾水的问题,因为,很多东西你“知其然且知其所以然”!
 
7、 在一种语言上编程,但别为其束缚了思想。“代码大全”中说:“深入一门语言编程,不要浮于表面”。深入一门语言开发还远远不足,任何编程语言的存在都有其自身的理由,所以也没有哪门语言是“包治百病”的“灵丹妙药”。编程语言对开发人员解决具体问题的思路和方式的影响与束缚的例子俯拾皆是。我的经验是:用面对对象工具开发某些关键模块时,为什么不可以借鉴C、C51、汇编的模块化封装方式?用传统的桌面开发工具(目前主要有VC++、Delphi)进行系统体统结构设计时,为什么不可以参考来自Java社区的IoC、AOP设计思想,甚至借鉴像Spring、Hibernate、JBoss等等优秀的开源框架?在进行类似于实时通信、数据采集等功能的设计、实现时,为什么不可以引用来自实时系统、嵌入式系统的优秀的体系框架与模式?为什么一切都必须以个人、团队在当然开发语言上的传统或者经验来解决问题???“他山之石、可以攻玉”。

8、 养成总结与反思的习惯,并有意识地提炼日常工作成果,形成自己的个人源码库、解决某类问题的通用系统体系结构、甚至进化为框架。众所周知,对软件开发人员而言,有、无经验的一个显著区别是:无经验者完成任何任务时都从头开始,而有经验者往往通过重组自己的可复用模块、类库来解决问题(其实这个结论不应该被局限在软件开发领域、可以延伸到很多方面)。这并不是说,所有可复用的东西都必须自己实现,别人成熟的通过测试的成果也可以收集、整理、集成到自己的知识库中。但是,最好还是自己实现,这样没有知识产权、版权等问题,关键是自己实现后能真正掌握这个知识点,拥有这个技能。

9、 理论与实践并重,内外双修。工程师的内涵是:以工程师的眼光观察、分析事物和世界。一个合格的软件工程师,是真正理解了软件产品的本质及软件产品研发的思想精髓的人(个人观点、欢迎探讨)。掌握软件开发语言、应用语言工具解决工作中的具体问题、完成目标任务是软件工程师的主要工作,但从软件工程师这个角度来看,这只是外在的东西,并非重要的、本质的工作。学习、掌握软件产品开发理论知识、软件开发方法论,并在实践中理解、应用软件产品的分析、设计、实现思想来解决具体的软件产品研发问题,才是真正的软件工程师的工作。站在成熟理论与可靠方法论的高度思考、分析、解决问题,并在具体实践中验证和修正这些思想与方式,最终形成自己的理论体系和实用方法论。

10、心态有多开放,视野就有多开阔。不要抱着自己的技术和成果,等到它们都已经过时变成垃圾了,才拿出来丢人现眼。请及时发布自己的研究成果:开发的产品、有创意的设计或代码,公布出来让大家交流或者使用,你的成果才有进化和升华的机会。想想自己2000年间开发的那些Windows系统工具,5、6年之后的今天,还是那个样子,今天流行的好多Windows系统工具都比自己的晚,但进化得很好,且有那么多用户在使用。并且,不要保守自己的技术和思想,尽可能地与人交流与分享,或者传授给开发团队的成员。“与人交换苹果之后,每个人还是只有一个苹果;但交换思想之后,每个人都拥有两种思想”,道理大家都懂,但有多少人真正能做到呢?

11、尽量参加开源项目的开发、或者与朋友共同研制一些自己的产品,千万不要因为没有钱赚而不做。网络早已不再只是“虚拟世界”,网上有很多的开源项目、合作开发项目、外包项目,这都是涉猎工作以外的知识的绝好机会,并且能够结识更广的人缘。不要因为工作是做ERP,就不去学习和了解嵌入式、实时、通信、网络等方面的技术,反过来也是一样。如果当他别人拿着合同找你合作,你却这也不会,那也不熟时,你将后悔莫及。

12、书到用时方恨少,不要将自己的知识面仅仅局限于技术方面。诺贝尔经济学奖得主西蒙教授的研究结果表明: “对于一个有一定基础的人来说,他只要真正肯下功夫,在6个月内就可以掌握任何一门学问。”教育心理学界为感谢西蒙教授的研究成果,故命名为西蒙学习法。可见,掌握一门陌生的学问远远没有想想的那么高难、深奥。多方吸取、广泛涉猎。极力夯实自己的影响圈、尽量扩大自己的关注圈。财务、经济、税务、管理等等知识,有空花时间看看,韬光养晦、未雨绸缪。

13、本文的总结与反思:

A:不要去做技术上的高手,除非你的目标如此。虽然本文是关于提高软件开发知识的建议,做技术的高手是我一向都不赞同的。你可以提高自己的专业知识,但能胜任工作即止。

B:提高软件知识和技术只是问题的表面,本质是要提高自己认识问题、分析问题、解决问题的思想高度。软件专业知识的很多方法和原理,可以很容易地延伸、应用到生活的其它方面。

C:在能胜任工作的基础上,立即去涉猎其它领域的专业知识,丰富自己的知识体系、提高自己的综合素质,尤其是那些目标不在技术方面的朋友。

posted @ 2008-01-02 16:41 李海 阅读(44) | 评论 (0)编辑

     摘要: GridView无代码分页排序GridView选中,编辑,取消,删除GridView正反双向排序GridView和下拉菜单DropDownList结合GridView和CheckBox结合鼠标移到GridView某一行时改变该行的背景色方法一鼠标移到GridView某一行时改变该行的背景色方法二GridView实现删除时弹出确认对话框GridView实现自动编号GridView实现自定义时间货币等... 阅读全文

posted @ 2008-01-02 16:39 李海 阅读(34) | 评论 (0)编辑

共有以下4种方法:
1.link
<link rel=”stylesheet” type=”text/css” href=”a.css”>
rel 关系
type 数据类型,有多种
href 路径

部分浏览器支持候选样式,关键字:alternate:
<link rel=”stylesheet” type=”text/css” href=”a.css”>
<link rel=”alternate stylesheet” type=”text/css” href=”b.css”>
<link rel=”alternate stylesheet” type=”text/css” href=”c.css”>

2.内部样式块
<style>
<!–
h1{color:red;}
–>
</style>

3.@import
@import url{a.css}
注意:此指令必须放在<style>容器中,并且在所有样式之前
建议放在一个html注释中,<!– –>浏览器会不显示注释内的内容,而import等css代码能正常工作

4.内联样式
<p style=”color:red;”>

选择器是css的一个基本概念,基本规则如下:
1.规则结构:
h1 {color:red;}
选择器 {属性:值;}
这类是元素选择器,基本可以包括所有html的元素
属性值可以包括多个元素,如:border:1px solid red;
常用语法
1)分组:
选择器和声明都可以分组:
h1,h2,h3{color:red;background:#fff;} ,选择器用“,”分割开,属性用”;”分割
2)类选择器,即通过class=”stylename”应用的声明
定义:
.stylename{color:red;}
注意:
在html中可以使用多类选择:如class=”cn1 cn2 cn3″
2)ID选择器,即与id属性对应的样式
定义:
#a{color:red;} ->这个定义对用id=”a”的元素

2.这部分都是我们常见的css语法,下面谈一下我们不常见的选择器语法
1)父子结构,跟文档结构图对应
如p span{border:1px solid red;}对应的是<p>下面的<li>标签,这个很用用途,可以准确定位.
一些特殊应用(IE7支持):
(1) p > span{},匹配所有p下所有的span
(2) p + span{} ,匹配紧接着p元素后出现的第一个span标签,2者要有相同的父标签

2)属性选择器:(注意:属性选择器ie7才开始支持,以下版本并不支持,其他的浏览器基本可以)
语法:img[alt]{border:1px solid;}
表示对应有alt属性的img标签,当然可以支持多个属性对应,如img[alt][title]{};表示这个2个属性都有的img标签,也可以与具体值对应:如:img[alt=”摄影”]{};

属性选择器中的高级应用,特殊匹配:
(1)img[class~=”b”],    ~= : 与属性中的一个值对应的,即与<img class=”a b c”>对应
(2)[class^=”a”],以a开头的
(3)[class$=”a”],以a结束的
(4)[class*=”a”],包含a的
(5)[class|=”a”],等于a或以a开头的
是不是感觉跟正则表达式有点对应啊?

3)伪类和伪元素
日常使用中主要是<a>标签的几个伪类:link:hover:active:visited
以及:first-child:first:before:left:right:lang:focus:fist-line等等
注意:动态伪类可以应用到任何元素,如,input:focus{background:red;}当input标签获得焦点时背景变红

以上语法组合使用,就能实现定位准确、简单间接的样式了。

posted @ 2008-01-02 15:02 李海 阅读(65) | 评论 (0)编辑

★如何将系统安装到移动设备

  ★怎样将多个系统集成封装

  在一块硬盘上安装多个操作系统,不仅安装麻烦,多系统的维护更是一个棘手的难题。相信很多朋友都用过虚拟系统软件来解决多操作系统并存的难题,不过常规的虚拟系统软件不仅需要安装,而且配置也较为复杂。Qemu则是一款免费、绿色的虚拟系统软件,这样借助移动硬盘就可以轻松拥有多个随身系统了。

  一、简单设置,Qemu轻松上手

  首先点击这里下载其图形化运行软件_Qemu manger(以下简称为QM)。下载后将文件解压到“k:HA-qemuk21-FSYXQemuManager”(k为移动硬盘分区),然后运行Setup.exe安装。运行QM后单击“选项”→“新建虚拟磁盘”,按提示建立一个大小为10GB虚拟磁盘文件,以WinXP.dsk为名保存在k:。

  返回QM窗口,单击“新建虚拟机”图标,按提示建立自己需要的操作系统。比如,可以先建立一个名为98的操作系统,接着在系统列表选择Windows 98,内存设置为128MB。接着“驱动器”选择“已存在的虚拟磁盘”,指定刚才建立的虚拟磁盘文件WinXP.dsk,完成后单击“保存虚拟机”返回QM管理窗口。

  通过以上方法建立多个系统后,现在可以设置虚拟机的启动设置,在虚拟机列表双击选中的虚拟机弹出设置窗口,单击“磁盘配置”可以设置启动的各个参数。

  二、系统安装,轻松成行

  经过上述方法建立并设置好虚拟机后,我们的移动硬盘就拥有了多部“裸机”(因为还没有安装操作系统),下面介绍如何安装操作系统,这样以后只要携带移动硬盘,我们就可以在任何电脑上使用多个操作系统。

  虚拟机的所有操作可以和主机完全隔离,为了追踪病毒危害,很多时候要测试病毒样本,这时就可以在虚拟机安装一个Windows XP用于测试病毒。

  步骤1:将Windows XP安装盘放入光驱,启动QM后在虚拟机列表选中XP,接着单击“使用媒体快速启动虚拟机器”图标,在其启动选项列表选中“从系统光驱启动选择的虚拟机”(如图1)。


图1

  小提示:

  如果下载的是ISO格式的Windows XP安装文件,可以选择“使用可用的光盘媒体文件”,然后在打开的窗口选择下载的ISO文件也可以进入安装。

  步骤2:启动安装程序后的操作和常见的安装相同,按照提示进入到正式安装后可看到,这部虚拟机的硬盘是没有分区的,

  只要按提示进行分区就可以安装系统了。在操作过程中虚拟机会捕获鼠标指针,只要按下左Alt+Shift即可释放指针(如图2)。


图2

  步骤3:剩下步骤按向导提示一步步安装即可,完成后就可以在这个虚拟机里测试各项危险的操作了,如果要备份虚拟机只要复制winxp.dsk即可。

  小提示:

  在虚拟机安装系统速度比较缓慢,我们可以先将主机其它程序关闭,然后将虚拟机内存先设置大一些。比如,512MB用户可以设置虚拟机内存为256MB,同时将虚拟磁盘位置放置在本地硬盘,安装完成后再转移到移动硬盘。

  用此方式再将其它系统也安装进来,这样就可以随时调用不同的系统了,如果你有兴趣,甚至可以把网上现成的PE系统安装到移动硬盘,方便以后修复系统问题(如图3)。


图3

  这样被封包的系统,不但不受外界干扰,而且你还可以随心定制,到任何一台电脑上都可以使用最顺手的系统。

posted @ 2008-01-02 14:36 李海 阅读(390) | 评论 (0)编辑

扩展GridView控件(全)——增加10个常用功能

GridView既强大又好用。为了让它更强大、更好用,我们来写一个继承自GridView的控件。
[源码下载]

控件开发

扩展GridView控件(一)——鼠标经过行时改变行的样式

扩展GridView控件(二)——给字段标题加上排序状态

扩展GridView控件(三)——单击命令按钮弹出确认框

扩展GridView控件(四)——每行复选框的全选与取消全选

扩展GridView控件(五)——固定表头、指定行或指定列

扩展GridView控件(六)——数据行响应鼠标的单击和双击事件

扩展GridView控件(七)——改变通过CheckBox选中的行的样式

扩展GridView控件(八)——导出为Excel

扩展GridView控件(九)——给数据行增加右键菜单

扩展GridView控件(十)——再增加一种分页样式


控件截图




控件使用

1、鼠标经过行时改变行的样式
CssClassMouseOver - 鼠标经过行时行的样式的CSS类名

2、给字段标题加上排序状态
设置其SortTip下的4个属性即可
SortAscImage - 升序提示图片
SortAscText - 升序提示文本
SortDescImage - 降序提示图片
SortDescText - 降序提示文本

3、单击命令按钮弹出确认框
设置其ConfirmButtons属性
CommandName - 命令按钮的CommandName属性
ConfirmMessage - 弹出的确认框所显示的文字

4、每行复选框的全选与取消全选
在模板列的头模板处添加一个复选框,在模板列的项模板处添加一个复选框,然后设置控件的CheckboxAlls属性
CheckboxAllID - 模板列全选复选框ID
CheckboxItemID - 模板列项复选框ID

5、固定表头、指定行或指定列
设置其FixRowCol下的6个属性
IsFixHeader - 固定表头否?
IsFixPager - 固定分页行否?
FixRowIndices - 需要固定的行的索引(用逗号“,”分隔)
FixColumnIndices - 需要固定的列的索引(用逗号“,”分隔)
TableWidth - 表格的宽度
TableHeight - 表格的高度
EnableScrollState - 是否保持滚动条的状态

6、数据行响应鼠标的单击和双击事件
RowClickButtonID - 行单击事件所对应的按钮的ID
RowDoubleClickButtonID - 行双击事件所对应的按钮的ID

7、改变通过CheckBox选中的行的样式
CheckBoxID - 模板列的项复选框的ID
CssClassRowSelected - 选中行的样式的CSS类名

8、导出为Excel
在GridView内加一个按钮
CommandName属性设置为“ExportToExcel”
CommandArgument属性的值用“;”做分隔符分为两部分,左边的部分为导出Excel的文件名称,右边的部分为需要隐藏的列的索引(列索引用“,”分开)

9、给数据行增加右键菜单
ItemType - 右键菜单的项的类别(Link,Command,Custom,Separator)
Icon - 文字左边的图标的链接
Text - 菜单的文字
CommandButtonId - 所调用的命令按钮的ID
NavigateUrl - 链接的url
Target - 链接的target(Blank,Self,Top)
Key - 自定义属性key
Value - 自定义属性value

10、再增加一种分页样式
设置PagingStyle属性为Default
设置GridView的原有属性PageButtonCount,FirstPageText,PreviousPageText,NextPageText,LastPageText,FirstPageImageUrl,PreviousPageImageUrl,NextPageImageUrl,LastPageImageUrl


[源码下载]

Gridview利用DataFormatString属性设置数据格式

首先把Gridview的AutoGenerateColumns属性设为False(默认是False),DataField选择相应的字段,特别需要注意的是要把需要设置的字段的HtmlEncode属性设置为False,否则所设置的格式将无法显示,然后就可以设置每个字段的DataFormatString属性来输出不同的格式了。

DataFormatString 属性语法如下: {A:B}

如:DataFormatString="{0:格式字符串}"

冒号前的值(常规示例中为 A)指定在从零开始的参数列表中的参数索引。此值只能设置为 0,因为每个单元格中只有一个值。

冒号后的字符(常规示例中为 B)指定值的显示格式。另外在指定的格式符号后可以指定小数所要显示的位数。例如原来的数据为「1.56」,若格式设定为 {0:N1},则输出为「1.5」。其常用的数值格式如下表所示:

格式字符         说明

C      以货币格式显示数值。  
D      以十进制格式显示数值。  
E      以科学记数法(指数)格式显示数值。  
F      以固定格式显示数值。  
G      以常规格式显示数值。  
N      以数字格式显示数值。  
X      以十六进制格式显示数值。

下面是一些示例,供大家参考:
格式字符串          输入          结果
"{0:C}"          12345.6789     $12,345.68
"{0:C}"          -12345.6789    ($12,345.68)
"{0:D}"          12345          12345
"{0:D8}"         12345          00012345
"{0:E}"          12345.6789     1234568E+004
"{0:E10}"        12345.6789     1.2345678900E+004
"{0:F}"          12345.6789     12345.68
"{0:F0}"         12345.6789     12346
"{0:G}"          12345.6789     12345.6789
"{0:G7}"         123456789      1.234568E8
"{0:N}"          12345.6789     12,345.68
"{0:N4}"         123456789      123,456,789.0000
"Total: {0:C}"   12345.6789     Total: $12345.68

其常用的日期格式如下表所示:

格式     说明                输出格式
d     精简日期格式        yyyy-MM-dd
D     详细日期格式        yyyy年MM月dd日
f     完整格式           (long date + short time) dddd, MMMM dd, yyyy HH:mm
F    完整日期时间格式 (long date + long time) dddd, MMMM dd, yyyy HH:mm:ss
g     一般格式           (short date + short time) MM/dd/yyyy HH:mm
G     一般格式           (short date + long time) MM/dd/yyyy HH:mm:ss
m,M   月日格式           MMMM dd
s     适中日期时间格式   yyyy-MM-dd HH:mm:ss
t     精简时间格式       HH:mm
T     详细时间格式       HH:mm:ss

最后,介绍另外一种设置的方法,就是直接写入时间格式,如{0:yyyy-MM-dd}将显示与{0:d}相同的格式,要注意的是MM必须是大写,因为MM大写表示的是月份,而mm小写表示的时间里的分钟。

posted @ 2008-01-02 14:24 李海 阅读(171) | 评论 (0)编辑

今天在做一个小项目时要用这个,在网上找下这个的,我想对我这样的小菜鸟还有用就放这儿了,呵呵

More Sample AjaxControlToolkit TabContainer Themes ...

After working on a YUI TabView theme for the AjaxControlToolkit's TabContainer control, I thought it might be fun to create a few more TabContainer themes for some of the other tab-style controls that I have seen floating around the web.  I was especially curious in seeing what it would take to include images in each of the tab panel header's.     

 

Below are the controls I was targeting, where on the Internet I found them, and a short description of what it took to create the corresponding theme.  If you are not familiar with how theming the TabContainer works, I recommend reading the documentation for the TabContainer control

Download | Live Demo | View Stylesheet

 

Technorati Tab Theme

I like Technorati's tab control because it simple, yet in my opinion it still has a nicer presentation than the default xp style TabContainer theme.  Here is a link to the page where I found this control.

Notes:
  1. To use this theme, include a link to the CSS file and set the CssClass of the TabContainer control to 'ajax__tab_technorati-theme'.
  2. Make sure you copy the images to your machine and update the path's in the stylesheet if you change the path.  The images for this theme can be found in the download in the img/technorati directory
  3. I tested in both IE7 and FF and did not encounter any issues

 

Windows Live Gallery Tab Theme

I do not particularly care for the Windows Live Gallery style tab, but I thought it might make for an interesting example because the tab headers all contain images.  I thought this might be a difficult scenario to support, but because the TabContainer allows for defining a template to use for the tab headers, it was no problem at all.

Here is the sample markup for the 'Sidebar gadget' tab panel.  Notice, the HeaderTemplate provides us with the flexibility of defining the image and header text that should be used for the 'Sidebar gadgets' tab.

<ajaxToolkit:TabPanel runat="server">
<HeaderTemplate>
<div>
<img src="img/msngallery/sidebar.png"/>
<div>Sidebar gadgets</div>
</div>
</HeaderTemplate>
<ContentTemplate>
</ContentTemplate>
</ajaxToolkit:TabPanel>
Notes:
  1. To use this theme, include a link to the CSS file and set the CssClass of the TabContainer control to 'ajax__tab_msngallery-theme'.
  2. Make sure you copy the images to your machine and update the path's in the stylesheet if you change the path.  The images for this theme can be found in the download in the img/msngallery directory
  3. I tested in both IE7 and FF and did not encounter any issues

 

YUI Tab Theme

I blogged about the YUI theme before, but incase you missed it I figured I would mention it again here.

 

Notes:
  1. To use this theme, include a link to the CSS file and set the CssClass of the TabContainer control to 'ajax__tab_yuitabview-theme'.
  2. Make sure you copy the images to your machine and update the path's in the stylesheet if you change the path.  The images for this theme can be found in the download in the img/yui directory
  3. I tested in both IE7, IE6 and FF and did not encounter any issues.

 

Windows Internet Explorer Tab Theme

The last theme I created is based on the tab control that can be found on the Windows Internet Explorer home page

 

Notes:
  1. To use this theme, include a link to the CSS file and set the CssClass of the TabContainer control to 'ajax__tab_ie-theme'.
  2. Make sure you copy the images to your machine and update the path's in the stylesheet if you change the path.  The images for this theme can be found in the download in the img/ie directory
  3. I tested in both IE7 and FF.  There appears to be a small issue with the alignment of the first tab in FF.  I am working on resolving this.

That's it.  Enjoy!

 
AJAX自从引进了Tab,着实让我开心了一番。但是,在调整Tab的样式的时候,也着实让我吃了一惊。
于是,抱着没有困难也要制造困难的原则,开始了征途:
按照Tab作者Ronald Buckton所说,Tab的CSS包含如下几个类:
(1).ajax__tab_header: A container element that wraps all of the tabs at the top of the TabContainer.
(2).ajax__tab_outer:An outer element of a tab,often used to set the left-side background image of the tab.
(3).ajax__tab_inner:An inner element of a tab,often used to set the right-side image of the tab.
(4).ajax__tab_tab:An element of a tab that contains the text content.
(5).ajax__tab_body:A container element that wraps the area where a TabPanel is displayed.
(6).ajax__tab_hover:This is applied to a tab when the mouse is hovering over.
(7).ajax__tab_active:This is applied to a tab when it is the currently selected tab.

我画了个简图,当然,鼠标放上去(.ajax__tab_hover),和当前Tab(.ajax__tab_active)的那个就没画上去。

层次关系如图所示,弄清楚这个层次关系,对设计Tab样式有很大帮助。

我想说的也就这些,实例晚些时候放出来.

posted @ 2008-01-02 10:13 李海 阅读(421) | 评论 (0)编辑