Category: Desenvolvimento

Revolucionando o Tempo: A Abordagem por Intervalos de Datas do Decipad

2025-08-12
Revolucionando o Tempo: A Abordagem por Intervalos de Datas do Decipad

O Decipad apresenta uma abordagem revolucionária para lidar com datas, tratando-as como intervalos em vez de momentos precisos. Essa mudança de paradigma elimina a necessidade de milissegundos e torna os cálculos de datas mais intuitivos e alinhados com o pensamento humano. Por exemplo, '2023' representa o ano inteiro, e 'março de 2024' representa o mês inteiro, evitando as suposições implícitas sobre momentos específicos que levam a erros em bibliotecas de datas tradicionais. Essa representação de intervalo simplifica os cálculos; subtrair duas datas diretamente resulta em uma duração em unidades amigáveis ao usuário, como dias, horas ou minutos. Esse método é mais limpo, mais fácil de entender e evita complexidades como conversões de fuso horário.

PlanetScale apresenta Neki: Postgres com sharding para alta escalabilidade

2025-08-12
PlanetScale apresenta Neki: Postgres com sharding para alta escalabilidade

A PlanetScale anunciou hoje o Neki, um banco de dados Postgres com sharding, construído com base na experiência da equipe com o Vitess. Ao contrário do Vitess, que utiliza o MySQL, o Neki está sendo arquitetado do zero para o Postgres, com o objetivo de trazer a escalabilidade do Vitess para o ecossistema Postgres. Atualmente em desenvolvimento com parceiros de design em larga escala, o Neki será de código aberto após a conclusão para lidar com as cargas de trabalho mais exigentes do Postgres.

Desenvolvimento banco de dados particionado

Tela de bloqueio Wayland transformada em um quebra-cabeça Pokémon

2025-08-12
Tela de bloqueio Wayland transformada em um quebra-cabeça Pokémon

Um entusiasta do Linux criou uma tela de bloqueio Wayland única que substitui a tela de senha por um emulador de Game Boy executando um jogo Pokémon modificado. Os usuários desbloqueiam sua sessão resolvendo um mini-quebra-cabeça dentro do jogo, oferecendo uma alternativa divertida e envolvente à entrada de senha tradicional. O projeto demonstra o alto nível de personalização possível com o Wayland. O desenvolvedor mergulhou nos protocolos do Wayland, implementou uma janela Wayland de baixo nível e até modificou o código assembly do jogo Pokémon para incorporar a lógica de senha. Embora experimental, este projeto demonstra criatividade e habilidade técnica impressionantes, oferecendo uma nova perspectiva sobre a personalização de sistemas.

Desenvolvimento Tela de bloqueio

Tilf: Um Editor de Pixel Art Leve

2025-08-12
Tilf: Um Editor de Pixel Art Leve

Tilf é um editor de pixel art simples, porém poderoso, construído com PySide6, projetado para criar sprites, ícones e pequenos ativos 2D. Ele possui ferramentas essenciais, visualização ao vivo, desfazer/refazer e opções de exportação. Diferente de muitas alternativas, Tilf não requer registro de conta ou e-mail e roda em Windows, MacOS e GNU/Linux. Desenvolvido no tempo livre, o código pode ser melhorado, e contribuições são bem-vindas.

Desenvolvimento editor de imagem

Navegando Longe da Nuvem: Uma História de Programação Minimalista em um Veleiro

2025-08-12

Dois desenvolvedores, navegando no Pacífico por sete anos, experimentaram em primeira mão a fragilidade do software moderno e os riscos da dependência da nuvem. Eles decidiram abandonar as pilhas de tecnologia modernas complexas, abraçando consoles retro de 8 bits e linguagens de programação minimalistas para construir um sistema de computação pessoal autossuficiente e capaz de funcionar offline. Explorando máquinas virtuais, linguagem assembly e computadores de um conjunto de instruções (OISC), eles buscaram criar um ambiente de programação mais resiliente e sustentável, enfrentando o 'inverno do software' e alcançando a permanência dos dados.

Desenvolvimento computação offline

Falha no carregamento do modelo Ollama GGUF: dependência ggml desatualizada

2025-08-12
Falha no carregamento do modelo Ollama GGUF: dependência ggml desatualizada

