LABORATÓRIO DE INFORMÁTICAAprender informática
Aprender informática
a jogar.
Desafios curtos, progressivos e alinhados com a idade: hardware, internet, programação, redes, bases de dados, segurança, Git, APIs e arquitetura.
12.º ANO
Missões disponíveis
O progresso é guardado localmente no browser. Não é preciso criar conta para jogar.
GAMIFICAÇÃO
Conquista o laboratório.
Cada missão dá XP. Ao completar jogos desbloqueias medalhas locais sem recolha de dados pessoais.
[{"id":57,"year_level":12,"title":"System Design Room","slug":"system-design-room","game_type":"sequence","description":"Organiza uma arquitetura web moderna do pedido do utilizador à persistência.","icon":"ARCH","difficulty":"avancado","xp_reward":340,"sort_order":10,"active":1,"created_at":"2026-08-31 20:47:06","updated_at":"2026-08-31 20:47:06","config":{"prompt":"Ordena um fluxo simplificado de uma aplicação web que grava dados.","items":["Browser envia pedido HTTPS","Servidor valida autenticação e dados","Camada de aplicação executa regras","Base de dados executa operação parametrizada","Servidor devolve resposta ao browser"]}},{"id":58,"year_level":12,"title":"Secure Coding Review","slug":"secure-coding-review","game_type":"quiz","description":"Revê decisões de segurança numa aplicação antes de a publicar.","icon":"SEC+","difficulty":"avancado","xp_reward":360,"sort_order":20,"active":1,"created_at":"2026-08-31 20:47:06","updated_at":"2026-08-31 20:47:06","config":{"questions":[{"q":"Como deves guardar passwords de utilizadores?","options":["Texto simples","Hash de password com algoritmo apropriado e salt","Base64","Num ficheiro público"],"answer":1,"explanation":"Passwords devem ser transformadas com funções próprias como password_hash/Argon2/bcrypt, nunca cifradas de forma reversível ou guardadas em claro."},{"q":"Como prevenir SQL injection?","options":["Concatenar input na query","Prepared statements + validação","Ocultar o botão","Mudar a cor da página"],"answer":1,"explanation":"Prepared statements separam dados de instruções SQL."},{"q":"Qual princípio reduz o impacto de uma conta comprometida?","options":["Privilégio mínimo","Dar admin a todos","Desativar logs","Partilhar tokens"],"answer":0,"explanation":"Cada identidade deve ter apenas as permissões necessárias."}]}},{"id":59,"year_level":12,"title":"Deploy Commander","slug":"deploy-commander","game_type":"quiz","description":"Decide como preparar build, testes, segredos, observabilidade e rollback.","icon":"SHIP","difficulty":"avancado","xp_reward":350,"sort_order":30,"active":1,"created_at":"2026-08-31 20:47:06","updated_at":"2026-08-31 20:47:06","config":{"questions":[{"q":"Onde devem ficar segredos de produção?","options":["No Git público","Em secret manager/variáveis protegidas","No JavaScript enviado ao browser","Num comentário HTML"],"answer":1,"explanation":"Segredos devem ser geridos fora do código e com acesso controlado."},{"q":"Antes de um deploy automático, é útil executar…","options":["Testes e verificações","Formatação do disco","Desligar backups","Apagar logs"],"answer":0,"explanation":"CI deve validar build, testes e qualidade antes de promover alterações."},{"q":"Um plano de rollback serve para…","options":["Voltar rapidamente a uma versão conhecida se o deploy falhar","Apagar o histórico Git","Aumentar a latência","Evitar monitorização"],"answer":0,"explanation":"Rollback reduz o tempo de indisponibilidade quando uma versão nova tem problemas."}]}},{"id":60,"year_level":12,"title":"Observability Match","slug":"observability-match","game_type":"match","description":"Liga sinais de observabilidade à pergunta que ajudam a responder.","icon":"OBS","difficulty":"avancado","xp_reward":370,"sort_order":40,"active":1,"created_at":"2026-08-31 20:47:06","updated_at":"2026-08-31 20:47:06","config":{"pairs":[["Logs","O que aconteceu num evento específico?"],["Métricas","Como evolui um valor ao longo do tempo?"],["Tracing","Por onde passou um pedido distribuído?"],["Health check","O serviço consegue responder/depender do necessário?"],["Alertas","Quando um sinal exige atenção?"]]}},{"id":61,"year_level":12,"title":"Architecture Trade-offs","slug":"architecture-tradeoffs","game_type":"quiz","description":"Toma decisões de arquitetura considerando custo, simplicidade, resiliência e escala.","icon":"TRADE","difficulty":"avancado","xp_reward":380,"sort_order":50,"active":1,"created_at":"2026-08-31 20:47:06","updated_at":"2026-08-31 20:47:06","config":{"questions":[{"q":"Para uma aplicação pequena e equipa reduzida, começar com um monólito modular pode ser…","options":["Uma escolha razoável pela simplicidade","Sempre proibido","Obrigatoriamente mais caro que microserviços","Incompatível com testes"],"answer":0,"explanation":"Arquitetura deve servir o problema; simplicidade é um atributo valioso."},{"q":"Adicionar cache pode reduzir latência, mas também introduz…","options":["Problemas de invalidação/consistência","Garantia de dados sempre atuais","Ausência total de falhas","Eliminação da base de dados"],"answer":0,"explanation":"Cache troca simplicidade e consistência imediata por desempenho."},{"q":"Alta disponibilidade normalmente exige…","options":["Redundância, health checks e planos de failover","Um único servidor sem backup","Desligar monitorização","Passwords partilhadas"],"answer":0,"explanation":"Redundância e deteção de falhas são peças comuns de sistemas resilientes."}]}},{"id":62,"year_level":12,"title":"Memória Arquitetura","slug":"memoria-arquitetura","game_type":"memory","description":"Liga conceitos de arquitetura, operação e segurança às suas funções.","icon":"ARCH","difficulty":"avancado","xp_reward":380,"sort_order":60,"active":1,"created_at":"2026-08-31 20:47:06","updated_at":"2026-08-31 20:47:06","config":{"pairs":[["Load balancer","Distribui tráfego"],["Cache","Reduz trabalho/latência"],["Queue","Desacopla trabalho assíncrono"],["Replica","Redundância/escala"],["Logs","Eventos detalhados"],["Métricas","Séries temporais"]]}},{"id":63,"year_level":12,"title":"Debug Produção","slug":"debug-producao","game_type":"debug","description":"Toma decisões de diagnóstico perante incidentes simulados de produção.","icon":"SRE","difficulty":"avancado","xp_reward":410,"sort_order":70,"active":1,"created_at":"2026-08-31 20:47:06","updated_at":"2026-08-31 20:47:06","config":{"rounds":[{"title":"Latência disparou","code":"CPU: 35%\\nRAM: 52%\\nDB connections: 100/100\\nHTTP p95: 4.8s","question":"Que sinal merece investigação imediata?","options":["Pool de ligações à base de dados saturado","CPU demasiado baixa","Nome do servidor","Resolução do browser"],"answer":0,"explanation":"Um recurso no limite pode causar filas e latência mesmo sem CPU alta."},{"title":"Deploy com erros 500","code":"Antes: 0.1% erros\\nDepois do deploy: 18% erros\\nMudança: versão 4.2","question":"Qual resposta inicial é geralmente prudente?","options":["Parar/rollback controlado e investigar","Apagar logs","Desativar backups","Ignorar até amanhã"],"answer":0,"explanation":"Reduzir impacto primeiro e preservar evidência facilita uma análise posterior."}]}},{"id":64,"year_level":12,"title":"Terminal DevOps","slug":"terminal-devops","game_type":"terminal","description":"Pratica comandos de inspeção e versionamento num terminal simulado.","icon":"OPS","difficulty":"avancado","xp_reward":420,"sort_order":80,"active":1,"created_at":"2026-08-31 20:47:06","updated_at":"2026-08-31 20:47:06","config":{"missions":[{"prompt":"Mostra os últimos commits de forma compacta.","command":"git log --oneline","success":"Uma vista compacta ajuda a inspecionar o histórico."},{"prompt":"Mostra diferenças ainda não preparadas.","command":"git diff","success":"git diff ajuda a rever mudanças antes de commit."},{"prompt":"Num sistema Linux, lista processos.","command":"ps aux","success":"ps aux é uma vista comum dos processos no sistema."}]}}]