Lavando a louça

Lavando a louça
com a mente solta

Lavando a louça
ouvindo música

Lavando a louça
vendo vídeo

Lavando a louça
vendo filme

Lavando a louça
vendo série

Lá vendo a série,
com personagens
lavando louça

Lavando a louça,
louça do almoço

Lavando a louça,
a do jantar

Lavando a louça,
louça de ontem

Lavando a louça,
louça de hoje

Lavando a louça,
a minha, mesmo

Lavando a louça
da minha filha

Lavando a louça,
um passatempo

Lavando a louça,
o tempo passa

Passam-se os anos
lavando a louça

Lavando a louça,
levando a vida

Lavando a louça,
lavando a alma

É muita louça,
é muito tempo,
muito trabalho
e retrabalho,
lavar a louça,
lavar a alma

É muito louca
a tal da louça,
que nem de louça é!

Todo dia, tem louça
E, tendo louça, tem, também,
mais uma chance,
mais uma história

Dia de louça?
Dia de chance,
dia de história

Não tem mais louça?
Acabou a chance,
acabou a história.

153

Eu falo com as plantas.

Ao ver uma rosa,
leio suas folhas.
Vendo um salgueiro,
ouço seu pranto.

Olhando as flores
ou um holofote
ou um choque entre trens,
aquilo que eu vejo
é música.

Eu vivo no mundo,
mas vivo o meu mundo.

Sou sutil
e até que discreto,
mas muito orgulhoso
do meu trabalho.

Não sou roqueiro
nem sou escocês.
De onde eu vim,
nem eu sei ao certo.
E aonde eu fui?
Isso, eu sei bem:
fui a todo lugar!

Dos bordéis aos salões,
dos teatros aos filmes,
vitrolas, consoles.

Estive nas casas,
estive nas mentes,
as que tocam as teclas
ou apertam botões.

Um século e meio:
é, nem parece,
há mais do que isso
que cheguei ao mundo.

E há mais de um século,
com nem meio século,
pareceu mentira
o dia em que saí
pra habitar o outro mundo.

Estrênua vida,
de muito trabalho,
tudo pra ser
o favorito,
o paragão.

Há quem me compare
com um camarada,
o Sr. Ernesto.
Eu, cá no norte,
e ele, no sul.

Eu sou popular,
ou sou erudito?
“O Animador”.
Eu sou popular
e sou erudito.

Eu disse e repito
o que eu te desejo:
conforto a suas dores,
muitos bons momentos
e felicidade!

Aceita me ouvir?
Por favor,
me diga que sim!


Hoje, 24 de novembro de 2021, fez 153 anos do nascimento de Scott Joplin. A data real é incerta, essa é a que temos registrada. Pai do ragtime, precursor do jazz, influência certa em inúmeras músicas de videogame que marcaram as décadas de 80 e 90.

Conheça um pouco de sua maravilhosa música, começando por “Please say you will”, de 1895:

Ouvir música de Scott Joplin

A imagem do post vem da partitura de Reflection Rag, de Scott Joplin, publicada em 1917, oito meses após seu falecimento.

Reflection Rag (Scott Joplin, 1917)

Agradeço imensamente a Alan Tonello, Amanda Beça e Larissa Cavalcanti. Eles foram os autores do incrível vídeo abaixo, que faz uma análise das músicas de Super Mario World. Foi a partir desse vídeo, que assisti há 9 anos, que tomei conhecimento da existência do genial Scott Joplin e comecei a apreciar seu trabalho. Agradeço também ao Leandro, que, se bem me lembro, foi quem me indicou esse vídeo. Valeu, galera!

Vídeo do TCC de alunos do curso de Cinema da UFPE, 2010

Qualquer coisa

Joãozinho chegou.
Disseram pra ele:
“Qualquer problema, me avisa!”
“Precisa de ajuda, tô aqui!”
“Qualquer coisa, me chama!”

Pois, chegou a hora:
ele teve um problema,
precisou de ajuda,
rolou qualquer coisa.

Foi lá e chamou.
Ninguém respondeu.
Aí ele insistiu.

“Agora não dá…”
“Errado, isso? Certo é que tá!”
“Deixa isso pra lá…”

“Errado tá certo?”
“Não ia me ajudar?”
“Não pediu pra chamar?”

Joãozinho bateu,
e, muito, a cabeça.
Primeiro, achou estranho,
não se conformou.
Mas, com o tempo,
uma hora cansou.

E, então, entendeu:
a vida é assim.
Diz A, mas faz B;
prometendo C,
vai cumprir é D.
Vai compreender…

Não é por mal,
a contradição.
É só por costume
ou “por educação”.

Se dizem “Pois, venha!”
não querem que venha.
É só brincadeira.
Não é séria a vida,
é só brincadeira.

Joãozinho aprendeu,
com o Capitão,
a fazer opção:

Ou se corrompe,
ou se omite,
ou vai pra guerra.

Se se corrompe,
acata tudo,
concorda com todos,
mas faz o que quer,
e entra no esquema.
E, se perguntar,
“tá tudo de boa!”.

