Português English

Programação

A Incerteza do NUKE: Quando o Maestro se Afasta feature
2026.04.27

A Incerteza do NUKE: Quando o Maestro se Afasta

Acordei outro dia com notícias inquietantes no ecossistema .NET. Rumores estão circulando — e alguns posts em blogs já começam a corroborar — que o NUKE, o sistema de build no qual passei a confiar para quase todos os meus projetos em C#, está sendo efetivamente abandonado.

O comentário geral é que o desenvolvedor principal, Matthias Koch, chegou ao seu limite. Depois de anos dedicando alma e coração ao projeto, a falta de incentivo financeiro e o peso esmagador de manter uma peça tão crítica de infraestrutura cobraram seu preço. O que é ainda mais preocupante é o boato de que qualquer desenvolvimento futuro pode acontecer em um fork que seria de código fechado ou passaria para um modelo pago.

Isso me atinge em cheio. Acabei de escrever sobre o quanto eu amo o Nuke, e agora a base parece estar tremendo sob meus pés.

A Busca por um Substituto

Quando uma ferramenta da qual você depende entra em “modo de manutenção” ou muda seus termos de licenciamento, o primeiro instinto é procurar um bote salva-vidas.

Curiosamente, o Cake 6.0 foi lançado recentemente, e parece que a equipe de lá estava atenta. Eles introduziram o Cake.Sdk, que parece muito uma resposta à filosofia “code-first” do NUKE. Ele se afasta dos antigos scripts .cake e se aproxima de arquivos .cs padrão com uma abordagem baseada em projetos. Ele tem aquela integração com a IDE e a sensação de tipagem forte que me fez mudar para o NUKE em primeiro lugar.

É o suficiente para me fazer pular do barco? Ainda não. Por enquanto, vou continuar com o NUKE. O código existente é licenciado sob MIT e, mesmo que o repositório oficial seja arquivado, a versão atual ainda funciona. Mas a viabilidade a longo prazo é, definitivamente, uma incógnita.

O Custo do “Grátis”

Essa situação lança um holofote cruel sobre o ecossistema de código aberto. Nós — desenvolvedores e empresas — nos tornamos incrivelmente confortáveis construindo impérios sobre o trabalho gratuito de outros. Dependemos desses “pequenos” projetos mantidos por uma ou duas pessoas e frequentemente esquecemos que há um ser humano do outro lado daquele nome no GitHub.

Se nos importamos com essas ferramentas, precisamos apoiá-las. Seja através do GitHub Sponsors, Open Collective ou licenças corporativas, o “grátis” sempre tem um custo. Se os mantenedores não conseguem pagar suas contas ou encontrar um motivo para continuar além do “espírito comunitário”, o projeto acaba entrando em colapso.

Estou em uma encruzilhada aqui. Já está testando as águas com o Cake 6 ou talvez algo como o Modular Pipelines? Por enquanto, manterei meus scripts do Nuke rodando, mas estarei de olho no horizonte.

Meu Maestro em C# feature
2023.06.25

Meu Maestro em C#

Eu sempre fui obcecado por uma coisa: consistência. Seja construindo código na minha máquina local ou vendo-o rodar nas entranhas de um servidor do GitLab, eu quero exatamente o mesmo comportamento. Eu queria um processo de build que não se importasse com onde estava — ele deveria ser tão confortável no meu notebook quanto em um servidor de terceiros.

Quando comecei o projeto SuCoS, eu sabia que precisava de um sistema de build que pudesse acompanhar minha ambição. Não era apenas compilar e testar; eu queria que ele cuidasse de tudo — gerar tags, criar releases e até preparar uma imagem Docker novinha toda semana.

Depois de várias sessões de codificação tarde da noite — daquelas regadas a muitas xícaras de café e muitos esboços de design amassados — finalmente encontrei minha resposta no Nuke. Em vez de espalhar minha pipeline por uma dúzia de estágios separados no YAML do GitLab, deixei o Nuke entrar como meu maestro onipotente.

O Maestro em C#

No fundo, o Nuke é um maestro da automação. É como ter um regente para o seu código, garantindo que cada tarefa seja executada no momento perfeito. E a melhor parte? Esse maestro fala minha linguagem favorita: C#.

Antes do Nuke, eu tinha que comandar manualmente o GitLab para executar cada passo — dotnet restore, dotnet clean, dotnet build, dotnet test. Agora, eu só digo uma coisa ao GitLab: nuke test. Esse comando mestre é como um encantamento poderoso que aciona o Nuke para lidar com todo o resto.

Como ele é escrito em C# em vez de YAML bagunçado, tenho muito mais confiança nos meus builds. O C# me dá aquela sensação de solidez que eu tanto busco. Adoro o fato de que quando chamo o nuke, a primeira coisa que ele faz é compilar a si mesmo antes de construir qualquer outra coisa. É um eco de autoafirmação que me faz sentir em casa.

Para manter as coisas em ordem, também trouxe o GitVersion para lidar com o Versionamento Semântico (SemVer). É como ter um bibliotecário diligente que examina meus commits, aplica os padrões de Semantic Commit e atribui o número de versão perfeito sem que eu precise mexer um dedo.

Domando a Fera

Claro, nenhuma jornada é isenta de solavancos. Embora o Nuke seja poderoso, encontrei alguns obstáculos pelo caminho.

Algumas tarefas, como criar tags e releases, são muito centradas no GitLab e dependem da API deles. Isso significa que elas não são tão portáteis quanto eu gostaria e exigiram alguns ajustes extras para funcionarem corretamente. Foi um pequeno preço a pagar pela automação que ganhei.

À medida que o SuCoS crescia, minha classe de build começou a crescer como erva daninha. Estava se tornando um pesadelo de gerenciar — uma verdadeira confusão. Minha solução? Dividi a class Build : Nuke em várias classes parciais (partial classes). Isso transformou uma multidão indisciplinada de código em uma equipe organizada e disciplinada. Agora, minha lógica de build está limpa e fácil de navegar.

A beleza dessa configuração é que se alguém fizer um fork do SuCoS no GitHub, o sistema de build ainda funcionará quase perfeitamente com apenas alguns pequenos ajustes.

Csharp nuke building system

Por Que SuCoS Pode Ser Seu Próximo Site feature
2023.06.19

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.

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!

Bruno MASSA