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 volatile tutorial updated
I have updated my Java volatile keyword tutorial. Now it also explains the happens-before guarantee of the volatile keyword, as well as better explain what volatile guarantees and does not guarantee (when synchronized is needed).
Vert.x Command Line
You can start Vert.x and deploy verticles from the command line. This tutorial explains how to use the Vert.x command line.
Ubuntu Linux as Web Server
I have updated my tutorial about using Ubuntu Linux as a web server. Now it also explains how to install ufw (firewall) if you do not already have it installed.
Ant Java Build Script Example
This tutorial shows an example Ant build script for Java projects so you have an idea about how a full Ant build script can look, and something to copy from when making your own Ant build scripts.
Ant Tutorial Started
We have started a new tutorial about Ant - the build tool for Java. Despite being old, Ant is still alive and kicking!
Gradle Dependency Management
Gradle can handle dependencies (external JAR files) for you just as elegantly as Maven. This tutorial explains how to manage dependencies in your Gradle build scripts.
Gradle For Java Projects
This tutorial explains how to use Gradle's Java project plugin, which contains predefined tasks to do most of what you need to do to build Java projects (compile, test, JAR etc.)
Run Gradle
This tutorial explains how to run Gradle from the command line, meaning executing tasks, running Gradle in quiet mode etc.
Gradle Tasks
Gradle tasks define the actions needed to build your project. This tutorial explains how you define tasks in your Gradle build scripts, how to make one task depend on another, how to set default tasks etc.
Install Gradle
This short text explains how to install Gradle so you can start playing with it.
Gradle Tutorial Started
Gradle tutorial started. Gradle is a build tool with growing popularity.
SVG Icons
SVG icons are SVG images which are used as icons or image buttons inside a web app or mobile app. SVG icons can also be used for logos. This SVG icon tutorial explains how to create your own SVG icons, as well as where you can download high quality pre-made SVG icons.
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.

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