Sleep / Pause mit C++ codieren

Schnelle objektorientierte, kompilierende Programmiersprache.
elec
Beiträge: 19
Registriert: Di Jul 19, 2022 2:16 pm

Sleep / Pause mit C++ codieren

Beitrag von elec » Mo Jul 25, 2022 3:27 pm

Da bin ich schon wieder. ;-)

Unser Dozent hat eher erfolglos versucht, spontan eine Pausen-Funktion in einen Programm zu benutzten. Auch bei meinem letzten Versuch war das Ergebnis nicht das erwartete.

Anlass ist eine simple Funktion gewesen, die Zufallszahlen erzeugt. Meine Version sieht so aus:

Code: Alles auswählen

#include <iostream>
#include <ctime>

using namespace std;

int getRandom_10_100() {
  time_t now;
  srand((unsigned) time(&now));
  return 10 + rand() % 90;
}

int getRandom(int lower, int upper) {
  srand(time(nullptr));
  return lower + rand() % (upper - lower);

}

int main() {
  cout << getRandom_10_100() << " ";
}
Damit man wirklich sieht, dass sich durch srand() verschiedene Zahlen ergeben, habe ich schnell ein Bash-Script geschrieben:

Code: Alles auswählen

#! /bin/bash

for i in $(seq 160);
do
  ./zufall_03;
  sleep 1;
done
echo
Das Ergebnis ist wie erwartet:

Code: Alles auswählen

…@bodhi-desktop:~/cplusplus/2022-07-25$ ./repeat
36 95 52 79 79 56 82 89 88 12 92 37 98 31 90 82 16 28 40 29 70 82 83 12 49 48 59 90 63 52 14 47 59 45 87 19 50 21 49 72 17 13 71 12 73 67 56 93 17 26 91 23 41 58 27 94 18 23 37 36 13 87 89 34 27 79 97 28 45 41 20 86 73 92 10 76 27 74 38 68 99 14 27 65 40 66 56 91 69 83 49 73 71 25 86 31 94 27 34 62 68 22 71 30 49 62 79 99 62 92 90 47 41 48 68 41 18 76 80 83 22 76 51 41 29 74 76 28 22 76 96 42 28 68 17 74 68 73 62 70 71 24 99 57 68 12 40 98 60 45 25 59 42 74 66 91 70 46 45 30
Der Dozent wollte das dann mit C++ machen, klappte auf die Schnelle nicht.

Ich habe dann unter anderem das Folgende ausprobiert:

Code: Alles auswählen

#include <iostream>
#include <ctime>
#include <chrono>
#include <thread>

using namespace std;

int getRandom_10_100() {
  time_t now;
  srand((unsigned) time(&now));
  return 10 + rand() % 90;
}

int getRandom(int lower, int upper) {
  std::chrono::milliseconds dura( 1000 );
  std::this_thread::sleep_for( dura );

  srand(time(nullptr));
  return lower + rand() % (upper - lower);

}

int main() {
  for (unsigned int i=0; i < 50; i++)
  {
    cout << getRandom_10_100() << " ";
  }
}
Ergebnis nicht, was ich beabsichtigt habe.

Wie würde man in C++ solch eine Pause codieren, es geht ja darum, dass ich als "Saat", als Startwert für die Funktion rand() die Systemzeit benutzt habe und diese Zeit sich von einem zum anderen Aufruf geändert haben muss.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Sleep / Pause mit C++ codieren

Beitrag von Xin » Mo Jul 25, 2022 3:43 pm

Sieht doch gut aus. :-)

Um die Frage zu beantworten, die man sich stellen sollte: Man initialisiert den Zufallsgenerator einmalig. srand dient dazu, Zufallszahlen reproduzierbar zu machen. Da Dein Programm so schnell abläuft, wird auf Deinem Computer vermutlich zu wenig Zeit vergehen, als dass sich die Zeit relevant ändert. Entsprechend reproduziert sich die Zufallszahl laufend - Du bekommst also 50mal die gleiche Zufallszahl, nehme ich an?

Also srand einmal in main aufrufen und nicht in den getRandom Funktionen.

Ich weiß ja nicht, welches Ergebnis Du erwartet hast, aber ich könnte mir vorstellen, dass wenn Du getRandom ändest, aber nicht aufrufst, dass sich dann Deine Erwartungen mehr verändert haben, als das Programm?

