Laden...
Avatar #avatar-3206.png
Benutzerbeschreibung
„Morgen ist noch nicht gekommen, und gestern ist vorbei. Wir leben heute.”

Forenbeiträge von malignate Ingesamt 742 Beiträge

24.09.2012 - 14:52 Uhr

Vll hilft das:
XML Schema Definition Tool (Xsd.exe)

Findet man auch gut per Google 😉

21.09.2012 - 14:28 Uhr

Ich verwende eine Art Mix aus Entity-Framework 4+ und NHibernate. Kurz mal an einem Beispiel industrieren.

  1. Ich habe POCO Entities und dazu ein DBContext:

public class User {
   public string Name { get; set; }
}

public Context : DbContext {
   public DbSet<User> Users { get; set; }
}

  1. Mein Contract besteht aus 3 Schnittstellen:

interface ISessionFactory {
   ISession OpenSession();
}

interface ISession {
   IUserSet User { get; }

   void SaveChanges();
}

interface IUserSet {
   User QuerySingleByName(string name);
}

  1. Die Implementierung mappt dann das DBContext nur auf Interfaces. Mit ein paar Basisklassen ist das relativ wenig Aufwand, viele Methoden, z.B. im IUserSet sind ja immer gleich (Delete, Add usw.)

Vorteile:

  1. ISessionFactory leicht injezierbar.
  2. POCO's, keine Abhängigkeiten zum Provider.
  3. Meiner Meinung nach leichte API.

Ich muss auch dazu sagen, dass ich das Repository Pattern zu 99% für Unit Tests verwende und zu 1% weil ich die Möglichkeit haben möchte, die Datentechnologie auszutauschen. Nicht immer sind POCO's komplett frei von Attributen etc. und oft entwickelt man ja auch die Entitäten so dass sie zur Datentechnologie passen. Zum Beispiel sind Vererbungen mit MongoDB deutlich einfacher.

10.09.2012 - 13:05 Uhr

Beim Skalieren müssen die Polylines nur skaliert werden, das kann die Grafikkarte machen.

Btw: Schon mal Hardware Rendering aktiviert?

07.09.2012 - 19:35 Uhr

Da fallen mir viele Punkte ein:

  1. Weniger Punkte: Bei 1000 Punkten hast du mehr oder weniger Punkt ein Pixel, das sieht zwar bestimmt sehr weich aus, ist aber total unnötigt, die Hälfte oder ein viertel reicht auch aus, es sei denn dein Zeichenbereich ist Scrollbar.

  2. Mehrere Polylines: Wenn es nicht gerade um ein Tonspektrum oder so handelt, wird sich ja nicht alle 20ms alles ändern. Verwende mehrere Polylines, z.B. 10 Stück und aktualisiere nur die, die sich ändern.

  3. Scrollbar: Ist der Bereich Scrollbar, brauchst du auch nur die sichtbaren Bereiche zu aktualisieren. Verwende wieder mehrere Polylines oder Segmente.

  4. Erstelle keine neue Liste. Eventuell hilft auch eine ObservableCollection? Vermute aber, dass es in dem Fall nicht funktionieren wird.

13.07.2012 - 13:16 Uhr

Kenne mich mit dem Thema nicht so aus, aber ich würde nen Windows Service schreiben, den du per Installer einmalig deployst und nach Updates frägt und die am besten Nachts installiert. So hast du auch nur Pulls. Dieser Service klönnte auch Logs usw. pushen

30.11.2011 - 18:48 Uhr

Warum nimmst du nicht einfach den HashCode des Html Strings? Oder hast du keinen Zugriff?

19.11.2011 - 23:03 Uhr

Warum nicht einfach WCF bzw. eine Webservice mit guter WSDL und auf dem Server ein O/R Mapper?

11.10.2011 - 10:48 Uhr

Nette Sache, einziger Kritikpunkt von meiner Seite ist die Schnittstelle. Die könnte ein bisschen schöner sein, vll. mit Serialization.

Ich möchte eigentlich nur sowas:



[Table("MailProvide")]
public class MailRow
{
   public string Pop { get; set; }
}

MailRow row = fireDolphon.GetItem<MailRow>("Gmx"); // über params object[] ...

Die Signatur einer solchen MailRow Klasse müsste dann natürlich in der Doku stehen, für Copy und Paste.

