Português English

Programação

Afie o Código Enferrujado feature
2023.04.23

Afie o Código Enferrujado

Era uma vez, no mundo dos parênteses e chaves, eu, um entusiasta dedicado do C#, iniciei uma emocionante aventura para explorar o intrigante reino do Rust. Este último surgiu como uma supernova, conquistando os corações e mentes de desenvolvedores em todo o mundo. Com seu foco em segurança, desempenho e concorrência, o Rust atraiu um grupo leal de fãs, e até mesmo o kernel do Linux sucumbiu ao seu encanto. Enquanto o Rust fazia ondas no universo da programação de sistemas, o C# atuava nos bastidores, exibindo com confiança suas novas habilidades de desempenho e preparado para encarar qualquer desafio.

Apesar do Rust me seduzir com seus recursos de segurança e rápido desempenho, sua sintaxe enigmática e opções de design peculiares logo me fizeram desejar o conforto familiar do C#. Ouvi dizer que o C# e o .NET 7 estavam se fortalecendo na academia de desempenho, então decidi retomar nosso relacionamento. Neste artigo, compartilharei minha jornada de retorno ao C# e compararei sua renovada potência com o Rust, usando alguns resultados de benchmarking.

C# Afia Sua Lâmina

Acontece que, enquanto eu flertava com o Rust, o C# estava aperfeiçoando suas habilidades como um mestre ferreiro. Os desenvolvedores do .NET se dedicaram incansavelmente para melhorar o desempenho do C# e do ambiente de execução .NET, resultando no afiado .NET 7.

O Computer Language Benchmarks Game destacou os frutos do trabalho árduo do C#, mostrando avanços notáveis no tempo de execução e no uso de memória. O C# agora rivaliza com o Rust nos benchmarks de desempenho, provando que não é mais um competidor discreto no cenário.

Enquanto isso, os benchmarks de frameworks web do TechEmpower colocaram o ASP.NET Core entre os melhores, demonstrando que o C# e o .NET podem entregar aplicativos web de alta performance com a precisão de uma lâmina bem forjada, competindo com frameworks web baseados em Rust, como o Axum.

“Novo” Superpoder do C#

Durante seu tempo na forja, o C# descobriu um novo superpoder: a compilação Ahead-of-Time (AOT). Essa habilidade permite que o C# compile o código em código nativo de máquina antes da execução, eliminando o processo de compilação Just-In-Time (JIT) mais demorado.

A compilação AOT não apenas diminui os tempos de inicialização, mas também aperfeiçoa a otimização do desempenho. As compilações AOT e JIT são como dois super-heróis com diferentes histórias de origem, cada um com seus pontos fortes e fracos. AOT, o mais proativo dos dois, compila o código em código nativo de máquina antes da execução, exibindo sua força para diminuir os tempos de inicialização e otimizar o desempenho. Por outro lado, o JIT, o herói mais calmo e reflexivo, compila o código durante a execução, dedicando tempo para otimizar com base no uso real do aplicativo.

O C#, sendo o camaleão voltado para aplicações e versátil que é, inicialmente escolheu o JIT como seu parceiro leal. No entanto, à medida que o C# percebeu que poderia atender a cenários de desempenho mais exigentes, como jogos, adotou o AOT, saindo de sua zona de conforto e expandindo seus horizontes.

  • Somente AOT
    • C
    • C++
    • Rust
  • Somente JIT
    • Java (principalmente JIT, mas pode usar AOT em casos específicos)
    • Ruby
  • Ambos AOT e JIT
    • C#
    • Go
    • Kotlin/Native (para plataformas nativas)

O Lado “Enferrujado” da Moeda

O Rust é, sem dúvida, uma linguagem fascinante, exibindo foco em segurança e desempenho notável. No entanto, sua sintaxe e escolhas de design às vezes podem parecer decifrar hieróglifos antigos. Com várias palavras-chave abreviadas, como fn, mut e impl, o Rust pode muito bem-estar se comunicando em código.

Além disso, a sintaxe do Rust se desvia significativamente de linguagens mais familiares, como C# e Java. Os conceitos de tempo de vida e propriedade do Rust podem deixar desenvolvedores acostumados a linguagens com gerenciamento automático de memória (garbage collection) confusos e perplexos.

