# Basiskennis informatica/Codering

Bij het onderdeel talstelsels in het boek wiskunde wordt uitleg gegeven over de algemene "werking" van een talstelsel en bij het onderdeel over de basiskennis informatica worden enkele toepassingen besproken. Deze talstelsels kunnen in een binaire wereld rechtstreeks gebruikt worden om natuurlijke getallen voor te stellen. Zo is 101$_{(2)}$ het natuurlijke getal 5$_{(10)}$. Maar hoe stel je andere gegevens binair voor? Zaken zoals kommagetallen, negatieve getallen, letters, speciale tekens, afbeeldingen,...
Daarvoor moet een codering of protocol gevonden worden, zodat een bepaalde bitreeks ook iets anders kan voorstellen dan enkel een natuurlijk getal. Deze codering moet met slechts een "alfabet" met twee tekens (een 0 en een 1) toch enorm veel computer"talen" kunnen voorstellen. Net zoals wij als mens met ons alfabet a, b, c, d,..., z ook talen kunnen coderen: Nederlands, Engels, Frans,... De letters "beer" betekenen in het Nederlands dan ook wat anders dan in het Engels.

## Soort gegevens

Betreffende de soort gegevens die we met één of andere codering moeten kunnen voorstellen, kunnen er vier onderscheiden worden:
* Gewone data: tekst, afbeeldingen, muziek,...
* Instructies: als je bv. luistert naar muziek, dan is de muziek zelf gewone data, maar om die te beluisteren heb je een programma nodig. Dit programma bestaat uit instructies die op één of andere manier gecodeerd zijn met nulletjes en eentjes, zodat de processor ze begrijpt en ook kan uitvoeren. Om een programma te maken gebruik je een programmeertaal zoals Java, C, C# of PHP.
* Adres: als data wordt opgeslagen, is het de bedoeling om ze ook terug te kunnen vinden. Hiervoor worden adressen gebruikt. Dit is de meest simpele codering, daar je hiervoor een talstelsel kan gebruiken. Gebruik je bv. 16 bit om een adres voor te stellen (zoals bij het bestandssysteem FAT16 het geval is), dan heb je 2$^{16}$ = 65536 mogelijke adressen. Dit is binair 0000000000000000, 0000000000000001, 0000000000000010,..., 1111111111111111 of decimaal 0, 1, 2,.... , 65535.
* Controlesignalen. Dit is een vorm van codering die zaken controleert, bv. een lees- of schrijfsignaal.
In wat volgt, komt vooral de gewone data aan bod.

## Voorbeelden

Het is onmogelijk om met dit boek álle computertalen te bespreken. In dit onderdeel wordt met enkele bekende voorbeelden duidelijk gemaakt wat de bedoeling is van coderen.
Bij bepaalde talen wordt de codering op een binair niveau bekeken:
* ASCII-code
* Unicode
* Bitmap
Bij andere talen wordt de codering bekeken op een tekstueel niveau, waarbij onderliggend een andere codering, zoals bv. Unicode wordt gebruikt:
* HTML
* SVG
* XMPP
Vaak is een combinatie van coderingen/protocollen nodig. Je wil bv. enkele bestanden (met bv. als codering 'pdf', 'docx', 'txt',...) doormailen (via bv. het protocol SMTP) naar iemand anders. Je wil dat de bijlage zo klein als mogelijk is, dus comprimeer je alles (bv. als codering zip, rar of 7z). De andere persoon leest zijn mail (bv. via het IMAP-protocol), decomprimeert de bijlage en bekijkt elk van de bestanden met een programma dat de codering begrijpt (bv. pdf-lezer, MS Office, Kladblok,...).

## Open versus gesloten

Er zijn verschillende coderingen, elk met hun eigen toepassingsgebied. Maar ook binnen één toepassingsgebied kan je vaak kiezen uit meerdere coderingen. Binnen de grafische formaten heb je zo 'jpg', 'png', 'bmp', 'gif' en nog vele meer. Eén van de aspecten bij coderingen is het verschil tussen 'gesloten' en 'open' codering:
* Bij een open codering/specificatie is het woordenboek om de binaire/tekstuele informatie te coderen in een voor de (IT-)mens verstaanbare uitleg vrij beschikbaar. Dit laat toe aan om het even welke programmeur om een eigen programma te schrijven, dat compatibel is met de gekozen codering. Zo zijn HTML, CSS en SVG open coderingen, zodat iedereen met de nodige kennis zijn eigen browser schrijven. Omdat ASCII en Unicode open standaarden zijn, kan iedereen zijn eigen teksteditor schrijven.
* Bij een gesloten codering/specificatie maakt iemand (persoon, bedrijf, ...) een codering, waarvan deze het woordenboek om te weten hoe die codering in elkaar zit niet vrijgeeft. Bijkomend ontwikkelt deze de software die met deze codering overweg kan en dus de vertaalslag doet naar de eindgebruiker. Anderen kunnen geen concurrerende software maken, omdat het woordenboek niet is vrijgegeven. Zo creëer je dus een afhankelijkheid t.o.v. dat ene bedrijf, wat bekend staat als vendor lock-in.
Je merkt dat een weloverwogen keuze belangrijk is en dat je de gevolgen van de gekozen codering kan inschatten! Bij een gesloten codering zijn er sommigen die deze codering reverse engineeren en proberen te achterhalen hoe die codering in elkaar zit. Hierdoor zal je bij sommige gesloten coderingen tóch alternatieve software vinden.
Een belangrijk misverstand bij een open codering/specificatie is dat je dit vrij zou mogen aanpassen. Het gaat hier echter niet om openbronsoftware (open source software, OSS), maar over een codering/taal! Het aanpassen van een taal zou betekenen dat je vanaf nu bv. wit door blauw vervangt en zwart door rood. Als je tegen je medemens zou zeggen dat hier rode tekst op een blauwe achtergrond staat, zal er een communicatieprobleem ontstaan. Of dat je de b-tag van HTML maar niets vindt en dat je liever een bold-tag zou hebben, maar geen enkele browser zal jouw tag begrijpen! Verwar een open codering/specificatie dus niet met open source software!
Enkele voorbeelden van coderingen versus software :
| Categorie | Codering | Software |
| Tekst | ASCII, Unicode (open) | Kladblok, Notepad++ (OSS), … |
| Kantoor | Docx, xlsx, pptx, .. (gesloten) | Microsoft Office, LibreOffice (OSS) |
| Kantoor | OpenDocument (open) | Microsoft Office, LibreOffice (OSS) |
| Web | HTML, CSS, SVG (open) | Chrome, Firefox (OSS), Edge |
| Communicatie | Skype protocol (gesloten) | Skype |
| Communicatie | Matrix (open) | Element (OSS), Spectral (OSS), Quaternion (OSS), … |
Een bedrijf/persoon kan dus zelf een codering ontwerpen en die (het "woordenboek") vrij ter beschikking stellen aan iedereen. Om wildgroei te vermijden wordt voor veel formaten gewerkt met een standaardenorganisatie, die alles in goede banen leidt. Als zo'n codering de volledige procedure heeft doorlopen, spreekt men niet zomaar van een open codering/specificatie, maar van een open standaard. Zo wordt HTML en SVG ontwikkeld door de standaardenorganisatie W3C.
In het Wikibook van open standaarden, kan je terecht voor meer informatie. Bovenstaande items worden hierbij diepgaander uitgewerkt.
* ↑ Voor wat achtergrond, zie Tweakers.net: Matrix: decentraal chatprotoco, onverwacht populair bij bedrijven.