Posts in Hardware (20 found)

When Software Meets Hardware

When software meets hardware, engineering principles remain largely the same, but the sensible defaults often change. Kuldeep Singh describes our experience modernizing a large IoT fleet of battery-powered sensors. Our familiar principles remained important; what changed was how we applied them. These practices emerged through experiments, failures, and operational experience—each challenge helping us replace a reasonable assumption with a more sensible default.

0 views
Unsung Today

“No standard format for writing data to these tapes”

An 11-minute video from MattKC documenting huge effort to revive a backup tape from a 2000 game Frogger 2: Swampy’s Revenge: = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/no-standard-format-for-writing-data-to-these-tapes/yt1-play.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/no-standard-format-for-writing-data-to-these-tapes/yt1-play.1600w.avif" type="image/avif"> This is a pretty harrowing story of restoration, including an extremely obscure backup tape made by a short-lived Dutch company, attempts to reverse engineer a poorly documented data format, a data recovery company that damaged the tape instead of restoring it, and a mad hack to trick the drive into reading it anyway.

0 views
Jeff Geerling Yesterday

Formlabs dropped the Raspberry Pi on the way to a $699 SLA printer

Formlabs sent me a Form Studio 1 resin 3D printer to test after years of back-and-forth about their Form 4 printer. Like the Form 4, it's an SLA (stereolithography) printer, but unlike the Form 4 (which starts at $2,600), it's affordable for a hobbyist. It's not cheap , coming in at $699 (or $749 with a flex build platform, which I highly recommend), but it is affordable. I can't say as much about this printer as people who are well-versed in resin printing and use other SLA printers (all my experience until now is with FDM, or Fused Deposition Modeling 1 , printers). But I can convey my first-time experience using this printer and with the entire SLA experience.

0 views
Chris Coyier 2 days ago

Atomic Wall Clocks

Look at this clock . It’s a clock. I bought it once because I needed… a clock. It’s $29, which is totally reasonable for… a clock. Then it was Daylight Saving Time one day, and I went to update it, but… it was already updated. That’s because: The Atomic Time Feature conveniently allows the clock to sync with the WWVB radio transmission from Fort Collins, CO, for accurate time updates. That’s amazing? It listens to a radio signal and adjusts itself to the correct time, even during major time changes. What a kick-ass UX, while seemingly being no more expensive. Also: you can just put one battery in it to work, or you can put 2 batteries in it, and it’ll work longer, or 3 batteries, and it’ll last over 5 years. What the what. Now it just needs to dust itself, and it’ll be the greatest home device ever.

0 views

Some of the most powerful tools a dad can have…

…are a soldering iron and a hot glue gun. Seriously, nothing beats the feeling of handing your kid a previously broken toy that you fixed yourself. Tonight’s surgery involved a light up fan thing that had fallen, breaking the plastic shaft and pulling the wires out. Came out good as new after some glue and solder!

0 views
ava's blog 4 days ago

a (temporary) win for meta glasses in the classroom

A student in Vienna, Austria has recently made the news because he has refused to stop using his Meta smart glasses at school, causing a legal dispute, and - to the surprise and outrage of many - actually preventing his expulsion. For now, he is allowed to keep wearing them and attend school until a solution is found. Why is that? I've looked at the relevant court case documents (the interim procedural ruling W224 2346501-1 ) and the (final) substantive judgment W224 2346501-1 on RIS) to get the facts for the case and to try and understand the justifications for this decision. The student started wearing the smart glasses in December 2025. News articles allege that within days of students complaining about the glasses, the school amended their house rules to forbid the glasses, yet he kept wearing them. After repeatedly failing to adhere to the teachers' requests to stop using the glasses, he was excluded from school for multiple weeks (16th to 23rd of March, 27th March to 24th April, and 27th April to 22nd of May respectively) as a disciplinary measure. The teachers and students cited fears of secret recordings as reason for their requests. The student still didn't comply. Aside from the issue with his smart glasses, the student was caught doing audio recordings with his phone in April 2026, refusing to stop the recording when asked to do so. Later on, he refused to prove that he didn't save the recording or that the recording was deleted. Beginning of June 2026, the school conference applied for the student's expulsion, which was approved by the Vienna Education Directorate on June 12th, taking effect immediately, despite an appeal. The parents of the student appealed this decision, and the Directorate handed the case to the Austrian Federal Administrative Court. In July 2026, the court upheld the appeal against the immediate enforcement of the exclusion in its preliminary ruling, suspending the immediate expulsion in the meantime. The student is permitted to attend class, where he will presumably wear his glasses again. A big part of the decision were the conclusions a pedagogical assessment came to, which stated that there was no sufficiently substantiated immediate danger in the student wearing the smart glasses. The Directorate had referred to a continuing risk to the physical safety and moral welfare of other students and people at the school if the student were allowed to keep using the glasses as a reason for the expulsion. Unfortunately, the court instead considered this an abstract assessment of risk, rather than a sufficiently specific explanation of why immediate expulsion was necessary. Second, the assessment contained no evidence that the student had recorded other people , as teachers and students only had moments of suspicion, not actual proof he had recorded anyone (with the glasses, at least). The court decided that suspicion of recording alone was insufficient for the immediate expulsion. Third, it wasn't clear enough to the court why the school had waited so long if it considered the risks to be so severe. The Directorate had not adequately explained why the same circumstances now constituted an acute danger requiring immediate enforcement. These points are why the court found the parents' appeal against immediate enforcement to be justified. Basically, the first document focuses more on the immediacy with which the school suddenly wanted to expel the student plus whether the suspensive effect is granted or not, whereas the final document focuses more on whether the way the student used the glasses already fulfills legal grounds for an expulsion in general. They found that it does not. In the second publication from August, the court overall reiterates its earlier decision and shares a little more details from the pedagogical assessment. It reveals that there are also unanswered questions around medical necessity of the glasses, and the student's ADHD diagnosis (but these are neither the point of the decision nor this blog post, so we shall skip that). The news about this case usually underline the fact that the student somehow "won" and is now allowed to just keep wearing them. That's cutting it a bit short for clickbait reasons. The court decisions expressly state that its rulings on the suspensive effect against the expulsion and whether the behavior fulfills ground for expulsion does not actually decide anything on the legality of smart glasses in classes or anything about how valid or not valid certain privacy concerns are . Under Austrian administrative procedural law, an authority seeking to exclude the suspensive effect of an appeal (which they did here - they denied the appeal of the parents, which would have normally suspended the decision, and went for immediate enforcement) must justify why this immediate enforcement is urgently necessary, taking account of the interests of all parties involved. Kids and teens have a big interest in continuing school and are required to be there, which is why a lot of importance is placed on not excluding any student willy-nilly. § 49 of the Austrian School Education Act (Schulunterrichtsgesetz, SchUG) requires a serious breach of student duties, with the relevant educational or house-rule measures having failed, or a continuing danger. The existence of a public interest in school safety does not, by itself, establish that immediate enforcement is required, and a potential privacy risk isn't automatically be treated as proof of misconduct that fulfills the standards of § 49 SchUG. Related: Austria also has a Schulordnung that deals with tech use at school, specifically smartphones, smartwatches and similar, in § 7(6), (7) and (8) . It's unclear how old the student is, as the limit only applies to people below the 9th grade, but it at least gives grounds to see the use of smart glasses as analogous to what has been banned here for a portion of students already, so it is not as huge of a jump to possibly ban smart glasses at school entirely at some point. However, the court decision is explicitly not an endorsement of the student's conduct . So for now, the case actually doesn't support a view that students have an unconditional right to wear smart glasses during lessons, or that schools are prohibited from restricting smart glasses. Thankfully! So what's the path forward? A revision of the court decision is not possible. The school, as previously mentioned, had already had revised its rules, but that doesn't help when a student repeatedly doesn't comply and his infraction isn't deemed grave enough to allow for an expulsion. Other disciplinary measures have yielded no results. News report that the student is now socially shunned in school, but not even that is deterring him. He has the court decision printed out and shows it to anyone challenging him to take the glasses off. Austria's Ministry of Education is allegedly examining a possible general prohibition on smart glasses and similar devices in schools both due to privacy concerns and cheating in exams. I am not sure how this could weigh heavier than the school's house-wide rules, but it may give schools more of a justification in their disciplinary measures. The school is put in a difficult situation in which it needs to protect the rights of students and staff, yet is in no position to gather the required evidence to successfully argue for an expulsion. Schools are not allowed to check the devices of students and acquire any material, and therefore rely on students to voluntarily relay any evidence. But what student will incriminate themselves, especially when you want to keep doing what you do? It's especially frustrating here because the student himself has been caught recording with a different device before, showing he is capable of doing this. The behavior being caught on a phone and not the glasses was his saving grace. As no (proven or otherwise) crime has occurred, it's not like there is anything warranting police to confiscate the device and search for evidence. This may be the case when another student has enough evidence to suggest that they were recorded (maybe in a sensitive space like the school toilet or a changing room) and is reporting it to the police or otherwise pressing charges, depending on case and legal options. Though I don't think this would realistically be pursued successfully by any cop.... I empathize deeply with the staff and students. They have to tolerate this now until further developments, and it's unclear what those may be and if they would help getting this creep to comply. Smartphones have already added a sense of surveillance to the school, in the sense that things could be recorded and uploaded for millions of strangers online to see and ridicule. Now, this covert recording is easier than ever and adds to the chilling effects. They also have to deal with possibly unfair advantages during exams, as the student will likely keep arguing for medical necessity because he needs glasses to see and seemingly cannot be convinced to stop the use or exchange it for normal glasses. Especially as a woman, it frightens me. Lots of people, but especially anyone who went through puberty as a girl, can probably attest to the extreme casual sexual cruelty that teenage boys are capable of and so often employ against the girls in their class. In their position, I would be extra scared of any recordings that could amount to zooming in on their breasts and butts, or amount to upskirting, or any pictures that then later are used to nudify via AI. I have had partially nude pictures of me leaked at my school when I was 15, so I don't have to imagine - I know how it feels. I am also mad when I think back to how dress codes and school uniforms were handled when I was still in school. It was common to have rules around cleavage, shoulders, bra straps, length of skirts and shorts, the midriff, etc. or have school clothing that complied with these standards. My school employed a dress code, and I regularly violated it. I was either sent home or stuck into a shirt that was supposed to shame me for it. It was a confusing time. You quickly realize that these rules do not apply to boys, and that basically anything you could buy at stores for your age group and gender actually violated the dress code (especially the time when hotpants were in). I was advertised to with these non-compliant clothes; I was expected to wear them to be cool and pretty and have any worth as a woman, I was supposed to want them and buy them, yet at school we were treated as temptresses, as vulgar, unclean, pornographic, sexual. Something to be hidden away, something that doesn't deserve any expression or comfort, no matter how hot it got outside. The issue was always deemed to be us, not the male teachers or students lusting after us. It instills a sort of shame into you that is very, very hard to get rid of. Yet here we are, someone can just refuse to take off the Meta glasses, an actual real threat to people's rights and comfort, and everyone is apparently ultimately powerless to stop it! The double standards deeply irk me. The parents are also obviously failing their son. They give him a controversial toy without ensuring the appropriate handling of it and setting some ground rules. They know their child has ADHD, yet give him a device that easily lets him be distracted during class. They know something has to change, yet all they care for is keeping their child in school, and they aren't confiscating the glasses despite their child missing school over it, threatening his education and future prospects. They seem to accept that they have helped their son become a complete social pariah in his most formative social years. What a shame. A ruined teenhood, a risk to education, a threat to students and staff, court costs... for what? To make Mark Zuckerberg more rich and influential. It's not worth it. Published 11 Oct, 2026

