Kilopixel with Ben Holmen
E4

Kilopixel with Ben Holmen

Joe (00:05)
Hello and welcome to Side Project. I am your host, Joe Tannenbaum, and today we have Ben Holmen with us. What's up, Ben? How you doing?

Ben (00:14)
Hey, thanks for having me man. I love hearing radio Joe. This is like a new voice. I haven't heard way too

Joe (00:17)
I I realized that in the last episode I was like, I kind of switch modes and I internally hate that and I'm externally trying to fix it and I can't stop the tick of like, Hey, welcome to side project. It's Joe. You know, it's like smooth jazz radio Joe.

Ben (00:32)
That's right.

I don't know if your listeners know this yet, but you are a theater kid, a theater nerd at heart. And I don't think you can just like turn that off. Like you put a mic in front of you and man, there's a character.

Joe (00:40)
Yeah. Mm-hmm.

I like to, I'm going to say something maybe a little egotistical, but I like to pride myself on thinking that I was a pretty grounded, realistic actor when I was an actor. And I wasn't putting on a super thick sort of veneer. Like I think I, I think I was pretty grounded. And maybe just by saying that, that probably means that I wasn't, you'll notice that I'm not acting anymore. So maybe that was, you know, maybe that's it.

Ben (00:56)
Okay.

Yeah.

Yeah. Well, mission accomplished. I got you right out of that character. Here we go.

Joe (01:15)
Yeah, now I'm wobbly. I'm off my two feet here. Okay, so Ben, do you want to give yourself a little intro? Tell the people who you are if they, for some reason, don't know who you are. I'm sure they do.

Ben (01:18)
Okay, perfect.

Yeah. So introverts nightmare, tell us a little bit about yourself, but basically, I'm a, a web developer. I've been doing that for a long time, but I also just like making things in general. so I've always had a project going, whether it's woodworking or 3d printing or, anything that I can make physically that kind of, gives me some balance between making things that are delivered or the internet and are pixels on a screen. So I love to have something.

Physical, and that's what I want to talk to you about today. A physical side project.

Joe (01:59)
Excellent. I associate you with being like a tinkerer in the truest sense. Like you will just go kind of where your heart leads you and where your brain is most like tickled. Regardless of like realm. That's what it is that that feels correct. Yeah. Yeah, I think that's I think that's your nature. You. Good.

Ben (02:08)
Mm-hmm. Mm-hmm.

Yeah, yeah, that's very flattering. Thank you, Joe. But I think it's accurate. I'm not out here to like make money or like create a side business. I'm just a curious guy and I like to chase em So I chase away.

Joe (02:28)
That's your whole vibe. Curious is Ben Holmen's whole vibe and that's one of reasons why I love you. One of the many. It's a tall list. Okay, so you are bringing a physical project to the table, which is exciting. And what is the physical project?

Ben (02:34)
Thanks, man.

So it is something I call a kilo pixel, meaning thousand pixels, and it is a physical display. The original concept was hanging on the wall in a coffee shop. Some friends of mine run a coffee shop, bike shop here in my town. And I thought it'd be really cool to have a display that updates extremely slowly. this is, the whole thing is like constructed to be painfully overwrought basically like.

Joe (02:50)
Okay.

Okay.

Ben (03:12)
This thing is not easy. You could just get a TV and put it on a wall, right? And it's a great display. Right. You could do that. It's so easy. So what if instead of, don't know, however many pixels are in a 4k display, like 8 million or something, I don't know. What if you had a grid that's 40 pixels wide by 25 high, that is 1000 individual pixels. And what if the pixels were not LEDs, but

Joe (03:12)
Okay.

Yeah, but that sucks. Everybody knows that sucks. Yeah. Yep.

Okay.

Ben (03:41)
physical objects. And there's an artist who does or did, I think he's still doing it, kind of physical mirrors. And he was doing it when the Microsoft Xbox Kinect was brand new and it had like that cool infrared camera.

Joe (03:57)
Yes, I remember that. That's so cool.

Ben (03:58)
Yeah. So people were hacking on those and I probably came across this on hackaday or something. and he would make essentially a mirror out of physical objects. So some that I remember were like feathers that he would pull into a medium and then push it back out to make it lighter or darker. he did one with wooden blocks that would tilt toward the light or away from the light to make it lighter or darker and not necessarily in grids, but just to

Joe (04:17)
Huh.

Ben (04:26)
really organic sort of thing. And that was inspiring to me to make something unusual into a display. That you can make a display out of something you wouldn't normally expect. And then I also ran across a guy who was playing around with E Ink, like Kindle displays. And he was taking movies and splitting them up into individual frames and then playing them at like one frame every five seconds or something like that. So instead of 24 frames per second or 30 frames per second.

Joe (04:29)
Okay.

Mm-hmm. Yeah.

Ben (04:56)
he was slowing it way down. So a movie would take several days to complete. So essentially you can like linger on the individual frames, the composition of a movie. So hopefully you picked good movies.

Joe (04:59)
Yeah.

And this was like an art piece. Like this was something that like people would sort of like, or just for funsies. Okay.

Ben (05:14)
I think this was him tinkering on his desk. Right, we're talking like a Kindle size display. This is something you'd be close to. But those two things were cooking around in my brain and the idea of something like laboriously slow that made you think about it in a different way, like a really weird refresh rate and a really weird display medium, inspired an idea for me of making this grid of pixels that would be really difficult to change or slow to change.

