update
This commit is contained in:
parent
b03e49233b
commit
8de9e8f241
|
|
@ -141,7 +141,7 @@
|
|||
document.getElementById('loadingAnimation').classList.remove('hidden');
|
||||
|
||||
|
||||
fetch('/kontakt', options)
|
||||
fetch('/kontakt/', options)
|
||||
.then(response => response.json())
|
||||
.then(data => {
|
||||
document.getElementById('loadingAnimation').classList.add('hidden');
|
||||
|
|
|
|||
|
|
@ -14,8 +14,6 @@ import json
|
|||
import sys
|
||||
|
||||
|
||||
|
||||
|
||||
def datenschutz(request):
|
||||
return render(request, 'datenschutz.html', {})
|
||||
|
||||
|
|
@ -54,52 +52,105 @@ def index(request):
|
|||
education['lfd'] = i
|
||||
i += 1
|
||||
|
||||
|
||||
experiences: list = [
|
||||
{
|
||||
'label': 'WhatsImmo',
|
||||
'time': '10-11/2022',
|
||||
'content': mark_safe('''
|
||||
"label": "Wolfgang-Borchert-Gymnasium Halstenbek",
|
||||
"time": "02/2024 - today()",
|
||||
"content": mark_safe(
|
||||
"""
|
||||
Im Rahmen eines ÖPP Verfahrens plant, realisiert und betreibt die <a href="https://www.hochtief-infrastructure.de/" target="_blank">HOCHTIEF Infrastructure GmbH</a>
|
||||
als Totalunternehmer den Neubau von zwei 3-Feld-Sporthallen und eines Erweiterungsneubau für das
|
||||
<a class="underline text-petrol-500" target="_blank" href="https://www.halstenbek.de/bildung-familie/schulen/wolfgang-borchert-gymnasium/">
|
||||
Wolfgang-Borchert-Gymnasium</a>
|
||||
in der Gemeinde Halstenbek.<br>
|
||||
Im Auftrag der <a href="https://www.psp-consult.de" target="_blank" title="PSPC Public Sector Project Consultants GmbH">PSPC GmbH</a>
|
||||
bin ich als integriertes Teammitglied auf AG-Seite tätig.<br>
|
||||
Beide Teilprojekte befinden sich noch in der Planungsphase.
|
||||
Im Teilprojekt Sporthalle wurde Anfang Mai 2024 der Bauantrag eingereicht. Der Erweiterungsneubau des Gymnasiums
|
||||
läuft nach und befindet sich derzeit in der LPh 3.<br>
|
||||
Eine besondere Herausforderung bei diesem Projekt ist die Einbindung der Politik.
|
||||
Für die Gemeinde Halstenbek ist es das größte Projekt.
|
||||
"""
|
||||
),
|
||||
},
|
||||
{
|
||||
"label": "exportConject",
|
||||
"time": "02/2023 - today()",
|
||||
"content": mark_safe(
|
||||
"""
|
||||
Die Bauprojektplattform <a class="underline text-petrol-500" href="https://ng.conject.com">conjectPM</a> (SaaS) wurde
|
||||
von Oracel gekündigt und wird Ende 2024 eingestellt.<br>
|
||||
Ein öffentlicher Auftraggeber stand vor der Herausforderung, rechtzeitig zwei Nachfolgeprodukte
|
||||
für seine fast 500 Projekte auf conjectPM zur Verfügung zu haben.<br>
|
||||
Warum zwei? - Weil rund 150 Projekte bereits abgeschlossen sind. Statt in eine neue
|
||||
Kollaborationsplattform sollten diese Projekte in ein Archivsystem überführt werden.<br>
|
||||
Da das von Oracel angebotene "Archiv" in Form einer zugesandten Festplatte ohne Metadaten
|
||||
als unzureichend zu bewerten ist, programmierte ich ein Tool, das über die REST-Api und einen
|
||||
WebCrawler eine vollständige Datensicherung ermöglicht.<br>
|
||||
Für die restlichen, noch laufenden Projekte steht die Datenmigration im Lastenheft des neuen
|
||||
Plattformbetreibers. Als externer Sparringspartner des angestellten Projektleiters unterstützte
|
||||
ich die IT-Abteilung meines Kunden während des gesamten Prozesses. Von der ersten
|
||||
Angebotsauswertung über unzählige Bieter- und Aufklärungsfragen bis hin zu den
|
||||
Verhandlungsgesprächen. Anfang 2024 konnte der Zuschlag erteilt werden. Derzeit läuft die
|
||||
Datenmigration der laufenden Projekte. Mit meiner Expertise aus der Sicherung der zu
|
||||
archivierenden Projekte stelle ich wesentliche Weichen im Prozess und kontrolliere die
|
||||
Vollständigkeit der Datenmigrationen für meinen Auftraggeber.
|
||||
"""
|
||||
),
|
||||
},
|
||||
{
|
||||
"label": "WhatsImmo",
|
||||
"time": "10-11/2022",
|
||||
"content": mark_safe(
|
||||
"""
|
||||
WhatsImmo bietet eine hierarchische Organisation aller Informationen im Bereich des Immobilienmanagements. Von Liegenschaften über Gebäude, Stockwerke und Bereiche bis hin zu Räumen.<br>
|
||||
Beliebig viele Kontakte, Bilder und typisierte Dateien (Verträge, Schriftverkehr, Rechnungen, etc.) können erfasst werden. Durch das responsive Design sind die Daten von jedem Endgerät aus leicht zugänglich.<br>
|
||||
Aufträge werden in der angeschlossenen Auftragsverwaltung nachverfolgt. Die Auftragsverwaltung ist in Chat-Gruppen organisiert. Die Mitarbeiter:innen zur Auftragserfüllung sind Teilnehmer:innen der Chat-Gruppe und erhalten in Echtzeit über das WebSocket-Protokoll neue Nachrichten.<br>
|
||||
Als Progressive Web App (PWA) ist eine einfache Installation auf dem Smartphone (derzeit nur Android) möglich und bietet somit den Komfort einer nativen App.<br>
|
||||
<a class="underline text-petrol-500" href="/projekt/whatsimmo/">Zur Projektbeschreibung</a>
|
||||
'''),
|
||||
"""
|
||||
),
|
||||
},
|
||||
{
|
||||
'label': 'DCA-BAU.DE',
|
||||
'time': '2021-2022 ...',
|
||||
'content': mark_safe('''
|
||||
"label": "DCA-BAU.DE",
|
||||
"time": "2021-2022 ...",
|
||||
"content": mark_safe(
|
||||
"""
|
||||
Als SaaS Lösung bietet dieses digitale Bautagebuch die Möglichkeit,
|
||||
die Baustellendokumentation in einem System zu erfassen und die somit
|
||||
strukturiert vorliegenden Daten direkt auszuwerten.<br>
|
||||
<a class="underline text-petrol-500" target="_blank" href="https://www.dca-bau.de">www.dca-bau.de</a><br>
|
||||
Im Rahmen der Erstentwicklung hatte ich zur Unterstützung einen Frontend-Developer angestellt.
|
||||
Die laufende Wartung liegt bei mir.
|
||||
''')
|
||||
"""
|
||||
),
|
||||
},
|
||||
{
|
||||
'label': 'Projektsteuerung Neubau WSW Zentrale',
|
||||
'time': '2020-today()',
|
||||
'content': mark_safe('''
|
||||
"label": "Projektsteuerung Neubau WSW Zentrale",
|
||||
"time": "2020-2023",
|
||||
"content": mark_safe(
|
||||
"""
|
||||
Im Rahmen eines ÖPP Verfahrens plant, realisiert und betreibt <a href="https://www.goldbeck.de/" target="_blank">Goldbeck</a> als Totalunternehmer den Neubau der Verwaltungszentrale - Wuppertaler Stadtwerke.
|
||||
Im Auftrag der <a href="https://www.psp-consult.de" target="_blank" title="PSPC Public Sector Project Consultants GmbH">PSPC GmbH</a>
|
||||
arbeite ich als integriertes Teammitglied auf der AG-Seite.<br>
|
||||
Im Rahmen der Vergabe bewertete ich die Betreiberkonzepte der Bieter.
|
||||
In der Realisierung liegt der Steuerungsschwerpunkt bei der Konkretisierung und Durchgesetzung des vertraglichen Leistungssolls und dem Inbetriebnahmemanagement.
|
||||
''')
|
||||
In der Realisierung liegt der Steuerungsschwerpunkt bei der Konkretisierung und Durchgesetzung des vertraglichen Leistungssolls und dem Inbetriebnahmemanagement.<br>
|
||||
Nach Fertigstellung im November 2023 lag im Dezember mein Beitrag bei der Mitkoordinierung der Möblierung von 450 AP sowie diverse Besprechungsräumen.<br>
|
||||
Seit Januar läuft der reguläre Bürobetrieb und ich stehe im Hintergrund für Fragestellung der Sorte "Wie war das noch gleich, ..." zur Verfügung.
|
||||
"""
|
||||
),
|
||||
},
|
||||
{
|
||||
'label': 'Abteilungsleiter Gebäudemanagement',
|
||||
'time': '2017-2019',
|
||||
'content': mark_safe('''
|
||||
"label": "Abteilungsleiter Gebäudemanagement",
|
||||
"time": "2017-2019",
|
||||
"content": mark_safe(
|
||||
"""
|
||||
Beim
|
||||
<a href="https://www.blb.nrw.de" target="_blank">Bau- und Liegenschaftsbetrieb NRW</a> führte ich 5 Teams mit insgesamt 37 Mitarbeiter:innen.
|
||||
Als Gebäudemanagement-Abteilung der Niederlassung Dortmund betreuten wir rd. 250 Liegenschaften.
|
||||
''')
|
||||
"""
|
||||
),
|
||||
},
|
||||
|
||||
]
|
||||
|
||||
i:int = 0
|
||||
|
|
@ -107,7 +158,6 @@ def index(request):
|
|||
experience['index'] = i
|
||||
i += 1
|
||||
|
||||
|
||||
skills:list = [
|
||||
{
|
||||
'label': "Zielorientiert",
|
||||
|
|
@ -131,7 +181,6 @@ def index(request):
|
|||
skill['lfd'] = i
|
||||
i += 1
|
||||
|
||||
|
||||
context:dict = {
|
||||
'educations': educations,
|
||||
'experiences': experiences,
|
||||
|
|
|
|||
|
|
@ -0,0 +1,34 @@
|
|||
{
|
||||
"title": "exportConject",
|
||||
"tags": [
|
||||
"Projektmanagement", "Konzeptionierung", "Programmierung", "Datenmigration", "WebCrawling", "Rest-API", "Reverse-Engeneering", "Datenmodell"
|
||||
],
|
||||
"short_description": "Datensicherung von einer SaaS Plattform.",
|
||||
|
||||
"participant": "Bau- und Liegenschaftsbetrieb NRW",
|
||||
"participant_logo": "https://www.blb.nrw.de/_assets/c2230c973e5d427bfa14813e38f195ba/Images/blb-nrw-logo.svg",
|
||||
"participant_link": "https://www.blb.nrw.de/",
|
||||
"participant_head": "Bau- und Liegenschaftsbetrieb des Landes Nordrhein-Westfalen<br>Mercedesstraße 12<br>40470 Düsseldorf",
|
||||
"time": "02/2023 - 11/2023",
|
||||
"effort": "~15 AT",
|
||||
|
||||
"functions": [
|
||||
"Automatischer Export aller Dokumente inkl. der Dokumentenversionen",
|
||||
"Automatischer Export aller Pläne inkl. der Planrevisionen",
|
||||
"Automatischer Export aller Nachrichten und Anhänge",
|
||||
"Automatischer Export aller zugehörigen Meta-Daten",
|
||||
"Strukturierte Speicherung in einer sqlite3 Datenbank je Projekt",
|
||||
"Zusammenführung der sqlite3 Datenbanken in eine konsolidierte PostgreSQL"
|
||||
],
|
||||
"stack_list": [
|
||||
"python3",
|
||||
"Requests",
|
||||
"SQLite",
|
||||
"PostgreSQL",
|
||||
"REHL8",
|
||||
"Selenium WebDriver"
|
||||
],
|
||||
|
||||
"quote": "",
|
||||
"quote_author": "Dr. Jörg Mangels"
|
||||
}
|
||||
|
|
@ -25,7 +25,7 @@
|
|||
"Automatischer E-Mail abruf und Auftragszuordnung (IMAP-Postfach)"
|
||||
],
|
||||
"stack_list": [
|
||||
"<a class=\"hover:text-white transition\" href=\"https://docs.djangoproject.com\" target=\"_blank\">django</a>",
|
||||
"django",
|
||||
"Vue.js",
|
||||
"tailwindcss",
|
||||
"nginx",
|
||||
|
|
|
|||
|
|
@ -0,0 +1,30 @@
|
|||
{
|
||||
"title": "wu-rechner",
|
||||
"tags": [
|
||||
"Konzeptionierung", "Programmierung"
|
||||
],
|
||||
"short_description": "Web App für die Wirtschaftlichkeitsuntersuchung verschiedener Realisierungsvarianten eines Immobilienprojekts.",
|
||||
|
||||
"participant": "PSPC Public Sector Project Consultants GmbH",
|
||||
"participant_logo": "https://test.wu-rechner.de/static/wuRechner/img/logo.svg",
|
||||
"participant_link": "https://www.psp-consult.de",
|
||||
"participant_head": "PSPC Public Sector Project Consultants GmbH<br>Brandenburgische Straße 27<br>10707 Berlin",
|
||||
"time": "01/2023 - today()",
|
||||
"effort": "~20 AT",
|
||||
|
||||
"functions": [
|
||||
],
|
||||
"stack_list": [
|
||||
"django",
|
||||
"Vue.js",
|
||||
"SQLite",
|
||||
"tailwindcss",
|
||||
"nginx",
|
||||
"gunicorn",
|
||||
"ubuntu",
|
||||
"apexcharts"
|
||||
],
|
||||
|
||||
"quote": "",
|
||||
"quote_author": "Dr. Corinna Hilbig"
|
||||
}
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
<div class="text-sm grid gap-4">
|
||||
<p class="">
|
||||
Eine ausführliche Beschreibung ist noch nicht erstellt. Wenn Sie mehr über die Aufgaben erfahren möchten,
|
||||
dann nehmen Sie gerne
|
||||
<a href="/#kontakt" class="underline text-petrol-500">Kontakt</a>
|
||||
zu mir auf.
|
||||
</p>
|
||||
</div>
|
||||
|
|
@ -24,9 +24,9 @@
|
|||
<div class="text-xs">
|
||||
Immobilienmngt Beratung und IT<br>
|
||||
Tobias Gerwin<br>
|
||||
Oberbilker Allee 109<br>
|
||||
40227 Düsseldorf<br>
|
||||
Steuernummer: 133/5096/3252<br>
|
||||
Mietgendorfer Ring 10<br>
|
||||
14974 Ludwigsfelde<br>
|
||||
Steuernummer: 050/223/02681<br>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
|
@ -89,9 +89,16 @@
|
|||
</div>
|
||||
|
||||
<div class="font-bold">Link:</div>
|
||||
{% if link %}
|
||||
<div class="col-span-3">
|
||||
<a href="{{ link.href }}" target="_blank"><span class="underline">{{ link.href }}</span> ({{ link.label }})</a>
|
||||
</div>
|
||||
{% else %}
|
||||
<div class="col-span-3">
|
||||
Es steht keine GUI zur Verfügung.
|
||||
</div>
|
||||
|
||||
{% endif %}
|
||||
|
||||
</div>
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
from django.shortcuts import render
|
||||
from django.utils.safestring import mark_safe
|
||||
from django.template.loader import render_to_string
|
||||
from django.template.exceptions import TemplateDoesNotExist
|
||||
from django.http import Http404
|
||||
|
||||
from pathlib import Path
|
||||
|
|
@ -12,17 +13,22 @@ import os
|
|||
REFERENZ_DIR = Path(__file__).resolve().parent
|
||||
|
||||
STACK_LINK = {
|
||||
'django': "<a class=\"hover:text-white transition\" href=\"https://docs.djangoproject.com\" target=\"_blank\">django</a>",
|
||||
'bootstrap': "<a class=\"hover:text-white transition\" href=\"https://getbootstrap.com/\" target=\"_blank\">bootstrap</a>",
|
||||
'Vue.js': "<a class=\"hover:text-white transition\" href=\"https://vuejs.org/\" target=\"_blank\">Vue.js</a>",
|
||||
'tailwindcss': "<a class=\"hover:text-white transition\" href=\"https://tailwindcss.com/\" target=\"_blank\">tailwindcss</a>",
|
||||
'nginx': "<a class=\"hover:text-white transition\" href=\"https://nginx.org/\" target=\"_blank\">nginx</a>",
|
||||
'gunicorn': "<a class=\"hover:text-white transition\" href=\"https://gunicorn.org/\" target=\"_blank\">gunicorn</a>",
|
||||
'daphne': "<a class=\"hover:text-white transition\" href=\"https://github.com/django/daphne\" target=\"_blank\">daphne</a>",
|
||||
'redis': "<a class=\"hover:text-white transition\" href=\"https://redis.io/\" target=\"_blank\">redis</a>",
|
||||
'SQLite': "<a class=\"hover:text-white transition\" href=\"https://www.sqlite.org\" target=\"_blank\">SQLite</a>",
|
||||
'PostgreSQL': "<a class=\"hover:text-white transition\" href=\"https://www.postgresql.org/\" target=\"_blank\">PostgreSQL</a>",
|
||||
'ubuntu': "<a class=\"hover:text-white transition\" href=\"https://ubuntu.com/\" target=\"_blank\">ubuntu</a>",
|
||||
"django": '<a class="hover:text-white transition" href="https://docs.djangoproject.com" target="_blank">django</a>',
|
||||
"bootstrap": '<a class="hover:text-white transition" href="https://getbootstrap.com/" target="_blank">bootstrap</a>',
|
||||
"Vue.js": '<a class="hover:text-white transition" href="https://vuejs.org/" target="_blank">Vue.js</a>',
|
||||
"tailwindcss": '<a class="hover:text-white transition" href="https://tailwindcss.com/" target="_blank">tailwindcss</a>',
|
||||
"nginx": '<a class="hover:text-white transition" href="https://nginx.org/" target="_blank">nginx</a>',
|
||||
"gunicorn": '<a class="hover:text-white transition" href="https://gunicorn.org/" target="_blank">gunicorn</a>',
|
||||
"daphne": '<a class="hover:text-white transition" href="https://github.com/django/daphne" target="_blank">daphne</a>',
|
||||
"redis": '<a class="hover:text-white transition" href="https://redis.io/" target="_blank">redis</a>',
|
||||
"SQLite": '<a class="hover:text-white transition" href="https://www.sqlite.org" target="_blank">SQLite</a>',
|
||||
"PostgreSQL": '<a class="hover:text-white transition" href="https://www.postgresql.org/" target="_blank">PostgreSQL</a>',
|
||||
"ubuntu": '<a class="hover:text-white transition" href="https://ubuntu.com/" target="_blank">ubuntu</a>',
|
||||
"RHEL8": '<a class="hover:text-white transition" href="https://developers.redhat.com/rhel8" target="_blank">RHEL8</a>',
|
||||
"Selenium WebDriver": '<a class="hover:text-white transition" href="https://www.selenium.dev/documentation/webdriver/" target="_blank">Selenium WebDriver</a>',
|
||||
"python3": '<a class="hover:text-white transition" href="https://www.python.org/" target="_blank">python3</a>',
|
||||
"Requests": '<a class="hover:text-white transition" href="https://requests.readthedocs.io/en/latest/" target="_blank">Requests</a>',
|
||||
"apexcharts": '<a class="hover:text-white transition" href="https://apexcharts.com/" target="_blank">APEXCHARTS.JS</a>',
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -48,22 +54,33 @@ def index(request):
|
|||
return render(request, 'referenzen.html', {'referenzList': referenzList})
|
||||
|
||||
|
||||
|
||||
def referenz(request, name):
|
||||
|
||||
if not os.path.exists(os.path.join(REFERENZ_DIR, 'referenzen', f'{name}.json')):
|
||||
raise Http404
|
||||
|
||||
|
||||
with open(os.path.join(REFERENZ_DIR, 'referenzen', f'{name}.json'), "r") as f:
|
||||
context = json.loads(f.read())
|
||||
|
||||
context.update({
|
||||
'filename': name,
|
||||
'participant_head': mark_safe(context['participant_head']),
|
||||
'case_study': render_to_string(name+'.html', {}),
|
||||
# 'case_study': render_to_string(name+'.html', {}),
|
||||
})
|
||||
|
||||
try:
|
||||
context.update(
|
||||
{
|
||||
"case_study": render_to_string(name + ".html", {}),
|
||||
}
|
||||
)
|
||||
except TemplateDoesNotExist:
|
||||
context.update(
|
||||
{
|
||||
"case_study": render_to_string("default.html", {}),
|
||||
}
|
||||
)
|
||||
|
||||
save_stack_list:list = []
|
||||
for stack in context['stack_list']:
|
||||
save_stack_list.append(mark_safe(STACK_LINK.get(stack, stack)))
|
||||
|
|
|
|||
Loading…
Reference in New Issue