24/8/2021

Git: kladwerk en ongewenste wijzigingen (dirty directory)

Filed under: — cybrarian @ 12:10 pm

(Reeks Githandboek (nl)commando’s vbbranch, mergestashGitLab vbSourceForge vbgit en gambas)

Undo
Wijzigingen niet bewaren (die niet toegevoegd waren – ‘not staged’) en terugkeren naar de laatste goede toestand van de bestanden in je directory:

git reset --hard
Alle wijzigingen weggooien en terug beginnen met de vorige toestand van je ontwikkeltak.

git checkout -- vuilbestand
Eén bestand terugdraaien naar de laatste normale toestand van voor je (klad)werk.
Een typisch voorbeeld is een .settings bestand dat kan reageren op het starten van een programma; bv omdat het een teller bevat, of de laatste toestand van schermen of geopende documenten bijhoudt of zo.

git stash
Dit laat je toe de wijzigingen niet op te nemen in je programmeervoortgang, maar toch ook niet helemaal definitief weg te gooien; je zet ze opzij om voort te kunnen met je normale ontwikkeling.
Daarbij hoort nog:
git stash list : lijst van stash-items in tijdelijke editor (q=quit).
git stash show : diff
git stash apply : toepassen van deze stash op huidig werk.
git stash pop: toepassen van deze stash op huidig werk en uit stash halen.

Zie ook stash

12/4/2021

Git: in verkeerde branche gewerkt

Filed under: — cybrarian @ 4:03 pm

Ik zit ijverig te werken en nadien zie ik dat ik in de master branch bezig ben ipv de dev branch.
Ik heb nog geen git add of commit gedaan.
Ik kan natuurlijk alles weggooien en de master terugzetten op een vorig punt.

Maar ik wil de wijzigingen wel bijhouden, en ik wil die in de dev krijgen.

De aanbevelingen die ik lees gaan ongeveer zo:
– maak een nieuwe branch vanuit die master die je gewijzigd hebt (maar nog niet ge-commit), geef hem een tijdelijk naam bv tempdev.
git checkout -b tempdev
– voeg daar alle bestanden toe en commit al je werk
git add .
git commit -m "some new work"

– check of je de dev branch hebt:
git branch -l
master
* tempdev

Als je de dev branch niet hebt, kijken of hij er remote wel is:
git branch -lr (opgelet dit kan een vertekend beeld geven als die recent is bijgemaakt en je niet hebt bijgewerkt…)

origin/HEAD -> origin/master
origin/master

Dus eerst synchroniseren met online:
git fetch

remote: Enumerating objects: 32, done.
remote: Counting objects: 100% (28/28), done.
remote: Compressing objects: 100% (16/16), done.
remote: Total 16 (delta 12), reused 0 (delta 0)
Unpacking objects: 100% (16/16), done.
From git://git.code.sf.net/p/myproject/code
* [new branch] dev -> origin/dev
0c4e870..b8c15dc master -> origin/master

git branch -rl
origin/HEAD -> origin/master
origin/dev
origin/master

Beter!
– schakel naar dev branch en merge die met devtemp (importeert de devtemp wijzigingen).
git checkout dev
git merge tempdev

– commit en push zodat de (online) “remote” dev branch is bijgewerkt.
– schakel naar die je master en reset hem naar de laatste versie (van remote halen dus).

(wordt vervolgd nadat ik het ook effectief uitgeprobeerd heb)

13/11/2018

Git: hoe haal ik of zie ik remote branch? Stuur local branch remote?

Filed under: — cybrarian @ 1:16 pm

(in de reeks Git…)

Zien
Online (in de web interface) zie ik de branches:

  • master
  • test
  • issue1

Maar lokaal zie ik alleen mijn eigen master (sic!):

git branch -l
* master

Ook na een git fetch blijft dat zo.

Git fetch heeft een standaardgedrag of volgt instellingen, maar je kan meer specifiek git fetch origin doen:

~/Git/TrypoPrj/TrypoPrj> git fetch origin
~/Git/TrypoPrj/TrypoPrj> git branch -l
* master

Bovendien moet je eigenlijk –list gebruiken (-l dient om een reflog aan te maken), en toont git branch –list enkel de lokale branches. Maar

git branch -r

origin/HEAD -> origin/master
origin/feat-01
origin/master
origin/test

toont de remote, of wil je alles:

git branch -a

* master
remotes/origin/HEAD -> origin/master
remotes/origin/feat-01
remotes/origin/master
remotes/origin/test

met extra info als laatste commit message:

git branch -v -a

* master 8ab6216 [ahead 1] remove .directory from tracked files
remotes/origin/HEAD -> origin/master
remotes/origin/feat01 2bbd368 Complete changes.txt with done work
remotes/origin/master de381ad Resolve merge conflict by combine and reorder lines in changes.txt

Afhalen
Als je een branch van remote wil halen kan je die opgeven

git fetch origin
of
git fetch origin branch-naam
Daarna bv merge in je eigen (bv master) en commit:

git merge origin/branch-naam
git commit ...

Of:
– check met git branch -la
– indien ok, git checkout WantedBranch
(gewoon met de naam, paar letters en gebruik TAB om aan te vullen)
Reaktie:

Branch WantedBranch set up to track remote branch WantedBranch from origin.
Switched to a new branch 'WantedBranch'

upd 2020-11-18

Een lokale branch ook remote maken

Situatie: ik heb een lokale “develop” branch en wil iemand mee laten ontwikkelen (of zelf vanop een andere plaats/toestel).

Er is een master branch, en de andere gebruiker ziet die:
De andere gebruiker heeft alleen de master:

git status
On branch master
Your branch is up to date with 'origin/master'.
nothing to commit, working tree clean
.
git pull
Already up to date.

Ik heb die ook, plus een develop, waarin ik aktief ben.

cybrarian@copylefthost:~/Gb3Prj/MyProject/ControlPanel> git status
On branch develop
nothing to commit, working tree clean
cybrarian@copylefthost:~/Gb3Prj/MyProject/ControlPanel> git push
fatal: The current branch develop has no upstream branch.
To push the current branch and set the remote as upstream, use
git push --set-upstream origin develop
cybrarian@copylefthost:~/Gb3Prj/MyProject/ControlPanel> git branch -r --list
origin/master
cybrarian@copylefthost:~/Gb3Prj/MyProject/ControlPanel> git push --set-upstream origin develop
Total 0 (delta 0), reused 0 (delta 0)
remote:
remote: To create a merge request for develop, visit:
remote: https://gitlab.com/cybrarian.copyleft/ControlPanel/-/merge_requests/new?merge_request%5Bsource_branch%5D=develop
remote:
To gitlab.com:cybrarian.copyleft/ControlPanel.git
* [new branch] develop -> develop
Branch develop set up to track remote branch develop from origin.

Nu kan de andere gebruiker:
.
git pull
From gitlab.com:cybrarian.copyleft/ControlPanel
* [new branch] develop -> origin/develop
Already up to date.

De andere gebruiker kan nu ook mee aan de slag…
(mits hij de juiste rechten heeft – bv gitlab “maintainer”)

Git ingore negeert opgegeven bestand niet

Filed under: — cybrarian @ 10:47 am

(in de reeks Git…)

Hoewel ik .settings heb toegevoegd tot gitignore, blijft het af en toe opduiken als gewijzigd bestand, klaar om mee te committen. Ik begrijp niet of het komt door merge met andere medewerkers die misschien een andere instelling hebben (hoewel ik dacht dat die lokaal was).

Oorzaak is bv dat het bestand oorspronkelijk niet in gitignore zat, en er pas later is aan toegevoeg, toen het al getracked werd. En .gitignore werkt alleen voor “untracked” files (voor nieuwe bestanden dus).

Er is een extraatje nodig (how to make git forget..):

git update-index --assume-unchanged

git update-index --assume-unchanged .settings

Je krijgt geen feedback na dit commando.

28/9/2018

Git voorbeeld: SourceForge

Filed under: — cybrarian @ 10:24 am

(Reeks Githandboek (nl)commando’s vbbranch, mergeGitLab vbSourceForge vbgit en gambas)

SourceForge (https://sourceforge.net/) was in de open source en free softwarewereld zowat de eerste, grootste en bekendste website voor het online houden van een open source of free software project. Je kon de broncode gewoon uploaden als .tar.gz bestanden, of het Code Versioning System gebruiken (cvs), naast de vele project-tools voor opvolging van bugs, communicatie enz. (zie 2009)

SourceForge heeft achtergrond in VA Software (denk ook aan VA Linux, Geeknet, enz), ondertussen horen ze bij Slashdot media.
Het traject van de zoektocht naar rendabiliteit en de overnames deed Sourceforge geen goed en zaaide twijfel bij developers.
Heel wat nieuwe projecten gingen naar GitHub, (en meer recent GitLab), die specifiek gericht waren op het ondertussen in de FOSS wereld populaire geworden git-broncodebeheersysteem.

Maar ondertussen biedt SourceForge ook Git aan. Sinds januari 2018 promoten ze het aktief met een importeer-tool om GitHub projecten over te zetten naar SourceForge.
https://sourceforge.net/blog/introducing-the-new-sourceforge/

Wie al op Sourceforge zit kan zijn project beginnen beheren met git: https://sourceforge.net/p/forge/documentation/Git/

Om gemakkelijk te communiceren met de sourceforge repository is het best om een public key/private key communicatie op te zetten. Daarvoor moet je een “key” hebben, die je maakt met ssh-keygen.
Daarna moet je de projectdirectory initialiseren voor gebruik met git. En dan moet je je startcode “uploaden”, in git-terminologie comit-en en push-en.

1. Keys

1.1 keys maken:

De handleiding van sourceforge zegt:

ssh-keygen -t ed25519 -C “gebruikersnaam@shell.sf.net”

De plaats waar je dit doet is eender (bv kan je al in de projectdirectory staan).
De gebruikersnaam is die van je login, niet de weergegeven naam!
Na het commando krijg je de vraag in welk bestand de key bewaard mag worden, je kan het voorstel gewoon bevestigen.
Daarna kan je een wachtwoord ingeven (veiliger), wat je moet heringeven om te bevestigen.
Het eindigt met de plaatsen waar je identificatie en je public key bewaard werden*, en met je fingerprint.
Daaronder komt een beetje “ascii-art” met je randomart image.
* Je kan je instellingen checken in de bestanden:
private key: /home/usernaam/.ssh/id_ed25519 (deze moet je geheim houden!)
public key: /home/usernaam/.ssh/id_ed25519.pub (deze moet je meedelen)

1.2 keys registreren

Log in op SF en ga naar:
https://sourceforge.net/auth/shell_services
Daar plak je de inhoud van je .pub bestand.

2. Projectdirectory

De directory die je wil opnemen in het git beheer moet je initialiseren voor git gebruik.
Ga in de directory staan (cd projectdir), en check git:

git status
Als je … krijgt is er al een git repository van gemaakt!
Als er nog geen git initialisatie gebeurd is op deze directory krijg je een melding als:

fatal: Not a git repository

…(enz)

Tik het initialisatiecommando dat de nodige subdirectories en bestanden maakt:
init git

Initialised empty Git repository in …

Opgelet! Nu zijn er een aantal (onzichtbare) directories/bestanden bijgekomen voor git, gebruik deze projectdirectory niet meer om op een andere manier te kopiëren als project sourcecode, want hij is “vervuild” met git.

3. Stel de bron in

Als de broncode nog niet in de directory staat, kopieer je die ernaartoe. Ze vormen de verzameling van alle onderdelen die je nodig hebt om een programma te kunnen compileren.
Met git status toont git wat het daar ziet.

Je stelt ook de bestanden in die NIET naar de git-server moeten, omdat ze enkel lokaal nut of belang hebben (bv lokale instellingen van de programmeeromgeving), of omdat ze prive-informatie bevatten.
Maak daarvoor een bestand .gitignore in de projectdirectory.

git rm --chached (file) om iets wat er per vergissing toch is terechtgekomen; check met git status.

git commit -am ‘initial commit at version 0.1.5’

Je krijgt de melding dat een ‘standaard’ e-mail adres gebruikt is; je kan het instellen met:

git config --global --edit

pas aan, bewaar (standaard met ESC :w en :q), en daarna fix de identiteit die gebruikt werd met:

git commit --amend --reset-author

Je krijgt dan een tekst te zien (waarin je bv het e-mail adres kan verbeteren, dacht ik, maar dat blijkt achteraf niet met git log**); ook weer ESC :wq om te bewaren en verlaten.

4. Stel de server in

Nu moet je een verbinding instellen met de server, waar de broncode naartoe moet.

git remote add origin ssh://login@git.code.sf.net/p/gitin/code

(met je eigen login natuurlijk; de username).

En dan de eigenlijke “upload”:

git push -u origin master
Er wordt een bevestiging gevraagd van de git.code.sf.net server (met ip)
Die wordt dan toegevoegd aan de “known hosts”.
Daarna moet je je wachtwoord ingeven (dat van de ssh key).

Met wat geluk eindigt alles met:

Branch master set up to track remote branch master from origin.

Nu kan je via de website het resultaat zien onder het tabblad “code”:
https://sourceforge.net/p/projectname/code/

De projectdirectory is volledig te “browsen”!
Onderaan verschijnt de inhoud van het readme.txt bestand.

Zeer handig is de kolom “Commit”, want daar verschijnt de commit message, en je kan daarmee snel zien wat de laatste verandering is in een directory of bestand.


**)
Je moet eerst expliciet de gegevens instellen, bv het e-mail adres wordt afgeleid uit je username en je hostname, dus je krijgt username@host, en dat kan bv de lokale hostname van je pc zijn.

