About

Hey! My name is Leonardo Braga - welcome to my blog and thanks for dropping by.

Career bits that don't fit in a resumé

I started my career in the printing media, vectorizing logos on Corel Draw for cliché and photolith production. I fell in love with manipulating vector graphics, a skill that served me on countless occasions throughout my career. I remember spending a long time vectorizing many of the icons in shell32.dll and probably still have the .CDR in one of my old backups!

I pursued a career in design for some time and learned a lot, but when I started working with Delphi in 1998, while I was studying at COTEMIG, I realized that software development was my thing. I was obsessed with Delphi, Sockets and the Win32 API, and spent most of my time building the final graduation project, together with the other members of my group. We created a system that allowed teachers to control students' computers in the laboratory remotely, blocking their keyboard to reduce distractions and broadcasting the teacher's screen over the network through UDP with the students. Our project won COTEMIG's Technology Fair in 1999, and I founded my first company after graduation. It didn't last long but taught me a lot, mainly that I had a lot of growing to do, that partnerships are hard and that a company needs way more than technical skills to succeed.

Me and my friends at our team's stand during COTEMIG's Technology Fair in 1999
Our grop with our teachers, after the announcement of our victory

Over the next few years, I built a file compressor in Delphi, multiple ASP Classic web applications, and "hacked" the main software of the company I was working for to save them from themselves - they had lost the source code, and the software required a security dongle plugged on the LPT1 port to prevent piracy, but the vendor that provided these dongles stopped producing LPT1 devices, so without disabling the protection the company couldn't sell new copies of their software. I knew a little about editing hexadecimal files[1] and thought of applying the same idea to bypass the protection on the compiled software. After a lot of googling, trial and error, I finally managed to nop all the checks against the protection dongle, which ended up giving the company enough time to re-implement the entire software, this time using a "modern" USB-based lock. Around 2003, at the same company, I built a prototype showing the capabilities of an "eLearning" platform, which was nothing more than a chat app based on long polling, where the teacher and students could communicate in real-time, with multiple pre-configured channels running in parallel, which ended up becoming a major product of the company, allowing students from all over the country to attend their courses.

I left to found my second company, called Edunet, which focused on building an eLearning/video conference solution in Flash and Flash Media Server. This project taught me so much about how browsers integrated with plugins, as I had to communicate between the Flash plugin and the underlying page to provide some features not available in Flash at the time, such as file uploads. I also got some scars related to networking after battling proxies and firewalls and all sorts of challenges on making data-intensive web applications work with the poor broadband infrastructure available in Brazil at the time. I worked for almost 2 years in this video conference application and built many features way ahead of their time, such as Dropbox-like document sharing and real-time collaborative whiteboarding. These features relied heavily on a Flash Media Server API called SharedObject, which was incredibly powerful but not without some drawbacks, as synching messages across multiple network clients is hard!

Content View Mode showcasing the real-time whiteboard feature
Conversation Mode with the chat area expanded
Content View Mode with the chat area collapsed

Another very interesting problem I worked on at the time was trying to understand how Macromedia was able to offer screen sharing from their web conferencing software while we, the consumers of Flash Media Server, couldn't. After a lot of research and probing on the plugin OCX, I realized that the feature was only available to content served from Macromedia's domain. To try to overcome this, I thought of creating a webcam driver that would send captured screenshots from the presenter's desktop to other users in the call, but even though I knew enough about screen capturing from the work I did on the application I built for COTEMIG's Technology Fair, sending a gigantic bitmap over the internet was not an option at the time. I tried to split the image into multiple blocks, detect the parts that changed from the previously captured screen to the next, but I didn't know an optimized way of building this, and CPU became the bottleneck. These challenges, combined with the fact that the Windows Driver Development Kit wasn't necessarily user-friendly, made it clear that I wouldn't be able to get this done.

