Cover Image

Kosten des Klimawandels

Oktober 4, 2024 Lesezeit: 3 Minuten

Hörbeitrag: Unwetter in Spanien: Wohlstandsvernichter Klimawandel – Intv. Anders Levermann 10.

https://www.deutschlandfunk.de/unwetter-in-spanien-wohlstandsvernichter-klimawandel-intv-anders-levermann-dlf-8f7dc98d-100.html

Zugehörige Diskussion https://x.com/PIK_Klima/status/1852321259024974286

---

Die Kosten des Klimawandels
26. Juli 2023

https://www.mpg.de/20668258/interview-munichre-kosten-klimawandel

"Laut der International Energy Agency bräuchte es alleine bis 2030 jährlich 1,6 Billionen US-Dollar an reinen Investitionen in erneuerbare Energien, um das 1,5-Grad-Ziel zu erreichen. Momentan liegen die Investitionen bei einem Drittel dessen.Das sind globale Zahlen, wohingegen die 280 bis 900 Milliarden Euro als mögliche Klimaschäden eine nationale Projektion ist, die im übrigen nicht nur die direkten Klimaschäden, sondern auch Folgeschäden und immaterielle Schäden beinhaltet."

  • Gründe: Der Klimawandel führt zu einer Zunahme von Extremwetterereignissen wie Überschwemmungen, Stürmen und Hitzewellen. Rückversicherer wie Munich Re tragen die Spitzenrisiken bei Großkatastrophen, die für Erstversicherer allein finanziell nicht tragbar wären. Der steigende Schadentrend ist teils auf den Klimawandel und teils auf die zunehmende Urbanisierung zurückzuführen.

  • Ausmaß/Kosten: Im Jahr 2022 beliefen sich die weltweiten volkswirtschaftlichen Schäden durch Naturkatastrophen auf 270 Milliarden US-Dollar, von denen 120 Milliarden versichert waren. Die Schadenskosten nehmen kontinuierlich zu. Zukunftsprognosen sehen noch höhere Schäden, wenn der Klimawandel ungebremst voranschreitet.

  • Aussicht: Es ist entscheidend, Emissionen zu senken, um den Trend langfristig zu verlangsamen. Gleichzeitig sind Anpassungen an die bereits unvermeidlichen Folgen des Klimawandels notwendig, wie z.B. durch neue Bauvorschriften. Der Umbau zu einer klimaneutralen Wirtschaft ist langfristig alternativlos.

  • Möglichkeiten: Munich Re unterstützt den Wandel, indem sie erneuerbare Energien versicherbar macht und dabei hilft, emissionsfreie Technologien wie Solarmodule und Windturbinen zu finanzieren.


Cover Image

Vorlesen

September 22, 2024 Lesezeit: ~1 Minute

Chrome/Firefoxerweiterung Talkie

https://joelpurra.com/projects/talkie/


Aciimath rendern

September 14, 2024 Lesezeit: 4 Minuten

Mathe Renderer ChatPT asciimath

Prompt

Diskutiere die Funktion f(x)=x*e^x . Verwende als Formelformat AciiMath. Die Formeln müssen dafür zwischen # stehen, also z.B. #x^2#.

Quelltext

<!DOCTYPE html>
<html lang="de">
<head>
    <meta charset="UTF-8">
    <title>AsciiMath und Markdown Renderer</title>
    <!-- Einbindung von marked.js für Markdown-Verarbeitung -->
    <script src="https://cdn.jsdelivr.net/npm/marked/marked.min.js"></script>
    <!-- MathJax-Konfiguration -->
    <script type="text/javascript">
        window.MathJax = {
            loader: {load: ['input/asciimath']},
            asciimath: {
                delimiters: [['#', '#']]
            },
            startup: {
                typeset: false  // Verhindert automatisches Typesetting beim Laden
            }
        };
    </script>
    <!-- Einbindung von MathJax -->
    <script type="text/javascript"
      src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js">
    </script>
    <style>
        body {
            font-family: Arial, sans-serif;
            margin: 20px;
        }
        textarea {
            width: 100%;
            height: 200px;
            font-size: 16px;
        }
        #output {
            border-top: 1px solid #ccc;
            margin-top: 20px;
            padding-top: 20px;
        }
        button {
            padding: 10px 20px;
            font-size: 16px;
        }
        pre code {
            background-color: #f4f4f4;
            padding: 2px 4px;
            border-radius: 4px;
        }
        h1, h2, h3, h4, h5, h6 {
            margin-top: 20px;
        }
        ul, ol {
            margin-left: 20px;
        }
    </style>
