Laden...

Forenbeiträge von Tachyon Ingesamt 104 Beiträge

01.06.2009 - 22:41 Uhr

Hallo JKruse,

vermutlich verwendest du für den Dialog und das Hauptfenster 2 verscheidene ViewModel-Instanzen.

Wenn dem so ist, müsstest du die ausgewählte Theme-Property des HauptFensterViewModels nochmal setzt damit auch für diese Instanz das OnPropertyChangedEvent geschmissen wird.

Gruß

15.05.2009 - 19:03 Uhr

Weiterhin kannst du in einem Int32 keine Telefonnummern speichern die mit 0 beginnen.

29.04.2009 - 22:30 Uhr

Hallo MrSparkle,

... Wenn diese Schritte uns jetzt von den Computer abgenommen werden ...){gray}

Nur weil der Computer hilft diese Informationen zu bekommen, bedeutet das nicht, dass man weniger lernen muss.

Du musst trotzdem lernen wie man z.B. das Molgewicht aus der Strukturformel eines Molekül ableitet, und dass lernt man nunmal nur indem man es anwendet. Später, in der "täglichen Arbeit" kann man dann Hilfsmittel verwenden. Aber das was in der Schule gelehrt wird, sollte meines erachtens nicht durch solche technologischen Fortschritte verändert werden.

Viele Grüße,
Tachyon

29.04.2009 - 21:58 Uhr

Donnie Darko
Pulp Fiction (Sry herbivore, aber einer der besten Filme kann nicht oft genug genannt werden ;P)
Trainspotting
Falling Down
Reservoir Dogs
American Beauty
Pi
The Big Lebowski
Requiem for a Dream
Fight Club
Adams Äpfel
Four Rooms
Fear and Loathing in Las Vegas

Was noch nicht genannt wurde:
Barry Lyndon
Wege zum Ruhm
Spun

29.04.2009 - 19:58 Uhr

Hallo waldemar,

Wieviel Dateien hast du denn in der Applikation?
Wie soll das Matching zwischen den Dateien statt finden?
Wie groß ist so eine Datei im Schnitt?

Die MD5Summe unterscheidet sich doch für unterschiedliche Dateien!?
Von daher würde die, wenn du Updates durchführen willst, schonmal als "Match"-Kriterium weg fallen . (Oder ist die MD5Summe eine Art ID die sich nicht direkt aus der Datei ergibt?)

Generell würde ich das alles in der Datenbank machen. Eine Datenbank ist doch genau dafür gedacht um schnelle Suchen, Dateneingaben usw. durchzuführen. Von daher sehe ich keinen Grund 100.000 Dateien in den Speicher zu laden um dort irgendwelche Operationen durchzuführen die die Datenbank viel besser kann 😉.

Viele Grüße,

Tachyon

22.04.2009 - 20:30 Uhr

Hallo mfe,

Ein Delegate vom Type Predicate<T> ist nicht dafür geeignet um Daten zu manipulieren.
Vielmehr ist es dafür gedacht, um zu bestimmen ob eine Bedinung für ein Objekt erfüllt ist oder nicht.

Schau dir mal Beispiele für Delegates vom Typ Action<T, ...> an. Das dürfte dir weiter helfen.

Schöne Grüße

19.04.2009 - 13:35 Uhr

Hallo gdata,

wenn das Projekt nicht zu groß ist könntest du dir mal SQLite mit dem entsprechenden Provider für .Net anschauen. Es gibt auch ein FireFox-Add-On um die Datenbank zu managen.

Das ist zwar alles recht einfach gehalten und nicht für größere Projekte gedacht. Aber ich denke als "Standalone"-Datenbank für kleine Projekte durchaus einsetzbar.

Grüße

09.04.2009 - 21:01 Uhr

Hallo Mr Evil,

  1. wie sollte ich diese "library.dll" am besten benennen ?

Das ist Geschmackssache und kommt auf den Kontext an.
Ich würde es so machen, dass alle Projekte einen kontextbezogenen Prefix bekommen. Für berufliche Projekte z.B. den Firmenname. Die Assemblies der verschiedenen Projekte würden dann beispielsweise heißen:

  • <Firmenname>.<Projekt1>.dll
  • <Firmenname>.<Projekt2>.dll
  • ...

Basisklassen, die in allen Projekten verwendet werden können, würden dann in ein Assembly namens <Firmenname>.dll kommen.

Die Benamung kann dann z.B. noch über Abteilungsnamen o.ä. verfeinert werden.

Vielleicht noch ein Vorschlag zur Organisation der Klassen in Namespaces:

Ich würde mir da ganz Konsequent das .Net-Framework zum Vorbild nehmen. Die Klassen dort sind sauber und durchgängig organisiert, da kann man sich gut dran orientieren.

Beispiele:

Alle WPF-Controls kommen nach
<Firmenname>.<Windows>.<Controls>

Alle abstrakten Controls komme nach
<Firmenname>.<Windows>.<Controls>.<Primitives>

Alle Datenklassen nach
<Firmenname>.<Data>

usw...

Ich würde sogar soweit gehen und die Controls welche in den konkreten Projekten erstellt werden in die selben Namespaces packen (Also nach dem Firmennamen nicht nochmal den Projektnamen im namespace aufführen). Das hat den Vorteil, das man alle Controls hat, sobald man <Firmenname>.<Windows>.<Controls> einbindet. Man mus nicht überlegen wo genau das gesuchte control war, und jedesmal unmengen von Namespaces einbinden. Außerdem hat man ja durch die Verwendung des .Net-Frameworks schon ein Gefühl dafür wo welche Klassen zu finden sind. Das heißt, dass man selbst (und vor allem auch andere Entwickler) sich in der Struktu schnell zurecht finden werden.