Joe (05:21)
Yeah, sure.

Yeah.

Okay.

Ben (05:43)
And being a web developer, I was also really curious about what if I made like a front end for this so you could control it from your phone. And then what if you could collaborate with other people in person? So like at a risk of letting people draw whatever they want on display, like let people draw whatever they want on the display. Right? Yeah. So I've been cooking on this idea for years and it's been my favorite, like pick it up, work on it for a while.

Joe (05:52)
Good man.

yeah.

Yeah, it's always user input is so dangerous.

Ben (06:12)
put it back, a project. And I have to finish it eventually. I've finished a bunch of prototypes. I've come across a million problems with the thing that have probably forced it into semi-retirement periodically, but I'm working on it again. And I want to talk about it more.

Joe (06:13)
Those are the best. Yes.

Okay.

Okay, great.

So the setup is that you've got a physical thing that responds to some sort of digital input. this is already, I'm gonna be just like totally transparent, this is beyond my existing capabilities. Like I don't even know how you would go from, I built a front end to this thing and now that thing is like talking to this physical grid. what does that look like?

Ben (06:32)
Mm-hmm

Mm-hmm.

Yeah, yeah.

Yeah, well, let's get into that. So one of the things I'm familiar with is G code and CNC. And if you have you use a 3D printer?

Joe (07:03)
No.

Ben (07:04)
Okay. So do you understand? Actually, I'll just explain it because I'm sure someone out there hasn't really thought too much about 3d printers. So I'll use the 3d printer as an example. 3d prints are built up in layers that are like 0.4 millimeters tall. And so if you want to make a physical object, if you wanted to make a bobble head of Joe Tannenbaum, he would probably be printed from his feet up and you can kind of picture like first

Joe (07:06)
Yeah.

I guarantee it, yes.

Mm-hmm.

Ben (07:32)
You'd have to do a layer for the soles of his shoes, working up and you get into his legs and so on until he reached the top of his head. so, yeah, exactly. Yep. Cross-section is a great word for it. And so there's software that you'd run in your computer that would take a nice crisp 3D model of Joe that has all these perfect curves and then says, how are we going to turn that into these slices? And that's slicing software.

Joe (07:39)
So it's like little cross sections that you're stacking basically. Is that seem right? Okay.

Ben (07:57)
And of course, it's highly customized for 3D printers and like the different characteristics of different types and filaments and temperatures and all that. But for this sake, you can just picture where does the head of the printer have to go at a certain time? Like the computer has to figure out the directions to give the motors that turn that to get it in the right spot in X and Y space. And in its most simplest way, you would basically create a slice and then you figure out how am I going to tell these motors to move?

Joe (08:11)
Yes.

Ben (08:26)
in the X direction and the Y direction. And then when I'm finished with this slice, I'll move up one level and then I'll repeat it until you're done printing the whole thing. So generally, those output language called G code and G code is not just related to 3D printers. It's also used in CNC. So like a giant CNC router or lathe in a factory that's like cutting production parts would be

Joe (08:40)
Okay.

Ben (08:53)
running a G code program. So it's kind of like compiling. It's not a compiled language, but you can think of it going through like a process to like turn a 3d model into instructions for a machine to move.

Joe (08:54)
Okay.

Got it. Okay. So that's.

Ben (09:08)
If that actually made sense, I'm going to be amazed.

Joe (09:10)
I mean, have a loose grasp on it. have enough of a grasp. So are you writing G code? That's what you're writing? Or is that something generated from, like, how does that work? Yeah.

Ben (09:12)
Okay, perfect.

Yeah, so.

Yeah. So let's talk about the interface. Basically let's picture there's a database somewhere that says here is what I want the display to look like. And it's got a thousand bits, right? On or off for a thousand different pixels. then on the physical device, I'm running a Raspberry Pi that makes an HTTP request to the server and says, Hey, what pixels should I change next? And it would respond with coordinates. I want you to go to

X 20, Y 10. And that's the pixel you're going to change. So that Raspberry Pi has to figure out how do I tell this thing to go a certain direction? And it turns out that kind of a move, like just go this far one direction and this far another direction, that's the easiest G code you can possibly write. And so I wrote a little Python script that would suck down that web endpoint, or it would just hit that API endpoint. And then it would figure out

Joe (10:09)
Love easy, that's great.

Ben (10:18)
what G code it needs to write. And it's just a few lines at that point. It's just a couple of instructions. I think they're called moves in G code. And then it communicates with a CNC controller, which is a physical board that you buy on eBay that has its own little computer on it. It's connected with the USB to the Raspberry Pi. It just says, Hey, CNC controller, here's the G code. want you to run on this thing. You figure out what to do with the motors and figure out how to supply the power.

Joe (10:26)
Okay.

Okay.

Ben (10:47)
I'm just going to tell you some basic instructions about what you should be doing.

Joe (10:53)
So the CNC is like a middleman between the two processes, like interpreting, but only in the one direction. So it's only going from the Python out to, here we go.

Ben (10:56)
Mm-hmm.

It actually has, it has four, well, it varies depending on what kind of CNC system you're doing. But the most basic one would probably be two axes, you'd call it. So X and Y, and then typically like a tool head controller, like turn on a tool once you get there. So say you're going to drill a hole, like go this to these coordinates and drill a hole, right? So you would have two axes and then

