Great article about software dependencies: Our Software Dependency Problem
So you're heading on a trip from NYC to Washington D.C. via train? Great! Here are some guidelines.
Now that you've arrived at Washington Union Station, there are a few more guidelines:
Yes, all of these things have happened, most of them today.
At work, I've built a command-line client program for a number of microservices, which mostly do CRUD operations. I am looking to add search capabilities, but this is not as easy a task as I'd thought.
Let's call this client program boxer, because that's what it's actually named.
So using boxer, one can query a service to return an item in a database. Let's call this a thingy (not what it's really called). Getting a thingy is simple:
boxer get thingy [thing name]
And if we want a list of thingies:
boxer list thingies
With me so far? This is easy stuff. But what if we want to filter that list of thingies? Maybe it looks like this:
boxer list thingies where name = 'monkey' boxer list thingies where name = 'goat' and version = 1
That's a little SQL-like. Or maybe it looks like this:
boxer list thingies --name 'monkey' boxer list thingies --name 'goat' --version 1
But then the client program would have to know the structure of the data at the time it builds the argument parser - this is either really difficult, or involves querying the API for information. Probably not worth doing.
boxer list thingies | jq '.|(select(.name=="monkey"))'
This of course gets messy, and when you have a LOT of data, it's expensive to fetch ALL of it each time you only want a subset. Better to do the filtering at the back-end.
Some things I figure people will commonly search for:
I've been searching for any sort of "standard" for doing this, but so far I've come up empty. Lots of programs do this kind of thing, but it seems that everyone just re-invents the wheel each time, and there's no consistency.
So I'd be interested in ideas here :)
These images are all 368x736, the 5T is 1080x2160, so this should be decent enough.
So I've been meaning to replace the old battery-backed RAM in my Taxi pinball machine for a while, and so when I had nothing better to do on Sunday, I started poking around to figure out what I needed.
Got that ordered, and since I was on a roll, I replaced a bunch of bulbs that were out.
And then I started testing the power supply power...
At this point I was making a day of it.
I the process of figuring out what I've got, I realized that Williams actually labeled all of the circuit boards with a serial number, and the model number of the game it was intended for (or at least, came from.
Taxi is #553.
All of this means that my machine has been through an extensive refurb before.
I checked IPSND too - nobody else registered the serial numbers.
Today, I started investigating why the "spin-out" launcher ramp wasn't working as well as it used to. I think it's because the launcher makes contact too high on the ball, but I haven't really finished the investigation yet.
One suggestion was to make sure the switch that registers a rotation around the spin-out bowl is just barely resistant, so it doesn't slow the ball down... and while taking the assembly out, I found a major part of the issue is a crack in the plastic.
But then, when I took the entire assembly out, I found more evidence of a previous refurb - someone "fixed" this by applying metal duct tape to the underside of the spinner, to keep the cracked chunk in place.
Curiouser and curiouser.
So here's the next few steps:
Who wants their high scores to disappear when shutting the machine off? Who wants to have to setup all the system settings ever time you turn the machine on?
Or more importantly, who wants leaky AA batteries ruining your main board?
I've already had issues with circuitry overheating - I bought the machine with serious damage to the interconnect board (J6 of course), so this task seems pretty simple and good for longevity.
You replace all the TIP-42 transistors and their 27-ohm current limiting resistors with much cooler MOSFETs (I ordered the IRF9530).
The display takes 100V normally, but if you replace the 1N4764A zener diodes in the power supply with 1N4763A, it then runs at 91V, and it'll last a lot longer.
Caps get old. I used to repair engine control units in DSM cars, because when caps get old, they leak. $23, no brainer.
Also I think my big 18,000 mfd filtering capacitor is going.
Unfortunately, I'll have to remove the express lanes to get to this one.
I'm not sure if this is a level issue, or the playfield has sagged a bit, or if the appears-misaligned launcher is the issue - it could just be I need a new spin-out assembly.
Since I'm typing this up, here's what I've already done over the past over 15 years (I bought it in about 2002), roughly in order:
Mostly, I decided I just wouldn’t re-invent the wheel.
Also on the left, the tags list is auto-generated. Individual tag pages are automatically generated using jekyll-tagging.
On the right, we’ve got posts pulled from my Instagram account, using their soon-to-be-deprecated Instagram API. I have a script which basically generates a Jekyll Collection from the available posts, and then I render that with a simple bit of Liquid.
Probably I’m going to have to do some really annoying data scraping if I want to keep having this work in the future.
Plugins are done in Ruby. I don’t like Ruby.
Also, a lot of the URLs have changed, but I’m not sure just how much I care about that. I mean, who would be linking to this site?
Hi, this is a test post. I'm arguing with the tree on the side. Some useful links which discuss ways to do this:
Recently I decided it’s about time to retire the ancient server that has been running my website (and mail and dns and a bunch of other things) - It’s a Northwood Pentium 4 Xeon from 2002, the kind with Hyperthreading. Running Linux 3.7.10. 32-bit.
Yes, that’s old.
Rather than upgrade, I’m probably moving all of this somewhere else, likely a cheap VPS somewhere… and since there’s a whole bunch of really old Perl running things here… I’ve been doing some rewriting.
The original website I put on this current server used a backend based on some unspeakable perl, but the most recent was using Pylons… and by “recent” I mean circa 2010. So yeah, that’s got to be redone. I pondered another web application, but decided that rather than doing on-the-fly content generation from templates, why not just pre-generate it?
Since I’m doing it all new, I’m finally going to go full SSL, via Let’s Encrypt. Yeah, about time.
So yeah. Stay tuned.
Coworker Greg said something about the "bytiness" of files, when he was talking about their sizes. He was talking about file sizes, but my mind wandered a little bit down the rabbit hole of defining "bytiness" clearly.
So here's my interpretation of what that means, implemented in Go. Because sometimes I like Go. No, really.