Professional Experience

Proton AG (ProtonMail)

Sept 2021Today

Core Android Developer

Worked in the Android Core Team, building shared features to be integrated into Mail, VPN, Calendar and Drive clients, helping with the integration or doing it for them when possible. Some important features were:

  • Rewrite of their Human Verification feature.
  • Development of a custom Gradle Coverage plugin for multi-module projects since Kover didn't meet our requirements at the moment.
  • Integration of coverage with their CI and improving CI build times.
  • Creation of Danger plugin for coverage.
  • Integration of a WorkManager based event manager into Calendar, replacing a previous legacy system.

The work done here can be seen in their Github repo, as the code is always open sourced upon release.

Nomasystems

Oct 2019Sept 2021

Mobile Software Engineer (Remote)

iOS:

  • Zara app for iOS, used by millions of users of 86 different countries. I worked with other several Teams (Android, Backend, Payments, QA) from other companies in a joined team of around 20 members. I was in the Checkout team, meaning we supported and added features to the shopping cart, order summary, order tracking, history, etc., as well as integrating new payment methods and SDKs.

iOS and Android, Spring Middleware:

  • Create Home app, successor of the old generic Tuya-based apps used by IKOHS company for their IoT solutions. It combines all the services of IKOHS - eCommerce, smart IoT devices, recipes for their chef robots, etc. It's still in active development.

    We are a small team of 2-3 developers: on the iOS side, we decided to use a MVVM architecture using RxSwift -since we had to support iOS 12 and Combine was not an option-, while on the Android side we also used an MVVM - Redux based architecture based on an improved version of CoRedux, using coroutines instead of RxJava since suspend functions, flows and livedatas were more than enough.

    However, the main problem was the integration of several services for authorization and accessing data from the eCommerce, Tuya SDK and other APIs, so we built a middleware using Spring and Kotlin to move this logic out of the mobile apps.

    You can take a look at the published Android App and iOS app in their stores.

iOS Developer

  • Rewrite of JOOR's retailer and customer apps, using Combine, ReactiveCocoa and GraphQL, working along with their US based team in very different timezones.

buddi LTD

Sept 2017Oct 2019

Mobile Software Engineer (Remote UK)

Android and iOS:

  • Android and iOS apps buddi connect and nujjer, which use BLE devices to monitor user activity and health and help them if they either fall or press a panic button.

React Native:

  • Several internal apps branded 'Eagle', used to monitor either clinical patients or offenders which carry a geolocated tag or wristband.

RealtrackSystems

Oct 2016Jul 2017

Mobile Software Engineer

Embedded Systems:

  • Built an ANT and BLE manager and relay software using devices from Nordic Semiconductor.

Android and iOS - internal projects:

  • Android and iOS app to analyze data from Wimu devices using BLE: Kotlin + Swift. It uses both direct connection and advertising - as iBeacon does.

iOS:

  • Impact test suite: Swift. Represent an object in a 3D scene using SceneKit, tracking its movement, showing impacts that hit it and data analysis from all the data that a Wimu device can collect in realtime at maximum BLE advertisign frequency.

Vemovi

Oct 2015Jul 2016

Senior Software Engineer

Android and iOS:

  • Soydeunica - soydeunica.com: Java, ObjC and Swift + PHP REST API. Corporate app. It includes a chat, maps, push notifications, several user profiles, data charts and filtering...
  • Agronote - agronote.com: Java and Swift. The app is based on a custom - AngularJS style - layout parser to build powerful UIs on runtime, filtering results and data collection. Everything is controlled via a web panel and a flexible API.
  • Fresas de Europa - Google Play,  App Store: written in Cocos2Djs.

iOS:

  • VPerf - App Store: rewritten entirely from ObjC to Swift, refactored to be more efficient and reusable - half the lines of code, more features. Real time animated Chart library written from scratch, connection to C++ APIs, integrated IAP and localization.

Treze Estudio

JunJul 2015

Android and iOS Developer

Built El Ejido Actualidad Android and iOS Apps.

Luxunda

Oct 2014Jun 2015

Android Developer

Built an Open Source Live Video Streaming Android App based on FFMPEG and P2PSP protocol.

Farmacias Ltd.

MarApr 2014

Android Developer

Built Farmacias.com Android App. Maps with efficient clustering, +1.500 markers.

Freelance

20132019

Android, iOS and Ruby on Rails Developer

Over the years, I've worked on several projects as a freelance developer:

  • Reserva Marina de Cabo de Gata Android and iOS App - MapBox offline Maps, TileMill, OpenStreetMaps.
  • Barcelona Noticias Android and iOS App and redesign.
  • Cabo de Gata Android App.
  • Cimenta2 former website on Ruby on Rails.
  • WedPhotoSpain former Android App and API on Ruby on Rails.

