Category: Desenvolvimento

Glasskube: Ferramentas de Implantação Open Source e Contratações!

2025-05-19
Glasskube: Ferramentas de Implantação Open Source e Contratações!

A Glasskube, uma startup que desenvolve ferramentas de implantação de código aberto para aumentar a produtividade de engenheiros, está contratando! Eles procuram alguém fascinado por como LLMs, servidores MCP e o modo Agente estão mudando o desenvolvimento de software, que goste de depurar e explorar e que se sinta confortável automatizando tarefas de implantação e monitoramento. Experiência anterior é menos importante do que projetos pessoais e iniciativa. A pilha de tecnologias inclui Go, TypeScript e PostgreSQL. Se você quer trabalhar em Viena com conexões com a cena de startups de São Francisco, inscreva-se!

Hack de Fim de Semana: Criando um Cliente ChatGPT para Apple Watch com IA

2025-05-19
Hack de Fim de Semana: Criando um Cliente ChatGPT para Apple Watch com IA

Este artigo detalha a experiência do autor ao criar um cliente ChatGPT para Apple Watch em um único fim de semana usando a API do OpenAI, SwiftUI, CloudKit e Swift Data. O autor utilizou IA para gerar o código inicial, que forneceu um ponto de partida surpreendentemente bom, apesar de algumas limitações na compreensão de especificidades do watchOS. O processo destacou os pontos fortes e fracos da IA no desenvolvimento moderno: enquanto a IA pode gerar código funcional rapidamente, a intervenção humana é crucial para refinar o design, lidar com peculiaridades específicas da plataforma e otimizar o desempenho. O aplicativo resultante, WristGPT, agora está disponível na App Store, mostrando o potencial da IA para acelerar o processo de desenvolvimento, enfatizando o papel duradouro dos desenvolvedores humanos na criação de produtos.

Desenvolvimento

Preferências de Programação: Influenciadas pela Infância?

2025-05-19

Este artigo explora as preferências de programação do autor, rastreando-as até suas experiências na infância. Ele argumenta que a cultura e a educação moldam nossas crenças centrais sobre tecnologia mais do que argumentos racionais. A infância do autor lhe incutiu uma natureza perfeccionista, avessa a erros e que rejeita ajuda, espelhando seu estilo de programação: preferência por linguagens de tipagem estática, aversão à dependência e busca por código conciso. Ele sugere que encontrar um ambiente alinhado com a personalidade de alguém é fundamental para maximizar o potencial, em vez de forçar-se a adaptar-se a ambientes inadequados. O autor conclui instando os programadores a aceitarem estilos diversos e a priorizarem os sentimentos pessoais nas escolhas de carreira.

Agente de codificação GitHub Copilot: Seu novo assistente de desenvolvimento

2025-05-19
Agente de codificação GitHub Copilot: Seu novo assistente de desenvolvimento

O GitHub Copilot agora possui um agente de codificação que automatiza tarefas de baixa a média complexidade, como adicionar recursos, corrigir bugs, estender testes, refatorar e melhorar a documentação. Basta atribuir problemas ao Copilot no GitHub; ele funciona em um ambiente de nuvem seguro usando GitHub Actions, faz as alterações e solicita revisão. Ele se destaca em bases de código bem testadas e pode lidar com vários problemas simultaneamente. Disponível para assinantes do Copilot Pro+ e Enterprise (usuários do Enterprise precisam de habilitação do administrador). O uso consome minutos do GitHub Actions e solicitações premium do Copilot.

Desenvolvimento agente de codificação

Eficiência do io.Reader em Go: Uma Batalha com Indireção e Asserções de Tipo

2025-05-19

Muitas funções em Go utilizam io.Reader como entrada, permitindo streaming e evitando carregar tudo na memória. No entanto, quando você já possui os bytes, usá-los diretamente é mais eficiente. Este artigo descreve a experiência do autor decodificando imagens com libavif e libheif. Por simplicidade, foram usadas as interfaces de memória simples, mas a função image.Decode do Go verifica se há uma função Peek no io.Reader, encapsulando com bufio.Reader se não encontrada, impedindo o uso direto de bytes.Reader. O autor usa asserções de tipo e unsafe.Pointer para contornar bufio.Reader e bytes.Reader, alcançando cópia zero. No entanto, o artigo destaca problemas na verificação de tipo e no design de interface do Go, incluindo as 'APIs shadow' resultantes.

