Hallo, Gast |
Du musst dich registrieren bevor du auf unserer Seite Beiträge schreiben kannst.
|
Foren-Statistiken |
» Mitglieder: 1
» Neuestes Mitglied: Joopi
» Foren-Themen: 529
» Foren-Beiträge: 761
Komplettstatistiken
|
Benutzer Online |
Momentan sind 14 Benutzer online » 0 Mitglieder » 7 Gäste AhrefsBot, Applebot, Bing, Bytespider, Crawl, Owler, bot
|
|
|
Wenn man SQLite3 erlernt I |
Geschrieben von: Joopi - 11-01-2023, 08:27 - Forum: Programmieren
- Keine Antworten
|
 |
In diesem Artikel möchte ich die grundlegenden Befehle für die Admininstration und Verwendung von SQLite3 auf der Konsole zeigen.
Im Gegensatz zu meinem bisherigen Wissen, können durchaus Datentypen bei der Erstellung einer Tabelle mitgegeben werden:
Code: sqlite> CREATE TABLE images(name TEXT, type TEXT, img BLOB);
sqlite> INSERT INTO images(name,type,img)
...> VALUES('icon','jpeg',readfile('icon.jpg'));
Das sind wichtige Seiten im Netz, um etwas über die Syntax zu erfahren:
https://sqlite.org/cli.html
Datenbank anlegen
Eine Datenbank kann in der Konsole wie folgt angelegt werden:
Existiert die Datenbank bereits, so wird sie geöffnet und der Cursor steht am Prompt.
Existiert die Datenbank noch nicht, wird sie erstellt und der Cursor steht am Prompt. Wird allerdings in der Datenbank nicht mindestens eine Tabelle erstellt, so wird die Datenbank(-datei) beim Verlassen nicht gespeichert. Die Datenbank existiert dann nicht.
Eine Tabelle anlegen
Code: create table personen (id integer primary key, name, erfasst, geaendert);
Es werden keine expliziten Datentypen mitgegeben. Nur der primary key wird gesetzt und ist ein auto_increment.
Einen Datensatz erzeugen/einfügen
Code: insert into tbname (name, erfasst, geaendert) values ("Vera", datetime('now'), time('now', 'localtime'));
Die Datums- und Uhrzeitmitgabe ist auch in SQLite3 möglich.
Die Datenbank abfragen
Code: select * from tbname where id = 1;
Die einfache Abfrage über eine Tabelle funktioniert in SQLite3 analog zu MySQL
Einen Datensatz löschen
Code: delete from tbname where id = 1;
Einen Datensatz ändern
Code: update tbname set position = "Abteilung WHERE position = "Abt";
Die Anzahl von Datensätzen abfragen**
Code: select count(distinct "personalnummer") FROM "personen";
Eine Summe bilden
Code: select sum(distinct "gehalt") FROM "personen";
Was ist vorhanden?
Eine SQLite3-Datei enthält nicht nur eine Datenbanken, sondern kann mehrere Datenbanken mit den jeweiligen Tabellen enthalten. Hier die wichtigsten Systembefehlte, um zu prüfen, was alles enthalten und wie es aufgebaut ist:
- Datenbank = .databases
- Tabellen = .tables
- Tabellenstruktur = .schema tbname
Hilfen in der Konsole
- Spalterüberschriften zeigen = .headers on
- Anzeige/Ausgabe der SELECT-Ergebnisse = .mode formatname
Zitat:The sqlite3 program is able to show the results of a query in eight different formats: "csv", "column", "html", "insert", "line", "list", "quote", "tabs", and "tcl". You can use the ".mode" dot command to switch between these output formats.
Diese Ausgabeformate können am Bildschirm, aber auch zur Ausgabe in eine Datei gesetzt werden.
Import von Daten aus CSV-Datei
Code: .import /home/django/help/somedata.csv tbname
Dies ersetzt wahrscheinlich nicht die vorherige Erstellung der Tabelle, in die die Daten importiert werden sollen.
Im DB-Browser kann ich Tabellen-Exporte als csv-Datei importeren, wobei dann die Tabelle angelegt wird (ohne Datentypen und ohne primary key).
Tabellen verknüpfen mittels JOIN
Das sind die beiden Tabellen in einer Datenbank:
Code: sqlite> create table artikel (id integer primary key, titel, user_id);
Code: sqlite> create table user (id integer primary key, name);
Das sind die eingefügten Werte in den beiden Tabellen:
Code: sqlite> insert into artikel (titel, user_id) values ("Der Mond", 1);
sqlite> insert into artikel (titel, user_id) values ("Die Sonne", 2);
sqlite> insert into artikel (titel, user_id) values ("Das Universum", 1);
sqlite> insert into artikel (titel, user_id) values ("Fischwelten", 3);
sqlite> insert into artikel (titel, user_id) values ("Schlangenfarm", 3);
sqlite> insert into user (name) values ("Hermann");
sqlite> insert into user (name) values ("Burkhard");
sqlite> insert into user (name) values ("Robert");
Und das ist das SQL-Statement zum JOIN der beiden Tabellen:
Code: select a.titel, u.name from artikel a inner join user u on a.user_id = u.id where u.id = 3;
Zum Glück ist hier die gleichen Syntax gegeben wie bei MySQL, daher kann ich ggfs. das Jagdzentrum auf SQLite umstellen und die Bilderausgabe direkt aus dem Ordner bewerkstelligen.
Update 30.05.2020 - 21:15 Uhr
Das Thema mit der Erfassung von Datum und Uhrzeit (Uhrzeit lokal) ist so eine Sache für sich. Es gibt verschiedene Möglichkeiten, die unter aufgelistet sind (die letzte ist die beste):
Code: sqlite> insert into test2 (name, erfasst, geaendert) values ("Vera", datetime('now'), time('now', 'localtime'));
Code: sqlite> select * from test2;
id|name|erfasst|geaendert
1|Vera|2020-05-30 19:10:50|21:10:50
Code: sqlite> insert into test2 (name, erfasst, geaendert) values ("Helga", date('now'), time('now', 'localtime'));
Code: sqlite> select * from test2;
id|name|erfasst|geaendert
1|Vera|2020-05-30 19:10:50|21:10:50
2|Helga|2020-05-30|21:12:38
Code: sqlite> insert into test2 (name, erfasst, geaendert) values ("Irma", date('now'), datetime('now', 'localtime'));
Code: sqlite> select * from test2;
id|name|erfasst|geaendert
1|Vera|2020-05-30 19:10:50|21:10:50
2|Helga|2020-05-30|21:12:38
3|Irma|2020-05-30|2020-05-30 21:13:21
Bei der letzten Variante im Feld geaendert wird das Datum und die lokale Uhrzeit ausgegeben. Für die Nutzung ist diese Art wohl die beste, denn bei Änderungen wird eh nur das Feld geaendert mitgegeben, bei einer Neuanlage eines Datensatzes werden beide Felder angesprochen.
|
|
|
convert bild resize |
Geschrieben von: Joopi - 11-01-2023, 08:16 - Forum: Programmieren
- Keine Antworten
|
 |
