ocaml-sf / learn-ocaml Goto Github PK
View Code? Open in Web Editor NEWA Web Application for Learning OCaml
Home Page: https://ocaml-sf.org/learn-ocaml/
License: MIT License
A Web Application for Learning OCaml
Home Page: https://ocaml-sf.org/learn-ocaml/
License: MIT License
The following error message is a bit disturbing. (In that example, tmp
does not contain any learn-ocaml related material.)
yann➜/tmp» learn-ocaml grade [15:22:00]
Fatal error: exception Learnocaml_exercise.Missing_field("solution.ml")
Called from unknown location
Called from unknown location
Called from unknown location
Called from unknown location
Called from unknown location
Called from unknown location
Called from unknown location
Hi,
I am writing a tutorial for test functions 'test_ref' but my grader is not working : any student answer is ok (even no answer). I may have done something wrong ... any help is welcome. Here is a basic example
prelude.ml
let forty_two = ref 0;;
solution.ml
let () = forty_two := 42
test.ml
let exercise_1 =
Section ([Text "Ref: "; Code "forty_two"] ,
test_ref [%ty: int] forty_two 42)
The issue is simple: an user type is both defined in prelude.md
and in test.ml
but no sampler for this type is given. An error should be raised when building exercise session. However, it is not the case, and so, it's resulting in a failure report when the user tries to grade the exercise.
Obviously, user types must not be redefined in test.ml but still, an error should be raised at building time.
A dummy example:
prelude.ml:
type ab = A | B
solution.ml :
let foo x = match x with
| A -> 0
| B -> 1
test.ml
type ab = A | B
let exercise_1 =
Section ([ Text "Function: " ; Code "foo" ],
test_function_1_against_solution
[%ty: ab -> int]
"foo"
~gen:10
[]
)
Moreover, the teachers who report this issue actually did not have a nice failure report, but a "Division_by_zero" error but I did not manage to reproduce this behavior.
We want to support LAN servers without internet access, so we should embed it ; this will probably need some stripping down be cause it's quite big, and we don't use much of it.
I saw some pointers at https://www.mathjax.org/cdn-shutting-down/
I know get the following error after building 73eace9
yann➜teaching/learn-ocaml/learn-ocaml(master)» learn-ocaml build --repo demo-repository [14:22:43]
Unimplemented Javascript primitive caml_pure_js_expr!
Two issues :
the header of this error is written in french (Erreur Interne)
this error occurs very often when working on the grader but is absolutely not informative. Here are two cases I have seen it occurs :
I tried to start a fresh install of learn-ocaml on new machine and I just realized that the build system is broken. The system was still working on my machine for bad reasons: there were previously installed files found by the learn-ocaml
program (doing uninstall before install would avoid that kind of inconsistencies).
Anyway, when doing make
after make build-deps
, I get the following warnings:
Compiler: ocaml 4.05.0
----- 10 env warnings -----
Warning: inexistent package directory:
"/home/yann/.opam/4.05.0/lib/coq/ide"
Disabling package "coq.ide".
(from "/home/yann/.opam/4.05.0/lib/coq/META")
Warning: inexistent package directory:
"/home/yann/.opam/4.05.0/lib/coq/ide"
Disabling package "coq.idetop".
(from "/home/yann/.opam/4.05.0/lib/coq/META")
Warning: missing package "cohttp-async":
Disabling package "cohttp.async".
(from "/home/yann/.opam/4.05.0/lib/cohttp/META")
Warning: missing package "cohttp-lwt-js":
Disabling package "cohttp.js".
(from "/home/yann/.opam/4.05.0/lib/cohttp/META")
Warning: missing package "cohttp-top":
Disabling package "cohttp.top".
(from "/home/yann/.opam/4.05.0/lib/cohttp/META")
Warning: missing package "cstruct-async":
Disabling package "cstruct.async".
(from "/home/yann/.opam/4.05.0/lib/cstruct/META")
Warning: missing package "cstruct-lwt":
Disabling package "cstruct.lwt".
(from "/home/yann/.opam/4.05.0/lib/cstruct/META")
Warning: missing package "cstruct-unix":
Disabling package "cstruct.unix".
(from "/home/yann/.opam/4.05.0/lib/cstruct/META")
Warning: missing package "js_of_ocaml-ppx_deriving_json":
Disabling package "js_of_ocaml-ppx.deriving".
(from "/home/yann/.opam/4.05.0/lib/js_of_ocaml-ppx/META")
Warning: missing package "js_of_ocaml-ocamlbuild":
Disabling package "js_of_ocaml.ocamlbuild".
(from "/home/yann/.opam/4.05.0/lib/js_of_ocaml/META")
----- 27 project warnings -----
Warning: in package grading, comp_requires dependency "ppx_ocplib_i18n" not declared
Warning: in package grading, comp_requires dependency "ppx_metaquot" not declared
Warning: in package grading, comp_requires dependency "ppx_ocplib_i18n" not declared
Warning: in package grading, comp_requires dependency "ppx_metaquot" not declared
Warning: in package grading, comp_requires dependency "ppx_ocplib_i18n" not declared
Warning: in package grading, comp_requires dependency "ppx_metaquot" not declared
Warning: in package testing, comp_requires dependency "ppx_metaquot" not declared
Warning: in package testing, comp_requires dependency "ppx_metaquot" not declared
Warning: in package testing, comp_requires dependency "ppx_metaquot" not declared
Warning: in package testing, comp_requires dependency "ppx_metaquot" not declared
Warning: in package testing, comp_requires dependency "ppx_metaquot" not declared
Warning: in package learnocaml-state, comp_requires dependency "ppx_ocplib_i18n" not declared
Warning: in package learnocaml-state, comp_requires dependency "ppx_ocplib_i18n" not declared
Warning: in package learnocaml-state, comp_requires dependency "ppx_ocplib_i18n" not declared
Warning: in package learnocaml-state, comp_requires dependency "ppx_ocplib_i18n" not declared
Warning: in package ocplib_i18n, comp_requires dependency "ppx_ocplib_i18n" not declared
Warning: in package ocplib_i18n, comp_requires dependency "ppx_ocplib_i18n" not declared
Warning: missing package "ace":
Disabling package "learnocaml-toplevel".
(from "/home/yann/git/teaching/learn-ocaml/learn-ocaml/src/toplevel/build.ocp")
Warning: missing package "learnocaml-toplevel":
Disabling package "learnocaml-main".
(from "/home/yann/git/teaching/learn-ocaml/learn-ocaml/src/app/build.ocp")
Warning: missing package "learnocaml-toplevel":
Disabling package "learnocaml-exercise".
(from "/home/yann/git/teaching/learn-ocaml/learn-ocaml/src/app/build.ocp")
Warning: missing package "learnocaml-app-common":
Disabling package "learnocaml-main".
(from "/home/yann/git/teaching/learn-ocaml/learn-ocaml/src/app/build.ocp")
Warning: missing package "learnocaml-app-common":
Disabling package "learnocaml-exercise".
(from "/home/yann/git/teaching/learn-ocaml/learn-ocaml/src/app/build.ocp")
Warning: missing package "learnocaml-toplevel":
Disabling package "learnocaml-app-common".
(from "/home/yann/git/teaching/learn-ocaml/learn-ocaml/src/app/build.ocp")
Warning: missing package "ocp-indent-nlfork.lib":
Disabling package "learnocaml-toplevel".
(from "/home/yann/git/teaching/learn-ocaml/learn-ocaml/src/toplevel/build.ocp")
Warning: missing package "ace":
Disabling package "learnocaml-main".
(from "/home/yann/git/teaching/learn-ocaml/learn-ocaml/src/app/build.ocp")
Warning: missing package "ace":
Disabling package "learnocaml-exercise".
(from "/home/yann/git/teaching/learn-ocaml/learn-ocaml/src/app/build.ocp")
Warning: missing package "ocp-indent-nlfork.lib":
Disabling package "ace".
(from "/home/yann/git/teaching/learn-ocaml/learn-ocaml/src/ace-lib/build.ocp")
Compiler: ocaml 4.05.0
Warning: 10 old env warnings were not printed (add --env-warnings)
Warning: 27 old project warnings were not printed (add --project-warnings)
Since a lot of packages are disabled, the platform is dysfunctional.
Currently static/js/mathjax/fonts/HTML-CSS/TeX/*
doesn't exist, so mathjax processing stalls until it finds a fallback font
descr.en.html
, descr.fr.html
...)template.ml
or others may contain strings; test.ml
even generates reports that should probably be localised too. Some templating mechanism / inclusion of the ppx ? This is not easy to solve ; also, if we even want to localise values names, I think dumplication remains the better option.Create a page per student :
Empty nicknames are useless. Imagine a student that has lost his token, the nickname is the only way to recover it.
Dear learn-ocaml developers,
Just trying reinstalling learn-ocaml from scratch, I get the error
cp: cannot stat '_obuild/*/learnocaml-main.js': No such file or directory
~/git/learn-ocaml$ opam config exec -- make
Warning: file "/home/caml/git/learn-ocaml/_obuild/ocp-build.root" does not exist. Creating with default values.
Compiler: ocaml 4.05.0
----- 12 env warnings -----
Warning: inexistent package directory:
"/home/caml/.opam/4.05.0/lib/ocp-indent/dynlink"
Disabling package "ocp-indent.dynlink".
(from "/home/caml/.opam/4.05.0/lib/ocp-indent/META")
Warning: missing package "cohttp-async":
Disabling package "cohttp.async".
(from "/home/caml/.opam/4.05.0/lib/cohttp/META")
Warning: missing package "cohttp-lwt-js":
Disabling package "cohttp.js".
(from "/home/caml/.opam/4.05.0/lib/cohttp/META")
Warning: missing package "cohttp-top":
Disabling package "cohttp.top".
(from "/home/caml/.opam/4.05.0/lib/cohttp/META")
Warning: missing package "cstruct-async":
Disabling package "cstruct.async".
(from "/home/caml/.opam/4.05.0/lib/cstruct/META")
Warning: missing package "cstruct-lwt":
Disabling package "cstruct.lwt".
(from "/home/caml/.opam/4.05.0/lib/cstruct/META")
Warning: missing package "cstruct-unix":
Disabling package "cstruct.unix".
(from "/home/caml/.opam/4.05.0/lib/cstruct/META")
Warning: missing package "js_of_ocaml-ppx_deriving_json":
Disabling package "js_of_ocaml-ppx.deriving".
(from "/home/caml/.opam/4.05.0/lib/js_of_ocaml-ppx/META")
Warning: missing package "js_of_ocaml-ocamlbuild":
Disabling package "js_of_ocaml.ocamlbuild".
(from "/home/caml/.opam/4.05.0/lib/js_of_ocaml/META")
Warning: missing package "ppx_deriving":
Disabling package "ppx_fields_conv".
(from "/home/caml/.opam/4.05.0/lib/ppx_fields_conv/META")
Warning: missing package "ppx_deriving":
Disabling package "ppx_sexp_conv".
(from "/home/caml/.opam/4.05.0/lib/ppx_sexp_conv/META")
Warning: missing package "ppx_deriving":
Disabling package "ppx_type_conv".
(from "/home/caml/.opam/4.05.0/lib/ppx_type_conv/META")
----- 14 project warnings -----
Warning: in package grading, comp_requires dependency "ppx_metaquot" not declared
Warning: in package grading, comp_requires dependency "ppx_metaquot" not declared
Warning: in package grading, comp_requires dependency "ppx_metaquot" not declared
Warning: in package testing, comp_requires dependency "ppx_metaquot" not declared
Warning: in package testing, comp_requires dependency "ppx_metaquot" not declared
Warning: in package testing, comp_requires dependency "ppx_metaquot" not declared
Warning: in package testing, comp_requires dependency "ppx_metaquot" not declared
Warning: in package testing, comp_requires dependency "ppx_metaquot" not declared
Warning: missing package "learnocaml-app-common":
Disabling package "learnocaml-main".
(from "/home/caml/git/learn-ocaml/src/app/build.ocp")
Warning: missing package "ocplib-json-typed.browser":
Disabling package "learnocaml-grader-worker".
(from "/home/caml/git/learn-ocaml/src/grader/build.ocp")
Warning: missing package "learnocaml-app-common":
Disabling package "learnocaml-exercise".
(from "/home/caml/git/learn-ocaml/src/app/build.ocp")
Warning: missing package "grading-jsoo":
Disabling package "learnocaml-exercise".
(from "/home/caml/git/learn-ocaml/src/app/build.ocp")
Warning: missing package "ocplib-json-typed.browser":
Disabling package "learnocaml-app-common".
(from "/home/caml/git/learn-ocaml/src/app/build.ocp")
Warning: missing package "ocplib-json-typed.browser":
Disabling package "grading-jsoo".
(from "/home/caml/git/learn-ocaml/src/grader/build.ocp")
0.00s _obuild/toploop_results/toploop_results.mlimods [ done ]
0.00s _obuild/ty/ty.mlimods [ done ]
0.01s _obuild/toploop_results/toploop_results.cmi [ done ]
0.01s _obuild/toploop_results/toploop_results.mlmods [ done ]
0.01s _obuild/ty/ty.cmi [ done ]
0.03s _obuild/toploop/_temp/toploop_ext.mlipp [ done ]
0.00s _obuild/toploop/toploop_ext.mlimods [ done ]
0.02s _obuild/toploop_results/toploop_results.cmo [ done ]
0.02s _obuild/ty/ty.mlmods [ done ]
0.00s _obuild/toploop_results/toploop_results.cma [ done ]
0.00s _obuild/ppx_metaquot/ppx_metaquot_main.mlmods [ done ]
0.03s _obuild/ppx_metaquot_lib/ppx_metaquot.mlmods [ done ]
0.02s _obuild/toploop/toploop_ext.cmi [ done ]
0.02s _obuild/ty/ty.cmo [ done ]
0.00s _obuild/ty/ty.cma [ done ]
0.01s _obuild/toploop_unix/toploop_unix.mlimods [ done ]
0.01s src/grader/embedded_cmis.ml [ done ]
0.02s _obuild/genlifter/genlifter.mlmods [ done ]
0.01s _obuild/toploop_unix/toploop_unix.mlmods [ done ]
0.01s _obuild/toploop_unix/toploop_unix.cmi [ done ]
0.09s _obuild/toploop/_temp/toploop_ext.mlpp [ done ]
0.03s _obuild/embedded_cmis/embedded_cmis.mlmods [ done ]
0.01s _obuild/toploop/toploop_ext.mlmods [ done ]
0.03s _obuild/toploop_unix/toploop_unix.cmo [ done ]
0.00s _obuild/toploop_unix/toploop_unix.cma [ done ]
0.03s _obuild/embedded_cmis/embedded_cmis.cmo [ done ]
0.07s _obuild/genlifter/genlifter.cmo [ done ]
0.00s _obuild/embedded_cmis/embedded_cmis.cma [ done ]
0.00s _obuild/xor/xor.mlimods [ done ]
0.01s _obuild/xor/xor.cmi [ done ]
0.00s _obuild/xor/xor.mlmods [ done ]
0.05s _obuild/learnocaml-toplevel-history/_temp/learnocaml_toplevel_history.mlipp [ done ]
0.00s _obuild/learnocaml-toplevel-history/learnocaml_toplevel_history.mlimods [ done ]
0.10s _obuild/learnocaml-toplevel-history/_temp/learnocaml_toplevel_history.mlpp [ done ]
0.04s _obuild/genlifter/genlifter.byte [ done ]
0.01s _obuild/learnocaml-toplevel-history/learnocaml_toplevel_history.mlmods [ done ]
0.01s _obuild/learnocaml-toplevel-history/learnocaml_toplevel_history.cmi [ done ]
0.03s _obuild/xor/xor.cmo [ done ]
0.01s _obuild/xor/xor.cma [ done ]
0.10s _obuild/toploop/toploop_ext.cmo [ done ]
0.02s _obuild/learnocaml-toplevel-history/learnocaml_toplevel_history.cmo [ done ]
0.01s _obuild/toploop/toploop.cma [ done ]
0.01s _obuild/learnocaml-toplevel-history/learnocaml-toplevel-history.cma [ done ]
0.02s _obuild/learnocaml-repository/learnocaml_index.mlimods [ done ]
0.01s _obuild/learnocaml-repository/learnocaml_index.mlmods [ done ]
0.04s _obuild/xor/xor.cmx [ done ]
0.01s _obuild/learnocaml-repository/learnocaml_lesson.mlimods [ done ]
0.01s _obuild/learnocaml-repository/learnocaml_index.cmi [ done ]
0.01s _obuild/learnocaml-repository/learnocaml_lesson.mlmods [ done ]
0.01s _obuild/learnocaml-repository/learnocaml_lesson.cmi [ done ]
0.01s _obuild/learnocaml-repository/learnocaml_tutorial.mlimods [ done ]
0.02s _obuild/xor/xor.cmxa [ done ]
0.01s _obuild/learnocaml-repository/learnocaml_tutorial.cmi [ done ]
0.02s _obuild/learnocaml-repository/learnocaml_lesson.cmo [ done ]
0.01s _obuild/learnocaml-repository/learnocaml_tutorial.mlmods [ done ]
0.01s _obuild/learnocaml-repository/learnocaml_exercise.mlimods [ done ]
0.09s src/ppx-metaquot/ast_lifter.ml [ done ]
0.04s _obuild/learnocaml-repository/learnocaml_index.cmo [ done ]
0.02s _obuild/learnocaml-repository/learnocaml_tutorial.cmo [ done ]
0.02s _obuild/learnocaml-repository/learnocaml_exercise.cmi [ done ]
0.01s _obuild/learnocaml-repository/learnocaml_exercise.mlmods [ done ]
0.01s _obuild/learnocaml-state/learnocaml_report.mlimods [ done ]
0.01s _obuild/learnocaml-state/learnocaml_report.mlmods [ done ]
0.02s _obuild/ppx_metaquot_lib/ast_lifter.mlmods [ done ]
0.01s _obuild/learnocaml-state/learnocaml_exercise_state.mlimods [ done ]
0.02s _obuild/learnocaml-state/learnocaml_report.cmi [ done ]
0.07s _obuild/xor/xor.cmxa [ done ]
0.02s _obuild/learnocaml-state/learnocaml_exercise_state.mlmods [ done ]
0.04s _obuild/learnocaml-repository/learnocaml_exercise.cmo [ done ]
0.01s _obuild/learnocaml-state/learnocaml_exercise_state.cmi [ done ]
0.01s _obuild/learnocaml-sync/learnocaml_sync.mlimods [ done ]
0.01s _obuild/learnocaml-repository/learnocaml-repository.cma [ done ]
0.00s _obuild/learnocaml-sync/learnocaml_sync.mlmods [ done ]
0.02s _obuild/learnocaml-state/learnocaml_exercise_state.cmo [ done ]
0.02s _obuild/learnocaml-sync/learnocaml_sync.cmi [ done ]
0.02s _obuild/testing/introspection_intf.mlimods [ done ]
0.01s _obuild/testing/introspection.mlimods [ done ]
0.02s _obuild/learnocaml-sync/learnocaml_sync.cmo [ done ]
0.01s _obuild/testing/test_lib.mlimods [ done ]
0.01s _obuild/learnocaml-sync/learnocaml-sync.cma [ done ]
0.02s _obuild/testing/introspection.mlmods [ done ]
0.07s _obuild/learnocaml-state/learnocaml_report.cmo [ done ]
0.01s _obuild/grading/grading.mlimods [ done ]
0.01s _obuild/learnocaml-state/learnocaml-state.cma [ done ]
0.02s _obuild/grading/grading.mlmods [ done ]
0.03s _obuild/testing/test_lib.mlmods [ done ]
0.14s _obuild/ppx_metaquot_lib/ast_lifter.cmo [ done ]
0.03s _obuild/jsutils/_temp/lwt_request.mlipp [ done ]
0.06s _obuild/jsutils/_temp/lwt_request.mlpp [ done ]
0.02s _obuild/jsutils/lwt_request.mlimods [ done ]
0.02s _obuild/jsutils/lwt_request.cmi [ done ]
0.02s _obuild/jsutils/lwt_request.mlmods [ done ]
0.09s _obuild/ppx_metaquot_lib/ppx_metaquot.cmo [ done ]
0.02s _obuild/ace/ace_types.mlimods [ done ]
0.01s _obuild/ppx_metaquot_lib/ppx_metaquot_lib.cma [ done ]
0.16s _obuild/jsutils/_temp/js_utils.mlipp [ done ]
0.01s _obuild/jsutils/js_utils.mlimods [ done ]
0.22s _obuild/ace/_temp/ace.mlpp [ done ]
0.25s _obuild/ace/ace_types.cmi [ done ]
0.01s _obuild/ace/ace.mlmods [ done ]
0.10s _obuild/ace/_temp/ace.mlipp [ done ]
0.01s _obuild/ace/ace.mlimods [ done ]
0.34s _obuild/jsutils/js_utils.cmi [ done ]
0.15s _obuild/ace/_temp/ocaml_mode.mlpp [ done ]
0.09s _obuild/jsutils/lwt_request.cmo [ done ]
0.05s _obuild/ace/_temp/ocaml_mode.mlipp [ done ]
0.02s _obuild/ace/ocaml_mode.mlmods [ done ]
0.01s _obuild/ace/ocaml_mode.mlimods [ done ]
0.02s _obuild/learnocaml-toplevel/learnocaml_toplevel_worker_messages.mlimods [ done ]
0.65s _obuild/jsutils/_temp/js_utils.mlpp [ done ]
0.03s _obuild/learnocaml-toplevel/learnocaml_toplevel_worker_messages.cmi [ done ]
0.21s _obuild/ace/ace.cmi [ done ]
0.05s _obuild/learnocaml-toplevel/_temp/learnocaml_toplevel_worker_caller.mlipp [ done ]
0.08s _obuild/jsutils/js_utils.mlmods [ done ]
0.11s _obuild/learnocaml-toplevel/_temp/learnocaml_toplevel_worker_caller.mlpp [ done ]
0.01s _obuild/learnocaml-toplevel/learnocaml_toplevel_worker_caller.mlimods [ done ]
0.01s _obuild/learnocaml-toplevel/learnocaml_toplevel_worker_caller.cmi [ done ]
0.02s _obuild/learnocaml-toplevel/learnocaml_toplevel_worker_caller.mlmods [ done ]
0.17s _obuild/ace/ocaml_mode.cmi [ done ]
0.85s _obuild/ppx_metaquot_lib/ast_lifter.cmx [ done ]
0.24s _obuild/learnocaml-toplevel/learnocaml_toplevel_worker_caller.cmo [ done ]
0.14s _obuild/ppx_metaquot_lib/ppx_metaquot.cmx [ done ]
0.02s _obuild/ppx_metaquot_lib/ppx_metaquot_lib.cmxa [ done ]
0.06s _obuild/ppx_metaquot_lib/ppx_metaquot_lib.cmxa [ done ]
0.24s _obuild/ace/ocaml_mode.cmo [ done ]
0.02s _obuild/ppx_metaquot/ppx_metaquot_main.cmx [ done ]
0.16s _obuild/learnocaml-toplevel/_temp/learnocaml_toplevel_output.mlpp [ done ]
0.04s _obuild/learnocaml-toplevel/_temp/learnocaml_toplevel_output.mlipp [ done ]
0.47s _obuild/ace/ace.cmo [ done ]
0.01s _obuild/learnocaml-toplevel/learnocaml_toplevel_output.mlimods [ done ]
0.01s _obuild/learnocaml-toplevel/learnocaml_toplevel_output.mlmods [ done ]
0.01s _obuild/ace/ace.cma [ done ]
0.06s _obuild/learnocaml-toplevel/_temp/learnocaml_toplevel_input.mlipp [ done ]
0.02s _obuild/learnocaml-toplevel/learnocaml_toplevel_input.mlimods [ done ]
0.10s _obuild/learnocaml-toplevel/learnocaml_toplevel_output.cmi [ done ]
0.12s _obuild/learnocaml-toplevel/_temp/learnocaml_toplevel_input.mlpp [ done ]
0.01s _obuild/learnocaml-toplevel/learnocaml_toplevel_input.mlmods [ done ]
0.11s _obuild/learnocaml-toplevel/learnocaml_toplevel_input.cmi [ done ]
0.20s _obuild/learnocaml-toplevel/_temp/learnocaml_toplevel.mlpp [ done ]
0.10s _obuild/learnocaml-toplevel/_temp/learnocaml_toplevel.mlipp [ done ]
0.02s _obuild/learnocaml-toplevel/learnocaml_toplevel.mlimods [ done ]
0.58s _obuild/ppx_metaquot/ppx_metaquot.asm [ done ]
0.02s _obuild/testing/introspection_intf.cmi [ done ]
0.05s _obuild/testing/introspection.cmi [ done ]
0.20s _obuild/learnocaml-toplevel/learnocaml_toplevel.cmi [ done ]
0.63s _obuild/learnocaml-toplevel/learnocaml_toplevel_output.cmo [ done ]
0.16s _obuild/testing/introspection.cmo [ done ]
0.02s _obuild/grading/grading.cmi [ done ]
0.10s _obuild/testing/test_lib.cmi [ done ]
0.01s _obuild/learnocaml-toplevel/learnocaml_toplevel.mlmods [ done ]
0.01s src/grader/embedded_grading_cmis.ml [ done ]
0.03s _obuild/grading/embedded_grading_cmis.mlmods [ done ]
0.06s _obuild/grading/grading.cmo [ done ]
0.03s _obuild/grading/embedded_grading_cmis.cmo [ done ]
0.01s _obuild/grading/grading.cma [ done ]
0.15s _obuild/toploop_jsoo/_temp/toploop_jsoo.mlpp [ done ]
0.85s _obuild/learnocaml-toplevel/learnocaml_toplevel_input.cmo [ done ]
0.06s _obuild/toploop_jsoo/_temp/toploop_jsoo.mlipp [ done ]
0.01s _obuild/toploop_jsoo/toploop_jsoo.mlmods [ done ]
0.01s _obuild/learnocaml-toplevel-worker/learnocaml_toplevel_worker_messages.mlimods [ done ]
0.02s _obuild/toploop_jsoo/toploop_jsoo.mlimods [ done ]
0.02s _obuild/toploop_jsoo/toploop_jsoo.cmi [ done ]
0.04s _obuild/learnocaml-toplevel-worker/learnocaml_toplevel_worker_messages.cmi [ done ]
0.07s _obuild/toploop_jsoo/toploop_jsoo.cmo [ done ]
0.40s _obuild/testing/test_lib.cmo [ done ]
0.00s _obuild/testing/testing.cma [ done ]
0.02s _obuild/toploop_jsoo/toploop_jsoo.cma [ done ]
0.02s _obuild/grading-cli/grading_cli.mlimods [ done ]
0.02s _obuild/learnocaml-toplevel-worker/_temp/learnocaml_toplevel_worker_main.mlipp [ done ]
0.01s _obuild/grading-cli/grading_cli.cmi [ done ]
0.01s _obuild/grading-cli/grading_cli.mlmods [ done ]
0.11s _obuild/learnocaml-toplevel-worker/_temp/learnocaml_toplevel_worker_main.mlpp [ done ]
0.01s _obuild/learnocaml-toplevel-worker/learnocaml_toplevel_worker_main.mlmods [ done ]
0.03s _obuild/learnocaml-toplevel-worker/learnocaml_toplevel_worker_main.mlimods [ done ]
0.01s _obuild/learnocaml-toplevel-worker/learnocaml_toplevel_worker_main.cmi [ done ]
0.02s _obuild/grading-cli/grader_cli.mlmods [ done ]
0.03s _obuild/grading-cli/grading_cli.cmo [ done ]
0.01s _obuild/learnocaml-grader/grader_cli_main.mlmods [ done ]
0.01s _obuild/learnocaml-process-repository/learnocaml_process_exercise_repository.mlmods [ done ]
0.01s _obuild/learnocaml-process-repository/learnocaml_tutorial_parser.mlimods [ done ]
0.01s _obuild/learnocaml-process-repository/learnocaml_tutorial_parser.cmi [ done ]
0.48s _obuild/learnocaml-toplevel/learnocaml_toplevel.cmo [ done ]
0.06s _obuild/grading-cli/grader_cli.cmo [ done ]
0.01s _obuild/learnocaml-toplevel/learnocaml-toplevel.cma [ done ]
0.01s _obuild/grading-cli/grading-cli.cma [ done ]
0.02s _obuild/learnocaml-process-repository/learnocaml_tutorial_parser.mlmods [ done ]
0.01s _obuild/learnocaml-grader/grader_cli_main.cmo [ done ]
0.09s _obuild/learnocaml-toplevel-worker/learnocaml_toplevel_worker_main.cmo [ done ]
0.03s _obuild/learnocaml-process-repository/learnocaml_process_tutorial_repository.mlmods [ done ]
0.08s _obuild/learnocaml-process-repository/learnocaml_process_exercise_repository.cmo [ done ]
0.01s _obuild/learnocaml-process-repository/learnocaml_process_repository_main.mlmods [ done ]
0.09s _obuild/learnocaml-grader/learnocaml-grader.byte [ done ]
0.01s _obuild/learnocaml-tutorial-reader/learnocaml_tutorial_parser.mlimods [ done ]
0.06s _obuild/learnocaml-process-repository/learnocaml_process_tutorial_repository.cmo [ done ]
0.02s _obuild/learnocaml-tutorial-reader/learnocaml_tutorial_parser.mlmods [ done ]
0.02s _obuild/learnocaml-tutorial-reader/learnocaml_tutorial_parser.cmi [ done ]
0.01s _obuild/learnocaml-tutorial-reader/learnocaml_tutorial_reader_main.mlmods [ done ]
0.13s _obuild/learnocaml-process-repository/learnocaml_tutorial_parser.cmo [ done ]
0.04s _obuild/learnocaml-process-repository/learnocaml_process_repository_main.cmo [ done ]
0.02s _obuild/learnocaml-simple-server/learnocaml_simple_server.mlmods [ done ]
0.04s _obuild/learnocaml-tutorial-reader/learnocaml_tutorial_reader_main.cmo [ done ]
0.08s _obuild/learnocaml-simple-server/learnocaml_simple_server.cmo [ done ]
0.10s _obuild/learnocaml-process-repository/learnocaml-process-repository.byte [ done ]
0.13s _obuild/learnocaml-tutorial-reader/learnocaml_tutorial_parser.cmo [ done ]
0.04s _obuild/learnocaml-simple-server/learnocaml-simple-server.byte [ done ]
0.08s _obuild/learnocaml-tutorial-reader/learnocaml-tutorial-reader.byte [ done ]
2.66s _obuild/jsutils/js_utils.cmo [ done ]
0.00s _obuild/jsutils/jsutils.cma [ done ]
0.05s _obuild/learnocaml-toplevel-worker/learnocaml-toplevel-worker.byte [ done ]
18.88s _obuild/learnocaml-toplevel-worker/learnocaml-toplevel-worker.js [ done ]
-- stderr for ...-worker/learnocaml-toplevel-worker.js --
warning: overriding primitive "caml_ephe_key_offset"
old: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:25
new: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:25
warning: overriding primitive "caml_ephe_data_offset"
old: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:29
new: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:29
warning: overriding primitive "caml_weak_create"
old: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:33
new: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:33
warning: overriding primitive "caml_weak_set"
old: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:41
new: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:41
warning: overriding primitive "caml_weak_get"
old: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:49
new: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:49
warning: overriding primitive "caml_weak_get_copy"
old: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:56
new: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:56
warning: overriding primitive "caml_weak_check"
old: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:68
new: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:68
warning: overriding primitive "caml_weak_blit"
old: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:77
new: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:77
warning: overriding primitive "caml_ephe_create"
old: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:88
new: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:88
warning: overriding primitive "caml_ephe_blit_key"
old: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:92
new: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:92
warning: overriding primitive "caml_ephe_get_key"
old: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:96
new: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:96
warning: overriding primitive "caml_ephe_get_key_copy"
old: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:100
new: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:100
warning: overriding primitive "caml_ephe_check_key"
old: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:104
new: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:104
warning: overriding primitive "caml_ephe_set_key"
old: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:108
new: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:108
warning: overriding primitive "caml_ephe_unset_key"
old: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:114
new: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:114
warning: overriding primitive "caml_ephe_blit_data"
old: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:120
new: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:120
warning: overriding primitive "caml_ephe_get_data"
old: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:128
new: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:128
warning: overriding primitive "caml_ephe_get_data_copy"
old: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:138
new: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:138
warning: overriding primitive "caml_ephe_set_data"
old: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:149
new: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:149
warning: overriding primitive "caml_ephe_unset_data"
old: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:157
new: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:157
warning: overriding primitive "caml_ephe_check_data"
old: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:165
new: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:165
There are some missing primitives
Dummy implementations (raising 'Failure' exception) will be used if they are not available at runtime.
You can prevent the generation of dummy implementations with the commandline option '--disable genprim'
Missing primitives:
caml_sys_time_include_children
Build Successful in 22.92s. 210 jobs (parallelism 1.5x), 237 files generated.
make[1]: Entering directory '/home/caml/git/learn-ocaml/static'
sed "s/#000000/#000/g" icon_upload_src.svg > icon_upload_black.svg
sed "s/#000000/#000/g" icon_run_src.svg > icon_run_black.svg
sed "s/#000000/#000/g" icon_typecheck_src.svg > icon_typecheck_black.svg
sed "s/#000000/#000/g" icon_reload_src.svg > icon_reload_black.svg
sed "s/#000000/#000/g" icon_sync_src.svg > icon_sync_black.svg
sed "s/#000000/#000/g" icon_left_src.svg > icon_left_black.svg
sed "s/#000000/#000/g" icon_cleanup_src.svg > icon_cleanup_black.svg
sed "s/#000000/#000/g" icon_save_src.svg > icon_save_black.svg
sed "s/#000000/#000/g" icon_right_src.svg > icon_right_black.svg
sed "s/#000000/#000/g" icon_list_src.svg > icon_list_black.svg
sed "s/#000000/#000/g" icon_down_src.svg > icon_down_black.svg
sed "s/#000000/#000/g" icon_menu_src.svg > icon_menu_black.svg
sed "s/#000000/#000/g" icon_download_src.svg > icon_download_black.svg
sed "s/#000000/#000/g" icon_up_src.svg > icon_up_black.svg
sed "s/#000000/#FFF/g" icon_upload_src.svg > icon_upload_white.svg
sed "s/#000000/#FFF/g" icon_run_src.svg > icon_run_white.svg
sed "s/#000000/#FFF/g" icon_typecheck_src.svg > icon_typecheck_white.svg
sed "s/#000000/#FFF/g" icon_reload_src.svg > icon_reload_white.svg
sed "s/#000000/#FFF/g" icon_sync_src.svg > icon_sync_white.svg
sed "s/#000000/#FFF/g" icon_left_src.svg > icon_left_white.svg
sed "s/#000000/#FFF/g" icon_cleanup_src.svg > icon_cleanup_white.svg
sed "s/#000000/#FFF/g" icon_save_src.svg > icon_save_white.svg
sed "s/#000000/#FFF/g" icon_right_src.svg > icon_right_white.svg
sed "s/#000000/#FFF/g" icon_list_src.svg > icon_list_white.svg
sed "s/#000000/#FFF/g" icon_down_src.svg > icon_down_white.svg
sed "s/#000000/#FFF/g" icon_menu_src.svg > icon_menu_white.svg
sed "s/#000000/#FFF/g" icon_download_src.svg > icon_download_white.svg
sed "s/#000000/#FFF/g" icon_up_src.svg > icon_up_white.svg
sed "s/#000000/#222/g" icon_upload_src.svg > icon_upload_dark.svg
sed "s/#000000/#222/g" icon_run_src.svg > icon_run_dark.svg
sed "s/#000000/#222/g" icon_typecheck_src.svg > icon_typecheck_dark.svg
sed "s/#000000/#222/g" icon_reload_src.svg > icon_reload_dark.svg
sed "s/#000000/#222/g" icon_sync_src.svg > icon_sync_dark.svg
sed "s/#000000/#222/g" icon_left_src.svg > icon_left_dark.svg
sed "s/#000000/#222/g" icon_cleanup_src.svg > icon_cleanup_dark.svg
sed "s/#000000/#222/g" icon_save_src.svg > icon_save_dark.svg
sed "s/#000000/#222/g" icon_right_src.svg > icon_right_dark.svg
sed "s/#000000/#222/g" icon_list_src.svg > icon_list_dark.svg
sed "s/#000000/#222/g" icon_down_src.svg > icon_down_dark.svg
sed "s/#000000/#222/g" icon_menu_src.svg > icon_menu_dark.svg
sed "s/#000000/#222/g" icon_download_src.svg > icon_download_dark.svg
sed "s/#000000/#222/g" icon_up_src.svg > icon_up_dark.svg
sed "s/#000000/#EEE/g" icon_upload_src.svg > icon_upload_light.svg
sed "s/#000000/#EEE/g" icon_run_src.svg > icon_run_light.svg
sed "s/#000000/#EEE/g" icon_typecheck_src.svg > icon_typecheck_light.svg
sed "s/#000000/#EEE/g" icon_reload_src.svg > icon_reload_light.svg
sed "s/#000000/#EEE/g" icon_sync_src.svg > icon_sync_light.svg
sed "s/#000000/#EEE/g" icon_left_src.svg > icon_left_light.svg
sed "s/#000000/#EEE/g" icon_cleanup_src.svg > icon_cleanup_light.svg
sed "s/#000000/#EEE/g" icon_save_src.svg > icon_save_light.svg
sed "s/#000000/#EEE/g" icon_right_src.svg > icon_right_light.svg
sed "s/#000000/#EEE/g" icon_list_src.svg > icon_list_light.svg
sed "s/#000000/#EEE/g" icon_down_src.svg > icon_down_light.svg
sed "s/#000000/#EEE/g" icon_menu_src.svg > icon_menu_light.svg
sed "s/#000000/#EEE/g" icon_download_src.svg > icon_download_light.svg
sed "s/#000000/#EEE/g" icon_up_src.svg > icon_up_light.svg
make[1]: Leaving directory '/home/caml/git/learn-ocaml/static'
cp static/* /home/caml/git/learn-ocaml/www
cp /home/caml/git/learn-ocaml/demo-repository/lessons/* /home/caml/git/learn-ocaml/www
cp: cannot stat '_obuild/*/learnocaml-main.js': No such file or directory
Makefile:24: recipe for target 'build' failed
make: *** [build] Error 1
~/git/learn-ocaml$ ls _obuild/*/*.js
_obuild/learnocaml-toplevel-worker/learnocaml-toplevel-worker.js
~/git/learn-ocaml$ cat /etc/os-release
NAME="Ubuntu"
VERSION="16.04.4 LTS (Xenial Xerus)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 16.04.4 LTS"
VERSION_ID="16.04"
HOME_URL="http://www.ubuntu.com/"
SUPPORT_URL="http://help.ubuntu.com/"
BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"
VERSION_CODENAME=xenial
UBUNTU_CODENAME=xenial
Can you reproduce this error?
I'm not 100% sure but it seems to be due to the recent update of the ocplib-json-typed.browser
dependency… (according to the warnings above).
Kind regards, Erik
(I open this issue for tracking purpose, and possible discussion. It has been orginally reported by @lyrm )
The order defined in a index.json
is not kept when processing the repository. This is due to how exercises are represented internaly:
I plan to fix it in #64.
When I define an exercise with some particular conditions for success, I’m not sure that my test functions correspond to what I want to do. For example, I have an exercise asking to sort a list in linear time. To be sure that my measurement is correct, I want to define and grade several answers for which I know what is false.
I think of it this way:
You add files wrong_solution_{1..n}.ml
to the exercise. They are different versions of solution.ml
, with a few mistakes. In our example, a function that is not linear in time. When building or grading, their essays (the wrong_solutions) are graded. They should not get full points. Otherwise, an error is diplayed. There can also be an optional file wrong_solutions.expected_points
with some syntax describing the points awaited for the essays (or a range).
This suggestion is a follow-up of #58 .
I’m opening it as an issue on Learn-OCaml because I think the automatic grading of wrong solutions should be integrated in the grader and/or build and activated in case there are files named wrong_solution_{1..n}
.
I was writing an exercise without copy/paste today (!) and I inadvertently wrote :
let exercise_1 =
Section (
[ Text "Variable: "; Code "n"],
test_variable [%ty float] "n" 10 )
There are actually 2 mistakes in this exercise but a learn-ocaml
command with as many options as possible (--display-outcomes
etc...) gives me:
Updating app at ./www
references (no changes)
(The previous extract code comes from a variables/test.ml
file and I have two exercises: variables
and references
)
So : no error message, nothing about variables
and no server launch....
The error causing this is that I forgot the colon in [%ty: float]
...
(After correction, I finally have the right error message for my second mistakes : 10
is not a float....)
Will it be possible to have nice error messages for this kind of stupid typos in Ty.ty
?
Hey,
It would be great if we could write exercise descriptions directly in Markdown. This is usually much easier to write, read and correct than HTML. Moreover, because it's much more limited than HTML, it forces exercises to look the same.
I don't think it is hard to add to the project, especially considering that it is already implemented in learnocaml_tutorial_parser.ml
. Here is a PR that tries to implement this feature if you are interested: #135.
Cheers,
It would be nice to have an option (learn-ocaml --pdf ?) which takes a list of exercise repertories and concatenate titles and [descr.html] or [descr.md] contents to generate a pdf. It can probably be easily done using Pandoc for example. I did not find the time to do it, so ... good luck !
With the current API of test_lib, fixed-arity primitives such as test_function_1
take as argument some _ Ty.ty
:
val test_function_1 : ?test: 'b tester -> …
('a -> 'b) Ty.ty -> string -> ('a * 'b * string * string) list -> Learnocaml_report.report
while the n-arity primitives take as argument some (_, _, _) prot
, the advantage of which being thus that the co-domain type 'ret
is clearly specified:
val test_function : ?test: 'ret tester -> …
(('ar -> 'row) Ty.ty, 'ar -> 'urow, 'ret) prot -> ('ar -> 'row) lookup ->
(('ar -> 'row, 'ar -> 'urow, 'ret) args * (unit -> 'ret)) list -> Learnocaml_report.report
In learn-ocaml-editor we decided to preferably rely on test_function
(and test_function_against
) to have more generic code, while providing notations to easily construct some term of type (('ar -> 'row, 'ar -> 'urow, 'ret) args * (unit -> 'ret)) list
.
The current bottleneck for specifying such test cases is that the syntax to construct a term of type (('ar -> 'row) Ty.ty, 'ar -> 'urow, 'ret) prot
is not very user-friendly. We thus obtain some code like this:
type test_qst_typed =
| TestAgainstSol :
{ name: string
; prot: (('ar -> 'row) Ty.ty, 'ar -> 'urow, 'ret) prot
; gen: int
; suite: ('ar -> 'row, 'ar -> 'urow, 'ret) args list } -> test_qst_typed
…
| TestSuite :
{ name: string
; prot: (('ar -> 'row) Ty.ty, 'ar -> 'urow, 'ret) prot
; suite: (('ar -> 'row, 'ar -> 'urow, 'ret) args * (unit -> 'ret)) list } -> test_qst_typed
let example_constr_sol =
TestAgainstSol
{ name = "min";
prot = (arg_ty [%ty: int] (last_ty [%ty: int] [%ty: int]));
gen = 4;
suite = []
}
The question is: would it be feasible to add to the test_lib API a facility to get a prot from a string representation of the type? Basically one of the two approaches would be OK for us:
[%prot: a -> b]
similar to [%ty: a -> b]
prot_of_string: string -> (('ar -> 'row) Ty.ty, 'ar -> 'urow, 'ret) prot
let example_constr_sol =
TestAgainstSol
{ name = "min";
prot = [%prot: int -> int -> int];
gen = 4;
suite = []
}
If I'm not mistaken, approach 1. could be implemented either directly, or by implementing 2. first and relying on it.
We already have a prototype implementation of a function parse_type : string -> string
that yields the following trace:
# let str = parse_type "int->(int->int)->int";;
val str : string = "arg_ty [%ty :int ] (last_ty [%ty :(int->int) ] [%ty :int ])"
Kind regards, Erik
Here is a little suggestion to improve exercise readability.
On paper, it is pretty usual for a group of exercises to share an introduction. To be able to do the same with learn-ocaml, a basic solution is to copy the introduction at the beginning of the first exercise but this makes this exercise less readable and then it is difficult to reach introduction from following exercises.
A more practical possibility could be to add a tab between the title of the exercise group and the first exercise tab (in exercises menu) that either links to a page with the corresponding text or can be unfold to read the introduction.
However, that would probably require to add a specific field in index.json and a file (.html ou .mk) in each exercise directory and break some retro-compatibility...
When working on an exercise after the assignment deadline has passed, clicking the Sync button results in an Internal Error (Not Found). It would be nice to have something more user-friendly.
Dear learn-ocaml developers,
During our work on learn-ocaml-editor, we are currently implementing a feature that generate a set of test cases (to basically scaffold test.ml from the specified solution.ml), and we are facing with the following question:
Is there an easy way to get the list of all types of all functions from some OCaml code stored in a string
? Basically an equivalent of ocamlc -i solution.ml
would be very OK, but we are unsure how to do it properly in jsoo...
Dear learn-ocaml developers,
Would it be easy to implement in learn-ocaml some auto-complete feature, similar to that of company
Emacs mode?
In particular, a feature that would be very convenient would be:
Module. …
,Module
fields and their type...(see this screenshot for an example in Emacs+Tuareg+Merlin+Company context)
What do you think about this?
It's easy for users to accidentally create duplicate tokens with the same nickname when logging in on different machines instead of reusing the same token to log in. The students then need to request for us to manually delete the extra tokens by removing them from the /sync folder, so that we can associate only the intended token with them when calculating their grades.
Would it be possible to have some better way of dealing with this, maybe allowing users to delete their own tokens, adding token deletion to the teacher activity, and/or having the option of giving a warning when a user tries to register a new token with a nickname that's already in use?
In the context of a large corpus of exercises, it will be useful to be able to build either one single exercise or every exercises except one. Will it be possible to add such an option ?
Which server requirements (RAM, CPUs, etc) should be allocated to learn-ocaml instances? I guess it depends on the number of users interacting with the platform.
We probably need a basic performance monitoring subsystem to collect information and to build solid answers to this question.
Dear learn-ocaml developers,
I tried to recompile learn-ocaml from scratch (on an Ubuntu LTS (16.04) environment) with OCaml 4.05.0:
make
fails with Error: Required module 'Condition' is unavailable
(cf. the output below).Do you have an idea of the cause of this error?
Kind regards,
Erik
Warning: file "/home/caml/git/learn-ocaml/_obuild/ocp-build.root" does not exist. Creating with default values. Compiler: ocaml 4.05.0 ----- 12 env warnings ----- Warning: inexistent package directory: "/home/caml/.opam/4.05.0/lib/ocp-indent/dynlink" Disabling package "ocp-indent.dynlink". (from "/home/caml/.opam/4.05.0/lib/ocp-indent/META") Warning: missing package "cohttp-async": Disabling package "cohttp.async". (from "/home/caml/.opam/4.05.0/lib/cohttp/META") Warning: missing package "cohttp-lwt-jsoo": Disabling package "cohttp.js". (from "/home/caml/.opam/4.05.0/lib/cohttp/META") Warning: missing package "cohttp-top": Disabling package "cohttp.top". (from "/home/caml/.opam/4.05.0/lib/cohttp/META") Warning: missing package "cstruct-async": Disabling package "cstruct.async". (from "/home/caml/.opam/4.05.0/lib/cstruct/META") Warning: missing package "cstruct-lwt": Disabling package "cstruct.lwt". (from "/home/caml/.opam/4.05.0/lib/cstruct/META") Warning: missing package "cstruct-unix": Disabling package "cstruct.unix". (from "/home/caml/.opam/4.05.0/lib/cstruct/META") Warning: missing package "js_of_ocaml-ppx_deriving_json": Disabling package "js_of_ocaml-ppx.deriving". (from "/home/caml/.opam/4.05.0/lib/js_of_ocaml-ppx/META") Warning: missing package "js_of_ocaml-ocamlbuild": Disabling package "js_of_ocaml.ocamlbuild". (from "/home/caml/.opam/4.05.0/lib/js_of_ocaml/META") Warning: missing package "ppx_deriving": Disabling package "ppx_fields_conv". (from "/home/caml/.opam/4.05.0/lib/ppx_fields_conv/META") Warning: missing package "ppx_deriving": Disabling package "ppx_sexp_conv". (from "/home/caml/.opam/4.05.0/lib/ppx_sexp_conv/META") Warning: missing package "ppx_deriving": Disabling package "ppx_type_conv". (from "/home/caml/.opam/4.05.0/lib/ppx_type_conv/META") ----- 8 project warnings ----- Warning: in package grading, comp_requires dependency "ppx_metaquot" not declared Warning: in package grading, comp_requires dependency "ppx_metaquot" not declared Warning: in package grading, comp_requires dependency "ppx_metaquot" not declared Warning: in package testing, comp_requires dependency "ppx_metaquot" not declared Warning: in package testing, comp_requires dependency "ppx_metaquot" not declared Warning: in package testing, comp_requires dependency "ppx_metaquot" not declared Warning: in package testing, comp_requires dependency "ppx_metaquot" not declared Warning: in package testing, comp_requires dependency "ppx_metaquot" not declared 0.00s _obuild/ty/ty.mlimods [ done ] 0.01s _obuild/toploop_results/toploop_results.mlmods [ done ] 0.01s _obuild/toploop_results/toploop_results.mlimods [ done ] 0.01s _obuild/ty/ty.mlmods [ done ] 0.01s _obuild/ty/ty.cmi [ done ] 0.01s _obuild/toploop_results/toploop_results.cmi [ done ] 0.01s _obuild/toploop_results/toploop_results.cmo [ done ] 0.00s _obuild/toploop_results/toploop_results.cma [ done ] 0.03s _obuild/toploop/_temp/toploop_ext.mlipp [ done ] 0.02s _obuild/ppx_metaquot_lib/ppx_metaquot.mlmods [ done ] 0.01s _obuild/ppx_metaquot/ppx_metaquot_main.mlmods [ done ] 0.02s _obuild/ty/ty.cmo [ done ] 0.01s _obuild/toploop/toploop_ext.mlimods [ done ] 0.01s _obuild/genlifter/genlifter.mlmods [ done ] 0.01s src/grader/embedded_cmis.ml [ done ] 0.01s _obuild/ty/ty.cma [ done ] 0.01s _obuild/toploop/toploop_ext.cmi [ done ] 0.01s _obuild/toploop_unix/toploop_unix.mlimods [ done ] 0.01s _obuild/toploop_unix/toploop_unix.mlmods [ done ] 0.03s _obuild/embedded_cmis/embedded_cmis.mlmods [ done ] 0.02s _obuild/toploop_unix/toploop_unix.cmi [ done ] 0.02s _obuild/toploop_unix/toploop_unix.cmo [ done ] 0.10s _obuild/toploop/_temp/toploop_ext.mlpp [ done ] 0.01s _obuild/toploop/toploop_ext.mlmods [ done ] 0.02s _obuild/toploop_unix/toploop_unix.cma [ done ] 0.04s _obuild/embedded_cmis/embedded_cmis.cmo [ done ] 0.01s _obuild/embedded_cmis/embedded_cmis.cma [ done ] 0.08s _obuild/genlifter/genlifter.cmo [ done ] 0.01s _obuild/xor/xor.mlimods [ done ] 0.03s _obuild/learnocaml-toplevel.../learnocaml_toplevel_history.mlipp [ done ] 0.08s _obuild/learnocaml-toplevel-.../learnocaml_toplevel_history.mlpp [ done ] 0.00s _obuild/learnocaml-toplev.../learnocaml_toplevel_history.mlimods [ done ] 0.01s _obuild/learnocaml-topleve.../learnocaml_toplevel_history.mlmods [ done ] 0.02s _obuild/xor/xor.cmi [ done ] 0.01s _obuild/learnocaml-toplevel-h.../learnocaml_toplevel_history.cmi [ done ] 0.01s _obuild/learnocaml-repository/learnocaml_index.mlimods [ done ] 0.01s _obuild/xor/xor.mlmods [ done ] 0.05s _obuild/genlifter/genlifter.byte [ done ] 0.02s _obuild/learnocaml-toplevel-h.../learnocaml_toplevel_history.cmo [ done ] 0.02s _obuild/learnocaml-repository/learnocaml_index.cmi [ done ] 0.07s _obuild/toploop/toploop_ext.cmo [ done ] 0.01s _obuild/learnocaml-toplevel-h.../learnocaml-toplevel-history.cma [ done ] 0.02s _obuild/xor/xor.cmo [ done ] 0.01s _obuild/toploop/toploop.cma [ done ] 0.01s _obuild/xor/xor.cma [ done ] 0.01s _obuild/learnocaml-repository/learnocaml_index.mlmods [ done ] 0.01s _obuild/learnocaml-repository/learnocaml_lesson.mlimods [ done ] 0.01s _obuild/learnocaml-repository/learnocaml_lesson.mlmods [ done ] 0.01s _obuild/learnocaml-repository/learnocaml_tutorial.mlimods [ done ] 0.04s _obuild/xor/xor.cmx [ done ] 0.02s _obuild/learnocaml-repository/learnocaml_lesson.cmi [ done ] 0.03s _obuild/learnocaml-repository/learnocaml_index.cmo [ done ] 0.01s _obuild/xor/xor.cmxa [ done ] 0.02s _obuild/learnocaml-repository/learnocaml_tutorial.cmi [ done ] 0.01s _obuild/learnocaml-repository/learnocaml_exercise.mlimods [ done ] 0.02s _obuild/learnocaml-repository/learnocaml_lesson.cmo [ done ] 0.02s _obuild/learnocaml-repository/learnocaml_tutorial.mlmods [ done ] 0.01s _obuild/learnocaml-repository/learnocaml_exercise.cmi [ done ] 0.01s _obuild/learnocaml-repository/learnocaml_exercise.mlmods [ done ] 0.01s _obuild/learnocaml-state/learnocaml_report.mlimods [ done ] 0.02s _obuild/learnocaml-repository/learnocaml_tutorial.cmo [ done ] 0.01s _obuild/learnocaml-state/learnocaml_report.cmi [ done ] 0.01s _obuild/learnocaml-state/learnocaml_report.mlmods [ done ] 0.10s src/ppx-metaquot/ast_lifter.ml [ done ] 0.01s _obuild/learnocaml-state/learnocaml_exercise_state.mlimods [ done ] 0.03s _obuild/learnocaml-repository/learnocaml_exercise.cmo [ done ] 0.01s _obuild/learnocaml-state/learnocaml_exercise_state.cmi [ done ] 0.02s _obuild/ppx_metaquot_lib/ast_lifter.mlmods [ done ] 0.01s _obuild/learnocaml-state/learnocaml_exercise_state.mlmods [ done ] 0.08s _obuild/xor/xor.cmxa [ done ] 0.03s _obuild/learnocaml-repository/learnocaml-repository.cma [ done ] 0.01s _obuild/learnocaml-sync/learnocaml_sync.mlimods [ done ] 0.01s _obuild/learnocaml-sync/learnocaml_sync.mlmods [ done ] 0.01s _obuild/learnocaml-sync/learnocaml_sync.cmi [ done ] 0.02s _obuild/learnocaml-state/learnocaml_exercise_state.cmo [ done ] 0.01s _obuild/grading-jsoo/grader_jsoo_messages.mlimods [ done ] 0.06s _obuild/learnocaml-state/learnocaml_report.cmo [ done ] 0.01s _obuild/grading-jsoo/grader_jsoo_messages.mlmods [ done ] 0.01s _obuild/grading-jsoo/grader_jsoo_messages.cmi [ done ] 0.01s _obuild/learnocaml-state/learnocaml-state.cma [ done ] 0.02s _obuild/learnocaml-sync/learnocaml_sync.cmo [ done ] 0.01s _obuild/grading-jsoo/grader_jsoo_messages.cmo [ done ] 0.01s _obuild/learnocaml-sync/learnocaml-sync.cma [ done ] 0.01s _obuild/testing/introspection_intf.mlimods [ done ] 0.01s _obuild/testing/introspection.mlimods [ done ] 0.03s _obuild/grading-jsoo/_temp/grading_jsoo.mlipp [ done ] 0.01s _obuild/grading-jsoo/grading_jsoo.mlimods [ done ] 0.01s _obuild/testing/introspection.mlmods [ done ] 0.05s _obuild/grading-jsoo/_temp/grading_jsoo.mlpp [ done ] 0.02s _obuild/testing/test_lib.mlimods [ done ] 0.01s _obuild/grading/grading.mlimods [ done ] 0.01s _obuild/grading-jsoo/grading_jsoo.mlmods [ done ] 0.03s _obuild/grading-jsoo/grading_jsoo.cmi [ done ] 0.01s _obuild/grading/grading.mlmods [ done ] 0.03s _obuild/testing/test_lib.mlmods [ done ] 0.17s _obuild/ppx_metaquot_lib/ast_lifter.cmo [ done ] 0.07s _obuild/jsutils/_temp/lwt_request.mlpp [ done ] 0.16s _obuild/jsutils/_temp/js_utils.mlipp [ done ] 0.01s _obuild/jsutils/js_utils.mlimods [ done ] 0.14s _obuild/ppx_metaquot_lib/ppx_metaquot.cmo [ done ] 0.02s _obuild/ppx_metaquot_lib/ppx_metaquot_lib.cma [ done ] 0.24s _obuild/grading-jsoo/grading_jsoo.cmo [ done ] 0.01s _obuild/grading-jsoo/grading-jsoo.cma [ done ] 0.01s _obuild/jsutils/lwt_request.mlmods [ done ] 0.04s _obuild/jsutils/_temp/lwt_request.mlipp [ done ] 0.00s _obuild/jsutils/lwt_request.mlimods [ done ] 0.01s _obuild/jsutils/lwt_request.cmi [ done ] 0.03s _obuild/ace/ace_types.mlimods [ done ] 0.17s _obuild/ace/_temp/ace.mlpp [ done ] 0.19s _obuild/ace/ace_types.cmi [ done ] 0.06s _obuild/ace/_temp/ace.mlipp [ done ] 0.04s _obuild/ace/ace.mlmods [ done ] 0.01s _obuild/ace/ace.mlimods [ done ] 0.39s _obuild/jsutils/js_utils.cmi [ done ] 0.62s _obuild/jsutils/_temp/js_utils.mlpp [ done ] 0.08s _obuild/jsutils/lwt_request.cmo [ done ] 0.06s _obuild/jsutils/js_utils.mlmods [ done ] 0.07s _obuild/ace/_temp/ocaml_mode.mlipp [ done ] 0.02s _obuild/ace/ocaml_mode.mlimods [ done ] 0.21s _obuild/ace/_temp/ocaml_mode.mlpp [ done ] 0.01s _obuild/ace/ocaml_mode.mlmods [ done ] 0.01s _obuild/learnocam.../learnocaml_toplevel_worker_messages.mlimods [ done ] 0.26s _obuild/ace/ace.cmi [ done ] 0.06s _obuild/learnocaml-to.../learnocaml_toplevel_worker_messages.cmi [ done ] 0.75s _obuild/ppx_metaquot_lib/ast_lifter.cmx [ done ] 0.13s _obuild/learnocaml-top.../learnocaml_toplevel_worker_caller.mlpp [ done ] 0.08s _obuild/learnocaml-to.../learnocaml_toplevel_worker_caller.mlipp [ done ] 0.01s _obuild/learnocaml-.../learnocaml_toplevel_worker_caller.mlimods [ done ] 0.20s _obuild/ace/ocaml_mode.cmi [ done ] 0.04s _obuild/learnocaml-topl.../learnocaml_toplevel_worker_caller.cmi [ done ] 0.01s _obuild/learnocaml-t.../learnocaml_toplevel_worker_caller.mlmods [ done ] 0.24s _obuild/ppx_metaquot_lib/ppx_metaquot.cmx [ done ] 0.02s _obuild/ppx_metaquot_lib/ppx_metaquot_lib.cmxa [ done ] 0.35s _obuild/ace/ace.cmo [ done ] 0.02s _obuild/ppx_metaquot/ppx_metaquot_main.cmx [ done ] 0.13s _obuild/ppx_metaquot_lib/ppx_metaquot_lib.cmxa [ done ] 0.27s _obuild/ace/ocaml_mode.cmo [ done ] 0.03s _obuild/ace/ace.cma [ done ] 0.17s _obuild/learnocaml-toplevel/_.../learnocaml_toplevel_output.mlpp [ done ] 0.01s _obuild/learnocaml-toplevel/learnocaml_toplevel_output.mlmods [ done ] 0.33s _obuild/learnocaml-topl.../learnocaml_toplevel_worker_caller.cmo [ done ] 0.07s _obuild/learnocaml-toplevel/.../learnocaml_toplevel_output.mlipp [ done ] 0.01s _obuild/learnocaml-toplevel/learnocaml_toplevel_output.mlimods [ done ] 0.05s _obuild/learnocaml-toplevel/_.../learnocaml_toplevel_input.mlipp [ done ] 0.01s _obuild/learnocaml-toplevel/learnocaml_toplevel_input.mlimods [ done ] 0.10s _obuild/learnocaml-toplevel/_temp/learnocaml_toplevel_input.mlpp [ done ] 0.01s _obuild/learnocaml-toplevel/learnocaml_toplevel_input.mlmods [ done ] 0.09s _obuild/learnocaml-toplevel/learnocaml_toplevel_input.cmi [ done ] 0.13s _obuild/learnocaml-toplevel/learnocaml_toplevel_output.cmi [ done ] 0.21s _obuild/learnocaml-toplevel/_temp/learnocaml_toplevel.mlpp [ done ] 0.05s _obuild/learnocaml-toplevel/_temp/learnocaml_toplevel.mlipp [ done ] 0.01s _obuild/learnocaml-toplevel/learnocaml_toplevel.mlimods [ done ] 0.16s _obuild/learnocaml-toplevel/learnocaml_toplevel.cmi [ done ] 0.68s _obuild/ppx_metaquot/ppx_metaquot.asm [ done ] 0.01s _obuild/learnocaml-toplevel/learnocaml_toplevel.mlmods [ done ] 0.02s _obuild/testing/introspection_intf.cmi [ done ] 0.04s _obuild/testing/introspection.cmi [ done ] 0.09s _obuild/testing/test_lib.cmi [ done ] 0.13s _obuild/testing/introspection.cmo [ done ] 0.01s src/grader/embedded_grading_cmis.ml [ done ] 0.02s _obuild/grading/embedded_grading_cmis.mlmods [ done ] 0.03s _obuild/grading/embedded_grading_cmis.cmo [ done ] 0.05s _obuild/grading/grading.cmi [ done ] 0.10s _obuild/grading/grading.cmo [ done ] 0.02s _obuild/grading/grading.cma [ done ] 0.79s _obuild/learnocaml-toplevel/learnocaml_toplevel_output.cmo [ done ] 0.81s _obuild/learnocaml-toplevel/learnocaml_toplevel_input.cmo [ done ] 0.03s _obuild/learnocaml-app-common/.../learnocaml_local_storage.mlipp [ done ] 0.02s _obuild/learnocaml-app-common/learnocaml_local_storage.mlimods [ done ] 0.37s _obuild/testing/test_lib.cmo [ done ] 0.02s _obuild/testing/testing.cma [ done ] 0.03s _obuild/learnocaml-app-common/learnocaml_local_storage.cmi [ done ] 0.09s _obuild/learnocaml-app-common/_.../learnocaml_local_storage.mlpp [ done ] 0.02s _obuild/learnocaml-app-common/learnocaml_local_storage.mlmods [ done ] 0.05s _obuild/learnocaml-app-common/_temp/server_caller.mlipp [ done ] 0.06s _obuild/learnocaml-app-common/_temp/server_caller.mlpp [ done ] 0.01s _obuild/learnocaml-app-common/server_caller.mlmods [ done ] 0.02s _obuild/learnocaml-app-common/server_caller.mlimods [ done ] 0.02s _obuild/learnocaml-app-common/server_caller.cmi [ done ] 0.06s _obuild/learnocaml-app-common/server_caller.cmo [ done ] 0.16s _obuild/learnocaml-app-common/_temp/learnocaml_common.mlpp [ done ] 0.07s _obuild/learnocaml-app-common/_temp/learnocaml_common.mlipp [ done ] 0.01s _obuild/learnocaml-app-common/learnocaml_common.mlmods [ done ] 0.01s _obuild/learnocaml-app-common/learnocaml_common.mlimods [ done ] 0.13s _obuild/learnocaml-exercise/_temp/learnocaml_exercise_main.mlpp [ done ] 0.01s _obuild/learnocaml-exercise/learnocaml_exercise_main.mlmods [ done ] 0.53s _obuild/learnocaml-toplevel/learnocaml_toplevel.cmo [ done ] 0.01s _obuild/learnocaml-toplevel/learnocaml-toplevel.cma [ done ] 0.23s _obuild/learnocaml-app-common/learnocaml_common.cmi [ done ] 0.06s _obuild/toploop_jsoo/_temp/toploop_jsoo.mlpp [ done ] 0.48s _obuild/learnocaml-app-common/learnocaml_local_storage.cmo [ done ] 0.03s _obuild/toploop_jsoo/_temp/toploop_jsoo.mlipp [ done ] 0.00s _obuild/toploop_jsoo/toploop_jsoo.mlimods [ done ] 0.01s _obuild/toploop_jsoo/toploop_jsoo.cmi [ done ] 0.01s _obuild/toploop_jsoo/toploop_jsoo.mlmods [ done ] 0.05s _obuild/toploop_jsoo/toploop_jsoo.cmo [ done ] 0.00s _obuild/toploop_jsoo/toploop_jsoo.cma [ done ] 0.01s _obuild/learnocaml-grader-worker/grader_jsoo_messages.mlimods [ done ] 0.01s _obuild/learnocaml-grader-worker/grader_jsoo_messages.cmi [ done ] 0.01s _obuild/learnocaml-grader-worker/grader_jsoo_messages.mlmods [ done ] 0.01s _obuild/learnocaml-grader-worker/grader_jsoo_messages.cmo [ done ] 0.04s _obuild/learnocaml-grader-worker/_temp/grader_jsoo_worker.mlpp [ done ] 0.01s _obuild/learnocaml-grader-worker/grader_jsoo_worker.mlmods [ done ] 0.04s _obuild/learnocaml-grader-worker/grader_jsoo_worker.cmo [ done ] 0.40s _obuild/learnocaml-main/_temp/learnocaml_index_main.mlpp [ done ] 0.03s _obuild/learnocaml-main/learnocaml_index_main.mlmods [ done ] 0.13s _obuild/learnocaml-grader-worker/learnocaml-grader-worker.byte [ done ] 3.12s _obuild/jsutils/js_utils.cmo [ done ] 0.01s _obuild/jsutils/jsutils.cma [ done ] 0.01s _obuild/learnocam.../learnocaml_toplevel_worker_messages.mlimods [ done ] 0.02s _obuild/learnocaml-to.../learnocaml_toplevel_worker_messages.cmi [ done ] 0.97s _obuild/learnocaml-exercise/learnocaml_exercise_main.cmo [ done ] 1.00s _obuild/learnocaml-app-common/learnocaml_common.cmo [ done ] 0.02s _obuild/learnocaml-app-common/learnocaml-app-common.cma [ done ] 0.04s _obuild/learnocaml-topl.../learnocaml_toplevel_worker_main.mlipp [ done ] 0.01s _obuild/learnocaml-to.../learnocaml_toplevel_worker_main.mlimods [ done ] 0.01s _obuild/learnocaml-toplev.../learnocaml_toplevel_worker_main.cmi [ done ] 0.11s _obuild/learnocaml-tople.../learnocaml_toplevel_worker_main.mlpp [ done ] 0.03s _obuild/grading-cli/grading_cli.mlimods [ done ] 0.01s _obuild/learnocaml-top.../learnocaml_toplevel_worker_main.mlmods [ done ] 0.02s _obuild/grading-cli/grading_cli.cmi [ done ] 0.01s _obuild/grading-cli/grading_cli.mlmods [ done ] 0.10s _obuild/learnocaml-exercise/learnocaml-exercise.byte [ done ] 0.07s _obuild/grading-cli/grading_cli.cmo [ done ] 0.03s _obuild/grading-cli/grader_cli.mlmods [ done ] 0.13s _obuild/learnocaml-toplev.../learnocaml_toplevel_worker_main.cmo [ done ] 0.08s _obuild/grading-cli/grader_cli.cmo [ done ] 0.97s _obuild/learnocaml-main/learnocaml_index_main.cmo [ done ] 0.02s _obuild/grading-cli/grading-cli.cma [ done ] 0.01s _obuild/learnocaml-grader/grader_cli_main.mlmods [ done ] 0.12s _obuild/learnocaml-toplevel-w.../learnocaml-toplevel-worker.byte [ done ] 0.01s _obuild/learnocaml-grader/grader_cli_main.cmo [ done ] 0.04s _obuild/learnocaml-grader/learnocaml-grader.byte [failed] [433.1] Command failed: '/home/caml/.opam/4.05.0/bin/ocamlc.opt' '-o' './_obuild/learnocaml-grader/learnocaml-grader.byte' '-I' './_obuild/learnocaml-grader' '-I' './src/grader' '-I' './_obuild/grading-cli' '-I' './_obuild/toploop_unix' '-I' './src/toploop' '-I' '/home/caml/.opam/4.05.0/lib/ocplib-ocamlres' '-I' '/home/caml/.opam/4.05.0/lib/ocaml' '-I' '/home/caml/.opam/4.05.0/lib/pprint' '-I' './_obuild/grading' '-I' './_obuild/testing' '-I' './_obuild/ty' '-I' './src/ppx-metaquot' '-I' './_obuild/toploop' '-I' './_obuild/toploop_results' '-I' './_obuild/learnocaml-state' '-I' './src/state' '-I' './_obuild/learnocaml-repository' '-I' './src/repo' '-I' './_obuild/xor' '-I' './src/utils' '-I' '/home/caml/.opam/4.05.0/lib/ocplib-json-typed' '-I' './_obuild/ppx_metaquot_lib' '-I' '/home/caml/.opam/4.05.0/lib/ppx_tools' '-I' '/home/caml/.opam/4.05.0/lib/ezjsonm' '-I' '/home/caml/.opam/4.05.0/lib/jsonm' '-I' '/home/caml/.opam/4.05.0/lib/hex' '-I' './_obuild/embedded_cmis' '-I' '/home/caml/.opam/4.05.0/lib/cstruct' '-I' '/home/caml/.opam/4.05.0/lib/ocaml/compiler-libs' '-I' '/home/caml/.opam/4.05.0/lib/lwt' '-I' '/home/caml/.opam/4.05.0/lib/uri' '-I' '/home/caml/.opam/4.05.0/lib/re/posix' '-I' '/home/caml/.opam/4.05.0/lib/stringext' '-I' '/home/caml/.opam/4.05.0/lib/sexplib' '-I' '/home/caml/.opam/4.05.0/lib/parsexp' '-I' '/home/caml/.opam/4.05.0/lib/ppx_sexp_conv/runtime-lib' '-I' '/home/caml/.opam/4.05.0/lib/base64' '-I' '/home/caml/.opam/4.05.0/lib/base' '-I' '/home/caml/.opam/4.05.0/lib/sexplib0' '-I' '/home/caml/.opam/4.05.0/lib/base/shadow_stdlib' '-I' '/home/caml/.opam/4.05.0/lib/base/caml' '-I' '/home/caml/.opam/4.05.0/lib/astring' '-I' '/home/caml/.opam/4.05.0/lib/uutf' '-I' '/home/caml/.opam/4.05.0/lib/re' '-I' '/home/caml/.opam/4.05.0/lib/result' '-I' '/home/caml/.opam/4.05.0/lib/uchar' '-I' '/home/caml/.opam/4.05.0/lib/bytes' '/home/caml/.opam/4.05.0/lib/ocaml/unix.cma' '/home/caml/.opam/4.05.0/lib/result/result.cma' '/home/caml/.opam/4.05.0/lib/lwt/lwt.cma' '/home/caml/.opam/4.05.0/lib/re/re.cma' '/home/caml/.opam/4.05.0/lib/uutf/uutf.cma' '/home/caml/.opam/4.05.0/lib/astring/astring.cma' '/home/caml/.opam/4.05.0/lib/base/caml/caml.cma' '/home/caml/.opam/4.05.0/lib/base/shadow_stdlib/shadow_stdlib.cma' '/home/caml/.opam/4.05.0/lib/sexplib0/sexplib0.cma' '/home/caml/.opam/4.05.0/lib/base/base.cma' '/home/caml/.opam/4.05.0/lib/base64/base64.cma' '/home/caml/.opam/4.05.0/lib/ocaml/bigarray.cma' '/home/caml/.opam/4.05.0/lib/ppx_sexp_conv/runtime-lib/ppx_sexp_conv_lib.cma' '/home/caml/.opam/4.05.0/lib/parsexp/parsexp.cma' '/home/caml/.opam/4.05.0/lib/sexplib/sexplib.cma' '/home/caml/.opam/4.05.0/lib/stringext/stringext.cma' '/home/caml/.opam/4.05.0/lib/re/posix/re_posix.cma' '/home/caml/.opam/4.05.0/lib/uri/uri.cma' '/home/caml/.opam/4.05.0/lib/lwt/lwt_log.cma' '/home/caml/.opam/4.05.0/lib/lwt/lwt_unix.cma' '/home/caml/.opam/4.05.0/lib/ocaml/compiler-libs/ocamlcommon.cma' '/home/caml/.opam/4.05.0/lib/ocaml/compiler-libs/ocamlbytecomp.cma' '/home/caml/.opam/4.05.0/lib/ocaml/compiler-libs/ocamltoplevel.cma' '/home/caml/.opam/4.05.0/lib/cstruct/cstruct.cma' '/home/caml/.opam/4.05.0/lib/ocplib-ocamlres/ocplib-ocamlres-runtime.cma' './_obuild/embedded_cmis/embedded_cmis.cma' '/home/caml/.opam/4.05.0/lib/hex/hex.cma' '/home/caml/.opam/4.05.0/lib/jsonm/jsonm.cma' '/home/caml/.opam/4.05.0/lib/ezjsonm/ezjsonm.cma' '/home/caml/.opam/4.05.0/lib/ppx_tools/ppx_tools.cma' './_obuild/ppx_metaquot_lib/ppx_metaquot_lib.cma' '/home/caml/.opam/4.05.0/lib/ocplib-json-typed/ocplib_json_typed.cma' './_obuild/xor/xor.cma' './_obuild/learnocaml-repository/learnocaml-repository.cma' './_obuild/learnocaml-state/learnocaml-state.cma' './_obuild/toploop_results/toploop_results.cma' './_obuild/toploop/toploop.cma' './_obuild/ty/ty.cma' '-linkall' './_obuild/testing/testing.cma' '-linkall' './_obuild/grading/grading.cma' '/home/caml/.opam/4.05.0/lib/pprint/PPrintLib.cma' '/home/caml/.opam/4.05.0/lib/ocaml/str.cma' '/home/caml/.opam/4.05.0/lib/ocplib-ocamlres/ocplib-ocamlres.cma' './_obuild/toploop_unix/toploop_unix.cma' './_obuild/grading-cli/grading-cli.cma' './_obuild/learnocaml-grader/grader_cli_main.cmo' -- stderr for ...rnocaml-grader/learnocaml-grader.byte -- File "_none_", line 1: Error: Required module `Condition' is unavailable 0.11s _obuild/learnocaml-main/learnocaml-main.byte [ done ] 7.03s _obuild/learnocaml-exercise/learnocaml-exercise.js [ done ] -- stderr for ...ocaml-exercise/learnocaml-exercise.js -- warning: overriding primitive "caml_ephe_key_offset" old: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:25 new: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:25 warning: overriding primitive "caml_ephe_data_offset" old: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:29 new: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:29 warning: overriding primitive "caml_weak_create" old: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:33 new: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:33 warning: overriding primitive "caml_weak_set" old: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:41 new: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:41 warning: overriding primitive "caml_weak_get" old: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:49 new: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:49 warning: overriding primitive "caml_weak_get_copy" old: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:56 new: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:56 warning: overriding primitive "caml_weak_check" old: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:68 new: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:68 warning: overriding primitive "caml_weak_blit" old: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:77 new: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:77 warning: overriding primitive "caml_ephe_create" old: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:88 new: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:88 warning: overriding primitive "caml_ephe_blit_key" old: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:92 new: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:92 warning: overriding primitive "caml_ephe_get_key" old: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:96 new: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:96 warning: overriding primitive "caml_ephe_get_key_copy" old: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:100 new: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:100 warning: overriding primitive "caml_ephe_check_key" old: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:104 new: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:104 warning: overriding primitive "caml_ephe_set_key" old: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:108 new: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:108 warning: overriding primitive "caml_ephe_unset_key" old: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:114 new: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:114 warning: overriding primitive "caml_ephe_blit_data" old: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:120 new: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:120 warning: overriding primitive "caml_ephe_get_data" old: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:128 new: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:128 warning: overriding primitive "caml_ephe_get_data_copy" old: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:138 new: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:138 warning: overriding primitive "caml_ephe_set_data" old: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:149 new: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:149 warning: overriding primitive "caml_ephe_unset_data" old: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:157 new: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:157 warning: overriding primitive "caml_ephe_check_data" old: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:165 new: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:165 warning: overriding primitive "caml_blit_string_to_bigstring" old: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/bigstring.js:43 new: /home/caml/.opam/4.05.0/lib/cstruct/cstruct.js:16 warning: overriding primitive "caml_blit_bigstring_to_string" old: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/bigstring.js:26 new: /home/caml/.opam/4.05.0/lib/cstruct/cstruct.js:26 There are some missing primitives Dummy implementations (raising 'Failure' exception) will be used if they are not available at runtime. You can prevent the generation of dummy implementations with the commandline option '--disable genprim' Missing primitives: Base_am_testing Base_internalhash_fold_float Base_internalhash_fold_int Base_internalhash_fold_int64 Base_internalhash_fold_string Base_internalhash_get_hash_value 21.59s _obuild/learnocaml-toplevel-worker/learnocaml-toplevel-worker.js [ done ] -- stderr for ...-worker/learnocaml-toplevel-worker.js -- warning: overriding primitive "caml_ephe_key_offset" old: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:25 new: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:25 warning: overriding primitive "caml_ephe_data_offset" old: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:29 new: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:29 warning: overriding primitive "caml_weak_create" old: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:33 new: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:33 warning: overriding primitive "caml_weak_set" old: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:41 new: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:41 warning: overriding primitive "caml_weak_get" old: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:49 new: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:49 warning: overriding primitive "caml_weak_get_copy" old: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:56 new: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:56 warning: overriding primitive "caml_weak_check" old: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:68 new: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:68 warning: overriding primitive "caml_weak_blit" old: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:77 new: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:77 warning: overriding primitive "caml_ephe_create" old: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:88 new: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:88 warning: overriding primitive "caml_ephe_blit_key" old: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:92 new: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:92 warning: overriding primitive "caml_ephe_get_key" old: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:96 new: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:96 warning: overriding primitive "caml_ephe_get_key_copy" old: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:100 new: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:100 warning: overriding primitive "caml_ephe_check_key" old: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:104 new: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:104 warning: overriding primitive "caml_ephe_set_key" old: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:108 new: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:108 warning: overriding primitive "caml_ephe_unset_key" old: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:114 new: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:114 warning: overriding primitive "caml_ephe_blit_data" old: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:120 new: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:120 warning: overriding primitive "caml_ephe_get_data" old: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:128 new: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:128 warning: overriding primitive "caml_ephe_get_data_copy" old: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:138 new: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:138 warning: overriding primitive "caml_ephe_set_data" old: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:149 new: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:149 warning: overriding primitive "caml_ephe_unset_data" old: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:157 new: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:157 warning: overriding primitive "caml_ephe_check_data" old: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:165 new: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:165 There are some missing primitives Dummy implementations (raising 'Failure' exception) will be used if they are not available at runtime. You can prevent the generation of dummy implementations with the commandline option '--disable genprim' Missing primitives: caml_sys_time_include_children 25.46s _obuild/learnocaml-grader-worker/learnocaml-grader-worker.js [ done ] -- stderr for ...er-worker/learnocaml-grader-worker.js -- warning: overriding primitive "caml_ephe_key_offset" old: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:25 new: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:25 warning: overriding primitive "caml_ephe_data_offset" old: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:29 new: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:29 warning: overriding primitive "caml_weak_create" old: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:33 new: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:33 warning: overriding primitive "caml_weak_set" old: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:41 new: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:41 warning: overriding primitive "caml_weak_get" old: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:49 new: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:49 warning: overriding primitive "caml_weak_get_copy" old: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:56 new: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:56 warning: overriding primitive "caml_weak_check" old: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:68 new: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:68 warning: overriding primitive "caml_weak_blit" old: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:77 new: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:77 warning: overriding primitive "caml_ephe_create" old: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:88 new: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:88 warning: overriding primitive "caml_ephe_blit_key" old: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:92 new: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:92 warning: overriding primitive "caml_ephe_get_key" old: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:96 new: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:96 warning: overriding primitive "caml_ephe_get_key_copy" old: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:100 new: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:100 warning: overriding primitive "caml_ephe_check_key" old: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:104 new: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:104 warning: overriding primitive "caml_ephe_set_key" old: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:108 new: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:108 warning: overriding primitive "caml_ephe_unset_key" old: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:114 new: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:114 warning: overriding primitive "caml_ephe_blit_data" old: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:120 new: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:120 warning: overriding primitive "caml_ephe_get_data" old: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:128 new: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:128 warning: overriding primitive "caml_ephe_get_data_copy" old: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:138 new: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:138 warning: overriding primitive "caml_ephe_set_data" old: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:149 new: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:149 warning: overriding primitive "caml_ephe_unset_data" old: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:157 new: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:157 warning: overriding primitive "caml_ephe_check_data" old: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:165 new: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/weak.js:165 warning: overriding primitive "caml_blit_string_to_bigstring" old: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/bigstring.js:43 new: /home/caml/.opam/4.05.0/lib/cstruct/cstruct.js:16 warning: overriding primitive "caml_blit_bigstring_to_string" old: /home/caml/.opam/4.05.0/lib/js_of_ocaml-compiler/bigstring.js:26 new: /home/caml/.opam/4.05.0/lib/cstruct/cstruct.js:26 There are some missing primitives Dummy implementations (raising 'Failure' exception) will be used if they are not available at runtime. You can prevent the generation of dummy implementations with the commandline option '--disable genprim' Missing primitives: Base_am_testing Base_clear_caml_backtrace_pos Base_hash_double Base_hash_string Base_heap_block_is_heap_block Base_int_math_int64_pow_stub Base_int_math_int_clz Base_int_math_int_popcount Base_int_math_int_pow_stub Base_internalhash_fold_float Base_internalhash_fold_int Base_internalhash_fold_int64 Base_internalhash_fold_string Base_internalhash_get_hash_value caml_channel_descriptor caml_sys_time_include_children unix_accept unix_access unix_alarm unix_bind unix_chdir unix_chmod unix_chown unix_chroot unix_clear_close_on_exec unix_clear_nonblock unix_close unix_closedir unix_connect unix_dup unix_dup2 unix_environment unix_error_message unix_execv unix_execve unix_execvp unix_execvpe unix_fchmod unix_fchown unix_fork unix_fstat unix_fstat_64 unix_ftruncate unix_ftruncate_64 unix_getaddrinfo unix_getcwd unix_getegid unix_geteuid unix_getgid unix_getgrgid unix_getgrnam unix_getgroups unix_gethostbyaddr unix_gethostbyname unix_gethostname unix_getitimer unix_getlogin unix_getnameinfo unix_getpeername unix_getpid unix_getppid unix_getprotobyname unix_getprotobynumber unix_getpwnam unix_getpwuid unix_getservbyname unix_getservbyport unix_getsockname unix_getsockopt unix_getuid unix_has_symlink unix_initgroups unix_isatty unix_kill unix_link unix_listen unix_lockf unix_lseek unix_lseek_64 unix_lstat unix_lstat_64 unix_mkdir unix_mkfifo unix_nice unix_open unix_opendir unix_pipe unix_putenv unix_read unix_readdir unix_readlink unix_recv unix_recvfrom unix_rename unix_rewinddir unix_rmdir unix_select unix_send unix_sendto unix_set_close_on_exec unix_set_nonblock unix_setgid unix_setgroups unix_setitimer unix_setsid unix_setsockopt unix_setuid unix_shutdown unix_sigpending unix_sigprocmask unix_sigsuspend unix_single_write unix_sleep unix_socket unix_socketpair unix_stat unix_stat_64 unix_string_of_inet_addr unix_symlink unix_tcdrain unix_tcflow unix_tcflush unix_tcgetattr unix_tcsendbreak unix_tcsetattr unix_times unix_truncate unix_truncate_64 unix_umask unix_unlink unix_utimes unix_wait unix_waitpid unix_write 2 errors in 29.38s. 237 jobs (parallelism 2.6x), 262 files generated. Error log: Error: [433.1] '/home/caml/.opam/4.05.0/bin/ocamlc.opt' '-o' './_obuild/learnocaml-grader/learnocaml-grader.byte' '-I' './_obuild/learnocaml-grader' '-I' './src/grader' '-I' './_obuild/grading-cli' '-I' './_obuild/toploop_unix' '-I' './src/toploop' '-I' '/home/caml/.opam/4.05.0/lib/ocplib-ocamlres' '-I' '/home/caml/.opam/4.05.0/lib/ocaml' '-I' '/home/caml/.opam/4.05.0/lib/pprint' '-I' './_obuild/grading' '-I' './_obuild/testing' '-I' './_obuild/ty' '-I' './src/ppx-metaquot' '-I' './_obuild/toploop' '-I' './_obuild/toploop_results' '-I' './_obuild/learnocaml-state' '-I' './src/state' '-I' './_obuild/learnocaml-repository' '-I' './src/repo' '-I' './_obuild/xor' '-I' './src/utils' '-I' '/home/caml/.opam/4.05.0/lib/ocplib-json-typed' '-I' './_obuild/ppx_metaquot_lib' '-I' '/home/caml/.opam/4.05.0/lib/ppx_tools' '-I' '/home/caml/.opam/4.05.0/lib/ezjsonm' '-I' '/home/caml/.opam/4.05.0/lib/jsonm' '-I' '/home/caml/.opam/4.05.0/lib/hex' '-I' './_obuild/embedded_cmis' '-I' '/home/caml/.opam/4.05.0/lib/cstruct' '-I' '/home/caml/.opam/4.05.0/lib/ocaml/compiler-libs' '-I' '/home/caml/.opam/4.05.0/lib/lwt' '-I' '/home/caml/.opam/4.05.0/lib/uri' '-I' '/home/caml/.opam/4.05.0/lib/re/posix' '-I' '/home/caml/.opam/4.05.0/lib/stringext' '-I' '/home/caml/.opam/4.05.0/lib/sexplib' '-I' '/home/caml/.opam/4.05.0/lib/parsexp' '-I' '/home/caml/.opam/4.05.0/lib/ppx_sexp_conv/runtime-lib' '-I' '/home/caml/.opam/4.05.0/lib/base64' '-I' '/home/caml/.opam/4.05.0/lib/base' '-I' '/home/caml/.opam/4.05.0/lib/sexplib0' '-I' '/home/caml/.opam/4.05.0/lib/base/shadow_stdlib' '-I' '/home/caml/.opam/4.05.0/lib/base/caml' '-I' '/home/caml/.opam/4.05.0/lib/astring' '-I' '/home/caml/.opam/4.05.0/lib/uutf' '-I' '/home/caml/.opam/4.05.0/lib/re' '-I' '/home/caml/.opam/4.05.0/lib/result' '-I' '/home/caml/.opam/4.05.0/lib/uchar' '-I' '/home/caml/.opam/4.05.0/lib/bytes' '/home/caml/.opam/4.05.0/lib/ocaml/unix.cma' '/home/caml/.opam/4.05.0/lib/result/result.cma' '/home/caml/.opam/4.05.0/lib/lwt/lwt.cma' '/home/caml/.opam/4.05.0/lib/re/re.cma' '/home/caml/.opam/4.05.0/lib/uutf/uutf.cma' '/home/caml/.opam/4.05.0/lib/astring/astring.cma' '/home/caml/.opam/4.05.0/lib/base/caml/caml.cma' '/home/caml/.opam/4.05.0/lib/base/shadow_stdlib/shadow_stdlib.cma' '/home/caml/.opam/4.05.0/lib/sexplib0/sexplib0.cma' '/home/caml/.opam/4.05.0/lib/base/base.cma' '/home/caml/.opam/4.05.0/lib/base64/base64.cma' '/home/caml/.opam/4.05.0/lib/ocaml/bigarray.cma' '/home/caml/.opam/4.05.0/lib/ppx_sexp_conv/runtime-lib/ppx_sexp_conv_lib.cma' '/home/caml/.opam/4.05.0/lib/parsexp/parsexp.cma' '/home/caml/.opam/4.05.0/lib/sexplib/sexplib.cma' '/home/caml/.opam/4.05.0/lib/stringext/stringext.cma' '/home/caml/.opam/4.05.0/lib/re/posix/re_posix.cma' '/home/caml/.opam/4.05.0/lib/uri/uri.cma' '/home/caml/.opam/4.05.0/lib/lwt/lwt_log.cma' '/home/caml/.opam/4.05.0/lib/lwt/lwt_unix.cma' '/home/caml/.opam/4.05.0/lib/ocaml/compiler-libs/ocamlcommon.cma' '/home/caml/.opam/4.05.0/lib/ocaml/compiler-libs/ocamlbytecomp.cma' '/home/caml/.opam/4.05.0/lib/ocaml/compiler-libs/ocamltoplevel.cma' '/home/caml/.opam/4.05.0/lib/cstruct/cstruct.cma' '/home/caml/.opam/4.05.0/lib/ocplib-ocamlres/ocplib-ocamlres-runtime.cma' './_obuild/embedded_cmis/embedded_cmis.cma' '/home/caml/.opam/4.05.0/lib/hex/hex.cma' '/home/caml/.opam/4.05.0/lib/jsonm/jsonm.cma' '/home/caml/.opam/4.05.0/lib/ezjsonm/ezjsonm.cma' '/home/caml/.opam/4.05.0/lib/ppx_tools/ppx_tools.cma' './_obuild/ppx_metaquot_lib/ppx_metaquot_lib.cma' '/home/caml/.opam/4.05.0/lib/ocplib-json-typed/ocplib_json_typed.cma' './_obuild/xor/xor.cma' './_obuild/learnocaml-repository/learnocaml-repository.cma' './_obuild/learnocaml-state/learnocaml-state.cma' './_obuild/toploop_results/toploop_results.cma' './_obuild/toploop/toploop.cma' './_obuild/ty/ty.cma' '-linkall' './_obuild/testing/testing.cma' '-linkall' './_obuild/grading/grading.cma' '/home/caml/.opam/4.05.0/lib/pprint/PPrintLib.cma' '/home/caml/.opam/4.05.0/lib/ocaml/str.cma' '/home/caml/.opam/4.05.0/lib/ocplib-ocamlres/ocplib-ocamlres.cma' './_obuild/toploop_unix/toploop_unix.cma' './_obuild/grading-cli/grading-cli.cma' './_obuild/learnocaml-grader/grader_cli_main.cmo'File "none", line 1:
Error: Required module `Condition' is unavailableError:
rule 433: target ./_obuild/learnocaml-grader/learnocaml-grader.byte not built
Makefile:21: recipe for target 'build' failed
make: *** [build] Error 2
Hi,
I've just noticed (thanks to the Travis CI test-build of learn-ocaml-editor, not yet based on Docker) that the opam-installer
dependency (used by make opaminstall) is not specified in learn-ocaml.opam*
files.
I had not noticed this beforehand on my config because I migrated to opam-2.0.0 from an APT-packaged version of opam 1.2, so there was already some opam-installer
binary in the PATH:
$ which opam-installer
/usr/bin/opam-installer
$ opam-installer --version
1.2.2
Should this additional dependency be added to both {learn-ocaml.opam,learn-ocaml.opam.locked}
or just to learn-ocaml.opam
?
To use the command line client, an exercise identifier is needed. Yet, as far as I can tell, the web interface does not display this identifier.
Would it make sense to also update the command line client to get the student current homework assignments? Something like:
learn-ocaml-client assignments
would display a two-columns list like:
exercise-identifier-0 http://learn-ocaml-server/url-to-exercise-0-statement
exercise-identifier-1 http://learn-ocaml-server/url-to-exercise-1-statement
exercise-identifier-2 http://learn-ocaml-server/url-to-exercise-2-statement
Is there a good reason that explains why the title is not store in the metadata file?
As far as I can tell, there is no way of including our own static content (e.g. images) when deploying the server. We would like to include some example images in one of our exercise descriptions.
On the latest version of learn-ocaml, certain exercise metadata fields (in exercises/<exercise-name>/meta.json
) don't seem to be recognized. Trying to run learn-ocaml build
when a metadata file contains one of those fields gives the error message:
Updating app at ./www
Unexpected object field short_description
The fields I've experienced problems with are short_description
, authors
, forward_exercises
, and backward_exercises
.
A full example meta.json file that is causing problems:
{
"learnocaml_version" : "1",
"kind" : "exercise",
"stars" : 0,
"title" : "Homework 1",
"short_description" : "Week 1",
"identifier" : "hw1",
"authors" : [["test author", "[email protected]"]],
"focus" : [],
"requirements" : [],
"forward_exercises" : [],
"backward_exercises" : []
}
Changing the version to 2 doesn't fix the issue.
At some point, we should check if the learn-ocaml webapp has any memory leak, maybe using the following tool:
I’m writing a program intended to check the validity of the tests proposed by the teachers.
The idea is to have them write several “essays”, that are more or less correct copies of students inside an essay
directory inside each exercise directories. Each essay will be associated to the grade the teacher expects a student to have for this essay.
Then, the program would grade them to see if the expected grade matches the generated one. The goal is to detect errors in the test function or in the solution.
I’m using the grade
functionality of the learn-ocaml
command. Sadly, I didn’t find a way to fetch the score obtained by a graded essay (with --grade-student
). For example, if I use learn-ocaml grade --display-progression
in the exercise directory, I get full points as the solution is tested, which is correct. That also gets printed on the screen. Same if I grade a correct solution. But if I grade an incorrect solution, I only get “Failure” and no more informations, even though some answers are correct. The generated grade misses, so I can’t check it against the defined one.
To put it in a nutshell, I think it would be interesting to give the grade obtained when using grade
from the command line instead of just outputting “Failure”.
Hi,
Would you have an objection to enabling continuous integration using Travis CI? The repo already contains a .travis.yml
file, so I guess it would suffice to enable the GitHub/Travis-CI integration… (BTW since a few days, the URL of Travis' plaform for open source projects is now travis-ci.com instead of travis-ci.org…)
Unrelated remark: since be0e079, shouldn't the line
Note: you need a working opam environment with OCaml 4.03.0.
in the README.md be replaced with
Note: you need a working opam environment with OCaml 4.05.0.
? (Compiling with 4.03.0 raises the error learn-ocaml-deps is not available because your system doesn't comply with ocaml-version >= "4.05.0".
)
Kind regards, Erik
Michele Pagani asks that the default status of exercise should be closed, not open. He is right.
Icons still do not display on my machine even though I rebuilt everything from scratch. Other users reported me the same behavior.
Is there a way to test an exercises implementation (and especially the grader) without starting a server ? The error message are very imprecise (basically, it says FAILED).
Or is there a log file somewhere with proper error messages ?
Bonjour,
Je participe au projet PFITAXEl . Lors de l'installation de learn ocaml sur windows (j'ai installer opam a l'aide de http://fdopen.github.io/opam-repository-mingw/). J'obtiens cette erreur.
Merci pour votre attention.
$ make
Compiler: ocaml 4.05.0
Warning: 13 old env warnings were not printed (add --env-warnings)
ocp-build: Entering directory `c:\Users\Damien\gui\learn-ocaml-editor'
Warning: 8 old project warnings were not printed (add --project-warnings)
File "c:\Users\Damien\gui\learn-ocaml-editor\src\app\build.ocp", line 1, charact ers -1--1:
ocp-build: Leaving directory `c:\Users\Damien\gui\learn-ocaml-editor'
Error: in project "learnocaml-exercise", the source filename
".\_obuild\learnocaml-exercise\learnocaml-exercise.byte" does not exist
RULE 365 (state active)
SOURCE .\_obuild\learnocaml-exercise\learnocaml-exercise validat ed(not available)
SOURCE .\_obuild\learnocaml-exercise\learnocaml-exercise.byte(no t available)
cd "c:\\Users\\Damien\\gui\\learn-ocaml-editor\\src\\app"
js_of_ocaml +weak.js +cstruct/cstruct.js C:\Users\Damien\gui\learn-ocaml -editor\.\src\ace-lib/ace_bindings.js C:\Users\Damien\gui\learn-ocaml-editor\.\_ obuild\learnocaml-exercise/learnocaml-exercise.byte
TARGET .\_obuild\learnocaml-exercise\learnocaml-exercise.js
make: *** [Makefile:22: build] Error 2
After a fresh installation of learn-ocaml with opam2, I get the following error:
yann➜teaching/learn-ocaml/learn-ocaml(master✗)» learn-ocaml
Updating app at ./www
Fatal: (Sys_error "./tutorials: No such file or directory")
Cannot process exercises: (Sys_error "./exercises: No such file or directory")
with no command provided, learn-ocaml should probably simply exit silently with a success status.
On the exercise list of the learn-ocaml web application, I get the error “error in prelude” when clicking on some exercises, and can’t do the exercise. This occurs on all exercices for which prelude.ml
or prepare.ml
is terminated by an end-of-line character. It is very inconvenient because learn-ocaml-autogen generates files with an end-of-line character.
For example, I don’t have this error on an empty prelude created by touch
, which is 0 byte long, but I do on an empty prelude created by autogen, which is 1 byte long.
The presence or not of an end-of-line character on the other files seems not to affect the behaviour of the application.
There is also no such error when using learn-ocaml-client from the command line, and the exercise is evaluated correctly.
Edit: the error occurs if there is an eol in prepare or prelude, not just prelude.
When creating a new student token with the nickname "new test student", the student's name shows up in the student list in the teacher activity as "new%20test%20student". The issue is resolved after the student clicks the "Sync" button.
This also affects the downloaded CSV, and if the student closes the window and then logs in again on another machine, their nickname becomes "new%20test%20student".
@AltGr will it be possible to add more structures (i.e. sub-(...)-directories) to the exercises ? Right now, this is basically flat and the teachers are structuring their exercises by naming properly the exercises directories (1.1 - 1.2 - 2.1 - 2-2). Being at least able to add one level ( 1/1 - 1/2 - 2/1 - 2/2) will be great.
Dear learn-ocaml developers,
I'd like to suggest implementing some feature to ease the following use case:
Obviously a complex feature of «student individual authentication» combined with a «list of authorized exercises by student group» would address this... but maybe a simpler solution such as a basic authentication feature would suffice and be worth it to implement?
In particular I was wondering whether one could add an optional token (corresponding e.g., to the hash of a password) to the metadata of an exercise so that on the JavaScript side, the learn-ocaml client asks a password to the student and compares its hash with the one specified in order to unlock the exercise…
What do you think?
With several hundreds of students, it could be nice to have this sorting by default : in Paris Diderot, they ask the students to use a nickname starting with their group number. That way, students of the same group will appear alongside each other.
We are using the Learn OCaml platform in a course where we need students to use their student ID number as their nickname so that we can associate their grades to them. Since there is no explanation of the nickname field on the welcome page, several have written something else in the nickname field instead. I imagine this would be a problem in any course where Learn OCaml is used.
It would be nice to have some customization of the welcome screen - at least being able to add a message at the top, or ideally to change the nickname field to say "student ID" or something similar.
When working on an exercise, I always end up clicking the Report tab when I'm looking for the exercise, and vice versa. I think Toplevel, Exercise, Report is a more intuitive ordering.
File : src/grader/Test_lib.ml, lines 704-711.
Issue : the function "require" is supposed to compare the incoming expressions "n" to a given expression "expr" and return a success on the first time n is equal to expr. However, there are no comparisons made in that function; instead, it returns the success effectively on the first run of the function, and then the "already" flag stays on.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.