RSSAmplifier

Blog

Arve Knudsen's Blog

Recent content on Arve Knudsen's Blog

arveknudsen.comRSS feed ↗41 posts

Latest posts

PromCon 2025


 Another year, another PromCon!
During PromCon EU 2025 , which took place in Munich October 21-22, I shared a talk with my colleague Owen Williams. 
 
 
 Together we talked about the improvements that have gone into Prometheus' OpenTelemetry (AKA OTel) functionalities since PromCon 2024.
Significant improvements have been made, both on the functional and the performance…

Prometheus Info Function Blog Post


 I’ve blogged for the first time for the Prometheus project!
The blog post is about the PromQL function Björn Rabenstein and I authored together: info .
While info is still considered experimental, we recommend it as the best method for including OpenTelemetry resource attributes in Prometheus queries. 


PromCon 2024


 This year marks my debut as conference speaker! During PromCon EU 2024 ,
which took place in Berlin September 11-12, I got two occasions to co-speak! 
 
 
 During the first day of the conference, my colleague Jesús Vázquez and I gave the talk
 Practical OpenTelemetry with Prometheus 3.0 ,
where we shared with the audience all the work we put in towards making…

Grafana Mimir Launched


 I am very happy to be able to share with the world what I have been working on since July last
year: Grafana Mimir ! Grafana Mimir is an open source, horizontally
scalable, highly available, multi-tenant, long-term storage for Prometheus. It’s a continuation of
the Cortex project, but licensed under
 AGPL . Please see the
 launch post 
for the details! 


Practical Networked Applications in Rust, Part 2: Networked Key-Value Store


 Welcome to the second installation in my series on taking the
 Practical Networked Applications in Rust 
course, kindly provided by the PingCAP company, where you develop a
networked and multithreaded/asynchronous key-value store in the amazing Rust language. You may
see my previous post in this series
 here . 
 
 
 In the previous, and initial, post I…

Practical Networked Applications in Rust, Part 1: Non-Networked Key-Value Store


 The PingCAP company, makers of the TiDB 
NewSQL database and the TiKV key-value store, have kindly made publicly
available, as well as open-sourced, a set of training courses that they call the
 'PingCAP Talent Plan' . These courses train programmers
in writing distributed systems in the Go and Rust languages. They are originally intended by
PingCAP to train students, new…

An Example Substrate Runtime Module


 Substrate is a framework for making custom blockchains,
made available by Berlin based Parity Technologies ,
who are until now the best known for making the second-most popular (after the official one,
 Go Ethereum ) client for the Ethereum blockchain, also called Parity.
Parity Technologies is led by Gavin Wood, one of the inventors of Ethereum and as such one of
the…

JavaScript/Web Assembly Binding for Indy Crypto


 At the behest of the excellent Quorum Control company, I have
carried out my first foray into both Rust and Web Assembly (abbr. Wasm), making a
JavaScript/Wasm binding of the Hyperledger Indy Crypto 
library. The reason behind this undertaking is that Quorum Control (and others) need
 BLS cryptographic signature
