Laden...

Forenbeiträge von schnelleHelga Ingesamt 82 Beiträge

05.04.2017 - 15:05 Uhr

Nochmal Danke für die Hinweise.

@Abt: Das ist mir insoweit schon klar. Habe leider in der Firma nur einen i5 zum Testen. Auf dem Server macht es fast keinen Unterschied, ob ich die genutzten Kerne begrenze oder nicht. Der läuft weiter bei fast 100%, wobei durch die Automatische Verteilung auf die Kerne die Kontrolltools nicht die exakte Last anzeigen.

Die andere Möglichkeit, die Kapazität vom System aus zu steuern finde ich persönlich wesentlich besser. Hat bei uns nur den Nachteil, dass sich da in den Niederlassungen wieder niemand ernsthaft drum kümmrt. Eigentlich würde es reichen, die Priorität etwas niedriger einzustellen. Ob das dann 7 Tage oder nur 6 Tage und 23 Stunden läuft, spielt keine Rolle. Nur länger wie 3 Wochen darfs nicht dauern 😉

ich werde den Projektleiter noch mal drauf ansprechen, das er die Admins scharf macht.

03.04.2017 - 09:50 Uhr

Hallo Weismat,

besten Dank, scheint so zu funktionieren. Die Last wird zwar trotzdem auf alle Kerne verteilt, es bleibt aber bei einer Auslastung von ca. 75%. Das sollte für die restlichen Aufgaben reichen.
unabhängig davon kann ich ja teile der Liste auslagern. Das bringt eventuell auch noch was.

schnelleHelga

03.04.2017 - 08:10 Uhr

Danke für die Antworten,

ich werde mich wohl auf eine manuelle Variante einstellen müssen.
Ich brauche die berühmte optimale Lösung für das System und maximale Auslastung. Wobei bei 100% Auslastung alle anderen Prozesse zu stark eingeschränkt werden.

Wir haben einen Datenbestand, der sich im Laufe eines Monats ansammelt und ca. 50-100 Mio Datensätze enthält. Diese werden nach Monatsende für verschiedene Präsentationen aufbereitet und dabei auch sehr umfangreiche grafische Varianten erzeugt. Die Laufzeiten der einzelnen Berechnungen sind unterschiedlich. Es gibt aber eine Gruppe von zusammenhängenden Sätzen, die sehr schnell fertig werden. Das macht etwa ein Viertel des Bestandes aus.

Die gesamte Bearbeitung dauert ca. 3 Stunden bis etwa eine Woche. Die Dauer lässt sich nach wenigen Elementen sehr gut abschätzen. Ein Teil (siehe oben) benötigt dabei nur wenige Minuten. Die anderen Elemente brauchen dann deutlich länger.

Ich wollte erreichen, dass zu Beginn die Liste auf alle Kerne verteilt wird und die Kerne, die fertig sind, nicht neu belegt werden. Ich möchte also keine 100% Auslastung, um das System nicht tagelang zu blockieren.
Die Software kommt in mehreren Niederlassungen zum Einsatz mit unterschiedlicher Hardware. Optimal wäre ein eigener Server. Das kann ich leider nur meiner Niederlassung beeinflussen.
Da kommen dann gern die viel zittierten Sätze: "Wir haben doch einen Server, das reicht. ... In letzter Zeit dauert die Anmeldung am Server aber immer so lange, woran kann das liegen?"

Wird wohl dann doch eine manuelle Thread-Lösung werden. Eventuell nehme ich die "schnellen" Elemente in eine extra Liste. Den Rest würde ich so verteilen wollen, das mindestens ein Kern frei bleibt.

Alternativ wäre eine Steuerung über Prioritäten eine Möglichkeit.
Kann man das direkt aus der Anwendung heraus setzen? Also der eigenen Anwendung im System eine niedrige Priorität einstellen, damit das System nicht lahm gelegt wird?

schnelleHelga

31.03.2017 - 12:53 Uhr

Hallo,

mich würde die interne Abarbeitungsfolge von Parallel.Foreach interessieren. Wenn ich eine List<> mit einigen zig Tausend Elementen habe und diese Liste auf einem System mit 4 Kernen durchlaufen lasse, dann wird diese Liste exakt geviertelt und auf die Kerne verteilt.
Wenn es (deutlich) unterschiedliche Bearbeitungszeiten gibt, dann ist ein Kern natürlich früher fertig. In diesem Fall übernimmt er Elemente aus den anderen "Vierteln", welche?
Hat das schon mal jemand getestet? Kann man das beeinflussen?

Soweit ich getestet habe, entstehen keine neuen Teilebereiche. Es wird also sofort das nächste anstehende Element eines anderen Kerns "gegriffen".

Grundsätzlich beeinflussen sich die einzelnen Elemente nicht (sonst wäre ja parallel nicht sinnvoll).
Aber für das Endergebnis wäre es schön zu wissen, welche Teile in welcher Reihenfolge dran kommen.

Ich bin jeden lösungsansatz dankbar!

schnelleHelga

11.02.2017 - 22:55 Uhr

Hallo,

melde mich noch mal kurz zu Wort.

