Datacontext voor directories voorbeeld

Datacontext voor directories: een voorbeeld (met in groen hoe het er uit ziet in het configuratie/settings bestand)

De code

dim bOk as boolean

We leggen bv eerst vast hoe onze dirset gaat heten*:

bOk = newDirSet("Export")

[DirSet]
Export = ""

Best een beschrijving geven om uit te leggen wat hiermee moet gebeuren:

updDirSet(“Export”, “Dir for data export from this application”)

[DirSet]
Export = "Dir for data export from this application"

Kan ook in één keer:

bOk = newDirSet("Export", "Dir for data export from this application")

.. met hetzelfde resultaat als boven in het settings bestand; toon beschrijving van..

print getDirSetDescription("Export")

Dir for data export from this application

We kunnen alle (in configuratiebestand) bestaande dirsets opvragen:

arrString[] = getAllDirSetNames()

Directory path opslaan

En nu het belangrijkste: een directorypath bewaren voor een bepaalde dirset; hier context 0 **:

setDirValue(0, "Export", "path", "/home/copyleft/Data/Export")

[Datacontext0-Export]
path = "/home/copyleft/Data/Export"

(**) Als een datacontext in gebruik is kan je de huidige id opvragen:

print hDataContext.getCurrentContextId()

En dan écht het belangrijkste: getDirValue opvragen; hier tonen we hem enkel:

print "We export to: " & getDirValue(hDataContext.getCurrentContextId(), "Export", "path")

We export to: /home/copyleft/Data/Export

De directory opvragen gebeurt in je applicatie op het moment dat je daar iets mee wil doen; bv een tekst bewaren in een bestand:

File.Save(getDirValue(0, "Export", "path") &/ "ExportOfTheDay.txt", sText);

Intern gebruikt DataContext deze methode om de Settings te maken:

print getContextDirSet(0, "Export")

Datacontext0-Export

Wat er in het bestand zo uitziet (zie ook hierboven):
[Datacontext0-Export]
...

(*) De naam “Export” zal misschien vastliggen in je applicatie, of laat je daar kiezen.

Ook de sleutel “path” kan je in principe kiezen. De Datacontext bewaart er verder nog de datum van aanmaak en laatste wijziging bij, die kan je nazien in het configuratiebestand (momenteel nog niet vanuit een methode in de library, tenzij je in getDirValue de juiste sleutel meegeeft, zoals csKEYMODIFIED, zie definities in DataContext class).

Andere voorbeelden

  • Import : bv om txt bestanden in te lezen
  • Pictures: bv iconen of beeldmateriaal waarnaar gelinkt wordt / om ze te laden in de applicatie
  • Export : zoals hierboven, bv om vanuit een applicatie een CSV export bestand te maken en dat op een vaste plaats voor de gebruiker te bewaren.
  • Cam: opgenomen beeld met webcam

DataContext: het unieke van het gebruik met het datacontext concept is dat je voor iedere “DataContext” aangepaste directory locaties kan opslaan. Door de datacontext om te schakelen gebruik je andere databases en andere directories, bv:

  • Datacontext0 = “Dev”, locale map op mijn laptop waarop ik programmeer; en de databaseverbindingen gaan naar mijn “localhost” database met testgegevens.
  • Datacontext1 = “live”, een map op een server of nextcloud die gedeeld wordt met andere gebruikers, en de database instellingen spreken de echte servers met live aan.

Toegepast op ons voorbeeld zou ons instellingenbestand zoiets bevatten (de database gegevens even weggelaten):

[DataContext0]
Name = "Live"
Description = "Echte gegevens, in gebruik

[DataContext1]
Name = "Dev"
Description = "Ontwikkelomgeving local(host)"

[DirSet]
Name = "Export"
Description = "Export csv files here"

[DataContext0-Export]
path = "/nextcloud/shared/myappdata/out"
created = "01/01/2024"

