Hacker Newsnew | past | comments | ask | show | jobs | submit | jacekschae's commentslogin

Hey HN — I'm Jacek. I've been teaching Clojure through video courses (Reagent, Re-frame, Reitit, Datomic, Pedestal) for a few years, hosted on Podia.

I finally got around to building my own platform. It's Clojure on the backend, self-hosted, and gave me the chance to drop prices significantly since there's no platform cut anymore.

The migration from Podia is complete — all user accounts, subscriptions, and purchases carried over. Existing subscribers had their prices automatically lowered.

Happy to talk about the stack, the migration process, or the courses themselves.


Congratulations!

I looked into Clojure a little bit, and my understanding is that it is a dynamically typed language and objects/values are formed on the fly via putting data into the a map (reminds me JS). And as someone having experience in both statically and dynamically typed languages - I definitely choose the first. My question is, how do you deal with this? Isn't dynamic typing getting on your way? How do you define contracts? How do you version schemas? Do you even have them? How do you know what to expect from the database? Or how don't you forget about mandatory fields in your objects?

Dynamic typing is scary. I had a production issue in NodeJS codebase manifesting only when two pods of the same service were fighting for updating the same resource in the cache. One pod gets lucky, updates the cache, and returns an array. Meanwhile, the same function, on the other pod, returns a map, because it failed to update the cache. And because both the function and calling side had no "contract" on what to return and what to expect, the runtime was happily converting my array into a map, and that was causing a huge problem downstream. Imagine how enjoyable was debugging this... Point is, this situation seems impossible in a statically typed language. I wonder how this issue could have been avoided in Clojure.

Thank you.

Edit: One-time code goes into spam folder on fastmail.com.


Could you tell more about the stack? And also, you clearly know your way around it, so would be curious to hear your thoughts about the language itself - what do you like about it?

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: