<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>rmkit</title>
    <description>rmkit's development blog
</description>
    <link>/</link>
    <atom:link href="/feed.xml" rel="self" type="application/rss+xml"/>
    <pubDate>Mon, 01 Apr 2024 17:56:42 -0700</pubDate>
    <lastBuildDate>Mon, 01 Apr 2024 17:56:42 -0700</lastBuildDate>
    <generator>Jekyll v3.8.6</generator>
    
      
        <item>
          <title>rmkit + fbink = more kobo (2024)</title>
          <description>&lt;p&gt;My new year’s project for 2024 was to add Kobo support to rmkit. If this is giving
you deja vu, that’s because &lt;a href=&quot;/rmkit-comes-to-kobo&quot;&gt;I had the same project for 2022&lt;/a&gt; :-D&lt;/p&gt;

&lt;p&gt;Thanks to help from NiLuJe, elinkser, pgaskin, sherm_p and others, rmkit now
supports &lt;a href=&quot;https://github.com/NiLuJe/FBInk/&quot;&gt;FBInk&lt;/a&gt; as a backend. What this
means is that rmkit will support many more Kobo devices out of the box.  In
fact, rmkit now has the potential to support other devices that are supported
by FBInk.&lt;/p&gt;

&lt;p&gt;If you have a kobo, you are able to use the KoboRoot.tgz on the build server to
easily install remux and other applications.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://imgur.com/a/NyP6Mt9&quot;&gt;See remux and other apps in action on the Libra H20&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.mobileread.com/forums/showthread.php?t=359125&quot;&gt;See the announcement post on MR here&lt;/a&gt;&lt;/p&gt;

&lt;h2 id=&quot;supported-platforms&quot;&gt;Supported platforms&lt;/h2&gt;

&lt;p&gt;All platforms that fbink supports should now work with rmkit, minus a few
exceptions (f.e. the KA1)&lt;/p&gt;

&lt;h2 id=&quot;what-it-took-to-get-working&quot;&gt;What it took to get working&lt;/h2&gt;

&lt;p&gt;In order to get Kobo support working, a few things had to happen:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Use FBInk as a framebuffer&lt;/li&gt;
  &lt;li&gt;Use FBInk’s rotation quirks to set the alignment of the display and input&lt;/li&gt;
  &lt;li&gt;Add support to the build actions for compiling FBInk and linking against it&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;installation&quot;&gt;Installation&lt;/h2&gt;

&lt;p&gt;To install it, copy KoboRoot.tgz to KOBOReader/.kobo after mounting the device as USB storage, then eject the drive.&lt;/p&gt;

&lt;p&gt;It will install remux + a few applications (but not simon tatham’s puzzles yet). After rebooting, you will be able to swipe up the side of the Kobo to bring up remux. To disable remux, edit KOBOReader/.adds/rmkit/ and remove the file “enable_remux”.&lt;/p&gt;

</description>
          <pubDate>Fri, 16 Feb 2024 00:00:00 -0800</pubDate>
          <link>/rmkit-comes-to-kobo-with-fbink/</link>
          <guid isPermaLink="true">/rmkit-comes-to-kobo-with-fbink/</guid>
          
          
          <category>code</category>
          
        </item>
      
    
      
        <item>
          <title>News update: January 2024</title>
          <description>&lt;h2 id=&quot;community-happening&quot;&gt;community happening&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;rmkit has adopted the puzzles repo from mrichards42&lt;/li&gt;
  &lt;li&gt;Eeems has been working on some awesome display server ideas&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/Jayy001/RmAnki&quot;&gt;rmAnki&lt;/a&gt; is an app for anki flash cards&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/tenJirka/reGenda&quot;&gt;regenda&lt;/a&gt; is an app for displaying read only agendas&lt;/li&gt;
  &lt;li&gt;mb has been working on an alternative to ddvk-hacks for xochitl 3.X&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;rmkit-happenings&quot;&gt;rmkit happenings&lt;/h2&gt;

&lt;p&gt;General improvements:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Add support for scene stacks: this allows dropdowns within dialogs and more&lt;/li&gt;
  &lt;li&gt;Fix image handling (yet again) to properly use 4 channels&lt;/li&gt;
  &lt;li&gt;Add an API to remux for common actions (thanks Eeems!)&lt;/li&gt;
  &lt;li&gt;Fix sporadic diacritic crashes for non ASCII characters&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Kobo support stuff:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Add support for Kobo Elipsa 2E stylus&lt;/li&gt;
  &lt;li&gt;Add touch support to harmony when stylus is not available&lt;/li&gt;
&lt;/ul&gt;
</description>
          <pubDate>Mon, 01 Jan 2024 00:00:00 -0800</pubDate>
          <link>/news/2024-01/</link>
          <guid isPermaLink="true">/news/2024-01/</guid>
          
          
          <category>code</category>
          
        </item>
      
    
      
        <item>
          <title>News update: August 2023</title>
          <description>&lt;h2 id=&quot;community-happening&quot;&gt;Community Happening&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/bkirwi/sill&quot;&gt;sill&lt;/a&gt; is an editor and terminal emulator that supports handwriting&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/bkirwi/folly&quot;&gt;folly&lt;/a&gt; is an interactive fiction interpreter&lt;/li&gt;
  &lt;li&gt;an &lt;a href=&quot;https://github.com/Jayy001/RmAnki&quot;&gt;anki&lt;/a&gt; trainer&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;rmkit-happening&quot;&gt;rmkit happening&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;add Tables to iago&lt;/li&gt;
  &lt;li&gt;Many fixes from Eeems: build fixes, nao fixes and more&lt;/li&gt;
  &lt;li&gt;Add swipe-up and swipe-down to genie&lt;/li&gt;
  &lt;li&gt;rpncalc upgrades&lt;/li&gt;
&lt;/ul&gt;
</description>
          <pubDate>Sat, 12 Aug 2023 00:00:00 -0700</pubDate>
          <link>/news/2023-08/</link>
          <guid isPermaLink="true">/news/2023-08/</guid>
          
          
          <category>code</category>
          
        </item>
      
    
      
        <item>
          <title>E-ink is so Retropunk</title>
          <description>&lt;p&gt;I’ve long been struggling to describe why e-ink is so much fun for me, but I
think I’ve finally realized what it is: &lt;strong&gt;e-ink is just so so so retropunk&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://i.imgur.com/8760cI9.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;An e-ink device is a hacker’s dream - or at least, this hacker’s dream.  They
are a return to the magical feeling of computers of the 80s and 90s. It’s a
world where &lt;del&gt;Microsoft&lt;/del&gt; Windows and &lt;del&gt;Apple&lt;/del&gt; Mac OS X never existed and we
don’t have to suffer with abstractions on top of abstractions.  It’s DOS for
the 2020s. It’s graphing calculators for grown-ups.&lt;/p&gt;

&lt;h2 id=&quot;features&quot;&gt;Features&lt;/h2&gt;

&lt;p&gt;The e-ink devices I favor are low powered ARM devices running linux without a
display server or gigabytes of RAM. Let’s break down why that’s so awesome:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;e-ink: The display is visible in the light of day :-D&lt;/li&gt;
  &lt;li&gt;Low Powered: They can last for weeks on a single charge&lt;/li&gt;
  &lt;li&gt;ARM is a simple architecture with a low instruction count and even lower cost&lt;/li&gt;
  &lt;li&gt;Linux: as much as I like it, Android is a complicated mess&lt;/li&gt;
  &lt;li&gt;Apps are simple: they talk to the kernel to read input and draw directly to the framebuffer&lt;/li&gt;
  &lt;li&gt;Low RAM and slow CPUs: There’s no room to build complicated stacks of software, which means no window managers, no browsers and definitely no electron apps&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As similar as they are to the computers of the early 90s, they are different in
some tangible ways:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;The resolution is much higher than an old computer - The PPI is between 200 - 300&lt;/li&gt;
  &lt;li&gt;All devices supports touch events, some even support a pen stylus&lt;/li&gt;
  &lt;li&gt;They are super portable, weighing between 200 - 400 grams, with displays ranging from 6” to 10”&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;the-software&quot;&gt;The Software&lt;/h2&gt;

