Laden...

Forenbeiträge von Traumzauberbaum Ingesamt 512 Beiträge

20.07.2006 - 09:57 Uhr

Im Vergleich zu Visual Studio gibt es nur eine Kleinigkeit die ich bemängeln würde: fehlende Formatierungsoptionen.

Ansonsten hat Visual Studio noch paar mehr Tools wie das erstellen für typisierte DataSets, DataBindings und Settings. Aber da kann ich ehrlich ganz leicht drauf verzichten.
Ich seh nicht so richtig ein, warum ich paar hundert Zeilen Code brauche, nur um mir das Casten zu ersparen oder im Designer ein DataMember auswählen zu können statt eine simplen Zeile Code per Hand zu schreiben. Einige meiner Projekte wären dadurch sicher leicht doppelt so groß (vom Code her).
Die schlankeren Tools in SharpDevelop für PInvoke und Regex finde ich da irgendwie nützlicher 😉

Ansonsten ist glaub ich die automatische Codeerstellung (für Konstruktoren, Properties, überschriebene Funktionen) in SharpDevelop imo sogar etwas besser/komfortabler.

Es gibt aber immernoch ein paar kleine Fehler.
So funktioniert Intellisense beim Erstellen von Classmembern nur, wenn man es ohne Accessibility Level schreibt. Also mein vorgehen ist da eben erst nur Typ und Namen zu schreiben (z.B. "DbConnection connection") und dann erst ein "public" oder "private" ranzuhängen.
Außerdem kommt es manchmal (wenn auch selten) zu nicht abgefangenen Exceptions. Die sind selten kritisch und ich hab da selbst in der Beta noch nie ein einziges Zeichen Code daran verloren.
Und mir ist es auch schon passiert, dass sich MsBuild plötzlich aufhängt. Es läuft also noch und ich kanns demnach nicht nochmal starten um zu compilieren. Dann muss ich erst den SharpDevelop Prozess abschießen, bevor ich weiter machen kann.

Ich bin ja sonst keiner, der Code am liebsten mit vim schreibt, und schon aus Prinzip keine MS Produkte benutzt (schaut euch z.B. mal die Ideologie hinter DotGNU an, da kommt man aus dem Lachen nichtmehr raus), aber hier würde ich trotz der kleinen Mängel sagen, dass SharpDevelop durchaus mit Visual Studio mithalten kann und eine gute Alternative ist.

18.07.2006 - 11:36 Uhr

Ließ mal was davor steht.
Das Mathe was ich da meine ist ungefähr das, was man im Abi schon hatte. Etwas erweitert, etwas vertieft, aber eben nur das. Nichts wirklich Neues, nur das Bekannte etwas umfangreicher.

Eine Uni ist nunmal die Einrichtung der Wahl, wenn es um eine theoretische Ausbildung geht. Es gibt einige Möglichkeiten sich weiterzuqualifizieren, wenn man das nicht will.
Aber was wäre wenn das Informatikstudium kaum Mathe bietet?
Welche Alternative soll ich dann nehmen um das zu bekommen, wie es an der Uni jetzt ist?
Das meine ich damit.

18.07.2006 - 11:23 Uhr

Klar kommts auf Anwendung an. Aber allgemein finde ich die Aussage sehr korrekt. Wenn man das Mathezeugs kann, hat man mehr Möglichkeiten als ohne. Das trifft jetzt auch nicht auf so viele andere Berufszweige zu. Eigentlich fast nur auf Ingenieure. Die meisten werden auch ohne auskommen, aber irgendwer muss es dann doch noch können, damit was funktioniert.

Bei uns an der Uni gibts neben Informatik auch noch Angewandte Informatik. Da hat man weniger mit theoretischen Aspekten zu tun, also auch weniger Mathe.
Man hat da trotzdem noch 4 Semester Mathe, aber das ist eben genau das Selbe, was alle Ingenieure machen müssen.
Wer weniger Mathe will, ist imo an ner Uni einfach falsch (ohne jemanden beleidigen zu wollen). Programmieren ist eben nicht so schwer, dass man es an ner Uni lehren müsste. Und Technische Informatik, Rechnerarchitektur, Betriebssysteme, Datenverwaltung etc. hat man ja im Studium trotzdem noch. Das Studium erscheint mir ja schon im Vergleich zu anderen jetzt schon nicht allzu zeitfordernd.

PS Theoretische Informatik ist zu 100% bestehend aus Mathematik 😁
Ich hab Mathe als Nebenfach gemacht, und es kam in TI nicht wirklich viel, was ich da in diesen Nebenfächern nicht gelernt habe.

17.07.2006 - 16:13 Uhr

Programmierer != Informatiker

Programmierer kümmern sich eben um triviale Codetipperei. Da muss man halt bissel Syntax kennen, die Bibliotheken und den einen oder anderen Trick. Nicht sonderlich anspruchsvoll eben. Ist wohl an der praktischen Informatik recht nahe dran.

Aber Informatik als ganzes ist doch ein ganzes Stück mehr.
Wie will man ohne gutes Mathewissen nen partielle Korrektheit beweisen?
Wie will man ordentliche Laufzeitanalysen machen?
Was wenn man wissen will, ob es überhaupt einen Algorithmus geben kann, der um Klassen schneller ist als der den man kennt?
Und dann stolpert man nicht selten über Probleme, die Mathematiker schon gelöst haben. Zum Beispiel in der Optimierung und Statistik/Stochastik: "Finde die beste Lösung unter diesen Bedingungen". Ist durchaus nicht realitätsfremd, z.B. einen optimalen Lagerbestand führen.

Also zum Programmieren braucht man bestimmt kaum Mathe, aber in der Informatik ist es unabdingbar.
Ohne Mathe kann man eben nur die trivialeren Probleme lösen, was ja auch nicht gerade wenige sind. Aber bei den schwereren muss man sich auf anderen berufen.
Man ist als Informatiker definitiv der Qualifiziertere, wenn man gute Mathekenntnisse hat.

16.07.2006 - 19:31 Uhr

Du verstehst da glaub ich Synchronisation falsch.

Die Nachrichten werden in den GUI Thread auch genau in der Reihenfolge ausgewertet wie du sie reinsteckst. Nur hat das mit Synchronisation herzlich wenig zu tun.

Genau das passiert bei dir auch.

Synchronisation heißt grob gesagt, dass ein Thread auf einen anderen wartet.

Und genau das ist das Problem bei dir.

Das Geschehen läuft in 2 Threads ab, keiner wartet auf den anderen.
Der eine startet ohne auf das Beenden des Anderen zu warten. Also kommt der Aufruf zum Start des 2. vor dem beenden des 1. Also kommt auch in die MessageQueue erst die 2. Meldung vom Start, bevor einer das Beenden meldet.

Kannst dir doch mal die Uhrzeit/Tickcount anschauen, bei denen jeweils Anfang und Ende gemeldet werden.

16.07.2006 - 13:06 Uhr

"\" wird ja im eigentlichen string zu einem "".

Dieser Backslash ist allerdings auch in der Regex ein Sonderzeichen. Wie du schon z.B. bei "\s" siehst. Damit die Regex einen Backslash als echtes Zeichen nimmt, musst du das gleiche machen wie in C#: du musst zwei setzen. Also siehts am Ende im Code so aus: "\\" daraus wird "\" für die Regex, und die wertet das als einfaches Backslashzeichen.

14.07.2006 - 19:00 Uhr

Das PropertyGrid wandelt alle Typen in Strings um. Also wird das DefaultValue dort auch ein String sein. Musst dafür eben richtige Konverter schreiben, damit das klappt.

Hab das aber so noch nicht getestet...

13.07.2006 - 11:22 Uhr

Oh ja goto is teh evil

Hätte mans breakto genannt würde keiner was sagen.

Denkt mal lieber drüber nach warum man goto nicht mag, und ob man diese Gründe überhaupt auf dieses spezielle goto übertragen kann.

13.07.2006 - 10:37 Uhr

Das was du willst wird so nicht funktionieren.

Das Problem ist schon beim ersten Beispiel vorhanden.
Versuch doch mal eine Variable vom Typ CUse zu erstellen. Es ist unmöglich, weil der Parameter T rekursive Beschränkungen hat. Das was du als T bei CUse eingibst, will er auch als T bei CTest einsetzen. Beispiele:

CUse<CTest<int>> => Constraint nicht erfüllt weil T != CTest<CTest<int>
CUse<CTest<CTest<int>>> => Constraint nicht erfüllt weil T != CTest<CTest<CTest<int>>>

In deinem zweiten Beispiel äußert sich das dann verstärkt. Der Parameter bei CTest kann nur ein struct sein, aber bei der Definition von CUse kann der Parameter nur vom Typ CTest<T> sein => Widerspruch. Wenn du class für Referenztypen genommen hättest, würde er zwar so compilieren, aber es ist wieder unmöglich eine Variable von dem Typ zu erstellen.

Es gibt da jetzt zwei Möglichkeiten wie du diesen Fehler beheben kannst.

  1. CUse nimmt zwei Parameter:
public class CUse<A,B> where A : CTest<B>
  1. Du definierst ein Interface was von CTest implementiert wird, und beschränkst CUse auf dieses Interface:
public class CUse<T> where T : CTestInterface
11.07.2006 - 18:17 Uhr

Naja mein Problem ist ja nicht das benutzen der .NET Provider. Da benutze ich auch die DbProviderFactories plus ein paar selbstgeschriebene Funktionen für Parameterunterstützung um das ganze generisch abzuhandeln.

Mein Problem ist eben nur die Konfiguration. Es ist ja den Leuten nicht wirklich zumutbar selbst einen ConnectionString zu schreiben. Und ich will mir einfach die Arbeit sparen selbst einen so umfangreichen Dialog zu schreiben, wenn es den schon gibt und ich darauf zugreifen kann (siehe Code den ich gepostet habe).
Ich muss eben nur noch aus den Provider Informationen im ConnectionString den entsprechenden .NET Provider rausfinden und wollte mal wissen ob da jemand etwas mehr drüber weiß als ich (nix) 😁

