Show HN: Edsger – A handwritten Clojure REPL for the reMarkable 2

(handwritten.danieljanus.pl)

71 points | by nathell 16 hours ago

10 comments

  • LandR 1 hour ago
    This awesome! I actually had no idea I could ssh into my Remarkable and do neat stuff like this!

    > Why do it? It's so impractical!

    Because you can and it's fun is always a perfectly valid answer here!

  • jwr 11 minutes ago
    I wonder if this would be easier on the Supernote Manta with the new plugins API that they've introduced recently…
  • xnorswap 44 minutes ago
    A fun experiment, and cute if not for the lag. A full 14 seconds between the pen stopping writing and the result,

    What I'd find interesting is the trace of that 14 seconds. How much is the Remarkable processing, how much is the claude transcription, how much is the let-go start-up / processing, etc.

    • embedding-shape 36 minutes ago
      I haven't used the latest reMarkable devices, but the first/older ones takes multiple seconds to save notes to disk. I remember having similar issues for my own file syncing daemon I tried to make for my reMarkable, where it took many seconds before the filesystem event actually was fired away, it might still be the same issue today I suppose.
  • hiepph 28 minutes ago
    I’m actually impressed by the handwritten blog - really cool concept.

    Was it exported by writing on remarkable? How did he include link into the text that he wrote?

  • hailruda 28 minutes ago
    I find getting stuff up on the rM2 screen a hassle.

    The challenge comes from the way the e-paper works. To turn a pixel from white to black (or vice versa) it needs multiple actual frames. The pixel data must also be packed in a specific format. Instructions for how many frames a single operation requires are coded in a wbf[0] file, which comes included with the OEM firmware.

    The most commonly used approach is hooking into xochitl, since it handles all of the user facing stuff like the notebooks but also the actual drawing. This is somewhat brittle and tends to break with software updates, because all of the actual function addresses have to be updated as well.

    I was excited to find waved[1], a C++ library that allowed to drive the display directly using a sane API. Although it's not been updated for quite a while it still works and you can compile and run it yourself.

    Since I was interested in driving the display myself, I tried to rewriting waved in Zig. It works - I can now get pixels up on the screen. Unfortunately the code is a mess and its only redeeming quality (stemming from being written in Zig) is that I can cross compile a statically linked binary that 'just werks' using just the Zig toolchain as the only dependency. For debugging purposes, I also implemented a SDL emulator for the display. [2]

    While writing this, I stumbled upon a recent Rust implementation of the same ideas. Nice. [3]

    Since the xochitl display implementation is the most optimized, that's probably the reason why it's being used most commonly*, even though it might be 'ugly'.

    * Citation needed

    [0] https://gitlab.com/zephray/glider#understanding-waveform

    [1] https://github.com/matteodelabre/waved

    [2] https://github.com/jakubvf/dazed

    [3] https://github.com/yobert/swtcon

  • esanyapi 26 minutes ago
    How do you handle latency between handwriting recognition and REPL evaluation is there a noticeable delay before you see the output?
  • j_leboulanger 1 hour ago
    Did foo(42) just output 44 ?
    • exitb 59 minutes ago
      (+ x 2)
  • ingen0s 1 hour ago
    Very nice
    • Xmd5a 26 minutes ago
      impressive
  • delaguardo 54 minutes ago
    Now I have a reason to get reMarkable :)
  • that-guy-again 1 hour ago
    y tho