Mir drängt sich eine Frage auf... was für ein Problem hat Dein Dozent damit?
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

elec
Beiträge: 19
Registriert: Di Jul 19, 2022 2:16 pm

Re: Sleep / Pause mit C++ codieren

Beitrag von elec » Di Jul 26, 2022 9:22 am

Xin hat geschrieben:
Mo Jul 25, 2022 3:43 pm
Sieht doch gut aus. :-)

Um die Frage zu beantworten, die man sich stellen sollte: Man initialisiert den Zufallsgenerator einmalig. srand dient dazu, Zufallszahlen reproduzierbar zu machen. Da Dein Programm so schnell abläuft, wird auf Deinem Computer vermutlich zu wenig Zeit vergehen, als dass sich die Zeit relevant ändert. Entsprechend reproduziert sich die Zufallszahl laufend - Du bekommst also 50mal die gleiche Zufallszahl, nehme ich an?
Das ist auch meine Analyse. Der Dozent wollte wohl demonstrieren, dass man mit Hilfe von srand() wechselnde Zufallszahlen generieren kann, auch innerhalb eines Programms. Als das in einer Schleife nicht klappte, habe ich, da ich es schon versucht hatte, genau die selbe Erklärung angeboten, die Du gibst, außerdem hatte ich schon das obige Bash-Script geschrieben, welches mit einer Pause von je einer Sekunde das C++Programm mehrfach aufruft, welches eine Zufallszahl ausgibt. Damit war eigentlich demonstriert, dass man durch rand() in Verbindung mit der Initialisierung durch srand() je Aufruf unterschiedliche Zufallszahlen generieren kann.

Das ist übrigens der Textabschnitt aus einer morgens übergebenen Word-Datei, auf den meine Beschäftigung mit rand() zurückgeht:
In einer Word-Datei hat geschrieben: AUSGEWÄHLTE THEMEN:

• Zufallszahlen generieren.
• Mit Vector arbeiten

Eine aus der C-Bibliothek übernommene Funktion (Header-Datei: cstdlib) - rand() und eine Konstante RAND_MAX werden gebraucht für das Generieren von Zufallszahlen. Der Wert von RAND_MAX ist implementierungsabhängig. Der Wert darf aber nicht 32767 überschreiten. die Funktion rand() liefert eine ganze Zahl zwischen 0 und RAND_MAX (0 und RAND_MAX inklusiv). Diese Zahl ist pseudozufällig. Das Einbinden der Header-Datei ist für die Nutzung der Funktionalitäten aus cstdlib optional.
Wir sollten uns selbständig damit besser vertraut machen.
Xin hat geschrieben:
Mo Jul 25, 2022 3:43 pm
[Das Programm] Sieht doch gut aus. :-)
Danke, ich hatte mich im Web umgeguckt:
Xin hat geschrieben:
Mo Jul 25, 2022 3:43 pm
Um die Frage zu beantworten, die man sich stellen sollte: Man initialisiert den Zufallsgenerator einmalig. srand dient dazu, Zufallszahlen reproduzierbar zu machen.
Also srand einmal in main aufrufen und nicht in den getRandom Funktionen.
Genau das ist eine der Fragen, kann man innerhalb eines Programms srand() mehrfach aufrufen und vor allem ändert sich dadurch etwas? Wenn man dies machen wollte, wie könnte man eine Verzögerung einbauen, die sicherstellt, dass bei jedem neuen Aufruf von srand() ein anderer, neuer Zeitwert als Startwert für rand() gesetzt wird?

Geht offenbar. Ich habe eben noch eine Variante geschrieben "zufall_05.cpp":

Code: Alles auswählen

#include <iostream>
#include <ctime>
#include <chrono>
#include <thread>

using namespace std;

int getRandom(int lower, int upper) {
  return lower + rand() % (upper - lower);
}

