[DOS + PS] ls emulate in cmd or PowerShell

Dear community,

I made a small adaption for Windows users, so I always type „ls“ in windows cmd and guess what? „command not found“… annoying…

so I made a small „ls.bat“ for replacement, looks alike the ls -la command and works better than ls in PowerShell. So If you use PowerShell alot instead of cmd, please rename „ls.bat“ to „ls-la.bat“ or „ls2.bat“??

https://www.predl.cc/downloads/ls.zip

https://github.com/Harveyhase68/ls

Have a nice day and always remember „100 years warranty“ ^^ just kidding, As always, all information provided without guarantee, use at your own risk and responsibility, I assume no liability for failures, loss of data or other financial damages. External and internal links are not checked and I assume no liability for their content. This program can be used freely, can also be offered for download, exchanged or modified and is MIT license. Please keep the copyright, thank you! A coffee you can donate under:

Click here:


thank you so much!

Liebe Community,

Ich habe ein kleine batch datei für Windows geschrieben, weil ich unter Linux immer ls oder ls -la schreibe, unter Windows kommt immer, ratet mal: „Der Befehl „ls“ ist entweder falsch geschrieben oder konnte nicht gefunden werden.“, nervig.

Also habe ich eine kleine Adaption von „ls -la“ geschrieben, funktioniert besser als in PowerShell eigenes ls. Also wenn Ihr öfter in PowerShell statt cmd arbeitet, dann bietet sich an, „ls.bat“ in „ls-la.bat“ oder „ls2.bat“ umzubenennen.

https://www.predl.cc/downloads/ls.zip

https://github.com/Harveyhase68/ls

Also wie immer „100 Jahre Garantie“, nee war ein Scherz, wie immer, alle Angaben ohne Gewähr, Anwendung auf eigene Gefahr und Verantwortung, ich übernehme keinerlei Haftung für Ausfälle, Datenverlust oder andere finanzielle Schäden. Externe und auch Interne Links werden nicht überprüft und ich übernehme keine Haftung für deren Inhalt. Dieses Programm kann frei verwendet werden, auch zum Download angeboten werden, getauscht oder verändert werden, bitte den Copyright Vermerk drinnen lassen und ist MIT Lizenz. Einen Kaffee kann man unter

Hier draufdücken:


spenden, vielen lieben Dank!

[WinSCP] Passwörter aus WinSCP.ini auslesen

Ja ich gebe es zu, ich habe mich ausgesperrt, aus meinem neuen Debian 12 Server bei Hetzner, aber in WinSCP und MobaXTerm habe ich ja noch das Passwort gespeichert…

Also was tun? Erst einmal Googlen, siehe da, es gibt ein Programm namens winscppwd.exe, dieses Dienstprogramm kann man herunterladen, dann die WinSCP.ini auslesen und sich die Passwörter anzeigen.

Ja mancher wird sagen, sehr unsicher, in WinSCP das Passwort zu speichern, aber das ganze Leben ist unsicher… Wenn jemand Zugriff auf meinen Computer hat, ist es sowieso zu spät, da hilft kein Linux mit Fail2Ban, kein Honeypot, keine Firewall, keine Blackbox usw. dann ist es vorbei. Der Hacker „sitzt“ vor meinem PC, ich hab nicht aufgepasst, entweder Home-Invasion oder per Fernwartung, dann ist es eh schon egal, dass er noch dazu das Passwort von meinem Server weiß, ehrlich, dann hab ich gaaanz andere Sorgen.

PS: Sooo aufgrund der Kommentare bin jetzt etwas schlauer, ich hab mir ein Master Passwort in WinSCP angelegt, ist lästig, das jedesmal einzugeben, aber ja, Ihr habt ja recht, sicher ist sicher.

Zurück zu WinSCP und das Auslesen des Passwortes: mal kurz aus Github bzw. Bitbucket das Programm herunterladen, aber oje, kein Download mehr, das Projekt wurde gelöscht. Aber ich hatte das Programm noch im Download Ordner, daher könnt Ihr von mir das Programm (mit Virustotal getestet) herunterladen:
https://www.predl.cc/downloads/winscppwd.zip

File Hash der .exe: SHA-1 ff5fbb3e02dc307f60b2e2c15277be9b45a8bcac verglichen mit HashPad kann man selbst herunterladen und mit Microsoft Visual Studio kompilieren, ist recht einfach ohne Probleme, Download der Release Binary (64-Bit) auch hier möglich: https://www.predl.cc/downloads/HashPad.zip braucht das .NET 6.0 Desktop Runtime Download bei Microsoft

Hash des Zip Files: a92c9fb11490c44c2d8047dc5c62ad143aea4515

Getestet unter Windows 10 und Windows 11

Wie immer, alle Angaben ohne Gewähr, Anwendung auf eigene Gefahr und Verantwortung, ich übernehme keinerlei Haftung für Ausfälle, Datenverlust oder andere finanzielle Schäden. Externe und auch Interne Links werden nicht überprüft und ich übernehme keine Haftung für deren Inhalt.

Happy coding!

[Rust] mit Diesel und PostgreSql 15

Sooo, nun habe ich einen weiteren Step in meiner „Rust“ Erfahrung gemacht, ich möchte meine Reise wieder mit euch teilen:

Wie kann ich mit Rust und Diesel auf eine PostgreSQL Datenbank zugreifen? Das erkläre ich euch nachstehend:

Wie wir Diesel installieren, habe ich im Beitrag https://www.predl.cc/rust-diesel-fuer…ows-installieren/ erklärt, bitte da starten, falls Diesel noch nicht am PC ist. Die Rust Installation habe ich kurz am Anfang des Beitrages angerissen, jedoch denke ich von dem Punkt kommt jeder weiter…

Zuerst einmal erstellen wir unser erstes Projekt. Wir öffnen ein cmd Fenster und schreiben

cargo new diesel_example

Dann cd ins Verzeichnis:

cd diesel_example

