18/5/2026

Lazarus op Linux

Filed under: — cybrarian @ 2:29 pm

Programmeren voor de Linux desktop (of CLI) met tools onder GPL vrije-software-licenties kan op veel manieren; een universeel/platformoverschrijdende is de combinatie Free Pascal + Lazarus, (de gemakkelijkste is waarschijnlijk Gambas).
– Free Pascal is de programmeertaal (afgekort: fpc).
– Lazarus is de programmeeromgeving (IDE, trouwens zelf geschreven in fpc)

Geschiedenis
– pascal was een veelgebruikte programmeertaal in het onderwijs ten tijde van de tekst-schermen.
– er waren pogingen om een vrije visuele programmeeromgeving te maken die Pascal gebruikte, zoals het Megido project dat rond 1998 verder wilde bouwen op de SpeedSoft Sibyl IDE en Free Pascal, en die gecombineerd en als OS/FS naar Linux wou brengen. Wat uiteindelijk niet gerealiseerd werd en het project viel uiteen in 1999.
– de behoefte aan een visuele programmeertaal voor Linux werd in 1999 ingevuld door de eerste versie van Gambas, dat in plaats van Pascal een basic-achtige taal gebruikte, en waarvan de IDE ook gewoon Gambas heette (en die ook in Gambas geschreven is).
– Ongeveer op dat moment werd het Lazarus project gestart, dat de ambitie had om een “Delphi voor Linux” te maken, de visuele componenten kregen vorm in 2001, en de eerste beta-versie van Lazarus verscheen in 2003.
– In 2005 was Gambas aan versie 1.0.
– In 2008 verscheen Gambas2, een volledig herwerkte versie die overschakelde van vlottende vensters naar een inclusief venster, en een volledig vernieuwde vorm had, maar het was ook duidelijk dat Gambas niet de ambitie had om cross-platform te worden.
– in 2012 kwam van Lazarus de offiële versie 1.0 uit.
– Momenteel is 4.6 de laatste versie, uitgekomen in februari 2026.

Lazarus
– de gegevens over een Lazarus project wordt bewaard in een “.lpi” bestand.
– het bevat bestandsverwijzingen, compiler instellingen, enz.
– een project bewaren biedt aan “unit1.pas” te bewaren in de gekozen map.
– het project heet standaard waarschijnlijk “Project1”, en je zal dan allerlei bestanden terugvinden met die naam; Project1.lpi, Project1.lpr, Project1.lps, Project1.res, Project1.ico, Unit1.lfm, Unit1.pas, en er is ook een Backup map aangemaakt.
– als je daarna bv op die Unit1.pas klikt, gaat je project terug open in Lazarus.
www.lazarus-ide.org
– code-voorbeelden: https://www.streetinfo.lu/computing/lazarus/lazarus_gui.html

Debian GNU/Linux 13 (Raspberry pi)
– menu voorkeuren, add/remove software, zoek “lazarus”
– ik heb het voorgestelde pakket geselecteerd, andere nodige paketten worden mee uitgekozen door software management…
– Lazarus IDE 4.0 met fpc 3.2.2
– Na starten IDE moet je de Debugger kiezen, dgb of FpDebug, die eerste gekozen na een waarschuwing bij de oorspronkelijke andere instelling.
– de IDE lijkt beter te reageren dan bij KDE (bv zetten knop en de aflijning van die knop op scherm tijdens grootte instellen)

OpenSUSE 15.4
– software installeren, “Lazarus”, kiezen, bijjkomende paketten bevestigen.
– Lazarus 2.2.6 (van packman repository!)
– Ook de Qt5 widgetset support zonder conflicten.
– Er is wel een foutmelding van Fppkg, dat de eigen package manager blijkt te zijn. Als je die niet gaat gebruiken kan je deze fout negeren. Mij lukte het in deze versie niet om het juist ingevuld te krijgen (dit is ook een oude versie, met andere/nieuwere krijg je die fout niet, en is het trouwens ook leeg).

OpenSUSE 15.5
– software installeren, “Lazarus”, kiezen, bijjkomende paketten bevestigen.
– qt5, 6 ging niet (conflicten)

Paketten (3): fpc, fpc-src, lazarus
Tot. installatiegrootte: 1,257 Gb
Download: 184,80 MB

– Geïnstalleerd: 2.2.4 (met FPC 3.2.2)

Lazarus is aanwezig in het menu onder Ontwikkeling, Lazarus, en start razendsnel op.

Ik druk op start (run) om het lege vensterprogramma te compileren, en dat start op als leeg venster met titelbalk naam: Form1 (2)
(waarschijnlijk omdat Form1 van de screen designer nog open staat als “1”; ik zit in een multi-window environment)

Ik voeg een button, tekstlabel en label veld toe, en druk run:
Ok, venster opent met die twee elementen.

Als ik code-tekst intik krijg ik op het scherm suggesties (zoals ik gewend ben in Gambas).

Ik komt een foutmelding bij uitvoeren: class TButton not found.
En in het foutvenster lees ik:
“Hint: Unit StdCtrls not used in Unit1”

Door alles weg te halen en het terug op de form te zetten lukt het nadien wel.
Het valt me echter op dat de knop, of edit veld op de form verspringen als ik ze aanklik. Ze veranderen van plaats, soms achter een andere component.

Tumbleweed 20260515
– Lazarus en een groot aantal paketten worden geïnstalleerd :