Um usuário do Ollama relatou uma falha ao carregar um modelo GGUF. O log de erro indica um tipo ggml inválido (39, NONE) para o tensor 'blk.0.ffn_down_exps.weight'. Isso provavelmente decorre de uma dependência ggml desatualizada dentro do llama.cpp. Embora o modelo GGUF seja executado corretamente com o llama.cpp diretamente, a falha na plataforma Ollama sugere a necessidade de uma atualização da dependência ggml dentro do próprio Ollama.

Desenvolvimento

Projetando para Agentes de Usuário: A Ascensão da IUA

2025-08-11
Projetando para Agentes de Usuário: A Ascensão da IUA

Este artigo discute a importância de projetar para três interfaces distintas ao construir aplicativos: Interface do Usuário (UI), Interface de Programação de Aplicativos (API) e Interface do Agente do Usuário (UAI). Com o aumento dos agentes de IA, a IUA torna-se crucial. Para garantir a funcionalidade consistente em todas as três, o autor destaca a necessidade de separar a lógica de negócios central dos padrões de apresentação e interação específicos da interface. Os recursos devem ser definidos na lógica de aplicativo subjacente e expostos por meio das interfaces, evitando a degradação não intencional de qualquer interface ao adicionar novos recursos.

Desenvolvimento

Microrim e a rápida portabilidade do R:BASE System V para OS/2

2025-08-11

No final de 1986, a Microrim, uma empresa de software de banco de dados, enfrentou uma tarefa monumental: portar seu produto principal, o R:BASE System V, para o recém-lançado OS/2 da IBM antes de seu lançamento oficial. Aproveitando seu design de software modular e sua experiência, eles sistematicamente converteram o aplicativo, em grande parte baseado em FORTRAN, para C usando uma ferramenta de tradução e, em seguida, o portaram eficientemente para o OS/2 isolando as chamadas específicas do sistema operacional. Essa façanha, realizada em um período de tempo notavelmente curto, mostrou a destreza da Microrim e ofereceu lições valiosas para outros desenvolvedores que enfrentam desafios semelhantes. A versão OS/2 resultante se beneficiou do espaço de memória expandido e das capacidades de multitarefa do OS/2, melhorando o desempenho e a experiência do usuário.

Desenvolvimento Portabilidade de Software

Dumac: Melhorias significativas de desempenho em uma ferramenta de uso de disco macOS

2025-08-11

Dumac, um utilitário de uso de disco macOS mais rápido que `du -sh`, utiliza a chamada de sistema `getattrlistbulk` específica do macOS. Após incorporar o feedback da comunidade, o autor aumentou o desempenho em cerca de 33% mudando do Tokio para Rayon para melhor paralelismo e otimizando o particionamento do conjunto de hash inode. Resolver a contenção de inode por meio de uma estratégia de particionamento refinada resultou em ganhos adicionais de velocidade.

Desenvolvimento

Uma Filosofia de Design de Software: Domando a Complexidade para Manutenção

2025-08-11
Uma Filosofia de Design de Software: Domando a Complexidade para Manutenção

Este artigo resume as ideias principais do livro "Uma Filosofia de Design de Software", que enfatiza a redução da complexidade do sistema de software para melhorar a manutenção. A complexidade surge de dependências e obscuridade, manifestando-se como amplificação de mudanças, alta carga cognitiva e desconhecidos desconhecidos. As dependências surgem principalmente da duplicação, exceções, herança e decomposição temporal; a obscuridade resulta de nomes vagos, inconsistência e documentação inadequada. O autor defende a programação estratégica, que envolve investir tempo em designs limpos e resolução de problemas juntamente com a implementação de novos recursos, evitando assim o acúmulo de complexidade. O objetivo final é escrever software que não seja apenas funcional, mas também facilmente manutenível.

Desenvolvimento

Ferramenta de Gerenciamento de Projetos Tudo em Um: Acompanhe Tudo, Domine Tudo

2025-08-11

Esta ferramenta abrange todos os aspectos do gerenciamento de projetos, do acompanhamento do funil de vendas, gerenciamento de leads, planejamento do roadmap e agendamento de reuniões ao gerenciamento de tarefas, acompanhamento de pesquisas, gerenciamento de calendário, orçamento e treinamento de integração de funcionários. Ela também inclui pesquisa de mercado, planejamento de conteúdo, análise de desempenho, gerenciamento de mídia social, gerenciamento de fornecedores, controle de qualidade, gerenciamento de conformidade, gerenciamento de estoque, networking e desenvolvimento e inovação de produtos. É como um assistente de gerenciamento de projetos onipotente, ajudando você a acompanhar cada etapa importante, dominar a situação geral e, finalmente, alcançar seus objetivos de projeto.

