qcon_从QCon San Francisco 2008中学到的主要知识点和教训

qcon

在本文中,我们介绍了许多博客上 有关 QCon的博客的观点和观点,以便您可以体会到QCon San Francisco(2008年11月)的印象和经历。 从最初的教程到最后的会议,人们在他们的博客中讨论了QCon的许多方面。 您还可以在Flickr上看到许多与会者拍摄的QCon照片,以及通过Twitter发布有关QCon的数百条推文

这次QCon是InfoQ的第四次会议,也是旧金山的第二届年会。 该活动是与在丹麦举办JAOO会议的公司Trifork合作制作的。 注册的参与者超过460名,其中60%的参与者是团队负责人,架构师及以上。 北美有80%的人参加,欧洲,亚洲和南美有20%的人参加。 肯特·贝克(Kent Beck),马丁·福勒(Martin Fowler)和蒂姆·布雷(Tim Bray)在旧金山QCon上发表了100多位发言人。 QCon将于每年的11月左右继续在美国运行,而QCon London将在2009年3月11日至13日运行。

目录

讲解
* 实用的Erlang编程
* 认证的Scrum Master
* JRuby和JRuby on Rails入门
* 领域特定语言
* 敏捷管理之禅

主题演讲
* 马丁·福勒(Martin Fowler)和丽贝卡·帕森斯(Rebecca Parsons):敏捷主义者和建筑师-盟友而非对手
肯特·贝克(Kent Beck):等一下
* Tim Bray:不断变化的存储范围内的应用程序设计

面试

RESTFul Web集成实践
* HTTP状态报告
* RESTful企业发展
* 使用Erlang和Yaws构建RESTful Web服务
* 引入真实世界的REST
* 使用REST设计企业IT系统

解决方案跟踪
* 管理架构的黄金法则
* 开放标准制定:机遇还是约束?

性能和可伸缩性
* 为性能和可伸缩性进行架构设计:小组讨论

敏捷
* 团队合作是个人技能:如何随时组建任何团队
* 敏捷性:在个人层面上的可能性
* 响应式设计
* 超越和通过大门

企业中的Ruby
* MERB:当灵活性和性能至关重要时
* 为企业扩展Rails

云计算:以网络为平台
* Web作为平台:市场状况
* Google App Engine和Google Data API
* “将东西挂钩”-耦合,消息传递和对话

应用功能和并行编程语言
* Haskell和艺术
* 强类型的特定领域嵌入式语言
* 购买功能:不变性和演员冒险
* 原教旨主义者功能程序员

有效的设计和简洁的代码
* 行为驱动的开发-通往有效设计和简洁代码的道路
* 改进代码的10种方法
* 通过Polyglot和Poly-paradigm编程进行根本简化

真实世界中的RIA:客户的演变
* Hard Rock:Silverlight 2背后的音乐
* 处于困境中的Flex和Air:6个月的真实企业体验
* 现实世界中的GWT:为什么Lombardi用GWT构建Blueprint,以及为什么要在下一个RIA中使用它

域驱动设计
* 使用C#的.NET域驱动设计:如何在框架内部工作时保持域模型的清洁
* 用DDD重建guardian.co.uk
* 释放您的域名
* 战略设计

DSL实践
* Erlang中的领域特定语言

您一直想知道的架构
* Digg.com软件架构
* Facebook:科学与社会图谱
* 教学机器钓鱼:eBay如何改善自身

.NET空间中的替代方案:开源,框架和语言
* 长期存在的代码库的喜悦与痛苦
* F#简介
* DbC世界中的TDD
* Volta:任何地方都可以分发.NET

数据存储的重新思考:面向文档的分布式数据库
* CouchDB从10,000英尺起

Java新兴技术
* 从并行到并行
* 小组:Java的开源趋势如何影响您的设计和开发过程?
* 扩展Hibernate

伸缩敏捷
* 释放窝:在雄心勃勃的文化中扩展敏捷

社会事件

关于QCon本身的意见
受QCon启发
结论

讲解

实用的Erlang编程

Ola Bini喜欢本教程:

在学习教程的前一天,我在Erlang教程中度过了,这很有趣。 Francesco是一位非常优秀的老师,我们掌握了很多材料。

认证Scrum Master

斯里尼·彭奇卡拉(Srini Penchikala)喜欢上这堂课:

我参加了由Object Mentor项目管理团队的Martine Devos主持的Certified Scrum Master( CSM )。 Martine是一位出色的CSM培训师。 教程班非常有教育意义,对于要成为敏捷项目经理的技术管理人员来说是很有帮助的。 该课程是互动式的,使学生可以在服务器现实世界中的项目管理场景中彼此讨论,并与小组其他成员进行讨论。

JRuby和JRuby on Rails入门

Bjorn Rochel参加了本教程,并说:

在本次演讲中,特别有趣的是,大多数适用于JRuby和Java的事物也适用于(或将适用于)IronRuby和.NET:

  • 现有IT基础架构的重用 。 在不久的将来,Rails将能够在.NET和IIS之上运行。 不需要现有的Ruby基础结构即可运行它。 没有新的服务器/基础架构知道如何在.NET环境中运行Rails。
  • 两个方向上是静态类型的平台和Ruby之间的集成 。 C#将能够集成动态类型的代码(C#关键字dynamic),并且纯Ruby应用程序可以在.NET之上运行。 除此之外,IronRuby还将与.NET框架库进行出色的集成,并且能够使用Ruby概念(我认为这称为“猴子修补”)扩展其对.NET世界的看法。 从IronRuby打开和扩展.NET类型,并为.NET Framework内置类型的成员提供对蛇形外壳的支持,这是一些不错的功能。

领域特定语言

奥拉·比尼(Ola Bini)参加了本次会议:

我已经在本教程中读过几次了,但是它一直在进步。 尤其是这次丽贝卡的解析作品被很好地修饰了。 当然,他们都是出色的演讲者。

克里斯·帕特森Chris Patterson)一样

我最喜欢的外带是内部DSL所显示的样式(也称为流畅接口)。 内部DSL是使用语言本身构建的,而不是创建新的语法。 流利接口的例子很多,包括FluentNHibernate项目和StructureMap的注册表DSL。 内部DSL的直接价值是从阅读使用这种界面风格编写的代码中获得的理解。

敏捷管理之禅

Razvan Peteanu对本教程进行了详细的总结,其中包括:

为期一天的课程的主题很简单:糟糕的管理对软件开发的破坏比什么都重要。 这样做实际上是不言而喻的:在没有足够的歧视和知识的情况下做出决策会破坏任何东西,而不仅仅是软件开发。

重点是“比什么都重要”。 尽管不是完美的方法,但明智地实践的敏捷方法表现良好,以至于烫手山芋不再属于开发人员自己。 现在该解决管理开发的问题了,是的,考虑到人的天性,处理编程方法很容易。

主题演讲

马丁·福勒(Martin Fowler)和丽贝卡·帕森(Rebecca Parsons):敏捷主义者和建筑师-盟友而非对手

很多人都写了这个主旨演讲,包括Denis Bregeon

我将保留讲话中最强烈的想法:企业体系结构是许多其他利益相关者中应用程序的利益相关者。 第二个最强烈的想法是:企业架构师对于带来公司技术组合的横向视图很有用。

奥拉·比尼Ola Bini)

Martin和Rebecca在星期三的主题演讲中谈到了架构,以及敏捷如何帮助架构团队解决问题,以及如何弥合大型组织中经常存在的开发人员与建筑师之间的鸿沟。 干的很好。

克里斯·帕特森Chris Patterson)

QCon的主要会议从周三开始,由Thoughtworks的Martin Fowler和Rebecca Parsons作主题演讲。 主题是建筑师和敏捷专家-盟友而不是对手。 正如您可以从标题中推测的那样,本次演讲的重点是在象牙塔建筑师与负责交付软件的团队之间建立协作关系。 在Matrix的场景中Neo与The Architect的相遇作为背景,在强调了两个角色之间的关键脱节之处之后,提出了许多解决方案。 我一直坚信,不编写代码(NCA)的架构师的效率不如那些了解实际编写代码问题的架构师有效。

杰里米·米勒Jeremy Miller)

我认为他们为使用增量交付机制和敏捷可提供的帮助建筑师的透明度提供了很好的案例。 Buuuuuuttttttt,为了使他们的建议生效,我认为大公司将必须大大改变他们对构建软件的人们的态度。 与当今相比,许多公司必须更加重视动手技能和应用程序体系结构技能。

埃里克·史密斯Eric Smith)

体系结构的部分问题是很难定义。 当我们想使其听起来更重要时,它可能只是设计。 我记得曾经和他一起工作过的那个人,所有东西都是建筑。 “如果您考虑这两个类的体系结构……”马丁喜欢拉尔夫·约翰逊(Ralph Johnson)对建筑师的定义,即考虑硬性事物的人-无论碰巧遇到的特定组织。

另一个问题是,架构师很难为自己的角色定义成功,而要获得成功则更困难。 有时,这是由于组织功能失调所致,例如公司坚持要求架构师不要编写任何代码。 在其他情况下,则是通过不良做法进行的,例如在预期尚未得到证实的需求的情况下发明框架。

