Laden...
Avatar #avatar-3029.jpg
Benutzerbeschreibung

Forenbeiträge von Midnight Run Ingesamt 80 Beiträge

13.09.2011 - 10:31 Uhr

Danke für deine Hilfe. Ich werde es mir nun ansehen.

Gruß

13.09.2011 - 10:07 Uhr

Hallo FZelle,
den Button zu deaktivieren, wäre der einfachste Workaround, würde aber nicht das Problem beim schließen der Anwendung beheben.

Ich habe bereits mich eingelesen bei dem Tutorial von Albahari zum Thema, aber so spezifisch geht er darauf nicht ein.

Kennst du den eins ? Mich hat es schon gewundert, dass bei vielen Open Source Projekten auch so gearbeitet wird.

Gruß

13.09.2011 - 09:36 Uhr

Hallo Freunde,
leider klappt es mit den Thread nicht so wie ich möchte, aber diesmal will ich alles sauber lösen.

Problem :
Diagnosetool, welches per Button Click ein Verzeichnis Überprüft, sprich es wird iteriert ob es bestimmte Dateien im Verzeichnis gibt. Dies soll sukzessiv angezeigt werden.

Also :

Datei 1 gefunden
Datei 2 nicht gefunden
etc ...

Danach wird noch ein Bild generiert, welches den Status Wiedergeben soll.

Dies geschieht alles in der Methode "Analyse". Nun hat der Entwickler vor mir, die komplette Methode in einem Foreground Thread starten lassen :


        private void btnStart_Click(object sender, EventArgs e)
        {
            tbOutput.Text = ""; 
            System.Threading.Thread analyseThread = new System.Threading.Thread(Analyse);
            analyseThread.Start(); 
        }

Das sukzessive Verhalten, wurde durch Invokes erreicht.

Nun ist es aber so, dass wenn man den Button zwei mal klickt der erste Thread noch weiterläuft oder wird das verhindert durch das neue erstellen des Threads:

System.Threading.Thread analyseThread = new System.Threading.Thread(Analyse);

???

Ein weiteres Problem, welches ich feststellte ist, dass wenn der Thread läuft und ich das Programm beende, dieser natürlich in eine Exception läuft, da die Form weg ist, aber der Invoke oder das Bild auf diese Zugreifen wollen.

Nun habe ich mir einige Artikel durchgelesen, aber komme der Lösung nicht nahe.

Ich würde denken, dass wenn man den Button zwei mal bspw. klickt, zuerst sichergestellt werden muss, dass der noch laufende beendet wurde.

Ich habe bei Stackoverflow den Artikel Is there a way to indefinitely pause a thread? gelesen und auch so umgesetzt, doch bei dem Thread.Join() hängt sich die Anwendung auf.

Ich habe es genauso umgesetzt, wie es Brannon beschreibt.

Auch bei schließen der Anwendung, also beim FormClosing Event, würde ich dieses prüfen.

Ich habe mich gestern ein wenig durch CodePlex Projekte gearbeitet um zu sehen, wie es andere lösen und fand ziemlich oft das Application.DoEvents() welches ich aber vermeiden will.

Habt ihr ein paar Lösungsansätze ?

Gruß

30.08.2011 - 15:25 Uhr

Hey,
und die Background Worker Class ist einfach nur ein Wrapper um einen Backgroundthread ?

Dort gibt es ja schon die Ereignisse "OnProgress" und "OnCompleted".

Mir fällt gerade kein Szenario ein, wann eine Applikation mit einem Thread weiterlaufen sollte. Vielleicht um Inkonsistenz zu vermeiden ?

Gruß

30.08.2011 - 11:28 Uhr

Heißt das eigentlich, dass ich einfach ein Thread.IsBackground = true setzen könnte und somit einen Background Thread hätte ?

Das Application.DoEvents() nutze ich nur dafür um zu warten bis die arbeiten vorbei sind.

Wie entscheidet man den wann man einen Backgroundworker nutzen will, den Threadpool oder selbst den Thread erstellt ? Gibt es da so paar Dinge nach denen man sich richten kann ?

Gruß

24.08.2011 - 16:46 Uhr

Hi,

Wo meinst du denn so eine Überprüfung zu benötigen?

Ich habe öfters gehört, dass es guter Stil ist, seine Methoden klein zu halten, also eine spezifische Aufgabe zu erfüllen um die Übersicht zu behalten. Wenn ich mir nun eine komplexe Aufgabe vorstelle und diese in einem Thread bearbeiten möchte, treffe ich auf diese Problem.

Natürlich kann ich alles fein ausarbeiten, aber ihr kennt das sicher wenn man sich 1 - 2 Monate wieder an das Projekt setzt, dass man erstmal wieder davor steht wie der Ochs vorm Berg 😃

