Laden...
Avatar #avatar-2627.gif
herbivore myCSharp.de - Experte
freiberuflicher Informatiker Berlin Dabei seit 11.01.2005 49.485 Beiträge
Benutzerbeschreibung
Die Threads und Beiträge, die ich für besonders interessant halte, findet man durch Eingabe in die Forensuche von "1000 Worte" als Schlüsselworte und "herbivore" als Benutzernamen.

Forenbeiträge von herbivore Ingesamt 49.485 Beiträge

02.02.2021 - 17:36 Uhr

Hallo Abt,

ich war bisher immer in der Kategorie "Entwicklung" unterwegs, was beim wbb2 nur die jeweiligen Foren unterhalb angezeigt hat - und die Funktion gibts aktuell (noch) nicht.

ich glaube BhaaL meint nicht das Verstecken, sondern dass die Forenkategorien (z.B. Entwicklung, Knowledge Base, Gemeinschaft) früher klickbar waren, und dann eine Seite mit eben nur den Foren der jeweiligen Kategorie angezeigt wurde. Also wir die Forenübersicht, aber eben nur für die jeweilige Kategorie.

Das "Verstecken" von Bereichen haben nicht mal 1% der aktiven Benutzer verwendet. Daher ist das aktuell nicht drin.

Wenn das eine Prozent gerade die besonders aktiven Nutzer sind, ist auch ein Prozent ein relevanter Anteil, da es vermutlich auch nur 1% besonders aktive Benutzer gibt. Oder anderesherum: Es gibt Massen an Benutzern ganz ohne Beiträge (oder mit nur 1 oder 2), die den Prozentsatz bzw. die Aussagekraft einer Prozentangabe verwässern.

Ich kann ohne das Ausblenden leben, aber schön/angenehmer war es schon.

herbivore

31.01.2021 - 18:51 Uhr

Hallo Abt,

Gratulation an dich und alle, die bei der neuen Forensoftware mitentwickelt und geholfen haben!

Natürlich schwingt auch etwas Wehmut mit, dass die alte Forensoftware, in die ich so viele Features - wenn auch die meisten Quick&Drity - eingebaut hatte, nun in Rente ist. Natürlich kann ich die Notwendigkeit gänzlich nachvollziehen. Ich freue mich, dass viele von "meinen" Features in die neue Software übernommen wurden. Und das diese Features - so wie ich es in deinem Text verstanden habe - sogar der Grund für die Eigenentwicklung waren.

Neu ist, dass mehrere Anhänge an einen Forenpost gehängt werden können, was das Datenbank-Design der PHP-Variante nicht ermöglicht hatte: es war eine 1-1 Beziehung zwischen Beitrag und Anhang. Mir nicht klar, warum das damals so gewählt wurde.

Die Entwicklung von wbb2 war damals einfach noch nicht so weit. In einer wenig später erschienenen wbb2-Version waren auch mehrere Anhänge möglich. Leider waren da schon so viele eigene Features direkt in den wbb2-Code eingebaut (Quick&Dirty eben), dass ein Wechsel auf eine höhere wbb2-Version nicht mehr mit vertretbarem Aufwand möglich war. Ich hätte mir mehrere Anhänge auch schon seit langem gewünscht.

Ebenfalls anders ist, dass Beiträge in Zukunft nur noch innerhalb eines gewissen Zeitraums editieren werden können, der derzeit 30 Minuten beträgt.

Das wäre für mich und andere Poweruser, die auch nach Jahren noch ihre Beiträge zum Nutzen der Community aktualisieren, wie zuletzt in Links zu (früherem) OpenBook Visual C# in einem FAQ-Beitrag funktionieren nicht mehr (bzw. in den dort verlinkten Beiträgen) geschehen, richtig schlimm. Daher hoffe ich, dass es zumindest für Poweruser eine Ausnahme gibt. Diese gehen mit ihren zusätzlichen Rechten auch bisher schon sehr verantwortungsvoll um.

herbivore

28.01.2021 - 22:37 Uhr

Hallo zusammen,

daß es die Seite
>
nicht mehr (öffentlich) gibt

die Seite mag es nicht mehr geben, aber eine alte Version des Guides gibt es schon noch. myCSharp.de sei dank 😃

[Tutorial] Guide to C#

herbivore

26.01.2021 - 15:07 Uhr

Hallo Th69,

vielen Dank für den Hinweis. Ich habe die genannten Links in den genannten FAQ-Beiträgen aktualisiert.

herbivore

PS: Ich gebe zu, dass ich die Links nicht regelmäßig kontrolliere. Aber wenn broken links gemeldet werden - wie von dir und wozu ich auch andere ausdrücklich ermutige - dann repariere ich das eigentlich immer schnellstmöglich.

13.01.2021 - 07:02 Uhr

Hallo CoderboyPB,

du könntest die Anwendung als /target:winexe übersetzen. Das geht auch bei Consolen-Anwendungen.

herbivore

27.12.2020 - 19:59 Uhr

Hallo multitasker,

Kunde <-> Projektleiter <-> Teamleiter <-> Entwickler

hat schon was von Stille Post.

  • Direkte Kommunikation von Kunde zu Entwickler sollte auch üblich sein, da dadurch keine Informationen verloren gehen können und man häufig effizienter an's Ziel kommt.

Anderseits bedeutet es, dass der Kunde nur einen Ansprechpartner für Alles hat und das hat schon auch Vorteile. Vor allem, wenn es jemand ist, der die Sprache des Kunden spricht. Und das ist sicher nicht bei allen Entwicklern so. Daher bin ich da nicht ganz auf deine Seite. Und direkter Kundenkontakt ist sicher auch aus anderen Gründen nicht jeder(entwickler)manns Sache.

  • Der Teamleiter ist in vielen Fällen nur ein Proxy. Der Projektleiter ist die Person, die den Kundenkontakt hat. Verschiebt sich etwas von Kundenseite etc., dann fände ich es besser, wenn der Projektleiter direkt mit dem Entwickler spricht.

Auch hier gilt natürlich, dass der Projektleiter nur einen Ansprechpartner hat, was seine Vorteile hat. Hier sehe ich aber eher Möglichkeiten, denn das ist ja alles firmenintern. Und wenn der Projektleiter eh die Pläne macht, weiß er ja auch vermutlich wen er für was ansprechen müsste. Hier könnte man also eine (Stille Post-)Station einsparen.

  • Ist der Teamleiter krank, verhindert etc. dann ist die Kommunikation gestört, da der Teamleiter derjenige ist, über den die ganze Kommunikation in der Regel geht.

Das wäre dann nicht mehr der Fall. Allerdings könnten sich die Teamleiter dadurch auch übergangen oder abgewertet fühlen. Also überleg dir genau, wen du dir durch einen entsprechenden Vorschlag vielleicht zum Feind machst.

Ich finde einen Teamleiter für fünf Leute allerdings sogar eher ganz entbehrlich, gerade wenn die eigentliche Planung sowieso der Projektleiter macht. Bei 25 Leuten würde aus meiner Sicht ein Abteilungsleiter als (direkter) Personalverantwortlicher reichen. Aber das ist natürlich eine noch klarere Kampfansage gegen die Teamleiter.

herbivore

22.12.2020 - 15:08 Uhr

Hallo Paddy1997,

werde mir allerdings durch die Ausbildung Mittlere Reife anerkennen

weißt du denn, wie diese Anerkennung aussieht? Wie ein eigenständiges Zeugnis? Also eine Urkunde die für sich alleine aussagekräftig ist? Falls ja, würde ich nur dieses "Zeugnis" mitschicken. Denn es ist üblich, nur das (eine) Zeugnis des höchsten Schulabschlusses mitzuschicken.

