Posts by Astorek86

    @__deets__ : Alles klar; das vorige Beispiel mit ABS hilft mir aber trotzdem noch in anderen Fällen^^. Aber stimmt schon, da geht wohl leider nicht viel mehr...


    (Für alle, denen der Hintergrund interessiert: Ich programmier grad an einem kleinen Jump'n Run und will eine "Reibung" bzw. Widerstand des Charakters einbauen, wenn er sich bewegt. Die "Reibung" soll natürlich irgendwann stoppen, weshalb die "0"-Bedingung genauso wichtig ist wie der konstante Wert davon... Die "zahl" ist quasi der Wert der neuen Position, die der Charakter nach der Bearbeitung erhalten soll...


    Ohne Reibung läuft der Charakter bis in alle Ewigkeit in dieselbe Richtung, ohne konstanten Abzug braucht der Charakter Ewigkeiten zum Bremsen und Stillstehen (wenn ich nicht den Wert irgendwann "hart" auf 0 stelle, aber das wär wieder unelegant), und ohne Null-Bedingung würde er plötzlich irgendwann rückwärts laufen oder hin- und herruckeln; da darf natürlich nichts davon passieren^^...)


    __deets__ hat es ja schon korrekt anmerkt: Will ich mit einem konstant Wert abziehen, werde ich wohl um eine Fallunterscheidung nicht herumkommen^^... Ich dachte wohl, eventuell gibts da einen "Trick 17" o.Ä., den ich noch nicht kenne aber anderen bekannt ist^^...

    Einfach Multiplizieren geht leider nicht. Es ist genau so gewollt, dass immer ein bestimmter Wert abgezogen wird, aber nie über 0 hinausgeht (egal von welcher Seite).


    Vielen Dank, genau dieses Beispiel brauchte ich! Ich hatte bisher noch garnichts mit ABS zu tun u. brauch da ein wenig Übung^^.


    Danke! :)

    Mal eine Spezialfrage, wofür ich auf die Schnelle keine Ergebnisse in Google finde:


    Ich möchte gerne eine Zahl näher bzw. direkt an den Wert 0 bringen; die Zahl kann ursprünglich sowohl positiv als auch negativ gewesen sein. Allerdings darf eine positive Zahl nicht negativ werden, und eine negative nicht positiv.


    Dabei suche ich nach einer möglichst "eleganten" Lösung. Irgendwas sagt mir, dass es sie gibt, mir fällt jedoch keine mehr ein^^:


    Die Holzhammermethode dazu wäre ja z.B.


    Eine mMn. deutlich elegantere Lösung, die mir noch einfiele, wäre die Nutzung von min und max:

    Code
    import random
    zahl = random.randint(-5,5)
    verr = 3
    if zahl > 0:
    zahl = max(0, zahl-verr)
    elif zahl < 0:
    zahl = min(0, zahl+verr)

    Ich werde allerdings das Gefühl nicht los, dass es eine NOCH einfachere und elegantere Lösung dieses Problems gibt, ich komme aber nicht drauf. Fällt jemandem womöglich eine elegantere und kürzere Lösung ein, oder lasse ich mich von genanntem Gefühl täuschen? Oder gibt es dafür einen Fachbegriff, den ich ergoogeln kann? Vielen Dank schonmal im Voraus für jeden Vorschlag und jede Hilfe^^.

    Ihr habt ja alle recht, deswegen habe ich meinen Satz ja auch absichtlich mit "Vom Verständnis her..." angefangen und auch tatsächlich "Array" absichtlich verwendet in der Hoffnung, eine Brücke zu anderen Programmiersprachen zu bauen. Die Verwendung und v.a. Vorteile von Dictionarys braucht ja erstmal etwas Zeit, wenn man Ewigkeiten mit Arrays hantiert hat, weil es in vielen anderen Programmiersprachen keine "Key-Value"-ähnlichen Datentypen gibt - geschweigedenn Lists oder Tuples.


    Ich hab den Array-Datentyp ja auch nirgends in Beziehung zu Lists oder gar Tuples gesetzt, von daher...

    Vom Verständnis her ist das einfach, wie ein Array - bloß, dass du die Arrays nicht mit Zahlen, sondern direkt mit ihrem Namen ansprichst.


    Code
    schulnoten = {"thomas":6, "markus":1}
    schueler = "thomas"
    print(schulnoten[schueler])
    schueler = "markus"
    print(schulnoten[schueler])

    Was mache ich hier schon wieder falsch?

    Steht doch da:

    Code
    IndentationError: expected an indented block
    >>>

    Im Gegensatz zu fast allen anderen Programmiersprachen ist in Python die Einrückung Teil der Syntax! Statt wie in anderen Programmiersprachen sowas wie "end if", "wend" (etc.) das Ende einer Schleife zu benutzen, bestimmt die Einrücktiefe, was zu einer Schleife gehört und was nicht.


    Python erwartet nach dem "While"-Befehl eine Schleife, stattdessen schreibst du direkt in derselben Einrücktiefe weiter. Das merkt Python, deshalb bekommst du auch einen IdentationError geworfen...

    Rust stopft halt (ähnlich wie Go) eine bestimmte Lücke, die beim hardwarenahen Programmieren auftritt und von Sprachen wie C nicht gefüllt werden können. Stichwort: Sicheres "Nebenläufiges Programmieren". Scheinbar (Quelle: Hörensagen) legt Rust auch einen Fokus darauf, typische Fehlerchen von C-Programmen gar nicht erst entstehen zu lassen. Und es stimmt ja auch: C-Compiler können Dinge tun, die selbst Fortgeschrittene auf ihren Gebieten nicht bedacht haben^^.


    Das im Golem-Artikel erwähnte "Ownership"-Prinzip finde ich da sehr interessant. Es ist erstmal ungewohnt, aber unglaublich speichereffizient und zwingt den Programmierer, sich weitere Gedanken beim Programmieren zu machen. Ich kann mir kaum vorstellen dass das Prinzip neu ist... Aber warum höre ich von der Methode das erste Mal in Rust, über 40 Jahre nachdem C entwickelt wurde?^^

    Ich erlaube mir mal, den Thread kurz für meine eigene Frage zu verwenden: Und was mache ich, wenn ich den Raspberry Pi 3 als Desktopsystem nutzen will? Wenn ich "mal eben schnell" ein Youtube-Video schauen möchte, müsste ich den Pi runterfahren, die SD-Karte wechseln mit einer, wo Libreelec drauf ist, und das alles wieder hochfahren. Wenn ich dann wieder normal surfen oder den Desktop haben will, geht das Spiel von Vorne los...


    Gibts mittlerweile irgendeine Möglichkeit, Videos direkt von einem laufenden Desktop aus zu starten? Ich war schon länger nicht mehr mit dem Pi unterwegs und wollte einfach mal nachfragen, obs da seitdem Besserung gab^^...

    Go lässt sich auch hervorragend statisch linken, sodass ggf. einfach die Binary ausgeliefert werden könnte. Kennt jemand den Static Site-Generator Hugo, in Golang geschrieben? Von dem Ding downloade ich mir auch nur die Binary-Datei^^.


    Python geschrieben. Da diese Sprachen interpretiert werden liegt immer der Quellcode vor und jeder kann - sofern er/sie will und kann - sich den Code ansehen und prüfen ob das Tool auch keine schlimme Sachen macht :no_sad: und dann ausführen . Oftmals ist es erforderlich das Tool per sudo zu starten und das ist schon sehr sensibel.

    Wenn man den Quelltext einmal ausführt, werden sog. "pyc"-Programme erstellt, die quasi die kompilierte Version des Python-Quelltextes ist (genauer: Der Byte-Code des Quelltextes; Java macht ja auch sowas ähnliches...). Wer Wert darauf legt nicht den Quelltext mitzuliefern, kann auch nur pyc-Dateien bereitstellen...


    Quote

    Je mehr ich jetzt hier schreibe desto mehr denke ich das das eine schlechte Idee ist da keiner irgendein Executable per sudo einfach so ausführen wird und ich bleibe besser doch bei bash bzw Python.

    Ehrlich gesagt würde ich das auch nur bei Programmen mit einer gewissen Historie machen (schon mehrere Versionen veröffentlicht, gewisse Bekanntheit etc.). Ich hasse es ja schon, unbekannte Programme in Windows mit Admin-Rechten starten zu müssen, unter Linux versuche ich das zu vermeiden wo es nur geht ehrlichgesagt^^...

    In diesem Fall kann man die Anleitungen für Raspbian auch problemlos auf einem Archlinux anwenden. Die Anleitungen die ich kenne, kopieren einfach das komplette Dateisystem von SD-Karte zur Festplatte und ändern Werte in der /boot/cmdline.txt ; das kann auch auf Archlinux so angewendet werden.


    Aufpassen muss man bei Dingen, die Raspbian-spezifisch sind. Z.B. "apt-get" gibts für Archlinux ja nicht, da muss man eben das passende Paket mit "pacman" suchen...

    Das ist ein typischer Anfängerfehler - hat jeder mal gemacht, der länger mit "sudo" zu tun hatte ;)


    Das Problem ist Folgendes: Mit "sudo" gibst du deiner _aktuellen_ Anweisung größtmögliche Zugriffsrechte. Pythons "os.system" hingegen wird wieder mit dem Benutzer ausgeführt, der das eigentliche Programm gestartet hat - in der Regel Benutzer "pi", und der hat in Raspbian standardmäßig kein Recht, auf /dev/lp (dort wo Druckzugriff stattfinden soll) zuzugreifen.


    Es gibt mehrere Möglichkeiten, das zu beheben.

    • Die sauberste Methode wäre, deinem Benutzer einfach in eine Gruppe aufzunehmen, denen der Zugriff auf /dev/lp gestattet ist.
      Code
      sudo gpasswd -a pi lp

      ("pi" ist der Benutzer, "lp" ist die Gruppe, denen das Recht zu Drucken genehmigt ist)


      Danach musst du dich einmal ab- und wieder anmelden, damit die Änderung übernommen wird.


      Disclaimer: Ich glaube, dass die Gruppe "lp" heißt - ich kann es nicht mit Gewissheit sagen, da ich Archlinux einsetze und schon lange nichtmehr mit Raspbian gearbeitet habe^^.

    • Methode 2: Du änderst dein Python-Skript so ab, dass es sudo nutzt, z.B.:
      Code
      os.system('sudo lp "testdatei.txt"')


    • Methode 3: Du wechselst erst in eine Shell, und führst erst dann das Python-Skript aus. Der zugehörige Befehl lautet "sudo -s":
      Code
      sudo -s
      python3.4 testprint.py
      exit # Um wieder als Benutzer "pi" zu arbeiten


    Es geht auf dem Raspberry nicht aufgrund von Software-Limitierungen. Ums genauer zu erklären: Die verbreitetste Linux-Distribution ist Raspbian 32bit. Die 32bit-Version von PHP hat z.T. massive Probleme, Dateien zu bearbeiten, die größer als 2 GB sind.


    Eine einfache Lösung des Problems gibt es da nicht. Wenn du einen Raspberry Pi 3 hast, könntest du eine Linux-Distribution verwenden, die auf 64bit-ARM fußt - meines Wissens gibts da für den Raspberry allerdings nur ArchlinuxARM: Archlinux unterscheidet sich im Aufbau schon sehr deutlich von Raspbian und ist generell nicht gerade die anfängerfreundlichste Distro...

    Ehrliche Meinung: Schick den Pi zurück und kauf dir stattdessen einen FireTV-Stick (2. Generation). Ist im Endeffekt billiger (da Netzteil, Fernbedienung & HDMI-Anschluss dabei) und basiert auf Android, dem man mittels Sideloading Kodi (ehem. XBMC) draufspielen kann.


    Der FireTV-Stick bringt zwar sein eigenes Amazon-Ökosystem mit - d.h. du wirst am Startbildschirm ein paar Amazon-Angebote sehen und dich auch mit dem Amazon-Konto einloggen müssen - taugt aber ansonsten problemlos als Abspieler aller möglichen Formate. Offiziell gibts u.a. auch Youtube-, Twitch- und Netflix-Apps aus dem Amazon-Store, und der VLC-Player vom Store spielt auch alles Mögliche ab; alternativ kann, wie bereits erwähnt, Kodi mittels Sideloading installiert und dieses wiederum mit allen möglichen AddOns bespielt werden.


    Der Raspberry Pi ist super, wenn man auf Basteleien steht... Aber bei mir pers. hats nach längerer Verwendungsdauer als Medienplayer immer mal wieder für Probleme gesorgt, weshalb ich das auch nicht mehr verwende. Deinem Beitrag entnehme ich aufgrund deiner Schilderungen, dass du auch nicht die geringste Lust auf Basteleien hast, oder? ;)


    Solltest du dennoch lieber die Raspberry Pi-Methode bevorzugen, wärs sinnvoll, wenn du eine genauere Fehlerbeschreibung mitgeben würdest. Will heißen: An welcher Anleitung hast du dich orientiert (Link bitte), welche Distro und welche Programme verwendest du/hast du dafür verwendet?


    EDIT: Willst du wirklich den Raspberry Pi als Mediencenter verwenden, würde ich gleich auf eine Distro schwenken, die Kodi von Haus aus mitliefert. Besonders erwähnenswert wären dazu LibreELEC oder OpenELEC (keine Ahnung worin die sich unterscheiden; hab Ersteres nie getestet...)

    Getter und Setter sind in Python unüblich (und in der Regel überflüssig), weil es durch die Bank direkten Zugriff auf Attribut gibt.

    Genau das will der Threadersteller doch, steht doch da^^. Mal davon abgesehen, dass der direkte Zugriff auf Attribute auch andere Probleme verursachen kann, weshalb Python mit der "property"-Anweisung überhaupt die Möglichkeit erhalten hat, (vermeintliche) Attribut-Zugriffe durch Methoden zu schleifen statt direkt darauf zuzugreifen...

    Der OP fragt nach Problemen mit "class A:", "class B:" und "property" und bekommt den Hinweis, daß er "new-style classes" in Python 2.x benutzen muß, die von "object" abgeleitet sind. Ich will aber nicht von "object", sondern von "ttk.Button" ableiten.

    Warum nicht einfach von beidem ableiten?^^


    Code
    class Button (object, ttk.Button):

    Dann sollte die "property"-Methode auch funktionieren, oder übersehe ich da was?^^

    Code
    fastcgi_pass unix:/var/run/php5-fpm.sock;

    Jepp, du nutzt eine Socket-Datei ;)


    Ich habe jetzt testweise mal selbst Wordpress auf meinem Pi3 installiert mitsamt dem aReview-Theme und muss sagen: Es läuft recht flüssig bei mir^^. Ich weiß nicht ob es "nur" an PHP 5 liegen kann, aber bei mir fluppt alles mit ungefähr derselben Geschwindigkeit wie meine Nextcloud. Von spürbarer Verzögerung keine Spur, alle Seiten sind in maximal 5 Sekunden geladen. (Kann natürlich auch daran liegen, dass ich noch kaum Inhalte in Wordpress eingefügt habe; hab noch keine große Erfahrung mit der Blogsoftware^^)

    Beim Laden ist maximal ein Kern bei ca 95,5 % Auslastung.

    In Nginx den "worker_process" auf 4 hochgestellt? Nutzt du auch PHP-FPM? (PHP Version 7 hat Einiges an Optimierungen erhalten) Nutzt du für PHP-Dateien eine Socket-Datei (empfehlenswert) oder eine Loopback-Verbindung (eher nicht empfehlenswert)?


    Früher hatte ich Dokuwiki als Blogsoftware am Laufen, was recht performant auf meinem Pi2 lief. Kann vom Funktionsumfang natürlich bei Weitem nicht mit Wordpress mithalten und das System ist auch deutlich anders (u.a. ausschließlich dateibasiert, komplett ohne Datenbank). Momentan nutze ich den Pi2 seit ca. einem Monat problemlos mit Nextcloud 11: Zwar dauert jeder Klick in der Weboberfläche mehrere Sekunden (2-5), aber die sind locker verschmerzbar - und dahinter läuft immerhin MariaDB als Datenbank^^. Wie performant Wordpress generell auf dem Pi ist, kann ich mangels Erfahrung leider nicht sagen^^...


    Ich bin allerdings auch einer von der Sorte, der zuviel Zeit in die Optimierung gesteckt hat. Heißt, dass ich u.a. sogar eine F2FS-Partition nur für den Webroot angelegt habe und generell Archlinux nutze, was stets die neuesten "Stable"-Versionen von MariaDB, nginx und PHP im Repository hat^^.

    Bitte poste soviele Infos wie möglich bei der Fehlersuche.

    • Die komplette Ausgabe des Fehlers, nicht bloß die uninteressanteste Stelle davon. (Du kannst die Fehlermeldung als Text zwischen [code]-Tags schreiben falls die zu lang sind. Aus


      [code]
      Fehlermeldung
      [/code]


      wird

      Code
      Fehlermeldung


    • Nach welcher Anleitung versuchst du PHP zu installieren?
    • Welchen RPi benutzt du? 1, 2, 3, Zero, A/B/+?
    • Wie hast du Raspbian installiert? Z.B. Per NOOBS oder mit Win32DiskImager und einem Raspbian-Image? Wenn ja, welches Image?

    Hey, das sieht ja mega cool aus!
    Leider funktioniert der Link mit der aktuelleren Version nicht mehr... Wäre es möglich dies zu fixen? ;)
    Da ich mich mit Python noch gar nicht auskenne möchte ich es mal wagen..

    pitouch-2016-03-16.zip ;)


    Ich ändere auch alle früheren Beiträge um, damit die Downloadlinks in diesem Thread wieder stimmen^^.


    EDIT: Damit die Bilder auch angezeigt werden, muss noch eine zusätzliche Bibliothek installiert werden. Andernfalls wird maximal der Text, aber keine Bilder angezeigt.


    Benutzt ihr:

    • Raspbian, Debian oder Ubuntu mit Python 3:[font="Courier New"] sudo apt-get install python-imaging[/font]
    • Raspbian, Debian oder Ubuntu mit Python 2:[font="Courier New"] sudo apt-get install python-imaging-tk[/font]
    • Archlinux mit Python 3:[font="Courier New"] sudo pacman -S python-pillow[/font]
    • Archlinux mit Python 2:[font="Courier New"] sudo pacman -S python2-pillow[/font]
    • Windows: Startet CMD als Administrator, wechselt in das Verzeichnis, in dem ihr Python installiert habt (z.B. [font="Courier New"] cd C:\Python27 [/font] , wenn dort Python installiert wurde), wechselt dann in das "Scripts"-Verzeichnis ([font="Courier New"] cd Scripts [/font]) und installiert mittels "pip" die Library nach ([font="Courier New"] pip install Pillow [/font]). Funktioniert das nicht, probiert "easy_install" ( [font="Courier New"]easy_install Pillow[/font] ).