11.07.2006 - 16:27 Uhr

Zur Konfiguration einer Datenbankverbindung wollte ich den schon vorhandenen Dialog zum erstellen eines DSNs benutzen.

Das sieht im Code ungefähr so aus:

DataLinksClass dataLinks = new DataLinksClass();

ConnectionClass connection = new ConnectionClass();
object conObj = connection;

connection.ConnectionString = connectionString;

dataLinks.PromptEdit( ref conObj );

return connection.ConnectionString;

(Für alle dies selbst ausprobieren wollen: Als Referenz braucht man ADODB (für ConnectionClass) und COM Referenz auf oledb32.dll (Microsoft OLE DB Service Component 1.0 Type Library))

Das Problem dabei ist, dass der erstellte ConnectionString Informationen zum Provider enthält, ich aber gerne einen nativen Provider benutzen würde. Kleines Beispiel:
Wenn ich als Provider "Microsoft OLE DB Provider for ODBC Drivers" auswähle, steht im ConnectionString "Provider=MSDASQL.1". Ich wenn ich eine OleDbConnection damit erstellen will, kommt der Fehler, ich muss dafür eine OdbcConnection benutzen. Also werde ich das wohl machen müssen.

Ich suche also ne Methode, wie ich aus der Provider Information im ConnectionString einen .NET Provider rausfinde.
Ein simples switch scheint mir nicht so die optimale Lösung zu sein. Irgendwie hab ich nicht so das Gefühl, dass die Provider Bezeichnungen immer gleich sind (z.B. "SQLNCLI.1" für System.Data.SqlClient), zumal die Zahl am Ende vieleicht auch nicht ganz ohne Bedeutung ist.
Weiß da jemand vieleicht etwas darüber?

11.07.2006 - 00:12 Uhr

Allgemein ist die einfachste Lösung meist die Convert Klasse:

decimal teilzahlungen2 = Convert.ToDecimal(dSet.Tables["Daten"].Rows[0]["Teilzahlung2"]);

Funktioniert wenn in "Teilzahlungen" ne Zeichenkette steht, wenn dort ein beliebiger numerischer Typ steht, und auch wenn dort null drin ist. Nur DBNull wird nicht abgefangen (kommt das überhaupt vor?)

Alternativ kannst du auch decimal.TryParse benutzen und einfach schauen obs geklappt hat.

Das string.Format kannst du dir auf jeden Fall komplett schenken. Du sagst dort, dass er es als Währung ausgeben soll. Damit er das kann, muss er den Parameter schon in ein decimal konvertieren können. Das Ergebniss muss auch äquivalente Informationen liefern, sonst wär das ja erst recht Käse wenn sich string.Format da einfach was ausdenkt. Es kommt da also nichts raus was nicht schon bei ToString da wäre.

10.07.2006 - 23:45 Uhr

Original von Zocker
@alle

Wenn nun die Dauer im TimeOfDay nich nach dem Format hh:mm:ss oder ähnlich dargestellt wird sondern durch diese besagten Ticks ist mir das durchaus nicht egal, weil das für meine Zwecke ungut ist. Wie in dem Thread den ich verlinkt habe beschrieben ist, bekomme ich Daten in einem String und da kommen nunmal Zeiten im Format erwähnter Art vor. Da kann ich nicht viel mit anfangen wenn ich das dann in eine DB schreibe. Klar ich könnte die Zeit in diese Ticks umwandeln und beim Anzeigen wiederum in den alten Wert zurückkonvertieren, das ist doch aber eine total sinnlose Umständlichkeit. Abgesehen davon das dann die Abfragen unnötig kompliziert werden.

DateTime wird intern als Fließkommazahl gespeichert. Das hindert dich nicht dran es als Datum mit Uhrzeit zu sehen.

Was genau ist denn dein Problem? Wie du Operationen mit Uhrzeit auf ner Firebird Datenbank ausführst hab ich ja schon in dem anderen Thread geschrieben und ne andere Antwort gibt es einfach nicht.

09.07.2006 - 14:39 Uhr

Original von -acid-
Ich habe mich nun vorerst dazu entschieden, den SQL Server Express zu nutzen. Verbindung wurde über den Assistenten hergestellt, allerdings über eine Windows-Authentifizierung, weil er beim Öffnen über einen SQL-User einen Fehler bringt. Egal. Habe den ConnectionString in der app.config einfach angepasst und es geht:

Klingt so als hättest du bei der Installation die Option "Nur Windows-Authentifizierung" angelassen. Musst mal mit dem Express Manager umändern.

Ansonsten ist es auch garnicht eine so schlechte Idee damit zu arbeiten. Statt User und Password explizit anzugeben, stellst du einfach Integrated Security=true und es wird der aktuell eingeloggte User benutzt.

09.07.2006 - 14:09 Uhr

Gerade beim Stöbern bei Code Projekt auf was gestoßen:

http://codeproject.com/useritems/DraggableForm.asp

08.07.2006 - 13:27 Uhr

