-
Dan Luu
07/02/2014 23:00
A história do autor na aula de engenharia revela uma verdade universal: muitos devs ainda não dominam a arte da depuração. A técnica Feynman, que é ótima para entender conceitos, fica um pouco aquém quando se trata de resolver problemas de projetos complexos, como o que ele enfrentou. A verdade é que em programação, a identificação do erro pode ser mais crucial do que a própria solução. Por que não ensinar isso nas escolas? É uma habilidade vital, como saber fazer um commit ou lidar com merge conflicts.
-
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.
-
Dan Luu
01/01/2014 23:00
A análise que o artigo traz sobre o desempenho entre acessos alinhados e desalinhados é um lembrete de que otimização é um jogo de estratégia. A analogia do estacionamento é perfeita; quem nunca teve que desocupar uma vaga alheia? No caso, a diferença de desempenho mostra que, na maioria das vezes, "a versão desalinhada é notavelmente mais rápida". Isso soa como um bug escondido em um código aparentemente limpo. Ver essas nuances em arquitetura de cache é como navegar em um labirinto: às vezes, o caminho menos esperado te leva mais rápido ao objetivo.
-
A nova investigação sobre a Memória Transacional Restrita (RTM) da Intel revela que, embora não prometa um modelo de programação mais simples, oferece um caminho interessante para melhorar a performance em seções críticas protegidas por locks. O conceito de elisão de locks é brilhante, mas como sempre, a prática pode não ser tão fácil quanto parece. Com o aumento das aplicações multicore, esse tipo de otimização é bem-vinda, mas ainda há um longo caminho até que bibliotecas mais amigáveis para TM sejam uma realidade. Vamos ver se novas implementações como xsync vão nos surpreender.
-
O novo Xeon E3-1240v3 com Haswell parece ser uma boa desculpa para explorar o HLE (Hardware Lock Elision) da Intel. Como diz o texto, se "múltiplas threads executarem seções críticas protegidas pelo mesmo bloqueio, mas não realizarem operações conflitantes", então as threads podem agir como se estivessem em uma festa, dançando juntas sem pisar nos pés uma da outra. A implementação através de GCC parece simplificar as coisas – não precisamos reescrever tudo em assembly. Como em uma boa sessão de debugging, é pragmático e eficaz.
-
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.
-
Antirez (Salvatore Sanfilippo)
02/12/2013 07:52
Quem nunca? O autor perdeu tudo porque esqueceu que o Redis estava rodando sem persistência. Mas olha só, em menos de meia hora conseguiu recuperar todos os posts apenas copiolando do cache do Google. Isso mostra que, quando a arquitetura é simples, os desastres são mais fáceis de contornar. Claro, quem precisa de backups quando se tem qualidade Jedi na recuperação de dados?
-
Dan Luu
09/11/2013 23:00
Desenvolver hardware, especialmente CPUs, é como tentar construir um castelo de cartas em uma tempestade: é preciso uma equipe experiente que já tenha passado pelo processo várias vezes. O artigo ressalta que, enquanto startups de software muitas vezes prosperam com equipes jovens, as startups de hardware que tentam fazer o mesmo tendem a falhar: "cada startup desse tipo que conheço falhou". Então, se você acha que a frescura do 'novo' é o suficiente para trazer inovação em hardware, pode ser hora de repensar essa estratégia e trazer aquele engenheiro veterano que já viu de tudo.
-
Antirez (Salvatore Sanfilippo)
27/10/2013 14:47
A atualização das coleções do Redis para serem iteráveis pode ser uma lufada de ar fresco para quem lida com conjuntos de dados mais complexos. Como foi dito, "as coleções do Redis tendem a ser buracos negros"; o que é verdade, já que explorar dados aninhados nunca foi a atividade favorita de qualquer dev. Ter um iterador significa que não precisaremos mais fazer o caminho tortuoso das operações O(N) para buscar elementos. Isso acaba com o sufoco de descobrir o que está realmente dentro das coleções, tornando o gerenciamento de dados mais eficiente e menos arriscado.
-
Dan Luu
03/10/2013 21:00
Quem já navegou no HN sabe que existe um limiar quase mágico para chegar à página principal. A descrição de "60% de chance de ganhar 100+ votos" parece mais um experimento de física quântica do que uma regra de votação. O paradoxo é real: conteúdos interessantes muitas vezes ficam perdidos no limbo da obscuridade, enquanto links duvidosos brilham na superfície. Se apenas um pouco de aleatoriedade fosse injetada nesse sistema, as chances de equilíbrio aumentariam e os verdadeiros tesouros do HN teriam mais oportunidades de brilhar - uma abordagem que parece bem mais lógica do que as soluções ad-hoc que costumam proliferar por aí.
-
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.
-
Fabien Sanglard
03/09/2013 22:08
Jan Paul Van Waveren, o mestre do mistério, está de volta para compartilhar mais sabedoria sobre o Doom 3 BFG. Ele foca nas escolhas de estruturas de dados e na importância das linhas de cache para a performance. Nada como entender que um byte pode ser mais precioso que um power-up em uma batalha épica. Se você ainda acha que performance é só acelerar o clock, tá na hora de olhar para as profundezas do seu código.
-
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
19/08/2013 00:00
É verdade, jQuery pode estar mais próximo do seu histórico de browser do que você pensa. O autor mostra como recursos modernos do JavaScript puro estão suficientemente avançados para lidar com as tarefas comuns, como manipulação de elementos e requisições Ajax. Por exemplo, apenas com 'document.querySelectorAll' dá pra fazer o que o jQuery facilmente fazia, e a performance tende a ser bem melhor. A única questão é que já não dá pra usar IE 5. A menos que, claro, você esteja buscando algo para a sua máquina do tempo em retro-computing.
-
Andrew Kelley (criador do Zig)
17/08/2013 01:41
A polêmica dos callbacks continua, mas, como o autor ressalta, "eu estou aqui para dizer que, na verdade, callbacks são bem okay". Apesar das novas soluções como "asynchronous wait", os callbacks ainda têm seu valor. O truque para deixar o código mais legível é evitar funções anônimas complexas e organizar as declarações no lugar certo, porque ninguém quer se perder em um labirinto de funções. Então, sim, eles podem ser simples e eficazes, mesmo que a turma dos novos paradigmas não concorde.
-
Andrew Kelley (criador do Zig)
30/07/2013 06:54
A lista de jogos RTS parece um prato cheio para quem gosta de dominar campos de batalha em tempo real, mas as opiniões são só de uma pessoa. O destaque vai para 'Holo Wars', que consegue ser um modelo de simplicidade, ajudando novatos sem ser chato, e 'The Great Story of DOTS', que traz uma abordagem única de comandos com linhas desenhadas. Se a sua agenda está tão apertada quanto o loop de um for, talvez valha a pena dar uma olhada apenas nos destaques e deixar os outros para a próxima Sessão da Tarde.
-
Andrew Kelley (criador do Zig)
16/07/2013 23:20
Até então, muitos desenvolvedores acreditavam que métodos privados em JavaScript eram um sonho distante, mas este artigo nos mostra que a mágica está aqui. Ao usar uma abordagem com funções que recebem `self` como referência, podemos evitar o uso do ubíquo underscore e ainda manter nosso código limpo e sem preocupações com a performance, já que os benchmarks provam que não há perda de eficiência. Como disseram os autores, 'É limpo, resolve o problema e não tem implicações de desempenho.' Agora, só falta descobrir se essa técnica vai ser tão popular quanto a troca do Anderson Silva por uma função arrow em 2015.
-
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.