Laden...

Forenbeiträge von pdelvo Ingesamt 1.346 Beiträge

11.07.2015 - 19:08 Uhr

Entsprechende generic constraints sind aber aktuell im Gespräch um das in kommenden C# Versionen zu unterstützen. Aktuell geht das leider nicht nicht.

20.05.2015 - 01:30 Uhr

Hallo thexbasic,

Ich habe mich vor einiger Zeit lange damit beschäftigt und eine Bibliothek geschrieben, die mit dem Minecraft Protokoll umgeht. Das ganze ist aber leider aktuell veraltet(der letzte Commit ist knapp 1.5 Jahre alt), aber vielleicht hilft es dir weiter.

Bibliothek

Sich darauf zu verlassen, dass Packete am Stück ankommen ist generell keine gute Idee, Ich habe damals eine Abstraktionsschicht über den Netzwerkstream geschrieben, welcher mir sicherstellt, dass immer so viel gelesen wird, wie ich erwarte.

Das findest du hier.

Lieben Gruß,
pdelvo

20.04.2015 - 10:48 Uhr

Fun fact: Auf .net strings folgt im Speicher trotzdem immer eine 0, sie sind also doch 0 terminiert. Das erleichtert interop mit nativen code.

Aber da braucht man sich nicht selbst drum zu kümmern.

21.03.2015 - 23:09 Uhr

Hallo Joosy,

Das einzige was mir jetzt einfallen würde ist, dass du ausversehen "Scope to this" (oder das deutsche equivalent) ausgewählt hast. Du kannst im Projektmappenexplorer auf das Haus Symbol klicken um zur Ursprungsansicht zu kommen.

LG pdelvo

18.03.2015 - 16:22 Uhr

Hallo,

Hast du schonmal ein anderes System ausprobiert? Liegt es vielleicht daran? Ansonsten versuch mal mit git bisect (oder manuell mit binärer Suche) die Änderung rauszufinden, die den Fehler eingeführt hat.

LG pdelvo

03.03.2015 - 16:53 Uhr

Hallo gpc44,

Ich glaube eher nicht, dass Regex hier das Performanceproblem ist. Allerdings geht es eleganter (und vielleicht auch etwas schneller) mit


