This presentation introduces the key innovations that Play 2 brings to web application development in Java and Scala. The Play framework has brought high-productivity web development to Java with three innovations that changed the rules on Java EE: Java class and template save-and-reload that just works, a simplified stateless architecture that enables cloud deployment, and superior ease-of-use. Following Play's rapidly-growing popularity, Play 2.0 was released in March 2012 with innovations that are not just new in the Java world: type-safe view templates and HTTP routing, compile-time checking for static resources, and native support for both Java and Scala. Type safety matters. After dynamically-typed programming languages such as PHP and Ruby set the standard for high-productivity web development, Play built on their advantages and has created a type-safe web development framework with extensive compile-time checking. This is essential for applications that will scale to tens of thousands of lines of code, with hundreds of view templates. Meanwhile, Play avoids the architectural-complexity that is promoted by Java EE-based approaches. The result is that Play 2 first enables rapid initial application development and then Play 2 helps you build big, serious and scalable web applications.
Play Framework workshop: full stack java web appAndrew Skiba
The slides of Play Framework workshop from the meetup on Google Campus Tel Aviv on January 2014. Includes 5 hands-on assignments mixed with 5 additional steps to create a full application for remotely controlling YouTube on another computer. Demonstrates usage of AngularJS, Twitter Bootstrap, WebSockets. Discusses forms-based and single page web applications.
SenchaCon 2016: Building Enterprise Ext JS Apps with Mavenized Sencha Cmd - F...Sencha
In this session, we'll show you how CoreMedia's Maven plugin offers the deepest integration of Sencha Cmd into your Maven build process available today and takes modular Ext JS development to the next level.
Microsoft has traditionally been a laggard in the JavaScript space, making such developers question whether their war cries were being heard aloud. Fortunately, the situation is rapidly improving since the release of Visual Studio Code. Code is a free, lightweight, cross-platform code editor which is sure to change your perception of Microsoft.
This presentation will demonstrate how to utilize popular JavaScript tooling within the editor. The focus will be placed on the first-class support for debuggers, linters, transpilers, and task runners.
Geb is a browser automation solution.
Geb uses the power of Selenium WebDriver and more.
Geb + Spock API simplifies test automation using Given-When-Then Concept.
Play Framework workshop: full stack java web appAndrew Skiba
The slides of Play Framework workshop from the meetup on Google Campus Tel Aviv on January 2014. Includes 5 hands-on assignments mixed with 5 additional steps to create a full application for remotely controlling YouTube on another computer. Demonstrates usage of AngularJS, Twitter Bootstrap, WebSockets. Discusses forms-based and single page web applications.
SenchaCon 2016: Building Enterprise Ext JS Apps with Mavenized Sencha Cmd - F...Sencha
In this session, we'll show you how CoreMedia's Maven plugin offers the deepest integration of Sencha Cmd into your Maven build process available today and takes modular Ext JS development to the next level.
Microsoft has traditionally been a laggard in the JavaScript space, making such developers question whether their war cries were being heard aloud. Fortunately, the situation is rapidly improving since the release of Visual Studio Code. Code is a free, lightweight, cross-platform code editor which is sure to change your perception of Microsoft.
This presentation will demonstrate how to utilize popular JavaScript tooling within the editor. The focus will be placed on the first-class support for debuggers, linters, transpilers, and task runners.
Geb is a browser automation solution.
Geb uses the power of Selenium WebDriver and more.
Geb + Spock API simplifies test automation using Given-When-Then Concept.
Slides from my presentation, "Creating a Plug-In Architecture in .NET". Code is available as well at https://github.com/ondrejbalas/plugin-architecture
The development workflow of git github for beginnersGunjan Patel
For video of this session please visit https://youtu.be/lEnYz0b7omE
===================================================
Joomla! is using successful branching model to maintain and keep stable and staging separate. My presentation is mainly focused on beginners. How joomla is working with git and github to track bugs and release. I will explain basic functionality of Git, it's setup, basic git commands, explanation of commands. This will be basic to advance, so it will also help those who already know git but not following proper development workflow in their application. This presentation will guide and encourage them to use proper workflow. Beginners will able to get knowledge of Joomla development workflow which will help them to contribute in project easily. Topics which I am planning to cover are below,
* Set up your computer to use git & github.
* What is fork? How to fork a repository?
* Clone Repository to work in local
* What is upstream? How to configure upstream?
* Commit and Push changes
* Sending Pull request
* Updating your pull request.
=========== Help ==============
I have write some handy commands so it can be easy to work with Git. You may find book here https://gunjanpatel.gitbooks.io/gitbranchingmodel/content/index.html
Red Hat and Oracle: Delivering on the Promise of Interoperability in Java EE 7Max Andersen
This session discusses the promise of interoperability in the Java EE 7 platform and what has been done—even now, at its time of release—to maintain this. The session shows how a Java EE 7 application can be easily built using NetBeans and JBoss development tools. This application can then be deployed on JBoss, GlassFish, and Oracle WebLogic, showing the promise of interoperability. The state of Java EE 7 compliance for different application servers is discussed and demonstrated.
Optimising Your Front End Workflow With Symfony, Twig, Bower and GulpMatthew Davis
We take great care in our back end coding workflow, optimising, automating and abstracting as much as is possible. So why don't we do that with our front end code?
We'll take a look at some tools to help us take our front end workflow to the next level, and hopefully optimise our load times in the process!
We'll be looking at using Twig templates and optimising them for the different areas of your application, integrating Bower and Gulp for managing assets and processing our front-end code to avoid repetitive tasks - looking at how that impacts the typical Symfony workflow.
Creating a Smooth Development Workflow for High-Quality Modular Open-Source P...Pantheon
Greg Anderson's slide deck from BADCamp 2016.
Having a fine-tuned continuous integration environment is extremely valuable, even for small projects. Today, there is a wide variety of standalone projects and online Software-As-A-Service offerings that can super-streamline your everyday development tasks that can help you get your projects up and running like a pro. In this session, we'll look at how you can get the most out of:
- GitHub source code repository
- Packagist package manager for Composer
- Travis CI continuous integration service
- Coveralls code coverage service
- Scrutinizer static analysis service
- Box2 phar builder
- PhpDocumentor api documentation generator
- ReadTheDocs online documentation reader service
- Composer scripts and projects for running local tests and builds
How to Turn a Pile of Python Files Into an Open Source Project.
You have written some Python code, you think it would be useful to the world, and you would like to give back to the open source world. But where do you start? This talk will give you some guidance on how you can release your project
1. Create React Native App
2. Implementazione del codice del gioco del memory
3. Expo: integrazione di funzionalità native
4. Eject del progetto: integrazione di Expo
5. Integrazione camera/libreria foto
IBM Drupal Users Group Discussion on Managing and Deploying ConfigurationDevelopment Seed
Presentation to the IBM Drupal Users Group on improving configuration management in Drupal using the Features module and exportables. This is becoming a best practice for configuration management.
TCE introduction (scalability with Scala and Akka)Andrew Skiba
The intro talk for Tikal Community Event on September 2013. Intended to be a warm-up for the next lectures on Akka and Scala for creating applications which utilize modern multicore systems.
Slides from my presentation, "Creating a Plug-In Architecture in .NET". Code is available as well at https://github.com/ondrejbalas/plugin-architecture
The development workflow of git github for beginnersGunjan Patel
For video of this session please visit https://youtu.be/lEnYz0b7omE
===================================================
Joomla! is using successful branching model to maintain and keep stable and staging separate. My presentation is mainly focused on beginners. How joomla is working with git and github to track bugs and release. I will explain basic functionality of Git, it's setup, basic git commands, explanation of commands. This will be basic to advance, so it will also help those who already know git but not following proper development workflow in their application. This presentation will guide and encourage them to use proper workflow. Beginners will able to get knowledge of Joomla development workflow which will help them to contribute in project easily. Topics which I am planning to cover are below,
* Set up your computer to use git & github.
* What is fork? How to fork a repository?
* Clone Repository to work in local
* What is upstream? How to configure upstream?
* Commit and Push changes
* Sending Pull request
* Updating your pull request.
=========== Help ==============
I have write some handy commands so it can be easy to work with Git. You may find book here https://gunjanpatel.gitbooks.io/gitbranchingmodel/content/index.html
Red Hat and Oracle: Delivering on the Promise of Interoperability in Java EE 7Max Andersen
This session discusses the promise of interoperability in the Java EE 7 platform and what has been done—even now, at its time of release—to maintain this. The session shows how a Java EE 7 application can be easily built using NetBeans and JBoss development tools. This application can then be deployed on JBoss, GlassFish, and Oracle WebLogic, showing the promise of interoperability. The state of Java EE 7 compliance for different application servers is discussed and demonstrated.
Optimising Your Front End Workflow With Symfony, Twig, Bower and GulpMatthew Davis
We take great care in our back end coding workflow, optimising, automating and abstracting as much as is possible. So why don't we do that with our front end code?
We'll take a look at some tools to help us take our front end workflow to the next level, and hopefully optimise our load times in the process!
We'll be looking at using Twig templates and optimising them for the different areas of your application, integrating Bower and Gulp for managing assets and processing our front-end code to avoid repetitive tasks - looking at how that impacts the typical Symfony workflow.
Creating a Smooth Development Workflow for High-Quality Modular Open-Source P...Pantheon
Greg Anderson's slide deck from BADCamp 2016.
Having a fine-tuned continuous integration environment is extremely valuable, even for small projects. Today, there is a wide variety of standalone projects and online Software-As-A-Service offerings that can super-streamline your everyday development tasks that can help you get your projects up and running like a pro. In this session, we'll look at how you can get the most out of:
- GitHub source code repository
- Packagist package manager for Composer
- Travis CI continuous integration service
- Coveralls code coverage service
- Scrutinizer static analysis service
- Box2 phar builder
- PhpDocumentor api documentation generator
- ReadTheDocs online documentation reader service
- Composer scripts and projects for running local tests and builds
How to Turn a Pile of Python Files Into an Open Source Project.
You have written some Python code, you think it would be useful to the world, and you would like to give back to the open source world. But where do you start? This talk will give you some guidance on how you can release your project
1. Create React Native App
2. Implementazione del codice del gioco del memory
3. Expo: integrazione di funzionalità native
4. Eject del progetto: integrazione di Expo
5. Integrazione camera/libreria foto
IBM Drupal Users Group Discussion on Managing and Deploying ConfigurationDevelopment Seed
Presentation to the IBM Drupal Users Group on improving configuration management in Drupal using the Features module and exportables. This is becoming a best practice for configuration management.
TCE introduction (scalability with Scala and Akka)Andrew Skiba
The intro talk for Tikal Community Event on September 2013. Intended to be a warm-up for the next lectures on Akka and Scala for creating applications which utilize modern multicore systems.
Slides vom Vaadin BBQ 8.8.2013 bei mp technology in Zürich.
Talk zum Thema Erstellung von Vaadin 7 Erweiterungen auf Browserseite von Benjamin Schupp, Lead Architect, mp technology. http://www.mptechnology.ch
Scala, Play Framework и SBT для быстрого прототипирования и разработки веб-пр...Magneta AI
Антон Кириллов, Zeptolab (Москва)
Доклад посвящен обзору ключевых технологий стека Typesafe и анализу ключевых преимуществ и недостатков на примере реального проекта:
* Действительно ли Scala - “более лучшая” Java? Что следует знать, начиная внедрять Scala.
* Play Framework: больше чем просто контейнер. Архитектура и возможности.
* Доступ к базам данных: библиотеки и подходы, эволюция схемы БД во времени
* Actors: безболезненная многопоточность!
* Simple Build Tool: не совсем simple, но крайне функциональный инструмент автоматической сборки.
Рассматриваемые технологии позволяют “из коробки” начать создавать прототипы веб-приложений за очень короткое время и в дальнейшем наращивать их функционал. Тем не менее, из-за молодости стека существует большое количество “граблей”, о которых следует знать, принимая решение об использовании данного набора технологий.
Here is the blog: http://www.aurorasolutions.io/architecture-workflow-of-modern-web-apps/
In the IT industry the biggest problem we regularly face is the abundance of choice. We have tons of frameworks, languages, tools, platforms, etc. Although for competition purposes; multiple choices are ultimately very good but we usually find ourselves in paralysis when we have to choose among them for our next project.
People usually still consider that (frontend) of web applications are created by mixing together HTML, CSS & JavaScript without giving any thoughts about the frontend architecture, workflow and testing; but things have definitely changed now since last couple of years and in this presentation I try to explain that how JavaScript and it’s related stuff has become first class citizen and how the new workflow looks like. And I will also explain that how the architecture of modern web applications is migrating from thick server-side applications to smart clients and services on their journey North to pure Microservices.
Here is the list of different tools and frameworks that have been discussed in this presentation:
* Yeoman: (http://yeoman.io/) Yeoman is the web’s scaffolding tool for modern webapps. Yeoman helps you to kickstart new projects, prescribing best practices and tools to help you stay productive.
* Bower: (http://bower.io/) Bower is used for dependency management, so that you no longer have to manually download and manage your scripts. Web sites are made of lots of things — frameworks, libraries, assets, utilities, and rainbows. Bower manages all these things for you.
* Grunt: (http://gruntjs.com/) Grunt is a task-based command line build tool for JavaScript projects. When you work on large projects you have couple of things that you do regularly and you would like them to be automated; Grunt is the tool to solve that problem!
* HTML5 Boilerplate: (https://html5boilerplate.com/) HTML5 Boilerplate is a professional front-end template for building fast, robust, and adaptable web apps or sites.
* Twitter Bootstrap: (http://getbootstrap.com/2.3.2/) Sleek, intuitive, and powerful front-end framework for faster and easier web development.
* Jasmine: (https://github.com/jasmine/jasmine) Jasmine is a behavior-driven development framework for testing JavaScript code. It does not depend on any other JavaScript frameworks. It does not require a DOM. And it has a clean, obvious syntax so that you can easily write tests.
* Karma: (https://github.com/karma-runner/karma/) A simple tool that allows you to execute JavaScript code in multiple real browsers.
* PhantomJS: (https://github.com/ariya/phantomjs/) PhantomJS is a headless WebKit scriptable with JavaScript.
* Protractor: (https://github.com/angular/protractor) Protractor is an end-to-end test framework for AngularJS applications.
Angular (v2 and up) - Morning to understand - LinagoraLINAGORA
Slides of the talk about Angular, at the "Matinée Pour Comprendre" organized by Linagora the 22/03/17.
Discover what's new in Angular, why is it more than just a framework (platform) and how to manage your data with RxJs and Redux.
The presentation which I was using during my talk at EPAM Lviv JS community about offline-first applications. Contains high-level review of tools and web platform to submerge folks in a world of offline-first thinking.
Technical Tips: Visual Regression Testing and Environment Comparison with Bac...Building Blocks
As a Front End Web Developer, experimenting with new tools to add to your workflow (and going down the rabbit hole with them!) is all part and parcel of refining your craft. Chris Eccles, Technical Manager at Building Blocks has been doing just this and has some invaluable insight into CSS Visual Regression using Backstop.JS.
CSS Visual Regression testing is the process of running automated visual test comparisons on pages or elements in your projects. Using Backstop.JS, Chris has discovered that this tool is intuitive, allowing quick configuration to allow you to get up and rolling quickly.
Backstop.JS serves your tests via a webpage which gives you the visual feedback needed for targeting bugs caused from CSS related issues. These comparisons can uncover bugs you’d otherwise not learn about until it’s too late. A very useful tool to have in your Front End arsenal, wouldn’t you agree?
Chris has been sharing his insights with the BB team and wanted to share with our blog readers also. So, sit back and enjoy the ride through the wonderful world of Backstop.JS.
Ten practical ways to improve front-end performanceAndrew Rota
Conference talk presented at PHP South Coast 2017. Ten concrete ways to improve web performance, split between quick tactical wins and longer-term overarching strategies.
Code for Startup MVP (Ruby on Rails) Session 1Henry S
First Session on Learning to Code for Startup MVP's using Ruby on Rails.
This session covers the web architecture, Git/GitHub and makes a real rails app that is deployed to Heroku at the end.
Thanks,
Henry
SOA Knowledge Kit, Developer Productivity and Performance Comparison AnalysisClever Moe
Frank Cohen's presentation at the Gartner Application Architecture Development and Integration (AADI) conference 2011. Covers results of an open source comparison of SOA stacks from Oracle, IBM, and TIBCO. Compares developer productivity and performance of the same use case implemented on each stack.
Testing Vue Apps with Cypress.io (STLJS Meetup April 2018)Christian Catalan
Presented at the STLJS Meetup (St Louis, MO)
We dive into a Vue application used in semiconductor labs for transistor measurements. We discuss how get started with E2E testing with Cypress.io. And give a crash course into Vue applications.
Video: https://www.youtube.com/watch?v=dpB0YgnFyZQ
Single Page Applications – Know The Ecosystem systemSynerzip
This webinar discusses technology frameworks recommended approach for building Single Page web applications.
In this Webinar, we will explore what goes into building a Single Page Application and the ecosystem around it. We will be looking at different aspects of Single Page Applications and how they fit together.
Read more at https://www.synerzip.com/webinar/building-single-page-applications-know-the-ecosystem-webinar-february-2014/
JSFest 2019: Technology agnostic microservices at SPA frontendVlad Fedosov
We'll go through the possible ways to bring technology agnostic microservice architecture to the frontend, review pros/cons of each of them. We also will check the "ultimate solution" that handles microservices with SSR in SPA manner.
This talk will be interesting for ones who have multiple teams working on the same frontend application.
Everything I know about software in spaghetti bolognese: managing complexityJAX London
None of of us enjoy spaghetti code, much less spaghetti builds, spaghetti tests, or spaghetti classpaths. Some days software engineering seems like the struggle against spaghetti - modern projects often become a large and complex tangle of source code and resources, and the runtime interactions are even worse! This means many projects are hard to navigate, difficult to extend and problematic to deploy/run. You only have to look at the OpenJDK itself to see the problems it faces in trying to have a smaller deployment and runtime footprint! Jigsaw was to be the inbuilt solution for the OpenJDK, extending beyond the JVM itself to help applications with their modularisation story (i.e. Jigsaw or OSGi). Sadly, Jigsaw is not going to make it for Java 8, so developers are left with only a few tooling choices in order to help them. However, tooling is only part of the answer in managing the complexity. What really matters in avoiding a noodly mess is the layout of your source code and resources, clear contracts, and how you think about the dependencies your code has at runtime. Dr Holly Cummins and Martijn Verburg will take you through some of the practical design decisions you can take to help modularise your application properly, independent of tooling. Time permitting they'll then showcase some of tooling support that OSGi can bring to the table as the premier modularity system for Java today.
Devops with the S for Sharing - Patrick DeboisJAX London
Devops means many things to many people. Even without a clear definition people instantly understand the problem space, while the solution space is much more complex and layered. In this talk on devops, different fields and practices will be presented, including how Devops is related to Agile and Lean, and the central roles that infrastructure as code, metrics and monitoring have. Many devops talks relate to the CAMS acronym : Culture, Automation, Measuring and Sharing. The S for Sharing is usually taken for granted and does not get much explanation, but in this talk it will be right in the centre. Without Sharing there is no Devops and successful adoption is impossible.
Busy Developer's Guide to Windows 8 HTML/JavaScript AppsJAX London
With the upcoming release of Windows 8, Microsoft decided to bring HTML+Javascript into the world of Windows-platform application development as a first-class citizen. But make no mistake, this isn’t an attempt to somehow subvert Web developers—it’s more about enabling Web developers to leverage those skills in building “native” Windows applications running on the Windows 8 laptops, desktops, and slates. In this presentation, we’ll go over the basics of building a Windows 8 app using HTML and JavaScript, including a brief overview of what’s possible—and what’s not—for the Web developer seeking to “go native” on Windows.
It's code but not as we know: Infrastructure as Code - Patrick DeboisJAX London
Configuration Management systems like CFEngine, Puppet and Chef, are often adopted as part of devops toolchains. It promises us infrastructure as code a concept that leads to 'Agile' infrastructure: In this session I'd like to give: - a brief explanation of the concept and why it's useful - an overview about the similarities this has with regular code - concepts such as TDD, BDD how well can they be translated - how it fits in with continuous Integration for systems Besides the concept translation I will add links to existing tools and project that working and evolving in the space. And finally, is it really the same? Does a coding background help you? Where do the tools/concepts need improvement? After this session I'm sure you'll be ready to give it a spin and explore more and possibly share some ideas back.
Locks? We Don't Need No Stinkin' Locks - Michael BarkerJAX London
Embrace the dark side. As a developer you'll often be advised that writing concurrent code should be the purview of the genius coders alone. In this talk Michael Barker will discard that notion into the cesspits of logic and reason and attempt to present on the less understood area of non-blocking concurrency, i.e. concurrency without locks. We'll look the modern Intel CPU architecture, why we need a memory model, the performance costs of various non-blocking constructs and delve into the implementation details of the latest version of the Disruptor to see how non-blocking concurrency can be applied to build high performance data structures.
Worse is better, for better or for worse - Kevlin HenneyJAX London
Over two decades ago, Richard P Gabriel proposed the thesis of "Worse Is Better" to explain why some things that are designed to be pure and perfect are eclipsed by solutions that are seemingly limited and incomplete. This is not simply the observation that things that should be better are not, but that some solutions that were not designed to be the best were nonetheless effective and were the better option. We find many examples of this in software development, some more provocative and surprising than others. In this talk we revisit the original premise and question in the context of software architecture.
Java performance: What's the big deal? - Trisha GeeJAX London
It seems that everywhere you look these days people are needing to work on high performance/low latency applications. If they're not already working on them, then they want to be. But what do you really need to know when you're working on performance-sensitive systems? Where do you get started? In this session, Trisha outlines things you need to consider when thinking about performance, covers some of the frequently-asked questions, and notes the pitfalls and common traps that developers fall into.
There is an increasing interest in functional programming from Java developers and the organisations in which they work. For many companies the challenge now is how to make use of the competitive advantage of functional programming. For developers, how do you adapt your mindset to this newly reimagined paradigm? Through the use of examples and a modular approach to design, Clojure made simple will show how developers can be productive quickly without a major change to their current development life-cycle. We will also cover the Clojure build process, tools and exciting projects out there.
HTML alchemy: the secrets of mixing JavaScript and Java EE - Matthias WessendorfJAX London
A deep dive on creating mobile-ready, cloud-enabled, HTML5 applications based on Java EE and modern JavaScript. You will learn how to balance and combine the enterprise Java programming model, based on APIs such as CDI, JAX-RS and EJB 3.1, with JavaScript libraries like jQuery Mobile, Backbone, Require and Underscore, while taking advantage of the ease of deployment and elasticity of the cloud.
Complexity theory and software development : Tim BerglundJAX London
Some systems are too large to be understood entirely by any one human mind. They are composed of a diverse array of individual components capable of interacting with each other and adapting to a changing environment. As systems, they produce behavior that differs in kind from the behavior of their components. Complexity Theory is an emerging discipline that seeks to describe such phenomena previously encountered in biology, sociology, economics, and other disciplines. Beyond new ways of looking at ant colonies, fashion trends, and national economies, complexity theory promises powerful insights to software development. The Internet—perhaps the most valuable piece of computing infrastructure of the present day—may fit the description of a complex system. Large corporate organizations in which developers are employed have complex characteristics. In this session, we'll explore what makes a complex system, what advantages complexity has to offer us, and how to harness these in the systems we build.
Why FLOSS is a Java developer's best friend: Dave GruberJAX London
The explosion of new open source projects is changing the game for today’s Java developers. With literally hundreds of thousands of FOSS projects underway, the opportunity to leverage open source to deliver “the trifecta” (faster/better/cheaper) has never been better. In this session we will explore tools and resources that can help you navigate the vast world of open source projects, in addition to sharing tips and tricks that will help you narrow the field so you can quickly get to the right projects for your next application.
Scalable systems make us face challenges like concurrency, distribution, fault tolerance, elasticity, etc. Akka not only steps up to meet these, but it makes writing scalable software particularly easy. We will demo Akka's most important tool, the actor model, using a vivid example and live coding.
Alternative databases continue to establish their role in the technology stack of the future—and for many, the technology stack of the present. Making mature engineering decisions about when to adopt new products is not easy, and requires that we learn about them both from an abstract perspective and from a very concrete one as well. If you are going to recommend a NoSQL database for a new project, you're going to have to look at code. In this talk, we'll examine three important contenders in the NoSQL space: Cassandra, MongoDB, and Neo4J. We'll review their data models, scaling paradigms, and query idioms. Most importantly, we'll work through the exercise of modeling a real-world problem with each database, and look at the code and queries we'd use to implement real product features. Come to this session for a thorough and thoroughly practical smackdown between three important NoSQL products.
Closures, the next "Big Thing" in Java: Russel WinderJAX London
Java 8 will bring lambda function and closures to the Java-verse. These tools will revolutionize programming using Java, leading to shorter more declarative code. But how can we prepare ourselves for this? A number of JVM-based languages already have support for lambda functions and closures: dynamically-typed languages like Groovy, and statically-typed languages like Scala and Kotlin. Can looking at examples of how to solve problems in these languages teach us how to do things in Java 8? Yes. Of course the observation of how programming changes may get people to start using Groovy, Scala, Kotlin, etc. instead of Java. The critical thing here is that we can realize the revolution in an evolutionary way. The JVM allows for all of these languages to work together, we can program bits in Java, bits in Groovy, bits in Scala, etc. So we can evolve extant systems by rewriting bits a little at a time. In this session we will look at these issues and a collection of examples to try and ascertain what the idioms might be in a post-Java 8 world.
Java and the machine - Martijn Verburg and Kirk PepperdineJAX London
In Terminator 3 - Rise of the Machines, bare metal comes back to haunt humanity, ruthlessly crushing all resistance. This keynote is here to warn you that the same thing is happening to Java and the JVM! Java was designed in a world where there were a wide range of hardware platforms to support. Its premise of Write Once Run Anywhere (WORA) proved to be one of the compelling reasons behind Java's dominance (even if the reality didn't quite meet the marketing hype). However, this WORA property means that Java and the JVM struggled to utilise specialist hardware and operating system features that could make a massive difference in the performance of your application. This problem has recently gotten much, much worse. Due to the rise of multi-core processors, massive increases in main memory and enhancements to other major hardware components (e.g. SSD), the JVM is now distant from utilising that hardware, causing some major performance and scalability issues! Kirk Pepperdine and Martijn Verburg will take you through the complexities of where Java meets the machine and loses. They'll give up some of their hard-won insights on how to work around these issues so that you can plan to avoid termination, unlike some of the poor souls that ran into the T-800...
Brendan McAdams explores the deeper relationship between the MongoDB database and various languages on the Java Virtual Machine such as Java, Scala, Clojure, JRuby and Python as well as the challenges posted getting MongoDB to play nice with these tools and their syntax. Also examined will be frameworks and integration points popular between MongoDB and the JVM such as Spring Data, Morphia and Lift’s MongoDB-Record component
New opportunities for connected data - Ian RobinsonJAX London
Today's complex data is not only big, but also semi-structured and densely connected. In this session we'll look at how size, structure and connectedness have converged to change the data world. We'll then go on to look at some of the new opportunities for creating end-user value that have emerged in a world of connected data, illustrated with practical examples implemented using Neo4j, the world's leading graph database.
The family of HTML5 technologies has pushed the pendulum away from rich client technologies and towards ever more capable web clients running in today's browsers. In particular, WebSockets brings new opportunities for efficient peer to peer communication, providing the basis for a new generation of interactive and 'live' web applications. This session examines the efforts underway to support WebSockets in the Java programming model using JSR 356, from its base level integration in the Java Servlet and Java EE containers, to a new easy to use API and toolset that is destined to become a part of the standard Java Platform.
The Big Data Con: Why Big Data is a Problem, not a Solution - Ian PloskerJAX London
"Big Data" is a commonly brandished term, but rarely does anyone provide a clear definition of it. If we stop to define Big Data, we find that at its core, it is about an inability to meet the challenges of information storage and access in a world where data is generated by the petabyte. As an alternative exists the concept of Critical Data, data that generates value for businesses, whose unavailability costs money or even lives. This is the data which has already been identified and understood to be at the core of a business. Together, we will gain a deeper understanding of how to gather, store, and access this business critical information.
Bluffers guide to elitist jargon - Martijn Verburg, Richard Warburton, James ...JAX London
Have you always secretly wondered what the heck 'monads' are? How about 'Tail-call recursion?' or 'monomorphic dispatch'? If this sort of terminology has ever left you with self-doubts or seething with anger because someone is confusing you with elitist terminology, then this is the talk for you! Dr Richard Warburton and the Diabolical Developer + James Gough will take a humorous look at the wide range of incomprehensible terminology in our industry today. They'll cover the concepts behind the jargon with simple examples and some practical tips on how to blend the terminology into your day to day technical conversations without scaring everyone off. At the end of the talk you'll be ready to battle it out on tough mailing lists (Scala!) and have a new appreciation for some of the academic principles behind our craft. Oh and as for monads? Well they're just like burritos, except they're not...
GraphRAG is All You need? LLM & Knowledge GraphGuy Korland
Guy Korland, CEO and Co-founder of FalkorDB, will review two articles on the integration of language models with knowledge graphs.
1. Unifying Large Language Models and Knowledge Graphs: A Roadmap.
https://arxiv.org/abs/2306.08302
2. Microsoft Research's GraphRAG paper and a review paper on various uses of knowledge graphs:
https://www.microsoft.com/en-us/research/blog/graphrag-unlocking-llm-discovery-on-narrative-private-data/
Search and Society: Reimagining Information Access for Radical FuturesBhaskar Mitra
The field of Information retrieval (IR) is currently undergoing a transformative shift, at least partly due to the emerging applications of generative AI to information access. In this talk, we will deliberate on the sociotechnical implications of generative AI for information access. We will argue that there is both a critical necessity and an exciting opportunity for the IR community to re-center our research agendas on societal needs while dismantling the artificial separation between the work on fairness, accountability, transparency, and ethics in IR and the rest of IR research. Instead of adopting a reactionary strategy of trying to mitigate potential social harms from emerging technologies, the community should aim to proactively set the research agenda for the kinds of systems we should build inspired by diverse explicitly stated sociotechnical imaginaries. The sociotechnical imaginaries that underpin the design and development of information access technologies needs to be explicitly articulated, and we need to develop theories of change in context of these diverse perspectives. Our guiding future imaginaries must be informed by other academic fields, such as democratic theory and critical theory, and should be co-developed with social science scholars, legal scholars, civil rights and social justice activists, and artists, among others.
PHP Frameworks: I want to break free (IPC Berlin 2024)Ralf Eggert
In this presentation, we examine the challenges and limitations of relying too heavily on PHP frameworks in web development. We discuss the history of PHP and its frameworks to understand how this dependence has evolved. The focus will be on providing concrete tips and strategies to reduce reliance on these frameworks, based on real-world examples and practical considerations. The goal is to equip developers with the skills and knowledge to create more flexible and future-proof web applications. We'll explore the importance of maintaining autonomy in a rapidly changing tech landscape and how to make informed decisions in PHP development.
This talk is aimed at encouraging a more independent approach to using PHP frameworks, moving towards a more flexible and future-proof approach to PHP development.
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered QualityInflectra
In this insightful webinar, Inflectra explores how artificial intelligence (AI) is transforming software development and testing. Discover how AI-powered tools are revolutionizing every stage of the software development lifecycle (SDLC), from design and prototyping to testing, deployment, and monitoring.
Learn about:
• The Future of Testing: How AI is shifting testing towards verification, analysis, and higher-level skills, while reducing repetitive tasks.
• Test Automation: How AI-powered test case generation, optimization, and self-healing tests are making testing more efficient and effective.
• Visual Testing: Explore the emerging capabilities of AI in visual testing and how it's set to revolutionize UI verification.
• Inflectra's AI Solutions: See demonstrations of Inflectra's cutting-edge AI tools like the ChatGPT plugin and Azure Open AI platform, designed to streamline your testing process.
Whether you're a developer, tester, or QA professional, this webinar will give you valuable insights into how AI is shaping the future of software delivery.
Let's dive deeper into the world of ODC! Ricardo Alves (OutSystems) will join us to tell all about the new Data Fabric. After that, Sezen de Bruijn (OutSystems) will get into the details on how to best design a sturdy architecture within ODC.
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf91mobiles
91mobiles recently conducted a Smart TV Buyer Insights Survey in which we asked over 3,000 respondents about the TV they own, aspects they look at on a new TV, and their TV buying preferences.
State of ICS and IoT Cyber Threat Landscape Report 2024 previewPrayukth K V
The IoT and OT threat landscape report has been prepared by the Threat Research Team at Sectrio using data from Sectrio, cyber threat intelligence farming facilities spread across over 85 cities around the world. In addition, Sectrio also runs AI-based advanced threat and payload engagement facilities that serve as sinks to attract and engage sophisticated threat actors, and newer malware including new variants and latent threats that are at an earlier stage of development.
The latest edition of the OT/ICS and IoT security Threat Landscape Report 2024 also covers:
State of global ICS asset and network exposure
Sectoral targets and attacks as well as the cost of ransom
Global APT activity, AI usage, actor and tactic profiles, and implications
Rise in volumes of AI-powered cyberattacks
Major cyber events in 2024
Malware and malicious payload trends
Cyberattack types and targets
Vulnerability exploit attempts on CVEs
Attacks on counties – USA
Expansion of bot farms – how, where, and why
In-depth analysis of the cyber threat landscape across North America, South America, Europe, APAC, and the Middle East
Why are attacks on smart factories rising?
Cyber risk predictions
Axis of attacks – Europe
Systemic attacks in the Middle East
Download the full report from here:
https://sectrio.com/resources/ot-threat-landscape-reports/sectrio-releases-ot-ics-and-iot-security-threat-landscape-report-2024/
Accelerate your Kubernetes clusters with Varnish CachingThijs Feryn
A presentation about the usage and availability of Varnish on Kubernetes. This talk explores the capabilities of Varnish caching and shows how to use the Varnish Helm chart to deploy it to Kubernetes.
This presentation was delivered at K8SUG Singapore. See https://feryn.eu/presentations/accelerate-your-kubernetes-clusters-with-varnish-caching-k8sug-singapore-28-2024 for more details.
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024Tobias Schneck
As AI technology is pushing into IT I was wondering myself, as an “infrastructure container kubernetes guy”, how get this fancy AI technology get managed from an infrastructure operational view? Is it possible to apply our lovely cloud native principals as well? What benefit’s both technologies could bring to each other?
Let me take this questions and provide you a short journey through existing deployment models and use cases for AI software. On practical examples, we discuss what cloud/on-premise strategy we may need for applying it to our own infrastructure to get it to work from an enterprise perspective. I want to give an overview about infrastructure requirements and technologies, what could be beneficial or limiting your AI use cases in an enterprise environment. An interactive Demo will give you some insides, what approaches I got already working for real.
Epistemic Interaction - tuning interfaces to provide information for AI supportAlan Dix
Paper presented at SYNERGY workshop at AVI 2024, Genoa, Italy. 3rd June 2024
https://alandix.com/academic/papers/synergy2024-epistemic/
As machine learning integrates deeper into human-computer interactions, the concept of epistemic interaction emerges, aiming to refine these interactions to enhance system adaptability. This approach encourages minor, intentional adjustments in user behaviour to enrich the data available for system learning. This paper introduces epistemic interaction within the context of human-system communication, illustrating how deliberate interaction design can improve system understanding and adaptation. Through concrete examples, we demonstrate the potential of epistemic interaction to significantly advance human-computer interaction by leveraging intuitive human communication strategies to inform system design and functionality, offering a novel pathway for enriching user-system engagements.
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...UiPathCommunity
💥 Speed, accuracy, and scaling – discover the superpowers of GenAI in action with UiPath Document Understanding and Communications Mining™:
See how to accelerate model training and optimize model performance with active learning
Learn about the latest enhancements to out-of-the-box document processing – with little to no training required
Get an exclusive demo of the new family of UiPath LLMs – GenAI models specialized for processing different types of documents and messages
This is a hands-on session specifically designed for automation developers and AI enthusiasts seeking to enhance their knowledge in leveraging the latest intelligent document processing capabilities offered by UiPath.
Speakers:
👨🏫 Andras Palfi, Senior Product Manager, UiPath
👩🏫 Lenka Dulovicova, Product Program Manager, UiPath
2. 2
Peter Hilton
■ (sorry, I am not Guillaume Bort)
■ Web developer and Operations Director at
Lunatech Research in Rotterdam
■ Web application architecture, design and construction
■ Technical project management and functional design
■ Play framework committer since 2010
■ Co-author of the book Play for Scala (Manning)
3. 3
About Lunatech
■ Founded in Ro*erdam in 1993 as an IT consul6ng, product
research and development team
■ We build web applica6ons, web services, large-‐scale document-‐
processing and message-‐processing applica6ons, online products
■ Leverage cuBng-‐edge open-‐source soCware plaDorms
■ Invest in product research and development
■ Play framework; Java EE -‐ JBoss AS, Seam, JPA, jBPM, Drools;
back-‐end -‐ PostgreSQL, Linux; front-‐end -‐ jQuery, Backbone, _.js
■ Agile soCware development -‐ self-‐managing technical teams
4. 4
“ Play introduces high-‐produc6vity
type safe web development
Presenta6on goal: show you how cool Play is
5. 5
Outline
■ What Play is and why it matters
(web architecture)
■ High-productivity web development
(but for Java and Scala developers)
■ Developer Experience (DX) that doesn’t suck
■ Type safe compile-time checked web development
■ HTML5 front-end development
6. 6
What Play is
■ Full-stack web framework (what you need to build an app)
■ Simple, flexible and powerful HTTP interface
■ High-productivity web development
■ High-performance scalable architecture
■ Designed by web developers for web developers
■ Play is fun
11. 11
Why Play maCers
The Back bu*on works
Play’s stateless architecture is based on HTTP.
When a web framework starts an architecture fight
with the web, the framework loses.
12. 12
Why Play maCers
Back The Reload bu*on works
bu*on
During development, just reload the page
to see changes in your Java (or Scala) code.
That’s high-‐produc6vity web development.
13. 13
Why Play maCers
Back You design the URL Reload
bu*on bu*on
You can use ‘clean’ URLs:
/products
/product/42
/product/42/comments
14. 14
Why Play maCers
Back Usability (DX) URL Reload
bu*on bu*on
Convenient HTTP API
and template syntax
Clear error messages
and short stack traces
15. 15
“ What’s the story behind the heart icon?
“ There isn’t one.
Feel free to make one up :)
Guillaume Bort
16. 16
“ Play doesn’t fight web architecture
Stateless, HTTP-‐centric architecture…
17.
18. 18
Stateless architecture
■ No state in the application’s web tier
■ e.g. Java Servlet API’s HTTP session
(which isn’t actually part of HTTP)
■ State belongs in other tiers
■ HTTP client, server cache or database
■ Web application behaviour defined by URLs (requests)
■ Exception for identifying authenticated user by cookie
19. 19
Stateless architecture -‐ why
■ Simplifies application development and testing
■ (a URL is all you need for reproducability)
■ Matches the web’s stateless HTTP architecture
■ Avoids synchronising state between additional layers
■ (‘synchronisation’ should ring tech design alarm bells)
■ Enables cloud deployment and horizontal scalability
■ (search the web for “Play framework Heroku”)
21. 21
“ Dear Java devs, PHP and Rails devs
have been laughing at you for years
… every 6me they reload a page’s code changes
22. 22
Code reloading
■ During development, reload the page to see changes in:
■ Java and Scala classes
■ configuration files
■ templates.
■ Play pre-compiles classes and templates for better
performance in production mode
■ This just works out-of-the-box
23. 23
“ URLs want to be loved too
REST architecture isn’t just for web service APIs
24. 24
h t t p : / a p p . e a m p l e . c o m / W r o o t D r
/ x a R i e
c t o r 1 / e l e s A l a e s s s o n I d = x 8
y S rv t On P n ? e i
1 n j 3 8 a v g L O L d x p a e w q & a c t i o n = N e x t
n j n
P a g & H n e B a d e r r s = a l s e e n t t y
e o y g Ca e f & i
I d 1 2 9 9 1 2 7 4 3 & p r o c e s s N m e = n l a d e n
= a U
S w a l l o w C o m p u t a t i o n & r o l e = p e o n & d a t
e = 1 4 % 2 F 2 % 2 F 2 0 1 2 & f l g e t i n g = 0 1 0
0 a S t s
1 0 1 1 & r e t u r n = % 2 F v i d e o s % 2 F r i c k r o l l . a v i
26. 26
URL design (HTTP rouMng)
■ Clean URLs are stable URLs:
■ http://example.com/products
■ http://example.com/product/42
■ Read it, bookmark it, mail it, tweet it
■ URL-centric design:
■ Design the URL scheme before you start coding
■ Configure your application’s URLs in one file
27. 27
URL design (HTTP rouMng)
■ Designed URLs are clean URLs:
■ http://example.com/products
■ http://example.com/product/42
■ Corresponding Play routing configuration:
#
HTTP
routes
configuration
file
#
method,
URL
path,
controller
action
method
(and
params)
GET
/products
controllers.Products.list()
GET
/product/:id
controllers.Products.details(id:Long)
28. 28
# HTTP routes configuraMon file
GET
/
controllers.Application.index()
GET
/products
controllers.Products.list()
POST
/products
controllers.Products.add(p:
Product)
GET
/product/:id
controllers.Products.details(id:
Long)
DELETE
/product/:id
controllers.Products.delete(id:
Long)
GET
/products.json
controllers.Products.listJSON()
GET
/product/:id.json
controllers.Products.detailsJSON(id:Long)
29. 29
“ You have to be a genius to successfully
use some web frameworks
For the rest of us, there are good error messages
31. 31
Where’s the actual error message?
13:07:55,796
ERROR
[[PersonServlet]]
Servlet.service()
for
servlet
PersonServlet
threw
exception
javax.ejb.EJBException:
null;
CausedByException
is:
null
at
org.jboss.ejb3.tx.Ejb3TxPolicy.handleExceptionInOurTx(Ejb3TxPolicy.java:46)
at
org.jboss.aspects.tx.TxPolicy.invokeInOurTx(TxPolicy.java:70)
at
org.jboss.aspects.tx.TxInterceptor$Required.invoke(TxInterceptor.java:134)
at
org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:98)
at
org.jboss.aspects.tx.TxPropagationInterceptor.invoke(TxPropagationInterceptor.java:61)
at
org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:98)
at
org.jboss.ejb3.stateless.StatelessInstanceInterceptor.invoke(StatelessInstanceInterceptor.java:39)
at
org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:98)
at
org.jboss.aspects.security.AuthenticationInterceptor.invoke(AuthenticationInterceptor.java:63)
at
org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:98)
at
org.jboss.ejb3.ENCPropagationInterceptor.invoke(ENCPropagationInterceptor.java:32)
at
org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:98)
at
org.jboss.ejb3.asynchronous.AsynchronousInterceptor.invoke(AsynchronousInterceptor.java:91)
at
org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:98)
at
org.jboss.ejb3.stateless.StatelessContainer.dynamicInvoke(StatelessContainer.java:189)
at
org.jboss.aop.Dispatcher.invoke(Dispatcher.java:107)
at
org.jboss.ejb3.remoting.IsLocalInterceptor.invoke(IsLocalInterceptor.java:37)
at
org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:98)
at
org.jboss.ejb3.stateless.StatelessRemoteProxy.invoke(StatelessRemoteProxy.java:88)
at
$Proxy76.getAllPeople(Unknown
Source)
at
uk.co.mediaport.web.PersonServlet.showTelephones(PersonServlet.java:54)
at
uk.co.mediaport.web.PersonServlet.doPost(PersonServlet.java:45)
at
uk.co.mediaport.web.PersonServlet.doGet(PersonServlet.java:34)
at
javax.servlet.http.HttpServlet.service(HttpServlet.java:697)
at
javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at
org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:81)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at
org.jboss.web.tomcat.security.CustomPrincipalValve.invoke(CustomPrincipalValve.java:39)
at
org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:159)
at
org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:59)
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:856)
32. at
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:744)
at
org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
at
org.apache.tomcat.util.net.MasterSlaveWorkerThread.run(MasterSlaveWorkerThread.java:112)
32
at
java.lang.Thread.run(Thread.java:595)
java.lang.NullPointerException
at
uk.co.mediaport.core.PeopleBean.getAllPeople(PeopleBean.java:33)
at
sun.reflect.NativeMethodAccessorImpl.invoke0(Native
Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at
java.lang.reflect.Method.invoke(Method.java:585)
at
org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:109)
at
org.jboss.ejb3.AllowedOperationsInterceptor.invoke(AllowedOperationsInterceptor.java:32)
at
org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:98)
at
org.jboss.aspects.tx.TxPolicy.invokeInOurTx(TxPolicy.java:66)
at
org.jboss.aspects.tx.TxInterceptor$Required.invoke(TxInterceptor.java:134)
at
org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:98)
at
org.jboss.aspects.tx.TxPropagationInterceptor.invoke(TxPropagationInterceptor.java:61)
at
org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:98)
at
org.jboss.ejb3.stateless.StatelessInstanceInterceptor.invoke(StatelessInstanceInterceptor.java:39)
at
org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:98)
at
org.jboss.aspects.security.AuthenticationInterceptor.invoke(AuthenticationInterceptor.java:63)
at
org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:98)
at
org.jboss.ejb3.ENCPropagationInterceptor.invoke(ENCPropagationInterceptor.java:32)
at
org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:98)
at
org.jboss.ejb3.asynchronous.AsynchronousInterceptor.invoke(AsynchronousInterceptor.java:91)
at
org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:98)
at
org.jboss.ejb3.stateless.StatelessContainer.dynamicInvoke(StatelessContainer.java:189)
at
org.jboss.aop.Dispatcher.invoke(Dispatcher.java:107)
at
org.jboss.ejb3.remoting.IsLocalInterceptor.invoke(IsLocalInterceptor.java:37)
at
org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:98)
at
org.jboss.ejb3.stateless.StatelessRemoteProxy.invoke(StatelessRemoteProxy.java:88)
at
$Proxy76.getAllPeople(Unknown
Source)
at
uk.co.mediaport.web.PersonServlet.showTelephones(PersonServlet.java:54)
at
uk.co.mediaport.web.PersonServlet.doPost(PersonServlet.java:45)
at
uk.co.mediaport.web.PersonServlet.doGet(PersonServlet.java:34)
at
javax.servlet.http.HttpServlet.service(HttpServlet.java:697)
at
javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at
org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:81)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at
org.jboss.web.tomcat.security.CustomPrincipalValve.invoke(CustomPrincipalValve.java:39)
at
org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:159)
at
org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:59)
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
33. http://localhost/ 33
Parse error: syntax error, unexpected T_VARIABLE
in /usr/local/www/htdocs/index.php on line 3
34.
35. 35
“ Play 2 con6nues the innova6on
First-‐class support for both Java and Scala
Type-‐safe templates
Compile-‐6me checking
Asynchronous HTTP programming
37. 37
Play in Java and Scala
■ Play 2.0 provides parallel APIs for Java and Scala,
for example, a controller action:
//
Java
controller
action
method
public
static
Result
index(String
name)
{
return
ok("Hello"
+
name);
}
//
Scala
controller
action
method
def
hello(name:
String)
=
Action
{
Ok("Hello
"
+
name)
}
38. 38
Play 2.0 Scala implementaMon
■ Play 2.0 is itself implemented in Scala
■ Scala removes the need for so much bytecode
enhancement in the Java API (which is how Play 1.x works)
■ There is less ‘magic’ and strangeness in the API
■ The code you see in the IDE is the code that runs
■ Scala source code not necessarily harder to read
39. 39
“ Templates want to be beau6ful too
Type safe template parameter delcara6ons
Minimal interference with HTML mark-‐up
40. 40
Type-‐safe template parameters
■ Templates include type-safe parameter declarations
■ Similar to the lightweight template syntax in Play 1.x
■ Templates are compiled into class files for run-time speed
@(products:
List[Product])
<ul>
@for(product
<-‐
products)
{
<li
class="@product.type">@product.name</li>
}
</ul>
41. 41
Template funcMons
■ Play 2.0’s template system is based on Scala
■ A template is a Scala function that you call from your code
//
Render
the
‘Products.list’
template
in
Java
code.
Html
html
=
views.html.Products.list.render(products);
//
e.g.
as
the
result
of
a
controller
action
method.
public
static
Result
list()
{
final
List<Product>
products
=
Products.list();
return
ok(views.html.Products.list.render(products));
}
42. Template syntax starts with @ 42
Template parameter declaration
@(products:
List[Product])
@if(products.isEmpty)
{
<h1>No
products</h1>
} No delimiter for the end of
a template syntax section
49. 49
Compile-‐Mme checking
■ Not just Java and Scala classes
■ HTTP routes file (maps URLs to controller actions)
■ Templates
■ JavaScript files (using Google Closure Compiler)
■ CoffeeScript files (alternative to JavaScript)
■ LESS style sheets (alternative to CSS)
■ Fewer errors at run-time
50. controllers/Products.java 50
public
class
Products
extends
Controller
{
public
static
Result
details(final
Long
id)
{
return
ok();
}
}
conf/routes
GET
/product/:id
controllers.Products.details(id:
String)
51. controllers/Products.java 50
public
class
Products
extends
Controller
{
public
static
Result
details(final
Long
id)
{
return
ok();
}
}
Incompatible types
conf/routes
GET
/product/:id
controllers.Products.details(id:
String)
52. controllers/Products.java 50
public
class
Products
extends
Controller
{
public
static
Result
details(final
Long
id)
{
return
ok();
}
}
Incompatible types
conf/routes
GET
/product/:id
controllers.Products.details(id:
String)
59. 57
“ Use HTML5 technologies
Choose a web framework that lets you
Hire or become a front-‐end expert
Use HTML ‘bricks’ instead of moulded components
62. 60
Modern web development
■ Play is designed to work with HTML5 technologies
■ No constraints on HTML output (front-end dev-friendly)
■ UI components belong in the client, e.g. JQuery UI
■ Built-in support for improvements to CSS and JavaScript:
■ LESS http://lesscss.org/
■ CoffeeScript http://coffeescript.org/
■ Closure Compiler http://code.google.com/closure/compiler
63. 61
Single-‐page JavaScript applicaMons
■ Server-side HTML templates are not the only game in town
■ JavaScript and mobile apps need web services
■ Play is great for building web services
■ You’ve already seen HTTP routing
■ Play has a type safe API for parsing/generating JSON
■ Play application architecture is natural fit for REST
■ Functionality is not tied to view templates
64. 62
GeneraMng a JSON response
$
curl
-‐i
http://localhost:9000/products/5010255079763
HTTP/1.1
200
OK
Content-‐Type:
application/json;
charset=utf-‐8
Content-‐Length:
88
{
"ean":5010255079763,
"name":"Paperclips
Large",
"description":"Large
Plain
Pack
of
1000"
}
68. 66
Asynchronous HTTP programming model
■ The future of web programming is asynchronous:
■ Perform simultaneous web service requests
■ Process streams, instead of filling up memory or disk
■ Publish real-time data
■ Predictable and minimal resource consumption
■ Play’s internal architecture uses a reactive model based on
Iteratee IO (read about ‘Iteratees’ in the Play 2.0 docs)
69. 67
Other Play 2.0 features
■ Asynchronous web programming
■ Build environment based on sbt
■ Scala REPL (irb eat your heart out)
■ Designed for easy cloud deployment, e.g. Heroku
■ Persistence - use your favourite framework
■ Ebean (Java) or Anorm (Scala) included with Play
■ Test framework integration
70. $
play
[info]
Loading
project
definition
from
/demo/project
[info]
Set
current
project
to
demo
(in
build
file:/
Users/pedro/Documents/code/examples-‐play/demo/)
_
_
_
__
|
|
__
_
_
_|
|
|
'_
|
|/
_'
|
||
|_|
|
__/|_|____|__
(_)
|_|
|__/
play!
2.0.1,
http://www.playframework.org
>
Type
"help"
or
"license"
for
more
information.
>
Type
"exit"
or
use
Ctrl+D
to
leave
this
console.
[demo-‐app]
$
71. [jfokus-‐app]
$
console
[info]
Starting
scala
interpreter...
[info]
Welcome
to
Scala
version
2.9.1.final
(Java
HotSpot(TM)
64-‐Bit
Server
VM,
Java
1.6.0_31).
Type
in
expressions
to
have
them
evaluated.
Type
:help
for
more
information.
scala>
73. 71
Play 2 books
■ Play 2 for Scala,
Peter Hilton, Erik Bakker,
Francisco Canedo
http://bit.ly/playforscala
■ Play 2 for Java, Nicolas
Leroux, Sietse de Kaper
http://bit.ly/playjava
■ Early Access (MEAP)
editions now available