埃里克·罗曾达尔Erik Rozendaal)

丽贝卡·帕森斯Rebecca Parsons)马丁·福勒Martin Fowler) 在2008年旧金山QCon会议上发表了有趣的主题演讲。 在他们的演讲中,他们讨论了传统架构师与敏捷开发之间通常紧张的关系,以及如何改善这种关系以使敏捷开发团队和架构师受益。 这些好处包括跨项目和跨部门的知识交流,与开发人员共享架构师多年的经验以及仅在实际需要的架构上工作。

奥马尔·汗Omar Khan)

这让我想到了2paths处的策略,每个人都在某种程度上进行了编码。 作为一名架构师,我可能不会编写大量代码,但是我确实在开发代码。 在做出设计决策时,这使我的看法具有现实意义。 具有讽刺意味的是,他们提出的解决问题的建议仅此而已,架构师必须是开发团队的一员,并且需要每天/每周以及在理想情况下查看开发/签入的代码。

Razvan Peteanu

演讲者指出的另一个更微妙的问题是,以经验丰富的从业者逐出他们的时光,这是他们的时间已经过去,并且如果您仍处于40多岁的发展阶段(相对于管理层),那您将失败很多。 多年的技能成长在社会上是可以接受的,但随后的期望就转移到了阶梯上,而将编码视为“青年”。

然而,情况并非如此简单。 在许多环境中,EA确实可以很好地理解其标题所涉及的体系结构。 他们在广度和时间方面都具有更广阔的视野。 忽略此类知识而偏向小规模目标将是一个错误。 问题通常出在EA与开发团队的互动上:偶尔由于建议和图表的发布而陷入低谷并不能建立信任或工作架构。 没有信任就没有敏捷性。

登记册还涵盖了以下主题演讲:

帕森斯说:“有时候,当我这样讲时,人们说我对建筑师太苛刻了。” “但是我知道他们的工作非常具有挑战性……他们处于非常困难的位置,组织通常会对他们造成伤害。

福勒补充说:“重要的是要意识到这个问题是系统性的。” “这是关于组织的建立方式,而不是被困在该系统中的个人造成的失败。无论您的员工有多好,您总是会把他们搞错。”

肯特·贝克:等一下

埃里克·史密斯Eric Smith )关于这个主题演讲的内容:

他的演讲是作为一名业余未来主义者,他研究趋势并想象它们可能去向何方,以及意想不到的后果。 例如,如果您更频繁地扩展发布软件的趋势会怎样? 也许每次按键都发布软件? 好吧,好的,编辑一个实时网站就差不多了(如果您的编辑器不断保存)。

他期望其他一些趋势是网络上“免费”内容的终结,并且随着其他人开始更多地了解技术并且编程似乎不再那么神秘,程序员的地位将下降。 他说,即使后一点被证明是正确的,我们仍然可以通过我们的建设以及建设方式来改变世界。

Razvan Peteanu一样

贝克先生在一个晚上的主题演讲中再次讲话-一种非正式的尝试,以猜测计算的趋势以及当今形势的某些主角是否不是由于过去几十年来所经历的长期“高潮”而下降。 一个例子:关系数据库,越来越受扁平化方法的青睐。 但是请注意,这些示例主要来自Google和Amazon的世界,而不是更常见的OLTP系统,在该系统中,用户交易而非使用MapReduce进行数据处理成为规范(在数据库架构上加上“传统”警告标签) :-)。

Tim Bray:在不断变化的存储范围内的应用程序设计

包括马丁·福勒Martin Fowler)在内的一些人讨论了该主题演讲:

上周在QCon上,有大量的对话质疑这一假设。 令我印象深刻的当然是蒂姆·布雷(Tim Bray)的主题演讲,该主题之旅涉及数据管理的多个方面。 为此,他强调了一些有趣的项目。
  • 细雨是一种关系数据库,但是却避免了很多现代关系产品的使用。 我将其视为RISC RDBMS-仅支持关系功能集的基础。
  • Couch DB是分布式键值对模型的众多尝试之一。 尽管数据模型非常简单(实际上仅是哈希图),但这种方法在高流量网站中已变得非常流行。
  • Gemstone是对象数据库的拥护者之一,我发现Gemstone-Smalltalk组合是一个非常强大的开发环境(优于其大多数后继产品)。 Gemstone仍然是一个利基市场,但它可能会通过Maglev获得更多的吸引力-旨在将其方法(本质上是数据库和虚拟机的融合)引入Ruby世界的项目。

布伦丹·奎因Brendan Quinn)

但是,真正让Tim兴奋的不仅是他关于正确的文件系统上固态存储速度可以提高多少的令人印象深刻的数据 (这是他的老板Sun发布的新服务器的广告),而且事实是SSD具有摩尔定律:与“旋转锈蚀”相反,SSD全是硅,因此随着时间的推移它只会提高性价比。

正如Tim所说:“女士们,先生们,您在展望未来。”

埃里克·史密斯Eric Smith)

他主要专注于O / R映射层和SQL引擎,其中的技术引用了Tim的话。 O / R映射确实很困难,而且很遗憾,对象数据库从未真正获得商业成功(第一行的Martin Fowler表示同意)。 SQL引擎速度太慢,导致人们不得不使用分布式哈希表(例如memcached),甚至完全跳过数据库引擎以转到文件系统。 SQL引擎也很复杂,并且具有从未使用过的功能。 这启发了像Drizzle这样的项目,该项目是从MySQL分叉的数据库,目的是简化工作。

关于CouchDB,Tim也有很好的话要说,CouchDB是一个只能通过HTTP访问的面向文档的数据库。 我对这个项目一无所知,但是蒂姆的确切话是:“我对此很着迷”和“令人恐惧的优雅”。

詹南·达什Jnan Dash)

  • 在应用程序代码和磁盘/缓存之间,它们是传统的层-对象/关系映射,SQL引擎以及OS和文件系统。 在层之间传输的是这些对象-从应用程序代码到O / R映射的对象,然后是SQL到SQL引擎的对象,然后是标准化的元组到OS&File系统,最后是字节到缓存/磁盘。
  • 这些层增加了延迟和开销,并成为满足数百万用户的Web应用程序的巨大瓶颈。 因此,某些应用程序代码直接为键/值对操纵大型哈希表。 他们声称这种方法使其比RDBMS快100倍。
  • 应用程序代码可以直接映射到RDBMS,而绕过O / R层(这很困难)。 PHP可以做到这一点,但是它丑陋而丑陋。
  • 直接绕过整个数据库层的应用程序代码直接进入操作系统和文件系统怎么样? 他们使用XML,JSON,纯文本和媒体文件。

奥马尔·汗Omar Khan)

当天,Tim Bray发表了有关数据库和数据访问以及数据库的发展以及在设计使用它们的系统时需要记住的话题的演讲,拉开了序幕。 他介绍了诸如MemCacheD之类的​​技术,所有知名Web应用程序都将其用作从数据库检索到的分布式数据缓存。 他谈到了Drizzle,这是一个轻量级的数据库,它删除了主要数据库中从未有人使用过的所有东西,这些东西减慢了数据库服务器的速度,并最终降低了诸如Googles BigTable之类的面向列的数据库的速度。 总而言之,他提供了有关数据库层技术的深刻见解,值得进一步研究。

丹尼斯·布雷坚Denis Bregeon)

对我来说,这是一次解放的谈话。 首先是因为我习惯于对存储没有足够的考虑,并回落到熟悉的RDBMS类型。 这花费了我当前的项目很多时间和精力。 蒂姆·布雷(Tim Bray)在十五分钟内设法通过展示存储层次结构中每个点上可用的存储选择来打破这个想法。

例如,当您必须保留对象时,为什么还要去对象关系映射和RDBMS? 为什么不直接使用文件系统? 附带说明一下,在我当前的项目中,我们做了并且不得不恢复为RDBMS,因为我们的系统管理员无法使文件系统复制正常工作!

登记册还涵盖了以下主题演讲:

压力堆叠的未来是什么? 布雷说:“这都是一个移动的目标。” “但这意味着现在是从事这项业务的好时机。时间就是如果您要为付真钱的人构建一个严肃的,不平凡的,面向Web的应用程序,则必须使用Java EE或.NET,或者现在,Oracle,这个,那个和另一个。这些天,您不必做任何类似的事情,人们也不会像您一样疯狂地看着您。好东西。”

面试

Razvan Peteanu参加了其中的一次采访:

约德(Yoder)先生在谈论如何通过制作更通用的模型来设计以更改业务规则。 最后,面试官出乎意料地转过头来,问我自己是否有任何疑问,我因此而走了两分钟成名。 剩余的十三...

RESTFul Web集成实践

史蒂夫·维诺斯基(Steve Vinoski)喜欢这首单曲:

吉姆·韦伯(Jim Webber)一起运行REST轨道,这是我参与过的最好的轨道之一。 马克·诺丁汉Mark Nottingham )在REST和HTTP方面知识渊博,因此他就HTTP和HTTPbis小组的工作进行了非常有益的演讲伊恩·罗宾逊Ian Robinson)斯图·查尔顿Stu Charlton)都谈到了在企业中使用REST( 无论是否喜欢 REST都即将推出 )。 伦纳德·理查森(Leonard Richardson)谈到了如何判断RESTful服务的质量,但是我错过了他的大部分演讲,因为我出去伸展双腿,因为房间太拥挤而无法回去! 我谈到了我在REST,Erlang和Yaws上的工作 。 您可以从QCon站点获取此轨道的所有幻灯片集

