The only annoyance is that Garmin requires 2FA if you enable the ECG feature on your smart watch/fitness tracker, but I have a small program that reads the 2FA codes from my Gmail inbox and supplies them to the scraper without too much trouble.
Have you looked at the feasibility of making your own CIQ app to push data from the watch to your alternate internet endpoint?
I have the impression there are permissions and APIs to access sensor history and activity records, but I haven't had a need to dig in and learn what restrictions there might be...
Or they are not a native speaker. I guess it's a "damned if you do, damned if you don't situation". Use a LLM to clean up your own prose? Bad. Post your unedited (or self-edited) prose? I guess it is "not human".
I know it's this is a rather long tangent and not the main point of the article, but regarding "Docker Swarm over Kubernetes", I've had a ton of bad experiences at my employer running a production Swarm cluster. Among them:
- Docker Swarm and Docker Compose use different parsers for `docker-compose.yaml` files, which may lead to the same file working with Compose but not with Swarm ([1]).
- A Docker network only supports up to 128 joined containers (at least when using Swarm). This is due to the default address space for a Docker network using a /24 network (which the documentation only mentions in passing). But, Docker Swarm may not always show error message indicating that it's a network problem. Sometimes services would just stay in "New" state forever without any indictation what's wrong (see e.g. [2]).
- When looking a up a service name, Docker Swarm will use the IP from the first network (sorted lexically) where the service name exists. In a multi-tenant setup, where a lot of services are connected to an ingress network (i.e. Taefik), this may lead to a service connecting to a container from a different network than expected. The only solution is to always append the network name to the service name (e.g. service.customer-network; see [3]).
- Due to some reason I still wasn't able to figure out, the cluster will sometimes just break. The leader loses its connection to the other manager nodes, which in turn do NOT elect a new leader. The only solution is to force-recreate the whole cluster and then redeploy all workloads (see [4]).
Sure, our use case is somewhat special (running a cluster used by a lot of tenants), and we were able to find workarounds (some more dirty than others) to most of our issues with Docker Swarm. But what annoys me is that for almost all of the issues we had, there was a GitHub ticket that didn't get any official response for years. And in many cases, the reporters just give up waiting and migrate to K8s out of despair or frustration. Just a few quotes from the linked issues:
> We, too, started out with Docker Swarm and quickly saw all our production clusters crashing every few days because of this bug. […] This was well over two years (!) ago. This was when I made the hard decision to migrate to K3s. We never looked back.
> We recently entirely gave up on Docker Swarm. Our new cluster runs on Kubernetes, and we've written scripts and templates for ourselves to reduce the network-stack management complexities to a manageable level for us. […] In our opinion, Docker Swarm is not a production-ready containerization environment and never will be. […] Years of waiting and hoping have proved fruitless, and we finally had to go to something reliable (albeit harder to deal with).
> IMO, Docker Swarm is just not ready for prime-time as an enterprise-grade cluster/container approach. The fact that it is possible to trivially (through no apparent fault of your own) have your management cluster suddenly go brainless is an outrage. And "fixing" the problem by recreating your management cluster is NOT a FIX! It's a forced recreation of your entire enterprise almost from scratch. This should never need to happen. But if you run Docker Swarm long enough, it WILL happen to you. And you WILL plunge into a Hell the scope of which is precisely defined by the size and scope of your containerization empire. In our case, this was half a night in Hell. […] This event was the last straw for us. Moving to Kubernetes. Good luck to you hardy souls staying on Docker Swarm!
Sorry, if this seems like like Docker Swarm bashing. K8s has it's own issues, for sure! But at least there is a big community to turn to for help, if things to sideways.
- Aldi (supermarket chain), founded by the Albrecht brothers, thus ALbrecht DIskont
- Adidas, founded by ADolf DASsler
- Mercedes-Benz, named by Emil Jellinek-Mercedes after his daughter Mercedes, initially with Daimler which then merged with Benz
- Audi, founded by August Horch. Initially founded as _A. Horch & Cie. Motorwagenwerke Zwickau_, he later lost the rights to the name "Horch". He named his new company "Audi", which is a translation of his name into Latin: in German, "horch" is the imperative for "horchen" (to listen), which maps to "audi" as the imperative for "audire" in Latin
And then there are a just a ton of companies named after their founders (Porsche, Bosch, Siemens, …) but I'm not sure if these count :)
It seems like these are different than the ones in the website. These are not really "unexpected" in the way that "PageRank", which is an algorithm for ranking pages, turns out not to be names after the pages it ranks, but the Page that invented it.
The examples in your post are just the source of these names, which may be unknown to many, but are not unexpected.
I sometimes feel that German founders are too stuck on naming their company after themself, some of them really should have looked for alternatives, e.g. https://de.wikipedia.org/wiki/Seppelfricke
It’s generally the result of them starting as personal or family businesses, so initially your brand is your name. Then the business grows so large the relationship inverts. It does not have much to do with germany really, it’s common the world over.
For example, just from US car brand, you obviously have Ford, but also Olds (Ransom E.), Chevrolet (Louis and Arthur), Buick (David), Chrystler (Walter), Dodge (Horace Elgin and John Francis), …
And I can’t fault a German industrialist from 1910 for not English-proofing his business.
It's not the lack of English-proofing, it's the connotations that this name has for Germans: "Sepp" is a very common and not really glamourous first name/nickname, and "frickeln" means tinkering or fiddling around with something (usually with the negative sense of tinkering rather than fixing it properly).
I don't see the connection to German founders there, as many small / medium sized businesses like the one you linked are called after their founders everywhere (plumbers, printers, electricians,...)
I was quite surprised to discover the source of the names of British supermarket chains Tesco and Waitrose.
Waitrose is a contraction of "Waite, Rose & Taylor"
Tesco is the combination of a supplier's name, with the founder's (Jack Cohen) name. They also have a "Jack's" brand.
Another recommendatation in a similar vein: The Brady Heywood Podcast's Apollo 13 series [1]. It's almost 6 hours in total, includes a lot of original voice recordings and explains a lot about what's going on in the background. Really worth a listen if you're into podcasts :)
13 Minutes to the moon is a Apollo 11 deep dive done by the BBC, with a Hans Zimmer soundtrack. The podcast series focuses on the last 13 minutes of descent in Apollo 11, but does a deep background story to explain the whole Apollo missions, the astronauts involved as well as the behind the scenes stories of mission control.
Nothing groundbreaking or new, just a solid retelling of the Apollo story from interviews or recordings.
After seeing the demos my biggest question is: how will this not lead to people just accepting whatever GitHub Copilot suggests while introducing subtle yet catastrophic errors? Basically, how is this not going to become an alternative to just copy-pasting StackOverflow answers without verification? Especially given the IDE integration…
And to at least partially answer my own question, straight form the FAQ:
> Can GitHub Copilot introduce insecure code in its suggestions?
> There’s a lot of public code in the world with insecure coding patterns, bugs, or references to outdated APIs or idioms. When GitHub Copilot synthesizes code suggestions based on this data, it can also synthesize code that contains these undesirable patterns. This is something we care a lot about at GitHub, and in recent years we’ve provided tools such as Actions, Dependabot, and CodeQL to open source projects to help improve code quality. Similarly, as GitHub Copilot improves, we will work to exclude insecure or low-quality code from the training set. Of course, you should always use GitHub Copilot together with testing practices and security tools, as well as your own judgment.
Basically, they seem to hope that people will either be really careful about the suggested code or have existing code analysis workflows that would catch errors
Like any tool, you still need to understand the fundamentals to use it well. Anyone can use a table saw, but if you don't know what you're doing, it can be really easy to cut off a finger.
I brought down production for a project — by running the deployment CI pipeline for already deployed commit. A couple of minutes later, production was thoroughly dead.
Turned out that my coworker had set up the CI process to use a PHP-based zero downtime deployment scheme where each release was deployed into a folder with the commit hash as name and then a symlink was updated to point the web root to this new release folder.
But, critically, he also configured CI to delete old releases at the end of the deployment pipeline - by removing all release folders older than three days. And by re-deploying a commit older than three days, after uploading the code and updating the symlink, the release‘s folder was considered old and deleted at the end of the pipeline, leaving the webserver with an empty directory as web root.
> JSON, which is [...] unambiguous about its types
With the one exception that with floatig point values the precision is not specified in the JSON spec and thus is implementation defined[1] which may lead to its own issues and corner cases. It for sure is better than YAML's 'NO' problem, but depending on your needs JSON may have issues as well
Allowing you to define types is quite uncommon, but many config languages allow more types than JSON (so more than boolean, number, string, list, dict). Date datatypes are a big one and are provided by about every second JSON variant, in addition to TOML, ION and others.
reply