top of page
Search

PFD Project Blog - HelpingHand

  • Writer: CHEN Chance
    CHEN Chance
  • Nov 22, 2021
  • 1 min read

Updated: Feb 4, 2022

INTRODUCTION The Portfolio Development(PFD) module is for all the IT and FI students to undertake a real-life IT project or a competition-based project.

This entire project last for 18 weeks, in which a team of four has to utilize and implement agile and design thinking methodology to solve a real-world problem. The problem statement I have chosen is the Automation and the Disadvantaged. In short, the goal is that how would automation assist in removing the stress of the disadvantaged, either mentally or physically.

By the time I am writing this Blog, our team has already completed the 3-day hackathon taken place in Week 5. In which we have to create a prototype and present our work-in-progress to the potential investors that the idea is feasible and cater to the targeted audience.


And here are my reflections!!


REFLECTIONS

Week 1 - Formation of the team

1) What were your initial thoughts when you read about the challenge statements?

- The first thought came into my mind when I read about the challenge statement of Automation and the Disadvantage is my initial intention of developing IT skills to eventually make life better for the disadvantaged in the society. As I always believe that IT is the future and we can harness the goods of it to help the disadvantaged in daily life activities. And I chose to work on this challenge statement without a second thought.


2) Were you excited or concerned on the day when you had to hop into a channel to opt for your challenge statement?

- Yes, I was excited that I am able to finally put all my IT knowledge and skills into practical. Also in the same time, I am concerned about the team creation and there are very little people that I know are in the channel.


3) How did you feel about the group formation activity? Were you concerned about not forming a group with your friends?

- This is how our mentor helped us to form the group, he firstly asked us to share our mini portfolio (skill proficiency) on a sitemap, and team us up based on our skill proficiency. I am quite lucky in this time as I teamed up with my classmate, together with one IT student from other class, and one FI student. I am quite satisficed with this team formation at that point of time.

Week 2 - Pitching the idea as a team

- This week, we started to use Trello to brainstorm our ideas on how to release the stress of disadvantaged. We came out with many interesting ideas such as a robot programmed to assist at care-centre to deliver medications or foods, a watch that monitors person's location, health and mood and warned if dangered, we even think about a transcript app for people with hearing problems to transcribe conversations in real time. Eventually, we voted a most feasible idea which is an android application, it has two types of users, elderly and care-giver, it is totally made automated elderly to use. First, it has an alarm system that notify the elderly when to take medication or go for appointment. Second, it has a emergency button that can notify the default emergency contact person once an accident has happened. Third, it is able to navigate the elderly back to his address once he is lost. The main catch is the caregiver side, the caregiver can be the nurse, elderly's family member or even the doctor. The caregiver played an important role of setting the medication schedule for the elderly, keeping track of his current location, and notify the elderly once again if he has missed taking medication or appointment. By this point, we are ensure that it is automated for the elderly to use this application.

The target user is not limited to the elderlies, but also patient with dementia or visually impaired. There is a machine learning model built with the location tracking system, once the user has gone to a new and strange place, it will notify the caregiver for this unusual instance and take further actions. So it is designed across almost all disadvanged groups.

Week 3 - Prototyping

- In week 3, we has worked on the prototype using Microsoft XD, in which designing the basic layout of the application and the flow of functions. I contributed on making the UI for the sign-up and caregiver page. And the rest of my teammate has worked on the different pages.

Week 4 - Android Studio (self-learning)

- In this week, since among the four of us in the team, there is only one person who has prior knowledge of making an android application. Thus we take this week's time to watch a 11-hour long YouTube tutorial to learn as much as we can. The link to the video is here: HERE In the end, I also watched until 4 hours so far, which is until Object-Oritented Programming, and I feel that Android Studio Java is very similar to C# programming language, in turns of the syntax and the class definitions. It is just the layout of the android studio alone is a brand new stuff to learn and get similar with.

Week 5 - 3-day Hackathon (SPRINT 1)

We first by splitting the work, I took up the role of making the sign-up and log-in functionality. As well as the care-giver main page, a button to pair up with an elderly account. This means that I have to use Firebase database to store all the login credentials and information and able to perform GET POST UPDATE DELETE on the data. It is very challenging for me, by the end of first day of hackathon, I only managed to make the sign-up page for caregiver and only managed to store their email and passwords only. On the first day, we have also encountered a team problem which involve of some conflicts on pull requests because we have been commiting and pushing to the master branch on Github. Our mentor taught us how to use branch and only make push and pull request with the master branch while commited to our own branch. It is the biggest takeaway from the

