Portfolio

Poniżej znajduje się zbiór moich kluczowych projektów, które najlepiej obrazują moją drogę i rozwój jako programisty. Każdy z nich był okazją do nauki nowych technologii, rozwiązywania złożonych problemów i tworzenia praktycznych narzędzi.

Spotify Console Player 🎵

Opis Projektu

Konsolowa aplikacja w Pythonie, która pozwala na wyszukiwanie i odtwarzanie albumów z serwisu Spotify bezpośrednio z poziomu terminala. Projekt powstał jako ćwiczenie edukacyjne w ramach programu mentoringowego, a jego głównym celem była nauka komunikacji z zewnętrznym REST API od podstaw. Największy nacisk został położony na samodzielne zaimplementowanie pełnego i zaawansowanego procesu autoryzacji OAuth 2.0 (Authorization Code Flow), co jest kluczową umiejętnością w pracy z nowoczesnymi usługami sieciowymi.

Kluczowe Funkcjonalności:

  • Pełna obsługa procesu autoryzacji użytkownika za pomocą protokołu OAuth 2.0, włącznie z obsługą Redirect URI.
  • Wyszukiwanie albumów w bazie Spotify na podstawie nazwy podanej przez użytkownika.
  • Pobieranie listy aktywnych urządzeń użytkownika (np. komputer, telefon, głośnik) i umożliwienie wyboru jednego z nich.
  • Wysyłanie poleceń do API w celu rozpoczęcia odtwarzania wybranego albumu na wskazanym urządzeniu.

Użyte technologie:

  • Język: Python
  • API: Spotify Web API, REST API
  • Biblioteki: Requests
  • Inne: OAuth 2.0, JSON, GitLab

Linki:


Airport – Automatyczny System Lądowania ✈️

Opis Projektu

Zaawansowany system symulujący centrum automatycznej koordynacji lądowań dla lotniska. Aplikacja została zrealizowana jako kamień milowy w ramach programu mentoringowego Python, w którym biorę udział. W systemie samoloty (klienci) łączą się z centralnym serwerem (wieżą kontroli lotów), który bezpiecznie sprowadza je na ziemię, zarządzając ograniczoną przestrzenią powietrzną i dostępnością pasów startowych. Całość została zrefaktoryzowana z architektury opartej na sockets i threading do w pełni asynchronicznego rozwiązania z użyciem modułu asyncio, co znacząco uprościło zarządzanie współbieżnością.

Kluczowe Funkcjonalności i Cele

  • Implementacja logiki serwera (wieża kontroli) i klienta (samolot) z wykorzystaniem niskopoziomowych gniazd (sockets) i asyncio.
  • Stworzenie wizualizacji ruchu lotniczego w czasie rzeczywistym przy użyciu biblioteki Pygame.
  • Zapisywanie wszystkich kluczowych zdarzeń (lądowania, kolizje) w bazie danych SQLite przy użyciu puli połączeń z mojego poprzedniego projektu.
  • Obsługa komunikacji za pomocą protokołu opartego na formacie JSON.
  • Zaimplementowanie zewnętrznego API (REST oraz RPC) do monitorowania i sterowania symulacją w czasie rzeczywistym (np. pauzowanie, wznawianie, zamykanie systemu).

Użyte technologie

  • Język: Python 3.12+
  • Współbieżność: Asyncio
  • Wizualizacja: Pygame
  • Baza Danych: SQLite
  • API: REST, RPC
  • Inne: Sockets, JSON, GitLab

Linki:


Aplikacja Klient-Serwer z Pełną Refaktoryzacją Architektury

Opis projektu

Kompleksowa aplikacja Klient-Serwer, która przeszła ewolucję przez 9 etapów rozwoju – od prostego skryptu do w pełni rozproszonej architektury. Projekt ten był kamieniem milowym w programie mentoringowym, a jego celem było prześledzenie drogi programisty: od fundamentalnych podstaw, przez programowanie obiektowe, aż po zaawansowane techniki projektowania oprogramowania. Kulminacyjnym punktem była pełna refaktoryzacja architektury, która rozwiązała problemy duplikacji kodu i oddzieliła poszczególne warstwy aplikacji, implementując m.in. warstwę abstrakcji bazy danych i system logowania.

Kluczowe etapy i zrealizowane cele:

  • Implementacja od podstaw: Stworzenie aplikacji bez użycia zewnętrznych frameworków, z komunikacją opartą na formacie JSON.
  • Refaktoryzacja do OOP: Przebudowa kodu z wykorzystaniem zasad programowania obiektowego.
  • Integracja z bazami danych: Ewolucja od przechowywania danych w pliku JSON, przez ogólną implementację SQL, aż po adaptację do SQLite.
  • Testowanie i jakość kodu: Stworzenie testów jednostkowych dla logiki serwera z użyciem unittest oraz mocków do izolacji testów od bazy danych.
  • Pełna refaktoryzacja architektury (Etap 9):
    • Wydzielenie logiki do dedykowanych modułów (serwer, klient, sieć, obsługa bazy danych).
    • Stworzenie warstwy abstrakcji bazy danych, umożliwiającej łatwą zmianę silnika (np. z SQLite na PostgreSQL).
    • Zaimplementowanie globalnego systemu logowania w miejsce prostych instrukcji print.
  • Konteneryzacja: Przygotowanie aplikacji do uruchomienia w środowisku Docker za pomocą Docker Compose.