Oder aber einfach pro Tabelle eine angepasste typisierte Soap Schnittstelle mit WSDL, dann wird bei Änderungen auch gleich der eigene Code aktualisiert (über Update Reference).

29.09.2011 - 20:52 Uhr

Perfekt, es geht alles:


        class TestActor : Actor<int, string, bool, short>
        {
            protected override void Handle(int input)
            {
                Console.WriteLine(input);
            }

            [Teardown]
            protected override void Handle(string input)
            {
                Console.WriteLine(input);
            }

            [Parallel(MaxDegree = 4)]
            protected override void Handle(bool input)
            {
                Console.WriteLine(input);
            }

            [Exclusive]
            protected override void Handle(short input)
            {
                Console.WriteLine(input);
            }
        }

29.09.2011 - 17:24 Uhr

Du hattest Recht, das hilft mit weiter.

Dort gibt es ein ConcurrentExclusiveSchedulerPair, der einen Excluisve und einen Concurrent Scheduler bietet und dabei einen anderen Scheduler wrappt.

Das ist genau das was ich brauche 😃

29.09.2011 - 13:31 Uhr

Kannte ich noch nicht, aber ich verstehe nicht, wie das hilft, das ist doch ein großer Untershied.

Bei den Flows geht es darum größere Asynchrone Worflows zu beschreiben und bei Actoren eine Anwendung in kleine Agenten aufzuteilen, die miteinander über Messages zu kommunizieren.

Ich denke ich komme über einen eigenen Scheduler nicht drum herum. Wird aber nicht einfach 😉

29.09.2011 - 13:12 Uhr

Es geht konkret um Aktoren, wie auch in Scala. Das ist eher ein Experiment:

So ein Actor kann z.B. so aussehen:


public class MyActor : Actor<int, string>
{
   [Receive]
   public void Handle(IActorRef sender, int message)
   {
   }

   [React]
   public void Handle(IActorRef sender, string message)
   {
   }
}

React kann dabei parallel ausgeführt werden, kommt aber ein string, muss das mit anderen Task synchronisiert werden.

Das Ziel ist dabei, nicht mit anderen Aktoren in Konflikt zu geraten. Würde man z.B. einfach ein lock machen und danach extrem viele Int Messages an diesen Aktor schicken könnte das auch die anderen Aktoren blockieren.

Das heisst, das skaliert dann nicht mehr.

29.09.2011 - 12:51 Uhr

Ja, daran habe ich auch gedacht, aber der Scheduler wird sehr komplex und ich würde auch gerne das Scheduling von der Synchronisation unabhängig halten.

29.09.2011 - 12:08 Uhr

Hi,

ich experimentiere gerade ein bisschenm mit dem Actoren Konzept in C# herum und konkret mit der Synchronisierung.

Ich würde gerne Task Gruppen definieren, wobei manche Tasks in dieser Gruppe exclusiv ausgeführt werden und manche nicht.

Alle Gruppen zusammen und deren Task werden von einem Scheduler behandelt.

Ich habe leider keine Idee, wie man das gescheit implementieren kann.

13.09.2011 - 16:08 Uhr

Am KIT (Unit Karlsruhe) wird an einem System für Fördersystems gearbeitet
KIT: "KARIS" ist Preisträger im Wettbewerb "365 Orte im Land der Ideen".

Genauso gut könnte ich mir auch Autos vorstellen, die sich kombinieren lassen. Es könnte eventuell einfach verschiedene Module geben, z.B.

Person (Front)
Person (Mitte)
Transport (Front)
Transport (Mitte)
Transport Hoch (Mitte)

usw. und die verschiedenen Teile organisieren sich selbstständig um ihre Aufgaben zu erledigen, beispielsweise 4 Personen von A nach B zu Transportieren oder für einen Umzug eine Familie + Gepäck oder ein großer Schrank.

Zusammen mit der Tatsache, dass ich kein eigenes Auto mehr brauche und keine verschiedenen Fahrzeuge mehr für unterschiedliche Szenarien kann man bestimmt 2/3 alle Fahrzeuge verschrotten.

16.08.2011 - 16:56 Uhr

Das ist ohne Kontext nicht soo verwunderlich. Wie würdest du es in einem .NET 2.0 Projekt (ohne Linq) lösen, wenn du z.B. von irgendeiner Methode ein IEnumerable zurückbekommst?

11.08.2011 - 08:34 Uhr

Das verstehe ich auch, besonders wenn man dann als Festangestellter irgendwelchen Mist ausbaden muss.

