Laden...

Forenbeiträge von cdr Ingesamt 980 Beiträge

22.02.2005 - 10:05 Uhr

Imo hat die letzte Implementation noch Verbesserungspotential, wenn man all die hässlichen statischen Verknüpfungen quer durch die Klassen betrachtet ...

21.02.2005 - 20:37 Uhr

Nochmals in anderen Worten das gleiche:

L1 zwischen 0 und L1Max: Lautstärke des Players 1
L2 zwischen 0 und L2Max: Lautstärke des Players 2

L1Max, L2Max jeweils die Lautstärke des Players ohne Fading.

k zwischen 0 und 1: Wert des Reglers: 0 -> L1=0,L2=L2Max, 1 -> L1=L1Max,L2=0

L1 = k*L1Max
L2 = (1-k)*L2Max

16.02.2005 - 13:53 Uhr

Objektorientierung ist ein Paradigma, nicht eine Eigenschaft einer Programmiersprache. Auch 86k Assembler oder C ermöglicht objektorientierte Programmierung (unterstützt* sie aber nicht), C++ unterstützt sie (unterstützt aber auch diverse andere Paradigmen), C# unterstützt sie nahezu exklusiv.

Auch wenn du nicht von Structs erben kannst, kannst du auf sie trotzdem die meisten Elemente des Paradigmas der Objektorientierung anwenden, z.b. das der Kapselung. Deine seltsame Interpretation des Zuweisungsoperators ändert auch nichts daran ... warum sollte ein Zuweisungsoperator etwas kopieren oder klonen? Wo ist das Problem mit Referenzen, ist doch eines der zentralen Elemente des Paradigmas, dass man mehrere Referenzen auf ein einzelnes Objekt halten kann, bei Bedarf sogar veralgemeinert -> Polymorphie

(*der Unterschied zwischen "ermöglichen" und "unterstützen" sollte klar sein..)

13.02.2005 - 14:14 Uhr

Ich kenne keinen Scheduler der "Thread Quotas" oder "Process Quotas" unterstützt. Macht imo auch wenig sinn (auch wenn diverse Round Robin Algorithmen durchaus in diese Richtung gehen) - moderne Scheduler performen in den meisten Fällen wesentlich besser. So ist es auch kaum möglich, dass wegen einem "hungrigen" Prozess (wie deiner Konvertierung) der Rechner "blockiert" wird (mit ausnahme primitiver Scheduler wie z.b. bei den vor-OSX-Macs oder in DOS) (ausser der Scheduler oder der Rest des Betriebssystems murkst was rum, oder der Prozess ist IO lastig), solange der gierige Prozess nicht eine höhere Priorität als den Rest hat (gleiche Priorität müsste auch gehen, kann das System aber leicht verlangsamen) ...

10.02.2005 - 17:14 Uhr

Graust es dir vor dem Timer ansich oder nur vom jeweiligen Rücksetzen des Timers? Falls die Auflösung nicht absolut genau sein muss kannst sonst das Resetten bleiben lassen und stattdessen einfach bei jeden Tick eine integer Variable inkrementieren - dann kannst einfach bei jeder Aktion die Variable auf 0 zurücksetzen. Wenn du diese beiden Operationen gleich atomisch nutzt (bin nicht sicher ob das im Compact Framework auch geht) musst du das ganze nicht mal synchronisieren ...

10.02.2005 - 15:41 Uhr

Ich glaube in Miranda kannst du selber keinen neuen ICQ Account erstellen. Vielleicht hattest damals desshalb den original mirabilis icq client benötigt ... (ginge auch über die mirabilis website, ist aber alles andere als leicht zu finden 😉 )

10.02.2005 - 11:55 Uhr

Ich verwende Miranda, hab aber weder icq noch jabber noch aim installiert, funktioniern aber alle bestens. Die Protokolle sind als Plugins implementiert, die meist aus genau einer DLL bestehend (ICQ.dll, AIM.dll, IRC.dll, Jabber.dll, MSN.dll etc) - ohne irgendwelche andere DLLs oder sogar ganze clients nachzuinstallieren...?

10.02.2005 - 11:44 Uhr

Original von Vellas
Wie ist das eigentlich? Ich könnte doch, da ich ja nie was unterschrieben habe, meinen Quellcode eigentlich ohne Probleme rausgeben oder sehe ich das falsch? Eigentlich würde ich dann doch keine Rechteverletzung begehen.

Die Frage ist hier, was sie verpflichtet, eine Übung überhaupt zu anerkennen. Können sie eine Übung nur dann aberkennen wenn du explizit eine Rechteverletzung begehst?