0 views
Jeff Geerling 6 days ago

Radxa's Q8B has 2x the performance and expansion of the Pi 5

There was a time I'd look at a board like the Radxa Dragon Q8B (at left, above) and be like, "there's no way I'd spend $209 on an SBC with 8 gigs of RAM". But we're in 2026, and seeing the 8 gig Raspberry Pi 5 going for almost the same amount, I figured I'd give it a shot. On paper , the Q8B beats the Pi 5 in pretty much every way. A lot of that is thanks to this Snapdragon 8cx Gen 3 chip, which is the same chip I tested on Microsoft's Windows Dev Kit 2023 .

0 views
Brain Baking 6 days ago

Laptop Stickers: Yay Or Nay?

Here’s an interesting dilemma for you: do you place stickers onto the back of your laptop? Are you a laptop sticker kind of person or afraid of anything glossy that might leave glue marks? I used to belong to the latter group, but after more than six years of typing on this M1 Air , I was ready to give in. The reason for this is simple. Sebastián sent me a couple of Emacs-related stickers, knowing I couldn’t resist. It’s all his fault. Look at what he did! A not so pristine golden coloured MacBook Air shining in the sun, desecrated by four stickers. (And yes, I am well aware of the irony of pasting a Free Software Foundation sticker on a MacBook that runs on a proprietary OS. I promise my next hardware choice will be more ethically sound.) Of course I can’t stop there: what to do with all that open space in-between the stickers? I could have placed them all at one side to make it even more painfully obvious that the beautiful symmetry is completely gone now. As for the question of where to stick them: I already think far too much and was too happy with the stickers to give this much thought. They’re on there. The Apple logo is still visible: a Brain Baking logo sticker covering that up might be the logical next step to take. Every time I receive stickers at conventions, I hesitate: do I stick these onto the laptop? Wait, what do they represent? Do I really want to proudly display the Octat GitHub mascot to promote GitHub as “the only way to do Git”? Nope. Do I really want to paste a Java mug or Gopher on there, identifying myself with these programming languages that aren’t bad but don’t get my engine running? How about a colourful JetBrains IntelliJ one that can serve as a free ad? Nope, nope, nope. It was easy to be in the (tech) sticker hater group. And then I finally found something that was fun to mess around with. So yes, I am now a happy Lisp and Emacs advocate at work. The stickers already provoked many Emacs versus Vim discussions that end once you show them that Emacs can be a window manager running your other apps, or that EVIL mode exists. Still, 99% of the die-hard coder colleagues—which are less than 10%, the others of course rely on VS Code—are Vim users. That’s great! But one wasn’t and told me he yesterday closed his Emacs window for the first time in weeks. We both had to move classes but I’ve made a mental note to meet up and exchange Lispy configs. Thank you Seb & Seb’s stickers. Many of my students like stickers on their laptops. Most just stick on there whatever they can get their hands on. I’ve seen a lot of Gophers but nowhere in our curriculum we explore Go and after approaching them, I learn that they don’t even know how to write a line of Go code. A Gopher is cool, that’s what matters! I do think that you should at least know what you’re implicitly preaching. Which is why I’m not limiting myself by sticking only tech-related stuff on there. The question then becomes: what else? Something retro game-related, obviously. But still: what? A classic Castlevania logo? I’d rather go for a custom-printed sticker with some obscure sprite work, from for instance Wario Land 3 or Gobliins 2 . If someone is able to recognise all these, I’ll finally have found my missing soulmate. Maybe a pixelated version of bread or a fountain pen? Or am I giving away too much information that way? Also, since the laptop turns seven in January, I should keep copies as the stickers are not transferable. Another approach would be to cover the entire back, making use of every square millimetre. A few colleague design lecturers carry laptops like this. I don’t think I’m cool enough for that. Terence caught a nasty laptop sticker paralysis while trying to perfectly place his, so a bit of thoughtful preparation might be in order. I love Abigail’s Kirby sticker on her Thinkpad. She even scanned her laptop with a photocopier and converted the entire thing into a clickable polygon-based SVG. Much cooler than my lazy cellphone snapshot. I’m also jealous of her Cory Wong pizza slice sticker! I do wonder what she’ll do when her laptop breaks down or it’s time for a replacement. Nia’s laptop stickers (a November 2022 snapshot) also contains some cool ones, as does Manton Reece’s , such as bookstore stickers. Here’s a discussion on the Framework forum containing more inspiration. It is clear that I still have some work to do. The four stickers are only the beginning. Laptop Stickers: Yay Or Nay? Yay. But then: how many? Overlapping or not? Planned placement or not? Tech-related only or not? See, even the most banal decisions in life come with Deep Thoughts ! To be continued with a photo when it’s done. Related topics: / stickers / By Wouter Groeneveld on 9 October 2026.  Reply via email .

0 views
Andre Garzia 1 weeks ago

First Photowalk of October

Went on a wee photowalk here with my Ricoh GR III camera. I am trying to get used to the 28mm focal length and think I am getting better with it. Decided to shoot digital for a while to save money. I prefer film but it is expensive to shoot. For this walk, I had nothing in mind, I was just listening to an albumn I like and going around town on a kind of extended circle route that ended up back at mine. I’m using some film simulation recipes on these shots, I got them from the Ricoh GR Recipes app. Think the super saturated shots are Royal Supra and the black and white are Dramatic B&W, the other shots are just my standard configuration. I don’t shoot raw, these are all straight of camera JPEGs, life is too short for editing.

0 views
Kev Quirk 1 weeks ago

My Hobby Is Learning

