This page contains frequently asked questions about the technologies used in the course and the releases/project.


Technologies

These FAQs are related to the coding environment.

Why JavaFX? Can I use another framework to implement the project?

What kind of computer can I use to code in?

What do I need to install?

How can I be sure that I have installed everything correctly?

Which Integrated Development Environment (IDE) should I use?

Why use Git from the command line? Can I use GUI clients or Eclipse plug-ins instead?


Releases/Project

These FAQs are general questions about the releases/project.

Why is the project handout so vague on what functionalities should be implemented and how to implement them? Why are there no test cases that we need to pass?

How can I be sure that my machine is properly set up to start the project?

How do I import the template project into my IDE?

How often should I commit and push changes to the Git repository?

What happens if my teammate(s) and I decide to work together on the same computer?

Can I submit a release/project late?

Can I use Lambda expressions, Streams, and other modern Java features?

Can I import external Java libraries?

What exactly counts as submitting my code?

How will the marker run my application?

Do I need an OpenAI subscription or paid API access?

Should I commit apiproxy.config, tokens, or other credentials?

Can I use generative AI for the project?

What code or assets require attribution?

What should I do if a teammate is not contributing or cannot be contacted?


Course Information and Support

Where are official deadlines and announcements published?

Are lectures, labs, and design meetings compulsory or recorded? What if I cannot attend?

Where should I ask different kinds of questions?




Technologies

Why JavaFX, why Java? Can I use another framework or language to implement the project?

You must use JavaFX in this course. We did not choose JavaFX because it is the best and most popular framework to write GUI applications. We have chosen JavaFX because it is widely recognised as the best framework for developing desktop GUI applications in Java. We must use Java in this course.

The decision to use Java is based on pragmatic reasons. Given the substantial work you need to do for the design project, you cannot afford the luxury of learning a new programming language from scratch. Your recent experience with Java from SOFTENG281 makes it an optimal choice, as it’s a language we can confidently say everyone is familiar with.

Continuing to code in Java will also enable you to become more proficient in it, which is crucial. Having a solid grasp on one language is important; it makes the transition to learning another language much smoother.

Now, while JavaFX might not be as common as some other frameworks, it has some noteworthy applications. For instance, NASA leveraged JavaFX to implement the software controlling robots and rovers in their Mars Rover Missions. If it’s robust enough for NASA, it certainly has some substantial benefits worth exploring! :)


What kind of computer can I use to code in?

You can use any personal computer that runs one of the main operating systems: Linux (any distribution), Microsoft Windows, or macOS.


What do I need to install?

If you were a student in SOFTENG 281, you just need to install Scene Builder (Git and JDK will be the same versions that we used for SOFTENG 281).

You have to install the following, in this suggested order:

  • Git 2.x (any 2.x version is fine) (see installation instructions for macOS and Windows).
  • Java JDK 21 (see installation instructions for macOS or Windows).
  • Scene Builder (see installation instructions here). You need Scene Builder so you can build the user interfaces for your labs, releases, and project using drag & drop.


How can I be sure that I have installed everything correctly?

You can do the following checks:

  1. Open your terminal and run the command git --version

     If the output begins with `git version 2.`, then you have Git properly installed.
    
  2. Make sure that the environment variable JAVA_HOME is properly set. From the command line, run:

     <code class="language-plaintext unixbg">echo $JAVA_HOME</code> <span class="unixtxt">for Unix/macOS</span> or <code class="language-plaintext windowsbg">echo %JAVA_HOME%</code>  <span class="windowstxt">for Windows</span>
    
     You should see a path containing JDK 21. For example, on macOS: `/Library/Java/JavaVirtualMachines/jdk-21.x.x.jdk/Contents/Home`.
    
  3. Open your terminal and run java -version. Make sure the output reports major version 21; the exact patch version may differ.

    If your Java environment is not properly set, please refer to the instructions on the Resources page.

  4. For Scene Builder, just make sure that you can open it.


Which Integrated Development Environment (IDE) should I use?

You must use VS Code. It is important that all members of the group are using the same IDE. Also, the formatting of Java files is automated with VS Code, and the code style checker is based on that.


Why use Git from the command line? Can I use GUI clients or IDE plug-ins instead?

