Laden...

Forenbeiträge von gespannter_Bogen Ingesamt 40 Beiträge

08.06.2009 - 11:13 Uhr

Hallo

Die Geschichte mit dem Timer und der Dispose - Methode, die man am Schluss aufrufen soll, um sicherzugehen, dass der Timer vom GC nicht vorzeitig abgeräumt wird, habe ich, soweit ich mich erinnere, auch in dem schönen Buch von Jeffrey Richter: " Microsoft.net Framework-Programmieung in C#" (Microsoft Press) gelesen. Leider finde ich die Seite nicht mehr, auf der das stand.
Jedenfalls habe ich, um sicherzugehen, dass während der Laufzeit einer Form die von ihr aufgerufenen Objekte auch bis zum Entladen der Form existieren, einer ganzen Reihe von Objekten Dispose spendiert, das dann letztlich von Form.Dispose aufgerufen wird.
Bisher war ich mir nie sicher, ob das wirklich erforderlich ist.

Jürgen

03.04.2009 - 12:13 Uhr

Hallo

Nach langer Zeit habe ich es nun endlich geschafft, mein ursprüngliches VB 6.0-Programm vollständig in C# zu übertragen. Mein Programm hat 16 Hauptformulare, die vom Benutzer aufgerufen werden können, dazu 8 Formulare zum ‚Einstellen’, die ich allein als Hintergrundbenutzer aufrufen kann. 22 Briefe bzw. Formulare oder Auswertprotokolle können mit dem Programm ausgedruckt werden. Es werkeln Objekte aus ca. 510 Klassen, 8477 mal gibt es eine öffnende Klammer im Code.
Angefangen mit der Programm - Übertragung habe ich im Dezember 2003. Da ich rein in der Freizeit programmiere und hauptberuflich normalerweise einen mehr als Vollzeit-Job habe, kann man davon ausgehen, dass ich durchschnittlich pro Tag ungefähr eine Stunde dazu komme, mich vor den PC zu setzen, um zu programmieren. So gerechnet, wäre das ein Aufwand von ungefähr 2000 Stunden gewesen. Ich kann nicht beurteilen, ob das viel ist oder wenig, die gesamte Zeitspanne von über 5 Jahren empfinde ich aber doch als ganz schön lang. Sicher habe ich in dieser Zeit auch Funktionalität verändert und hinzugefügt, teils aus Notwendigkeit, weil sich gesetzliche Vorgaben verändert haben, teils ergab sich manches, was ich eigentlich schon immer implementieren wollte, nach Refactoring fast wie von selbst. Mein Hauptaugenmerk in dieser Zeit lag aber sozusagen im reinen Refactoring ohne nach aussen sichtbaren Produktivitätserfolgen. Das ist nett, wenn es darum geht, neue Fertigkeiten zu lernen, manchmal konnte es aber auch ziemlich ätzend sein.
Insgesamt war es für mich eine Arbeit nach der Art: „alter Mann versetzt Berge“, nämlich ganz langsam, Stein für Stein. Nur dass die helfenden Riesen, die die Berge dann forttrugen ausgeblieben sind. Obwohl, ein wenig Hilfe habe ich schon gehabt: Zum einen ist zu nennen die Lektüre des wunderschönen Refactoring-Buches von Martin Fowler, zum anderen Tipps und Tricks aus dem Internet, vor allem aus dem Forum hier. Dafür allen, die so eifrig posten ein herzliches Dankeschön.

viele Grüße

Jürgen

12.02.2009 - 16:49 Uhr

Sucht mal im Internet unter 'energiegewinnung wüste', bzw. unter: 'Desertec'.
z.B.: http://www.desertec.org/de/

Was haltet Ihr davon?

Hier ein kleiner - spekulativer - Zusatz:
Statt den Strom über Netze zu leiten könnte man auch in der Wüste Wasserstoff herstellen und den per Schiff transportieren, was allerdings nicht ungefährlich ist. Alternativ könnte man aus Energie, Wasserstoff und CO2 Kohlenwasserstoffe herstellen und die dann transportieren. Auf dem Rückweg könnten die Schiffe das CO2 mitnehmen, das zuvor aus der Abluft der Kraftwerke aufgefangen wurde.

viele Grüße

09.02.2009 - 16:57 Uhr

Tatsächlich werden Alphastrahlen schon durch sehr geringe Barrieren abgeschirmt. Das ist richtig. Wenn aber Alphastrahler in den Körper aufgenommen werden, dann können sie dort ihre, dann eben auch extrem toxische weil krebserzeugende Wirkung entfalten. Für die Aufnahme in den menschlichen Körper braucht es keinen gasförmigen Zustand, das geht genauso, wenn Plutonium in Form von Staub bzw. Schwebestaub vorliegt. Ich denke nicht, dass bei einem Normalbetrieb von AKWs Alphastrahler in die Umwelt freigesetzt werden. Anders ist es möglicherweise bei Wiederaufbereitungsanlagen wie in La Hague oder Sellafield, wobei es sich da auch um Störfälle gehandelt haben kann. Auch bei dem GAU in Tschernobyl ist Plutonium frei geworden.

Auch im Normalfall werden aber von AKWs Radionuklide an die Umwelt abgegeben, siehe z.B.: http://www.umwelt.niedersachsen.de/master/C747088_N753125_L20_D0_I598.html
Dort heisst es u.a.:
"Die Ableitungen von Tritium (H-3) Abb. 4 und Kohlenstoff -14 (C-14) Abb. 5 liegen ebenfalls erheblich unter den Genehmigungswerten und sind für die Strahlenbelastung in der Umgebung der Kernkraftwerke von geringer Bedeutung; sie werden in Quartalsabständen ermittelt."

viele Grüsse

09.02.2009 - 13:21 Uhr

Es ist nicht, bzw. kaum die physikalisch messbare Strahlung, die vom Kraftwerk aus auf die Menschen wirkt, diese ist geringer, als die natürlich vorkommende Strahlung. Es sind die Radionuklide, wie z.B. schweres Wasser, die von Kernkraftwerken an die Umwelt abgegeben werden. Diese spielen bei der physikalischen Messung kaum eine Rolle, wenn sie alpha- oder beta-Strahler sind, da sie dann nur eine geringe Reichweite haben und leicht abschirmbar sind.
Ganz anders ist es jedoch, wenn diese Teilchen vom Menschen aufgenommen werden, dann können sie ihre schädigende, krebserregende Wirkung unmittelbar im Gewebe entfalten. Menschen werden davon, je nach Alter völlig unterschiedlich getroffen. Am schlimmsten trifft es die noch nicht geborenen Kinder im Mutterleib, weshalb jemand, der z.B. aus medizinischen Gründen Radionuklide erhalten hat, sich für eine gewisse Zeit unbedingt von Schwangeren fernhalten muss.
Wenn also von Kernkraftwerken über Abluft oder Abwasser Radionuklide an die Umwelt abgegeben werden, verwundert es nicht, dass in der Umgebung von Kernkraftwerken eine erhöhte Leukämierate bei Kindern gefunden wird.

Was den Müll betrifft:
Beim Betrieb von AKWs wird Plutonium erzeugt. Ein Stoff, den es natürlich vorkommend auf der Erde so gut wie nicht gibt. Plutonium ist als alpha-Strahler in Bezug auf die Krebsentstehung extrem toxisch. Ein Millionstel Gramm kann Lungenkrebs erzeugen (wobei Raucher 90x so stark betroffen sind).
Das häufigste Plutonium-Isotop hat eine Halbwertszeit von ca. 24000 Jahren.
Wenn man davon ausgeht, dass es fünf mal die Halbwertszeit braucht, bis ein Stoff eingigermassen weg ist, muss man sich also über 100 000 Jahre um den Atommüll kümmern.