Aber das ist eine Frage des Marktes, genauso gut muss man sich gegen Billiganbieter, ausländische Firmen und so weiter wehren. Es ist klar, dass ihr gegen Verwandschaft keine Chance habt, aber in den anderen Fällen hat vor allem eure Marketing- bzw. Verkaufsabteilung versagt.

Zudem gibts auch genug professionelle Firmen, die mit sehr wenig Ahnung Software entwickeln, also auf beiden Seiten gibts gute und schlechte Anbieter.

10.08.2011 - 21:31 Uhr

@Coder007:
Ich verstehe es einfach nicht, ein hohes Gehalt ist für mich eher ein Indikator gut wirtschaften zu können. Das ist zumindest meine Vision eines guten Unternehmens.

Und zum Thema Einarbeitungszeit: Es gibt doch immer wieder unabhängige Komponenten. Beispielsweise musste ich gerade einen Scheduler für TPL schreiben, das kann doch jeder machen, ohne sich in das Produkt einzuarbeiten. Man erklärt, wo der eingesetzt wird und Stück für Stück lernt man das ganze Projekt kennen, hat sich dabei noch intensiv mit Threading auseinandergesetzt und evtl. die TPL ein bisschen kennengelernt.

Aber irgendwie führt die Diskussion zu nix...

Edit: Ich wünsche übrigens jedem einen Job zu finden, bei dem man gut bezahlt wird und sich auch ein bisschen was aufbauen kann, angefangen bei Friseurinnen, die absolut unterbezahlt sind (was bekommen die wohl bei 5€ Schneiden und Waschen mit 15 min Arbeit).

10.08.2011 - 20:46 Uhr

@Code007:

Ich kanns nur noch mal wiederholen, das sind KEINE Wunschvorstellungen:

  1. Ich habe bei 3 Firmen gearbeitet, die das gezahlt haben und jetzt, da ich Selbstständig bin sogar noch mehr zahlen.

  2. Ich musste dafür nicht Angebote ablehnen oder groß darum kämpfen. Ich habe es beim Vorstellungsgespräch einmal gesagt und die haben sofort akzeptiert.

  3. Im Grundstudium hatte ich nicht mehr Zeit, später wollte ich noch an meinem Startup arbeiten und für die Hochschulgruppe. Was ich in der Zeit geschafft habe: Ein O/R Mapper, Prototyp für ein Monitoring Tool, ein Lokalisierungstool usw. Da ich mich immer von Meetings befreien konnte, habe ich auch wirklich 7h entwickelt, da schafft man an einem Tag, wofür andere 3 brauchen (nicht als Kritik gemeint).

Edit:

Jetzt habe ich fast schon vergessen, worum es mir eigentlich geht: Ich kann nicht verstehen, wie man 18 Euro als zu viel empfinden kann.

Wenn ich von einem begabten Studenten ausgehe und einer guten Architektur, kann ich diesen eigentlich die ganze Zeit mit unabhängigen Komponenten beschäftigen. Die Einarbeitungszeit ist daher minimal und ich kann mit gut 6 von 8h Entwicklung rechnen. Da es eigentlich keinen Sinn macht, dass er auf zuviel Meetings geht (ich saß da immer nur dämlich rum), halte ich das nicht für zu optimistisch. Wenn ich das ordentlich plane und der Student gut ist, kann ich locker 80% von den 6h abrechnen. Das heisst er kostet mich 8 * 18€ = 144 € und bringt mir 6 * 0.8 * 100 € = 480 € pro Tag

Das ist zwar eine naive Rechnung, das ist mir klar. Aber im Endeffekt habe ich einen super Gewinn. Wir haben mal in einer Firma ausgerechnet, was die Meetings so kosten. Da 90% nie was zu sagen hatten, waren das einige Studenten, die man hätte einstellen können.

10.08.2011 - 19:18 Uhr

Würde mich auch mal interessieren aus welchem Bundesland ihr kommt.

Hier in BW bekommt man zum Beispiel für manche Aushilfsarbeiten schon 8,50 €. Wobei die Welt einfach ungerecht ist, man bekommt schon für Ferienjobs oft mehr als die Zeitarbeiter. Das ist echt mies, wird aber natürlich nicht besserer, wenn man die Ferienjobbler / Schüler / Studenten schlechter bezahlt.

