Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Portal
  • |
  • Mitglieder
Beiträge von mosspower
Thema: Suche Alternative zu Thread.Sleep in bestimmtem Szenario
Am im Forum: Rund um die Programmierung

Hallo dN!3L,

Gegenwärtig ist es so, dass alle asynchron laufen - das werde ich auch in das neue Framework so einbauen. Ich habe es bisher synchrones Ausführen nicht gebraucht, falls, dann kümmern sich die Jobs darum, bzw. laufen eben nur, wenn bestimmtes Ergebnis / Ereignis vorhanden ist / stattfand.

Könnte man aber locker mit einbauen, müsste man halt zwei Scheduler (asynchron / synchron) laufen lassen.

Trotzdem gute Idee für Erweiterungen, danke!

Gruß

Thema: [erledigt] Interface mit optionalen Methoden?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo JAck30lena,

naja, ich würde die ja nur dann aufrufen, wenn eine Implementierung vorhanden ist, bzw. wenn ein bestimmtes Attribute für eine Methode vorhanden ist. Somit ist sichergestellt, dass gewisse Arbeitsabläufe (Methodenaufrufe) durchgeführt werden können, wenn gewünscht, oder aber ausgelassen werden, falls nicht benötigt.

Bei den Untitests ist es ja z.B. auch so, dass es verschiedene Attribute gibt:

[ClassInitialize]
Einmalige Initialisierung innerhalb der Instanz (optional)

[ClassCleanUp]
Einmaliges Aufräumen innerhalb der Instanz (optional)

[TestInitialize]
Initialisierung vor Aufruf jeder Testmethode (optional)

[TestCleanup]
Aufräumen nach Aufruf jeder Testmethode (optional)

[TestMethod]
Die Testmethode (mandatory)

Thema: [erledigt] Interface mit optionalen Methoden?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo robert.wachtel,

stimmt, das wäre auch eine Möglichkeit, jedoch müsste ich dann, für alle optionalen Methoden (n) auch n-verschiedene Interfaces zur Verfügung stellen, die alle lediglich eine Methodensignatur enthalten.

Thema: Suche Alternative zu Thread.Sleep in bestimmtem Szenario
Am im Forum: Rund um die Programmierung

Hallo dN!3L,

Zitat von dN!3L
Warum führst du sie eigentlich asynchron aus?

Naja, es kann vorkommen, je nach Konfiguration, dass ein zeitkritischer Job zum Beispiel Arbeit für eine halbe Stunde hat (Abarbeitung pro Einheit in z.B. einer Sekunde) und dann ein anderer (ggf. auch zeitkritisch) vielleicht 5 Minuten, stehend vorher in der Queue, für die Abarbeitung benötigt, das würde bei einer synchronen Abarbeitung unter Umständen bedeuten, dass ein zeitkritischer Job fünf Minuten warten muss, bis er anfangen kann.
Zitat von dN!3L
Bei dir müsste dann ja evtl. nochmal die Timerzeit geändert werden.

Ja, gegenwärtig habe ich vor, dass immer die Timerzeit nach den ersten Eintrag in der Queue, also auf die kürzeste Wartezeit, angepasst wird.
Zitat von dN!3L
P.S.: Falls jemand Interesse an einem EJS, komplett mit Editor, remotefähig, Email-Benachrichtigungen, einfachen Datenbankzugriff, etc. hat, einfach melden :)

Gegenwärtig liest meiner in der App-Config alle Job-Deklarationen aus, das sieht dann so aus:

 <services>
      <service name="MMS orders matcher" class="OrdersMatchingService" prod.active="true" test.active="false" startOnHour="1" />
      <service name="MMS annulations matcher" class="AnnulationsMatchingService" prod.active="true" test.active="false" startOnHour="2" />
      <service name="MMS importer" class="MmsImporterService" prod.active="true" test.active="false" />
      <service name="MMS import sweeper" class="MmsImportSweeperService" prod.active="true" test.active="false" />
      <service name="Status data matcher" class="StatusMatchingService" prod.active="true" test.active="false" startOnHour="1" />
      <service name="UpToDate VNW notifier" class="VnwBuilderNotificationService" prod.active="true" test.active="false" />
      <service name="UpToDate VNW builder" class="VnwBuilderService" prod.active="true" test.active="false" />
      <service name="Legacy VNW builder" class="VnwBuilderServiceLegacy" prod.active="true" test.active="false" />
      <service name="Delivery mail importer" class="DeliveryMailImporterService" prod.active="true" test.active="false" />
      <service name="Delivery mail notifier" class="DeliveryNotificationService" prod.active="true" test.active="false" />
      <service name="TAT deployer" class="TatDeployerService" prod.active="true" test.active="false" />
      <service name="TOF deployer" class="TofDeployerService" prod.active="true" test.active="false" />
      <service name="UPS deployer" class="UpsDeployerService" prod.active="true" test.active="false" />
      <service name="UPS tracker" class="UpsTrackingReaderService" prod.active="false" test.active="true" />
    </services>