int main() {

  srand((unsigned) time(NULL));
  cout << getRandom(10, 100) << " ";

  std::chrono::milliseconds dura( 1000 );
  std::this_thread::sleep_for( dura );
  
  srand((unsigned) time(NULL));
  cout << getRandom(10, 100) << " ";

  cout << endl;
}
Xin hat geschrieben:
Mo Jul 25, 2022 3:43 pm
Ich weiß ja nicht, welches Ergebnis Du erwartet hast, aber ich könnte mir vorstellen, dass wenn Du getRandom ändest, aber nicht aufrufst, dass sich dann Deine Erwartungen mehr verändert haben, als das Programm?
Nee, meine Erwartung hatte sich nicht geändert, der Dozent hatte uns die Aufgabe gestellt, erstens eine Funktion zu definieren, die eine Zufallszahl zwischen 10 und 100 generiert, und zweitens eine, die Zufallszahlen aus einem beliebigen Intervall generiert, also eine Generalisierung der ersten Funktion. Ich hatte keine Lust einen Aufruf für die zweite Funktion zu schreiben, weil mir völlig klar ist, was dabei rauskommt.
Xin hat geschrieben:
Mo Jul 25, 2022 3:43 pm
Mir drängt sich eine Frage auf... was für ein Problem hat Dein Dozent damit?
Das Problem war, dass trotz der Sleep-Funktion immer noch die selben Zahlen herauskamen, ich würde jetzt sagen, weil er den Intervall für sleep_for() zu klein gewählt hatte.
Zuletzt geändert von elec am Di Jul 26, 2022 10:10 am, insgesamt 1-mal geändert.

elec
Beiträge: 19
Registriert: Di Jul 19, 2022 2:16 pm

Re: Sleep / Pause mit C++ codieren

Beitrag von elec » Di Jul 26, 2022 9:39 am

Hier als Anhang für "all jene,die nach mir kommen und die Fackel weitertragen" ;-) ein Auszug aus einem C++Buch über Zufallszahlengenerierung.

Ich bitte zu beachten, dass dies kein gemeinfreier Text ist, den man kommerziell verwursten kann. Ich habe das aus einem Buch von Dietmar Herrmann und fand die Erklärungen recht hilfreich. Den Text habe ich mit LibreOffice neu formatiert und in eine PDF exportiert.

Möge die Compilermacht mit Euch sein, junge Padawans! (Mancher wird sich angesichts der Tatsache, dass ich stocknüchtern bin, fragen, wie ich drauf bin, wenn ich etwas getrunken habe. Alkohol verändert mich nur gering, ich bin naturtrunken.)


Edit by Xin: Ich habe den Anhang mal gelöscht, weil der Text aus einem Buch abgeschrieben wurde. Das sah mir informationstechnisch jetzt nicht so schützenswert aus, aber es gibt halt offensichtlich jemand, der auf die zwei Seiten ein Copyright hat und wir sind's nicht. Daher...
Für solche Texte muss man leider eigene Worte finden, einfach abschreiben geht leider nicht.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Sleep / Pause mit C++ codieren

Beitrag von Xin » Di Jul 26, 2022 9:57 am

elec hat geschrieben:
Di Jul 26, 2022 9:22 am
Genau das ist eine der Fragen, kann man innerhalb eines Programms srand() mehrfach aufrufen und vor allem ändert sich dadurch etwas? Wenn man dies machen wollte, wie könnte man eine Verzögerung einbauen, die sicherstellt, dass bei jedem neuen Aufruf von srand() ein anderer, neuer Zeitwert als Startwert für rand() gesetzt wird?
Man kann, aber warum sollte man? Es dient der Initialisierung von Zufallswerten... rand() liefert ab da beliebig viele Zufallszahlen.

Es ergibt keinen Sinn, eine Problemlösung für neue Initiationswerte für srand zu sichern, wenn das Problem besser gelöst ist, in dem man srand nur einmal aufruft. ^^
elec hat geschrieben:
Di Jul 26, 2022 9:22 am
Geht offenbar. Ich habe eben noch eine Variante geschrieben "zufall_05.cpp":
Natürlich geht das, Du kannst auch einfach ein Salt definieren oder ab da srand mit einer Zufallszahl aufrufen.
Man initialisiert srand häufig mit time(), weil man ja schlecht vorhersagen kann, wann das Programm gestartet wird und das Programm in der Regel nicht zweimal zum gleichen Zeitpunkt gestartet wird. Die aktuelle Zeit ist also relativ zufällig, aber eben auch nur ein Wert. Und mit dem initialisiert man dann den Zufallsgenerator.