Eine andere Lösung für das "Problem", wäre das Abitur nachzuholen. Wenn ich das richtig sehe, geht sowas in 1 1/2 Jahren. Dann ist klar, dass du nur das Abi-Zeugnis mitschicken musst und nichts von Haupt- oder Realschule. Außerdem stehen dir dadurch in Zukunft alle Wege offen. Und das Abi jetzt nachzuholen ist sicher leichter, als wenn du nach 10 Berufsjahren merkst, dass du es brauchst.

Klar, ist auch so nicht jedermanns Sache. Ist ja auch nur eine Erwägung.

herbivore

11.11.2020 - 05:57 Uhr

Hallo ayykaramba,

nein, auch heute würde wohl (wieder) das Binärsystem verwendet werden, weil es einfach technisch/elektronisch herausragende Vorteile hat. Und dann landet man wieder bei binärer Adressierung und damit - wie du das zutreffend beschrieben hast - wieder bei Speichergrößen, die ein Vielfaches von 1024 sind.

herbivore

19.08.2020 - 07:40 Uhr

Hallo Palladin007,

also ich kann http://www.albahari.com/threading/ auch nur sehr empfehlen. Ich glaube nicht, dass es was besseres als Buch gibt bzw. das ist ja eigentlich ein Buch/PDF.

Wobei ich so konkret an Code bzw. Konstrukten orientierte Themen eh nicht ohne PC lesen kann, da ich das Gelesene immer sofort in konkrete Beispielprogramme umsetzten und ausprobieren muss. Allerdings hilft Testen im klassischen Sinne bei Nebenläufigkeit nur sehr begrenzt. Da muss man dann besser einen bösartigen Scheduler spielen. Und das erfordert - zumindest bei mir - höchste Konzentration. Das kann ich eh nur am Schreibtisch - und da steht dann sowieso der PC. Womit sich der Kreis schließt.

Zum bösen Scheduler habe ich in SyncQueue <T> - Eine praktische Job-Queue einen - wie ich finde sehr lehrreichen - Fall angegeben, wo man den Fehler durch Testen wohl kaum gefunden hätte und in SyncQueue<T> erweitern: Enqueue blockiert bei voller Queue (in: "Das Programmier-Spiel") folgende Erläuterung geschrieben, wie man vorgehen kann/sollte, um solche Fälle aufzudecken:

[...] weil der Reiz dieser Aufgabe in meinen Augen in gerade im Knobeln und im Kniffligen liegt. Man muss das Ganze wirklich tief durchdenken. Man muss, wie in dem o.g. Link exemplarisch beschrieben, versuchen, einen möglichst bösartigen Benutzer und zusätzlich einen möglichst fiesen Scheduler zu spielen. Der Benutzer führt die Aufrufe in möglichst böser Reihenfolge in einer vertrackten Umgebung von Threads aus und der Scheduler zerhackt das Ganze noch in möglichst ungünstige Häppchen und wechselt zum jeweils unpassendsten Thread. Und dann muss immer noch alles stimmen.

Den bösen Benutzer kann man natürlich auch in Form von gemeinen Testprogrammen "spielen". Aber den bösen Scheduler kann man bei einem Test, bei dem man das Programm einfach laufen lässt, gar nicht oder nur sehr, sehr schwer simulieren. Das geht weit besser im Kopf. [...]

Wer selbst fiesen Scheduler spielen möchte, kann das - für mehrere andere Synchronisierungsaufgaben - auf der extrem coolen Seite
>
tun. Per Knopfdruck kann man dort bestimmen, welcher Thread die jeweils nächste Anweisung ausführen soll und man sieht quasi wie im Debugger sofort, wie sich daraufhin der Programmzustand ändert. Dabei ist es (Spiel-)Ziel, die (jeweils nicht korrekt implementierte) Synchronisierung auszutricksen oder das Programm in einen Ausnahmezustand zu versetzen.

In diesem Zitat "versteckt" sich der Link auf eine weitere Quelle, die ich - neben der Prosa - hier noch beisteuern wollte.

herbivore