hackaton I feel.

The hackaton ended at 6pm, but still spend the rest of my day in-front of the computer doing coding. On the second day of hackaton, I finally managed to store the user data on firebase and able to identify the user type (either "caregiver" or "elderly") upon logging in. I felt so satisfied when the sign up and login function worked as expected. Then, I started to work on the caregiver main page and ways to pair with an elderly.


On the third day, we met up early in the morning and finalize our presentation slides and prototype, due to misinformation, we were late for the presentation. During the presentation, we explained what this project was about, how can it be automated and help to release stress of disadvanged. We also demonstrated our current work-in-progress features, being the emergency button, location tracking and alarm for medication functions to the markers.


To end off, this is the first hackathon I have ever participated in, and I would say that it is a memorable experience for m. As someone who has almost zero knowledge with Android studio, to be able to come out with something working in 3 days is quite impressive. I will also never forget the determination of our team, coding non-stop in school from 2 to 6pm, and came back home doing coding again until 1am, slept for 7 hours, woke up at 8am and resume coding. I believe that no matter what grade we will get in the end, from heart I know that we have tried our best and never let ourselves and the team down!

Week 6 - 11 BREAK

Post Hackathon break

Week 12 - SPRINT 2

1. Planning

Week 12 is the start of 2022, when we finished the long break after Hackathon and came back to school. Unfortunately, one of our teammate is unable to attend our meeting due to medical condition, and the other teammate stay unreachable. The team has left with me and other team member, who is Hakimi, we have to carry the team and try to finish off all the user stories we promised. We met up on Wed for sprint meeting, we were planning to break down the remaining 4 weeks into three sprints to finish. Sprint 2 will commence on Week 12 wed and ends at Week 13 Wed, Sprint 3 takes place from Week 13 wed to Week 14 wed and lastly, Sprint 4 will be a two weeks Sprint from Week 14 wed to Week 16 wed for us wrap up and finish our additional features.

2. two - man team

In this sprint, me and Hakimi first by reconstructing our trello board including adding points to each user story and manage them nicely, we then taking up user stories and split them into tasks to do for our sprint. There were'nt much been done during Hackathon, we only managed to finished Sign Up and Login, as well as a simple pairing for elderly and caregiver. Initially, I am supposed to take care of functionality on Caretaker side with Aaron, but he has been ignoring all our messages and I decided to not wasting time chasing him. I took up all the tasks regarding to caregiver, such as View Elderly infomation where I have to display a Card on the screen display a brief infomation abt the Elderly (be it the lastest medication, appointment, location as well as assigning medication and appointments). For Hakimi, he is also working on Elderly side at the same time, be it to Create medication/appt and display it on Elderly side. After some discussion, we decided not to give Elderly the priviledge to edit medication/appt, instead, everything has to be done by the Caretaker. By the time I am done with View Elderly Card feature, he will then shift his code to my side. 3. Caregiver View Elderly

I have created a view caregiver page in Elderly setting to view all caregivers linked. On caregiver side, now it stores every elderly that it successfully paired, and able to store it locally for future usage. Next, I added a new attribute in Elderly class called current location which keeps track of elderly's location concurrently. Next, I started on researching how to get my elderly record in caregiver page up-to-date and change the value whenever the current location has changed in the database. I read thru the official documentation https://firebase.google.com/docs/firestore/query-data/listen#java_1 with reference to some more videos on Youtube to help me understand how to use QuerySnapshot and DocumentChange to keep track of latest update in the firestore. Through a lot of failures and practices, I could finally get the final result that I want.

4. Floating Buttons

After making the firestore real time updates, I move onto creating a float button on the screen that once clicked, it expands to two buttons which are for pairing and setting. I have also make a setting page with a logout button.


Week 13 - SPRINT 2/3

5. Recycler View

Moving on, I also researched on how to creating a recycler view on the main page that stores multiple elderly on the screen. I follow a tutorial on Youtube

https://www.youtube.com/watch?v=QqumtCxBgvI to guide me on creating the recycler view with adapter. The most difficult part was to design the UI for each of the elderly adapter, and it took quite some time to design a nicer layout that display the elderly information and buttons to add med/appt. There were also some frustrating bugs on getting all elderly from the firestore and do QuerySnapShot on each one of them for real-time update, it is essentially a nested firestore queries and sometimes it crashed for no reason. But through relentless testings, it was all fixed and I have a stronger understanding on firestore queries and later has help my friend, Hakimi out on firestore.


