Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Portal
  • |
  • Mitglieder
Beiträge von maxE
Thema: Windows Security - Chaosradio Express
Am im Forum: Smalltalk

Einige kennen diesen Stream vielleicht schon (Achtung, läuft fast eine Stunde):

http://chaosradio.ccc.de/cre022.html

Ungewöhnlich ist, dass MS, Windows und .NET bei dieser Folge ungewöhlich gut wegkommen (Wenn man bedenkt, welche Kommentare beim CCC sonst über Microsoft zu hören sind). Dort wird MS sogar mal ausdrücklich gelobt für die Fortschritte, die sie im Bereich Sicherheit, Compilertechnologien, .NET usw. machen.
Gerade viele Linux-Fans dürften die Folge mit viel Unzufriedenheit aufgenommen haben, da diesmal nicht das übliche Feindbild beschworen wurde. Auch die Entwicklung des Linux-Kernels hat FX kritisiert.

Ob die Bemühungen von MS wirklich etwas bringen werden, wird man natürlich erst mit dem Release von Vista erfahren.

Was meint ihr?

Thema: [gelöst] OpenGL CSGL - Transparenz/Alpha/durchsichtig
Am im Forum: Grafik und Sound

@nop
Hallo!? Bist du mit dem falschen Bein aufgestanden?
Habe Tao selbst in der Benutzung und kann mich nicht beschweren. Alle Assemblies sind vorkompiliert und problemlos nutzbar. Auch für Anfänger interessant, da die auf C# portierten Redbook Beispiele mit drinn sind und einen guten Startpunkt für eigene Erweiterungen/Experimente bieten. Also irgendwie versteh ich dich nicht ganz, denn meist bin ich mit diesem ganzen "Linux-Inzest-l33t-Hacker-Frickelscheiß" ganz gut gefahren

Thema: [gelöst] OpenGL CSGL - Transparenz/Alpha/durchsichtig
Am im Forum: Grafik und Sound

Eventuell glBlendFunc nicht gesetzt?

http://wiki.delphigl.com/index.php/GlBlendFunc

PS: Ich hab's glaube ich schon mal in nem anderem Thread geschrieben: Die Tao-Lib ist zur Zeit ein viel aktueller als CSGL. Und überdies sind sehr viele Beispiele und Tutorials mit enthalten.

Thema: CSGL - OpenGL - Text ausgeben, aber wie?
Am im Forum: Grafik und Sound

CSGL wird doch schon lange nicht mehr weiterentwickelt. Die Wrapper von Tao sind doch viel aktueller und noch dazu 100% CLS kompatibel.

Thema: Welche Computerfilme mögt ihr am meisten?
Am im Forum: Smalltalk

Mit Hackers konnte ich nie viel anfangen. Zu überspitzt und überdreht. 23 hat mir mehr gefallen, da der Film einen realen Bezug hatte. Ein absoluter Kultfilm im Sci-Fi Genre -obwohl eigentlich kein richtiger "Computerfilm"- ist natürlich 2001. Die Szene mit den Affen und der Musik "Also sprach Zarathustra" haben Kinogeschichte geschrieben.
Ein weiterer Film den ich gut finde ist Existenz. Hier wurde die Grundidee von Matrix in eine ziemlich surrealistische Mischung aus Fiktion und Realität gebracht. Auch Dark Star ist genial. Am Ende des Films haben die Astronauten ein philosophisches Gespräch mit einer "intelligenten" Bombe. Kennt den Jemand?

Thema: Anonyme Property setzen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Zitat
Original von herbivore
Hallo maxE,

so hat halt jeder seinen Background und seine Erfahrungen. Ich hoffe du bist mir nicht böse, wenn ich sage, dass sich in dieser Beziehung meine Erfahrungen vermutlich eher verallgemeinern lassen als deine.

