我是骗子,你是吗?

[原文发表地址] I’m a phony. Are you? [原文发表时间] 2011-08-17 09:15 Phony等同于phoney (fō’nē) 形容词pho·ni·er, pho·ni·est 1. a. 不真实,伪造的:一张伪造的信用卡 b. 假的,有嫌疑的:假名 2. 不诚实不可信,欺骗的:虚假的借口 3. a. 不真诚,伪善的 b. 骗取信任 我除了在微软做一些常规工作之外,我还会指导一些开发者和程序管理人员。最近我和一个年轻人聊了聊,他很有思想,天赋异禀,他说他正历经这一场信心的考验危机。他在自己觉得肯定不会栽跟头的事情上栽了跟头,导致整个项目停滞不前,甚至这种情绪还影响到了他的日常生活。 他说: “内心深处我知道我可以。从13岁开始编程,获得CS最高学位毕业,进入微软工作,但现在我觉得我像是个冒名顶替的。” 我告诉他,站起来,你不是一个人在战斗。 举个例子,我有大概30个域,但我真正出色的只在其中的3个。有时候当我登陆我的DNS管理器,我就会看到我的27个失败案例。我自我安慰说还有27个有潜力的内容,27个可能会很酷的开放源项目,现在只是缺少一点语言而已。如果知道点什么,就可以实现了。多可爱的骗子啊。 一星期前我打开Zero电子邮件,今天看看收件箱里居然有122封邮件,这真把我逼疯了。更搞笑的是我还教别人怎么管理他们的收件箱。多可爱的骗子啊。 我21岁的时候自视甚高。我觉得我就是世界的天才,不用你来告诉我任何东西。而随着年龄的增长,我越来越意识到我不可能知道所有的事情,而且脑袋也没以前转得快了。多可爱的骗子啊。 我试着每年学一种语言,成为一个Polyglot 程序员,但是我明显感觉到F#正渐渐被我遗忘,甚至我都不能完全搞清楚诗一样的Ruby。多可爱的骗子啊。 我以前西班牙语超好,还跟我太太一起学祖鲁语,但现在我跟西班牙当地人讲话,发现我要是能成功地点到一份burrito,就已经很庆幸了。我多年的阿姆哈里语也已经忘得差不多了。我的阿拉伯语,印度语和中文都只剩下一点点词组了。多可爱的骗子啊。(澄清:我绝对不是谦虚的夸耀,我是一个语言学家,语言是我的一部分身份,而我正渐渐失去它,让我异常沮丧。) 但这才是关键,我们有时都觉得自己很有欺骗性。我们都是骗子。但那就是我们长大的方法。我们陷入状况,只差一点点就可以轻易处理掉。然后我们可以处理好,我们不是骗子,我们会安然度过面对下一个挑战。 冒充者综合症不是一个全新的想法了。 尽管他们的能力一眼就显而易见,但是有症候群的那些人还是坚信他们是骗子,根本配不上所取得的成绩。他们把成功归咎于运气,时机,或是骗别人相信他们更智慧 ,更有能力的结果。 这个问题的反面则更有趣,那就是邓宁克鲁格效应。也许你的一两个上司经理就有这毛病。 邓宁克鲁格效应就是一种认识上的偏差,有这种病的人往往能力欠佳,总作出错误的决定,但他们的能力欠佳让他们还在认知 上无法意识到自己的错误。 阅读一下维基百科的文章很不错,不过下面这句话是你最该记住的佳句。 那些真正有能力的人总是低估自己实际有的能耐。 前几年,我收到一封来自播客听众的邮件。我在写这篇博文的时候突然想起来了,我找了些重点的句子放在这里。 我只是一个听你播客的普通听众,非常敬仰你,这点希望你能知道。但听到你最近在播客中说的一点,我感到很震惊,你说“每个人能有一份工作都是很幸运的。”并阐述说你也不例外。 我曾听到那些比你地位和成就低的开发者所持有的态度比你正面多了,他们觉得自己很优秀,所以随时都能找到一份工作,所以没有必要让现在手上的工作给他们太多的压力。你真的觉得你也有找工作的困难或者自己创业的困难吗?如果真是这样,那我觉得你对自己的不自信应该好好纠正一下了。 不过其实我真正担心的倒不是你,而是你说这番话对听众的影响。如果他们听到你这么说,那么他们自己也会受影响觉得要庸人自扰一下。 我非常欣赏这位听众的观点,在回复邮件中我也这么说了。也许我的观点深受西方文化影响,或者是典型的美国观念。我很好奇你们,那些非美国读者的想法。我还是坚持说大部分美国人都是这么觉得的。也许我们无法承认这一点。当我看到程序员写的博客文章标题是“我是个疯狂的忍者”或者“世界顶级程序员”之类的,我真的很好奇他们是不是太活在自己的世界里了,当然也许他们只是不那么谦虚而已。 我还是坚持我最初的陈述,我有时真的觉得自己是个骗子。有时候我开玩笑说,“嘿,今天是个好日子,我的脑子运转正常”或者当人家问我“最近好吗”,我总是回答“我运转正常。”我那么表达是因为我真这么觉得。我很高兴能有一份工作,当然我也可以去别的地方工作。我必须在微软工作吗?当然不是。如果我想努力,我应该可以去任何地方工作,甚至是小黛比点心蛋糕店里的IT部分工作。我把不安全感当做是一种动力去追求成功,继续教学。 我问了一些朋友是否也会这么觉得,下面就是他们的回答。 · 完全没有。我每天都在努力地工作,开发,夯实自己的技能,我试着让自己更创新,做出些结果。 · 很多时候我的确这么想!尤其是最近我在着手一个新的工作,要处理许多我不擅长的语言,然后就会想“哦,我花了10年的时间搞了多少语言”但这不代表我真的很棒。还有很多要学,谦虚的说,还是在不断进取的过程中。…

