Об этом проекте
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.
Comments
0 people shared their preference · Deer Point appears after 10 participants
Sign in to join the discussion.