Want to dive even deeper?

Take the course Learn Projects in Java for Beginners from Scratch by Eduonix and become an expert!
Learn Projects in Java for Beginners from Scratch
by Eduonix

Check it out!
You're watching a preview of this video, click the button on the left to puchase the full version from YAJUG.

The Heads and Tails of Project Coin

CORE JAVA PLATFORM 22641

Published on
  • 2.083
  • 122
  • 0
  • 1
  • 2
  • The Heads and Tails of Project Coin Joseph D. Darcy (@jddarcy) 2 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • #include "std_orcl_disclaimer.h" The following is intended to outline our general product direction. It is intended for information purposes only, and may not be incorporated into any contract. It is not a commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions. The development, release, and timing of any features or functionality described for Oracle's products remains at the sole discretion of Oracle. 3 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • Outline · · · · Overview and Demo Retrospective on developing JDK 7 Coin features Possible small language changes in JDK 8 and later Q&A 5 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • JDK 7 Survey · Downloaded JDK 7 GA? ­ JDK7 Mac OS X Port Developer Preview Release http://jdk7.java.net/macportpreview/ · Downloaded JDK 7 update build? http://jdk7.java.net/preview/ · coin-dev subscriber? http://mail.openjdk.java.net/mailman/listinfo/coin-dev/ · OpenJDK contributor? http://openjdk.java.net/contribute/ 6 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • Project Coin Benefits Enjoy improved free code flow today! · Remove extra text to make programs more readable · Encourage writing programs that are more reliable · Integrate well with past and future changes 7 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • Coin Constraints · Small language changes ­ Specification ­ Implementation ­ Testing · No JVM changes! · Coordinate with forthcoming larger language changes · Beware the hazards of language interactions! 8 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • The Six Coin Features and How They Help · Easier to use generics ­ Diamond ­ Varargs warnings · More concise error handling ­ Multi-catch ­ try-with-resources · Consistency and clarity ­ Strings in switch ­ Literal improvements 9 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • Project Coin support in IDEs Pick an IDE, any IDE · IntelliJ IDEA 10.5 and later http://blogs.jetbrains.com/idea/2011/02/announcing-intellij-idea-105-with-full-java-7-support/ · Eclipse 3.7.1 and later http://www.eclipse.org/jdt/ui/r3_8/Java7news/whats-new-java-7.html · NetBeans 7.0 and later http://netbeans.org/kb/docs/java/javase-jdk7.html DEMO 10 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • Varargs Warnings · Summary: no longer receive uninformative unchecked compiler warnings from calling platform library methods: ­ <T> List<T> Arrays.asList(T... a) ­ <T> boolean Collections.addAll(Collection<? super T> c, T... elements) ­ <E extends Enum<E>> EnumSet<E> EnumSet.of(E first, E... rest) ­ void javax.swing.SwingWorker.publish(V... chunks) · New annotation type SafeVarargs 12 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • How Coins were Minted · Internal compiler desugaring ­ strings in switch ­ try-with-resources http://www.usmint.gov/about_the_mint/coinLibrary/ Easy for the programmer, more work for the compiler! · Coordinated Library Changes ­ java.lang.{AutoCloseable, SafeVarargs} Throwable.addSuppressed ­ Serialized form of Throwable, new c'tors · Systematic application of new library features 14 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • // Original sugared switch(s) { case "a": case "b": return 10; case "c": case "d": return 20; ... // s mapped to offset switch($t) { case 1: case 2: return 10; case 3: case 4: return 20; ... } } 15 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • // Desugared int $t = -1; switch(s.hashCode()) { case 0x61: // "a".hashCode() if(s.equals("a")) $t = 1; break; case 0x62: if(s.equals("b")) $t = 2; break; ... } // Original sugared switch(s) { case "a": case "b": return 10; case "c": case "d": return 20; ... // s mapped to offset switch($t) { case 1: case 2: return 10; case 3: case 4: return 20; ... } } 16 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • try-with-resources desugaring try ResourceSpecification Block { final VariableModifiers_minus_final R #resource = Expression; Throwable #primaryException = null; try ResourceSpecificationtail Block catch (Throwable #t) { #primaryException = t; throw #t; } finally { if (#resource != null) { if (#primaryException != null) { try { #resource.close(); } catch(Throwable #suppressedException) { #primaryException.addSuppressed(#suppressedException); } } else { #resource.close(); } } } } 17 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • Library support for try-with-resources Not just a language feature! · New superinterface java.lang.AutoCloseable ­ All AutoCloseable and by extension java.io.Closeable types usable with try-with-resources · Retrofit Closeable/AutoCloseable to Java SE API ­ JDBC 4.1 retrofitted as AutoCloseable too · Suppressed exceptions are recorded for posterity using a new facility Throwable.addSuppressed ­ Suppressed exception info included in stack trace, etc. 18 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • Throwable · New field added to store suppressed exception data · HotSpot specially creates certain exception objects ­ Allow stack traces for OutOfMemoryError ­ Need to document and follow a VM libraries protocol · Serial compatibility must be kept with older releases ­ IIOP serialization matters too! · Exception objects should be able to be immutable ­ New constructors added to Throwable ­ Preserve immutability on serialize deserialize cycle 19 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • A Systematic Update · Ran annotation processors over the JDK ­ Types to be retrofitted as Closeable/AutoCloseable: Project Coin: Bringing it to a Close(able), http://blogs.sun.com/darcy/entry/project_coin_bring_close/ ­ Methods and constructors to be annotated with @SafeVarargs Project Coin: Safe Varargs in JDK Libraries, http://blogs.sun.com/darcy/entry/project_coin_safe_vararg_libraries/ · Can run the same processors over your own code 20 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • Retrospective In the beginning... · A small language change needs to be small in all of: http://www.usmint.gov/about_the_mint/coinLibrary/ ­ Specification ­ Implementation ­ Testing · Not the only relevant dimensions 21 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • http://hubblesite.org/gallery/album/the_universe/pr2009002a/xlarge_web/ 22 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • for (Coin coin : jdk7Coins){...} http://www.flickr.com/photos/museumofworldwonders/5446037241/ · · · · · Project Coin specification as a whole Design issues and alternatives, surprises Size of implementation Specification and implementation evolution Bug tail 23 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • 24 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • Cross references in Java SE 7 JLS 25 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • JLS Sections Changed by Project Coin · Improved Literals §3.10.1 "Integer Literals" §3.10.2 "Floating-Point Literals" · Strings in Switch §14.11 "The switch Statement" · Safe varargs §4.8 "Raw Types" §4.12.2 "Variables of Reference Type" §8.4.1 "Formal Parameters" §9.6.3.7 "SafeVarargs" (New!) §15.12.4.2 "Evaluate Arguments" 26 Copyright © 2011, Oracle and/or its affiliates. All rights reserved. · Diamond §15.9 "Class Instance Creation Expressions" §15.9.1 "Determining the Class being Instantiated" §15.9.3 "Choosing the Constructor and its Arguments" §18 "Syntax"
  • More JLS sections changed by Project Coin · Multi-catch §4.12.4 "final Variables" §11.2.2 "Exception Analysis of Statements" §11.2.3 "Exception Checking" §13.4.4 "Superclasses and Superinterfaces" §14.20 "The try statement" §18 "Syntax" · try-with-resources §4.12.4 "final Variables" §6.3 "Scope of a Declaration" §6.4 "Shadowing and Obscuring" §11.2.2 "Exception Analysis of Statements" §14.20 "The try statement" §14.20.3 "try-with-resources" (New!) §18 "Syntax" 27 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • Coin Cross Reference subgraph 28 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • 1. Improved literals · Grammar changes a bit tricky to get right; multiple underscores between digits: Digits: Digit Digit DigitsAndUnderscoresopt Digit DigitsAndUnderscores: DigitOrUnderscore DigitsAndUnderscores DigitOrUnderscore 29 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • Implication of multiple underscores Do we want this to be allowed? // Courtesy Josh Bloch int bond = 0000_____________0000________0000000000000000__000000000000000000+ 00000000_________00000000______000000000000000__0000000000000000000+ 000____000_______000____000_____000_______0000__00______0+ 000______000_____000______000_____________0000___00______0+ 0000______0000___0000______0000___________0000_____0_____0+ 0000______0000___0000______0000__________0000___________0+ 0000______0000___0000______0000_________000+__0000000000+ 0000______0000___0000______0000________0000+ 000______000_____000______000________0000+ 000____000_______000____000_______00000+ 00000000_________00000000_______0000000+ 0000_____________0000________000000007; 30 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • What about octal? If these are illegal integer literals 0x_abcd 0b_0101 should 0_1234 be legal? 31 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • Implementing literals · 1 small changeset · No post-integration surprises 32 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • 2. Strings in switch: specification change JLS §14.11 The switch Statement "The type of [the switch] Expression must be char, byte, short, int, Character, Byte, Short, Integer, String, or an enum type (§8.9), or a compile-time error occurs." 33 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • Strings in switch proposal form instead of hashCode. Generally a String.equals() check will be needed to verify the candidate string's identity in addition to the evaluation of the screening PROJECT COIN SMALL LANGUAGE CHANGE PROPOSAL FORM v1.0 AUTHOR(S): Joseph D. Darcy function because multiple string inputs could evaluate to the same result. OVERVIEW A single case label, a single case label with a default, and two case labels can be special-cased to just equality checks without function evaluations. If there are collisions in String.hashCode on the set of case labels in a switch block, a different function without collisions on that set of inputs should be used; for Provide a two sentence or shorter description of these five aspects of the feature: example ((long)s.hashCode<<32 ) + s.length()) is another candidate function. FEATURE SUMMARY: Should be suitable as a summary in a language tutorial. Here are desugarings to currently legal Java source for the two examples above where the default hash code do not collide: Add the ability to switch on string values analogous to the existing ability to switch on values of the primitive types. // Simple Example if (s.equals("foo")) { // cause NPE if s is null processFoo(s); } // Advanced example { // new scope for synthetic variables boolean MAJOR ADVANTAGE: What makes the proposal a favorable change? More regular coding patterns can be used for operations selected on the basis of a set of constant string values; the meaning of the new construct should be $take_default = false; boolean $fallthrough = false; $default_label: { switch(s.hashCode()) { // cause NPE if s is null case 3482567: // "quux".hashCode() if (!s.equals("quux")) { $take_default = true; break $default_label; } processQuux(s); $fallthrough = true; case 101574: // "foo".hashCode() if (!$fallthrough && obvious to Java developers. !s.equals("foo")) { $take_default = true; break $default_label; } $fallthrough = true; case 97299: // "bar".hashCode() if (!$fallthrough && !s.equals("bar")) { MAJOR BENEFIT: Wh
  • Strings in switch spec. and implementation What is there to discuss? · What does switching on a null do? · Can null be a case label? · JDK 7 implementation relies on a particular algorithm be used for String.hashCode · Many other implementation options ­ Secondary hash if collisions on primary hash ­ Perfect hash functions ­ Labeled-break 35 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • Project Coin: Taking a Break for Strings in Switch http://blogs.oracle.com/darcy/entry/project_coin_string_switch_break static void f(String s) { // Original sugared code switch (s) { case "azvl": System.out.println("azvl: "+s); // fallthrough case "quux": System.out.println("Quux: "+s); // fallthrough case "foo": int i = 5; //fallthrough case "bar": System.out.println("FooOrBar " + (i = 6) + ": "+s); break; case "bmjrabc": // same hash as "azvl" System.out.println("bmjrabc: "+s); break; case "baz": System.out.println("Baz " + (i = 7) + ": "+s); // fallthrough default: System.out.println("default: "+s); } } 36 Copyright © 2011, Oracle and/or its affiliates. All rights reserved. static void f(String s) { // Desugared code $exit: { int i$foo = 0; $default_label: { $baz: { $bmjrabc: { $bar: { $foo: { $quux: { $azvl: { switch(s.hashCode()) { // cause NPE if s is null case 3010735: // "azvl" and "bmjrabc".hashCode() if (s.equals("azvl")) break $azvl; else if (s.equals("bmjrabc")) break $bmjrabc; else break $default_label; case 3482567: // "quux".hashCode() if (!s.equals("quux")) // inequality compare break $default_label; break $quux; case 101574: // "foo".hashCode() if (s.equals("foo")) // equality compare break $foo; break $default_label; case 97299: // "bar".hashCode() if (!s.equals("bar")) break $default_label; break $bar; case 97307: // "baz".hashCode() if (!s.equals("baz")) break $default_label; break $baz; default: break $default_label; }//switch }//azvl System.out.println("azvl: "+s); // fallthrough } //quux System.out.println("Quux: "+s); // fallthrough } //foo i$foo = 5; }//bar System.out.println("FooOrBar " + (i$foo = 6) + ": "+s); break $exit; }//bmjrabc System.out.println("bmjrabc: " + s); break $exit; } //baz System.out.println("Baz " + (i$foo = 7) + ": "+s); // fallthrough }//default_label System.out.println("default: "+s); }//exit }
  • Strings in switch implementation history · Original changeset quickly followed by small refinement · Bug fix in 7u2: switch(s) { case("a"): // Extra parentheses // would crash javac ... 37 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • 3. SafeVarargs Background · Often preferable to have a sound system of warnings ­ No missed cases (no false negatives) ­ But may have false positives 38 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • "...the [Java] language is designed to guarantee that if your entire application has been compiled without unchecked warnings [...], it is type safe." Generics in the Java Programming Language http://java.sun.com/j2se/1.5/pdf/generics-tutorial.pdf Gilad Bracha, Computational Theologist (emer.) 39 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • Heap Pollution "Heap pollution can only occur if the program performed some operation involving a raw type that would give rise to a compile-time unchecked warning [...] or if the program aliases an array variable of non-reifiable element type through an array variable of a supertype which is either raw or non-generic." JLS §4.12.2 Variables of Reference Type 41 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • Unchecked Warnings and Soundness · Unchecked warnings are intended to be a sound analysis · From a certain point of view, it would be correct (but unhelpful!) to always emit an unchecked warning · Pre-JDK 7, always got an unchecked warning when calling certain varargs library methods ­ Bad, and complicated interaction between generics and arrays ­ But usually nothing actually dangerous happens! 42 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • Limits of SafeVarargs · Impractical to standardize a sufficiently powerful sound analysis in JDK 7 ­ ­ ­ ­ Just "read-only" not sufficient Just "invariant" not sufficient Aliasing complicates analysis (Standardizing definitely assigned/definitely unassigned dataflow analysis tricky!) · Leave such standardization for future work; quality of implementation issue in the meantime 43 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • SafeVarargs history · Prototype based on SuppressWarnings · Second implementation based on SafeVarargs ­ What's in a name? @TrustMe @CleanVarargs ... · Very extensive regression/unit tests using auto-generated source files over 7 variables 44 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • Designing the SafeVarargs annotation type · Annotations on methods are not inherited · @SafeVarargs can therefore only be applied to ­ Static methods ­ Constructors ­ final instance methods · Additional checks on varargs status, etc. · Runtime retention policy 45 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • 4. Diamond <> · Diamond uses type inference to figure out types so the programmer doesn't have to write them · Type inference is a constraint satisfaction problem ­ What are the constraints? ­ How can they be satisfied? · Want a unique answer returned by the algorithm 46 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • More than one facet · Two inference schemes proposed, differing in how they gathered constraints · Each sometimes more useful than the other · Use quantitative analysis to help resolve the issue ­ Prototype both schemes ­ Analyze results on millions of files of code 47 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • Quantitative Results · Both schemes equally effective ­ Each could eliminate a different 90% of the explicit type parameters to constructor calls ­ Verified diamond was a worthwhile feature! · Choose inference scheme with better evolution and maintenance properties · Language designer's notebook: Quantitative language design http://www.ibm.com/developerworks/java/library/j-ldn1/ 48 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • Hofstadter's Law: "It always takes longer than you expect, "even when you take into account Hofstadter's Law." Douglas Hofstadter Gödel, Escher, Bach: An Eternal Golden Braid 49 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • Law of Evolving the Java Language: "There are always more interactions than you expect, "even when you expect lots of interactions." CUSTOMER LOGO 50 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • Diamond and anonymous classes public class Box<T> { private T value; public Box(T value) { this.value = value; } Object o; List<?> arg = ...; o = new Box<>(arg); T getValue() { return value; } } 51 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • Object o; List<?> arg = ...; o = new Box<List<capture of ?> >(arg); 52 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • Object o; List<?> arg = ...; o = new Box<List<capture of ?> >(arg){...}; 53 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • Object o; List<?> arg = ...; o = new a$1(arg); Anonymous classes translate into a new class file with a full set of attributes. class a$1 extends Box<List<capture of ?> >{...} 54 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • Diamond and generic constructors class Foo<T extends Number> { // The rare generic constructor! <S extends T> Foo(S s) {super();} } Class Explicit Explicit Inferred Constructor Explicit Inferred Explicit Supported Yes Yes No Example new <Integer> Foo<Number>(null); new Foo<Integer>(null); new <Integer> Foo<>(null); // compile error Inferred Inferred Yes new Foo<>(null); Project Coin: Diamond and Generic Constructors http://blogs.oracle.com/darcy/entry/project_coin_diamond_generic_constructors 55 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • 5. Multi-catch and more precise rethrow Does it matter if this code doesn't compile in JDK 7? try { throw new DaughterOfFoo(); } catch (Foo exception) { try { // Pre-JDK 7 throws Foo, now throws DaughterOfFoo throw exception; } catch (SonOfFoo anotherException) { ; // Reachable? } } 56 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • Multi-catch evolution · Reformulated rules for can-throw computation · Used new "effectively final" analysis · What is the meaning of catch(Foo | SonOfFoo e) {...} ­ Explicitly disallowed in JDK 7 ­ Could be added later 57 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • 6. try-with-resources Largest of the Coins · Changes to semantics of desugaring ­ Suppress only Exceptions or all Throwables? ­ Null handling · Syntax changes ­ Allow trailing ";" in resource list ­ Forbid expression form without explicit declaration · Throwable changes · AutoCloseable and InterruptedException 58 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • Diamond Design Complexity try-with-resources Multi-catch and more precise rethrow @SafeVarargs Strings in switch Improved literals Implementation Effort 59 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • Project Coin Proposals in JDK 7 10 70 Submitted Proposals Per Day 8 50 6 40 30 20 4 2 10 0 0 Days after Opening 60 Copyright © 2011, Oracle and/or its affiliates. All rights reserved. Total Submitted Proposals 60
  • JSR 334 Through the JCP Expert Group Formation Early Draft Review Jan 11, 2011 Public Review March 24, 2011 Proposed Final June 24, 2011 Draft JSR Approval Ballot Dec 06, 2010 Final July 5, 2011 Approval Ballot JSR Proposal 62 Nov 16, 2010 July 18, 2011 Final Release Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • Project Coin Language Changes in JDK 7 · Methodical and quantitative approach ­ Decide today what needs to be decided today ­ Consciously leave room for future decisions · Language + library co-evolution (But no VM changes for Coin!) · Smooth transition to new features ­ Widespread tool support ­ Use of new features reads well · What about JDK 8? 63 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • Language/compiler changes expected in JDK 8 · Project Lambda: To Multicore and Beyond Alex Buckley and Daniel Smith Bulk Data Handling, Mike Duigou, Thursday, 11:00 am · Project Jigsaw: Putting It All Together, Mark Reinhold Project Jigsaw: Find the Corner Pieces First, Alan Bateman, Mandy Chung, Mark Reinhold · JSR 308 ­ Annotations on Types 64 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.
  • (Very) Small Language changes Under consideration for JDK 8 · Only opportunistic changes given scope of Lambda and Jigsaw · Refinements to JDK 7 Project Coin features ­ try-with-resources on an effectively final variable? ­ Remove some restrictions on diamond? ­ @SafeVarargs on a private method? · Collection literals? · Repeating annotations? · Parameter names available at runtime? 66 Copyright © 2011, Oracle and/or its affiliates. All rights reserved.

Comments

Be the first one to add a comment

Thumbnail for: Busy Java Developer’s Guide to Three REST API Frameworks

Busy Java Developer’s Guide to Three REST API Frameworks

Ted Neward

subscription
Thumbnail for: Corporate startup and Scala

Corporate startup and Scala

Filip Rogaczewski

subscription
Thumbnail for: Co było pierwsze: kod czy architektura?

Co było pierwsze: kod czy architektura?

Slawomir Sobotka

subscription
Thumbnail for: Preventing Analytics and Ads from polluting your codebase (no slides)

Preventing Analytics and Ads from polluting your codebase (no slides)

Savvas Dalkitsis

subscription
Thumbnail for: From Docker To Kubernetes: A Developer's Guide To Containers

From Docker To Kubernetes: A Developer's Guide To Containers

Marek Grabowski

subscription
Thumbnail for: Ścisły przewodnik po aspektach miękkich - część II: Jesteś ekspertem i co dalej?

Ścisły przewodnik po aspektach miękkich - część II: Jesteś ekspertem i co dalej?

Slawomir Sobotka

free
Thumbnail for: Designing software with security in mind?

Designing software with security in mind?

Daniel Deogun

subscription
Thumbnail for: OAuth2 for native apps and beyond

OAuth2 for native apps and beyond

Erik Jan de Wit

subscription
Thumbnail for: Using JavaScript/HTML5 Rich Clients with Java EE 7

Using JavaScript/HTML5 Rich Clients with Java EE 7

Reza Rahman

subscription
Thumbnail for: Why I love Logstash and you should too

Why I love Logstash and you should too

João Duarte

subscription
Thumbnail for: Java Bytecode Explained

Java Bytecode Explained

OLEG ŠELAJEV

subscription
Thumbnail for: Agile Project Management Anti-Patterns

Agile Project Management Anti-Patterns

Kasia Mrowca

subscription
Thumbnail for: Applications secure by default

Applications secure by default

Sławomir Jasek

subscription
Thumbnail for: From spaghetti with no src/test to green CI, good coverage and well-sleeping developers

From spaghetti with no src/test to green CI, good coverage and well-sleeping developers

Michał Matłoka , Jacek Kunicki

subscription
Thumbnail for: Failing Continuous Delivery

Failing Continuous Delivery

Daniel Sawano , Daniel Deogun

subscription
Thumbnail for: Tips and tricks for clean relational db schemas (slides only)

Tips and tricks for clean relational db schemas (slides only)

Clément Delafargue

subscription
Thumbnail for: Production Lessons (slides only)

Production Lessons (slides only)

Greg Young

subscription

The Spring BOF (no slides)

Juergen Hoeller , Josh Long

subscription

BigData on Azure for architects – Machine Learning, HDInsight (Hadoop), Event Hub – what to use when (and – how) (slides only)

Tomasz Kopacz

subscription
Thumbnail for: "Bootiful" Applications with Spring Boot

"Bootiful" Applications with Spring Boot

Josh Long

subscription
Thumbnail for: 5-10-15 years with Java - from junior to master and back again (slides only)

5-10-15 years with Java - from junior to master and back again (slides only)

Wojciech Seliga

subscription
Thumbnail for: Everything Works In Java EE?--Then Try Microservices :-) (slides only)

