News could hardly get more exciting than this, for a programming language aficionado! There is now a JEP 286 for Local-Variable Type Inference with status "Candidate". And a request for feedback by Brian Goetz, which I would love to invite you to participate in: http://mail.openjdk.java.net/pipermail/platform-jep-discuss/2016-March/000037.html Please do so, the survey remains open only from March … Continue reading Java 10’s new Local-Variable Type Inference
SQL JOIN or EXISTS? Chances Are, You’re Doing it Wrong
A lot of developers get the distinction between JOIN and SEMI-JOIN wrong. Let me explain... What are JOIN and SEMI-JOIN A little bit of relational algebra first. What is an (INNER) JOIN? An JOIN is nothing but a filtered cartesian product. And what is a cartesian product? Wikipedia explains this very nicely: for sets A … Continue reading SQL JOIN or EXISTS? Chances Are, You’re Doing it Wrong
UI Developers! Choose Sensible Default Ordering!
Good decisions come from experience. Experience comes from making bad decisions. ― Mark Twain Today, let's look at one piece of experience and how we can turn that into good decisions when implementing UI logic. Please, all UI developers read this. The bad decision When UI developers display tabular data, it is very common for … Continue reading UI Developers! Choose Sensible Default Ordering!
How to Support Java 6, 8, 9 in a Single API
With jOOQ 3.7, we have finally added formal support for Java 8 features. This opened the door to a lot of nice improvements, such as: Creating result streams try (Stream<Record2<String, String>> stream = DSL.using(configuration) .select(FIRST_NAME, LAST_NAME) .from(PERSON) .stream()) { List<String> people = stream.map(p -> p.value1() + " " + p.value2()) .collect(Collectors.toList()); } Calling statements asynchronously … Continue reading How to Support Java 6, 8, 9 in a Single API
(Ab)using Java 8 FunctionalInterfaces as Local Methods
If you're programming in more advanced languages like Scala or Ceylon, or even JavaScript, "nested functions" or "local functions" are a very common idiom to you. For instance, you'll write things like fibonacci functions as such: def f() = { def g() = "a string!" g() + "– says g" } (Question from Stack Overflow … Continue reading (Ab)using Java 8 FunctionalInterfaces as Local Methods
A Very Peculiar, but Possibly Cunning Kotlin Language Feature
This has caught me by surprise. After studying the Kotlin language to learn about how to best leverage this interesting new language for jOOQ, I stumbled upon this puzzler. What do you think the following program will print? fun main(args: Array) { (1..5).forEach { if (it == 3) return print(it) } print("done") } Well... You … Continue reading A Very Peculiar, but Possibly Cunning Kotlin Language Feature
The Mute Design Pattern
Have you been writing a lot of code following the Mute-Design-Pattern™ lately? E.g. try { complex(); logic(); here(); } catch (Exception ignore) { // Will never happen hehe System.exit(-1); } There's an easier way with Java 8! Just add this very useful tool to your Utilities or Helper class: public class Helper { // 18395 … Continue reading The Mute Design Pattern
An Ingenious Workaround to Emulate an Application of Union Types in Java
Before I move on with the actual article, I'd like to give credit to Daniel Dietrich, author of the awesome vavr library, who has had the idea before me: https://twitter.com/danieldietrich/status/699633269202149377 Contravariant Generic Bounds It all started with a tweet: https://twitter.com/lukaseder/status/699588908095508480 I wanted to do something like pattern-matching a common super type of a set of … Continue reading An Ingenious Workaround to Emulate an Application of Union Types in Java
jOOQ Tuesdays: Glenn Paulley Gives Insight into SQL’s History
Welcome to the jOOQ Tuesdays series. In this series, we’ll publish an article on the third Tuesday every other month where we interview someone we find exciting in our industry from a jOOQ perspective. This includes people who work with SQL, Java, Open Source, and a variety of other related topics. I'm very excited to … Continue reading jOOQ Tuesdays: Glenn Paulley Gives Insight into SQL’s History
Dear API Designer. Are You Sure, You Want to Return a Primitive?
Some APIs are set in stone. For instance, the JDK's. Or public APIs, like the one between a database and a database client (e.g. JDBC). This makes designing such APIs rather difficult as a lot of thinking needs to be done prior to publishing an API. Which means that being defensive when designing the API … Continue reading Dear API Designer. Are You Sure, You Want to Return a Primitive?