Marque uma caixa sobre qual conceito você já ouviu falar:

  • Tempo de vida e propriedade
  • Verificador de Empréstimo
  • Sintaxe de correspondência de padrões com match e _ (coringa)
  • Tipos Option e Result para tratamento de erros
  • Genéricos baseados em traços
  • Macros com sintaxe!

Parabéns: você marcou Zero pontos!

Enquanto isso, o C# mantém sua elegante simplicidade, com palavras-chave significativas e escolhas de design que priorizam a legibilidade e a facilidade de uso. Com o tempo, o C# começou a adotar recursos modernos como correspondência de padrões, tipos de referência nulos e async/await, mantendo seu charme.

De Volta para O Futuro

Minha aventura no Rust foi, sem dúvida, uma experiência reveladora, permitindo-me apreciar as poderosas capacidades de ambas as linguagens. No entanto, a sintaxe enigmática e as escolhas de design do Rust me deixaram desejando o conforto quente e familiar do C#. Ao retornar ao C# mais recente, descobri uma linguagem que evoluiu e se adaptou, oferecendo uma combinação potente de desempenho, elegância e facilidade de uso.

Enquanto o C# e o .NET 7 desfrutam dos holofotes, eles pouco sabem que o .NET 8 está nos forno, pronto para nos deslumbrar com ainda mais melhorias. O boato é que o .NET 8 incorporará ainda mais funcionalidades de bibliotecas populares de terceiros, tornando-se uma opção ainda mais atraente para os desenvolvedores. Com o ritmo de inovação acelerando, o futuro do C# e do universo .NET parece mais brilhante do que nunca.

Então, meus colegas desenvolvedores, que minha história seja um testemunho da importância de manter a mente aberta e ousar explorar novos horizontes. No entanto, às vezes, a grama não é sempre mais verde do outro lado. No meu caso, descobri que o C# era a mistura de poder e familiaridade que eu estava procurando o tempo todo.

Ao navegar pelos mares tumultuados das linguagens de programação, lembre-se de considerar as necessidades específicas do seu projeto, os requisitos de desempenho e as preferências pessoais. Cada linguagem tem suas peculiaridades e encantos, e a escolha certa dependerá das suas circunstâncias únicas. No final, trata-se de encontrar a linguagem que faz seu coração bater e seu código voar.

Home Assistant e o Nascer das Casas Inteligentes feature
2023.02.13

Home Assistant e o Nascer das Casas Inteligentes

As casas inteligentes estão se tornando cada vez mais populares à medida que a tecnologia continua avançando e se tornando mais acessível. Você pode controlar vários dispositivos e eletrodomésticos em sua casa por meio de um único aplicativo e assistente de voz. Lâmpadas, controle de temperatura, sistemas de segurança e muito mais.

Você pode controlar luzes por meio de plataformas como Google Assistant ou Amazon Alexa. Com lâmpadas inteligentes, você pode facilmente definir o clima em sua casa ajustando a cor, o brilho e a temperatura das luzes. Você também pode automatizar a iluminação definindo horários ou criando cenas, como acender as luzes ao entrar em uma sala ou escurecê-las para uma noite de cinema. O discurso de vendas típico “Possibilidades Infinitas” se aplica aqui!

Comecei a transformar a minha casa há cerca de um ano e estou adorando!

Faça Você Mesmo

Uma das opções mais acessíveis e personalizáveis para construir uma casa inteligente é usar o Home Assistant com um Raspberry Pi. Home Assistant é uma plataforma de código aberto que permite integrar e controlar vários dispositivos inteligentes em sua casa. É gratuito e pode ser facilmente instalado em um Raspberry Pi, tornando-o acessível a pessoas com diversos níveis de habilidade técnica. O Home Assistant suporta uma ampla variedade de luzes inteligentes, incluindo as de marcas populares como a Philips.