herbivore
Wie schon gesagt: Jeder hat seinen Background und außerdem kommt es auf den Anwendungsfall an. Für viele Anwendungen sind solche Überlegungen ausreichen, da die Performance meist nicht so eine große Rolle spielt. Ich hätte es wahrscheinlich oft auch so gemacht wie du, aber ich kenne Situationen bei denen es manchmal sehr sinnvoll ist über Reflection zu gehen und den Overhead einer Hashtabelle zu meiden ...
Na ja, lassen wir's gut sein

Thema: C# + OpenGl
Am im Forum: Grafik und Sound

Kleiner Nachtrag:
Auf http://www.mono-project.com/Tao findest du Bindings für OpenGL. Im Paket sind auch viele C#-Beispiele und Tutorials als Quellcode (Verzeichnis NeHe).

Thema: Anonyme Property setzen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Zitat
Original von herbivore
Ein Hash-Zugriff ist heutzutage in der Regel schnell genug. Ich habe eine komplette Lastschrift-Anwendung geschrieben, bei der für *jeden* Property-Zugriff nicht nur auf *mehrere* Hashtables zugegriffen wurde, sondern noch diverse Prüfungen durchgeführt wurden, teilweise inkl. Substring-Operationen auf den Attributnamen. Keinerlei Performace-Probleme.
Sicher, für die Lastschriftanwendung ist das OK. Für die Anwendungen an den ich mitgearbeitet habe ist das aber nicht sehr praktikabel. Auf Variablen/Properties - anfänglich einmal über Refl. initialisiert - muss hier mehrere tausend mal pro Sekunde zugegriffen werden. Da sind mir "normale" Variablen/Properties, lieber als Hashtabellen, die als Variablencontainer fungieren

Thema: Anonyme Property setzen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

@herbivore:
Es gibt schon Situationen, wo sowas sinnvoll ist. Bei Plug-ins z.B. gibt es meist immer nur eine feste Schnittstelle mit genau definierten Funktionen. Soll das Plug-in noch über weitere Eigenschaften verfügen, die in der Schnittstelle nicht definiert sind, dann kommt man um Reflection kaum rum.
Du wolltest hier ein Dictionary/Hash vorschlagen aber das ist manchmal aus Performance-Gründen nicht sinnvoll, weil direkter Variablenzugriff im Code schneller ist:

int i = (int)hash["myVar"];
 vs.
int i = myVar; 
Voraussetzung ist natürlich, dass das Property sehr selten aufgerufen wird, dafür aber die interne Variable, die dem Property zugeordnet ist, sehr intensiv.

Thema: C# + OpenGl
Am im Forum: Grafik und Sound

Auf nehe.gamedev.net im Lessonsbereich gibt es schon viele C#-Portierungen. Aber ob du nun mit C++ oder C# programmierst ist doch bei OpenGL egal, da die Funktionen überall gleich sind.

Thema: Richtig Große Welten und Landschaften
Am im Forum: Grafik und Sound

Also für große Welten, wird Occlusion Culling auf der Grafikhardware immer populärer. Heutige Grafikkarten unterstützen Occulusion Queries nativ. Damit kann man recht einfach und hardwarebeschleunigt testen, welche Geometrie man sehen kann und welche nicht. Das ganze funktioniert grob so:
Du erzeugst zuerst eine sehr einfache geometrische Repräsentation deiner Welt (Bäume, Häuser, Felsen, usw. ... werden als Bounding Boxes angenähert).
Jetzt aktivierst die Occulusion Queries und renderst diese Bounding Boxes in eine nicht sichtbare Surface. Natürlich stark verkleinert (320*200) und mit deaktiviertem Shading, also keine Lichter, Texturen, Blending oder sonst was.
Dann zeichnest du alle "richtigen" Objekte, die in deinem Occulusion Querie stehen in das VRAM, fertig. Natürlich lässt sich die Sache noch stark erweitern: LOD Meshes usw...

Thema: Partikeleffekte
Am im Forum: Grafik und Sound