Ehrlich gesagt kann ich dir das nicht beantworten, weil ich noch nichts mit Firebird Datenbanken zu tun hatte.
Ich nehme mal an AutoID ist einfach eine Zahl, die beim Einfügen immer erhöht wird.

Prinzipiell wäre das ja einfach ein Parameter mit einem Integertyp. So kannst du auf jeden Fall Selects oder Updates mit nem simplen Integer-Parameter ausführen.

Das Einfügen bei solchen Feldern ist aber gerne sehr unterschiedlich.
Bei MSSQL funktioniert das z.B. indem man beim Insert das Feld einfach weglässt.
Bei Oracle muss man einfach irgendeinen Wert ins Insert reinschreiben, den Oracle dann einfach ignoriert und überschreibt.

Musst einfach mal testen. Die Parameter sind aber prinzipiell nichts anderes als Platzhalter für Werte. Wenn also z.B. sowas funktioniert:

"INSERT INTO Data (Id,Value) VALUES (1,'test')"

Dann funktioniert auch:
"INSERT INTO Data (Id,Value) VALUES (@Id,'test')"
Oder
"INSERT INTO Data (Id,Value) VALUES (@Id,@Value)"

Meistens bestimmt er sogar den Typ des Parameters automatisch. D.h. du musst nur nen Parameter mit nem Namen anlegen und nen Wert zuweisen und er sucht automatisch raus in welchem Format er es in den Befehl eintragen soll.

Parameter lohnen sich richtig bei Feldern, wo man die Formatierung nicht genau kennt (wie eben Date und Time), wo die Formatierung sprachabhängig sein kann (um nicht bei ner englischen Installation vor geschlossenen Türen zu stehen obwohls bei ner deutschen läuft), und prinzipiell bei Strings um SQL-Injection zu verhindern und alle möglichen Sonderzeichen und Codepages problemlos zu unterstützen.

08.07.2006 - 11:15 Uhr

Dann sollte das doch relativ problemlos mit Parametern zu machen sein.

Also statt den Wert selbst zu konvertieren in etwas, das Firebird versteht, lässt du das den .NET Provider machen.

Für den Firebird Provider müsste das dann z.B. so aussehen:


// FbConnection und FbCommand cmd erstellen:
cmd.CommandText = "INSERT INTO Termine VALUES (@Name,@Datum,@Zeit)";
cmd.Parameters.Add("@Name",FbDbType.VarChar).Value = "Jetzt";
cmd.Parameters.Add("@Datum",FbDbType.Date).Value = DateTime.Now;
cmd.Parameters.Add("@Zeit",FbDbType.Time).Value = DateTime.Now;

Hier eine Liste mit FbDbTypes und zu welchem .NET Typ sie gemapt werden
(z.B. wird sowohl Date als auch Time zu DateTime gemapt. Du weist auf beide ein DateTime Wert zu und der Provider sucht sich selbst die jeweils passenden Infos raus)

07.07.2006 - 23:35 Uhr

Wie greifst du überhaupt auf die Datenbank zu? Also mit welchem .NET Provider (z.B. System.Data.Odbc)?

07.07.2006 - 14:08 Uhr

Original von Zocker
Mein String Zeit sieht folgendermaßen aus: "15:02"
Jetzt hab ich mir folgendes Array angelgt:

...

DateTime.ParseExact(zeit, "hh:mm", null)  

Da bekomme ich aber nur die Meldung das die Zeichenfolge nicht als gültiges DateTime erkannt wurde.

Wisst/Seht ihr woran der Fehler liegt? Ich habe jetzt alles was direkt mit dem ParseExact zusammenhängt hier gepostet.

Zocker

Das kleine h ist am/pm Stundenformat. Das heißt: 0-12 (wobei 0 == 12 ist)

Für das 0-23 Format musst du das große H benutzen. Also für dein Beispiel:

DateTime.ParseExact(zeit, "HH:mm", null)

Siehe auch Custom DateTimeFormat Strings

PS ich finde auch gerade Konvertierungen sollte man nicht in der Datenbank machen, weil die Fehlerbehandlung dadurch viel einfacher wird, und das Programm nicht so sehr von der benutzten Datenbank abhängt.
Die Regel "viel von der Datenbank machen lassen" soll eigentlich heißen, dass man ein möglichst gutes "WHERE" konstruiert um im Programm dann nichts per Hand auszufiltern, und auf Aggregationen wie Summen. Weil das die Datenbank meist deutlich schneller hinbekommt.

06.07.2006 - 23:54 Uhr

Mal ein ganz anderer Ansatz:

Pack in die Datenstruktur eine DataTable mit 3 Spalten.
Eine für den Wert und je eine für die Schlüssel.

Mit der Select-Methode suchst du dann die Elemente raus.

Das ist imo mit nem RedBlackTree umgesetzt. Zumindest bekommt man manchmal ne RedBlackTreeException bei DataTables 😁

Das wäre jetzt die Variante mit dem geringsten Programmieraufwand.

Die zweite Idee, die ungefähr wie deine ist: Speicher in der zweiten Hashtable statt einer Liste von Werten eine Liste von Schlüsseln für die erste Hashtable. Die Keys sind ja quasi Referenzen auf die Elemente.