FOR SPRINT 3 meeting I did not come for our face-to-face project meeting because I have to go for an interview, leaving Hakimi alone in school. However, I still call him sometimes on Teams to catch on each other's progress and help each other's out. Ernest is still recovering from Covid-19 and Aaron remains unreachable. He did not reply to our messages nor coming for face-to-face meetings. Me and Hakimi has prepared for the worst situation and tried to complete everything we promised by the end of Week 15. (leaving Week 16 for Sprint reports, presentation slides and the video)

Week 14 - SPRINT 3

6. Improve on Pairing function

In this sprint, I am working on improving the effectiveness of pairing up. First by creating a dialog that appears once the pairing button is pressed. Initially the caregiver has to enter the elderly id for pairing up and I feel that is too troublesome and difficult to type that long ID, I decided to change it to elderly's email for the input field. Later, I created a new collection on Firestore called "PairingRequest" which has three attributes: senderEmail, receiverEmail and IsPairUpSuccess. Once the user has enter the email and click pair-up, it will first check whether the elderly is already paired up with the caregiver and gives an error. If not, it then check whether this email is a registered elderly account in the firebase, if so, it creates a new pairing request in the firestore with relevent sender and receiver email, and the IsPairUpSuccess field is set to false. On Elderly side, I have also created a hidden floating button that only appears when there is a pending request. Once the elderly clicks it, he can either choose accept/reject the pairing request, once accepted, the IsPairUpSuccess is set to 'true' and a new record is added to caregiverList in Elderly, and elderlyList in Caregiver. However, if "reject", the pair up request is then remove from the collection.

To allow the caretaker to keeps track of the pairing process, I have also make a new button below that shows pairing progress, it will display the pairing history as well as the status for the current pairing request. (Pending/Paired)

There were still several bugs found when developing this feature, such as when pairing up with elderly, somehow the elderly address is changed to null.



Week 15 - SPRINT 3/4

Weekly project meeting

In Week 15, Ernest has finally recovered from Covid-19 and joined us in our Weekly sprint meeting, he apologised for not contributing much due to the illness and willing to work harder. We showcase what we have done and discuss on Machine Learning models as well as distribution of tasks. I have also helped Ernest fixing some Bugs he had when developing his SOS button, we understand that he has not touching on Java for quite sometime and we were more than willing to help him. Even though Ernest is not that proficient in programming, he can write good report and drawing nice graphs. He contributed the most in Sprint reports especially the burn-up and burn-down charts. Finishing the reports has really removed a huge burden from me and I am quite thankful for his hard work.


7. View More Elderly Info

In the elderly adapter, I added a new buttton that navigates to a new page to view an elderly's additional information (e.g. address, emergency person contacts and etc). I have also added two button below called "Med Report" and "Appt Report" for Hakimi to do his new idea on creating reports for caregiver to view. Below these two buttons, I also added a delete button that remove the paring. - I can say this page is quite easy to make given the fact that I am quite familiar with Android Studio already and has encountered many kinds of bugs.


8. Get Real Time location from Elderly

This is also a big challenge to me when I am doing the location tracking (supposedly this is for Aaron, but he has not update us or anything, so I have to do it) I followed a tutorial online and do https://www.youtube.com/watch?v=UJwj5ywkcks&ab_channel=TihomirRAdeff

Though many times the program just crashed after giving permission and I have to do manual debugging by comment out codes. And finally, whenever a location is changed, it updates the firestore and I have also make a new collection called "ElderlyLocationML" that uses the Elderly ID as its document ID, stores elderly's current location for every 5 mins while the app is running. It is to prepare us for machine learning modelling later.


A little rant about my teammate

When I finished location tracking, out of sudden, Aaron just appeared in the Telegram chat and saying he has done with Location tracking. I was so shocked and angry at the time because he has never update us on his progress. One more thing that made me almost feinted is that after looking thru his code, I realised that he did not pull or sync with our master branch from Week 12 onwards!! which means that he buiilds on top of our very old version and it makes merge very difficult. (especially he coded on ElderlyMainActivity where most of our codes are there). The conflict on Github was too complicated to solve, so I told him it is not possible for us to do a merge for u as debugging afterwards will taking up too much time. He replied: "So what you want me to do". I just asked him to clone a new copy of our repo and try manually shifting his code over without affect the app. And most importantly, ask him to update us on his progress and stop doing the project in a waterfall manner. He did not reply again. And I never see his commit again from the day I am writing this Blog. 9. Improve on Sign Up as Elderly page