Everything Works In Java EE?--Then Try Microservices :-) (slides only)

Adam Bien

subscription
Thumbnail for: Supler: complex web forms, not so complex

Supler: complex web forms, not so complex

Adam Warski , Tomasz Szymanski

subscription
Thumbnail for: Functional Data Storage (slides only)

Functional Data Storage (slides only)

Greg Young

subscription
Thumbnail for: The Go Language (slides only)

The Go Language (slides only)

Brad Fitzpatrick

subscription
Thumbnail for: The Silver Bullet Syndrome (slides only)

The Silver Bullet Syndrome (slides only)

Hadi Hariri

subscription
Thumbnail for: What's Coming in Java EE 8

What's Coming in Java EE 8

Reza Rahman

subscription
Thumbnail for: From API to protocol (slides only)

From API to protocol (slides only)

Quentin ADAM

subscription
Thumbnail for: Babun - a Windows shell you will love, finally! (slides only)

Babun - a Windows shell you will love, finally! (slides only)

Tom Bujok , Lukasz Pielak

subscription
Thumbnail for: IDE Wizard? CLI Command? Get both for the price of one! (slides only)

IDE Wizard? CLI Command? Get both for the price of one! (slides only)

Koen Aers

subscription
Thumbnail for: Event Sourcing & Functional Programming - a pair made in heaven

