Hallo, Gast |
Du musst dich registrieren bevor du auf unserer Seite Beiträge schreiben kannst.
|
Foren-Statistiken |
» Mitglieder: 1
» Neuestes Mitglied: Joopi
» Foren-Themen: 492
» Foren-Beiträge: 673
Komplettstatistiken
|
Benutzer Online |
Momentan sind 9 Benutzer online » 0 Mitglieder » 5 Gäste AhrefsBot, Bytespider, DotBot, bot
|
|
|
Bestimmte Anzahl von Zeichen ausgeben |
Geschrieben von: Joopi - 07-01-2023, 09:44 - Forum: Programmieren
- Keine Antworten
|
|
Eine Tabelle mit einem Fließtext als Feldinhalt ist nicht besonders schön. Sofern der Text nicht maßgeblich ist, sondern nur als Füllmenge gedacht ist, macht es Sinn, die Ausgabe des Textes auf eine gewisse Anzahl Zeichen zu begrenzen. In einem SQL-Statement könnte das wie folgt aussehen:
Code: $erg = mysqli_query($db, "SELECT id, substring(mailtext,1,250) FROM tabelle ORDER BY id");
Damit werden ab Zeichen 1 entsprechend viele Zeichen des Textes, sofern vorhanden, ausgegeben. Der Rest wird nicht angezeigt.
Dieser Teil des Statements ist der wichtig Teil:
Zitat:substring(mailtext,1,250)
Somit kann man Tabellen auch mit dem Feld für Fließtext füllen, um dem Betrachter dieses zu zeigen.
Es macht Sinn, daraus einen Teaser zu generieren, sodass vielleicht ein Link angesetzt werden kann, um den gesamten Text anzeigen zu lassen.
|
|
|
Alle Zeichen in Kleinschreibung ändern |
Geschrieben von: Joopi - 07-01-2023, 09:42 - Forum: Programmieren
- Keine Antworten
|
|
Wenn in einer Spalte einer Tabelle String in Groß- und Kleinschreibung vorhanden sind, dann kann man diese in einem Schwung in Kleinbuchstaben konvertieren. Die Syntax dazu ist:
Code: UPDATE tabelle SET katname = LOWER(katname);
Das Konvertieren kann auch mit UPPER in Großbuchstaben erfolgen.
|
|
|
Wartezeit einsetzen |
Geschrieben von: Joopi - 07-01-2023, 06:20 - Forum: Programmieren
- Keine Antworten
|
|
Dann und wann, besonders beim Testen, kann es hilfreich sein, wenn die Ausführung des Skripts für einige Zeit ausgesetzt wird. Eine Wartezeit eben.
In Python lässt sich dieses wie folgt realisieren:
Code: #!/usr/bin/env python3
import time
time.sleep(5)
Mit dieser Anweisung wird die Ausführung des Skripts für 5 Sekunden ausgesetzt.
|
|
|
Doku Git und GitHub |
Geschrieben von: Joopi - 07-01-2023, 03:20 - Forum: Git
- Keine Antworten
|
|
Die Nutzung von Git und GitHub kann in Projekten von Vorteil sein. Hier dokumentiere ich, wie Git zu nutzen ist. Die Nutzung von GitHub ist sekundär, denn dieses benötige ich nur, sollte ich meine Projekte im Internet öffentlich machen wollen.
Ich nutze zum Üben die Lehrgangsreihe von The Net Ninja.
Meine eigenen Vorbemerkungen:
Es macht im Grunde genommen Sinn, dass die Projekte, an denen gearbeitet wird, zentral auf dem lokalen Rechner abgelegt werden. Somit ist auch nur ein Oberprojektordner notwendig. Dieser Oberprojektordner wird dann wiederum mit weiteren Ordnern je Einzelprojekt bestückt. Diese Ordner werden, sofern sie von Git zu nutzen sind, später durch die Initialisierung zu Repositories. Um nämlich Git in Gänze richtig zu nutzen, müssen Git-Repositories angelegt sein.
Das bedeutet, dass in dem Projektordner ein versteckter Ordner .git angelegt wird, in dem dann alle Veränderungen nachgehalten, also getrackt, werden.
Nachdem Git installiert wurde
Code: git config --globel user.name Tuennes
Code: git config --globel user.email tuennes@yahoo.de
Damit ist Git personalisiert.
Um festzustellen, welcher User für Git angelegt werde, ist folgender Befehl auf der Konsole abzusetzen.
Code: git config user.name
Projekt initialisieren
Mit diesem Befehl wird das Repository initiiert. Innerhalb des Ordner bzw. des Repositories können weitere Ordner erstellt werden. Auf der Konsole kann direkt mit dem Befehl ```touch``` eine leere Textdatei erzeugt werden, z.B. index.html.
Welche Dateien sind im Repo
Dieser Befehl zeigt alle im Repo vorhandenen Dateien und deren aktuellen Status.
Ein Status ist z.B. untracked. Das bedeutet, die Datei ist da, aber noch nicht in der Staging-Area enthalten.
Dateien, die noch nicht in der Staging-Area sind, werden in der Farbe Rot dargestellt. Dateien, die bereits hinzugefügt wurden, werden in der Farbe Grün angezeigt.
Die textliche Beschreibung ist aber auch ausreichend, um zu erkennen, welche Dateien hinzuzufügen sind. Das muss nicht einzeln geschehen.
Datei in Staging-Area hinzufügen
Um eine Datei in die Staging-Area hinzuzufügen, bedarf es nur dem vorgenannten Befehl.
Datei aus Staging-Area löschen
Code: git rm --cached index.html
Sofern eine Datei im Repo nicht mehr benötigt wird, kann sie mit dem vorgenannten Befehl aus der Staging-Area herausgelöscht werden. Das bedeutet nicht, dass die Datei physisch gelöscht wurde. Sie ist nur nicht mehr im Repo.
Alle Dateien hinzufügen
In einem großen Projekt wäre es sehr aufwendig, wenn jede einzelne Datei, die erstellt wurde, dem Repo hinzuzufügen wäre. Mit dem vorgenannten Befehl werden alle neuen Dateien, die noch nicht im Repo sind, hinzugefügt.
Wichtig ist, dass zu bestehenden Dateien, die geändert wurden, entsprechende Mitteilungen über den Grund der Änderung, vermerkt werden. Das ist das Kommittment, welches sehr wichtig ist.
Ein Kommitment absetzen
Code: git commit -m "added index and styles files"
Dieser Befehl ist relativ global und bezieht sich nicht auf einzelne Dateien, sondern auf die Dateien, die neu sind bzw. geändert wurden.
Die Option **-m** bedeutet, dass eine Mail erzeugt und an die Projektteilnehmer gesendet wird.
Der notwendige und wichtige Kommentar zum Kommitment wird hinter der Option in Hochkommata gesetzt und sollte die Situation erklären.
Mit diesem Kommitment wird eine eindeutige ID erzeugt, die im Repo abgespeichert wird.
Es wird eine Info ausgegeben, die u.a. enthält, wieviele Zeilen insgesamt hinzugefügt (vielleicht auch gelöscht) wurden. Werden zum Projektbeginn mehrere Dateien mit einem Kommitment belegt, so sind alle vorhandenen Zeilen in Summe dann in der Info zu sehen.
Logfiles der Kommitments ansehen
Sobald z.B. bestehende Dateien verändert werden, müssen diese irgendwann wieder der Staging-Area mitgeteilt werden. Das geht über den "add"-Befehl und es wird angezeigt, welche Dateien geändert (modifiziert) wurden.
Sobald das passiert ist, sollte wieder ein Kommitment erfolgen, welches wieder geloggt wird.
Mit dem obigen Befehl, können alle abgesetzten Kommitments betrachtet werden. Allerdings werden hierbei alle Einträge im Logfile, also in der Historie, angezeigt. Das kann sehr unübersichtlich sein, wenn das Projekt groß ist.
Um nicht erschlagen zu werden, wird bei der Ausführung des obigen Befehls je Kommitment nur eine Zeile ausgegeben, die eine Zusammenfassung der Veränderungen beinhaltet.
Das einfache Hinzufügen und Betrachten der Dateien bzw. der Einträge in der Log-Datei ist nicht alles, denn es werden oftmals auch Fehler gemacht, die wieder zu beheben sind.
Hier sind zum Kommitment 3 Befehle vorhanden:
- Checkout commit
- Revert commit
- Reset commit
Ein Kommitment zurücknehmen
Code: git checkout af6b84c
Sofern etwas falsch war oder zu verändern ist, kann ein Kommitment wieder zurückgenommen werden. Dazu ist über die Loghistorie die entsprechende ID zu erkunden und kann dann mit dem obigen Befehl wieder aus den Kommittments herausgenommen werden.
Die Befehle für Revert und Reset kann ich aus der englischen Erklärung heraus nicht gut verstehen. Reset ist auf jeden Fall eine eher extreme Maßnahme. Beide Befehle benötigen immer die ID des Kommitments.
Die Erstellung von Branches (Zweige oder Äste eine Baumes) ist die wohl wichtigste Eigenschaft von Git.
Neben dem Master-Branch (Info: Master wurde zu Main auf GitHub umbenannt) können beliebig viele Branches angelegt werden.
Branches sind notwendig, um neuen Code erst zu testen. Sollte er dem Projekt und den Anforderungen genügen, kann der Branch mit dem Master-Branch zusammengeführt (gemerged) werden.
Einen neuen Branch erstellen
Code: git branch neuerbranch
Mit dem vorgenannten Befehl wurde ein Branch erstellt.
Um feststellen zu können, welche Branches vorhanden sind, muss obiger Befehl abgesetzt werden.
Wenn dieser Befehl abgesetzt wird, werden alle Branches gezeigt, auch der Master-Branch. Durch ein vorangestelltes Sternchen ist zu erkennen, welcher Branch gerade der aktive ist, zu dem etwas in die Staging-Area eingestellt werden kann.
Es ist wichtig, dass man sich nicht vertut und den falschen Branch bearbeitet.
Code: git checkout neuerbranch
Damit wechselt (switcht) Git vom derzeitigen aktiven Branch zum neu ausgewählten Branch.
In diesem Branch kann all das gemacht werden, was oben beschrieben ist. Allerdings ist zu beachten, dass dieser Branch isoliert ist, da er mit dem Master-Branch nicht in Verbindung steht.
Man kann auch einen neuen Branch anlegen und diesen direkt als aktiven Branch kennzeichnen.
Code: git checkout -b ganzneuerbranch
Damit wird der Branch angelegt und direkt aktiviert.
Einen Branch löschen
Code: git branch -D neuerbranch
Sollte es sein, dass ein Branch bzw. dessen Dateien, nicht mit dem Master-Branch zusammengeführt werden sollen, dann dieser Branch mit der Option "-D" gelöscht werden. Wichtig ist das **große D**.
Das Zusammenführen von Branches ist wichtig, um die Arbeit anderer in den Master-Branch einzufügen.
Das sollte natürlich nur geschehen, wenn der Code richtig ist.
Um Branches in den Master-Branch bzw. den Branch, der die anderen Branches aufnehmen soll, einzufügen, muss der aufnehmende Branch aktiv sein.
Code: git merge ganzneuerbranch
Damit wird der Branch in den Master-Branch gemerged, da der Master-Branch der aktive Branch ist.
Anmerkung:
Der Begriff Master wurde mittlerweile auf Github mit dem Begriff Main ersetzt.
|
|
|
Git Submodul clonen |
Geschrieben von: Joopi - 07-01-2023, 03:03 - Forum: Git
- Keine Antworten
|
|
Heute wollte ich das Submodule eines Hugothemes in eine neue Hugoseite (Testzentrum) hinzufügen. Also flott den Befehl kopiert und nicht schlecht gestaunt:
Zitat:fatal: Kein Git-Repository (oder irgendein Elternverzeichnis bis zum Einhängepunkt /media/django)
Stoppe bei Dateisystemgrenze (GIT_DISCOVERY_ACROSS_FILESYSTEM nicht gesetzt).
Es hat dann tatsächlich drei, vier Sekunden gedauert bis mir klar geworden war, dass ich noch kein Git-Repository für die neue Hugotestseite erstellt hatte.
Mit
Code: git init
git add .
git commit -m "blablabla"
wurde das Repository erstellt und schon funktionierte der Befehl im root-Verzeichnis der Hugoseite, um ein Submodule hinzuzufügen:
Code: git submodule add https://github.com/hugo-toha/toha.git themes/toha
git submodule init
git submodule update
Dann ist mir eingefallen, dass bei der Nutzung von Submodulen, direkt Updates vom Theme heruntergeladen werden können:
Code: git submodule update --remote themes/toha
Es muss aber einen Grund geben, warum der Themeautor die Info herausgegeben hat, dass das Theme als Submodule zu installieren ist und der normale Clone-Befehl das Theme nicht gut unterstützt.
Wichtig ist für mich zu wissen, und ich sollte es auch behalten, dass bei der Nutzung von Submodulen ein Git-Repository vonnöten ist. :-)
|
|
|
submodul Repository |
Geschrieben von: Joopi - 07-01-2023, 03:00 - Forum: Git
- Keine Antworten
|
|
Über Git in Verbindung mit GitHub lassen sich Dateien, gepackte Ordner und auch Submodule für Hugo und alles andere downloaden.
Am besten wechselt man direkt in den Ordner der Hugo-Seite und setzt dann den entsprechenden Befehl ab.
Die Syntax für den Download eines Submoduls ist wie folgt:
Code: git init
git submodule add https://github.com/budparr/gohugo-theme-ananke.git ./themes/ananke
Danach ist das Theme in Hugo bzw. in der Datei config.toml einzubinden:
Code: echo ‘theme = “ananke”’ >> config.toml
|
|
|
clone Repository |
Geschrieben von: Joopi - 07-01-2023, 02:59 - Forum: Git
- Keine Antworten
|
|
Die wohl einfachst Art, ein GitHub-Repository auf dem lokalen Rechner zu installieren, geht über den Clonebefehl.
Bezogen auf ein zu clonendes Theme für Hugo könnte man wie folgt vorgehen, indem man sich im Ordner der Hugoseite befindet und dann folgenden Befehl absetzt:
Code: git clone URL-des-Repositorys ./themes/Themename
Es ist in diesem Falle notwendig, dass der versteckte Ordner .git, der versteckt ist, gelöscht wird.
Ansonsten, sollte der Clone mit Git organisiert werden, muss der versteckte Ordner natürlich bestehen bleiben.
|
|
|
Autostart einrichten |
Geschrieben von: Joopi - 06-01-2023, 11:45 - Forum: Linux
- Keine Antworten
|
|
Das Thema Autostart beschäftigt mich schon einige Zeit. Ich würde gerne ein Script erstellen wollen, welches die jeweiligen Programme, die ich immer während der Arbeit am Desktop-PC geöffnet habe, beim Hochfahren des System automatisch startet.
Unter /home/user/.config/ gibt es den Ordner autostart. In diesem Ordner liegen Dateien, die die Endung desktop haben.
Diese Dateien haben Inhalte. Hier das Beispiel für Nextcloud:
Zitat:\[Desktop Entry\] Name=Nextcloud GenericName=File Synchronizer Exec=/usr/bin/nextcloud Terminal=false Icon=nextcloud Categories=Network Type=Application StartupNotify=false X-GNOME-Autostart-enabled=true
Ich kann mich daran erinnern, dass ich mal was gesehen habe, wie man an diese desktop-Dateien kommt. Leider weiß ich nicht mehr, wo ich das gesehen habe und in welchem Zusammenhang dieses stand.
In meinem persönlichen Bereich im Homeverzeichnis habe ich 3.561 Dateien mit der Endung desktop gefunden. Die sind nicht alle aktiv, weil viele noch von den zwischengelagerten alten Plattensicherungen kommen. Leider sind das fast nur solche Dateien. Die anderen kann ich bis auf shutter, Nextcloud und dropbox nicht wirklich zuordnen.
Ich suche jetzt noch im Basissystem.
Auf dem Gesamtsytem finde ich einiges an desktop-Dateien. Reicht es denn wirklich, wenn ich diese Dateien der Programme, die automatisch starten sollen, einfach so ins eigene Autostartverzeichnis, wie oben beschrieben, lege?
Die Ablage einer desktop-Datei im Ordner Schreibtisch bewirkt zunächst mal nichts. Ich müsste mal prüfen, was mit diesem Ordner überhaupt gemeint ist und ob ich ihn auf dem Desktop anzeigen lassen kann. Das ersetzt zwar nicht den Autostart, könnte aber für vielbenutzte Programme und insbesondere Dateien, die nicht im Browser bearbeitet und angezeigt werden, von Vorteil sein. Vielleicht ist auch ein Link zur Datei die richtige Lösung in einem Sammelordner.
Jedenfalls lässt sich die desktop-Datei vom neuen Programm Brackets anstandslos starten. Dafür ist also die desktop-Datei schonmal zu nutzen. Die Suche nach dieser Datei-Endung ist nun mit 6.723 Dateien abgeschlossen. Natürlich incl. der vielen Dateien aus der Sicherung der alten Debian-8-Platte.
Desktop-Dateien liegen in rauhen Mengen im Ordner /usr/share/appplications/
In der VirtualBox habe ich keine aktuelle Debian-Installation, daher versuche ich den Autostart mit Ubuntu 18.04 LTS zu bewerkstelligen. Dafür habe ich die desktop-Datei von Bluefish in deu Autostartordner des Home-Verzeichnisses gelegt und die Dateirechte für User, der den Desktop startet, vergeben.
In der VirtualBox für Ubuntu 18.04. LTS wurde der Editor bluefish automatisch gestartet und steht zur Verfügung. Als zweites habe ich den Chrome-Browser in den Autostartordner kopiert und auch dieses Programm wird beim Start von Ubuntu sofort ausgeführt und steht zur Verfügung.
|
|
|
Evolution Filterdatei bearbeiten |
Geschrieben von: Joopi - 06-01-2023, 11:41 - Forum: Linux
- Keine Antworten
|
|
In Evolution kann man die Nachrichtenfilter manuell bearbeiten, da die Filterdaten und -bestandteile in einer xml-Datei vorgehalten werden.
In meinem aktuellen System liegt die Datei hier:
Zitat:/home/username/.config/evolution/mail/filters.xml
Der Aufbau ist, wie es eben bei xml-Dateien der Fall ist, relativ klar und sieht im Allgemeinen so aus:
Die Struktur ist einfach und man kann, wenn man es will, die Einträge manuell vornehmen bzw. durch ein Script einfügen lassen. Denn, je größer diese Datei ist, desto langwieriger ist es, neue Filter oder Filterbestandteile hinzuzufügen.
Im obigen Beispiel lasse ich die Mails, über eine gewisse Domain reinkommen, direkt löschen. Das hat mal in einer älteren Version von Evolution nicht wirklich funktioniert. Ich bin nun gespannt, ob es dieses Mal mit der neueren Version funktionieren wird.
|
|
|
Exim4 und die frozen message |
Geschrieben von: Joopi - 06-01-2023, 11:34 - Forum: Linux
- Keine Antworten
|
|
Regelmäßig erhalte ich Systemnachrichten, die etwas von frozen messages berichten. Diese Systemnachrichten werden durch Exim4 (Mail Transfer Agent und Mailserver) versendet und mit einem eher kryptischen Text versehen.
Das ist dann so aus:
Zitat:Message 1mfJKT-005rG3-Tm has been frozen (delivery error message).
The sender is <>.
The following address(es) have yet to be delivered:
mailadresse@mail.pu: Mailing to remote domains not supported
Mir war lange Zeit nicht klar, wie ich mit diesen Mails umzugehen habe. Ich weiß, dass sie nicht wichtig für mich sind. Aber es nervt eben, wenn immer diese Mails kommen und wenn ich nicht weiß, was sie bedeuten. Das schreit nach Aufklärung.
Im Grunde genommen sagen die Mails aus, dass eine Mail nicht zugestellt werden konnte. Das ist derzeit auch sehr gut so. Dieser Vorgang wird in der Log-Datei eingetragen:
Zitat:/var/log/exim4/mainlog
Darin werden zu den Mails, die in der Queue liegen, verschiedene Infos geschrieben.
Die Queue der noch nicht zugestellten Mails ist hier zu finden:
Zitat:/var/spool/exim4/msglog
Gleichzeitig existiert noch ein weitere Verzeichnis, in dem die Mail bzw. die Datei (die auch die Mail-ID ist) nochmals in zweifacher Form liegt, aber mit den Endung -H und -D.
Zitat:/var/spool/exim4/input
Wird eine Mail-ID gelöscht, verschwinden die Maildateien in den beiden Ordnern, also insgesamt 3 Dateien.
Um eine Aufstellung zu erhalten, welche Mails in der Queue liegen, ist mit root-Rechten folgender Befehl auszuführen:
Das Ergebnis der Befehlsausführung sieht dann z.B. so aus:
Zitat:6h 2.1K 1mfGrj-005mBf-Fm <> *** frozen ***
noreply@pixelberry.hu
5h 2.6K 1mfHFR-005moc-Sy <> *** frozen ***
export1@utensilcentro.it
4h 2.1K 1mfHwO-005o2u-04 <> *** frozen ***
accueil@rafting-castellane.com
3h 2.7K 1mfIkx-005qKp-9O <> *** frozen ***
info@eyefordetailphotos.com
3h 2.7K 1mfItY-005qcu-0h <> *** frozen ***
directorejecutivo@asatransporte.com
Aus z.B. der letzten Zeile der Auflistung ist die Mail-ID 1mfItY-005qcu-0h zu sehen. Die korrespondierenden Dateien, wie oben beschrieben, lauten dann 1mfItY-005qcu-0h-D und 1mfItY-005qcu-0h-H.
Um eine einzelne Mail zu löschen, kann folgender Befehl eingesetzt werden:
Code: sudo exim4 -Mrm 1mfItY-005qcu-0h
Damit werden alle 3 existierenden Dateien gelöscht.
Um alle in der Queue befindlichen Mails zu löschen, ist folgender Befehl einzugeben:
Code: sudo exim4 -bp|grep frozen|awk '{print $3}'|xargs sudo exim4 -Mrm
Wichtig dabei ist, dass beide exim4-Befehle am Anfang und am Ende mit einem führenden sudo versehen sind. Ansonsten werden Berechtigungsfehler ausgegeben (Permission denied).
Nun endlich kann ich diese blöden Systemnachrichten wegen der eingefrorenen Mails verstehen und weiß, was ich damit zu tun habe.
|
|
|
|