On the Mac, I can run MacOS, BSD Unix, and via VMware, Windows and Ubuntu.
On phone/tablet, I can build an app that works on every mobile device of that class shipped in the last 6 years.
On Windows and Android, I have to test apps across a massive combination of features, and even then, there are some with strange configurations that will break the app.
I actually tried letting ChatGPT-4o write some tests the other day.
Easily 50% of the tests were wrong. They ignored DB uniqueness constrains or even datatypes. In a few cases, they just hallucinated field names that didn’t exist.
I ended up spending just as much time cleaning up the cruft as writing them. I could easily see someone just starting out letting the code go through.
Downloadable topo maps for a Mac? How are you supposed to view them while hiking? 🤔
Remembering ActiveX Controls, the Web’s Biggest Mistake: https://www.howtogeek.com/717016/remembering-activex-controls-the-webs-biggest-mistake/
Trying to Sherlock 1Passwd a second time? They tried it with iCloud passwords and it didn’t work.
Live and learn, kids.
Edit: To be clear, 1Passwd survived by:
They had the know-how, people, and money to pull it off. Not every indie app getting Sherlocked can do that.
If using pyenv to support multiple python versions, when creating venvs, make sure to pass --copies
to it.
% python3 -m venv venv --copies
Ordinarily, venv uses symbolic links back to the current version of the python binary. A lot of tools and IDEs don’t traverse symbolic links. That flag actually copies the real binaries over to the venv.
This avoids a metric ton of hard-to-diagnose misery later on.
So on their opinion of Kevin Roose… putting Decider down as “on the fence.”
Outstanding!
Watching it, my first thought was if it could also be used as s display for a large calculator? Guessing the computation part would require electronics, but then again, there used to be geared tabletop calculators.
Very nice work.
Oh man, you would have loved a project I was working on ~15 years ago.
The argument in the blog post sounds like one of those technologies that says “it works great once you have a billion users! Just wait and see.”
Tried it once. It was a testing nightmare, trying to catch all the varying edge cases. Gave up and never looked back.
Anyone tempted to write a custom database should ask if they’re prepared to be in the database maintenance business.
Because that’s where they’re heading, for a really long time.
A few suggestions:
Having people remember all the docker, django, and poetry commands just slows things down. Maybe wrap those in a shell script, or better, in a pyinvoke tasks.py, or more even better, in a CLI using argparse or click. This way, people can install your tool using pip and create new projects, manage, and run them quickly.
If you need the user to answer a few interactive questions, questionary is pretty decent. The click library also lets you ask for input, have defaults, and also load values from environment variables.
Have lots of defaults in a central .env or config file that people can customize once the project has been created. Things like separate dev, test, prod or local and cloud settings.py files help keep things organized.
Think about ultimate deployment. Where is such a project going to get installed? As a single docker container, scalability is limited. Which cloud hosting services can you push to with one command? Add those to your pyinvoke or CLI.
When deploying to cloud, make sure security best practices are maintained. Keep SECRETS and API keys in a separate file which is also listed in your .gitignore so it doesn’t get accidentally checked in.
Think about the different stages. Initial, ongoing dev, testing, first deploy, and continuing updates after that. What can you do to make the job of the dev easier?
Let’s rewind the time machine… the original web concept was addressing a much smaller problem. That a document could reference or ‘link’ to another document. It came right after ‘gopher’ which was used as an index of indexes and had a text-based app that let you navigate the line items back and forth.
Then came Ted Nelson’s idea of ‘hyperlinks.’ The original web mashed those two ideas together and threw in a sprinkling of SGML. There was no notion of styling of the presentation, a GUI, use of the mouse, multimedia, animation, or ‘scripting.’ It was just gopher with inline links, expressed in embedded markup.
Multiple other players (Netscape, Microsoft, IBM, et al) morphed and bolted on extensions without really considering the consequences. The thing the web had going for it was precisely this decentralized process. It made for rapid evolution, but it also meant there was (and continues to be) a lot of fragmentation. Anyone wanting to go back and revisit something hacky had a lot of legacy inertia to overcome.
So here we are today. It’s a messy, junkyard jalopy, but it does just enough that nobody has the time or energy to go back and clean up the technical debt. And if you want to start from scratch, it has to do much better than what is there today, while offering a reason for millions of people to unlearn what they know.
As for sending ‘processes’ that’s essentially what a VM is. You’re sending a compact process as code (javascript, python, wasm, native binary) that a local runtime executes. We have app stores that manage the lifecycle, and script libraries to create abstractions and hide details. The embedded Javascript VM is as close as we have to a universal code execution environment.
Sending ‘processes’ around also should account for malicious actors trying to do bad things. We’ve all seen how that ended up.
That’s not to say people shouldn’t try to innovate, but at this point, it’s like trying to reinvent driving or the telephone.
pyinvoke.
You can create quick and dirty CLIs, invoke shell commands, and have all of python available for things like parsing config files, getting and setting environment variables, and making remote REST calls.
Have started experimenting with OpenTelemetry (https://opentelemetry.io/docs/what-is-opentelemetry/) to add observability to different parts of the stack running inside a Docker container.
Not gotten far enough to recommend anything specific, but there is big ecosystem of open source collectors and analytics tools out there.
Good to see proliferation of presence detectors. Good for turning things off when nobody is around.
In my last job I got to play a bit with the SeeedStudio mmWave presence box. What was interesting (and a little confusing) was that it took multiple add-on boards for things like on-device fall detection (for elderly). For the time I had with it, it worked fine with HA: https://wiki.seeedstudio.com/mmwave_radar_Intro/