Vítor De Araújo


  • [vbuaraujo at the server named inf point ufrgs point br]



About me

Last update: 2018-04-17

This is my academic webpage. My current personal homepage is at elmord.org.

I obtained my Master's degree in Computer Science in 2018 at the Institute of Informatics of the Federal University of Rio Grande do Sul (UFRGS), Brazil. I obtained my Bachelor's degree in Computer Science in 2013, also at UFRGS.

My main research interests are in the area of programming languages. The subject of my Master's thesis is a dependent type based code transformation for the LLVM compiler framework to protect C programs against spatial memory safety violations, such as buffer overflows. For my Bachelor's final project, I designed a functional programming language with union types based on Portuguese for didactical purposes. In the future, I'm interested in working on interoperability across programming languages.

I also have a side interest in linguistics. During my undergraduate studies, I worked as a research assistant in the development of mwetoolkit, a tool for identification of multi-word expressions (expressions made of multiple words behaving as fixed units, such as phrasal verbs like take off, give up and terms like computer science, organic chemistry) in large volumes of text. Nowadays, I'm especially interested in historical linguistics.

During my undergraduate studies, I was also a teaching assistant for the Fundamentals of Algorithms course, which is based on the How to Design Programs book, for three years (2010, 2012, 2013).

I have a blog where I write more or less regularly about computers, languages, and life in general. Most of the posts are in Portuguese, but I've been posting in English too occasionally.

Academic work

Research and publications

This is a summary of the research projects I worked in. Click on each project for more detailed information.

2014–2018 Týr: a dependent type based code transformation for spatial memory safety in LLVM
Master's thesis
2013 Faz: uma linguagem funcional didática
Bachelor's final project
2011–2012 mwetoolkit: Identification and extraction of multi-word expressions in corpora
Work as an undergraduate research assistant


2014 Teaching Practice
In the first semester of 2014, I did my Master's Teaching Practice activity in the Advanced Functional Programming course, under the orientation of Prof. Rodrigo Machado. In that course, I prepared and delivered two lectures: one about Lisp/Scheme macros, and one about continuations and parsing in Lisp/Scheme. The slides may not be very useful without the accompanying explanations, though. In the parsing lecture I also presented an example parser written in Racket. I also elaborated exercises for that course.
2010, 2012–2013 Teaching Assistant
I was an undergraduate teaching assistant in the Fundamentals of Algorithms course for three years, under the orientation of Prof. Lucio Mauro Duarte. This course is based on the How to Design Programs (HtDP) book, and covers topics such as data structures, lists, trees, graphs and recursion, with an emphasis in documentation and testing of programs. It uses the HtDP languages, which are variants of Scheme designed with teaching in mind, in the DrRacket programming environment.

Small projects

2011 MLP: an ALGOL-like language with closures and a graphical interpreter
MLP is a programming language with an ALGOL-like syntax, closures, dynamic typing, and lexically or dynamically scoped depending on user configuration. I designed it as the final project of the Programming Language Models course (MLP, in Portuguese), along with a graphical interpreter which shows the call stack and allows step-by-step execution of the program. It was written in Common Lisp.
2010 AMK CYK parser
This is a parser and sentence generator for context-free grammars, using the Cocke–Younger–Kasami algorithm for parsing. It was written in JavaScript and HTML, so you can run it on the browser. I wrote it with Caio Miranda and Lisardo Kist.
2010 metaCPD: a crude database system in C and a graphical interface in Python
metaCPD consists of a C program, acting as a server, which implements simple database-like functionality, such as table creation and queries, and a Python program, acting as a client, which allows the user to perform those operations through a graphical interface. The database server was written by me, and the graphical client was written by Caio Miranda.
2009 Runespell: a simple orthographical checker in C
This was my final project for the Data Structures course. The main reason I keep this program around is that it contains a reasonable implementation of a red-black tree (which is now in use in mwetoolkit, by the way).
2009 Neander-js and Ahmes-js: simulators for the Neander and Ahmes architectures
Neander and Ahmes are part of a family of architectures designed by Professors Raul Weber and Taisy Weber for teaching Computer Architectures courses. They are widely used in Brazilian universities. The official simulators for those architectures are Windows programs, so I wrote JavaScript/HTML versions of them so I could run them on GNU/Linux.

Non-academic work


These are some tutorials I wrote before I had a blog. Nowadays, I tend to publish these kinds of texts as blog posts instead.

2010 Introdução ao bash
An introduction to bash and shell-scripting (in Portuguese).
2010 Lazy lists em JavaScript!
An introduction to functional programming, lazy data structures, and their implementation in JavaScript (in Portuguese).


2012–today Blognir: a minimalistic blog system in PHP
Blognir is a very simple, no-frills, databaseless blog system written in PHP. It's been powering my blog since 2012.
2014 Litlavík: an extremely simple wiki in PHP
Litlavík is a very simple wiki I wrote to help me keep track of my Master's research.
2011 him: a pagan text editor
him is a Vim script which makes it possible to run Vim primarily from Insert mode. Nowadays I use Emacs, so this script is not maintained anymore.
2010–2011 Hatter: a hat-oriented esoteric programming language
Hatter is an esoteric programming language I created for fun. It is based on the concept of moving data into and out of hats, which perform some "magic" when data is dropped into them.

Most of the software I publish goes to my GitHub page nowadays.