Laden...
O
onlinegurke myCSharp.de - Member
Student/Hilfswissenschaftler Dresdner in Karlsruhe Dabei seit 15.01.2007 778 Beiträge
Benutzerbeschreibung

Forenbeiträge von onlinegurke Ingesamt 778 Beiträge

19.01.2009 - 23:18 Uhr

Ja, aber es geht ja eher darum die Argumente für das WriteLine zu berechnen, also wirklich das Random.Next, und das wird nicht synchronisiert.

siehe Bildanhang

16.01.2009 - 01:32 Uhr

UML kennt keine Events. Ich hab mir sagen lassen, das wird meistens so gelöst, dass man <<event>> davor schreibt und es in die Methoden parkt. Dazu müsstest du aber auch entsprechend die Forumssuche anstrengen können...

14.01.2009 - 20:48 Uhr

Hm, um dir sagen zu können, ob es richtig ist die TabPage zu beerben, müssen wir erstmal wissen, warum du sie vererben wolltest. Meistens macht es aber wenig Sinn die TabPages zu beerben ohne ein neues TabControl zu erstellen. Und da der TabControlDesigner automatisch zwei TabPages reinhaut muss man den auchnoch ersetzen, allerdings kann man den nicht beerben, weil der nun wieder nicht public ist, was die ganze Sache (eigentlich unnötig) kompliziert macht.

Was hast du denn von der Orginal-TabPage überschrieben? ControlCollection? Designer? OnIrgendwas-Methoden?

12.01.2009 - 23:34 Uhr

Gleiche Methodennamen an sich bringen aber auch nichts, wenn man die Vererbungsstruktur nicht ändern kann 😃

Aber Adapter-Pattern ist ein gutes Stichwort. Aber das eignet sich auch nur, wenn man selbst die Daten hält, bekommt man sie geliefert (in einem Methodenrumpf z.B.), dann vielleicht doch lieber lokale Variable.

12.01.2009 - 23:31 Uhr

Hallo el_patschino,

also wie Tomot schon gesagt hat, am Code liegt's nicht, der Fehler "Fehler beim Erstellen" sagt auch was anderes. Meines Erachtens deutet die Fehlermeldung eher auf sowas hin wie keine Schreibrechte auf dem Ordner, wo die Kompilate gespeichert werden sollen, irgendeine Kompilierungseinstellung fehlerhaft oder was auch immer.

Aber am Code liegt's nich, der ist korrekt so.

Gruß

Georg

12.01.2009 - 22:22 Uhr

Willkommen im Forum, Tio!

Der Grund ist eigentlich einfach: StartNew ist eine statische Methode, die dir ein neu erzeugtes Stopwatch-Objekt liefert, was du allerdings verwirfst (jedenfalls speicherst du es ja nicht). Der C#-oder VB.NET-Compiler/Editor hätte dir an der Stelle schon Bescheid gesagt, dass da wahrscheinlich was nicht stimmt, da wundert's mich eigentlich, dass der C++-Compiler das nicht tut.

Die Lösung ist also entweder, du erzeugst dein Stopwatch-Objekt erst dann, wenn du es brauchst mit eben dieser statischen Methode Stopwatch.StartNew, oder du startest dein erzeugtes Stopwatch-Objekt mit Start().

//edit: Das bei der Stopwatch ein negativer Wert herauskommt liegt imho wahrscheinlich an der internen Arbeitsweise von Stopwatch.

@Smou: In C# arbeitet im Allgemeinen jeder mit Pointern - nennt die aber Referenzen, weil das Wort Pointer u.a. durch C++ negativ belegt ist

12.01.2009 - 22:11 Uhr

Von welcher OS bzw. IE-Version reden wir denn? Bei dem Vista-Explorer hab ich sowieso immernoch den Eindruck, dass der buggy ist, mein eigener kann kein Strg-V und stürzt ab, sobald ich ein Rechtsclick auf eine Verknüpfung mit nichtexistentem Verknüpfungsziel mache (wobei ich da noch kein Mittel dagegen gefunden hab, auch SP1 hat nicht geholfen)... 😦

11.01.2009 - 15:46 Uhr

Naja, ich würde wie schon angemerkt OOA und OOP auch in dieser Darstellung trennen, also

reales Problem  - - - - - - - - - - - - - - - - - - - - - - - - -> reale Lösung
  |                                                                 ^
  |                                                                 |
modellieren                                                   interpretieren
  |                                                                 |
  v                                                                 |
Objektmodell -- weitere Berechnungen --> Programm -- Ausführen ---> Ausgabe

Weil Objekte zu modellieren und mit ihnen irgendwas zu machen ist m.E. ein himmelweiter Unterschied. Mit dem richtigen Objektmodell sind die weiteren Berechnungen imho oft auch trivial.

Aber die meisten Programme lassen sich eben auch mit einem miesen Objektmodell und entsprechend viel Bastelarbeit realisieren. Ich will nicht sagen, dass das gut ist, oder das die Lösungen dann so mächtig sein können, wie die, die auf sauberen Objektmodellen basieren, aber oft genug geht das. An manchen Stellen ist sogar Bastelarbeit notwendig, weil man mit Komponenten arbeiten muss, die an vielen Stellen verbuggt sind (beispielsweise dem VS Designer 😦). Da bleibt noch ausreichend Raum für Leute, die Mathematik nicht mögen. Außerdem gibt es ja immer noch die, die einfach eine Mathephobie haben (von zB irgendwelchen unfähigen Gymnasiallehrern), es aber eigentlich können.

//edit: bisschen formatiert...

11.01.2009 - 15:26 Uhr

