每周源代码33-Google浏览器中的微软开放源

[原文发表地址]  The Weekly Source Code 33 – Microsoft Open Source inside Google Chrome [原文发表时间]  2008-09-11 11:56 AM “首先,我要提醒大家,请大家看看我正在进行的最新的请求阅读源代码以成为更杰出的开发人员博客。亲爱的读者,我现在向你们展示"每周源代码."一系列帖子中的第33篇。 里面提到过,微软代码怎样处理Google最新的浏览器——Google Chrome?请大家看看Google 代码上的"Chromium"的条款和条件。Chrome的运行涉及到24个不同位制的第三方软件,其中之一就是2004年发布的开放源WTL,即Windows模板库。 Chrome使用开放源Windows模板库 WTL在 MS-PL(即微软公众授权协议)下发布。这是个非常轻松的协议,基本上说,“非常有趣,如果有麻烦就不会调用。”在开放源的王国里,这样的协议铁定能取悦大家。 WTL是 一套开发Win32的C++库,类似于MFC(微软基础类),但它较之更轻便。它最初是由Nenad Stefanovic在微软内部发布的一个框架,但却未获得微软的官方支持。直到现在,Nenad也一直位于旧的源代码开发项目的名单之列。 WTL接受ATL(活动模板库),ATL是一系列C++模板类,它使COM的开发变得更简单。它多少都效仿了STL(标准模板库)。 您可能还记得, Chris Sells是开发ATL的核心。Chris和Chris Tavares一致力于ATL Internals 这本书。 早在2002年,WTL就深受大家喜爱。下面是Simon Steele在当年就WTL的乐趣写的一篇帖子。 Simon写道: WTL是基于MFC的加强版模板库-经过瘦身提速的成功阶段,WTL为我们提供了一种在不采取庞大的MFC或复杂的纯粹Win32API 编程的情况下编写合适GUI应用程序的用户界面框架。许多MFC中的“must-have”类也可作为WTL的实用工具类。热烈欢迎你的老朋友CPoint, CSize, Crect以及最终要的CString归队!WTL创造了无需MFC淤泥新内阁库的可执行小文本-事实上,只要你不使用Visual C++运行库函数(strcpy和朋友),你也可以省去msvcrt.dll-这样就能得到运行速度更快的小程序。 4年前,Windows模板库作为开放源码发布,正如28年的互联网一样。2004年的5月似乎特别漫长。我以为微软不会花很多精力开发开放源的,但看起来他们真的这样做了。实际上,2003年4月,Pranish Kumar和Visual C++开发团队都相继在WTL Yahoo Group上发表讲话,都声称要将WTL永久地放到社区上。 历史:WTL是怎样变成开放源的? 我今天和Pranish Kumar在即时聊天软件上谈到了WTL是怎样成为2004微软开放源项目的。建议你可以去查看MSFT上的共享源页面和开放源页面, 和最重要的端口25. 下面是我和Pranish 关于WTL发布的聊天内容: WTL就算不是微软的第一个OSS开源软件,最起码也是其中之一。和Boss们开会的时候也展示了3款有潜力的OSS软件。我估计WTL是首个参与到联合MS/社区的“真正意义上的OSS”,跟以往仅仅在外部发布信息相反。WTL是唯一通过的项目。 我:启动“共享源代码计划吗?…

1

返璞归真:If,For,Switch语句之后的生活,比如Data Structures Reminder

