Collaboration ideas
There are a lot of things I’d like to make — maybe you can help! Please let me know if:
- you know of an existing solution to one of the following ideas
- you have suggestions/pointers about a relevant technique/approach
- you want to have a product design chat or pair programming session — I love collaborating with people, so definitely let me know!
Product design
USB-C collapsible travel lamp: After staying in one-too-many AirBNBs with horrible blue lighting, I’d love to have a little collapsible nice-color-temperature LED paper lantern of sorts. USB-C would be nice for reusing the laptop cable + AC adapter one’s already traveling with. Probably wouldn’t be too difficult on the margin to make this into one of those increasingly-bright-light alarm clocks. How efficient (fire-safe) are bright LEDs these days anyway?
Vitamix cup attachment: I recently learned mason jars can be attached directly to Oster blender blade casettes, which means you can blend delicious smoothies directly. Unfortunately, I have a Vitamix blender — what would it take to manufacture a mason jar threaded Vitamix-compatible blade cassette?
Twitter interface: (Done but unpublished) I like Twitter because sometimes people say smart, interesting things there. But I don’t how little control I have over the main interaction — my “feed” is filled retweets, other people’s favorites, and snippets of contextless threaded conversation. How could I design an interface and sorting algorithms to enable the interactions I want out of Twitter (and even other platforms like Reddit):- never missing the high-value, infrequent tweets of makers in the deluge of talkers/commentators (who I nonetheless want to roughly keep up with)
- batch Twitter into chunks (daily?) to make usage more deliberate
- acknowledge the fact that I have different moods; sometimes I want to “work”, othertimes I want to hear what my friends are up to.
Collaborative drawing/whiteboard: Using an iPad or drawing tablet, how can I:
- draw simple annotations on top of my computer desktop OR a blank canvas
- let my video-call collaborators draw too
I want a few colors, eraser/undo, and maybe layers that can be toggled on/off (perhaps each layer is just an image file, plan9-style?) Non-goals: async collaboration (operational transforms, crdts, etc.), fancy drawing brushes. Prior art: Clearboard (pointed out by Adam Solove)
Car infotainment UI: A security hole allows one to flash custom software to the Mazda infotainment system. I have one of these cars, so it’d be fun to design and build a custom UI that takes advantage of the car’s excellent physical controls. Or, if not high-concept UI innovation, I’d also be open to re-theming all of the car sounds and graphics to Mario Kart 64.
Computery/technical
Augmented UI: Yeah an iPhone camera tape measure is cool, but I actually more often need a smarter PDF tape measure. (e.g., while designing electronics it’s depressingly common to manually extract dimensions from scale drawings.) It’d be super helpful to have a lightweight tool to solve tasks like “These two circle centers are 0.1 inch apart; what is the relative position of this third circle?” Bonus points for maintaining persistent annotation relationships while the underlying PDF pan/zoom is changed. (Would be interesting to set fitting algorithm priors based on outside knowledge like common electronics spacing/sizes or that people tend to align things in grids.)
Embedded superoptimization: SAT solvers can apparently be used to generate provably optimal code by exhaustively searching through all possible instructions on a given architecture that yield identical output as a target program. It’d be neat to explore such tools (e.g., Greenthumb) and related SAT-solver-powered techniques (e.g., refinement types) in the context of microcontroller programming.
NFC antenna optimization: Coiled rectangular PCB trace antennas are boring — why not instead take an aesthetically pleasing closed shape (silhouette, etc.) and use the inductance simulation software from the wonderfully named FastFieldSolvers.com to determine feasible track widths and matching network passive values.
Prescription reconstruction: I bought a pair of $15 prescription sunglasses online, but used an older prescription that doesn’t exactly match that of my regular glasses (which I purchased in Poland, neglecting to get a copy of my prescription). It’d be neat to reconstruct the eyeglasses prescription using computer vision (using some reference images, presumably); a quick Google search shows that there are a number of mobile apps that do this already, but it’d be fun to try and do this entirely in the browser (no app needed). We’d learn a lot about optics, computer vision, and (probably) tort law.
Inferring performance bounds from assembly: ARM assembly is soo much simpler (peep this tutorial) than the x86 assembly I was looking at this time last year. How difficult would it be to calculate time upper-bounds for a given function or interrupt given its generated assembly? Yes, this is impossible in the general case because loops, the halting problem, etc., but how much typical microcontroller code could be analyzed? Surely this must exist already.
Constraint solver for microcontroller pin assignment: I’ve been programming a STM32G4 microcontroller, which includes dozens of op-amps, comparators, and timers. These peripherals are all connected via internal buses, but not completely (e.g., opamp 1’s output might be routable to comparators 3 or 5 only). It’d be neat to build a UI and constraint-solving backend (Alloy? Z3?) that lets one easily answer questions like “how can I maximize the number of op-amp -> comparator routings while minimizing the number of external jumper connections” or “to make my PCB routing easier, which of the 17 timers can I use that have pins on the east side of this chip”. (It would also be fun to make this a free web tool and monetize via EE-targeted advertising.)
Helm mode for Excel: Helm mode makes it possible to discover and navigate the fractal complexity of Emacs. Could a similar UI be grafted onto Microsoft Excel, allowing for fast search and keyboard control?
iPad as trackpad: Write an iPad app to forward multitouch gestures to the Mac so that I can use the iPad as a giant “magic trackpad”: Move the cursor around, two finger scroll, pinch to zoom, etc. I think most of the work here would be learning about MacOS trackpad drivers and pretending to be one. Potentially relevant: Sensible Side Buttons low level mouse button remapping.
iPad as drawing tablet: As above, but using the Apple Pencil and using the iPad as a drawing tablet (the drawing happens on the computer, not the iPad). Potentially relevant: Tuio protocol (thanks Christian S.)
SpaceMouse in OS X: I have a SpaceMouse 6-axis controller and would love to pan/zoom/scroll in regular apps with it (it only works in CAD programs that have special plugins to use it). I’ve written a Rust adapter to the native driver and can get real time position information, so I think I just need to trick MacOS into thinking that this is a magic trackpad or something? Another interesting aspect is exploring whether it would “feel” okay to use a continuous controller for potentially discreet actions. (e.g., rotate the controller 10 degree yaw and it’ll start to switch through windows one per two seconds; 20 degree yaw speeds up to one window per second, etc.)
Infrared <-> bluetooth/wifi smart home bridge:(Done.) My Taipei apartment “mini split” style air conditioning units in each room, controlled by handheld IR remotes. I turn these off when leaving the house as not to waste electricity cooling an empty house, but it’d be neat if I could turn on remotely via my phone when I’m on my way back, so that I arrive back to a cool, dry apartment. One should be able to emit the relevant control signals from a little battery powered wifi/bluetooth board; I wouldn’t be surprised if the protocols haven’t already been decoded (or even if a product like this already exists — though of course it’d be fun to build from scratch).Windows webcam server: (Done w/ Larry P and Glenn W) I have an Intel RealSense depth camera attached via USB to a Windows machine. I’d like to stream frames (RGB + depth) over ethernet to Mac with lowest possible latency. Video streaming protocols all look very complicated, which makes sense because the Internet is hard. But since I’m on a local ethernet cable, I’m thinking maybe just write a little Rust server to unicast numbered packets?Position-based tensegrity design: (In progress) I found a spectacular paper describing an algorithm to find stable tensegrity structures to fit a given design. I contacted the authors but they didn’t share their implementation, so I’d like to have a go. This would involve some constraint programming, numerical linear algebra, and 3d rendering on the software side, and once that’s working I’d like to design and fabricate a few pieces to test it out (scale models at first, then maybe furniture?)
Robots
Mechanical engineering grab bag: I’m designing a 10’ wide wheeled robot with a variety of motion requirements. I’ve sketched out some mechanical designs using direct-drive wheels, lead screws, and pulleys, but am basically shooting in the dark w.r.t. mechanism trade offs, motor sizing, etc. I’d love to chat with an experienced practitioner who can review both high-level designs, point out any gotchas, know when to shop at Home Depot / Amazon and when to shop at McMaster, etc.
Skid-steer kinematics / motion planning: I’d like the robot to eventually drive itself, which means I’ll need an algorithm to plan motion and incorporate closed-loop positioning feedback. Open to a from-scratch solution (in Rust) or off-the-shelf open source — it’d be neat to have a simulation environment too.
Computer vision fiducial: I’d like a fiducial that a CNC mill can machine onto its own spoilboard suitable for high accuracy (sub-mm) pose estimation. I’m thinking a pattern of holes, since that’s easy to drill, detect, and isolate from other spoilboard marks. The reconstruction algorithm should be robust to missing holes (i.e., those covered by work pieces on the machine) and extra holes (should any be accidentally created on the spoilboard).
The fiducial would be custom designed for a single machine bed and used for pose estimation only — no need to embed an ID or other data.
SLAM: I found a 77-part YouTube series on SLAM (simultaneous localization and mapping) which looks like it’d make for a good first foray into statistical programming and control algorithms (something I vaguely know about in the abstract, but haven’t synthesized in project).
Real-time point cloud + pose synthesis: In real-time (30 FPS), estimate the pose of a depth camera and use that to position depth camera pointcloud measurements in a 3d scene. Basically, wave around a depth camera and get a point cloud. Would probably want to do this in Rust, though TBD on whether a naive frame-by-frame approach would yield good results or if some fancy statistics would need to coalesce pose estimation between frames to get better accuracy.