Joe (11:15)
Okay.

Yeah.

Ben (11:29)
motor controller. Another common one for this would be, I should have gone with this. Laser cutting is simpler because it's laser cutting is X and Y and turn on the laser turn off the laser. Right? That's pretty simple. Yeah, that's probably easier to visualize than the whole 3d printer arc. well. well. So that would be the simplest controller, right?

Joe (11:37)
Mm-hmm.

Right, very binary, yes, yeah.

It's okay, hey.

You're like, this dummy doesn't understand. Let's go laser.

Ben (11:57)
So my setup actually has four. It has X and Y. And then I had to figure out once you get to the pixel, how do you change it? And I'd done a bunch of different generations of the actual pixel itself. But in general, then I need to like move something in place and do something to it, if that makes sense. my Python controller,

Joe (12:17)
Yes, that makes sense.

Ben (12:22)
Will write the G code, send them to the right spot, and then say, go do this thing at this point. Turn this pixel on, turn this pixel off.

So I got to learn G code and I got to learn more Python and interacting with the CNC controller with Python, which I'd never done before and have forgotten how to do, but it's in a repo somewhere.

Joe (12:40)
and it

Is it Python because that was something kind of plug and playish into the GCODE slash CNC situation? Is that why Python?

Ben (12:48)
Yeah, I think, I think it probably had the best library support. I don't remember why, why I picked that. It's also honestly, this whole project has been an excuse to try to implement the same thing in different technologies. So learn how to do it. So I know, right? cause you're always hunting for what's a real project to learn this thing on instead of another to do app or whatever. So this became that project for a while. so one of the things I wanted to do back to the web app.

Joe (12:52)
Yeah, yeah.

My favorite. I love that. Yeah.

Mm-hmm. Mm-hmm. Exactly.

Ben (13:18)
Sorry to jump around so much. But in the web app, I wanted to use WebSockets to basically collaborate, to have near real-time updates if you and I are both sitting in the same coffee shop fighting over a pixel. I wanted to show those updates. So at the time, I think it's Express. I can't remember the name of the package. No, Socket.io is a package in the node ecosystem. I hadn't used it before. Hadn't really done much with node. So I made probably the world's worst node application, but it...

Joe (13:20)
Your project.

Okay.

Mm-hmm.

Ben (13:47)
It worked. To be the source of truth running on a server that would decide what pixels need to be set. Either a user set this or one of our ambient modes says this pixel should be this or that. And then wiring up the WebSockets to that. That was a treat. And then I moved into PHP WebSockets through the Beyond Code WebSocket package.

Joe (13:48)
Yeah.

Okay.

Ben (14:15)
and then I have yet to port it to reverb, but currently it's sitting as Livewire that just polls like every second or something like that. I've rebuilt the front end a few times. Honestly, I've over tinkered this, the website of it way too much.

Joe (14:16)
Mm-hmm.

Yeah.

You're not allowed to say that on this podcast. There's no over tinkering. That's blasphemy. You've tinkered extensively. That's as far as I'll let you go. So and what is it when somebody is like drawing on it? What does that look like? Are they just tapping on and off like pixels or are they what is that what it is?

Ben (14:32)
Okay. I've, I've tinkered at the perfect amount. Yeah.

Mm hmm. Yeah, so I present a grid of 1000 pixels, 40 by 25. And then there four states. There's it's on and it should be on. There's it's on, but we're going to turn it off once we get around to it because it takes a while. It's like in the queue to be changed. And then there's off, but it should be off. And then there's off, but we're going to turn it on. Like someone's requested to turn it on, but I haven't got there yet. So there are two intermediate states, if that makes sense. And then two

Joe (15:02)
Okay. Okay.

Okay.

Yep. Yep.

Ben (15:14)
settled states.

Joe (15:16)
And are people allowed to tinker with the intermediate state ones or those are ones that are off limits until it's go time?

Ben (15:18)
No. So say you click on a pixel that's off, then it would go into like, we want to turn this one on. But if you want to cancel that, you could click it again. And it basically just removes it from the queue. Like, we're not going to draw that. We're not going to change that pixel.

Joe (15:36)
So I'm curious, so this is very sort of asynchronous in that there's like intentional lag here. What does that look like in terms of like, you're, are you saving this to a database? then you're, it, and it sounds like it's polling pixel by pixel, right? It's like, what's the next pixel? Is that correct? From the Raspberry Pi out?

Ben (15:42)
Mm-hmm. Very intentional, like.

So there are two from the controller the Raspberry Pi is polling just give me the next pixel and then I'm going to report back once I finished changing it so you know like it actually changed state so there are only two endpoints there for the clients it's polling or you're getting events via web web Web socket I suddenly forgot what that was you're getting events about the entire controller Which is interesting because it's not like

Joe (16:04)
Yeah.

Okay.

you

Yes.

Ben (16:27)
a huge amount of bandwidth, but it's not zero bandwidth to be basically pulling down a kilobyte per second. It's more than that. Why did I think it was a big deal? I don't remember. It's not a huge amount, but it's not like, sure, just grab it every second. No big deal. If you scaled it up, I think was the issue. I'm going to back off of that though. That might not be.

Joe (16:32)
Yeah.

Is it a lot of data going back and forth, shooting back and forth?

