-
Dan Luu
05/04/2014 21:00
É curioso como sempre estamos com um bug em mente, parece até uma marca registrada do software. O autor destaca que "um terço dos bugs poderia ser encontrado automaticamente usando analytics". Olhando para as práticas em hardware, onde a análise de desempenho é comum, fica claro que seguimos um caminho mais difícil no software. Incorporar esses métodos poderia transformar a forma como lidamos com erros, mas, por enquanto, ainda estamos presos em um ciclo de testes eternos que muitas vezes resultam em nada.
-
Leslie Lamport é um dos grandes nomes na computação, e sua obra é como um bug crítico: não dá pra ignorar. A inclusão do algoritmo da padaria, que ele apresenta como solução para o problema da exclusão mútua, é uma amostra perfeita de como simplicidade e beleza podem resolver questões complexas. E claro, seu trabalho sobre relógios lógicos em sistemas distribuídos é essencial para qualquer dev que queira evitar dores de cabeça com a ordenação de eventos. Em um mundo onde a ordem é fundamental, saber que "em um sistema distribuído, é impossível dizer que um evento ocorreu antes de outro" faz total sentido, mesmo que as aplicações práticas evoluam.
-
Dan Luu
22/03/2014 21:00
Editar binários pode parecer o equivalente a um Jedi utilizando o lado sombrio da força, mas, em alguns casos, é a única saída. O autor ressalta que, enquanto alguns veem o uso de editores hexadecimais como algo fora da sanidade, outros percebem que editar o código binário é uma solução prática e rápida, especialmente quando bugs de software fechado aparecem. O exemplo do DevOps que poderia ter salvado horas simplesmente ajustando o número da versão é um lembrete de que, às vezes, o caminho mais simples é o que poupa mais trabalho. No final das contas, em tecnologia, a flexibilidade e a criatividade são tão vitais quanto dominar as ferramentas do seu arsenal.
-
O artigo do Mars Code traz um olhar interessante sobre práticas de engenharia de software que sustentaram a missão do Mars Science Laboratory. A parte sobre o algoritmo Snark é especialmente intrigante, já que, apesar de sua apresentação impecável, ele se revela "fundamentalmente quebrado". O que nos lembra que, por mais que um artigo venha de um grande nome, a confiança não deve ser cega. Afinal, mesmo estrelas como Guy Steele podem deixar um bug escapar na execução de um algoritmo não-bloqueante. Chord segue o mesmo caminho de veneração e eventual decepção, mostrando que a pesquisa em algoritmos é tão desafiadora quanto um nível avançado de Tetris.
-
Antirez (Salvatore Sanfilippo)
21/02/2014 08:40
Esse algoritmo pode parecer trivial, mas a simplicidade é uma virtude no mundo da programação distribuída. A ideia de manter informações idempotentes, que não dependem de estados anteriores, pode salvar muitos desenvolvedores de dores de cabeça em projetos complexos. Com a capacidade de propagação em pacotes pequenos, ele é como a versão tech de um pacote de batatas fritas: rápido e fácil de consumir, mas ainda satisfatório. A relação com o Raft vai além do nome; o que importa é a eficiência em cenários reais.
-
Drew DeVault
02/02/2014 01:00
Essa história do bug que some quando você tenta debugá-lo é digna de um episódio de 'Black Mirror' para programadores. O autor, desenvolvendo para um processor z80 de 1976, encontrou um verdadeiro vilão: o bug só se manifestava quando ele não estava prestes a pegar o culpado. Um cenário clássico de debugging, onde convenhamos, 'debugging' parece mais uma relação amorosa do que um trabalho técnico. No final, o problema da tabela de processos e a renderização de threads inexistentes é uma lembrança de que, na programação, nem tudo é o que parece - e que alguns bugs têm senso de humor.
-
Drew DeVault
01/02/2014 23:00
Esse é um ótimo exemplo de como defeitos em sistemas antigos podem ser um verdadeiro labirinto de Minos. O autor, trabalhando em um kernel de assembly para calculadoras, enfrenta um bug que se esconde quando um breakpoint é ativado, o que é como tentar pegar um Pokémon lendário: eles adoram te deixar na mão. No final, tudo se resume a um detalhe na tabela de processos que estava fora de controle. Um lembrete de que, apesar de toda a modernidade, bugs sempre podem trazer dores de cabeça, e que debugging em hardware vintage pode ser uma verdadeira caça ao tesouro.
-
Antirez (Salvatore Sanfilippo)
20/01/2014 15:13
O Redis Cluster está a caminho da sua primeira versão estável, mas como sempre, o CAP theorem entra na jogada. A ideia é que ele não se prenda ao cima ou abaixo da linha de consistência ou disponibilidade, mas tente alcançar um meio-termo, navegando pelas águas traiçoeiras da replicação assíncrona. O mais fascinante aqui é como a divergência entre nós se manifesta, criando linhas do tempo paralelas que só fazem o desenvolvedor suspirar, lembrando que o 'merge' é mais complicado do que fazer um pull request com conflitos. Se você já lutou com dados que perderam sincronia, sabe exatamente o que estou dizendo.
-
O artigo traz à tona a importância das provas de impossibilidade em sistemas distribuídos. É interessante ver como, mesmo após décadas, a comunidade ainda luta para os desenvolvedores deixarem claras as garantias de seus sistemas. Como mencionado, "o efeito do resultado de impossibilidade pode fazer um desenvolvedor de sistemas esclarecer suas alegações sobre o que o sistema realiza". E enquanto isso, a gente continua sonhando, né?
-
Mitchell Hashimoto
09/01/2014 23:00
O desempenho de sistemas de arquivos em ambientes de máquinas virtuais sempre foi o calcanhar de Aquiles, especialmente no uso do Vagrant. Como o próprio autor menciona, 'a performance de leitura do NFS é incrível para pequenos tamanhos de registro', e isso realmente faz a diferença quando estamos lidando com operações que exigem rapidez, como compilar e testar aplicativos. Se você ainda prefere usar pastas compartilhadas do VirtualBox, talvez seja hora de rever suas escolhas – os números são claros: VMware leva a melhor nesse quesito.
-
Antirez (Salvatore Sanfilippo)
18/12/2013 14:32
A equipe de desenvolvimento de Redis parece estar levando as coisas mais a sério agora que o Redis Cluster está na fase de "refinamentos". Testar em um ambiente de 6 máquinas, incluindo uma EEEpc, é o tipo de experiência que separa os bons desenvolvedores dos verdadeiros gladiadores do código. E sim, claro que um nó rodando em 32 bits vai trazer mais bugs do que uma convenção de programação em um café de desenvolvedores. O que vale é que esses testes estão expondo falhas críticas antes do lançamento.
-
Antirez (Salvatore Sanfilippo)
11/12/2013 20:19
Parece que o debate sobre Redis finalmente rendeu uma ideia válida. A proposta de Alexis sobre usar ACKs assíncronos para operações não recebidas pode parecer um trabalho extra para o cliente, mas é um passo interessante. A sugestão de reter operações não reconhecidas e 'replayá-las' quando a partição se restabelecer é uma maneira engenhosa de contornar limitações de disponibilidade. E sim, a distinção entre manter o contexto das operações e simplesmente os valores é crucial, especialmente em operações como INCR. Quem diria que debate online poderia resultar em algo prático?
-
Antirez (Salvatore Sanfilippo)
09/12/2013 22:53
Um experimento interessante na lista de discussão do Redis gerou 89 posts, mostrando que a comunidade não tem medo de debater. O cerne da questão é que o Redis troca Consistência e Disponibilidade por performance, o que pode parecer arriscado, mas é parte do DNA dele. O design do Redis Cluster faz a lição de casa ao priorizar a latência em vez de se perder em mesclagens complexas de dados. No final das contas, parece que a escolha de desempenhar bem vale a pena, desde que os usuários estejam cientes das limitações.
-
Dan Luu
14/09/2013 21:00
Escrever Verilog pode parecer uma excursão sem mapa, e a dica é: use um linter, senão você pode acabar como um Jedi esquecido no meio de um campo de batalha. O autor destaca a importância de convenções de nomenclatura, mencionando que acessar sinais de domínios de relógio diferentes sem sincronização é como tentar compilar um código sem fechar as chaves - pode acabar em um colapso catastrófico. Em projetos de alta velocidade, não registrar um sinal de outro módulo é como deixar uma porta aberta em um servidor exposto: você só vai perceber quando é tarde demais.
-
Dan Luu
06/09/2013 21:00
Verilog realmente é uma linguagem maluca. Como mencionado, é a mais usada para design de hardware nos EUA, mas sua complexidade traz muitos problemas, como as perguntas no Stack Overflow que acabam sendo, no mínimo, desmotivadas. O exemplo citado mostra claramente como um código que parece correto pode levar a um verdadeiro pesadelo de síntese. Isso acontece porque Verilog foi originalmente pensado para simulações, e ao aplicá-lo ao hardware, não raro o que você escreve não se traduz em nada que faça sentido. No fim das contas, é preciso um conhecimento profundo para evitar que a sua lógica boa se torne um mistério para as ferramentas de síntese.
-
Fabien Sanglard
30/08/2013 22:08
Olha só, o Jan Paul Van Waveren trouxe uns insights interessantes sobre o Doom 3 BFG. Ele fala que a velocidade dos CPUs está tão alta que, em muitos casos, é mais eficiente calcular do que buscar dados na RAM. Kudos para a id Software por compartilhar essas anotações técnicas que ajudam a entender como otimizações simples podem fazer uma grande diferença em performance. Isso é quase como fazer um refactor na lógica do seu código quando você percebe que a lógica é mais rápida que um fetch num banco de dados.
-
Drew DeVault
23/08/2013 21:00
Sincronizar música sem Spotify em um HTC One com CyanogenMod é uma tarefa que pode fazer até os mais experientes pensarem em desistir. O autor detalha o processo de criar um ambiente de shell no Android com SSH e cronjobs para usar rsync. É mais uma prova de que o Android pode ser tão flexível quanto um sistema Linux, desde que você não se importe em sujar as mãos com um pouco de terminal. E, convenhamos, quem precisa de interface gráfica quando você tem 'vim' à sua disposição?
-
O iostat é um clássico na monitorização de IO em Linux, mas como qualquer software legado, tem suas limitações. Se você precisa de uma análise mais profunda, o blktrace é como desbloquear a fase final de um jogo: oferece detalhes preciosos sobre o desempenho do armazenamento que o iostat só sonha em fornecer. Como mencionado, 'algumas medições podem ser sutis', e é exatamente aí que o blktrace brilha, revelando os verdadeiros culpados por problemas de performance. Para quem quer se tornar um Jedi do IO, essa ferramenta é indispensável.
-
Mitchell Hashimoto
17/06/2013 21:00
Antes de sair instalando o Vagrant como se não houvesse amanhã, vale a pena entender "o fluxo de trabalho de alto nível do Vagrant em um ambiente de trabalho real". Essa abordagem simplifica a vida do desenvolvedor, permitindo que ele crie um ambiente que se alinha diretamente com a produção, evitando aquela famosa frase "funciona na minha máquina". Com o comando vagrant up, todo mundo ganha tempo, assim como no último patch de segurança que você aplicou e esqueceu. É sempre bom lembrar que, embora os princípios sejam orientação, a flexibilidade do Vagrant permite moldá-lo no seu ambiente como um verdadeiro Jedi nas artes do DevOps.
-
O autor toca em um ponto crucial: muitas vezes, as reuniões de design falham porque os participantes não estão na mesma página. Em vez de se prender ao foco na solução, que é o que geralmente atrai os engenheiros, é fundamental alinhar os objetivos primeiro. Afinal, discutir o caminho sem saber para onde queremos ir é como tentar compilar um código sem saber se ele faz parte de um projeto que precisa de Java ou Python. Cada um pode ter uma visão diferente do que é sucesso, então, alinhar esses destinos é vital.