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

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.

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.


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

jQuery Selectors Tutorial Updated
I have made several rounds of updates to my jQuery selectors tutorial. It is now a whole lot more complete.

Android Buttons
Android buttons are used to activate actions in your Android apps. This Android button tutorial explains how to insert text and image buttons in your Android apps.

Java Memory Model Tutorial
The Java memory model specifies how the Java virtual machine and Java programs work with the memory in the computer your Java programs run on. This tutorial explains the Java memory model.

Android TextView Tutorial
The Android TextView component can display text in your Android app's GUI. You can display either regular text or simple HTML. This tutorial explains the basics of using TextView in your Android apps.

Android Web App Tutorial
This tutorial explains everything you need to know about making Android web apps - apps where part of the GUI is rendered by a WebView using web technologies (HTML, CSS, JavaScript, SVG). The tutorial covers loading content from a remote server, intercepting HTTP requests, embedding web resources inside the app, and much, much more.

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

Android Layout
This new tutorial explains how layout works in Android with layout XML files, ViewGroups and Views.

AngularJS $timeout and $interval Timing Services
The AngularJS $timeout and $interval services can schedule a function for execution later. This tutorial explain how these services work.

Android Toast Tutorial
Android Toasts are small messages that can be displayed on the screen for a short time period, similar to a tool tip, popup notification etc. This tutorial explains you how to create and show Toasts in your Android apps.

Android Fragment Tutorial
Android fragments are components which can be reused across different Android activities. You can add, replace and remove fragments from activities at runtime, making fragments a very flexible way to create dynamic subviews in your Android apps.

Your First Android App
This tutorial takes you through creating your first Android app with Android Studio, including running the app on your Android device.

Android Project Overview
This tutorial gives you an overview of the files and directories an Android Studio project contains.

Android Core Concepts
This text explains the core concepts in Android you need to know if you want to develop Android apps.

Android Development Tutorial Started
I have finally started my Android development tutorial. It's not yet so extensive, but it will get there!

Installing Android Studio
This tutorial explains shortly how to install Android Studio which you use to develop Android apps in.

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.