Is that coffee and bike shop getting a lot of scale? that the... Here comes the heat. So, How far have we... Yeah, that's nothing. That's literally nothing. Is it running on like a remote box? Is it running the API part of it? Like a running on like a DigitalOcean like droplet or something? So...

Ben (16:53)
Okay, here comes the heat. All right. I deserve that. I should not be worrying about how this is going to scale.

Yes, that's just yep. Yep, exactly

Joe (17:14)
How far have you gotten? Where are you at with this?

Ben (17:15)
Yeah. Okay. So I have a prototype that's like 50 pixels wide by three lines tall. and I have spent the most time spinning my wheels on what do you actually make the pixels out of? so my original concept was ping pong balls where one half would be black, one half would be white, and then you'd have a wire or a rod going through the middle of the ball. that's kind of been the concept. You rotate them. the actuator,

Joe (17:20)
Okay.

Yeah.

And then you're rotating. You're rotating. OK, cool.

Ben (17:42)
I actually 3D printed this thing where you get to the right pixel and then it moves a Lego wheel in place and turns it because it's a little bit of rubber on there. Yeah, I was very proud of that. That is not...

Joe (17:53)
yeah?

Okay, here's what I'm going to say and I'm going to just straight up interrupt you. If you do that, you can also then get like half pixels because you can you can then kind of get like more maybe ornate drawings if that was even so. Yeah, yeah, yeah. That's fascinating.

Ben (18:03)
Mm-hmm.

Like a gradient. Mm hmm. Or probably like four colors, maybe. Like if you're really just showing, you're not showing the whole anyhow. So the problem with ping pong balls, I'm going to tell you a bunch of things I tried and then why they don't work. Cause I'm still a little stumped about this, about what the actual pixel is. And to the listener, if you have an idea, please chase me down because I need more ideas here.

Joe (18:13)
huh.

Yeah. Okay, fascinating. Yeah.

It's okay.

Ben (18:33)
I tried the ping pong ball. It turns out that like a pop can, when you open a ping pong ball, it loses all of its strength. It's suddenly extremely squishy. yeah, so I had a whole jig set up where I like melted a tiny hole in two sides of the ping pong ball. It does not work. And then what happens is if the ping pong ball flexes a little bit, any paint you put on it just flakes right off. So I chased ping pong balls for a while. They did not work.

Joe (18:43)
interesting.

sure, of course.

Ben (19:03)
Then I tried rubber bounce balls, not cool, really heavy, not particularly round. I looked for wooden balls, spheres basically, and also really heavy, not round, at least not the ones I was finding. And

Joe (19:11)
Okay.

huh.

Sorry, when you say not round, are you saying like perfectly round? What are you saying? There are balls.

Ben (19:25)
It has to be really close. So there's tolerance in anything physical, right? Like nothing is exactly the way you speck it. It's going to be a little bit bigger, a little bit, not quite round, but these were significantly not round. They were more like, like they rounded off two ends on a dowel. And then there was a little bit of middle there that was a little bit of pill shaped, like a very, very slight pill shape.

Joe (19:30)
Sure, sure.

Ben (19:50)
not a true sphere. Also really heavy. I'm really comfortable working with wood though, so that was appealing. I spent a lot of time thinking about how could I manufacture my own and could I make them. Didn't chase that down yet. I've also tried Nerf balls. So there's a whole line of Nerf guns that shoot small foam balls that are like 7 eighths of an inch maybe, like 20 millimeters or so. And

Joe (19:50)
Got it. Okay, Mm-hmm.

Yeah. Okay.

Mm-hmm.

Ben (20:18)
I've worked with those a bit. It's tough to get them to spin and also paint flakes off of them. The price is great. They come in yellow and orange, which is okay, but not my ideal vibe for this one. I think it would work better if they had, if I painted on them with like permanent marker or dye or something, not like something that's more flaky when they get moved and deformed.

Joe (20:24)
Mm-hmm.

Sure.

Yeah. Yeah. Okay.

Ben (20:48)
So I think those are all the things I've tried. I'm in the middle of trying something new and I can show you what I'm working on. So these are clicky little illuminated buttons and for the...

Joe (20:57)
Okay.

Hmm, so satisfying that already the sound of them.

Ben (21:03)
yeah. This thing is, this is currently my desk toy because I accidentally bought non illuminated. So on the back, these have two pins. I need the four pin type, which is currently lost in transportation between Pontiac, Michigan and my house somewhere. I don't know where it is. Neither does the USPS. But the idea here is instead of turning, what if I had a thousand little push switches that to turn the pixel on and off,

Joe (21:10)
Okay.

Perfect.

You

Hmm.

Ben (21:31)
I would bring over a little finger that pokes that thing and turns it on, turns it off. So you just hear that little clicking.

Joe (21:36)
Whoa. So you'd have a physical element roving the board, flipping switches on them.

Ben (21:42)
In all of these, you have a physical element roving the board constantly.

Joe (21:46)
Well, it seems like, that's not the way. I was thinking that you had a mechanism that was rotating them individually, but you're talking about something, so cool.

Ben (21:51)
yeah, yeah, yeah. Like behind it. Okay. We got to talk about scale here. Cause yes, the coffee shop, I'm going to have like zero to two users at any point. So traditional, like does it scale questions are out of the problem. But what is interesting about this is there are a thousand of them and a thousand of anything is a lot of money. And it's a lot. Like if you go with, I worked out LED strips.

