每周源代码59—开放源宝藏:Irony.NET语言应用包

[原文发表地址]The Weekly Source Code 59 – An Open Source Treasure: Irony .NET Language Implementation Kit [原文发表时间]2011-10-14 08:41 要锐化武器,不断更新自己的软件开发技术,最好的方法就是阅读代码。当然,你得不断练习写代码,但是千万不要忽略了别人的成果。要创建一个“数据文本框”应用通常都会有超过15种的方法可以实现,有时候看看创建商业软件的最新方法是很有趣的,而有时候看看像分析程序,语法分析器和抽象句法树之类的经典应用也不失为一种消遣。如果你没有去学校参加过编译课程,那么你至少得了解软件工程中是有这部分内容的,可以通过很多途径来应用,这是非常重要的。 发现一些我原本不知道的开放源项目是很让人高兴的。这里就有一个项目,是我在帮客户搜索一些内容时偶然发现的,“Irony”.NET语言应用包。CodePlex网站上这样写: Irony是应用在.NET平台上的开发工具包。和现有的大部分yacc/lex风格方案不同,Irony不通过特定meta语言写成的语法规范生成的代码来部署任何扫描仪或者解析器。在Irony中,目标语言语法使用操作器超载表达语法构造,从而在C#中直接编码。Irony的扫描仪和解析器模型使用编译的语法,如同C#类别掌控解析进程一样。参见表达语法样本,包含C#类别内定义的语法样本,在实际解析进程中应用。 Irony囊括了所需的“C#简化语法,设计方案,SQL,GwBasic,JSON等”。你可能熟悉很多种支持语法生成的解析器,比如,ANTLR就被称为LL(*) 语法生成器,而Irony则是一个LALR(向前看,从左到右)语法生成器。 以下是一个很基础的获取播客数据库显示的SQL陈述: SELECT ID, Title FROM Shows WHERE ID = 1 以下是在irony语法资源管理器中显示的Irony解析树 在我的经验中,创建解析器时,大家会使用像BNF(Backus-Naur Form)表达语法上构建的GOLD Meta语言这样的DSL(特定域语言)。这些特定域语言不断优化来准确表达语言是如何建造,如何被解析的。要创造语言,你必须先学一种语言。 还记得先前有关Irony的介绍吗?我再重复一下: 和现有的大部分yacc/lex风格方案不同,Irony不通过特定meta语言写成的语法规范生成的代码来部署任何扫描仪或者解析器。在Irony中,目标语言语法使用操作器超载表达语法构造,从而在C#中直接编码。 Irony的Roman在这里做的就是把C#语言构建当做DSL来用。这是一个非常流畅的解析器。他使用C#类别和函数来表达语言语法。如果你对创建DSL有浓厚兴趣,那么这个想法趣味十足,而且功能强大,不过要是你对学习像GOLD这样的解析器没什么兴趣,那就不过是个乐子而已了。 他有一个叫做Grammar的丰富基础类别,你可以从中获取数据,比如: 1: [Language(“SQL”, “89”, “SQL 89 grammar”)] 2: public class SqlGrammar : Grammar { 3: public…

0

我了解应用程序

