Skip to the content.
MedienInformatik Praktische Informatik Freetime & more More from Me Contact

Welcome to my Website!

If you need help with your courses and exams, or are just looking for some fun things for your free time, you have come to the right place! For more cool stuff, check out my other website!

Did you know? I offer Java and Python software development. For price enquires, see the contact section.

What can you find here?

If you study computer science or something similar you might find some helpful examples and sample solutions to various fields of study. These have accumulated over the years during my studies at the University of Bremen, and shall be published here to help you advance in your studies.

Furthermore, you will find various guides for a wide range of things, as well as some cool scripts for other tasks.

Who am I?

My name is Leonard Haddad.
I am a 22 year old, Israeli-German Computer-Science Masters student at the University of Bremen.
On this Website you can find some stuff I created to help others out with their courses, along with some other cool stuff I do in my free-time.
If you require additional help, or would like to file a development request, take a look at the Contact section.


Did you know that as a student you receive a ton of useful benefits and free stuff from different vendors? Here you can find a couple of useful free things you get access to.

Microsoft Azure (and Windows licenses!)

Get your free Azure benefits!

Microsoft offers a bunch of free software licenses, as well as hosting time on it's Azure servers. Just head over here and verify your student status. After doing so, you will find everything you have access to in your Azure's homepage. Alternatively, here's the direct link.

Technical Stuff

WLAN Uni-Bremen

The document below explains how to set up the Eduroam wifi network on different devices without using 3rd party tools (as I hate such tools).

Eduroam Wi-Fi Setup

Uni Wifi Setup

Windows 8/10

  • Open Settings and navigate to Network & Internet > Wi-Fi.
  • On the right, click on Network and Sharing Center.
  • Click on Set up a new connection or network.
  • Click on Manually connect to a wireless network.
  • Set the Network name to eduroam.
  • Set Security type to WPA2-Enterprise.
  • Click Next and then on Change connection settings.
  • Click on Security.
  • Set Choose a network authentication protocol to Microsoft: EAP-TTLS.
  • Click on Settings right next to it.
  • Set the Enable identity privacy from anonymous to
  • Set Connect to these servers to
  • Under Client authentication set Select a non-EAP method for authentication to Microsoft CHAP Version 2 (MS-CHAP v2).
  • Exit by clicking ok.
  • Click on Advanced settings.
  • Tick the Specify authentication mode if it is unticked and set it to User authentication.
  • Click Ok and close all remaining windows.
  • Show the available Wifi networks and connect to eduroam.
  • When prompted, enter your uni email and wifi password and hit connect.

Windows 11

This guide uses Windows 11, it should be identical in other windows versions

Configuring Eduroam as WPA2-Enterprise

  • Navigate to Settings > Network and Internet > Wi-Fi > Manage known networks
  • Click on Add Network
  • Set the Network name to eduroam
  • Set the Security Type to WPA2-Enterprise AES
  • Set the EAP Method to EAP-TTLS
  • Set the Authentication method to Microsoft CHAP Version 2 (MS-CHAP v2)
  • Set Your private identifier to (*)
  • Save the network

(*) If the private identifier is not available, you need to click save, then while connecting to the network click on Network Settings > Advanced Network Settings > Network Adapter Options then Double Click on the Wifi Adapter in the legacy Network Connections Menu and navigate to Wireless Properties > Security > Hit the Settings Button next to the Network Authentication Method. Check the Enable identity privacy option and enter instead of anonymous and under Connect to these servers. Save and exit, then log into the network again.

