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. |