Hacker News new | ask | show | jobs
by konschubert 992 days ago
Hi OP!

You're writing

> I use FBInk on the kindle to display the images after curling them from a API Gateway.

I am the founder of this smart screen product: https://shop.invisible-computers.com/products/invisible-cale...

Curling an image is the same approach that I use for my e-paper smart screen as well. It should be quite easy to bring your dashboard to my device... maybe we can work together on something? My email is info@invisible-computers.com

7 comments

I bought one of your devices after seeing you on HN a month or two ago; after nearly 3 weeks of DHL doing god-alone-knows-what, it finally arrived and I can say it's super well built.
Thanks Corey! There are always things I want to improve of course :)

I want to be fair to DHL here: The parcels are shipped through the letter network to make the overseas shipping more affordable. It's expected that they take bit longer than the normal DHL packages.

I would love to use your product, but there is certain data I can't send through a remote proxy (like my work calendar). Is there anyway to run whatever the backend is locally on a machine on my network? Or to have the device pull from a custom URL that is local to my network instead?
This isn't possible yet. I want to add as an option that in the future, but it's not possible yet. Sorry :(
I like how you submarine each e-ink HN post :)
Guilty as charged.
Why do you proxy eveything through your api backend? Can the device not check the url directly? Also, does the checking result in full image download always or do you respect etags and other caching headers like if-modified-since?
> Why do you proxy eveything through your api backend Because it makes development and maintenance soo much easier, faster and reliable. I don't have to debug stuff that breaks on somebody's embedded esp32. If something breaks, it's in the backend and I see it in Sentry.

> Can the device not check the url directly

Yes, it could (with some modifications). But then you need to transmit and store the URL on the device, which requires establishing a bluetooth connection to change it. I am considering to offer this as an option to give myself and other peace of mind.

> Do you respect etags and other caching headers like if-modified-since

Not yet, but I could implement this very quickly if you send me an email and tell me you need this. :) (This is a great example how proxying things though the backend makes development easier: If I wasn't proxying, this change would require a firmware update.)

Instead of having your backend download and retransmit the file, you could return a redirect to it instead? Plus maybe lower the poll rate from a few times per minute to once an hour or so to avoid the need for caching to save battery.
I could do a redirect (it would require a small firmware update)

But that would still expose your authentication credentials to the backend, so a malicious backend could MITM you.

Reducing the polling is definitely an option, I want to make that configurable very soon.

Btw, the cached data in the backend is encrypted with a token that is only transmitted from the device to the backend during the API request of the device. It's not end-to-end, but it's a step.

Very nice. You've made a beautiful looking device. I'll be in touch.
Cool!
If you can provide a script that takes in an HTML file and provides an image ready for rendering, that would be amazing. Then I can automatically take any website and have a cron job that dumps the result into a shared dropbox link where it can be used by the screen.
> If you can provide a script that takes in an HTML file and provides an image ready for rendering, that would be amazing.

Yea, that's something I have been trying to build, but it's surprisingly non-trivial. There are a bunch of headless browser options, but I haven't found a good way to tell them: "Render the page in X width and Y height and then take a screenshot".

That seems like a problem that should have 100 open source solutions for it, and I am sure there are some that work really well! But I personally haven't found one yet.

> "Render the page in X width and Y height and then take a screenshot".

Isn't this the exact example of phantomjs?

``` page.viewportSize = { width: 600, height: 600 }; ```

At least that is what I use to do for screen testing for some of our low-hanging-fruit QA. At some point I rewrote it in puppeteer and it was as simple as the above line.

The screenshot results in being the X/Y size.

I'd be interested in why this doesn't work in your usecase.

I made something almost exactly like this before. I needed to convert svgs to pngs and have them display the same way they looked in the browser. It turned out that spinning up chromium and taking a screenshot was the easiest thing way to do that. I think I used puppeteer.

Headless Chrome seems like it should be able to do what you want pretty easily. https://developer.chrome.com/blog/headless-chrome/

It feels fairly reasonable imo to specify something like "this uses phantomjs with the following screen size" and just say peoples work has to fit that.
Hi! A while ago I had exactly the same problem and thought process, so I made this: https://github.com/SmilyOrg/website-image-proxy

Hopefully you find it useful :)

Is there documentation on how the custom content can be rendered on this?
Hmm, what do you have in mind?

Some custom content just for yourself, or an app that others can install as well?

Why are you evading the question? The answer should be a simple "yes, I allow you to pull or push content using the following methods:"

I can buy an ESP32 e-ink screen and run esphome or any of several other open source projects and put a piece of wood on the front of it, too.

I was trying to understand your question better. There are two ways to build software for it:

One: https://www.invisible-computers.com/invisible-calendar/image...

Two:

https://github.com/Invisible-Computers/image-gallery/blob/ma...

Both of these require rendering the content via an HTTP endpoint and both of these currently only work together with the device backend.

> I can buy an ESP32 e-ink screen and run esphome or any of several other open source projects and put a piece of wood on the front of it, too.

Yes, you can! And if you do this, you have absolutely no need to use my e-paper smart screen. (Though, for the record, it's not just a piece of wood in front, it's a CNC'd frame)

This looks really neat! Does it have an ethernet port? And maybe PoE?
It's powered by a USB plug... is there a way to convert PoE to USB power?

And the connectivity is through Wifi. (And Bluetooth during Setup)

For sure, there are tons of off the shelve adapters that'll do it. But may be hard to fit in your package.

The big part, is the power is delivered at a pretty high voltage, so you are going to need a buck converter to get it down to the 5V usb expects.

The PoE to USB solution is a "PoE splitter" and they're cheap and very useful. The website says the device has a USB-A connector for power. That's a bit of an odd connector to power a device from (since A is supposed to be a host port). Is that port really an A?
I am referring to something like this: https://www.newnex.com/images/usb-2-a-male(UH2-AE)_small.png

Isn't this called a USB-A plug?

EDIT: I cannot respond to the child comment, but yes: The Device has a male USB plug, and then the cable goes right into the device, no receptacle on the device.

I think I'm misunderstanding. The device has a captive cable with a USB-A plug on the end (i.e. not a female receptacle on the device), doesn't it?

Edit: I understand. I'm used to devices with receptacles rather than captive cables. Any reason why you went that way?

I was going back and forth on this for a long time, but ultimately I decided that a cable entering the device looks sleeker than a plug that is plugged into a socket on the frame.

Also makes it easier to place it on the included stand.