Also wir haben ganz geile Erfahrungen mit dem ThinkPad T14 gemacht. Habe mal erwirkt, dass zu Zwecken der Öffentlichkeitsarbeit 25 Stück angeschafft werden. Manjaro Linux draufgeknallt, mit Ansible provisioniert - ab geht's!

https://www.lenovo.com/us/en/p/laptops/thinkpad/thinkpadt/thinkpad-t14-gen-4-14-inch-intel/len101t0057

...zur Antwort

Dinge, die mir nach kurzer Betrachtung auffallen:

  • Du stellst zu keinem Zeitpunkt sicher, dass x bzw. y tatsächlich Rezepte sind
  • Du stellst auch nicht fest, ob z eine Zutat ist

Das sind Sachen, die ich angehen würde.

...zur Antwort

Nach etwas Recherche scheint FXAP ein proprietäres Encryption Protocol des FiveM Asset Escrow zu sein. Ich konnte nichts darüber finden, wie es funktioniert. Das riecht nach Security by Obscurity, denn Kerckhoff's Principle sagt denen anscheinend nichts.

Wie dem auch sei: Da ich in diesem Bereich null aktiv bin, hab ich keine Aktie in weiterer Research. Und falls das ganze auf asymmetrischer Verschlüsselung oder public-private-key encryption beruht, am besten mittels elliptic curve - viel Spaß. Wenn du das brichst, hat das Internet ganz neue Probleme...

...zur Antwort

Relativ simples Problem, das man logisch herleiten kann.

Wonach du suchst ist stochastische Abhängigkeit, und zwar, ob beide aus dem gleichen Teil Deutschlands stammen, in Abhängigkeit davon, dass bereits bekannt ist, dass beide mit "Ja" geantwortet haben.Du weißt also: Du hast zwei Leute mit Ja. Jetzt ist die Frage: Wie groß ist die Wahrscheinlichkeit, dass, wenn A aus dem Osten kommt, B auch aus dem Osten kommt? Analog für den Westen. Dann die Gesamtwahrscheinlichkeit berechnen.

Du hast alle Zahlen, die du brauchst. Wie du sie kombinieren musst, überlasse ich dir. ;)

...zur Antwort

Du sollst entscheiden, ob die gegebenen Ereignisse (also "<40" und "Ja") stochastisch unabhängig sind.

Kürzer Blick auf die Definition von stochastischer Unabhängigkeit:

"Zwei Ereignisse sind stochastisch unabhängig, wenn ihre vereinigte Wahrscheinlichkeit gleich dem Produkt ihrer Wahrscheinlichkeiten ist."

Siehe dazu hier.

Einsetzen - ausrechnen - fertig. :)

...zur Antwort

Kurz zum Verständnis, wie Netzwerke im IPv4-Adressbereich funktionieren:

Jedes Gerät, das neu in das Netzwerk kommt, fragt über Broadcast (deshalb kannst und darfst du da nix machen) nach dem Router, damit der als zentraler DHCP-Server und Network Authority eine IP-Adresse vergeben kann. Die kann entweder jedes Mal neu sein, oder anhand der Mac-Adresse jedes Mal die gleiche IP zuordnen.

0.0.0.0 ist ein Platzhalter für die vom Router später zugewiesene Adresse des Servers. Daran willst du also nichts ändern, denn die Adresse kennst du ja vorher nicht. Versuchst du dich mit 0.0.0.0 zu verbinden, landest du natürlich bei dir selbst, wo ja kein Server läuft.

Auf Port 22 wird er dich ganz sicher nicht connectens lassen, der ist für SSH reserviert. FileZilla nutzt SFTP als Standardprotokoll, weshalb der natürlich über SSH auf Port 22 verbinden darf.

Die richtige IP muss also die sein, die der Router der Maschine zugewiesen hat, auf welcher der Server läuft. Diese findest du nur auf 2 Arten:

  • Du scannst dein Netzwerk und suchst nach einer Maschine, deren Ports und Services passen. Das ist kompliziert, und wenn dureinen Fehler machst, schnell mal strafbar.
  • Du schaust in die Netzwerkübsersicht vom Router. Der sollte irgendwo ein Online-Interface haben, meistens klappt es, auf die Router-IP auf Port 80 zu verbinden. Bei fritz!box kannst du auf fritz.box gehen. Da muss die Maschine irgendwo sein, mit ihrer zugehörigen IP.

