You can get a really, _really_ good pair of professional studio monitors for 2000$. I'll confess that I've never heard the HP1 but that is a bold claim!
I did qualify it with the "consumer" adjective, but I also have several pairs of expensive studio monitors and the HP1 sounds way better (though it lacks the "transparency" you need for mastering, but this is irrelevant as it doesn't even have an audio input anyway - lossy and latent AirPlay2 via Wi-Fi is the only way to get audio into them). They're somewhat of an engineering marvel.
I feel it never really was about denying how effective plain web pages are but rather that faced with the choice of a wonderful DX with just JS, and a more difficult day to day with a mix of both, we picked the first. Sometimes at the expense of the end user, yaddi yaddi yadda, etc.
Good solutions for the "have your cake and eat it" scenario with exceptionally good DX are just now reaching some maturity.
It's kind of like needing to wear glasses; all you know is that everything looks blurry, and as far as you know that's how everyone sees. And if you struggle to see clearly, well, that's your problem.
My guess is that it stays undiagnosed because doctors aren't trained to make the connection between untreated ADHD (as an adult) and the disparate consequences it has on one's life.
I feel that by using these types of tools you could really miss out on a fantastic opportunity to create a schema that models the business domain as accurately and elegantly as you want to make it, regardless of the underlying service topology or the databases behind it.
That's what I find the most attractive about GraphQL. Large companies and companies that have grown fast often have all kinds of APIs made at different time by different people with different standards. GraphQL lets you paper over that without breaking existing, revenue making code.
I completely agree. I've posted about this before in discussions about Hasura, but I feel that all these "expose your DB as a GraphQL endpoint" are setting themselves up for a world of hurt down the road.
GraphQL is a fantastic tool to enable an API that maps extremely closely to the front end (check the spec, that is exactly what it was intended to do); instead building it so it exactly matches your DB schema is a huge mistake IMO.
Two points, if your DB schema doesn't model your domain correctly you're doing it wrong to start with. And two, views are typically used to decouple the raw database tables from whatever you want to expose to others, be those other developers or in this case external API users.
Modelling databases this way has fallen out of favour for various reasons, but it becomes extremely useful and relevant again with systems like Hasura.
You can't insert/update/delete data in views in all cases, and they can make debugging performance more challenging, but otherwise nothing. I think they are underused.
I rarely see people using views at all, let alone using them as a test aid (composing big queries from smaller more easily tested views), or using them to define interfaces to an internal data model.
If you really do that, people tend to accuse you of doing RPC and not building a "true" API, because you're creating a lot of special case functions for the remote caller's business case.
That is exactly what GraphQL is designed to do. Taken straight from the spec:
> Product‐centric: GraphQL is unapologetically driven by the requirements of views and the front‐end engineers that write them. GraphQL starts with their way of thinking and requirements and builds the language and runtime necessary to enable that.
The whole point of GraphQL is that since each client asks for exactly the fields they want, having those "special case functions" is not a problem because other clients don't need to ask for those fields.
I was speaking of higher-level abstractions than that.
For instance, do you have your API allow all possible arbitrary aggregations for your data or do you only special case the 3 or 4 that are pertinent to your business model?
Doing the former leads to basically reimplementing SQL in GraphQL. Doing the latter leads to functions like `resolve_month_over_month_profit_and_loss_segemented_by_sector`.
There can be a lot in-between here. You might end up with something like `Report(type: PROFIT_AND_LOSS, unit: MONTHLY, segment: SECTOR)`
Like every tool, there's a sweet spot where it really shines and others where it doesn't fit. If you need to have access to a bunch of disparate datasources it's really nice to have that layer of abstraction.
Wouldn't you be spending the money you save on salaries on training your new "reverse bootcamp" employees? Hiring entry level people and giving them work isn't the same as teaching. The costs involved in actually training them has to be paid from your own pockets after all.
Might be possible to have them sign an employment contract beforehand and simply have them join an existing, reputable bootcamp.
Same as sibling comments, and I would add that if you’re interested in modular fun, there is now a Volca Modular and in a slightly more expensive bracket, the Behringer Neutron has a ton of features for the money.
A good way to start is taking a piece of music you like and trying to reproduce a reasonable facsimile. Going top down like this gives you some insight into the structure of music without having to start from “first principles”.