Meus 10 anos como programador

04 Jan 2016 . category: article . Comments
#offtopic #carreira

Introdução

No mês de agosto de 2015 completou-se 10 anos desde o dia em que descobri o maravilhoso mundo da programação ao entrar no curso técnico em informática da ETEC Prof. Armando Bayeux da Silva. Antes disso não tinha nenhuma noção do que seria programação. Tivemos computador meio tarde em casa e como meu pai sempre dizia - o computador é uma ferramenta de trabalho - nunca fucei muito com certo medo de estragar algo.

Durante o ensino médio, e até mesmo parte do ensino fundamental, tinha o sonho de ser advogado, nem passava pela minha cabeça fazer algo relacionado a computação. Somente no terceiro ano do ensino médio que pensei em prestar o vestibular para Engenharia da Computação, mas também prestei para Física e Matemática.

Além dos vestibulares, que não passei em nenhum, prestei o vestibulinho do Bayeux e entrei no curso técnico em 2005. Foi lá que tive meus primeiros contatos com a programação: Visual Basic e Pascal basicamente. Também tive contato com o GNU/Linux, sistema operacional que utilizo em meus computadores 100% do tempo desde então.

Durante este tempo utilizei diversas distribuições GNU/Linux - na maioria do tempo optei pelo Slackware e o Fedora, sendo esta ultima a distribuição que utilizo atualmente. Também gastei um tempo estudando FreeBSD e o Solaris. Meus primeiros trabalhos foram relacionados a administração de redes e servidores.

Sempre gostei muito de estudar coisas relacionadas a infraestrutura, porém sempre me dediquei muito mais à programação em si e este é o foco deste texto.

Alguns destaques destes anos

Gostaria de descrever alguns projetos que trabalhei nesses anos, e com isso consigo fazer uma pequena reflexão de como ocorreu meu aprendizado. A grande maioria dos projetos não me trouxeram dinheiro, muito menos fama e reconhecimento. Mas uma coisa eu posso afirmar que consegui através deles: conhecimento e diversão. Quem me conhece de perto sabe o quanto gosto de programar. Estudar computação, metodologias, filosofia, história e teologia, para mim, é muito mais legal que qualquer jogo de videogame(talvez excluindo Final Fantasy), filmes, seriados e qualquer outra coisa que as pessoas fazem para se divertir.

Todos os projetos que irei descrever foram desenvolvidos fora do horário comercial, em meu tempo livre. Apenas um projeto que me orgulha ter participado que ocorreu dentro de uma empresa, o Portal Exame.com. Realmente, todos os outros foram desenvolvidos em minha casa, muitas vezes no chão da sala - lugar que sempre gostei de trabalhar, mas agora eu tenho um escritório bem legal - e por isso gostaria de agradecer pela minha esposa, que me aguentou 5 desses 10 anos e brigou algumas vezes sim para eu sair da frente do computador, mas que também apoiou-me muito as minhas “loucuras”.

1º Ano

Não houve grandes projetos no meu primeiro ano pois estava trabalhando na Edra como suporte no CPD. Neste tempo criei alguns scripts em Bash e PHP. As linguagens apresentadas no curso eram basicamente Pascal e VB, como dito anteriormente, e quando comecei a me aprofundar no assunto notei que essas linguagens não seriam muito uteis profissionalmente então me dediquei a estudar C realmente. Também comecei a estudar Java e Python nessa época.

Primeiro Cadastrinho em Pascal

Ainda me lembro a primeira vez que vi alguém escrevendo um código em Pascal e executando uma simples impressão de um “oi” em um console. Podem até achar isso ridículo, mas para mim realmente foi um momento mágico. Naquele momento viajei nas possibilidades.

Como a grande maioria dos programadores quando iniciam na programação, a primeira coisa que fiz foi um cadastro de contatos, uma pequena agenda. Infelizmente não consegui encontrar o código desse projeto, que para mim só possui valor histórico mesmo pois pouca coisa poderia se aproveitar dele. Foi coisa bem simples, salvava os contatos em um arquivo e listava os registros, com a possibilidade de uma busca bem simples, comparando item por item.

2º Ano