0

每周源代码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

RFC:节省流量网页平台安装(WebPI)线下模式

[原文发表地址]RFC: Web Platform Installer (WebPI) with an offline feed mode for bandwidth savings [原文发表时间]2011-09-24 07:45 我的妻子今晚正在斯威士兰王国。如果她是那里的开发者,希望通过网页平台安装来获取Visual Studio或者其他大流量下载,那她就得耐心地等待3G的网速了。如果顺利,她的ASDL最大速度会到512kbps,已经是上限了。我曾经也讨论过非洲国家及其它国家(比如新西兰)连接受限,实在是不好玩。我曾跟我太太说我很高兴能在国外生活,但是我需要我的网路。你钟爱的工具不能保证网速,这实在是说不出的痛苦。 我最热衷的就是确保产品可用,且能为顾客方便使用,工作会议中我还常常提醒Redmond Reality Distortion Field里的人,不是世界上每个人都拥有35megabit光纤速度的。 我们也试着把所有的东西都公开化透明化(可以说没有任何秘密),经常结果就是这样:他们在不确定是否安装之前就不会公布任何东西。那还是很不错的,至少我很理解。 不过,当我听WebPI团队的人告诉我说他们正在研究线下WebPI应用时,我今天就得把这个消息和亲爱的读者你们分享一下了。事情是这样的,我在查看开发者机子的每日构建。这不是终极体验,只是一项日常工作。他们正在考虑把这个一起加进去,但是他们要我放许多免责声明。免责声明!那就是了。介于这是个每日构建,问题总比答案多,所以我会向你展示它是如何工作的,同时再添加一些我的个人评论。 线下网页平台安装 问题是,网页平台安装假定的是你和公司的另50个人享用同样的网络,都能达到50次同样的x gig。它还假定了你的系统IS是连接到网络的。这对我们来说就是浪费的。 我觉得最理想的是有人拥有网速,然后又有充足的时间把他们想要的应用都下载下来,然后放在DVD或者网络分享上,然后所有的使用者就去点线下缓存就好了。公司可以每月刷新一下共享和种子。 WebPI中的产品都有一个“应用ID”或者产品ID。你得知道你想安装的东西的应用ID。比如,使用线下网页平台安装时,如果你想一次点击完成“所有网页内容”安装,你就要使用这个URL:http://www.microsoft.com/web/gallery/install.aspx?appid=VWDorVS2010SP1Pack。 看到“VWDorVS2010SP1Pack”部分了吗?那就是网页平台安装所需的应用ID。其中的所有东西都有一个应用ID,你可以把那些都串在一起。比如,你可以让http://www.microsoft.com/web/gallery/install.aspx?appid=MVC来为VS2010获取ASP.NET MVC 3。你可以通过逗号“,”分隔添加多个应用ID,以便获取多个产品和附属。 我正在测试一款叫做wpiutil.exe的线下指令行工具,不过我的计划是要和网页平台安装指令行工具融合起来。所以,尽管我显示的是两个工具,但请把他们看成是一个。 你可以在Atom Feed中找到网页平台安装所需的应用ID。主要的feed在https://go.microsoft.com/?linkid=9767054中,找起来有点麻烦,不过有指令行工具可以帮你找到你想要的东西。 我可以运行WebpiCmdLine.exe /list:all然后获取一大堆产品和应用裂变,收集我想要安装或者之后要线下缓存的ID。 Current language of installers is English –Previously Installed Products ID Title —————————————- AppFabric Windows Server AppFabric AppFabricSetup Windows Server…