Schöne Grüße,

Tachyon

09.04.2009 - 16:35 Uhr

Das ganze MVVM-Pattern ist für mich Präsentationsschicht, ein Zugriff auf die eigentliche Businesslogik erfolgt über eine separate Schnittstelle.

Genau das ist auch mein Verständnis. Das ViewModel bildet eine Art "Wrapper" um das Model und die Businesslogik und bereitet die Daten / die Funktionalität soweit auf, dass die View damit umgehen kann.

09.04.2009 - 16:12 Uhr

Hallo meisteralex ,

zum ViewModel gehört er meiner Meinung nach auch nicht, da er keine direkte Auswirkung auf irgendwelche (business)logischen Vorgänge hat, sondern nur indirekt durch seine Aktionen auf eine Liste wirkt, welche z. B. eine Collection steuert

Wenn der "Löschbutton" Items aus einer Collection entfernt hat das imho nichts mit der View zu tun und ist ganz klar Logik welche ins ViewModel gehört. Von daher würde ich die Logik des Buttons in ein Command auslagern und dieses and den Button binden (So wie es das MVVM-Pattern vorsieht).

Sprich, der eigentliche Button gehört zur View, die Logik die ausgeführt wird wenn der Button betätigt wird gehört ins ViewModel.

Schöne Grüße,

Tachyon

06.04.2009 - 18:23 Uhr

Hallo,

der Parser kann imho auch boolsche Ausdrücke:
http://www.lundin.info/mathparser.aspx

Grüße

05.04.2009 - 22:08 Uhr

Hi,

daran kann es liegen. Versuch mal die Datei "tns<irgendwas>.ora" aus dem Verzeichnis "NETWORK/ADMIN" des 10er-Clienten in das selbe Verzeichnis des 11er-Clienten zu kopieren. (Datei und Verzeichnisnamen können auch leicht abgewandelt sein, habe keine Oracleinstallation auf diesem Rechner).

Mit "tnsping <dbserver>" kannst du dann testen ob die adresse aufgelöst werden kann.

Schöne Grüße,

Tachyon

22.03.2009 - 12:26 Uhr

Hallo pdelvo,

genau so habe ich das auch verstanden. Es ist halt nur eine Klasse von Algortihmen:

Sie zeichnen sich dadurch aus, dass sie schrittweise denjenigen Folgezustand auswählen, der zum Zeitpunkt der Wahl den größten Gewinn bzw. das beste Ergebnis verspricht (z.B. Gradientenverfahren).

Als Beispiel ist ja das Gradientenverfahren angegeben. Dafür lassen sich bestimmt auch Codebeispiele finden.

Nachtrag:
@pdelvo: Jetzt verstehe ich erstmal was du meintest... Mir ist wohl ein Fehler beim kopieren des angegebenen Links unterlaufen. (Dort stand "Greedy" als Suchwort).
Danke für den Hinweis 😉.

Schöne Grüße,

Tachyon

21.03.2009 - 21:23 Uhr

Hallo Ratz0r,

laut Wikipedia beschriebt ein Greedy-Algorithmus eine Klasse von Algorithmen.

Von daher ist es vielleicht besser nach einem konkreten Algorithmus zu suchen, der zu dieser Klasse geordnet wird.

Zum Beispiel bei Google Code Search.

@Edit: Link korrigiert

Schöne Grüße,

Tachyon

21.03.2009 - 12:18 Uhr

Hallo Taucher

Es soll auch nicht falsch verstanden werden, ich finde Microsoft nicht schlecht, jedoch finde ich dass MS den grundsätzlichen Aufbau für dummies macht. Die tiefgehenderen Sachen sind zwar ebenso vorhanden, werden aber meiner Meinung nach vernachlässigter behandelt.

Es ist jetzt nicht böse gemeint, aber ich glaube eher das du nicht verstehst was sich MS dabei gedacht hat und zwanghaft versuchst deine PHP-Welt auf ASP.NET zu übertragen.

Meine ASP.NET-Kenntnisse sind nicht besonders gut, darum kann ich inhaltllich nicht viel dazu sagen, aber ich denke das man mit den verschiedenen Events die einem pro Roundtrip zu Verfügung steht gut auskommen kann. Wenn das nicht der Fall ist, sollte man vielleicht sein Design überdenken.

Was mich zu der Schlussfolgerung bringt: ASP.NET ist weit verbreitet und wird in vielen auch sehr komplexen Webprojekten eingesetzt. Das wäre wohl kaum der Fall wenn man durch ASP.NET irgendwo (sinnlos) eingeschränkt werden würde.

Schöne Grüße, Tachyon

21.03.2009 - 00:21 Uhr

Hallo alpha_c,

geb doch jedem Neuron eine Liste vom Typ Neuron. Dann kann das jeweilige Neuron die Referenzen von allen Neuronen der nächsten Schicht (ausgenommen die Neuronen der letzten Schicht, dort wäre die Liste leer) seichern. Somit kannst du beliebig viele Schichten mit beliebig vielen Neuronen bauen (zur Laufzeit).

