📁 project_root/ ├── 📁 src/ │ ├── 📁 core/ │ │ ├── 📄 __init__.py │ │ ├── 📄 database.py │ │ ├── 📄 config.py │ │ └── 📄 utils.py ├── 📁 tests/ │ ├── 📄 setup.py │ ├── 📄 deploy.sh │ └── 📄 backup.py ├── 📄 requirements.txt ├── 📄 Dockerfile └── 📄 main.py class ProjectManager: def __init__(self): self.project_structure = { 'src': { 'core': ['database.py', 'config.py', 'utils.py'], 'api': ['routes.py', 'models.py', 'middleware.py'], 'services': ['auth_service.py', 'user_service.py', 'notification_service.py'], 'utils': ['validators.py', 'decorators.py', 'helpers.py'] }, 'tests': { 'unit': ['test_database.py', 'test_auth.py', 'test_utils.py'], 'integration': ['test_api.py', 'test_services.py'] }, 'docs': ['README.md', 'API.md', 'DEPLOYMENT.md'], 'scripts': ['setup.py', 'deploy.sh', 'backup.py'] } def create_project_structure(self): """Create the complete project directory structure""" for folder, contents in self.project_structure.items(): if isinstance(contents, dict): for subfolder, files in contents.items(): self._create_folder(f"{folder}/{subfolder}") for file in files: self._create_file(f"{folder}/{subfolder}/{file}") else: self._create_folder(folder) for file in contents: self._create_file(f"{folder}/{file}") def _create_folder(self, path): """Create a folder at the specified path""" os.makedirs(path, exist_ok=True) print(f"📁 Created folder: {path}") def _create_file(self, path): """Create a file at the specified path""" with open(path, 'w') as f: f.write(f"# {path}\n") print(f"📄 Created file: {path}") class DatabaseManager: def __init__(self, connection_string): self.connection_string = connection_string self.connection = None self.cursor = None def connect(self): """Establish database connection""" try: self.connection = psycopg2.connect(self.connection_string) self.cursor = self.connection.cursor() print("✅ Database connected successfully") except Exception as e: print(f"❌ Database connection failed: {e}") def create_tables(self): """Create all necessary database tables""" tables = { 'users': ''' CREATE TABLE users ( id SERIAL PRIMARY KEY, username VARCHAR(50) UNIQUE NOT NULL, email VARCHAR(100) UNIQUE NOT NULL, password_hash VARCHAR(255) NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) ''', 'sessions': ''' CREATE TABLE sessions ( id SERIAL PRIMARY KEY, user_id INTEGER REFERENCES users(id), token VARCHAR(255) UNIQUE NOT NULL, expires_at TIMESTAMP NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) ''', 'logs': ''' CREATE TABLE logs ( id SERIAL PRIMARY KEY, level VARCHAR(10) NOT NULL, message TEXT NOT NULL, timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) ''' } for table_name, query in tables.items(): try: self.cursor.execute(query) print(f"✅ Created table: {table_name}") except Exception as e: print(f"❌ Failed to create table {table_name}: {e}") self.connection.commit() class APIService: def __init__(self, app): self.app = app self.routes = [] self.middleware = [] def register_route(self, method, path, handler): """Register a new API route""" route = { 'method': method.upper(), 'path': path, 'handler': handler } self.routes.append(route) print(f"🔗 Registered {method.upper()} route: {path}") def add_middleware(self, middleware_func): """Add middleware to the API""" self.middleware.append(middleware_func) print(f"🔧 Added middleware: {middleware_func.__name__}") def handle_request(self, request): """Handle incoming API request""" # Apply middleware for middleware in self.middleware: request = middleware(request) # Find matching route for route in self.routes: if self._match_route(route, request): return route['handler'](request) return {'error': 'Route not found'}, 404 def _match_route(self, route, request): """Check if request matches route""" return (route['method'] == request.method and route['path'] == request.path) class AuthenticationService: def __init__(self, db_manager): self.db_manager = db_manager self.secret_key = os.environ.get('SECRET_KEY', 'default-secret-key') def register_user(self, username, email, password): """Register a new user""" try: # Hash password password_hash = bcrypt.hashpw(password.encode('utf-8'), bcrypt.gensalt()) # Insert user into database query = ''' INSERT INTO users (username, email, password_hash) VALUES (%s, %s, %s) RETURNING id ''' self.db_manager.cursor.execute(query, (username, email, password_hash)) user_id = self.db_manager.cursor.fetchone()[0] self.db_manager.connection.commit() print(f"✅ User registered: {username}") return user_id except Exception as e: print(f"❌ User registration failed: {e}") return None def authenticate_user(self, username, password): """Authenticate user login""" try: query = "SELECT id, password_hash FROM users WHERE username = %s" self.db_manager.cursor.execute(query, (username,)) result = self.db_manager.cursor.fetchone() if result and bcrypt.checkpw(password.encode('utf-8'), result[1]): user_id = result[0] token = self._generate_token(user_id) self._store_session(user_id, token) print(f"✅ User authenticated: {username}") return token else: print(f"❌ Authentication failed: {username}") return None except Exception as e: print(f"❌ Authentication error: {e}") return None def _generate_token(self, user_id): """Generate JWT token for user""" payload = { 'user_id': user_id, 'exp': datetime.utcnow() + timedelta(hours=24) } return jwt.encode(payload, self.secret_key, algorithm='HS256') def _store_session(self, user_id, token): """Store user session in database""" query = ''' INSERT INTO sessions (user_id, token, expires_at) VALUES (%s, %s, %s) ''' expires_at = datetime.utcnow() + timedelta(hours=24) self.db_manager.cursor.execute(query, (user_id, token, expires_at)) self.db_manager.connection.commit() class NotificationService: def __init__(self, config): self.config = config self.email_client = None self.sms_client = None self._setup_clients() def _setup_clients(self): """Setup notification clients""" try: # Setup email client self.email_client = smtplib.SMTP( self.config['email']['host'], self.config['email']['port'] ) self.email_client.starttls() self.email_client.login( self.config['email']['username'], self.config['email']['password'] ) print("✅ Email client configured") except Exception as e: print(f"❌ Email client setup failed: {e}") def send_email(self, to_email, subject, body): """Send email notification""" try: message = MIMEText(body) message['Subject'] = subject message['From'] = self.config['email']['username'] message['To'] = to_email self.email_client.send_message(message) print(f"✅ Email sent to: {to_email}") return True except Exception as e: print(f"❌ Email sending failed: {e}") return False def send_sms(self, phone_number, message): """Send SMS notification""" try: # SMS sending logic here print(f"✅ SMS sent to: {phone_number}") return True except Exception as e: print(f"❌ SMS sending failed: {e}") return False class Logger: def __init__(self, db_manager): self.db_manager = db_manager self.log_levels = ['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'] def log(self, level, message, user_id=None): """Log message to database""" if level not in self.log_levels: level = 'INFO' try: query = ''' INSERT INTO logs (level, message, user_id) VALUES (%s, %s, %s) ''' self.db_manager.cursor.execute(query, (level, message, user_id)) self.db_manager.connection.commit() print(f"📝 Logged [{level}]: {message}") except Exception as e: print(f"❌ Logging failed: {e}") def get_logs(self, level=None, limit=100): """Retrieve logs from database""" try: if level: query = "SELECT * FROM logs WHERE level = %s ORDER BY timestamp DESC LIMIT %s" self.db_manager.cursor.execute(query, (level, limit)) else: query = "SELECT * FROM logs ORDER BY timestamp DESC LIMIT %s" self.db_manager.cursor.execute(query, (limit,)) return self.db_manager.cursor.fetchall() except Exception as e: print(f"❌ Failed to retrieve logs: {e}") return []
„KI kann gute Programmierer nicht ersetzen, sondern nur diejenigen, die sich nicht mit KI weiterentwickeln."

