Podcast for developers, testers, SREs... and their managers. I explain complex and convoluted technologies in a clear way, avoiding buzzwords and hype. Never longer than 4 minutes and 16 seconds. Because software development does not require hours of lectures, dev advocates' slide decks and hand wav… read more
SQLite is by far the most common SQL database ever deployed. Are you lsitening to this on iPhone or Android device? It runs SQLite. Or maybe through a web browser? Chrome, Safari, Firefox, Opera and Android Browser all …
Scala is a programming language running on the Java Virtual Machine. It’s statically typed, and you can use it both as functional and object-oriented language. Even at the same time. The functional side of Scala …
K-means clustering is an algorithm for partitioning data into multiple, non-overlapping buckets. For example, if you have a bunch of points in …
Clojure is a dynamically, strongly typed programming language. It’s a dialect of Lisp running on the Java Virtual Machine. Lisp is 6 decades old and …
There are two main ways to communicate between components in your distributed system: synchronous and asynchronous. Synchronous communication is like making a phone call. The system on the other side must be present and …
After many dramatic events around Twitter lately, many people, including myself, began experimenting with Mastodon. Superficially it’s an open-source clone of the former that anyone can deploy and host. However, once …
RabbitMQ is a message broker, allowing asynchronous communication in distrubuted systems. The key advantages of RabbitMQ include: 15 years of open source history, battle proven Erlang implementation and support …
Many people, when asked about SLA, simply shout 99%. The correct answer to that question is probably a long, boring PDF, written by lawyers. Yes, SLA is a legal obligation. Not a metric or a number. You probably meant …
An artificial neural network is a computer algorithm somewhat inspired by our brains. Superficially, our brain is a network of neurons connected with …
A genetic algorithm is a heuristic approach to solving complex computational problems. This includes various optimizations, especially around …
Non-fungible tokens, NFTs for short, are financial instruments implemented on top of the blockchain. They can be bought and sold, just like …
We all know this feeling. You search for a hotel in Paris and you keep getting ads for hotels and flights for weeks to come. Or something even scarier. You visit a blog post highlighting the first symptoms of …
MongoDB is a NoSQL database. Precisey speaking, it’s a document-oriented database. It stores arbitrarily complex key-value objects. For example, in a single Car object you can store as much information as you want. Not …
Quarkus is supersonic, subatomic Java. What does that mean? It means it’s Java, but really, really small. And really, really fast. Quarkus is a runtime framework which gives you access to programming models you’re …
Ethereum is a network of computers with no central trusted authority. They achieve consensus by running computation-intensive algorithm, known as proof-of-work. The agreed state is added to an append only ledger, known …
QUIC can be thought of as the third fundamental protocol of the Internet. Next to UDP and TCP/IP. Let’s talk a little bit about these two. They both …
Stuxnet was probably one of the most sophisticated pieces of software ever built. I can easily imagine a Hollywood movie about it. A computer program …
Denial-of-service attack tries to take down a server by sending specially-crafted requests. The simplest form of this attack is just sending a lot of requests in a short period of time. But more sophisticated methods …
In part 2 of the Twelve-Factor App, we’ll explore the second half of the principles. Be sure to listen to the previous episode as well. We still have only four minutes, so let’s go!
Read more: https://nurkiewicz.com/76
…
Twelve-Factor App is a set of design guidelines defined by Heroku. These guidelines are best suited for cloud-native, portable and resilient services. In this episode, I’ll explain the first seven principles. I have …
SOAP, formerly known as Simple Object Access Protocol, is a messaging standard. SOAP is very broad and general. Technically, it can …
Neo4j is a NoSQL database engine. What makes it different is the unusual data model. In Neo4j everything is modelled as a graph. A graph is a …
React.js is a JavaScript library for building dynamic user interfaces. React applications are built on top of reusable components. Components …
Erlang is a programming language designed for highly scalable, fault-tolerant systems. Its primary use case used to be telecommunication. But these …
Hello everyone! My name is Martin Kleppmann. I’m a researcher at the University of Cambridge. And I would like to tell you briefly about …
DevOps is a movement to bridge the gap between developers and operations teams. Traditionally, these two groups were separate and rarely interacted with each other. Developers didn’t quite understand how software is …
Transactions in SQL databases are rock-solid. By reading and modifying data within a transaction we limit the risk of data corruption. Actually, …
Version control systems, like git, serve two purposes. First of all, they allow collaborating on the same code by multiple developers. Collaboration …
DRY, or don’t repeat yourself is a common principle in pSpring AOP riddlerogramming. That’s why we invented functions and objects. But some sources of duplication are really hard to get rid of. Well, sometimes it’s even …
Remember the days when deploying a new version of your application required downtime? If your application is particularly important, you might have …
TypeScript is a programming language, a superset of JavaScript. This means any valid JavaScript program is also valid TypeScript. But not vice-versa! TypeScript adds a ton of features, addressing the shortcomings of …
You can’t look at your application all the time. Instead, it should leave some sort of persistent trace. Such an audit log can be examined later on. …
Object-relational mapping, ORM for short, simplifies access to relational databases. Such frameworks help with developing applications without writing SQL. SQL was supposed to be easy to use for non-programmers. That’s …
Spring framework is probably the most popular and most successful application framework for Java. Writing a server or a web application before Spring …
Haskell is a purely-functional programming language. It is also statically and strongly typed. Haskell takes these characteristics to the extreme. For example, doing any input/output is considered impure from a …
A compiler is an application that turns text into an executable program. It’s quite extraordinary how much work these complex pieces of software are doing. Pretty much every compiler works by executing several phases. …
Consumer-driven Contracts is an approach to testing integration between services. In a distributed system, many components talk to each other. …
Kotlin is a programming language that runs mainly on Java Virtual Machine. This means it’s fully interoperable with Java and even other JVM …
Test-driven development (TDD for short) means developing software by writing tests first. I hope you all write unit and integration tests. But do you write them before the actual production code? This approach to …
You might find this topic weird, but understanding percentages is crucial not only in banking. What does it mean when disk space decreased by 10 percent? How to scientificly measure relative system load? And how to …
Immutability means that when something was once created, it can’t be changed. This concept is tremendously important across our whole industry. …
CDN is a set of geographically distributed servers for fast content delivery. Without CDN all requests are routed to your own server, located somewhere in the world. For example, in San Francisco. If your visitor lives …
Today I’d like to explain how computers work. From the ground up, grossly simplifying. It all starts with an electric field. It’s a place where charged particles, like electrons, are attracted or repelled. The …
Cloud computing is a broad term. In general, it refers to using hardware and software managed by someone else. Typically with very flexible pricing: we only pay for what we use and for the time we use it. We don’t build …
Property-based testing is an approach to automatically test software against well-defined rules. We don’t specify desired output for a few inputs. …
Functional programming means programming using functions. See, I need much less than 256 seconds for that! Unfortunately, this definition is as …
Life used to be simple. In a traditional monolithic application, when a failure occurred, you could easily find the problem. When an exception …
Terraform is fairly low-level software for managing your infrastructure. For instance, it’s used to create and provision cloud instances, networks …
Kubernetes is a platform for managing various workloads inside containers. Before I jump into a definition, let’s describe the problems it tries to …
JavaScript language is primarily used inside your web browser. Your computer downloads a JavaScript file and executes it on your machine. But if …
REST is an architectural style of communication, based on HTTP. It was proposed in the year 2000 by Roy Fielding. In his dissertation he describes …
Disclaimer: this podcast is not about cryptocurrencies. I despise them. Instead, we’ll talk about asymmetric encryption. One of the most wonderful …
Imagine two independent systems communicating with each other. One producing data and the other consuming it. There must be some place where data is buffered. Just in case the producer generated some data but the …
Computers speak bits and bytes. Numbers in general. They don’t understand images, poems and JSON. When we say “hello”, it needs to be encoded to numbers. Conveniently, each character becomes one number. A number can …
When two processes run on the same machine, they are somewhat isolated. For example, they cannot read each other’s memory. However, they still share …
Domain name system (DNS for short) is one of the fundamental protocols of the Internet. In the Internet all communication is routed through IP …
Before we fully appreciate how important HTTP cookies are, let’s imagine the web without them. HTTP is inherently stateless. This means that the HTTP …
Fallacies of distributed computing are a set of myths we believe, when designing complex systems. And what is a distributed system? Well, if your application is split into hundreds of microservices, it’s distributed. Or …
Microservices are contrasted to a monolith. Single, large application that implement the whole system. Typically hard to understand, develop, test …
To understand what reactive programming is, let’s contrast it to imperative programming. Imperative programs can be read top-to-bottom, with occasional jumps. Jumps are if statements, loops and procedure calls. Program …
In relational databases, data is kept in relations, commonly known as tables. Simplifying, when data is normalized, it’s not duplicated. For example, when storing books and authors, you don’t keep an author’s name next …
OAuth 2.0 is a standardized authorization protocol. In this episode, I’ll explain just one use case of it: the authorization code flow. It allows …
Sometimes you need to split arbitrary objects into a fixed number of groups. For example, storing a record into one out of many database nodes. Or …
Redis is quite a versatile NoSQL, key-value database. Or in-memory cache. Or pub/sub broker. With transactions, stored procedures and fast replication. It’s quite universal. Anyway, the main use-case for Redis is …
Linear regression is one of the simplest machine learning algorithms. But also quite useful. It takes a bunch of existing, known observations and …
Clocks are important to computers. Computers need to order events in a way understandable to humans. Every computer has a bunch of internal counters, like CPU ticks. But they only work within one machine. We need a way …
Event sourcing is an alternative technique of storing business data. Rather than updating a single database record, every change is captured in an immutable, append-only log. We never overwrite existing data. Instead, …
Let’s try to cheat the blockchain. If my wallet has exactly one bitcoin, I can’t spend it twice. Once it’s written into an immutable blockchain, …
Blockchain is a technology used for storing data without a central database. Data is organized in an ever-growing list of blocks with each block …
According to some estimates, even half of the trading volume in the American stock exchange is generated by computers. Specifically, computer …
In the old days an application consisted of a monolithic backend and a database. Once they were deployed their location never changed. So the only …
Creating new objects, arrays or strings is so straightforward that we often forget what happens underneath. And I don’t mean trying to figure out what this refers to in JavaScript objects. I mean: memory management. On …
It's a common misconception that Moore's law is dead. That's because many believe it's about the speed of a CPU. But in reality Gordon Moore meant the number of transistors, not the clock frequency. And also, it's now …
HTTP is historically request-response-driven. This means a server is idle as long as no-one asks it to do something. Typically fetching data or accepting some form. In reality, we’d often like to receive data from the …
We tend to focus on testing happy paths and expected edge cases. But how do you make sure that your system can survive minor infrastructure and network failures, as well as application bugs? Especially in microservice …
GraalVM is a set of tools that aim to improve the performance and interoperability of Java Virtual Machine. Taking advantage of GraalVM not only …
Source code can then be executed in two ways. Language implementations in general either interpret or compile it. In order to run an interpreted program, you need one extra binary: an interpreter. Interpretation is …
[...] All of this complexity is somewhat hidden with BPM framework. First of all the process is first drawn. Using a special notation known as BPMN. This is actually quite natural. You use arrows to show how insurance …
Akka is a toolkit for building highly scalable, concurrent applications. It's written in Scala and based on the ideas from Erlang. Its approach to …
Imagine I wrote a script that takes your codebase and removes a random line. Fairly simple. Or maybe some more subtle change, like replacing plus with minus operator? Or switching `x` and `y` parameters with each other? …
When choosing or learning a new programming language, type system should be your first question. How strict is that language when types don't really …
Cassandra is an open-source NoSQL database. It's heavily optimized for writes, but also has intriguing read capabilities. Cassandra has near-linear scalability. In terms of CAP theorem it favours availability over …
Typically, more than one developer is working on the same codebase. How do they share their work? The simplest approach is a common Dropbox folder. …
MapReduce is a programming model for processing large amounts of data. It works best when you have a relatively simple program, but data is spread …
HTTP protocol is fundamental to the Internet. It's a simple request-response protocol where the request is initiated by the client, typically a web …
I find it quite fascinating how many failures in complex systems could be avoided if we simply... tried again. So how so you retry effectively, so …
Kafka is not a message broker. However, it can be used as such very effectively. Instead, I'd like to think about as a very peculiar database. A …
Speed of light is not as abstract to us, software engineers, as you might think. If you are deploying to the cloud or if you want to squeeze every …
Little's law is an astounding equation that's dead simple, yet it can bring an amazing insight into what your distributed system is capable of.
Read more: https://256.nurkiewicz.com/6
Newsletter: …
Read more: https://256.nurkiewicz.com/5
Newsletter: https://256.nurkiewicz.com/newsletter
More resources:
* asm.js: https://en.wikipedia.org/wiki/Asm.js
* WebAssembly: https://en.wikipedia.org/wiki/WebAssembly
* …
Read more: https://256.nurkiewicz.com/4
Newsletter: https://256.nurkiewicz.com/newsletter
4th edition of the newsletter, apart from transcript, contains GraphQL scalability tricks, enjoy!
More resources:
* AWS Lambda: …
Read more: https://256.nurkiewicz.com/3
Newsletter: https://256.nurkiewicz.com/newsletter
More resources:
Notable implementations of service mesh:
* https://istio.io/
* https://linkerd.io/
More details:
* What's a service mesh? And why do I need one? (https://buoyant.io/2017/04/25/whats-a-service-mesh-and-why-do-i-need-one/
Circuit breaker is a design pattern that prevents cascading failures in distributed systems. More details: https://microservices.io/patterns/reliability/circuit-breaker.html and …
I explain software development in no more than 4 minutes and 16 seconds.
Notifications of new episodes: https://256.nurkiewicz.com/newsletter
User voice: suggest topics: …
Connect with listeners
Podcasters use the RadioPublic listener relationship platform to build lasting connections with fans
Yes, let's begin connectingFind new listeners
Understand your audience
Engage your fanbase
Make money