Their content-addressing hash would seem critical, but the "combineUnordered" hash they use just adds each byte. The API is clear that this is only as good as possible, and I'm not sure I would rely on it for data used for security investigations. I suspect they'll come up with something like an arbitrary but fixed order over keys that would improve hash quality.
More generally, while I can maybe understand what they're doing, it's hard to imagine how to QA it in a way that's convincing to customers without a lot of data/compute/coverage analysis.
paulvrutledge 121 days ago [-]
I suspect you're right and was already having similar thoughts regarding the hashing scheme. I put a patch together and am going to supplement with some additional tests of the collision space.
Unordered hashes made more sense for arbitrary Clojure data structures where the keys might be complex compound objects, but once we're in the land of datoms with finite value data types it's pretty easy to enforce a consistent ordering.
(disclaimer: I wrote much of the feature and post)
limit499karma 120 days ago [-]
> where the keys might be complex compound objects
Given that any (simple) object has a unique c.a. identity, even anonymous (and unordered) containment in the parent object provides a key, that is k->k, with implicit order over {K} in the domain of keys (say ascending sort on k0..kn). As you obviously know, there are various schemas for that, such as "objspace://oid/<value-hash>". By definition, that is a bounded domain, with the same cardinality as the hash space. So then there remains the matter of nesting (aka trees) in which case unique identity of the parent is recursively computed as we walk up the tree from the leaves.
lvh 121 days ago [-]
Re: hashing: Yes, but I'll leave that one to Paul who is a lot smarter than I am :)
Re: QA: can you say a bit more about the type of coverage you're worried about? Is your concern that we'd be missing APIs, or that the storage format itself breaks, resulting in fact elision? payne (the underlying project) has a borderline obnoxious amount of tests, but that doesn't mean we didn't miss anything :)
juoitre 120 days ago [-]
> in a way that's convincing to customers
Customers of this sort of security consulting are largely uninterested in the security as much as the audit report that allows them to say to their customers and incestors “we had these security professionals look at our stuff and this is what they said”.
lvh 120 days ago [-]
Some of our customers, like Tailscale, are a helluva lot more picky than that.
linotype 121 days ago [-]
Separate question: are there any new startups out there writing code primarily in Clojure?
kaliszad 121 days ago [-]
Yes, in fact there is also a good number of conferences, for instance in less than two days https://2024.heartofclojure.eu/ starts in Belgium for instance (meet me there ;-) ).
We are writing a trading system for a small broker company in Clojure/ ClojureScript with a Datomic centered backend. The previous company some of us on the team worked at had the code-base also in Clojure/ ClojureScript.
lvh 121 days ago [-]
(I'm one of the founders of Latacora and reviewed the post.) If any of you are at Heart of Clojure, I'll be there both wearing my Latacora hat and my Clojurists Together hat :)
kaliszad 116 days ago [-]
Missed your reply but we've met anyway... so all is good. Thank you for attending and sponsoring.
kaliszad 110 days ago [-]
Btw. there is a new video from the Heart of Clojure Hallway track: https://www.youtube.com/watch?v=GEqzw6V31tk I think it really captures the great atmosphere in the community and some community leaders.
tsingy 121 days ago [-]
How is the job market for juniors? Functional programming jobs seems to be anti-juniors when hiring.
nextos 121 days ago [-]
Sadly Common Lisp, Scheme, Clojure, Julia, OCaml, F# and Haskell jobs are quite scarce.
For example, right now, I can only see ~50 LinkedIn EU Clojure ads. A dozen more mention Clojure but it does not seem to be the main focus of the job.
Would love to be proven wrong, though. Perhaps these jobs are sometimes not advertised via LinkedIn.
eadmund 120 days ago [-]
I would love for my next job to be in Common Lisp.
I do have a concern though. I see that at lots of companies the job is not a Go job or a Python job or a Javascript job, but a Go-at-Foocorp job or a Python-at-Bazco job or a Javascript-at-International-Clowns-Inc. job. What I mean is that the team have built so many leaky abstractions atop the core language, and added so many third-party tools, that the learning curve is steep and the skills non-transferable. On the one hand, who cares? We’re human, we can learn. But on the other it means that it can take significantly longer to ramp up and start delivering value than one would prefer.
What’s this have to do with Lisp? Well, while a well-written Lisp system will be faster to pick up and get started on that one in a less-powerful language (i.e., almost all of them), a poorly-written mess will be much, much slower. My concern is that I might leave a pretty good situation for what ends up being a dumpster fire — and then have to find a new job too quickly.
nextos 119 days ago [-]
That's so true, you can write Fortran in any language! I've seen great Java codebases and atrocious Clojure out there.
Developing good non-over-engineered abstractions is hard. But with Lisp it's a bit easier.
Some places do abuse macro DSLs and you can end up, as you said, working on a local language with no transferable skills.
fhd2 120 days ago [-]
I'd say that market exists, but is kinda invisible.
I've been looking around for a junior with a passion for Common Lisp, but I have _no_ idea where to find one, especially in Germany (job's remote, but I'm currently not able to hire FTEs outside the country).
BaculumMeumEst 120 days ago [-]
That's like asking about the job market for hammers.
kaliszad 121 days ago [-]
Hard to say, I was always contacted directly by the team/ had other role and later it turned out I can do a fair bit of programming too ;-)
puredanger 120 days ago [-]
The annual Clojure/conj conference is coming up next month in Alexandria, VA (https://2024.clojure-conj.org) and there will be talks from a variety of companies, both big and small.
I was momentarily convinced that “crazy horse multiplier” must be an American idiom, and then realized that maybe the misspelled thing being multiplied is a force rather than a horse after all.
fiddlerwoaroof 120 days ago [-]
I usually catch these too and ninja edit them out
vincentdm 121 days ago [-]
We (https://basil.net) are not new and not a startup, but our main language is Clojure and each new project is written in it. Very satisfied with our choice.
thenonameguy 121 days ago [-]
Yup, it's still the best tool for me. Especially for complex domains, as it does not allow you to over-abstract data structures.
Schemamap.io has a declarative SQL compiler and backend implemented in it, solving Postgres database syncing.
drikerf 120 days ago [-]
I use it for Wobaka[1]. It's 98% Clojure and ClojureScript with some bash added. I even use it for CSS with a beautiful library called Garden.
There are quite a few! We do at Doccla (and we’re hiring :) (EU))
edem 121 days ago [-]
havent touched clojure in years, but i use FP daily, can i get an interview? :)
ekzy 119 days ago [-]
I’ve sent you an email!
tsingy 121 days ago [-]
Anything for juniors?
ekzy 120 days ago [-]
Not at the moment, sorry!
ska80 121 days ago [-]
> EU
:(
jwr 121 days ago [-]
Definitely. It's a great tool, especially in a small and smart team.
tvaughan 121 days ago [-]
Nalca Biotech
jchanimal 120 days ago [-]
Fireproof is taking the lessons of cloujure and Ipfs and applying them to the browser, to create a realtime database that runs anywhere.
As cofounder of Couchbase I got to meet Rich Hickey, whose work was a big inspiration to Fireproof.
Content addressing makes causal consistency easy to implement. We are fast approaching readiness for consistency checks and ACID characterization.
3jnsn 119 days ago [-]
It’s cool to see these ideas that you first conceptualized back at Couch, now becoming reality! I’m familiar with the high level, but not all the details. What lessons from Clojure and IPFS is Fireproof applying to the browser?
lvh 121 days ago [-]
FYI: we're planning a followup post for people who are less interested in the Datomic mechanics and more interested in the usefulness to investigations and other security functions. Informally, I think of it this way: your SIEM has the deltas, but often you want the contextual states in between the deltas (and a lot of investigation is about trying to reason about that state). We built this tool originally to support that, and it turned out that approach was also super useful for things like compliance, CSPM...
More generally, while I can maybe understand what they're doing, it's hard to imagine how to QA it in a way that's convincing to customers without a lot of data/compute/coverage analysis.
Unordered hashes made more sense for arbitrary Clojure data structures where the keys might be complex compound objects, but once we're in the land of datoms with finite value data types it's pretty easy to enforce a consistent ordering.
(disclaimer: I wrote much of the feature and post)
Given that any (simple) object has a unique c.a. identity, even anonymous (and unordered) containment in the parent object provides a key, that is k->k, with implicit order over {K} in the domain of keys (say ascending sort on k0..kn). As you obviously know, there are various schemas for that, such as "objspace://oid/<value-hash>". By definition, that is a bounded domain, with the same cardinality as the hash space. So then there remains the matter of nesting (aka trees) in which case unique identity of the parent is recursively computed as we walk up the tree from the leaves.
Re: QA: can you say a bit more about the type of coverage you're worried about? Is your concern that we'd be missing APIs, or that the storage format itself breaks, resulting in fact elision? payne (the underlying project) has a borderline obnoxious amount of tests, but that doesn't mean we didn't miss anything :)
Customers of this sort of security consulting are largely uninterested in the security as much as the audit report that allows them to say to their customers and incestors “we had these security professionals look at our stuff and this is what they said”.
We are writing a trading system for a small broker company in Clojure/ ClojureScript with a Datomic centered backend. The previous company some of us on the team worked at had the code-base also in Clojure/ ClojureScript.
For example, right now, I can only see ~50 LinkedIn EU Clojure ads. A dozen more mention Clojure but it does not seem to be the main focus of the job.
Would love to be proven wrong, though. Perhaps these jobs are sometimes not advertised via LinkedIn.
I do have a concern though. I see that at lots of companies the job is not a Go job or a Python job or a Javascript job, but a Go-at-Foocorp job or a Python-at-Bazco job or a Javascript-at-International-Clowns-Inc. job. What I mean is that the team have built so many leaky abstractions atop the core language, and added so many third-party tools, that the learning curve is steep and the skills non-transferable. On the one hand, who cares? We’re human, we can learn. But on the other it means that it can take significantly longer to ramp up and start delivering value than one would prefer.
What’s this have to do with Lisp? Well, while a well-written Lisp system will be faster to pick up and get started on that one in a less-powerful language (i.e., almost all of them), a poorly-written mess will be much, much slower. My concern is that I might leave a pretty good situation for what ends up being a dumpster fire — and then have to find a new job too quickly.
Developing good non-over-engineered abstractions is hard. But with Lisp it's a bit easier.
Some places do abuse macro DSLs and you can end up, as you said, working on a local language with no transferable skills.
I've been looking around for a junior with a passion for Common Lisp, but I have _no_ idea where to find one, especially in Germany (job's remote, but I'm currently not able to hire FTEs outside the country).
category: edit-distance-two
Schemamap.io has a declarative SQL compiler and backend implemented in it, solving Postgres database syncing.
Extremely happy going with Clojure!
[1] https://wobaka.com/blog/building-a-startup-on-clojure/
:(
As cofounder of Couchbase I got to meet Rich Hickey, whose work was a big inspiration to Fireproof.
Content addressing makes causal consistency easy to implement. We are fast approaching readiness for consistency checks and ACID characterization.
We already wrote a high level blog post here: https://www.latacora.com/blog/2023/11/01/our-approach-to-bui... -- but the one I'm hoping to write is more of a case study.