Ja, gilt immer, auch wenn das Ergebnis dadurch nicht unbedingt schöner wird.

Da hier einige geschrieben haben, dass es mit Python nicht geht, der Gegenbeweis:

print('for:')
for i in range(3):
  print(i)

print('while:')
i = range(3).__iter__()
while True:
  try:
    print(i.__next__())
  except StopIteration:
    break

Wie du siehst, geht es also auch immer mit Iteratoren. (Und zwar auch bei Java, C#, C++, usw.)

Es gibt allerdings einen wichtigen gravierenden Unterschied, auf den noch keiner hingewiesen hat: Der Gültigkeitsbereich der Zählvariablen lässt sich bei for-Schleifen sehr komfortabel einschränken.

Will man hingegen die Zählvariable direkt nach der Schleife weiter nutzen, ist eine while-Schleife oft schlanker zu schreiben, als eine for-Schleife mit leerer Initialisierung:

for (int i = 0; i < 42; ++i) {
  foo(i);
}

int i = 0;
while (i < 42) {
  for(i);
  ++i;
}
bar(i);

Ansonsten eignen sich herkömmliche for-Schleifen, wenn man auf eine Art Zählvariable zugreifen will, while-Schleifen bei einfachen Bedingungen und erweiterte for-Schleifen für Iteratoren.

Aber Grundsätzlich gilt: Man kann jede davon in jede andere Form umwandeln, und das meiner Meinung nach Sprachübergreifend. (Zumindest ist mir jetzt keine einzige Sprache bekannt, bei der das nicht so wäre.)

Dass einige Schreibweisen kürzer, eleganter, schicker oder sauberer sind, hängt natürlich immer vom Kontext ab, aber das dürfte ja klar sein. :)

...zur Antwort

Dann lass dich einfach noch mal impfen.

Impfversager sind ja keine Seltenheit. Ich habe bei Röteln ganze fünf Anläufe gebraucht, um einen ausreichenden Antikörpertiter zu haben.

Von daher ... :)

...zur Antwort

Ich denke, es steht dir frei dein Studium abzubrechen. Niemand wird dich davon abhalten.

Und mit Verlaub, Leute die keine Argumente abwägen können, nicht fähig zu logischen Schlüssen sind, Probleme mit einfachster Stochastik haben, und ihr Bauchgefühl über alles stellen, sollten sich m. M. n. vom medizinischen Sektor fernhalten.

Es hat schon gute Gründe, warum man Ungeimpfte nicht in die Nähe von Patienten lässt.

Also sei nicht egoistisch und lass dich impfen oder such dir etwas anderes. So einfach ist das.

...zur Antwort

Ich möchte den anderen Antworten widersprechen: Es ist sehr wohl u. U. für Außenstehende möglich, auf den PHP-Quelltext zuzugreifen, auch wenn das kaum jemand weiß.

Ich komme nicht aus der Web-Developer Ecke, sondern bin eher im Bereich Security angesiedelt und es ist je nach Server-Konfiguration mehr oder weniger leicht, den Server zum Ausspucken des PHP-Quelltextes zu überreden.

Und zwar kann man gerade auf Servern mit PHP bzw. Apache relativ einfach Ressource-Exhaustions herbei führen, auf die Apache so reagiert, dass er eine angefragte PHP-Datei zwar wie gewohnt ausliefert, allerdings ohne vorher dieselbige zu interpretieren, bzw. durch das PHP-Modul zu jagen.

Das liegt daran, dass Apache über sehr viele Drittanbietermodule verfügt, die oft nicht den gleichen Qualitätsstandards genügen wie die Kernsoftware.

Allerdings ist selbst die Modulqualität bei Apache unglaublich hoch, sodass man hier auch als Angreifer kaum ansetzen kann.

Ganz anders hingegen sieht es bei PHP aus. Selbst wenn man die Kernsoftware als relativ stabil bezeichnen möchte, ist die Qualität der Drittanbietermodule gelinde gesagt "unter aller Sau".

Ich habe hier schon früher unter anderen Accounts darauf hingewiesen, aber besonders das Modul ImageMagick ist fast immer standardmäßig aktiviert und sofern die Seite irgendeine Form von Bildupload erlaubt, hat man als Angreifer eigentlich schon gewonnen.

Details nenne ich jetzt hier nicht, aber jeder darf gerne mal ImageMagick mit einem Fuzzer seiner Wahl testen ... dabei aber bitte einen Eimer bereit halten, falls man sich übergeben muss.

Die Leuchten von ImageMagick wissen nämlich um die Bugs und den katasttrophalen Zustand ihrer Software, aber haben sich bewusst dazu entschieden, nichts dagegen zu unternehmen.

Deshalb wurde das Projekt GraphicsMagick geforkt, was größtenteils kompatibel zu ImageMagick ist, allerdings Wert auf Sicherheit legt, und z. B. alle bekannten Speicherlecks gestopft hat.

Lange Rede kurzer Sinn: Wenn man weiß, wie es geht, kann man fast jeder Apache / PHP Kombination den serverseitigen Quelltext entlocken.

Und zum Schluss noch eine Anmerkung für die Kritiker, die das nicht glauben wollen: Ja, das ging auch schon hier bei GF. Der Server hat den gecachteen PHP-Quelltextt ausgegeben, der bereits zu großen Teilen zusammen gesetzt war, keine "include" oder "require_once" Anweisungen mehr enthielt, und deshalb weit über 100MB groß war.

Nichtsdesttotrotz waren darin teilweise Hashes, Salts, Datenbankserver-Adressen / -Ports / -User / -Passwörter, uvm. enthalten. (War so eine Art Memory-Dump vom PHP-Interpreter)

Desweiteren konnte man am PHP-Quelltext sehr gut den unfassbar schlechen Sttil der Entwickler sehen und wenn man gewollt hätte, sehr komfortabel nach vielen weiteren Sicherheitslücken suchen können.

Vor einiger Zeit wurde auf GF aber sowohl Front- als auch Backend komplett umgestellt, und ein Entwickler meinte mal zu mir, dass das wohl nicht mehr möglich sein sollte.

Ich werde so etwas natürlich nicht ungefragt ausprobierten und mich hüten, irgendetwas auch nur halb-legales auszuprobieren, aber ab einem gewissen Erfahrungslevel stolpert man hin und wieder ganz automatisch beim alltäglichen Benutzen einer Website über solch gravierende Sicherheitslücken.

Also: Quelltext auslesen ist grundsätzlich möglich. Insebesondere bei PHP, und zwar ohne irgendwelche Serverfehlkonfigurationen wie Directory-Listtings ausnutzen zu müssen. Während meiner Arbeit sehe ich das ständig und es ist wirklich erschreckend einfach. (entspr. Wissen vorausgesetzt)

Normalerweise soll das ja nicht gehen und es widerspricht dem Grundgedanken hinter einer serverseittigen Skriptsprache, aber in der Praxis geht es nun mal bei einem sehr großen Teil der Server. Ich hoffe, das beantwortet deine Frage so halbwegs.

Schönen Abend noch! ;)

...zur Antwort

Allein wenn du dir Notizen zum Gelernten machst, behältst du im Schnitt fünf (!) mal mehr von dem Stoff, als wenn du ihn nur liest bzw. im Unterricht zuhörst.

Diese Effizienzsteigerung um den Faktor fünf ist Lernpsychologisch sehr gut untersucht, und es gibt massenhaft Quellen der letzten Jahrzehnte dazu.

Im Gegensatz dazu gibt es viele Bücher zu Lerntechniken auf Amazon, die lieblos, unprofessionell und teilweise einfach falsch zusammen geschustert sind.

Es gibt einige gängige Techniken, mit deren Kombination im Zusammenhang mit Aufschreiben sein Lerntempo realistisch betrachtet durchaus vervielfachen kann.

Ich selbst habe Stenografie gelernt, damit ich in kürzerer Zeit mehr und vor allem schneller mitschreiben kann, aber das ist nur eine persönliche Liebhaberei.

An sich solltest du dich mal intensiver mit Lerntechniken befassen. Ich habe recht viele Bücher zu dem Thema gelesen, und die meisten sind leider recht schlecht bzw. unglaublich oberflächlich.

Dieses hier habe ich hingegen als ziemlich gut empfunden:

https://www.amazon.de/Lernen-lernen-Lernstrategien-wirkungsvoll-einsetzen/dp/3662488965

Das enthält extrem viele Verweise auf psychologische Studien, sehr viele Begründungen und Details. Ist für Grundschüler vielleicht etwas hochgestochen, aber so ab der 7ten Klasse sollte man sehr gut damit klar kommen und viel mitnehmen können.

Darin werden so ziemlich alle wichtigen Dinge wie Mnemo- und Loki-Techniken beschrieben, und viele Tipps gegeben. Findet man zwar alles auch in anderen Büchern, aber nicht in dieser hohen Qualität. Man merkt, dass das Buch nicht von einer Kinderbuchillustratorin oder einem Marketing-Schulungs-Futzi geschrieben wurde, sondern von Leuten, die sich wirklich auskennen.

Meine Antwort auf deine Frage: Ich lese sehr viele Fachbücher (keine Sachbücher, und keine Romane, sondern wirklich technisches Zeug) und war dabei früher immer sehr langsam.

Habe ca. 20 Seiten pro Tag geschafft und mäßig viel behalten.

Inzwischen kann ich probplemos 100 (bis 150) Seiten Fachliteratur pro Tag verschlingen und behalte merklich mehr als vorher.

Allerdings beschänke ich mich meistens bewusst auf nur 20 Seitten, und lese dafür extra langsam, mehrfach, mache Notizen und wende bestimmte Lerntechniken an.

Und jetzt kommt das, was dich am meistten interessieren wird: Den gesamten Inhalt der 20 Seiten Fachliteratur kann ich mir dadurch merken. Auch ziemlich unwichtige Infos in Nebensätzen.

Das braucht zwar Übung und ich habe zugegebenermaßen schon immer gerne und viel gelernt, aber 20 Seiten Fachliteratur nahezu wortwörtlich jeden Tag zu lernen UND auch nicht wieder zu vergessen, verdanke ich vermutlich nur einer ganzen Reihe von guten Lerntechniken.

Also dann, viel Spaß beim Lernen! :)

...zur Antwort

Nein, es ist einfacher geworden.

Ich arbeite seit den 90ern als Codeauditor und suche dabei Bugs und auch Sicherheitslücken.

Und meine Beobachtung ist, dass die Entwickler in letzter Zeit, zwar einen einfacheren Zugang zur Softwareentwicklung haben, dabei aber größtenteils auf einem sehr niedrigen Niveau bleiben.

Früher musste man sich intensiv mit Dingen auseinander setzen um sie zum laufen zu bekommen, heute klickt man eine Electron-App mit gefühlt einer Million Abhängigkeiten zusammen und nennt sich "Softwareentwickler".

Schlimm wird es, wenn die Electron-Klicker oder noch Schlimmer - Webdeveloper - umschulen und sich mit der gleichen Einstellung an eingebettete Systeme, Industrieanlagen, Krypto- oder Finanzsoftware wagen.

Alles in allem ist die Softwarequalität gesunken. Trotz TDD, traumhafter Refactoring Unterstützung moderner IDEs, Fuzzing, usw.

Leider nutzen die meisten Entwickler nicht die ganze Palette der ihnen zu Verfügung stehenden Werkzeuge. Die sind schon froh, wenn sie einen Debugger nutzen und Speicherlecks finden können.

Das gilt natürlich nicht für alle Programmierer, aber die meisten - vor allem von den jungen - produzieren grauenhaften Code, der vor Fehlern und Sicherheitslücken nur so strotzt.

Also arbeitslos werde ich die nächsten Jahrzehnte sicher nicht werden. :)

...zur Antwort

Wenn es "nur" die Zahlen von '0' bis '9' sind, dann einfach in einem Array durchzählen.

Falls es wesentlich mehr bzw. komplexere Zeichen sind, nimm eine Map als Zähler.

...zur Antwort
Warum dürfen Daten heutzutage nicht mehr Daten sein (OOP)?

Moin.