verification abilities in JavaScript applications (Web and…

Experimental Berlin Mentioned in The Guardian


 My project Experimental Berlin received a nice mention in
British newspaper
 The Guardian ! 


Official Elasticsearch/Fluentd/Kibana Add-On for Kubernetes updated to 5.5


 My pull request for updating the official
Elasticsearch/Fluentd/Kibana logging add-on for Kubernetes to version 5.5.1 of Elasticsearch and
Kibana was recently approved and merged into the master branch! Users of the popular EFK/ELK
stack can now enjoy the latest version with their Kubernetes clusters! 


Installing Elasticsearch/Kibana 5.5 within Kubernetes cluster on AWS


 In my previous blog post I showed how to use the Kops tool to create a production ready Kubernetes cluster on Amazon Web Services (AWS). In this follow-up post I will show how to install Elasticsearch and its graphical counterpart Kibana in the cluster, in order to be able to collect and store logs from your cluster and search/read them. We will also install Fluentd as this component is…

Creating a Highly Available Secured Kubernetes Cluster on AWS with Kops


 Today I will be talking about Kops , which is an official tool for creating Kubernetes clusters on AWS, with support for GCE and VMware vSphere in alpha. It takes a whole lot of the pain out of setting up a Kubernetes cluster yourself, but still presents many challenges to overcome and a great degree of freedom in how you configure the cluster. 
 
 
 I have recently created a…

Route Handling Framework for Choo


 I’ve made a complementary route handling framework for Yoshua Wuyts' JavaScript SPA (Single Page Application) framework Choo : choo-routehandler . For those unfamiliar with Choo, it’s a view framework similar to React and Marko , although with a strong focus on simplicity and hackability and working directly with the DOM instead of a virtual DOM (unlike React). 
 
 
 Basically,…

Avoiding Popup Blocking when Authenticating with Google


 When I recently implemented Google authentication in a Web app, I discovered that I fell victim to the browser’s built-in popup blocking mechanism, which would hide Google’s requisite login dialog. While popup blocking can be pretty good to have in the face of more or less malicious websites and intrusive ads, it’s a real drag when trying to implement something so beneficial, not to say…

Event Catalogue for Berlin Released


 I’m finally ready to share what I’ve been working on for the last few months, an online catalogue of underground cultural events in the city of Berlin: Experimental Berlin . My best effort to date I think! For this project I’ve been using Yoshua Wuyts' excellent JavaScript framework Choo . 


Maintainership of html-to-react


 I’m happy to announce that I’ve taken over maintainership of the popular NPM package html-to-react , which currently has about 3600 downloads per month. This package has the ability to translate HTML markup into a React DOM structure. 
 
 
 An example should give you an idea of what html-to-react brings to the table: 
 
 
 
 var React = require('react');
var…

Achieving Infinite Scrolling with React.js


 As part of developing MuzHack I had to implement a method of loading search results on demand, i.e. not everything at once. I decided on the 'infinite scrolling' method, which means that as seen on f.ex. Twitter, you load more content as the user scrolls down the page. This is an alternative to the more traditional pagination method, where content (e.g. search results) is partitioned into…

Zero Downtime Docker Deployment with Amazon ECS


 Earlier, I wrote about zero downtime docker deployment with Tutum. I have recently started experimenting with Amazon ECS (EC2 Container Service), which is Amazon’s offering for the orchestration of Docker containers (and thus a competitor to Tutum). I don’t have a lot of experience with ECS yet, but it looks pretty solid so far. 
 
 
 I found there was a real lack of…

MuzHack featured in Electronic Beats


 Electronic Beats Magazine did a quick writeup on my MuzHack project. Nice that people are paying attention! 


Uploading Files to Amazon S3 Directly from the Web Browser


 Amazon S3 is at the time of writing the premier file storage service, and as such an excellent choice for storing files from your Web application. What if I were to tell you these files never need to touch your application servers though? 
 
 
 The thing to be aware of is that the S3 API allows for POST-ing files directly from the user’s Web browser, so with some JavaScript magic…

Zero Downtime Docker Deployment with Tutum


 In this post I will detail how to achieve (almost) zero downtime deployment of Docker containers with the Tutum Docker hosting service. Tutum is a service that really simplifies deploying with Docker, and it even has special facilities for enabling zero downtime deployment, i.e. the Tutum team has a version of HAProxy that can switch seamlessly between Docker containers in tandem with…

MuzHack - Members Now Able to Advertise Workshops


 I am pleased to announce that MuzHack members are now able to inform of their availability for workshops, which to me goes hand in hand with publishing open music hardware, as it allows makers to connect with their audience (and vice versa). It should also allow for more efficient (and enjoyable) sharing of knowledge and skills, as would-be makers get the chance to learn from the experts,…

Help Functionality Added to MuzHack's Markdown Editors


 The Markdown editors in MuzHack are now sporting a help button, to display documentation about the supported Markdown syntax. Early user feedback suggested this was a much desired feature, as many users aren’t familiar with the Markdown syntax. 
 
 
 
 
 


Stack Overflow's Markdown Editor Adapted


 Stack Overflow and Markdown 
 
 
 Stack Overflow is a familiar, and cherished, name to many a programmer these days. No wonder, as it is nothing short of an ingenious way of finding answers to the many problems you come across as you’re writing code. Myself I can’t remember the last time I consulted a book on programming, since starting to use SO many years ago. One of the cool…

MuzHack Presentation at Notam


 So I gave the first presentation ever on MuzHack today, at the Norwegian sound research centre Notam . Feedback was positive and I got lots of great leads on who I should connect with further, and elsewhere I might present, both nationally and internationally. 
 
 
 Another presentation elsewhere in Norway might be in the works, later this year. 


Meteor: Creating Custom Reactive Data Sources


 A core concept in Meteor is reactivity . Basically, this means that Meteor can re-run computational functions automatically whenever their (reactive) data sources change. Typically, this happens without your having to think about it, since you’re using an in-built reactive data source, such as database collections. A typical example of a function needing to react to a data source (e.g. a…

Using Papertrail from Docker/Tutum


 In my search for a comprehensive logging solution for MuzHack that works in a Dockerized environment, more specifically Tutum, I came across Papertrail . 
 
 
 Papertrail is a fairly simple Web application for log aggregation, that receives log data over the Internet through the syslog protocol. As a registered user of Papertrail, you receive a syslog address that serves as your…

Calling Trello API from Meteor


 I just ported the Trello client API to a Meteor package , in order to be able to authorize my application before making actual API calls from the server side (let’s just avoid the hassle of cross-site scripting). 
 
 
 The following snippet shows my client side flow for creating a Trello board; first I authorize against Trello, then I call a Meteor server method to perform the…

How to Back Up Discourse


 I’ve recently set up a Discourse forum on DigitalOcean, and was wondering how to implement automatic backups. Turns out Discourse supports both automatic backups and uploading them to S3 . Couldn’t be easier! 
 
 
 To save money, you might want to create a lifecycle rule on S3 to archive the backups to Glacier, which is a slower, but cost-efficient, alternative to S3. 


Cloud-Config File for CoreOS with 2 GB of Swap on DigitalOcean


 I recently installed Discourse on a CoreOS node at DigitalOcean. Since I chose the minimum spec that Discourse can run on, 1 GB memory, I had to enable 2 GB of swap space. This is solved by configuring CoreOS with an automatic swap service, through the standard cloud-config file. My complete cloud-config file (input this into the node’s user data) looks as follows: 
 
 
 
…

MuzHack Is in Production


 For some months now I have been developing MuzHack , a platform for makers of music hardware to publish their designs. I’m pleased to say it’s finally in production! The project is in collaboration with the Norwegian music sound research center Notam . My hope is it will spark inspiration between independent hardware developers, similar to how I and so many other software developers have…

Improving Search Result Navigation in the Chromium Developer Console


 As detailed in my previous blog post on Adding Support for Regular Expression Search in the Chromium Developer Console, some months ago I set out to make it possible to search for regular expressions in the Chromium/Google Chrome developer console. The task turned out to be more complicated than I anticipated however, and I was asked by the responsible developers to write a separate patch…

Building ChucK(JS) with Gradle


 As part of my work to port the ChucK music programming language to JavaScript, via the Emscripten C++ to JavaScript compiler, I’ve implemented a Gradle build script for it (instead of the original Makefile). Aside from my working for Gradle, I think it’s a great choice for this kind of polyglot project, where both native and JavaScript targets are built. ChucK is also highly cross platform…

How to Access Real DOM Nodes with Mercury/Virtual-DOM, Part 2


 In the time since my first post on accessing non-virtual DOM nodes with Mercury / virtual-dom , I’ve learnt that my approach wasn’t as sound as I initially thought. The creator of Mercury, Jake Verbaten, let me know that virtual-dom hooks should only modify node attributes, otherwise the behaviour will be undefined ('innerHTML in hooks breaks the tree indexing that virtual-dom is using').…

Uploading Resized Pictures to S3 in Meteor Application


 I am facing the need to upload pictures to Amazon S3 in my Meteor application, MuzHack. The pictures must be resized before storing in S3, and there’s the option of doing this either on my server or in the client. I have elected to go with the latter for now, since it’s simple and doesn’t put load on my server. 
 
 
 To resize pictures client side I am using the Meteor Clientside…

How to Access Real DOM Nodes with Mercury/virtual-dom


 At work, we are using the Mercury JavaScript UI library, which is a more functional alternative to React (at least this is my understanding of it). It is also highly modular, in that it’s simply composed from several independent libraries (such as virtual-dom ). 
 
 
 Like React, Mercury hides the browser DOM behind a virtual model, to improve performance. However, this can cause…

Continuous Deployment of MuzHack with Docker on Tutum


 I have recently implemented continuous deployment of my MuzHack Web application to the Docker hosting service Tutum, in both production and staging versions. I am really pleased with the smoothness of the whole process of setting it up, and the ease of day-to-day administration. 
 
 
 Docker Image Definition 
 
 
 The very first thing I had to do was to define…

How to Connect to Meteor's MongoDB Instance from Python


 Today I wrote a Python script in order to insert data into Meteor’s MongoDB instance, and the first question that came up was how to get hold of the connection parameters. It turns out that Meteor has a command for this purpose: 
 
 
 
 meteor mongo -U [site] 
 
 
 
 If you leave out the 'site' argument, you’ll get the URL to connect to the local MongoDB…

How to Set Page Title Dynamically with Meteor, Iron Router and SEO


 In my Meteor-based project MusitechHub, I recently had to figure out how to set page title dynamically for certain pages. I’m using Iron Router to implement routing in the application, which laid the premise for the solution. 
 
 
 I gathered from the #meteor channel on IRC that I could base my solution on Manuel Schoebel’s SEO package, which is able to set the current page…

ChucKJS Talk in Berlin


 Last Thursday (the 5th of February) I gave a talk on my project ChucKJS at the Berlin NodeJS meetup. It turned out to be a very positive experience, which is especially great since it was the first time I’ve given a talk at a meetup or indeed outside of internal company gatherings. Based on the number of questions I received, there appeared to be a great deal of interest in Web Audio and…

Adding Support for Regular Expression Search in the Chromium Developer Console


 Chromium/Google Chrome is my hands-down favourite browser for developing Web sites in, owing to its incredibly sleek developer tools . I feel right at home in its JavaScript console , for evaluating JavaScript interactively or to inspect logs from a running JavaScript application. However, the latter scenario is somewhat let down by the console’s limited search functionality. At the time of…