0

每周源代码24-扩展版-.NET插件、提供商、属性、加载项和模块

[原文发表地址]The Weekly Source Code 24 – Extensibility Edition – PlugIns, Providers, Attributes, AddIns and Modules in .NET [原文发表时间]2008-04-18 01:43 我对开发人员们怎么运用插件和其他方法来扩展应用程序越来越感兴趣了。亲爱的读者,请大家看看我正在进行的最新的通过阅读源代码使自己成为一个更好的开发者的博客。亲爱的读者,我现在向你们展示“每周源代码”系列中的第24篇。 “扩展”一个应用程序或framework有很多方法。或许有许多种模式。你可以参见Gang of Four Patterns using C# over here.来了解运用C#D的四种模式。 我这周一直在查看可扩展的或已经扩展的三大块代码。首先是xUnit.NET,代码块上的新单元测试框架(直到最后我尝试了文件/新建项目,然后蹦出了"HanselTest2000"),第二个是2008年3月份,Miguel Castro在一个题为Sexy Extensibility Patterns的CINNUG会议上发布的源码。Miguel用该模式创建了名为CodeBreeze的代码生成/数据映射工具。前不久在DNRTV上展示过。第三个是Windows Live Writer和WLW SDK的插件设计。 本博客并非试图给出一张完整的列表,只是里面有很多很酷的代码,这让我对扩展一些东西很感兴趣。我很喜欢这三个范例,因为每个范例都有一个以上的扩展方法。 扩展软件其实就是添加一些未启动的功能。有很多方法可以做到。例如,添加一个类似VBA或者PowerShell或托管脚本的脚本引擎将是途径之一。如要创建一个公共脚本-API将是对这个主题的转折点。主机通过基类派、实现借口或源代码事件添加加载项或插件。使用System.AddIn,也是个办法。使用依赖注入容器,是扩展应用程序的一个更先进更有效的途径。 xUnit.NET xUnit.NET是Brad Wilson和Jim Newkirk(以前以NUnit闻名)创建的单位测试框架。开发人员们对其框架的初步反应是一个大大的疑问:“说真的,我们真的需要另一个测试框架么?”但他们还是迎难而上,正如小模型框架一样,他们开始获得应得的尊重。它有一个MSBuild任务,Resharper和TestDriven.NET测试试验支持,更重要的是,该框架有些有趣的扩展点。 xUnit.NET源代码是非常整洁的。这真的是句恭维话。就像你到别人家做客,你在问:“装饰设计师是谁?“的同时意识到该房间如此干净,井井有条。 顺便说一句:在Visual Studio中使用“解决方案文件夹”的人并不多。说真的,伙计们,只需单击右键,然后“添加/新的解决方案文件夹,”,开始拖动周围的文件,立马就整洁了。 他们将一些有争议的地静态扩展方法分成单独的项目,包括NET 3.5-特定功能的xunitext和xunitext35。所以,对于框架“下行”的开发人员来说,该扩展方法无疑是一个粗糙的扩展点。 他们将属性作为扩展框架的主要途径。例如,如果你想知道测试前后的情况。 从BeforeAfterTest属性上导出一个新属性,然后对其进行测试。[Fact]属性是标准属性。他们用它来取代[Test]: 现在,Before()和After()的代码将执行此次测试。 如果你有自己的测试框架,但你想使用xUnit.NET。这是你可以看到[RunWith]属性,你可以自行测试,例如,你可以下指令如"run this test with nUnit."。可以通过两种方法来使用,可以输入[RunWith(typeof(MyRunner)]或者使用自定义属性,如: nUnitCommand实现了一个非常清晰的ITestCommand接口,“描述了在测试类中执行所有测试的能力。”…