14.11.2008 - 07:59 Uhr

Sehr nützlich.

Vier meiner Enumerationen habe ich entsprechend verändert.

kleine Ergänzung:


 
      if ( ! Enum.IsDefined(enumType, enumValue))
	      {
      		 return "";
              //oder: Fehlermeldung
	      }

viele Grüße und Danke

10.11.2008 - 18:52 Uhr

wie wärs mit:


public enum Autohersteller
{ 
    VW,
    GM,
    Ford
}


class bla
{

    public static string AutoherstellerAusgabe(Autohersteller Autohersteller)
    {
        switch (Autohersteller)
        {
            case Autohersteller.VW:
                return "Volkswagen";
            case Autohersteller.GM:
                return "General Motors";
            case Autohersteller.Ford:
                return "Ford";
            default:
                return "";
        }
    
    }
}

11.08.2008 - 21:47 Uhr

Hallo Jack30lena

Was die Narkoseüberwachung zusätzlich mittels Hirnströme betrifft, so hatten wir ein solches Gerät mal zum Ausprobieren bei uns. Die Geräte sind sicher noch nicht Standard, werden aber auf dem Markt angeboten. Unter den Stichworten 'Entropie EEG' bzw. 'Entropie EEG Narkose' findest Du bei Google einige Artikel dazu.

Was die glasgow coma scale betrifft, so kenne ich sie als Überwachungstool für Frischverletzte, um so früh wie möglich erfassen zu können, wenn sich was verschlechtert hat. Dann nämlich muss eine CT-Kontrolle gemacht werden und gegebenenfalls muss man mit dem Verlezten in den OP.
Wie alle Algorithmen, die vom Menschen erschaffen werden, kann man diese für oder auch gegen die Menschen einsetzen. Was die Forschung zum künstlichen Bewusstsein und damit zur Erforschung des menschlichen 'Ich' betrifft, hoffe ich, dass die entsprechenden Forscher durch die Beschäftigung mit ihrer Materie doch irgendwann eine gewisse Achtung vor der ungeheuren Komplexität der Vielfalt und dem Reichtum entwickeln, die das menschliche 'Ich' zu bieten hat. Dass sie bei aller Freude über ihre Erfolge eine gewisse Bescheidenheit entwickeln und lernen, dass das eigentliche Ziel ist, das Leben zu schützen und zu bewahren.
Es ist ein wenig pathetisch geraten, Entschuldigung. Über die Begrenzheit unserer Möglichkeiten habe ich oben schon geschrieben.

viele Grüße

10.08.2008 - 20:46 Uhr

Hallo Jack30lena

Dass wir mit dem Wissen um die Funktionsweise unseres Gehirns, um uns Selbst noch ganz am Anfang stehen, war auch meine Aussage. Mir ging es darüber hinaus um die Frage, wieweit wir bei der ungeheuren Komplexität unseres Denkapparates überhaupt zu Erkenntnissen kommen können. Hindernisse ergeben sich durch den Unvollständigkeitssatz von Gödel, es gibt wahre Aussagen, die nicht herleitbar sind, sondern gefunden werden müssen. Weiterhin durch den in komplexen sich bewegenden und sich verändernden Systemen wie dem Wetter vorkommenden Schmetterlingseffekt. Wenn dann die präziesest möglichen Messmethoden größere Wirkungen haben, als der zu messende Effekt, ist eine exakte Festlegung, z.B. eine exakte Kopie des Systemzustandes nicht möglich, es bleibt eine Unschärfe. Vermutlich ist es dann nicht einmal möglich, zu beweisen, dass das System deterministisch ist, obwohl das eine unserer Grundvorstellungen ist: „Gott würfelt nicht“.

Den Begriff des Chaos in seiner umgangssprachlichen Form mag ich eigentlich nicht. Komplexe Systeme sind Systeme sich bewegender und verändernder Materie aus inneren Gegensätzen heraus, nicht weil sie sich irgendeinem mystischen Zustand der Unordnung nähern wollen. Deine Erwähnung des Begriffes hat mich allerdings an etwas erinnert: Es gibt Geräte, mit denen gemessen werden kann, ob ein Patient, der in Narkose ist tatsächlich schläft, denn in sehr seltenen Fällen kann es vorkommen, dass intraoperative Wachheit auftritt, was man vermeiden möchte. Es hat sich herausgestellt, dass das mittels einfacher, unverarbeiteter Darstellung der Hirnströme nicht geht. Nun hat man diese Hirnströme analysiert und per Fourier-Transformation (als Nicht-Mathematiker verstehe ich davon nur soviel, dass es funktioniert) in die einzelnen Frequenzen zerlegt. Man kann jetzt berechnen, wie unregelmäßig die Verteilung des Frequenzspektrums ist. Maßzahl ist die Entropie, die dann im Monitor als Zahl angezeigt wird. Je wacher der Patient ist, desto größer ist die Unregelmäßigkeit, also die Entropie. Das heißt je wohlgeordneter die Vorstellungen des Menschen sind, desto mehr ist eine Ebene drunter, auf der Ebene der Hirnströme in Bezug auf die beteiligten Frequenzen Entropie, also Chaos messbar. Damit will ich nicht sagen, dass das Hirn chaotisch ist. Im Gegenteil, die meisten Hirne sind auf der Ebene des Denkens hoch wohlgeordnet, es gibt für alles eine extra Schublade und wehe, wenn jemand wagt, eine Verbindungstür zwischen zwei Schubladen aufzutun.
Womit wir beim nächsten Problem sind, das die Erkenntnis über die Funktionsweise unseres Gehirns bremst: wie Du schreibst macht das Wissen in der Medizin enorme Fortschritte. Dadurch aber ist es inzwischen so immens, dass es nicht mehr von Einzelnen überblickt werden kann. Wirkliche Generalisten, die eigentlich brauchen würde, um die Einzelergebnisse zusammenzufassen, gibt es kaum. Im Gegenteil, die Medizin ist in lauter kleine Fachbereiche aufgeteilt, wobei häufig der eine nicht weiß, was der andere tut. So ist es zum Beispiel nicht verwunderlich, wenn ein Dozent für Neuroanatomie von 7 Formen der Bewusstlosigkeit redet, während andere, die praktisch damit zu tun haben, schon längst mit dem ‚Glasgow coma scale’ arbeiten. Das ist eine Skala zur Beurteilung der Tiefe der Bewusstlosigkeit, in der15 Punkte vergeben werden können. In diese Skala geht die Bewertung der Reaktion auf Schmerzreize mit ein, damit dadurch die höheren Hirnfunktionen geprüft werden können. Für Kinder gibt es eine modifizierte ‚Glasgow coma scale’, siehe: www.medicalforum.ch/pdf/pdf_d/2006/2006-17/2006-17-001.PDF. Wie man in der Tabelle 1.: Glasgow Coma Scale für Kinder sieht, bezieht sich die Modifikation lediglich auf die verbalen Fähigkeiten. Eine gezielte Abwehr haben bereits Kinder unter einem Jahr.
Auf www.birthpsychology.com/lifebefore/fetalsense.html kann man nachlesen, dass Kinder schon im Mutterleib viel mehr können, als man im Allgemeinen so annimmt. Natürlich bin auch ich der Meinung, dass zwischen dem ‚psychologischem Ich’ und dem Bewusstsein bzw. Selbst, das ein Neugeborenes mitbringt, ein fundamentaler Unterschied besteht. Für die Entwicklung des ‚psychologischen Ich’ braucht es notwendigerweise das soziale Umfeld (siehe dazu z.B. das sehr lesenswerte Buch von Gerald Hüther: „Bedienungsanleitung für ein menschliches Gehirn“). Trotzdem besteht eine unauflösliche Verbindung zwischen dem ‚psychologischem Ich’ und dem Bewusstsein, das schon im Mutterleib angefangen hat, sich zu entwickeln und eher für die körperlichen Bedürfnisse zuständig ist, aber auch schon in der Lage ist, auf Gefühlsebene z.B. Musik wahrzunehmen. Wenn dieser Vergleich gestattet ist und ich ein Muster aus der OOP übernehmen darf, dann ist das primär schon zu Beginn entwickelte Bewusstsein die Basisklasse, während das ‚psychologische Ich’ die davon abgeleitete Unterklasse ist, die sich dann aber nach unserem Denken auf einer höheren Ebene befindet.