I've had lots of hobbies over the years. To name a few off the top of my head, there's been fish keeping , guitar, harmonica, fountain pens, watches, motorbikes, this blog, web development, 3D printing, tattoos, digital minimalism, table tennis, and many more. Some of my hobbies have stuck, but I've never gotten so enthralled into a hobby that I become obsessed. Instead, there's generally 4 steps in the process: I don't always get to step 4. For some hobbies, like watch collecting and motorbikes, I continue to invest some time and money into them, and they continue to bring me joy. But I'm not obsessed. I see someone wearing an interesting watch; it piques my interest and we can have a conversation about it. But I'm not the type of person who can tell a watch brand from across a room (unless it's a Casio). Similarly, I love riding and working on my motorbikes - both bring me genuine joy. But I'm not the kind of biker who has to get out on their bike as much as possible, where driving the car is some kind of punishment. I enjoy driving too. While walking the dogs this morning I was idly thinking about all the random possessions I have scattered around the house that are the culmination of many abandoned hobbies. I started to think about why that is, and it dawned on me… It's not guitars, or harmonicas, or fish, or motorbikes, or watches, or anything else. It's learning about those thing that I find so enjoyable. It's the nitrogen cycle of an aquarium . It's learning to place your fingers at the right part of the fretboard on a guitar. It's learning to ride a motorbike safely and smoothly through some technical twisty roads, or learning how a clutch works and how to strip it down. It's learning. Learning is my hobby. And once I've decided I've learned enough about a topic, I'm good. I don't want to be the next Eric Clapton , Valentino Rossi , King of DIY , or Teddy Baldassarre . I want to be good enough at those hobbies, then move on to the next thing I can learn about. I think that's why computers have always interested me, because there's always something new to learn with them. So in future, instead of going neck deep and spending money on the next frivolous hobby, maybe I'll just spend some time learning about the thing to see if that satisfies my learning hobby. It probably won't though, as I'm something of a magpie when it comes to shiny things. But hey, at least I'm having fun and I'm not hurting anyone, right? Thanks for reading this post via RSS. RSS is ace, and so are you. ❤️ You can reply to this post by email , or leave a comment . I decide I want to take up a hobby. I read, watch videos, and obsessively learn about the topic. Invest lots of time and/or money into the hobby. Decide I've learned enough and move on.

0 views
Daniel Mangum 1 weeks ago

What's on that Access Port?

In my last post, I wrote about debugging the Nordic Semiconductor nRF54LM20 when a peripheral, specifically the Key Management Unit (KMU), writes directly to memory while the CPU is halted. Or I should really say that I wrote about debugging the application core (Cortex-M33), as the nRF54LM20 also has a RISC-V coprocessor (VPR) referred to as the Fast Lightweight Peripheral Processor (FLPR). Around the time that Nordic announced the VPR core, I wrote two posts; one about its architecture and the other about how communication works between it and an application core.

0 views
Blargh 1 weeks ago

UniBalun dipole setup

Until now, my HF antennas have mostly been off the shelf. I’ve gone out with an AlexLoop (hmm, alexloop.com seems to be down. I don’t know if that’s permanent), and the Elecraft AX1 . They’ve both been fine, but have some drawbacks. The AX1 is a bit finicky about getting its radial(s) good enough, and the AlexLoop is a bit tricky to set up in a temporary but stable way. I have not have good experience with the half wave G5RV, yet, for some reason. So since all HF antennas are compromises, why not try an inverted V dipole? I had the UniBalun recommended to me, so I went with that. There are some minor things to think about, which is what this blog post is about. To become an antenna, I also needed antenna wire , and a way to put the middle of the dipole high up, with the antenna wire extending straight diagonally down. For a 20m (14MHz) antenna, I cut two 5.2m pieces, expecting to need to either cut or fold them back a bit, for the right resonance. On the UniBalun side I could just crimp an M4 ring to attach the antenna wire, but on the other end of the wire I needed to be more creative. It needed to be able to attach to paracord, and also be fairly easily adjustable in how much should fold back. Even if I were to cut it, I’d probably still want it folded back a bit, to adjust for anything from exact band location to moisture in the ground. I ended up using a butt splice crimp, without crimping it, as a kind of zipper to create the attachment loop. I then used a ziptie to make sure the fold is along the main wire as much as possible. I think an improvement here would be to use a second butt splice crimp instead of the ziptie, and glue the folded tip to it. That way it can move and be adjustable, and also straight. If wind starts moving it, there’s always gaffa tape. I had an extendable window washing pole, so that sorted height. I added a guying collar to secure it with paracord, though a hitch knot appeared to be stable enough too, and is more flexible about how high up you want the guying wire. The guying collar is the same diameter as the pole. Which means while I got it on, it ain’t never coming off. I probably should have bought a slightly bigger guying collar, and secured it with a shelf of tape below it. But it works. My bike’s wheel held the base in place. My antenna analyzer has bluetooth. I thought I’d check that out, to prevent me going back and forth too much. But the Android app is not compatible with the current Android release. And the Linux app didn’t seem to work either. So I told AI to build one: After a few more minor user improvement prompts, I ended up with something pretty usable . Here’s two example sweeps from my testing today: It saves everything from the session, so I can inspect the return loss and other graphs after the fact, too. I’m treating this tool as any official tool I find online; I didn’t look at the code at all. I would not have spent the time to actually build this manually. I would have given up and only used the rigexpert directly. Well, I did use it directly, too. It went well. The UniBalun is rated for 5W in data modes, so that’s what I ran. Not bad at all. Unreasonably effective , in fact. I also dialled in to my BBS over the mercury HF modem . This is my checklist for going out and playing radio. I don’t bring everything, only what I’ll need on the day. But I do go through the list every time because it’s easy to forget something. UniBalun — £9 100m lightweight antenna wire (just over 10m used) — £14 Guying collar — £3 Paracord — less than £1 worth used 2x M4 crimps 2x (or 4x) AWG 16-40 butt splice crimp Tent stakes — £13 USB hub (my Elecraft requires two USB ports to get audio and CAT), and one of my two USB-A ports has a yubikey nano in it. HF radio CAT cable External battery Baofeng + AIOC (convenient modem) Coffee thermos Picnic blanket Set home station frequency & power (if dialing in back home) Headphone cable Arrow antenna AX1 antenna Antenna stand (for AX1 or AlexLoop) Dipole pole Camping stakes Paper towels Lighter (for sealing paracord after cutting)

0 views
iDiallo 1 weeks ago

Why My Asus Laptop Kept Rebooting After Sleep and How to Fix it

Three years ago, I bought an Asus laptop, specifically the Zenbook Pro 17. It's a powerful machine and works just fine for my needs, but it had one problem that made me want to either return it or throw it out the window. I would work on projects for hours on end and close the lid when I was done. I haven't manually shut down a computer in more than 10 years. I only do so after a forced update or during a debugging session. So I would close the lid, and a couple of hours later I would open it back up. Instead of waking from sleep, the computer would start from scratch as if it had been turned off and the battery was nearly dead. That meant everything I had open was closed. I'm lucky that most of the applications I run can restore a previous session, but it was extremely annoying. I had a similar issue with my previous Asus, and I had blamed Windows for it. The computer often woke from sleep just so Microsoft could perform an update, which used up all my battery. Sometimes I would open my backpack to find a dead laptop that was warm to the touch. I've written this blog post at least five times. Each time I thought I had solved the issue, but then it came back. This time, though, I think I have finally resolved it. So if you have an Asus laptop running Windows and you experience this very annoying issue, you are not alone. In my case, the culprit was the Wi-Fi adapter, specifically the MediaTek Wi-Fi 6E MT7922. On Windows: That's it. After three years of annoying restarts, this finally solved my problem. Now let me explain what was going on. When the laptop lid is closed, Windows initiates "Modern Standby." In this state, the screen turns off to save power, but the system remains partially active to maintain background network connectivity. Shortly after, Windows attempts to transition into a deeper low-power state and disconnects the network adapter to conserve battery. However, the MediaTek Wi-Fi driver ( ) fails to handle this low-power transition properly. About a minute later, it generates Event ID 1033 errors referencing a network device path (specifically in my logs). Because the driver's error message resource is missing or corrupted, Windows Event Viewer cannot interpret the error and displays a generic warning instead: "The description for Event ID 1033 from source mtkwlex cannot be found. Either the component that raises this event is not installed on your local computer or the installation is corrupted..." Because the Wi-Fi driver fails to sleep, it keeps the system partially awake. This causes abnormal background battery drain and heat buildup, which is exacerbated when the laptop is in an enclosed space like a bag. In response to this abnormal drain, Windows triggers Event 507: "Austerity Battery Drain Budget Exceeded." It's important to note that this event is Windows intentionally waking the laptop up to prevent the battery from dying completely. However, because the Wi-Fi driver is already in a crashed or unstable kernel state, the system fails to recover from this forced wake-up. The result is a silent system crash or thermal shutdown, followed by Event 12 ("The operating system started") , which confirms the laptop rebooted. With the fix in place, the Wi-Fi device no longer attempts to enter its power-saving sleep mode, so it never crashes. The ultimate solution would be a fixed MT7922 driver, but try as I might, I haven't been able to find one online. It's been three weeks so far, and I've been able to resume my work without coming back to a crashed computer. I hope this helps someone else. Open Device Manager . Expand Network adapters . Right-click the MediaTek device and click Properties . Click the Advanced tab. In the Property box, select Power Saving . In the Value field, select Disabled .

0 views
Unsung 1 weeks ago

“I mean, nobody should buy this device right now.”