就像吉姆·韦伯一样

正如许多演讲者和与会者所写的,QCon REST轨道简直很棒,而不是一整天都在闲聊。

HTTP状态报告

布伦丹·奎因(Brendan Quinn)对此演讲进行了详细说明,包括:

HTTP / 1.1基本上只写为“包含” 0.9和1.0(虚假,持久性,高速缓存)(Mark参与了WS- *堆栈),但是他为自己的罪过向房间道歉;-)关于SOAP等的评论是“协议中有这么多扩展名在社会上是不负责任的-协议全都与协议有关”,您需要划清界线以使整理有用。 他基本上是说WS- *允许您做太多事情,给您足够的绳索,并且使正常情况下的工作变得困难,只是为了使极端情况成为可能。 (或者类似的东西,如果有一篇博文中他向自己解释,我很乐意链接到该博文,而不是对他进行错误的表述)

Mark巧妙地表达了RESTful API“使用HTTP作为协议构建工具包”。 它们不是基于HTTP构建的,而是作为HTTP的一部分构建的(以某种方式)。

吉姆·韦伯(Jim Webber)做了同样的事情,但有如下注释:

-URI长度限制-一些客户端短于256个字符。 大多数客户端都允许很大的URI。 中介机构有所不同-通常为4-8Kb。
-人们通过POST引导查询的结果(对实体主体大小没有限制),从而破坏了可缓存性-可能不是问题
-一些框架体现了这个ant-ipattern
-HTTPbis建议8Kb的URI
-标头有一定的长度限制(Squid:总计20Kb)
-标题行连续不兑现-HTTPbis可以将它们

埃里克·史密斯(Eric Smith)也参加了这次演讲:

我走了一下REST轨道,由著名的人胸部专家Jim Webber主持。 但是,本次会议的发言人是HTTPbis工作组主席Mark Nottingham。 他们本质上是在重写HTTP 1.1规范,而不是尝试添加任何新功能。 何必呢? Mark解释说,现有规范含糊不清,组织不清,不太平易近人,有时还需要与其中一位作者进行协商才能理解。 结果,每个人几乎都正确理解了主要部分,但是在实现之间,还有很多其他事情并不是很可互用的。 HTTPbis的目标是在大约六个月内完成,它将有望澄清规范以消除不兼容性。

Mark还简要地谈到了HTTP的未来可能会发生什么,例如一组标准的一致性测试,更好的身份验证,通过SCTP而不是TCP的传输以及其他。

RESTful企业发展

吉姆·韦伯(Jim Webber )从这次演讲中获得了详细的笔记,包括:

InfoQ上的“ Restbucks” /“如何喝咖啡”一文,是Gregor文章的改版版本,更多地采用了REST模式。
涉及的全部后台功能:订单管理(监督订单的执行),库存(维护商店中的库存),产品管理,区域分销(分配到各个位置)等。
“恐怖分子服务”-独立完成所有需要的工作,与Service部署中的三层体系结构相反。
服务部门要做好工作,谁需要知道什么?
订单管理需要具有产品知识才能执行其工作...
很多东西,甚至是分布式应用程序,都可能构成这些服务之一的内部组件,但是此讨论是关于服务边界交互的。

使用Erlang和Yaws构建RESTful Web服务

吉姆·韦伯(Jim Webber )从这次演讲中获得了详细的笔记,包括:

-YAWS-另一个Web服务器-适合提供动态内容; 可嵌入的,或独立的
-动态内容-嵌入 .yaws文件中HTML中的标签
-输出功能-将您的应用程序绑定到Web服务器-arg记录为应用程序提供连接详细信息-一个大元组
-Ehtml避免嵌入 变得凌乱的标记,而是使用Erlang语法编写HTML-元组的元组空间
-强制性Emacs咆哮...
-Appmods-应用程序模块导出功能,并通过配置文件绑定到一个或多个URI。 Yaws对注册了URI的任何appmod调用Out函数。

引入真实世界的REST

吉姆·韦伯(Jim Webber )从这次演讲中获得了详细的笔记,包括:

-您可以通过查看服务在堆栈上的距离来粗略地判断服务:URI-> HTTP-> HTML(超媒体)
-级别0-一个URI一个HTTP方法-例如SOAP
-级别1-许多URI,一种HTTP方法-例如,大多数RESTful服务并未使用(仍然受到人们的喜爱,因为人们喜欢URI)
-级别2-许多URI,每个URI具有多个HTTP方法-例如Amazon S3
-级别3-资源描述了它们自己的功能和互连-例如AtomPub
-Web允许通过许多URI分解复杂性,HTTP通过对读取操作(GET)和写入操作(所有其他操作)进行分区来分割复杂性。 组成这些产生复杂的系统
-GET很重要,因为它受到限制,因此您可以进行优化(级别1服务会忽略这些限制)
-HTML仅了解GET和POST-更具体的限制和优化机会之间的紧张关系,而客户却不了解扩大的词汇量

使用REST设计企业IT系统

吉姆·韦伯(Jim Webber )从这次演讲中获得了详细的笔记,包括:

-挑战是将REST应用到企业中-企业尚未弄清它,特别是因为它们位于MOM / Component / SOAP空间中-主要头痛是超媒体
-超媒体只是系统之间的另一种抽象,是消息传递之上的一层
-REST不是文件传输-除CRUD以外,它是通用系统的解决方案
-企业架构是分层的(数据,业务服务,表示)
-Web架构模糊了这些孤岛,但是并不能解决所有问题,并且需要权衡取舍
-Web体系结构具有可见性,事务,联合,它们映射到经典的企业约束
-经典服务的接口具有生产者心态,类似于类似于康韦定律的接口
-改用以消费者为主导的合同-听众伊恩·罗宾逊(Ian Robinson)同意:-)

解决方案跟踪

管理架构的黄金法则

开尔文·米克斯Kelvin Meeks)撰写了此演讲的摘要,其中包括:

建筑侵蚀-基本定律?

建筑侵蚀是一个已知问题
-系统知识和技能分布不均
-复杂性增长快于规模
-创建不需要的依赖项而不会引起注意
-耦合和复杂性Swift增长

侵蚀的体系结构的典型症状是高度的耦合和大量的循环依赖性
-变化变得越来越困难
-测试和代码理解变得更加困难
-各种部署问题

开放标准的发展:机遇还是约束?

该面板由包括InfoQ在内的多个站点覆盖:

在听众中的一些人提到规范领导需要走出去并促进社区发展之后,InfoQ的总编辑Floyd Marinescu询问JCP董事会是否考虑举办公众调查,以采取更民主的决策方法。 帕特里克·柯伦(Patrick Curran)回答说,他们还没有想到这一点,但他表示,通过为JCP站点的下一版本开发的新协作工具,人们将有更多的参与方式。

听众中有很多人对Java Modularity优于OSGi做出了负面评价,以及这如何引起混乱。 帕特里克·科兰(Patrick Curran)为Java模块化的选择辩护,他说,尽管他不是该领域的专家,但还是有多种技术原因导致了这一决定。

寄存器

长达一个小时的讨论主要是对JCP的开放性和入门级参与的障碍的担忧。 Janssen抱怨说,由于收费高昂,用户组很难参加JCP。 范·里珀(Van Riper)提议创建一个JUG美国总括组织,以分散加入的费用。 他还抱怨说,如果您不参与JSR,则JCP中没有真正的社区感觉。 Ashley指出JCP缺乏公众开放性。 Horstmann对此表示赞同,并强调了标准化过程中透明的重要性。

当讨论转向标准时,Venners认为,只有在有多种实现的情况下,对语言进行标准化才能增加价值。 在大多数情况下,语言一致性套件就足够了。 Rosenthal认为,使标准组织工作的关键是基本团队工作原则。 里德谈到了她所在的组织的工作,以使残疾计算机用户可以访问文档。

InfoWorld

在JCP的其他地方,Curran说Java平台标准版7上的所有工作将由Java Development Kit社区以开源方式完成。

JCP还提供了协作工具,用于在Java标准开发过程中更好地进行通信。 Curran说:“我们将在jcp.org上发布一些东西,这些东西在论坛上等等,使专家组之间以及彼此之间以及与普通成员之间的交流更加容易。”

库兰说,一直存在着专家组一直在秘密行动的担忧。 他说,这些工具目前处于测试版状态,预计将在几个月后发布。

性能和可伸缩性

为性能和可伸缩性进行架构设计:小组讨论

奥马尔·汗(Omar Khan)参加了小组讨论:

接下来是关于可伸缩性的小组讨论,并强调需要了解您正在设计的系统的更新要求。 他们提出了两种类型的设计:
  1. 预先设计可扩展性
  2. 设计简单,弹出时处理瓶颈
