The problem with public health care is not only underfunding, poor oversight, or the absence of yet another audit. The problem is a model in which society pays, doctors and facilities increasingly operate as market actors, and the patient is left in the role of a petitioner who can, at most, file a complaint. Before we point to the guilty, however, it is worth seeing something less theatrical:…
Does AI have consciousness? The question opens a path to something more consequential – to the nature of consciousness itself, the cultural consequences of cheap intelligence, and to what actually becomes expensive when thinking becomes a service.
Money is one of those areas where small omissions can generate technical debt faster than almost any other slice of an application domain. Not because “finance is hard,” but because average code likes to pretend it’s simple. Bankster is an attempt to do this thing properly.
Starting today, podcasts distributed under the random:stream section have a new home. This short tale — with some technical details and a surprise ending — explains why and how.
Last night I received an e-mail in which one of my visitors asked me a few questions after reading the post about parsing phone numbers in Clojure. The question was seemingly simple and concerned a technical detail of software construction, but in reality the reader touched on a very important subject that I had been pondering years ago, and I decided to summarise it here.
Every couple of years, there’s an increase in devices that enable individuals to measure the bioelectrical activity of their brains at home. These devices exploit the occurrence of fluctuating brain wave frequencies, which vary according to the user’s psychophysical state. Driven by a pandemic-induced fondness for my residence, I decided to purchase one of these gadgets. After several weeks, I…
Bindings allow us to identify in-memory objects used in our programs (to give them stable identities), while namespaces make it possible to manage visibility and encapsulate fragments of source code. In this installment, we will learn how to understand these mechanisms in Clojure and how to use them.
Data types allow us to classify values according to various characteristics and to establish relations between the resulting classes. This helps the programmer define operations performed on data of different kinds, and it helps language mechanisms manage memory and detect certain kinds of errors. In Clojure, we deal with several interrelated type systems that we can extend, and by leveraging…
Data structures, alongside algorithms expressed as operations, are a fundamental component of every computer program. When building applications, we choose structures that will be best suited for processing data within our adopted model.
The specific syntax of Lisp dialects allows one to precisely define and distinguish basic constructs, add new syntactic elements, and even transform program code while it is running. This stems from the use of simple yet well-thought-out ways of organizing and representing source code.
Clojure, like every Lisp dialect, comes equipped with an interactive console that lets us experiment and test our knowledge in real time. Before we move on to the theoretical foundations of the language, let us get some hands-on contact with its mechanisms.
Clojure is a general-purpose functional programming language based on the Lisp-1 model. Its reference implementation runs on the JVM, but there are also editions that work in other environments – for example, the popular ClojureScript, which compiles to JavaScript. Clojure is a Lisp created with concurrent processing and the Java ecosystem in mind.
At the turn of September and October 2014 the world learned of a security vulnerability that had been lurking for years in the GNU Bourne Again Shell (a.k.a. Bash). Most IT-security outlets had already covered the topic and published appropriate remediation methods, yet what caught my attention was the educational aspect of the flaw – in that regard it is a “good bug”, that is, one that can be…
When typing a website name into the browser’s address bar, mistakes sometimes happen. Instead of visiting the right site, we end up on a so-called domain parking page, or in a completely different service. There are also less safe situations—sites deceptively similar to the originals, used to siphon data or infect a computer with malware. Let’s imagine that a similar situation could occur even…
Attacks that rely on setting up fake update servers are not as difficult to carry out as one might think. The main reasons are administrators’ carelessness and the absence of robust version-publishing processes, although occasionally we see astonishing attack vectors that are hard to anticipate.