</head>
<body>
    <h1>AsciiMath und Markdown Renderer</h1>
    <p>Fügen Sie Ihren Text mit AsciiMath-Formeln (zwischen <code>#</code>) und Markdown-Syntax in das Textfeld ein und klicken Sie auf <strong>Rendern</strong>.</p>
    <textarea id="input"></textarea><br><br>
    <button onclick="render()">Rendern</button>
    <div id="output"></div>

    <script>
        function render() {
            var inputText = document.getElementById('input').value;

            // Markdown in HTML umwandeln
            var htmlContent = marked.parse(inputText);

            // Setze den Inhalt des Ausgabe-Divs
            var output = document.getElementById('output');
            output.innerHTML = htmlContent;

            // Triggert das erneute Rendern durch MathJax
            MathJax.typesetPromise([output]).catch(function (err) {
                output.innerHTML = '';
                output.appendChild(document.createTextNode(err.message));
            });
        }
    </script>
</body>
</html>


Kartenkamera

September 14, 2024 Lesezeit: 8 Minuten

Idee

Die Kartenkamera zeigt die aktuelle GPS-Position, die Adresse und die Uhrzeit auf einer Karte an.

Per Screenshot am Smartphone lassen sich so aussagekräftige Fotos von Schlaglöchern etc. gestalten.

Link/Demo
https://drittereihe.de/kartenkamera.html

V2024-09-14 Marker auf der Karte verschiebbar

Realisiert mit ChatGPT

Quellcode


<!DOCTYPE html>
<html lang="de">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Karten- und Kamerafunktion mit Textfeld</title>
    <style>
        body, html {
            margin: 0;
            padding: 0;
            height: 100%;
            display: flex;
            flex-direction: column;
        }
        #map {
            height: 40%;
        }
        #address {
            padding: 10px;
            background-color: #f9f9f9;
            font-size: 1.2em;
        }
        #inputField {
            width: 95%;
            padding: 10px;
            font-size: 1em;
            resize: vertical;
            overflow: auto;
            min-height: 50px; /* Mindesthöhe für das Textfeld */
        }

        /* Für kleine Bildschirme wie Smartphones */
        @media screen and (max-width: 600px) {
            #inputField {
                font-size: 1.2em; /* Größere Schrift für mobile Geräte */
                min-height: 100px; /* Erhöhte Mindesthöhe */
                padding: 15px; /* Mehr Padding für bessere Nutzbarkeit */
            }
        }

        #camera {
            height: 40%;
        }
        video {
            width: 100%;
            height: 100%;
            object-fit: cover;
        }
    </style>
    <!-- Leaflet CSS -->
    <link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.3/dist/leaflet.css" />