Also es handelt sich um eine Art Spiel, eine Simulation. Dabei wird in der Picturebox das gewählte Auto des Spielers angezeigt.
Wenn mal genügend "Geld" vorhanden ist, kann man ein neues kaufen und das Bild wird getauscht.
Deshalb wird der Code auch erst nach Wochen aufgerufen.

Geholfen hat tatsächlich das Entfernen der Codezeile, die beim Programmstart gar nicht aufgerufen wird. Eventuell ein komischer Nebeneffekt? Müsste ja dann aber am Compiler liegen. Ich kann mir das nicht erklären.

schnelleHelga

11.02.2017 - 14:32 Uhr

nochmal vielen Dank für die zahlreichen Ideen. Ich konnte das Problem lösen, aber nicht erklären.

Es gibt eine Methode zum Wechsel des Bildes, welche frühestens nach ein paar Wochen das erste Mal aufgerufen wird.


pictureBox1.Image.Dispose();
pictureBox1.Image=Image.FromFile(sBildPfad);

Das wars, ich habe die Zeile "Dispose()" entfernt. Jetzt wird das Bild korrekt angezeigt.
Nur wird diese Methode noch gar nicht aufgerufen. (Ja, habe das mit Haltepunkt getestet!)

Das ist der Punkt, den ich nicht erklären kann. Scheint, als hätte der Code trotzdem Einfluss auf die Darstellung, obwohl er bis dahin nie ausgeführt wird.

Sollte dazu noch jemand was haben, bin ich für Hinweise sehr dankbar.
Sonst ist das Problem erst mal gelöst.

schnelleHelga

11.02.2017 - 14:15 Uhr

Hallo,

danke für die Hinweise. Nach einigen Versuchen ergibt sich ein ernüchterndes Fazit.

@chilic
Ich habe zum Testen zwei pictureBoxen auf der Form, beide nebeneinander. In 1 soll das Bild manuell zugewiesen werden. Ich habe dazu jetzt die vom Designer erzeugte resource verwendet. Das Bild wird geladen und die Eigenschaften in pictureBox.Image stimmen. In 2 ist das Bild im Designer als resource zugeordnet.
Angezeigt wird aber nur pb 2.

@ErfinderdesRades
Auch Einzelschritt habe ich ausgeführt, alle Zeilen werden abgearbeitet.

Da der Code in einem anderen Testprojekt funktioniert, hatte ich auf falsche Eigenschaften getippt. Auch das hat sich leider nicht bestätigt.
Eventuell gibt es Unverträglichkeiten mit meiner chaotischen Architektur 😉
Ich werde also testweise einzelne Komponenten entfernen, mal sehen ob sich da was bewegt.

schnelleHelga

10.02.2017 - 18:29 Uhr

Hi p!lle und UltraEdit,

also neues Projekt geht, damit muss es am Projekt selbst liegen.
Die Boxen sind an der richtigen Stelle, wenn das Bild im Designer zugewiesen wird.

Ich vergleiche erst nochmal die Einstellungen. irgendwo muss ja der Fehler stecken.

schnelleHelga

10.02.2017 - 18:16 Uhr

Hi p!lle,

bisher hat das bei mir auch immer funktioniert. Ich dachte erst, das es am PC liegt, aber auf einem anderen geht das auch nicht. ich habe nichts verändert, nur sizemode auf stretch gestellt, weil die Bilder unterschiedlich groß sind.

Wie bereitzs gesagt, ging bisher bei mir auch immer und habe jetzt wirklich keine Ahnung, wo ich noch suchen soll.
Ich teste noch mal ein neues Projekt.

schnelleHelga

10.02.2017 - 16:57 Uhr

Hi LaTino,

grundsätzlich möglich, das es auch so gehen sollte, jedoch habe ich meine Variante bereits mehrfach in verschiedenen Projekten verwendet.
Ich habe Deine Variante getestet, geht leider auch nicht.

schnelleHelga

10.02.2017 - 16:41 Uhr

Hallo,

eigentlich nichts dramatisches, alles schon zig-mal gemacht. Ich verwende eine PictureBox, die im Designer gesetzt wurde, dort aber ohne Bild also leer. Das anzuzeigende Bild wird erst zur Laufzeit von der Platte gelesen und zugewiesen.

 Image im3 = Image.FromFile(datei);
 pictureBox1.Image = im3;
 pictureBox1.Invalidate();

Aber genau das funktioniert nicht. Keine Fehlermeldung, das Bild wird nicht angezeit. Geladen wird das Bild, ich habe die Eigenschaften von im3 kontrolliert. Nur wenn das Bild direkt im Designer als Resource zugewiesen wird, geht es.

Ich habe bereits versucht, mittels "new Bitmap(x,x)" und anschließendem Zeichnen ein Bild zu erzeugen. Das wird aber ebenfalls nicht angezeigt.
Testweise wurde auch eine zweite PictureBox eingefügt --> gleiches Verhalten.

Auf der Form befinden sich nur ein paar Label und TextBoxen, ein verdecken scheidet also aus. Controls sind auch hinzugefügt, macht ja der Designer eh automatisch.

Habe ich da einen Denkfehler, oder noch etwas anderes vergessen?