0

Scott Hanselman 的针对Windows 的2011终极开发和实用工具列表

[原文发表地址]Scott Hanselman’s 2011 Ultimate Developer and Power Users Tool List for Windows [原文发表时间]2011-12-01 11:06 AM 每个人都收集实用程序,大多数人都有一个他们认为不可或缺的程序列表。这儿是我的列表。每个程序都有不同的目的,每周我可能每个至少接触几次。对于我来说,"util"意味着实利,它意味着不使我的生活杂乱。如果它节省了时间,而且和我的生活无缝融合,那它就是成功。许多/大多数程序是免费的,有些不是的。那些不是免费的很有可能值得您试用 30 天,或许值得花钱去买。 这里是我的 C:\UTILS 文件夹中的大多数内容。这些都很受人喜爱和使用。如果我没有时常使用,我不会推荐它们的。因为我喜欢它们,所以才放在列表中。在此列表中没有人需要付钱,并且不接受钱。 个人插语:,在我的每周播客Hanselminutes可以发现更多酷的工具和编程技巧,或者我与Rob Conery的另一个称为This Developer’s Life 的节目。 这是对2003、 2005、 2006、 2007和2009列表的 2011 年更新版本,目前囊括了我其它的列表。参考最新的Hanselman终极工具列表时,请链接到http://hanselman.com/tools 。请随意参与评论,博文更正或建议以后想要提交的文章。我很有可能犯错误,并可能忘记了几个我经常使用的实用程序。 • 2011年终极工具的新条目是绿色的。有很多补充,更新和修改的条目,并修复了链接。在八年以前我就开始做此列表,它就像 60 年代的互联网。我也删除了一些在 2011 年不重要的旧东西。 • 2009日语翻译:Yasushi Aoki翻译了2009针对日本人的工具列表!您可以在这里找到http://www.hanselman.com/tools/ja-jp/ ?: ???. 说明: 请不要整个地复制它,我宁愿您链接到http://hanselman.com/tools 。我很欣赏您 的热情,但像这样的帖子需要很大的工作量,我会很感激那项工作留在那,以及被链接到,而不是在net周围被复制/粘贴。如果您在阅读此内容,并且不是在http://hanselman.com ,也许您会愿意在原始 URL加入我们? 改变生活和工作的十大实用程序 "讲述好的问题就解决了一半问题"。Charles Kettering "知道是半个战争。– Duke,…

1

每周源代码39 – Silverlight3中的Commodore 64 仿真器