Desenvolvimento

Kelp: Uma alternativa ao Homebrew para MacOS, escrita em Go

2025-05-19
Kelp: Uma alternativa ao Homebrew para MacOS, escrita em Go

Kelp é um instalador de pacotes binários para MacOS escrito em Go, projetado como uma alternativa ao Homebrew. Ele resolve alguns problemas do Homebrew, como esperar pela disponibilidade de fórmulas e manter várias máquinas atualizadas com um único manifesto. O Kelp suporta a instalação de vários pacotes de uma vez (em breve), caminhos de configuração personalizados e lida com limites de taxa da API do Github. Os usuários gerenciam pacotes por meio de instruções simples de linha de comando, incluindo adicionar, instalar, atualizar e especificar nomes de binários personalizados e instalar de fontes diferentes das versões do Github.

Desenvolvimento

Zod 4 Lançado: Validação de Tipos Mais Rápida, Menor e Mais Eficiente

2025-05-19
Zod 4 Lançado: Validação de Tipos Mais Rápida, Menor e Mais Eficiente

Após um ano de desenvolvimento ativo, o Zod 4 agora está estável! Ele é mais rápido, menor, mais eficiente em termos de tsc e implementa alguns recursos muito solicitados. Publicado ao lado do Zod 3 para facilitar a migração, o Zod 4 possui melhorias de desempenho de 6,5x a 14,7x em vários benchmarks. Os genéricos foram reformulados, reduzindo significativamente a instanciação de tipos do TypeScript. Uma variante leve `zod/v4-mini` oferece uma redução de 85% no tamanho do pacote principal. Novos recursos incluem suporte para tipos recursivos, conversão de JSON Schema, metadados personalizados e tratamento de erros aprimorado.

Desenvolvimento validação de tipos

clawPDF: Uma Impressora Virtual de Código Aberto e Potente

2025-05-19
clawPDF: Uma Impressora Virtual de Código Aberto e Potente

clawPDF é uma impressora virtual de código aberto e poderosa que converte vários arquivos em diversos formatos, incluindo PDF, PDF/A e imagens. Possui recursos avançados como OCR, criptografia e uma interface de script. Compatível com vários sistemas Windows (incluindo servidores e ARM64), suporta impressão em rede e ambientes multiusuário, tornando-se uma ótima ferramenta para soluções empresariais. Seja processando documentos em lote ou integrando-se a aplicativos, o clawPDF faz isso com facilidade.

Desenvolvimento impressora virtual

Cogitator: Um Kit de Ferramentas Python para Prompts de Cadeia de Pensamento

2025-05-19
Cogitator: Um Kit de Ferramentas Python para Prompts de Cadeia de Pensamento

Cogitator é um poderoso kit de ferramentas Python para experimentar e utilizar métodos de prompts de cadeia de pensamento (CoT) em modelos de linguagem grandes (LLMs). Os prompts CoT melhoram o desempenho do LLM em tarefas complexas (como perguntas e respostas, raciocínio e resolução de problemas) guiando os modelos para gerar etapas de raciocínio intermediárias antes de chegar à resposta final. Também melhora a interpretabilidade do LLM, oferecendo insights sobre o processo de raciocínio do modelo. Este kit de ferramentas simplifica o uso de estratégias e estruturas CoT populares para pesquisa ou integração em aplicativos de IA. Inclui uma estrutura de benchmarking personalizável e extensível para avaliar o desempenho de diferentes estratégias CoT em vários conjuntos de dados.

Monitoramento eficaz do Node.js: métricas, alertas e melhores práticas

2025-05-19
Monitoramento eficaz do Node.js: métricas, alertas e melhores práticas

Este guia mergulha profundamente no monitoramento eficaz de aplicativos Node.js. Ele abrange o monitoramento de métricas de tempo de execução (memória, CPU), métricas de aplicativo (taxas de solicitação, tempos de resposta) e métricas de negócios (ações do usuário, taxas de conversão). A importância do monitoramento é enfatizada, detalhando como coletar essas métricas e configurar alertas significativos. Armadilhas comuns de monitoramento, como interpretar incorretamente padrões de dentes de serra de memória e ignorar percentis, são abordadas. O guia também mostra como conectar métricas ao valor comercial e utilizá-las além da produção, como em testes de referência, testes de carga e testes A/B.

