RSSAmplifier

Blog

Rodrigo Araujo

Recent content on Rodrigo Araujo

/RSS feed ↗24 posts

Latest posts

Coding the Byzantine Generals Problem

Leslie Lamport is one of my all-time favorite computer scientists. That said, something about most of his classical papers, such as Paxos and the Byzantine Generals Problem (BGP), makes it complicated to understand the details. In addition, there’s a flood of non-technical takes on the BGP due to many people being interested in the non-technical parts of Bitcoin and other cryptocurrencies.…

Let's build an LC-3 Virtual Machine

Virtual Machines (VMs) are a magical thing: a computer being emulated inside a physical computer. Since this emulated computer isn’t physical, we call it “virtual”. Such a simple description for something so powerful. From a practical perspective, VMs allow users to safely run programs in an isolated environment: the emulated machine. Why build a Virtual Machine from scratch So,…

Golang pattern: graceful shutdown of concurrent events

Graceful shutdowns are a fundamental trait of most distributed systems. Often, gracefully shutting down a server is very straightforward: stop accepting new connections and let the open ones finish their job. This is usually handled by your server code of choice — Golang’s HTTP package has a shutdown method to help you with that. Yet, many cases need a more thorough and hand-crafted graceful…

From synchronous service calls to message-passing dataflow systems

In this past year I have been working on a big system that is fundamentally an ETL to process real estate data across the US and Canada. I can’t talk much about the business details, but let’s say that if you’re browsing for real estate properties, it’s very likely you’re using this system. You’re welcome. Or I’m sorry, who knows? I joined this project…

On machine learning enhanced software systems

I have been brewing the idea of using machine learning to improve software systems since 2016. It was pretty vague and broad, without an actionable plan. I just had the intuition — the software configuration and tuning, especially after the adoption of microservices, was getting too complex. The increasing complexity of configuring and tuning systems If you have enough experience in the software…

Thoughts on visualizing software architecture

The more I think about the advantages and disadvantages of upfront design, the more I find it complex, I mean, the whole software architecture diagramming in general. I’ve been following the development of the C4 model for a considerable time, I find it interesting, but it still brings me the old struggles about how much detail we should put into the diagrams and whether we should do it…

Neural Computation: An Intuitive Understanding of the Perceptron