GUI clients and IDE Git plug-ins can make some tasks faster, but they may also hide the Git concepts and commands you need to understand. For example, they might add files automatically or combine commit and push operations. We strongly encourage novice Git users to start with the command line so they can understand what each command does. Once you are comfortable with these commands, you can choose the tools that best suit your workflow.




Releases/Project


Why is the project handout so vague on what functionalities should be implemented and how to implement them? Why are there no test cases that we need to pass?

The project is not an “assignment” with one model answer. The project brief and released requirements describe the client’s core expectations, but they intentionally do not prescribe every aspect of the product.

Although you are also learning about requirements engineering, the design meetings in this course are not primarily requirements-gathering activities. Most decisions about the application’s detailed behaviour, interaction flow, GUI, and implementation are deliberately left open for you to make using your professional judgement.

Design meetings give you an opportunity to present a small number of meaningful alternatives, explain their advantages and disadvantages, and obtain feedback from the client. They are not intended for asking the client to design the product or make every decision for you.

An important skill for you to develop is that of a professional manner in how you conduct yourself with stakeholders (clients or otherwise).

The requirements establish the boundaries of the project, but within those boundaries there may be many valid solutions. For example, the client will not prescribe exactly how the GUI should look, how many buttons it should contain, or the precise interaction flow.

Software engineering is an engineering discipline, and it involves the essential art of you being an engineer that understands the role of taking the initiative in making design decisions and standing by them.

Developing a software application from scratch will result in a wide range of “what ifs” and “should we do it like this or like that?”. In this course, most of these decisions are yours to make. Consider the alternatives, use your professional judgement, and be prepared to explain your reasoning. If your decision is sensible, well justified, and consistent with the client’s core expectations, then you are on the right track.

Embrace uncertainty, and use it to flourish your creativity.


How can I be sure that my machine is properly set up for doing the project and marking?

Download Hello World FXML

Download and unzip the contents of the sample Hello World JavaFX project. Do not change the files inside!

Open the terminal and navigate inside the folder javafx-hello-world-fxml, then run:

  • ./mvnw clean javafx:run for Unix/macOS or .\mvnw.cmd clean javafx:run for Windows.

If you see the JavaFX app running, you are good to go!

Note that the first time you run the wrapper, it might take some time to download the required libraries and dependencies. This is expected.

If you see a BUILD FAILURE, it may indicate a Java installation or configuration problem. Check the error message and refer to the Resources page.


How do I import the template project into my IDE?

Clone the project to your machine.

VS Code

  • Open VS Code
  • Click File > Open Folder
  • Choose the cloned folder (containing the Maven pom.xml file)

Note: If prompted by VS Code, install the following extensions:


How often should I commit and push changes to the Git repository?

As you work on your releases/project, you must make frequent Git commits. If you commit only your final code, it will look suspicious and you will be penalised. As a general rule, commit and push after making meaningful progress so that you do not lose your work. You can check your GitHub account to make sure your commits are being recorded.

Frequent commits are even more important in a team project because they help the team stay synchronised and work with the latest codebase. Merging becomes more difficult when commits and pushes are large and infrequent.

Using GitHub to frequently commit your changes is mandatory in this course.


What happens if my teammate(s) and I decide to work together on the same computer?

There is nothing wrong with sitting at the same computer with your teammate(s). In fact, pair programming is a well-known software development technique. It’s also a great way to collaborate in terms of learning from others and giving feedback to each other.

However, an important aspect of this course is you demonstrating that you can collaborate with others and make valuable contributions to the project. Therefore, the Git commits and Report history (track changes) MUST show everyone contributing. If you all decide to work on the same workstation, you will need to switch accounts such that the Git commits and Report track changes show everyone’s fair contributions.

It is essential that all commits and track changes show everyone contributing!


Can I submit a release/project late?

Because releases are marked through presentations at specific times, late submissions cannot be accepted.

Remember that we expect you to commit to your remote GitHub repository frequently. Even if you do not have everything implemented by the deadline, your commits should show your progress so that you may receive partial marks. Your submitted code is extracted automatically from GitHub.

As the presentations will naturally happen at slightly different times, we need to ensure fairness in terms of how much time everyone had to work on the code.

Therefore, after each release/project deadline passes, we will make your GitHub repository read-only. After the presentations end for everyone, we will reinstate write access to continue pushing your commits.