Achja und falls du .NET 2.0 benutzt vergiss die Hashtable und nimm Dictionary 😁

06.07.2006 - 00:06 Uhr

Wozu überhaupt darüber Gedanken machen?

04.07.2006 - 21:08 Uhr

Original von Dr.Cool
Der Unterschied zwischen der Simulation und dem wirklichen Schaffen ist nunmal, dass bei der Simulation ein selbstständiges Denken / Fühlen etc. eben nur vorgegaukelt wird.

...

Und nur weil als Verhaltensmuster irgendwo 3000 if-Abfragen im Programm enthalten sind, die vielleicht noch den Eindruck einer intelligenten Verhaltensweise machen, so sind das letztendlich auch NUR ein paar Maschinenbefehle, die durch den leblosen Prozessor rattern.

...

DU hingegen als Mensch bist nicht an irgendwelche if-Abfragen gebunden. Du denkst kreativ, du denkst frei, du hast einen eigenen Willen...

Immer nur mehr unbegründete Behauptungen. Sieh es ein, das ist nur dein Glaube. Da lässt es sich auch schwer diskutieren ob es möglich ist, wenn du schon mit sochen Voraussetzungen rangehst.

Hausaufgabe:
Zeige, dass der Mensch sich frei und ungebunden entscheiden kann. Das eine Entscheidungen weder von:
a) seinem aktuellen Zustand (seinem bisherigen Leben, seinen Erfahrungen, dem was er gelernt hat)
b) den aktuellen Eingaben (Umwelteinflüssen)
c) zufälligen Elementen

bestimmt wird. Bzw. sag doch bitte mal was dieses andere Element wovon unsere Handlungen abhängen, was nicht auf Maschinen abbildbar ist, sein soll. Mir persönlich fällt nichts dafür ein 😉
Die oben genannten Dinge sind nämlich alle sowohl Theoretisch schon vor langer langer Zeit (in einer weit entfernten Galaxie) von Herrn Turing in einer theoretischen Maschine (Turing-Maschine) umgesetzt, als auch praktisch in heutigen Computern absolut möglich.

Der einzige Grund warum wir noch keine solchen Maschinen/Programme haben, ist eigentlich der Umfang des Programms.
Erstens mal dieses Programm zu schreiben. KI beschäftigt sich ja viel mit dem Thema, dass sich das Programm quasi selbst schreibt durch "lernen", aber das ist ja nur der Ansatz weil man zu faul für diese Arbeit ist 😉 Es ist auf jeden Fall eine lösbare Aufgabe. In endlicher Zeit, wie man so schön sagt 😉
Zweitens die größe des Verarbeitungsvektors. Die Menge an Informationen, die über die Sinne auf uns einstürzt ist doch ziemlich enorm. Alle zu verarbeiten eine ganz schöne Leistung. Und die alle wieder zu verarbeiten... naja siehe Problem 1 😉

Und um nochmal auf den Zufall zusprechen zu kommen. Quantenphysik arbeitet viel mit Zufällen. Ein davon bestimmtes Ereignis zu zählen ist also eine sehr gute Zufallsvariable. Ein ganz einfaches Beispiel wäre:
Zähle die von einer Lampe ausgestrahlten Photonen, die durch einen polarisationsfilter kommen. Das ist mit heutigen Mitteln machbar, und die Schwingungsrichtung eines Photons (und damit das Passieren des Filters) ist völlig zufällig.

04.07.2006 - 00:11 Uhr

Mir konnte immernoch keiner schlüssig erklären, warum das eine Simulation ist. "Man simuliert also ist es eine Simulation" ist nunmal keine hinreichende erklärung. Was ist daran weniger Real, dass eine Maschine auf eine Eingabe reagiert, als ein Mensch der eine Formel löst? Simuliere ich die Matheprüfung nur, weil alles streng deterministisch ist ohne "Gefühle"?
Ich meine jede Simulation dieser Art ist genauso in die Realität übersetzbar. Wenn ich eine Maschine habe, die Gefühle simuliert, dann fehlen ja nur noch die Peripherien zur Wirklichkeit um das aus der Simulation zu lösen. Eine ziemlich triviale Zusatzbedingung wie ich meine.

Es ist nicht ausreichend zu sagen "der Computer kann nur mathematischer Logik folgen also können sie kein Bewußtsein haben". Da fehlt einfach noch das Stück "Für ein Bewußtsein ist es notwendig nicht nur mathematischer Logik zu folgen", das zu zeigen ist man bislang schuldig geblieben. Aber ohne das ist die erste Aussage einfach mal wertlos.

Ich weiß auch garnicht warum man sich hier so zurückhaltend gibt und die Position für heutige Rechner schon aufgibt. Da ist noch garnichts gezeigt, noch nichts argumentiert außer "das kann doch nicht sein". Da kann ich genauso sagen "klar kann das". Was jetzt? Diskussion beendet? Ich finde das doch etwas dürftig. Bringt mal bitte ein paar Argumente, davon ist irgendwie noch nichts zu sehen. Das macht es irgendwie schwer darüber zu diskutieren.