PS: Damit man nicht jeden Anwendungscode so intensiv auf Probleme mit der Nebenläufigkeit untersuchen zu müssen, bietet es sich an, im Anwendungscode nicht selbst die Konstrukte (Semaphoren, Kritische Abschnitte, ...) der Nebenläufigkeit zu verwenden, sondern eben solche Klassen wie die SyncQueue, die einem die Details der Synchronisation abnehmen und bei denen man sehr wenig beachten muss (im Grunde genommen nur, dass der einstellende Thread nur bis zum Einstellen auf die gemeinsamen Daten zugreift und der herausholende erst ab/nach dem Herausholen.

31.07.2020 - 14:18 Uhr

Hallo Davidnh,

bei der Beschränkung von TextBox-Eingaben, kann man wirklich viel falsch machen.

Aus meiner Sicht, hast du den falschen Ansatz gewählt, weil du versuchst, unerwünschte Eingaben (=Tastendrücke) ganz weit vorne abzufangen. Besser ist es, abzuwarten, was die Eingaben für eine Textänderung bewirken und diese (TextChanged) dann zuzulassen oder eben nicht. Dann musst du z.B. auch das Clipboad nicht abklemmen.

Alles was man dazu wissen muss (auch die ganzen anderen Fallen, in die man hier tappen kann), steht in der [FAQ] In einer TextBox nur bestimmte Zeichen/Eingaben zulassen. Inkl. Beispielcode für eine sinnvolle Lösung.

herbivore

30.07.2020 - 13:45 Uhr

Hallo Abt,

es ist mehr als eine persönliche Meinung, wie der verlinkte Thread zeigt. Da hat man den unmittelbaren Vergleich anhand eines üblichen, praktischen und konkreten Beispiels.

Und ich habe im übrigen nicht gesagt, dass Regex per se leicht wartbar ist, sondern nur wartbarer, als wenn man einen Pattern ausprogrammiert, was hier als Alternative vorgeschlagen wurde.

Wenn man Regex durch einen (fertigen/konfigurierbaren) Parser ersetzen kann, mag es anders z.B. aussehen.

Und auch das alles ist mehr als persönliche Meinung, sondern langjährige praktische Erfahrung mit Regex und den Alternativen. Trotzdem darf natürlich jeder auch einfach nur eine Meinung äußern.

Dass eine Meinung weit verbreitet ist, sagt übrigens auch nicht viel. Erst recht nicht, wenn die gegenteilige Meinung weiter verbreitet ist. 😃

herbivore

28.07.2020 - 22:30 Uhr

Hallo MrSparkle,

Dazu brauchst du kein RegEx, das kannst du alles mit den Methoden der String-Klasse erledigen

es ist kein Argument, dass es auch anders geht. Meistens ist es mit Regex einfacher, verständlicher und sogar wartbarer, siehe z.B. Das Programmier-Spiel: nette Übungsaufgaben für zwischendurch und folgende.

Hallo PierreDole,

klar kann man die Cursor-Position auslesen. Wie hängt davon ab, welche GUI-Technologie du einsetzt. Und damit ist es dann keine Frage für "Rund um die Programmierung" (was im Grunde schon die Eingangsfrage gilt, denn Regex steht explizit bei "Basistechnologien"), sondern für das entsprechende GUI-(Unter-)Forum. Davon abgesehen ist das eigentlich gar keine Frage fürs Forum, denn das bekommst du anhand der Doku leicht selbst raus.

herbivore

03.06.2020 - 07:19 Uhr

Hallo FrankenDerStein,

obwohl ich bekennender Regex-Fan bin, muss auch ich dir abraten. Wenn überhaupt müsste man das in Schritten machen, also erst die Kommentare rausschmeißen, dann die Strings und dann die Ersetzung durchführen, nur ist dein Script dann schon verhunzt. Das nützt dir also nichts.

Wenn man versucht, einen Pattern zu bauen, der alles auf einen Rutsch erschlägt, wird das irrsinnig komplex. Da würde ich schon lange basteln müssen und das Ergebnis wäre unbefriedigend, da fehleranfällig und unwartbar. Als Anfänger wird das erst recht nichts.

Die Punkte 3 und 4 sind nicht das Problem (sogar ganz easy), sondern die Kombination von 1 und 2 mit 3 und 4. Schon 1 kombiniert mit 3 und 4 oder 2 kombiniert mit 3 und 4 wären umständlich, aber 1 und 2 kombiniert mit 3 und 4, unrealistisch.

Wenn nicht per Parser, dann müsste man das ausprogrammieren. Und das würde einigermaßen leicht gehen. Per Zustandsautomat einfach Zeichen per Zeichen durch die Eingabe laufen und dann weiß man mit ein wenigen Abfragen immer ganz genau, ob man gerade in einen Kommentar ist oder in einem String oder eben im eigentlichen Codebereich. Und auch hier ist es kein Problem zu wissen, ob man gerade an einer Wortgrenze ist. Und Groß- und Kleinschreibung ist auch kein Problem. Das würde also einigermaßen überschaubar gehen, ohne dass man sich in einen Parser einarbeiten muss.

herbivore

20.05.2020 - 22:31 Uhr

Hallo gfoidl, hallo lepton,

so behaupte ich jetzt einfach dass sich jedes Prograrmm mit jeder Programmiersprache umsetzen lässt

solange es um Berechenbarkeit geht, stimmt das exakt für jede Programmiersprache, die turing-vollständig ist. Und das sind so gut wie alle Programmiersprachen und alle relevanten sowieso.

Es gibt aber auch viele Probleme, bei denen es nicht im engeren Sinne um Brechenbarkeit geht, sondern vor allem um die Ansteuerung von Hardware (Grafische Ausgabe, Ausgabe auf Peripheriegeräten, Maschinensteuerung, ...) und da gibt es viele Programmiersprachen, die die entsprechenden Möglichkeiten nicht oder nur eingeschränkt bieten oder nur mit entsprechenden (in anderen Sprachen geschriebenen) Bibliotheken. In solchermaßen beschränkten Sprachen lassen sich dann bestimmte (Ansteuerungs-)Probleme (praktisch) gar nicht lösen. Ein grafisch ansprechendes 3D-Spiel in Prolog kann ich mir zum Beispiel nur schwer vorstellen.

herbivore

23.03.2020 - 18:16 Uhr

Hallo MrSparkle, hallo zusammen,

43.000, das ist doch mal eine Hausnummer. Und auch wenn ich nicht zu den Teilnehmern zählte, stützt die Zahl und auch die Themen-Beispiele genau meine Thesen von (ganz) oben. Und auch wenn sich dadurch nicht gleich die Welt ändert, kann man die Veranstaltung - trotz ihrer technischen Probleme aufgrund des Ansturms - doch getrost als Erfolg ansehen.

Das war offenkundig der größte Hackathon, der jemals weltweit durchgeführt wurde

herbivore

23.03.2020 - 13:08 Uhr

Hallo LaTino,

ich hatte nur gewarnt, dass man gerade bei politischen Themen leicht der Gefahr erliegen kann, es sich mit der Kritik zu leicht zu machen. Ich wollte damit nicht sagen, dass man gar nicht und gar nichts mehr kritisieren darf. Das darf man natürlich. Es handelte sich also keinesfalls um ein Totschlagargument.

herbivore

23.03.2020 - 12:31 Uhr

Hallo LaTino,

wenn du erwartest, dass ein einzelner Hackathon die Welt maßgeblich verändert, dann erwartest du einfach viel zu viel. Ein Hackathon kann (und soll) immer nur Keimzelle sein. Und das ist hier so wenig ausgeschlossen, wie bei anderen Hackathons. Das wird erst die Zeit zeigen.

Davon abgesehen legt die Politik momentan weit mehr Aktionismus an den Tag, als ich für erforderlich und angemessen halte. Da ist etwas, dass wie der Hackathon keine (negativen) Auswirkungen auf mich hat, schon mal eine erfreuliche Ausnahme.

Mir ist bloß nicht klar, was du mit "politikverschuldeter Probleme" meinst. Die Politik (nachträglich) zu kritisieren, ist leicht. Es besser zu machen (gemacht zu haben), schon sehr viel schwieriger.

herbivore

EDIT: Ihr hatte ja richtig verstanden, wie der Satz gemeint war, da er zweimal zitiert wurde. Ich hab ihn trotzdem noch korrigiert: Aus "(gemacht) zu machen" wurde "zu machen (gemacht zu haben)".

20.03.2020 - 14:04 Uhr

Hallo Automatinator,

... und es muss funktionieren.

in meinen Augen funktioniert eben noch nicht alles richtig, oder zumindest nur, wenn die Eingabedaten bestimmte Voraussetzungen erfüllen (und wenn nicht geht es eben echt schief).

Konkret erfüllt die Methode deine Forderung aus dem Beispiel nicht, die Leerzeichen um die Einzelwerte herum zu entfernen.

Entweder versteh ich das Dictonary nicht ...

Was nicht ist, kann ja noch werden 😃

Um Dein Beispiel zu nehmen

Velo=1, 2, 0, 1, 2

wird zu

myDictionary ["Velo"] [1]=1
myDictionary ["Velo"] [1]=2
myDictionary ["Velo"] [2]=0
myDictionary ["Velo"] [3]=1
myDictionary ["Velo"] [4]=2

Die Initialisierung des Arrays kommt genauso wie bei deinem Code noch dazu (per Rückgabewert von String.Split), nur wird es nicht an die Variable myStringArray zugewiesen, sondern an myDictionary ["Velo"]. Und myDictionary muss natürlich vorher einmal mit einem Dictionary initialisiert werden.

Das Dictionary hilft dir dabei, alle Wert-Arrays in einer Datenstruktur (eben dem Dictionary) zusammenzufassen. Du könntest dann z.B. eine Methode schreiben, die eine ganze Datei einliest und als Dictionary zurückliefert, statt nur jeweils eine Zeile der Datei als Array.

Das ist einfach nur praktisch, aber natürlich nicht zwingend erforderlich.

herbivore

20.03.2020 - 09:35 Uhr

Hallo T-Virus,

wenn du mit "eigenes Objekt" nicht auch gleich eine eigene Klasse meinst, stimme ich dir voll zu. Hier würde wohl am ehesten ein KeyValuePair <String, String[]> das passende "eigene Objekt" sein.

Und die kann man dann außerhalb der Methode in das schon vorgeschlagene Dictionary <String, String []> übertragen.

herbivore

20.03.2020 - 07:04 Uhr

Hallo chilic,

vorne weg: Ich weiß auch nur, was auf der Webseite steht.

Doch für mich ist der Fall ziemlich klar. Denn wir alle sind in der einen oder anderen Form von Einschränkungen betroffen. Es stellt sich also mindestens die Frage, wie man die Eindämmung des Virus möglichst gut und gleichzeitig mit möglichst wenigen Einschränkungen erreichen kann. Andersherum stellt sich die Frage, wie man trotz aller Einschränkungen das (gesellschaftliche oder zumindest wirtschaftliche) Leben aufrechterhalten kann. Da wir alle mit einer völlig neuen Situation konfrontiert sind, sind auch die Lösungen wohl völlig neue, zumindest aber die Fragestellungen.

Und gerade dafür ist doch ein Hackathon ideal, denn "Ziel eines Hackathons ist es, innerhalb der Dauer dieser Veranstaltung gemeinsam nützliche, kreative oder unterhaltsame Softwareprodukte herzustellen oder, allgemeiner, Lösungen für gegebene Probleme zu finden."

Wenn klar wäre, das ist die Fragestellungen sind und was die dazu passenden Lösungen, dann bräuchte man keinen Hackathon, sondern dann macht mam es eben oder gibt es in Auftrag. Fertig! Ist hier aber nicht so.

Also ich finde die Idee super. Und wenn ich mir auch nicht vorstellen kann, dass die Idee direkt von Kanzlerin oder Ministern gekommen ist (ich sage nur "Neuland", aber vielleicht tue ich ihnen auch unrecht), so finde ich es durchaus bemerkenswert, dass sie als "Die Bunderegierung" dem zumindest nicht im Weg gestanden haben.

Ums vielleicht etwas konkreter zu machen: Mir fällt viel ein was man alles "vs Virus" tun kann, das fängt bei Apps an, die medizinische Forscher unterstützen, z.B. beim Finden eines Impfstoffes; beim gesellschaftlichen Leben geht es um Apps, die ermöglichen, was wegen der Einschränkungen nicht möglich ist, z.B. streamt der RBB jetzt Veranstaltungen, die nicht mehr physisch besucht werden können, beim wirtschaftlichen Leben könnte es z.B. um Apps gehen, die helfen, Lieferketten aufrecht zu erhalten oder neue zu schaffen. Ich denke, ich könnte da jetzt noch eine halbe Stunde Brainsorming machen und mir würde ununterbrochen Passendes einfallen.

Ich habe versucht, alle deine Fragen zu beantworten. Ich hoffe, es ist mir gelungen. Ist es?

herbivore

BTW: Durch Gendersternchen wird ein Text doch gerade aufgewertet. 😃

19.03.2020 - 21:27 Uhr

Hallo Automatinator,

ich finde, da passen ein paar Sachen nicht zueinander.

Das Trimmen sollte am Schluss für alle Einzelwerte erfolgen. Jedenfalls nicht zwischen der Abfrage und dem Replace. Das Trim bedeutet ja, dass du mit überflüssigen Leerzeichen rechnest. Bei deiner momentanen Konstruktion würde StartsWith aber gerade nicht true liefern, wenn vor dem Keyword mindestens ein Leerzeichen steht.

Und was ist mit dem Gleichheitszeichen? Wenn sKeyWord nur das Wort ohne Gleichheitszeichen enthält (was nach dem Namen des Parameters zu vermuten ist), dann ist das Gleichheitszeichen in sTrimmedInputString weiterhin enthalten.

Außerdem ersetzt Replace alle Vorkommen, bei "a=Hallo" also auch das a von Hallo.

Davon abgesehen würde ich das KeyWord gar nicht als Parameter übergeben, sondern sehe es als Teil des Ergebnisses der Methode. Das KeyWord ist eben das, was vor dem (ersten) Gleichheitszeichen steht (natürlich wieder getrimmt). Es ist also eindeutig zu erkennen, auch wenn es nicht explizit übergeben wird.

So leicht wie die Aufgabe aussieht, ist sie nicht, wenn man alle denkbaren Fälle auch korrekt behandeln will.

herbivore

19.03.2020 - 14:45 Uhr

Hallo Automatinator,

die Darstellung mit dem Gleichheitszeichen heißt Key-Value-Pairs (Schlüssel-Wert-Paare), wie sie in den von Palladin007 genannten Initialisierungsdateien Verwendung finden.

Die Darstellung mit dem Komma heißt CSV, also Comma-separated values.

Für die Kombination aus beiden gibt es möglicherweise keinen Namen, jedenfalls ist mir keiner bekannt.

Entsprechend kenne ich keine Klassen, die das in dieser Kombination behandeln. Man könnte aber Klassen für INI-Dateien mit welchen für CSV kombinieren, um das Problem (in zwei direkt aufeinander folgenden Schritten) zu lösen.

Die Ergebnis-Datenstruktur wäre wohl besser ein Dictionary von Arrays (oder Listen) statt nur ein Array, also Dictionary <String, String []>.

herbivore

17.03.2020 - 08:16 Uhr

Hallo zusammen, hallo Unfug,

ich lese aus dem resignierten Unterton in "dass man dem Neuling nichts an die Hand geben kann außer: Lerne aus Erfahrungen", dass du Neulinge gerade nicht damit abspeisen willst, sondern nach einer echten Hilfe suchst, die du ihnen an die Hand geben kannst.

Ich bedauere ehrlich gesagt auch als Erfahrener immer wieder, wie viele Fälle man bei Unit-Tests berücksichtigten muss ... und dann immer noch nicht die volle Komplexität abgedeckt hat. Selbst bei einfachen Methoden übersteigt die Codelänge der Unit-Tests die der zu testenden Methode oft um ein Vielfaches.

Und dass wäre schon mal ein erster Rat, den man Anfängern auf den Weg geben kann: Wenn deine Unit-Tests kürzer sind, als der Code der Methode, dann fehlen vermutlich noch viele wichtige Fälle.

Außerdem muss man nachdrücklich klar machen, dass Unit-Tests nicht nur die Gutfälle berücksichtigen sollen, sondern besonders (fast schon vorrangig) auch die Schlecht- und Fehlerfälle.

Und dann finde ich es wichtig, die Haltung zu vermitteln, dass es bei Unit-Tests nicht darum geht, sich in dem Glauben zu bestätigen, dass man die Methode richtig programmiert hat. Sondern dass man ganz im Gegenteil alles daran setzen sollte, zu beweisen, dass in der Methode noch Fehler sind. Es ist ein bisschen so, wie wenn man gegen sich selber Schach spielt. Da geht man als Schwarz auch nicht davon aus, dass man als Weiß alles richtig gemacht hat und dagegen sowieso nicht anzukommen ist, sondern man setzt alles daran, die Lücken zu finden, die Weiß gelassen hat.

So sind auch Unit-Tests ein (ernsthaftes) Spiel gegen sich selber. Als Weiß versucht man die perfekte, fehlerfreie Methode zu schreiben und als Schwarz setzt man alles daran, die Schnitzer und Lücken zu finden, die Weiß doch übersehen oder gelassen hat. Und je mehr man davon findet, desto besser ist man. Nicht nur ein desto besserer Unit-Tester ist man, sondern ein desto besserer Programmierer ist man. Denn am Ende wird man danach gemessen, wie fehlerfrei der produktive Code ist, nicht danach, wie fehlerfrei eine Methode im ersten Anlauf (also vor den Unit-Tests) war.

Und man wird durch diese zwei Perspektiven sogar noch ein besserer Programmierer. Denn wenn man sich beim Programmieren bewusst ist, dass man sich selbst während der Unit-Tests auf eine wirklich harte Probe stellen wird, wird man schon beim Programmieren immer besser wissen, was man alles gleich berücksichtigen, einbauen und unterlassen muss, um in ersten Anlauf möglichst wenig Fehler zu machen.

herbivore

12.10.2019 - 06:03 Uhr

Hallo Shayliar,

die Lösung steht oben doch schon: Mit Application.Exit stößt du das Schließen gleich nochmal an.
Wenn das Form geschlossen werden soll, musst du gar nichts machen.
Wenn es offen bleiben soll, setzt du e.Cancel auf true.
Das ist alles.

Um diese Entscheidung zu treffen, sollte/muss die MessageBox mindestens zwei Button haben. Wie das zum Beispiel geht, steht auch oben, auch wenn ich eher Ja/Nein Buttons verwenden würde, oder noch besser eine MessageBox gleich ganz vermeiden würde, z.B. mit [Snippet] Nicht-modale Abfrage als Alternative für MessageBoxen oder allgemeiner mit Nenne deinen Fall, wo du denkst, ohne modalen Dialog geht es nicht, und ich nenne eine Alternative.

herbivore

PS: Solltest du das Application.Exit doch benötigen, darfst du die Aktionen im FormClosing-Event nur durchführen, wenn der CloseReason UserClosing ist. Wird auch schon oben erwähnt.

02.10.2019 - 18:29 Uhr

Hallo inflames2k, hallo zusammen,

noch ein (hoffentlich!?) letztes Wort zu den Wahrscheinlichkeiten. Dass ich die Möglichkeit selbst für sehr, sehr unwahrscheinlich halte, hatte ich von Anfang an geschrieben.

Wie wahrscheinlich wäre denn wohl dass die Zugangsdaten mehrerer Forenmitglieder im Umlauf wären?

Dass mehrere Benutzer betroffen waren, war mir bewusst. Und auch dass die Wahrscheinlichkeit des zeitgleichen Auftreten mehrerer sehr unwahrscheinlicher Ereignisse exorbitant gering ist, quasi nahezu ausgeschlossen. Das gilt aber nur, wenn die Ereignisse unabhängig voneinander sind. Das wäre der Fall, wenn einzelne Zugangsdaten z.B. durch Unachtsamkeit im jeweiligen Bekanntenkreis bekannt und dann auch tatsächlich noch benutzt werden. Bei einem gezielten Angriff (den ich hier ausdrücklich betont nicht sehe), wäre diese Unabhängigkeit nicht gegeben. Dann bliebe die Wahrscheinlichkeit einfach nur sehr gering, würde aber nicht dadurch geringer, dass das Phänomen bei mehreren Personen auftritt. Ich glaub da nicht dran, hatte es - wie gesagt - nur der Vollständigkeit halber geschrieben. Auch das jetzt nur der Vollständigkeit halber.

Ich stimme mit deiner Vermutung über die Ursache überein und sehe das Problem als gelöst an.

herbivore

02.10.2019 - 13:13 Uhr

Hallo zusammen,

wie schon weiter oben angeklungen, wird man auf dem bestehenden Gerät/Browser ausgeloggt, wenn man sich auf einem anderen Gerät/Browser einloggt. Das liegt daran, dass beim Einloggen eine long-time session id generiert, im Cookie (eben genau des aktuell verwendeten Browsers) gespeichert und ab da zur Authentifizierung des Benutzers verwendet wird. Diese ID ist prinzipiell unendlich lange gültig, aber mit einem neuen Einloggen wird eine neue ID generiert und dadurch verliert die bisherige ID ihre Gültigkeit.

Ich will nun wahrlich keine Panik verbreiten und halte die folgende Möglichkeit auch für sehr, sehr unwahrscheinlich. Trotzdem schreib ich es mal zur Vollständigkeit.

Wer auch immer sich wo neu einloggt, bewirkt also, dass der bisherige Login ungültig wird. "Wer auch immer" muss man nicht unbedingt selber sein. Wenn sich also jemand anderes im Besitz der Zugangsdaten befindet und sich damit einloggt, würde das ebenfalls bewirken, dass man selber ausgeloggt ist.

Wie gesagt, sehr unwahrscheinlich. Aber es schadet auch nicht, (vorsorglich) mal das Passwort zu ändern. Vor allem, wenn das aktuelle Passwort kurz oder aus anderen Gründen unsicher ist.

herbivore

PS: Aus dem zur Funktionsweise Gesagten ergibt sich eine prinzipielle, aber eher fummelige Möglichkeit, auf zwei (oder sogar mehr) Geräten dauerhaft eingeloggt zu bleiben, nämlich indem man sich auf einem Gerät/Browser einloggt und dann den resultierenden Cookie auf dem anderen Gerät/Browser passend implantiert. Als Cookies noch einzelne Textdateien waren, ging das sogar praktisch relativ einfach, aber seit Cookies in (lokalen) Datenbanken gespeichert werden, ist es umständlicher geworden.

07.08.2019 - 06:49 Uhr

Hallo Bradley,

ich hatte das oben mit dem Klickevent falsch verstanden.

Da in meinem Vorschlag der Linksklick für das Einstellen des Sliders belegt ist, wäre eine Möglichkeit, für das Umstellen zwischen absolut und relativ einen Rechtsklick zu verwenden. Jeder Rechtsklick schaltet dann direkt in den jeweils anderen Modus.

Sollte man den Rechtsklick später doch für ein Kontextmenü benötigen, kann man das Umstellen einfach ins Kontextmenü verlegt. Man verbaut sich also nichts.

Ich gebe zu, dass mein Vorschlag oben teilweise - und auch die Verwendung des Rechtsklicks für eine direkte Aktion - nicht den üblichen GUI-Standards entspricht. Allerdings gibt es auch in Windows eine Stelle, an der ein Rechtsklick eine direkte Aktion auslöst, nämlich im Kommandozeilenfenster (cmd.exe). Dort fügt ein Rechtsklick den Text aus der Zwischenablage unmittelbar ein (zumindest wenn in Eigenschaften/Optionen der QuickEdit-Modus aktiviert ist).

Obwohl die GUI-Standards von Windows im Allgemeinen gar nicht so schlecht sind, führen sie im Einzelfall zu unnötig umständlichen Bedienungsmustern, die man aber vermeiden kann, wenn man die GUI-Standards als Empfehlung sieht, die man in begründeten Fällen nicht sklavisch einhalten muss. Gerade wenn man viele der Progressbars umstellen will, ist man über jeden gesparten Klick und jede gesparte Mausbewegung froh.

herbivore

06.08.2019 - 14:35 Uhr

Hallo Bradley,

ein "normaler" Progressbar lässt sich auf verschiedene Arten bedienen (und das ist auch prinzipiell gut so).

Man kann den Slider ziehen. Oder man klickt rechts oder links des Sliders und der Slider bewegt sich dann in festgelegter Schrittweite zur entsprechenden Seite. Beides ist vergleichsweise umständlich.

Das Ziehen erfordert ein Drücken der Maustaste (genau) über dem (eher kleinen) Slider, ein Bewegen der Maus und ein Loslassen der Maus an der gewünschten Stelle. Leichter und schneller wäre ein Klicken direkt auf gewünschten Stelle, so dass der Balken direkt bis dort hinspringt. Wenn man versehentlich klickt, ist das kein Problem, wenn es ein Undo gibt.

Außerdem wäre die Bedienung per Tatstatur wünschenswert, z.B.
Pos1 = 0%
Ende = 100%
Page Up/Down oder Pfeil Hoch/Runter = große Schrittweite (z.B. 10%-Schritte)
Pfeil Rechts/Links = kleine Schrittweite (z.B. 1%-Schritte)

Damit könnte man dann sehr flott seine Einstellungen vornehmen.

herbivore

03.08.2019 - 05:58 Uhr

Hallo Olii,

sich in bestehende (Software-)Systeme einzuarbeiten, gehört zu dem schwierigsten, was es überhaupt gibt. Kein Wunder, dass das eine Herausforderung für dich ist. Aber deine Motivation und auch deine Herangehensweise scheinen mir zu stimmen. Also einfach weiter durchbeißen. Mit jedem Tag - von den üblichen Rückschlägen abgesehen - wirst du automatisch mehr und mehr von dem lernen, was du brauchst. Also Kopf hoch!

Momentan bist du damit sicher gut ausgelastet. Wenn du später an Systematik, Logik und Professionalität arbeiten willst, empfehle ich dir:
https://clean-code-developer.de/

herbivore

PS: Wenn so viele verschiedene Informationen auf einen einströmen, ist es durchaus üblich, dass man sich nicht alles auf Anhieb merken kann. Ich würde sogar so weit gehen, dass ich all das, was ich Grundstudium gelernt (oder besser: aufgenommen) hatte, erst im Hauptstudium wirklich verstanden habe (also mehrere Jahre später). Es ist also auch ganz normal, dass es lange dauert, bis man ein neues System umfassend verstanden hat.

Deshalb würde ich auch keinesfalls von irgendwelchen Defiziten reden, sondern nur von einer hohen Belastung, die jeder in deiner Situation empfinden würde. Also einfach am Ball bleiben, ruhig auch mehrfach das gleiche fragen und dann wird das schon.

22.07.2019 - 18:13 Uhr

Hallo Bradley,

Gratulation zu den Fortschritten, zu denen ich zwei Anmerkungen habe.

Ich weiß nicht, ob du es sowieso machen wolltest. Ich halte es jedenfalls für wichtig, im Grunde sogar unverzichtbar, dass die Schäden als Balken angezeigt werden. Jeder Balken ist dann so lang wie die Gesamttrefferpunkte, wo die verbliebenen Trefferpunkte grün sind und die "verbrauchten" rot. Dann kann man auf einen Blick erkennen, wo Handlungsbedarf besteht und muss nicht alle Zahlen einzeln lesen, verstehen und sogar im Kopf vergleichen.

Und in dem Video zeigst du die Hintergrundinformationen als Dialog. Das finde ich ganz gruselig, vor allem, wenn der Dialog modal ist. Ich hab mich schon verschiedentlich im Forum dazu ausgelassen, wie gruselig ich (modale) Dialoge finde und verschiedene bessere Alternativen beschrieben, um sie zu vermeiden. Im konkreten Fall fände ich es gut, wenn der Text in einer Kachel angezeigt werden würde, entweder eingeblendet rechts neben den Modulen oder rechts neben dem Schiff oder wenn der Platz da nicht reicht, als Überlagerung des Schiffes. Jedenfalls so, dass man das Fenster nicht zuixen muss, um den Text des nächsten Moduls anzuzeigen (und auch so, dass die Module nicht verdeckt werden). Denn nur so kann man einfach die I's der Module eins nach dem anderen durchklicken, ohne unnötige Mausbewegungen und unnötige Klicks. (Ich sagte ja oben schon, dass es mir wichtig ist, dass man mit möglichst wenig Klicks möglichst viel erreicht.

Ich würde mich freuen, wenn ich dich überzeugen konnte und du die Vorschläge aufgreifst.

herbivore

eins nach dem anderen durchklicken

PS: Noch schöner fände ich es, wenn in der Hintergrundinformationskachel die Pfeiltasten funktionieren würden, und man so (zu den Texten) von Modul zu Modul springen können. Überhaupt finde ich es wichtig, dass das Spiel (zumindest in den wesentlichen Aspekten) tastaturbedienbar ist.

11.07.2019 - 06:56 Uhr

Hallo Bradley,

das Ergebnis finde ich super! Sehr klar und ansprechend. Ich wünschte, ich könnte so pixeln.

Nur das rote Kreuz verstehe ich nicht für Wartung. Ich bringe es mit ausschließlich Gesundheit in Verbindung. Könntest du da nicht einen Roboter pixeln?

Und die Kiste für den Laderaum hat je nach Sichtweise etwas sehr futuritisches: die Zukunft liegt im nachwachsenden Rohstoff Holz. Ich fürchte nur, dass der durchschnittliche Benutzer die Innovation nicht erkennt und eher eine Kiste wie aus SciFi-Filmen erwarten würde.

Verstehe mich bitte nicht falsch. Das Ergebnis ist schon jetzt besser als ich es je könnte. Verstehe meine Rückmeldung bitte nur als Anregung. Ich hätte volles Verständnis, dass wenn du erstmal andere Punkte auf deiner Agenda abarbeiten willst, statt an bereits 99,9% Ergebnissen zu feilen.

herbivore

PS: Der "schmalbandsensor" bräuchte ein großes S am Anfang.

05.07.2019 - 06:22 Uhr

Hallo Bradley,

mir geht es wie bredator: Sehr gute Basis mit Raum für Detailverbesserungen.

Die farbliche Markierung der zugehörigen Schiffsteile finde ich wichtig für das Spielgefühl. Damit auch in den Spieldialogen etwas los ist. Noch besser wäre, wenn die Änderungen an den Einstellungen tatsächlich etwas am Schiff verändern, z.B. wenn man ein Waffen-Upgrade macht und dann die neueren, größeren Waffen erscheinen. Oder die Schilde dicker (intensiver, weniger durchsichtig, ...) werden, wenn man mehr Energie darauf gibt. Im Idealfall erkennt man alle Einstellungen direkt im Schiffsbild und muss gar nicht auf die Zahlenwerte unten schauen.

Ich würde die Tabs links erstmal lassen (und der Vorschlag mit den Icons ist gut). Ich glaube es ist leichter sie am Ende rauszuschmeißen, wenn man sie doch nicht braucht, als sie wieder einzubauen, wenn man sie am Ende doch haben will.

Vor allem finde ich eine Dreiteilung eines Fensters optisch interessanter, als eine Zweiteilung. Hier zu hätte ich zwei aufeinander aufbauende Vorschläge:

Hast du mal probiert, wie es aussieht, wenn du das Fenster so teilst:


+------+         +------+
| |____|  statt  +______+
| |    |         | |    |
+------+         +------+

Und diese Teilung möglicherweise sogar im ganzen Spiel durchhältst. Zumindest die linke Spalte im ganzen Spiel vorhanden ist und dort die jeweils benötigten Funktionen und Informationen angezeigt werden. Dies insbesondere vor dem Hintergrund, dass heutige Bildschirme viel breiter als hoch sind und dadurch die Proportionen des eigentlichen Spielfelds etwas angenehmer werden. Außerdem hat man dann eine vertraute Struktur die einen durch das ganze Spiel begleitet.

herbivore

01.07.2019 - 06:21 Uhr

Hallo Bradley,

das geht auf jeden Fall in die richtige Richtung.

Ich bin wie gesagt ein Fan davon, möglichst wenig klicken zu müssen(*). Vielleicht kannst du alle Einstellungen als Liste anzeigen (momentan sieht man eben nur die erste Zeile dieser Liste) und die Reiter (Offensiv, Defensiv, ...) nur dazu verwenden, um die zugehörigen Einstellungen in der Liste hervorzuheben bzw. zu den entsprechenden Einstellungen zu scrollen (statt wie bei Reitern üblich die gewünschte Seite aufzuschlagen und damit die bisherige Seite zu verdecken). Als ungeübter User, der den Überblick noch nicht hat, kann man die Reiter benutzen, um Orientierung zu bekommen. Als geübter User kann man ohne zusätzliche Klicks direkt die gewünschte Einstellung ändern und sieht außerdem alles (oder zumindest so viel wie möglich) auf einen Blick.

herbivore

(*) Damit meine ich, den gerade gewünschten Effekt mit möglichst wenig Klicks oder Tastendrücken erzielen zu können. Ich meine damit nicht, dass man möglichst wenig Einstellmöglichkeiten hat und deshalb wenig klicken muss. Also ruhig viel einstellen können, aber das möglichst direkt und effektiv.

29.06.2019 - 16:21 Uhr

Hallo Bradley,

das Schiff wie im letzten Bild oben zentriert anzuzeigen finde ich gut. Und genug Platz darunter scheint mir auch zu sein. Lange Texte als Option finde ich nicht schlecht, aber eigentlich sehe ich es wie KroaX, dass es wichtiger ist, die Einstellungen möglichst gut überschauen zu können. Und mit möglichst wenig Klicks (z.B. auf Reiter) alles direkt einstellen zu können.

Gut würde mir gefallen, wenn der Teil des Schiffs, der durch die Einstellung geändert wird, farblich hervorgehoben wird, z.B. das entsprechende Waffensystem oder der entsprechende Teil der Schilde oder ähnliches.

Ich denke, bei deinem grafischen Geschick, das sich schon in früheren Screenshots offenbart hat, bekommst du bestimmt etwas ansprechendes hin. Weiterhin viel Erfolg wünsche ich dir.

herbivore

10.05.2019 - 06:38 Uhr

Hallo ichmusshierweg,

ich finde es gut, dass du dir Gedanken machst, wie du für deine Arbeitgeber die Nachteile deines Weggangs reduzierst oder vermeidest. Auf der anderen Seite ist der Fall des Weggangs bereits im Arbeitsvertrag geregelt, vor allem ist schon im Arbeitsvertrag festgelegt, welche First hier angemessen ist, also einen fairen Ausgleich zwischen den Interessen von AN und AG schafft.

Ich denke, was immer die vereinbarte Frist ist, ist für beide Seiten ok. Falls nicht, Augen auf beim nächsten Vertragsabschluss. 😃 Das gilt für den AG natürlich genauso und liegt nicht in deiner Verantwortung.

Wenn es also nicht besondere Umstände gibt, sehe ich es nicht als erforderlich an, dem Arbeitgeber eine längere First anzubieten oder zuzugestehen. Und solche besondere Umstände sehe ich nicht, wenn du schreibst, dass "meine Aufgaben für jeden durchschnittlichen Programmierer zu bewältigen sein [sollten]".

Davon abgesehen ist es auch für den Arbeitgeber nicht unbedingt erstrebenswert, wenn du länger als nötig in gekündigter Stellung arbeitest. Ein damaliger Arbeitgeber von mir hatte mir eigennützige Motive unterstellt, als ich einen Monat länger bleiben wollte, um eine begonnene Aufgabe abzuschließen, dabei hatte diese Aufgabe einige Wichtigkeit für die Sicherheit der Firma.

Ich würde an deiner Stelle nicht auf "Vorrat" kündigen, sondern mich immer aus ungekündigter Stellung bewerben und erst kündigen, wenn ich einen neuen festen Vertrag in der Tasche habe. Außerdem würde ich darauf achten, dass der neue Arbeitgeber wirklich Bedarf und Interesse hat und einen nicht sofort am ersten Tag der Probezeit kündigt, weil er einen doch nicht braucht. Nur so kann man ein durchgängige Beschäftigung einigermaßen sicherstellen.

herbivore

20.04.2019 - 06:58 Uhr

Hallo chilic,

wenn du "Die Seite wurde entfernt ODER der Zugriff auf diese Seite wurde verweigert" bei einer Url siehst, die auf einen Thread oder Beitrag verweist (zu erkennen daran, dass die Url "thread.php" enthält), dann wurde die Seite in 99,9% der Fälle entfernt.

In myCSharp.de kann ein unangemeldeter Nutzer genau dieselben Foren sehen, wie jeder normaler (eingeloggter) Benutzer. Und umgekehrt natürlich auch. Das Einloggen ändert also nicht in Bezug auf die Rechte, Foren und Threads anzuzeigen. Und deshalb muss sich auch niemand registrieren, der nicht schreiben will, denn beim Lesen gibt es auch unangemeldet keine Einschränkungen.

Der einzige Grund, warum die Meldung auftreten könnte, weil du keine Rechte hast, wäre dass z.B. ein Moderator versehentlich einen Link auf einen Thread aus dem Team-Forum im öffentlichen Forum postest. Andersherum werden ("broken") Links, die öffentlich bekannt werden (z.B. durch die automatischen E-Mail-Benachrichtigungen), eben zu 99,9% auf gelöschte Beiträge verweisen.

Von diesen Foren zur internen Organisation/Abstimmung abgesehen, sind im myCSharp.de alle Foren öffentlich. Auf die internen Foren erhält man als normaler Benutzer aber auch dann keinen Zugang, wenn man sich einloggt. Mit anderen Worten: Wenn man die Meldung bei Threads oder Beiträgen sieht, wird sich daran nichts ändern, egal ob man sich einloggt (oder ausloggt).

In den allermeisten Fällen handelt es sich bei den gelöschten Beiträgen um SPAM, um einige Crossposts, oder um ähnlich grobe Verstöße gegen die Forenregeln. In ganz wenigen Fällen, weil der Autor des Beitrags es aus nachvollziehbaren Gründen wünscht. In jedem Fall immer um Beiträge, bei denen es im allgemeinen Interesse ist, wenn diese entfernt werden.

Wenn die o.g. Meldung bei anderen Urls kommt, z.B. bei den Einstellungen oder privaten Nachrichten, dann natürlich weil man nicht eingeloggt ist. Aber in Bezug auf Threads und Beiträge ändert Einloggen nichts.

herbivore

26.03.2019 - 21:19 Uhr

Hallo MrSparkle,

man kann die Stadt sogar ohne aktivierten (vermutlich sogar ohne installieren) Flash-Player voranbringen. Zählen tut schon das Anklicken der entsprechenden Urls aus der Box "Unsere MiniCity" (am besten auf den Link , dessen Zahl am stärksten orange-rot gefärbt ist, und auf "Einwohner" sonst).

herbivore

26.03.2019 - 10:09 Uhr

Hallo telfa,

diese Meldung verschwindet bei mir nach einem Update zuverlässig. Ich nutze Firefox.

Ich aktualisiere manuell, also per Download der aktuellsten Version von
ht****tp://fpdownload.macromedia.com/pub/flashplayer/latest/help/install_flash_player.exe
und anschließendem manuellen Start dieser Datei. Aktuell ist momentan 32.0.0.156 und damit geht es bei mir. Gerade probiert!

Die Stadt lebt und ist in letzter Zeit sogar wieder einige Plätze vorangekommen.

herbivore

28.02.2019 - 09:55 Uhr

Hallo Th69, hallo zusammen,

stimmt nicht mehr

ist korrigiert, siehe [FAQ] Wie finde ich den Einstieg in C#?

herbivore

PS: Hinweise auf Fehler in der FAQ gerne auch per PM. Hab den Thread hier nur durch Zufall gesehen.

21.02.2019 - 15:48 Uhr

Hallo sugar76,

die Klimmzüge mit dem vorherigen Ersetzen sind nicht nötig. Du kannst einfach eine (Regex-)Alternative verwenden. Also dein Pattern minimalinvasiv umgesetzt, würde dann zu:

:+((\w|\d|?:)+)

oder

:+([\w\d]|?:)+)

