The Portfolio

Esta página é uma coleção de alguns dos meus projetos de maior relevância. Aqui postarei links e algumas referências para estes projetos.

As seções estão separadas em colunas, de forma que você possa ler as descrições em Português e em Inglês.

This page is a collection of some of my projects of greater relevance. I'll post here some links and references to these projects.

The sections are separated in columns in such a way so you can read the descriptions in Portuguese and English.

Clique aqui para voltar. / Click here to go back.

Índice

Projetos Comunitários / Community Projects

Common Lisp Brasil

clbr.png

Common Lisp Brasil é a comunidade brasileira para evangelização da linguagem Common Lisp. Somos bem receptivos a novas pessoas que estejam interessadas em aprendê-la. Apesar de o foco principal do nosso canal no Telegram estar em atrair brasileiros, nós também recebemos falantes do Inglês.

Common Lisp Brasil is the brazillian community for evangelization of Common Lisp language. We are very receptive to new people who are interested in learning it. Though the main focus of our Telegram channel is in attracting brazillian folks, we also receive speakers of English language.

Projetos Pessoais / Personal Projects

Oficina Framework

wolves.png

Oficina Framework é uma engine de games completa que escrevi há alguns anos atrás, inicialmente projetada para jogos 2D. Sendo escrita principalmente em C++, esta engine usa bibliotecas como SDL2, OpenAL e OpenGL, para gerenciar um conjunto de subsistemas. A partir da versão 2.0, Oficina também começou a ter um sistema avançado de scripting através das linguagens Scheme e Lua, que podem ser manipuladas dentro de qualquer jogo construído com esta engine, para realizar codificação ao vivo.

Ambas as versões existentes nunca chegaram à estabilidade, mas sua função principal foi a de uma oficina onde experimentei com conhecimentos mais avançados de programação. O desenvolvimento começou em 2012, e parou em 2017.

Abaixo, há uma lista de links com provas-de-conceito para a Oficina Framework. Eles estão organizados por data.

Oficina Framework is a complete game engine I've written a few years ago, initially designed for 2D games. Written mainly in C++, this engine uses libraries such as SDL2, OpenAL and OpenGL to manage a set of subsystems. Starting from version 2.0, Oficina also began to sport an advanced scripting support by using languages Scheme and Lua, which can be manipulated inside any game built with this engine, to perform live coding.

Both existing versions never reached stability, but their main role was to be a workshop where I experimented with more advanced knowledge on programming. Development started in 2012, and halted around 2017.

Below is a list of proof-of-concept links for Oficina Framework. They are organized by date.

Powerlisp

Powerlisp é uma ferramenta de automatização de tarefas para usuários avançados de sistemas Unix. Escrita em Common Lisp, esta ferramenta provê um backend para qualquer ferramenta de seleção de opções, como dmenu ou rofi, possibilitando ao usuário uma navegação em menus.

O usuário pode fazer várias tarefas através da ferramenta, como pesquisar diretamente na internet, usar o modo anônimo do browser para comandos subsequentes, selecionar entre seus sites favoritos, abrir aplicações favoritas, e até mesmo configurar novos submenus para suas próprias tarefas.

Powerlisp is a task automation tool for advanced users of Unix systems. Written in Common Lisp, this tool provides a backend for any selection tool, such as dmenu or rofi, enabling the user to navigate through menus.

The user can do many tasks through the tool, such as directly searching over the internet, using the browser's incognito mode for his following commands, selecting between his favorite sites, opening favorite applications, even configure new submenus for his own tasks.

org-abntex2

org-abntex.png

org-abntex2 é um modelo para escrever artigos acadêmicos, sob as normas da ABNT, utilizando Org no Emacs, para então ser exportado para LaTeX. Este projeto resume-se, primariamente, a um template modificável. Sendo assim, fica a cargo do acadêmico copiar o template e adequá-lo às regras da sua universidade.

Este projeto adequa-se, por padrão, à Universidade que frequento. Por isso, modificações de acordo com o caso de uso e leitura cuidadosa do código são encorajadas.

org-abntex2 is a model for writing academic papers, under ABNT norms, using Org on Emacs, so that it can be exported to LaTeX. This project is, primarily, a modifiable template. Given that, the academic should copy the template and adequate it to its University's rules.

This project adequates by default to the University which I attend to, so modifications according to use case and careful reading of the code are encouraged.