Użyte technologie:

  • Język: Python
  • Paradygmaty: Programowanie Obiektowe (OOP)
  • Bazy Danych: SQLite, PostgreSQL (przez warstwę abstrakcji), JSON
  • Testowanie: unittest, Mocking
  • Narzędzia: Docker, Docker Compose, GitLab

Linki


Desktopowa Aplikacja do Notatek w Tauri, Rust i TypeScript

Opis projektu:

Minimalistyczna i szybka aplikacja desktopowa do tworzenia i zarządzania notatkami w formacie Markdown. Głównym założeniem tego projektu było podjęcie unikalnego wyzwania: zbudowanie aplikacji od zera w zupełnie nowym dla mnie stosie technologicznym głównie za pomocą AI. Cały proces – od konfiguracji środowiska, przez implementację logiki, aż po integrację bibliotek – został zrealizowany przy użyciu Tauri, Rust i TypeScript, symulując proces wdrożenia się w nową technologię w warunkach zawodowych.

Kluczowe Funkcjonalności:

  • System przechowywania oparty na plikach: Notatki są automatycznie zapisywane jako osobne pliki .md w dedykowanym folderze w dokumentach użytkownika.
  • Edytor Markdown WYSIWYG: Zastosowanie biblioteki EasyMDE zapewnia wygodną edycję tekstu z paskiem narzędzi do formatowania.
  • Automatyczny zapis: Zmiany w notatkach są zapisywane na dysku chwilę po zakończeniu pisania przez użytkownika.
  • Dynamiczne zarządzanie notatkami: Możliwość tworzenia nowych notatek jednym kliknięciem oraz zmiany ich nazw (i nazw plików) poprzez podwójne kliknięcie.
  • Interaktywny interfejs: Czysty, dwupanelowy interfejs ułatwiający wybór i pracę z notatkami.
  • Spójny ciemny motyw: Cała aplikacja, włącznie z edytorem, posiada nowoczesny, ciemny motyw graficzny.

Użyte technologie:

  • Framework: Tauri (do budowy lekkich aplikacji desktopowych).
  • Backend: Rust (odpowiedzialny za całą logikę po stronie systemu plików: odczyt, zapis, zmiana nazwy).
  • Frontend: TypeScript (odpowiedzialny za całą logikę i interaktywność interfejsu).
  • Edytor: EasyMDE.
  • Narzędzia: Vite, HTML, CSS.

Linki:


Aplikacja Desktopowa do Scrapingu Danych z GUI (Tkinter)

Opis Projektu

Gotowa do użytku aplikacja desktopowa z graficznym interfejsem użytkownika (GUI), która pozwala na proste i szybkie pobieranie danych ze strony (prawie 5 milionów recordów wraz z dodatkowymi podstronami danych dla każdego z nich). Celem projektu było stworzenie narzędzia, które będzie w pełni użyteczne dla osób nietechnicznych. Aplikacja została napisana w Pythonie, a jej interfejs zbudowany przy użyciu biblioteki Tkinter. Całość została spakowana do jednego pliku wykonywalnego .exe za pomocą PyInstaller, dzięki czemu do jej uruchomienia nie jest wymagana instalacja Pythona ani żadnych dodatkowych bibliotek.

Kluczowe Funkcjonalności:

  • Zbudowanie intuicyjnego interfejsu graficznego (GUI) w bibliotece Tkinter, z rozwijanymi listami do wyboru kategorii i regionu.
  • Implementacja logiki scrapującej stronę internetową przy użyciu bibliotek requests oraz BeautifulSoup4.
  • Dodanie funkcjonalności eksportu zebranych danych do popularnych formatów: Excel (.xlsx) oraz CSV (.csv).
  • Przygotowanie aplikacji jako samodzielnego programu (.exe), gotowego do dystrybucji i uruchomienia na komputerach bez środowiska programistycznego.

Użyte technologie:

  • Język: Python
  • GUI: Tkinter
  • Kluczowe Koncepcje: Wielowątkowość (Multithreading)
  • Web Scraping: requests, BeautifulSoup4
  • Packaging: PyInstaller

Ze względu na komercyjny charakter projektu nie udostępniam kodu.


Własna Biblioteka Puli Połączeń (Connection Pool) w Celu Nauki Wielowątkowości

Opis projektu:

Projekt zrealizowany w ramach programu mentoringowego, którego celem było stworzenie od podstaw własnej biblioteki do zarządzania pulą połączeń (Connection Pool). Głównym założeniem nie było napisanie konkurencyjnego narzędzia, ale dogłębne zrozumienie i przećwiczenie zaawansowanych zagadnień związanych z wielowątkowością (multithreading), takich jak bezpieczeństwo wątków (thread safety) i zarządzanie współdzielonymi zasobami.

Kluczowe zrealizowane cele:

  • Zdobycie praktycznego zrozumienia wyzwań związanych z programowaniem wielowątkowym.
  • Zaimplementowanie mechanizmu bezpiecznego dla wątków, który zarządza cyklem życia połączeń.
  • Stworzenie działającej biblioteki od zera, opierając się wyłącznie na własnej logice i zrozumieniu problemu.

Użyte technologie:

  • Język: Python
  • Kluczowe Koncepcje: Wielowątkowość (Multithreading), Bezpieczeństwo Wątków (Thread Safety), Zarządzanie zasobami
  • Narzędzia: GitLab

Linki:


Mój aktualny „stack” technologiczny

MS Excel
Google Workspace
Google Apps Script
Python
Power Bi
GitLab