Functional Programming

So I was just reading about Functinal programming and this is a summary of what I understand about it as of today.. (might change in the future; to err after all, is human.) Benefits The “environment” you’re programming against are the function arguments Reuse is imminent. Composition is what everyone calls it. Functions’ results can be cached (memoization) There must be many more benefits.. These three are the ones I can think of and the ones that get the most marks from my side. ...

January 23, 2019 · 2 min · 321 words

new year

This is a post for me to set up a new year’s wishlist and track it. Learn Clojure: I want to learn some FP this year Improve Rust: work on some internal/external tools at work TSN: important in industrial applications Yocto: Finally master this crap ClearLinux: What I want to be working on Firecracker: Get this thing running on my hardware Non Technical Goals ...

January 7, 2019 · 1 min · 94 words

SWPC Trip Report

My company has frequent internal “Software Professionals Conferences (SWPC)”. I was honored to be a part of the conference yesterday in Munich where I presented a lightning talk and did a demo. Lightning Talk I did a lightning talk around Event Driven Microservices. Event driven architectures are becoming fairly common these days and IoT is a natural and easily understandable use-case. I presented the architecture we developed but without going into too much detail. ...

November 30, 2018 · 2 min · 319 words

Event Driven

I spent all day today fiddling around with PowerPoint. I am doing a presentation soon(ish) around “Event Driven Microservices” (a lightning talk) which is made hard because of the time limit. The goal is to introduce events and derivatives of events. Why events are the source of truth for all software. Below I dump my thoughts so I can come back to them later. Final Example (11-11-2018) Today, discussing with a friend, I think I came up with the case-study I’m gonna go with. ...

November 9, 2018 · 1 min · 210 words

Kubernetes Pod Networks and Plugins

Pod Networks It is natural that to get your first k8s cluster running you’d want to remove the taint from the master node and use it as the cluster (i.e. a single-node cluster). The first thing that a person would do is not set the kubelet network plugin (–network-plugin=cni). It’s certainly what I did wrong. The problem is you don’t see the problem until later because the orchestrator will use docker’s default networking which would quickly fail in a more-than-one node cluster. So, it’s best practice to immediately apply a pod network!! ...

October 22, 2018 · 1 min · 168 words

runc and Friends

Had to dig a bit into Kubernetes’ friends recently. Here’s a TL;DR of what’s missing from the internet today: runc is the CLI tool for running containers (create/run/delete/manage) docker uses runc as its runtime. Kubernetes uses runc as its runtime through cri-o (those “unsupported Docker version detected” errors you’ve probably seen.. yeah!) There’s no guarantee that runc will remain cri-o compatible. cri-o is an interface for container runtimes. Any compatible runtime can be used. runc is one of those others being rkt (never tested it), Kata containers and I guess many more. containerd - runtime manager created by docker and later contributed to CNCF. It’s the daemon that’s running in the background doing your bidding that you pass through runc.

October 20, 2018 · 1 min · 120 words

Coding interviews

Had to take a coding challenge recently. It is a strange experience for any developer. Got me thinking about interviews that require doing a coding challenge at any stage of the application experience. Here are my views on coding interviews.. Coding interviews are supposed to test the programming abilities of the testee. Although coding interviews ideally test the ability of the test taker to program, they are far from perfect. ...

October 13, 2018 · 2 min · 331 words

Error Handling

I started learning Rust almost about two months ago. Even though initially, it’s really frustrating, getting code to compile usually means that you’ve agreed explicitly with the compiler on what errors would look like. This is actually awesome. My usual error checking function while writing Golang looks something like: func check(err error) { if err != nil { panic(err) } } (read this rant for an idea of Go’s error management) This is what I have cluttered around my code and until now, I have been a big fan of Golang’s error propagation. Rust just does it better with it’s ? propagation operator! ...

October 3, 2018 · 1 min · 174 words

Build, Test and Deploy are Developer Concerns

All too often our repos here do not (actually, none) contain the definition of what code compilation and build look like. They exist in separate scripts hosted somewhere on the “Integration Team”’s servers and are very inflexible! Travis CI and services like it, have shown us that the steps to build/test/deploy code should also exist in the code repo. I’m gonna try to find some time to explore the possibility of having a Travis CI style service for in-house repositories. I want to mandate the existance of a Dockerfile in every repository so we can at least tell Jenkins to go do a docker build . in every repo in the list. But this is only temporary. The long-term goal is to definitely be able to hook into Jenkins CI from the Github web interface (like Travis CI in the open source world.)

October 1, 2018 · 1 min · 143 words

Right after I joined this new job..

Do I scrum-master (is that a verb?) automagically agile? Many people talk about cross-functional teams, developers getting hit by buses (poor us!) and CI/CD. I am not one to disagree here but I think these other tools are important as well as using the tools available to best effect. Git I am having to use Gerrit with a Gitweb frontend all maintained by a local team on servers somewhere upstairs. You want a new repo? Please write an email to this guy.. Private repository? No. ...

October 1, 2018 · 3 min · 521 words