Chrome dev tools deep dive : Elements


1. Search CTRL + F allows you to search for strings in the DOM but you can also search using CSS selectors and XPath expressions. 2. Color picker Ever wanted to figure out what colours exist on a web page? Or prefer some other colour format? Here comes the color picker: Shift click on the color … Continue reading Chrome dev tools deep dive : Elements

Quick estimation tips for engineers


Engineers need to estimate system performance and simulate real-life scenarios. For most engineering fields, there are rich banks of proven theories and mathematical relations to rely upon. Unfortunately, software engineering - the new kid on the block - has a few rigorous rules, most times we rely on heuristics and handed-down wisdom.

Tips for printing from web applications


How to get consistent print output across a range of browsers and their never-ending stream of subtle nuances.

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.

What is Semantic Versioning (SemVer)?


Software Versioning Software versioning has always been a problem for software developers, release managers and consumers since time immemorial. For developers, the challenge lies in releasing new breaking changes while simultaneously minimizing consumer upgrade pains. On the flip side; consumers, when they finally decide to upgrade to new-shiny-release-10000, want to be sure they are not buying a one-way-ticket … Continue reading What is Semantic Versioning (SemVer)?

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

The Effective Programmer – 3 tips to maximize impact


Effectiveness, (noun) : the degree to which something is successful in producing a desired result; success.

World Class Nigerian Software Engineering: Are we there yet?


Jason of Iroko recently announced mouth-watering offers for developers and this triggered a long discussion about software engineer pay in Nigeria. The discussions on techCabal's radar got me thinking about software development in Nigeria, do we have enough world-class talent or could we be better?

Code is Poetry : 5 steps to bulletproof code


Programmers have to love their craft and put their best into making it stand out.

How to watch variables in JavaScript


We all have to track variables;while debugging; generally the easier it is to monitor changes, the faster bugs can be detected and fixed. Web developer tools expose various methods for tracking changes in variable values. There are a couple of drawbacks e.g. non-uniform support across platforms) but again, half-bread is better than none :).

SICP Review: Sections 3.1 & 3.2


The deeper I go into 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 angle. Enjoy... 1. Perception and Design Our perceptions of the real world influence … Continue reading SICP Review: Sections 3.1 & 3.2

JS and Scheme, the similarities


The resemblance between JS and Scheme is not surprising considering that Scheme was one of the major influences for the JS language.

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 among the most challenging; 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 development by creating … Continue reading SICP Section 2.5

How to write a Promise/A+ compatible library


I decided to write Adehun after the series of promise posts. Adehun means 'Promise' in Yoruba, the language of my West African tribe. After a lot of rewrites, I can say Alhamdulillaah,  Adehun passes all the compliance tests of the promise/tests repo.

SICP Sections 2.3 & 2.4: Thoughts and Ideas


1. Top-Down Design Most of the problems in the SICP book are solved in a top-down way with lower level details deferred until needed. The focus on high-level details makes for expressive, flexible code since implementation is based on well-defined interfaces and not implementations. Consequently, swapping and improving interfaces is a cinch - the dependency on high-level interfaces shields … Continue reading SICP Sections 2.3 & 2.4: Thoughts and Ideas

Manipulating lists with JavaScript Array methods


Lists of all sorts (e.g. grocery, to-do, grades etc) are a normal facet of our daily lives. Their ubiquitousness extends to software engineering as many programming tasks require manipulating lists. This post exposes new ways of doing popular list manipulation tasks in JavaScript and a little more too.

7 Cool tricks with Chrome DevTools


1. $_ $_ re-evaluates the last expression and is similar to the '_' command in python's REPL. However _ prints the last 'non-None' value while $_ prints the value of the last evaluated expression even if it is undefined. 2. $() and $$() selectors $() selects the first matching DOM element while $$() selects all matching DOM elements. Quite useful if jQuery is missing. … Continue reading 7 Cool tricks with Chrome DevTools

SICP Section 2.2: New ideas and thoughts about programming


5 things to learn from the SICP book

The Differences between jQuery Deferreds and the Promises/A+ spec


jQuery Deferreds are not promise/A+ compliant, read on to learn more and understand the differences between jQuery deferred and the promises A spec.

SICP Section 2.1 : Thoughts


Alhamdulillah, I wrapped up this section a few days ago. Thirteen of the solutions are here (if you are curious enough); the other three need proofs, and I wasn't in the mood for too much interval arithmetic. So, what did I learn? 1. More Scheme This chapter introduced the concepts of cons, car, and cdr for … Continue reading SICP Section 2.1 : Thoughts

3 Ways to start using promises


Continuing from the previous post; lets dive into ways of using promises. First, some helper functions: 1. Pseudo-Observers This involves attaching several handlers to a single promise; all attached handlers are invoked once the promise resolves. I call this the 'pseudo-observer' pattern because each 'observer' gets invoked once (remember promises never leave their resolution state). This explains why promises can't … Continue reading 3 Ways to start using promises

Introduction to JavaScript Promises


A promise is a value that might not exist because the action needed to produce that value has not been carried out. Thus, after the expected action has run, the promise will have a value indicating the success or failure of the action.

SICP Section 1.3 : Thoughts and Concepts


This section exposed me to the full power and beauty of functional programming. The expressiveness of using functions as values is awesome. For example, a sum of cubes function can use a sum function, which itself relies on a reduce function. Think of higher-order differentiation in mathematics, and you do get the idea. An interesting concept involves using lambda … Continue reading SICP Section 1.3 : Thoughts and Concepts