Here, you will find a lot of details about my past jobs and additional information about the projects in which I've been involved.
Older Professional Experience
Software Engineer at LIFIA [2011-2013]
Home based, monthly travelling for syncing, pair programming and face-to-face coordination updates
- Digital TV ISDB-T.
- Transport Stream Technology.
- Ginga Middleware.
- NCL/Lua applications.
- Linux embedded.
- TS Muxer Technical Overview and challenges
Embedded Software Engineer at CIII [2011-2014]
R+D Project on "Building an Autonomous Quadcopter using Open Architecture".
- CMake Builder.
- Cortex-M3 board.
- WiFi IEEE 802.11.
- Inertial Measurement Unit.
- Quadcopter Technical Overview
Freelance Software Engineer [2011-2012]
- Android OS.
- Bluetooth communication with sensors.
- SiloBag Technical Overview
Embedded Software Engineer at "Robotics Automation Research Laboratory" (CUDAR)
R+D project "Video compression using wavelet transform in Hardware Description Language (HDL)".
- VirtexII-pro board (FPGA + 2 uP PowerPC + 2GB de RAM).
- Kernel Linux Embedded.
- Linux Drivers Development.
Freelance Software Engineer [2007-2010]
Development of an ERP Software based on abanq. Setting up, consulting and customization to the needs of users.
- Coorporate Network Set-up and Maintenance.
- Maintenance of computer servers with GNU/Linux:
- Setting up servers for using PostgreSQL or MySQL database,
- Apache Web Server,
Open Source Projects
- My Github Page
- My Ohloh page
Debian Project. I'm a Debian Developer and I maintain 21 packages. The most
- gcc cross compiler for ARM Cortex-A/R/M processors. Bare metal compiler for embedded ARM chips using Cortex-M0/M0+/M3/M4, Cortex-R4/R5/R7 and Cortex-A* processors.
- GNU debugger for ARM Cortex-A/R/M processors Bare metal GNU debugger for embedded ARM chips using Cortex-M0/M0+/M3/M4, Cortex-R4/R5/R7 and Cortex-A* processors.
- C library and math library compiled for bare metal using Cortex A/R/M Newlib is a C library and math library intended for use on embedded systems.
- lpc21isp In-circuit programming (ISP).
- nikola Simple yet powerful and flexible static website and blog generator.
- crrcsim Model-Airplane Flight Simulator.
- Debian License Tool A tool set for parse and write the debian license (DEP5 compliant) quickly and without pain.
- summon-arm-toolchain A very simple build script for bare metal arm toolchain. I added support for building a debian package
- Qtile Is a full-featured, hackable tiling window manager written in Python. I have my fork on github with some patches
- SL4A I've contributed to SL4A Project with some patches
- DVP Digital Voice Processing using ARM7 (lpc2124) of nxp and muCOS.
- xchat-autoaway XCHAT plugin that allows you automatically set you on idle/away status.
- Trac plugin A Trac Project plugin that allows you to build webforms on new project.
- Skipper IDE for Hardware Description Language.
- cdpedia I am contributor of cdpedia. Is a project to access the information from Wikipedia in Spanish even without an Internet connection.
- Krusader Add support to use Evolution as default e-mail sender
- bazaar Add docs to use bzr with mod_wsgi on Apache.
- Virtual Instrumentation Creation of virtual instruments using python+Qt4
- odfpy Development of csv2ods
I've been working in this position for about a month. I manage all projects (there are a lot!) and I distribute all necessary resources to the teams. It's the first time that I lead more than one team (currently there are 2 teams and more are coming). That’s a great challenge to me.
We are managing all the teams for them to use scrum with a weekly sprint cycle. I'm trying to smooth the transition. A month ago, they weren't using any method for the organization, and now they seem very happy with all the changes. The projects are being written in Python for server applications (Broadcasting Transmission), for embedded applications we are using C++ and C and for Ginga application we are using lua and NCL.
The Project consist in the development of a library that allows the automatic tracking of a specific region in a sequence of images, in order to predict the change in the spatial location and scale.
The project is written in C++/C and uses the next technologies
- Google Testing Framework
- Google Mocking Framework
- Google PerfTools
- log4cplus among others.
We also needed to fulfill all requirements to become ISO certified. That was a great challenge, because we had to write a lot of documents about the architecture and fulfill requirements; things I’ve never done before. We had a close relationship with the owner of the product and because of that, I learnt a lot about the requirements, and transform this into a design. After that, I had to explain the design to the owner of the product and generate a planification based on it. This process of going back and forth was a great challenge for me.
TS Muxer Project
TS Muxer is a product which transmits data (EPG, Ginga, Closed Caption, Over the Air Downloads) associated with Digital TV signal. The TS Muxer is a product designed to meet the needs of both environments, broadcasting (TV channels) and to test enviroments (content producers, laboratories, etc).
The project is, for the most part written in C++ and a small part in C. It uses CMake as building system and libboost Project for Python bindings. The frontend uses django and a RDBMS (MySQL by default) for data persistence. The communication between the frontend and the backend is via xmlrpc.
I implemented all the items listed below:
- RTP input/output.
- Adapter variable bitrate to constant bitrate inputs/outputs.
- FEC over the output(RTP, ASI, ISDB-T) with algorithm implemented from scratch because of the need to minimize the time, less than 6 microseconds for processing 196 bytes.
- Output ISO-13818 compliant.
- Closed Caption ARIB-STD-B24 compliant.
- Python binding of tables and descriptors builders.
- Universal Protocol for Closed Caption Transmission.
- Application in PyQt4 for Closed Captioning in real time.
Also I built a product designed to access the closed captioned information contained within analog signal television (line 21 for NTSC), I converted it to text or straight ASCII, and then transfered it to a PC over a RS-232 line. The product uses a lpc1769 in thumb mode with an edge detector for acquisition of the signal. FGrabber is a TS Muxer sub-project, which allows the re-use of the old Closed Captioning infrastructure on analog TV signal.
The main challenge was to engineer the Forward Error Correction algorithm. I had to base my design using Galois Fields and perform a depth research on FEC before starting to hack on.
One of the purposes of the project consisted in building a hardware+software platform for testing navigation algorithms, covered in differents PhD research at the "Informatics Engineering Research Laboratory" (CIII).
My roll in the project is to lead the Firmware Building Area and the Hardware Electronics. We are using Trac as Project Management software with plugins for the Agile Software Development. We use Scrum performing 15-day sprint cycles with short-term objectives and we have weekly meeting. We use CMake as building system, gtest for UnitTesting and newlib as C standard library. The microcontroller chosen was a lpc1769 of nxp, for the communication with the PC a WiFly RN-131C of ROVING NETWORKS and the IMU is composed with three chips, ADXL345 (accelerometer), ITG3200 (gyroscope) and HMC5883L (magnetometer) with I²C communications.
The version stable of firmware is written in C, right now we are rewriting the firmware using C++ with very promising results. The Software Control is performed by a PID controller and the commands are sent by a PC (software written in Python).
Here is a video of the Quadcopter flying.
The main goal of this project was to design, architect and engineer a Management platform for controlling humidity, temperature and pressure inside Silo Bags. In this way, the product was designed to enable the consumers of the product, using an Android phone, to perform many measurements on different Silo Bag checkpoints. The measurements are stored on a RDBMS Database Engine, Sqlite backed. The user of the product is able to write down notes about any meassure and also be warned if something goes wrong.
This was my first project using TDD and achieved excellent results. The test cases written on Python are performed using the module of unittest.
The frontend uses JQueryMobile project with very good results. The GUI was built using only this library, mainly because of its flexibility, also because it is very active on development. The test cases of the frontend are written using qunit which is part of the JQuery project.
The main challenge was to establish communication with the sensors by using the Bluetooth RF-COMM protocol. Some of the Communication challenges involved very complex tasks that it had to deal with, such as Synchronization, queuing, and multithreading, among others.
My oxidized skills as System Administrator and Network Administrator
- Set up Trac and Redmine (project managing software) with SVN, Mercurial, Git and bazaar.
- Jabber server (ejabberd, prosody).
- Mail service (Postfix, cyrus, courier).
- Backups systems (rdiff-backup, duplicity, rsync).
- DNS (bind, tinydns).
- Virtualization (LXC, KVM, OpenVZ, XEN).
- Web server (Apache, Nginx, lighttpd between others).
- Set up CMS (Merengue, Cyclope3, Drupal, Joomla, Wordpress).
- Set up LVM.
- Set up BTRFS.
- Set up Raid(0, 1, 1-0, 5).
- Set up Farm wikis (MoinMoin) automatized.
- Web cache and proxy (Varnish, Squid, Pound).
- Set up Zoneminder (is a free video camera security application suite).
- Monitoring (munin).
- Firewalls (Shorewall, iptables from scratch, firestarter).
- Set up Bridge and Network infrastructure with multiples interfaces (real and virtual).
- Set up Virtual Private Network (OpenVPN).