Tech and Media Labs
Efficiency Matters
Efficiency causes the majority of our high standard of living
across most areas of life. We should all be concerned with efficiency.

News

Java Generics - Java 7 Type Inference
From Java 7 the Java compiler can infer the generic type of an instantiated object based on the generic type of the variable it is assigned to. The Java generics tutorial now explains that.
Maven Commands
This tutorial explains the most common Maven commands used to clean, compile, build, test, generate documentation etc for your project.
Your First Maven Project
This tutorial explains how to create your first Maven project, which includes creating a POM file and creating the standard directory layout for the project.
Java 8 - Interface Default Methods
From Java 8 a Java interface can contain default methods. A default method contains a default implementation of that method. I have extended my Java Interfaces tutorial with a section on interface default methods.
Java ZonedDateTime
The ZonedDateTime class in the Java 8 date time API represents a date and time with time zone information. This could be the start of a specific event somewhere in the world, like a conference, rocket launch etc.
Java 8 Date Time - LocalTime
The LocalTime class in the Java 8 date time API represents a time of day without time zone information. This tutorial explains how to create and work with a LocalTime instance.
Java 8 Date Time - LocalDate
The LocalDate class in the new Java 8 date time API represents a date without time zone information. This tutorial explains how to create a LocalDate and how to work with it.
Java8 Date Time - Instant Class
The Java date time API has been updated in Java 8. I am now updating my Java date time tutorial to describe these changes. The first tutorial explains the Instant class which represents an instant in time.
Java 8 Date Time - Duration Class
The Duration class in the Java 8 date time API represents a duration in time, e.g. the duration between two instants in time.
HTML5 History API Tutorial
The HTML5 history API gives you access to the browser navigation history via JavaScript. The HTML5 history API is really useful in single page web apps. A single page web app can use the HTML5 history API to make a certain state in the app "bookmarkable".
Concurrency vs. Parallelism
Concurrency and parallelism are two terms often used in relation to multithreaded applications. This tutorial explains the difference between concurrency and parallelism.
GSON Tutorial
GSON is Google's Java JSON API. This tutorial explains how to parse JSON into Java objects and generate JSON from Java objects with GSON.
Boon ObjectMapper Tutorial
The Boon ObjectMapper can parse JSON into object graphs. It is quite easy to use, and can parse JSON from a variety of sources (strings, byte arrays, char arrays, File, Reader and InputStream).
Jackson JsonGenerator Tutorial
The Jackson JsonGenerator is used to generate JSON to an OutputStream, File etc. The JsonGenerator is a handy way of generating JSON from Java objects or other data.
Jackson Tree Model
The Jackson ObjectMapper tutorial has been extended with a section on how to parse JSON into Jackson's built-in tree model (JsonNode).
Jackson - JsonParser Tutorial
The Jackson JsonParser is a low level JSON parser which is therefore faster, but also more cumbersome to work with than the Jackson ObjectMapper. This tutorial explains how to use the Jackson JsonParser - for when you need fast JSON parsing.
Jackson - ObjectMapper Tutorial
This tutorial explains how to parse JSON into Java objects using the Java Jackson ObjectMapper component.
Jackson Installation
This tutorial explains how to install the Jackson JSON parser in your Java application, either by downloading and referencing the JAR files directly, or by adding the JAR files as dependencies in Maven.
Java JSON Tutorial Started
I have started a tutorial series about JSON processing in Java. It will cover both different APIs and parsing as well as generation JSON inside Java.
AtomicReferenceArray
The AtomicReferenceArray class in Java represents an array of object references which can be updated atomically. This tutorial explains how to use the basic functionality of the AtomicReferenceArray.
AtomicLongArray
The AtomicLongArray class in Java represents a long array which can be updated atomically. This tutorial explains how to use the basic functionality of the AtomicLongArray.
AtomicIntegerArray
The AtomicIntegerArray class in Java represents an int array which can be updated atomically. This tutorial explains how to use the basic functionality of the AtomicIntegerArray.
HTML5 File API Tutorial
The HTML5 file API enables JavaScript inside HTML5 pages to load and process files from the local file system. Via the HTML5 file API it is possible for JavaScript to process a file locally, e.g. compress, encode or encrypt it, or upload the file in smaller chunks.
The Declarative Delusion
This article explains why declarative languages are not better than imperative languages.
Java NIO AsynchronousFileChannel Tutorial
In Java 7 the NIO API had some asynchronous classes added. One of these is the AsynchronousFileChannel which makes it possible to access files asynchronously.
Vert.x Timers Tutorial
Vert.x contains two types of timers that make it easy to create scheduled jobs. This tutorial explains how these two timers work.
Vert.x TCP Client Tutorial
Vert.x comes with an easy to use TCP client class called NetClient. This tutorial explains how you use NetClient.
Vert.x TCP Server Tutorial
Vert.x comes with a TCP server which makes it easy to create TCP servers in your application. This tutorial explains how to work with the Vert.x TCP server.
Vert.x HTTP Client
Vert.x contains a HTTP client that makes it easy to make HTTP requests asynchronously. This tutorial introduces you to the Vert.x HTTP client.
Vert.x HTTP Server
Vert.x makes it easy to create an HTTP server so your application can receive HTTP requests. This tutorial explains how you create and work with the Vert.x HTTP server.
Vert.x Buffers
In Vert.x you often have to work with raw binary data (e.g. a HTTP response). You do so using Vert.x Buffer instances. This tutorial explains how Vert.x buffers work.
Vert.x Verticles
Verticles are the components you deploy to Vert.x which initialize your application. This tutorial explains how to implement, initialize and deploy verticles with Vert.x.
Java NIO Files - updated
I have added a section about how to traverse directory trees using the java.nio.file.Files class with examples showing how to find a file and how to delete a directory with all files and subdirectories recursively.
Vert.x Tutorial Started
Vert.x is an open source, reactive, polyglot toolkit or platform running on the Java Virtual Machine. You can think of Vert.x as an alternative to Java EE, but based on a different philosophy and internal design.
Concurrency Models Tutorial
Concurrent systems can be implemented using different concurrency models. A concurrency model specifies how threads in the the system collaborate to complete the jobs they are are given. This tutorial explains three popular concurrency models in use today.
Java Command Line Argument Parser
This tutorial explains how to parse command line arguments with switches etc. in Java using a class I have released in open source. The class is available in the tutorial or on GitHub.
Don't be a Herdie
Herdies do what the rest of the herd does without questioning it. Don't be a herdie. Think for yourself.
Amdahl's Law
Amdahl's law can be used to calculate how much a computation can be sped up by running part of it in parallel. This tutorial explains the mathematic equation, shows calculation examples and shows a simple, visual explanation too.
Non-blocking Concurrency Algorithms
Non-blocking algorithms are algorithms that do not block the threads involved in them. Non-blocking algorithms can provide better performance and lower latency than blocking algorithms for low to medium contented shared data structures. This tutorial explains the reasoning behind non-blocking algorithm design.
Java NIO Files
The Java NIO Files class provides an easy way to perform common file system operations like creating directories, copying, moving and deleting files etc. The Java NIO Files class is new in NIO 2 (Java 7).
Java NIO Path
The Java NIO Path class provides an easier way to work with file system paths. You can work with absolute paths, reletive paths, make modifications to paths, and obtain information about them. The Path class in new in NIO 2 (Java 7).
Java Math Operators and Math Class
I have started a text about math in Java. It covers both the basic Java math operators as well as the Java Math class. It does not yet cover all of the Java Math class, but I will update the tutorial from time to time until it covers all the interesting parts.
Java Inheritance - Updated
I have updated my Java inheritance tutorial to include information about how inheritance works in relation to constructors and nested classes, and to explain the instanceof instruction too.
Java Nested Classes - Updated
I have updated my Java nested class tutorial. Did you know that Java had 4 different types of nested classes, of which "inner classes" is only one of them?
Java for each Loops
I have updated my Java for loop tutorial with a section on the Java for each loop that was added in Java 5.
Java do while loops
I have updated my Java while loop tutorial to include a section on the less known do-while variation of the while loop.
Java Arrays
Everything you have ever wanted to know about Java arrays, including how to declare, instantiate, iterate, copy, fill, sort, search etc. Java arrays.
Java Fork and Join
This new tutorial explains how to use the ForkJoinPool in Java 7 to use the fork and join recursive work break down technique, for parallizing task execution.
jQuery - Creating an Expandable Tree
This tutorial explains how to turn a ul element into an expandable tree with jQuery.
jQuery - Generating a Table of Contents
This tutorial shows how to use jQuery to generate a table of contents inside an HTML page, based on the headlines in the HTML page (the h1 to h3 elements).

Portfolio

tutorials.jenkov.com 
Our software development tutorial website contains 600+ texts organized into structured trails.

Our tutorials are intended to be concise yet comprehensive, to enable readers to learn the topics as efficiently as possible. Too many tutorials on the web are either long but not concise, or short but not comprehensive, effectively making them inefficient for learning.

Open Source 
We have released a few open source projects over time. These projects actively developing these projects anymore, but we are still using them in many of our projects.

Butterfly DI Container
Butterfly Web UI
Butterfly Persistence
Butterfly Scheduling
Butterfly Testing Tools
JSP Prize Tags
Mr Persister ORM

Book Reviews 
From time to time we come across books that are either really good, or really bad. When we do, we may write a book review so that you can avoid the bad books and get directly to the good books. We tend not to write reviews of books that are just plain average. Books that are worth reading, but do no stand out.
Copyright  Jenkov Aps