<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/rss-style.xsl" type="text/xsl"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	    xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	     xmlns:dc="http://purl.org/dc/elements/1.1/"
	   xmlns:atom="http://www.w3.org/2005/Atom"
	     xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	  xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>
<channel>
	<title>eink &#8211; Terence Eden’s Blog</title>
	<atom:link href="https://shkspr.mobi/blog/tag/eink/feed/" rel="self" type="application/rss+xml" />
	<link>https://shkspr.mobi/blog</link>
	<description>Regular nonsense about tech and its effects 🙃</description>
	<lastBuildDate>Mon, 20 Apr 2026 08:27:05 +0000</lastBuildDate>
	<language>en-GB</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://shkspr.mobi/blog/wp-content/uploads/2023/07/cropped-avatar-32x32.jpeg</url>
	<title>eink &#8211; Terence Eden’s Blog</title>
	<link>https://shkspr.mobi/blog</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title><![CDATA[Whatever happened to cheap eReaders?]]></title>
		<link>https://shkspr.mobi/blog/2025/05/whatever-happened-to-cheap-ereaders/</link>
					<comments>https://shkspr.mobi/blog/2025/05/whatever-happened-to-cheap-ereaders/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Tue, 27 May 2025 11:34:04 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[ebooks]]></category>
		<category><![CDATA[eink]]></category>
		<category><![CDATA[reading]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=60457</guid>

					<description><![CDATA[Way back in 2012, The Guardian reviewed an eInk reader which cost a mere £8.  The txtr beagle was designed to be a stripped-down and simplified eReader.  As far as I can tell, it never shipped. There were a few review units sent out but I can&#039;t find any evidence of consumers getting their hands on one. Also, that £8 price was the subsidised price when purchased with a mobile contract.  Their w…]]></description>
										<content:encoded><![CDATA[<p>Way back in 2012, The Guardian reviewed <a href="https://www.theguardian.com/technology/2012/nov/08/beagle-e-reader-review">an eInk reader which cost a mere £8</a>.</p>

<p>The <a href="https://wiki.mobileread.com/wiki/Txtr_beagle">txtr beagle</a> was designed to be a stripped-down and simplified eReader<sup id="fnref:txtr"><a href="https://shkspr.mobi/blog/2025/05/whatever-happened-to-cheap-ereaders/#fn:txtr" class="footnote-ref" title="You can see some internal photos on this Mastodon thread." role="doc-noteref">0</a></sup>.</p>

<p>As far as I can tell, it never shipped. There were a few <a href="https://wiki.mobileread.com/wiki/Txtr_beagle">review units sent out</a> but I can't find any evidence of consumers getting their hands on one. Also, that £8 price was the <em>subsidised</em> price when purchased with a mobile contract.  Their <a href="https://web.archive.org/web/20130828235409/http://gb.txtr.com/beagle/">website ceased working long ago</a>.</p>

<p>But it got me intrigued. Moore's law is supposed to drive down the cost of electronics. So where are all the dirt-cheap eReaders?</p>

<p>The cheapest Kindle for sale on Amazon UK right now is about £100.  Back in 2012, it was about £70. Taking <a href="https://www.bankofengland.co.uk/monetary-policy/inflation/inflation-calculator">inflation into account</a>, that price has stayed static.  Brands like Kobo are also in the £100 to £150 range.</p>

<p>About the cheapest retail eReader is the <a href="https://www.laptopsdirect.co.uk/pocketbook-basic-lux-4-ink-black-6-8gb-wi-fi-e-reader-pb618-p-ww/version.asp">PocketBook Lux 4</a> for £85 or the (terribly reviewed) <a href="https://amzn.to/44dgZ9Y">Woxter Scriba</a> for £70.</p>

<p>AliExpress has loads of second-hand and obsolete models at cheap-ish prices. But a surprising dearth of new eReaders.</p>

<p>Going wholesale, <a href="https://www.alibaba.com">Alibaba</a> has a range of models, some of which clock in at around £30.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2025/05/30-quid-eReaders.webp" alt="Range of eReaders in a store. Each around £30." width="1280" height="603" class="alignleft size-full wp-image-60459">

<p>But, of course, that's before shipping and tax. They won't come with any manufacturer's warranty and don't expect any software updates. Also, good luck getting accessories!</p>

<p>So what's stopping new eReaders being released at a cheap(er) price?  I think it comes down to four main things.</p>

<h2 id="reading-is-a-niche-hobby"><a href="https://shkspr.mobi/blog/2025/05/whatever-happened-to-cheap-ereaders/#reading-is-a-niche-hobby">Reading is a niche hobby</a></h2>

<p><a href="https://yougov.co.uk/entertainment/articles/51730-40-of-britons-havent-read-a-single-book-in-the-last-12-months">Around 40% of UK adults didn't read a single book last year</a>.  That survey combines reading books and listening to audiobooks. Of the 60% who do read/listen, about 14% primarily listen. Of those that read, around 60% do so on paper books.</p>

<p>If reading is niche, reading electronically is a tiny niche! This is somewhat of a chicken-and-egg argument. If an eReader were the same cost as a mass-market paperback, I'm sure many more paper-book readers would become converts.</p>

<p>The whole point of an eInk reader is that it is a distraction-free environment. Yeah, you <em>could</em> scroll TikTok on one, but it isn't a pleasant experience. An eReader is designed for one thing only, unlike a phone or tablet. Do enough people want to carry yet-another-bloody-device just for reading?</p>

<h2 id="eink-is-expensive"><a href="https://shkspr.mobi/blog/2025/05/whatever-happened-to-cheap-ereaders/#eink-is-expensive">eInk is expensive</a></h2>

<p>The company which makes eInk hold several patents on the process. They're not a patent troll; they're building a business and selling mega-hectares of the stuff. Understandably, they have an interest in keeping prices high.  They don't want to cannibalise their own market.</p>

<p>A basic 6 inch screen with wiring costs around £20 wholesale - that's from Alibaba, so doesn't include tax and shipping.  That's before you've added any electronics or a operating system.</p>

<p>Speaking of which…</p>

<h2 id="android-is-a-bottleneck"><a href="https://shkspr.mobi/blog/2025/05/whatever-happened-to-cheap-ereaders/#android-is-a-bottleneck">Android is a bottleneck</a></h2>

<p>The promise of the Android Open Source Project was a free Operating System for anyone to use. The reality has been a little different.  Most people want to be able to use basic Android functionality - like download operating system updates or reading apps.  But Google doesn't allow that for eInk devices.</p>

<p>As I understand it, <a href="https://source.android.com/docs/compatibility/9/android-9-cdd#7_1_6_screen_technology">Google requires Android devices to have colour screens</a> and, so I've read, won't certify eInk eReaders for newer versions of Android.</p>

<p>So manufacturers have to source parts which have drivers for older versions of Android. Or they have to develop their own OSes.</p>

<h2 id="books-are-fungible"><a href="https://shkspr.mobi/blog/2025/05/whatever-happened-to-cheap-ereaders/#books-are-fungible">Books are fungible</a></h2>

<p>Back when Apple sold iPods, they knew that the majority of purchasers would buy MP3s direct from Apple. The perfect symbiotic relationship! But the walled-gardens cracked and now people can buy their music from anywhere.</p>

<p>Amazon keeps this model for its eBooks. Unless you're prepared to get technical, you can only read Amazon books on your Amazon Kindle paid for with your Amazon wallet.</p>

<p>Games consoles are often sold at a loss because the manufacturer knows they'll make it up in game sales and subscriptions.</p>

<p>A low-price manufacturer is unlikely to also run a book store and wouldn't be able to cross-subsidise their hardware with content sales.</p>

<h2 id="alternatives"><a href="https://shkspr.mobi/blog/2025/05/whatever-happened-to-cheap-ereaders/#alternatives">Alternatives</a></h2>

<p>Some people have tried <a href="https://hackaday.com/2019/10/31/building-an-open-hardware-ebook-reader/">building open source eReaders</a> but they're either abandoned, <a href="https://www.crowdsupply.com/soldered/inkplate-6plus#products">not suitable for production</a>, or <a href="https://pine64eu.com/product/pinenote-community-edition/">ridiculously expensive</a>.</p>

<p>Buying second hand is relatively cheap - often under £50. But eInk screens can be brittle, and older ones may have scratches or cracks which are effectively unrepairable.</p>

<h2 id="how-cheap-is-cheap"><a href="https://shkspr.mobi/blog/2025/05/whatever-happened-to-cheap-ereaders/#how-cheap-is-cheap">How cheap is cheap?</a></h2>

<p>I'd love a £8 eReader. Something I could throw in a pocket and not worry about damaging. An eReader which was the same price as a hardback book - around £20 - would be amazing.</p>

<p>But I don't think we'll get there soon. The monopoly on screen technologies sets a retail floor of around £30, before the rest of the hardware is taken into account. Niche hardware is viable - but only with decent OS support. Other than Kobo and Amazon, no book retailer wants to stray outside their core competency to develop and subsidise hardware.</p>

<p>So I guess it's buy second-hand, or wait for the patents to expire.</p>

<div id="footnotes" role="doc-endnotes">
<hr aria-label="Footnotes">
<ol start="0">

<li id="fn:txtr">
<p>You can <a href="https://chaos.social/@henryk/114433370736288910">see some internal photos on this Mastodon thread</a>.&nbsp;<a href="https://shkspr.mobi/blog/2025/05/whatever-happened-to-cheap-ereaders/#fnref:txtr" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>

</ol>
</div>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=60457&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2025/05/whatever-happened-to-cheap-ereaders/feed/</wfw:commentRss>
			<slash:comments>24</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Gadget Review: 6-Colour ePaper Name Badge ★★★★⯪]]></title>
		<link>https://shkspr.mobi/blog/2025/04/gadget-review-6-colour-epaper-name-badge/</link>
					<comments>https://shkspr.mobi/blog/2025/04/gadget-review-6-colour-epaper-name-badge/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Sun, 20 Apr 2025 11:34:47 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[demo]]></category>
		<category><![CDATA[eink]]></category>
		<category><![CDATA[gadget]]></category>
		<category><![CDATA[review]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=59522</guid>

					<description><![CDATA[The good folks at SmartDisplayer Technology Co have sent me a six colour eInk badge to play about with.  Here&#039;s a quick video and then a walk-through of its features.      You can also view SmartDisplayer&#039;s official video.  The Badge  It is a single block of plastic. There are no seams, screws, or rough edges. The ePaper appear right on the surface of the badge, there&#039;s no recessing or anything…]]></description>
										<content:encoded><![CDATA[<p>The good folks at <a href="https://smartdisplayer.com.tw">SmartDisplayer Technology Co</a> have sent me a <em>six</em> colour eInk badge to play about with.</p>

<p>Here's a quick video and then a walk-through of its features.</p>

<iframe title="Demo - six-colour eInk screen" width="560" height="315" src="https://tube.tchncs.de/videos/embed/ohEz1V4ByLHL98sspBqMHK" frameborder="0" allowfullscreen="" sandbox="allow-same-origin allow-scripts allow-popups allow-forms"></iframe>

<!-- https://youtu.be/UeipkX7huR8 -->

<p>You can also view <a href="https://www.youtube.com/watch?v=-2FfN006-vQ">SmartDisplayer's official video</a>.</p>

<h2 id="the-badge"><a href="https://shkspr.mobi/blog/2025/04/gadget-review-6-colour-epaper-name-badge/#the-badge">The Badge</a></h2>

<p>It is a single block of plastic. There are no seams, screws, or rough edges. The ePaper appear right on the surface of the badge, there's no recessing or anything to indicate that this is a high-tech gadget. It uses their "cold lamination" technology which creates an impeccable matt finish.</p>

<p>The display area is 56.4mm x 84.6mm - which is pretty close to the size of a standard credit card - for a resolution of 180PPI.</p>

<h2 id="the-eink"><a href="https://shkspr.mobi/blog/2025/04/gadget-review-6-colour-epaper-name-badge/#the-eink">The eInk</a></h2>

<p>This uses E-Ink <a href="https://www.eink.com/brand/detail/Spectra6">Spectra 6</a> technology. With only 6 colours to play about with there's a <em>lot</em> of dithering needed to make a picture look presentable. Those 6 colours are:</p>

<ul>
<li>#000 Black</li>
<li>#F00 Red</li>
<li>#0F0 Green</li>
<li>#00F Blue</li>
<li>#FF0 Yellow</li>
<li>#FFF White</li>
</ul>

<p>I used a standard <a href="https://www.drycreekphoto.com/Learn/monitor_calibration.htm">Monitor Calibration Image</a>, dithered it using the supplied software, and flashed it to the card. I then scanned in the card so you can see exactly how faithful the image reproduction is.</p>

<p>On the left, the eInk. On the right, the original image.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2025/04/24-color-small.jpg" alt="A swatch of colours." width="2048" height="1567" class="aligncenter size-full wp-image-59533">

<p>That's pretty bloody good!</p>

<p>Using <a href="http://www.brucelindbloom.com/index.html?ReferenceImages.html">Bruce Lindbloom's RGB Reference image</a> is also a good way to test a range of colours.</p>

<p><img src="https://shkspr.mobi/blog/wp-content/uploads/2025/04/lindstrom.webp" alt="A multicolour CGI image." width="1920" height="1080" class="aligncenter size-full wp-image-59555">
Not bad for red, green, blue, yellow, white, black, eh?</p>

<p>It's hard to find a good test-card with a variety of skin-tones (there's a creepy Getty one with naked women), so I used <a href="https://www.murideo.com/test-pattern-library.html">the Murideo Portrait Reference Photograph</a>.  The original:</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2025/04/Skintones.webp" alt="Telegenic American Youth with a variety of skin tones." width="1024" height="576" class="aligncenter size-full wp-image-59537">

<p>On eInk:</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2025/04/Skintones-eInk.webp" alt="Skintones rendered on eInk." width="1024" height="768" class="aligncenter size-full wp-image-59536">

<p>And here's another one:</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2025/04/skintones.webp" alt="Various skintones dithered." width="1920" height="1080" class="aligncenter size-full wp-image-59554">

<h2 id="the-card-writer"><a href="https://shkspr.mobi/blog/2025/04/gadget-review-6-colour-epaper-name-badge/#the-card-writer">The Card Writer</a></h2>

<p>For Linux nerds, the USB writer showed up as: <code>1fc9:0102 NXP Semiconductors IT-102MU Reader</code>.</p>

<p>There's almost no information about it other than a <a href="https://marc.info/?l=openbsd-misc&amp;m=174064590315968&amp;w=2">brief discussion on an OpenBSD mailing list</a>, and a mention on the <a href="https://ccid.apdu.fr/ccid/shouldwork.html#0x1FC90x0102">CCID database</a>.  Apparently it will work as on <a href="https://support.google.com/chrome/a/answer/7014689?hl=en#zippy=%2Csupported-smart-card-readers">ChromeOS</a>. It makes a <em>hideous</em> beeping sound when the card is inserted.</p>

<p>Once the card is inserted, two LEDs light up.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2025/04/LEDs.webp" alt="Blue and green LEDs shining through white plastic." width="1024" height="576" class="aligncenter size-full wp-image-59523">

<p>The green one quickly vanishes, but the blue one pulses until the card is removed from the reader.</p>

<details><summary>Detailed <code>lsusb</code> Output</summary><pre>Bus 005 Device 084: ID 1fc9:0102 NXP Semiconductors IT-102MU Reader
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               2.00
  bDeviceClass            0 
  bDeviceSubClass         0 
  bDeviceProtocol         0 
  bMaxPacketSize0        64
  idVendor           0x1fc9 NXP Semiconductors
  idProduct          0x0102 
  bcdDevice            1.12
  iManufacturer           1 InfoThink
  iProduct                2 IT-102MU Reader
  iSerial                 3 1.00
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength       0x005d
    bNumInterfaces          1
    bConfigurationValue     1
    iConfiguration          0 
    bmAttributes         0x80
      (Bus Powered)
    MaxPower              500mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           3
      bInterfaceClass        11 Chip/SmartCard
      bInterfaceSubClass      0 
      bInterfaceProtocol      0 
      iInterface              0 
      ChipCard Interface Descriptor:
        bLength                54
        bDescriptorType        33
        bcdCCID              1.10  (Warning: Only accurate for version 1.0)
        nMaxSlotIndex           0
        bVoltageSupport         7  5.0V 3.0V 1.8V 
        dwProtocols             3  T=0 T=1
        dwDefaultClock       3685
        dwMaxiumumClock     14320
        bNumClockSupported      0
        dwDataRate           9909 bps
        dwMaxDataRate      848000 bps
        bNumDataRatesSupp.      0
        dwMaxIFSD             254
        dwSyncProtocols  00000000 
        dwMechanical     00000000 
        dwFeatures       000404BE
          Auto configuration based on ATR
          Auto activation on insert
          Auto voltage selection
          Auto clock change
          Auto baud rate change
          Auto PPS made by CCID
          Auto IFSD exchange
          Short and extended APDU level exchange
        dwMaxCCIDMsgLen       271
        bClassGetResponse    echo
        bClassEnvelope       echo
        wlcdLayout           none
        bPINSupport             0 
        bMaxCCIDBusySlots       1
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval               0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x01  EP 1 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval               0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x82  EP 2 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval               4
</pre></details>

<h2 id="the-software"><a href="https://shkspr.mobi/blog/2025/04/gadget-review-6-colour-epaper-name-badge/#the-software">The Software</a></h2>

<p>It is Windows-only software, and it is bare-bones. You can load an image, select if you want it dithered or not, and then download it to the badge.  That's it.
<img src="https://shkspr.mobi/blog/wp-content/uploads/2025/04/eInk-Software.webp" alt="Screenshot of the software." width="457" height="630" class="aligncenter size-full wp-image-59540">
No image editing; it just resizes everything to 400x600. There's no badge design software or QR generator. And, to be honest, I think that's fine. You're better off designing your badges in dedicated software.</p>

<p>Unsurprisingly, the app wouldn't run under WINE in Linux. I used Oracle's VirtualBox. Note, the included software requires you to install <a href="https://dotnet.microsoft.com/en-us/download/dotnet/6.0">Microsoft's .Net Windows Desktop Runtime 6</a> <em>and</em> the latest <a href="https://learn.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist?view=msvc-170#latest-microsoft-visual-c-redistributable-version">Microsoft Visual C++ Redistributable Version</a>.</p>

<p>VirtualBox initially refused to see the USB peripheral. I had to unplug the reader, create a USB filter using <code>1fc9:0102</code>, start the VM, and only then plug in the USB reader. Then it worked. Bit of a faff!</p>

<h2 id="pricing"><a href="https://shkspr.mobi/blog/2025/04/gadget-review-6-colour-epaper-name-badge/#pricing">Pricing</a></h2>

<p>I've got good news and bad news!</p>

<p>First, the bad. <a href="https://smartdisplayer.com.tw">SmartDisplayer Technology Co</a> are B2B sellers. They'll sell you a single badge for US$70 + shipping. If you're buying more than a thousand, the price drops to $65. The NFC reader is $120.</p>

<p>In terms of badge pricing, I think that's pretty fair. If you want to buy a demokit of just the screen, <a href="https://shopkits.eink.com/en/product/detail/4''Spectra6ePaperDisplay">that'll cost you US$99 direct from eInk</a>.  So $70 full assembled is a bargain.</p>

<p>The good news? They'll shortly be bringing out <a href="https://www.youtube.com/watch?v=VlAQu3dX4UM">a USB-C badge which doesn't require the NFC reader</a>. The badge itself will be slightly smaller (and a little thicker). That should make it easier to update the badge on the fly - but possibly not as convenient if you're programming hundreds of them.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2025/04/type-c.webp" alt="Graphic showing the new badge is slightly thicker, but shorter." width="715" height="387" class="aligncenter size-full wp-image-59553">

<p>If you're buying in bulk, they will also do custom printing on the badge, and can replace the plastic with wood.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2025/04/wooden.webp" alt="Badge with a wooden decal." width="180" height="378" class="aligncenter size-full wp-image-59552">

<p>For more information, or to place an order, <a href="https://www.smartdisplayer.com/contact">contact SmartDisplayer</a>.</p>

<h2 id="verdict"><a href="https://shkspr.mobi/blog/2025/04/gadget-review-6-colour-epaper-name-badge/#verdict">Verdict</a></h2>

<p>If you want a fun lanyard which is easy to change, and can reproduce a decent range of colours, this is excellent. Ideally it would be easy to flash with a phone, but the supplied software is adequate.</p>

<p>The USB writer is a little bit clunky, but it holds the badge in place while data and power are transmitted.</p>

<p>I'm astonished by just how flat this badge is. SmartDisplayer cold-lamination process is incredible. The image is <em>on</em> the badge, not under it.</p>

<p>It looks stunning - a real premium product and the price reflects that.</p>

<p>As a <em>personal</em> gadget, I think it is great. But for other uses, I'm not so sure.  Are you <em>really</em> going to be handing out $65 lanyards to all of your event attendees? Perhaps at a very expensive conference! But even then, you might want to take a deposit.</p>

<p>Anyone with a suitable reader can reflash a badge; there's no way to lock these. So they're not ideal for security.</p>

<p>If you attend lots of conferences, and are perpetually annoyed by ugly conference badges which misspell your name or don't have a personal QR code, these are a great (albeit pricey) gadget.</p>

<p>Thanks to SmartDisplayer for the review unit. Next time you see me at an event - please snap a photo of my badge!</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=59522&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2025/04/gadget-review-6-colour-epaper-name-badge/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[ManyTag Colour eInk Badge SDK - Minimum Viable Example for Android]]></title>
		<link>https://shkspr.mobi/blog/2025/02/manytag-colour-eink-badge-sdk-minimum-viable-example-for-android/</link>
					<comments>https://shkspr.mobi/blog/2025/02/manytag-colour-eink-badge-sdk-minimum-viable-example-for-android/#respond</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Fri, 28 Feb 2025 12:34:30 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[app]]></category>
		<category><![CDATA[eink]]></category>
		<category><![CDATA[HowTo]]></category>
		<category><![CDATA[Kotlin]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=58487</guid>

					<description><![CDATA[Last year, I reviewed a Four-Colour eInk Name Badge - the ManyTag HSN371. The hardware itself is perfectly fine, but the Android app isn&#039;t great. It is complicated, crash-prone, and not available in the app-store.  After some back-and-forth with the manufacturer, they agreed to send me their Android SDK and documentation. Sadly, the PDF they sent me was riddled with errors and the software…]]></description>
										<content:encoded><![CDATA[<p>Last year, I reviewed a <a href="https://shkspr.mobi/blog/2024/11/review-four-colour-eink-name-badge-hsn371-plus-linux-and-android-tips/">Four-Colour eInk Name Badge</a> - the ManyTag HSN371. The hardware itself is perfectly fine, but the Android app isn't great. It is complicated, crash-prone, and not available in the app-store.</p>

<p>After some back-and-forth with the manufacturer, they agreed to send me their Android SDK and documentation. Sadly, the PDF they sent me was riddled with errors and the software library is also a bit dodgy. So, with the help of <a href="https://hades.omg.lol/">Edward Toroshchyn</a> and a hefty amount of automated boiler-plate, I managed to get it working.</p>

<p>The <a href="https://codeberg.org/edent/eInk-SDK/">full code is open source</a>, but here's a quick walk-through of the important bits.</p>

<p>First, the AAR library needs to be imported into the project. Place it in <code>app/libs</code> and then include it in the Gradle build file:</p>

<pre><code class="language-java">dependencies {
    implementation(files("libs/badge_nfc_api-release.aar"))
}
</code></pre>

<p>The key to getting it working is in the Android permissions. It needs Bluetooth, NFC, and location. So the manifest has to contain:</p>

<pre><code class="language-xml">&lt;uses-permission android:name="android.permission.BLUETOOTH"/&gt;
&lt;uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/&gt;
&lt;uses-permission android:name="android.permission.BLUETOOTH_SCAN"/&gt;
&lt;uses-permission android:name="android.permission.BLUETOOTH_CONNECT"/&gt;
&lt;uses-permission android:name="android.permission.NFC"/&gt;
&lt;uses-permission android:name="android.permission.NFC_TRANSACTION_EVENT"/&gt;
&lt;uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/&gt;
&lt;uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/&gt;
</code></pre>

<p>The following imports are needed from the Android Archive library:</p>

<pre><code class="language-java">import cn.manytag.badge_nfc_api.manager.BadgeWriteManager
import cn.manytag.badge_nfc_api.manager.OnNFCReaderCallback
import cn.manytag.badge_nfc_api.manager.OnBluetoothCallBack
import cn.manytag.badge_nfc_api.manager.OnSendImageCallback
</code></pre>

<p>The library needs to be initialised with:</p>

<pre><code class="language-java">val state = BadgeWriteManager.getInstance().init(this)
</code></pre>

<p>When the phone reads the NFC tag, it gets a bunch of information:</p>

<pre><code class="language-java">BadgeWriteManager.getInstance().setOnNFCReaderCallback(object : OnNFCReaderCallback {
    override fun onReaderMessage(i: Int, tag: Tag) {
        if (i == 0) {
            BadgeWriteManager.getInstance().readNFC(tag)
        }
    }

    //  Get the data from the badge
    override fun onReaderType(tag: Tag, isodep: IsoDep, i: Int, type: String, size: String, color: String) {
        if (i == 0) {
            nfcData = """
                NFC Tag Detected!!!
                Tag: $tag
                IsoDep: $isodep
                Type: $type
                Size: $size
                Color: $color
            """.trimIndent()
            colorFromNFC = color
            tagObject = tag
            isoDepObject = isodep
            badgeType = type
            badgeSize = size
        }
    }
})
</code></pre>

<p>The <code>color</code> is most important right now. It says whether the badge is black and white, or black and white and red, or black and white and red and yellow.</p>

<p>After picking an image from the filesystem, it needs to be dithered into the correct colour format:</p>

<pre><code class="language-java">processedBitmap = originalBitmap?.let { bitmap -&gt;
    colorFromNFC?.let { color -&gt;
        BadgeWriteManager.getInstance().processImage(bitmap, color)
    }
}
</code></pre>

<p>Finally, the processed image needs to be converted to bytes and then sent to the badge via Bluetooth:</p>

<pre><code class="language-java">if (processedBitmap != null &amp;&amp; badgeType != null &amp;&amp; badgeSize != null &amp;&amp; colorFromNFC != null) {
    val imgData = BadgeWriteManager.getInstance().getImageData(processedBitmap!!, colorFromNFC!!)

    BadgeWriteManager.getInstance().sentImageResource(
        tagObject!!, isoDepObject!!, imgData, badgeType!!, badgeSize!!, colorFromNFC!!
    )
}
</code></pre>

<p>I realise this is a bit "<a href="https://knowyourmeme.com/memes/how-to-draw-an-owl">draw the rest of the owl</a>" but that should be enough to get you started on building an app which can communicate with these badges.</p>

<p>The app I've built isn't the prettiest in the world but at least it works. It scans a badge, gets its info, picks an image, dithers it, then sends it to the badge.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2025/02/badge-app-fs8.png" alt="Screenshot of an app." width="504" height="957" class="aligncenter size-full wp-image-58494">

<p>You can <a href="https://codeberg.org/edent/eInk-SDK/">play with the code on CodeBerg</a>.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=58487&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2025/02/manytag-colour-eink-badge-sdk-minimum-viable-example-for-android/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Review: Four-Colour eInk Name Badge (HSN371) - plus Linux and Android tips ★★★★☆]]></title>
		<link>https://shkspr.mobi/blog/2024/11/review-four-colour-eink-name-badge-hsn371-plus-linux-and-android-tips/</link>
					<comments>https://shkspr.mobi/blog/2024/11/review-four-colour-eink-name-badge-hsn371-plus-linux-and-android-tips/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Mon, 25 Nov 2024 12:34:17 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[eink]]></category>
		<category><![CDATA[gadget]]></category>
		<category><![CDATA[review]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=54037</guid>

					<description><![CDATA[While I was at OggCamp, I noticed a few people had repurposed supermarket eInk shelf displays as name-tags. Nifty!  I wondered if there was a retail version I could hack around with. I found the HSN371. It is a colour eInk screen with a lanyard hole. The picture quality is amazing given the technology, the update speed is acceptable, and the supplied app is crap.  Let&#039;s take a look!  Picture…]]></description>
										<content:encoded><![CDATA[<p>While I was at OggCamp, I noticed a few people had repurposed supermarket eInk shelf displays as name-tags. Nifty!</p>

<p>I wondered if there was a retail version I could hack around with. I found the <a href="https://www.mrbretail.com/hsn371-battery-powered-electronic-name-badge-product/">HSN371</a>. It is a <em>colour</em> eInk screen with a lanyard hole. The picture quality is amazing given the technology, the update speed is acceptable, and the supplied app is crap.</p>

<p>Let's take a look!</p>

<h2 id="picture-quality"><a href="https://shkspr.mobi/blog/2024/11/review-four-colour-eink-name-badge-hsn371-plus-linux-and-android-tips/#picture-quality">Picture Quality</a></h2>

<p>Colour eInk isn't designed to be as vibrant as an OLED display. But that's not why you get something like this. It uses no power to display the image, and will happily keep an image on screen indefinitely.  The resolution is 240x416 which works out to about a PPI of 130. With only four colours (black, white, red, and yellow) you aren't going to get the Full HD Mona Lisa on there. But it is relatively easy to craft an image which looks good enough.</p>

<p>Here's the default image:</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2024/11/Default-image.jpg" alt="A white lanyard badge with an image of a young child on a yellow background." width="1024" height="768" class="aligncenter size-full wp-image-54099">

<p>That looks pretty good from a distance!  Here's a close-up of the left shoulder so you can see the dithering at work.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2024/11/Detail.jpg" alt="Individual pixels in a messy grid." width="1024" height="768" class="aligncenter size-full wp-image-54100">

<p>There are various dithering algorithms you can use to change the picture quality.</p>

<h2 id="update-speed"><a href="https://shkspr.mobi/blog/2024/11/review-four-colour-eink-name-badge-hsn371-plus-linux-and-android-tips/#update-speed">Update Speed</a></h2>

<p>I used the Android app to flash a new image onto it.  It takes a few seconds to transmit the image via BlueTooth. But, as you can see, it takes about 30 seconds of blinking before it is fully drawn.</p>

<p></p><div style="width: 620px;" class="wp-video"><video class="wp-video-shortcode" id="video-54037-2" width="620" height="222" preload="metadata" controls="controls"><source type="video/webm" src="https://shkspr.mobi/blog/wp-content/uploads/2024/11/flash.webm?_=2"><a href="https://shkspr.mobi/blog/wp-content/uploads/2024/11/flash.webm">https://shkspr.mobi/blog/wp-content/uploads/2024/11/flash.webm</a></video></div><p></p>

<h2 id="power"><a href="https://shkspr.mobi/blog/2024/11/review-four-colour-eink-name-badge-hsn371-plus-linux-and-android-tips/#power">Power</a></h2>

<p>There are cheaper versions available which are NFC only. They don't require a dedicated battery and are powered by the NFC radio of your phone.</p>

<p>This ones uses BlueTooth to communicate. While still low power, it does mean it requires a chunky CR3032 battery to be installed.  The battery cover twists off, but doesn't have the most ergonomic action.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2024/11/Battery.webp" alt="Plastic box with twist off battery cover." width="366" height="298" class="aligncenter size-full wp-image-54110">

<p>In theory, you should only need to replace the battery every year - but it'll depend on how often you update the design.</p>

<p>Personally, I'd have preferred it to be a sealed unit with a USB-C charging socket.</p>

<h2 id="cost"><a href="https://shkspr.mobi/blog/2024/11/review-four-colour-eink-name-badge-hsn371-plus-linux-and-android-tips/#cost">Cost</a></h2>

<p>They were about £16 / US$20 each after tax and payment fees. That seems pretty reasonable to me. In bulk, they might be cheap enough to hand out as conference swag.</p>

<p>They didn't come with batteries. Annoyingly, the CR3032 are a bit of an unusual size. So budget a couple of quid extra per badge.</p>

<p>I had a voucher for free shipping from AliBaba. I couldn't find anywhere in Europe stocking them.</p>

<h2 id="buying-experience"><a href="https://shkspr.mobi/blog/2024/11/review-four-colour-eink-name-badge-hsn371-plus-linux-and-android-tips/#buying-experience">Buying Experience</a></h2>

<p>I purchased <a href="https://www.alibaba.com/product-detail/Easy-Operation-Reusable-Electronic-NFC-Name_1601261268125.html">direct from Alibaba</a> and it wasn't great. The manufacturer initially refused to supply the promised NFC readers but, after a bit of back and forth, agreed to send one.</p>

<p>It took over 3 weeks to arrive. I also had to chase them to get a link for the app and computer software.  They were pretty responsive over WhatsApp given the time-zone difference.</p>

<h2 id="security"><a href="https://shkspr.mobi/blog/2024/11/review-four-colour-eink-name-badge-hsn371-plus-linux-and-android-tips/#security">Security</a></h2>

<p>The only meaningful security seems to be proximity. In order to flash a new image onto the badge, you need to launch an app on your phone, then touch the badge to your device's NFC antenna. Once the app has seen the badge, it transmits the image via BlueTooth.</p>

<p>As far as I can tell, the BLE radio doesn't start until the app has exchanged something over NFC. I don't know whether the NFC message contains a password or whether it just contains a BlueTooth ID.  There's no sound or vibration on the badge, so the only way you'll know it has changed is by looking at it.</p>

<p>If you take the battery out, the NFC and BlueTooth won't work - but the image will still be displayed on screen.</p>

<h2 id="android-app"><a href="https://shkspr.mobi/blog/2024/11/review-four-colour-eink-name-badge-hsn371-plus-linux-and-android-tips/#android-app">Android App</a></h2>

<p>Just crap. It isn't available on any app stores - so you need to get a copy from the vendor. There's no way to automatically update it. Looking inside, it appears to target an ancient version of Android and hasn't been updated recently. It frequently crashes and is only partly translated. <a href="https://discuss.grapheneos.org/d/17498-cant-launch-nfc-ble-app-logs-attached">It didn't work on GrapheneOS</a>.</p>

<p>I found an old phone to run it on. The app, when it does work, is pretty basic.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2024/11/Android-app-fs8.png" alt="App screenshot. Interface for adding images." width="512" height="762" class="aligncenter size-full wp-image-54104">

<p>You can build your own template with text, images, QR codes, and barcodes.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2024/11/template-design-fs8.png" alt="App screenshot. Buttons for adding text, images, and barcodes." width="512" height="748" class="aligncenter size-full wp-image-54102">

<p>There are a bunch of built in templates you can send.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2024/11/templates-fs8.png" alt="App screenshot. Lots of templates." width="512" height="762" class="aligncenter size-full wp-image-54103">

<p>You can give it any image and it'll convert it to the right format.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2024/11/multipass-fs8.png" alt="App screenshot. Showing adding an image." width="512" height="869" class="aligncenter size-full wp-image-54105">

<p>And it gives instructions on how to pair the badge to the app</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2024/11/NFC-fs8.png" alt="App screenshot. Overlay saying to tap the badge to the phone for NFC." width="512" height="540" class="aligncenter size-full wp-image-54106">

<p>For those of you looking for more information, it calls itself <code>cn.manytag.work_card_write</code></p>

<h2 id="windows-app"><a href="https://shkspr.mobi/blog/2024/11/review-four-colour-eink-name-badge-hsn371-plus-linux-and-android-tips/#windows-app">Windows App</a></h2>

<p>There's a more fully-featured Windows app which works with a USB NFC writer. I was able to launch it on PlayOnLinux, but it couldn't see the USB device and quickly crashed.  So I installed a VM of Windows 10, loaded the drivers I'd been sent for the NFC dongle, and was delighted that it worked!</p>

<p>Like the Android app, it is basic and ugly.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2024/11/eslbadge-windows-fs8.png" alt="Windows app with an interface for adding graphical elements." width="1024" height="1113" class="aligncenter size-full wp-image-54108">

<p>This comes with even more templates which can be dithered to taste.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2024/11/eslbadge-templates-fs8.png" alt="Windows app showing lots of templates." width="1024" height="940" class="aligncenter size-full wp-image-54107">

<p>Templates can be saved in JSON format. They look something like this:</p>

<pre><code class="language-json">{
  "ColorType": "6",
  "Model": "3.7",
  "Size": "0, 0, 240, 416",
  "BgColor": {
    "Color": "White",
    "Name": "White"
  },
  "TemplateList": [
    {
      "$type": "ESL_Badge.BarcodeTemplate, ESL_Badge",
      "BarcodeType": 16,
      "BarcodeText": "12345678",
      "BgColor": {
        "Color": "White",
        "Name": "White"
      },
      "ForeColor": {
        "Color": "Black",
        "Name": "Black"
      },
      "Zindex": 0,
      "Bounds": "187, 150, 100, 30",
      "RelaVarKey": null
    },
    {
      "$type": "ESL_Badge.ImageNewTemplate, ESL_Badge",
      "BackColor": {
        "Color": "White",
        "Name": "White"
      },
      "Image": "iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABz...==",
      "DitheringType": "None",
      "OriginalImage": "iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCA...QmCC",
      "Zindex": 1,
      "Bounds": "55, 125, 50, 50",
      "RelaVarKey": null
    },
    {
      "$type": "ESL_Badge.LableTemplate, ESL_Badge",
      "Font": "Arial, 12px",
      "BgColor": {
        "Color": "White",
        "Name": "White"
      },
      "ForeColor": {
        "Color": "Black",
        "Name": "Black"
      },
      "Text": "Text",
      "TextAlign": 0,
      "Zindex": 2,
      "Bounds": "68, 49, 100, 30",
      "RelaVarKey": null
    },
    {
      "$type": "ESL_Badge.QrCodeTemplate, ESL_Badge",
      "QrCodeText": "12345678",
      "BgColor": {
        "Color": "White",
        "Name": "White"
      },
      "ForeColor": {
        "Color": "Black",
        "Name": "Black"
      },
      "model": 1,
      "Zindex": 3,
      "Bounds": "94, 233, 70, 70",
      "RelaVarKey": null
    }
  ]
}
</code></pre>

<p>The Windows app <em>only</em> works with the supplied NFC transmitter - not with BlueTooth.  Load up the template, drop the badge on the puck, hit send, done!</p>

<h2 id="nfc-transmitter"><a href="https://shkspr.mobi/blog/2024/11/review-four-colour-eink-name-badge-hsn371-plus-linux-and-android-tips/#nfc-transmitter">NFC Transmitter</a></h2>

<p>It shows itself as <code>10c4:ea60</code> "Silicon Labs CP210x UART Bridge" - it isn't detected as an NFC device in Linux. I think the Windows app just sends raw serial commands to it.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2024/11/NFC.webp" alt="A plain black box." width="377" height="214" class="aligncenter size-full wp-image-54109">

<p>It's micro-USB (bleugh!) and has some flashing LEDs.</p>

<h2 id="linux-use"><a href="https://shkspr.mobi/blog/2024/11/review-four-colour-eink-name-badge-hsn371-plus-linux-and-android-tips/#linux-use">Linux Use</a></h2>

<p>Nope! I'm happy to share the Android app and Windows app with anyone who reckons they can decompile them.  The manufacturer offered to sell me the official SDK for US$600!</p>

<p>I did a USB capture in Wireshark. It <em>looks</em> like the image is transmitted unencrypted - but I'm not skilled enough to decipher all the commands it sends the USB device. If you are - please let me know!</p>

<h2 id="background"><a href="https://shkspr.mobi/blog/2024/11/review-four-colour-eink-name-badge-hsn371-plus-linux-and-android-tips/#background">Background</a></h2>

<p>I purchased from <a href="https://www.mrbretail.com/hsn371-battery-powered-electronic-name-badge-product/">MRB Retail</a>.</p>

<p>It seems to originate with <a href="https://www.highlightesl.com/highlight-electronic-name-tag-work-badge-3-7-inch.html">Highlight ESL</a></p>

<p>I <em>think</em> the ultimate manufacturer is <a href="https://www.ontimesmart.com/">HangZhou Ontime IT Co., LTD</a> but, as with lots of of companies, the ownership is a little confusing.</p>

<h2 id="verdict"><a href="https://shkspr.mobi/blog/2024/11/review-four-colour-eink-name-badge-hsn371-plus-linux-and-android-tips/#verdict">Verdict</a></h2>

<p>This is a reasonably large, four-colour ePaper badge, and it <em>works!</em> Go along to any (geeky) event and always have a name-badge with your personal branding, cool images, QR code, whatever else you want.  Whip your phone out and update it in a jiffy.</p>

<p>After shipping, taxes, and batteries, they're about £19 each. More expensive than paper, sure, but a lot more fun.</p>

<p>There's no backlight or side-light, so it won't be as distracting as wearing other digital screens or flashing LEDs.</p>

<p>It's made of cheap white plastic and doesn't have the most premium feel to it. There is a screen-protector pre-applied to prevent any scratches.</p>

<p>If you can find an Android phone it works on, or are prepared to run Windows and use a dongle, it's a surprisingly good bit of kit!</p>

<h2 id="badges"><a href="https://shkspr.mobi/blog/2024/11/review-four-colour-eink-name-badge-hsn371-plus-linux-and-android-tips/#badges">Badges!</a></h2>

<p>Some badges what I made. Graphic Design Is My Passion!</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2024/12/pass.jpg" alt="Pass with a QR code." width="720" height="720" class="aligncenter size-full wp-image-54122">

<img src="https://shkspr.mobi/blog/wp-content/uploads/2024/12/multipass.jpg" alt="Multipass from 5th Element." width="1024" height="671" class="aligncenter size-full wp-image-54123">

<img src="https://shkspr.mobi/blog/wp-content/uploads/2024/12/memetic.jpg" alt="SCP Memetic Infohazard." width="1024" height="638" class="aligncenter size-full wp-image-54124">

<img src="https://shkspr.mobi/blog/wp-content/uploads/2024/12/compic.jpg" alt="Comic book image." width="720" height="885" class="aligncenter size-full wp-image-54125">

<p>And, yes, you can run DOOM on it!</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2024/12/doom-screenshot.jpg" alt="A very pixelated screenshot from the Original Doom displayed on an eInk badge." width="1024" height="768" class="aligncenter size-full wp-image-54138">

<p>(Obviously not - but you can send screenshots. I guess you could play at 2 frames per minute?)</p>

<h2 id="official-demo-video"><a href="https://shkspr.mobi/blog/2024/11/review-four-colour-eink-name-badge-hsn371-plus-linux-and-android-tips/#official-demo-video">Official Demo Video</a></h2>

<iframe title="Highlight 3.7 inch NFC / Bluetooth Electronic Work Badge，Electronic Name Badge, Digital Name Tag" width="620" height="349" src="https://www.youtube.com/embed/sAVr9aWqcxk?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen=""></iframe>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=54037&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2024/11/review-four-colour-eink-name-badge-hsn371-plus-linux-and-android-tips/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		<enclosure url="https://shkspr.mobi/blog/wp-content/uploads/2024/11/flash.webm" length="4747188" type="video/webm" />

			</item>
		<item>
		<title><![CDATA[eInk Display for Octopus's Agile Energy Tariff]]></title>
		<link>https://shkspr.mobi/blog/2023/12/eink-display-for-octopuss-agile-energy-tariff/</link>
					<comments>https://shkspr.mobi/blog/2023/12/eink-display-for-octopuss-agile-energy-tariff/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Tue, 05 Dec 2023 12:34:22 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[battery]]></category>
		<category><![CDATA[eink]]></category>
		<category><![CDATA[HowTo]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[solar]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=48583</guid>

					<description><![CDATA[I&#039;m a little bit obsessed with building eInk displays. They&#039;re pretty cheap second hand. They&#039;re low energy, passive displays, with good-enough performance for occasional updates.  Here&#039;s a new one which shows me what the current cost of my electricity is:    Background  After installing solar panels, a smart electricity meter, and a solar battery - the next obvious step was a smart energy…]]></description>
										<content:encoded><![CDATA[<p>I'm a little bit obsessed with <a href="https://shkspr.mobi/blog/2020/02/turn-an-old-ereader-into-an-information-screen-nook-str/">building eInk displays</a>. They're pretty cheap second hand. They're low energy, passive displays, with good-enough performance for occasional updates.  Here's a new one which shows me what the current cost of my electricity is:</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2023/12/Graph.jpg" alt="An eInk screen with a line graph on it. The graph shows the current price of power. The eInk is mounted in a wooden frame." width="1024" height="768" class="aligncenter size-full wp-image-48820">

<h2 id="background"><a href="https://shkspr.mobi/blog/2023/12/eink-display-for-octopuss-agile-energy-tariff/#background">Background</a></h2>

<p>After installing <a href="https://shkspr.mobi/blog/2020/03/relaunching-edent_solar-part-1-installation/">solar panels</a>, a <a href="https://shkspr.mobi/blog/2020/04/how-to-take-solar-export-readings-on-the-honeywell-as302p-smart-meter/">smart electricity meter</a>, and a <a href="https://shkspr.mobi/blog/2023/08/review-moixa-4-8kwh-solar-battery/">solar battery</a> - the next obvious step was a smart energy tariff.</p>

<p>Octopus (<a href="https://share.octopus.energy/metal-dove-988">join and we both get £50</a>) have an "Agile" tariff. Unlike a normal tariff - with a set price for electricity - this tariff fluctuates every 30 minutes.  Prices depend on wholesale costs which means they can go negative. That's right, you can get paid to soak up excess power.</p>

<p>Of course, they can also spike considerably. Unlike <a href="https://edition.cnn.com/2021/02/23/us/texas-outages-electric-bills-griddy/index.html">the failed Texas experiment</a>, here the maximum price is capped at £1/kWh.</p>

<p>Every day at about 1600, the next day's prices are published on Octopus's website. And they're <a href="https://developer.octopus.energy/rest/">also made available via a simple REST API</a>.</p>

<p>So, it's relatively simple to generate a line graph and display it on the eInk screen.</p>

<h2 id="code"><a href="https://shkspr.mobi/blog/2023/12/eink-display-for-octopuss-agile-energy-tariff/#code">Code</a></h2>

<p>(You can treat this code as MIT Licenced if that makes you happy.)</p>

<p>Calling the API for the half-houly prices is:</p>

<pre><code class="language-php">$url = "https://{$API_KEY}:@api.octopus.energy/v1/products/" .
       "AGILE-FLEX-22-11-25/electricity-tariffs/E-1R-AGILE-FLEX-22-11-25-C/standard-unit-rates/";
</code></pre>

<p>Your API_KEY is unique - and you'll need to check which tariff you're on.</p>

<p>The data is retrieved as JSON and converted:</p>

<pre><code class="language-php">$content = file_get_contents($url);
$data = json_decode($content);
</code></pre>

<p>The JSON is full of entries like this:</p>

<pre><code class="language-JSON">"results": [
{
  "value_exc_vat": 13.6,
  "value_inc_vat": 14.28,
  "valid_from": "2023-11-01T22:30:00Z",
  "valid_to": "2023-11-01T23:00:00Z",
  "payment_method": null
},
{
  "value_exc_vat": 18.4,
  "value_inc_vat": 19.32,
  "valid_from": "2023-11-01T22:00:00Z",
  "valid_to": "2023-11-01T22:30:00Z",
  "payment_method": null
},
</code></pre>

<p>They're newest first, so need to be reversed:</p>

<pre><code class="language-php">$tariffs = array_reverse( $data-&gt;results );
</code></pre>

<p>Then it's a case of looping through them and grabbing <em>today's</em> data:</p>

<pre><code class="language-php">$userTimeZone = new DateTimeZone('Europe/London');
$now = new DateTime('now', $userTimeZone);

$nowPosition = 0;
$datay = array();
$datax = array();

foreach ( $tariffs as $tariff ) {
    $dateStringFrom = $tariff-&gt;valid_from;
    $dateStringTo   = $tariff-&gt;valid_to;
    $dateTimeFrom = new DateTime($dateStringFrom, new DateTimeZone('UTC'));
    $dateTimeTo   = new DateTime($dateStringTo,   new DateTimeZone('UTC'));

    if ($now &gt;= $dateTimeFrom &amp;&amp; $now &lt;= $dateTimeTo) {
        $costNow = $roundedInteger = (int)round( $tariff-&gt;value_inc_vat );
        $hour   = intval( $dateTimeFrom-&gt;format('G') ); //  No leading 0
        $minute = intval( $dateTimeFrom-&gt;format('i') );
        $offset = ($minute == 0) ? 0 : (($minute == 30) ? 1 : null);
        $nowPosition = (2 * $hour) + $offset + 0.5;
        $until = $dateTimeTo-&gt;format('H:i');
    }

    if ($dateTimeFrom-&gt;format('Y-m-d') == $now-&gt;format('Y-m-d')) {

        $datax[] = $dateTimeFrom-&gt;format("H:i");
        $cost = $roundedInteger = (int)round( $tariff-&gt;value_inc_vat );
        $datay[] = $cost;
    }   
}
</code></pre>

<p>Drawing the graph uses the venerable <a href="https://jpgraph.net/">JPGraph</a>:</p>

<pre><code class="language-php">$path = 'jpgraph/';
set_include_path(get_include_path() . PATH_SEPARATOR . $path);
require_once ('jpgraph/jpgraph.php');
require_once ('jpgraph/jpgraph_line.php');
require_once ('jpgraph/jpgraph_plotline.php');

// Size of graph
$width  = 600;
$height = 600;

// Setup the graph
$graph = new Graph($width,$height);
$graph-&gt;SetScale("intlin");
$graph-&gt;SetMargin(35,0,45,20); // L R T B

$graph-&gt;SetUserFont('dejavu/DejaVuSansMono.ttf');
$graph-&gt;title-&gt;SetFont(FF_USERFONT,FS_NORMAL,25);

$graph-&gt;SetBox(false);

$graph-&gt;title-&gt;Set( $now-&gt;format('l') . "'s Electricity Prices\n" . $costNow . "p / kWh until {$until}" );
$graph-&gt;title-&gt;SetColor('#000');

$graph-&gt;ygrid-&gt;Show(true);
$graph-&gt;xgrid-&gt;Show(true);

$graph-&gt;xaxis-&gt;SetTickLabels( $datax );

$graph-&gt;xaxis-&gt;SetColor('#000');
$graph-&gt;yaxis-&gt;SetColor('#000');

$graph-&gt;xaxis-&gt;SetFont(FF_USERFONT, FS_NORMAL, 10);
$graph-&gt;yaxis-&gt;SetFont(FF_USERFONT, FS_NORMAL, 14); 

// Just let the maximum be autoscaled
$graph-&gt;yaxis-&gt;scale-&gt;SetAutoMin(0); 

// Only show up until 23:00
$graph-&gt;xaxis-&gt;scale-&gt;SetAutoMax(46);

$graph-&gt;xaxis-&gt;SetTextLabelInterval(2); 
$graph-&gt;SetTickDensity(TICKD_DENSE, TICKD_DENSE);  

// Create the line plot
$p1 = new LinePlot($datay);
$graph-&gt;Add($p1);
$p1-&gt;SetStepStyle();
$p1-&gt;SetColor('#000');

//                 Direction, position,     colour@alpha, width
$l1 = new PlotLine(VERTICAL,  $nowPosition, 'black@.8',   13);
// Add vertical highlight line to the plot
$graph-&gt;AddLine($l1);

// Output line
$graph-&gt;Stroke();
</code></pre>

<h2 id="next-steps"><a href="https://shkspr.mobi/blog/2023/12/eink-display-for-octopuss-agile-energy-tariff/#next-steps">Next steps</a></h2>

<p>I dunno? Add some details about carbon emissions? Battery stats? Let me know what you think in the comments.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=48583&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2023/12/eink-display-for-octopuss-agile-energy-tariff/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[An eInk, Wrist-Mounted, TOTP Generator]]></title>
		<link>https://shkspr.mobi/blog/2023/07/an-eink-wrist-mounted-totp-generator/</link>
					<comments>https://shkspr.mobi/blog/2023/07/an-eink-wrist-mounted-totp-generator/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Sat, 08 Jul 2023 11:34:09 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[2fa]]></category>
		<category><![CDATA[arduino]]></category>
		<category><![CDATA[eink]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[watchy]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=46213</guid>

					<description><![CDATA[Behold! Thanks to the power of the Watchy development platform, I now have all my 2FA codes available at the flick of my wrist!    HOWTO  This uses Luca Dentella&#039;s TOTP-Arduino library.  You will need a pre-shared secret which is then converted into a Hex array. Use the OTP Tool for Arduino TOTP Library to get the Hex array, Base32 Encoded Key, and a QR Code to scan into your normal TOTP…]]></description>
										<content:encoded><![CDATA[<p>Behold! Thanks to the power of the <a href="https://shkspr.mobi/blog/2023/06/review-watchy-an-eink-watch-full-of-interesting-compromises/">Watchy</a> development platform, I now have all my 2FA codes available at the flick of my wrist!</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2023/07/Wrist-TOTP.jpg" alt="A chunky wristwatch showing the time and a selection of 6 digit codes and their corresponding entities." width="1024" height="1024" class="aligncenter size-full wp-image-46214">

<h2 id="howto"><a href="https://shkspr.mobi/blog/2023/07/an-eink-wrist-mounted-totp-generator/#howto">HOWTO</a></h2>

<p>This uses <a href="https://github.com/lucadentella/TOTP-Arduino/">Luca Dentella's TOTP-Arduino library</a>.</p>

<p>You will need a pre-shared secret which is then converted into a Hex array. Use the <a href="https://www.lucadentella.it/OTP/">OTP Tool for Arduino TOTP Library</a> to get the Hex array, Base32 Encoded Key, and a QR Code to scan into your normal TOTP generator.</p>

<p>Add the Hex array into the code below.</p>

<p>To check that it is functioning correctly, either scan the QR code from the OTP Tool above, or use the Base32 Encoded Key with <a href="https://totp.danhersam.com/">an online TOTP generator</a>.</p>

<p>Here's how the code interfaces with the Watchy:</p>

<pre><code class="language-c">#include &lt;Watchy.h&gt; //include the Watchy library
#include "settings.h"
#include "sha1.h"
#include "TOTP.h"

class MyFirstWatchFace : public Watchy{ //inherit and extend Watchy class
    public:
        MyFirstWatchFace(const watchySettings&amp; s) : Watchy(s) {}
        void drawWatchFace(){

          ...

          RTC.read(currentTime);
          time_t epoch = makeTime(currentTime) - 3600; // BST offset


          // The shared secret - convert at https://www.lucadentella.it/OTP/
          uint8_t hmacKey[] = {}; // e.g. {0x4d, 0x79, 0x4c, 0x65, 0x67, 0x6f, 0x44, 0x6f, 0x6f, 0x72};
          int hmacKeyLength = sizeof(hmacKey) / sizeof(hmacKey[0]);

          TOTP totp = TOTP(hmacKey, hmacKeyLength);
          char* epochCode = totp.getCode( epoch );

          display.print(  "TOTP Code Twitter: ");
          display.println( epochCode );

          ...
</code></pre>

<p><a href="https://gitlab.com/edent/watchy-faces/-/tree/main">You can grab the full code from GitLab</a>.</p>

<p>I'm not very good at C++ - so please let me know what terrible mistakes I've made.</p>

<h2 id="is-this-a-good-idea"><a href="https://shkspr.mobi/blog/2023/07/an-eink-wrist-mounted-totp-generator/#is-this-a-good-idea">Is this a good idea?</a></h2>

<p>Well... Yes and no.</p>

<p>TOTP is a strong-ish form of Multi-Factor Authentication. It helps prevent attacks where someone already knows your username and password.  Having a convenient way to get your TOTP codes may make you more likely to use them. It also prevents you from getting locked out of your accounts if your phone dies or is stolen.</p>

<p>Convenient security is <em>good</em> security.</p>

<p>But... Having them on your wrist for everyone to see? I've deliberately made the font as small as I can so it is only readable up close. However, if someone is shoulder-surfing your details, they may well see your wrist. The watch isn't encrypted - so even if you hid the codes behind a button press, anyone who steals your watch will have your codes. If they steal your phone, they need to get through your PIN / biometrics.</p>

<p>Who are your adversaries? If you are trying to evade state-level actors, thieves specifically targeting you for your crypto-holdings, or an untrustworthy spouse - this probably isn't a great idea.  If you don't use 2FA because you don't keep your phone with you - this will probably increase your security posture.</p>

<p>Ultimately, all security measures are a trade-off between convenience and control.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=46213&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2023/07/an-eink-wrist-mounted-totp-generator/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Stupidly Small eInk Font]]></title>
		<link>https://shkspr.mobi/blog/2023/07/stupidly-small-eink-font/</link>
					<comments>https://shkspr.mobi/blog/2023/07/stupidly-small-eink-font/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Fri, 07 Jul 2023 11:34:06 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[arduino]]></category>
		<category><![CDATA[eink]]></category>
		<category><![CDATA[watchy]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=46206</guid>

					<description><![CDATA[I have the new Watchy eInk watch. It has a cute little screen with a resolution of 200x200 pixels.  How much text can we cram in there?  A typical watch face looks like this:    My new watch face is far superior and looks like this:    That&#039;s using the GNU Unifont - which works brilliantly on tiny devices.  HOWTO   Download the GNU Unifont Download and compile HarfBuzz Run the HarfBuzz Font…]]></description>
										<content:encoded><![CDATA[<p>I have the new Watchy eInk watch. It has a cute little screen with a resolution of 200x200 pixels.  How much text can we cram in there?</p>

<p>A typical watch face looks like this:</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2023/06/blackberry.jpg" alt="Watch with a big USB cable plugged in." width="2024" height="1518" class="aligncenter size-full wp-image-46198">

<p>My new watch face is <em>far</em> superior and looks like this:</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2023/06/smol.jpg" alt="A chunky eInk watch with a ridiculously small font." width="1024" height="1024" class="aligncenter size-full wp-image-46207">

<p>That's using the GNU Unifont - which works brilliantly on tiny devices.</p>

<h2 id="howto"><a href="https://shkspr.mobi/blog/2023/07/stupidly-small-eink-font/#howto">HOWTO</a></h2>

<ul>
<li>Download the <a href="https://unifoundry.com/unifont/index.html">GNU Unifont</a></li>
<li>Download and compile <a href="https://harfbuzz.github.io/building.html">HarfBuzz</a></li>
<li>Run the <a href="https://harfbuzz.github.io/utilities.html#utilities-command-line-hbsubset">HarfBuzz Font Subsetter</a></li>
<li><code>./hb-subset unifont-15.0.06.ttf abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789\!\"\£\$\%\^\&amp;\*\(\)\-\_\=\+\@\~\'\#\,\.\/\?\:\;\&lt;\&gt;\\\| -o latin.ttf</code></li>
<li>Convert the output to AdaFruit's GFX format using <a href="https://rop.nl/truetype2gfx/">truetype2gfx</a> (set the Font Size to 5 points for about the smallest you can reasonably go. But Font Size of 8 is a better compromise between size and readability.)</li>
<li>Follow the <a href="https://watchy.sqfmi.com/docs/create-watchface#basics">tutorial to create a new watch face</a>

<ul>
<li><strong>NOTE</strong> If you put the font file in the same director as the <code>.ino</code> file, you need to include it using <code>#include "latin5pt7b.h"</code></li>
</ul></li>
<li>Compile and upload to your watchy via USB.</li>
</ul>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2023/06/face.jpg" alt="A tiny pixelated font showing the time." width="600" height="599" class="aligncenter size-full wp-image-46208">

<p>Nice!</p>

<h2 id="next-steps"><a href="https://shkspr.mobi/blog/2023/07/stupidly-small-eink-font/#next-steps">Next Steps</a></h2>

<p>I dunno. Make it bounce around? Print a Shakespearean sonnet? Give me some suggestions!</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=46206&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2023/07/stupidly-small-eink-font/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Combining 3 transport APIs for one info screen]]></title>
		<link>https://shkspr.mobi/blog/2023/07/combining-3-transport-apis-for-one-info-screen/</link>
					<comments>https://shkspr.mobi/blog/2023/07/combining-3-transport-apis-for-one-info-screen/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Thu, 06 Jul 2023 11:34:16 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[eink]]></category>
		<category><![CDATA[nook]]></category>
		<category><![CDATA[rail]]></category>
		<category><![CDATA[tfl]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=46190</guid>

					<description><![CDATA[Last year, I blogged about how I turned an old eReader into an Information Screen.  I&#039;ve since updated the display to show me three different sets of transport information.    At a glance, I can see the next bus, whether there are delays on the Elizabeth Line, and if my regular trains are running.  Here&#039;s how all three APIs work.  Bus  The bus is the easiest one of all. Transport for London (TfL) …]]></description>
										<content:encoded><![CDATA[<p>Last year, I blogged about how I <a href="https://shkspr.mobi/blog/2020/02/turn-an-old-ereader-into-an-information-screen-nook-str/">turned an old eReader into an Information Screen</a>.</p>

<p>I've since updated the display to show me <em>three</em> different sets of transport information.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2023/06/departure.jpg" alt="An eInk screen which is displaying the times until the next bus, what delays there are on the tube, and then a bunch of train departure times." width="1024" height="768" class="aligncenter size-full wp-image-46191">

<p>At a glance, I can see the next bus, whether there are delays on the Elizabeth Line, and if my regular trains are running.</p>

<p>Here's how all three APIs work.</p>

<h2 id="bus"><a href="https://shkspr.mobi/blog/2023/07/combining-3-transport-apis-for-one-info-screen/#bus">Bus</a></h2>

<p>The bus is the easiest one of all. Transport for London (TfL) have a set of free APIs. No registration required!
You will need to know the ID of your local bus stop. Visit <a href="https://tfl.gov.uk/disambiguation?Input=oxford+circus&amp;DataSetsJson=%5B%5B%22stopPoints%22%2C%22%2Fmaps%2Fbus%3FInput%3D%7B%7Binput%7D%7D%26InputGeolocation%3D%7B%7Blat%7D%7D%2C%7B%7Blon%7D%7D%26searchBoxType%3Dbus%22%5D%2C%5B%22routes%22%2C%22%2F%7B%7Bmode%7D%7D%2Froute%2F%7B%7BlineIds%7D%7D%2F%22%5D%5D&amp;Modes=bus&amp;PlaceHolderText=Bus+route+or+stop+name&amp;InputGeolocation=">the TfL bus search page</a> and search for your local stop. Click the stop on the map.</p>

<p>You'll be taken to a URl like <a href="https://tfl.gov.uk/bus/stop/490000173RF/oxford-circus-stn-margaret-street"></a><a href="https://tfl.gov.uk/bus/stop/490000173RF/oxford-circus-stn-margaret-street">https://tfl.gov.uk/bus/stop/490000173RF/oxford-circus-stn-margaret-street</a> - that will show you the Bus Stop ID (technically the <a href="https://beta-naptan.dft.gov.uk/">NaPTAN ID</a>). In this case <code>490000173RF</code>.</p>

<p>You can then call this API: <a href="https://api.tfl.gov.uk/StopPoint/490000173RF/arrivals"></a><a href="https://api.tfl.gov.uk/StopPoint/490000173RF/arrivals">https://api.tfl.gov.uk/StopPoint/490000173RF/arrivals</a> - which will return JSON like this:</p>

<pre><code class="language-json">[{
    "$type": "Tfl.Api.Presentation.Entities.Prediction, Tfl.Api.Presentation.Entities",
    "id": "-119695796",
    "operationType": 1,
    "vehicleId": "LTZ1049",
    "naptanId": "490000173RF",
    "stationName": "Oxford Circus Stn  / Margaret Street",
    "lineId": "12",
    "lineName": "12",
    "platformName": "RF",
    "direction": "outbound",
    "bearing": "152",
    "destinationNaptanId": "",
    "destinationName": "Dulwich Library",
    "timestamp": "2023-06-29T10:40:18.3147535Z",
    "timeToStation": 1470,
    "currentLocation": "",
    "towards": "Trafalgar Square Or Green Park",
    "expectedArrival": "2023-06-29T11:04:48Z",
    "timeToLive": "2023-06-29T11:05:18Z",
    "modeName": "bus",
    "timing": {
        "$type": "Tfl.Api.Presentation.Entities.PredictionTiming, Tfl.Api.Presentation.Entities",
        "countdownServerAdjustment": "-00:00:02.7011995",
        "source": "2023-06-29T07:28:52.918Z",
        "insert": "2023-06-29T10:40:01.313Z",
        "read": "2023-06-29T10:39:58.591Z",
        "sent": "2023-06-29T10:40:18Z",
        "received": "0001-01-01T00:00:00Z"
    }
}, {
    "$type": "Tfl.Api.Presentation.Entities.Prediction, Tfl.Api.Presentation.Entities",
    "id": "-1460579610",
    "operationType": 1,
    "vehicleId": "LTZ1447",
    "naptanId": "490000173RF",
    "stationName": "Oxford Circus Stn  / Margaret Street",
    "lineId": "12",
    "lineName": "12",
</code></pre>

<p>Hopefully the entity names are self-explanatory. If you need a specific route, you will need to filter on the <code>lineId</code>'s value.</p>

<p>Personally, I use <code>timeToStation</code> to see how long until the bus arrives. If it's less than a couple of minutes, I don't display it.</p>

<h2 id="crossrail"><a href="https://shkspr.mobi/blog/2023/07/combining-3-transport-apis-for-one-info-screen/#crossrail">CrossRail</a></h2>

<p>Again, I am overjoyed that TfL have a free API which lets you check the status of various tube lines.</p>

<p>The Elizabeth Line's status can be found at <a href="https://api.tfl.gov.uk/Line/elizabeth/status"></a><a href="https://api.tfl.gov.uk/Line/elizabeth/status">https://api.tfl.gov.uk/Line/elizabeth/status</a> - can you guess the URl for the other lines 😉?</p>

<p>And, again, we get back some fairly self-explanatory JSON:</p>

<pre><code class="language-json">[{
    "$type": "Tfl.Api.Presentation.Entities.Line, Tfl.Api.Presentation.Entities",
    "id": "elizabeth",
    "name": "Elizabeth line",
    "modeName": "elizabeth-line",
    "disruptions": [],
    "created": "2023-06-27T12:37:57.107Z",
    "modified": "2023-06-27T12:37:57.107Z",
    "lineStatuses": [{
        "$type": "Tfl.Api.Presentation.Entities.LineStatus, Tfl.Api.Presentation.Entities",
        "id": 0,
        "lineId": "elizabeth",
        "statusSeverity": 9,
        "statusSeverityDescription": "Minor Delays",
        "reason": "Minor delays between Stratford and Shenfield due to a an earlier signal failure at Tottenham Court Road. GOOD SERVICE on the rest of the line. ",
        "created": "0001-01-01T00:00:00",
        "validityPeriods": [{
            "$type": "Tfl.Api.Presentation.Entities.ValidityPeriod, Tfl.Api.Presentation.Entities",
            "fromDate": "2023-06-29T10:30:50Z",
            "toDate": "2023-06-30T00:29:00Z",
            "isNow": true
        }],
        "disruption": {
            "$type": "Tfl.Api.Presentation.Entities.Disruption, Tfl.Api.Presentation.Entities",
            "category": "RealTime",
            "categoryDescription": "RealTime",
            "description": "Minor delays between Stratford and Shenfield due to a an earlier signal failure at Tottenham Court Road. GOOD SERVICE on the rest of the line. ",
            "affectedRoutes": [],
            "affectedStops": [],
            "closureText": "minorDelays"
        }
    }],
    "routeSections": [],
    "serviceTypes": [{
        "$type": "Tfl.Api.Presentation.Entities.LineServiceTypeInfo, Tfl.Api.Presentation.Entities",
        "name": "Regular",
        "uri": "/Line/Route?ids=Elizabeth line&amp;serviceTypes=Regular"
    }],
    "crowding": {
        "$type": "Tfl.Api.Presentation.Entities.Crowding, Tfl.Api.Presentation.Entities"
    }
}]
</code></pre>

<p>You can grab the text out of there for easy display.</p>

<h2 id="train-times"><a href="https://shkspr.mobi/blog/2023/07/combining-3-transport-apis-for-one-info-screen/#train-times">Train Times</a></h2>

<p>This is the only pain-in-the-arse service.  It uses <a href="https://realtime.nationalrail.co.uk/OpenLDBWS/">National Rail's Live Departure Boards Web Service (LDBWS)</a>. This is an XML SOAP API which requires credentials.</p>

<p><a href="https://realtime.nationalrail.co.uk/OpenLDBWSRegistration/Registration">Register for an API token at National Rail's site</a>.</p>

<p>Find the three letter CRS code for your departure and arrival station <a href="https://www.nationalrail.co.uk/find-a-station/">on the National Rail website</a>.</p>

<p>I use the <a href="https://lite.realtime.nationalrail.co.uk/OpenLDBWS/#GetDepBoardWithDetailsHeader"><code>GetDepBoardWithDetailsHeader()</code></a> API call. For example: <code>GetDepBoardWithDetails(20, "WWA", "LBG", "to")</code> gets the next 20 trains <em>from</em> Woolwich Arsenal <em>to</em> London Bridge.</p>

<p>There are <a href="https://github.com/orgs/openraildata/repositories?type=all">OpenLDBWS libraries available in most major programming languages</a>. Don't bother writing your own!</p>

<p>There's more discussion online about <a href="https://wiki.openraildata.com/index.php/OpenLDBWS_Troubleshooting">how to test and use OpenLDBWS</a>.</p>

<p>Once you've got a response, you can filter it for the specific trains you're interested in.</p>

<h2 id="putting-it-all-together"><a href="https://shkspr.mobi/blog/2023/07/combining-3-transport-apis-for-one-info-screen/#putting-it-all-together">Putting it all together</a></h2>

<p>Well, that's up to you Sparky! Personally, I have a hodge-podge of PHP building it into a format suitable for my ancient eInk screen. You can do what you like!</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=46190&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2023/07/combining-3-transport-apis-for-one-info-screen/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Review: Watchy - an eInk watch full of interesting compromises ★★★⯪☆]]></title>
		<link>https://shkspr.mobi/blog/2023/06/review-watchy-an-eink-watch-full-of-interesting-compromises/</link>
					<comments>https://shkspr.mobi/blog/2023/06/review-watchy-an-eink-watch-full-of-interesting-compromises/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Fri, 30 Jun 2023 11:34:12 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[eink]]></category>
		<category><![CDATA[gadget]]></category>
		<category><![CDATA[review]]></category>
		<category><![CDATA[watch]]></category>
		<category><![CDATA[watchy]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=46196</guid>

					<description><![CDATA[The last smartwatch that I tried was some awful early Sony device with a locked-down ROM. The battery died after a day and I couldn&#039;t find the proprietary charger. It slurped up all my data. It was garish to look at. And it was expensive.  The Watchy is the opposite in every single conceivable way.  It is an Arduino powered, open source, eInk display, with no data guzzling tendancies. And is only …]]></description>
										<content:encoded><![CDATA[<p>The last smartwatch that I tried was some awful early Sony device with a locked-down ROM. The battery died after a day and I couldn't find the proprietary charger. It slurped up all my data. It was garish to look at. And it was expensive.</p>

<p>The Watchy is the opposite in every single conceivable way.</p>

<p>It is an Arduino powered, open source, eInk display, with no data guzzling tendancies. And is only <a href="https://thepihut.com/products/sqfmi-watchy">£60 including delivery</a>.  It's gorgeous to look at without being distracting, has a massive battery life, and allows for a bunch of tinkering.</p>

<p>But...</p>

<p>Ah... Let's get it out of the way. This is <em>not</em> a consumer product. It is fiddly to assemble, has very little protection for its delicate components, and <a href="https://github.com/sqfmi/Watchy/issues/235">to change the timezone you have to recompile the firmware</a>!</p>

<p>Oh, and it uses USB-Micro rather than USB-C 😡</p>

<p>The watch ships in kit form and is not overly satisfying to build. The buttons are especially fiddly to fit, the instructions assume you know how to open a ribbon connector, and there's warnings about how fragile everything is. Took me about 20 minutes all in - and that was mostly aligning the buttons.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2023/06/assembly.jpg" alt="Raw circuit board and battery." width="1024" height="1365" class="aligncenter size-full wp-image-46201">

<p>But, once built, it does look great.  Here are my first impressions:</p>

<div style="position: relative; padding-top: 56.25%;"><iframe title="First impressions of the SQFMI Watchy" src="https://tube.tchncs.de/videos/embed/afc2384b-b10a-4257-9f2a-f831e8200f5c" allowfullscreen="" sandbox="allow-same-origin allow-scripts allow-popups" style="position: absolute; inset: 0px;" width="100%" height="100%" frameborder="0"></iframe></div>

<p>It is an fun device to play with. But the whole thing is built on a set of (very reasonable) compromises.</p>

<p>The eInk screen is a delight to look at and helps keep the battery lasting for ages. There's no backlight - but that also makes it less of a flashy distraction.</p>

<p>The eInk screen is <em>fragile</em>. Yet, bizarrely, the watch comes with <em>zero</em> protection. There is no plastic shield to keep it from getting bumped or scratched. I appreciate that might cause glare or get dust trapped in it - but I don't think the deep bezel is going to protect that screen.</p>

<p>Similarly, there's no water ingress protection. I wasn't expecting a diver's watch with rubber gaskets - but I'd be nervous about wearing this in the rain.  You can 3D print your own case, or buy a different one - but that adds to the cost.</p>

<p>There's no speaker - again, less distracting than other watches. The vibration motor is sufficiently powerful to discreetly alert you to anything important.</p>

<p>There's no touchscreen - again, saves on power and protects the screen. But the buttons are hard, loud, and just don't feel nice. Luckily WiFi can be set up by connecting to the device's own SSID. I was dreading the thought of having to enter details using those buttons!</p>

<p>It won't monitor your heart rate, sweatiness, or blood pressure - nor will it try to sell those data to perverts on the Internet. It does have a step-counter which uses an accelerometer to keep track of your movement.</p>

<p>It can't pair to your headphones for listening to music - but you can use BLE for firmware updates and WiFi for NTP.</p>

<p>You can reprogram it! But there's only 3,673,264 bytes to play with, so you can't squeeze to much in there.  Oh, and the instructions are the usual half-finished &amp; untested set of scattered files beloved by hackers.</p>

<p>There's no weird proprietary connectors needed to charge it. But it uses USB-<em>Micro</em>. So you'll have to dig out one of those old cables that you kept when the world moved over to USB-C.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2023/06/blackberry.jpg" alt="Watch with a big USB cable plugged in." width="2024" height="1518" class="aligncenter size-full wp-image-46198">

<p>Do you see what I mean? It isn't quite as spartan as the <a href="https://en.wikipedia.org/wiki/Casio_F-91W">Casio F-91W</a>, but it is missing some things you may find essential in a modern watch.</p>

<p>I'm conflicted. I love everything eInk. I like devices which are fully under my control. I don't want to wear something expensive and distracting on my wrist. I want to change the watchface to match my mood.</p>

<p>But... I don't want to wear something fragile. If I go abroad, I don't want to lug a laptop with me just to change timezone. I'm not sure I want to learn yet another programming paradigm. And, if I'm recharging something, I want it to use the same connector as every other gadget I've bought in the last few years.</p>

<p>I enjoy tinkering. But the instruction on the website are incomplete and hard to follow. I've sent a pull request to fix some of the errors I found. Eventually, after some confusion, I was able to download a face, edit the settings, and flash it.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2023/06/watchycode.jpg" alt="A watch showing the correct time. There is some blurred code on the computer screen behind it." width="2024" height="1518" class="aligncenter size-full wp-image-46204">

<p>I'm going to spend a few weeks playing with it. The Watchy is <em>crammed</em> full of possibilities. But it remains to be seen if I can fulfil them.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=46196&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2023/06/review-watchy-an-eink-watch-full-of-interesting-compromises/feed/</wfw:commentRss>
			<slash:comments>7</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Turning an eInk screen into a monochrome art gallery]]></title>
		<link>https://shkspr.mobi/blog/2021/09/turning-an-eink-screen-into-a-monochrome-art-gallery/</link>
					<comments>https://shkspr.mobi/blog/2021/09/turning-an-eink-screen-into-a-monochrome-art-gallery/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Sun, 26 Sep 2021 11:34:43 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[art]]></category>
		<category><![CDATA[eink]]></category>
		<category><![CDATA[images]]></category>
		<category><![CDATA[nook]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[tutorial]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=40394</guid>

					<description><![CDATA[Previously on Terence Eden&#039;s Blog: I turned an old eReader into an Information Screen.  This time, I&#039;m taking a different Nook, and turning it into a magic gallery.  Here&#039;s what it looks like in action:  Terence Eden is on Mastodon@edentUpcycled an old eReader into an art frame.Displays a new black &#38; white piece of art from Flickr every few minutes.Full write-up this weekend, but pretty…]]></description>
										<content:encoded><![CDATA[<p><em>Previously on Terence Eden's Blog:</em> <a href="https://shkspr.mobi/blog/2020/02/turn-an-old-ereader-into-an-information-screen-nook-str/">I turned an old eReader into an Information Screen</a>.</p>

<p>This time, I'm taking a different Nook, and turning it into a magic gallery.  Here's what it looks like in action:</p>

<blockquote class="social-embed" id="social-embed-1440788013236195335" lang="en" itemscope="" itemtype="https://schema.org/SocialMediaPosting"><header class="social-embed-header" itemprop="author" itemscope="" itemtype="https://schema.org/Person"><a href="https://twitter.com/edent" class="social-embed-user" itemprop="url"><img class="social-embed-avatar social-embed-avatar-circle" src="data:image/webp;base64,UklGRkgBAABXRUJQVlA4IDwBAACQCACdASowADAAPrVQn0ynJCKiJyto4BaJaQAIIsx4Au9dhDqVA1i1RoRTO7nbdyy03nM5FhvV62goUj37tuxqpfpPeTBZvrJ78w0qAAD+/hVyFHvYXIrMCjny0z7wqsB9/QE08xls/AQdXJFX0adG9lISsm6kV96J5FINBFXzHwfzMCr4N6r3z5/Aa/wfEoVGX3H976she3jyS8RqJv7Jw7bOxoTSPlu4gNbfXYZ9TnbdQ0MNnMObyaRQLIu556jIj03zfJrVgqRM8GPwRoWb1M9AfzFe6Mtg13uEIqrTHmiuBpH+bTVB5EEQ3uby0C//XOAPJOFv4QV8RZDPQd517Khyba8Jlr97j2kIBJD9K3mbOHSHiQDasj6Y3forATbIg4QZHxWnCeqqMkVYfUAivuL0L/68mMnagAAA" alt="" itemprop="image"><div class="social-embed-user-names"><p class="social-embed-user-names-name" itemprop="name">Terence Eden is on Mastodon</p>@edent</div></a><img class="social-embed-logo" alt="Twitter" src="data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%0Aaria-label%3D%22Twitter%22%20role%3D%22img%22%0AviewBox%3D%220%200%20512%20512%22%3E%3Cpath%0Ad%3D%22m0%200H512V512H0%22%0Afill%3D%22%23fff%22%2F%3E%3Cpath%20fill%3D%22%231d9bf0%22%20d%3D%22m458%20140q-23%2010-45%2012%2025-15%2034-43-24%2014-50%2019a79%2079%200%2000-135%2072q-101-7-163-83a80%2080%200%200024%20106q-17%200-36-10s-3%2062%2064%2079q-19%205-36%201s15%2053%2074%2055q-50%2040-117%2033a224%20224%200%2000346-200q23-16%2040-41%22%2F%3E%3C%2Fsvg%3E"></header><section class="social-embed-text" itemprop="articleBody">Upcycled an old eReader into an art frame.<br>Displays a new black &amp; white piece of art from Flickr every few minutes.<br>Full write-up this weekend, but pretty straightforward to do. <a href="https://twitter.com/edent/status/1440788013236195335/photo/1">pic.x.com/ttvrbhz3ee</a><div class="social-embed-media-grid"><a href="https://pbs.twimg.com/media/E_603EtVcAYB5NZ.jpg" class="social-embed-media-link"><img class="social-embed-media" alt="A wooden frame surrounds an eInk screen. A monochrome photo of graffiti is displayed." src="data:image/webp;base64,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"></a><a href="https://pbs.twimg.com/media/E_606roUUAM7P4W.jpg" class="social-embed-media-link"><img class="social-embed-media" alt="The same frame showing a moody photograph." src="data:image/webp;base64,UklGRvgwAABXRUJQVlA4IOwwAACwjgGdASqoAv4BPrVWokynJLItqXQaSkAWiWcJZEuUut5qnkleX6R6f+yB/74J+Tf+r0I/M/8jxf/Qv2XlX1xz9L/q3bf7/8h0MLlr+GNVn9Q3ynv/Twdf/oKc/dZN1SOG55HjAmLmhlqPGwCP3KtNF+YkKsSLwYJvFkErSVMiJmp4LoDzjGrsnIQ6JdJLrdkZ8koZE/hj6AjX5WVuplrpU7u+i+wSMhw5G+e4+I0LzMqf6X1B3IDnMHFFSvoAcuFdg/tlMhO+76at+y2xFdlOd9Etcal82SnXRf3RXiBdV5ChTcvDvvHTyakEhonS4jBkSPiohcYg9NuhfLCSUgtT8rHc0ijkT3lSWDFOGJZyISFRFltlkvTn9xOmq9xbPxnDT2/Tl2pXh57k7cI0XTNybCAPwwOPZlBROAZS+/EATsoy5yH7qG1hxM/a6dFkeOac/YRrEe7xS5MyovG6uWGBG+vvj/OnOigEw3pon8i+my5II4Lej4T36CCbrLYg6Wy84p0cLih6F2OqFfrk2Oefiih1jRLNhivaqThZUVPz57PFpCMGOSPFEOFUUmiaMiNvPNVckovJwuhCkiRqKTzjIwYgqFc7ykyjndS6hiPTI7fbjO6PpTKPRzd7NBptHP86PklEduIvQ+sbZtFk4L47Rm5BteFJId6X7TYc1nVheCq8ouCiPZbZQxDSJMSjNrgPaDdrpUsklu9n/rE36Fo5F/VvMVpi9HA5wvQNC7NZ0pxkfm8X6xd9ITijB46BIg2lz1PNBuv5tvSGgV+DpOrXzhDMWOE27WnHjqWkjuOKJWA6PFugDKfxPhPO87TO8k6ZbxAAev8WTZ0Zp6c8ZirNXfRC5SfVTwQqIZy8ls7DWd7qKh8DJGX4kHM0ki6gOjSW9EPV80JezwcijAp/npkjcwHLD0ZjgC7HYH3osSLf/4P6usmr57Xrbh1Y917q7ZWy/ZDIh6af8P1rCcopSZYG8o6NiXhEivflIwDN1A4pMmgUBcFMeHaJJevEa6t1WjhzndYX1k//GNL9hXoNVutJjYA727k8QtdoleWZyMrihIyec6SHqEZ1RzMXIbV8ycLltHQ8Nq0FaOLoEQCimT/SpwnePZ/uk1VA1V7LyXOy8xPbLt1EzI0syQFjy9Fm7fRu8yQ40jnVCLY7VJ3EtyNw0dijXYL3HJ1x8Piko/h53Qmd6nZdkp51uAepG2YJ7f9ZBZrPKrSuXEKHiUdOkfA0TexSN6GtfYs6eSXa9nK0WBGkJtynhU5SXpf9CPbaGU6tR4uVD4VxeX1IzEjnYDQQsDBnfp6Wdv5AppHUoRupc8a/pWhT05oTxH2bKERmYHhI5+9Jf/NVMhMz/Dubf29W8HL2D6p6r2pWGN/2oXOVOslD/3Fq39kDxZkky2bY9TwVUAEFKyL2ihEGGYoevO/wjD4fQRU2YZle1tomfYpjTBsvMyzuf8BsmUpFfvI3r59/7ubyF1Wyu6rliFTFWPv1NYeJ/Lq9OuDPdaR/QYWRRvP8OTYXEDFEgaCjVNVHkge23LzxRjTy8rMw+5BAC3Xu6RvbtQxT61S6NVpbTQg0U+4Meh6nZXena0QVk9s5m7tBQeti+PVBlrFR0dmJOGJ8utuvMlo5EfxM27lw9dgzTBCFcOyM86lWPI/gcSbgzkGxTRaksZJ0gWpWcBL85COcJiQp6wnSxS3U17wQngP2n3bNZDQ0x887IEsUB8tkmsGxBoiYETUIWvL0OMIBm2zZTzhquvB0SrFIvDibizgFcPVSopB3sSheQoJ+DTtgVL4iyTFd6Pw94gbFxprmqVWlYZ4qzZzYp8Yvwtl+1vYLu7QV2oi9c6h6gRqVJqdyB5/NwRgTt/aSS206FpUlT9lou8A94SyEMku3VLOVYLGBbEV4AW8UR+06n+yq5lrbJ4Dpg8E2pDXE20bkmL0kQxPH+WTWqIAFg5VvAOCRzQyC2rR4cQOWtVO1XVaUwoLbKm6ZEO8T5CW5LyuYXvNXH/w1jX4+oArn4h4I+bB8l1BPUuLdCoOfAGo7aK2VkSMelsavy5dojv9n2vwgrlVrS83BEEUA1To0vVFf14oyVj+NwkUSt1pT0FbfOFGOp+5ClnPZu/LCV2TLStc4XoDyGBoUrfR36SdnR/vQYd6/XLSoyjvwTJFbaP6W8Wxu+buGpHnWlveAs+EiJBBJQsaeeK42lFTIk1cG0J5sXEU3kJ3fSH2byvUly7YwFPtlffF+XZT1g653pM3avfb7FZzY2Nn/zMzRsyChZcRkNNr4KOc2klqyWWkZRfzfBILJ79YW2AHVuycqPkMNudnzUU2TuLWTWovFwXPCV6WyNUP8tu6chM6Cox0R88sEgxAzcZfXhZyU25VgNCbJzE1H3XgCARy358gw+CAIayPObnrJbZAwTj6ZVRqLhPqT5iFhno4nUbqI+g75XIzKRSBV9bmMQk56+O4kRLZv5pRPPop5HT2IDm9Xfs3yGPHbBqq6KtPGAC18AOIhz5JUjRkYItmEGW3LQB5W4e4MPFl8reWaun3z1QXwhWzjTHTC5hMMRxvKBBWx2T86Ob0Mz13MYOOvaqcV3Ce5K15QNFnsifXJkzyqRBju2B4jDcXh1EscryIqkmmBqcgHZUbcj79pjcN4pjIO0HLiAiIJaxvqKMIwfI6nV+g8bDmVetZDiPdY4mkVoLmSzEdvH8uMdSHEKHJHJvD8RrggsRtb79qTO79MvFvpeSM5Fldyd4RJgxbxj+thiRWSdfC8g8VxIbsKhTKi1MFfITyOD1IF5bub0GDFC0twoQjzmXowQab3Pq8ht5KhqjXa93y+yl1A3+hfr2B6HcZqMNiT2gvceE1vyGs0o+W6cAE5Rx95UI96neuToIrCpkqnXHods74OEFzlXbiI4Yal46lvWIvqm1KlaUd4CaWBhmUyJoVdKbTho6PJ+xhCa3MDGnBlJ4/hMueABuadLOpvk0dUDdGRrPVMutlFUmoL9/ivURoOpiMgmCCbXWX2Ly9ohvPAOPi5P3GX19d6CNLHdMtWupjIaKsVXZj0FK+2raR9cmYEtUcGZHGsHbF79r3CeOQenUD5WKqR7/1FjXaDpqYPay4ZbJsRqzQDvzTBdrrucATdITjHstKuHmZAwg1RNbIB9+hgLph7iOIUqtmUVT/2VodgvAU9bLt3Jc273lo7fUS8mwPpXEIaZdZkof82Ck8MdnqG/ImsCWmfNNEUqshZd62LqLNqexiwGSx3qisQQCdIM72PY4mx1PyWKJg34XJ5aphbx9kPiWcxHR6ORJPq3WHSrCuQUBKC1qhaAkH9HH4StFhaLV8TwCrRwjE1w0BtBoKhkQwvsRP+ysMOU2nSghW8ZdhH0WtNUL4IBAi9F10GOHU/R4YUv2Cmv2o69SQqy0GLFAWfVMtZ7BxAfwr87wjBBGo6UGrJany1YyOAhGJ+9TNPHxKuou5tIjGUTUzyJp/StGpjDaAajFNSOvvO/e5ScCb0OoVA74rJhiHt1dvQpVCLueMPX6PmMRYKIQIQ0vQGnJNBY8Yesx/jnpmGjC1859zMDMncHeV2VtMb+r5nhAMpGgErsr7UuSGrPuHeBtDKwxFje4DIGiU8sfVMKLM0Ea12nSTpqiH5c8WuZ3wEKVguBcmVLH3youApHEQMpeg1yHxOgfYl3V7/CPBWjPpyxf+g2ZDu/GloCR6AyReJVfnoFZmA8AgN2OF55afN6FgKaPCfveyYag6ySovVbGrGoWLWxg1ivMeyGsc5ATZ5XYZpkHlsktlrxboDP9SoisdDH0L+EN7+ilUA38z/lrkuFR+aw9d2fzXNtCvGhnr31wZvTAvL0EJTzpmKyQ8PDz98kyDi6AO40+PluUEPgPA0UsqTcQ8oCIMNooCBbmQsRji3ZfrbUWS8xaSs6SE66dSbSLvclxYU9vXFDC+MNRnQRhCUYnF3SoWtEn0RVrhi/2y4bz/3UwMcmIO4m9Una/dVvDopUhZWqUi1W3gdGv2S77OWrLU2RN8gTxkaxLoiFW0ju1cDX7bkBIqnmsrkb0apn7lBIPX4NykW6hQUXvQaS8/h7YzBAmg9zakZ+SB6BuC2AnDkaQr6C3k2m/QvkgRvxDiJjUcYTCCCAc3f+NNTpBZU6wnnotAmRu3T4twa8cWQIXMuFKzhn4LqYwbk5XlwJ375S0UIpr6yHmqVMmsZdfBRm+x3Y1mOqbA4KT+/gM2z1AMOBEw9fQmUgYVr7Q4kcSR5xgi6dYRBcx6BLpBixbzIo9MrEgAA/uk21uHq4TVqsRwDY1zQgTNmtB8YAFtbXqJ/WYdiOuoTZGbPSvEnWIftGsyxKcOo3AxVb8j0gyhMfhYm8RVz1CO8VvOaX8vzXNiX1J+60kA+IFukQOG9tkpoQOSVfW2nHNOQKZeaWnYHDQZr8fiGRmFTjGtZARGvYkSTr9woHeKaeuMPUDzKuU9+5rO8QfyXT8Nf4arWEjHz2Kt1NJC7olZLxgeuEY22izFmF8KsHD5F9JCP1AXTF5R9ZxNNFhCgbgCXNsdSpAnngSORohvtMKmiLhOEJ/U/FfW3vwFym1e1q3JXXGaHT23bRa79s/+/FJt62kkNqrdZerVdb8gD528rMzKLtaNsMlAbMmQEimsvrAPuIKkWyDB61CcEje6djODaakD0POi0OeI3mrLHYQM5QNNTViS+pp/pfFRnn4mpMQnhc+2RPDP/H/KBJQ6H6v1iU60WpNzmvfY14O1GHUM9tJ4+F6k5KV6WaVa76zescguR4clujZlq8uaCmAoJ/nVErZ2YcXqUUX+CxvKkUxuYA5e+HTyT2hP5QXf7c8RHe7ZUIkRKyyaf5RAXx/M8LBB3VKWa3vhvxOXCnvAWKg8QXcnOa5wizl1g8SE3LPib9uiORotnfe1Ok+pLBf/iDVq2E2jUpGx65GnQCR+EPxNqR3NYUrUBmK6yxUm4uda/vb/QdJrhjG7TcSB5O8wZ19ebHNV0+4KQjqHfl/A+aqXSVgWTCOWmnMilTMmsiqUd/+7xrDCS5RCzIXire1IY8jubdgEalP7W/ADaKHCN9NMPsZBltuht2BWl1okWTIokNQzwe8D0kHGYUkBhQv2yUw4fprdvWoqaUY8eRCbLMbHW64SO5HPiVyH/kH1Ao2dymnjEq9WboOrvMXsiMI1ZKXNSyxzAwBqNQl0INHUtQItSL8PoPrSrhRbsYfIeRxNGF8e1YAVbsjcrMdCX1EIsEFlUsE+lZkCLe2iq8IZ3cxpuSdOrdC5qSt80NgwzQb9bY2K6uwpCfp4Uf7Vgyai/K07qYc3cUQxnnRRML2gmua1zkI055KMXywn6TRA4g3xiSkSed+vh7CyI200gZ5jVNC6Ui/Ozoh3w3Zyn6jouBYbaoXcfENR0mjdrqMpIaoLbw+B8IVGq6jWxIRApflBFwX6CSxS4pSNDEOjeQb/stL8X3zrwrdHFoSaAlHsFL7GkwymPsWWTVpC7BbdIuiEzepCjAQmkwRPkQTdfWWxrDYIJezK8mJ224qyuTtHbH2av0scrN+j+MY+GDXZxc+azFmxG6EycwQjkaJ0yx2Mnc+LDOOBtZPKYtMDx+fbQoTN5fJ0+1ZdMw+X76ydj+s8IZDd13wAe+6l2Z4HhqIoz/COy7CmnrBa5pj5/ox72hq3xJhO6621oGfRuGJncIbrjjkFbbkeEDLDnTVzMOgEG7lK5yjha+TntXyGu7MVIeT95X/PIwaduso5DneIa4m4bIJmGNH6cwvw4uqjtGGDA2E/N+bZdUvLXaK4QA0ROweQx8rRxo+6Akqxi/hAv69GGgt0xrJvn9H66KsvCPlbk9gLHYtDHV228pr5l/e1mX3cDLKD9Xav4BT2U12zl1YDCdYCYqRYpfRIPp4LFE8hj8Ws/av/5Dax4ovyyG8vwnQ+Mos0eABgjMaP0oWN8MGaBszsjRgkTQD7Y6hqh+VNq56aDwG+mo/OD83NwmcN8VAxd6e+dtDZRarvOhmODKsjD1oyKoUHGSy+4cvGapFPCKzOKNXSl2XfhqhbcXFWtDwdCV9/nQQF1VSdupagjKJLx+QzpJYAJLOKKAXI6hrnvLVcYLcCKa0RCqdSvAr6lLhtOpijlhsXSAa+NdY1+mLQ/0icT7pXK7kyh4VJl5CkYzmbQ8N6+uWzAEsIrOc1+US70GpqoLF21liupSQZqHjHU016payzw7m8FtXPrkL/K96DEUbUDPSSwgbwGuDNcVjpCtVOaGFDhPz24XO23jCQ9YI6sn1H0OwdVnA3ggYf2pa5nNNuVbFefaPGh/TDsj3sXQhQt0fXF8pU3mCyBUEyEKYGAL9wF0jaUOb7irEcdxM0AD45eMu0sknWOH0m5gp191uX2MsOu94e40UpTcZWcucemfz1YXHoG36v1BNPmvV5q+3RU8JccxpRUWp/rYMYSBqmo3J6QtzVUDZ0lJ9/Yl8NARgbDGNaEEUgsW6k94JjetdmFF6RnoUbnDzBdDqUk2qfcnSeteK3S8wz3o1Ac3OELu+cOZJDn+LhyS4V2FoS8m/p+AA3vb3AAyf1Vwl5Bx+XnD0MCnfqAQwjFbtdceuFXHTb+CBPtPsZ+erPKboVwCcuh9sFKNFMWnbQ87eDsfYhI6Y2wdHEhFOXdRTS0Il1PjIC6hStJb6HAHlUVu51Hy/8E4aU+dUDYq1kgQXKA+YAtFVxnddWAYU3fPFpbJH8gqXPP6mXaaKO8Kgvd1f6KLAPAeQBGdt8Vdylc6VqbcgE31RQego6mWmgFMJvnK9NeZOpjksM8BrXaqS3tYoZWV6f/2R840MVbUMHIaqKDIoXPfDhNFBRNgs6mSaKegvtVxGOi9lOPPt+d70e/YJJbwlmDW+2rF0b937dRch/ZGf/VlBnCOw5dWF+B4R59NAM/Ua1zIVxGg+0XJz3KMHyMKUgto4kEviaw87B7H8JKCBkdjtKQUqiQoJQVbaYe+dCjLe3KzB13C/dcLFupNGF7gjAPVA3SGodCNMEHKYY3wJnF1Q+NiY/Qks+L6sb1GB77P2/zD20nD8/wFdL8NYBiMERqGgCzUTCmOTn2+CB+jkAfyF2kgYV+DNydfL6i1n/xFvw2e8+T/PboHef57kjNWyX09Z75BKfODRIcHGGFvt0VDCXBv2o6UzzkXWfdgtYdkDBYupkYJMn7+IVffawprHoXPgl+P2GHeKP5Rgr6fAYU26w5hQoap2o5RTuddHwVAEsMU0ZIBTBopZSYv56/s2a9qbheGBHh22gTVJzJmpUkDIOGv19CRpUiJRgga4MBAItL6H8Pm01LfjB+x0Ch6ZAPo71mR8c6ddm5CXyYh1aKQ4qh1UzFKDnuZ2QEVMo8fv0//33p6p0r26YWHLFEgWNw4++6tbq+oR4DpMSA7ml8vVKSyB+1VbDs3fQPpFKMHjhaOtKnMtMYN+xXrgcz9Iqce2LEOqdZiVNxFbbpkq8tg0Cl+d6EKJfcqwNNlGzgUiq9C1fge7BQ593X25jomrH2qhVmB1ECxczqdKVRZV88WaTi0BfftxX3CYiuWZatSGDIwZBS1zAbeOOOu3mK00NDwJhrzQ2NJz475KfuoyXvWOdXubbbGwgTk9PZCLN7AxInef90hdSJt0G/58bzc5nsrcc+mFAX+p1WAAv5OVvOBGgzD2OXkOmscMF/sTEkuzzowvKc/UT5b3OkP+gnadExuQcPokET0w0UGAa4tY+3QZywPue5k5Ay3OHZ6zXwZ4AJM0Sscz3odZEo0o8EQ+IjEx4algYzBsYj7Tp+0vTO10pdbfPeCf6vD0XZqqE4S/Ya/TntgBw3ZUpXvCz1DFL8LYivl4cI22YsQO+asqprKFBE3hIP2bB2lyFxpk8d0xiRuYDrw6sf5YDkwrgced2FxP9VDykj2VJT9lE9gX8X7b+D5iM99NIau9Xqa18UDpzlKXiQinkMXjoMhXhkq0q014r5K6KRLrjS1tzfsCVbEYDnCeVdwGLwIs36Kx2z9U+uRKI9SGxZ9R8XnEVGTybZyN6wc+6QQ7NUqybZrZbzyGtL9q+Z7u5ksDhUv9TAeJAfNoiXhv7jnK7t4TyIUcEUmrXOJfZLA3Ofq331K271w1QxS0V6Ovflp+XTA6X5x3OvZAwSrAUxPfKlesslXLEwwJ7IA3qKBYWF5Urf7E7o2g/LQSqKWhx+CNLa59ADOAUfJ2LvUb7PQxovfBDQyTSW+5jfvjhrSDSKB62mVJR38YhgeZ/USGv+IMJolPPg4kh7NFxiyXkwxlNlPl9qsgW1uwaSzQMvT0dtJzJrQ748TknEnuSS/zZyNBPQ9GnkQAHA52TB6M8mAyYkS7l+ewDd5jGAr5jukvdKUR5xxFjbhEuToRv707PXF4R41ZAJOSEH8pe2yAZUaqZ8cHiiIu2mox+vu7ZpB24JE4+U9OTUHYCnbPw9fuB+s+ZMxM9VQIkTvo9GW/426PTNp5w5PuG2NO3sW/lmAIwUF8X5HnJGz7Hixdq4Uu0Kqpg8Bc542McEUi8+m01GG0+a2XyaNukQnC6aRbdduTFQERXhKXR/5lYWmc6xrVYBXi/cvm3QmKWHDDLMVwyGq88Qn89W/ymzUXYTJNqy3+NG7AAR5ie9IV2Jw8srP2zmM1ykx5Lb0ZB1kWzc9UERIaBU/QjdgOQx/fatyWM7STCW4mwOk6fqRVscHL6rpOuvO3W9Oy8jUgUKs78s8nRucKRNRbFhZaZ5xgjRbut5EWCcWLyWJKffWF3MQ0YAVB/MNLWypS67iuUh5eUmN186RSw6L+TfoKS4W4u9Bm72Af36BLWgmW+bKbNLPG211Mm95mT5MdNR8LsbSuv/NoM7TQjha5bwXugXz5TgpHm7mkQHNwp7ZdwoSLP8sR4UFvq8Bkrq6HbkWiigZWWe421w7tFm+avQuThkaDFsJ8vliNiC/UqAiX1K/o2+hRJ4yObw7Sgp+MT+cfmOH2eT3xFyzFUrBKgJEVRc0T0qZ1AH0PuOV4fgn2kvaBCLcOlPWcxdCxt3YHCtYtGQpIkVkHUQFKLl16xpPw95GPKMrxEXOgAbNQJPtgwozPK87e10YpPetZTVS4Y4/W5dBTPHnevfMZF9dXakhWLI82gbIdNG5HQhZeeoZgUiTiigFoaFGJQLMxfUWNBK3+MVH9O8hHodTWODmOK6VKIvg4nbliVtldfXoBrhLkAGeZph7amiPhuJ12DAhHyT+7kmQSsYvHoEWcZ7PPWBBACxk2sbydtT2hPjfI57Fgws5bc6Xbl+9WwdojJPm3rWUrtrRamo3dgYS2RsZy8y1qLGzyb1jJO4XEJcp/agb5hctnxdTpL48pdNUaS6/zy6k+E7oj78zx+wRaXpSC1MMOwooHfLP8e2NB2R3EpxIPy2nNDm+yoPXoKwbnd38XV+g6em7BL9VZecrZi/lXWbIFxRmN1/XSFPmCzRgEQ+w6Aqj/FAu7PY+p9y1dt4HmaWcaEPg5/na0Iq+387IstS8HTmKap9JRtSdabBYAFZmERDJ80ikzCAVpEQA0HeMOYR4TBjLiMUP3alZEOoN4Jy+98W70Dd9aDlt/VmyE1UYPahG4FjDd9B6PZfagD3YovfycBLjNvqV9b7QHdKiIrofG9Z8xVLonht+sUYdfHX2w+3TvC3HdDAxQzeK3iNRx8MsoNWCgkLODwB79Zbn2i5cPohvdwCyLFP2i/o8JD+5vIiagJ+V2DxoIUJlack9j/PqLiSFHIE18tCr3SsT2aHTWBQG2nR9I3zvB/HN9KLfTDrzZ321zHNzcP/4VIwhxWZNPgSUlFFR8nj8vQLAO9wMfjSSC7zKF9f229gOQfzujkSGVWfe4MSCiwN6XB3gcbxYhtDTFzLWT8Bmsl9jU5gXD4b/X8lV++tUQMGbt3/WaynvrOqLAv9sPdBqAEzT6pZ+xct6WWYxdow0MhjzTLUdEq3QAOJnDTLpgLOvQx/YxlBGQC2/dPx9BafGuUwTKW6MVwaiPnyh+e8fFEl4yM7e15IbRehgGmxfhQ6SPpPQnOrkPqzN2HnHFMJZs6EgHiohIGuuSFdr86BVrTWspyQ39PyLpePc1l4kKsb3wFC5mIXlsoc5P0Uaq5es0JfzGG9PiqMW/mXhdOTqi1SEFcfir2/0D0Y/cvHPn0b04ghjTNOa1W/bkFP6s/Ql+hITt9ezYtUbo3PbJXxlPgt10f+Ac9aeKy79+GvVhXxjDiXornnJaiq0MTmIFOkPwsn3XEw1pEXfx0o8gW5ghZvyeo0pIetSqsdhGUjy8ioPmZ2JPAGUMCM4A6YjWZD3wUgaZD76uMQYvZfUrSFm+17TR2vUeLZjS2sxBA45EwGCkSiT01M6Sy1PeMFYn63rup6Z5eGpjtoqwD+Xb1zMrd66d9GVFOZW49SLu1RwPBwYCkhgFAOS/JmzWFxXlrk6OP3PmT2mIp6Rr3jtbsFci9konFriDix4vKZWocOjzQ3ugAZwkdz+RzaHeCuSgdy9fiwH+7iqIRxwwCztfvhAuQByjPk/7oGVGW/XXqW+zBLVtL2cgAMjWNO+vcZ4DNzqH6JH1MSNgfnMl24rABDe2d56L/vkWsAJY9T5mLhYDJi9uLoK6mEZ9ux25IytVbDcfu+IwqrUaD+7l5uqSjU7AvsGkDx5k6KxQM1aTRfEXltyiRFe2cyCEEgxYDpNN9V08HUn/FuqnM0i7iPgiBdJ11LjtzCdcvUAM9sqqzgaJg2Jo8oAYfECcx9DrTqLONHJf0hVgH0eeE1ryYE3Wsxe0p4/K+pekujETHhVlrPtvZEX9kFvQdwPoMk1uM6XHFNWaD8D/nSXFsSfySFuQMRPpMJaB7PjyxCWdkobEEPCIOvWMnt+UHN/P3MbZTIYi90qEDarte7IC0Ubf+hPAVYFVrmD1MzF9/atS4UPXFEvuAKqFJM8o8nvhkdyRz0nV5tyCu+XfXtVjUqfnf1+w619rOcJdZErMKAtItszsZ2xRA6JdsTY3UQYKCKYjmdeQizxARXl+qeblMzd0ErvsYS5Evl9GillpBbzhJxsVx+QVIpkYgDwH5PLvQT3RKneHOiQ/7eTIw5rfGBMIlgPwGD6NEwL2GD/bXnfvtKekqNkm1YKLBmlRPnNyv3epmVhEaHJaugSRit9wNNT7/PlCRScbKEP4psgc0FhpYTNVey2cYLmaxW0tGHeFnbZB1q7QjVwwxoFEODjHy+8CsH36A3yhC7S8LR3m6kJ6ls64HGL2y6nYSkRF8kxmloIXkFOi2Vs65fvYcaTKv1OKYRY8AInI/meLjf9V2GWtRGoWalSVAkH6/+4KaAOUTLhW+2i/7Qp8rC5BYilTdRSKGyP9gy6EPno6YDCcbUaQc3eG8GEW/jm7spZjObuH855FpwL/5CjAGnIrcglBQdMweNRU/UCDwI/KAe7sQvwURws2JAC+UmPPUp8ulJrdPH8IDuN5/uOWtmeDwwwUSHvSu16FEENwqP4lMu5MgYcFtNAqrQj8BMeE8XF29a2Xm7I8ThN1HVrDqSkvotQ/SIjSZVqdwyqGtKj1AVoCVmmYCBD1PMyEGyduEoJvxzVmxVMw8843yQNw7Qtd1suBe7x5xsn7w65sSkvpXtStNM4X0jg1NuaCIVAY9L0Eao6NjXz6q62014cu1p6Tyb6UJr2N/i0IEKN8JtW0vZG8LIVKzbYBkLwdZuDKbYQbP4DFcdoaa73SgkHkKKhfiddYmLfLYbm50RNhDEQTLDkyBA6y2lV5FaGCa/X+FnRdLp8AVAhEBwgQmgTKSPkrZLodVrEOeN6evZrn1eOT/HbW8Sv/oeifOeZd3/iFzXEmxoi0PuePp1BJaFZBe+zEs21mlGLtuFXrPhdeZxXM0ZQvBuERaSx23oE9pUArjzelNufdFRDL7+yzkCRrWYpa5ECYbwbRYud89duEa91M0nnyqnJ0w+r57WDknUpqebR/FsNGTAKd3re9qQrMsgECZq3fvvWN7hEky4bu3TpOuj1HZMd6R6MqywIMd5cT2XnGGxOt9DQQefWbIc8UdzKA/IueGHqIiULMu7L1IPEacS+MlRS18d2V2zFJQz1cQdOVZBpynje97kz8OTddR0OgXSJb+m2kzUhIBBje70CmZNBHV9sbCuEmny7Zjdo0sWFZhceY7ftn5M5c/O4Q5A9Wz0pwXIKTX6nyCqQ7v9FfPxgackm1WIUWbwBL6adoWAbUWWcHFxoQOqqIv8fue+lcsQ48ufypW6o3WsdZIQ9FLhlyNPyQTKlD0f+zXL/JGuYcJZ2G1Eus3FnSvM0bUm7x/a4SEjjZO8gc2znaa8KidyqOK0pkjo2i16wX7eHtyWMvmYpXgDMtssxNvtbRPoT+2U2ue/9CFh33CW+fHTuXiG3AkBoLtluM4d3Bcv4rlzr4bkSikua5Vt8wcNcw9lLaTBg0R1jehFD1lye4nfOibc8zHS6BctoMJS18NisBNrYuKIT5jqeQ3ZvvTIYrLD63x4DtldaOrQWIZuJ378wxNMJLbtP5zWhD4PmJocaMAU+CqkfcPVf861iuYTPjKkIJRZ6fPlNU3b93z9TjnSx0+F7aLQMeLXbQ2YGKuwrkDA9zy114yXg5tk+M5RCdIVM7p/h9kJDiJg8kGMmFT1piwznNES74rRYyz0udbgBg2iEkLXLnbeNjAKXdMeB1VRQgTUeGHBlfuBlYo2d0nghmtnZCDMkzxH1Lk24R0pHLLj/KV9aUZw0GXs0IWz6tXEOtTsQV+lAHpoXfGjUYDbRi+exFK0pUn7p3kiTGWvsobQMErCqIYhClwwvSswuUAlrJArUhXqVjlAbEervgaj6p2g70gVBlH8/rhj7vyR39I/Q3zO65eY9Erq1Z93Gp6YsnVYekoMEM19klTqfgicf8KSl5bLIrBPBNYbFDllSM/KXziw/zir16DyaYdK0KahrChFJzr+E+Yh6WO76BoM84oB1n5YgCH2mVEBjeQbre7BwG0rLTCSYAeqFodVrORePh1NkArWYXzHn2PDtvGrpgl1anz40o6EHSOCa7mXf30mpMDu8HIkU+F3Oj3+HpYlXMjPFxTZTVuvooQpXK9oTBOTOBDJxl+0TWPVX3iWt7w9XejRmHLDh6g+ZAmBreUxDVboHEV9eeQKkPycO5VBftJ00BwKHt3zyK3NxMonVeispmw7FG9HaT1fyK0W8c6I0weR+a8bZYnlKMOhrminxoeJo50bA813WYZwsQKEMzU19VS1Qbh5Iwxkkj1CV8V0JEJGYIuDi9LvPcEhdMNOjfbvW5Wu5JiQf9zZkQuxn+Qmoj2gEiENNIRscskjKSyV7v0ocJUiYLtUjr6RPFWlAYfggxZSBKijfBIk710jqis4ebiiRbSmr3Dg9VnIEW+2+X6ZKxxdKSIEFC433PwGhf+eQj31/Q6DJweh1OE/x4v9RKMgmtS4U/AlTjFpErX+vB9NwEtL4+/86wkvQwKD1JNVY/wRCeGylDSc1iEKYkgJ+m9yEYWY9t+us9iySfIo3jR4lTPEwKUsW/Fud80YUlnRk7Uk6cgHMjy+ASMuV6rmMBFmeL8Qhk8TGUxLFQp6J3i47BTLRSUSVDDAnqRdu1A/xe/F3CT29HvbdP7H2ar/LE35WHTDIlu9j7xT4145ldhsrTQvQ1zXP4mQzyTk1ESmen9HJUeRBi9FCxRdLCoYV0AL4inpC3pG8lOtMFEhJy90MoRb+wtvOhjYxAkjRphO5YFbqFNb/fq11gZKT4iRNjquduKAGPrklaVr3p/RhCjKHQDseg7+1T0k5pKlBtKKBPlGtCqGGl6GwYBr1w1E3r5E/nYyxl3TBaLNHguUBJy4ZC4/BlSIDmGqo6PQGezr0gPm0jovT1LVySoGK13UBvCzkRr+XT/XiAhBrs3I1GWA1ccXA/m4JthgkOMcCZGwuFViC0wTDO/Gk3DaIcskyIatOKIGAyQRwXGk3ouBwB0FcXo0e+nJRfilEWx51voAEQPa0skKxDRsgJ9dPA7bET9xyO5yRqORfi6LW/7OOGxoxv4b3t/gUoFK3rac5KfOgAM3O89CFWPpnK2r1qzDuRig304HIlJpgXF+VUZmILgo6gK8+RLC+taAufWWK2A79H4DJBE4TR2iCZIJNbloflxU7lumSNlnPISgVBs1EdHTR2jxZ2jIiBE7yPPS900xgjjbycoQsqlmE9NjMsBbcPLxu4RX4Y1ma68qR6dX+UbJPz2E8URFal1QhcqYqFM37lUxiovm6y3uztyXOjg/8D6fim6tiyaYa48nmRUzqPTUIrFJzu2ccM+x1tupXYxsUq+wR81MN31/ZrUUjgWHQ3DCSLSDJP8ByFJVSAd0M4yMVLpv0JPh+nkIfvgLFDJ+TGBD6DdVXDPOn2K6oey1BTOwp4wEzYDSeANngmLmDAgAcTDh266zLr3WfnjTWXXAbyJlu+zOCxTHmuxjP3ZwZ/ZL5qW0rvXVKmF+l3AtvLkhvsIJJaFCWmgfg9fMrnPbdpwrkS3mZqKrePQ0TxUYMDAHI6vYn7lDPwQgWGnjRrhOHomKt79LGfgW0o+TnsHLwzon+BFVZ+D5G4JFHkXsmyxTF+3zNYxONsxsJy276tu3cH8geVB4VkqNr9L0Hk5HuThGP7do8U9pEFuhwnoLgQStCooaT7l1pmEFLt5B8T/HEnz+q6PexIKokEZ2O0pthz56PoIEzhBWq7dNschBkZTsSJlqTnW10asAHAMFe74il82DAMGIDVrHV6IBoxRqwk5QH6UrL2EJqtLsAiVeREx4Awo28uBJCvllmEQI4c4x2Z90rgnPXd8NKOPbw9FAFF8jIC1TCFQGNikhiuiCi8pUBD6XpB7zYBc1sRhGODt/qxBgCL2Q9zXMINrxA/es0IY+Pv23RAV2hie+ql+LZFy2sfgPdQ0DidqjLpbvdf6f8kYd2vsm6cIeY26nVjduDUppdrAL3bcp4gAkdDb1KKd6QnRot+e+1aW41LHv/jn6jwgfYc3QJ9Oh6D7O1dEwTYPxC2BqGw7UNrdRlG02pEEcOjl4ME36a0Q6/nV6Ay9OzcLfgQppxUwgCnmLpF3LzGTmIKGAeESA0eATxeNx8/rTxcf/RMxW2/2FGhGl+FeC809YZgUBOG0TuEuQfRhsXawsUDNPGwVsAZ7groVrEtpPebAMIVpno46sy87XnPRYk0SgKedjW1KgJ0eOSNhfkXgu0Ce9T0SFyaeOjvsIGD9IxJcV/A8mTzq6I4B02C0eRUWSejfnWXb0k7NNqoWfFQ2IqOln9h4xCtDe7ez1gSPHOf3hoEUFCwa6gwl/7577IhQ8daXH3iKuY9MRpBxDY2VT+D6jNtzIcH87tpr1IwXfH7MSjKwy0/n9eo6PMGOryv49UuT+WiBfOMBfNpIGILll0YwzNI3CrPk0LYwdraRRfJTK3NERpTFpgmy2CeWEmOXcSwhSlB12sEeT2AeeoVTusHp1H/Wv/DjKtATXZwXiWMS2GF2DUgC54yBye9OxCE7D4d1V+cSPi+VODbAsRAeY00sCT+UCXkIr0CBSup567V6rs/TGAhrX/UIBWxV9v55mQUuzuA19ikE0bAsdzf3lJRoIqlXgKS3yoomW17/82+K4RMRnT+IQcwsbidBZrMZnrH49t1d46eIigXLg9I55OR7YpUXmvQO6VDq59widwazsUV8+fEQjgYcjnQL4CTzCFug+0ceUWqnljhb5A6bpY+3lVYDQjbOlEp8e0HhamUPaMvDmy5wnM59+d1X/pOMnzq6+hBFWJ8eNJkb/helBDQj0hFVD5N84NQk/IxyCPH+PL7/Xzk80XV6FcIPFcW24yFDkVjJMveSHD1CMZrDWNqQaN32RdhtsEi7x85RgsGysu1wYHhnvj8t6/QKbjZXPmWLRHFOrnoPNdP/X8+dI4tjnh5tj/gQcVc1fnlgJc74APAwuiaYKPwlkb4icTtrW8+LWgMy5xsau1qnnJ23/PoxglBWtSNeIVReyg+rQwKgWNo09tGzLvqhSu05nSpu/xHwlM1h7T3QOr0ak0jxXcRQcmMs2MUGoLVhss6SjXPhiZAArDGbDv1/DsDbgBSJGbXgkCgl1np1sk13QaBQI/Hat6Lt5AcsdNPuM5dU/ttJsth92ZESRR1eiIqw/gHxk8FxiNkMIplH3wcAgGAq5QtQNnQj+IjDKfArpBDbn0/rHsoBbxVoNJsexMOQaFYNCDEWVgJvQOFIUelKlyoyrx3wzvmeYksS9RTTqyMtsjpLOwCF4dUYVLxzegLsjpjoG4N9RahtYvKR9VmyckSYHthPEPy4FpnY7pT1tjiTf/wWZH1FBOILniLDo+88054tBR5YtcUEtKNAxZEnVVbIfilihZ264NkXyaKMRdpZQTLD9FrkWBuWFUWgZGGs4kMg17HFzDAUwoSLGQFhevuTCarlHVNZ1RZ797ZNivm8nQACy6842iL6/vN4dImQTZy9KQ0yd2TFjXtRiMUugXxo/A/MACEdtfpupZwLv6BbTjkh7D595Djvs3Hvxm0Uvo0qfzLwBDmRLTEzeAupAGe68j50wG/R7jMD3nNM8wmm1DSDj0ffgrqUqCJ6LlHuNVAdKksMwPBSKCnhfktnjaIHEGg2uEZ7+f5dJJ0bxE1Ekv3OTijwFfBq0XsAa722xhsh78o8+itMZ5bNGa0Zgs0iautWua42idx8rjzVz5uIBsXpbZMWTOcyqG93tdbQ/xGC2OsQB59BgAA=="></a><a href="https://pbs.twimg.com/media/E_60-SmVUAgeFJB.jpg" class="social-embed-media-link"><img class="social-embed-media" alt="The same frame displays a black and white drawing." src="data:image/webp;base64,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"></a></div></section><hr class="social-embed-hr"><footer class="social-embed-footer"><a href="https://twitter.com/edent/status/1440788013236195335"><span aria-label="137 likes" class="social-embed-meta">❤️ 137</span><span aria-label="14 replies" class="social-embed-meta">💬 14</span><span aria-label="0 reposts" class="social-embed-meta">🔁 0</span><time datetime="2021-09-22T21:20:05.000Z" itemprop="datePublished">21:20 - Wed 22 September 2021</time></a></footer></blockquote>

<h2 id="video"><a href="https://shkspr.mobi/blog/2021/09/turning-an-eink-screen-into-a-monochrome-art-gallery/#video">Video</a></h2>

<p>With the front light off:</p>

<p></p><div style="width: 620px;" class="wp-video"><video class="wp-video-shortcode" id="video-40394-5" width="620" height="349" preload="metadata" controls="controls"><source type="video/mp4" src="https://shkspr.mobi/blog/wp-content/uploads/2021/09/offweb.mp4?_=5"><a href="https://shkspr.mobi/blog/wp-content/uploads/2021/09/offweb.mp4">https://shkspr.mobi/blog/wp-content/uploads/2021/09/offweb.mp4</a></video></div><p></p>

<p>With the front light on:</p>

<p></p><div style="width: 620px;" class="wp-video"><video class="wp-video-shortcode" id="video-40394-6" width="620" height="349" preload="metadata" controls="controls"><source type="video/mp4" src="https://shkspr.mobi/blog/wp-content/uploads/2021/09/onweb.mp4?_=6"><a href="https://shkspr.mobi/blog/wp-content/uploads/2021/09/onweb.mp4">https://shkspr.mobi/blog/wp-content/uploads/2021/09/onweb.mp4</a></video></div><p></p>

<h2 id="how-it-works"><a href="https://shkspr.mobi/blog/2021/09/turning-an-eink-screen-into-a-monochrome-art-gallery/#how-it-works">How it works</a></h2>

<p>Every few minutes, it finds a black and white artistic image from Flickr and displays it. Simple!</p>

<h2 id="inspiration"><a href="https://shkspr.mobi/blog/2021/09/turning-an-eink-screen-into-a-monochrome-art-gallery/#inspiration">Inspiration</a></h2>

<p><a href="https://debugger.medium.com/how-to-build-a-very-slow-movie-player-in-2020-c5745052e4e4">Ambient home cinema by Tom Whitwell</a></p>

<h2 id="build"><a href="https://shkspr.mobi/blog/2021/09/turning-an-eink-screen-into-a-monochrome-art-gallery/#build">Build</a></h2>

<p>I've previously <a href="https://shkspr.mobi/blog/2015/09/replacing-the-battery-on-a-barnes-noble-eink-nook/">replaced the battery on an eInk Nook</a>, so I know how <a href="https://www.ifixit.com/Teardown/Nook+Simple+Touch+with+GlowLight+Teardown/9301">easy they are to disassemble</a>. But for this I wanted to keep the plastic frame on, so that I'd be able to attach a more æsthetically pleasing wooden picture frame.</p>

<p>Finding a picture frame of the right size was a little tricky. The physical dimension of the unit are ~170mm x ~140mm. But the screen is only ~125mm x ~93mm .</p>

<p>I used <a href="https://www.eframe.co.uk/">eFrame</a> - they have a really handy website for custom sized frames and inserts. I ordered a mount for an 135mm x 103mm picture (they cut them slightly smaller but I didn't want any overhang) with 20mm top and bottom borders, and 35mm left and right borders. That gave me enough space to fit the Nook. But, as long as the aperture lets you see the eInk, and masks off the plastic frame, you should be OK.</p>

<p>I was also able to buy a frame without a glass front. As this is my first attempt, I went for simple and cheap wood - rather than something more ornate and artistic.  Total cost including shipping was £25.</p>

<h3 id="attaching-the-frame"><a href="https://shkspr.mobi/blog/2021/09/turning-an-eink-screen-into-a-monochrome-art-gallery/#attaching-the-frame">Attaching the frame</a></h3>

<p>It is useful to be able to get to the main "N" button - and there needs to be a gap for the charging cable. I thought about cutting out a little bit of the frame but, in the end, it was easier to attach the Nook to the frame using velcro and blu-tak. Because of the weight of the Nook, I used some sturdy hooks for the wall mount.</p>

<h2 id="power"><a href="https://shkspr.mobi/blog/2021/09/turning-an-eink-screen-into-a-monochrome-art-gallery/#power">Power</a></h2>

<p>There wasn't enough room in the frame for a normal USB cable, so I used a <a href="https://amzn.to/3CD6c7K">right-angled micro-USB cable</a>.  With the page refreshing every 5 minutes between 0600-2300, it got about 3 days of battery life - less if it used the Glow-Light. So a permanent wired connection seemed sensible.</p>

<h2 id="background"><a href="https://shkspr.mobi/blog/2021/09/turning-an-eink-screen-into-a-monochrome-art-gallery/#background">Background</a></h2>

<p>On the surface this seems quite simple - get a bunch of images and display them. But there are some limitations.</p>

<p>The original <a href="https://en.wikipedia.org/wiki/Nook_Simple_Touch">Nook Simple Touch</a> is, bless it, an old and slow device. I want to do the minimum amount of processing on it as possible. The screen resolution is only 600x800.  I don't want to convert colour artwork to black and white - that will just look messy. I also want the image size to roughly match the screen - so things aren't shrunk down.</p>

<p>So, I want a list of art which meets the following criteria:</p>

<ul>
<li>Intended for monochrome display<sup id="fnref:mono"><a href="https://shkspr.mobi/blog/2021/09/turning-an-eink-screen-into-a-monochrome-art-gallery/#fn:mono" class="footnote-ref" title="OK, bit more complicated than that. eInk Pearl can display 16 shades of grey." role="doc-noteref">0</a></sup></li>
<li>Roughly 4:3 aspect ratio</li>
<li>Proper art<sup id="fnref:1"><a href="https://shkspr.mobi/blog/2021/09/turning-an-eink-screen-into-a-monochrome-art-gallery/#fn:1" class="footnote-ref" title="Whatever that is..." role="doc-noteref">1</a></sup> by real artists<sup id="fnref:2"><a href="https://shkspr.mobi/blog/2021/09/turning-an-eink-screen-into-a-monochrome-art-gallery/#fn:2" class="footnote-ref" title="Whoever they are..." role="doc-noteref">2</a></sup></li>
</ul>

<p>I started by looking at the Open Data produced by various museums and art galleries. Unfortunately, none of them indicated whether an artwork was greyscale. So, I turned to Flickr!</p>

<h2 id="using-the-flickr-api"><a href="https://shkspr.mobi/blog/2021/09/turning-an-eink-screen-into-a-monochrome-art-gallery/#using-the-flickr-api">Using the Flickr API</a></h2>

<p>Sadly, the Flickr API has been neglected for the best part of a decade. So the documentation is grossly out of date.</p>

<p>Two of the undocumented Search API calls are <code>styles</code> and <code>orientation</code>. I use them to search for black and white images in landscape orientation.
You can discover more by using the <a href="https://www.flickr.com/search/?text=">Flickr search website</a> and opening the "Advanced" panel.</p>

<p>The rest of the API call is quite standard. A keyword to search for ("art") - or whatever you want. Sorted by "interestingness" - although popularity is also a good metric. With <code>safe_search</code> turned off - no prudes in our house. And an image size <a href="https://www.flickr.com/services/api/misc.urls.html">no wider that 800px</a> - because serving a correctly scaled image means less work for the eReader.</p>

<h2 id="the-code"><a href="https://shkspr.mobi/blog/2021/09/turning-an-eink-screen-into-a-monochrome-art-gallery/#the-code">The Code</a></h2>

<p>It is almost embarrassing in its simplicity. It uses <a href="https://github.com/samwilson/phpflickr/">Sam Wilson's PHP library for Flickr</a>. It grabs 100 images, and then picks a random one to serve. It is resized to fit in a bounding box of 800x600 and repaginated to centre the image. The image is rotated it 90 degrees and served over HTTP with an appropriate caching policy. Nothing else.  Here it is<sup id="fnref:mit"><a href="https://shkspr.mobi/blog/2021/09/turning-an-eink-screen-into-a-monochrome-art-gallery/#fn:mit" class="footnote-ref" title="Licenced as MIT - but it is so basic that I won't be annoyed if you do something else with it." role="doc-noteref">3</a></sup>.</p>

<pre><code class="language-php">require_once 'vendor/autoload.php';
$flickr = new \Samwilson\PhpFlickr\PhpFlickr("123465789");

$search_terms = ["art", "artistic", "painting", "drawing"];
$search_rand = array_rand($search_terms, 1);

$sort_terms = ["date-posted-asc", "date-posted-desc", "date-taken-asc", "date-taken-desc", "interestingness-desc", "interestingness-asc", "relevance"];
$sort_rand = array_rand($sort_terms, 1);

$s = $flickr-&gt;photos()-&gt;search(["text"        =&gt; $search_terms[$search_rand],
                                "per_page"    =&gt; "100",
                                "styles"      =&gt; "blackandwhite",
                                "orientation" =&gt; "landscape",
                                "sort"        =&gt; $sort_terms[$sort_rand],
                                "safe_search" =&gt;"3"
                               ]);

$number_of_photos = count($s["photo"]);

$random_photo = random_int(0, $number_of_photos - 1);

$p = $s["photo"][$random_photo];

$farm   = $p["farm"];
$server = $p["server"];
$id     = $p["id"];
$secret = $p["secret"];
$title  = $p["title"];

$image_url = "https://live.staticflickr.com/{$server}/{$id}_{$secret}_c.jpg";

$image = imagecreatefromjpeg( $image_url );

$cropped = imagecropauto( $image, IMG_CROP_DEFAULT );
if ( $cropped !== false ) { 
   imagedestroy($image);  
   $image = $cropped;
}

$x = imagesx( $image );
$y = imagesy( $image );

$width_ratio  = $x / 800;
$height_ratio = $y / 600;

// Scale
if ( $height_ratio &gt;= $width_ratio ) {
   $new_height = ( 600 / $y ) * $x;
   $scaled = imagescale( $image, $new_height, 600 );
} else {
   $scaled = imagescale( $image, 800, -1 );
}

$x = imagesx( $scaled );
$y = imagesy( $scaled );


// Make a background canvas
$canvas = imagecreatetruecolor( 800, 600 );
$black  = imagecolorallocate( $canvas, 0, 0, 0 );
imagefilledrectangle( $canvas, 0, 0, 800, 600, $black );

$dst_x = ( ( 800 - $x ) / 2 );
$dst_y = ( ( 600 - $y ) / 2 );

imagecopy( $canvas, $scaled, $dst_x, $dst_y, 0, 0, $x, $y );

$rotated = imagerotate( $canvas, 90, 0 );

header('Content-type: image/jpeg');
header("Expires: on, 01 Jan 1970 00:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");

imagejpeg( $rotated );

// Tidy Up
imagedestroy( $image );
imagedestroy( $scaled );
imagedestroy( $rotated );
</code></pre>

<h2 id="displaying"><a href="https://shkspr.mobi/blog/2021/09/turning-an-eink-screen-into-a-monochrome-art-gallery/#displaying">Displaying</a></h2>

<p>As I mentioned in <a href="https://shkspr.mobi/blog/2020/02/turn-an-old-ereader-into-an-information-screen-nook-str/">my previous post about displaying web pages on the Nook</a> - the browser is slow, old, and can't handle http<strong>s</strong> connections.</p>

<p>So I used <a href="https://github.com/jfriesne/Electric-Sign">ElectricSign</a> which is an old Android app. Give it a URL and it will display the contents on screen. It can be set to periodically refresh.</p>

<p>I've had it running for months on a different screen and it hasn't crashed.</p>

<p>That's it!</p>

<h2 id="todo"><a href="https://shkspr.mobi/blog/2021/09/turning-an-eink-screen-into-a-monochrome-art-gallery/#todo">TODO</a></h2>

<ul>
<li>Buy more cheap, 2nd hand eInk screens on eBay. Preferably larger and with higher DPI.</li>
<li>Get some fancy frames.</li>
<li>Start a pirate art museum.</li>
<li>Monetise it by tracking how long people stare at a particular artwork.</li>
<li>BitCoin?<sup id="fnref:lol"><a href="https://shkspr.mobi/blog/2021/09/turning-an-eink-screen-into-a-monochrome-art-gallery/#fn:lol" class="footnote-ref" title="LOL! Nope!" role="doc-noteref">4</a></sup></li>
</ul>

<h2 id="thanks-for-reading"><a href="https://shkspr.mobi/blog/2021/09/turning-an-eink-screen-into-a-monochrome-art-gallery/#thanks-for-reading">Thanks for reading</a></h2>

<p>If you've enjoyed this blog post, you can <a href="https://www.amazon.co.uk/hz/wishlist/ls/13GFCFR2B2IX4?type=wishlist&amp;linkCode=sl2&amp;tag=shksprblogwish-21">buy me something from my wishlist</a> or <a href="https://github.com/sponsors/edent">sponsor my GitHub</a>.  Find out more way to <a href="https://shkspr.mobi/blog/support/">support this blog</a>.</p>

<div id="footnotes" role="doc-endnotes">
<hr aria-label="Footnotes">
<ol start="0">

<li id="fn:mono">
<p>OK, bit more complicated than that. <a href="https://wiki.mobileread.com/wiki/E_Ink_Pearl">eInk Pearl can display 16 shades of grey</a>.&nbsp;<a href="https://shkspr.mobi/blog/2021/09/turning-an-eink-screen-into-a-monochrome-art-gallery/#fnref:mono" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>

<li id="fn:1">
<p>Whatever that is...&nbsp;<a href="https://shkspr.mobi/blog/2021/09/turning-an-eink-screen-into-a-monochrome-art-gallery/#fnref:1" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>

<li id="fn:2">
<p>Whoever they are...&nbsp;<a href="https://shkspr.mobi/blog/2021/09/turning-an-eink-screen-into-a-monochrome-art-gallery/#fnref:2" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>

<li id="fn:mit">
<p>Licenced as MIT - but it is so basic that I won't be annoyed if you do something else with it.&nbsp;<a href="https://shkspr.mobi/blog/2021/09/turning-an-eink-screen-into-a-monochrome-art-gallery/#fnref:mit" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>

<li id="fn:lol">
<p>LOL! Nope!&nbsp;<a href="https://shkspr.mobi/blog/2021/09/turning-an-eink-screen-into-a-monochrome-art-gallery/#fnref:lol" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>

</ol>
</div>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=40394&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2021/09/turning-an-eink-screen-into-a-monochrome-art-gallery/feed/</wfw:commentRss>
			<slash:comments>7</slash:comments>
		
		<enclosure url="https://shkspr.mobi/blog/wp-content/uploads/2021/09/offweb.mp4" length="1424365" type="video/mp4" />
<enclosure url="https://shkspr.mobi/blog/wp-content/uploads/2021/09/onweb.mp4" length="1274366" type="video/mp4" />

			</item>
		<item>
		<title><![CDATA[KOReader - change forward and back to bottom and top]]></title>
		<link>https://shkspr.mobi/blog/2021/03/koreader-change-forward-and-back-to-bottom-and-top/</link>
					<comments>https://shkspr.mobi/blog/2021/03/koreader-change-forward-and-back-to-bottom-and-top/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Sat, 13 Mar 2021 12:15:53 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[ebook]]></category>
		<category><![CDATA[eink]]></category>
		<category><![CDATA[ereader]]></category>
		<category><![CDATA[HowTo]]></category>
		<category><![CDATA[koreader]]></category>
		<category><![CDATA[linux]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=38359</guid>

					<description><![CDATA[(Mostly notes to myself)  KOReader is the best eReader software I&#039;ve found. It works beautifully on eInk screens, Android, and Linux. Just a gorgeous - and infinitely customisable - experience.  There&#039;s one thing I don&#039;t like - to move forward a page, you have to click the right of the screen and, to move back, the left. That&#039;s fine if you&#039;re holding the book in your right hand. But sometimes I…]]></description>
										<content:encoded><![CDATA[<p>(Mostly notes to myself)</p>

<p><a href="https://koreader.rocks/">KOReader</a> is the best eReader software I've found. It works beautifully on eInk screens, Android, and Linux. Just a gorgeous - and infinitely customisable - experience.</p>

<p>There's one thing I don't like - to move forward a page, you have to click the right of the screen and, to move back, the left. That's fine if you're holding the book in your right hand. But sometimes I behave in a sinister fashion and hold it in my left. I want to tap the bottom of the screen to move forward, and the top to move back a page.</p>

<p>My previous eReader had an easy-settings menu like this:
<img src="https://shkspr.mobi/blog/wp-content/uploads/2021/03/0-page-fs8.png" alt="Various forward and back configurations." width="1024" height="326" class="aligncenter size-full wp-image-38360"></p>

<p>KOReader doesn't have anything like that - yet - so here's how to set it up manually.</p>

<ol>
<li>In the book selection screen (<em>not</em> when reading a book) tap the top of the screen to bring up the menu bar, then press 🛠️ for Tools<br><img src="https://shkspr.mobi/blog/wp-content/uploads/2021/03/1-Tools-fs8.png" alt="" width="500" height="667" class="aligncenter size-medium wp-image-38367"></li>
<li>At the bottom of the menu, scroll across to page 2<br><img src="https://shkspr.mobi/blog/wp-content/uploads/2021/03/2-Tools-2-fs8.png" alt="" width="500" height="248" class="aligncenter size-medium wp-image-38366"></li>
<li>Select "More Tools"<br><img src="https://shkspr.mobi/blog/wp-content/uploads/2021/03/3-More-fs8.png" alt="" width="500" height="368" class="aligncenter size-medium wp-image-38365"></li>
<li>Select "Advanced Settings"<br><img src="https://shkspr.mobi/blog/wp-content/uploads/2021/03/4-Warning-fs8.png" alt="" width="500" height="286" class="aligncenter size-medium wp-image-38364"></li>
<li>Read the big scary warning message and press "OK"<br><img src="https://shkspr.mobi/blog/wp-content/uploads/2021/03/5-Advanced-Settings-fs8.png" alt="" width="500" height="667" class="aligncenter size-medium wp-image-38363"></li>
<li>Scroll along until you find "<code>DTAP_ZONE_BACKWARD</code>". Tap on it, and edit the values to read <code>h=0.5 w=1 x=0 y=0</code><br><img src="https://shkspr.mobi/blog/wp-content/uploads/2021/03/6-Backwards-fs8.png" alt="" width="500" height="237" class="aligncenter size-medium wp-image-38362"></li>
<li>For "<code>DTAP_ZONE_FORWARD</code>", set the values to <code>h=0.5 w=1 x=0 y=0.5</code>"<br><img src="https://shkspr.mobi/blog/wp-content/uploads/2021/03/7-Forwards-fs8.png" alt="" width="500" height="231" class="aligncenter size-medium wp-image-38361"></li>
<li>Press the "X" in the top right corner, and restart KOReader.</li>
</ol>

<p>Done!</p>

<p><a href="https://github.com/koreader/koreader/issues/6227">Adapted from this GitHub issue</a>.  I've also added these instructions to the <a href="https://github.com/koreader/koreader/wiki/Change-Next-Page---Previous-Page-touch-targets">KOReader Wiki</a></p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=38359&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2021/03/koreader-change-forward-and-back-to-bottom-and-top/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Discolouration of Boyue eInk screens]]></title>
		<link>https://shkspr.mobi/blog/2020/09/discolouration-of-boyue-eink-screens/</link>
					<comments>https://shkspr.mobi/blog/2020/09/discolouration-of-boyue-eink-screens/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Tue, 15 Sep 2020 11:47:31 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[eink]]></category>
		<category><![CDATA[technology]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=36734</guid>

					<description><![CDATA[A little under a year ago, I got a Boyue Likebook Ares eReader. I use it most days.  Recently, I noticed a yellowing discolouration around the edge of the screen.      I&#039;ve boosted the contrast of those images. It&#039;s the sort of thing the human eye can detect under decent light, but cameras struggle with. At night, it isn&#039;t noticeable. But in daylight, the yellowing discolouration is pretty…]]></description>
										<content:encoded><![CDATA[<p>A little under a year ago, I got a <a href="https://shkspr.mobi/blog/2019/11/gadget-review-boyue-likebook-ares/">Boyue Likebook Ares eReader</a>. I use it most days. 
Recently, I noticed a yellowing discolouration around the edge of the screen.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2020/09/Imagepipe_1.jpg" alt="Discoloured screen, bottom edge." width="512" height="288" class="aligncenter size-full wp-image-36735">

<img src="https://shkspr.mobi/blog/wp-content/uploads/2020/09/Imagepipe_0.jpg" alt="Discoloured corner." width="512" height="288" class="aligncenter size-full wp-image-36736">

<p>I've boosted the contrast of those images. It's the sort of thing the human eye can detect under decent light, but cameras struggle with. At night, it isn't noticeable. But in daylight, the yellowing discolouration is pretty obvious.</p>

<p>To be clear, those photos are taken with the LEDs <em>off</em>. This is not caused by uneven light distribution.</p>

<p>If I'm charitable, it's a bit like the way paper books weather with age.</p>

<p><a href="https://www.mobileread.com/forums/showthread.php?t=332358">A few other people on MobileRead forum</a> have noticed similar problems with their Boyue devices.</p>

<p>Because I'm lazy, I leave the reading light on all the time. Perhaps the heat from the LEDs has cooked the eInk. Or perhaps the glass is getting damaged. There's no screen protector on there which has decayed.</p>

<p>I bought the device from a Hong Kong seller on eBay with a UK warehouse. I've enquired about a warranty replacement as it is less than a year old, but I'm not hopeful.</p>

<p>The device is still readable. And you expect electronics to wear with age. But the yellowing is annoying. It is less apparent if I turn the edge lighting on, and set the colour temperature to warm.</p>

<p>Perhaps we'll see liquid cooled eReaders soon?</p>

<p>If you've experienced this - or know how to reverse it - please let me know.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=36734&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2020/09/discolouration-of-boyue-eink-screens/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Turn an old eReader into an Information Screen (Nook STR)]]></title>
		<link>https://shkspr.mobi/blog/2020/02/turn-an-old-ereader-into-an-information-screen-nook-str/</link>
					<comments>https://shkspr.mobi/blog/2020/02/turn-an-old-ereader-into-an-information-screen-nook-str/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Sun, 16 Feb 2020 12:06:17 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[eink]]></category>
		<category><![CDATA[ereader]]></category>
		<category><![CDATA[HowTo]]></category>
		<category><![CDATA[nook]]></category>
		<category><![CDATA[trains]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=34160</guid>

					<description><![CDATA[Here&#039;s a quick tutorial for turning an old Nook into a passive display. This is an update to my 2013 post  End Result  An eInk screen which displays the trains I can catch from my local station.    It shows the next few available trains, and whether they&#039;re delayed. It also shows how long until the next local bus to the train station.  Updating the Nook  Before doing anything, manually update the …]]></description>
										<content:encoded><![CDATA[<p>Here's a quick tutorial for turning an old Nook into a passive display. This is <a href="https://shkspr.mobi/blog/2013/05/rooting-the-nook/">an update to my 2013 post</a></p>

<h2 id="end-result"><a href="https://shkspr.mobi/blog/2020/02/turn-an-old-ereader-into-an-information-screen-nook-str/#end-result">End Result</a></h2>

<p>An eInk screen which displays the trains I can catch from my local station.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2020/02/Nook-on-wall.jpeg" alt="An eReader stuck to a wall by my front door." width="680" height="510" class="aligncenter size-full wp-image-34202">

<p>It shows the next few available trains, and whether they're delayed. It also shows how long until the next local bus to the train station.</p>

<h2 id="updating-the-nook"><a href="https://shkspr.mobi/blog/2020/02/turn-an-old-ereader-into-an-information-screen-nook-str/#updating-the-nook">Updating the Nook</a></h2>

<p>Before doing anything, manually update the Nook's firmware. You can <a href="https://help.barnesandnoble.com/app/answers/detail/a_id/4212#ManualDL">download the latest version from Barnes and Nobel</a></p>

<p>Copy the <code>.zip</code> file to the root directory of your Nook via USB. Unplug the Nook and turn it off. After a few minutes, it should detect the file and perform the update.</p>

<p>Sadly, it's only Android 2.1 - and the TLS implementation is artificially restricted. More on that later!</p>

<p>It's worth <a href="https://web.archive.org/web/20200924201327/https://help.barnesandnoble.com/app/answers/detail/a_id/1740/related/1">deregistering your Nook</a> and then resetting it. You have to <a href="https://shkspr.mobi/blog/2013/05/guide-to-using-the-nook-str-glow-without-a-bn-account-pictures/">press a few buttons to use the Nook without a B&amp;N Account</a>.</p>

<h2 id="rooting-the-nook"><a href="https://shkspr.mobi/blog/2020/02/turn-an-old-ereader-into-an-information-screen-nook-str/#rooting-the-nook">Rooting the Nook</a></h2>

<p><a href="http://download.doozan.com/nook/NookManager-0.5.0.zip">Download Nook Manager</a> (or compile it yourself from the <a href="https://github.com/doozan/NookManager/">open source code</a>).</p>

<p>Unzip the file. It should just contain <code>NookManager.img</code>. Write the disk image to a microSD card. Follow the <a href="https://forum.xda-developers.com/showthread.php?t=2040351">instructions on XDA Developers</a> to root the device.</p>

<h2 id="changing-the-launcher"><a href="https://shkspr.mobi/blog/2020/02/turn-an-old-ereader-into-an-information-screen-nook-str/#changing-the-launcher">Changing the Launcher</a></h2>

<p>I used <a href="https://github.com/Leszek111/ReLaunchX">ReLaunchX</a> which is an eInk optimised Android launcher. <a href="https://f-droid.org/en/packages/com.gacode.relaunchx/">Download the latest Android version from F-Droid</a>.</p>

<p>With the Nook connected to your computer by USB, run:</p>

<pre><code class="language-_">adb install com.gacode.relaunchx_200105000.apk
</code></pre>

<p>That will install the launcher. When you hit the Nook's home button, you will be able to select it as the default launcher.</p>

<h2 id="electric-sign"><a href="https://shkspr.mobi/blog/2020/02/turn-an-old-ereader-into-an-information-screen-nook-str/#electric-sign">Electric Sign</a></h2>

<p>Running a modern web browser on the Nook is close to impossible. So I recommend using <a href="https://github.com/jfriesne/Electric-Sign">Electric Sign</a>. It's an open source Android app which periodically calls a URl, turns it into an image, and then uses it as the Nook's screensaver.</p>

<p>You can <a href="https://apkpure.com/electric-sign/com.sugoi.electricsign">download the latest version from APKpure</a>.</p>

<p>Again, install it using:</p>

<pre><code class="language-_">adb install Electric\ Sign_v1.0.3_apkpure.com.apk
</code></pre>

<p>Launch it from ReLaunchX and follow the setup screen. I set it to reload every 5 minutes from 7AM until 9pm.</p>

<h2 id="tls-woes"><a href="https://shkspr.mobi/blog/2020/02/turn-an-old-ereader-into-an-information-screen-nook-str/#tls-woes">TLS Woes!</a></h2>

<p>Here's where life gets complicated. The World Wide Web is changing to become more secure. Sadly, this means older browsers simply cannot access modern web servers. Even though B&amp;N have updated the Nook to use <a href="https://ietf.org/blog/tls13/">TLS 1.3</a> - it only works with their own servers. Trying to access modern <code>https://</code> sites just won't work.</p>

<p>So, you will need to point Electric Sign to an <em>unencrypted</em> website.</p>

<h2 id="train-api"><a href="https://shkspr.mobi/blog/2020/02/turn-an-old-ereader-into-an-information-screen-nook-str/#train-api">Train API</a></h2>

<p>UK trains have an open API, the snappily named <a href="http://lite.realtime.nationalrail.co.uk/OpenLDBWS/">Live Departure Boards Web Service (LDBWS)</a>. You need to register for an API key, which is pretty much instant.</p>

<p>There's a <a href="https://github.com/railalefan/phpOpenLDBWS">great PHP library for OpenLDBWS</a>. You can also find libraries in most popular programming languages.</p>

<p>I created a quick little page which displays the trains that either my wife or I can catch to get to our jobs. When we're sat eating breakfast, we can see if our regular train is delayed.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2020/02/Nook-with-a-train-display.jpg" alt="Nook with a train display." width="640" height="823" class="aligncenter size-full wp-image-34162">

<h2 id="bus"><a href="https://shkspr.mobi/blog/2020/02/turn-an-old-ereader-into-an-information-screen-nook-str/#bus">Bus</a></h2>

<p>I have an <a href="https://shkspr.mobi/blog/2019/09/quick-and-dirty-self-hosted-alexa-skills-2019/">Alexa skill to tell me the bus times</a> - but listening is much slower than reading. So I also added bus times.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2020/02/15816841539490.jpg" alt="EInk screen showing bus and train times." width="960" height="1280" class="aligncenter size-full wp-image-34210">

<p>You can also see that I've only included trains we can actually catch. There's no point showing a train leaving in 5 minutes if it takes 10 minutes to walk to the station. The train API shows the departure time of delayed trains, so the code takes that into account.</p>

<h2 id="physical-install"><a href="https://shkspr.mobi/blog/2020/02/turn-an-old-ereader-into-an-information-screen-nook-str/#physical-install">Physical Install</a></h2>

<p>I used a double-sided 3M sticky pad and plonked it on the wall. No fancy hooks, screws, or magnets. Just glue.</p>

<p>It's conveniently close to an electrical socket. But having a trailing wire looks messy. So we'll only plug it in when it needs a top up. I <a href="https://shkspr.mobi/blog/2015/09/replacing-the-battery-on-a-barnes-noble-eink-nook/">replaced the Nook battery a few years ago</a> so it should last several days without a recharge.</p>

<h2 id="code"><a href="https://shkspr.mobi/blog/2020/02/turn-an-old-ereader-into-an-information-screen-nook-str/#code">Code</a></h2>

<p>All the code - plus backups of the binaries - are <a href="https://gitlab.com/edent/nook-screen/-/tree/master">available on GitLab</a>.</p>

<h2 id="what-next"><a href="https://shkspr.mobi/blog/2020/02/turn-an-old-ereader-into-an-information-screen-nook-str/#what-next">What next?</a></h2>

<p>I don't really care about the weather or the news, and there's limited screen space. But if you have any suggestions for what it could display, do let me know.</p>

<p>Hope you found that useful!</p>

<blockquote class="social-embed" id="social-embed-1228238572324454400" lang="en" itemscope="" itemtype="https://schema.org/SocialMediaPosting"><header class="social-embed-header" itemprop="author" itemscope="" itemtype="https://schema.org/Person"><a href="https://twitter.com/edent" class="social-embed-user" itemprop="url"><img class="social-embed-avatar social-embed-avatar-circle" src="data:image/webp;base64,UklGRkgBAABXRUJQVlA4IDwBAACQCACdASowADAAPrVQn0ynJCKiJyto4BaJaQAIIsx4Au9dhDqVA1i1RoRTO7nbdyy03nM5FhvV62goUj37tuxqpfpPeTBZvrJ78w0qAAD+/hVyFHvYXIrMCjny0z7wqsB9/QE08xls/AQdXJFX0adG9lISsm6kV96J5FINBFXzHwfzMCr4N6r3z5/Aa/wfEoVGX3H976she3jyS8RqJv7Jw7bOxoTSPlu4gNbfXYZ9TnbdQ0MNnMObyaRQLIu556jIj03zfJrVgqRM8GPwRoWb1M9AfzFe6Mtg13uEIqrTHmiuBpH+bTVB5EEQ3uby0C//XOAPJOFv4QV8RZDPQd517Khyba8Jlr97j2kIBJD9K3mbOHSHiQDasj6Y3forATbIg4QZHxWnCeqqMkVYfUAivuL0L/68mMnagAAA" alt="" itemprop="image"><div class="social-embed-user-names"><p class="social-embed-user-names-name" itemprop="name">Terence Eden is on Mastodon</p>@edent</div></a><img class="social-embed-logo" alt="Twitter" src="data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%0Aaria-label%3D%22Twitter%22%20role%3D%22img%22%0AviewBox%3D%220%200%20512%20512%22%3E%3Cpath%0Ad%3D%22m0%200H512V512H0%22%0Afill%3D%22%23fff%22%2F%3E%3Cpath%20fill%3D%22%231d9bf0%22%20d%3D%22m458%20140q-23%2010-45%2012%2025-15%2034-43-24%2014-50%2019a79%2079%200%2000-135%2072q-101-7-163-83a80%2080%200%200024%20106q-17%200-36-10s-3%2062%2064%2079q-19%205-36%201s15%2053%2074%2055q-50%2040-117%2033a224%20224%200%2000346-200q23-16%2040-41%22%2F%3E%3C%2Fsvg%3E"></header><section class="social-embed-text" itemprop="articleBody"><small class="social-embed-reply"><a href="https://twitter.com/edent/status/1226205599303716864">Replying to @edent</a></small>I declare this project complete!<br>We now have a passive display showing us bus &amp; train times.<br>Blog post coming up this weekend. <a href="https://x.com/edent/status/1228238572324454400/photo/1">pic.x.com/m2emF5rq3e</a><div class="social-embed-media-grid"><a href="https://pbs.twimg.com/media/EQuUdbbUYAAJi6z.jpg" class="social-embed-media-link"><img class="social-embed-media" alt="An old eReader is stuck to a wall near our front door. " src="data:image/webp;base64,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"></a></div></section><hr class="social-embed-hr"><footer class="social-embed-footer"><a href="https://twitter.com/edent/status/1228238572324454400"><span aria-label="115 likes" class="social-embed-meta">❤️ 115</span><span aria-label="11 replies" class="social-embed-meta">💬 11</span><span aria-label="0 reposts" class="social-embed-meta">🔁 0</span><time datetime="2020-02-14T08:44:29.000Z" itemprop="datePublished">08:44 - Fri 14 February 2020</time></a></footer></blockquote>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=34160&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2020/02/turn-an-old-ereader-into-an-information-screen-nook-str/feed/</wfw:commentRss>
			<slash:comments>16</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Gadget Review -  Boyue Likebook Ares]]></title>
		<link>https://shkspr.mobi/blog/2019/11/gadget-review-boyue-likebook-ares/</link>
					<comments>https://shkspr.mobi/blog/2019/11/gadget-review-boyue-likebook-ares/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Tue, 26 Nov 2019 12:30:58 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[ebook]]></category>
		<category><![CDATA[eink]]></category>
		<category><![CDATA[ereader]]></category>
		<category><![CDATA[gadget]]></category>
		<category><![CDATA[kindle]]></category>
		<category><![CDATA[NaBloPoMo]]></category>
		<category><![CDATA[review]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=33161</guid>

					<description><![CDATA[I&#039;ll be upfront, I mostly got this eReader because it&#039;s the only one on the market with a USB-C connection.  OK! OK! That&#039;s not the main reason. It has pretty good support from the manufacturer and a vibrant community around it. Masses of memory, warm lighting, and oodles of space. And, I think, pretty hackable.  Quick video    Specifications   Android 6.0 - with a promise to update it to Android …]]></description>
										<content:encoded><![CDATA[<p>I'll be upfront, I mostly got this eReader because it's the only one on the market with a USB-C connection.</p>

<p>OK! OK! That's not the <em>main</em> reason. It has pretty good support from the manufacturer and a vibrant community around it. Masses of memory, warm lighting, and oodles of space. And, I think, pretty hackable.</p>

<h2 id="quick-video"><a href="https://shkspr.mobi/blog/2019/11/gadget-review-boyue-likebook-ares/#quick-video">Quick video</a></h2>

<iframe title="Unboxing: Boyue Likebook Ares Note eReader" width="620" height="349" src="https://www.youtube.com/embed/cO0Wk6PLz5M?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen=""></iframe>

<h2 id="specifications"><a href="https://shkspr.mobi/blog/2019/11/gadget-review-boyue-likebook-ares/#specifications">Specifications</a></h2>

<ul>
<li>Android 6.0 - with a promise to update it to Android 8.0</li>
<li>Touchscreen with Wacom stylus</li>
<li>1.5GHz CPU</li>
<li>2GB RAM</li>
<li>32GB storage plus a microSD slot</li>
<li>7.8 inch E-ink Carta HD (300 PPI) screen</li>
<li>Dual colour front lights</li>
<li>USB-C for charging, data transfer, and headphones</li>
<li>WiFi and Bluetooth</li>
<li>Speakers and microphone</li>
<li>3200 mAh battery</li>
</ul>

<p>Essentially it's an Android tablet with an eInk screen. The Wacom stylus can be used for handwriting and note-taking.</p>

<h2 id="the-reading-experience"><a href="https://shkspr.mobi/blog/2019/11/gadget-review-boyue-likebook-ares/#the-reading-experience">The reading experience</a></h2>

<p>Amazing! The screen is goregous. You have precise control over the thickness of the fonts, line spacing, word spacing, and more. Pinch to zoom works perfectly. You can even side-load your own fonts. You can also read in landscape mode with two columns. I find that particularly useful.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2019/11/Two-column-mode.png" alt="A book with two columns." width="749" height="562" class="aligncenter size-full wp-image-33205">

<p>Links within books work, as do footnotes and endnotes. The keyboard is pretty quick for searching. You can change how bright the light is - and flip between warm and cool lighting.</p>

<p>It also does Text-To-Speech, so a little robot can read books out via the stereo speakers. It'll also play MP3s. No headphone jack - but it supports Bluetooth and USB-C.</p>

<p>There are some glitches in the default reading experience - especially when it comes to punctuation.
<img src="https://shkspr.mobi/blog/wp-content/uploads/2019/11/Spaces-between-letters-and-punctuation.png" alt="Spaces between letters and punctuation." width="915" height="512" class="aligncenter size-full wp-image-33199"></p>

<h3 id="formats-supported"><a href="https://shkspr.mobi/blog/2019/11/gadget-review-boyue-likebook-ares/#formats-supported">Formats supported</a></h3>

<p>A sample of ePub, .mobi, PDF, and .txt files all worked well.</p>

<p>It shows up as an MTP device when connected to a computer via USB. Or you can send files via Bluetooth. It also has a built in webserver, so you can send via WiFi.</p>

<h3 id="epub-3"><a href="https://shkspr.mobi/blog/2019/11/gadget-review-boyue-likebook-ares/#epub-3">ePub 3</a></h3>

<p>I tried the default reader using some of the <a href="https://idpf.github.io/epub3-samples/30/samples.html">sample ePub 3 documents</a>. It coped with Arabic (right to left), Japanese with Ruby, and inline images.</p>

<p>Weirdly, it didn't like linebreaks in running text - collapsing them so there was no spaces between words.</p>

<p>It didn't support embedded fonts in eBooks. But, that's ok, you can add your own!</p>

<h3 id="fonts"><a href="https://shkspr.mobi/blog/2019/11/gadget-review-boyue-likebook-ares/#fonts">Fonts</a></h3>

<p>Create a directory called <code>/fonts/</code> on the device. Paste in either <a href="http://www.differencebetween.net/technology/difference-between-ttf-and-otf/">TTF or OTF</a> fonts. They magically appear in the reading app!</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2019/11/Font-selection-screen.png" alt="Font selection screen." width="749" height="562" class="aligncenter size-full wp-image-33204">

<p>No support for WOFF / WOFF2 fonts in the default reader.</p>

<h2 id="apps"><a href="https://shkspr.mobi/blog/2019/11/gadget-review-boyue-likebook-ares/#apps">Apps</a></h2>

<p>There are a few built in apps - the standard Android browser is included. There's an app store and the ability to side-load.  There are a bunch of reading apps if you don't like the default one.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2019/11/App-store.png" alt="List of reading apps." width="702" height="936" class="aligncenter size-full wp-image-33202">

<p>Yup, you can install the Amazon Kindle app if you really want to!</p>

<p>(Screenshots are in colour, but the screen is black and white.)</p>

<h2 id="note-taking"><a href="https://shkspr.mobi/blog/2019/11/gadget-review-boyue-likebook-ares/#note-taking">Note taking</a></h2>

<p>I don't like handwriting - but the Wacom stylus is easy to use. You can draw on the screen, annotate PDFs, and erase your scribblings.</p>

<h2 id="quirks"><a href="https://shkspr.mobi/blog/2019/11/gadget-review-boyue-likebook-ares/#quirks">Quirks</a></h2>

<p>It doesn't come with a case, nor a screen protector. I'm in two minds about this. It has a glass screen, so should be fairly rugged. I don't plan on using the Wacom stylus, so I doubt that'll scratch it. But seeing as any blemish interferes with your reading experience, some protection is a must.  <a href="https://amzn.to/2XMtMM7">I purchased a £20 case for it</a>.</p>

<p>Start-up time is slow. This is an Android tablet, so doesn't have quite the same energy efficiency as other readers. From off to reading takes about 45 seconds. You can set it to never switch off, but you'll need to charge it a little more often.</p>

<p>The UI isn't brilliantly translated into English. You'll understand it, but the grammar and spacing are quirky.
<img src="https://shkspr.mobi/blog/wp-content/uploads/2019/11/Weird-UI.png" alt="The UI says &quot;readed&quot; rather than read." width="1404" height="660" class="aligncenter size-full wp-image-33201">
You can also see a few HTML entities in the the UI. So, not perfect quality. But usable.</p>

<p>There are also some untranslated /UI elements.
<img src="https://shkspr.mobi/blog/wp-content/uploads/2019/11/Untranslated-UI-elements.png" alt="Chinese text in the English UI." width="1404" height="816" class="aligncenter size-full wp-image-33200"></p>

<p>The UI takes a little getting used to. Some options are hidden away in menus, others behind icons. Most things you'll only have to set once, but it can be a challenge finding everything.</p>

<p>The first time I rebooted, it reverted to Chinese, but it was pretty simple to set it back.</p>

<h2 id="cost-and-verdict"><a href="https://shkspr.mobi/blog/2019/11/gadget-review-boyue-likebook-ares/#cost-and-verdict">Cost and Verdict</a></h2>

<p>I paid £190 from eBay - plus <a href="https://amzn.to/2XMtMM7">£20 for a case</a>. I reckon that's a bargain! There are cheaper eReaders out there - but this is the only one I found with USB-C.  It doesn't tie you in to the Amazon Kindle monoculture.</p>

<p>As an Android table, it's basically fine. Good enough for occasional web browsing, and some specifically optimised apps.</p>

<p>And as a book reader? Close to perfect! Text is crisp and clear, page turns are instant. Lots of options to fiddle with to get your books just right.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=33161&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2019/11/gadget-review-boyue-likebook-ares/feed/</wfw:commentRss>
			<slash:comments>9</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Replacing the battery on a Barnes & Noble eInk Nook]]></title>
		<link>https://shkspr.mobi/blog/2015/09/replacing-the-battery-on-a-barnes-noble-eink-nook/</link>
					<comments>https://shkspr.mobi/blog/2015/09/replacing-the-battery-on-a-barnes-noble-eink-nook/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Thu, 03 Sep 2015 07:01:07 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[battery]]></category>
		<category><![CDATA[eink]]></category>
		<category><![CDATA[nook]]></category>
		<category><![CDATA[repair]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=21350</guid>

					<description><![CDATA[The other day I fished my old nook out of deep storage - only to discover that the battery wasn&#039;t holding charge.  More seriously, the back had swollen out and looked like it was about to burst. Uh-oh! Inflating batteries are dangerous batteries.  Taking apart the nook is incredibly simple, pop off the power button, use a Torx 5 screwdriver to undo the single screw, and then spludger your way…]]></description>
										<content:encoded><![CDATA[<p>The other day I fished my old nook out of deep storage - only to discover that the battery wasn't holding charge.  More seriously, the back had swollen out and looked like it was about to burst. Uh-oh! Inflating batteries are <em>dangerous</em> batteries.</p>

<p><a href="https://www.ifixit.com/Teardown/Nook+Simple+Touch+with+GlowLight+Teardown/9301">Taking apart the nook is incredibly simple</a>, pop off the power button, use a Torx 5 screwdriver to undo the single screw, and then spludger your way around the edges.  This is what I found in mine...</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2015/09/14412122748195.jpg" alt="nook battery puffed up" width="800" height="600" class="aligncenter size-full wp-image-21356">

<p>VERY BAD!</p>

<p>A <a href="http://www.amazon.co.uk/gp/product/B002NE4RIC/ref=as_li_tl?ie=UTF8&amp;camp=1634&amp;creative=19450&amp;creativeASIN=B002NE4RIC&amp;linkCode=as2&amp;tag=shkspr-21">replacement nook battery is less than a tenner from Amazon</a>. It is developed by <a href="https://web.archive.org/web/20150921060003/http://www.cameronsino.net/">Cameron Sino</a> who seem to specialise in making replacement batteries for all sorts of gadgets.</p>

<p>Fitting the battery was a little tricky, here's how it went...</p>

<p>There's a small port on the motherboard into which the battery cable is attached.
<img src="https://shkspr.mobi/blog/wp-content/uploads/2015/09/14412122752620.jpg" alt="nook battery port" width="800" height="600" class="aligncenter size-full wp-image-21352"></p>

<p>The cable only fits in one way - with the red wire at the bottom.  This is the position which the battery will take when the nook is reassembled.
<img src="https://shkspr.mobi/blog/wp-content/uploads/2015/09/14412122752599.jpg" alt="nook battery on circuit board" width="600" height="800" class="aligncenter size-full wp-image-21351"></p>

<p>The battery came charged, so I was able to verify that everything worked as expected.  Now's a good time to test charging it.</p>

<p>Once done, unplug the battery and prepare to reassemble!</p>

<p>The back case of the nook has a recessed area for the battery.  There's just one tiny problem...</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2015/09/14412122748346.jpg" alt="nook battery doesn't fit!" width="800" height="600" class="aligncenter size-full wp-image-21354">

<p>Yup! The battery doesn't fit!</p>

<p>Luckily, the casing for the battery is rather pliable and, with some gentle force, it's just about possible to squeeze it in.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2015/09/14412122748034.jpg" alt="nook battery squashed in" width="800" height="600" class="aligncenter size-full wp-image-21355">

<p>A little bit of tape to secure it into place and we're good to go!</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2015/09/14412122743040.jpg" alt="nook battery taped in" width="800" height="600" class="aligncenter size-full wp-image-21359">

<p>The cable on the battery is long enough to plug in while the back is detached.
<img src="https://shkspr.mobi/blog/wp-content/uploads/2015/09/14412122743682.jpg" alt="nook battery and cover" width="600" height="800" class="aligncenter size-full wp-image-21358"></p>

<p>Reassembling is somewhat tricky.  You have to slide on the bottom, then re-clip everything, and slide up.  Be careful not to apply too much pressure - it's <em>really</em> easy to damage the screen that way.
<img src="https://shkspr.mobi/blog/wp-content/uploads/2015/09/14412122752318.jpg" alt="nook covers clipping on" width="800" height="600" class="aligncenter size-full wp-image-21353"></p>

<p>When all the plastic casings are done, it's a simple case of screwing in the T5.
<img src="https://shkspr.mobi/blog/wp-content/uploads/2015/09/14412122749457.jpg" alt="nook cover screw" width="800" height="600" class="aligncenter size-full wp-image-21357"></p>

<p>And - that's it!  A fairly easy device to replace parts on - no soldering, easy clips, one screw.  Why can't all electronics be like this?</p>

<p><a href="http://www.amazon.co.uk/gp/product/B002NE4RIC/ref=as_li_tl?ie=UTF8&amp;camp=1634&amp;creative=19450&amp;creativeASIN=B002NE4RIC&amp;linkCode=as2&amp;tag=shkspr-21">Replacement batteries for the nook and glolight are on Amazon for under £10</a>.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=21350&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2015/09/replacing-the-battery-on-a-barnes-noble-eink-nook/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Rooting The Nook]]></title>
		<link>https://shkspr.mobi/blog/2013/05/rooting-the-nook/</link>
					<comments>https://shkspr.mobi/blog/2013/05/rooting-the-nook/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Mon, 27 May 2013 14:23:08 +0000</pubDate>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[ebook]]></category>
		<category><![CDATA[eink]]></category>
		<category><![CDATA[hacking]]></category>
		<category><![CDATA[nook]]></category>
		<guid isPermaLink="false">http://shkspr.mobi/blog/?p=8164</guid>

					<description><![CDATA[I was inspired by Matthew Petroff&#039;s Kindle Weather Display to do something similar with my old Nook Simple Touch Reader.  I had planned to use a salvaged eInk screen - but the Nook STR (or NSTR from now on) is only £29 due to a massive price drop.  The Glow version is a mere £69 - so I bought that and have set my old NSTR to work as a &#34;Family Display Screen&#34;.  The idea is that this will stay by t…]]></description>
										<content:encoded><![CDATA[<p>I was inspired by <a href="http://www.mpetroff.net/archives/2012/09/14/kindle-weather-display/">Matthew Petroff's Kindle Weather Display</a> to do something similar with my old Nook Simple Touch Reader.</p>

<p>I had planned to use a <a href="https://shkspr.mobi/blog/2013/04/disassembling-an-ereader/" title="Disassembling an eReader">salvaged eInk screen</a> - but the Nook STR (or NSTR from now on) <a href="http://www.theregister.co.uk/2013/05/01/barnes_and_nobles_slashes_nook_prices/">is only £29 due to a massive price drop</a>.  The Glow version is a mere £69 - so I bought that and have set my old NSTR to work as a "Family Display Screen".</p>

<p>The idea is that this will stay by the front door, show today's weather, mine and my wife's calendar, as well as other useful bits of information.</p>

<h2 id="step-1-rooting"><a href="https://shkspr.mobi/blog/2013/05/rooting-the-nook/#step-1-rooting">Step 1 - Rooting</a></h2>

<p>It's now dead easy to root the NSTR using NookManager.</p>

<ul>
    <li><a href="http://forum.xda-developers.com/showthread.php?t=2040351">Download NookManager from XDA</a>.</li>
    <li>Unzip the file - there should be a disk image in there; "NookManager.img"</li>
    <li>You'll need to use a micro SD card to create a bootable disk.  In Linux it's as simple as <pre>dd if=NookManager.img of=/dev/sdb1 bs=1M</pre> Windows and Mac users, will have to find tools to help them.</li>
    <li>Turn off your NSTR (hold down the power button on the back, then confirm on screen).</li>
    <li>Stick the micro SD card into the NSTR.</li>
    <li>Turn on the NSTR and follow the on-screen instructions.</li>
</ul>

<p>And that's pretty much it!</p>

<p>There are, effectively, two options for how to proceed.</p>

<ol>
    <li>Point the default browser at a web page and use meta-refresh / JavaScript to update it every so often.</li>
    <li>Automatically push an image to the NSTR to be used as its default screensaver</li>
</ol>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=8164&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2013/05/rooting-the-nook/feed/</wfw:commentRss>
			<slash:comments>7</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Disassembling an eReader]]></title>
		<link>https://shkspr.mobi/blog/2013/04/disassembling-an-ereader/</link>
					<comments>https://shkspr.mobi/blog/2013/04/disassembling-an-ereader/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Sun, 14 Apr 2013 10:59:54 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[511eb]]></category>
		<category><![CDATA[ebook]]></category>
		<category><![CDATA[eink]]></category>
		<category><![CDATA[elonex]]></category>
		<category><![CDATA[hacking]]></category>
		<category><![CDATA[pvi]]></category>
		<category><![CDATA[screen]]></category>
		<category><![CDATA[waterstones]]></category>
		<guid isPermaLink="false">http://shkspr.mobi/blog/?p=8027</guid>

					<description><![CDATA[I&#039;ve always loved taking things apart. I remember, as a child, trying to sneak a set of screwdrivers onto a transatlantic flight. I wanted to see how the aeroplane worked and figured that unscrewing vital components while in flight would be just fine.  I&#039;ve (mostly) grown out of the habit of tearing down things which are currently useful, and tend to wait until they reach their natural end before …]]></description>
										<content:encoded><![CDATA[<p>I've always loved taking things apart. I remember, as a child, trying to sneak a set of screwdrivers onto a transatlantic flight. I wanted to see how the aeroplane worked and figured that unscrewing vital components while in flight would be just fine.</p>

<p>I've (mostly) grown out of the habit of tearing down things which are currently useful, and tend to wait until they reach their natural end before poking them with sharpened metal.</p>

<p>In late 2009, I purchased the Elonex E511EB from Waterstones. <a href="https://shkspr.mobi/blog/2009/12/review-elonex-511eb-from-waterstones/">My review of it on this blog was incredibly popular</a> - with over 250 comments!</p>

<p>As much as I loved the 511EB, it is well past its useful lifespan. I've since got a nook and my wife has a Kindle. The Elonex still works, but it's a little slow and clunky.  So - time to break out those screwdrivers and see if I can reuse the eInk screen for something else.</p>

<p>After unscrewing the back and cracking off the case, this is what I found (click the images to embiggen them).</p>

<p><a href="https://shkspr.mobi/blog/wp-content/uploads/2013/04/Board-and-Battery.jpg"><img src="https://shkspr.mobi/blog/wp-content/uploads/2013/04/Board-and-Battery-1024x768.jpg" alt="Board and Battery" width="1024" height="768" class="alignnone size-large wp-image-8031"></a></p>

<p>The board, made by <a href="https://web.archive.org/web/20130315163415/https://www.hanvon.com/en/products/ebook/products-n520.html">Hanvon</a>, runs Windows CE, and appears to be cobbled together from the most random of parts.  Here's a close up of it
<a href="https://shkspr.mobi/blog/wp-content/uploads/2013/04/Bare-Board.jpg"><img src="https://shkspr.mobi/blog/wp-content/uploads/2013/04/Bare-Board-1024x768.jpg" alt="Bare Board" width="1024" height="768" class="alignnone size-large wp-image-8029"></a></p>

<p>This really is a Frankenstein's monster of a device. Despite having no wireless capabilities, there's space for an antenna! The ribbon connector clip doesn't attach to anything.
<a href="https://shkspr.mobi/blog/wp-content/uploads/2013/04/Antenna.jpg"><img src="https://shkspr.mobi/blog/wp-content/uploads/2013/04/Antenna.jpg" alt="Antenna" width="816" height="423" class="alignnone size-full wp-image-8028"></a></p>

<p>In fact, of the three ribbon connectors present, only the one on the left is connected to anything!
<a href="https://shkspr.mobi/blog/wp-content/uploads/2013/04/Ribbon-Connectors.jpg"><img src="https://shkspr.mobi/blog/wp-content/uploads/2013/04/Ribbon-Connectors-1024x768.jpg" alt="Ribbon Connectors" width="1024" height="768" class="alignnone size-large wp-image-8046"></a>
I assume the large empty space is for a WiFi / 3G modem to be coupled to the antenna and the smaller ribbon latch.
Perhaps the one on the right is for a touchscreen digitizer?</p>

<p>To the left of the board is a random switch. It doesn't appear to be connected to anything else.  It's not even accessible when the device is assembled.
<a href="https://shkspr.mobi/blog/wp-content/uploads/2013/04/Random-Switch.jpg"><img src="https://shkspr.mobi/blog/wp-content/uploads/2013/04/Random-Switch.jpg" alt="Random Switch" width="898" height="402" class="alignnone size-large wp-image-8032"></a></p>

<p>The speakers are fairly cheap and don't hide anything of importance.
<a href="https://shkspr.mobi/blog/wp-content/uploads/2013/04/Behind-the-speakers.jpg"><img src="https://shkspr.mobi/blog/wp-content/uploads/2013/04/Behind-the-speakers-1024x807.jpg" alt="Behind the speakers" width="1024" height="807" class="alignnone size-large wp-image-8030"></a></p>

<p>For the chip nerds among you, this is what's driving the engine:</p>

<p>The CPU is the <a href="http://web.archive.org/web/20121231232353/http://en.ingenic.cn/product.aspx?ID=60">Ingenic JZ4740</a>. Interestingly, this chip is perfectly suited to <a href="http://code.google.com/p/jz-hacking/wiki/Index">running Linux</a>. Which makes Hanvon's decision to run Windows CE all the more bizarre.
<a href="https://shkspr.mobi/blog/wp-content/uploads/2013/04/CPU.jpg"><img src="https://shkspr.mobi/blog/wp-content/uploads/2013/04/CPU.jpg" alt="CPU" width="875" height="770" class="alignnone size-full wp-image-8044"></a></p>

<p>The eInk controller is the <a href="https://web.archive.org/web/20130524021749/http://vdc.epson.com/index.php?option=com_docman&amp;task=cat_view&amp;gid=289&amp;Itemid=99">Epson D135211B2</a>.
<a href="https://shkspr.mobi/blog/wp-content/uploads/2013/04/Epson-Controller.jpg"><img src="https://shkspr.mobi/blog/wp-content/uploads/2013/04/Epson-Controller-747x1024.jpg" alt="Epson Controller" width="747" height="1024" class="alignnone size-large wp-image-8045"></a>
According to this <a href="http://vi4.blogspot.co.uk/2011/01/project-gw-eb6510-hacking-1.html">Chinese hacker's website</a>, that's the same version of controller used to work the Kindle's eInk screen.</p>

<p>Connecting the eInk screen to the board is this component from <a href="http://www.ichia.com/">Ichia</a>.
<a href="https://shkspr.mobi/blog/wp-content/uploads/2013/04/Screen-Connector-1.jpg"><img src="https://shkspr.mobi/blog/wp-content/uploads/2013/04/Screen-Connector-1-1024x427.jpg" alt="Screen Connector 1" width="1024" height="427" class="alignnone size-large wp-image-8033"></a></p>

<p>The board itself has very tiny torx screws holding it in place.  Once removed, they reveal:
<a href="https://shkspr.mobi/blog/wp-content/uploads/2013/04/Underside.jpg"><img src="https://shkspr.mobi/blog/wp-content/uploads/2013/04/Underside-1024x690.jpg" alt="Underside" width="1024" height="690" class="alignnone size-large wp-image-8048"></a></p>

<p>Nothing of consequence.</p>

<h2 id="what-to-do-with-the-screen"><a href="https://shkspr.mobi/blog/2013/04/disassembling-an-ereader/#what-to-do-with-the-screen">What To Do With The Screen?</a></h2>

<p>So, I have an 800*600 eInk screen, in reasonable condition, just begging to be put to good use.
<a href="https://shkspr.mobi/blog/wp-content/uploads/2013/04/Screen-Bare.jpg"><img src="https://shkspr.mobi/blog/wp-content/uploads/2013/04/Screen-Bare-1018x1024.jpg" alt="Screen Bare" width="1018" height="1024" class="alignnone size-large wp-image-8047"></a></p>

<p>Some clever people, like <a href="http://www.mpetroff.net/archives/2012/09/14/kindle-weather-display/">Matthew Petroff</a>, have turned their Kindles into amazing displays - but that relies on the Kindle having a network connection.  As does the amazing <a href="http://maxogden.com/kindleberry-wireless.html">Kindleberry project</a> which links the Kindle to a Raspberry Pi.</p>

<p>The 511EB is dumb. Dumb as a box of rocks.  There's no networking, so that's out.  The system is capable of displaying PNGs, but that would require mounting the internal memory, uploading, unmounting, rebooting, and automatically opening an image.  Not feasible.</p>

<p>So, what I want to see is if it's possible to control the eInk screen directly from something like the Raspberry Pi.</p>

<p>The screen connector is the <a href="https://datasheet4u.com/datasheet/Prime-View/ED050SC3-730401">ED050SC3</a>(LF)
<a href="https://shkspr.mobi/blog/wp-content/uploads/2013/04/Screen-Connector-2.jpg"><img src="https://shkspr.mobi/blog/wp-content/uploads/2013/04/Screen-Connector-2-1024x341.jpg" alt="Screen Connector 2" width="1024" height="341" class="alignnone size-large wp-image-8034"></a>
It's the same screen used for lots of 5 inch PVI displays.</p>

<p>Now, all I need to do is find some (simple) way to drive the screen.  Any bright ideas, people?</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=8027&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2013/04/disassembling-an-ereader/feed/</wfw:commentRss>
			<slash:comments>11</slash:comments>
		
		
			</item>
	</channel>
</rss>