Event Sourcing & Functional Programming - a pair made in heaven

Paweł Szulc

subscription
Thumbnail for: Everybody lies

Everybody lies

Tomasz Kowalczewski

free
Thumbnail for: Scala and Clojure: Playing well together

Scala and Clojure: Playing well together

David Pollak

subscription
Thumbnail for: Groovier BDD with Spock (slides only)

Groovier BDD with Spock (slides only)

Michał Kordas

subscription
Thumbnail for: Clean JavaScript code - only dream or reality (slides only)

Clean JavaScript code - only dream or reality (slides only)

Sebastian Łaciak

subscription
Thumbnail for: Wykorzystanie podejścia Domain-Driven Design w systemach legacy (slides only)

Wykorzystanie podejścia Domain-Driven Design w systemach legacy (slides only)

Piotr Wyczesany

subscription
Thumbnail for: Case Study: Agile @gov.pl (slides only)

Case Study: Agile @gov.pl (slides only)

Matt Harasymczuk

subscription
Thumbnail for: Functional patterns for scala beginners (slides only)

Functional patterns for scala beginners (slides only)

Clément Delafargue

subscription
Thumbnail for: Vagrant up your enviroment (slides only)

Vagrant up your enviroment (slides only)

Yann Larrivee

subscription
Thumbnail for: Running Micro-Services with Spring Boot in Kubernetes (slides only)

