ACHTUNG. Das ist ein Archiv des alten forum.ruby-portal.de. Die aktuelle Mailingliste gibt es auf lists.ruby-lang.org/pipermail/ruby-de.

NOTICE. This is a ready-only copy of the old forum.ruby-portal.de. You can find the current mailing list at lists.ruby-lang.org/pipermail/ruby-de.

Die Programmiersprache Ruby

Blog|

Forum|

Wiki  


Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]

Ein neues Thema erstellen Auf das Thema antworten  [ 11 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: erstes project, gallerycreator
BeitragVerfasst: 01 Okt 2004, 00:31 
Offline
Schüler
Benutzeravatar

Registriert: 24 Sep 2004, 19:14
Beiträge: 30
Wohnort: Aschaffenburg
moinsen, ich mal wieder, diesmal schon mit ersten ergebnissen :) aber für euch sicherlich kleine fische.
hab script geschrieben, das aus einem verzeichnis mit jpgs zusätzlich thumbnails erzeugt, ein html file erstellt und das dazugehörige css file um die platzierung zu gewährleisten. folgende fragen:

1. kann sich das jemand mal anschauen, der lust und zeit hat?
es funzt wunderbar, keine frage, aber da ich anfänger bin kann man sicherlich ein paar sachen besser machen. :roll: oder einfacher...

2. soll ich hier wirklich alle 147 zeilen code posten? wie wird sowas sonst gehandhabt?

wenn ich weiss wie gibts das ergebniss :)

cheers evilbetty :twisted:

_________________
"open da mouth"


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 01 Okt 2004, 09:45 
Offline
Obfuscator

Registriert: 18 Feb 2004, 15:47
Beiträge: 560
Wohnort: Erkelenz (Ostlimburg)
Füg die Datei als Anhang an - heißt in diesem Forum "Attachment".


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 01 Okt 2004, 09:57 
Offline
Schüler
Benutzeravatar

Registriert: 24 Sep 2004, 19:14
Beiträge: 30
Wohnort: Aschaffenburg
ok. hab ich. wär nett wenn sich das jemand mal anschaut und vorschläüge macht.
die version davon die ich nutzen werde ist mittlerweile schon weiter. aber das brauch ich euch nciht zeigen, da ich se nur um ne schriftzug oben und um buttons (statt dem back und next text an den seiten) erweitert habe :)
also bitte keine vorschläge zum design ;)


Dateianhänge:
ullumullu.rb [4.18 KiB]
305-mal heruntergeladen

_________________
"open da mouth"
Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 01 Okt 2004, 11:21 
Offline
Obfuscator
Benutzeravatar

Registriert: 12 Sep 2003, 11:18
Beiträge: 509
Wohnort: Aachen
Was du da geschrieben hast, ist ein ziemlich linearer Code.

Immerhin hast du erkannt, dass du innerhalb einer Zeile 3 Bilder plazierst und deshalb ein "3.times do" drumrumgelegt.
Allerdings hast du auch innerhalb einer Page genau 3 Zeilen, wieso legst du also da nicht auch eine Schleife drumrum?