&lt;p&gt;Since the devices are niche, the software ecosystem is way more &lt;strong&gt;homebrew&lt;/strong&gt;
(as in the &lt;a href=&quot;https://en.wikipedia.org/wiki/Homebrew_Computer_Club&quot;&gt;Homebrew Computing
Club&lt;/a&gt;): people write and
share their apps and the community is tight knit. The people who use eink
devices are enthusiasts: they’ve given up the joys of color displays to work on
these under-powered devices that are devoid of app stores, tracking pixels, pay
to play features and constant distractions. There’s no email on these devices,
there’s no chat or social networks, there’s only simple applications.&lt;/p&gt;

&lt;p&gt;Don’t be fooled though: the device constraints lead to interesting and quirky
software. In the &lt;a href=&quot;https://toltec-dev.org&quot;&gt;reMarkable eco-system&lt;/a&gt;, there’s dozens of
applications, including:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;multi-tasking application launchers like &lt;a href=&quot;https://github.com/Eeems/oxide/&quot;&gt;oxide&lt;/a&gt; and &lt;a href=&quot;https://github.com/rmkit-dev/rmkit/tree/master/src/remux&quot;&gt;remux&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/timower/rM2-stuff&quot;&gt;terminal emulators&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;an &lt;a href=&quot;https://github.com/bkirwi/folly&quot;&gt;interactive fiction interpreter&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;an &lt;a href=&quot;https://github.com/bkirwi/sill&quot;&gt;experimental editor &amp;amp; shell that you can write into&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://rmkit.dev/apps/harmony&quot;&gt;a procedural drawing app with layers&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;alternative ebook readers like &lt;a href=&quot;https://github.com/koreader/koreader/&quot;&gt;koreader&lt;/a&gt; and &lt;a href=&quot;https://github.com/LinusCDE/plato/&quot;&gt;plato&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;a &lt;a href=&quot;https://rmkit.dev/apps/sas&quot;&gt;simple app script&lt;/a&gt; for building applications that follows the unix philosphy&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/LinusCDE/chessmarkable&quot;&gt;a chess board&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;even a &lt;a href=&quot;https://github.com/LinusCDE/doomarkable&quot;&gt;port of doom&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;and so &lt;a href=&quot;https://rmkit.dev&quot;&gt;much more&lt;/a&gt; - like &lt;a href=&quot;https://toltec-dev.org/stable/&quot;&gt;much, much, more&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For the Kobo, that’s also some interesting things going on - with &lt;a href=&quot;https://github.com/NiLuJe/&quot;&gt;NiLuJE&lt;/a&gt;, &lt;a href=&quot;https://pgaskin.net&quot;&gt;pgaskin&lt;/a&gt; and others hacking away:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/Kobo-InkBox/inkbox&quot;&gt;InkBox&lt;/a&gt; - an alternative OS with many built in applications&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/koreader/koreader/&quot;&gt;KoReader&lt;/a&gt; - koreader is supported on almost all eink platforms, no surprise it works on Kobo&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://pgaskin.net/NickelMenu/&quot;&gt;NickelMenu&lt;/a&gt; - an augment to the Kobo’s UI system that adds many features&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Since eink is currently niche, it also means green fields: there are lots of
opportunities to write applications that fills out the ecosystem. In short, a
hacker’s playground.&lt;/p&gt;

&lt;h2 id=&quot;how-to-get-started&quot;&gt;How to get started&lt;/h2&gt;

&lt;p&gt;Convinced that you should hack on eink devices? Grab a reMarkable or Kobo and
get hacking ;) Join the &lt;a href=&quot;https://discord.gg/rdFCveBJw7&quot;&gt;reMarkable discord
server&lt;/a&gt; or browse the &lt;a href=&quot;https://www.mobileread.com/forums/forumdisplay.php?f=247&quot;&gt;Mobile Read Kobo
Forums&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&quot;remarkable&quot;&gt;remarkable&lt;/h3&gt;

&lt;p&gt;The &lt;a href=&quot;https://toltec-dev.org&quot;&gt;toltec repository&lt;/a&gt; is a good place to get started&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;one of the maintainers, Eeems, &lt;a href=&quot;https://eeems.website/toltec/&quot;&gt;has written a great
tutorial&lt;/a&gt;. Another good start is the 
&lt;a href=&quot;https://github.com/reHackable/awesome-reMarkable&quot;&gt;awesome reMarkable&lt;/a&gt; repo.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;kobo&quot;&gt;kobo&lt;/h3&gt;