Ich hab mit der Version 1.2 so meine Probleme, kriege folgenden Screen nachdem ich das VS 2008 SDK frisch installiert hab (muss vllt dazu sagen, ich hab ein englisches VS)

Das heißt, seitdem ich das SDK drauf hab will mein VS auch nicht mehr so ganz wie ich das will, es kann also daher kommen, dass das deutsche SDK prinzipiell mit dem englischen VS nicht ganz klar kommt...

10.01.2009 - 23:07 Uhr

FileSystemWatcher sind teuer. Für einzelne kleine Verzeichnisse mag das gehen, aber ich glaub nicht für die ganze Verzeichnisstruktur.

10.01.2009 - 12:36 Uhr

Hallo byte_schubser,

also zu 1. das geht. Du kannst auch eigenmächtig andere Steuerelemente selektieren oder was auch immer du willst. Die einzige Frage ist meistens wie und die Antwort lautet meist "irgendein Service". Im Falle der Selektierung ist das glaub ich ISelectionService in System.Windows.Forms.Design, wobei es sein kann, dass du die System.Design erst einbinden musst, da sind die meisten Entwurfszeitgeschichten drin. Und dann muss du dir halt über die Factory-Methode GetService ein solches Serviceobjekt geben lassen und kannst dann damit arbeiten.

  1. Da ist schonmal sehr wichtig was sind das für Properties? Haben beide auch einen Set-Acessor? Ansonsten gilt: Standardmäßig aktualisiert das PropertyGrid die einzelnen Zeilen erst dann, wenn man sie anwählt. Auch dafür gibt es einen Trick das zu ändern (es sollte sogar mehrere geben). Versuch mal ein Ereignis, was auf Changed endet (Propertyname+Changed) als EventHandler oder ansonsten auch die Schnittstelle INotifyChanges zu implementieren. Wenn du das nicht willst, dann gibt es da auch einen Service für, aber ich weiß nicht mehr wie der heißt.

Gruß Georg

06.01.2009 - 16:34 Uhr

Also mir fehlen noch zu viele Informationen: Typ A und Typ B, sind die durch Klassen repräsentiert? Gibt es eine gemeinsame Basisklasse (z.B. Person)? Welche Klassen haben die besagten Eigenschaften? Was sind das für Listen, die du da verwendest?

04.01.2009 - 16:00 Uhr

Außerdem sind Mathematiker eh mehr "Künstler", als Wissenschaftler 😉

Wenn du mich fragst, dann sind Mathematiker genauso "Künstler" wie Softwarearchitekten, aber mehr als Programmierer und die wiederum mehr als Physiker. Die Anführungszeichen mach ich auch mal hin, weil mit "Künstlern" einfach Kreative gemeint sind, man sich bei dieser Definition von "Künstlern" über die Notwendigkeit der Anführungszeichen durchaus streiten kann.

Die Frage, ob Mathematik vom Menschen geschaffen wurde, ist interessant und auf alle Fälle auch diskusionswürdig. Ich wäre aber doch der Meinung, dass sie das doch ist.

04.01.2009 - 15:46 Uhr

Um zu beweisen, dass eins plus eins drei ist, reicht es schon eine andere Definition der drei anzuwenden, da muss man noch gar nicht mal irgendwelche Axiome ändern. Aber es ist in der Tat so, bei den reellen Zahlen sagt man einfach so, dass es sie gibt. Beweisen kann man das nicht. Wenn du mich fragst, ich würde sogar sagen, dass sie wirklich nicht existieren. Wo bitte kommt in der Natur exakt Wurzel Zwei vor? Nirgends. Aber trotzdem kann man damit arbeiten und sowas wie Computer überhaupt zum Laufen bringen.

Axiome sind ja einfach nur Annahmen, also ich sage einfach ich definiere mir hier ein abstraktes Konstrukt, dass die Eigenschaften hat und arbeite damit. Ob es überhaupt etwas gibt, dass diese von mir geforderten Eigenschaften hat ist dabei erstmal egal.

Reelle Zahlen oder überhaupt Zahlen sind solche willkürlich definierten abstrakten Systeme.

Ich kann dir einfach beweisen, dass 50=1 ist: 50=5^(2-2)=52/52=1

Der Beweis hat aber mehr Lücken als Schweizer Käse. Wer sagt dir denn, dass 5^(2-2)=52/52 ist? Das sagt dir eine Rechenregel, die die Bedingung dass 5^0=1 ist schon ausnutzt. Die meisten Beweisen vereinfachen sich drastisch, wenn man einfach so von der Behauptung ausgeht, nur leider werden die im Allgemeinen nicht akzeptiert.

Hm, zommi war schneller, aber dann sagts wenigstens nicht nur einer 😃

03.01.2009 - 22:07 Uhr

Man könnte auch argumentieren, dass man bisher kein Modell gefunden hat, dass die Quantenwelt so beschreiben kann. Die Heisenbergsche Unschärferelation schliesst Determinismus nicht aus. In meinem Verständnis geht es da eher um "unprüfbares".

Die Heisenberg'sche Unschärferelation tut das nicht, aber es gibt andere Sachen, die das tun, Determinismus ausschließen. Aber Experimente am Doppelspalt sagen eigentlich chon deutlich aus, dass die Welt nicht deterministisch sein kann, jedenfalls nicht in den Dimensionen, die wir wahrnehmen. Weil wenn du dir jetzt theoretisch eine Instanz denkst, die die Elektronen in diesem Doppelspaltexperiment steuert und davon ausgehst, dass diese Instanz auch wieder deterministisch ist, dann wäre kompletter Determinismus wieder möglich.