Desenvolvimento acompanhamento de tarefas

Construindo coisas com o Claude Code: Do classificador de comentários do Hacker News ao criador de pôsteres

2025-08-11

O autor construiu vários projetos usando o Claude Code da Anthropic, incluindo um plugin classificador de comentários do Hacker News e uma substituição mínima do Canva - um criador de pôsteres. O primeiro visa filtrar comentários irrelevantes, enquanto o último fornece uma interface simples para combinar imagens e texto para gerar PDFs A4. O autor também aproveitou o Claude Code para gerenciamento de arquivos e processamento de dados, como renomear arquivos de extratos bancários e mesclá-los em um CSV. Apesar de enfrentar desafios, como as limitações do Claude Code no tratamento de interfaces de usuário complexas e na exportação de PDFs, o autor permanece impressionado com o potencial do Claude Code para prototipagem rápida e ganhos de produtividade.

Desenvolvimento

De Notion para .txt: Minha jornada para uma produtividade simples

2025-08-11

Após anos experimentando diversos aplicativos de produtividade como Notion, Todoist e OmniFocus, o autor retornou a um simples arquivo todo.txt. Aplicativos complexos, ele descobriu, se tornaram consumidores de tempo, enquanto um arquivo de texto simples se mostrou muito mais eficiente. Ele preenche o arquivo todas as noites com as tarefas do dia seguinte, atualizando-o ao longo do dia. O sistema é simples, pesquisável, persistente e independente de qualquer aplicativo ou plataforma específica. O autor argumenta que a verdadeira produtividade depende de: listar tarefas, verificá-las regularmente e executá-las — não de perseguir o aplicativo perfeito.

Desenvolvimento arquivo de texto

Restrições de Aplicação de Sugestões de Código do GitHub: Quando Suas Sugestões Não Serão Aplicadas

2025-08-11
Restrições de Aplicação de Sugestões de Código do GitHub: Quando Suas Sugestões Não Serão Aplicadas

Este texto conciso descreve vários cenários em que sugestões de código não podem ser aplicadas no sistema de revisão de código do GitHub. Isso inclui nenhuma alteração de código, pull requests fechados, visualização de subconjuntos de alterações, várias sugestões por linha, sugestões em linhas excluídas, sugestões inválidas, sugestões já aplicadas ou resolvidas, sugestões de revisões pendentes, sugestões em comentários de várias linhas, pull requests na fila para mesclagem e indisponibilidade temporária do sistema. Em resumo, o GitHub impõe limitações estritas à aplicação de sugestões de código para garantir a integridade e a eficiência da revisão de código.

Desenvolvimento

Por que o Desempenho da Web é Subestimado?

2025-08-11

Apesar de os consumidores valorizarem a velocidade dos sites, muitas empresas ignoram o desempenho da web, levando a sites lentos e perdas financeiras significativas. O artigo analisa por que empresas B2B e grandes B2C negligenciam a otimização devido a altos custos de mudança e falta de métricas de desempenho, e por que pequenas empresas B2C enfrentam problemas de desempenho decorrentes de frameworks como React, que priorizam a experiência do desenvolvedor em vez da experiência do usuário. O autor sugere que o Core Web Vitals e o aumento de geradores de sites estáticos oferecem esperança, mas as empresas precisam superar o obstáculo de mudar de pilhas de tecnologia.

Desenvolvimento desempenho da web

Aprimorando o analisador de inteiros: adotando a notação científica

2025-08-11

Este artigo propõe uma melhoria nos analisadores de inteiros para suportar notação científica (por exemplo, 1E9 para um bilhão). O autor argumenta que os analisadores de inteiros atuais frequentemente rejeitam entradas como "1E9", tornando trabalhoso inserir inteiros grandes. Ao permitir que os analisadores reconheçam e processem a notação científica, a inserção de números grandes pode ser simplificada e mais eficiente. O artigo também discute potenciais problemas de compatibilidade com essa melhoria e como solucioná-los.

