9 Stunden kommt hin. Manchmal auch 10.

Vor 20 Jahren waren noch 13 bis 14 Stu nden normal.

...zur Antwort

Das sind sog. Figlets:

https://en.m.wikipedia.org/wiki/FIGlet

...zur Antwort

Unter Windows wirst du dafür vermutlich die Win32-API nutzen wollen.

Damit kannst du leicht GUI-Anwendungen ohne weitere Abhängigkeiten oder Ressourcendateien direkt im Code zusammenbauen.

Ein Hello-World mit GUI ist dann nur wenige KB groß.

...zur Antwort

Das ist doch alles totaler Pfusch.

Nimm std::thread, fixe den Bug mit der Endlosschleife, und beende den Thread ordnungsgemäß!

Das ist ja grausam bisher ...

...zur Antwort

Weil es seit einiger Zeit einen total ekelhaften Hype um DevSecOps gibt, was im Endeffekt dazu führt, dass Software immer verbuggter wird.

Kurz gesagt bedeutet das so viel wie: "Wir wissen, dass unsere Software voller fehler ist, aber wir wollen lieber mehrmals am Tag Updates verteilen, anstatt einmal alles richtig auf Herz und Nieren zu testen".

Weitere Gründe für immer schlechtere Software ist m. M. n.:

  • die meisten Software kennen ihre aktuell eingesetzte Programmiersprache nur oberflächlich, und denken "alle Programmierssprachen wären irgendwie gleich", was allein schon dafür ein Zeichen ist, dass man nie wirklich in die Materie eingedrungen ist, geschweige denn, die eigene Programmiersprache überhaupt verstanden hat.
  • Viele Entwickler kümmern sich nicht um Ressourcenverbrauch, was sich in unnötig hohem RAM-Verbrauch, naiven Algorithmen, uvm. wiederspiegelt. Dass ein Programm doppelt so viel RAM nutzen könnte, wenn man den RAM-Verbrauch halbieren würde, und das ein relativer (!) Wert ist, der für 1GB, 8GB, 128GB genauso wie für zukünftig mal 1024TB gelten wird, schnallen viele irgendwie nicht.

In den 90ern habe ich immer Grafikdemos und Malware in Assembler, aber auch in C betrachtet, analysiert, geschrieben. Da hatte dann eine EXE Datei eine Größe von unter einem einzigen Kilobyte, und konnte Dinge tun, die heute mit .NET in der tausendfachen Dateigröße münden.

Ja, man kann mit Low-Code, RAD, Electron, oder anderen gängigen Hypebullshit-Dingen, sowie auch .NET sehr schnell Software bauen. Aber die ist dann im Bezug auf Ressourcenhunger IMMER Mist.

Die jüngeren Entwickler so um die 20 kennen es leider gar nicht mehr anders und denken, es sei normal, dass z. B. das Laden einer Seite hier auf GF über eine Sekunde an Zeit verbrät.

Dass man einen Link auf einer Website anklickt, und der Content ist sofort da, weil im DOM-Tree nicht 10000+ Knoten vorhanden sind, das kennen viele Leute gar nicht mehr.

Selbst mit Glasfaserleitungen spürt man die Ladezeit auf den meisten Websites enorm.

Fazit: Software- oder Web-Developer aasen mit Ressourcen bis zum geht nicht mehr. Sie verschwenden alles mögliche, weil sie denken: "Geht doch!". Dass es aber viel besser "gehen" würde, wenn man ordentlich arbeiten würde, erkennen die wenigsten.

...zur Antwort

hahaha ... GENAU so etwas habe ich als Schüler mal in C geschrieben.

Ist sogar relativ trivial, da du nicht, wie bei normalem Fließtext überlappende Zeichen hat, für die eine OCR-Lösung wesentlich aufwändiger wäre.

Allerdings wird so ein Programm immer noch aufwändiger werden, als wenn du es per Hand machst.

Für nur eine einzige derartige Aufgabe lohnt sich ein Programm nicht.

Hättest du 1000 Stück davon, sähe die Sache anders aus.

...zur Antwort

Ja, ist nicht nur möglich, kam in der Vergangenheit sogar schon häufig vor.