Can I use Lambda expressions, Streams, and other modern Java features?

Yes, you can use Lambda expressions, Streams, and all other modern Java features.


Can I import external Java libraries?

Yes, you can, and you are encouraged to add as many external dependencies as you need in the pom.xml file.

The only requirement is that such dependencies must be in the Maven Central repository. See the instructions here. Also, read the licence of each dependency carefully. We will cover how to understand licences in class.


What exactly counts as submitting my code?

Your code is submitted through the GitHub repository assigned to you or your team. Before the deadline, make sure all required work is committed and pushed to the main branch. Work that exists only on your computer or on another branch is not part of your submission.

As you did in SOFTENG 281, verify your submission by cloning the repository into a different folder and running the application with the provided Maven wrapper. This confirms that all required files have been committed and that the project compiles and runs correctly from a fresh clone.


How will the marker run my application?

The marker will clone your GitHub repository and run the application with JDK 21 using the provided Maven wrapper.

Your application must not depend on VS Code settings, absolute file paths, or files that have not been committed.


Do I need an OpenAI subscription or paid API access?

No. You do not need a ChatGPT subscription, a paid OpenAI account, or OpenAI API credits. The course will cover the cost of the API usage required for the project.

For the project, you must access the OpenAI models through the course-provided API wrapper. Do not replace it with the official OpenAI API: the token we provide will work only with our wrapper and will not be accepted by the official API.

We will email you a personalised token, in the same way that you receive your Code Style token. Keep it private, store it only in apiproxy.config, and never commit it to GitHub.


Should I commit apiproxy.config, tokens, or other credentials?

No. Never commit credentials or API tokens to GitHub. Keep them in the local configuration files already excluded by the template’s .gitignore. Markers will use their own credentials.


Can I use generative AI for the project?

Yes. This assignment follows a Lane 2 approach: generative AI may assist you, but the project’s core creative direction must be your own. AI may support critique an refinement but it must not replace your original thinking, technical understanding, or professional judgement.

  • Ideas and story: You must develop the original concept, story, characters, timeline, and narrative direction without AI. After developing your own idea, you may use AI to critique it, stress-test it, identify weaknesses, or suggest improvements. You must decide which suggestions to adopt and write the final story and timeline yourself.

  • Graphics and media: Once you have established your own creative direction, you may use AI to produce assets such as backgrounds, avatars, NPC images, music, and audio. All AI-generated assets must be attributed. How to provide attribution will be covered in class.

  • Java and JavaFX code: You may use generative AI, including tools such as GitHub Copilot, to assist you in writing code. However, “vibe coding” will not get you very far, and copying code without understanding it is not acceptable. You must understand and be able to explain and defend any AI-generated code that you submit.


What code or assets require attribution?

Any code, images, audio, fonts, or other assets that you did not create must comply with their licence and be acknowledged where required. This includes material copied or adapted from websites, Stack Overflow, GitHub, and other projects, as well as AI-generated assets such as images, music, and audio.

See Code reuse, licences, and attribution before adding third-party material.


What should I do if a teammate is not contributing or cannot be contacted?

Raise the issue with your teammate early and agree on clear tasks. If the problem continues, contact the course coordinator promptly.

Do not wait until the release deadline or contribution questionnaire to report a serious teamwork problem.


Course Information and Support


Where are official deadlines and announcements published?

Canvas is used for announcements, deadline changes, presentation schedules, and grading. The course website contains the project requirements and detailed rubric and submission tasks.

Check Canvas regularly. If information appears to conflict, follow the most recent Canvas announcement.


Are lectures, labs, and design meetings compulsory or recorded? What if I cannot attend?

Attendance is not formally recorded. Traditional lectures are recorded, but design meetings are interactive and are not recorded.

You are strongly encouraged to attend design meetings because they are your opportunity to ask questions directly to the client. Clients do not use Ed Discussion and will not answer design questions outside these meetings. If you cannot attend, ask a teammate to represent you and raise your questions on your behalf.

Labs are optional drop-in sessions and are not marked.


Where should I ask different kinds of questions?

Ask technical and general course questions on Ed Discussion or at a drop-in lab. Ask design questions during design meetings, because clients do not use Ed Discussion.

For administrative matters, email the course coordinator. See Ways to connect for more information.