Auf der Konsole ist es möglich, Bilder in der Größe zu verändern. Oftmals will man die Bilder verkleinern.
Sind viele Bilder zu verändern, macht es Sinn, wenn dieses im Stapel mittels eines Shell-Scripts erfolgt. Die Ausgabe der veränderten Bilder sollte nach Möglichkeit in einem neuen Ordner erfolgen.
Der einfache Befehl lautet wie folgt:
Code: convert -resize 1024x768 bild.jpg
Man kann auch mit dem Sternchen als Wildcard arbeiten, jedoch werden die Bilder dann neu erstellt und neu nummeriert. Das finde ich nicht ganz so gut. Der Befehl ist wie folgt:
Code: convert -resize 1024x768 *.jpg
Einfacher scheint es zu sein, wenn man viele Bilder mit einen kleinen Script abarbeitet. Dieses könnte wie folgt aussehen:
Code: for bild in *.jpg
do
convert -resize 800x600 $bild ./kleiner/$bild
done
Hier werden im Ausführungsordner die vorhandenen JPG-Bilder auf eine Größe von 800x600 Pixeln verändert und im Unterordner kleiner gespeichert.
Eine prozentuale Veränderung des Bildes ist auch möglich. Der Befehl dazu sieht wie folgt aus:
Code: convert -geometry 20x20% bild.jpg bild_klein.jpg
Das Konvertieren in ein anderes Bildformat ist auch möglich. Der Befehl dazu sieht wie folgt aus:
Code: convert -resize 1024x768 bild.jpg bild.png
Ich kann das Script sehr gut dafür verwenden, wenn ich Bilder von meinen Radtouren auf dem WordPress-Blog veröffentlich will, aber nicht die sehr großen dafür benutzen möchte. Es reichen Verkleinerungen auf 60 % der Originalgröße.
|
|
|
Openshot Grundkenntnisse |
Geschrieben von: Joopi - 11-01-2023, 08:10 - Forum: Linux
- Antworten (1)
|
 |