Ich bedanke mich für eure Antworten, danke ich werde mir alles nochmal ansehen 😉

24.08.2011 - 16:31 Uhr

Hey,

Es wird ja eine komplette Iteration gewartet

Ich meinte, dass einmal die Iteration durchlaufen werden muss, bis wieder die Abfrage durchgeführt wird. Bei bspw. langen Datenübertragungen wäre dies mit einer langen Wartezeit verbunden.

Aber was ist wenn die Operationen innerhalb der Schleife viel Zeit in Anspruch nehmen.

Dann kann in der langen Operation an bestimmten Stellen auch _stopThread geprüft werden.

Das bedeutet wenn ich in meinem Thread mehrere Methoden aufrufe, sollte man auch diese mit einer Überprüfungen ausrüsten ? Mir würde das jetzt aus dem Kopf dann zu Komplex werden oder verstehe ich da was falsch ?

Danke für deine Antwort

24.08.2011 - 16:24 Uhr

Hallo,
danke für eure zahlreichen Antworten. Ja, leider tue ich das 1:1 so, wie in meinem Beispiel, aber ich verspreche Besserung.

Ich arbeite leider mit .NET 3.5. Deswegen fallen die Lösungen mit .NET 4.0 weg.

Zu diesem Code habe ich eine Frage :


void run() {
   while(!_stopThread) {
      [DoSth]

      if([condition])
         break;

      [DoSth]
   }
}

Es wird ja eine komplette Iteration gewartet bis _stopThread true ist. Aber was ist wenn die Operationen innerhalb der Schleife viel Zeit in Anspruch nehmen.

Sollte man den Benutzer warten lassen ?

Und was ist wenn der Thread nicht aus Schleifenoperationen besteht. Sollte man dann in gewissen Abständen überprüfen ob der Boolean true ist ?

Danke

24.08.2011 - 16:05 Uhr

Hallo,
ich habe da eine grundlegende Frage zum Thema Threading. Um genauer zu sein wie beende ich einen Thread sauber inmitten seiner Arbeit.

Ich habe mir ein paar Sourcecodes angesehen und diese bedienen sich oft dem Methode Thread.Abort().

Im Internet, bei Stackoverflow.com, habe ich einen Beitrag gelesen indem dieses Vorgehen als falsch betitelt wurde, da die Abort Methode nur bei ernsten Fällen eingesetzt werden sollte.

Man sollte lieber mit einem Boolean arbeiten, der, falls er einen bestimmten Zustand erreicht hat(true/false) aus dem Thread springt.

Meine erste Frage ist daher, wie macht man es richtig ?

Ich arbeite oft nach diesem Muster :

Thread t = new Thread(delegate()
{
  // Code
});

t.Start();

while(t.IsAlive)
{
  Application.DoEvents();
}

Meine nächste Frage ist, wie beende ich einen Thread sauber, wenn der Benutzer plötzlich das Programm schließt. Im Debugmode erkenne ich das, dass Programm noch läuft, sprich der STop Button ist noch eingeblendet.

Das würde bedeuten, dass wenn der Benutzer dies tut auch immer noch der Thread bei ihm läuft, oder ?

Ich habe zur Zeit ein Programm das viele Daten über FTP bezieht und der Benutzer könnte einfach das Programm genau bei diesem Prozess schließen. Wie kann ich dann den Thread sauber stoppen ohne Thread.Abort() ?

Danke für eure Hilfe

11.05.2011 - 14:23 Uhr

Hallo,
meine Frage ist ob es möglich ist in XSLT 1.0 einen Wert zu überprüfen auf das mehrfache vorkommen eines Zeichens.

Als Beispiel habe ich folgende XML Datei :

<node>
<value>123</value>
<value>ABC</value>
<value>1ABAA</value>
</node>

Jetzt möchte ich zum Beispiel nur die Werte bekommen die 3 mal das "A" besitzen. Das wäre in diesem Fall nur der Wert "1ABAA". Wie könnte ich da dran kommen ?

Danke

30.03.2011 - 16:00 Uhr

Hey Leute,
danke für eure Hilfe.

Ich denke mal ich muss da einfach tiefer gehen um euch das Problem nahe zu legen.

  1. Im System befinden sich ein Server und mehrere Clients.
  2. Es wird manuell am Server die IP Adressen der Clients eingetragen.
  3. Der Server versucht, dauerhaft, die Clients zu erreichen und mit Daten zu beliefern( siehe Abbildung 1)