Neuronale Netze sind eine Datenstruktur. Die sind auf heutigen Rechnern leicht umsetzbar und keine Erfindung von Startrek.
Es gibt verschiedenste evolutionäre und "genetische" Algorithmen, die auf intuitive Weise eine Lösung hernehmen und die immer weiter durch Variation verbessern zu versuchen. Genauso wie wir an irgendeinem Problem tüfteln und "kreativ" sind.

Und jetzt bitte genauer:

  • Warum ist Bewußtsein nicht nur auf mathematischer Logik möglich?
  • Warum kann ich diese Simulation nicht in real handelnde Maschinen umsetzen?
02.07.2006 - 23:21 Uhr

Original von Dr.Cool
@herbivore: Wie sollen Maschinen aber das Empfinden von Gefühlen beigebracht werden? Natürlich kannst du das alles simulieren. Den Schmerz zum Beispiel als einen Messwert für eine destruktive Einwirkung auf das System. Aber eine Maschine kann sich diesem "Schmerz" nicht so bewusst sein, wie wir es sind. Wie soll man einem binären Datenmeer Gefühle einhauchen?

Gerade in diesem Gebiet ist das Wort Simulation völlig unangebracht.
Wenn die Maschine so gebaut ist, dass sie auf eine bestimmte Eingabe eine bestimmte Reaktion zeigt, ist das keine Simulation sondern genauso Realität wie unsere Reaktionen. Ich meine ein Roboterarm am Fließband simuliert auch nicht dass er Autos zusammen baut, er tut es wirklich.
Was rechtfertigt es denn bei Reaktionen auf "Schmerz" plötzlich von Simulation zu reden?

02.07.2006 - 22:20 Uhr

Original von Dr.Cool
Hallo,

ich bin heute durch Zufall auf einen Artikel bei Spiegel Online gestoßen (
>
).
Grob zusammengefasst wird hierbei behauptet, dass die Entstehung unserer Welt und unseres Daseins eine so komplexe Zufallskette benötigen würde, dass die Wahrscheinlichkeit, die Welt sei eine einzig große Computersimulation nicht allzu unwahrscheinlich wäre, und wir in dieser leben würden - ganz ähnlich wie im Science-Fiction Film "Matrix" gezeigt.

Dem halte ich mal das antropische Prinzip entgegen:
Wenn diese Zufälle nicht genauso eingetreten wären, würden wir uns jetzt nicht darüber wundern können, weil es uns nicht gäbe.

Kleines Beispiel: Würfel solange bis du eine 6 hast. Es ist wenig verwunderlich, dass nach dem Würfeln eine 6 zu beobachten ist.

Das ist eben der Trick beim Zufall. Die einzige echte Aussage die man aus "Es ist unwahrscheinlich" folgern kann ist "Es ist möglich".

Außerdem, wieviele Zufälle wären wohl nötig um unsere Schöpfer zu erschaffen 😁 Wir wären dann ein Teil eines größeren Systems. Und dieses größere System muss dann logischerweise noch komplexer sein als unseres. Wir könnten z.B. auch nicht unser Universum vollständig simulieren, wir müssten uns auf gewisse Teile an Regeln und Materie beschränken.

Aber zu dem Rest möchte ich noch sagen, dass es sehr wohl möglich ist ein nichtdeterministisches Programm zu schreiben. Man muss nur einfach eine "raten" Funktion einbauen. Und selbst wenn du meinst, dass die stinknormalen Random-Funktionen auch deterministisch sind gibt es da noch Mittel und Wege. Man braucht nur ein Gerät was die Zufallsvariable aus diversen Quanteneffekten berechnet. Das ist so zufällig wie etwas nur sein kann.

Außerdem steht dem ja sogar noch deine unausgesprochene Annahme im Weg. Es steht eben nicht fest, ob es überhaupt einen "freien Willen" gibt, oder ob wir nicht genauso programmiert sind wie ein Computer, und nur auf einem viel größeren und noch nicht völlig durchschauten Eingabevektor reagieren.

30.06.2006 - 16:30 Uhr

DataSource ist normalerweise eine Art Liste von Elementen die man auswählen kann.

Du setzt DataSource auf einen String. Ein String ist eine Liste von Buchstaben. Also hast du alle Buchstaben in dem String zur auswahl.

Richtig wäre, das Array der Strings als DataSource anzugeben, nicht nur einen einzigen.

ODER

Die Strings in die Items Liste der DropDownList hinzuzufügen.

29.06.2006 - 23:22 Uhr

Versuch es mal mit nem XmlDataDocument und benutz das als DataSource für ein DataGrid (ohne View). Vieleicht ist es ja das was du suchst.

Ansonsten klingt das für mich nicht gerade nach ner kleinen Aufgabe. DOM in heißt ja imo den XmlSerializer zu benutzen. Die Objekte davon dann zu visualisieren ist dann wohl ein größeres Problem, das müsstest du größtenteils selber basteln. Z.B. aus ner Kombination von TreeView (zum Auswählen der Elemente) und PropertyGrid (zum Editieren der Attribute)
Die Objekte lassen sich mit dem xsd.exe Tool im .NET SDK aus .xsd-Datein erstellen und der XmlSerializer validiert das dann ja selbstständig beim Übersetzen.

