Reckoner Update August 2023

This is a sad update. I literally am further behind this month than where I was last month.

🔄 Sync Updates

So there was a breaking change in peerdart version 0.5.1 which broke data exchange. This caused me to panic a bit and then review the repository documentation. I realized then that the library which I was making the core of my synchronization strategy was in an alpha status and breaking changes like this should be expected.

🤔 Evaluating options

I then took stock of what was going on and considered my options. At that time, I was still committed to using a peer-to-peer device synchronization model. Thus I looked into figuring out how to do local device synchronization. This involves the complicated process of discovering available devices and then communicating between devices.

I tried using a package call network_discovery to find local devices and then camel to TCP communicate between devices. However, this comes with 2 critical drawbacks.

  1. This is limited to non-web platforms. This means that web browsers had no way to synchronize data
  2. This involves choosing some TCP port to use for communication which is prone to certain routers or firewall rules to block the traffic

The bigger of these two problems is the lack of a synchronization method for web.

🕸️ The Web Problem

I was about ready to abandon the web platform entirely. The big benefit of the web platform is that it provides a way for people on currently non-supported platforms. This means that I can encourage people on Windows, iOS, Mac, and Google Play Android devices to use the web version of the app. The implementation I had for the web platform was using sql.js which was what had the most cross-browser support when I first implemented. This implementation is fairly slow though requiring the entire database to be loaded in memory and the entire database to be written on a change.

As I was about to remove it, I checked Drift and found out that there is finally a stable version of the WASM database which is far more performant than the sql.js implementation. Thus I decided to keep the web implementation and figure out how I would enable device synchronization on web.

Ultimately, I resurrected the old PocketBase synchronization method. So now we will be supporting two methods of data synchronization: local and self-hosted.

🔮 Future of Peer-to-Peer Sync

So, there is a problem with the current local synchronization implementation; there isn’t an easy way to test this. In order to test it, it would require me to setup separate devices and then connect them. That with the drawbacks previously aforementioned, I will probably abandon local synchronization and look at re-adding web-based peer-to-peer synchronization. The biggest takeaway is to fix the versions for alpha libraries.

⏳ So How Long Till Release?

Uhhh, I don’t know 🤷. I know what I want to get done before I release this to the public. I nominally could release it now as a single device app. However, for what I personally want, the synchronization service is necessary. I wanted a peer-to-peer sync service as I don’t want to self-host anymore. With that said, the peer-to-peer library just isn’t stable enough for me to release without a stable fallback option.

What I didn’t go over was all of the personal issues going on in my life that has limited my ability to make progress on this project. The TLDR is that we had a lot of traveling vacations this month and I tried to minimize my time off by working during them. Contracting jobs aren’t in the cards for me in the future.

What’s Next

I have adjusted the task list according to what I want to do before releasing version 0.2.

General Tasks

Version 0.2: Multi-Device Synchronization

Version 1.0 (Future)