&lt;p&gt;The main piece of software to get started hacking is
&lt;a href=&quot;https://www.mobileread.com/forums/showthread.php?t=254214&quot;&gt;KoboStuff&lt;/a&gt; from
NiLuJE which includes a tarball for getting SSH up and running instead of having
to use telnet.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.mobileread.com/forums/showthread.php?t=323148&quot;&gt;Turn &lt;code class=&quot;highlighter-rouge&quot;&gt;devmodeon&lt;/code&gt; to be able to telnet in&lt;/a&gt;,then turn on SSH. It looks complex, but it isn’t so bad&lt;/p&gt;

&lt;h2 id=&quot;caveats&quot;&gt;Caveats&lt;/h2&gt;

&lt;p&gt;These devices are not all rosy fun times, though:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;the rM2 uses a proprietary display driver (SWTCON) that’s hosted within their UI (Xochitl). In order
for applications to work on the rM2, a shim was built that lets us repurpose the driver within Xochitl. Unfortunately, the shim &lt;a href=&quot;https://github.com/ddvk/remarkable2-framebuffer/issues/18&quot;&gt;needs to be updated for every release&lt;/a&gt; to give it the correct binary addresses to hook. There’s an &lt;a href=&quot;https://github.com/matteodelabre/waved&quot;&gt;alternative display driver&lt;/a&gt; that is in development.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;the rM1 is preferable to the rM2 for that reason, but the rM1 battery life is not as good! It seems they didn’t connect the peripherals (wacom display) to regulators, so the device only gets a few days of idle battery life.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;the Kobo does not have strong package management: to install software, typically a KoboRoot.tgz is provided and that gets unpacked after the next reboot. To uninstall software: you better hope the dev supplied instructions or an uninstall script ;)&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;why-write-a-post-now&quot;&gt;Why write a post now?&lt;/h2&gt;

&lt;p&gt;Several years ago, I started hacking on e-ink devices and had an enormous
amount of fun writing applications and seeing what others have built.
Unfortunately, I’ve had several false starts with writing about e-ink: whether
it was about what I’ve actually done, or the lessons learned along the way or
even a set of things to consider when developing e-ink apps, the posts would
lay half finished because they just never felt compelling - my enthusiasm for
e-ink just wasn’t coming through.&lt;/p&gt;

&lt;p&gt;Instead of trying to push any of those posts to completion, I’ve decided to try
to articulate what is so cool about e-ink to me.&lt;/p&gt;

&lt;h2 id=&quot;appendix-hacker-unfriendly-devices&quot;&gt;Appendix: Hacker unfriendly devices&lt;/h2&gt;

&lt;h4 id=&quot;kindles&quot;&gt;Kindles&lt;/h4&gt;

&lt;p&gt;The Kindle requires a &lt;a href=&quot;https://www.mobileread.com/forums/showthread.php?t=320564&quot;&gt;jailbreak to
use&lt;/a&gt; and is running
a modified version of Android OS (Kindle Fire). Newer FW versions may be JB
resistant. The Kindle Scribe is still secured, though.  For this reason, I
don’t particularly recommend the Kindle devices.&lt;/p&gt;

&lt;h4 id=&quot;onyx&quot;&gt;Onyx&lt;/h4&gt;

&lt;p&gt;In every eink thread that comes up, the Onyx is brought up as not following the
GPL: &lt;a href=&quot;https://www.reddit.com/r/Onyx_Boox/comments/p9ztru/lets_help_onyx_become_a_better_company/&quot;&gt;they use a modified linux kernel and haven’t published the source for it&lt;/a&gt;.&lt;/p&gt;

&lt;h4 id=&quot;pine&quot;&gt;Pine&lt;/h4&gt;

&lt;p&gt;The Pine Note is cool and open, but its software is still in development. Use
only if you are willing to take on an &lt;a href=&quot;https://wiki.pine64.org/wiki/PineNote#State_of_the_software&quot;&gt;early product aimed at early adopters and
developers&lt;/a&gt; - In other words,
maybe the Pine Note is too hacker friendly.&lt;/p&gt;

&lt;h2 id=&quot;appendix-responses-to-hn-comments&quot;&gt;Appendix: Responses to HN Comments&lt;/h2&gt;