Abbildung 1 :
siehe Anhang

  1. Die Clients bearbeiten diese Dateien, aber nur eine ist von Wichtigkeit.
  2. Nun ist eben die Problemstellung, die Datei zu beziehen. Wann oder dauerhaft. Qualitätsmerkmale für diesen Prozess ist eben so Bandbreiten sparend wie möglich zu sein und auch wirklich nur auf Änderungen zu reagieren.
  3. Das Problem mit dem Rückkanal vom Client zum Server ist, das die Clients sich bewegen. Das heißt sie können eine kurze Zeit lang nicht im System sein und erscheinen dann wieder.
    Wenn nun gerade bei der Benachrichtigung vom Client zu Server keine Verbindung besteht ist dies natürlich schlecht. (Abbildung 2)

Abbildung 2 :
siehe Anhang

(rot markiert, Client ausserhalb des Systems)

Ich hoffe dies macht mein Problem verständlicher 😃

Danke nochmals

30.03.2011 - 15:20 Uhr

Wie frei bist du beim Client?

Wie frei bist du beim Server?

Sind diese von dir selbst modifizierbar/erstellbar?

Der Server sowie die Client Software besteht bereits und ist seit Jahren im Betrieb. Nun soll eben dieses Feature hinzugefügt werden.

Ich kann an beiden Komponenten nur Erweiterungen vornehmen keine komplette Architektur Umstellung.

Was willst du in der Situation von uns hören?

Ich suche eben für diesen schlechten Fall, die beste Lösung. Würde ich jedes mal in gewissen Zeitabständen die Datei einfach von den Clients beziehen, würde ich Daten die ich bereits haben nochmals abholen und dies ist eben redundant.

Wenn ich dauerhaft die Leitung dadurch blocke bzw. die Bandbreite belege, finde ich das auch nicht allzu Produktiv.

Ich wollte einfach nur mal in der Runde diskutieren ob jemand mir Anregungen geben kann für eine bessere Lösung oder ob dies einfach der einzige Weg ist in diesem System.

Dank an alle

30.03.2011 - 14:34 Uhr

Hallo,
vorab danke für eure zahlreichen Antworten.

Wie sehr kannst du auf die aktuelle Architektur Einfluß nehmen?

Nur Erweiterungen sind erlaubt.

Welche Transfer-Möglichkeiten stehen dir zur Verfügung?

Nur FTP vom Server ausgehend.

Gibt es neben den File-Transfer noch andere Kanäle?

Nein.

Danke für jede Hilfe.

30.03.2011 - 09:38 Uhr

Hi Christoph,
danke für deine Antwort. Aber wie das leider immer so ist, sind da einige Dinge die nicht funktionieren, da historisch gewachsene Dinge im Wege stehen.

Ich versuch dies einmal genauer runter zu brechen :

Ich habe einen Transfer Server. Dieser verschickt an alle Clients bestimmte Dateien. Der Server wird will auch bestimmte geänderte Dateien auf den Clients regieren können und diese Dateien dann beziehen.

Das Hauptproblem ist das es keine Client Server Architektur im eigentlichen Sinne ist.

Nicht die Clients melden sich beim Server sondern anders rum. Man muss jede IP von den gegebenen Clients im Server eintragen, damit dieser die mit den Daten versorgt. Dies wird über FTP gemacht.

Somit kann sich der Client doch gar nicht beim Server melden, oder verstehe ich da was falsch ?

Eine Idee von mir, wäre es die Datei eben nach dem Änderungsdatum jeweils einen anderen Namen zu geben. So könnte der Transfer Server sehen ob die Datei, geändert worden ist oder nicht.

Für weitere Anregungen bin ich gern zu haben 😄

29.03.2011 - 17:29 Uhr

Hallo,
ich arbeite zur Zeit an einer Server Software zu Verteilung von Dateien an seine Clients.

Das heißt alle Clients die verbunden sind bekommen, die bestimmten Dateien zu geschickt.

Als zweite Aufgabe muss der Server bemerken ob sich eine bestimmte Datei, die auf den Clients liegt sich verändert hat und muss diese dann beziehen.

Genau an diesem Punkt bin ich gerade und überlege wie ich dies am besten lösen könnte.

Sagen wir ich habe 50 Clients. Und ich muss alle durcharbeiten und gucken ob die eine bestimmte Datei sich verändert hat. Wie löse ich dies am besten.

Meine erste Idee war es in einigen Zeitabständen die Datei zu überprüfen pro Client ob dessen Größe, Datum etc. sich gerändert hat. Aber damit würde ich ja die Leitung auch belasten.

Auf dieser, die Leitung, werden ja auch die Daten vom Server an die Clients verschickt und ich möchte nicht meine Bandbreite unnötigt belasten.

