Moday (11/02/2019)
Set-up project.
On Monday I started to set up my project. I created a bunch of tasks in one of the stories called ‘set-up tasks’. These included ensuring that a git repository was being used, and it was being hosted on Azure devops. I also made sure that any nuget packages and extensions were installed. Additionally I also set up the styling for my project. This ensured that the base of my layer of my project was created.
Continuous Integration.
I also looked into Continuous Integration, and I followed a guide to get set up with Continuous Integration. I realized that the previous tutorial I followed wasn’t compatible with Xamarin, so I decided to look for other tutorials. I found this useful tutorial. And whilst following it I realised that I should be using the visual designer, this would allow me to choose the Azure Repos Git, and a template. I would need to do this twice so that a pipeline was configured for both Xamarin.iOS and Xamarin.Android.
This tutorial helped me to successfully integrate CI with my project, so that when the master branch was changed I would get two emails as two pipelines were configured. One for Android and one for IOS.
Tuesday (12/02/2019).
AI Recommendation System.
On Tuesday, I started researching into one of the hardest parts of the project, and that was the AI recommendation system. This would be one of the hardest parts due to the fact that I had previously knowledge of AI.
I firstly started looking into the type of recommendations systems I could used. I read several pages such as:
- Understanding recommendation engines in AI.
- Machine Learning for Recommender Systems.
- Comprehensive Guide Recommendation Engine Python.
I decided that I would create a content-based recommendation system, so that recommendations would be made based on genres, and information about the books. Rather than other users.
I then decided to follow some tutorials, to see how these recommendations systems would be implemented. Unfortunately, these tutorials were all written in Python. So I decided to follow a couple on Python and then when I got a better understanding of them to write them in C#. This would ensure that when I was translating the work into C# I would have a good understanding of how recommendation systems worked.
You can find the tutorials I followed here. It uses the movie lens database which is a dataset comprosing of 100,000 ratings, 3,6000 tag applications applied to 9,0000 movies by 600 users. Information about the dataset can be found here. Whilst I wasn’t going to use a dataset of movies, this gave me good practice of using a dataset which I would need in my project.
Wednesday (13/02/2019)
AI Recommendation System.
On Wednesday I decided to continue my work on the AI recommendation system. However this time I was planning to write it in MVC, which would mean that it would be easier to migrate to Xamarin, as it would be written in MVC. This also ensured that I would have a clear example. I choose to use MVC because I had experience using that ensuring that it was easier to get started.
I followed this tutorial which gave me some boilerplate code to get started. However, this was a simplistic example, and I would need to use a dataset of books when it came to developing my project. I decided to modify this example, so that it used a dataset. For this I would need to import the movies dataset, which would require reading a CSV. Whilst this was something I did in my IY, I used the following guides to get started (link 1, 2, 3).
I then created a page consisting of all the films in the database, and once you clicked on them it calculated the similarity score based on the genre. Most films had multiple genres, so the film that had the most genres in common with the selected film was shown. After this, I created a LINQ statement so that it was ordered in order of rating, so the hhighest rating films were rated first. However, one problem was that this wasn’t particularly efficient, but, I decided that it would be a good idea to develop it in an Xamarin app prior to working on the efficiency.
I also created a new sprint for the upcoming week and adding tasks for that week, my main goals were to work on the recommendations, testing and start thinking about the design.
Thursday (14/02/2019)
On Thursday I started working on unit tests for my project. I looked at several guides on how it should be implemented, I would need to add a separate unit test project, which would contain the unit tests. This tutorial explained how to create unit tests and the best way to write them, and I was able to create some sample unit tests. I then decided to add it to my project, so that when I started writing code, I wouldn’t be held up by getting the test environment set up. The Visual Studio documentation also outlines how the unit tests work and how you run them.
Unit tests would be used to ensure that the functionality and the underlying functions of my application worked. I wrote some example to test the calculator functions, for example addition and subtraction.
I also tried converting my example AI recommendation system into Xamarin. However, for some reason it was adding a ‘\’ at the start of the CSV file location. Meaning, that I couldn’t get it to read the CSV file. I decided to investigate it further later.
Friday (15/02/2019).
On Friday I started thinking about the design of my app. For this I looked at the CS31620 slides for developing an app. The first step is to decide on a name, and describe what the name should do in one line. I didn’t spend too long on this and I came up with the name ‘Book Hub’ and the tagline ‘request, renew, recommend’ which were the three main functions of the app. I also created a sample logo that would be used in my app.
After this I needed to breakdown the one-liner into possible features. This was partly done as part of the outline document. The one-liner illustrated that the main functions would be the ability to renew a book, request a book and recommend. I then thought about the 80/ 20 rule and what was most important. I evaluated all the functions that I wanted to achieve and I ranked them from high to low priority.