Este ano marca a transição entre o meu curso técnico e a entrada na UNESP. Foi um ano que gastei mais tempo trabalhando e estudando para o vestibular do que programando. Também foi quando me frustei com o mundo universitário, mundo que sonhava tanto em conhecer e um mundo que não recebeu-me muito bem - ou eu que não curti muito suas formalidades.

Trabalho de Conclusão de Curso do Técnico

O projeto era criar um aplicativo que englobasse algumas disciplinas do curso. O objetivo do aplicativo era calcular o endereço, a máscara dado um intervalo de IP’s válidos.

Uma boa parcela da turma desenvolveu o aplicativo em Visual Basic. Eu já havia me ambientado muito bem no ambiente GNU/Linux, por isso não queria utilizar essa linguagem de programação. Como já havia estudado um pouco de C/C++, resolvi fazer o aplicativo usando o QT, que ainda estava na versão 3.

Também não consegui encontrar o código deste projeto, mas posso afirmar que é uma gambiarra das grandes, pois foi desenvolvido em C++ e ainda não tinha estudado de verdade Orientação a Objetos.

Primeiro trabalho de Cálculo da Faculdade

O tema do último trabalho de cálculo 1 era livre, portanto resolvi programar alguma coisa relacionada ao curso.

Desenvolvi um programinha que chamei de Gueda. A ideia do trabalho era comparar um mesmo objeto em queda livre em diversos planetas. Criei um aplicativo utilizando C e GTK. Também realizei uma integração do aplicativo com o Gnuplot para criação e exibição dos gráficos que descreviam as quedas.

Gueda

Como foi escrito em GTK2 é meio complicado instalar nos atuais sistemas GNU/Linux, uma possibilidade é a utilização do Docker para compilar o código. Para quem estiver disposto a tentar fazê-lo, o código do projeto encontra-se no Github.

Consegui tirar nota máxima no trabalho - 0,25 na média, se não me engano - e mesma nota que pessoas que imprimiram uma página do Wikipédia tiraram. Resumindo: fiquei de recuperação na disciplina.

3º Ano

No inicio desse terceira ano como programador entrei para o Grupo de Inteligência Artificial do DEMAC. O professor Ivan não se importava de eu ter ficado de RE em duas disciplinas no meu primeiro semestre na universidade - diferentemente do que aconteceu com outros professores.

Gastei algum tempo deste ano ajudando na organização SECCOMP 2007. Ajudei tanto na organização como no desenvolvimento do site daquele ano - e que a área administrativa foi utilizada até o ano de 2009 segundo informações que obtive. Durante a semana do evento também desenvolvi um aplicativo para o sorteio de brindes para os participantes. Era um pequeno script em Python, com uma interface gráfica feita em GTK, que lia os dados do banco do site, onde havia o cadastro dos participantes,

Primeiros contatos com Ruby

Nas férias de julho, comecei a estudar Ruby depois de ler sobre a linguagem em uma edição da revista Linux Magazine.

Comecei a reescrever o Gueda utilizando Ruby. Esse projeto não chegou a ir para frente, porém foi a porta de entrada para essa linguagem.

Em 2008 apresentei minha primeira palestra sobre Ruby no Bayeux.

Implementação de métodos de Álgebra Linear em C++

Tive muita dificuldade em dedicar-me a algumas disciplinas que não tinham alguma relação direta com a computação. Minha maior dificuldade foi com cálculo pois não seria possível aplicar o que víamos em aula na computação. Outras disciplinas já possuíam a características de serem computacionais, que é o caso de Álgebra Linear.

Comecei a implementar algumas coisas relacionadas a Álgebra Linear e posso dizer que foi nestes estudos que entendi muita coisa, inclusive muita coisa não só relacionada à disciplina, mas também princípios importantes da orientação a objetos.

O código que consegui recuperar pode ser encontrado em https://github.com/diegorubin/unesp/tree/master/%C3%A1lgebra%20linear/matematica.

E fico feliz em dizer que passei na disciplina com uma média 8. Para mim, que sempre teve como filosofia “5 é 10”, até que foi uma boa nota.

Trabalho de Estrutura de Dados