@Equilibrium: Stimmt, aber wir reden auch über eine Art Mindestlohn. Gerade im IT Bereich ist das alles irgendwie fließend. Es gibt Studenten, die nur zuarbeiten und andere, die eigentlich die gleiche Verantwortung, Pflichten und Rechte wie Festangestellte haben. Ich bin aber froh, dass es so ist und Leistung mehr zählt als Titel.

10.08.2011 - 17:29 Uhr

Ich bin im 8ten Semester jetzt und habe schon 3 Firmen in dieser Zeit gefunden und zwar immer beim ersten Vorstellungsgespräch, man muss vll. nur mutig sein.

Ich finde das auch nicht überzogen, ich habe sehr geringe Einarbeitungszeiten gehabt, zum Teil schon am ersten Tag eine Komponente entwickelt und meine Stunden werden mit mindestens 100 € an den Kunden weitergegeben, sogar oft direkt 1:1.

Das heisst es bleibt ja auch eine riesiger Anteil für den Arbeitgeber übrig.

Zudem ist es nicht selten vorgekommen, dass ich mal 3h im Internet surfen musste, weil mein Aufgabe erledigt war, es nichts zu tun gab und mein Vorgesetzter gerade keine Zeit hatte (und ich bin im wirklich und auch im Vorfeld auf die Nerven gegangen, mir endlich eine Aufgabe zu geben). Wenn so verschwenderisch mit Ressourcen umgegangen wird kann es ja nicht am Geld liegen. Darüberhinaus wurden mir ständig Steine in den Weg gelegt, effektiv arbeiten zu können. Winziger Monitor, superlahmer Rechner, keine Lizenzen für Software usw. Das ist einfach pure Verschwendung.

Das sind auch einige der Gründe warum ich jetzt selbstständig bin und erstaunlicherweise arbeite ich für deutlich mehr Geld immer noch für die gleiche Firma, aber von zu Hause aus.

Das ist auch kein Einzelbeispiele, sondern habe ich schon mehrere Mal erlebt und auch von anderen gehört und irgendwie wirkt das für mich so, als ob wirklich Not am Mann wäre, gute Entwickler rar sind und man sich aber trotzdem nicht richtig um die Leute kümmert, die man hat.

10.08.2011 - 16:36 Uhr

Quatsch.

Das kann je nachdem dann so aussehen:

  • 8h * 4 Wochen * 18 € = 576 € pro Monat
  • Krankenversicherung (70€)
  • WG Zimmer (250€)

250 €

Also so üppig ist das nicht.

10.08.2011 - 16:31 Uhr

Ja, aber dieser Stundenvergleich ist eh nicht sinnvoll.

Als Student:

  • Muss man auch davon leben
  • Hat man manchesmal keine Zeit, z.B. bei Klausuren
  • Wird auch das Studentenleben immer teurer, wenn man mal was verdient, evtl. kein Wohnheimplatz mehr, Krankenversicherung usw.

Als Selbstständiger:

  • Steuern, Versicherungen
  • Eventuell nicht volle Auslastung und gelegentlich weniger zu tun
  • Mehr Investitionen in Ausstattung: Software, Rechner, Büro

Wenn ich davon ausgehe, dass ich mein Studium selber finanzieren muss und ich je nachdem im Grundstudium nur 1 oder 1,5 Tage pro Woche Zeit habe, reichen 8€ einfach nicht aus. Das sind dann ja auch gerade mal 384 € im Monat.

Für 600 € im Monat brauche ich also minimum 12,50 € und dann wirds knapp, wenn mal wieder ein Feiertag ist oder eine schwere Klausur oder eine der seltenen Anwesenheitspflichten an der Uni.

10.08.2011 - 16:18 Uhr

Also ich würde als Student nicht mehr unter 18 Euro / Stunde arbeiten, das ist mein Minimum.

1100 Euro ist ein Witz finde ich, ich habe als Schüler mal in einem Lager gearbeitet, da habe ich mehr verdient. Ein guter Student benötigt auch maximal 2 Wochen Einarbeitungszeit.

Vielleicht sollte man nicht die Studentenlöhne drücken sondern "echte" Mitarbeiter in Selbstvermarktung schulen 😉

10.08.2011 - 10:03 Uhr

Ich würde genau das Gegenteil vorschlagen:

Ich bin Student und habe als Werkstudent gearbeitet und bin jetzt selbstständig:

