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
[bewerken]Betreffende de soort gegevens die we met één of andere codering moeten kunnen voorstellen, kunnen er vier onderscheiden worden:
- Gewone data:
- Tekst: ASCII-code, Unicode, ...
- Afbeeldingen: Bitmap, SVG, ...
- Kantoordocumenten: Office Open XML
, OpenDocument
, ... - Webontwikkeling: HTML, CSS
, ... - Muziek: MP3
, Ogg Vorbis
, ... - ...
- 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 216 = 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.
Voorbeelden gewone data
[bewerken]Het is onmogelijk om met dit boek álle computertalen te bespreken. In dit onderdeel wordt met enkele eenvoudige coderingen duidelijk gemaakt wat de bedoeling is van coderen.
ASCII
[bewerken]ASCII-code is een afkorting van American Standard Code for Information Interchange en is een standaard ontwikkeld vanaf 1960 om een aantal letters, cijfers, leestekens en andere symbolen te representeren. De standaard ASCII-tabel is een 7-bits code, waarmee dus 27 = 128 ASCII-codes mogelijk zijn. In eerste instantie denkt men aan 10 cijfers, 26 kleine letters en 26 hoofdletters, maar het wordt ook gebruikt voor speciale tekens (|,@,...), de spatiebalk en besturingscodes (acknowledgement, geluidssignaal,...). Sommige van deze codes herinneren nog aan het feit dat de uitvoer vroeger meestal niet op een beeldscherm werd getoond, maar met een teletype
, een soort door een computer aangestuurde typemachine, op papier werd afgedrukt.
In het voorbeeld hieronder werd de binaire notatie gebruikt om de tekst in 7 bit ASCII voor te stellen. Het volledig woordenboek van de ASCII-tabel is wijdverspreid op het internet, o.a. op de ASCII-Wikipediapagina
.
| computertaal | mensentaal |
|---|---|
11001011101110010000011101001100001110000111011000100000 11011011100101111010001000000110000010000011001011101110 0100000011000101000000111010010110101010010100001 |
ASCII, een taal met 0 en 1 :-)! |
Unicode
[bewerken]In landen buiten de Verenigde Staten was er behoefte aan extra tekens, zoals andere letters, letters met accenten, valutasymbolen en figuurtjes. Denk bv. aan de Duitse taal met äöü en ÄÖÜ of aan het Britse pondteken £. Zomaar de ascii-codes van "overbodige" tekens zoals [\], {|} of # respectievelijk interpreteren als äöü, ÄÖÜ of £ zou uiteraard voor communicatieproblemen zorgen!
Er was dus een vervanger/opvolger nodig: Unicode, een internationale standaard voor de binaire codering van tekens en symbolen ("karakters") van alle geschreven talen. Naast letters en cijfers bevat Unicode ook veel symbolen, zoals: kruisen, wiskundige tekens, muntsymbolen enzovoort. Het bevat geen symbolen die niet in een schrift worden gebruikt, zoals verkeersborden. De standaard wordt onderhouden door het Unicode Consortium. De standaard bevat momenteel ruim 100.000 gestandaardiseerde tekens en ongeveer 900.000 voor toekomstig gebruik gereserveerde codes.
Om dit concreet te kunnen coderen op een pc biedt Unicode een aantal mogelijke coderingen:
- UTF-32
: voor de codering worden 32 bits gebruikt (dit zijn dus 232 = ± 4 miljard mogelijkheden). Een nadeel is dat ASCII-bestanden in Unicode daardoor 4 keer zo groot worden. - UTF-16
: tekens worden opgeslagen als een of twee 16-bits getallen, afhankelijk van de hun toegekende waarde. - UTF-8
: tekens worden opgeslagen als een tot vier 8-bits getallen, afhankelijk van de hun toegekende waarde. In deze codering blijven ASCII-teksten onveranderd.
Hieronder een UTF-32 voorbeeld. Ter info:
- De BOM
FF FE 00 00aan het begin wijst op de UTF-32 met Little-endian
. - De UTF-32 voor de letter
Uis55 00 00 00en "toevallig" is ook de UTF-8 of ASCII-code voor55de letterU. - De UTF-32 voor 🩷 is
77 FA 01 00, waarvoor uiteraard geen ASCII-symbool bestaat (<3komt het beste in de buurt).
| computertaal | mensentaal |
|---|---|
FF FE 00 00 FF FE 00 00 55 00 00 00 6E 00 00 00 69 00 00 00 63 00 00 00 6F 00 00 00 64 00 00 00 65 00 00 00 20 00 00 00 77 FA 01 00 21 00 00 00 00 00 00 00 |
Unicode 🩷! |
Tweakers stapt over op UTF-8
Tweakers zet hun standaardtekencodering van latin-9 (ISO-8859-15) om naar UTF-8. Dat lijkt eenvoudig, maar ze wilden geen downtime, de code waar inhoud werd ge-output naar een tekencodering moest worden aangepast, alsook de wachtwoordenopslag (met een tussenstap voor gehashte wachtwoorden). De door hun gebruikte latin-9 had bovendien geen expliciete ondersteuning in de databank MySQL, wat de zaken ook bemoeilijkte. De eindgebruiker merkt hier niet veel van, tenzij bij het aanpassen van reacties/posts: bij latin-9 had je een html-entiteit
zoals & # 127866 ; nodig, maar nu kan dat met 🍺 rechtstreeks in UTF-8.
(nl) Tweakers stapt over op utf-8. tweakers.net (2019-01-14).
Bitmap
[bewerken]BMP (een afkorting van bitmap) is een bestandsindeling voor rasterafbeeldingen. BMP-bestanden zijn meestal niet gecomprimeerd, zodat ze vaak veel groter zijn dan gecomprimeerde grafische bestanden die een plaatje van dezelfde afmeting bevatten. Hierdoor zijn afbeeldingen in BMP-indeling meestal ongeschikt om te worden verstuurd via het internet of andere relatief trage netwerken. Voor dit onderdeel "codering" is deze bestandsindeling interessant om de wisselwerking te zien tussen die binaire codering en het eindresultaat, bv. door wijzigingen aan te brengen via een hex editor.
| computertaal | mensentaal |
|---|---|
42 4d 3e 00 00 00 00 00 00 00 36 00 00 00 28 00 00 00 02 00 00 00 01 00 00 00 01 00 18 00 00 00 00 00 08 00 00 00 13 0b 00 00 13 0b 00 00 00 00 00 00 00 00 00 00 02 01 ff 22 cc ff 00 00 |
Een afbeelding met twee pixels: links een rode pixel en rechts een oranje pixel. Merk op:
|
Foute codering
[bewerken]
Tussen de 7-bits ASCII en Unicode ontstonden de extended ASCII-tekenverzamelingen met 8 bits als bitruimte. Dat betekende dubbel zoveel mogelijkheden: 28 = 256. Let echter op het meervoud: extended ASCII is niet één bepaalde standaard, maar een verzamelnaam voor de verschillende tekenrepresentaties die de 95 afdrukbare ASCII-tekens als basis hebben. Je voelt dus aan dat als een editor de verkeerde karaktertabel gebruikt, de eigenlijke inhoud niet correct wordt weergegeven (zie onderstaande tabel).
| Bit-code | Hex-code | ISO-8859-1 |
Windows-1251 |
|---|---|---|---|
| 1010 0011 | A3 | pondteken |
cyrillische |
| 1010 1001 | A9 | copyrightteken |
copyrightteken |
| 1101 1111 | DF | de Duitse Eszett |
cyrillische |
Vandaar dat Unicode als één codering to rule them all de betere keuze is. Maar ook bij Unicode kunnen nog steeds fouten ontstaan. Als je bv. in de programmeertaal Python de functie pandas.read_csv() gebruikt, dan verwacht deze standaard UTF-8. Sommige apparaten of software zullen echter UTF-16 als encoding voor de csv-bestanden gebruiken. Denk bv. aan Excel die ze als UTF-16 of ISO-8859-1 kan bewaren.
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte
Combinatie
[bewerken]Uiteraard worden coderingen/protocollen gecombineerd:
- Een webpagina is op tekstueel niveau met een bepaalde tekencodering (bv. UTF-8 of UTF-32): niet alleen voor de inhoud zelf, maar ook voor de html-tags zoals de b-, p- of style-tag.
- 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
[bewerken]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!
| Categorie | Open codering | Gesloten codering | Software |
|---|---|---|---|
| Tekst | ASCII, Unicode | Kladblok, Notepad++ (OSS), … | |
| Kantoor | Docx, xlsx, pptx, .. | Microsoft Office, LibreOffice (OSS) | |
| Kantoor | OpenDocument |
Microsoft Office, LibreOffice (OSS) | |
| Kantoor | Office Open XML |
Microsoft Office, LibreOffice (OSS) | |
| Web | HTML, CSS, SVG | Chrome, Firefox (OSS), Edge | |
| Chat | WhatsApp-protocol | WhatsApp | |
| Chat | Matrix |
Element (OSS), Spectral (OSS), Quaternion (OSS), … | |
| Microblogging | X protocol | X | |
| Microblogging | ActivityPub |
Mastodon |
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.
Hoofdaanklager van ICC heeft geen toegang meer tot Microsoft-mail na sancties VS
Breder dan open versus gesloten standaarden is de digitale soevereiniteit
: namelijk hoe goed is Europa in staat om digitaal volledig op zijn eigen benen te staan (zeker in het geval van crisis). Dan blijkt dat we niet alleen militair afhankelijk zijn van Amerika, maar ook van heel wat Amerikaanse internetgiganten
(big tech
) in een Amerikaanse cloud.
Zo bleek dat de hoofdaanklager van het Internationaal Strafhof ICC
geen toegang meer had tot zijn Microsoft-mail, na sancties vanuit de Verenigde Staten. Nochtans woont deze persoon in Nederland en heeft Microsoft ook cloudservers in Europa. Dan blijkt een soevereine cloud toch niet per definitie soeverein te zijn.[2] Vandaar websites zoals european-alternatives.eu.
- ↑ Voor wat achtergrond, zie Tweakers.net: Matrix: decentraal chatprotocol, onverwacht populair bij bedrijven.
- ↑ Berthub.eu articles > Is dit een soevereine cloud?