1,651 karma · joined July 8, 2016
There's nothing simple about this crapton of dependencies. Sure, it may be easy to build things this way, but let's not conflate the two terms.
https://kokes.github.io/blog/2019/07/09/losing-data-apache-s...
We ran a number of modelling jobs, basically CPU intensive tasks that would run for minutes to hours. Investing in on-prem computers (mostly workstations, some servers), we got very solid performance, very predictable costs and no ops issues. Renting beefy machines in the cloud is very expensive and unless you get crafty (spot and/or intelligent deployment), it will be prohibitive for many. Looking at AMD's offering these days, you can get sustained on-prem perf for a few dollars.
Three details of note: 1) We didn't need bursty perf (very infrequently) - had this been a need, the cloud would make a lot more sense, at least in a hybrid deployment. 2) we didn't do much networking (I'm in a different company now and we work with a lot of storage on S3 and on-prem wouldn't be feasible for us), 3) we didn't need to work remotely much, it was all at the office.
Obviously, it was a very specific scenario, but given how small the company was, we couldn't afford people to manage the whole cloud deployment/security/scaling etc. and beefy workstations was a much simpler and more affordable endeavour.
Not saying anything about anything else.
If you plan to work only at your desk, where you connect it to an external display (USB-C, ideally, to get both power and video) and external keyboard and only use it as a tablet otherwise, then sure, it would work well. But using it as a standalone machine would be rather inconvenient.
Windows: Dell XPS 13 has been the go-to laptop for years, they keep refreshing it, so make sure to get at least the 2019 model (which has a camera on the top of the screen, not the bottom), or ideally the 2020 model, which features a new keyboard and even smaller bezels (and a new, 16:10 screen).
Windows runner up: look at Surface Pro 7 (x86) and Pro X (ARM), if the form factor, performance and ergonomics fit your needs, they might be preferable to the XPS 13. The Pro X is quite a wild card, since the compatibility is not quite there yet, but it's closer to a paper notebook than laptops or even the Pro 7.
I would advise against anything smaller than 13", because it will be fairly suboptimal to type on.
1. It has a fairly rich support for types - these new-ish SQL engines often lack quite a lot of things, but this seems pretty decent. 2. I don't see any comparisons to KSQL, which seems to be the primary competitor. 3. Read the license. Read it carefully. It has a weird "will become open source in four years" clause, so keep that in mind. It also disallows it being hosted for clients to use (esentially as a DBaaS).
In this case - load fewer and/or smaller resources.
Compilers are awesome, check out Matt Godbolt's talk on this very topic: https://www.youtube.com/watch?v=nAbCKa0FzjQ
People just want to run their selects, man.
It's great that the whole thing with extension arrays, custom types etc. has lead to this, but when the devs have, after 10+ years, the biggest chance for a backward incompatible change, this is the one to make. By making it optional, they are fixing it for the very few that know of its existence.
I love pandas and a sizeable part of my career depended on it - and while I don't use it anymore (partly because of the NULLs), I wish it the best and I hope there will be a future release with this breaking change.
You can always think about performance implications of your implementation and keep them in mind. This is typically the runtime, your infrastructure, your chosen level of abstraction etc. You know your implementation is not the fastest, but you know what your limits are and where the low hanging fruit is.
To make it more specific - I implemented some economic model thingy and all I wanted was for it to compile and run correctly, so I wrote it in a way that I could swap the data storage for concurrency-safe structures without impacting the results - but since that added tons of complexity, I just designed it with a pluggable storage in mind. Then I developed it as a single-threaded program and wrote tons of tests. Once that and the external API were done and validated, I plugged in the concurrent storage layer and enjoyed great speedups.
So no, my first prototype was not performant at all and I was okay with that.
1. If all superbowl-related articles used an extraction mechanism that links wikipedia with wikidata, then only the wikidata entry needs updating and all these articles get updated automatically. 2. That wikidata update I mentioned was manual, but a lot of data in Wikidata is updated automatically (e.g. births and deaths from some databases, city population counts etc.), so some things get updated across the board automatically. That's a source of pushback against this - articles being updated automatically, so bad actors can change a lot of things at once.
I'd encourage people to get involved in either of these two projects - there's always a niche you know about and could improve its presence in the Wiki world.
I guess my account got pwned.
They asked how I'd pay for these - $900 worth I think - since I didn't have a valid card in their system (the previous one expired since I last used Packet). I told them to stop the VMs and allow me to reset my credentials. I also asked them to investigate their logs and geolocate all the users that logged into my account. I was also curious they actually let someone log into the account from a new IP (without notifying me) and also allowed them to run instances without a valid card.
They blocked my account, which also blocked this support thread. So I started a new thread from an alternative e-mail address to resolve the issues.
I never heard from them again.
I like passing in pre-allocated containers to house the results of my computation. That way I have not only predictable memory consumption, but I can also avoid costly allocation (and de-allocation) in tight loops. Having worked with Go a bit, there were times when I used this (like passing in byte slices to readers), but oftentimes you couldn't just tell a function not to allocate (which it did for safety), because you and only you knew it'd be safe to modify the structure in place.
The bottom line is that people should not be "always copy/always use pure functions" or "always use mutable structures, because performance!!!", but be aware of what the upsides and downsides of each are.