HN2new | past | comments | ask | show | jobs | submit | crux's commentslogin

Thank you - I wrote that!

Happy to discuss further if anyone has any thoughts.


I came away with the exact same conclusion as you. The article describes a rather commonplace career of fraud; more or less every industry has them. There’s nothing unique to classical music here; it’s human nature to generally take people at their word about their past accomplishments, to be impressed by famous names, and to allow their critical judgment to be influenced by what they think they know.


I think the author did quite well at explaining how Classical music's industry engenders this though: Foision was literally being given awards and prizes based solely on his made-up CV rather than his actual music. Sure that's not inherently unique, but it was convincing enough to me that there are structural problems inherent to how credential-and-"fame" focused the classical industry is, based on the articles arguments.

That said, I think the fraud itself is small, so perhaps the conclusion is too grand; but it's not out of nowhere either, I'm somewhat sympathetic to the arguments made.


Hi all—I'm the EM for the Search team at Notion, and I want to chime in to clear up one unfortunate misconception I've seen a few times in this thread.

Notion does not sell its users' data.

Instead, I want to expand on one of the first use-cases for the Notion data lake, which was by my team. This is an elaboration of the description in TFA under the heading "Use case support".

As is described there, Notion's block permissions are highly normalized at the source of truth. This is usually quite efficient and generally brings along all the benefits of normalization in application databases. However, we need to _denormalize_ all the permissions that relate to a specific document when we index it into our search index.

When we transactionally reindex a document "online", this is no problem. However, when we need to reindex an entire search cluster from scratch, loading every ancestor of each page in order to collect all of its permissions is far too expensive.

Thus, one of the primary needs that my team had from the new data lake is "tree traversal and permission data construction for each block". We rewrote our "offline" reindexer to read from the data lake instead of reading from RDS instances serving database snapshots. This allowed us to dramatically reduce the impact of iterating through every page when spinning up a new cluster (not to mention save a boatload in spinning up those ad-hoc RDS instances).

I hope this miniature deep dive gives a little bit more color on the uses of this data store—as it is emphatically _not_ to sell our users' data!


This is a fantastic post that explains a lot of the end product, but I'd love to hear more about the journey specifically on denormalizing permissions at Notion. Scaling out authorization logic like this is actually very under-documented in industry. Mind if I email you to chat?

Full disclosure: I'm a founder of authzed (W21), the company building SpiceDB, an open source project inspired by Google's internal scalable authorization system. We offer a product that streams changes to fully denormalized permissions for search engines to consume, but I'm not trying to pitch; you just don't often hear about other solutions built in this space!


Curious - what do you guys use for the T step of your ELT? With nested blocks 12 layers deep, I can imagine it gets complicated to try to de-normalize using regular SQL.

Have you explored a pattern like https://runtrellis.com or https://unstructured.io/ for unnesting?


Hey! While you're here...

> Iceberg and Delta Lake, on the other hand, weren’t optimized for our update-heavy workload when we considered them in 2022

Curious about your thoughts here. Have you followed Icebergs progress? Do you think it'd be a tougher decision in 2024 between Hudi and Iceberg?


Interesting! Now I'm curious how you handle live permission changes and indexes with stale permission data.


(I’m not on the search team, but I did write some search stuff back in 2019, explanation may be outdated)

The blocks (pages are a block) in Notion are a big tree, with your workspace at the root. Some attributes of blocks affect the search index of their recursive children, like permissions: granting access to a page grants access to its recursive child blocks.

When you change permissions, we kick off an online recursive reindex job for that page and its recursive subpages. While the job is running, the index has stale entries with outdated permissions.

When you search, we query the index for pages matching your query that you have to. Because the index permissions can be stale, we also reload the result set from Postgres and apply our normal online server-side permission checks to filter out pages you lost access to but that have stale permissions in the index.


Neat, thanks for sharing!


Tarot (tarock, tarok, tarokk, tarocchi) games are all played with five suits.


I've read on it, and it's basically a game of Hearts (from Windows XP) with more ornate rules. Should be fun.


Teach your kids Tarock, not Bridge.

Ok, that phrasing is mostly just to keep the pattern going. But I do want to bring to light the fact that there are actually a larger class of games of the same sort as Bridge - imperfect information, high skill, with a body of strategy and discussion - than most Americans are aware of.

I think it’s worth mentioning these for two reasons:

1. They’re really wonderful games! And they have deep cultural roots, which can be added delight for those of us who enjoy engaging with other cultures.

2. Bridge players can be kind of… dicks? That is, it’s unfortunate but true that the culture of Bridge can often be quite rigid and unfriendly. Especially to newcomers. As mentioned elsewhere, a surprising amount of Bridge has to do with the conventions encoded in the bidding, and if you don’t know those conventions you might feel rather lost, and your partner might get very annoyed at you.

Luckily, there are other games in the world that are the ‘Bridge’ of their own countries of origin - deep, strategic, rewarding years of play and study - that the average English speaker has never heard of.

I won’t go into too much detail but some highlights are:

- Preferans, a straight-trick-taking game for three from Russia;

- Skat, a point-trick-taking game from Germany;

- Tarocchino, a point trick taking game played with a 62 card tarot deck from Bologna;

- Koenigrufen, a point trick game played with a 54 card tarot deck from Austria;

