Zum Inhalt springen

sas86ks

Mitglieder
  • Gesamte Inhalte

    452
  • Benutzer seit

  • Letzter Besuch

  • Tagessiege

    2

Reputationsaktivitäten

  1. Haha
    sas86ks reagierte auf Kwaiken in Web-Applikationen modern? Klassische Desktopanwendung tot?   
    Wusste nicht, dass in nordkoreanischen Arbeitslagern noch ASP.NET programmiert wird. 
  2. Danke
    sas86ks reagierte auf charmanta in Anfechtung Ergebnis Projektdokumentationen   
    ich gestehe ich habe nur überflogen .. aber da ich solche Fälle kenne einmal mein Friesensenf dazu:
    - die IHK überlässt das Urteil und die Auswirkung über einen Täuschungsversuch nach meinen Erfahrungen ( Plural ! ) dem Prüfungsausschuß.
    - das Fachgespräch hat stattgefunden und wurde mit 0 Punkten bewertet ? Kann nicht sein. Wenn, dann wurde die Projektdoku mit 0 Punkten bewertet. Ein Fachgespräch mit 0 Punkten zu beenden halte ich für ne Kunst ... solange man physisch anwesend ist.
    - die Mitteilung der IHK umfasst natürlich nur eine Note und keine Begründung. Das war schon immer so. Wenn Du das Zustandekommen der Noten verstehen willst beantragst Du Akteneinsicht. Dafür brauchst Du keinen Anwalt. Die kann auch nicht verweigert werden wenn man das sachlich korrekt und freundlich beantragt.
    Gegen die Noten als solche hast Du praktisch keine Chance, da die pariätisch gebildet wurden. Der Anwalt kann nur wegen Formalien klagen, nicht gegen eine inhaltliche Beurteilung. Dafür fehlt ihm die Fachkompetenz, nicht mal die IHK verteidigt Noten eines PA aus gleichem Grunde. Dafür wird immer der PA neu zusammen gerufen ( und wie der sich dann freut .... )
    Erkennt der Anwalt einen Formfehler  so kann er dagegen klagen. Das wird länger als 6 Monate dauern....
    Ich fasse zusammen: 4 Seiten nicht gekennzeichneter Zitate ? Keine Ahnung mehr wie so was kommen kann ? Spar Dir den Anwalt und den Schaum vorm Mund.
    Nehmen wir mal an der Anwalt bekäme durch dass der PA die Doku doch bewertet, dann liegt es wieder im Ermessensspielraum des PA die Täuschung  ( sorry, aber das IST Täuschung ) wie auch immer in die Note einfliessen zu lassen. 4 Seiten von 10-15 ohne Bewertung  ? Dann bist Du praktisch wieder raus. Ohne die Detailnoten zu kennen ... aber wenn die Doku wegen des erheblichen Anteils nicht gekennzeichneter Zitate auf "Mangelhaft" kommt und das Fachgespräch mangels Inhalt oder brauchbarer Verteidung auch nicht viel besser ist verlierst Du auch ....
    Spar das Geld, Du wirst nicht gewinnen...
     
    EDIT: "Schadensersatz" gegen die IHK geltend zu machen ist ganz sicher ne nette Idee Deines Anwalts, gelle ? Damit definiert er den Streitwert und damit SEIN Salär.
     
  3. Like
    sas86ks hat eine Reaktion von Asura erhalten in Zwischenprüfung, Prämie   
    Freu dich über ein Schulter klopfen.
  4. Like
    sas86ks hat eine Reaktion von Dan96 erhalten in Zwischenprüfung, Prämie   
    Freu dich über ein Schulter klopfen.
  5. Like
    sas86ks hat eine Reaktion von neinal erhalten in Zwischenprüfung, Prämie   
    Freu dich über ein Schulter klopfen.
  6. Like
    sas86ks hat eine Reaktion von KeeperOfCoffee erhalten in Zwischenprüfung, Prämie   
    Freu dich über ein Schulter klopfen.
  7. Like
    sas86ks hat eine Reaktion von angerdan erhalten in 33 EUR Fahrtkosten nicht erstattet? Schonmal erlebt?   
    @Robeat_FISI das ist in Deutschland (wie so vieles) gesetzlich geregelt und wurde weiter oben auch schon erwähnt. Siehe:

    § 670 BGB Ersatz von Aufwendungen - dejure.org

    Deine Aussage



    ist also falsch. Wenn der AG um ein Vorstellungsgespräch bittet, ist er dazu verpflichtet die entstandenen Kosten zu übernehmen.
  8. Like
    sas86ks reagierte auf Carwyn in Nr. 351 - von Üffes, Schackeline und schwarzen Löcher im Sommer   
    BAM! Da siehste mal, Kerky!
  9. Like
    sas86ks reagierte auf neinal in Fi.de Bayern   
    Darüber lässt sich reden
    Mein Handschufach klappert nämlich nicht
  10. Like
    sas86ks reagierte auf Chiyoko in Ein eigenes Projekt | PHP   
    Eventuell wären etwas mehr Hintergrundinformationen wünschenswert.
    Wer bist du? Wie viel Erfahrung hast du mit den verwendeten Technologien? Wie viele solcher Projekte hast du schon gemacht? Ist es eine spontane Idee wie "ach, das wär lustig, das zu programmieren", oder hast du schon ein Konzept ausgearbeitet? Wie weit bist du schon? Was steht? Was soll noch kommen?
    Ich denke, mit etwas mehr Infos hättest du größere Chancen auf Erfolg.
     
  11. Like
    sas86ks reagierte auf neinal in Nintendo Switch Besitzer?   
    Und ich bin traurig und neidisch. Wird auf jeden Fall noch gekauft.
  12. Like
    sas86ks reagierte auf Goulasz in Gehaltsvorstellung "IT-Consultant/Projektleiter" (InHouse)   
    So. Gut war's.
    Spannendes Aufgabengebiet, junges Team(der Projektbereich existiert so erst seit einem Jahr), viel Verantwortung(genau, was ich möchte), Möglichkeit Produktideen oder Prozessoptimierung ohne Umwege über zentrale Vertriebsabteilungen direkt anzubieten(Nein, keine Kaltakquise ), 30 Tage Urlaub, die 50.000€ kamen so ganz gut an, Weiterbildungsmöglichkeiten, etc.
    Einziger "Malus": Wohl doch leichte bis moderate Reisetätigkeit. 2 Standorte, für die Heimschläfer noch ginge. Dadurch, dass der Standort, der für mich in Frage kommt, jedoch einen Großteil der Projekte übernimmt, werden viele Termine vor Ort gemacht. Es kann aber sein, dass ich für 1-2 Tage(also eine Übernachtung) die Woche beim Kunden bin. Etwas, womit ich an sich nicht so das Problem hätte, was ich aber noch klären muss mit der Familie. Das Aufgabengebiet ist allerdings extrem spannend und eigentlich genau das, wohin ich mich beruflich gerne entwickeln würde.
    Planbar sollte es aber sein, das habe ich gestern auch explizit gesagt. Montag den Auftrag "Hallo, du bist jetzt bis Ende der Woche in Berlin" kommt für mich nicht in Frage.
    Ende nächster Woche erhalte ich Rückmeldung.
    Gruß, Goulasz  
  13. Like
    sas86ks reagierte auf wenzel in Was für ein Auto fahrt Ihr?   
    Ich habe nur eine Drive now Karte!
  14. Like
    sas86ks reagierte auf Chief Wiggum in Aufhebungsvertrag vorgelegt bekommen   
    Der einzige Tipp an dieser Stelle kann nur sein, sich so schnell wie möglich einen Anwalt zu suchen.
  15. Like
    sas86ks reagierte auf Whiz-zarD in C# OOP Probleme   
    Wieso sollte man dich töten wollen?
    Softwareentwicklung ist nun mal ein Reifeprozess. Niemand liest nur ein Buch und kann gleich wunderbar sauberen Code schreiben. Mein Code sah zum Anfang auch mies aus und selbst Robert C. Martin, der das Buch "Clean Code" geschrieben hat, sagt von sich aus, dass er nicht die Weisheit mit Löffeln gefressen hat und es auch bei seinen Code-Beispielen sicherlich noch Verbesserungspotenzial gibt aber nur durch Ausprobieren lernt man. 
    Du hast schon richtig erkannt, dass man fürs Einlesen der Datei eine eigene Klasse benötigt. Allerdings gehört die Logik nicht in den Konstruktor. Der Konstruktor dient zur Initialisierung der Klasse. Der Name der Klasse sollte auch die Aufgabe widerspiegeln, was die Klasse tut. "DateiEinlesen" ist vielleicht gut, aber geht es vielleicht noch konkreter? Ich weiß, dass es eine CSV-Datei ist. Vielleicht eher CsvReader?  Wobei dieser Name auch wieder sehr allgemein ist. In der CSV-Datei steckt ja eine Tabelle. Welche Daten besitzt die Tabelle? Vielleicht kann man der Tabelle einen Namen geben. Eine CSV-Datei ist ja eine Art der Serialisierung. Das Verfahrung um so eine Tabelle in ein Objekt zu überführen, nennt man auch Deserialiserung. Das kann man ja erst mal im Hinterkopf behalten.
    Zuerst würde ich mir aber erst mal eine geeignete Datenstruktur überlegen. In der CSV-Datei stecken ja Daten. Ich nehme jetzt mal als Beispiel, dass die CSV-Datei Daten zu Personen beinhaltet:
    Name;Vorname;Geschlecht;Alter Doe;John;Maennlich;38 Also würde ich erst mal eine Klasse für diese Daten erstellen:
    public class Person {     public string Name { get; set; }     public string Vorname { get; set; }     public Geschlecht Geschlecht { get; set; }     public int Alter { get; set; } } public enum Geschlecht {     Maennlich     , Weiblich } Nun könnte ich mich darum kümmern, eine(!) Datei einzulesen. Ich habe eine Datenstruktur und ich weiß, dass ich eine CSV-Datei deserialisieren muss. Also könnte man die Klasse z.B. PersonCsvDeserializer nennen. In dieser Klasse soll es eine Methode geben, die Deserialize() heißt. Ich verzichte hier jetzt erst mal bewusst auf ein Interface, weil ich denke, dass es für dich bis hier hin schon kompliziert genug ist. Das Interface werde ich später noch mal erklären. Erst mal kümmern wir uns darum, was wir alles brauchen, um eine Datei zu deserialisieren. 
    Was muss die Klasse PersonCsvDeserializer alles wissen, um eine CSV-Datei deserialisieren zu können? Man könnte vielleicht im ersten Schritt auf die Idee kommen, dass die Klasse den Pfad und Dateinamen benötigt. Mit den Informationen aus dem letzten Absatz könnte ein erster Entwurf so aussehen: 
    public class PersonCsvDeserializer {     public IEnumerable<Person> Deserialize(string fileName)     {       // ...     } } Als Rückgabewert habe ich IEnumerable<Person> gewählt, weil IEnumerable<T> ein sehr allgemeines Interface ist und einen Enumerator (auf deutsch: Aufzählung; in anderen Sprachen auch Iterator genannt) zur Verfügung stellt, mit dem wir über die Daten iterieren können (mit der foreach-Schleife). Sowohl IList<T>, ICollection<T>, IDictionary<T>, Array und weitere Klassen implementieren dieses Interface und mehr als über die Daten iterieren wollen wir nicht. Wenn wir später damit mehr machen wollen, können wir es leicht mit Linq in eine Collection, List, Array oder auch in ein Dictionary umwandeln. Die Deserialize()-Methode soll also eine Aufzählung von Personen zurückliefern.
    Normalerweise macht man es anders, aber aus einfachheit behaupte ich mal frech, dass die erste Zeile in der CSV-Datei immer ein Header besitzt. In der Implementierung überspringe ich den Header per Linq mit der Skip()-Methode. Die Deserialize()-Methode soll also folgendes machen:
    Die Datei lesen Durch die Datenzeilen iterieren Pro Datenzeile ein Person-Objekt erstellen Die Person-Objekte als Aufzählung zurückliefern Der erste Entwurf könnte daher folgendermaßen aussehen:
    public class PersonCsvDeserializer {     public IEnumerable<Person> Deserialize(string fileName)     {         IList<Person> result = new List<Person>();         foreach (string line in File.ReadAllLines(fileName).Skip(1))         {             string[] elements = line.Split(';');             result.Add(new Person             {                 Name = elements[0],                 Vorname = elements[1],                 Geschlecht = (Geschlecht)Enum.Parse(typeof(Geschlecht), elements[2]),                 Alter = Convert.ToInt32(elements[3])             });         }         return result;     } } Die Methode macht zwar was sie soll, aber ist sie wirklich übersichtlich? Nicht wirklich. Wir haben hier mehrere Ebenen miteinander vermischt. Wir können also mit dem Refactoring anfangen. z.B. das
    File.ReadAllLines(fileName).Skip(1) Wofür ist das genau gut? Wenn man den gesamten Kontext kennt, weiß man es zwar aber eigentlich liegt der Code-Abschnitt eine Ebene Tiefer. Es hantiert mit Dateien und hat mit der eigentlichen Aufgabe der Deserialiserung wenig zu tun. Also sollte man diesen Teil in eine separate Methode packen:
    private IEnumerable<string> ReadDataFromFile(string fileName) {     return File.ReadAllLines(fileName).Skip(1); } Somit wandert das Skip(1) in eine tiefere Ebene und interessiert uns in der Deserialize()-Methode nicht mehr. Als nächstes fällt aber auf, dass wir ein String mit Split() in ein Array teilen und aus diesem Array dann die einzelnen Personendaten herausfischen. Diesen Vorgang nennt man auch Parsing. Also könnten wir diesen Teil auch in eine Methode auslagern:
    private Person Parse(string serializedData) {     string[] elements = serializedData.Split(';');     return new Person     {         Name = elements[0],         Vorname = elements[1],         Geschlecht = (Geschlecht)Enum.Parse(typeof(Geschlecht), elements[2]),         Alter = Convert.ToInt32(elements[3])     }; } Unsere Klasse sieht dann bis jetzt folgendermaßen aus: 
    public class PersonCsvDeserializer {     public IEnumerable<Person> Deserialize(string fileName)     {         IList<Person> result = new List<Person>();         foreach (string serializedData in ReadDataFromFile(fileName))         {             Person person = this.Parse(serializedData);             result.Add(person);         }         return result;     }     private IEnumerable<string> ReadDataFromFile(string fileName)     {         return File.ReadAllLines(fileName).Skip(1);     }     private Person Parse(string serializedData)     {         string[] elements = serializedData.Split(';');         return new Person         {             Name = elements[0],             Vorname = elements[1],             Geschlecht = (Geschlecht)Enum.Parse(typeof(Geschlecht), elements[2]),             Alter = Convert.ToInt32(elements[3])         };     } } Nun ist Deserialize() doch recht gut lesbar. Wir lesen die Daten aus der Datei, parsen die Daten und erhalten ein Person-Objekt, welches wir dann in eine Liste packen und zum Schluss geben wir die Liste zurück.
    Es gäbe hier noch weiteres Verbesserungspotenzial aber ich belasse es erst mal hierbei. Ein paar Hinweise gebe ich aber noch:
    Fehler-Handling? Was passiert, wenn z.B. die Datei nicht existiert? Ist das erzeugte Objekt List<Person> wirklich eine gute Wahl? Angenommen, wir haben es mit einer riesigen CSV-Datei (mehrere Gigabytes) zu tun, die größer ist, als unser Arbeitsspeicher. Hier schmeiße ich mal das "yield return"-Schlüsselwort in den Raum. Auch ist das indexierte Zugreifen auf das Array in der Methode Parse() nicht wirklich glücklich gelöst. Was passiert nämlich, wenn mal eine Spalte in der Datei hinzukommt? Dann muss man ja auch den Code anpassen. Das will man aber eigentlich gar nicht. Zu diskutieren wäre auch, ob die Variable fileName nicht doch besser eine Instanzvariable sein sollte, die per Konstruktor reingereicht wird. Es fällt ja auf, dass die Methoden Deserialize() und ReadDataFromFile() den Dateinamen benötigen. Also stellt fileName ja eine gewisse Abhängigkeit dar, die die Klasse benötigt, um arbeiten zu können.  Als Überlegung kannst du ja selber mal schauen, wie man mit solchen Situation umgehst.
    Um später im Hauptpgramm alle Personen zu iterieren könntest du nun folgendes schreiben:
    static void Main(string[] args) {     string sourcePath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\blabla";     IEnumerable<string> fileNames = Directory.GetFiles(rootPath, "*.csv");     PersonCsvDeserializer deserializer = new PersonCsvDeserializer();     foreach(string fileName in fileNames)     {         IEnumerable<Person> persons = deserializer.Deserialize(fileName);         foreach (Person person in persons)         {             // ...         }     } } Nach dem selben Prinzip, wie bei der PersonCsvDeserializer-Klasse kannst du ja mal überlegen, wie man nun diesen Code refactoren an.
    Ab hier wird es noch etwas technischer und tiefgreifender. Ich möchte dir noch zwei Techniken zeigen, die du aber erst mal nicht umsetzen brauchst.
    "Inversion of Control" und "Dependeny Injection"
    In der Klasse PersonCsvDeserializer fällt auf, dass die Klasse von einer Datei abhängig ist aber die Daten können vielleicht aus einer Datenbank kommen oder wir schreiben die CSV-Daten direkt in eine grafische Oberfläche. Möchte man jetzt für jeden Anwendungsfall eine eigene Klasse schreiben? Eigentlich nicht. Die Abhängigkeit zur Datei muss also aufgelöst werden. Das .Net-Framework bietet ja die abstrakte Klasse TextReader, die so ziemlich alles darstellen kann. Ein Reader, der eine Datei liest oder aus einem TCP-Stream oder aus einer Datenbank, etc. Anstatt also den Dateinamen reinzureichen, könnte man auch ein TextReader reinreichen.
    Hier mal ein Beispiel, wie so eine Klasse aussehen könnte:
    public class PersonCsvDeserializer {     private TextReader reader;     private bool isHeaderSkipped;     public PersonCsvDeserializer(TextReader reader)     {         this.reader = reader;     }     public IEnumerable<Person> Deserialize()     {         string serializedData;         while ((serializedData = this.ReadNextData()) != null)         {             Person person = this.Parse(serializedData);             yield return person;         }     }     private string ReadNextData()     {         string serializedData = this.reader.ReadLine();         if (!this.isHeaderSkipped)         {             this.isHeaderSkipped = true;             return this.ReadNextData();         }         return serializedData;     }     private Person Parse(string serializedData)     {         string[] elements = serializedData.Split(';');         return new Person         {             Name = elements[0],             Vorname = elements[1],             Geschlecht = (Geschlecht)Enum.Parse(typeof(Geschlecht), elements[2]),             Alter = Convert.ToInt32(elements[3])         };     } } Die Main-Methode sieht dann so aus:
    static void Main(string[] args) {     string sourcePath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\blabla";     IEnumerable<string> fileNames = Directory.GetFiles(rootPath, "*.csv");          foreach(string fileName in fileNames)     {         using (TextReader reader = File.OpenText(fileName))         {             PersonCsvDeserializer deserializer = new PersonCsvDeserializer(reader);                          IEnumerable<Person> persons = deserializer.Deserialize();             foreach (Person person in persons)             {                 // ...             }         }       } } Zugegeben, in diesem Beispiel ist die Klasse PersonCsvDeserializer etwas komplizierter geworden aber es ist jetzt egal, woher die Daten stammen, solange wir ein TextReader in den Konstruktor schieben. Das reinrechen der Abhängigkeit in den Konstruktor nennt sich auch "Dependeny Injection". In diesem Beispiel habe ich auch das yield return verwendet. Da wir jetzt nur noch maximal den Speicher für ein Person-Objekt verbrauchen, könnte die Klasse eigentlich nun unendlich viele Daten deserialisieren. Ein Problem stellt aber immer noch die Indexierung des Arrays dar aber das überlasse ich jetzt dir.
    Das Interface
    Das letzte, was ich noch schreiben wollte, wäre ein geeignetes Interface für den Deserializer. Wollen wir jetzt mehrere Deserializer schreiben oder einen Deserializer als Abhängigkeit in eine Klasse reinreichen, ist ein Interface geeignet, damit es später egal ist, um welchen Deserializer es sich handelt. Man könnte sich ja auch vorstellen, dass die Daten nicht in einer CSV-Datei stecken, sondern in einer XML-Datei. Dafür wäre folgendes Interface recht nützlich
    public interface IDeserializer<T> {     IEnumerable<T> Deserialize(); } Mit diesem Interface könnten wir sogar das hässliche using im Hauptprogramm wieder loswerden. Ich finde, das using stört im Lesefluss. Wir haben ja jetzt eine Klasse, die CSV-Daten aus unterschiedlichsten Quellen von Personen deserialisieren kann. Was hindert uns nun daran, einen weiteren Deserializer zu bauen, der aus Dateien deserialisiert? Beispiel:
    public class PersonCsvFileDeserializer : IDeserializer<Person> {     private string fileName;     public PersonCsvFileDeserializer(string fileName)      {         this.fileName = fileName;     }     public IEnumerable<Person> Deserialize()     {         using (TextReader reader = File.OpenText(fileName))         {             PersonCsvDeserializer deserializer = new PersonCsvDeserializer(reader);             return deserializer.Deserialize();         }     } } Das using wurde nach PersonCsvFileDeserializer und somit eine ebene tiefer verschoben. Wenn du Dependecy Injection verstanden hast, dann würde dir auffallen, dass die Zeile 
    PersonCsvDeserializer deserializer = new PersonCsvDeserializer(reader); eigentlich böse ist, da es eine Abhängigkeit darstellt, die wiederum in den Konstruktor gehört. Ich habe sie aber erst mal hier drinnengelassen, weil das sonst wieder bedeuten würde, dass das using wieder ins Hauptprogramm rein müsste. Eigentlich müsste man sich eine Fabrik-Methode ausdenken, die den PersonCsvFileDeserializer zusammenbaut. Die habe ich hier aber weggelassen. Die kannst du dir ja ausdenken.
    Das Hauptprogramm würde dann so aussehen:
    static void Main(string[] args) {     string sourcePath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\blabla";     IEnumerable<string> fileNames = Directory.GetFiles(rootPath, "*.csv");          foreach(string fileName in fileNames)     {         PersonCsvFileDeserializer deserializer = new PersonCsvFileDeserializer(fileName);                      IEnumerable<Person> persons = deserializer.Deserialize();         foreach (Person person in persons)         {             // ...         }      } } Das wäre doch schon wieder ein Schritt übersichtlicher. 
    Wie du also siehst, haben wir allein nur für das Einlesen von den CSV-Dateien drei Klassen:
    Person PersonCsvDeserializer PersonCsvFileDeserializer und ein Interface:
    IDeserializer<T> geschrieben. Man braucht also kein mega großes Projekt, um mehrere Klassen zu schreiben. Es reicht auch schon was ganz einfaches. Man sollte sich immer bewusst machen, dass Klassen immer nur eine Aufgabe machen sollten und Methoden Teilaspekte dieser Aufgabe sind und sie sollten auch nicht mehr machen, als eine Sache. Es macht auch nichts, wenn man zum Anfang Spagetticode schreibt und diesen später nach und nach einem Refactoring unterzieht. Niemand ist perfekt und niemand schreibt perfekten Code. Man fängt also immer erst mal an und arbeitet sich Schritt für Schritt an eine geeignete und saubere Lösung. Selbst meine Lösung ist mit Sicherheit nicht perfekt und ich habe auch nicht die Weisheit mit Löffeln gefressen. Wenn du mein Beitrag richtig verfolgt haben solltest, hast du vielleicht auch gemerkt, dass ich erst mal eine Lösung geschrieben habe und sie dann nach und nach verfeinert und verbessert habe. Das Wissen kommt erst mit Erfahrung und Erfahrung sammelt man nur, indem man es ausprobiert und darüber mit anderen diskutiert. Also trau dich.
    So, das reicht auch fürs erste. Ich denke, das ist erst mal genug Input.
     
  16. Like
    sas86ks hat eine Reaktion von JimTheLion erhalten in Arbeitsverträge werden immer unverschämter   
    Also ich bin 30 Jahre alt und komme mit den Bonuszahlungen auch über 60k € brutto. Wir haben hier Vertrauensarbeitszeit. D.h. in der Regel liege ich sogar unter 40h/ Woche würde ich behaupten. Solange wir unseren Kram erledigen ist das auch für alle ok.
    Finde die Angebote, die du bekommst schon sehr merkwürdig. Mir wird quasi wöchentlich wesentlich besseres angeboten (Xing, etc.)
  17. Like
    sas86ks reagierte auf neinal in Arbeitsverträge werden immer unverschämter   
    Darf ich vorstellen? Ich.
    Es geht alles. Ich hab ne 40h Woche. 30 Tage Urlaub. Überstunden werden abgefeiert. Alles was über 40h geht und/oder zu Zeiten gearbeitet wird an denen frei ist (WE, Feiertage, etc.) werden als Sonderurlaub gut geschrieben. Und können auch als ganze Tage genommen werden.
    Im Normalfall macht ich um 16 Uhr Feierabend. Habe Gleitzeit. Fange aber lieber früh an. Kollegen fangen zum Teil erst Mittags an. Auch kein Problem.
    Und ich bin bei mehr als 60k. Man darf sich nur nicht verarschen lassen. Hatte vorher auch einen Vertrag von einem großen Konzern auf dem Tisch liegen. 23 Tage Urlaub, Überstunden abgegolten, weniger Gehalt, befristet bis 2020 und falls man durch jemanden ersetzt wird, der mehr drauf hat, reicht es, wenn sie das ankündigen. 2 Wochen später ist der Vertrag dann nichtig.
    Ich sage bei sowas direkt ab. Und ich sagen den Firmen auch, warum ich dort nicht anfangen will. Sollten vielleicht mehr Leute machen, damit sie wissen, was Phase ist. Wenn man dem potenziellen AG nicht sagt, was einen am Vertrag stört, wird er auch nicht draus lernen.
    Und so lange es Menschen gibt, die zwar jammern, aber nix ändern und weiter für viel zu wenige Geld arbeiten gehen, ändert sich an der Situation auch nix. Warum auch? Alle meine Mit-Azubis arbeiten noch in der Ausbildungsfirma. Bekommen mehr als 2k weniger Gehalt (pro Monat!) als ich. Aber jammern nur. Und ändern nix. Selbst schuld.
  18. Like
    sas86ks reagierte auf HappyKerky in Umschulung - Angst vorm Versagen   
    "Versuchen" ist immer so vage .... Mach einfach. 
  19. Like
    sas86ks reagierte auf Chief Wiggum in Wie FIAE alleine lernen?   
    Doch, man ist sich deutlich im Klaren, was ein Anwendungsentwickler ist. Nämlich nicht das dumme Code-Äffchen, sondern jemand, der auch Grundlagen des Projektmanagements kann - und dazu gehört es nun auch mal, sich über Kosten und Nutzen des Projektes Gedanken zu machen.
  20. Like
    sas86ks reagierte auf Klebrig in C# Code   
    Erwartest du echt, dass sich jemand hier im Forum deinen Beitrag überhaupt durchliest? Du kannst eine konkrete Frage stellen, wenn du etwas nicht verstehst oder wenn es konkreter ist. Aber sich durch deinen Code zu wühlen und zu gucken was du falsch gemacht wird hier niemand tun.
  21. Like
    sas86ks reagierte auf neinal in Fi.de Bayern   
    Das ist natürlich schade. Aber das Gefühl kenn ich. Ich hatte überlegt zwischen Weihnachten und Silvester weg zu fliegen. Aber da ist das Problem ähnlich... Und schon wieder alleine Urlaub machen will ich irgendwie auch nicht...
     
    Kannst bei mir Urlaub machen. Und dich um meine Wohnung kümmern und mich bekochen, während ich in der Arbeit bin
     
  22. Like
    sas86ks hat eine Reaktion von neinal erhalten in Fi.de Bayern   
    3. Dezember lande ich wohl erst spät am Abend wieder in München. 
    Aber waren ja noch andere Daten zur Auswahl
  23. Like
    sas86ks reagierte auf Whiz-zarD in c# InvalidCastException   
    Natürlich kann man die Welt auch nur mit einer Klasse retten aber das ist nicht Sinn und Zweck der Objektorientierung.
    Bei der Objektorientierung kann man eigentlich jedes simple Problem in mehrere Klassen aufteilen. Wenn man es dann dogmatisch betrachtet, kann man es so weit führen, dass in jeder Klasse nur noch eine Methode steckt.
    Wenn du das Single-Responsibility-Prinzip verstanden und dir auch verinnerlicht hast, bekommst du auch ein Gespür dafür, wie Klassen und Methoden gestaltet werden müssen. Ein Beispiel: Wir wollen eine Klasse schreiben, die eine E-Mail verschicken soll. Das Interface sieht im ersten naiven Schritt so aus:
    public interface IEMailSender { public string From { get; set; } public string To { get; set; public string Title { get; set; } public string Content { get; set; } public void Send(); } Wir sehen hier, dass From und To vom Typ String sind. Da kann alles mögliche drinnen stehen. Wir müssen also prüfen, ob es valide E-Mail-Adressen sind. Der naive Gedanke wäre nun, eine private Methode in der Implementierung des Interfaces zu basteln:
    public class EMailSender : IEMailSender { public string From { get; set; } public string To { get; set; public string Title { get; set; } public string Content { get; set; } public void Send() { if(this.IsVaildEMailAddress(this.From) && this.IsVaildEMailAddress(this.To)) { // TODO: Versende E-Mail } } private bool IsVaildEMailAddress(string potentialEMailAddress) { // TODO: Überprüfung auf korrekte Adresse } } Aber ist die Validierung der E-Mail-Adresse wirklich die Aufgabe des E-Mail-Versenders? Nein.
    Muss der Versender den Titel und den Inhalt explizit wissen? Nein.
    Der E-Mail-Versender soll nur die E-Mail versenden. Mehr nicht.
    Also sollte man anfangen, die einzelnen Bestandteile zu zerlegen. Was brauchen wir denn alles für den E-Mail-Versand? Wir brauchen eine E-Mail und ein Versender. Die E-Mail ist noch mal unterteilt in eine Sender- und Empfänger-Adresse, Titel und Inhalt. Also:
    public interface IEMailSender {     void Send(EMail eMail); } public class EMailSender : IEMailSender {     public void Send(EMail email)     {         if(email == null)             throw new NullReferenceException();                      // TODO: Versende E-Mail     } } public class EMail {     public EMailAddress From { get; set; }     public EMailAddesss To { get; set; }     public string Title { get; set; }     public string Content { get; set; } } public class EMailAddress {     public string Address { get; } public EMailAddress(string address) { if(!this.IsValidFormat(address)) throw new FormatException(); this.Address = address; } private bool IsValidFormat(string potentialEMailAddress) { // TODO: Überprüfung auf korrekte Adresse } } Der E-Mail-Sender muss dann nur noch prüfen, ob er auch eine E-Mail zum Versenden bekommen hat. Die Validierung, ob die E-Mail-Adressen korrekt sind, passiert dann schon beim Setzen der E-Mail-Adresse.
    Der Aufruf erfolgt dann so:
    EMail email = new EMail { From = new EMailAddress("foo@bar.de"), To = new EMailAddress("bar@foo.de"), Title = "Hallo Welt", Content = "Ist das Wetter nicht schön?" } IEMailSender sender = new EMailSender(); sender.Send(email); Mit Dependency Injection könnte man dann noch den EMailSender in die Klasse reinreichen, wo er verwendet wird. Dann würde man innerhalb der Klasse nur noch gegen das Interface arbeiten und wäre von der konkreten Implementierung unabhängig.
    Wie du siehst, haben wir bei diesem Beispiel schon drei Klassen und ein Interface geschrieben.
    Ich kenne jetzt eure Beispiele in der Schule nicht aber wenn ich schon sowas lese, wie "Sitzplatz-Reservierungs-Programm", dann kann ich mir nicht vorstellen, dass man euch wirklich die Objektorientierung richtig erklärt, wenn ihr dafür nur eine Klasse geschrieben habt. Alleine wenn ihr schon eine GUI (WinForms oder WPF) verwendet habt, dann fallen mir schon spontan drei Klassen ein, die man dafür bräuchte, um das Problem gekapselt abzubilden. Das Stichwort wäre hier MVC (Model-View-Controller) bzw. MVP (Model-View-Presenter).
  24. Like
    sas86ks hat eine Reaktion von Klebrig erhalten in Wo wollt Ihr mal stehen?   
    Mein Ziel ist es mal bei einem Global Player zu arbeiten, also in der Größenordnung Google, Microsoft etc.
    Ich finde es einfach unheimlich motivierend wenn die Arbeit, die man selbst verrichtet einen großen Einfluss auf andere Menschen hat. Mir geht es gar nicht darum sagen zu können: "Schau das hab ich gemacht, toll oder?" Sondern mir gibt es ein gutes Gefühl wenn Sachen, an denen ich beteiligt war, von Menschen benutzt und für gut befunden werden.
    Auch wenn ich das Gehalt ebenso nicht als superwichtig empfinde, will ich schon genug verdienen um mir und meinen Kindern einen gewissen Lebensstandard zu sichern (was hier in München gar nicht so einfach ist).
  25. Like
    sas86ks reagierte auf Chief Wiggum in Scrollen Windows CE 6.0 IE Webseite   
    Schafft euch mal aktuelle Hardware an, die Geräte (und damit auch der Browser) sind 10 Jahre alt. Touch war damals mit Stiftbedienung.

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...