Fork me on GitHub

@tbaldridge, ...I was describing Clojure's STM to someone yesterday, and their response was "so it's like the blockchain". (Oh, and welcome to ThreatGRID).


Thanks! It's been great so far.


How did you explain Clojure's STM ? 🙂


Since it was a meatspace interaction, that's not trivial to reproduce.


I'm trying to find concepts that are synonymous with "optimistic write + conflict + rollback" and "distributed ledger + hashing"


"many threads work together and agree on something"


I think the idea of extending an immutable structure was part of what they were seizing on.


@qqq, ...speaking as someone you're putting in the StackOverflow BOFH bucket, btw -- as promulgated by Jeff Atwood back when the site was being founded, the overall goal is to build a quality Q&A database of (1) distinct, specific and well-asked questions, (2) paired with canonical answers. That's a distinct thing from "a place where people can go to ask questions and have someone write an answer for them" -- the expectations on the question (to be unique, to be clearly written, to represent a reproducible issue, &c) are just as high as those on the answer; if it isn't obviously at that bar, then... yeah, a lot of fairly cheap/common feedback does tend to happen.


ThreatGRID - huh, I still haven't done Clojure professionally for anything, but cool to see other Cisco employees using it (yes, I was aware ThreatGRID has been using it for years, before and after Cisco bought the company)


@tcarls: I completely understand SO's BOFH stance. I'm just saying -- that's not what I want -- and I see a market for $100 / question, where instead of telling me to read the fucking manual + use the fucking google, people answer my fucking question because I'm fucking paying them. 🙂


If I was running stack overflow, I'd also recommend a BOFH like culture; but I think there exists a need for "micro consulting", where people pay $100 / question and get professional nswers.


personally I'd prefer reading the whole TCP/IP reference manual (with appendices) than paying $100 for an answer


Depending on one's place in life, $100 is a reasonable price to pay for saving you an hour of time. Not sure of the size of the market there.


A founder bootstrapping a startup that needs to put out a technical fire RIGHT F-CKING NOW and move on to the next task has different money / tme tradeoffs.


In my student days, I'd rather spend the $100 on buying a new textbook and reading it; but as a founder, time/value tradeoffs change drastically.


I always found the repository trees of git reminiscent of a blockchain.


Although tries are also built using hashes of previous blocks? Or are they?


1. bitcoin block chain has no concept of 'merging' 2. git is meant to change separately + merge later 3. bitcoin -- you have to pretty much be 'always online'