Running Micro-Services with Spring Boot in Kubernetes (slides only)

Ray Tsang

subscription
Thumbnail for: Scalable Is Awesome, Literally! (slides only)

Scalable Is Awesome, Literally! (slides only)

Garrett Smith

subscription
Thumbnail for: Apache Spark - when things go wrong (slides only)

Apache Spark - when things go wrong (slides only)

Paweł Szulc

subscription
Thumbnail for: Functional Programming: Technical Reasons to Adapt (screen only)

Functional Programming: Technical Reasons to Adapt (screen only)

Venkat Subramaniam

subscription
Thumbnail for: PubSub++ - few tips that make your life with kafka easier. (slides only)

PubSub++ - few tips that make your life with kafka easier. (slides only)

Krzysztof Debski

subscription
Thumbnail for: Effective SCRUM in distributed teams (slides only)

Effective SCRUM in distributed teams (slides only)

Rafał Udziela

subscription
Thumbnail for: React.js: Super-fast Single Page Web Applications (slides only)

React.js: Super-fast Single Page Web Applications (slides only)

Pratik Patel

subscription
Thumbnail for: The Smartwatch Revolution begins: Developing for Android Wear (slides only)

The Smartwatch Revolution begins: Developing for Android Wear (slides only)

Pratik Patel

