KubeCon 2018, What an Experience!

Born and raised in Cameroon (African country), where the tech revolution that has gripped the western world is for almost a century, has had little impact, building up a tech oriented career looked sometimes an impossible task. I admit, I was not born with the love for software and binary flowing in my veins like some of the IT geniuses existing today. My first career goal was to be a Pastor, because of the huge part that spirituality plays in the African culture. Then as I grew older, I thought about going into sports, but I was never picked to play when the other kids were because I had no talent whatsoever. And then in my later part of secondary school, I developed a love for aeronautics. That again proved difficult because there aren’t any schools in Cameroon which provide courses on aeronautics.

Then came the turning point in my life, one night during the summer holidays after I finished my secondary school, deep in thought about what subjects I was going to choose to study in high school, I stumbled on a movie while browsing through channels, The Imitation Game. The movie was based on a true story of how computers helped to stop the Second World War by decrypting German attack messages. What I found surprising was that this computer was huge, literally filled a room on its own, and then I thought of the cell phone I had at the time, which could fit in my hand but was far more powerful and advanced than the one in the movie. I thought to myself, “if that huge computer could help turn the tide of war, what would the recent, more powerful computers be capable of?”

I soon realized that the sky really was the limit of what I could achieve with computers. With a good knowledge in computers, I could fit in any sector of society, any industry, any business, I could make a real impact in my community and thus, my love for Computer Engineering was born and I have never looked back. I woke up the next morning, broad smile on my face, and woke my dad up with the phrase “Daddy I want to be a Computer Engineer.” I still remember the broad smile on his face till this day.

I took up Computer Engineering as my major in the University, and although it was extremely difficult because very little practical work was done(the university of Buea did not have a well equipped computer laboratory at the time), my love for tech and desire to make a difference ultimately kept pushing me forward. I started actively contributing to the world of Open Source in my second year in university and have not looked back ever since. I was one of the pioneer members of the Buea Java User Group(A small group in my home town meant for all things java) and also a member of the Student Docker group for the University of Buea. I used this forums to spread the Gospel of Open Source as much as I could, in a bid to attract many of my peers into it.

Due to my active involvement in Open Source, I was granted a Diversity Scholarship for CloudNativeCon | KubeCon 2018, in Seattle Washington. It was my first time out of the country and I was so excited about the new experiences I’d have, and more excited about going back home after the conference and sharing the knowledge I’d acquired with my peers.

Getting to Seattle, it was a whole new world for me. After losing my way after leaving the airport, then getting stuck in the rain for half an hour, nothing could dull my mood. I was so excited! Over the course of the conference, I attended all the keynotes, several workshops, taking videos and notes from each of them so I could share with my peers back home. I visited the Expo countless times so I could gather as much swag as I could possibly carry, so every one back home would at least get something. My goal was not only to share the knowledge I had gained, but ultimately through my experiences, encourage my peers to be more active in Open Source development.


Personally, I learned a lot. Although most of the breakout sessions I attended were a little above my cognitive level at the time, it pushed me to know more. I discovered the power of Kubernetes and the power of the Cloud Technologies as a whole and it fed my curiosity. As a result, I immersed myself into learning and leveraging the power of the cloud, particularly the Google Cloud Platform. Fast forward six months to the date of writing this blog, I am a proud recipient of the Google African Certification Scholarship, geared at enabling africans take courses and ultimately get certified with a any Google Certification for free. And you guessed it right, I pursued a Cloud Certification(Google Cloud Associate Engineer Certification) and I hope to go through with it before the end of the year 2019.

GSOC 2019: Final Evaluation.

  • Primary mentor: Harisu Fanyui
  • Backup mentor: Dileka Madushan
  • Student: Ryan Tendonge


The goal of this project was to provide a user interface to support self service password reset which already exist in core. This involved building an React Open Web App to handle the password reset mechanism, and updating reference application, adding a mandatory email field to the user creation process to ensure that each user is created with an email, and also allow the possibility for users created previously without emails to append emails to their user object by editing the user.

Objectives(All completed)

  • Add an form input field for email when creating users. Make field mandatory both during the creation of a user and during the editing of a user.
  • Design and build an Open Web app which would allow a user to reset his/her password.
  • Monitor for the presence of password reset token in the request for the form that resets password.
  • Ensure that password strength is satisfactory before allowing user to reset password.
  • Provide customized, informative feedback message on the success or failure of password reset. In the case of failure, the message should specify the reason for failure.
  • Provide mechanism which intelligently checks for the strength of the user’s new password, and prevents users from using weak passwords.


Future Works

Right now, in order to use the password reset Open Web App(OWA) to reset a password, you need to get authenticated. That is, you need to log in before having access to the OWA from the legacy ui. I tried tweaking this a bit such that a user can access the OWA from the reference application login page by hitting the “forgot password” button, but I soon realized that although linking that button to the OWA would work, such that when a user clicks the forgot password button, he’s redirected to the password reset OWA(keep in mind he’s not logged in, he was just redirected, thus has not been authenticated). But when that user tries to trigger the password reset, he is then asked to log in as an unauthenticated user cannot access the openmrs rest webservices(password reset is a rest web service). I will continue looking into this after GSOC.

Thoughts on GSoC

