joeni

TODO.org

1
* About this file
2
This repository is my work for my bachelor's assignment for the study of
3
Informatics at [[https://uhasselt.be/][Hasselt University]]. Because of the sheer size of the project,
4
it's imperative that I keep track of all the things that have to be done.
5
6
In this file, I try to collect them all, in a structurally sound way.
7
It's possible that this file will be removed in the future, to be combined with
8
another file to make use of Org's clocking features, but for now, everything
9
will be listed here.
10
11
* Agora
12
*Note: Agora is NOT a priority right now!* This has been discussed with the
13
 promotor, and implementing the administration and courses system is a LOT more
14
 important than having a social platform. Nevertheless, once Courses and
15
 Administration are finished, work on Agora can commence, thus if there is work
16
 that should be done, it will be listed here, to avoid forgetting it.
17
** Models
18
** Views
19
** Templates
20
** Forms
21
*** TODO Post form
22
*** TODO Group form
23
*** TODO Account settings form
24
*** TODO Account collection form
25
** Urls
26
27
* Courses
28
** Models
29
*** TODO Implement group of student in a course
30
Dixit Lamotte: "Some studies are so big, the students have to be split up in
31
different groups." Thus, implement a system where the students /can/ be split in
32
groups by the education team of the course. If no groups exist, then they're all
33
treated as one giant group.
34
** Views
35
** Templates
36
** Forms
37
** Urls
38
** Other
39
40
* Administration
41
** PAGES
42
Eventually, a finished page consists of
43
- A finished template
44
- All models that can be accessed from that page, are finished
45
- A working view function
46
- A working URL link
47
- If applicable, working forms (= All forms can initiate, store, and modify
48
  data, and display the right error messages)
49
This does not include CSS or other things that overlap multiple pages. This
50
checklist therefore is a list of all pages that are basically done, and don't
51
need further action.
52
- [ ] Roster
53
- [X] Bulletin Board
54
- [ ] Index
55
- [ ] Curriculum
56
- [ ] Pre-registration
57
- [ ] Settings
58
- [ ] Forms
59
- [ ] Jobs
60
- [ ] Rooms
61
- [ ] Login
62
*** Rooms
63
**** TODO SVG rooms in an HTML canvas
64
That would make them clickable, so information about the rooms at UHasselt can
65
be retrieved by just clicking on them. You'd have to make an SVG blueprint of
66
the campus but eh.
67
** Notes
68
At this moment: *Implement what is already in the models.* By finishing what I
69
already have, I can create space in my mind for the new things.
70
** Models
71
*** TODO IBAN validator
72
IBAN numbers have a special format, which needs to be valid. For this, a
73
validator must be written.
74
*** TODO BIC validator
75
See [[IBAN validator]]
76
*** *ALERT* SQL standard issues!
77
I've got several fields that should be unique, but can also be null.
78
SQLite indicates two null values in the same column as a NOT UNIQUE,
79
but that's wrong, according to the SQL standard. This excerpt from the
80
PostgreSQL documentation:
81
In general, a unique constraint is violated if there is more than one row
82
 in the table where the values of all of the columns included in the constraint
83
are equal.
84
 However, two null values are never considered equal in this comparison.
85
 That means even in the presence of a unique constraint it is possible to
86
 store duplicate rows that contain a null value in at least one of the
87
constrained columns.
88
 This behavior conforms to the SQL standard,
89
 but we have heard that other SQL databases might not follow this rule.
90
 So be careful when developing applications that are intended to be portable.
91
** Views
92
*** TODO Forms, documents, ... generators
93
This is mainly about the legal documents that should be generated for students,
94
like degrees, evidence of being a student, ... These are often not to display
95
information, but should be put out as a PDF file, that the user can then print.
96
This should be done using the ReportLab Python PDF library.
97
Check out [[file:///home/simba/Documentation/Django/howto/outputting-pdf.html]] for
98
more information on how to do this.
99
** Templates
100
** TODO Roster
101
** TODO Personal settings
102
** TODO Public page
103
** Forms
104
*** TODO Personal details form
105
** Urls
106
** Other
107
*** TODO Implement roster system
108
All students (and staff) have personal rosters. This system should be able to
109
automatically update that. The roster will automatically show the following:
110
- Course schedules :: For all courses that the student follows, show the
111
     scheduled rooms /for their group/. If no groups are made, show the complete
112
     course schedule.
113
- Exam roster :: Show all exams of the student.
114
- Room reservations :: If a student has reserved a room, that will show up in
115
     their roster.
116
- Custom schedulings :: The user can also make custom schedulings, and attach
117
     necessary info to them.
118
119
The roster automatically opens on the current week, except when it's Saturday or
120
Sunday; then it shows next week.
121
All this data is presented through a clear and nice HTML page, and is
122
automatically updated in a personal iCal-file, that the user can connect to.
123
124
If that is finished, make a special form to ask for generic planning from a
125
certain study, course, ...
126
*** TODO Implement alumni system
127
UHasselt Alumni need to be able to give a new e-mail address. This should become
128
available when one has obtained a degree.
129
*** TODO Implement study costs system
130
The costs that have to be paid, must be recorded, and be presented. Data from
131
each year needs to be available. Check for what should be recorded at [[https://uhintra02.uhasselt.be/studdosst/sdsInschrijvingsgeld.aspx][the website]].
132
*** TODO System for rulings exam committee
133
These are probably messages that are sent out to a specific user, regarding
134
special measures, or some stuff like that.
135
*** TODO System for automatic creation of exam schedules
136
This system checks all current students, and needs the following info:
137
- For each Course:
138
  - The (amount of) students
139
  - The type of exam (verbal, writing, ...)
140
  - (Optionally) a notification
141
  - The amount of exams that have to take place
142
143
And attempts to fulfill the following requirements:
144
- *All exams for model trajects are spread as far as possible from one another*
145
- No student has overlapping exams
146
- All exams must take place in the given timespan
147
- Different exams can be given in the same room, but the maximal capicity
148
  must be respected
149
- The algorithm prefers interspacing of 2 empty seats per student. These empty
150
  seats may be occupied by students from other exams.
151
- Exams take place only in rooms with at least *double* the amount of students
152
  for that exam (to allow spacing). Of course, these spaces can be occupied by
153
  another exam batch.
154
- Exams that require special equipment (e.g. computers, ...) must be respected
155
- Rooms that already have reservations will be overridden, but a warning will be
156
  placed to inform about the deletion of the previous reservation.
157
158
The data is then printed to the screen, after which it can be verified. If
159
everything is okay, the user can accept the proposed planning, after which the
160
room reservations are automatically carried out.
161
After this point, students can view their exam rosters, and their personal
162
schedules are automatically updated.
163
164
*** TODO Refactoring of roster functionality
165
The roster needs a lot of preparation before being sent to the template. It's
166
currently hastly written and in the view module, but it can't stay there.
167
In the future, make a special roster module, and move all functionality there.
168
Refactor the functions, make tests so they're safe against errors, and so on.
169
* Report
170
All this needs to be put together in a giant report. For comparison: Joris'
171
thesis was a whopping 84 pages. Given the size of my project, I think I won't be
172
much below that.
173
** Points to talk about
174
*** DONE Why this MUST NOT be the final version
175
    CLOSED: [2018-08-14 Tue 23:17]
176
Joeni should not be the end, because a website is not the right medium for the
177
main digital platform of a university. Explain how the current UI is an example
178
of what could be. Also mention that the current existing database is suited for
179
directly hooking into with the new program.
180
*** DONE Why JavaScript is actively banned
181
    CLOSED: [2018-08-14 Tue 23:17]
182
    Explain the client side problem, the advantages of server-only programming,
183
    and my law: "If you can't make your website function properly without
184
    JavaScript, it shouldn't be a website in the first place."
185
*** DONE Explain lightweight HTML5/CSS3 usage
186
    CLOSED: [2018-08-14 Tue 23:17]
187
    Explain the benefits of providing _meaning_ through good use of HTML5, and
188
    why CSS3 is made using SCSS.
189
    Also give some examples of what the low use of divs and classes brings for
190
    advantages, including for impaired web users
191
*** TODO Django/Python
192
    Defend the usage of Django and Python. Explain also why other languages
193
    may've been beneficial, but Django was the most compelling reason for
194
    Python, and why Python isn't a bad choice after all, despite the better idea
195
    of Haskell/Clojure/...
196
    Also: Why no standalone software: Because that can be done later, but web
197
    based is what it is now, and that needs replacement. Native software can be
198
    done later if necessary.
199
*** TODO Caching
200
*** TODO Security
201
    Basically explain how Django has built-in security, for what exploits etc.
202
*** TODO Org
203
    Tricky one. Explain why Orgmode-syntax is allowed, how this is implemented
204
    (DTL filter), how to disable, and why this shouldn't pose a security threat.
205
*** TODO Why standards are followed, even if that breaks with certain browsers
206
*** TODO Why user data is stored in a different table and connected 1->1 with User
207
Because this is what is recommended in the Django documentation, and it makes it
208
way easier to add new fields, or remove some, in the future.
209
https://docs.djangoproject.com/en/2.0/topics/auth/customizing/#specifying-a-custom-user-model
210
*** TODO Write about how some functionality is now implemented by implication
211
An example: There's now no dedicated button to download a scorecard from the
212
curriculum.
213
However, because the pages are so simple and clear, browsers like Firefox allow
214
that same functionality with their builtin "print webpage" capability. An
215
example of 90% of the functionality implemented with 10% of the effort.