Next Previous Contents

1. Computer algebra

Laat ik iets zeggen over computers, iets over algebra, en iets over hoe computers gebruikt kunnen worden bij het oplossen van algebraïsche problemen.

1.1 Intermezzo: Tekenverzamelingen

Klein intermezzo. Het zou kunnen dat je de ï in het woord algebraïsche hierboven niet goed op het scherm kreeg. Misschien is ï in algebraïsche beter, of misschien ook niet. Wat is er hier aan de hand?

Deze tekst is geschreven in ISO-8859-1, ook bekend als Latin-1, een veelgebruikte tekenverzameling.

Een tekenverzameling (Engels: character set) is een verzameling tekens (letters, cijfers, punt, komma, vraagteken, spatie, enz.) samen met een afspraak welke getalswaarden gebruikt zullen worden om deze tekens te coderen.

Er zijn zeer veel (vele honderden) tekenverzamelingen, d.w.z., vele honderden afspraken met welk getal de letter a of het cijfer 7 gecodeerd moet worden. Nieuwe standaarden kunnen aangemeld worden en worden dan opgenomen in het "ISO 2375 registry" (dat een paar honderd tekenverzamelingen omvat), maar vooral Microsoft vindt het niet nodig, inderdaad, zelfs onwenselijk, om zich aan enige standaard te houden, en de "Code Pages" die onder DOS/Windows in gebruik zijn volgen niet de ISO 2022 regels, en zijn niet onder ISO 2375 geregistreerd.

Waarom zijn die afspraken nodig? In een computergeheugen staan geen letters maar alleen bits (nullen en enen). Een groepje van 8 bits heet een byte. Meestal wordt 1 byte gebruikt om een teken weer te geven. (Vroeger had je nog wel bytes van 5, 6, 8, 9 of 12 bits, en was een byte per definitie een groepje bits dat gebruikt werd om een teken weer te geven, maar tegenwoordig betekent "byte" gewoon "8 bits", onafhankelijk van de tekenrepresentatie.) Maar 1 bit kan slechts 2 waarden aannemen, en 1 byte kan slechts 2^8 = 256 waarden aannemen, en er zijn meer dan 256 tekens op de wereld, en dat betekent dat de Fransen, die klinkers met accenten en een c met cedille en een oe-ligatuur nodig hebben een andere tekenverzameling zullen gebruiken dan de Polen die een z met punt erboven, een l met streep erdoor, een a met haak eronder (enz.) nodig hebben.

Een tekst is dus alleen leesbaar voor iemand die weet welke afspraak gebruikt is. Dertig jaar geleden was het voldoende als op één machine alle programma's dezelfde afspraak hanteerden. Veel contact met de buitenwereld was er niet, en als er toch eens een vreemde magneetband binnenkwam kon er wel een conversieprogramma gedraaid worden. Tegenwoordig is er via epost en nieuws en www heel veel contact, en is het veel belangrijker om tekenverzamelingen te standaardiseren.

De huidige situatie is ongeveer als volgt: er is een 7-bit tekenverzameling, ASCII (American Standard Code for Information Interchange) genaamd, die volkomen standaard is. Gebruik je ergens ASCII dan wordt dat overal begrepen (al zijn er nog steeds veel oude IBM mainframes die EBCDIC gebruiken - "dinosaurs"). Vervolgens is er een reeks 8-bit standaarden ISO-8859-X (X=1,2,...) voor gebruik in Europa en het Nabije Oosten. Van deze is ISO-8859-1 zeer gangbaar; bijvoorbeeld is dit de default tekenverzameling op World Wide Web. (default = "zolang er niet expliciet iets anders wordt opgegeven") Deze standaarden hebben het voordeel dat de eerste 128 tekens samenvallen met ASCII, zodat ASCII teksten automatisch ook ISO-8859-X teksten zijn, voor alle X. Tenslotte zijn er de Microsoft Code Pages, meer dan duizend, een raar rommeltje, waarbij CP437 ongeveer overeenkomt met ASCII, uitgebreid met wat grafische symbolen.

In China en Japan hebben de alfabetten veel meer dan 256 tekens, en worden meestal twee bytes per teken gebruikt; dat is voldoende voor 2^16 = 65536 tekens. (Een groot Chinees woordenboek gebruikt ongeveer 50000 tekens. Heel wat meer tekens zijn nog in gebruik om eigennamen weer te geven.)