</head>
<body>

    <!-- Karte -->
    <div id="map"></div>

    <!-- Textfeld -->
    <div id="address">
        <textarea id="inputField" placeholder="Tippe hier..."></textarea>
    </div>

    <!-- Kamerabild -->
    <div id="camera">
        <video id="video" autoplay></video>
    </div>

    <!-- Leaflet JS -->
    <script src="https://unpkg.com/leaflet@1.9.3/dist/leaflet.js"></script>

    <script>
        // Globale Variablen
        let map;
        let marker;

        // Funktion zur Anzeige der Karte mit der aktuellen Position
        function initMap() {
            if (navigator.geolocation) {
                navigator.geolocation.getCurrentPosition(position => {
                    const lat = position.coords.latitude;
                    const lon = position.coords.longitude;

                    // Karte initialisieren
                    map = L.map('map').setView([lat, lon], 13);

                    // OpenStreetMap-Tiles hinzufügen
                    L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
                        attribution: '&copy; OpenStreetMap contributors'
                    }).addTo(map);

                    // Verschiebbaren Marker hinzufügen
                    addDraggableMarker(lat, lon);

                    // Adresse abrufen und Textfeld aktualisieren
                    updateAddress(lat, lon);

                }, error => {
                    console.log("Fehler beim Abrufen der Position:", error);
                    alert("Position konnte nicht ermittelt werden.");
                });
            } else {
                alert("Geolocation wird von deinem Browser nicht unterstützt.");
            }
        }

        // Funktion zum Hinzufügen eines verschiebbaren Markers
        function addDraggableMarker(lat, lon) {
            // Wenn bereits ein Marker existiert, entferne ihn
            if (marker) {
                map.removeLayer(marker);
            }

            // Neuen Marker erstellen und hinzufügen
            marker = L.marker([lat, lon], { draggable: true }).addTo(map);

            // Popup mit Koordinaten
            marker.bindPopup(`Lat.: ${lat}, Lon.: ${lon}`).openPopup();

            // Event-Listener für das Beenden des Draggens
            marker.on('dragend', function (e) {
                const position = marker.getLatLng();
                const newLat = position.lat;
                const newLon = position.lng;

                // Karte zentrieren
                map.setView([newLat, newLon]);

                // Popup aktualisieren
                marker.getPopup().setContent(`Lat.: ${newLat}, Lon.: ${newLon}`).openOn(map);

                // Adresse abrufen und Textfeld aktualisieren
                updateAddress(newLat, newLon);
            });
        }

        // Funktion zum Abrufen der Adresse und Aktualisieren des Textfelds
        function updateAddress(lat, lon) {
            // Datum und Uhrzeit formatieren
            const now = new Date();
            const daysShort = ['So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa'];
            const dayName = daysShort[now.getDay()];
            const date = now.getDate().toString().padStart(2, '0');
            const month = (now.getMonth() + 1).toString().padStart(2, '0');
            const year = now.getFullYear().toString().slice(-2);
            const hours = now.getHours().toString().padStart(2, '0');
            const minutes = now.getMinutes().toString().padStart(2, '0');
            const formattedDateTime = `${dayName}, ${date}.${month}.${year} ${hours}:${minutes} Uhr`;

            // Adresse anhand der Koordinaten abrufen
            fetch(`https://nominatim.openstreetmap.org/reverse?format=json&lat=${lat}&lon=${lon}`)
                .then(response => response.json())
                .then(data => {
                    const addressComponents = data.address;
                    const road = addressComponents.road || '';
                    const houseNumber = addressComponents.house_number || '';
                    const postcode = addressComponents.postcode || '';
                    const city = addressComponents.city || addressComponents.town || addressComponents.village || '';
                    const suburb = addressComponents.suburb || '';

                    // Ort und Stadtteil in der richtigen Reihenfolge (Ort, dann Vorort)
                    let location = `${postcode} ${city}`;
                    if (suburb && suburb !== city) {
                        location += ` ${suburb}`;
                    }

                    // Adresse in der gewünschten Reihenfolge formatieren
                    const formattedAddress = `${road} ${houseNumber}, ${location}`;

                    // Geokoordinaten, Adresse und Datum ins Textfeld einfügen
                    document.getElementById('inputField').value =
                        `Datum/Uhrzeit: ${formattedDateTime}\nAdresse: ${formattedAddress}\nLat.: ${lat}, Lon.: ${lon}`;
                })
                .catch(error => {
                    console.log("Fehler beim Abrufen der Adresse:", error);
                    document.getElementById('inputField').value =
                        `Datum/Uhrzeit: ${formattedDateTime}\nAdresse konnte nicht geladen werden.\nLat.: ${lat}, Lon.: ${lon}`;
                });
        }

        // Funktion zur Anzeige des Kamerabildes (hintere Kamera bevorzugt)
        function initCamera() {
            const video = document.getElementById('video');

            // Funktion zur Auswahl der Kamera
            function getCamera(facingMode) {
                return navigator.mediaDevices.getUserMedia({
                    video: { facingMode: { exact: facingMode } }
                });
            }

            // Versuch, die hintere Kamera zu verwenden
            getCamera("environment")
                .then(stream => {
                    video.srcObject = stream;
                })
                .catch(() => {
                    // Falls die hintere Kamera nicht verfügbar ist, verwende die vordere Kamera
                    getCamera("user")
                        .then(stream => {
                            video.srcObject = stream;
                        })
                        .catch(error => {
                            console.log("Fehler beim Zugriff auf die Kamera:", error);
                            alert("Kamera konnte nicht aktiviert werden.");
                        });
                });
        }

        // Funktionen ausführen
        window.onload = () => {
            initMap();
            initCamera();
        }
    </script>
</body>
</html>

'


Cover Image

Spiel

September 14, 2024 Lesezeit: ~1 Minute

Hier ist eine Übersicht über die Spieletreffs in der Region

Direkter Link zum google-doc: drittereihe.de/index.php?link=spiel


Hit Counter

33

Über

Eine Sammlungs-Seite von UlPi.