herbivore

PS: Ein passender Titel wäre gar nicht so schwer zu finden gewesen, z.B. "Regex: Wort aus Ziffern, Buchstaben und einer Zeichenfolge" oder noch kürzer "Regex: Wort aus Zeichen und Zeichenfolge"

27.12.2018 - 06:26 Uhr

Hallo theSoulT,

hier der Code:

daran sieht man aber leider immer noch nicht, wo das Image herkommt, und auch nicht, wie es geladen wird. Das ist doch das entscheidende. Nicht der Save-Code ist wichtig, sondern dass das Image korrekt geladen wurde. Und korrekt bedeutet, dass der Stream, aus dem es geladen wurde, während der gesamten Lebensdauer des Images offen bleibt, also insbesondere auch beim Save noch offen ist.

Wenn es nicht möglich ist, den originalen Stream offen zu halten, muss man die Bildddaten in einen MemoryStream umkopieren, das Image-Objekt aus dem MemoryStream erzeugen und diesen während der gesamten Lebensdauer des Image-Objekts offen halten. Das sollte aber eigentlich schon aus "Allgemeiner Fehler in der GDI+" beim Speichern eines Bildes [==> weil der Stream geschlossen wurde] klar geworden sein.

herbivore

25.12.2018 - 21:27 Uhr