Er wordt een poging gedaan om een alfabet te introduceren dat alle tekens van de wereld omvat, Unicode of ISO 10646 genaamd. (Grofweg: Unicode is een commercieel consortium dat een 16-bit tekenverzameling aan de man probeert te brengen; ISO 10646 is een 32-bit tekenverzameling die pas zeer ten dele gedefinieerd is, en waarvan de eerste 65536 tekens (het BMP="Basic Multilingual Plane") overeenkomen met Unicode.) De eerste 256 tekens van Unicode zijn ISO-8859-1. Dit is voornamelijk een Amerikaanse hobby (voor software bedrijven is het makkelijk als ze dezelfde programmatuur zowel in de VS als in China, Korea en Japan kunnen verkopen), en in landen als Rusland en Japan is er grote weerstand tegen, maar langzamerhand wordt Unicode op steeds meer plaatsen ingevoerd. Bijvoorbeeld is Unicode de tekenverzameling die de taal Java gebruikt.

Omschrijving

In plaats van "vreemde" tekens te coderen met getalwaarden in grote tekenverzamelingen, kun je ze ook weergeven met een aantal tekens in ASCII. Iemand die niet dagelijks Frans schrijft vindt het misschien niet erg om "é" (acht toetsaanslagen) te schrijven om é te krijgen. Dit is het soort oplossing dat in SGML (in het bijzonder HTML) en TeX (in het bijzonder LaTeX) gekozen is.

Dus, als je browser op ISO-8859-1 ingesteld is (wat standaard zou moeten), is ï goed leesbaar; en anders, als hij voldoende SGML tekens kent en bovendien de fonts in voorraad heeft om deze tekens ook echt te vertonen, moet het uitvoeriger "ï" tot de gewenste ï leiden.

1.2 Intermezzo: Unix en Linux

Waarschuwing: Privé meningen in aantocht! Propaganda! Indoctrinatie!