Installed Packages: 70
at-spi2-core-devel, cairo-devel, dbus-1-daemon, dbus-1-devel, fontconfig-devel, fpc, fpc-src, freetype2-devel, fribidi-devel, gdk-pixbuf-devel, glib2-devel, graphite2-devel, gtk2-devel, harfbuzz-devel, lazarus, lazarus-doc, lazarus-ide, lazarus-lcl, lazarus-lcl-gtk2, lazarus-lcl-nogui, lazarus-tools, libblkid-devel, libbrotli-devel, libbz2-devel, libdatrie-devel, libeconf-devel, libexpat-devel, libffi-devel, libglycin-devel, libgthread-2_0-0, libharfbuzz-cairo0, libharfbuzz-gpu0, libharfbuzz-raster0, libharfbuzz-vector0, libicu-devel, liblcms2-devel, libmount-devel, libpixman-1-0-devel, libpng16-compat-devel, libpng16-devel, libseccomp-devel, libselinux-devel, libsepol-devel, libthai-devel, libX11-devel, libXau-devel, libxcb-dbe0, libxcb-devel, libxcb-dri2-0, libxcb-screensaver0, libxcb-xf86dri0, libxcb-xtest0, libxcb-xvmc0, libXext-devel, libXfixes-devel, libXft-devel, libXi-devel, libXrender-devel, libXtst-devel, libz-ng-compat1, lzo-devel, pango-devel, pcre2-devel, tcsh, tcsh-lang, typelib-1_0-GdkPixdata-2_0, typelib-1_0-Gly_2, typelib-1_0-Gtk-2_0, xorgproto-devel, zlib-ng-compat-devel

– Bij het starten de keuze voor Classic/Modern IDE* (ik kies hier de Single Window versie), alle andere dingen staan ingevuld/ok, start IDE…
– Versie: 4.6, fpc 3.2.2, de About zegt: “Write Once, Compile anywhere” en

“Lazarus is the missing part of the puzzle that will allow you to develop programs for all of the above platforms in a Delphi-like environment. The IDE is a RAD tool that includes a form designer.”

– Ik krijg in deze versie(*) niet onmiddellijk een Form te zien als scherm, die zit in het tabblad Form (van Code Form Anchors).