I recently rewatched two reviews of AI companion devices from Marques Brownlee (a.k.a. MKBHD), which both came out in April 2024 – the Humane AI Pin and the Rabbit R1 : = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/i-mean-nobody-should-buy-this-device-right-now/yt1-play.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/i-mean-nobody-should-buy-this-device-right-now/yt1-play.1600w.avif" type="image/avif"> = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/i-mean-nobody-should-buy-this-device-right-now/yt2-play.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/i-mean-nobody-should-buy-this-device-right-now/yt2-play.1600w.avif" type="image/avif"> Brownlee is a charismatic reviewer, and I won’t lie – there’s a certain amount of delicious schadenfreude seeing two products announced with so much unnecessary hubris faceplant so solidly. But past all that, what stood out to me was the storytelling, and this is why I wanted to post these videos; the work feels good here, and deserves studying in how to talk about these things. Brownlee manages to cut through the bullshit and candidly talk (but also show ) what these devices should be all about. There are some nice editing choices; casually pulling up the phone and getting an answer while the AI Pin is still thinking is a pretty powerful moment. The reviews also come with higher-level reflections, and what stuck with me since the original watch years ago were the segments about how more and more often, devices like these – but not just these devices – come out of the gate profoundly unfinished. The Pin and the Rabbit are also interesting to compare. They are both underbaked in some similar ways: the quality of the AI output, overfocusing on hardware at the expense of software, and the interaction systems that throw good money after bad and come out of the gate with strange complexity – AI Pin had the tricky-to-use laser projector menus, and Rabbit R1 managed to overgimmick a simple thing that is a rotary controller. On the other hand, one of the devices felt a lot more ambitious than the other. Also, both had fascinating differences in the packaging and their whole approach – it almost feels like there was a generational difference between the two endeavors. (Humane Inc. has folded since. You can still buy the R1, which was since updated with a new UI, but it seems the company is pivoting to more generic-feeling software .)

0 views
neilzone 1 weeks ago

Replacing our SIP doorbell with a plain, old-fashioned, doorbell

Just over six years ago, I installed a shiny Fanvil i10 SIP doorbell. It was little more than a SIP phone in a doorbell box (as the configuration options made clear), but I wanted something which would ring my phone and Sandra’s phone when someone rang it, wherever we were, and I wanted it to go as SIP/RTP, rather than using a proprietary app. So I installed it, popped it on its own VLAN (because I had to run an ethernet cable to the outside of the front door), configured it to talk to our PBX, and went with it. I didn’t bother with the video side of things. And, for those six years, it has been fine, ringing our phones whenever the doorbell was pressed. Recently, calls from the doorbell have been intermittent in their success in calling Sandra’s phone, whether terminating via SIP client, or routing a call to Sandra’s cellular network. And, sure, I could probably spend the time debugging it, but I was trying to solve a problem which didn’t really need solving: we just need a button for someone to press, and for it to result in a noise in the house, and in my office. We have a parcel box, which is very obvious and next to the door. Delivery drivers are great at dropping a parcel in there, and leaving without ringing the doorbell, which is absolutely fine. There’s usually an emailed delivery notification and, if we are that desperate, we can always open the box and check (although I did consider fitting a sensor the parcel box door, to trigger Home Assistant, but in the end I did not…). We are not - currently, anyway - in a position in which we need to know exactly who is at the day (or, rather, who they claim to be) before we answer the door. So perhaps I didn’t need a “smart” doorbell after all… A £18 Tecknet wireless doorbell has solved this just fine, and has meant that I can get rid of the ethernet cabling across the front of the house. It has no problem transmitting through the house, across the garden, and to the alarm box in my office and, if I want, I can change the alert mode from noise and light to just light. It claims to be IP65-rated, and in any case, it is under a porch - the Fanvil device was just fine there.

0 views
Jason Scheirer 2 weeks ago

A Revival of Sorts: Where I Wound up With my iPod Classic 7th Gen

I’ve been using my iPod classic as my sole music player all summer now. The replaced screen, battery, storage, and front shell are all steady. I’ve found myself on an alternate build of Rockbox called Rockpod ; the main thing I like about it is very superficial: it changes the theme colors based on the playing track’s album art. It also claims other features that probably matter like being flash-aware so it treats flash storage like flash and not like spinning metal. However, the firmware also chokes on MP3s that are not 44kbps. So I have to re-encode everything that isn’t that bitrate. So now I have a system that works: I’m not a huge fan of LLMs, but they can reduce toil in some cases. OpenCode was running a free trial of Ox Alpha one long weekend so I used the free tokens to help me shape my itch-scratch tool: . I use the script to see what files are missing from the iPod, re-encodes them as needed, and checks Musicbrainz for missing album art. It can also update the stock firmware’s itunesdb, which was a nice to have when the tokens were free but I don’t use much. In all, this piece of 2005 technology still feels good to use in 2026 because everything in 2026 sucks so badly . Reboot the iPod in stock firmware for disk use (it randomly trips on its feet and stops working when you copy lots of files) Treat the music library not as a synced copy of my core music library but a transformed copy – the Rhythmbox library is the point of truth and the iPod data is an adaptation of it that plays on the iPod.

0 views
Unsung 2 weeks ago

Before pixels: Modular industrial dashboards

In my recent visits to German and Polish museums, I noticed a recurring theme: modular industrial dashboards, which I imagine have by now been all replaced by software. I don’t know much about these – please write me if you do – but I wanted to share them anyway, perhaps for context, or amusement, or inspiration. They’re interesting design systems, and interesting interaction systems as well. This was a very cool physical display for air traffic control, at the The Deutsches Museum in Münich: = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/before-pixels-modular-industrial-dashboards/1.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/before-pixels-modular-industrial-dashboards/1.1600w.avif" type="image/avif"> = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/before-pixels-modular-industrial-dashboards/2.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/before-pixels-modular-industrial-dashboards/2.1600w.avif" type="image/avif"> At Fernmeldemuseum Stuttgart, these were used to monitor subway trains, or light rail. I do imagine these panels must have been interactive with all the buttons? = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/before-pixels-modular-industrial-dashboards/3.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/before-pixels-modular-industrial-dashboards/3.1600w.avif" type="image/avif"> = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/before-pixels-modular-industrial-dashboards/4.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/before-pixels-modular-industrial-dashboards/4.1600w.avif" type="image/avif"> I like that they light up to show status: = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/before-pixels-modular-industrial-dashboards/5.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/before-pixels-modular-industrial-dashboards/5.1600w.avif" type="image/avif"> = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/before-pixels-modular-industrial-dashboards/6.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/before-pixels-modular-industrial-dashboards/6.1600w.avif" type="image/avif"> One of the modules was a counter: = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/before-pixels-modular-industrial-dashboards/7.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/before-pixels-modular-industrial-dashboards/7.1600w.avif" type="image/avif"> And I believe this was a way to annotate that something was… fixed, maybe? Or on its way to being fixed? = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/before-pixels-modular-industrial-dashboards/8.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/before-pixels-modular-industrial-dashboards/8.1600w.avif" type="image/avif"> A railway museum in Nuremberg used what looks like the exact same system, and I spotted a few modules with their plates removed: = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/before-pixels-modular-industrial-dashboards/9.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/before-pixels-modular-industrial-dashboards/9.1600w.avif" type="image/avif"> = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/before-pixels-modular-industrial-dashboards/10.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/before-pixels-modular-industrial-dashboards/10.1600w.avif" type="image/avif"> And, here’s a similar panel shown in a tram museum in Stuttgart, filled with an incredible typographical tension between DIN and the German equivalent of Dymo: = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/before-pixels-modular-industrial-dashboards/11.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/before-pixels-modular-industrial-dashboards/11.1600w.avif" type="image/avif"> Warsaw’s train museum had a slightly different system, but similar in look and feel: = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/before-pixels-modular-industrial-dashboards/12.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/before-pixels-modular-industrial-dashboards/12.1600w.avif" type="image/avif"> = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/before-pixels-modular-industrial-dashboards/13.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/before-pixels-modular-industrial-dashboards/13.1600w.avif" type="image/avif"> = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/before-pixels-modular-industrial-dashboards/14.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/before-pixels-modular-industrial-dashboards/14.1600w.avif" type="image/avif"> This big industrial switch toggled between day and night. I don’t know if it changed the operation of the system, or is just switched on some sort of a dark mode for the panel itself: = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/before-pixels-modular-industrial-dashboards/15.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/before-pixels-modular-industrial-dashboards/15.1600w.avif" type="image/avif"> And this was at the DASA Museum in Dortmund, from a power plant control room: = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/before-pixels-modular-industrial-dashboards/16.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/before-pixels-modular-industrial-dashboards/16.1600w.avif" type="image/avif"> = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/before-pixels-modular-industrial-dashboards/17.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/before-pixels-modular-industrial-dashboards/17.1600w.avif" type="image/avif"> This was by far the biggest one of the ones I’ve encountered… = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/before-pixels-modular-industrial-dashboards/18.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/before-pixels-modular-industrial-dashboards/18.1600w.avif" type="image/avif"> = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/before-pixels-modular-industrial-dashboards/19.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/before-pixels-modular-industrial-dashboards/19.1600w.avif" type="image/avif"> …with the biggest variety of modules… = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/before-pixels-modular-industrial-dashboards/20.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/before-pixels-modular-industrial-dashboards/20.1600w.avif" type="image/avif"> = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/before-pixels-modular-industrial-dashboards/21.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/before-pixels-modular-industrial-dashboards/21.1600w.avif" type="image/avif"> = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/before-pixels-modular-industrial-dashboards/22.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/before-pixels-modular-industrial-dashboards/22.1600w.avif" type="image/avif"> = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/before-pixels-modular-industrial-dashboards/23.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/before-pixels-modular-industrial-dashboards/23.1600w.avif" type="image/avif"> This was also the panel I showed some molly guards from before. But today I want to end at this great switch: = 2x) and (width >= 700px)" srcset="https://unsung.aresluna.org/_media/before-pixels-modular-industrial-dashboards/24.2096w.avif" type="image/avif"> = 3x) or (width >= 700px)" srcset="https://unsung.aresluna.org/_media/before-pixels-modular-industrial-dashboards/24.1600w.avif" type="image/avif"> Don’t you just want to rotate it, no matter what it does?

