Powerforen Programmier-Wettbewerb

Diskutiere Powerforen Programmier-Wettbewerb im Developer Network Forum im Bereich Hardware & Software Forum; Hallo, Sinvollerweise werden Fehleingaben aber direkt vom Programm abgefangen und ggf. mit einer entsprechenden Fehlermeldung kommentiert...
  • Powerforen Programmier-Wettbewerb Beitrag #101
N

nic_power

Senior Moderator
Dabei seit
27.12.2000
Beiträge
7.838
Reaktionspunkte
2
Hallo,

Verstehst du denn nicht? Wenn du keinen Pfad eingibst, ist source = "" und destination = "". Was passiert wohl, wenn ich dann auf source oder destination zugreifen will!?
Richtig. Ein Runtime-Error, welcher von Microsoft selber abgefangen wird. Ebenfalls erst, nachdem er entstanden ist...
Sinvollerweise werden Fehleingaben aber direkt vom Programm abgefangen und ggf. mit einer entsprechenden Fehlermeldung kommentiert.

Gruss

Nic
 
  • Powerforen Programmier-Wettbewerb Beitrag #102
cmddegi

cmddegi

Bekanntes Mitglied
Dabei seit
12.07.2001
Beiträge
4.740
Reaktionspunkte
0
Ort
Austria
Trµman meint mit Codelänge übrigens sicherlich nicht die Größe der exe; die ist in der Tat vollkommen egal. Aber es gilt beim Programmieren das KISS-Motto: Keep it simple and stupid. Soll heißen: Je kürzer das Programm, desto unwahrscheinlicher sind Fehler, bzw. desto schneller ist es auf Fehler zu überprüfen. Und dieses Prinzip hat hier voll zugeschlagen.

Noch ein kleiner Tipp, seht euch mal das Thema Unit-Test an, wenn Interesse besteht, wie man professionell Fehler findet und vermeidet. In dem Fall würde man wohl die Hauptfunktion kapseln, sei es in eine Funktion oder eine Klasse. Dann, bevor man was programmiert, exakt spezifizieren, welches Verhalten bei welchen Eingaben erwünscht ist, sprich, wie soll die Ausgabe (Zielordner nach dem Vorgang) bei einer bestimmten Eingabe (Datenquelle, Parameter) aussehen. Dann konstruiert man eine Menge Testfälle (verschiedene Parameter, verschiedene Quellordner, ...) und die gewünschten Ausgaben dazu. Dabei legt man speziell Wert darauf, auch Testfälle mit ungültigen Eingaben zu erstellen. Es ist nämlich sehr einfach und wenig aufwändig, zu prüfen, ob ein Programm mit den Eingaben klar kommt, mit denen der Entwickler gerechnet hat. Viel interessanter ist aber, was das Programm mit Eingaben macht, an die der Entwickler nicht gedacht hat.
Mit einem eigenes geschriebenen Programm, oder auch manuell, wird dann jeder dieser Fälle geprüft.
Wenn die Funktion dann wirklich genau das tut, was sie soll, kann man sich deren Verwendung widmen. Entweder ein GUI, eine Konsolenanwendung, oder auch die Verwendung der Funktion als Teil in einem anderen Projekt.
Das Konzept kann man natürlich auch ausweiten; indem auch ein Unit-Test für die Oberfläche geschrieben wird. Also eine Dummy-Kopierfunktion, die nicht wirklich kopiert, sondern auf Testeingaben mit den passenden Ausgaben reagiert, um zu sehen, was das GUI daraus macht.

Speziell von Nutzen ist dieses Konzept, wenn mehrere Leute an einem Projekt arbeiten. Dann werden vor dem Programmieren schon die einzelnen Module anhand ihres Verhaltens exakt spezifiziert, ebenso wie die Schnittstellen natürlich. Oft arbeiten auch verschiedene Leute (mitunter gleichzeitig) an den Unit-Tests und der eigentlichen Entwicklung. Das hat den großen Vorteil, dass dem Test-Entwickler viell. andere Dinge einfallen, als die, die der Programmierer selbst testen würde.

