Posts

Build a Simple in Memory Cache With Typescript Decorators

published on
Hello everyone! Many years ago when I started programming, the first language I fell in love with was Python. With its simple yet powerful language features ranging from comprehensions to generators, the language enabled me to solve complex problems efficiently. In the past few years, my daily work started involving less coding with Python and more with TypeScript. Frankly, moving from a type-less system to a typed one made my life a whole lot easier, however, I started missing some of the great flavours that Python gave me out of the box. Read More...

3 Nifty Typescript Utility Types to Embrace

published on
Oftentimes I find myself struggling with Typescript code style and readability due to complicated types. In this article we are going to take a look at a couple of utility types provided natively by TypeScript that might help you too to clean up your type systems for a leaner and meaner codebase. 1. Using the Partial utility type TypeScript has a bunch of utility types that help you with cleaning up your code and making your shapes scale better. Read More...

Programming for Recruiters 4

published on
Network-level architecture We’ve gotten this far, congratulations. It’s time for us to talk about network level architectures, or how different groups of software communicate with each other. Whenever we are talking about communication, there is always a phrase that comes up in software that defines the nature of how code talks to other code. This concept is the concept of a protocol. What is a protocol Protocols are widely used in both software and non-software communication across the globe. Read More...

Programming for Recruiters 3

published on
In the previous part of the series, we were looking at machine-level architectures, Code-level architectures Alright, now that we are done with the machines (in reality, we are super-not-done with them, I just realized that I am way down the rabbit hole and need to focus on the main goal of the article), we can finally focus on what most software developers mean by software architecture. As we have seen in the overview, this is mostly about how people organize massive amounts of code so that new developers can understand the system faster. Read More...

Programming for Recruiters - Machine-Level Architecture

published on
Machine-level architecture As we’ve mentioned above, when we are talking about machine-level architectures, we are literally talking about physical systems that are interacting with each-other over wires using electricity. These electric impulses trigger simple computations on atomic items in software that we call bits. What the flip-flop is a bit? Good question! A bit is a basic building block in information theory (not my words). It can have 2 values: 0 and 1. Read More...

Programming for Recruiters - On Software Architecture

published on
I have quite a few friends and acquaintances who are working in recruiting or areas where they require some knowledge around software engineering but not too much. I’ve decided to start a series where we are going to explore some basic programming concepts targeting you, recruiters and sourcers, so you don’t get super confused when you are talking to your respective engineering manager when they start talking about monads and other insane crap. Read More...

Asynchronous Caching with Python

published on
We’ve already talked a little bit about the new features in Pyhton 3, specifically with the type hinting system. Another feature that got shipped with version 3.6.0 is the native language support for asynchronous computation. Today we are going to evaluate how we can do caching in this new asynchronous environment without introducing any blocking into our code. Simple asynchronous code Let’s consider the following implementation of the Fibonacci numbers, wrapped with a tiny execution and measuring script: Read More...

Sniffing the Architecture - Sentinel

published on
In the first edition of this series, we’ve looked at the ominous singleton pattern. The singleton pattern can be useful in some languages, like C++ or Java, however, it doesn’t make too much sense in other ones, like Python. Today we are going to take a look at a design pattern that is more common in multiple languanges, the sentinel. The definition The sentinel design pattern is used for cases when we would like to indicate missing data. Read More...

Python Typeguard Benchmarks

published on
I’ve recently started looking into Python types and how to do them efficiently. The Python typing module turns out to be a very powerful tool introduced in 2015 first to version 3.5.0. The basic idea behind the module was to provide tooling engineers with simple ways of helping developers to know if they are using their methods and classes in a proper way by default or not. def add(a: int, b: int) -> int: return a + b add(1, 2) # Just fine add('cat', 'dog') # expected type 'int' got 'str' instead This is awesome! Read More...

Sniffing the Architecture - Singleton

published on
In this series, we are looking at various code architecture patterns. In this one, we are going to take a peek at one of the favorite interview warm-up questions there is: what is a singleton? The definition Imagine a board game that is played by cards. There are ones that look the same and you need to collect multiple of them in order to get points. In addition to this, there’s a card that makes everyone pass on their cards to the player to the right. Read More...

UUID as a Random String

published on
Okay, to be more precise, the issue is when we are using UUID4. Recently, I’ve been playing around with distributed tracing and the packages and methodologies lying behind it. This is just a shot I took in Amsterdam One of the base ideas of distributed tracing is using a random identifier that can identify a request bouncing between different systems and collecting information that can be identified at the end. Read More...