Efficiency Matters

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

 

About Me

I am an entrepreneur, author and software developer focused on efficiency. Analyzing and conveying ideas of efficiency across various domains is what drives me. I want to make people efficient, to write books and articles that teaches efficiently, and to be as efficient as possible in the process.

My Work

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

My 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.

Books 
I have published a few books on software development. As with my tutorials, my books are intended to be as concise yet comprehensive as possible, making them fast to read yet sufficiently educational. My books are cheap too, enabling the readers to spend their money more efficiently.

Software development books from big publishers are often too long and expensive, making them an inefficient investment in terms of the time spent reading them, and the money paid for them.

Open Source 
I have developed a few open source components over time, mostly because I was unsatisfied with what was already out there. Many open source projects tend to bloat over time, rather than reaching a mature state with a good set of core funtionality and staying there.
I am not actively developing these projects anymore, but I am still using them in many of my 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 I come across books that are either really good, or really bad. When I do, I may write a book review so that you can avoid the bad books and get directly to the good books. I tend not to write reviews of books that are just plain average. Books that are worth reading, but do no stand out. If you have a book you want me to review, let me know.

News

CSS Box Shadow
CSS box shadow can be used to add shadows to HTML elements so they look elevated above the page, like in 3 dimensions.

CSS Transitions
Text no. 29 in my CSS tutorial is about CSS transitions which enable you to animate changes to CSS properties. Thus, you can increase the width of an element gradually instead of immediately. This can create some nice effects in your web page.

CSS 2D Transformations
This latest CSS tutorial explains how to perform 2D transformations on HTML elements with CSS 3.0.

Java's AtomicInteger
Java's AtomicInteger provides atomic (thread safe) operations on an int variable. For instance, get(), set() and compareAndSet(). This is useful if you have multiple threads with access to the same int value.

Java's AtomicReference
Java's AtomicReference provides atomic (thread safe) operations on an object reference. For instance, get(), set() and compareAndSet(). This is useful if you have multiple threads with access to the same object reference.

Java IO: FileWriter fixed
The Java IO FileWriter tutorial was by accident replaced with the FilterWriter tutorial. I have now restored the FileWriter tutorial!

Java's AtomicBoolean
I have expanded my tutorial on the built-in Java concurrency utilities with a text on the AtomicBoolean class which provided atomic operations on a boolean variable.

jQuery Critique
jQuery is being criticized these days for leading to the "big main method problem" and to DOM centric code. In this text I explain what the critique is all about, and how you avoid these problems.

jQuery AJAX Tutorial - Updated
I have extended my jQuery AJAX tutorial to cover most of jQuery's AJAX features, and to be up-to-date with the latest version (AJAX changed in version 1.8.0). There are still some very fine grained features that are not covered, but I will get around to that.

Java ThreadLocal
The Java ThreadLocal class is used to create variables that are local to the thread executing the code. Thus, two threads executing the same code may have different values stored inside the same ThreadLocal instance. This tutorial explains how Java ThreadLocal works.

jQuery Deferred Objects
Deferred objects in jQuery is how jQuery handles asynchronous code and callbacks. Deferred objects can be a bit complex when you first read about them, but once you understand them they are pretty simple, yet very useful. This tutorial explains how deferred objects in jQuery work.

Java volatile Keyword Tutorial
I have expanded my Java Concurrency tutorial with a tutorial on the Java volatile keyword which is used to assure that variables are read and written from and to main memory and not CPU / thread caches.

Java's AtomicInteger
Java's AtomicInteger provides atomic (thread safe) operations on an integer value. This tutorial explains how to use it.

AngularJS $watch() , $digest() and $apply()
This new text in my AngularJS tutorial explains the $scope functions $watch() , $digest() and $apply(). These functions are the core of the AngularJS data binding system.

AngularJS $scope Hierarchy
This small addition to my AngularJS tutorial explains the AngularJS $scope hierarchy.

CSS Gradients Tutorial
You can fill HTML elements with gradients using CSS 3. The browsers and W3C have finally reached a shared standard syntax which is supported by IE, Chrome (Windows + Android) and Firefox.

CSS Opacity Tutorial
You can set opacity / transparency of HTML elements with the opacity CSS property. This new tutorial explains how.

CSS Border Images
In CSS 3 you can use images as borders for HTML elements. I have added a section to my CSS border tutorial explaining how to use border images.

CSS Column Layout
From CSS 3.0 it is possible to have the browser divide text up into columns, just like in a newspaper. This new tutorial in my CSS trail explains how.

CSS Text Shadow
I have added a section about text shadows to my CSS text styling tutorial.

CSS Web Fonts Tutorial
I have added a small tutorial about web fonts to my CSS tutorial. Web fonts enable us to use external fonts in our websites. Web fonts are embedded in their own file, just like an image. Thus a web font can be downloaded and used on your website for rendering text.

CSS Media Query Tutorial
I have added a short tutorial about CSS media queries to my CSS tutorial trail. Media queries enable you to apply different CSS rules depending on the device that views your HTML page.

Open SSL for Web Servers
This new tutorial explains how use OpenSSL to create a private key and certificate signing request, and finally how to get a certificate, for use with SSL / TLS / HTTPS on a web server.