Se se omite,
Então, nem pergunta,
faz o seu, cai fora.
E, se perguntar,
“isso não é comigo”,
“é lá com o fulano”.

Mas, se vai pra guerra,
avisa o problema,
pede sempre ajuda,
se dá qualquer coisa,
vai lá e chama.
Chama todo mundo
e questiona tudo,
toma a dianteira.

Consciência tranquila,
mas agenda cheia.
O chato do mês,
com uma pá de problema.

Bom, mas, então,
qual é a opção,
que é boa opção,
não pro Capitão,
mas pro tal do João?

Ser pai – versão pandemia

A pandemia fez todo mundo se aproximar mais, aí aumentou tudo! Muito bom ter mais tempo com a filhota, mas muito difícil lidar com os conflitos.

Dividir atenção entre trabalho, esposa, filha, casa, minhas próprias necessidades… Acabamos sempre negligenciando algum lado em algum momento, e precisamos aprender a lidar com isso.

A mãe acolhe, o pai libera. Papéis complementares, igualmente importantes.

Ser pai ou mãe é, todos os dias, engolir orgulho, rever conceitos e ter fé. É ver filosofias desmoronarem e construir novos paradigmas, junto com os filhos.

É dificílimo, é maravilhoso e molda o mundo.

Parabéns aos papais!

A experiência de trabalhar na Lambda3: primeiros seis meses

Hoje, completei 6 meses de Lambda3! E vim aqui contar um pouco de como tem sido essa experiência.

Tem sido maravilhosa! É um lugar realmente muito bom, tanto tecnicamente quanto em termos de ambiente de trabalho. As pessoas são bem legais e você tem muita liberdade para ser quem realmente é e para tomar decisões. O trabalho em equipe é de verdade em equipe e funciona muito bem.

Toda equipe de desenvolvimento tem ao menos uma pessoa com mais experiência na cultura de trabalho da empresa, e também tem um profissional especializado em fazer com que a agilidade aconteça de fato. É o/a agilista. Sabe aquilo de entregar mais valor o mais cedo possível, evitar desperdício, ser transparente e organizar o trabalho a ser realizado de forma eficiente? Então… A pessoa agilista vai estar lá facilitando que tudo isso aconteça.

A qualquer momento do dia, podemos descansar, jogar videogame, pingue-pongue ou qualquer outro jogo, conversar, comer, tomar café, deitar na rede… Ninguém vai ficar te vigiando ou julgando por isso. Cabe a você fazer isso com responsabilidade. Isso às vezes gera dúvidas sobre qual seria a medida certa de equilíbrio. E ter essas dúvidas é bom, faz parte do processo de amadurecimento, que culminará com você sabendo se gerenciar sozinho, o que é bastante desejável em uma empresa que não tem gerentes :).

Já ouviu falar de democracia organizacional? Funciona mais ou menos assim:

Continuar lendo “A experiência de trabalhar na Lambda3: primeiros seis meses”

A arte

Qual é a sua relação com a arte?

A minha é meio esquisita. Não a entendo, às vezes. Sei escrever, fotografar, fazer trabalhos artesanais, música… Mas, no dia-a-dia, isso parece quase nada mudar na minha vida ou na sociedade. Às vezes, acho até que atrapalha pra caramba.

A arte tem papel fundamental na vida do ser humano. Mas, na minha vida, não consigo dar à arte o devido espaço. Quando dou, parece que faltam outras coisas… Tipo tempo para dormir!

Quanto mais industrial fica a cultura, mais se produz e menos se tem acesso a coisas boas do passado. Isso, só até certo ponto, é normal, depois já é anormal. É difícil levar certos tipos de arte, das bem acessíveis mesmo, à população em geral, acostumada ao enlatado.

Enquanto isso, grande parte dos artistas está imersa em suas artes malucas que mais ninguém entende. E ficam fazendo arte só para eles mesmos.

A classe média também parece não se esforçar muito, prefere consumir aquilo que mais se consome. Se toca X na festa, ouço X. Se tem Y no Netflix, vou ver Y.

No fim, parece que quase ninguém está se expressando de fato, seja na produção ou no consumo da arte.

Esse papo é velho, mas o fato é que a arte é importante demais para ser negligenciada. Ao mesmo tempo, eu também não tenho solução. Se é que algo assim se soluciona.

E assim segue desafinada a orquestra chamada Terra…

Em 2019

Em 2019, eu:

  • Não escrevi este post, por isso estou escrevendo agora!
  • Visitei Jaboticabal e o velho amigo Raphael
  • Fiz jejum por cinco dias e meio
  • Montei o álbum de fotos da minha filha de zero a dois meses
  • Produzi o vídeo do nascimento da minha filha
  • Conheci o maravilhoso figo de Valinhos
  • Vendi meu cavaquinho
  • Aprendi Clojure
  • Participei da CONCAFRAS
  • Ensinei Clojure
  • Encontrei por acaso o Oberom
  • Revivi meu Twitter
  • Fiz três processos seletivos
  • Me exonerei de um cargo público
  • Conheci Portugal
  • Me despedi dos amigos de Campinas
  • Aprendi React
  • Palestrei em inglês sobre Clojure
  • Entrei na Lambda3
  • Comecei a aprender Angular
  • Me mudei para São Paulo
  • Fui patrono de uma nova turma de formandos
  • Acabei com os cupins daqui de casa
  • Comecei a aprender TypeScript
  • Uni um amigo meu a uma amiga da minha esposa
  • Retomei contato com velhos amigos escrevendo mensagens de feliz natal e de feliz ano novo
  • Li Harry Potter and the Goblet of Fire
  • Vi minha filha completar três anos
  • Comprei ingressos para o show do Roberto Carlos de 2020