Meine zweite Idee war es das die Clients selber anmerken das sie da was geändert haben. So zusagen ein Event schmeißen.

Da weiß ich nun leider nicht ob das geht. Da ja Server und Clients zwei verschiedene Systeme sind.

Diese Funktion muss nicht in Echtzeit sein, aber Zeitnah. Also Verzögerungen sind schon okay.

Aber bei meiner Lösung wollte ich die Skalierbarkeit auch beachten. Man stelle sich 500 Clients vor.

Ich bin für jede Anregung zu haben.

Danke !

17.06.2010 - 09:46 Uhr

Hey Leute,
ich bin wieder da mit einer neuen Frage.

Ist es irgendwie möglich der MaskedTextBox eine Art History Modus anzuhängen ? Ich meine damit das wenn der Benutzer genau das selbe wie letztes mal eingibt ihm ein Vorschlag gemacht wird ?

Danke!

26.04.2010 - 13:56 Uhr

Dankeschön. Funktioniert. Das mit dem e.Handled kannte ich gar nicht. Muss da mal nochmal nachschlagen.

Danke nochmals 👍

26.04.2010 - 12:37 Uhr

Hallo,
ich habe in meiner Anwendung eine MaskedTextBox die, die Oktetten einer Adresse hervorheben, sprich :

xxx . xxx . xxx . xxx

Nun möchte ich das wenn der Benutzer in diesem Feld ist, dass selbe verhalten bekommt wie man es unter der Windows Netzwerkadapterwahl hat.

Wenn der Benutzer die Pfeiltaste Rechts drück springt man direkt zum nächsten Oktett, das ist eben die nächste Position nach einem .(Punkt).

Ich habe folgenden Eventhandler nun erstellt :


        private void maskedTextBox1_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                radButton9_Click(sender, e);
            }
            else if ((e.KeyCode == (Keys)190) || (e.KeyCode == Keys.Right))
            {
                maskedTextBox1.SelectionStart =
                    (maskedTextBox1.Text.IndexOf(',', maskedTextBox1.SelectionStart) == -1)
                                                ? 0
                                                : maskedTextBox1.Text.IndexOf(',', maskedTextBox1.SelectionStart);
            }
        }

Wenn die Tastatureingabe der Rechts Pfeil war gucke ich einfach nach dem nächsten Index von der aktuellen Position aus wo ein , erscheint und springe dort hin.

Soweit so gut. Den Fall das man ganz rechts ist habe ich auch bedacht und setze dann den SelectionStart auf 0. Aber hier liegt das Problem. Der Cursor springt nicht dann an die erste Position sonder an die zweite.

Ich habe schon alles beobachtet. Obwohl der Wert von SelectionStart auf 0 gesetzt wird steht der Cursor falsch.

Wo liegt mein Fehler ?

Danke

14.01.2010 - 17:05 Uhr

Ja, SQLite ist es. Per Google habe ich auch direkt einen Link zu deinem Problem gefunden :

Frage
Lösung

14.01.2010 - 16:33 Uhr

Hallo,
ich denke mal das dies eine andere Art von Frage ist wie sonst und auch etwas länger wird aber ich hoffe das es mich weiter bringt.

Ich habe vor kurzem ein kleinen App geschrieben. Die Hauptaufgabe der Anwendung ist es eine XML Datei zubearbeiten.

Die XML Datei kann wiefolgt aussehen :


<root>
 <farbe>2</farbe>
 <rahmen>
  <rahmen-dicke>4</rahmen-dicke>
  <rahmen-stil>5</rahmen-stil>
 </rahmen>
 <nummer>16354</nummer>
</root>

Nun soll meine Applikation diese XML verändern. Also keine allzu schwere Aufgabe. Da ist nur das Problem das dies Benutzerfreundlich geschehen soll, naja ein Problem ist es nicht, sondern meine Pflich 😁

Es gibt also in der XML Elemente die einen festen Stamm von validen Daten haben. Z.B. Element "farbe" darf Werte von 1 bis 10 annehmen wobei 1 = weiss bedeutet 2 = rot etc.

Es gibt aber auch einige wo dies nicht der Fall ist z.B. "nummer" darf Nummerische Werte annehmen.

Intern wird nur mit den Nummern gearbeitet aber um dies Benutzerfreundliche zu gestalten sollte mit den Display Namen z.B. 2 ist gleich "Rot" in der Oberfläche gearbeitet werden.

Nun habe ich mir eine Klassenhierachie zusammen gebaut und ungefähr so aufgebaut ist :

(Siehe Bild)