Den Port entnimmst du der Server-Konfiguration.

Wenn das nicht funktioniert, dann überprüfe, ob dein Server wirklich läuft, oder ob der irgendwo abstürzt. Im Zweifelsfall auch testen, ob er überhaupt connections erhält, indem du einen Listener auf einem beliebigen Port aufmachst und da drauf verbindest. Dann weißt du immerhin, dass du die richtige IP hast.

Schlussendlich Firewall-Einstellungen aller Parteien (du, Server, Router) überprüfen. Nicht, dass irgendwer der Meinung ist, Port 28015 wäre zu filtern oder gar zu droppen...

...zur Antwort

Nicht, dass mir da einer bekannt wäre.

Außerdem ein paar Punkte, warum ich stark daran zweifle, dass es den gibt:

  • Mir ist keine API-Funktionalität für Bildschirmübertragungen bekannt. Zumal Bots allgemein auch keinen Bildschirm haben, den sie streamen könnten.
  • Die API spezifiziert auch keinen Token Intent für Bildschirmübertragungen.
  • Um NETFLIX zu streamen müsste dein Bot ZUSÄTZLICH auch Zugang zur NETFLIX API haben, und über Login-Credentials oder ein Token verfügen. Soweit mir bekannt ist die NETFLIX API komplett proprietary.
  • Mit sind keine Vorhaben von Discord in dieser Richtung bekannt. Das hätten die vermutlich auf dem Developer Server angekündigt. Im Zweifel versuchst du dort mal direkt die Devs oder uns als Dev Community zu fragen.
...zur Antwort

Vermutlich hat die Reparatur Dinge zerstört. Windows halt. Warum er sich bei NTFS beschwert, vermag ich nicht zu erklären, eigentlich ist das mit beiden OS kompatibel. Sind möglicherweise Linux-spezifische Dateien verloren gegangen?

Falls du WSL installiert hast, versuch' mal damit nach den Dateien zu suchen. Vielleicht kann Windows damit nichts anfangen.

Ansonsten empfehle ich in Zeiten von WSL und WSL2 generell keinen Dual Boot mehr. Es hat keine Vorteile, und wir alle wissen ja, wie gut Windows es leiden kann, wenn man noch ein anderes Betriebssystem daneben setzt...

...zur Antwort

Empfehlung: Windows-Partitionen zu klonen geht sehr oft daneben, wenn man nicht weiß, was man da tut. Liebe rneu installieren. Sollte man bei Windows sowieso regelmäßig tun.......

Windows auf der neuen SSD installieren (standardmäßig C:\). Dann, wenn du möchtest weitere Partitionen anlegen, oder alles auf C:\ belassen. Schlussendlich Daten der alten HDDs auf die neue SSD, entweder run vorher angelegte Partitionen oder halt direkt auf C:\, wie dir das passt.

...zur Antwort

Wenn der PC nach Datum und Uhrzeit fragt, dann hätte ich mit 90% Sicherheit exakt das gleiche Problem.

Wie man weiß, braucht so eine Maschine Strom. Und zwar alles.

Falls du dich schonmal gefragt hast, wie der Computer Datum und Uhrzeit nicht vergisst, obwohl er aus ist - das erledigt das BIOS.

Das BIOS hat dafür seine eigene Stromquelle, die sog. "BIOS Battery". Das ist eine kleine Batterie (meistens Knopfzelle, CR irgendwas, kann unterschiedlich groß sein). Diese Batterie hält das BIOS permanent am Leben, selbst wenn die Hauptstromzufuhr über das Netzteil unterbrochen wird.

Wenn die BIOS Battery leer ist, stirbt das BIOS mit dem Abschalten des Stroms. Also geht auch die BIOS-Uhr aus, der Computer vergisst, dass er weiterzählen muss, und das BIOS merkt sich die Uhrzeit beim Herunterfahren.

