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.
Freebies
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 toNetwork & 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
toeduroam
. - Set
Security type
toWPA2-Enterprise
. - Click
Next
and then onChange connection settings
. - Click on
Security
. - Set
Choose a network authentication protocol
toMicrosoft: EAP-TTLS
. - Click on
Settings
right next to it. - Set the
Enable identity privacy
fromanonymous
toeduroam@uni-bremen.de
. - Set
Connect to these servers
towlan.radius.uni-bremen.de
. - Under
Client authentication
setSelect a non-EAP method for authentication
toMicrosoft 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 toUser 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
toeduroam
- Set the
Security Type
toWPA2-Enterprise AES
- Set the
EAP Method
toEAP-TTLS
- Set the
Authentication method
toMicrosoft CHAP Version 2 (MS-CHAP v2)
- Set
Your private identifier
toeduroam@uni-bremen.de
(*) - 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 eduroam@uni-bremen.de
instead of anonymous
and wlan.radius.uni-bremen.de
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 enteryour_studip_name@uni-bremen.de
- 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!
Troubleshooting
- If required to enter a domain name on certain systems, enter
wlan.radius.uni-bremen.de
- If the authentication method doesn’t work, try PEAP with MS-CHAPv2 (Happens sometimes on Linux/Android)
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
toPEAP
- Set the
Identity
toyour_studip_name@uni-bremen.de
- Set the
Password
to your WLAN Password (See above) - Set
CA certificate
toDon't validate
- Set the
Domain
toradius.wlan.uni-bremen.de
- Set the
Phase 2 authentication
toMSCHAPV2
- Set the
Anonymous identity
toeduroam@uni-bremen.de
- Optional for further security: Set the
MAC address type
toRandomized MAC
(Automatic on Android 9+) - Hit the
Connect
button
Troubleshooting
- On some devices you might have to choose
TTLS
instead ofPEAP
in theEAP Method
- You might have to set
CA certificate
toUse system certificates
(or download the certificate manually) - You might have to set the
Online certificate status
toRequest status
or a different validation type
MacOS
On MacOS (11+) the setup process is quite straightforward:
- Download the eduroam Configuration file
- Double click the file to install the wifi profile.
- It will prompt you for your username and password, enter the full email address as the username and your WiFi password (NOT your university password!).
- If prompted for setting up the anonymity setting, set the anonymous username to
eduroam@uni-bremen.de
- If prompted for the authentication server, enter
wlan.radius.uni-bremen.de
- Connect to the eduroam WiFi network.
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 https://printerhost.informatik.uni-bremen.de/ 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?
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.
SSH vs HTTPs
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/id_rsa.pub
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
command.
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
Branches
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.
Conclusion
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 TopMedieninformatik
Grundlagen der Medieninformatik 1
Tutorium T08 (WiSe21/22)
Slides
- Das Dreieck Mensch-Medium-Maschine / Einführung - 20.10.21 (PDF)
- Menschliche Wahrnehmung / Gestaltgesetze - 27.10.21 (PDF)
- Digitalisierung - 03.11.21 (PDF)
- Kodierung - 10.11.21 (PDF)
- Bildmanipulation, Medienrecht und Gruppenbildung - 17.11.21 (PDF)
- AT-Gimp und Konzeptvorstellung - 24.11.21 (PDF)
- Konzeptvorstellung #2 und JPEG - 08.12.21 (PDF)
- JPEG - 15.12.21 (PDF)
- AT-HTML - 22.12.21 (PDF)
- Bootstrap - 12.01.22 (PDF)
Tutorium T12 (WiSe20/21)
Slides
- Einführung - 5.11.20 (PDF)
- Menschliche Wahrnehmung - 12.11.20 (PDF)
- Digitalisierung - 19.11.20 (PDF)
- Kodierung - 26.11.20 (PDF)
- Bildmanipulation-1, Medienrecht, Gruppenfindung - 3.12.20 (PDF)
- AT-Gimp - 10.12.20 (PDF)
- Konzeptvorstellung - 17.12.20 (PDF)
- JPEG - 07.01.21 (PDF)
- AT-Audacity - 14.01.21 (PDF)
- AT-HTML - 21.01.21 (PDF)
- Bootstrap - 28.01.21 (PDF)
- AT-CSS - 04.02.21 (PDF)
- Medienökonomie und Fragestunde - 11.02.21 (PDF)
- Kampagnen-Vorstellung - 18.02.21 (PDF)
Tutorium T15 (WiSe19/20)
Slides
- Einführung - 17.10.19 (PDF)
- Menschliche Wahrnehmung - 24.10.19 (PDF)
- Digitalisierung - 07.11.2019 (PDF)
- Kodierung - 14.11.2019 (PDF)
- JPEG DCT - 21.11.2019 (PDF)
- JPEG - 28.11.2019 (PDF)
- Anwendungstutorium GIMP - 12.12.2019 (PDF)
- Anwendungstutorium Audacity - 19.12.2019 (PDF)
- Anwendungstutorium HTML und CSS - 09.01.2020 (PDF)
Q&A
- Mensch-Medium-Maschine und Revolution/Evolution - 17.10.19 (PDF)
Tutorial
- HTML Tutorial (YouTube)
</li>
Grundlagen der Medieninformatik 2
Tutorium T04 (SoSe21)
Slides
- Drehbuch und Gruppenbildung - 13.04.21 (PDF)
- Kamera und Bild, Drehbuchvorstellung - 20.04.21 (PDF)
- Storyboards - 27.04.21 (PDF)
- Storyboards #2 - 04.05.21 (PDF)
- AT-Blender - 11.05.21 (PDF)
- Fragestunde - 18.05.21 (PDF)
- AT-Compositing - 25.05.21 (PDF)
- AT-Audio & Schnitt - 01.06.21 (PDF)
- Filmzwischenstand & Fragestunde - 08.06.21 (PDF)
- 3D Vektorrechnung - 15.06.21 (PDF)
- Koordinatensysteme - 22.06.21 (PDF)
- Animationen und Compositing - 29.06.21 (PDF)
- AT-Unity - 06.07.21 (PDF)
- Fragestunde - 13.07.21 (PDF)
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
Beispiele
- LaTeX Introduction (Github)
Praktische Informatik 2: Algorithmen und Datenstrukturen
Iterator, Comparable & more…
Nodes, Linked Lists, Trees & more…
- Simple Linked List (Gitlab) (Github)
- Double Linked List (Gitlab) (Github)
- Simple Tree (Gitlab) (Github)
Search Algorithms
Sorting Algorithms
- Bubble Sort (Gitlab) (Github)
- Insertion Sort (Gitlab) (Github)
- Merge Sort (Gitlab) (Github)
- Quicksort (Gitlab) (Github)
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.
PowerShell
- Bubble Sort (Github)
Batchfile
- BATCH Introduction (Gitlab) (Github)
- Password-Protected Self-Defending USB (Github)
- 3-Line PC crasher (Github)
- Chatroom using TCP Sockets (Github)
- Network Tool (Github)
- Open-Port Checker (Github)
- RGB-YCbCr-DCT Converter (MI-1) (Github)
Back to Top
Publications
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…
-
Sharky the hungry Sharkfish Game (Google Play)
Sharky is very Hungry! Help by feeding him as many fish as you can, but watch out for those nasty harpoons!
Sharky is a family-friendly game designed for all ages. Furthermore it is completely FREE
and AD-FREE. Collect coins to unlock powerups and new skins, and get that highscore!
Sharky is a great time killer for your free time as well!
Be it while waiting at the airport, or in the subway, sharky can played anywhere at any given time!
What are you still waiting for? Get Sharky today! -
SemesterPlaner - Plan your Schedule! (Google Play)
Tired of using the same old photoshop template for your semester schedule?
Why not automate your schedule creation today using Semester Planer!
Just select your work days, how long you work per day and hit that button!
Semester Planer will automatically create you a schedule table that can be filled,
edited and exported to PNG at any given time!
Stop wasting your time and use Semester Planer today! -
Open-Source Password Generator App (Google Play)
Passwords can be a real hustle, especially when you have a thousand accounts for a gazillion different websites...
There are some great password generators out there, however how can you ever really trust such a service if it is not open sourced?
Stop worrying about your passwords today, with this Free, Open-Source Password Generator!
Password Generator is completely FREE and AD-FREE, it works 100% offline an creates you a password in seconds!
The source code can be found on Github
Youtube and stuff...
Back to Top
Contact
Should you require additional help or have any questions, do contact me under s_xsipo6@uni-bremen.de - 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:
- Facebook (General Purpose): Leonard Haddad
- Instagram (Development and Photography): @xleolion3
- YouTube (Development): StrongLions / The Hi-Tech Lounge
Why Me?
If you are not convinced by the content on this page, then take a look at my CV
Back to Top
DISCLAIMER
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.