[DataContext1-Export]
path = "/home/username/myappdata/out"
created = "03/01/2024"

...


Compileren met debug info

Soms kan het nuttig zijn om je programma te compileren mét de debug informatie aan, het is een parameter die je kan instellen in de IDE.

In een script: parameter -g bij de opdracht gbc:

gbc3 -g -a 2> log.txt

gevolgd door

gba3 -o $targetdir/gb3run/$targetbase.gambas

Datacontext voor directories

Ik pas al een tijdje het “datacontext” begrip toe in mijn eigen programma’s, waarbij ik gemakkelijk kan omschakelen tussen database-servers voor “development” en “live” data.

Nu wil ik samen daarmee ook andere directories gebruiken, bv voor uitvoer (“Export”). Standaard had ik daarvoor in “/home/user/Data/myApp/” een map “Export/”, maar nu wil ik schakelen tussen
“live/Export” en “dev/Export”.

In mijn configuratie-bestand maak (definieer) ik daarvoor volgende settings:
(ik gebruik het DataContext object myContext)

myContext.newDirSet("Export", "Export of data here")

Dat bewaart:

[DirSet]
Export="Export of data here"
..

Uitgebreider voorbeeld: een programma dat gegevens met foto’s opslaat in een database, daarvoor kan importeren en er ook uit kan exporteren zou volgende directories kunnen gebruiken:
(telkens de naam en de verklaring)

[DirSet]
Export=”Export of data here”
Import=”Import of data here”
Cam=”Camera images come here”
DbPictures=”Database URL’s to pictures here”

Je kan ze inlezen in een array van strings:
myContext.getAllDirSetNames()
(en zo ook tellen met array.Count)

Ik houd bovenstaande omschakelmogelijkheden aan tussen mijn echt gebruikte gegevens en mijn ontwikkelomgeving:
(terug te vinden in ~.config/gambas3/myApp.conf)


[DataContext0]
Name="live"
...

[DataContext1]
Name="dev"
...

Met het omschakelen van DataContext 0 naar 1 moeten ook de Dirset keuzes aangepast van 0 naar 1.

Daarvoor heb ik config settings nodig:

[Dirset0-Export]
Dir="/home/user/Data/myApp/live/Export"

[Dirset1-Export]
Dir="/home/user/Data/myApp/dev/Export"

Die maak ik met:

myContext.setDirValue(0, "Export", "path", User.Home)
(maak een variabele om te gebruiken ipv User.Home)

In de klasse CDataContext heb ik voor de directory instellingen dus:

newDirSet(sName As String, Optional sDescription As String) As Boolean

updDirSet(sName As String, sNewDescription As String) As Boolean

getDirSetDescription(sName As String) As String


getContextDirSet(iContextId As Integer, sDirSetName As String) As String


getDirValue(iContextId As Integer, sDirSetName As String, sKey As String) As String


setDirValue(iContextId As Integer, sDirSetName As String, sKey As String, sDir As String) As Boolean


getAllDirSetNames() As String[]

Met de bedoeling redelijk universeel toepasbaar te zijn, vanaf je een DataContext hebt gedefinieerd kan je het gebruiken, ook los van database instellingen:

https://sourceforge.net/projects/garlic3/files/Lib/DataContext/

Gebruik: het project bevat Classes en een Module, en een uitvoerbaar (desktop) programma met FMain en een menu om te testen wat het doet.

Als je het compileert als “library” dan gaat die code niet mee, en kan je het als (project properties) “library” gebruiken in een ander Gambas3 project.

Zie ook DataContext voor directories voorbeeld

Gambas3 updates v.a. 2024

Zie ook
Gambas3 updates 2018-2023.
Gambas2 updates

Gambas updates (v.a. ong dec 2023) – 2024:
(Vastgesteld ,vooral op OpenSUSE. Algemene “Release page“, voor Ubuntu zie bv hier)