我不确定我是否会选择选项2,但是他们提出了一个好的观点,即当真的没有真正要求防弹的要求时,有多少建筑师为防弹设计了东西。 我完全同意这一原则。 提到了诸如flickr之类的几个网站,这些网站就拥有这种快乐的媒体做出了一些非常好的决定

Razvan Peteanu一样

多数参与者是供应商的CTO(Terracota的Ari Zilka是一位出色的演讲者),而Brian Goetz在几分钟前就加入了。 首先从Bruce Eckel向Brian提出问题开始,之后人们就如何进行数据分区以进行扩展进行了很好的讨论。 希望座谈会更长,一个小时太短,许多有趣的对话没有发展的机会。 真正的高规模和可扩展性吸引了听众的兴趣,这也许是因为突破技术限制将计算机科学带回了不那么迷人的商业软件中。

敏捷

团队合作是一项个人技能:如何随时组建任何团队

Martin van Vliet喜欢这个演讲:

对我来说,QCon第一天最好的会议之一是克里斯托弗·艾弗里Christopher Avery )的演讲“团队合作是一种个人技能”。 演讲的重点是我们可以学习成为有效团队成员的技能和习惯。 这一点变得越来越重要,因为我们大多数人都处在我们没有直接影响力的人决定我们是否成功的位置。 一个软件开发团队就是一个很好的例子。

敏捷性:在个人层面上的可能性

丹尼尔·库基尔(Daniel Cukier)对琳达·瑞辛(Linda Rising)演示文稿中的其中一张图像感到很有趣,该图像显示了各种药物(例如咖啡因)对蜘蛛网的影响。

响应式设计

丹尼斯·布雷根Denis Bregeon )谈到了这个话题:

在以前的工作的基础上,他从设计的定义,价值的影响(我如何评估设计的质量)和原则(在某种程度上扩展了价值的运行效果)对设计以及使用的影响开始。模式。

然后是演讲的核心:设计策略。 肯特·贝克(Kent Beck)从他的经验中确定了四种设计策略。 它们确实是发展设计的策略。
  • 首先是飞跃 ,一次完成从一种设计跳到另一种设计。
  • 第二个是Parallel ,旧设计和新设计将在其中并存一段时间。
  • 第三是垫脚石 ,在到达新设计之前,定义并实施了连续的中间步骤。
  • 第四是简化 ,即针对问题的简化版本进行设计,然后通过重新引入复杂性来丰富设计。

Razvan Peteanu一样

肯特·贝克(Kent Beck)的房间包装演示文稿分享了他为捕捉自己的设计所做的积极努力的结果(没有任何尝试表明这是每个人都应该做的)。 贝克先生最初认为设计很困难的最初断言是带有令人讨厌的杂音的(如果初学者和专家都说很难,那么将可感知的困难程度与从业者的技能水平作图会很有趣。是一块蛋糕吗?)。 说到设计,他最近对它的定义是“有益地关联元素”。 这里有一些语言上的作用:您可以将设计读为名词(由有益地关联的元素组成)或动词(将设计以有益的方式关联起来)。

以及杰里米·米勒Jeremy Miller)

我很高兴在QCon参加Kent Beck的演讲之一。 老实说,这不是革命性的,甚至不是知识性的,但是我所看到的是我们Craft.io的大师之一,只是在反思他如何做出设计决策。 我认为这是一个很好的榜样。

还有布鲁斯·埃克尔Bruce Eckel)

肯特·贝克(Kent Beck)谈到了探索他在设计中使用的技术,他将其定义为“有益地关联元素”。
  1. 飞跃(采取已知的可行的小(安全)步骤)
  2. 并行(同时运行两种设计)
  3. 垫脚石(如果我有...我可以做到)
  4. 简化(从最简单的情况开始,并在可行时对其进行扩展)。 知道何时修剪要素以进行简化以及何时重新添加要素的艺术。

超越和穿越大门

Denis Bregeon参加了此演讲:

这是一个有趣的话题。 至少对于那些对推动我们开发软件感兴趣的人来说。 附带说明,在肯特·贝克(Kent Beck)发表主题演讲后的提问中,这出现了几次,但答案并不那么有趣,主要是关于金钱和人类福祉。 过去的一年中,我一直在思考关于敏捷开发人员的哲学构想的许多想法,在这篇演讲中得到了回响。 我对日本也很感兴趣。

戴夫(Dave)的演讲是速成班,印象派,禅宗哲学教育,艺术领域,从启蒙程度到充分开悟的才华,以及门徒追求的东西。 我不确定谈话的重点是什么。 我认为这是一个警告,即软件开发中的敏捷不能成为当今的食谱。 它是一种生活方式,是一种开悟的途径(在禅宗意义上),换句话说,是通过不断的改进追求完美。 尽管成为软件开发人员并不像和尚,战士或剑匠那样高尚。

企业中的Ruby

MERB:当灵活性和性能至关重要时

克里斯·帕特森对MERB印象深刻:

MERB是用于Ruby的高性能,可扩展的MVC框架。 它与Rails处于同一空间,但进行了大量优化以提高性能。 它还支持切片,允许将功能添加为简单的gem。 随着它的发展,这是一个值得关注的人。

开尔文·米克斯(Kelvin Meeks)还指出了本次演讲的几点,包括:

在今天上午的Ruby演讲中,有一个有趣的观点:鉴于某些性能的改进(例如,与原始PHP相比较的Merb,领先PHP框架,Django,Rails,Code Igniter等),Ruby过去的不良性能声誉目前可能无效。

InfoWorld还介绍了此演示文稿:

他说,默布(Merb)“非常适合企业界,但不仅适合[企业]。” Aimonetti说,这是“我们目前拥有的最快的Ruby框架”。

他说,这项技术提供了Merb“切片”的概念,这些切片可以作为独立的微型应用程序使用,可以安装在其他应用程序中。 Merb提供了模块化和灵活性,Aimonetti说。

为企业扩展Rails

InfoWorld涵盖了此演示文稿:

Pollack在演讲后接受采访时说,可以通过诸如内存缓存应用程序之类的技术来扩展Rails应用程序。 他说:“确实,扩展Rails的方式就像扩展任何其他Web应用程序一样。”

Pollack说,Ruby超越了Web。 他说,它被用来产生音乐和维护Linux盒子,以及用于图形和桌面客户端。

云计算:以网络为平台

Web作为平台:市场现状

埃里克·史密斯(Eric Smith)参加了这次演讲:

John是Programmableweb.com的创始人,该网站是Internet上各种API的目录网站。 在他的演讲中,他谈到了Web API的趋势。 一些趋势是技术性的,例如REST与SOAP的使用越来越多(尽管由于REST不仅仅是一种哲学,而不是一种标准,所以很难将其归类为REST,而不是REST-ish)。 其他趋势围绕着API的普遍存在-现在预计,如果您在网络上放置有用的功能,它将拥有一个API,而不仅仅是一个用户界面。 甚至《纽约时报》NPR之媒体制作人也都具有API。

什么才是好的Web API? 首先,基础服务必须有价值。 除此之外,API还应支持提供商的业务模型(eBay希望优化添加列表,因为这是他们赚钱的方式),并且在开放性和提供的开发人员支持方面都应该易于访问。

Google App Engine和Google Data API

克里斯·帕特森Chris Patterson )关于这次演讲的内容:

我的下一站是了解Google的AppEngine及其如何处理可伸缩性和性能。 它目前是免费的,开发人员可以使用Python和Bigtable将应用程序构建和部署到云中。 这是一个有趣的引擎,具有完全透明的扩展基础结构。 您为您的应用程序担心,其余部分由系统负责。 已构建了大型应用程序,并且Google允许它们扩展到免费帐户的标准配额之外。 尽管最终价格尚待讨论,但它很有可能具有竞争力。 明年年初还将计划引入新的语言支持,但是所添加的确切语言运行时是保密的。

“将东西挂在一起”-耦合,消息传递和对话

克里斯·帕特森(Chris Patterson )对本届会议有一些想法:

自从开始从事MassTransit以来 ,我一直使用Gregor Hohpe撰写的Enterprise Integration Patterns一书作为构建基于分布式消息的系统的参考手册。 在本次演讲中,Gregor提出了一些基础知识,并为该书的续集(称为《对话模式》)奠定了基础。 但是首先,提出了基于消息的系统的挑战。 失败的级别相当复杂,其中包括请求丢失,响应丢失,响应缓慢和重试重复。 其中很多内容都在线上被讨论过,因此很多材料都为我复习了。 还声明了ACID的新缩写:关联,可交换,幂等和分布式。

对于大规模的分布式系统而言,一致性具有更大的可能性,而不是即时性,因此,认识到未来是灵活和冗余的,而不是可预测和准确的,这一点很重要。 构建持久的并支持补偿的分布式事务对于拥有成功的可扩展应用程序至关重要。

奥马尔·汗(Omar Khan)还指出:

Gregor Hohpe对使用“云”架构的应用创建背后的原理进行了深入的讨论。 基本上,云计算是在应用程序中使用来自其他组织/公司的服务。 例如,有一个使用谷歌地图或亚马逊EC2等的应用程序。他演讲的主要内容是:
  1. 学会充满不确定性
    您正在使用的服务不受您的控制,因此您必须设计要关闭/不可用的组件,因为您的客户不在乎您在幕后使用的是什么服务。
  2. 保持简单和小巧
  3. 学习正确设计异步
  4. 拥抱新的编程模型
  5. 抵制传统模式