Ist aber realistisch betrachtet relativ selten, also kein Grund zur Panik.

Die beiden häufigsten Angriffsvektoren von Zero-Click-Malware sind:

1) DLL-Hijacking: Wenn du also z. B. ein Musikalbum als ZIP-Datei mit lauter MP3-Dateien herunter lädst, und ein Angreifer in diesem Archiv eine DLL-Datei einbebaut hat, die zu deinem Medienplayer (Windows-Media-Player, VLC, WinAmp, etc.) kompatibel ist, wird der Code in dieser DLL ausgeführt, wenn du auf eine MP3-Datei im selben Verzeichnis klickst.

Allerdings ist das eine semi-gut bekannte Angriffsmethode, weshalb alle großen Meidenplayer diese Lücke geschlossen haben. Bei anderer Software, v. a. kleinerer Hersteller, wie PDF-Betrachter, Bildbetrachter, usw. gibt es aber ständig DLL-Hijacking. Es ist DIE einfachste Angriffsmethode unter Windows, und da Microsoft diese Lücke wegen Abwärtskompatibilität nicht schließt, wird sie uns auch noch weitere Jahrzehnte begleiten. (DLL-Hijacking ist seit Windows 95 bekannt, und wird seitdem auch ausgenutzt!)

2) Die zweite Möglichkeit ist ein Bug im Explorer, was eher selten ist, aber hin und wieder vorkommt. Vor etwas über einem Jahr reichte es, eine manipulierte ZIP-Datei herunter zu laden, und diese im Explorer zu betrachten ... also die Datei nicht mal zu öffnen, sondern nur das ZIP-Icon und den Dateinamen im Download-Verzeichnis anzusehen.

Alternativ wird auch manchmal die "Vorschau-Funktion" von Bildern oder komplexen Dateiformaten wie Photoshop, bzw. Corel ausgenutzt.

Fazit: Ja, gibt es alles, aber kommt wirklich nicht häufig vor, wobei DLL-Hijacking nochmal eine Größenordnung öfter genutzt wird, als seltene Bugs auszunutzen.

PS: Im Browser gibt es übrigens sog. Drive-By-Downloads. Das bedeutet, dass das betrachten einer Website ausreicht, um deinen Rechner mit Malware zu infizieren.

Das kommt auch nicht soooo oft vor, aber JEDER Browser hat jedes Jahr mindestens einmal Bugs, die so etwas ermöglichen. Das gibt normalerweise die höchsten Preisgelder bei Hackingveranstaltungen.

Deine Frage ist also mit einem klaren Ja zu beantworten. Aber wie gesagt: Keine Panik, denn soooo häufig kommt es nun auch wieder nicht vor!

...zur Antwort

Hier auf GF wurden bis vor einigen Jahren noch SHA256-Hashes der Passwörter gespeichert, mit individuellem Salt für jeden Nutzer.

Ich hoffe, dass es inzwischen mit bcrypt oder moderneren Alternativen gemacht wird.

Gehashte Passwörter ohne Salt mit veraltetem Algo wie MD5, SHAxxx, oder so, kann man auch gleich im Klartext abspeichern.

Leider machen das immer noch viel zu viele Firmen so.

Und wenn kein Bruteforceschutz vorhanden ist, kann man die meisten Passwörter auch binnen Sekunden knacken.

Achte also immer schön auf viele verschiedene Zeichen unterschiedlichster Kategorien, gute Gesamtlänge und vermeide Muster. Für Laien empfielt sich ein PW-Manager.

...zur Antwort

Dass Endlosschleifen ein Zeichen für schlechtes Design sind, und man auf sinnvolle Abbruchbedingungen achten sollte.

Und dass sich hinter scheinbar trivialen Dingen oft Generatoren verbergen, die im Worst-Case ordentlich Rechenleistung verbraten können.

Und dass man auf moderne Sprachfeatures wie "assignment expressions" setzt, um den Code übersichtlicher zu machen:

while line := input('Text: '):
  print(line)
...zur Antwort

Java mit Swing oder JavaFX bietet eine enorme Fülle an Zeichenfunktionen.

