Android engineer, with past full-stack web development experience. My experience includes exposure to Scrum agile framework, unit testing and test-driven development (TDD), behavior-driven development (BDD) and automation. I love writing code as much as testing them. Outside work, I contribute to open-source projects and technical communities. List of my works can be found in Portfolio section of this document.
Senior Android Engineer (SDE 2)
Regional Android property apps (consumer and agent): 8 apps in 4 countries, 3 languages.
Regional property websites (consumer), mobile sites and web services.
Cloud/on-premise Rich-Internet-Application (RIA) for governance, risk management and compliance clients.
Academic research with focus on software reuse, domain-specific language (DSL) and model-driven development (MDD)
Master’s Degree, Computer Science
Bachelor’s Degree (Honours), Computer Engineering
Materialistic – Android application (open source)
tldroid – Android application (open source)
PropertyGuru Android applications
cucumber-api – Ruby gem (open source)
PropertyGuru mobile sites
Other works can be found on my website and Github
This is a personal project where I spend my free time to develop, practice and keep myself up-to-date with latest technologies that I do not have chance to do at work due to product requirements.
Materialistic is an open-source news reader Android application with material design look and feel. The project demonstrates uses of latest Android APIs, dependency injection, supporting different device’s orientations, handling dynamic resources switching, and unit testing with Robolectric.
The project is hosted at https://github.com/hidroh/materialistic
This project has been featured on Android Weekly issue #144: http://androidweekly.net/issues/issue-144
Inspired by cucumber, I developed and published cucumber-api, a Ruby gem extending cucumber, to allow testing and verification of API dependency in BDD style.
Most mobile apps depend on service providers, either via RESTful API, or platform-specific SDKs to consume and manipulate data they provide. Putting cucumber-api as part of automation process allows one to be confident of expectation to external dependency.
The gem is first developed for private use at PropertyGuru, as part of daily automation process, and later cleaned up and published for community use.
The project is hosted at https://github.com/hidroh/cucumber-api
In this regional project, we develop and maintain the most popular property mobile applications for 4 South East Asia countries (Singapore, Malaysia, Thailand, Indonesia), supporting 3 languages. I am a member of the 2-3 developers Android team, and the major contributor, in charge of both consumer (public) and agent (paid) products.
Since joining the team, I have introduced and started unit testing with Robolectric testing framework. Over the course of less than one year, we improve our test coverage from 0% to 90%. I advocated and initiated our cross-platform UI automation with Calabash and Cucumber, setting up API and UI automation tests. I improved our continuous delivery and continuous integration process with Gradle, Jenkins and Github integration, setting up parallel UI automation with multiple devices.
In this regional project, we developed and maintained the most popular online property portals for 4 South East Asia countries (Singapore, Malaysia, Thailand, Indonesia), supporting 3 languages. I was a member of search team, in charge of consumer-facing products.
Since I joined, the team has transformed from a big, traditional development team to a 6-person Scrum development team, with 2-week iteration. We pioneered and actively practiced test-driven development, pair programming and automation testing. We worked closely with other teams to consolidate legacy products, migrated and re-architected in-house legacy framework to the more modern Symfony2 framework, shipped our first ever RESTful web services and mobile sites.
This project is a fun project, started from a 24-hour international hackathon (AngelHack Singapore 2013). Together with 5 other engineers, within 24 hours, we managed to complete a location-based chat application using PHP Laravel framework, (later switched to node.js) and web sockets. The project attracted attention from the hacker crowd as well as the judges, partly due to its controversial name, and we won several sponsor prizes as well as being one of the top 10 finalists of the event.
Following the surprise success, kinkie.im competed in 2 other events in the following months: SeedStars World Singapore and Blackberry App Challenge. I was the lead developer for back-end, using node.js, as well as Blackberry HTML5 application.
In this project I was a member of a 5-person development team. We followed strictly Scrum development process, with 1-3 weeks iteration. I initially joined the core platform team to work on cloud-migration project, from in-house local Internet application to Azure cloud application. I then progressed as one of the lead developers of 2 of the most important components of the application (scheduled task manager – client side, and schedule service – server side); in addition to maintaining, enhancing other existing features and implementing new features.
In this project, I developed a productivity tool helping users manage families of similar documents. The usual practice is to capture similarities in templates that must be copied and customized to a new context. DME, implemented as a Word add-on using Visual Studio Tools for Office (VSTO), attempted to automate this manual process.
In this project I addressed the problems that hinder widespread application of MDD and code generators: code generated from models must often be modified by hand. To avoid that developers tend to use models/generators during initial development only, and abandon them during follow up development and maintenance.
My idea was to allow developers use the full power of models and generators, but at the same time to let them merge manual extensions in a way that any future code re-generations would not override them. The project was recognized internationally with a publication at International Conference on Software Engineering.
ICSE 2011 NIER track · Authors: Duy Trung Ha, Stan Jarzabek
Developers tend to use models and generators during initial development, but often abandon them later in software evolution and reuse. One reason for that is that code generated from models (e.g., UML) is often manually modified, and changes cannot be easily propagated back to models. Once models become out of sync with code, any future re-generation of code overrides manual modifications. We propose a flexible generator solution that alleviates the above problem. The idea is to let developers weave arbitrary manual modifications into the generation process, rather than modify already generated code. A flexible generator stores specifications of manual modifications in executable form, so that weaving can be automatically re-done any time code is regenerated from modified models. In that way, models and manual modification can evolve independently but in sync with each other, and the generated code never gets directly changed. As a proof of concept, we have already built a flexible generator prototype by a merger of conventional generation system and variability technique to handle manual modifications. We believe a flexible generator approach alleviates an important problem that hinders wide spread adoption of MDD in software practice.