28.06.2006 - 19:59 Uhr

Ich hab von manchen Windows.Forms Problemen mit der Performance gehört, die aber nur im Debug-Modus auftreten (z.B. neu Zeichnen beim Scrollen). Vieleicht löst sich das Problem im Release auch in Luft auf.

26.06.2006 - 20:31 Uhr

Eben nicht. Durch den Wechsel der GetHashCode Funktion ist genau das passiert. Und könnte wieder passieren in der nächsten Framework Version.

26.06.2006 - 17:57 Uhr

Doch doch.
Die Funktion string->int ist eine eindeutige Abbildung. Jedem String ist genau eine Zahl zugewiesen. Sie ist nur nicht ein-eindeutig (oder injektiv wie wir Mathematiker sagen 😄)

Die meisten Hash Funktionen im System.Security Namespace liefern ein Array von Bytes zurück. Du kannst doch einfach die ersten 4 Bytes hernehmen und in einen Int umwandeln. Bzw. was vieleicht noch cleverer wäre: Du fasst je 4 Bytes des Ergebnisses zu einem Int zusammen, und führst ein XORst alle.

26.06.2006 - 17:41 Uhr

Du kannst den Code doch durch das "partial" Schlüsselwort in eine eigene Datei packen.

26.06.2006 - 14:14 Uhr

Probiers mal mit Encoding.Default.

26.06.2006 - 13:38 Uhr

Original von herbivore
Hallo Thorsten1983,

Ich denke es muss doch eine Möglichkeit geben manuell einen Dienst am Windows anzumelden bzw. zu installieren.
ServiceInstaller-Klasse

herbivore

Hast auch mal nachgeschaut was die macht?
Letztendlich liefert die Klasse nur Informationen für die "installutil.exe" im .NET Framework, die man aber immernoch extra aufrufen muss.

Ich denke du stellst dir da was anderes drunter vor.

Alternativ gibt es noch die sc.exe für NT Services (also nicht für Win98 etc)

Aber direkt im Framework enthalten ist da (imo) nichts.

25.06.2006 - 19:00 Uhr

Also wenn ich nicht ganz falsch liege wird .NET 3.0 ganz normal unter VS 2005 unterstützt wie auch .NET 2.0

Sind ja im Prinzip nur neue Bibliotheken.

Eventuell wird eine neue VS Version rauskommen, bei der diverse Code Generation Tools (wie das was jetzt für Settings, oder typisierte Datasets da ist) für das neue Zeug dabei sind. Aber ehrlich gesagt könnte ich auch darauf verzichten. Benutze das Jetzige ja schon nicht (außer den Designer).

Interessant wirds dann eigentlich erst wenn C# in ner neuen Version rauskommt.

22.06.2006 - 16:22 Uhr

Witzig, ich bin bei SharpDevelop immer damit beschäftigt ein _ reinzumachen

21.06.2006 - 17:11 Uhr

Klingt irgendwie nach dem CurrencyManager 😁

20.06.2006 - 20:42 Uhr

Original von megamacy
naja, um zu diesem fehler zu gelangen musst eich erstmal die .designer dateien entfernen und den code wieder in die cs datei stecken, den da hing sharpdev sich daran auf das die klassennamen 2mal vorhanden sind -.-

Mein SharpDevelop sagt dazu garnichts, es legt sogar selbst .design Datein an...

Das ist ja auch ein Kompiler Problem, kein SharpDevelop Problem. Der Mono Kompiler wird wohl "partial" nicht unterstützen... Habs aber nicht selbst mit Mono probiert.

20.06.2006 - 00:17 Uhr

Ja die Sorte kenn ich auch.
Erst letztens bei uns in der Mensa. Einer dieser "Linux rulez"-Typen der 3. Art ist fleißig am Schimpfen, dass Ebay zu komerziell geworden ist 😁

18.06.2006 - 22:59 Uhr

Da wunder ich mich ernsthaft nach was für einer Schnittstelle du suchst. Was für Funktionen sollen da enthalten sein?

Iterieren -> IEnumerable Generic

  • Hinzufügen, Entfernen, Count -> ICollection Generic
  • Zugriff über Index, Funktionen die Index benutzen -> IList Generic

Könntest du noch ein bisschen mehr von den "vielen kleinen Fehlgriffen" berichten?

18.06.2006 - 21:21 Uhr

Das ist doch Blödsinn. Wegen so was Minimalen so nen Aufstand loszubrechen.

Und ja, es gibt viele Pedanten.

Hat dich das mal mehr als 2 Sekunden in deiner Programmiertätigkeit aufgehalten? Vieleicht auch nur ein Zehntel so lange wie du Zeit vergeudest dich darüber aufzuregen?

Wenn jemand mit Programmieren anfängt und ne Liste braucht, wird er die ziemlich leicht finden. Im Vergleich zu "vector" z.B.