subscription
Thumbnail for: Apache Cassandra 101 (slides only)

Apache Cassandra 101 (slides only)

Christopher Batey

subscription
Thumbnail for: Distributed algorithms for Big Data (slides only)

Distributed algorithms for Big Data (slides only)

DuyHai DOAN

subscription
Thumbnail for: What's new in Spring Data? (slides only)

What's new in Spring Data? (slides only)

Thomas Darimont

subscription
Thumbnail for: User Acceptance Testing - Looking for the Holly Grail (slides only)

User Acceptance Testing - Looking for the Holly Grail (slides only)

Boguslaw Osuch

subscription
Thumbnail for: Is your profiler speaking the same language as you? (slides only)

Is your profiler speaking the same language as you? (slides only)

Simon Maple

subscription
Thumbnail for: Microservices and Conversion Hunting - How to build software architectures for changeableness (slides only)

Microservices and Conversion Hunting - How to build software architectures for changeableness (slides only)

Bernd Zuther

subscription
Thumbnail for: JRebel under the covers - how is it even possible? (slides only)

JRebel under the covers - how is it even possible? (slides only)

Simon Maple

subscription
Thumbnail for: Core Software Design Principles for Programmers (slides only)

Core Software Design Principles for Programmers (slides only)

Venkat Subramaniam