Je moet dan eerst expliciet de username of het e-mail adres instellen:

git config --global user.name "gebruikersnaam"
git config --global user.email "user@domein.abc"


5. Gebruik.

– Code

git commit -am 'initial commit at v.0.1.3'

Nadat van een project de originele code naar de server geladen is, wordt ze zichtbaar in de “code” tab van de Sourceforge website, bv als:

Tree[987456] master/

Op die pagina krijg je ook de commando’s aangeboden die je nodig hebt om ssh/https/RO (read-only) toegang te krijgen.

– Clone

RO is genoeg om het project af te halen:

git clone git://git.code.sf.net/p/projectnaam/code projectnaam-code

Dit maakt een lokale directory projectnaam-code, verwijzend naar de structuur op de server (beetje verschillend van GitLab).

Om ook schrijftoegang te hebben moeten eventueel de rechten aangepast worden door de admin van het project, en moet je één van de voorgestelde read/write commando’s geven.

git branch --list toont: “* master”

fatal: remote error: access denied or repository not exported…

Als je oorspronkelijk enkel read-access hebt gevraagd (bij project clone), kan je nadien de instellingen aanpassen in het .git/config bestand. Volgens de documentatie:

git://PROJECTNAME.git.sourceforge.net/gitroot/PROJECTNAME/REPONAME (read-only)
ssh://USERNAME@PROJECTNAME.git.sourceforge.net/gitroot/PROJECTNAME/REPONAME (read/write)

Bij mij zag het er iets anders uit:

url = git://git.code.sf.net/p/projectnaam/code

url = ssh://USERNAME@git.code.sf.net/p/projectnaam/code

Zoek de regel die begint met git:// en verander hem naar ssh:// waarbij je “USERNAME@” toevoegt (maar dan je echte loginnaam natuurlijk).

4/9/2018

Git gebruik organiseren: branches, comit, merge

Filed under: — cybrarian @ 8:59 pm

(Reeks Githandboek (nl)commando’s vbbranch, mergeGitLab vbSourceForge vbgit en gambas)
Zie ook artikel over branches in git, (Engelstalig, 2015)

Branch commando’s

git branch (--list)= toon branches; git branch -a = toon alle (ook remote)
git branch -v = toon laatste commit messages
git branch Testing = maak nieuwe branch met naam “Testing”
git checkout Testing = overschakelen naar branch
git merge bugfix = merge bugfix in huidige branch (vorige checkout branch, hier dus Testing)
git branch -d bugfix = verwijder branch (gaat niet? checked out?)

Branch, merge
Veelgebruikte struktuur van vertakkingen:

Master branch (-> production server)
Develop branch (-> staging server)

  • Feature branch
  • Hotfix branch
  • Release branch
  • Support branch

Git Branching and merging strategies beschrijft het zo:

Master – Test – Develop

Uit Master wordt initieel test gemaakt, uit test develop, en uit develop de feature branches.

Master - Test - Develop -- Feature-1
                        -- Feature-2

(

De Develop stage krijgt updates uit de feature branch die gewijzigd is;

.. Develop <-- Feature-1
           <-- Feature-2

De feature branches houden zich up to date door de wijzigingen uit de develop regelmatig af te halen (rebase). Hoe beter ze onderling op de hoogte blijven van de ontwikkeling, hoe minder conflicten later.

.. Develop --> Feature-1
           --> Feature-2

En alles van develop gaat uiteindelijk naar boven naar test, dan naar Master.

Vanuit Master wordt een Release 1.0 branch gemaakt.
Later vanuit Master een Release 2.0 branch.

De bugs die ontdekt worden in de Release branches, kunnen gepatcht worden (éérst op eerste versie waar die voorkomt)
bv comit op Release 1 –
van daaruit Merge naar Release 2
van daaruit Merge naar Develop (waarna het met rebase bij de feature branches komt, en waar het klaar zit voor de volgende release naar boven)

Overzicht van bestaande branches:

git branch --list

bugfix
* master
testing

Verschillende commits:

  • Merge
  • Fast-Forward
  • Rebase

Branch namen

Vb van een prefix die onderscheidend werkt:

feat-shortname bv: feat-stocklist
fix-shortname bv: fix-bugitem1234
hot-shortname bv: hot-fixCrashStartWithoutDb
rel-shortname bv: rel-v1-2
try-shortname bv: try-stocklistlocalcache

Branch lokaal-remote

Een lokaal gemaakte branch kan nadien gewoon naar de server gestuurd worden:

git push origin feat-1

Voorbeeld 1 merge (recursive):

master: bestand 1 veranderd; commit
develop: bestand 2 veranderd; commit

git checkout master
git merge testing

Merge made by the ‘recursive’ strategy.
TweedeBestand.txt | 1 +
1 file changed, 1 insertion(+)

Voorbeeld 2 merge (fast-forward):

git checkout master
git checkout -b bugfix

Switched to a new branch ‘bugfix’

Wijzig bestand 2, en …

git commit -a -m "voeg commentaar toe"

[bugfix 02aa0b3] voeg commentaar toe
1 file changed, 1 insertion(+)

git checkout master

Switched to branch ‘master’
Your branch is ahead of ‘origin/master’ by 3 commits.
(use “git push” to publish your local commits)

git merge bugfix

Updating feb4282..02aa0b3
Fast-forward
TweedeBestand.txt | 1 +
1 file changed, 1 insertion(+)


Voorbeeld 3: opkuisen na merge

Daarna mag de tak van de bugfix weg:

git branch -d bugfix

Deleted branch bugfix (was 02aa0b3).

Als hij nog aktief staat krijg je een fout:

error: Cannot delete branch ‘bugfix’ checked out at ‘/home/..

Voorbeeld 4 merge (rebase)

branch master, test, feat-1, feat-2

wijzigingen feat-1, commit
wijzigingen feat-2, commit

git checkout test
git status

git merge feat-1

Updating f276191..804f3c6
Fast-forward
Project/.src/Filename.class | 12 +++++++++++-
… (bestanden en wijzigingen)
12 files changed, 291 insertions(+), 37 deletions(-)
create mode 100644 Project/.src/FGetText.class
create mode 100644 Project/.src/FGetText.form

git merge feat-2

Auto-merging Project/Changes.txt
Auto-merging Project/.src/MForm.module
Auto-merging Project/.src/FMain.class
Merge made by the ‘recursive’ strategy.
Project/.src/FMain.class | 2 +-
Project/.src/MForm.module | 1 +
… (bestanden en wijzigingen)
7 files changed, 646 insertions(+), 1 deletion(-)
create mode 100644 Project/.src/Class/CIntWeek.class
create mode 100644 Project/.src/Forms/FInterim.class

Om in mijn feat-1 alle wijzigingen van test al mee te krijgen:

git checkout feat-1
git rebase test

(alhoewel niet iedereen voorstander is van rebase gebruik, zie ook fetch/merge, pull)

Voorbeeld 5 merge (diverged/rebase)

Zie hier…
http://linuxuser.copyleft.be/liglog/?p=7490

Merge Error 1

Fout op 1 bestand dat lokaal veranderd is, maar enkel een .settings bestand is dat mag overschreven worden:

git reset --hard
Daarna terug de merge.

Merge Error 2

git checkout test
git merge feat-1

Auto-merging Proj/Changes.txt
CONFLICT (content): Merge conflict in Proj/Changes.txt
Automatic merge failed; fix conflicts and then commit the result.

git status

On branch test
You have unmerged paths.
(fix conflicts and run “git commit”)
(use “git merge –abort” to abort the merge)

Changes to be committed:

modified: Proj/.src/ProjForms/FInterim.class
modified: Proj/.src/ProjForms/FInterim.form

Unmerged paths:
(use “git add …” to mark resolution)

both modified: Proj/Changes.txt

Inderdaad, de Changes.txt file is gewijzigd in beide takken. Als je het bestand in de huidig aktieve branch (de merge branch Test in dit geval) opent, zal je aanduidingen zien van de overlapping:

0.1.2 
...
< <<<<<< HEAD

FFactoring:
0.1.2 
=======
>>>>>>> feat-interim

HEAD : geeft de “hoofd”-branch aan, waar naartoe gemerged wordt, waarna die tekstversie
====== : geeft de scheiding aan naar het begin van de ingevoegde (feature-,..) branch en de bijhorende tekstversie
Ook de ingevoegde branch naam staat er achter.

Maak van de tekst de versie die het uiteindelijk moet worden, combineer beide stukken of gooi wat weg.
Stage de veranderingen met git add .
Commit de veranderingen met git commit -m "Resolve merge conflict by combining and ordening changes.txt"

Probeer daarna opnieuw een merge.

29/9/2017

GIT commando’s, vb, problemen

Filed under: — cybrarian @ 10:45 pm

(Reeks Githandboek (nl)commando’s vbbranch, mergeGitLab vbSourceForge vbgit en gambas)

Commando’s

git config --global user.name "mijn naam"
git config --global user.email mijnemail@mijndomein.tld
git config --list

Je kan op dezelfde manier je editor en diff tool instellen.
Waarde wordt bewaard in ~/.gitconfig (in opensuse).

Bekijk de instellingen daar, of zoals de laaste lijn met –list.
(antwoord leeg=geen instellingen)

Deze configuraties worden met –global eenmalig gedaan; je kan ze zonder global uitvoeren voor een project met afwijkende gegevens (na git init in de projectdirectory):

git config user.name "mijn andere naam"
git config user.email anderemail@mijndomein.tld

Deze komen terecht in de lokale .git/config

git init = start gebruik git; creatie van ~/.git/ directory in de projectdir waar je bent

git clone git://gitserver.org/iemandsdirectory/eenproject.git = haalt een bestaand project af en maakt een werkdirectory klaar.

Initialized empty Git repository in /home/name/Gambas3Prj/PrjName/.git/

Als het project via de webinterface is aangemaakt zal je meestal een “text” bestand README.md in vinden;
extentie md staat voor markdown, voor eenvoudige opmaak nummering enz met # heading *bold* -listitem enz

Waarna git status:

# On branch master
#
# Initial commit
#
nothing to commit (create/copy files and use “git add” to track)

Beginnen met een kopie van een project:
git clone git://gitlab.com/iemand.naam/eenProject.git

Cloning into ‘eenProject.git’ …

(Fouten zie ook 4*)

Waar komt clone terecht?
Als je geen git init gedaan hebt, maar onmiddellijk git clone:
– clone van het project “GitUse”
– commando van in de directory ~/Git/GitUsePrj>
Dan wordt ~/Git/GitUsePrj/GitUse gemaakt, met daarin de verborgen .git directory.

git status = overzicht lokale(!) toestand, bv nieuwe bestanden enz (! zie git fetch)
git status -s = korte samenvatting toestand, met afkortingen als M, MM, A, ??
git add test.txt = toevoegen aan staging (of nieuw bestand opvolgen- in “tracked”)
git add . voegt alle nieuwe files en dirs toe (behalve ignored)
git add -u kijkt naar de wijzigingen aan de tracked files.
git rm --cached test.txt = untrack/unstage test.txt;
git add '*.txt' = als wildcards gebruikt worden: aanhalingstekens
git
git commit -m "beschrijving van de inhoud of wijziging (m=message)" = toevoegen aan repository van alles wat in staging staat; anders filenaam opgeven
git commit test.txt = commit alleen deze file
git commit -a = gaat zelf de nodig add en remove (rm) doen
git commit -a -m 'grote lijn van wijziging' = combinatie -a en -m

git log = geeft in volgorde al de laatste handelingen (in editor; verlaten met :q )
Remote instellen:
git remote add korteNaam git@gitlab.com/userdirectory/repository.git = opgeven van repository op de gitruimte ; standaard branch is ‘master’
git remote add korteNaam https://domain.tld/userdirectory/repository.git = versie met https in plaats van git of ssh.
git remote -v = lijst van gedefinieerde fetch en push remotes

git push -u korteNaam master = alles naar online (git push origin master)

git fetch = toestand van de online versie ophalen (waardoor je -lokaal- de status kan vergelijken met de bijgewerkte toestand online tot dat punt)

git pull korteNaam master = alles direkt binnenhalen om te werken. (Eigenlijk fetch + auto merge; je krijgt geen kans meer om de verschillen te bekijken zoals na fetch!)

git diff = verschillen zien tussen working directory en staging (standaard editor :q om te verlaten)
git diff HEAD = verschillen zien tov laatste commit, meest recente=’HEAD’
git diff --staged = verschillen zien eigen staged tov laatste online pull
git diff --cached = ” ” ”

git reset = verwijder laatste staged (maar file blijft wel tracked)
git checkout -- unwantedfile.txt = (spatie laten)

git branch branchname_voor_mij = maak nieuwe branch
git branch --list = toon branches
git checkout branchename_voor_mij = overschakelen naar branch
git branch -d branchname_voor_mij = verwijder branch (gaat niet: checked out?)

git rm '*.txt' = verwijderen van de files + wijz. klaarzetten in staging

Bij (merge) conflict, bv na git pull:
git mergetool
Dat brengt je in een gestuurde oplossing file per file, met info en keuzes als: use modified (m) or deleted (d) file, abort (a) …
Je moet dan eerst een git commit doen en daarna terug git pull.

Ik wil …

– controleren welke (exluded/uit te sluiten) bestanden mee in git zitten:

git ls-files (alleen bestanden)
git ls-files --stage (meer detail: [tag] mode object stage file)

– fout opgezette lokale repo wissen en opnieuw beginnen: rm -rf .git

(hier zit alles in). Check je .gitignore file in de project directory (waar .git stond), met git init wordt die overschreven?
rm -rf .git
git ls-files
fatal: Not a git repository (or any parent up to mount point /home)
Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set)