Desenvolvimento

Vulnerabilidade de Confusão de Tipos no Daemon coreaudiod do macOS

2025-05-19

Um engenheiro de segurança do Google Project Zero descobriu e explorou uma vulnerabilidade de confusão de tipos de alto risco no daemon coreaudiod do macOS usando uma abordagem de fuzzing direcionada pelo conhecimento. A vulnerabilidade reside no tratamento de mensagens Mach IPC, permitindo que atacantes manipulem mensagens Mach para contornar restrições de sandbox, potencialmente levando à execução de código. O pesquisador tornou público seu harness de fuzzing personalizado e detalhou o processo de exploração e a correção da Apple.

Desenvolvimento

Pare de adivinhar o idioma do usuário com geolocalização de IP!

2025-05-19
Pare de adivinhar o idioma do usuário com geolocalização de IP!

Muitos sites usam geolocalização de IP para determinar o idioma a ser exibido, mas esse é um método falho e não confiável. Endereços IP apenas informam a origem da solicitação, não a preferência de idioma do usuário. VPNs, viagens e países multilíngues levam a erros. O cabeçalho `Accept-Language` do navegador fornece preferências de idioma precisas do usuário. Esta é uma solução superior, gratuita e prontamente disponível. Respeite as preferências do usuário, use o cabeçalho `Accept-Language` e permita que os usuários alterem as configurações de idioma para uma experiência melhor.

Depurando o efeito "Lake" do Area5150: Uma saga de emulador 8088 pixel-perfect

2025-05-19
Depurando o efeito

Este artigo detalha a jornada do autor na depuração do efeito "Lake" da demo Area5150 em seu emulador IBM 5150, MartyPC, usando um sniffer de barramento e um decodificador. Inicialmente, o autor confessa ter usado hacks específicos do título para emular os efeitos "Wibble" e "Lake". No entanto, ao mergulhar nas intrincadezas do IBM CGA, particularmente sua falta de uma interrupção de sincronização vertical, o autor superou os desafios. O artigo explica detalhadamente como o clock dinâmico, a pesquisa de linha de varredura e uma interrupção de sincronização vertical personalizada foram usados para emular perfeitamente o efeito "Lake". Ele compartilha vários problemas e soluções encontrados durante a depuração, incluindo a modelagem precisa dos registradores CGA, interrupções do temporizador e lógica DMA. Por fim, o MartyPC executa com sucesso o efeito "Lake" sem hacks, mostrando o brilho da tecnologia de emulação e uma paixão pela computação retro.

Desenvolvimento

Uma década de projetos paralelos: Lições aprendidas

2025-05-19

Desde 2009, um desenvolvedor vem construindo projetos paralelos, alguns vendidos, outros ainda online e alguns desativados. Seu principal aprendizado: construa o que você gosta e use as stacks de tecnologia com as quais você está mais familiarizado (WordPress, Laravel, React, etc.). Não se prenda às escolhas de framework; os usuários se importam com o projeto, não com a tecnologia subjacente.

Morph: Uma biblioteca fullstack HTMX embutida sem etapa de construção

2025-05-19
Morph: Uma biblioteca fullstack HTMX embutida sem etapa de construção

Morph é uma biblioteca fullstack integrável para construir aplicativos acionados por hipermídia sem etapa de construção, baseada em HTMX. Ela combina o melhor da arquitetura SSR, SPA e ilhas, mantendo-se fiel ao HTML, CSS e JS puros. Criada durante a otimização do desenvolvimento de aplicativos web do Telegram com Deno e Deno Deploy, o Morph oferece uma alternativa leve às configurações complexas de front-end/back-end usando React ou Vue, mostrando-se especialmente eficiente para projetos menores. Atualmente rodando em Hono, com suporte potencial para back-ends futuros, o Morph possui várias vantagens principais: componentes chamam APIs que retornam hipertexto (outros componentes); todos os componentes são renderizados do lado do servidor com acesso ao contexto do lado do servidor; renderização e re-renderização de componentes independentes; estrutura hierárquica de componentes com aninhamento e retorno de APIs; JavaScript do lado do cliente mínimo ou nenhum; sem etapa de construção; sem design de estrutura de dados de API antecipado; integrável em qualquer projeto Deno/Node/Bun. Ideal para cenários em que não é necessário separar o front-end e o back-end, como pequenos bots do Telegram, aplicativos de desktop ou ferramentas internas.