&lt;blockquote&gt;
  &lt;p&gt;Can you brick your RM2 by playing with this? I’m interested, but the device was a bit pricey for potentially destructive fooling around.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;sort of - you can soft brick it and cause the screen to not display something,
but you will still have SSH and can undo that. If you lose SSH, you can always
recover but it’s more work. I understand this is scary, but I’ve never bricked
myself because I have my SSH keys installed.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;when you’re spending multiple hundreds of dollars for a new part, I don’t consider that the hacker realm.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;you can find rM1 for under $200 on ebay, a kobo clara is under $100, but
regardless: hacking is orthogonal to price. i understand the concern, though&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Retro? Sure. Punk? Not when the patents are tightly held by a greedy patent troll who seems to do everything in their power to stop hobbyists and hackers&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;a lot of comments are talking about what retro and punk mean and whether they
are applicable. i like the back and forth going on. the thought i had in mind
when i called it retropunk is: &lt;em&gt;what if there was an alternative path that was
taken for computing from the 80s to today?&lt;/em&gt;&lt;/p&gt;
</description>
          <pubDate>Tue, 01 Aug 2023 00:00:00 -0700</pubDate>
          <link>/eink-is-so-retropunk/</link>
          <guid isPermaLink="true">/eink-is-so-retropunk/</guid>
          
          
          <category>code</category>
          
        </item>
      
    
      
        <item>
          <title>News update: October 2022</title>
          <description>&lt;h2 id=&quot;community-happening&quot;&gt;Community Happening&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;xochitl releases yet more updates, rm2fb is catching up&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/Jayy001/Carta/&quot;&gt;carta GUI library&lt;/a&gt; is released which is a wrapper around simple app script for python&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;rmkit-happening&quot;&gt;rmkit happening&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;add a new binary &lt;code class=&quot;highlighter-rouge&quot;&gt;eclear&lt;/code&gt; for clearing the screen&lt;/li&gt;
  &lt;li&gt;add a new widget to simple, the &lt;code class=&quot;highlighter-rouge&quot;&gt;range&lt;/code&gt; widget&lt;/li&gt;
&lt;/ul&gt;
</description>
          <pubDate>Sat, 15 Oct 2022 00:00:00 -0700</pubDate>
          <link>/news/2022-10/</link>
          <guid isPermaLink="true">/news/2022-10/</guid>
          
          
          <category>code</category>
          
        </item>
      
    
      
        <item>
          <title>News update: May 2022</title>
          <description>&lt;h2 id=&quot;community-happening&quot;&gt;Community Happening&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;New xochitl update released, toltec support available in stable and testing&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;rmkit-happening&quot;&gt;rmkit happening&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;harmony now supports layers! thanks for all the support, hirako! &lt;a href=&quot;https://www.reddit.com/r/RemarkableTablet/comments/tkdupg/sketching_with_harmonys_new_layer_feature/&quot;&gt;see this reddit post for examples&lt;/a&gt;. this update is available in toltec!&lt;/li&gt;
  &lt;li&gt;better memory usage for harmony&lt;/li&gt;
  &lt;li&gt;better memory usage for remux&lt;/li&gt;
&lt;/ul&gt;
</description>
          <pubDate>Fri, 06 May 2022 00:00:00 -0700</pubDate>
          <link>/news/2022-05/</link>
          <guid isPermaLink="true">/news/2022-05/</guid>
          
          
          <category>code</category>
          
        </item>
      
    
      
        <item>
          <title>News update: February 2022</title>
          <description>&lt;h2 id=&quot;community-happening&quot;&gt;Community Happening&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;New xochitl update released (2.12.5.257), toltec support now available in testing&lt;/li&gt;
  &lt;li&gt;New app spotted: &lt;a href=&quot;https://github.com/tatjam/rmgraph&quot;&gt;rmgraph&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Write up of &lt;a href=&quot;https://medium.com/unofficial-remarkable/better-remarkable-sketching-with-harmony-31445389b699&quot;&gt;harmony sketching&lt;/a&gt; spotted. Also see &lt;a href=&quot;https://old.reddit.com/r/RemarkableTablet/comments/sx48s7/sketching_with_harmony_om_the_remarkable_1/&quot;&gt;reddit post&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;rmkit-happening&quot;&gt;rmkit happening&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;New app: &lt;a href=&quot;/apps/dumbskull&quot;&gt;dumbskull&lt;/a&gt; which has donsol and scoundrel games&lt;/li&gt;
  &lt;li&gt;New app: &lt;a href=&quot;/apps/rpncalc&quot;&gt;rpncalc&lt;/a&gt; added to toltec&lt;/li&gt;
  &lt;li&gt;remux: added compression to saved framebuffers, saving 5+MB of RAM for each app&lt;/li&gt;
  &lt;li&gt;minesweeper: fix sporadic crashes&lt;/li&gt;
  &lt;li&gt;genie: add palm recognition to prevent accidental palm taps&lt;/li&gt;
