Having recently started at @grafana I just want to thread a minute about a meta-pattern I'm seeing in software communities that my graph Neo4j people might relate to 🧵
caring about community one of the things I like to look at is most viewed community posts as a broad aggregate view of what people have trouble with / what they wonder about, which I was recently doing with grafana's community site
a pattern that jumps out is "security architecture" type questions. Things like:
- how to embed X web resource into my web page
- how to set up SSL certs in a secure way
- certain error messages relating to security config
Back in my government consulting days we used to think about policies & laws in terms of this 4-square (with some examples). Who pays, and who benefits?
"Concentrated" means focused on an identifiable group; "diffuse" means spread out among everyone
Concentrated benefits + diffuse costs are typically the easiest things to get done, and the hardest things to kill. An example is all plumbers get a $2k tax break. You have a motivated constituency who will fight HARD for it. And the cost per taxpayer might be $0.05
concentrated costs & benefits feel the most fair: like a toll booth. Don't wanna pay? Don't take the expressway. But they tend not to work except in the context of a specific activity (plumbing, or using the highway
Main opposition is "make the gov't or someone else pay"
Interesting stuff. Spotify track shuffle was once truly random and people complained. It didn't "feel random". So they made it not random and people were happier
For some reason, some mutuals got me thinking about smoking
Memory: working as a teen, I knew a guy who was 100% sure that it was the glue in cigarette papers that caused cancer, not the tobacco. He smoked natural tobacco leaf-wrapped cigars, thought he was all good
at the shop where I worked, there was a 90-yr old guy who walked with a cane. Was the spitting image of William S. Burroughs. Every day, he came in and got his usual, 2 packs of Lucky Strikes unfiltered
when you're a teenage smoker yourself, a 90-yr old with a 2-pack a day Lucky Strikes habit is like a hero, but even then I knew he was more lucky than "right"
This only shows part of the picture; with recursive CTEs in #SQL I believe it is the case that:
- You can constrain max recursion, but not minimum without writing extra code
Contrast to cypher:
MATCH (e:Employee)-[:REPORTS_TO*3..5]->(:Employee)
recursive CTEs are a good example of "implementing a graph abstraction on top of something else". Namely the employee table represents a bunch of node instances; the managerID is a relationship, and the CTE implements a graph traversal.
Example thread on how to load #JSON into #Neo4j Aura -- working up from simple to more complex. Let's use the .@TheHackersNews public API to load a mini-feed of stories.
First: head endpoint with best stories, and simplest JSON load:
the apoc.load.json call always returns "value" with whatever came back. HackerNews is sending results, an array of post IDs.
We can extract out just the post IDs with a bit of extra cypher like this. Nice clean array of long values.
One step further; now we will UNWIND the array, turning the nested array into each individual item, and then build the URL we'll ask of HackerNews to get the detail of each story. This is how we build URLs one by one; we just take the story ID and concat it into a string URL