Desenvolvimento Framework Fullstack

sshsync: Simplifique comandos SSH em vários servidores

2025-05-19
sshsync: Simplifique comandos SSH em vários servidores

O sshsync é uma ferramenta de linha de comando rápida e minimalista para executar comandos shell em vários servidores remotos via SSH. Alvoie todos os servidores ou grupos específicos, ideal para administradores de sistemas, desenvolvedores e fluxos de trabalho de automação. Ele usa asyncssh, suporta configuração baseada em grupos, configurações de timeout SSH, envio/recebimento de arquivos, histórico de operações e logs, e um modo de execução simulada. Instale via `git clone https://github.com/Blackmamoth/sshsync.git; cd sshsync; pipx install .`. Usa aliases SSH de ~/.ssh/config e armazena informações de grupo em ~/.config/sshsync/config.yaml.

Desenvolvimento Gerenciamento de Servidores

Llama do Zero: Um Guia Prático (Sem Lágrimas)

2025-05-19
Llama do Zero: Um Guia Prático (Sem Lágrimas)

Esta postagem de blog documenta meticulosamente a jornada do autor na implementação de uma versão reduzida do modelo de linguagem Llama do zero, treinando-o no conjunto de dados TinyShakespeare. Empregando uma abordagem iterativa, o autor implementa progressivamente componentes-chave como RMSNorm, Embeddings Posicionais Rotativos (RoPE) e a função de ativação SwiGLU, testando e visualizando rigorosamente cada parte para garantir a correção. O post enfatiza a importância do desenvolvimento iterativo e compartilha inúmeras técnicas de depuração, como verificações de forma de tensor, afirmações e ferramentas de visualização, fornecendo experiência prática inestimável. O autor treina com sucesso um modelo capaz de gerar texto no estilo shakespeariano e avalia seu desempenho.

Desenvolvimento implementação de modelo

Goboscript: Programação baseada em texto para Scratch

2025-05-19
Goboscript: Programação baseada em texto para Scratch

Goboscript é uma linguagem de programação baseada em texto que compila para Scratch. Permite que você escreva projetos Scratch em texto e os compile em arquivos .sb3, utilizáveis no editor Scratch, TurboWarp ou no site do Scratch. O Goboscript simplifica a criação de projetos Scratch avançados, suportando controle de versão, refatoração de código e reutilização. Possui um poderoso sistema de macros, variáveis locais e otimização e detecção de erros de código. O projeto foi vencedor do primeiro lugar no FOSS HACK 25, recebendo um prêmio de 50.000 rúpias.

Os Perigos de Ordenar Endereços IPv6 com Ferramentas Unix

2025-05-19

Este artigo explora os desafios de ordenar endereços IPv6 usando ferramentas de linha de comando Unix padrão, como 'sort'. As complexidades surgem da representação hexadecimal do IPv6, zeros iniciais ausentes e a notação abreviada '::'. O autor argumenta que uma solução direta requer transformar endereços IPv6 em sua forma completa e expandida ou usar uma linguagem de programação como Perl ou Python para classificação eficaz, pois os utilitários Unix existentes são mal equipados para lidar diretamente com as nuances da formatação de endereços IPv6.

Salários de Engenheiros de Software no Vale do Silício Revelados

2025-05-19

Este conjunto de dados revela a faixa salarial para engenheiros de software em diversas empresas de tecnologia do Vale do Silício. Abrange uma ampla gama de funções e especializações, de engenheiros juniores a arquitetos seniores, e de desenvolvimento de back-end a aprendizado de máquina. Os dados mostram que engenheiros de software seniores recebem salários altos, muitas vezes variando de US\$ 200.000 a US\$ 600.000 anualmente, enquanto engenheiros distintos e principais ganham ainda mais, às vezes ultrapassando US\$ 1 milhão. Os requisitos variados em diferentes empresas e posições destacam a intensa demanda e competição por talentos na indústria de tecnologia.

Desenvolvimento salários

O Enigma do Render Cross-Plataforma: Por que a API de GPU do SDL Adota Essa Abordagem de Shader?

2025-05-19
O Enigma do Render Cross-Plataforma: Por que a API de GPU do SDL Adota Essa Abordagem de Shader?