Im Studium stolpere ich immer wieder über Source Code, den ich unnötig finde. Dahitner soll das Geheimnisprinzip stecken, was an sich ja erst ein mal kein Problem ist. Wenn die Daten wirklich über eine Schnittstelle vom Programmierer zu Zwecken wie Input-Validierung oder dergleichen getrennt werden, halte ich das für angebracht. Ich sehe aber wie oft in den Vorlesungsbeispielen und sogar Klausuraufgaben, dass Source Code analog zu folgendem gut sein soll:

(Java)

public class Vec2 {
    private int x;
    private int y;
    public int getX() { return x; }
    public int getY() { return y; }
    public void setX(int x) { this.x = x; }
    public void setY(int y) { this.y = y; }
}

(C#)

public class Vec2 {
    private int x;
    public int X {
        get { return x; }
        set { x = value; }
    }
    public int Y { get; set; }
}

Da frage ich mich immer nur: Warum kann man hier nicht einfach öffentliche Variablen nutzen? Es ergibt keinen Sinn, hier durch Methoden unnötigen Laufzeit-Overhead hinzuzufügen. Man braucht diese Methoden nicht. Sie machen doch nur das, was man mit einer öffentlichen Variable selber tun würde. Und selbst, wenn sich das später ein mal ändern sollte, kann man die Methoden ja immer noch hinzufügen. Alles, was sich dadurch ändert, ist die Schnittstelle. Und seien wir mal ehrlich: So oft ändert sich so etwas nicht. Und insbesondere mit C#-Properties ändert sich an der Verwendung nichts. Wozu also dieser Unsinn?

Vielleicht hängt meine Verwirrung auch damit zusammen, dass ich als erste Programmiersprachen C und C++ gelernt habe. Dennoch möchte ich euch mal fragen: Könnt ihr mir erklären, wieso man das Geheimnisprinzip hier so strikt umsetzen sollte?

Gruß

...zum Beitrag

Selbst in deinem Beispiel mit dem Vektor halte ich eine ordentliche Kapselung mit privaten Datenmembern und öffentlichen Gettern / Settern / Properties für erstrebenswert.

Einen Laufzeitoverhead hat das Ganze übrigens kaum, bzw. im Falle von Properties gar nicht, da der JIT-Compiler das erkennt und direkt auf die Member zugreift.

Bei C++ hätte es auch keinen Laufzeitoverhead, da zur Kompiliertzeit einfach nur eine einzige Instruktion mit sttatischem Offset zum Member erzeugt werden würde.

Das Problem ist, dass sich Code viel mehr und öfter ändert, als du denkst. Und es ist absolut naheliegend, bzw. der nächste logische Schritt, ein Bounds-Checking, ein Logging, oder wasweißich einzubauen.

Wenn du also von vornherein auf Datenmember zugreifst, hast du dich allein dadurch schon mal ins Knie geschossen. (auch wenn es bei C# dank Properties einfacher ist, aber bei Java und C++ hättest du an diesem Punkt schon arge Probleme)

Außerdem ist dabei keine Datenkonsistenz mehr gegeben. Stell dir mal eine Klasse für die Dimensionen eines GUI-Fensters vor, die einfach nur die vorzeichenlosen Ganzzahlwerte "width" und "height" hat.

Wenn jetzt sicher gestellt werden soll, dass man das Fenster nicht auf 3x3 Pixel verkleinern können soll, und das Verhältnis nicht kleiner als 4:3 sein soll, aber trotzdem Breite und Höhe unabhängig von einander gesetzt werden sollen, dann wäre es enorm schwierig, fallls du mit öffentlichen Datenmembern angefangen hättest.

Außerdem: Wenn die gesamte API von deinem Projekt schön gekapselt ist, warum sollte man dann so eine unsauber wirkende Ausnahme einbauen, ohne einen Vorteil dadurch zu haben? Das ganze Projekt wird dadurch nur Inkonsistent, wenn jede Klasse nach einem anderen Stil aufgebaut ist.

Oder wenn du erlauben willst, den Datenmembern eine Gleitpunktzahl zuzuweisen ... die wird dann ohne explizite Behandlung in den überladenen Gettern / Settern / Properties nicht gerundet, sondern abgeschnitten! Eine Zuweeisung wie ...

floatVar = 56.789;
myVec.setX(floatVar);

... sieht dann zwar schick aus, enthält aber nicht den Wert, den man erwarten würde.

Es gibt zwar ganz selten wirklich Fälle, in denen ich die oben genannte Konsistenz aufweichen würde, aber dein Beispiel zählt nicht dazu.

Und mal davon abgesehen: Es ist nur ein Beispiel aus einer Lehrübung. Wenn du danach gehst, dann sind die meisten "Hello World" implementierung schlicht fehlerhaft. Von daher ... :)

...zur Antwort
Was ist "Multi Core" und wann macht es sinn?

Es heißt das es überhaupt nicht leicht ist ein Computer Spiel für mehrere Kerne zu unterstützen, (was die programmierung anbelangt). Zudem sagte man mir aber auch das es sich sogar nachteilig auswirken kann von der Performance, wenn man sein Spiel für Multi Threading auslegt. Aber was den nun?

Man sagte mir ebenso das, Windows automatisch mehr Kerne einem Task zuweist, sobald der benutzte CPU Kern von dem Task zu hoch ausgelastet ist. Aber wieso ist dann das Spiel VRChat z.b. so performance schwach bei jedem der es benutzt, wenn es auch ohne spezielle Multi Threading programmierung von alleine durch Windows von mehreren Kernen gebrauch nehmen müsste?

Ich selbst stehe an diesem problem. Zueinem finde ich keine gescheiden Tutorials, wie man überhaupt Multi Threading in sein Spiel einprogrammiert und das auch noch in C# Zudem sagt man mir das Windows Sowieso von mehreren Kernen automatisch gebrauch nimmt, wenn die Auslastung des einen Kernes zu hoch ist...

Aber irgendwie beißen sich diese Behauptungen vorallem mit dem Spiel VRChat was keine spezielle Multi Threading programmierung beinhaltet...

Wenn aber angeblich Windows von alleine einem Task mehr Kerne zuweist, wenn der eine Kern nicht ausreicht, wieso ist dann VRChat trozdem so perforamce schwach ohne eine spezielle Multi Threading programmierung ?

Weil ich möchte in Zukunft ebenfalls Leistungsstarke Spiele machen, doch ich habe keine Ahnung von Multi Threading, weiß aber das es eine Wichtige Rolle spiel bei der Performance seines Spieles!

...zum Beitrag

Kontextwechsel sind seeeehr aufwändig bzw. teuer und wenn du viel IPC in deiner Anwendung machst, dann frisst das den Performancegewinn durch mehrere Kerne vollständig auf.

Und dass Windows automatisch Multiprocessing bei linearer Software auf mehreren Kerne verteilt ist technisch unmöglich. Du hast da sicher etwas falsch verstanden.

...zur Antwort

Nein, kann man nicht sagen, weil es die bedeutung grundlegend ändern, bzw. negieren würde.

Wenn jemand in einen Honigtopf tappt, entspricht das der Intention des Betreibers.

Wenn jemand den Honigtopf hackt, dann nicht.

Fazit: Mächtig gewaltiger Unterschied, Egon! :)

