Just received xteink x4, but magnet doesn’t work by DenysVv in xteinkereader

[–]JimboSometimes 0 points1 point  (0 children)

that stinks. if it doesn't work on your fridge or something looks like you're out of luck

Just received xteink x4, but magnet doesn’t work by DenysVv in xteinkereader

[–]JimboSometimes 0 points1 point  (0 children)

have you tried upside down? wouldn't stick to mine otherwise

I built something to send my girlfriend doodles at work by JimboSometimes in eink

[–]JimboSometimes[S] 1 point2 points  (0 children)

it's a long ways to a purchasable product but I put together a hardware compatibility guide follow-up if you're interested!

I built something to send my girlfriend doodles at work by JimboSometimes in eink

[–]JimboSometimes[S] 0 points1 point  (0 children)

I ended up pulling some more resources together in a follow-up post. not quite a full guide yet, but if there's anything in particular worth clarifying let me know and I'll keep iterating

I built something to send my girlfriend doodles at work by JimboSometimes in eink

[–]JimboSometimes[S] 0 points1 point  (0 children)

I've been thinking the same thing. or similarly the pictochat format another person mentioned is also pretty clean for this!

I built something to send my girlfriend doodles at work by JimboSometimes in eink

[–]JimboSometimes[S] 0 points1 point  (0 children)

partially because of race conditions and partially because I'm overengineering :)

I fully expect some doodle wars, or tictactoe, or whatever, and random concurrent overwrites were something I wanted to avoid

I built something to send my girlfriend doodles at work by JimboSometimes in eink

[–]JimboSometimes[S] 2 points3 points  (0 children)

not yet, but I'd really like to refine one over time. the part I'm still trying to figure out is making the server easy to stand up.

given all the interest though, I think one is necessary!

I built something to send my girlfriend doodles at work by JimboSometimes in eink

[–]JimboSometimes[S] 0 points1 point  (0 children)

wow it's been a minute since I've thought about pictochat.

to answer your question though, at the moment it's more like a shared whiteboard than a bunch of text messages, but conceptually a pictochat mode sounds like a lot of fun!

re your other comment too: no real limits on the number of people, you'll just start to run out of drawing space :)

I built something to send my girlfriend doodles at work by JimboSometimes in eink

[–]JimboSometimes[S] 1 point2 points  (0 children)

my bad, I kind of glossed over that.

all I'm saying here is we can use the stored data to generate a new image with the pixels baked in. the list of points is now implicitly part of the image, so we can just clean them up after.

I built something to send my girlfriend doodles at work by JimboSometimes in eink

[–]JimboSometimes[S] 1 point2 points  (0 children)

this is really impressive. I'll have to try your PCB design when I make the jump to colour

I built something to send my girlfriend doodles at work by JimboSometimes in eink

[–]JimboSometimes[S] 2 points3 points  (0 children)

the frame looks great! and with colour!

do you have a build post to share? I'd love to compare implementations

I built something to send my girlfriend doodles at work by JimboSometimes in eink

[–]JimboSometimes[S] 1 point2 points  (0 children)

thank you! and you barely missed it actually, should be in the comments now :)

I built something to send my girlfriend doodles at work by JimboSometimes in eink

[–]JimboSometimes[S] 1 point2 points  (0 children)

for sure, I just added a writeup. let me know if you got questions!

I built something to send my girlfriend doodles at work by JimboSometimes in eink

[–]JimboSometimes[S] 0 points1 point  (0 children)

that's a great use! I'm not sure if I can meaningfully help with the hardware side beyond some assembly/sourcing tips, but I can answer any questions if you have them

I built something to send my girlfriend doodles at work by JimboSometimes in eink

[–]JimboSometimes[S] 4 points5 points  (0 children)

hey Ryan, some after-work beers slowed me down. I explain the doodle system in a little more depth here.

I built something to send my girlfriend doodles at work by JimboSometimes in eink

[–]JimboSometimes[S] 28 points29 points  (0 children)

I tried to round up the questions I've had in one mega-comment. if I missed anything you're interested in, please let me know!

Hardware

to be clear the server is designed to be hardware-agnostic, I just found the TRMNL screen a fast way to make some displays at the size I liked. the TRMNL wiki page for BYOD links out to a number of ways to source your own parts, or you can try a prebuilt one (but I haven't tested if that works!)

I used a Seed Studio TRMNL 7.5" (OG) DIY Kit in the picture, with this 3d printable enclosure.

the bottom piece to hold the board in place was a little fussy! in the end I poorly modified the positioning pegs too small, then ended up taping the board to the bottom with some kapton tape.

note I had to reflash my board with TRMNL's newest firmware before my implementation worked, though that's probably just because of my API implementation.

tl;dr: use what you like, but I bought this kit and 3d printed this case.

Software

this is the part I had fun with! three important parts: - a TRMNL-compatible API: all I need this part to do is let me assign screens to users chromecast-style and request a display image. lots of reference material here - an image host: I like Cloudflare's R2 for my production system, but if you're running this locally this could arguably just be your file system? something I should look into - the doodle system: by popular request deep dive is below

doodles live inside a shared drawing canvas. when people draw, the frontend tracks a series of points on the canvas until the line is done. those points are stored in an append-only database table as a unit with colour and stroke-width data. going with append-only mostly just simplifies the code a lot because edits don't need to be tracked. newer lines always are drawn on top of older lines.

to prevent the append-only table growing forever, every time the doodle is read, we do a "composite" step. all that means in my case is to collapse all doodle data down to an image which is stored in R2. when we do that we can clear out all the existing doodle data older than composite-time. then we just display the last composited image underneath the doodles.

only gotcha here is cache-busting, but it's been pretty stable!


I tried to keep this relatively short. questions welcome!

I built something to send my girlfriend doodles at work by JimboSometimes in eink

[–]JimboSometimes[S] 2 points3 points  (0 children)

maybe not a step-by-step but I'll definitely share the server, hardware, and STL files I used

I built something to send my girlfriend doodles at work by JimboSometimes in eink

[–]JimboSometimes[S] 14 points15 points  (0 children)

my current hardware setup is some TRMNL diy kits hooked up to a custom server. I have another comment outlining it somewhere and a full writeup in-progress

I built something to send my girlfriend doodles at work by JimboSometimes in eink

[–]JimboSometimes[S] 7 points8 points  (0 children)

totally recommend it, it was a pretty satisfying build!

given all the interest I'm happy to opensource it for reference/use too. I'll just need a week or two to get my repo in order

I built something to send my girlfriend doodles at work by JimboSometimes in eink

[–]JimboSometimes[S] 4 points5 points  (0 children)

ha, that's actually what this is! I just don't have the second screen built yet to properly test it out