(Veel van mijn voorbeelden en programma's zullen voor een Unix-achtige omgeving zijn, omdat zulke dingen vaak niet, of slechts met grote moeite, in een DOS/Windows omgeving te realiseren zijn. Hieronder eerst wat reclame voor Unix, en dan een beschrijving hoe je Linux zou kunnen installeren op je laptop. Dit hoeft natuurlijk niet, maar is wel een goed idee.)

Unix

Ik houd erg van het werken in een Unix omgeving, en voel me ongelukkig en machteloos als ik onder Windows iets doen moet.

Wat is het verschil? Onder Windows heeft de ontwerper bedacht wat de gebruiker misschien wil, en kun je met de muis via menuutjes kiezen uit de mogelijkheden. Onder Unix type je zelf wat je wilt, gebruikmakend van krachtig gereedschap dat je tot je beschikking hebt.

De conclusie is dat als je niets weet, je direct moeiteloos met Windows aan de slag kunt, je hoeft alleen maar met de muis te klikken. Bij Unix kost het meer tijd voor je er soepel mee om kan gaan. Maar kun je dat eenmaal, dan is Unix onnoemelijk veel krachtiger, en kun je eenregelige commandos intypen die gecompliceerde acties uitvoeren die de Windows gebruiker nooit voor elkaar zou krijgen.

Wat nog meer? Unix is stabiel. Als ik anderen vertel dat ik berekeningen uitvoer die enkele maanden tijd kosten dan vragen ze "En wat doe je dan als de computer plat gaat?" Dat is kennelijk gewoon, dat een computer plat gaat. Maar een Unix machine gaat niet plat, die doet het gewoon, zolang de hardware niet defect is en de stroom niet uitvalt. (Ik zei net `uptime' op mijn Alpha, en kreeg het antwoord `up 996 days'. Dat betekent dat ik deze machine 998 dagen geleden gekocht heb, een beetje heb moeten prutsen om alles goed aan de praat te krijgen, en dat hij daarna is blijven draaien.)

Wat nog meer? Unix is multi-user, multi-programming. Mijn zoon kan over het net inloggen bij de go server en met iemand anders go spelen, terwijl ik een handvol programma's op de achtergrond heb lopen, en ondertussen aan een wiskundeartikel werk. De stabiliteit van Unix is gekomen als gevolg van het multi-user zijn: als het programma van mijn collega vol met fouten zit mag ik daar geen last van hebben. Er is dus protectie van de gebruikers onderling, en van het systeem tegen de gebruikers. Zo'n protectiemechanisme ontbreekt bij DOS/Windows, zodat een fout in een programma het hele systeem kan platleggen.

Enzovoort. Ik houd wel van een Unix omgeving.

Linux en FreeBSD

Hoe kom je aan een Unix omgeving? Vroeger was Unix copyright AT&T (Bell Laboratories), en moest je grote bedragen betalen, alleen universiteiten kregen Unix bijna gratis. In de loop van de tijd is Unix niet langer een enkel systeem, het is meer een familie van systemen geworden, vele malen opnieuw geïmplementeerd. Er zijn (POSIX) standaarden die precies beschrijven hoe een Unix systeem er tegenover de gebruiker uit moet zien.

Dit betekent dat je tegenwoordig kunt kiezen uit een aantal Unix systemen, er is grote variatie. Er zijn dure systemen die wel redelijk zijn, en gratis systemen die prima zijn. Waarom? Als de broncode van alle programma's vrij en gratis beschikbaar is, en iemand vindt een fout, of iets dat onhandig is, of hij zou graag een extra mogelijkheid in een programma zien, dan hoeft hij zich niet te beperken tot mopperen dat dat programma zo stom geschreven is, dan kan hij het zelf verbeteren. Maar een paar procent van de gebruikers is werkelijk zo actief, maar dat heeft toch tot gevolg dat de gratis systemen in hoog tempo beter worden, terwijl commerciële programma's vaak fouten hebben die al jaren bekend zijn.

Aha, de gratis systemen zijn de beste. Wat voor systemen zijn er? Van alles. Ik denk dat de belangrijkste twee Linux en FreeBSD zijn. Linux is groter (bijvoorbeeld tien miljoen gebruikers) dan FreeBSD (misschien bijna 1 miljoen gebruikers) en heeft een heel ander ontwikkelingsmodel. Bij FreeBSD is er een officiële distributie, en wordt alles centraal geregeld; alleen hoge kwaliteit wordt toegelaten. Bij Linux is er anarchie, iedereen doet maar wat, er zijn veel onafhankelijke distributies (verzamelingen programma's die samen een Linux systeem vormen), en talloze websites en ftpsites waar programma's opgehaald kunnen worden - sommige briljant, de meeste volstrekt waardeloos. Dat klinkt heel slecht, maar in de praktijk werkt het vrij goed: het feit dat FreeBSD een centraal comité heeft maakt het wat trager, wat weinig flexibel. Aan de andere kant, Linux distributies concurreren, en je kunt kiezen voor prijs (twee CDs voor $1.95) of installatiegemak, of veiligheid, of brede sortering programma's enz. Slechte distributies worden weggeconcurreerd.

Ik heb geen sterke mening over wat nu het beste is, maar in de praktijk geloof ik dat het grotere gebruikersaantal van Linux twee voordelen heeft: problemen die zeer infrequent optreden worden eerder gevonden, en drivers voor nieuwe hardware zijn eerder beschikbaar.

En mevrouw Torvalds is karatekampioen.

Installatie van een RedHat systeem

Bekende Linux distributies zijn tegenwoordig Slackware, RedHat, SuSE en Debian. Op de ftp server van de TUE staan Slackware (wat vroeger goed was, maar misschien wat verouderd raakt) en RedHat. Op ftp.nluug.nl staat nog veel meer. Toen ik van de TUE een Toshiba laptop kreeg met 4 GB schijf heb ik Windows 95 op de onderste helft laten staan, en Linux, meer in het bijzonder de RedHat 5.1 distributie, op de bovenste helft gezet. Voor degene die iets dergelijks wil doen hieronder een verslag van de installatie.

Hardware ingredienten: 1 laptop, 2 lege floppies, netverbinding.

Boot Windows 95, start WS FTP95, en ga naar ftp.win.tue.nl met als naam Anonymous. Kies het directory pub. Kies daarbinnen het directory redhat (staat helemaal onderaan, niet in de alfabetische volgorde). Kies daarbinnen het directory redhat-5.1 en daarin weer i386 . Dat was de rechterkant van het scherm. Nu links: MkDir C:\REDHAT en ChgDir C:\REDHAT . Dan weer rechts: selecteer het directory images en klik op pijl naar links in het midden van het scherm. Nu wordt dit directory gekopieerd. Selecteer het directory dosutils rechts, druk weer op de pijl naar links en een tweede directory wordt gekopieerd. Het is verleidelijk om ook de grote hap te willen kopiëren (dat is RedHat), maar op deze Toshiba staat een FAT32 filesysteem, en ik geloof dat het RedHat installatieprogramma nog steeds denkt dat DOS/Windows met FAT16 werkt. In elk geval lukte installatie vanaf de schijf me niet.

Nu heeft ftp zijn werk gedaan (in feite hebben we veel meer dan nodig is: drie files zijn nodig, namelijk dosutils/rawrite.exe en images/boot.img en images/supp.img).

Hier ging ik naar een DOS prompt (kies Shutdown, reboot in MSDOS), en

        CD C:\REDHAT\IMAGES
        ..\DOSUTILS\RAWRITE
Dit programma vraagt om een file. Zeg SUPP.IMG . En om een floppyeenheid. Zeg A: . Nu wordt SUPP.IMG naar floppy gekopieerd. Herhaal (toets F3) en kopieer nu BOOT.IMG naar floppy .

Tenslotte: kopieer alles wat bewaard moet blijven van D: naar C: want D: verdwijnt straks. Dan FDISK, en verwijder de logische partitie D: .

Dat was het Windows95 gedeelte. Nu EXIT en Shutdown, reboot en boot van de BOOT.IMG floppy die nog in A: zit. Deze vraagt: ga je PCMCIA gebruiken? Antwoord Ja. Het installatieprogramma leest nu de andere flop. Dan vraagt hij: vanwaar komen de files. Antwoord: via FTP. Hij vraagt weer om flop 2 maar die zat er nog in, en bovendien realiseert hij zich bij nader inzien dat die al gelezen was. Hij vraagt: SCSI? Antwoord Nee. Hoe partitioneren? fdisk.

De oude standaardregels zeggen dat bij een lege partitie alle velden op 0 moeten staan. Windows 95 OSR2 heeft een nieuwe FDISK die zich niet langer aan deze regel houdt, teneinde mensen die iets anders dan Windows willen installeren het leven iets zuurder te maken. Integendeel, hij vult rare waarden in, waar sommige versies van OS/2 op crashen. Zeg in fdisk p - print partitietabel, en kijk of er een rare partitie bij staat, met onmogelijke lengte en type 0. Zo ja, gooi deze weg. (Bij mij was dat /dev/hda5: partitie 5.) Maak nu twee partities aan: een kleine, zeg van 64 MB als swap partitie, en een grote (bijna 2 GB, de hele rest) als Linux partitie. Schrijf het geheel weg, en verlaat fdisk weer. (Commando's: p: print, d: delete, n: new, w: write and exit) Bij mij ziet het er zo uit:

Command (m for help): p

Disk /dev/hda: 128 heads, 63 sectors, 993 cylinders
Units = cylinders of 8064 * 512 bytes

   Device Boot   Begin    Start      End   Blocks   Id  System
/dev/hda1   *        1        1      501  2020000+   b  Win95 FAT32
/dev/hda2          502      502      992  1979712    5  Extended
/dev/hda5          502      502      976  1915137   83  Linux native
/dev/hda6          977      977      992    64480+  82  Linux swap

De volgorde van hda5 en hda6 doet er niet toe.

Nu mount points toewijzen: het root filesysteem / komt op de Linux partitie (bij mij /dev/hda5). Ik heb /w95 als mount point voor /dev/hda1 genomen, zodat ik vanuit Linux ook bij de Windows spullen kan.

Nu vertellen hoe de ftp gaat. Hij gaat via DHCP. De site bij naam opgeven (ftp.win.tue.nl) werkt niet omdat er met de nameserver iets fout gaat. Maar direct het adres 131.155.70.19 geven werkt prima. Het directory vanwaar alles opgehaald moet worden is /pub/redhat/redhat-5.1/i386 . De rest gaat vanzelf. Alles wordt via ftp opgehaald en geinstalleerd.

(Je moet zeggen wat er precies geinstalleerd moet worden, in een menu "Choose Components" en het makkelijkste is om gewoon alles te vragen, helemaal onderaan "Everything". Dat was 750 MB of zo, en past makkelijk in de beschikbare 2 GB. Er is trouwens nog veel meer - deze "everything" beschrijft alleen de maximale installatieprocedure.)

Wel, dit duurt een tijdje - als het scherm zwart wordt omdat de screensaver actief wordt kun je op Shift drukken om alles weer te zien. Enige tijd (half uur? drie kwartier?) later is alles geinstalleerd. Nu moet er nog een boot manager, LILO, geinstalleerd worden. Zeg dat die in het MBR (Master Boot Record, sector 0 van de schijf) moet komen. Noem partitie 1 w95 en partitie 5 linux, en LILO zal bij het booten van de machine vragen of je w95 of linux wilt. Je kunt een default instellen, en een timeout. Bij mij wordt als ik niet binnen 4 seconden iets gezegd heb Linux gestart.

Als ik me goed herinner moest ik nog iets aan /etc/fstab veranderen. Bij mij ziet het er in elk geval zo uit:

/dev/hda5               /                       ext2    defaults        1 1
/dev/hda1               /w95                    vfat    noauto,user     0 0
/dev/fd0                /mnt/floppy             ext2    noauto          0 0
/dev/cdrom              /mnt/cdrom              iso9660 noauto,ro,user  0 0
none                    /proc                   proc    defaults        0 0
/dev/hda6               swap    swap

Werkt nu alles? Hmm. X aan de gang krijgen was niet moeilijk, alleen hield het installatieprogramma geen rekening met laptops en vroeg naar horizontale en verticale frequenties, wat in het geheel niet van toepassing is bij een laptop. Ik heb in /etc/X11/XF86Config staan dat de muis een PS/2 muis is, de monitor HorizSync 30-50 kHz en VertRefresh 50-75 Hz heeft en mijn display 800x600 moet zijn. (Dit goed instellen is het makkelijkst na de installatie zelf. Ik weet ook niet of mijn instellingen optimaal zijn, maar het werkt goed.)

Wat nog meer? Het netwerk was makkelijk. Het installatieprogramma neemt de instellingen over zoals tijdens de installatie gebruikt zijn, en dat is goed. Thuis heb ik een netwerk dat geen DHCP gebruikt (en een andere hostname en domain) en moet ik /etc/sysconfig/network en /etc/sysconfig/network-scripts/ifcfg-eth0 aanpassen. Om de netwerkverbinding te veranderen is de procedure 1. /etc/pcmcia/network stop eth0 2. doe wat je doen wilt 3. /etc/pcmcia/network start eth0

Rebooten is in principe niet noodzakelijk, maar is een luie manier om andere configuratiefiles (zoals /etc/resolv.conf) aan te passen omdat ze tijdens het booten toch al vanzelf opgezet worden.

Wat nog meer? Als ik boot hoor ik een hoge piep (pcmcia deelt tevreden mee dat alles met de ethernet verbinding in orde is) en een lage piep (pcmcia klaagt dat er iets aan de modemverbinding mankeert) maar ik heb nog niet gekeken wat er met het modem mis is. (Misschien is daar nog een andere driver voor nodig?)

Wel, dat was alles, geloof ik. Een of anderhalf uur werk levert een goed werkend Linux systeem op.

1.3 Intermezzo: Etymologie

Gegeven een woord, is het altijd een interessante vraag waar dat woord vandaan komt. Laten we kijken naar `computer' en `algebra'.

Het oude indoeuropees had twee wortels *pu-. De eerste betekende `vuil, voos' (en deze Nederlandse woorden komen daar ook vandaan - Nederlands `v' komt van indoeuropees `p', zoals `vader' familie is van Latijn `pater' en `vijf' familie van Grieks `pente' (wortel *penkwe), en `veel, vol' van Grieks `polu' en Latijn `plenus') en geeft aanleiding tot woorden als Latijn `pus' (etter), Frans `pute' (hoer), enz. Maar deze moeten we niet hebben.

De tweede had bijna de tegenovergestelde betekenis: `zuiveren, zeven'. Hier horen Latijn `purus' en `putus' (puur, rein), `purgere' (reinigen), Grieks `pur' (vuur), Nederlands `vuur, vonk'. (Zo'n afwisseling van r met n, of van l met n, zie je wel vaker. Een bekend voorbeeld van de l/n wisseling is `sol'/`zon'. Een bekend voorbeeld van de r/n wisseling is Nederlands `water' versus Zweeds `vatn'. In het Grieks zie je hier beide: nominatief `hudoor' heeft r, genitief `hudatos' had n die a geworden is. In geval van `vuur' had het indoeuropees nominatief *pur, genitief *punes.)

Een werkwoord afgeleid van deze wortel is het Latijnse `putare' met een betekenis die zich in veel richtingen ontwikkeld heeft: snijden, snoeien, reinigen, schoonmaken, ordenen, berekenen, taxeren, schatten, achten, menen, denken, vermoeden. (Ook in het Grieks vinden we de betekenis "denken" terug, bijvoorbeeld in het begin van de Odyssee, waar de makkers van Odysseus, de dwazen (niet-denkers: `nepioi'), de runderen van Hyperion opaten.)

Afleidingen van `putare' zijn amputeren, deputatie, dispuut, reputatie, enz. Een afleiding `computare' (berekenen, de rekening opmaken) geeft aanleiding tot Frans `compter, conter' (tellen, vertellen). Direct uit het Latijn komt Engels `compute', en via het Frans komt `count'. Een `computer' is een rekenaar.

Dat was één. Algebra komt uit een heel andere hoek: het is Arabisch, uit `al-jabr w-al-muqubalah' (het reduceren en vergelijken; in de wiskunde: het terugbrengen van uitdrukkingen tot een eenvoudiger vorm). Hier is `al' het lidwoord, en `jbr' de wortel van het werkwoord samenbinden.


Next Previous Contents