&lt;/ul&gt;
</description>
          <pubDate>Sun, 20 Feb 2022 00:00:00 -0800</pubDate>
          <link>/news/2022-02/</link>
          <guid isPermaLink="true">/news/2022-02/</guid>
          
          
          <category>code</category>
          
        </item>
      
    
      
        <item>
          <title>rmkit comes to kobo</title>
          <description>&lt;p&gt;My new year’s project for 2022 was to add Kobo support to rmkit. I’m now glad
to announce that it all works! If you have a kobo, you are able to use the
KoboRoot.tgz on the build server to easily install remux and other
applications.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://imgur.com/a/NyP6Mt9&quot;&gt;See remux and other apps in action on the Libra H20&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A &lt;a href=&quot;https://old.reddit.com/r/kobo/comments/s4n1hu/show_homebrew_apps_on_kobo_puzzles_wordle/&quot;&gt;reddit post was made&lt;/a&gt;, as well.&lt;/p&gt;

&lt;h2 id=&quot;supported-platforms&quot;&gt;Supported platforms&lt;/h2&gt;

&lt;p&gt;Currently, the Libra H20 and Clara are supported, but if you have any requests, please
get in touch and I’ll look into enabling more devices. Individual devices have to be enabled
so as to not cause issues, so seriously: please get in touch!&lt;/p&gt;

&lt;h2 id=&quot;what-it-took-to-get-working&quot;&gt;What it took to get working&lt;/h2&gt;

&lt;p&gt;In order to get Kobo support working, a few things had to happen:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;support rotation in remux and other apps. remux automatically kills itself if the screen rotates and starts again&lt;/li&gt;
  &lt;li&gt;embed the font into the actual binaries since Kobo fonts seem to work a bit weirdly&lt;/li&gt;
  &lt;li&gt;support dynamic bpp for different applications, like KOReader&lt;/li&gt;
  &lt;li&gt;update all applications to work with kobo dimensions&lt;/li&gt;
  &lt;li&gt;add a KoboRoot.tgz step to the build system to make it easy to install packages&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;installation&quot;&gt;Installation&lt;/h2&gt;

&lt;p&gt;To install it, copy KoboRoot.tgz to KOBOReader/.kobo after mounting the device as USB storage, then eject the drive.&lt;/p&gt;

&lt;p&gt;It will install remux + a few applications (but not simon tatham’s puzzles yet). After rebooting, you will be able to swipe up the side of the Kobo to bring up remux. To disable remux, edit KOBOReader/.adds/rmkit/ and remove the file “enable_remux”.&lt;/p&gt;

</description>
          <pubDate>Tue, 01 Feb 2022 00:00:00 -0800</pubDate>
          <link>/rmkit-comes-to-kobo/</link>
          <guid isPermaLink="true">/rmkit-comes-to-kobo/</guid>
          
          
          <category>code</category>
          
        </item>
      
    
      
        <item>
          <title>News update: January 2022</title>
          <description>&lt;h2 id=&quot;community-happening&quot;&gt;Community Happening&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/Eeems-Org/oxide/releases/tag/v2.3&quot;&gt;Oxide 2.3 released!&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;KOReader 2022.01  available in Toltec&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;rmkit-happening&quot;&gt;rmkit happening&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;minesweeper bugfixes and new layout&lt;/li&gt;
  &lt;li&gt;wordle clone added to remarkable&lt;/li&gt;
  &lt;li&gt;rmkit applications now work on the kobo libra h2o and the kobo clara HD.
    &lt;ul&gt;
      &lt;li&gt;See README.md for more details on how to install&lt;/li&gt;
      &lt;li&gt;Refactored rmkit framebuffer interactions and touch handling to be more generic&lt;/li&gt;
      &lt;li&gt;Modify apps to work at lower resolutions&lt;/li&gt;
      &lt;li&gt;Remux supports per app BPP : each app can have its own BPP, including Nickel&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;