Dann: Der innere Teil deiner do-Schleifen ist immer gleich. Ist wahrscheinlich durch Copy&Paste entstanden. Solche Teile bieten sich an, in eine Methode ausgelagert zu werden (z.B. als cssFile::writePicPos(picname, pos_top, pos_left). Nicht umsonst heißt es bei uns: Cut/Copy, paste => error.

Ich würde weiter noch die Anzahl der Zeilen und Spalten parametrieren (also die Konstanten durch Variablen ersetzen), die durch einen geeigneten Init-Aufruf vorbesetzt werden - evtl. möchte ich ja auch mal eine Galerie mit 4*5 Bildern statt mit 3*3.

Deine Konstruktion des "Back"-Buttons ist witzig... willst du dir da eine Abfrage sparen? Wie wäre es mit


1
2
3
4
5
6
7
8
9
10
      
firsttime = true
...
if firsttime == false
htmltmp2 = htmltmp1 - 1
htmlFile.write('<p class="back">'"\n")
htmlFile.write('<a href="'+name+htmltmp2.to_s.strip+'.html">back</a>'"\n")
htmlFile.write("</p>\n")
end
firsttime = false;

Wenn ich den Code richtig interpretiere müsste auf deiner letzten erzeugten Seite ein "next"-Button zu sehen sein, der da nicht mehr hingehört. Würde ich mit einem ähnlichen Konstrukt wie beim "back" erschlagen.

Just my 2000 millicent,
pi


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 01 Okt 2004, 12:04 
Offline
Böser Admin 2
Benutzeravatar

Registriert: 17 Mär 2004, 17:03
Beiträge: 2544
Wohnort: Berlin
EvilBetty hat geschrieben:


1
2

if firsttime == false
dafür gibt es


unless firsttime
.
vergleiche mit false, true und nil sind grundsätzlich redundant.

_________________
Ruby-Mine | (almost) murphy.de | rubychan.de


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 01 Okt 2004, 12:19 
Offline
Schüler
Benutzeravatar

Registriert: 24 Sep 2004, 19:14
Beiträge: 30
Wohnort: Aschaffenburg
das mit den methoden klingt einleuchtend ..., sollte ich mir mal anschaun.
ruby ist die erste hochsprache mit der ich mich seit der schule beschäftige, hab sonst die ganze zeit nur bashscripte geschrieben .... und da ist das script nunmal eher linear, und vieles versuche ich durch zusätzliche variablen und hochzählen zu lösen, deshalb auch die "komischen" basteleien :oops:

copy and paste = error ... also alles was sich wiederholt im code soll vermieden werden, richtig?

auf der letzten seite ist kein "next" button ;)
die letzte seite wird seperat ganz unten erstellt, ist vielleicht auch nicht die beste lösung das die letzte seite nochmal ein kompletter abschnitt im code ist, aber es hat geklappt :lol:

danke das du dir erstmal die zeit genommen hast. ich muss noch viel lernen merke ich, wär ja auch schlimm wenn alles auf anhieb klappen würde.
werd das script heute abend nochmal überarbeiten und dann vielleicht die verbesserung nochmal poschten :wink:

danke //EB

_________________
"open da mouth"


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 01 Okt 2004, 12:21 
Offline
Obfuscator
Benutzeravatar

Registriert: 12 Sep 2003, 11:18
Beiträge: 509
Wohnort: Aachen
@murphy: Du hast natürlich recht.
Allerdings bin ich normalerweise C/C++-Coder, und da habe ich mir angewöhnt, mehr zu schreiben als unbedingt erforderlich.
ein


if(!first) 
ist schwieriger zu lesen als ein


if (first == false)
da das Ausrufezeichen schon mal übersehen wird.

Deswegen bin ich auch kein Freund der Schreibweisen


do_something(xxx) if Bedingung

Aber das ist reine Gewohnheit, man möge mir also verzeihen.

Gruß
pi


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 01 Okt 2004, 12:32 
Offline
Obfuscator
Benutzeravatar

Registriert: 12 Sep 2003, 11:18
Beiträge: 509
Wohnort: Aachen
EvilBetty hat geschrieben:
copy and paste = error ... also alles was sich wiederholt im code soll vermieden werden, richtig?

Ja, das ist die eine Variante. Eine der wesentlichen Ideen bei der Objektorientierung ist, dass der Code wiederverwendet werden kann und wiederverwendet wird. Aber eben nicht durch Kopieren (dann hast du bei eine Änderung 2 Stellen, die du anpassen musst) sondern durch den Aufruf von zwei verschiedenen Orten. Also: Kopieren von Code zeugt von unsauberem Design.
Die andere Variante ist, dass beim Kopieren und anschliessenden Anpassen gerne nur eine der beiden Stellen geändert wird, so dass man u.U. denselben Fehler zweimal suchen muss. Also: Kopieren von Code ist fehlerträchtig.

Also: Sein lassen, den doppelt benötigten Code auslagern und notfalls Design anpassen (refactoring).

Gruß
pi


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 07 Okt 2004, 00:51 
Offline
Schüler
Benutzeravatar