Es besteht aber a) kein Grund ihn mehrfach zu initialisieren und b) das Programm dafür aufzuhalten.
elec hat geschrieben:
Di Jul 26, 2022 9:22 am
Xin hat geschrieben:
Mo Jul 25, 2022 3:43 pm
Mir drängt sich eine Frage auf... was für ein Problem hat Dein Dozent damit?
Das Problem war, dass trotz der Sleep-Fumnktion immer noch gleiche Zahlen rauskamen, ich würde jetzt sagen, weil er den Intervall für sleep_for() zu klein gewählt hatte.
time() liefert eine sekundengenaue Zeit.

Fähige C++-Entwickler sind in der Regel keine Trainer. :-D
Ich kann Dir leider Corona-bedingt keine C++-Usertreffen empfehlen, aber halt das mal im Auge. Ich vermute dieses Jahr wird da aber nichts mehr passieren.

Der Anhang war gut gemeint, aber ich musste ihn leider löschen - siehe oben.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

elec
Beiträge: 19
Registriert: Di Jul 19, 2022 2:16 pm

Re: Sleep / Pause mit C++ codieren

Beitrag von elec » Di Jul 26, 2022 10:05 am

Xin hat geschrieben:
Di Jul 26, 2022 9:57 am
Der Anhang war gut gemeint, aber ich musste ihn leider löschen - siehe oben.
Ja, ist mir eigentlich klar.

elec
Beiträge: 19
Registriert: Di Jul 19, 2022 2:16 pm

Re: Sleep / Pause mit C++ codieren

Beitrag von elec » Di Jul 26, 2022 10:07 am

Xin hat geschrieben:
Di Jul 26, 2022 9:57 am
elec hat geschrieben:
Di Jul 26, 2022 9:22 am
Genau das ist eine der Fragen, kann man innerhalb eines Programms srand() mehrfach aufrufen und vor allem ändert sich dadurch etwas? Wenn man dies machen wollte, wie könnte man eine Verzögerung einbauen, die sicherstellt, dass bei jedem neuen Aufruf von srand() ein anderer, neuer Zeitwert als Startwert für rand() gesetzt wird?
Man kann, aber warum sollte man? Es dient der Initialisierung von Zufallswerten... rand() liefert ab da beliebig viele Zufallszahlen.
Irgendwie wahr. ;-)

elec
Beiträge: 19
Registriert: Di Jul 19, 2022 2:16 pm

OT: Dozenten und Kurse (was: Re: Sleep / Pause mit C++ codieren)

Beitrag von elec » Mi Jul 27, 2022 9:40 am

Xin hat geschrieben:
Di Jul 26, 2022 9:57 am
Fähige C++-Entwickler sind in der Regel keine Trainer. :-D
Der Dozent arbeitet offenbar nebenher als Entwickler -- oder anders ausgedrückt, er ist neben seiner sonstigen Arbeit auch unser Dozent.

Wie er den Kurs handhabt, möchte ich in einem öffentlichen Forum nicht ohne Weiteres darlegen, weil es teilweise recht ungewöhnlich ist. Ein Euphemismus.

Ein einziges harmloses Beispiel, will ich nennen: Am 4. Juli hatten wir einen internen Test. Die Schule verlangt alle 14 Tage eine "Klausur", einen internen Test oder eine Arbeitsprobe. Diese Klausur wurde nicht nur bisher nicht bewertet, sondern der Dozent hat sie nach der Klausur bisher auch mit keinem einzigen Wort wieder erwähnt. Am Freitag folgt wieder eine solche "Klausur".

Oder heute früh, Kursbeginn ist immer um 8 Uhr; um 8:31 eine Chat-Nachricht des Dozenten in Microsoft Teams: "Guten morgen, viel Spaß mit der ersten Meilenstein aus der Projektarbeit und bis naher." Der erste Meilenstein ist eine Aufgabenbeschreibung in einer Word-Datei, mit "nachher" ist ca. 13:30 Uhr gemeint, von dann bis Unterrichtsende um 16 Uhr wird er Sachen zu C++ erklären.

Ich versuche, aus den Gegebenheiten das Beste zu machen, ohne mich aufzuregen. Am 1. August beginnt für mich sowieso ein anderes Modul: CCNA mit dem Ziel der Zertifizierung.