</description>
          <pubDate>Sat, 08 Jan 2022 00:00:00 -0800</pubDate>
          <link>/news/2022-01/</link>
          <guid isPermaLink="true">/news/2022-01/</guid>
          
          
          <category>code</category>
          
        </item>
      
    
      
        <item>
          <title>howto: e-ink dev notes</title>
          <description>&lt;h3 id=&quot;how-to-draw-to-the-screen&quot;&gt;How to draw to the screen?&lt;/h3&gt;

&lt;p&gt;e-ink devices tend to be low power and run without an X server. The way they
draw to the screen is by using the framebuffer. The framebuffer is a piece of
memory that directly represents what is on screen and can usually be found at
/dev/fb0. Originally, the framebuffer represented the memory of what was being
shown on the display, but these days the framebuffer is typically emulated:
when you write to a framebuffer device, the kernel driver will copy that over
to the display.&lt;/p&gt;

&lt;p&gt;Either way, the framebuffer is a piece of memory that represents the pixels on
screen.  The pixels can be stored as 8 bit grayscale (Y8), 16 bit RGB (rgb565)
or 32 bit RGBA.&lt;/p&gt;

&lt;p&gt;The framebuffer details are usually obtained with a line like: &lt;code class=&quot;highlighter-rouge&quot;&gt;ioctl(self.fd,
FBIOGET_VSCREENINFO, &amp;amp;vinfo))&lt;/code&gt;, which will obtain the framebuffer’s width,
height and stride, as well as the bit depth and rotation of the framebuffer.&lt;/p&gt;

&lt;p&gt;The stride is the width of each line in pixels and may not line up with the
actual width. For example, the remarkable width is 1404, but the stride is 1408.
If you want to draw a straight line, you need to draw a pixel, then
advance forward 1408 pixels before drawing the next one. If you advanced
1404 pixels the line will come out distorted.&lt;/p&gt;

&lt;p&gt;On e-ink devices, writing to /dev/fb0 isn’t enough to update the display,
though.  After placing new data in the framebuffer, you need to signal the
display to update using an ioctl that specifies the region to update and the
waveform to use when updating that region. Each framebuffer driver will have a
different call to use.  A common driver is mxcfb and you need to include
&lt;code class=&quot;highlighter-rouge&quot;&gt;mxcfb.h&lt;/code&gt; which contains the relevant ioctls and structs associated with them.&lt;/p&gt;

&lt;p&gt;A typical problem people run into when trying to update the screen is that their
pixels don’t show up even after specifying the ioctl. This is likely because
the wrong waveform was used.&lt;/p&gt;

&lt;h3 id=&quot;what-are-waveforms&quot;&gt;What are waveforms?&lt;/h3&gt;

&lt;p&gt;Waveforms are how e-ink displays update what is displayed. They are typically
proprietary (secret sauce) and contain the series of pulses to send to the
screen in order to set a pixel to a specific value. They come in the form of
LUTS (lookup tables), that tell you for a given temperature and a before and
after value, what pulses you need to send. The fastest waveforms may contain 10
frames, while more detailed waveforms can have as many as 24 or more. There are
3 operations supported in the waveform: darken the pixel, lighten the pixel or
do nothing.&lt;/p&gt;

&lt;p&gt;The faster waveforms support less colors: DU (direct update) can only set
pixels to black and white but updates extremely quickly. GC4 supports four
colors and GC16 supports 16 colors. Waveforms also have algorithms for reducing
“ghosting” - when a pixel stays dark even though it’s been changed to white.&lt;/p&gt;

&lt;p&gt;See &lt;a href=&quot;https://www.waveshare.com/w/upload/c/c4/E-paper-mode-declaration.pdf for
more information on waveforms&quot;&gt;this link&lt;/a&gt; for more details on the framebuffer&lt;/p&gt;