Desenvolvedores de jogos enfrentam o desafio de renderização eficiente em várias plataformas. Plataformas diferentes (Windows, macOS, Linux, consoles) usam APIs gráficas diferentes (Vulkan, Metal, Direct3D), sendo o tratamento de shaders particularmente complexo. O autor, co-mantenedor do projeto FNA (uma porta moderna do framework XNA), criou o Refresh, uma biblioteca de abstração gráfica multiplataforma, e propôs uma solução de API de GPU SDL que suporta vários formatos de shader, como SPIR-V, HLSL, DXBC e MSL. Essa abordagem multiformato decorre da falta de uma ISA de shader padronizada devido a arquiteturas de GPU diferentes e conflitos de interesses dos fornecedores. Tratar shaders como conteúdo, e não código, permite flexibilidade nos fluxos de trabalho de compilação. A abordagem lida com shaders existentes (como o bytecode FX do XNA) e evita o esforço imenso de criar uma linguagem de shader personalizada, priorizando a renderização multiplataforma prática.

Princípios de Design de Banco de Dados: A Verdade Está Lá Fora

2025-05-19

Este artigo mergulha nos princípios essenciais do design de bancos de dados, destacando sua importância em refletir com precisão a realidade dos negócios. O autor critica a falta de treinamento formal em design de bancos de dados entre desenvolvedores de software, levando ao uso generalizado de métodos ad hoc e resultando em anomalias e inconsistências de dados. Vários princípios de design de bancos de dados são listados, incluindo o Princípio de Design Ortogonal, o Princípio de Completude Expressiva e o Princípio de Normalização Completa. O autor introduz um novo princípio, o Princípio de Denotação Essencial, enfatizando o uso de chaves naturais para identificar relações e evitar a desconexão semântica causada por chaves substitutivas. Usando exemplos de código SQL, o autor demonstra como a adesão a esses princípios evita o alto custo de um design inadequado, construindo, em última análise, sistemas de informação precisos e confiáveis.

Desenvolvimento modelagem de dados

Um Cartão de Visita de Terminal: Criando um Pacote npm Personalizado

2025-05-19
Um Cartão de Visita de Terminal: Criando um Pacote npm Personalizado

Durante a construção do ashley.dev, o autor planejou inicialmente um divertido 'npx connect' na página Sobre. No entanto, o feedback revelou sua natureza enganosa para desenvolvedores. Isso levou à descoberta de cartões npm, inspirando a criação de um cartão de visita de terminal personalizado, 'npx ashleywillis'. Este pequeno projeto mostra o espírito colaborativo da comunidade de desenvolvedores, destacando como o feedback atencioso aprimora os projetos. É uma maneira charmosa de adicionar um toque pessoal a um perfil técnico, demonstrando a alegria encontrada em projetos pequenos e bem elaborados.

Desenvolvimento

Gerenciador de Máquinas Virtuais Karton Chega ao KDE Plasma

2025-05-18
Gerenciador de Máquinas Virtuais Karton Chega ao KDE Plasma

Um novo gerenciador de máquinas virtuais, o Karton, está em desenvolvimento para o ambiente de desktop KDE Plasma. Financiado pelo Google Summer of Code 2025, o estudante da Universidade de Waterloo, Derek Lin, está construindo este aplicativo baseado em Qt Quick e Kirigami. O Karton visa fornecer uma experiência nativa do KDE, usando a API libvirt para gerenciar VMs e, eventualmente, suportando funcionalidade multiplataforma. O desenvolvimento atual concentra-se em recursos principais, como um novo instalador de domínio (usando libosinfo em vez de virt-install), um visualizador SPICE personalizado e opções de configuração de VM mais refinadas. O Karton tem como alvo uma avaliação de meio prazo em 14 de julho e a entrega final em 1º de setembro.

Desenvolvimento

O Papel em Evolução dos Desenvolvedores Juniores na Era da IA

2025-05-18
O Papel em Evolução dos Desenvolvedores Juniores na Era da IA

