894 karma · joined December 22, 2015
It's possible to build a service in a purely functional language using non blocking IO that also takes minutes to render. No language will save you from a bad design.
I do agree that Clojure is not the most suitable language for large projects with lots of contributers because of it's dynamic nature.
I usually heavily tweak the settings of the applications I use, make my own custom themes etc, but the defaults of fish are so good that I hardly changed anything.
I only installed 3 plugins (z,fzf,and virtualfish) and that's it, it's super productive.
Completion from history, persistently setting enviroment variables, defining functions, the syntax, everything is much more ergonomic and sane than in bash.
I'm sure you can tweak zsh or even bash to achieve something similar, but why bother?
Also, i don't mind the incompatibility with bash: the fish language is much more sane, and you can easily use bash if needed.
Unison is a language/platform that incorporates some ideas from version control, but I don't know how far along they are.
10+ years experience in Clojure(script), Java, Kafka, DevOps and AWS/GCP/Azure. See profile for contact details.
Serverless makes somethings easier and other things harder, so it's advantages over good old fashioned servers are clear cut.
Not all functional languages have static typing. Also type checking helps, but saying that if the types check out it just work it pushing it IMO.
No type checker will catch this error:
sqrt :: double -> double
sqrt x = x
sqrt 10When you publish a message to Kafka, it stores the message in a buffer and immediately returns a future that completes once the data is sent to the broker.
If you forget to wait on completion of the future that is on you, this behaviour is well documented.
My background: I have several years of Clojure(script) experience, and used various other cljs frameworks before trying re-frame, so my view is probably biased.
A datalog equivalent to TimescaleDB (which extends Postgres with timeseries optimiziations and time based table partitioning) would be great.
For client access I tried to define access rules based on attributes (similar to how many graphql frameworks handle this), I tried to express this using datalog rules. For example, users hava permission to access :user/items, and :items/blabla, so a user X can access [X :user/items Y] and [Y :items/blabla Z] Some experiments were promising, but it was slow and I did not find a good way to integrate this.
How will you handle security when accessing a Datahike backend from the browser? I've used Datomic from the browser indirectly in the past for internal tools, using a custom rest api to run the queries, but for external access it was not clear how to limit the queries to the parts of the database the user had permission to view.
What are your plans for IOT development? I found that Datomic is not a good fit for timeseries data, does Datahike offer any advantages?