[原文发表地址]I know apps [原文发表时间]2011-10-19 13:02 今天我的一个好友让我查看一下他们的简历,他不是程序员,但是是技术型IT专家,我注意到简历的顶端全是应用程序,技术,关键词和缩略简称。 我们到底什么时候才能改掉这个弊病呢? 这实在是太讽刺了,我们中许多技术型人员,自己没有工作,却总被拜托为那些非技术人员写简历,这样就可能给那些很有技术含量的领导留下印象,获得工作。一些大型企业,比如耐克,就有流言说使用高速扫描仪和OCR来寻找关键词,然后给简历分配一定的分量值。这就直接导致了我们往简历中填塞我们碰到的每一个TLA(三个字母的缩写词)。 那为什么我们还要列举Word和Excel呢?有谁因为没有在简历上添加微软办公软件而与机会失之交臂或者丢掉工作的呢?在企业中究竟强制到什么地步,非要大家知道这些工具,并达到一定的专业程度呢? 另外:你试过打开一份微软Word格式简历,点击段落标记工具栏按钮,以字符显示制表符和空格吗?我不想评论太多,但是如果你真想知道那个人是不是了解Word,那就探索一些疯狂的技巧,让那些菜鸟漏洞百出。 我对你是不是了解Word或者Excel没什么兴趣,我感兴趣的是你知不知道iCal文件。你能在日历应用程序中订阅iCal反馈吗?(确切地说是任何日历应用程序)你能编写一个创建这样反馈的程序吗?你理解构造数据,储存它们的各种方法,以及移动它们的方法吗? 我对你的应用程序列表上有“Mozilla”,是专家水平没什么兴趣,我感兴趣的是你对HTTP的理解,不同的标题的作用是什么,缓存是怎样工作的,mime类型是如何使浏览器运行应用程序的。你知道为什么书签很好玩吗?为什么Greasemonkey很有用? 你是用户吗?你是真真正正的用户吗?你真的玩转你的应用程序,你的手机,你的网站,和网页本身了吗? 我对你Bsaecamp的经历没什么兴趣,我感兴趣的是你上一份工作中对Agile的执行。你有没有使用Scrum或者Scrummerfall?哪些是有用的,哪些没那么重要,你了解其中原因吗? 我几年前就发博文说过一个有趣的现象,工作五年以上的同行们,就为了在最后的署名前可以有权利加上“PhD”,但是计算机人员花45分钟做个测试然后不加思索就添加“,A+,MCSD,MCP,MCSE+I”。 为什么我们在简历上不用项目来替代公司呢?干嘛不做一个小检验报告来仔细研究哪些有用,哪些没用及其原因呢?你有20年的经验还是你重复了20次同一年的经验? 你知道如何让文本起舞吗?XML,CSV,vCards之间差别很大,开放文本格式和PSD和专用二进制格式之间也有很大的差别。除了Adobe产品需要花好多年来掌握,我假定你应该了解如何使用一个应用程序。我假定你看见过鼠标,对热键有概念,可以输入,尽管有太多假定的东西了。 如果你真的让Excel舞动起来,或者花了一个暑假的时间编写了TCP驱动,那么请务必告诉我们。如果你编写了自己的SQL词法分析器,那你真的很特别。除了一大堆你知道的应用程序,请在对你影响重大的经历中告诉我们一些你自己在应用程序和技术上成功或者失败的故事。 我很喜欢StackOverflow Careers所做的,在列表中强调的不仅仅是你做了什么,还有你写过些什么,读过些什么。技术清单只可能在你做过的项目内容中才有。这里是一个邀请如果你想尝试的话,点击进入。这不是一个广告链接,或者关联代码。他们曾在我的播客上投放过广告,不过我在这里提及他们是因为他们的简历更能真实地反映一个工程师的全面性。我的资料在http://careers.stackoverflow.com/shanselman上。我个人觉得,下次我会在简历中添加这些: Scott Hanselman 程序员。 我了解应用程序。

0

每周源代码45-在Win7 *和*WinXP 上点击按钮

[原文发表地址]The Weekly Source Code 45 – Kicking Butt on Windows 7 *and* Windows XP [原文发表时间]2009-08-31 06:53 PM 我真的建议大家尽可能多读一些源代码,因为能读得像写的一样多的话,你将会成为更好的代码书写者。这是每周源代码的宗旨——读代码以便成为更好的开发者。 现在正在举行一个很酷的开发者竞赛活动,叫”Code7″。如果你在现在到十月七号之间编写一个Windows 7的应用程序,你就可能会赢得巨额奖金和/或者参加PDC(译者注:专业开发人员大会)的一次机会。 在 Windows 7中有很多新的API(以及现在已经存在的有用的Vista API),像下面这些: Windows 7 Taskbar Integration Transactional File System I/O Optimization Event Tracing for Windows (ETW) Windows 7 Libraries Windows 7 Sensor and Location Platform Aero Glass 在其中的一些实际使用的例子中,(还)没有针对像环境光感应器(Ambient Light Sensors)这些东西的硬件。有人已经能把网络摄像头关联到Windows 7 Sensors API,并用新的显示器配置…