Um dos benefícios de usar o Home Assistant com um Raspberry Pi é que ele te livra de serviços pagos. Todas as empresas de dispositivos inteligentes oferecem um serviço de assinatura paga para desbloquear alguns recursos extras. A comunidade Home Assistant tem centenas de dicas e tutoriais para replicá-los por conta própria. Isso significa que você não precisa se preocupar com taxas de assinatura recorrentes ou ficar preso a uma plataforma específica.

Ao contrário dos serviços pagos, especialmente de empresas estrangeiras, você garante que suas informações e dados privados estão seguros e não estão sendo monitorados ou acessados por mais ninguém. Você tem controle total sobre seus dados e dispositivos e pode ter certeza de que suas câmeras de segurança, informações pessoais e outros dados confidenciais não serão compartilhados com terceiros. Esse nível de privacidade é crucial no mundo de hoje, onde as preocupações com a privacidade de dados estão se tornando mais difundidas. Ao escolher esta fazer sua própria solução de smart home, você pode aproveitar os benefícios de uma casa conectada sem se preocupar com as implicações de privacidade do uso de um serviço pago.

Node-RED, incluído como plugin, permite uma personalização e automação ainda maiores em sua casa inteligente. Você pode criar “fluxos” que automatizam várias tarefas, como gravar vídeos das câmeras de segurança quando um movimento é detectado, enviar notificações para seu telefone ou acender as luzes quando você entra em uma sala. Isso pode tornar sua casa ainda mais inteligente e responsiva às suas necessidades, liberando tempo e esforço que, de outra forma, seriam gastos em tarefas manuais. O plugin fornece uma interface visual para construir essas automações, facilitando a configuração e modificação de seus fluxos, mesmo que você tenha pouca ou nenhuma experiência em programação. Ao incorporar o Node-RED na configuração do Home Assistant, você pode levar sua casa inteligente para o próximo nível e torná-la verdadeiramente sua.

Eu tive que configurar um backup online. O Raspberry Pi tem um histórico de falhas, especialmente o micro-SD. Fico tranquilo sabendo que, mesmo que meu Raspberry Pi falhe, posso restaurar facilmente a configuração do Home Assistant sem problemas.

Carteira e Chaves Livres

Outra grande característica de uma casa inteligente é a capacidade de deixar suas chaves e carteiras para trás quando você sair de casa. Com fechaduras inteligentes e sistemas de pagamento por telefone, você pode controlar o acesso à sua casa e pagar as compras apenas com o telefone. Isso pode tornar a vida muito mais conveniente, pois você não precisará carregar um chaveiro ou uma carteira volumosa para onde quer que vá. Basta usar seu telefone para destrancar a porta da frente ou da garagem e pagar pelo café da manhã - tudo sem precisar vasculhar os bolsos ou a bolsa. A contrapartida é o único ponto de falha: caso eu perca meu telefone (ou seja roubado), não terei dinheiro e nem como entrar em minha casa.

Fiz a coisa certa ao começar a automatizar minha casa há um ano. Construir uma casa inteligente com o Home Assistant em um Raspberry Pi é uma opção econômica e personalizável para pessoas que desejam controlar seus eletrodomésticos e dispositivos a partir de um local central. Um aviso: é viciante ajustar cada dispositivo ou fluxo para se adequar ao seu gosto. Apenas tome cuidado para não entrar na toca do coelho!

2014.08.11

INOVApps

Descobri semana passada que o Ministério das Comunicações está organizando um corcurso nacional de Aplicativos e Jogos Sérios para dispositivos móveis. Serão 25 escolhidos em cada categoria com prêmio de 100 mil reais cada! Nada mal se o ganhador for uma pessoa física.

Ministério

Achei particularmente curioso o concurso vir deste ministério e não do MinC (Ministério da Cultura). Há vários anos atrás (acho que em 2003), eu e meu amigo Gabriel participamos do JogosBR, um concurso similar mas que era para promover a indústria dos jogos eletrônicos no geral. Nosso jogo foi o Color Rangers, um jogo de estratégia com RPG no universo dos heróis japoneses. Ele passou na primeira etapa, mas não da segunda, que é a que valeria dinheiro mesmo. Hoje eu teria condições de executar este projeto com certeza. Ao menos a primeira fase nos rendeu uma foto ao lado do então Ministro da Cultura, Gilberto Gil.