die werden dann mittels Reflektion gestartet. Unterstützt wird Mailing (Job-Reporting, Extern und Service-Mails, Benachrichtigunen), Logging (jetzt log4net), Auto-Exception-Handling bei Datenbank- und Netzwerkausfall, Message-Exchange, Handling für Konfigurationen, Auto-Serialisierung (und zurücksetzen beim Servicestart) von Job-Variablen

Remotingfähig werde ich den auch noch machen. Datenbank geht über meine NHibernate-Manger-Klasse

Thema: [erledigt] Interface mit optionalen Methoden?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

OK, vielen Dank erst mal für die Hinweise ... und ich dachte immer, what the heck with abstact classes, wenn es doch Interfaces gibt


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace TestProject {
  public abstract class BaseTaks {
    public abstract void Run();

    public virtual void PreRun() {
      // Empty
    }

    public virtual void PostRun() {
      // Empty
    }
  }

  public class BlubTask : BaseTaks {
    public override void Run() {
      Console.WriteLine("I'm running");
    }

    public override void PostRun() {
      Console.WriteLine("Post runner");
    }

    public static void Main() {
      BlubTask blubTask = new BlubTask();
      blubTask.PreRun();
      blubTask.Run();
      blubTask.PostRun();

      Console.WriteLine("Done ...");
      Console.ReadLine();
    }
  }
}

Das wäre wirklich eine Lösung, was mir hier nur nicht gefällt, sind die leeren (non-mandatory) Methoden in der abstrakten Basisklasse.

Naja, jetzt muss ich mich wohl entscheiden ... Attribute wären ja auch eine Alternative, wie z.B. bei den UnitTesting-Klassen


//
    // You can use the following additional attributes as you write your tests:
    //
    // Use ClassInitialize to run code before running the first test in the class
    // [ClassInitialize()]
    // public static void MyClassInitialize(TestContext testContext) { }
    //
    // Use ClassCleanup to run code after all tests in a class have run
    // [ClassCleanup()]
    // public static void MyClassCleanup() { }
    //
    // Use TestInitialize to run code before running each test 
    // [TestInitialize()]
    // public void MyTestInitialize() { }
    //
    // Use TestCleanup to run code after each test has run
    // [TestCleanup()]
    // public void MyTestCleanup() { }
    //
    #endregion

    [TestMethod]
    public void TestMethod1(int Hallo) {
      Console.WriteLine("Hollo");
      Assert.AreEqual(1, 1);
    }

Thema: Fragen zu Threading (Prio, Scheldule, Timer, Sleep, Sync, ...)
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

[EDIT=herbivore]Auf myCSharp.de gilt vom Grundsatz: "Nur ein Thema pro Thread" ([Hinweis] Wie poste ich richtig? Punkt 1.2). Diesen Thread hier habe ich nur ausnahmsweise stehen lassen, weil alle Fragen wenigstens ins gleiche Forum gehört und eine Aufteilung in diesem speziellen Fall noch unübersichtlicher wäre.[/EDIT]

Hallo "Kollegen",

ich habe ein paar Fragen bezüglich Threading.

1) Kann man Prioritäten, wie bei "herkömmlichen Threads auch" bei Threadpool-Threads setzen?

2) Wie lange wird in einem Thread die Ausführung durchgeführt, also wie lange bekommt ein Thread Zeit für die Abarbeitung, wenn alle Threads die gleiche Priorität haben? Kann man das steuern oder kann man sagen, dass jeder Thread für die Abarbeitung immer eine bestimmte Zeit, z.B. 100 Nanosekunden, beim Betriebssystem Windows XP ect. zugewiesen bekommt. Kann man das eventuell steuern oder einstellen?

3) Verwendet man grundsätzlich bei einem Thread, der zyklisch "laufen", bzw. dauernd laufen soll immer einen Timer oder lasst ihr euch manchmal zu Thread.Sleep hinreissen?

4) Benutzt ihr bei nicht Formsanwendungen (z.B. Consoleanwendung) den Formstimer, wenn ihr nicht sicherstellen könnt, dass die Ausführung der Timermethode länger dauert als das eingestellte Interval? Der "normale" System.Timers läuft ja immer im Interval, auch wenn die Methode noch nicht beendet ist. Eine Variable wäre hier imo eine schreckliche Lösung, dann kann ich ja gleich Thread.Sleep verwenden. Nimmt man dann also den Forms-Timer, obwohl es sich nicht um eine Formsanwendung handelt?

5) Was passiert eigentlich rein technisch im Hintergrund, wenn ich ein Objekt destroye, welches eine asynchrone Methode (müsste technisch eigentlich Background-Thread sein) aufgerufen hat und diese noch nicht abgearbeitet wurde? ThreadAbortException? Irgendwo muss ich doch Aufräumarbeiten durchführen können.

6) Was passiert eigentlich, wenn ein Timer läuft und in der Timer-Methode ein Objekt synchronisiert wird, z.B. lock, indem die komplette Abarbeitung dauerhaft länger dauert als das Timer-Interval? Werden dann die Anforderungen in eine Queue geschrieben?, so dass rein theoretisch der Timer stundenlang im "Rückstand" sein kann?