Das BIOS ist so konfiguriert, dass es bei Diskrepanzen den Nutzer bittet, Uhrzeit und Datum zu bestätigen. Deshalb startet er auch, ohne, dass du speicherst - du bestätigst die falsche Zeit, und nach dem Boot synchronisiert Windows die Zeit automatisch mit dem Internet (sofern verbunden).

Ich empfehle also, die BIOS Battery auszutauschen, das löst das Problem mit an Sicherheit grenzender Wahrscheinlichkeit.

Wenn das nicht hilft - direkt Kontakt zum Hersteller aufnehmen, dann ist das BIOS vermutlich beschädigt, dann hilft alles Softwareupdate nichts. Das ist aber sehr unwahrscheinlich, da er ja trotzdem bootet. Batterie tauschen - weitermachen.

...zur Antwort

Also die Antworten schockieren mich ehrlich gesagt ein wenig. Ich weiß ja nicht, wo die anderen Antwortgeber studieren, aber ich habe eine komplett andere Erfahrung gemacht.

Wenn es dir wirklich ernst ist, und du dich auf ein Informatik-Studium vorbereiten willst, dann lernst du C. Mit allen Konzepten, die dazugehören. Pointer, Structs, dynamische Speicherverwaltung, Datenstrukturen,...

Auf vermeintlich "leichtere" Sprachen wie Python umzusteigen ist am Ende kein Ding. Programmiersprachen sind sowieso nur Werkzeuge, die Konzepte sind es, die man verstehen muss. Und C beinhaltet eben genau diese grundlegenden, elementar wichtigen Grundlagen, die man braucht, um späte zu verstehen, wie die höheren Sprachen funktionieren.

-----EDIT-------

Ich hab die Frage unvollständig gelesen. Den (Kampf)Begriff "KI" blendet mein Kopf inzwischen selbstständig aus.

Wenn du in den Bereich neuronale Netzwerke und maschinelles Lernen gehen möchtest, dann ist Python tatsächlich kein schlechter Rat. Wird in dem Bereich jedenfalls viel verwendet, aufgrund der stark abstrahierten Komplexität und dynamischen Typisierung.

Meine Antwort oben bezieht sich auf ein Informatiksturium allgemein.

...zur Antwort

Bevor ich antworte huste ich mal ganz stark. Wenn du darin "Obsidian ist kein RDBMS" hörst, ist das Zufall.

Wenn du unter Linux arbeitest, schau' mal, ob du EIN Skript geschrieben bekommst, das das für dich tut. Dann kannst du das einfach mit Hilfe von cron/crontab täglich laufen lassen (sofern der Computer zur eingestellt e Uhrzeit eingeschaltet und der entsprechende cron-Nutzer angemeldet ist).

Unter Windows müsste ich selbst nachschlagen, aber da wird es bestimmt etwas Vergleichbares geben.

...zur Antwort

Ich fasse das mal so zusammen, dass man das auch versteht (bin selbst Discord Active Developer):

Mit dem Update der API und der Migration zu SlashCommands hat Discord alle Developer verpflichtet, auf SlashCommands umzustellen. (Text commands werden auch von der App recht zuverlässig als solche erkannt und blockiert)

Ein weiteres Tool, welches uns in diesem Kontext zur Verfügung gestellt wurde, sind die sogenannten ContextMenus. Diese erlauben es, bestimmte Funktionen abhängig vom jeweiligen Kontext direkt auszuführen, sind also quasi Shortlinks auf Command-Funktionalitäten.

Das ContextMenu kennt dabei hauptsächlich zwei verschiedene Kontexte: Den MessageContext und den UserContext. Fu kannst also je nachdem, ob der Anwender auf eine Nachricht oder einen Nutzer klickt, unterschiedliche Commands zur Verfügung stellen.

Das Ganze heißt "Apps", weil nicht nur Bots, sondern auch andere Anwendungen die ContextMenu-API-Funktionen nutzen können (beispielsweise können registrierte Spiele hiermit Leute direkt über Discord in eine Ingame-Lobby einladen oder ähnliches).