PS: Mich für die Gruppe einzusetzen, dass sie etwa das ihnen zustehende Begleitbuch erhalten, das ich mir freilich besorgt habe und das jedem Kursteilnehmer zusteht, sind sogar schon bezahlt, kommt für mich nicht mehr in Frage, da ich schon am ersten Tag des C++-Moduls im Chat von einem anderen Teilnehmer rüde angegangen wurde. Ich war krank geschrieben und habe teilweise nur von Bett aus zugehört, um das mitzuteilen, hatte ich "afk" in den Chat geschrieben, dann wurde der Typ unverschämt, ich solle mir solche Mitteilungen sparen und auch, wenn ich mal einen IT-Witz in den Chat gepostet hatte, sei das kein Humor gewesen, sondern "TERROR" usw. usf.

Hintergrund: Bei der OCA-Zertifikatsprüfung am vorherigen Freitag hatte er mich 30 Minuten vor Prüfungsende dreimal aufgefordert ihm und den anderen bei den Fragen zu helfen, die sie noch nicht beantworten konnten ("Peter, bist du dabei?"), was ich abgelehnt habe, schon deswegen, weil ich genug damit zu tun hatte, meine eigenen Prüfungsfragen zu beantworten. Da ich ihm nicht helfen wollte, hat der junge Mann dann seine Prüfung so abgeschlossen, wie sie bis dahin war. Ergebnis: 24% (Klar, ich bin schuld.) Übrigens ist er allem Anschein nach einer jener Menschen, die uns in den letzten Jahren "geschenkt" wurden und die den Fachkräftemangel garantiert beheben werden. Er ist, eigener Aussage zufolge, übrigens auch sehr kreativ. Na dann!

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: OT: Dozenten und Kurse (was: Re: Sleep / Pause mit C++ codieren)

Beitrag von Xin » Mi Jul 27, 2022 11:00 am

elec hat geschrieben:
Mi Jul 27, 2022 9:40 am
Wie er den Kurs handhabt, möchte ich in einem öffentlichen Forum nicht ohne Weiteres darlegen, weil es teilweise recht ungewöhnlich ist. Ein Euphemismus.
Hahaha, es tut mir leid für Dich, aber ich musste bei der Wortwahl trotzdem lachen.
elec hat geschrieben:
Mi Jul 27, 2022 9:40 am
Oder heute früh, Kursbeginn ist immer um 8 Uhr; um 8:31 eine Chat-Nachricht des Dozenten in Microsoft Teams: "Guten morgen, viel Spaß mit der ersten Meilenstein aus der Projektarbeit und bis naher." Der erste Meilenstein ist eine Aufgabenbeschreibung in einer Word-Datei, mit "nachher" ist ca. 13:30 Uhr gemeint, von dann bis Unterrichtsende um 16 Uhr wird er Sachen zu C++ erklären.
Das Ganze ist eine Weiterbildung vom Jobcenter, nehme ich an?
Da sind immer die Spezialisten am Werk.

Ich erinnere mich an ein Bewerbungstraining, was ein Freund von mir ertragen musste. Er schrieb seine Bewerbungen, der Dozent korrigierte sie. Er wurde dann genötigt sich mit der Floskel "Mit freundlichen Grüsen" zu bewerben, weil "mf Grüßen" sei ja falsch. Grüselig.
elec hat geschrieben:
Mi Jul 27, 2022 9:40 am
Ich versuche, aus den Gegebenheiten das Beste zu machen, ohne mich aufzuregen. Am 1. August beginnt für mich sowieso ein anderes Modul: CCNA mit dem Ziel der Zertifizierung.

PS: Mich für die Gruppe einzusetzen, [...] kommt für mich nicht mehr in Frage, da ich schon am ersten Tag des C++-Moduls im Chat von einem anderen Teilnehmer rüde angegangen wurde. Ich war krank geschrieben [...] hatte ich "afk" in den Chat geschrieben, dann wurde der Typ unverschämt, ich solle mir solche Mitteilungen sparen [...]
Menschen sind schon witzig...
Allerdings verstehe ich auch, wenn Leute "afk" nicht verstehen. Ich weiß aber auch schon genug über die Leute, wenn sie statt einer Frage ein Statement posten.

