2016年1月更新:编程操练神器Cyber-dojo私有服务器搭建
Cyber-dojo(www.cyber-dojo.org)是由居住在英国的软件开发培训师和咨询师Jon Jagger于2010年前后开发的用浏览器来使用的免费在线编程道场,用来在软件开发者中推广刻意的编程操练(http://blog.cyber-dojo.org/p/learn-more.html)。在2015年底cyber-dojo进行了更新,界面更炫,编程语言更多(支持ES6 JavaScript和Bash等),编程招式更多(比如多了fizz buzz plus),每个招式支持同时在线人数高达64人。
Cyber-dojo支持20多种编程语言,每种编程语言有至少一种测试框架可供选择。Jon统计了15000个在线cyber-dojo编程操练发现,数量最多的前5个编程语言和测试框架为:
3125 Java JUnit
2881 C# NUnit
1087 Python unittest
1071 C++ assert
904 C assert
上面编程语言和测试框架的组合,都能用来操练多达41个编程招式。Jon在15000个操练中统计的最受欢迎的前5个招式为:
2091 Fizz Buzz
1830 100 doors
924 Verbal
787 Calc Stats
778 Leap Years
Cyber-dojo的使用场景主要有4个:
1)程序员使用熟悉的编程语言进行TDD编程操练;
2)程序员学习新编程语言;
3)编程道场的组织者为活动参与者提供开发环境,请参加结对编程的参加者,用各自的电脑中的浏览器,通过局域网来访问组织者电脑中的cyber-dojo私有服务器或cyber-dojo.org,来进行编程操练,其间能通过Cyber-dojo提供的统计页面来观察各对编程者测试运行的状态;
4)面试程序员,请程序员在cyber-dojo.org上做编程题目,考官可以使用cyber-dojo的code review工具来查看程序员每一次提交的代码变化。
由于Cyber-dojo在浏览器中不提供编程语言关键字高亮显示,不提供命令提示和自动补足,也不提供重构工具,使得一些重度依赖IDE的程序员会很不适应,但Jon说得好:
“不要试图走得太快,要开始尝试走得慢一些;
不要总想着完成,要始终想着改进;
要想着以团队的形式一起来操练。”
本文描述了在OS X 10.11.2的电脑上安装Cyber-dojo服务器的步骤。由于这些步骤主要是在TurnKey Linux虚拟机里完成,所以对于Host OS是Linux或Windows的读者来说,只要安装了诸如VirtualBox或VMWare这样的虚拟机工具,也能参照本文描述的步骤进行安装。
上述步骤基于Jon Jagger的博文:http://blog.cyber-dojo.org/2014/09/setting-up-your-own-cyber-dojo-server.html。另外,程序员李小康也为笔者安装Cyber-dojo服务器提供了重要的帮助,在此表示感谢!另外Jon在5小时内解决了我安装新版cyber-dojo时遇到的bug,使得我能顺利安装,并产生了本文的更新,感激之余在cyber-dojo.org官网上捐款10英镑,给孩子们买树莓派迷你电脑学习新技术。
* 下载并安装VirtualBox 5.0
从https://www.virtualbox.org/wiki/下载VirtualBox 5.0,并安装到OS X上。
* 下载TurnKey Linux Rails 14.0虚拟机image文件
从http://www.turnkeylinux.org/rails页面上,点击“VMDK”链接,下载turnkey-rails-14.0-jessie-amd64-vmdk.zip,并解压。
* 创建虚拟机
在VirtualBox中,按“Command + N”键创建虚拟机。在"Name and operating system"对话框中填写以下内容:
Name: turn-key-linux-rails
Type: Linux
Version: Ubuntu (64 bit)
Hard drive: Use an existing virtual hard drive file
选择下载的VMDK文件
按"Create"创建虚拟机
* 启动上述虚拟机
在启动上述虚拟机的过程中,填写以下内容:
Please enter new password for the root account:
Confirm Password:
Please enter new password for the MySQL 'root' account:
Confirm Password:
initialize Hub services -> skip
Security updates -> skip
RAILS appliance services -> Advanced Menu
Advanced Menu -> Networking
Networking -> DHCP
Select "Back" and select "Reboot"
RAILS appliance services -> Advanced Menu
Advanced Menu -> Quit
* git克隆Cyber-dojo的在github repo上的源文件
以root登录TurnKey Linux后,运行下面命令
$ cd /var/www
$ git clone https://JonJagger@github.com/JonJagger/cyber-dojo
(注意是"cyber-dojo",中间有减号。旧版的cyber-dojo中间没有减号。)
* 安装Cyber-dojo服务器、gems和docker
运行下面命令安装服务器。
$ cd /var/www/cyber-dojo/admin_scripts
$ ./pull.sh
$ ./setup_turnkey_server.sh
* 安装预建的cyber-dojo docker-images
以root身份运行命令:
$ cd /var/www/cyber-dojo/languages
$ ./docker_list_all_images.rb
此时能看到cyber-dojo所支持的编程语言与测试框架:
...
cyberdojofoundation/clangpp_googletest == C++ (clang++), GoogleTest
cyberdojofoundation/coffeescript_jasmine == CoffeeScript, jasmine
cyberdojofoundation/csharp_nunit == C#, NUnit
cyberdojofoundation/csharp_specflow == C#, SpecFlow
cyberdojofoundation/d_unittest == D, unittest
cyberdojofoundation/erlang_eunit == Erlang, eunit
cyberdojofoundation/fortran_funit == Fortran, FUnit
cyberdojofoundation/fsharp_nunit == F#, NUnit
cyberdojofoundation/gcc_assert == C (gcc), assert
...
根据上表,运行下述命令安装你需要的编程语言与测试框架的image:
$ docker pull
例如:
$ docker pull cyberdojofoundation/clangpp_googletest
(这里翻墙后速度更快。注意,一旦运行这个命令下载了新的编程语言与测试框架,你需要执行下面的更新缓存的命令来令其生效。)
* 更新缓存
以root身份运行下述命令:
$ cd /var/www/cyber-dojo/caches
$ ./refresh_all.sh
* 重启web服务器
以root身份运行:
$ service apache2 restart
* 设置eth0的IP地址并将TurnKey Linux虚拟机关机
运行命令“shutdown -r now”重启TurnKey Linux。在随后出现的"RAILS appliance services"界面中进行以下操作:
"Adanced Menu" -> Networking -> eth0 (确保它的旁边有一个星号*) -> DHCP -> Back to "Advanced Menu" -> Shutdown
* 映射端口
在OS X中运行以下命令来将Host OS(即OS X)的8000端口映射到Guest OS(即TurnKey Linux)的80端口,以便从Host OS及其所连接的其他机器上访问该Guest OS上运行的Cyber-dojo服务器。
$ VBoxManage modifyvm "turn-key-linux-rails" --natpf1 "guestssh,tcp,,8000,,80"
* 访问Cyber-dojo服务器
启动TurnKey Linux虚拟机,在OS X中,用浏览器访问http://localhost:8000/,能够看到Cyber-dojo的首页。点击create a practice session,开始享受编程乐趣~
--------------------
操练成就匠艺。全栈开发者的编程操练社区:bjdp.org北京设计模式学习组。微信订阅号:bjdp_org,QQ群号:235913915。