返璞归真: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

杰出的.NET开发人员应该知道的事情(更多NET面试问题)

[原文发表地址] What Great .NET Developers Ought To Know (More .NET Interview Questions) [原文发表时间] 2005-2-21 19:56 之前我在帖子中列出来了一系列关于ASP.NET的面试问题. 传统的智慧被拆分了,半数人说我发疯了,这是 一系列琐事的列表。其他的人一般说“太棒了,我可能会查找一些。”对我来说,这 才是我希望的回应。 当然我并不是想把所有.NET软件开发的问题归结于几个“琐碎”的问题。相反地我是在努力让人们去思考更多。我相信真正优秀的ASP.NET 开发人员远远不只在于将控件拖动到设计器上,然后期待这就是最好的了。一个好的赛车手清楚地了解他的车所能做的以及不能做的。 因此,以下是另外一个清单,以供参考(扩展过的清单)。这是我在上周从博伊西飞往波特兰的航班上写的。我曾经考虑过,我的清单上包括一些不符常理的琐碎问题,我努力把它们组织成不同的部分。如果你从来没有接触ASP.NET,你显然就不会知道ASP.NET 的各个部分。如果你是一名独立的顾问,你可能从来都没有遇到过这些概念。然而这个列表上的每个问题在我过去的四年里遇到过不只一次。所以是否透彻地知道这些问题并不能说明你是一名优秀的或者差的开发人员。但是当出现问题时,它可以节约你的时间。 杰出的.NET开发人员应该知道的事情 面向编写代码的人员 · 描述线程和进程之间的区别 · 什么是Windows Service?其生命周期与"标准"的 exe 文件有何区别? · 可以解决 Windows 上任何单一进程的最大内存量是多少?它与系统最大虚拟内存有区别吗?这会如何影响系统的设计? · EXE 文件和 DLL文件之间的区别是什么? · 强类型与弱类型的区别是什么?哪一种更适用?为什么? · Corillian 的产品是一个"组件容器"。列出至少3个Windows Server Family附带的组件容器。 · 什么是PID?它在进行系统故障排除时起到了什么作用? · 在单个TCP/IP 端口下可以监测多少个进程? · 什么是GAC?它可以解决什么问题? 面向中级NET开发人员…

0

每周源代码31—单实例WinForms和Microsoft.VisualBasic.dll

[原文发表地址] The Weekly Source Code 31- Single Instance WinForms and Microsoft.VisualBasic.dll [原文发表时间] 2008-08-02 12:25 我最近遇到个有趣的问题(重点提到了我): 我是你博客的忠实读者,希望在单实例winform方面能得到帮助。点击一个文件(.ext)时,我必须打开应用程序(文件和应用程序相关联,正如.doc 和WINWORD相连一样)。应用程序必须是单个的实例。点击the .ext文件时,应打开该内容的应用程序。如果一个实例正在运行,应该询问用户是否要关闭此应用程序并打开新的.ext文件。我需要有关C#的帮助。 有些问题更有趣。但我认为我们15年来总是在一次次地解决这个“单实例”问题。我曾使用过Visual Basic 3中的Dan Appleman VBX,在Mutexes系统中也看到过许多解决方案和各种及其复杂的操作来解决这个简单问题。这个技术确实很老套,但是三年过去,却鲜有人了解WindowsFormsApplicationBase 类的存在以及它包含的多种有用功能。 关于操作,有一个有趣的线程。有人问到过这个问题,有人答道:“WinForms 2.0支持内置的单实例应用程序”。还有人则这样答道:“但它仅适用于Visual Basic应用程序”。 Microsoft.VisualBasic.dll已经成为最实用的.NET Framework标准安装部件之一。大家都迟疑是否该从C#引用它。它看上去像是错误的。 这有点像在英文句子中突然冒出几个法语单词一样,在引用Microsoft.VisualBasic.dll时,je ne sais quoi(难以描述的事情) 给C#开发人员一种mal de mer(晕船)的感觉。但是这个程序集的存在是有着特定的raison d’être(重要原因)的。注意到了吗?你感觉它是错的,但它其实仍然是有效的。Microsoft.VisualBasic还是有很多了不起的东西。不能仅因为它不是System.Something,就意味着你不能任意引用它。唉,我要疯了! 回到正题。在众多的示例中,我见过的最简单的是一个OpenWinForms.com上的示例,它用C#语言编写并引用Microsoft.VisualBasic.dll 。我对它做了些修改,以便这个单实例应用程序可以打开传递到命令行的文本文件名。如果第二次调用相同的应用程序,它会运行新的命令行参数,并在第一个实例中加载这个文本文件。 加载这个单实例程序使其从命令行运行”SuperSingleInstance foo.txt” 然后,从相同的命令行开始,当第一个示例运行时,在命令行启动第二个”SuperSingleInstance bar.txt”。这将重用第一个实例,将其移到前面,并得到一个事件,告知我们有人正试图攻击我们,该事件包括新的命令行。 该代码真的很棒,因为所有的操作都在WindowsFormsApplicationBase中完成。这似乎有点让人困惑,因为你必须调用一个控制器实例,并告知你的MainForm,,而非调用Application.Run(). 当应用程序的第二个实例开始运行的时候,第一个应用程序就会调用StartupNextInstance 事件。它在第二个新的实例和原来的实例之间跨进程通信, 传递命令行。 using System; using System.Windows.Forms; using Microsoft.VisualBasic.ApplicationServices; namespace SuperSingleInstance…

