<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Jos de Jong</title><link>https://josdejong.com/</link><description>Recent content on Jos de Jong</description><generator>Hugo</generator><language>en-us</language><copyright>Copyright &amp;copy; 2013-2026 &lt;a href='https://josdejong.com'>Jos de Jong&lt;/a> &amp;bull; powered by &lt;a href='https://gohugo.io/'>Hugo&lt;/a> and &lt;a href='https://pages.github.com/'>GitHub pages&lt;/a> &amp;bull; background from &lt;a href='https://www.technobuffalo.com/sites/technobuffalo.com/files/wp/2010/11/tb-wallpaper-blue-2560x1440.jpg'>technobuffalo&lt;/a></copyright><lastBuildDate>Fri, 05 Sep 2025 14:00:00 +0200</lastBuildDate><atom:link href="https://josdejong.com/index.xml" rel="self" type="application/rss+xml"/><item><title>Free software: the elephant in the room</title><link>https://josdejong.com/posts/2025-09-05-free-software/</link><pubDate>Fri, 05 Sep 2025 14:00:00 +0200</pubDate><guid>https://josdejong.com/posts/2025-09-05-free-software/</guid><description>&lt;p>More and more, it is clear to everyone that when the software you use is free, you&amp;rsquo;re the product. Free software products make money by serving ads and selling your data. The most common alternative is a subscription, and you see more and more subscriptions and paywalls nowadays. And people complain about that. It is simply not doable nor affordable to have a subscription for all and everything.&lt;/p>
&lt;p>Some people have found a solution: move away from the big, bad tech giants who try to keep us under control and squeeze all our money out of us. Instead, embrace open source software. It is just as good as the mainstream alternatives. It is free. It doesn&amp;rsquo;t track you or sell your data.&lt;/p></description></item><item><title>Projects</title><link>https://josdejong.com/projects/</link><pubDate>Mon, 14 Apr 2025 11:24:32 +0200</pubDate><guid>https://josdejong.com/projects/</guid><description>&lt;p>This page gives an overview on the projects I&amp;rsquo;m working on.
These include projects I work on at work as well as in my spare time.&lt;/p>
&lt;h2 id="json-editor-online">JSON Editor Online&lt;/h2>
&lt;p>JSON Editor Online is a versatile, high quality tool to edit and process your JSON data. It is one of the best and most popular tools around and has a high user satisfaction. The editor offers all your need in one place: from formatting and beautifying your JSON data to comparing JSON documents or querying your JSON data. JSON is the most used data format between servers and browser, and JSON Editor Online is an indispensable tool for frontend and backend developers working with JSON data in their daily life.&lt;/p></description></item><item><title>About</title><link>https://josdejong.com/about/</link><pubDate>Tue, 01 Mar 2022 09:33:00 +0100</pubDate><guid>https://josdejong.com/about/</guid><description>&lt;div style="float: right; margin: 0 0 5px 20px;">
 &lt;img src="https://josdejong.com/images/about/jos_2020.jpg" />