Es gibt eine Klasse Namens Element, diese Repräsentiert ein Element in der XML. In dieser Klasse ist auch ein Dictionary mit dem KeyValuePair<int, string>. Dort registriere ich alle Werte die für dieses Element erlaubt sind :

Beispiel "farbe" :

1 = weiss
2 = rot
..
..
..

Für Elemente die keinen Auswahl an validen Werten angeben habe ich eine zweite Klasse gemacht die ElementRange heisst.

Nun gibt es noch eine Documentklasse die eine Liste auf alle registrierten Elemente Objekte enthält.

Es wird nun von meinem Programm aus eine XML geladen, dann wird direkt geguckt welche Elemente, die registriert worden sind auch in der XML enthalten sind und diese werden dann mit ihren Display Namen zurück gegeben an die UI und es wird dann dynamisch eine Eingabe für neue Werte generiert.

Sprich labels werden aufgebaut und dann ComboBoxen mit den gültigen Werten in ihren Displaynamen oder einfache Textboxen.

Schon beim programmieren ist mir aufgefallen das ich alles ziemlich komplex aufgebaut habe.

Nunja nun wurde mein Programm gereviewt und mir wurde gesagt das ich es nicht sehr schön gelöst habe da ich die Daten die ich bekomme direkt verarbeite.

Ich sollte mich zuanfang gar nicht darum kümmern die Daten schön aufzubereiten sondern erstmal die Daten an sich zu sammeln.

Mir wurde vorgeschlagen mir die XMLSerialisierung anzusehen für dieses Problem, da die XML File immer den selben aufbau, sprich statisch ist.

Meine Frage ist nun was ihr persönlich an meinem Aufbau falsch bzw. nicht gut findet. Ich würde gern daraus zuviel wie möglich an Erfahrung rausziehen 😁

Vielleicht bessere Lösungansätze ?

Wenn ich den XMLSerialierungs Weg gehe müsste ich ja auch eine Art Übersetzer Klasse wieder aufsetzten etc.

Naja ich hoffe auf rege Beteiligung .

Mfg

14.01.2010 - 14:17 Uhr

Interessanter Ansatz. Den Overhead könnte ich eigentlich in Kauf nehmen. Nur mir fehlen noch die XSLT Erfahrungen. 👍

12.01.2010 - 08:07 Uhr

It´s a me Mario.

Falls es jemanden interessiert. Ich habe das Problem gelöst und eine Art Fake Ajax Methode gefunden. Einfach in den Header :

<meta http-equiv="Page-Enter" content="blendTrans(Duration=0)">
<meta http-equiv="Page-Exit" content="blendTrans(Duration=0)">

Dies bewirkt das die Übergänge kein Flackern mehr haben, kein Ajax Overhead aber dennoch kein blinken mehr 👍

11.01.2010 - 20:57 Uhr

Wenn du nur Teilbereiche einer Webseite updaten musst, schau dir mal AJAX an.

Scheint die einzige Lösung zu sein. Dann muss ich mal sehen ob dies nich zuviel OVerhead wird. Danke

11.01.2010 - 17:18 Uhr

Hallo,
wir entwickeln zurzeit eine Software die immer wieder die selbe Seite anzeigt, dennoch alle Sekunden die Seite refresht falls Änderungen auftreten.

Leider bekommt man immer beim IE 6/7 immer einen Blitzeffekt, sprich man sieht das die Seite kurz weg ist. Beim Firefox geht dies ohne das flashen. Chrome kann dies auch.

Ich hoffe es gibt eine Option diesen Blitzeffekt auszustellen. Das System läuft auf Embedded WinXP.

Falls jemand was weiss würde ich mich sehr freuen 😄

11.01.2010 - 14:33 Uhr

Habe hier gerade ein Projekt was ich weiterführen soll und habe folgenden Code gefunden.

Das Problem was es lösen soll ist das eine Datei eingelesen werden soll. Diese enthält eine Seriennummer die in ein Label eingetragen werden soll. Sprich, einfaches Parsing.

                if (File.Exists(swFile.FullName))
                {
                    int tmpCounter = 0;

                    StreamReader txtReader = File.OpenText("tmp/file.txt");
                    string tmp = String.Empty;
                    while ((tmp = txtReader.ReadLine()) != null)
                    {
                        if (tmpCounter == 1)
                            this.[B]label9[/B].Text = tmp;

                        tmpCounter++;
                    }

                    txtReader.Close();
                }

Das komplette Projekt durch wurden die Steuerelemente nicht benannt, sprich nur die automatischen Namen übernommen 🙁

11.01.2010 - 14:29 Uhr

Hallo pohlmann

ich versteh es immernoch nicht ... außerdem welche Werte das Element verwenden darf...
Ich nehme an Midnight Run arbeitet mit dem <xs:pattern id="foo" value="RegEx"></xs:pattern>

