If you want to plot a chart with a few outliers in ggplot, you might be temped to use ylim. The problem with ylim is that it removes the data points that go beyond the limits.

For instance, if you have the following data:

data <- data.frame(x = 1:20, y = c(rnorm(19), 500))

If you plot this with no changes, this is what you get:

ggplot(data, aes(x,y)) + geom_line()

It’s kind of hard to understand what’s going on in other points other than the last, so some zooming comes in handy. If you use ylim, this is what happens:

ggplot(data…


Time Maps are a great way to understand events that happen with a certain cadence over time. Take a look at this article by Mark Watson for an excellent explanation on what they are and when they can be useful.

The end result of this article will be to create a Time Map that looks like this:

A Time Map for our event. Complete code at the end of the article.

Sample Data

The type of data I usually want to put in this type of chart comes in the form <TimeStamp> | <Event>. Here’s an example data frame:

library(dplyr)
set.seed(123)
df <- data.frame(helper = c(rnorm(500, 120, 100)…

We are using monit to make sure our Shiny Server is running properly. We also want to make sure our applications and reports aren’t broken.

Testing “normal” Shiny applications can be achieved with check host, but Rmd files are trickier... they return a success page, and only then do they build the report, which later can lead to an undetected error.

Our solution was to use puppeteer to test these pages.

Installing puppeteer

This may differ from distribution to distribution. We are using CentOS, so the 1st thing was upgrading nodejs to a later version. This was done using nvm.

The commands…


Barking at daemons

My team uses a Shiny Server to share some data analysis and dashboards with other teams.

The server has automatic processes to get data from external sources, and any team member can publish new code to production at any time.

Most of the time things go right, but I want to make sure everything keeps working, regardless of the changes that happen. To monitor the server, we decided to use monit.

Installing Monit

The installation depends on the operating system you’re using. For CentOS, here are the steps to install:

sudo yum install monit
sudo systemctl enable monit
sudo systemctl start monit


Photo by elizabeth lies on Unsplash

The goal is simple. I have a mobile application built with OutSystems and I want to check whether a red button or a green button converts better.

The application has two screens and looks like this:


When looking for a new job, it’s easy to be impressed with the perks some companies offer. After all, working in a place that offers ping-pong tables, unlimited vacations, and free breakfast seems like fun!

But perks are just ingredients. You’re not tasting the full dish!

As discussed in this Rework podcast, pilling perks is the wrong way to go through the job seeking process. Perks alone will not make you happy.Since …


Photo by Eric Rothermel on Unsplash

People will quickly forget that a project was delivered late… But a project delivered with poor quality will leave a long-lasting memory!

A few years ago I was platform release manager at OutSystems. My main responsibility was making sure we released versions of the platform on time. And that’s what I did. If we announced the platform would be released on a given date, we made it happen.

But whenever you rush delivery, there is a price to pay: Quality.

At OutSystems we’ve always been very focused on quality, so the impact of rushing deliveries wasn’t that big. There were…


Yes, it is true. We’re in the middle of 2017 and I’m using a l935 typewriter to create a post. Don’t believe me? Check the image! You’ll get to see all the nuances thqt go with using a typewriter, including that “q” on the word “that”… It is a AZERTY keyboard…

But… why? Well, mostly just for the fun of it. Typing on this mechanical complexity, where everything is configured using levers and springs and clicks and clacks is a blast. Just the sound of the keys makes you want to type more!

Then there’s the fact that this is…


Setting up a LED Matrix can quickly get you out of pins to do other things with your Arduino. One way to overcome this is to use a 74HC595 shift register.

This chip transforms bits that are inserted in series trough the data pin into 8 parallel bits. More on that later, but first, the circuit:


A smile, and a lot of wires!

Got an 8x8 LED matrix such as the LBT2088AH that you want to connect to your Arduino? Here’s how it works:

Rodrigo Sousa Coutinho

Hi! I’m co-founder and Strategic Product Manager at OutSystems, with a passion for mobile and web development, great products, and geeky stuff!

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store