[原文发表地址]  Back to Basics – Life After If, For and Switch – Like, a Data Structures Reminder [原文发表时间]  2008-06-13 22:40 我在午餐时刚和我的一个好朋友一起进行了一对一编码学习。他正试着要让自己的编码技巧提升到另一个层次。就像我们通过锻炼可以提升一样,我觉得通过不断地编码和解决问题我们也可以提升。这也是为什么我提倡阅读尽可能多的代码以成为一个更优秀的开发者。同样这也是我开设“每周源代码”的原因之一。他说把这些写出来不要紧,因为也许其他人可以从中受益。代码和问题做了适当的更改以保护不那么单纯的人。 我们谈论的问题之一是有些编程人员/代码人/开发者的工具箱里只有一点点工具,比如if、for和switch。 我并不是在评判初级开发者和高级开发者。我在说的是成语和“词汇”。我觉得只会用if、for和switch的电脑编程人员就等同于在每句句子里都用“好像”一样。好像,你知道的,好像,他就是全部,好像,随便什么,我好像,亲爱的,而他,好像,唔,我就像我,你知道对吧? 说到英语,我怎么都不可能拥有像William F Buckley、Jr.-sized这样的词汇量,我也不相信要为了冗长而冗长。但是我坚信在对的场合选择正确的词是有百利而无一害的。我常常佩服那些能把一段冗长的段落精简为一句话却不失任何信息的人。 重构代码经常会给我一样光辉的感觉。这里有些实例,是我和我的朋友在午餐时间改的一些他程序中的代码,把冗长的段落变为简洁的句子。也许这不能算是一种罗列,不过倒是可以对我和其他人起到提示的作用,时刻考虑提前准备解决问题,就像,if,for,就像,switch,你懂? 大量的If有时就是Maps 他有一些代码,用来解析Web服务器转回的搞笑的XML文件。当然,XML的格式疯狂不是他的错。我们有时候不得不解析一些垃圾。他要确认一些特定值是否存在,然后要将其变为Enum。 1: if (xmlNode.Attributes[“someAttr”].Value.ToLower().IndexOf(“fog”) >= 0) 2: { 3: wt = MyEnum.Fog; 4: } 5: if (xmlNode.Attributes[“someAttr”].Value.ToLower().IndexOf(“haze”) >= 0) 6: { 7: wt = MyEnum.Haze; 8: }…

0

每周源代码48-DynamicQueryable让自定义LINQ更简单

[原文发表地址]The Weekly Source Code 48 – DynamicQueryable makes custom LINQ expressions easier [原文发表时间] 2011-01-27 01:52 AM 注意:本文的另一个题目可以是:“每周源代码 48:让每周源代码47吸入更少。” 注意:这不是语言功能!在C#和VB上都能工作。 上周,为解决一种元编程问题,我写了一篇关于Dynamic Linq Query Generation的博文。我有个用ASP.NET 动态数据的网站,想对一些数据做一个LINQ查询。但是,因为我在创建一个模板,对编译的时间无法足够了解而不能写一个合适的LINQ查询,所以我需要动态的创建我的LINQ。 绝对不要离开,精彩的在后边。 运行时,我试图有效生成这个:  Items.Select(row => row.Property).Distinct.OrderBy(colvalue => colvalue) 在Tatham Oddie的帮助下,我成功地用这种次优方式完成了: protected void Page_Init(object sender, EventArgs e) {            var items = Column.Table.GetQuery();            var entityParam = Expression.Parameter(Column.Table.EntityType, “row”);            // row…

0

每周源代码7

[原文发表地址]The Weekly Source Code 7 [原文发表时间] 2011-02-15 02:47 AM 最近我都在探索阅读别人的代码以使自己进步,这一“每周代码”系列总数未知,这是第七篇。以下是我这周在读的很欣赏的一些代码 。 我被最近的ALT.NET会议小小地牵制住了,所以请原谅我上周没有能继续这个系列。 Joe Cheng’s在C#3.0中的 Schwartzian 转换 – 当有人知道了一项技术的正式名称,象棋也好,代码也好,他们通常都比我聪明。“你在对我做Bonetti防守,对吧?”Joe就是其中一个。 “Schwartzian转换是什么?它是一种根据可能计算量很大的属性对对象高效排序的方法。比如,你有一个文件名数组,并且你想按照最终修改日期来排序”这是一项非常有用的技术,在C# 3.0中也很优美清晰。 public static List<TElement> SortBy2<TElement, TSortBy>(         this List<TElement> coll,         Converter<TElement, TSortBy> converter,         Comparison<TSortBy> comparison)     {         return coll             .ConvertAll(el => new { Key = converter(el), Value = el })             .Sort((a,…

0