Ich persönlich gehe übrigens wirklich davon aus, dass es so eine Instanz gibt (die allerdings nicht deterministisch agiert), nenne sie Gott und bin deshalb christlich.

Aber für mich ist auch aufgrund des vorherigen Beitrags Programmieren genauso wenig zufällig wie Mathematik, oder sonst irgendeine Wissenschaft (wobei ich anmerken muss, dass ich Literaturwissenschaft nicht als Wissenschaft anerkenne), in allen diesen Fällen folgt das Vorgehen schon einer gewissen Logik. In allen diesen Fällen ist aber trotzdem so, die Bearbeitung des selben Problems mitunter unterschiedliche Lösungen herorbringen kann, also nach der Definition von See Sharp zufällig ist

03.01.2009 - 21:54 Uhr

Hm, ich für meinen Teil bin naja, doch relativ erfolgreicher Olympiadenmathematiker (bestes Ergebnis war da 2. Preis in der sächsischen Landesrunde). Außerdem bin ich gerade am Überlegen, ob ich zu meinem Informatikstudium noch ein Mathestudium dazunehme. Ob man mich deshalb als Genie bezeichnen kann muss jeder selbst wissen.

Aber zu der eigentlichen Frage:
Was macht man in der Mathematik? Man versucht innerhalb willkürlich definierter mathematischer Systeme irgendwelche Zusammenhänge zu finden und zu beweisen, wobei man natürlich auf bereits bewiesene Zusammenhänge dieser Systeme zurückgreift (oder eben den Definitionen dieser Zusammenhänge).

Was macht man denn in der Physik, mal so nebenbei gefragt? Man nimmt sich doch eigentlich reale Probleme, projiziert die auf abstrakte, eigentlich mathematische Systeme, wendet die Gesetzmäßigkeiten dieser Systeme an (sowohl die Gesetzmäßigkeiten, die man von den mathematischen Gebilden, die darin vorkommen, kennt, als auch bekannte geltende physikalische Gesetze) um die Sachen herauszukriegen, die man gerne wissen möchte und interpretiert dann diese abstrakten Lösungen für das eigentliche reale Ausgangsproblem.

Schulmathematik funktioniert ähnlich, interessanterweise ähnlich der Physik, nicht der eigentlichen Mathematik, nur dass man da die Projektionen am Anfang und am Ende nicht machen muss, weil die schon gemacht sind.

Um sowas machen zu können muss man aber in jedem Fall die mathematischen Gesetzmäßigkeiten kennen, nur mit den physikalischen Gesetzen wird man nicht sehr weit kommen.

Und was macht man jetzt in der Softwareentwicklung? Man nimmt sich wieder reale Probleme, projiziert die auf abstrakte Sachen wie Objekte, wendet die Gesetzmäßigkeiten der zum Einsatz kommenden Technologie und die sich aus dem Problem ergebendes Gesetzmäßigkeiten an, um die Sachen herauszukriegen, die man gerne wissen möchte und interpretiert dann wieder die abstrakte Lösung des Ausgangsproblems.
Und weil die Kunden mit schnöden Konsolenprogrammen heutzutage nicht mehr zufrieden sind man macht noch eine hüsche GUI oder ein Webinterface, ärgert sich noch rum, dass das Teil nicht in allen Browsern gleich aussieht, schreibt noch eine Doku und eine Hilfe, optimiert hier und da noch ein bisschen, macht da vielleicht noch was um das Teil dann zu lokalisieren. Wenn das richtig für die Produktion eingesetzt wird, dann macht man vielleicht noch einen Korrektheitsbeweis (der im Optimalfall an sich auch wieder ein formaler im Prinzip eigentlich mathematischer Beweis ist) und gibt den Aufwand in Groß-O-Notation an.

Insofern sind sich hier Software-Entwicklung und Physik ziemlich ähnlich, Mathematik steht ein bisschen davon entfernt. Wenn jemand gut in der Schulmathematik ist, also beispielsweise ein "Mathegenie", dann hat er ein Gefühl dafür, wann er welche Gesetzmäßigkeiten anwenden kann. In aller Regel wird er auch gut abstrahieren können, aber das ist noch gar nicht mal gesagt. Mit abstrakten Systemen umgehen können und Dinge abstrahieren können sind auch zwei unterschiedliche Dinge. Wenn er das kann und auch ein Gefühl dafür hat, wann er welche physikalischen Gesetze anwenden muss, dann ist er schon ein guter Physiker.

Für die Softwareentwicklung ist aber mehr von Nöten. Diese Abstraktion am Anfang, die macht eigentlich der Softwarearchitekt (mit der Randbemerkung, dass wahrscheinlich viele Programmierer auch irgendwo die Softwarearchitektur so am Rande auch mt machen, in wie weit das zum Programmieren gehört lässt sich streiten). Wenn man aber ein Gespür dafür hat, welche Gesetzmäßigkeiten man in abstrakten Systemen anwenden kann, dann wird man das auch bei der Programmierung von Algorithmen nutzen können, weil dieses Gespür ist in beiden Fällen sehr ähnlich und baut in beiden Fällen sehr stark auf Logik auf. Die Programmierung von Algorithmen ist aber oft einfacher, aber es gilt auch wesentlich mehr Mittel zu überschauen (weil die Geschwindigkeit, in der welche dazu kommen ist einfach enorm). Auf jeden Fall muss man für diesen Teil der Softwareentwicklung mehr mehr als weniger strukturiert denken können. Und das ist wiederum das, was man bei der Hochschulmathematik eigentlich lernt.