Embora a IA esteja automatizando tarefas de codificação, os desenvolvedores juniores permanecem cruciais. Em vez de escrever código básico, seu foco muda para depuração, design de sistemas e colaboração. Empresas que negligenciam os cargos juniores arriscam seu futuro pipeline de talentos. Desenvolvedores juniores de sucesso usam a IA como uma ferramenta de aprendizado, verificando sua saída e entendendo a lógica subjacente. Eles devem desenvolver habilidades sólidas de leitura e compreensão de código. O papel do desenvolvedor júnior está evoluindo, exigindo adaptabilidade e foco em pensamento de alto nível, com a IA lidando com as tarefas mais rotineiras.

Desenvolvimento Desenvolvedores Juniores

Licença de Documentação Livre GNU Explicada: Uma Licença para Documentos Livres

2025-05-18

A Licença de Documentação Livre GNU (GFDL) garante a liberdade de copiar, distribuir e modificar documentos, comercialmente ou não comercialmente. Usando uma abordagem 'copyleft', ela garante que as obras derivadas permaneçam livres. A GFDL detalha avisos de direitos autorais, seções invariáveis, textos de capa e muito mais, equilibrando os direitos do autor com a distribuição livre de documentos. Ela abrange a cópia em massa, modificações, combinação de documentos, tradução e tratamento de violações. Embora projetada para documentação de software livre, a GFDL se aplica a qualquer trabalho textual.

Simulador da Teoria do Construtor em Python: Gravidade Quântica e Eletromagnetismo em Código

2025-05-18
Simulador da Teoria do Construtor em Python: Gravidade Quântica e Eletromagnetismo em Código

Uma implementação em Python da estrutura da Teoria do Construtor de David Deutsch, mostrando conceitos principais — de Tarefas simples e substratos ramificados a gravidade quântica e eletromagnetismo — inteiramente em código. Inclui um "construtor universal" capaz de se inicializar a partir de uma lista de Tarefas, demonstrando auto-replicação e o poder da Teoria do Construtor. Recursos incluem tarefas irreversíveis e quânticas, temporizadores e relógios, fungibilidade, dinâmica contínua e tarefas de acoplamento como corpo gravitacional de dois corpos, acoplamento de Coulomb e força de Lorentz.

Desenvolvimento Teoria do Construtor

arXivLabs: Projetos Experimentais com Colaboração da Comunidade

2025-05-18
arXivLabs: Projetos Experimentais com Colaboração da Comunidade

arXivLabs é uma estrutura que permite a colaboradores desenvolverem e compartilharem novos recursos do arXiv diretamente em nosso site. Indivíduos e organizações que trabalham com o arXivLabs adotaram e aceitaram nossos valores de abertura, comunidade, excelência e privacidade dos dados do usuário. O arXiv está comprometido com esses valores e trabalha apenas com parceiros que os respeitam. Tem uma ideia para um projeto que agregará valor à comunidade do arXiv? Saiba mais sobre o arXivLabs.

Desenvolvimento

Stack Error: Lidando com Erros de Forma Ergonômica em Rust

2025-05-18
Stack Error: Lidando com Erros de Forma Ergonômica em Rust

Stack Error é uma biblioteca Rust projetada para simplificar o tratamento de erros. Ela equilibra a facilidade de uso do `anyhow` com a flexibilidade e personalização do `thiserror`, fornecendo mensagens de erro informativas e dados tipados para facilitar a depuração e o tratamento de erros em tempo de execução. Usando macros e tipos de erro personalizados, Stack Error ajuda os desenvolvedores a construir aplicativos mais fáceis de manter, reduzindo a sobrecarga de gerenciamento de erros e permitindo que eles se concentrem na lógica principal.

Desenvolvimento biblioteca

A ascensão e queda do Roam Research: A promessa dos links bidirecionais vs. a realidade

2025-05-18
A ascensão e queda do Roam Research: A promessa dos links bidirecionais vs. a realidade

O Roam Research já foi sensação no mundo dos aplicativos de anotações, graças ao seu recurso de links bidirecionais, considerado uma abordagem revolucionária. No entanto, o autor abandonou o Roam, percebendo que passava mais tempo se preocupando com onde colocar as anotações do que realmente as usando. Embora os links bidirecionais tenham inicialmente aliviado a ansiedade da organização de anotações, a quantidade de links acabou prejudicando a recuperação eficiente. O autor argumenta que o Roam precisa melhorar sua função de busca e criar um sistema de taxonomia automatizado para simplificar o gerenciamento de anotações e melhorar a experiência do usuário.

Desenvolvimento links bidirecionais
1 2 83 84 85 87 89 90 91 214 215