- Danish tarok, a point trick game played with a 78 card deck;

- Vira, a straight trick taking game from Sweden;

- a half dozen incredibly deep and challenging games from Hungary alone. Something in the water over there.

In point of fact, Bridge is quite interesting, especially if you’re interested in the meta game of communicating through bidding conventions. I am not; there are other games out there that have really interesting features, lots of strategy, and a history dating back hundreds of years. Check them out!

Because I’m an annoying evangelist for this sort of thing, I’ll make sure my email is in my profile in case you’d like to know more.


Adding Doppelkopf a 48 cards combined half decks game. Played by 4. Teams 2 on 2 determined throughout the game. The game was influenced by Skat and Schafkopf and borrows from them. It is however very casual usually and the rule variations depend on the region you are in. Anyway to sum up trick an bid games are really fun!

Fyi for the US there is also binocle that has some traction and at least to my experience has been largely forgotten in the originating areas of Germany.


So happy to see tarot games mentioned on HN, I'm a big fan of their strategic depth and centuries-old cultural background.

Something a lot of people don't realise is that when tarot cards were invented, their intended purpose was to be a game. The whole divination/cartomancy aspect was made up much more recently, mostly to amuse French aristocrats.

An excellent resource for people interested in learning more about this very old tradition is the following YouTube channel: https://www.youtube.com/watch?v=DiCFfp_ZY4g


I'm a huge fan of Hanabi. It's a cooperative game with imperfect information, both because you only know other players' hands (not your own) and because you don't know what order the rest of the cards will come in. But with good strategy and good communication (within the bounds of the game's restricted communication) it's possible to win just about every game.


In Switzerland a lot of people play Jass[0]. It's almost like a national sport. I can't play it, but it feels like I'm part of a minority.

Jass games are even being broadcasted on national TV, it really is a huge part of our culture.

[0] https://en.m.wikipedia.org/wiki/Jass


Czechs play a lot of Mariáš https://en.wikipedia.org/wiki/Mari%C3%A1%C5%A1 it's in some ways similar to bridge specifically the Licitovaný mariáš variant:

There is ordered bidding that often conveys information, further information can be conveyed by playing style (if you hold an advantagous card in betl you use the cards in descending order, otherwise you use descending order) and lots of counting and memorization is involved. Both for the current game as for the next ones - cards are not shuffled only cut - so skillful players can reconstruct approximately who has what cards based on the previous game.

On the other hand it's most often played in a loud pub with a beer in hand so lots of mistakes are made.

It's also referenced frequently in literature esp. from 1st half of 20th century (Hasek, Polacek)


Here’s the home page for my static site generator, generated, of course, by the static site generator: https://bagatto.co/


Very sexy, and easy to understand. Extra points for recursive site, of course.


I’ve written a fairly long literate program in Literate: https://blog.zdsmith.com/whist.html I really enjoyed the experience. It came out well and it was relatively painless to compose.


Here's another long literate program that was written using Literate: https://justinmeiners.github.io/lc3-vm/


Beautiful. Thank you for sharing.


Indeed, thank you for sharing this.


Just in case anyone else was wondering, because it took me some googling: that stands for Art of the Metaobject Protocol.


I think to be fair I can't even claim the joke.

Yes, in the first place there's no defined semantics and thus no meaning.

It's also not particlarly appropriate to claim that the language is 'unambiguous'. The intention of the language is to create a notation that allows for the unambiguous expression of relations that would be ambiguous in English, that is, to present a logical or mathematical specification rather than a natural language one. So the ambiguity or lack thereof is entirely in the mind of the reader.

I do have a semantics in mind for it; I have thought about things like operator precedence and currying and stuff. And that matters because you want to be sure that the person reading the specification and the person writing it had the same thing in mind as far as the order of the marks on the page goes.

So there will hopefully be a much more concrete realization of those semantics in a way that still leaves wide open the question of expression evaluation. In other words, it should be an objective fact that `a b c` is evaluated as `a (b c)` - and indeed it is, because the program has parsing rules for function application - but the specifics of what it means to apply `b` to `c` will never be enforced or evaluated on the machine level.

---

In fact, the parent comment's example is a good one because `fib n - 1 + fib n - 2` would be parsed as `fib (n - (1 + (fib (n - 2))))` which is not the intended reading. Right now, that's fine, because it doesn't actually evaluate them. It just pretty prints them back out in the right order and trusts that if you didn't put parentheses there, then the intended meaning should be clear enough to the human reader.

So what, ultimately, will be the relationship between the parsing rules in the program and the semantic openness of the language? Similarly, if I've decided that the language should have implicit currying, such that `f a` where `f` is a function of two arguments, should resolve to a partially applied function of one argument - does that have any meaning aside from a sort of 'suggested reading'? One potential direction for things to evolve is that the language will consist of a set of rules which are enforced by the interpreter and will result in a syntax error if not followed, and a set of rules which are explained in the documentation as a suggested convention but enforced nowhere. In that case the question of something like function precedence is still an odd grey area where the parser does have rules associated with it, but the symbols can flow in and out of the parser without being affected by those rules.


My company has several Nim services in production. Here's an open-source component I wrote that we use:

https://github.com/makingspace/syphus-nim


Nice! It would be great to have this in Nimble's package list if it's not there already :)


Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: