Posts
Processos, threads e co-rotinas em Python
Para explicar o conceito de algoritmo, é normal descrever informalmente como uma sequência de passos para resolver um problema. Ao lidar com concorrência e paralelismo, ainda temos passos a serem seguidos, mas eles não estão mais em ordem necessariamente.
Código limpo, positivismo e fotografia
Os conhecimentos em engenharia de software são um requisito universal para qualquer tipo de programador, especialmente os mais experientes. Diferente dos desafios de programação, não há muita discussão sobre a relevância da engenharia de software no dia-a-dia. Há um consenso sobre a importância de escrever um código que seja “limpo”: não basta funcionar, precisa ser fácil de evoluir e sustentar. A questão complicada, é como definir e construir código limpo.
Como ler Kafka?
Já escrevi sobre as dores de se trabalhar com engenharia de dados e muitas delas aparecem quando se utiliza Kafka. Não é uma crítica ao software – tem ótimas sacadas de design para escalabilidade como o princípio de zero cópias, usar diretamente o filesystem, pull ao invés de push e load balancing – mas tudo isso traz uma complexidade intrínseca, que cobra um preço dos usuários.
O que é um arquivo parquet?
No post sobre Data Mesh, comentei sobre os trade-offs de usar uma abordagem “Unix like” para ferramentas de dados. Por um lado, é muito interessante pensando em arquitetura e estratégia, mas pode ser um problema para os usuários menos técnicos. Um exemplo desse desafio, é lidar com diferentes formatos e estratégias de serialização.
Low-code e complexidade acidental
A proposta das soluções (low|no)-code é irresistível para os executivos. Quem antes dependia da área tecnologia para tudo – com o uso ferramentas low-code – consegue resolver problemas com mais autonomia, menor custo e maior agilidade.
Usar árvore ou lista? Sim
Nos últimos tempos, estive estudando sobre banco de dados, acabei encontrando esse ótimo post sobre a arquitetura do Rocks DB1. Achei curioso o uso de skip lists para dados em memória, nunca tinha ouvido falar sobre essa estrutura de dados, mas pareceu promissor: complexidade \(log(n)\) para buscas e manipulação, como uma árvore balanceada, só que mais simples de implementar.
E esse tal de gRPC?
Eu ouvi o termo RPC há pouco tempo atrás. Curiosamente, um tweet do Elon Musk, atribuindo ao excesso de chamadas RPC os problemas de lentidão do Twitter. Quando fui pesquisar o que era RPC, me senti um pouco mal por nunca ter ouvido falar.
Engenharia de dados: por que tão díficil?
No trabalho, apareceu a seguinte demanda: enviar predições de machine learning, armazenadas em uma tabela, para uma fila no formato JSON. Uma demanda trivial…até que sejam adicionados requisitos de performance e escalabilidade.
Desafios técnicos do Data Mesh
A expectativa em relação ao uso de dados nas empresas é enorme, quem trabalha na área e nunca ouviu que dados são o novo petróleo? Talvez seja, mas nas grandes empresas, usar os dados espalhados pelos departamentos é como extrair petróleo de águas profundas.
Rendimentos decrescentes em NLP
Em Economia, a lei dos rendimentos descrescentes fala sobre a relação entre trabalho e produção, que tende a piorar à medida em que se investe mais trabalho. De forma mais precisa, dado: \(Entrada = E\), \(Saida = S\) e \(S = f(E)\). A teoria diz que: \(2 \times f(E) > f(2 \times E)\).
Organizando férias com otimização
Organizar férias pode ser divertido, mesmo que seja um processo entremeado de tarefas chatas. Em tempos de pandemia, talvez sobre apenas a parte chata. Caso não haja planos de viagens e afins, vira apenas uma questão de otimizar a duração das férias.
Sobre montar um pequeno computador
Lata de 410ml para escala Pare de se preocupar e comece a amar o NumPy
Eu demorei um pouco para me acostumar com o Numpy, programação vetorial é bem diferente do estilo mais imperativo e orientado a objetos do Python. Até eu entender melhor as diferenças e aprender alguns “truques” de sintaxe, não me sentia muito confortável usando o Numpy.
Como representar dados circulares?
O pré-processamento variáveis é um tópico obrigatório em qualquer curso introdutório de ciência de dados, mas não vejo quase nenhum material ou discussão sobre variáveis circulares.
Dando um passo para trás
Uma discussão comum na área de programação é a relevância das graduações – especialmente as que seguem os currículos tradicionais – em um mercado que evolui rapidamente e se torna mais heterogêneo.
Adequando-se ao "mercado"
Eu fiz um curso incrível sobre linguagens de programação, que propõe uma ótima discussão sobre o design de linguagens e suas motivações. Pensei em escrever sobre alguns pontos interessantes do curso, indicar para todos que gostam de experimentar novas linguagens, mas percebi que talvez não faça sentido.
O que é estatística bayesiana?
Eu já ouvi muito se falar sobre um debate entre as abordagens bayesiana e frequentista na estatística, mas a verdade é que nunca entendi as diferenças entre elas. Por isso, decidi fazer o (ótimo) curso Bayesian Statistics: From Concept to Data Analysis1. Ainda não me sinto completamente confortável com os conceitos, mas ajudou bastante a melhorar minha compreensão.
-
Muitos cursos do Coursera fazem parte de uma graduação, que tem acesso liberado por uma mensalidade. Esse é um curso isolado, o acesso a todo conteúdo e tarefas é gratuito, sendo necessário pagar apenas pelo certificado se for desejável. ↩
-
Criando um corpus do Skoob com Scrapy
A criação de web scrapers para gerar datasets não é a área mais descolada de ciência de dados, mas uma solução usando o Scrapy ficou tão simples e elegante, que deu vontade de escrever sobre. Neste post, vou explicar como desenvolvi um web scrapper para baixar as resenhas de livros da rede social Skoob.
LSTM para séries temporais
Problemas que envolvem predições de séries temporais são comuns em várias áreas de negócios (e.g. previsão de demanda, acompanhamento de preços, evolução de carteira) e, geralmente, não exigem trabalho de rotulação para serem utilizados em algoritmos de predição. Por outro lado, não são muito fáceis de serem modelados.
Deep Learning + Sentiment Analysis
Semanas atrás, tive a oportunidade de fazer um excelente curso da Unicamp de redes neurais na área de processamento de imagens. Sendo um ignorante em deep learning e processamento de imagens, achei uma boa ideia aplicar os conceitos de deep learning em uma área que eu tenho mais familariedade.
Stemming com Scala
O uso de stems no lugar de palavras é uma abordagem comum para lidar com conteúdo em língua natural, dependendo da técnica utilizada, é vantajoso considerar as flexões de uma palavra como uma única dimensão. Por exemplo, em um sistema de busca, geralmente não é interessante que as palavras “amigo”, “amiga” e “amigões” sejam tratadas como chaves de busca diferentes.
SQL novo para um problema velho
A necessidade de trabalhar com históricos é comum para diversos tipos de análise, mas usar históricos via SQL pode ser um tanto “chato” dependendo de como os dados estão estruturados e, mais importante, podem vir a ser consultas bastante pesadas (e.g. a visão dos dados de todos os clientes em uma data passada).
subscribe via RSS