Schon mal Danke für Eure Bemühungen, denn ich denke ein Experte hat bestimmt den richtigen Hinweis für mich.
schnelleHelga

31.01.2017 - 08:59 Uhr

Hallo MarsStein,

danke für die Antwort. Direkt geht leider nicht, weil die Daten mit internen Benutzerkennungen abgerufen werden. Es bleibt dann bestimmt nur der Versuch, die Daten übers Netzwerk mitzulesen. Das dürfte etwas Zeit für die Analyse beanspruchen und mit etwas Pech ist das "Abhören" wegen der Verschlüsselung gar nicht möglich.
Dann eben warten, bis mal irgendwann eine Export-Möglichkeit eingebaut wird.

Trotzdem Danke!
schnelleHelga

30.01.2017 - 13:25 Uhr

Hallo Stefan,

mir fallen da gleich mehrere Sachen auf, nicht nur hier im Forum, sondern auch im privatem Umfeld.

Zum einen hat sich die Umgangssprache gewandelt. Wenn ich mal eine Nachricht eines Jugendlichen weitergeleitet bekomme, sieht die nicht viel anders aus, als oben genannte Anfrage.

Zweitens kommt hinzu (persönlich so erlebt, kann an anderen Orten abweichen 😉), dass in vielen Schulen die Lehrkräfte nur das notwendigste Wissen haben und davon ausgehen, das die Schüler mehr 'drauf haben' als sie selbst. Vernünftige Nachschlagewerke existieren in den Schulen nicht. Über Internet kommt man ja viel schneller und einfacher an die Informationen. (ja ich gehöre noch zu denen, die bei einem Problem mit mehreren Fachbüchern in einer Ecke untertauchen und nachlesen!) Da die betreffenden Schüler aber weder eine Ahnung haben, was sie machen sollen, noch wissen wie sie diese (nicht vorhandene) Ahnung formulieren sollen, sehen die Anfragen entsprechend aus.

Und zum Schluss kommt dann oft noch eine nicht geringe Unlust dazu. Dann kann so ein Hilfeersuchen schon mal aussehen wie: "Eh, macht mal, ich muss das morgen abgeben", auch wenn das der Schreiber gar nicht so beabsichtigt hatte.

schnelleHelga

30.01.2017 - 12:01 Uhr

Hallo,

vielleicht kennt sich hier ja Jemand mit dem Flashplayer aus. Ich habe eine Anwendung eines Anbieters, die im Browser mit Hilfe des Flashplayer Daten anzeigt (keine Videos, reine string bzw. integer Infos).

Und bevor die Frage aufkommt: Ja, es sind die Daten unserer Mitarbeiter, die durch einen Anbieter gesammelt werden und monatlich auf einer Website präsentiert werden. Leider fehlt eine Export-Funktion, so dass ich mir etwas einfallen lassen muss.

Ich möchte diese Daten auslesen und selbst weiter aufbereiten. Gibt es dazu eine Möglichkeit, die Daten aus dem Player direkt zu lesen?

Andere Möglichkeit wäre das "Horchen" am Netzwerk. Da keine Dokumentation vorhanden ist, wird das natürlich noch aufwendiger.

Meine Suche im Inet ergab jede Menge Hinweise in Bezug auf Video und Animationen. Zu Daten selbst bin ich leider nicht fündig geworden.

Ich bin für jeden Hinweis in dieser Sache dankbar!

beste Grüße!
schnelleHelga

10.03.2016 - 09:21 Uhr

Hallo,

ich bearbeite im Sorted-Event eines DGV eine Spalte. Die Werte werden in Abhängigkeit der Sortierung neu gesetzt.
Gleichzeitig werden einzelne Zellen eingefärbt.

Wird jetzt die Sortierung nicht "von Hand" über den Spaltenkopf, sondern vom Programm über DataGridView.Sort() ausgelöst, fehlt die Farbe in der Darstellung.
Die Zellen werden sonst korrekt dargestellt, d.h. die übrigen Veränderungen werden berücksichtigt.

Ist da jemand etwas bekannt?

Schon mal besten Dank
schnelleHelga

12.12.2015 - 13:48 Uhr

Danke für Eure Antworten.

@chilic
Da kann nicht viel passieren. Die Eingaben werden vom Empfänger geprüft und notfalls ein Fehler geworfen.
Dann würde die Übertragung stehenbleiben bzw. die Tasten ins Leere laufen.
Es gibt einen definierten Anfang für jeden neuen Datensatz und spezielle tastenkombinationen um innerhalb der Anwendung zu navigieren. Damit kann sichergestellt werden, dass alles dahin kommt, wo es hinsoll.

Ich werde mir mal eine rudimentäre Testumgebung basteln und sehen ob der Ansatz etwas taugt.

scnelleHelga

11.12.2015 - 22:08 Uhr

Schon mal danke,

es gibt wirklich keine "normale" Lösung. Beide sind aus der gleichen Branche, aber eben "Rivalen" und verwenden intern komplett verschiedene Datenstrukturen.
Das manuelle Eintippen dauert aber eben lange und ist natürlich auch mit Fehlern behaftet.