...zur Antwort

Mit 14 GLAUBT man, eine Programmiersprache zu beherrschen, tut dies i. d. R. aber nicht.

Oberflächlich natürlich kein Problem, aber wirklich beherrschen ist was anderes, was die meisten erwachsenen Entwickler auch nicht mit zich Jahren Berufserfahrung packen.

Und ich sage das als jemand, der mit 8 angefangen hat, und seit 30 Jahren Software entwickelt und auf Sicherheitslücken bzw. allgemein auf Qualität und Bugs hin untersucht.

...zur Antwort

Weil der Compiler die Konkatenation mit dem primitiven int in ein Literal optimiert, das Selbe bei geboxten Integer aber nicht schafft.

Deshalb sind in ersterem Falle die Referenzen gleich, im Letzteren hingegen nicht.

Die Variable str1 wird also komplett wegoptimiert und durch eine Referenz auf den Literal zur Rechten ersetzt, was beim Vergleich also immer zwangsweise true ergeben wird.

str2 hingegen wird tatsächlich zur Laufzeit zusammengebaut und ist damit eine Referenz auf ein völlig anderes Objekt, weshalb hier ein Vergleich immer false liefern wird.

Tipp: Gewöhne dir an, mt einem Decompiler oder Disassembler umzugehen, dann stellen sich solche Fragen gar nicht erst. :)