Viele Grüße

09.08.2008 - 20:48 Uhr

Hallo, ich möchte mal wieder was schreiben:

Wer sich für das Thema menschliches Bewusstsein, künstliches Bewusstsein interessiert, dem kann ich die Bücher ‚Gödel, Escher Bach’ und ‚Ich bin eine seltsame Schleife’ von Douglas Hofstadter empfehlen. Auch wenn man nicht mit allem einverstanden sein muss, was der Autor schreibt, gibt er doch äußerst wertvolle Anregungen, über das Thema nachzudenken. Wichtiger Mittelpunkt der Bücher ist der Unvollständigkeitssatz von Kurt Gödel, der besagt, dass ein formales System, wenn es genügend mächtig ist, entweder widersprüchlich ist oder unvollständig. Das heißt, in ihm formuliert gibt es Sätze, die zwar wahr sind, aber aus dem System heraus nicht ableitbar sind.
In Bezug auf das künstliche Bewusstsein würde ich persönlich sagen: Genau dann, wenn man mit formalen logischen Systemen beweisen könnte, dass das mit dem künstlichen Bewusstsein nicht funktioniert, wüsste man, um diesen Beweis zu führen, über die Einzelheiten des menschlichen Bewusstseins soviel, dass es genau dann mit dem künstlichen Bewusstsein funktioniert. Wir haben es hier wie bei Gödel mit einem nicht entscheidbaren Satz zu tun. Ob es also irgendwann künstliches Bewusstsein geben wird, wird sich in der Realität entscheiden. Die Frage bleibt, wollen wir das überhaupt und die Frage, wie wahrscheinlich ist es, dass es so was geben wird?

‚Ich’, ‚Seele’, ‚Bewusstsein’ wird mitunter gleichgesetzt, ich sehe da Unterschiede, also das Bewusstsein als einen Teil des ‚Ich’ im Gegensatz zum Unbewussten und als Gegenpol zur Bewusstlosigkeit. Das Bewusstsein ist immer auch ein körperliches Bewusstsein, also die Selbstwahrnehmung unseres Körpers. Wenn wir z.B. einen Schmerz verspüren, weil wir an der Hand von einer Bremse gestochen werden, sind wir in der Lage, genau dort hin zu schlagen, wo die Bremse sitzt. Dies ist nur ein kleines Beispiel für unzählige Verbindungen zwischen unserem ‚Ich’, unserem Bewusstsein als Selbstreflexion auf uns und unserer körperlichen Basis, die aus Proteinen besteht, in dem Sinne, dass allein schon von der Proteinbasis her jeder Mensch unverwechselbar ein bisschen anders ist.
Insofern wird es unmöglich sein, dass es künstliches menschliches Bewusstsein außerhalb von Menschen gibt. Es ist allenfalls denkbar, dass es künstliches ‚Maschinen-Bewusstsein’ geben könnte. Die Frage ist dann, sind wir in der Lage, das menschliche Bewusstsein so zu erfassen, dass wir es nachbauen können? Dies hat sich zwischenzeitlich als extrem schwierig und komplex herausgestellt. Trotzdem ist es falsch, daraus den Schluss zu ziehen, dass es irgendeine nichtmaterielle Essenz gibt, die dann die Seele ausmacht. Die immensen Schwierigkeiten, unser ‚Ich’ zu erfassen, sind schon allein dadurch erklärbar, dass die Materie, also auch unser Hirn nichts Statisches ist, sondern höchst dynamisch und komplex. Es ist nicht alles aus kleinen Unterbausteinen herleitbar, genauso wenig, wie das gesamte Gebäude der Mathematik aus wenigen Axiomen ableitbar ist. Immer wieder muss etwas neu entdeckt werden. Das Besondere an dynamischen und komplexen Systemen ist dazu noch, dass es den ‚Schmetterlingseffekt’ gibt: ‚der Flügelschlag eines Schmetterlings in Brasilien kann einen Tornado in Texas zur Folge haben.’ Wir können aber von dem Tornado nicht auf diesen Flügelschlag des Schmetterlings rückschließen. Vor allem aber der Flügelschlag, also die kleine Mini-Ursache hat eine viel geringere Wirkung, als alle unsere Messmöglichkeiten, die wir einsetzen können, an Wirkung haben. Dadurch ist es unmöglich, exakt das Ausmaß der kleinen Ursache, z.B. des Flügelschlages zu bestimmen. Es bleibt immer eine Unschärfe, ein exakter Nachbau unseres komplexen System Hirn und Bewusstsein wird so nicht möglich sein.

Was bleibt, um zu Erkenntnissen über unser Bewusstsein zu kommen ist Rückschlüsse zu ziehen aus unseren Messungen, unserem Handeln. Aus diesen Rückschlüssen Vorstellungen aufzubauen und diese Vorstellungen wieder zu überprüfen usw. Nach vielen Iterationen werden unsere Vorstellungen, wenn wir nicht gerade auf einem Holzweg sind, immer besser. Wenn wir dann nach einer heute noch kaum vorstellbaren Zahl von Kreisläufen der Entwicklung von Vorstellungen und Überprüfen derselben ein wirkliches Verständnis von unserem 'Ich', unserem Selbst erlangt haben, wird die Frage sein, ob wir dann nicht bereits mit unserem Hirn schon eine Ebene weiter sind. Vielleicht wollen wir dann gar kein künstliches Bewusstsein mehr schaffen, sondern wenden uns den Menschen zu.

viele Grüße

18.06.2008 - 22:12 Uhr

seit 1995 betreue ich in meiner 'Freizeit' ein selbst erstelltes Programm, welches ich, teils auch meine Kollegen beruflich einsetze. Erst habe in Visual Basic programmiert. Seit 2003 Neuerungen in C#, wobei ich Schritt für Schritt alles in C# übersetze.
Natürlich ist die Frage, was da jetzt 'ernstzunehmende Programmiererfahrung' ist, aber immerhin, das Programm läuft.

25.04.2008 - 21:46 Uhr

Hallo

In dem von Microsoft press herausgegebenen Buch von Jeffrey Richter "Microsoft .Net Framework-Programmierung in C#" 2. Auflage gibt es ab Seite 131 eine ausführliche, aber andere Beschreibung dazu, die ich mangels Zeit nicht vollständig wiedergeben kann. Auf Seite 134 in der Beschreibung einer Abbildung: "Die Typobjekte für Employee und Manager werden unmittelbar beim Aufruf von M3 erstellt." In der Abbildung finden sich diese Typobjekte auf dem Heap.
D.h. bei jedem Aufruf einer Methode werden die Typobjekte der Objekte erstellt, die in dieser Methode verwendet werden.

viele Grüße

28.10.2007 - 09:59 Uhr

Hallo