if(!string.IsNullOrEmpty(line) && char.IsNumber(line[0]) { ... }

Wenn aber wirklich ein Performanceproblem vieliegt ist es sicher nicht das gewesen.

LG pdelvo

03.02.2015 - 18:35 Uhr

Zwei Rechtecke sind kollidiert, genau dann wenn einer der Eckpunkte von Rechteck 1 in Rechteck 2 liegt oder einer der Eckpunkte von Rechteck 2 in Rechteck 1 liegt.

20.01.2015 - 12:31 Uhr

ich könnte mir vorstellen, dass man die .NET Compiler Platform Roslyn nutzen könnte, um selbst einen Quellcode-Obfuscator zu erstellen.

Mit Roslyn könnte man sowas sehr leicht umsetzen. Identifier umbenennen, whitespaces entfernen, unnötige Klammern hinzufügen, konstante Ausdrücke verkomplizieren, vielleicht noch schön hässliche gotos einfügen sollten sehr einfach sein

01.01.2015 - 21:30 Uhr

Du versuchst Ssl nachzubauen?

29.12.2014 - 00:19 Uhr

Ich habe gerade ODA - The Online Disassembler gefunden der wohl einzelne Anweisungen ohne Dateiheader dekompilieren können soll. Die Frage ist dann ob man mit dem Assember weiterkommt

28.12.2014 - 23:50 Uhr

Ja ich bin mir da sicher. Ich hab vor Jahren mal kurz damit rumgespielt. Man kann so nativen Machinencode ausführen. Bei Aufruf des delegates wird einfach an den Anfang des Speicherbereiches gesprungen und ausgeführt. Ist es vielleicht 64bit Code?

28.12.2014 - 23:29 Uhr

Das ist kein IL, sondern Machinencode der da drin steht. Da musst du einen x86 Disassembler bemühen.

LG pdelvo

15.10.2014 - 23:02 Uhr

Man kann 16 auch als Summe aus einen Summanden "darstellen" und hätte damit auch in diesem Fall eine Lösung.

10.10.2014 - 11:39 Uhr

Hallo,

Wie wäre es denn wenn du die Daten zum lesen öffnest und dadurch das Löschen verhinderst?

LG,

pdelvo

04.10.2014 - 21:21 Uhr

BlockingCollection wäre super, wenn nicht die Anforderung wäre Operationen die sich in der Auflistung befinden zwichenzeitlich abzubrechen, was diese leider nicht unterstützt (meines Wissens nach)

04.10.2014 - 20:58 Uhr

Hallo jacques,

Auch eine List ist nicht besonders gut dafür geeignet Elemente aus der mitte zu entfernen. Die List Klasse ist intern als Array implementiert, so das wenn man ein Element löscht jeweils der komplette rest umkopiert werden muss.

Ein Kandidat der das Effizienter kann ist die Linked List. Diese ist besonders effizient beim Einfügen/Löschen an beliebigen Positionen.

Nachteil: Die Linked list ist nichtthread safe. hier muss man also mit locks

An threadsicheren Auflistungen gibt es die Klassen in System.Collections.Concurrent, aber leider keine Linked List.

Lieben Gruß,

pdelvo

24.09.2014 - 11:57 Uhr

Hallo sth_Weird,

Du kannst das als Generic machen


RegisterDataTemplate<T>(DataTemplate template) where T : IMyInterface 
{
    Type type = typeof(T);
}

Lieben Gruß,

pdelvo

24.09.2014 - 11:11 Uhr

Hallo krambambuli,

Warum die Fehlermeldung auftritt dürfte klar sein. Das Xml Dokument ist nicht Standardkonform, da ein Xml Dokument immer nur ein Root Element haben darf. Da das Dokument ja, wie du geschrieben hast groß ist würde ich vielleicht versuchen einen eigenen TextReader zu schreiben, der das Xml Dokument beim einlesen repariert und ein Dummy Root Element einfügt, und ansonsten die Daten einfach durchreicht.

Du hast ja irgendwie sowas

<?xml version="1.0" encoding="utf-8" ?>
<foo1>
...
</foo>
<foo2>
...
</foo2>
...

Dann kannst du das so reparieren:

<?xml version="1.0" encoding="utf-8" ?>
<root>
    <foo1>
    ...
    </foo>
    <foo2>
    ...
    </foo2>
    ...
</root>

Lieben Gruß,

pdelvo

18.09.2014 - 18:25 Uhr

Hallo aken0,

Viel elleganter als


if(value < 19) return Untergewicht;
else if(value < 25) return normales Gewicht;
else if(value < 29) return leichtes Übergewiccht;
else return Übergewicht;

wirst du das nicht hinbekommen. Ich sehe da aber auch kein Problem drin.

Lieben Gruß,
pdelvo

14.09.2014 - 03:33 Uhr

Hallo UltraEdit,
Bring beide arrays in eine zufällige Reihenfolge (in O(n) möglich). dann kannst du 1 zu 1 zuordnen. kannst das also in O(n) machen.

Ist es das was du meinst?

LG pdelvo

27.08.2014 - 11:37 Uhr

Du musst die MailMessage danach auch disposen, damit die Datei freigegeben wird.

LG pdelvo

07.08.2014 - 22:06 Uhr

Was du bei der Methode der kleinsten Quadrate versuchst, ist die Summe der quadrierten Abstände deiner Schätzfunktion von den realen Werten zu minimierten. Also du musst k so wählen, das \sum_{i=0}^{n-1} (y_i - f_k(x_i))^2 möglichst klein wird. Das kannst du wahrscheinlich relativ gut Approximieren. Ansonsten ist vllt ddieser Algorithmus etwas für dich: Levenberg-Marquardt-Algorithmus

23.06.2014 - 19:09 Uhr

Ich persönlich finde es einfacher immer wieder durch 2 zu teilen anstatt durch 16. Klar hast du dann mehr Schritte, aber ich zumindest komme damit besser klar. Und wenn du die Zahl per Hand soweit runtergebrochen hast so das sie in den Taschenrechner passt kannst du ja damit weitermachen. Ist ja eigentlich schon nett dass ihr überhaupt einen benutzen dürft 😉

23.06.2014 - 18:34 Uhr

Da wirst du Wohl auf "traditionelle"Möglichkeiten Zurückgreifen müssen. mit Stift und papier ist das doch auch nicht sonderlich aufwendig.

LG pdelvo

10.06.2014 - 21:57 Uhr

Viele Dienste mögen es nicht, wenn kein User Agent mitgeschickt wird. Vielleicht liegts daran?

LG

03.06.2014 - 16:42 Uhr

Ich würde so daran gehen:

Was du ja haben willst, ist das du alles zwichen [] finden willst. Also brauchst du auf jedenfall etwas der Form [xxx]. Jetzt willst du den Inhalt in den Klammern schlussendlich lesen, also packst du da eine entsprechende Gruppe dafür rein [(?<match>xxx)]. Jetzt wär es sinnvoll eine möglichst Präzise Beschreibung des Inhaltes zu bekommen. Welche Zeichen dürfen in der Klammer sein? Das sind alle, außer [ und ]. Also hast du für den INhalt die Beschreibung [[]], und das darf sich natürlich beliebig oft wiederholen, so fehlt noch ein * dahinter. dadurch erhällst du den Ausdruck [(?<match>[[]])]. Damit findest du jetzt schon eine Klammer. Jetzt musst du probieren, durch wiederholung alle Klammern zu finden. Zwichen den Klammern darf ja alles stehen, außer [ und ]. Also Matcht [(?<match>[^[]])][[]]* einen Klammerausdruck, und den Bereich bis zum nächsten. Und das ist genau was du willst. denn ab da kannst du den Asdruck wieder von vorne anwenden. Also fehlen nur noch einmal ein * dahinter und der Ausdruck sollte passen: ([(?<match>[[]])][^[]])*

Es sieht wirklich komplizierter aus als es ist, vorallem durch die vielen Klammern. Aber so gehe ich vor wenn ich einen solchen Ausdruck aufstelle.

LG pdelvo

31.05.2014 - 13:44 Uhr

Sind die Buildabhängigkeiten nicht richtig gesetzt?

LG pdelvo

31.05.2014 - 00:23 Uhr

Du könntest auch das Kopieren der Dateien, und das anzeigen des Fortschrittdialoges mit Restdaueranzeige komplett Windows überlasen mittels SHFileOperation. Das Windows API Code Pack hat das soweit ich weiss alles vorgefertigt drin.

LG

25.05.2014 - 19:37 Uhr

Und unterstützt die Collection parallelisiertesd einfügen?

16.05.2014 - 20:50 Uhr

Du könntest versuchen mittels des Parent Prozesses zu entscheiden. Wenn in der Aufrufskette cmd oder powershell auftaucht die Konsolenversion nutzen, und sonst auf Forms zurückweichen

05.05.2014 - 01:15 Uhr

@Abt Sollte nicht ein


@foreach(...)
{
    <option value="@(item.Value)" selected="@(item.Selected)">@(item.Text)</option>
}

ausreichend sein? Oder gibt es da dann auch Probleme?

LG

15.04.2014 - 20:06 Uhr

Du könntest das vielleicht etwas netter mit dem neuen Roslyn Compiler machen und damit Code generieren

15.04.2014 - 10:52 Uhr

Wenn das irgendwo steht ist das eindeutig falsch.
LINQ returnt bei anonymen Rückgaben (wie zb Select(x=> new { .. } ) ) nämlich dynamic.

Das stimmt nicht. Der Typ ist ja auch nicht dynamisch, sondern trotzdem statisch. Im Intellisense wird er mit a' Bezeichnet und zugreifen kann man mit var und bekommt funktionierendes IntelliSense.

            var temp = new
            {
                Name = "Mustermann",
                Vorname = "Max"
            };

            var result = from x in Enumerable.Range(1, 100)
                         select new
                         {
                             Temp = 1
                         };
            var n = result.First();
05.04.2014 - 19:05 Uhr

Listen können nun mit dem Listensyntax erstellt werden, wenn die Add Methode eine Erweiterungsmethode ist
Die Möglichkeit, Listen mit der Listensyntax zu initialisieren, ist m.E. nicht neu. Ich denke, das geht schon jetzt. Und ich denke, dass es reicht, wenn eine passende Add-Methode vorhanden ist, egal ob direkt in der Klasse oder als Erweiterungsmethode.

Habe es gerade ausprobiert. Folgendes kompiliert nur mit dem neuen Roslyn Kompiler und gibt einen Compilerfehler mit dem alten:

    public class MyClass : IEnumerable<string>
    {
        static void Main(string[] args)
        {
            var temp = new MyClass { "a", "b" };
        }
        public IEnumerator<string> GetEnumerator()
        {
            throw new NotImplementedException();
        }

        IEnumerator IEnumerable.GetEnumerator()
        {
            throw new NotImplementedException();
        }
    }

    public static class Extension
    {
        public static void Add(this MyClass cls, string test) { }
    }

Fehlermeldung:
Program.cs(14,37): error CS0117: 'MyClass' enthält keine Definition für
'Add'.
Program.cs(14,41): error CS0117: 'MyClass' enthält keine Definition für
'Add'.

05.04.2014 - 13:54 Uhr

Automatische initialisierung von Eigenschaften finde ich generell ziemlich gut, allerdings sieht die Syntax "falsch" aus. Ich finde ein = nach einer schließenden Klammer ziemlich seltsam.

An die Syntax für Primärkonstruktoren kann man sich gewöhnen, auch wenn man da ganz grausige Dinge tun kann:


public class Foo(public string bar){ }

ist äquivalent zu:


public clas Foo
{
    public string bar;

    public Foo(string bar)
    {
        this.bar = bar;
    }
}

Usings für Statische Member find ich auch ziemlich grausig. Werde ich auf jedenfall nicht benutzen.

Und das out Feature ist eigentlich nur ein Spezialfall vom Eigentlichen Feature.

Zuweisungen können nun aus Ausdrücke verwendet werden.

Folgendes geht jetzt:


int i = int j = 5;
Foo(int x = 6);
//usw

try catch mit Conditions ist auf den ersten blick überflüssig, aber gar nicht so verkehrt. Denn die Conditions verfälschen nicht den Call Stack.

Binärschreibweise ist praktisch. Es wird auch noch über etwas anderes debatiert. Und zwar über das Gruppieren in diesen literalen:

0x0101_1010
So kann man Zusammengehörige Flags gruppieren. Man kann beliebig viele unterstriche benutzen.

Weitere Features:

Listen können nun mit dem Listensyntax erstellt werden, wenn die Add Methode eine Erweiterungsmethode ist:


MyClass x = new MyClass(){"a", "b", "c"}; // wenn es eine Erweitungsmethode für Add gibt

Dictionaries können übersichtlicher angelegt werden


var dic = new Dictionary<string, string>
{
    ["x1"] = "y",
    ["x2"] = "y",
    ["x3"] = "y"
};

Und das schrecklichste:


var dic = new Dictionary<string, string>
{
    $x1 = "y",
    $x2 = "y",
    $x3 = "y"
};

Das ist auch völlig äquivalent zum verherigen.
Ganz schlimm:


var dic = new Dictionary<string,string>{...};
string result = dic.$x1; 
//Ist äquivalent zu
string result = dic["x1"];

04.04.2014 - 12:59 Uhr

Weiss ich nicht. Habe mich noch nicht damit beschäftigt, aber ich fand dass es zum Thema passt und zumindest einen Blick wert ist.

LG

04.04.2014 - 12:53 Uhr

Interessanterweise gab es auf der Build eine Demo dazu. Man hat eine sehr alte VB6 Anwendung weitesgehend Automatisch nach winforms C# und von dort in eine Store App und in eine Webanwendung umwandeln können. Ich glaube das war in der Keynote gestern, bin mir aber nicht ganz sicher. Scheint mit einem Drittanbietertool gemacht worden sein was wohl bald? rauskommt.

Ist vielleicht einen Blick wert.

LG pdelvo

04.04.2014 - 10:00 Uhr

Auch sehr interessant finde ich den vorgestellten neuen JIT Compiler, welcher ja nicht nur schneller ist als der alte, sondern auch die Türe zur utilisierung aufwendiger CPU Befehle öffnet, z.B. zu SIMD. Die gezeigten Beispiele (die man sich im übrigen auch selbst runterladen und testen kann) sind wirklich beeindruckend.

LG pdelvo

27.03.2014 - 15:14 Uhr

Außerdem würde ich solche Dinge immer Einstellbar machen, so dass Nutzer den Port dann auch ändern können wenn es Konflikte gibt.

LG

10.03.2014 - 16:31 Uhr

Zusätzlich zu dem was MrSparkle gepostet hat:

Mach die Money Klasse immutable, d.h. sie kann nur beim erstellen gesetzt werden, danach aber nie wieder geändert werden.


public sealed class Money
 {
     public Money(decimal value)
     {
           _value = value;
     }

     public decimal _value {get; private set;}
 }

06.03.2014 - 14:58 Uhr

Das sieht so aus als würde die Methode sehr oft aufgerufen werden für viele Elemente. Du kannst das parallelisieren und die Elemente parallel abarbeiten, wenn du performance Probleme hast. Trotzdem hab ich noch 2 Anmerkungen zu deinem Beispiel Code.

Diese ganzen If Abfragen lassen sich sehr schön kurz als ein boolscher Ausdruck schreiben. Etwa so:


        private bool Filtered(string s)
        {
            return s.StartsWith("Closed session for ")
            || s.StartsWith("Opened session for ")
            || s.StartsWith("Starting replication with server ")
            || s.StartsWith("Finished replication with server ")
            || (s.StartsWith("Router: Transferred ") && s.Contains(" messages to "));
        }

Das machts etwas lesbarer. Dann noch eine Sache. Ich würde mir überlegen die Methode umzubennenen. Mir z.B. ist nicht klar was sie tut. Ist sie true, wenn ein Element in der Auflistung sein soll, oder ist sie true wenn nicht, also filtert sie raus?

11.02.2014 - 11:49 Uhr

Guck dir mal IObserver und IObservable an.

LG pdelvo

12.01.2014 - 21:56 Uhr

So werden interfaces Explizit implementiert. Die Properties tauchen dann nur auf wenn auch das interface gecastet wird. Das ist z.B. auch wichtig bei IEnumerable. Es gibt die interfaces IEnumerator und IEnumerator<T>. Beide fordern ein Property Current. Bei dem generischen Typ ist es vom Typ T. Bei IEnumerable vom Typ object. Das beißt sich also. Also musst du eine Implementierung explizit angeben. Sieht dann also so aus:


public T Current {get{...}}
public object IEnumerator.Current {get{...}}

LG pdelvo

07.01.2014 - 18:54 Uhr

Einmal kurz googeln und dann hättest du doch schon rausgefunden woran es liegt, und wie man es löst: Multidimensional Arrays in a struct in C#

06.01.2014 - 19:42 Uhr

Ansonsten sollte auch so etwas in der Art funktionieren wenn ich mich nicht irre:


struct MP5{
    public fixed int iFelder[5, 12];
}

04.01.2014 - 23:59 Uhr

Ich würde bei diesen Anforderungen manuell arbeiten. Mit der MemoryMappedFile-Klasse. Dann kann sich das Betriebssystem darum kümmern was im Ram und was auf der Platte liegt. Zum Anzeigen müsstest du dann eine kleinere Kopie für den Ram erzeugen. Das sollte aber halb so wild sein

19.12.2013 - 19:27 Uhr

Mit NAudio ist das ganz einfach. Habe das erst vor kurzen gebraucht:

 NAudio.CoreAudioApi.MMDeviceEnumerator e = new NAudio.CoreAudioApi.MMDeviceEnumerator();

            var endpoint = e.GetDefaultAudioEndpoint(NAudio.CoreAudioApi.DataFlow.Render, NAudio.CoreAudioApi.Role.Multimedia);

Dann kann mit endpoint.AudioMeterInformation.MasterPeakValue die aktuelle Lautstärke des gerade ausgegebenen Audios abgefragt werden.

Edit: Ansonsten hat der endpoint noch ein Haufen weiterer Properties und Funktionen mit denen man auch an die Rohdaten kommen müsste

LG

24.11.2013 - 20:41 Uhr

Das Problem liegt hier:

var runTask = new Task( async () => { var t = await SomelongRunningMethod();
                                                                     System.Console.WriteLine("Lambda has finished.");
                                                                     });

Du übergibst dem Task Konstruktor eine Action, also gibt der lambda Ausdruck ein void zurück. Also verhällt sich das ganze nach "Fire and Forget" und returned direkt an dem await un der Task ist damit beendet. Der Task weiss nicht das die Methode intern noch weiterläuft

14.11.2013 - 10:11 Uhr

Was willst du denn damit erreichen?

05.11.2013 - 23:15 Uhr

Ja, teilweise laden und damit arbeiten