AUR packages publiceren

Zoals ik misschien al eerder heb verteld werkt Linux met package managers en repositories. Om even te herhalen:

Een package manager is een programma dat automatisch software voor jouw installeert. In plaats van naar de website van Mozilla te gaan, de Firefox installer te downloaden en installeren vertel je je package manager gewoon Firefox te installeren. De package manager kijkt voor jouw in een soort grote lijst software genaamd de repository of Firefox beschikbaar is en waar dat dan het best kan worden gedownload (bijv. van een Amerikaanse of Britse server). Hierdoor klik je niet perongeluk op de verkeerde download knop / advertentie, beland je niet op de verkeerde website en is software installeren veel makkelijker. Zelfs Windows heeft sinds kort een package manager genaamd winget.

Per Linux distro zijn er repositories. De software daarin word gecheck op veiligheid door de maintainers van de distro. De distro die ik gebruik, Arch Linux, heeft heeft daarnaast ook nog de AUR. De AUR staat voor Arch User Repository en is een repository waar software gemaakt door de community in staat. Je kan dus als gebruiker software toevoegen aan de AUR en die kunnen anderen dan installeren.

De laatste tijd heb ik weer gewerkt aan mijn game CutieTanks. Het leek me al een tijdje leuk om iets in de AUR te installeren en dat heb ik nu dus gedaan :)

Een package in de AUR is als je eenmaal weet hoe het moet niet erg moeilijk, maar het koste me toch een hele middag om het voor elkaar te krijgen. Het komt eigenlijk op het volgende neer:

Maak een account aan bij de AUR. Je hebt daar alleen een username en emailadres voor nodig. Je kan hier een AUR account aanmaken: https://aur.archlinux.org/register

Maak dan een SSH keypair aan. Met een SSH keypair kan je met een server verbinden via SSH zonder een wachtwoord te gebruiken. Lees daar hier meer over: https://linuxiac.com/generate-ssh-key-pair. Je moet je SSH public key (die in id_rsa.pub) in je AUR account invoeren in het veld SSH Public Key. Dit kan ook al bij het aanmaken van je account.

Je kan dan via SSH een git repo clonen en daar je PKGBUILD in toevoegen. Dat kan je met het volgende command doen: (vervang package_name natuurlijk met de naam van je package)

git clone ssh://aur@aur.archlinux.org/package_name.git

Je PKGBUILD is een bestand waarin precies staat hoe de software geinstalleerd moet worden. DistroTube heeft een hele goede video gemaakt in samenwerking met BigPod over hoe je zo'n PKGBUILD maakt. Zie die hieronder:



Je moet daarna een .SRCINFO bestand maken. Hier staat allemaal informatie over jouw package in. Je kan deze heel makkelijk genereren met het volgende command:

makepkg --printsrcinfo > .SRCINFO

Lees nu eerst de guidelines en kijk of je package daar aan voldoet. Je kan de guidelines voor de AUR hier vinden: https://wiki.archlinux.org/title/AUR_submission_guidelines Als je al de nodige bestanden hebt toegevoegd en de guidelines hebt gelezen kan je je package publiceren met de volgende commands:

git add .
git commit -m "initial commit"
git push

Als het goed is zou je package nu gepubliceerd moeten worden. Anderen kunnen nu je package installeren met een AUR helper zoals yay of paru. Je kan bijvoorbeeld mijn game installeren met het volgende command:

yay -S cutie-tanks

Doei,

-Robin


Fallen World RPG v2.1 - GROTE Map Updates!

Yo. In de vorige zomervakantie ben ik begonnen met Fallen World. Het plan was, en is, om een volledige Minecraft RPG te maken met alleen commands, datapacks en rescourcepacks.

Een tijd geleden heb ik het eerste devlog op YouTube gepost. Sindsdien heb ik er hard aan gewerkt en is hier v2.1! In deze update zijn grote verbeteringen aan de map (mede dankzij mijn zusje Lize) en veel code is gerefactored. Dat houd in dat het de goede kant op gaat.

Hieronder kan je het tweede devlog kijken. Ik hoop dat jullie het leuk vinden!


- Robin


Waar ben ik momenteel in mijn plannen voor dit jaar?

In deze blogpost praatte ik over mijn doelen voor dit jaar. We zitten nu op de helft van dit jaar, en het leek me een goed moment om te kijken waar ik momenteel sta.