In meinem Programm wird, bevor irgendein Fenster erscheint, zunächst in einer Modellklasse, die sich um Verzeichnisse etc. kümmert, geprüft, ob das Verzeichnis des Servers verfügbar ist, wenn nicht, gibt es aus dieser Modellklasse heraus eine Fehlermeldung mit Text aus dieser Modellklasse heraus. (Bei mehreren Sprachen müsste da dann ein Verweis auf eine Ressource her). In einem anderen Teil meines Programms erstelle ich automatisiert Termine, die voneinander abhängen. Sie werden in der GUI in Benutzersteuerelementen ausgegeben und können aber dort auch geändert werden. Für die Validierung bzw. Fehlerausgabe ist es egal, ob Termin A oder ob Termin B geändert wird, die Generierung der Fehlerausgabe geschieht daher nicht in Benutzersteuerelement A oder B, sondern in einer 'tiefer' liegenden Modellklasse.

Aus der Sicht eines in erster Linie auch Anwenders von Software ist das Hauptproblem aber die Frage, was für den Anwender als Fehlermeldung ausgegeben wird. Mit 'Debug assertion failed', irgendwelchen Angaben von Speicheradressen und Verweis auf die MFC-classes weiss man, das muss wohl ein C++ Programm sein, mehr aber nicht. Die Fehlermeldung 'Objektvariable oder With-Blockvariable nicht festgelegt' sagt einem, dass es sich bei dem gerade erst angeschafften innovativen Programm wohl um ein VB 6 - Programm handelt. Wenn es nach dieser Fehlermeldung sich mit einem Absturz verabschiedet muss man es halt neu starten.
Ärgerlicher ist es bei einer solchen Meldung: 'Serverseitiger Fehler, Errorcode 999', damit fängt man als Anwender gar nichts an. Man probiert dreimal einen Neustart und verliert kostbare Zeit. Zeit, die im Einzelfall bei uns auch einmal lebenswichtig sein könnte. Hier hätte ich mir eine Fehlermeldung in dieser Art gewünscht:
'Server und auch Ersatz-Server derzeit nicht verfügbar, bitte Anforderungen von Hand Papier-gestützt abschicken' damit man sofort weiss, wo man dran ist.

Dies bedeutet, es wäre eigentlich Aufgabe der Software-Entwickler Fehlermeldungen, die in welcher Sprache auch immer aus der Tiefe der Methodenaufrufe und Klassen kommen, zu kapseln und mit einer Fehlermeldung zu versehen, die für den jeweiligen Anwender verständlich ist. Ich denke, dass das so auch von Microsoft vorgesehen ist. Notwendig wäre dann eine bessere Kommunikation zwischen Entwicklern und Endanwendern, da naturgemäß nicht primär alle (Laufzeit-)Fehler von den Entwicklern vorhersehbar sind.

viele Grüße

18.10.2007 - 22:29 Uhr

nicht, dass ich soviel von Musik verstehe, auch das Buch, das zu lesen ich empfehlen möchte, habe ich zwar in einem Rutsch durchgelesen, aber nicht unbedingt alles verstanden. Es geht darin auch um Bach:
'Gödel, Escher, Bach' von Douglas R. Hofstadter. Der Autor schreibt auf Seite 721:
'Wird ein Comuterprogramm jemals schöne Musik schreiben?
Spekulation: Ja, aber nicht so bald'. Weiter unten schreibt er dann:
'Zu denken .... dass wir bald imstande sein werden, einer für zwanzig Dollar erstandenen, vorprogrammierten massenproduzierten Tischmodell-'Musikbox' aus dem Versandhaus den Auftrag geben zu können, aus ihren sterilen Schaltkreisen Stücke zu produzieren, die Chopin oder Bach hätten schreiben können, wenn sie länger gelebt hätten, ist eine groteske und beschämende Fehleinschätzung der Tiefe des menschlichen Geistes.'

08.07.2007 - 22:35 Uhr

Hallo

ich hoffe, ich langweile Euch nicht. Hier die Variante, die ich benutze, sie hat mich die letzten 10 Jahre über nicht im Stich gelassen:


private DateTime Ostersonntagermitteln(int Jahr)
{
  DateTime Ostersonntag;
			
 //Osterformel nach Gauss
			 
			
 int   r1, r2, r3, r4, r5;       
			
 r1 = Jahr % 19;			
 r2 = Jahr % 4;			
 r3 = Jahr % 7;			
 r4 = (19 * r1 + 24) % 30;			
 r5 = (6 * r4 + 4 * r3 + 2 * r2 + 5) % 7;
			
 Ostersonntag = new DateTime(Jahr, 3, 22) ;			
 Ostersonntag=Ostersonntag.AddDays(r4 + r5);			
 if (Ostersonntag == new DateTime(Jahr, 4, 26)) 			
   Ostersonntag = new DateTime(Jahr, 4, 19);			
 else if ((Ostersonntag == new DateTime(Jahr, 4, 25)) && (r1 > 10)) 	
   Ostersonntag = new DateTime(Jahr, 4, 18);                    
			
 return Ostersonntag;		
}


Die einzelnen Feiertage sind in einer DB - Tabelle. Im Tabellenfeld Berechnung steht drin, wieviel Tage zum Ostersonntag dazuzuzählen bzw. abzuziehen sind, im Feld ' wieberechnen' steht drin, wie der Feiertag zu berechnen ist, fest nach Tag und Monat, wie der 1.Mai und Weihnachten oder nach dem Ostersonntag.

viele Grüße

22.04.2007 - 13:43 Uhr

Denkt Ihr denn auch auf Englisch? Gedankengänge, die einem einigermassen komplex erscheinen, lassen sich doch eigentlich besser in der eigenen Muttersprache ausdrücken.

22.04.2007 - 13:36 Uhr

sehr konkret, vielleicht schon etwas zu konkret ist:
"Entwurfsmuster von Kopf bis Fuß" aus dem O' Reilly Verlag von Eric und Elisabeth Freeman. Gibt's in deutscher Übersetzung.
Beispiele ausschließlich in Java.

24.03.2007 - 22:40 Uhr