Antes de entrar na universidade imaginei que este seria um lugar totalmente diferente. Achei que seria um lugar para ver coisas novas, coisas que não teria acesso facilmente fora. Me enganei profundamente. A universidade, pelo menos ao curso que tive acesso, é um lugar cheio de professores egocêntricos, que se você não entregar as coisas exatamente do jeito que eles sonham dirão que está errado, mesmo que esse jeito seja o certo, e até mesmo aproado toda a comunidade de computação.

“Por que tanta raiva Diego?”, você pode estar pensando agora. Explico: Durante a disciplina em questão, foi solicitado que implementássemos uma estrutura de pilha. Já fiquei chateado porque o professor não deixou utilizar uma linguagem diferente daquela que ele mandou, Pascal. Pedi se poderia ser em C e ganhei um pelo “Não”. Até ai tudo bem, talvez o professor seja extremamente limitado e não saiba outra linguagem. Porém quando pensei no trabalho, pensei em fazer da melhor maneira possível, então fiz uma unit em Pascal, ou seja, uma biblioteca. Assim poderia utilizar a estrutura sem ficar copiando e colando código em todo programa que fosse utilizar a estrutura, afinal de contas “reuso” é um dos princípios básicos da computação. Qual foi minha surpresa quando peguei o trabalho corrigido? O “professor” havia descontado dois pontos de dez do trabalho porque havia feito em forma de biblioteca e não em um arquivo de programa normal, sua justificativa: “não sei se você sabe implementar um programa principal”.

No segundo trabalho, implementação de uma árvore binária, resolvi fazer dois trabalhos, um do jeito que gostaria e um outro nos moldes que percebi que o professor gostaria. Ambos fiz em Pascal, porém o que eu gostaria tinha uma interface gráfica em Ruby e GTK que a medida que os elementos iam sendo introduzidos na árvore esta ia sendo desenhada na tela. O outro era só uma rotina em Pascal que ia imprimindo e os valores e introduzindo outros a medida que o usuário respondia um prompt de comando, o clichê de sempre.

No dia da entrega do segundo trabalho, expliquei como ambos funcionavam e expliquei que havia documentado todos os processos de instalação do primeiro caso e pedi pra ele escolher qual trabalho ele gostaria que eu entregasse. Ele escolheu o segundo, o mais simples. Para mim, naquele momento ele assinou seu atestado de medíocre. Sim, a UNESP de Rio Claro tem um grave problema com alguns de seus professores.

O código dos projetos podem ser encontrados em https://github.com/diegorubin/unesp/tree/master/estrutura%20de%20dados.

4º Ano

Esse ano foi um ano de desbravamento de outros recursos da UNESP, dado que no departamento da computação não havia muitas possibilidades.

Comecei a trabalhar em dos laboratórios da Geologia, uma laboratório que era mantido pela Petrobras. Me chamaram para dar manutenção na rede de computadores e nos servidores. O laboratório era composto por computadores Sparc que rodavam Solaris e servidores da IBM que rodavam AIX. Infelizmente não pude usufruir da infraestrutura como gostaria.

Também iniciei um trabalho no laboratório do CEIS (Centro de Estudos de Insetos Sociais). A ideia era dar manutenção em um cluster beowulf construído utilizando o Fedora Core. Infelizmente, por alguns problemas não computacionais, não pude dar continuidade no projeto.

Meus Sistemas em Django

Depois de ter algumas experiencias com PHP, retornei ao Python, linguagem que já havia estudado um pouco, e comecei a estudar o Django. Já tinha brincado um pouco com o Rails nessa época, porém o framework não havia me prendido.