2024-11-05
OpenSUSE 15.6: Gambas3 v. 3.19.5-lp156.2.1
build 19 oktober 2024 : Gambas is terug van weggeweest bij Suse

2024-08-19
OpenSUSE 15.5: Gambas3 verwijderd?
OpenSUSE Tumbleweed: Gambas3 verwijderd?
Niet meer in de repositories aanwezig, en de IDE kan door een update zelfs gedeinstalleerd worden! Zie Waar is Gambas…
– Hopelijk een tijdelijk (vakantie-) probleem. (*)

– upd: * Zie Gambas is terug

2024-07-28
OpenSUSE 15.5: Gambas3 v 3.19.3-lp155.2.1

2024-07-05
OpenSUSE 15.5: Gambas3 v 3.19.3-lp155.1.1

2024-05-31
OpenSUSE 15.5: Gambas3 v 3.19.2-lp155.1.2

2024-05-31
OpenSUSE 15.5: Gambas3 v 3.19.2-lp155.1.1

2024-03-20
OpenSUSE 15.5: Gambas3 v 3.19.1-lp155.2.1

2024-03-17
OpenSUSE 15.5: Gambas3 v 3.19.1-lp155.1.1

2024-03-12
OpenSUSE 15.5: Gambas3 v 3.19.0-6.3

??
OpenSUSE 15.5: Gambas3 v 3.19.0-5.3

2024-02-08
OpenSUSE 15.5: Gambas3 v 3.19.0-lp155.10.1
Het lijkt me dat hierna de icoontjes zijn veranderd. Ze zijn eenvoudiger en kleurlozer gewordenm niet echt een verbetering…

2024-01-15
OpenSUSE 15.5: Gambas3 v 3.18.4-lp155.10.1

Gambas is back! Gambas3 is terug in openSUSE!

Na een onderbreking van een paar maanden ben ik verheugd Gambas terug gemakkelijk te kunnen installeren in OpenSUSE, namelijk in versie 15.6. (geïnstalleerd, upd: ook gebruikt).

Stappen:
verse 15.6
Na een update van opensuse 15.5 naar 15.6 ging ik op zoek naar de vroegere bron van Gambas(3) in openSUSE: Munix.

Munix repo
Repository toegevoegd via YAST:
https://download.opensuse.org/repositories/home:/munix9/ (URL link)
En met 15.6 hebben we geluk: gambas3 is weer voorzien:
bv gambas3-runtime-3.19.5-lp156.2.1.x86_64.rpm
ps: En (voorlopig nog) niet in 16.0.

Software Installeren: gambas3
Selecteren:
gambas3 – Complete visual development environment for Gambas
Version: 3.19.5

Installation Successfully Finished
Packages
Installed Packages: 139
autoconf, automake, bison, bison-lang, dwz, gambas3, gambas3-dev-tools, gambas3-gb-args… (more)

Continue reading

Gambas 3 op Raspberry Pi 400 kit

Op de meegeleverde SD kaart staat Raspbian 11.
Na installatie/configuratie bij het eerste opstarten van de Pi, moet je Gambas apart bij installeren.

  • Add/Remove software
  • Linkse kolom bij de software groepen: Ontwikkeling (Development)
  • of zoek “Gambas”
  • Kies bv “Complete Visual Development environment for Gambas”, om de hele IDE+andere onderdelen te krijgen, bevestig
  • Bevestig, wachtwoord geven : “installing packages – please wait ..”

Als de installatie klaar is, staat Gambas3 in het menu onder Programmeren: het is versie 3.15.2. De voorbeelden zijn niet mee geïnstalleerd.

Gambas3 op Raspberry Pi 5 (2)

Een andere configuratie:
- Raspberry Pi 5 Model B Rev 1.0 8GB
- OS: Debian GNU/Linux 12 (bookworm)

Gambas installeren

Add/Remove software: Gambas3 IDE 3.18.0-4 (64 bit)
Eerst even:
apt-get update

