Seite 173 von 202 ErsteErste ... 73123163169170171172173174175176177183 ... LetzteLetzte
Ergebnis 2.581 bis 2.595 von 3026

Thema: [Programmiererstammtisch] "Zum ächzenden Compiler"

  1. #2581
    Pirat Avatar von Flati
    Registriert seit
    05.12.03
    Beiträge
    10.563
    Zitat Zitat von Harleen Beitrag anzeigen
    Aber wie kann man die Datei namens -rf denn überhaupt per Kommandozeile löschen?
    Und was passiert, wenn man parallel dazu noch eine Datei namens ~ anlegt? Ich bin dafür, dass Mongke das mal testet.
    sudo und am Ende ein / nicht vergessen
    Wer Rechtschreibfehler findet darf diese behalten :)

    Original geschrieben von robertinho:
    "Asterix und Flati stehen für solide Kompetenz und Verlässlichkeit."

  2. #2582
    Geschichtsmeister Avatar von maxim_e
    Registriert seit
    01.02.11
    Beiträge
    5.641
    Ich arbeite gerade mit Python, bzw. tkinter, und ein Fenster gern scrollbar machen, da der angezeigte Text (in einem Grid etwa 40 verschiedene Label-Felder) wesentlich zu lang ist. Ich hab im Netz zwar bereits jede Menge Möglichkeiten für Scrollbars gefunden, aber ich scheitere sie daran sie in mein Programm einzubauen. Ich glaube das Problem könnte sein, dass mein Code in einer Class ist und die Code-Snippets aus dem Netz nicht.

    Achtung Spoiler:
    Code:
        class GUI(object):
        zähler = 0
        def __init__(self):
            self.window = Tk()
            self.window.title("Wahl-O-Mat 1949")
            mainframe = ttk.Frame(self.window, padding="5 5 5 5")
            mainframe.grid(column=0, row=0, sticky=(N, W, E, S))
            self.window.columnconfigure(0, weight=1)
            self.window.rowconfigure(0, weight=1)
    
            ttk.Label(mainframe,
                      text="Vor dem ersten Gebrauch muss der Wahl-O-Mat initialisiert werden. Klicken Sie dazu auf die Schaltfläche \"Initialisieren\".").grid(
                column=1, row=1, sticky=W)
            ttk.Label(mainframe,
                      text="Um den Wahl-O-Maten zu starten, klicken Sie auf die Schaltfläche \"Wahl-O-Mat Starten\".").grid(
                column=1, row=2, sticky=W)
            ttk.Button(mainframe, text="Initialisieren", command=self.initialisieren).grid(column=2, row=1, sticky=W)
            ttk.Button(mainframe, text="Wahl-O-Mat Starten", command=self.starten1).grid(column=2, row=2, sticky=W)
            ttk.Button(mainframe, text="Testen", command=self.testen).grid(column=2, row=3, sticky=W)
    
            for child in mainframe.winfo_children():
                child.grid_configure(padx=5, pady=5)
    
            self.window.mainloop()
            
        def testen(self):
            # Erzeugung des Erklärungsfensters
            efenster = Toplevel(self.window)
            efenster.title("Ergebnisse Wahl-O-Mat 1949")
            efenster.geometry("{0}x{1}+0+0".format(efenster.winfo_screenwidth(), efenster.winfo_screenheight()))
    
            eigen = StringVar()
            A1 = StringVar()
            A2 = StringVar()
            A3 = StringVar()
            B1 = StringVar()
            B2 = StringVar()
            B3 = StringVar()
            C1 = StringVar()
            C2 = StringVar()
            C3 = StringVar()
            D1 = StringVar()
            D2 = StringVar()
            D3 = StringVar()
            E1 = StringVar()
            E2 = StringVar()
            E3 = StringVar()
            F1 = StringVar()
            F2 = StringVar()
            F3 = StringVar()
            G1 = StringVar()
            G2 = StringVar()
            G3 = StringVar()
            H1 = StringVar()
            H2 = StringVar()
            H3 = StringVar()
            I1 = StringVar()
            I2 = StringVar()
            I3 = StringVar()
            J1 = StringVar()
            J2 = StringVar()
            J3 = StringVar()
            K1 = StringVar()
            K2 = StringVar()
            K3 = StringVar()
            L1 = StringVar()
            L2 = StringVar()
            L3 = StringVar()
    
            rahmen1 = Frame(master=efenster)
            rahmen1.pack(side='top', padx='5', pady='5')
            labelheading = Label(master=rahmen1, text="Eigene Meinung")
            labelheading.pack(side='top', padx='5', pady='5')
            labeleigen = Label(master=rahmen1, textvariable=eigen,width=10,font="bold")
            labeleigen.pack(side='top', padx='5', pady='5')
            parteirahmen = Frame(master=rahmen1, bg="white")
            parteirahmen.pack(side='top', padx='5', pady='5')
            rahmen2 = Frame(master=parteirahmen,bg="white")
            rahmen2.pack(side='top', padx='5', pady='5')
            labelA1 = Label(master=rahmen2, textvariable=A1,width=10)
            labelA1.pack(side='left', padx='5', pady='5')
            labelA2 = Label(master=rahmen2, textvariable=A2,width=20)
            labelA2.pack(side='left', padx='5', pady='5')
            labelA3 = Label(master=rahmen2, textvariable=A3,width=200)
            labelA3.pack(side='left', padx='5', pady='5')
            rahmen3 = Frame(master=parteirahmen)
            rahmen3.pack(side='top', padx='5', pady='5')
            labelB1 = Label(master=rahmen3, textvariable=B1,width=10)
            labelB1.pack(side='left', padx='5', pady='5')
            labelB2 = Label(master=rahmen3, textvariable=B2,width=20)
            labelB2.pack(side='left', padx='5', pady='5')
            labelB3 = Label(master=rahmen3, textvariable=B3,width=200)
            labelB3.pack(side='left', padx='5', pady='5')
            rahmen4 = Frame(master=parteirahmen,bg="white")
            rahmen4.pack(side='top', padx='5', pady='5')
            labelC1 = Label(master=rahmen4, textvariable=C1,width=10)
            labelC1.pack(side='left', padx='5', pady='5')
            labelC2 = Label(master=rahmen4, textvariable=C2,width=20)
            labelC2.pack(side='left', padx='5', pady='5')
            labelC3 = Label(master=rahmen4, textvariable=C3,width=200)
            labelC3.pack(side='left', padx='5', pady='5')
            rahmen5 = Frame(master=parteirahmen)
            rahmen5.pack(side='top', padx='5', pady='5')
            labelD1 = Label(master=rahmen5, textvariable=D1,width=10)
            labelD1.pack(side='left', padx='5', pady='5')
            labelD2 = Label(master=rahmen5, textvariable=D2,width=20)
            labelD2.pack(side='left', padx='5', pady='5')
            labelD3 = Label(master=rahmen5, textvariable=D3,width=200)
            labelD3.pack(side='left', padx='5', pady='5')
            rahmen6 = Frame(master=parteirahmen,bg="white")
            rahmen6.pack(side='top', padx='5', pady='5')
            labelE1 = Label(master=rahmen6, textvariable=E1,width=10)
            labelE1.pack(side='left', padx='5', pady='5')
            labelE2 = Label(master=rahmen6, textvariable=E2,width=20)
            labelE2.pack(side='left', padx='5', pady='5')
            labelE3 = Label(master=rahmen6, textvariable=E3,width=200)
            labelE3.pack(side='left', padx='5', pady='5')
            rahmen7 = Frame(master=parteirahmen)
            rahmen7.pack(side='top', padx='5', pady='5')
            labelF1 = Label(master=rahmen7, textvariable=F1,width=10)
            labelF1.pack(side='left', padx='5', pady='5')
            labelF2 = Label(master=rahmen7, textvariable=F2,width=20)
            labelF2.pack(side='left', padx='5', pady='5')
            labelF3 = Label(master=rahmen7, textvariable=F3,width=200)
            labelF3.pack(side='left', padx='5', pady='5')
            rahmen8 = Frame(master=parteirahmen,bg="white")
            rahmen8.pack(side='top', padx='5', pady='5')
            labelG1 = Label(master=rahmen8, textvariable=G1,width=10)
            labelG1.pack(side='left', padx='5', pady='5')
            labelG2 = Label(master=rahmen8, textvariable=G2,width=20)
            labelG2.pack(side='left', padx='5', pady='5')
            labelG3 = Label(master=rahmen8, textvariable=G3,width=200)
            labelG3.pack(side='left', padx='5', pady='5')
            rahmen9 = Frame(master=parteirahmen)
            rahmen9.pack(side='top', padx='5', pady='5')
            labelH1 = Label(master=rahmen9, textvariable=H1,width=10)
            labelH1.pack(side='left', padx='5', pady='5')
            labelH2 = Label(master=rahmen9, textvariable=H2,width=20)
            labelH2.pack(side='left', padx='5', pady='5')
            labelH3 = Label(master=rahmen9, textvariable=H3,width=200)
            labelH3.pack(side='left', padx='5', pady='5')
            rahmen10 = Frame(master=parteirahmen,bg="white")
            rahmen10.pack(side='top', padx='5', pady='5')
            labelI1 = Label(master=rahmen10, textvariable=I1,width=10)
            labelI1.pack(side='left', padx='5', pady='5')
            labelI2 = Label(master=rahmen10, textvariable=I2,width=20)
            labelI2.pack(side='left', padx='5', pady='5')
            labelI3 = Label(master=rahmen10, textvariable=I3,width=200)
            labelI3.pack(side='left', padx='5', pady='5')
            rahmen11 = Frame(master=parteirahmen)
            rahmen11.pack(side='top', padx='5', pady='5')
            labelJ1 = Label(master=rahmen11, textvariable=J1,width=10)
            labelJ1.pack(side='left', padx='5', pady='5')
            labelJ2 = Label(master=rahmen11, textvariable=J2,width=20)
            labelJ2.pack(side='left', padx='5', pady='5')
            labelJ3 = Label(master=rahmen11, textvariable=J3,width=200)
            labelJ3.pack(side='left', padx='5', pady='5')
            rahmen12 = Frame(master=parteirahmen,bg="white")
            rahmen12.pack(side='top', padx='5', pady='5')
            labelK1 = Label(master=rahmen12, textvariable=K1,width=10)
            labelK1.pack(side='left', padx='5', pady='5')
            labelK2 = Label(master=rahmen12, textvariable=K2,width=20)
            labelK2.pack(side='left', padx='5', pady='5')
            labelK3 = Label(master=rahmen12, textvariable=K3,width=200)
            labelK3.pack(side='left', padx='5', pady='5')
            rahmen13 = Frame(master=parteirahmen)
            rahmen13.pack(side='top', padx='5', pady='5')
            labelL1 = Label(master=rahmen13, textvariable=L1,width=10)
            labelL1.pack(side='left', padx='5', pady='5')
            labelL2 = Label(master=rahmen13, textvariable=L2,width=20)
            labelL2.pack(side='left', padx='5', pady='5')
            labelL3 = Label(master=rahmen13, textvariable=L3,width=200)
            labelL3.pack(side='left', padx='5', pady='5')
    
    
    
            wahlliste = open(pfad + "\\wahlliste.txt", "r")
            wl = wahlliste.readlines()
    
            parteiliste=open(pfad + "\\parteiliste.txt", "r")
            partei = parteiliste.readlines()
    
            frage = 1
    
            self.ähnlichkeit(vergleichsarray)
    
            if wl[frage] == "3\n":
                eigen.set("Zustimmung")
            elif wl[frage] == "2\n":
                eigen.set("Neutral")
            elif wl[frage] == "1\n":
                eigen.set("Ablehnung")
            else:
                eigen.set("Keine Meinung")
    
            eingabe = self.vergleichsarray[0][1]
            self.Stellen(eingabe, frage, A1, A2, A3)
            eingabe = self.vergleichsarray[1][1]
            self.Stellen(eingabe, frage, B1, B2, B3)
            eingabe = self.vergleichsarray[2][1]
            self.Stellen(eingabe, frage, C1, C2, C3)
            eingabe = self.vergleichsarray[3][1]
            self.Stellen(eingabe, frage, D1, D2, D3)
            eingabe = self.vergleichsarray[4][1]
            self.Stellen(eingabe, frage, E1, E2, E3)
            eingabe = self.vergleichsarray[5][1]
            self.Stellen(eingabe, frage, F1, F2, F3)
            eingabe = self.vergleichsarray[6][1]
            self.Stellen(eingabe, frage, G1, G2, G3)
            eingabe = self.vergleichsarray[7][1]
            self.Stellen(eingabe, frage, H1, H2, H3)
            eingabe = self.vergleichsarray[8][1]
            self.Stellen(eingabe, frage, I1, I2, I3)
            eingabe = self.vergleichsarray[9][1]
            self.Stellen(eingabe, frage, J1, J2, J3)
            eingabe = self.vergleichsarray[10][1]
            self.Stellen(eingabe, frage, K1, K2, K3)
            eingabe = self.vergleichsarray[11][1]
            self.Stellen(eingabe, frage, L1, L2, L3)
    
    
            efenster.mainloop()
    Ab "parteirahmen" sollen die Sachen scrollbar werden.



    Könnte mir jemand helfen?
    Cancel Culture ist ein Synonym für kritische Gesellschaft.
    Wokeness ist ein Synonym für Anstand.

    The sad truth is/you'd rather follow the school into the net
    cause swimming alone in the sea/is not the kind of freedom that you actually want
    Re-gaining Unconsciousness (NOFX)

  3. #2583
    Pfeffersack Avatar von slowcar
    Registriert seit
    04.01.06
    Ort
    hh
    Beiträge
    18.237
    Von python selbst habe ich keine Ahnung, aber üblicherweise ist es einfacher, wenn man den scrollbaren Bereich in eine separate View legt, also die Layouts verschachtelt.
    Vielleicht kannst Du ein grid erzeugen für die beiden label, die buttons und ein weiteres grid, wo dann (scrollbar) die anderen Elemente drin sind?

  4. #2584
    Pfeffersack Avatar von slowcar
    Registriert seit
    04.01.06
    Ort
    hh
    Beiträge
    18.237
    Witzigen Bug gehabt.
    Unser Mailprogramm erstellt mit S/MIME signierte Nachrichten. Durch eine Änderung in der Serialisierung hatten wir ein Feld, das vorher null war, jetzt mit einem leeren String belegt (json optString gibt "" statt null zurück).
    Bei der Erzeugung des MIME-Contents wurde bei einem Anhang also ein "Content-ID"-Header gesetzt, der dann aber leer war.
    Nicht so tragisch, auch wenn es laut rfc verboten ist, sollte man meinen; aber Outlook für Windows stürzt bei der Anzeige dieser E-Mail dann einfach mal ab.
    Anstatt echten Bug-Reports kann man in Outlook auf oder klicken, habe den Fehler da mal gemeldet - aber wenig Hoffnung, dass den wirklich jemand zu sehen bekommt.

    Nach einem Morgen mit KDiff und jeder Menge mime-Dateien darf jetzt ruhig das Wochenende kommen.

  5. #2585
    Registrierter Benutzer Avatar von alpha civ
    Registriert seit
    22.07.06
    Beiträge
    16.757
    Ja, das sind so Bugs, die einen den Tag versüßen.

  6. #2586
    Wolf im Krokodilpelz Avatar von Mongke Khan
    Registriert seit
    25.06.11
    Ort
    KA
    Beiträge
    19.077
    Ich hab 5h lang nen bug in nem parallelen Programm gesucht, der auf meinem rechner nicht auftrat, weil der zu langsam war, um nebenläufig in das Problem zu rennen Emoticon: hammer2
    Zitat Zitat von Ghaldak Beitrag anzeigen
    Wären die Beiträge der Admins alles, was zählt, dann wäre dieses Forum eine Geisterstadt mit Adventskalender.

  7. #2587
    Pirat Avatar von Flati
    Registriert seit
    05.12.03
    Beiträge
    10.563
    Zitat Zitat von Mongke Khan Beitrag anzeigen
    Ich hab 5h lang nen bug in nem parallelen Programm gesucht, der auf meinem rechner nicht auftrat, weil der zu langsam war, um nebenläufig in das Problem zu rennen Emoticon: hammer2
    Das ist doch noch harmlos, wir hatten schon (Software)Bugs gehabt die nur durch da Hardwarehandling beim Kunden aufgetreten sind, auf Systemen die wir nicht selbst hosten und auch keine Zugriff haben.

    Z.B. Messagebus Schluckauf wenn mal Nachts hin und wieder der Switch umgehangen wird usw. Versuch das mal lokal nachzuvollziehen! Nachdem wir es in Verdacht haben konnten wir es simulieren wenn man mal die Internetverbindung kurz kappt (Netzwerkkabelstecker ziehen), Softwareseitig mal aus und an hat nicht den Fehler provoziert der beim Kunden aufgetreten ist.
    Nebenläufigkeitsachen kann man zumindest theoretisch nachstellen(und wenn man vorher das logging ziemlich erweitert) wenn man weiß wie man die Breakpoints setzen muss und die Möglichkeit hat noch Threaddumps oder so zu ziehen.
    Wer Rechtschreibfehler findet darf diese behalten :)

    Original geschrieben von robertinho:
    "Asterix und Flati stehen für solide Kompetenz und Verlässlichkeit."

  8. #2588
    Frühstücksbonze Avatar von Gullix
    Registriert seit
    21.07.10
    Beiträge
    13.439
    ...also, ist es generell schlechter Stil, im Konstruktor zu viel Komplexität zu haben? Fallsunterscheidungen (nach Konstruktorargument, etwa wie "falls arg2 größer/kleiner/gleich arg3"), andere bereits bestehende Objekte (eines anderen Typs) verändern und so? Ist es ok, dem Konstruktor einen Zeiger auf etwas mitzugeben, sodass er in Felder eines bestehenden Objekts reinschreiben soll?

    /edit: Sprache ist Python.

    /edit2 Zusatzfrage: Check ob Argumente konsistent und ggf Fehler werfen, ist das im Konstruktor ok? Vermute Ja und sogar gut.
    Geändert von Gullix (15. September 2021 um 17:56 Uhr)
    Mit Naturgesetzen kann man nicht verhandeln. --Harald Lesch

    Ein Atomkrieg würde die Menschheit auslöschen. Hätte aber auch Nachteile.

  9. #2589
    ε•ω=1 Avatar von Ramkhamhaeng
    Registriert seit
    19.07.10
    Ort
    Aralkum
    Beiträge
    9.896

  10. #2590
    Heiliger Krieger Avatar von Hagen0
    Registriert seit
    16.01.06
    Beiträge
    6.739
    @Gullix: Würde für solche Sache eher eine Art Factory-Funktion bauen. Aber mit Python kenne ich micht nicht aus.

  11. #2591
    Registrierter Benutzer Avatar von alpha civ
    Registriert seit
    22.07.06
    Beiträge
    16.757
    Ein Konstruktor (bzw. in Python der Initializer) sollte nur die Instanzattribute setzen, sonst nichts. Denn jegliche zusätzliche Logik macht den Konstruktor weniger flexibel, da man auf diese Logik festgelegt ist. Wenn man Objekte dieser Klasse anders erzeugen will/muss, dann muss man den Konstruktor mit weiterer Logik vollstopfen, wodurch die Komplexität ansteigt.

    Ich verfahre immer so, dass ein Objekt nie selbst dafür verantwortlich ist, wie es erzeugt wird. Einfach die Erzeugungslogik in eine Funktion oder eine andere Klasse auslagern. Will man dann ein Objekt der ursprünglichen Klasse auf andere Weise erzeugen, kann man einfach eine weitere Funktion/Klasse implementieren, und vorhandener Code muss nicht geändert werden (und damit auch keine Dokumentation oder Tests).

    Bei deiner Zusatzfrage hängt es davon ab, ob deine Klasse von Dritten verwendet werden soll oder ob das nur eine interne Klasse ist, über die du die volle Kontrolle darüber hast, wie deren Objekte erzeugt werden. Wenn du die Kontrolle hast, dann sollten die übergebenen Werte niemals zu einem Fehler oder inkonsistenten Verhalten führen, sodass Validierungen hier unnötig sind und auch die Flexibilität einschränken können.
    Aber auch für den externen Fall kann es sinnvoll sein, Validierung von Erzeugung zu trennen. Damit ist man in der Lage, für unterschiedliche Situationen unterschiedliche Validierungen anwenden zu können, ohne dass der Konstruktor mit Validierungslogik vollgefrachtet wird.

  12. #2592

  13. #2593
    Registrierter Benutzer Avatar von alpha civ
    Registriert seit
    22.07.06
    Beiträge
    16.757
    Zitat Zitat von slowcar Beitrag anzeigen
    Builder pattern ist für sehr viele und flexible Argumente üblich: https://refactoring.guru/design-patt...python/example
    (Keine Ahnung von Python, hab einfach mal den ersten Link genommen)
    Das sieht eher nach Java-Code aus. Alleine schon die abstrakte Klasse ist unnötig. Und auch sonst zu komplex. Dann lieber Funktoren verwenden für umfangreichere Sachen oder im einfachen Fällen Funktionen. Dann spart man sich Vererbung und die damit verbundene starre Hierachie.

  14. #2594
    Advocatus Diaboli Avatar von Mr. X
    Registriert seit
    01.04.12
    Ort
    Das grüne Herz Deutschlands
    Beiträge
    11.945
    Vor OOP hatte ich nur Probleme. Jetzt habe ich eine ProblemFactory...

    @Gullix: Mir klingt das nach einem architektonischen Schluckauf. Ich bin Freund des Single-Reponsibility-Prinzips. Eine Klasse, eine Aufgabe. Und für die komplexe Interaktion verschiedener Klassen ist dann halt eine Controller-Klasse o.Ä. zuständig. Die dann auch die (geteilte) Ownership der anderen Objekte besitzt.
    Geändert von Mr. X (16. September 2021 um 08:41 Uhr)

  15. #2595
    ε•ω=1 Avatar von Ramkhamhaeng
    Registriert seit
    19.07.10
    Ort
    Aralkum
    Beiträge
    9.896
    Ich lasse auf nem loklem Raspberry-Pie einen Webdienst laufen, der öffentlich erreichbar ist. Dadurch tauchen nat. die automatischen Scans auch im Log auf, die auf bekannte Sicherheitslücken draufhauen wollen. Da es kein richtiger Webserver ist, droht von der Seite her aber keine Gefahr.
    Heute war endlich mal einer dabei, der auch mal alle Links auf der Startseite ausprobierte Leider war auch '/quit' einer der Links

Seite 173 von 202 ErsteErste ... 73123163169170171172173174175176177183 ... LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •