Diary of Working on Notas - Part II

Diary of Working on Notas - Part II

Daily short news for you
  • A software that converts text to speech created by a Vietnamese programmer - J2TEAM - Text to Speech (Free). You can convert dozens of languages into dozens of different natural voices. The special thing is that it is free.

    In preliminary evaluation, the conversion of long texts or texts in pure Vietnamese is very good. However, when it includes English words, it sounds a bit funny 😅

    » Read more
  • How terrifying, Codeium - known as a competitor to Github Copilot, as it allows users to use it for free without limits. Recently, they introduced the Windsurf Editor - no longer just a VSCode Extension but a full Editor now - directly competing with Cursor. And the main point is that it... is completely free 🫣.

    » Read more
  • There is a rather interesting study that I came across: "Users never bother to read things they don't want to." (That's a bold statement, but it's more true than not. 😅)

    Don't believe it? I bet you've encountered situations where you've clicked on a button repeatedly and it doesn't respond, but in reality, it has displayed an error message somewhere. Or you've filled out everything and then when you hit the submit button, it doesn't go through. Frustrated, you scroll up or down to read and find out... oh, it turns out there's an extra step or two you need to take, right?

    It’s not far from the blog here. I thought that anyone who cares about the blog would click on the "Allow notifications" button just below the post. But the truth is, no one bothers to click it. Is it because they don't want to receive notifications? Probably not! I think it's because they just didn’t read that line.

    The evidence is that only when a notification pops up and takes up half the screen, or suddenly appears to grab attention, do they actually read it—and of course, it attracts a few more subscribers—something that was never achieved before.

    » Read more

Challenges

Today, Hanoi is windy, cool, and lightly drizzling. I resumed working on Notas after nearly 3 weeks of rest and focus. Just this morning, I still didn't have any ideas for the next article because there were too many major issues that I hadn't resolved yet. But luckily, just recently, while cleansing my soul in the droplets of water from the fountain, I found the missing piece for the long-lasting troubles.

As usual, this week I will summarize the issues, difficulties I am facing, what I have accomplished, and the plan for the next week.

Difficulties

There are many significant challenges that I am currently facing.

In the previous article, I mentioned the structure of the Adapter as the database. Initially, I implemented the LocalStorage Adapter to retrieve data from the Local Storage in the browser. If I were to add a new Adapter to retrieve data from a specific server and handle synchronization, the user would need to connect to the internet to use that Adapter.

This means that a note-taking application would require an internet connection to be used. Hmm... that doesn't seem logical, as not everyone always has an internet connection. If they go outside and are offline but need to take notes, they won't be able to use the application, right?

Therefore, I had to find another solution that allows users to use the application both online and offline.

In the previous 3-tier architecture: UI, Logic, and Adapter, it seems that it is not enough to make the application work offline. To ensure that the application still works offline, we need to come up with a way to store user data when they have no internet connection.

So, we need to add a storage layer - which I call Storage - between Logic and Adapter. Storage acts as a local data storage, meaning that users can interact with the data even when they are offline. At this point, Logic will directly interact with Storage as a local database and also need to add a mechanism to synchronize data from Adapter to Storage.

It sounds simple, but when I started working on it, things were not easy.

First, I had to modify a lot of code and create an additional Storage layer to store data in the Local Storage as an offline database for users.

Second, the synchronization mechanism between Storage and Adapter is not very convenient, especially when adding a second client that participates in the synchronization server. So, when someone edits data in the same synchronization server, the data must be immediately synchronized to the other machines. Not to mention when multiple machines participate in editing the same note, it will be very complicated.

Third, even if a client has enabled data synchronization, if for some reason the machine is not connected to the network but still performs offline add/edit/delete operations, when there is a network connection, the data still needs to be synchronized with the server according to a certain rule.

It's really headache-inducing. When I first started, I didn't think this issue would be so complicated. Honestly, for the past week, every morning when I woke up, the first thing I thought about was how to solve this synchronization problem.

Finally, I had to modify my code many times to find a common rule for synchronization, and perhaps the light is shining through the leaves more clearly day by day.

Solution

Let's think about git along with its data pull/push mechanism. A remote server stores the remote repository, and a repository is "cloned" to the local storage on the computer. The task of git is to provide a mechanism to synchronize between remote and local, meaning that somehow it ensures that the data in the local storage is always the same as the remote.

If applied in that way, the Adapter will be like the remote, and the Storage will be like the local. Notas will require the Adapter to implement corresponding pull/push functions for retrieving and pushing new data to the synchronization server.

The remaining challenge is determining when to pull and push data.

Achievements and Goals for the Next Week

Writing notes on Notas

You may not believe it, but this Part II summary article is being written within the Notas application itself.

Notas can now function with alpha-level synchronization features. Using it to write is also a way to test its accuracy. Of course, there are still errors that occur while writing, many of which are related to asynchronous pull/push behaviors, causing data loss at certain times. Hopefully, these errors will be fixed in the coming week.

Finally, thank you for following along. If you have any questions or anything that is still unclear, please leave a comment below the article. I am more than happy to answer!

Premium
Hello

5 profound lessons

Every product comes with stories. The success of others is an inspiration for many to follow. 5 lessons learned have changed me forever. How about you? Click now!

Every product comes with stories. The success of others is an inspiration for many to follow. 5 lessons learned have changed me forever. How about you? Click now!

View all

Subscribe to receive new article notifications

or
* The summary newsletter is sent every 1-2 weeks, cancel anytime.
Author

Hello, my name is Hoai - a developer who tells stories through writing ✍️ and creating products 🚀. With many years of programming experience, I have contributed to various products that bring value to users at my workplace as well as to myself. My hobbies include reading, writing, and researching... I created this blog with the mission of delivering quality articles to the readers of 2coffee.dev.Follow me through these channels LinkedIn, Facebook, Instagram, Telegram.

Did you find this article helpful?
NoYes

Comments (2)

Leave a comment...
Avatar
Trịnh Cường8 months ago
very sure bro :))
Reply
Avatar
Trịnh Cường8 months ago
cố lên bạn, mình tin là bạn sẽ làm đc ;)
Reply
Avatar
Xuân Hoài Tống8 months ago
Cảm ơn bạn Cường đã động viên tinh thần. Nhớ dùng sp của mình sắp tới nhé