cl-ann

ann.png

cl-ann é a implementação de uma rede neural artificial linear, completamente escrita em Common Lisp, com o intuito de estudo.

Sua versão original foi escrita em C++, e o projeto possui um pequeno system para testes que treina uma rede neural para realizar a operação de ou-exclusive (xor).

cl-ann is the implementation of a linear, artificial neural network, completely written in Common Lisp, with the intent of study.

Its original version was written in C++, and the project has a small testing system which trains a neural network so that it can perform the exclusive-or (xor) operation.

nand2tetris

Os projetos abaixo dizem respeito ao livro The Elements of Computing Systems, de Nisan e Schocken, normalmente apelidado de nand2tetris.

Estes projetos formam a base da implementação de um computador completo, feito do zero, sendo eles parte da toolchain de desenvolvimento para tal.

The projects below are related to the book The Elements of Computing Systems, by Nisan and Schocken, normally nicknamed nand2tetris.

These projects form the base of implementation of a compiler for a complete computer, built from scratch, those projects being part of the development toolchain for it.

cl-jackc (Jack Compiler)

cl-jackc é o compilador da linguagem Jack, a linguagem de alto-nível apresentada no livro em questão. Este compilador, escrito em Common Lisp, visa um projeto robusto e, por isso, é implementado de forma modular, o que confere facilidade de execução de testes remotos para cada parte do programa.

Esta linguagem é introduzida nos capítulos 9, 10 e 11 do livro, e o progresso do compilador pode ser acompanhado através do quadro de projetos do repositório e do status de seus testes automatizados.

cl-jackc is the compiler for Jack, the high-level language presented in the book in question. This compiler, written in Common Lisp, focuses on a robust project, and because of that, it is implemented in a modular way, which provides ease of execution for remote tests for each part of the program.

The language is introduced on chapters 9, 10 and 11 of the book, and the compiler's progress can be accompanied through the project board on the repository, and through the status of its automated tests.

cl-hackvmtr (Hack VM Translator)

cl-hackvmtr é o VM Translator para a plataforma Hack, do livro em questão. Esta ferramenta, escrita em Common Lisp, é responsável por traduzir o código da máquina virtual da linguagem Jack para o assembly da plataforma Hack.

Este projeto foi construído de acordo com os capítulos 7 e 8 do livro, e atualmente é capaz de gerar assemblies adequadamente.

cl-hackvmtr is the VM Translator for the Hack platform, for the book in question. This tool, written in Common Lisp, is responsible for translating Jack virtual machine code into Hack platform assembly.

This project was built according to chapters 7 and 8 of the book, and currently is capable of generating assemblies correctly.

cl-hackasm (Hack Assembler)

cl-hackasm é o Assembler para a plataforma Hack, do livro em questão. Esta ferramenta, escrita em Common Lisp, é responsável por traduzir o código assembly da plataforma Hack para código de máquina (pela especificação do livro, arquivos-texto onde cada linha corresponde a uma instrução).

Este projeto foi construído de acordo com o capítulo 6 do livro, e atualmente é capaz de gerar código de máquina adequadamente.