Mit OpenShot habe ich derzeit die Gelegenheit, meine Filme mit einfachen Dingen zu verarbeiten. Folgendes kann ich nun machen:
- Szenen extrahieren (rechts und/oder links abtrennen)
- Teilstücke zu einem Film zusammenfassen
- Untertitel einfügen (PNG-Bilder mit transparentem Hintergrund und Text oder mit farbigem Hintergrund)
- Audiospur abtrennen
- Audiodatei als Nachvertonung einfügen
Beim Einfügen eines Untertitels muss beachet werden, dass dieser als erste Spur verwendet wird. Ansonsten flackert und flimmert der Untertitel. Die Grafik kann durchaus kleingehalten werden, denn durch **Anordnen** kann der Datei mitgegeben werden, an welcher Position im Film diese angezeigt werden soll.
Update - Bild in Bild
Es gibt die Möglichkeit, dass ein Bild oder ein zweiter Film als transformiertes Element in einem Hauptfilm eingebaut wird. Der Nebenfilm steht dafür in Spur 4 und wird mit Anordnung entsprechend platziert. Über Transformieren kann man die Größe es Bildes bzw. Videos noch vorgeben. Entweder zu Beginn oder eben als herauszoomenden Effekt.
Update 04.02.2020 - Audio
Man kann in einem Film die Lautstärke regeln, und zwar bei den Eigenschaften. Dort steht standardmäßig eine 1. Ein Wert von 0,1 ist dann recht leise.
Will man einen Film, der eben eigenen Ton hat, nachvertonen, so kann man in den Sequenzen vor und nach der Toneinspielung die Lautstärke anpassen, also leiser stellen, oder eben auch ganz ausschalten. Bei der Kommentierung macht ein leises Hintergrundgeräusch vielleicht einen besseren Eindruck, weil es nicht so abrupt still wird.
Die einfache Variante ist, dass man die Lautstärke abrupt abregelt. Man kann es auch faden lassen, aber dazu kenne ich mich zu wenig aus.
|
|
|
Rechtevergabe |
Geschrieben von: Joopi - 11-01-2023, 07:38 - Forum: Programmieren
- Keine Antworten
|
 |
Oftmals wird bei der Anlage einer Datenbank, die von einem Script genutzt werden soll, auch ein Benutzer gefordert. Zwar habe ich das schonmal dokumentiert, aber wohl doch nicht so gut wie es heute benötigt wird.
Die Anlage einer neuen Datenbank erfolgt so:
Code: create database datenbankname;
Für die Anlage einer Datenbank habe ich eine gute Dokumentation gemacht, denn ich möchte verhindern, dass ich unbewusst eine Datenbank vom Typ InnoDB erstelle, sofern ich es vermeiden kann. Auch ist der Zeichensatz für mich wichtig.
Die Anlage eines neuen Benutzers erfolgt so:
Code: create user "benutzername"@"%" identified by "passwort";
Nach dem der Benutzer angelegt wurde, muss man ihm die entsprechenden Rechte vergeben.
Die Rechtevergabe für den neuen Nutzer erfolgt so:
Code: grant all privileges on datenbanname.* to "benutzer"@"%";
|
|
|
Hilfen zu Manjaro |
Geschrieben von: Joopi - 11-01-2023, 07:03 - Forum: Linux
- Keine Antworten
|
 |