Grüße
Flo

Ich habe es so gelöst :

<xs:pattern value="((((25[0-5])|(2[0-4][0-9])|([01]?[0-9]?[0-9]))\.){3}((25[0-5])|(2[0-4][0-9])|([01]?[0-9]?[0-9])))(\-((((25[0-5])|(2[0-4][0-9])|([01]?[0-9]?[0-9]))\.){3}((25[0-5])|(2[0-4][0-9])|([01]?[0-9]?[0-9]))))?"/>

11.01.2010 - 14:24 Uhr

Korrekt. Wenn du bei der Konfiguration der Validierung flexibel bleiben willst kannst du höchstens noch ein XSLT dazwischenhängen welches nach der XSD Validierung noch Relationale Integritäten prüft. Wenn alles passt am Ende ein:

  
<xsl:template match="@* | node()">  
    <xsl:copy>  
        <xsl:apply-templates select="@* | node()"/>  
    </xsl:copy>  
</xsl:template>  
  

Das führt jedoch dazu dass du alles einmal komplett kopierst. Hat den Nachteil des immensen Overheads, aber den Vorteil der ausgelagerten Validierung. Du musst halt entscheiden was dir wichtiger ist. Performance oder Trennung.

Grüße
Flo

Ehrlich gesagt verstehe ich das nicht ganz. Bin nicht so tief drin in der Materie 😄 Aber jede neue Datei würde Änderungen am Endgerät verlangen.

@pohlmann, Ich möchte die Werte/Texte der Elemente zueinander validieren.

IP : 10.10.140.2
SUBN : 255.255.255.0
GATEWAY : 10.10.141.3 <- Fehler!

Sollte als ungültig markiert werden.

Mfg

11.01.2010 - 14:15 Uhr

KeyDownEvent sollte reichen. Dann einfach auf Key.Right prüfen.
Für das setzten des Cursors TextBox.SelectionStart

Mfg

edit : JAck30lena war schneller 😄

11.01.2010 - 14:13 Uhr

Hallo Midnight Run

Das geht - meines Wissens nach - nicht mit den klassischen XSD Bordmitteln. Du könntest höchstens Schematron verwenden. Das ist AFAIK im Framework noch nicht unterstützt - wobei es aber 3rd Party Libraries gibt.

Grüße
Flo

Das bedeutet ich müsste im Programm die Logik implementieren ? Naja ist unsauber aber wenn es mit klassischen XSD nicht funktioniert werde ich es so machen.

11.01.2010 - 13:23 Uhr

Hallo,
ich habe da mal eine kleine Frage da ich fest stecke.

Ich habe eine XML Datei wie folgende :


<ROOT>
  <IP>100.100.10.144</IP>
  <SUBNET>255.255.255.0</SUBNET>
  <GATEWAY>100.100.10.110</GATEWAY>
</ROOT>

Das validieren tue ich durch eine XSD Datei. Das IP Element validiere ich durch eine Regex, die Subnetmaske durch eine Enumeration. Doch wie kann ich das Gateway validieren ? Da es ja abhängig der IP und Subnetmaske ist.

Danke für die Hilfe 😁

10.01.2010 - 00:20 Uhr

Hallo Freunde der Sonne,
durch meine unendlichen Reisen durchs Netz bin ich auf einen ziemlich interessanten Screencast Anbieter gestoßen. Sie nennen sich Tekpub. Dort gibt es auch 2 Series die kostenlos sind. Concepts, wo Dinge wie Dependency Injection oder Unit Testing erläutert werden.

Das tolle ist das Sie sich natürlich super viel Mühe geben aber auch das Sie ein gutes Aufbaukonzept ihrer Cast´s haben. Basic First, sprich 101, aber nicht zuviel weil sonst verliert man die Lust(ich zumindest) und danach geht es schön an eingemachte.

Ich habe bereits den Mastering Linq Screencast gekauft (20$) und er ist super gut.

Nun spiele ich mit den Gedanken mir dort ein Jahres Abo zu bestellen aber bin einwenig zurückhalten 😁

Vielleicht, wenn der Zufall es will, ist hier jemand der den Dienst auch kennt und könnte ihn empfehlen ?

TekPub

Gute Nacht

10.01.2010 - 00:12 Uhr

Also ich als Film Freak bin ja da immer etwas kritischer.

War in der 3D Vorstellung in Hannover und ich kann nur sagen, dass der Film meiner Meinung nach ein rein technischer ist. Die Story wurde schon x-Mal erzählt und ist vorhersehbar. Der Hype tut dem Film gut und die Effekte sind echt Atemberaubend.