Joe (22:05)
Yeah.

Yeah.

It's a lot of money.

Ben (22:18)
with LED strips, it's a lot of LED strip. It's a lot of energy to do that. And so if you scale it up with something per pixel, it gets pretty expensive. For example, these little switches are like 35 cents each. They're the cheapest thing you can find. That's pretty cheap, right? That's $350 of just switches to make one display. And this is a passion project, but I do like have some constraints on my budget.

Joe (22:30)
Yeah.

I'm not that passionate about it.

Ben (22:46)
So anything, something that's a dollar a pixel is a thousand dollars for this display. Yeah. So that puts some interesting constraints on it. So what I decide instead of like an actuator behind each pixel, like a little motor for each one, that would be way too expensive. I actually have an arm that moves when, when the Python controller says, CNC controller, go to this location. What it's doing is it's moving an arm left to right.

Joe (22:51)
Yeah, that's crazy. Okay, here's...

Yeah, true.

Ben (23:15)
and then another motor on the arm controls an actuator that is moving up and down the arm. So you get X and Y. I told you it's deliberately laborious. And then when it gets to the position, then it would change that pixel physically somehow. Like with the push switches, like poking it, or with a, like a spherical pixel, it would turn the pixel with a little motor and then it would go to the next one. So as you're sitting there,

Joe (23:24)
This is so cool dude.

Like rotate it. Yeah.

Ben (23:43)
This is a machine that's constantly working to keep itself up to date, always toiling away, changing the pixels one by one by one.

Joe (23:54)
And you said that there's sort of an ambient mode where it's like when I'm dormant, start doing this stuff instead. Like, you know, little, little messages or little, little pixel art or something.

Ben (23:59)
Yeah, so that's been.

I would love, yeah, I'm not a great pixel artist. I've dabbled out of necessity, but I would love, I wanted to let people submit their own basically. I created a few that would just like show diamonds or stripes or, I can't remember what other patterns. My favorite though was drawing a clock in the middle of it, showing the current time, because it turns out that it takes almost a minute or more.

Joe (24:08)
Hmm.

Ben (24:30)
to update the time from one minute to another, right? That's the one I'm most delighted about. So like switching from 12.01 PM to 12 o'clock or 12.02, you have to redraw all the diff between one and two, and it's probably 15 pixels or so. So if that takes three seconds to move to a pixel, change it, move to the next, that's 45 seconds to change that. So it can...

Joe (24:31)
It's so satisfying.

Ugh, that's satisfying. That's amazing.

Yeah, yeah, yeah, yeah.

Ben (24:56)
There are certain, like when you switch from an hour to the next, it can't even keep up. It has to take several minutes to like get up to speed. Isn't that delightful? Yeah.

Joe (25:01)
You can't even do it. Yeah.

But I kind of love that. I kind of love that that's the case. then basically, so if that was, okay, well, like just to game that out for a second. if it took several minutes, suddenly it's gonna jump like several minutes at once to kind of catch up basically is the idea-ish, maybe. No, I mean like it'll.

Ben (25:19)
Not suddenly, but like I set it up so like it would try to do 12, let's say going from like 1:59 to two o'clock. First, it tries to draw two o'clock and then as it's working on that, then it's like, no, now it's 201. Okay. Well, I'm going to fix a few pixels. Now new plan. I'm doing 2:01. It keeps working on that. And then it's 2:02 new plan. Okay. And finally it can catch up to its queue basically.

Joe (25:31)
Yeah, that's the biggest jump I can kind of make. Yeah.

Are you providing a therapist for this machine? Cause that sounds stressful. That sounds really stressful for the machine.

Ben (25:49)
I do feel a little, I know, right? Maybe I'm just taking some of my own like frustrations. Maybe the machine is my therapist. Like, yeah, how do you like it? Huh? Can't get ahead, can you? One more week after this week, it'll slow down.

Joe (26:03)
Maybe... yeah, yeah!

That's so funny. Here's a question, and I don't know the answer yet. Is there something that they discard regularly in a coffee shop that would be good as a pixel? Meaning like, can you recycle something in the coffee shop as a pixel? Because that means it's A, free, and B, specific to the coffee shop.

Ben (26:21)
Mmm.

Mm-hmm.

Joe (26:34)
which is kind of fun. And I don't know what that is because I don't know enough about coffee shops, but I don't know. There's something, that's maybe something to explore.

Ben (26:44)
Hmm, I like that idea. Nothing's immediately coming to mind. But I do love the idea of a location specific pixel.

Joe (26:47)
Nothing. Yeah, I'm thinking about like.

Yeah, or like a bike shop. I'm sure there's tons of little like loose, you know, bike parts and gear that would that would make for a good a good pixel.

Ben (26:56)
Mm-hmm.

If you're going to discard it, feel like you have to, I mean, wouldn't it be epic if you had a, like a magazine full of like paper shot glasses from espresso shots or something like that. And like it pulls one off and drops it on the floor and you just end up with this mound of discard. It doesn't make any sense at all, but it's a fun, fun mental picture. But that would require like, that's truly disposing of the disposables. But I think what you're saying is,

Joe (27:21)
Ha ha!

That's the next side project.

Ben (27:30)
what's something that they could give me a thousand of that could be used as a pixel.

