Arquivo da categoria: Programação

Codeforces

Andei meio sumido, mas tentando voltar... e hoje descobri algo muito maneiro que nunca tinha visto. Eu já conhecia o "Advent of Code", que o pessoal monta sempre em dezembro e as vezes até me divirto (raramente faço mais que uns 2 níveis), mas hoje achei algo que vai além... o pessoal cria competição de programação com boa periodicidade no Codeforces. É uma plataforma de competições de programação que atrai programadores do mundo todo, pelo que vi...

O Codeforces organiza competições semanais onde você pode testar suas habilidades e aprender novas técnicas. Além das competições regulares, há rodadas educacionais e especiais. Uma coisa que notei é que algumas das competições são bem puxadas para matemática e/ou no básico e que muitos programadores têm preguiça: tem que ler, pensar, entender bem o problema para entender que solução você pode dar...

Algo que gostei é que ele deixa programar em várias linguagens diferentes - incluindo pascal... 🙂

Então, se você estiver com vontade de exercitar suas habilidades de programação e de resolução de problemas, parece ser uma boa. Eu mesmo ainda não me inscrevi e não tentei participar de nada lá, mas o que li, parece muito bom!

Por que aprender programação?

Hoje, dando uma olhada nos posts do Mastodon, recebi uma indicação de um artigo de 2017 (na verdade, com texto de 2006), muito interessante. Vou deixar aqui o link para quem se interessar. Para dar uma palhinha, basicamente o autor discorre sobre o fato que, hoje, você consegue facilmente fazer inúmeras funções em um computador, mas eles não vêm mais com nenhum simples compilador BASIC. OK, você vai questionar "caraca, Basic?". Concordo, pode ser qualquer outra coisa, poderia ser Pascal... mas basicamente o que se está discutindo é: não tem, pode padrão, nada ali que instigue a curiosidade dos novos usuários (ou seja, as crianças) para criar programinhas simples...

Bom, para se aprofundar, recomendo a leitura, o texto é enorme, mas vale a pena: Why learn computer programming

Tutoriais de VGA

Depois de muito tempo, volto à ativa com os tutoriais aqui da página. Estou (finalmente), começando hoje a disponibilizar a versão online dos Tutoriais de VGA. Já saiu a Parte 1. Se você se interessa pelo assunto, fique ligado. Em breve o resto vai chegar aqui! 🙂

E depois que terminar de disponibilizar os tutoriais antigos aqui, teremos mais surpresas. Em paralelo, já estou traduzindo mais coisas interessantes. O principal deles nem vai ser postado aqui nesse site, vai ficar lá no site principal deles. Em breve, informo aqui... a galera da Demoscene com certeza vai gostar... 🙂

Compressão no divã, digo, DivANS

A equipe do Dropbox publicou recentemente em seu blog esse post sobre um novo algoritmo de compressão em que vêm trabalhando. O post é bem interessante, e compara o DivANS com várias das tecnologias já existentes. Em algumas simulações, há bons ganhos na compressão. E para uma empresa que lida com quantidades absurdas de informação, 1% de ganho é muito significativo. Talvez ainda seja necessário melhorar a velocidade (não adianta melhorar o espaço, mas demorar o dobro do tempo para conseguir ler/escrever o arquivo...), mas sabemos que é assim que várias iniciativas de sucesso começam.

E como acelerar a melhoria do algoritmo? Disponibilizando para a galera em Open Source, claro. Eis que fizeram isso mesmo, e a ferramenta está disponível em https://github.com/dropbox/divans para quem quiser testar, estudar, melhorar.

O algoritmo se baseia numa compressão em (pelo menos) 3 fases. Ao invés de uma geração direta para o arquivo final, o algoritmo gera uma "IR" (representação intermediária), numa segunda fase a IR serve de entrada para ser otimizada, e por fim a IR é convertida para um formato que possa ser eficientemente escrita para o arquivo final através das técnicas de compressão.

O mais interessante é que, na prática, cada fase é 'meio independente' e pode ser mesmo melhorada de forma separada das outras - contanto que a IR seja criada de forma padronizada.

Nos testes demonstrados pelo Dropbox, usaram algoritmos padrões já conhecidos. O LZ foi usado para gerar a IR. A otimização da IR foi feita com o método ANS (Asymmetrical Numeral Systems) - que tem boa performance de compactação, e é bem rápida (bom, isso explica o nome DivANS: "dividedANS")

Por fim, uma coisa bem interessante: a equipe criou o sistema usando a linguagem Rust - linguagem de boa velocidade, como o C,  que não precisa de "garbage collector" e programas em Rust podem ser embutidos em outros que utilizem a interface de função do C - ou seja, fica muito fácil o reuso de rotinas e programas. Fica fácil embutir o codec em páginas com WASM!

Sim, WEBASSEMBLY!

(Ainda não tivemos tempo de comentar sobre o WebAssembly por aqui, mas o que tenho lido tem me animado. Acho que está na hora de estudar um pouco mais do assunto e postar novidades por aqui. Alguém aí interessado?)