Aurelio.net View RSS

Relaxe, leia com calma, aproveite a viagem.
Hide details



Minha experiência na ContaAzul 6 Feb 2017 3:00 AM (8 years ago)

Aos 38 anos, aceitei o desafio de trabalhar na ContaAzul, uma startup com tecnologias de nuvem, que até então eram desconhecidas pra mim. Fiquei lá por 11 meses, de nov/2015 a out/2016. Fiz novas amizades, conheci o método de trabalho da nova geração (fail fast), comi bastante (comida livre!) e aprendi muito sobre AWS, Docker, CI/CD e práticas DevOps. Foi uma experiência incrível, e um grande upgrade na carreira. Vou contar um pouco dessa história.

Outubro de 2015. Estava eu lá, já há dois anos trabalhando como programador concursado na Prefeitura de Joinville. O turno de 6 horas me deixava com tempo livre, então eu pretendia iniciar um mestrado (lembra que fiz o POSCOMP?) para tentar saciar o insaciável desejo de aprender coisas novas, diferentes.

Eis que chega em meu email um convite para trabalhar na loucura agitada de uma startup local, a ContaAzul. A vaga envolvia o tipo de trabalho que hoje chamam de DevOps, que é uma mistura de administrador de sistemas e programador.

A parte de programação tudo bem, nunca parei de estudar e praticar. Mas na parte de administração de servidores, eu era um dinossauro dos anos 90 com seus servidores físicos, locais (“my precious”) que você instalava o CD do Linux e editava artesanalmente uma série de arquivos .conf até tudo ficar lindo. Parei no tempo e perdi a migração do mercado para as VMs e depois para a nuvem: Pet → Cattle.

A ContaAzul, como empresa moderna, era 100% na nuvem, sem servidores locais. E agora, José? 😱

Na entrevista deixei claro que eu não manjava absolutamente nada desse novo mundo, mas que tinha vontade de aprender. Concordamos em começar com um contrato temporário de 3 meses, onde eu aprenderia na prática, estudando e resolvendo os pepinos do dia a dia. Perfeito! Será o meu “mestrado”, além de uma atualização de carreira.

Mas e a prefeitura?

Não deixei a prefeitura, então fiquei com dois empregos. Reduzi minha carga horária (e meu salário) na prefeitura para 4h (das 7 às 11) e na ContaAzul trabalhava mais 6h (das 13 às 19). Foi cansativo bagaraio, mas valeu a pena. 👍

Trabalhar em “startup”

Eu estava com umas ideias de ir pro exterior e trabalhar numa dessas empresas modernosas, para conhecer o clima de startup e aprender tecnologias de ponta. Nem precisou. No fim, a ContaAzul era uma empresa aqui da minha cidade, que tinha exatamente essa experiência para oferecer.

E não decepcionou.

Os itens esperados da checklist de “empresa cool” estavam lá: ambiente bem informal (puffs, paredes rabiscadas, post-its coloridos por toda parte, roupas bizarras, pantufas, decoração temática, música alta, festas), brinquedos (video game, ping pong, skate, bateria, nerf gun), comida e bebida à vontade, horário de trabalho flexível (sem ponto), e muita gente jovem.

Por falar em idade, eu era um dos “top 5” funcionários mais velhos da empresa. Isso numa empresa de 200+, pensa! 😱

A máquina de trabalho era um notebook (plugado a monitor e teclado externos quando na mesa), o que garantia mobilidade total para ir até a mesa do colega e juntos resolver os problemas, codando ao mesmo tempo. Ou ainda, passar a tarde no refeitório (chamado de “lounge” por quem é mais cool do que eu), programando enquanto come até enjoar as guloseimas da cozinha. Ou programar no puff, no sofá, no chão... Eu sou mais conservador e saía pouco de minha mesa. Mas percebia que o pessoal mais novo adorava mudar o local de trabalho com frequência.

A comida à vontade é uma coisa muito boa. Foi a primeira vez que trabalhei em um lugar assim e gostei bastante. A qualquer momento que bate aquela fome, ou aquela vontade de dar uma espairecida, era só ir até o refeitório e se servir, sem limites. Tinha água, refrigerante, suco, café, cerveja, iogurte, Yakult, granola, bolachas (várias), salgadinhos (Cheetos), doces (paçoca era meu preferido), pão, queijo, presunto, geleias, e vários tipos de frutas. Cozinha bem equipada, que o pessoal usava pra preparar sanduíches, vitaminas, e lanches mais elaborados. Era frequente rolar algum lanche especial, feito pelas moças responsáveis pela limpeza, como: cachorro quente, bolo, pipoca e torta. Desnecessário dizer que é fácil engordar lá se a pessoa não for controlada 😋

Havia uma equipe de limpeza, mas a regra era que cada um limpasse tudo aquilo que sujou na cozinha e refeitório. No geral, funcionava.

Houve várias festas temáticas na minha estadia por lá. A maioria já vinha fantasiado desde casa, e passava o dia trabalhando daquele jeito. Bem divertido ver vários personagens transitando pela empresa, fazendo seu trabalho normalmente. A festa mesmo começava à tarde, perto do fim do expediente e seguiam noite adentro até... Não sei que horas, pois nunca fiquei até o final 😬 O pessoal era bem animado e o clima das festas era legal, divertido, sem chinelagem.

Uma foto publicada por ContaAzul (@contaazul) em

O horário era flexível, sem ponto de entrada/saída. Durante o expediente, cada um era livre para trabalhar como e quando quiser, sem cobrança. Está estressado? Vai lá e fica meia hora jogando ping pong. Ou vai no refeitório e fica comendo e batendo papo com os amigos. Ou vai tirar uma soneca no puff. Ou chama os colegas pra jogar um Counter Strike, Age of Empires... Era bem comum o pessoal ficar trabalhando depois do horário. Tem dia que trabalha a mais, no outro a menos, e assim vai, cada um cuidando do seu próprio tempo.

Uma coisa que eu gostava era que toda a sexta-feira tinha uma reunião geral com todos os funcionários, que durava cerca de uma hora. Nela, o CEO (e outros líderes) expunham de maneira transparente os números da empresa, se estava indo bem ou mal, quais eram os próximos desafios, essas coisas. Também havia espaço para perguntas, onde o funcionário podia expor suas dúvidas, preocupações e ideias, ali na frente de todos. Gostei bastante desse formato e de poder ter essa dose semanal de notícias mais globais da empresa, saindo um pouco da “bolha” nerd ali do dia a dia.

Claro que nem tudo são flores. Infelizmente, tem gente que não sabe lidar com toda essa liberdade e abusa. Tinha os porcalhões que não limpavam sua sujeira no refeitório ou que deixavam o banheiro sujo. Tinha os que deixavam as salas de reunião bagunçadas. Tinha os fumantes que jogavam suas bitucas no jardim. Tinha os babacas que estacionavam de maneira não civilizada. Enfim, humanos. Sempre estragando o que é bonito. Mas isso era uma pequena parcela, no geral o saldo era bem positivo e o clima interno era muito empolgante!

Se quiser saber mais sobre o ambiente de trabalho, dá uma olhada lá nas fotos do Facebook e do Instagram da empresa.

Todo esse ambiente informal e divertido me lembrou muito de minha época na Conectiva, pois lá também era assim. Só não tinha a comida livre, mas de resto era similar. Detalhe que isso foi há 20 anos atrás, em 1997!

Aprendiz aos 38 anos

Como já comentei, eu cheguei lá sem saber nada das tecnologias que eles utilizavam.

Imagina um cara “das antigas” numa empresa moderninha 100% na nuvem.

Foi bem interessante essa experiência de chegar “virjão” e ser um total iniciante. Todos da equipe já eram experientes em nuvem, e eu era o perdido, o aprendiz, o estagiário. Tudo eu tinha que perguntar, descobrir o que é, pra que serve, que problema resolve, como funciona, e aos poucos ia construindo uma base de conhecimento nova. Levei meses para começar a ficar à vontade.

Mesmo ainda sendo um girino na nuvem, ganhei acesso de administrador em produção já no primeiro dia de trabalho! Ah, que diferença das mil regras de acesso da prefeitura... 🤠

O primeiro login na AWS foi um choque. Uma tela que listava um milhão de serviços, com seus nomes e siglas estranhos, que não me diziam absolutamente nada. Tipo ir visitar a cabine do avião e ver aquele mundo de botões e instrumentos. Nada se destaca, tudo é parecido e desconhecido.

Outra coisa nova pra mim era a prática de CI e CD (integração e entrega contínuos), que fazia com que um commit no GitHub fosse empacotado, testado e publicado automaticamente. Nunca tinha lidado com isso e demorei para entender todas as pecinhas que faziam a mágica funcionar. Algumas delas: Jenkins, Travis, Puppet, Docker, APIs da AWS e diversos shell scripts pelo caminho.

Aliás, a única coisa que já me era familiar nesse novo ambiente era o Linux e o bom e velho shell script, que ainda estava lá, firme e forte servindo mais uma geração. Ele continua indispensável e agora gruda todas as peças dessa engenhoca cloud. Além dos vários scripts internos, também tinha uns shell scripts camuflados dentro de determinadas ferramentas, como no Dockerfile ou no arquivo YAML do Travis CI.

Inspirado por essa nova realidade do shell, e com a experiência de trabalho na ContaAzul, fiz a palestra Shell Script Moderno.

Conflito de gerações?

Antes de começar lá, tive receio de ser o “tio da Sukita”, deslocado no meio da gurizada. Mas não foi nada disso. Me receberam muito bem desde o início, me incluindo nas atividades, nas histórias e claro, nas zoações. Afinal, zoar e ser zoado é a parte mais importante do convívio social sadio no trabalho 😂

Que eu me lembro, foram dois pontos que percebi uma diferença significativa entre gerações.

1. Jeito. Falar. Blz. Flw.

Eles falavam rápido e com frases bem curtas, sem contexto e sem muitos detalhes, num ping pong frenético. Igual às conversas de Whatsapp: vários pequenos balõezinhos seguidos, com frases e palavras soltas, em vez de um parágrafo completo.

No começo tive dificuldade de entender e acompanhar o ritmo. Eu tinha que interromper o fluxo para perguntar sobre o que estavam falando, pedir mais detalhes. Depois de um tempo acostumei...

2. Testar antes ou arrumar depois?

Aqui foi mais evidente a diferença. Eu sou super cauteloso, penso bastante antes de fazer, testo tudo e só faço commit quando tenho certeza que está tudo OK. Demora para sair, mas em geral funciona e não precisa corrigir depois.

A cultura local era o oposto: faz vários commits rápidos em sequência e publica logo, depois arruma os problemas conforme eles vão aparecendo. Era comum usarem a própria interface web do GitHub pra editar os arquivos mais rapidamente.

Apesar da diferença, não teve estresse, pelo contrário, nos zoávamos.

Com o tempo, achamos uma combinação que funcionou bem: eles continuavam em velocidade máxima fazendo as alterações e eu atuava forte no code review para encontrar os erros no código antes que eles fossem pra produção. Assim conseguíamos velocidade e qualidade ao mesmo tempo.

Sim, eu era o chato do CR! Além de achar bugs, também enchia o saco deles com coisas que considero importantes como: erros de português e inglês, alinhamento e beleza de código, nomes de variáveis e métodos, falta de comentários e até quando não respeitavam a ordem alfabética 🤓

Após viveciar esse ritmo agitado durante quase um ano, consegui me desprender um pouco e fazer as coisas mais rápido, sem tanta lambeção. Eles também passaram a prestar mais atenção aos detalhes, produzindo um código melhor. Foi um ganha-ganha.

Vivendo em dois mundos

O mais louco era diariamente transitar entre dois mundos opostos: de manhã funcionário público estável na prefeitura e de tarde DevOps iniciante na ContaAzul.

Na minha experiência vivenciando isso, os dois métodos de trabalho funcionam, não tem melhor ou pior. Cada um encaixa melhor num tipo de empresa e de funcionário. A prefeitura é um órgão público com funcionários já mais velhos e precavidos, a ContaAzul é uma startup com uma molecada cheia de gás e sem freio.

Eu notei que o que mais me cansava nessa dupla jornada não eram as 10 horas diárias de trabalho (afinal, isso sempre foi rotina quando eu trabalhava em casa), mas sim o chaveamento intelectual de ter que entrar no “modo prefeitura” de manhã e depois do almoço mudar para o “modo startup”. Além da diferenças tecnológicas e de metodologia de trabalho, também tinha a diferença de sistemas operacionais (Windows e Linux) e de teclados (ABNT e US Internacional). Fim do dia eu já estava zuretão, confundindo tudo. A cabeça doía.

Alguns dias ainda tinha a terceira jornada onde eu precisava chavear para o “modo escritor”. Pensa num cara que já nem sabia mais o que estava fazendo :)

A saída

Por mais que eu estivesse feliz na ContaAzul, pelo trabalho e pelas amizades que lá fiz, depois de 11 meses de uma rotina de dois empregos, trabalhando 10 horas por dia, eu estava bem cansado.

Com a gravidez da Mog, minhas prioridades mudaram. A barriga ali crescendo, e eu senti que devia desacelerar, trabalhar menos e ir me preparando para iniciar o “modo pai” e curtir o filho que estava a caminho.

Pedi demissão na ContaAzul e voltei ao meu horário normal na prefeitura, de 6 horas. Fim de um ciclo.

Legado para a prefeitura

O órgão público em geral é visto como algo defasado tecnologicamente. Há vários motivos que tornam as mudanças mais difíceis e demoradas de acontecer nesses ambientes. Felizmente, na TI da Prefeitura de Joinville temos liberdade para estudar, propor e implementar novidades que melhorem o ambiente e os procedimentos. Essa é a minha atividade preferida!

Já usávamos o GitLab internamente como repositório de todos os softwares que desenvolvemos e damos manutenção, e praticávamos code review por meio de Merge Requests. Essa parte estava legal, mas o deploy ainda era feito manualmente pelo desenvolvedor com um git push prod e o rollback era... corram para as colinas! 😱

Com a experiência de trabalho na ContaAzul e o que aprendi lá, pude trazer para a prefeitura algumas novidades que mudaram nossa maneira de trabalhar. Uma foi o uso do Slack para comunicação interna e notificações, praticamente acabando com o envio de emails entre a equipe. Mas o mais legal foi implementar o uso de contêineres Docker e criar o processo de CI/CD para padronizar e automatizar o build, testes e deploy/rollback em todos os ambientes (homologação, treinamento, produção).

E a nuvem? Tá lá no céu, oras. Não sabe que em Joinville chove bastante? 🤡

Agradecimentos

Tenho muito a agradecer aos meus chefes e colegas de trabalho, que tornaram possível essa minha aventura nerd.

Aos meus chefes na prefeitura (coordenador Charles Furghestti, gerente Edson Lopes e diretor Filipe Schüür) pela compreensão, apoio e permissão de diminuir minha carga horária para que eu pudesse ter um segundo emprego. E olha que eu ainda estava em estágio probatório!

Ao meu chefe na ContaAzul (Matheus Rossato) que topou contratar um leigo em nuvem e me deu essa incrível oportunidade de aprender na prática tantas coisas legais.

Aos meus colegas de trabalho ninjas da equipe BlackOps da ContaAzul (Luiz Müller, Carlos Becker, Jonathan Beber) que tanto me ensinaram o tempo todo, com paciência, cordialidade e bom humor. Três caras muito fodas, nível técnico mundial, além de bons amigos.

E claro, um agradecimento super especial à minha amada Mog ❤️, que como sempre, dá seu apoio incondicional às minhas empreitadas.

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Serei papai \o/ 9 Nov 2016 3:00 AM (8 years ago)

No verão passado estava com minha sobrinha de 4 anos na piscina do clube, quando começou a chover. Começamos então a tomar pingos de chuva. Cada pingo tinha um sabor. Enquanto os dela eram morango, chocolate e outras comidas gostosas, os meus eram de sabores bizarros como: sola de sapato, tapete, rabo de elefante, volante de carro... Ela ria muito. ❤️

Eu adoro crianças. Gosto de brincar com elas, correr, agitar, provocar, instigar, fazer palhaçadas, ser o “tio maluco”. Também gosto de conversar com elas e perguntar coisas esdrúxulas, só pra ver a resposta criativa que só uma criança pode dar.

Já sou tio de três sobrinhos, de idades entre 3 e 5 anos. Fico muito feliz toda vez que os vejo e brinco com eles. É tão bom perceber eles crescendo, se desenvolvendo…

👶👶👶👶👶

No início de 2016 eu e a Mog tomamos aquela decisão que há tanto tempo eu fantasiava (já estou com 39 anos), e que tenho certeza que vai virar nossa vida de cabeça pra baixo: ter nosso próprio bebê.

Muitas perguntas, muitas dúvidas. Não adianta perguntar pro Google, não tem no Stack Overflow.

Sim, é agora. A decisão veio do ❤️

👶👶👶👶👶

Sou muito muito muito feliz por ter uma história bem normal pra contar, sem drama: a futura mamãe se preparou (médico, alimentação, vitaminas), planejamos a data do nascimento (fim do verão), e tivemos a sorte de conceber já no primeiro mês! \o/

Foi tão rápido que logo que a Mog começou a passar mal (enjoo e enxaqueca), cerca de duas semanas depois, demoramos para perceber que já era o bebê fazendo arte dentro da barriga da mamãe.

“Estou grávida.”

Que alegria ao ouvir isso. Era real. Deu certo. Foi. Já era. Done. Merged. Sem Control-Z. Grávidos! \o/

👶👶👶👶👶

Os primeiros quatro meses foram bem agitados para a mamãe Mog, que vomitou muito. Não era por causa de cheiro, nem de comida. Ela simplesmente vomitava. Todos os dias. Várias vezes por dia. Virou rotina.

Hoje ela comenta que o lado bom foi não ter engordado nesse período :)

👶👶👶👶👶

Estávamos bem tranquilos quanto ao sexo: menino ou menina, o que viesse seria muito bem-vind[ao]. Chamávamos o feto de “das Baby”, usando o gênero neutro do alemão para não sermos tendenciosos a nenhum lado.

Secretamente, porém, ambos desejávamos um menino. Confessamos depois.

No dia do exame para descobrir o sexo, lá estava “o baita” aparecendo na tela.

É um piazinho! \o/

👶👶👶👶👶

Mesmo depois de descoberto o sexo, ainda levamos mais dois meses pra escolher o nome. Somos assim, sem pressa, sem afobação. As coisas vêm no seu tempo. Também somos detalhistas, então tínhamos alguns requisitos para o nome:

Escrevemos em alguns post-it os nomes que mais gostávamos (todos dos anos 80) e deixamos ali, na cozinha, para ver todos os dias e ir se acostumando. Aos poucos fomos retirando os nomes que não gostávamos mais tanto assim, e no final o escolhido foi: Marcelo.

👶👶👶👶👶

A gravidez atualmente está no seu sexto mês, com a mamãe bem disposta e com a saúde 100%, carregando um bebezão saudável, grande e muito saltitante, que deve nascer no fim de fevereiro. ❤️

Nessa mesma época, eu e a Mog completaremos 10 anos juntos! O Marcelo será o nosso presente, que virá para celebrar nosso amor e nossa parceria de vida, aumentando a família e abrindo um novo capítulo nessa história que compartilhei alguns fragmentos com vocês: namoro, noivado, formatura, morando junto, casamento, entre outros.

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Tela Preta episódio 9: Contar palavras com egrep|sort|uniq 9 Aug 2016 4:00 AM (8 years ago)

★ Lista de episódios da série Tela Preta: 1 2 3 4 5 6 7 8 9

Para comemorar a marca de 1.000 assinantes no meu canal do YouTube 🎉, fiz mais um episódio da série Tela Preta 🎉

Tela Preta é a minha série de vídeos nerds gravados na linha de comando do Unix, demonstrando o “jeito shell script” de resolver problemas. Todos os vídeos contam com narração e legendas em português, estão em alta resolução (HD) e são reais: sem ensaio, sem cortes, sem edição posterior. Assine meu canal lá no YouTube para ser notificado(a) quando sair um vídeo novo.

Desta vez a tarefa é bem legal: contar quantas vezes cada palavra aparece em um texto, e no final, mostrar as 10 palavras mais frequentes. Assim:

$ cat hino-nacional.txt | comando-mágico
   7 Pátria
   7 Brasil
   6 amada
   5 teu
   4 mais
   4 Terra
   4 Salve
   3 que
   3 própria
   3 forte
$

Parece complicado, não? Mas você vai ver que a solução é simples e usa poucos comandos em uma única linha. E viva o Unix e suas ferramentas poderosas! 💪

Curta o vídeo:

A manha é usar o uniq -c que conta quantas vezes cada linha consecutiva aparece em um texto. Então o que eu preciso fazer, é modificar o meu texto original para que ele fique nesse formato de linhas consecutivas, ou seja:

Há várias maneiras de deixar uma palavra por linha: xargs -n 1, sed, awk, loop... Mas nesse vídeo fiz de um jeito diferente. Aproveitei a opção -o do egrep, que em vez de mostrar a linha toda no resultado, mostra somente o texto casado, um por linha em caso de múltiplos matches na mesma linha. Bingo! Aí foi só fazer uma expressão regular para casar todas as palavras do texto: \w+. O bom é que isso também pega as nossas palavras acentuadas do português.

Para agrupar as palavras iguais, basta um sort. Com o detalhe que usei a opção -f para que ele ignore a diferença entre letras maiúsculas e minúsculas. Isso faz com que “Pátria” e “pátria” sejam agrupadas, assim serão identificadas como a mesma palavra no uniq -c. Ah sim, também precisei passar a opção -i no uniq, para que ele também trate as maiúsculas e minúsculas da mesma forma.

Ali no meio, fiz um filtro para eliminar as palavras de uma e duas letras. Eu só queria contar palavras de três ou mais letras. Usei um grep ..., que exige que a linha tenha pelo menos três caracteres quaisquer, descartando as demais linhas. Lembra que o ponto é um metacaractere também? Viva as regexes!

No final do comando, basta formatar o resultado, ordenando numericamente e mostrando somente as 10 primeiras linhas. Essa parte é facinha, né? Um sort, um head e pronto.

Resumo dos comandos:

Saiba mais sobre os tópicos do vídeo:

Histórico da linha de comando:

wc -w /etc/passwd

man uniq | grep count
man uniq | grep -A 1 count
vi numeros
cat numeros | uniq -c
cat numeros | sort | uniq -c
cat numeros | sort   #| uniq -c
cat numeros | sort | uniq -c

pbpaste
pbpaste > hino.txt
cat hino.txt
echo >> hino.txt
cat hino.txt

cat hino.txt | uniq -c
cat hino.txt | sort | uniq -c
cat hino.txt | xargs -n 1
cat hino.txt | xargs -n 5
cat hino.txt | xargs -n 2
cat hino.txt | xargs -n 1

echo um, dois, tres.
echo um, dois, tres. | egrep -o '\w+'

cat hino.txt | egrep -o '\w+'
cat hino.txt | egrep -o '\w+' | sort | uniq -c
cat hino.txt | egrep -o '\w+' | sort | uniq -c | sort -n
cat hino.txt | egrep -o '\w+' | sort | uniq -c | sort -n -r
cat hino.txt | egrep -o '\w+' | sort | uniq -c | sort -n -r | head
cat hino.txt | egrep -o '\w+' | sort | uniq -c | sort -n -r | head -n 15

cat hino.txt | egrep -o '\w+' | grep ..........   #| sort | uniq -c | sort -n -r | head -n 15
cat hino.txt | egrep -o '\w+' | grep .......   #| sort | uniq -c | sort -n -r | head -n 15
cat hino.txt | egrep -o '\w+' | grep ... | sort | uniq -c | sort -n -r | head -n 15

cat hino.txt | egrep -o '\w+' | grep ... | sort | uniq -c | sort -n -r | grep tria
sort --help | grep case
man uniq | grep -- -i
cat hino.txt | egrep -o '\w+' | grep ... | sort -f | uniq -c -i | sort -n -r | grep tria
cat hino.txt | egrep -o '\w+' | grep ... | sort -f | uniq -c -i | sort -n -r | head

conta_palavras(){ egrep -o '\w+' | grep ... | sort -f | uniq -c -i | sort -n -r | head; }

cat hino.txt | conta_palavras
cat /etc/passwd | conta_palavras

Ah, usuários das Funções ZZ não precisam lembrar de todos esses comandos e podem usar diretamente a zzcontapalavras ;)

cat hino.txt | zzcontapalavras -i -n 10

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Palestra “Shell Script Moderno” no FISL17 15 Jul 2016 4:00 AM (8 years ago)

A palestra

Essa foi uma palestra nova, que fiz especialmente para o FISL. A idea foi refletir sobre o lugar do shell script hoje, em 2016, com a tal da nuvem pairando sobre nós.

Programar em shell deixou de ser algo exclusivo do servidor e passou também para dentro das ferramentas moderninhas como Docker, Travis CI, Puppet, Jenkins e Git. Às vezes, sem saber, lá está você programando em shell dentro de um arquivo YAML ou dentro de um Dockerfile. Tem também as ferramentas novas como o awscli, para gerenciar servidores pela linha de comando.

Eu tinha pouco tempo para falar, somente 50 minutos, incluídas aí as perguntas no final. Muito pouco! Quando estou palestrando, disparo a falar e nem vejo o tempo passar. Pra piorar, deu trabalho pra conseguir colocar meus slides no computador do evento e perdi minutos preciosos com isso.

Eita treco complicado esse tal de computador, não?

Como sempre, foi tudo no improviso. Eu não curto ensaiar antes nem fazer roteiros. Gosto de deixar a palestra rolar solta, sem script. Eu só tinha feito os slides. O que ia falar? Sei lá! 😁

Pelo que me lembro...

Quer assistir também? Felizmente essa palestra foi gravada (boa FISL!), então você pode assisti-la e ver os slides ao mesmo tempo:

Se não estiver aparecendo corretamente, tente os links diretos: slides, vídeo.

Os autógrafos

Logo após a palestra, rolou uma sessão de autógrafos no meio da feira. A lojinha do FISL, além das camisetas, canecas, mochilas e outros apetrechos, estava vendendo meus livros também.

O evento

A última vez que eu tinha ido ao FISL foi em 2008, para o lançamento do meu livro de Shell Script. Faz tempo…

Como este foi um ano de crise no país, os organizadores estavam com menos verba e fizeram um evento reduzido, numa área menor do pavilhão. Eu prefiro assim, menor, mais aconchegante.

Só não estava mais aconchegante porque o frio não deu trégua. Deu mínima de 5°C… ☃️

Também senti o evento menos político. Dessa vez foi um evento dos nerds mesmo. As palestras e workshops eram em sua maioria técnicos e os estandes na feira eram de empresas e comunidades do software livre. Meio que uma volta às origens do FISL, dizia-se pelos corredores.

Gostei que havia áreas abertas para workshops, ali no meio da feira, que o público em geral podia assistir, mesmo quem não tinha pago a inscrição no evento.

Além de software livre em si, também tinha áreas diferentes, como robótica, impressão 3D, e um espaço para crianças, com aqueles notebooks verdes OLPC.

Encontrei por lá vários amigos que há anos não via. É muito bom rever o pessoal. Fora a feira e palestras, pra mim esse reencontro da “turminha” das antigas é um grande atrativo do evento.

Gostei bastante do FISL17. Um ambiente agradável, com pessoas legais, boa estrutura e muita informação nova pra quem quer aprender. 👍

Ida e volta de avião

Eu serei repetitivo se eu disser mais uma vez que não gosto de viajar de avião. Pois bem, eu não gosto de viajar de avião. É tanta demora e tanto tempo de vida perdido em esperas, filas, deslocamento de/para o aeroporto e tudo mais, que a magia do “você está voando a 900 km/h” é como uma gota d'água no deserto.

Pior ainda quando o avião vai pro lado errado.

Joinville não é capital (apesar de ser a maior cidade do estado de Santa Catarina), e não tem voo direto pra Porto Alegre. Tem que dar um pulinho lá em São Paulo antes de descer novamente pro sul.

Agradecimentos

Obrigado à organização do FISL e à Novatec Editora pela oportunidade e pelo patrocínio de minha viagem e estadia em Porto Alegre.

Obrigado à Prefeitura de Joinville e à ContaAzul por permitirem a minha falta a um dia de trabalho.

Obrigado à minha querida esposa Mog pelo apoio de sempre e pelo alvará de soltura 😄

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Raridade: teve ensaio da banda 18 Jun 2016 4:00 AM (8 years ago)

Sábado retrasado teve ensaio da banda, Correria HC. Esse é um evento raro, que acontece uma vez a cada N anos, quando um alinhamento cósmico faz com que todos os integrandes estejam na mesma cidade durante algumas horas. Nos últimos 10 anos, só tivemos três ensaios: um em 2010, outro em 2014 e esse agora em 2016.

Curiosidade: Na primeira versão desse texto, o parágrafo anterior começava com “sábado passado”, pois eu comecei a escrevê-lo poucos dias após o ensaio. Mas não consegui terminar o texto e os dias foram passando, passando… É a vida.

Eu e a Mog fomos pra Curitiba curtir a festa de aniversário dos nossos sobrinhos (não são gêmeos, nasceram em dias próximos em anos diferentes, aí é festa compartilhada). Como os outros três integrantes da banda também estavam na cidade naquele dia, marcamos 2 horas de ensaio no estúdio do SEKO.

Nunca tinha ido lá, mas gostei e recomendo. A estrutura é muito boa, com várias salas, estacionamento e equipamentos top. E mais, tudo estava limpo, arrumado e sem cheiro de jaula. Milagre! 😄

Reencontrando os amigos

Fejão, Aurelio, Nissin, Daniel

Eu não via os caras desde nosso último ensaio em 2014. Como é bom rever os amigos, dar aquele abraço apertado e ter aquela sensação que nem passou tanto tempo assim. Continuamos com uma ligação forte independentemente da distância. Somos amigos há mais de 20 anos. O Nissin (guitarra) conheço desde a adolescência e o Fejão (baixo, vocal) e o Daniel (guitarra) desde o CEFET-PR (hoje UTFPR).

Por falar em Nissin, ele chegou 30 minutos atrasado no ensaio, mantendo sua tradição milenar. Certas coisas nunca mudam, né? 🙄

Fazendo barulho

Acho incrível como ainda conseguimos lembrar das músicas. Algumas partes precisa um refresco rápido na memória, mas em geral é só começar a música que ela vai direto até o final. E pensar que algumas de nossas músicas foram feitas em 1995!

Lembrar é uma coisa, mas e conseguir tocar? Afinal, já não somos mais aqueles jovens de 18 anos que criaram aquelas músicas e conseguiam tocá-las na velocidade acelerada do hardcore.

Antes do ensaio, duvidosos, até combinamos de tocar mais devagar e tal. Mas que nada! A primeira música já saiu “no gás” e dali pra frente foi aquela correria de sempre, pisando fundo ladeira abaixo. Os quase-quarentões ainda rockam! 🤘

Dica: Ligue a legenda (CC) para ver a letra da música.

Bolhas, calos e pratos voadores

@oreio teve ensaio da banda, depois de 2 anos parados. Muita energia, muita porrada na batera (e bolhas na mão) 😁 pic.twitter.com/Fj67P8b0ZZ

— Aurelio Jargas (@oreio) June 5, 2016

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Palestra “O poder da linha de comando” no SC Dev Summit 2016 21 May 2016 4:00 AM (8 years ago)

Essa foi uma palestra nova, que fiz especialmente para o evento.

O evento aconteceu em dois dias, sendo o primeiro com palestras temáticas de back-end e segundo para front-end. Eu me identifico mais com o back-end, mas como eu só tinha disponibilidade no sábado, que era o dia do front-end, então aceitei o desafio de fazer uma palestra para um público diferente.

Pensei comigo, esses caras hoje precisam ir para a linha de comando de vez em quando pra instalar e rodar as ferramentas que manipulam os arquivos CSS e HTML: pré-processadores, minificadores, e tudo mais. Já “molharam o pé” na tela preta, então eu poderia fazer uma demonstração do poder das ferramentas do Unix, estilo os vídeos que faço na série Tela Preta, para despertar a curiosidade de eles explorarem e ficarem mais tempo no prompt.

Esta foi a chamada da palestra:

Linha de comando é lugar para dev frontend? Com certeza! Vamos desvendar juntos os mistérios da tela preta. São ideias simples, numa interface textual, que trazem um enorme poder ao seu arsenal de ferramentas.

Estudando as ferramentas de front-end

Apesar de eu já ter criado vários sites “na mão”, e saber bem HTML e CSS, não estou por dentro das ferramentas de front que foram criadas nos últimos anos, que agilizam o processo.

Meu primeiro passo, antes mesmo de definir o escopo e roteiro da palestra, foi saber mais sobre o público: estudar sobre o que é ser front-end hoje, e quais ferramentas de linha de comando eles costumam utilizar.

Dos vários artigos que li, estes foram os mais úteis:

Foi bom ter feito isso, assim eu pude entender melhor a rotina deles, conheci as ferramentas principais e pude fazer exemplos mais próximos de sua realidade em vez de exemplos genéricos.

Os slides

Sei que a galera do front é mais ligada no visual do que os back-ends, e imaginei que os slides dos demais palestrantes seriam bem chamativos, com muitas imagens e vídeos (acertei 😁). Porém, segui o outro caminho e fiz slides espartanos, somente texto e fundo preto, pro pessoal já entrar no clima da linha de comando.

O assunto linha de comando é vasto e eu poderia ficar um dia todo falando só sobre o básico. Então decidi focar em pontos-chave que julguei serem importantes de saber, acima de tudo:

Apesar da simplicidade dos slides e do escopo reduzido, ainda assim fazê-los me tomou mais de 10 horas de trabalho. É um processo constante de lapidação e melhoria até chegar no resultado final. Uso o Google Slides, acho excelente.

A palestra

Felizmente, o evento foi aqui na minha cidade, Joinville. Não precisei me estressar com aeroportos, voos, hotéis e toda a burocracia normalmente envolvida. Que alívio.

Eu e a Mog almoçamos e fomos pro evento, simples assim :)

O evento foi na Univille, universidade particular que tem uma estrutura excelente. Salão grande, equipamento de som de alta qualidade, dois telões, show de bola.

Tinha cerca de 150 pessoas durante minha palestra.

O início, pra mim, é sempre a pior parte. Fora aquele nervosismozinho besta que sempre dá nos primeiros momentos, eu já quero ir logo pro assunto, que é o que interessa. Assim, a parte de me apresentar, falar um pouco sobre o que faço, sempre sai ruim e esquisita.

A Mog vive me falando que eu devia praticar antes, pensar sobre o que vou dizer na hora de me apresentar. Que eu devia falar um pouco do site, dos livros, do meu trabalho, da minha história. Fazer alguma piadinha pra quebrar o gelo. Eu concordo com ela. Eu tento. Mas na hora não sai. Não fico confortável falando de mim, parece autopromoção, sei lá. Bobeira minha.

Fora a apresentação estranha, dali pra frente tudo fluiu bem. Consegui trazer bastante informações e dicas enquanto passava os slides. O pessoal estava prestando atenção, então fiquei tranquilo. Só não teve muita piadinha, acho que estou perdendo a veia humorística (ou só ficando véio chato mesmo).

Eu nunca faço scripts ou ensaios para as palestras, é sempre de improviso. Tenho uma ideia geral, uma lista de tópicos que quero abordar e é isso. Os slides servem de guia e falo o que vem na cabeça.

A demonstração ao vivo

Terminados os slides, era a hora de demonstrar ali ao vivo como é usar a linha de comando para resolver problemas, exatamente como faço nos vídeos do Tela Preta.

Abri um terminal em tela cheia, aumentei bem a fonte, coloquei um prompt ($PS1) bem amigável e comecei a digitar comandos e fazer a locução esportiva, descrevendo o que eu estava fazendo :)

Aqui está o histórico completo dos comandos executados. Vou destacar a seguir algumas partes dele.

Ajustando prompt:

echo $PS1
PS1='$ '
PS1='--------------------------------------------------------------------------\n$ '

Mostrando como combinar comandos para ir filtrando um texto:

cat hino.txt
cat hino.txt | head -n 3
cat hino.txt | head -n 3 | tail -n 1
cat hino.txt | head -n 3 | tail -n 1 | cut -d , -f 1
cat hino.txt | head -n 3 | tail -n 1 | cut -d , -f 1 | tr a-z A-z

Trocar a extensão de todos os arquivo de .css para .sass (veja um vídeo similar):

find . -name "*.css"
find . -name "*.css" | sed 's/.*/& &/'
find . -name "*.css" | sed 's/.*/mv & &/'
find . -name "*.css" | sed 's/.*/mv & &/' | sed 's/css$/sass/'
find . -name "*.css" | sed 's/.*/git mv & &/' | sed 's/css$/sass/'
find . -name "*.css" | sed 's/.*/git mv & &/' | sed 's/css$/sass/' | sh

Contar o número de vezes que cada palavra aparece em um texto:

cat LICENSE | egrep '\w+'
cat LICENSE | egrep -o '\w+'
cat LICENSE | egrep -o '\w+' | tr A-Z a-z
cat LICENSE | egrep -o '\w+' | tr A-Z a-z | sort
cat LICENSE | egrep -o '\w+' | tr A-Z a-z | sort | uniq -c
cat LICENSE | egrep -o '\w+' | tr A-Z a-z | sort | uniq -c | sort
cat LICENSE | egrep -o '\w+' | tr A-Z a-z | sort | uniq -c | sort -n
cat LICENSE | egrep -o '\w+' | tr A-Z a-z | sort | uniq -c | sort -n -r

Usar aliases para criar comandos, e utilizá-los:

alias numeros="egrep -o '\d+'"
alias conta="egrep -o '\w+' | tr A-Z a-z | sort | uniq -c | sort -n -r | head -n 5"
cat LICENSE | conta
cat LICENSE | conta | numeros
cat LICENSE | conta | numeros | pbcopy

Pra quem usa Mac, o pbcopy copia a saída do comando anterior para a Área de Transferência. Aí é só colar (Command-V) em outra janela, ou usar o pbpaste em outro terminal.

O sorteio dos livros, usando shell

No final da palestra, sorteei dois livros meus, o Shell Script Profissional que eu levei um exemplar que eu tinha aqui em casa, e o Expressões Regulares, que a Novatec Editora enviou de cortesia para os organizadores do evento.

Reaproveitei uma ideia que tive lá em 2004, numa palestra de 3h 😱 que dei no II Encontro Nacional LinuxChix-BR: usar a shell para gerar um número aleatório e ganha o sorteio quem tiver aquele número impresso em algum documento, cartão, papel, o que for. Foi bem divertido!

echo $((RANDOM % 99999))   # 5 dígitos
echo $((RANDOM % 9999))    # 4 dígitos
echo $((RANDOM % 999))     # 3 dígitos

Essa é uma foto lá de 2004:

E agora repetido doze anos depois, fazendo o pessoal vasculhar suas carteiras:

Doze. Anos. 😮

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Tenho três empregos 2 Apr 2016 4:00 AM (9 years ago)

Estou numa rotina de trabalho tão insana que tenho que registrar.

Acordo às 05:45 e vou dormir à meia-noite. De manhã trabalho 4h na Prefeitura de Joinville, à tarde trabalho 6h na startup ContaAzul e à noite e intervalos, estou escrevendo um livro novo. Isso dá 13 horas de trabalho por dia.

O dia começa cedo às 05:45. Estou acordando sozinho já, antes do despertador. Coisa de véio, tá ligado?

Ali pelas 6 da manhã vou pra minha "máquina de escrever" (um iPad com teclado Bluetooth) e consigo trabalhar cerca de meia hora no livro novo. Não é muito, nem dá tempo de se concentrar de verdade, mas serve para reler e melhorar o texto do dia anterior, com a mente limpa. Reescrevo os trechos que não ficaram muito claros, e dou uma lapidada geral, fazendo melhorias pontuais aqui e ali.

5 da manhã, estou aqui escrevendo um livro novo, num tablet. É muita modernidade 😊 pic.twitter.com/SH8XzXltXV

— Aurelio Jargas (@oreio) March 24, 2016

Às 06:45 pego minha bicicleta e vou para a Prefeitura de Joinville. Sou funcionário Público há quase 3 anos, e lá trabalho como programador das 07:00 às 11:00. Atualmente desenvolvo em WordPress (PHP), construindo o site novo da prefeitura, que será fortemente inspirado no sensacional GOV.UK. Está sendo bem empolgante construir algo novo e moderno por lá.

A jornada normal na prefeitura é de 6 horas, mas eu fiz o requerimento para diminuir para 4 horas (com redução de salário, é claro) para poder ter o segundo emprego à tarde.

Volto de bicicleta, paro para almoçar no restaurante e chego em casa perto do meio-dia. Os deslocamentos e almoço são sempre ao som de podcasts, preenchendo a mente com novos conhecimentos nesses momentos solitários e ociosos.

Já em casa, dedico mais meia hora ao livro novo. Consigo fazer uns três ou quatro parágrafos novos, quem sabe um exemplo de código também. De noite acabo reescrevendo quase tudo, pois em meia hora é difícil sair algo de qualidade. Mas vale a pena, pois parte do processo de criação é fazer várias versões ruins até que se chega na boa.

Você, estimado leitor, só vê o resultado final, tanto nos livros quanto aqui no blog. Mas a maior parte do texto que escrevi foi jogada fora. Cada parágrafo teve várias versões até chegar no ponto certo. As ideias vão amadurecendo conforme se escreve e reescreve. Cada texto aqui do blog leva no mínimo 3 horas para ficar pronto.

Às 12:45 saio de casa e vou de carro para a ContaAzul, uma startup moderninha aqui de Joinville que comecei a trabalhar há 5 meses. Minha jornada lá é das 13:00 às 19:00 e estou no time de DevOps. Enquanto na prefeitura eu trabalho com tecnologias que domino, na ContaAzul é um admirável mundo novo “na nuvem”, com Amazon, CI, CD, Docker, Puppet, Jenkins, Travis, e tantas outras ferramentas e conceitos que eu nunca tinha usado. Bem desafiador e empolgante!

Volto pra casa e em meio a outros compromissos noturnos inadiáveis, como fazer minhas aulas de alemão no Duolingo e curtir um Netflix com a Mog, consigo encaixar cerca de duas horas de trabalho no livro. É neste momento que consigo me concentrar de verdade e escrever bastante. A escrita flui bem e aos poucos o livro vai ganhando corpo.

Na hora de ir dormir, estou bem cansado, física e mentalmente. Percebo que o deslocamento (seja de bicicleta, ônibus ou carro) cansa meu corpo, e o chaveamento de contextos (WordPress, livro, nuvem) e sistemas operacionais (Windows, Linux, iOS) cansa minha mente. Sei que isso não é nada saudável, porém essa rotina maluca é um esforço temporário, só até terminar o livro novo.

Minha esposa Mog é uma super parceira e está, como sempre, me apoiando, incentivando e cuidando bem de mim. Ela também tem seu emprego e nos intervalos resolve todos os pepinos da vida, que eu não consigo me envolver. O livro de shell não teria saído sem o apoio dela, e dessa vez será igual. Muito obrigado meu amor! ❤️

O tema do livro? Prefiro ainda não falar por enquanto. No passado eu já fiz promessas, parei um livro na metade, então dessa vez só vou divulgar quando tiver certeza que conseguirei chegar até o fim. Mas é claro que é um livro nerd, né? :)

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Aprenda expressões regulares em um dia 2 Mar 2016 3:00 AM (9 years ago)

Expressões regulares é um assunto que dá medo em muita gente. O cara olha aquela mistura aleatória de símbolos, não entende nada e sai xingando quem inventou aquela porcaria :)

Mas depois que você “vê a luz” e aprende a ler e criar suas próprias expressões, um novo mundo de possibilidades se abre e você passa a querer usar expressões regulares em tudo! Do ódio ao vício, o que era trevas vira ferramenta indispensável.

Eu uso expressões regulares todos os dias

Dentro do editor de textos para fazer edições mais avançadas, dentro dos códigos do programa que estou desenvolvendo para casar/substituir textos, na linha de comando do Unix nos grep e sed da vida, no banco de dados para aquela query mais poderosa, na configuração do Apache/Nginx para criar as regras de redirecionamento, e por aí vai...

É muito bom saber usar regex e ter tantas possibilidades diferentes de lugares onde posso aplicar este conhecimento. E melhor, diferente da maioria dos assuntos em informática, este é um que não fica obsoleto. Você aprende uma vez e usa por anos a fio, não há o que se atualizar ou aprender a versão nova. Regex é regex e pronto.

Eu acho expressões regulares tão útil e tão poderoso, me facilita tanto a vida, que acho lastimável que esse conhecimento não seja universal na área nerd. Todos deveriam saber pelo menos o básico, e aplicar no seu dia a dia para economizar tempo. Tento fazer minha parte para ajudar a difundí-las: criei um site, escrevi um livro, fiz vídeos, e dou palestras e cursos.

Não é tão difícil quanto parece

Apesar de parecer ser muito complexo, o assunto em si não é extenso e pode ser explicado e demonstrado em algumas horas. Os conceitos são abstratos, mas junto com exemplos você vai entendendo pra que serve cada um daqueles símbolos (os metacaracteres) e como “montá-los” numa expressão para resolver o seu problema.

Não é decorar, numa questão de horas você realmente entende e aprende como funciona, e sai criando suas próprias expressões do zero. Olha só que massa, num mesmo dia você acorda sem saber nada de regex e no fim do dia estará criando expressões.

Como posso afirmar isso? Porque vi acontecendo na minha frente, várias vezes, nos cursos que ministrei.

Curso de expressões regulares

O primeiro curso de regex que dei foi em 2003 (faz tempo!), e o mais recente foi agora, semana passada. Em todos os cursos, sem exceção, a turma conseguiu aprender os conceitos, o significado dos símbolos e fazer os exercícios sozinhos, criando suas expressões, testando melhorias, discutindo maneiras de resolver os problemas propostos.

Para ter algum tipo de métrica, no início do curso eu peço para cada aluno dar uma nota de zero a dez para o que ele/ela julga ser o seu conhecimento atual em expressões regulares. No fim do curso, mesma pergunta. Meu objetivo é que todos saiam melhores do que entraram, e felizmente isso sempre aconteceu.

Em geral, no final do curso, todos já estão tão imersos no assunto, que surgem discussões abstratas sobre eficiência ou qual a melhor maneira de fazer uma expressão complexa, como a do IP ou a da data.

Qualquer um que entre na sala nesse momento, ficará chocado com o “papo de louco” :)

Pra mim, é muito gratificante perceber essa enorme evolução em tão pouco tempo. Ter essa confirmação de que consegui passar esse conhecimento adiante, e que agora mais pessoas poderão usufruir dos benefícios das expressões, e quem sabe no futuro também passar isso adiante.

Quer aprender também? Veja as datas dos próximos cursos.

Convido a quem já foi aluno deixar aqui seu comentário. Gostou do curso? Aprendeu de verdade? Está usando regex no seu dia a dia? Tem alguma dica pra quem quer aprender também?

Quem não fez o curso, mas também já viu a luz dos metacaracteres, é muito bem-vind[oa] para deixar seu testemunho sobre como sua vida mudou :)

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Sed salva o dia novamente 9 Feb 2016 3:00 AM (9 years ago)

Já perdi a conta de quantas vezes o sed me salvou.

Ele é meu comando preferido do Unix. É simples, direto, minimalista, poderoso, enigmático. E claro, faz uso intensivo de expressões regulares, que é minha outra paixão.

Pórem, esta aparente simplicidade esconde um programa muito poderoso, que pode fazer as mais complicadas edições em textos, de maneira automatizada. Precisou substituir, apagar, inserir, juntar, quebrar, inverter, duplicar um texto? Sed nele!

Também dá pra fazer jogos com o sed, se você for desocupado o suficiente ;)

Neste sábado, precisei do sed mais uma vez.

A 5ª edição do livro Expressões Regulares será lançada daqui alguns dias, e a grande novidade desta vez é que além da versão impressa, também terá a versão digital (ebook). Finalmente! 🎉

Porém, quando fui testar o ebook que a editora gerou, todos os códigos-fonte listados no livro apareceram sem alinhamento (indent), com todas as linhas começando no canto esquerdo :(

Os fontes originais do livro estão no InDesign, que é o programa que a editora usa para a diagramação, e foram exportados para o formato EPUB para gerar o ebook. Felizmente, o formato EPUB é editável, pois nada mais é do que um arquivo ZIP com arquivos XHTML e CSS dentro, então o descompactei e fui fuçá-lo.

Aqui está o trecho XHTML que gera o código da foto anterior:

<p class="_CodigoFontePrimLin1"># Cada domínio está numa subpasta em /sites</p>
<p class="_CodigoFonte1">server {</p>
<p class="_CodigoFonte1">    server_name ~ "^(www\.)?(?&lt;dominio&gt;.+)$";
</p>
<p class="_CodigoFonte1">    location / {</p>
<p class="_CodigoFonte1">        root /sites/$dominio;</p>
<p class="_CodigoFonte1">    }</p>
<p class="_CodigoFonte1">}</p>

Como deveria ser:

<pre>
# Cada domínio está numa subpasta em /sites
server {
    server_name ~ "^(www\.)?(?&lt;dominio&gt;.+)$";
    location / {
        root /sites/$dominio;
    }
}
</pre>

Por algum motivo sobrenatural, cada linha do código-fonte virou um parágrafo diferente (tag <p>…</p>), em vez de tudo ser um único bloco com a tag <pre>…</pre>.

Se fosse poucos casos eu até arrumaria na mão mesmo, mas contei aqui (na verdade, o grep | wc -l contou) e são 340 blocos de código a serem arrumados no total. É, vai ter que rolar um sed macho...

Vamos analisar o formato geral dos blocos de código:

qualquer coisa antes
<p class="_CodigoFontePrimLin1">primeira linha do bloco</p>
<p class="_CodigoFonte1">segunda linha do bloco</p>
<p class="_CodigoFonte1">terceira linha do bloco</p>
...
<p class="_CodigoFonte1">última linha do bloco</p>
qualquer coisa depois

O maior problema aqui é identificar o início e o fim dos blocos. O início tudo bem, está identificado pela classe _CodigoFontePrimLin1. Já o final, não possui uma marcação especial. Eu só sei que terminou o bloco de código quando aparece uma linha que não tem a classe _CodigoFonte1.

Se tivesse uma marcação clara de início e fim, seria bem fácil. O sed já suporta nativamente esta notação, basta colocar os padrões entre barras, antes dos comandos, assim:

sed '/início/,/fim/ { comandos; }'

Como não posso usar isso, pois não tenho um padrão claro de término do bloco, terei que usar outra tática: identificar o início do bloco, entrar num loop que vai lendo as próximas linhas e só sair do loop quando encontrar uma linha que não faça parte do bloco. Esse é o esqueleto do comando:

sed '
  /início/ {

    # insere a tag <pre> no início

    # inicia o loop
      # remove as tags <p> e </p>
      # lê a próxima linha
      # continua no loop se for uma linha do bloco

    # insere a tag </pre> no final
  }
'

O primeiro passo é fazer o padrão que identifica o ínicio dos blocos. Já vimos que a classe _CodigoFontePrimLin1 foi usada no início deles. Porém, vai que algum bloco está marcado errado e não usou essa classe? Bem, eu sei com certeza que todas as linhas de código possuem uma classe cujo nome começa com _CodigoFonte, então vou preferir usar esse padrão mais abrangente para não deixar de fora nenhum bloco.

/_CodigoFonte/ {

  # insere a tag <pre> no início

  # inicia o loop
    # remove as tags <p> e </p>
    # lê a próxima linha
    # continua no loop se for uma linha do bloco

  # insere a tag </pre> no final
}

Agora vamos para o loop. Além de montar a estrutura do loop, o que eu tenho que fazer em todas as linhas do bloco, é apagar as tags <p> e </p> feiosas. Farei isso em dois passos, com dois s/// para ficar mais simples a expressão regular.

/_CodigoFonte/ {

  # insere a tag <pre> no início

  # inicia o loop
  :meuloop

    # remove as tags <p> e </p>
    s/^[[:blank:]]*<p [^>]*>//
    s/[[:blank:]]*<\/p>$//

    # lê a próxima linha
    n

    # continua no loop se for uma linha do bloco
    /_CodigoFonte/ b meuloop

  # insere a tag </pre> no final
}

O loop em sed é feito marcando um ponto qualquer no script com o comando : seguido de um nome (no exemplo usei :meuloop) e depois você usa o comando b (de Branch), para pular para o ponto marcado (sim, é um GOTO). Só perceba que meu comando b não é incondicional, ele só é aplicado se a linha atual tiver o padrão _CodigoFonte. Esse é o jeitão do sed de fazer um if.

Então beleza, nesse ponto meu script já identifica os blocos de código-fonte e apaga todas as tags <p> dentro deles. As outras linhas do livro permanecem intactas. O que está faltando agora é inserir a tag <pre> no início e a </pre> no fim do bloco. Isso é fácil com o comando i (de Insert). A sintaxe dele é estranha, exigindo uma quebra de linha escapada, mas funciona.

/_CodigoFonte/ {

  # insere a tag <pre> no início
  i \
<pre>

  # inicia o loop
  :meuloop

    # remove as tags <p> e </p>
    s/^[[:blank:]]*<p [^>]*>//
    s/[[:blank:]]*<\/p>$//

    # lê a próxima linha
    n

    # continua no loop se for uma linha do bloco
    /_CodigoFonte/ b meuloop

  # insere a tag </pre> no final
  i \
</pre>

}

E pronto!

O sed é extremamente rápido. Num piscar de olhos ele vai editar o livro todo, arrumando todos os blocos. Aí é só compactar tudo de volta e o arquivo EPUB estará do jeito que Jesus gosta: com todos os códigos-fonte bem alinhados :)

Claro que a “vida real” é mais dura do que isso, e tive que fazer mais alguns sed para lidar com falsos-positivos, trocar tabs por espaços, remover tags vazias de índice remissivo e fazer ajustes no arquivo CSS.

Veja como ficou o script completo:

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Fiz a prova POSCOMP 3 Oct 2015 4:00 AM (9 years ago)

Ando pensando em fazer um mestrado em computação, para aprender sobre assuntos mais densos e quem sabe no futuro dar aulas em alguma faculdade/universidade. Só tem um pequenino problema: minha formação acadêmica é risível.

Fiz uns 8 meses de Bacharelado em Informática na UFPR, lá por 1997. As aulas eram difíceis. Reprovei em Cálculo I, e ao fazer de novo essa matéria, achando que dessa vez iria conseguir, olha o que acontece: tirei 0,5 na primeira prova. O quê? Meio?!?? Acertei somente o meu nome completo, decerto… Sempre tirei notas boas no 1º grau e no curso de Eletrônica no CEFET-PR (que hoje é UTF-PR), então aquele 0,5 foi um atestado definitivo de que aquele curso não era pra mim.

Mudei para uma faculdade mais fácil, curta (somente 3 anos) e focada no mercado de trabalho, a ESEEI (que hoje não existe mais) no curso de Tecnólogo em Processamento de Dados. Ali era o outro extremo: tudo era muito superficial e fácil, com uma turma noturna desinteressada e cansada de já ter trabalhado o dia todo. Vi um pouco de Java, programação orientada a objetos, SQL e só. Currículo básico para conseguir emprego de programador-peão. Nada de teoria, matemática e fundamentos da computacão.

Resultado: me formei sem nunca ter estudado temas como algoritmos, grafos, compiladores, cálculos com vetores e tantos outros assuntos interessantes que eu teria visto se tivesse continuado na UFPR. Hoje eu me arrependo dessa escolha, mas na época fazia sentido, pois eu já trabalhava com Linux na Conectiva e via a faculdade como um empecilho, uma perda de tempo.

Pula para 2015, aqui estou eu com quase 20 anos de experiência de trabalho nas áreas de programação, administração de sistemas e documentação técnica, tudo aprendido na prática, porém com lacunas de conhecimento e sem a base formal. Sinto falta de saber a teoria por trás daquilo que aplico diariamente, conhecer os algoritmos clássicos e entender bem o funcionamento dos bits e bytes.

Olhando assim, em retrospectiva, fica fácil entender porque eu sempre me interessei por linguagens de alto nível, como sed, Bash, PHP, Python, JavaScript, Ruby, que não exigem o conhecimento de bits e bytes como as linguagens de baixo nível.

Hoje tenho algumas alternativas para completar as lacunas, há diversos livros e cursos online, em inglês e português. Com a experiência já acumulada, hoje posso aprender com mais facilidade do que 20 anos atrás. Não me vejo fazendo outra graduação, pois demora demais e exige muito tempo livre. Um mestrado poderia ser o guia (e a grande pressão) para eu finalmente resolver este bug na minha formação.

Aí entra o POSCOMP na história.

POSCOMP é um exame organizado anualmente pela Sociedade Brasileira de Computação com o objetivo de testar os conhecimentos em computação dos candidatos a vagas em programas de pós-graduação na área. As instituições que oferecem as vagas utilizam o resultado do exame nas mais diversas maneiras em seus processos seletivos. — Wikipédia

O POSCOMP é uma forma de mostrar que o martírio da Ciência da Computação não foi nada perto da frustração de ter que chutar 80% das questões em uma única prova. — Desciclopédia

Legal, posso fazer essa prova pra atestar o quão ruim é minha formação acadêmica, e na remota possibilidade de eu ir bem, talvez conseguir alguma vaga de mestrado aqui perto, em Joinville mesmo ou Curitiba. Vale a pena tentar :)

Seguindo a tradição brasileira, deixei tudo para a última hora. Somente no dia da prova (27/09/2015) é que fui me preparar: instalei um aplicativo para Android que trazia algumas questões de provas passadas e dei uma olhada geral.

A prova foi aqui em Joinville mesmo, na UDESC, tinha cerca de 30 pessoas (somente 2 mulheres). Todos eram bem jovens, eu era o tiozão da turma :) Foram 4 horas de prova para responder 70 questões de computação nas áreas de matemática, fundamentos e tecnologia. Fui o último a terminar, usei todo o tempo disponível.

Fiz a prova de trás para frente, pois as últimas perguntas eram as que eu sabia, que envolviam conhecimentos práticos em programação, SQL e tecnologia em geral. Foi um começo animador! Mas conforme fui voltando as folhas, foi só ladeira abaixo… O desespero mesmo foram as primeiras perguntas, que eram de matemática.

Gostei de fazer as perguntas de programação, onde foi necessário “executar” o código na cabeça para chegar ao resultado. A de SQL foi tranquila para quem usa no dia a dia. Algumas consegui resolver de maneira intuitiva, com base nos dados e respostas. Mas olha que sacanagem, não caiu nenhuma pergunta sobre expressões regulares! :)

Tive dificuldade com o jargão acadêmico. Às vezes eu sabia como resolver o problema, mas a dificuldade era interpretar os termos e notações. Nas questões de lógica por exemplo, usaram ∧ ∨ ¬ para representar AND, OR e NOT. Nas questões de conjuntos, eu nem lembrava mais o que era cada símbolo. Alguns termos eu conhecia somente em inglês e o similar em português me confundiu.

Pelo gabarito preliminar, acertei 40 das 70 questões (57%). Não foi um bom aproveitamento, mas fiquei feliz por ter acertado mais da metade, pois saí da prova achando que tinha ido muito mal. O resultado oficial sai em novembro, mostrando como fiquei em relação à média geral. Me disseram que é isso o que importa, então aguardemos…

Gostei da experiência de fazer a prova. Foi bom testar os conhecimentos, relembrar conceitos e comprovar como sou fraco em matemática e teoria da computação :)

Pra quem ficou curios[oa], a prova e o gabarito estão no site http://vestibular.ufg.br/2015/poscomp/.

Atualização: Saiu o resultado. Acertei 41 questões. A média geral foi 29,1 e o desvio padrão 7,3. Então consegui, fiquei acima da média+desvio! \o/

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Eu no podcast Castálio 18 Sep 2015 4:00 AM (9 years ago)

Participei do podcast Castálio, que faz um bate-papo com nerds brasileiros de diversas áreas. Foi divertido! Os entrevistadores Og Maciel e Elyézer Rezende fizeram perguntas e eu respondi com o --verbose ligado, resultando numa conversa tão extensa que teve que ser dividida em dois episódios :)

Escute agora

Castálio Podcast #67: Aurelio Jargas - Conectiva e Livros (44min)

Castálio Podcast #68: Aurelio Jargas - Projetos (54min)

Ou se preferir, assine o podcast e escute no seu tocador favorito.

O que tem de bom?

A primeira parte, como não poderia deixar de ser, foi sobre a (hoje extinta) Conectiva. Relembrei a época em que trabalhei lá (1997 a 2002, depois 2003 a 2005). Como eu fui um dos primeiros funcionários, vi a empresa crescer de uma dúzia que trabalhava amontoado numa casa até o ápice, quando éramos mais de 100 funcionários e ocupávamos um prédio.

Há muitas histórias, mas o que mais me marcou foi o ambiente de trabalho informal e desregrado, “estilo startup”, com música alta (rock), fliperama no refeitório, horário flexível e partidas de Quake nas sextas-feiras.

E claro, ter a oportunidade de estar perto de caras geniais e aprender com eles, mega programadores que admiro (os que citei no podcast foram Arnaldo Carvalho de Melo, Gustavo Niemeyer e Alfredo Kojima). O nível era alto, todo dia se aprendia algo novo, inclusive durante as conversas no almoço. Muito empolgante!

Quer saber mais sobre a Conectiva? Outros ex-funcionários já participaram desse mesmo podcast, contando muitas outras histórias:

Depois papeamos sobre minha saída da Conectiva, minha tentativa frustrada de desnerdização, e da minha fracassada tentativa de virar fotógrafo de surfe na praia de Matinhos. Quem já lê o blog há tempos, acompanhou essa novela em tempo real :)

Enfim, falamos sobre meus oito anos desempregado, trabalhando em casa, onde aproveitei a mente livre para criar sites, softwares e livros. Também contei como é processo de escrever um livro, com dicas pra quem também quer escrever o seu.

Hora do spam: Livro Regex Livro Shell

Finalizamos falando de alguns dos meus softwares: as ferramentas de linha de comando Funções ZZ, o testador de linha de comando clitest, o minigereciador financeiro Moneylog e o infame Miguxeitor.

No final dei uma minha lista de bandas que gosto, alguns sites que leio e podcasts que escuto. Lá no post original do podcast tem a lista completa de tudo o que citei (e alguns adicionais que passei por email pós-gravação).

Se você gostou dos podcasts, não esqueça de ir lá e deixar um comentário para eles (parte 1, parte 2), pois agora você sabe a importância que isso tem para quem cria conteúdo. É o combustível para continuar produzindo e a prova de que tem gente que se importa.

E se você ainda não está satisfeit[oa] e quer ouvir ainda mais da minha voz de taquara rachada, eu já participei de outros podcasts em 2008 e em 2012.

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?