So nun ist das Projekt erstellt, wir finden nun im Verzeichnis folgende Dateien (nur die Wichtigsten!):

diesel_example/
|-- Cargo.toml # Unsere Konfigurationsdatei fürs Projekt
|-- src/
|   |-- main.rs  # Das Projekt main.rs, hier startet alles

So nun können wir erstmal die Cargo.toml öffnen:

[package]
name = "diesel_example"
version = "0.1.0"
edition = "2021"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]

Das ändern wir auf:

[package]
name = "diesel_example"
version = "0.1.0"
edition = "2021"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
diesel = { version = "*", features = ["postgres"] }
dotenv = "*"
diesel_codegen = "*"  # Füge diesel_codegen hinzu

Damit haben wir bereits Diesel als Abhängigkeit hinzugefügt, codegen erlaubt uns, die Schema.rs automatisch aus der Datenbank zu erstellen, sehr nützlich.
dann erstellen wir eine .env Datei und schreiben hinein:

DATABASE_URL=postgres://postgres:{password}@localhost/diesel_example

{password} bitte mit Ihrem Passwort ersetzen.
Dann müssen wir noch die main.rs aus dem src Verzeichnis ändern:

extern crate diesel;
extern crate dotenv;

use diesel::prelude::*;
use dotenv::dotenv;
use std::env;

table! {
    users (user_id) {
        user_id -> Int8,
        user_name -> Varchar,
        user_password -> Varchar,
    }
}

//use schema::users;cls

// Diesel-Verbindung initialisieren
fn establish_connection() -> PgConnection {
    dotenv().ok();

    let database_url = env::var("DATABASE_URL").expect("DATABASE_URL not found in .env");
    PgConnection::establish(&database_url)
        .expect(&format!("Error connecting to {}", database_url))
}

fn main() {
    let mut connection = establish_connection();

    // Hier verwenden wir Diesel-Abfragen, um alle Benutzer aus der Tabelle "users" abzurufen
    let all_users = users::table.load::<(i64, String, String)>(&mut connection) // mutable Verweis
        .expect("Error loading users");

    for user in all_users {
        let (user_id, user_name, user_password) = user;
        println!("User ID: {}, User Name: {}, User Password: {}", user_id, user_name, user_password);
    }

}

Damit sind wir fast fertig, nur noch in pgAdmin eine datenbank anlegen, wir benennen diese einfach „diesel_example“…

CREATE TABLE IF NOT EXISTS public.users
(
    user_id bigint NOT NULL DEFAULT nextval('users_user_id_seq'::regclass),
    user_name character varying(35) COLLATE pg_catalog."default" NOT NULL,
    user_password character varying(35) COLLATE pg_catalog."default" NOT NULL,
    CONSTRAINT users_pkey PRIMARY KEY (user_id)
)

TABLESPACE pg_default;

ALTER TABLE IF EXISTS public.users
    OWNER to postgres;

Wir können gleich ein paar Datensätze in die PostgreSQL Datenbank speichern:

insert into users (user_name, user_password) values('alex','password');
insert into users (user_name, user_password) values('admin','password');
insert into users (user_name, user_password) values('john','password');

Dann sehen wir auch eine Ausgabe vom Rust Projekt.

diesel setup

Damit wird die migration erstellt (also eine Datenbank Versions Kontrolle)

diesel migration run

Das erstellt die schema.rs im /src Verzeichnis! Das ist die Struktur der Tabellen, die brauchen wir später

cargo run

Damit startet man dann das Projekt, zuerst wird laaaange kompiliert und dann ausgeführt, später dauert der Vorgang nicht mehr so lange, da verwendet Cargo die bereits kompilierten Komponenten und das geht viel schneller.
Die Ausgabe:

   Compiling proc-macro2 v1.0.67
      Compiling unicode-ident v1.0.12
      Compiling unicode-xid v0.0.4
      Compiling synom v0.11.3
      Compiling regex v0.2.11
      Compiling quote v0.3.15
      Compiling quote v1.0.33
      Compiling syn v2.0.33
      Compiling lazy_static v1.4.0
      Compiling serde v1.0.188
      Compiling memchr v2.6.3
      Compiling ucd-util v0.1.10
      Compiling vcpkg v0.2.15
      Compiling pq-sys v0.4.8
      Compiling regex-syntax v0.5.6
      Compiling serde_derive v1.0.188
      Compiling aho-corasick v0.6.10
      Compiling thread_local v0.3.6
      Compiling syn v0.11.11
      Compiling byteorder v1.4.3
      Compiling itoa v1.0.9
      Compiling utf8-ranges v1.0.5
      Compiling serde_json v1.0.107
      Compiling derive-error-chain v0.10.1
      Compiling diesel_table_macro_syntax v0.1.0
      Compiling error-chain v0.10.0
      Compiling ryu v1.0.15
      Compiling dotenv v0.10.1
      Compiling diesel_derives v2.1.1
      Compiling diesel v0.16.0
      Compiling bitflags v2.4.0
      Compiling diesel_codegen v0.16.1
      Compiling dotenv v0.15.0
      Compiling diesel v2.1.1
      Compiling diesel_example v0.1.0 (C:\rust_projects\diesel_example)
    Finished dev [unoptimized + debuginfo] target(s) in 2m 02s
     Running `target\debug\diesel_example.exe`
User ID: 1, User Name: alex, User Password: password
User ID: 2, User Name: admin, User Password: password
User ID: 3, User Name: john, User Password: password

Dauert etwa 3-4 Minuten, nachdem aber das Projekt erstellt wurde, geht es wesentlich schneller:

    Finished dev [unoptimized + debuginfo] target(s) in 0.16s
     Running `target\debug\diesel_example.exe`
User ID: 1, User Name: alex, User Password: password
User ID: 2, User Name: admin, User Password: password
User ID: 3, User Name: john, User Password: password

Dann nur mehr Sekunden…

cargo build

