GeistHaus
log in · sign up

September 2022 Monthly Update

clojuriststogether.org

Read updates about Maria.cloud, Tablecloth and the final updates from our Q3 2021 long term projects with Bozhidar Batsov, Michiel Borkent, Dragan Djuric, Thomas Heller, and Nikita Prokopov.

77 pages link to this URL
Union Types with Clojure.Spec

Elm and other statically typed languages have a great feature called Union Types (also called Sum Types or Algebraic Data Types). Here’s an example taken from Elm. Suppose your...

Advice to My Younger Self

When I was 16 I was visited by a man who said he had come from the future. He had traveled twenty years back to 1999 to sit down with me and have a chat. We talked for an hour...

Advent 2019 part 7, Do that doto

This post is part of Advent of Parens 2019 , my attempt to publish one blog post a day during the 24 days of the advent. doto is a bit of an oddball in the Clojure repertoire,...

re-frame Subscriptions Got Even Better

Up until recently, to use re-frame subscriptions in Reagent views, you had to use a form-2 component. A form-2 component is a function that returns another function, which does...

D3 and ClojureScript

This is a guest post by Joanne Cheng ( twitter ), a freelance software engineer and visualization consultant based in Denver, Colorado. She has taught workshops and spoken at...

Advent 2019 part 6, A small idiom

This post is part of Advent of Parens 2019 , my attempt to publish one blog post a day during the 24 days of the advent. As an avid tea drinker I’ve been poring (pouring?) over...

Reloading Woes

Update: seems Stuart Sierra’s blog post has dropped off the internet. I’ve updated the link to refer to the Wayback Machine’s version instead. Setting the Stage When doing...

Advent 2019 part 15, jcmd and jstack

This post is part of Advent of Parens 2019 , my attempt to publish one blog post a day during the 24 days of the advent. Two shell commands anyone using JVM languages should be...

Test Wars: A New Hope

Yesterday was the first day for me on a new job, thanks to Clojurists Together I will be able to dedicate the coming three months to improving Kaocha , a next generation test...

The beginner's way

By Ariel Alexi An OOP developer finding her way in the functional world, what could go wrong? So why Clojure? This was my main question to every Clojure developer that I have...

Advent 2019 part 24, The Last Post

This post is part of Advent of Parens 2019 , my attempt to publish one blog post a day during the 24 days of the advent. Day 24, I made it! I did skip a day because I was sick...

A Tale of Three Clojures

By Alys Brooks Recently, I was helping a coworker debug an issue with loading a Clojure dependency from a Git repository. (If you don’t know you can do this; it’s very handy....

The Classpath is a Lie

by Arne Brasseur A key concept when working with Clojure is “the classpath”, a concept which we inherit from Clojure’s host language Java. It’s a sequence of paths that Clojure...

On Extensibility

by Laurence Chen For a long time, I had a misunderstanding about Clojure: I always thought that the extensibility Clojure provides was just about macros. Not only that, but many...

Beyond the If Pattern

by Laurence Chen In my work at Gaiwan , there was a piece of code with poor quality that always felt like a thorn in my side. For a long time, I couldn’t come up with a better...

Unboxing the JDK

By Alys Brooks It’s easy to forget the Java Development Kit is, in fact, a kit. Many Clojure developers, myself included, rarely work with commands like java directly, instead...

The Admin Process

by Laurence Chen My friend Karen joined an online community of product managers and took on the task of managing a mentor-mentee matchmaking system. She has years of experience...

A Conjure Piglet Client

by Laurence Chen “Laurence, are you interested in Piglet? Do you want to help develop Piglet?” Arne asked me. Piglet is the new language he recently released, of course, another...

Making Lambda Island Free

Six years after launching Lambda Island we’ve decided to flip the switch and make all content free. That’s right, all premium video content is now free for anyone to enjoy. Go...

The REPL is Not Enough

By Alys Brooks The usual pitch for Clojure typically has a couple ingredients, and a key one is the REPL. Unfortunately, it’s not always clear on what ‘REPL’ means. Sometimes...

The Hidden Lessons in a re-frame App

by Laurence Chen I took over a web application whose frontend was built with re-frame, and not long after I started working on it, I felt a bit of discomfort. So, I decided to...

The Obstacles of Effective Debugging

by Laurence Chen Have you ever had one of the following experiences before? Your job is in customer service, and your company’s client reported that they encountered certain...

On Inspectability

by Laurence Chen At the beginning of 2025, I took over a client project at Gaiwan . It was a legacy code maintenance project that used re-frame. While familiarizing myself with...

Well Behaved Command Line Tools

Yesterday Vlaaad wrote a pretty cool blog post titled Alternative to tools.cli in 10 lines of code . It’s a great read and a very cool hack. It uses read-string to parse command...

What Is Behind Clojure Error Messages?

by Ariel Alexi and Arne Brasseur Have you ever looked at your REPL and asked yourself “What am I supposed to understand from this?”. This is not just a junior thought, but one...

Advent 2019 part 4, A useful idiom

This post is part of Advent of Parens 2019 , my attempt to publish one blog post a day during the 24 days of the advent. Here’s a little Clojure idiom that never fails to bring...

On Cognitive Alignment

by Laurence Chen There was once a time when a client asked me to add a rate limit to an HTTP API. I quickly identified three similar options, all of which could apply rate...

Union Types with Clojure.Spec

Elm and other statically typed languages have a great feature called Union Types (also called Sum Types or Algebraic Data Types). Here’s an example taken from Elm. Suppose your...

Announcing lambdaisland/uri 1.0.0

I just released lambdaisland/uri , a pure Clojure/ClojureScript URI library. It is available on Github and Clojars . This is a small piece of the code base that powers...

re-frame Subscriptions Got Even Better

Up until recently, to use re-frame subscriptions in Reagent views, you had to use a form-2 component. A form-2 component is a function that returns another function, which does...

Clojure Gotchas: Surrogate Pairs

tl;dr: both Java and JavaScript have trouble dealing with unicode characters from Supplementary Planes , like emoji 😱💣. Today I started working on the next feature of...

Reloading Woes

Update: seems Stuart Sierra’s blog post has dropped off the internet. I’ve updated the link to refer to the Wayback Machine’s version instead. Setting the Stage When doing...

ClojureScript logging with goog.log

This post explores goog.log , and builds an idiomatic ClojureScript wrapper , with support for cljs-devtools, cross-platform logging (by being API-compatible with Pedestal Log),...

Coffee Grinders, part 2

Back in December I wrote about a coding pattern that I’ve been using more and more often in my work, which I dubbed “ Coffee Grinders ”. My thoughts around this were still...

Lambda Island is Changing

Last month marked the five year anniversary of Lambda Island. Five years since I quit my job, built a video platform, and figured out how to put together tutorial videos. It’s...

Fork This Conference

Last weekend Heart of Clojure took place in Leuven, Belgium. As one of the core organizers it was extremely gratifying to see this event come to life. We started with a vision...