Noch zum GUI: Man sollte nie zu viel Logik ins GUI einbauen. Als Beispiel sollte nicht nur das GUI z.B. Buttons disablen, wenn Eingaben nicht passen oder nicht vorhanden sind. Auch die aufgerufene Funktion selbst sollte nochmal alles auf Korrektheit prüfen. Man weiß nämlich nie, ob man die Funktion nicht mal nach einer Änderung von einem anderen Punkt im Programm aus aufruft, in einem anderen Projekt wiederverwendet, ... Und zu guter Letzt kann die Logik zum Sperren und Entsperren von GUI-Elementen recht komplex werden und dadurch fehleranfällig.
 
Zuletzt bearbeitet:
  • Powerforen Programmier-Wettbewerb Beitrag #103
T

TrµMAn

Bekanntes Mitglied
Dabei seit
23.10.2006
Beiträge
4.882
Reaktionspunkte
2
Ort
Wuppertal
Trµman meint mit Codelänge übrigens sicherlich nicht die Größe der exe; die ist in der Tat vollkommen egal. Aber es gilt beim Programmieren das KISS-Motto: Keep it simple and stupid. Soll heißen: Je kürzer das Programm, desto unwahrscheinlicher sind Fehler, bzw. desto schneller ist es auf Fehler zu überprüfen. Und dieses Prinzip hat hier voll zugeschlagen.

Noch ein kleiner Tipp, seht euch mal das Thema Unit-Test an, wenn Interesse besteht, wie man professionell Fehler findet und vermeidet. In dem Fall würde man wohl die Hauptfunktion kapseln, sei es in eine Funktion oder eine Klasse. Dann, bevor man was programmiert, exakt spezifizieren, welches Verhalten bei welchen Eingaben erwünscht ist, sprich, wie soll die Ausgabe (Zielordner nach dem Vorgang) bei einer bestimmten Eingabe (Datenquelle, Parameter) aussehen. Dann konstruiert man eine Menge Testfälle (verschiedene Parameter, verschiedene Quellordner, ...) und die gewünschten Ausgaben dazu. Dabei legt man speziell Wert darauf, auch Testfälle mit ungültigen Eingaben zu erstellen. Es ist nämlich sehr einfach und wenig aufwändig, zu prüfen, ob ein Programm mit den Eingaben klar kommt, mit denen der Entwickler gerechnet hat. Viel interessanter ist aber, was das Programm mit Eingaben macht, an die der Entwickler nicht gedacht hat.
Mit einem eigenes geschriebenen Programm, oder auch manuell, wird dann jeder dieser Fälle geprüft.
Wenn die Funktion dann wirklich genau das tut, was sie soll, kann man sich deren Verwendung widmen. Entweder ein GUI, eine Konsolenanwendung, oder auch die Verwendung der Funktion als Teil in einem anderen Projekt.
Das Konzept kann man natürlich auch ausweiten; indem auch ein Unit-Test für die Oberfläche geschrieben wird. Also eine Dummy-Kopierfunktion, die nicht wirklich kopiert, sondern auf Testeingaben mit den passenden Ausgaben reagiert, um zu sehen, was das GUI daraus macht.

Speziell von Nutzen ist dieses Konzept, wenn mehrere Leute an einem Projekt arbeiten. Dann werden vor dem Programmieren schon die einzelnen Module anhand ihres Verhaltens exakt spezifiziert, ebenso wie die Schnittstellen natürlich. Oft arbeiten auch verschiedene Leute (mitunter gleichzeitig) an den Unit-Tests und der eigentlichen Entwicklung. Das hat den großen Vorteil, dass dem Test-Entwickler viell. andere Dinge einfallen, als die, die der Programmierer selbst testen würde.