0 views
マリウス 2 weeks ago

Updates 2026/Q3

This post includes personal updates and some open source project updates. もしもし、マリウスです, faxing at 9600 baud directly from Tokyo, Japan . After a short hop over to Hong Kong and Shenzhen , I’m back in the beautiful neighborhood of Shimokitazawa , where I’m spending almost the entire rest of the year until right before Xmas, when I’ll be heading back to Shenzhen. First things first, a warning: This is a very long post as it includes a metric ton of project updates. If you’re interested in the stuff that I’m building then this update is definitely for you. However, let’s start off with some infrastructure-related things. A few major updates happened in the past quarter with regard to my infrastructure. Probably the most important one is the migration from individual VPS instances to my own bare metal running a Proxmox “datacenter” . While I had been relatively satisfied with Vultr in the past, with an ever-increasing number of virtual server instances, for projects like MSG.TAXI , Hyperuplink , tty.fail , and everything related to this very website, my cloud service bill became overly expensive, all while contributions sadly decreased over the past months, making it unsustainable to run cloud infrastructure, especially to that extent. It just so happened that Vultr had more maintenance windows than usual over the past months, which prompted me to finally deal with the task of moving my VPS instances onto my own hardware. By migrating to bare metal, I was able to slash costs by approximately 30%, by discarding the resource safety buffer I had accounted for within each individual VPS, for a more dynamically allocating approach across individual instances. With rising hardware costs, however, one trade-off that I had to make concerns high availability. A full hardware failure on the current setup will result in all uncached services becoming unavailable for as long as the repairs take. Unless prices for hardware go down again, which is unlikely to happen , or contributions pick up again, which in the current market climate is equally unlikely, I won’t be building out the setup any further. As for some general stats about this specific website, over the past six months it generated at its peak over 270GB of traffic per month, which is considerable, given its compact size and its GTmetrix rating of (100% performance, 98% structure, 450ms LCP, 0ms TBT, 0.02 CLS), with the first contentful paint after 344ms, the speed index at 366ms, the time to interactive at 436ms, and an average page size (including images) of a few megabytes at most. Because I stopped running any form of analytics software, due to privacy reasons at first, but ultimately because of the realization that it has become pointless with all the robots LARPing as legitimate human traffic, I cannot tell you the number of visitors this website or any of the related projects have, and frankly I don’t even care. Not because I don’t care about actual humans being interested in the things I’m publishing, but because over the past months I have been receiving an increasing amount of feedback via e-mail, as well as welcoming a surprising number of new members to the community channel , so that I don’t need analytics software to show me that visitors appreciate the work I’m putting in and decide to stick around. Speaking of sticking around: The SimpleX group that existed next to the primary XMPP channel is no more. Neither the platform, nor the group itself developed in a favorable way over the past years, despite its almost 500 members. SimpleX turned from an interesting privacy platform into yet-another-Telegram-type messenger and is on the way to enshittification with VC investments from e.g. ACP, who is an investor in K2 Space (ELINT), OnScreen.ai (tracking), Zorus (employee/network monitoring), as well as Jack Dorsey. To make matters worse, at the end of September Evgeny Poberezkin reached out to me via e-mail with the following request: Thank you very much for this article: https://xn--gckvb8fzb.com/an-overview-of-privacy-focused-decentralized-instant-messengers/ (we shared it here: https://simplex.chat/ <redacted>). We launched equity crowdfunding on Wefunder in August ( https://simplex.chat/ <redacted>), to give users the opportunity to get a stake in SimpleX Chat and benefit from its growth - 150 people have already invested. Please help us spread the word - maybe you could write about it and some other recent news: the foundation, channels, public names, and supporter badges, which we launched recently ( https://simplex.chat/ <redacted>). It would be great to connect - SimpleX link is below - please send any questions! Thank you again and all the best Evgeny P.S. If you write something, could you please share with us before publishing so it complies with Regulation Crowdfunding rules? We cannot promote (and won’t be able to re-share with our community) if it mentions valuation, security type, how much is or left to raise (saying how many people invested is allowed), and how the funds will be used. We can mention perks we provide though. Thank you! – Evgeny Poberezkin SimpleX Chat, Founder Despite my article clearly stating, quote: Red flag: VC funded, specifically by Jack Dorsey , since Aug 14, 2024, hence I do not recommend it any longer. … Evgeny (or, more likely, his team that didn’t properly vet every organic site linking/mentioning SimpleX) sent me this fairly generic looking e-mail, to which I replied by pointing at the red flag . Long story short, the fact that SimpleX has now seemingly become so much of a product in the literal sense that they are trying to get approved organic content out for their funding campaign shows once more that it isn’t a suitable option for the privacy/decentralization community anymore. I have therefore deleted the SimpleX group, as well as removed all mentions of the messenger on this website, treating it the same way as I treat e.g. Telegram, WhatsApp or any other commercial platform. Anyway, a few days ago I shut down the last Vultr instance, an OpenBSD machine that had been serving this website for years. It outlived the rest of my cloud infrastructure by a couple of days. The clearnet version of this website had moved from the instance to a Bunny storage zone with a pull zone in front of it earlier in September, which happened due to the increased traffic by bots and maybe humans , and which means that there is no origin server at all any longer. The Tor and I2P sites still needed a machine of their own, since Bunny doesn’t offer a way to serve either of them, hence both are now served from a virtual machine on my own hardware. That machine has no public IP address, which neither the Tor daemon nor i2pd needs in order to publish a site. Unfortunately it does appear to make the I2P site less reliable, presumably because an I2P router that nobody can connect to depends on other routers to introduce it, and in a measurement about four hours after the move, 4 out of 8 requests to the eepsite succeeded, while all 8 requests to the onion service did. If the eepsite doesn’t load for you, simply try again, since a second attempt usually works. The clearnet side has a trade-off of its own, namely that this website now depends on a provider being there, where the VPS used to be able to serve the entire thing by itself if I ever took the CDN away. What makes me comfortable with it is that the build is still a folder of plain files that any web server can serve, hence going back would require not much more than a server, a workflow step and a few changes in the DNS, but not a rebuild. There’s a dedicated write-up on the whole publishing pipeline in the works, so I’m keeping it at this for now. It’s been almost three months since I got the Lenovo X1 Carbon Gen 14 Aura and switched from the StarBook Mk VI to it , and I haven’t regretted it so far. The laptop performs as well as I had expected it to while offering very decent battery life. At times I’m getting dangerously close to its 32GB RAM limit, which is something I had expected before purchasing it, but most of my workloads still have plenty of breathing room. Shortly after upgrading to the X1 Carbon I also decided to get an external (portable) 19" screen, and so I snapped up the Uperfect GR19BU. So far my experience with the display has been very decent, but I won’t get ahead of myself as I’m going to release a dedicated write-up/review on it soon. However, with several other new additions to my setup, like this display, the Mudi 7 , and the things below , it’ll probably make sense to also start preparing a follow-up on the travel desk setup from earlier this year. As usual with many of the posts on this site, however, it takes between one and three months from the first line to the finished and published post, so don’t count on it until the end of the year or maybe even early next year. After having had a few minor issues with the uni USB-C hub (8-in-1 with USB-C power), and slowly running out of USB ports, I decided that it was time to get a proper Thunderbolt 4 dock for my X1 Carbon , and what option would be better than the official Lenovo ThinkPad Thunderbolt 4 Smart Dock Gen 2 7500, for which I happened to find a pretty sweet deal. As a matter of fact the deal was so good that I didn’t realize at the time of buying that the dock comes with A) its own external 135 Watt power adapter and cannot be powered through a regular USB-C PD charger, which is sort of messing with my minimal yet productive travel desk setup , because I’m already carrying a PSU that weighs over 800g, and B) with cLoUd CoNnEcTiViTy . The dock itself is 590g, its PSU (plus power cord) another 350g, which amounts to 940g total added weight for only the dock. Clearly the dock isn’t meant to be a travel-friendly option, but it seems like no Thunderbolt dock really is considering the (even heavier) alternatives, like the CalDigit TS-4. However, with regular USB-C hubs not providing enough connectivity, performance and, most importantly, stability, it was time to try a different class of devices. Sadly the dock only lasted a single day before it stopped working and had a slight smell of burnt electronics to it. Hence I had almost three weeks of back and forth with Lenovo’s customer service in order to get it RMA’d/replaced, which was a frustrating experience to put it mildly. Then again, I don’t think the lackluster performance of Lenovo in the specific geographic region that I had to deal with them in is a fair representation of Lenovo’s global customer service, but very likely typical customer service across most companies in that region. Anyhow, I eventually received the replacement and I’m finally able to use it. The hardware is fairly decent, I haven’t encountered any odd messages in my log yet, and I finally have enough USB-A/-C ports to connect all sorts of peripherals, like my keyboard, my mouse, the portable monitor , and more. However, I’d wish that these docks would replace their HDMI and DisplayPort connectors with more USB-A/-C ports and maybe even a halfway decent sound card with various audio connectors (3.5mm amongst others). I never needed that many display outputs on a computer, let alone on a portable device. But I guess I’m the exception, as pretty much every dock manufacturer seems to follow this quadruple/sextuple/octuple display-setup trend. The only meh part of the dock seems to be the integrated Ethernet card/port, that appears to be a Realtek RTL8156B ( ), which is a bit of a potato. There are plenty of user reports online that describe all sorts of issues with this specific NIC under Linux. While it does offer 2.5G, matching my new switch perfectly, it does seem to come with a few issues with regard to reliability and actual performance. However, with the amount of USB ports on the dock I can connect one of the many 1G Ethernet adapters that I have and be done with it, in case the integrated NIC should ever give me a hard time. So far, however, it had been working without issues. In an ongoing effort to USB-C-ify all of my hardware I also pulled the trigger on a new portable switch, namely the Ubiquiti Flex Mini 2.5G. I’ve been using the blocky Netgear 1GbE switches forever, but I’ve always struggled to power them, as they come with a barrel connector and a dedicated PSU. While I did at some point get a USB-A-to-barrel-connector cable, judging from the power output of the PSU those switches are not intended to be run off of a USB-A port. It works, but it’s probably not the best idea. Short story long, I went for the Flex Mini primarily because it is powered via USB-C, so that I don’t have to carry another PSU or worry about damaging the device. As an added benefit, the switch now offers 2.5G links, which the Lenovo dock , as well as the Mudi 7 and the Slate 7 can benefit from. Ideally my portable NAS should also benefit from the higher speeds, but sadly that probably won’t happen with the current hardware. Speaking of which … The Ultra-Portable Data Center (v2) has had its second birthday and has held up extremely well, considering all the travel and, at times, incredibly dusty, humid, and/or hot environments that it went through. More importantly, though, even two years later there is still not a single comparable, commercial product on the market that would make me want to replace the existing system with it. Every piece of hardware that I’ve stumbled upon to date appears to come with major hard- or software headaches, be it the UnifyDrive UT2, the Beelink ME Mini, the CWWK x86 P6, or even the significantly larger/heavier AOOSTAR R7. The closest in terms of software freedom, hardware reliability and physical footprint to date appears to be the QNAP TBS-464, which is an ultra-thin and lightweight, portable 4-bay M.2 NVMe NAS introduced back in 2021. Because I had to further reduce the weight and size of the items that I carry with me on my travels, however, at the beginning of September I began working on the next iteration of my ultra-portable NAS, the UPDC v3. I haven’t yet found the time to pour the endeavor into a dedicated write-up, but I am happy to say that I’ve managed to reduce the build’s footprint from initially around 1.48 liters down to as little as 0.68 liters in volume. I won’t spoil too much, yet, but it’s fair to say that I’m relatively happy with the end result and that it allowed me to make the UPDC a fixed part of my carry-on luggage . Not much happened on the keyboard front this quarter, apart from a set of PBS Black on Black that I was gifted, and that has since been on my Kunai . It has become one of my favorite keycap sets and it is pretty much what I was hoping for . The PBS keycaps are however not as rough/textured as I was hoping them to be, which is a bit of a bummer. Anyway, I might post a dedicated long-form review in a few months when I’ll be able to better judge long-term use. I invested some time in pursuing my open source projects in the past quarter, hence there are a few updates to share. Several of them shared the same two things, which were a move to the SEGV-1.1 license , and a vanity import path under my own domain. As some of you might remember, I had an unpleasant encounter last year with one of the Alacritty developers, which prompted me to do something that was long overdue, namely switch to Ghostty. Along the way I implemented the exact feature I initially wanted for Alacritty and made my code public, on a dedicated branch in my fork of Ghostty. Over a year later, I’m still maintaining that patch. If you’re using my patch, make sure to update your local version. Neon Modem Overdrive , my BBS-style command line client, received a whole new backend this quarter. It can now connect to Hyperuplink, the bulletin board of the future, to which I’ll get in just a second . Neon Modem is the first dedicated client implementation for the relatively young and not-yet-well-thought-out REST API. Additionally, a shared prompt package now handles the server URL and credential input for that system as well as for Discourse and Lemmy, instead of each one keeping its own copy. I also tracked down a longstanding source of UI lag. The post-create and post-show windows were doing more work on every keystroke than they needed to, and reworking their handlers and rendering made the interface responsive again. A new release with all of this is available on tty.fail , with binaries on GitHub . Kopi , the command line coffee journal, had its two heaviest dependencies replaced. The SQLite driver moved from the -based to the pure-Go , so Kopi now builds without a C toolchain and ships as a fully static binary on every platform. The OCR helper, which reads the details off a photo of a coffee bag, moved from an Ollama-specific client to the official OpenAI Go SDK , so it can point at any OpenAI-compatible endpoint rather than only an Ollama instance. The Go module was renamed to a vanity import path under my own domain ( ), and the usual dependency, workflow and GoReleaser housekeeping came with it. On top of this, Kopi received the first contribution , which was applied to it via at the end of July. reader , the command line web page reader, had a productive quarter. The biggest change is the removal of the journalist dependency, whose crawling logic is now part of reader’s own package rather than pulled in from a separate module. As I don’t maintain journalist any longer it made sense to pull out the bits that I need for reader. Additionally, reader gained proxy support, so it honors the standard proxy environment variables (#23). It now also correctly handles the URL scheme when deciding whether a source is an HTTP resource (#35), and it got a fix for an -related issue (#37), which I worked out despite the reporter never supplying the example files I asked for. Note: Don’t be that guy . If you open an issue in any piece of software that you don’t pay for and that someone else dedicates their time to free of charge, consider upfront if it’s really something that you’re going to use, and if it’s an issue you’re willing to dive into and help fix. If either of these are a clear nope , then simply don’t report it at all. usbec , the USB Equipment Commander daemon that runs commands when USB devices are plugged in or removed, had its one core dependency reimplemented in-tree and enhanced. The module was dropped and its Linux netlink listener rebuilt inside usbec’s own package, so the daemon no longer depends on an outside module for that. The license moved from GPLv3 to the SEGV-1.1 license , the module was renamed to the vanity import path, and the release workflow and GoReleaser config were fixed along with it. In addition, the USB Equipment Commander is now a USB & Network Equipment Commander, with the introduction of NetworkManager (via D-Bus). This allows you to have usbec run commands whenever the network changes in any of the various ways it can change. My motivation was to run a script that queries my public IP and the inferred location via and shows it as a desktop notification whenever NetworkManager (re-)connects. zpoweralertd , my Zig rewrite and drop-in replacement of poweralertd, which is a UPower-powered power (.. power, POWER, POWERRRRR) alerter, has received a deep and thorough refresh. The biggest change is the C bindings, which I have replaced with handwritten s, just the way I had used them for the first time in ssh-askpass-zigtk , but more on that new tool below. The second big change is the Zig compatibility, which now requires at least 0.16, and which I have tested against the current master/future 0.17 release as well, to make sure that everything will continue working. With this, I also largely refactored the code, for which I initially took inspiration from poweralertd. The restructuring allowed me to clean up the codebase and find a handful of memory-related issues along the way. A new version of zpoweralertd has been released that contains these enhancements and, for the first time, it is available as pre-built binaries directly from the releases page. cexec , my small cached-exec wrapper that runs a command and caches its output for a given amount of time so that re-running it returns the stored output instead of executing it again, was rewritten from Go to Zig this quarter. The new version is a drop-in replacement for the previous one, but it changed a few things in the background, one of which is the storage. Previously cexec used BuntDB, which turned out to be a bad choice for a process that can theoretically run multiple times in parallel and access/write to the same database. The new version, instead, uses plain files that are scoped to the actual commands that are being executed. In addition, the new Zig version supports encryption for the cached runs, with an optional key from or the environment variable, which makes using cexec suitable even for output that contains sensitive data. On top of that, everything cexec does is now also available as a Zig module, so that the same caching can be used from another program without having to shell out to the cexec binary. New this quarter is , a GTK4 helper written in Zig . OpenSSH runs an askpass program to prompt for a passphrase or a yes/no confirmation when it has no controlling terminal. The reason it exists is my own issue with X11, which I explained here . The reference askpass, and most others, link GTK against X11, so they fail to build on my Gentoo system with the global USE flag. does not require X11 dependencies, so it builds and runs on an X11-less GTK4. It works on Linux and (hopefully) on the BSDs alike. Also new this quarter is Switchyard , a lightweight bridge that accepts e-mail over SMTP and forwards each message to XMPP. You might have read about it before in the dedicated post that I had published at the beginning of August, but if you haven’t I recommend going through it if a bridge for SMTP to XMPP sounds like something you could have a use for. For years I had a small shell script in my dotfiles that popped up a bemenu list whenever I clicked a link, so that I could decide which browser it opened in. This quarter I turned that idea into a proper GTK4 application written in Zig, namely Browser Select . It registers itself as a web browser, hence every link another application opens goes to it first, and a small popup then lists the browsers installed on the system for you to pick one with the mouse or the keyboard. Just like the script before, that used the Go version of cexec as a binary to cache the choice for a few seconds, Browser Select also uses the new Zig cexec library for remembering a choice for a while, so that clicking a burst of links doesn’t lead to repeated asking for a browser. The Flipper BUSY Bar review that I posted this quarter came with a little goodie: busybar.zig . It is a Zig 0.16 client library and command line tool for the Flipper BUSY Bar, implementing the device’s current OpenAPI specification as closely as possible, so that you can drive it over its HTTP API from Zig code or straight from the shell. It uses nothing but Zig’s library, which means it builds for every target Zig supports, including macOS and Windows. Darkwing Ducky is a BadUSB (“Rubber Ducky”) firmware for the PicoUSB, an RP2040-based board, built in Zig 0.16 with MicroZig . I’ve struggled to finish this for about ten months or so, primarily because implementing the required USB HID code that acts like an external keyboard wasn’t all that straightforward with MicroZig. Anyway, Darkwing Ducky announces itself to the host as an ordinary keyboard and then types out a predefined sequence, which can be useful for automating the setup of a machine that you have physical access to, or, well, for other things. While the PicoUSB comes with its own CircuitPython-based software, I wanted to try Zig on hardware, especially with MicroZig for a while and so this device was the perfect excuse to do so. If you’re curious, the repository has the details on the payload format and how to flash it. The internet bulletin board software that I had been writing about as ▓▓▓▓▓▓▓▓▓▓▓ in the previous updates has a name, and it’s out. Hyperuplink went public at the end of August, together with a dedicated post that covers what it is, why it exists and how to run it. If a JavaScript-free forum as a single binary sounds like your kind of thing, read that one first and come back here afterwards. Otherwise you might as well skip this part. Most of the quarter went into the bits and pieces that the board needed before anyone other than me could run it. Attachments and profile pictures with local or S3-compatible storage, board-wide settings and an administration UI for all of them, a search, soft-deletion for categories, forums and topics, and a manual that is embedded in the binary and available under Help -> Manual . On top of that came a whole set of themes and color schemes, as well as the packaging, which now covers Docker and Podman images, Quadlets, a Helm chart, a nixpkg with a NixOS module, an ebuild for Gentoo, and service files for systemd, OpenRC and rc.d. And if that wasn’t enough already there is the REST API, which is what Neon Modem connects to. If you’d like to have a look at Hyperuplink yourself without any commitment, there’s a demo instance that you can check out. You can find its login details on the official website . Account creation is disabled on the demo instance (for now). Go compiles down to a single static binary, which is why it is a great choice for Hyperuplink. However it has nothing along the lines of Django, Rails or Phoenix that takes care of the web parts, hence a good share of Hyperuplink was never about the bulletin board at all, but about routing, controllers, models, migrations, background jobs, translations and configuration. At the end of July I moved that share out of the repository and into Go on Glides , a web application framework for Go that includes everything needed to build database-backed web applications, on top of Fiber v3 and pgx , with embedded migrations, an asynchronous job queue, cron jobs, i18n, local and S3-compatible storage, and helpers that each project would otherwise have to reimplement. The reason for the split is that I’m building a second service on the same foundation, namely Maya , which meant that Hyperuplink’s internals had to become something that more than one program can use. Inca is the spiritual successor of addrb and caldr , my two earlier attempts at the same problem, this time as a single command line client for CalDAV and CardDAV that synchronizes calendars, tasks and contacts into a local database for offline use. It is built on top of the “framework” that I built and make use of in zeit , and therefore it shares a lot of zeit’s UI aesthetic. On the other end is Maya , a CalDAV and CardDAV server as a single Go binary with PostgreSQL underneath it, which (sadly) uses a patched hard-fork of go-webdav , and which exists because neither Radicale nor Baïkal ever made me happy. It’s the second program built on Glides . I’ve been dogfooding Maya myself since early September, and as of now it still isn’t publicly available because it’s not yet at a point that I’m comfortable releasing it, in particular due to its hard-fork of go-webdav, which was a requirement because the upstream project is sadly pretty much dead at this point. However, given the absolute mess that DAV protocols are, it’s not even surprising that the maintainer seemingly lost interest in this project, and that the ecosystem is so bad. Anyway, I have both, Inca and Maya, at a point that I can daily-drive them and, more importantly, that other clients (Android, iOS, desktop) can participate without too many hiccups along the way, but I’m not at all happy with the results for reasons that I will get into if I ever choose to release Maya. Also new this quarter, and admittedly not something one might call a modest undertaking , is Netrunner , a web browser built on WebKitGTK and GTK4, written in Zig . I’m calling it the hacker’s browser as it’s meant for people who prefer a lightweight browser over Chromium and Firefox and who care more about configurability and about built-in integrations than about endless features and add-ons. Netrunner deliberately leaves out a number of things that other browsers have, bookmarks being probably the most obvious one, because the people it is built for tend to have a system for those features in place already. Netrunner is configured through a single TOML file that holds the static settings as well as the runtime state, e.g. which sites are allowed to run JavaScript, play audio or send notifications. The session (i.e. open windows and their tabs) is also persisted in that one TOML file when the browser quits, and restored on the next start. Two other features that Netrunner comes with built-in are Onion addresses and Eepsites, which are native protocols for the browser. By default, whenever you open an URL or an link Netrunner opens a connection via Tor or i2pd and keeps it alive for as long as you browse sites within the Onion/I2P network. As soon as your browsing activity goes back to the clearnet, Netrunner automatically disconnects from Tor/I2P again. To the user these connects/disconnects happen completely transparently and every network gets a of its own, so a tab that follows a link onto another network moves over and keeps its back and forward history. In plain English this means that and URLs are indistinguishable from any other URL and you don’t need to do anything special to be able to open them. Obviously Netrunner is not a replacement for the official Tor Browser that the Tor Project releases and that is somewhat hardened to make sure you stay as anonymous and safe as possible. Instead, Netrunner’s Tor and I2P integrations are intended for the casual user who enjoys the freedom of browsing those networks as if they were part of the “normal internet”. Speaking about the normal internet, one thing that can’t be missed, especially these days, is content filtering. While WebKit sadly doesn’t support running a full-blown uBlock Origin, its own content filter engine is nevertheless a relatively decent option for basic ad blocking and annoyance filtering. As a matter of fact, Netrunner uses the same AdBlock and uBlock Origin lists that popular browser extensions use, but it does so by downloading and converting them into the WebKit content blocker format via adblock-webkit-convert.zig , one of two small Zig libraries that came out of this browser experiment. Sadly, the WebKit content blocker format does not support all the trickery that e.g. uBlock is able to do within its browser extension, which means that no, you won’t be able to avoid YouTube ads within Netrunner, at least for now. You will however still score above 62% on AdBlocker test sites , which is fairly okay. The other library that came out of this experiment is osdetect , which does what its name suggests: It detects with some amount of confidence what operating system a program is running on, and it gives you specifics like whether it’s e.g. a Debian or a Gentoo machine, or not even a Linux at all. I won’t tell what my main motivation for building this library was, but if I should ever get to the point that I have a 0.1 version of Netrunner ready for release you will be able to the source code for to find out. Which brings me to the release. Not only to that of Netrunner or Maya, but to the more general question of open source and how I intend to contribute to the ecosystem moving forward. Despite having a landing page online, Netrunner is a fun project that I don’t take too seriously and that I’m currently dogfooding, just like I do with Maya , to find out whether this is a project that I can imagine maintaining long-term, or whether it is one that will eventually outgrow my availability. After two decades of putting the software that I build for myself online, I have come to realize one or two things. The first thing is that “just putting it out there” won’t benefit the software and it certainly won’t benefit me. My main motivation for building all these things is my own curiosity about how stuff works and, ultimately, my own needs. I need a proper CalDAV/CardDAV server that is pleasant to administer/maintain and that can talk to all of the software that I’m using, hence I’m building Maya (and Inca) . I need a proper TUI client for Keebtalk and a few other forums, hence I’m building Neon Modem Overdrive . Speaking of which, I needed a forum and I was sick of the cruft that is phpBB or Discourse, so I built Hyperuplink . And it’s also me who is annoyed by the utterly insane bloat of modern web browsers, which is why I started building Netrunner. Publishing any of them inevitably changes the software from “what I need” to “what I need and what others seem to need” , and there is no guarantee, even if you go the extra mile to implement what others ask for, that those people will stick around or ever start contributing themselves. Zeit is one example where I experienced exactly that, multiple times, and every time it left a bitter taste in my mouth and, what’s worse, hundreds of lines of code that other people had requested but that nobody ended up using long term. At some point Zeit v0.x had become so bloated with other people’s needs that I rewrote it from scratch as the v1 release that it is today, with only the features that I believe make sense to support long term. The second thing that I realized is that “putting it out there” in hopes of finding like-minded people to collaborate with is a pipe dream. The open source “community” has been broken for a long time and, in most cases, was never much of a community to begin with, but rather the developer-equivalent of a one-man band . Not that there are no exceptions, however, my projects usually aren’t those exceptions. Kopi received its first contribution only this quarter, two years after I initially released it, and it was a one-time submission rather than something that materialized into a long-term collaboration. reader , in the very same quarter, collected a handful of issues, one of which I fixed without ever receiving any feedback on it whatsoever. And if you look through the few “Issues” sections on GitHub that I haven’t disabled yet, you’ll see that it’s the same story across the other projects as well, and you might understand why most of the repos lack the “Issues” tab these days. A single patch against two or three dozen issue reports is roughly the ratio that every single one of my projects has had over the past two decades, and I don’t believe that this is because my software is particularly unattractive to contributors, despite it being intentionally niche, but simply because writing a patch for someone else’s program is work, while filing a request is at most a two-minute annoyance. This is also why I, contrary to many other voices in the industry, do not regard opening an issue report as an actual contribution to a project. With all due respect, I don’t want your issue reports, keep them, especially the drive-by ones for something that you’re unlikely to end up using anyway. What a public repository attracts, hence, is an audience rather than a community , and many times that audience has a very short attention span. All of this eventually turns a maintainer into more of an unpaid support desk, which is not what I would like for myself. On top of that, LLMs have taken away the one argument that publishing open source software still had going for it. That argument wasn’t that a stranger would show up and maintain your software for you , but that someone out there might one day need the exact same thing badly enough to extend what you had already built, instead of writing it from scratch all by themselves. In 2026, however, that someone doesn’t need your repository any longer, because they’ll describe what they want to a model and get back something that compiles. Whether what comes out the other end is any good depends on the person directing the LLM and on the effort, or, dare I say, the money they’re willing to throw at it, rather than on the LLM itself. Code itself has become relatively cheap . As a matter of fact, if you want a specific feature implemented in any of my years-old tools, you might as well ask the machine to do it for you, so you can have what you need for the time being. And frankly, I’m quite happy about that! I’m happy that a random passer-by can get the feature that they thought they needed during their euphoric discovery phase of a tool they just found out about, mainly because I also know that the moment the honeymoon phase ends and the person loses interest in the tool, their interest in that feature will vanish along with it, and it would be left up to the maintainer to continue supporting it. Don’t get me wrong, I’m not arguing that collaboration never works, because examples like Linux, curl and PostgreSQL prove the opposite, but I am arguing that for small programs that a single person can hold in their head there are very few reasons for others to actively contribute, and even fewer in a world of automated code generation. Going back to where I started, I’m not sure yet whether I’ll ever publish any of the newer tools and programs that I’m building, like Maya or Netrunner, simply because I don’t see much of a reason to do so. Especially when, for projects like Netrunner, I know of far more popular examples that still died the moment their maintainer stopped investing time into them. And maybe that’s a good thing. Maybe these kinds of projects, just like the ones that I’m publishing, are simply not relevant enough in the grand scheme of things. Maybe it’s just Darwinism at work, and maybe that’s just how things should be after all. There he goes. One of God’s own prototypes. Some kind of high-powered mutant never even considered for mass production. Too weird to live, and too rare to die. – Raoul Duke