Königsklasse? Na ja.
Im DirectX SDK ist ein Beispiel für ein einfaches Partikelsystem. Direct3D unterstützt hierfür auch Point Sprites (siehe http://www.riaz.de/tutorials/d3d17/d3d17.html). Ansonsten ist die Programmierung solcher Systeme eigentlich recht einfach. Du nimmst einfach ein Array von Partikelstrukturen, die beispielsweise folgende Felder enthalten:

  • Lebenszeit (wird bei jedem Frame dekrementiert, bei 0 hört das Partikel auf zu existieren)
  • Start- und Endfarbe mit Alphakanal (Interpoliert über die Zeit)
  • Geschwindigkeit (wird bei jedem Frame - mit der Zeitdifferenz pro Bildaufbau skaliert - auf die Position addiert)
  • Position
  • usw ...

Um das Ganze etwas zu abstrahieren, könntest du noch Klassen für verschiedene Emitter (Regen, Feuer, Rauch, ...) und Manipulatoren schreiben (Wind, Attraktion, Gravitation, Wirbelsturm, ...).
Eigentlich sooo nicht schwer ;-)

Thema: Vista und Coding-API?
Am im Forum: Rund um die Programmierung

Die meisten neuen APIs sind .NET basierend. Siehe WPF, WCF usw ...

Thema: Schwächen der C#-Sprache
Am im Forum: Smalltalk

@herbivore

Ja, du hast recht. Ein String kann man nicht direkt verändern, sondern sich nur eine modifizierte Kopie zurückgeben lassen. Mit verändern hab ich eigentlich auch mehr das Neuzuweisen von Strings gemeint (Im Sinne von: s = s + "xyz").
Hier was zum String-Pool den .NET verwaltet: http://www.yoda.arachsys.com/csharp/strings.html (Abschnitt Interning)
Mehrere Strings mit gleichem Inhalt werden zur Compilezeit nur einmal gespeichert und als "intern" markiert. Mit String.Intern()/IsInterned() kann man überprüfen ob ein zur Laufzeit erzeugtes String schon in diesem String-Pool vermerkt ist.

Thema: Schwächen der C#-Sprache
Am im Forum: Smalltalk

Strings werden in C#/.NET auch besonders behandelt (mal unabhängig davon ob Wert- oder Referenztyp).
.NET führt intern eine Art globalen Pool für Strings. Hast du mehrere Strings mit dem gleichen Inhalt, dann werden sie nicht mehrfach gespeichert, sondern es zeigt ein interner Verweis auf die gemeinsame Zeichenkette. Veränderst du dein String, dann wird geprüft ob sich dieses ebenfalls noch im Pool befindet. Wenn nicht, wird erst eine echte Kopie mit neuem Verweis im Pool erzeugt.

Thema: Multimethoden
Am im Forum: Smalltalk

Hier ist foo statisch. Man könnte natürlich foo zu einer Instanzmethode machen und dann die abstrakten Methoden aus der Basisklasse implementieren. Allerdings wird so etwas in bestimmten Softwarearchitekturen nicht unbedingt gern gesehen. Siehe Vistitor-Pattern. Die Idee ist hier, dass du Daten auf der einen Seite und Operationen auf der anderen Seite hast. Möchtest du eine neue Operation auf diese Daten definieren, dann schreibst du dir einfach einen neuen Visitor (Die Klassen, die deine Daten repräsentieren müssen nicht verändert werden). Eigentlich genau so, wie man es von einem gutem Softwareentwurf erwarten. Wenn du jetzt aber die foo-Methoden als Instanzmethoden definierst, dann hast du diese Trennung nicht mehr.
Schönes Beispiel zu diesem Thema und warum Multimethoden dieses Pattern so vereinfachen: http://nice.sourceforge.net/visitor.html

Thema: Multimethoden
Am im Forum: Smalltalk