Ich habe schon den Eindruck, dass die Menschen in den letzten Jahren sehr viel egozentrischer wurden. Aber versuch das auch als Vorteil für Dich zu verstehen.
Menschen, die sich gegenseitig zuarbeiten gehen aufeinander zu. Man findet sich, man hilft sich. Und...
elec hat geschrieben:
Mi Jul 27, 2022 9:40 am
Hintergrund: Bei der OCA-Zertifikatsprüfung ... Da ich ihm nicht helfen wollte, hat der junge Mann dann seine Prüfung so abgeschlossen, wie sie bis dahin war. Ergebnis: 24% (Klar, ich bin schuld.)
...man ist in der Regel kompetenter und damit erfolgreicher, wenn man Fragen vor den Prüfungen stellt.

Wenn Du in die IT-Branche rein willst, wirst Du feststellen, dass je höher Du kommst, die Leute ihre Egozentrik verlieren. Projekte werden so groß und komplex, dass ein Ego da nicht mehr funktioniert. Kompetente Leute entwickeln eine Fehlerkultur, rechnen Fehler mit ein, bauen Prozesse auf, die Fehler vermeiden, um qualitative Software zu schreiben. Ein Fehler ist hier keine verlorene Schlacht im Wettkampf das größere Alpha-Männchen zu sein, sondern ein Fallbeispiel, wo ein Prozess versagt hat und man anschließend analysiert, ob der Prozess verändert werden sollte oder diese Fehler nunmal einkalkuliert werden.

Man ist ein kleines Rad im Getriebe. Jedes Rad im Getriebe ist wichtig, jedes Rad ist qualifiziert, aber jeder weiß, dass die Maschine nur funktioniert, wenn alle miteinander und füreinander arbeiten. Damit sich mein Rädchen dreht, ist für mich wichtig, dass meine Kollegen gute Arbeit leisten und so arbeitet man sich zu.
Ich hab dieses Jahr beispielsweise eine Schulung über Code-Qualität gemacht und da war sehr viel positives Feedback, aber eben auch Feedback von "Fachkräften", die gegen meinen Rat Quellcode erzeugen, bei dem jetzt alle die Augen verdrehen.

Das ist in anderen Branchen auch so. Je kleiner die Leute, desto mehr stehen sie sich selbst im Weg. Im Studium habe ich auch irgendwann Leute von mir distanziert, die nur von mit mitgeschliffen werden wollten und Leute gefunden, mit denen man zusammen arbeiten konnte.
Im Studium gab's in einem Labor nur 6 Computer, man musste sich also zusammensetzen. Zur mir setzten sich die Spezialisten. Am Ende des Labors ging ich zum Prof und erklärte ihm, dass ich alleine arbeiten werde, weil ich mir das Elend nicht antun will. Ich wusste, dass die Beiden sich eigentlich immer nur einen Suchen, wo sie sich mitschleifen lassen und ich in der Gruppe entweder der einzige bin, der was tut oder - noch schlimmer - die Dinge beitragen werden, die meine Note gefährden. Also arbeite ich lieber gleich alleine.
Dann musste eine Ausarbeitung abgegeben werden, ich gab meine dem Prof, einer der beiden Spezialisten erklärte, dass die Arbeit ja von uns allen sei. Sie hatten nichts zum abgeben. Der Prof guckte ihn verdutzt an... und fragte, welcher Teil den von ihm sei. Der Student antwortete "Das Deckblatt". Eine Antwort, die nichtmals eine Lüge darstellte, da meine Arbeit kein Deckblatt hatte. Manche versuchen es mit Dreistigkeit, aber die bleiben in Berufen bei denen es um Kompetenz geht, auf der Strecke.

