RSS 2.0 Feed
2007-10 Entries
摘要:在 Mike Henderson 的博客上看到这个一览表(他建议你按顺序安装): 1. IIS5.1 (XP) / IIS6 (Server 2003) / IIS7 (Vista) - 你也可使用Visual Studio中内置的Cassini 服务器 2. Visual Studio 2005 Service Pack 1 for Visual Studio 2005Vista update for VS2005 (如果你在使用Vista做开发的话) 3. Visual Studio 2008, Beta 2 4. Windows Update - 确认你安装了所有的近期更新 5. AJAX策略更新 - 这确保你在VS2005里建造基于AJAX的应用时不会导致程序集依赖于VS2008/.NET 3.5 6. Silverlight 1.0运行时 7. Silverlight 1.0 SDK 8. Silverlight 1.1 Alpha Refresh 运行时 9. Silverlight 1.1 Alpha Refresh SDK (2007年9月更新版) 10. Silverlight Tools for Visual Studio 2008 Beta 2 11. * .NET 3.0 SDK (不是一定需要,但如果要做.NET 3.0 开发,一定需要,而且里面包括了一个可以做快速原型开发的工具:XamlPad)。 12. Expression Blend 2 九月更新版 (不是一定需要,但设计Silverlight内容时极其有用) 13. ASP.NET Ajax Extensions 1.0 14. ASP.NET Futures (包含基于ASP.NET的Silverlight控件) 全部下载的话,要下载7.6个小时!同时,你也许需要下列工具:Expression Media EncoderSilverlight Quickstarts ASP.NET AJAX Controls Windows Server 2008 RC0 SDK   至此,如果你还没发晕的话。。。就让我们开始Silverlight开发吧!...[阅读全文]

posted @ | Feedback (10) | Filed Under [ ASP.NET/IIS .NET WPF/SilverLight ]

摘要:最近,O'Reilly出版了Toby Segaran著的《Programming Collective Intelligence - Building Smart Web 2.0 Applications》(据说该书将由博文视点翻译出版),讨论如何从数据(譬如用户生成的数据)里挖掘信息的各种算法和技术,非常实用,对正在建造Web 2.0网站的开发人员尤其有用。跟大多数数据挖掘和机器学习的书不一样,书里包含了大量Python代码,使用网上现有的数据集或可以轻易采集的数据(譬如blog)或公开的API(譬如Digg,eBay的),助你理解各种算法,解释如何从大量的数据中获取关于用户体验,营销性,个人趣味,和人类行为的认识。该书得到了首创“Web 2.0”一词的O'Reilly公司CEO Tim O'Reilly的大力推荐。 其中的第二章《Making Recommendations》讨论了协作性过滤技术(Collaborative Filtering),通过搜寻一个很大的群体,从中找出与你趣味相似的人,然后把这些人喜爱的其他东西,聚合起来,创建一个推荐的排行榜(譬如电影推荐,产品推荐等等)。书中使用了del.icio.us的数据和API,可惜他们最近更改了API,所以无法使用书中的代码做练习。但想起了CSDN的网摘功能,花了点时间把大部分的网摘记录爬了下来(感谢CSDN的曾登高提供其中几个人的数据)。我把记录都放在一个名叫Post的表里了,它包含URL(用户保存的文章的地址),Title(用户保存使用的标题),UserName(用户名),PostDate(保存网址的日期)这些字段。 得到的数据集中包括3753个用户,不同的链接数为68304,最多的一个人保存了7519个链接,平均每个人保存了23个链接。保存人数最多的是这篇贴子, 40种网站设计常用技巧 链接的来源是这样的, 网站 链接数 community.csdn.net 21770 blog.csdn.net 12260 blog.donews.com 1865 topic.csdn.net 1836 news.csdn.net 1526 www.cnblogs.com 1237 book.csdn.net 831 dev.csdn.net 810 download.csdn.net 773 spaces.msn.com 758 tech.sina.com.cn 719 www.donews.net 491 blog.sina.com.cn 438 club.book.csdn.net 378 www.infoq.com 336  前十位CSDN网站占了7个,好像不是很健康啊,。 言归正传,那么针对CSDN网摘记录怎么来定义用户间的相似性?作者在这一章里讨论了欧几里德距离和Pearson相似性公式,其他的公式可以参考《数据挖掘导论》一书2.4节中的讨论(CSDN免费提供了几个章节)。在这个练习中,我将采用Tanimoto系数来定义相似性(图片来自原书网站),   在这里Na代表用户a保存的所有链接数,Nb代表用户b保存的所有链接数,Nc则代表用户Na和Nb间共同拥有的链接数。譬如,如果我保存了10个链接,你保存了20个链接,我们共有的链接为5个,那么我们间的相似性为5/(10+20-5)=0.2。 使用Tanimoto系数的的原因是对链接这样要么有,要么无的二元性的数据感觉很直观,而且容易计算(用数据库操作即可)。 先生成一个表, create table RelatedUser (username1 nvarchar(50), username2 nvarchar(50), urlcount1 int, urlcount2 int, commoncount int, coeff decimal(18,16)) 然后填充其中的数据,针对用户做个cross product,然后更新共有的链接数以及各自的链接数, insert into relateduser (username1, username2, commoncount)select username1, username2, count(url) from(select p1.username as username1, p2.username as username2, p1.urlfrom post p1, post p2where p1.url=p2.urland p1.username <> p2.username) tgroup by username1, username2 go update relateduser set urlcount1 = ps.urlcount from relateduser uinner join (select count(*) urlcount, username from post group by username) pson u.username1 = ps.username go update relateduser set urlcount2 = ps.urlcount from relateduser uinner join (select count(*) urlcount, username......[阅读全文]