Funktionsüberladung geht heute schon, hat aber erst mal nichts mit Multimethoden zu tun. Das besondere ist hier, dass d0, d1, d2 auf ihre Basisklasse geboxt wurden. Rufst du foo() auf, dann wird natürlich nur foo(Base c) aufgerufen. Bei Multimethoden wird aber zusätzlich der eigentliche Typ erkannt. D1 und d2 sind nämlich vom Typ Derived1 und Derived2 und werden bei Multimethoden automatisch (zur Laufzeit) an die richtige Methode delegiert.

Thema: Multimethoden
Am im Forum: Smalltalk

Multimethoden sind Methoden die den gleichen Namen aber unterschiedliche Parameter haben, welche von einem gemeinsamen Basistyp abgeleitet wurden.


class Base
{...}

class Derived1 : Base
{...}

class Derived2 : Base
{...}

...
// Multimethoden

foo(Base c)
{...}

foo(Derived1 c)
{...}

foo(Derived2 c)
{...}

// Instanzierung
Base d0 = new Base();
Base d1 = new Derived1();
Base d2 = new Derived2();

// Aufruf ohne Multimethoden
foo(d0); // ruft foo(Base c) auf
foo(d1); // ruft foo(Base c) auf
foo(d2); // ruft foo(Base c) auf

// Aufruf mit Multimethoden
foo(d0); // ruft foo(Base c) auf
foo(d1); // ruft foo(Derived1 c) auf
foo(d2); // ruft foo(Derived2 c) auf

Multimethoden bestimmen also dynamisch welchen Typ die Methodensignatur hat und ruft dann passen die Methode auf. Damit kann man das Visitor Pattern stark vereinfachen.

Thema: Sprachverwässerung
Am im Forum: Smalltalk

Ich finde die Erweiterungen eigentlich ziemlich gut. Über Unausgereiftheit würde ich mir weniger Sorgen machen, denn ähnliche Sprachfeatures gibt es schon in anderen Programmiersprachen. Die Iteratoren und die Lambda-Methoden sind ja doch sehr an Python angelehnt.

Auch kann ich mich dem Eisbären anschließen, wenn er sagt, dass es bei C# oft noch an ganz anderen Stellen zwickt. Ich würde hier aber andere Beispiele nennen:

Operatorenüberladung mit generischen Datentypen. Bis heute sind solche Konstrukte in C# ungültig, dass wird sich wohl leider auch mit C# 3.0 nicht ändern:


T x, y, z;
...
public static Vector3<T> operator+(Vector3<T> l, Vector3<T> r)
{
    return new Vector3<T>(l.x+r.x,l.y+r.y,l.z+r.z);
}

Außerdem fände ich eine Erweiterung um Multimethoden sinnvoll. Das könnte z.B. das Visitor Pattern überflüssig machen.

Thema: WinForms unter Linux
Am im Forum: GUI: Windows-Forms

Also ich hab vor einiger Zeit mit wx.NET rumgespielt. Das Toolkit gefällt mir sehr gut und ist recht robust. Wenn dir die C# Dokumentation nicht reicht, dann kannst du dir auch die größtenteils äquivalente C++ Doku anschauen.

Gtk# ist eigentlich ganz nett (vorallem wegen Glade) aber ich finde die Mono Dokumentation sehr lückenhaft. Außerdem muss du die Gtk# Runtime (kann bei Novell für Windows runtergeladen werden) auf dem Zielrechner installieren.

Und Winforms ist so ne Sache. Ich habe die Erfahrung gemacht, dass WinForms Anwendung auf Linux oft etwas fehlerhaft angezeigt werden. Da hilft eigentlich nur regelmäßiges Testen auf beiden Plattformen und eventuelle Anpassungen.

Thema: Installer selber bauen?
Am im Forum: Rund um die Programmierung

NSIS ist OpenSource. Quellcode runterladen, anschauen + verstehen

Thema: .Net Framework Redistributable 2.0 - 23 MB; Geht es kleiner?
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Wurde schon 1000 mal diskutiert Siehe Forumssuche ...

Thema: Verständnisfragen eines Umsteigers
Am im Forum: Grafik und Sound