Vor etwa 2 Jahren trug ich mich mal mit dem Gedanken, ein Linuxdistribution zu nutzen, die dem Rolling-Release-Prinzip folgt. Es sollte Manjaro werden.
Die Paketverwaltung in Manjaro läuft nicht über APT oder APT-GET wie unter debian-basierte Distributionen, sondern über PACMAN.
Bis zur Aufgabe dieser Idee hatte ich ein paar grundlegende Hilfen zur Paketverwaltung aufgeschrieben, um nicht ganz so dumm darzustehen.
Das sind die wichtigsten Befehle in einem archbasierenden System wie Manjaro
Komplettes System aktualisieren
Pakete installieren
Code: pacman -S <Paket> oder <Paket1 Paket 2>
Pakete deinstallieren
Installation einer lokalen Datei
Code: pacman -U <Paket-Dateiname>
|
|
|
LibreOffice im Vordergrund öffnen |
Geschrieben von: Joopi - 11-01-2023, 06:58 - Forum: Linux
- Keine Antworten
|
 |
Wenn man Libreoffice startet, bleibt die Anwendung im Hintergrund.
Sobald über den Menüpunkt Zuletzt benutzte Dokumente eine Datei geöffnet wird, wird diese auch im Hintergrund geöffnet.
Das Öffnen einer LibreOffice-Datei aus dem Dateimanager heraus, ist auch so geregelt. Das kann man ändern, in dem man die Basis-Einstellungen für das Öffnen von Dokumenten ändert - und zwar wie folgt:
- LibreOffice Writer öffnen
- Menü “Extra” – “Optionen” anklicken
- Eintrag “LibreOffice” – “Erweitert” wählen
- Rechts unten Button „Experteneinstellungen öffnen“ klicken ins Suchfeld „ForceFocusAndToFront“ eingeben und auf suchen klicken
- Eintrag „NewDocumentHandling“ markieren und unten auf Bearbeiten klicken
Der Wert des Eintrages sollte von false auf true wechseln.
Dann mit OK betätigen und LibreOffice (Writer und Calc) sollten die Dokumente nun auch im Vordergrund öffnen.
Leider ist die aktuell benutzte Version noch nicht mit einem Suchfeld ausgestattet, aber ich habe den Eintrag gefunden und angepasst.
Das Verhalten ist nun wie folgt:
- Beim einfachen Start einer LibreOffice-Anwendung bleibt dieses wie bisher im Hintergrund
- Das Öffnen aus dem Menüpunkt Zuletzt benutzte Dokumente erfolgt im Vordergrund
- Das Öffnen aus dem Dateimanager heraus erfolgt im Vordergrund
Damit ist das Thema für mich gelöst. Vielleicht finde ich noch einen Hinweis darauf, wie man LibreOffice bzw. eine gestartete Anwendung, auch in den Vordergrund bekommt.
|
|
|
GThumb - mit Platzhalter umbenennen |
Geschrieben von: Joopi - 11-01-2023, 06:44 - Forum: Linux
- Keine Antworten
|
 |
So müssen der Platzhalter in GThumb gesetzt sein, damit die Nummerierung automatisch verfolgt:
Zitat:bezeichnungen_####%E
|
|
|
Audioplayer Amarok ist zurück und installierbar |
Geschrieben von: Joopi - 11-01-2023, 06:37 - Forum: Linux
- Keine Antworten
|
 |
