Об этом проекте

CodeWorld — это образовательная среда программирования, реализованная на Haskell. Она предоставляет простую математическую модель для геометрических фигур, анимаций и интерактивных или многопользовательских игр. Веб-среда призвана поддерживать обучение с помощью редактора и компилятора без предварительной настройки, лёгкого обмена проектами и облачного хранения, а также возможности запускать программы прямо в браузере с использованием GHCJS. Варианты - CodeWorld (code.world) использует образовательный вариант Haskell и библиотеки, предназначенные для поддержки обучения математике. - CodeWorld Haskell (code.world/haskell) ориентирован на стандартный Haskell, поэтому программы могут выполняться на сайте с помощью GHCJS или компилироваться нативно с использованием пакета codeworld-api и blank-canvas. - CodeWorld Blocks (code.world/blocks) предлагает интерфейс drag-and-drop для младших школьников; в README отмечается, что в нём всё ещё есть ошибки и он не рекомендуется к использованию. Статус и поддержка CodeWorld описывается как стабильный и используется в школах на протяжении многих лет; частичный список пользователей приведён в документации репозитория. Критические изменения планируются между типичными семестрами американских школ K-12, чтобы снизить disruption. Google распространяет код, но заявляет, что CodeWorld не является официальным проектом Google и не предоставляет поддержки; вопросы направляются в список рассылки codeworld-discuss, а ориентированный на учащихся форум вопросов и ответов доступен по адресу help.code.world. Начало работы Пользователи могут сразу посетить code.world; для использования размещённого сервиса не требуется загрузка или установка. Репозиторий предназначен для тех, кто хочет форкнуть, изменить или внести вклад в среду. Сборка и развёртывание Сборка и запуск CodeWorld описываются как длительные, но автоматизированные с помощью установочных скриптов в корневом каталоге, работающих в большинстве дистрибутивов Linux, включая Debian, Ubuntu, RedHat и CentOS. Шаги: перейти в корень проекта, выполнить ./install.sh, затем ./run.sh и получить доступ к системе по адресу localhost:8080. После изменений ./build.sh перекомпилирует сам CodeWorld с использованием ранее установленных инструментов и библиотек, затем ./run.sh запускает сервер. Также документированы команды сборки и запуска через Docker, хотя в README сказано, что Docker пока не является рекомендуемым методом разработки, а контейнеру не хватает доступа к client ID, общего монтирования NFS и других шагов настройки. Отмечается, что Stack не поддерживается для локальных сборок и в настоящее время не работает как замена shell-скриптам или Docker. Аутентификация CodeWorld поддерживает аутентификацию через Google, локальную аутентификацию или работу с отключённой аутентификацией с ограниченной функциональностью. Без аутентификации пользователи могут писать, собирать и запускать код, но не могут сохранять проекты и папки или управлять ими. Аутентификация через Google требует ключа Google API, хранящегося в web/clientId.txt; запущенный экземпляр подхватывает изменения этого файла. В README есть ссылки на документацию Google Cloud по созданию проекта и client ID OAuth, и отмечается, что это механизм, используемый официальным действующим сайтом. Локальная аутентификация использует базу данных SQLite3, хранит только хэши паролей BCrypt и применяет основанную на JWT аутентификацию без сохранения состояния. Она включается, когда в корне приложения присутствует файл codeworld-auth.db. CLI-инструмент codeworld-auth управляет учётными записями: init-accounts создаёт пустую базу данных, create-account создаёт пользователя со случайно сгенерированным паролем и статусом учётной записи, например Expired, а другие подкоманды обрабатывают обновление и удаление. Секрет JWT должен быть сгенерирован в codeworld-auth.txt с помощью generate-secret; сервер не должен раскрывать этот секрет. Предостережения На виртуальных серверах объёма RAM по умолчанию часто недостаточно для GHC, поскольку CodeWorld компилирует очень большие проекты Haskell во время установки. В README предлагается создать файл подкачки на 2 ГБ с помощью dd, mkswap и swapon; установка может быть медленной, но должна завершиться успешно, и файл подкачки обычно можно удалить после первого запуска сервера, если не планируется использовать очень большие программы. Вклад в проект Для внесения вклада необходимо согласиться с Contributor License Agreement; подробности в CONTRIBUTING.md. Ошибки и формальные запросы на функции направляются в трекер задач GitHub.