Registriert: 24 Sep 2004, 19:14
Beiträge: 30
Wohnort: Aschaffenburg
sodala, hatte heute endlich mal zeit meine hausaufgaben zu machen -> das dingens umzugestalten mit "etwas" objektorientierterem vorgehen.
das hauptporblem an dem ich hängengeblieben bin ist folgendes:

hab ne funktion erstellt:


1
2
3
4
5
6
7
8
9
10
11
12
13

def css_ausrichten (csstop, cssleft, csstmp1)
3.times do
cssFile.write("p.pic"+csstmp1.to_s+"\n")
cssFile.write("{\n")
cssFile.write("position: absolute;\n")
cssFile.write("top: "+csstop.to_s+"px;\n")
cssFile.write("left: "+cssleft.to_s+"px\n")
cssFile.write("}\n")
csstmp1+=1
cssleft+=120
end
end

leider bekomme ich das objekt css.File das im hauptablauf festgelegt wird


1
2

cssFile = File.new(name_css.to_s.strip,"w")

nicht in die funktion rein, das meckert er mir immer an das er das objekt nicht kennt. habs aber auch nicht hinbekommen das global festzulegen. wie geht das, und geht das überhaupt ein objekt global festzulegen, so das es auch von funktionen genutzt werden kann?
oder kann ich das objekt irgenwie sonst an die funktion beim funktionsaufruf an diese weitergeben.

hab auch hier das forum durchsucht und google befragt aber ausser gesteigertem zigarettenkonsum hat mir das nix gebracht :(

_________________
"open da mouth"


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 07 Okt 2004, 08:58 
Offline
Obfuscator
Benutzeravatar

Registriert: 12 Sep 2003, 11:18
Beiträge: 509
Wohnort: Aachen
@evilBetty:
Dein Problem ist mMn. folgendes: du brauchst ein Objekt, das sich wie ein ganz normales File darstellt. Einziger Unterschied: es kennt eine Methode css_ausrichten(...).
Jetzt könnte man die Klasse "File" so erweitern, dass sie diese Methode kennt (ja, das geht in Ruby). Oder aber man könnte eine neue Klasse schaffen, die "im Prinzip" ein File ist, die aber um die neue Methode erweitert ist.

Den 1. Weg wählt man, wenn die neue Funktionalität generell in deinem Programm gebraucht wird (bei CssFile also eher weniger),
die 2. Variante ist genau das, was man bei der OO mit einer Ableitung realisiert und was du hier brauchst:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class CssFile < File # "CssFile ist eine Ableitung von File"
def initialize(fname, mode)
super(fname, mode) # Initialisieren des echten File
end
def css_ausrichten (csstop, cssleft, csstmp1)
3.times do
write("p.pic"+csstmp1.to_s+"\n")
write("{\n")
write("position: absolute;\n")
write("top: "+csstop.to_s+"px;\n")
write("left: "+cssleft.to_s+"px\n")
write("}\n")
csstmp1+=1
cssleft+=120
end
end
end

Die Klasse CssFile "erbt" jetzt alles, was File kann. Du kannst also überall, wo du File verwendest, CssFile ebenfalls verwenden.
Aber: CssFile kennt nun die Methode css_ausrichten(). Beachte, dass in dieser Methode die Methode "write" direkt aufgerufen wird. Das geht, weil es eine Methode von File ist und innerhalb eines File-Objekts aufgerufen wird.
Verwenden kannst du das dann so:


1
2
f = CssFile.new("test.css", "w")
f.css_ausrichten(20,30,5)


Gruß
pi


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 07 Okt 2004, 15:57 
Offline
Schüler
Benutzeravatar

Registriert: 24 Sep 2004, 19:14
Beiträge: 30
Wohnort: Aschaffenburg
ja, so klappt das alles besser ...
danke.
an ne complette klasse hatte ich mich noch nicht rangewagt ... aber nun hab ich das auch hinter mit (wenn acuh nur abgeschrieben) :oops:

_________________
"open da mouth"


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 11 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
cron