&lt;h3 id=&quot;how-do-i-handle-input&quot;&gt;How do I handle input?&lt;/h3&gt;

&lt;p&gt;If you are using QT (like many e-ink applications do), then you don’t have to
worry too much because QT usually handles the input events for you. If you are
not using QT, then you will likely use the linux input API. The API is standard
across linux and consists of opening /dev/input/eventX (where X is a number)
and reading events from it. The main inputs supported on e-ink devices tend to
be touch (or multi-touch), buttons and a stylus. The input API generally sends
back information describing the input as a series of events followed by a SYN
event. Each datum consists of the event type, the event code and the event
value.&lt;/p&gt;

&lt;p&gt;As an example, the a touch display may send the following when you touch the display:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;EV_KEY, ToolFinger, 1
EV_ABS, ABS_X, 300
EV_ABS, ABS_Y, 500
EV_SYN
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;When you lift your finger, the following may be sent:&lt;/p&gt;

&lt;div class=&quot;highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;EV_KEY, ToolFinger, 0
EV_SYN
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Each input device will have different codes: you can find more info about them
&lt;a href=&quot;https://github.com/torvalds/linux/blob/master/include/uapi/linux/input-event-codes.h&quot;&gt;here&lt;/a&gt;.
Luckily, you don’t have to handle them yourself, you can use a library like
&lt;code class=&quot;highlighter-rouge&quot;&gt;libinput&lt;/code&gt; to take care of the heavy lifting&lt;/p&gt;

&lt;h3 id=&quot;how-to-compile-for-arm-processors&quot;&gt;How to compile for ARM processors&lt;/h3&gt;

&lt;p&gt;Typically, you want to compile your applications on a computer, but your machine
is likely using an x86 compiler, like GCC. If you compile a program with it, it will
not run on the e-ink device.&lt;/p&gt;

&lt;p&gt;To compile for e-ink, you have to &lt;code class=&quot;highlighter-rouge&quot;&gt;cross compiler&lt;/code&gt; - compile on one
architecture for another one. Some tablets release their toolkits that include
a compiler, like the remarkable, but you don’t need to use them: you can
install a cross compiler on your own. The typical one to use is
&lt;code class=&quot;highlighter-rouge&quot;&gt;arm-linux-gnueabihf-gcc&lt;/code&gt;. The chances are that your application will be
dynamically linked against glibc and other common libraries - but these
libraries will likely not be available on the tablet. You can either install
the libraries as &lt;code class=&quot;highlighter-rouge&quot;&gt;.so&lt;/code&gt; files on the tablet after cross compiling them or you
can compile your binary with the &lt;code class=&quot;highlighter-rouge&quot;&gt;-static&lt;/code&gt; flag. You may also need to use the
&lt;code class=&quot;highlighter-rouge&quot;&gt;-static-libstd++&lt;/code&gt; and &lt;code class=&quot;highlighter-rouge&quot;&gt;-static-libgcc&lt;/code&gt; flags.&lt;/p&gt;

&lt;p&gt;It’s a good idea to &lt;code class=&quot;highlighter-rouge&quot;&gt;strip&lt;/code&gt; the binary after you’ve built it to reduce its
size, otherwise you may end up with a binary that is several megabytes.&lt;/p&gt;

&lt;h3 id=&quot;what-about-rotation&quot;&gt;What about rotation?&lt;/h3&gt;

&lt;p&gt;The framebuffer typically supports rotations. You can rotate the framebuffer
by 0, 90, 180 or 270 degrees. Once the framebuffer is rotated, you also need to
rotate your input events to make sure they are consistent with the UI you are
showing.&lt;/p&gt;

&lt;p&gt;On the kobo, when the device is rotated, it will emit &lt;code class=&quot;highlighter-rouge&quot;&gt;MSC_RAW&lt;/code&gt; input events on
the button device. When those events are received, the running application will
send an instruction to the framebuffer to rotate itself and then will make a
note to translate the input events accordingly.&lt;/p&gt;
</description>
          <pubDate>Sat, 08 Jan 2022 00:00:00 -0800</pubDate>
          <link>/eink-dev-notes/</link>
          <guid isPermaLink="true">/eink-dev-notes/</guid>
          
          
          <category>code</category>
          
        </item>
      
    
  </channel>
</rss>
