Ein c't Video was ich mal empfehlen kann 🙂 Zielgruppe Windows User, die die Bevormundung durch M$ satt haben. Viel Spaß beim Anschauen und beim Installieren von Linux.
-
Marius Nestor / März 28
Ubuntu Cinnamon Remix Becomes Official Ubuntu Flavor - 9to5Linux Ubuntu Cinnamon Remix Becomes Official Ubuntu Flavor - 9to5Linux
Ubuntu Cinnamon distribution has officially become an official Ubuntu flavor starting with the upcoming Ubuntu 23.04 (Lunar Lobster) release.
Solche Nachrichten lese ich sehr gerne, war Cinnamon doch der erste Desktop, mit dem ich die Linux Welt erkundet habe.
-
Release 1.28.0 · dani-garcia/vaultwarden Release 1.28.0 · dani-garcia/vaultwarden
Major changes The project has changed license to the AGPLv3. If you're hosting a Vaultwarden instance, you now have a requirement to distribute the Vaultwarden source code to your users if the...
Danke @Nico
root :~# vaultwarden -v vaultwarden 1.28.0 -
Das NodeBB-Team arbeitet schon etwas länger an einer Version 3. Da es jetzt seit ein paar Tagen einen RC1 gibt, sollte man da mal reinschauen 😉
Da ich zwei Foren habe, das eine dient mir mehr oder weniger als Testforum, rollen wir das da mal aus.
Wenn ihr das auch machen wollt, dann dran denken Backup der Daten und der DB machen! Ok, es geht los.
./nodebb stop git fetch && git checkout develop && git reset --hard origin/develop ./nodebb upgrade ./nodebb startDanach ist man auf v3.0.0-rc.1
9f8cc44a-175c-4813-878b-88a7a5b17cf5-grafik.png
Ich hatte mich gewundert, das es so wenig anders aussah als vorher. Da fiel mir was ein. Man benutzt ja jetzt standardmäßig ein neues Theme.
f9c7d02f-69a6-410f-a04d-c97de915acfa-grafik.png
So sieht das dann aus.
856a44db-565c-4973-a0e3-8658ef880a94-grafik.png
Jetzt geht es ans ausprobieren und testen. Dann ist vielleicht auch bald dieses Forum auf v3.0.0-rc.1
-
-
Ich habe mir das jetzt einige Tage gegeben und habe mich dagegen entschieden. Werde weiterhin PyWebIO benutzen. Hauptgrund ist die wesentlich bessere Dokumentation -> https://pywebio.readthedocs.io/en/latest/index.html
Da kann ich mir auch mit meinem Python Kenntnisstand die Informationen holen, die ich brauche um es einzusetzen.
-
@FrankM sagte in Manjaro KDE Plasma 21.2.6:
Eines betrifft die Anordnung der Icons auf dem Desktop. Die Anordnung, die ich wähle, werden immer wieder geändert. Unschön, aber den Desktop nutze ich so gut wie gar nicht. Also kann ich auch auf den Fix warten.
Kann noch was dauern
Nate / März 4
This week in KDE: Plasma 6 begins This week in KDE: Plasma 6 begins
As has been reported in various other places already, this week the “master” branch of Plasma-aligned software repos have been ported to Qt 6. Work is ongoing, but the actual change-ove…
Desktop icons on the active activity should no longer inappropriately re-arrange themselves when the set of connected screens changes. However during the process of investigation, we discovered that the code for storing desktop file position is inherently problematic and in need of a fundamental rewrite just like we did for multi-screen arrangement in Plasma 5.27. This will be done for Plasma 6.0, and hopefully make Plasma’s long history of being bad about remembering desktop icon positions just that–history (Marco Martin, Plasma 5.27.3. Link)
-
@FrankM sagte in Docker & Redis Datenbank:
save 60 1
#save 900 1
save 300 10
save 60 10000Hier kann man auch noch schön sehen, wie ich gekämpft habe, bis ich mal eine dump.rdb gesehen habe. Auch irgendwie logisch, das ich nie eine gesehen hatte, wenn man weiß das
save 900 1bedeutet, das er alle 900 Sekunden speichert, wenn mindestens eine Änderung vorhanden ist. Das kann dann schon was dauern. Ich habe das dann mal verkürzt, damit ich schneller ein Ergebnis habe.
save 60 1Das brachte mich dann dem Ziel näher. Danach konnte ich die dump.rdb auch finden.
Bitte keine Redis DB ohne Passwort laufen lassen! -
Heute dann die nächste Herausforderung. Mein JSON soll so aussehen, damit ich das entsprechend erweitern kann.
Stocks {0: {'stockname': 'Deutsche Telekom Aktie', 'wkn1': '4534543534', 'wkn2': 'sfsdfsdfsfdfd', 'quantity': 100}, 1: {'stockname': 'Henkel', 'wkn1': '4534543534', 'wkn2': 'sfsdfsdfsfdfd', 'quantity': 50}}Die Daten sollen wie oben schon ausprobiert, in einer Redis Datenbank liegen. So weit auch kein großes Problem. ABER, der Zugriff auf diese Daten war dann meine nächste Hürde 🙂
Ok, ich habe also mehrere Einträge im JSON File bzw. in der Datenbank. Wie komme ich da nun wieder dran. Ein paar ☕ später dann die Lösung.
Wie komme ich an den einzelnen Eintrag, also über den Index??
r1.json().get('stocks', 1)Gibt als Ergebnis
{'stockname': 'Henkel', 'wkn1': '4534543534', 'wkn2': 'sfsdfsdfsfdfd', 'quantity': 50}
Ok, das passt schon mal. Somit kann man dann gewohnt auf die einzelnen Elemente zugreifen.
print("TESTING", testing['stockname'])Ausgabe
TESTING HenkelOk, Teil 1 erledigt. Jetzt habe ich ja irgendwann mehrere Elemente in der Liste und brauch dann den letzten Index , um damit was machen zu können. Also, z.B. durch die Daten zu loopen.
objkeys = r1.json().objkeys('stocks') print("Objkeys", objkeys)Ausgabe
Objkeys ['0', '1']Ok, kommt eine Liste des Index zurück. Damit kann man arbeiten 😉
Ich hatte dann zum Testen mittels einer while Schleife die Daten geladen, aber jetzt beim Tippen klingelt es und wir machen das schön mit enumerate 😉
@staticmethod def load(): data = {} for count, value in enumerate(objkeys): testing = r1.json().get('stocks', count) data[count] = { "stockname": testing['stockname'], "wkn1": testing['wkn1'], "wkn2": testing['wkn2'], "quantity": testing['quantity']} return dataSomit habe ich die Daten aus der Redis Datenbank in einem Objekt und kann damit arbeiten.
-
Ich habe ja gelegentlich Kontakt zu ein paar wenigen Entwicklern. Die Sprache dabei ist englisch, wie ihr ja alle wisst. Da ist es sehr blöd, wenn man aus der Konsole was kopiert, das in deutsch ist und man es z.B. Dan vom Manjaro ARM Team schickt.
Das hatte ich tatsächlich schon, das es danach viele Nachfragen gab, die man sich ganz einfach ersparen kann. Mit folgender Umgebungsvariable kann man das in englisch ausgeben 🤓
LC_ALL=CBeispielausgabe mit dem Befehl free
[frank-ms7c92 ~]# free gesamt benutzt frei gemns. Puffer/Cache verfügbar Speicher: 61609880 13752348 36892556 837540 10964976 46327716 Swap: 67767424 0 67767424 [frank-ms7c92 ~]# LC_ALL=C free total used free shared buff/cache available Mem: 61609880 13781124 36863292 837540 10965464 46298944 Wofür steht das C ?The C locale is a special locale that is meant to be the simplest locale. You could also say that while the other locales are for humans, the C locale is for computers. In the C locale, characters are single bytes, the charset is ASCII (well, is not required to, but in practice will be in the systems most of us will ever get to use), the sorting order is based on the byte values¹, the language is usually US English (though for application messages (as opposed to things like month or day names or messages by system libraries), it's at the discretion of the application author) and things like currency symbols are not defined.
Quelle: https://unix.stackexchange.com/questions/87745/what-does-lc-all-c-do
-
ja ich hab im ersten Moment einen Schreck bekommen wo ich die DNS Adresse gesehen hab,
aber auch schnell festgestellt das die alle ins nichts laufen, und das die Adressen trotzdem durch den Adguard bzw. den R5S richtig aufgelöst wurden.
aber das beruhigt mich erst mal wenn es bei dir auch so angezeigt wird, nicht auszudenken wenn da wirklich die DNS anfragen durch einen fremden aufgelöst werden und man sich fragt war das jetzt wirklich der richtige Server wo man seine Login Daten eingegeben hat.
ich bleib erst mal bei dem alten 1.40.12-1
1.40.12-1 --> Darstellung OK ✔
1.41.2-0 --> fehlerhafte Darstellung ❌ (02.03.23)
1.42.2-0 --> fehlerhafte Darstellung ❌ (16.03.23) -
Mal die letzten Tage viel mit Docker rumgespielt. Da gibt es in Pycharm auch eine tolle Integration für.
Strg & Alt & Sdann kommt man in die Settings von Pycharm, oder über das Menü File -> Settings. Als erstes das Docker Plugin installieren.
35fcc4b0-93e6-4c95-8050-02135084866c-grafik.png
Grundvoraussetzung ist natürlich, das Docker auf Eurer Kiste installiert ist.
~ docker version ✔ Client: Version: 23.0.1 API version: 1.42 Go version: go1.20 Git commit: a5ee5b1dfc Built: Sat Feb 11 13:58:04 2023 OS/Arch: linux/amd64 Context: default Server: Engine: Version: 23.0.1 API version: 1.42 (minimum version 1.12) Go version: go1.20 Git commit: bc3805a0a0 Built: Sat Feb 11 13:58:04 2023 OS/Arch: linux/amd64 Experimental: false containerd: Version: v1.6.16 GitCommit: 31aa4358a36870b21a992d3ad2bef29e1d693bec.m runc: Version: 1.1.4 GitCommit: docker-init: Version: 0.19.0 GitCommit: de40ad0Danach die Settings vom Docker Plugin. Findet man unter Build, Execution, Deployment
7e4532c5-fb73-4964-9f98-5b37f20760d3-grafik.png
Wichtig ist der Text Connection Successful
55649a61-7556-4b0c-85b2-3efaf12633a9-grafik.png
Nun kann Pycharm mit dem Docker Images bauen und starten. Dazu legt man ein neues File mit dem Namen dockerfile an. Hier mal eines aus meinem aktuellen Projekt.
#WORKDIR /home/frankm/PycharmProjects/scraping/ FROM python:3.10 # Or any preferred Python version. WORKDIR /root ADD main.py . ADD stocks_list.json . ADD buy_stocks_list.json . RUN apt update && apt upgrade -y RUN apt install -y locales RUN sed -i -e 's/# de_DE.UTF-8 UTF-8/de_DE.UTF-8 UTF-8/' /etc/locale.gen && \ dpkg-reconfigure --frontend=noninteractive locales && \ update-locale LANG=de_DE.UTF-8 RUN pip install --upgrade pip RUN pip install requests beautifulsoup4 pywebio pywebio_battery yfinance pandas pyecharts CMD python main.py # Or enter the name of your unique directory and parameter set.Das ist, für Einsteiger erklärt, der Bauplan des Images welches man als Docker Container laufen lassen möchte.
Man benutzt das Image python:3.10 und wendet darauf eine Reihe von Befehlen an und wenn alles funktioniert hat, startet er am Ende den Docker Container 🙂
Hier ein gekürzter Auszug aus dem Build Log.
Step 9/11 : RUN pip install --upgrade pip ---> Using cache ---> 411c6c0e2b46 Step 10/11 : RUN pip install requests beautifulsoup4 pywebio pywebio_battery yfinance pandas pyecharts ---> Using cache ---> 1fc55daee1ed Step 11/11 : CMD python main.py ---> Using cache ---> 522420930488 Successfully built 522420930488 Successfully tagged latest:latest Existing container found: 8b1ac1356aafb6574ea7e81f951e6fdd9c0ba05a9f4031d84492eb74309f92e1, removing… Creating container… Container Id: 9edb9e30fab209f1c9f704507f20b284d2d15b6eff38b65a8f24b5e3b347e4c1 Container name: 'python-portfolio' Starting container 'python-portfolio' 'python-portfolio Dockerfile: dockerfile' has been deployed successfully.Hier kann man sehen, das der Docker Container erfolgreich gestartet wurde.
Oben rechts in Pycharm findet man das hier
092cb953-aabf-4e0a-bad3-ac71ab1d4ddc-grafik.png
Dort kann man auch Umschalter, zwischen Python & Docker. Sehr sinnvoll, wenn man wie ich nicht sattelfest in Python ist und mal richtig rumprobiert. Macht ja dann nicht wirklich Sinn, jedes mal den Docker Container zu deployen.
Viel Spaß beim Dockern 😉
-
Mal kurz ein paar Bilder zu einer Docker Installation eines Python3.10 Paketes. Dieses basiert auf Debian. Soll dem interessierten Einsteiger den Einstieg etwas erleichtern.
Screen1.png
Im ersten Bild sieht man eine funktionierende Registry Configuration. Dazu muss man sich einen Account auf z.B. https://docker.io erstellen.
Als Image habe ich
python:3.10gewählt. Dann habe ich noch die Netzwerkports angegeben, als Beispiel. Macht nicht wirklich Sinn, da ja kein Dienst auf Port 80 im Container läuft.
Screen2.png
Im zweiten Bild sieht man das Aktivieren der Konsole. Damit man sich später auch in den Docker Container einloggen kann.
Screen3.png
Zeigt die Netzwerkeinstellung. Der Docker Container läuft als Bridge. Nach der Erstellung des Containers sieht man folgendes in der Übersicht.
Screen4.png
Hiermit kann man sich in die Konsole einloggen.
Screen5.png
Der Blick auf die Konsole nach dem Einloggen.
Screen6.png
Der Sinn diesen Containers war ja Python3.10, hier die Ausgabe der Version.
Screen7.png
Darauf basiert das Image.
root@600b681ee823:/etc# cat /etc/os-release PRETTY_NAME="Debian GNU/Linux 11 (bullseye)" NAME="Debian GNU/Linux" VERSION_ID="11" VERSION="11 (bullseye)" VERSION_CODENAME=bullseye ID=debian HOME_URL="https://www.debian.org/" SUPPORT_URL="https://www.debian.org/support" BUG_REPORT_URL="https://bugs.debian.org/"Viel Spaß beim Ausprobieren!
-
Ich konnte es nicht lassen, ich habe es mal getestet.
~ docker version ✔ 1m 37s Client: Version: 23.0.1 API version: 1.42 Go version: go1.20 Git commit: a5ee5b1dfc Built: Sat Feb 11 13:58:04 2023 OS/Arch: linux/amd64 Context: defaultIn der aktuellen systemd Datei steht folgendes drin. Bei mir zu finden unter /usr/lib/systemd/system/docker.service
LimitNOFILE=infinity LimitNPROC=infinity LimitCORE=infinityDie override Dateien angelegt und durchgestartet. Läuft alles einwandfrei. Aber bitte fragt mich nicht, was dieser Wert da oben macht. Ich habe keine Ahnung.
Update: Erklärung zu ulimits https://stackoverflow.com/questions/62127643/need-understand-ulimits-nofile-setting-in-host-and-container
-
Noch Joomla! am Start? Dann mal aktualisieren!
Ulrich Bantle / Feb. 17Kritische Lücke in CMS Joomla Kritische Lücke in CMS Joomla
Im freien Content Management System Joomla in den Versionen 4.0.0 bis 4.2.7 steckt eine kritische Sicherheitslücke. Ein Update ist verfügbar.
-
Mal hier parken, da sich da in dem kommenden Debian Bookworm was entscheidendes ändern wird.
https://www.reddit.com/r/debian/comments/11012k4/tip_all_nonfree_firmware_packages_have_moved_to/
-
Beim Lesen diesen Beitrages bekomme ich ein ungutes Gefühl. Da man ja bei Python ständig externe Pakete importiert hier ein Beispiel
############################################### # Imports ############################################### import json import locale from pathlib import Path from functools import partial from dataclasses import dataclass from pywebio import start_server, config from pywebio.pin import put_input from pywebio.session import info as session_info from pywebio.output import put_text, \ put_table, \ use_scope, \ scroll_to, \ put_markdown, \ put_buttons, \ put_button, \ clear, \ put_info, \ put_error, \ put_html, \ put_tabs, \ toast, \ put_image, \ put_row, \ put_grid, \ put_loading from pywebio.input import input, \ input_group, \ NUMBER, \ PASSWORD, \ TEXT, \ URL, \ radio from pywebio_battery import popup_input import requests as requests # Requests for making network connections. from bs4 import BeautifulSoup # For extracting data from HTML and XML docs.Das ist mein Import für ein kleines neues Tool, wo ich mein Portfolio mit anzeigen möchte. Ein wenig Spielerei, aber spannend und ich lerne wieder was dabei.
In diesem Artikel, stehen auch ein paar Pakete, die ich nutze 😟
Phylum Discovers Revived Crypto Wallet Address Replacement Attack Phylum Discovers Revived Crypto Wallet Address Replacement Attack
Phylum discovers over 451 unique malicious packages targeting popular PyPI packages like Selenium.
Ich habe dann mal in der Gruppe PyDDF "Python Meeting Düsseldorf" nachgefragt, wie die Lage ist. Einer der Tipps war dann, VMs bzw. Docker zu benutzen, das ermöglicht ja eine gewisse Trennung vom Haupt-System.
Docker läuft sowieso, dann kann ich das ja mal ausprobieren. Nach vielem Rumprobieren habe ich jetzt aktuelle eine funktionierende Lösung.
Im Projekt gibt es ein dockerfile
FROM python:3.10 # Or any preferred Python version. ADD main.py . RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y locales RUN sed -i -e 's/# de_DE.UTF-8 UTF-8/de_DE.UTF-8 UTF-8/' /etc/locale.gen && \ dpkg-reconfigure --frontend=noninteractive locales && \ update-locale LANG=de_DE.UTF-8 ENV LANG de_DE.UTF-8 RUN pip install requests beautifulsoup4 pywebio pywebio_battery matplotlib CMD python ./main.py # Or enter the name of your unique directory and parameter set.Als nächstes brauchen wir mal folgendes
docker build -t python-imagename .Danach dann starten mit
docker run -d --rm --publish 7070:7070 --name portfolio python-imagename:latestJetzt findet man die Anwendung wie gewohnt unter
http://192.168.3.xxx:7070Die locales waren eine kleine Herausforderung, ich hoffe das passt jetzt so. Werde ich die Tage noch intensiver beobachten.
Damit das Ganze halbwegs praktikabel ist, habe ich mir ein kleines Script geschrieben.
#!/bin/bash ### BEGIN INIT INFO # Provides: scraping # Required-Start: # Required-Stop: # Should-Start: # Default-Start: # Default-Stop: # Short-Description: scraping # Description: scraping ### END INIT INFO case "$1" in stop) docker kill portfolio exit 0 ;; start) #!/bin/bash cd /home/frankm/PycharmProjects/scraping/ docker kill portfolio docker build -t python-portfolio . docker run -d --rm --publish 7070:7070 --name portfolio python-portfolio:latest exit 0 ;; *) echo "Usage: basename $0 {start | stop}" >&2 exit 64 ;; esac exit 0Jetzt kann man nach einer Änderung am Code das Script schreiben. Der Docker Container wird gestoppt, falls er läuft. Danach wird das Image neu gebaut und dann gestartet.
Zum Stoppen ./scraping.sh stop Zum Starten ./scraping.sh startDas kann man aber, in meinen Augen, nur mit fertigen Anwendungen machen. Wenn man entwickelt, braucht man ständig die Ausgaben auf der Konsole. Das fehlt einem ja dann im Container. Bin gespannt wie sich das weiter entwickelt.
An die Docker Spezialisten draußen im Netz, wenn man das anders bzw. besser macht, bitte ich um einen Kommentar. Danke 😉 -
An extremely fast Python linter, written in Rust.
Den habe ich mal eben in meiner IDE PyCharm ausprobiert. Der ist wirklich so schnell, wie er behauptet.
Astra Kernel :verified: (@AstraKernel@infosec.exchange)
7ab4d33c-5098-4a3e-abe0-4f2d8dbcb76c-image.png
Bildquelle: https://beta.ruff.rs/docs/
-
Seit einigen wenigen Tagen, beschäftige ich mich damit wie man ein paar Daten von einer Webseite ausliest und diese dann entsprechend weiterverarbeitet.
Dabei musste ich so ziemlich das erste Mal in Python rechnen und was kam - Fehler! Die Formate passte nicht. Somit musste ich mich damit beschäftigen, wie man so was umwandelt.
Nehmen wir an, ich erhalte solche Daten
Formatierte Stringwerte aus dem Scraping ['20.605,00', '3.685,50', '3.013,80']Nehmen wir weiterhin an, es sind € Werte und ich möchte diese addieren. Die Liste von oben hat den Namen result.
# String Werte umwandeln in float, damit ich damit rechnen kann f2 = [] for count, value in enumerate(result): print("Value as String", value) # Tausenderpunkt entfernen! p = value.replace('.', '') # Umwandeln in float, dazu das Komma in einen Punkt umwandeln f = float(p.replace(',', '.')) # Floatwerte abspeichern f2.append(f) # f2.append(f) # Kontrollausgabe print(f2[0]) print(f2[1]) print(f2[2]) addition = f2[0] + f2[1] + f2[2] print("Ergebnis Addition", addition)Ordentlich formatiert wird das mit
import locale print(locale.format_string("%.2f", addition, grouping = True))Jetzt hatte ich mir noch die Frage gestellt, wie bekommt man da ein paar Zeilen weg. Ich hatte das schon mal irgendwo gemacht, wusste aber nicht mehr wo. Also Dokumentation im Netz gelesen und folgendes gefunden.
# String Werte umwandeln in float, damit ich damit rechnen kann f2 = [] for count, value in enumerate(result): print("Value as String", value) # Umwandeln in float, Tausenderpunkt entfernen und Komma in einen Punkt umwandeln f = float((value.replace('.', '')).replace(',', '.')) # Floatwerte abspeichern f2.append(f) # f2.append(f)Auf den Wert (value) wird hier als erstes folgendes angewendet
value.replace('.', '')Wir entfernen den Tausenderpunkt.
Danach
replace(',', '.')Das Komma für die Nachkommastellen ersetzen wir durch einen Punkt.
Das Klammern wir mal alles entsprechend ein, verbinden das mit einem Punkt und auf den kompletten Ausdruck wenden wir ein Float an. Ferrtig 🙂
Ok, es hat deutlich länger gedauert, bis ich das alles verstanden habe. Mehr Zeit als diesen Beitrag zu tippen, aber wie immer das Ergebnis zählt.
Sollte hier Blödsinn stehen, oder noch besser, sollte jemand bessere Lösungen haben, bitte hier drunter. Ich freue mich über jede konstruktive Antwort.
Ich weiß das einige Variablen Namen nicht PEP konform sind
-
Ein c't Video was ich mal empfehlen kann 🙂 Zielgruppe Windows User, die die Bevormundung durch M$ satt haben. Viel Spaß beim Anschauen und beim Installieren von Linux.
Warum Linux schöner ist als macOS und Windows