subscription
Thumbnail for: Microservices - enough with theory, let's code some (slides only)

Microservices - enough with theory, let's code some (slides only)

Marcin Grzejszczak , Tomasz Szymanski

subscription
Thumbnail for: A Gentle and useful introduction to Reactive Extensions (slides only)

A Gentle and useful introduction to Reactive Extensions (slides only)

Hadi Hariri

subscription
Thumbnail for: Caching reboot: javax.cache & Ehcache 3 (slides only)

Caching reboot: javax.cache & Ehcache 3 (slides only)

Louis Jacomet

subscription
Thumbnail for: Lazy Evaluations (screen only)

Lazy Evaluations (screen only)

Venkat Subramaniam

subscription
Thumbnail for: Make sense of your (BIG) data! (slides only)

Make sense of your (BIG) data! (slides only)

David Pilato

subscription
Thumbnail for: The end of server management : hosting have to become a commodity (slides only)

The end of server management : hosting have to become a commodity (slides only)

Quentin ADAM

subscription
Thumbnail for: Refactoring to Functional (slides only)

Refactoring to Functional (slides only)

Hadi Hariri

subscription
Thumbnail for: HTTP/2 : why upgrading the web? (slides only)

HTTP/2 : why upgrading the web? (slides only)

Quentin ADAM