Joe (27:34)
Yeah, it's also and then it's also site specific. It's like, like you've got to see this kilo pixel in the coffee shop. It's made out of like, you know, laminated espresso cakes that they've that they've like, you know, used and gone away. You know what I'm saying? Like, I don't know what it is because that's wild. But. Meaning like, you know, you know, like you get that sort of espresso, the like puck of espresso once you've used it, if you like somehow preserved it in that state.

Ben (27:41)
Mm-hmm.

Yeah, yeah.

What is that even? like the little pucks? Yeah. Joe, you're an avid composter. That belongs in the compost, not dipped in resin.

Joe (28:02)
Of course it does, if you dip it in resin and then flip it around, well that's... Nobody's seen that before. Now we're talking, now we're cooking, with gas That's cool. Yeah.

Ben (28:09)
Now we're tackin'.

Okay, now here's a question for you.

I feel like the laborious process is essential to this thing. That's part of what makes it interesting. So I thought about like, what if I got a thousand LEDs, which are dirt cheap and figure out how to address them. Now addressable LEDs, not dirt cheap. Also, they take a lot of power, but like just a straight up LED. does what if it just like took a while to get to the point where it would light up a pixel? Is there some way to cheat this?

Joe (28:24)
Agreed.

Yeah.

Ben (28:44)
Basically, that would be as satisfying.

Joe (28:46)
It feels less. It feels less. It feels significantly less satisfying because you know, in your heart, that could go faster when there's a physical mechanism at play. You're like, it's like fascinating to watch. But if you're just watching like the slowest TV you've ever watched, that feels not great. Right.

Ben (29:04)
Yeah. Okay. How about we Vanna white this and you know, famous game show Wheel of Fortune. Do you think Vanna is actually pushing a button that changes the, so Vanna white is the assistant on that show co co star. She touches the display. She used to turn the letters, right? Like when we were kids, I feel like she turned it. Maybe that was more satisfying, but they made a business decision that they just have an led board and Vanna pushes a button.

Joe (29:10)
Mm-hmm

Yeah, she just kind of touches this. Yeah.

She used to turn it, yeah, back in the day, I believe. Yeah.

Ben (29:33)
Is that less satisfying than Vanna turning it?

Joe (29:34)
Nobody's got the time for the turn. can I be honest? Like when I, in the few times that I've watched it recently, it does feel less, it feels significantly less satisfying because there's something about the physical turning of that letter. You know, what if this is like a Berenstein bears thing or like where that actually never happened and we've manifested this in our minds that she actually used to turn the letter. It's always been a TV. I don't know. I, in my mind, it's so much more because like,

Ben (29:56)
It's always been a TV. I love that idea.

Joe (30:04)
I won that letter. got that letter. You know what mean? It feels different than just like revealing it via LED.

Ben (30:10)
I have thought about keeping the arm that still goes over and like touches the pixel, but behind the scenes, it's just turning on an LED.

Joe (30:13)
Mm-hmm.

That's better. I'm not gonna let you off the hook, I think. I think I need a physical clickety-clack. You I need a little something happening. Because that's the appeal to me. You've already sold me on that, so I can't get unsold on that. You know what I mean? Yeah.

Ben (30:19)
That's the middle ground.

Right.

Yeah, shoot, I anchored it. I should have started with the Vanna White touching a button and then brought you up to the epic Vanna White turning the letter.

Joe (30:37)
Yeah. But wouldn't have been better if it's just an LED. Wouldn't that be amazing? Dude, this is cool. When people talk about stuff like this, I think like, man, I would love to like get into sort of like getting code into the real world somehow and like connecting those two pieces.

Ben (30:58)
Mm-hmm.

Joe (31:01)
And it feels like very mentally uphill for me. It feels like something I'm like, OK, there's a lot of learning to do here, which is fine. I'm not afraid of learning, but I don't. I have one. I have an Arduino and it's sitting collecting dust under my bed.

Ben (31:08)
man, you've got to get yourself an Arduino, a breadboard, an LED. Okay. Do you have a breadboard and an LED?

Joe (31:18)
I don't know that I do not have.

Ben (31:20)
Okay. So this is the most basic thing you can do. Turn on an LED, turn off an LED, but it's like the whole hello world in a new language. It's seeing your website on a domain for the first time. Like I made that happen. It's the simplest thing now. Yeah, you got to do that. And then you can like put a button in there. And when you push the button,

Joe (31:24)
Okay. Okay.

Yeah, it's gonna it's gonna light the fire.

Ben (31:43)
LED turns on. These are all extremely simple. But it's like the beginning little like, this is really cool. Like I wrote 10 lines of C code, the most basic C ever. And I made something happen in the real world. And you build from there. Like that's the very, intro.

Joe (31:54)
Mm-hmm.

There's nothing if I went on a sabbatical it is the it is one of the things I would do. I would start doing that in my current life in the way that it's situated. My wife couldn't understand the terminal stuff. This would she would go off the deep end. She's like, why are you spending time on this? I'm like, because look, it lit up because isn't that cool? And she would be like, I mean, I don't know what you would do. She's super supportive. But my God. Yeah. she was like, cool. Why?

Ben (32:09)
Mm-hmm.

like, why are you doing this? Is there a thing?

It's, isn't, I love the idea of you trying to explain the terminal to her. Like, this is like a website, but it's like way worse and way harder, but people love it. Does she understand the appeal of the terminal now that it basically like lit a fire under your career and got you a new job and all this? Like, okay, Joe, I guess the terminal, there was something about it.

