Posts by Manul

    also... cron / crontab ist veraltet, der aktuelle Weg zum Starten von Diensten ist systemd.

    Das halte ich nach wie vor so pauschal für nicht richtig. systemd kann vieles und hat viele Möglichkeiten, cron hat m.E. aber nach wie vor seine Daseinsberechtigung.


    Das bezieht sich ausdrücklich nicht auf diesen konkreten Fall, hier würde ich auch annehmen, daß eine systemd service unit der richtige Weg ist.

    Wenn du durch bist, würde mich dein Urteil interessieren

    "Durch" werde ich wahrscheinlich nie sein, ich habe nicht vor, das komplett durchzuarbeiten.


    Was ich mir vorgenommen habe, ist, von jeder Schwierigkeitsstufe (Easy, Medium, Hard, Nightmare) ein Projekt durchzuarbeiten. Mit den ersten dreien bin ich durch.


    Wirklich neues gelernt habe ich bisher nicht, aber zumindest das letzte Projekt war durchaus eine Herausforderung und hat mich einige Dinge, die ich prinzipiell bereits kannte, nochmal neu überdenken lassen.


    Mein Eindruck bisher ist gemischt:


    - Das Format gefällt mir sehr gut, die Abwechslung zwischen theoretischen Lektionen mit Testfragen und kleinen Übungsaufgaben einerseits und schrittweiser Arbeit am ausgesuchten Projekt andererseits funktioniert prima.


    - Die Integration ins IDE funktioniert sehr gut.


    - Die Qualität der Erklärungen ist gemischt. Teilweise sehr klar und präzise, teilweise hätte ich mir etwas mehr Präzision gewünscht. Die Beispiele sind m.E. nicht immer 100%ig glücklich gewählt.


    - Die Ersteller scheinen ihr eigenes Format sehr ernst zu nehmen. D.h., offenbar muß es zu jeder Theorielektion Fragen und Übungsaufgaben geben. Das führt teilweise zu etwas an den Haaren herbeigezogenen Exemplaren dieser Gattung.


    Bis jetzt würde ich sagen: Solange es nichts kostet und wenn prinzipielles Interesse am Thema besteht, unbedingt reinschauen! Bis das Angebot auf einem Niveau ist, für das ich auch Geld bezahlen würde, braucht es m.E. aber noch etwas Feinschliff.

    Ich bin die Tage drüber gestolpert und dachte, es könnte für ein paar Leute hier im Forum interessant sein: Die JetBrains Academy befindet sich derzeit in der Einführungsphase und ist kostenlos zugänglich. Eine Registrierung ist allerdings notwendig.


    Es handelt sich um einen Onlinekurs zur Programmierung. Zur Auswahl stehen neben Python auch noch Kotlin und Java. Der Kurs ist projektorientiert: Man sucht sich eines der angebotenen Projekte verschiedener Schwierigkeitsgrade aus und setzt das dann in mehreren Stufen um.


    Am Anfang jeder Stufe steht ein Überblick, was in dieser Stufe erreicht werden soll. Dann folgen einige kurze Lektionen zu benötigten Grundlagen, die jeweils aus einer kurzen Erklärung und einigen Übungsaufgaben bestehen. Diese Lektionen lassen sich auch überspringen, wenn man das Thema bereits beherrscht. Am Schluß der Stufe muß man dann das anfangs gesteckte Ziel umsetzen. Die Programmierung kann entweder in einem Codeeditor im Browser oder in einem der JetBrains IDEs (für Python ist das PyCharm) erfolgen.


    Die Spanne der Projekte reicht von "Hello, World!" bis zu Webapplikationen mit Django.


    Ich habe gestern mal angefangen, in den Pythonkurs reinzuschnuppern. Für ein abschließendes Urteil ist es zu früh, aber der erste Eindruck ist durchaus gut.

    Ist es aber lapidar nun so:

    Wenn die Entwickler jetzt noch hinschreiben würden "Nicht unterstütztes Audio-Format", dann wäre ich doch schneller draufgekommen. Aber wie Entwickler nun mal so sind, können sie nicht mehr über den Tellerrand schauen. Der dumme User kapiert nix, löscht und vergißt ampache eben wieder.

    Ich kenne Ampache nicht, aber bist Du Dir denn sicher, daß die Meldung von Ampache und nicht von Deinem Windowsbrowser kommt? Wenn's auf dem Tablet funktioniert, würde ich fast auf letzteres tippen. Nach meinem oberflächlichen Verständnis stellt Ampache die Datei, so wie sie ist, als Stream bereit. Fürs Abspielen (und damit auch fürs Unterstützen) ist dann der Client verantwortlich.

    @__deets__: Ich kenne die Seite sonst nicht, war halt einer der ersten Treffer, die die Suche nach dem Unterschied bei input() zwischen Python 2 und Python 3 ausspuckte. An der speziellen Erklärung kann ich auch nichts falsches finden.


    Das hier:

    Denn ein NameError x wie behauptet kann es damit nicht kommen.

    Stimmt übrigens nicht, wenn man den Fehler im except bereinigt und dann den Code mit Python 2 ausführt und "x" als Nachnamen eingibt, kommt tatsächlich genau die zitierte Fehlermeldung.

    Spannendes Thema. Ich betreibe meinen Heimserver (Debian auf x86) seit einiger Zeit mit btrfs. Die Snapshotfunktionalität nutze ich bisher nur für lxd-Container, die Nutzung fürs Backup habe ich im Hinterkopf, bin aber noch nicht dazu gekommen, mich damit zu beschäftigen.

    Also <. hallo.py>

    Das wird so nicht funktionieren: Mit "." oder "source" liest die Shell den Inhalt des angegebenen Skripts als Eingabe, versucht ihn also als Shelffbefehle zu interpretieren. Bei einem Pythonskript funktioniert das nicht.

    Hast Du während des Installationsvorgangs mal den Ressourcenverbrauch beobachtet? Vielleicht schlägt hier ja der OOM-Killer zu.


    Was Du noch versuchen könntest:


    • Die (wie ich vermute) Abhängigkeit lxml separat installieren (sudo pip install lxml).
    • Schauen, ob python-lxml als Paket verfügbar ist (sudo apt install python-lxml).

    Edit: Schon wieder zu langsam...

    In Zeile 39 mit

    Python
            url = self.myradio.get()

    Wie kommst Du darauf? Ich sehe in dieser Zeile weder RADIOBOB noch ROCKANTENNE, also greifst Du auch nicht auf diese Konstanten zu. Wie übrigens auch sonst nirgends in Deinem Code.

    Die Variable ist leer.

    Richtig.

    Weil

    Code
    url = ''

    An der falschen Stelle steht, ich habe die url durch klicken auf meinen Button beschrieben und durch klicken auf Play lösche ich den Inhalt wieder.

    Nicht richtig. Noch mal der Hinweis: Beschäftige Dich mit dem "scope" von Variablen in Python.

    Den aus Zeile 39 :danke_ATDE:

    Nein. Tip: Gib nach Zeile 39 mal den Inhalt der Variablen aus (per print() z.B.).

    Ich erstelle Methoden mit def xxx(self): das self darin muss als Refernez angegeben werden. Hier richtig. Warum ist das so? Wofür steht das self?

    Wenn ich nur einen Variablenname schreibe, dann bezieht sich die Variable nicht auf eine Methode, sondern sie muss global, außerhalb einer Klasse beschrieben werden?

    Nein. Auch hier wiederhole ich den Hinweis: Beschäftige Dich mit objektorientierter Programmierung in Python. Ein paar Begriffe zum Suchen sind bspw. "Klasse", "Instanz", "Klassenvariable", "Instanzvariable". Und hatte ich schon "scope" erwähnt? ;)

    Ich kann auch Variabeln innerhalb einer Klasse beschreiben, diese sind dann für alle Methoden vordefiniert und können mit Klassename.Variable aufgerufen werden? Versuch dazu im Code unten.

    Das geht, ja. Das ist dann die genannte Klassenvariable. Du suchst eigentlich nach der ebenfalls bereits erwähnten Instanzvariable. Da Du in Deinem Code nur eine Instanz Deiner Klasse anlegst, funktioniert beides, sauber ist die Lösung aber nicht.

    Die Fragezeichen in meiner Antwort sollen andeuten, dass ich das so verstanden habe und gerne ene Bestätigung oder Korrektur dazu erhalten würde.

    Habe ich hiermit versucht. :)

    Wenn das so richtig wäre, hätte ich meinen Code so ageändert, wie unten angehängt.

    Falls das dann passt, würde ich mich um die Dictionary kümmern.

    Funktioniert's denn? Wenn nicht würde ich sagen, passt noch nicht... ;)

    Ich habe das Gefühl, Du hast Du noch ein paar grundsätzliche Verständnisprobleme, was das Programmieren, im Speziellen mit Python, angeht. Bevor Du den – ansonsten sehr guten – Tip mit dem dictionary umsetzt, solltest Du m.E. die angehen.


    Hierzu ein paar Fragen zu Deinem Code, die vielleicht zum Nachdenken in die richtige Richtung anregen können:

    • In Zeile 7 und 8 definierst Du Konstanten, die die URLs der Radiosender enthalten. Wo im Code greifst Du auf diese Konstanten wieder zu?
    • Welchen Wert hat die Variable url nach Codezeile in #6?
    • Welchen Wert müsste sie in Zeile 4 im selben Codeschnipsel haben?
    • An manchen Stellen in Deinem Code steht self.<Variablenname>, an anderen nur <Variablenname>. Warum ist das so? Tip: Es hat etwas mit objektorientierter Programmierung und mit dem "scope" (nützliches Stichwort zum Suchen) von Variablen zu tun.

    Mein Vorschlag zur ursprünglichen Frage, ungeachtet der Frage, ob sqlite oder das csv-Modul die bessere Lösung wären:

    Code
    file = 'test.csv'
    entry = "neu1,neu2\n"
    with open(file,'r+') as csvfile:
        lines = csvfile.readlines()
        del lines[1]
        lines.append(entry)
        csvfile.seek(0)
        csvfile.writelines(lines)
        csvfile.truncate()

    Du kannst per systemd und cgroups die Ressourcenverteilung relativ detailliert konfigurieren. Leider habe ich bis jetzt kein Tutorial gefunden, das die damit verbundenen Möglichkeiten übersichtlich und umfassend darstellt. Vielleicht kennt ja jemand anderes eines. Ansonsten Websuchen und die diversen Fundstücke selbst zusammenpuzzlen.