aboutsummaryrefslogtreecommitdiff
path: root/readme.md
blob: cf32813f39527be8cfd7a14391132a42d00394e8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
# databases huiswerk

ik geef hier de opdrachten vrij omdat het er naar [mijn
mening](#een-stukje-feedback-voor-de-opleiding) te veel zijn. gelieve dit als
naslagwerk te gebruiken.

hier is nog wat documentatie omdat deze repo iets vlug is gegroeid de afgelopen
2 weken.

## gebruikte tools en bestandsstructuur

> (de open vragen van de huiswerkopdrachten had ik gemaakt voor dat ik dit
> zooitje had ingesteld, dus deze bevatten gekopiëerde fragmenten uit de mysql
> interactieve cli)

`q*.sql` zijn query's, `t*.sql` zijn tests (hiervan wordt de output opgeslagen
in `t*.md`). `b*.sql` wordt zelden gebruikt maar betekent dat de query nog
aangevuld wordt om naar een `q*.sql` te gaan (b staat voor base).

in de sfeer van geoptimaliseerde luiheid is bijna alle documentformatting
geautomatiseerd. de practica's en eindopdracht gebruiken m4 om de sql query's
en hun resultaten in markdown bestanden te zetten. een makefile zorgt er voor
dat alle sql query's uitgevoerd worden in volgorde, dit zijn de bestanden die
er uit zien als `q*.sql`.

hier is een lijstje macro's die gedefinieerd worden uit common.m4 (`n` staat
voor een willekeurig getal):

|aanroep|beschrijving|
|-|-|
|`q_norm(n)`|maakt een opdracht hoofdstuk met code block die de inhoud van q\*.sql bevat.|
|`q_with_output(n)`|doet het zelfde als `q_norm`, maar met de inhoud van t\*.sql, met daaronder de output van de query als HTML tabel.|
|`q_with_test(n)`|doet het zelfde als `q_norm` met daaronder `q_with_output`, maar zonder gedupliceerde opdracht header|
|`include_sql(file)`|maakt een code block met de inhoud van `file`|

een map kan ook een bestand genaamd `reset.sql` bevatten, deze wordt vóór alle
q\*.sql query's uitgevoerd, dus hier staan meestal `drop table` statements in
om de database te \*resetten\*. de makefile gebruikt de standaard mysql
command-line client, en eventuele opties zoals een alternatieve gebruikersnaam
en/of wachtwoord kunnen in common.mk aangepast worden. de standaardconfiguratie
gaat uit van een database die met dezelfde gebruikersnaam als de gebruiker
waarmee je `make` draait toeganklijk is, en zonder wachtwoord.

## de eindopdracht

de eindopdracht heb ik in een middag geschreven, in python, met scripts in
nodejs omdat ik deze af aan het raffelen was. deze code is niet gemaakt om
onderhoudbaar te zijn, maar als het werkt voor de assessment is het goed
genoeg. u zijt gewaarschuwd.

voor de rest is dit een standaard python project met een virtual environment,
dus setup ziet er zo uit:

```shell
# (in eindopdracht submap)
python3 -m venv venv
source venv/bin/activate
pip3 install -r requirements.txt
```

de afbeeldingen van de merken zitten niet in deze repository omdat ik geen
auteursrechtelijke rechten voor ze heb. in de eindopdracht submap zit een losse
makefile die een imgs.sql query maakt, deze voegt links naar de (verwachte)
bestanden in de eindopdracht/img/ map. deze query moet handmatig uitgevoerd
worden. een lijst met bestandsnamen van deze afbeeldingen staat wel in de
makefile.

## over de makefiles

`common.mk` bevat instructies om een m4 template document te renderen en sql
query's uit te voeren. als je markdown output voldoende vindt is dit genoeg.
deze makefile verwacht dat de `TARGET` variabele ingesteld is op de basename
van je m4 template.

`pdf.mk` bevat instructies om de markdown output te renderen als pdf met behulp
van `latexmk`. ook wordt inkscape op de achtergrond gebruikt om svg diagrammen
om te zetten naar pdf's, zodat latex deze kan lezen. om deze makefile te
gebruiken moet je uiteraard ook een werkende latex distributie geïnstalleerd
hebben. ook wordt `pandoc` gebruikt om de markdown om te zetten naar een .tex
bestand. deze makefile verwacht dat de `MD2LATEX` variabele is ingesteld op het
pad naar het `md2latex` script in de rootmap van deze repo.

## een stukje feedback voor de opleiding

*en* een waslijst huiswerkopdrachten, *en* 2 practica's, *en* een eindopdracht,
*en* een tentamen is te veel werk voor 2 studiepunten. hier is een lijstje
suggesties:

- schrap het tentamen net als hoe de practica's werkte bij microcontrollers 2
- minder huiswerkopdrachten geven
- de practica's aanpassen zodat het niet vermomde huiswerkopdrachten zijn
- de eindopdracht laten vervallen