Codeworld는 Haskell을 사용하는 교육 환경입니다. 기하학적 인물, 애니메이션 및 대화식 및 멀티 플레이어 게임에 대한 간단한 수학적 모델을 제공합니다. 웹 기반 프로그래밍 환경은 제로 세트 편집자 및 컴파일러, 프로젝트의 Easy Sharing 및 Cloud Storage, GHCJS를 사용하여 웹 브라우저에서 바로 프로그램을 실행할 수있는 기능을 통해이 교육 미션을 지원합니다.
사용 가능한 CodeWorld에는 여러 가지 변형이 있습니다.
codeworld-api 패키지 및 blank-canvas 로 기본적으로 편집 할 수 있습니다.Codeworld는 안정적이며 학교에서 수년간 사용되었습니다! 부분 목록은 사용자 페이지를 참조하십시오. 그러나 우리는 끊임없이 환경을 개선하고 있습니다. 필요한 경우 변경 사항은 기존 클래스의 혼란을 최소화하기 위해 전형적인 (미국) K-12 학교 학기 사이에 발생할 예정입니다.
Google은 Codeworld 용 코드를 배포하고 있지만 Codeworld는 공식 Google 프로젝트가 아니며 Google은 지원하지 않습니다. 대신, 프로젝트 또는 코드에 대한 질문은 Codeworld-Discuss 메일 링리스트에 요청해야합니다. 학생 친화적 인 질문 및 답변 포럼은 Codeworld 자체를 구축하거나 수정하는 것에 대한 질문보다는 Codeworld를 사용하여 작성된 프로그램에 대한 질문에 대해서는 http://help.code.world에서도 제공됩니다.
시작하려면 https://code.world를 방문하십시오.
CodeWorld를 사용하기 위해 다운로드하거나 설치할 필요가 없습니다. 이 저장소는 Codeworld 환경을 포크하고 수정하거나 변경 사항을 기여하는 경우 유용합니다.
Codeworld에 대한 공지 사항을 논의하고 듣기 위해서는 https://groups.google.com/forum/# !forum/codeworld-discuss에서 메일 링리스트를 구독하십시오.
메일 링리스트는 다음을 위해 사용해야합니다.
버그 또는 파일 공식 기능 요청을보고하려면 https://github.com/google/codeworld/issues를 사용해보십시오.
Codeworld에 기여하는 데 약간의 서류가 있습니다. 기부자 라이센스 계약에 동의해야합니다. 자세한 내용은 CONTRIBUTING.md 참조하십시오.
Codeworld를 구축하고 실행하는 것은 긴 프로세스가 될 수 있지만 Debian, Ubuntu, Redhat 및 Centos를 포함하여 대부분의 Linux에서 작동하는 Root 디렉토리의 설치 스크립트를 사용하여 자동화됩니다. 단계별 지침은 다음과 같습니다.
./install.sh 실행하여 프로젝트를 설정하십시오../run.sh 를 실행하여 서버를 시작하십시오.이제 http : // localhost : 8080에서 codeworld 시스템에 액세스 할 수 있습니다.
CodeWorld를 변경하면 종속성을 재건하지 않고 재건 할 수 있습니다.
./build.sh 실행하여 이전에 설치된 도구 및 라이브러리를 사용하여 CodeWorld 자체 만 재 컴파일하십시오../run.sh 를 실행하여 서버를 시작하십시오.Docker를 사용하여 서버를 빌드하고 실행할 수도 있습니다. 이것은 아직 Codeworld와 함께 발전하는 권장 방법은 아니지만 곧 도착할 수 있습니다.
Docker를 시도하는 명령 :
sudo docker build -t codeworld https://github.com/google/codeworld.git
sudo docker run -p 80:8080 -t codeworld
현재 Docker 컨테이너는 클라이언트 ID에 액세스하거나 공유 NFS 드라이브를 마운트하거나 기타 설정 단계에 액세스 할 수있는 방법이 없습니다. 작동하지만 완전하지는 않습니다. 앞으로 이것은 Codeworld를 배포하는 표준 방법이되어야합니다.
프로젝트의 루트의 stack.yaml Intero와 Travis CI를 부분적으로 지원하기 위해 존재합니다. Travis에서는 codeworld-compiler 테스트가 실행되지 않습니다.
Stack을 사용하여 로컬로 Codeworld를 구축하고 실행하는 것은 지원되지 않으며 실제로 작동하지 않습니다. 스택은 아직 위의 쉘 스크립트 또는 도커 사용을 대체 할 수 없습니다.
Codeworld는 두 가지 인증 모드 또는 기능이 감소하여 인증을 비활성화하여 실행할 수있는 기능을 제공합니다. 제공된 두 가지 방법은 다음과 같습니다.
이 두 모드 중 하나에서 Codeworld를 실행하면 사용자가 프로젝트 및 폴더를 저장하고 관리 할 수 있습니다. 인증을 활성화하지 않으면 사용자는 코드를 작성, 빌드 및 실행할 수 있지만 프로젝트 및 폴더를 저장하고 관리하는 기능을 잃을 수 있습니다.
Google 인증이 작동하려면 Google API 키를 얻어 web/clientId.txt 에 저장해야합니다.
CodeWorld 설치를위한 Google API 키를 얻으려면 다음 리소스를 참조하십시오.
Google API 키가 있으면 복사하여 web/clientId.txt 에 붙여 넣습니다. 실행중인 CodeWorld 인스턴스 가이 파일의 변경 사항을 즉시 선택합니다.
일반적으로 Google 인증 시스템은 로컬 비밀번호 저장소가 필요하지 않기 때문에 유지하기에 가장 쉬운 시스템입니다. 이것은 Codeworld의 공식 라이브 버전이 사용하는 메커니즘입니다.
Google 계정과 같은 외부 종속성이 허용되지 않는 응용 프로그램의 경우 간단한 로컬 인증 시스템을 제공합니다.
이는 Google 인증과 매우 유사한 워크 플로 (IE Stateless Client-Side 세션)와 함께 로컬 인증 시스템을 제공합니다. 현재 웹 기반 관리 인터페이스가 제공되지 않습니다. 대신 codeworld-auth CLI 도구를 사용하여 계정을 관리 할 수 있습니다.
지역 인증 시스템은 강사가 모든 학생들이 유효한 Google 계정을 가질 수없고 강사가 현지 Codeworld 스택을 기꺼이 배포 할 의향이있는 상황에 유용 할 수 있습니다.
codeworld-auth.db 파일이 응용 프로그램의 루트 디렉토리에있는 경우 로컬 인증이 활성화됩니다. 이 데이터베이스를 만들려면 GIT 저장소의 루트에서 다음을 실행하십시오.
build/bin/codeworld-auth init-accounts -d codeworld-auth.db
이렇게하면 계정이없는 빈 계정 데이터베이스가 생성됩니다.
위에서 설명한대로 이미 계정 데이터베이스를 작성했다고 가정하면 다음과 같이 새 계정을 만들 수 있습니다.
build/bin/codeworld-auth create-account -d codeworld-auth.db johndoe Expired
이렇게하면 무작위로 생성 된 비밀번호가있는 사용자 ID johndoe 로 새 계정이 생성됩니다. 계정은 "만료"로 설정되므로 다음 로그인 시간에 사용자가 새 비밀번호를 입력하라는 메시지가 표시됩니다.
계정을 업데이트하고 삭제하기 위해 기타 부하 명령이 제공됩니다. 도움말 :
build/bin/codeworld-auth --help
로컬 인증을 사용하려면 codeworld-auth.txt 라는 파일에 저장된 JWT 비밀을 생성해야합니다. 이것은 서버와 브라우저 사이를 오가는 JWT 토큰에 서명하는 데 사용됩니다. git 저장소의 루트 디렉토리에서 다음 명령을 실행하십시오.
build/bin/codeworld-auth generate-secret -s codeworld-auth.txt
이것은 새로운 랜덤 JWT 서명 키를 생성합니다. 서버는이 비밀을 외부 사용자에게 노출해서는 안됩니다.
가상 서버에 CodeWorld를 설치하는 경우이 서버의 기본 RAM이 GHC에 충분하지 않다는 점에 유의하십시오. Codeworld는 설치 중에 매우 큰 Haskell 프로젝트를 컴파일해야합니다. 다음은 발생하는 메모리가없는 문제를 해결하기에 충분해야합니다.
$ sudo dd if=/dev/zero of=/swap bs=1024 count=2097152
$ sudo mkswap /swap
$ sudo swapon /swap
사용 가능한 가상 메모리를 증가시키기 위해 2GB 스왑 파일을 생성합니다. 스왑 파일이있는 설치는 느리지 만 성공합니다. (Codeworld에서 매우 큰 프로그램을 작성하지 않는 한, 처음으로 서버를 실행 한 후 스왑 파일을 제거하는 것이 안전합니다.)