Cheguei a criar alguns sistemas utilizando o framework, entre eles:

  • O Site do Grupo Ação Jovem: Era uma pequena rede social para o grupo de jovens que frequentava naquela época(o orkut estava no auge aqui no Brasil). Era mais do mesmo, subir foto, comentar a foto do coleguinha, enviar recado. Foi utilizado durante um tempo, até que um dos lideres da instituição começou a colocar comentário não muito felizes nas fotos dos outros.

  • O Site da Terceira Igreja Jesus é o Caminho: Um site de divulgação da igreja. Entre os recursos disponíveis estavam uma Bíblia e um sistema de buscas em seu conteúdo, uma listagem com os pregadores do ministério e algumas mensagens que poderiam ser ouvidas em um player no site. Além disso havia o clássico álbum de fotos com direito a comentários. O site nunca foi utilizado como deveria.

  • O Sistema do Xurisso: Esse foi um sistema para expor arquivos de um repositório SVN e arquivos locais de um servidor FreeBSD. Foi utilizado durante a disciplina de Engenharia de Software. Foi criado pois a maioria do grupo não sabia utilizar controle de versão e nem SSH.

  • O Site da CINFEC e o sistema do cliente: Eu e um amigo da turma, o André, tivemos a ideia de abrir nossa própria empresa. Então desenvolvi um site para apresentar nossas ideias e contatos. Também foi feito um sistema que seria utilizado para que o cliente pudesse acompanhar os status dos serviços. Tivemos apenas um cliente e ideia não saiu do papel. Mas o sistema ficou legal.

QChurchView

A ideia do projeto era melhor uma série de scripts em Ruby que havia feito para controlar as imagens que seriam exibidas em um data show. Tinha feito isso porque ficava na mesa de som da igreja que frequentava e utilizar o Presentation ou PowerPoint era muito lento.

Desenvolvi o https://github.com/diegorubin/QChurchView usando C++ e o QT 4. As coisas mais legais que fiz no projeto foram referentes ao meu próprio sistema de templates para os slides com editor e formato de arquivo próprio. Basicamente os arquivos eram compostos por uma parte de metadados no começo do arquivo em XML seguido de informações binarias de imagens que seriam utilizadas no template. Havia um editor de slides também, bem tosco mas funcionava.

Outro ponto de motivação do projeto foi a utilização de sockets para comunicação entre os módulos diferentes: A tela de apresentação e a tela para controle do que estava sendo apresentado. Na versão original do projeto utilizava pipe do GTKmm para envio de informações para a tela de apresentação a partir de uma interface GTK construída com Ruby.

5º Ano

No meio do meu 5º ano como programador, inicio do 4º ano de faculdade, comecei a trabalhar na Ci&t em Campinas. Se eu já não me dedicava muito na árdua batalha contra meus professores da universidade, que em sua grande maioria não estão muito afim de ensinar, mas estavam muito mais preocupados em preencher seus egos se sentindo superiores aos alunos, foi ai então que abandonei de vez mesmo. Conclui apenas uma disciplina naquele ano - 2010 -, Sistemas Operacionais 2, ministrada pelo professor Juliano Ravasi, um dos poucos professores que são exceção a descrição dada por mim anteriormente.

Se por um lado foi um ano bastante ruim do ponto de vista acadêmico, foi uma ano muito bom profissionalmente. Tive a oportunidade de trabalhar em um grande projeto, visibilidade nacional e de com orgulho dizer que realizei um bom trabalho.

O portal Exame.com

O projeto que trabalhei durante mais tempo enquanto estive na Ci&t foi o novo CMS do portal Exame.

Realmente foi um projeto cheio de desafios, porém que trouxe um resultado muito satisfatório.

Durante o projeto, trabalhei com pessoas muito talentosos e aprendi muito com eles.

Infelizmente não posso dar muitos detalhes do projeto.

FrontFile

Em uma época que estava gastando muito tempo com Ruby, senti a necessidade de estudar alguma coisa diferente. Comecei a estudar Perl com mais afinco e dentre os projetos desenvolvidos na linguagem o único útil foi o FrontFile, que nada mais é do que dois scripts que realizam buscas em arquivos. Porém são scripts que utilizo sempre.

Também desenvolvi uma interface gráfica para os comandos em C e GTK. Este projeto encontra-se dentro do mesmo repositório no Github, porém nunca foi utilizado, acredito eu. Por ser antigo - o último commit foi realizado em 2011 - a interface gráfica não é tão simples de ser compilada mais, pois foi desenvolvida em GTK2 e hoje, a maioria das distribuições GNU/Linux utilizam a versão 3 como padrão.

A instalação também torna disponível duas páginas do manual que exibe os recursos dos comandos. É possível acessar a documentação através do comando man.

6º Ano