Bei dem letzten Teil ist es wieder die Frage, ist das jetzt wieder Aufgabenbereich des Programmierers? Im Falle vom Rumärgern mit den verschiedenen Browsern auf alle Fälle, aber auch da ist jenes Gespür sehr von Vorteil, aber die Erstellung von GUIs macht zu Zeiten von WPF ein Designer und Doku, naja, verdammt, aber Doku schreiben kann jeder, man muss sich nur dazu zwingen.

Insgesamt bin ich also der Meinung, dass jemand, der in der Schule ein Mathegenie war, in aller Regel einen guten Programmierer abgibt. Die Umkehrung gilt allerdings nicht.

25.12.2008 - 23:58 Uhr

Hm, vielleicht hilft dir noch dieser Thread?

Dann kann zwischen den Sätzen sogar noch was dazwischen stehen...

22.12.2008 - 18:01 Uhr

wenn sich die Befehle, die du da ausführen musst, so stark ähneln, dass du sie alle mit einer einzigen Klasse modellieren kannst, dann ist das sicherlich gut so. Im Allgemeinen sind die von den Commands erwirkten Zustandsänderungen aber so verschieden, dass man sie eben nicht alle in einer Klasse unterbringen kann. Wenn das in deinem Fall geht, brauchst du aber kein schlechtes Gewissen haben 😃

19.12.2008 - 00:38 Uhr

Wie soll der Benchmark denn aussehen? Hm, Video komprimieren dauert länger als eine Minute, dann muss das Programm noch höhere Mindestanforderungen haben funktioniert nicht. Und auf der anderen Seite, wenn jeder Mausclick ne halbe Stunde brauch ist es definitiv zu langsam. Und seehr sehr oft hängt die Zeit von der Eingabe ab. Das heißt, wenn es einen Benchmark gäbe, dann müsstest du eigentlich so irrsinnig viel konfigurieren (und auch da vorschreiben, wie lange die einzelnen Aktionen maximal dauern dürfen), das es eigentlich nichts bringen würde, das Teil einzusetzen.

Kurzum: Experimentier einfach ein bisschen rum.

19.12.2008 - 00:32 Uhr

also erstmal ist dir hoffentlich bewusst, dass es die Klasse, die du zu schreiben gedenkst, in .NET schon gibt und List<T> heißt, die ganz nebenbei noch mehrere nette Methoden zum Suchen anbietet und komplett optimiert ist wo es nur geht.

Was bei dir im Speziellen falsch läuft, ist das der Enumerator das komplette Array durchläuft, aber eigentlich nur die ersten paar Einträge zur Liste gehören, das heißt, du müsstest dem Enumerator schon noch irgendwie dir Information mitgeben, bis wo hin er laufen soll.

Und sowas:

try
                {
                    return liste[position];
                }
                catch (IndexOutOfRangeException)
                {
                    throw new InvalidOperationException();
                }

vermeide bitte, erstens brauchst du das an dieser Stelle gar nicht, weil position wird eh immer innerhalb eines gültigen Bereichs liegen, dafür hat MoveNext ja einen Rückgabewert...

Außerdem, wenn du schon deine eigene Liste implementierst, dann sollte die auch ICollection<T>, IList<T> und deren altertümliche Varianten ICollection und IList (aus Kompatibilitätsgründen) implementieren, wobei die nicht generischen nicht unbedingt.

Wobei eigene Collections prinzipiell sowieso von System.Collections.Generic.ObjectModel.Collection<T> erben sollten. Also du siehst anhand der Vielzahl der Konjunktive, dass diese Klasse produktiv nicht eingesetzt werden sollte.

14.12.2008 - 00:59 Uhr

BeginSendFile impliziert, dass du das Datei senden in einem eigenen Thread machst, am besten erledigt das ein eigenes Objekt, was sich seinerseits irgendwie ein FileStream hält und den Stream eben in den Socket schaufelt. Dieser FileStream weiß aber, wo er gerade ist, und er weiß auch, wie lang die Datei ist. Das heißt, der kann dir sagen, wo du gerade bist. Dann musst du halt die ganzen Referenzen halten um irgendiw bis in den FileStream runter zu kommen bzw. eben die Klassen, durch die du da durch musst müssen entsprechende Propertys anbieten.

12.12.2008 - 00:06 Uhr

Einmal das, dass virtual und static sich gegenseitig ausschließen, zum anderen müsste die FromString-Methode aber der Logik nach statisch sein. Außerdem erzeugst du da ein Objekt, was du eigentlich nicht brauchst, was aber voraussetzt, das die Klasse einen parameterlosen Konstruktor anbietet. Kurz und gut, ich bin gegen die Lösung von See Sharp.

Wenn es hier aber wirklich um Konvertierungen von zB Zeichenketten geht, dann schreib doch Konverter (kommt sowieso immer gut, wenn man was konvertieren kann). Da verlierst du zwar die Typsicherheit an ein paar Stellen, was sich aber eigentlich nur auswirken würde, hättest du es mit Strukturen zu tun.

10.12.2008 - 19:30 Uhr

...und wenn du statt einfach 140 in den Quelltext zu schreiben dafür eine Konstante definiert hättest, dann wüssten wir jetzt wahrscheinlich was die 140 zu bedeuten hat und könnten dir noch so weiterhelfen...

10.12.2008 - 00:22 Uhr

Hm, UML-Klassendiagramme sind ja zwar schön und gut, aber bieten sie doch nur (logischerweise) Möglichkeiten die "Standard"-Mittel der Objektorientierung abzubilden - sprich Attribute (im Sinne der Objektorientierung) und Methoden, .NET bietet ja aber noch mehr Möglichkeiten der Modellierung, nämlich Eigenschaften und Ereignisse. Dazu kommt, dass Attribute in .NET Felder heißen, aber das ist ja nur nebensächlich.