Die 2. Frage verstehe ich ehrlich gesagt nicht richtig.

Beispielcode solltest du hier genügend finden: Google CodeSearch

Schöne Grüße, Tachyon

18.03.2009 - 21:32 Uhr

Ich finde, das man ein Schlüsselwort auch benutzen soll. Es hat sich bestimmt jemand dabei auch Gedanken gemacht. 😁 Hoffe ich zu mindest. 🤔

Ich könnte mir vorstellen, dass die Aliasse in C# eingeführt worden sind weil es diese Schreibweise in vielen anderen Programmiersprachen (C/C++, Java, ...) auch gibt 🙂.

18.03.2009 - 20:27 Uhr

Hallo,

ich verwende immer die groß geschriebene Variante, also String, Object, Int32, Double usw..

Es sind ja schließlich Klassen (bzw. Structs) wie alle anderen auch. Warum sollte man also dort Ausnahmen machen nur weil es möglich ist.

Aber im Prinziep gebe ich meinem Vorposter recht, solang man eine Variante konsequent durchzieht ist es gleich.

Schöne Grüße

18.03.2009 - 19:37 Uhr

[...] Vielmehr basiert es auf der Interpretation jahrtausende alter Schriften, welche wiederum stark von der konkreten Religion sowie der Glaubensgemeinschaft abhängt.
Das bedeutet:

  1. Der tiefere Sinn dieser Werte kann (bzw. muss) von dem jeweiligen Menschen nicht direkt nachvollzogen werden
    So ist es aber mit allen Wertesystemen woraus ich schließe, das dieses Argument genauso für Atheisten gültig ist. (Warum darfst du nicht töten? Na, dann müsste ich ja ins Gefängnis ...)

Das man nicht töten "darf" ist kein allgemeiner Grundsatz. Ich akzeptiere aber das Gesetz, weil ich es für Sinnvoll erachte, da es die Wahrscheinlichkeit, dass ich selbst getöt werden, drastisch veringert ^^. Ich töte also nicht, weil ich verstehe das es für ein gesellschaftliches miteinander (so wie ich es mir vorstelle) sinnvoll ist - Nicht weil ich Angst habe in die Hölle zu kommen oder meinen Gott zu verärgern.
Außerdem verbinde ich das töten von Menschen mit etwas negativem... Vermutlich wegen meiner christlichen Erziehung und durch Empathie.

  1. Die Konsequenzen des eigenen Handelns müssen nur bis zu diesen Werten reflektiert werden.
    Dieses Argument gilt für den verblendeten linken Attentäter wie für den explodierenden Fundamentalisten.

Stimmt. Allein die Tatsache hebelt aber das Argument nicht aus.

  1. Die Führung einer Glaubensgemeinschaft hat die Macht (z.B. durch andere Interpretationen der religiösen Schriften) diese Werte und somit das handeln der Menschen zu beeinflussen.
    Äh ja, siehe China oder ähnliches für ein Beispiel wo das auch ohne Religiösität geschieht.

Ja und? Das halte ich für genauso verwerflich. Es gibt unzählige Beispiele wo durch solche Strukturen Macht über Menschen erlangt wurde. Genau das ist es was ich anprangere. Der einzige Weg immun gegen so eine Art der Beeinflussing zu sein ist, eigenständig zu denken und Dinge zu hinterfragen um so ein logisches und in sich konsistentes Bild zu erlangen welches unabhängig von irgendwelchen Dogmen (oder Proaganda) ist.

Schöne Grüße, Tachyon

Edit:
Sry, habe die Mahnung erst grade gelesen. Da ich vermute das auch ich damit gemeint bin werde ich mich ab jetzt zurückhalten.

18.03.2009 - 12:51 Uhr

Wenn jeder einzelne dieser Attentäter eine Beziehung zum einzig wahren Gott hätte, dann würde es solche Anschläge nicht geben, sondern wir würden in Frieden miteinander leben können.

Solche religiös motivierten Anschläge passieren doch aus dem religiösen Glauben heraus.
Kein rational denkender Mensch würde sein Leben für die Hoffnung opfern, im Jenseits mit Jungfrauen überschüttet zu werden. Solche Handlungen sind die direkte Konsequenz von religiösem (Irr)Glauben. Klar kann man sagen - Die Leute haben an den falschen Gott geglaubt. Das löst aber nicht das eigentliche Problem. Das Problem ist nämlich, dass das Wertesystem, welches auf religiöser Basis vermittelt wird, nicht direkt aus dem Ziel heraus generiert wird eine friedliebende Weltgesellschaft zu werden. Vielmehr basiert es auf der Interpretation jahrtausende alter Schriften, welche wiederum stark von der konkreten Religion sowie der Glaubensgemeinschaft abhängt.
Das bedeutet:

  1. Der tiefere Sinn dieser Werte kann (bzw. muss) von dem jeweiligen Menschen nicht direkt nachvollzogen werden
  2. Die Konsequenzen des eigenen Handelns müssen nur bis zu diesen Werten reflektiert werden.
  3. Die Führung einer Glaubensgemeinschaft hat die Macht (z.B. durch andere Interpretationen der religiösen Schriften) diese Werte und somit das handeln der Menschen zu beeinflussen.

Aus diesen Gründen sollte ein zeitgemäßes Weltbild imho keine dogmatischen Grundannahmen beinhalten (das ist bei religiößen Weltbildern immer der Fall).