So, das war es auch schon wieder. Vielen Dank für eure Antworten schon einmal im Voraus - und nein, ihr müsst natürlich nicht jeden Punkt kommentieren.

Gruß

P.S. 7) Mir ist noch ein siebter Punkt eingefallen. Komme ich irgendwie an die Threads ran vor dem Aufruf (BeginInvoke?). Ich möchte z.B. eine einheitliche CultureInfo setzen.

Thema: Suche Alternative zu Thread.Sleep in bestimmtem Szenario
Am im Forum: Rund um die Programmierung

Hallo herbivore, hallo zommi,

ihr habt mich auf eine Idee gebracht, mit der ich in Zukunft ruhig schlafen kann ... das Thema Thread.Sleep() ging mir eigentlich schon lange auf den Senkel und ich hatte keine Lösung gefunden. Nun ist mir etwas eingefallen - würde mich auf einen Kommentar freuen, wenn die Umsetzung dann doch nicht so gut sein sollte.

1) Ich starte den Service, dieser startet den Controller in einem Thread.

2) In diesem Controller gibt es einen kleinen Scheduler, dieser läuft als Timer

3) Es gibt eine Queue, in der alle Teilservices hinterlegt sind, für die die nächste Startzeit vorliegen.

4) Das Interval im (Scheduler) Timer ist so eingestellt, dass immer bis zum nächsten Teilservicestart "getickt" wird, also erstes Item in der Queue - somit werden Leerlaufzeiten vermieden.

5) Nach jedem Aufruf der Run-Methode eines Teilservices wird der Eintrag aus der Queue entfernt

6) Der Aufruf der Run-Methode wird als asynchroner Methodenaufruf durchgeführt (BeginInvoke)

7) Nach dem Ende der Teilservice-Methode (Run) wird in der Callback-Methode (EndInvoke) abgefragt, wann nächster Start ist. Die Zeit wird dann in die Queue neu "reinsortiert"

8 ) Bei allen Teilservices besteht die Möglichkeit auch von selbst durch ein Event (z.B. Bestimmtes File im Filesystem oder Eintrag in Datenbank) nächstes Startevent im Scheduler anzumelden

Was haltet ihr von dieser Vorgehensweise? Ist das jetzt "sauber" umgesetzt? Leerlaufzeiten, um die ging es mir ja hauptsächlich, gibt es demnach nicht mehr und es werden Threads aus dem Threadpool (asynchrone Methodenaufrufe) verwendet.

Vielen Dank nochmal für eure Hilfe!

P.S. Was mir auch noch sehr wichtig war ist die Tatsache, dass ein Programmierer durch unsachgemäße handhabe des kleinen Frameworks, den Services als ganzes nicht mehr "runterziehen" kann. Vorher zum Beispiel, wenn er Thread.Sleep vergessen hätte, dann wäre der komplette Service auf über 50 Prozent CPU-Auslastung "geeiert". Jetzt müsste er das ja nicht mehr machen und eine Endlosschleife a la while(!AbortRequest) ist jetzt auch nicht mehr nötig.

Thema: Methodensignatur in Attributen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo "Kollegen",

wie teste ich eigentlich, neben Reflection wohlgemerkt, ob eine Methode den Anforderungen eines Attributes entspricht?

Beispielsweise gibt der Compiler beim TestMethod-Attribut einer Unittesting-Methode folgende Fehlermeldung zurück, wenn die Signatur nicht passt:

UTA007: Method TestMethod1 defined in class TestProject.UnitTest does not have correct signature. Test method marked with the [TestMethod] attribute must be non-static, public, does not return a value and should not take any parameter. for example: public void Test.Class1.Test().

Kann man die Signatur beim Aufbau des Attributes mit implementieren, oder muss man da einfach "Hand anlegen" und mittels klassischer Reflektion drübergucken?

Danke schon einmal für eure Antworten im Voraus.

Gruß

Thema: [erledigt] Interface mit optionalen Methoden?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo "Kollegen",

gibt es eigentlich Interfaces, bei denen man Methoden optional deklarieren kann? Mit optional meine ich, dass die Methoden nicht implementiert werden müssen.

Nehmen wir mal ein Beispiel-Interface einer Testklasse ...


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace SemaphoreTest {
  interface ITest {
    public void Init();
    public void PreRun();
    public void Run();
    public void PostRun();
    public void CleanUp();
    public void RunRequestMonitor();
  }
}

Jetzt muss, und um das muss geht es mir, jede Klasse, die das Interface implementiert auch alle Methoden implementieren. Gibt es jetzt eine Möglichkeit, nur bestimmte Methoden als mandatory zu kennzeichnen? Es ist ja nicht gerade "dolle", wenn man leere Implementations-Methoden macht, nur damit sie halt "da sind".

OK, man könnte ja auch die "mandatory" im Interface lassen und für die restlichen Attribute verwenden.