0

使用代码签名证书标记已下载的MSIs和建立IE9 SmartScreen信任

[原文发表地址] Using Code Signing Certificates to sign downloaded MSIs and build reputation with IE9 SmartScreen [原文发表时间] 2011-06-27 11:39 首先,我想说,如果你希望很多人下载,千万别忘了在标题中显示“HTML5”,“支持”和“更新/升级”。那些研发Diablo 3的人如果把它称作”Diablo 3 HTML5 Support Update”,我相信会有更多数以万计的人去下载的。 就是说,Web平台和工具团队中的一队人为Visual Studio 2010编辑器创建了支持HTML5的Web标准升级包。 这个Web标准升级是团队中任何人都能发布的,只需将Visual Studio用标准方法扩展开来。和其他在Visual Studio Extension Gallery中的大部分扩展一样,它并没有被“签名”。它不是微软的正式项目,而是我们一群人利用闲暇时间为社区而做的。至于它为什么会被关注,是因为它支持HTML5和CSS3。 在短短四天之内它就成了Visual Studio Gallery中最热门的,显然,很多人都想要它。去NuGet获取吧!;) 这就是麻烦的根源。它在报刊中被谈论,就好像是种“过失”一样。我承认我们(我占主导)在这方面很逊,没能从一开始就讲清楚这个升级只是一个内部团队升级。可以说,这不是正式的,不过我们倒是很希望在下一版Visual Studio升级时能有官方支持。 由于所有的MSI都没有被签名,你用IE9下载MSI 安装器时,会收到这样的消息: 这很正常,而且挺可爱的。然后会跳出这样一个令人毛骨悚然的红色警示条(是由另一个gallery item发出的): 这是IE9的SmartScreen系统在警告我们,这不是经常下载的项目。实际上,这是IE9一个非常有用的功能,并且在现有的浏览器中独一无二。它使用一些特别的辅助(一些推断,数理,十进制)来公正地判断此项下载。就算是来自Microsoft.com网站的,也一视同仁。SmartScreen是公正的,没有看见过的,一律不信任。 更新:就像我刚刚的测试那样,SmartScreen现在将我们的下载认定为是安全的! 此时,如果我点击 继续 ,会看到这个。(没错,我知道这些截图不是所有都符合标准。) 实际上,对大多数人来说,他们甚至还不能点击“总是运行”。他们必须点 更多选项来看见总是运行按钮。(如果我是开发者型而且一直点更多选项,我要么很清楚我在做什么,要么我喜欢冒险。更多选项会在几次下载之后保持打开状态。这会省下我点击的次数,但其他的警告仍然存在。) 作为发布者,我们有一些选择。我们可以用微软代码证书来签名二进制文件(MSIs),但是这就需要高管签字明确声明微软官方发布此代码。这是件大事情。介于这并不是官方发布,像这样的情况,我们就不能用微软来签名。代码签名证书保证了文件不被篡改,且有已知的通过验证的组织或个人担保。 最后SmartScreen会识别出我们的MSI很安全,但我们不知道这需要花费多久。可能是几周,也可能是几个月,这要视情况而定。不管怎样,无论你是个人还是小公司,你都得为你的代码签名。比如,如果我下载了 Eric Lawrence的Fidder或者Rick Brewster的Paint.NET,他们都是签过名的,我可以在用户帐号控制(UAC)对话中找到他们的名字。我可以点击查看他们的证书,这样就知道我在下载的文件是有人担保的。 记得去Authenticode Code…

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