Zum Inhalt springen

Whiz-zarD

Mitglieder
  • Gesamte Inhalte

    2.018
  • Benutzer seit

  • Letzter Besuch

  • Tagessiege

    48

Alle Inhalte von Whiz-zarD

  1. Du brauchst du dafür gar nichts. Du musst wissen, wie man zwischen zwei Rechnern Nachrichten verschickt (z.B. über TCP und UDP). Wofür brauchst du denn da eine Datenbank? Nicht nur auf Windows ... Wenn ein Router dazwischen hängt, musst du das Portforwarding aktivieren, damit auch die Datenpakete zum lauschenden Rechner weitergeleitet werden. Um das zu umgehen, verwenden Onlinespiele oder Messengerdienste die Hole Punching-Technik. Darüber würde ich mir aber erstmal keine Gedanken machen.
  2. Ein Datenbank-Server sollte nie direkt von Außen ansprechbar sein. Wenn, dann über ein VPN oder über ein geeignetes Administrationstool, was auf dem Server liegt (z.B. phpMyAdmin) und vor fremden Zugriff abgesichert ist. Ob du eine Datenbank für ein Multiplayer-Spiel brauchst, liegt auch am Spiel selbst. z.B. Minecraft kommt auch ohne Datenbank aus. Datenbanken sind nicht immer das Allheilmittel. Ich würde auch kleinere Brötchen backen, bevor ich mich da an ein Multiplayer-Spiel ranwagen würde. Fange erstmal klein an. z.B. Tic-Tac-Toe und arbeite dich an größere Dinge. Selbst die Implementierung von Schach kann schon sehr kompliziert werden.
  3. Keiner wird für dich deine Hausaufgaben machen. Bitte erläutere, wo deine Schwierigkeiten liegen.
  4. Das habe ich auch gedacht und da sehe ich die größten Probleme. In der Doku wird einfach lapidar behauptet, dass in der Konfigurationsdatei Host, Port, Nutzer, Passwort und Datenbankname eingetragen wird aber wie steht es mit der Sicherheit des Passwortes? Steht das Passwort in Klartext in der Datei? Das selbe gilt dann auch für die User-Tabelle. Wird das Passwort verschlüsselt abgelegt? Wenn ja, wie? Es sieht auch so aus, als könnte man Benutzer gar nicht sperren. Auch sowas wie Anzahl Login-Versuche und das Datum des letzten Erfolgreichen Logins wird nicht gespeichert. Das sind aber essentielle Dinge, um mögliche Angriffe zu identifizieren. Es fehlt auch das technische Know-How in der Doku. Also warum es so umgesetzt wurde, wie es umgesetzt wurde. Die Schwierigkeiten und Herausforderungen werden nicht deutlich. Technische Dinge, wie z.B. die Grafik mit der PGP-Verschlüsselung stammen 1:1 aus Wikipedia und es wird nicht mal näher darauf eingegangen. Man nimmt es also einfach so hin, ohne es zu reflektieren. Es wird nicht mal erwähnt, wie die Zwei-Faktor-Authentifizierung nun abläuft. Bekommt der Benutzer eine Mail?
  5. Davon gehe ich dann auch mal sehr stark davon aus. Ein Prüfer hat davon auch nichts, wenn er einen Azubi absichtlich durchfallen lässt. Ich weiß nicht, wie es bei anderen aussieht aber bei mir haben zwei Prüfer die Dokumentation angeschaut und wenn die Bewertung weit auseinander liegt, wurde ein dritter Prüfer einberufen.
  6. Du musst die XML-Datei einlesen und durch die Elemente iterieren und die, die du umgewandelt haben möchtest, mit der WebUtility.HtmlEncode()-Methode umwandeln und zum Schluss die XML-Datei neu speichern.
  7. Ich weiß auch nicht, warum man hier jetzt noch nachtreten muss.
  8. Das sind leider alle Informationen, die ich gerade finden kann. Die Information stammt aus diesem Buch.
  9. Ich bin mir da jetzt nicht ganz sicher, ob .NET 4.6 abwärtskompatibel zu 4.5.1 ist. Es genügt aber auf den Maschinen, wo 4.6 läuft 4.5.1 zu installieren. Du brauchst es nicht deinstallieren. Nicht unbedingt. Es gab in der Vergangenheit schon breaking Chances, die dafür sorgten, dass .NET nicht abwärtskompatibel war.
  10. XML-Dateien sollten nicht mit regulären Ausdrücken geparsed werden: https://stackoverflow.com/questions/6751105/why-its-not-possible-to-use-regex-to-parse-html-xml-a-formal-explanation-in-la Du merkst ja selber, dass es gar nicht so trivial ist, da du z.B. auch Zeilenumbrüche berücksichtigen müsstest. Das beste ist, du lässt die XML-Datei mittels einer geeigneten Bibliothek (mit welcher Sprache entwickelst du?) und löschst dann die Einträge aus der DOM-Struktur und generierst eine neue XML-Datei.
  11. Ich muss gestehen, dass ich mit Hibernate direkt noch nicht gearbeitet habe, sondern mit dem .Net-Ableger NHibernate. Dort gibt man in der SessionFactory den Connectionstring mit. Der kann ja dynamisch erzeugt worden sein. Du kannst bei Hibernate auch die Konfiguration überschreiben: http://stackoverflow.com/questions/18033288/programmatically-configure-hibernate-with-dynamic-username-and-password Wie das jetzt unter Java implementiert wird, weiß ich nicht. Das letzte Mal, als ich mit Java entwickelt habe, ist schon einige Jahre her. Ich entwickle hauptsächlich mit C#. Wir haben es so gelöst, wenn das FormClosed-Event vom Hauptfenster ausgeführt wird, schließen wir die Verbindung. Also ja, ein shutdown Hook.
  12. Wo ist denn das Problem, den Nutzer die Möglichkeit zu schaffen, Benutzername, Passwort, Server, Port, etc. über die Anwendung anzugeben anstatt die Werte statisch im Code zu schreiben? Du erzeugst einfach eine Singleton-Klasse, die die Konfiguration speichert. Mit Hilfe des Singletons kannst du eine Datenbank-Verbindung aufbauen, die du dann in dein Controller reichst. In diesem Zusammenhang schaue dir mal Hibernate ORM an. Das ist ein Object/Relational-Mapper (O/R-Mapper). O/R-Mapper haben die Aufgabe, Relationale Daten, wie sie in einer relationalen Datenbank stehen, in Objekte, gemäß der Objektorientierung, zu wandeln. O/R-Mapper kapseln schon deine Geschäftslogik von der Datenzugriffsschicht ab, sodass du in der Geschäftslogik gar nicht weißt, woher die Daten stammen.
  13. Eine CSS-Datei benötigt keine verbundene Spalten. Die CSS ist nur für die grafische Darstellung der Spalten da. Der Fehler liegt also im HTML-Dokument, da eben nicht genügend Spalten verbunden werden, damit die Spalte bis zum Ende geht und nicht nach der achten aufhört.
  14. Das Problem ist doch, dass 8 Spalten verbunden werden und nicht 10 und anstatt den Fehler zu korrigieren, soll er ausgeblendet werden? Spricht nicht gerade für den Betrieb ...
  15. Ich versteh nicht, wo genau dein Problem ist. Kannst du es vielleicht mal anhand eines Beispiels erläutern?
  16. Visual Studio ist eher mehr für andere Sprachen geeignet und nicht für C. Die Programmierung mit C funktioniert ja auch nur, weil Visual C++ auf C aufbaut. Ich würde da auch eher Code::Blocks nehmen.
  17. Es sind ja 10 Ausgaben auf dem Bildschirm. Ich kann es mir nur so vorstellen, dass eine Schleife gebaut werden soll, die 10 mal durchlaufen wird und jedes Mal eine Ausgabe machen soll. Dann würde man mit einer switch-Anweisung 4 mal x und 4 mal y einen Wert zuweisen aber es stimmt schon, dass es merkwürdig ist, dass im printf() von a und b die Rede ist aber in der Aufgabe selbst von x und y. Irgendwas passt da nicht.
  18. Wie gesagt, das ist ein bisschen abhängig vom Kontext, wann man eine Verbindung aufbaut und wieder schließt. Für die UI haben wir auch eine Verbindung, die wir ein mal beim Starten der Anwendung öffnen und dann beim Beenden schließen, damit man eben nicht Tausend Mal eine Verbindung aufbaut.
  19. Die Models sollten dumme POJOs sein. Es gehört keine Datenbeschaffungslogik in diese Klassen, denn ansonsten hast du eine Abhängigkeit zwischen den Models und der Datenbank. Die Datenbeschaffungslogik liegt dann in den Repositories, die du mit Interfaces kapselst. Dann ist es tatsächlich egal, woher die Daten kommen. Sie können dann aus einer Datenbank, aus einer XML-Datei oder sonst wo kommen. Frage 2 ist ein bisschen komplizierter. Es sollte nicht einfach eine Verbindung aufgebaut werden, die die ganze Zeit aktiv ist, solange die Anwendung läuft, sondern sie sollte so lange aktiv sein, wie sie auch benötigt wird. Es kann schon passieren, dass eine Anwendung gleich mehrere Verbindungen aufbaut. Dies ist z.B. in der Parallelisierung erforderlich, damit mehrere Zugriffe parallel verarbeitet werden können. Wenn z.B. eine Berechnung vier Threads aufbaut, dann werden auch vier Verbindungen aufgebaut und wenn die Threads mit ihrer Arbeit durch sind, dann werden die Verbindungen wieder geschlossen.
  20. Frage 1 und 2 verstehe ich nicht. Was willst du damit sagen? Frage 3 und 4 haben quasi die selbe Antwort: Schaue dir das Repository Pattern an.
  21. Eigentlich ist der genaue Datentyp hier nicht egal, da wir es mit Geldbeträgen zu tun haben und die eine besondere Vorsicht benötigen. Theoretisch wäre ein Integer sogar besser. Genau genommen ist die Aufgabe sehr lückenhaft. Die Methode heißt GetSumCurrentOrder(). Der Name suggeriert also, dass die Methode überhaupt keinen Eingangsparameter hat, sondern dass die Klasse schon die Bestellung im "Bauch" hat. Also müsste man erst mal die Gesamtsumme ausrechnen. Dann die Versandkosten und dann den Rabatt. function GetSumCurrentOrder(Wert: Integer) Summe:Integer summe = GetSumme() return summe + GetVersandkosten(summe) - GetRabatt(summe) end function
  22. Richtig. Es ist eine Abschlussprüfung. Da kann man eigentlich schon erwarten, dass man nach einer dreijährigen Ausbildung weiß, was genau ein Array ist und was nicht. Man muss sich doch auch mal im Klaren machen, was denn der Sinn von Pseudocode oder NS-Diagrammen ist. Es soll doch den Algorithmus darstellen, der dann von oben nach unten in eine Sprache geschrieben werden kann. Wenn ich aber gleich als erstes das Ergebnisarray deklariere, dann kann ich den Pseudcode oder das NS-Diagramm in vielen Sprachen einfach nicht umsetzen. Das Diagramm funktioniert dann vielleicht in PHP aber für C, C++, Java oder C# passt es nicht. Also ist der Pseudocode/das NS-Diagramm schon auf die jeweilige Zielsprache gemünzt und lässt sich nicht auf eine andere Sprache 1:1 übertragen. Man muss also schon die Eigenheiten der verwendeten Sprache kennen aber genau das sollte doch der Pseudocode oder das NS-Diagramm verhindern und das sind Dinge, die mich ein bisschen stören. Mag sein, dass der Prüfungsausschuss es nicht ganz so genau nimmt, denn man will die Azubis ja nicht durchfallen lassen aber ich finde das doch ein bisschen unschön.
  23. Jaein. Wenn man es genau betrachtet, ist dies auch falsch. Ein Array ist eigentlich ein zusammenhängender Block im Speicher. Man muss also schon im Vorwege wissen, wie groß dieser Block werden soll. Ein leeres Array wäre ein Array in der Größe von 0 Bytes. Du könntest dort also keine Daten speichern. Es gibt zwar schwachtypisierte Sprachen, die sowas kennen, wie leere Arrays, die dynamisch befüllt werden können, wie z.B. PHP aber dies sind genaugenommen keine Arrays sondern andere Datenstrukturen, wie z.B. Hashtabellen (im Falle von PHP) oder verkettete Listen. Also auch dein Pseudocode wäre von der Sprache abhängig. Unter C# oder Java könnte man dein Pseudocode nicht implementieren. Wenn man die Aufgabe genau betrachtet, ist das eigentlich auch nur eine Filterung mit einer anschließenden Sortierung. Ein sprachunabhängiger Pseudocode müsste also weg von der imperativen und hin zur funktionalen Vorgehensweise: function erstelleFluege(Datum : date, Plaetze : Integer): Flug[] Ergebnis = Filter Linien_Fluege Kriterium: getFlugDatum() == Datum UND getSitzplaetze() > Plaetze Sortiere Ergebnis nach getFlugDatum() return Ergebnis Wie man dann nun den Filter implementiert, ist dann den Entwickler überlassen. Mit C# und Linq wäre der gesamte Algorithmus sehr simpel: public Flug[] ErstelleFluege(DateTime datum, int platze) { return this.LinienFluege .Where(flug => flug.FlugDatum == datum && flug.Sitzplaetze > plaetze) .OrderBy(flug => flug.FlugDatum) .ToArray(); } Ich brauche also keine Arrays definieren oder sonst was. Das übernimmt das Framework für mich. Das er rein muss, ist mir schon klar. Mir ist aber nicht klar, ob der Prüfungsausschuss es akzeptiert, den Sortieralgorithmus als Blackbox zu betrachten, oder ob dieser als Pseudocode mit abgebildet werden muss.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...