I recently discovered that some of the Raspberry Pi models support the Linux Kernel's "Gadget Mode". This allows you to configure the Pi to appear as some type of device when plugged into a USB port, i.e. a Mass Storage/USB stick, Network Card, etc. Very nifty for turning a Pi Zero into various kinds of utilities.
When I realized this was possible, I wanted to set up a project that would allow me to use the Pi as a bridge from my document scanner (has the ability to scan to a USB port) to a SMB share on my network that acts as the ingest point to a Paperless-NGX instance.
Scanner -> USB "drive" > Some of my code running on the Pi > The SMB Share > Paperless.
I described my scenario in a reasonable degree of detail to Claude and asked it to write the code to glue all of this together. What it produced didn't work, but was close enough that I only needed to tweak a few things.
While none of this was particularly complex, it's a bit obscure, and would have easily taken a few days of tinkering the way I have for most of my life. Instead it took a few hours, and I finished a project.
I, too, have started to think differently about the projects I take on. Projects that were previously relegated to "I should do that some day when I actually have time to dive deeper" now feel a lot more realistic.
What will truly change the game for me is when it's reasonable to run GPT-4o level models locally.
Fun fact: Gadget mode also works on Android phones, if you want a programmable USB device that you can easily program and carry around
I made a PoC of a 2FA authenticator (think Yubikey) that automatically signs you in. I use it for testing scenarios when I have to log out and back in many times, it flies through what would otherwise be a manual 2FA screen with pin entry, or navigating 2FA popups to select passkey and touching your fingerprint reader.
This answers a question I didn't realize I had. I had already been thinking about some kind of utility gadget made up of a Pi Zero with a tiny screen and battery, but an Android phone solves a lot of problems in one go.
They have some examples that emulate an USB keyboard and mouse, and the app shows how to configure the Gadget API to turn the phone into whatever USB device you want.
The repo is unfortunately inactive, but the underlying feature is exposed through a stable Linux kernel API (via ConfigFS), so everything will continue working as long as Android leaves the feature enabled.
You do need to be root, however, since you will essentially be writing a USB device. Then all you have to do is open `/dev/hidg0`, and when you read from this file you will be reading USB HID packets. Write your response and it is sent on the cable.
I always wondered if we could convert an old andoid phone or tablet into a USB/wireless graphics-tablet for drawing input -- or as a live annotator for screen presentations where I can mirror the PC slideshow on the tablet and use the tablet to make annotations during a lecture say.
If there are any such projects already -- I would e very keen to take a look.
> Instead it took a few hours, and I finished a project.
Did you?
If you wanted to expand on it, or debug it when it fails, do you really understand the solution completely? (Perhaps you do.)
Don't get me wrong, I've done the same in the last few years and I've completed several fun projects this way.
But I only use AI on things I know I don't care about personally. If I use too much AI on things I actually want to know, I feel my abilities deteriorating.
> do you really understand the solution completely?
Yes; fully. I'd describe what I delegated to the AI as "busy work". I still spent time thinking through the overall design before asking the AI for output.
> But I only use AI on things I know I don't care about personally.
Roughly speaking, I'd put my personal projects in two different categories:
1. Things that try to solve some problem in my life
2. Projects for the sake of intellectual stimulation and learning
The primary goal of this scanner project was/is to de-clutter my apartment and get rid of paper. For something like this, I prioritize getting it done over intellectual pursuits. Another option I considered was just buying a newer scanner with built-in scan-to-SMB functionality.
Using AI allowed me to split the difference. I got it done quickly, but I still learned about some things along the way that are already forming into future unrelated project ideas.
> If I use too much AI on things I actually want to know, I feel my abilities deteriorating.
I think this likely comes down to how it's used. For this particular project, I came away knowing quite a bit more about everything involved, and the AI assistance was a learning multiplier.
But to be clear, I also fully took over the code after the initial few iterations of LLM output. My goal wasn't to make the LLM build everything for me, but to bootstrap things to a point I could easily build from.
I could see using AI for category #2 projects in a more limited fashion, but likely more as a tutor/advisor.
For category #2 it’s very useful as well and ties in with the theme of the article in that it reduces the activation energy required to almost zero. I’ve been using AI relentlessly to pursue all kinds of ideas that I would otherwise simply write down and file for later. When they involve some technology or theory I know little about I can get to a working demo in less than an hour and once I have that in hand I begin exploring the concepts I’m unfamiliar with by simply asking about them: what is this part of the code doing? Why is this needed? What other options are there? What are some existing projects that do something similar? What is the theory behind this? And then also making modifications or asking for changes or features. It allows for much wider and faster exploration and let’s you build things from scratch instead of reaching for another library so you end up learning how things work at a lower level. The code does get messy but AI is also a great tool for refactoring and debugging, you just have to adjust to the faster pace of development and remember to take more frequent pauses to clean up or rebuild from a better starting point and understanding of the problem.
I think this effect of losing your abilities is somewhat overblown.
Especially when AI has saved me on actually explaining specific lines of code that would have been difficult to look up with a search engine or reference documentation and know what I was looking for.
At some point understanding is understanding, and there is no intellectual "reward" for banging your head against the wall.
Regex is the perfect example. Yes, I understand it, but it takes me a long time to parse through it manually and I use it infrequently enough that it turns into a big timewaster. It's very helpful for me to just ask AI to come up with the string and for me to verify it.
And if I were the type of person who didn't understand the result of what I was looking at, I could literally ask that very same AI to break it down and explain it.
This summarizes my feelings pretty well. I've been writing code in a dozen languages for 25+ years at this point. Not only do I not gain anything from writing certain boilerplate for the nth time, I'm also less likely to actually do the work unless it reaches some threshold of importance because it's just not interesting.
With all of this said, I can see how this could be problematic with less experience. For this scanner project, it was like having the ability to hand off some tasks to a junior engineer. But having juniors around doesn't mean senior devs will atrophy.
It will ultimately come down to how people use these tools, and the mindset they bring to their work.
Please, I would be delighted if you published that code... Just yesterday I was thinking that a two-faced Samba share/USB Mass Storage dongle Pi would save me a lot of shuttling audio samples between my desktop and my Akai MPC.
The tool itself would be of a lot of use in school science and design labs where a bunch of older kit lands from universities and such. I used to put a lot of floppy to usb converters on things like old ir spectrometers that were good enough still for school use.
Yeah, to clarify-testing is closed book for everyone.
Control group might be using AI tools(I tell them not to but who knows) but the experiment group has received instructions and are encouraged to use the tools.
I was also writing a SANE-to-Paperless bridge to run on an RPi recently, but ran into issues getting it to detect my ix500. Would love to see the code!
Well, R1 is runnable locally for under $2500; so I guess you could pool money and share the cost with other people that think they need that much power, rather than a quantized model with fewer parameters (or a distil).
I set up ollama on our work ‘AI server’ (well, grunty headless workstation running Ubuntu) and then got Dolphin-Mixtral to help me figure out why it wasn’t using the GPUs. :)
I ended up having to figure it out myself (a previous install attempt meant the running instance wasn’t the one I’d compiled with GPU support) but it was an interesting exercise.
When I realized this was possible, I wanted to set up a project that would allow me to use the Pi as a bridge from my document scanner (has the ability to scan to a USB port) to a SMB share on my network that acts as the ingest point to a Paperless-NGX instance.
Scanner -> USB "drive" > Some of my code running on the Pi > The SMB Share > Paperless.
I described my scenario in a reasonable degree of detail to Claude and asked it to write the code to glue all of this together. What it produced didn't work, but was close enough that I only needed to tweak a few things.
While none of this was particularly complex, it's a bit obscure, and would have easily taken a few days of tinkering the way I have for most of my life. Instead it took a few hours, and I finished a project.
I, too, have started to think differently about the projects I take on. Projects that were previously relegated to "I should do that some day when I actually have time to dive deeper" now feel a lot more realistic.
What will truly change the game for me is when it's reasonable to run GPT-4o level models locally.