Independent Android/iOS Developer
2011 - PRESENTFreelance- Developed an Android-based taxi booking system with two separate Android apps and a database server based on a RESTful API. Passengers were able to search for nearby taxis and filter by type of car available as well as select from nearby places of interest (e.g., airports, train stations, hotels, restaurants) or designate a location on a map as their target destination. After sending out their request, taxi drivers would then be notified via push notification, which would include the details of the request and the option to accept or decline. If accepted, the passenger would be notified by push message and a live route to the pickup location would be sketched on a map, which would track the locations of both the driver and the passenger. The pair could also communicate by sending messages through the app. Finally, passengers could pay through the app using PayPal or credit card as well as rate the driver's service at the end of the ride.
- Developed an Android app for a courier delivery company, which connected to a central server through a RESTful web service. The app was used to track the delivery of packages and send reports back to the server. Supervisors could track deliveries and review delivery reports through an online control panel. In addition, a digital signature verification algorithm was implemented as part of the job.
- Developed an Android app for finding childcare services. Users were able to perform location-based searches, read client reviews, and contact childcare centers, all through the application. Further, the app provided driving directions and real-time navigation to childcare centers, as well as the ability to both review childcare centers and report their services to local authorities, if necessary.
- Implemented several image warping algorithms on Android, including bulge effect, explosion, implosion, etc.
- Developed an Android app for budget tracking and automatic budget population which would take in data input from the user (e.g., location, profession, income, expenses) and generate a suggested budget using statistical data that would both keep the user's constraints in mind and maximize savings.
- Developed an Android app which allowed users to search for party venues based on their current locations. Included such functionality as: filtering search results based on distance, cost, and user ratings; adding new venues to the app's database; earning credits after rating venues that are redeemable at said venues; and buying party credits or entry passes through PayPal or by credit card.
- Developed an Android app for a private security company used by their security guards to report guard patrol activities, arrests, or incidents to their supervisors. Through GPS, barcode scanning, and advanced camera features, the app was able to ensure that the guards were patrolling as their duty required. Further, a desktop client, developed in C# .NET, was also provided to allow supervisors to view all data and reports generated by the app. Finally, the app allowed both guards to print traffic tickets and reports from the app using a Bluetooth printer, and supervisors to communicate and assign tasks to guards from their desktop through push messaging.
- Utilized Git and Jira for source control and issue tracking. Developed using MVC with Agile methodologies.
- Developed an Android app which allowed users to take or upload photos and apply basic filters before sharing them on Facebook and Twitter. Further, users could schedule their posts to upload at a certain time.
Technologies: PHP, XML, C#, SQL, Swift, iOS, Java, AndroidSoftware Engineer
2019 - 2019Duolingo- Developed new features, specially targeted to users in China—for example, user signup via WeChat, share via WeChat and earn rewards, etc.
- Created A/B tests to battle test new features, UX changes, optimizations, etc.
- Wrote custom UI components—for example, a UI widget that can take country code and phone number input, validate it on the fly, and then transform it for verification code input.
- Implemented fluid animations with Lottie.
- Examined memory usage to find possible optimization points, memory leaks, etc., and fixed them.
Technologies: RxJava, Lottie, Android, KotlinAndroid/iOS Developer
2018 - 2018iVerified- Improved the scanning of physical identity documents using the device camera by optimizing the detection and processing pipeline.
- Used OpenCV and machine learning to better detect ID documents and classify the data.
- Used Tesseract to extract data from image segments.
- Designed and implemented a two-way data sync process that ensures that the documents and verification data are kept in sync between the server and the apps in a secured manner.
- Set up continuous deployment (testing, building, signing and release) with Fastlane and a remote Jenkins server.
Technologies: Tesseract, Core ML, OpenCV, Swift, Java, iOS, AndroidSenior Android/iOS Developer
2017 - 20181stScreen- Wrote SDKs in Java and Swift for Treasuredata based on their official SDK. Improved local caching, optimized memory usage, added scheduled batch uploads in the background, and improved the fluidity of the API.
- Wrote the 1stScreen SDK in Java for Android and in Swift for iOS to be used by developers to collect numerous kinds of analytics data, with device data collection made easy and a default fallback strategy for cases when hardware or permission might be unavailable.
- Deployed and released the Android SDK to a private Maven repo so that only the authorized developers can access the SDK.
- Deployed and released the iOS SDK to a private Cocoapods repo so that only the authorized developers can access the SDK. The library is distributed as a binary.
Technologies: Gradle, CocoaPods, Maven, iOS, Android, Swift, JavaLead Engineer
2016 - 2018Credntia- Led the planning, architecture, development, scaling, and deployment of the Android and iOS apps.
- Chose a new architecture for the iOS app for better performance as well as suggested new DBMS and security enhancement for proper encryption and protection of data.
- Designed and implemented a new clean architecture for the Android app for better performance, stability, and scale. Used Dagger2 for dependency injection, RxJava, and reactive extensions for reactive programming support.
- Worked with the team to design data structure and infrastructure for the Parse and Firebase (later) back end.
- Worked with the team to design a secured REST API for public exposure.
- Developed a new barcode scanner library for Android based on Google's Mobile Vision API.
- Developed an OpenCV-based mobile vision library that can detect ID documents (e.g., passport, driver’s license) in real time using the device camera.
- Worked on achieving HIPAA compliance for the Android and iOS apps. Some changes had to be made to meet the business associate requirements for HIPAA. Made changes to terms and privacy policy visible to the user, made changes to acquire the consent of the user explicitly at the moment of scanning a medical ID. All sensitive data were protected with 256-bit AES encryption and stored locally. Data were uploaded to a secured server over HTTPS only after the user's consent, and the user could choose to delete all data from server or device at any time. Access to data was protected by two layers of security. First of all, the user had to log in with their username/password and then their local session would expire after a minute of inactivity (idle, switched to another app, turned the screen off, etc.). The user needed to enter their local passcode after session expiration to regain access to data, and the encrypted database would remain locked until successful passcode verification. Extra security measures were taken to blur images shown in the recent apps list so that no sensitive data would be exposed through those.
Technologies: Dagger, Realm, Mixpanel, Fabric, RxSwift, RxJava, JSON Web Tokens (JWT), Go, Swift, Java, OpenCV, Encryption, Parse, Firebase, iOS, AndroidLead Engineer
2015 - 2017PartyLife- Did requirement analysis with the founders and made a detailed technical specification.
- Designed the system architecture and defined the infrastructure components based on the requirements and business goals.
- Wrote a detailed specification for the required back-end service and led the web team to build a robust REST API.
- Developed the native Android and iOS apps with social features like profiles, messaging, search, etc.
- Designed the continuous development, internal testing, and deployment pipeline for continuous improvement of the platform.
Technologies: Image Processing, Cache, REST, SQLite, Facebook API, ZOOZ API, Location Services, Google Maps API, MySQL, CodeIgniter, PHP, iOS, Android, Swift, JavaLead Android/iOS Developer
2013 - 2015Cabeze- Developed Android and iOS apps for an Uber-like service. Developed both driver and passenger apps.
- Developed innovative UI libraries (sliding drawers, floating views, etc.) to build a modern yet smooth user experience.
- Utilized Google Maps API and device's GPS for optimized turn by turn driving navigation and ETA calculation.
- Developed, tested, and optimized data refresh strategy for maps to provide an almost real-time experience.
- Developed, tested, and optimized a push- and pull-based communication strategy between driver and passenger apps to ensure a smooth overall experience.
- Integrated payment gateways, e.g., PayPal and credit/debit cards.
Technologies: PayPal API, Geolocation, Google Maps, SQLite, REST, Objective-C, Java, iOS, AndroidAndroid Developer
2013 - 2013Handup- Developed a collaborative voting app for secure voting.
- Developed a text input control based on Edittext that could identify, categorize, and validate entered text using regular expressions and showed added items as chips (https://material-ui.com/demos/chips/).
- Developed a UI widget that allowed the user to drag and drop the items, e.g., voting options, to reorder and merge in order rank the options.
- Wrote a horizontal bar chart widget and a pie chart widget to show voting statistics in an interactive way.
- Developed a statistical ranking algorithm and implemented that for ranked votes.
- Used geofencing for notifying users when they are in a designated voting location. Used GPS and other location APIs to filter ongoing location-based votings.
Technologies: GPS, Google Maps API, SQLite, REST, Regular Expressions, OpenGL ES, Java, Android