Minha estadia no Nubank

Ultimamente eu tenho estudado muito de programação funcional, principalmente em Clojure. E nada melhor para estudar uma linguagem do que se aventurar num emprego em que se usa ela, certo? 

Foi assim que eu fiz o processo seletivo no Nubank. E passei, e comecei a trabalhar em maio.

Muitas coisas foram diferentes para mim nessa pequena jornada. A primeira empresa em que o atendimento ao cliente está muito próximo do dia a dia, a primeira empresa com muitos funcionários, a primeira empresa que opera com muito investimento, a primeira empresa que usa intensivamente micro serviços, e a primeira empresa em que eu, de fato, fui demitido (e não que eu pedi demissão). 

Apesar de tudo, eu já tinha meus planos de sair. Mas isso não vem ao caso, nem vem ao caso as circunstâncias que levaram ao acontecido. O importante é o que fica, e as coisas que eu aprendi. 

Pela primeira vez na vida eu trabalhei com microserviços, e pela primeira vez eu consegui ver a vantagem real de uma linguagem funcional nesse processo. Há muito tempo atrás, no mundo de Ruby, uma implementação chamada Maglev prometeu entregar persistência de objetos Ruby completos, inclusive exceptions. O Maglev mesmo nunca foi muito utilizado, mas essa ideia de persistir exceptions e sessions e depois reproduzir o bug simplesmente pegando a session e replicando os passos que causaram o erro ficaram na minha mente. 

Quando eu trabalhei com microserviços, era exatamente isso que eu fazia – cada ponto de entrada em um serviço era um conjunto de dados, e como a maior parte das coisas era imutável, se algo dava erro a mensagem era rejeitada, e depois podíamos simplesmente chamar o mesmo entrypoint com a mesma mensagem, e garantir que a mesma exception ocorreria. Se fosse algum erro de comunicação com banco de dados ou com outro entrypoint, nada de errado ocorreria – e aqui entra a segunda coisa diferente.

Para suportar todas essas características, todos os entrypoints tinham que ser indepotentes – ou seja, se uma mesma mensagem fosse enviada para ele duas, três, ou quatro vezes, o entrypoint se compraria como se tivesse recebido apenas uma. O importante aqui é não depender de um id de mensagem ou qualquer coisa assim – é importante que a mensagem inteira seja responsável por ser indepotente.
(more…)

“Copiando” um Linux

Esses dias, um amigo meu comprou um SSD para o notebook dele, e queria copiar o Linux dele para o SSD. O detalhe, ele não queria instalar o linux novamente, e queria manter o diretório /home dele no HD antigo. Depois de fazer o processo, resolvemos que seria uma boa idéia postar sobre como fazer isso.

Inicialmente, é importante falar (para quem não conhece direito) que o Linux tem uma estrutura de diretórios bem peculiar. Todos os dados pessoais estão apenas no diretório /home, as informações de boot estão no diretório /boot, e outras informações estão em outros lugares. Logo, tudo o que se precisa fazer é mover os diretórios para o novo HD (no caso, o SSD) e deixar o diretório /home no HD antigo. Mas tem um pouco mais do que isso.

(more…)

Nokia n810 e iPod Touch-comparação

Bom, para os que me conhecem, sabem que eu não sou nem um pouco adepto da Apple, principalmente porque os equipamentos que ela faz são extremamente fechados e difíceis de hackear. Isso, para um desenvolvedor, é praticamente um pesadelo, e esse foi o motivo que me levou a comprar, a alguns meses, um Nokia n810.

Para os que não conhecem, o n810 é um tablet (ou um “mini tablet”, talvez) que roda Linux (maemo). É considerado por muitos como o antecessor do n900, que atualmente é o sonhado brinquedo de muitos.

Bom, como sempre, a primeira coisa que eu fiz, quando ele estava já carregado, foi ver o que eu poderia fazer com ele: até onde eu poderia chegar. Instalei outro browser (mirori), e tentei abrí-lo… e ganhei uma mensagem de erro. Quando reiniciei o n810 (sim, precisei reiniciar porque nenhum aplicativo abria mais), consegui abrir o midori, e descobri que ele era BEM melhor que o browser que acompanha o nokia. Por sinal, isso foram coisas que eu fui descobrindo com o tempo, que a maioria dos aplicativos que já vem com o Nokia são bem ruins.

Em compensação, desenvolver para o nokia é uma maravilha. Basta usar sua linguagem favorita (menos Java) e escrever o código, que ele roda tranquilamente (ambiente semelhante ao do Gnome). Mais para frente, tentei usar o GPS dele, e basta dizer que o GPS aí simplesmente não funciona-ele demora uns 20 minutos para achar os satélites, depois demora para achar a posição atual, e ainda consome muita bateria.

No FISL, este ano, ganhei um iPod touch, no Code Golf. Resolvi ver quanto tempo eu conseguiria usá-lo sem Jailbreak, e marquei o tempo de duas horas-a maioria do que eu queria instalar só rodava num iPod desbloqueado. Até o momento, não consegui descobrir uma forma fácil de desenvolver em qualquer coisa diferente de Objective-C, como Ruby ou Python, por exemplo, além de ter achado demasiadamente complicado passar músicas e fotos para o Touch (o gtkpod é o aplicativo mais recomendado, embora eu preferiria que o touch montasse como uma pen-drive). Além disso, a bateria do touch é bem fraquinha na minha opinião (a minha dura pouco mais de 24 horas, com o iPod completamente em repouso e sem usar wireless).

Ok, chega de problemas, vamos falar de características:
(more…)