Tumbleweed (older)
– Tumbleweed 20241209 ( bij recentere versies van Tumbleweed 2025.. krijg ik een conflict met x)
– software, zoek Lazarus
– Lazarus en een groot aantal sub-paketten worden getoond: lazarus, -ide, -doc, -tools, -lcl-nogui, -lcl-gtk2,…
– opvallend: lcl-Qt5/6 staan niet mee geselecteerd.
– bevestigen:…
– installed packages: 9 (fpc, fpc-src, lazarus, -tools, -doc, -ide, -lcl, -lcl-gtk2, -lcl-nogui.
– Versie: IDE 4.6.

Lazarus is aanwezig in het menu onder Ontwikkeling, Lazarus, en start op met een Configure Lazarus IDE, met keuzescherm:
IDE:
– classic IDE (multi-window)
– modern (Single Window)
Form Editor:
– classic IDE (multi-window)
– modern (Single Window)

En andere tabbladen die:
– verwijzen naar /usr/lib64/lazarus/ voor de ide/lazarus.lpi
– compiler /usr/bin/fpc
– FPC sources /usr/share/fpcsrc/
– Make /usr/bin/make
– Debugger
Ik laat alles standaard staan.

Onderaan rechts dan de knop “Start IDE”

Lazarus start snel, en toont bij About Lazarus version 4.6 met FPC version 3.2.2

Bij het starten van een lege applicatie (zoals die opent op scherm), komt de vraag om te kiezen voor de debugger:
– Enable Dwarf2 with sets
– Enable Dwarf2 (-gw)
– Enable Dwarf 3 (-gw)
laatste staat standaard, ik bevestig (of: run with no debugger).

Ik krijg wat warnings, en het (leeg scherm)-programma opent als “Form1”

Ik kan een label toevoegen, en een edit veld, en door de druk op de knop de tekst veranderen.

De “completion” lijkt hier niet te werken, maar als ik ga zoeken in de instellingen vind ik dat ze op 1 seconde wachttijd staan, eens ik ze korter zet, werken ze prima.

Ik heb er verder geen project mee gemaakt, maar de IDE voelt aangenaam, maarr ook wel uitgebreider dan Gambas.
Volgende stap bv: https://wiki.freepascal.org/Lazarus_Tutorial

22/4/2026

mariadb en utf8 foutmelding

Filed under: — cybrarian @ 11:25 am

Op een computer die wat geschiedenis heeft(*) kreeg ik een probleem met een applicatie die een databaseverbinding maakt.

Foutmelding: iets met niet gevonden utf8 in /usr/share/mariadb/charsets/Index.xml

In dat bestand staan een aantal charsets, waaronder utf8mb3.

Om het aan te passen ga ik als root tewerk.

Ik zet bij het stuk van utf8mb3 een extra alias: utf8 (maar met de xml tags dan; er staat al een alias utf-8 trouwens).
Uitgelogd, terug ingelogd, applicatie geprobeerd: werkt niet.

Ik kopieer het deel van utf8mb3, en wijzig de titel naar utf8. Bewaar.

Daarna werkt het.


(*) geschiedenis: OpenSUSE Leap 15.4 geupdate van vorige openSUSE versies.

30/3/2026

shell script invoer hulp

Filed under: — cybrarian @ 2:12 pm

Ik heb een script dat software afhaalt als broncode en compileert tot werkend programma:

./InstallFromNextcloud.sh

Als parameter geef ik de naam van de software in, en het versienummer dat ik wil installeren.

Weet ik dat niet, en laat ik de versie weg, dan toont het script alle versies die beschikbaar zijn.

Als geen parameter is gegeven, bv omdat ik de naam niet van buiten weet, krijg ik alle mogelijkheden te zien:

...
if [ -z "$1" ]
then
  echo "No application name to install. Available in releasedir... "
  echo $releasedir
  ls -lFAh $releasedir
  ...

Maar soms is die lijst te lang, ik wil de eerste letters kunnen geven. Ik pas mijn script aan: als er maar een paar letters zijn ingegeven (hier bv max 3), wordt verondersteld dat dat niet de naam van de af te halen software is, maar enkel de eerste letters, en wordt alles getoond dat daarmee begint.

...
size=${#1}
echo "$size"
echo "Script to install gambas3 app ($1) with version ($2) in $targetdir .." 
cd $targetdir/gb3prj
if (($size < 4))
then
  echo "smaller than 4"
  ls -lFAh $releasedir/$1*
  echo "please enter complete name for ($1)"
  exit 0
fi
...

Dan stopt het script hier; met pijltje naar boven kan ik het vorig commando ophalen en aanvullen met wat ik ondertussen gelezen heb.

4/12/2025

Arduino App Lab op Uno Q

Filed under: — cybrarian @ 3:04 pm

Arduino App Lab
(kort ik verder af als AAL)

Het artikel over de nieuwe Arduino Uno Q verwees naar: Dan start de Arduino App Lab - 0.2.4 .... Hier gaan we verder …

Er staan op het scherm een heleboel applicaties die extra hardware nodig hebben, een micro, camera, enz, maar ook een eenvoudige “blink led”

Als je die kiest, en je drukt op Start, begint de IDE allerlei dingen te downloaden, extracten, … En het resultaat is dat er een rode led begint te pinken op het bord: led 3 (de leds zijn genummerd van 1 tot 4 en de blauwe op 2 was aan als aan/uit led leek het (de usb C heeft ook nog een groen led naast de aansluiting aan de overkant van het bord).

In het midden van het scherm bovenaan Editor/console knop.
In Editor staat de hele tekst met uitleg over de app en de code, console geeft de output van het downloaden en uitpakken.

Er is rechtsboven op het scherm nu een “stop” knop zichtbaar, en een “Copy and edit app” knop. Welke denk je dat we kiezen? Copy en edit..

Create new app (naam) : “Copy of Blink LED” staat klaar. Goede naam.

Dan kan je de code aanpassen in Editor met “write” (preview toont de code in een vorm om te lezen, dwz de commentaren normaal en de code gekleurd.

Ik verander de waarde van de time.sleep van 1 naar 5. Er is geen “Save” dus ik doe maar onmiddellijk “run”.
Ik krijg een waarschuwing (omdat de vorige nog liep), en dan begint het werk weer, dat leidt tot “Running”…

Ik merk geen verschil. Ik blijk de Readme file veranderd te hebben, dus ik kijk even verder rond in de IDE en vind onder Files, Python “main.py”. Daar verander ik nu de code, en run… Nu gaat die inderdaad trager.

Een andere voorbeeldapp die geen extra hardware nodig heeft is de weer-app; die haalt data af van online en geeft zijn interpretatie weer via het scherm van de LED-matrix: “Weather forecast”.

Ik vraag me af of het pulserend hart terug start als ik herstart; herstarten gaat vrij snel trouwens. Ik moet het login wachtwoord geven dat ik laatst aanmaakte (min. 8 tekens). De pulserende hartslag is er niet meer *. Dat komt misschien omdat alleen de laatste sketch bewaard wordt in de arduino? Dat zou dan de trager blinking led moeten zijn, maar die lijkt ook niet vanzelf te “runnen”.
(* ps: terug te vinden op https://github.com/arduino/ArduinoCore-renesas/blob/main/libraries/Arduino_LED_Matrix/examples/MatrixIntro/MatrixIntro.ino)

Arduino App Lab Learn
Links beneden een “Learn” knop, die toegang geeft tot korte inleidingen.
– goede uitleg over de arduino Uno Q.
– goede uitleg over arduino lab, hoe te installeren op verschillende manieren
– wat is een app
– wat is een brick
– AI modellen
– hoe werken de ingebouwde voorbeelden
– Q als SBC met uitbreiding op usb-C
– Q in netwerk mode (via wifi/ssh)

Wat ik mis is hoe ik bv extra voorbeelden kan afhalen. Zo bestaat de begin-animatie als project op github onder de naam “MatrixIntro”. Ik zou verwachten dat je ergens meer voorbeelden kan downloaden rechtstreeks vanuit App Lab.
Je kan in de App Lab ook nergens rechtsklikken om meer opties te bereiken, er zijn geen mouseover tooltips, er is zefls geen menu, dus geen File, Open of Help, About.
(en ja, dat is misschien de betekenins van 0.x.x)

Arduino App Lab update naar 0.7.0
Terwijl ik dit allemaal aan het doen ben, komt er een update binnen voor Arduino Lab, met melding 0.7.0 .. dat klinkt goed…of nee, het is de CLI die een update krijgt, niet de desktop applicatie, die blijft 0.2.4.

Wijzigen van een voorbeeldapp

De weather forecast app gaf “regen” terwijl buiten de mist optrok en de zon begon te schijnen. In de weather app staat in de code de stad op “Turijn”, en die moet je dus aanpassen. Dat kan niet in de voorbeeldapp zelf, die is read-only.
Maar ik had eerst al een probleem met het afsluiten van de draaiende app (die had meer dan een dag gedraaid), en sloot dan maar de hele app lab omgeving. Terug open in de weather app, copy and edit als “Weather forecast Belgium on LED matrix”.
Ik vraag me af hoe de steden geschreven zijn, of je bv “Brussel”, of het Engelse “Brussels” moet gebruiken.
Ik vind code op
gtihub.com/arduino/app-bricks-py/tree/main/src/arduino/app_bricks/weather_forecast
maar ik vind niet onmiddellijk de beschikbare steden.

Ik probeer dan maar met een willekeurige Belgische stad, dat lijkt te werken, maar geeft weer regen, dus vraag me af of het inderdaad iets veranderd heeft.
Als je de code aanpast door bv eerst een animatie op het schermpje te zetten bij opstart, en dan een “clear” te doen telkens je gegevens ververst, wordt het duidelijker. Tijdens het draaien kan je ook naar de Console, Python gaan kijken, daar zie je feedback, bv als je een niet gevonden plaatsnaam hebt gebruikt.

Upd:
De volgende keer dat ik de Arduino Q opstart, dwingt AAL me weer tot een update, en daarna heeft hij versienummer 0.3.0.
Eigenaardig of vervelend genoeg gaat die terug helemaal door de installatieprocedure, met bord instellingen (toetsenbord etc), netwerk, en login, wachtwoord gegevens.
Plots moet het wachtwoord ook langer zijn heb ik de indruk, vorige keer was 6 tekens nog goed, nu moet ik er 8 geven. Ergens moest er ook een naam gekozen worden voor het bord, en er wordt standaard iets klaargezet (malia).
Ik weet niet of er iets is fout gegaan met de update, maar de apps die de web browser gebruiken werken niet meer. Ik kan de web browser ook niet uit het Application menu opstarten (buiten de AAL), dus daar lijkt iets fout mee te zijn.

Failed to execute default Web Browser.
Input/output error.

Ik probeer via synaptic package manager (waar hij wel geïnstalleerd staat aangegeven) die te upgraden. Dat helpt niet.

Via de terminal opstarten: chromium

The profile appears to be in use by another Chromium process on another computer (uno-q). Chromium has locked the profile so that it doesn’t get corrupted. If you are sure no other processes are using this profile, you can unlock the profile and relaunch Chromium.

Er staat niet bij “hoe” je het profiel kan vrijmaken.

Op basis van sommige posts als deze
1) https://bbs.archlinux.org/viewtopic.php?id=294107
waarin verwezen wordt naar de oorzaak beschreven in deze
2) https://wiki.archlinux.org/title/Network_configuration#Set_the_hostname
besluit ik dat de oorzaak het wisselen van de naam is geweest, na die update, naar “malia”, en in de foutmelding wordt gewag gemaakt van de naam “uno-q”.
Dus ik wijzig de hostname naar uno-q om het probleem op te lossen zonder manueel bestanden te moeten gaan verwijderen (zoals beschreven in 1).

sudo hostname uno-q

Dat werkt. Ik kan chromium terug starten, en werkt het in “Blink LED with UI” voorbeeld ook terug.

14/9/2025

Python jupyter notbook of notebook?

Filed under: — cybrarian @ 8:22 pm

Notbook

Ik heb een aantal bestanden van een cursus die eindigen op .ipynb, bv oefening1.ipynb, oplossing1.ipynb..
Die komen uit een ipython notebook of jupyter notebook, die op de cursus in een remote sessie van een Windows machine op een Azure server zat.
Ik ben dus niets met het cursusmateriaal..
… tenzij ik aan configuratie geraak om zelf die jupyter te draaien.

Ik probeer dat te installeren in opensuse tumbleweed (waarop ik al wat python 3.13 geïnstalleerd had):

jupyter-notebook (en een hoop bijhorende bestanden).

Jupyter gestart: start soort omgeving; er komt eerst een foutmelding:

java.lang.InternalError: Unable to load native GTK libraries

en

Server Connection Error
A connection to the jupyter server could noet be established. JupyterLab will continue trying to reconnect. Check your network connection or Jupyter server configuration.

(ik heb het herhalen van de foutmelding afgevinkt)

Op de achtergrond krijg ik nu de werkomgeving van Jupyter; vooraan een venster met een foutmelding:
Van daaruit kan ik echter geen bestaande projecten openen op dit moment, de bestandsbeheerder geeft mijn homedir weer, maar ik kan bv niet de map “dev” ingaan.

Waarschijnlijk is er een manier om de werkdirectory in te stellen en een fatsoenlijk programma zou dat vriendelijk vragen bij de eerste start. Ik heb een paar keer rondgekeken of ik die mogelijkheid vond, maar besliste toen eerst iets anders te proberen: de omgekeerde weg.

Notebook
Ik kopieer de ipynb bestanden naar mijn laptop in het mapje dev/python/jupyternb, en klik in Dolphin op zo’n ipynb bestand.
Er gebeurt vanalles, en plots zit ik in die oefening. Het blijkt een Firefoxvenster te zijn met de url “http://localhost:8888/notebooks/oefening1.ipynb

Nice 🙂

11/9/2025

Python

Filed under: — cybrarian @ 8:48 pm

Python 3.13

Geïnstalleerd op openSUSE Tumbleweed:

python 313… 3.13.7.1

numpy 313

scipy python313-scipy

mathplotlib python313-matplotlib

pandas python313-pandas-plot

tensorflow python313-transformers

Editor

Idle3: python313-idle – An Integrated Development Environment for Python
– Version: 3.13.7-1.1
– komt in development menu als IDLE3
– afkorting van: Python’s Integrated Development and Learning Environment (zie https://docs.python.org/3/library/idle.html)

Todo: Pyzo
– python313-pyzo – Python IDE for scientific computing
– Version: 4.11.2-2.1
– komt niet in menu?
– via zypper install pyzo komt die wel in menu, maar programma klapt onmiddellijk toe na opstartscherm.

Todo: Thonny (beschikbaar Version: 4.1.7-1.2)
– veel Raspberry Pi voorbeelden zijn daarin gemaakt

Geprobeerd: editor/IDE pycharm-community uit MaxxedSUSE

Geprobeerd: Jupyter, zie (Python jupyter notbook of notebook?)

Pyzo foutmelding: … (meer…)

14/8/2025

Git show

Filed under: — cybrarian @ 11:03 pm

Ik zoek wanneer een bepaald stuk code ingevoerd is.

Met git log krijg ik de nummers van de commits.

Met git show (commit nummer) kan ik kijken wat daarin gebeurd is (+ -)

8/3/2025

Git: Wanneer is bestand veranderd

Filed under: — cybrarian @ 10:07 pm

Wanneer is een bepaald bestand in mijn project veranderd?

Ik wil weten wanneer ik de laatste keer het bestand Libraries.txt heb aangepast, omdat ik het niet terugvind in Changes.txt (log van versienummers en veranderingen). Ik ben nu aan versie 0.6.9.

git log -p Libraries.txt

Bovenste deel van het antwoord:

commit 3acf9773661770233e444600....
Author: cybrarian
Date: Fri Feb 21 00:49:20 2025 +0100
'
0.6.2 gridinfo 3j columns
'
diff --git a/Libraries.txt b/Libraries.txt
index e353c0e..e8a4df3 100644
--- a/Libraries.txt
+++ b/Libraries.txt
@@ -1 +1 @@
-myprojectlib 0.6.4
+myprojectlib 0.6.6
.
commit a45dd20dd2bd279017....
Author: cybrarian

Date: Thu Feb 13 19:47:52 2025 +0100
...
...

Het antwoord: bij versie 0.6.2 is de inhoud gewijzigd van 0.6.4 naar 0.6.6.

9/1/2025

git rm (Git remove) ongedaan maken

Filed under: — cybrarian @ 5:08 pm

git checkout HEAD -- naamvanbestand

12/12/2024

Plaats voor data en de vuilbak (Trashcan)

Filed under: — cybrarian @ 10:17 pm

De gegevens van een programma

De $XDG_DATA_HOME base directory bepaalt de “data” directory voor applicaties.
Terugvalwaarde is $HOME/.local/share

Vuilbakstandaard

Volgens de freedesktop specificaties zit het zo:
-locatie van de “hoofd” vuilbak is vastgelegd in systeemvariabele :
$XDG_DATA_HOME/Trash

Als die (XDG_DATA_HOME) niet gedefinieerd is, is de standaardwaarde voorzien:

~/.local/share/Trash/files

Bij het maken van een desktopgebruiker, maakt het systeem een trash directory volgens de waarde in $XDG_DATA_HOME/Trash of op de standaarlocatie.

10/12/2024

Git diff uitvoer op het scherm houden

Filed under: — cybrarian @ 9:50 am

Als ik op mijn huidige systeem git diff doe, wordt het antwoord getoond in een soort tekstverwerker waarin ik handig kan scrollen, zoeken enz, en die ik verlaat met “q”.
Maar helaas, als ik daarna een andere aktie wil doen, bv een commit waarin ik als commentaar iets schrijf wat ik uit die diff haal, zie ik die niet meer.

Ik wil dus de uitvoer van diff op het scherm houden, bv voor het bestand Changes.txt:

git --no-pager diff Changes.txt

Even gemakkelijk kan je dan de text ook omleiden naar een bestand:

git --no-pager diff Changes.txt > ~/diffMybranchOtherbranch-Changes.txt

20/11/2024

Git: Wanneer is welke wijziging in een bestand ontstaan?

Filed under: — cybrarian @ 12:06 pm

Er is ergens een stomme bug veroorzaakt, waarschijnlijk lang geleden, en de oorzaak is onduidelijk; is het met een aanpassing aan de code gebeurd, of per vergissing door even in de editor in een verkeerd bestand iets te doen bij te snelle toetsaanslagen tijdens het werk?

Hoe kan git mij helpen dat moment terug te vinden?

Log path:

git log --path

bv:
git log -- Trypo/.src/TrypoForms/FDayReq.class

Daarmee kan je al zien wanneer daar de laatste aanpassingen gedaan zijn. Maar welke?

Bv de bug bevondt zich op regel 889 en betrof missende () bij een bewerking.

Log line:

git log -L(from),(to):(path)

bv:

git log -L887,891:Trypo/.src/TrypoForms/FDayReq.class

Dit geeft me de – en + regels, en hiermee kan ik snel vinden wat er juist gebeurd is.

19/11/2024

Git: mijn main en origin/main verschillen

Filed under: — cybrarian @ 11:09 am

De online versie van de master en mijn eigen lokale versie zijn uiteengelopen.

git checkout master
Switched to branch 'master'
Your branch and 'origin/master' have diverged,
and have 11 and 1 different commits each, respectively.

Ik kan het niet eenvoudig oplossen met push of pull:


git status
On branch master
Your branch is ahead of 'origin/master' by 11 commits.
(use "git push" to publish your local commits)
'
Changes not staged for commit:
(use "git add ..." to update what will be committed)
(use "git restore
..." to discard changes in working directory)
modified: .project
'
no changes added to commit (use "git add" and/or "git commit -a")
linuxuser@copyleft:~/Git/MyProject> git push
To gitlab.com:dev/myproject.git
! [rejected] master -> master (fetch first)
error: failed to push some refs to 'gitlab.com:dev/myproject.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
linuxuser@copyleft:~/Git/MyProject> git pull
error: cannot pull with rebase: You have unstaged changes.
error: please commit or stash them.

Ik haalde de main af in een test directory en met Kompare bekeek ik de verschillen om te checken wat er aan de hand was. Conclusie: mijn locale versie moet de nieuwe main/master worden.

Ik beveilig eerst mijn locale wijzigingen in een nieuwe branch:
(Als het over een kleine wijziging ging zou ik misschien git stash en git stash pop gebruiken)

git branch backup-mainlocal

Daarna even checken:

git status
On branch master
Your branch and 'origin/master' have diverged,
and have 12 and 1 different commits each, respectively. (...)

Ik zit nog in mijn master; gelijkzetten met de online versie:

git reset --hard origin/master
HEAD is now at efde303 Update ReadMe.txt with sourceforge tar.gz link

Ik zie de laatste wijziging daar in mijn ReadMe bestand.
Nu zijn beide versies terug gelijk:

git status
On branch master
Your branch is up to date with 'origin/master'.

en kan ik de wijzigingen toepassen uit mijn backup:

git merge backup-mainlocal
Merge made by the 'ort' strategy.
.component | 4 ++++
.gitignore | 19 +++++++++++++++++
.project | 3 ++-
.src/FMain.class | 54 +++++++++++++++++++++++++++++++++++++++++-------
.src/FMain.form | 4 ++--
...
Changes.txt | 15 ++++++++++++++
Help.txt | 2 +-
10 files changed, 441 insertions(+), 29 deletions(-)
create mode 100644 .component
create mode 100644 .gitignore

En online brengen:

linuxuser@copyleft:~/Git/MyProject/> git push
Enumerating objects: 7, done.
Counting objects: 100% (7/7), done.
Delta compression using up to 8 threads
Compressing objects: 100% (4/4), done.
Writing objects: 100% (4/4), 627 bytes | 627.00 KiB/s, done.
Total 4 (delta 1), reused 0 (delta 0), pack-reused 0
To gitlab.com:dev/myproject.git
efde303..c950ea5 master -> master

Ok nu zijn ze terug synchroon.

7/11/2024

git reset –hard

Filed under: — cybrarian @ 12:35 pm

Ik moet een oud project oppikken dat ooit een aparte branch had waarin ik wil gaan werken, en ik moet de code up to date maken met de huidige stand.

git reset --hard origin/master

Als antwoord krijg ik:

HEAD is now at 01d4e38 fix conflicts

Ik vraag me af welke conflicts er dan zijn, want er worden er geen opgesomd. Normaal, als er conflicten zijn, wordt de aktie niet uitgevoerd, maar hier heb ik wel de bevestiging van “Head is now at ..”.

Bij nader inzien bleek “fix conflicts” de commit message te zijn van de laatse commit waar head nu op zit ….

11/10/2024

Eén bepaalde tak afhalen van git

Filed under: — cybrarian @ 10:17 am

Eén enkele branch afhalen van een git repository

Ik heb in een “dev” map een project “myproject” met ontwikkeling in Gambas3 op een pc met Kde-desktop.

Er is één tak van het project, branch “compat-lxde”, die ik ontwikkel op een ander toestel (Raspberry Pi) met een LXDE desktop; om de applicatie daar compatibel met die desktop te houden. Hierin neem ik bijna alles over van de “main”, behalve de dingen die niet werken in een LXDE desktop, die laat ik weg of pas ik aan.

De branches main en compat-lxde lopen dus grotendeels parrallel.

Soms wijzig ik iets op di Pi aan de lxde versie dat ook nuttig is voor main, en om dat binnen te halen wil ik ook de lxde code op mijn KDE-pc, maar op zo’n manier dat ik mij niet vergis met mijn gewone development, ik moet vermijden dat ik mijn gewone development aan het doen ben in de lxde versie bv.

Ik wil dus op mijn pc op een andere plek één bepaalde tak van mijn ontwikkeling apart bijhouden om die daar enkel te raadplegen.
Ik wil hier niet alle andere branches in hebben want die heb ik in mijn dev map, en daar werk ik ook aan.

Algemeen:
git clone -b --single-branch

Bv: als branch compat-lxde bestaat in het project:
git clone -b compat-lxde --single-branch https://gitlab.com/project/myproject.git

Ook op de Raspberry Pi kan het nuttig zijn om niet alle code binnen te halen, maar enkel de branch “compat-lxde” en bv “main” of “test”.

Nu kan ik op de pc in mijn dev directory de branches gebruiken om in te werken, bv in “feat-abc”, dan naar test, tot binnenhalen in main.

Ik ga naar de pi, integreer daar alles van main in de lxde branch. Ik doe terloops ook nog een kleine correctie (die terug naar test/main moet).

Ik ga op de pc naar de map met de lxde, haal de wijzigingen af (pull), kan die openen en knippen/plakken naar het project dat in de ontwikkelomgeving open staat in dev directory.

Normaal zit in de dev directory ook de lxde branch, en kan je daar diff’s met test/main doen en zo.

Om een enkele tak lokaal toe te voegen, doe:

git remote set-branches –add origin [remote-branch]
git fetch origin [remote-branch]:[local-branch]

17/9/2024

Gitlab rol veranderen van een lid van een project

Filed under: — cybrarian @ 11:20 am

Doel: een “Developer” mogelijkheid geven om de main te updaten.

De leden van een project kunnen hun rol hebben gekregen doordat ze lid zijn va een “group”, en die kan dan niet apart ingesteld worden voor een subproject van die group, bv devcopyleft/clTools
Rollen zijn in stijgende volgorde : Guest - Reporter - Developer - Maintainer - Owner

Ga naar de hoofdpagina van de group, bv devcopyleft.
Daar bij “Manage”, zie je de “Group Members”.
Als je de nodige rechten hebt (oprichter van de group: “owner”) kan je in de kolom “Role” klikken op de rol en die veranderen, bv naar “Maintainer”.
Nu kan hij “push” naar “main” doen.

16/9/2024

Raspberry Pi opstarten met programma op desktop

Filed under: — cybrarian @ 2:25 pm

De Rapsberry Pi laten opstarten in een bepaalde toepassing

Er is een map waar bij het opstarten gekeken wordt welke programma’s te starten:/home/pi/.config/autostart

ps: In documentatie vind ik ook nog andere gelijkaardige mappen: /home/pi/.config/lxsession/LXDE-pi/autostart

Het kan dat de map ~/.config/autostart nog niet bestaat;

  • op één pi bestond die niet en heb ik die gemaakt
  • op de andere bestond die wel en bevatte die een bestand LXinput-setup.desktop, met toetsenbord/muisinstellingen

Een programma dat je in deze map zet wordt automatisch uitgevoerd.

Opstarten met een zelfgeschreven applicatie in gambas3
– Vanuit de gambas programmeeromgeving (Gambas3-IDE) kan je een programma compileren tot uitvoerbaar, met de optie om een link op de desktop te maken; doe dat.
– de link kan je dan naar de autostart map verplaatsen (of kopieren).

9/9/2024

GitLab rechten met ssh keys

Filed under: — cybrarian @ 5:07 pm

Access denied

git clone https://gitlab.com/devgroep/myprojectterminal.git
Cloning into ‘myprojectterminal’…
Username for ‘https://gitlab.com’: mijngebruiker
Password for ‘https://mijngebruiker@gitlab.com’:
remote: HTTP Basic: Access denied. The provided password or token is incorrect or your account has 2FA enabled and you must use a personal access token instead of a password. See https://gitlab.com/help/topics/git/troubleshooting_git#error-on-git-fetch-http-basic-access-denied
fatal: Authentication failed for ‘https://gitlab.com/devgroep/myprojectterminal.git/’

Gebruik SSH keys
De site van gitlab legt dat goed uit;

https://docs.gitlab.com/ee/user/ssh.html

Kijk eerst of je al ssh sleutels hebt:

cd ~
cd .ssh/

Als je nog geen .ssh directory hebt, moet je checken of ssh geînstalleerd is, en/of genereer de ssh keys:

ssh-keygen -t ed25519 -C "mijngitlabaccountnaam"

Bij de vraag waar de key bewaren kan je normaal bevestigen:

Enter file in which to save the key (/home/user/.ssh/id_ed25519):

Als de .ssh map nog niet bestond, zal die nu gemaakt worden (geeft melding).

Nog wat bevestigen, en daarna vind je twee (nieuwe) bestanden, waarvan 1 de publieke sleutel is (die eindigt op .pub); en je kreeg ook wat randomart te zien…

The key’s randomart image is:

De inhoud van het pub bestand, inclusief opmerking, kopieren in de gitlab site bij je avatar, “edit profile, linkse kolom ssh keys”.. Add new key ..

De geldigheid kan je instellen als je wil.

Je ziet daarna dat de key is toegevoegd in je lijstje op https://gitlab.com/-/user_settings/ssh_keys

Nu vraagt git nog altijd mijn username en wachtwoord, maar nadien werkt bv het clonen wel.

23/3/2024

Git worktree

Filed under: — cybrarian @ 6:23 pm

Clean?
Een “cleane worktree” is je worktree na een commit/push of na een clone of pull.
Je ziet dat aan git status.

Dirty?
Vanaf je iets gewijzigd hebt, is het een “dirty worktree”, de toestand is “bezoedeld” door wijzigingen die nog nergens geregistreerd zijn.

Multiple?
Werken aan twee branches TEGELIJK.
(normaal schakel je om met git checkout branch1, hackhackhack, get stash, git checkout branch2, hackhackhack, git commit+push, git checkout branch1 ….)

Als je aan twee branches tegelijk wil werken kan je in een andere directory terug een clone doen van het project. Dan zit je met veel dubbele code, en moet je telkens beiden syncen. Je kan het Git zelf laten doen met git worktree, dan heb je minder ruimte nodig op de harde schijf, en verloopt het synchroon houden ook automatisch:
Bv: op een Raspberry Pi een “legacy” versie van software vergelijken met de huidige universele (die evolueert).

git worktree list
git worktree add MijnNieuweWerkboom *
en als je er mee klaar bent:
git worktree remove MijnNieuweWerkboom

Goede uitleg van het principe op https://tecadmin.net/git-worktrees-parallel-development-guide/
https://devdynamics.ai/blog/understanding-git-worktree-to-fast-track-software-development-process/

Eens die worktree gemaakt, zie je in je projectmap een map met de naam van de nieuwe worktree. En daarin staan terug dezelfde files als je al had in de directory erboven. Oei, dat was niet de bedoeling, die map hier in mijn projectcode te hebben.
(*) Belangrijk is om de directory op te geven waar die nieuwe worktree moet gezet worden bij git worktree add:

git worktree add ./../MijnNieuweWerkboom
of
git worktree add /home/username/directoryEtc

Terug verwijderen:
git worktree remove MijnNieuweWerkboom
git prune

git worktree add ./../MijnNieuweWerkboom
dan met
cd ..
cd MijnNieuweWerkboom
git status
git worktree list

Ik heb twee situaties gehad, de eerste was:
-1 In die directory zie ik een branch met de naam MijnNieuweWerkboom, terwijl ik die niet expliciet heb aangemaakt.

Normaal geef je als parameter een bestaande branch op (denk ik).

git worktree add ./../MijnNieuweWerkboom bestaandeBranch
(branch die ik daar wil om parrallel in te werken)
of
git worktree add /home/username/directoryEtc bestaandeBranch

-2 ik kreeg een foutmelding “invalid reference: bestaandeBranch”; misschien bestond die niet of had ik hem verkeerd geschreven.

-3: fatal: “.. is already checkout out at ..”
Dat is eigenlijk wel zo… Ik kon dit oplossen door eerst een andere branch aktief te maken:
git checkout otherbranch
git worktree add ../MijnNieuweWerkboom bestaandeBranch

.. preparing …
HEAD is now at .. (shows comment of commit)

Bij geval 1: In Gambas is de naam van de map ook de naam van het project, dus dat is nu plots ook veranderd.

Hmm, nog niet goed? Je kan bij het maken van een worktree (blijkbaar/soms) ook de naam van de nieuwe branch meegeven, verschillend van eender welke bestaande.

In mijn geval is het nu niet zo erg, je moet eventueel een nieuw configuratiebestand aanmaken, of het bestaande kopieren. Hierdoor kan je ze ook uit elkaar houden (bv voor de executable; handig dat de naam anders is).


Stash
git stash kan heel interessant zijn: je bewaart alleen je huidige veranderingen.

VRAAG: Dus als je twee gelijkaardige projecten hebt die enkel een beetje verschillen, maar die verschillen moeten blijven bestaan, dan kan je met stash je nieuwe werk bewaren (dat dan niet over die specifieke verschillen mag gaan), en die “toepassen” op eender welke andere branch, of je eigen branch als je dat nog niet gedaan had en toch was uitgecheckt.

hackhackhack
git stash wijzigingen op de LIFO
git stash show
git stash apply —-> this you can do on another commit; how?
git stash drop (laatste verwijderen)
git stash pop = apply + drop
git stash list
git stash clear (leegmaken)

git stash pop, ofwel git pop 0 (voor de laatste) git pop 1=voorlaatste enz. past de laatste stash to op de huidige worktree, en gooit hem daarna weg.

om “een stash” te verwijderen uit de “git stash list” doe je git stash drop i

Nu nog uitzoeken hoe ik een stash toepas op .. bv een ander worktree?


(Reeks Githandboek (nl)commando’s vbbranch, mergebranch zoeken/datumstashgit worktree GitLab vbSourceForge vbgit en gambas)

12/9/2023

Git merge opties (strategy)

Filed under: — cybrarian @ 12:03 am

In principe ga je in de ontvangende tak staan (git checkout achtergeblevenbranch)
En merge je een andere naar je toe (git merge voorlopendebranch)

Eenvoudige merges, samenvoegen van iets dat verder voorop is en eenvoudig toegevoegd wordt aan een achtergebleven tak, is gemakkelijk te begrijpen, maar soms is het ingewikkelder.

git merge [-n] [–stat] [–no-commit] [–squash] [–[no-]edit]
[–no-verify] [-s ] [-X ] [-S[]]
[–[no-]allow-unrelated-histories]
[–[no-]rerere-autoupdate] [-m ] [-F ]
[–into-name ] […​]
git merge (–continue | –abort | –quit)

merge strategiën
De verschillende merge “strategies” zijn recursive, resolve, octopus, ours, subtree

Je kan zelf de merge strategy opgeven met een parameter:
(ook bij git pull trouwens)

git merge -s recursive tak1 tak2

git merge -s resolve tak1 tak2

git merge -s octopus tak1 tak2 tak3 .. takn

git merge -s ours tak1 tak2 .. takn

git merge -s subtree takA takB

Type van strategie

– Expliciet
Dit is de standaard merge methode. Het betekent dat er een nieuwe “merge commit” gemaakt wordt. Dit toont waar de merge werd gedaan in de merge geschiedenis, en dat is niet altijd gewenst (omdat het de aandacht afleidt, ruis dus). Als je deze details niet in je merge history wil, zal je misschien explicit merge vermijden.

– Impliciet
Impliciete merge via rebase of fast-forward merge

– Squash
Squash on merge, meestal zonder expliciete merge

Recursive merge strategy options

ours, theirs, patience, diff-algorithim, ignore, renormalize (no-normalize, no-renames), find-renames=n, subtree

Er zijn veel mogelijkheden, en hoe moet je kiezen wat te gebruiken alvorens je ze doorgrondt?

Powered by WordPress