Ein praktisches Beispiel:



	class CDBBenutzer : CDBDatenleser
	{
		private  string _BenutzerZaehlString="0";
		protected  string _Unterschreiber="";
		protected  string _Benkuerzel="";
		protected  string _Facharzt="";		

		private static CDBBenutzer _Hauptbenutzer;		
		

		internal virtual int BenutzerZaehl
		{			
			get
              {
        int BenutzerZaehl =int.Parse(_BenutzerZaehlString);       
				return(BenutzerZaehl);
			}	
		}


		internal  string Unterschreiber
		{			
			get {return(_Unterschreiber);}	
		}	

		internal  string Benkuerzel
		{			
			get {return(_Benkuerzel);}	
		}	

		internal  string BenkuerzelmitDatum
		{			
			get {return( DateTime.Today.ToShortDateString()+ " " + _Benkuerzel);}	
		}	

		internal  string Facharzt
		{			
			get {return(_Facharzt);}	
		}

    internal static void setHauptbenutzer(string BenutzerZaehler)
    {
      if (_Hauptbenutzer != null)
      {
        System.Windows.Forms.MessageBox.Show("Hauptbenutzer bereits initialisiert.");
        return;
      }
      _Hauptbenutzer = new CDBBenutzer(BenutzerZaehler);
      _Hauptbenutzer.Verbindungherstellen();//Daten laden aus Datenbank
      _Hauptbenutzer.Verbindungschliessen();

    }
    internal static CDBBenutzer getHauptbenutzer()
    {
        return _Hauptbenutzer;
    }

    internal static CDBBenutzer getBenutzer(int? BenutzerZaehl)
    {
        CDBBenutzer Benutzer;
        if (BenutzerZaehl == null)
            Benutzer = new CNullBenutzer();
        else
            Benutzer = new CDBBenutzer(BenutzerZaehl.ToString());
        Benutzer.Verbindungherstellen();//Daten laden aus Datenbank
        Benutzer.Verbindungschliessen();
        return Benutzer;
    }
  

    //Daten aus Datenbank:
    public override void Verbindungherstellen()
    {
        
        sgpCommandinit();

        string sql = "select * from Kollegen where BenZaehl= " + _BenutzerZaehlString;
        sgpCommand.CommandText = sql;
        sgpconn.Open();
        Datenleser = sgpCommand.ExecuteReader(CommandBehavior.CloseConnection);

        bool keinDsatz = true;
        while (Datenleser.Read())
        {
            _Unterschreiber = Datenleser["Unterschreiber"].ToString();
            _Benkuerzel = Datenleser["Benkuerzel"].ToString();
            _Facharzt = Datenleser["Facharzt"].ToString();
            keinDsatz = false;
        }
        if (keinDsatz)
        { System.Windows.Forms.MessageBox.Show("Kein Benutzer-Datensatz!"); }
        Datenleser.Close();
    }


    //Konstruktoren 
    protected CDBBenutzer():base(Datenbankenum.ensgpben)
    {			
    }
    private CDBBenutzer(string BenutzerZaehler):base(Datenbankenum.ensgpben)
    {		
    _BenutzerZaehlString=BenutzerZaehler;
    }

	
    
        /// <summary>
        /// Zusammendfassende Beschreibung für CNullBenutzer  innerhalb von CDBBenutzer 
        /// j.k.luk Herbst 8/06
        /// </summary>

        internal sealed class CNullBenutzer : CDBBenutzer
        {


            internal override int BenutzerZaehl
            {
                get
                {
                    throw new System.Exception("Null - Benutzer !");
                   
                }
            }


            //Methoden:
            public override void Verbindungherstellen()
            {
            }


            //Konstruktor  

            internal CNullBenutzer()
            {
                _Unterschreiber = "";
                _Benkuerzel = "";
                _Facharzt = "";
            }

        }//innerhalb von CDBBenutzer      

        
    }
    ///

 

Den Hauptbenutzer, der am Anfang des Programms mit setHauptbenutzer initialisiert wird bekommt man dann so:

 
(CDBBenutzer.getHauptbenutzer()).BenutzerZaehl

Von der Sicht eines Anwenders aus gibt es tatsächlich den Hauptbenutzer, aber durchaus auch den Gastbenutzer, z.B. wenn dieser das Programm am Vortag benutzt hat und seine ID in einem Datensatz gespeichert ist, oder aber wenn im gleichen Raum 2 Leute arbeiten...
Auch gibt es den Null-Benutzer, wenn ein Datensatz neu erstellt wird und das zugehörige Benutzerfeld, das sich in einer anderen Tabelle befindet, noch auf DBNull steht.

30.01.2007 - 22:01 Uhr

Einiges bietet ja auch die PrinterSettings - Klasse. Damit kann man auch einiges selber gestalten, siehe Code - Ausschnitte:

 
private void Druckerinitialisieren()
{			
			
  _benutzterDrucker=new System.Drawing.Printing.PrintDocument();
	
  if (_Druckername != null)
     _benutzterDrucker.PrinterSettings.PrinterName=_Druckername;
}


private void Seiteeinrichten()
{
   if (_Randbedruckbar)
     Papersizefestlegen("Legal");		
   else
     Papersizefestlegen("A4");			
}


private void Papersizefestlegen(string PapersizeName)
{
    if ( _benutzterDrucker.DefaultPageSettings.PaperSize.PaperName !  =PapersizeName) 	
{	
    foreach(PaperSize pksize in   _benutzterDrucker.PrinterSettings.PaperSizes) 
      {					
          if (pksize.PaperName==PapersizeName)
            {
                _benutzterDrucker.DefaultPageSettings.PaperSize=pksize;
                break;
            }
      }		
}

if (_Querformat)
    _benutzterDrucker.DefaultPageSettings.Landscape=true;
		
}

03.01.2007 - 22:58 Uhr

In der Tat.
Intelligenz ist, was der Intelligenztest misst. Es dreht sich also im Kreis und von einem wirklichen Wissen darüber ist man noch ziemlich weit entfernt.
Im Hirn hat es 100 Milliarden Hirnzellen. Wenn es arbeitet, ist es so, bzw. kann es so sein, wie wenn 5 Milliarden Menschen gleichzeitig mit je 10 anderen Menschen telefonieren. Wer bitte schön will das in welcher Zeit nachprogrammieren wollen? Vor allem, wer will das testen? Die Evolution hat dazu zig Millionen Jahre Zeit gehabt.
Auch ist die einzelne Hirnzelle keineswegs so simpel. Sicherlich, sie ist erregt oder nicht errregt, das erinnert noch an ein Bit. Aber ob sie erregt wird, das ist eine ganz andere Frage, das hängt ab von den erregenden Synapsen, dann hängt es ab von den hemmenden Synapsen, von denen es verschiedene Sorten gibt, von denen es wieder verschiedene Untersorten gibt, dann hängt es noch ab von der Erregbarkeit der Zelle überhaupt, die wiederum vom Öffnungszustand der Jonenkanäle insbesondere der Kaliumkanäle abhängt. Von diesen Kaliumkanälen wiederum gibt es 20(?) verschieden Untersorten( das riecht ein bischen nach OOP), diese reagieren teils auf indirektem Wege auf den Input der Synapsen, teils reagieren sie direkt z.B. auf Sauerstoffmangel, oder aber auf Mangel an Energieträgern, dann nämlich machen sie auf und bewirken so eine Mindererregung, man wird müde.
Auch hat die Zelle innerhalb der Zelle eigene Unterzellen, z.B. die Mitochondrien, die sozusagen die Energiefabriken sind.
Die Speichermöglichkeiten unseres Gehirns sind um ein vielfaches größer, als die möglichen Zahlenkombinationen unseres eigenen genetischen Codes. Es ist also beim Kind nichts mit 'Gedächtnis'-Vergleich. Gerade das menschliche Gehirn ist nicht festgelegt, sondern ziemlich offen, genau deshalb ist es aber auch so lernfähig.
Wir wissen also schon einiges über unser Hirn, aber, ehrlich gesagt wissen wir noch gar nichts. Gerade in der Medizin ist vieles Wissen reines Erfahrungswissen. So wissen wir z.B. seit über 100 Jahren, dass Narkose funktioniert und wir wenden dieses Wissen erfolgreich an. Aber wie und genau wo unsere entscheidenden Narkosemittel wirken, das hat noch niemand herausgefunden.
Die Situation ist heutzutage eher so, dass je mehr geforscht wird, desto mehr Fragen tauchen auf, desto mehr wird klar, dass was die Hirnforschung betrifft, wir noch im Stadium der Jäger und Sammler sind.

Auch ist nicht mal klar, nach welcher, wenn man so sagen darf, Programmiersprache unser Organismus aufgebaut ist. Einiges erinnert an die OOP, so hat die Natur schon lange das Prinzip der Kapselung vorweggenommen, indem sie das Hämoglobin in die roten Blutkörperchen einkapselt. Seit fast 50 Jahren mühen sich Forscher, künstliche Sauerstoffträger herzustellen, ohne Erfolg. Frei in der Blutbahn umherschwimmende Hämoglobine haben zuviel Nebenwirkungen, da sie NO abfangen, wodurch sich dann die Blutgefäße nicht weiten können. Die Natur hat das Hämoglobin eingekapselt und so das Problem gelöst.
Es gibt aber einige Unterschiede. So will der Programmier möglichst redundanten Code vermeiden. In der Natur scheint die Redundanz zum Prinzip erhoben: der genetische Code ist doppelt, es gibt mindestens 4 Regelkreise, die den Blutdruck anheben, wie auch mehrere, die für die Kreislaufdämfung zuständig sind. Genau dort, wo dieses Redundanzprinzip verlassen ist, gibt es typische Krankheiten, die gehäuft auftreten, wie die Bluterkrankheit oder der Typ I Diabetes.
Auch das Prinzip eine Klasse, eine Zuständigkeit wird in der Natur häufig verletzt. So ist z.B. Erythropoeitin nicht nur ein Stoff, der die Blutbildung anregt, sondern findet sich auch im Hirn und hilft dort mit dazu bei Sauerstoffmangel Zellen vor dem Untergang zu schützen.
Besonders aber, wie ich oben schon angedeutet habe, ist es nicht immer nur eine simple ja ja, nein nein Verschaltung, sondern selbst auf der Ebene der einzelnen Zelle findet sich eine feine Abstimmung, die eher an die fuzzy-Logik erinnert.