Deswegen mal meine Frage an die Berufsprogrammierer, wenn ihr UMLs kriegt, wie ist das da gelöst? Kriegt man da in den praktisch vorkommenden UMLs statt Attributen und Methoden einfach Eigenschaften und Methoden vorgelegt, weil Felder ja eh privat deklariert sein sollten? Und was ist mit Eigenschaften, die sieht UML ja gar nicht vor...

10.12.2008 - 00:11 Uhr
  1. Es gibt in .NET keine Units, es sei denn du benutzt Delphi, da das aber ein C# Forum ist, gehe ich mal nicht davon aus. Welchem IL-Code Delphi Units dann entsprechen hab ich keine Ahnung, weil ich mich mit Delphi .NET gar nicht auskenne.

  2. Natürlich ist es möglich Konstanten in (am besten statischen) Klassen zu separieren, dann bist du sie in deiner Hauptklasse erstmal los.

  3. Viel besser ist es allerdings, wenn du diese Konstanten zu Enumerationen thematisch zusammenfasst, dann bekommst du da wirklich Übersicht rein und die ganze Sache bekommt auf einmal richtig Struktur.

08.12.2008 - 22:52 Uhr

Dann schick doch einfach eine Html-Anfrage über Tcp Port 8080 an den Server, was anderes machen Browser ja auch nicht. Das was zurückkommt ist dann der Html-Quellcode der Seite. An den richtigen Quellcode im Sinne von ASP.NET-, php-, Jsp- oder was auch immer für Code kommst du nicht so einfach ran (und solltest du auch nicht).

08.12.2008 - 22:07 Uhr

also ich hab auch keinen virenscanner und damit noch nie probleme gehabt (hab den rechner aber erst seit april oder so), vista macht das schon 😃 firewall ist auch nur die windows firewall an, aber wie gesagt, bis jetzt alles kein Problem...

08.12.2008 - 21:55 Uhr

Hm, also mit den Generics kann das ganze Problem schon mal nichts zu tun haben, da der Visual Studio Designer immer mit der Basisklasse arbeitet und selbst da ist es kein Problem (oder besser, ich hab noch nie ein Problem bekommen), wenn die Sachen generisch sind. Was ich eher wissen wollen würde ist:

-Ist die Form Localizable gesetzt?
-Was ist bei den Projekteinstellungen die neutrale Sprache?
-Sind alle resx-Dateien im Projektmappenexplorer als dem Projekt zugeordnet markiert?

Ansonsten schau dir mal die betreffende resx an und schau, ob der Designer da irgendwo was vermurkst hat (Der VS WinForms Designer hat so einige Macken)...

08.12.2008 - 21:28 Uhr

Mager ist daran vorbei gedacht, es geht halt einfach nicht. Wie Jack schon gesagt hat ist es unmöglich automatisch erkennen zu wollen, wie tief man gehen muss, weil sich das erst im Kontext erschließt.

07.12.2008 - 02:45 Uhr

Trotzdem mit Dlls. Auch wenn andere den Code dann auch benutzen können. Auch wenn du da eine Sicherheitslücke vermutest, aber die Tatsache, dass andere diesen Code auch ausführen können ist keine Sicherheitslücke, zumal so die Sache so wie du es beschreibst absolut nicht möglich ist. Man kann verhindern, dass andere den Code einfach lesen können, aber man kann auf gar keinen Fall verhindern, dass er ausgeführt wird.

Aber greif auf andere Sicherheitsmechanismen zurück. Wenn du eine Client-Server Komminikation auf die Beine stellen willst, dann nimm zB die WCF, die hat eingebaute Sicherheitsmechanismen out-of-the-box, über tcp oder http oder was immer du willst. Aber auf alle Fälle sind die Varianten, Kommunikation über Zertifikate oder Windows-Identitäten oder sonstwelche Formen asymmetrischer Verschlüsselung die deutlich effizienteren Mittel gegen irgendwelche Sicherheitsrisiken als irgendwelchen Code-Ausführungsschutz.

06.12.2008 - 22:09 Uhr

Ja, es gibt Verschlüsselung bei Dlls, die allerdings genau in die andere Richtung asymmetrisch ist. Sprich jeder kann deine Dlls benutzen, aber keiner kann Dlls schreiben und sie als deine ausgeben (es sei denn er knackt den private Key). Ich wüsste nicht, dass es Varianten gibt, Code gegen dessen Aufruf zu schützen, zumal wie willst du denn den Code gegen deinen eigenen Aufruf schützen? Mir würde dazu kein Anwendungsfall einfallen.

Genau deshalb, weil es keinen bekannten Anwendungsfall gibt, gibt es auch neben Dlls keine anderen Konzepte, Klassen an mehreren Orten zu verwenden, weil genau dafür und für nichts anderes sind ja schon die Dlls da.

Aber beschreib mal deinen Anwendungsfall und dann können wir über alternative Sicherheitskonzepte reden...

//edit: Und erstmal willkommen im Forum!

06.12.2008 - 00:43 Uhr

Warum willst du auf die Interfacemap? Der Compiler kann doch bei der Zuweisung theoretisch auch erst checken, ob das angegebene Objekt von der dynamischen Schnittstele ist, das muss ja nicht in der Interfacemap abgelegt werden. Solche Änderungen erfordern dann allerdings schon Änderungen an C# als Sprache, interessanterweise aber nicht an der CLR, weil intern kannst du diese Funktionalität heute in einer Klasse zur Verfügung stellen, aber nur für jede Schnittstelle einzeln, da C# kein Duck Typing und Aspektorientierung unterstützt, aber von der Sache her ist sowas sogar mit .NET 2.0 möglich (wenn auch nur zu Fuß).

