I am a programmer since the 80’s in many platforms and programming languages. I’m a wannabe scientist and an experienced software engineer.
I’ve done a bit of everything: low-level C software, C++ libraries, compilers and graphical interfaces, C++ debuggers in Java, Perl and PHP web systems, worked with (and written new) database systems, network services, games and distributed computing in a plethora of environments.
Unix is my window to this world for 2 decades, giving a special emphasis (and return) to the open source community. My current focus is on technology and development on restricted environments, from small memory to highly distributed systems.
- Toolchains: Compilers and debuggers
- Mission-critical, high-availability and high-performance development
- Development in C, C++, Java, Perl, PHP
- Unix development (Linux, BSD)
- Relational databases (MySQL, Oracle)
- Distributed and scientific computing
- Technical Leadership
My main interests are algorithms, neuroscience, distributed and mobile computing, dynamic systems, complexity and chaos, game theory, drums, flying, archery.
LLVM Team Lead – Linaro
Since Jan 2013
Technical leadership for a small team of developers focusing on ARM and AArch64 development for the LLVM compilation infrastructure.
- Performance and correctness analysis of generated code
- Completing ARM support (asm, exception handling, MCJIT, sanitizers, tools)
- Auto-vectorization and transformation cost model analysis
- Improving support in the toolchain (integrated assembler, libraries, linker, debugger)
- Validating and consolidating a reference toolchain for ARM and AArch64
- Refactoring and improving generic code
- Providing support for system builds: Android, FreeBSD, Mandriva, Chromium, Linux
- Benchmarking and validating upstream releases
- Providing infrastructure and development of continuous integration
Senior Software Engineer – HPCC Systems
Sep 2011 ~ Dec 2012
Developing HPCC’s highly distributed, Open Source, BigData system.
- Development of code generation and optimisations for the ECL compiler
- Refactoring of the distributed file system, implementing transactions and validation mechanisms
- Presented a talk about building open source communities on the HPCC Engineering Summit
Senior Software Engineer – ARM
Dec 2008 ~ Sep 2011
Member of System Design Division, on compiler R&D.
- LLVM Tech Lead, guiding internal development for OSS LLVM, interacting with the community.
- Supporting the LLVM front- and back-end for the ARM platform.
- Researched LLVM technology by connecting the EDG front-end to LLVM ARM back-end, producing a working compiler which ultimately convinced ARM to switch to an LLVM based toolchain.
- Working with C/C++ standard, ARM ABI, generic codegen and linkage problems, exception handling, debug information, NEON and auto-vectorised code generation.
- Presented a talk and chaired a parallel session at the LLVM Developer’s Meeting 2010 (San Jose, CA).
- Organised the first European LLVM User Group Meeting in 2011 (London, UK), which became the official EuroLLVM Developers’ Meeting every year since.
Member of System Design Division, on debugger development.
- Development Studio 5, an Eclipse-based C/C++ debugger written in Java 1.6 working on the debugger engine (middle-end).
- Bare-metal debugging: memory management, semi-hosting, run control, ABI support, stack unwinding, etc.
- Linux application debugging: gdbserver, shared libraries, threads.
- Working alongside the front-end (Eclipse) and the back-end (JNI interface to the boards, models and gdbserver) teams.
- Using Scrum methodology, unit tests, coverage check, regression tests and working in parallel with a validation team.
Software Engineer – EBI/EMBL
Dec 2005 ~ Nov 2008
Member of UniProt Production team delivering the protein database to the public. Maintain and optimize procedures on a multi-cluster Unix environment.
- Maintenance of the UniProt C++ library and associated production tools.
- Reorganization of procedures and rewriting internal tools to optimize speed and network usage and to
reduce failure rate and staff dependency, reducing running time 10-fold.
- Coding data access and indexing algorithms in C++ for speed and efficiency.
- Parallelization to hundreds of nodes running Alpha/Tru64 and AMD/Linux64.
Software Engineer – Yahoo!
Jul 2003 ~ Nov 2005
Member of Americas Platform Team delivering solutions for Brazil, Argentina, Mexico, Miami (espanol.yahoo.com), Canada and South Asia.
- Deployed mobile services for Latin America countries including SMS Mail, SMS Messenger, WEP Messenger and WAP pages.
- Responsible for Americas’ front page infrastructure as a developer, maintaining the publishing software infrastructure and as a Unix admin keeping the cluster up-to-date and running.
- Responsible for Americas’ Sponsored Matches infrastructure developing the marketing tool (C++/PHP), exporting the technology to South Asia.
- Member of the MySQL Geeks group acting as local and global support for Yahoo! developers.
- Former member of Latam Search Team where we were the first international team to deliver the new Yahoo! Search Technology.
Java Consultant – Omnidata Networking
Feb 2003 ~ Jul 2003
Plan and develop transportation insurance software using Java.
- Led a small team to deploy a desktop application using Java Swing and WebService Servlets.
- Developed C drivers for serial hardware communication using the Java Native Interface.
C++ Consultant – Fortis IT Consulting
Jul 2002 ~ Jan 2003
Develop C++ desktop tools, Java Servlets and Oracle PL/SQL procedures
- Maintained a Customer Manager System (C++/GUI) for Sulamerica Seguros.
- Developed mileage system for Transamerica Flats (C++/GUI).
- Develop Oracle PL/SQL packages of data import/export and Java/Servlet support packages.
Developer – Insite Soluções Internet
Apr 1999 ~ Jun 2002
Web Developer, Product Manager and MySQL and Oracle DBA.
- Full-featured web calendar for ZAZ (www.zaz.com.br).
- Full-featured e-commerce book shop (www.temporeal.com.br).
- Complete e-commerce’o’matic solution where clients can build their shops online with online payment and stock control (InShop).
- Improved the calendar as a complete web organizer merging with other products (mail, addressbook, etc) for iG (www.ig.com.br).
- Implemented KDE componentes to build a POS Browser for Casas Bahia (500+ stores) together with IBM.
- Other web-based and server-side development projects.
- Planed, installed and managed MySQL and Oracle databases with replication and multi-master setups.
Talks, Articles and Technical Reviews
C++: How To Program [10th ed. Pearson] (Technical Review)
Technical review of this introductory text book for first year classes on C++, with increasingly complex subjects, all the way to templates, design patterns and the standard library containers and algorithms. This edition focus on the new C++14 features.
LLVM Essentials [1st ed. Packt] (Technical Review)
Technical Review of this introductory book on using LLVM as a compilation infrastructure for readers somewhat familiar with compilers.
LLVM ARM Toolchain [Linux Plumbers 2014] (Talk)
Bringing a full LLVM toolchain together, from core support tools (like integrated assembler and exception handling) to libraries and tools.
GCC and LLVM Collaboration [GNU Cauldron 2014] (Talk)
With LLVM mature enough to feature as the default toolchain in some Unix distributions, and with the inherent (and profitable) share of solutions, ideas and code between the two, we need to start talking at a more profound level. There will always be problems that can’t be included in any standard (language, extension, or machine-specific) and are intrinsic to the compilation infrastructure. For those, and other common problems, we need common solutions to at least both LLVM and GCC, but ideally any open source (and even closed source) toolchain. In this talk, we shall discuss to what extent this collaboration can take us, how we should start and what are the next steps to make this happen.
Auto-Vectorization in LLVM [FOSDEM 2014] (Talk)
Auto-Vectorization has come a long way since the early vector-processing CPUs, and compilers generally take a long time to implement it, prioritizing other more generic features instead. But with all recent highend chips containing some form of SIMD operations, auto-vectorization became a necessary feature on any modern compiler. LLVM was perhaps the latest of the big compilers to have a decent vectorization engine, but it has grown considerably for the last year, and the investment on SIMD code generation will not
diminish. This presentation outlines the past implementations, what we currently have available and peeks into the engineering pipeline to see what else we are working on.
Connecting the EDG front-end to LLVM [LLVM 2010] (Talk)
Talk on compiler front-end, IR semantics and back-end support for the ARM platform. This project was the technical preview to understand the quality of the LLVM middle and back ends to cope with ARM code generation as well as the kind of C/C++ that ARM customers had, making sure that LLVM was ready for prime time on ARM. Ultimately, ARM took a decision to replace their ageing compiler for LLVM, based on the success of this project.
MySQL Cluster [SQL Magazine 2006] (Cover Article)
How to setup a MySQL cluster, what it’s good for and what it’s not.
MySQL Security [SQL Day 2005] (Talk)
How to harden MySQL’s security and how to fend off from the most common types of attack.
MySQL 5.0 [SQ LMagazine 2005] (Article)
New features of MySQL 5.0.
MySQL on Linux [Tempo Real Training 2004]
Lecture to 500+ people about running MySQL on Linux. Second time, same event.
MySQL on Linux [Tempo Real Training 2003]
Lecture to 500+ people about running MySQL on Linux.
Universidade de São Paulo
Working towards bachelor’s degree on biology and physics.
Undergrad work on biology, chemistry and physics.
- Numerical modelling of social insects, Dick Koedan, IB, USP.
- Numerical modelling of RNA evolution, Airton Deppman, IF, USP.
- Protein physical chemistry, Shaker Chuck Farah IQ, USP.
- Pigment cell physiology, Ana Maria Castrucci, IB, USP.
- Mammals’ CNS pharmacology, Regina Markus, ICB, USP.
- 90 credits on Mathematics and Computing.
Artur C. Clarke Laws of Life
When a scientist states that something is possible, he is almost certainly right.
When he states that something is impossible, he is very probably wrong.
The only way of discovering the limits of the possible is to venture a little way past them into the impossible.
Any sufficiently advanced technology is indistinguishable from magic.