Hands on Rama, day 1: Setup, idempotent create & update
This is a part of a series documenting my experience applying the Rama programming platform to reimplement a part of the SaaS Ardoq, as a learning exercise. In day 1, I get set up and implement idempotent create and update of Components, while struggling with a few issues and lack of knowledge.
Introduction
I want to learn the amazing programming platform Rama by applying it to a problem I know well: Ardoq. Ardoq is a SaaS tool for enterprise architects and others, to map and model the resources, processes, assets, and strategy in an organization. The heart of Ardoq is a property multi-graph: a directed graph with multiple directed edges between nodes, and with an arbitrary bag of properties attached to nodes and edges.
There is of course no way to rewrite Ardoq in Rama in one person in a few days. Instead, I want to explore two things: (1) How can I model, store, and manage our core data in Rama instead of a relational database? (2) How does Rama make a few selected features simpler/harder to write?
Continue reading ⊟
Exploring Rama, the platform for writing backends 100x more efficiently
In 8/2023, RedPlanetLabs has unveiled Rama, their integrated platform for writing and operating robust, distributed, and scalable backends 100x more efficiently. With it comes a new paradigm - dataflow oriented programming. So what is it all about?
In this post I aim to give you a rough idea of what Rama is, what it offers, and why you absolutely should be interested in it.
Continue reading ⊟
PostgreSQL & JDBC: How to select rows matching pairs of values
Given a sequence of pairs of (id, version) in code, how do you efficiently select all records in your DB that match? You can construct a long string with SELECT … WHERE (id = 'a' AND version = 1) OR (id = 'b' AND version = 20) OR …
but that’s not very efficient. If you only had a single value then, in PostgreSQL, you could use id=ANY(?)
and pass in a char array. But what if you have multiple conditions/columns that must match? Unnest
to the rescue!
Continue reading ⊟
The Four Heads of Complexity
Kent Beck has recently written about the four distinct aspects of complexity: states, interdependencies, uncertainty, and irreversibility. To tame complexity, you need to cut off one of these heads, and keep the others under control. What are they?
If there is too many states and their combinations in the system, it becomes hard to understand.
Continue reading ⊟
Include interactive Clojure/script code snippets in a web page with SCI & friends
I have long dreamt about having interactive code snippets of Fulcro in my teaching materials. Showing people code they could modify and see it render right next to it. Fulcro is a ClojureScript library, but it uses some heavy macros - and those typically require JVM Clojure. Well, not anymore. I was able to rewrite them into Borkdude’s Small Clojure Interpreter (SCI) dialect of Clojure. I.e. I can ask SCI to evaluate a piece of code with these macros, which SCI will macro-expand into more cljs, and execute. With SCI, my Fulcro sci.configs, CodeMirror, and Nextjournal’s clojure-mode, I can have a beautiful in-page editor with code evaluation. And I will show you how to do the same, for your blog.
Continue reading ⊟
Accessing Google API with OAuth2 and a service account from Clojure
How to turn a service account’s service.json
into an access token you can actually use to call Google APIs, when you don’t want to use Google’s SDK? With Buddy’s JWT it is pretty simple, and Tim Pratley’s HappyGAPI will show us how to do it. (I believe that the same approach would work with other OAuth providers, just with changes to some of the values.)
Continue reading ⊟
When not to use Fulcro?
Fulcro is great for writing non-trivial, full-stack business SPA web applications, which display and modify data from a general data store. But it can’t possibly be perfect for every kind of web app. So when is it less then a perfect fit? Possibly still usable, but not as beneficial?
Continue reading ⊟
Book highlights: Escaping the Build Trap: How Effective Product Management Creates Real Value
It doesn’t matter how good you are at making software, if you are building the wrong thing. Melissa Perri’s Escaping the Build Trap is an excellent book about fostering culture focused on customer’s problems and producing value. A way too common pitfall is focusing on building features, based on vague, unverified ideas of what customers need or want. (This is the build trap, a.k.a. feature factory trap.) But, as the books says, we should love the problem, not the solution. And we need to assume that we don’t know perfectly what the customers need. I would add, that we can surely build tons of useful features - but the hard question is, which time & effort investments are the most valuable ones, and where the cost of writing and maintaining the code and the consequential increase in complexity are not worth it. Remember, every line of code is a liability.
I have already been pretty much of this mindset (after all, I have read and appreciated The Lean Startup years ago), but still I learned useful things, and remembered others. Some highlights follow. They are rather personal, for a more objective and thorough overview, I highly recommend Julia Park’s 11 Key Learnings from this book.
Continue reading ⊟