Wenn du dazu mehr Fragen hast, frag' gern nach, oder schau in die Discord API, da sind die Funktionen so halbwegs gut dokumentiert.

...zur Antwort

Zu a): (Achtung: Ich kann nur eine approximierte amortisierte Laufzeit liefern)

Ich hab einfach mal ein paar Annahmen getroffen:

  1. Ich sage die durchschnittliche Länge eines Wortes sei L.
  2. Ich sage die Anzahl verschiedener (einzigartiger) Wörter ist u.
  3. Ich approximiere, dass alle Wörter gleich oft vorkommen, ich also n/u Mal an eine LinkedList anhängen muss.

Das bedeutet, ich muss folgende Sachen in Betracht ziehen:

  1. Ich muss alle Wörter einlesen. Laufzeit: 
  2. Ich muss jedes Wort einmal komplett hashen. Laufzeit:
  3. Ich muss approximiert an u Listen jeweils  Mal anhängen, und da es u Listen gibt, sind das 2n, also Laufzeit: 

Das bedeutet, wenn ich das jetzt asymptotisch aufsummiere, komme ich auf eine approximierte Gesamtlaufzeit von Ich übernehme natürlich keine Garantie, dass das eine korrekte Approximation ist, ich habe sehr viele Sachen einfach angenommen, um es nicht unnötig kompliziert zu machen, aber pseudopolynomiell sieht irgendwie richtig aus.

Zu b):

Das dürfte selbst bei meiner recht halbherzigen Laufzeitanalyse trotzdem aus dieser ersichtlich sein, wie man eine Datei erstellt, die WIRKLICH ätzend ist.

Zu c):

Wenn b) ordentlich gemacht wurde, und das Programm verstanden wurde, ist die Antwort hier trivial.

...zur Antwort

Wenn deine Auflösungen tatsächlich stimmen, wird dir nicht viel anderes übrig bleiben.

Ich würde dir allerdings um deinetwillen (und im Sinne dessen, der das Korrekturlesen muss) empfehlen, das in einen Bruch umzuwandeln, sonst kommt da eine relativ hässliche Zahl raus... Als Bruch geht's.

...zur Antwort
Wie kann ich machen, dass OpenAI mich duzt?

Hallo,

wie kann ich bei diesem Code machen, dass mich OpenAI bei allen Fragen, die es mir beantwortet, duzt und nicht siezt?

import pyttsx3
import re
import pyjokes
import speech_recognition as sr
import geocoder
import datetime
import pytz
from geopy.geocoders import Nominatim
from timezonefinder import TimezoneFinder
import openai

openai.api_key = 'sk-...'
model_id = "gpt-4"

engine = pyttsx3.init()


def recognize_speech(recognizer, source):
    print("Sage etwas...")
    audio = recognizer.listen(source, timeout=10)
    try:
        text = recognizer.recognize_google(audio, language="de-DE")
        print("Text: " + text)
        return text
    except sr.UnknownValueError:
        return "not_understood"
    except sr.RequestError as e:
        print(f"Fehler bei der Anfrage an die Google Web Speech API: {e}")
        return ""


def openai_request(prompt):
    response = openai.ChatCompletion.create(
        model=model_id,
        messages=[{"role": "user", "content": prompt}],
        max_tokens=150
    )

    api_usage = response['usage']
    print('Total Token consumed: {0}'.format(api_usage['total_tokens']))
    response_text = response.choices[0].message['content']
    prompt += response_text
    return prompt


def speak(text=None):
    if text:
        engine.say(text)
        engine.runAndWait()


def hey_luna_in_q(q):
    return "luna" in q.lower()


def wait_for_wake_word(recognizer, source):
    while True:
        print("Warte auf Wake-Word...")
        audio = recognizer.listen(source)
        try:
            text = recognizer.recognize_google(audio, language="de-DE")
            if hey_luna_in_q(text):
                print("Wake-Word erkannt!")
                return
        except sr.UnknownValueError:
            pass
        except sr.RequestError as e:
            print(f"Fehler bei der Anfrage an die Google Web Speech API: {e}")