Ergens melding versie gewijzigd van 12.6 naar 12.7

apt-get upgrade

Er gebeurt een hele upgrade … nadien herstart en nog eens de updates van het desktop icoon gedraaid.

Dan software installeren, zoek gambas3
Bovenaan gambas3-3.18.0 (meta package) complete visual development environment for Gambas.

Daarna staan alle (of toch veel) gambas3 componenten geselecteerd in de Add/Remove software tool.
Bevestigen…
In het programmeermenu is nu Gambas aanwezig.

Gambas start niet

Maar ik kan het niet starten, er gebeurt op het eerste zicht niets als je via het menu start.

De opdracht in het menu-item is gambas3

Foutmelding als je van de commandline start:

ERROR #27 Cannot load component ‘gb.gtk3.wayland’: cannot find component

Check in Add/Remove Software: welke staan grijs (en zijn dus niet geïnstalleerd):

gambas3-gb-gui-opengl-3.18.0-4 transitional package
gambas3-gb-gui-qt-3.18.0-4 " "
gambas3-gb-gui-qt-webkit-3.18.0-4 " "
gambas3-gb-gui-trayicon-3.18.0-4 " "
...
gambas3-gb-inotify-3.18.0-4 filesystem events monitoring component
..
gambas3-gb-libxml-3.18.0-4 libxml component
..
gambas3-gb-option-3.18.0-4 option component
..
gambas3-gb-pdf-3.18.0-4 pdf component
..
gambas3-gb-qt5-3.18.0-4 Qt5 GUI component
gambas3-gb-qt5-ext-3.18.0-4 QT5 GUI component
gambas3-gb-qt5-opengl-3.18.0-4 OpenGL component with QT5 toolkit
gambas3-gb-qt5-wayland-3.18.0-4 Wayland
gambas3-gb-qt5-webkit-3.18.0-4
gambas3-gb-qt5-webview-3.18.0-4
gambas3-gb-qt5-X11-3.18.0-4
..
gambas3-gb-report-3.18.0-4
..
gambas3-gb-sdl-3.18.0-4 oudere SDL component vervangen door SDL2
gambas3-gb-sdl-sound-3.18.0-4
..
gambas3-gb-v4l-3.18.0-4 video for Linux
..
gambas3-gb-web-form-3.18.0-4 web application - verv d. web-gui?

De wayland component is inderdaad één van de gambas3 componenten die grijs staan, niet geïnstalleerd werden.

Bijgeïnstalleerd via software Add/Remove..

Er zijn verschillende “uitgerangeerde” componenten, zoals bv pdf die functioneel vervangen wordt door poppler, waarbij normaal is dat ze niet geïnstalleerd worden.

Gambas crasht

Vanuit Menu Programmeren: Gambas start op maar krijgt onmiddellijk een gestreept scherm (Gambas venster op volledig scherm), met in het midden er bovenop een wel leesbaar kleiner venster met de Gambas tip van de dag. Ik sluit de tooltips en druk op escape om de venstergrootte te veranderen, maar dat sluit Gambas.
Daarna kan ik niet terug starten uit het menu.
Wel vanop de commandolijn. Beetje proberen en daarna ook terug uit het menu.
Het lukt me om het venster van de Gambas IDE wat kleiner te maken, en nu krijg ik wel beeld zonder strepen.

Deze installatie-combinatie heeft dezelfde bug als voorheen al ontmoet; bij het klikken op een document uit “Data” of “Gegevens”. Zelfs al heb je het daarvoor zelf aangemaakt… programma crasht.
Voorlopig dus dezelfde truuk: die bestanden niet aanklikken (en als ze moeten veranderen dat buitenaf doen).

Gambas kan project niet openen
Maar dan, met het afhalen van bestaande projecten merk ik foutmeldingen bij het openen ervan.

Read-only array

Kan project bestand niet openen:
/home/ara/gb3prj/runcounter

