About

Hi! I’m Eduardo Nunes!

I’m a Software Engineer with 16+ years of work experience, interested in Programming Languages, Software Architectures, Distributed Systems, Microservices, DevOps, Product Design, UX, etc.

I currently work at Bravi as a Lead Software Architect. Before that I was co-founder of a startup, Chief Technology Officer at Conrad-Caine, Software Developer at an E-mail Marketing Startup and Network Administrator at Vetorial.net ISP. Check out my LinkedIn profile for more information about my work experience.

Skills

I’ve been working with lots of different technologies and solutions over the years. It is hard to remember all of them however I will try to list them in a kind of chronological order (most recent ones first), I highly recommend you read it from bottom to top.

Bravi Era

My first goals at Bravi were to technically build up a team and to architect the software foundation for the development of products. Besides line management duties, part of main responsibilities at Bravi are:

  • Plan / support development of the technology skills of all developers;
  • Design and architect products and services;
  • Participate as a member of the senior management team;
  • Monitor, evaluate and select technologies that can be applied to future products and services;

One of the key decisions I took right after join Bravi was to adopt microservices as the main software architecture to build up the software foundation for all products and services. Apart from microservices I’ve been developing lots of different skills, part of them as consequences of the chosen architecture:

  • AWS (Amazon Web Services)
    • VPC
    • ELB
    • EC2 AutoScaling
    • RDS
    • CloudFormation
  • Docker
  • CoreOS
  • Flux
    • Flummox
    • Fluxible
  • React JS
  • Fig (aka Docker Compose)
  • MongoDB
  • Redis
  • OAuth2
  • Apache Solr
  • The Twelve-Factor App
  • Microservices
  • NGINX
  • Node.js
    • Mongoose
    • axios
    • webpack
    • babel
    • http-proxy
    • lodash
    • Knex JS
    • Yeoman
    • swig

As this blog evolves I will keep this section updated, I will also add more detailed information regarding the skills I’m developing at the moment.

General Web and Mobile Era

  • Node.js Since Node.js become production ready (actually when it got stable enough), I decided to use it wherever it was possible. End-to-End JavaScript, High performance, Low memory footprint, Single Thread, Fast boot, NPM, Http client / server, those as just a few features / benefits that made me take the decision to use it as the main language for almost all projects. I started developing Node.js apps using the following stack:
    • Express
    • node-mysql
    • async
    • rsvp
    • request
    • ejs
    • commander
  • Developed Android 1.6+ and iOS 4+ native, hybrid (PhoneGap) and web-only apps for worldwide companies. The apps could be categorized as:
    • Advertising apps;
    • Learning apps (course-based, SCORM, etc);
    • Utilities apps;
    • Institutional apps (general information, reports, etc);
  • Developed web sites for digital agencies using the following PHP Web Frameworks:
    • CakePHP
    • CodeIgniter
    • Symfony 2
    • Zend Framework
  • Python + Django
    • Developed a small web application to provide charts and analytic information based on power consumption logs

Java Web Era

  • JavaScript
    • Although I had contact with JavaScript before, I really got experienced on it developing web applications backed by Java. By covering JavaScript / HMTL / CSS I became a Fullstack Software Engineer which helped me a lot my career as Software Architect and CTO
  • PostgreSQL
    • MySQL is awesome but I had some requirements that made me take the decision to learn PostgreSQL and use it for some projects. Nowadays they are much more close regarding performance and features although PostgreSQL still have some advantages like geolocation handling.
  • During at least 6 years I focused my career on Java ecosystem.
    • I developed a distributed system to delivery e-mail marketing, a product very similar to MailChimp (One year after leaving the company, the product was sold to its major competitor in Brazil).
    • During my work as Chief Technology Officer at Conrad-Caine I developed lots of Java applications, including:
    • An intranet web application to deal with company hierarchy, job descriptions, open jobs and applicants;
    • A huge single page application to manage and map companies strategies;
    • A social network for disabled people;
    • An insurance web platform to connect customers and brokers;
    • Lots of Web sites and landing pages;
    • The applications listed above had different stacks and the stacks were formed by the following set of frameworks / libraries:
    • JDK versions 4, 5 and 6
    • JEE 5 (JSF, JPA)
      • Facelets
    • Glassfish, JBoss, Tomcat and Jetty
    • Hibernate
    • Struts 2
    • GWT
    • Spring
    • FreeMarker
    • JSP
    • Velocity
    • Java Spaces (GigaSpaces)
    • DWR
    • Swing
    • IDEs (Netbeans, Eclipse)
    • Google Guice
    • Servlet API
    • Ant
    • Maven 1 and 2
    • ArgoUML

University and past Era

  • MySQL was the simplest and easiest relational database to learn and use. It became my favorite DB for years.
  • Linux Kernel Modules
    • During my Bachelor in Computer Science I participated of a Study group that had the aim of improve Distance Learning experience and I was responsible to improve feedback regarding servers as DL courses require lots of servers up and running to work. My goal was to monitor changes in the filesystem, identifying any unexpected behavior. I developed a kernel module to log file system changes.
  • PHP
    • I started simply replacing CGIs by PHP scripts.
  • PalmOS
    • As every new computer-based toy I had, I got interested in develop something on it although I ended up just learning how to do it and creating some silly apps (like a IRC contact list app)
  • GTK
    • Rebuilt the set of UI Object Pascal components using GTK
  • XWindows
    • Learn XWindows protocol and its internals has helped me a lot to understand all window-based operational systems / environments. The concept of windows, events, event propagation become more clear and made me better understand the internals of Delphi / Windows too.
    • Developed a set of UI Object Pascal components (free pascal) from scratch using XWindows protocol
  • C++
    • Developed an SNMP server for embedded linux
    • Developed a set of classes to deal with Sockets, UDP, TCP and SSL (client and server)
  • Make (Makefiles)
  • C
    • C was the next step of my career, it was impossible to manage linux without knowing at least a bit of C. During those days to make linux work perfectly on your notebook you had to do a lot of tweaks, add open source kernel drivers, test lots of solutions and configurations.
    • Together with Pascal, C become my favorite programming language, by using it I was able to do whatever I wanted including interoperate with FreePascal. I also started to have contact with C during High School (data processing course)
  • FreePascal
    • After falling in love with Linux, find an object pascal compiler was the first step to take and FreePascal was the best option, an awesome compiler, very well written and multi-platform
  • Linux
    • I had my first contact with Linux around 1998 and it directly become my favorite development environment. The flexibility of Linux is perfect for developers, you have the power to change whatever you want and customize your operational system as you wish. At that moment Slackware was perfect but unfortunately it became outdated and Gentoo had the best structure, you were able to compile the whole operational system - including tools and applications - with optimizations specific to your hardware, improving a lot performance (I had an Intel Pentium 100). Due to ISP and general Network Administration duties I learnt the specifics of Debian and Ubuntu.
    • Worked in an ISP setting up IRC server, FTP server, SMTP (Postfix) server, Quake Server, VPN, Internet Gateway, HTTP proxy (squid)
  • Delphi
    • Developed client-server checkers game
    • Developed client-server Clue-like board game
    • Developed a skinnable IRC client
  • mIRC Script
    • Developed mIRC script named nIRC (Nunes IRC)
  • Turbo Pascal
    • Developed static page generator
    • Played with MS-DOS terminal, creating windows, menus, keyboard event handling, etc.
    • Played with data structures, simple file compression and file-based data structures
  • QBasic
    • Very very very basic programming knowledge
    • Played a lot with sound function