应用功能和并行编程语言

Arjan Blokzijl喜欢这首单曲:

在参加QCon San Francisco时,我特别高兴地参加了整个过程,该过程专门涉及函数式编程领域,这是我深感兴趣的话题。在学习了该过程之后,我比以前更加确信了函数式编程并不局限于学术界。 我认为这将在未来几年对我们的思想观念以及我们对编程和解决问题的思考方式产生深远影响。

哈斯克尔与艺术

Arjan Blokzijl参加了这次演讲:

他谈到了功能响应式编程 (FRP)的概念,该概念现已成为耶鲁大学的重要研究领域。 FRP是一种编程风格,其中每个功能都可以捕获时变量(例如输入的声音,视频,用户操作)。 这种编程风格可用于机器人技术,并行编程,音频处理。 每当给函数提供新的输入值时,都会对它进行重新求值并返回新的输出。 在演讲中,他特别介绍了针对音乐和声音合成开发的领域特定语言HasCore和HasSound。 保罗说,功能性语言具有声明性(说“应该做什么”,而不是“应该怎样做”),因此它们特别适合于计算机音乐。 Haskells抽象机制通过使用惰性求值,高阶函数,代数数据类型和类型类的机制,使音乐程序优雅,精确且功能强大。 在此处可以找到Haskell音乐建模的基本示例。

强类型特定于域的嵌入式语言

Arjan Blokzijl对这次演讲有一些想法:

Lennart举了几个他自己通过在Haskell中实现DSL所开发的示例。 对我来说,最惊人的是他实现了用于生成Excel的DSL(即真正的Excel工作表,而不仅仅是基于文本的csv文件)。 如他所说,Excel具有某种基本的抽象机制,仅包括复制和过去的重用。 但是,它被商务人士广泛使用,并且是一个熟悉的UI。 因此,解决方案是生成Excel工作表。 Lennart提倡使用强类型检查来防止在编译时出错。 他展示了他是如何使用Haskells类型类的,以及在Excel DSL中作为Phantom类型的更晦涩的概念。 结果是DSL能够生成Excel工作表,而又不会在操作中出现类型错误,例如在Excel中添加了两个单元格,其中一个单元格包含一个整数,另一个单元格包含一个字符串,而Excel本身并不能阻止这种情况。 确实是一个有趣且有趣的会议,展示了Haskells类型系统功能的全部功能,并演示了在考虑Haskell时可能不会直接想到的领域中的使用。

购买功能:不变性和演员冒险

Arjan Blokzijl在本次会议上写道:

David Pollak在一次会议上展示了我们中大多数人可能更熟悉的概念。 他谈到了最近开发的一个Web应用程序“ 购买功能” 。 David可能不会立刻引起人们的极大兴趣,但是他使用了Scala和Scala的Lift网络框架,后者是由他自己创建的。 他一直在使用函数式编程范例(包括Scala的Actor库)来处理并发性,以便实现多用户,基于Web的实时严肃游戏。 正如他所说,该团队最初使用Java的命令式编程风格。 但是,经过一段时间(和指导),他们逐渐过渡到使用Scala还提供的声明式,函数式编程风格。 还有一些值得注意的陈述是,在应用程序中发现的所有错误均与并发无关,显然是事件驱动的,使用Scala的Actor库进行消息传递的编程风格为他提供了很好的服务。

史蒂夫·维诺斯基Steve Vinoski)一样

我发现有趣的是,即使他用Scala和我用Erlang写作,他在Lift中也使用了与Yaws合作时使用的一些请求分配技术。 功能语言规则。

原教旨主义者职能程序员

Arjan Blokzijl很喜欢这个讨论:

对于函数式编程的坚持者来说,今天的结局再好不过了。

埃里克·梅耶尔(Eric Meijer)亲自结束了主题为“基础主义功能主义编程”的演讲。 他令人发指的观点是,在过去的几十年中,我们一直在以错误的方式来进行编程,现在该是改变方向的时候了。 就像本博客的标题所表明的那样,转向纯基本的函数式编程。

为什么这会是一件好事? 所有“纯”功能代码都没有副作用,因此不会改变状态。 缺少更改的状态,执行语句的顺序无关紧要,程序执行的次数也无关紧要。 这使程序更易于理解,而且出错的可能性也大大降低。 埃里克(Eric)用C#语言的示例显示了函数隐式副作用的讨厌程度。 这会使该博客冗长而无法详细介绍,因此对于感兴趣的读者来说,应该看看他的博客

有效的设计和简洁的代码

行为驱动的开发-有效设计和清洁代码的道路

SD时代报道了这个演讲:

诺斯说:“让我们都尝试用相同的词来表达同样的意思。” “我在一个他们处理信用衍生产品的地方进行咨询,那里有定价的概念。它需要很大的网格。有一对开发人员在努力使用这种定价算法。业务分析师通过了,他们我看着它,这很漂亮,因为他一点也没有意识到他们在谈论代码,在谈论定价,在进行这种流畅的对话,这个家伙没有意识到他在谈论对象。

“这不只是一种思想练习。让我们开始使用一种共享语言。一种普遍存在的语言是当您将其引入软件工件中时。类被命名为它们在域中的命名。您对东西建模,就可以完成工作。”

改进代码的10种方法

乔伊·德维尔(Joey deVilla)欣赏了他在本次演讲中看到的其中一张图片,其中展示了YAGNI开发助理:

YAGNI (“您将不需要它”的缩写)是一种发展格言,它向程序员建议,他们不应该向目前不需要的应用程序添加功能,而将来可能会添加 。 YAGNI拥有DRY(“不要重复自己”)原则,有一个表亲,其祖先是Occam的RazorKISS原则 (如“保持简单,愚蠢”而不是“我想整夜摇滚”(和每天聚会”)。

埃里克·史密斯(Eric Smith)也参加了此演讲:

Neal的10分主要是我知道的(有时甚至成功完成),例如TDD,使用静态分析,YAGNI等。在多语言编程中有一个有趣的观点。 他说,理想的多语言编程并不意味着多个平台,而是一个平台上的多种语言。 Java和.NET都是多语言平台,因此可以利用它来使用最佳语言解决当前的问题,同时仍然保留通用运行时环境的优势。

间歇时,尼尔谈到了10种难闻的气味,我最喜欢的是“我们的律师说我们不能使用任何开源软件”,这导致尼尔不得不为CruiseControl购买“许可证”(由尼尔的雇主撰写, ThoughtWorks),因此他可以与客户一起使用它。

开尔文·米克斯Kelvin Meeks)一样 ,他做了详细的记录,包括:

十大公司代码气味

10-我们发明了自己的Web /持久性/消息/缓存框架,因为现有的框架都不够好
9-我们购买了整个工具套件(即使只需要其中的10%),因为它比购买单个工具便宜。
8-我们之所以使用WebSphere,是因为...(我现在总是停止收听)
7-我们不能使用任何开源代码,因为我们的律师说我们不能

通过polyglot和poly-paradigm编程进行的自由基简化

奥拉·比尼Ola Bini)写道:

最终,我看到Dean Wampler混合了关于多语言编程的所有自由浮动思想,并以接近整体的方式谈论了这一点(我从来没有做过)。 做得很好的演示文稿。

开尔文·米克斯Kelvin Meeks)一样 ,他介绍了许多内容,包括:

PPPP的缺点
-N个工具链,语言,库,“生态系统”
-工具之间的阻抗不匹配

PPP的优势
-为特定工作使用最佳工具
-可以减少所需的代码量
-可以使代码更接近域
-鼓励思考架构

真实世界中的RIA:客户的演变

Hard Rock:Silverlight 2背后的音乐

埃里克·史密斯Eric Smith )关于这次演讲的内容:

斯科特(Scott)是Vertigo的首席执行官,该公司被微软公司评为2008年度最佳合作伙伴。很高兴能拥有一些Microsoft技术代表,因为到目前为止该会议在Java方面似乎比较沉重。 斯科特(Scott)谈到了与营销公司邓肯(Duncan)/香农(Channon)合作建立“ 硬石纪念品”基地的情况。 Duncan / Channon最初打算使用Flash完成该站点,但是Deep Zoom却是使Silverlight成为显而易见的选择的杀手级功能。

斯科特说,Silverlight有关独立图形设计和编程的故事正完全按照广告宣传进行。 他展示了一个Etch-A-Sketch应用的小样,由Vertigo程序员Michael Moser快速编写,但随后由图形艺术家精心修饰。

处于困境中的Flex和Air:6个月的真实企业体验

埃里克·史密斯(Eric Smith )对这次演讲有一些想法:

斯科特·德拉普(Scott Delap)进行了有关使用Adobe工具构建视频游戏《英雄联盟》的一些在线组件的演讲。 他的观点是将Flash / Flex与使用Swing进行Java UI开发进行比较。 他似乎对平台和开发工具相当满意,但是他认为事情有点像Java到2000年。那不是最先进的技术。 但是,他是转换为声明性UI规范的人。 就像我所认识的Java UI开发人员一样,他从未真正信任过Swing的视觉设计师,但是他说Flash的设计师经验很棒。