Logging in

  • Open your available Wi-Fi networks
  • Click on eduroam and connect
  • Click the yes button if asked whether or not you think this is the right network
  • In the Username field enter
  • In the Password field enter your WLAN password (NOT your University password), which you can get on Here (Link takes a while to load, Uni systems are slow af)
  • You’re all connected! Well done!


  • If required to enter a domain name on certain systems, enter
  • If the authentication method doesn’t work, try PEAP with MS-CHAPv2 (Happens sometimes on Linux/Android)


  • Open Wi-Fi settings
  • Select eduroam and connect
  • Android will open the Network’s security settings
  • Expand the View more settings at the bottom
  • Set the EAP method to PEAP
  • Set the Identity to
  • Set the Password to your WLAN Password (See above)
  • Set CA certificate to Don't validate
  • Set the Domain to
  • Set the Phase 2 authentication to MSCHAPV2
  • Set the Anonymous identity to
  • Optional for further security: Set the MAC address type to Randomized MAC (Automatic on Android 9+)
  • Hit the Connect button


  • On some devices you might have to choose TTLS instead of PEAP in the EAP Method
  • You might have to set CA certificate to Use system certificates (or download the certificate manually)
  • You might have to set the Online certificate status to Request status or a different validation type

Back to top

Printing in FB3 Uni-Bremen

Printing in MZH/FB3 at Uni Bremen

To print anything at the FB3 (in the MZH) the computer science department has moved the printers outside the E0 rooms into the floor and installed a raspberry pi running the PaperCut printer server software.

To print a document, simply navigate to then sign in with your university email address and password. Upload the document you wish to print then submit the job. Next, take your nfc tag and head towards the printer. There, just hold your nfc tag against the reader and hit print.

Note: you get 300 free pages of print per semester. Use them.

Just wtf is Git?

Every developer should know what Git is and how to use it. The below document contains an oversimplified explanation of Git and its functions.

WTF is Git?


Wtf ist git?

To quote Wikipedia (yes it’s no scientific source, gimme a break): “Git is software for tracking changes in any set of files, usually used for coordinating work among programmers collaboratively developing source code during software development. Its goals include speed, data integrity, and support for distributed, non-linear workflows.”

Ok… what does this mean for me?

When working on a project together, sending files back and forth using Whatsapp or whatever is not just a hustle but unscalable with very large projects - thats where git comes in handy. Git tracks all the changes you (and other devs) have done on a project and attempts to merge (join) these changes together when you upload your changes.

You said upload, where to?

Git works with Git Repositories. For the sake of simplicity, we will say that a git repository is just a “Storage device in the cloud” that has a log of all changes that each developer has published (e.g. like a file manager that knows when which files were created, changed, deleted, etc.).

Popular platforms for hosting git repositories include Github (now owned by Microsoft) and Gitlab.


When working with remote git repositories, one can either use SSH oder HTTPs to authenticate with the remote hosting provider (the one hosting the repositories). HTTPs uses Username-Password authentication while SSH uses Public-Private key authentication.

Public-Private key authentication

In a Public/Private key architecture the public key is used to encrypt information and the private key is used to decrypt information. This works thanks to some very fancy mathematics that I will not discuss here.

When authenticating with a remote server you and the remote server know each others Public keys and use these to establish a TLS Tunnel (a secure encrypted tunnel) to exchange information.

The Public key may be shared publicly, the private key, however, must never be shared.

Many people prefer SSH over HTTPs, both because it can be more secure (depending on your password strength and many other factors) and because its much less of a hustle to work with.

Generating an SSH Keypair

  • To use SSH instead of HTTPs, launch a terminal of your choice (on Windows the Windows Terminal is excellent, powershell is fine and cmd is crap to work with) and then enter the command
ssh-keygen -t rsa -b 4096

This will launch the ssh-keygen application and provide it the parameters -t rsa for “type: RSA” and -b 4096 for specifying that the key should be 4096 Bits long. The number can be replace by any number greater than 2048, however the bigger the number the more secure it is. 1024 should not be used anymore as it has theoretically been proven to be insecure.

If you want to know what RSA means, please take the time to read up on the RSA Algorithm.

  • After entering the command it will ask you where you would like to save your key (and it will show you the default path “~/.ssh/”), you do not want to change this unless you know what you are doing, in which case you would probably not be reading this article. Just hit enter without entering anything.

  • It will then ask you to enter a password for your key. You can leave this field blank, it will however be less secure as anyone with your private key will be able to immitate you.

After entering a passphrase it will take a couple seconds to generate the key (on slow systems), and will then print out the key’s randomart.