Palestra Teaching Clojure

Participei hoje e ontem do evento TheConf em São Paulo. Ontem de manhã, dei uma palestra contando a experiência de ter ensinado a linguagem de programação Clojure, num curso de extensão do IFSP Campinas. Foi muito legal! Seguem os slides:

Teaching Clojure – Palestra em inglês ministrada no TheConf 2019

Comandinhos rapidões no Linux (Debian/Ubuntu/Mint)

ComandoO que faz
apt install pacoteAtalho para sudo apt-get install pacote
apt version pacoteMostra versão de um pacote instalado
poweroffDesliga máquina. No Mint, não precisa de sudo.
rebootReinicia máquina . No Mint, não precisa de sudo.
CTRL+DFecha terminal
sed -r ‘s/(de)/\1para/’Exemplo simples de conversão com sed: de -> depara

Operador vírgula: o ilustre desconhecido

Você já quis inserir um elemento num vetor e obter o vetor numa tacada só? Já quis que o vetor.push(el) do JavaScript retornasse o vetor em vez de o tamanho?

Se já quis e ficou frustrado, saiba que tem como fazer! Existe um operador que serve exatamente para esses momentos:

vetor.push(el), vetor

Como assim, André? Que operador? Que raio foi isso aí?

Sim! Esse é o mágico e desconhecido operador , (vírgula) da linguagem C, herdado por JavaScript. Ele avalia cada expressão e dá como resposta o resultado da última:

// Os parênteses são necessários aqui porque 
// o operador vírgula tem uma precedência baixíssima

const resultado = (expr0, expr1, expr2); // resultado = expr2

Já fazia uns 15 anos que eu me perguntava para quê ele servia na prática, e, hoje, finalmente, encontrei a resposta! O operador vírgula serve quando você está num ponto do código que precisa de uma expressão e você quer causar um efeito colateral.

Você talvez já o tenha visto no incremento de um for com mais de uma variável: for (int i = 0, j = 0; i < 10; ++i, ++j). Nesta resposta do StackOverflow tem um outro exemplo de uso, para fazer leitura de dados. É tipo quando a gente faz assim em Java:

while ((byteLido = inputStream.read()) != -1) {
// ...
}

O while pede uma expressão booleana. Entregamos uma para ele, mas, antes disso, damos uma mexidinha no estado do sistema!

Se você já fez programação funcional com vetores em JavaScript, provavelmente já sentiu falta das funções cons e conj do Clojure, ou : do Haskell.

Dá para simular essas funções assim: [elemento].concat(vetor) ou vetor.concat([elemento]). Meio feião e cria um vetor bobo para jogar fora pouco depois. Vamos usar isso para fazer uma implementação recursiva de cauda da função zip:

function zip(v1, v2) {
const loop = (ret, v1, v2) =>
v1.length === 0 || v2.length === 0 ? ret : loop(
ret.concat([[v1[0], v2[0]]]), v1.slice(1), v2.slice(1));
return loop([], v1, v2);
}

Ficou razoável… Mas que colchetaiada!

E com push, como ficaria? Normalmente, evitamos alterar variáveis. No caso, ret é um vetor novo, então não tem muito problema. Além disso, evitar criar vetores extras pode ser uma boa aqui porque estamos em JavaScript, que não tem as otimizações comuns em linguagens funcionais. Ficaria assim:

function zip(v1, v2) {
const ret = [];
function loop(v1, v2) {
if (v1.length === 0 || v2.length === 0) {
return ret;
} else {
ret.push([v1[0], v2[0]]);
return loop(v1.slice(1), v2.slice(1));
}
}
return loop(v1, v2);
}

Eita… Um monte de ; {} return! Nem parece mais programação funcional. loop era só uma funçãozinha de uma expressão só, agora virou um trambolho, devido a termos que mudar de ? para if/else.

E com se usarmos o operador vírgula?

function zip(v1, v2) {
const loop = (ret, v1, v2) =>
v1.length === 0 || v2.length === 0 ? ret : loop(
(ret.push([v1[0], v2[0]]), ret), v1.slice(1),v2.slice(1));
return loop([], v1, v2);
}

Opa… Aí, sim, hein! push só é executado quando os tamanhos dos vetores são diferentes de zero, e o resultado da expressão entre parênteses será ret. Causamos um efeito colateral maroto e inofensivo.

Simples ou complicado, claro ou obscuro, o fato é que agora está explicada a existência desse misterioso operador!

Espantoso? Nem tanto… O comando do em Clojure faz a mesma coisa!