Scott谈到了评估各种框架的各种事情(依赖注入,远程处理,单元测试,功能测试等),这是开源开发堆栈的典型练习。

现实世界中的GWT。 为什么Lombardi用GWT构建Blueprint,为什么要在下一个RIA中使用它

埃里克·史密斯(Eric Smith)参加了本次会议:

简而言之,Alex和他的团队喜欢 GWT。 我不得不说,看到行动中的蓝图非常壮观。 它确实看起来像一个桌面应用程序,但是完全用HTML和Javascript完成。 GWT是这一切背后的魔力,它是Google用于将Java编译为Javascript的工具包。

如果您在Java商店工作,这似乎是一个很棒的开发故事:使用所有熟悉的工具并编写Java代码,您将获得一个出色的Web应用程序。

域驱动设计

使用C#的.NET域驱动设计:在框架内部工作时如何保持域模型干净

埃里克·史密斯(Eric Smith )从这次谈话中得到了一些笔记:

提姆在演讲中提出了一个有趣的问题:使用框架时如何保持域代码干净? 对于框架,Tim表示诸如ASP.NET之类的广泛框架以及诸如SharePoint之类的较窄的应用程序框架。 挑战在于,使用框架,尤其是Microsoft有时提倡的向导/设计器编码方法,将持久性,特定的API等不适当地耦合起来确实很容易。

使用DDD重建guardian.co.uk

埃里克·史密斯(Eric Smith)参加了此次演讲:

菲尔分享了他们在此过程中学到的一些知识。 一件事是在各处使用问题域语言的重要性,这甚至使团队中的非技术人员也能够以意想不到的方式做出贡献。 这方面的一个例子是在对象组成方面的重大突破。 菲尔展示了原始的对象层次结构和更清晰的对象层次结构。 他说,事后看来,大的突破当然总是显而易见的,而且微不足道,但这是非工程人员提出的。 他列举的另一个例子是,当一个用户来到开发人员的机器上进行功能演示时。 在开发人员进行设置时,用户抬头看着代码,并评论说:“这样做是否符合我的想法?如果是这样,那是不对的。” 因为该代码使用域语言来表示对象名称和方法,所以他能够很好地理解它以发现错误。

Phil和他的团队了解到的另一件事是,数据库模式不是模型。 模型就是代码,尽管有时人们会误以为如果数据库中没有东西,那实际上不是模型。

解开您的域名

Erik Rozendaal享受了这个演讲:

格雷格·杨Greg Young所做的“解开域名”的演讲对我来说是QCon的亮点。 一种相对容易理解,难以置信的可扩展性并支持丰富域模型的体系结构方法。

在他的演讲中,GregSwift指出了传统企业应用程序体系结构(例如JEE)中的一些问题。 这种体系结构通常由封装在过程服务层中的“面向对象”域模型,持久化在关系数据库中,UI层在数据输入屏幕上展平,每天通过某种报告工具整理成管理报告组成。 拥有如此多的大师,这也就不足为奇了,领域模型变得贫乏且应用程序难以扩展。

战略设计

埃里克·史密斯Eric Smith)发表了这篇演讲:

他演讲的前提是:

并非所有大型系统都经过精心设计。

我们希望事实并非如此,但这似乎是生活中的事实。 然后,他谈到了一个非常常见的情况,开发团队发现了这种情况。我们已经拥有了这个遗留系统,它具有通常使我们对遗留系统不满意的所有问题:不良的设计,过时的技术,偶然的复杂性等。 那么我们该怎么办?

布鲁斯·埃克尔(Bruce Eckel)也从这次演讲中得到了一些笔记:

编程“英雄”是通过在核心领域工作来提供业务价值的人。 不幸的是,这样的“英雄”通常是糟糕的程序员,他们足够聪明以至于无法置身于正确的位置。 好的程序员常常不得不清理它们。

与其尝试重新架构整个系统以在第三年开始提供业务价值(这不会发生,因为您花了两年的时间花了公司钱却没有提供任何可见的业务价值),而是应该将自己置于核心领域。 为基础(不良)体系结构创建外观,并开始增加业务价值。 随着时间的流逝,您可以在收益显而易见的情况下更改基础架构的各个方面。

DSL实践

Erlang中的领域特定语言

这个演讲给奥拉·比尼留下了深刻的印象:

丹尼斯·伯恩(Dennis Byrne)在Erlang上关于DSL的演讲非常酷。 您可以做的一些事情简直令人难以置信。 最好的一天。 可能是一周。

您一直想知道的架构

Digg.com软件架构

奥马尔·汗Omar Khan)撰写了有关此演示文稿的文章:

接下来是Digg.com的 Joe Stump,他的演讲非常精彩。 他谈到了他们的体系结构的演变,从他加入到他们计划在明年初推出的计划,以及他们遇到的一些困难。 MySQL的可伸缩性是一个主要问题,因此他们迁移到IDDB,正在考虑使用MemcacheDB,它是与Berkley DB混合使用的MemcacheD。 Joe指出他们使用MogileFS来管理digg图像上的图像 ,我将在当前项目中对其进行介绍。

Facebook:科学与社会图谱

奥马尔·汗(Omar Khan)参加了这次演讲:

来自Facebook的Aditya Agarwal很棒。 他谈到了Facebook的所有不同方面,以及使用PHP / MySQL作为基础架构以及如何使用它们。 他们倾向于简单地将MySQL用作键值存储,并且配置文件内容随机分布在数千台服务器中。 他们大部分使用LAMP,但创建了一个框架,使他们可以在应用程序中使用以其他语言编写的服务。

埃里克·史密斯Eric Smith)一样

Aditya是Facebook的工程总监,在听完他的演讲后,我得出了两个结论:
  1. 我从来不需要担心附近的可扩展性,并且
  2. 我对此感到高兴。
Facebook建立在LAMP堆栈上,但是几乎每个组件都针对其特定应用程序进行了自定义和优化。 他们还使用memcached,Aditya表示这是网站性能的重要因素。 这与前几天Tim Bray的演讲非常吻合:数据库对于这种可伸缩性来说太慢了。 Aditya表示,他们的内存缓存分布式哈希表消耗了25 TB的RAM。

教学机器钓鱼:eBay如何改善自身

Razvan Peteanu在本次会议上有一些笔记:

后来,由eBay杰出建筑师Randy Shoup进行了一次令人印象深刻的演讲:他们的自动搜索和推荐引擎每天处理50PB,每天增加50TB(无拼写错误:-)。 每天有10%的广告资源在不断变化,这种变化的速度在用户需要准确的搜索结果时会带来挑战。 正如演示者所说,“我们的用户确实转到了搜索结果的最后一页,并且他们抱怨他们的人数是否与最初声明的人数相差一个”。 而与谷歌,搜索“Java”的总人数约为4.14亿,但你不能看到,超出了第一千的结果。

.NET空间中的替代方案:开源,框架和语言

长期代码库的喜悦与痛苦

埃里克·史密斯(Eric Smith )对这次演讲有一些想法:

这些是他学到的一些教训:
  • 在课堂上进行良好的设计至关重要。
  • 错误的测试使更改代码变得更加困难,而不是更容易。
  • 精简为BDD的 TDD最好(我需要对此进行更多了解)。
  • 正确实现抽象不仅可以改善代码,而且还开辟了新的可能性。
  • 干-即使重复一点也是不好的。
我也很感谢他在回答问题时发表的评论:编写测试时不要使用IoC容器。 我见过人们过去这样做:他们向构造函数注入了一组依赖项,并尝试重新配置容器以注入模拟。 只需在构造函数中传递模拟!

F#简介

埃里克·史密斯Eric Smith)指出:

虽然我对F#有所了解,但我并没有花太多时间来理解它。 与让设计师提供简介相比,您还有什么更好的机会? 当然,学习语言最好通过编写代码而不是听演讲来完成。 仍然有一个高层次的概述并看到一些示例很有趣。 Don最喜欢的事情之一是展示C#和F#在功能上等效的位之间的代码行差异。 一个异步I / O示例具有三页C#代码到十几行F#。

唐说,F#非常适合处理数据转换问题,但不适用于构建用户界面(即使可以从F#访问所有.NET UI库)。

DbC世界中的TDD

埃里克·史密斯Eric Smith )关于这次演讲的内容:

我过去曾发布过按合同设计( 第1部分第2部分 )的内容,并且打算在某个时候谈论单元测试和DbC,但从未进行过讨论。 因此,我很想听听格雷格所说的话。 他的演讲的第一部分是DbC的概述,展示了一些spec#代码来演示概念并让代码验证者发现问题。 我注意到微软已经在PDC上宣布了一个合同库,因此spec#的探索性工作将被并入框架中,而不是作为语言扩展。

Greg演讲的重点是测试和合同是免费的。 测试应侧重于行为(另一个对BDD的引用),而合同应侧重于约束。 拥有合同意味着更少的测试编写,因为您不必编写所有愚蠢的测试来检查参数x为null时是否引发了参数异常。 实际上,不仅您不需要编写这些测试,而且无论如何尝试,代码验证程序都会抱怨。 因此,您几乎无法编写这些测试,因此合同促使您朝着测试代码有意义的行为方向发展。