Hat jemand noch, neben den Attributen, eine Idee?

Thema: Suche Alternative zu Thread.Sleep in bestimmtem Szenario
Am im Forum: Rund um die Programmierung

Hallo "Kollegen",

ich zermartere mir für meine Problemstellung, die ich gleich nennen werde, schon länger den Kopf und finde einfach keine Lösung (vielleicht brauche ich ja auch keine und kann beim Thread.Sleep bleiben, who knows).
Es ist ja verpönt, Thread.Sleep zu verwenden, erst recht, wenn ein Code nichts macht, z.B. nächster Start in zwei Stunden und dann immer nach einer Sekunde schaut ob Arbeit vorhanden ist, dann läuft der natürlich die ganze Zeit "leer".
Ich habe auch den Microsoft Webcast zum Thema Multithreading angesehen und mir im Web näheres zum Thema Multithreading angeeignet. Nur für meine Problematik finde ich keine Lösung.

Erst mal zum Hintergund. Ich habe gegenwärtig einen Windows Service laufen, der nach dem Start einen Thread startet, die sogenannte Controller-Klasse. In dieser werden voneinander unabhängige Threads als Teilservices, konfiguriert in meinem kleinen Windows-Service-Framework, gestartet. Somit können eigenständige Module in den Service integriert werden.

Mir ist bewußt, dass es Programmierer gibt, die hier einen anderen Lösungsansatz verfolgen würden, z.B. eigenständige Programme gesteuert mit Scheduler, wie z.B. Quartz. Ich will aber beim Service bleiben.

Hier ein paar Beipiele für sog. Teilservices im Service.

a) Täglicher Abgleich von Datenbanken
b) Monatliches Erstellen von PDFs
c) Durchgehendes Importieren von Files
d) Informationsbeschaffung aus dem Internet von verschiedenen Seiten (stündlich)

Die Aufgaben hören sich natürlich Unterschiedlich an, gehören aber alle zum gleichen Projekt.

Im Taskmanager laufen gegenwärtig so um die 35 Threads. Die CPU-Auslastung wechselt beim Server, nennen wir die Kiste "Serverchen mit 3.5 GHz", von 0 auf 1 Prozent im Sekundentakt und wieder auf 0. Also keinerlei Performance-Probleme.

Nur wie kann ich das, technisch gesehen, richtig programmieren?

Alle Teilservices laufen in einer Endlosschleife, Endbedingung ist, wenn Flag gesetzt wird, z.B. beim Runterfahren des Services und natürlich am Ende der Schleife mit Thread.Sleep im Sekundentakt.

Wie gesagt, ich habe keinerlei Performanceprobleme, nur ein schlechtes Gewissen, weil das ja verpönt ist. Vielleicht kann mir ja doch einer den richtigen Hinweis geben, wie ich das umgehen kann.

Gruß und Danke schon einmal für etwaige Antworten im Voraus.

P.S. Timer sind imo nicht die Lösung, da Threads in Kontext mit meinem kleinen Windows-Service-Framework flexibler sind und Timer ja auch letztendlich Threads sind, die imo doch auch irgendwo eine Art Thread.Sleep implementiert haben müssen.

Thema: log4Net - ArchivRollingFileAppender
Am im Forum: .NET-Komponenten und C#-Snippets

Archivierungsanpassung für RollingFileAppender

Ich habe den RollingFileAppender nach meinen Wünschen so angepasst, dass eine automatische Archivierung in Unterverzeichnissen nach einem Tageswechsel stattfindet. Gegenwärtig ist es ja so, dass im Logverzeichnis an das File nach einem Tageswechsel lediglich das Datum angehängt wird.
Diese Vorgehensweise habe ich auch angepasst. Es ist nämlich total nervig, wenn man z.B. das File LoggingTest.log.2019-02-28 nicht mit einem Doppelklick aufmachen kann. Ich habe das jetzt so angepasst, dass die Dateiendung auf .log bleibt, also das Datum reingebaut, nämlich LoggingTest-2019-02-28.log.

Archiviert wird folgendermaßen:

Es wird, wenn nicht vorhanden, ein Archivordner angelegt,
dann, wenn nötig, Jahresordner (yyyy),
dann, wenn nötig, Monatsordner (MM) - in diesen wird dann das archivierte File geschoben ...

Also, Struktur für obiges Beispiel:

|- Archiv
 |- 2019
  |- 02
   |- LoggingTest-2019-02-28.log

log4net, RollingFileAppender, logging

Alles wurde mit 3.5 kompiliert

Gruß

Thema: Wie steht ihr zu diesen Clean-Code-Empfehlungen?
Am im Forum: Rund um die Programmierung

Hallo "Kollegen",

ich habe mir das Buch Clean Code: A Handbook of Agile Software Craftsmanship "reingezogen" und fand es sehr hilfreich. Trotzdem werden in diesem Buch einige Standpunkte, bzw. Vorgehensweisen vertreten, die ich so nicht unterstützen kann. Diese möchte ich aufzählen und begründen.