Desenvolvimento análise de inteiros

Promessas Auto-Garantidas: A Segurança dos Seus Dados na Era da Tecnologia em Constante Mudança

2025-08-11
Promessas Auto-Garantidas: A Segurança dos Seus Dados na Era da Tecnologia em Constante Mudança

Empresas quebram promessas o tempo todo. Este artigo introduz o conceito de 'promessa auto-garantida', um compromisso verificável pelo usuário, independentemente da confiança na empresa. 'Arquivo sobre aplicativo' é um exemplo; os usuários mantêm o controle e podem usar seus arquivos em outros aplicativos. 'Aço inoxidável' é outro - suas propriedades são independentemente testáveis. Em contraste, termos e políticas não são auto-garantidas; as empresas podem alterá-las retroativamente, afetando os dados do usuário (por exemplo, Google, Zoom). Uma verdadeira promessa de privacidade auto-garantida garante que a ferramenta não tenha acesso aos dados do usuário em primeiro lugar. O artigo adverte que codificar valores na governança ou confiar apenas em código aberto não é uma proteção confiável. Escolher ferramentas com promessas auto-garantidas ajuda a mitigar as incertezas do futuro de uma ferramenta, como fechamentos de negócios ou aquisições.

Desenvolvimento Promessas Auto-Garantidas

Busca de substring 60% mais rápida em Zig usando SIMD

2025-08-11
Busca de substring 60% mais rápida em Zig usando SIMD

Este artigo descreve como o autor conseguiu uma aceleração de aproximadamente 60% na busca de substrings na linguagem de programação Zig usando instruções SIMD. Um algoritmo amigável a SIMD foi implementado, extraindo o primeiro e o último caractere da substring alvo e aproveitando comparações paralelas SIMD para reduzir significativamente os acessos à memória. Benchmarks mostram uma redução de 80% nos ciclos de CPU e melhorias substanciais de velocidade, especialmente com textos grandes. Embora os ganhos sejam menos significativos com textos menores, o potencial do SIMD é claramente demonstrado. O artigo também explora variações de desempenho com diferentes seleções de caracteres e conjuntos de instruções SIMD (AVX2, AVX-512), e discute por que essa otimização não foi integrada na biblioteca padrão do Zig.

Desenvolvimento Busca de Substring

Relatório Técnico da Fundação Rust 2025: Segurança, Escalabilidade e Facilidade para Desenvolvedores

2025-08-11
Relatório Técnico da Fundação Rust 2025: Segurança, Escalabilidade e Facilidade para Desenvolvedores

A Fundação Rust lançou seu Relatório Técnico de 2025, resumindo um ano de avanços significativos no suporte à linguagem de programação Rust e ao seu ecossistema. O relatório destaca o trabalho focado da Fundação em garantir a segurança da cadeia de suprimentos do Rust, melhorar a infraestrutura crítica, aumentar a prontidão do Rust para uso em segurança crítica e promover a interoperabilidade com C++. As principais conquistas incluem: o lançamento completo do Trusted Publishing no crates.io; progresso significativo na infraestrutura de assinatura de pacotes baseada em TUF; integração da Especificação de Linguagem Ferrocene no Projeto Rust; redução de 75% nos custos de infraestrutura de CI; expansão do Consórcio Rust para Segurança Crítica; e engajamento direto com os órgãos de padrões ISO C++. Esses esforços garantem que o Rust permaneça seguro, confiável e pronto para as demandas do desenvolvimento de software moderno.

Desenvolvimento Relatório Técnico

Python Resolve o Problema de 'Dependência Fantasma': PEP 770 e SBOMs Triunfam

2025-08-11
Python Resolve o Problema de 'Dependência Fantasma': PEP 770 e SBOMs Triunfam

Seth Larson, Desenvolvedor Residente de Segurança da Python Software Foundation, em colaboração com a Alpha-Omega, lançou um white paper detalhando a solução para o problema de 'dependência fantasma'. Essa solução, utilizando o PEP 770 e Listas de Materiais de Software (SBOMs), melhora a mensurabilidade dos pacotes Python. Isso permite que sistemas automatizados, como scanners de vulnerabilidades, forneçam resultados precisos mesmo em gráficos complexos de dependências comuns em computação científica, computação de alto desempenho e IA. Projetos importantes como NumPy, criptografia e pip já estão avaliando a adoção do PEP 770.