O 6º ano foi marcado pelo final do projeto Exame.com e pela minha saída da Ci&t. Percebi que se continuasse viajando todos os dias para Campinas não iria conseguir concluir meus estudos na universidade. Então comecei a trabalhar em uma empresa de Rio Claro, entrei para programar em Java e Javascript. E foi o que fiz nos projetos daquela empresa durante o meu 6º ano e devo salientar: somente durante aquele ano.

Neste ano não me dediquei muito a projetos particulares, me dediquei mais a universidade e a alguma diversão. Neste tempo estava bem participativo no SPOJ. Além disso, até o final de 2010, tivemos que fazer bastante horas extras para concluir o projeto da Exame.

Também foi o ano que casei com minha querida e amada esposa: a Carla.

Mas mesmo no meio desse corre corre, algumas coisas foram aproveitadas.

Neste época também resolvi mais uma vez tentar manter um blog e acredito que tenha conseguido, apesar de ter falhado com ele nos últimos tempos. Neste tempo escrevi os seguintes artigos:

  • Rodando Código Python Dentro de Uma Aplicação C: A ideia quando comecei a estudar esse assunto era utilizar o Python para processar alguns textos de um projeto que estava desenvolvendo em C++. Esse projeto não foi para frente, porém com esse conhecimento serviu de base para a construção do sistema de hooks do Gnomato, projeto que irei descrever posteriormente;
  • Criação de Bibliotecas Dinâmicas em C: Sempre gostei de estudar C e C++ e ainda sonho poder trabalhar em um projeto grande com essas tecnologias. O objetivo desse artigo era mais aprofundar conhecimentos mesmo. Não cheguei a aplicar esses conceitos em nenhum projeto real;
  • Criando Testes em C Utilizando o Libtap: Depois que entendi e comecei a aplicar o TDD em meus projetos Ruby, tentei aplicar esses conceitos em tudo que iria programar. A ideia do artigo era mostrar uma forma de criação de testes unitários para a linguagem C. Utilizei esses conceitos quando desenvolvi meu compilador e o meu shell para a disciplina Sistemas Operacionais 2.
  • Utilizando Expressões Regulares em Ruby: O primeiro artigo dessa nova tentativa de manter um blog. Naquele tempo estava estudando Perl e achei fantástico as possibilidades de uso de regexes na linguagem. Meu objetivo com esse artigo era trazer o que eu aprendi no meus estudos de Perl para o mundo Ruby. Utilizo sempre este artigo como referência.
  • Duck Typing: O objetivo do artigo é falar sobre um conceito muito utilizado em linguagens com tipagem dinâmica, como Python e Ruby, o Duck Typing.

Trabalhos da disciplina Computação Evolutiva

Uma das disciplinas que me renderam um artigo e um repositório no github.

O objetivo da disciplina era apresentar algumas metodologias para desenvolvimento de algoritmos baseados em conceitos biológicos. Eu implementei dois algoritmos para dois problemas de otimização, um foi feito em Ruby e outro em Python e ambos estão no repositório mencionado.

Trabalho final da disciplina Linguagens Comerciais

Outra disciplina prática que me ajudou na minha tarefa de encontrar assunto para escrever conteúdo para o meu site foi a disciplina Linguagens Comerciais. Não quero entrar no mérito aqui de discordar do nome dado a disciplina e nem de como ela é ministrada. Quando a cursei, o objetivo basicamente foi fazer programinhas utilizando Java e Swing.

O que construí como trabalho final da disciplina foi um pequeno aplicativo para cadastrar turma e gerar uma lista de presença para impressão. Serviu para eu estudar alguns conceitos do Java que ainda não conhecia, como por exemplo reflection’s.

Também gastei um tempo estudando o XML Schema do SVG e isso gerou mais um artigo para meu site: Criando Relatórios Utilizando Java e SVG. O código do projeto pode ser encontrado no github.

Mais tarde, com os conceitos que aprendi sobre SVG escrevi plugins para o Inkscape, todos específicos para o emprego que estava na época, mas cheguei a escrever outro artigo sobre o assunto: Criação de Extensões para o Inkscape.

7º Ano

Meu 7º ano foi marcado mais uma vez por uma dedicação à disciplinas da UNESP e ao emprego da época.