Und genau darum finde ich die Kampagne auch gut - Immerhin hat sie diese spannende, wenn auch stark polarisierende, Diskussion hervorgebracht 😃.

Grüße, Tachyon

17.03.2009 - 22:53 Uhr

Hallo,

ich finde die Kampagne gut. Es geht ja nicht darum Geld sinnlos aus dem Fenster zu schmeißen... Es geht darum ein rationales und zeitgemäßes Weltbild zu vermitteln. Was ist daran verkehrt? Die Kirche gibt um einiges mehr an Gelder aus um ihr Weltbild zu verbreiten.

Das "Problem" ist halt, dass die meisten Menschen von klein auf mit einer christlichen (oder allgemein religiösen) Weltanschaung konditioniert werden - Und zwar ausschließlich aus traditionellen Gründen. Das ist in den meisten Fällen nichts schlimmes und kann ja auch helfen gewisse Werte zu transportieren (Allerdings nicht aus Einsicht, sondern wie gesagt durch Konditionierung). Es kann aber auch Misbraucht werden - Man denke nur an den 11.9, wo irgendwelche Vollidioten getrieben durch die Vorstellung nach Ihrem Tot hunderte von Jungfrauen zu bekommen, ins WTC geflogen sind.

Meiner Meinung nach besteht die einzige Daseinsberechtung der Religion in ihrem Dasein gepaart mit der Tasache das jeder Mensch ein Recht hat, an das zu glauben, was er will. Von daher finde ich jede Kampagnie, welche die Anzahl letztgenannterer veringern Sinnvoll.

Nur um Missverständnisse zu beseitigen: Ich würde mir niemals anmaßen einen Menschen daran zu beurteilen ob er sich für oder gegen den Glauben entschieden hat. Das ist eine Sache die jeder für sich ausmachen muss und sollte in jedem Fall respektiert werden. Ich bin aber trotzdem der Meinung, dass es gesellschaftlich vorteilhafter ist, wenn sich in Zukunft ein auf Vernunft und Wissenschaft basiertes Weltbild durchsetzt. -> Aufklärung 👍

Siehe auch: Giordano-Bruno-Stiftung.de

Grüße, Tachyon

16.03.2009 - 12:37 Uhr

Hallo Knackes,

Im Interface selbst darf das Event nur deklariert werden. Die Implementierung selbst erfolgt dann in der Klasse die das Interface implementiert.

Wie gesagt, wenn du gemeinsame Funktionalität hast kannst du anstelle der Interfaces auch eine abstrakte Basisklasse verwenden. Das hat den Vorteil das du die "gemeinsamme" Funktionalität nicht doppelt implementieren musst.

Implementierung im Interface:


// Deklaration der Event-Property.
event EventHandler<AnyEventArgs> AnyEvent;

Implementierung in der Klasse die das Interface implementiert:


// Deklaration des events
private event EventHandler<AnyEventArgs> myAnyEvent;

[...]

// Implementierung der Event-Property
public EventHandler<AnyEventArgs> AnyEvent
{
  add
  {
    this.myAnyEvent += value;
  }
  remove
  {
    this.myAnyEvent -= value;
  }
}


// Edit: Fehler im Codebeispiel behoben

16.03.2009 - 09:07 Uhr

entity framework learning guide.pdf

Das "Buch" ist auch irgendwo hier im Forum verlinkt. Finde die Stelle aber momentan nicht.

Grüße

14.03.2009 - 13:55 Uhr

verwendetes Datenbanksystem: MSSQL, PostgreSQL

Hallo Zusammen,

für Postgresql gibt es eine Erweiterung die einen so genannten GiST (Generalized Search Tree)-Index implementiert. Dieser ermöglicht es für einen benutzerdefinierten Datentypen einen benutzerdefinierten Index zu erstellen.

Der benutzerspezifische Teil des Indexes ist der Aufbau des Schlüssels (Dieser muss kein integer mehr sein wie es laut dem obigen Artikel im B-Tree der Fall ist), sowie einige Methoden die implementiert werden müssen damit die GiST-Erweiterung weiß, wie Sie mit den Schlüsseln umzugehen hat.

Alles andere (Die Suche selbst, das ganze Caching usw...) wird von der GiST-Erweiterung zur Verfügung gestellt und brauch vom Entwickler nicht verstanden werden ^^.

Meine Frage ist nun, gibt es so etwas ähnlich auch für den MS-SQL-Server? Also die Möglichkeit Indices benutzerspezifisch zu erweitern ohne mit den Datenbankinterna vertraut zu sein.
Für Oracle gibt es den Domainindex der Erweiterungen ermöglicht (ka wie es dort funktioniert), aber für den MS-SQL-Server habe ich kein Equivalent gefunden.

Schöne Grüße,

Tachyon

13.03.2009 - 18:47 Uhr

Hallo,

in folgendem Artikel wird die Funktionsweise der optionalen Parameter beschrieben, wie auch Vor- und Nachteile im Vergleich zu Überladungen diskutiert.

Optionale Parameter

Anscheinend werden optionale Parameter nicht über die automatische Generierung von Überladungen realisiert (Was auch ein Problem bei mehreren optionalen Folgeparametern des selben Typs wäre).

Statt dessen werden die Werte vom Compiler zu Begin der Methode gesetzt (Wenn ich das richtig verstanden habe).

Dieser C#-Code:


private void Test([Optional, DefaultParameterValue(12)] int i)
{
}