Ik noemde in die blogpost zes dingen die ik graag wilde leren en vijf mogelijke projecten.Van de zes dingen waarin ik me wilde verdiepen heb ik er tot nu toe drie geleerd:

  • Linux, Python en Bash. Ik heb geleerd hoe ik commandline apps maak voor Linux met bijvoorbeeld whiptail. Al vind ik Bash nog steeds echt een rotsyntax hebben. Verder heb ik me ook verdiept in Python en het maken van games voor de BBC micro:bit.
  • Socket.io en websockets. Ik heb me verder verdiept in socket.io, maar uiteindelijk niet verder gegaan met NinjaDO. Ik had niet genoeg motivatie en het project leek me niet leuk meer.
  • localStorage. Ik heb geleerd hoe ik localStorage gebruikt om instellingen die een gebruiker maakt op te slaan. Ook heb ik met de webStorage API een vervanger voor CodeEditKit gemaakt genaamd VSKodium.

Ik heb verder besloten om toch niet verder te gaan met Electron, maar te leren GTK apps te maken. GTK leek me een betere optie omdat het echte desktop apps zijn, en daardoor veel minder RAM opslokken. Electron is under-the-hood gewoon Chromium, en Chromium heeft veel RAM nodig.

Van de mogelijke projecten heb ik er twee daadwerkelijk gemaakt. Ik heb verder gewerkt aan termitools (voornamelijk tijdens de online lessen 😜) en ik heb een chatapp gemaakt als replacement voor Nindo (zie deze blogpost). Het enige probleem is dat ik geen socket.io kan draaien in de backend van mijn website, en ik geen geld heb voor een VPS. Dat betekent dat er nog steeds geen replacement (echt) voor Nindo is, maar het maakt me niet heel veel uit.

De rest van de projecten leken me bij nader inzien niet leuk genoeg of hadden (naar mijn mening) niet genoeg nut.

De rest van het jaar wil ik me nog verdiepen in Express, GTK apps, React + React Native en Three.js (zie mijn vorige post). Vooral wat meer backend development lijkt me wel leuk, aangezien ik dat weinig doe.

- Robin


Three.js: 3D graphics met Javascript

Ik heb de laatste 2 weken wat geëxperimenteerd met three.js

Three.js is een Javascript library om 3D objecten in je browser weer te geven met WebGL. Klinkt moeilijk, maar het betekent eigenlijk: je kan coole 3D stuff op websites maken. Voorbeelden daarvan kan je op de homepage van threejs.org vinden.

Maar je kan er naast coole 3D effecten ook games mee maken! Het is niet een game specifieke library, maar het is wel mogelijk. Gecombineerd met bijvoorbeeld ammo.js kan je best coole games maken. Ik ben zelf momenteel bezig met een space shooter (ik zal wel een blogje posten als ie af is).

Het eigenlijk best simpel. Je begint altijd met een scene, camera en renderer. Een scene is een groep 3D objecten. 

Om dat scene te kunnen zien heb je een camera nodig. Dit is het perspectief waaruit je de 3D wereld ziet. Je hebt verschillende soorten camera's, maar degene die het meest wordt gebruikt is de perspective camera. Dit is gewoon het centraal perspectief wat je bij kunst hebt geleerd. De manier waarop mensen diepte zien.

Dan heb je een renderer nodig. Dit is het onderdeel wat de scene op het scherm laat verschijnen. Meestal wordt WebGL (een Javascript API voor het renderen van 2D en 3D graphics met de GPU) gebruikt, maar er zijn ook andere beschikbaar voor outdated browsers.

En dan heb je: een leeg scherm! Ja dat klopt. We hebben namelijk nog geen 3D objecten aan ons scene toegevoegd. Een 3D object kan een ruimtelijk figuur zijn (zoals een piramide of prisma) of een model wat is gemaakt in bijvoorbeeld blender. We kunnen ons object daarna aan ons scene toevoegen. 

We hebben nu een scene met een object, maar het object is helemaal wit. Het probleem is dat we nog geen material hebben toegekend. Een material bepaalt hoe een object eruit ziet. Het meest simpele material is MeshBasicMaterial. Dit material heeft geen licht nodig, maar er is ook geen diepte zichtbaar (het is flat). Je hebt ook andere materials:

De materials die ik hierboven beschreef: Basic, Standard, Phong en Toon

Nu heb je een 3D object, maar het is nog helemaal donker. Dat komt omdat je nog geen lichten hebt toegevoegd. Je hebt veel verschillende soorten lichten. Een paar coole zijn:

  • SpotLight: de naam zegt het al :)
  • DirectonalLight: een lichtbron die zich gedraagt alsof hij oneindig ver weg is. De lichtstralen gaan parallel van elkaar. Vaak gebruikt om daglicht te simuleren.
  • PointLight: gedraagd zich als een lamp zou doen. Een punt waarvanuit lichtstralen in alle richtingen worden uitgezonden
  • AmbientLight: licht dat alle objecten in een scene gelijk belicht. Komt niet uit één richting, maar vanaf overal (en kan dus niet gebruikt worden om schaduwen te maken).

En dan nu: je hebt een scene met een object! Ik hoop dat je dit een leuke blogpost vond.

- Robin