Hallo theSoulT,

ich habs nicht noch mal probiert, aber laut Text verschwindet der Fehler, wenn man **fs**.Close() entfernt, nicht **ms**.Close ().

herbivore

11.12.2018 - 13:49 Uhr

Hallo Palin,

diese Meldung passt m.E. nicht so ganz in die Reihe.

Bei den vorangegangenen Meldungen ging es um (Halbjahres Feature-)Upgrades, hier um ein einzelnes (Fehlerkorrektur-)Update (KB). Ich hab mich oben gegen erzwungene Feature-Updates ausgesprochen, nicht aber gegen Sicherheits- und Fehlerkorrektur-Updates. Fehler in ersteren treffen Benutzer, denen es vor allem auf ein stabiles System ankommt, aus meiner Sicht unnötig. Wogegen Fehler in letzteren als kleineres Übel sowieso in einkalkuliert und in Kauf genommen werden müssen (im Vergleich dazu, gar keine Sicherheitsupdates einzuspielen).

Natürlich kann man sich wünschen, dass die Qualitätssicherung so gut ist, dass Fehler in (Sicherheits-)Updates nicht vorkommen oder zumindest nicht an die Breite Masse ausgerollt werden. Aber da wissen wir als Informatiker alle, dass man diese Ziel nur anstreben, aber - zumindest mit heutigen Mitteln - nicht 100%ig erreichen kann. Und gerade deshalb möchte ich ja keine (Features-)Updates aufgezwungen bekommen, die ich persönlich alle gar nicht brauche. Um eine unnötige Fehlerquelle auszuschließen. Zumal Fehler in Feature-Updates nach meiner Zählung häufiger sind und mehr Probleme verursachen, als Fehler in Sicherheitsupdates.

