We’ll be meeting at Social House this evening. Trying out a new thing where we offer small custom souvenir collectibles to folks that show up at meetings. Gotta catch ’em all. We’ll see if this takes. It fits well with our upcoming “library tour” plans.
Social House in South Riding, VA. Approximately 1830. Look for the table of nerds.
I’ve found these Lanner 1U network appliances incredibly useful. Nice small factor, lots of network ports to do fun things with. They make fantastic Linux routing appliances. They’re kind of old-school, though, they have these LCD panel modules with four buttons.
I’ve been using them off-label for so long I can’t even remember what the panels were originally for.
See, the first thing I do is connect serial, boot to USB and install something modern on it. Rocky, Ubuntu, whatever.
Last week I went to explore the LCD panels, and see if I could make use of them. Maybe as a periodic status display or something. For the first time in years, I consulted the actual manual for these devices. It turns out, they’re connected to the motherboard internally via an internal parallel port.
The manual suggests using the drivers found at https://github.com/majodu/plcm_drv_v013 but they are so old they’re meant for Linux kernel 3 and below. So the first thing I did was clone the repository. After looking at it for a few minutes I realized I didn’t need everything it was delivering, I just needed the kernel module itself, which is compiled via the “boot” argument. Looking at the Makefile it was pretty clear what the logic was in “boot:”
So the first thing I did, since my installed platform used kernel 5, was change the KVERS3 line to ifeq ($(KVER3),5) so that it would run the make on my kernel.
I was able to compile the kernel module. It barked at something else it was trying to install, but since all I really needed was the test executable and the kernel module for now, I ignored that.
Then I ran into an issue loading the newly-created kernel module. It didn’t like the major number associated with the driver, 248. Looking at /proc/devices I could see that 248 was in use by ptp, so I edited the Makefile and plcm_drv.c to use 239 instead, since that was available. I recompiled, and was able to load that kernel module just fine. After that, the plcm_test executable successfully ran and displayed stuff on the LCD panel and accepted button presses.
Good enough for now, at least I know I can write something in C to display something and receive button presses. Now to think through a good use case for this silly hoop I just jumped through…
I’ve been mucking around with synthesizers and sound for decades. Still, when I broke out of semimodular into full modular, there was still a missing piece of the puzzle.
The first modules I got were somewhat complete, with a gate or trigger in and audio outs, sometimes both left and right. It wasn’t until I got my first “pure oscillator” style module, which happened to be Castor & Pollux, that I scratched my head, realizing I had descended into the next level of the rabbit hole of synthesizer deconstruction. The module had no gate in, just CV controls for pitch and PWM. There are audio outs for Castor, Pollux, and Mix, and outs for the different waves. So I had to quickly learn how to shape sound in the modular world.
I learned that what I was looking for was an ADSR and a VCA. The ADSR shapes the envelope, and that envelope goes into the CV level control of the VCA alongside the audio, and shapes the audio to match the selected ADSR.
Being (a) a beginner, (b) cheap, and (c) simple, I quickly settled on a combined module, the WMD ADSRVCA. It’s got a gate in, audio in, audio out to make the simplest connection with the least patching. Patch audio to IN, patch a gate signal to GATE, and OUT to my mixer, and bam. I have tamed my Castor & Pollux. I can shape the sound with the ADSR knobs.
I quickly realized I would need more of these. First of all, there are two signals in Castor & Pollux. I’ll want to shape both of them, perhaps differently.
Holy crap, this is going to be expensive and take up a lot of space.
Next I latched on the Doepfer A142-2, a dual env-controlled VCA. Most of the benefits of the ADSRVCA, but for two channels, and with the added flexibility that both can be triggered by single gate. And for not much more HP. LOVE IT.
Also, it keeps me from the complication of buying separate ADSRs and VCAs and patching them together. LOL, I save money on patch cables, right?
Well, it works. And it works great. But to be honest, the A142-2 doesn’t shape with as much granularity as the ADSRVCA. I’m spoiled now, because the ADSRVCA is the first, and how is anything going to live up to that.
To me, the whole envelope thing is one of the most confusing aspects of getting started in modular. Not every oscillator module has a gate in. Hell, they don’t even all have a CV-controllable level into which you could pipe an ADSR in. Us newer modular folks are definitely spoiled, because so many of them are usable as standalone modules with gate and already-shaped sounds that we get used to that, and it’s almost a surprise when you get something like the 4ms ensemble and go “shit, I need another envelope or two.”
You quickly find that it gets complicated and expensive to add more. There don’t seem to be any good, dense solutions available. I’m looking at the After Later QARV next.
Module
ADSR/VCA channels
HP
Price
Notes
WMD ADSRVCA
1
6
160?
Discontinued
Doepfer A142-2
2
8
120 used
After Later QARV
4
20
224
The main complaint about the QARV seems to be knob density vs playability. This is how schizophrenic we are in modular. We want rack density, but then it makes it hard to fit our fat fingers in there and twiddle the knobs. Also we blow up our power supplies.
On the one hand, I’m sad that WMD shut down. If they hadn’t, those ADSRVCAs might be more affordable and I could just get more of those. On the other hand, I think quality ADSR/VCA combos are a relatively untapped market, and the hardware person that gets it right could make TENS OF DOLLARS.
I’m still new at this. While I’m technically aware that I can detangle envelopes from VCAs and use them to shape other things, I haven’t run into a real use case for that yet. Until then, I’ll keep twiddling and blowing my kids’ inheritance on pieces of synths, eventually resulting in a $20,000 synth setup that sounds almost as good as a $3,000 commercial synth.
What the fuck is wrong with me?
Update: There is also a somewhat tempting option by BASTL, the SKIS II, a dual ADSR VCA in a 5HP footprint. The downside? The only knobs are for Decay. Interestingly, it looks like it can be switched between linear or exponential decay, and between gate and trigger mode, by jumpers on the back.
The HP is right (5), and the price is right ($118).
UPDATE: I picked up a BASTL Skis II. It arrived today, and it works just fine for what I’m doing with it. I piped the two outputs from 4ms Ensemble into the two inputs on BASTL, then took two channels from Pamela’s New Workout, each at 8x with RSKIP set to 59, set the decay up around 2:00, and the signals offset and fade into each other quite nicely. Plus I got the BASTL for just $100.
The current plan is to meet in the basement again on Monday 4/10 in the usual 1830 timeframe. If you’ve been there before, you’re welcome to join us again.
I managed to shrink a whole bunch of data into a single-page, semi-coherent dashboard. The only thing not automated on this whole thing is weight. I have my Withings scale communicating with Health Mate which is tied to Google Fit, and Oura is supposed to swing with Google Fit, but that intermittent weight data isn’t it making it into Oura. So I’m using the “Tags” feature fo the Oura app to enter my weight every morning, and my script recognizes the data type and inserts a MySQL row for it. I have less than 30 days of data at this point. I can’t wait to see what 90 days or even a year looks like. I’ll probably be making these graphs even more pretty and useful as my time and experience with Grafana increases. A week ago was the first time I touched it.
Tonight we venture into the world of Charlieplexing. Don’t be late.
Some of us may slide over into the main Monday channel after class, if we see anyone there. So if you wish to interact, hang out in the Monday voice channel around 7:30ish.
So here’s what happens when you give a data junkie an API, MySQL, a few hours of Python import coding, and 15 minutes to install and learn Grafana. All of this data is directly imported from the Oura Ring API.
I swore off of fitness data acquisition a while back. I hated the way big tech invasively mines your data, and I hated the Black Mirror-level machinations they seem to have for it.
But when I caught Covid at Def Con last year, a friend mentioned in passing that NIH was doing a Covid study and needed volunteers. I looked into it, and it seemed interesting, so I signed up. The study provided a BioStrap Evo wristband and an underarm temperature sensor. The study was gathering metrics to explore the relationships between bio data and long covid, I guess to try to create better predictions of who is at risk for long covid, etc.
It was a six-month study. The BioStrap collects interesting data, especially on sleep cycles, and I grew rather accustomed to looking at that data. I found it helpful, and started looking into the best options for collecting fitness and workout data without necessarily providing it to big tech.
Also, most of the services are subscription services, and it doesn’t make sense to me to subscribe to multiple services that essentially provide the same thing, with maybe small variations on how the data is presented.
I’m a data junkie at heart, I love having access to raw data to create my own presentations, interpretations, and correlations. I’m also a lazy engineer, so I prefer automating things up front and avoiding manual or repetitive work. So I looked forward to my options.
I wasn’t particularly fond of the BioStrap form factor, to be honest. It’s a wristband without a display, so you’re relying on the app. The bluetooth comms between the wristband and the app can be sketchy at times, requiring bluetooth resets, phone reboots, and sometimes deleting and re-adding the device profile to re-establish comms. Data is lost when that happens.
I started looking at competing products. I read a lot of good things about the Oura Ring, which I had looked at a year or so earlier, but rejected because I was still in the anti-tech-data mode. I discovered they have an API, so you have access to the data collected. So I bought one, and have been mucking with it for a couple of weeks now. The stats seem to be pretty close to what the BioStrap provided, but I like the ring form factor much better than the wristband (which makes me look like I’m wearing two watches), and the charge lasts for several days, where the BioStrap pretty much needs a charge daily.
This morning, I woke up with the intent of exploring that API a bit.
So far I’ve been able to pull in workouts for the past couple of weeks, including date, type of workout, intensity, length of workout, and calories burned (based on Oura’s calculations, of course). I’m also able to pull in the “tags,” which is sort of a custom comment field where you can add a mood, or an activity, for correlation. Some examples include noting when you drink alcohol, or getting a massage, and looking at how those activities affect your heart rate, sleep, and “recovery” level.
I’m also able to log workouts into my self-hosted Gitlab instance, which is not the best way to track workouts, but at least it accumulates time and comments. I’ve also installed a local instance of WGER, which is some odd combination of workout scheduling and “gym management.” It seems like WGER has a bit of an identity crisis going on. I tell you what, if WGER decided to go all in on allowing users to import fitness data from other apps with APIs, such as Oura, Google Fit, Strava, Apple, etc., I feel like the user base would explode.
It’ll take more time to pull in heart rate data, which seems to take averages every five minutes. That really seems to lend itself to something like MRTG, RRDTool, Grafana, etc. And the other data is in there as well. Looking at heart rate variation over time could be interesting, correlating it to workouts, sleep data, and other activities. I guarantee there are some DIY folks whose imaginations are bigger than BFT (Big Fitness Tech) when it comes to chewing on and presenting data.
But the really cool part is the automation. I’ve got it pulling the data in daily via cron job. I simply “record workout” when I start a workout, and end it when I’m done (via the phone app) and the rest of the collection and distribution of my data happens behind the scenes.
Look, I realize my lifestyle is a bit of an anachronism. I prefer keeping things working vs buying replacements when possible. I don’t mind getting my hands dirty and doing a deep-dive if it means my tech will last longer.
Here are two examples from recent weeks.
I scan all of my documents into a Mayan EDMS installation in my home network. Incoming mail, contracts, documentation, you name it. In the early days, I used an all-in-one scanner, but the feeder was less than optimal. I shopped for network scanners, but so, so pricy. So I picked up a USB scanner with a decent feeder, the Fujitsu ScanSnap S1500. I posted about this project. It scans in color, and scans both sides. It’s a relatively simple device, and until last week, I considered it super reliable. Last week I rearranged my office and moved it to a different table. Suddenly it would no longer feed. It emitted a horrific grinding sound. Research revealed that the rubber feed rollers had turned to goo, and would no longer spin. I was at a loss on how this happened, until I read the manual. You know, that pesky thing a lot of us tech folks don’t bother to read? Apparently the expectation is that we clean the rollers FREQUENTLY with F1 cleaner. I don’t know what freaking ink I’ve been scanning that eats rollers, but for reference, here is what rollers in good condition look like:
Feed rollers in good condition
And here is what my rollers looked like after I used a razor and tweezers to peel them off of the shaft:
Roller goo
I have found feed roller shaft replacements on the ubiquitous web shopping site, but I have yet to find any document explaining how to disassemble and replace that particular part. It’s not obvious, anyway. The main parts Fujitsu consider consumable are the pick roller and pad assembly. I’ll dig down and figure it out at some point. For now, I just bought another scanner (super cheap) with rollers in good condition. There’s also mention somewhere of buying just the rollers, slicing one side of them and slipping them onto the existing shafts.
Considering the cost of network scanners, even buying two of them I got a deal (made them networked via Raspberry Pi, see prior post).
PART 2: THE QNAP
I have a QNAP with 8TB of disk space on it. This equates to 5.4TB of usable space in the RAID. I want to upgrade but I’m terrified of disrupting the gobs and gobs of media I’ve got stored on it. So I went shopping for a new one. They’re ridiculously expensive, some of them. But I found one “for parts or repair” for just $67. I did some research, and was convinced I could restore it to service. It’s a TS-453 Pro, which suffers from the famous J1900 LPC bug, which causes it to degrade and become unbootable. I got the sense from the listing that the “fix” (which may be temporary) was never attempted on this unit, and I was correct. The fix involves soldering a 100 ohm resistor from the clock pin to ground. The headers appeared unmolested on the board, so I grabbed a resistor from the basement and quickly soldered it into place. Sure enough, it booted right up. I slapped four 1TB hard drives from my surplus rack into it, and got the unit fully upgraded and functional. Then I ordered four 12TB drives to truly populate it. When they come, I’ll go through the recommended exercise of replacing each drive in the array one by one, and waiting for RAID to complete rebuilding itself, until all of the drives are replaced, and then expanding the storage pool and volume. I looked into a current equivalent of what I’m assembling — the Synology with 48TB of space is $1359 at B&H. I put this together for under $600. If it fails (nobody seems to know if the “fix” is permanent or just prolonging the inevitable — it’s a real scandal) I still have the other QNAP and should be able to just import the drives into that unit. Or maybe I’ll buy a brand-new 6-bay or 8-bay when that time comes. Who knows?