Ich würde mich freuen, wenn ich von erfahrenen Entwicklern diesbezüglich ein kleines Feedback bekommen könnte, so dass ich ggf. meine Ansichten revidieren kann (oder muss).

1) Rückgabe von Object, das nie null ist, sondern "leere" Instanz
Beispiel:


public IList<String> GetList(bool bla) {
  List<String> back = new List<Sting>();

    if(bla) {
      // ... bla blub do something
   }
 
  return back;
}

Es wird ausdrücklich darauf hingewiesen, dass leere Instanzen erstellt werden sollen und keine Null-Referenzen.
Ich würde obigen Code nie so reinstellen, sondern null zurückgeben, wenn bla nicht true ist, und back würde ich mit null deklarieren.
Was spricht dagegen? Wird bei dieser Vorgehensweise nicht auch Speicherplatz gespart? OK, auf der anderen Seite muss natürlich immer auf null geprüft werden, nach dem Aufruf, das sollte aber imo immer der Fall sein, das setzt gute Programmierung voraus.

2) Interfacenamen beginnen in einer Factory nicht mit dem "herkömmlichen" I, da es, so der Autor, der Benutzer nicht wissen muss ob es sich um ein Interface handelt, da dies ablenken könnte. Nun, ich benutze im Namen von Interfaces (ob Factory oder nicht) immer mit vorangestelltem I.

3) Es werden bei einzeiligen Anweisungen, z.B. nach einer Schleife oder einer Bedingung keine Klammern gesetzt

Beispielcode:


  while(true)
    if(true)
      doSomething();
  if(true)
    doMore();

Ich finde das keinen schönen Stil. OK, ich muss mehr schreiben (Klammern), jedoch denke ich nicht, dass dies ins Gewicht fällt. Ich würde immer Klammern verwenden. Obiger Code würde dann so aussehen:


  while(true) {
    if(true) {
      doSomething();
    }
  }

  if(true) {
    doMore();
  }

4) Wird ein Objekt übergeben (by Reference) und dieses manipuliert, dann soll dieses explizit zurückgegeben werden.

Beispielcode:


public StringBuffer ManipBuffer(StringBuffer inBuffer) { ...

Was spricht denn hier für diese Vorgehensweise? Ich bin hier folgendes gewohnt:


public void ManipBuffer(StringBuffer inBuffer) { ...

5) Ein heikles Thema, Klammerung. Ich habe anfänglich die Klammerung auf gleicher Spaltenebene (also untereinander) gesetzt (und lieben gelernt). Dann kam ich auf ein Projekt, wo die Klammerung so verwendet wurde, dass die öffnende Klammer in der gleichen Zeile gesetzt wird. Ich habe das dann so verinnertlicht, dass ich bei dem übernächsten Projekt mir Klammern untereinander nicht mehr aneignen wollte - das bläht den Code nur auf und entgegen vielen Behauptungen ist der Code nicht übersichtlicher. Wie macht ihr die Klammerung und warum ... man kann ja Gott sei Dank mit eigenen Formattern die IDE so einstellen, dass die Klammern nach Wunsch gesetzt werden.

6) Der Autor sagt, dass nicht immer ein einziges Return-Statement Sinn macht, z.B. bei kleinen überschaubaren Methoden,

Beispielcode:


public int GetCode(bool blub) {
  int ret = int.MinValue;

  if(blub) {
    return 1;
  }
  else {
    return 2;
  }  
}

Ich würde trotzdem immer nur einen Ausgang aus einer Methode bevorzugen, da bin ich konsequent.

7) Zugriffe auf Variablen. Ich sehe immer wieder, dass "einfach nur" der Variablenname (ob nun Instanzvariable, Klassenvariable oder lokale Variable) - letzters macht ja Sinn, geht nicht anders, beim Zugriff verwendet wird.

Ich habe mir folgendes angewöhnt:

Bei Instanzvariablen immer den this oder base-Operator voranstellen, dann weiß man sofort, um welchen Typ (und wo sie beheimatet ist) es sich bei der Variablen handelt.

Bei Klassenvariablen schreibe ich immer die Klasse davor (auch wenn sich die Klassenvariablen in der gleichen Klasse befindet, um so eine Abgrenzung von lokalen Variablen sichtbar zu machen).

8.) Horizontale Ausrichtung

Ich sehe immer wieder folgende Variablendeklarationen:


private   Socket         socket;
protected String         output;
protected FitnessContext fitnessContext = null;

Das kann ja für den ein oder anderen übersichtlich aussehen, jedoch macht es bei Änderrungen einen großen Aufwand, wenn ein Variablenname länger ist als der bisher längste, denn dann müssen alle engepasst werden, somit bleibe ich bei folgenden Deklarationen:


private Socket socket;
protected String output;
protected FitnessContext fitnessContext = null;

9) Mehrfachaufrufe in einer Zeile

Es wird empfohlen, aus folgendem Aufruf:


final String outputDir = ctx.getOptions().getScratchDir().getAbsolutePath();

