Diary of Working on Notas - Part II

Diary of Working on Notas - Part II

Daily short news for you
  • These past few days, I've been redesigning the interface for the note-taking app OpenNotas. It's quite strange to think about why I chose DaisyUI back then 😩

    » Read more
  • Previously, there was a mention of openai/codex - a type of agent that runs conveniently in the Terminal from OpenAI, especially since it is open source and they have now added support for other providers instead of just using the chatgpt model as before.

    Recently, Anthropic also introduced Claude Code which is quite similar to Codex, except it is not open source and you are required to use their API. Since I don't have money to experiment, I've only heard that people in the programming community praise it a lot, and it might even be better than Cursor. On the flip side, there's the risk of burning a hole in your wallet at any moment 😨

    » Read more
  • For a long time, I have been thinking about how to increase brand presence, as well as users for the blog. After much contemplation, it seems the only way is to share on social media or hope they seek it out, until...

    Wearing this shirt means no more worries about traffic jams, the more crowded it gets, the more fun it is because hundreds of eyes are watching 🤓

    (It really works, you know 🤭)

    » 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

The secret stack of Blog

As a developer, are you curious about the technology secrets or the technical debts of this blog? All secrets will be revealed in the article below. What are you waiting for, click now!

As a developer, are you curious about the technology secrets or the technical debts of this blog? All secrets will be revealed in the article below. What are you waiting for, click now!

View all

Subscribe to receive new article notifications

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

Comments (2)

Leave a comment...
Avatar
Trịnh Cường1 year ago

very sure bro :))

Reply
Avatar
Trịnh Cường1 year ago

cố lên bạn, mình tin là bạn sẽ làm đc ;)

Reply
Avatar
Xuân Hoài Tống1 year 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é