Ich vermute sogar es geht auch mit .NET 1.0/1.1, aber die beiden kenn' ich zu wenig um da eine gesicherte Aussage treffen zu können.

06.12.2008 - 00:31 Uhr

Danke. Jetzt weiß ich auch warum mein Lesezeichen nicht megr funktioniert hat 😃

05.12.2008 - 19:03 Uhr

Naja, was lustige Links angeht...

xkcd
Comicblog mit Strichmännchen, mein absoluter Favorit davon ist Faust 2.0

Nichtlustig
Auch nochmal ein Comicblog

Goblinscomic
Auch mal ganz witzig, Rpgs aus der Sicht der Goblins 😃

Ehrensenf
Tägliche Zusammenstellung von recht interessanten Links, vorgestellt mit möglichst vielen Seitenhieben auf alles und jeden.

05.12.2008 - 18:56 Uhr

Warum gibt man ein Objekt per Interface zurück? Weil man sich die Freiheit nehmen will, sich nicht gleich auf beispielsweise List<T> festlegen zu müssen. Woher weißt der Client dann, dass es sich in Wahrheit um List<T> handelt? Wenn du als externer einen Client schreibst, dann kannst du es nur empirisch herausgefunden haben. Und wenn sich die Implementierung ändert, dann knallt's auf dem Client.

Beispielsweise könnte man, wenn der Client nicht genügend Rechte hat, nur eine ReadonlyCollection<T> zurückgeben, das merkst du dann noch nicht einmal beim testen, weil mit vollen Rechten kam ja eine List<T> raus...

Rückgabe als Interface macht Sinn, wenn du dir für spätere Wartungsarbeiten das rausnehmen willst, dass du eine andere Schnittstellenimplementierung zurückgibst.

30.11.2008 - 19:06 Uhr

kurzer Nachtrag: gerade gesehen bei Isic.de:

Antragsberechtigt:

Antragsberechtigt sind Studierende, die vollzeitlich eine Hochschule (Ausbildung im Rahmen einer Universität, Akademie mit Abschluss eines akademischen Grades, Diploms oder Staatsexamen) mit einem Mindestaufenthalt von 6 Monaten am Lehrinstitut besuchen.

SchülerInnen, die vollzeitlich eine Schule der Sekundarstufe (Hauptschule, Realschule, Gymnasium, Gesamtschule ab der 5. Klasse, Berufsschule, Handelsschule oder berufsbildende Schulen) besuchen und mindestens 12 Jahre alt sind.

Sprich du kriegst auch als Schüler eine ISIC und damit bei DreamSpark ExpressionBlend (nebst Visual Studio 2008 Prof., SQL Server 2008 Dev. u.a.)...

30.11.2008 - 18:03 Uhr

Die Sache, das da 12:25 statt 0:25 rauskommt ist im Übrigen genau das, weil wenn du eine Zeit in DateTime konvertierst, dann denkt sich .NET diese Uhrzeit am heutigen Tag, also zum Beispiel heute 30.11.2008 0:50, das durch zwei dann halt gibt irgendwas bei 15.Juni 1004 12:25 oder so. Das ist genau das, das Selbstverständnis von DateTime ist ein Zeitpunkt zu sein, keine Zeitspanne. Zeitspanne ist TimeSpan

30.11.2008 - 16:58 Uhr

DateTime ist dafür ungeeignet, DateTime stellt ein Datum oder eine Uhrzeit dar, also einen Zeitpunkt, du suchst aber eine Zeitspanne und dafür ist TimeSpan geeignet. Da kannst du mit den Propertys TotalMilliseconds usw auch komfortabler die Zeitspannen umrechnen bzw dir ausgeben lassen. Ich bin mir nicht ganz sicher, aber evtl sind sogar die arithmetischen Operatoren für TimeSpan überladen. In jedem Fall sind sie es in der Art, dass DateTime + TimeSpan = DateTime und DateTime - DateTime = TimeSpan.

30.11.2008 - 14:43 Uhr

hm, bei dir im Profil steht ja was von du wärest Schüler. Ich weiß nicht wie die Sache bei Schülern aussieht, aber Studenten müssen sich nur einen internationalen Studentenausweis besorgen und kriegen über DreamSpark eine verdammte Menge Software kostenlos von Microsoft zur Verfügung gestellt, unter anderem Expression Blend (außerdem VS 05/08 Prof, SQL Server 2008 Dev. u.a.). Und bei mir hat das tadellos geklappt, bin mittags samt Immatrikulationsbescheinigung zum Studentenwerk gegangen, hab mir da einen internationalen Studentenausweis geben lassen (kostet 12€), bin nach hause gefahren und hab mich bei DreamSpark sofort per ISIC Nummer verifizieren lassen können.

30.11.2008 - 14:30 Uhr

Hallo zommi,

also erstmal sehr schöner Aufsatz, Kompliment.

Aber ich bin mit der Lösung des Raststätten-Problems nicht ganz einverstanden, zumindest nicht für das Problem, wie es Mr Sparkle beschrieben hat.

rein fiktiv smile

Da liegt das Problem, weil wenn du diese fiktiven Werte verschieden ansetzt, dann kommen unterschiedliche Lösungen heraus, dabei ist das Zurükgreifen auf fiktive Werte (zumindest nach der Problembeschreibung von Mr Sparkle) meines Erachtens gar nicht notwendig. Lass die Zielfunktion doch einfach die aufsummierte Abweichung des Optimalabstands zurückgeben, wobei man den natürlich minimieren muss. Den Optimalabstand hast du zwar vielleicht auch nicht gegeben, aber ich denke wenn man einfach das arithmetische Mittel von Minimalabstand und Maximalabstand nimmt, dann ist man schon ganz gut dabei.