Matthew Podwysocki在博客文章中扩展了此演示文稿中的一些想法:

最近, 我一直在谈论 .NET 4.0中的新功能,即Code Contracts ,该功能是将按合同设计(DbC)习惯用法引入所有.NET语言,作为基类库的一部分。 上周,我参加了QCon,在我的CodeBetter团队中,格雷格·杨(Greg Young)进行了题为 DbC 世界中的TDD”的演讲,他在讲话中谈到,它们并不冲突,而是对测试初衷的补充。 两者都改善了彼此的用法。

在我的某些博客文章中甚至在QCon上出现的问题之一就是这个问题。 很多时候,DbC被钉为与TDD冲突,并且许多拥护使用DbC的人没有在做TDD,我认为这不一定是正确的。 让我们看一下每种情况适合总体情况的地方。

Volta:在任何地方都可以分发.NET

埃里克·史密斯(Eric Smith)很喜欢这个演讲:

我再次对这里的发言者能力印象深刻。 Eric Meijer是设计LINQ的人。 目前,他正在研究伏打(Volta),后者是.NET的GWT。 Volta允许将MSIL转换为Javascript,以便您可以构建编写.NET代码的客户端应用程序。 如果您恰巧在客户端上安装了Silverlight,则也可以将其定位为运行时环境,而不是使用Javascript。

还有一个开发工作流程,其中您编写一个分层的.NET应用程序,然后通过简单地注释代码将其拆分为客户端和服务器层,即应在服务器上执行哪些位以及在客户端上执行哪些位。 Greg Young, from the previous presentation, immediately started pushing back citing the 8 fallacies of distributed computing . Erik simply skipped ahead a little to a slide showing the 8 fallacies, and assured the audience that programmers would still be in control enough to avoid the pain.

数据存储的重新思考:面向文档的分布式数据库

CouchDB from 10,000ft

Omar Khan was impressed with CouchDB:

The discovery of the day was CouchDB . One of the lead developers/designers was sitting at the same table as me during the Digg session. Tim Bray was quite excited about the technology as well having mentioned it in his keynote on day 2. I attended one of two sessions about that covered what it's about from a high level. It has it's roots in Lotus Notes database design given that it was created by one of the people who worked on Lotus Notes in the past. It has some very cool features:
  • RESTful so it doesn't require any connectors
  • Stores all content in JSON
  • Querying the database is done via javascript functions for performing map reduce like functionality
  • Very efficient and performs versioning and synchronization when distributed

Java新兴技术

From Concurrent to Parallel

Omar Khan wrote about this talk:

The next talk was about the Java 7 concurrency library and the need for making things concurrent given the fact that processors are not getting faster but are moving towards multiple cores. Therefore, we as developers need to ensure that we ensure our applications are making everything run in parallel (concurrent). One might feel that if you are running a website that since every request is being handled by a different thread your job is complete. However, how many of us receive enough requests 24*7 to keep all the cores busy. Therefore, we need to make sure that applications is decomposed to the extent that we are doing everything concurrently that can be done concurrently to ensure maximum CPU utilization and decreased response time and therefore an improved user experience.

Razvan Peteanu一样

Straight after, Brian Goetz' got hard-core with the fork-join concurrency framework planned for JDK7. The reason awaits us at the horizon: multi-cores with lots of processors. Intel's CPU speed hasn't increased since 2003, what has kept Moore's Law valid is the proliferation of cores. It is still in a mild phase (we enjoy 4- and 8-way machines) and as long as their number is lower than the size of an app server's thread pool, spreading the load at that level is still fine. With the rumoured 256-core CPU to be made by Intel by 2010, the game changes.

Making efficient use of those processors requires parallelization of finer granularity, inside the processing of a single request. As Mr Goetz put it, "many programmers will become concurrent programmers, perhaps reluctantly". Machines with hundreds or thousands of processors have been out there for many years, it's just that they will become mainstream. The good thing is that techniques have already been developed.

Panel: How does the Open Source trend in Java affect your design and development process?

Omar Khan discussed this panel:

The last session of interest was a panel discussion on the affect that the open-source movement has and on java. It was the consensus that the open-source saved java from mediocrity and J2EE from certain death. The focus of the discussion moved to open-source during the current economic condition. The panel felt that slashed budgets within most companies would allow open-source to flourish, at least those that are well established. The last point of interest was about how they make a decision within their companies about what to open-source and what to charge for. Bob Lee of Google said that they open-source low level tools and frameworks and charge for things they build upon them. Others such as a guy from MuleSource and Rod Johnson from Spring Source said that they charge when people are already likely to be paying other vendors for their product/services. For example, the quote of the night was from Rod Johnson:

If you use MySql, tomcat and Apache as your application stack then you can use spring for free and that's great. However, if you are using Oracle Rack for a database, BEA Weblogic for an app server then you have no right to complain when we charge you for a Spring to Oracle RACK connector.

The point being if you're already spending money then why shouldn't we ask to be paid for what we are offering.c

Scaling Hibernate

Razvan Peteanu wrote about this presentation:

The beginning covered strategies to partition data across databases (with or without a security separation). Max Ross is the main guy behind Hibernate Shards so part of the talk was about it and what remains to be implemented before it's declared GA.

The other main ... shard was about Hibernate Search as a better way to implement free text searches than the classic SQL queries with %LIKE%. Having worked with a similar solution in the past (ie persistence layer + Lucene), it's good to see it integrated with Hibernate. Main advantages: Lucene can handle word variations, has built-in relevancy ranking and, the reason it's included in a scalability presentation, using it relieves the load of the text matching from the database to the app server, where it's easier to scale. Several slides covered the synchronous vs the asynchronous updates to the Lucene index; Emmanuel also responded to a question from the audience that Lucene/Hibernate Search is more flexible and cheaper then the full-text search capabilities of some databases - and again, the point is to relieve the database server of this work.

伸缩敏捷

Unleashing the Fossa: Scaling Agile in an Ambitious Culture

Brendan Quinn had detailed notes from this talk, including:

Some guys from salesforce.com spoke about how they migrated 50 teams, over 700 people, to Scrum -- all at once! Their rationale was that it was "like burning their boat after they had rowed to the other shore", and if some teams moved and others didn't, it would be a recipe for finger-pointing, missed dependency deadlines, and recriminations. Coupled with the fact that they all commit to the same codebase (!!) it sort of makes sense.

Some choice quotes:
  • (When a prominent agile coach was asked how to sell agile to upper management:) "I ran a large agile project for (a very large organisation) for two and a half years... the whole time my boss thought it was a waterfall project"
  • "agile can be gamed, just like anything else"
  • "If you measure velocity by how many tasks you complete, people will complete all the easy but useless tasks. We shouldn't be measuring task velocity, we should be measuring business-value velocity... people do what they are measured by" [the mantra our VC professor Terry has drilled into us: structure drives behaviour ]
  • "we've gone from one dogma [waterfall] to another dogma [scrum and XP] -- I thought the whole point was that we were supposed to be agile . What happened to thinking ?"

社会事件

Chris Patterson enjoyed the Wednesday night party:

That evening, there was an attendee party at a nearby pool hall. After some snacks and a quick game of pool, Dru and I sat down with Gregor to discuss some messaging concepts. After a quick exchange in Japanese, we earned a seat at the table and started to talk about various conversation patterns that we had identified in our own work. I was surprised that we were thinking along the same lines and that several of the message patterns we had used were going to be covered in the book. We also talked a little bit about Google Protocol Buffers (a platform and language independent format for serializing data in an efficient, binary stream). We started digging into GPB a few weeks ago as a way to build more system interoperability between Java and .NET when using MassTransit. Based on our process so far, this is likely to end up in a future release of MT.

Opinions about QCon itself

Razvan Peteanu enjoyed the conference:

The conference is overall quite good for its focus on the architecture and high scalability. It's more than the sheer scale itself: it's the ingenuity seen in the presentations or on the hallways. Some good stuff should come out of it.

The agile track overlaps somehow with other conferences, yet it's a sign that how software is developed cannot be separated from the software itself. QCon is a pretty young conference, but one with promise. If you want numbers, my estimation based on how many tables were in the lunch room is somewhere in between 300-350 people. The main organizers from InfoQ were around every day and you could chat with them - the event does not have a 'mega' feel to it.

As did Omar Khan :

In conclusion, QCon was a great experience. The hosts tried their best to make sure things were as tech focused as possible. There is a need to ensure that speakers cater their presentations to the audience and keep to the subject of the presentation. The lagging economy did have an effect on the conference, there were 200+ people that had been registered that didn't attend (you could see all of the uncollected badges at the registration desk) and if the economy improves I think that next year will be even better. It's truly a conference for developers by developers which I truly enjoyed. It was great to meet several of the authors of my favourite tech books.

And Kelvin Meeks :

I have found Mecca...the Holy Land.

So often I've paid to attend a conference - and felt that there were spots of "goodness" in the sessions that typically stretch on throughout a long day/week - but rarely felt that I was really getting my money's worth for the not insignificant time and expense that I sacrificed to travel and to attend a conference.

今天不是这样。 Every session I have attended today has been right on target with the particular interests I have as an enterprise architect.