Joe (32:28)
People are going bananas.

She she is she is an extremely supportive person. I but I think like there's a slight like Yeah, there's I think there's a little bit of like Cool, like it's like a little bit of that like they look at that look behind her eyes. It's like what is this guy doing? What is this? And it's fine like yeah, it's fine. Yeah

Ben (32:46)
Okay, these words are being chosen very carefully.

Yeah, Yeah, I've got a supportive wife like that. She doesn't totally, she doesn't get why I do a lot of the tinkering that I do, like the appeal of it. Yeah, you're not alone.

Joe (33:11)
But she allows, well, it's not like a disallow thing, but it's more like, yeah, there's a support there, you know? And I try to encourage tinkering with her, but she doesn't really, she's like, what am gonna sing more? She's like an actor. So it's like, what am I just gonna sing around the house? was like, yeah, sure, sing around the house. I don't know. Do something cool with your voice. Is that a thing? I don't know. I don't know what the end game there is, but yeah, I don't know.

Ben (33:15)
Right. Supportive. There's a level of support. Like, she holds her tongue.

You

Right.

Joe (33:39)
Anyway, that's we that's a different podcast. Dude, this is awesome. I don't want to take up too much of your time, but is there so what's the so right now you're trying to figure out what the switches are. And once you figure out the switches are, you're kind of like not there, but you're a lot closer to to to this being something real. Yeah. Yeah, yeah, yeah.

Ben (33:50)
Yeah.

Yeah, I have to find the pixel because that locks in a lot of design constraints. And so right now I need to reorder more pixels from AliExpress. It's going to take three weeks to get here, hopefully. And then I have to figure out the actuator, the little finger pokey, the button thing, which I have some good ideas about. And then I need to buy a thousand of them and try to do a whole board. But that would be, that's going to feel so good.

Joe (34:11)
goodness.

Mm-hmm.

Ben (34:24)
So one question I have for you before we wrap is this makes sense. in my buddy's coffee shop, is there a way to like bring the joy of this, across the internet or something? Like, how do you translate this to something that people can enjoy interacting with? And I think about like the million checkboxes was collaborative in a way. This is a thousand checkboxes effectively.

Joe (34:27)
Yeah.

Mm-hmm.

huh. Yeah.

Ben (34:48)
But is there a version of this where you can say like, Hey, this is actually controlling something physical. This is interesting to play with with my internet friends.

Joe (34:49)
Yep.

You, I think you'd have to set up like a live stream of this board. That's the first thing. Cause you'd have to like see what's going on. Here's, here's what would be cool. Here's what'd be cool. So the user interface is the user interface that actually doesn't change. And it might be interesting to, instead of, I don't know how you're like, are you queuing art? Like you're basically saying like, draw something and it goes into the queue.

Ben (35:03)
Mm-hmm. Yep.

Joe (35:25)
And then we'll eventually, like when it catches up, it'll draw your thing. Okay. Yeah, it would be so cool if like, you could, you get up there, it's a blank slate, draw whatever you want. And then you kind of do like a notify me when I'm up and like you get pinged and then you can watch your thing like come to life. You know, so it's like.

Ben (35:28)
Mm-hmm, you'll see it in 20 minutes.

Hmm.

That's interesting.

Joe (35:48)
It encourage you because otherwise like people aren't going to sit there for 20 minutes and look. mean, they might there. There is maybe a possibility that they will. But it would be nice to know like, OK, it's drawing my thing and this thing is going up physically somewhere. And people tune in or they tweet out like, look, it's about to draw like, you know.

Ben (36:00)
Mm-hmm.

Yeah. How do I keep? Yeah, I was gonna say, how do we keep the internet from ruining this? I mean, the pixel constraint is pretty good, but it's still enough pixels.

Joe (36:05)
Probably something inappropriate, you know, whatever.

Yeah, you could, you could, if you wanted to do it, you could run it through, you know, a, there's like censorship libraries that allow you to identify like, you know, image analyzing sort of stuff, you know,

Ben (36:21)
Yeah, yeah, I could take the grid and say like, hey, these are the pixels I'm going to get. Here's a thousand pixel PNG What do you think?

Joe (36:31)
Yeah, does this feel OK for the general public? Like I said it to like, is this good for, you know, max an eight year old or something, you know, whatever? Yeah, I would worry about that secondary and I would just see if like you can get it working in the first. But yeah, I think like. In the coffee shop scenario, is it queuing or you're interacting with the live board as it stands just because there's probably less people?

Ben (36:39)
Mm-hmm.

That's probably my biggest concern.

Okay.

You'd be interacting live. The queue that I'm describing is just that it takes a while. Say you want to, it's a blank slate, you want to write Joe on it. Let's say Joe takes 30 pixels to do. So that's going to take a few minutes to get the board to do it.

Joe (37:00)
Yes.

Yeah.

But when I pull up the interface in the coffee shop, am I seeing a blank slate or am I seeing what the, because you were describing like the different states, that's what I'm seeing. Okay. So.

Ben (37:15)
Hmm.

Yeah, you'd see the intermediate states. That's my intention anyhow.

Joe (37:26)
Yeah, I wouldn't do that with the internet because that's gonna be just like, feel that feels a little insane and kind of hard to like manage. It might be more interesting to like create a sort of like queue of drawing. yeah. And then when we get to it, we'll get to it. And if you wanna pop in and email or something, or, or.