Das Projekt wird nur kompiliert, keine Ausführung.

cargo clean

Falls sich die Importe stark ändern, es sich ein Fehler eingeschlichen hat usw. kann man wieder von vorne anfangen.

Getestet unter Windows 10 (wird unter Windows 11 sicher auch gehen!), müsste aber auch so in Linux funktionieren…

Wie immer, alle Angaben ohne Gewähr, Anwendung auf eigene Gefahr und Verantwortung, ich übernehme keinerlei Haftung für Ausfälle, Datenverlust oder andere finanzielle Schäden.

Happy coding!

[Rust] Diesel für Rust auf Windows installieren

Ich schreibe diese Anleitung, da die Installation von Diesel auf Windows 10 (11) nicht so einfach war…

Für die Installation unter Windows habe ich den Installer für Rust verwendet:

https://www.rust-lang.org/tools/install

Damit wird Rust und Cargo installiert, nicht Diesel.

Unter Linux (CentOS und Debian):

apt install curl -y bzw. yum install curl -y
curl --proto '=https' --tlsv1.3 https://sh.rustup.rs -sSf | sh

Weitere Anleitungen für die Installation von Rust:

https://wiki.crowncloud.net/?How_to_Install_Rust_on_Debian_12

Oder einfach Googlen.

Zuerst einmal, Cargo ist für Rust zuständig Module zu installieren.

Diesel ist ein Modul für Rust, Diesel erleichtert die Datenbankzugriffe.

Diesel unterstützt PostgreSQL, MySQL und SQLite, darin liegt aber der „Hund“ begraben… wir sollten alle 3 Datenbanken auf unserem PC installiert haben. Aber das ist nur die 1/2 Miete…

Wir brauchen die libpq.lib, die libmysql.lib und die sqlite3.lib. Besser gesagt, wir müssen für Cargo die Pfade über die Windows Variablen setzen.

Anmerkung: Ich verwende unter Windows Everything, das kann man von https://www.voidtools.com/ herunterladen. Ehrlich, ich wüsste nicht, was ich ohne dieses super Tool machen sollte, die Windows Dateisuche ist ja sowas von am A****… ist elendig langsam, findet nichts und noch dazu 100% CPU, wenn irgendwas WSearch nicht passt…

PostgreSQL:

C:\Program Files\PostgreSQL\15\lib\libpq.lib

