Building an Improved “4th Year Project”
In the 2017 academic year, I build a small social networking mobile application as my project. The challenges imposed gave me opportunity to learn and have fun. Sending push notifications using Firebase Cloud Messaging, setting up and configuring IIS so it can host a .NET Core API, using an SSL certificate and working with basic token authentication were a few things I got exposed to. Similarly, in 2018, I decided I will build an improved version of the system – this time, I will be making improvements to code, infrastructure, and implementing a couple of features I could not integrate last year due to time constraints. The purpose of undertaking this project is to make sure my Android and C# skills do not diminish, due to Masters related work. The idea here isn’t to build an app that will bump up on the app store, but rather to build something and have it published. If it bumps up on the App store, that is an added bonus.
This is a short clip which shows the “Help” functionality of the mobile app on a tablet. What is different this year is, Firebase Cloud Messaging is used to push live help rating information as users rate the help from their devices. The app is to be built in such a way it looks and feels good on phone and tablet. I want this app to be as “live” as possible.
Application Name Change
Initially the idea was to keep the name (that being HomeNET), but after much thinking, I realized this name sounds boring and flat. If I am to undertake a new project, I cannot be carrying content over from old projects. After much thinking, the name I settled with was Koeks.NET – “Koeks” being my online name on social media platforms, and the “.NET” part to represent the social networking system I am building. The thought of turning my nickname into a brand is rather exciting.
The Web API, and database, associated with this project will be hosted on Windows based VPS Server in South Africa (Johannesburg to be exact.) – After all, local is lekker. Instead of storing user content on the VPS Server, I have decided I will use Google’s Cloud Storage platform to store and manage files. This will give me a new challenge; figuring out how to do this from the API. Another reason I chose Google is that they give users $300 free credit (valid for 12 months) to experiment with many of their cloud technologies. Google has a .NET library which developers can use when communicating with Google’s many services.
As far as code changes are concerned, this is the year I will completely do away with that pesky AsyncTask class for performing network related tasks. This project will be using JobDispatcher to schedule work that may only run when certain conditions are met. In addition to this, JobIntentService classes will be used in running network related tasks that need to be executed as soon as possible. From the reading I have done, JobIntentService works with Android 8.0 new restrictions, as well as older versions of Android. Realm will be used in persisting temporary user information and settings.
Introduction of New Features, Expansion of Existing Functions
This could potentially lead into a large, and exciting project. I have planned to build the Android application, together with an admin app. The admin application will deal with administrative tasks such as dealing with reports from users, turning the data collected from users into useful information, as well as managing other admin users and/or normal users. At this point, I would like this to be a web application so I can take this chance in learning some real web development skills.
In 2017, I unfortunately did not get the chance of implementing the Organization sub-system, the ability of users to create photo and video galleries, as well as creating private messaging with multiple people in a conversation. The decision of dropping these functionalities were due to the limited time available in crafting a 4th year project. Here are a couple of changes I will be implementing in this version (there are more, but for now, I am only revealing this much):
- The ability of a house having multiple administrators. This comes from the fact many people live in a house, and in most cases, a house is maintained by two or more people (the ones who bring in the money and pay the bills). A house will have many administrators. #ChallengeAccepted.
- The ability of joining a user’s house instantly, if you give a valid PIN. The usual process behind joining someone’s house would be to show your intentions of joining through a join request. This could take time, depending on the responsiveness of house administrators. House Administrators can grant people instant access to their house by defining an ExpressPIN. This is an 8-digit PIN which must be entered correctly by a prospective house member. #ChallengeAccepted
- Support for photo galleries, video galleries and a user’s personal galleries. I do not need to explain this point any further.
- Support for “Yards”. A Yard is any content a house owner, or user makes available publicly. This means, should a prospective user search for house, people and organizations, any content (photo’s, video’s and text) they see is content that was made publicly accessible. Of course, outsiders won’t be able to make comments, like or dislike the content.
- Support for Facebook sign-in.
- A certain limit on the number of people allowed in a house. The idea I want to enforce here is Houses should only consist of people you interract with on the outside world, on a regular basis. It just does not make sense to have houses with 1000+ people, being administered by 500+ people – allowing this to happen would simply be a “trimmed down” re-run of the many social networking platforms available.
There are many more features and expansions coming, but for now, this is what I have planned. Also, improvements to the User Interface will be coming through. At the time of writing this post, I have more or less completed the Help Functionality. I am working on the Create House functionality as well as the House Manager. More details will come in due time.
It would simply be unrealistic to say I will have completed this project at the end of the year. This is not possible, due to the complexity of this project, as well as working towards my Master of Information Technology qualification. I am giving myself two years to finish this project – build the android app, build the admin web app, go through extensive testing (bring in users to test the app) as well as publish it on the App Store. The idea here is to push beyond limits, and come up with something exciting.
I would like to say “My name is Okuhle, and I have a published app on the App Store”. As Whitney Houston once said in an interview, “I wanna see the receipts”. The receipts being a published app. Anyone can claim they can do something, but so few people will do what they have planned to do.
This video demonstrates the Forgot Password functionality, together with Help on a mobile phone. Notice the difference between mobile and tablet.