Endlich ist Amarok wieder da und lässt sich unter Kubuntu installieren. Auf der folgenden Seite eines Forum habe ich die Information gefunden:
kubuntu 20.04 how to install amarok
In einer Antwort wurde wiederum auf die Arbeit von Pedro de Carvalho Gomes hingewiesen, der Amarok von QT4 auf QT5 portieren konnte. Es soll noch Probleme mit der Anbindung an MariaDB geben. Das muss ich testen.
Die Seite mit den Installationsanweisungen ist hier zu finden (Fremd-PPA):
Amarok KF5 snapshots for (K)ubuntu
Die Installation erfolgt quasi in 3 Schritten:
Code: sudo add-apt-repository ppa:pgomes/amarok
Code: sudo apt-get install amarok
Amarok taucht nicht in den Repositories von Kubuntu auf, also auch nicht in Synaptic. Das ist nicht schlimm. Ich muss mich unter Kubuntu eben nur daran gewöhnen.
|
|
|
Desktopnotification zeigt sich - und dann? |
Geschrieben von: Joopi - 11-01-2023, 11:30 - Forum: Linux
- Keine Antworten
|
 |
Anwendungen, die mittel Snap zur Verfügung gestellt werden, sind für mich relativ neu. Die Handhabung ist mir nicht immer ganz klar, was nichts mit dem Programm selber zu tun hat.
Letztens wunderte mich, dass immer wieder Desktopnotifications auftauchten. Irgendwie fingen die an zu nerven und ich war bemüht, diese abzustellen. Ohne Erfolg.
Nun habe ich herausgefunden, warum diese Meldungen auf dem Bildschirm immer wieder auftauchen. Und zwar ist das ein Hinweis darauf, dass es eine neue Version des Snaps gibt. Scheinbar sind Snaps relativ empfindlich, wenn diese im laufenden Betrieb aktualisiert werden. Zu lesen ist das hier: refresch awareness - Desktopnotifications
Derzeit nutze ich zwei Snap-Programme intensiv:
- Visual Studio Code (name => code)
- PyCharm-Community (name => pycharm-community)
Der permanente Hinweis auf eine Aktualisierung nervte, denn es wurde ein Zeitraum ab 13 Tage angegeben. Ich war bislang der Meinung, dass in 13 Tagen das Update kommen würde. Das tut es auch, aber eben mit "Gewalt".
Besser ist es, sobald die Meldung kommt, das Programm tatsächlich zu beenden und die Aktualisierung selber vorzunehmen. Dafür ist, im Falle von Visual Studio Code, folgender Befehl notwendig:
Code: sudo snap refresh code
Um überhaupt zu wissen, welche Snaps installiert sind, ist folgender Befehl geeigent:
Code: sudo snap list --all
Dazu muss man wissen, das Snap im Standard immer zwei Version vorrätig hält. Sofern man den Standard nicht ändert, ist die aktuelle Version aktiviert und die vorherige Version deaktiviert:
Zitat:code 97dec172 117 latest/stable vscode✓ classic
code e8a3071e 116 latest/stable vscode✓ deaktiviert,classic
Nun hat die Nerverei mit den Desktopnotifications endlich ein Ende und ich Trottel weiß nun auch, wie ich mit Snaps umzugehen habe.
|
|
|
Aktuelles Verzeichnis ermitteln |
Geschrieben von: Joopi - 09-01-2023, 03:27 - Forum: Programmieren
- Keine Antworten
|
 |
Für weitere Arbeiten mit PHP muss ich in der Lage sein, das aktuelle Verzeichnis zu ermitteln. Das geht relativ einfach mit folgendem Befehl, der das Verzeichnis auch direkt ausgibt:
PHP-Code: echo "<p>Das ist das aktuelle Verzeichnis: " . getcwd() . "</p>";
Oder, wenn das aktuelle Verzeichnis in einem HTML-Code eingebettet werden soll:
PHP-Code: <p>Das ist das aktuelle Verzeichnis: " . <?php echo getcwd(); ?> . "</p>;
|
|
|
|