Ben (37:34)
Mm-hmm. You do it more like, draw your thing and submit it. Mm-hmm.

Joe (37:48)
Interestingly, what if, what if this thing had a Twitter account and it live tweeted like, I'm about to draw so and so is drawing about to draw, you know, and it like sort of, could enter in your Twitter username to get like notified in that way. Although I don't know if Twitter even allows that.

Ben (37:54)
Mm-hmm.

that's a fun idea. And then what you do is you do a time lapse to speed up the drawing process so that it makes sense in a tweet. How ironic.

Joe (38:07)
sure. and you could just get the clip of like drawing their thing. that's cool. I like that.

Ben (38:10)
Right, here's my machine drying your thing in like, I'm gonna compress it down to 30 seconds, even though it took four minutes.

Joe (38:18)
Dude, that's fun. That's super fun.

That's really cool.

Ben (38:21)
And then if they have a real, yeah, it's okay. It would have to be integrated with something where it was like OAuth, where it's actually them so that it couldn't be abused like, look at this inappropriate thing that at Joe Tanenbaum displayed. then, so it would have to be Joe logging into, logging in via Twitter so I can link it to you. That would actually cut down on abuse a lot.

Joe (38:30)
Yes.

Yeah, yeah, yeah, yeah, yeah, yeah, you have to verify that the username.

You would think so, but I think people own this stuff a little more than maybe you realize.

Ben (38:46)
You would think so? You're saying that there are people out there with less shame than me?

Joe (38:55)
Have you been on Twitter? There's a zero shame situation. That's cool. That's really cool. I love I think that would be so fun. I think it also because you know when it's drawing like you know where you are in the queue, you can segment the video and capture. You can auto capture that video.

Ben (38:57)
I do like that idea though. That kind of feels like like it might be it.

Hmm.

Joe (39:21)
really of drawing that thing because you know what you're drawing and you know how long it took, right? So you could see capture the timestamp of the stream and then time sort of the end timestamp. And then you've got, you've got the video of the thing and then you can time lapse it probably via FF mpeg You definitely can do it. You could automate this whole thing and it would be sick.

Ben (39:24)
Mm-hmm. Mm-hmm.

Yeah, for sure. It's all FFMPEG all the way down. Yeah. Okay. This is now the carrot to help me like, this is some fresh motivation. I love it. Thank you, Joe.

Joe (39:45)
Yes, dude. Yes, dude. Thank you. This is so cool. I I'm going to keep thinking about what you can use for pixels because it's very

Yeah, it's like the cross-section of like it actually working and how expensive is the thing. That's a, that's a hard Venn diagram, you know, that's, or that's a hard needle to thread.

Ben (39:59)
Mm-hmm.

And you have to think about how the pixel would last, say a month of being turned. Like, it going to, is paint going to rub off or something like that? Is it going to wear away? Yeah. So I've thought about like styrofoam balls or something like that, but I think they'd actually get consumed by it.

Joe (40:10)
Hmm.

Like how durable is it? Hmm. I know that's the first thing I thought of, I... I think it would get destroyed pretty quickly, yeah.

Ben (40:24)
Yeah, also when you spray paint styrofoam it melts. Fun fact.

Joe (40:28)
What's that?

Ben (40:29)
When you spray paint styrofoam, it melts a little bit, like it shrinks because the solvents in the spray paint are also solvents that are disintegrating the styrofoam. Fun fact. So you'd have to come up with a different way to paint the styrofoam.

Joe (40:42)
Did you find that out in practice?

Ben (40:44)
Not with this project, but yeah, I've run into it in other projects.

Joe (40:48)
Were you like, should I be worried about some sort of chemical reaction that's happening right now?

Ben (40:50)
This is a problem now. I don't remember where I learned that. I'm guessing I probably learned it. And then I was like, this is really cool. I'm going to spray paint this a bunch now. It's the same thing. Like if you put styrofoam and gasoline, it disintegrates. It just kind of melts and disappears. And then you can light it on fire. different podcast.

Joe (41:03)
It's amazing.

Okay, next time I have styrofoam and gasoline in the same area, I'll definitely try that out.

Ben (41:15)
You have a huge quantity of gasoline in your apartment,

Joe (41:18)
yeah, that's what we do in the city. We just have tanks of gasoline just sitting around. Anyway, dude, pleasure. I would love to hear more about this. I can't wait for the Twitter account. This is very exciting. Where can the people find you? please.

Ben (41:22)
All right.

Thank you for the fresh fuel. I really appreciate it. Loved explaining it, loved sharing it, loved talking about it, and now I have some fresh motivation, so.

Joe (41:36)
Like I said, I've got gasoline for days here, so that's all the fuel. I'll give you all the fuel you need. Where can people find you? Where can they follow the progress on this?

Ben (41:45)
You should head to benholmen.com and you can link out to my socials and the project updates there.

Joe (41:48)
Okay.

Beautiful. Ben, thank you so much. Always a pleasure. We'll chat soon. Yeah.

Ben (41:56)
Hey, thanks man. It was a joy. See ya.

Episode Video

Creators and Guests

Ben Holmen
Guest
Ben Holmen
Big tall anti-entropy machine. Software engineer + general maker, always curious about everything Wisconsin, USA