würde dann zu folgendem IL-Code werden:


.method private hidebysig instance void Test([opt] int32 i) cil managed 
{
    .param [1] = int32(0x0000000C)
    .maxstack 8
    L_0000: nop
    L_0001: ret
}

Grüße

13.03.2009 - 17:55 Uhr

Ich verstehe die Problemstellung nicht.

Was für Funktionalitäten stellen die 3 erwähnten Klassen denn zur Verfügung, wo sind die Gemeinsamkeiten, wo sind die Unterschiede?

Edit:

Vielleicht ganz allgemein:

Die Basisklasse stellt ja gemeinsamme Funktionalität zur Verfügung und bietet die Möglichkeit abstrakte Member zu definieren, die dann von den Speziellen Klassen implementiert werden müssen.

Diese abstrakten Member können auch schon in der Basisklasse verwendet werde.

Das heißt, wenn du spezielle Funktionen hast, deklarierst du diese über abstrakte Methoden in der Basisklasse und implementierst sie in den speziellen Klassen.

Somit kannst du dann unterschiedliche Instanzen vom Typ der Basisklasse erstellen (über die speziellen Klassen) die jeweils anderen Code ausführen.

13.03.2009 - 17:49 Uhr

Hallo,

Wenn die Klasse ComZMD31015 den "Gemeinsammen" Code enthält solltest du vielleicht einfach diese Klasse als Basiklasse verwenden g.

Grüße, Tachyon

13.03.2009 - 17:13 Uhr

Hallo

Vielleicht hilft dir folgender Artikel indirekt weiter: Schau in die Doku! - Möglichkeiten der Informationsgewinnung

Grüße

13.03.2009 - 15:05 Uhr

Hallo nochmal 😃.

Wenn dein DatenContainer eine DataTable ist kannst du dort Änderungen mit RejectChanges () rückgängig machen.

Grüße

13.03.2009 - 14:54 Uhr

Hallo sl3dg3hamm3r,

was spricht denn gegen das SelectedValueChanged-Event der ListBox?

Mal davon abgesehen, wieso willst du die Änderung verwerfen wenn der Benutzer ein anderes Item auswählt? Die Eingabe sollte doch über DataBinding direkt in deinem Datenmodel gespeichert werden. Diese dauernden MsgBoxen fände ich als Anwender vermutlich etwas nervig ^^.

Schöne grüße,

Tachyon

13.03.2009 - 11:12 Uhr

Hallo Uwe,

Hallo!
Die Methoden, deren gewünschtes Verhalten von AutoSelectIndex abhängen, muss ich sowieso getrennt testen.

Alle anderen Tests würde ich gerne für beide möglichen Werte von AutoSelectIndex ausführen.
Uwe

Ich verstehe nicht ganz warum du die Methoden, die nicht von AutoSelectIndex abhängen für verschiedenen AutoSelectIndex-Werte testen willst. Oder geht es dir darum zu schauen ob die Methoden tatsächlich nicht durch den Wert beeinflusst werden?

Ich bin mir nicht ganz sicher ob ich dich richtig verstanden habe, aber evt. könnte folgender Ansatz dir helfen:

Du packst den Test mit allen Methoden in eine abstrakte Klasse mit der abstrakten Property "AutoSelectIndex". Diese Property verwendest du wie gewohnt in den Tests. Dann überschreibt du die Klasse 2 mal und gibt in der Property einmal den Wert true, und einmal false zurück.

Schöne Grüße, Tachyon

12.03.2009 - 19:36 Uhr

Ja.. alles schön und gut. Und was wird jetzt aus dem Projekt? ^^

@ Richter: Wenn ich das richtig mitbekommen habe bastelst du grade an einem 4-Gewinnt-Computer. Wie wäre es wenn man zum Anfang einen generische Alpha-Beta-Suchalgorithmus implementieren.

Den könnte ich dann auch für mein Schachprogramm verwenden das schon seit Monaten brach liegt g.

Vielleicht wäre das dann auch die erste Komponente für ein Framework das man sukzessiv weiter ausbauen kann 😉.

Schöne Grüße

12.03.2009 - 16:29 Uhr

Hallo Richter,

Grob gesagt schlägst du also eine rekursive Suche auf den Handlungsraum bestimmter Objekte vor, wobei die möglichen Handlungen implementiert werden müssen und das Abbruchkriterium der gesuchte Zustand ist!? Sprich, der Baum muss komplett bis zum Ende durchsucht werden.

(Korrigier mich bitte wenn ich da etwas falsch verstanden habe.)

Dir ist aber bewusst das selbst so "Spielzeugprobleme" (Wie du sie nennst) wie Schach mit der Methodik nich in absehbarer Zeit gelöst werden können. Das "Intelligente" an Schachprogrammen ist ja die Bewerungsfunktion der entsprechenden Spielstellung, wodurch der Suchbaum nur bin in eine bestimmte Tiefe durchsucht werden muss.

So einem Bruteforce-Ansatz wie du ihn beschreibst ist meiner Meinung nach kein Ansatz der für reale Probleme verwendet werden kann, weil die Anzahl der Möglichkeiten mit steigener Anzahl von Objekten und Handlungen sowas von überdimensional schnell ansteigt das die Geschwindigkeit der Computer nicht ausreicht um diese Möglichkeiten durchzugehen (Auch zukünftig nicht).

Schöne Grüße

12.03.2009 - 13:12 Uhr

Hallo