meine Lösung könnte ja notfalls über Nacht weiterlaufen, die Wartezeiten tun dann nicht weh.

Ich habe aber auch noch nicht mit dieser Möglichkeit experimentiert. Ich hatte auch die Variante mit kopieren und einfügen in Betracht gezogen, das geht aber auch nicht schneller und ich muss ständig zwischen den Programmen hin und her schalten.

schnelleHelga

11.12.2015 - 21:20 Uhr

Hallo,

Eventuell kennt sich jemand mit Tastatureingaben in fremden Fenstern aus.
Mein Problem ist folgendes:

Ich muss Daten aus einer Anwendung in eine andere übertragen. Eine passende Import-Schnittstelle gibt es nicht. Die Datenstruktur ist verschieden und direkte Schreibrechte auf der Datenbank gibt es nicht. Die Eingabe muss über die normale Erfassungsmaske erfolgen.
Es handelt sich um ca. 3000 Datensätze, die übertragen werden sollen.

Ich möchte jetzt die vorhandenen Daten aus einer Datei lesen, aufbereiten und mittels SendKey() in die andere Anwendung übertragen.

Das das ganze mit Problemen behaftet ist, wie Wartezeiten zum Speichern, Eingabefehler etc., ist mir bekannt.
Es müssen natürlich auch die Tastencodes zum Umschalten der Fenster usw. mitgeneriert werden.

Dazu meine Frage. Geht das überhaupt? Hat da schon jemand Erfahrung? Oder kennt vieleicht einen besseren Ansatz?

besten Dank für Eure Hilfe

schnelleHelga

19.11.2015 - 11:50 Uhr

@th69

da kann man mal sehen, dass selbst mein bescheidener Test nicht sicher war.
aber alles wird gut.

Danke nochmal

schnelleHelga

18.11.2015 - 20:47 Uhr

Danke wcseller,

das war der Tipp, jetzt gehts. der hat die Methode aufgerufen, aber natürlich immer an der gleichen Stelle gezeichnet, statt auf dem Button.

nochmals besten Dank für den Hinweis !!!

schnelleHelga

18.11.2015 - 20:26 Uhr

gute Idee, leider kein Erfolg.

ich sehe aber keinen Sinn warum bei gleicher Ableitung die übverschriebene Methode nur von einem Control aufgerufen wird.

-- Edit: Neustart hat auch nichts verändert.

schnelleHelga

18.11.2015 - 19:58 Uhr

Danke für die schnelle Antwort,

habe ich anfangs noch drin gehabt, gleiches Verhalten.

Würde aber bedeuten, das ich bei vollständigem Neuzeichnen doppelten Aufwand betreibe.
Aber wenns sein muss, muss ich halt machen.

schnelleHelga

18.11.2015 - 19:44 Uhr

Hallo,

ich habe ein seltsames Verhalten innerhalb eines Panel. Es sind 3 Button aus einer abgeleiteten Klasse angeordnet, in der ich die OnPaint-Methode überschrieben habe.
Diese Methode wird aber nur beim ersten der 3 Controls aufgerufen. Die anderen beiden Controls werden "Standard" gezeichnet.

hier die relevanten Ausschnitte:


            this.panel1 = new System.Windows.Forms.Panel();
            this.Steine = new EigenerButton();
            this.Platten = new EigenerButton();
            // zum Test einen dritten hinzugefügt
            this.eigenerButton1 = new EigenerButton();
  

            this.panel1.Controls.Add(this.eigenerButton1);
            this.panel1.Controls.Add(this.Steine);
            this.panel1.Controls.Add(this.Nadelholz);
            this.panel1.Location = new System.Drawing.Point(33, 273);
            this.panel1.Name = "panel1";
            this.panel1.Size = new System.Drawing.Size(451, 110);
            this.panel1.TabIndex = 5;
            // 
            // Steine
            // 
            this.Steine.Location = new System.Drawing.Point(3, 57);
            this.Steine.Name = "Steine";
            this.Steine.Size = new System.Drawing.Size(100, 50);
            this.Steine.TabIndex = 1;
            this.Steine.Text = "button4";
            this.Steine.UseVisualStyleBackColor = true;
            // 
            // Nadelholz
            // 
            this.Platten.Location = new System.Drawing.Point(3, 3);
            this.Platten.Name = "Nadelholz";
            this.Platten.Size = new System.Drawing.Size(100, 50);
            this.Platten.TabIndex = 0;
            this.Platten.Text = "button4";
            this.Platten.UseVisualStyleBackColor = true;
            this.Platten.Click += new System.EventHandler(this.Platten_Click);
            // 
            // eigenerButton1
            // 
            this.eigenerButton1.Location = new System.Drawing.Point(109, 3);
            this.eigenerButton1.Name = "eigenerButton1";
            this.eigenerButton1.Size = new System.Drawing.Size(100, 50);
            this.eigenerButton1.TabIndex = 2;
            this.eigenerButton1.Text = "button4";
            this.eigenerButton1.UseVisualStyleBackColor = true;

und die OnPaint-Methode (nur braunes Rechteck)