Noch zum GUI: Man sollte nie zu viel Logik ins GUI einbauen. Als Beispiel sollte nicht nur das GUI z.B. Buttons disablen, wenn Eingaben nicht passen oder nicht vorhanden sind. Auch die aufgerufene Funktion selbst sollte nochmal alles auf Korrektheit prüfen. Man weiß nämlich nie, ob man die Funktion nicht mal nach einer Änderung von einem anderen Punkt im Programm aus aufruft, in einem anderen Projekt wiederverwendet, ... Und zu guter Letzt kann die Logik zum Sperren und Entsperren von GUI-Elementen recht komplex werden und dadurch fehleranfällig.

Danke! :goil:

Dachte das mit dem KISS-Prinzip war klar, bin deswegen auch nicht darauf eingegangen. (daraus resultiert ja: jeh mehr code, desto mehr fehler möglich)

des weiteren sollte ein Programmierer nicht betrachten WIE man das Programm benutzen SOLL sondern WIE man das Programm benutzen KANN ... Dazu gehört eben das was cmddegi geschrieben hat, dass die Logic in der Funktion abgefragt wird.

wenn ich auf der Arbeit so programmieren würde, wie du, würden wir ruck-zuck all unsere Kunden verlieren! Du musst stehts davon ausgehen, dass jemand vor deinem Programm sitzt, der den Quellcode NICHT kennt, im grunde konnte ich zwar schon vorher sagen, dass es nen Fehler geben wird aber die bestätigung ist traurig.

Meine Aufgabe war es allerdings deinen Code und dein Programm auf Herz und Nieren zu prüfen und nicht das ganze zu debuggen damit mein System keinen Schaden davon trägt

So? Kommt bei dir der Bluescreen oder die Kernel Panic, bevor oder nach dem einen Adresse 0x00000000 ist?

Der bluescreen unterichtet mich allerdings darüber, welche Adresse (und evtl. warum diese) 0 ist! Dein Programm schmiert ab OHNE mir zu sagen, dass ich auf einmal die Dateien auf C: sortiert habe ...

ENTWEDER soll dein Programm von C: ausgehen ODER einen Fehler produzieren ... beides ist unsinnig

Fehlerhandling ist die halbe miete, gute Kommentare die andere
 
  • Powerforen Programmier-Wettbewerb Beitrag #104
S

Stefan

Guest
ich entscheide mich also für den doch sehr viel einfacheren Code von StGaensler.
Herzlichen Dank für den ersten Platz! Ich fühle mich geehrt :)
Stimmt. Wir haben ja keine Regelung, was eigentlich Abgegeben werden muss.
Keine Angaben zum Zielsystem, keine Größen-Begrenzung, keine Angaben zu "verbotenen" Inkludes. Auch steht nirgends ob eine GUI bevorzug wird, ode reine Konsole mit Argumenten besser sei.
Genauere Angaben hätte ich mir auch gewünscht, wurde ja oft genug angesprochen.
Keine Angabe ob das Programm geschwindigkeitsoptimiert werden darf
Das Programm darf natürlich immer so schnell wie möglich sein ;)
Einfach die Tatsachen ins Auge fassen:
Somit kann auch ein Code von 6 Zeilen gegen einen von 1337 (680 GUI + 357 Console) Zeilen gewinnen.
Je "tiefer" man sich mit der Programmiersprache ins System begibt, desto mehr Zeilen werden es - zwangsweise.
Auch finde ich es sehr schade, das nur 2 Programme abgegeben wurden.
Da hätte ich mir auch mehr Konkurrenz gewünscht. Wo wart ihr?
Aber trotz allem: Herzlichen Glückwunsch Stefan:goil:
Dankeschön, und auch von mir einen Glückwunsch zum zweiten Platz.
Wenn mein Code 24 Sekunden und Stefans nur 20 Sekunden für die gleiche Menge an Daten (=10.592) benötigt hat, heißt das, dass das kopieren pro Datei durchschnittlich 0,4413-Periode Sekunden benötigt hat.
Mit schreiben der Infos komme ich auf ganze 0,5296 Sekunden.
Wenn ich meine Statistik-Informationen (bis auf die Zeitausgabe) rausschmeiße, bin ich auch nochmal um 28 % schneller :)
Zu den Kommentaren: Bei StGaenslers Code sind kommentare wirklich überflüssig, so in etwa wie die hälfte der Kommentare die Max benutzt hat ;) Kommentare beschreiben bei dir einfach öfters WAS du tust, anstatt warum du es tust
Nun, jeder hat seinen Eigenen Stil. Ich kommentierte von Anfang an so - und nicht anders. Ich habe auch ncith vor meinen "Stil" zu ändern, es gab noch nie Probleme/Beschwerden...
Da muss ich TrµMAn aber zustimmen. Kommentare sollen dazu dienen, damit du später noch sehen kannst, warum du dies oder jenes machst. Was das Programm an der Stelle macht, siehst du ja bereits am Quellcode.
Und Stefan, willst du ihn veröffentlichen!?
Gerne, hat sich nicht mehr viel verändert. Ist noch die Anzeige der verstrichenen Zeit dazugekommen, und ich pass nun auf, dass ich die move.exe auch nicht verschiebe.
Code:
# move.rb, StGaensler, 2009-07-24
require 'FileUtils'