Auf der anderen Seite haben sie offenbar klar verständlich gemacht dass Übungen aberkannt werden falls der Quellcode veröffentlicht wird. Da du das akzeptiert hast (blieb dir nichts anderes übrig, ausser aus der Schule auszusteigen...) ist das möglicherweise* ein Vertrag. Falls du den Quelltext danach veröffentlichst begehst du also tatsächlich einen Vertragsbruch. Verträge müsse ja nicht unterschrieben werden - auch eine mündliche Übereinkunft gilt als Vertrag (wohl die wenigsten Verträge werden auf Papier gebracht und unterschrieben...).

*Verträge müssen zweiseitig sein, du musst ihm also zustimmen. Bin mir nicht sicher ob das hier wirklich gegeben ist (also ob ein passives nicht-ablehnen als zustimmen gilt), wahrscheinlich aber schon ...

09.02.2005 - 20:15 Uhr

Stimmt, was bringen Urheberrechte, wenn man das produkt nicht selber kommerziell Verwerten darf...

So natürlich ist das aber nicht, in Amerika kann man Urheberrechte verkaufen oder sonst irgendwie vertraglich abgeben. Darum brauchts dort auch die Copyright Notiz...

Um noch auf das Post von NoOneKnows einzugehen: Nein, eine Firma kann in Deutschland nie Urheber sein - Urheber ist und bleibt immer die Person die es verbrochen hat. Siehe auch den Wikipedia Artikel den du verlinkt hast: "Das Urheberrecht wird deshalb für grundsätzlich unübertragbar erklärt." - auch nicht auf deinen Arbeitgeber ...

09.02.2005 - 19:16 Uhr

In Deutschland kann man das Urheberrecht abgeben/verkaufen? Wäre mir neu ...