Read-only array
[gb.gui.base].^^Desktop.GetDesktop.58 [gb.gui.base].^^Desktop.Types_Read.72 [gb.gui.base].^^Desktop.Is.79 VersionControl.GetTextEditor.56 VersionControl.Refresh.99 Project.Open.688 FWelcome.btnOpen_Click.186 CCoolButton.Panel_MouseUp.149 ?

Ontbreekt er nog iets van Gambas3?

Ik probeer met alle “transitional packages” (gb-gui/gui-qt/gui-qt-webkit/trayicon) bij te installeren, maar ook dat helpt niet om de bestaande projecten te openen, ook niet die op een (oudere) Raspberry Pi gemaakt zijn.

Ik kan wel een mini-project maken met een knop en een menu, dat draait en kan gecompileerd worden tot uitvoerbaar programma, en ook gestart van een icoon op de desktop.

Het lijkt dus iets te maken te hebben met de Desktop, en ik ga eens proberen een library die geen enkele Form heeft over te nemen/aan te passen uit een bestaand project. Ik pas een bestaand project in die zin aan, maar dat is niet de oorzaak blijkbaar.

Eén van de verschillen is dat de bestaande projecten allemaal in git zitten (afgehaald zijn met git clone).
Ik vindt een oude fout terug ivm het gedefinieerd zijn van EDITOR (en VISUAL ?)
Maar die instellen lijkt niets te veranderen aan de problemen.

GIT
Toch nog verdergaan op git: mijn voorbeelden waren allemaal binnengehaald van gitlab, en ik probeer nu van één daarvan de .git directory te verwijderen, en de .gitignore ook. Resultaat: ik kan het project nu wel openen! (*)

* Opgelet: het crash-probleem blijft, dus niet op README of Changes.txt klikken!

Gambas3 op Raspberry Pi 5 (1)

Hoewel Gambas al een tijdje standaard aanwezig is in de Raspberry Pi systemen, ondervind ik in maart 2024 een probleem met Gambas3 3.18.0 op een Raspberry Pi 5 (4GB versie) met Debian GNU/Linux 12 Raspberry Pi Debian 1:6.6.47 aarch64 (onderaan de volledige gambas system info).

Ik kon Gambas installeren, ik kan de IDE starten, ik kan een project openen, en zelfs het project compileren en uitvoeren.
Maar er is iets fout met de IDE van Gambas3; als ik in de linkse kolom op een tekstbestand klik, bv Changes.txt, crasht de IDE met:

This application has raised an unexpected error and must abort.
Read-only array (#65).
[gb.gui.base].^^Desktop.GetDesktop.58

Twee knoppen bij die melding: Negeer en Sluiten.
– Negeer: geeft terug dezelfde fout, en opnieuw en opnieuw, tientallen keren.
– Sluiten: Gambas IDE sluit af.

Ik vind die foutmelding terug op https://gambaswiki.org/wiki/error/sarray

Read-only array (65)
A method or a property cannot be applied to a read-only array.

Dus, het lijkt een Gambas foutmelding te zijn? De IDE is gemaakt in Gambas, dus een foutmelding uit de IDE? De IDE is zelf een Gambas project….
– ik haal de gambas master af: 3.19.90. Compileert niet, foutmeldingen die waarschijnlijk te maken hebben met backward compatibility problemen.
– ik haal 3.18.4 af. Open in IDE. Run… ok!! En die crasht ook. Op lijn 588 in FMain:
hProgList = DesktopFile.FromMime(sMime)
Ik begrijp niets van de foutmelding ivm read only, maar ik wel wel even zien wat het programma zou doen als het voorbij deze fout geraakt:
Try hProgList = DesktopFile.FromMime(sMime)
Niets. Of beter: alles. Geen probleem meer, ik kan de Data bestanden openen in de IDE en er in werken. Opgelost!? Nog raar: als ik de in Gambas gecompileerde 3.18.4 start, geeft die als versienummer toch 3.18.0… ik heb het gevoel dat er niets niet klopt…

Omzeilen
Eigenaardig genoeg werkt de Gambas3 programmeeromgeving perfect zolang je niet klikt op de verkeerde plaats. Je kan dus WEL:
– een project openen
– een Form wijzigen
– de Form code wijzigen
– het project compileren, uitvoeren, executable maken
– een nieuw bestand bijmaken

Je kan ook het onderdeel “Data” openklikken, maar dan …
De “verkeerde klik” is op alles wat onder “Data” zit, in mijn geval Changes.txt, README.md, License.txt enz..

Dus: als je die tekstbestanden edit van buitenaf kan je eigenlijk de hele programmeeromgeving gebruiken …

Ps:
Soms werkt Gambas niet als verwacht omdat er bepaalde onderdelen niet mee geïnstalleerd zijn.
Geprobeerd gambas3 te vervolledigen om van de fout van het laden van stockpi-lib af te geraken.
sudo apt install gambas3*
fout blijft…

Die Pi5 is een tijdje blijven liggen, nu probeer ik eerst een upgrade:
sudo rpi-update
fout blijft…


Uitwijkmogelijkheid:
– van broncode compileren (kan wel wat duren op een Pi..)
– De ontwikkelaar van Gambas werkt met Ubuntu denk ik, en er bestaat een ubuntu voor Raspberry Pi: https://ubuntu.com/download/raspberry-pi.
Continue reading

Een half als string is dubbel zo lang (“½”)

Kan het symbool “½” gebruikt worden in code, en in de database?

– in code: ja, maar
– database: te checken (op mijn mysql/mariadb: ja)

Lengte van een half
Maak een string met het half symbool er in, bv sExample = “½ eenheid”.
Doe string bewerkingen op die string, zoals de eerste letter van..

Print Left(sExample, 1)

Geeft niet het gewenste “½”

Print Left(sExample, 2)

Geeft wel het gewenste “½”

openSUSE: where is Gambas3?

(Uitzonderlijk een Engelstalige post om het probleem wat breder aan te kaarten:)
Because of general missing information, a cry for help in English on this Dutch site:

Update 4/11/2024: Zie ook “Gambas is back! Gambas3 is terug in openSUSE

Missing Gambas3

Gambas is a great programming language/application to make Linux applications (in my case for the KDE desktop), and it worked very well on openSUSE, I use it since version 1.x.

I consider Gambas(3) as a universal Linux application; I used it on several distributions, and also on Raspberry Pi.

Suddenly, in the summer of 2024, Gambas3 disappeared from openSUSE Tumbleweed. It was so bad that when doing a normal zypper dup on Tumbleweed, the Gambas3 IDE was removed! (runtime was still there).

Gambas also disappeared from the repositories normally used to install Gambas3 on openSUSE Leap (eg obs:/:build.opensuse.org/home:munix). When it was installed already, the software is marked red in Yast Software Management (I locked it now not to lose it).

Last ramaining current version I can find is in the repo home:Henry15ea: home:Henry15ea Community 3.18.1, where only a version for openSUSE Tumbleweed is available, no other versions.

On software.opensuse.org, search gambas3, under “experimental/unsupported”, you can find traces of older version 3.14:
openSUSE:Backports:SLE-15-SP3 3.14.3

I can find nowhere an explanation, or even a description of the problem for the moment.

Right now (aug 2024) the only thing that works for me is to compile Gambas3 from source (from the git repository, eg 3.19.90) on openSUSE Tumbleweed.

There used to be good support with different possibilities to install Gambas in openSUSE since Gambas2, for years and years, so I hope Gambas3 will be back soon in openSUSE…

Update 17/09: gambas3 from source still compiles fine on openSUSE Tumbleweed.

Update 4/11: gambas3 is back in openSUSE 15.6 via the Munix repo: see Gambas is back! Gambas3 is terug in openSUSE