Den Minimalabstand und Maximalabstand an sich kriegt man ja relativ einfach hin, indem man einfach nur die f(k+j) betrachtet, für die der Abstand von Raststätte k zu Raststätte k+j innerhalb dieser Schranken liegt.

Eine noch bessre Gleichverteilung kriegt man wahrscheinlich auch hin, wenn man statt der einfachen Abweichung die quadratische Abweichung nimmt, auch wenn das natürlich wieder Rechenleistung kostet.

Insgesamt scheint mir das ein sehr stochastisches Problem zu sein (ich meine, mit der aufsummierten quadratischen Abweichung berechnet man letztenendes auch nur irgendeine Varianz), auch wenn mir keine Möglichkeit einfällt das mit irgendwelchen Gesetzen zu Verteilungen einfacher hinkriegt, aber ich bin auch nicht so der Stochastiker...

//edit: Die unterschiedlichen Lösungen bei unterschiedlichen fiktiven Werten kommen dadurch zustande, dass der Algorithmus bei relativ gesehen zu hohen "normalen" Einnahmen haufenweise Raststätten bauen will, weil der negative Gewinn wegen den kürzeren Entfernungen nicht ausreicht um die durch zusätzliche Raststätte entstandenen Gewinne zu kompensieren. Andersrum, wenn er zu niedrig ausfällt, dann sind die mittleren Entfernungen zwischen den Raststätten wohl eher etwas zu hoch.

29.11.2008 - 13:03 Uhr

Hallo,

Und um wieder zum eigentlichen Thema zurück zu kommen: Ich sehe es auch so, dass von diesem Gesetz nur die betroffen sind, die Software publizieren, die auch wirklich speziell dafür geschaffen wurde (Urheberrechts-)Gesetze zu umgehen. Ich meine, Youtube hat auch schon mehrere Klagen wegen dem Auftauchen von urheberrechtlich geschütztem Videomaterial erlebt und ist es deswegen eingegangen? Nein, die Konsequenz war lediglich, dass Youtube die entsprechenden Videos rausgenommen hat und ein bisschen mehr das was da hochgeladen wrd kontrolliert. Was wird dann also bei SourceForge passieren? Ich denke das gleiche, die entsprechenden Programme werden rausgenommen und dann läuft SourceForge weiter beinahe so als wäre nichts gewesen. Und SourceForge wird auch relativ zur Menge der angebotenen Produkte (im Fall von Youtube Videos, bei SourceForge halt Programme) deutlich weniger Klagen erleben als Youtube, weil die Beschreibung dieser Software halt sehr uneindeutig ist. Und ich glaube, dass auch Musikkonzern irgendwo auch auf Image bedacht sind, und die werden wissen, dass Leute, die sich bei SourceForge Programme runterladen auch Musik hören.

Was jetzt den Fall mit China angeht, wenn man eine Verschlüsselungssoftware entwickelt hat. Klar kann China einen dann verklagen und wenn man nach China reist, dann hätten die die Möglichkeit einen einzuknasten. Ich mein, das ist halt so, wenn ich was mache, was der andere nicht mag, dann mag der andere mich dann nicht mehr. Ob China einen deswegen tatsächlich einknasten würde wage ich trotzdem zu bezweifeln, weil da würde die Bundesregierung und eigentlich wahrscheinlich die ganze EU doch ein deutliches Wort mit China wechseln, dass die da einfach jemanden wegen eines Verschlüsselungsprogramms verhaften. Und an Chinas Stelle würde ich mir doch schon stark überlegen, ob ich mein Image bei der kompletten westlichen Welt wegen eines dämlichen Verschlüsselungsprogramms aufs Spiel setze. Ohne dieses Verschlüsselungsprogramm würde es dann halt nur noch 999 statt 1000 Verschlüsselungsprogramme geben, das sind aber immernoch genügend. Wenn das aber an Chinas Stelle heißt damit ausländische (westliche) Investoren zu vergraulen, dann werden die es sich zweimal überlegen.

Im Übrigen würde ich es gut finden, wenn die Diskussion in Schwarz weitergeht 🙂

Georg

25.11.2008 - 23:49 Uhr

Warum die .Net-Plattform benutzen

weil wir hier in einem .Net Forum sind? 🙂 Aber ja, man kann auch die Mono-Bibliotheken benutzen, wenn .Net<4.0

25.11.2008 - 23:46 Uhr

@7.e.Q.

naja, deine Variante ist deutlich weniger performant. Überhaupt ist jeder Zugriff über IEnumerable (<T>) auf eine Liste oder ein Array, bei dem man direkt auf den Index des Elements zugreifen muss, auf jedenfall performancemäßig deutlich schlechter als manuell durch die Liste zu iterieren. Insofern ist hier das neu erfundene Rad deutlich schneller als zumindest Linq.

Und wegen threadsafe seh ich bei der Variante von Kalleberlin noch keinen Grund, warum die nicht mehr threadsafe sein kann, es gibt ja nur einen Zugriff auf eine lokal definierte Variable, auf die haben andere Threads keinen Zugriff. Der Code muss am Ende nicht threadsafe sein, aber wenn er es nicht ist, dann nicht wegen diesem Stück Code.

Also ich würde die Variante von Kalleberlin nehmen...

//edit: ja, stimmt, das Array müsste man noch absichern, dann ist's threadsafe. ist halt die Frage wo das Arrayherkommt...

25.11.2008 - 23:33 Uhr