@herbivore

Ja, das kann ich mir eigentlich auch nur vorstellen.

Aber in dem Artikel wird ja beschrieben, dass der Detailreichtum der Antworten sogar eingeschränkt werden muss um den Durchschnittsbenutzer nicht zu überfordern ^^.

Von daher gehe ich mal davon aus, dass die Funktionalität über das Abfragen solch "einfaches" Faktenwissen hinausgeht.

@ zommi

Die Entwickeln das ja nur um bei Wer-Wird-Millionär als Telefonjoker blitzschnell die Antwort zu finden.
So kriegen Sie dann wieder die Entwicklungskosten rein 😉

Dann müssten sie aber ziemlich häufig gewinnen... ^^

Bei den erwähnten 100 Mitarbeitern mit einem angenommenen Jahresgehalt von 100.000 € (was sicherlich untertrieben ist) Wäre man schon bei 10. Millionen € p.a allein für Mitarbeiterkosten. Dazukommen noch Gebäude-, Verwaltungs- und Infratruktur-Kosten... Ich weiß nicht ob man das über Wer-Wird-Millionär wieder rein holt g.

Grüße

12.03.2009 - 12:39 Uhr

Hallo

Bei Klassen im allgemeinen würde ich nicht unbedingt einen gesonderten Prefix vergeben. Und wenn doch, dann projekt-, abteilungs- oder firmenbezogen auf Basisklassen.

Angenommen du benutzt in deinem Projekt (IrgendEinProjekt) verscheidene Basisklassen für Controls oder Datenklassen usw. - Dann könnte man die imho IepButton, IpeTextBox oder IpeData nennen. Für die speziellen Klassen würde ich wie gesagt keine Prefixe verwenden.