The last memorable thing about that startup was a combination of services I built to allow customers to present their PowerPoint slides to the call participants. In little more than 2 weeks, I had a PPT to SWF converter in a Windows Service written in C#, which would observe a mapped network folder where the back-end would drop the PPT files from the customers and use the COM services from PowerPoint to export the slides into PNGs, dynamically generating SWFs from them. This particular feature showed me the power of implementing something in a "full-stack" way, and how that allowed me to fine-tune the user experience to make the flow entirely transparent to the customers: you'd upload a PPT, and your presentation would just pop on the screen of all participants in the call in less than a minute later.

My next career move was to a company entirely focused on eLearning, and most of my projects there were implemented in .NET, Flash, Delphi and a little C++, but the highlight of my time was the people I met there. They were some of the most brilliant minds I had the pleasure to work with, many of them ended up moving to Canada as well, and we continued to have fun creating cool things together there.

Years later, working as a consultant for GEVISA (a GE Transportation plant in Brazil), I built quite a few exciting projects, many of which were born out of observing our internal customers’ problems. In one of those projects, I had the opportunity to make their Active Directory shine, adding metadata to users and groups that allowed me to correlate cost centers and perform fine-grained access control over the data. In another one, I leveraged an existing Excel file maintained by the plant managers with production data as a pseudo-database, which was cached every 2 hours to power an intranet page to create a rich UI with filtering capabilities.

In 2007, even after years of experience working in the software engineering industry, I applied for a Systems Analysis and Development Technologist course since a formal diploma was still required for certain things like immigration. For those not familiar with this type of degree, in Brazil, it is a mix of a bachelor's and a college, giving you the same graduation "level" of a bachelor's degree but preventing you from continuing your academic path into a doctorate or a master's, for instance. In this course, I met the folks who would later join me as business partners in the third company I founded, a consulting firm named Augix.

A door plaque with the logo I designed for Augix
Augix's first office, in the garage of my business partner's house

Besides consulting services, Augix had two products: an internet access management portal, named AugiXpot (yeah, today I know how bad that sounds) and a bank slip generator, called MeuBoleto. The internet access management solution gave me exposure to Linux, networking and tons of PHP. The bank slip system was primarily built in .NET with a UI built in Adobe Flex, and also gave me the chance to dust off my modest design skills.

AugiXpot solution diagram, in Brazilian Portuguese
Working through the night on AugiXpot, trying to get the load balancer to work. Note the GPRS USB-based modem connected to a router
Our product booth in a small business event promoted by SEBRAE

We had a few great consulting clients, had built a good reputation, but taking a business off the ground in Brazil while doing things the right way was - and still is - a herculean task. Besides the economic challenges, some of our most important clients noticed our struggle and strongarmed us into lowering our fees or committing to open scopes of work, which created a spiral reaction that kept us from growing.

During those tough times, a friend and former manager contacted me about an opportunity in Canada. It wasn't easy to choose between my dream of building a company and the chance of living in North America. I decided to participate in the interview, even though my English was intermediate at best. Surprisingly, the interview went well, and the company - Questrade - decided to take a chance on me. Over the next year, I gave my best to prove my value, they sponsored my work permit, and I rebooted my life to come to Canada.

At Questrade, I worked with brillian people on many projects using AngularJS, Node.js, .NET and everything in between; however, I believe the most memorable aspect of my time there was the fact that I had the chance to extend to others the same opportunity I was given. And that's what I did - I progressively referred many of the fantastic software engineers I knew to the company, and, one after the other, they got through the interviews and eventually came aboard to shake things up here as well. Among these referrals were my former partners, and the relationship that came to be between the companies in the following years was so successful that they were acquired years later, closing a chapter that changed many lives and starting another that brought more investments to the technology industry in Brazil.

Here's to another 20 years of a crazy - and fun - journey...

[1]: In 1998 I got my hands on a copy of the game SimCity 2000 and found in a game magazine a way to use MS-DOS debug command to increase the in-game money to ~$2 billion by loading your brand new city save file, searching for 00 02 4E 20 and replacing it with 7F 02 4E 20.