class EigenerButton : Button
{
    protected override void OnPaint(PaintEventArgs e)
    {
        // Control zeichnen
        // base.OnPaint(e);

        // name des control ausgeben
        System.Diagnostics.Debug.WriteLine(this.Text);
        
        // Hintergrund neu
        e.Graphics.FillRectangle(Brushes.Brown,new Rectangle(this.Location,this.Size));
    }
}

Ergebnis siehe Anhang

Leider finde ich meinen Fehler nicht.
ich habe jetzt bestimmt was übersehen und komme nicht drauf.
schon mal Danke für Hinweise.

schnelleHelga

12.11.2015 - 10:43 Uhr

@Redmoon147

eventuell holst Du Dir die Daten für Dein Feld "Anzahl" aus dem Index Deiner Auflistung? Das würde erklären, warum Du 19 bekommst. Wie schon geschrieben 0-19 sind 20. Du kannst aber bei Listen die Eigenschaft "Count" abfragen, die enthält den Wert 20.
Prüfe doch mal, woher Du Deine 19 bekommst.

schnelleHelga

27.09.2015 - 14:09 Uhr

Das geht natürlich auch.
Ich sag doch, ich steh grad auf dem Schlauch.

schnelleHelga

27.09.2015 - 13:15 Uhr

@FZelle, @ErfinderDesRades,

Danke für die Antworten.

ich scheitere im Moment aber nicht an der Darstellung, sondern daran, das es kein typisiertes DataSet gibt. Ich arbeite mit einer Tabelle aus einer fremden Anwendung und habe nur Leserechte.
Die Struktur der Tabelle ändert sich in nicht definierten Abständen. Es kommen Spalten hinzu (Namen nicht bekannt), es werden Spalten entfernt.
Dieses Vorgehen ist sehr ungewöhnlich, ich kann es aber nicht ändern.
Ein Dataset nützt mir an dieser nicht viel, da es ebenfalls dynamisch verändert werden müsste.

Meine Aufgabe ist es, ein DGV anzuzeigen, in dem genau zwei Spalten der Tabelle links stehen müssen (ID, Person).
Es folgen die nicht genau definierten Spalten mit Typ double.
NACH diesen Spalten soll eine weitere angefügt werden (ganz rechts) und darin das Ergebns einer Berechnung über diese variablen Spalten (Durchschnitt oder Summe).

meine Lösung sieht jetzt so aus, das ich eine Kopie der Tabelle erzeuge und meine Spalte einfüge.
Allerdings fehlt mir noch der Zeitpunkt wenn die Originaltabelle geändert wurde. Ich muss also in gewissen Abständen die Tabelle abfragen.
Und das gefällt mir noch nicht.
Änderungen am Fremdprojekt scheiden aus, die Firma ist "zu groß".

Alles andere funktioniert sehr gut.

Mein Plan sieht jetzt so aus:
Ich will das DGV so anpassen, das beim Neuzeichnen wegen Änderungen, geprüft wird, ob es Strukturänderungen gegeben hat. (Bei neuen Zeilen muss ich ja nichts weiter tun)
Anschließend das DGV fertig aufbauen lassen und an dieser Stelle im DGV die Spalte einfügen.
Wichtig wäre nur, das dann wegen meiner Spalte das DGV nicht nochmal gezeichnet wird.

schnelleHelga

26.09.2015 - 09:57 Uhr

Hallo,

ich stehe gerade etwas auf der Leitung, evtl. gehört der Beitrag auch zu den Grundlagen.

Mein Problem:
Ich habe eine DataTable dt die aus einem laufenden Fremdprojekt stammt.
Diese Tabelle ist an ein DGV gebunden.

DGV.Datasource=dtDurchgang;

In meinem Projekt soll der Inhalt der Tabelle plus einer zusätzlichen Spalte angezeigt werden. Diese Spalte berechnet sich aus den anderen Spalten dieser Tabelle (Also zb. wie eine Summe).
Bis hierher funktioniert alles.

In der ursprünglichen Tabelle kommen jedoch einzelne Spalten hinzu.
Zeitpunkt und Anzahl der Spalten ist vorher nicht bekannt. Allerdings muss die Reihenfolge beibehalten werden.
Meine zusätzliche Spalte im DGV bleibt also die letzte Spalte rechts außen.

Wie kann ich das trotz der Bindung lösen?
Geht das mit der Bindung überhaupt oder muss ich die Bindung aufheben und das DGV manuell füllen?
Eventuell eine Kopie der Tabelle erstellen und die Kopie direkt ändern? Also die Spalte bereits in die Tabelle einfügen? Dann muss ich sicherstellen, das Änderungen im Original erkannt werden.
Welche Variante bietet sich hier an?

Sorry, aber komme im Moment selbst nicht drauf.

schnelleHelga

10.07.2015 - 14:45 Uhr

Hallo,

ich möchte nur noch dazu erwähnen, dass es mit der Sprache allein nicht getan ist. Das Verständnis der Sprache hängt immer mit dem Verständnis der Situation zusammen. Viele Wörter und Sätze haben in einem anderen Zusammenhang auch eine andere Bedeutung.

schnelleHelga

22.05.2015 - 15:27 Uhr

Hallo Kingside,