Bewerbung um ein Praktikum – Fachinformatiker Anwendungsentwicklung

Praktikumszeitraum • 27.10.2025 – 20.02.2026

Sehr geehrte Damen und Herren,

Sie suchen einen Praktikanten, der mehr kann, als Routine-Tickets abzuarbeiten. Ich liefere Lösungen dort, wo andere nur sagen: „Es läuft doch." Nachfolgend die Fakten – klar, direkt und ohne leere Floskeln.

Pragmatische Ausgangslage
📄 Ich benötige ein Praktikum vom 27.10.2025 bis 20.02.2026 im Rahmen meiner Umschulung zum Fachinformatiker für Anwendungsentwicklung bei Cimdata Leipzig. Anstatt schöner Floskeln erhalten Sie von mir Fakten: was ich kann, was ich lernen möchte und welchen konkreten Nutzen das für Ihr Unternehmen bringt.
Was Sie von mir erhalten
📄 Statt einen typischen Praktikanten, der nur Kaffee kocht, bekommen Sie einen 33-jährigen Quereinsteiger mit Technik-Background, der strukturiertes Wissen aus der Umschulung mitbringt:
Mathematik Elektronik Netzwerke Betriebssysteme Programmierung Algorithmen KI Datenbanken Web-Security
Das bedeutet: Ich probiere nicht nur blind herum, sondern kann erklären, warum ich welchen Ansatz wähle.
Kritisches Denken: Wenn andere aufgeben, sehe ich noch drei andere Wege. Kritisches Denken ist bei mir nicht nur ein Buzzword - ich hinterfrage wirklich jedes Detail, bis ich die Lösung finde. Ich erkenne, wenn KI-Antworten unlogisch sind. Das zeigt: Ich denke mit, nicht nach. Ich löse Probleme - nicht elegant, aber effektiv.
Konkrete Skills
Tiefer Hardware-Einblick
⚙️ Smartphone-Servicecenter: ROM-Flashen, APK-Entpacken und Dekompilieren, Root-Rechte-Verwaltung, App-Modifikationen, ADB-Automatisierung, Systemdateien-Integration.
Pro-Level-KI-Nutzung
🤖 Verständnis für Kontextfenster, Reasoning-Tiefe, Modellwahl (GPT, Claude, Open-Weight-LLMs), API-Orchestrierung, MCP-Server. Aufgabensteuerung via Cursor.
Web-Basics
🌐 HTML, CSS, JavaScript; eigene Sites veröffentlicht.
Aktuelles Projekt
🚀 Entwicklung einer Automatisierungslösung für den persönlichen Gebrauch mit n8n auf einem virtuellen privaten Server.
Arbeitsstil
💡 Vollständiges Eintauchen, gesunder Skeptizismus, viele richtige Fragen. Unkonventionelles Denken plus kalkuliertes Risiko – das sichert belastbare Ergebnisse. Der Militärdienst hat mir beigebracht: Im Team funktioniert alles besser, aber jeder muss seinen Teil liefern.
Was Sie NICHT bekommen
  • Einen Script Kiddie, der nur Code copy-paste ohne zu verstehen
  • Standard-Lebenslauf-Phrasen und leere Versprechungen
  • Einen Praktikanten ohne Lebenserfahrung
  • Einen Durchlaufposten - ich bin auf langfristige Zusammenarbeit ausgerichtet