Other quotes:

  • Matt Aimonetti - Qcon was also an awesome event where I met a lot of very interesting people and could measure the Merb interest in the "Enterprise" community
  • David Kinney - Overall, I thought QCon was excellent. While the quality of the speakers was somewhat varied in the sessions I attended, I never felt my time might be better spent checking out a different session, which puts it ahead of most conferences. (I'm a big fan of voting with my feet .) QCon is certainly on my short list of conferences to attend next year
  • Age Mooy - All in all it was very much worth it coming to San Francisco this year and hopefully I'll be back for more inspiration next year.
  • Alex Moffat - I enjoyed the conference quite a bit, it's smaller than Google I/O and JavaOne (obviously) so it didn't suffer from the crowding that can make JavaOne such a trial to navigate round. Even so on several occasions there was more than one talk I wanted to see at the same time so there was certainly interesting content
  • Ola Bini - As always, it turned out to be a great event, with fantastic people and a very interesting presentations on the schedule
  • Nick Sieger - QCon is a fun and well-organized event overall, and I got the impression that the folks present were on the leading edge of "the enterprise", which is exactly the people we need to engage to bring about growth in adoption of Ruby. For that reason, I hope we can kick it up a notch and take another shot at pimping Ruby at the next one. Maybe I'll see you there!
  • Steve Vinoski - Just getting ready to fly home from QCon San Francisco. Not surprisingly, it was another great conference, and the organizers told me that attendance was up about 30% over last year. Having a well organized and well executed conference with a large number of great speakers tends to have that effect.
  • Chris Patterson - since the day I arrived it has been great. The depth of knowledge is truly amazing and I'm enjoying some excellent conversations. The attendee mix is (based on my estimation) 50% Java developers, 30% .NET developers, and 20% other languages like Ruby or Python. The diverse nature of the conference is interesting in that many of the sessions are platform-neutral, focusing more on patterns and practices and a less on tools
  • Jeremy Miller - I've been at QCon San Francisco most of the week, and I think I can say that content wise, it's the best "eyes forward" conference I've ever attended. I'm finished with all my speaking and relatively satisfied with how it went
  • Brendan Quinn - The logistics were all great as usual, the wireless came thick and fast, and the food was pretty good -- ya gotta love that mid-afternoon ice cream run to keep the sugar levels high!
  • Dan Diephouse - I just got back from QCon in San Francisco. QCon is one of the best conferences around (IMHO). The speakers are great, the content quality is excellent, and the hallway conversations are thought provoking. If only I could've attended more!

Inspired by QCon

In addition to talking about the conference itself, several people wrote about things that happened as a result of discussions or presentations at QCon, including Matthew Podwysocki :

In the past, I've covered a bit about object oriented programming in F#. I'd like to come back to that series as there is much yet to cover on this topic. Last week, I spent some time with Erik Meijer at QCon and he and I both agreed that in some ways, F# is a better object oriented language than C# in some ways given some of the language flexibility.

Ola Bini also did an interview while at QCon:

At QCon SF last week, I had the pleasure of being interviewed by Fabio Akita. It turned out to become an almost 2 hour long interview that touched on many geek subjects, and ended up with some fairly detailed content about Ioke. If you're interested, and have the energy to hear my opinions about loads of programming languages, you can get it here: http://www.akitaonrails.com/2008/11/22/rails-podcast-brasil-qcon-special-ola-bini-jruby-ioke .

Nick Sieger wondered about how to include Ruby more in the enterprise:

This year's QCon San Francisco conference was my first time attending, and it was an eye-opener for me for several reasons.
[...]
The last item relates to my perception that Ruby is not yet seen as a worthwhile tool for enterprise software development. It leaves me with some cause for concern, though it reflects more on the state of the industry rather than on the way Ruby was presented at the conference itself.

What does it mean for Ruby to be "ready for the enterprise"? Does that imply JRuby? Running on the JVM or a Java application server, or even .NET? Reams of XML? Presence of buzzwords, such as JMS, Spring/Hibernate? Or ability to adapt to or leverage legacy code? All of these?

Erik Rozendaal wondered whether interest in Java was waning:

After two days of QCon you get the feeling that no one is talking about Java anymore. C#, Erlang, F#, Groovy, Ruby, and Scala seem to have taken over. The only new Java stuff being talked about are libraries, application servers, or just IDE improvements. No one is talking about the Java language.

Looking back, the last major change of Java language was with the release of Java 5 in 2004. Java 7 will bring changes, but is late. The advantage is stability, but the price to pay is that the brightest minds in the industry start to leave Java behind.

Omar Khan identified a list of software to keep an eye on:

Part of the purpose of attending QCon was to get in synch with the tech community in regards to technology they have experimented with and have found use for. The following is a list of technology/frameworks/etc of interest that I took away from the conference:
  • CouchDB - Document oriented database
  • Memcached - Distributed Hashmap
  • MemcacheDB - A database built as on Memcached and BerkleyDB
  • Drizzle - Lightweight SQL Database for the cloud/web
  • GearMan - Distributed processing framework
  • MogileFS - Distributed file system
I intend to spend some time investigating each of these pieces of technology in the coming months with the hope of making use of them when and where applicable.

Bjorn Rochel discovered the solution to a problem while chatting with Greg Young:

这听起来对您熟悉吗? From time to time someone delivers you answers to questions that have been on your mind for quite a while. You didn't find an answer on your own and most of the people you talked with either didn't care or hadn't satisfying answers for you. When you finally hear the answers you were searching for, you're . 。 。
  1. stunned how simple the actual solution is,
  2. wondering why you weren't able to solve that on your own,
  3. nevertheless happy and thankful to finally see the missing peace in your puzzle.
Today I had the luck to be able to talk with Gregory Young about (Distributed) Domain Driven Design in general and in particular some about questions regarding bidirectional mapping from domain object to DataTransferObject, and how messaging or eventing integrates with DDD. This is what I took from that discussion . 。 。

Ari Zilka was inspired to put together a table describing when to use different sorts of clustering:

In yesterday's panel on designing for scale, I polled the audience:

1. How many know what "eventually correct [or consistent] is" - 3 people
2. How many know when to use EHCache vs. Sleepycat - same 3 people
3. How many know the advantages of EHCache async replication vs. JMS - 2 of 3 people
4. How many know how to make memcache transactional - none
5. How many leverage async, event-driven designs in their apps on a daily basis - 1 person


There were about 60 people in the room.

This tells me that there is a lot of danger in putting a solution in the market and leaving the developer to figure out where to use your engine.

结论

旧金山QCon取得了巨大的成功,我们为能够举办这样的会议感到非常自豪。 它将继续是伦敦和旧金山的年度盛会,下一届QCon将于明年同一时间在每个地点举行。 We also look forward to bringing QCon into other regions which InfoQ serves, such as China and Japan. Thanks everyone for coming and we'll see you next year!!!!

We'd also like to invite you to our third annual QCon London conference . The event is taking place March 11-13, 2009. Registration for the 3 day conference is £1,105 until January 15! Register now and save £195. 与去年一样,会议将在伊丽莎白二世女王会议中心举行。

翻译自: https://www.infoq.com/articles/qconsf-2008-summary/?topicPageSponsorship=c1246725-b0a7-43a6-9ef9-68102c8d48e1

qcon

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个可能的 Python 实现代码,仅供参考: ```python import requests from bs4 import BeautifulSoup import pkuseg import matplotlib.pyplot as plt from wordcloud import WordCloud # 确定数据源 brand = "宝马5系" url_template = "https://www.dongchedi.com/koubei/{}?page={}" # 获取数据 questions = [] for month in range(1, 13): url = url_template.format(brand, month) for page in range(1, 11): page_url = url + "&sort=1&tp=3&page=" + str(page) response = requests.get(page_url) soup = BeautifulSoup(response.text, "html.parser") items = soup.select(".koubei-list > .item") if not items: break for item in items: question = item.select_one(".qcon > a").text.strip() questions.append(question) # 分词 seg = pkuseg.pkuseg() words = [] for question in questions: words.extend(seg.cut(question)) nouns = [word for word in words if word.isalnum() and word[0].isupper()] # 统计词频 word_count = {} for noun in nouns: if noun not in word_count: word_count[noun] = 0 word_count[noun] += 1 # 可视化 top_n = 10 top_words = sorted(word_count.items(), key=lambda x: x[1], reverse=True)[:top_n] labels, values = zip(*top_words) plt.bar(labels, values) plt.xticks(rotation=45) plt.title("Top {} Nouns for {}".format(top_n, brand)) plt.show() # 词云图 wordcloud = WordCloud(background_color="white").generate(" ".join(nouns)) plt.imshow(wordcloud, interpolation='bilinear') plt.axis("off") plt.show() ``` 其中,我们使用 pkuseg 分词包进行分词处理,使用 Matplotlib 库绘制柱状图展示频率最高的前十个名词,使用 WordCloud 库绘制词云图。 注意,该代码仅供参考,具体的实现方式还需要根据实际情况进行调整和改进。在编写爬虫程序时,需要注意遵守网站的 robots.txt 规定,不要过度频繁地访问同一网站,以免给网站带来过大的负担。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值