Meine Vorteile:

  • Ich verdiene das Dreifache (obwohl ich z.T. immer noch für die gleiche Firma arbeite)
  • Kann mir meine Arbeit besser einteilen
  • Ich habe ein super Projekt und kann mich besser durchsetzen, auch einfach deshalb weil ich keine Vorgesetzte habe und der Gegenpart auch viel zu verlieren hat.

Der Markt ist mir eigentlich recht egal, es finden sich immer Leute die billiger arbeiten, auch billiger als ich. Wenn ich irgendwann keine Projekte deshalb bekommen sollte, mache ich was falsch. Und so wenig ist 30€ / Stunde ja auch wieder nicht, da kenne ich sogar fertig studierte die weniger verlangen.

09.08.2011 - 13:46 Uhr

Du kannst einfach im UserControl ein Dependency Property definieren und dann den Expander per Binding übergeben.

Oder noch einfach: Ziehe den Expander mit in das UserControl rein.

06.08.2011 - 15:15 Uhr

+1 to unconnected, ist wirklich die einfachste Alternative

06.08.2011 - 15:13 Uhr

Referenzen zuweisen ist immer atomar in C#. Steht so im Standard.

06.08.2011 - 12:13 Uhr

Rechne auf jeden Fall einen Puffer ein, falls es zu Probleme kommt. Mindestens 20%

01.08.2011 - 18:27 Uhr

Ich würde auf keinen Fall bei den Properties Exceptions schmeißen, das nervt total beim Debugging.

Deshalb mein Vorschlag:

Wenn du ASP.NET MVC und Silverlight in der Version 4.0 verwendest: DataAnnotations, die fügen sich auch gut in Entity Framwork ein.

Sonst: gfoidl's Lösung

Wenn du Exceptions willst würde ich PostSharp verwenden.

01.08.2011 - 16:37 Uhr

@Alf Ator:
Du vermischst hier mehrere Validierungsarten: Execption vs Attribute. Falls du beides willst, hilft eigentlich nur PostSharp.

Rein auf .NET (mit WPF und SL) Basis gibt es folgende Alternativen:

  • IDataErrorInfo
  • Data Annotations
  • Exceptions