C++ mit Qt oder GTK ebenfalls.

Und C# mit dem ganzen .net-Bloat sowieso.

Für Python gibt es Bindings aller oben genannten, aber ist nicht zu empfehlen, wenn du viel rechnen musst, da saulahm.

Ansonsten gehen allle genannten Sprachen!

PS: JS im Browser mit Canvas geht auch sehr gut, bietet aber deutlich weniger API von Haus aus, also ohne Drittanbieter.

...zur Antwort

Mir fallen spontan folgende Nachteile ein (die man aber im Hinblick auf die vielen Vorteile gerne in Kauf nehmen wird):

  • durch die Kapselung ist es evtl. für unerfahrene Entwickler anfangs etwas schwierig, vernünftige Tests zu implementieren (aber dafür gibts ja Mocks, also kein echtes Problem)
  • der Speicheroverhead bei abgeleiteten Klassen beträgt ungefähr so viel, wie ein Zeiger breit ist, also meist 4 bis 8 Byte. (Klingt wenig, aber wenn man hunderte Millionen von Flyweight-Objekten erzeugt, macht sich das deutlich bemerkbar.)
  • Bei Zugriffen über eine Art this-Zeiger, gibt es immer eine Indirektion, was Cache-Misses und damit Performanceeinbußen bedeutet. (Macht sich in der Praxis aber wirklich kaum bemerkbar.)

So, das wären jetzt die Haupteinschnitte, mit denen man bei OOP rechnen muss, aber wie gesagt, kann man die alle eigentlich vernachlässigen, da die Vorteile bei WEITEM überwiegen.

Außerdem bieten Sprachen wie C++ sehr elegante Entwicklungsmuster, mit denen man dynamisch mit abgeleiteten Klassen arbeiten kann, ohne dass ein herkömmlicher Objektzeiger notwendig wird.

Bei "gemanagedten" Sprachen, die mit einer Art GC arbeiten, muss man aber immer im Hinterkopf behalten, dass Objekte dort implizit VIEL größer sind und mehr Speicher fressen, als es den Anschein hat.

Wenn man z. B. bei Java eine Klasse hat, die eine einzige Membervariable vom Typ "byte" hat, dann frisst das Objekt auf x64-Systemen 20 Byte.

Der Grund ist, dass so ein Objekt auf dem Heap erzeugt wird, und auf dem Stack ein Zeiger bzw. eine Referenz liegt.

Java packt Zeiger seeeehr clever, sodass auf 64-Bit Systemen nicht 8 Byte, sondern nur 4 Byte verbraten werden. Das hat allerdings einen Preis: Eine weitere Indirektion beim Zugriff!

Naja, 4 Byte liegen also auf dem Stack, weitere 8 Byte werden für den internen Zeiger im Speichermanager der VM benötigt (diesmal ungepackt und direkt), dann gibt es einen Referenzzähler von nochmal 4 Byte.

Und da die Membervariable von einem Byte an ein Alignment gebunden ist, werden zusätzliche drei Byte verbraten, sodass wir hier auf 4 Byte kommen.

Deshalb ist ein 1-byte in Java 4 + 8 + 4 + 4 = 20 Byte groß.

Bei C++ würde das gleiche Objekt tatsächlich nur ein einziges Byte auf dem Stack verbrauchen, bzw. 1 Byte auf dem Heap und 8 Byte auf dem Stack bei x86, ... oooooder, wenn man es wie in Java mit eigenem Allokator nachbaut 1 Byte auf dem Heap und nur 1, 2, 3, oder 4 Byte auf dem Stack.

Aber in 99% aller Fälle muss man sich bei Kapselung in Kombination mit OOP um solche Dinge keine Gedanken machen. (Außer beim Aligning ... damit kommt man tatsächlich hin und wieder in Berührung.)

Alles in allem: OOP und Kapselung haben keine nennenswerten Nachteile. Und wenn man tatsächlich an Grenzen stoßen sollte, gibt es immer Mittel und Wege, diese zu umschiffen.

...zur Antwort
Weitere Inhalte können nur Nutzer sehen, die bei uns eingeloggt sind.