Janet A. Carr
banner
janetacarr.com
Janet A. Carr
@janetacarr.com
Independent Clojure Consultant. Aspiring Blonde Bombshell.

Posts about Software Dev, Clojure, & Functional Programming

Twitch: twitch.tv/janetacarr
Course: clojureforpros.com
Clojure blog: blog.janetacarr.com
Freelance Blog: fixedrate.dev
Wow this is cool.

I just learned this “live” thingy is in beta for certain twitch streamers.
June 10, 2025 at 8:59 PM
It's always so remarkable to me how simple a tree traversal algorithm can be in Clojure

This is 10 lines of code (sans docstring of course).
March 1, 2025 at 3:38 PM
🤨
February 22, 2025 at 3:31 PM
Oh wow it’s been a while since I posted on my blog but Google clearly views my website as an authority on Clojure

This photo is from my blog 🥹
November 17, 2024 at 2:20 PM
Man do I ever hate owning a MacBook right now

Send help
November 16, 2024 at 1:44 PM
Oh you’re a staff engineer?

Name all the services then.
November 15, 2024 at 1:46 AM
This is a great opportunity to point out, again, that a container is just an isolated user space

I’m not a lawyer, but Even if this didn’t contain only OSS, Mac users should be able to build and then run this docker file. (Downloading an image might be different though)
November 12, 2024 at 3:12 AM
New "Source-Available" license just dropped:

I call it the MITease license
November 9, 2024 at 4:09 PM
Friction and generalization I bet

CIDER Debugger for Clojure is far easier to use than GNU Debugger to debug a binary. Struggling with GDB might lead someone to shy away from debuggers.

Plus, Taking time to use a debugger when printing works well enough.

Clearly, I'm team debugger tho
November 9, 2024 at 3:36 PM
Sometimes I like to go back to old code & reminisce

`with-setters`

Description
A macro I wrote that adds setters to mutable fields in Clojure type definitions (for my game dev stuff)

When to use it
When you want to piss off every future Clojure developer to touch your code 👇
November 5, 2024 at 5:48 PM
Was just reminded of the Null Object pattern and how it relates to Clojure's nil

Fun fact, nil is both a value and a type, meaning you can extend nil with protocols in Clojure 👇

(and no, it's not lost on me you can just assert or branch on nil for this example😅)
September 22, 2024 at 10:29 PM
Ya girl is about to be "programmer famous" lol
October 9, 2023 at 5:28 PM
Only three(ish) reasons to use #Clojure macros

- Need to stop evaluation
- Clj doesn't support use case
- Maybe Reduce code duplication (big maybe).

Here's a few examples of Effective Macro use in Clojure 👇
September 29, 2023 at 9:34 PM
More mindset shifts I had for pure functional programming (FP):

-Using recursion instead loops
-Modelling a state machine without "state"

In FP you can model a state machine by using recursion, lexical bindings, higher-order functions

#Clojure example, but could be haskell 👇
September 28, 2023 at 2:13 PM
Just a sneak peek at some of the script's code I'm using to teach functional programming in #Clojure for Pros 😉

(this is not the actual script, just bits and pieces)
September 21, 2023 at 6:09 PM
Wow, I (oddly) had no idea you could do this in #Clojure

Clojure's pretty print (pprint) has different formatters you can dispatch on for printing and vars for altering out

This probably would have made some of my REPL-driven dev a lot easier😅
September 20, 2023 at 10:57 PM
Unsurprisingly, Higher-order functions form the foundation of functional programming

If a programming language supports callbacks/closures/HOF, you can recreate things like reducers

Check out this example in #Go👇
September 20, 2023 at 10:56 PM
As a matter of fact, I null.
June 19, 2023 at 2:46 PM
When to use try/catch vs types (truthyness or :error keywords) in #Clojure

Chances are, in a pure functional code path, you can use truthyness to indicate when something went wrong (wrong value, empty input)

If you're doing side-effects or Java interop, best you use try/catch
June 4, 2023 at 5:52 PM
It’s out there now.

I had the pleasure of writing the foreword for @unclebobmartin‘s upcoming book Functional Design! :)
June 2, 2023 at 5:00 PM