Programming with Python
Kühne Logistics University Hamburg - Fall 2026
Sessions VIII–IX. The first 40 minutes are the checkpoint. It starts now: the board runs one final audit before the big news.
groupby, honest charts vs. misleading onesMenu → Download → Download Python code → upload the .py to the “Checkpoint 5” assignment on Moodle. No retakes: one sitting.
The green ✅ live checks are provisional. The final grading runs on my side. The two multiple-choice tasks only say “recorded”, not ✅. That’s expected, they’re scored later. And take a breath: everything in it was rehearsed in the labs.
Pens down. The checkpoint is behind you, and so, it turns out, is the startup. Overnight the rival chain MunchCorp stopped competing and made an offer: they’re buying the company. The investor read the term sheet, did the math against her own, and told you to take it: her money would have bought growth, theirs buys the whole shop.
The lawyers will tell you deals close on the numbers. This one closed on yours. The clean order data you pulled together in the data room (Session VIII) and the honest dashboard you built for the pitch (Session IX) are exactly what convinced the acquirer the books were real.
No cliff-edge growth chart with a chopped axis. Just data that survived a second look. That’s why they signed.
Tobi’s job today is to hand over the data room: every file the company ever built. He tapes a note to the folder:
“It’s all here. And it was never anything fancy. Every notebook you downloaded all semester was already a plain
.pyfile. Same code, same lines. Open one in a real editor and it just runs.”
That’s the whole reveal, and most of you already suspected it. Those downloads stop being backups today and become the real thing: on your own machine, in a real editor, under your control.
Every acquisition comes with an exit package. Here’s yours: you don’t join MunchCorp. You spin off your own idea and build it.
Let’s get you kitted out.
Over the next weeks you build one real project and present it in the final session.
README.md carries a short AI-disclosure section: which tools you used, what for, and what you verified yourselfPick something you’re actually interested in. You’ll spend real hours on it. Curiosity is the fuel that carries a project past the boring middle.
The project does not have to be flawless. Show that you scoped it honestly, built it in the open, and can explain your own code. That’s the whole bar.
Data analytics dashboard
Bonus: interactive dashboard (streamlit), automated reporting.
Web scraping pipeline
Bonus: multi-source, change detection, alerts.
Simulation study
Bonus: interactive parameters, scenario comparison.
Automation assistant
Bonus: scheduling, notifications, a small UI.
Game
Bonus: levels, high scores, procedural content.
ML-powered app (ambitious: lean on AI)
Bonus: monitoring, A/B comparison.
Your startup spin-off
Bonus: wherever your version wants to grow.
Your own idea: the open door
Right now, in the room:
A good outcome by the end of this block: a one-sentence pitch (“we’re building X that does Y for Z”), a name for the project, and a decision on who owns the shared repo (the owner creates it in the git block; the partner clones). The sentence keeps you honest about scope; the name goes on the repo in a minute.
Before we build anything, the installs from the Session IX homework need to work. In a terminal:
Didn’t work? Don’t burn the session fighting it. Flag it, pair up with your partner’s working machine, and follow along on the slides for now. I sort it out with you in class or by e-mail; nobody gets left behind.
Before your laptop can talk to GitHub, it has to prove it’s allowed to. Signing in to Zed does not do this; git needs its own login, and the gh tool handles it. Once per computer, in a terminal:
Choose GitHub.com, HTTPS, authenticate in the browser, and answer yes to “Authenticate Git with your GitHub credentials?”. Then, once:
Login fighting you? Same rule: flag it, follow along on the slides, and finish at home with the Git Basics page, or with me in the supervised sessions. Nobody’s project stalls on a login.
Everyone, right now, a practice repo. On github.com click New repository, then:
python-practicePythonCreate repository, then copy the HTTPS URL from the green Code button: https://github.com/you/python-practice.git
That’s a repository: a folder git watches, with its whole history. So far it lives only on GitHub. Next we bring it down.
In Zed’s command palette (Cmd/Ctrl+Shift+P): git: clone, paste the URL, and pick the folder where you keep course work. Zed opens the new folder as your workspace: the file tree on the left shows README.md and .gitignore.
Everything from here on happens inside this folder: git, uv, the AI. If Zed ever shows an empty file tree, File → Open Folder and pick the cloned folder itself, not the one above it.
uv initOpen Zed’s built-in terminal (Ctrl+`); it starts inside your workspace. Then:
uv init adds main.py, pyproject.toml and .python-version next to the README.md and .gitignore that GitHub made.
--no-package keeps it a flat folder of scripts, the shape you know from the labs; without it, uv builds an installable package layout you don’t need yet. And no git init: the folder came from GitHub, it is a git repository already.
Grab a lab .py you downloaded in Part I: we’ll use nb_03_lab_functions.py. Copy it into your project folder, then open it in Zed: it’s just code. Read it.
The file needs its tools first; adding a package is one command:
Now run it, no browser required:
uv run uses the project’s own Python and packages. The file that lived in a browser tab all semester now runs on your machine, from your editor. That’s the whole point of today. (Part-I labs only today; the pandas labs need more packages and their CSV.)
Part III encourages AI. You’ve earned the co-pilot, and it’s already installed: Mistral Vibe, running inside Zed on the key from Session VI (setup in the AI-tools guide). Open the agent panel, pick Mistral Vibe, and try it on your five-minute-old project:
Explain what
main.pydoes, then add a docstring. Don’t change anything else.
Read the diff Zed shows you before you accept it. That’s the whole workflow: you ask, it drafts, you verify.
The disclosure rule still stands, now in writing: your repo’s README.md says which tools you used, what for, and what you checked yourself. AI drafts; you verify, same reflex as the checkpoint you just sat.
Git has a small vocabulary. Learn these five and you can do everything this project needs:
Two of them you’ve already done: the repo exists, and you cloned it. The other three now, live, in your practice repo. Mistakes are cheap when the repo is five minutes old.
Your folder has new files worth saving: main.py, pyproject.toml, .python-version, the lab. In Zed’s command palette:
git: stage all: mark everything as part of the snapshotgit: commit (Cmd/Ctrl+Enter): type a message, save itBecause the folder came from GitHub, git already knows where “up” is. In Zed: git: push. In the terminal:
Reload the repo page on github.com: main.py is there. That’s the loop you’ll repeat all project long: edit → commit → push. Pull is the other direction; you’ll see it in a minute.
Now the one that counts. Repo owner only, same recipe as the practice repo, with three extras:
.gitignoreuv init --no-package, commit, push, exactly as beforePartner: don’t create a second project repo. Yours arrives by invitation in a moment.
The partner accepts the invitation (GitHub e-mails it) and clones the project into a fresh folder, next to the practice repo:
git: clone, paste the project’s HTTPS URLCloning brings the whole project, its history and the connection to GitHub; the partner pushes and pulls normally from the first moment. Now the owner edits README.md, commits and pushes, and the partner runs git: pull (git pull): the change lands on the second laptop. That’s the fifth word.
Clock ran out? This step keeps: inviting and cloning works just as well at the start of Session XI, with me in the room.
Two people, one repo. Four habits keep it painless:
git: pull first, every session: this alone prevents almost every problem--force, no “force push”, everEverything today (the actions, the terminal equivalents, the setup, and a cheatsheet table) lives on the Git Basics page. When today’s follow-along is a fading memory, that’s the page you reopen.
Between now and then, the repo tells your story. Commit as you go. A steady history is worth more than a heroic final night.
The skill fades if it sits idle. A few honest ways to keep it alive:
print to a real project on your own machineAll the best for your studies and your career. Now go build the thing.
Setting up the toolchain? The Installing Python, AI Tools and Git Basics pages are the reference versions of everything we did live today.
For more, see the literature list of this course.
Lecture X - Tooling, Git and Your Project | Dr. Tobias Vlćek | Home