Esse ano não trabalhei mais com Java e Javascript para a empresa que me contratou. Após uma série de mudanças e depois de convencer a galera que Git era melhor que SVN, que existiam formas de testar o código de forma não manual, falar o que era integração continua, ensinar alguns conceitos de metologias ágeis para a organização dos projetos e mostrar também que Ruby on Rails era muito legal, começamos utilizar essas tecnologias nos novos projetos. Mas tudo isso me levou a fazer muitas horas extras e sem um real de retorno.

E alguns dos projetos particulares foram idealizados para reparar alguns problemas que via na empresa, como foi o caso do Apontamento.

Apontamento

O projeto ainda não está disponível em nenhum repositório publico. O motivo disso é que ele foi desenvolvido na correria entre os projetos do meu emprego e as disciplinas da UNESP e com isso o sistema foi criado com diversos bugs e gambiarras.

O objetivo do projeto é um controle de horas gastas com os projetos que trabalho. A figura abaixo mostra o dashboard do sistema.

dashboard apontamento

Além de apontamento de horas, também foi construído um Kanban para gerenciar estórias e tarefas.

O sistema foi criado utilizando Ruby on Rails.

Gnomato

Além de desenvolvimento e de servidores e sistema operacionais, uma outra área que gosto muito de estudar é coisas relacionadas a metodologias. Por gostar bastante e sempre tentar aplicar o metodologia Pomodoro no meu dia a dia, eu implementei o Gnomato. Não quero falar muito sobre ele aqui pois já escrevi um artigo e uma página descrevendo o projeto.

O que quero destacar aqui tenho recebido algumas mensagens de pessoas que estão utilizando o aplicativo. Também tenho recebido apoio por empacotadores de aplicativos para o ArchLinux e já recebi um pull-request de um desenvolvedor que encontrou um erro.

O repositório do Gnomato fica em https://github.com/diegorubin/gnomato.

Desenvolvimento Android

Neste ano comecei a estudar Android depois de ganhar meu primeiro aparelho com o sistema. Meu primeiro teste com desenvolvimento para Android foi a criação de uma gambiarra para que meu celular funcionasse como controle remoto para apresentações com slides.

Nessa primeira tentativa não utilizei a API em Java, mas usei outro projeto que possibilitava o uso de Ruby para criação de aplicativos Android. Foi a primeira e última vez que criei um aplicativo para Android dessa forma, pois o resultado final é lento e grande demais.

Funcionava da seguinte forma: o aplicativo envia uma mensagem a um servidor http com um possível comando, então esse comando era repassado para um cliente que enfim enviava o código para o X11.

O mais legal do projeto foi ter desenvolvido uma classe utilizando a API do Ruby em C, pois o Ruby não tem acesso ao X11 diretamente, ou pelo menos não tinha encontrado uma classe que já implementava isso. O código em questão está presente nos arquivos x11_display.h e x11_display.c.

Depois dessa experiencia comecei a estudar a API do Android em Java para desenvolver aplicativos nativos. Cheguei a escrever uma série de artigos sobre o assunto que chamei de CarnAndroid, pois foram escritos durante o Carnaval de 2012 - criativo, não é mesmo? Os artigos são os mais acessados do meu blog até hoje e podem ser encontrados neste link.

Pythonicus

Dando continuidade nos meus estudos sobre processamento de linguagem natural resolvi criar um serviço para categorizar um texto de computação. O serviço espera um texto e através de uma série de processos, palavras irrelevantes são retiradas. Através das palavras com valor semântico o assunto do texto é identificado.

Esse serviço foi apresentado como trabalho final da disciplina Inteligência Artificial. O projeto foi desenvolvida utilizando Python e faz uso do NLTK. O código pode ser encontrado no github.

8º Ano

O 8º ano não foi muito diferente do 7º. O foco ainda estava em concluir o curso da UNESP e fazer o melhor possível no emprego - hora extra era o que não faltava, só faltou receber o pagamento por elas mesmo.

Porém, um dos meus projetos mais legais - e acredito também que um dos mais úteis - foi desenvolvido durante esse ano, o RunMySource.

RunMySource