viele Grüße

Jürgen

14.12.2006 - 21:29 Uhr

Die Druckfunktion läuft ereignisgesteuert. Man muss also das PrintPage Ereignis des PrintDocuments bei einem EventHandler anmelden, der dann die printPage Methode aufruft.


PrintDocument printDocument = new PrintDocument();
printDocument.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(printPage);

@FZelle, wo liegt denn die Obergrenze für die Handles, also wieviel Fonts bzw. Pens kann man in einem Programm gleichzeitig laufen haben?

08.12.2006 - 23:04 Uhr

Hallo
Natürlich ist das obige Beispiel total überfrachtet. Trotzdem gibt es Situationen, wo man als Anwender relativ viel Parameter auf einen Blick und ohne Menue oder Reiter etc erfassen können muss. Aber auch hier sollte dann alles wegen der Übersichtlichkeit auf z.B. drei Bildschirme verteilt und logisch gruppiert sein.

viele Grüße

08.12.2006 - 22:41 Uhr

Hallo

combo.DataSource = collection;
Wenn die Collection nicht aus Strings besteht, sondern eine Sammlung anderer Objekte ist, erscheint in der Anzeige der Combobox das was die ToString()-Methode der Einzelobjekte als String zurückgibt. Zumindest dann, wenn die ToString()-Methode sinnvoll überschrieben ist.

viele Grüße

29.11.2006 - 22:30 Uhr

Mehrere Programminstanzen verhindern. Was spricht dagegen, es so zu machen:



using System.Diagnostics;

// in Main, am Anfang:

Process dieseAnwendung = Process.GetCurrentProcess();

Process[] jetztlaufendeProzesse = Process.GetProcessesByName(dieseAnwendung.ProcessName);

if (jetztlaufendeProzesse.Length > 1)
      {
        System.Windows.Forms.MessageBox.Show("C#-Anwendung nicht mehrfach laufen lassen\nbitte erst das letzt benutzte Druckfenster schliessen. Siehe auch in der Taskleiste unten");
        return;
      }

17.09.2006 - 16:39 Uhr

Hallo

Jeder sollte eine Ausbildung machen, jeder, der das Zeug dazu hat oder sich zu einem Fach berufen fühlt, sollte dieses auch studieren. Was man studiert sollte man aber nicht von den Gehaltsaussichten abhängig machen. Ordentliches Gehalt ist wichtig, noch wichtiger aber sind die Arbeitsbedingungen, die man dann vorfindet. Auch bringt es natürlich wenig ein Studium mit guten Gehaltsaussichten anzufangen, um dann nach 2 Semestern festzustellen, dass es einem nicht liegt.
Studieren sollte man das, wozu man die größten Neigungen hat, wo man am ehesten in der Lage ist, auch einmal richtig unangenehme Phasen durchzustehen. Rein finanziell gesehen kann es sein, dass man, während andere schon gutes Geld verdienen, 5 bis 6 Jahre studiert, eine Diplomarbeit mit 1,soundso schreibt, um dann erstmal für ein halbes Jahr froh sein zu können, einen 7Euro-HIWI-Job zu bekommen. Mal sehen, was draus wird. Andere machen Praktika unbezahlt, wieder andere kommen an gut bezahlte Praktika schon während des Studiums ran, wollen nach 9 Semestern schon Examen machen um dann ein bereits bewilligtes Stipendium für ein Aufbaustudium im Ausland in Anspruch zu nehmen. Es ist also alles drin. Wichtig ist aber, in erster Linie seinen Begabungen und Neigungen zu folgen. Als nächstes zählt natürlich die Frage, wie der Arbeitsmarkt aussieht, bzw. aussehen wird, wenn man fertig ist. Es hat wenig Sinn, eine Ausbildung in einem Beruf anzufangen, der schon überlaufen ist und es die nächsten 10 Jahre auch bleiben wird. Gerade für dieses Problem aber ist man mit einem Studium besser aufgehoben, da man mehr die Grundlagen und die Fähigkeit zu lernen vermittelt bekommt und dann später sich je nach Arbeitsmarkt leichter hierhin oder dorthin orientieren kann.

@ chri:
Kaum ein Beruf ist stärker in lauter Untereinheiten aufgegliedert, als die Medizin. Selbstverständlich gibt es da auch die Medizininformatik als spezielle Fachweiterbildung nach dem Medizinstudium. Meistens aber haben diese Ärzte mehr was mit Statistik und Dokumentation zu tun als mit den Patienten. Wenn Du Arzt werden willst und gleichzeitig auch als Entwickler kreativ tätig sein willst, dann ist es besser den im Übrigen sehr kreativen Beruf Arzt zu wählen und die Programmiererei als Hobby nebenher zu betreiben.
Auch wenn man tatsächlich als Arzt arbeitet, können Programmierkenntnisse was bringen. Und wenn es nur darum geht, sich in seiner Freizeit was zusammen zu frickeln, weil a) Software, die angeboten wird, das was man wirklich braucht,gar nicht leistet und b) man diese Software sowieso nicht bewilligt bekäme, weil dafür kein Geld da ist.

Jürgen

29.08.2006 - 11:15 Uhr

Das mit der Zuweisung funktioniert nicht und das ist auch gut so, denn das würde dem Prinzip der Kapselung widersprechen und kaum zu überblickende Abhängigkeiten erzeugen.
Kopie ist was anderes, da erzeugt man ein unabhängiges neues Objekt.
Dazu müsste in der Basisklasse eine Kopier-Fabrikmethode sein, mit der jeweils neue Objekte der Unterklassen erzeugt werden können. Die Unterklassen haben dann einen protected -Kopier-Konstruktor, der die privaten Felder aus der Basisklasse übernimmt.
Beispiel:
fortlaufender Text, für jede Zeile ein eigenes Objekt mit Textkoordinaten X und Y.
Y wird jeweils hochgezählt, damit die Zeilen schön untereinander kommen. Will man im Textverlauf eine Linie, brauchts dafür ein Objekt einer anderen Unterklasse. Eine Möglichkeit ist nun, in der Basisklasse dieser Objekte ein statisches Feld 'statY ' zu haben, das dann für alle Unterklassen gilt. Funktioniert wunderbar, solange man jeweils nur einen Ausdruck hat. Wenn es mehrere gleichzeitig sind geht das mit dem statischen Feld nicht mehr. Mit dem oben skizziertem Kopierverfahren würde es aber gehen: jede neue Zeile oder Linie usw. wird dann aus der jeweils vorhergehenden erzeugt, übernimmt von ihr über die Basisklasse die Koordinaten, zählt Y hoch und hat natürlich einen anderen Text, der extra zugewiesen werden muss.

19.08.2006 - 12:25 Uhr

Original von cadi
(ich brauche eine datenbank, die zu beliebigen begriffen beliebige assoziationen erlaubt. z.B.
............... )

