CodeWorld是使用Haskell的教育环境。它为几何图形,动画以及交互式和多玩家游戏提供了一个简单的数学模型。基于Web的编程环境通过零设定的编辑器和编译器,项目的易于共享和云存储以及使用GHCJ在Web浏览器中运行程序的能力来支持这一教育任务。
有几种可用的CodeWorld变体:
codeworld-api软件包和blank-canvas本地编译。CodeWorld稳定,多年来一直在学校使用!请参阅“用户”页面以获取部分列表。不过,我们不断改善环境。在必要时,打破变化计划在典型(美国)K-12学校学期之间发生,以最大程度地减少现有班级的破坏。
Google正在为CodeWorld分发代码,但是CodeWorld并不是一个官方的Google项目,Google没有提供支持。取而代之的是,有关项目或代码的问题应询问CodeWorld-Discuss邮件列表。也可以在http://help.code.world上获得一个对学生友好的问答论坛,以了解有关使用CodeWorld编写的程序的问题,而不是有关构建或修改CodeWorld本身的问题。
只需访问https://code.world即可开始。
无需下载或安装任何内容以使用CodeWorld。如果您喜欢分叉并修改CodeWorld环境或贡献更改,则此存储库将很有用。
要讨论和聆听有关CodeWorld的公告,请在https://groups.google.com/forum/#!forum/codeworld-discuss上订阅邮件列表
邮件列表应用于:
要报告错误或文件正式功能请求,请尝试https://github.com/google/codeworld/issues。
为CodeWorld做出贡献时,涉及一些文书工作。您需要同意签订贡献许可协议。有关详细信息,请参见CONTRIBUTING.md 。
构建和运行CodeWorld可能是一个漫长的过程,但是使用Root Directory中的安装脚本自动化,该脚本适用于大多数形式的Linux,包括Debian,Ubuntu,Redhat和Centos。逐步说明如下:
./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测试不运行。
使用堆栈本地建造和运行CodeWorld是不支持的,实际上不起作用。堆栈还不能代替上面的shell脚本或docker用法。
CodeWorld提供了两种身份验证模式或通过功能降低的身份验证运行的能力。提供的两种方法如下:
在这两种模式之一中运行CodeWorld允许用户保存和管理其项目和文件夹。如果不启用身份验证,则用户能够编写,构建和运行代码,但失去了保存和管理项目和文件夹的能力。
为了使Google身份验证工作,您需要获取Google API密钥并将其存储在web/clientId.txt中。
要获取用于您的CodeWorld安装的Google API密钥,请咨询以下资源:
拥有Google API密钥后,将其复制并粘贴到web/clientId.txt中。运行的CodeWorld实例将立即拾取此文件的更改。
通常,由于不需要本地密码存储,因此Google身份验证系统将是最容易维护的系统。这是官方现场版的CodeWorld使用的机制。
对于不可接受的外部依赖性(例如Google帐户)的应用程序,我们提供了一个简单的本地身份验证系统:
这提供了一个本地身份验证系统,其工作流与Google身份验证非常相似(即无状态客户端会话)。当前,尚未提供基于Web的管理接口。相反,您可以使用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 Secret。这用于在服务器和浏览器之间来回签名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
这将创建一个2 GB交换文件以增加可用的虚拟内存。使用交换文件安装可能很慢,但它将成功。 (除非您打算在CodeWorld中编写非常大的程序,否则首次运行服务器后删除交换文件通常是安全的。)