Holy Dev Newsletter June 2023
Welcome to the Holy Dev newsletter, which brings you gems I found on the web, updates from my blog, and a few scattered thoughts. You can get the next one into your mailbox if you subscribe.
How is it July already? Where is all the time disappearing? This has been a surprising short month, despite its 30 days. On the bright side, I managed to finish my small Fulcro and Asami ERP. It is not fully productionalised, but it is finished functionality-wise and I am eager to start the rewrite to Datomic. Asami was a great learning experience, but the schemalesness of more a hindrance then a benefit in my case. But mostly I am running into limitations due to the fact that I use it for something else then it was designed for, which forced be e.g. to implement my own "cascading delete". Now that Datomic is free, and with people having good experience running it in the "dev", embedded mode in production over many years, it seems as a far better choice. Though only time will tell. I am even more excited about the next project, which is rewriting the app with Electric Clojure to get practical experience with this approach. Though mythical creatures know when / whether I will get to it.
A bonus clojure.core gem: thanks to Michiel Borkent, I have learned of
(force x): if
x is a Delay then it is
deref-ed, otherwise it is returned as-is. Thus I can simply
(force x) instead of
(if (delay? x) @x x). Nice!
I have previously mentioned that we started on a Fulcro Cookbook. The first recipe, Solving mutually recursive elements with lazy loading with hooks and dynamic components is mostly done text- and image-wise. I just need to align, clean up, and explain better the code. A lot of time went into the "plumbing," to ensure images are included and look well, and to make the example code executable. So check it out! I am not sure about future progress, as Tony is extremely busy. He left me with some code I can turn into two more recipes, but I am rather busy myself. So we will see.
Lastly, 11th of July and my talk about Fulcro is approaching fast. So I will stop typing now and go practice. See you there!
A set of transactor functions to better support idempotent transactions - a modified compare-and-swap function, :dt/cas, that gracefully handles duplicates, set-and-change function, :dt/sac, that cancels a transaction if a value does not change, :dt/jii that increments the value of an attribute, :dt/counter that returns increasing numbers starting from 1, and its as-string variant :dt/counter-str.
Visual guide to the best books on product management - from overview ones to others, focused on specific areas. Feature such tresures as Inspired, The Lean Startup, Crossing the Chasm, Escaping the Build Trap, Outcomes over Output, and some 16 more.
A privacy-friendly alternative to Google Analytics. You get good results without any cookies, easy to ensure addblockers won't mess it up, very little code, good API to get the data. Recommended by a friend.
Thank you for reading!