herbivore

11.12.2018 - 13:23 Uhr

Hallo csharper123,

Split brauchst du gar nicht. Das geht alles mit Regex alleine. Am besten mit Regex.Matche**s**.

Dafür baust du dir ein Regex, der aufs ganze Wort passt und nicht wie bei dir auf ein einzelnes Zeichen. Und an den Anfang dieses Patterns schreibst du einen negativen Lookbehind für den unerwünschten Punkt, der das Ende das vorangegangenen Satzes kennzeichnet. Dran denken, den Punkt zu escapen: "\.". Den Satzanfang am Anfang des Strings erkennst du an "^".

Für Lookarounds und den ganzen Rest siehe [Artikel] Regex-Tutorial (insbesondere Abschnitt "4.13 Positive und negative Lookarounds"). Wenn man Lookarounds erstmal verstanden hat, kann man damit viele nette Sachen machen.

Komfortabel testen kannst du mit On-the-fly Regex-Tester: Regex-Lab.

herbivore

PS: Wie emuuu schon sagte, wird man mit einer syntaktischen Analyse nie eine 100%ig korrekte Trennlinie ziehen können: z.B. Abkürzungen. In diesem selbstbezüglichen Beispiel steht vor dem Nomen "Abkürzungen" ein Punkt, der aber kein Satzende kennzeichnet. Außerdem werden Nomen, die tatsächlich an einem Satzanfang stehen, von der geplanten Methode (fälschlich) nicht als solche erkannt.