Also, for anyone else reading the $100 / question idea. I think there is a huge opportunity here if viewed as "on demand expertise." A software engineer making 150k / year, after benefits, is costing around 200k / year. Assuming 40 hrs / week * 50 weeks / year, the cost of that engineer is $100 / hr. So if you had a service that could provide "on demand expertise", that saved you an hour of time at a time, it would actually drastically save money (since you're only paying per unit work, and not per unit time) as well as provide more flexibility (since you can get any type of expertise on demand, instead of having to interview + recruit + hire for a particular domain of expertise.)


Not sure how much sense it makes on the other end of the market. I can get away with contributing to StackOverflow during business hours in large part because that contribution is unpaid; the minute I'm not contributing to a shared/community resource that my employer also draws from free-of-charge but am instead acting for my own financial gain, we're in a very, very different world -- at that point it's a side gig, and participating during work hours is stealing from my employer.


Of course, I don't know how representative my own experience is.


Another concern -- if we drop the ability to put the onus on the person asking the question to ensure that that question is complete and comprehensive enough to be answerable, the amount of time needed to collect that $100 goes up (as does the uncertainty when looking at a question of a typical quality level to assess whether that's collectable at all / at what time cost).

tcarls01:02:44, I wouldn't be surprised if you ended up with a shallower pool of expertise populated by comparatively junior folks (to whom the $100/question -- with a lax quality filter for said questions increasing the amount of investigatory work required to drill down and establish essential details -- is more competitive with their consulting market value) in the paid model.


1. "on demand expertise" reduces the need to hire SV engineers, but the people providing the answers do NOT have to SV engineers 2. I've been contracting out 20-50 line programming tasks on free lancing site, it's hit/miss, generally it takes about talking to 3 people to find 1 that s qualified + happy to do the work 3. reputation system tends to solve alot of the "trust issues" ; I've found a few freelancers I work well with, and both sides try hard to work together


I think the two sides of the market are: askers: founders trying to bootstrap their own business, but want on demand work done instead of full time employees responders: programmers outside the US, with much lower costs of living, where $100 USD for a 20-50 line script is a great deal


It is so long ago that I can no longer remember it, but relatively early in the web days (incorporated 1999, I find) there was HotDispatch, “web-deliverable technical services” for so much per pop. I have a T-shirt from them, but other than that I never made a dime…


I see their website is long gone, too…


This would also drastically lower the cost of bootstrapping startups, since instead of full time employees, one can 'rent expertise' per unit work.


I wonder if somehow CRDTs provide a better solution to the problems STM tries to solve


I'm not sure it's a better solution, just a solution with different qualities.


And probably one mapping better to certain domains than others.


@fellshard I agree. I think it's one of the reasons why STM hasn't seen mass adoption in any language. The specific set of features that STM offers just aren't needed that often.


At the point when a single atom becomes too contentious STM won't offer enough of an improvement.


And as systems like Datomic show, if you remove reading from the equation (via immutable data) you can get a lot done with a single CAS and a single writer.


slack emoji are so ugly now


time to move back to IRC


It's basically an equivalent shift as seen in moving between transactional systems and CQRS event-store systems.


exactly, and just as transactional systems don't scale when you have dozens of writers involved, the same applies to STM, imo


@dominicm i miss the google hangouts faces


It's in the name: 'transactional' 🙂


Basically, it's the tradeoff you get for the guarantees transactions provide: you gain a great deal of immediate certainty, but also risk contention.


CQRS flips the bill - low contention, but heavier computation cost to regenerate your materialized views.


I used the emoji one set. It was beautiful.


@tbaldridge: STMs and CRDTs seem to solve very different problems; one is for consistent systems, one is for eventually consistent systems; it's not clear where there's any overlap between the two


@qqq they don't except that STM doesn't have a place in the design space.


atoms provide coordination between small numbers of writers, CRDTs and the like provide weakened coordination between large numbers of writers.


So I do embedded stuff much more than big systems, but at least in my little corner of the world, fine-grained locking/atomicity in say a hash table kind of thing gives great average parallelism in typical cases. I would guess some relational database and other database systems can do that when the access pattern enables it, yes?


You often need one or the other, the reasons why you would need STM are non-existent?


If your design doesn't work with atoms I don't think it will work with STM either.


@tbaldridge: here is my understanding, from about 2-3 weeks studying CRDTs: transactional systems: always consistent if you ged ta conflict, transaction returns error down side: you need to always be online / connected CRDTs: define some OP, where (op a a) = a (op a b) = (op b a) (op (op a b) c) = (op a (op b c)) this ensures that given any two states, we can "merge" them, and the "final answer" is the same, regardless of the order of the "merge" ==== STMs falls in the transactional camp I can't think of situations where one makes that jump to eventual consistency / CRDTs ==== now, if what you're saying is "STMs are rarely used in practice" -- I agree -- I've never used them, except in working through tutorials on STMs 🙂


@dominicm looks like you can switch to the Emoji One emojis via the "Emoji Swap" chrome extension. Looks like it should work on Slack in the browser, anyhow.


I may give those a try 🙂


I don't understand why it doesn't use system emoji, which I have configured as emoji one. I don't use chrome, I'll have to see if there's a Firefox equivalent.


Meh, looks like I was mistaken; although the Emoji Swap FAQ ( says, "Sites such as and have supported EmojiOne since the beginning", I guess that's no longer true; Slack says, "Unfortunately, we are no longer able to offer a choice of emoji styles due to the usage rights unique to each device" (


@qqq, perhaps, but I think there's more overlap between CRDTs and how STM is used in functional systems. I need to look up the paper I read years ago on CRDTs, but most of it is simply around how to deal with conflict resolution. It seems that FP is quite well suited to that sort of problem.


@qqq here's the paper


see 2.3.1 and 2.3.2, two approaches. One that sends messages, the other sends operations.


I think we posted the same document from two different domains 🙂


Right, the 'state based' vs 'op based' techniques.


It's also somewhere that the academic category theory comes to bear, as that sounds eerily monoidal :)


speaking of CRDTs, I think it’s really cool that the Xi editor uses them to make a fully async editor:


Guessing we'll see some research being done on how to verify that a given domain's events can be represented in a CRDT-reducible format


@seancorfield Sorry, I just am frustrated from time of time by the CoC stuff. Of course I did not want to offend anyone, ist just been my memories and I missed I was in #community-development. I guess its tough to be a moderator.