folgenden zu machen:


Options opts = ctx.getOptions();
File scatchDir = opts.getScratchDir();
final String outputDir = scratchDir.getAbsolutePath();

Nun denke ich schon, dass dies Sinn macht, jedoch benutze ich erste Zeile immer dann, wenn ich auf jeden Fall weiß, dass es nicht krachen kann (NullReferenceException), dann kann man schon mal alles in eine Zeile packen.

10) Komplexe Bedingungen sollten in eine Methode ausgelagert werden.

Beispielcode:


  if(!bla && gedoens && i > 5) { ...

soll ausgelagert werden zu ...


  public bool IsAccess(bla, gedoens, i) {
    return !bla && gedoens && i > 5;
  }

OK, die Parameter müssen natürlich nicht übergeben werden, wenn es sich um Instanzvariablen handelt, jedoch finde ich die Vorgehensweise nur dann Sinnvoll, wenn diese Abfrage öfters als einmal verwendet wirde - ansonsten würde ich hier keine neue Methode schreiben.

Unter dem Strich fand ich das Buch natürlich sehr hilfreich. (In der Regel kann man immer was von jemand lernen, der jahrzehntelang programmiert hat UND, jetzt kommt das Wichtige, einigermaßen mit der Zeit geht :D)

OK, das war es erst mal. Aufruf an alle "Nitpicker" wird nun gestartet!

Danke schon mal für die Teilnahme an der Diskussion im Voraus.

P.S. Ihr müsst natürlich nicht jeden Punkt kommentieren.

Thema: Control für Logging Files
Am im Forum: GUI: Windows-Forms

Hallo voidcore,

ich habe eigens für diese Problematik ein Console Logger Control entwickelt. Klickst Du >> hier <<

Thema: Thunderbird: Beim Start soll Inbox ausgewählt sein
Am im Forum: Smalltalk

Hallo "Kollegen",

so auf die Schnelle habe ich jetzt im Web nichts gefunden. Ich habe ein Problem bei der Darstellung im Thunderbird, nachdem ich jetzt nur noch ein Konto habe (das alte bei einem Provider ist ausgelaufen). Früher war es immer so, dass der Inbox-Folder aktiv war, das beduetet, ich bin auf Get-Mails gegangen und in der Inbox wurden mir alle Mails angezeigt. Jetzt ist das so, dass ich immer explizit (also einmal pro Session) auf Inbox klicken muss, um alle Posteingänge sehen zu können - das ist total nervig. Eine Einstellungsmöglichkeit habe ich auch noch nicht gefunden. Kennt jemand dieses Problem und einen Lösungsansatz?

Danke schon mal für eure Hilfe im Voraus.

Gruß

Thema: XML deserialisieren
Am im Forum: Datentechnologien

Also ich hatte da noch nie Probleme beim Mappen. Auf den ersten Blick würde ich sagen, dass ich das XmlRoot-Attribute nur einmal bei einer Klasse verwende und bei den restlichen Klassen immer XmlElement.

Gruß

Thema: "Es gibt keinen Gott"-Kampagne
Am im Forum: Smalltalk

Zitat von JAck30lena
... in bayern gehen die sogar ncoh einen schritt weiter und nehmen grundsätzlich von jedem die kirchensteuer ein, welche man anschleißed wieder am jahresende bei der steuererklärung wieder zurückverlangen kann, vorrausgesetzt man ist aus der kirche ausgetreten. somit zahlen prinzipiell alle erstmal. unabhängig ihrer konfession.

ob sie das mittlerweile geändert haben weiß ich allerdings nciht. hier ist ja die CSU am regieren....

Nö, das ist definitiv nicht mehr so. Ich zahle in Bayern schon länger keine Kirchensteuer mehr ... und die Allmacht der CSU sollte ja mindestens seit der letzten Wahl (endlich auch) gebrochen sein.

Thema: Clickonce vs. ASP.NET-Anwendungen
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Zitat von onlinegurke
Naja, ich würde es weniger von der Größe der Anwendung abhängig machen als vielmehr von der Häufigkeit der zu erwartenden Aktualisierungen. Wenn eine Anwendung nur ein- zweimal im Jahr aktualisiert werden muss, dann darf der Deploymentaufwand auchmal etwas höher sein. Wenn du jetzt was hast, was sich quasi täglich ändern kann dann Webanwendung.

Hm, das verstehe ich jetzt aber nicht so ganz. Es ist doch völlig egal, ob ich fünfmal am Tag Änderrungen beim Webserver einspiele (ggf. ist der Server down, je nach Art der Einspielung) oder fünfmal am Tag der Client sich das neuste Update zieht, wo ist denn hier der Unterschied?

@All,

nehmen wir mal ein Beispiel. Im Lager soll es mehrere Abfertigungsprogramme für den Versand geben. Jetzt gibt es drei Möglichkeiten.

a) Webanwendung
b) Interne Remoting-Anwendung (Logik auf dem Server), wie nennt man das eigentlich? "Thin-Client" in Hochkommata?
c) Fat Client (Logik auf dem jeweiligen Client)

