skysight-inc/HackerNews huggingface dataset:
> And yet it still feels like a language out of the 60s or 70s.

Lisp is from that era and is far more poweful.

> To me, Go feels like the programming language equivalent of insisting that everyone communicate just by grunting

This is fair. I mean, Go is outright _primitive_. The most notorious things about the language itself: are Goroutines, channels and the interfaces. This is why there is so much discussion around, for instance, Generics. Noone really "wants" Generics. Instead, they just need to not repeat themselves. There are very few ways to work around issues in the language itself.

Another issue is that, if a library implements something in a way that doesn't suit you, or you need to add extra behavior, you are out of luck. Say you want to add distributed tracing to code that's not owned by you (even if writting in your company). You'll have to track down people, you cannot "annotate" your way as other languages can.

That said, the fact that it is mind-numbly dumb can be a feature. Everything is damn obvious. Error handlers? Staring at you in the face like the sore thumb they are supposed to be. You can't even get too fancy with 'design patterns', just go write the function you need to solve your problem and stop reading that gang of four book.

They are fixing the Go modules mess, which is one of the last pieces of the ecosystem. No "coding standards" document – it is whatever go fmt and the go compiler says it is. Lots of trivial things are errors (like unused variables), which helps keep the codebase sane. The ecosystem and toolset are great (I feel like Rust learned from Go and improved on it).