Nginx Tutorial
I have started a tutorial about Nginx, the high performance web server. So far the tutorial covers how to install Nginx on Ubuntu, how to start it, restart it and where to find the configuration files. This tutorial will be updated in the future with information about using Nginx as reverse proxy, configuring SSL and more.

Software Entrepreneurship Guide
I have started writing a guide about software entrepreneurship. The guide will contain an overview of what it means to be a software entrepreneur, with links to where you can read more in depth. By now it contains the basics, but I will expand the guide over time.

Ubuntu as Web Server
Using Ubuntu Linux as a web server is reasonably easy. I have assembled a small guide to help you get started. I will expand this guide over time - especially with links to where you can read more about e.g. Nginx, Jetty etc.

More mobile friendly tutorial website !
I have spent quite some time making the tutorial site more mobile friendly. It now loads 3-5 seconds faster on mobile, and the layout actually fits the screen now. Give it a try on your mobile!

SVG rect Tutorial Updated
I have updated my SVG rect (rectangle) tutorial to show more of the options you have for drawing rectangles in SVG. I have also added a video version of the tutorial (see the tutorial).

CSS Link Styling
This new tutorial explains how to style links with CSS, including how to remove the default underlining, how to change the link color, how to style the link when the mouse hovers above the link, and how to style links to look like buttons.

CSS border-radius - Rounded Corners
I have updated my tutorial on CSS borders with a section on the border-radius CSS property. The border-radius CSS property is used to create rounded corners on HTML elements. A very, very useful feature!

CSS float Tutorial
I have added a tutorial about to make HTML elements float left and right using the float CSS property.

CSS Form Styling
I have added a new text to my CSS tutorial about styling forms and form fields.

CSS position Tutorial
This new tutorial explains how to use the CSS position property to position HTML elements relatively to where they would normally have been located, at a fixed position inside the browser window, or combinations of that.

SVG Circle Tutorial Updated
I have updated my SVG circle tutorial to show more of the styling options you have for styling stroke and fill for circles. I have also added a video version of the tutorial.

CSS Image Styling Tutorial
This new text in my CSS tutorial explains how to style images (img elements) via CSS. You can set the margin, border, padding, width, height, max-width, max-height, min-width and min-height of an image via CSS. The max-width property is especially handy when implementing responsive images.

CSS Table Styling Tutorial
You can style HTML tables with CSS. For instance, you can set the width, height, margin, padding (of table cells), borders, text alignment horizontally and vertically and more. This new tutorial explains how to set all that.

CSS Background Images
CSS enables you to set background images on HTML elements. This new tutorial explains the background image features available in CSS 2.1. The tutorial will be updated later with the CSS 3.0 features.

CSS display Tutorial
This new tutorial explains how you can use the display CSS property to control if HTML elements are rendered as part of the normal text flow, or as separate blocks.

CSS List Styling
CSS has a set of properties targeting HTML lists (ul + ol elements). This new tutorial explains the options you have for styling lists with CSS.

CSS Colors
This addition to my CSS tutorial explains how to specify color values in CSS, including hexadecimal RGB, decimal RGB, RGBA and HSL (new in CSS 3.0).

CSS Text Styling
You have several CSS properties available for styling the text rendered inside HTML element (p, div, span, li etc). This new text in my CSS tutorial explains all the possibilities you have for styling text with CSS.

CSS Precedence
When more than one CSS rule targets the same HTML elements, which CSS styles are then applied to the elements? That depends on the precedence of the CSS rules. This tutorial explains how CSS precedence works.

CSS Selectors
I have added a CSS selectors tutorial to my CSS tutorial, explaining CSS 1.0, CSS 2.0 and CSS 3.0 selectors including CSS pseudo classes and CSS pseudo elements.

CSS Tutorial Started
I have started a CSS tutorial. Rather than being the typical SEO optimized reference, this tutorial is intended to be read like a book (like most of my tutorials), so you can learn CSS from scratch if you need to. The tutorial is still very short, but it will grow over the next weeks.

CSS Properties and CSS Rules
CSS properties are used to style different aspects of an HTML element. CSS rules group one or more CSS properties together with a CSS selector which specifies what HTML elements are to be targeted by the CSS rule.

Using CSS in HTML
This text explains the three ways you can use CSS inside your HTML documents.

AngularJS Minification Proof Dependency Injection
I have added a section to my AngularJS Modularization and Dependency Injection tutorial about how to specify dependencies in a way that is minification safe, meaning that it still works when you minify your AngularJS code.

AngularJS Internationalization Tutorial
I have added a small tutorial about internationalization to my AngularJS tutorial series. Internationalization in AngularJS supports formatting dates and currencies according to local standards.

Java Lambda Expressions - Updated
I have updated the Java Lambda expression tutorial with a section on lambda parameters, explaining the syntax for declaring parameters for a lamdba expression with zero, one or multiple parameters.

AngularJS Routes
AngularJS routes enables you to create bookmarkable URLs into your AngularJS application. The route features enable your app to show different HTML templates depending on the route (URL) chosen, and extract parameters from the route too. This latest addition to my AngularJS tutorial explains how AngularJS routes work.