Education

University of Almería

20102015

Degree on Computer Science

Specialized on Software Engineering and Technologies of Information and Innovation - which means I have fair knowledge of software engineering and estimations and network protocols and communications.

Areas of Expertise

Android

10 years of expertise on Android. I started developing Android on my first college year at the same time I learnt about Java. This was the time the HTC Magic was released, which was my first Android phone. Since them, I've worked with almost every Android API: maps and location, push notifications, networking, databases, background and foreground services, alarms, broadcast receivers, AIDL...

I have built apps on Java, Groovy and Kotlin languages.

iOS

7 years of experience. I started working on iOS apps on my fourth year of college, using Objective-C and I started building iOS and OSX apps on Swift soon after. I've worked with several APIs, CoreLocation, CoreData, custom UI and NSViews, UILayer manipulation, push notifications, IAPs... I also have some experience with Swift on the Server.

Javascript

Used mainly for Cocos2Djs games, AngularJS apps, and a little project in NodeJS. I've also worked with jQuery and DOM modifying javascript code.

Python

I have used Python on a few projects, from web services using Flask and websites using Django to personal apps and video streaming relay servers.

Side Projects

CyanogenMod contributor:

First implementation of the Custom Toggles of the StatusBar - or Tiles, as they were known later - for the CM ROMs. Written both the toggles code and the customization one for both Android 4.0 and 5.0.

Android custom ROM developer:

Ported several LineageOS based ROMs to the Xiaomi MIX 2 device before LineageOS dev - which later included some of these changes-, fixing several issues including camera, leds, proximity sensor, etc. Also, created custom navigation gestures similar to those of iPhone X or early MIUI 10 ROMs and added it to those ROMs: video demo.

Also, I 'tweaked' AOSP's GPS internals to report mocked GPS locations as real ones to play Pokemon Go.

IntelliJ IDEA contributor:

I have written several plugins:

  • Plugin for Otto eventbus library on Groovy code.
  • Plugin for SwissKnife event method generation based on annotations.
  • Plugin for Groovy overriding and implementation method autocompletion for Groovy language.

This last plugin was later merged into IntelliJ Community Edition.

SwissKnife:

Library written in and for Groovy, which:

  • Allows you to inject Views and Events à la ButterKnife.
  • Use of @OnMainThread and @OnBackground annotations to automatically execute a method either synchronous or asynchronously as in AndroidAnnotations.
  • @SaveInstance and @Parcelable annotations to generate Parcelable objects from POJOs automatically and save and restore them on Activities or fragments.
  • @Extra and @FragmentArg annotations to automatically parse Intent extras and Fragment arguments.

SpannedGridLayoutManager:

Custom LayoutManager built to always fill every gap in a grid layout, based on a published paper's result. See on Github.

Miso:

Port of JSoup library to Swift. Includes an HTTP client, HTML parser and CSS and XPath selector feature, among other features. It's used on the 'Embolsados' app. See on Github.

Embolsados iOS:

iOS counterpart of the Android's Embolsados app. It allows interim candidates to check their position on several public job banks and be notified when this changes. App Store link.

AsyncJob:

Library to launch operations on the main thread or on a background one on a simple and fast way, and can be used along with ExecutorServices when complex asynchronism is needed.

ART Player:

Development of the Android app ART Player, a plugin-based music player which let you stream and/or download songs from services such as Grooveshark or Youtube. First, it was build using AIDL for managing the connection with the plugins, then it was updated to use BroadcastReceivers.

SayCheese

SayCheese is an OSX Swift app which takes screenshots of your whole screen or just a región and lets you upload it to imgur, either anounymously or using your account. It was developed on the same week Swift language was presented.

Talks and Courses

ALMERIBUS – BetaBeers Almería

Talk about the AlmeriBus app and its internal design, as well as the problems I encountered when I published it.

BASIC & INTERMEDIATE ANDROID FOR TEACHERS – IES Murgis

Semi-presential course to recycle computer teachers and make them able to code – and teach how to code – basic Android apps on Java.

GROOVY ON ANDROID – Androides Almerienses & BetaBeers Almería

Tech-talk about Groovy as an alternative language to Java on Android, advantages, disadvantages and its actual state.

WEDFOTOSPAIN – Jornadas IES Al-Ándalus

Talk about the development of the WedFotoSpain app and the several difficulties found while building it, such as data persistence or memory management when using large images.

SENSORS ON ANDROID – Androides Almerienses

Workshop on how to use several Android sensors, from accelerometer to Bluetooth or Wi-Fi.

More info

LANGUAGES:

  • Spanish - native language.
  • English - B1, upper-intermediate certificate.
  • French - basic level.
  • German - A1.