def get_local_time(location_name):
    try:
        if location_name.lower() == "current location":
            current_location = geocoder.ip('me')
            latitude, longitude = current_location.latlng
        else:
            geolocator = Nominatim(user_agent="voiceAssistant")
            location = geolocator.geocode(location_name)

            if not location:
                return "Ort nicht gefunden"

            latitude = location.latitude
            longitude = location.longitude

        tf = TimezoneFinder()
        timezone = tf.timezone_at(lng=longitude, lat=latitude)

        if timezone:
            local_time = datetime.datetime.now(pytz.timezone(timezone))
            return local_time.strftime("%H:%M")
        else:
            return "Unbekannte Zeitzone"
    except Exception as e:
        print("Fehler beim Abrufen der lokalen Zeit:", e)
        return "Fehler"


def execute():
    recognizer = sr.Recognizer()

    witz_erzählt = False  # Variable, um den Zustand des Witzes zu verfolgen

    with sr.Microphone() as source:
        while True:
            wait_for_wake_word(recognizer, source)
            print("Warte auf Wake-Word...")

            q = recognize_speech(recognizer, source)
            print("Erkannter Text:", q)

            if q == "not_understood":
                speak("Entschuldigung! Das habe ich nicht verstanden.")
                continue

            if "hallo" in q.lower():
                speak("Hallo! Womit kann ich dir behilflich sein?")
                continue

            if "wie geht es dir" in q.lower():
                speak("Mir geht es gut, danke! Wie geht es dir?")
                continue

            if "spät ist es in" in q.lower() or "wieviel uhr ist es in" in q.lower() or "wieviel uhr in" in q.lower() or "zeit in" in q.lower() or "uhrzeit in" in q.lower():
                location_name = q.split("in")[-1].strip()
                print("Extrahierter Ortname:", location_name)
                local_time = get_local_time(location_name)
                print("Lokale Zeit für", location_name, ":", local_time)
                if local_time:
                    speak(f"In {location_name} ist es {local_time}.")
                else:
                    speak(f"Entschuldigung, ich konnte die Zeit für {location_name} nicht finden.")
                continue

            if "spät ist es" in q.lower() or "wieviel uhr" in q.lower() or "zeit in" in q.lower() or "uhrzeit in" in q.lower():
                current_location = geocoder.ip('me')
                latitude, longitude = current_location.latlng
                local_time = get_local_time("current location")
                speak(f"Es ist {local_time}.")
                continue

            if "erzähle mir einen witz" in q.lower() or "erzähl mir einen witz" in q.lower() or "ich möchte einen witz hören" in q.lower():
                joke = pyjokes.get_joke(language='de')
                speak(joke)
                witz_erzählt = True
                continue

            if "ich bin traurig" in q.lower() or "mir geht es nicht gut" in q.lower() or "es geht mir nicht gut" in q.lower() or "mir geht es schlecht" in q.lower():
                if not witz_erzählt:
                    speak("Das tut mir leid zu hören. Ich bin hier für dich, wenn du reden möchtest oder jemanden zum Zuhören brauchst. Soll ich dir zum Aufmuntern einen Witz erzählen?")
                    response = recognize_speech(recognizer, source)
                    if "ja" in response.lower():
                        joke = pyjokes.get_joke(language='de')
                        speak(joke)
                        continue
                    elif "nein" in response.lower():
                        speak("Ok, womit kann ich dir sonst behilflich sein?")
                        continue
                    else:
                        speak("Entschuldigung. Ich habe dich nicht verstanden.")
                        continue

            prompt = q
            response = openai_request(prompt)

            if response.lower().startswith(q.lower()):
                response = response[len(q):].strip()

            speak(response)


if __name__ == '__main__':
    execute()

Freundliche Grüsse

...zum Beitrag

Zählt vielleicht schon fast als Life Hack, aber...

Englisch.

Da ist die Anrede immer "You", dann kannst du dir aussuchen, wie du das interpretiersn willst... 😅

...zur Antwort