...zur Antwort

Das ist genau eine einzige Zeile als Shellskript:

watch -tn 60 "wget -qO- 'https://heise.de/' | grep -ioF 'java' | wc -l"

Das zeigt dir an, wie oft das Wort "Java" auf der Heise-Startseite vorkommt, und aktualisiert diese Ausgabe alle 60 Sekunden.

Mit Ctrl-C beendest du das Ganze.

In anderen Skript- oder Programmiersprachen ist das Ganze nur unwesentlich komplizierter, vermutlich nur ein bisschen aufgeblasener, aber im Grunde genommen kannst du dir da noch alles mögliche drum herum bauen. (Fenser, Dateilogging, usw.)

Fazit: Eine sehr einfache Sache, die je nach verwendeter Programmiersprache zwischen einer und 5 Minuten Zeit fressen sollte. :)

...zur Antwort

Bei der MSDN Onlinedoku, oder mit dem Petzold.

...zur Antwort
Prüfungsaufgabe C++: Zufallszahlen?

Hallo,

kann mir bitte jemand erklären, wie man eine zufällige Frage mit bestimmter Schwierigkeit und bestimmten Antwortmöglichkeiten anzeigen kann?

Hier ist die Aufgabe, damit die Frage klar wird:

In einer Spielshow bekommt ein Kandidat Fragen gestellt, die er richtig beantworten muss. Schreiben Sie ein Programm, das ein solches Spiel durchführen kann. Benutzen Sie zum Speichern der Fragen und Antworten folgende Struktur:

struct data {
  char frage[2000];
  char antwort[4][100];
  int schwierigkeit;
  int id;
};

Aus dieser Struktur wird ein Feld fragen[1000] aufgebaut. Wenn weniger als 1000 Fragen enthalten sind, belegen Sie die Komponente id des ersten freien Elementes mit 0. Es gibt folgende vereinfachte Regeln:

  • Der Kandidat muss insgesamt 6 Fragen beantworten. Die Fragen haben 3 Schwierigkeitsstufen. Er bekommt also zuerst 2 Fragen der Stufe 1, dann 2 Fragen der Stufe 2 und zuletzt 2 Fragen der Stufe 3 gestellt.
  • Die Fragen werden zufällig aus einem Fragenpool ausgewählt.
  • Beim Stellen der Fragen sind die Antwortmöglichkeiten in zufälliger Reihenfolge anzuzeigen.
  • Fragen dürfen nicht doppelt gestellt werden.
  • Beantwortet der Kandidat eine Frage falsch, ist das Spiel zu Ende.
  • Der Fragenpool und die dazugehörigen Antwortmöglichkeiten sind der Datei data.txt zu entnehmen. Die jeweils erste Antwort ist die richtige Antwort. Jede Zeile der Datei hat folgenden Aufbau:
ID Frage Antwort Antwort Antwort Antwort Schwierigkeitsstufe

In der letzten Zeile der Datei steht eine 0, die das Ende der Datei markiert. Erstellen Sie eine zweite Variante des Programms, in der die ID nicht in der Datei enthalten ist.

...zum Beitrag

Und wo liegt jetzt genau dein Problem?

Ist doch alles klar beschrieben.

...zur Antwort

Weil leider sehr viele selbsternannte Feministen übertreiben und in die andere Richtung diskriminieren.

Ansonsten ist Feminismus natürlich eine wichtige und gute Sache, aber Idioten gibt es leider auf allen Seiten, zumal die dann meist am lautesten schreien, und den Vernünftigen damit in den Rücken fallen.

...zur Antwort

Ist alles absolut normal und gewöhnlich. Mach dir keinen Kopf. Verschwindet alles binnen der nächsten paar Tage.

...zur Antwort

Theoretisch ja.

Praktisch musst du darauf achten, nichts plattformabhängiges zu tun, wozu einfache Dinge wie Pfadverarbeitung zählt, aber auch JNI bzw. JNA Aufrufe.

Und die JVM muss natürlich kompatibel sein. Aber theoretisch ist genau das ja der Grundgedanke hinter Java, wenn auch in der Praxis nicht immer zu 100% umsetzbar.

...zur Antwort