(bei der Uni geht's wahrscheinlich nicht um das Urheberrecht, sondern um Verwertungsrechte)

08.02.2005 - 16:27 Uhr

Mit Strukturen funktioniert das im unsafe mode, aber nicht im safe mode.

Beim Erstellen einer Win32 Map kriegst einen Pointer, den du imo direkt in einen Pointer auf eine Strktur casten kannst (falls die CLR das nicht irgendwie unterbindet) (StructureLayout Attribut explizit verwenden!). Diesen Pointer kannst dann im unsafe mode beliebig weiterreichen (achtung synchronisation!) und aktiv damit arbeiten. In deinen Klassen könntest dann intern so einen Pointer halten und so den gemeinsamen Bereich "wrappen". Werd ich vielleicht heute abend mal ausprobieren, interesiert mich selber auch ob das geht ...

08.02.2005 - 00:11 Uhr

Müssen denn diese "Objekte" zwingendermassen 1:1 mit .NET Klasseninstanzen verknüpft sein? Der Beschreibung entsprechend tönt es eher nach einer art Business Objekten, die aber durchaus auch 'virtuell' durch .NET Instanzen repräsentiert werden könnten. Wahrscheinlich geht aber nichts ohne jeweils prozesslokale Controler Agents zu betreiben (einen in jedem Prozess), die sich jeweils einerseits mit dem Objekt-Server (inter-process) und andrerseits mit all den im Prozess referenzierten Instanzen (inter-thread) abgleichen/vermitteln. All die Instanzen müssten dann jede Änderung dem Controler Agent mitteilen (z.b. per Events), und in umgekehrter Richtung muss der Controler entsprechende Änderungen an die Instanzen weiterreichen können (Synchronisation? Konkurrenz? Transaktionen?) ... gut möglich, dass es für sowas ein schönes Design Pattern als Vorlage gibt, oder sogar fertige Building Blocks ...

Ansonsten könnte dir aber der ganze .NET Remoting Bereich weiterhelfen, oder besser gleich Indigo (habe zugegebenermassen bisher nie mit Remoting gearbeitet), ist sicher vielversprechender als der alte harzige und händische Weg über die WinAPI zu den altbackenen Memory Mapped Files, und du ersparst dir wohl die ganze Arbeit im Abschnitt oben mit dem manuellen Abgleich ... (siehe auch die diversen Remoting Threads in diesem Forum..)

07.02.2005 - 16:55 Uhr

Das geht imo so nicht. Du kannst zwar Strukturen in die MMF Map kopieren, oder Klasseninstanzen dort hin serialisieren, aber nicht Objekte direkt dort ablegen und dann aktiv damit arbeiten (Technisch ist eine MMF Map eine (virtuelle) Datei). Allerdings könntest du das ganze simulieren*, mit einer normalen Klasse im Heap, die aber z.b. Eigenschaften auf eine MMF Map 'mappt'. Vergiss aber dabei nicht zu synchronisieren - wenn du gleichzeitig von der MMF liest während ein anderer Prozess schreibt hast du ein Problem ...

(falls beide Anwendungen .NET Anwendungen sind, oder du mit der .NET 2.0 Beta arbeitest, gibt es wesentlich flexiblere, effizientere und v.a. schönere Wege als MMF - geht aber wohl nicht da die andere Delphi-Anwendung offenbar fix ist..)

*im erwähnten Artikel im anderen Thread hab ich so z.b. eine ArrayList und darauf aufbauend eine Queue im shared memory simuliert

07.02.2005 - 09:36 Uhr

(Zum Vorschlagen am besten dieses Formular verwenden ...)

06.02.2005 - 22:38 Uhr

Afaik arbeitet Delphi "Shared Memory" mit Memory Mapped Files. Wie das in C# geht hab ich vor einiger Zeit mal in einem CodeProject Artikel erklärt, siehe Absatz "3. Inter-Process Shared Memory: Memory Mapped Files". In deinem Fall kannst das ganze noch etwas vereinfachen, wenn du eine C# Struktur entsprechend der Definition die du gepostet hast erstellst - dann kannst statt ReadByte etc. direkt die ganze Struktur auf einmal einlesen, siehe Marshal.PtrToStructure

05.02.2005 - 21:38 Uhr

Original von Noodles
Hmm, die Compilerimplementierungen kennst dann woher?

Den generierten IL Code kann man ja ansehen 😉

(habs mit dem Beispiel oben nicht versucht)

Allerdings ist der C# compiler meines Wissens gar nicht mal so schlecht (könnte das ohne Recherche aber höchstens mit irgendwelchen 2 Jahre alte MSDN .NET Shows mit Details belegen 😉 )

Beim Beispiel oben muss man auch aufpassen. Wenn die ArrayList nicht Block-lokal ist sind die beiden Versionen nicht gleichwertig - z.b. können theoretisch auch andere Threads interferieren. So einfach ist das ganze also nicht ... (aber klar, genau da ist im x86 C++ Compiler natürlich jede Menge Strategie drin)

05.02.2005 - 17:23 Uhr

Da wird in der URL ein "8 o" (ohne Leerzeichen = 8o) in ein Smilie umgewandelt, sehe ich das richtig? Tönt nach nettem Parser Fehler 😉

03.02.2005 - 22:27 Uhr

Hast du zufälligerweise auch gleich ein fertiges Pflichtenheft LaTeX-Package? 😉

(Das PDF sieht zwar zweifelsfrei nach Word aus (abgesehen von der Tabelle und dem Titelblatt))

03.02.2005 - 17:40 Uhr

(ein Pflichtenheft für was?)

29.01.2005 - 14:39 Uhr

Gute Idee mit dem Plural, werd ich mir merken (hatte das Problem auch schon mehrmals..)

29.01.2005 - 14:26 Uhr

Ok, hat was. Die Object.MemberwiseClone Methode erspart den mühsamen Umweg über den Copy Constructor ...

29.01.2005 - 13:51 Uhr

Das geht auch nicht?

namespace Ein.Namespace.Client {
    public class Client {}
}

namespace Ein.Namespace {
    using MyClient = Ein.Namespace.Client.Client;
    public class Anwendung {
        private MyClient client;
    }
}

29.01.2005 - 13:45 Uhr

Stichwort: Alias

namespace Ein.Namespace.Client {
    public class Client {}
}

namespace Ein.Namespace {
    using Client = Ein.Namespace.Client.Client;
    public class Anwendung {
        private Client client;
    }
}

29.01.2005 - 11:31 Uhr

Original von NoOneKnows
Man soll überhauptkeine Art von Copy-Constructor mehr verwenden, sondern nur noch ICloneable. Mit dem Copy-Constructor umgehst du nämlich diesen Mechanismus, der der an anderer Stelle sehr nützlich sein kann.

Dumm nur, dass durch einige mühsame Einschränkungen in C# auch IClonable nicht wirklich sinnvoll ohne (immerhin protected) Copy Constructor einsetzbar sind, siehe dazu z.b. http://dev.cdrnet.net/blog/posts/260.aspx (ohne dem untersten C## abschnitt) ...

25.01.2005 - 21:37 Uhr

Um JavaScript kommst du wohl nicht herum, ja (ausser du nimmst einfach SSL...)

(MD5 ist ein Hash Code. Damit kann man nichts verschlüsseln 😉 )

18.01.2005 - 22:27 Uhr

Die Syntax wirst du nicht mit einer Regex alleine überprüfen können. Mit Spart geht das, weil Spart mit allen kontextfreien Sprachen umgehen kann (jede mir bekannte Programmiersprache ist kontextfrei) ... jede reguläre Sprache ist kontextfrei (darum kannst du mit Spart reguläre Ausdrücke parsen), aber nicht umgekehrt. Jede Sprache die irgendwelche Rekursionen zulässt ist nicht regulär. Deine Operatorendefinitionen sind aber rekursiv definiert sobald sowas wie Klammern zulässt. Nur schon das Überprüfen ob gleichviele öffnende wie schliessende Klammern vorkommen sind ist nicht regulär (und mit einem regulären Ausdruck nicht möglich), denn dafür würdest du einen Zähler brauchen (in regulären Ausdrücken gibt es keine Zähler) ...

Natürlich kannst du die Regex wie oben erwähnt als Lexer verwenden - hast du diesen Ansatz gemeint? (falls ja vergiss den absatz oben...)

17.01.2005 - 22:31 Uhr

Ich hatte bei einem meiner grösseren Parser auch mal mit regulären Ausdrücken gearbeitet, mit der ich mir einfach den string in einen tokenstream vorbereitet hatte ... die Regex übernahm somit also die Rolle des Lexers - war machbar wegen einfacher Grammatik. Für mehr kannst eine Regex in einem allgemeinen Parser imo nicht brauchen ... btw, den Regex Teil hab ich mittlerweise rausgeschmissen und mit nem eigenen echten (streambaren) Lexer ersetzt ...

Spart hat übrigens wenig mit regulären ausdrücken zu tun (ausser dass man damit natürlich auch reguläre Ausdrücke formulieren kann - aber Spart müsste mit jeder kontextfreien Sprache zurecht kommen ..?)

17.01.2005 - 18:10 Uhr

der herr sollte sich mal ngallery ansehen 😉 ... (ok, das ganze (u.a. templates) müsste natürlich angepasst werden = einiges an arbeit, und gerechnet wird dort natürlich alles serverseitig..)

17.01.2005 - 18:02 Uhr

Ja, das geht in W2k/XP, afaik sogar über mehrere wege. Was sicher geht, ist auf jeder Platte eine Partition anzulegen und dann die zweite einfach in einen Ordner der anderen Partition zu mounten (NTFS only) ... vielleicht kannst es auch mit einem software RAID0 machen, hast dann dank striping gleich nocht etwas performancevorteile (wobei, da das ganze in NT simuliert wird ist der vorteil mit CPU auslastung erkauft), NT unterstützt ja software RAIDs von sich aus ...

btw: all dass kannst in XP/W2k im Diskmanager einrichten ...

17.01.2005 - 17:47 Uhr

Obwohl man mit regulären Ausdrücken viel parsen kann sind sie natürlich auf reguläre Grammatiken beschränkt. Bei irregulären Sprachen wie "zuerst einige 'x' danach einige 'y' aber gleichviele 'x' wie 'y'" kann man mit regulären Ausdrücke entsprechend nichts anfangen (wie der Name schon sagt) ... auch Programmcode kann man damit nicht parsen oder verifizieren (!)

15.01.2005 - 20:28 Uhr

Ich weis ja nicht, aber ich finde

int temp = a;
a = b;
b = temp;

wesentlich übersichtlicher (und ist ausserdem imo vom compiler einfacher effizient assemblierbar) 😉

15.01.2005 - 16:14 Uhr

Ja, die SortedList Variante wäre imo asymptotisch weniger performant -> T(n*log(n)) vs T(n) wenn ich das richtig sehe/rate 😉

15.01.2005 - 12:04 Uhr

Hat den VS.NET diese Kommentare korrekt ins XML file übernommen? NDoc liest sie IMO nur aus diesem XML doc file aus ...

15.01.2005 - 11:55 Uhr

Ich nehme an mit 'Port freigeben' hast du den Port auch auf deine LAN IP weitergeleitet (-> Port Forwarding ... wenn du von WAN IPs sprichst nutzt dein Router wohl IP Masquerading)?

15.01.2005 - 11:44 Uhr

wie ichs schon erwähnt habeG

Oh, dann habe ich wohl deine Beschreibung oben falsch verstanden, sry 😉

Siehe auch http://www.boyet.com/Articles/SimpleShuffling.html und http://www.daimi.au.dk/~ursem/EAdocs/RKUjava/math/RKUPermutation.html

14.01.2005 - 19:52 Uhr

Noch einfacher: packe das Array in eine Sorted List mit Zufallszahlen als schlüssel. Dann gehst du die (zufällig sortierte) Liste der Reihe nach durch ...

14.01.2005 - 14:29 Uhr

Nimm halt einen MemoryStream, ist auch nicht soo viel aufwändiger ...

13.01.2005 - 20:14 Uhr

sry, war oben etwas 'speziell' aufgelegt 😉

Interessanter Ansatz mit dem Instanciator. Liesse sich imo höchstens noch durch das Aufgeben der neutralen Zwischenchicht (IControl) und somit dem Verschmelzen der beiden Wrappers in einen Einzigen vereinfachen, was aber in deinem Fall offenbar nicht gewünscht ist und wohl auch zu redundantem code führen würde ...

13.01.2005 - 19:01 Uhr

so what, ersetze halt auch bei mir die namen, ist ja belanglos ob das jetzt UserControl oder XYZ heist, dein Widerspruch bleibt bestehen 😉

13.01.2005 - 17:47 Uhr

Was meinst du mit "polymorph konvertieren"? Was Polymorphie ist ist mir klar, aber der Begriff des polymorphen Konvertierens oder Übergebens ist mir neu 😉 ... (mal spitzfindigerweise davon abgesehen dass du wahrscheinlich nicht konvertieren (= ändern des Instanztyps) sondern casten (= ändern des Referenztyps) meinst?)

ich sehe die Basis der Klasse als ne Art Implementierungsdetail, da ich die ja
wechseln können will und würde sowas also gerne vor der Außenwelt verbergen ..

Damit verstösst du gegen die ist-ein Beziehung einer Vererbung. Du willst offenbar nicht dass eine SpecialTextBox auch eine TextBox ist (sondern willst es davon lösen und evtl. die TextBox mal durch irgendwas anderes ersetzen). In diesem Fall solltest du imo gar nicht erst von TextBox erben, sondern von Control, was schliesslich auf normale UserControls hinausläuft. In diesem Fall kannst du aber sicher nicht (implizit oder explizit) nach TextBox casten.

10.01.2005 - 18:38 Uhr

Original von Fabse... wobei ja [ code ] kaum einer hier benutzt ...

Ich benutze ausschliesslich [ code ] 😉

06.01.2005 - 23:58 Uhr

(Was ist DKK? Meinst du DDK?)

04.01.2005 - 20:55 Uhr

ich meinte den Thread im Codeproject Artikel (ganz unten) 😉

04.01.2005 - 20:00 Uhr

Vielleicht hilft dieser Artikel weiter (siehe Diskussion unten, der Thread "Device enable/disable")

http://www.codeproject.com/csharp/DivingSysProg3.asp

04.01.2005 - 18:09 Uhr

Ja, genau ... (btw, obj_sync müsste nicht unbedingt statisch sein, ist aber imo am einfachsten so in diesem fall)

03.01.2005 - 21:26 Uhr

Definiere ein statisches Objekt (z.b. object sync = new object()) und synchronisiere beide Methoden auf dieses Objekt (geht so nur weil alle Threads im gleichen Prozess laufen):


void MeineMethode()
{
... unkritischer bereich ...
lock(sync) {
  ... kritischer bereich ...
}
... unkritischer bereich ...
}

Achte darauf dass es jeweils nur einen kritischen Bereich pro Methodenablauf und keine andere gegenseitige Abhängigkeiten gibt um Deadlocks zu vermeiden ...

29.12.2004 - 17:18 Uhr

Raw Sockets gehen bei XP (wars bei W2k auch schon so?) mit gutem Grund nur mit Administratorrechten. Ich kann mir aber vorstellen, dass man saubere ICMP Packete (z.b. Ping) auch ohne Raw Sockets senden kann, indirekt durch eine spezielle API (ping.exe kann das ja auch)

28.12.2004 - 12:59 Uhr

Man nehme einen CVS Server, dann erübrigt sich der 3. Punkt mit dem Leader, da unnötig ... funktioniert erfahrungsgemäss wesentlich besser so 😉

Vorschlag für den Header (Mit LGPL (nicht GPL!), imo meist bester Kompromiss für Bibliotheken):


#region myCSHARP Library, Copyright (c) 2005 [Entwickler, die im grossen Stil and dieser Datei arbeiten hier auflisten - meist wohl nur einer]

// myCSHARP Library
// Copyright © 2005, myCSHARP Team
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as published 
// by the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public 
// License along with this program; if not, write to the Free Software
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.

#endregion

(ok, nehm mir vor mich nicht mehr einzumischen...)