Adding SSH Public key to Gitlab/Github

Now to add your key to Gitlab/Github (the process is identical), you want to first copy your public key.

  • To do this, enter the following command (also works on Windows using WT oder powershell):
cat ~/.ssh/

Notice the “.pub” following the filename? That indicates its the public key. The private key is stored by default in “~/.ssh/id_rsa”.

This will print out the key. You want to highlight it from the first “-“ before “BEGIN RSA PUBLIC KEY” and up until the last “-“ after “END RSA PUBLIC KEY” and copy it (in WT/Powershell using the right click mouse button copies whatever text it highlighted to the clipboard).

  • Navigate onto Github and go to your account settings. Click on “SSH and GPG Keys” and under “SSH Keys” click on “New SSH Key”.

  • Leave the Title empty for now and paste your key under “Key” into the input box. The title will be set automatically, you can however change this to whatever you want. The only use of the title is for you to be able to distinguish your different keys.

How does git work? (Oversimplified)

We will use a simple work-life-analogy to demonstrate how git works.

Remote repository

Consider yourself working in an office. Your archiving department has a cardboard box containing a projects papers (A4 papers), this box containing the “original” documents is the “remote repository” (hosted on Github/Gitlab).

Cloning and local repository

When you “clone” a repository, you are basically going into your boss’ office, taking his papers, copying them and putting the copies into your own cardboard box. Your own cardboard box is your “local repository” - the one that exists on your own system.

To clone a repository we use the

git clone /link/to/repository


Git Add

For you to work on your papers you need to take them out of the box. When the papers have been changed, you put them back in the box. This is identical to using the

git add fileName

command, with which you add your changed files to a “commit”.

Git Commit

When you commit your changes you are basically taking your box (with all the new changes), closing it with a lid and adding a label on top with a “commit message” of your choice (it should correspond to whatever you have done, be short but precise) for the archiving department. The commit will contain a “label” which is auto-generated (in our analogy by the label printer) and used to distinguish different commits.

Doing this is identical to using the command

git commit -m "commit message"

There are more ways of doing this:

git commit -a # -> opens whatever text editor was assigned to be used with git, the message can be entered inside the text editor and when the file is saved the message is applied
git commit --amend # Identical to -a
git commit --message "commit message" # Identical to -m

Git Push and Conflicts

When pushing your changes, you are taking your closed box and handing to to the workers at the archiving department, who will attempt to add your changes to the original papers in the remote repository. He will check whatever changes you have made and append them to the remote files. If you have shredded any of your papers (deleted files), he will proceed to shred the ones he has, and if you have added any papers he will copy them and add them to his own box.

This is identical to using the command

git push

Sometimes the archiving department receives multiple boxes that have changed the same paper at the same spots (same file and same lines, for instance in a java file). This will result in what we call a “Conflict”.

The changes of your co-worker have already been applied since he came in first, so now the archiving worker asks you to “fix the conflicts”. This means you open your box and the archiving departments one, compare the two files and choose which changes should be kept and which should be discarded. Once the conflicts have been fixed, another commit is created (with your box) with a label saying that the conflicts have been resolved. This commit contains the newest version of the documents and will overwrite whatever is present in the archiving department’s box.

Git Pull

To fetch whatever changes have happened to the original documents, you ask an archiving department worker to hand you copies of whatever files have changed so you may add them to your own box. Doing this may result in conflicts that need to be resolved.

To do this, use the command

git pull

Git Fetch

To fetch the remote changes without actually updating your own documents (e.g. you know what changed but your files are still old), use the command

git fetch


What if you are asked to work on a side project without changing the archiving department’s documents? This is where branches come in.

Creating a new branch is identical to asking the archiving department to create a new box (your branch on the remote repository) with a given label. Now, whenever you change your files, you no longer join them with the original documents, but rather with your box in the archiving department (note that you still work on your own copy of the documents and push your changes to the archiving department).

To create a new branch, use the command

git checkout -b newBranchName

With the checkout command you can checkout files (if you want to discard changes in a given file for instance) and swap the current working branch.