0 views
Julia Evans 2 weeks ago

Replacing the old battery on rechargeable bike lights

Hello! Recently I needed bike lights for my bike. And I remembered that I already had rechargeable bike lights that I bought ten years ago, that I hadn’t tried in a long time. I tried to recharge them, but after fully charging them, they only worked for maybe 5 minutes before they turned off again. I don’t know much about electronics, but I’ve been curious about whether it’s possible to fix old electronics for a long time, and this seemed like the perfect repair project because I might just need to replace the battery. So I went to the local queer makerspace where I’m a member to use the soldering iron and try to do it! I don’t know much about electronics and this post does not contain any safety advice because I don’t know much about safety. I think it’s nice to do projects in a community space where you can get help. The bike light felt like it was made of silicone, so I cut open the silicone in a haphazard way along something that vaguely looked like a seam. I definitely ripped some silicone in the process and it was pretty messy but I got it open and found the circuit board. I don’t know the model number of the bike lights but there’s a photo of them at the end of the post. There were some screws attaching things together so I removed them so I could get the circuit board out. Mostly I tried to remove as few screws as possible because I was worried about losing them or not being able to put them back after. I probably put the screws in a bag or something. I took out the circuit board. Here’s what it looked like: You can see where the battery is attached, I think it’s left of RI3 and above Q2. Here’s what the battery looked like: I’d never desoldered anything before, so I found the iFixit guide to desoldering and read it. Also I asked my friends Lee and Lauria for advice. Here were the steps I ended up following based on the guide & the advice I got: In the picture of the battery in Step 3, you can see it says something like “3” and “LI???77”. There’s a piece of metal that I think is welded or something to the top of the battery. It seemed impossible and also maybe not smart to try to remove so I wasn’t sure how to find out what an “LI????77” was or how to order another one. I’ve been trying to avoid using LLMs (though I will not get into that because I am exhausted by LLM discourse and I’m sure you are too), but I really had no idea how to figure out what the battery was so I asked an LLM. It gave the response “LIR2477”, which (when I looked it up) looked exactly the same as my battery so I figured that was plausible. I would be interested to learn non-LLM ways to figure this out though. There must be a way. Lauria showed me how to use DigiKey’s search which was very cool though DigiKey didn’t have that part. (edit: someone in the replies told me that this kind of coin cell battery is named according to its dimensions, and you can use plastic calipers to measure the dimensions of the battery. So I guess a non-LLM way would be to measure the battery with calipers and try to match it to something on the List of battery sizes Wikipedia page, though that page only mentions CR 2477 and not LIR 2477. It’s a good example of what’s fun for me about trying to avoid LLMs, this “List of battery sizes” page is super interesting and if I use an LLM I might never find it) I went to AliExpress and ordered: I think the batteries were $3 each and the glue was $8. The parts took maybe 2 weeks to arive, and once they arrived, I went back to the makerspace and: Then after waiting some amount of time for the glue to dry I took it home and waited 24 hours for the glue to cure. Also I took the old batteries to somewhere nearby that accepts old batteries. The lights work! I have used them to bike at night! I still haven’t needed to recharge them (and tragically I had to order a new Mini USB cable because I got rid of all my Mini USB cables, so I’m still waiting for that), so I still don’t know for sure how long the lifetime of the new battery will be. Here’s what the light looks like after re-gluing. You can see that I didn’t glue very carefully. It didn’t really go back together that well but I’m hoping it’ll be good enough. I thought it was really cool that I was able to do this with extremely minimal electronics skills! It cost about $20 CAD to buy the parts, and (whether or not the repair holds up, I’ll try to update this post in the future!), it was fun to try to repair something and learn something new. Use a desoldering pump to remove most of the solder Once most of it is gone, kind of pull them apart to try to separate them Also try to avoid getting the battery too hot in the process by taking breaks to let it cool down. I’m not very good with a soldering iron so it took a while. The battery has an attachment that is welded to the top. For a while I thought I needed to remove this and it seemed impossible, but it turned out the replacement battery comes with that part so actually I was supposed to leave it alone. 2 batteries (I had 2 bike lights and I wanted to fix them both) some silicone glue to glue things back together soldered in the new batteries put the screws back in. The screws were very small and hard to hold, so at this point I dropped some screws on the ground and couldn’t find them because they were too small. So I just used fewer screws and hoped for the best. used the glue to try to put everything back together. Make a somewhat halfhearted attempt to clamp the parts I was gluing together

0 views
Jeff Geerling 2 weeks ago

I'm starting HomelabFest (in St. Louis, Sep 2027)

I've been working on my homelab for years, and I enjoy sharing what I learn through this blog and my YouTube channel. Over the past few years, I realized the homelab community (which isn't really a defined thing—that's okay) hasn't had its own gathering, the way makers, software engineers, embedded developers, and HPC professionals do. There are many events that have crossover into the homelab realm, but nothing focused on energy-efficient servers, privacy-respecting self-hosted software, keeping old hardware useful, or cable management and rackmounting on a budget.

0 views