Go has to be compared with alternatives. Rust? Awesome language, but slightly different niche with a far higher learning curve. Java? Please. C or C++? They are the opposite of simple (C is a larger language, but with far more baggage, don't get me started on C++). I can't include Python and ilk as their purpose is completely different, although for things like backends both could be used.

What else could we use to write Docker or Kubernetes, that would be more expressive, and still learnable in a weekend?

> There must be a golden balance here

I would argue that Go has not nailed it completely, but it is in the ballpark.
I agree, I don't think the individual pirates are ever going to be in any real trouble. HOWEVER, while it's impossible to find every person who improperly listened to a concert without paying for a ticket, it is not impossible to find every person who improperly obtained a video file for content they haven't paid for.

Just something to keep in mind as we talk about this; you can actually find the people who did it, and there's actual (digital) evidence, if the government ever decides to change its mind on the issue.

Let me be clear; I don't give a shit if someone pirates digital media. But I do think it's a personal failing of mine that I don't care.

I do, in principle, believe in the concept of intellectual property, and I do, in principle, believe someone who owns an idea can decide to only give it to people who have paid. However, on a purely practical level, I cast no judgement towards anyone who violates that belief, even though I do understand that it does cause real, tangible harm.
My takeaway would be "using the C stack to parse JSON is probably not a good idea", not "accepting an unlimited depth structure by default is probably not a good idea".

This limit is entirely artificial, and due only to the design of the parser.

As the documentation you quote says, you should limit the size of JSON texts you accept. If you don't, then you are at risk of a memory exhaustion attack. But this is completely unrelated to the maximum depth you accept. If your parser doesn't use the C stack to parse recursive structures, then deeply nested payloads will parse just fine, without using an abnormal amount of memory.
Having a favorite competitor in an industry is not that same thing as being a big fan of monopolies. That doesn't make sense. Having a healthy competitive industry does not mean that every person uses products from multiple competitors.
The Most Entertaining Guide to Landing Page Optimization You'll Ever Read
Landfill gas to power used to be more prevalent, but an AQMD rule change to reduce NOx made them switch to flaring instead because it couldn't compete against subsidized renewables.

http://www.latimes.com/local/california/la-me-methane-gas-co...
If buildings catching fires easily was a real problem, then yes one major event would be a wake-up call to everyone else to provide a real solution to the problem.
> That is, the iOS versions of Chrome, Edge, Firefox are simply Safari skins; Apple doesn't allow independent browser on their platform.

I don't like Apple's policy, but my understanding is that's not exactly right. It's the web browser engine that must be WebKit, like Safari. But browsers can have some other differences beyond the "skin" like networking code, and my understanding is at least Chrome does.
I have been perpetually annoyed at the SQL/RDBMS/relational calculus model. It always feels like a huge context shift from imperative programming. after many years of writing SQL, I noticed that many other people end up writing SQL statements that look more or less like computer programs (CASE statements, subselects, etc).

It all came to a head when I naively asked an experienced SQL developer how to represent a tree in SQL and learned one way to do it was to have CHILD nodes with FK references to PARENT nodes. So any time you want to get all the CHILDREN of a PARENT you have to query all children to see if they have a FK to the appropriate PARENT.

This always seemed strange and backwards to me and when I did a deeper dive I learned that tree representations in SQL are a rabbit hole of insanity all arranged around referential integrity.
It is the lifecycle of great societies. It starts with a small group of independent thinkers who are less susceptible to mimicry, leaving the larger status quo. Then it becomes successful. Then it becomes the mainstream status quo. People who engage in mimicry (scapegoating) become the majority.
Even at very large companies, hacks can work surprisingly well for a surprising amount of time. As much as we harp on technical debt (which includes myself), we rarely appreciate how much time can be saved by implementing the most straightforward solution so we can focus on hard things.

I'm not sure if Guido was just being amicable, but in the recent Dropbox retirement post he said, “There was a small number of really smart, really young coders who produced a lot of very clever code that only they could understand,” said van Rossum. “That is probably the right attitude to have when you're a really small startup.”
One could make the same argument for Lua.
There are 100% foreign key violations in their database. That is not the same as their database being corrupt.

They have engineered for, and understand the implications of, foreign key violations. Typically, it's as simple as "This row can be deleted", and that can cascade - at a totally different rate than you'd find in a database and with totally different performance characteristics.
I agree with your general gist, but it's not impossible, you just, essentially, are writing the engine yourself.

I've seen a few applications that keep some data hot-loaded into a shared slice of memory and have tight controls over the altering and saving of that data - and that's sort of one of the easier ways to partially avoid a full reliance on FKs, if you want to use write-through caching then you're essentially accepting the cost of implementing data integrity checks in the application layer which can be done - if you're very very careful.
If you have a need for a ID that is unique but otherwise meaningless in a distributed system, feeding a concatenated node ID, timestamp (to ms), and looping transaction counter (mod a sufficiently large number) into a secure hash like SHA-256 should take care of it.
Any pointer on how to study and practice this?
I'm with you. I get the reasoning completely.

In my case though I've been changed by elixir and erlang, have you spent any time with them?

Once you've gotten around the whole 'let it crash' concept and supervision, and _NOT_ handling errors, it's very difficult to go back.

I wish I had a "systems-level" language where I could do this stuff, but I guess I'll continue to wait..

FWIW my C ends up having probably equal amounts of error checking as my go does, somehow it feels less repetitive though (perhaps because I use a macro or two for such things in C)
It's not like you can avoid incorrect data just with foreign keys. Say you have an invoice model. There's a boolean value indicating that the invoice is final and a numerical value for invoice number. Final invoices must have invoice numbers. But a bug in your system manages to update an invoice so that it's final, but missing an invoice number. That row is incorrect and it's gonna cause an issue somewhere.

I can only imagine how many production databases contain incorrect data.
Good luck to them blocking any well executed, geographically distributed and well architected scraping/mirroring effort. If you're willing to ignore a robots.txt file and do whatever is necessary to mirror content from publicly accessible http daemons on the internet, there's a lot of ways to do it.

It sounds like the initial effort from archive team was a bit too concentrated and strained server resources.
Node is the first thing listed in requirements in the readme
> He doesn't want to be fulfilled by prime, he manages his own shipping pipeline just a good as Amazon's.

As a consumer if I see a prime logo and it's not Fulfilled by Amazon I would feel scammed. Amazon Logistics is the only courier where I live that is reliable and on-time and I have little interest in buying anything on Amazon that is fulfilled a different way.
Alternative theory: electron apps are universally shitty.
So you prefer not assuming good fait? Ok.

Without mail, journalctl and even better, systemctl list-timers will tell you about failed crons.

Can you do something as good with at and cron?
You should post the full image:

https://i.imgur.com/FPoJnH3.png

;-) Arr matey

BTW—I never thought that I would still find use of these things from early 2000s. Going into the 2010s, it looked so promising. But they couldn't have a good thing going.
If it mattered we wouldn't have needed articles like this. It's a useful niche for certain tasks, that's about it. Certain types of people with certain thinking patterns strongly prefer it, other people don't. :shrug:
I was stunned that Seznam offered that and tried it as well - it works very well indeed. I wish it had SPIF/DKIM support though.
The biggest issue with CQRS I've seen is people thinking CQRS means you need multiple, duplicate data structures, mappers, a few Kafka topics and a PhD, when IN REALITY all it means is you put methods that return data without modifying it in one interface/class and methods that have side effects in another interface/class - which is really just a good application of interface segregation.

Moreover, you now have a great rule of thumb for your brand new junior developers: "If you're handling a GET request, use this class, and if not use this other class" making code reviews easier to do and helping to enforce better structure in your code. Plus tons of other benefits.

The rest of that stuff that isn't CQRS you might eventually need if you scale, but is easy to add once you have the bones in place.
I'm gonna wager a guess and say that most MySQL users do use foreign keys without a problem. Most MySQL users are not running Github scale.
Rich people sleep indoors at night, poor ones just sleep outside
The best way, perhaps the only way, to achieve that goal is with bacteria. Highly pathogenic ones.
sod off swampy
you are talking about relation, in this context fk is an abstract concept