Zusätzliche Möglichkeiten:

  • Attribute + Exceptions (PostSharp)
  • Attribute + IDataErrorInfo (gfoidl's Lösung)

@gfoidl:
Aber Exceptions werden bei deiner Lösung doch nur geschmissen wenn man eine Validate Methode aufruft oder? Sonst müsstest du ja auch IL Code irgendwie direkt beeinflussen, da die Attribute niocht automatisch "ausgeführt werden".

01.08.2011 - 12:39 Uhr

Hi,

zu System.DataAnnotations:

  1. Die Data Annotations werden afaik auch von WPF und Silverlight direkt unterstützt.

  2. Lokalisierung ist möglich, siehe ErrorMessageResourceType und ErrorMessageResourceName

  3. Man kann eigene Attribute machen -> Erweiterbar

  4. Validiert wird mit Hilfe des DataValidator's (selbe Assembly):


ValidationContext validationContext = new ValidationContext(this, null, null);

List<ValidationResult> validationResults = new List<ValidationResult>();

Validator.TryValidateObject(this, validationContext, validationResults, true);

26.07.2011 - 15:44 Uhr

@Herbivore: Geht mir genauso. Selbst die Texte sind von unserer Seite und übersetzt.

Aber wie gesagt, ich nehme das nicht so ernst, finde es aber ganz interessant und ändert meinen Blickwinkel zum Thema "Schützen von Software" auch etwas.

26.07.2011 - 09:55 Uhr

Es ist übrigens ganz interessant warum sowas gemacht wird. Zumindest ursprünglich ist das oft gezeigte Verhalten der Chinesen nämlich nicht aus Profitgier oder ähnlichem entstanden, sondern aus Wertschätzung des Originalproduktes und dessen Qualität und Produktmerkmalen. Nur sehr gute Produkte wurden kopiert weil sie besser waren als die eigenen.

Das habe ich auch schon gehört, aber der Unterschied ist, dass der Source Code wirklich geklaut ist. Wahrscheinlich mit Reverse Engineering (Reflector usw).

Ich mach mir jetzt auch keine Sorgen darum (finde es eher witzig und ein bisschen erbärmlich), weil wir eh nur wenig und in China gar keine Kunden haben. Das ist eher ein Projekt, dass wir so nebenbei machen.

Interessant ist aber auch, dass wir den Hinweis von einem Chinesen bekommen haben, der das gar nicht gut findet, aber vll. ist das auch der gleiche, der sich einschleimt 😉

26.07.2011 - 09:37 Uhr

Hallo,

scheinbar kopieren die Chinesen nicht nur Möbel und Autos, sondern auch als kleiner Softwareentwickler ist man von billigstem Kopieren und Source-Code-Stehlen nicht geschützt: Erbärmlich

Der erste Link ist unsere Projekt Seite und der zweite, nun ja, die "Lokalisierte Version":

http://silverdiagram.net/Projects/SilverDiagram.aspx
http://www.cnblogs.com/rippleyong/archive/2011/07/15/2107560.html (deutsche Übersetzung der Seite)

PS: Irgendwie macht es aber schon stolz, dass das eigene Projekt es wert war kopiert zu werden 😄

24.07.2011 - 17:29 Uhr

Eine andere Option ist ein eigenes Panel:


    public sealed class RelativePositionPanel : Panel
    {
        public static readonly DependencyProperty RelativePositionProperty =
            DependencyProperty.RegisterAttached("RelativePosition", typeof(Point), typeof(RelativePositionPanel), new PropertyMetadata(new Point(0, 0), new PropertyChangedCallback(OnRelativePositionChanged)));
        [ContractVerification(false)]
        public static Point GetRelativePosition(DependencyObject d)
        {
            Contract.Requires<ArgumentNullException>(d != null, "Dependency object cannot be null.");

            return (Point)d.GetValue(RelativePositionProperty);
        }

        public static void SetRelativePosition(DependencyObject d, Point value)
        {
            Contract.Requires<ArgumentNullException>(d != null, "Dependency object cannot be null.");

            d.SetValue(RelativePositionProperty, value);
        }

        private static void OnRelativePositionChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            UIElement reference = d as UIElement;
            if (reference != null)
            {
                RelativePositionPanel parent = VisualTreeHelper.GetParent(reference) as RelativePositionPanel;
                if (parent != null)
                {
                    parent.InvalidateArrange();
                }
            }
        }

        protected override Size ArrangeOverride(Size finalSize)
        {
            if (Children != null)
            {
                foreach (UIElement element in Children)
                {
                    if (element != null)
                    {
                        ArrangeElement(finalSize, element);
                    }
                }
            }

            return finalSize;
        }

        private static void ArrangeElement(Size finalSize, UIElement element)
        {
            Contract.Requires(element != null);

            Point relPosition = GetRelativePosition(element);

            double x = (finalSize.Width  - element.DesiredSize.Width)  * relPosition.X;
            double y = (finalSize.Height - element.DesiredSize.Height) * relPosition.Y;

            if (double.IsNaN(x)) x = 0;
            if (double.IsNaN(y)) y = 0;

            element.Arrange(new Rect(new Point(x, y), element.DesiredSize));
        }

        protected override Size MeasureOverride(Size availableSize)
        {
            Size size = new Size(double.PositiveInfinity, double.PositiveInfinity);

            if (Children != null)
            {
                foreach (UIElement element in Children)
                {
                    MeasureElement(size, element);
                }
            }

            return base.MeasureOverride(availableSize);
        }

        private static void MeasureElement(Size size, UIElement element)
        {
            if (element != null)
            {
                element.Measure(size);
            }
        }
    }

23.07.2011 - 20:55 Uhr

Warum nicht einfach ein Grid?

12.06.2011 - 22:54 Uhr

Wie wärs mit einem Fernstudium? z.B. an der Uni Haagen, ich glaube da hat man mehr davon.

Wenn man Grundlagen am Rechner hat, dann ist das ein Programm von vll. ein paar Monaten, maximal.

23.05.2011 - 09:22 Uhr

Silverlight bietet mehrere Http Stacks:

A new HTTP stack ready for REST

19.05.2011 - 10:26 Uhr

Das ist eine Optimierung. Gibt es im Typ ein gleichnamiges Dependency Property wird erst das mit SetValue() gesetzt.

Gibt es ein solches Dependency Property nicht wird nach einem Property gesucht und mittels Reflection der Wert aktualisiert.

Willst du auf Änderungen reagieren verwende Events.

15.04.2011 - 12:57 Uhr

Ich finds ja lustig, dass du keine Ahnung hast wie man das brauchen, aber man kann das z.B. gut für das Loaded Event brauchen und dann Daten laden bzw. neu laden.

