Acos server and related sub-projects are a method of distributing browser-based smart learning content in a reusable and interoperable way. Activities created using the Acos server can be embedded both in A+ and MyCourses.
The project homepage can be found at https://acos.cs.aalto.fi/.
The source code is available in GibHub: https://github.com/acos-server/acos-server.
The following Acos activity types were illustrated in an A+ workshop on May 30, 2018.
Example exercise for constructing Python code by dragging code elements.
This page contains instructions and notation for using this content type.
Basic example exercises illustrating various features of the drag-and-drop content type.
A more advanced example illustrating how drag-and-drop activity type can be used in teaching writing.
Basic example exercises illustrating various features of the point-and-click content type.
You can add Acos exercises to A+ with the submit RST directive. Specify the URL of
the exercise in the Acos server using the url option. The ajax option is used to
update the exercise points bar in the A+ page since the submission is uploaded directly
to the Acos server instead of via A+. There is an alternative to using the submit directive
since specifying the full URL of the exercise becomes awkward when one needs to test
exercises locally before deploying them to the production server.
.. submit:: 1 150
:title: Reveal demo
Alternatively, a custom submit directive may be used in order to avoid specifying
the domain in the URL of the Acos exercise. As a result, it is easy to change
the location of the Acos server without modifying all submit directives of the
Acos exercises in the course. This is useful when Acos exercises are first tested
locally with localhost URLs and then deployed to a production server.
The custom acos-submit directive has been installed in this course.
It enables the ajax option automatically so it need not be given.
The acos-submit directive uses the setting acos_submit_base_url (in the project’s conf.py file)
to define the base URL of Acos server, for example,
"https://acos.cs.aalto.fi" or "http://172.21.0.4:3000".
The url option in the directive only defines the URL path of the exercise without the domain.
.. acos-submit:: 1 150
:title: Reveal demo
When running this manual course with Docker in Mac or Windows computers,
the URLs pointing to the Acos server in the Acos exercises may not function
correctly. On Mac and Windows, Docker runs containers inside an additional Linux
virtual machine. Due to the virtual machine between the Mac/Windows host machine
and the containers, the host machine can not reach the containers with their internal
IP addresses. However, the Acos exercises in A+ require that the user’s web browser
can connect directly to the Acos server. A simple fix to this is to use the
internal domain names of the containers in order to connect to them from the host.
This requires some configuration in the host system so that it recognizes those
domain names and associates them with the localhost loopback address (the system
itself). Since docker-compose.yml sets port forwarding to the containers,
the host can connect to the containers using the localhost address with the
correct port number.
The localhost address can not be used directly in the exercise URLs since the
loopback address always refers to the container itself initiating a connection,
but the containers need to be able to connect to each other. Therefore,
the containers must use the internal domain names in the exercise URLs, and
the host (web browser) may connect to the containers using the localhost address
with port forwarding.
The following has been tested in the macOS High Sierra operating system.
You need to modify your hosts file settings at /private/etc/hosts by
adding these lines at the end of the file:
To ensure that the new settings work properly, you may also need to flush the
DNS cache by executing sudo killall -HUP mDNSResponder.
sudo killall -HUP mDNSResponder
In addition, the conf.py needs to modified as follows:
# comment out the existing line that sets acos_submit_base_url and add the following:
# local testing in containers
acos_submit_base_url = 'http://acos:3000'
After modifying the settings, execute ./docker-compile.py. More detailed information
about modifying the hosts file can be found at
In Linux computers, it is possible to use the internal IP addresses of the
containers in order to connect to them from the host machine. However,
if you want to use the domain names of the containers instead of the IP addresses,
you may apply the instructions of the Mac section above with slight modifications.
The hosts file is usually /etc/hosts in Linux and there is no need to flush
any DNS cache after modifying it.
The A+ containers have not yet been properly working in Windows. If they work
correctly otherwise, but the Acos exercise URLs do not, then you could modify
the hosts configuration so that the internal domain names of the containers
are mapped to the localhost address. The conf.py file is modified like in the
Mac section above.
These linked instructions have not been tested and you may search the web for more instructions.
If you use Docker, you do not need to install Acos server locally in your computer.
If you still want to install the Acos server locally in your computer, you need
to install Node.js (version 8 LTS) and NPM first.
Then you clone the acos-server git repository:
git clone https://github.com/acos-server/acos-server.git
You can install dependencies of the Acos server and other content types and
content packages with NPM (in the acos-server directory):
# install other packages according to your needs
npm install acos-pointandclick
npm install acos-pointandclick-example
Run the Acos server with:
Enter the address http://localhost:3000 in your web browser.