linked article describes fk as an dbms construct - a schema constraint

relations and conceptual foreign keys may exist without dmbs constraints, in such scenario dmbs does not guard validity of conceptual "foreign keys" and treats them as usual data

for example consider schema:

user{id,name};
book{id,title};
library_borrow{id,user_id,book_id,date}

if you want you may define a constraint:

ALTER TABLE library_borrow ADD CONSTRAINT FOREIGN KEY (user_id)
REFERENCES user(id)
CONSTRAINT fk_library_borrow_user_id;

if you do not define such constraint then dbms will not verify existence of records in `user` table when you insert data in library_borrow

absence of constraints affects also indexes - if you do not define a constraint you usually have to manually define an index on fk column
Pretty sure the study was restricted to the lowest end skill jobs. And perhaps only to places that even know what a rehabilitation certificate is.
I'm sure it's a nice init program, and god knows sysvinit is garbage, but I'm much less clear why systemd needs to be my fucking DNS resolver, too.
>> The pay-TV industry is projected to lose $6.6 billion in revenue from password sharing and piracy this year, according to Parks Associates. By 2024, the number could grow to $9 billion, the research firm said.

>BULLSHIT, we heard this SAME argument about piracy. Piracy/Account sharing DO NOT equal a 100% loss in sales.

The software, music, and video industries have been posting enormous "losses" in the billions like this for a few decades now. If they were really losing that much money, they would have all been out of business by now. Instead, last I checked, most of them are more profitable than ever.
Also, to be noted, Github was a Rails app since long before there was native support for adding foreign keys. I've worked on a lot of large monorails that were created in Rails' early days and none of them have foreign keys.
They’ve changed the title[1] to remove the phrasing “bad,” I think the title should be updated here as well, even if the repo name still reflects the original title. It’s not reasonable to use this single criteria as a measure of “badness,” as there are many different variables. I would place security/memory safety 1000x higher than recursion limits. I have never hit JSON recursion limits in production.

[1]: https://github.com/lovasoa/bad_json_parsers/commit/16f6ed75b...
Also seems to ignore that social pressure keeps people from account hoping.

Personally, I'd be much more likely to a la carte services on a month by month basis if I didn't have the subtle social pressure that 'well I'm not using this but my friends X, Y, and Z all are'. Even lacking the pressure element it seems like a small 'gift' to my family and friends who are on it and that it's not 'going to waste'. There is even the element of watching tings your friends are watching that keeps you watching. If they eliminated that I'd probably never keep more than one active at a time and likely not even that. Also once I've dropped a service for nonuse I'm much less likely to go back.
> further, afaik there's no assignment nor iteration in SQL

That was until CTEs were introduced in SQL:1999

> it's not a programming language at all. It's a.. query language.

The two are not mutually exclusive. SQL is used to tell a computer what to do, and it is very powerful at it: https://www.youtube.com/watch?v=wTPGW1PNy_Y
Have you been to one? In my experience it's discouraged to do actual work so that you can focus on the goals at hand. Also in my experience, a decent company will hold it during business hours/week. Or at least overlap that time.
You're being strangely aggressive about this. Nobody cares about PR here, nor is anyone denying anything. We're just being accurate.

KIAM and the Java SDK have bad timeout overlap. That's the problem, has nothing to do with Kubernetes, and looks like it's well documented and now resolved.
To be fair, you can run systemd without NetworkManager or an automounter. For network access, you can run dhcpcd with systemd (on Arch anyway). I've never wanted an automounter on any system.

Likewise, systemd doesn't prevent you from running ALSA instead of PulseAudio. The flexibility is there. Better documentation/best practices would be helpful.
Here's a Seattle Times article from Aug 1st describing the redesign, citing "three sources":

https://www.seattletimes.com/business/boeing-aerospace/newly...
I tried my hand at writing generic map/filter/reduce once, and it turned out to be more nuanced than I thought. Do you want to modify the array in-place, or return new memory? If your reduce operation is associative, do you want to do it parallel, and if so, with what granularity? If you're setting up a map->filter->reduce pipeline on a single array, the compiler needs to use some kind of stream fusion to avoid unnecessary allocations; how can the programmer be sure that it was optimized correctly? And so on. If you want to write code that's "closer to the metal," these things become increasingly important, and it's probably impossible to create a generic API that satisfies everyone. That said, I wouldn't mind having a stdlib package with map/filter/reduce implementations that are "good enough" for non-performance-critical code.
You're not the only one. I used to travel around Europe regularly with work and enjoyed most of it.

I've now got a 7 year old and twin 2 year olds. They're a handful and a half, even on a good day. They're my family, much as I like most of them my coworkers are not. My wife really struggles with the kids at times and we don't have much of a support network to lean on. She called me just yesterday from the other side of town because one of the two year olds was refusing to get into his car seat. I ended up driving there to help her.