Desenvolvimento

Genéricos em tempo de compilação do PHP: um compromisso pragmático

2025-08-11
Genéricos em tempo de compilação do PHP: um compromisso pragmático

Genéricos há muito são uma característica desejada para o PHP, mas a implementação em tempo de execução se mostrou incrivelmente difícil. A equipe da Fundação PHP propõe uma abordagem diferente: genéricos em tempo de compilação limitados a interfaces e classes abstratas. Isso oferece a maioria dos benefícios dos genéricos, evitando muitas armadilhas. Ao realizar a verificação de tipo em tempo de compilação, melhora significativamente a eficiência e reduz erros. Embora os genéricos em tempo de execução permaneçam impossíveis com essa abordagem, representa uma melhoria substancial, justificando uma séria consideração da comunidade.

Desenvolvimento Tempo de Compilação

Aumento de Desempenho do eBPF: Desvendando o Mecanismo de Trampolim

2025-08-11

Esta postagem do blog mergulha no mecanismo de trampolim eBPF, uma otimização de desempenho crucial. Com o uso crescente do eBPF em monitoramento de sistemas e outras áreas, a execução eficiente de programas é crítica. O trampolim evita a sobrecarga do tratamento de exceções nos métodos tradicionais de kprobe, chamando diretamente programas eBPF. O artigo detalha o funcionamento interno do trampolim, cobrindo casos de uso avançados, como o tratamento de pontos de entrada e saída de funções, passagem de múltiplos argumentos e otimizações de implementação em ARM64.

Desenvolvimento trampolim

Bolt: Uma linguagem incorporável ultrarrápida

2025-08-11
Bolt: Uma linguagem incorporável ultrarrápida

Bolt é uma linguagem incorporável leve, ultrarrápida e com tipagem segura, projetada para aplicativos em tempo real. Ela se destaca pelo desempenho excepcional, superando outras linguagens de sua classe; uma implementação compacta que minimiza o tamanho da build; compilação extremamente rápida (mais de 500kloc/thread/segundo); facilidade de incorporação (apenas algumas linhas de código); um sistema de tipos rico para capturar erros antes da execução; e um design priorizando a incorporação, com foco no desempenho e na agilidade entre linguagens. Atualmente, o Bolt é construído em x64 e foi testado nos compiladores MSVC, GCC e Clang, mas ainda está em desenvolvimento ativo e não é estável.

Um Compilador Python de 300 Linhas: Conversão de Closure Explicada

2025-08-11
Um Compilador Python de 300 Linhas: Conversão de Closure Explicada

Ao estudar o tutorial Ghuloum, o autor reimplementou um compilador originalmente escrito em C, resultando em uma concisa versão Python de 300 linhas (incluindo testes). Este compilador realiza conversão de closure, lidando com vinculação de variáveis, rastreamento de variáveis livres e gerenciamento de objetos de código. O artigo detalha a implementação, cobrindo expressões lambda e let, chamadas de funções e fornecendo casos de teste e exemplos de código assembly. O resultado é um compilador surpreendentemente compacto capaz de lidar com closures e chamadas de funções indiretas, mostrando soluções elegantes para problemas complexos.

Desenvolvimento conversão de closure

Divisão Segura em C com Maybe

2025-08-11

Este artigo descreve a implementação de contêineres genéricos seguros para tipos e limites em C. O autor introduz um tipo `Maybe`, inspirado em Haskell, para lidar com funções que podem retornar nenhum valor (por exemplo, divisão por zero). Uma função de divisão segura é criada usando macros para definir `Maybe`, tratando a divisão por zero e o caso limite de dividir o menor inteiro representável por -1. O código de assembly gerado pelo GCC é analisado para verificar a segurança da função. O autor conclui observando as limitações desta abordagem para provar a segurança completa de programas C.

Desenvolvimento

Mais rápido que memcpy: Um benchmark de métodos de cópia de memória personalizados

2025-08-11