BTW, alle effekte wurden auf einem LINUX RH System erstellt, cool.

Die Schauspieler sind mehr als lahm. Im Inet geht grad ein RM Fame Witz rum, dass die komplette Story von Pocahontas geklaut ist (ich sehe auch parallelen o.O).

Naja, wenn dann in 3D. Wenn man den Film auf seinem TV und ohne den Hype gesehen hätte, wäre man nach 5 Min weiter gezappt.

Meine Meinung natürlich.

Aber ich bin eher auch ein Tarantino Fan 😁

08.01.2010 - 10:58 Uhr

Ich denke, dass man in der Zukunft keine Programme mehr schreibt, sondern einfach einzelne Aktivitäten und Komponenten zusammenklickt, ähnlich wie bei der WorkflowFoundation von MS.

Genau meine Sicht. Man siehe sich mal das erstellen von SSIS Paketen unter den MSSQL Server an.

Ich denke das es aber dennoch viele Sprachen gibt, die ein bestimmtes Problem behandeln, wie z.B. Concurrency (siehe Erlang).

Ausserdem wird es immer Platz für die "alten" geben wie C, Cobalt. Da wie wir alle wissen, gibt es mehr Wartungsprojekte als From Scretch.

01.01.2010 - 21:17 Uhr

Die neue Software von Fogcreek "Kiln" arbeitet mit Mercurial. Habe leider keine Erfahrung damit.

Fossil hört sich aber auch interessant an : Link

31.12.2009 - 14:43 Uhr

Immer wenn ich den SQL Server in Verbindung mit Fehler hören denke ich immer dran das Tool nochmal explizit per "Ausführen als Admin" zustarten. Hat mich viele Stunden gekostet 👍

30.12.2009 - 03:07 Uhr

Dynamisches Array == Collections.

Ich würde dir List<T> empfehlen und von ArrayList abraten.

29.12.2009 - 14:10 Uhr