subscription
Thumbnail for: Hystrix – managing failures in distributed systems (slides only)

Hystrix – managing failures in distributed systems (slides only)

Tomasz Nurkiewicz

subscription
Thumbnail for: Building systems that are #neverdone

Building systems that are #neverdone

James Lewis

subscription
Thumbnail for: Need for Async: In hot pursuit of internet-scale app architectures

Need for Async: In hot pursuit of internet-scale app architectures

Konrad Malawski

subscription
Thumbnail for: Level up your dev skills with static analysis

Level up your dev skills with static analysis

David Lindsay

subscription
Thumbnail for: Modularity in post microservice world

Modularity in post microservice world

Michal Gruca

subscription
Thumbnail for: Modern Java Component Design with Spring 4.2

Modern Java Component Design with Spring 4.2

Juergen Hoeller

subscription
Thumbnail for: The Creative Networker

The Creative Networker

Jurgen Appelo

subscription
Thumbnail for: Technical leadership – from an expert to a leader

Technical leadership – from an expert to a leader

Mariusz Sieraczkiewicz

subscription
Thumbnail for: JCP, Adopt-a-JSR & You

JCP, Adopt-a-JSR & You

Reza Rahman

subscription
Thumbnail for: Lessons learned from scaling software

Lessons learned from scaling software