No começo do ano nós descobrimos que a Behold, uma desenvolvedora brasileira, estava fazendo um jogo chamado Color Squad, um jogo de estratégia com RPG no universo dos heróis japoneses… Coincidência? Acho que não, mas isso não importa. Fico até orgulhoso pois mostra que tivemos uma ideia bem legal.

Documentos como produto final

Assim como o antigo concurso do Ministério da Cultura, este concurso vai julgar um projeto de jogo e não o jogo já feito. Isso é uma postura bem diferente do que eu já fiz principalmente nos Ludum Dare (competição de criação de jogos em 48h) em que o que vai a juri é o jogo que você conseguiu criar.

No INOVApps, o que vai ser julgado é a proposta. É uma série de documentos que descrevem o jogo e como ele será feito. Deve-se dizer qual é a mecânica do jogo, seu tema, fases, arte conceitual. Com base nestes documentos eles vão ver quem tem uma boa ideia e parece ter capacidade de executá-la.

Eu tenho um pouco de receio deste tipo de abordagem já que ele dá margem para os participantes viajarem na maionese e escreverem projetos . E pior, dá margem para que eles sequer escrevam uma linha de código para o jogo final.

Com relação a este último item, o regulamento do concurso lida bem pois, mesmo com os ganhadores já definidos, só vai liberar grande parte dos recursos só depois de dar entregáveis. Só depois do jogo concluído é que se teria direito a mais de 40% do dinheiro.

Jogos sérios

Investiguei na internet e li bastante sobre o assunto de jogos sérios. Fiquei um pouco temeroso pois a maioria dos jogos sérios… não é jogo, e sim conteúdo interativo. Segundo a teoria dos jogos, um jogo deve ter uma dinâmica entre os participantes, em que a ação de um afetaria o outro.

Vi vários visualizadores 3D e 2D, com diversos graus de interação. Mas vi realmente poucos que eu chamaria de jogos. Sem qualquer tipo de pontuação ou limitarores (como vidas), é difícil considerar um infográfico interativo como um jogo. Espero que a banca tenha isso em mente.

Minha proposta

Estou totalmente tentado a participar do concurso. Estou já com alguns pequenos protótipos que poderia facilmente adaptar para um jogo mais educativo, com temática mais séria, mas ainda sim mantendo ele divertido e interessante.

Sempre fui facisnado com o conceito de que, na pele de um governante, é tudo bem mais complicado que se apenas ver de fora. Gosto do conceito de que tudo tem 2 lados. Meus jogos sempre refletem isso, fazendo com que o jogador sempre tenha um certo dilema ao tentar ganhar dinheiro em detrimento da felicidade ou tentar vencer a guerra deixando alguns aliados morrerem.

Para apresentar alguma proposta é preciso que ela seja enquadrada em uma das categorias listadas no edital.

Estou querendo abordar a violência. No mundo dos jogos ela é sempre retratada de uma maneira muito simplista: bem contra o mal. Mesmo em jogos de estratégia, todos os que não são amigos são inimigos. Acho que dá para explorar este conceito de quem é amigo e quem é inimigo, além do que eu já tentei, ao colocar dilemas morais.

Também estou bastante interessado tem temas de governabilidade. Acho que posso atacar temas como turismo e uma dinâmica de toma-lá-dá-cá. Algo como Trópico, mas com uma pegada um pouco mais didática e com base histórica.

Qualquer que seja a proposta, vou tentar fazer uma obra de entreterimento. Isso por uma razão pragmática: se o jogo for bom e divertido, os jogadores jogarão mais e o conteúdo informativo será mais fixado. Não adianta ser uma obra intessante que a pessoa vê, usa e joga fora. Ele tem de ter uma vida útil longa. E vou tentar garantir isso por meio de um mecânicas de jogo.

Por Que SuCoS Pode Ser Seu Próximo Site feature

Por Que SuCoS Pode Ser Seu Próximo Site