Ich glaube, das wird mit Windows.Forms nicht umzusetzen sein. Grund: Wenn die Maus außerhalb der TrackBar gezogen wird, dann empfängt dein Steuerelement auch keine Mausereignisse mehr - müsste es aber, wenn du die TrackBar auch dann noch anpassen willst, wenn die Maus schon lange außerhalb ist (sprich wie du gesagt hast halt den bereich vergrößerst, indem du mit der TrackBar arbeiten kannst). Bei WPF sieht die ganze Sache etwas anders aus, weil du das ganze dann im Hauptformular abfackeln kannst wenn die Events da durchgebubblet werden. Bei Windows.Forms würde mir keine MMöglichkeit der Realisierung einfallen...

21.11.2008 - 15:51 Uhr

hm,

generator.EmitWriteLine("Hello World");

ist auf alle Fälle noch ausbaufähig 🙂, ehrlich gesagt kannte ich den Befehl gar nicht. Ich hätte jetzt lauter einzelne Emits geschrieben. Die hohe Kunst ist es jetzt aber wie gesagt den Code von Khalid oben mit Reflection.Emit umzusetzen. Wenn das jetzt wieder jemand als Herausforderung betrachtet, dann viel Spaß dabei. Wenn man das hinkriegt ohne zwischedurch mal den Reflector oder den Disassembler anzuschmeißen, dann ist das schon verdammt gut. 🙂

21.11.2008 - 14:34 Uhr

So und jetzt den ganzen Spaß noch mit im Speicher dynamisch generierter Assembly 🙂

//edit: Und zwar Generierung im Speicher mit System.Reflection.Emit, nicht das hier noch einer mit CodeDOM anfängt 🙂

20.11.2008 - 23:53 Uhr

Weiße Gasse wäre zumindest auch ne Überlegung wert, ist nicht zu weit entfernt. Aber im Gegensatz zum mms-Gebäude ist die HTW ja ziemlich direkt in der Innenstadt.

Ich kann leider nicht kommen 🙁 aber daran werd ich mich wohl als Karlsruher Student gewöhnen müssen...

17.11.2008 - 00:56 Uhr

...und vorher unbedingt noch auf Null und Sonderwerte wie NaN prüfen!

16.11.2008 - 16:40 Uhr

Also rein von der Sprache her würde ich eher VB.NET sagen, wenn jemand noch nie in seinem Leben von irgendeinem Compiler dazu verdonnert wurde hinter jede einzelne Anweisung ein Semikolon zu setzen, dann wird er es eher verfluchen, sich das antrainieren zu müssen, gerade wenn es anders auch ohne geht.

Dazu kommt, dass mir zumindest der VB.NET-Editor an vielen Stellen deutlich besser gefällt, als der C#-Editor. Damit mir der Compiler irgendwelche Fehlermeldungen anzeigt, habe ich in C# immer erst kompilieren müssen - der VB.NET-Editor macht das automatisch im Hintergrund (Was gerade am Anfang sehr wertvoll ist). Irgendwelche Sachen umzubenennen ist auch einfacher (weil direkter), aber weniger mächtig (benennt keine Kommentare um, die schreibt man aber am Anfang eh eher weniger).

Außerdem lesen sich so gut wie alle VB.NET-Anweisungen fast wie englische Sätze, während C# deutlich kryptischer ist. Das macht meiner Meinung nach VB.NET auf den ersten Blick verständlicher als C# (was ein Trugschluss ist), auf der anderen Seite denk' ich fühlt man sich als C#-Anfänger eher als Beherrscher der Kryptik, was zu mehr gefühlter Expertise führen könnte (was wiederum der nächste Trugschluss wäre).

Leider gibt es auch einen Unterschied in der Art Weise welche Hilfestellungen man im Internet dann kriegen kann. Ich hab selbst mit VB.NET angefangen und bin in einem Forum namens mycsharp hängen geblieben, warum? Weil ich kein deutschsprachiges Forum für VB.NET gefunden habe, was annähernd so kompetent gewesen wäre, wie dieses hier. Ich meine, mycsharp ist kein Anfängerforum und wenn man dann mal nicht mehr Anfänger ist, dann kann man auch wie ich jetzt immer alle Codeschnipsel in C# übersetzen, das hat sogar seine Vorteile, weil man dann nochmal den ganzen Code durchdenkt und eventuell den Fehler bemerkt, aber es ist auf alle Fälle ein deutliches Argument gegen VB.NET, auch wenn die Sprache an sich nichts dafür kann.

Wer allerdings was dafür kann ist Microsoft indem sie dem Compiler einige Gimmicks eingebaut haben, die teilweise sogar recht praktisch sind (Zugriff auf Resourcen über My.Resources oder Formulare über My.Forms), aber für das Verständnis gerade zu Beginn ein sehr starkes Gift.

Insgesamt hab ich mit VB.NET (mit Andreas Koflers "Visual Basic 2005", auf alle Fälle zu empfehlen) denk' ich relativ gut Programmieren mit .NET gelernt, hab die Entscheidung mit VB.NET angefangen zu haben aber zwischenzeitlich mehrfach verflucht. Mittlerweile programmiere ich lieber VB.NET, was aber durchaus daran liegt, dass ich mich immernoch nicht damit abfinden kann hinter jede beschissene Anweisung ein beschissenes Semikolon dran zu hängen, das vergess ich immer.

12.11.2008 - 20:06 Uhr

Verbindung unterbrochen

Die Verbindung zum Server wurde zurückgesetzt, während die Seite geladen wurde.

Die Netzwerkverbindung wurde während des Verbindungsaufbaus unterbrochen. Bitte versuchen Sie es nochmals.

Nach dem Upload einer Datei krieg ich genau diese Fehlermeldung...