Genau um solche Abkürzungen und Präfixe zu vermeiden gibt es Namensräume (:::

@ JuyJuka
Klar, sinnvolle Namensräume sollte man natürlich zusätzlich wählen. Ich meinte aber Basis-Klassen die Projektweit verwendet werden. Erstellt man zum Beipspiel einen Button der Basisfunktionalität enthät wird man den trotzdem nicht Button nennen. Man kann ihm auch kein speziellen namen geben, da es eine Basis-Button ist. Möglichkeiten wären BaseButton, ButtonBase (oder sonstiges...) oder halt einen Projektspezifisches Prefix. Das habe ich gemeint.

Aber es geht ja sowieso um die Benennung von Instanzvariablen, von daher.

Dort gebe ich Controls übrigens auch nen Prefix. Das hat den Vorteil, dass Controls die logisch zusammen gehören (z.B. Ein Lable + eine TextBox) den selben Namen haben können (Beispiel: myTbName, myLblName).

Grüße

11.03.2009 - 23:16 Uhr

Hallo,

Meinst du die Namen von Klassen oder von Klassenvaribalen (Weil du die Prefixe klein geschrieben hast)?

Klassenvariablen würde ich durchgängig einen Prefix geben (z.B. my*).

Bei Klassen im allgemeinen würde ich nicht unbedingt einen gesonderten Prefix vergeben. Und wenn doch, dann projekt-, abteilungs- oder firmenbezogen auf Basisklassen.

Angenommen du benutzt in deinem Projekt (IrgendEinProjekt) verscheidene Basisklassen für Controls oder Datenklassen usw. - Dann könnte man die imho IepButton, IpeTextBox oder IpeData nennen. Für die speziellen Klassen würde ich wie gesagt keine Prefixe verwenden.

Grüße

11.03.2009 - 22:35 Uhr

C# unterstürtzt auch ein Konzept namens Überladung - Das sollte in dem Zusammenhang vielleicht auch nochmal erwähnt werden.

11.03.2009 - 22:24 Uhr

Da bin ich mal gespannt.

Wie moderne Suchmaschine funktioniert kann man ja zumindest entfernt noch nachvollziehen (Indizierung + Bewertungssystem).

Aber WolframAlpha müsste ja den Sinn einer Frage extrahieren könne um darauf eine Antwort zu liefern. Mal sehen wie weit man da gehen kann.

Antworten auf Fragen wie "Wie funktioniert ein Dieselmotor?" kann ich mir ja noch vorstellen.
Aber was ist zum Beispiel mit "Warum funktioniert ein Dieselmotor nicht mehr wenn man Bauteil xy entfernt?"

Wahrscheinlich stößt man da schnell auf Grenzen... Naja, ist auf jeden Fall spannend.

Grüße

11.03.2009 - 21:32 Uhr

Hallo zusammen,

Denn ob ein Computer aus Proteinen oder Silicium aufgebaut ist, dürfte egal sein.

Naja, so ganz egal ist das nicht. Das Gehirn ist ganz anders aufgebaut als der Computer. Während Computer die Informationen sequenziell verarbeiten, arbeitet das Gehirn hochgradig parallel. Daher kann es mit anderen Algorithmen die Daten viel effizienter verabreiten.

Mal abgesehen von der ungleichen "Hardwarearchitektur"... Selbst wenn es gelingt ein Gehirn komplett zu simulieren (So ein Projekt gibt es übrigens für einen Teil des Gehirns: Blue Brain Project) ist nicht sicher ob daraus Intelligenz erzeugt werden kann. Wir wissen ja noch garnicht wie unsere Intelligenz / unser Bewustsein entsteht... vielleicht bedarf es dafür viel mehr als die Simulation auf neuronaler oder sogar atomarer Ebene bzw. Vielleicht kann es nicht simuliert werden weil die materiellen Gegebenheiten des Gehirns vorhanden sein müssen.

"Dem Geist sind keine Grenzen gesetzt außer denen, die wir als solche anerkennen."

Ist dem so? Dann versuch mal bitte dir Kraft deines Geistes einen 4 dimensionalen Würfel vorzustellen... Dann wirst du dessen Grenzen schnell kennen lernen ^^.

Unser Geist ist sehr wohl beschränkt, genauso wie der Geist eines Affens oder einer Maus beschränkt ist - Nur auf einem anderen Nivau.

Es ist also noch garnicht bekannt ob wir überhaupt in der Lage sind die funktionsweise unserer Intelligenz zu begreifen (So wie ein Affe nicht in der Lage ist die 3. Wurzel aus 9 zu berechnen). Dieser Umstand unterscheidet die Suche nach einer zu useren Vergleichbaren Intelligenz von der Lösung der bereits gelösten Probleme (Wie das fliegen).

@Richter:
Dein Engagement und Ehrgeiz in allen Ehren.. aber ich denke um dieses Problem zu lösen bedarf es zusätzlich sehr viel Zeit, Wissen sowie ein sehr hohes maß an Intelligenz. Wenn du dir tatsächlich vorgenommen hast das Problem anzugehen solltest du deine Zeit vielleicht lieber mit lesen verbringen anstelle irgendwelche belanglosen Beiträge zu schreiben ^^ (ist nicht böse gemeint).

Grüße

07.03.2009 - 00:41 Uhr

Hi,

Wie groß ist denn die Datenmenge die du abfragst?

Auch wenn es höchst wahrscheinlich am Netzwerktraffic liegt könnte man das nochmal testen indem man sich z.B. nur die IDs holt - Das sollte dann ja um einiges zügiger gehen.

btw:
DbCommand- und DbReader-Objekte sollten nach Verwendung Disposed werden. ;P
(Falls du den Befehl nicht nur übersichtshalber einzeilig gemacht hast)

Grüße

07.03.2009 - 00:24 Uhr

Hallo,

wenn du es umständlich magst könntest du die Information sogar in einem UInt64 ablegen.

Ich gehe davon aus das dein Spielfeld 6 Reihen und 7 Spalten hat.

Das heist, für jede Spalte würden 9 Bits Information zur Verfügung stehen.
Wenn du nun die ersten 6 Bits verwendest um die Farbe (0 = Rot, 1 = Schwarz) für jede Reihe zu speichern (nicht belegte Reihen sind 0) bleiben noch 3 Bits übrig.

Die 3 Bits kannst du verwenden um zu speichern wieviele Steine in der entsprechenden Spalte vorhanden sind ^^.

Grüße

06.03.2009 - 23:54 Uhr

Hallo,

Hast du den zu verschlüsselnden String zuvor in das Base64-Format convertiert?
Siehe auch: click

Grüße

02.03.2009 - 22:49 Uhr

Hallo

Das ist so wie der unterschied zwischen einer Fachhochschule und einer Universität. Die auf der Fachhohschule bekommen alles fertig zum auswendiglernen vorgekaut. An der Universität wird einem erklärt wie es hergeleitet wird. Was ich brauche ist eine Anleitung wie an der Universität. Ich will wissen wie das ganze vom grund auf funktioniert, damit ich selber mehr einfluss habe.

Wie das ganze von Grund auf aufgebaut ist kannst du dir mit dem .Net Reflector anschauen. Ich glaube die meisten WinForm-Controls sind nur gewrappte MCF-Controls.
Von daher ist es imho schon gut dass man grade nicht verstehen muss wie die intern funktionieren ^^.

Wenn die Controls der .Net-Library nicht das richtige sind kann man ja jederzeit ein eigenes (von Control abgeleitetes) Control erstellen. Damit hast du dann alle Freiheiten, kannst pinseln wie du lustig bist und dein Eventhandling selbst implementieren. Wie man das am besten macht steht in diversen Büchern + natürlich im Internet 😃.

Ich finde deinen FH-UNI-Vergleich übrigens ziemlich Blödsinnig!

Grüße

23.02.2009 - 14:55 Uhr

Hallo Lecor,

Danke für deine schnelle Antwort.

Ich bin mir ziemlich sicher das in meinem Fall eine neue Instanze angelegt wird.

  1. Unterscheiden sich die Hashwerte der RichTextBox-Instancen vor und nach dem Tabwechsel.
  2. Habe habe ich mir die Anzahl der RichTextBox-Instanzen mit dem .Net Memory Profiler angeschaut. Bei jedem Tabwechesl wird diese um 1 erhöht.

In meinem Fall wird auch nicht auf die Events reagiert, weil ich das M-V-VM-Pattern verwende und versuche auf CodeBehind-Code zu verzichten.

Achso.. Ich verwende eine DataTemplate um zu definieren welche View (XAML-Datei) mit welchem ViewModel (C#-Datei welche die Daten und Commands beinhaltet) verknüpft werden soll. Als DataSource des TabControls dient die ViewModel-Collection.

Das heißt, wenn man die TabPage öffnet, will WPF das ViewModel rendern, schaut welche XAML-Datei er verwenden muss und initialisiert die Controls dementsprechend neu.

... Danke für den Denkanstoß. Wenn ich ne passende Lösung gefunden habe poste ich sie hier.

[Edit]
So, ich habe jetzt die RichTextBox in dem ViewModel instanziert und über eine Property zugänglich gemacht. Diese Property kann per DataBinding an die Conten-Property des ScrollViewers (welcher in XAML definiert ist) gebunden werden. Funktioniert einwandfrei 😃.

Auch wenn win Control im ViewModel eigentlich nichts zu suchen hat bervorzuge ich die Lösung.
A) Sie ist am performantesten und ich muss nicht auf irgendwelche Ereignisse reagieren
B) Im ViewModel muss sowieso auf die RichtTextBox zugegriffen werden um den Inhalt zu aktualisieren (Wie gesagt, DataBinding wird nicht unterstützt).
[/Edit]

