Security and open source at the hardware/software interface. Embedded sec @ IOActive. Lead dev of ngscopeclient/libscopehal. GHz probe designer. Open source networking hardware. "So others may live" Toots searchable on tootfinder.
Public Key
npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Profile Code
nprofile1qqsvxk504cz6sw9cvdc8sqamrl0uljanntw0q8hp48799m6ynxxwfsqpz4mhxue69uhhyetvv9ujuerfw36x7tnsw43qz9thwden5te0wfjkccte9ekk7um5wgh8qatzsljs6d
Show more details
Published at
2026-08-17T09:28:56Z Event JSON
{
"id": "3ae6dc84756b1a2cd852dab6a4168319792eece73b1b43118926509963dbbab8" ,
"pubkey": "c35a8fae05a838b863707803bb1fdfcfcbb39adcf01ee1a9fc52ef44998ce4c0" ,
"created_at": 1786958936 ,
"kind": 0 ,
"tags": [
[
"proxy",
"https://ioc.exchange/users/azonenberg",
"activitypub"
],
[
"client",
"Mostr",
"31990:6be38f8c63df7dbf84db7ec4a6e6fbbd8d19dca3b980efad18585c46f04b26f9:mostr",
"wss://relay.ditto.pub"
]
],
"content": "{\"name\":\"Andrew Zonenberg\",\"about\":\"Security and open source at the hardware/software interface. Embedded sec @ IOActive. Lead dev of ngscopeclient/libscopehal. GHz probe designer. Open source networking hardware. \\\"So others may live\\\"\\n\\nToots searchable on tootfinder.\",\"picture\":\"https://files.ioc.exchange/iocexchange/accounts/avatars/109/320/697/263/826/535/original/452045644aa6671b.jpg\",\"banner\":\"https://files.ioc.exchange/iocexchange/accounts/headers/109/320/697/263/826/535/original/e9bac12e369b65ab.jpg\",\"nip05\":\"[email protected] \",\"fields\":[[\"ngscopeclient\",\"https://www.ngscopeclient.org/\"],[\"Blog\",\"https://serd.es\"],[\"Location\",\"Seattle area\"],[\"GitHub\",\"https://github.com/azonenberg\"]]}" ,
"sig": "cb95ac608aeab68392a1b7690fbb84c99f889d01b555a8af01eb4e9c9dc72da571cf1bb2c7079e4e3888eeaa0fe937637ca6fff6a4671d09d51eb914990f5ed7"
}
Last Notes npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg @nprofile…k7h5 is this much extra IL in line with what you'd expect on oshpark from plating and copper roughness? npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg The design target for this filter was 10.25 GHz Fc and 250 MHz -3 dB BW. The actual as-fabricated filter seems to be more like 9.92 GHz Fc and 292 MHz -3 dB. I don't really feel confident making any claims about stopband rejection because of the poor dynamic range of this setup, but the hump around 10.7 GHz is not ideal. I saw some ground plane resonances in the simulation and wasn't sure if they were real, it seems they might be? Once I get more detailed S-parameter data with better dynamic range I'll go back to the simulations and revisit. npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg It's... definitely a filter. I can say that much. Not sure what's up with the 0 dB regions at start and end of the sweep, it's clearly a bug (The waveform behavior doesn't match, it's definitely not actually 0 dB) I'm pushing limits of what I can do as far as dynamic range easily. The Siglent is putting +16 dBm into the doubler (which has an absolute max of +20 so it's safe but not leaving much margin). The doubler is only specced for 10-20 GHz input so 5-10 GHz input and trying to sweep down to 4 GHz on the input means I'm operating out of spec but it seems to mostly work. The doubler has ~12 dB of conversion loss so I only have about +4 dBm coming out of it, which isn't a ton of stimulus energy when the DUT is this lossy. I'm not sure why it's coming out as 30 dB IL. My simulations said it would be more like 15, plus copper roughness and ENIG plating losses which I did not expect to add another 15 dB. I expect the filter rolloff is a lot sharper than what's shown here but the -45 dB loss range is putting me basically at the noise floor of the scope. I could try to get more dynamic range by adding an amplifier after the doubler, but i'm a bit sketched out about putting big RF PAs on something going into a $10K-to-repair-if-damaged 16 GHz frontend that is rated for +/- 2V p-p. Probably better to just send the thing to somebody who has a real VNA that can work at these frequencies. https://files.ioc.exchange/iocexchange/media_attachments/files/117/141/640/506/967/904/original/2c79639af076224a.png npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg @nprofile…skdr even like an fpga with 1/10 the logic that's "oops all transceivers" would be nice lol npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg @nprofile…skdr lol that's entirely the point i would want something with a much smaller die that's just a bunch of serdes with a tiny bit of glue between. You don't need a ku3p of compute to do this npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg @nprofile…scs2 @nprofile…tayt interesting, we probably won't support that setup exactly because all 3 synthesizers will share the same 10 MHz reference clock. There will be two up conversion LOs and a crossbar so you can use either LO to upconvert either input, then a single shared downconversion LO for the final i/q mix stage npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg Years ago I remember hearing a story of a real-life Shrek who just wanted to live in a swamp and be left alone. His family had once owned a lot of land, maybe a farm, in the area but most of it had been sold off and was being gradually developed. He still owned a house and a small plot of land though, and couldn't stand the encroaching suburbs and strip malls. After a bit of exploring he discovered some streams and swamps in a neighboring, vacant lot and contacted the state about it. Before long, that land was legally a protected wetland that would be expensive or impossible to develop, guaranteeing him a buffer against the approaching subdivisions. But this made the land decrease in value, since no developer would buy it. So he picked up this plot for a fraction of what a buildable plot in the same area would cost. After a bit of excavation and streambed restoration, he expanded the wetlands right up to the next property line. But this also meant a sizeable chunk of the neighboring lot earned protected wetland status, making *it* unbuildable and reducing its value. I forget how many times he repeated the process but the end result was him owning a small house surrounded by a large amount of permanently unbuildable wetlands, to be left in its natural state forever. IIRC he was a guy so "bog witch" doesn't really fit, but can you be a bog wizard? npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg Spent a bit of time over the weekend designing this 10.25 GHz hairpin bandpass for high-IF filtering on a future SDR-adjacent project. 280 MHz BW (I was aiming for around 250 so this is probably good enough). Tthe insertion loss of about -9.3 dB is a little higher than I would ideally want, although probably within acceptable limits. I think this might be pretty unavoidable, because loose coupling translates to higher losses and I think loose coupling is necessary to get narrow bandwidth. Anyone have tips on how to tweak this or things I obviously did wrong? The impedance match seems pretty decent in the passband (-27 dB S11 at 10.25 GHz) so I think I'm just seeing high coupling losses. I guess that means the un-coupled energy is being radiated, and I'll want an RF absorber in whatever shield I put around this? The filter is quite small, 15.6 mm x 4.275 mm not counting feedlines. Targets the OSHPark 4-layer stackup with ground on layer 2, although I'm simulating with RO4350B here because that's what the final board will use. The Dk is close enough I might have a small Fc shift but it should be close enough since my synthesizers are tunable. https://files.ioc.exchange/iocexchange/media_attachments/files/117/076/753/247/813/794/original/40517859def9f178.png https://files.ioc.exchange/iocexchange/media_attachments/files/117/076/753/247/311/195/original/7e409975d26b7c89.png https://files.ioc.exchange/iocexchange/media_attachments/files/117/076/753/247/080/938/original/0d1439375371784c.png https://files.ioc.exchange/iocexchange/media_attachments/files/117/076/766/836/928/953/original/75c3cae0246df95c.png npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg Silly idea: has anyone ever made an embedded device that can run HDLC over serial console for initial provisioning or OOB management or something? Like for when you want the ability to do file transfers and more fancy things than you can do with a simple shell, but don't want to burn the area and power/BOM cost of an ethernet phy npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg @nprofile…cy5p I do not understand $$$$ sneakers. If I'm gonna pay several hundred bucks for shoes they better be like hard shell insulated mountaineering boots or super comfortable composite toe safety shoes or otherwise really special. Not "slightly fancy decorated versions of a cheap basketball shoe with some dude's name printed on them" npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg Tuning performance on something like ngscopeclient is a never ending job, there's so many things to do and always more room to tweak. Fun, but I need to ship v0.2 eventually so I should probably get back to the documentation pass... npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg After another round of tuning to remove some expensive barriers and optimize memory access patterns, the CDR PLL on this benchmark went from 13.6 ms baseline down to 4.5 on the AMD R9700. The 3070 Ti is still faster, but by a much smaller margin: 7.8 ms on the original code down to 4.2 on the newly optimized. npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg @nprofile…02n5 but one of my local supermarkets doesn't have *any* staffed checkout lanes after a certain hour so if I need something late I'm forced to deal with the robot npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg @nprofile…02n5 I just avoid them entirely on principle. Not interested in doing free work for the store, and they're usually slower anyway. npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg @nprofile…q57v Ooooh fresh stroopwafels? I was in Den Haag a few years ago hoping to find a bakery that made them fresh but was unsuccessful and just got some at a supermarket. That's a definite destination. npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg @nprofile…02n5 oh you have the good ones. i'm used to self checkouts that block input and you have to listen to it finish talking to you before it'll scan the next item. Absolutely infuriating and slower than a human cashier. npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg It looks like I'm going to have some downtime in The Netherlands in late September / early October due to airline pricing (staying an extra two days after the event I'm attending saves $1200 on airfare, cutting the ticket price by more than half and more than justifying the extra meal/hotel cost) Anyone interested in a get-together Monday Sep 28th, Friday Oct 2, or Saturday Oct 3? Or have suggestions on things to do in the greater Gouda / Den Haag / Rotterdam area? npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg Zoomed out to show the full 500 MHz of spectrum on each channel https://files.ioc.exchange/iocexchange/media_attachments/files/117/011/887/023/579/857/original/9d06968f1c7b1aca.mp4 npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg @nprofile…skdr It is a huge pain in the butt to configure and I really don't like the architecture. They're also close to $100 in low volume and lack a bunch of features the STM32s have that I consider key for useful embedded stuff ,most notably a hard TRNG and AES accelerator npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg If I could get something along the lines of a Trion T20 on the same die as a STM32H735 I'd be all over it. I think they're even both made on the same TSMC 40LP process node so in theory Efinix could license their FPGA IP to ST and just bolt it on as a hard macro. npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg Once again daydreaming about a "baby zynq" microcontroller with a STM32H7 class processor and memory subsystem attached to a few kluts of low power FPGA with hard APB/AHB/AXI (depending on how big they want to make it) ports, a bunch of dedicated or muxable GPIOs, etc. ST apparently has an FPGA-esque peripheral in some STM32s but it's *sixteen* LEs which is a joke. You can't do any kind of useful custom peripheral in that. Ideally i would want to be able to implement my own peripherals for a weird bus the MCU doesn't include natively and even have native DMA to/from them. Which means having full MMIO capabilities (no need to put a DMA in the FPGA, you can use the hard DMA IP and just read/write registers in the FPGA). npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg @nprofile…7k5d there's a reason i stopped buying consumer hardware ~15 years ago lol. well ok mostly it was I wanted ECC RAM (and a lot of it) but tons of PCIe lanes also come in handy for the things I do. I can't imagine having only 24 lanes in a workstation, a 100G NIC and a GPU is 32 before you even add anything else like SSDs npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg @nprofile…7k5d my storage cluster nodes are supermicro x11spa-tf based, one with a xeon 4116 and the other two with 4208s. The socket has three gen3 x16 pipes off it... one goes to the bifurcation card, one goes to the four m.2 ports on the mobo, and the remaining one goes into a PEX8747 that splits off to the remaining pcie slots which serve the NIC and have a few empty slots for expansion in the future. I've iterated a few times with what goes in which slot to try to get the most pcie bandwidth but also cram as much NVMe into the nodes as possible without having to upgrade the mobos and processors. I can still add another 2ish SSDs per ndoe pretty comfortably without running into bandwidth limits so I'm confident in my original goal of keeping the cluster running into the 2030s without a chassis/mobo swap. npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg @nprofile…f38z older vxworks based lecroy waverunner? It might be fun to add ngscopeclient support for it. What's the PC interfaces look like, gpib? Serial? Probably too old for ethernet? npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg @nprofile…f38z back when print screen did what it said npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg @nprofile…y6u5 @nprofile…eew3 My feeling for a long time has been that purpose-built neural networks designed to do one thing can be useful. They may not be the best or most efficient solution to a problem, but if you have no idea how something works and a lot of data, and can tolerate some errors, throwing some kind of boolean classifier at it is not an unreasonable move. And if it was trained on data you or a trusted organization vetted and curated you have increased trust in the ethics and accuracy of the model. Things like "how likely is this drug to bind to that receptor" are a perfect use case because you're gonna do a ton of molecular dynamics and lab testing on the ones it likes so you don't need perfect accuracy, you just want to whittle trillions of candidates down to few enough that you can spend significant resources on. And you can't test every possible molecule so if it rejects some promising options by mistake, it's not the end of the world - you already left a ton on the table by not even evaluating them. Trying to make a single "god model" that can do everything is never the right move even if you could somehow ethically train and operate it. Even if decades or millennia down the road we somehow do create an AGI, it will be so compute heavy that a purpose built NN - or classical tool - will always be able to solve any given problem far less expensively. npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg @nprofile…vnlz @nprofile…ds0l I dont know if there is an expiration date or it's a lifetime ban but we had a secretary/admin type guy at $dayjob a decade ago who often attended conferences and events to do logistics support for client meetings and the like, and I was told that he couldn't do so for events in Canada because his DUI conviction was a disqualifier npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg @nprofile…yclf @nprofile…3fsz is this a dryer exhaust vent? They make flappers that spring closed when there's no pressure and open up when air is coming out. But I'm not sure how hard they are to pry open from the outside npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg Updating the ngscopeclient manual in advance of the upcoming v0.2 release and decided to add this note in hopes that it will save someone else hours of debugging in the future. https://files.ioc.exchange/iocexchange/media_attachments/files/116/981/503/065/536/253/original/ceeef89114a9360d.png npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg @nprofile…u75k @nprofile…e965 No, I'm saying that if a government sees the device wiped, they're going to throw the book at you no matter how legal or illegal the data on the phone may have been. There is no situation in which you walk away from that even if the phone was factory-blank when they caught you, they're going to assume you are hiding something and it will be extremely difficult to convince them otherwise. If you're part of an activist group and want to take one for the team so the rest of your organization doesn't all end up like Prarieland? Or a journalist protecting sources who might face life in prison or the death penalty if identified? That's a level of self-sacrifice you might want to consider. npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg @nprofile…e965 My general opinion on this sort of thing is, it's a tool for when you'd rather take the charge for destruction of evidence instead of the charge for whatever they'd find otherwise is. npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg @nprofile…vnlz reminds me of the time i reworked a crystal oscillator on a DUT that wasn't toggling to see if any of the pins were badly soldered or something. It started working. Cleaned the flux off preparing to send it back to my friend, tested again. Didn't work. npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg @nprofile…vnlz modern leds are ludicrously bright at tiny currents lol npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg Traffic in Seattle is so bad i just outran an ambulance with lights and sirens on. On a bicycle. npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg @nprofile…k7h5 @nprofile…skdr I cannot even load the analog.com home page npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg Random thought: is there a placebo pharmaceutical manufacturing factory somewhere? Like, say you're running a double-blind clinical trial and you need a tablet or gel cap or whatever made of a specific formulation with no active ingredient that's visually indistinguishable from the active test subject and contains the same binders and excipients etc. Or you're a film producer shooting a scene involving an actor taking some sort of drug that needs to look like a well-known medication (or some real or fictional narcotic). Can you just put an order in for a dozen 4.2mm long capsules with light green on one side, silver on the other, a black cat face printed on the light green side, and filled with a 50/50 mixture of dextrose and microcrystalline cellulose? npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg @nprofile…pk25 @nprofile…xahp As far as the constraint flow works, have you looked at SolveSpace's keyboard/UX flow? It's very critical that common operations around constraints like adding a "points coincident" or a dimension be accessible via keyboard shortcuts and not constant shifting back and forth between the board editor and properties dialogs. Also, is there support for construction geometry (not rendered in copper or gerber layers, but something you can attach constraints to)? This is also a critical need for this sort of thing npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg @nprofile…skdr no i literally cannot see the website I just get a 403 page npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg aand apparently I'm on Analog Device's WA list now too. Lovely. npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg @nprofile…pk25 @nprofile…xahp I don't use blind/buried vias much (yet) so not sure I can be a ton of help, i've only used them a handful of times. What *would* be good is a way to design impedance-matched, reproducible layer transitions for high-speed signals. Like a combination of signal vias for both legs of a diffpair, the fanout geometry from the closely spaced pair to the vias, return path vias nearby, maybe a void in the ground plane, etc. Or for single ended, a signal via with 2 or 4 surrounding return path vias and again perhaps controlled clearance to the plane that's separate from the usual plain clearance. And once you've designed these and associated them with a net/netclass somehow, every time you add a via it drops the whole transition instead npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg @nprofile…7g5c Again, my argument is not that we should be adding deliberate vulnerabilities, only that the existence of physical attack vectors - which are somewhat inherent, digital data has to be stored in the physical world somehow and that includes keys - is not necessarily a bad thing. The nature of this sort of physical attack is that while the reverse engineering only has to be done once, the lab work to prepare each sample for imaging and extract the key is time consuming, requires millions of dollars of equipment, and has a significant chance of going wrong and destroying the sample. The whole reason I'm saying it's a stable MAD state within the arms race is that *it doesn't scale*. There aren't enough trained operators to do this sort of thing at high volume (semiconductor deprocessing is more of an art than a science and takes years to get good at) and even if the budget was available for more equipment, and you generally can't run multiple samples at once on the tools. And the device is literally vaporized in the process so there's no way you can do it to someone's phone without them knowing. npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg @nprofile…54gt (ideally there should be legislation that forces LE to disclose their attack vectors at a high level, cost per device attacked, number of devices attacked/broken, etc in a given tax year or something) npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg @nprofile…54gt I think this is the natural end game for the arms race because the more advanced physical attacks are extremely difficult to completely block, and my argument is that we should not be trying TOO hard because it risks a legislative overreaction. npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg For decades there's been a conflict between governments wanting to get access to people's private data and people trying to keep them out. Over the years I've gradually come to the conclusion that the stable "Goldilocks zone", where there's the least likelihood of a major swing that makes things worse for everyone, is *not* the privacy utopia where devices are invulnerable, or a police state where anyone with a badge who asks can root through all your data, or a fictional engineered cryptographic backdoor that''s somehow only exploitable by "the good guys". Instead, it's the state where devices (especially phones) are breakable, but only through attack vectors that require physical access, have a high per-device cost, and are not 100% reliable. Things like "solder to an internal layer trace on the logic board to glitch it" or "FIB a per-device key out of the SoC". I'm not saying we should be adding deliberate backdoors - quite the opposite, since these are very likely to make entry *too* easy. But if devices become completely invulnerable, I expect we will see something like chat control turned up to 11 where the pressure to find some way in becomes unbearable and we end up with CALEA-style entry points that turn devices into total spyware with no privacy at all. So IMO the ideal balance is where there is no viable remote attack vector, trivial drive-by USB etc attacks a la Cellebrite are blocked, but if a government has a phone off a body and are willing to spend $100K+ of lab time to have a >50% chance of breaking into *that one device*, destroying it in the process, without it easily scaling to the next, they can do so. And this level of difficulty is juuust easy enough that they aren't spending the same money lobbying politicians to make it easy to break into every device belonging to an opposition party or something. They still try of course, they always want more, but they can't claim to congress that the guy who shot senator X will never be caught because they couldn't break the phone they found at the scene. You know your device was confiscated (or are dead and not around to complain), it's not viable to do to everyone crossing a border or who was in a certain geofenced area, etc. There's no practical way to scale physical attacks to mass surveillance. npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg There's plenty of mapping tools that tell you how to get from point A to point B and how long it will take. But what about for more exploratory mapping? Say, I live/work at point A and want a job/house no more than an hour away by X mode of transit. Is there any way to plot travel time isosurfaces so I can see a polygon of locations an hour or less from home? Or say I want to go for a 2 hour bike ride. What are potential destinations leaving from a given starting point? npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg I'm used to thinking of fedi as a friendly "old internet" space where barring an instance shutdown or something, useful information doesn't just vanish because someone paywalled it or EOL'd the product it was talking about or whatever. And auto deletion really messes with that. npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg woo i'm blocked by the cisa.gov WAF npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg @nprofile…6ljk It's a cleanishroom. There's no specific target other than that it's full of optics and equipment with fans and heatsinks that don't like dust. The less the better, but I don't want to have to wear a bunny suit and gloves and hair net every time I go in there to use an oscilloscope. So the real goal is "as clean as I can make it while being able to walk in wearing ordinary clothes I wear around the house". Which I think I've hit. npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg @nprofile…aejz no that has much worse performance lol. I'm going full manual under a stereo microscope at like 30-40x magnification and watching the workpiece start to move as I turn the handwheel to take up backlash. I've hit Z axis tolerances down to <10um when I was hitting a visually obvious layer in the sample (i.e. exposing but not perforating a ~17um copper foil, fairly consistently) npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg Just set up some new IAQ monitoring stations around the house. Still want to put one in the bedroom to see how stuffy it gets at night with the door closed, but I only had four units so this is what I started with. Particle counts are Sensirion SEN5x, CO2 and most other atmospheric data SCD4x. Haven't done any kind of zero cal on the CO2 and they've been sitting around idle for a while, so there's probably a bit of offset that will need to be corrected - the one on the deck is reading a bit higher than I would expect from outdoor air https://files.ioc.exchange/iocexchange/media_attachments/files/116/950/564/041/956/857/original/9632329238037a9f.png npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg @nprofile…aejz backlash and resolution of the leadscrews has been a much bigger problem for me to date than flexure of the axes npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg @nprofile…aejz And again, I am never going to be applying more than like a few millinewtons of shear load to the axis during a machining operation when i'm making a cut whose depth is measured in the low tens of microns npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg @nprofile…aejz probably lol. But I don't want a machine the size of a car so it's gonna be tricky to figure out how to improve npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg @nprofile…kuux I'm eyeing some fancy spindles from nsk nakanishi that hit tens of krpm but they cost several times what i paid for the mill so I'm wondering if I'd be better off just getting a better machine lol npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg @nprofile…kuux my sherline tops our at 2800 rpm so I'm never anywhere near optimal speeds and feeds. With my 250 um endmills I'm usually doing like 5-25 un depth of cut in fr4/copper npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg @nprofile…kuux oh you mean 50um depth of cut? npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg @nprofile…3q9y pixel 9 pro and i see clouds npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg @nprofile…tm9j yeah i think that appears to be the same as the regular u.fl i use on my power rail test points but it's huge and expensive so i didn't actually seriously consider using it, i was just browsing digikey trying to restock and i saw through hole in the list and went "wut" npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg @nprofile…tm9j https://www.digikey.com/en/products/detail/hirose-electric-co-ltd/UM-R-PC-41/5148187 npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg @nprofile…tm9j OG U.FL afaik npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg TIL you can buy through hole U.FL connectors. I wonder who would ever use that?? npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg @nprofile…clxj I don't buy *full* MREs for a couple of reasons. 1) I can be a bit picky with what I like and don't. Buying full meals means I would end up with a lot of things I don't like 2) Most of this stuff is being used as on-duty rations for SAR deployments, when I need to keep my pack loaded with two days of food 24/7 and be ready to run out the door on zero notice, but it might sit around for a while. When I'm on a mission, I might have just had a big dinner at home, or I might be running out the door before breakfast. What I actually consume on a mission varies a lot. Full meal pouches are not a good fit to this. 3) MREs are expensive. I use MRE components when there is no satisfactory equivalent on the civilian market, but e.g. clif bars and beef jerky are cheap at Safeway. 4) On a mission I'm generally spending a lot of time hiking and not a whole lot sitting around (except in base, where there's sometimes tastier food available if e.g. someone brought in pizza or the Soup Ladies came). So I specifically bias my food loads towards snacks and things I can eat on the move - the pocket sandwiches/pastries, pound cakes, etc feature prominently, while I might bring one of the big entree pouches per day and only actually eat maybe 1-2 a year outside of training weekends since it's so rare I have time to stop, pull out a spoon, and make a hot meal. I prefer something I can tear open, take a bite of, fold the foil back over, and shove it in my chest rig until next time I stop to shout our missing person's name or wait for someone slogging through a patch of heavy brush to catch up or something. npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg @nprofile…clxj fresh, early 2025 manufacture https://files.ioc.exchange/iocexchange/media_attachments/files/116/948/572/631/539/217/original/2b79a60be5951cda.jpg npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg @nprofile…clxj Sometimes it's stamped/laser engraved and hard to see other times it's inked and more obvious npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg @nprofile…clxj I think some vendors have started using a longer, less ambiguous code of YYDDD with a two-digit year but everything I have in my inventory is the 4-digit format npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg @nprofile…clxj The actual date codes on the individual components are perhaps more useful. They're formatted as YDDD where Y is the last digit of the year and DDD is days since January 1st. So 3201 would mean manufactured on the 201st day of a year ending in 3 (hopefully 2023, unless you're getting ripped off by someone selling stuff that's been sitting around since 2013). npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg @nprofile…clxj assuming you're trolling but if you're legitimately unfamiliar with how they're labeled, that's not the date they *were* inspected. That's the date they're *due* for inspection (3 years from manufacture) npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg @nprofile…vm0w (also the project in question was scintillator based and would see gammas and really hot betas but not alphas) npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg @nprofile…vm0w well i can buy alpha, beta, or gamma check sources but i trust the activity in something from Spectrum Techniques to be exactly what it says on the cal certificate a lot more than I trust a smoke detector that likely has far looser tolerances npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg @nprofile…vm0w I did actually have a project in mind that would benefit from such a thing but i was going to get an actual sealed Cs-137 check source puck with traceable activity level data when I got to that point npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg @nprofile…vnlz I mean yes, this is essentially place-and-route lol. But I don't care about path length or being optimal, I just want it to look slightly nicer than direct paths that cross over each other, and nodes, constantly. Some failures (edges over nodes) are acceptable, there's no timing optimization in play. So I imagine a less sophisticated algorithm is doable. I don't have budget to throw at the problem right now since my "spare change to throw at ngscopeclient" cash just got spent paying an artist to improve readability of the toolbar icons, but I might be willing to put a bounty on this in the future. npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg Gamedev/graphics/graph theory people: right now the filter graph editor (imgui-node-editor) in ngscopeclient uses a simple spline curve when drawing edges from one node to another, ignoring everything in its path (i.e. edges can cross nodes). Is anyone interested in trying to rework this to add a bit more intelligence to the routing? It needs to be fast with up to a few hundred nodes in a typical worst-case scenario, and generally "stable" (small motions of a node should not cause large routing changes, and there should be hysteresis so if a path switches from routing above to below something it doesn't jitter back and forth as you drag the node or similar) npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg Anyone know how to get rid of an old ionization smoke detector (Am-241 based) in or near kitsap county WA? My local household hazmat site won't take them for some reason npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg @nprofile…3tsk the correct way to sign off after such a set is "wub you" npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg Toilet Sparkle: MLP themed bathroom cleaning product npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg Not too long ago, a neighbor's kid was watching TV with the family and two female characters in the show got married. She looked over incredulous asking "wait, what? two girls can get married?" ... to her moms. npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg @nprofile…u57d if you're testing a 25.78125 Gbps signal and want a couple of harmonics... npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg New toys to go with my SFP28 breakout. You know they're The Good Stuff when they have serial numbers lol. 2.92mm, KF120 cable, phase matched, with serialized VNA data to 40 GHz Now I just need the switch board finished so I have something to test with them. https://files.ioc.exchange/iocexchange/media_attachments/files/116/932/825/350/391/780/original/e15a8f26ba3e7ea8.jpg https://files.ioc.exchange/iocexchange/media_attachments/files/116/932/826/964/496/370/original/95782276bce6bbef.jpg https://files.ioc.exchange/iocexchange/media_attachments/files/116/932/827/326/794/753/original/0e6b6b4b00525291.jpg npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg One of the big benefits of my homebrew ILA IP, BTW, is that it works just fine with any clocking relationship between the debug-bridge clock and the capture domain clock. For some reason that I do not understand - I don't even know how I would implement such a restriction - the Vivado ILA does not work if the capture-domain clock is too slow. It needs to be at least 2x, IIRC, the JTAG TCK frequency. So if you're running JTAG at say 30 MHz and you want to capture in a 20 MHz domain you're SOL. npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg If you're ever looking for an Italian restaurant and don't have a phone or map, but do have a gamma spectrometer, just look for 511 keV annihilation lines and follow them to their source. If you find them from multiple restaurants, the weaker line is the one to eat at. No matter how well they try to clean cooking utensils between making pasta and antipasto, some mixing is unavoidable. A smaller annihilation peak is a good sign of more thorough cleaning and better general food safety practices. npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg @nprofile…cgsl I just had someone say i should give my almost 5yo unlimited frontier model tokens. The same word probably applies here. npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg @nprofile…ngkv I don't need it *yet* but my vm server is getting pretty full of pcie devices and I don't have a lot of slots left (but many are underutilized) so I'm thinking ahead npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg @nprofile…ngkv ooh I'll have to give it a detailed look but certainly seems like what I'm thinking of at a glance npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg Is anyone aware of a rack mountable enclosure + backplane that connects to a PCIe host by cables, and has its own power supply and cooling fans etc? Use case: server mainboard with a bunch of bifurcation capable x16 slots that I want to hook a ton of x4 devices to npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg Testing out the new light mode toolbar artwork for ngscopeclient. The application as a whole is definitely not practical to use in light mode yet. While it's theoretically possible and there's selectors in the preferences dialog to configure all of the non-contrasty colors, you would need to update 50 separate preferences to re-theme everything from the color of X axis tickmarks to the cursors in the plot. Down the road, most likely for v0.3, the plan is to simplify this all down by having all of the color preferences be scoped to a light/dark mode selector, and provide a single light/dark switch to change all of those. There will be separate selectors for changing the ImGui theme and the icon theme, but we'll put them together so it's easy to make them all change at once. https://files.ioc.exchange/iocexchange/media_attachments/files/116/914/731/716/373/338/original/1e6cc40fb3e48627.png npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg @nprofile…huwm what's the exposed die looking black molded part? Light sensor? I thought it was a really high quality decap at first lol npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg Doing another digikey order. I can either pay $16.99 for FedEx Saver with 3-day delivery, or $13.99 for FedEx Economy 2nd day air. Why would I ever pay more to get my package slower??? npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg @nprofile…kuux As of right now, we have: 1) Farberware toaster oven at my place with no controller that I've profiled and works well manually 2) Toaster oven at their shop with a little MCU based controller 3) Actual Essemtec conveyor oven that isn't in service yet because it needs 3-phase power and the current shop doesn't ave that, but it was too cheap on eBay to pass up npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg @nprofile…huwm Internally, there are two different representations. Uniform stores a single sample rate and then a value at each sample index, and is more memory efficient and fast (this is what e.g. a scope capture would use). Sparse stores a timebase resolution then each sample has a start time, a length, and a value. This is used for protocol decodes, recovered clocks, and anything else that's sampled at irregular intervals or has gaps in the data. Rendering is done by a compute shader. At a high level, we do a preprocessing step (either simple division for uniform waveforms or binary search for sparse) to find the first and last samples that overlap each X coordinate along the visible area of the plot. A separate GPU thread group then processes each of these blocks of samples in parallel, working on a sliding window of two samples and calculating Y coordinates. If the samples' X coordinates are completely within the pixel (you're zoomed out) then the final range for this window is simply the sample Y values. If one or both samples are outside the pixel (you're zoomed in and samples are >1 pixel apart) the shader interpolates a line between the two samples and projects the line onto a rectangle at the left and right edges of the pixel, finding the Y coordinates where the segment enters and leaves the pixel. Once the window's start and end Y values have been calculated, the shader increments all of the pixel values between those indexes in an internal float32 working buffer. If the Y values aren't round numbers, at the top and bottom edges of the window there's a simple antialiasing applied weighting the pixels above and below the edge appropriately. The alpha of the pixel block is scaled based on the sample interval so that higher and lower sample rates and different zoom levels produce uniform image brightness. This working buffer starts out either all-zero (if persistence is off) or retains its previous value multiplied by a decay factor (if persistence is on) before rendering starts. Once the rendering shader is done, a tone-mapping shader takes the float32 buffer, does some normalization and weighting and multiplies by the final display alpha value, and converts to RGB24 to produce the final rendered texture. This process repeats for each waveform in the plot separately. Finally, Dear ImGui does a compositing pass drawing a pair of textured triangles for each waveform stacking the textures into the final display. npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg @nprofile…huwm The raw art is SVG and long term I want to set up the icons as vector, but right now with the GUI toolkit we're using there's no easily supported vector format. This is on my list to fix, I may end up baking SVG to a simpler format and using that, but not a near term focus npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg @nprofile…t9xu I'm trying to style it somewhat after media player buttons and the box is more commonly used for that purpose. But I do agree it should shrink npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg Sneak peek at the new toolbar artwork landing in the ngscopeclient v0.2 release. Redrawn by the same artist who did the application icon/logo, with an emphasis on readability and clarify and more use of color to be readable at small sizes. The "glow" effect of the original icons looked cool but really impaired readability (it might have worked at much larger sizes. These are being done as small and large icons and with both dark and light mode compatible color schemes. Full light mode support in the ngscopeclient GUI needs more work (it's theoretically possible to achieve but you have to change like 50+ preferences one at a time, there needs to be a ganged switch) plus we need to do re-renders of the filter graph icons with light mode color schemes too. That's probably a v0.3 feature if not later, but it is on the radar. https://files.ioc.exchange/iocexchange/media_attachments/files/116/898/391/742/073/889/original/df804378762a2741.png npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg @nprofile…3tsk like, lead mercury and sodium are FAR from the worst options even as metals go. If you don't want to deal with the regulatory hassles around plutonium / thorium / uranium, you can always go beryllium. Or if that's too extreme, cadmium, antimony, or even cesium would all be scarier than the ones he did. npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg @nprofile…huwm I have several aftermarket cards, all are Renesas or ASMedia chipsets. I don't think Intel makes standalone controllers on cards, which sucks because they're the ones that work... npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg @nprofile…huwm I specifically was looking for Intel, because I'm dealing with a probably-buggy USB peripheral that fails to function properly on either Renesas or ASMedia XHCI chipsets. It works fine on Intel, but the only way I can get it to work *in a VM* is to PCIe passthrough the entire southbridge XHCI and not have any motherboard USB ports available for non-virtualized things like, say, local console. Not a HUGE deal since the VM in question is being used as essentially a desktop at this lab bench, but still... npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg New look! I'm actually surprised this turned out as well as it did considering i couldn't see the shutter button on the phone camera lol, much less the screen. This was an expensive mistake, I spray painted some stuff a while back and forgot to put a sacrificial cover over the respirator face shield. Had to replace it and the new one came with a protective covering to keep it from being scratched during installation so I thought I'd take a pic https://files.ioc.exchange/iocexchange/media_attachments/files/116/897/206/403/328/301/original/cd44efe7bba2498c.jpg npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg Is it possible to buy an Intel XHCI controller as a PCIe expansion card, or are they only available in the southbridge/chipset? npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg Silly concept: Winnie-the-Pooh themed oscilloscope that works just like a normal one except the trigger is called a Tigger npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg Thanks to a friend with far more mechanical design chops than me, one of my 100G NICs is a lot cooler. In both appearance and thermals. These things run HOT because they're designed for 2U wind tunnels and a typical tower or less intense fan case isn't enough for the passive heatsink I found someone who claimed to have made active cooling setups for the connectx 6 and 7 but the 6 one didn't fit my card so I did what any sane engineer would - unleash a neurospicy catgirl on the problem to make it go away. Temps are roughly (not 100% controlled as i did make other small changes to the setup but this is the main variable affecting thermals) 93C in the stock config with no supplemental cooling 65C with a fan card blocking the adjacent pcie slot 49C with this setup The fan shroud is FDM printed out of Protopasta ESD PETG. I love it and am going to make another six to outfit my entire fleet of CX6's. https://files.ioc.exchange/iocexchange/media_attachments/files/116/894/266/406/621/880/original/050d8c9d02de40dd.jpg https://files.ioc.exchange/iocexchange/media_attachments/files/116/894/266/789/650/865/original/970b590956a23fc6.jpg npub1cddglts94qutscms0qpmk87lel9m8xku7q0wr20u2th5fxvvunqqxz9vpd Andrew Zonenberg moar bnuuy https://files.ioc.exchange/iocexchange/media_attachments/files/116/892/751/598/099/045/original/563d6bd01933f238.jpg