I basically turn down anything that requires an overnight stay now. I get away with it but it definitely trades on what political capital I have.
Netflix specifically allows you to stream to multiple family members. There are no terms being violated.

4.2. The Netflix service and any content viewed through
our service are for your personal and non-commercial use
only and may not be shared with individuals beyond your
household. During your Netflix membership, we grant you a
limited, non-exclusive, non-transferable right to access
the Netflix service and view Netflix content through the
service. Except for the foregoing, no right, title or
interest shall be transferred to you. You agree not to use
the service for public performances.

Note it says "household" not "individual".

And frankly this is a good thing. It would be completely ridiculous for Netflix to demand a separate account for my wife and each child. The children aren't even allowed to make accounts, they would be left high and dry.

This is one area where I have a constantly annoyance with Steam. You can create multiple accounts on Steam and share the library, but you can't play more than one game at once, even if it's not the same game. It's horrible. I can understand locking you out of a specific game because someone else is playing, but locking you out of your entire library because someone else is playing is so dumb.
The point remains: one cannot bring a fullly independent browser on iOS. Microsoft was successfully sued for much less in the late '90s.

It's a business practice that reduces user choice and freedom, and stifles innovation and competition.
I think he means for the users. A lot of people who gave up piracy are going to return when 6 different services are required to watch the four shows they like in any given month.
Eh. The issue arises when you have a very poorly designed schema and missing application-level operations to perform cleanup and deletion.

You don’t want to be caught in that situation because then you are handcuffed and cannot clean the database properly. For example, from the perspective of business operations you might have something that creates 1 single thing where under the hood 5+ DB objects are all created in a transactional manner and a very specific order. So how do you unroll that? You gotta carefully construct the rollback commands or just get rid of the bowling lane bumpers and slash and burn.

So you gotta commit and go all-in. If you make the choice to do it all within the app later, at least you keep that flexibility.

It all depends on your processes and your team. If you don’t design things properly and institute the correct procedures for designing and operating the DB, having or not having constraints at the DB level is inconsequential to the other issues you will face.
This is basically a very simplified picture of free will described by Aquinas
https://www.iep.utm.edu/freewi-m/#H4
It’s easy to laugh at the sheer stupidity of that tweet. But imagine you wanted to use Domain Driven Design (or the Data Display Debugger, or the dd utility, or the D language) at an organisation that employs this person... and you get fired for it.

But all of this is on all their permanent records and when the pendulum swings the other way, they will have ample time to reflect.
Those of us who warned against the CoC's who were lambasted are over here saying "I told you so" but will continue to be ignored. I have had multiple very liberal hacktivist type friends approach me asking how we are going to avoid these things being used to weaken the FOSS community, and I don't have a very good answer other than we need to fork the orgs... but now that even our former arch enemeis (microsoft) have become funders and influencers in those orgs, it's a large uphill climb to get any org-fork to relevance. Certain people and orgs who have always hated FOSS are probably giggling in the corner as we all turn on ourselves.
I used to think that, but now I think it's completely fair and they way they present is completely honest. So I'm all for it, at least the way they have implemented it.

As an employer in a capitalistic society, you do not pay people based on value provided. You pay based on a reverse dutch auction method. This ensures you are getting an employee at the lowest possible cost, which is your financial duty. Anything more is excess expense. This is why unions are so important: to band labor together such that there is no opportunity for a prisoner's dilemma situation, where things become a race to the bottom.

It is the employer's duty to wring as much value out of an employee as possible, not to pay them for that value. Paying by value provided would introduce so much inequality it'd be awful.

So anyway, paying market rate (or the identical fraction under/over everywhere) at any location is just like having an office in every city where you don't have a WFH policy at all and employees are competing against other local employees. So gitlab employees that have self-selected to live and work in the same location, wherever it may be, are bidding themselves against other employers in that location. gitlab gets the edge over local employers who presumably would require the employee to show up at the office, for those people that don't want to go in the office at all, for whatever reason. And therefore it's justified that gitlab pays less than market because they are only selecting for those employees that value the WFH as opposed to just "work close to home". And this justification is proven because they are actually able to employ people at "less than market".

QED
This decision makes sense from the perspective of the person who owns doing database migrations, or who owns the performance of the database.

However, the other 99% of the engineers in the company end up dealing with the fallout of not having FKs -- more bugs, and slower development velocity.

One alternative is to have FKs in smaller, sharded databases, where you don't have to migrate between shards. For example, all the database rows related to one repo could be co-located in a shared with strong FKs between them.
Edit: I'm removing this, I'm embarrassed that I conflated mac OS electron and phonegap. Please stop upvoting :/