Durante a análise de desempenho, o autor descobriu que `memcpy` era um gargalo para mensagens binárias grandes. Vários métodos personalizados de cópia de memória foram implementados e comparados, incluindo variações usando instruções REP MOVSB e AVX (alinhado, alinhado em stream e alinhado em stream com pré-busca). Para mensagens de tamanho pequeno a médio, a versão AVX com loop desdobrado apresentou o melhor desempenho. Para mensagens grandes (> 1 MB), a versão AVX alinhada em stream com pré-busca foi a mais rápida, mas seu desempenho em mensagens pequenas foi péssimo. A conclusão? `std::memcpy` oferece um bom equilíbrio entre desempenho e adaptabilidade; métodos personalizados são desnecessários a menos que o desempenho seja primordial.

MCP: O Protocolo que Está Acidentalmente Construindo um Ecossistema Universal de Plugins

2025-08-10
MCP: O Protocolo que Está Acidentalmente Construindo um Ecossistema Universal de Plugins

Este artigo explora o potencial inesperado do MCP (Protocolo de Contexto de Modelo), argumentando que é muito mais do que apenas um aprimorador de IA. Traçando um paralelo com a versatilidade da USB-C – conectando tudo, de telefones a torradeiras – o autor sugere que o potencial do MCP se estende além da IA, atuando como uma maneira padronizada de conectar diversas fontes de dados e ferramentas. Seu aplicativo, APM, utiliza servidores MCP para extensibilidade, oferecendo recursos como verificação ortográfica, gerenciamento de tarefas e até mesmo respostas de agente de IA semelhantes ao Warcraft 3. Em última análise, o artigo postula a ascensão do MCP como um poderoso e imprevisto ecossistema de plugins universal.

Desenvolvimento

Inicializando 5000 VMs Erlang em um servidor Ampere One de 192 núcleos

2025-08-10
Inicializando 5000 VMs Erlang em um servidor Ampere One de 192 núcleos

A Underjord, uma consultoria especializada em Elixir e Nerves, conseguiu executar 5000 máquinas virtuais Erlang em um servidor Ampere One de 192 núcleos. Cada VM executa um dispositivo IoT Linux usando a estrutura Nerves. Isso foi alcançado usando um novo bootloader, little_loader, simplificando a inicialização de VMs ARM64 QEMU e aproveitando a aceleração KVM. Os desafios incluíram problemas de compilação e otimização de memória, mas esses foram superados ajustando os alocadores de VM BEAM, os modos de lançamento Erlang e os parâmetros do kernel Linux. Mais de 5000 VMs foram executadas com sucesso, abrindo novas possibilidades para testes e desenvolvimento da estrutura Nerves e potencialmente integrando-se às ferramentas Nerves futuras.

Desenvolvimento

OS/2: A Ambiciosa Aposta da Microsoft em Sistemas Operacionais

2025-08-10

Um artigo da revista Computer Language de 1987 descreveu detalhadamente o então novo sistema operacional da Microsoft, OS/2, prevendo seu potencial para dominar os microcomputadores Intel 80286/80386 na próxima década. Suas capacidades de multitarefa, API abrangente e extensibilidade de hardware foram destacadas como pontos fortes. A arquitetura do OS/2 apresentava três camadas: o kernel e os serviços do sistema, o Windows Presentation Manager (WPM) e o OS/2 LAN Manager. O artigo focou no kernel e seus serviços de sistema, cobrindo gerenciamento de processos, gerenciamento de memória (incluindo memória virtual), drivers de dispositivo, gerenciamento de arquivos e comunicação entre processos (IPC). O OS/2 utilizava escalonamento preemptivo e fatiamento de tempo, suportava modos protegido e real e oferecia compatibilidade com MS-DOS. O link dinâmico era um elemento crucial, melhorando a reutilização de código e a proteção de aplicativos para o futuro. O artigo concluiu especulando sobre as melhorias futuras do OS/2 e o suporte ao 80386.

Desenvolvimento

Configuração de Chaves de API para Construção de Aplicações de IA

2025-08-10
Configuração de Chaves de API para Construção de Aplicações de IA

Este documento descreve a configuração necessária das chaves de API para construir aplicativos de IA. As chaves de API E2B e Firecrawl são obrigatórias, fornecendo [adicione a descrição da funcionalidade E2B aqui] e recursos de web scraping, respectivamente. Opcionalmente, você pode configurar as chaves de API Anthropic, OpenAI ou Groq para aproveitar seus poderosos modelos de IA para inferência; o modelo Kimi K2 do Groq é recomendado para inferência rápida.

Desenvolvimento configuração de modelo
1 2 10 11 12 14 16 17 18 198 199