eine Empfehlung möchte ich ausdrücklich nicht aussprechen, da ich den Anwendungszweck nicht kenne. Es gibt aber genug Hersteller, vorwiegend für Schließanlagen (z.B. ABUS, Burgwächter usw.), die Biometriekomponenten mit dem erforderlichen Zubehör anbieten.

schnelleHelga

23.04.2015 - 11:24 Uhr

@Taipi88

na dann war ich wohl noch nicht dienstlich dort. Es soll Prüfer geben, die machen Dir aus einem weißen Blatt Papier eine steuerrechtlich korrekte Rechnung, aus der Du die ausgewiesene USt schuldest. (das ist kein Spass)

Meine Bemerkung zur Aufbewahrung ist sehr ernst und Word bzw. Excel sind doch "elektronisch verarbeitet" oder?
Dazu gibt es bereits massenweise Urteile die in den meisten Fällen zu Gunsten der Prüfer ausgegangen sind. Das Gesetz unterscheidet an der Stelle nicht zwischen 100000-Mann Konzern und 1-Mann Handwerker! Schau Dir im Netz die Diskussionen zu diesem Thema an. Der technische und finanzielle Aufwand für Kleinbetriebe wird zu einem immer größeren Problem.

23.04.2015 - 10:38 Uhr

@hypersurf

hi, die steuerrechtlichen Änderungen erfolgen seit ein paar Jahren nicht mehr zwischen 24.12. und 1.1. sondern inzwischen auch unterjährig. Die nächste kommt übrigens im Juni. Ich habe zwei Produkte in der Abfallwirtschaft auf dem Markt gehabt. Bei beiden gibt es kundenspezifische Anpassungen.
Die meisten Änderungen betreffen Formulare und Protokolle in der Datenübertragung zum Finanzamt. Ab und zu kommen auch steuerliche Änderungen. Die Maßgaben zum §13b UStG wurden allein im Laufe des Jahres 2014 dreimal geändert.
Problem: Ich kann zwar die Haftung insoweit beschränken, dass ich alle Parameter an meine Auftraggeber hefte. Die stellen also z.B. die Steuersätze selbst ein usw. aber ich bin trotzdem in der Pflicht, alle gesetzlichen Änderungen rechtzeitig(!) umzusetzen. Zu gut deutsch: Gesetz wird voraussichtlich am 15.6. beschlossen und gilt ab 1.6.
Bei einer 'Änderung kein Problem, bei zwei oder drei und Formularänderungen oder noch lustiger wirds bei Änderungen in der Datenübertragung, ist das nicht mehr zu schaffen, weil ich keine riesen Summen für Wartung verlangen kann.
Dazu kommt die Nachweispflicht in der Abfallwirtschaft, was für eine kleine Softwaretruppe ganz einfach ne Nummer zu groß ist. Da bleib ich realistisch und hebe an dieser Stelle lieber die Hände.

Das Hauptproblem: Ich muss mich informieren, was an Änderungen kommen wird. Im Voraus umsetzen und bereitstellen, denn der Kunde bekommt das meist erst mit, wenn ihm jemand sagt: "Deine Rechnung ist falsch" oder "es fehlt ein Nachweis" oder sonst was.
Dann in einem Tag eine Lösung präsentieren geht gar nicht (Recherche, Analyse, Umsetzen, testen). Die Versicherung freut sich.

schnelleHelga

23.04.2015 - 09:23 Uhr

Und was die Haftung angeht, soweit ich es verstanden habe tritt Ovoxo nicht als Juristische Person auf sondern private Person. Da gelten ganz andere Vertragsbedingungen, meist zum Schutz der private Person. Ich würde fast darauf Tippen, das Ovoxo nur haften müsste wenn ihm Grobfahrlässigkeit oder Mutwilligkeit bewiesen werden kann.

Die Steuerfahndung interressiert es nicht, ob das privat oder juristische Person ist.
Leider selbst schon erlebt.
und grob Fahrlässig beginnt mit dem Ignorieren von Gesetzen / Bestimmungen.

edit:
Bei einer Rechnung hat fast alles mit Steuern zu tun. Mit einfachen Worten: Alles was elektronisch verarbeitet wird, muss auch elektronisch gescheichert werden. Der Aufwand nimmt gewaltig zu. Ich stehe auf beiden Seiten. Kümmere mich hauptberuflich um Rechnungen mit allem Zubehör. Nebenbei mache ich meine Software selbst, teilweise auch für "Fremde". Die Anforderungen sind in den letzten Jahren gewaltig gewachsen.

22.04.2015 - 15:10 Uhr

Der Client muss ja nur den Schüssel haben d.h ich könnte ihn ja auch in der Regestrierung ablegen und somit hat der User nichtmal ne Ahnung das ein solcher schlüssel Existiert. Ahh es gibt soviele möglichkeiten soviele Ideen...einfach Unfassbar...aber es macht Spaß 😄

Der Empfänger brauch den Schlüssel aber auch. Oder der Server entschlüsselt vor dem Senden.

22.04.2015 - 14:38 Uhr

in den Nutzungsbedingungen definieren, dass Nachrichten bis zur Zustellung zwischengespeichert werden. (Geht ja nicht anders)

