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.


Java ArrayList vs. OpenArrayList Performance
Did you know there is up to 12% difference in performance depending on how you iterate an ArrayList?
R Programming
R is a programming language invented for data science. R thus contains a lot of functions for analysis of data, for instance statistical analysis. R can read data from CSV files making it easy to use R with data exported from Excel.
R - Loading Data
R contains several functions for loading data from different file formats. This tutorial covers the most commonly used data import mechanisms of R and R Studio.
Java for vs. switch Performance
Sometimes you can implement loop unrolling in Java with a switch statement with fall-throughs. But is that really faster than a for loop? Read and see!
Jackson Annotation Tutorial Started
The Jackson JSON toolkit contains a set of Java annotations which you can use to influence how JSON is read into objects, or what JSON is generated from the objects. This Jackson annotation tutorial explains how to use Jackson's annotations.
Java NIO Non-blocking Server Tutorial
Designing and implementing a server using Java NIO's non-blocking IO is pretty hard. Therefore I have written a tutorial where I discuss one way to implement a non-blocking server which is protocol-independent and thus reusable.
Resizable Array
Sometimes you want to keep data in a single, consecutive array for fast and easy access, but need the array to be resizable, or at least expandable. This tutorial shows you how to implement a resizable array in Java.
Ring Buffer Tutorial
Ring buffers are fast bounded queue implementations. This tutorial explains how a ring buffer works and shows two different implementations in Java.
Event-driven Architecture
Event-driven architecture is an architectural style where individual services in the system listen for events from each other, and from the outside world. The events are often stored in one or more central event queues.
Race Conditions and Critical Sections
I have updated my tutorial about race conditions and critical sections. It is part of my Java concurrency tutorial. Now it better explains the concepts and problems.
JMH - Java Microbenchmark Harness
JMH is a small toolkit that makes it easier for you to write correct performance benchmarks for your Java components. JMH is made by the same people who develop the JVM, so these guys know what they are doing.
Memory Management for Performance
How you manage memory has a big impact on the performance of your application. This tutorial explains a few reusable memory management techniques and principles that you can use in your applications to speed them up.
Modern Hardware
This tutorial contains the minimum set of facts you should know about how modern hardware works, in order to tune the performance of your Java applications.
Java Performance Tutorial
Java performance tuning is a bit of a black art. It is not so easy to find information about. Therefore I have started a new tutorial about Java performance tuning where I collect tips and tricks from the masters of Java performance.
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.
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.
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.
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.

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