f.listFiles()?.size()?:0
2012年法国Devoxx的最后一天! 醒来并不容易,我必须喝一杯咖啡才能使我前进(而且我从不这样做)。
我没有对此做笔记,因为我的计算机重新启动了🙃
移动正在成为企业的战略:它开始等同于CRM,门户和其他资产。
在开发方面,移动开发类似于传统开发。 但是,有几个区别:开发周期非常短(几周),因为上市时间非常快,硬件制造商发布的频率更高,导致市场非常分散,我们回到了客户端服务器体系结构。
IBM最近收购了Worklight,这是一个可以解决所有先前策略的框架,还可以处理安全性,SSO和集成等问题。 Worklight提供了一个IDE,一个服务器,运行时组件和一个基于Web的控制台来监视移动应用程序和基础结构。
这个家伙还不错,有一些有趣的信息,但是早上9点的销售热闹使我感到遗憾的是没有以后再上床睡觉。
这个故事是关于为顶级公司工作的JavaEE开发人员George的。 无论如何,经过3年的工作,AZERTY项目才投入生产:GUI不好,IT主管很高兴,用户讨厌它。 乔治很高兴,他热爱复杂性,没有人了解系统的工作原理,救了他。 乔治被提升为项目经理,然后是项目总监。 有一天,当乔治参加OSS会议时,他听到了新的名词:Hibernate,敏捷等等。 但是,他不再学习那些新技术,而是不再学习高尔夫球和编码。 由于他现在有了预算,因此他将敏捷教练带入了自己的公司:它自然地失败了。 最终,他成为IT总监....用户拒绝了他的新项目AZERTY 3.0,并且用户在背后使用了Google Apps。 他的老板现在要求使用iPhone和Android应用程序。 他无法编写代码,最终被解雇。
乔治学会打高尔夫球时发生了什么? 最近两年,每15年发生一次范式转换:
标准分析师将Cloud划分为Saas,PaaS和IaaS作为金字塔。 对于开发人员来说,PaaS是最重要的,这与操作系统类似。 现在的趋势是服务开发。 有趣的是,尽管平台变得更加工业化,但软件开发已朝着Craft.io发展。
从历史上讲,Cloud开始于满足其自身需求(例如Google,Amazon等)的消费者网站。 如今,IaaS成为主流,但您仍然需要构建和维护自己的软件基础架构。 例如,去年亚马逊失败时,有3家创业公司幸免于难,这些创业公司都是自己构建平台的。
软件开发过程即将改变。 企业对消费者的应用正变得越来越像高级定制,每天都有新的应用出现。 某些应用程序的预期寿命甚至很短(例如Devoxx France应用程序)。 因此,必须并行缩短开发周期,从而缩短敏捷性。 通过切断基础架构,云使我们变得更加敏捷。
云基础架构的主要风险是供应商锁定。 Cloud Foundry通过提供开放源代码产品解决了该问题。 例如,AppFog使用Cloud Foundry并添加了PHP。 同样,您可以创建自己的私有云以将其托管在自己的基础架构上。
有两件事需要学习:
总之,乔治买了一部iPhone,每天写一点代码,阅读编程书,再次感到高兴! 此外,他不再打高尔夫球。 其余的取决于你...
哇,男人和会议都很不错。 如果您错过了主题演讲,请尽快在Parleys上查看。
作为开发人员,我们考虑抽象,因为如果没有抽象,我们将不得不处理0和1,而我们什么也做不了。 但是,通过使用抽象,我们有时会忘记它们只是抽象,而倾向于将它们视为真实的东西。
让我们看一个简单的文档。 您如何确保巧克力蛋糕食谱可以保存数百年? 将其放在Word文档中? 可能不是...获得文本格式会更好,但是会引发编码问题。 如果您是政府机构,赌注会更高。 目标不是保存文档,而是信息。
例如,emacs磁带仍然可用,但是没有什么可读取的。
[省略了其他有趣的示例,因为我输入的速度不够快,整个过程都是基于图片的]
Dietzler定律:使用诸如Acces(或否定上下文工具)之类的工具,用户想要的东西中有80%非常简单,难以实现10%,而最后10%则无法实现,因为您必须超越抽象,并且无法完成。
任何工具(例如Maven)都具有临界点。 因为一旦您超越了这一点,那将永远不再是美好的。 这时,您必须进行剪切和运行,但是这会很困难,因为您将被抽象所囚禁。
哇! 我错过了第一天的Neal会议,当时我对此感到后悔。 现在,我更加后悔。 先前的主题演讲将标准提高了很多,尼尔(Neal)以鲜艳的色彩通过了它。 任何想要进行真实表演(具有启动内容)的人都应该参加Neal的会议。 此外,你甚至可以得到他妻子的巧克力蛋糕食谱🙂
新语言似乎每时每刻都在蓬勃发展,但是去年,企业(红帽的锡兰,JetBrains的Kotlin和Google的Dart)宣布了这种新语言。 这是我与Kotlin成立之初非常接近的人进行演讲的机会。
JetBrain的座右铭是快乐地发展。 除IntelliJ的IDEA外,还有其他产品(TeamCity,PHPStorm等)。 Kotlin是:静态类型,在JVM,OSS上运行,由JetBrains在社区的帮助下开发。 为什么选择Kotlin? 因为IntelliJ的IDEA是基于Java的,尽管它不是最合适的,但其他语言也不是更好。
目标包括:
可以在不同的领域找到性能:没有自动装箱,在生成的代码中没有恒定的运行时开销以及较低的编译时间。 Kotlin很容易学习; libray开发者和“标准”开发人员(例如Scala)之间没有区别。 它侧重于从其他语言中获得的最佳实践。 这没有开创性的功能,只有常识。
[遵循一堆代码段]
最初,它看起来像Scala一样, fun
替换def
:有类似Scala的构造函数,vals和vars,traits,逆序类型/名称声明(由双冒号分隔)
扩展函数看起来足够好:您不仅可以扩展类型,还可以扩展函数而无需费心继承整个九码。 同样,在Kotlin中,函数是一等公民(总之,您会使用类型推断获得闭包)。 有趣的是,默认情况下it
是函数文字的第一个参数(例如Groovy)。
Kotlin的一个有趣功能是使用dollar
符号引用Strings中的变量,以便在运行时替换变量。
运算符重载的形式是有限的:只有一部分运算符可用于重载,因为这需要通过专门定义的函数来完成。 例如,要重载-
,您需要ovveride minus
函数。
为了管理可空性,Kotlin允许使用?
操作员仅允许安全呼叫(再次针对Groovy)。 例如,如果该列表是下面的代码片断返回列表大小或 0 null
:
f.listFiles()?.size()?:0
问号将返回类型标记为可为空,否则,则不可为空,编译器会抱怨; 它使核心更加简洁,并为处理null
值提供了安全网。
Kotlin还提供模式匹配(例如在Scala中,语法非常相似)。 Kotlin是Groovy构建器的改进,它是类型安全的:例如,HTML构建器在编译时检查有效性!
更多功能包括:
这不是一个有趣的演讲,但演讲者中缺少一些激情。 从其他语言中获取什么有用的策略是一种非常有趣的策略。 至少,您可以立即获得许多优点。 但是,我看到一个大问题,JetBrains如何计划在达到临界质量时确保向后兼容。 演讲者的回答是:
JetBrains打算允许编译器扩展。
让您想到的食物(直接来自演讲者):如果JetBrains知道正在开发Ceylon,则可能不会启动该项目。
好的,考虑到IBM的售前谈话,我有点受虐狂,但是我对GUI确实很感兴趣,也许JavaFX的下一版本是合适的(考虑到Flex的命运)。
演讲开始时,发言人要求消除对JavaFX的所有误解( 好主意 )。 JavaFX是Swing,SWT和HTML5的补充。 在Android和iOS上,它有效! JavaFX生态系统的最后一个补充是JavaFX场景构建器。
JavaFX的目标是实现:
JavaFX 1.0收到了开发人员的不好反馈,他们不想学习新的脚本语言。 当前版本是JavaFX,自2011年起可在Windows上使用(Mac OS和Linux即将完成GA)。 在工具方面,提供了NetBeans 7.1、7.2和Scene Builder。 社区已经照顾了Eclipse中的一些集成插件,而JetBrains已联系以将JavaFX开发集成到IntelliJ IDEA中。
当前实现的目标包括:包含在OpenJDK中(通过OpenJFX)和JDK的通用许可证。 对于后者,请注意JavaFX将成为JDK 8的JavaSE的一部分。Oracle的政策是将JSR提交给JCP进行标准化。
使用JavaFX,您可以使用所需的工具,从所有Java功能(泛型,注释等)中受益,甚至可以使用在JVM上运行的首选语言。 在JavaFX 2中,FXML标记语言可用于UI定义(就像Flex中的MXML一样)。 或者,您仍然可以通过编程方式对UI进行编码。 FXML可以与脚本语言(例如Javascript和Groovy)结合在一起。
在图形方面,体系结构(Prism)使得可以利用最佳的硬件加速。 新的窗口工具包称为Glass。 它的使用使访问高级功能(缓冲等)成为可能。 支持的媒体格式包括VP6,H.264,MP3和AAC(非常类似于支持HTML5媒体格式)。 此外,JavaFX嵌入了WebKit渲染引擎,因此可以在Java应用程序中解释HTML和Javascript。 Java和WebKit部件之间可以进行双向通信。 使用WebKit,您可以免费获得多平台测试。
通过将JavaFX与现有用户界面无缝集成,可以将Swing和SWT逐步迁移到JavaFX。 Swing / SWT的最大区别是使用CSS设置JavaFX组件样式的能力,因此您可以在Web和JavaFX上重用相同的样式表。 附带说明一下,OpenJFX周围已经有一个社区。 其他贡献包括Eclipse和OSGi插件,DataFX(数据源访问),ScalaFX和GroovyFX,框架(已经!)和JFXtras(其他UI控件和扩展)。
上周,宣布了JavaFX Scene Builder版本。 它是GUI的可视化开发工具; 支持拖放。 与NetBeans集成是开箱即用的,但是可以与其他IDE一起使用(因为它是独立工具)。 它完全用JavaFX开发,可用于Mac OS X和Windows。
路线图如下:
[对话以3层演示结尾,以JavaFX开发的带有CSS的GUI和Scene Builder演示了拖放操作。
单声道扬声器,我不得不打架睡觉。 从更积极的角度来看,这不是销售活动,但有一些有趣的信息。 演讲者还介绍了使用硬件加速计运行JavaFX的iPad。
该会话是关于缓存的内部工作的。 Guava是低级Java库的OSS。 包com.google.common.cache
包含simpel缓存。
当发生缓存未命中时, LoadingCache
自动加载条目,而不会发生Cache
。 委托CacheLoader
接口知道如何加载条目。
内部并发处理与ConcurrentHashMap
非常相似。 如果在加载期间发生异常,则必须捕获运行时异常并重新抛出检查的IOException
。 对于短暂的键,构建器上的流畅的weakKeys()
方法允许使用弱引用。 契约中,为了允许垃圾收集器收集缓存的值,使用了softKeys()
方法(但是存在性能问题,不鼓励使用此方法)。
Weighter
接口指定权重计算,并在构建缓存加载器时进行传递。 在这种情况下,驱逐是完全相同的。 expireAfterAccess()
方法实现的 expireAfterWrite()
方法提供了expireAfterWrite()
逐出策略 下一步是能够分析缓存:只需使用recordStats()
方法即可。 CacheStats
由缓存对象上的stats()
方法返回,并允许查询。 分析了缓存后,现在可以调整配置:您必须创建一个包含键值对的字符串,并将其传递给构建器。
Guava还提供围绕缓存的事件侦听器模型。 构建器允许通过removalListener
进行侦听器注册,该removalListener
以RemovalListener
实例为参数。 当然,通过注册多个对象,您可以拥有多个侦听器。 每当条目被收回(无论使用哪种策略)时,都会调用侦听器。 默认情况下,侦听器被同步调用:如果它们是重量级的,建议将它们设为异步(或将它们包装在RemovalListener.asynchronous
)。
番石榴还提供了两种不同的刷新缓存的方法:
reload()
方法来手动刷新,该方法可以异步实现 refreshAfterWrite()
方法来自动刷新 应实现异步刷新以避免阻塞用户线程。 只需使用Java的FutureTask
...
有时,缓存加载器同时加载一组条目比一次加载一组条目效率更高。 这是通过重写CacheLoader.loadAll()
和LoadingCache.getAll()
。 后者不会阻止对同一密钥的多个请求。
到目前为止,缓存是由缓存加载器提供的。 但是,我们如何处理特定的用例来手动填充缓存? 只需使用ifPresent()
来查询是否存在键,然后使用put()
来将条目放入缓存中,就可以ifPresent()
完成此操作。
为了实现非加载缓存,我们根本不需要CacheLoader
。 调用CacheBuilder.build()
,您将获得一个这样的缓存。 为了禁用缓存,当前的规范方法是将maximumSize
设置为0。这可以在运行时通过CacheBuilderSpec
类完成。
可以使用Cache.asMap()
在类似地图上迭代缓存。 所有ConcurrentMap
写入操作均已实现,但不建议使用它们(改用CacheLoader
或Future
)。 请注意,两个get()
方法具有相似的签名,但它们是不同的( Map.get()
实际上是“如果存在则获取”)。
未来的工作包括:
AsyncLoadingCache
在get(K)
上返回Future
CacheBuilder.withBackingCache()
提供缓存分层(例如L1 + L2) 一个很好的谈话。 纳夫说。 不过,对于Java缓存API(JSR)中缺乏Guava团队的知识感到有些失望。
这个话题是关于什么是.Net以及Java缺少什么?
对于Java开发人员来说,.Net就像死亡的皮肤。 从更理性的角度来看,首先让我们记住,Sun和Microsoft首先是邻居。
值得注意的是,Sun花费了很长时间才发布Java5。.Net框架与2.0版中的Java功能相匹配,并且很快超越了它们。 .Net原理完全相同; 只有一些编码标准有所不同。 .Net从一开始就是多语种(C =,Iron Ruby,Iron Python,F =,...)。 为了引诱C ++程序员,Microsoft提供了低级API。
C =中的某些功能确实比Java中更好(或更准确地说,已经可用):
yield
关键字,我们可以避免在返回此类结果时创建临时集合 in
关键字提供 ⇒
)。 而且,lambdas参数是静态类型的。 因此我们可以创建流畅的API 在可移植方面,Apache Mono项目使开发人员可以在Linux和Mac OS X上进行编程和部署。但是,为了最大程度地实现脱钩,请不要忘记使用专有产品(例如SQL Server)。 尽管.Net被视为专制的,但存在替代社区,例如Alt.Net。
作为结论,以下是一些消息:
得益于两位演讲者(真正令人愉快的团队合作,伙计们)之间精心安排的舌头交流,您可以清楚地看到通过缩小差距带来的好处。
这是Devoxx Fr 2012的结尾。明年,大家见,谢谢大家在这里度过的所有美好时光。
翻译自: https://blog.frankel.ch/devoxx-fr-2012/3/