I first by improving the UI for the sign up page by following part of this tutorial: https://www.youtube.com/watch?v=_FKD4C2feHA&t=1544s&ab_channel=CodingInsight and I also researched on PlacePicker in Android Studio that allows the user to pick their home address correctly (for Machine learning later). And it took me two days to complete it because I was searching on nearly all the tutorials on PlacePicker online and it is more or less outdated because the feature was deprecated in 2019. But luckily I found another tutorial that helped me to continue using this SDK however it comes with small Bugs that might affect that User Experience, it is a trade-off being made.


Week 16 - SPRINT 4 (Submission)

This is the last week of this project before submitting it on 4th Feb 2022, Friday. We decided to finish off all the basic functionalities and the two additional features - Machine Learning for alarm and location, we only left with a few days to do it which seems impossible to implement. So we have to find an alternative solution to it.


10. Doing Medication Notification feature (alternative to alarm ML) This is the feature that me and Hakimi came about when having meeting, after realising the infeasibility of the alarm machine learning model. We decided to adopt a similar idea but using simpler logic to achieve it. This is a system that keeps track of the elderly's behaviour on their consistence in taking medication on-time. The use of p_score - which stands for Punctuality score, is the tracking number that stored in Elderly class.

Default is 100 upon signing up, whenver that an elderly has missed taking medication, meaning that after the 30seconds of alarm has over, he/she has still not giving any response. The p_score will decrease by 8 (no smaller than 0) and a record of failedAttempt is then added to the database for the report. At the same time, the caregiver is NOTIFIED for the miss of medication and further informing the elderly by calling/messaging.

Similar idea, when the elderly has responded and has taken the medication, the p_score will be increased by 5 (no more than 100).

There are also different types of Alert depending on the p_score of an elderly, so that the caregiver is more aware of the punctuality and consider taking other actions.

This entire system has all done by myself and it took me around 2 days to do. Because the coding is mainly on the caregiver side and I am quite familiar with it.


11 Finishing off small features, Designing the UI/UX and Presentation Slides

Supposedly, the UI and UX should be done by Aaron, but until now he still not replying to our message nor even reading it. His commit was still few weeks ago and not deciding to do anything. We have to split his work among three of us during this last lap. I helped out in designing the HelpLostCard and the UI for sign up pages and elderly home page. I found that the RelativeLayout is so much easier to do than ConstraintLayout, by its ability to set a relative position for each item and very easy to arrange them. In this week, I also spent a night on making the presentation slide, leaving the ones that we have to discuss as a group blank. It took me around a few hours to make too.


Reflection

This semester has been a total disaster for me, and most of them came from this module. The time I spent on this project is definitely more than any other module. Considering I was a beginner in Java and Mobile App development, I have to self-source everything online and fixing all the unexpected bugs myself (and usually that will take up most of my time). Also take into account that one of my team member has fall sick for a couple of weeks and unable to help out, as well as one team member who is not corporating at all.

The most unforgettable part during this project was the period that only left with me and Hakimi in the team to finish off this big project. And that 1-2 weeks has been a real "Hackathon" to us. There were times we were so desperate and demoralised on the progress of this project, there were times we shared our happiness with each other, there were also times we stayed up late at night just to finish coding. Nonetheless, I believed I have learnt something, more than the hard skills on Java, it is the ability to handle stress and time-management. Initially me and Hakimi has little faith on whether a 2-man team can finish implementing the basic functions, but we did it, with the help of our dear friend who recovered from Covid soon after. And a special thank to my Buddy - Hakimi who always stayed with me to finish the project and helping each other out, this is where I truly found friendship and teamwork. I think what has made us thus far is the strong determinations that both of us have in wanting to do this project well and tried our best to fulfilled our promises. Though some of the additional features are not well-implemented, I know that we have done our best. Lastly, a final suggestion to the module leader for Portfolio Development module, please remove the random selection of teammates in this module. The initial idea was good, it is give us a feel of how it is liked to work in a real-world development team. But it is really heart-breaking when there is a freeloader in the team and we can't just replace him with someone else. And the rest of the team members who really want to do well suffers.





 
 
 

Comments


bottom of page