&lt;/div>
&lt;p>I&amp;rsquo;m Jos de Jong, living and working in Rotterdam, the Netherlands.
I&amp;rsquo;m happily married with the nicest girl in the world,
and we have two awesome kids to take care of, plus two more in the weekends.
I believe God created this marvelous world
where we can live, love, discover, and develop.&lt;/p>
&lt;p>I&amp;rsquo;ve studied at Delft University of Technology, and have a Bachelor
Mechanical Engineering, and a Master Systems and Control.
After my study I&amp;rsquo;ve worked in ICT and production automation at Quooker.
After that I&amp;rsquo;ve worked as a Software Engineer at Almende, a Dutch research
company specialized in information and communication technologies centering
around self-organisation. Next, I worked at Teqplay as a full-stack software
engineer, developing next generation software to make life easier for people
working in the maritime industry. Currently, I&amp;rsquo;m a self-employed software
engineer, working on my own open source projects and web applications.
I follow my heart and see where it will bring me :)&lt;/p></description></item><item><title>How to keep your code simple and maintainable</title><link>https://josdejong.com/posts/2020-06-17-how-to-keep-your-code-simple-and-maintainable/</link><pubDate>Wed, 17 Jun 2020 01:00:00 +0000</pubDate><guid>https://josdejong.com/posts/2020-06-17-how-to-keep-your-code-simple-and-maintainable/</guid><description>&lt;p>When developing a new application, your code base starts small and simple. Over time, your code grows and becomes more complex. It can be hard to fight complexity and keep a code base maintainable in the long run. Here some principles that help me with that.&lt;/p>
&lt;h2 id="recon-with-the-cost-of-maintaining-code-not-just-the-cost-of-development">Recon with the cost of maintaining code, not just the cost of development&lt;/h2>
&lt;p>When buying a car, it&amp;rsquo;s quite easy to reckon with both the cost of the one-time purchase as well as ongoing costs like fuel, taxes, and maintenance. You can calculate the impact of choosing this bad-ass, inefficient car over a small, efficient car in the long run. For some reason, in software development we mostly calculate the costs of developing a new feature only, and tend to forget that every new feature has an impact on the complexity and maintainability of the code, resulting in a &amp;ldquo;tax&amp;rdquo; on all future changes in this code base.&lt;/p></description></item><item><title>Blog migrated</title><link>https://josdejong.com/posts/2020-06-17-blog-migrated/</link><pubDate>Wed, 17 Jun 2020 00:00:00 +0000</pubDate><guid>https://josdejong.com/posts/2020-06-17-blog-migrated/</guid><description>&lt;p>I&amp;rsquo;ve moved this blog from &lt;a href="https://github.com/imathis/octopress">octopress&lt;/a> to &lt;a href="https://gohugo.io/">hugo&lt;/a>, since octopress isn&amp;rsquo;t maintained anymore. I&amp;rsquo;ve tried to keep the urls of all pages backward compatible. Thanks again octopress!&lt;/p></description></item><item><title>mathjs v6: a monolith turned modular</title><link>https://josdejong.com/blog/2019/06/08/mathjs-v6-a-monolith-turned-modular/</link><pubDate>Sat, 08 Jun 2019 00:00:00 +0000</pubDate><guid>https://josdejong.com/blog/2019/06/08/mathjs-v6-a-monolith-turned-modular/</guid><description>&lt;p>In this article, I share with you the journey and the struggles of turning a large, monolithic JavaScript mathematics library, &lt;a href="https://mathjs.org">&lt;code>mathjs&lt;/code>&lt;/a>, into a modular one embracing ES6 modules and functional programming. Because of the heavily intertwined nature of the functionality this was a huge and unique challenge.&lt;/p>
&lt;h2 id="why">Why?&lt;/h2>
&lt;p>Math.js is a popular JavaScript library that brings advanced mathematics to the web browser and server. The unique value of math.js lies in offering an integrated solution to work with different types of data like complex numbers and matrices, and offering a math-friendly syntax that allows expressing mathematics in a readable, intuitive way.&lt;/p></description></item><item><title>Batteries included</title><link>https://josdejong.com/blog/2016/08/24/batteries-included/</link><pubDate>Wed, 24 Aug 2016 00:00:00 +0000</pubDate><guid>https://josdejong.com/blog/2016/08/24/batteries-included/</guid><description>&lt;p>&lt;em>&lt;strong>tl;dr&lt;/strong> The JavaScript community is doing a great job in creating an ecosystem of highly composable, configurable, and extensible components. Unfortunately, this has complicated usage of these components. It is time to focus on the user again. Deliver components with a good default configuration which matches the typical use cases, and ensure a gradual learning curve for more advanced usage of a component.&lt;/em>&lt;/p>
&lt;p>Latest years I see a trend in software libraries and frameworks that make me really happy: libraries have become more and more composable. npm modules in particular have always been small and composable. They support extension and customization via plugins. It&amp;rsquo;s what makes it possible to combine tools like Gulp, WebPack, Browserify, Rollup, Babel, Mocha, Ava, React, Redux, Angular and many more in &lt;em>so&lt;/em> many different combinations and configurations. This is awesome.&lt;/p></description></item><item><title>Static typing: the good parts</title><link>https://josdejong.com/blog/2016/06/05/static-typing-the-good-parts/</link><pubDate>Sun, 05 Jun 2016 00:00:00 +0000</pubDate><guid>https://josdejong.com/blog/2016/06/05/static-typing-the-good-parts/</guid><description>&lt;p>&lt;em>&lt;strong>tl;dr&lt;/strong> So far I&amp;rsquo;ve been hesitant to embrace static type checkers like TypeScript. It&amp;rsquo;s because I associated static type checking with the restrictions and interoperability issues that I know from Java and C++. However, it turns out that TypeScript is different: it uses a structural type system rather than a nominal one, which eliminates these downsides. It gives us a way to describe data types without sacrificing flexibility, interoperability, or scalability.&lt;/em>&lt;/p></description></item><item><title>Architectural changes in math.js v2</title><link>https://josdejong.com/blog/2015/08/08/architectural-changes-in-mathjs-v2/</link><pubDate>Sat, 08 Aug 2015 00:00:00 +0000</pubDate><guid>https://josdejong.com/blog/2015/08/08/architectural-changes-in-mathjs-v2/</guid><description>&lt;p>&lt;em>&lt;strong>tl;dr&lt;/strong> Math.js v2 has been released a week ago. It has a completely reworked, modular architecture which allows creating custom builds. All functions have been rewritten into typed-functions. This takes away a lot of overhead for type checking and type conversions. These changes create a lot of flexibility in both extending and consuming the library.&lt;/em>&lt;/p>
&lt;p>A week ago &lt;a href="http://mathjs.org/">math.js&lt;/a> v2 has been released, a big milestone! You can &lt;a href="http://mathjs.org/download.html">download it here&lt;/a>. Math.js is an extensive math library for JavaScript and Node.js. It features a flexible expression parser and offers an integrated solution to work with numbers, fractions, big numbers, complex numbers, units, and matrices. It has been around for two and a half years now and has a steadily growing community around it and number of dedicated contributors.&lt;/p></description></item><item><title>A broader view on isomorphic JavaScript</title><link>https://josdejong.com/blog/2015/03/28/a-broader-view-on-isomorphic-javascript/</link><pubDate>Sat, 28 Mar 2015 00:00:00 +0000</pubDate><guid>https://josdejong.com/blog/2015/03/28/a-broader-view-on-isomorphic-javascript/</guid><description>&lt;p>&lt;em>&lt;strong>tl;dr&lt;/strong> In order to ease full stack JavaScript development, we need to take away the hurdles keeping these worlds separated. We need unified, isomorphic solutions for common functionality like module loading, networking, background processes, logging, and others.&lt;/em>&lt;/p>
&lt;p>Ever had to use statements like the following?&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-js" data-lang="js">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">if&lt;/span> (&lt;span style="color:#66d9ef">typeof&lt;/span> window &lt;span style="color:#f92672">!==&lt;/span> &lt;span style="color:#e6db74">&amp;#39;undefined&amp;#39;&lt;/span>) {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e">// browser
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>}
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">else&lt;/span> {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e">// node.js
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>It&amp;rsquo;s a simple check to see whether a script is being executed in in a browser, and if not, assume that it&amp;rsquo;s a node.js process. I noticed that I need them more and more. I mostly develop libraries. As soon as I need functionality which is not standard available in both browser and node.js, like fetching urls, I have to create two different implementations and switch depending on the environment. It&amp;rsquo;s annoying and I don&amp;rsquo;t yet have a seamless solution for dealing with environment specific code.&lt;/p></description></item><item><title>Reusable software? Just don't write generic code</title><link>https://josdejong.com/blog/2015/01/06/code-reuse/</link><pubDate>Tue, 06 Jan 2015 00:00:00 +0000</pubDate><guid>https://josdejong.com/blog/2015/01/06/code-reuse/</guid><description>&lt;p>It may be the holy grail of programming: writing reusable code. Not getting stuck by inventing the wheel again and again, but moving forward and building on top of what has been done. Looking at what we do today, we still haven&amp;rsquo;t really figured this out.&lt;/p>
&lt;p>So you are writing a software library. You had a great idea for a simple, broadly applicable solution. You have cooked up a nice API and are happy with the result. Then, new features are needed. The library grows and grows, and becomes extremely versatile. To account for more and more specific cases though, the API grows at a disproportional rate. Due to this feature creep, soon there isn&amp;rsquo;t much left from your initial, beautiful API. At some point it becomes almost too complicated to work with the library due to all configuration options and edge cases.&lt;/p></description></item><item><title>The art of creating simple but flexible APIs</title><link>https://josdejong.com/blog/2014/10/18/the-art-of-creating-simple-but-flexible-apis/</link><pubDate>Sat, 18 Oct 2014 00:00:00 +0000</pubDate><guid>https://josdejong.com/blog/2014/10/18/the-art-of-creating-simple-but-flexible-apis/</guid><description>&lt;p>A while ago I read the blog post &lt;a href="http://fr.umio.us/ranging-near-and-far/">Ranging Near and Far&lt;/a> by Scott Sauyet. On &lt;a href="http://www.echojs.com/">Echo JS&lt;/a>, Scott titled a link to this blog &lt;em>&amp;ldquo;Choosing simple APIs over flexible ones&amp;rdquo;&lt;/em>. This title suggests that you have to choose between &lt;em>either&lt;/em> simple &lt;em>or&lt;/em> flexible APIs, which is a false dilemma. This got me thinking: What makes a good API?&lt;/p>
&lt;h2 id="flexibility">Flexibility&lt;/h2>
&lt;p>Scott discusses the API of the &lt;code>range&lt;/code> function of &lt;a href="http://ramdajs.com/">Ramda&lt;/a> compared to that of &lt;a href="http://underscorejs.org/">Underscore&lt;/a>. Where Underscores &lt;code>range&lt;/code> supports optional start (defaulting to zero), custom step size, and a negative step, Ramda&amp;rsquo;s range &amp;ldquo;only&amp;rdquo; supports a step size of 1 and does not allow to omit the start value. While Underscores implementation is more flexible, Scott argues that Ramda&amp;rsquo;s more limited implementation may be the better choice because of its simplicity. Scott suggests that it is way more complicated to use Underscores &lt;code>range&lt;/code> because of it being more flexible. Scott has an argument here, but there are more factors determining how easy it is to use an API.&lt;/p></description></item><item><title>Shaped by the language you use</title><link>https://josdejong.com/blog/2014/01/13/shaped-by-the-language-you-use/</link><pubDate>Mon, 13 Jan 2014 00:00:00 +0000</pubDate><guid>https://josdejong.com/blog/2014/01/13/shaped-by-the-language-you-use/</guid><description>&lt;p>A few months ago I did an astonishing discovery, namely how strong your solutions are shaped by the programming language you use, the language that lives in your head. The interesting thing is that I already &lt;em>knew&lt;/em> this. But despite that, I hadn&amp;rsquo;t expected this to be &lt;em>so&lt;/em> incredibly influencing until I saw such a clear case of this in my own work.&lt;/p>
&lt;h2 id="the-right-tool-for-the-right-job">The right tool for the right job&lt;/h2>
&lt;p>First a short explanation of my programming background. I&amp;rsquo;ve experience with various Basics, C++, Java, Python, JavaScript, Matlab, and others. Experience with procedural languages, object oriented languages, prototypal languages. Strict and loosly typed languages. Compiled languages and scripting languages. Desktop, web, server, mobile. I have explored quite some corners of the programming universe, and the more I learn, the more I discover just how little I know&amp;hellip;&lt;/p></description></item><item><title>Multithreading is today's GOTO</title><link>https://josdejong.com/blog/2013/09/18/multithreading-is-todays-goto/</link><pubDate>Wed, 18 Sep 2013 00:00:00 +0000</pubDate><guid>https://josdejong.com/blog/2013/09/18/multithreading-is-todays-goto/</guid><description>&lt;p>Ask any programmer to the worst bug he ever encountered and you will very likely hear a &lt;a href="https://brendaneich.com/2007/02/threads-suck/">terrible story&lt;/a> concerning multithreading and data locks. Or maybe an issue around memory corruption or memory leakage. Two topics which are apparently hard to master for us programmers.&lt;/p>
&lt;p>The latter case, memory corruption, is becoming less and less of a problem, as most modern languages come with automatic memory management. Most people see this as a step forward: it saves us a lot of trouble and results in more robust applications. Multithreading on the other hand is seen as something obvious and essential. Even more, programming languages which don&amp;rsquo;t support multithreading are seen as inferior and immature.&lt;/p></description></item><item><title>Details matter</title><link>https://josdejong.com/blog/2013/07/27/details-matter/</link><pubDate>Sat, 27 Jul 2013 00:00:00 +0000</pubDate><guid>https://josdejong.com/blog/2013/07/27/details-matter/</guid><description>&lt;p>This is a theme which pops up again and again at the software projects I am working on.
I really liked this blog by Jeff Atwood in this regard, explaining
&lt;a href="http://www.codinghorror.com/blog/2012/05/this-is-all-your-app-is-a-collection-of-tiny-details.html">all your app is, is a collection of tiny details&lt;/a>.
Software which has not taken care of details right can be extremely annoying,
and vice versa, an application having its details right can be real joy to work with.&lt;/p>
&lt;p>This article explains the importance of paying attention to details
in application development. This holds true for different different application
levels. The article discusses this in two sections:&lt;/p></description></item><item><title>Welcome!</title><link>https://josdejong.com/blog/2013/07/19/welcome/</link><pubDate>Fri, 19 Jul 2013 00:00:00 +0000</pubDate><guid>https://josdejong.com/blog/2013/07/19/welcome/</guid><description>&lt;p>Welcome at my blog. I just installed it freshly using
&lt;a href="https://github.com/imathis/octopress">octopress&lt;/a>.
Like everybody, I&amp;rsquo;m very unique and have the world a lot of interesting things
to tell ;-). So here we go.&lt;/p></description></item></channel></rss>