Sempre gostei muito do Spoj e sempre pensei em construir algo para utilizar em minicursos de programação. Em uma das disciplinas da UNESP, tivemos que desenvolver um projeto com tema livre, a única obrigatoriedade era o uso da linguagem de programação que havíamos escolhido estudar no começo do semestre, que no meu caso era Erlang. Já havia algum tempo que tinha interesse em estudar essa linguagem. Então resolvi junta o útil e o agradável.

A ideia do RunMySource é primeiramente escrever o código no site e executá-lo lá mesmo. Atualmente as linguagens suportadas são: C, C++, Clipper, C#, Erlang, Fortran, Java, Lua, Objective-C, Pascal, Perl, PHP, Prolog, Python, Ruby e Rust.

Além disso, foi construído de avaliação nos formatos do Spoj, onde é possível criar problemas e criar avaliações para que alunos submetam seus códigos escritos como solução dos problemas.

O sistema foi validado em dois momentos: A primeira foi durante o minicurso sobre Ruby que ministrei durante a SECCOMP 2012. Durante o evento foram dados alguns problemas simples e foi pedido para que alunos do minicurso enviassem as soluções. Os registros ainda estão no site no seguinte endereço: http://runmysource.com/courses/3. Também escrevi um pequeno texto na ocasião: Run My Source e a SECCOMP 2012.

A segunda validação que obtive foi durante a disciplina Simulação Estocástica. Na disciplina deveríamos utilizar Fortran para resolver os exercícios. Eramos obrigados a utilizar uma versão no compilador para Windows. Ao invés de utilizar esse sistema, utilizei o RunMySource para resolver todos os exercícios e assim não precisei utilizar o Windows e não tive nenhum problema. Ainda tenho todos os exercícios resolvidos na minha conta do sistema.

O core do sistema foi construído em Erlang. Foi implementado um serviço que é responsável pela execução do código. Existe uma pequena parte que utilizei Python para comunicação do Erlang com o Sistema Operacional. O site, o sistema que se comunica com o core em Erlang, foi desenvolvido em Ruby on Rails.

Na época utilizei o chroot para criação de sandboxes para execução dos código, cheguei a escrever um artigo sobre isso, Criando uma Jail utilizando Chroot no Fedora ou CentOS, atualmente utilizo o Docker para criar os sandboxes.

Compilador

Desde o primeiro momento que olhei para a grade quando fiz minha matrícula na UNESP uma das disciplinas que mais ansiava em cursar era Compiladores. Quando finalmente cursei a disciplina fiz o melhor que pude e acredito ter conseguido alcançar um bom resultado, por isso estou listando ele como um projeto de destaque.

Utilizei o autotools para gerar o instalador do compilador e também desenvolvi o mesmo utilizando TDD, por isso ele é coberto por testes unitários, coisa que é bem difícil de ser vista em nosso curso.

Outra coisa que tentei implementar durante o desenvolvimento do compilador é uma ferramenta para verificar a situação dos recursos durante a execução do compilador. A ideia era o compilador enviar mensagens para um fifo e o debugger consumir essa mensagens e exibi-las de forma amigável.

O código do compilador pode ser encontrado no repositório https://github.com/diegorubin/compilador e o código da ferramenta para debugger pode ser encontrado neste repositório https://github.com/diegorubin/compilador-debugger.

9º Ano

Enfim, o ano da conclusão do curso. Depois de enfrentar um dos professores mais tenso do curso, professor que cobra muito e ensina bem pouco, consegui passar em cálculo IV.

E fico feliz em lembrar também que pelo menos um dos objetivos que tinha ao entrar na universidade e ver quais seriam os passos para a formatura foi concluído. Apesar de já trabalhar na área, resolvi não utilizar um estágio como trabalho final mas sim um trabalho de conclusão de curso, escrevi minha monografia. E ainda meu trabalho não foi um grande resumo sobre um assunto, coisa que é normal em nosso curso, realmente implementei e apresentei algo.

Vortex, meu Trabalho de Conclusão de Curso

Como meu TCC, desenvolvi um indexador de páginas web em Erlang - nada de novo, realmente nada de novo. A ideia era aplicar algumas metodologias de processamento de linguagem natural que havia estudado anteriormente. Desenvolvi o sistema pensando em escalabilidade e uma boa forma de indexação.

