blog

OpenID Connect Authentication with Booked Scheduler

In this post I'll describe the steps for implementing a plugin for using AppID authentication with Booked Scheduler deployed as a Cloud Foundry application at the IBM Cloud. It looks like PHP simply isn't going to die, especially because there are some fine PHP applications such as Booked Scheduler. It looks good and works really well, and that's what we've been using to schedule meeting rooms at the Brazil Research Lab for the last 5 years.

An argument in favor of strong scaling for deep neural networks with small datasets

In this post, I'm writing about my most recent paper, which is joint work with Eduardo R. Rodrigues, Matheus Palhares Viana, and Dario Augusto Borges Oliveira. If you prefer videos, there's a pretty comprehensive version below. You can read the full paper on the arXiv. Apart from all the hype that is certainly involved in Machine Learning, Deep Learning, and Artificial Intelligence these days, there is a lot of very good research being done.

Non-stationarity and bandit algorithms

I've been (re)reading the second edition of Rich Sutton's Introduction to Reinforcement Learning, and I've decided to do the programming exercises. (Previously, I followed Fermat's tradition of solving exercises on the margin.) Exercise 2.5 is nice. It asks us to demonstrate the difficulties that sample-average methods have for nonstationary problems by experimentation. The intuition being that, as current distribution means deviate from their original values, the bandit algorithm takes longer to update its estimates with regards to what it considers the optimal action.

Rock, Paper, Starcraft review

Had forgotten to post this here. Enjoy! (YouTube video.)

Simple image classification using TensorFlow and CIFAR-10

Almost one year after following cs231n online and doing the assignments, I met the CIFAR-10 dataset again. This time, instead of implementing my Convolutional Neural Network from scratch using numpy, I had to implement mine using TensorFlow, as part of one of the Deep Learning Nano Degree assignments. As an aside, since this course uses some content from the free Deep Learning course, they took the time to fix the sub par presentation of that course.

Deploying JupyterHub behind an Apache reverse proxy’s subdirectory

JupyterHub supports deployment behind a reverse proxy and even instructs how to do so behindnginx in its manual. I was unable to find documentation about how to do this serving the content from a reverse proxy subdirectory. Since there’s been a long time since I worked as a sysadmin and, therefore, I tend to forget these things, here hoes my documentation, in the hopes it will be useful to someone else.

Checking whether a pointer is valid in Linux

Recently I noticed some calls I was making to a certain C API were returning pointers that I thought were invalid. A quick inspection with gdb confirmed my fears. A particular interaction showed: (gdb) print *job->someMember Cannot access memory at address 0xec00000005 Unfortunately I don't have access to the source of the API and won't be able to change it. So now I'm at a loss. How can I know if a pointer is valid without dereferencing it?

Implementing a reader-writer lock for multiple processes in python

Python lacks a lock type that supports multiple readers and a single writer across multiple processes. Here we investigate how one can be implemented using only default python features: ctypes and mmap, and the POSIX reader-writer locks. TL;DR: If you just want to use it, refer to the module's repository. Introduction I had a setting similar to the figure below. A single Python process would start up and spawn N children that would receive requests from the network.

A review of Udacity’s Machine Learning Engineer nanodegree

You can say I'm into AI. I've published a couple of papers on the subject and worked with Game AI before. Moreover, I've taken the original AI and ML classes offered by Stanford University back in 2011. Still, I felt my memory could use some refreshing, and decided to give the program a shot. There are some reviews of other nanodegree programs on the Internet, so I'm going to talk about the Machine Learning one specifically.

How to connect your Android devices to an OpenVPN VPN

There are various OpenVPN configuration tutorials around the Internet, this post aims to fill in the gaps on how to configure the OpenVPN server, and OpenVPN for Android clients, while managing a simple firewall configured with UFW running an Arch Linux system. Introduction OpenVPN is a robust and highly flexible VPN daemon. OpenVPN supports SSL/TLS security, Ethernet bridging, TCP or UDP tunnel transport through proxies or NAT, support for dynamic IP addresses and DHCP, scalability to hundreds or thousands of users, and portability to most major OS platforms.