0

每周源代码38 – ASP.NET MVC Beta不明 – ModelBinder获取RouteData值致ModelState.IsValid属性为False

[原文发表地址] The Weekly Source Code 38 – ASP.NET MVC Beta Obscurity – ModelState.IsValid is False because ModelBinder pulls values from RouteData [原文发表时间] 2008-12-03 22:41 我在我正做的应用程序里发现了一个错误。我不知道那是ASP.NET MVC Framework里的一个错误还是一个新特征。不过我知道,他们的代码和我的都精准地按照编写的在运行。 首先是我看到的状态,然后是一大堆没有必要的技术背景(因为我喜欢听我自己讲解),最后则是我的总结。不管怎样,很有趣! 更新:我彻底被MVC团队愚弄/打败了,他们尖锐地指出和15年前Ayende提出的完全一样。它是促使修复/变更了,新的状态把顺序调整为3,1,2,我是这么理解的。我表示惭愧。它在Release Candidate中被彻底修复,所以此篇博文仅为我个人的CSI:ASPNETMVC。 状态 我的应用在Dinners中是做CRUD的(创建,读取,更新和删除)。你进入一个新的Dinner目标时,你要填个表格并公布你的HTML。 我们在Dinner中读取并储存(我移除了goo 这样看起来比较清楚): 1: [AcceptVerbs(HttpVerbs.Post)] 2: [Authorize] 3: public ActionResult New([Bind(Prefix = “”)]Dinner item) 4: { 5: if (ModelState.IsValid) 6: { 7: item.UserName =…

0

每周源代码13 –斐波纳契版

[原文发表地址] The Weekly Source Code 13 – Fibonacci Edition [原文发表时间] 2008-01-23 23:05 如果你是新来的,我要告诉你每周我都会在这里贴上些我觉得很有趣的源代码片段及其出自的项目。我之所以做这件事是本着我一贯的信念,那就是阅读源代码和写代码一样重要,甚至更为重要。我们阅读各种计算机书籍来成为更好的程序员,但除非你是阅读像《编程珠玑》这样的书籍,不然你必须不断学习各种开放源项目来寻找灵感。 所以,亲爱的读者,在这里为你们奉上第13篇每周源代码,之后也会不断继续。这里是我本周在读的一些源代码。我想看看斐波纳契数字生成器在各种不同的语言中是怎么样的。 记住(维基百科上说)斐波纳契序列是这样的: 在两个初始值后,每个数字都是前两个数字之和。第一个斐波纳契数字也表示为FN,N = 0,1,…,那就是: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, 17711, 28657, 46368, 75025, 121393, … 以下是我觉得对比很好的一些实例。在Dustin Campbell的博客里也有一些写得很棒的斐波纳契相关的东西。 F# 这是用F#实现的基本的斐波纳契函数。 let rec fib n =…

0

每周源代码11 – LOLCode DLR版

[原文发表地址] The Weekly Source Code 11 – LOLCode DLR Edition [原文发表时间] 2007-11-10 23:21 我在周五的PNP峰会主题演讲上做了一个长达30分钟的PPT,临近结束时提到了一些LOLCats和LOLCode.。倘若你对LOLCats不熟悉,那我要告诉你,他们基本来说就是一些很蠢的猫咪图片,会说l33tspeak这样的语言,好像额在泥的地下室杀了泥的同伴。(IM IN UR BASE KILLIN YUR D00DS) 这种语言已经演变成了叫做LOLCode的编程语言,现在已经至少有两个.NET实现了。Nick Johnson在Google Code上创建了第一个实现——LOLCode.NET。 在我演讲的时候,我并不知道,与此同时,John Lam正在上传DLR团队自己的LOLCode实现。DLR团队出色的Martin Maly在去西班牙TechEd演讲的飞机上实现了LOLCode。 我自发地邀请John上台展示下LOLCode,他上台后展示了一个Fibonacci实现。 这个代码不容错过,原因有二。它是在相同的基本概念– LOLCode编译器下两个完全独立的实现。它们实现起来完全不一样。当然DLR团队把这个想象成一个动态语言,所以他们的实现是大胆创新的,也将是告诉你如何在DLR上做你自己的语言的良好启蒙。 1: HAI 2:  3: CAN HAS STDIO? 4: VISIBLE "HAI WORLD!" 5:  6: I HAS A CODE ITZ "CRAZY" 7: VISIBLE CODE 8:  9: I HAS…

0

每周源代码10 – 被指有害的模式

[原文发表地址] The Weekly Source Code 10 – Patterns Considered Harmful [原文发表时间] 2007-10-30 21:54 沿袭我一贯的信念,阅读源代码以编出更好的程序,我为大家奉上第2篇每周系列“每周源代码”,之后还将源源不断地继续。这里是我这周在读的一些代码。 我们这周的主题是“被指认为有害的模式”,在这里为大家呈现一些我们“不该做的”源代码样本。 Brad Vincent.的ÜberUtils – Strings。不喜欢System.String?那么用C# 3.0扩展函数点焊一些有用的东西上去吧。Brad解释了为什么他的util会被认为不好: “我知道有些人肯定想说,这是滥用扩展函数,但看看我的字符串有多强大,在我的字典里,任何可以帮我更快更好地写代码的,都不能算作是滥用。这是很聪明的编码!” 这是他众多有用增补中的两个,你几乎不能将它认定为有害: 1: public static string XOR(string input, string strKey) 2: { 3: if (IsEmpty(input)) return input; 4: string strEncoded = string.Empty; 5: int nKeyIndex = 0; 6: for (int i = 0; i <…

0

每周源代码49 – SmallBasic老少皆宜的,有趣而简单且强大的编程

[原文发表地址] The Weekly Source Code 49 – SmallBasic is Fun, Simple, Powerful Programming for Kids and Adults [原文发表时间] 2010-02-09 13:18 我的两个小子一个只有2岁,一个不过4岁,不过我一直在寻找新的方法来教他们编程。当然我希望他们能更全面地发展,并且有更多的时间和我一起出去玩,但我觉得即使在编程和逻辑上有点基础的背景也会使他们更强。 由Vijaye Raji 创建的Small Basic 是一款简单(只有15个关键词)却强大的编程初学环境。尤其对孩子和没有技术基础的同志们来说,十分强大,同样,即使对专业的游戏开发者来说,也是足够强大的。实际上,Small Basic大概是我见过的最简单最快速的制作和发布基于Silverlight游戏的方法。继续读下去看看我为什么这么说。 Small Basic是MSDN DevLabs的一部分,最近才发布了0.8版。这是第8个安装,但我觉得他们不将它称为8.0版实在是太谦虚了。J 它支持国际多种语言,包括英语、中文、法语、德语、意大利语、日语、韩语、俄罗斯语、西班牙语、巴西语、葡萄牙语和土耳其语。所以如果你认识教计算机的老师,你可以把它推荐给他们。 看一下Small Basic Tetris 。例如你可以在安装了Silverlight的浏览器中运行它,就在这里。 页面右边罗列了应用程序所需的完整的Small Basic源代码。这里也有一些很棒的Small Basic应用程序的例子。 它有一个非常友好的IDE(集成开发环境),如下图所示,它灵活地运用了智能感应。IDE用它自己的方式提供你尽可能多的信息和文本,不仅仅通过智能感应“弧形”,还有右边文档的上下文相关的辅助。 我觉得更聪明的是“Graduate”按钮,它能将Small Basic程序转换成Visual Basic,使之能在Visual Studio中被直接使用。 下面是Small Basic文本模式应用程序的样式: 1: number = 100 2: While (number > 1) 3:…

0

每周源代码 46-Jeff Key摇动了Taskbar Meters,可监视你任务栏中的Win7 CPU,Memory和Disk

[原文发表地址] The Weekly Source Code 46 – Jeff Key rocks Taskbar Meters that Monitor your Windows 7 CPU and Memory and Disk in the Taskbar [原文发表时间] 2009-10-29 07:44 PM 看事物流行起来很有意思,即使只是互联网上的一些传播。事情是这样的,但更重要的是,我们将要谈论代码。也让我们使之完全清楚,就是Jeff Key不稳定。看左边的图片,介于他的两个“跛脚”创作。 首先,本周前些时候我发了一个名叫“亮点: 使用Windows 7新功能的应用程序清单序”的帖子。一两天后,我从前室友和兼职belay (业余攀登牵引员)Jeff Key (@JeffreyKey on Twitter)那收到即时信息(其实,那完全是一个谎言,但我和Jeff是多年的好友,在IM上有对方),信息说: 看到昨天你Win7功能的帖子了,所以昨晚把这个做好了,今早又把它贴到codeplex:http://taskbarmeters.codeplex.com/ 有些烂,但我就是这么做的。 多年来,Jeff的口头禅就是“说话起来容易,给我看代码。”他确实就是这样做的,用一些最具启发性的. NET为基础的小程序,获得了我们永远的钦佩和感激。Jeff就是这样做的。我访问了他的CodePlex网站,发现它有11个下载。 我推特上说过这件事然后就忘了。后来那个推特被Download.com(我听说过,给Jeff全部荣誉)Life Rocks 2.0(我从没听说过,也从未有人获得过荣誉)以及Lifehacker(我在Life Rocks上听说过)引用。稍后,我返回到CodePlex,发现有4152个下载!恭喜Jeff如此“烂” !;) 代码 当人们为之疯狂并下载这个小实用程序的时候,Jeff本人为什么这么谦虚,说自己的代码“烂”?Well,因为做起来太简单了,这可能是强烈的内疚感。;) Windows API Code Pack让它变得简单。 此外:实际上,.NET…

0

在Window IIS中安装运行node.js应用—你疯了吗

[原文发表地址]Installing and Running node.js applications within IIS on Windows – Are you mad? [原文发表时间]2011-08-28 08:03 我们团队中的一些成员正在努力优化node.js在Windows上的运行效果。你可能会问一些问题。 首先,node.js是什么? 如果你不熟悉node.js,我要说这是一个炙手可热的新型web编程工具包。要是你没听说过会让你觉得自己很过时,就好像几年前Rail上的Ruby那样风靡。同行们把它称之为“Node”,简单来说是服务器端的JavaScript。如果你在客户端做一系列的JavaScript,而且时常一做就是一整天,那为什么不在服务器端试试呢。学起来应该很简单,我猜想是这样的。 如果你是一个ASP.NET编程员,你可以把node.js看成是用JavaScript写成的IhttpHandler。其实它的等级更低, 它连HttpHandler都不是,这里我只是想做一个类比。Brett McLaughlin写的一篇有关Node.js 更多细节以及概述的文章很不错。文章的副标题就是“Node不可能解决所有的问题,但的确可以解决一些重要的问题”,这个描述很贴切。 更新1:为什么node.js那么重要? 为什么我们需要node呢?node有许多有趣的部分。它使用的是非常快速的JavaScript引擎V8,更重要的是它的I/O是异步的,而且与传统同步代码形成鲜明对比的是它的事件驱动。 举例来说,ASP.NET中的HttpHandler要用几秒来“做些什么”(如获取文件,访问服务等)如下所示: 1: public class SimpleHandler : IHttpHandler 2: { 3: public void ProcessRequest(HttpContext context) 4: { 5: Thread.Sleep(2000); //Do something that takes a while 6: context.Response.Write(“Hello from SimpleHandler”); 7: } 8:…

0