-可以说,昨晚对我来说有点难。 我是中午开始的一天,很适合我-
迈克·韦斯特 ( Mike West)保护客户端
如果您想要最大的受众群体,则可能会使用HTML,JavaScript和CSS。 Native还没有与那些传统技术相同的吸引力。 业务逻辑正从那些大型后端逐渐转向浏览器。
进行任何操作的前提条件是使用HTTPS安全地发送数据。 今天没有理由不使用HTTPS。 实际上,到达服务器之前,您可能会在服务器之间跳来跳去,直到到达目标为止。 现在,如果有人进入中间,则基本上就是吐司。 使用HTTP,无法检测数据。 相反,使用HTTPS,您可以防止在数据到达服务器(然后再返回给您)之前读写数据。
但是,服务器仍应侦听HTTP-因为大多数用户键入HTTP,然后重定向到HTTPS。 有一个HTTP标头Strict-Transport-Security
。 如果要开发应用程序,请访问https://startssl.com/并获取SSL证书。
最常见的安全攻击是脚本注入。 即使您可以编写良好的脚本,大多数脚本也会产生更糟糕的影响,例如访问cookie。 浏览器通常禁止从其他域访问cookie,但是XSS完全绕过了它。 最大的问题是用户不了解这一点。 OWASP提供了XSS速查表 ,但实质上,为了防御XSS,您必须验证每个输入并转义输出。
幸运的是,这两个问题早已解决。 开发人员只需考虑使用他们所使用的语言和框架的解决方案即可。 不幸的是,开发人员可能会犯错误,浏览器可能包含错误。 因此:
Systle单元的每个特权用户的每个程序都使用完成任务所需的最少特权进行操作
HTML有一个称为“内容安全策略”的内容,它是W3C规范 (当前处于草稿中)。 它采用HTTP标头的形式并指定有效的外部资源。 未指定的资源将不会由浏览器加载,因为后者会假定它们是由脚本注入的。 当前,CSP 1.0在Chrome和Firefox中实现。 XSS中的主要安全漏洞是内联脚本:为了防止出现这种情况,CSP 禁止内联JavaScript,包括声明和事件处理程序。 请注意,这可能被视为不利,但是两者都可以在HTML外部声明,请记住,这是一个安全漏洞。
或者,CSP还提供Content-Security-Policy-Report-Only
标头,以便将报告发送到URL。 这样一来,您就可以拥有宽松的CSP策略和更严格的CSP策略报告,以便可以在部署scistor之前对其进行测试。 HTML Rocks教程是设置安全策略的良好信息来源。
防止XSS的另一种方法是使用沙箱。 sandbox
是要应用于iframe的属性。 它通过将此iframe放入唯一的域来源中来工作。 这会带来一些主要后果:没有插件,没有脚本,没有表单提交,没有顶级导航,没有弹出窗口,没有自动播放,没有指针锁定和无缝iframe。 sandbox
允许值放宽某些限制。
与上述“最低特权策略”一致,一种可能的体系结构是设计一个页面,其中每个组件用于完成一项任务。 例如,我们可以使用沙箱执行潜在危险的脚本,并将其包装在简单的消息API下,以从主页获取其结果。
Kai Kreuzer和ThomasEichstädt-Engelen的 Geeks家庭自动化
-由于我最初是建筑师的学历,所以我应该弥合它与目前工作之间的鸿沟-
谈论您可以使用Java进行的有趣的事情。
家庭自动化不仅使事物电气化,还因为它们已经使电气化! 关键是,这些系统都没有被集成:家庭自动化必须强调集成。 家庭自动化有3个目标:
- 安慰
- 安全性(运动传感器,车窗触点等)
- 节能(切断电源等)
要创建智能家居,您将需要智能设备,用于管理家居或可视化数据。 这些功能中的许多功能已经在openHAB项目中可用 。 该项目由两部分组成:openHAB运行时,它是在JVM上运行的无头Java,以及用于配置前者的设计器。 两者都通过Samba共享文件夹或Dropbox进行通信。
运行时由以下部分组成:
- Java 7
- OSGi(Equinox品种)
- 声明式服务
- 电动势
- 和带有JAX-RS和Atmosphere的嵌入式码头
opneHAB的核心概念包括项目:它们是高级抽象,基本上代表您要控制的事物。 请注意,设备不是正确的抽象级别。 作为示例,无线电设备可以由开关项,调光器项和数字项组成。
openHAB的体系结构是一个简单的事件总线,在命令(到项目)和状态更新(从项目)到事件和真实设备之间进行绑定。 将项目注册表插入总线,以便同时具有UI和一些自动化规则,以及控制台和持久层。 有两种可用的UI:当然,Web是Windows Mobile,Android和iOS的本机。
openHAB在设备上提供了许多不同的绑定,但还与XMPP,OSGi和Google日历集成。 后者非常重要,因为您可以通过Google日历创建触发器。 其他功能包括数据库服务和导出功能(Sense,Cosm)。
-现实生活中的恶魔开始了,以Koubachi植物装置和门铃为例-
演示服务器可从demo.openHAB.org获得。
JVM上的行为驱动开发,这是John Ferguson Smart的结合状态
BDD具有许多明确的好处,例如减少了错误并提高了生产率,但是BDD还是吗? 本质上,BDD使业务,业务分析师,开发人员和测试人员使用一种通用语言。 BDD中没有测试,有可执行的规范。 在TDD中,您将测试代码的作用,而在BDD中,您将根据规范测试代码的作用。
实际上,可执行规范不仅是规范,而且是测试和文档 。 鉴于此,您要写的每一行都应该链接到规范中的一行:这意味着您不是在微观级别而是在宏观级别进行编码。 因此,您编写的每一行都对企业有价值。 总之,使用BDD将:
- 仅构建可增加实际价值的功能
- 减少浪费的精力(通过可追溯性)
- 改善沟通
- 获得更高质量,更好测试的产品
如何将BDD应用于业务分析师
一个典型的应用程序可能会有一些目标,每个目标都分解为功能,特征,故事,直至示例,每个目标都转化为验收标准。 这样做的主要目的是能够追溯每个标准。
-
目标
-
问客户真正需要什么并一直问为什么的问题,直到您实现高级目标为止。 标准用户倾向于将需求表达为实现:我们需要找到建议的简单实现背后的业务需求。
能力/功能
-
这些帮助实现了上面定义的目标。 您首先要做哪些功能? 我们应该实现实现目标中定义的业务价值所需的最低限度的功能。 传统上,使用三元组“ IN ORDER”,“ AS A”和“ I WANT”。
故事
-
故事扮演用户的角色,并描述,猜测,敏捷定义的用户故事。
编码工具
可用的工具包括JBehave , Cucumber , easyb和Thucydides ,它们可以通过其他工具进行报告。
请记住,TDD工具包括JUnit,Mockito,Spock和Arquillian。 BDD是关于验收测试的,而TDD是关于开发人员测试(单元和集成)的。 -我倾向于认为高级集成测试已开始接近用户接受测试-
演讲者将Spock用作TDD测试框架,因为它尊重Given / When / Then BDD结构。 另外,您可以轻松地模拟(和存根)所需的依赖关系,以及以表格方式对数据驱动的测试进行编码。 最后,Spock可以与Arquillian集成在一起。 另外,如果您是Scala的粉丝,则可以使用BDD2 。 最后,对于JavaScript,可以使用Jasmine 。
总之,它的行为一直持续下去。
Arjen Poutsma在Scala中使用Spring
会议的目的是了解如何在Scala语言中使用Spring。
-由于本次会议非常基于演示,因此我鼓励读者直接进入Spring Scala项目-
Josh Suereth的《有效Scala》
- 基本
- 使用表达式而不是语句。 告诉计算机该做什么是一条语句:创建一个变量,设置其值并返回该变量。 在Scala中,最后一个计算值是返回值。 注意
match
,if
和others返回值。 同样,Scalafor
expressions可以让您只说出自己想要什么,而不是想要什么! - 使用REPL(Scala命令行评估程序)。 REPL的优点在于,不仅显示了您创建的变量的类型,而且还具有自动补全功能,因此这是查找存在的变量的好方法。 从REPL开始,然后进行测试,然后再进行编码是一个好习惯。
- 保持不变。 在Java中,保持对可变集合的引用是非常危险的事情,因此您必须在存储/公开它们之前复制它们。 在这种情况下,您将承受性能的极大降低。 在Scala中,带有构造函数“注入”的`case`类使实现不变性更加简单。 此外,您将免费获得自动等式和哈希码,但是请记住,本地不变性是可以的,只要您不公开可变变量即可。
- 使用
Option
。 在Java中,您必须检查每个使用的参数是否为null,并且最好不要忘记一个! 在Scala中,for
表达式可用于轻松执行检查并产生所需的Option
结果。
- 使用表达式而不是语句。 告诉计算机该做什么是一条语句:创建一个变量,设置其值并返回该变量。 在Scala中,最后一个计算值是返回值。 注意
- 面向对象
- 将
def
用于抽象成员。 考虑到内存分配在JVM上的工作方式,我们必须声明一个块或使用def
。 由于前者是一种高级技术,因此请使用后者。 另外,您可以在case类中使用相同的def名称。 - 在非平凡的返回类型上注释API。 由于编译器确实进行类型推断,因此您可能会遇到复杂的情况,其中您推断的类型不是编译器所做的类型。 做文件!
- 优先考虑组成而不是继承。 -见著名的蛋糕图案 -
- 将
- 隐含的
- 当您需要在函数中提供默认参数但让调用者决定他要使用哪个默认参数时(与参数中的默认值相反),将使用隐式。
- 在“范围内”时发现隐式。 范围计算遵循严格( 但很复杂 )的搜索模式。 要做的一件好事是避免导入,因为导入并不会触发隐式,这一点并不明确。 因此,最好将隐式放置在伴随对象中。
- 隐式视图。 不管它们是什么,都不要使用隐式视图,而应使用隐式类。
- 种类
- 类型特征。 最佳做法是提供类型特征。
- 类型类。 使用类型类有很多好处,最重要的是可以控制您无法控制的猴子补丁类。
- 杂项
- Scala不是Java(也不是Haskell)。 学习编写Scala,不要以您知道的语言来编写。
- 了解您的收藏! 遍历是集合层次结构的根源。 接下来是Iterable,等等。当您需要按元素的索引访问元素时,可以使用索引序列,而当需要按头/尾访问时,可以使用线性序列。 因此,如果来自Java并且想要索引访问,请使用
Vector
而不是List
。 - Java集成。 首选API中的Java原语
- 从FP学习模式。
Vaadin与Joonas Lehtinen和Vaadin团队的聚会
基于Scala的Escalante应用服务器
Escalante是JBoss创建Scala应用服务器的尝试。 Scaladin是围绕Vaadin API的Scala包装,作为附加组件提供。 Lift是Scala Web框架,它具有很强的依赖性:Escalate使您不必在依赖于Lift的Web应用程序中部署Lift JAR。
流动
GWT通过mGWT和GWT Phonegap进行移动。 mGWT支持主要的移动浏览器,包括iOS,Android等。唯一的不同是,您可以在网络上找到它,而不必在应用商店中找到它。 Web性能是一个重要的主题:编译使它变得更容易,只有您必须考虑一些事情。 例如,启动性能由下载,评估和执行组成。 -查看有关网络性能的讨论-
很难手动进行JavaScript优化,因此大多数网站都不这样做。 相反,GWT编译器会强制执行这些良好做法( 例如,缓存)。 此外,通过GWT来实现应用程序的组成部分,这实际上使您无法做其他事情。 此外,GWT可以生成HTML5应用程序缓存的脱机清单。 相比之下,由于Google工程师的选择,GWT应用程序要小得多:例如,iOS主题中没有图像,只有纯CSS。 优化的另一个轴是最小输出(对于CSS)。 最终,只有实际使用的东西才在最终应用程序中:这就是“死代码删除”。 本质上,Android设备上运行的应用程序仅下载Android主题。
在运行时性能方面,让我们考虑一下布局。 用JavaScript进行布局需要时间! 一个规则是永远不要离开本地代码,在我们的例子中是CSS渲染引擎。 好吧,mGWT使用CSS3来布局页面。 如果我们考虑动画,那么在JavaScript中循环也是一个坏主意。 解决方案是相同的,只是使用CSS,它将使用GPU加速。
SASS主题在Vaadin 7
SASS是CSS编译器,因此可以将其视为“ CSS的GWT”。 CSS应该很简单,但不适用于现实应用程序和通用主题。 您想以正确的方式进行操作,因为它将存在很长时间。 IDE(例如Eclipse)对CSS的支持很糟糕:只有自动复杂功能。 关键是,CSS很难由一个以上的团队来维护(即使对于一个人来说,这也是很乏味的-至少可以这么说)。 另一方面,可维护的代码结构-导入会降低启动性能,因为每个CSS都需要HTTP请求。 SASS可以在这些方面提供帮助。
例如,您可以将CSS文件拆分为较小的文件,但SASS会将它们串联为一个文件。 此外,可以自动解析CSS中图像的URL路径。 -其余的演示文稿介绍了SASS功能; 您可以在此处查看简介或查看完整的SASS 文档 -
Vaadin团队已经用Java开发了自己的SASS编译器,因为最初的实现是基于Ruby的,我们不希望我们的应用程序具有任何Ruby依赖关系,对吗?
除了对SASS的支持之外,Vaadin 7还提供了一种通过setPrimaryStyleName()
完全删除组件的默认样式名称的方法,而不仅仅是只能添加其他CSS类名称。 与SASS mixin结合使用时,您可以结合使用不同主题的各个部分。
重要提示:SASS支持正在积极开发,测试中并提供反馈!
Vaadin中的可用性
-Vaadin解决方案合作伙伴Faros创建了Vaadin比利时见面会组织-
可用性是一个巨大的话题,关键是一个好的界面应该是不言而喻的。 可用性的定义是如何轻松地完成给定任务,而可访问性则确保了残疾人士获得同等的用户体验(在大多数情况下为盲人)。 默认的Vaadin主题设置不会将按钮呈现为HTML按钮,而是呈现为div
,屏幕阅读器无法将其识别为HTML按钮。 而且,由于Vaadin AJAX请求更新了UI,因此它确实可以抛弃屏幕阅读器。
WAI-ARIA是定义如何使RIA可以访问的标准。 为了实现这一点,它定义了标准角色,例如导航菜单或按钮,即使它不是真正HTML button
。 WAI-ARIA处于发展路线中,但由于时间限制而被冻结。
仍然已经有键盘和快捷键的支持。
Buttonbutton=newButton("OK");
button.setClickShortcut(KeyCode.ENTER);
一个好的做法是提供相对大小的屏幕单元,以便用户可以在其浏览器上增加字体大小。
Vaadin 7和下一步
Vaadin 7处于Beta 8状态。 决定是在准备就绪时交付,以免降低质量:应该在12月交付RC。 版本7是真正的主要版本,具有大量的核心重写。 目标包括授权开发人员,拥抱可扩展性和清理(Web是唯一受支持的平台)。
在Vaadin 7之后,路线图尚未决定...最大的错误是Vaadin 7宣布了一些事情,无法发布太多东西。 因此,没有针对Vaadin 8的计划。但是,7.1版计划于2013年2月发布,其中包括:
- 内置推送通道
- 新功能使SASS得以充分利用
- 开始向一些(少量)Vaadin小部件添加客户端APIS。
7.2版将更加侧重于(客户端)小部件。 在大多数情况下,使用(服务器)组件是比较明智的,但是在某些情况下,需要使用小部件(例如离线)。 由于将取消对GWT的支持,因此将重新设计桌子和组合框。 目标是2013年夏季。
其他非计划的改进包括:
- 基于声明式XML的UI,在UI声明中混合HTML,并与JPS和taglib集成,并与XML混合匹配
- 更好的IDE工具:附加组件支持,完整主题支持以及Visual Editor的声明性UI编辑模式
- Vaadin涵盖v7的书预计将于1月发布
- 威亚
- UI的即时翻译
- 全面的图表库,基于HighCharts,可通过Vaadin Pro帐户获得
- 带有Vaadin的Java EE 6 CDI(支持注入UI和视图),正在进行的工作可在GitHub上找到
-晚上,伙计们,晚上10点多-