Artificial Neurons is one of the most beautiful ways to simulate a biological behavior through computation, despite the fact that it’s not very close to the level of details of a real neuron. But it captured the core of what a neuron is doing. And I find that trying to understand this mathematical method by first understanding the concept through a metaphor (which, in this case, I think that…

Case Study: Sentiment Analysis On Movie Reviews

Well, this case was a fun one, sentiment analysis is a sub type of NLP (natural language processing) in which you have to train a model to analyze a text, and classify it was a negative sentiment or a positive sentiment. In this case, I wanted to apply it on movies reviews, to see if a review is a negative one or a positive one. So, basically, teaching this kind of sentiment to the machine.…

A Generic Architecture for Text Classification with Machine Learning

One of the most commons tasks in Machine Learning is text classification, which is simply teaching your machine how to read and interpret a text and predict what kind of text it is. The purpose of this essay is to talk about a simple and generic enough Architecture to a supervised learning text classification. The interesting point of this Architecture is that you can use it as a basic/initial…

Case Study: Python Performance on rotating one-dimensional vectors

I’m a big fan of a nice challenge, therefore, I like books like Programming Pearls, I like to dive into many kinds of solutions to the same problem and try to differentiate them by novelty, performance, elegance, etc… This time I was playing with a fun problem, from the column 2:

Web Scaling - using Redis as Cache

Redis is such a great technology. Unfortunately, there’s still people who don’t know Redis or don’t know that Redis can be used as a Cache System to improve the speed of responses. Why Redis Well, let’s start this discussion remembering how a common Relational Database basically works: Suppose we’re using a MySQL, every time your app sends a request to the MySQL…

Building your first REST API with Python

Are you total lost in this world full of jargons like: API, Rest API, microservices and stuffs? Come here, sit, grab a cup of coffee, and let’s talk briefly about it. Today a lot is said about APIs. Everything has an API, every programmer (newbie to expert) uses tons of API. Also, today we can see a lot of people talking about microservices and the idea of total separation of backend,…

Using Python and AI to predict types of wine

I’ve been working with AI/Machine Learning at Jusbrasil recently, and it’s being pretty challenging due to the huge amount of data that we have to deal with, so cleaning this data and making predictions and classifications in an acceptable time demands a nice AI architecture. That said I can say that I’m extremely thankful for a few technologies that are helping me go through…

Gradient Descent Algorithm in Java

How can we make a machine learn from data? Then, how can we make the machine predicts things based on that learned data? Those are the question answered by one of the most classic Machine Learning Algorithms, the Gradient Descent Algorithm , from a Mathematical-Statistical side it’s called Univariate Linear Regression . This is one of the tools of the Machine Learning toolbox, and what it tries to…

Why, how and where to learn Design Patterns

The first thought I had when I started to study Design Patterns was: damn, is all this really necessary? I mean, so many patterns, so many details to do things that look simple to do without any further detailed thoughts. And I started to question myself if this was really a productive thing. The first answer I gave was: no, wonderful not-bad-word this, I’m losing too much time trying to wrap my…

Thoughts on Automata Theory

I’ve been reading many texts on automata theory these times, and let me tell you, that’s such a wonderful thing. It pretty much explain how computers can…. compute! Simply put, Automata Theory deals with the logic of computation with respect to simple machines, referred to as Automata. From the mathematical models to represent it to the fun programming implementations, it’s really great and…

Fun with graphs

Graph Theory is definitely one of my favorite branches of the Mathematics & Computer Science, mostly because of its nearest infinity applications, in both real world problems and pure theoretical problems. These days I’ve been working (with my buddy Daniel Almeida) in a framework to create and manipulate graphs. Which means, creating a data structure to represent graphs, edges, vertexes and…

A Romantic Vision Of The Software Engineering

Well, it all starts with your first attempt to write a program; a very innocent and and naive program - I mean, your very first “Hello World” and the classic“Read 3 inputs and print the sum of them”. Your only concerns will be some missing commas, whitespaces and some misplaced IF’s - things that may cause a little confusion first. You’ll eve think that it is hard. #include int main() { printf(…

Object Oriented Thinking

###What are the main goals of the object-oriented programming?### 1. Abstraction, yes, i had to put this in the first place, in my point of view, this is the biggest goal of the OO programming 2. Encapsulation, which is a form of abstraction! 3. Reusability 4. Modularity 5. Readability

(untitled)

Content / Images If using the standard file storage, Ghost will upload images to this directory.

About

Hello there, I’m Rodrigo Araújo. I live in Vancouver, Canada; originally from Brazil. I’m a software engineer with a background in Computer Science. My main interests in software are: Distributed and decentralized systems; Cryptography, cryptocurrencies, and blockchain; Compilers (including virtual machines, interpreters, language design); Artificial intelligence and machine learning;…

Projects

EpiMobile: Pathogen Point of Care Diagnosis and Global Surveillance using Mobile Devices (Paper, Code, Talk) Areas: Bioinformatics, Distributed Systems, Healthcare Information Systems Rapid identification of disease causing infectious agents (pathogens) in patient samples is important to mount effective responses to potential, or ongoing, disease outbreaks. New advances in genomic sequencing…

Publications

Peer-reviewed papers ARAÚJO, RODRIGO. S.; HOLMES, REID. . Lightweight Self-Adaptive Configuration Using Machine Learning. To appear in CASCON 2021. ALVES, N. S. R.; ARAÚJO, RODRIGO. S.; SPÍNOLA, RODRIGO O. . A Collaborative Computational Infrastructure for Supporting Technical Debt Knowledge Sharing and Evolution. In: Americas Conference on Information Systems, 2015, Puerto Rico. 2015 Americas…

Reading list

Here’s a list of books I read and recommend and a list of books I’m currently reading. This document is mainly for my bookkeeping, but it might be helpful if you’re looking for some recommendations or taking a glance over where I get my inspiration from. I do not try to read as many books as fast as I can; in fact, I’m a relatively slow reader. I try to balance technical…