One of my favorite technical projects involved overcoming a network constraint. The virtual machines (VMs) hosting the core services kept exhausting available ports. Once all ports were used up, new connections would fail, tanking our availability and reliability. Read on to learn how we overcame this issue and opened up opportunities to reduce costs by a third.
Category: Learning
Book Review: A Philosophy of Software Design
The book’s core thesis is minimizing complexity in software development by adopting complexity-eliminating approaches. The upfront investment in learning and adopting better designs pays off because it leads to high-quality software. Recommended read for software developers and line managers.
Check Endianness with JavaScript
How to check for endianness using JavaScript
Lessons learnt from 8+ years of constant learning
Tips for making learning a habit and maximizing knowledge acquisition
Lessons learned from running services at scale: 1
Tips for running services at scale with minimal toil
Guaranteeing software behaviour
My foremost goal while building software is to build stable self-healing systems with deterministic behaviour. I want to ensure my code continues to work even when unexpected events occur. In the event of unknown unknowns, the expectation is a graceful degradation in the worst case.
5 things I learnt from solving 100+ hackerrank algorithms
Sometime last year I started to solve hackerrank problems at my pace and here is my progress after about 108 days ago.
The Exclusive OR (XOR) Explained
I recently ran into a code puzzle; the question asked for the finding the unique element in a list of integers given that every integer appears twice except the single special element.
Reading is not enough
I used to read a lot in the past without practicing what I learnt; that exposed me to a variety of ideas and empowered me to discuss a lot of things. Over time, I found out that I mostly didn't 'know' what I thought I knew. Yeah I know it sounds somehow but it's really true. True understanding … Continue reading Reading is not enough
Why you should not use isNaN in JavaScript
Nan literally means Not a Number. Yes, it means that value is not a number and occurs when you try to coerce a non-mathematical value (e.g. string) into a number.
Why computer science matters for software developers
I used to think computer science never mattered because I rarely used algorithms and never saw the value of algorithm-based interviews (I still don't ;) ). The few folks I asked also concurred so I felt I was right.
What every programmer should know about types I
the mathematical concept of sets in number theory. The set of integers can be seen as a type - only values such as 1, 2, 3 are integers; decimals (e.g. 1.1) or irrational numbers (e.g. π) aren't members of the integer set.
Why JavaScript has two zeros: -0 and +0
Do you know there are two valid zero representations in JavaScript?
Understanding JavaScript Property Descriptors 2
Continuing with the dive into property descriptors, this post goes deeply into the properties, what they mean and how they can be used.
Book Review:Build your own AngularJS
As part of my continuous learning; I started reading Tero Parviainen's 'Build your own AngularJS' about 6 months ago. After 6 months and 127 commits, I am grateful I completed the book.
A simple explanation of 1s complement arithmetic
A simple explanation of 1s complement arithmetic - a basis for how computers run.
Understanding Bit masks
Bit masks enable the simultaneous storage and retrieval of multiple values using one variable. This is done by using flags with special properties (numbers that are the powers of 2). It becomes trivial to symbolize membership by checking if the bit at a position is 1 or 0.
Influential Books for programmers
I try to read a lot of books. Over the years, my 'taste' for books has been refined and some of my criteria are listed below.
Learning ES2015 : let, const and var
Lions at the zoo Zoos allow for safely viewing dangerous wild animals like lions. Lions are caged in their enclosures and can't escape its boundaries (if they did, it'd be chaos eh?). Handlers, however, can get into cages and interact with them. Like cages, you can think of variable scoping rules as establishing the boundaries and walls in … Continue reading Learning ES2015 : let, const and var
Understanding and using Streams in JavaScript
Let's take a scenario from Mathematics, how would you model the infinite set of natural numbers? A list? An Array? Or a Stream? Even with infinite storage and time, lists and arrays do not work well enough for this scenario. Why? Assuming the largest possible integer an array can hold is x, then you've obviously missed out onx + 1. Lists, although not constrained by initialization, need to have every value defined before insertion.
Why JavaScript ‘seems’ to get addition wrong
This post was actually motivated by Gary Bernhardt's very popular WAT talk. It aims to provide a deeper understanding of how JavaScript evaluates expressions and operations on primitives and object types.
How to implement the Y-combinator in JavaScript
This post provides a very simple step-by-step implementation of the Y-combinator in JavaScript. You should be able to implement the Y-combinator in your language of choice after reading this post; as you'll see - it's that easy.
SICP Section 3.3 – 3.5 : Found a bug in memq
1. Is memq broken? memq is an in-built list search function; it finds the first occurrence of a key in a list and returns a new list starting from that key. Now that you know what memq does, lets look at some weird behaviour Building on that foundation leads to the following conundrum memq tests whether the key exists in the … Continue reading SICP Section 3.3 – 3.5 : Found a bug in memq
SICP Review: Sections 3.1 & 3.2
Here are my thoughts on Sections 3.1 and 3.2 of my SICP journey; the deeper I go in the book, the more I appreciate the effort, style and work the authors put into it. Each section builds on earlier sections and it is amazing how it forces you to see software development from a new … Continue reading SICP Review: Sections 3.1 & 3.2
SICP Section 2.5
So four months after I started and more than 90 solved exercises, I can say Alhamdulillaah chapter 2 is done! Section 2.5 was one of the most challenging so far; the exercises revolved around building large easily extensible software systems. And here are the thoughts again :) 1. Coercion The section revealed the importance of coercion in software … Continue reading SICP Section 2.5