posted @ | Feedback (10) | Filed Under [ Web Trend Data Mining ]

摘要:就象我在前面一个贴子的答复里说的,TDD反转了传统的设计-编码-测试的过程,变成测试-编码-设计(重构)的过程,这会带来什么样的效果,你大概可以从无穷多的地方读到,我就不重复了。在这里我只想对上个贴子里那个简单的例子做个示范,写些小测试,认定需求里的假设,按部就班地推出满足需求的行为。有点小题大做的感觉,而且由于该例子的procedure的本质,并没有显示出TDD的威力来。因为比较长,我把它放在文章里了,点击这里阅读。 ...[阅读全文]

posted @ | Feedback (2) | Filed Under [ .NET TDD/DDD/BDD ]

摘要:在JavaEye上看到gigix的一篇贴子,《测试如何驱动开发》 “需求:反转一个句子 我可能会写出以下的测试——写一个测试,然后写代码让测试通过,然后再写下一个测试。 自己看吧。 代码 public class StringReverseTest {       # Test 1 public void testShouldSplitSentenceIntoWords(){         StringReverser sr=new StringReverser();         String str = "This is a sentence";         Assert.assertEquals(4, sr.split(str).size());       Assert.assertEquals("sentence", sr.split(str).get(0));         Assert.assertEquals("a", sr.split(str).get(1));         Assert.assertEquals("is", sr.split(str).get(2));         Assert.assertEquals("This", sr.split(str).get(3));       }       # Test 2 public void testShouldReverseSentence(){         StringReverser sr=new StringReverser();         String str = "Tdd is a software devolopment technology";         Assert.assertEquals("technology devolopment software a is Tdd",sr.reverse(str));       }       # Test 3 public void testShouldAlwaysReverseSentences(){         StringReverser sr=new StringReverser();         String str = "This is Yet Another sentence";         Assert.assertEquals("sentence Another Yet is This",sr.reverse(str));       }     }     ” 他写的第一个测试方法名叫“testShouldSplitSentenceIntoWords”, 是验证StringReverser这个类会用split方法将一个句子分成4个词,这4个词的顺序与原来句子里的顺序相反。 第二个方法名叫“testShouldReverseSentence”,测试这个类的reverse方法把一个句子里的词反向。 第三个测试方法叫“testShouldAlwaysReverseSentences”,做同样的事情。 读完测试代码后,虽说测试代码有颗粒大小之说,但还是感觉这里好像跳跃比较快。当然,TDD中测试代码的步子是因人而已的。 如果是你做,你会怎么做?怎么写测试代码?然后为让测试通过,该怎么编写应用代码? 记住,“Test-Driven Development Is Not About Testing”。 当然,原来的需求不是很清晰,“反转一个句子”的确切定义是什么?譬如,这个句子允许象句号这样的标点符号么?如果允许的话,反转后,这句号是出现在前面还是后面?这句子里允许有嵌套的句子么?譬如这样的句子, He said, "This is confusing..." "This is confusing..."本身需要反转么还是可以当作一个单元而不需要反转? 等等,但根据上面的测试方法的实现,我们先来把需求整理一下,我们会传给这个类一个字符串,字符串中内含N个词,词之间有空格隔开,你的任务是把这个字符串里的词反向排列后再用空格隔开将其输出来。(虽然象我这样爱吹毛求疵的人大概还会问,如果两个词之间有多个空格,输出时,也需要输出多个空格么?)至于怎么排除其他类型的字符,譬如,含有标点的,嵌套句子的情形,假设在前面已经有个类把用户原先输入的字符做过整理了。 再考虑一下,如果需要保留空格的多少又怎么从测试驱动设计?如果遇上“test-driven”这样的组合词呢?把这些认为是需求的改变好了,在面临需求的改变时,你又该怎么做?你的代码是否容易修改? 同时参考一下第二页上“抛出异常的爱”的答复。...[阅读全文]

posted @ | Feedback (3) | Filed Under [ TDD/DDD/BDD ]

摘要:在Scott Hanselman的这个博客贴子里,你能找到Scott Guthrie最近在ALT.NET大会上做的MVC框架示范的录像 http://www.hanselman.com/blog/ScottGuMVCPresentationAndScottHaScreencastFromALTNETConference.aspx 这里是这个录像的网址 (需要Silverlight):http://www.hanselman.com/silverlight/ScottGuAtAltNetConf 如果你无法使用Silverlight,那么用这个直接的录像链接 (Scott Hanselman警告说,这些链接也许会有变动,所以最好通过他上面的博客贴子来访问这些链接):http://download.microsoft.com/download/f/0/8/f0830f07-44db-4eea-ace3-8865856c8d65/ScottGuOnMVCatALTNET.wmv 同时,在Hanselman的贴子里,还有一个他做的MVC+IronPython示范(C# Model,IronPython Controller和View,以及一个IronRuby视图引擎!)的录像http://www.hanselman.com/silverlight/ScottHaAtAltNetConf http://download.microsoft.com/download/f/0/8/f0830f07-44db-4eea-ace3-8865856c8d65/ScottHaOnDLRandMVCatALTNET.wmv...[阅读全文]

posted @ | Feedback (1) | Filed Under [ ASP.NET/IIS .NET IronPython/IronRuby/F# ]

摘要:上个月,NUnit的作者James Newkirk宣布推出了新的单元测试框架,xUnit.net。他列出了从以前的单元测试框架得到的教训后所做的改动: 每个测试方法都对应一个新对象实例。 为提高测试的隔离性, 改变了NUnit V2.0 的做法,xUnit.net为每个测试方法生成一个新实例。具体理由参考James Newkirk的博客贴子《Why variables in NUnit [TestFixture] classes should be static? 》和MartinFowloer的讨论《JunitNewInstance》。 除去了[SetUp] 和 [TearDown]。 James Newkirk在名为《Why you should not use SetUp and TearDown in NUnit》的博客里讨论了跟SetUp/TearDown相关的问题,这是非常有争议的,参考该贴子里的回复。 除去了[ExpectedException]。 不再使用标记特性的方法,而是回到老式的JUnit Assert.Throws风格。这可以避免2个重大问题,1. 使用 [ExpectedException]的话,有可能因为错误的方法调用抛出的异常而掩盖了真实的错误。2. 允许你的测试继续遵守 Arrange-Act-Assert 模式。 提供了类似Aspect的功能。 xUnit.net 极大地方便了用户生成扩展特性类来把横切的关注附加到测试方法上。blogs.msdn.com的Casper示范了一个改变运行测试方法线程身份的例子。     减少了自定义特性的数目。xUnit.net不是靠泛滥的自定义特性,而是依赖语言特性来提供类似功能:      除去了[TestFixture] ,所以测试代码可以存在于任何地方。 [Ignore]可以通过[Test]的Skip=参数来表示。 除去了[SetUp] 和 [TearDown]。 [ExpectedException] 被Assert.Throws替代。 [TestFixtureSetup] 和 [TestFixtureTearDown] 可以通过实现ITestFixture来达成。 添加了对测试的IDisposable支持。 xUnit.net使用了泛型来实现类安全的比较操作,譬如Equal和NotEqual,以及使用匿名代理来实现Assert.Throws。譬如, Assert.Throws<InvalidOperationException>(delegate { operation(); });  // .NET 2.0      Assert.Throws<InvalidOperationException>(() => operation());  // .NET 3.5 xUnit.net目前只提供基于控制台的测试runner。xUnit.net还提供了很多扩展性: Assert的扩展性。通过使用实现了IComparer<T>的自定义比较器,你可以扩展Equal, NotEqual, InRange, 和 NotInRange等概念。在Samples项目里,有2个例子,一个是做大小写不敏感的比较,另一个是只对DateTime的日期部分做比较。    测试方法的扩展性。如何运行一个测试方法的定义是可以扩展的。有2个例子,1. 在扩展DLL里,可以通过[Theory] 来实现数据驱动的测试,2. [RepeatTest]特性可以连着多次运行一个测试方法。 测试类的扩展性。如何运行一个测试类的定义是可以扩展的。 譬如在扩展DLL中,[RunWithNUnit] 特性允许你在同一个程序集中混合xUnit.net 和 NUnit 测试,然后可为任何xUnit.net runner所运行。...[阅读全文]

posted @ | Feedback (3) | Filed Under [ .NET ]

摘要:目前市面上有4本引人注目的WPF图书, Charles Petzold的《Applications = Code + Markup》 Adam Nathan的《Windows Presentation Foundation Unleashed》 Chris Anderson的《Essential Windows Presentation Foundation》 Chris Sells的《Programming WPF(第二版)》 在Windows平台上编过程的,大概没人不知道Charles Petzold的大名,知道Adam Nathan的大概不多,但他的前一本书《.NET and COM》被奉为相关主题的权威著作。Chris Anderson是WPF的架构师,而Chris Sells在技术界也广为人知,最新著作包括《Windows Forms 2.0 Programming (第二版)》和《ATL Internals》。  今年四月份,《Coding Horror》博客的作者Jeff Atwood以《How Not To Write a Technical Book(不应该这样写技术图书)》为名,比较了前两本图书,引起轩然大波,不少重量级的人物,包括作者本人,都加入了辩论。 Jeff Atwood认为,Nathan的书是绝对的赢家,理由大概翻译如下: “。。。。(Nathan的书)全书满是图表,屏幕截图和插图,辅助说明代码的涵义 书中文字间穿插了许多有用的彩色侧栏,例如深究(digging deeper),常见问题(FAQ),和警告(warning)等。 代码/标识片断较短,比较容易消化,而不是长篇累牍的文字占上好几页 慷慨使用了大量的列表,表格,副标题等文本元素,提供了极好的可扫描性(scannability) 有一种幽默感,不令人讨厌或倒胃口 全书全彩印刷 Nathan的书是出色的佳作,读上去象博客,可以跟网上能找到的任何东西一较长短。而相比之下,Petzold的书是没完没了的文字和冗长的代码的灰色的海洋。书中图表寥寥无几,每次遇上个图表,都会让人喜出望外。还有,该书还将代码和标识人工分开,前半本书都是C#代码,直到下半本书,你才能看到任何XAML标识,尽管XAML是WPF中最重要的新特性之一,且是开发人员最不熟悉的特性。 我猜这样老派做法是Petzold的典型风格。从一个认为Visual Studio腐蚀了软件开发人员的脑子的人那里,你还能期待什么呢? 任何人打开过这2本书的话,其手法之不同,一目了然。一本书看上去令人注目,充满乐趣,引人入胜,另一本书看上去很痛苦的,教科书式的苦差,相当于用记事本编写代码一样。Petzold是个优秀的作者,但写作本身并不能弥补他的书布局设计上的严重不足。 真是很可惜,我非常喜欢Petzold前面一本书《代码(Code)》,充满了美妙的插图,整个就是对个人计算机的情书。虽然我非常尊敬Petzold,你应该避开他的WPF一书,而是买Nathan的那本书,你会喜欢它的。出版商注意了,如果技术书都象这本书一样,我肯定还会买许许多多本这样的书的。 。。。” Charles Petzold对这样的批评并不以为然,甚至说出了气话:“Prose is dead. PowerPoint has won (传统写作方式已经死了,PowerPoint赢了)”。 Don Box则指出,作为图书的“消费者”,如果一门技术仅仅是为了完成手头的工作,那么他是绝对不会买什么书的。他大概会使用Reflector钻研一下相关技术,也会在网上搜寻一下,花上半个小时看一下搜索结果。对这类任务,他大概会一边做一边学习如何使用相关技术。 但如果一门技术与他要打造的东西息息相关,那么他会购买很多相关的图书,认为在将来总会从其中得到收获。 那么他会选择什么样的图书呢? 他会阅读相关主题最简短的书,他的理由是,1,他没时间。2,他发现如果一本书长到千页,很多时候是这些书的作者没有略去不相关的细节,或者包含了太多非中心的主题。3,一本简短的书反应出书的作者对相关技术做了去粗取精的工作,书中内容往往切中要害,极富深知灼见。 在随后的一个贴子《技术书还是以内容为主,对么?(Content is Still King, Right? Right? (Please?))》里Charles Petzold作了解释,主要对Jeff Atwood的技术图书的标准不以为然,认为不应该以颜色论短长,而应该用具体内容作为标准。 Don Box为后两本书做了同样的序,他说,“This book has taught me a whole lot more. Now that it's all shipped, let the light blinking begin!” Chris Anderson一书的另一个序作者是Chris Sells,Chris Sells一书的另一个序作者则是Chris Anderson,既是好友,又是竞争者,是多么美妙的事!...[阅读全文]

posted @ | Feedback (2) | Filed Under [ 书籍 .NET WPF/SilverLight ]

摘要:根据Jeffrey Palermo,在刚举行的ALT.NET大会上,Scott Guthrie 对他的团队正在开发的MVC框架做了示范,预计在今年年底推出CTP版本。其中将包括: 内在支持控制器的TDD模型 提供ASPX (不带viewstate或postback)作为视图引擎 提供了可为其他视图引擎(譬如MonoRail的)所用的hook 对控制器依赖注入的控制反转(IoC)容器的支持 提供对URL和导航的完全控制 整个过程的插拔式支持 关注分离 与ASP.NET的良好集成 同时支持静态和动态语言 具体细节参考Jeffrey Palermo这里的博客贴子。...[阅读全文]

posted @ | Feedback (8) | Filed Under [ ASP.NET/IIS ]

摘要:这是个漫长,炎热的夏天,期间经历了5个项目,可谓身心俱累。 非常对不起的是,Scott的博客的翻译几乎中止了。偏偏Scott又非常多产,大概错过了40多个博客贴子,其中包括很精彩的LINQ to SQL系列,但我计划在以后陆续补全其中精彩的博客贴子。如果有谁愿意和我共同翻译的话,请与我联系,谢谢!...[阅读全文]

posted @ | Feedback (16) | Filed Under [ 杂类 ]