[原文发表地址]   The Weekly Source Code 39 – Commodore 64 Emulator in Silverlight 3 [原文发表时间]   2009-03-27 04:26 我很高兴在上周采访了Pete Brown,和他讨论他正在研发的Silverlight 3 Commodore 64 仿真器。他几分钟前刚在CodePlex上发布,但我已经拿着代码玩了好一会儿了。你可以看看Tim Heuer的博文,详细了解怎样着手Silverlight 3 Beta,以及你需要的一些工具,或者你也可以看一些仿真器的相关视频。 记住Pete正在做的是一项完全出于热爱的工作,所有的代码都是在“做出来”模式下写出来的,所以在美学概念上没什么突出的。许多代码都是直接从Frodo或Sharp C64仿真器中的开放资源C++中直接移植过来的。 其中的确有些非常棒的想法,所以我想在这次的每周源代码中重点关注一下(我承诺我会做更多”每周的”,就从现在开始)。 自动生成视频流 Pete想让屏幕绘制越快越好,最好是50赫兹(一秒50次)。他最初创建PNG和BMP并以尽可能快的速度将其置于屏幕上,然后Silverlight团队中的一个成员提议“做一个视频”。他说的“做个视频”是什么意思呢?他建议用Silverlight MediaElement(“视频播放”控制),以DataSource的形式控制视频。他要动态地生成一个不会结束的影片。 这意味着UI XAML将主要是: 1: <MediaElement x:Name="VideoDisplay" 2: Grid.Row="0" 3: Grid.Column="0" 4: VerticalAlignment="Top" 5: Stretch="Uniform" 6: IsHitTestVisible="False" 7: Margin="4" /> 在背后的代码中,他创建了从MediaStreamSource继承的VideoMediaStreamSource,并在博客中发布: _ 1: _video = new…

0

每周源代码38: ModelState.IsValid的属性为False,源于ModelBinder从RouteData获取值

[原文发表地址]   The Weekly Source Code 38 – ASP.NET MVC Beta Obscurity – ModelState.IsValid is False because ModelBinder pulls values from RouteData [原文发表时间]  2008-12-04  06:41 AM 我在我正做的应用程序里发现了一个错误。我不知道那是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

每周源代码37:轻松实现地理定位(反向查找IP地址)

[原文发表地址]  The Weekly Source Code 37 – Geolocation/Geotargeting (Reverse IP Address Lookup) in ASP.NET MVC made easy [原文发表时间]   2008-11-27  07:30 AM 首先我想说,我不断追求并奉信通过阅读源代码使自己成为一个更好的开发者,亲爱的读者,我给大家呈现第37篇“每周源代码”,之后还会有无尽的续篇。 我正和Rob Conery、Dave Ward以及其他人一起做一个边缘项目。鉴于用户们源源不断地来页面访问,他们的位置源于其IP地址,我希望可以马上着手一项调研。我想用“地理定位”或反向IP地址查询获取IP,如127.0.0.1并转换成“纽约,NY。” 你能买到很多种服务和数据库,用来帮你实现web服务器调用指令,获取位置信息。有的会涵盖经纬,有的则显示城市名称。这些服务中有的相当昂贵,要花费500美元甚至更多。 我找到了两种解决方案,一个是服务方,那就是社区计划,而另一个则是客户方,就是从Google获取。 利用hostip.info实现基于社区的地理定位 如果你在浏览器中点击进入http://www.hostip.info,它会推测你的位置,并且显示它所估计的你所处位置及周边50到100公里范围的地图。这一项基于社区的项目使用免费可得的数据库作技术支持。在他们的数据库里,已经有超过860万的信息条。 更有趣的是,他们还为已定位的IP地址查询设定了清晰的API。 比如: http://api.hostip.info/get_html.php?ip=12.215.42.19&position=true   Country: UNITED STATES (US)  City: Sugar Grove, IL  Latitude: 41.7696  Longitude: -88.4588 如果你想添加信息,只要点击: http://api.hostip.info/?ip=12.215.42.19 你会收到一个包含很多有用信息的XML文档。 所以,我为这个服务编写了一项便捷的.NET包装。注意注释中的XML文件样本。我还为调试设置了一个默认位置。这个代码看上去虽然不是最清楚的,但XML的LINQ让它变得简单易懂。 1: public class LocationInfo 2: {…

0

每周源代码34- F#的兴起

