Sobre o projeto

CodeWorld é um ambiente de programação educacional implementado em Haskell. Ele oferece um modelo matemático simples para figuras geométricas, animações e jogos interativos ou multijogador. O ambiente baseado na web visa apoiar o ensino com editor e compilador sem necessidade de configuração, compartilhamento fácil e armazenamento em nuvem de projetos, além da capacidade de executar programas diretamente no navegador usando GHCJS. Variantes - CodeWorld (code.world) usa uma variante educacional de Haskell e bibliotecas projetadas para apoiar o ensino de matemática. - CodeWorld Haskell (code.world/haskell) tem como alvo o Haskell padrão, de modo que os programas podem ser executados no site com GHCJS ou compilados nativamente usando o pacote codeworld-api e blank-canvas. - CodeWorld Blocks (code.world/blocks) oferece uma interface de arrastar e soltar para estudantes mais jovens; o README observa que ainda possui bugs e não é recomendado para uso. Status e suporte O CodeWorld é descrito como estável e tem sido usado em escolas por anos, com uma lista parcial de usuários na documentação do repositório. Mudanças que quebram compatibilidade são agendadas entre os semestres escolares típicos do ensino fundamental e médio dos EUA para reduzir interrupções. O Google distribui o código, mas afirma que o CodeWorld não é um projeto oficial do Google e não oferece suporte; perguntas devem ser enviadas para a lista de discussão codeworld-discuss, e existe um fórum de perguntas e respostas voltado a estudantes em help.code.world. Primeiros passos Os usuários podem visitar code.world diretamente; nenhum download ou instalação é necessário para usar o serviço hospedado. O repositório é destinado a quem deseja fazer fork, modificar ou contribuir com o ambiente. Compilação e implantação Compilar e executar o CodeWorld é descrito como demorado, mas automatizado por scripts de instalação no diretório raiz, funcionando na maioria das distribuições Linux, incluindo Debian, Ubuntu, RedHat e CentOS. Etapas: mude para a raiz do projeto, execute ./install.sh, depois ./run.sh e acesse o sistema em localhost:8080. Após alterações, ./build.sh recompila o próprio CodeWorld usando ferramentas e bibliotecas previamente instaladas, e então ./run.sh inicia o servidor. Comandos de build e execução com Docker também estão documentados, embora o README afirme que o Docker ainda não é o método de desenvolvimento recomendado e que o contêiner não possui acesso ao ID do cliente, montagem NFS compartilhada e outras etapas de configuração. O Stack é apontado como não suportado para builds locais e atualmente não funciona como substituto dos scripts de shell ou do Docker. Autenticação O CodeWorld suporta autenticação Google, autenticação local ou execução com autenticação desativada, com funcionalidade reduzida. Sem autenticação, os usuários podem escrever, compilar e executar código, mas não podem salvar ou gerenciar projetos e pastas. A autenticação Google requer uma chave de API do Google armazenada em web/clientId.txt; a instância em execução detecta alterações nesse arquivo. O README contém links para a documentação do Google Cloud sobre como criar um projeto e um ID de cliente OAuth, e observa que esse é o mecanismo usado pelo site oficial ao vivo. A autenticação local usa um banco de dados SQLite3, armazena apenas hashes de senha BCrypt e utiliza autenticação stateless baseada em JWT. Ela é habilitada quando um arquivo codeworld-auth.db está presente na raiz da aplicação. A ferramenta de linha de comando codeworld-auth gerencia contas: init-accounts cria um banco de dados vazio, create-account cria um usuário com uma senha gerada aleatoriamente e um status de conta como Expired, e outros subcomandos tratam de atualizações e exclusão. Um segredo JWT deve ser gerado em codeworld-auth.txt com generate-secret; o servidor não deve expor esse segredo. Ressalvas Em servidores virtuais, a RAM padrão costuma ser insuficiente para o GHC porque o CodeWorld compila projetos Haskell muito grandes durante a instalação. O README sugere criar um arquivo de swap de 2 GB com dd, mkswap e swapon; a instalação pode ser lenta, mas deve ser bem-sucedida, e o arquivo de swap geralmente pode ser removido após a primeira execução do servidor, a menos que se pretenda usar programas muito grandes. Contribuição Contribuir envolve concordar com um Contrato de Licença de Contribuidor, com detalhes em CONTRIBUTING.md. Bugs e solicitações formais de recursos devem ser enviados ao rastreador de issues do GitHub.