count = 0
output = ''
time = Time.now

FileUtils.makedirs(('a'..'z').to_a)
Dir.foreach('.'){|f| output += "#{f} - #{File.size(f).to_s} Bytes\n" and FileUtils.mv f, f[0,1].downcase + '/' + f and count += 1 unless File.ftype(f) != 'file' or !('a'..'z').member?(f[0,1].downcase) or ['move.rb', 'move.exe'].include?(f)}
puts "#{output}---\nEs wurde#{count == 1 ? '' : 'n'} #{count} Datei#{count == 1 ? '' : 'en'} in #{Time.now - time} Sekunden verschoben."
Trµman meint mit Codelänge übrigens sicherlich nicht die Größe der exe; die ist in der Tat vollkommen egal. Aber es gilt beim Programmieren das KISS-Motto: Keep it simple and stupid. Soll heißen: Je kürzer das Programm, desto unwahrscheinlicher sind Fehler, bzw. desto schneller ist es auf Fehler zu überprüfen. Und dieses Prinzip hat hier voll zugeschlagen.
Genau, man sollte einfach die richtigen Funktionen verwenden. Beispielsweise das Erstellen der Verzeichnisse - da muss ich gucken, ob es das Verzeichnis (und die Oberverzeichnisse) schon gibt, und wenn nicht, dann erstelle ich sie. Naja, das ist eine Funktion: mkdir_p (bzw. ich habe makedirs verwendet, für nen schöneren Code ;))
Dann brauche ich alle Buchstaben von a bis z - kein Problem, sind in 'a'..'z' drinnen. Jetzt will mkdir_p die zu erstellenden Verzeichnisse als Array haben, also noch ein .to_a hingehängt, und fertig sind wir :)
Wieso sollte ich mir da mehr Arbeit als nötig machen? ;)
Noch ein kleiner Tipp, seht euch mal das Thema Unit-Test an, wenn Interesse besteht, wie man professionell Fehler findet und vermeidet.
Da könnte ich wen brauchen, der für ne fertige Anwendung welche schreibt ;)

Freundliche Grüße

Stefan
 
  • Powerforen Programmier-Wettbewerb Beitrag #106
bummelbum

bummelbum

Bekanntes Mitglied
Dabei seit
18.04.2009
Beiträge
946
Reaktionspunkte
0
So,
war leider privat Unterwegs und im Krankenhaus etc.
Soll keine Ausrede sein,
freue mich aber das hier einiges Zustande gekommen ist.