B und / oder C sind dann doch, vorausgesetzt die arbeiten alle mit Windows, die bessere Lösung, da der Entwicklungszeitraum für Windowsapplikationen doch imo schneller geht. Auch sind die nötigen Funktionalitäten, bzw. Anforderungen schneller umzusetzen, als wenn man da zig AJAX-Lösungen reinmacht.

Imo sollte dann doch b hier immer die bevorzugte Lösung sein, oder? Bis vor kurzem hätte ich mich immer für Webanwendung entschieden.

Thema: Codec Control
Am im Forum: .NET-Komponenten und C#-Snippets

Hallo Lion1984,

alle hier von mir geposteten Controls sind private Entwicklungen, die aber auch, nach Rücksprache, in der Arbeit eingesetzt werden dürfen.

Thema: Clickonce vs. ASP.NET-Anwendungen
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Hallo "Kollegen",

ich möchte hier einmal eine Diskussion eröffnen, wann man und ob man überhaupt Clickonce-Anwendungen (hier meine ich eigenlich Windows-Applikationen, ob nun Forms oder WPF sollte egal sein) und wann ASP.NET-Anwendungen einsetzt werden sollten.

Bis vor kurzem habe ich ja immer Webanwendungen bevorzugt. Ich kannte zwar Java-Webstart, das sich aber nie so ganz durchgesetzt hat. Als ich soetwas bei uns im Unternehmen benötigte, bin ich auf Clickonce gestoßen. Auch habe ich privat zwei Anwendungen laufen, die mit Clickonce arbeiten. Also, ich finde diese Technologie als sehr gute Alternative für Webanwendungen. (Eigentlich sind ja die Clickonce-Anwendungen auch teilweise Webanwendungen).

Was spricht eigentlich dafür und was dagegen? Ich würde mal sagen, dass kleine Programme, wie z.B. Downloadprogramme, Administratoren usw. nicht unbedingt eine Webanwendung sein müssen, hier reicht doch völlig eine Clickonce-Anwendung aus.

Der Nachteil ist sicherlich, dass man, je nach Komplexität der Anwendung, einen eigenen kleinen Server programmieren muss, der die Anfragen entegennimmt und verarbeitet, wie es ja ein Webserver bei Webanwendungen macht.

Wie würdet ihr eigentlich auf die Datenbank gehen? Über "Umweg" einen Server (kleine Konsoleanwendung via z.B. WCF ect.) oder direkt auf eine Datenbank gehen (was ich noch nie gemacht habe, bzw. das sollte doch imo nicht gemacht werden, oder? ... das doch eine große Sicherheitslücke)

OK, die Diskussion ist eröffnet. Ich freue mich auf rege Teilnahme .. und danke schon einmal für eure Meinungen und Erfahrungsberichte im Voraus.

Thema: Codec Control
Am im Forum: .NET-Komponenten und C#-Snippets

Hallo tom-essen,

na, das ging aber schnell, hatte schon drauf gewartet, dass das kommt ...

ich gehe eigentlich davon aus, dass das klar sein sollte, dass man den .NET Reflector nicht verwenden sollte. Das Teil wird von mir privat genutzt und auch in der Firma um etwas mal schnell zu verschlüsseln - wenn jemand da unbedingt rankommen will, was ich nicht glaube, denn ich bin ja der Unbekannte User mosspower, dann nutzen ja auch Obfuscatoren nix.

Lass Dir aber versichert sein, dass die wichtigste Codezeile bei mir (also in der Firma und privat) anders aussieht und die zugrundeliegenden Coding-Files auch andere sind.

Thema: Codec Control
Am im Forum: .NET-Komponenten und C#-Snippets

Alles wurde mit 3.5 compiliert. Testbeispiel anhängend. Entgegen meinen bisherigen Gepflogenheiten werde ich den Quellcode hier nicht posten, warum sollte nachvollziehbar sein ... viel Spass damit

Thema: Codec Control
Am im Forum: .NET-Komponenten und C#-Snippets

Anmeldung des Controls:
Im Ordner Codec die DLL UI.Control.Codec.dll auswählen und dann einfach wie gewohnt auf Form ziehen.

Propery Locale (Englisch, Deutsch) kann ausgewählt werden, für Anzeigetexte und Fehlertexte.

Datum-Textfeld setzt bei Shortcut t(Englisch) und h(Deutsch) heutiges Datum - bei Zahl, z.B. 5, wird der 5. des aktuellen Monats verwendet.
Es kann auch ohne Datumsangabe verschlüsselt werden, jedoch ist dann natürlich die Verschlüsselung immer gleich, bei Datumsangabe muss beim Rückverschlüsseln das richtige Datum angegeben werden.

Format Deutsch: dd.MM.yyyy
Format Englisch: yyyy/MM/dd

Button Encode
Hiermit wird verschlüsselt

Button Decode
Hiermit wird entschlüsselt

