{"id":23792507,"url":"https://github.com/se2p/catnip","last_synced_at":"2026-06-29T09:31:42.175Z","repository":{"id":80478181,"uuid":"355524144","full_name":"se2p/catnip","owner":"se2p","description":null,"archived":false,"fork":false,"pushed_at":"2022-04-27T12:15:09.000Z","size":15081,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-05-27T09:23:09.746Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Scala","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/se2p.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE-EUPL","code_of_conduct":null,"threat_model":null,"audit":null,"citation":"CITATION.cff","codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2021-04-07T11:45:46.000Z","updated_at":"2022-05-11T01:15:09.000Z","dependencies_parsed_at":null,"dependency_job_id":"c9f428a4-ff9e-4f29-b28f-7f1d4cdbb939","html_url":"https://github.com/se2p/catnip","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/se2p/catnip","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/se2p%2Fcatnip","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/se2p%2Fcatnip/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/se2p%2Fcatnip/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/se2p%2Fcatnip/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/se2p","download_url":"https://codeload.github.com/se2p/catnip/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/se2p%2Fcatnip/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34921804,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-29T02:00:05.398Z","response_time":58,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-01-01T18:35:29.388Z","updated_at":"2026-06-29T09:31:42.152Z","avatar_url":"https://github.com/se2p.png","language":"Scala","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Catnip\n\nCatnip is a next step recommendation generation tool for [Scratch][scratch]\nprojects.\n\nCatnip is developed at the [Chair of Software Engineering II][se2p]\nand the [Didactics of Informatics][ddi] of the [University of Passau][uni-passau].\n\n\u003e This branch contains the version of Catnip as presented at ITiCSE 2022.\n\u003e For our ITiCSE 2021 paper (c.f. [Publications](#publications)), see the\n\u003e [branch `previous_version`](https://github.com/se2p/catnip/tree/previous_version).\n\n\u003e Checkout with `git clone --recursive` to clone the `scratch-gui` and `whisker`\nsubmodules.\n\n\n## Running The Hint Generator\n\n### Using `docker-compose`\n\n- In `build_containers.sh` change the path to a **Java 11** JDK.\n- Run `build_containers.sh` to\n  - apply the necessary patches to Whisker and the Scratch GUI\n  - Build the Docker containers for the GUI and the backend modules.\n- Add some solution `sb3`-programs to the `run_conf/tasks/.../solutions/` folder.\n- Adapt the settings in `run_conf/application.conf`.\n- `docker-compose up` to start the containers.\n- The GUI can be reached on `http://localhost:8080/`.\n- `Ctrl + C` stops the containers, they can then be removed with\n  `docker-compose down`.\n\n#### With Whisker\n\n- In `run_conf/application.conf` enable the option `runTestSuite`.\n- In `docker_compose.yml` uncomment/adapt the paths to the Whisker tests file\n  and the Whisker folder.\n\n\n### Without Docker\n\n#### Server\n- Run `./sbtx -java-home $JDK11 serve/assembly` where `$JDK11` is the path to\n  some **Java 11** JDK.\n- The runnable JAR file is placed in `serve/target/scala-2.13/hintgen-serve.jar`.\n  Copy it into `run_conf`.\n- Adapt the settings in `run_conf/application.conf`.\n  - Especially the settings `receivedProgramsDir`, `tasksBasePath`, and `tasks`\n    have to be adapted.\n  - You can ignore the `whisker…` settings if `runTestSuite` is `false`.\n- Start the server with\n  ```shell\n  cd run_conf\n  $JDK11/bin/java -Dconfig.file=application.conf -Dplay.http.secret.key=\"…\" -jar hintgen-serve.jar\n  ```\n\n#### GUI\n- Adapt the URL to the server component in `run_conf/server-info.txt`.\n- Run the same commands as in the GUI-section of `build_containers.sh`.\n  - Instead of running the `docker` command, place the content of the\n    `scratch_gui/build` directory into a folder that is served by some HTTP\n    server like nginx or Apache2.\n\n\n## Project Structure\n\n- `algorithm`: the actual implementation of the hint generator.\n- `serve`: the backend server connecting the GUI to the algorithm.\n- `run_conf`: configuration files for the server components.\n- `example_programs`: sb3 files used for unit-testing the various components.\n- `scratch-gui`, `whisker`: git submodules containing the respective projects.\n- `program_fixer.py`: The comments added by the hint generator to the programs\n  sometimes cannot be removed properly when copying blocks during application of\n  the hints. This results in an invalid program that neither LitterBox nor the\n  scratch-vm itself can parse.\n\n  This program removes all comments from a program to make it usable again.\n  Takes the filename of the program as first argument.\n\n\n# Publications\n\nTo learn more about Catnip and its hint generation technique, see the following papers:\n\n- F. Obermüller, U. Heuer, and G. Fraser, “Guiding Next-Step Hint Generation Using Automated Tests”, in\n  26th ACM Conference on Innovation and Technology in Computer Science Education V. 1 (ITiCSE 2021), ACM, 2021.\n  https://doi.org/10.1145/3430665.3456344\n  - code available on [branch `previous_version`](https://github.com/se2p/catnip/tree/previous_version)\n- B. Fein, F. Obermüller, and G. Fraser, “Catnip: An Automated Hint Generation Tool for Scratch”, in\n  27th ACM Conference on Innovation and Technology in Computer Science Education V. 1 (ITiCSE 2022), ACM, 2022.\n  https://doi.org/10.1145/3502718.3524820\n  - code available on [branch `master`](https://github.com/se2p/catnip/tree/master)\n\n\n# Contributors\nBenedikt Fein\\\nGordon Fraser\\\nFlorian Obermüller\n\n\n# Licence Information\n- Packaged with the [APTED][apted] algorithm (`algorithm/lib/apted.jar`),\n  published under MIT licence.\n  No source code has been changed.\n\n## Modules `algorithm`, `common`\nLicenced under the EUPL, Version 1.2 or – as soon as they will be approved by\nthe European Commission - subsequent versions of the EUPL (the ‘Licence’).\nYou may not use this work except in compliance with the Licence.\nYou may obtain a copy of the Licence at:\n\nhttps://joinup.ec.europa.eu/software/page/eupl\n\nUnless required by applicable law or agreed to in writing, software distributed\nunder the Licence is distributed on an ‘AS IS’ basis, WITHOUT WARRANTIES OR\nCONDITIONS OF ANY KIND, either expressed or implied.\nSee the Licence for the specific language governing permissions and limitations\nunder the Licence.\n\n## Module `serve`\nThis module contains the class `CustomScratchBlocksVisitor` that is directly\nbased on the source of the [LitterBox][litterbox] class `ScratchBlocksVisitor`\nas it can be found in LitterBox version 1.5.\n\nTherefore, this module is licensed GPL-3.0 identically to LitterBox.\nYou may use, distribute and copy it under those licence terms.\n\n\n[apted]: https://github.com/DatabaseGroup/apted\n[ddi]: https://ddi.fim.uni-passau.de/\n[litterbox]: https://github.com/se2p/LitterBox/\n[uni-passau]: https://www.uni-passau.de\n[scratch]: https://scratch.mit.edu/\n[se2p]: https://www.fim.uni-passau.de/lehrstuhl-fuer-software-engineering-ii/\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fse2p%2Fcatnip","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fse2p%2Fcatnip","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fse2p%2Fcatnip/lists"}