"Nothing in this world is difficult, but thinking makes it seem so.
Where there is true will, there is always a way."
-- Journey to the West
As the goal of our 2nd milestone, “First users using memri” suggests, this week we finally welcomed our first users (some of our team) who are able to run memri on their iPhones and interact with the backend servers deployed remotely in the cloud. With the joy of this achievement, we conclude with a brief summary of the work done in the following areas.
1. Use-case interviews
2. iOS memri browser
3. Backend pod
4. Notes downloader and importer
5. Pod and database hosting
During this round of interviews, we talked to various people with very different backgrounds and interests, and learned a lot about what people value and their preference over the features we showed to them.
In general, the people we interviewed in this round were enthusiastic about the concept of "data browser". They could imagine memri being incredibly useful as it inter-connects the data and brings much convenience and efficiency to searching through any data you generate. We have also noticed that among the people we interviewed, their impressions and opinions towards different use-cases vary significantly from one to another. Some simply love the use case that allows you to select your outfits via your phone, some can't think of a situation where they would ever use something like that. The winning use cases seemed to have a couple things in common, most of them were practical, and oriented to saving the user time. With these insights in mind, we'll iterate and improve our slides for the next round of use case interviews, to be continued....
iOS memri browser
The memri DSL (domain specific language) mentioned in the last week's post, a.k.a. cvu (pronounce as c-view or cascading view), has passed all tests successfully. The parser is able to generate the right object structure and can then be serialized again into the cvu language. A view validator has also been created to validate the view definition and notify users of any issues to speed up development of new cascading views.
For integration, we installed testing data (i.e. notes) in the database and started running the backend which sets up the schema and provides APIs to allow access to the database. A BIG step has been made this week: we managed to connect the client side with the backend! As you can see from the screenshot below, a query sent by the client returns all notes with required fields from the testing data.
This week we polished the backend APIs to ensure that deployment and integration with the iOS client would work smoothly. We implemented the correct data types, schema and docker image. When the first response was successfully shown at the client, our joy and excitement reached its peak.
Notes downloader and importer
We successfully completed a notes downloader and importer for both Evernote and iCloud. To import notes from these two apps: fetch the data to the local machine with the downloader and then run the importer via a REST API exposed by the pod, voilà!
Pod and database hosting
This week a first version of the hosting plan was drafted. The plan is based on Docker containers and leverages tools like Kubernetes for container orchestration and Kata for container runtime isolation. This plan also demonstrates the deployment architecture and describes functionality of major components such as container monitoring and failover.
In the current deployment, we already rely on Docker and Kubernetes to deploy and manage containers. Within a Kubernetes pod, two containers are running and are inter-connected. One is a Dgraph instance and the other is for the memri pod (personal online datastore). The downloader is also running in a container and is activated on demand to fetch the required data to the host disk. When the pod container starts, the importer will find the data and import them to the Dgraph container.
An exciting and fruitful week! After all, we have arrived at the first hilltop and already start looking out over the next, and higher one.