The archive-bridge collection
This is a first “project archive” effort I can put a name to. Originally I was just trying to import my Apple Notes drawings from the trivial notetaking app (dumbly named trivnote); I also wanted to import my drawings from Concepts, and Samsung eventually. Then I want to get metadata from Procreate and… wait you can actually decode GoodNotes?!
I realized that this is way more than just Apple Notes. And since the second most important format I cared about, Concepts, was not getting nearly as much attention as Apple Notes had been getting, I just merged them into the shared Java package namespace I had been using for both.
The canonical source code is at
git+https://git.rapidcow.org/pub/project/archive/bridge.git.
Mirrors exist at
GitLab,
GitHub,
GitCode,
and
Gitee.
Not available on SourceHut or Codeberg since I’ve used AI
for reverse-engineering and prototyping.
archive-bridge is written in Java 17 and will remain on
Java 17 until Android considers supporting Java 21 or 25.
The package namespace is org.,
and source files under this namespace are always available
under LGPL v3+ (with the exception of AI-generated prototypes,
which are un-copyright-able and thus cannot be licensed.)
archive-bridge will also include basic applications on top of the bridge libraries; when they are created, they are will be licensed under GPL v3+ (with the same exception of AI code).
What makes for a good bridge?
A bridge is an adapter (dumb name; don’t judge me :x) for a file format for which there doesn’t exist a well-known, robust SDK. A bridge should be doable by me (that is, nothing complicated on the level of OOXML / Adobe); and it should be a relatively stable format that requires no negotiation with Internet services (that is, no live sync/polling.)
For it to be interesting, I will only bridge to formats
as close to the original, native storage as possible. That
means if you export the database as CSV, I will not parse
the CSV! (But if it is a ZIP’d CSV file, I could
consider… (I still think it is very doable to parse
that without a dedicate library though >:c
part of what makes it interesting to me is also
domain-specific file formats for which there exists no
Internet standard formats, like PNG and SGML.))
What makes for a bad bridge?
Twitter. First of all, I would personally banish something
as tumultuous as social media itself to a separate namespace,
like org.rapidcow.archive.socials; second, lots of
data require negotiation (such as liked tweets), which is not
an easy process. (Also, please don’t ask me to call it X;
I would confuse it with my X11 window system.)
The same goes for Mastodon which, albeit open source, is still far too complex for me to keep up.
What does a bridge do?
It adorns data structure with semantics. Yep, that’s about it.
(I don’t have working examples of this, so you’ll just
take my words for it. :x In a nutshell, it’s
all you can expect from object-oriented programming….)
Bridges I will work on
None of these are promises in any sense. If you need
this, it’s best that you let me know through email (and
if you are willing, send me your files for testing) so I
can get more motivation. (Sending me file does not equal
distributing it to the Internet unless you consent though!
I might have to publish the metadata like file names and
test files, so tell me if that might be a problem…
:c)
- iPhone/iPad backup created via idevicebackup2(1):
obviously to get run analysis against the data
I have, I have to actually get the files.
=n=So this is a priority. Namespace: ⟨not allocated⟩ - Apple Notes: I have 2k notes in this thing and
maybe a couple hundred drawings. (It’s ironic;
between Procreate and Apple Notes, I like to draw
in Apple Notes more because I know deep down that
I do not deserve Procreate….
XDBut its infinite vertical canvas is also what sold it; more than GoodNotes or Notability did for me honestly.) Namespace:org..rapidcow. archive. bridge. apple. notes - Concepts: I did the 14th birthday drawing for
my primary school friend in this app? I haven’t
made anything nearly as complete since. Anyways
it’s like Apple Notes drawings but goes off in infinite
directions, has super chill devs,
and has an one-time payment for indefinite export
functionalities. Android (msgpack) and iOS (binary)
will both be supported! Namespace:
org..rapidcow. archive. bridge. tophatch. concepts - Journalist: 2018 me found this somehow on the Microsoft Store? 🥴 Anyways. I have like 3 files in here but I am writing a decoder for the files. It uses something called Ink Serialized Format, whose decoder is open-source, so I suppose I don’t have to worry…
Bridges I might work on
- Penultimate: as a good exercise; though I have
nothing to recover (they are already rasterized
when I pulled them out of Evernote, and Penultimate
got discontinued by Evernote… sigh 😮💨)
I also need to wait until I can get a full iTunes back up since save to PEN format doesn’t work. - Samsung Notes: a college acquaintance already does it. It’s written in Rust, but I think he knows what he is doing… (I also don’t have anything interesting on Samsung Notes, except for a rattlesnake because I was watched this. But I’m guessing he isn’t artsy, so there is probably ink pressure stuff left to figure out. I still regard Samsung Notes as being the easier ones (if not easiest) to decode, given that it’s just JVM code (Android APK instead of Mach-O).)
- GoodNotes 5: I only care about the version that has my files. I have no interest in continuing using GoodNotes.
- Notability: same remark as GoodNotes.
- OneNote: I don’t have anything interesting there.
I might just do it for fun though. If I don’t,
I’m sure you can find plenty of
*.onedecoders though…:(