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

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.

AngularJS Providers
My AngularJS modularization and dependency injection tutorial has been updated with a section on providers, the most flexible type of service factory in AngularJS, and a short section on constants.

Java Collection Streams
Streams in Java 8 is an addition to the Java Collection API which makes it possible to process collections of objects in a more functional programming style. This tutorial explains the basics of how streams work.

Java 8 Lamdba Expressions Tutorial
I have released the first version of my Java 8 lambda expression tutorial. There is enough for you to start learning how Java 8 lambda expressions work. I will add more advanced details to it in a near future.

AngularJS Filtering
I have updated my AngularJS views and directives tutorial with a section on filtering. Filters are used to modify data before it is written to the HTML page, or to filter or sort arrays.

AngularJS Dependency Injection
I have updated my AngularJS tutorial with a text explaining how to use Angular's dependency injection mechanism with values, factories and services.

Responsive Images
Responsive images are images that are resized to fit the content blocks on the different screen sizes they are displayed on. This tutorial explains how to create responsive images with HTML, CSS, JavaScript and SVG.

Actionable Web Design
A responsive web application should be actionable, meaning that it is easy to get to all the most commonly used actions in the web app. This text explains the idea in more detail.

Touchable Web Design
The responsive, mobile friendly web design tutorial has been extended with a text about making touchable web design. Touchable means that links and menus are easy to touch with a finger.

Handing Touch Events in JavaScript
I have extended my "Responsive, Mobile Friendly Web Design" tutorial with a text on how to handle touch events in JavaScript. Touch events are fired by tablets and smart phones, and can be more advanced than mouse events.

AngularJS Custom Directives - Updated
I have extended my AngularJS custom directives tutorial with a section explaining how to use the "transclusion" feature of AngularJS. Transclusion makes it possible to have AngularJS process the HTML nested inside a directive element, instead of having to provide a full HTML template for the directive. Thus, the user of your directive can nest his / her own HTML inside your directive.

HTML5 - Dragging Files Into The Browser
I have just updated my HTML5 drag and drop tutorial with a section explaining how to access files that are dragged into the browser from the file system.

HTML5 Drag and Drop
HTML5 enables drag and drop directly in the browser. While this has been possible for some time now with proprietary APIs, HTML5 is now standardizing the API for drag and drop. This tutorial explains how to use the new HTML5 drag and drop features.

AngularJS Custom Directives
This text explains how to create your own AngularJS directives for use inside AngularJS HTML templates. Creating your own directives can be useful sometimes to clean up your HTML templates.

AngularJS Custom Directives Tutorial
I have extended my AngularJS tutorial with a text explaining how to implement your own AngularJS directives for use in your HTML templates.

HTML5 Messaging - Bug fixes
I have fixed a few minor errors in the code examples in my HTML5 messaging tutorial. Now the examples should be able to actually run!

AngularJS Critique
In extension of my AngularJS tutorial I have added a critique of the AngularJS framework. I don't often criticise what I write about, but in this case with AngularJS getting so popular, and almost no critique available about it, I felt the need to put down what I feel about it.

AngularJS Forms - Updated
The AngularJS Forms tutorial has been updated with information about how to create data bound Select boxes, and about form validation.

AngularJS Forms - Tutorial
My AngularJS tutorial now has a text explaining the basics of form handling in AngularJS. It has enough detail to get you started. I will add more details in a near future.

Angular JS AJAX - JSONP
I have just updated the AngularJS AJAX tutorial with a section explaining how to make JSONP calls. JSONP calls are a way to make cross domain remote service calls - something which is not normally possible with AJAX.

AngularJS AJAX
The 4th text in my AngularJS tutorial explains how to make AJAX calls with AngularJS. So far the basic $http service is covered. The rest of AngularJS's more advanced AJAX options will be covered soon.

HTML5 Canvas - Transformations - Updated
I have updated my transformations text in my HTML5 canvas tutorial. It is the part about rotating a shape around its own center (or around any other point) that is updated. A reader notified me that this section could be made better (including how), and now I have updated it (thanks!).

AngularJS Events
This text explains how to wire up your AngularJS application to listen for mouse, keyboard and other events from the browser.

AngularJS Views and Directives
The AngularJS tutorial has been extended with a text explaining how to create AngularJS views. The text covers the core principles, and the core AngularJS directives used to generate views.