It seems like each year Google Summer of Code passes us by even more rapidly than the last year and this year it was no different We worked with another stellar class of interns, and once again grew our participation to our highest levels yet with 13 Mifos Initiative interns and 4 Apache Fineract interns. With the large intern class and taking on multiple projects on Fineract CN for the first time, this was our most challenging year to date. Our mentors were stretched to their limits and our interns did a great job producing impactful code on all fronts – on the mobile app front, we’ve significant enhanced our mobile field operations app and both our mobile banking app and mobile wallet app. We even built the first client-facing banking app on Fineract CN and evolved Fineract CN Mobile. On the web and front-end we made substantial progress in completely re-writing our Mifos X Web App onto Angular 6 and advanced our online banking app. On the Fineract back-end, we implemented much needed scalability enhancements, rolled out a robust architecture for our payment gateway, and explored new frontiers with scorecards for machine learning and a Mifos chatbot. Lastly on top of Fineract CN our Mifos intern enabled containerization via Docker and Kubernetes while the Apache Fineract interns implemented a new microservice for email and SMS and began implementing the first functionality for group lending and group management. This post will showcase the outstanding work they did with the community and part 2 of our official GSOC Wrap-up will focus on their reflections on their journey throughout Google Summer of Code.
Before we take a closer look at the results of the summer, we want to first off thank everyone who made Google Summer of Code another successful year.
Google Open Source Programs Office
First off we want to once again thank the Google Open Source Programs office for giving us the opportunity to participate once more in both Google Code-In and and Google Summer of Code. For our community, GSOC has really become a life-blood of our project. In our talk at LinuxFest Northwest, we documented how GSOC helps us organically grow our community year after year. While we unfortunately missed the GSOC meetup at OSCON, it was a pleasure seeing Stephanie, Mary, Josh and Helen at the GCI grand prize trip and we look forward to hopefully seeing Cat too at the Mentor Summit in October. We are always impressed by the awesome job they do in coordinating such a massive global collaboration handling all the moving pieces so smoothly. We look forward to participating in GCI and GSOC for many years to come!
A huge thank you to all our mentors who are the most critical piece of the puzzle in having a successful Google Summer of Code. Without our mentors being there at each step of the way to help guide our students in their journey, we couldn’t get through the summer. Some of our mentors really had to step up big time as a couple of our mentors had to step away due to unforeseen conflicts. We value this redundancy but need to grow our mentor participation for next year so are eager to welcome any community members who’d like to make the leap, to step forward now!
Thank you to our mobile development mentors – Rajan Maurya, Tarun Mudgal, Puneet Kohli, Naman Dwivedi, and Ishan who had some limited time to review code. Thank you to our web development mentors – Gaurav Saini, Pranjal Goswami, Raunak Sett, and Mohit Bajoria. Thanks to our mentors on the platform side – Avik Ganguly, Nayan Ambali, Aleksandar Vidakovic, Steve Conrad, Rahul Goel, and Victor Romero. Thank you to our Fineract CN mentors – Yannick Awasum, Isaac Kamga, and Myrle Krantz. A big thank you to other community members and volunteers like Sundari Swami, Santosh Math, and Shruthi Rajaram.
Last, but certainly not least, thank you to our interns from across the globe who poured their energy into their projects. This year they were ever-perseverant in working on brand new codebases, changing requirements on the fly, and working on experimental solutions. What is always most rewarding is seeing how collaborative and supportive the interns are of each other helping to solve coding problems, helping with collaboration tools and just being great all-around community members. We wish them the best of luck in whatever they pursue next and look forward to their continued contributions to the Mifos Initiative. Already, despite the program being officially over, many of our interns have continued making contributions and wrapping up loose ends of their projects.
We had a total of six interns working on our mobile apps across both Fineract and Fineract CN. For our Mifos X mobile apps, we now have more refined and enhanced mobile banking app with Mifos Mobile 3.0, an improved and re-factored Android Client 5.0 for mobile field operations, and a valuable enhancements into our Mobile Wallet 2.0 framework. On the Fineract CN front, we built out the first reference client-facing mobile app and had two interns add additional functional and architectural enhancements to Fineract CN Mobile 2.0. These are great finished products that can be run out of the box and in production by any user but they’re also great “starting dough” for any partner looking to see what can be built on top of Mifos X or Fineract CN and wanting a reliable open source foundation to start from.
Mifos Mobile 3.0 – Saksham Handu
Under the mentorship or Rajan Maurya, Saksham took over development of a fairly feature-rich Mifos Mobile 2.0 mobile banking app – working on a mix of architectural enhancements and functional improvements helped Saksham grow as a developer. He used new Android libraries like RxJava, Dagger, and Mockito, wrote clean de-coupled code using the MVP architecture pattern, and used Git version control to collaborate with widespread global development team. Back-end work including migrating notifications from GCM to FCM, migrating Java Models class to Kotlin data classes, add adding in additional unit and integration tests. New functionalities added include support for surveys, support for viewing reports, support for applying for savings accounts and viewing share accounts, adding guarantors, the ability to edit user details, and visualizations for the dashboard. There a number of features that Saksham is still implementing that are awaiting API development. You can view a full run-down of everything Saksham accomplished in his final report.
The final production release will be available from Google Play once we complete QA.
Mobile Wallet Framework 2.0 – Ankur Sharma
Ankur worked under the guidance of Naman Dwivedi and Puneet Kohli with Sundari Swami helping to refine use cases that were both India-specific and from across the globe to extend the MifosPay and PixiePay apps powered by the mobile wallet framework. Ankur’s contributions included integration of the mifos passcode library and partial implementation of two-factor authentication, 2-tier KYC support for both the back-end and in the MifosPay app, the ability to save credit card details, viewing of transactions and details, viewing of invoices, enabling merchant sign-up and a merchant listing, as well as the ability to edit profile and a full settings menu. We are looking forward to Ankur’s continued leadership and growth in the community – he was one of our most dedicated and diligent interns to date. Ankur also made numerous technical enhancements to fix the build configuration, upgrade gradle, add continuous integration support, and better the UI. View a list of Ankur’s work completed and screenshots of work in his final report.
Mifos X Mobile Field Operations App 5.0 – Aksh Gautam
Throughout GSOC and even prior to the start of GSOC, Aksh was hard at work in enhancing our mobile field operations app. His contributions included enhancing the create entity fragments for clients, groups, and centers, enhancing the document upload workflow, adding support for viewing reports for various types of reports, revamping the collection sheet into a two-tab layout and a three-fragment multi-stage layout for generation. One of the big features Aksh completed was to enable automatic offline syncing in the background using the Android-Job library provided by Evernote. Now rather than having to manually sync from the local offline database to the server, the payload for clients, groups, centers, and loan and savings transactions now automatically synchronizes. Many thanks to both Tarun Mudgal and Rajan Maurya for guiding Aksh throughout the summer. We look forward to Aksh’s continued contributions. View Aksh’s final report for a full summary, screenshots/gifs, and links to each task completed.
Mifos Mobile CN – Manish Kumar
Client-facing mobile banking apps are the direction the financial inclusion sector is heading so while we don’t yet have a secure data access layer for clients to access their data in Fineract CN, we did want to build a reference app that worked against a mock set of data. Working from a mix of both digital credit, mobile banking and mobile wallet use cases, Manish delivered a solid reference client-facing app. Within the app one can log in and and authenticate via a pin code using the Mifos pin code library, view a dashboard summary, see a listing of accounts and filter and search through them, and apply for a new loan. All this is on the new Kotlin architecture. While at times our mentors struggled to keep up with Manish, he learned immensely including making a fake data layer to mock server side response, learning new features of Kotlin, and leveraging new libraries like RxBus and Bottom Sheet.
View Manish’s final report for a summary and screenshots of all these changes.
Fineract CN Mobile 2.0
Mohak picked up work on the initial version of Fineract CN Mobile that Rajan had built last year and provided mentorship for this year. With the baseline of core loan and client operations in place, Mohak added in a wide range of additional functionalities including the ability to search customers, search through identification cards, adding review screens to every data entry component of the application, compression of image/identification cards prior to upload, the ability to list and search all ledgers, listing and searching of all accounts, listing and searching all products, viewing and running payroll, and unit tests for all the work done.
For a summary of Mohak’s work, please view his final report.
Dilpreet Singh (Apache)
Dilpreet demonstrated his strong skillset and domain knowledge as an intern to the Mifos Initiative working on Mifos Mobile 2.0. This year, he worked as an Apache Software Foundation GSOC intern focusing on a parallel set of features in the Fineract CN Mobile 2.0 app. Dilpreet improved performance and made the code much more accessible to other devs by converting all the java models to kotlin data models.
View Dilpreet’s final submission to see what we he worked on.
On the web app front, we focused our interns on entirely re-writing the web app into Angular 6, extending the online banking app, and building out an initial self-service user administration portal.
Online Banking App 2.0 – Ankit Ojha
Picking up from where his mentor, Raunak Sett, left off with the Online Banking App after the last Summer of Code, Ankit set out to further extend the online banking app. Ankit’s work included support for allowing the user to register as a self-service user, adding a graph for transaction history to the user dashboard, an interface for filling out user surveys, improved responsiveness of the app, support viewing client-facing reports, adding/viewing guarantors, the ability to apply for new savings and share accounts, viewing of product details for loans, savings, and shares, viewing of a user profile and a brand new Pocket feature which allows the user to store and access favorite or frequently accessed accounts. Thank you to Shruthi for helping with additional self-service APIs to enable Ankit in working on this.
Mifos X Web App Rewrite & Self Service User Portal Usability Enhancements – Abhay Chawla
Many thanks to Abhay for his flexibility in adapting to a major change in his project. Originally Abhay was to focus on a self-service user administrative portal but when all of the APIs weren’t yet available and we shifted Anwesh’s project to be a rewrite of the entire Mifos X web app to Angular 6, Abhay took on part of the revamping of the web app and building in an integrated self-service admin portal. First off, Abhay demonstrated great leadership and communication skills in helping choose and design the framework including layout and theme colors. Abhay next then set up all the project guidelines and documentation and Travis CI setup for future contributors and our participation in Code for Good week. Once he got down coding, Abhay first worked on the shell of the application including the sidebar, toolbar, and breadcrumb design and implementation as well as the footer design and content components. This implementation also included shared modules and components like the icons module and material moedule which will enable easy theming and localization in the future. With the shell in place, Abhay built out the UI for self service user creation and management along with the UI for self service app configuration (theming and logos). Abhay also implemented a new log-in page leveraging two-factor authentication and remember me functionality to persist user credentials through the session. Lastly Abhay implemented and designed the screens for entire accounting section. Thanks to Gaurav and Pranjal for mentoring Abhay.
Abhay has thoroughly documented all his work in his final report. The new Mifos X web app built by Anwesh and Abhay can be tested out at https://openmf.github.io/web-app/ with credentias, mifos/password.
Mifos X Web App Rewrite into Angular 6- Anwesh Nayak
A big thank you to Anwesh as well for being flexible early one when he was presented with challenge of re-writing the Mifos X web app onto Angular 6 rather than merely refining the existing Community App. First off, Anwesh implemented a new logo and animation for loading of the application. He then focused on the application shell and ensuring responsiveness was improved by implementing the new layout and theme that were chosen. He then focused on the client, group and center listing, completing the full create client workflow, the listing of clients, groups, or centers and the full client account page summarizing all their accounts. Thanks to Anwesh’s mentors, Gaurav and Pranjal, for the guidance provided. View of an overview of his work in the his final report.
Once again we had several interns working both directly on Fineract 1.x and as well as ancillary modules to the core. We went after some long-awaited scalability enhancements, explored machine learning through a scorecard-based approach, delved into the world of chatbots, and set out to complete our mobile money integration.
Scalability and Performance Enhancements – Kumaranath Fernando
Mifos X and Fineract has scaled to support hundreds of thousands and even millions of clients but many of the performance enhancements to support the same have been built into the solutions led by our partners and not directly into the platform itself. With the guidance of Avik who has helped scale Fineract to millions in India, Kumaranath implemented some of these much-needed improvements including parallel execution of schedular jobs and pagination of jobs utilizing the native java Thread pool concept to execute tasks in parallel. For the trial balance report job which could take forever to process, enabling the creation of a consolidated entry in the trial balance table for each day that aggregates all the journal entries for the given day by grouping by GL account, branch, transaction date, and updating the closing balance. He also added compression of http responses to preserve bandwidth; on the back-end a writer interceptor captures the output stream of a response and condenses it and returns the response. Via the client API, a reader interceptor then catches the response and inflates it. Lastly, Kumaranath configured a node aware scheduler to allow configuration of different job execution on multiple nodes to divided the load significantly along with a dirty job scheduler to mark dirty jobs and execute on a separate instance. He is still to implement the UI for job parameter configuration in the Mifos X web app and to implement Ehcache distributed cache enhancements. View Kumaranath’s final report to learn more.
Mifos Payment Gateway – Sanyam Goel
Sanyam Goel, who completed a GSOC internship under the Apache Software Foundation last year brought his talents to the Mifos Initiative to work on the payment gateway, a project which has been worked on during two previous GSOCs. Under the guidance of Steve Conrad and Rahul Goel, Sanyam set out to build a middleware service to seamlessly integrate both Fineract and/or Fineract CN with an external mobile money service via its APIs. In real time transactions that occur via mobile money will be reflected in Fineract and likewise transactions executed on the mobile money network can be initiated via Fineract. Sanyam designed and built out a generic middleware architecture which can be integrated with any of the APIs of a given mobile money provider. Working with Beyonic APIs as a proof of concept, he demonstrated some of the basic payment flows being facilitated through the payment gateway. There’s a lot more work left to be done so Sanyam eagerly awaits more contributors.
Please view Sanyam’s final report to learn more.
Mifos Chatbot – Dingfan Zhou
With the support of Aleksander Vidakovic, Dingfan Zhao, embarked on ambitious and pioneering project to develop a chatbot that will allow clients to interact directly with their account data in Fineract and Mifos X. The major components of the project included the natural language understanding and natural language processing component, the chat platform or protocol itself and the most extensive part of the project, the Fineract adapter which would call APIs based on the queries entered via the chat platform. Dingfan’s final project ultimately concluded with six modules – the client containing the Java client of Fineract APIs, the adapter which provides the handler for the APIs and generate the request and response of APIs in Swagger format, the core module which contains the data holder and primary interfaces of the project including the NLP module which leveraged the OpenNLP engine, and the protocol which used the Slack interface as a proof of concept, and the server module which is used to star the Spring application. The basic workflow for how a customer can have a conversation with the chatbot to learn information about their accounts goes such: First they input their credentials to authenticate, they can then type questions about their loan or savings accounts to the chatbot via Slack. The Slack bot will then pass that user input to the OpenNLP engine for processing whereby the user input will be parsed to extract the user intent to find out what entity they want to query from Fineract. These intents will then be passed to the API handlers to get a response back. The controller then takes the response from the API handler and puts it in the form of a response from the chatbot in the Slack interface. Dingfan learned a great deal under this project so many thanks to Aleks for all his guidance. Dingfan’s very comprehensive final report delves into the rational behind how the architecture was developed, how he trained the NLP module, step-by-step what he worked on during each phase of GSOC and workflow of how a user installs and interacts with the chatbot.
The architecture and workflow is in place for a great proof of concept and now we need additional contributors to help make this production-ready!
Machine Learning-Based Credit Scorecards for Loan Assessment – Lalit Mohan Sanagavarapu
Lalit did an extensive amount of research and discovery into statistical regression methods vs traditional methods for underwriting or identifying good/bad loans that are rule-based and governed by central banks. The usage of pattern based recognition for credit scoring, identification of potential good/bad loans, fraud detection, and cross-selling have all been made possible by the improved digital footprint, distributed processing in the form of cloud computing, natural language processing, and machine learning algorithms. Based on this research and the guidance of Avik and Nayan as his mentors, Lalit identified the direction in which to take the project to create a publicly available good that wasn’t unique to one organization. The ultimate deliverable was the creation of a scorecard based framework for capturing and scoring against different assessable characteristics. Lalit created an extensive list of these characteristics and a scorecard user interface and database layer. Both of these need to be finalized and the application layer for parsing APIs and the statistical models and machine learning integration to be done. View Lalit’s final report to learn more.
For the first time we had students directly working on Fineract CN – building new microservices, new user interfaces, and enabling containerization. Three of these interns worked within the Apache Software Foundation but followed the same protocols as the Mifos interns.
Containerization and Deployment of Fineract CN using Docker and Kubernetes – Courage Angeh
Courage Angeh, with Victor Romero as her mentor, worked on the configuration of Fineract CN for production environments such that it not only runs on the cloud but scales depending on the workload of the system. Courage’s goal for the project is to make Fineract CN for a production-ready environment where the domain microservices should scale independently, the failure of one microservice should not affect the other microservices, microservices should automatically start up when one fails, and microservices should be deployable on any cloud platform. extending Adhyan’s great work from last year to add a topics-subscriber model to the architecture of the notification generation. Courage designed the architecture and implemented the scripts to run and manage the Fineract CN microservices in a production environment via Docker Swarm or Kubernetes. View the design architecture of a containerized Fineract CN and the scripts in her Github repo, all found in her final report.
SMS/Email Notifications Microservce – Ebenezer Graham (Apache)
Working under Isaac Kamga, Ebenezer Graham was one of the first contributors to create a new microservice on top of Fineract CN. As an intern through the Apache Software Foundation, Ebenezer was entasked with building out this microservice to enable clients to receive updates about their accounts. He developed the new microservice, incrporated it into the demo-server microservice and built out the UI screens for the fims-web-app. He implemented a set of dedicated listeners that are listening to all events published into ActiveMQ by the other microservices. Once the events are received, the payload is used to retrieve the customer and their contact details and then then the notification is sent out separately via email and SMS. On the roadmap for future development include support for notifications from the portfolio microservice, a more robust UI for SMS gateway and email server configuration, a templating engine, and the ability for customers to subscribe or opt out of notifications.
View Ebenezer’s final report or watch his screencast below.
Group Management in Fineract CN – Ruphine Kengne (Apache)
Ruphine Kengne dedicated her GSOC internship to working on group management and group loan administration in Fineract CN under the guidance of Awasum Yannick. She was able to implement both the back and front-end for group definitions and creating new groups based on these definitions. A New groups can be created, staff assigned, a meeting attached, members and leaders added, and attendance of a group meeting tracked. Ruphine is still to add into the support for group loans which is continuing to work on.
Learn more in her final report or viewing the screencast below.
Group and Center-Based UI in Fineract CN – Pembe Miriam (Apache)
Working under the mentorship of Awasum Yannick, Pembe, was entasked with designing and implementing another UI flavor on Fineract CN to cater towards group and center-based microfinance operations. Pembe designed and implemented a new login page, navbar and side-nav user interfaces, the UI for creating a center, viewing a list of centers and the collection sheet.
Please view Pembe’s final report to learn more.