07.12.2018 - 20:38 Uhr

Hallo Palin,

nur als Hinweis: die Warnung ist nicht ganz neu und weiter oben wurden schon zwei ähnliche Meldungen verlinkt und in späteren Beiträgen auch diskutiert. Der Unterschied ist wohl, dass Microsoft damals zunächst Probleme aufgezeigt und Fragen aufgeworfen hatte und nun den Zeitpunkt fürs Handeln gekommen sieht.

herbivore

06.12.2018 - 21:36 Uhr

Hallo zusammen,

ich denke, "einfach" ist hier relativ zu verstehen. Im Video wurde gesagt, dass es vier Jahre dauert bis jemand (der vermutlich schon Informatiker ist oder zumindest eine entsprechende Vorbildung hat), auf den Stand kommt, solche Angriffe durchführen zu können. Und das vermutlich auch nicht als Einzelperson, sondern im erforderlichen institutionellen Rahmen.

Außerdem wird nicht alles angegriffen, das angegriffen werden kann, weil dazu auch die nötige a) kriminelle Energie oder aber b) der nötige Segen von Regierung oder ähnlichrangigien staatlichen Stellen erforderlich ist. Es gibt auch in der analogen Welt sicherheitsrelevante Einrichtungen, die relativ leicht angreifbar sind, aber nie ernsthaft angegriffen wurden.