Dann die Nachrichten verschlüsselt speichern. Der Entwickler kann eigentlich immer lesen, wenn er will. Du sendest die Nachrichten ja sicherlich unverschlüsselt, d.h. du musst den Schlüssel kennen.
Eventuell bietet sich auch ein Clientspezifischer Schlüssel an. Der muss aber auch bekannt sein, sonst kann der Empfänger nichts lesen 😉

22.04.2015 - 12:59 Uhr

Ohh sorry,

wieder was gelernt.
und Danke für die Berichtigung.

22.04.2015 - 12:35 Uhr

du brauchst aber auch eine Rückmeldung vom Client, was zugestellt wurde. könnte bei vielen Clients auch umfangreich werden. Viele Chats verwenden UDP, also keine Rückmeldung.

22.04.2015 - 09:59 Uhr

Auch wenn sich einige scheuen, juristisch was dazu zu sagen.
Bitte beachte bei einer Kundendatenbank, die Anforderungen an deine Software, wenn die enthaltenen Daten steuerlich relevant sind. (elektronische Archivierung, Änderungsprotokoll usw.)
Alles, was in irgend einer Form Einfluss auf Steuern hat, löst o.g. Bedingungen aus.
es reicht, den Mehrwertsteuersatz oder Preislisten zu speichern.
Vom laufenden Aufwand für Anpassungen wegen Gesetzesänderungen mal abgesehen.
Nach aktuell geltendem Recht haften beide Seiten, der Anwender und der Entwickler.

Ich habe mein Produkt aus diesem Bereich vor drei Jahren eingestellt, weil ich mit meinem 2 Mann-Betrieb die ständigen gesetzlichen Änderungen nicht mehr berücksichtigen kann.

Ich glaube, es will dir hier niemend das Projekt ausreden, sondern nur darauf hinweisen, dass ein wenig mehr zu beachten ist, als kundendaten zu speichern und wieder abzurufen.

schnelleHelga

21.04.2015 - 08:31 Uhr

eventuell hilft ja ein zweites Logfile mit Schlüssel und eingeschränkten Schreibrechten? WER was gemacht hat bekommst du so aber auch nicht mit.

20.04.2015 - 15:27 Uhr

einfach verschlüsseln, wenn nicht mit dem Editor gelesen werden muss.

Ich als Putzfrau würde ja das Logfile löschen, wenn ich schon was "versaue".

schnelleHelga

16.04.2015 - 10:04 Uhr
  1. Rechte einschränken (lokal)
  2. Zugriff auf die Setups nur temporär zulassen
  3. jedem auf die Finger klopfen, der sich nicht dran hält

hab ich noch was vergessen?

ach ja, wenn es um Fremdsoftware geht unterliegt die den jeweiligen Lizenzen. Warum solltest Du dann noch mit eigenen Tools die Installation verhindern? entweder der Nutzer ist berechtigt oder nicht. Siehe dazu Punkt 3.

schnelleHelga

15.04.2015 - 22:02 Uhr
  1. verwende die richtigen Tags für den Beispielcode, ist besser zu lesen.

  2. mach Dir eine Klasse mit Fragen und merk Dir welche schon gestellt wurde. oder nhem wenigstens eine Liste dafür, welche Fragen gestellt wurden.

schnelleHelga

15.04.2015 - 12:07 Uhr

ich würde die Ziffern immer in die gleiche Variable übernehmen. Es kann doch sein, dass die Rechenoperation bestimmt, als welcher Operand die Zahl zu behandeln ist.?

schnelleHelga

14.04.2015 - 14:06 Uhr

Hallo telfa,

der Aufruf erfolgt für jede Zeile Deines DGV. Wenn Du da 1000 Datensätze stehen hast, wird das auch 1000mal aufgerufen. Die Farbe muss ja für jede Zeile gesetzt werden.
Die Endlos-Schleife liegt eventuell am Debugger?
Die RowPrePaint-Methode ist mit dem Debugger natürlich "endlos", wenn Du Deine Anwendung nicht direkt auf dem Bildschirm hast. Holst Du das Fenster in den Vordergrund, startet das Zeichnen natürlich erneut.

schnelleHelga

14.04.2015 - 12:13 Uhr