Bartek Nowakowski

subscription
Thumbnail for: Building fault tolerant microservices

Building fault tolerant microservices

Christopher Batey

subscription
Thumbnail for: High Performance JavaScript Web Apps

High Performance JavaScript Web Apps

Pratik Patel

subscription
Thumbnail for: WebVR - democracy in Virtual Reality

WebVR - democracy in Virtual Reality

Marcin Lichwala

subscription
Thumbnail for: Social Coding - tools and techniques

Social Coding - tools and techniques

Maciej Pleśnar

subscription
Thumbnail for: Why software developers should care about deployment and monitoring

Why software developers should care about deployment and monitoring

Michał Kosmulski

subscription
Thumbnail for: Building an Asynchronous Reactive NoSQL SDK with RxJava

Building an Asynchronous Reactive NoSQL SDK with RxJava

Simon Baslé

subscription
Thumbnail for: OnConnectionLost: The life of an offline web application

OnConnectionLost: The life of an offline web application

Stefanie Grewenig , Johannes Thönes

subscription
Thumbnail for: Deploying Microservice Architectures with Spring Cloud on Cloud Foundry

Deploying Microservice Architectures with Spring Cloud on Cloud Foundry

Pieter Humphrey

subscription
Thumbnail for: Agile Development Meets Connected Devices - Lessons Learned

Agile Development Meets Connected Devices - Lessons Learned

subscription
Thumbnail for: Ansible to rule them all – o provisioningu i deploymencie aplikacji Java

Ansible to rule them all – o provisioningu i deploymencie aplikacji Java

Wojciech Podgorski , Rafal Piotrowski

subscription
Thumbnail for: You're an Architect...Now What?

You're an Architect...Now What?

Nathaniel Schutta

subscription
Thumbnail for: Deep dive into Reactive Java

Deep dive into Reactive Java

Tomasz Kowalczewski

subscription
Thumbnail for: Nashorn, what is the whole buzz about

Nashorn, what is the whole buzz about

Michal Gruca

subscription
Thumbnail for: Things about microservices you wish you never knew

Things about microservices you wish you never knew

Marek Ko-w

subscription
Thumbnail for: "Bootiful" Microservices with Spring Cloud

"Bootiful" Microservices with Spring Cloud

Josh Long

subscription
Thumbnail for: Refactoring meets big money

Refactoring meets big money

Michal Gruca

subscription
Thumbnail for: Security Platform as a Service with Docker and Weave

Security Platform as a Service with Docker and Weave

David Pollak

subscription
Thumbnail for: Clean Architecture - how to improve your system architecture

Clean Architecture - how to improve your system architecture

Andrzej Bednarz

subscription
Thumbnail for: Principles Of Microservices

Principles Of Microservices

Sam Newman

subscription
Thumbnail for: Painfree Object-Document Mapping for MongoDB

Painfree Object-Document Mapping for MongoDB

Philipp Krenn

subscription
Thumbnail for: Reviewing Architectures

Reviewing Architectures

Nathaniel Schutta

subscription
Thumbnail for: Unlocking the magic of monads in Java 8

Unlocking the magic of monads in Java 8

OLEG ŠELAJEV

subscription
Thumbnail for: Kill the mutants, test your tests

Kill the mutants, test your tests

Roy van Rijn

subscription
Thumbnail for: Vaadin Designer, the visual design tool for modern web apps

Vaadin Designer, the visual design tool for modern web apps

Maciej Przepióra

subscription
Thumbnail for: My running shoes - Continuous Delivery

My running shoes - Continuous Delivery

Grzegorz Krumpholz

free
Thumbnail for: Get Past the Syntax, The Real Scare is in the Semantics

Get Past the Syntax, The Real Scare is in the Semantics

Venkat Subramaniam

free
Thumbnail for: Coding Culture

Coding Culture

Sven Peters

free
Thumbnail for: Software architecture as code

Software architecture as code

Simon Brown

subscription
Thumbnail for: Flavors of Concurrency in Java

Flavors of Concurrency in Java

OLEG ŠELAJEV

free
Thumbnail for: Modern Web Architecture

Modern Web Architecture

Ted Neward

subscription
Thumbnail for: 10 NoSQL databases you have to know

10 NoSQL databases you have to know

Tom Bujok

subscription
Thumbnail for: What's New in WildFly 9

What's New in WildFly 9

Tomasz Adamski

subscription