The “-b” symbolises that you wish to create a new branch using your current changes (even uncommitted). The “newBranchName” is the label your branch will have.

Note: Even though you have changed the branch locally, the remote doesn’t know that this branch exists (because git on your system does not automatically synchronise with the remote server, unlike tools like SVN).

To publish your branch on the remote, enter the command

git push --set-upstream origin newBranchName

This will add the new branch to the remote and push your current changes to it.

  • To see a list of available branches, use the command
git branch
  • To delete a branch, use the command
git branch --delte branchName
  • To switch to a branch, use the command
git checkout branchName

Merging branches

When you and your co-workers are working on implementing different features you will often be working on different branches. You can however join your changes with that of a colleague. To do this, switch to whatever branch you want your colleagues changes to be joined with (your branch will receive their changes) and use the command

git merge otherBranchName

This may result in conflicts, which will need to be resolved.

Pull Requests

In a normal office environment you will normally never push your changes directly to the “master” (newly called “main” branch), so that you don’t break a working software by pushing buggy code. Rather, you will be working on your own branch to implement a given feature.

When your branch has the feature ready, in order to publish the feature to the working software, your branch will need to me merged onto the main branch. This is done by creating a “pull-request”. Note that it is possible to switch to the main branch and use the merge command mentioned previously to add the changes onto the main branch, this however does not work in corporate projects as the main branch is often “protected” - which means it cannot be directly modified.

When creating a pull-request you are notifying your superiors that a change is ready to be joined onto the main branch. Workers assigned to evaluate your code will review whaever changes you have made and add their opinions on things that you should change. After changing everything accordingly an authorised worker will merge your branch onto the main branch, bringing the feature to life in the production software.


This was a quick walkthrough of some of the features git has to offer. Git is a very mighty tool if used appropriately and an essential tool every developer should know.

Back to Top


Grundlagen der Medieninformatik 1

Tutorium T08 (WiSe21/22)


Tutorium T12 (WiSe20/21)


Tutorium T15 (WiSe19/20)




Grundlagen der Medieninformatik 2

Tutorium T04 (SoSe21)


Back to Top

Praktische Informatik + Exams

Are you looking for old exams, or for some examples? Take a look at what I got!

Praktische Informatik 1: Imperative Programmierung und Objektorientierung


Praktische Informatik 2: Algorithmen und Datenstrukturen

Iterator, Comparable & more…

Nodes, Linked Lists, Trees & more…

Search Algorithms

Sorting Algorithms

Back to Top

Things for your free-time

While the section on this website contains mostly nonsense, my other website offers highly sophisticated tools for a wide range of use cases, from bank balance forecasts and investment yield calculations to password creation and cold-storage to digital file transfers and commandline automation.



Back to Top


B-More-Human: Dynamic Cheering Reactions for humanoid Football-Robots (Bachelor Thesis)

The B-Human football robots were incapable of showing emotions during RoboCup games. This has been changed. The process of doing so required various tweaks dozens of code-fragments throughout the B-Human framework and the introduction of various new mechanisms.

The thesis can be found here.

Grade: 1.3 (for non-germans, its basically an A, just one step under a 1.0 which is the highest possible grade in Germany.)

* The corrections can be provided upon request. Long live open source and free access to information!

Back to Top

More from Me...

Here you can find stuff that I do in my free-time…

Youtube and stuff...

Back to Top


Should you require additional help or have any questions, do contact me under - You may write your message in either English, German, Arabic or Hebrew.

For business inquiries, App development requests and other stuff, please contact me personally on one of my social media accounts:

* If sending a developement request, please do stick with English. Thank You!

Why Me?

If you are not convinced by the content on this page, then take a look at my CV

Back to Top


The Google Play name and Logo are Copyrighted Google LLC. I do not claim, nor have any affiliation with Google.
Powershell and the Powershell Logo are copyrighted Microsoft Corporation. I do not claim, nor have any affiliation with them.
Python, the name and the Logo are copyrighted trademarks of the Python Software Foundation. I do not claim, nor have any affiliation with them.