hier nochmal ein kurzer Beispielcode, färbt die Zeile in abhängigkeit eines Zellinhaltes.

     
 private void dataGridView1_RowPrePaint(object sender, DataGridViewRowPrePaintEventArgs e)
        {
            try
            {
                // Zelle "kyu" enthält die Farbinformation
                int guertel = Convert.ToInt32(dataGridView1.Rows[e.RowIndex].Cells["kyu"].Value);

                switch (guertel)
                {
                    case 1:
                        dataGridView1.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.Brown;
                        break;
                    case 2:
                        dataGridView1.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.Blue;
                        break;

erstellt einen Querstreifen in einer anderen Farbe
in der CellPainting-Methode:


                int streifen=e.CellBounds.Height/3;
                Rectangle newRect2 = new Rectangle(e.CellBounds.X, e.CellBounds.Y + streifen, e.CellBounds.Width, streifen);

und zeichnet den Hintergrund neu:


                        e.Graphics.FillRectangle(backColorBrush, e.CellBounds);
                        e.Graphics.FillRectangle(backColorBrush2, newRect2);

ein Invalidate() ist hier nicht notwendig.

gruß
schnelleHelga

14.04.2015 - 12:00 Uhr

hallo,

RowPrePaint

dort die Hintergrundfarbe setzen (für die Zeile, DGV.Rows[x].DefaultCellStyle.BackColor) und dann wird auch korrekt gezeichnet. Das Neuzeichnen wird bei Änderungen im DGV automatisch veranlasst. Wenn die Farbe anhand Ereignisse außerhalb des DGV reagieren soll, musst Du von Hand Neuzeichnen lassen.

schnelleHelga

14.04.2015 - 11:45 Uhr

Hi Telfa,

ich würde in der RowPrePaint-Methode je nach Wunsch die Farbe für diese Zeile setzen, den Rest sollte dann CellPainting() selbst hinbekommen.
"Sonderwünsche" wie z.B. gestreifter Hintergrund musst Du selbst zeichnen (CellPainting).
Habe das gleiche Problem bei einer Anwendung für Kampfsportler gehabt. Dort sollte die Zeile nach Gürtelfarbe gezeichnet werden. Also orange/grün als Hintergrund. Habe ich dann selbst in CellPainting eingefügt.

schnelleHelga

08.04.2015 - 06:41 Uhr

Danke Abt für die schnelle Antwort,

mir war auch keine andere Lösung eingefallen. Dann muss ich halt die Ergebnisse zwischenspeichern. Ich hoffe, das dauert nicht allzu lang.

Ich könnte natürlich auch einfach Listbox verwenden und die Ebenen einzeln darstellen. Dann reduziert sich das auf jeweils ca. 10 Elemente pro Ebene. Ist zwar nicht schön, aber zum Testen reicht das auch. Zwischenspeichern muss ich aber trotzdem.

schnelleHelga

07.04.2015 - 22:37 Uhr

Hallo,

ich habe wieder mal ein Grundsatzproblem. Ich habe einen Baum mit sehr vielen Elementen (>10 Mio ) bei bis zu 10 Ebenen.
Diese wollte ich zum schnellen Durchhangeln als Treeview darstellen. Leider steigt er bei ca. 5,2 Mio mit Speicherproblem aus.
hat jemand eine Idee, wie ich die Elemente ähnlich gut ohne Speicherbegrenzung darstellen kann?

Eine Datenbasis gibt es praktisch nicht. Die Daten stammen aus einer Simulation und werden direkt berechnet. Leider gibt es in dieser Berechnung manchmal Fehler, so dass ich mir die Rechenschritte darstellen wollte. Die Ebenen kann ich nicht einschränken, da sich der Rechenfehler erst ab Stufe 9 oder 10 bemerkbar macht.

Ich habe schon überlegt, die Ergebnisse in einer DB abzulegen, aber dann dauert das Schreiben ewig und die Darstellung ist natürlich nicht so übersichtlich.

Oder gibt es eine Möglichkeit, nur einen Teil als Treeview darzustellen, ohne das die Übersichtlichkeit leidet?

schnelleHelga

06.04.2015 - 13:34 Uhr

Hi spike1302,

meiner Meinung nach gibt es bei Deinem Berechnungsansatz ein paar kleine "macken". In welchem Zeitrahmen läuft Deine Simulation? Ein Angriff pro Minute?
Wie Du schon selbst schreibst --> Angriff erfolglos --> Angriff für Gegner! Das bedeutet aber auch, das Du dann einen Konter hast, bei dem Du eventuell die Abwehr schwächer bewerten musst.
Problem: Beachten, in welchen zeitlichen Rahmen sich Angriff/Konter bewegt. Wenn es zu lange dauert, ist die Abwehr wieder da.
So wie Dein Ansatz jetzt aussieht, müsstest Du bei Angriff über eine bevorzugte Seite dann aber auch die taktik und Aufstellung der Abwehr beachten. Die würde sich in so einem Fall dann ebenfalls umstellen.

Ich habe vor vielen vielen Jahren mal so was auf c64 gemacht. Dabei habe ich die aktuelle Tabellenposition und eventuelle Sieg- Niederlagenserien mit in die Stärke einfließen lassen. Weiterhin habe ich berücksichtigt, dass auch eine starke Mannschaft bei einem Gegentor an Stärke verlieren kann und umgekehrt.

Das nur mal so paar Anregungen.

So wie Du das jetzt umsetzen willst, wird die starke Mannschaft am Ende immer Erster und die schwache immer Letzter. Die Zufallszahlen sind i.d.R. gleichmäßig verteilt. Du musst also bei den Torchancen noch andere "Unterscheidungsmerkmale" berücksichtigen.
Das brauch sehr viel Testläufe und Anpassungen bei den Parametern, bis Du Dein gewünschtes Ergebnis bekommst. Pauschal 30% oder so kann Dir wahrscheinlich keiner sagen.

Bei mir konnte praktisch auch ein Zweitligist gegen Bayern München gewinnen. Ist zwar sehr selten passiert, hats aber gegeben.

gruß schnelleHelga