Diesen Pfad müssen wir Cargo als CMD Variable übermitteln: (Pfad selbst anpassen bitte, falls Sie PostgreSQL 16+ oder älter haben!

SET PQ_LIB_DIR=C:\Program Files\PostgreSQL\15\lib

Dann noch SQL-Lite, das ist nicht sooo einfach, dafür muss man das Windows SDK installieren, sonst muss man selbst die sqlite3.lib kompilieren… Alternativ kann man von https://github.com/buggins/ddbc das ganze Paket downloaden und entpacken, im Verzeichnis ist bei mir C:\Users\Alex\Downloads\ddbc-master\ddbc-master\libs\win64 die sqlite3.lib enthalten… aber ich hab die sqlite3.lib vom Windows-SDK genommen

SET SQLITECLIENT_LIB_DIR=C:\Program Files (x86)\Windows Kits\10\Lib\10.0.22000.0\um\x64

Dann ist noch MySQL dran:

Cargo sucht die mysqlclient, welche natürlich nicht gefunden wurden, dafür muss man von https://cdn.mysql.com/archives/mysql-connector-c/mysql-connector-c-6.1.11-winx64.zip herunterladen und entpacken, da war die libmysql.lib enthalten:

SET MYSQLCLIENT_LIB_DIR=C:\Users\Alex\Downloads\mysql-connector-c-6.1.11-winx64\mysql-connector-c-6.1.11-winx64\lib\vs14

Die Pfade unter Anführungszeichen „“ zu setzen, wie es in Windows mit Pfaden mit Leerzeichen so üblich ist, war hier nicht notwendig!

Danach konnte ich erfolgreich Diesel mit Cargo installieren:

cargo install diesel_cli

Nachdem ich auf einer „nackten“ Windows 10 VM das Ganze noch einmal ausprobiert habe, konnte ich trotzdem ich die sqlite3.lib in der 64-bit Version habe und die SET SQLITECLIENT_LIB_DIR korrekt auf das Verzeichnis gesetzt habe, konnte ich immer noch nicht Diesel installieren, ein wenig suchen später:

cargo install diesel_cli --no-default-features --features "sqlite-bundled mysql postgres" --force

Man nimmt die in Cargo eingebaute SQ-Lite, liefert immer die aktuelle bzw. die gesuchte sqlite3.lib…

Um mehr Output und Fehlersuche für Cargo zu ermöglichen, kann man das Log aktivieren, das macht man mit:

SET CARGO_LOG=trace cargo fetch

Getestet unter Windows 10 (wird unter Windows 11 sicher auch gehen!)

Wie immer, alle Angaben ohne Gewähr, Anwendung auf eigene Gefahr und Verantwortung, ich übernehme keinerlei Haftung für Ausfälle, Datenverlust oder andere finanzielle Schäden.

Happy coding!

[Debian 12] VirtualBox 7 unter Windows die .vdi bzw. .vmdk Festplatte vergrößern und Debian 12 Partition(en) erweitern

Zuerst einmal, ich verwende Windows 10 mit VirtualBox 7.0, darauf läuft Debian 12 mit Gnome.

Ich habe unterschätzt, wieviel Speicherplatz ein Desktop BS benötigt, daher habe ich mit 100GB angefangen, aber unterschätzt, wieviel Arbeit es ist, das nachher zu erweitern…

Also zuerst schauen wir mal, wo VirtualBox liegt, einfach die VBoxManage.exe suchen, am Einfachsten habe ich gefunden, Everything zu verwenden (https://www.voidtools.com/) einfach als Dienst installieren, es durchsucht die Festplatte(n) und man kann alles schnell suchen, wer das Programm nicht mag oder sich kein neues Programm installieren möchte, dann kann man auch über die Verknüpfung sehen, wo das Programm installiert ist.

Rechte Maustaste auf Virtualbox und dann Eigenschaften:

Drücken Sie auf „Dateipfad öffnen“ und voila, wir haben das richtige Verzeichnis!

Also bei mir ist VirtualBox auf C:\Program Files\Oracle\VirtualBox installiert, das brauchen wir später, wenn bei Ihnen VirtualBox wo anders installiert ist, dann müssen Sie den Pfad bitte anpassen.

Wir öffnen auf Windows ein CMD Fenster, ich öffne den immer als Administrator, dann brauche ich nicht ständig umwechseln, falls ich mal mehr Rechte brauche, also WIN+R dann CMD eingeben und Shift + Ctrl + ENTER und bestätigen den Administrator-Zugriff.

Wechseln wir ins Verzeichnis, wo Debian installiert ist, das ist einfach, aus VirtualBox  aus, rechte Maustaste auf die Virtuelle Maschine drücken und drücken Sie auf „Im Explorer zeigen“, dann öffnet sich der richtige Pfad.

Jetzt wissen wir wo Debian installiert ist, das ist bei mir auf C:\Users\Alex\VirtualBox VMs\Linux\Debian 12.1 Gnome

So nun können wir mal sehen, ob VirtualBox etwas über die .vdi Festplatte etwas zu sagen hat: (die Festplatte ist die mit dem .vdi oder .,vmdk am Ende)

cd "C:\Users\Alex\VirtualBox VMs\Linux\Debian 12.1 Gnome"
"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" showhdinfo "Debian 12.1 Gnome.vdi"

Merke: In Windows, immer dann wann ein Leerzeichen im Pfad ist, muss man die Befehle, Pfade usw. unter “ “ Anführungszeichen setzen!

Dann kommt folgendes:

UUID: c41778e5-3a2d-441f-81d3-5b8bac7fbe3f
Parent UUID: base
State: locked write
Type: normal (base)
Location: C:\Users\Alex\VirtualBox VMs\Linux\Debian 12.1 Gnome\Debian 12.1 Gnome.vdi
Storage format: VDI
Format variant: dynamic default
Capacity: 102400 MBytes
Size on disk: 19249 MBytes
Encryption: disabled
Property: AllocationBlockSize=1048576
In use by VMs: Debian 12.1 Gnome (UUID: 0068487f-6f4f-46b6-8192-6c83c7360c8a)

Somit wissen wir, das VBOXManage die Festplatte erkannt hat und die Daten ausliest.

Wir können nun die Größe, von meinen 100gb auf 200gb erweitern:

"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" modifyhd "Debian 12.1 Gnome.vdi" --resize 204800

Natürlich muss die Virtuelle Maschine vorher abgedreht sein!

sonst kommt:

VBOX_E_INVALID_OBJECT_STATE (0x80bb0007)

Das bedeutet, die Virtuelle Maschine läuft, das darf natürlich nicht sein!

0%…10%…20%…30%…40%…50%…60%…70%…80%…90%…100%

Bedeuet alles ok!

So nun können wir die Virtuelle Maschine wieder starten.

Sobald wir wieder eingeloggt sind, können wir die zu kleinen Partitionen identifizieren und vergrößern:

Öffnen Sie ein Terminal (Shell oder Bash) und wir listen mal die Festplatten (mounts) auf:

sudo lsblk

alex@debian12gnome-local:~$ sudo lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 200.1G 0 disk
├─sda1 8:1 0 487M 0 part /boot
├─sda2 8:2 0 1K 0 part
└─sda5 8:5 0 99.5G 0 part
├─vg_system-root 254:0 0 6G 0 lvm /
├─vg_system-usr 254:1 0 20.9G 0 lvm /usr
├─vg_system-var 254:2 0 5.4G 0 lvm /var
├─vg_system-swap_1 254:3 0 3.8G 0 lvm [SWAP]
├─vg_system-skole+tjener+home0 254:4 0 25.4G 0 lvm /srv/nfs4/home0
│ /skole/tjener/home0
├─vg_system-var+spool+squid 254:5 0 14.3G 0 lvm /var/spool/squid
└─vg_system-skole+backup 254:6 0 16.9G 0 lvm /skole/backup
sr0 11:0 1 51M 0 rom
alex@debian12gnome-local:~$

Wir sehen aktuell nicht viel, da wir ja nicht wissen wieviel Platz auf der jeweiligen Partition (mount) vorhanden ist:

sudo df -h

alex@debian12gnome-local:~$ sudo df -h
Filesystem Size Used Avail Use% Mounted on
udev 3.0G 0 3.0G 0% /dev
tmpfs 601M 2.9M 598M 1% /run
/dev/mapper/vg_system-root 5.9G 838M 4.8G 15% /
/dev/mapper/vg_system-usr 16G 15G 452M 95% /usr
tmpfs 3.0G 12K 3.0G 1% /dev/shm
tmpfs 5.0M 8.0K 5.0M 1% /run/lock
/dev/sda1 455M 135M 296M 32% /boot
/dev/mapper/vg_system-skole+tjener+home0 25G 124K 24G 1% /srv/nfs4/home0
/dev/mapper/vg_system-skole+backup 17G 24K 16G 1% /skole/backup
/dev/mapper/vg_system-var 5.2G 1.1G 3.9G 23% /var
/dev/mapper/vg_system-var+spool+squid 14G 17M 14G 1% /var/spool/squid
tmpfs 601M 168K 601M 1% /run/user/1000

Und da sehen wir unseren Schuldigen es ist /dev/mapper/vg_system-usr, diese Partition müssen wir erweitern

sudo lvextend -L +5G /dev/vg_system/usr

alex@debian12gnome-local:~$ sudo lvextend -L +5G /dev/vg_system/usr
Size of logical volume vg_system/usr changed from 16.85 GiB (5338 extents) to 20.85 GiB (6618 extents).
Logical volume vg_system/usr successfully resized.

Damit erweitern wir die Partition aber können den dazugewonnenen Platz aber noch nicht verwenden, dazu müssen wir noch das Dateisystem erweitern:

sudo resize2fs /dev/vg_system/usr

alex@debian12gnome-local:~$ sudo resize2fs /dev/vg_system/usr
resize2fs 1.47.0 (5-Feb-2023)
Filesystem at /dev/vg_system/usr is mounted on /usr; on-line resizing required
old_desc_blocks = 3, new_desc_blocks = 4
The filesystem on /dev/vg_system/usr is now 6776832 (4k) blocks long.

Damit haben wir erfolgreich die Festplatte erweitert und können nun Dateien, Programme usw. speichern. Wenn uns der Platz ausgeht, dann erweitern wir nach dieser Anleitung die Festplatte.

Getestet unter Debian 12 und Windows 10 (Windows 11 sollte ohne Probleme gehen!)

Wie immer, alle Angaben ohne Gewähr, Anwendung auf eigene Gefahr und Verantwortung, ich übernehme keinerlei Haftung für Ausfälle, Datenverlust oder andere finanzielle Schäden.

Happy coding!

[Scoriet] Quellcode Generator Vorstellung

Scoriet, ein Template gestützter Programmgenerator.

Scoriet (https://www.scoriet.com) ist in Programm dass ich vor längerer Zeit geschrieben habe.

Scoriet ist ein Template gestützter Programmgenerator, nicht wie PHPRunner oder vergleichbare Programme, kann Scoriet ganze App’s vollständig aufgrund von Vorlagen (Templates) generieren. Jede Änderung an den Templates werden registriert und die Vorlagen von Scoriet neu Kompiliert.

Zuerst mit einem einfachen PHP Klassen Generator ausgestattet, entwickelte ich das Konzept weiter und brachte einen PHP API Generator dazu, später kam sogar eine komplette Webseite mit Login usw. dazu. CRUD also create, read, update und delete. Für jede dieser Begriffe erstellt Scoriet eine Seite.

  • Eine Startseite mit Menü
  • Eine Login-Seite
  • Eine Tabelle der Daten
  • Ein Formular für die Dateneingabe
  • Eine Seite um die Daten zu drucken

Ich mache Scoriet open-source 2017. Das Projekt ist auf GitHub: https://github.com/Harveyhase68/scoriet

Zumindest konnte Scoriet bisher nur PHP generieren, jetzt habe ich Scoriet weiter verbessert und ein neues Template ist dazu gekommen:

Scoriet kann nun auch eine Python Flask REST API generieren.

Die Verbindung zur Datenbank erfolgt über die db_config.py und die eigentliche API ist die api.py. Im Verzeichnis „/tables“ stehen alle Datentabellen der Datenbank (MySQL oder PostgreSQL). api.py liest am Programmstart alle *.py aus und erstellt selbständig eine Route für jede Tabelle. In der .env Datei stehen die Zugangsdaten für die Datenbank. Die functions.py ist für die Ausgabe als JSON zuständig.

Wenn eine users.py im /tables stehen würde, würde Scoriet folgende Routen anlegen:

  • /users – GET liest alle users aus, sortiert sie nach der z.B. user_no
  • /users/query – POST, erwartet eine JSON datei, wobei query, fields oder orderby gesetzt werden können, damit wird dann das SELECT statement aufgebaut
  • /users – POST, hier werden die Daten in die Datenbank per SQL INSERT in die Datenbank geschrieben, erwartet werden Datenfelder im JSON Format.
  • /users – PUT, hier werden die Daten geändert, das UPDATE SQL Statement nimmt nur die Daten per JSON und auch nur die Felder die geändert werden sollen. Alle anderen Felder werden nicht geändert. Die ID oder die Nr. wird per URL übergeben.
  • /users – DELETE, übergeben Sie die die ID bzw. den eindeutigen Datensatz-Identifier per URL, der Datensatz wird gelöscht.

Was noch fehlt, wäre die API Sicherheit, zumindest die BASIC Authentication hätte ich schon mal gemacht, das müsste ich noch einbauen. Eine weitere Sicherheitsstufe wäre natürlich die Session-ID und ein Token. Aktuell muss ich mich leider wieder um etwas anderes kümmen, ev. kann ja ein anderer Programmierer das für mich machen?? *lieb kuck*

Getestet unter Windows 10 (11 sollte ohne Probleme gehen), die Python REST API ab Python 3.7 auf CentOS 6 und Debian 11.

Wie immer, alle Angaben ohne Gewähr, Anwendung auf eigene Gefahr und Verantwortung, ich übernehme keinerlei Haftung für Ausfälle, Datenverlust oder andere finanzielle Schäden.

Happy coding!

[Python3] PostgreSQL verwenden

Um mit einer PostgreSQL Datenbank eine Verbindung aufzubauen, Daten auszulesen, dafür kann man folgendes Skript verwenden:

Zuerst einmal installieren wir psycopg:

sudo python -m pip install psycopg
Oder suso pip install psycopg

Dann bereiten wir die Datenbank „sample“ vor:

DROP TABLE IF EXISTS `sample`;
CREATE TABLE IF NOT EXISTS `sample` (
  `id` int NOT NULL AUTO_INCREMENT,
  `record_no` int NOT NULL,
  `description` varchar(50) NOT NULL,
  `start_date` datetime NOT NULL,
  PRIMARY KEY (`id`),
  KEY `record_no_key` (`record_no`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
COMMIT;

Dann das Script:

sudo nano psycopg_test.py
import psycopg
from psycopg import connect as pg_connect, rows as pg_rows

connection = None

try:
    connection = pg_connect(
            user="postgres",
            password="admin",
            host="127.0.0.1",
            port="5432",
            dbname="test_py",
            row_factory=pg_rows.namedtuple_row
    )
    cursor = connection.cursor()
except (Exception, psycopg.Error) as error:
    print("Error while connecting to PostgreSQL", error)

select_Query = 'SELECT * FROM sample'

cursor.execute(select_Query)

samples = cursor.fetchall()

for sample in samples:
    print("description = ", sample.description, "\n")

if connection:
    cursor.close()
    connection.close()
    print("PostgreSQK connection is closed")

Wir verwenden nur psycopg, also genau genommen psycopg3.

Bitte das Script nicht psycopg.py benennen, da Python den Dateinamen als Objekt erachtet und es natürlich psycopg nicht findet!

sudo pythob psycopg_test.py

Getestet unter CentOs 7 und Debian 11 und Windows 10

Wie immer, alle Angaben ohne Gewähr, Anwendung auf eigene Gefahr und Verantwortung, ich übernehme keinerlei Haftung für Ausfälle, Datenverlust oder andere finanzielle Schäden.

Happy coding!

[win->macos13] Wie man macOS Ventura (13) auf VMWare (Windows 10/11) zum laufen bringt

Diese Anleitung ist rein Akademisch, keine Nachahmung empfohlen und ist von Seiten Apples nicht gestattet. Ich betreibe keine Downloads zu dem Thema und habe nach der Anleitung alle virtuellen Maschinen wieder gelöscht. Nachmachen auf eigene Gefahr und Verantwortung.

Zuerst laden wir uns den VMWare Player 17 herunter:

https://www.vmware.com/content/vmware/vmware-published-sites/us/products/workstation-player/workstation-player-evaluation.html.html

Dann das macOS Ventura (13) VMDK Image herunterladen: (eine VMDK ist fertig installiert, also ein „Clone“ von einer Festplatte, damit geht es schneller und vor allem es funktioniert! Man braucht nicht mühsam von einer .ISO das Betriebssystem zu installieren)

https://drive.google.com/file/d/1pKppcUCT6StvNGDeqwELyoLheNrilE_K/view?usp=sharing
https://drive.google.com/file/d/1XvYBTeFBNfU6lEjCoHl1YxlMbpjugA7H/view?usp=sharing
https://drive.google.com/file/d/1vSr7apfvIB0Ufq9SCDKhMgmILCuideWz/view?usp=sharing

Credits für die VM und den unlocker gehen an https://www.sysprobs.com/macos-13-ventura-vmware-pre-installed-image-download-windows-11-10?utm_content=cmp-true

Falls einmal die Downloads nicht mehr gehen, bitte mir eine kurze Nachricht schicken, ich kann euch dann auf einen alternativen google.drive.com verlinken.

Warum verlinke ich nicht gleich auf https://www.sysprobs.com?? Natürlich, damit Ihr a) weniger Werbung seht, b) die Anleitung nun auf Deutsch habt und c) ein „Mirror“ ist, für alle Eventualitäten und d) ich habe den Installationsvorgang sehr detailliert abgebildet, damit auch weniger PC begabte die Schritte nachvollziehen können. Aber bitte klickt bitte auf den oberen Link und macht einen Hit, damit sysprobs.com etwas davon hat!

Disclaimer: Die Bilder habe ich natürlich nicht von Sysprobs geklaut, das sind hübsch meine, die bitte nur mit meiner Erlaubnis verlinken/verwenden, vielen Dank!

Dann benötigen wir noch 7-Zip zum entpacken:

https://www.7-zip.org/download.html

Nun noch den VM Ware Player 17 und 7Zip installieren… das müsst Ihr hinbekommen, Spoiler: nachher wird’s noch schwieriger… oder Ihr lasst euch helfen?!

Dann laden wir uns noch den VMWare Unlocker herunter:

https://github.com/paolo-projects/unlocker/releases/download/3.0.4/unlocker.zip

Entpacken, nach unlocker, ich entpacke immer gleich im Download Ordner, danach lösche ich den Ordner wieder, nach getaner Arbeit.

Die Installation vom unlocker (keine Illegale Software, schaltet nur in der VMWare die Option macOS frei!!) soll erfolgen, wenn VMWare nicht läuft, sonst funktioniert das nicht. Also VMWare beenden, dann öffnet Ihr einen Explorer, klickt mit der rechten Maustaste auf „win-install.cmd“ und wählt „Als Administrator ausführen“…

damit schaltet Ihr MacOS in VMWare frei, sonst könnt Ihr MacOS nicht installlieren…

Öffnet den Task-Manager (STRG+SHIT+ESC), seht nach in „Leistung/CPU“ und schaut unten auf „Virtualisierung“, wenn dort steht „Aktiviert“ ist alles roger, keine Änderung notwendig, falls dort „Virtualisierung“ auf „Deaktiviert“ steht, müsst Ihr die VT-x für den Prozessor im BIOS einschalten, nur so funktioniert die VMWare. Virtualisierung aktivieren falls man Hilfe braucht.

So damit haben wir die Voraussetzungen und können loslegen:

Zuerst entpacken wir die 3 Image Teile, damit wir die .vmdk erhalten:
Wir kopieren alle 3 Teile in ein Verzeichnis, drücken die rechte Maustaste auf die erste ZIP Datei (.001) und wählen Extract to „macOS13_ventura\“

Im Verzeichnis macOS13_ventura sollte sich nun die macOS13_ventura.vmdk befinden!

Wir starten VMWare und erzeugen eine neue Virtuelle Maschine:

Dann wählen wir später installieren und drücken „Next“:

Dank des „unlocker“ Patches, können wir nun Apple Max OS X auswählen und „Next“ drücken:

Nun können wir den Namen der VM bestimmen und auch den Speicherort und drücken „Next“:

Dann die Festplattengröße festlegen, ist egal, wir tauschen dann diese Festplatte gegen unsere entpackte VMDK vorinstallierte Festplatte aus. Drücken Sie „Next“

So, dann auf „Finish“ drücken:

Nun ändern wir die neu erstellte Virtuelle Maschine, drücken Sie dazu auf den Namen „macOS 13“ oder so wie Sie die VM genannt haben und drücken unten auf „Edit virtual machine settings“

Nun ändern wir die Ram Größe auf 6144MB = 6GB Ram:

Dann ändern wir die Anzahl der Prozessoren auf 6:

Nun fügen wir die Festplatte hinzu, wählen Sie Hard Disk (SATA) und drücken Sie unten auf „Add“:

dann wählen wir Harddisk und drücken auf „Next“

Wählen Sie SATA und drücken Sie auf „Next“:

Im nächsten Bildschirm wählen Sie „Use an existing virtual disk“ und drücken auf „Next“:

Wählen Sie nun die heruntergeladene VMDK aus und drücken Sie auf „Finish“:

Nachdem die VMDK schon älter ist (VMWare 16) kann man diese noch auf das neueste Format bringen, das habe ich gemacht:

Man kann, muss man aber nicht, die Größe von 60GB auf 80GB oder größer nun verändern, das kann man mit dem Button „Expand“, einfach die neue Größe eingeben, macOS verwendet dann die neue Größe ohne die Partition ändern zu müssen.

Nun müssen wir nur noch die .vmx Datei ändern, dazu öffnen wir das Verzeichnis, wo wir die VM installiert haben, dazu können wir nochmal in den Virtual Machine Settings nachsehen, wo die VM vorhanden ist:

Diesen Pfad kopieren wir und setzen ihn im Adressfeld von einem Windows Explorer ein, dann drücken wir mit der rechten Maustaste darauf und wählen „Öffnen mit“:

und wählen dann den Editor und drücken Ok:

dann im Editor fügen wir ganz unten smc.version = “0” ein:

Im nächsten Schritt suchen wir nach „ethernet0.virtualDev“, den Eintrag müssen wir von ethernet0.virtualDev=“e1000e“ auf ethernet0.virtualDev=“vmxnet3″ ändern

Speichern wir die Datei und wir können die VM starten:

das Passwort für den Sysprobs Benutzer Account lautet: sysprobs123: (wenn das Passwort falsch ist, probiert szsprobs123 (im Englischen sind Z und Y vertauscht!)

In der VM zuerst die Tastatur auf Deutsch umstellen, dann sich im Apple Account Anmelden. Der Klammeraffe @ ist auf der Apple Tastatur ALTGR+L statt ALTGR+Q

Kann man diese VM updaten z.B. später mal auf macOS 14 usw., JA

Kann man den Sysprobs Account ändern: JA (einfach einen neuen Admin Benutzer hinzufügen und den Sysprobs Account löschen)

Kann man das Passwort ändern, JA

Eigentlich kann man nun mit der funktionierenden VM so ziemlich alles machen was man möchte, mit XCode Programme schreiben, Handys verbinden (die USB einfach freigeben) usw. Den Bildschirm kann man größer anpassen, Vollbild geht auch, ich habe 3 Bildschirme, der linke ist dann für macOS.

Aja natürlich geht das ganze auch direkt am Mac, da ich einen mac mini late 2014 besitze und Xocde natürlich die Mindestanforderung macOS 13 hat, habe ich mich überhaupt darum bemüht, macOS 13 zum Laufen zu bringen. Mit VMWare Fusion kann man auch am Mac direkt, macOS 13 emulieren:

Disclaimer: Ich besitze einen Mac Mini darauf läuft macOS, ich habe diese Anleitung nur geschrieben, damit Andere macOS testen können, aber wenn man macOS benutzen möchte, sei es Privat, Beruflich oder gar in Firmem verwenden möchte, bitte kauft einen Apple Mac! Ich habe macOS nicht mehr in der VM laufen (nach dem Testen gelöscht) und distanziere mich von jedem finanziellem Interesse. Grundsätzlich ist der Betrieb und Installation von macOS auf einer nicht Apple Hardware untersagt und verstößt daher gegen die Bestimmungen von Apple!

Der Download ist von einem anderen User, der nicht mit mir verwandt oder mir bekannt ist, ich stehe in keiner Verbindung mit dieser Person. Falls eine Beanstandung dieser Links besteht, bitte um eine Nachricht auf office[add]predl.cc, ich werde diese umgehend entfernen.

Ich erhalte keine Finanzielle Unterstützung von irgendwem und werde auch nicht Werbefinanziert. Diese Seite ist ein Hobby Projekt und alle Anleitungen sollen nur als „Proof of Concept“ gesehen werden, nachmachen auf eigene Gefahr und Verantwortung.

Apple und macOS alle Rechte (Markenrechte und Copyright) liegen bei Apple Inc.One Apple Park Way, Cupertino, CA 95014.

Getestet unter Windows 10 und VMWare Player 17

Wie immer, alle Angaben ohne Gewähr, Anwendung auf eigene Gefahr und Verantwortung, ich übernehme keinerlei Haftung für Ausfälle, Datenverlust oder andere finanzielle Schäden. Die Links auf dieser Seite wurden von mir nicht überprüft, ich übernehme keine Haftung für die Inhalte.

Happy coding!

[Python3] MySQL verwenden

Um MySQL mit dem MySql Connector zu verwenden muss dieser zuerst in Python installiert werden:

sudo python -m pip install mysql-connector-python
oder sudo pip install mysql-connector-python
oder pip install mysql-connector-python
oder pip3 install mysql-connector-python

Für Windows halt ohne "sudo", ich empfehle: führen Sie CMD immer als Administrator aus, das geht mit WIN+R, dann cmd.exe eingeben und Shift+Strg+Enter drücken, dann startet man die CMD "elevated" also als Administrator. Dann bleibt man nirgendwo stecken, nur weil man keine Rechte hat...

Dann legen wir eine neue Datenbank am lokalen Computer/Server an:

DROP TABLE IF EXISTS `sample`;
CREATE TABLE IF NOT EXISTS `sample` (
  `id` int NOT NULL AUTO_INCREMENT,
  `record_no` int NOT NULL,
  `description` varchar(50) NOT NULL,
  `start_date` datetime NOT NULL,
  PRIMARY KEY (`id`),
  KEY `record_no_key` (`record_no`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
COMMIT;

Einfach mit PhpMyAdmin auf die lokale Datenbank verbinden und das .SQL Script ausführen, natürlich kann man noch das Script als .sql Datei speichern und dann per „Importieren“ dann ausführen, bei kleineren Dateien geht Copy/Paste bei größeren Importieren, wenn die Datei riesig ist, muss man direkt die Datei importieren (z.B. mit mysql -u username -p database_name < sample.sql)

Dann erstellen wir unser Pythonscript:

(Anmerkung: das Script NICHT mysql.py benennen, sonst überschreiben wir das Modul mysql mit unserem und das mysql Modul wird nicht gefunden!)

sudo nano mysql_test.py

Der Inhalt:

import mysql.connector
from datetime import date

cn_connect = mysql.connector.connect(
    host='localhost',
    user='root',
    password='admin',
    database='test_py'
)

# connect to mysql, cursor is our "recordset"
cursor = cn_connect.cursor()

# date of today
datum = date.today()

try:
    # select last record_no
    sql_query = "SELECT * FROM sample ORDER BY record_no DESC LIMIT 1 OFFSET 0"
    cursor.execute(sql_query)
    
    # fetch all records, even only one is in the buffer
    record = cursor.fetchone()
    
    # if we got a record, then get it
    if record:
        # read last_record_no
        last_record_no=record[1]
    else:
        # otherwise last_record_no=0
        last_record_no=0    
except mysql.connector.Error as error:
    print("Error while connecting to MySQL", error)

# prepare sql query for insert
sql_insert = "INSERT INTO sample (record_no, description, start_date) VALUES (%s, %s, %s)"
data = (last_record_no+1, "*Automatic insert*", datum)

# add record to database
cursor.execute(sql_insert, data)

# finish transaction = important!
cn_connect.commit()

# close cursor
cursor.close()

# close connection
cn_connect.close()

Ausführen:

sudo python mysql_test.py

Unser Script liest den letzten Datensatz in der Tabelle „sample“, liest den letzten „record_no“ aus, später wird dieser wieder mit +1 eingefügt. Wenn kein Datensatz ursprünglich in der Tabelle war (wir testen mit if record:) dann wird die variable last_record_no mit 0 initialisiert. 0+1 ergibt dann den Start record_no als 1. Bitte nicht record_no als ID verwenden, das überlassen wir hübsch MySQL mit der Auto-ID, das funktioniert und hat mit der record_no nichts zu tun, die verwenden wir später für Relationen, Links usw. um z.B. 2 Datenbanken verbinden zu können oder sauber zu Synchronisieren, wir verlassen uns nicht auf die MySQL-ID.

Getestet unter CentOs 7, Debian 11 und diesmal auch Windows 10 (wird mit Windows 11 genau so funktionieren)

Wie immer, alle Angaben ohne Gewähr, Anwendung auf eigene Gefahr und Verantwortung, ich übernehme keinerlei Haftung für Ausfälle, Datenverlust oder andere finanzielle Schäden.

Happy coding!

[Python3] Eine Flask Anwendung unter Linux

So es geht weiter mit dem Blog, heute beschäftigen wir uns mit einer Flask Anwendung einer REST API. Ich verwende das selbst, um mit meinem laufenden Python Service zu kommunizieren.

Damit ist es einfach eine API mit Python zu erstellen. Diese wird immer per HTTP angesprochen, kann mit WSGI und Apache auch über SSL laufen. In diesem Test starten wir Flask aber als Service ohne SSL und direkt über einen Port, dieser sollte unterschiedlich zu Port 80, 443 usw. sein. Bitte nur zu Testzwecken Flask so betreiben.

Zuerst ändern wir den Code vom Python Debian Service, diesen haben wir bei https://www.predl.cc/python-debian-service/ erstellt.

Öffnen wir die my_service.py und ändern den Code auf:

from flask import Flask
app = Flask(__name__)
@app.route('/api', methods=['GET'])
def meine_aufgabe_route():
    # Hier kannst du zusätzlichen Code für den API-Zugriff schreiben
    return 'API-Antwort'
if __name__ == '__main__':
    app.run(port=5001)

Damit ist das Service fertig, es kann getestet werden, zuerst stoppen wir das alte Service:

sudo systemctl stop my_service.service
sudo systemctl start my_service.service

Dann sollte folgendes herauskommen:

 * Serving Flask app 'test'
 * Debug mode: off
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI serr instead.
 * Running on http://127.0.0.1:5001
Press CTRL+C to quit

Um mit dem Service zu kommunizieren, öffnen wir eine weitere Shell, lassen diese aber geöffnet, sonst beendet sich unsere Flask Anwendung:

sudo wget http://127.0.0.1:5001/api
--2023-06-17 11:50:57--  http://127.0.0.1:5001/api
Connecting to 127.0.0.1:5001... connected.
HTTP request sent, awaiting response... 200 OK
Length: 11 [text/html]
Saving to: ‘api’

100%[===========================================================================================================================================>] 11          --.-K/s   in 0s

2023-06-17 11:50:57 (2.43 MB/s) - ‘api’ saved [11/11]

Wget erstellt die api Textdatei, in dieser ist die Antwort enthalten:

sudo nano api

Oder wir lassen uns den Inhalt gleich ausgeben:

sudo wget -q -O- http://127.0.0.1:5001/api
API-Antwort

Getestet unter CentOs 7 und Debian 11

Wie immer, alle Angaben ohne Gewähr, Anwendung auf eigene Gefahr und Verantwortung, ich übernehme keinerlei Haftung für Ausfälle, Datenverlust oder andere finanzielle Schäden.

Happy coding!

Page 1 Page 2