cl-hackasm is the Assembler for the Hack platform, for the book in question. This tool, written in Common Lisp, is responsible for translating assembly code for the Hack platform into machine code (which are, per the book's specification, text files where each line corresponds to an instruction).

This project was built according to the book's chapter 6, and is currently capable of generating machine code correctly.

Games

cl-snake

cl-snake é um pequeno clone do game clássico Snake, escrito em Common Lisp. O jogo foi um velor projeto, desenvolvido como uma forma de melhorar meu conhecimento sobre a linguagem na qual foi construído.

cl-snake is a small clone of the classic Snake game, written in Common Lisp. The game was an old project, developed as a way to improve my knowledge on the language it was built in.

Blackjack

blackjack.png

Este jogo foi escrito em JavaScript ES6, durante um curso de treinamento em desenvolvimento web frontend. O objetivo foi criar um jogo de cartas e implementá-lo usando um framework web específico. Acabei utilizando o Materialize do Google e criando este clone de Blackjack.

Como o jogo deveria ser simples, há uma quantidade de coisas que não foi feita. Todavia, o jogo está funcional, e pode ser imediatamente jogado clicando no link abaixo.

This game was written in JavaScript ES6, during a training course on frontend web development. The goal was to create a card game and implement it using a specific web framework. I ended up using Google's Materialize and creating this Blackjack clone.

Since the game was supposed to be simple, there is a number of things that weren't done. Howver, the game is functional, and can be played immediately by clicking on the link below.

ODS: Orbit Defense Strikeforce

Orbit Defense Strikeforce é um jogo de tiro espacial, onde você controla uma nave com movimento peculiar para destruir todos os seus inimigos. O jogo é curto, podendo ser terminado dentro de alguns minutos.

Este jogo foi feito para ser a minha submissão ao Lisp Game Jam 2018, que ocorreu em abril do ano relacionado. Na página do projeto, você encontrará notas em que eu falo a respeito do processo de desenvolvimento.

Orbit Defense Strikeforce is a space shoot-'em-up game which you control a ship with peculiar movement to destroy all your enemies. The game is short, and can be finished in a few minutes.

This game was built to be my submission to Lisp Game Jam 2018, taken place in April of the related year. In the project's page, you'll find notes where I talk about the development process.

Super BrickBreak

Super BrickBreak é um clone do clássico Breakout. Este jogo fazia parte de uma coleção de minigames que anteriormente escrevi, originalmente, usando Processing (com backend em Java), e então reescrito em C++ (utilizando versões antigas da Oficina Framework).

A versão mais funcional, aqui mostrada, foi escrita em JavaScript, utilizando um elemento 2D canvas, e pode ser jogada instantaneamente. Este projeto também estava sendo reescrito em Rust, usando WebAssembly, todavia está congelado por enquanto.

Mais informações podem ser encontradas na página do projeto. O protótipo da versão em Rust/WebAssembly e links para os códigos podem ser encontrados abaixo.

Super BrickBreak is a clone of classic Breakout. This game was part of a collection of minigames which I previously wrote, originally using Processing (with a Java backend), and then rewritten in C++ (using older versions of Oficina Framework).

The most functional version, shown here, was written in JavaScript, using a 2D canvas element, and can be played instantly. This project was also being rewritten in Rust, using WebAssembly, however it is frozen for now.

More information can be found on project's page. A prototype for the Rust/WebAssembly version and links for source code can be found below.

Underwater Adventures

Underwater Adventures é um pequeno e simples jogo de plataforma. Ele foi feito como um teste final para um curso que fiz de Construct 2, em 2017.

A parte mais relevante é que, como ele foi feito com a versão Free do Construct 2, seu código tem um limite de 100 eventos, que foram completamente usados; o movimento também foi programado com comportamento estático, o que significa que nenhum movimento embutido extra foi utilizado.

Ele foi exportado como um jogo HTML5, portanto ir à página do projeto fará com que você possa jogá-lo imediatamente.

Underwater Adventures is a small and simple platformer game. It was made as a final test for a Construct 2 course I took, back in 2017.

The most relevant part is that, since it was built with Construct 2's Free version, its code has a limit of 100 events, which were completely used; movement was also programmed with static behaviour, which means that no extra built-in movement was used.

It is exported as an HTML5 game, so going to the project's page will allow you to play it immediately.

9mine

9mine.gif

9mine é um clone do Campo Minado, adaptado para console. Este projeto em específico foi escrito em C puro, de forma que pudesse ser executado e compilado no sistema operacional Plan 9 From Bell Labs.

Abaixo também está listado o post do blog que discute alguns aspectos de desenvolvimento em C no Plan 9.

9mine is a clone of Minesweeper, adapted to console. This specific project was built in pure C, in such a way that it could run and build on the Plan 9 From Bell Labs operational system.

Below is also listed the blog post discussing some aspects of C developent for Plan 9.

sonic-lisp

sonic-lisp.png

sonic-lisp é um clone da engine clássica de Sonic The Hedgehog. O objetivo é replicar a física dos jogos clássicos do mascote o máximo possível. Este projeto também está sendo escrito em Common Lisp, uma vez que a intenção é explorar o que Common Lisp tem a oferecer, em termos de desenvolvimento de jogos.

O jogo utiliza trivial-gamekit, um dos muitos systems disponíveis para desenvolvimento de jogos na linguagem referenciada, e seu desenvolvimento experimenta com a possibilidade de codificação em tempo real: a maior parte do jogo é escrita enquanto o mesmo está em execução.

O vídeo apresentado demonstra uma seção de codificação em que algumas habilidades foram implementadas em tempo real, exemplificando a forma como foi programado.

sonic-lisp is a clone of Sonic The Hedgehog's classic engine. The goal is to replicate the physics of the mascot's classic games as much as possible. It is also being written in Common Lisp, as the intent is to explore what Common Lisp has to offer in terms of game development.

The game uses trivial-gamekit, one of the many game development systems available on said language, and its development experiments with the possibility of real-time coding: most of the game is written while it is running.

The featured video demonstrates a coding session in which some abilities were implemented in real-time, exemplifying the way it was programmed.

Projetos menores / Minor projects

Abaixo, estão listados projetos de menor relevância. A maioria são projetos desenvolvidos a curto prazo, e sem pretensão de continuação.

Below are listed projects of minor relevance. The majority are projects developed in little time, with no pretension to continue.

wasm-platformer-rs

wasm-platformer-rs.png

Prova-de-conceito de um jogo platformer usando Rust e WebAssembly. Atualmente, só possui um teste de colisão.

Proof-of-concept of a platformer game using Rust and WebAssembly. Currently has only a collision test.

kernel

kernel-thing.png

Este é um kernel "de brinquedo" para x86, escrito como um exercício para programação bare-metal. Algumas de suas partes foram escritas baseado em alguns tutoriais e livros, que são referenciados no repositório do projeto.

This is an x86 toy kernel, written as an exercise on bare-metal programming. Some of its parts were written based upon some tutorials and books which are referenced on the project's repository.

brazil-holidays.el

Este é um pequeno arquivo auxiliar para o Emacs, que define alguns feriados brasileiros para uso na Org agenda ou no calendário.

This is a small helper file for Emacs, which defines some brazillian holidays for using on Org agenda or calendar.

panorama-viewer

panorama-viewer.png

Este projeto é um visualizador de fotos 360°, feito utilizando JavaScript puro e a biblioteca THREE.js. Este visualizador tem suporte mínimo a desktop, onde rotaciona-se a imagem através das teclas ou clicando nos cantos da tela, e também tem suporte a alguns smartphones.

A aplicação pode requerer boa quantidade de recursos da máquina, e bugs são esperados.

This project is a 360º photo viewer, made using pure JavaScript and the THREE.js library. This viewer has minimal support to desktop, where you can rotate the image through arrow keys or clicking on screen corners, and also supports some smartphones.

The application may require a good amount of machine resources, and bugs are expected.

Harmonograph

harmonograph.gif

Este projeto é um simulador que reproduz curvas de Lissajous (desenhos de equações paramétricas, intimamente ligadas a música e a padrões planetários), da forma como são desenhadas por um harmonógrafo.

O aplicativo pode ser utilizado a partir do seu código-fonte, que foi escrito em Common Lisp, ou pode ser transformado em um binário standalone. Para mais informações, veja o repositório.

This project is a simulator which reproduces Lissajous curves (drawings of parametric equations, intimately linked to music and planetary patterns), in the same way they are drawn by a harmonograph.

The application can be used from its source code, which is written in Common Lisp, or can be turned into a standalone binary. For more information, see the repository.

OpenGames

cl-2048.png

Este é um repositório de pequenos jogos de código aberto. Inclui o anteriormente mencionado cl-snake, um clone de 2048 (vide foto), e mais alguns projetos inacabados.

This is a repository of small open-source games. Includes the previously mentioned cl-snake, a clone of 2048 (see pciture), and some other unfinished projects.

YASWEG

Yet Another Static Website Generator é, como o nome sugere, um pequeno gerador de websites estáticos, escrito em Scheme para GNU Guile. O objetivo do projeto é criar uma API que possibilite declarar arquivos HTML que serão exportados estaticamente.

O projeto está funcional, mas não espere poder utlizá-lo apropriadamente, uma vez que ele foi feito com intuito meramente educativo.

Yet Another Static Website Generator is, as the name suggests, a small static website generator, written in Scheme for GNU Guile. The objective of the project is to create an API which allows to declare HTML files which will be statically exported.

The project is functional, but do not expect to use it appropriately, since it was made for merely educational purposes.

Miscelânea / Miscellaneous

study

Este é um repositório que utilizo para armazenar minhas notas e códigos, criados com o intuito de estudo, seja em faculdade ou ao acompanhar livros em específico.

This is a repository I use to store my notes and code, created for studying, be it in college or when reading specific books.

De volta à página anterior