Giter Club home page Giter Club logo

openroberta / openroberta-lab Goto Github PK

View Code? Open in Web Editor NEW
123.0 20.0 119.0 475.91 MB

The programming environment »Open Roberta Lab« by Fraunhofer IAIS enables children and adolescents to program robots. A variety of different programming blocks are provided to program motors and sensors of the robot. Open Roberta Lab uses an approach of graphical programming so that beginners can seamlessly start coding. As a cloud-based application, the platform can be used without prior installation of specific software but runs in any popular browser, independent of operating system and device.

License: Apache License 2.0

Shell 0.14% Dockerfile 0.01% Java 21.54% ANTLR 0.03% JavaScript 51.36% CSS 0.47% HTML 16.67% TypeScript 4.81% Python 1.84% C++ 1.60% XSLT 0.23% Makefile 0.01% C 0.01% Batchfile 0.01% SCSS 1.29%
ide robots programming nepo roberta initiative education fraunhofer-iais

openroberta-lab's People

Contributors

akshat-khare avatar aykborstelmann avatar bagridag avatar bjost2s avatar boonto avatar caffetaria avatar ch40sl0rd avatar cpt-t-kirk avatar cvejoski avatar diestr avatar dpyka avatar elhele avatar ensonic avatar heini208 avatar janism91 avatar kevinl10 avatar mketterl avatar nishanth1232 avatar offlinecoder avatar pamocurtis avatar philippmaurer avatar raghuvirshirodkar avatar rbudde avatar rhasel4s avatar rohancheri avatar simonedegiacomi avatar techturtle11 avatar vinart avatar vlebedynska avatar yuvraj-kadale avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

openroberta-lab's Issues

provide a tool to manage sdcard images

In order to run openroberta lab with ev3s one needs to first prep sdcard images for them and then setup wifi. For class room setups this still takes some times for preparation (setting up the wifi password 10 times).
In addition for classrooms that will use a local roberta server, the teacher will need to setup and manage the raspberry pi 2 server (another sdcard image to fetch and also wifi to setup).

What if we write a portable app (java) that makes this easy?

  • user selects which of the scenarious is in use:
    1. only ev3 images using lab.openroberta.org
    2. ev3 images using a local server
  • user configured wifi settings (ssid and password)
  • the app remembers what images one has downloaded last and can check if updates are available
  • when updating, the app downloads the images and applies customization
    • scenario i:
      • set the wifi configuration on the ev3 images
      • set unique hostnames for each ev3 image (just number them or use real names from a list)
      • select lab.openroberta.org as the server
    • scenario ii: (in addition to scenario i)
      • set the openrobertalab.local as the server
      • configure wifi access point on the raspi image
  • then a dialog will ask the user to insert cards, write them, insert next card, ... until all is up-to-date
  • there could be some menu item to rewrite a ev3 image or raspi image (e.g. if the card was lost or got broken).

For the future the tool could also handle doing database setups of the raspi and restoring those after sd-card updates.

support for third party EV3 sensors

Ordered by user priority:

Sensor ev3lejos ev3dev issue
NXT IRLink Sensor, info yes yes, no documentation
HiTechnic compass sensor, info yes, untested yes, no calibration #764
Dexter compass sensor, info yes no
Mindsensors compass sensor, info yes, untested yes
HiTechnic IR-Seeker V.2, info yes, untested yes #765
NXT light sensor, info yes yes #612
Adapter für Grove-Sensoren für EV3 oder NXT info no maybe
Mindsensors Light Sensor Array for NXT or EV3,info yes, untested yes
Dexter Thermal Infrared (TIR), info yes, untested no
HiTechnic NXT EOPD, info yes yes

Program suddenly "not a valid NEPO program" anymore

At some point, adding only a few blocks and compiling the Calliope Mini program glitches out the function last worked on to the top left of the canvas next to the start block. The compilation seems to work fine, but the workflow is severely interrupted, since the old function is basically inaccessible. Trying to save the project before compilation and re-importing it afterwards (even after reloading) results in the message "»NEPOprog.xml« is not a valid NEPO program and cannot be uploaded!" — The XML itself seems to be fine.

screenshot from 2018-04-22 20-52-28

XML before and after

Feature Request: Simulator Data Logging

One of the ways we motivate learners to write programmes is to get them to write programmes to use the robot as a mobile data logger.