[原文发表地址]  The Weekly Source Code 34 – The Rise of F# [原文发表时间]  2008-09-25 08:49 AM 首先,我要提醒大家,请大家看看我正在进行的最新的要求阅读源代码以编出更好的程序。亲爱的读者,我为大家呈上” 每周源代码.”的第34篇,之后还将继续。 F#,大家都急于了解F#和它的功能,F#2008年九月的CTP是在几周前出来的。和我讨论的同事也正在努力发掘它。下面是我们的目标: “为了研究编程语言而开发的F#将炙手可热的类型安全、简洁、性能、表达性脚本和高质量,获得良好支持的现代运行库系统相结合。” 它看起来更像一种研究语言,因为它内置于Visual Studio中,而且在语法突出显示、智能感知等方面都看起来很不错。亲爱的读者,这些信息对你来说可能是昨日黄花了,但是F#已经优化到更高的水平。这款发布将F#推向了和C# ,VB同等位置。它还有了自己的在MSDN上的F# 研发中心。似乎还蛮有模有样的。 Vertigo’s Rick Taylor在下面的图示中解释了F#的内容,意义以及方法: “除非你特别制定,否则F#是不可改变的,在一定程度上有点像C#的构造字符串。它会拓展到一些你未曾预期的地方。例如,一旦你在一些特定值中设置了int,你就不能改变了,除非你将其标记为可以改变。出现这一情况的原因是语言是主要的功能之一。函数式语言的编程中包含函数的返回值-但是每个值或每个集合的值都是自己的实体,如果在一个方法中改变它,将产生副作用,即在功能语言中让人不快的因素严格意义上,函数返回值,但不会改变参数或外面的部分(这就附带的产生了前面提到的单子模式)。F#虽遵循函数编程的规则,但也允许使用可变关键字来打破这一规则。 学习F#的最佳途径是什么呢?这里倒有几个不错的办法。首先,有点高调的自我推销下吧,我和几个优秀的F#的开发人士合做了两个关于F#的博客,还做了几个不错的关于.NET Rocks和Herding Code episodes的博客。 Starting Small with F# with Dustin Campbell F# with Robert Pickering .NET Rocks had Ted Neward and Amanda Laucher talking F# recently F# on…

0

每周源代码29 – Ruby,Shoes和第一个Ruby病毒

[原文发表地址]  The Weekly Source Code 29 – Ruby and Shoes and the First Ruby Virus [原文发表时间]  2008-06-24  07:47 上周我在挪威参加挪威开发者会议,所以恐怕这个月的每周源代码要变成双周源代码了。一次国外旅行能让人放松下来,感觉太棒了。这次旅行让我完全沉浸其中。不过我还是在慢慢地回归到现实的生活中来。 我最近对运用插件和其他工具扩展应用程序这类越来越有兴趣了。秉持着我一贯的信念——勤读代码,有助于成为更高水准的程序开发者——亲爱的读者们,这里我为你们奉上第29篇“每周源代码”,之后也会不断继续。 本周的源是为Ruby设计的“一点”式外挂。这非常酷,因为它集结了许多技术,形成了十分清晰的终极用户体验。其目的是使Ruby的GUI应用程序轻松运行,这的确有效可行,而且在各个层面的表现都非常突出。感谢Sam Saffron告诉我这个! 最开始,是名叫“为什么是幸运的僵硬”(或者简称"_why")的黑客提到的,所以这起源很早,而且有错误。你可以在GitHub上查看代码:http://github.com/why/shoes/tree/master 或通过“git clone git://github.com/why/shoes.git”克隆整个结构。 Shoes 在我看来,Ruby是一种非常美观,赏心悦目而且灵活的语言。Shoes则是使用Ruby制作窗口应用程序的GUI工具包。我在每周源代码12中曾提及过。Shoes是一个传奇,原因有很多,不过最重要的是因为它具有在所有软件文档历史上最伟大的API文档。在Shoes开发中最主要的著作叫做《没人知道Shoes》,这本书非常棒,连Chris Sells都对它爱不释手。 这是用Ruby和Shoes写成的通讯录程序样本的一部分: 1: Shoes.app :width => 320, :height => 350 do 2:  3: stack :margin => 40 do 4: stack :margin => 10 do 5: para "Name"…

0