2023
Simple and Unopinionated Java API
This post summarises how to build a simple and unopinionated Java API with Javalin. It demonstrates how to test it, analyse code and dependncies, package it, externalise, and run it.
Solving Progress Indication Issues in Legacy Web Applications
This post summarises an approach to add progress indication for a legacy web app. This is done globally, without having to rewrite or retest the application.
2021
New Features in Java 9 and Later Versions
This post summarises the new features in Java after version 9. It covers the most prominent features from a developer’s perspective. It either omits or gives a high level overview of less commonly used features.
2020
How To Start A Debug Container in Kubernetes
This post demonstrates how to start a temporary debug container in a K8S cluster and open up a terminal sessions into it. This will allow us to test various network issues without leaving any permanent pods behind.
Improve Your TypeScript With Static Analysis
This article describes a set of tools for static analysis and automated audits of TypeScript code.
2019
Switch Between Multiple Kubernetes Clusters With Ease
This article describes how to work with multiple Kubernetes clusters in a structured and convenient way …
React’s useCallback and useMemo Hooks By Example
This article demonstrates with a few simple examples why we need the useCallback and useMemo hooks and when and how to use them.
2018
Python API With Flask and Flask RESTPlus
This article will describe how to get started with the python ecosystem, so we can write APIs and test them. We’ll leave out application specific aspects like authentication and database access and will focus on the basics. As an example, we’ll build a simple REST-ful API…
DIY Type Safe AOP in TypeScript
In this article, we will demonstrate how to implement a simple type safe utility function for audit logging in TypeScript.
Redux-Form with External Submit Button
In this article, I’ll show how to combine a redux-form with an external submission button …
Programmatic Form Submission with Fields and Files
In this article, I’ll show how to wrap the XMLHttpRequest primitives in a simple promise-based function for arbitrary form submission …
2017
Big Data Analysis with Scala and Spark - MOOC Summary
Apache Spark has emerged as the premium tool for big data analysis and Scala is the preferred language for writing Spark applications. The “Big Data Analysis with Scala and Spark” course on Coursera is a great, intuitive, and accessible introduction to Spark. This post is a summary of its content …
Await and Async Explained with Diagrams and Examples
Explains JavaScript Async/Await syntax and semantics with diagrams and examples …
Common Types for Redux Actions and Reducers
In my past React/Redux projects which use Flow or Typescript, I ended up writing similar type definitions for the Redux actions and reducers. I decided to extract these as generic type definitions, which can be reused in the future …
Mongo Query to CSV Download (Express JS)
Streaming a large Mongo query to a CSV download via Express JS …
React Setup on Bluemix in 10 Minutes
React is one of the most mature and widely used JavaScript libraries. However, the ecosystem of tools around it can be overwhelming. It often takes hours or even days to configure properly a usable development environment. In this post, we’ll show how to set up a sample React web app, and productionise it on Bluemix it in less than 10 minutes …
Gradle Quickstart
Introduces Gradle, its main building blocks, and how to work with them …
Node.js Cheatsheet [Part 2] - Yarn
Introduces the Yarn package manager and lists common commands in a cheatsheet …
Cloud Foundry [Part 1] - Orgs, Spaces, Buildpacks, and Services
Cloud Foundry is an open source Platform as a Service (PaaS) technology giverned by the Cloud Foundry Foundation. Multiple PaaS providers offer cloud services based on Cloud Foundry. This allows for “portbale” applications which are based on open standards and can be easily migrated across clouds. In this post, we will overview the main concepts and building blocks in Cloud Foundry and will provide a cheatsheet of common Cloud Foundry commands …
Node.js Cheatsheet [Part 1]
A cheatsheet of common Node.js tools, commands, concepts, and techniques …
2016
Summary of the Parallel Programming with Scala MOOC
EPFL has released a new course on Parallel Programming, which is a part of the Functional Programming in Scala Specialisation. This post summarises the course and can be used as a quick ref-card on the topic …
Shell Cheatsheet [Part 2] – Working with Docker
This post is a cheat sheet of commonly used Docker shell commands …
Shell Cheatsheet [Part 1] - Common Bash Scripting, Tmux
This post is a cheat sheet of commonly used shell commands and tools. It is meant to serve as a quick reference guide that you can consult when developing scripts or when working extensively with the Bash shell …
Functional Programming and Category Theory [Part 2] – Applicative Functors
This post introduces a type of functors called Applicative Functors. Unlike the ordinary functors, applicatives allow us to work with multi-arguement functions and thus turn out to be quite useful in FP.
Functional Programming and Category Theory [Part 1] - Categories and Functors
This series of tutorials defines and illustrates the Category Theory concepts which are most widely adopted in FP. We will use simple Scala and pseudocode examples to illustrate the new terms. In this post we will look into Categories and Functors …
Scala Syntax Refcard on Github
A Scala syntax ref card on Jupyter on Github …
2015
Pandas in Jupyter - Quickstart and Useful Snippets
This article overviews how to quickly set up and get started with the pandas data analysis library. It also lists common code snippets for parsing, loading, and transforming data …
Summary of the Oracle JDK8 MOOC
Oracle has recently released a 3-week JDK 8 Massive Open and Online Course called “Lambdas and Streams”, which discusses the new JDK8 functional features in much more details. It’s a great course and if you’re interested in Java and new JDK8 it can help you get started. This article summarises the course and my previous post and can be used as a quick ref-card …
Overview of Modern Concurrency and Parallelism Concepts
Most software engineers know about operating system (OS) level processes and threads. They are taught in all university OS courses. However, newer concepts promising higher throughput, less overhead, latency, and development efforts have emerged. The goals of this article are to summarise, exemplify and compare terms like green threads, fibres, goroutine, actors etc …
Reshaping in Pandas - Pivot, Pivot-Table, Stack, and Unstack explained with Pictures
In this post, I’ll exemplify some of the most common Pandas reshaping functions and will depict their work with diagrams …
Fast and Simple Sampling in Pandas when Loading Data From Files
In this article I’ll describe a simple and fast approach for sampling data in Pandas as it is loaded from the data file …
Basic Networks: Cheatsheet [Part 1]
The purpose of this cheat-sheet is to briefly overview the main networking principles without going into too much technical details…
.NET for Java Devs in a nutshell
.Net is a software development platform, which allows code written in different languages to interoperate. C# and the .Net model have some resemblances with some java-based technologies. This article aims to briefly explain some of its core concepts by comparing and contrasting the two “worlds” …
2014
REST with Embedded Jetty and Jersey in a Single Jar - Step by Step
Setting up a simple RESTful Java based development environment to play with can be surprisingly difficult. In this tutorial, I will show how to set up a RESTful server (Jetty+Jersey) to start from a standard Java main method. Furthermore, using Maven we’ll package the entire application in a single executable jar file, which can be started from any machine with a Java environment. Finally, we’ll see how to import it into Eclipse, so we can develop and debug there …
C# pitfalls for Java Devs - Static Members in Template Classes [Part 2]
C# and Java generics differ significantly in terms of the underlying semantics, which can be quite confusing for a Java programmer. In this post we’ll look into it …
C# pitfalls for Java Devs - Overriding [Part 1]
Last week I finally had the time to learn a bit of C#, after a number of years of mostly Java coding. Professional C# developers have described it to me as a “better Java” or “Java with syntactic sugar”, and have claimed that Java programmers should not have problems picking it up. It is true that both languages have a lot in common - i.e. the C-like syntax and single inheritance. However, there are some quite fundamental philosophical differences, which can be mind-boggling for a Java programmer …
CloudSim and CloudSimEx [Part 3] – Delayed VM and Cloudlet actions
Many few CloudSim users have asked how to submit/destroy a VM or a cloudlet with a delay. Unfortunately, this is far from trivial, as it involves launching and handling custom events and ensuring the internal state of the broker is consistent - e.g. all cloudlets of a terminated VM are killed. That’s why CloudSimEx introduced a new broker DatacenterBrokerEX, which among other new features also supports dynamic provisioning and scheduling of VMs and cloudlets …
Starting VM with Custom Image, Security Group and Key-Pair via JClouds
Recently I needed to programatically start EC2 instances from a private AMI (VM Image) as a part of a new provisioning algorithm I was working on. I also wanted to specify my predefined security group and key-pair, so that the new VM is usable right away. Lastly, I wanted to implement it as EC2-independent as possible, so that I can include multiple clouds later on. After struggling a bit with both Apache LibCloud and Apache JClouds I could finally implement this in JClouds …
CloudSim and CloudSimEx [Part 2] - Disk operations
In this post I’ll focus on how CloudSimEx enables disk operations modelling …
CloudSim and CloudSimEx [Part 1]
CloudSim is one of the most popular Cloud infrastructure simulators and is used throughout academia and industry. Being one of its maintainers I often get emails with requests for new features. Thus, I’ve started the CloudSimEx project, which brings some of these extensions together. CloudSimEx is a set of CloudSim extensions making simulation development easier and enabling the modelling of new types of applications, not supported by CloudSim …
Advanced Automated CloudStone Setup in Ubuntu VMs [Part 2]
This post covers how to achieve a more advanced CloudStone deployment with a dedicated load balancer in front of the web server, so that new web servers can be added dynamically. To accommodate multiple web servers we configure a central repository for the media filestore, which is shared across all of them …
Automated CloudStone Setup in Ubuntu VMs
One of the major obstacles in Cloud computing research is the lack of representative “cloudy” applications and workloads. The CloudSuite 2.0 suite of benchmarking applications tries to address just that. It comprises 8 benchmarks, which represent a large spectrum of typical applications run in cloud environments. Among them is CloudStone, which is a social media 3-tier web application benchmark. However, its installation is not straightforward. This article introduces several scripts that automate CloudStone’s installation on 64bit Ubuntu 14.04 virtual machines …
Java 8 in a Nutshell
Oracle has officially released JDK 8, featuring long-awaited language features like lambdas and a new Date-Time API. This post gives a brief overview of the new functional programming features in Java …
NuPIC Setup in Ubuntu
NuPIC (Numenta Platform for Intelligent Computing) is a biologically inspired library for machine learning in the loose sense of the term. It is an implementation of the HTM (Hierarchical Temporal Memory) model which mimics the structure and organisation of the neocortex. In this post I’ll overview a setup procedure for Ubuntu (tested with version 14.04) …
2013
Monads in 15 minutes
This tutorial explains the intuition behind Monads and demonstrates them with a few simple and short python examples. Its goal is to explain Monads simply in less than 15 minutes and thus it refrains from making insightful philosophical and theoretical reflections …
Octave GUI in Ubuntu 13.x - First Impressions
GNU Octave is a powerful open source alternative to Matlab. The latest version 3.7 of Octave introduces a new GUI front-end with an integrated debugger. Octave 3.7 has not been officially released, but you can download the code, build and test it locally …