– weten of mijn lokale repo bij is met online: git status

git status
# On branch master
# Your branch is ahead of ‘nieuws/master’ by 1 commit.
# (use “git push” to publish your local commits)
#
# Untracked files:
# (use “git add …” to include in what will be committed)
#
# ProjectToTrack/.settings
nothing added to commit but untracked files present (use “git add” to track)

(zie ook 5*)

– mijn versie naar boven naar online duwen git push

git push –all
Counting objects: 9, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (5/5), 521 bytes | 0 bytes/s, done.
Total 5 (delta 1), reused 0 (delta 0)
To git@gitlab.com:/mat.abc/Test.git
9512a28..a72f459 master -> master

– de laatste online versie afhalen git pull test master

git pull test master
Pass a valid window to KWallet::Wallet::openWallet().
Pass a valid window to KWallet::Wallet::openWallet().
remote: Counting objects: 5, done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 5 (delta 1), reused 0 (delta 0)
Unpacking objects: 100% (5/5), done.
From https://gitlab.com/mat.ara/Test
* branch master -> FETCH_HEAD
9512a28..a72f459 master -> test/master
Updating 9512a28..a72f459
Fast-forward
ProjectToTrack/.src/FMain.form | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)

Enkele vragen blijven nog:

  • worden er bestanden bijgemaakt door git in de specifieke subdirectories van een project, of alleen in de onzichtbare .git directory op hoogste niveau?
  • wat is beste methode: directories opnemen en files excluden, of specifieren welke wildcard-files moeten opgenomen worden?
    Bv voor gambas: ./*.txt; ./src/*.class; ./src/*.form erin of .gambas; .settings; .*~ eruit: Gebruik .gitigrnore (gambas maakt nu een .gitignnore bij creatie van een project).
  • Wat met .png, .jpg, enz. Apart opslaan omdat ze binary zijn? Kunnen mee in ropository maar de diff is enkel op tekst.
  • moet een projectdir dezelfde naam hebben op de verschillende locaties? De dir waarin je git init doet waarschijnlijk niet, en de rest haal je mee binnen zeker?
  • Hoe werken vanop verschillende computers (als dezelfde ‘gebruiker’ (zelfde e-mail adres); ssh keys kopieren of meer keys maken? Hier ben ik nu geneigd om verschillende “users” te maken op de verschillende toestellen/locaties. Maar als ieder van die users dezelfde branch “dev” gebruikt wordt het snel weer verwarrend. Je moet telkens de branches met dezelfde naam mergen.
    Ik plan nu:

    • workmail@domainwork.tld - > branch "devwork"
    • secondwork@webmail.tld - > branch "devlaptop"
    • personalmail@hosting.tld - > branch "devhome"

    Dan is het ook duidelijker dat je inderdaad moet mergen.

Links
Een paar links voor zolang ze geldig zijn:

Nederlandstalig! https://git-scm.com/book/nl/v1/Aan-de-slag
https://git-scm.com/book/en/v1/Getting-Started-First-Time-Git-Setup
https://help.github.com/articles/se-up-git/
https://try.github.io/levels/1/challenges/1
Goede commit messages zien er zo (niet) uit:
https://chris.beams.io/posts/git-commit/
https://longair.net/blog/2009/04/16/git-fetch-and-merge/ fetch, merge (of pull?)

(meer…)

29/6/2017

Git voorbeeld: gitlab

Filed under: — cybrarian @ 3:31 pm

(Reeks Githandboek (nl)commando’s vbbranch, mergeGitLab vbSourceForge vbgit en gambas)

Samenwerken of verdeeld werken

Een van de online diensten die git aanbieden is gitlab.com

Ik heb die gebruikt als voorbeeld bij mijn git artikel.

Registratie
Je maakt een account aan met een naam, wachtwoord en e-mail adres. Op dat laatste krijg je dan een bevestigingsmail met een link.
Je kan een icoontje voor jezelf kiezen (“avatar”) zoals in veel online diensten, of het wordt herkend als je geregistreerd hebt bij een centraal register van avatars.
Je kan je ssh key (het publieke deel) in de user settings invoegen.

Project

Bij het maken van een nieuw project moet je nadenken over de “namespace”, want het is niet eenvoudig om die nadien te wijzigen. De belangrijkste vraag is of je het project onder je eigen naam/namespace maakt;
– naam/project
of onder de naam van een groep: (zie ook verder Group)
– groupnaam/projectnaam)

Als je samen met anderen wil werken is group aan te raden (zou eigenlijk standaard moeten zijn).
Ook als je een project hebt waar verschillende onderdelen zullen bestaan, of je op een andere manier programma’s wil groeperen, gebruik je een project. Je kan zelfs daar nog sub-projecten van definiëren.

Hoofd/kleine letters: Hoewel je de group en projectnaam met een hoofdletter kan laten beginnen, wordt de directory van je project (eigenaardig genoeg) met een kleine letter geschreven in het bestandssysteem (althans bij GitLab – is dit een toegeving aan Windows gebruikers? Het is in ieder geval vervelend als Linux gebruiker, waar MijnMap niet hetzelfde is als mijnmap).

Na create blank project in de web-interface krijg je in te vullen:

  • name
  • URL (wordt aangeboden op basis van je naam en huidige project
  • slug (“Mijn Project” wordt “mijn-project” voor directory vorming)
  • description
  • visibility level (private staat standaard aan, groep heeft toegang)
  • Initialise with README is aankruisbaar, maakt README.md

Wijzigen
Om het nadien te wijzigen moet je extra opties aktiveren (Project Settings, Advanced, Expand), Transfer project, Select a new namespace; daar kan je kiezen uit bestaande projecten. Je moet nog eens bevestigen met het intypen van de projectnaam ter controle.
(De rode omgeving geeft aan dat er onverwachten en onaangename gevolgen kunnen zijn, zorg zeker voor een backup).

Je moet daarna ook je instellingen aanpassen op je lokale git-werkstation; je kan de bestaande opvragen met:

git remote -v
wijzig met hetzelde commando als het opzetten:
git remote set-url
git remote set-url origin git@gitlab.com/GrpProject/projectname.git
(zowel de fetch als de push werden aangepast)

Als je in de web-interface een oude URL gebruikt die je bewaard had, krijg je een viendelijke foutmelding (en wordt je indien mogelijk doorverwezen):

Project ‘username/projectname’ was moved to ‘GrpPrjname/projectname’. Please update any links and bookmarks that may still have the old path.

Prive of publiek
Gitlab laat op dit moment toe om een account aan te maken en je project in te stellen als:

  • publiek open source project
  • privé project

Het privé project belet je niet om toch met anderen samen te werken.
Voor het project heb je Settings: “General-Members-Integrations-Repository-Pipelines-Pages-Audit Events”; kies “Members”, “Select members to invite”. Rol en vervaldatum kunnen ingesteld worden.

Repository
(upd 12-10-2018)
Als je het project via de webinterface (website) van GitLab aanmaakt, kan je
* de repository klaarmaken om met een “clone” commando af te halen (initialisatie van de “master”); daarbij kan je de README.md invullen.
* onmiddellijk een LICENSE kiezen; met een eenvoudige klik kan je een licentie bestand toevoegen aan je repository. Je kan kiezen uit een lijstje waarin bv GPL en andere licenties voorkomen. Als je bv GPL3 kiest, wordt er een bestand LICENSE gemaakt met als inhoud de GPL3, en als commit geregistreerd.
(upd: dit lijkt ondertussen veranderd te zijn, volg online instructies)
Afhalen met:
git clone git://git@gitlab.com:userORgroup/projectname.git
(of gebruik hun web-interface om de juiste url te knippen/plakken, zoals hier beschreven.)
Meer basiscommando’s

cybr@penguin:~/Git/NieuwPrj> git clone git@gitlab.com:devgroup/nieuwprj.git
Cloning into 'nieuwprj'...
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (3/3), done.

In directory Test: git clone git@xxx/persis3-prj.git
maakt in de dir waar je staat:
persis3-prj
met daarin: README.md

dus je moet zelf niet die prj directory aanmaken. Als je een niveau prj directory hebt met aanverwante files en ook daarin een application directory met de broncode, kan je die zo automatisch maken door de clone opdracht.

Groep
Daarvoor maak je een groep aan (menu “+”, new group), die je een naam naar keuze geeft; ik hou hem vrij algemeen omdat het gemakkelijk is om veel projecten te delen met 1 groep.

Daarna ga je de leden voor de groep kiezen. Zelf ben je al lid doordat je de groep gemaakt hebt. Je kan een andere account opzoeken in de bestaande gitlab accounts, en lid maken van de groep. Je kan zoeken op naam, e-mail adres. Je kan de duur instellen van het lidmaatschap, en het niveau (Guest, Reporter, Developer, Master, Owner); Owner ben je zelf.

De andere partij krijgt dan een mail met “Access to the NewGroupName group was granted”. Hij kan met een klik weer uit de groep stappen.

Die andere account kan natuurlijk ook een andere account van jezelf zijn, waarbij je bv thuis een andere account gebruikt dan op het werk.

Groepsproject
Het is de bedoeling dan een nieuw project te maken binnen die groep. Je kan een bestaand project aan die groep toevoegen / overzetten van persoonlijk project naar groepsproject; je gaat het importeren als het ware, maar dat houdt in dat de naam van het project (url) verandert, en dat kan onverwachte problemen geven wordt opgemerkt door gitlab. Je kan natuurlijk ook gewoon een nieuw project maken en daar de bestaande code van het moment in invoeren.

Rechten
De volgende stap is dan de toegangsniveau’s instellen. Hier bepaal je de fijnere betekenis van bv Developer; maar ze hebben al een ingevulde standaardbetekenis volgens deze tabel: (Permissions).
Rondkijken kan iedereen, labels toekennen bijna iedereen, en de Master kan een project maken in de groep.

Afhalen
(upd 2017-09-17)
Als je ingelogd bent op de site kan je ook in je browser door de broncode bladeren; je ziet het voorgesteld als een bestandssysteem met betanden. Je kan iedere individuele file bekijken of afhalen als download.
Op hoger/het hoogste niveau kan je ook het project afhalen (symbool van pijl naar beneden op plat streepje); je krijgt dan de keuze aangeboden om het als een gecomprimeerd pakket (bv tar.gz) te downloaden.

Project verwijderen
(upd. 29/06/2021)
Ingelogd, “settings” (linkerkolom), “General”, “Advanced” (openklappen), helemaal onderaan “Delete project”
Daar staat ook bij “Delayed project deletion / Disabled”, en onderaan de knop “Delete project”.
Er wordt nog gevraagd of je “absolutely sure” bent, en je moet iets (bv de projectnaam) typen om te bevestigen.
Je kan daarna het project terug aanmaken met dezelfde naam, het krijgt een nieuwe project ID.

Documentatie-wiki
Eén van de opties in de linkermenubalk van GitLab is de wiki, die je kan gebruiken voor documentatie. Het startscherm heeft een knop “Create your first page”.

Issue tracker
De issue tracker wordt gebruikt bij het maken van voorstellen (feature proposal), fouten te melden (bug reporting), enz.
Issue tracker menu leidt naar de lijst of naar het issue board, waar je issues kan slepen naar bv de labels “To Do”, “Doing”, en andere zelf te maken onderverdelingen, waarnaar ze ook verder gesleept kunnen worden. Zo krijgen de issues een traject.

8/6/2017

“Pro Git”-boek ook in Nederlandstalige versie

Filed under: — cybrarian @ 3:47 pm

(Reeks Githandboek (nl)commando’s vbbranch, mergeGitLab vbSourceForge vbgit en gambas)

Pro Git
Het boek is origineel in het Engels uitgegeven, en is in tweede versie te vinden op https://git-scm.com/book/en/v2
Geschreven door Scott Chacon en Ben Straub en uitgegeven bij Apress.
Ze kozen voor de “Creative Commons Attribution Non Commercial Share Alike 3.0 license”, waardoor het ook vertaald kan worden.
Een papieren versie bestaat ook en is waarschijnlijk te vinden via Amazon.com.

De Nederlandstalige versie (is gebaseerd op de eerste versie) en bevat:

6/6/2017

git

Filed under: — cybrarian @ 2:04 pm

(Reeks Githandboek (nl)commando’s vbbranch, mergeGitLab vbSourceForge vbgit en gambas)

Git is het broncode-beheersysteem dat opgestart werd door Linus Torvalds, en nu door/voor honderdduizenden projecten gebruikt wordt. Het maakt samenwerken aan broncode en aftakken plus terug samenvoegen mogelijk. Het is een client-server systeem, waarbij het serverdeel ook gebruikt kan worden van een hoster die het als online dienst aanbiedt, zoals github, gitlab, sourceforge…

ClientSecureConceptTerminologieCommando’sVragenLinks – ..gebruik..
Images: “Pro Git book” by Scott Chacon en Ben Straub, Creative Commons SA licentie


Client
git is het commando op de commandolijn, dat je kan zoeken in je software repository voor installatie (in bv OpenSUSE zoek je in Yast naar “git”, dat zal de nodige software-onderdelen afhalen, een 15-tal; * zie dependencies hier ).
De server (deamon) moet je apart installeren, maar die heb je niet nodig als je een externe dienst gebruikt.

Secure
Voor de communicatie van git heb je een publiek/private sleutel nodig; als je die nog niet hebt, in de terminal:
ssh-keygen -t rsa -C "mijnemail@mijndomein.tld" -b 4096
Resultaat in ~/.ssh/id_rsa.pub
Als je een online dienst gebruikt als gitlab, krijg/maak je een combinatie e-mail (of username) en wachtwoord. Daarmee moet je in de online instellingen je public key invoeren.
Per e-mail krijg je een bevestiging (en ook zichtbaar in de online dienst).

Concept

  • git bewaart een soort “snapshot” van een projectdirectory, waarin het een file bewaart als die veranderd is, anders een ‘link’ naar de bestaande file (in vorige snapshot)
  • git werkt zo veel mogelijk lokaal. Je hebt zelf, lokaal, een “werkdirectory”, een “staging area” en een “repository” (git directory)
  • je haalt het/een project naar je werkdirectory met clone (of “checkout”)
  • lokaal is een gewijzigde file “changed”, “staged” of “comitted”
  • het gebruikt je username en e-mail adres naast de ssh keys
  • om te vermijden dat allerlei lokale tijdelijke bestanden (van bv tekstverwerker) in je repository terechtkomen, kan je een “.gitignore” bestand gebruiken (vb).

Terminologie:

“Untracked” files: bv maak test.txt = nieuw bestand vastgesteld. (niet “in” git)
“Tracked”: bestand wordt opgevolgd door git (“index”). Na bv git add test.txt – staat dan als “new file” in status.
“Unmodified” files: bestanden die in opvolging staan (1e added) maar niet veranderd zijn sindsdien (lokaal, door jezelf).
“Modified”: bestanden in opvolging (tracked) en waar je aan gewerkt hebt. Ze zijn nog niet “staged”, dat doe je met “git add”.
“Staged” : changes to be committed; bestand in opvolging dat veranderd is én klaar staat om met een commit opgenomen te worden in de repository.
“Staging” area: waar Git de wijzigingen volgt. Op te volgen bestanden moeten in de staging area terechtkomen met git add. Deze wordt later gesynchroniseerd naar je lokale repository, die later naar de online kan geduwd worden.
“Comitted”: bestanden die staged zijn finaal in je lokale repo* opnemen met commit en voorzien zijn van commit messages, een korte/lange beschrijvende tekst die later ook zichtbaar wordt voor deze commit.
*(er is nog niet gesynchroniseerd met de online repo)
Master: standaard aangemaakte ontwikkelingstak, stam van de ontwikkelingsboom. Meestal dus de branch waarvan andere afgeleid worden.
Branch: (zij)tak, afgesplitst van tak of master (deelontwikkelingen doen, onderscheid maken tussen development en release, ..). Voor git een (verzetbare) pointer (met label) naar een commit.
Head : een soort pointer die aangeeft welke snapshot van de branch lokaal aktief is (“checked out”).
Tag : referentie om bepaald punt in ontwikkeling te markeren
Node: iedere commit maakt een nieuwe node of knooppunt in de ontwikkelingsboom.
.
(https://git-scm.com/book/en/v2/Git-Basics-Recording-Changes-to-the-Repository)

(ingekort 29/9; Zie ook git commando’s, vb, problemen)

(meer…)

4/1/2013

Digitale recorder: ICD-P620: 1LPoS

Filed under: — cybrarian @ 6:40 pm

Een vraag van een gebruiker: ik wil mijn digitale voice-recorder ICD-P620 aansluiten op een Linux computer om de bestanden ervan over te zetten en eventueel te bewerken als dat kan.

Helaas, deze recorder mag dan nog zo goed werken, om aan te sluiten op Linux is dit 1 Little Piece of Shit. Alleen een “32-bit Windows” programma is bijgeleverd op CD, en met geen enkel ander systeem kan je er iets mee doen. Geen Linux-drivers te vinden, zelfs geen Mac software beschikbaar!

Je kan het toestel wel aansluiten met een mini-usb naar usb-aansluiting, en op het scherm van de recorder krijg je “PC LINK”, maar dat geeft geen mount-reaktie op de computer.

lsusb geeft in de laatste lijn de hardware weer:

cybrarian@akoya:~$ lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 006 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 007 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub

Bus 002 Device 002: ID 054c:0271 Sony Corp. IC Recorder (P)

Maar daar stopt het.
(iemand die het wel aan de praat krijgt: laat het weten!)

18/8/2006

Gimp voor bij de digitale camera

Filed under: — wigosix @ 5:32 pm

gimp_installedEen student die voor een opleiding videoreportage een Mac bijeengespaard had, krijgt een jaar later een digitale camera. Geld voor een programma als Photoshop is er niet.*

Niet alleen als je je geld anders wil besteden, maar ook als er geen winkel in de buurt / of niet open is op dit moment, kan je “Gimp” proberen. Het is een programma dat foto’s en andere “pixel”beelden kan bewerken, of waarin je ook gewoon vanaf nul kan beginnen tekenen.
In een vroeger artikel op deze site las je al dat Gimp op Mac een basisprogramma nodig heeft, “XFree86”. Dankzij die onderlaag is het mogelijk programma’s te draaien die voor andere unix-achtige systemen als Linux gemaakt zijn, waar Gimp erg populair is. Ik ga er dus van uit dat je diezelfde voorbereiding achter de rug hebt.

De site waar ik Gimp voor Mac vond zit op de bekende “sourceforge”:
http://gimp-app.sourceforge.net/
Op een paar minuten zou je de 86 Mb met een breedbandverbinding moeten afgehaald hebben.

Na de download heb ik een bestand Gimp-2.2.11.dmg van 82,6 Mb in mijn browser download map.
Als ik erop klik worden 4 bestanden beschikbaar:

Gimp.app
LICENSE.txt
Turn On X11 Focus Follows Mouse.app
README.txt

Ik trek de “gimp.app” naar de “applications” in de “finder” (Engelstalig systeem hier), maar starten doet hij nog niet. Ik heb me vergist en op dit systeem staat nog geen unix-“XFree” omgeving. Ofwel kan ik hem downloaden, ofwel van de mac systeem CD’s halen, wat ik nu verkies. Ik gok op CD 2 omdat ik denk dat het minder vanzelfsprekend is om te installeren. Fout dus; we zijn in mac-land en daar moet je beginnen met CD1. Op een paar minuten is het geïnstalleerd (ik volgde de vroeger vermelde instructies van deze site).

Nu op de “Gimp” klikken in de applicaties … en daar opent het “X” systeem. Ik moet daarna terug op Gimp klikken, de volgorde is blijkbaar eerst X opstarten, daarna het programma dat er in draait.

Gimp heeft een verwelkomingsscherm waarbij het de eerste instellingen doet: de installatie maakt een aantal mappen die nodig zijn, je kan een buffer en een swap folder kiezen (ik neem de voorgestelde). Gimp start met een tip en een vester met de werktuigen, een ander met de lagen/kanalen/paden. De installatie is klaar, het programma werkt. Op internet is meer info te vinden over het gebruik, en er bestaan ook boeken over. Maar ook als je dingen uitprobeert kan je waarschijnlijk al ver genoeg geraken voor de basisbewerkingen.

De officiele pagina voor gimp op mac is http://www.gimp.org/macintosh/.
Het Documentatie centrum is Engelstalig,
evenals deze Gebruikers site.
MacGimp.org is een goede nieuws-en informatie site voor Gimp op Mac.
Bij het ontbreken van de X omgeving (XFree86) vind je download en/of info op deze site, die ook vertelt dat het vanaf OS-X versie 4.x bijgeleverd is op de CD’s met het systeem.

* Een blik op een willekeurige website:
Adobe Photoshop CS 2 in het NL kost meer dan 1000 euro; de Engelstalige versie vind je een paar honder euro goedkoper. Een “Academic” versie kost – waarschijnlijk na het voldoen aan formaliteiten – toch nog altijd bijna 350 euro. En het programma Adobe Photoshop Elements, dat aangeraden wordt voor eenvoudigere fotobewerking, kost in de UK versie zo’n 90 euro.
.

9/11/2021

eID cardreader op Linux: OpenSUSE + Firefox

Filed under: — cybrarian @ 4:08 pm

De Belgische eID kaart gebruiken op OpenSUSE 15.2

(Zie ook een Ubuntu installatie in 2019 onder de titel e-ID: Belgische identiteitskaart lezen – moet eigenlijk “eID” zijn).

Van de overheidssite: (*4.3)

De eID is een elektronisch identiteitsbewijs (met chip) waarmee u elektronische verrichtingen kan uitvoeren.

Op dit moment bestaan er drie types identiteitsbewijzen waarmee bovenstaande elektronische verrichtingen kunnen worden uitgevoerd:
– de elektronische identiteitskaart voor Belgen ouder dan 12 jaar
– de Kids-ID, voor Belgen jonger dan 12 jaar
– de elektronische Vreemdelingenkaart

1. Hardware

Dit voorbeeld is gemaakt met:

* SiteCom ID Card Reader MD-064 V1 001

– lezer, aparte micro-usb kabel (bijgeleverde is nogal kort)
– handleiding: geen
– software: geen
Compatibel:
– USB 2.0 / backwards compatibel USB 1.1
– “windows/apple” en “all operating systems”

* Camino (Tridis BVBA) Developed by Logon, www.log-on.be

– lezer met vaste kabel, usb.
– handleiding: geen
– mini-cd: “WIN” software (setup.exe, dll’s, driver bin32/64,..) en “Realtek Mac OS X Installer” (.pkg)
Compatibel:
– USB 2.0, cards 5V 3V 1.8V
– Win 7, 8 & 10, Mac 10.5.0 en hoger

2. Installatie

Procedure
1. Downloaden middleware
2. Installeren
3. Test Cardreader met eid-viewer
4. Browser plugin installeren
5. Test aanmelden

Kijk naar:
– Besturingssysteem/distributie
– Software voor beID
– Drivers
– Browser (Firefox/..)

Uit officiële documentatie:

Belgium eID PKCS#11 module (* 4.1)

“OPGELET: Er is een nieuwe versie van de eID Middleware en Viewer beschikbaar. Om uw elektronische identiteitskaart probleemloos te kunnen blijven gebruiken voor online toepassingen, is het belangrijk om deze nieuwe versies te installeren.”

Firefox Add-On:

“Om ervoor te zorgen dat Firefox automatisch de eID “PKCS#11” bibliotheek vindt, is een Firefox add-on ontwikkeld, de ‘Belgium eID add-on’. U kan die installeren via de Mozilla-store.”


3: Aan de slag (Log)

Dit is een letterlijk verslag van het verloop van de installatie, van download tot de test. Dit kan dienen als leidraad maar zal niet altijd helemaal hetzelfde verlopen bv door nieuwere versies van software enz.

I. Via YAST?

In Yast software management zoeken naar “e-id Belgium”: niet aanwezig.
(later zie ik dat het eID is ipv e-id, maar zonder extra repositories toe te voegen vind je ook “eID” niet in Yast)

II. Download van de overheidssite

Op de documentatie op eid.belgium.be (*4.4) zijn installatiepaketten aanwezig voor Debian, Ubuntu, Mint, Fedora, Red Hat/Centos, openSUSE (15.2 en 15.3), alsook de broncode in de vorm van een .tar.gz. Voor niet vermelde distributies verwijzen ze in een FAQ naar een externe site, repology, met Arch, Solus, Manjaro, openSUSE Tumbleweed, Gentoo, BSD, enz.

Ze publiceren hier ook de digitale handtekening om te checken:

Alle pakketten en repositories zijn digitaal ondertekend door de OpenPGP-sleutel met de volgende vingerafdruk:

B37D 9040 098C 3DEE E00F 6D08 A357 43EA 6773 D225

Wij raden aan om geen pakketten te installeren die niet met deze sleutel ondertekend zijn. Indien u het correcte “eID-archive” pakket voor uw distributie gebruikt, wordt de correcte sleutel automatisch geconfigureerd en hoeft u zich dus geen zorgen te maken.”
openSUSE Leap 15.2
openSUSE Leap 15.3

Link volgen : “Download eid-archive-suse.rpm”

Bestand opslaan. 11,3 KiB (11.572)

Downloads, klik op eid-archive-suse-2016-2.noarch.rpm

Opent het programma “Ontdekken” met knop “installeren”.

Wachtwoord root gevraagd. Daarna niets meer. Zag wel in “Ontdekken” dat er updates klaarstonden..
(Heeft dit nu enkel de repo toegevoegd? Toch manueel gaan uitpakken? Of ineens naar III…)

III. Of via software.opensuse.org
Je kan naar beschikbare software voor openSUSE zoeken op software.opensuse.org *(4.5)

Software: middleware

Package zoek in software.opensuse.org op “All distributions”
“eid-mw” (e-id middleware)

eid-mw
Belgium electronic identity card PKCS#11 module and Firefox plugin

eid-mw-libs
Belgium electronic identity card PKCS#11 module – libraries

eid-mw-firefox
Firefox Extension for Belgium eID Middleware

eid-mw-libs-32bit
Belgium electronic identity card PKCS#11 module – libraries

eid-mw-libs-x86
Belgium electronic identity card PKCS#11 module – libraries

eid-mw-libs-64bit
Belgium electronic identity card PKCS#11 module – libraries

pteid-mw
Portuguese eID middleware

eid-mw-bin
Belgium electronic identity card PKCS#11 module – helper binaries

Voor openSUSE Tumbleweed is er een officiële uitgave
Officieel
5.0.8

Voor openSUSE Leap 15.2 (eid-mw, hopelijk komt rest mee indien nodig)

– security

Experimenteel
5.0.28

– home:jevez

Gemeenschap
5.0.3

Recentste beste? home:jevez Gemeenschap Eén klik installeren.. (opent Yast)

eid-mw

“Belgium electronic identity card PKCS#11 module and Firefox plugin”

“The eID Middleware provides the libraries, a PKCS#11 module and a Firefox
plugin to use Belgian eID (electronic identity) card in order to access
websites and/or sign documents.”

Repositories to be added:
https://download.opensuse.org/repositories/home:/jevez/openSUSE_Leap_15.2/ (home:jevez)

ID: 5D38E2BA6002AAFE
Name: home:jevez OBS Project
Fingerprint: CB70 CD86 BF12 6B0B DD7E CDFE 5D38 E2BA 6002 AAFE
Created: 08-05-20
Expires: 17-07-22

Software installation…

Installation was successful

Nadien in Yast zijn volgende “eID” paketten zichtbaar (allemaal in versie 5.0.3-lp152.3.2):
– eid-mw
– eid-mw-bin
– eid-mw-libs

Nog selecteerbaar zijn
– eid-mw-devel
– eid-viewer

Die laatste is ook nodig; kies eid-viewer, installeer. Ok.

Op de commandolijn: eid-vieuwer
Er gaat een leeg venster open voor eid-vieuwer, met de titels van de velden van de identiteitskaart.

Op de commandolijn staat:

No cardreader found.

Inpluggen usb-kabel Camino cardreader:

** Message: 15:19:28.981: readers changed

Insteken van de kaart in de lezer:

In het venster komen de gegevens van de identiteitskaart, met foto en data.

Nu zijn we zeker dat de hardware werkt.

Kaartlezer uittrekken, en andere insteken:

Segmentatiefout (geheugendump gemaakt)

Op andere usb-poort aangesloten en eid-viewer terug gestart:

** Message: 15:24:56.260: readers changed

Kaart ingestoken: werkt ook.

Software: Firefox plugin:

https://addons.mozilla.org/nl/firefox/addon/belgium-eid/versions/

Versiegeschiedenis van eID België – 8 versies

Wees voorzichtig met oude versies! Deze versies worden voor test- en referentiedoeleinden weergegeven.U dient altijd de meest recente versie van een add-on te gebruiken.
Nieuwste versie
Versie 1.0.32
Uitgegeven op 3 mrt. 2021 – 11,47 KB
Werkt met firefox 57.0 en later

Broncode vrijgegeven onder GNU Lesser General Public License, versie 3.0

Daaronder staat ook nog:

Oudere versies
Versie 1.0.31
Uitgegeven op 14 dec. 2020 – 11,56 KB
Werkt met firefox 57.0 en later

Kies de meest recente indien mogelijk: “Toevoegen aan Firefox”, bevestigen.

Testen:

https://iamapps.belgium.be/tma/?lang=nl

Sitecom, kaart ingestoken: ok, toont gegevens. Vraag pin-code.

“Aanmelden is niet gelukt.”

Vreemd. Ook niet na herstarten Firefox.

Daarna met Camino wel “Aanmelden geslaagd”!

Browser gesloten, Sitecom op andere usb poort, eid-viewer gestart; kaar er in (toont op scherm), en Firefox gestart: ook ok.

Opgepast, u blijft aangemeld tot u op “afmelden” klikt of de browser afgesloten hebt!


4: Bronnen

4.1 https://eid.belgium.be/nl/hoe-installeer-ik-de-eid-software

4.2 https://iamapps.belgium.be/tma/?lang=nl

4.3 https://eid.belgium.be/nl/wat-de-eid

4.4 https://eid.belgium.be/nl/linux-eid-software-installatie

4.5 https://software.opensuse.org

4.6 https://addons.mozilla.org/nl/firefox/addon/belgium-eid/

4.7 https://certif.iamfas.belgium.be/fasui/login/eidservice

22/10/2021

Na crash/hang/reboot: logwatch, journalctl enz

Filed under: — cybrarian @ 9:29 am

Systeem
Na een onverwachte shutdown, crash of hangen van het systeem: hoe onderzoeken wat er gebeurd is, en opvolgen? Mijn eerste reflex was kijken in /var/log/messages… (of met een tool als logwatch)

Waar is /var/log/messages?

Door de invoering van systemd (ter vervanging van de init scripts met log bestanden in /var/log/messages), is er nu een digitaal log in /var/log/journal.
Je hebt een tool nodig om die te bekijken, kan niet meer met cat/head/tail.

journalctl
journalctl verzamelt de gegevens en toont ze op het scherm in een tekst waarin je kan “scrollen”. Verlaten met “q”.

Enkele voorbeelden:
journalctl: alles, veel te veel meestal.
journalctl -b: sinds de laatste opstart (boot)
journalctl -b -1: één boot terug
journalctl --since "2021-01-01 17:00:00" na vijf uur die dag
journalctl --since "2015-01-10" --until "2015-01-11 03:00"
journalctl --since yesterday

Voorbeeld

journalctl --since "2021-10-21 00:00:00"

Oct 21 17:00:32 belfast systemd[1]: Started Timeline of Snapper Snapshots.
Oct 21 17:00:33 belfast dbus-daemon[907]: [system] Activating service name=’org.opensuse.Snapper’ requested by ‘:1.206’ (uid=0 pid=18668 comm=”/usr/lib/snapper/sy>
Oct 21 17:00:33 belfast dbus-daemon[907]: [system] Successfully activated service ‘org.opensuse.Snapper’
Oct 21 17:02:36 belfast smartd[1036]: Device: /dev/sda [SAT], SMART Usage Attribute: 190 Airflow_Temperature_Cel changed from 54 to 56
Oct 21 17:02:36 belfast smartd[1036]: Device: /dev/sda [SAT], SMART Usage Attribute: 194 Temperature_Celsius changed from 104 to 106
Oct 21 17:32:36 belfast smartd[1036]: Device: /dev/sda [SAT], SMART Usage Attribute: 190 Airflow_Temperature_Cel changed from 56 to 54
Oct 21 17:32:36 belfast smartd[1036]: Device: /dev/sda [SAT], SMART Usage Attribute: 194 Temperature_Celsius changed from 106 to 104
— Reboot —
Oct 22 09:31:23 belfast kernel: microcode: microcode updated early to revision 0xa0b, date = 2010-09-28
Oct 22 09:31:23 belfast kernel: Linux version 5.3.18-lp152.95-default (geeko@buildhost) (gcc version 7.5.0 (SUSE Linux)) #1 SMP Tue Oct 5 07:30:50 UTC 2021 (7cfc6>
Oct 22 09:31:23 belfast kernel: Command line: BOOT_IMAGE=/boot/vmlinuz-5.3.18-lp152.95-default root=UUID=bdd235f5-cd02-4688-837a-2b60a368097d resume=/dev/sda1 spl>

Configuratie
cat /etc/systemd/journald.conf

Voorheen: logwatch

cnf logwatch

The program ‘logwatch’ can be found in the following package:
* logwatch [ path: /usr/sbin/logwatch, repository: zypp (download.opensuse.org-oss) ]

Try installing with:
zypper install logwatch

zypper install logwatch

Loading repository data…
Reading installed packages…
Resolving package dependencies…

The following 2 NEW packages are going to be installed:
logwatch perl-Date-Manip

2 new packages to install.
Overall download size: 1.4 MiB. Already cached: 0 B. After the operation,
additional 12.5 MiB will be used.

Harddisk

smartctl -a /dev/sdX

Geheugen

Het geheugen kan je testen met “memtest”.

Zie linuxuser.copyleft.be/liglog/?p=9247 : “Geheugen

3/10/2021

KMail start niet

Filed under: — cybrarian @ 1:29 pm

KMail start niet meer als ik op het icoon klik
KMail vanop desktop of uit menu starten gaat niet (sluit onmiddellijk terug af).
kmail: symbol lookup error: /usr/lib64/libQt5WebEngineCore.so.5: undefined symbol: hb_subset_input_set_drop_hints

Eerst kan je proberen KMail uit het menu te starten; voor de klassieke menu-indeling: Menu, Internet, KMail (Mail Client).
– Even terugkijkend naar vorige KMail problemen: je kan ook starten van de commandolijn; open een terminal en tik “kmail”. Het e-mail programma opent dan vanuit deze terminal (dus je moet die terminal open laten staan, anders is kmail mee afgesloten).
In dit geval krijg ik de volgende foutmelding:
gebruiker@localhost:~> kmail
kmail: symbol lookup error: /usr/lib64/libQt5WebEngineCore.so.5: undefined symbol: hb_subset_input_set_drop_hints

Mogelijk ontstaan door onvolledig uitgevoerde update?

Pakket
In Yast ga ik het pakket zoeken en ik “update” het.
(Yast, zoek, tik hele pakketnaam of deel; vink “bestandenlijst” aan)
Bij zoek op “libQt5WebEngineCore” krijg ik zo 1 resultaat.
De vermelde link is een van de bestanden van dit pakket:

libQt5WebKit5 - Qt5 WebKit Library

Ik probeer het te updaten.
Dat blijkt niet te helpen.

Herinstalleren?
Ik ga het de-installeren en opnieuw installeren. Daarbij krijg je de vraag van een heel aantal andere paketten die er afhankelijk zijn of je die ook wil de-installeren. Nee, behouden met afgebroken functionaliteit.
Dan terug installeren.

libQt5WebKit5 - Qt5 WebKit Library

Bijgewerkte pakketten: 1
libqt5-qtwebengine

installatielogboek:

libqt5-qtwebengine wordt gedownload (downloadgrootte 45,63 MiB)
libqt5-qtwebengine-5.15.3-lp152.3.3.4.x86_64.rpm wordt geïnstalleerd (geïnstalleerde grootte 149,91 MiB

Ook dat helpt niet.


Andere/Oudere versie?

Ik kies van WebKit een oudere versie uit een andere repo:
(helaas niet genoteerd)
Daarna werkt KMail terug (maar het probleem zal dan waarschijnlijk terugkomen).

Ik update terug naar de nieuwere versie: probleem is terug, kmail werkt niet. Bovendien krijg ik die oudere versie niet meer aangeboden.

Chromium?
Omdat het te maken heeft met web, misschien met het renderen van webpagina’s of opmaak in mail volgens html, probeer ik eens een andere “engine”. Misschien dat bepaalde onderdelen zo mee geüpdate worden; of een andere versie krijgen enz.
Chromium geïnstalleerd. Lost het probleem van undefined symbol: hb_subset_input_set_drop_hints niet op.

Okonadi?
– Ook uit vorige problemen probeer ik of het aan akonadi ligt (de server die in de achtergrond draait voor de plaatselijke mail).
Open een terminal en vraag de status op, sluit akonadi af, wacht even, en start akonadi terug op.

akonadictl status
akonadictl stop
sleep 5
akonadictl start

Tussendoor maar vooral op het einde kan je kijken of het effect heeft op kmail; bij mij startte kmail nadien terug vanaf het icoon op de desktop.

Soms lijkt het iets te maken te hebben met updates; uitloggen en terug inloggen kan je ook proberen om alles terug netjes te laten starten op je desktop, zeker na een update. Sommige updates geven trouwens expiciet aan dat je je systeem moet herstarten.

Oplossing: harfbuzz

Opgelost maar niet begrepen
Ik ga op zoek naar het andere deel van de foutmelding: undefined symbol: hb_subset_input_set_drop_hints.

Ik vind ergens een discussie van programmeurs over lettertypes.
https://github.com/harfbuzz/harfbuzzjs/issues/9

Ik ga op zoek in Yast naar paketten die daarmee te maken hebben bv “harfbuzz”, ik ik vind een eigenaardigheid: een pakket dat een andere, nieuwere versie heeft dan de paketten waar het bij hoort. Ik upgrade het naar de normale versie (downgrade dus eigenlijk) .. en KMail start terug!

Andere vermeldingen:
https://lists.opensuse.org/archives/list/factory@lists.opensuse.org/thread/ZBYJWONSO7UHD7WW2I2C6ODPKLTCDOIC/

27/4/2021

Uur verdwijnt in KDE takenbalk

Filed under: — cybrarian @ 1:24 pm

Klok
Op mijn KDE plasma desktop heb ik de tijdsaanduiding onderaan rechts geconfigureerd om ook de datum weer te geven.
(op de klok onderaan rechts op primair scherm -linkse scherm van 2):

Rechtklik op de tijd, “Digitale klok configureren”, Appearance/Uiterlijk: Datum tonen (geen seconden, geen tijdzone). Tijdweergave: standaard van regio, Datumopmaak: afgekorte datum.

Ik merk echter dat de tijd, die dan boven de datum staat, op een bepaald moment “weg” is, niet meer zichtbaar, terwijl de ruimte nog wel vrij is, als grijs vlak. Na in/uitloggen komt de tijd soms terug, maar ik heb het vermoeden dat het iets te maken heeft met de hoogte van de takenbalk/de ruimte die de letters nodig hebben. Op een andere KDE desktop (zelfde softwareversies, met Compositor scale method: Crisp, backend XRender) doet het probleem zich niet voor.

Lettertype
Ik ga in dezelfde instellingen, en kies onderaan Tekenstjil: en zet die van standaard naar een ander lettertype, bevestigd.
(als je nadien terug hier komt staat de dropdown box altijd op standaard, al is dat niet de huidige instelling).

De tijd is nu terug normaal zichtbaar!

Gebruikte configuratie: OpenSUSE 15.2 KDE, 2 monitors, compositor: OpenGL 2.0, schalingsmethode: accuraat, Display globale schaal: 1000%).

13/4/2021

EDITOR environment variabele in .profile

Filed under: — cybrarian @ 8:38 pm

Omgeving: openSUSE Tumbleweed KDE desktop (KDE Frameworks 5.80.0) met gambas3, git, …

Ik krijg in Gambas de melding:

Please set the $EDITOR environment variable with your favorite graphical text editor. Some version control commands need it.

Dat kan je doen in het .profile bestand in je home directory.
Je ziet er al een paar lijnen klaar staan met een voorbeeld, je moet ze enkel aktiveren:

# Some applications read the EDITOR variable to determine your favourite text
# editor. So uncomment the line below and enter the editor of your choice 🙂
#export EDITOR=/usr/bin/vim
#export EDITOR=/usr/bin/mcedit

Ik wil mcedit gebruiken en installeer dat nog snel (als su root) met zypper install mc.
(of met Yast, software management; “mc” staat voor Midnight Commander, en installeert ook mcedit, een commandline editor).

Daarna haal ik het commentaar teken weg zodat export EDITOR=/usr/bin/mcedit aktief wordt bij volgende login.

#export EDITOR=/usr/bin/vim
export EDITOR=/usr/bin/mcedit

Controleer de huidige environment variabelen met:
printenv

Misschien de bekendste is

SHELL=/bin/bash

4/2/2021

Led-badge of mini-lichtkrant: alleen voor windows?

Filed under: — cybrarian @ 2:28 pm

LED-badge
Mono-kleur scherm (blauw, rood, oranje, wit,..). Draagbaar als badge met speld, of bruikbaar als mini-lichtkrant met magneet. Er zijn een paar verschillende uitvoeringen met dezelfde kenmerken binnenin, bv conrad (witte doosjes met sticker/barcode en kleuraanduiding), ALLNET met standaard aziatische foto op doosje (Badge is verschillend: heeft aan-uit schuifschakelaar wat handig kan zijn), …

  • Type: M1-8; 44×11 pixels
  • aansluiting: micro-usb. Handigste zou een usb kabel of tussenzetkabel zijn met schakelaar; je moet immers telkens de verbinding verbreken om de tekst te bekijken. Maar de meeste kabels met schakelaar hebben alleen de laadfunctie-draden verbonden, dus daar ben je hier niets mee.
  • software: git clone https://github.com/jnweiger/led-badge-44x11 en de python3-usb lib
  • python programma: sudo python3 ./led-badge-11x44.py -s 3 "Mijn Tekst"

USB
linuxblue:~ # lsusb

Bus 002 Device 005: ID 0416:5020 Winbond Electronics Corp.

dmesg
Uitgetrokken usb kabel:
[ 6326.524334] usb 2-1.3: USB disconnect, device number 6
Verbonden usb kabel:
usb 2-1.3: new full-speed USB device number 7 using ehci-pci
[ 6334.052734] usb 2-1.3: New USB device found, idVendor=0416, idProduct=5020, bcdDevice= 0.00
[ 6334.052738] usb 2-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[ 6334.052740] usb 2-1.3: Product: LS32 Custm HID
[ 6334.052742] usb 2-1.3: Manufacturer: LSicroelectronics
[ 6334.054294] input: LSicroelectronics LS32 Custm HID as /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.3/2-1.3:1.0/0003:0416:5020.0005/input/input29
[ 6334.054468] hid-generic 0003:0416:5020.0005: input,hidraw0: USB HID v1.10 Device [LSicroelectronics LS32 Custm HID] on usb-0000:00:1d.0-1.3/input0

In KInfoCenter:
Device information, USB devices, EHCI Host controller (2); Unknown:

LS32 Custm HID
Manufacturer: LSicroelectronics
Class: 0 ((Defined at Interface level))
Subclass: 0
Protocol: 0
USB Version: 1.01
Vendor ID: 0x416 (Winbond Electronics Corp.)
Product ID: 0x5020
Revision: 0.00
Speed: 12 Mbit/s
Channels: 0
Max. Packet Size: 64

Software
Er is enkel een witte mini cd (zonder label) bijgevoegd, met 80 Gb Windows software:

webgang@OptiPlex380:/media/webgang/2019-06-05-17-13-00-0$ tree
.
├── [ 2048] Help
│   ├── [ 469504] Instruction(Chinese).doc
│   ├── [ 963584] Instruction(English).doc
│   ├── [ 1015296] Instruction(Spanish).doc
│   ├── [ 188] Read Me.txt
│   └── [ 647575] User Manual-Korean.docx
├── [ 24576] Install.exe
├── [ 2048] LED Display Profession Program
│   ├── [ 10029568] BMPBadgeSetup.msi
│   ├── [ 2048] DotNetFX40
│   │   └── [ 50449456] dotNetFx40_Full_x86_x64.exe
│   ├── [ 427520] setup.exe
│   └── [ 2048] WindowsInstaller3_1
│   └── [ 2585872] WindowsInstaller-KB893803-v2-x86.exe
├── [ 2048] LED Display Program
│   └── [ 12186818] LED Badge.exe
├── [ 228] Read Me.txt
├── [ 174889] User Manual-English.docx
└── [ 952933] User Manual-Korean.pdf
5 directories, 14 files

Linux alternatieven
(meer…)

12/1/2021

Programmeerbare led-boom; voorbeeld-led-loopjes

Filed under: — cybrarian @ 10:29 pm

Zie vorig artikel Nano-programmeerbare kerstboom

Als de hardware geïnstalleerd is, kan je spelen met de broncode in de Arduino IDE, gemakkelijkst is om te beginnen van een voorbeeldprogramma waar een element in zit dat je wil verkennen.

Behalve voor het beschreven bord-met-leds geldt veel van de software voor heel wat reeksen van led’s, met als ledstrip-lengte een aan te passen getal (bv #define LEDCOUNT 12)
Om het effect van de drie kleuren te verstaan: zoek op internet naar de afbeelding van een “color wheel for light”.

Om vat te krijgen op de juiste led, maken we eerst een programma dat de leds afloopt in volgorde van de nummering van het bord (begint bij nul).

We laten de rode led op de Nano mee- (of eerder tegen-) knipperen als controle.

Inhoud:

  • Eén led loopt rond tussen donkere leds
  • Eén led loopt rond in een gekleurde kerstboom
  • Een ribbe van de kerstboom heeft verschillende kleuren, draait weg naar de spits toe.
  • Bauw zwaailicht

Gemeenschappelijk is altijd het invoegen van de Adafruit NeoPixel bibliotheek:
(nota: de < en > tekens hebben een spatie gekregen die er uit moet)

#include < Adafruit_NeoPixel.h >
#define PIN 9
#define LEDCOUNT 12

En bijna altijd heb je een index of teller nodig:
int i=0;
… (* soms komt hier dan bv een array met led-volgnummers of andere definities)
Adafruit_NeoPixel strip = Adafruit_NeoPixel(LEDCOUNT, PIN, NEO_RGB); // + NEO_KHZ800);

En dan een algemene setup code die de leds initialiseert:
void setup() {
// initialize digital pin LED_BUILTIN as an output.
pinMode(LED_BUILTIN, OUTPUT);
strip.begin();
strip.show(); // Initialize alle pixels 'off'

en daarna komt de oneindige programmalus “loop”:

void loop() {
// allerlei code, met een if of select voorwaarde of een andere herhaling
// dikwijls voorzien van een rustpauze van een aantal milliseconden:
delay(1000);
}

Eén led loopt rond tussen donkere leds

De rode led op het Nano bord pinkt om de programmaloop aan te tonen (mag er dus uit)

void loop() {
  digitalWrite(LED_BUILTIN, HIGH);   // led op Nano aan
  delay(250);                       // even houden
  digitalWrite(LED_BUILTIN, LOW);    // led op Nano uit
  delay(250);                       // even wachten voor
  // boom
// led i kleursterktes (rood, groen, blauw)
  strip.setPixelColor(i, 10, 10, 200);
  strip.show();
  delay(1000);
  strip.setPixelColor(i, 0, 0, 0);     // led i terug uit
  i++;                        // volgend led tot laatste..
  if(i > LEDCOUNT) {
    i=0;                        // terug naar eerste
  }
}

Conclusie: led 0 staat onderaan op de boom, op de ribbe diagonaal aan de overkant van de aan-uit schakelaar (voor de batterij), waar eigenlijk C/5 het dichstbij staat.

A	B	C	D
			
2	8	3	9
1	7	4	10
0	6	5	11

Eén led loopt rond in een gekleurde kerstboom
Richting: van 0 naar 11.

void loop() {
  digitalWrite(LED_BUILTIN, HIGH);   // bord led knippert tegen; aan
  delay(250);                       // houden..
  digitalWrite(LED_BUILTIN, LOW);    // uit
  delay(250);    // pauze alvorens led i te wijzigen;
  strip.setPixelColor(i, 10, 10, 200);    // led nummer i blauw
  strip.show();
  delay(1000); geniet
  strip.fill(strip.Color(0, 32, 0), 0, 12); // Kerstboom terug groen
  strip.show();
  delay(500);                       // even houden zo
  i++;  // schuif door naar nummer volgende led tot laatste
  if(i > LEDCOUNT) {
    i=0; // dan terug naar eerste
  }

Rond de boom …

Met het volgen van de leds zoals ze intern genummerd zijn, worden de ribben van de boom-piramide gevolgd, van onder naar boven en over de top terug naar onder (zie boven).

Maar wij willen ze zo laten lopen:

A	B	C	D
			
8	9	10	11
4	5	6	7
0	1	2	3

We laten niet de led-nummer optellen, maar wel de index in een rij van led-nummers.

0	6	5	11	1	7	4	10	2	8	3	9

In de definities boven de setup moeten de volgorde van het aanspreken van de pixels vooraf vastgelegd worden om gemakkelijk te kunnen rondlopen:

 int ledPins[] = {
    0, 6, 5, 11, 1, 7, 4, 10, 2, 8, 3, 9
  };

Pinkende ribben, rond-uitloop naar top

  void loop() {
  digitalWrite(LED_BUILTIN, HIGH);   // bord led knippert tegen; aan
  delay(250);                       // houden..
  digitalWrite(LED_BUILTIN, LOW);    // uit
  delay(250);    // pauze alvorens boom te wijzigen;
  strip.setPixelColor(ledPins[i], 200, 200, 0);    // pixel i aan, geel
  strip.setPixelColor(ledPins[i+4], 40, 40, 255);    // pixel op volgende laag boven blauw
  strip.setPixelColor(ledPins[i+8], 150, 20, 20);    // pixel op daaropvolgende laag rood
  strip.show(); // pixelnummers boven LEDCOUNT geen probleem, worden onzichtbaar
  delay(1000); pauze voor kleur terug uit; m.a.w. boom volledig kleuren;
  strip.fill(strip.Color(2, 50, 2), 0, 12); // Kerstboomgroen, bv 2, 50, 2 of 0, 32, 0
  strip.show();
  delay(100);                       // wachtebeke
  i++; // opschuiven tot laatste led, 
  if(i >= LEDCOUNT) {
    i=0; //  dan opnieuw
  }
}

Blauw zwaailicht

 digitalWrite(LED_BUILTIN, HIGH);   // led op bord aan (voltage hoog)
  delay(30);                       // wacht even
  digitalWrite(LED_BUILTIN, LOW);    // led op bord uit (voltage laag)
  delay(30);                       // wacht even


speel met deze delays (en die op het einde) voor de snelheid van het ronddraaien…

 strip.fill(strip.Color(4, 4, 25), 0, 12); // zwak blauw licht tussendoor
  strip.show();
  strip.setPixelColor(ledPins[i], 2, 2, 255);    // turn pixel on, ? color
  strip.setPixelColor(ledPins[i+4], 2, 2, 254);    // turn pixel on, ? color
  strip.setPixelColor(ledPins[i+8], 2, 2, 253);    // turn pixel on, ? color
  strip.show();
  delay(70);                       // wait for ..

De +4 en +8 zorgen ervoor dat de boven elkaar liggende leds samen gebruikt worden.
De waarden voor de kleuren zijn een tikje anders gezet, waardoor je boven/onder kan herkennen

  i++;
  if(i >= LEDCOUNT-8) {
    i=0;
  }


Dit laatste stuk zorgt ervoor dat het licht, eens helemaal rond, terug bij de eerste ribbe begint. Voor een politie-zwaailicht effect kan je de delay tijden korter zetten.

Veel plezier…

9/1/2021

Nano-programmeerbare kerstboom

Filed under: — cybrarian @ 12:35 am

Het ontbrekende handboek
(mijn doel is er een universeel monitoring apparaat van te maken: geluidsniveau, temperatuur, netwerkaktiviteit, …)
Een weinig gedocumenteerd object (Arexx creatie) en verkocht in verschillende vormen/versies op ondermeer Duitse webwinkels als Reichelt en Conrad (Als “MakerFactory”);

Voordeel: Je kan kiezen om hem:

  • gewoon aan te steken en alles blauw-blauw te laten (Dat is de teststoestand bij opstarten: alle leds blauw, beetje koud hard blauw licht maar leuk in industrieële omgeving en de leds geven veel licht (dat belooft voor de battrij..).
  • te voorzien van een micro:bit. De micro-bit kan je dan weer voorzien van een programma dat je afhaalt, en waarmee je de kleurtjes van de kerstboom laat varieren, rondlopen, verkleuren enz. Een micro:bit van de eerste versie volstaat. Je kan dan ook de rest van de micro:bit aansturen in je programma, voor het deel van de leds van de kerstboom moet je de Neopixel bibliotheek aanroepen voor een ledstrip van 12 leds RGB. Je kan bv tegelijk de temperatuur weergeven op de leds van de micro-bit, scrollend, en de lichtjes van de boom laten verlopen van kleur tegen een zelfgekozen tempo.
  • te voorzien van een bijgeleverde “arduino-compatibele” nano die je in een voet kan steken die je op de printplaat moet solderen. Op het ene van de twee papiertjes die mee in de doos zitten, staat dat je de batterijhouder moet verwijderen (hoe?) en dan de ic voet op het bord solderen, en de batterijhouder vastsolderen. Daarna “programmeren als WS-2812” is het enige wat de erg summiere handleiding op het tweede bladje er verder over zegt.

Er wordt in alle talen verwezen naar “lesboeken en werkbladen met oefeningen en voorbeelden”, maar wel zonder te zeggen hoe of waar; ik heb ze online niet gevonden.

Micro:bit
De micro:bit is het gemakkelijkst te gebruiken, je moet hem maar in de speciale sleuf steken, en hij is onmiddellijk bruikbaar.

* Zelf bijeen puzzelen

BBC Micro:bit
WS-2812

Online bronnen:
* Een zip-bestand met een aantal “programma’s” om te downloaden:
software-2195092-makerfactory-mf-6585276-christmas-tree-mobile-kerstboom.zip

Uitgepakt geeft dat:

└── Software
    ├── Arduino
    │   ├── VU_meter
    │   │   └── VU_meter.ino
    │   └── Zwaailamp
    │       └── Zwaailamp.ino
    └── Microbit
        ├── analog_read_led.hex
        ├── analog_read_led_log.py
        ├── analog_read_led.py
        ├── led_and_button_test_2boards.hex
        ├── led_and_button_test_2boards.py
        ├── led_and_button_test.hex
        ├── ledtest.hex
        └── README.txt

5 directories, 10 files

Namen als “VU-meter”? “Zwaailamp”? Ik had eerder iets ivm kerstboom verwacht, maar ja…
* Aankoppelen
Sluit de micro:bit aan met de USB kabel aan de computer. Het ziet eruit alsof je een usb-drive aansluit, je kan die openen en ziet bestanden staan.
De uitvoerbare programma’s uit de Micro:bit directory van de download kan je naar de usb-Micro:bit kopiëren, je ziet onderaan een gele led flikkeren terwijls ze worden opgepikt door de Micro:bit; als dat stopt verdwijnt het bestand uit die usb-micro:bit map en start het programma met de uitvoering of wacht op bv de druk op een knop.

* Micro:bit programmeren
Bij Microbit zie je bestanden met uitgang
.hex: dat is het uitvoerbare bestand.
.py : dat is de wijzigbare broncode in python
Het is de broncode in python die nadien gecompileer wordt tot het hex bestand, dat kan je lokaal of via een website, waar je als download een .hex krijgt.

Je zou verwachten dat er telkens een broncode bestand is (.py) en daarvan een gecompileerde versie (.hex).
Helaas:

analog_read_led.py
analog_read_led.hex

analog_read_led_log.py
led_and_button_test_2boards.py
led_and_button_test_2boards.hex

led_and_button_test.hex
ledtest.hex

Gelukkig is er het README.txt bestand om alles te verduidelijken:

analog_read_led.hex VU meter
led_and_button_test.hex Looplicht. Met indrukken knop veranderd smiley op display microbit en worden leds rood ipv blauw.
led_and_button_test_2boards.hex Zelfde, echter nu met 16 LEDS (tweede board aangekoppeld via J2)

Euh??

Uitproberen van de .hex (en bekijken van .py indien beschikbaar);
* analog_read:
– Er brandt: 1 kant 3 blauwe leds; overkant bovenste blauwe led; andere kant onderste led groen: knippert onregelmatig (analoog? Maar op basis van wat? Random? Pin0? Ik krijg geen verandering in het patrook van knipperen.
– In de code valt me op dat er gewerkt wordt met pixelcount van 8, terwijl we er twaalf hebben.

* led_and_button_test.hex:
– op de micro:bit staat een sip kijkende smiley “:(” en er branden 3 blauwe leds op 1 ribbe, en 1 blauwe led op de tegenoverliggende. Er loopt 1 led rond op 8 leds die niet branden. Als je op de Micro:bit knop A indrukt, verandert de kleur van de rondlopende led naar rood. Als je loslaat terug naar vorige toestand.
– we hebben hier geen broncode van, maar de beschrijving is wel een beetje te volgen, waarschijnlijk ook een verkeerd aantal leds gedefinieerd voor deze boom.

* ledtest.hex:
– doet alle leds blauw branden, net alsof je de boom zonder micro-bit zou aanzetten.
– geen broncode.

* led_and_button_test_2boards
– Micro:bit geeft sip gezicht; doet verder een enkele blauwe led rondlopen : van beneden naar boven, over de top terug naar beneden. Even pause (ongeveer 4 tellen). Op de andere ribben ook weer van beneden naar boven en over de top naar beneden; dan ineens terug naar uitgangspositie. Als je knop A indrukt op de micro:bit verandert het gezicht naar een smiley en de kleur die rondloopt naar rood, zolang je de knop ingedrukt houdt.
– broncode spreekt van pixelcount 16; dus dat verklaart de 4 tellen waar we niets zien gebeuren?


Arduino Nano:

Om de “arduino” Nano te monteren moet de batterijhouder verwijderd worden en dat ziet er op het eerste zicht gemakkelijk uit, want die is vastgezet met 2 boutjes; losdraaien en klaar? Neen. De batterijhouder zit ook met 2 pinnen vast(gesoldeerd?) op het bord, nl waarmee de stroom doorgegeven wordt. Die moet je dus voorzichtig los solderen, want nadien moet hij er terug aan. Het nano-blaadje uitleg geeft al toe dat de voet voor de nano-processor niet past op het bord van de kerstboom: je moet 1 paar tegenoverliggende voetjes ombuigen. Daarna moet je de voet vastsolderen (volgens de handleiding met de nano erin, is dat wel voorzichtig?), en daarna moet je de nano er uit halen en de batterijhouder terug vastsolderen. Alleen spijtig dat je daar zo goed als niet meer aankan, want de voet zit in de weg nu.

De handleiding zegt: “Als de Arduino Nano op de print gesoldeerd is, kun je de kerstboom niet meer met de Micro:bit gebruiken”, maar de Arduino is niet vastgesoldeerd (past ook niet rechtstreeks), enkel de voet. En daardoor kan je de Nano er wel uithalen; en – vermoed ik- terug gebruiken met de Micro:bit (misschien een overblijfsel van een vorige versie?).

* Arduino software
Installatie (hier op Ubuntu 18.10):
Arduino “IDE” kan je downloaden voor Linux, bv in versie 1.8.13:
https://downloads.arduino.cc/arduino-1.8.13-linux64.tar.xz
Uitpakken, …

~/IOT-SBC/arduino-1.8.13-linux64/arduino-1.8.13$ ls
arduino examples java reference tools-builder
arduino-builder hardware lib revisions.txt uninstall.sh
arduino-linux-setup.sh install.sh libraries tools

en het installatieprogramma draaien:

~/IOT-SBC/arduino-1.8.13-linux64/arduino-1.8.13$ sudo ./install.sh

Adding desktop shortcut, menu item and file associations for Arduino IDE…

Starten met “arduino” (op de commandolijn) of uit het menu of link op de desktop.

* Configuratie
Je moet ervoor zorgen dat je toegang hebt tot de hardware van je computer, meer bepaald de seriële poort. Dat kan bv door je gebruiker aan een bepaalde groep toe te voegen die toegang heeft tot die seriële poorten. Of de luie, verwerpelijke, onveilige manier is de arduino software te starten met root rechten: sudo arduino.
Als het onmiddellijk lukt een een voorbeeldprogramma uit het menu “Files, Examples, Basic, Blink” te laden en dat naar de Nano te sturen (met de upload pijl), de Nano-led flikkert, en er begint een LED te pinken, dan lijkt het ok.
De software is gemaakt voor een heel groot aantal Arduino borden (en compatibelen), die toch allemaal wat onderling verschillen, bv van mogelijkheden, processor, communicatiechips enz.
In de software moet je mogelijk wat instellingen doen om die aan te passen aan het apparaatje dat je zelf hebt. Ik denk niet dat het kwaad kan, en ik heb het in ieder geval gedaan, om te proberen tot je een instelling vindt die werkt.
Voorbeeld:
-Tools, Board: Arduino Nano – je moet niet aangeven dat het geen echte Arduino is..
-Tools, Processor: ATmega 328P (old bootloader) – “old bootloader” maakte bij mij het verschil
-Tools, Port: /dev/TTYusb0 – kan bv op /dev/TTYs0 staan
-Programmer: Arduino as ISP
Zo lukte het doorsturen van het programma en daarna werkte de knipperende led (op de Nano zelf).

Bibliotheekbeheerder
In menu Tools, Library Manager, bij “Adafruit” zoeken naar “NeoPixel” (hier 1.7.0), druk “install”.

Als je een terminal venster openhebt zie je daar:

Installer Thread] Connect to https://downloads.arduino.cc/libraries/github.com/adafruit/Adafruit_NeoPixel-1.7.0.zip, method=GET, request id=AA5FE6A11AC24BAA
2021-01-11T23:32:53.124Z INFO c.a.u.n.HttpConnectionManager:157 [LibraryManager Installer Thread] Request complete URL="https://downloads.arduino.cc/libraries/github.com/adafruit/Adafruit_NeoPixel-1.7.0.zip", method=GET, response code=206, request id=AA5FE6A11AC24BAA, headers={null=[HTTP/1.1 206 Partial Content], Server=[cloudflare], Content-Range=[bytes 0-68907/68908], Last-Modified=[Thu, 05 Nov 2020 20:35:25 GMT], X-Amz-Cf-Id=[B_S_zxqMpHC22E8beW3D2fzEpQ_U0-4tpC7F1ZgKRmxFLMHJiQberQ==], Set-Cookie=[__cfduid=d583a54e468bb8f35f5c2779301d625a91610407973; expires=Wed, 10-Feb-21 23:32:53 GMT; path=/; domain=.arduino.cc; HttpOnly; SameSite=Lax], Content-Length=[68908], Age=[1257687], cf-request-id=[079564a8da0000f951dfb56000000001], Content-Type=[application/zip], X-Cache=[Miss from cloudfront], CF-Ray=[61027087c9b0f951-BRU], X-Amz-Cf-Pop=[BRU50-C1], Connection=[keep-alive], x-amz-version-id=[6Yh0xZLsEcmrSOLunFynfok9_0CfS0_4], Date=[Mon, 11 Jan 2021 23:32:53 GMT], Via=[1.1 99578e20c0b3a3e3de02b1f1fe508f98.cloudfront.net (CloudFront)], x-amz-replication-status=[COMPLETED], CF-Cache-Status=[HIT], Cache-Control=[private], ETag=["4eaaaa04f12af651fe17d3f5c4fafbc6"], Vary=[Accept-Encoding], x-amz-request-id=[081CA622C45AA4DD], x-amz-id-2=[v6sY2mUeZxs4GmWgvhuYtTVHb4ll/YLu7BOz6dbfpYY6Ey8xCYshTYf1TNM6XqbigeTh2Bv+DhQ=], Expect-CT=[max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"]}

Als je daarna terug in menu Tools, Manage Libraries naar deze library gaat, zie je hem staan als “installed”.

Sketch, Include Library, selecteer Adafruit NeoPixel; er wordt bovenaan een lijn ingevoegd met:

 # include < Adafruit_NeoPixel .h  > 

Je hebt de pin nodig waaruit gestuurd wordt:
#define PIN 9

Definieer de strip:
Adafruit_NeoPixel strip = Adafruit_NeoPixel(12, PIN, NEO_RGB);

Daarna in de setup function (initialiseren op af):

strip.begin();
strip.show();

en dan in de programma loop, bv zet pixel nul (eerste in de rij) op rood:

strip.setPixelColor(0, 255, 0, 0); //turn pixel on red green blue
strip.show();

Of voor een hele reeks leds, “fill” met gebruik van de functie “Color” om de kleur te maken:

strip.fill(strip.Color(12, 64, 0), 0, 12);
strip.show();

en dan uploaden …

Als de test werkt kan het echte programmeerwerk beginnen…

Succes!

Powered by WordPress