Wollen wir einen neuen Wettbewerb starten mit genügend Zeit?
Ich wollte selber doch auch mitmachen :).

Und was die Codes anbelangt.
Wir könnten Sie hier posten oder ich könnte Sie auf meiner Homepage veröffentlichen.
Dort ist ja sowieso schon eine Seite dem PF-Wettbewerb gewidmet.

Danke
 
  • Powerforen Programmier-Wettbewerb Beitrag #107
Anno1989

Anno1989

Bekanntes Mitglied
Dabei seit
30.04.2006
Beiträge
1.293
Reaktionspunkte
0
Ort
NRW
Tut mir Leid, dass ich mich jetzt erst melde. Habe zur Zeit viel privat um die Ohren...
Kann daher leider nicht mitmachen.
 
  • Powerforen Programmier-Wettbewerb Beitrag #108
Max11.111

Max11.111

Bekanntes Mitglied
Dabei seit
12.06.2008
Beiträge
2.416
Reaktionspunkte
0
Na dann machen wir eben nochmal eine Powerforen Programmier-Wettbewerb 2009, oder warten bis Neujahr...
Ich hoffe das die Beteiligung (bei dem Einsendern & Juroren) deutlich steigt.
 
  • Powerforen Programmier-Wettbewerb Beitrag #109
D3athSØul

D3athSØul

Bekanntes Mitglied
Dabei seit
05.01.2009
Beiträge
366
Reaktionspunkte
0
Ort
127.0.0.1
Na dann machen wir eben nochmal eine Powerforen Programmier-Wettbewerb 2009, oder warten bis Neujahr...
Ich hoffe das die Beteiligung (bei dem Einsendern & Juroren) deutlich steigt.

Ich bin dann mit meinem nachgereichten Programm wieder am Start :ja:

Schlechter als der letzte, wegen verfehlens des Themas, kann ich nicht werden :lol:
 
  • Powerforen Programmier-Wettbewerb Beitrag #110
Max11.111

Max11.111

Bekanntes Mitglied
Dabei seit
12.06.2008
Beiträge
2.416
Reaktionspunkte
0
Ich hoffe doch das es eine Fortsetzung gibt. Möglichst noch heuer...;)
Und alles etwas ausgereifter und präziser, mehr Teilnehmer, mehr Juroren, alles besser Geplant.:)
 
  • Powerforen Programmier-Wettbewerb Beitrag #112
Cheddar

Cheddar

Bekanntes Mitglied
Dabei seit
05.04.2009
Beiträge
453
Reaktionspunkte
0
Ort
Cheddar (Somerset)
Man sollte vielleicht nächstes mal alles organisieren und dann eine Aufgabe stellen, sonst rennt die Zeit davon. Dadurch hätte man genug Zeit um Juroren auszuwählen, konkrete Regeln zu bestimmen und nachzufragen, wer denn mitmachen würde - eventuell könnte man sich ja mal über Preise Gedanken machen ;)
Ein voller Erfolg war es diesmal zwar nicht, aber es ist doch was einigermaßen anständiges rausgekommen.
 
  • Powerforen Programmier-Wettbewerb Beitrag #113
Max11.111

Max11.111

Bekanntes Mitglied
Dabei seit
12.06.2008
Beiträge
2.416
Reaktionspunkte
0
Ein voller Erfolg war es diesmal zwar nicht, aber es ist doch was einigermaßen anständiges rausgekommen.
Man lernt aus seinen Fehlern! Das war sozusagen der "Testlauf" und der nächste Wettbewerb wir besser. Versprochen...;)

Und du machst auch mit. Ich zähl auf dich!
 
Thema:

Powerforen Programmier-Wettbewerb

ANGEBOTE & SPONSOREN

https://www.mofapower.de/

Statistik des Forums

Themen
213.179
Beiträge
1.579.172
Mitglieder
55.878
Neuestes Mitglied
Satan666
Oben