Zitat
1.) Wx.NET, arbeitet mit einer Zwischenbibliothek, die Aufrufe an die Systembibliothek weitergibt (einheitliche API). Aber das hat wohl den Nachteil, dass man auf jedem Betriebssystem was zusätzlich installieren muss oder?
Eigentlich reicht es die Wx.NET Lib im gleichen Verzeichnis zu haben wie deine Executables.
Zitat
Ich habe gelesen, dass Mono Windows.Forms zu 98% unterstützt, aber wie kann ich mir das genau vorstellen? Arbeite ich dann mit der GDI+ aus Windows und Mono sorgt automatisch dafür, dass die Methoden usw. übersetzt werden? Und was macht genau Cairo, dass in dem Zusammenhang erwähnt wird? Ist diese Lösung nicht bei den obigen Ansätzen unter 2 einzuordnen, wobei hier die native GDI+ benutzt wird und Cairo dann die Zwischenbibliothek für Linux ist?
Wie sieht dass mit der Darstellung aus? Sieht das Programm unter XP aus wie ein XP Programm und unter Linux wie ein Linux Programm?
Der managed GDI+ Code ist für Windows und Linux gleich. Beide sprechen eine C-Bibliothek mit dem gleichen Interface an. Unter Win ist es eben die normale GDI+ Dll und unter Linux ist es eine Wrapper-Bibliothek (libgdiplus.so), die die Aufrufe zu Cairo weiterleitet.
Zitat
Die GDI+ ist im Moment nicht Teil der FCL und greift auf Win32 zurück? Wobei das + für managed steht, was immer das heißt genau...
Das "+" steht nicht für managed, sondern ist einfach eine Erweiterung des alten GDI. (Transparenzen, Transformationen, Hardwarebeschleunigung, verbessertes AA, usw, ,,,)
Zitat
Mir ist zu Ohren gekommen dass in Net 3.0 eine Oberfläche mit XML realisiert werden soll, stimmt das oder habe ich das falsch verstanden? Dann wäre ja die GUI Teil von .Net und stände einer Umsetzung in Mono nicht mehr im Wege.
Ja, Oberflächen werden bei WinFX mit Xml beschrieben (so ähnlich wie Glade bei Gtk). Ich behaupte aber, dass das "richtige" .NET 3.0 wohl erst nach WinFX kommen wird. WinFX ist eigentlich mehr ein Interims.
Zitat
Achso nochwas anderes, braucht man wenn man Direct X oder OpenGL nimmt immernoch sowas wie eine GUI?
DirectX braucht ein WinForms Control um initialisiert zu werden. OpenGL natürlich einen gültigen Renderkontext. Da ändert sich bei .NET nicht viel. Die wgl/glx Funktionen brauchst du immernoch. Wenn du es Plattforumunabhängig und unkompliziert magst, dann nimm am besten GLUT (Tao hat Wrapper dafür).
Zitat
DirectX interessiert mich eher nicht wegen der Plattformabhängigkeit, weiss jemand ob OpenGL zukünftig offiziell .Net unterstützen wird? Im moment tut es dass nicht oder? Ich bin nur auf Projekte gestossen, die das Umzusetzen versuchen. Da wurde ein Wrapper genant? Was ist ein Wrapper und welche Nachteile hat sowas, wird dadurch die Ausführungsgeschwindigkeit langsamer? Aber vielleicht haben die OpenGL Entwickler ja garkeine Lust auf .Net da ja Windows Vista kein OpenGL standartmässig installiert hat.
Offiziel wird OpenGL wohl nie von .NET unterstützt werden (Eigentlich schade, da ich z.B GLSL für die eine bessere Shadersprache halte als HLSL).
Der zur Zeit wohl meistgenutzte Wrapper ist Tao (http://www.mono-project.com/Tao). Ein kleiner Nachteil ist natürlich der etwas langsamere Funktionsaufruf, der durch das Marshalling entsteht (Managed DIrectX hat das gleiche Problem). Das sollte aber eigenlich micht dein Problem sein, da die Bottlenecks in deinen OGL-Anwendung garantiert woanders liegen werden.
OpenGL existert nach wie vor in Vista und muss nicht nachinstalliert werden. Der alte Software Rasterizer (Version 1.1) wird durch einen Direct3D Rasterizer ersetzt (Version 1.4). Installierst du dann noch einen OpenGL ICD, kannst du natürlich auch OpenGL 2.0 voll nutzen, nur wird dann deine Aero Oberfläche vorrübergehen auf Classic umgeschaltet.

Thema: Punkte zeichnen
Am im Forum: Grafik und Sound

Wenn du mit SetPixel Bildpunkte zeichnest, ist das natürlich langsam (wegen des Marshalling, Bereichsprüfung und der Formatkonvertierung). Schreibe lieber direkt in das Bitmap (LockBits).

Thema: Blogs gesucht
Am im Forum: Buchempfehlungen

@talla & herbivore
Geht mir genau so. Blogs waren für mich auch noch nie wirklich von Bedeutung (außer vielleicht über einen interessanten Artikel, der auf einen Blog führt).
Aus meiner Sicht ein Hype der völlig überbewertet wird ...

Thema: Künstliche Intelligenz mit C#
Am im Forum: Rund um die Programmierung

In den meisten Spielen sind die Bots State-Machines. Einige Spiele haben das sogar direkt in die Scriptsprache integriert (siehe Unreal Script).
http://en.wikipedia.org/wiki/Finite_state_machine

Thema: Integrierter XML Parser?
Am im Forum: Datentechnologien

Schon mal bei System.Xml reingeschaut?

Thema: Anregungen zur Umsetzung gesucht
Am im Forum: Grafik und Sound

Du könntest dir im Hintergrund ein Bitmap-Object halten, dass für jede Schaltfläche eine individuelle Farbe speichert (vielleicht aus Hashcode generieren?). Dieser Farbcode identifiziert nun jedes Hexagon/Pentagon und bei einem Klick brauchst du nur noch dieses Bitmap auslesen und findest sofort deine Schaltfläche.
Auch könntest du das Bild in einer kleineren Auflösung speichern als das Orginal um Speicherplatz zu sparen.

Thema: Gibt es Rekursionen die sich nicht in eine Iteration umwandeln lassen? [iteratives Türme von Hanoi]
Am im Forum: Rund um die Programmierung

Sicher, kommt wie immer auf den Zusammenhang an. Viele Dinge sind rekursiv einfacher zu lösen und andere Dinge macht man besser iterativ.
z.B. ist das Durchsuchen von Baumen rekursiv meist einfacher zu lösen, als einen iterativen Algorithmus dafür zu nehmen.
Anders herum könnte man eine Zählschleife mit einer einfachen primitiv rekursiven Funktion nachbauen. Hier ist der iterative Ansatz aber meist intuitiver.

Thema: Gibt es Rekursionen die sich nicht in eine Iteration umwandeln lassen? [iteratives Türme von Hanoi]
Am im Forum: Rund um die Programmierung

Zitat von _tb_
@maxE:
da haust du jetzt verschiedene gleich klingende Begriffe durcheinander. Rekursiv im Sinne von Turingberechenbar, heißt einfach nur berechenbar. D.h. eine konstante Funktion ist genauso rekursiv, wie eine Addition usw.
Aber deshalb würde niemand auf die Idee kommen eine solche Funktion rekursiv zu implementieren.
Wieso durcheinander hauen? Nicht primitiv rekursive Funktionen (hier hab ich die partiell rekursiven Funktionen gemeint, wenn das undeutlich war) sind mit jeder Turingmaschine darstellbar, also Turingvollständig. Natürlich kann man die Addition rekursiv darstellen. Die Addition ist eine primitiv rekursive Funktion. Du kannst sie also mit einem While-Programm und sogar einem Loop-Programm darstellen. Allerdings ist nicht jedes While-Programm mit primitiver Rekursion darstellbar.