Wenn man sowas hat, dann hat man ein extrem mächtiges tool.
Das geniale an WinFS wäre ja, das beliebige applikationen neue assoziationen hinzufügen können.

"beliebigen begriffen beliebige assoziationen" Geht das ohne Probleme überhaupt?
Es gibt dann jede Menge gegenseitige Abhängigkeiten, also Zirkelbeziehungen. Diese sind primär nichts schlechtes, die Welt ist voll davon, führen aber sehr häufig zu Widersprüchen, die sich, wenn sie in Programmen abgebildet werden z.B. in Endlosschleifen äussern. diese wiederum führen zu Fehlermeldungen bzw. zum Absturz.
Wenn sozusagen alles erlaubt ist, dann wäre auch die Arraylist aller Arraylisten erlaubt, die sich selbst nicht als Element enthalten (http://de.wikipedia.org/wiki/Russellsche_Antinomie).
Auch diese gäbe in Programm umgesetzt eine Endlosschleife.

Auch aus dem Unvollständigkeitssatz von Kurt Gödel:
"Jedes hinreichend mächtige formale System ist entweder widersprüchlich oder unvollständig." folgt doch eigentlich, dass es die vollständige Datenbank für alles und jedes ohne Widersprüche nicht geben kann

oder:

Es wird auch weiterhin menschliche Fachleute für die verschiedenen Tätigkeitsfelder geben müssen, die in der Lage sind aus der großen Menge aller möglichen Beziehungen in komplexen Systemen die zur konkreten Zeit am konkreten Ort jeweils wirklich relevanten herauszufiltern. Wie auch Softwareentwickler, die mit diesen Fachleuten zusammenarbeiten, ihnen zuhören und die Probleme dann in jeweils konkrete Datenbanken und Programme umsetzen.

03.07.2006 - 21:58 Uhr

Hallo

Original von DaSchroeter
Und mal ganz allgemein: Warum ist es eigentlich 'schlecht', wenn wir uns nachbauen können?

Es gibt eine ganz einfache Methode, 'uns nachzubauen':

      Kinder kriegen.  

Vor allem aber, dabei mithelfen, sie großzuziehen. Wenn man das macht, bzw. gemacht hat, wird man unschwer feststellen, welch fundamentaler Unterschied zwischen Mensch und Maschine besteht. Der wichtigste: Kinder haben einen eigenen Kopf. Sie sind Subjekte, die vielleicht ein bischen Hilfestellung brauchen, im Prinzip aber selbst wissen, was für sie gut ist und wie sie vorankommen.
Auch ist das Hirn keine festgelegte Hardware, sondern selbst in seiner Substanz im übrigen auch im Alter noch höchst wandelbar und lernfähig.

viele Grüße

01.07.2006 - 00:41 Uhr

Ein wirklich gutes Buch, dessen Lektüre in dieser Situation weiterhelfen könnte ist:
"Refactoring" von Martin Fowler, Untertitel:
"oder: wie Sie das Design vorhandener Software verbessern".
Gibt's in deutscher Übersetzung bei Addison-Wesley.
Das Buch wendet sich ausdrücklich nur an Profis, ist aber so flüssig und verständlich geschrieben, dass selbst Nicht-Profis davon profitieren.

17.06.2006 - 14:41 Uhr

Hallo Norman_Timo

Wenn der Konstruktor öffentlich ist, läßt sich die Mehrfachinstanziierung nicht verhindern.
Es ist nur die Frage, was dann mehrfach instanziiert wird:
Man könnte doch den als Singleton ausgelegten Manager in eine Wrapper-Klasse packen, die über den öffentlichen Konstruktor beliebig häufig aufgerufen werden kann, deren Eigenschaften und Methoden intern aber immer auf die eine Manager-Singleton-Klasse verweisen.
Nach aussen hin hätten die Manager- und die Wrapper-Klasse dieselbe Schnittstelle implementiert.

Es ist eine nicht getestete Idee, schreiben Sie, wenn ich völlig daneben liege.

viele Grüße

15.06.2006 - 17:30 Uhr

Access schmiert gerne mit "Schwerer Ausnahmefehler" ab und ist danach kaputt. Das war schon mit Access 1.0 auf Windows 3.11 so und ist bei Access 2003 immernoch so.

Das kann ich so nicht nachvollziehen. Ist das vielleicht ein Problem von Mehr-Benutzer-Umgebungen?
Ich arbeite an und mit Access-Datenbankdateien seit 1994 sowohl als Anwender als auch als 'Freizeit'-Entwickler meines Programms. Das Programm läuft arbeitstäglich ungefähr 2 Stunden nach dem Motto 'mit wenigen Daten viel unternehmen'. Den beschriebenen "Schweren Ausnahmefehler" habe ich in den nunmehr 12 Jahren nur ein einziges Mal erlebt. Das war bei einem kurzfristigem Stromausfall.
Natürlich habe ich trotzdem verschiedene Backup-Funktionen eingebaut, man weiss ja nie....

viele Grüße

12.06.2006 - 20:53 Uhr

Vielleicht bringt das was:


DateTime Jetzt=DateTime.Now;				
int Jahr=1899;
int Monat=12;
int Tag=30;
int Sekunden=Jetzt.Second;

DateTime DatumfuerDB=new 
DateTime(Jahr,Monat,Tag,Jetzt.Hour,Jetzt.Minute,Sekunden);

System.Windows.Forms.MessageBox.Show(DatumfuerDB.ToShortDateString());
System.Windows.Forms.MessageBox.Show(DatumfuerDB.ToShortTimeString());

Gruß

10.06.2006 - 21:44 Uhr

Das mit dem count ist wirklich eine feine Sache, hat aber den Nachteil, dass man eine zusätzliche Datenbankabfrage benötigt. Es geht auch anders:


 object obj_idm = DBCommand.ExecuteScalar();
if (Convert.IsDBNull(obj_idm))
  neuenDatensatzanlegen();
else
  idm=(int)obj_idm;

Gruß

06.06.2006 - 22:01 Uhr

Hallo

Vielleicht liegt es am Namen der Tabelle. Du verwendest:

x = "table";

'table' ist aber ein reserviertes Wort. Mit

x = "[table]";

könnte es gehen. Besser wäre aber ein aussagekräftiger Tabellenname, wie
'SpielerKoordinaten' oder so.

mfg

23.04.2006 - 12:41 Uhr

Hallo

Als Nicht-Professioneller und Freizeitprogrammierer möchte ich immer noch die Frage stellen, wie das funktionieren soll. Gesucht war ja ein zufällig ausgesuchter String und nicht bloß die Formel. Meiner Meinung nach geht das in nur einem Durchlauf nicht. Es sind mindestens zwei Durchläufe erforderlich, einer, um die Gesamtzahl der Strings, bzw das Dateiende zu finden, denn das Dateiende braucht man, um bei jeweils gleicher Chance auf den zufällig ausgewählten Sting zu kommen. Einen zweiten Durchlauf, um dann den ausgewählten String anzusprechen und in den 'Survivor' String zu packen.

Übrigens, hätte die Datei kein Ende, würde also ein anderer Prozess am Ende über Append ständig was dazupacken, wäre die Aufgabe gänzlich unlösbar, da der erste Durchlauf nie zum Schluss käme.

viele Grüße

25.03.2006 - 22:47 Uhr

Hallo
hier ein Code-Ausschnitt, sozusagen von Hand, aus dem hervorgeht, dass es funktioniert:


public override int Hinzufuegen(object o)

{
  int NomId=0; 
  CLeute ELeute=(CLeute)o; //CLeute Klasse, die die Werte enthält, die zu speichern sind
			 
  string sql;  
		
	
		
  sql="Insert into leute "
  +" (nom,Fach,Farb)"  
  +" Values('"
  + ELeute.leutenom+"'," 
  + Allg.comDBNeuerDS +","    //meine Konstante								
  + " ? )";	
	
		
 
  OleDbParameter ELFarb=new OleDbParameter("@Farb", OleDbType.UnsignedTinyInt);
  ELFarb.IsNullable=true;
  if (ELeute.Farb==CLeute.farbenum.fuerNull)
   ELFarb.Value=DBNull.Value;				
  else
   ELFarb.Value=ELeute.Farb;
  sgpCommand.Parameters.Add(ELFarb);		

					

  sgpCommand.CommandText=sql;	//OleDbCommand			
  sgpCommand.ExecuteNonQuery();
		
				
  sgpconn.Close();  //OleDbConnection
  sgpconn.Open();

  sql="select nomid from leute where Fach = " + Allg.comDBNeuerDS.ToString() +"";
  sgpCommand.CommandText=sql;
  NomId= (int) sgpCommand.ExecuteScalar();

  sgpCommand.Parameters.Clear();
			

  sql="Update leute "			
  + "set Fach= "+ (int)ELeute.Fach+" where nomid = " + NomId; 
		
			
     	
  sgpCommand.CommandText=sql;
  sgpCommand.ExecuteNonQuery();
			 

		
  return NomId; 



}


Natürlich wäre es richtiger, die Text-Werte auch als Parameter zu übergeben, in diesem Falle bin ich aber selbst der einzige User.

Wenn jemand eine bessere Lösung weiss, nur zu.

viele Grüße

25.03.2006 - 16:04 Uhr

Hallo Tow-B

In Visual Basic gab es dafür früher eine Eigenschaft: 'lastmodified', die man abfragen konnte. Die gibt es jetzt schon lange nicht mehr.
Ich behelfe mir folgendermassen: ich habe eine Konstante: DBneuerDatensatz, diese speichere ich beim Anlegen des neuen Datensatzes in einem Feld, z.B. in Ihrem Info-Feld. Wenn der Datensatz gespeichert ist, frage ich in derselben Methode nach dem Datensatz, der im Info-Feld die Konstante DBneuerDatensatz enthält und bekomme so den Autowert. Anschliessend wird ebenfalls in derselben Methode der Datensatz geändert und statt der Konstante DBneuerDatensatz der eigentliche Wert für das Info-Feld eingetragen.
Umständlich, aber funktioniert, jedenfalls in einer Ein-Benutzer-Umgebung.
Bei mehreren Benutzern müsste es noch eine abfragbare Spalte für den jeweiligen Benutzer und eine Spalte für den Namen des jeweils benutzten Computers geben.

viele Grüße

22.02.2006 - 17:43 Uhr

Die Ideen von Plato sind ja nun wirklich schon ur ur alt. Es war damals ein Versuch, die Welt zu erklären. Im Gegensatz zu unserer heutigen sehr konkreten Sichtweise der Dinge hat er die Welt sozusagen vom Kopf her betrachtet: nicht die wirkliche Welt ist primär da und real, sondern die Ideen. Die Dinge in der wirklichen Welt wären nur die Abbilder der Ideen. Eingang gefunden hat diese idealistische Philosophie zum Beispiel in den Satz:
'Am Anfang war das Wort.....'
Es wären also die Ideen die Klassen und die wirklichen Dinge wären die Objekte. Trotzdem hinkt der Vergleich. Klassen haben in der Regel keine vordefinierten Werte (wenn man nicht alle Member static macht). Im Gegensatz zu z.B. Platos 'Idee der Schönheit' wäre eine Klasse definierbar, mit der je nach instantiiertem Objekt sowohl die Schönheit als auch die Häßlichkeit sozusagen als unterschiedlicher Zustand dargestellt werden kann.

@ikaros: 'Denn was was man nicht "sieht" oder beweisen kann existiert nicht'.

halte ich für falsch, auch das ist immer noch Kopflastig. Es gibt eine reale Welt, unabhängig davon, ob der Mensch sie sieht. Nur ist es so, dass Zahl der Dinge und Prozesse, die man sehen und messen kann immer weiter zunimmt. Kein Mensch weiss, was wir alles noch nicht wissen, oder nach Plato bzw. Sokrates: 'ich weiss, dass ich nichts weiss'.
Konkret:
man hat über Wochen über die Vogelgrippe gesprochen, dass und wann sie vielleicht zu uns kommt, bis man auf einmal gemerkt hat, dass sie unerklärlich schon längst bei uns ist.
Der User sieht nicht, ob er die Daten unmittelbar in die Datenbank eingibt, oder ob sich zwischen der Oberfläche und der Datenbank noch eine umfangreiche Zwischenschicht befindet.
Es werden Fassaden programmiert, bei denen lediglich Schnittstellen offengelegt sind, mehr sieht man nicht. Dahinter existiert aber sehr viel nicht offen gelegter Code und erst auf die Dauer lernt man das Verhalten kennen, zum Beispiel bei der Frage, wann und wo 'Dispose' eingesetzt werden muss.

viele Grüße

12.02.2006 - 08:12 Uhr

Es ist so wie bei vielen Dingen im Leben: nach einer steinigen Einstiegsphase kommt eine Zeit, da sieht alles ganz einfach aus. Mit der Zeit merkt man aber, dass es viel schwieriger ist.
Wenn die Programmiererei im Allgemeinen und die OOP im Besonderen so einfach wäre, dann würden nicht ständig neue Programiersprachen und Updates dieser Programmiersprachen entwickelt.
Je vollständiger die Bedürfnisse als Anwender abgebildet werden sollen, desto größer wird die Wahrscheinlichkeit, dass irgendwelche Widersprüche auftauchen, die man behandeln muss. Etwas Abhilfe schafft hier gerade die OOP mit der Idee der Kapselung, wodurch es weniger Abhängigkeiten gibt.
Aber Kapselung und Aufteilung in Komponenten auf der einen Seite, Widerverwendbarkeit von Code und die Forderung 'Einmal und nur Einmal' wegen der besseren Wartbarkeit auf der anderen Seite, auch hier muss das rechte Maß gefunden werden.

25.01.2006 - 16:47 Uhr

Vom Standpunkt eines Anwenders aus ist es schon schön, wenn in einem Kalender im Programm die Feiertage markiert sind. Noch besser ist es, wenn es eine Methode gibt, die ein Datum automatisch darauf überprüft, ob es ein Feiertag ist oder nicht. Man braucht nicht so viel Gehirnschmalz, um Routinearbeit wie Termine-Ausmachen zu erledigen.
Daher und weil ich einfach gerne - hobymässig - programmiere habe ich sowas gemacht. Zum Glück habe ich die angenehme Einschränkung, dass ich nur die Feiertage bei uns am Ort bzw. im Bundesland brauche. Auch ist, da meine Dokumentation papiergestützt läuft, egal, was in vergangenen Jahren war.

Letztlich ist es eine Liste, die jedes Jahr neu aktualisiert werden muss. Man kann's aber auch ein wenig komfortabler gestalten, damit diese Aktualisierung auch halbautomatisch vor sich gehen kann. Auf diese Weise hab ich eine Tabelle: 'Urfeiertage' und eine Tabelle 'FeiertageimJahr'. Die Tabelle 'Urfeiertage' enthält die Namen der Feiertage, ein Feld, ob es ein fester Feiertag ist oder ob er sich nach Ostern richtet usw.
Bei Herstellung der Feiertage für ein bestimmtes Jahr werden dann z.B. die Daten für die Oster-abhängigen Feiertage nach der Osterformel berechnet.
Leider ist es ein wenig umständlich zu beschreiben, aber es funktioniert.

viele Grüße