09.04.2011 - 15:59 Uhr

Nach zwei Minuten Suchen habe ich das hier gefunden:

http://www.c-sharpcorner.com/UploadFile/dpatra/1144/

Sprich:

  1. FileInfos holen
  2. Files öffnen
  3. Für jedes File BitmapImage erstellen und Stream übergeben.
07.04.2011 - 20:41 Uhr

Gleiches Problem:

Quadrat Insel fängt bei (1,1) and und hört bei (3, 3) auf.

07.04.2011 - 19:27 Uhr

Damit könnte man eine Insel aber verpassen.

z.B. wenn man eine Quadrat-Insel hat, die bei (1,1) anfängt und (4,4) aufhört.

07.04.2011 - 19:01 Uhr

Sieht super aus, eigentlich wie mein Pseudo Code oben, bloß das du intelligenter Weise das Bild selbst als Gitter nimmst. Das suchen von neuen Inseln ist halt ein bissle langsamer dann.

Das ganze ist leider schlecht parallelisierbar, da man ja abwarten muss bis eine Insel fertig analysiert wurde.

Man könnte eventuell das Bild doch aufteilen und nicht fertige Insel nicht verwerfen sondern anschließend mit den anderen Inselteilen mergen.

Außerdem ist es vll. sinnvoll einen Punkt erst zu der Liste hinzuzufügen wenn ein Richtungswechsel erfolgt, damit der GraphicsPath einfacher wird.

07.04.2011 - 18:11 Uhr

Schonmal mit einem UpdateLayout danach probiert?

07.04.2011 - 17:21 Uhr

Vielleicht hilft folgendes:

Du könntest eine Art A* Algorithmus nehmen:

  1. Erstelle ein Gitter aus Knoten und weise jedem Knoten 2 Eigenschaften zu:
    bool : CanVisit = Pixel hat Border Color
    bool : HasVisited = false;

Füge alle Knoten mit CanVisit = true zu einer Liste hinzu.

  1. Wähle den ersten Knoten aus der Liste. Terminiere wenn Liste leer.
  2. Setze HasVisited = false und lösche ihn aus der Liste
  3. Suche einen Nachbar mit CanVisit = true und HasVisited = false, bevorzuge direkte Nachbar über Diagonale Nachbarn
    a) Kein Nachbar gefunden?
    Ist einer der Nachbar Startknoten -> Polygon gefunden, Fahre fort mit 1.
    Ist keiner der Nachbar Startknoten -> Terminiere mit Fehler
    b) Nachbar gefunden, Fahre fort mit 2.

Verwende für die Liste unbedingt HashSet, sonst ist die Performance im Keller. Nehme zum Beispiel Position (x,y) als HashValue.

Jeder Knoten hat nur 2 Boolean ist also klein, das heisst der Speicherverbrauch ist noch Moderat, bei einem Bild von 1 Mio Pixel sind das auch nur 2 * 1 Mio Byte für das Gitter + 4 * 1 Mio Byte für Pointer also locker unter 5,6 MByte denke ich.

Edit: Das ganze dürfte schnell genug sein, unmanaged Code ist hier auch gar nicht nötig denke ich. Die Laufzeit ist abhängig von der Größe des Bildes um das Gitter zu erstellen und abhängig von der Länge der Insel-Ränder für das Finden von Polygonen.

03.04.2011 - 17:54 Uhr

Genau deshalb der Link 😉

Das Telerik Control ist afaik eh nur für ASP.NET vorhanden und es hat eine Demo. Ich finde es super und wenn du noch eine einfache Syntax schreibst und das ganze dann Open Source machst, wäre ich dir sehr dankbar. 😉

z.B. mit nlinq: http://nlinq.codeplex.com/

02.04.2011 - 21:55 Uhr

Da es so an Grundlagen fehlt, würde ich vll. doch eher mal ohne Linq arbeiten:

z.B.



int sum = 0;

foreach (string value in strings)
{
   if (value != "hat nicht")
   {
        int intValue = int.Parse(value);

        sum += intValue;
   }
}

02.04.2011 - 19:34 Uhr

z.B. in Kurzform mit Linq:


int sum = strings.Where(x => x != "hat nicht").Select(x => int.Parse(x)).Sum();

using System.Linq; nicht vergessen.

Das sind aber absolute Grundlagen.