(

Do you really want to know :::

Floste hat es schon erklärt 👍

28.12.2009 - 23:01 Uhr

Ich steh gerade auf dem Schlauch was du vorhast. Ein Array im Array, also ein Jagged Array ?

Und die Zeile :

                   var Query = from array in test
                               select array ;

Scheint mir ziemlich Sinnfrei.

Btw : Bei BinarySearch muss man doch immer eine Sortierte Liste haben oder nicht ?

12.12.2009 - 11:59 Uhr

Ja, da hast du vollkommen recht. Ich will/wollte ja nicht damit das Buch schlecht reden, wobei die Amazonkritiken auch nicht so berauschend sind. Aber mit der "Kopf bis Fuß" Reihe kann ich schon einiges mehr lernen.

Dennoch finde ich deinen Punkte "es gibt solche und solche Menschen" richtig. Weil ich persönlich ein Visueller Mensch bin. Deswegen bin ich ein Freund von Daniel m. Solis (den ich empfehlen kann). Er benutzt viele Bilder zum erklären.

Besonders wichtig sind mir in einem Buch der Schreibstil und die Beispiele. Mir fehlte im Buch von Golo Haas (? Roden) eben diese Punkte.

Ich denke es gibt aber viele Punkte die für das Buch sprechen.

11.12.2009 - 15:35 Uhr

Leider konnte ich mich nie für dieses Buch begeistern. Zu Akademisch aufgebaut. Vielleicht sollte ich es nochmal anlesen.

11.12.2009 - 15:12 Uhr

Hallo,

Das Problem ist, die Werte sind Strings.Sprich ich kann nicht auf binär Ebene Abfragen.
Dann musst Du Deine Strings umwandeln, z.B.:

  
string[] parts = mask.Split(".");  
uint binMask = (int.Parse(parts[0])<<24) +  
           (int.Parse(parts[1])<<16) +  
           (int.Parse(parts[2])<<8) +  
           (int.Parse[parts[3]);  
  

und dann kannst du es binär behandeln.

Gruß, MarsStein

Danke erstmal für deine Antwort. Doch ich wollte ja nicht das meine XML + XSD nicht vom Programm Abhängig sind.

Ich habe nun alle Möglichkeiten per Enumeration eingefügt. Vielleicht gibt es bessere Lösungen ?

11.12.2009 - 12:56 Uhr

Hallo,
ich habe da ein Problem bzw. mehrere Lösungsansätze die meiner Meinung nach nicht funktionieren würden bzw. unsauber wären.

Ich habe eine Software die es dem Benutzer erlaubt IP sowie Subnetmaske anzugeben.

Die Werte speicher ich in einer XML. Natürlich möchte ich die Werte validieren und tue dies über eine Schema (XSD) Datei.

Ich verwende Regular Expressions. Bei dem IP Wert ist die Lösung ziemlich einfach, doch bei der Subnetmaske hänge ich.

Das Problem ist, die Werte sind Strings. Sprich ich kann nicht auf binär Ebene Abfragen. Wenn in einer Subnetmaske eine 0 erscheint sind die darauffolgenden Bits auch 0. Sprich es gibt nur einen Sprung von 1 auf 0.

Gültig : 255.254.0.0
Ungültig : 255.254.1.0

Nun ist meine Frage wie man dies am besten lösen könnte. Ich möchte nicht Workarounds im Programm selber erstellen.

Die XML sowie XSD sollen komplett unabhängig von Programmen sein, sprich auch andere Validatoren sollen diese beiden prüfen können.

Gibt es irgendein Lösungsweg ausser alle möglichen Kombinationen abzufragen ?

Danke

05.12.2009 - 14:58 Uhr

Hallo,
Für mich der bei weitem beste Horrorfilm der letzten Jahre: The Descent
.....

Hallo,
ich kenne auch The Descent, fand ihn aber nur so lalá. Typisches Filmbuch eben. Freundinnin auf dem Weg einen Höhle zuerkunden. Die eine gezeichnet vom Leben da ihr Mann + Kind starben. Die andere hat die tolle Idee eine unbekannte Höhle zu erkunden, sagt es den anderen aber nicht.

Schreiende Frauen, plötzliche unlogische Wendungen machen den Film "meine Meinung( 😃 ) nach kaputt. 2/5.

Also wie schon gesagt, Saw 1 war der Hammer. Eher ein Thriller, wenige Ekelszenen. Wenn man sich die heutigen Teile ansieht ist alles nur noch auf die Todesszenen ausgelegt.

Saw 1 5/5.

Ich habe letztens Orphan gesehen. Mein Geheimtipp des Jahres!

Da würde ich noch Filme nennen wie The Grudge oder Haus der Dämonen( der geht richtig ins Rückemark).

03.12.2009 - 22:33 Uhr

            MatchCollection matchcollection;
            do
            {

                matchcollection = filter(text);



            } while (MatchCollection.count < 10);

02.11.2009 - 09:53 Uhr

Also die Fehlermeldung sagt doch alles.

Die Klasse "UserApplicationSetting" implementiert nicht das IEnumerable und deswegen kann nicht über diese Iteriert werden.

Das ist nämlich die Grundvoraussetzung für die Foreach Schleife.

01.11.2009 - 15:22 Uhr

Ich tendiere hierzu :

Console.Read-Methode
Liest das nächste Zeichen aus dem Standardeingabestream

Console.ReadLine-Methode
Liest die nächste Zeile von Zeichen aus dem Standardeingabestream.

Beim Console.Read sind eben noch Zeichen vorhanden im Eingabestream oder werden alle nach und eingelesen.

Mfg

29.10.2009 - 12:45 Uhr

Du hast die Lösung doch schon.

    class CKunde
    {
        public string Name { get; private set; }
        public string Nachname { get; private set; }
        public string Strasse { get; private set; }
        public string Ort { get; private set; }

        public static void KundedatenEinlesen(ref List<CKunde> datensatz)
        {
            CKunde Kundeneinlesen = new CKunde();
            Console.WriteLine("Bitte geben Sie den Vorname ein");
            Kundeneinlesen.Name = Console.ReadLine();
            Console.WriteLine("Bitte geben Sie den Nachname ein");
            Kundeneinlesen.Nachname = Console.ReadLine();
            Console.WriteLine("Bitte geben Sie den Ort ein");
            Kundeneinlesen.Ort = Console.ReadLine();
            Console.WriteLine("Bitte geben Sie die Straße ein");
            Kundeneinlesen.Strasse = Console.ReadLine();

            datensatz.Add(Kundeneinlesen);
        }
    }

Der Aufruf wäre :

CKunde.KundedatenEinlesen(ref datensatz);
29.10.2009 - 10:55 Uhr

Also meines Wissens kann man doch per Index auf Listelemente zugreifen ?(

List<string> personenNamen = new List<string>();
...
... // Ganz viele Namen hinzufügen

if(personenNamen[0] == "Name")

Und mit der Contains Methode kannste abfragen ob es den Datensatz schon gibt.

Oder verstehe ich da was falsch ?

27.10.2009 - 09:24 Uhr

Ich kann dir da leider auch nicht viel weiterhelfen 😄 Musst noch auf die anderen warten. Aber ich kenne das so das Structs generell immutable sein sollen. Sprich der Wert sich nicht ändern sollte.

Mfg