18.06.2006 - 17:11 Uhr

Original von Robert G
Die Benennung "List" für einen arraybasierten Container finde ich schlimmer als "nicht sehr gut gelungen".

Ah ja, du hast also einen besseren Gegenvorschlag? Lass mal hören 😉

Vieleicht wie in der STL "vector", der nun absolut irreführend ist?

RandomAccessCollection? 😉

15.06.2006 - 11:26 Uhr

Eine Singleton Implementation macht man doch genau deshalb, um die Methoden nicht static machen zu müssen.

Ich will damit sagen: wahrscheinlich ist eher nicht der Methodenaufruf das Problem, sondern die Definition der Methode.

13.06.2006 - 10:44 Uhr

Dann ist Unit-Test dafür nicht geeignet.
Der beruht eben darauf, dass man die Units isolieren kann, und dass man die Eingabe direkt steuert. Abhängigkeiten zu anderen Komponenten werden über Mock-Objekte simuliert und kontrolliert.
Genausowenig kann man z.B. Unit-Tests für ein GUI benutzen.

PS Inwiefern darfst du den Code nicht verändern? Um z.B. IPC nutzen zu können, musst du das Objekt ja auch erstmal darüber veröffentlichen. Dafür musst du bisschen was Coden in dem Programm, nur von Außen herein geht das nicht. Und wenn du das machen darfst/kannst, wäre doch die einfachere Lösung gleich eine Monitor-Klasse anzulegen, die direkt im Programm z.B. regelmäßig den Zustand des Objekts überprüft und ausgibt, was anderes könntest du im Unit-Test eben auch nicht machen, weil du keine direkte Kontrolle über die Eingabe hast.

13.06.2006 - 10:18 Uhr

Für einen Test mit NUnit muss das Programm prinzipiell nicht laufen.
Erzeuge die Instanz einfach in der Startup Methode. Oder erzeuge in jeder Testmethode eine Instanz.

NUnit führt nicht die Main Funktion der Assembly aus, es greift über Reflection nur auf die TestFixtures zu, erzeugt Instanzen von denen, und führt deren Tests durch. Das Programm läuft also nicht nebenher. Der Unit-Test hat eben nichts mit dem Programm zu tun, sondern isoliert die zu testenden Units völlig.

12.06.2006 - 23:02 Uhr

Original von Kostas
für die C#-ler sind wir Delphianer, Ausländer. Aber ich spreche Deine Sprache 🙂

Ausländer triffts nicht ganz... eher Heiden oder Wilde 😉

12.06.2006 - 16:38 Uhr

Original von Snowwolf3000
Naja vielleicht sollt ich mir MFC nochmal anschauen. Das sollte auch noch auf Windows 95 gut laufen. 😁 Klar kann man das 2.0 weiterverwenden, aber das kann ja auch kein Zustand sein.

.net 2.0 zu Verwenden kann kein Zustand sein, also besser etwas noch älteres benutzen 🤔

01.06.2006 - 09:36 Uhr

IM geht genauso asynchron

31.05.2006 - 19:49 Uhr

Du wirst doch dein Programm schonmal irgendwas getestet haben.

Die Frage "Wie" hast du also schon oft beantwortet, indem du es einfach gemacht hast. In nem Unit Test macht man es auch nicht anders.

Man hält sich eben dabei nur extra noch an die Regeln, die du in fast jeder Anleitung gelesen hast.

Also fang erstmal ganz einfach an und überlege, was du bisher alles schon getestet hast. Dann überlegst du wie du das gemacht hast. Du hast ne bestimmte Eingabe abgeschickt und das Ergebniss überprüft. Das ganze strukturierst du noch etwas, und du hast etwas Unit-Test-artiges. Wenn dann noch zufällig die anderen Regeln von Unit-Tests erfüllt sind (wie z.B. isoliertes Testen von Klassen, ersetze Abhängigkeiten durch Mock-Objekte), hast du nen echten Unit-Test.

Da ist kein mystisches, großes Geheimniss dahinter. Ein Unit-Test ist eben auch nur ein Test.

31.05.2006 - 17:52 Uhr

Mit Typsicherheit hat die Frage garnichts zu tun.

Das normale Vorgehen ist eigentlich ganz einfach:

Wenn die Collection nicht von außen verändert werden soll, ohne dass die Klasse was davon mitbekommt, zeige sie nicht nach außen.

Damit sind 3 von 4 Fällen abgedeckt:

  1. Du hast eine Collection die von außen nicht verändert werden soll
  2. Du hast eine Collection die bedenkenlos von außen verändert werden darf
  3. Du hast eine Collection die von außen verändert werden soll, aber du kannst die Funktionen dafür Problemlos über deine Klasse zur Verfügung stellen.

Was fehlt ist also noch:
Du hast eine Collection die von außen verändert werden soll, deine Klasse muss was davon merken, und du kannst die Funktionen dafür nicht gleich selbst zur Verfügung stellen.

Das Standardvorgehen für letzteres ist eine eigene Collection Klasse zu schreiben, die genau das tut. Braucht man aber wirklich fast nie.