The Top 10 Things Wrong with JavaScript

“JavaScript has a reputation for being one of the worst programming languages in existence, and for good reasons! JavaScript is easy to learn and easy to use, except when it’s not. There are many “gotchas” that can trip you up. Below, I glean some of the best from various online sources…”


“Clojure is a “robust, practical and fast programming language” whose original design goals were aimed at giving developers “succinctness, flexibility and productivity”. It turns out that most organizations today are interested in achieving those very goals – as the landscape evolves, they need technologies that help them move faster, respond more effectively, and to take advantage of new architectures and infrastructure. In short, they need simple tools that help them be more agile.

In this, the sixth consecutive year of the State of Clojure survey, we are seeing the evidence that Clojure is moving across the chasm from a niche tool used by explorers and hobbyists to becoming a critical part of the commercial development landscape, and that its adoption is spreading both broadly among companies, but also more deeply within them.

Before we get to the results, we’d like to first thank everyone who took the time to respond to the survey this year. Response was up more than 75% this year, with 2,445 total responses to analyze. This kind of data is invaluable to the people and organizations using (or considering) Clojure today. As always, we’d also like to thank Chas Emerick for starting the survey back in 2010…”

Using Redis as a Time Series Database: Why and How

“Redis has been used for storing and analyzing time series data since its creation. Initially intended as a buffer and destination for logging, Redis has grown to include five explicit and three implicit structures/types that offer different methods for analyzing data with Redis. This article intends to introduce the reader to the most flexible method of using Redis for time series analysis…”

Why we choose Java instead of a polyglot stack

“Looking ahead, we need a tech stack that will help us scale. We need to be able to rapidly build services and test out new products and features, quickly onboard new engineers, and enable easy collaboration across teams. That’s why Java has become our language of choice at HubSpot.

Java has come a long way; it used to slow development down with clunky frameworks, endless XML, and over-engineered libraries. But it’s evolved into a modern platform that we think is perfect for building fast, reliable services and web apps. Here’s a look at why we’ve adopted Java and some of the key benefits that I think make it right for us…”

A Book about Qt5

“Welcome to the online book of Qt5 Cadaques! Why Qt5? Because Qt5 is awesome! Why cadaques? Because one of the authors had a great holiday in this rocky coast line in the north-east of spain.

The entire collection of chapters covering Qt5 programming, written by Juergen Bocklage-Ryannel and Johan Thelin, is available here. All book content is licensed under the Creative Commons Attribution Non Commercial Share Alike 4.0 license and examples are licensed under the BSD license.

We are heavily working on this book and that means several things:

  1. It’s not done. We will be releasing new chapters from time to time and updating existing chapters on the go.
  2. We love your support. If you find any errors or have suggestions, please use our feedback system (the issueslinks). It will create a new ticket-entry in our ticket system and help us to keep track.
  3. Be patient. We are working in our spare time on the book and we depend on the support of our companies and family.


Kotlin Digest 2015

“Kotlin’s adoption significantly increased in 2015, and we are especially grateful to our early adopters, who not only used Kotlin, but shared their experiences through different mediums. We’d like to highlight the most notable articles and videos of the past year.

By the way, you can join us on slack and subscribe to the #feed channel, where we push quite a bit of interesting content as it appears.

N.B: Some of the following articles use outdated versions of Kotlin in the examples and should be interpreted in the context of the time at which they were written…”

Kotlin Digest 2015

C++11 threads, affinity and hyperthreading

“For decades, the C and C++ standards treated multi-threading and concurrency as something existing outside the standard sphere – in that “target-dependent” world of shades which the “abstract machine” targeted by the standards doesn’t cover. The immediate, cold-blooded replies of “C++ doesn’t know what a thread is” in mountains of mailing list and newsgroup questions dealing with parallelism will forever serve as a reminder of this past.

But all of that came to an end with C++11. The C++ standards commitee realized the language won’t be able to stay relevant for much longer unless it aligns itself with the times and finally recognizes the existence of threads, synchronization mechanisms, atomic operations and memory models – right there in the standard, forcing C++ compiler and library vendors to implement these for all supported platforms. This is, IMHO, one of the biggest positive changes in the avalanche of improvements delivered by the C++11 edition of the language.

This post is not a tutorial on C++11 threads, but it uses them as the main threading mechanism to demonstrate its points. It starts with a basic example but then quickly veers off into the specialized area of thread affinities, hardware topologies and performance implications of hyperthreading. It does as much as feasible in portable C++, clearly marking the deviations into platform-specific calls for the really specialized stuff…”

Four Things Working at Facebook Has Taught Me About Design Critique

“…at Facebook, critiques have played out a bit differently. The meetings are much more centralized around authentic critique and less about providing criticism or pushing an agenda.

Many of the methods we’ve incorporated for critiques come primarily fromJared M. Spool’s Moving from Critical Review to Critique.” What Spool writes about critique has made a tremendous impact on my understanding of what makes a critique worthwhile, particularly at Facebook. As a result, I’ve come to embrace the notion that dedicating a few hours every week for a meeting can undoubtedly prove itself to be valuable for everyone who attends…”

Scalable C

“We use C most often to write libraries, which we then call from applications in other languages. This layer of C libraries sits between the operating system and the application.

This layer provides security, user interfaces, audio and video, maths, graphics, databases, communications, compression, and so on. I call this the “fabric layer.”

For the most part, this fabric layer sees the world as a single processor. It has no concept of concurrency. It cannot take advantage of many cores on a machine, let alone many machines in a cloud. Every library has its own style, standards, and API model. Every library has a custom build process.

A scalable technology can solve large problems as well as small ones. Our current fabric layer is not scalable. It costs too much to write and to use.

What I will explain in this book is how to build a scalable fabric layer, written in “Scalable C.”

Scalable C has specific properties:

  • It is cheap to create a Scalable C project.

  • It is cheap to use, with consistent and obvious APIs.

  • It is cheap to deploy, with powerful tools and packagers.

  • It is cheap to scale to many cores, with actor-based concurrency.

  • It is cheap to scale to many servers, with clustering across a cloud or data center.

  • It is cheap to build community, with a modern collaborative process.

Scalable C is standard portable C plus a mix of other technologies:

  • The CLASS RFC defines the Scalable C language style.

  • ZeroMQ provides message passing between threads and processes.

  • CZMQ provides a core C library for Scalable C.

  • Zyre provides local-area clustering for Scalable C projects.

  • zproject provides packaging (builds, bindings, and distributions).

  • zproto provides client-server meta-programming.

  • The C4.1 RFC defines a collaborative process for scalability.