No cenário em constante evolução do desenvolvimento web, os Geradores de Sites Estáticos ganharam imensa popularidade devido à sua simplicidade, velocidade e facilidade de uso. Migrei este site do WordPress para um GSE e não tenho arrependimentos. No entanto, navegar pela complexidade de ferramentas existentes como o Hugo e o DocFX pode ser uma tarefa assustadora, até mesmo para desenvolvedores experientes. Reconhecendo este desafio, decidi embarcar em uma jornada pessoal para criar uma solução. Assim, apresento a você o SuCoS (uma referência à simplicidade que busco), um gerador de sites estáticos C# que simplifica o processo enquanto oferece um desempenho incrível.

A Origem

No dia em que me vi emaranhado numa teia de templates do Hugo, percebi que algo precisava mudar. Parecia como se estivesse vagando num labirinto sem uma tocha; até mesmo o ChatGPT, meu confiável companheiro de IA, parecia perdido. Senti-me como Bilbo Baggins nos túneis, mas sem um parceiro para resolver enigmas. Experimentei com o DocFX, mas a rigidez dele me deixou desejando algo mais. Cheguei a brincar com o Zola, em Rust, mas achei que lhe faltava riqueza. Ansiava por algo mais versátil, mais fluido.

Foi então que me ocorreu. Por que não traçar meu próprio caminho? Por que não conjurar um gerador de sites estáticos que tornasse o processo tão simples quanto conectar pontos, em vez de decifrar enigmas? Com o .Net 7 de volta aos trilhos, eu sabia que tinha a base que precisava. Ele prometia familiaridade, riqueza em recursos, e uma mentalidade orientada ao desempenho. Além disso, as novas opções de compilação para um único arquivo, enxuto e autossuficiente, pareceram ser a combinação ideal.

Assim, a semente do SuCoS foi plantada.

O Processo

Ao construir o SuCoS, concentrei-me em 3 funcionalidades críticas.

Em primeiro lugar, imaginei um construtor de sites rápido como o vento, veloz como um guepardo na savana. O resultado? Um motor C# DotNet 7 que gera páginas a uma velocidade vertiginosa. Para conter meu TOC, criei um site teste com 100.000 páginas (equivalente a 10% da Wikipedia em português) e ele levou menos de 1 ms por página!

Em segundo lugar, almejei um sistema de templates fácil de usar, mas versátil. Queria evitar a complexidade hieroglífica dos templates do Hugo e abraçar algo mais intuitivo. E assim entram os templates Liquid - tão adaptáveis e refrescantes quanto a água, tão diretos quanto o ABC.

Finalmente, o terceiro recurso crítico: um servidor interativo para o desenvolvimento local. Ansiava por um sistema que fosse tão responsivo e vivo quanto um coautor entusiasmado, observando cada tecla que eu pressionava, refletindo cada alteração que eu fazia nos arquivos de conteúdo ou tema no servidor local, eliminando a necessidade de atualizações manuais monótonas. Para completar, implementei um pequeno relatório que é gerado no final do processo de construção, permitindo que você admire a velocidade relâmpago da criação do seu site.

O SuCoS não estaria completo sem um fiel escudeiro. Apresento o Nuke, um sistema de construção inestimável que automatiza o processo de construção e liberação, até fornecendo uma imagem de container Docker para facilitar a vida.

O Mapa do Caminho

A primeira versão v1.0.0 já está no ar! E para mostrar seu MVP (produto minimamente viável), o site oficial (https://sucos.brunomassa.com/) foi construído usando o próprio SuCoS! Não é maneiro?! Mas esta é apenas a fase ‘Homem de Ferro Mark 1’. Como Tony Stark, estou sempre refinando e melhorando. Recrutei o GitLab CI/CD como meu fiel AI, J.A.R.V.I.S., que garante que uma versão nova e melhorada veja a luz do dia todas as semanas. A jornada para o ‘Endgame’ continua, cada iteração nos trazendo um passo mais perto.

Um dos meus marcos é converter este mesmo site para SuCoS até o final de julho de 2023. Ambicioso? Sim. Alcançável? Absolutamente.

Junte-se nesta aventura. Conecte-se com a comunidade no Twitter, Mastodon, Discord, e Matrix. Vamos conduzir este navio juntos, transformando o mundo da geração de sites estáticos em uma jornada fácil e agradável, uma página por vez.

Bruno MASSA