Die Bedrohung ist m.E. damit - insbesondere auf b) bezogen - keine prinzipiell andere als bei anderen denkbaren militärischen Bedrohungen, sei es Atomwaffen, Drohnen, autonome Kampfsysteme usw. Oder etwas abgeschwächt: Bedrohung durch wirtschaftliche Sanktionen, die kleine Staaten auch richtig hart treffen können.

Und wie bei solchen latenten Gefahren generell üblich, bleibt einem kaum etwas anderes als die Standard-Lösung anzuwenden: sie zu verdrängen.

Klar, man kann versuchen, das eigene System abzusichern und durch das eigene Verhalten Gefahren zu minimieren (z.B. nicht auf Mail-Anhänge klicken), aber man hat keinen Einfluss darauf, ob die Top 300 Firmen angreifbar bleiben oder nicht (es sei denn, man ist da zufällig IT Sicherheitschef 😃 Und keinen Einfluss darauf, ob irgendwer auf die Idee kommt, die vorhandenen Angriffsmöglichkeiten in einen realen Angriff umzusetzen.

herbivore

PS: Davon abgesehen sehe ich hier auch eine gewisse Selbstregulierung. Wenn es nicht gerade zum Big Bang kommt, dann werden steigende Angriffszahlen auch zu steigendem Sicherheitsniveau führen. In dem Sinne glaube ich nicht, dass "die Hacker die Welt übernehmen", sondern dass es immer ein Wettlauf bleiben wird.

28.10.2018 - 06:16 Uhr

Hallo MrChangeLog,

naja, zumindest ist SO kein Diskussionsforum, sondern wenn überhaupt ein Lösungsforum. Das ergibt sich m.E. schon alleine daraus, dass die Beiträge nicht wie bei myCSharp.de in der Erstellungsreihenfolge angezeigt werden, sondern sortiert nach der Güte(*) der Lösung. Diskussionen finden wenn überhaupt nur in den Kommentaren innerhalb von einzelnen Beiträgen statt und selbst das sind meistens eher Anmerkungen und Ergänzungen, denn echte Diskussionen.

Außerdem schreibt Jeff Atwood:

I'm continually amazed at the number of people, even on Hacker News today, who don't realize that every single question and answer is editable on Stack Overflow, even as a completely anonymous user who isn't logged in. Which makes sense, right, because Stack Overflow is a wiki, and that's how wikis work. Anyone can edit them. Go ahead, try it right now if you don't believe me — press the "improve this answer" or "improve this question" button on anything that can be improved, and make it so.

Auch das spricht eindeutig für ein Wiki. Darüber, ob SO nur mehr mit Wiki_pedia_ gemeinsam hat, also mit einem enzyklopädischen Wiki, oder eher allgemein mit Wikis, kann man sicher streiten. Immerhin nutze ich persönlich SO tatsächlich eher wie eine Art Wikipedia, also um für Standard-Probleme Standard-Lösungen/-Lösungsansätze nachzuschlagen. Und ärgere mich daher oft über doppelte Fragen. Am liebsten wäre es mir wirklich, wenn es zu jedem (Standard-)Problem nur eine einzige Stelle gäbe, wo dann alles relevante steht, statt mich durch x Threads zu wühlen, in denen x Leute immer wieder nach neuen Varianten des eigentlichen Problems fragen.

Und tatsächlich habe ich auf SO noch nie eine Frage gestellt, weil quasi alle Fragen, die ich hatte, schon beantwortet waren.

In diesem Lichte betrachtet kann ich die Aussage gut nachvollziehen. Du jetzt auch?

herbivore

(*) Selbst wenn die "gevotete" Güte - entsprechend des Einwands von Abt - nicht zwangsläufig mit der objektiven Güte übereinstimmt.

22.10.2018 - 18:09 Uhr

Hallo dasHund1982,

du kannst es mal mit dem On-the-fly Regex-Tester: Regex-Lab probieren. Damit hatte ich das geschilderte Problem jedenfalls noch nicht.

herbivore

22.10.2018 - 13:57 Uhr

Hallo dasHund1982,

unabhängig von dem Einwand von Latino, hier noch die Antwort auf die eigentliche Frage. Du kannst mit ^ und $ erzwingen, dass die Suche am Anfang des Strings(*) beginnt bzw. endet.

(*) Bzw. der Zeile. Umschaltbar per RegexOptions.Multiline.

herbivore