No description
Find a file
2023-08-25 16:35:27 -07:00
examples fucking works 2023-08-20 12:20:33 -07:00
mobile add drop code for txconf 2023-08-25 16:35:27 -07:00
src fucking works 2023-08-20 12:20:33 -07:00
.gitignore takes an input string and converts it to v40 qr code 2023-08-01 13:11:42 -07:00
.rustfmt.toml Dynamically choose static or streaming based on size. 2023-08-04 17:17:14 -07:00
Cargo.lock add bytechecking for txconfig, drop repr(c) 2023-08-18 16:12:54 -07:00
Cargo.toml add bytechecking for txconfig, drop repr(c) 2023-08-18 16:12:54 -07:00
LICENSE.md add version, license, and readme 2023-08-01 14:59:21 -07:00
mobile_finished.png update readme 2023-08-20 13:10:51 -07:00
mobile_receiving.png update readme 2023-08-20 13:10:51 -07:00
README.md update readme 2023-08-20 13:10:51 -07:00
VERSION add version, license, and readme 2023-08-01 14:59:21 -07:00
VERSIONING.md add version, license, and readme 2023-08-01 14:59:21 -07:00

Cuttle, a flasher with a message

Cuttle is a desktop application for transfering data from one computer to another by displaying a [possibly endless] stream of QR encoded Raptor codes, so that a camera-equipped different computer can read the QR codes and turn them back into the original content.

Tell me more!

Raptor codes are a type of fountain code; fountain codes are a way to encode data as a stream of error-correcting pieces of that data; as long as you can read some number of pieces, you can reconstruct the original data. They're named like that because you can think of them as like a fountain of water that is just pouring out. Anyone can come drink from it, and then they'll have the water. So something can just be transmitting fountain codes and not care if anyone is receiving, and receivers don't have to worry about missing something they needed; they're guaranteed to get everything they need as long as they listen long enough. I think that's pretty cool!

So the idea here is to give it a file (or short string of text) that you want transferred to a different computer (like a mobile phone running a little companion app), and it will start producing Raptor codes for that file. Each piece of Raptor code then gets encoded as a QR code, and then displayed for a period of time on the screen. The user then holds up the receiving computer's camera in order to receive the QR encoded raptor codes, and, voila, the file has been transferred!

Current status (2023-08-20)

Currently, the following is done in terms of functionality:

Desktop

  • transmit short text given on the commandline with a single qr code
  • transmit large text given on the commandline with a stream of qr codes
  • transmit small files given on the commandline with a single qr code
  • transmit large files given on the commandline with a stream of qr codes
  • receive text or files with a single qr code
  • receive text or files with a stream of qr codes

Android app

  • transmit short given text with a single qr code
  • transmit large given text with a stream of qr codes
  • transmit small files with a single qr code
  • transmit large files with a stream of qr codes
  • receive text or files with a single qr code
  • receive text or files with a stream of qr codes

The desktop app (unix-ish only; developed on linux, untested on anything else, but should run on macos) is closer to its final form in terms of UI/UX, though it currently can only transmit. The Android app is about halfway done in terms of functionality, but the UI is, shall we say, "hideous":

cuttle mobile app receiving data cuttle mobile app done receiving
data

I might take a crack at making it less hideous before I start on the mobile transmitting/desktop receiving side of the functionality, but maybe not! I often want to transfer a file or text from my phone to my desktop, and I'm willing to live with an ugly UI for a little bit.

about the name

Cuttlefish are small but very intelligent cephalopods whose bodies are covered in a 15hz multi-color, multi-polarity, pixel-mapped display that they use to visually communicate with other cuttlefish, as well as to dazzle predators and prey.