MySQL/mariadb zonder ssl?

In openSUSE Tumbleweed werkt de databaseverbinding naar een lokale server niet vanuit een Gambas programma.

Op de commandline met mysql client wordt duidelijk dat een veilige verbinding verondersteld wordt (ssl), maar mijn interne server heeft dat niet. Je kan met een parameter --skip_ssl afdwingen om dat niet te doen, maar hoe doe je dat vanuit je Gambas programma? Ik dacht het ooit al eens opgelost te hebben maar ik weet niet meer hoe…

De help van de client zegt: Default options are read from the following files in the given order:
/etc/my.cnf ~/.my.cnf

In een post las ik:

“If you don’t want to type --skip-ssl on the command line every time, you can instead add this to /etc/mysql/mariadb.conf.d/50-client.cnf or ${HOME}/.my.cnf
[client]
skip-ssl = true

Bladwijzer in de broncode (bookmark)

Als je een probleem in de broncode aan het oplossen bent, moet je kunnen heen en weer springen tussen verschillende stukken code. Daarvoor kan je een bladwijzer zetten om je vorige positie te onthouden: sta op een lijn en druk Ctrl-B. Er verschijnt een zacht (lichtblauw bij mij) pijltje voor de lijn.

Ga naar een willekeurige andere lijn in je text (als je weet dat je rond 500 bezig was, druk Ctrl-G 500.

Ga nu snel terug naar je bookmark met Alt-PageUp of Alt-PageDown.

Dat is handiger dan er breekpunten voor te gebruiken, die kunnen later hinderen.

Gambas en GPIO op Raspberry Pi

Een poging om commandline gpio te gebruiken vanuit/om te leiden naar een Gambas programma.

Library "/user/local/libpigpio"

Public Sub testGPIO()

Dim sAnswer As String
Dim sCommand As String

sCommand = "gpio -h"

TRY SHELL sCommand TO sAnswer

TextAreaOut.Text = sAnswer

End

Ik ga er van uit dat je een Form hebt, FMain, waar je deze code in plakt.

Op de Form heb je een TextAreaOut gemaakt.

Je kan op het scherm dan een button zetten, die deze code aanroept.

Public Sub Button1_Click()

testGPIO()

End

Hetzelfde kan je doen met gpio -g readall in sCommand; dat leest de pinnen uit naar een tabel met informatie en pin-nummers (incl BCM nummers). Enz…

Combobox titel

Ik heb een eigenaardigheid op een rapsberry pi met het gebruik van comboboxen: als je bv 3 elementen toevoegt, dan zal de combobox bij opstarten toch een lege text hebben (niet de waarde van bv eerste item). Maar je kan niet zelf iets zetten in die lege tekst (bv een titel zou handig zijn, die aangeeft wat de inhoud van de keuze is).

Dit in FMain:

Public Sub Form_Open()
'ComboBox1.Add("Choose here..")
ComboBox1.Text = "Choose here"
ComboBox1.Add("ABC")
ComboBox1.Add("Def")
ComboBox1.Add("Ghi")
'ComboBox1.Index = 0
ComboBox1.ReadOnly = True
'
ComboBox2.Add("Choose here")
ComboBox2.Add("ABC")
ComboBox2.Add("Def")
ComboBox2.Add("Ghi")
'ComboBox2.Index = 0
ComboBox2.ReadOnly = True
End
'
Public Sub ComboBox1_Click()
Message.Info(ComboBox1.Index)
End
'
Public Sub ComboBox2_Click()
Message.Info(ComboBox2.Index)
End

De ComboBox1.Text geeft geen foutmelding, maar is ook niet zichtbaar.

KDE: Vanaf je gekozen hebt in de combobox, verdwijnt de “lege lijn” bovenaan.

In tegenstelling to op de Pi: Je kan altijd terug naar de “lege” toestand.


Gambas3 op Raspberry Pi 500 (3)

In tegenstelling tot een voorgaande installatie op een Raspberry Pi 5, geraak ik hier toch verder op de 500:

Gambas3 uit de software installer van het Raspberry Pi menu gekozen (IDE en bijhorende automatisch geselecteerd). Gambas staat in het menu maar start niet – komt bekend voor (2). Foutmelding idd iets met Wayland.

Als je apart de Wayland module bij-selecteert, start Gambas3 daarna wel op maar toont van die rare horizontale lijnen als een defect televisietoestel.

Ik kan het menu “Project” niet oproepen in de IDE. Nee dat is de desktop, je moet eerst het vorige menu sluiten.

  • een CLI applicatie: “Hello World” werkt, compileren tot testCLI.gambas werkt, kan opgeroepen worden vanop de commandline, kan inhoud .txt bestand tonen.
  • een GUI applicatie: Knop en Message, werkt, kan ook .txt bestand openen en tonen.

Nog even afwachten en verder gebruiken, maar het lijkt dat de meeste problemen van (2) opgelost zijn.

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-2025:
(Vastgesteld ,vooral op OpenSUSE. Algemene “Release page“, voor Ubuntu zie bv hier)

2025-02-18
OpenSUSE Tumbleweed : Gambas3 v. 3.20.99  (3.20.99+git.20250216)

2025-01-23
OpenSUSE Tumbleweed : Gambas3 v. 3.20.0-0.8.1

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), en (upd 1/2/2025) ook in Tumbleweed via software.opensuse.org.

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