CheckBox enable line feeds:
Unterstützt Zeilenumbrüche, also für längere Texte (hier kann dann beim Verschlüsseln auch Zeilenumbrüche gecoded werden)

CheckBox adjust for XML:
Das ist nützlich, wenn man z.B. in XML Dateien verschlüsselten Code hat, wie z.B. &amp;Bla, dann wird das so angepasst, bzw, wenn ><& oder '-Zeichen gecoded wird, dann wird das gleich in XML-Code umgewandelt.

CheckBox match length
Die Länger der Eingabe ist gleich die Länge der Ausgabe, also immer gleich lang

Thema: Codec Control
Am im Forum: .NET-Komponenten und C#-Snippets

Ver- und Entschlüssler

Wenn man schnell mal einen Text (z.B. Connectionstrings, Zugangsdaten ect.) verschlüsseln muss (und diese auch wieder entschlüsseln), könnt ihr in Zukunft dieses Control benutzen. Screenshot sieht so aus:

Coding, Codec, Verschlüsseln, Entschlüsseln

Thema: string vs. String - coding style ?
Am im Forum: Rund um die Programmierung

Also ich mische auf keinen Fall. Da ich aus der "Java-Welt" komme, schreibe ich lediglich Object und String mit großem Anfangsbuchstaben (also .NET-spezifisch) und die primitiven Datentypen (int, double ect.), also C#-spezifisch, bleiben dann wie sie sind. Ist in Java auch so. Was mich ein bißchen aufregt, sind die Generatoren, z.B. bei einer Dictionary<String, String>, dann wird immer = new Dictionary<string, string> in den Quellcode "reingebuttert".

Thema: [erledigt] Control.Invoke vs. this.Invoke
Am im Forum: GUI: Windows-Forms

@herbivore,

super, vielen Dank, dann hat sich das geklärt

@marsgk,

war auch ein sehr interessanter Link - vielen Dank!

Thema: [erledigt] Control.Invoke vs. this.Invoke
Am im Forum: GUI: Windows-Forms

Hallo "Kollegen",

eine kleine Verständnisfrage. Beim Threading mit Windows Forms Applikations, bzw. beim Zugriff auf Controls, ist es ja nötig, dass man an den Hauptthread, bzw. and den, der das Control erstellt hat, Manipulationen an dem Control durchführt. Jetzt hatte ich hier immer gelesen, dass man das dann mittels Control.Invoke durchführen muss. Was geht da eigentlich "ab" im Hintergrund. Bedeutet dies, dass man "nur" an diesem Control Manipulationen durchführen darf (das glaube ich nicht) oder läuft im Hintergrund "einfach" ein this.Invoke ab, wobei this eine Instanz des Controlerstellers ist. Was ist der Unterschied, wenn es denn überhaupt einen gibt.

Gruß und danke schon einmal für eure Antworten im Voraus.

Thema: "Es gibt keinen Gott"-Kampagne
Am im Forum: Smalltalk

Ich, als "Nicht-Voll-Atheist", was immer das jetzt auch sein mag, musste wirklich herzlich lachen, als ich den Satz in den Klammern gelesen habe ... [Mit an Sicherheit grenzender Wahrscheinlichkeit] ... LOL, also doch nicht so ganz sicher

Thema: Euer Desktop...
Am im Forum: Smalltalk

Meiner sieht seit Jahren so aus ...

Thema: Task Manager - Thread (Objekte) aufräumen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo "Kollegen",

mir ist gerade aufgefallen, dass gestartete Threads, die bereits abgelaufen sind, also Thread-Methode ist zu Ende, trotzdem im Windows Task Manager erscheinen. Ist das OK so? Sorgt hier irgendwann der GC dafür, dass die nicht mehr angezeigt werden? Blöd ist schon, wenn ich meine Applikation zwei Minuten laufen lasse, dass da schon mal über 100 stehen und dann immer weiter hochgezählt werden obwohl die längst nicht mehr laufen, bzw. der Status auf ThreadState.Stopped steht. Ist das alles OK so oder läuft da was "aus dem Ruder"?

Gruß und Danke für etwaige Antworten schon einmal im Voraus.

Thema: Event, wenn Item zu ComboBox geadded wird
Am im Forum: GUI: Windows-Forms

Ich habe meherere Layoutcontrols, hier das LayoutComboBoxControl. In diesem ist eine Combobox, ein Label für den Header und ein Label für eine Fehlernummer links neben der Combobox untergebracht. Ferner gibt es mehrere Möglichkeiten für Propertyeinstellungen, u.a. die Möglichkeit, dir im Header-Label zum Schluß die Gesamtanzahl der Einträge anzeigen zu lassen, z.B. Header Bla (13) ... jezt hatte ich nach einen Weg gesucht, dass wenn diese Option gesetzt ist, dass dies automatisch gesetzt wirde - leider vergebnes.

Ich kann jetzt immer manuell das aufrufen ... oder festschreiben, dass jeder Bindinglist verwenden muss ... oder ich lasse einen Thread laufen, der die Anzahl abchecked und immer bei Änderrungen die Handlung durchführt