Es ist nicht Deine Aufgabe, diese Leute zu retten.
Wer sich Rat bei mir abholt, wird Rat bekommen, inkl. einer Einschätzung, wie wertvoll der Ratschlag ist. Ich weiß ja auch nicht alles.
Wer sich nicht dran hält, bekommt aber auch kein Mitleid, wenn er anschließend alles wieder abreißen und dem Vorgesetzten erklären muss, warum das Getriebe hakt und ich jetzt beispielsweise nicht weiterarbeiten kann, weil mir ein Kollege kommentarlos dazwischen gepfuscht hat.
elec hat geschrieben:
Mi Jul 27, 2022 9:40 am
Übrigens ist er allem Anschein nach einer jener Menschen, die uns in den letzten Jahren "geschenkt" wurden und die den Fachkräftemangel garantiert beheben werden. Er ist, eigener Aussage zufolge, übrigens auch sehr kreativ. Na dann!
Dunning-Krüger, kennste, kennste? ;-)
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

elec
Beiträge: 19
Registriert: Di Jul 19, 2022 2:16 pm

Re: OT: Dozenten und Kurse (was: Re: Sleep / Pause mit C++ codieren)

Beitrag von elec » Mi Jul 27, 2022 8:01 pm

Xin hat geschrieben:
Mi Jul 27, 2022 11:00 am
[…] Ein Fehler ist hier keine verlorene Schlacht im Wettkampf das größere Alpha-Männchen zu sein, sondern ein Fallbeispiel, wo ein Prozess versagt hat und man anschließend analysiert, ob der Prozess verändert werden sollte oder diese Fehler nunmal einkalkuliert werden.
Kann ich einigermaßen nachvollziehen. Vor einiger Zeit, es war wohl Ende der 1990er Jahre habe ich nicht kommerziell ein Programm geschrieben, vor allem, um meine Programmierfähigkeiten wach zu halten bzw. noch zu verbessern. Programmiert habe ich das in PowerBASIC, wie gesagt, ist PowerBASIC vereinfacht ausgedrückt eine Art fortentwickeltes TurboPascal mit BASIC-Bezeichnern.

Ich habe einige Monate daran gearbeitet, hatte aber nur extrem wenige Anwender. Weil ich im Usenet angemacht wurde, als ich auf mein kostenloses Programm hinwies, dies sei Spam, und übrigens würde er so etwas locker nebenbei in 6 Zeilen Code schreiben.

Ich hatte dann zwei Anwender, einer besonders aktiv. Der hat Fehler produziert, die ich nicht für möglich gehalten habe oder wenigstens nicht alle erwartet habe. Ich war darüber aber sehr froh, weil ich dadurch das Programm kugelsicher machen konnte. Am Ende hat dieser Anwender mich nach meiner Adresse gefragt und mir €50 geschickt, weil ich jede seiner Problemmeldungen ernst genommen und umgehend eine Verbesserung kodiert hatte.

Das Programm hieß HeaDel und war ein Textfilter für das Point-Programm (ein Mailer) Crosspoint. Es nahm überwiegend, aber nicht nur Änderungen am Mail-Header vor und war konfigurierbar, hatte zudem als Begleitung eine optional zu benutzende GUI und ein hypertextuelles Hilfeprogramm alles mit PowerBASIC bzw. Zusatzbibliotheken von PowerBASIC kodiert, und zwar jede Zeile von mir.

Ein Beispiel für ein Problem das mir der Anwender meldete, war, dass das Programm abbrach, weil eine Nachricht angeblich zu groß war. Erst einmal verblüffend, weil ich der Einfachheit halber eine Standardfunktion von PowerBASIC genutzt hatte: zeilenweises Lesen einer Datei. Die Ursache war drollig. Der Anwender empfing die eingehenden E-Mail-Sammeldateien auf einem Linux-System, wodurch das Zeilenende LF war, die PowerBASIC-Funktion erwartet jedoch, CRLF als Zeilendende. Als nun eine Mail eine sehr große base64-kodierte Videodatei als Anhang enthielt, war das zu viel. Also habe ich eine eigene Funktion zum zeilenweisen Lesen geschrieben und dadurch das Problem gefixt.

War ganz witzig. Auch war der Anwender sehr vorbildlich organisiert, Verteilung von Dateien verschiedener Funktion auf je ein eigenes Laufwerk, was allerdings für mich die Sache zusätzlich komplizierte. (Ich im ersten Augenblick: "Warum muss er das auch machen!?") Habe ich auch geregelt. Das Programm war am Ende rock solid und ziemlich schnell, wird aber heutzutage sehr wahrscheinlich von niemandem mehr benutzt.

Edit by Xin: End-Quote-Tag korrigiert

Antworten