Its been an amazing experience with OpenMRS for the Google Summer of Code 2019 session. I pushed myself a lot and learned some new and amazing things along the way. Started the program with zero knowledge in react, now I am fairly comfortable coding in react. I also expanded my knowledge in Java, Spring and Rest. Could not have asked for more. What should OpenMRS do to make the program better for the next sessions? MORE OF THE SAME!

Final Presentation

GSOC 2019: Week 12

Its the final week of the Google Summer of Code 2019 session, and what a ride it has been. Although its not always been smooth sailing throughout the project, I can say its been a huge learning experience for me.

Over the course of the final coding week, I was able to fix some blockers I had previously which include

  • Displaying the OpenMRS logo as part of the Password reset email.
  • Allow user emails to be edited and saved after the user has been created.
  • Editing the format of the password reset email.

It is safe to say I have reached a 95% completion rate on the final product that was promised, and is ready for merging and integration into the reference application immediately.

GSOC 2019: Week 11

Last but one week for the Google Summer of Code 2019 session just wrapped up and we’re in the final stretch of the program. Its been a rollercoaster ride so far but I am contented with the progress that has been made. Over the course of the week, I was able to introduce a user email field into the user creation process such that a user email is a mandatory part of the user object which is saved when a user is created. That way, subsequent password resets would not need a user adding their email via the mysql terminal as has been done previously.

Gsoc 2019: Week 10

Day by day, we edge closer  to the end of the Google Summer of Code 2019 session and what a ride it has been so far. Over the course of the week, I was able to

  • Refactor the react code for the PasswordReset user interface so it meets OpenMRS’ standards.
  • Ensured that a user cannot reset their password if their password and password confirmation does not match, and also if the password is a weak password(the user gets a visual representation of this using a progress bar.)
  • Experimented with different implementations of adding the user field to the user creation interface, such that the user.email column in he users table is populated when a user is created, and not by crude sql commands afterwards. Now my main focus is implementing this functionality, and carrying out some bug testing.

Gsoc 2019: Week 9

The second evaluation has come and gone for Google Summer of Code 2019 as we edge closer to the end of this years program. Over the course of the week, I was able to complete my evaluation and make the following code updates.

  • Update the password reset page with a new component that automatically checks for the strength of the user password and displays it as a progress bar with multiple colors
  • Ensure the password reset button is disabled if the password and password confirmation does not match.
  • Reverted the browser information functionality I implemented earlier as that was deemed not necessary.

We’re now in the final stretch of GSoC 2019. Wish me luck!

GSOC 2019: Week 8

Its past the half way point of the Google Summer of Code 2019 and my project is entering its final stages. Just a few things and minor tweaks left to be done on the User Interface and the Java backend. Over the course of this week, I was able to update the password reset template with browser information from the browser that launched the password reset. This is just to give the user an insight into what browser and what device in general launched the password reset; in the case where the user himself initiated the password reset, this information would just serve confirmation purposes. But in the case where someone else is trying to maliciously access a users account by reseting their password, this feature will give the user some information that might end up being valuable. This functionality captures the browser name and version from which the password reset was launched, the operating system name and version of the device and the typeof device(mobile or desktop, as well as the Vendor of the device, for example in the case of a Macbook, the vendor is Apple).

I was also able to transfer all the texts from the password reset template to the message.properties file so as to ease translation.

GSOC 2019: Coding phase week 7

So far, so good, week 7 of  the 2019 session of the Google Summer of Code wrapped up and it was a little uneventful for me. Could not get much work done due to some other pressing personal issues, but still managed to stay ahead of my schedule by working and fixing some bugs I had with the activation key implementation from the previous week. Now, the password reset mechanism works flawlessly.

  • When a user wants to reset their password, they launch the OpenMRS Password Reset OWA. It prompts them to enter their email or openmrs username.
  • Once that is done, an email is sent to the email which they entered, or the email associated to the username which was entered.
  • This email contains a unique activation key, which verifies and authenticates a users request.
  • This activation key is then passed back to the react app as a react url parameter, and is used for validation once the user sets his/her new password.
  • The user can then log in with this new password successfully.

After having a call with my mentor, we singled out some things which need to be handled, but all in all, we are on track to wrap up this project ahead of schedule.

GSOC 2019: Week Six

Week six of GSOC 2019 just wrapped up, and every coming day we edge closer to the end of the program. Over the course of the week, I was able to

– Fixed the error my mentor pointed out regarding a bug in the code which I missed. This bug threw a null pointer exception when the user initiates the password reset sequence. I’d have my mentor test it and give me his feedback once I make the commits.
– Worked on a general purpose Toast component which I’ll use to display messages to the user depending on the event. Such as in the password confirmation page if both passwords do not correspond, or if a user doesn’t exist in the system or in any other scenario in which a message will need to be displayed to the user. I expect to be done with this by the end of this week so it could be tested and any necessary changes made.

Lets Roll!!!


GSOC 2019: Week 5

The fifth week of gsoc 2019 was dedicated to the First Evaluations. Over the course of this week, I carried out my gsoc evaluations concerning the work I had done so far, and did a personal evaluation to see what I had covered and what was left ahead of me in my project, and revised my timeline in order to accommodate the minor changes I had made.

So far, so good!