init project running

a scraper for jobs in the region with connected telegram bot to send my new jobs every day
This commit is contained in:
trnq1ll0 committed 2026-09-07 09:36:10 +02:00
commit fa4623b586
50 files changed
+1613

No files matched your search

@@ -0,0 +1,76 @@
#import "personal.typ": person
#import "template.typ": *
#set page(
paper: "a4",
margin: (left: 20mm, right: 20mm, top: 8mm, bottom: 16mm),
footer: cover-footer(person),
)
#show: document-base
#show link: set text(fill: accent)
#cover-header(person)
#v(11mm)
#grid(
columns: (1fr, auto),
align: (left, right),
[
#text(font: "Source Sans Pro", size: 11pt, weight: 700, fill: dark-ink)[
TRICERA energy GmbH
]
#v(2pt)
#text(font: "Source Sans Pro", size: 9pt, weight: 400, fill: gray-ink)[
#smallcaps([Industriestraße 65\
01129 Dresden])
]
],
text(
font: "Source Sans Pro",
size: 9pt,
weight: 300,
style: "italic",
fill: gray-ink,
)[#today-de],
)
#v(13mm)
#underline(
offset: 5pt,
text(font: "Source Sans Pro", size: 10pt, weight: 600, fill: dark-ink)[
Bewerbung als Netzwerk-Ingenieur / -Techniker (m/w/d)
],
)
#v(6mm)
#set text(font: "Source Sans Pro", size: 10pt, weight: 300, fill: gray-ink)
#set par(justify: false, leading: 0.7em)
Sehr geehrte Damen und Herren,
#v(2.5mm)
Batteriespeicher wie die von TRICERA machen erneuerbare Energie planbar – und brauchen dafür Netzwerkinfrastruktur, die sicher, redundant und sauber dokumentiert ist. An genau dieser Schnittstelle möchte ich arbeiten: technisch anspruchsvoll und zugleich unmittelbar wirksam für die Energiewende. Die ausgeschriebene Stelle verbindet beides mit meinem Werdegang.
Als Fachinformatiker für Systemintegration mit über 20 Jahren Berufserfahrung habe ich Systeme über alle Ebenen hinweg aufgebaut, betrieben und analysiert. In meiner aktuellen Rolle als Softwareentwickler betreue ich auch die Netzwerkanbindung und das Hosting unserer Anwendungen, den Betrieb von CI-Runnern und die Fehleranalyse über Anwendungs- und Systemgrenzen hinweg. Linux und die Shell sind dabei meine tägliche Arbeitsumgebung; privat betreibe ich Infrastruktur vorrangig auf Linux und TrueNAS – mit Tailscale, Firewalls und automatisierten Backups. Daneben kenne und schätze ich auch andere Systeme wie NixOS und FreeBSD. Zudem bringe ich aus meiner ersten Ausbildung auch Grundlagenwissen im Aufbau elektrischer Anlagen und Industriesteuerungen mit.
Fachlich bin ich Ihrer Welt bereits begegnet: Ich habe die Anwendung #link("https://www.transnetbw.de/de/netzbooster-anwendung/")[„Netzbooster 360"] für TransnetBW entwickelt – die Visualisierung der Netzbooster-Pilotanlage in Kupferzell – sowie die virtuelle Führung durch das #link("https://local.vr-bits.de/showcases/UWConneforde/index.htm")[Umspannwerk Conneforde] (TenneT). In #link("https://www.vrbits.de/#portfolio")[unserem Portfolio] finden sich zudem VR-Trainings für manuelle Schalthandlungen in Umspannwerken und Begehungen von Offshore-Trafostationen. Netzbetreiber, Umspannwerke und Batteriespeicher als Netzbooster sind mir dadurch konzeptionell vertraut – wenn auch bisher aus der Software- und nicht aus der Netzwerkperspektive.
Transparenz ist mir wichtig: Enterprise-Netzwerke dieser Größenordnung – große Routing- und Switching-Landschaften oder KRITIS-Umgebungen – habe ich bislang nicht verantwortet. Meine Netzwerkerfahrung stammt aus privater Infrastruktur und netzwerknahen Aufgaben im Beruf. Was ich mitbringe, sind solide TCP/IP-Grundlagen, IP-Adressierung, Firewalls und Zugriffsschutz sowie die Fähigkeit, mich selbstständig, gründlich und schnell in neue Systeme einzuarbeiten. VLAN-Segmentierung, Redundanzkonzepte und technische Dokumentation sind Themen, in die ich mich gezielt vertiefen möchte.
Für die ausgeschriebene Rolle bringe ich eine vergleichbare Qualifikation (Fachinformatiker für Systemintegration), fundierte Linux- und Shell-Kenntnisse sowie eine strukturierte, eigenständige Arbeitsweise mit. Deutsch ist meine Muttersprache, Englisch nutze ich täglich in Entwicklung und Dokumentation. Die Mischung aus etwa 90 % Büro- und 10 % Anlagentätigkeit entspricht genau meiner Vorstellung. Nicht zuletzt bringe ich aus meiner ersten Ausbildung auch Grundlagenwissen im Aufbau elektrischer Anlagen und Industriesteuerungen mit.
Mein frühestmöglicher Eintrittstermin ist der 1. Oktober 2026. Ich freue mich auf ein persönliches Gespräch, um mehr über Ihre Netzwerkinfrastruktur und die anstehenden Projekte zu erfahren.
#v(1mm)
Mit freundlichen Grüßen,
#v(1mm)
#image("assets/signature.png", width: 25mm)
@@ -0,0 +1,197 @@
#import "personal.typ": person
#import "template.typ": *
#set page(
paper: "a4",
margin: (left: 14mm, right: 14mm, top: 8mm, bottom: 16mm),
footer: cv-footer(person),
)
#show: document-base
#set par(leading: 0.56em)
#cv-header(person)
#section("Ber", "ufserfahrung")
#entry(
"C# Developer & Software Engineer for Unity AR/VR",
"vr-bits GmbH",
"Leipzig",
"seit 2019",
(
[Entwicklung und technische Betreuung von 20+ komplexen C\# Anwendungen mit Unity],
[Integration und Kapselung von SDKs, Schnittstellen, Datenformaten, Paketen und externen Services],
[Versions- und Paketpflege, technische Fehleranalyse, Performance-Optimierung und automatisierte Tests],
[CI-Pipelines mit GitHub Actions und GameCI auf lokalen und Remote-Runnern für mehrere Zielplattformen],
[Netzwerkanbindung und Hosting der Anwendungen inklusive Analyse von Problemen über Anwendungs- und Systemgrenzen hinweg],
[XR-Anwendungen für Energiewirtschaft und Netzbetreiber, u. a. „Netzbooster 360" für TransnetBW und virtuelle Führung Umspannwerk Conneforde (TenneT)],
[Webintegration sämtlicher Projekte und Mitverantwortung für den korrekten Betrieb in der Infrastruktur der Kunden],
[Client-Server-Kommunikation und plattformübergreifender Betrieb für Web-, Mobile-, Desktop- und XR-Systeme],
),
)
#entry(
"Freelance Full-Stack Developer",
"Selbständig",
"Dresden",
"2017–2019",
(
[Shopware und andere E-Commerce und Warenwirtschaftssysteme auf Basis von PHP, JavaScript, MySQL],
[Migration komplexer Systeme und Datenbanken],
[Frontend-Entwicklung mit modernen JavaScript Frameworks],
[IT-Beratung und Systemadministration],
),
)
#entry(
"Software-Qualitätssicherung – Webentwicklung",
"MAGIX Development AG",
"Dresden",
"2006–2016",
(
[IT-Support und Systemadministration in heterogenen Arbeitsplatz- und Systemumgebungen],
[Softwaretest, Qualitätssicherung und automatisierte Testentwicklung],
[Strukturierte Fehleranalyse und serviceorientierte Unterstützung interner Anwender],
[Inhouse Webentwicklungsprojekte],
),
)
#entry(
"Web Entwickler",
"Nebenberuflich",
"Dresden",
"2012–2017",
(
[Entwicklung von E-Commerce- und Warenwirtschaftssystemen mit PHP, JavaScript und MySQL],
[Responsive Design und Mobile-First Ansätze],
[Datenbankdesign und -optimierung],
),
)
#entry(
"Server Support",
"Compaq Computer Corporation",
"München",
"2001–2001",
(
[1st Level Server Support],
[Technischer Support für Serverprodukte],
),
)
#section("Aus", "bildung")
#entry(
"Fachinformatiker für Systemintegration",
"BSZET Dresden / MAGIX GmbH",
"Dresden",
"2003–2006",
(
[Facharbeit: Aufbau eines virtuellen Netzwerkes mit DMZ und eines Servers mit LAMP-Umgebung (Linux, Apache, MySQL, PHP)],
[Systemintegration und Anwendungsentwicklung einer betriebsinternen Urlaubsverwaltung],
[Hardware- und Netzwerkaufbau, Geschäftsprozesse],
[Virtualisierung],
),
)
#entry(
"Technischer Assistent für Automatisierungs- und Computertechnik",
"Berufliches Schulzentrum Weißwasser",
"Weißwasser",
"1997–2000",
(
[Grundlagen der Rechentechnik, Mess- und Regelungstechnik],
[Programmierung und Automatisierungstechnik],
[Hardware- und Softwareentwicklung],
[CAD],
),
)
#pagebreak()
#cv-header(person)
#section("Tec", "hnische Kenntnisse")
#skills[
#skill("Serveradministration", [Linux, NixOS/Nix, systemd, Docker/Compose, nginx, Nextcloud, Cockpit, POSIX Shell, Bash, PowerShell])
#skill("Speicher & Backup", [ZFS, Samba/SMB, Restic, rsync/SSH, SFTP, VeraCrypt, Robocopy, PostgreSQL-/MySQL-Dumps])
#skill("Netzwerk & Sicherheit", [TCP/IP, IP-Adressierung, Firewalls, OpenSSH, Tailscale/VPN, HTTPS/ACME, SMB-Signierung, Schlüsselverwaltung])
#skill("Betriebssysteme", [Debian, Fedora, NixOS, FreeBSD, CentOS, Windows, macOS])
#skill("Automation & Betrieb", [Updates, Wartung, Logging, Fehlerbehandlung, Backup/Restore, CI/CD, GitHub Actions, GameCI])
#skill("Programmierung", [C\#, Python, JavaScript/TypeScript, PHP, SQL, Shell, HTML/CSS, REST APIs, JSON, XML])
#skill("Qualität & Methoden", [Git, TDD, NUnit, Moq, Pytest, automatisierte Tests, Jira, Scrum, technische Dokumentation])
#skill("Anwendungsentwicklung", [Unity/C\#, Django, Webanwendungen, Datenbanken, Schnittstellenintegration, plattformübergreifende Systeme])
]
#section("Eng", "agement & Mentoring")
#entry(
"Mentor & Jury-Mitglied",
"Jugend hackt Dresden",
"Dresden",
"seit 2015",
(
[Betreuung von Jugendlichen bei Coding-Projekten],
[Jury-Tätigkeit bei Hackathons],
[Förderung von IT-Nachwuchs],
),
)
#entry(
"Dozent & Workshop-Leiter",
"Chaos macht Schule",
"Sachsen",
"2014–2018",
(
[IT-Workshops an Schulen durchgeführt],
[Aufklärung über Datenschutz und IT-Sicherheit],
[Praktische Programmier-Workshops für Schüler],
),
)
#entry(
"Open Source Förderung",
"VISOR – Prototype Fund Project",
"Berlin",
"2017–2018",
(
[Hauptentwicklung und Projektkoordination eines BMBF-geförderten Civic-Tech-Projekts],
[Webtool und offener Datenstandard für digitale Partizipation in Stadtentwicklungsprozessen],
),
)
#entry(
"Lead",
"Open Data Dresden",
"Dresden",
"2014–2021",
(
[Treffen, Aktionen, Veranstaltungen, Software pro Open Data in Dresden],
[Gründung eines Open-Data-Labs mit der Open Knowledge Foundation],
),
)
#entry(
"Speaker",
"Web Montag Dresden, CCC Veranstaltungen",
"Dresden",
"2012–2019",
(
[Vorträge zu Webentwicklung und IT-Trends],
[Wissensaustausch in der Developer-Community],
),
)
#section("Per", "sönliches")
#v(10pt)
#set text(font: "Source Sans Pro", size: 9pt, weight: 300, fill: ink)
#set par(justify: false, leading: 0.9em)
Als begeisterter Autodidakt erschließe ich mir kontinuierlich neue Technologien. Ich arbeite gewissenhaft, selbstständig und eigenverantwortlich und behalte dabei Wartbarkeit, Sicherheit und einen zuverlässigen Betrieb im Blick.
Im Team kommuniziere ich offen, respektvoll und verständlich. Den fachlichen Austausch und unterschiedliche Perspektiven nutze ich gern, um tragfähige Lösungen für komplexe technische Fragestellungen zu entwickeln.
Mein Ziel ist es, diese Erfahrung dort einzusetzen, wo sie zur Energiewende beiträgt – etwa in der Netzwerk- und IT-Infrastruktur von Batteriespeichersystemen.
@@ -0,0 +1,12 @@
// Gemeinsame Stammdaten für Anschreiben und Lebenslauf.
#let person = (
first: "Robert",
last: "Wartenberg",
position: "Software Engineering · Systemintegration · Automatisierung",
street: "Robert-Matzke-Straße 43",
city: "01127 Dresden",
mobile: "(+49) 152 085 166 33",
email: "rw@boogiedev.net",
github: "RobTranquillo",
xing: "Robert_Wartenberg",
)
@@ -0,0 +1,175 @@
// Gemeinsames, eigenständiges Layout für beide Bewerbungsdokumente.
#let accent = rgb("#0395de")
#let ink = rgb("#333333")
#let dark-ink = rgb("#414141")
#let gray-ink = rgb("#3a3a5d")
#let rule-ink = rgb("#5d5d5d")
#let pale = rgb("#999999")
#let today = datetime.today()
#let month-names = (
"Januar", "Februar", "März", "April", "Mai", "Juni",
"Juli", "August", "September", "Oktober", "November", "Dezember",
)
#let today-de = (
str(today.day()) + ". " + month-names.at(today.month() - 1) +
" " + str(today.year())
)
#let document-base(body) = {
set text(font: "Source Sans Pro", lang: "de", size: 9pt, weight: 300, fill: ink)
set par(leading: 0.48em)
body
}
#let name-mark(
person,
size: 22pt,
family: "Roboto",
first-weight: 100,
first-smallcaps: false,
) = [
#text(font: family, size: size, weight: first-weight, fill: gray-ink)[
#if first-smallcaps { smallcaps(person.first) } else { person.first }
]#h(3pt)#text(font: family, size: size, weight: 700, fill: ink)[#person.last]
]
#let fa(glyph) = text(font: "FontAwesome", size: 0.95em)[#glyph]
#let cover-header(person) = block(width: 100%)[
#align(center)[
#name-mark(person, size: 32pt)
#v(1pt)
#text(font: "Source Sans Pro", size: 7.6pt, weight: 400, fill: accent)[
#smallcaps(person.position)
]
#v(2pt)
#text(font: "Roboto", size: 8pt, weight: 400, style: "italic", fill: pale)[
#person.street, #person.city
]
#v(3pt)
#text(font: "Roboto", size: 6.8pt, weight: 400, fill: ink)[
#fa("\u{f10b}") #person.mobile #h(7pt)|#h(7pt)
#fa("\u{f0e0}") #person.email #h(7pt)|#h(7pt)
#fa("\u{f092}") #person.github #h(7pt)|#h(7pt)
#fa("\u{f169}") #person.xing
]
]
]
#let cv-header(person) = block(width: 100%, below: 33pt)[
#grid(
columns: (1fr, 1.8fr, 1fr),
column-gutter: 6pt,
align: (left, center, right),
[
#text(font: "Roboto", size: 8pt, weight: 400, style: "italic", fill: pale)[
#person.street\
#person.city
]
],
align(center)[
#name-mark(
person,
family: "Source Sans Pro",
first-weight: 400,
first-smallcaps: true,
)
#v(2pt)
#text(font: "Source Sans Pro", size: 7.6pt, weight: 400, fill: accent)[
#smallcaps("Lebenslauf")
]
],
[
#text(font: "Roboto", size: 6.8pt, weight: 400, fill: ink)[
#fa("\u{f10b}") #person.mobile\
#fa("\u{f0e0}") #person.email\
#fa("\u{f169}") #person.xing\
#fa("\u{f092}") #person.github
]
],
)
]
#let cv-footer(person) = context grid(
columns: (1fr, 1fr, 1fr),
align: (left, center, right),
text(font: "Source Sans Pro", size: 8pt, weight: 400, fill: pale)[#smallcaps(today-de)],
text(font: "Source Sans Pro", size: 8pt, weight: 400, fill: pale)[
#smallcaps(person.first + " " + person.last + " · Lebenslauf")
],
text(font: "Source Sans Pro", size: 8pt, weight: 400, fill: pale)[#counter(page).display()],
)
#let cover-footer(person) = align(center)[
#text(font: "Source Sans Pro", size: 8pt, fill: pale, weight: 400)[
#smallcaps(person.first + " " + person.last)
]
]
#let section(accent-part, rest) = block(
width: 100%,
above: 8pt,
below: 5pt,
breakable: false,
)[
#grid(
columns: (auto, 1fr),
column-gutter: 2pt,
align: horizon,
text(font: "Source Sans Pro", size: 16pt, weight: 700)[
#text(fill: accent)[#accent-part]#text(fill: ink)[#rest]
],
line(length: 100%, stroke: 0.9pt + rule-ink),
)
]
#let bullet-list(items) = {
for item in items {
block(width: 100%)[
#grid(
columns: (7pt, 1fr),
column-gutter: 1pt,
[•],
item,
)
]
v(-5pt)
}
}
#let entry(role, organization, location, period, items) = block(
width: 100%,
above: 15pt,
below: 18pt,
breakable: false,
)[
#grid(
columns: (1fr, auto),
column-gutter: 8pt,
row-gutter: 9pt,
text(font: "Source Sans Pro", size: 10pt, weight: 700, fill: dark-ink)[#organization],
text(font: "Source Sans Pro", size: 9pt, weight: 300, style: "italic", fill: accent)[#location],
text(font: "Source Sans Pro", size: 8pt, weight: 400, fill: gray-ink)[#smallcaps(role)],
text(font: "Source Sans Pro", size: 8pt, weight: 300, style: "italic", fill: gray-ink)[#period],
)
#parbreak()
#v(1pt)
#block(width: 100%)[
#text(font: "Source Sans Pro", size: 9pt, weight: 300, fill: ink)[#bullet-list(items)]
]
]
#let skills(body, above: 16pt, below: 12pt) = block(
width: 100%,
inset: (top: above, bottom: below),
body,
)
#let skill(label, value) = grid(
columns: (45mm, 1fr),
column-gutter: 5mm,
align: (right, left),
text(font: "Source Sans Pro", size: 10pt, weight: 700, fill: dark-ink)[#label],
text(font: "Source Sans Pro", size: 9pt, weight: 300, fill: ink)[#value],
)