HN user

arecurrence

772 karma
Posts3
Comments174
View on HN

Another 10/10 free course is Scotty West’s Absolutely Understand Guitar on YouTube. Filmed in the 90s and it’s still one of the best classes out there.

The Clickhouse docs are so good that I'd point straight to them https://clickhouse.com/docs/sql-reference/statements/alter/d... .

The reason I mentioned it is because it's a huge surprise to some people that... from the docs: "The ALTER TABLE prefix makes this syntax different from most other systems supporting SQL. It is intended to signify that unlike similar queries in OLTP databases this is a heavy operation not designed for frequent use. ALTER TABLE is considered a heavyweight operation that requires the underlying data to be merged before it is deleted."

There's also a "lightweight delete" available in many circumstances https://clickhouse.com/docs/sql-reference/statements/delete. Something really nice about the ClickHouse docs is that they devote quite a bit of text to describing the design and performance implications of using an operation. It reiterates the focus on performance that is pervasive across the product.

Edit: Per the other part of your question, why inserts create new parts and how they are merged is best described here https://clickhouse.com/docs/engines/table-engines/mergetree-...

Clickhouse has a wide range of really interesting technologies that are not in Postgres; fundamentally, it's not an OLTP database like Postgres but more-so aimed at OLAP workloads. I really appreciate Clickhouse's focus on performance and quite a bit of work goes into optimizing the memory allocation and operations among different data types.

The heart of Clickhouse are these table engines (they don't exist in Postgres) https://clickhouse.com/docs/engines/table-engines . The primary column (or columns) is ordered in some way and adjacent values in memory are from the same column in the table. Index entries span wide areas (EG: By default there's only one key record in the primary index for every 8192 rows) because most operations in Clickhouse are aggregate in nature. Inserts are also expected to be in bulk (They are initially a new physical part that is later merged into the main table structure). A single DELETE is an ALTER TABLE operation in the MergeTree engine. :)

This structure allows it to literally crunch billions of values per second (brutally, not with pre-processing, erm, "tricks" although there is a lot of support for that in Clickhouse as well). I've had tables with hundreds of columns and 100+ billion rows that are nearly as performant as a million row table if I can structure the query to work with the table's physical ordering.

Clickhouse recommends not using nullable fields because of the performance implications (it requires storing a bit somewhere for each value). That's how much they care about perf and how close to the raw data type it is that their memory allocation uses. :)

This is one of the most interesting interviews I've ever read/listened to. Reminds me of when I first heard a Lex Fridman interview (the style is completely different but it hits on a lot of material that is interesting purely due to the openness of the interviewee to talk about whatever and how the interviewer drives the conversation).

If you are at all interested in the current challenges being grappled on in this space, this does a great job of illuminating some of them. Many many interesting passages in here and the text transcript has links to relevant papers when their topics are brought up. Really like that aspect and would love to see that done a lot more often.

I too wish deprecation with migration path was a more common pattern in today's language development. The language has very much needed work and the numerous bugs within Apple's own libraries certainly hasn't helped.

That said, some of the, erm, "new ways" to solve problems have been significant advancements. EG: Async/Await was a huge improvement over Combine for a wide variety of scenarios.

I made a bug like this once where a database default was set to a value evaluated at runtime instead of on every insert. Oops

However, luckily in my case, it was caught immediately in the staging env since collisions caused exceptions.

Realizing when an expression is evaluated is pretty easy to miss. That code is probably live somewhere else right now surreptitiously causing issues.

Yeah, I've written a few of these and should probably release a package at some point but each version has been somewhat domain specific.

The last time we measured an immediate 99% performance improvement over SNS+SQS. It was so dramatic that we were able to reduce job resources simply due to the queue implementation change.

There's a lot of useful and almost trivial features you can throw in as well. SQS hasn't changed much in a long time.

If the iPad could run Mac apps when docked to Magic Keyboard like the Mac can run iPad apps then there may be a worthwhile middle ground that mostly achieves what people want.

The multitasking will still be poor but perhaps Apple can do something about that when in docked mode.

That said, development likely remains a non-starter given the lack of unix tooling.

"Dewdney was a member of the 9/11 truth movement, and theorized that the planes used in the September 11 attacks had been emptied of passengers and were flown by remote control.[13] He based these claims in part on a series of experiments (one with funding from Japan's TV Asahi) that, he claimed, showed that cell phones do not work on airplanes, from which he concluded that the phone calls received from hijacked passengers during the attacks must have been faked."

well... I must admit that was unexpected.

Very cool site. Their 3d models are fascinating to look at. I've often wondered what all goes into the construction of these and while I've seen one off scans in the past... being able to click and scroll around through the slices and whatnot is really cool.

Would be awesome if these were donated somewhere like Wikipedia some day.

Been in a similar environment as an intern. Can concur was worst professional experience of my life. Very glad I experienced this early on to avoid whenever possible for the rest of my days.

Staff couldn't even be disciplined without going through the union rep and everything was based on seniority... with no other reason.

That business no longer exists... its competitors that were non-unionized are still thriving.

This sort of thing is more common with postgres than you'd think. I interviewed a candidate once whose company completely replaced querying in their postgres with elasticsearch because they could not figure out how to speed up certain text search queries. Nothing they tried would use the index.

We're all very lucky that CitizenLab exists as they are often the first discovery point of numerous similar exploits. They proactively scan the phones of internationally sensitive people and publish their findings. I'm not aware of any other public service that has had this much success exposing mobile device attacks. Attacks which have completely and utterly compromised the entire device that someone keeps with them all day every day.

I tip my hat to CitizenLab and the good work they do.

Remove TypeScript 3 years ago

I'm going to be a bit of a naysayer here and comment that while I fully appreciate and endorse TypeScript... there are certainly situations where Javascript would be preferred. EG: Deno also dropped TypeScript internally.

What they've done seems a bit rough around the edges and a types file of some sort for external facing customers is a critical follow-up PR, but I would not blindly trash these guys for switching to Javascript. I suspect they did it so quickly because it would have sat in committee for eternity otherwise.

I probably wouldn't write anything in pure JavaScript today when TypeScript is such an enormous boon... but I'm also not working in the space that this project is working in.