Outra tecnologia que utilizei no projeto que achei fantástica e que ainda preciso dar continuidade nos estudos é o banco de dados NoSQL chamado Riak.

Eu tinha como objetivo utilizar o sistema em algum dos meus aplicativos, porém ainda não consegui fazer nenhum tipo de integração. Penso em integrá-lo com o Independent o mais breve possível.

Reestruturação do Independent

Em 2011, depois de abandonar o Wordpress como CMS - a ideia sempre foi utilizá-lo temporariamente - construi meu próprio CMS, utilizando Ruby on Rails e MongoDB. Ele foi desenvolvido de uma forma não muito reaproveitável, tinha muita coisa não parametrizada e por isso não publiquei o código em nenhum repositório público na época.

Em 2014 resolvi começar o projeto do zero, utilizando as mesmas tecnologias, porém de uma forma totalmente parametrizável, para que outras pessoas - ou eu mesmo em mais um outro site, o que acontece hoje com o humanidadeutil.com.br - pudessem utilizá-lo também e pude publicar o código em um repositório do Github.

Criei um pequeno e simples sistema de templates, com isso posso distribuir o código do CMS sem que tenha que disponibilizar também o layout do site. Também criei um pequeno sistema de widgets que ainda precisa ser melhorado muito, mas que já está me uso.

10º Ano

De volta a trabalhar em projetos grandes, ter contato direto com cliente e novos desafios, essa é a marca do meu 10º ano como programador. De volta a Ci&t pude novamente participar de várias etapas do projeto, conversar com PO’s e colocar códigos críticos em produção. Voltei pra Ci&t para um projeto em Ruby, porém atualmente trabalho com Java e Spring.

Em paralelo ao meu trabalho remunerado, tenho trabalhado em alguns projetos pequenos, principalmente na retomada do Projeto Labluna, que consiste na criação de pequenos sistemas que possuem funções especificas. Os primeiros que estão em desenvolvimento é um Provider OATUH2, um sistema para criação de listas genéricas e um sistema para criação de documentos. Todos esses projetos estão reunidos no Github.

Os outros projetos que trabalhei durante este ano foram coisas bem pequenas e que não vingaram muito, mas que serviram para estudo, como o caso do Elisios que utilizei para estudar Backbone.js.

Apesar de não criar novos projetos esse ano, dei continuidade em diversos projetos, como o Gnomato que teve diversos bugs corrigidos e diversas melhorias implementadas e um plugin para o Cinnamon criado.

Gnomato Cinnamon Plugin

O RunMySource que ganhou um plugin para o Vim, teve novas linguagens suportadas e um novo modo de criação de sandboxes, do antigo chroot para o Docker. E o Independent foi melhorado, e comecei a utilizar o sistema em outro site, o Humanidade Útil.

E finalmente

Tenho gasto algum tempo trabalhando no meu corretor ortográfico como um serviço escrito em Python e que ainda precisa ser melhorado.

Também retomei um projeto bem antigo, que iniciei em 2012, a criação de uma pequena rede social para uso interno, utilizando Ruby on Rails e o conceito de Single Page Application, não utilizo nenhum framework Javascript, apenas o jQuery mesmo. Espero colocar a primeira versão para uso real até o final de semana da publicação desse artigo - vulgo fim das minhas férias. O sistema é o Xurisso Community.

Gostaria de agradecer as pessoas que me ajudaram nesses 10 anos, não vou listar todos aqui para não esquecer de ninguém. Mas existem muitas pessoas que me apoiaram e que me entusiasmaram, desde o Bayeux, UNESP e agora de volta à Ci&t. Posso dizer que tenho meus heróis no mundo da computação, existem os distantes que não conheci e nem conhecerei, mesmo os que ainda estão vivos, mas também existem os que tornaram-se heróis para mim depois de conhecê-los.

Mas principalmente, gostaria agradecer as pessoas que de alguma forma utilizam meu código.


Me

Tenho estudado esse mundo mágico da programação desde 2005. Já consegui sustentar minha família usando Ruby, Java, Python, C++ e Javascript. O resto tenho usado para diversão ou aprendizado.