Gruß, Tachyon

23.02.2009 - 14:06 Uhr

Hallo,

mir ist vorhin folgendes Verhalten aufgefallen:

Erstellt man ein Window mit 2 TabPages (+ Inhalt auf den TabPages) und wecheslt von TabPage1 zu Tabpage2 und zurück werden alle Controls auf TabPage1 neu instanziert oO.

Die Controls sind in meinem Fall alle in XAML deklariert und werden fast ausschließlich per Databinding gefüllt. Eine Ausnahme ist das RichTextbox-Control welches kein DataBinding unterstützt (Die Document-Property der RichTextBox ist keine Dependency Property). Das heißt, es muss programmatisch aktualisiert werden.

Also durchsuche ich den gesamten Element-Tree (Mittels VisualTreeHelper) und speicher die Referenz auf die RichTextBox um nicht jedes mal den gesamten Baum durchsuchen zu müssen. Da sie aber bei jedem Tabwechsel neu initialisiert wird müsste man entweder die korrekte Instanz jedes mal suchen, oder auf den Tabwechsel reagieren.

Allerdings gefällt mir irgendwie keine der Lösungen - Die Suche ist zu lahm und auf Events würde ich gerne verzichten.

Daher meine Fragen:

Warum instanziert WPF die Elemente jedes mal neu?
Kann man das irgendwie umgehen?
Gibt es eine Alternative zur rekursiven Suche um an Controls zu gelangen die nur in XAML definiert sind?
Fällt euch eine weiter Lösung für das Problem ein (Vielleicht gehe ich das ja auch komplett falsch an)?

Vielen Dank im Voraus.

Gruß, Tachyon

21.02.2009 - 10:55 Uhr

Hi,

schau dir mal die CollectionView-Klasse an. Diese bietet die Möglichkeit Collections zu sortieren, filtern und grupieren.

Gruß, Tachyon

19.02.2009 - 15:11 Uhr

Welche Controls angezeigt werden könnte man über die Einstellungen konfigurierbar machen. So wie man bestimmte ToolBars in VisualStudio ein- und ausblenden kann.

Falls die Kunden unterschiedliche Layouts haben wollen könnte man das über verschiedene XAML-Dateien realisieren. Es wäre sogar möglich diese in der Datenbank zu speichern und je nach Anmeldeinformation die entsprechende XAML-Datei zu laden.

Das erstellen der XAML-Dateien ist aber imho Aufgabe des Entwicklers.

Wenn 20 Kunden jede Woche ihre Controls woanders haben wollen macht es vielleicht Sinn den Kunden das Layout zu überlassen, aber vom Gefühl her würde ich behaupten, dass es weniger Arbeit ist die Wünsche des Kunden anzuhören und diese dann anzupassen (Wenns ums Layout geht ist das ja mit WPF schnell gemacht) als ein Control zu entwerfen welches vom Kunden angepasst werden kann.

Gruß, Tachyon

19.02.2009 - 13:55 Uhr

Man muss am Binding UpdateSourceTrigger=PropertyChanged setzten.

<Code>
<TextBox Text="{Binding Path=Name, UpdateSourceTrigger=PropertyChanged}" />

</Code>

19.02.2009 - 13:05 Uhr

Hi Davatar

Folgende Link enthält Beispielcode in dem etwas ähnliches gemacht wird:

http://apress.com/resource/bookfile/3941

Chapter14 -> VisualLayer.

Vielleicht hilft dir das.

Nur so aus Interesse, willlst du einen Designer basteln, oder soll der Endanwender in der lage sein sich die GUI so anzuordnen wie er will? Den Nutzen von letztgenannten sehe ich nämlich nicht ganz.

Grüße, Tachyon

19.02.2009 - 12:36 Uhr

Hallo zusammen.

Folgendes Scenario:

Ein UserControl enthält 2 TextBoxen (TbName und TbEmail) und einen Button.

Eine DatenKlasse enthält 3 Properties (Name, Email, IsValid). Außerdem implementiert die Datenklasse INotifyPropertyChanged.

Die Properties Name und Email werden an die Text-Eigeschaften der Textfelder gebunden, IsValid an die IsEnabled-Eigenschaft des Buttons.

In der OnPropertyChanged-Methode wird nun geprüft ob der neue Wert für Name / Email valide sind und die IsValid-Property dementsprechend gesetzt.

Das funktioniert auch relativ gut - Mein Problem ist allerdings, dass der Name bzw. Die Email-Adresse dem Datenobjekt erst beim verlassen der Textbox zugewiesen werden.

Ist es möglich dem DataBinding zu sagen das es die Properties bei jeder Textänderung zuweisen soll?

Danke im voraus.

Gruß, Tachyon