Is there any way of logging and either displaying or downloading logged sensor data in the simulator? For example, drivingt he robot over the coloured lines in the simulator and then displaying the light sensor data either against either time or wheel rotations?

(I am particularly keen on being able to do this in the simulator.)

AdHoc groups for group work on the same server

It would be nice to have a way to associate sessions on the server into a group. The is key to enable group work where robots collaborate (including robot to robot messaging). One could see such a group like a jam session used by musicians.

The whole design would not require accounts to make it easy to use. I imagine this workflow:

  1. one user selects from the menu Groups/New group ...
    1. a window shows up where the user can name the group, name himself (if guest) and click okay
    2. this creates the group and will show a window with the group pairing code (and the people that have joined already)
  2. now other users on the same server can go to the menu and select Groups/Join group ...
    1. a window will pop up where they must enter the pairing code and can change their name (if guest)
  3. for each joined guest the name will show up in the window for the group creator
  4. the group creator has now a menu enabled that contains:
    1. 'Groups/Close group ...', this will ask for confirmation and remove the group with all the joined people.
    2. Groups/Info .... this will re-show the window with the pairing-code and the number of people that are conencted.
  5. users that have joined, have a menu `Groups/Leave ...' that after confirming removed them from the group

With this setup we can implement the ideas below. If this sounds good, we'll create sub-tickets for each of them later.

  • resolve bluetooth addresses - we add the mac addr of the bt interface to the robotinfo. The server can build a Map of name to mac addr and include this into generated code. The code can use the Map to go from name to mac-addr. We might even beable to tweak the blockly blocks, so that one can pick the name of the robot from a drop-down (more work?)
  • share programs with the group
  • collaborative simulation - this would allow to also add other group members robots to the simulation.

common error codes

The improvements need a clear concept before starting implementing

Robot-Server-Protocol defines a few values for the "Nepo Exit Value" field. We need to expand those to map all kind of failure cases on the robot:

  • sensors/actors not plugged
  • program cannot be stored (e.g. file already exists and is not deletable, disk full, ...)

We can use those to show sensible error messages on the UI.

For a start we should have a enum with the error code in the sources . Right now it is just an int (search codebase for nepoExitValue). We can link this from the protocol wiki page.

Ideally we can't also send some optional text in addition to the 'nepoexitvalue' ('nepoexitdetails' ?). This won't be covered by the translations, but could be shown as 'Details' in the UI.
See: https://github.com/OpenRoberta/robertalab/blob/master/OpenRobertaServer/staticResources/js/app/roberta/controller/guiState.controller.js#L120

Help users to understand large numbers (e.g. beep for 7000000000 ms)

I notices that some kids like to use large numbers. A common case where this can be problematic is the duration on the beep block. I even heard the justification "it is just milliseconds". It would be nice to show the kids how much the value is actually in years, month, days, hours, ...

This could be done:

  • as a comment in the generated code
  • as a dynamic comment on the block itself (needs to be refreshed when the input changes)

The checker is probably not the right place, since we don't want to add a hard limit.

rad vs degree

we have to decide, whether we use rad (pi/2) or degree (90°). This has to be consistent for all robots. Degrees seems to be the best choice (or?).

With Calliope, we have 2 errors:

  • the simulation expects rad, the robot degrees
  • asin(1) on the robot returns 89.1 instead of 90.0

Blockly layout bug?

the "test if true/false" blocks overlaps the "change bock" i marked it with a red square:

image

Drawing robot / environment

When i use the robot in the drawing environment. The line will be deleted after resizing the simulation environment.

I would expect this behaviour after using the the button "Moving back your robot to the initial position".
Maybe the best solution would be to have a seperate button for this functionality.

bad design when accessing crosscompilers

Code like

        String nbcCompilerFileName = this.robotCompilerResourcesDir + "/windows/nbc.exe";
        if ( SystemUtils.IS_OS_LINUX ) {
            nbcCompilerFileName = "nbc";
        } else if ( SystemUtils.IS_OS_MAC ) {
            nbcCompilerFileName = this.robotCompilerResourcesDir + "/osx/nbc";
        }

is used in the Factory and CompilerWorkflow sources at many places. Pathes to binaries must be supplied as parameters from the environment. Hidden assumptions (nbc is on the path in linux and not in osx etc. should be avoided.

Before the implementation is changed, a comment should be added to this ticket, which describes, what the problematic implementations are and how they should be refactored.

As a user I'd like to leave a group

Precondition: the user is logged in

People: user, group admin

Subjects: group

  1. From the menu "user" user chooses "go to groups".
  2. User is redirected to a groups tab with the list.
  3. User can leave one, several or all the groups:
  • to leave one group user presses a leave button in the line of this group in the table
  • to leave several groups user ticks the groups to be deleted and presses leave button on the top of the table
  • to leave all the groups those belong to the user, user ticks a checkbox on the top of the table and presses delete on the top of the table.
  1. The system responses with a popup that contains the following:
  • question if the user really wants to leave the group(s)
  • name of the group / list of the names of the groups
  • button to confirm and button to abort
  1. The user confirms the deletion by pressing the corresponding button.
  2. The system checks if everything is correct and returns:
  • a message that he/she left the group if everything is fine; user will also immediately see that the group disappeared from the group list
  • in case the user was an admin, he/she will see a popup with a list of the group members, from whom he/she chooses the new admin, and confirmation and abort buttons.
  • a popup with the error description in case if group deletion cannot be performed. This case is unlikely and can happen only because of some database or server error.
  1. The user loses access to shared programs and the programs shared by users are not shared with the group anymore.
  2. Admin of the group receives a popup that the user left the group.

This can also be used as a test case.

This issue is related to #384

Interactive source code view (Medium/Hard)

The Open Roberta® Lab using the graphical programming language NEPO provides an easy access in the world of programming robot system without any prior programming experience. In parallel to the program created with the NEPO language one can also see the corresponding source code generated for the specifiy robot system. Currently in the source code view the whole code is shown.

We would like to add code folding and hide boilerplate code by default, so that new users are not distracted. In addition we would like to link the graphical blocks to the generated code, and the possibility by changing parts of the generated source code the NEPO representation of the program to change.

On the technical side, the project involves:

  • extending the code generators (written in Java) to link block ids to character ranges in the generated code
  • adding UI support for highlighting and jumping to code when a block is clicked
  • identifying and hiding boilerplate code (eg when block id is invalid)
  • optionally, linking the block parameters to the parameters in the generated code
  • optionally, improving the readability of generated code

Mentor:

Scrolling toolbox not possible

With my asmartphone i can not scoll the toolbox.

image

Browser: Chrome and Firefox
OS: Android 8
Display: 6 Zoll (15,24 cm)
Resolution: 2160 x 1080 Pixel

Store drafts in browser

To prevent losing programs, especially on mobile devices that can readily lose the tab, unsaved drafts should be stored in the browser and reloaded on startup.

small enhancements for C (and Python) code generator

  • 1. #define a constant for the sleep-time (wait blocks, ...).
  • 2. #define a constant for 255.0/9.0, which is used at many places for calculating the brightness
  • 3. replace the pattern if (... == true) by if(...) and if(... == false) by if(! ...). Actually the patterns are mixed (I see both (... == true) and (...)
  • 4. replace while(true) by while(1) or vice versa. Actually we have a mix.
  • 5. the layout of a label used in a generated goto (from a "break out from loop") is broken
  • 6. we generate dead code after a generated goto (from a "break out from loop")
  • 7. if a programmer chooses as function name a name used by the mbit runtime, e.g. "release_fiber", the compiler bails out. We should decide whether we ignore that or have a server side checker detecting this (will be a lot of names) or use prefixing to decrease probability of clashes or ...

These are small enhancement. May be done if there is time :-)

Support different font sizes for ShowText() ?

See ev3dev/ev3dev-lang-python#323 for some background

Current status:

Small text can be problematic in low light conditions.
The ShowText block uses Row/Col coordinates which makes it hard to mix text sizes.

  1. We could add a DrawText command that takes x,y coordinates and a font from a list. Additionally we'd provide getFontHeight/getFontWidth 'Sensors' with the same font list.
  2. We could make the font part of the brick config (then it is still only one font size, but it can be adjusted).

make graphical code better readable by non-programmers by using correct grammar

Some text blocks are not named in a way that they create a readable sentence when connecting those blocks.

  1. sensor data objects (green with blue puzzle nose on their left side) like degree celsius of thermometer or brightness of light sensor should not start in the naming with "get" as they are built into the code as an grammar object, not as a relative clause including verb.
    Example: I want to check for the compass pointing North.
    "If get angle° compass sensor = 0" is not understandable and does not seem "correctly programmed" for a kid. Why not can the block "degrees of compass"? Then it would be "If degrees of compass = 0" and "set k to degrees of compass" instead of "set k to get value° compass sensor".
    I would advice to following changes:
  • get xxx gesture ==> is moved xxx
  • get angle° compass sensor ==> angle of compass (or "degrees of angle of compass")
  • get sound% microphone ==> loudness from microphone (or "% of loudness from microphone")
  • get value ms timer 1 ==> milliseconds of timer 1 (or "milliseconds of timer" as there is only 1 timer. And: kids don't know what "ms" is, "milliseconds" may give them a feeling.)
  • get value° temperature sensor ==> degrees Celsius from thermometer
  • get value signal strength ==> signal strength
  • get value% light sensor ==> brightness (or "% of brightness of light sensor")
  • get analog pin 1 ==> analog pin 1
  • get angle° gyroscope x ==> angle of x gyroscope (or "degrees of angle of x gyroscope")
  • get value milli-g accelerometer x ==> acceleration in milli-g
  1. It is possible to embedded blocks into others instead of appending at the end. So why not use it to allow the natural order of words.
    I would advice to call it "wait xxx milliseconds" instead of "wait ms xxx".

  2. "repeat 10 times do" are two verbs in one sentence. "repeat 10 times:" (colon at the end) will be clear enough, "do" as a word is not needed. Or use "repeat 10 times this:"
    And: "repeat indefinitely this:" instead of "repeat indefinitely do".

  3. "integer" is no term a newby understand. Why not call it "random whole number between xx and yyy" instead of "random integer from xx to yyy" ?

Shall I change it myself and offer a pull request? As there are 0 pull requests for this project, I am not sure if you would look at this. So I first wanted to discuss this here as an issue.

As a guest user I'd like to give my programs a name

Right now a program only gets a name when you save it. If you start with a new program it will be called NEPOProg and that will be the name e.g. on the EV3. Also when you export the code, it will be called NEPOProg.xml. In the paste one could rename the xml file, but nowadays after importing, the program will be not be named after the filename.
Having a way in the UI to give the code a name, would allow people to store multiple programs on the robot.

NAO Missing Object Recognition

Dear all,

I was wondering if the OpenRobertaLab is working on methods for object (or vision) recognition with NAO. Face recognition is integrated so I hope object recognition will be too.

RPI: compilation on latest raspbian image (debian stretch based) stops with an error

Hello,

compiling the latest snapshot 2.3.1 on a raspbian pi 3 with the latest raspbian image (based on debian stretch) ends with an error. With the last jessie-image from july 17 everything works fine.
Mavens output is attached: RobotArdu_failure_stretch.txt

Cheers corvus-albus

Infos about my enviroment:

$ java -version
java version "1.8.0_65"
Java(TM) SE Runtime Environment (build 1.8.0_65-b17)
Java HotSpot(TM) Client VM (build 25.65-b01, mixed mode)

--> you get the same error with 'openjdk version "1.8.0_141"'.

$ mvn --version
Apache Maven 3.5.0 (ff8f5e7444045639af65f6095c62210b5713f426; 2017-04-03T21:39:06+02:00)
Maven home: /opt/apache-maven-3.5.0
Java version: 1.8.0_65, vendor: Oracle Corporation
Java home: /usr/lib/jvm/jdk-8-oracle-arm32-vfp-hflt/jre
Default locale: de_DE, platform encoding: UTF-8
OS name: "linux", version: "4.9.35-v7+", arch: "arm", family: "unix"

$ uname -a
Linux ORServer-Corvi 4.9.41-v7+ #1023 SMP Tue Aug 8 16:00:15 BST 2017 armv7l GNU/Linux

$ cat /proc/device-tree/model
Raspberry Pi 3 Model B Rev 1.2

$ cat /etc/apt/sources.list.d/raspi.list
deb http://archive.raspberrypi.org/debian/ stretch main ui

As a user I'd like to be able to create groups for sharing programs

Precondition: the user is logged in

People: user -- admin of the group

Group: the group to be created

  1. From the menu "user" user chooses "go to groups".
  2. User is redirected to a groups tab with the list of the groups with groups' creators' names -- the ones admined by user and the ones to which the user belongs.
  3. User presses a button for group creation.
  4. The system responses with a popup that contains the following:
  • a text input field for the program name
  • button to confirm and button to abort.
  1. The user types a name of the group and confirms the creation by pressing the corresponding button.
  2. The system checks the user's input and returns:
  • a message that the group was created if everything is fine; user will also immediately see the created group in the group list
  • a popup that the group already exist if the name has already been taken
  • a message that the name contains prohibited symbols in case the name contains potentially dangerous symbols

This can also be used as a test case.

NXT: Simulation has constant wheel diameter and track width

The NXT-simulation ignores the setting of wheel diameter and track width in the robot configuration tab.
This affects the angle-sensors of the involved motors. You can calculate that wheel diameter is set to ~5.6cm and track width to ~13.3cm. The latter differs to the standard track width on the configuration tab which is 12 cm.

Ignoring the numbers on the configuration tab is confusing if you simulate the use of the angle-sensors. On the other Hand the used constant values seem to reflect the dimensions of the robot shown in the simulation.

I would prefer to ignore the dimensions of the shown robot and better take the inserted parameters on the robot configuration tab for calculating the motor-angle. These are the values the user wants to deal with.
The best solution would be to adapt the robot shown in the simulation to the values in the configuration tab. But I doubt if this is worth the time to implement.

Cheers corvus-albus

P.S. You can reproduce the issue with the folllowing program:
NEPOprog_calculating-wheel-diameter-and-track-width.txt. Changing the wheel diameter or the track width has no effect.

Infinite loop of error dialogs

I got this when changing wifi network while the lab was loading.

screenshot from 2016-07-14 11 52 30

Clicking OK in the dialog makes it disappear and then immediately reappear.

Indicate where blocks modify the input (e.g. clip max speed)

Assume a block like:

[ Drive forward speed % ] [ 5000 ]

Since the speed value is to be given in percent, we will limit the input to a value from 0...100. It would be nice to indicate the to the user. We could do this with a checker. Ideally we put the warning sign into the number box though.

Easy access to NAO FS to retrieve pictures/video and upload audio files

Currently there is no easy way to download pictures or video taken by NAO other than having FTP or SSH connection to the robot. There is no easy way to upload audio files to play by NAO as well.

For example Choregraphe provides a browser in Connection > Advanced > File Transfer. Maybe this should be built into USB program.

So:

  • I would like to use blocks "take picture", "record video", "play file"
  • I can use first two blocks, but I cannot download recorded media back to my computer
  • I cannot use the third block at all, since I cannot upload media to NAO in the first place.

As a teacher I would like to setup a local Open Roberta Lab server on a raspberry pi and maintain it easily, eg. with a GUI

make it as easy as possible:

  • install the server on a raspi pi and / or provide an image with the already installed server -> create a debian package
  • provide start, stop, restart server commands via a webinterface
    • update the server, if desired. This includes also
    • update the server to a specific version
    • update robots firmware, if necessary and possible
  • offer a basic fail-safe system
  • offer a basic server configuration setup
    • add / remove robot plugins
    • configure toolboxes for robot plugins?

nice to have:

  • synchronise the raspi pi data base with the online data base on demand

update robot protocol

The improvements need a clear concept before starting implementing.

The push protocol is necessary to handle restricted network setups. It comes with limitations (bandwidth and latency) and overhead though. A websocket won't have these limitations, but might not work in all cases.

  • prefer websocket with push protocol fallback
  • send connected peripherals with each push (or heartbeat in the case of websockets), sensors or encoder will contain their mode and value as well
  • publish new endpoint under versioned urls. this allows us to keep older version alive for some time

As a user I would like to share programs with a group I belong to

Precondition: the user is logged in, the user belongs to the group, the program to share is in "my programs", user is in "my programs" tab

People: user, group members

Subjects: group, program

  1. User presses "share" button in the table line of the corresponding program.
  2. The system response is a popup with the following information:
  • name of the program to share
  • text input field with the username
  • list of the groups to which user belong with check boxes
  • button to confirm and button to abort.
  1. The user ticks the groups with which he/she would like to share the programs and presses a corresponding button.
  2. The system checks if everything is correct and returns:
  • a popup that sharing was successful if everything is fine; in this case user will immediately see the name of the group(s) in a "shared" column
  • a popup with the error description in case if group deletion cannot be performed. This case is unlikely and can happen only because of some database or server error.
  1. Users who belong to the group will see the shared program in their program list as shared in the group.

This can also be used as a test case.

This issue is related to #384

NAO infrared sensor missing

NAO robot supports infrared receiving/sending of information. Following blocks are available in choreographe:
image
Full specification can be found here:
NAO infra-red

Aldebaran provides an example of usage infrared to send data:

# -*- encoding: UTF-8 -*-

"""
Send an element of each of the 3 supported data type to nao
"""
from naoqi import ALProxy
import time

lirc=ALProxy("ALInfrared","127.0.0.1",9559) # change IP with NAO IP
lirc.sendIpAddress("127.0.0.1") # Send IP address
time.sleep(0.5) # Delay necessary for a reliable transfer
lirc.send8(42) # Send the number 42
time.sleep(0.5)
lirc.send32(0x42, 0x2A, 0x13, 0x0D) # Send one 32 bits number
time.sleep(0.5)
lirc.send32("36757575") # Send one 32 bits number

As well as receiving data (in this example a callback is registered with an action to perform when NAO receives an IP address):

# -*- encoding: UTF-8 -*-

"""Receive an IP address"""
import naoqi
import time

# create python module
class myModule(naoqi.ALModule):

    def pythondatachanged(self, strVarName, value, strMessage):
        """callback when data change"""
        print "IP address = ", value, " ", strMessage

# call method
try:
    pythonModule = myModule("pythonModule")
    prox = naoqi.ALProxy("ALMemory")
    prox.subscribeToEvent("InfraRedIpAdressReceived", "pythonModule", "pythondatachanged")
except Exception, e:
    print "error"
    print e
    exit(1)
time.sleep(10)
exit(0)

Other robots in the lab support sending and receiving messages, for example like EV3:
image

A similar mechanism could be implemented having IR instead of bluetooth as connection media.

horizontal scaling with docker

in directory Docker there is a README describing how openroberta is put into docker container. There is also a description how to create these containers with docker, but that is not interesting here. The standard docker deployment is done with 2 container using docker-compose file dc-server-db-server.yml

  • one container is the database server
  • the other container contains the server and all crosscompiler

Calling the crosscompilers is likely the resource-intensive part. Thus the following idea arises:

  • create a third container containing all the cross compiler (the dockerfile for that is already there, because it is used for creating the server container)
  • deploy this container as often as needed

Now the "challenge": we need to add load balancer support to our (main) server. Standard load balancer won't work (pls convince me from the opposite ...). This is needed because we have to bundle 2 tcp-connections from different clients (robot + browser) and have to guarantee, that the program from the browser is sent to the crosscompiler container, that is used by the robot to retrieve the binary from. This is a non-standard kind of stickyness for a load balancer.

I propose first to assemble ideas, before we start any imlementation :-)

Mbed Simulation: some blocks return undefined

The "get pin" block returns undefined:
image
The "get gesture" block returns undefined if the specified gesture is not the current gesture. True is correctly returned when both are the same.
image

As a user I'd like to be able to delete groups

Precondition: the user is logged in, the user is an admin of the group, group to be deleted exists

People: user, group members

Subjects: the group to be deleted, programs shared in the group

  1. From the menu "user" user chooses "go to groups".
  2. User is redirected to a groups tab with the list of the groups with groups' creators' names -- the ones admined by user and the ones to which the user belongs.
  3. User can delete one, several or all the groups those belong to the user:
  • to delete one group user presses a delete button in the line of this group in the table
  • to delete several groups user ticks the groups to be deleted and presses delete button on the top of the table
  • to delete all the groups those belong to the user, user ticks a checkbox on the top of the table and presses delete on the top of the table.
  1. The system responses with a popup that contains the following:
  • question if the user really wants to delete the group(s)
  • name of the group / list of the names of the groups
  • button to confirm and button to abort.
  1. The user confirms the deletion by pressing the corresponding button.
  2. The system checks if everything is correct and returns:
  • a message that the group was deleted if everything is fine; user will also immediately see that the group disappeared from the group list
  • a popup with the error description in case if group deletion cannot be performed. This case is unlikely and can happen only because of some database or server error.
  1. The non-admin members of the group will see a popup that informs them about group deletion when they log in for the first time after the deletion of the group. The group will disappear from their group list as well.
  2. The programs shared in the group will be deleted after group deletion. If people want to keep the programs they have to save it to they own programs in advance -- that can be explained in a pop-up.

This can also be used as a test case.

This issue is related to #384

copy and past of blocks BETWEEN different programs

I use a function to explain what I want. I have written a function and want to use it in another program.
Many solutions are possible, but at least one should be available:

  • copy in one program, open another program, paste and get the function.
  • save the function in the lab using name "myFunction" and have a new menu entry "import fragment"
  • drag and drop between different browser instances.
    I prefer the first solution.

Return compiler output as feedback to users

For many robots the program is compiled serverside and we get errors/warnings from the compiler.
We should add functionality to display the compiler output to the user.
The different errors/warnings should be mapped to user friendly messages or may displayed raw by choice.

This would also remove the need of restricting user defined variable/function names in some cases (see 7 of #766): the user is notified of overwriting existing functions/variables/keywords.

Visualize block functionality in the online help sidebar

The Lab shows help information for each block in the sidebar. The content is extracted from a wiki where contributors can write it. This is not child or beginner friendly.
One idea to improve this is to have animated samples for each block there. This could be done by pre-rendering animated gifs using the simulation. An alternative would be to refactor the simulation and embed a tiny simulator in the help sidebar to demo the block. For this we'd need a small sample program for each block.
Another aspect of the project is to improve the tooling that manages the content extraction (and make it handle translations).
Finally, the project could demo the new feature by adding online help content for a new robot.

Mentor: Beate

Feature request: add local variables

Hello!

It would be very useful to have "hidden" variables in functions. If you like to add for example a loop variable in a function there will be a useless input position at the function-block. In effect I see no possibility to create a non-input local variable in a function.

I think it would be very useful to have those hidden local variables in functions.

Keep up the good work.
corvus-albus

As a group admin I'd like to be able to remove users from my group

Precondition: the user is logged in, the user is a group admin

People: group admin, users to be deleted

Subjects: group

  1. From the menu "user" user chooses "go to groups" and chooses the group with which he/she would like to work by double click or pressing the corresponding button.
  2. User is redirected to a group members tab with the list of the group members.
  3. User can remove one, several or all the users from the chosen group:
  • to delete one user admin presses a delete button in the line of this user in the table
  • to delete several users admin ticks the users to be removed and presses delete button on the top of the table
  • to delete all the users those belong to the group, admin ticks a checkbox on the top of the table and presses delete on the top of the table.
  1. The system responses with a popup that contains the following:
  • question if the admin really wants to remove the user(s)
  • name of the user / list of the names of the users
  • button to confirm and button to abort.
  1. The admin confirms the deletion by pressing the corresponding button.
  2. The system checks if everything is correct and returns:
  • a message that the user(s) was(were) removed if everything is fine; admin will also immediately see that the user(s) disappeared from the group members list
  • a popup with the error description in case if user removal cannot be performed. This case is unlikely and can happen only because of some database or server error.
  1. The deleted users will see a popup that informs them about their removal from the group when they log in for the first time after their removal. The group will disappear from their group list as well.
  2. The programs shared in the group are not shared with the removed users anymore. If people want to keep the programs they have to save it to they own programs in advance -- that can be explained in a pop-up. The programs shared by the removed users are not shared with the group anymore.

This can also be used as a test case.

This issue is related to #384

As a user I'd like to invite people to the group and create new users

Precondition: the user is logged in, the user is an admin of the group, group exists

People: user, potential group members

Subjects: the group, users to be created

  1. From the menu "user" user chooses "go to groups" and chooses the group with which he/she would like to work by double click or pressing the corresponding button.
  2. User is redirected to a group members tab with the list of the group members.
  3. User presses a button for adding user.
  4. The system responses with a popup that contains the following:
  • a text input field for the program name
  • button to confirm and button to abort.
  1. The user types a name of the user and confirms adding by pressing the corresponding button.
  2. The system checks the user's input and returns:
  • a message that the invitation to user was sent if the user exists
  • a popup with a question if the user would like to create a new user with this name if the user doesn't exist, and button to confirm and button to abort. The user presses the corresponding button and gets a user creation popup with already filled name. As soon as the user is created, he/she appears in a group members list
  • a message that the name contains prohibited symbols in case the name contains potentially dangerous symbols.
  1. Invited users will receive an invitation popup when they log in next time. The popup contains the following:
  • question if they agree to join the group
  • name of the group
  • button to accept and a button to decline the invitation.
  1. If the potential group member confirms the invitation, he/she appears in the group group member list and can see the group in their group list. Otherwise, group admin receives a popup with a message that the invitation was declined by the user.

This can also be used as a test case.

This issue is related to #384

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.