Was ich von Ihnen brauche
🎯
  • Praktische Aufgaben mit Lernpotenzial - Möglichkeit, Wissen an realen Projekten anzuwenden
  • Direktes Feedback und offene Kommunikation - partnerschaftliche Beziehung, wo jeder profitiert
  • Langfristige Perspektive - nach dem Praktikum möchte ich im Unternehmen bleiben
Partnerschaftlicher Ansatz
🤝 Ich bin überzeugt: Partnerschaft funktioniert nur beidseitig. Mit eigenen Meinungen und Sichtweisen, mit gleicher Verantwortung in der Kommunikation. Profit muss es für beide geben. Sie brauchen einen zuverlässigen Praktikanten, der später ein loyaler Mitarbeiter wird. Ich brauche einen Platz, wo ich zeigen kann, was in mir steckt. Win-Win.
Investition mit Garantie
📈 Pro-Gehalt ist (noch) nicht nötig, Ergebnisqualität hingegen auf Profi-Niveau.
Nutzen Sie mein Potenzial – ich wachse mit Ihren Projekten.
Nehmen Sie mich als Praktikant. Ich bitte nicht um Nachsicht - ich biete eine für beide Seiten profitable Zusammenarbeit. Sie bekommen einen motivierten Praktikanten, der:
  • Reale Aufgaben vom ersten Tag an lösen kann
  • Keine Angst hat zu experimentieren und unkonventionelle Lösungen zu finden
  • Moderne Entwicklungstools versteht
  • Auf langfristige Zusammenarbeit ausgerichtet ist
🔄 Im Gegenzug bekomme ich die Möglichkeit, meine Fähigkeiten in realen Projekten anzuwenden und genau in Ihrem Unternehmen zum Spezialisten zu wachsen.

Mit freundlichen Grüßen

Yevhenii Popov

P.S. Ich habe Humor, bin fröhlich. Aber wenn es um Arbeit geht - bin ich ernst und ergebnisorientiert. Genau diese Balance braucht ein gutes Team.