Summary Files Commits Branches @commit @diff @stats
path: root / Year 3 / Network programming / Project
diff options
context:
space:
mode:
Commit935c660155135865ca10c21e0cc7564c83f9267e (patch)
Author
 Syndamia <kamen@syndamia.com>
2024-01-03 13:17:03 +0200
Committer
 Syndamia <kamen@syndamia.com>
2024-01-03 13:17:03 +0200
Filesd9cba0f5ea450cfabdae062a079f2e414e37801e /Year 3/Network programming/Project
uni-projects-935c660155135865ca10c21e0cc7564c83f9267e.tar
uni-projects-935c660155135865ca10c21e0cc7564c83f9267e.tar.gz
uni-projects-935c660155135865ca10c21e0cc7564c83f9267e.zip
Parenta2c9e2c55887229d4c91437655148b6bbcec7197 (diff)
[NP] Added network programming project (pico-web)
diff --git a/Year 3/Network programming/Project/.commits.txt b/Year 3/Network programming/Project/.commits.txt
new file mode 100644
index 0000000..a7ba171
--- /dev/null
+++ b/Year 3/Network programming/Project/.commits.txt
@@ -0,0 +1,3478 @@
+https://gitlab.com/Syndamia/pico-web/
+https://github.com/Syndamia/pico-web/
+
+commit a2c9e2c55887229d4c91437655148b6bbcec7197
+Author: Syndamia <kamen@syndamia.com>
+Date: Sat Dec 9 11:08:29 2023 +0200
+
+ [NA] Finished project
+
+commit cc5fe29ae501e4926d810a46f2036dba272c32fc
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Dec 5 17:41:59 2023 +0200
+
+ [NA] Reformatting and updated logic
+
+commit c2fde66ef82a6fed1f70ef3902d0932df4723fe4
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Dec 5 16:25:26 2023 +0200
+
+ [NA] Added initial solution
+
+commit 39a4bd3d1b70e4d800487b79860f9113fb079f84
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Dec 5 12:09:14 2023 +0200
+
+ [CI/H5] Solved homework
+
+commit a607349b22f8a201512582e6341fe020527baf62
+Author: Syndamia <kamen@syndamia.com>
+Date: Sat Dec 2 21:48:54 2023 +0200
+
+ [SP/P06] Solved most exercises
+
+commit 3c791c6c357115d4abf71c318c9e7cd7571ea658
+Author: Syndamia <kamen@syndamia.com>
+Date: Sat Dec 2 21:25:46 2023 +0200
+
+ [SP/P05] Solved exercises
+
+commit 952bee4ac4e4a97d30fc1d681ff0a9e5168fb9c8
+Author: Syndamia <kamen@syndamia.com>
+Date: Sat Dec 2 20:19:43 2023 +0200
+
+ [SP/P04] Solved exercises
+
+commit b50c86bd91351bfde316a4aa6e06e95588e4553f
+Author: Syndamia <kamen@syndamia.com>
+Date: Sat Dec 2 19:57:42 2023 +0200
+
+ [SP/P03] Solved exercises
+
+commit 54bc74f4bcc80a9f3c874db16c43b6b1cd07d3e1
+Author: Syndamia <kamen@syndamia.com>
+Date: Sat Dec 2 18:49:11 2023 +0200
+
+ [SP/P02] Solved exercises from second practice
+
+commit a594346d7e2ca97717cae7e705c00d6fe0b9a460
+Author: Syndamia <kamen@syndamia.com>
+Date: Sat Dec 2 18:10:23 2023 +0200
+
+ [SP/P01] Solved exercises from first practice (again)
+
+commit cf86e964b166a32227aa4bb0cc1de27a37244c69
+Author: Syndamia <kamen@syndamia.com>
+Date: Fri Nov 24 09:16:18 2023 +0200
+
+ [CI] Added bashrc to docker container
+
+commit e5fc0063291ce748942c551b446a395fa3759a93
+Author: Syndamia <kamen@syndamia.com>
+Date: Fri Nov 24 09:15:33 2023 +0200
+
+ [.gitignore] Added more compilation output files
+
+commit 9e22120607c68645a4e8adf596dd38f722078c52
+Author: Syndamia <kamen@syndamia.com>
+Date: Fri Nov 24 09:15:12 2023 +0200
+
+ [CI/M] Added notes from midterm
+
+commit bd45aa8372205e6bb5e06d419f4e355ca7f216ce
+Author: Syndamia <kamen@syndamia.com>
+Date: Wed Nov 15 19:55:59 2023 +0200
+
+ [CI/PA2] Fixed too good error handling for two cases
+
+commit 369a723ba50fc9520b30f4d18cdb347f8b9496ee
+Author: Syndamia <kamen@syndamia.com>
+Date: Wed Nov 15 11:58:16 2023 +0200
+
+ [SP/P6] Solved exercises
+
+commit fd31939b2f94f4d64a5a6d5d7cb84b925b778166
+Author: Syndamia <kamen@syndamia.com>
+Date: Sat Nov 11 16:42:57 2023 +0200
+
+ [CI/PA2] Added an almost working version
+
+commit 864e98585b287d68c1f8863850124adfdba7a5b8
+Author: Syndamia <kamen@syndamia.com>
+Date: Sat Nov 11 12:03:07 2023 +0200
+
+ [CI/PA2] Implemented fully grammar
+
+commit 822201b02fd5bd914d083d62bc095b47ff77ab21
+Author: Syndamia <kamen@syndamia.com>
+Date: Sat Nov 11 08:28:19 2023 +0200
+
+ [CI/H4] Added work from 4th homework
+
+commit 4aa1f0d045a8940f4d3015737d56f2bdc5debb67
+Author: Syndamia <kamen@syndamia.com>
+Date: Wed Nov 8 19:43:34 2023 +0200
+
+ [CI/PA2] Fixed classes
+
+commit eed9bc719d1dd5be8e8dc36d5ec463eb450da59d
+Author: Syndamia <kamen@syndamia.com>
+Date: Wed Nov 8 19:38:49 2023 +0200
+
+ [CI/H4] Started work on homework
+
+commit 42d46b0f1af7719c6bb3e905a4f86ddabf822913
+Author: Syndamia <kamen@syndamia.com>
+Date: Wed Nov 8 19:38:34 2023 +0200
+
+ [CI/PA2] Added symbolic link
+
+commit f781c7529c070198a569e2a412bc3363d4fe68f4
+Author: Syndamia <kamen@syndamia.com>
+Date: Wed Nov 8 19:36:55 2023 +0200
+
+ [CI/PA2] Added initial setup with a rough grammar
+
+commit d4366c2eeb49a37cd50db3962d5489e453a1f18c
+Author: Syndamia <kamen@syndamia.com>
+Date: Wed Nov 8 13:26:46 2023 +0200
+
+ [SP/P5] Added solutions to some exercises from today
+
+commit b9d200d296d362b2f3191ac8f2164a0bbc79b2a6
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Nov 7 20:58:46 2023 +0200
+
+ [LP] Solved some example exercises
+
+commit 270c189a94733693a9cbccfffebf7d31a8643dfd
+Author: Syndamia <kamen@syndamia.com>
+Date: Wed Oct 25 22:06:54 2023 +0300
+
+ [CI/H3] Finished homework
+
+commit 8bb58c74e86c4efe0870ba0f9c4820071bec19db
+Author: Syndamia <kamen@syndamia.com>
+Date: Wed Oct 25 19:59:07 2023 +0300
+
+ [CI/H3] Started work on this week's homework
+
+commit 65bdc35e6f82ba0fa0259166005263a1fc9795c9
+Author: Syndamia <kamen@syndamia.com>
+Date: Wed Oct 25 11:02:02 2023 +0300
+
+ [SP/P4] Solved all exercises
+
+commit 497f44a6c31b3976428e62db1f62c76be754f024
+Author: Syndamia <kamen@syndamia.com>
+Date: Thu Oct 19 13:04:17 2023 +0300
+
+ [CI] Ignore .bash_history
+
+commit 22d5e300e46a8baeb4bd597c31f552e3ed2e4510
+Author: Syndamia <kamen@syndamia.com>
+Date: Thu Oct 19 13:03:32 2023 +0300
+
+ [CI/PA1] Created separate folder and added symlink to cool.flex for convinience
+
+commit 41bb749850f5ff41441b6e20b5a8385b565ff479
+Author: Syndamia <kamen@syndamia.com>
+Date: Thu Oct 19 12:57:03 2023 +0300
+
+ [CI/Dockerfile] Added user kamen with homedir being /usr/code
+
+commit 941281d41bec707fbaf48c530fc9666bd59070db
+Author: Syndamia <kamen@syndamia.com>
+Date: Thu Oct 19 12:56:15 2023 +0300
+
+ [CI/PA1] Ignore cool-lex.cc
+
+commit b04065e59bed8334794bc657e83e1dd89ef077ae
+Author: Syndamia <kamen@syndamia.com>
+Date: Thu Oct 19 12:51:23 2023 +0300
+
+ [CI/PA1] Reworked escapeString to be more robust and simpler
+
+commit 54df57e7cc0dd58f56a8657cfb68e91164483038
+Author: Syndamia <kamen@syndamia.com>
+Date: Thu Oct 19 12:50:47 2023 +0300
+
+ [CI/PA1] Reworked formatting from tabs to spaces
+
+commit 1975a6e8f80d06571c7990e2a3af387889160c36
+Author: Syndamia <kamen@syndamia.com>
+Date: Thu Oct 19 11:51:41 2023 +0300
+
+ [CI/PA1] Reworked certain regexes into definitions
+
+commit aee3bfe71cba2c1cb7c5e768288281bf42b6baea
+Author: Syndamia <kamen@syndamia.com>
+Date: Thu Oct 19 11:50:08 2023 +0300
+
+ (CI/PA1) Reworked certain comments
+
+commit 5d36bfc9517c9655c34b3690f3d125839acb375f
+Author: Syndamia <kamen@syndamia.com>
+Date: Thu Oct 19 11:49:19 2023 +0300
+
+ (CI/PA1) Fully implemented strings
+
+commit bfa5f22920c704da543e5c51d3b3435a84adc004
+Author: Syndamia <kamen@syndamia.com>
+Date: Thu Oct 19 11:17:44 2023 +0300
+
+ [CI/PA1] Added string errors on null character, unterminated strings and EOF
+
+commit bd174712cd01429682377f9baabe173049112c47
+Author: Syndamia <kamen@syndamia.com>
+Date: Thu Oct 19 11:17:08 2023 +0300
+
+ [CI/PA1] Unknown characters are printed out
+
+commit 60ef31d7b8ef34acf54cd82777e11828297dbdff
+Author: Syndamia <kamen@syndamia.com>
+Date: Thu Oct 19 11:16:56 2023 +0300
+
+ [CI/PA1] Added proper parsing of comments
+
+commit 8c775f973087d9982e3ba8c113b3f1628ee60fc6
+Author: Syndamia <kamen@syndamia.com>
+Date: Thu Oct 19 09:17:00 2023 +0300
+
+ [CI/PA1] Fixed line number with strings and implemented unterminated string and eof in string errors
+
+commit 0b26fa027ca143f086a64d412aa40a15be0e5cd7
+Author: Syndamia <kamen@syndamia.com>
+Date: Thu Oct 19 00:01:43 2023 +0300
+
+ [CI/PA1] Implemented all tokens, with esception to error and comments aren't perfect
+
+commit 4c603cf7417c83d38a517430b3feca6ba039a197
+Author: Syndamia <kamen@syndamia.com>
+Date: Wed Oct 18 19:46:32 2023 +0300
+
+ [CI/PA1] Initial testing structure for lexer
+
+commit cb15f80ab6702bd0fada18a2ec5fba23c76520b6
+Author: Syndamia <kamen@syndamia.com>
+Date: Wed Oct 18 18:57:25 2023 +0300
+
+ [CI] Fixed stop.sh not removing container
+
+commit 16c1af4c2ef7fac650a84c38e7edd1b0cf99719e
+Author: Syndamia <kamen@syndamia.com>
+Date: Wed Oct 18 18:57:15 2023 +0300
+
+ [CI] Ignored grading stuff
+
+commit 4ccaf45de0712b40b41c69d2d6a1ac95cfe9ad6b
+Author: Syndamia <kamen@syndamia.com>
+Date: Wed Oct 18 18:57:03 2023 +0300
+
+ [CI] Added vim
+
+commit d5d5288e0d8baf91f01e59dd1bb86bda26f0472e
+Author: Syndamia <kamen@syndamia.com>
+Date: Wed Oct 18 18:38:13 2023 +0300
+
+ [CI] Configured environment for first coursework
+
+commit c43a57130601e63ccdd70b0dfd0a5d2bf5bef3a6
+Author: Syndamia <kamen@syndamia.com>
+Date: Wed Oct 18 18:26:05 2023 +0300
+
+ [CI] Added docker setup
+
+commit 3ba593c0c4da762969a48a5c89c4a096e93680a5
+Author: Syndamia <kamen@syndamia.com>
+Date: Wed Oct 4 10:20:22 2023 +0300
+
+ [SP/P1] Solved all exercises
+
+commit 91d5a6e02ebb1535026887d49da3ef2f48406519
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon Aug 28 15:35:33 2023 +0300
+
+ [WGL/P/level] Reset looking direction upon load
+
+commit 919051f1a0e03b0f28c7f8966ea3d02d088271e2
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon Aug 28 15:27:00 2023 +0300
+
+ [WGL/P] Wording changes
+
+commit bffc1e1419bf06be04d7650b0a04376b54419fa0
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon Aug 28 15:13:17 2023 +0300
+
+ [WGL/P] Minor formatting changes
+
+commit c9422f9e7c2d2d4e87a013783439376cdf77b466
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon Aug 28 15:13:02 2023 +0300
+
+ [WGL/P] Made ambient light brighter
+
+commit e30cf6167ef469413055075d8413e33c75714f08
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon Aug 28 15:12:42 2023 +0300
+
+ [WGL/P/level] Added three more levels
+
+commit c73c206450d22c9ada83b8026588c1bdf0a7e10f
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon Aug 28 15:12:22 2023 +0300
+
+ [WGL/P/shaders] Moved ray hit detection to it's own function and added support for stars that are in front of a black hole
+
+commit 8522d61351796b1c88c41bfc2b8b4fa130c73371
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon Aug 28 13:09:29 2023 +0300
+
+ [WGL/P] Improved wording
+
+commit 855063191ecec60c8cff468fd8f8302b41bf05a1
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon Aug 28 13:09:23 2023 +0300
+
+ [WGL/P] Limited precision of shown coordinates
+
+commit 16df4d95eaa0c8ab5566c2fa6693834269eae774
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon Aug 28 13:03:21 2023 +0300
+
+ [WGL/P] Improved wording
+
+commit 53c352887fdb3e0345e97c2760d8f7985a1bfc48
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon Aug 28 13:01:49 2023 +0300
+
+ [WGL/P] Added a lot of comments and reworked formatting of certain code
+
+commit 8861a3e72f28f1757954c7f20ebeb469980f573a
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon Aug 28 12:26:27 2023 +0300
+
+ [WGL/P] Changed message styling when there is no webgl context or javascript
+
+commit 3ec5d96e3cf120178fc562ca0e2bc6749d9b0c63
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon Aug 28 12:10:58 2023 +0300
+
+ [WGL/P] Styling and wording changes
+
+commit e21d7a6a0f239f4310cb3a23b7b96d5846bbf63d
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon Aug 28 12:10:34 2023 +0300
+
+ [WGL/P] Fixed "tearing" that can sometimes be seen when the camera is close to the event horizon
+
+commit ce3ddd0ac87e9642851759a92fc99b24339533f6
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon Aug 28 12:09:33 2023 +0300
+
+ [WGL/P] Added a setting for disabling ray marching
+
+commit baade692399d125001e00d08afc68c1e253eaae4
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon Aug 28 11:42:02 2023 +0300
+
+ [WGL/P] Minor styling changes
+
+commit 4fe99a027dea39a7dd175fbc0cd7f95eef8f00c3
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon Aug 28 11:41:41 2023 +0300
+
+ [WGL/P] Implemented an fps counter
+
+commit 9adcc3c78ef446761a02d9fd528e9306f324ad19
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon Aug 28 11:40:55 2023 +0300
+
+ [WGL/P] Time now actually is in tents of a second
+
+commit 0f4e5c5bd94d6bf298b6791715cc03ad1f053415
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon Aug 28 11:30:33 2023 +0300
+
+ [WGL/P] Fixed perspective updating
+
+commit b83cc14f57ba8d763dffe38598622b0103c60500
+Merge: ad27763 bb90b0e
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon Aug 28 11:18:01 2023 +0300
+
+ WIP on main: ad27763 [WGL/P] Minor style changes and fixed level loading
+
+commit bb90b0ea67c41a045962b70c66a5e4092f6235b0
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon Aug 28 11:18:01 2023 +0300
+
+ index on main: ad27763 [WGL/P] Minor style changes and fixed level loading
+
+commit ad2776375379600364882b9515d049509509903b
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon Aug 28 10:08:33 2023 +0300
+
+ [WGL/P] Minor style changes and fixed level loading
+
+commit 43d4296dc06b1d696fe4b236e614a04cb0705b04
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun Aug 27 16:25:31 2023 +0300
+
+ [WGL/P] Renamed debug mode to debuggning colors in menu for better understanding
+
+commit 7c1aa8b8aac9a61eb52116a5b7f16ba1013b8453
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun Aug 27 16:24:39 2023 +0300
+
+ [WGL/P] Added a second level
+
+commit d31ecfbf0e16069163e82ee33f815174de2391f6
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun Aug 27 16:24:25 2023 +0300
+
+ [WGL/P] Added coordinates in the top left corner
+
+commit 034d9301fdd5cc70648e2cd9a6ae202b89eebe39
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun Aug 27 16:03:21 2023 +0300
+
+ [WGL/P] Animation can now depend on time and changed first level so sun moves back and forth
+
+commit d8015a3653bb820f7df93660fe7dfa2368690312
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun Aug 27 15:32:04 2023 +0300
+
+ [WGL/P] You can now pause and unpause with the escape key
+
+commit 17708867019c5fcdc68b0f7f4725aede551fc94a
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun Aug 27 15:26:07 2023 +0300
+
+ [WGL/P] Fixed start moving making the canvas blank
+
+commit 52ca40b96baa6bd0f4bce48a69b9bb34582386f3
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun Aug 27 15:14:52 2023 +0300
+
+ [WGL/P] Added movement pausing
+
+commit 8608f2c0e0d02e58df9280eab03a6b7a96acd5f1
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun Aug 27 14:58:32 2023 +0300
+
+ [WGL/P] Added a proper level management system, added more options to the menu
+
+commit 2ca6d751de5c6933e6d75289d184a980131036a2
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun Aug 27 13:51:02 2023 +0300
+
+ [WGL/P] Fixed linePointDistance so we can account for points behind the objects
+
+commit 46ee648fff31004221d307d0af9cabc0c4250a4c
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun Aug 27 12:01:37 2023 +0300
+
+ [WGL/P] Minor formatting and naming changes
+
+commit 87e9c9fa25b21bec3a658dcebc6c765a511d838e
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun Aug 27 11:44:43 2023 +0300
+
+ [WGL/P] Slight code reorganisation, moved buffer logic for black holes in BlackHole and exported count limits as global variables
+
+commit 35fce31dd69c7a3524d1455dfe8c3244a3bbc630
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun Aug 27 11:14:49 2023 +0300
+
+ [WGL/P] Implemented changing star location and moved the gl buffer setup in there
+
+commit 70dc2d83a54fe43050c34d6f91ba5a71fdb35d65
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun Aug 27 11:13:08 2023 +0300
+
+ [WGL/P] Implemented correct ray rotation, following Riccardo Antonelli's formula
+
+commit d274224365fb781c93122f1f586d5221e281ae93
+Author: Syndamia <kamen@syndamia.com>
+Date: Sat Aug 26 20:51:37 2023 +0300
+
+ [WGL/P] Implemented a better but still wrong ray rotation
+
+commit 7526ea8de723888211101278198dc7a454024b84
+Author: Syndamia <kamen@syndamia.com>
+Date: Sat Aug 26 16:14:05 2023 +0300
+
+ [WGL/P] Implemented crude ray rotation around black holes
+
+commit 7994fe1a000768b6ad21997039ab5960d4c530af
+Author: Syndamia <kamen@syndamia.com>
+Date: Sat Aug 26 14:25:30 2023 +0300
+
+ [WGL/P] Fully implemented ray tracing
+
+commit f5fa572ab70664129ae8c2d81665752f0f8f7f88
+Author: Syndamia <kamen@syndamia.com>
+Date: Sat Aug 26 13:59:14 2023 +0300
+
+ [WGL/P] Properly implemented ray tracing, though there are issues
+
+commit 866b2608dfbc53dcd968bdf3261005a9e0be8b36
+Author: Syndamia <kamen@syndamia.com>
+Date: Fri Aug 25 21:26:38 2023 +0300
+
+ [WGL/P] Added most proper shader code, now have two roadblocks
+
+commit 6dd51a351bebd3347c1c4d9d8caf4d7b2f2a4338
+Author: Syndamia <kamen@syndamia.com>
+Date: Fri Aug 25 13:39:13 2023 +0300
+
+ [WGL/P] Implemented very roughly simple ray marching, without support for anything
+
+commit 10889181959cada7e397ac377cb6d43dd977cf62
+Author: Syndamia <kamen@syndamia.com>
+Date: Thu Aug 24 20:28:47 2023 +0300
+
+ [WGL/P] Added basic UI when you aren't moving around
+
+commit b9ee09f239f0b3e7014d36ac134e9c895092b19f
+Author: Syndamia <kamen@syndamia.com>
+Date: Thu Aug 24 19:52:22 2023 +0300
+
+ [WGL/P] Removed body margin
+
+commit 83de35374eb0ed45e561536a0d60f266a8ef1ab0
+Author: Syndamia <kamen@syndamia.com>
+Date: Thu Aug 24 19:50:55 2023 +0300
+
+ [WGL/P] Added a very simple skybox
+
+commit 4d1070d418e1a145d54d927440e500ba307e2431
+Author: Syndamia <kamen@syndamia.com>
+Date: Thu Aug 24 19:01:35 2023 +0300
+
+ [WGL/P] Finished movement controller
+
+commit 517cd733258ce53b3d96bf04d427451278bc546e
+Author: Syndamia <kamen@syndamia.com>
+Date: Thu Aug 24 17:04:20 2023 +0300
+
+ [WGL/P] Removed old black hole logic, started rework on movement, proper forward, backward, up, down movement and horizontal mouse movement
+
+commit 2aacf1b28daa876123919f7fab67f2a538864ee6
+Author: Syndamia <kamen@syndamia.com>
+Date: Thu Aug 24 13:02:16 2023 +0300
+
+ [OS] Added some work I did a while ago
+
+commit 1d1f9e1e713a8b6a786f2b191d8a9db5f1dca79f
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Jun 13 21:09:43 2023 +0300
+
+ [DAA/P/HW4] Solved
+
+commit 8365e42b1c53f70ca9e1dc84303cdab6924f0a64
+Author: Syndamia <kamen@syndamia.com>
+Date: Thu Jun 8 19:09:54 2023 +0300
+
+ [CN/P] Reduced image sizes
+
+ Converted some images to jpeg (the ones which will have it's size reduced)
+ Left full quality files in img-png-source
+
+commit 9184807f4d2fc49043b84e72c8c452afd5bf8d3d
+Author: Syndamia <kamen@syndamia.com>
+Date: Thu Jun 8 18:02:38 2023 +0300
+
+ [CN/P] Final adjustments
+
+commit 4cfe54f8eecf890d4f0295ed6bf93cbc3e776266
+Author: Syndamia <kamen@syndamia.com>
+Date: Wed Jun 7 10:02:06 2023 +0300
+
+ [CN/H3] Updated wording and added more detail to exercises 1 and 2
+
+commit 9e9ace0b5ed46aa8162f3b50e4d7b4c9fc02ec6d
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun Jun 4 20:05:34 2023 +0300
+
+ [CN/P/Lab07] Post-shutdown changes
+
+commit 885d06b5385362af57aebb40e93e3628983fb054
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun Jun 4 20:04:53 2023 +0300
+
+ [CN/P] Finished first exercise
+
+commit a989c33e610b495b8a096d28b9f9391669bb4dfe
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun Jun 4 17:20:08 2023 +0300
+
+ [CN/P] Added helper script for configuring routers and "servers"
+
+commit 5dfcc99c3c67e3b55ce98b76862e28ecd556628d
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun Jun 4 17:19:53 2023 +0300
+
+ [CN/P/Lab07] Finished setup
+
+commit d5038b843d16aadffab19c19955abe264200bbc6
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun Jun 4 13:50:08 2023 +0300
+
+ [CN/P] Filled tables
+
+commit bf7f29c212dd68f1ce8d75dcc37e633737b1de06
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun Jun 4 13:50:00 2023 +0300
+
+ [CN/P/Lab07] Recreated layout
+
+commit 93199401f1b60e480cfbc4e346d379ef3a470ede
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun Jun 4 11:48:01 2023 +0300
+
+ [CN/H3] Removed FN
+
+commit 2f3876e381720299290529013734f706186a779c
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun Jun 4 11:40:31 2023 +0300
+
+ [CN/Labs] Added boxes with username and password for routers
+
+commit 986222c2e88bc805273c69f1651943f3ad8730a8
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun Jun 4 11:25:04 2023 +0300
+
+ [CN/lab05-1] Fixed name
+
+commit 6e9e7482f15d3c771be48b31227696eb5d4a7c88
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun Jun 4 11:22:15 2023 +0300
+
+ [CN/lab06] Solved
+
+commit d7418b8de6cc1c184afe56533922eb7ecb261284
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun Jun 4 10:02:19 2023 +0300
+
+ [CN/lab05] Solved both exercises from lab 5
+
+commit e1ce0d306f5a52955e17b9c5888fd6b82b5847ae
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun Jun 4 10:01:50 2023 +0300
+
+ [.gitignore] Added GNS3 ignores
+
+commit d71ccd4a785ae2df50de98acd896377d195399ee
+Author: Syndamia <kamen@syndamia.com>
+Date: Sat Jun 3 19:51:30 2023 +0300
+
+ [CN/lab04] Solved
+
+commit ca7e4bc47ac0427dc127fae68efee1bfd0777cce
+Author: Syndamia <kamen@syndamia.com>
+Date: Sat Jun 3 17:06:19 2023 +0300
+
+ [CN/labs03] Added unsaved PC ip configurations
+
+commit 3330f736ff3d64b183edb85d16e0234fb694914c
+Author: Syndamia <kamen@syndamia.com>
+Date: Sat Jun 3 16:44:18 2023 +0300
+
+ [CN/labs] Added solutions to lab01, lab02 and lab03
+
+commit dce843b94805c7e71b63d82a351af417e7be8278
+Author: Syndamia <kamen@syndamia.com>
+Date: Sat Jun 3 15:33:50 2023 +0300
+
+ [CN] Moved homeworks to root of subject folder
+
+commit e53d0cda243a1e7e323fec49cb382991bbed3574
+Author: Syndamia <kamen@syndamia.com>
+Date: Sat Jun 3 15:28:50 2023 +0300
+
+ [CN/H3] Finished exercises 1 and 2, added date, fixed homework number
+
+commit e3614450c9e594bac4d9272dcbf4afac4c79e8b0
+Author: Syndamia <kamen@syndamia.com>
+Date: Fri Jun 2 18:01:15 2023 +0300
+
+ [LP] Added solution to practical exercise in sample exam
+
+commit 5591dff4cacc911cdfb022f3fc468e8dfd9acff4
+Author: Syndamia <kamen@syndamia.com>
+Date: Fri Jun 2 16:17:01 2023 +0300
+
+ [LP] Solved most exercises
+
+commit 2684f3814e980921e215f9341ae2e84884aa5038
+Author: Syndamia <kamen@syndamia.com>
+Date: Wed May 31 20:16:50 2023 +0300
+
+ [A2/H3/E2] Added Horner table link in comments
+
+commit 9b53be70d22379fe830a1935691e970836903f80
+Author: Syndamia <kamen@syndamia.com>
+Date: Wed May 31 20:16:29 2023 +0300
+
+ [A2/H3/E3] Solved
+
+commit 749efbbc09935d93b7581eecae14c9b3ad580209
+Author: Syndamia <kamen@syndamia.com>
+Date: Wed May 31 16:21:12 2023 +0300
+
+ [A2/H3/E2] Solved
+
+commit 02279d0d0ed247d32ba39a85a97882505e83bb83
+Author: Syndamia <kamen@syndamia.com>
+Date: Wed May 31 14:40:20 2023 +0300
+
+ [A2/H3/E4] Solved
+
+commit ffa23d135939530e1e3f2324674d3c1f45a06ec9
+Author: Syndamia <kamen@syndamia.com>
+Date: Wed May 31 13:39:43 2023 +0300
+
+ [CN/H3] Added skeleton
+
+commit 8b40b2c2ebbe1747ffe2c628606c897f8d4c5591
+Author: Syndamia <kamen@syndamia.com>
+Date: Wed May 31 11:02:03 2023 +0300
+
+ [A2/H3/E1] Fixed homework number
+
+commit 8231e75b2f757ee00cef249d26809a5c80538418
+Author: Syndamia <kamen@syndamia.com>
+Date: Wed May 31 11:01:00 2023 +0300
+
+ [A2/H3/E1] Solved
+
+commit 6d9793e5ddf107fce88cec7c5fc826f6557fca51
+Author: Syndamia <kamen@syndamia.com>
+Date: Fri May 26 12:03:45 2023 +0300
+
+ [DAAP] Started work on exercise 151 from action arena
+
+commit 9d0ff8e3ea71b778969f5fb830c771ee0f47be49
+Author: Syndamia <kamen@syndamia.com>
+Date: Fri May 26 08:52:50 2023 +0300
+
+ [DAAP/H3] Reworked entirely solution with unionfind
+
+ 100/100
+
+commit 5c26b2c03c5f146c4e5a44c27d0303d7c684c078
+Author: Syndamia <kamen@syndamia.com>
+Date: Thu May 25 17:03:58 2023 +0300
+
+ [CN/H1] Fixed typo
+
+commit 0e49626a3d490a94109058e49964bfe2e4fca374
+Author: Syndamia <kamen@syndamia.com>
+Date: Thu May 25 16:43:01 2023 +0300
+
+ [CN/H1] Updated solutions to have explanations
+
+commit 14e41732ebea0d1f473e49193fc710dd5c3c73c0
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon May 22 13:00:42 2023 +0300
+
+ [DAAP/H3] Added somewhat working solution
+
+ 30/100 points
+
+commit 6bbbbf7bbc7d3b1b3a5949ecda077be708df2af2
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon May 22 11:41:46 2023 +0300
+
+ [DAAP/H2] Completely solved homework1
+
+ 100/100 points
+
+commit c6771d47de5d55edf9a97605889ba75f1579d9af
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon May 22 10:52:31 2023 +0300
+
+ [DAAP/H2] Improved Deijkstra solution
+
+commit 26ad55a1c9bd60b5eb08205fa5bca7fd577b0637
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon May 22 09:28:06 2023 +0300
+
+ [DAAp/H2] Reworked solution to use Deijkstra, got half points
+
+commit 98e9ff8416cb99814f200866dc8eb44040b01e5b
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon May 22 06:54:16 2023 +0300
+
+ [DAAP/H2] Added initial solution to homework
+
+ That times out
+
+commit 11758bb746a3515562faf949dc6e105dce27dac2
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun May 21 20:17:38 2023 +0300
+
+ [DAAP] Added old first homework
+
+ From a month ago
+
+commit e47c57a92d07f40d792b4a22c9934e0502c75aad
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun May 21 20:14:51 2023 +0300
+
+ [DAAP] Added exercises from second exam
+
+commit 6ffcfb17f058217f1353cbfd6fa3e8e9cc9681a4
+Author: Syndamia <kamen@syndamia.com>
+Date: Sat May 20 20:32:38 2023 +0300
+
+ [DAAP] Solved an exercise from olimpiici
+
+commit fc05234646ea00ca5afa5d8826fcb6261f3876d7
+Author: Syndamia <kamen@syndamia.com>
+Date: Fri May 19 17:11:11 2023 +0300
+
+ [CN/H2] Solved homework
+
+commit 2fd5ec253db5773a7c59d024e5b20b34f8f01c51
+Author: Syndamia <kamen@syndamia.com>
+Date: Fri May 19 15:33:52 2023 +0300
+
+ [CN/H1] Solved homework
+
+commit 45892409d0555969bbf7a192960fb3de9cd948d9
+Author: Syndamia <kamen@syndamia.com>
+Date: Fri May 12 23:52:38 2023 +0300
+
+ [A2/H2] Solved homework
+
+commit f2ac1662504c72122bf9b77fe265095b58dab575
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon Apr 10 09:48:06 2023 +0300
+
+ [DAA/E1] Added work from first exam from yesterday
+
+commit fe5a64bc48dd8b440fe13883f47c8fe5938ba080
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon Apr 10 09:39:52 2023 +0300
+
+ [DAA/i198] Added current work on maycamp previous exam exercises
+
+commit 279f7c5a31c9e90cae0f3645a3aa6c528a008e0b
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon Apr 10 09:39:20 2023 +0300
+
+ [DAA//128] Added current work on action exercise
+
+commit 03def7424fb436482218d6e1f33c27c95dd055ea
+Author: Syndamia <kamen@syndamia.com>
+Date: Fri Apr 7 21:21:24 2023 +0300
+
+ [DAA/H2] Finished 3rd exericse
+
+commit 975290800989e12db0e5263f847a64181d8d0e19
+Author: Syndamia <kamen@syndamia.com>
+Date: Fri Apr 7 21:12:57 2023 +0300
+
+ [A2/H1/E3] Removed cycle commas
+
+commit 0356e66bc9c5719a90f3edf9868cd3c4d0e31e48
+Author: Syndamia <kamen@syndamia.com>
+Date: Fri Apr 7 17:27:26 2023 +0300
+
+ [A2/H1] Final formatting touches
+
+commit 081a9a8e11941f463f8631e25a28e9c6e97f18e9
+Author: Syndamia <kamen@syndamia.com>
+Date: Fri Apr 7 17:14:55 2023 +0300
+
+ [A2/H1] Finished exercise 1-3
+
+commit 2e738ecf4a506fa673ef6d27a4b17cb26958356a
+Author: Syndamia <kamen@syndamia.com>
+Date: Thu Apr 6 20:04:00 2023 +0300
+
+ [A2/H1/E3] Working draft of exercise 3
+
+commit ec551876a91851ec483e86d80c2a85d9249d7bf1
+Author: Syndamia <kamen@syndamia.com>
+Date: Thu Apr 6 20:03:41 2023 +0300
+
+ [A2/H1/E2] Solved second exercise
+
+commit e1a0c997b7a088254ca1e2d05263cd03c7f1a681
+Author: Syndamia <kamen@syndamia.com>
+Date: Thu Apr 6 20:03:17 2023 +0300
+
+ [A2/H1/E1] Solved first exercise
+
+commit c8672debf89ce978de350bf59c7cb537cbf267e9
+Author: Syndamia <kamen@syndamia.com>
+Date: Thu Apr 6 15:53:06 2023 +0300
+
+ [DAA/H2] Finished everything except ex 3.1.
+
+commit 8ff247409a63a804b6ffebe449e680c30338888d
+Author: Syndamia <kamen@syndamia.com>
+Date: Wed Apr 5 11:28:43 2023 +0300
+
+ [DAAP] Maycamp exercise
+
+commit 7ce1482f4aa4376adc2de1879d949a9da24b0b69
+Author: Syndamia <kamen@syndamia.com>
+Date: Wed Apr 5 10:36:12 2023 +0300
+
+ [DAAP] Renamed arena to action arena
+
+commit 0320df7a3aed3024a60165a7822522dc863efe0d
+Author: Syndamia <kamen@syndamia.com>
+Date: Wed Apr 5 10:14:09 2023 +0300
+
+ [DAAP] Solved arena exercise
+
+commit bf342b5369bb9eaf86827cd8a64fc965705d64fe
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon Apr 3 23:02:45 2023 +0300
+
+ [DAA/H2] Solved 1st exercise and sketched out the other two
+
+commit 39d750fbdd3d066d31a3ca3e015a876758069b6a
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon Mar 27 21:01:27 2023 +0300
+
+ [DAA/H1] Fixed last part of 3rd exercise
+
+commit f04cedc23e57fdf679ff4edc9761dce8b1d6a0c4
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon Mar 27 17:50:48 2023 +0300
+
+ [DAA/H1] Added missing part from ex3 and did minor formatting changes
+
+commit 46a127b42678f79827fd558e05a7334dabce0a98
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon Mar 27 17:00:38 2023 +0300
+
+ [DAA/H1] Fixed typo with z in ex 2
+
+commit 537f74d46862f96f8370a212749791bdf3034514
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon Mar 27 16:51:28 2023 +0300
+
+ [DAA/H1] More minor tweaks and fixes
+
+commit 559d014561979fbb7d7bb693d87147ff61c156ed
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon Mar 27 16:10:34 2023 +0300
+
+ [DAA/H1] Minor tweaks and fixes to wording
+
+commit 6862264cc8441f477dd1dacc428712b5205b2c69
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun Mar 26 13:46:05 2023 +0300
+
+ [DAA/H1] Solved third exercise
+
+commit e09c4fda1238851e6ee43756e3a76be3afdef761
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun Mar 26 10:40:21 2023 +0300
+
+ [DAA/H1] Solved second exercise
+
+commit 8e4dd12c9d71df75ff7864191085c97278d6c178
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun Mar 26 09:31:44 2023 +0300
+
+ [DAA/H1] Solved first exercise
+
+commit 2589290a7dc34c5f6d1cfc48ae8c6adf708729f2
+Author: Syndamia <kamen@syndamia.com>
+Date: Sat Feb 11 15:38:33 2023 +0200
+
+ [IPL/T] Finished grammar and makefile compilation
+
+commit a35a987997415dc8af71a3524ed19fc9bc4896e7
+Author: Syndamia <kamen@syndamia.com>
+Date: Thu Feb 9 14:57:19 2023 +0200
+
+ [WGL/P] Added semi-working keyboard navigation and toyed around with shaders
+
+commit 74f7343e14addefc74446c19018b3f82ad961207
+Author: Syndamia <kamen@syndamia.com>
+Date: Thu Feb 9 10:58:45 2023 +0200
+
+ [WGL/P] Added initial setup
+
+commit 7cc99d560d3f36996dde0f73becd57445fc54d11
+Author: Syndamia <kamen@syndamia.com>
+Date: Wed Feb 8 12:34:27 2023 +0200
+
+ [IPL/T] Added unfinished makefile and frontend
+
+commit 90d86e8072e7246374076961a26cfd1024ac67f7
+Author: Syndamia <kamen@syndamia.com>
+Date: Wed Feb 8 11:47:28 2023 +0200
+
+ [IPL/T] Added more LLVMVisitor tests, added LLVMVisitorReturn and Register tests
+
+commit 90bf4e3fd851087a3cfc68dbfa1e8ae5c38d0456
+Author: Syndamia <kamen@syndamia.com>
+Date: Wed Feb 8 02:58:16 2023 +0200
+
+ [IPL/T] Small fixes, following creation of tests
+
+commit 67879964bbd8541a6278477964591ea443b378a9
+Author: Syndamia <kamen@syndamia.com>
+Date: Wed Feb 8 02:57:54 2023 +0200
+
+ [IPL/T] Added doctest library and added some tests
+
+commit 65b85d46c6d61534906dc019731afabd45caf5cf
+Author: Syndamia <kamen@syndamia.com>
+Date: Wed Feb 8 00:35:05 2023 +0200
+
+ [IPL/T] Memory is now being freed up
+
+commit b8d2ea4f75c21b46f37310e94d2409290b35469a
+Author: Syndamia <kamen@syndamia.com>
+Date: Wed Feb 8 00:20:02 2023 +0200
+
+ [IPL/T] Moved Funcall out of it's folder
+
+commit d0c8546702bcb021f09b3279db048894a88c179a
+Author: Syndamia <kamen@syndamia.com>
+Date: Wed Feb 8 00:14:42 2023 +0200
+
+ [IPL/T] Added some bool functions
+
+commit b21256461dae9546f6690ff3b1ea53d4c508f252
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Feb 7 23:34:43 2023 +0200
+
+ [IPL/T] Implemented if, without boolean algebra
+
+commit 95dfe7c4df8482c7b83a816917cb27605ceb3076
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Feb 7 22:06:33 2023 +0200
+
+ [IPL/T] Implemented * and /
+
+commit 7913fe2fd73b11f8b1b13d8b3e65aca66dc3282c
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Feb 7 21:55:49 2023 +0200
+
+ [IPL/T] Implemented defvar
+
+commit 34ab5a9292118dad0fa3a302282b627b2fc956b9
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Feb 7 21:17:26 2023 +0200
+
+ [IPL/T] Implemented general handling of names as variables
+
+commit 4d359b9c16b01847b26d6827e137f680c65969f2
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Feb 7 20:06:31 2023 +0200
+
+ [IPL/T] Overhauled how functions are handled, added list type
+
+commit 38c4a1355cb573d47c3e26f83ca8e916b62c80d1
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun Jan 29 20:59:11 2023 +0200
+
+ [IPL/T/README] Added a bit more information
+
+commit ab1d1ecba4f2562a8b81d887d08370d5fcf0921d
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun Jan 29 20:58:52 2023 +0200
+
+ [IPL/T] Added current progress of implementing functions
+
+commit d8eb50a7960edd35c74885d0ba7897f35c1b1eed
+Author: Syndamia <kamen@syndamia.com>
+Date: Thu Jan 19 17:43:29 2023 +0200
+
+ [IPL/T] Values now have a return value which can be parsed easily
+
+commit 07dfcf732fa7d88c196ad158ffa0326f757156b9
+Author: Syndamia <kamen@syndamia.com>
+Date: Thu Jan 19 14:56:29 2023 +0200
+
+ [IPL/T] Added main entry point and constants are now directly passed
+
+commit c42d553c7df6ae7073488cb971ea984932a86801
+Author: Syndamia <kamen@syndamia.com>
+Date: Thu Jan 19 13:55:46 2023 +0200
+
+ [IPL/T] Moved function associativity to a seperate function
+
+commit bfa6fffc85772c17219437ab99c0cc59c3056f88
+Author: Syndamia <kamen@syndamia.com>
+Date: Thu Jan 19 11:57:59 2023 +0200
+
+ [IPL/T] Add function can handle multiple arguments
+
+commit fd77c95a1042b319ec6dc0fcc10d77d0fe8af170
+Author: Syndamia <kamen@syndamia.com>
+Date: Thu Jan 19 11:50:47 2023 +0200
+
+ [IPL] Added gigignore for build files
+
+commit c9a4932e9074f395d50cffb6af02124a6acb55cd
+Author: Syndamia <kamen@syndamia.com>
+Date: Thu Jan 19 11:49:54 2023 +0200
+
+ [IPL] Removed build files
+
+commit 06006fc601ab5f7bffa095b7279a61070e38ba54
+Author: Syndamia <kamen@syndamia.com>
+Date: Thu Jan 19 11:27:31 2023 +0200
+
+ [IPL/T] Implemented Float type and added basic function structure as well as added addition function for two arguments
+
+commit 8f41c57ff12fa72693016b75fec63bb86ae6560f
+Author: Syndamia <kamen@syndamia.com>
+Date: Wed Jan 18 11:51:57 2023 +0200
+
+ [IPL/T] Implemented initial structure with Integer data type
+
+commit efbc9d2a15ac6d21caf9cb87e7e913e35f48e391
+Author: Syndamia <kamen@syndamia.com>
+Date: Sat Jan 14 18:24:51 2023 +0200
+
+ [FP/E2] Added work from second exam
+
+commit b4a0a8843c9fcde60ffdce36a474e08ebc7dcd6a
+Author: Syndamia <kamen@syndamia.com>
+Date: Sat Jan 14 10:36:03 2023 +0200
+
+ [FP] Slightly modified solutions to exercise 1 and 2 to use better constructs
+
+commit 86851d64223bc11723e3f86accb786219814a71f
+Author: Syndamia <kamen@syndamia.com>
+Date: Fri Jan 13 18:47:46 2023 +0200
+
+ [FP] Solved second exam from 2021
+
+commit 7f49623f30288f7995335fc257f0496052a4d819
+Author: Syndamia <kamen@syndamia.com>
+Date: Fri Jan 13 18:14:40 2023 +0200
+
+ [FP] Solved second exam from 2022
+
+commit 4f813adb042926e2bd87213a7d5939328dbadce8
+Author: Syndamia <kamen@syndamia.com>
+Date: Fri Jan 13 17:36:09 2023 +0200
+
+ [FP/HW3] Removed input file
+
+commit 3dd64f8dfcf6bbe728fd1075dce9b1c6abb1ee59
+Author: Kamen Mladenov <kamen@syndamia.com>
+Date: Thu Jan 12 08:58:46 2023 +0000
+
+ [FP/HW3] Post-submission fix of countUniques to accept the whole file
+
+commit 51a684a291963fbe8bb3f81ef04282233d083efa
+Author: Kamen Mladenov <kamen@syndamia.com>
+Date: Thu Jan 12 08:52:28 2023 +0000
+
+ [FP/HW4] decode now accepts a whole file
+
+commit 9d9bd35065ded1d78c9a07af2953e69fc8eb61d4
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun Jan 8 22:35:13 2023 +0200
+
+ [SDP/HEP] Added preparation for "homework" during class
+
+commit f3ee1a0ea95ebbd08dd3dcfe341c649d8ce4a8c1
+Author: Syndamia <kamen@syndamia.com>
+Date: Sat Jan 7 19:46:08 2023 +0200
+
+ [SDP/P/exa] Added sort of unsorted given cities to visit
+
+commit 3e4a9412564187665ff1a1ffa96bbeb8c093dadd
+Author: Syndamia <kamen@syndamia.com>
+Date: Sat Jan 7 19:05:34 2023 +0200
+
+ [FP/HW4] Solved exercise 2
+
+commit e3701da1f4e6d2e67c321766c0545c32014ab7b2
+Author: Syndamia <kamen@syndamia.com>
+Date: Sat Jan 7 18:08:31 2023 +0200
+
+ [FP/HW4] Drastically simplified exercise 1 and added comments
+
+commit 3143b2022ce868b043810d9b27f9837cec746291
+Author: Syndamia <kamen@syndamia.com>
+Date: Sat Jan 7 17:22:05 2023 +0200
+
+ [FP/HW4] Added a complete solution to exercise 1
+
+commit 5e595c4055876c4169e6eb7a9bcbbe67787e69ce
+Author: Syndamia <kamen@syndamia.com>
+Date: Thu Jan 5 18:28:02 2023 +0200
+
+ [SDP/E2] Added work from exam
+
+commit 6bc03d2fd5e982e33bd747b08a89f9afdb6eaccd
+Author: Syndamia <kamen@syndamia.com>
+Date: Thu Jan 5 15:24:03 2023 +0200
+
+ [FP/P13] Solved everything except last 3 exercises
+
+commit e0c385ffda9f82a96f2f03a6cea406cf0ec2b669
+Author: Syndamia <kamen@syndamia.com>
+Date: Thu Jan 5 14:42:23 2023 +0200
+
+ [FP/P12] Reworked levels tro start from 0
+
+commit 40beec7e6c43e835f15340908cf2a2feb9ed8af0
+Author: Syndamia <kamen@syndamia.com>
+Date: Thu Jan 5 14:26:15 2023 +0200
+
+ [FP/P12] Solved all exercises
+
+commit 40ffc86693349399c013de477a9e0341238c4129
+Author: Syndamia <kamen@syndamia.com>
+Date: Thu Jan 5 13:53:52 2023 +0200
+
+ [FP/P12] Added partial start to first exercise
+
+commit 0415852b08e994648c44510a510a5fca0681c5b5
+Author: Syndamia <kamen@syndamia.com>
+Date: Thu Jan 5 11:39:40 2023 +0200
+
+ [FP/P11] Solved todays practicum exercises
+
+commit dd4781364d258337e78c93c14cb14402512f89c6
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Jan 3 18:30:04 2023 +0200
+
+ [WGL/HW11] Implemented multiple function support
+
+commit 9f0700d9dc08e66e6fcba3bc59c2fab4349a32cb
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Jan 3 17:17:32 2023 +0200
+
+ [WGL/HW11] Added color support
+
+commit 948c1006729bfdcd2b5937e7c240c4df3294290e
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Jan 3 16:50:55 2023 +0200
+
+ [WGL/HW11] Simplified drag bar logic
+
+commit 76f4cc6c031b93c7e74e8d8ccd40536bf917c215
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Jan 3 16:44:08 2023 +0200
+
+ [WGL/HW11] Added horizontal scaling and removed startP and endP
+
+commit 3784bda80ccfd05ba26eca6e377a39e1aeda5f95
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Jan 3 16:15:25 2023 +0200
+
+ [WGL/HW11] Added basic function drawing and part selection
+
+commit fb7a7a1a0f66f8c5bccad284d3c142c9b79cfc09
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Jan 3 14:28:08 2023 +0200
+
+ [WGL/HW11] Added offscreen drag barriers
+
+commit 8116979415d27ad8f46d96314b26d7e2331d78b4
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Jan 3 14:17:16 2023 +0200
+
+ [WGL/HW11] Added general UI
+
+commit 5f4ed7a789dbe338a1113d5498f3038f42b6dfd6
+Author: Syndamia <kamen@syndamia.com>
+Date: Thu Dec 29 18:44:30 2022 +0200
+
+ [SDP/P] Fixed memory leaks
+
+commit 2b25a22595660765cf42cba544dfa222871f86a1
+Author: Syndamia <kamen@syndamia.com>
+Date: Thu Dec 29 18:05:47 2022 +0200
+
+ [SDP/P] Added comments and removed iostream includes where unnecessary
+
+commit c79f7ea4ac93a9b11bff676d4174f5de46e0015b
+Author: Syndamia <kamen@syndamia.com>
+Date: Thu Dec 29 17:43:27 2022 +0200
+
+ [SDP/P/exb] Solved exercise B
+
+commit 375d3979cef9a204591094b2c102036bbdd08efe
+Author: Syndamia <kamen@syndamia.com>
+Date: Thu Dec 29 10:14:26 2022 +0200
+
+ [SDP/P/exa] logic_errors are now thrown, replacing pure strings
+
+commit 77df09397e7fc517dd387d8e46d993ad30f69853
+Author: Syndamia <kamen@syndamia.com>
+Date: Thu Dec 29 10:12:20 2022 +0200
+
+ [SDP/P/exc] Added file reading
+
+commit b6e654657da058e9a438ec4583fac8028758dfb4
+Author: Syndamia <kamen@syndamia.com>
+Date: Thu Dec 29 09:09:41 2022 +0200
+
+ [SDP/P/exa] Removed hard coded example and added user input reading
+
+commit b6a3bfe4691089112d25870fbb9bcc83c67f9d26
+Author: Syndamia <kamen@syndamia.com>
+Date: Thu Dec 29 08:57:29 2022 +0200
+
+ [SDP/P/exa] Replaced parameter skiplists and stacks to deque
+
+commit 0e9be940d16311036ee36aed47406481a26fdd82
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Dec 27 12:36:09 2022 +0200
+
+ [SDP/P] Only direct subboxes are removed in third exercise
+
+commit 06e1b9276cc1c709a24665399abebcdcefd3cb3e
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Dec 27 10:40:43 2022 +0200
+
+ [SDP/P] Initial solution to first exercise in project
+
+commit a636f8b6bf4202c9cc78262ab9f42bdc842372a7
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon Dec 26 09:09:33 2022 +0200
+
+ [SDP/S09] Added solutions to all but the last two exericses
+
+commit 1c88c1dbd9c9192b3feca50d43fe92a3c1184e62
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun Dec 25 16:13:05 2022 +0200
+
+ [SDP/S08] Solved exercises from seminar
+
+commit f2ad09a66345a54ccb52299ad93612d886da7a55
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun Dec 25 15:11:16 2022 +0200
+
+ [SDP/S07] Added sorting algorithm implementations
+
+commit 593e009ac517b305dd6af7656c635f900715ce13
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun Dec 25 12:40:28 2022 +0200
+
+ [SDP/P05-06] Fixed folder dates
+
+commit e5ce6898294e7610fd6a0404ef513fddee60663d
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun Dec 25 11:17:28 2022 +0200
+
+ [FP/HW3] Added comments to first exercise
+
+commit 30c5b70d4b9b40f07bf23b1dbf5e2cd50137bbdb
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun Dec 25 11:12:12 2022 +0200
+
+ [FP/HW3] Finally created a work solution for exercise 1
+
+commit e7817a9a9646331b7a7de401d1cab9e69f5ed041
+Author: Syndamia <kamen@syndamia.com>
+Date: Thu Dec 22 12:06:30 2022 +0200
+
+ [FP/HW3] Fixed missing generation in first exercise
+
+commit de88ed815e26ef76868c2e0fb6fd069511d311d2
+Author: Syndamia <kamen@syndamia.com>
+Date: Thu Dec 22 10:50:42 2022 +0200
+
+ [FP/HW3] Added file reading to second exercise
+
+commit 2167da76effb193924ddf1bd654f7f50540e21e5
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun Dec 18 15:06:34 2022 +0200
+
+ [FP/HW3] Added comments
+
+commit d84b13e2428651b2a6887c65f3a71258e717fe8c
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun Dec 18 14:46:20 2022 +0200
+
+ [FP/HW3] Fixed skiplen missing some intermediate values
+
+commit cbcdd298a90e85053795a636694796ed197018e4
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun Dec 18 14:35:07 2022 +0200
+
+ [FP/HW3] Reworked first exercise to use tail recursion
+
+commit 9ae3405e7b1593c7f52ddc37947a4fb6181ae29a
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun Dec 18 14:26:45 2022 +0200
+
+ [FP/HW3] Solved first exercise
+
+commit 44afe3c90c7e911ab96c0971db87bafcc12e935f
+Author: Syndamia <kamen@syndamia.com>
+Date: Sat Dec 17 16:20:10 2022 +0200
+
+ [FP/HW3] Solved second exercise, without the file parsing
+
+commit 1507f3b1c71d670e618ce615f681e4e796080d20
+Author: Syndamia <kamen@syndamia.com>
+Date: Fri Dec 16 23:25:51 2022 +0200
+
+ [OKG/HW10] Solved 10th homework
+
+commit 169f7ba1ce459dad1a816fda52c06f7582f36883
+Author: Syndamia <kamen@syndamia.com>
+Date: Fri Dec 16 23:01:27 2022 +0200
+
+ [OKG/HW09] Solved 9th homework
+
+commit 0f802beae8189f9eb38ae9dca983a09a56cc160e
+Author: Syndamia <kamen@syndamia.com>
+Date: Fri Dec 16 21:03:32 2022 +0200
+
+ [WGL/H09] Added unfinished work
+
+commit 853db47482728a145f0fe9a4e2bb1035cb19cd8c
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon Dec 12 20:09:14 2022 +0200
+
+ [OKG/HWK2] Updated description
+
+commit 42a7ba5cffe9debb0f38032bf1c2794bf1aa2690
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon Dec 12 20:04:37 2022 +0200
+
+ [OKG/HWK2] Finished animating movement and camera position. Shortened audio.
+
+commit f6855e993c9ab648aff11184a53fd7bb6172e7e0
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon Dec 12 17:22:18 2022 +0200
+
+ [OKG/HWK2] Added Star Platinum and Killer Queen and animated their initial appearance
+
+commit a6afe7980ecec6718c5cc3809f302a79330288f0
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun Dec 11 22:20:09 2022 +0200
+
+ [OKG/HWK2] Animated about 30 more seconds of character movement
+
+commit c1323c84096c6c2048e53262f1eead5b50d0f52d
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun Dec 11 22:19:21 2022 +0200
+
+ [OKG/HWK2] cpos and B posture can now be null
+
+commit a940b965c3715d1a56fed4402488b3347b48fa95
+Author: Syndamia <kamen@syndamia.com>
+Date: Sat Dec 10 20:00:55 2022 +0200
+
+ [OKG/HWK2] Roughly animated about 45 seconds of the character movements
+
+commit 7cc44d228654856d7b6c81060f850ded4edc9d3f
+Author: Syndamia <kamen@syndamia.com>
+Date: Sat Dec 10 19:35:01 2022 +0200
+
+ [OKG/HWK2] Current rotation is null and is set on execution time
+
+commit ad491e40f524e9c267970081fb4afbbee9fd696d
+Author: Syndamia <kamen@syndamia.com>
+Date: Fri Dec 9 21:52:53 2022 +0200
+
+ [OKG/HWK2] Fixed blend percent calculation
+
+commit 96fd548ff23753073bcb3c8d430ce78efda8f0b6
+Author: Syndamia <kamen@syndamia.com>
+Date: Wed Dec 7 10:11:52 2022 +0200
+
+ [OKG/HW08] Solved practicum homework
+
+commit b989d1290c2c2ecdb13dd1ba6da1d0a888f56b75
+Author: Syndamia <kamen@syndamia.com>
+Date: Sat Dec 3 13:57:27 2022 +0200
+
+ [OKG/HW07] Solved last practicum homework
+
+commit b5efd4cb6b9814b06ea6db62e3b14ed9e3fcc9b4
+Author: Syndamia <kamen@syndamia.com>
+Date: Thu Dec 1 10:56:50 2022 +0200
+
+ [FP/P08] Added work from today's practicum
+
+commit 145de2095122ff862a237413ca48d12edacd0c28
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon Nov 28 17:10:22 2022 +0200
+
+ [OKG/HWK2] Implemented scene from 12-14 seconds
+
+commit 11b566156c77121cd42428617e92d084f517de7f
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon Nov 28 17:09:52 2022 +0200
+
+ [OKG/HWK2] Camera instruction can now have null values
+
+commit f74c1bf3f775c6d149195e8865778c1fc84fd217
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon Nov 28 16:34:59 2022 +0200
+
+ [OKG/HWK2] Added audio
+
+commit ae74d5db09e9d46fc52003e2557986520966b247
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon Nov 28 16:09:21 2022 +0200
+
+ [OKG/HWK2] Removed unused functions and did minor tweaks
+
+commit dc264ba3b0c3323ca5f5c2f3e602d531ab759717
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon Nov 28 16:08:46 2022 +0200
+
+ [OKG/HWK2] Fixed end time not being properly calculated
+
+commit 7da36542204ac7c5a99fbc9f111af450044fea25
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon Nov 28 15:52:07 2022 +0200
+
+ [OKG/HWK2] Reworked animationData parsing to allow higher robustness and faster framerates
+
+commit 752137a74d7e1e4988e799835135d7e7083d1165
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon Nov 28 13:57:50 2022 +0200
+
+ [OKG/P08] Added work from todays practicum
+
+commit a5ef7ce97cf5a167d19d1ee8b833f33909b7e5b3
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun Nov 27 21:07:48 2022 +0200
+
+ [WGL/HW07] Solved 7th homework
+
+commit 38073887653bef0506df8ffe88e982e5a404153f
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun Nov 27 21:07:31 2022 +0200
+
+ [WGL/P07] Solved some of the exercises from this weeks practicum
+
+commit 9dcdcfae369037ab9eb139a55c1127a79eecf553
+Author: Syndamia <kamen@syndamia.com>
+Date: Sat Nov 26 16:26:19 2022 +0200
+
+ [OKG/HW06] Solved homework
+
+commit 5e7bf3719d15769c89549d2b003178f8f64ab2d4
+Author: Syndamia <kamen@syndamia.com>
+Date: Sat Nov 26 15:17:09 2022 +0200
+
+ [WGL] Added unfinished homeworks
+
+commit b415de752e49bbee840b48bcdc5bef7972c2d265
+Author: Syndamia <kamen@syndamia.com>
+Date: Sat Nov 26 15:16:38 2022 +0200
+
+ [OKG/EE] Find path is now a parameter
+
+commit 904a52f952a8a5604c24ea8d525bf88a55bb8cee
+Author: Syndamia <kamen@syndamia.com>
+Date: Sat Nov 26 15:16:06 2022 +0200
+
+ [OKG/P07] Solved exercises from 7th practicum
+
+commit 884a3cc6d873053b72855107f9f5d95d7ad1706d
+Author: Syndamia <kamen@syndamia.com>
+Date: Thu Nov 24 20:07:46 2022 +0200
+
+ [SDP/E1] Added work from today's exam
+
+commit 81f851c6ea7988314812cf7cdb3cc94a6aa5cbf3
+Author: Syndamia <kamen@syndamia.com>
+Date: Thu Nov 24 11:58:08 2022 +0200
+
+ [FP/P07] Added work from today's practicum
+
+commit 14281c12f710ee1cb99564201ca0464e79013827
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Nov 22 15:43:07 2022 +0200
+
+ [SDP] Fixed names of seminar 2 and seminar 3 code files
+
+commit 01534f8223cd2b441488985175ed8b4bf2b2445f
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Nov 22 15:41:18 2022 +0200
+
+ [SDP/S06] Solved exercises from seminar 6
+
+commit 6fce95f36f87fb3e67656c84dfc137d07039ae1e
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Nov 22 14:59:24 2022 +0200
+
+ [SDP/S05] Solved exercises from seminar 5
+
+commit 5d3068ca66b2f55858cfd6336c72d15eac433c88
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Nov 22 13:41:16 2022 +0200
+
+ [SDP/S04] Solved exercises from seminar 4
+
+commit 2766c68912a2d463de1f5714569c2457c34d6215
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Nov 22 12:51:54 2022 +0200
+
+ [SDP/S03] Solved ex1 and ex2 from third seminar
+
+commit 59184db96d33777c4acd07f99d720a3133d4490e
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Nov 22 10:53:39 2022 +0200
+
+ [OKG/HWK2] Improved property approximation functionality
+
+commit 322afc39668ecd3d1a45dfc9e575187828759b77
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Nov 22 10:37:14 2022 +0200
+
+ [OKG/HWK2] Added rotation capabilities to animationData
+
+commit 99d891a2e88eb93280b9e0ce31eaca011d105f84
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Nov 22 10:25:34 2022 +0200
+
+ [OKG/HWK2] animationData property getting is approximated
+
+commit 24654eb67a15b11cd1f896840327d411ce354b77
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Nov 22 09:40:05 2022 +0200
+
+ [OKG/HWK2] Posture B's body Y is now also fixed with function
+
+commit 9063312de28be28c1ee7fdcfce6266706dcdbdba
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Nov 22 09:38:43 2022 +0200
+
+ [OKG/HWK2] Posture A can now be taken from the mannequin itself
+
+commit 24f4426b444b22177845bc1d12826b2a153c31a4
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon Nov 21 22:13:57 2022 +0200
+
+ [OKG/HWK2] Semi-implemented camera movement in animationData
+
+commit 681f3591bf2f3e38c70d4eda4ac9cc9b428de7f0
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon Nov 21 20:59:48 2022 +0200
+
+ [OKG/HWK2] Added the ability to change position in animation frame
+
+commit b2cc734e39cf59fd311e66f8888f23ccbf107c55
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon Nov 21 20:32:41 2022 +0200
+
+ [OKG/HWK2] Implemented system for easy animation management and creation
+
+commit 6c4de74e8739761fd0016268419f010ce6f05c47
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon Nov 21 19:52:31 2022 +0200
+
+ [OKG/HWK2] Fixed AmbientLight warnings
+
+commit c38a0381653100ecff778d408adac7205ad4a39d
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon Nov 21 19:48:42 2022 +0200
+
+ [OKG/HWK2] Implemented a simple way of setting what the camera is looking at
+
+commit f1497db5420996ac02de878ad347c9cfbf25ff1d
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon Nov 21 19:37:05 2022 +0200
+
+ [OKG/HWK2] Added patio road and bushes to middle building place
+
+commit c012b272f5532386c7b887a526798454ed899062
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon Nov 21 19:23:10 2022 +0200
+
+ [OKG/HWK2] Added bushpots to tailor shop
+
+commit dde098328c2b313150ae78d1ccf6e753a0da48ef
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun Nov 20 22:10:36 2022 +0200
+
+ [WGL/H06] Started work on homework
+
+commit fbd8549adcc49736f4ea659bd607faa38df3c5ab
+Author: Syndamia <kamen@syndamia.com>
+Date: Sat Nov 19 18:27:06 2022 +0200
+
+ [FP/EX1] Added work from today's exam
+
+commit 6ae268800efbf1027d096b5aec7907a874963955
+Author: Syndamia <kamen@syndamia.com>
+Date: Sat Nov 19 11:25:48 2022 +0200
+
+ [OKG/HWK2] Added tailor shop and added a function for automatic shadow cast setting
+
+commit e98edd67719e721faf197d60d45fe16b81116f48
+Author: Syndamia <kamen@syndamia.com>
+Date: Sat Nov 19 09:26:55 2022 +0200
+
+ [OKG/HWK2] Added Koichi in his fallen down state
+
+commit 423c6d2de001d4549ccaab927e4f2cc9595afaa3
+Author: Syndamia <kamen@syndamia.com>
+Date: Sat Nov 19 08:58:05 2022 +0200
+
+ [OKG/HWK2] Updated outside wall generation, moved objects and animation above functions, changed lighting and camera position
+
+commit 3b9c0e6c505af3bad47b9152f5e8852987667a4d
+Author: Syndamia <kamen@syndamia.com>
+Date: Fri Nov 18 22:53:41 2022 +0200
+
+ [OKG/HWK2] Added some outside walls
+
+commit e813373a41aa5ed0b536dd1bd89545f9d0260560
+Author: Syndamia <kamen@syndamia.com>
+Date: Fri Nov 18 22:21:03 2022 +0200
+
+ [OKG/HWK2] Added Koichi
+
+commit 70d5bfaa475c3f52725bb97982c6d1e9c3b711dc
+Author: Syndamia <kamen@syndamia.com>
+Date: Fri Nov 18 22:13:57 2022 +0200
+
+ [OKG/HWK2] Updated title and description
+
+commit 331a366bd933cfd5028e7b9f11b58797bc5438e9
+Author: Syndamia <kamen@syndamia.com>
+Date: Fri Nov 18 22:10:34 2022 +0200
+
+ [OKG/HWK2] Fixed z-buffer fight of Jotaro hat ornament
+
+commit be047358124ce61d550cbe00cb12ab9865aa7b51
+Author: Syndamia <kamen@syndamia.com>
+Date: Fri Nov 18 22:09:34 2022 +0200
+
+ [OKG/HWK2] Fixed Jotaro brim length
+
+commit e7d76a956c97a8a55a526ad5bf704cb14235331a
+Author: Syndamia <kamen@syndamia.com>
+Date: Fri Nov 18 22:08:15 2022 +0200
+
+ [OKG/HWK2] Fixed Jotaro y position
+
+commit 38159b322479deac70873c214ff238af86d766d5
+Author: Syndamia <kamen@syndamia.com>
+Date: Fri Nov 18 22:07:17 2022 +0200
+
+ [OKG/HWK2] Added Kira
+
+commit fad87c3e2c701482947b18f96562b6bca384a062
+Author: Syndamia <kamen@syndamia.com>
+Date: Fri Nov 18 21:36:01 2022 +0200
+
+ [OKG/HWK2] Added template and implemented Jotaro
+
+commit d3ca8bf66eb67f21c511c856a7ac54c11d8b406a
+Author: Syndamia <kamen@syndamia.com>
+Date: Thu Nov 17 16:54:07 2022 +0200
+
+ [FP] Solved first exam from 2021
+
+commit b098780fd1ec892283985a9c9300838edf866f8a
+Author: Syndamia <kamen@syndamia.com>
+Date: Thu Nov 17 00:04:35 2022 +0200
+
+ [IPL/HW02] Fixed include statement
+
+commit 5ba1aab614eee1d0308abd1a20d5c61bf3140e55
+Author: Syndamia <kamen@syndamia.com>
+Date: Thu Nov 17 00:04:24 2022 +0200
+
+ [IPL/HW02] Fixed details function not working properly, when rest is empty
+
+commit 73c896b12d4ca4fdedda4201b9415c48d5524fd5
+Author: Syndamia <kamen@syndamia.com>
+Date: Thu Nov 17 00:01:18 2022 +0200
+
+ [IPL/HW02] details tag is displayed as inline-block
+
+commit 84d20dfee4af531c7e5c77335cc48778cf3f24e3
+Author: Syndamia <kamen@syndamia.com>
+Date: Thu Nov 17 00:00:52 2022 +0200
+
+ [IPL/HW02] Replaced lexer.sh script with a Makefile
+
+commit 7f7d0d4676813a52bf69b807d8b8189d16f64ac0
+Author: Syndamia <kamen@syndamia.com>
+Date: Wed Nov 16 23:31:31 2022 +0200
+
+ [IPL/HW02] Renamed bison file
+
+commit 295b3464c34cb63f600264a428cfb8c57ab5cc62
+Author: Syndamia <kamen@syndamia.com>
+Date: Wed Nov 16 23:29:04 2022 +0200
+
+ [IPL/HW02] Simplified some functions and properly implemented code folding
+
+commit ba91b1efb380372c8369e773d0dce1952147d94c
+Author: Syndamia <kamen@syndamia.com>
+Date: Wed Nov 16 22:02:33 2022 +0200
+
+ [IPL/HW02] Fixed line ordering and spacing not being properly preserved and/or handled
+
+commit 387ec42070ea17cd57658d3386b0529ca9be1782
+Author: Syndamia <kamen@syndamia.com>
+Date: Wed Nov 16 21:56:36 2022 +0200
+
+ [IPL/HW02] Added tokens for all types of parsed data
+
+commit 9b9cac4c0037b3c397842143f85c08e13d2bc91e
+Author: Syndamia <kamen@syndamia.com>
+Date: Wed Nov 16 21:27:36 2022 +0200
+
+ [IPL/HW02] Implemented semi-working bison grammar and updated parts of flex regex
+
+commit a2f93b2b17a2a101c849636ea10f31058cef6660
+Author: Syndamia <kamen@syndamia.com>
+Date: Wed Nov 16 15:42:05 2022 +0200
+
+ [IPL/HW02] Added special style for details block in code block
+
+commit f669e77e5a4a7733b67954b694255f55b454162d
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Nov 15 12:09:46 2022 +0200
+
+ [OKG/HWK1] Added window holes to a wall
+
+commit 35c022d440b0490fb6284fe19456ac16a695557a
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Nov 15 12:06:58 2022 +0200
+
+ [OKG/HWK1] Minor tweeks, added a wall
+
+commit 1351a0c5a3880d1f6f015151d4deec017240787c
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Nov 15 11:26:57 2022 +0200
+
+ [OKG/HWK1] Added swivel chair
+
+commit da23345e78ef55871eb83b82beabe07d704f492b
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Nov 15 10:05:57 2022 +0200
+
+ [OKG/HWK1] Added telescope
+
+commit 21122fa3f283ff000967b57fdb3bc4bd0358e241
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon Nov 14 23:00:51 2022 +0200
+
+ [OKG/HWK1] Added table and started work on mini telescope
+
+commit 994ab130cdfc579ce04ce880ebd73bf06174070e
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon Nov 14 22:00:15 2022 +0200
+
+ [OKG/HWK1] Added walls and holes in them
+
+commit a56c679cbe8ebc932d1d2d5ee31ec3134e391f83
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun Nov 13 17:38:16 2022 +0200
+
+ [WGL/P05] Solved first exercise
+
+commit 99aebf351d639a615fa989855a1993013f09c40e
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun Nov 13 17:32:04 2022 +0200
+
+ [WGL/H05] Post-submission fix for lack of yellow plates
+
+commit 7f6aa091a91f57837ee65e2ea630f1b3dc1c5cd2
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun Nov 13 15:41:10 2022 +0200
+
+ [WGL/H05] Solved homework
+
+commit c109a40fc2f64cb78d2d4fb9372a919172286f3a
+Author: Syndamia <kamen@syndamia.com>
+Date: Fri Nov 11 14:41:05 2022 +0200
+
+ [FP/HW2] Solved second exercise
+
+commit 392f8a7d257184ad01199609680ce601aadfdde6
+Author: Syndamia <kamen@syndamia.com>
+Date: Fri Nov 11 12:27:13 2022 +0200
+
+ [FP/HW2] Simplified nested cdr calls
+
+commit f7ef5548085eb4491e924ee63931f0c4c5142757
+Author: Syndamia <kamen@syndamia.com>
+Date: Thu Nov 10 11:54:20 2022 +0200
+
+ [FP/P06] Added example usages
+
+commit 3e62b4987d83343eb3f4c6ad3858214218ff8583
+Author: Syndamia <kamen@syndamia.com>
+Date: Thu Nov 10 11:48:28 2022 +0200
+
+ [FP/P06] Added work from practicum
+
+commit 7c8f2a8aa04603d5bc83441353184589640e8c41
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Nov 8 19:45:50 2022 +0200
+
+ [IPL/HW02] Copied work from HW01, added a help message to lexer.sh, added left margin to pre tag
+
+commit d462bad3f4ed30d2c9e4562968a0b8a2ad9e3db7
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Nov 8 19:21:17 2022 +0200
+
+ [OKG/HWK1] Added template of homework
+
+commit fa19b7caa1fb0a3127d24ce5f689d1a39f8e05af
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Nov 8 16:26:37 2022 +0200
+
+ [OKG/HW05] Solved homework and added CSG shortcut
+
+commit de44ffda470905c350a1edb4bce4f0107f1d7742
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Nov 8 13:50:09 2022 +0200
+
+ [OKG/P06] Solved exercises
+
+commit 9290c864ffa683cbeb4d5cb3f75399284a6a9cb2
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Nov 8 13:49:57 2022 +0200
+
+ [OKG] Added a rough extractor of JavaScript source from the HTML of the original programs
+
+commit df77490cd6eacc2112e6f297b075d1df992a0841
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Nov 8 13:49:31 2022 +0200
+
+ [OKG] Practicum template now only sources local scripts and problems 1-6 are added
+
+commit 6384c4abedd618a46d12c237eb582b9e18756f4e
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon Nov 7 20:39:43 2022 +0200
+
+ [FP/HW2] Exercise 2 solution is very rough and half-working
+
+commit cebdee09e597d8aa2b4d69f868cafafe22ede580
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon Nov 7 20:18:07 2022 +0200
+
+ [WGL/P04] Started working on exercises
+
+commit faa737bc5c9edd86f752a3b70716014f25dfee71
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon Nov 7 20:17:43 2022 +0200
+
+ [FP/H2] Solved exercise 1 and half-solved exercise 2
+
+commit a5449c15668a78944780ebb289b2451f84a0c978
+Author: Syndamia <kamen@syndamia.com>
+Date: Thu Nov 3 14:21:04 2022 +0200
+
+ [OKG/HW04] Completed homework
+
+commit 185f5c35d163bd4a334ed4b2eee1bcb4f7882f67
+Author: Syndamia <kamen@syndamia.com>
+Date: Thu Nov 3 12:21:27 2022 +0200
+
+ [OKG/P05] Finished Ex 04 and did exercises 05 and 06
+
+commit 6c27855a224d23e66be717518280b1cb4fab1514
+Author: Syndamia <kamen@syndamia.com>
+Date: Thu Nov 3 10:59:11 2022 +0200
+
+ [FP/P05] Added work from today's practicum
+
+commit 9c02368555926e698baad1eb82e078b581d08c47
+Author: Syndamia <kamen@syndamia.com>
+Date: Thu Nov 3 08:31:16 2022 +0200
+
+ [OKG/P05] Added work from practicum
+
+commit e98fbbd145b6ff3d32f9a1e72708c52d54404f3a
+Author: Syndamia <kamen@syndamia.com>
+Date: Thu Nov 3 08:30:59 2022 +0200
+
+ [OKG] Added CSG library
+
+commit 422c4067c35e8a33fdb2ac349b746b4492fa21b5
+Author: Syndamia <kamen@syndamia.com>
+Date: Thu Nov 3 08:30:42 2022 +0200
+
+ [OKG] Practicum helper remembers index before reload, has a reload button and is more robust
+
+commit f4ce0313e7af5d5e32ffe0e0df4d95e9c2a8e6cb
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon Oct 31 12:19:16 2022 +0200
+
+ [OKG] Fixed threejs src appearing before scripts
+
+commit 4cfda788dd24ad5429839675e4b4a217d43cb595
+Author: Syndamia <kamen@syndamia.com>
+Date: Fri Oct 28 10:23:07 2022 +0300
+
+ [WGL/H03] Minor formatting changes
+
+commit 1730f959af508024ac4d96199b2bbb590e31f4d2
+Author: Syndamia <kamen@syndamia.com>
+Date: Fri Oct 28 10:19:05 2022 +0300
+
+ [WGL/H03] Removed debugging code
+
+commit e469e8d3a5a66b29a76fe7fb8e7888d9d7786d15
+Author: Syndamia <kamen@syndamia.com>
+Date: Fri Oct 28 10:18:41 2022 +0300
+
+ [WGL/H03] Implemented view points, vertical rows, fixed color, added comments
+
+commit b209b1eb0fcd5b762d727851b7df20838a5278ba
+Author: Syndamia <kamen@syndamia.com>
+Date: Fri Oct 28 09:24:58 2022 +0300
+
+ [WGL/H03] Improved shape generation and tidied up code
+
+commit bb04680cdee142847e0d48e1ef934149f76a07ff
+Author: Syndamia <kamen@syndamia.com>
+Date: Thu Oct 27 21:18:50 2022 +0300
+
+ [WGL/H03] Implemented very roughly general shape generation
+
+commit 08a640128c1a4a4a289413bd85403e727af9b26b
+Author: Syndamia <kamen@syndamia.com>
+Date: Thu Oct 27 18:16:27 2022 +0300
+
+ [WGL/P03] Solved exercises 6 and 7
+
+commit 377a71e7d657cda69f5fab88e4fcb5310b7e83ea
+Author: Syndamia <kamen@syndamia.com>
+Date: Thu Oct 27 11:02:52 2022 +0300
+
+ [FP/P04] Added work from practicum
+
+commit eed80989c03e8852e03042a61112c2d3b7662f0f
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Oct 25 21:34:31 2022 +0300
+
+ [IPL/H01] Added initial implementation
+
+commit ac8f5cfaa7a1752e7ba0e62aa40d4bc785e5be34
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Oct 25 18:32:17 2022 +0300
+
+ [WGL/P04] Solved exercises 2-5
+
+commit a45f695ebd7b64dfe5cdb911c51d65a5c8eb2cbe
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon Oct 24 20:21:03 2022 +0300
+
+ [OKG/HW03] Finished homework
+
+commit 2fb13b2c94e73ae8a4112df8ad98d092906e76ba
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon Oct 24 19:54:15 2022 +0300
+
+ [WGL/P03] Added work from practicum
+
+commit b9a7524716a2e9d4ab1d92fe7fb954265d3ce3a4
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon Oct 24 13:57:57 2022 +0300
+
+ [OKG/HW03] Added ring and two gem geometries
+
+commit 0908d4afea7f45bfe3f78d47eeefc074b1c8b864
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon Oct 24 13:30:45 2022 +0300
+
+ [OKG/P04] Added work from practicum
+
+commit e607fcc649e1fb5f4a13b5c5ad81207843b4a96f
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun Oct 23 09:32:21 2022 +0300
+
+ [WGL/HW02] Reworked variable names and placements, added comments, added random function
+
+commit bd034236fc1d3b1b07b5f9f07312ebee162abfe4
+Author: Syndamia <kamen@syndamia.com>
+Date: Sat Oct 22 23:18:58 2022 +0300
+
+ [WGL/HW02] Made colours milky
+
+commit 702f63ba570ff334179b8a5a8dba6f9f191c80a9
+Author: Syndamia <kamen@syndamia.com>
+Date: Sat Oct 22 23:10:39 2022 +0300
+
+ [WGL/HW02] Added separation lines
+
+commit 53fcbfd88fb45f862c7cfe494bfcb62900a45e67
+Author: Syndamia <kamen@syndamia.com>
+Date: Sat Oct 22 22:51:57 2022 +0300
+
+ [WGL/HW02] Implemented randomly colored wavy stripes
+
+commit 4e1941908000424b26713c185e2cf907d8428e43
+Author: Syndamia <kamen@syndamia.com>
+Date: Sat Oct 22 21:59:24 2022 +0300
+
+ [WGL/P02] Solved practicum exercises
+
+commit 083017dac65fda5c171ca0b223686f0f1773a157
+Author: Syndamia <kamen@syndamia.com>
+Date: Thu Oct 20 11:48:04 2022 +0300
+
+ [FP/HW1] Reworked variable/parameter names and added examples
+
+commit b503560635cc91092bc9e93d76011338afa36656
+Author: Syndamia <kamen@syndamia.com>
+Date: Thu Oct 20 11:27:45 2022 +0300
+
+ [FP/P02] Fixed month in filename
+
+commit a9fc3658346a0ab2f78aa615c84968b0832abea5
+Author: Syndamia <kamen@syndamia.com>
+Date: Thu Oct 20 11:27:25 2022 +0300
+
+ [FP/P01] Fixed month in filename
+
+commit 9c46a128446ef88549fe79ab6f586284930fc966
+Author: Syndamia <kamen@syndamia.com>
+Date: Thu Oct 20 11:26:57 2022 +0300
+
+ [FP/P03] Added work from today's practicum
+
+commit 9733f1336ee8054767a2516744cbd187cfa3b851
+Author: Syndamia <kamen@syndamia.com>
+Date: Wed Oct 19 18:25:45 2022 +0300
+
+ [FP/HW1] Reworked sum-digits to be iterable and changed formatting of count-specials
+
+commit 48cdff17bb05b1774c20601698fd57e719030f87
+Author: Syndamia <kamen@syndamia.com>
+Date: Wed Oct 19 18:22:00 2022 +0300
+
+ [FP/HW1] Reworked almost all functions for exercise 2
+
+commit b5dadc58da0b69abf79da0df859271fc075ffd72
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Oct 18 19:01:44 2022 +0300
+
+ [FP/HW1] Finished second exercise, but it has bugs
+
+commit 77455b0af298c672d93d9248f41fc28b6a1e7b66
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Oct 18 14:58:59 2022 +0300
+
+ [OKG/H02] Solved second practicum homework
+
+commit e5d7e2787881f4604224fbacef94c5a47e4fd35b
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Oct 18 13:57:18 2022 +0300
+
+ [OKG/P03] Solved practicum exercises
+
+commit b65a2ae726a67f498a934d0c0124297a23e42461
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon Oct 17 19:09:31 2022 +0300
+
+ [SDP/P02] Solved exercises from second practicum
+
+commit 1ee27f4f99bab9879917168b000e00ce3f7a15ff
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon Oct 17 16:48:32 2022 +0300
+
+ [FP/HW1] Solved first exercise and did half of second
+
+commit b15153220d2b69a55914e359d42c88bb8ef2a662
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon Oct 17 16:13:54 2022 +0300
+
+ [FP/P02] Solved exercises from second practicum
+
+commit 9143bd2239cb82124f4c4080070fc45b54df388d
+Author: Syndamia <kamen@syndamia.com>
+Date: Sun Oct 16 11:41:39 2022 +0300
+
+ [FP/P01] Added work from first practicum
+
+commit 21f765bd6740dc3a50fad8fa512696bcb64b3944
+Author: Syndamia <kamen@syndamia.com>
+Date: Fri Oct 14 08:38:45 2022 +0300
+
+ [WGL/H01] Added missing comment and updated another comment
+
+commit 0c1bbcbf08d44a04d668aa2b8d9c565420679a28
+Author: Syndamia <kamen@syndamia.com>
+Date: Thu Oct 13 11:59:33 2022 +0300
+
+ [WGL] Added first homework
+
+commit 1236758d54f7582427095d18a66c53f51c328a7d
+Author: Syndamia <kamen@syndamia.com>
+Date: Wed Oct 12 21:03:22 2022 +0300
+
+ [OKG] Solved practicum homework 01
+
+commit 9a04263e46be383439084ea8a92be139ab364116
+Author: Syndamia <kamen@syndamia.com>
+Date: Wed Oct 12 16:09:45 2022 +0300
+
+ [OKG] Solved practice 02 exercises
+
+commit a37b379f9e44653b2c12ed748a1e1b6d09f50c22
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon Oct 3 15:10:34 2022 +0300
+
+ [OKG] Added a practicum template for the future, and added needed javascript files
+
+commit ecaaedc00cbaee76ef67f2d468e00a629819f3f1
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon Oct 3 14:54:13 2022 +0300
+
+ [CGF] Added practice 01 work
+
+commit e965db7929095811e8ff2490d25f78db3ae5054c
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon Sep 19 10:59:11 2022 +0300
+
+ Fixed badly formatted forall and exists clauses
+
+commit b892ff817990801538ca5f511d91588daed6f662
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon Sep 19 10:54:36 2022 +0300
+
+ Fixed some small errors in calculus notes-appendix
+
+commit 01968863b69a54f52aca377bedb829ca96036e9f
+Author: Syndamia <kamen@syndamia.com>
+Date: Mon Sep 19 10:50:34 2022 +0300
+
+ Updated calculus notes information and added a footnote for me
+
+commit c5431e4d321dbf0152e6826841c1ef5c1291ba5b
+Author: Syndamia <kamen@syndamia.com>
+Date: Tue Jun 14 15:38:50 2022 +0300
+
+ Added files from project 2 (mirror)
+
+commit ccedf6f5d89f375580ff6af40296aab953f9cd09
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Tue May 31 20:52:26 2022 +0300
+
+ Added work from today's practice
+
+commit 24bdf39e6c21ab846f6c86803761d78a094e05c0
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu May 26 20:31:26 2022 +0300
+
+ Added files from project 1 (mirror)
+
+commit cbe944835cc0951a946d01f034b4d28ff9874a4e
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu May 26 20:23:42 2022 +0300
+
+ Added a small hard-coded XML parser
+
+commit e4f64cec4b7c85b1e39c221a57bcab4cb1980d7d
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Wed May 25 19:59:57 2022 +0300
+
+ Added old work from practicum 11
+
+commit a82a54f081ce561e6bc6e9f82869f8b40a47e660
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Wed May 25 19:59:16 2022 +0300
+
+ Added my work from today's exam
+
+commit 71c57cde42e99301aeb079be4ef368ff155f99c5
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Wed May 25 14:05:56 2022 +0300
+
+ Added my prep work for exam2
+
+commit ff171c3bc508e4a82e2329c550532f60a8be2e38
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Tue May 17 21:14:55 2022 +0300
+
+ Added work from today's practice
+
+commit 2a8bf5b484ae5eb05bbaaeaf613089dc4a15f73a
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu May 5 11:29:29 2022 +0300
+
+ Solved dimitriev hw (sem 10, ex2)
+
+commit 169cbc9a9a36ef2d0c71d35bc2086a061982df95
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Tue May 3 21:04:38 2022 +0300
+
+ Finished todays practice
+
+commit 28530b6cf63ea53bbb88e8d92ccfe452a0064882
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Tue May 3 15:09:45 2022 +0300
+
+ Added information about the exam
+
+commit 9f61b59ca6ceb76cd634240d118f5771c0534f3d
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Wed Apr 20 18:43:21 2022 +0300
+
+ Added my work from todays exam
+
+commit 26cf424c42f9cdc172191faa5b2d1c1fcf350143
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Tue Apr 19 21:04:23 2022 +0300
+
+ Added work from todays practice
+
+commit 6d4fa30cfd908e20a2ca2c70864a07007347ce98
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Tue Apr 19 15:11:17 2022 +0300
+
+ Added work from previous oop practice
+
+commit 33153fb1da042f5604f195c296e2b82e9a6b9da6
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat Apr 16 18:38:21 2022 +0300
+
+ Improved comment
+
+commit 763b3710e26fc1e58669927ba59efa5ea2ebc89e
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Fri Apr 15 10:35:28 2022 +0300
+
+ Mainly reworked finding to use binary search and also did some smaller tweaks
+
+commit b746daa654ec316331e56a3b243a2dbfb8e59cdb
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Fri Apr 15 09:50:28 2022 +0300
+
+ Added expected results in main tests and removed dimitriev tests
+
+commit 9402e84eca44ce75350cd1e495dc0c7c8e2f2159
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Fri Apr 15 09:47:18 2022 +0300
+
+ Renamed some WordCollection properties
+
+commit 1e4762258f3e2d7db1045f3034e870f84cea7977
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Fri Apr 15 09:44:49 2022 +0300
+
+ Moved compare to DynStr
+
+commit f522aaa802e4641118c3ce56f47f0115a36cdb13
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Fri Apr 15 09:37:44 2022 +0300
+
+ Added my own tests
+
+commit 6db8e09d53f9e108fb4ce00c81cbfb67ae0465c7
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Fri Apr 15 09:37:35 2022 +0300
+
+ Separated wordCollection count into two variable and fixed functions
+
+commit d5bf0fd7d55dbe6c2c8d5228e7d531128298a8c0
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Fri Apr 15 08:09:12 2022 +0300
+
+ DynStr now accomodates terminating zeroes
+
+commit 970ddb225bc2064903be787ea81afa129a1b83a6
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Fri Apr 15 07:45:32 2022 +0300
+
+ Fixed removing of words and improved adding words and cin and cout
+
+commit 9829b368ce529df277397e3b465fc536fa65ebfd
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu Apr 14 23:53:14 2022 +0300
+
+ Implemented (broken) overall functionality of ex3 of sem 08
+
+commit 27cf6165d0592f842ed667a8da3013489213c2a1
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Wed Apr 6 11:03:55 2022 +0300
+
+ Separated NumberGamble game into its own set of header and cpp files
+
+commit 6ec95b5d689aa38b373ef948ba67ba59235c0eb9
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Wed Apr 6 10:50:30 2022 +0300
+
+ Added GameCase descriptions and a printing function for them
+
+commit 30420a6ea65aa58389b9ffa0ba67130de376c079
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Wed Apr 6 10:29:54 2022 +0300
+
+ Implemented overall functionality for yesterdays practice exercise
+
+commit 2cf8d711c3dd110555c16913941f865841aa3175
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Wed Apr 6 08:40:07 2022 +0300
+
+ Fixed folder naming from yesterdays oop practice
+
+commit e9f62e28a4de3f9051da9b437bd6130328de2d90
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Tue Apr 5 21:32:06 2022 +0300
+
+ Added todays oop practice work
+
+commit 51ff352a533ff14e9961deb642d110f2d5dc843c
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu Mar 31 10:32:53 2022 +0300
+
+ Completed first lecture homework
+
+commit a6fb61db10a93801065d34d19fb6d7166511e58d
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu Mar 31 09:37:42 2022 +0300
+
+ Made naming and slight formatting adjustments
+
+commit 4a530b9ae9f50ce0e117931933db3a11285f29af
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Wed Mar 30 20:33:48 2022 +0300
+
+ Fixed misplacement of false and true in hadRepeatingDigits functions of interval exercise
+
+commit 59508931bc42064c23d5fbcb062d6f7396a873ab
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Wed Mar 30 20:20:32 2022 +0300
+
+ Solved dimitriev hw (sem 3, ex4)
+
+commit ef6d8e6de6061015e7dd41e2f74b733515b4a2e2
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Wed Mar 30 15:17:07 2022 +0300
+
+ Completed ex2 from yesterdays oop practice
+
+commit 793100813b3c50a1f304904440366a7137ae0992
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Wed Mar 30 08:41:52 2022 +0300
+
+ Reworked yesterdays oop practice folder structure
+
+commit c105f7db9b10861dd0bdeedb3ed4d1ebe2054b87
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Tue Mar 29 21:00:23 2022 +0300
+
+ Added todays oop practice
+
+commit 6a3cfbba14bce63cfdbae698cc0d052ba871a7a9
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Fri Mar 25 19:51:14 2022 +0200
+
+ Added feedback from interval exercise
+
+commit 537a04c127fdfe5c38c07e2a5aca1bbbfa70c7b4
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Wed Mar 23 16:15:19 2022 +0200
+
+ Added a solution to ex 3 of seminar 2 that finished angel's code
+
+commit 96964a7af584d5acda6a02a594e8f4fb45da8dc3
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Wed Mar 23 11:11:58 2022 +0200
+
+ Added solutions for oop seminar 5
+
+commit ac13a906211d854f602b856dfc2e061bd2ec7410
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Wed Mar 23 08:33:42 2022 +0200
+
+ Finished counting and powerof2
+
+commit 850c7d5b37fe913103f06b42e8f73e96e1f98ff3
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Tue Mar 22 21:04:07 2022 +0200
+
+ Added todays oop practice
+
+commit c14dbd632f05225eab2a51ca982f1b63b7ac744a
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Wed Mar 16 17:19:03 2022 +0200
+
+ Finished 2nd exercise from yesterdays practice
+
+commit 2a14dc9db8696067c467b60f0a96527f5f10ea52
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Tue Mar 15 21:01:45 2022 +0200
+
+ Added todays oop practice
+
+commit 8ce9886a205ede444f09778cdbe4f3e158f99d0e
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Tue Mar 8 21:05:31 2022 +0200
+
+ Added todays oop practice
+
+commit e3ae4cd3affc234e3127d5aa69c34f1c420b964d
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat Mar 5 15:54:29 2022 +0200
+
+ Added solutions from oop seminar 2
+
+commit 2d8b66aa122ad7c2c73a778160176e26a8de4ec0
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat Mar 5 15:52:37 2022 +0200
+
+ Added solutions from oop seminar 1
+
+commit 36c770ebb53a9a8ce2d89d872498b7201ac03f68
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Tue Mar 1 20:58:30 2022 +0200
+
+ Added todays practice
+
+commit 3ba0c94f9ef91d6320eb1091688882ae85cbad62
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Tue Feb 22 22:00:13 2022 +0200
+
+ Added today's oop practice
+
+commit 6f39b369dbb52c2521a1acc88e7e027bc9fcdf92
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon Feb 14 16:08:39 2022 +0200
+
+ Added algebra topics from session exam
+
+commit d6c1e29c97ecb9e446f266ee863660359f7a0640
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon Feb 7 19:23:40 2022 +0200
+
+ Added dis hw theory grade
+
+commit 1b5edfa16ab028e515a29ba2430357695dcc82e8
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu Feb 3 19:44:10 2022 +0200
+
+ Fixed bad character in sum formulas
+
+commit 406537a1915896f7f3bf644600c589bcdcdb9fbb
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Wed Feb 2 11:19:29 2022 +0200
+
+ Added more information about the workflow of the repo
+
+commit add58cb1978e957c50d1102f105cba008a9516ea
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon Jan 31 15:14:12 2022 +0200
+
+ Added a lot of proofs
+
+commit da3c2cc8e272970bed34243a923b68bcf9494699
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat Jan 29 20:43:41 2022 +0200
+
+ Improved formatting and added a proof from lec 5
+
+commit b15b3b7df38d7177b703b1fd4cf61a3932261b3d
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat Jan 29 09:35:30 2022 +0200
+
+ Added missing note for dis hw3
+
+commit 8333d117c5d0e24da79b1ae93ac8f824140fd15e
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat Jan 29 09:00:16 2022 +0200
+
+ Added grade for dis hw3
+
+commit c2575a1f3ef10524b0938114b6d0ad309cf40041
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu Jan 27 09:14:52 2022 +0200
+
+ Added grade for dis hw1
+
+commit ba049868acd4c1205a087a53ee3b5c31e63aa37b
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sun Jan 23 16:16:16 2022 +0200
+
+ Solved ex2 from dis hw3 and removed ex3
+
+commit cc941ed207600bbd4a86f2d28c4db98920ae8230
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat Jan 22 19:12:21 2022 +0200
+
+ Added missing equals
+
+commit e3ec1258accee9b8eaab30c656a4fdbc2106a0b6
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat Jan 22 19:11:51 2022 +0200
+
+ Solved ex1 from dis hw3 and added answerbox to ex5
+
+commit 48638e2008bdc72186d4cde7b40f978340a076ad
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat Jan 22 12:04:02 2022 +0200
+
+ Solved dis hw3 ex5
+
+commit 991fc29ce8769b948b0321d2d6538305a8da685a
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Fri Jan 21 18:23:49 2022 +0200
+
+ Finished ex4 from dis hw3
+
+commit 2f022752ab428055635fe83a1f2a154a291e2c4e
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu Jan 20 18:58:38 2022 +0200
+
+ Added template for dis hw3
+
+commit 8786a2ee2a63a7d3f1ed7fbdf3ab59b7152d1489
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Wed Jan 19 20:29:01 2022 +0200
+
+ Added up hw2 grade
+
+commit fbd220b88af63ad0a94e83fd9264241b52c2e85e
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon Jan 17 14:04:44 2022 +0200
+
+ Added today's practice work
+
+commit 617581d0b938bbf02e91f67de90c5be8e9c49962
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sun Jan 16 22:45:36 2022 +0200
+
+ Finished calculus hw-theory
+
+commit 1a9b076955b4d303b3117e74e6931c188fe9d5ce
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat Jan 15 19:55:02 2022 +0200
+
+ Added dstr hw2 grade and notes
+
+commit 3b982c559dc03fffec140cad5fb296c539cc479f
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat Jan 15 10:00:58 2022 +0200
+
+ Finished calculus notes
+
+commit 02ebc910f393d09de1f18eb83f1a86ec558aba76
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Fri Jan 14 22:20:06 2022 +0200
+
+ Almost finished calculus notes
+
+commit a083594881d837d98a0b7c6efc8319151a8455d4
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Fri Jan 14 17:04:16 2022 +0200
+
+ Updated license information
+
+commit fa7220e55f54bc0bd13e147a4d4040a8d7d64f30
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Fri Jan 14 17:04:04 2022 +0200
+
+ Renamed mathematical analysis to calculus
+
+commit 305669157e87ff8345eca390b0227acdf22ad8c6
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu Jan 13 22:41:53 2022 +0200
+
+ Added grade from up exam2
+
+commit 3d7b742eb8e9012e21a0516ad21fc7aefd043bf7
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Tue Jan 11 10:09:44 2022 +0200
+
+ Added my work from todays up exam
+
+commit a6fd917db5d633aecfe0307b016108e78dd2f4f7
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon Jan 10 14:09:39 2022 +0200
+
+ Added todays up practice
+
+commit 6ad65fce69d8f580d16b482a0decc5c4dadf88a2
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon Jan 10 11:18:33 2022 +0200
+
+ Fully completed up hw2
+
+commit 7ac89c1975584a5f27cdb2324005a36b39e46c7f
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sun Jan 9 19:55:10 2022 +0200
+
+ Finished ex3 from up hw2
+
+commit bd20136a0a2116c6e238c9de7bcbceb9a90dc7b0
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sun Jan 9 13:57:30 2022 +0200
+
+ Added grade and notes on dis hw2
+
+commit ec96f2355bccdaba18822dd3a305273360eac1de
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat Jan 8 20:47:56 2022 +0200
+
+ Started work on up hw2. Completed implementations without many edge case coverages
+
+commit 15ac4bcaa12824fd58bc4f21810e2025f860dab9
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu Jan 6 15:45:03 2022 +0200
+
+ Added grades from algebra hw3
+
+commit 6c3d0d7b1310940c09d7b1c3514b90a598f20564
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu Jan 6 15:27:11 2022 +0200
+
+ Somewhat improved working on ex2 dstr hw2
+
+commit 13bc27adee7d0fe757fa7796597e12e6458cdf15
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu Jan 6 14:37:39 2022 +0200
+
+ Somewhat solved ex2 from dstr hw2
+
+commit 973792903c275ab2d9e11d643aaf109298cbce43
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Wed Jan 5 10:16:25 2022 +0200
+
+ Finished ex1 from dstr hw2
+
+commit 7b8dfdd7ed54ba13cc2e42748a629235f6f776c3
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Tue Jan 4 22:13:27 2022 +0200
+
+ Solved ex 3 and 4 and party ex1 from dstr hw2
+
+commit d24f8428a347008f3f74ca651e7c9102cb1c2705
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon Jan 3 18:10:26 2022 +0200
+
+ Updated dates on algebra hw3
+
+commit 16b0f01060cb60860092e25e08addf61be702431
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon Jan 3 17:38:24 2022 +0200
+
+ Improved formatting of ex1 from algebra hw3
+
+commit c2858b852c804e3997878e613c90b1a5c6dcd74e
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon Jan 3 17:37:56 2022 +0200
+
+ Fully solved ex4 from algebra hw3
+
+commit 78861e68e05d3a6c276b20d767951ee9a5a80d87
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon Jan 3 10:21:08 2022 +0200
+
+ Solved ex2 from algebra hw3
+
+commit d26b82c3b8acf90df216a99b17be7a4951863149
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sun Jan 2 21:47:59 2022 +0200
+
+ Solved ex3 from algebra hw3
+
+commit c4557b8c7c0c1b5fe2885fc3fc215ce5f13cd7d2
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sun Jan 2 21:16:41 2022 +0200
+
+ Added unfinished ex 4 solution of algebra hw3
+
+commit 054b3fbb1493e329af664f993d4c344a7766d111
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu Dec 30 19:53:12 2021 +0200
+
+ Fixed ex1 solution of algebra hw3
+
+commit 701b94865bec296c1eba7eda1a035a078bcfd24e
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Wed Dec 29 17:10:37 2021 +0200
+
+ Added skeleton of algebra hw3 ex 2, 3, 4 and solved ex1
+
+commit 1bb3c8f320fdc8f07d0ad640aa29e10095efacf9
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Wed Dec 29 14:53:48 2021 +0200
+
+ Added half-finished dis notes appendix with proofs of theorems
+
+commit b1d583bfa2f7ee8a3f980c000c5b415fb3a12057
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon Dec 20 23:20:10 2021 +0200
+
+ Removed unnecessary equals sign
+
+commit fb5b63fdc4f6fbb3d1f6682b55ed247445e1751d
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon Dec 20 23:14:45 2021 +0200
+
+ Finished dis hw2
+
+commit 120ecb97039bffbea8212601ecb6a377cd793de3
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon Dec 20 14:36:34 2021 +0200
+
+ Added todays practice
+
+commit 751d8082100af1460219e141fd5aa092a3bb98e4
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sun Dec 19 11:06:27 2021 +0200
+
+ Added grade and grade notes on up hw1
+
+commit abca4697e070cbbc6894f2cc73ad6fc5071a930d
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sun Dec 19 10:53:59 2021 +0200
+
+ Solved 5th exercise and almost completed ex1 of dis hw2
+
+commit faa62db260e23b94b6f784992583b7a389f47d8d
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat Dec 18 18:45:32 2021 +0200
+
+ Solved 2nd, 3rd and 4th exercise and started work on 1st of dis hw2
+
+commit 74c521bf08dbd9cfe43e0bc98afebac1fcaedc90
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Wed Dec 15 15:12:01 2021 +0200
+
+ Added grade and comments to algebra hw2
+
+commit 15a4c2ffecc62710b216abd04b12f2826fc4e51f
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon Dec 13 22:54:51 2021 +0200
+
+ Added skeleton of dis hw2
+
+commit f5e0395e33d032f185197905c8c52c3ead1eb493
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon Dec 13 14:05:32 2021 +0200
+
+ Added todays practice
+
+commit 0028c1da2148e74b17d4e935c7d50a237e9324e6
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sun Dec 12 15:42:04 2021 +0200
+
+ Updated date on algebra hw2
+
+commit b91431db30092cd85fae6c1bfeebb6ddeccb5719
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sun Dec 12 15:39:06 2021 +0200
+
+ Improved wording and simplified some calculations in ex1 of algebra hw2
+
+commit 757b54e26d7e9ee0f1db6f9b27846539b0421f92
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sun Dec 12 12:19:23 2021 +0200
+
+ Solved exercise 3 from algebra hw2
+
+commit 4ac4b7b0f792b1e49ba565d78eb166698e7f5df9
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sun Dec 12 10:43:20 2021 +0200
+
+ Added missing subcase in solution to exercise 4 of algebra hw2
+
+commit 3d732bb204180c2ffc4a3ba509acd62c3e6aeceb
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sun Dec 12 09:33:47 2021 +0200
+
+ Fixed wrong solution to exercise 4 of algebra homework2
+
+commit 2525393dfd93aca0d2b9d5d56812f33ae9019d80
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat Dec 11 17:26:55 2021 +0200
+
+ Solved ex 1, 2 and 4 from algebra homework 2 and added skeleton for ex 3
+
+commit 42aa2d5b836507fe87cc00bd7913c0c87479ba7e
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat Dec 11 09:07:34 2021 +0200
+
+ In discrete math notes, fixed some slight formatting inconsistencies
+
+commit 02a425ed22624065afbb25720b75945a00634463
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Fri Dec 10 21:36:50 2021 +0200
+
+ Added initial text of mathematical analysis
+
+commit 43ceb5001724647493c499ae6fd00da09632e0b7
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Fri Dec 10 09:43:31 2021 +0200
+
+ Added math analysis notes skeleton and move homeworks to own folder
+
+commit 3a02b16a7ad534540f9d439e9fd35dee984eebb7
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon Dec 6 14:05:18 2021 +0200
+
+ Added today's practice
+
+commit 666ad1f4d3649f2e3248bd85112e91c67145d510
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon Dec 6 11:51:00 2021 +0200
+
+ Added information about programming introduction exam
+
+commit aea7e5b066355ed2af1f5527c8058e21d29f4ba1
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat Dec 4 12:15:33 2021 +0200
+
+ Removed bad subset specification
+
+commit af5adf4fb9f643779f9b52bd1d6a17fdf95925f2
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat Dec 4 11:58:05 2021 +0200
+
+ Added nonhomogeus equation example for common solution
+
+commit 739fe534b31f6f9106199027b886d0fe3c3ebcb4
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat Dec 4 11:41:30 2021 +0200
+
+ Added more formulas about binomials and added haracteristic vector information
+
+commit 399d4a40519f00c39bbcef76875da20c513b4e61
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat Dec 4 11:40:59 2021 +0200
+
+ Updated countability of sets information and examples, as well as added combinatorics formula
+
+commit 454c31987c85db3388871ef23b8c9cc02cd8a3e3
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat Dec 4 11:40:26 2021 +0200
+
+ Added information about hasse diagrams and function restrictions
+
+commit 99da7f6b6b662d9ea31d2029e18fb13a9c52722d
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat Dec 4 11:39:38 2021 +0200
+
+ Added information about induction and set completement
+
+commit 31eb195ff534278f1ad94d03bb4b0c50e977adc5
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat Dec 4 11:38:22 2021 +0200
+
+ Fixed set pipes
+
+commit f8a6dcbd7c28a730ab6b6d26ad939f1ccd91c3cf
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat Dec 4 11:37:31 2021 +0200
+
+ Newline and spacing adjustments
+
+commit 1e742e8c3e7164369652884ccc931c4da61a6bf9
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat Dec 4 11:36:08 2021 +0200
+
+ Wording adjustments
+
+commit 96123c9d9661decba04900f282bac619276d3c01
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat Dec 4 11:33:28 2021 +0200
+
+ Added pdf metadata
+
+commit d28281e33f3aee49cd7a63a343b2dc99faac636c
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Fri Dec 3 16:17:49 2021 +0200
+
+ Fixed typo
+
+commit 5eb0ce6d991731120b5d6aadb7a515c36bd975ba
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Fri Dec 3 14:02:13 2021 +0200
+
+ Updated formatting and added formula
+
+commit 37c306b521c3d8eee8217c198fd0f3d9f521c791
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Fri Dec 3 13:47:40 2021 +0200
+
+ Added more info about binomial coefficients and sums
+
+commit 18ac96dcdb1367acd59d98c861728b0bb71aab01
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Fri Dec 3 13:24:17 2021 +0200
+
+ Fixed definitions
+
+commit c46458e6bd9fc2092f97d7b57df051b13fd0abd0
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu Dec 2 18:35:20 2021 +0200
+
+ Removed old markdown notes files
+
+commit 78564c227e610db6214f62af5cfd158c6658a478
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu Dec 2 18:34:37 2021 +0200
+
+ Added discrete math notes
+
+commit 38207fcdaa3e3adb93302e3c4b6b5eb39cfed36b
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu Dec 2 18:34:23 2021 +0200
+
+ Moved discrete math homework to it's own folder
+
+commit 26970c93d171521fd1a7c421a43eed76a9cb36e7
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu Dec 2 13:56:07 2021 +0200
+
+ Added discrete math notes
+
+commit 6bc2d9c8ca39a3cfa0d557c0211b9391a0ab5ed4
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon Nov 29 14:10:37 2021 +0200
+
+ Added work from todays practice
+
+commit 3143d152b861c7461420b541b308e994d9417a13
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sun Nov 28 22:12:36 2021 +0200
+
+ Added grade and comments to discrete math homework1
+
+commit 624518fd555b54bcf8719786559861d9d6125ffc
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Wed Nov 24 17:46:39 2021 +0200
+
+ Minor formatting adjustments
+
+commit e30eed631d2930570f5cc7355826c8854f3ac265
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Wed Nov 24 17:36:18 2021 +0200
+
+ Updated include comments and used fabs in eq of exercise 0
+
+commit 1c8ef83e8ce20bb71e81f678728eb29f5951e190
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Wed Nov 24 17:28:11 2021 +0200
+
+ Simplified isInteresting check logic
+
+commit 237bac8e9055e49a2b7ed12d7e65c7db031e2b26
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Wed Nov 24 17:27:55 2021 +0200
+
+ Made some pointers constant
+
+commit 604fd500943cae209b8a0f6e99fcd5510ad7e501
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Wed Nov 24 17:27:35 2021 +0200
+
+ Replaced ugly multiplication and addition assignments
+
+commit 3c9dafd3d2977d4ac922886b0b00b566cd5288c1
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Wed Nov 24 17:26:29 2021 +0200
+
+ Fixed and improved secret generation
+
+commit 0139d20b8844b4f1946c84b07e567faf5ba618c7
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Tue Nov 23 16:59:41 2021 +0200
+
+ Added my solutions to todays programming introduction exam
+
+commit 7a59e1811ccc5f2ff2d91647434a34900ca23f82
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Tue Nov 23 15:20:38 2021 +0200
+
+ Reworked exercise 2 and 4s logic in homework1.cpp
+
+commit 10ce89a0fa49fefb5dd78dcda95316a3399dc095
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon Nov 22 22:48:37 2021 +0200
+
+ Added todays programming practice
+
+commit 04f7398dc6d5bed76fb24114fa55a6eed9631aa3
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon Nov 22 22:47:27 2021 +0200
+
+ Reworked exercise 0 of homework1.cpp
+
+commit 0eacea60b10de6c6b7f040fe15700e79cf41811b
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sun Nov 21 23:23:46 2021 +0200
+
+ Fixed exercise 1 solution checking by i and not sum in homework1.cpp
+
+commit 7cb853fd06cdc20d1e16a3fa5f525bc55f7d4ed7
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sun Nov 21 20:48:29 2021 +0200
+
+ Fixed exercise numbering in homework1.cpp
+
+commit 25fbc6ce693fa82847a75752debb3c8ae830f407
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sun Nov 21 20:46:32 2021 +0200
+
+ Updated formatting of homework1.cpp
+
+commit 9326b624526fa56775664075e848569625fdc67f
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sun Nov 21 20:27:14 2021 +0200
+
+ Added comments and moved number to constant in ex0 homework1.cpp
+
+commit fbabea66af0a954ae934ee8e12f0a43f7d69189f
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sun Nov 21 20:08:49 2021 +0200
+
+ Updated exercise 0 with epsilon comparison in homework1.cpp
+
+commit 414396b1292e2790c28a26de0b5d18bab1c5728f
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sun Nov 21 18:53:47 2021 +0200
+
+ Solved exercise 0 of homework1.cpp
+
+commit 69e2c19137a467ea0870b0297b6611e8bddb9f7d
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sun Nov 21 16:23:44 2021 +0200
+
+ Solved exercise 5 of homework1.cpp
+
+commit 28d28bfb4c8fe765b93745af78ba9f06b334e65a
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat Nov 20 21:30:24 2021 +0200
+
+ Solved ex 4
+
+commit e272d23b4dd1fa776b399be4f838ecb6a9ac56ff
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sat Nov 20 21:30:06 2021 +0200
+
+ Reworked ex 1 to be iterative
+
+commit 6783d73f706485947d2f124542106b1b31c42e8b
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Fri Nov 19 21:01:09 2021 +0200
+
+ Solved exercises 1 and 2 from programming introduction homework
+
+commit dad5d0fe2f34ee023e0724892ce3854c1b44efa6
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Wed Nov 17 15:09:25 2021 +0200
+
+ Added grades to algebra homework1
+
+commit d2115e92b3539f509f1ba08a7abae16b9dc60e20
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Wed Nov 17 09:56:50 2021 +0200
+
+ Added readme for sem06 solutions
+
+commit e848368d90bbcb906be2df63ca758b7a8d183324
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Wed Nov 17 09:53:54 2021 +0200
+
+ Solved bonus exercise from 15.11.21 practice
+
+commit d6e6b0328ce2a4fe228262713e89e391421f5ab3
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Wed Nov 17 09:26:15 2021 +0200
+
+ Added my solutions to Sem. 06 exercises
+
+commit b02c6e3dc1917eedf2791bd89b9e3c80e6f1ef9f
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon Nov 15 23:56:08 2021 +0200
+
+ Updated formatting and date
+
+commit 50b5c07070d279ab89688cffcfbf1e25a5b1a972
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon Nov 15 23:48:15 2021 +0200
+
+ Fixed exercise 3.b) and 4.b)
+
+commit 281b5fce5240b5c95cc9b0b2643c61fadaf0cabb
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon Nov 15 22:50:35 2021 +0200
+
+ Solved first exercise
+
+commit 6476a7ed6759ee73a57c30279e9218e44ec7e76b
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon Nov 15 21:32:10 2021 +0200
+
+ Updated some formatting
+
+commit f572d9ab3364d0e35e501dcd0f03ce127c317136
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon Nov 15 14:21:35 2021 +0200
+
+ Updated exercise 2 solution wording
+
+commit 0792770172dcb49ff4aa90974fb1cd5ec2d0ad5f
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon Nov 15 13:50:44 2021 +0200
+
+ Did almost all exercises from discrete math homework
+
+commit 2dd353541578cd6c57d0cc88b8cc934f567462c9
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon Nov 15 13:22:42 2021 +0200
+
+ Added todays (unfinished) practice
+
+commit 56dc89ac0e25105df4ffe668cd410b07a66341ae
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Fri Nov 12 23:34:38 2021 +0200
+
+ Fixed typo
+
+commit eb4c2d463c03414c9f8ffc095fe164a6b34fef5a
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Fri Nov 12 18:08:50 2021 +0200
+
+ Updated date
+
+commit 0e26a3eb7325bd2e6fb1ee8c08e324e0f0752978
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Fri Nov 12 17:57:37 2021 +0200
+
+ Solved exercise 4
+
+commit d1f5a94008cbd1d5abf577edf007b92cbfd6f0a6
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Fri Nov 12 13:39:00 2021 +0200
+
+ Solved 1st exercise from algebra homework
+
+commit 812b83f55e503dfddd90e8025b0f61614ffb2fc9
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Thu Nov 11 10:51:51 2021 +0200
+
+ Solved exercises 2 and 3 from algebra homework
+
+commit d4dbb516025f7be1a74e04b4d153334bd7e9d13d
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Wed Nov 10 08:12:38 2021 +0200
+
+ Updated title
+
+commit 7cfb72388d50da3757aa29f2ce379975d4d1f0c4
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Wed Nov 10 08:05:59 2021 +0200
+
+ Improved Ex. 3 solution and updated date
+
+commit 2d1bd71f6be8caec07282163138af6f56187a295
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Wed Nov 10 00:00:58 2021 +0200
+
+ Fixed bad punctuation
+
+commit 116e8d7807f32a96a682e4530fb5ef802a8e3d57
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Tue Nov 9 23:57:57 2021 +0200
+
+ Solved 1st exercise
+
+commit 85bdcce86168686b811918ea3b3571f90f10916a
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Tue Nov 9 20:45:02 2021 +0200
+
+ Solved 2nd exercise
+
+commit 27d94fd157fd3b61472c5cf1745d08113de37465
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Tue Nov 9 17:06:49 2021 +0200
+
+ Solved 3rd exercise
+
+commit 9bef006f07ed19c91fe7d6d3a418ebf198e1afd2
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Tue Nov 9 15:22:53 2021 +0200
+
+ Narrowed down margins
+
+commit ce1085165ebf55f30c8c8dd2a397bb0c922cf68b
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Tue Nov 9 15:19:25 2021 +0200
+
+ Solved 4th exercise and updated some styling and package usage
+
+commit 3f5231760c7ceb63e4050ea73296f2315e8eb9d2
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon Nov 8 14:13:41 2021 +0200
+
+ Updated licenses
+
+commit 2ae3b9d979c68b336601f2928066c07d1e1e427a
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon Nov 8 14:09:13 2021 +0200
+
+ Added xelatex build instructions
+
+commit a1c1170a6deb96f439138b83a3024441d907053b
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon Nov 8 14:08:10 2021 +0200
+
+ Added todays practice
+
+commit b113f2adc40bbff1fa6aa4527da19f63d60afbc4
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon Nov 8 13:44:29 2021 +0200
+
+ Added skeleton for first Math analysis homework
+
+commit c65f2b0ca7b75c47c4244ccfc416d75a69a55830
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon Nov 8 13:34:22 2021 +0200
+
+ Added latex gitignore settings
+
+commit 07fe4df7b89a56f0f3e6bd224895483b04a52696
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Sun Nov 7 12:27:31 2021 +0200
+
+ Fixed filename date
+
+commit 3f402620ecd071fb467b108036ac08ed48c5f929
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Wed Nov 3 21:18:33 2021 +0200
+
+ Updated some styling and formatting
+
+commit df27afaa9a5bb3d3a168b57c8c407d25e553f13f
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Wed Nov 3 20:51:17 2021 +0200
+
+ Added my solutions to Sem. 04 exercises
+
+commit ed07ca36f9b87410838d6657eefd6ee9db686baa
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Wed Nov 3 17:24:40 2021 +0200
+
+ Solved newly added exercise 15
+
+commit 2961305814f60c9acdcc82a0f67fe6553c2e0b88
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Tue Nov 2 19:16:05 2021 +0200
+
+ Added link to exercises
+
+commit 52cc15b76cc94af6cc34110a836af290f8173f79
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Tue Nov 2 19:14:51 2021 +0200
+
+ Fixed solution for ex 8 with an old solution to a similar exercise
+
+commit 26742347cab411558a1366dab0cde90febe4e816
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Tue Nov 2 18:10:06 2021 +0200
+
+ Fixed triangle area and fixed typo in trianglePrimeter function name
+
+commit 0076280df2a871b240ecd2737547bdf2b4a5e2fa
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Tue Nov 2 17:56:41 2021 +0200
+
+ Added potentially broken exercises from today's practice
+
+commit 598977516a6be6657161d2231cb55ce92021af8f
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Fri Oct 29 10:33:31 2021 +0300
+
+ Updated formatting and added linkfor seminar materials
+
+commit 541f564b58d87963b78c5fa035fd6997f03e3208
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Fri Oct 29 10:28:18 2021 +0300
+
+ Updated formatting of README
+
+commit a69cd34091836c632c3268e646ac5a85fb9f8175
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Fri Oct 29 10:27:03 2021 +0300
+
+ Added my solutions to Sem. 03 exercises
+
+commit 2ec5faa88be1447cd93a301543f97ac9d6c312d7
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon Oct 25 13:49:06 2021 +0300
+
+ Added all task descriptions above their corresponding function
+
+commit 475f05d889ae3ffd828211a947305354b56b7f1c
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Mon Oct 25 13:33:54 2021 +0300
+
+ Added todays practice exercises
+
+commit 98405e72ca63bd089d9fb2b74162a4402ace78d1
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Tue Oct 19 09:39:01 2021 +0300
+
+ Added direct links to GitHub exercise files to each practice
+
+commit 0308086105f43deb1982351f974b5a10029111c0
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Tue Oct 19 09:32:33 2021 +0300
+
+ Added bash command to README and updated gitignore to account for powershell building
+
+commit 3dec6deef99efe36ba642d622ec35eef64b17a34
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Tue Oct 19 09:27:54 2021 +0300
+
+ Added yesterday's practice
+
+commit 1aaf91097edd719aa310a94dfff9b9c9813896b8
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Tue Oct 19 09:27:48 2021 +0300
+
+ Added gitignore for build files
+
+commit f2896df4ddbe4eec72fe28fadb17a01b6480b08f
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Tue Oct 12 10:02:13 2021 +0300
+
+ Improved formatting of README
+
+commit bc4ae93fa7a0f45d52fd0f4b952299bf9c3340c3
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Tue Oct 12 09:59:59 2021 +0300
+
+ Added link to materials and compiling (in powershell) info
+
+commit 1b98fe49903e649851bc85f1786906fd5a2bb2db
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Tue Oct 12 09:52:24 2021 +0300
+
+ Added yesterday's practice
+
+commit 84402549c630e09ec80ddd04f9886d11d2e75902
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Tue Oct 12 09:46:13 2021 +0300
+
+ Added practice from the 8th of October
+
+commit eac2a75365fcea050e40d7219c91bcde1acfdc32
+Author: Syndamia <kamen.d.mladenov@protonmail.com>
+Date: Tue Oct 12 09:43:25 2021 +0300
+
+ Added license
+
+commit 4c0fba332c94facf3b5d5ab7ea7a029d9d8ebc24
+Author: Kamen Mladenov <kamen.d.mladenov@protonmail.com>
+Date: Fri Oct 8 13:18:18 2021 +0000
+
+ Initial commit
diff --git a/Year 3/Network programming/Project/Makefile b/Year 3/Network programming/Project/Makefile
new file mode 100644
index 0000000..efd2c8e
--- /dev/null
+++ b/Year 3/Network programming/Project/Makefile
@@ -0,0 +1,17 @@
+CC=gcc
+CFLAGS=-g -I.
+
+.PHONY: all
+all: server browser
+
+.PHONY: server
+server:
+ $(CC) $(CFLAGS) -o server sds/sds.c util.c server.c server-connection.c server-cli.c
+
+.PHONY: browser
+browser:
+ $(CC) $(CFLAGS) -o browser sds/sds.c util.c browser.c browser-cli.c
+
+.PHONY: clean
+clean:
+ rm -rf server browser
diff --git a/Year 3/Network programming/Project/README.md b/Year 3/Network programming/Project/README.md
new file mode 100644
index 0000000..d1b2b9d
--- /dev/null
+++ b/Year 3/Network programming/Project/README.md
@@ -0,0 +1,201 @@
+# pico-web
+
+Small client-server application.
+The server receives a URL from a client and returns the appropriate page.
+
+URIs (URLs) are in the form `userinfo@address:portPATH`, where `address` and `port` could be skipped.
+The userinfo section is analogous to subdomains in normal web applications.
+
+It's assumed that all pages are written in Markdown so the client adds special "rendering" like hyperlinks and bold text (via ANSI escape sequences).
+The server is configured to send pages only in allowed directories, and can handle multiple directories with custom error pages.
+
+## Building and usage
+
+Build the binaries:
+
+```bash
+make
+```
+
+You get two binaries, `server` and `browser`.
+
+### Browser
+
+The `browser` program takes no arguments.
+Above every page you can see it's URI.
+When ran it displays a blank page by default.
+
+Markdown anchors are handled in a very special manner: you don't see the actual address, only the "name", and before every name is appended a number.
+This number is a unique index, referencing the given anchor.
+
+Below the last page you can write commands for the browser.
+Commands come in four "flavours":
+
+- Full URI, which will be the next page to display.
+ You may omit the host or port, the last values will be taken (which by default are 127.0.0.1 and 8080).
+ For example: `hello@/`.
+
+- Relative path, which as the name suggests, is just a file path which will be requested on the previous username, address and host.
+ For example: `/index.md`.
+
+- Number, which is one of the aforementioned prepended numbers to anchors.
+ You would "follow" the anchor, effectively navigating to it's stored address.
+
+- Column command, a line which begins with the letter `:` and is then *immediately* followed by the name of the command.
+ There are only four command names: `quit`, `q`, `exit` and `e`, all exiting from the program.
+ For example: `:q`.
+
+### Server
+
+It takes any number of comma-separated strings.
+
+By default the server is available on address 127.0.0.1 and port 8080.
+If the first argument contains only one comma (so two items), then it's parsed as an address-port pair (for example `127.0.0.2,8081`) which overrides the defaults.
+
+If there are two commas (three items; and that's the required amount for any argument after the first), then it contains an access username, files root and error file.
+All files under the "files root" directory will be available on the userinfo "username".
+If the server cannot find a requested file, then the error file is returned (whose path is relative to the files root).
+
+*Note:* A quirk with Markdown anchors is that relative paths are always relative to the files root, not the current directory.
+
+For example, if you want to share a folder `~/Documents` on username `mynotes` with an error file `./error.md` (again, this path is relative to `~/Documents`), then the corresponding argument to `server` would be `mynotes,~/Documents,./error.md`.
+
+When running you'll see logs, related to all connections with the server.
+
+You can also type commands, similarly to [browser](#browser), the first character on the line must be `:`, followed immediately by the command name.
+There are currently 3 distinct commands:
+
+- `help`, `h` and `?`, which print all available commands
+- `vhosts`, which prints out all shared folders, alongside their associated userinfo and error file
+- `quit`, `q`, `exit` and `e`, which exit out of the program
+
+### Demo
+
+This project comes with a tiny assortment of pages.
+This is a sample input and output of both programs, showing all of their capabilities (browser does add some special coloring in terminals, which can't be shown in this file), where shell commands are prepended with `$ ` and user input with `> `:
+
+```
+$ ./server '127.0.0.1,8081` `demo,./demo,./demo/page.md`
+Listening on 127.0.0.1:8081
+[127.0.0.1@4] Connected successfully!
+[127.0.0.1@4] Requested demo@/
+[127.0.0.1@4] Serving ./demo/index.md
+[127.0.0.1@4] Served!
+[127.0.0.1@4] Connected successfully!
+[127.0.0.1@4] Requested demo@/page.md
+[127.0.0.1@4] Serving ./demo/page.md
+[127.0.0.1@4] Served!
+[127.0.0.1@4] Connected successfully!
+[127.0.0.1@4] Requested demo@/
+[127.0.0.1@4] Serving ./demo/index.md
+[127.0.0.1@4] Served!
+[127.0.0.1@4] Connected successfully!
+[127.0.0.1@4] Requested demo@/dir
+[127.0.0.1@4] Serving ./demo/dir/index.md
+[127.0.0.1@4] Served!
+[127.0.0.1@4] Connected successfully!
+[127.0.0.1@4] Requested demo@/dir/page.md
+[127.0.0.1@4] Serving ./demo/dir/page.md
+[127.0.0.1@4] Served!
+[127.0.0.1@4] Connected successfully!
+[127.0.0.1@4] Requested demo@/page.md
+[127.0.0.1@4] Serving ./demo/page.md
+[127.0.0.1@4] Served!
+[127.0.0.1@4] Connected successfully!
+[127.0.0.1@4] Requested demo@/
+[127.0.0.1@4] Serving ./demo/index.md
+[127.0.0.1@4] Served!
+[127.0.0.1@4] Connected successfully!
+[127.0.0.1@4] Requested demo@/dira
+[127.0.0.1@4] Error opening ./demo/dira
+[127.0.0.1@4] Serving ./demo/page.md
+[127.0.0.1@4] Served!
+> :help
+help,h,? Prints this message
+vhosts Prints all registered virtual hosts
+quit,exit,q,e Exits the program
+> :vhosts
+Name: "demo" Root dir: "./demo" Error file: "page.md"
+> :quit
+Exiting...
+```
+
+```
+$ ./browser
+blank
+
+> demo@127.0.0.1:8081/
+demo@127.0.0.1:8081/
+<< Index page >>
+
+Go to: 0page, 1dir
+> 0
+demo@127.0.0.1:8081/page.md
+<< Page >>
+
+Go to: 0Index
+> 0
+demo@127.0.0.1:8081/
+<< Index page >>
+
+Go to: 0page, 1dir
+> 1
+demo@127.0.0.1:8081./dir
+[[ Index of dir ]]
+
+Go to: 0Index, 1Page
+> 1
+demo@127.0.0.1:8081/dir/page.md
+[[ Page in dir ]]
+
+Go to: 0Index
+> demo@/page.md
+demo@/page.md
+<< Page >>
+
+Go to: 0Index
+> /
+demo@/
+<< Index page >>
+
+Go to: 0page, 1dir
+> demo@127.0.0.1:8081/dira
+<< Page >>
+
+Go to: 0Index
+> blank
+blank
+
+> :quit
+```
+
+## Source code information
+
+### File hierarchy
+
+- `browser.c` - Main browser source code, handles communication with server
+- `browser-cli.c` - Handles rendering of pages (printing to stdout) and user interface (user input)
+
+- `server.c` - Main server source code, handles communication with client
+- `server-connection.c` - Parses received information from client and sends information back to client
+- `server-cli.c` - Handles user interface (user input)
+
+- `util.c` - Various functions in use by the browser and server apps
+
+### Networking
+
+The server creates a socket on which it listens for incoming connections.
+On client connection, a new child process is started, which will handle parsing of URI and sending of page.
+
+Client also creates a socket with which to connect to the server.
+When receiving a page, it prints it on standard output.
+
+Relevant (networking) code for the server is located in `server.c` as well as `on_connection` function in `server-connection.c`.
+For the browser it's all in `browser.c`.
+
+### Page rendering
+
+The client prints Markdown pages with special formatting.
+Most elements use [ANSI escape sequences](https://en.wikipedia.org/wiki/ANSI_escape_code) to show text in different colors and format.
+
+Special Markdown syntax (anchors, ...) is parsed with regular expressions via the POSIX regex.h.
diff --git a/Year 3/Network programming/Project/browser-cli.c b/Year 3/Network programming/Project/browser-cli.c
new file mode 100644
index 0000000..3bea4ba
--- /dev/null
+++ b/Year 3/Network programming/Project/browser-cli.c
@@ -0,0 +1,183 @@
+#include <unistd.h>
+#include <stdlib.h>
+#include <stdio.h>
+
+#include <string.h>
+#include <sds/sds.h>
+#include <regex.h>
+#include <util.h>
+
+struct md_syntax {
+ regex_t anchor;
+};
+
+struct md_syntax syntax = {
+ .anchor = NULL,
+};
+
+int* anchorsIndecies;
+int anchorsCount = 0;
+
+void initRendering() {
+ /*
+ * Compile regexes used in rendering
+ */
+
+ herr(regcomp(&syntax.anchor, "\\[\\([^]]*\\)\\](\\([^)]*\\))", 0), "regcomp");
+}
+
+void freeRendering() {
+ regfree(&syntax.anchor);
+
+ free(anchorsIndecies);
+}
+
+void renderPage(const sds page) {
+ if (sdslen(page) == 0) {
+ printf("Server didn't return page!\n");
+ return;
+ }
+
+ sds toPrint = sdsdup(page);
+
+ /*
+ * Parse Markdown constructs
+ */
+
+ /* Substitute and store anchorsIndecies */
+ if (anchorsIndecies != NULL) {
+ free(anchorsIndecies);
+ anchorsCount = 0;
+ anchorsIndecies = NULL;
+ }
+ toPrint = gsub_getm(toPrint, &syntax.anchor, "\16\033[4m\1\033[0m", &anchorsIndecies, &anchorsCount);
+
+ sds newPrint;
+ for (int i = 0, anchorInd = 0; i < anchorsCount; i++) {
+ anchorInd = strchr(toPrint, '\16') - toPrint;
+
+ /* In toPrint, replace '\16' with "\033[30;46m%d\033[0m", where %d is the variable i */
+ toPrint[anchorInd] = '\0';
+ newPrint = sdsgrowzero(sdsempty(), sdslen(toPrint) + digits(i) + 8 + 4);
+ sprintf(newPrint, "%s\033[30;46m%d\033[0m%s", toPrint, i, toPrint + anchorInd + 1);
+
+ sdsfree(toPrint);
+ toPrint = newPrint;
+ }
+
+ /*
+ * Print page on stdout
+ */
+ write(1, toPrint, sdslen(toPrint));
+
+ sdsfree(toPrint);
+}
+
+#define MAX_LEN_COMMAND 16
+#define COMMAND_FORMAT ": %16s"
+
+int portLen(char* start) {
+ int count = 0;
+ while ('0' <= *start && *start <= '9') {
+ count++;
+ start++;
+ }
+ return count;
+}
+
+int hostLen(char* start) {
+ int count = 0;
+ while (*start == '.' || ('0' <= *start && *start <= '9')) {
+ count++;
+ start++;
+ }
+ return count;
+}
+
+char* findBeginningOfPath(char* uri) {
+ char* startPath = strchr(uri, '/');
+ while (startPath != uri && startPath != NULL) {
+ if (*(startPath - 1) == '.') startPath--;
+ else break;
+ }
+ return startPath;
+}
+
+int handleCLI(sds *host, sds *port, sds *uri, const sds page) {
+ // Get a line
+ char line[1024];
+ fgets(line, 1024, stdin);
+
+ // Nothing
+ if (line[0] == '\0') {
+ printf("Please enter a valid command!\n");
+ return 0;
+ }
+
+ // Number or URL
+ if (line[0] != ':') {
+ sds newURI;
+
+ // Index of anchor
+ if (isNumber(line)) {
+ int gotoIndex = 0;
+ sscanf(line, "%d", &gotoIndex);
+
+ if (gotoIndex < 0 || gotoIndex >= anchorsCount) {
+ printf("Invalid anchor index!\n");
+ return 0;
+ }
+
+ char* start = strchr(page + anchorsIndecies[gotoIndex], '(') + 1;
+ newURI = sdsnewlen(start, strchr(start, ')') - start);
+ }
+ // New address
+ else {
+ newURI = sdsnewlen(line, strlen(line)-1); // skip newline
+ }
+
+ char* startPath = findBeginningOfPath(newURI);
+
+ // Handle relative URLs
+ if (startPath == newURI) {
+ sds beforePath = sdscatsds(sdsnewlen(*uri, findBeginningOfPath(*uri) - *uri), newURI);
+ sdsfree(newURI);
+ newURI = beforePath;
+ startPath = findBeginningOfPath(newURI);
+ }
+
+ if (*uri != NULL) sdsfree(*uri);
+ *uri = newURI;
+
+ char* startHost = strchr(newURI, '@');
+ char* startPort = strchr(newURI, ':');
+
+ // Update host
+ if (startHost != NULL && startHost < startPath) {
+ if (host != NULL) sdsfree(*host);
+ *host = sdsnewlen(startHost + 1, hostLen(startHost + 1));
+ }
+
+ // Update port
+ if (startPort != NULL && startPort < startPath) {
+ if (port != NULL) sdsfree(*port);
+ *port = sdsnewlen(startPort + 1, portLen(startPort + 1));
+ }
+
+ return 0;
+ }
+
+ // Special command
+
+ // Get command name and it's arguments
+ // Currently no command takes arguments
+ char name[MAX_LEN_COMMAND+1] = { '\0' };
+ int argsAssigned = sscanf(line, COMMAND_FORMAT, name);
+
+ if (streq(name, "q") || streq(name, "e") || streq(name, "quit") || streq(name, "exit")) {
+ return 1;
+ }
+
+ printf("Invalid command %s!\n", name);
+ return 0;
+}
diff --git a/Year 3/Network programming/Project/browser-cli.h b/Year 3/Network programming/Project/browser-cli.h
new file mode 100644
index 0000000..1837c6a
--- /dev/null
+++ b/Year 3/Network programming/Project/browser-cli.h
@@ -0,0 +1,12 @@
+#ifndef BROWSER_CLI
+#define BROWSER_CLI
+
+#include <sds/sds.h>
+
+void initRendering();
+void freeRendering();
+
+void renderPage(const sds page);
+int handleCLI(sds *host, sds *port, sds *uri, const sds page);
+
+#endif
diff --git a/Year 3/Network programming/Project/browser.c b/Year 3/Network programming/Project/browser.c
new file mode 100644
index 0000000..7268831
--- /dev/null
+++ b/Year 3/Network programming/Project/browser.c
@@ -0,0 +1,99 @@
+/* Receives a markdown file and "renders" it
+ */
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+
+#include <unistd.h>
+#include <stdlib.h>
+#include <stdio.h>
+
+#include <string.h>
+#include <sds/sds.h>
+#include <util.h>
+#include <browser-cli.h>
+
+#define READ_BUFFER_SIZE 512
+
+sds get_page(const char* ip, const char* port, const char* URL) {
+ if (streq(URL, "blank")) return sdsnew("\n");
+
+ /*
+ * Create socket for connecting with server
+ */
+ int fd_socket = socket(AF_INET, SOCK_STREAM, 0);
+ herrc(fd_socket, "socket");
+
+ int aton_status = 0;
+ struct sockaddr_in sa_server = {
+ .sin_family = AF_INET,
+ .sin_port = atop(port),
+ .sin_addr = aton(ip, &aton_status),
+ };
+ herrc(aton_status, "inet_aton");
+
+ /*
+ * Request page
+ */
+
+ int connectStatus = connect(fd_socket, (struct sockaddr*)&sa_server, sizeof(struct sockaddr_in));
+ herrc(connectStatus, "connect");
+ if (connectStatus < 0) return sdsnew("Couldn't connect to server!\n");
+
+ write(fd_socket, URL, strlen(URL));
+
+ /*
+ * Receive page
+ */
+
+ sds page = sdsempty();
+
+ char buff[READ_BUFFER_SIZE];
+ clear_arr(buff);
+ while (read(fd_socket, buff, READ_BUFFER_SIZE)) {
+ page = sdscat(page, buff);
+ clear_arr(buff);
+ }
+
+ /*
+ * Final
+ */
+
+ close(fd_socket);
+ return page;
+}
+
+int main(int argc, char* argv[]) {
+ initRendering();
+
+ /*
+ * Server-client communication
+ */
+
+ sds page;
+ sds host = sdsnew("127.0.0.1");
+ sds port = sdsnew("8080");
+ sds uri = sdsnew("blank");
+
+ int stopProgram = 0;
+ while (!stopProgram) {
+ /*
+ * Get the page
+ */
+
+ printf("\033[30;107m%s\033[0m\n", uri);
+ page = get_page(host, port, uri);
+ renderPage(page);
+
+ /*
+ * Handle user input
+ */
+ stopProgram = handleCLI(&host, &port, &uri, page);
+ sdsfree(page);
+ }
+
+ freeRendering();
+ sdsfree(host);
+ sdsfree(port);
+ sdsfree(uri);
+}
diff --git a/Year 3/Network programming/Project/demo/dir/index.md b/Year 3/Network programming/Project/demo/dir/index.md
new file mode 100644
index 0000000..29edefc
--- /dev/null
+++ b/Year 3/Network programming/Project/demo/dir/index.md
@@ -0,0 +1,3 @@
+[[ Index of dir ]]
+
+Go to: [Index](/), [Page](/dir/page.md)
diff --git a/Year 3/Network programming/Project/demo/dir/page.md b/Year 3/Network programming/Project/demo/dir/page.md
new file mode 100644
index 0000000..8e3e7f0
--- /dev/null
+++ b/Year 3/Network programming/Project/demo/dir/page.md
@@ -0,0 +1,3 @@
+[[ Page in dir ]]
+
+Go to: [Index](/dir)
diff --git a/Year 3/Network programming/Project/demo/index.md b/Year 3/Network programming/Project/demo/index.md
new file mode 100644
index 0000000..e82e56d
--- /dev/null
+++ b/Year 3/Network programming/Project/demo/index.md
@@ -0,0 +1,3 @@
+<< Index page >>
+
+Go to: [page](/page.md), [dir](./dir)
diff --git a/Year 3/Network programming/Project/demo/page.md b/Year 3/Network programming/Project/demo/page.md
new file mode 100644
index 0000000..2e14da6
--- /dev/null
+++ b/Year 3/Network programming/Project/demo/page.md
@@ -0,0 +1,3 @@
+<< Page >>
+
+Go to: [Index](/)
diff --git a/Year 3/Network programming/Project/sds b/Year 3/Network programming/Project/sds
new file mode 160000
+Subproject a9a03bb3304030bb8a93823a9aeb03c157831ba
diff --git a/Year 3/Network programming/Project/server-cli.c b/Year 3/Network programming/Project/server-cli.c
new file mode 100644
index 0000000..58e5ea4
--- /dev/null
+++ b/Year 3/Network programming/Project/server-cli.c
@@ -0,0 +1,46 @@
+#include <util.h>
+#include <server-connection.h>
+#include <stdio.h>
+#include <signal.h>
+#include <unistd.h>
+
+#define MAX_LEN_COMMAND 16
+#define COMMAND_FORMAT ": %16s"
+
+void handleCLI(sds **vhosts, int vhostsc) {
+ // Get a line
+ char line[256];
+ fgets(line, 256, stdin);
+
+ // Get command name and it's arguments
+ // Currently no command takes arguments
+ char name[MAX_LEN_COMMAND+1];
+ int argsAssigned = sscanf(line, COMMAND_FORMAT, name);
+
+ while (!streq(name, "q") && !streq(name, "e") && !streq(name, "quit") && !streq(name, "exit")) {
+ if (argsAssigned < 1) {
+ printf("Bad command syntax!\n");
+ }
+ else if (streq(name, "vhosts")) {
+ for (int i = 0; i < vhostsc; i++) {
+ printf("Name: \"%s\" Root dir: \"%s\" Error file: \"%s\"\n",
+ vhosts[i][vh_user],
+ vhosts[i][vh_path],
+ vhosts[i][vh_error]);
+ }
+ }
+ else if (streq(name, "help") || streq(name, "h") || streq(name, "?")) {
+ printf("help,h,?\tPrints this message\nvhosts\t\tPrints all registered virtual hosts\nquit,exit,q,e\tExits the program\n");
+ }
+ else {
+ printf("Unknown command %s!\n", name);
+ }
+
+ // Get line and divided it into command name and arguments
+ fgets(line, 256, stdin);
+ argsAssigned = sscanf(line, COMMAND_FORMAT, name);
+ }
+
+ printf("Exiting...\n");
+ kill(getppid(), SIGTERM);
+}
diff --git a/Year 3/Network programming/Project/server-cli.h b/Year 3/Network programming/Project/server-cli.h
new file mode 100644
index 0000000..b5b5875
--- /dev/null
+++ b/Year 3/Network programming/Project/server-cli.h
@@ -0,0 +1,8 @@
+#ifndef H_SERVER_CLI
+#define H_SERVER_CLI
+
+#include <sds/sds.h>
+
+void handleCLI(sds **vhosts, int vhostsc);
+
+#endif
diff --git a/Year 3/Network programming/Project/server-connection.c b/Year 3/Network programming/Project/server-connection.c
new file mode 100644
index 0000000..285cc1d
--- /dev/null
+++ b/Year 3/Network programming/Project/server-connection.c
@@ -0,0 +1,133 @@
+#include <server-connection.h>
+
+#include <stdio.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <sys/stat.h>
+
+#include <string.h>
+#include <util.h>
+
+sds constructFilePath(const sds root, const char* file);
+void sanitizeAddress(char* address);
+sds* findVhost(char* address, sds** vhosts, const int vhostsc);
+int openError(sds* filePath, int* fd, const sds* vhost, const char* client, const int fd_client);
+
+void on_connection(const char* client, const int fd_client, sds **vhosts, const int vhostsc) {
+ printf("[%s@%d] Connected successfully!\n", client, fd_client);
+
+ /* Get address request */
+ char address[256];
+ memset(address, 0, 256);
+
+ read(fd_client, address, 256);
+ sanitizeAddress(address);
+ printf("[%s@%d] Requested %s\n", client, fd_client, address);
+
+ /* Is the username connected with any file path? */
+ const sds *vhost = findVhost(address, vhosts, vhostsc);
+ if (vhost == NULL) {
+ fprintf(stderr, "[%s@%d] Unknown username in address %s\n", client, fd_client, address);
+ return;
+ }
+
+ /* Try to open the requested file or the error file */
+ sds filePath = constructFilePath(vhost[vh_path], strchr(address, '@') + 1);
+
+ int fd = 0;
+
+ /* Check if file is directory */
+ struct stat buf;
+ if (stat(filePath, &buf) == 0) {
+ if (S_ISDIR(buf.st_mode)) {
+ filePath = sdscat(filePath, "/index.md");
+ }
+ else if (!(S_ISREG(buf.st_mode))) {
+ fprintf(stderr, "[%s@%d] %s is not a regular file!\n", client, fd_client, filePath);
+
+ if (openError(&filePath, &fd, vhost, client, fd_client))
+ return;
+ }
+ }
+
+ if (fd <= 0)
+ fd = open(filePath, O_RDONLY);
+
+ if (fd < 0) {
+ fprintf(stderr, "[%s@%d] Error opening %s\n", client, fd_client, filePath);
+
+ if (openError(&filePath, &fd, vhost, client, fd_client))
+ return;
+ }
+
+ /* Send the file to the client */
+ printf("[%s@%d] Serving %s\n", client, fd_client, filePath);
+ sdsfree(filePath);
+
+ char buff[256];
+ memset(buff, 0, sizeof(buff));
+ while (read(fd, buff, 256)) {
+ write(fd_client, buff, strlen(buff));
+ memset(buff, 0, sizeof(buff));
+ }
+
+ /* Finalize */
+ close(fd);
+ printf("[%s@%d] Served!\n", client, fd_client);
+}
+
+sds constructFilePath(const sds root, const char* file) {
+ sds path = sdsdup(root);
+ if (root[sdslen(root)-1] != '/' && file[0] != '/')
+ path = sdscat(path, "/");
+ path = sdscat(path, file);
+ if (file[strlen(file)-1] == '/')
+ path = sdscat(path, "index.md");
+ return path;
+}
+
+void sanitizeAddress(char* address) {
+ /* Remove host and port */
+ char* startPath = strchr(address, '/');
+ if (startPath == NULL)
+ startPath = strchr(address, '\0');
+
+ char* startHost = strchr(address, '@');
+ shiftLeft(startHost + 1, address - startHost, startPath - startHost - 1);
+
+ /* Remove ../ */
+ for (char* prev = startHost+1, *i = startHost+1; i != NULL && *i != '\0';) {
+ if (i[1] == '.' && i[2] == '.' && i[3] == '/') {
+ shiftLeft(prev, strlen(prev), i - prev + 3);
+ i = prev;
+ }
+ else {
+ prev = i;
+ i = strchr(i+1, '/');
+ }
+ }
+}
+
+sds* findVhost(char* address, sds** vhosts, const int vhostsc) {
+ sds* vhost = NULL;
+ int usernameLen = strchr(address, '@') - address;
+ for (int i = 0; i < vhostsc; i++) {
+ if (strncmp(vhosts[i][vh_user], address, usernameLen) == 0) {
+ vhost = *vhosts + i;
+ break;
+ }
+ }
+ return vhost;
+}
+
+int openError(sds* filePath, int* fd, const sds* vhost, const char* client, const int fd_client) {
+ sdsfree(*filePath);
+ *filePath = constructFilePath(vhost[vh_path], vhost[vh_error]);
+ *fd = open(*filePath, O_RDONLY);
+ if (*fd < 0) {
+ fprintf(stderr, "[%s@%d] Error opening %s\n", client, fd_client, *filePath);
+ sdsfree(*filePath);
+ return 1;
+ }
+ return 0;
+}
diff --git a/Year 3/Network programming/Project/server-connection.h b/Year 3/Network programming/Project/server-connection.h
new file mode 100644
index 0000000..71447ff
--- /dev/null
+++ b/Year 3/Network programming/Project/server-connection.h
@@ -0,0 +1,12 @@
+#ifndef H_SERVER_CONNECTION
+#define H_SERVER_CONNECTION
+
+#include <sds/sds.h>
+
+#define vh_user 0
+#define vh_path 1
+#define vh_error 2
+
+void on_connection(const char* client, const int fd_client, sds **vhosts, const int vhostsc);
+
+#endif
diff --git a/Year 3/Network programming/Project/server.c b/Year 3/Network programming/Project/server.c
new file mode 100644
index 0000000..aeff800
--- /dev/null
+++ b/Year 3/Network programming/Project/server.c
@@ -0,0 +1,185 @@
+/* The server recieves connections and passes files to the clients
+ */
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+
+#include <unistd.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <fcntl.h>
+#include <sys/wait.h>
+#include <signal.h>
+#include <errno.h>
+#include <sys/select.h>
+
+#include <string.h>
+#include <sds/sds.h>
+#include <util.h>
+
+#include <server-connection.h>
+#include <server-cli.h>
+
+int createCommunicationSocket(const char* ip, const char* port) {
+ int fd_socket = socket(AF_INET, SOCK_STREAM | SOCK_NONBLOCK, 0);
+ herr(fd_socket, "socket");
+
+ int aton_status = 0;
+ struct sockaddr_in sa_socket = {
+ .sin_family = AF_INET,
+ .sin_port = atop(port),
+ .sin_addr = aton(ip, &aton_status),
+ };
+ herr(aton_status, "inet_aton");
+
+ // Reuse address when in TIME_WAIT state, after listening socket was closed
+ // https://stackoverflow.com/a/10651048/12036073
+ // https://superuser.com/questions/173535/what-are-close-wait-and-time-wait-states#comment951880_173543
+ int true = 1;
+ herr(setsockopt(fd_socket, SOL_SOCKET, SO_REUSEADDR, &true, sizeof(int)), "setsockopt");
+
+ herr(bind(fd_socket, (struct sockaddr*)&sa_socket, sizeof(struct sockaddr_in)), "bind");
+
+ herr(listen(fd_socket, 50), "listen");
+
+ return fd_socket;
+}
+
+void freeVhosts(sds **vhosts, int vhostsc) {
+ for (int i = 0; i < vhostsc; i++) {
+ sdsfreesplitres(vhosts[i], 3);
+ }
+ free(vhosts);
+}
+
+int acceptConnections = 1;
+
+void handler_refuseConnections(int signum) {
+ acceptConnections = 0;
+}
+
+int main(int argc, char* argv[]) {
+ /*
+ * Get server parameters
+ */
+
+ sds host = sdsnew("127.0.0.1");
+ sds port = sdsnew("8080");
+
+ int argvOffset = 1;
+ if (argc > 1 && charCount(argv[1], ',') == 1) {
+ argvOffset++;
+ char* sep = strchr(argv[1], ',');
+ sdsfree(host);
+ host = sdsnewlen(argv[1], sep - argv[1]);
+ sdsfree(port);
+ port = sdsnew(sep + 1);
+ }
+
+ /*
+ * Get hosts
+ */
+
+ int vhostsc = argc - argvOffset;
+ sds **vhosts = malloc(vhostsc * sizeof(sds*));
+ for (int i = 0, temp = 0; i < vhostsc; i++) {
+ vhosts[i] = sdssplitlen(argv[i+argvOffset], strlen(argv[i+argvOffset]), ",", 1, &temp);
+ }
+
+ /*
+ * Create socket for accepting connections
+ */
+
+ int fd_socket = createCommunicationSocket(host, port);
+ printf("Listening on %s:%s\n", host, port);
+
+ /*
+ * Server command-line interface
+ */
+
+ int pid_cli = fork();
+ if (pid_cli == 0) {
+ close(fd_socket);
+ handleCLI(vhosts, vhostsc);
+ freeVhosts(vhosts, vhostsc);
+ sdsfree(host);
+ sdsfree(port);
+ return 0;
+ }
+
+ /*
+ * Define variables
+ */
+
+ // Client address
+ struct sockaddr_in sa_client = {
+ .sin_family = AF_INET,
+ .sin_port = 0,
+ .sin_addr.s_addr = 0,
+ };
+ socklen_t sa_client_size = sizeof(struct sockaddr_in);
+
+ int fd_client;
+ int count = 0;
+ int pselectStat = 0;
+
+ /*
+ * Handle connection requests
+ */
+
+ // Data for pselect
+ fd_set rfds;
+ struct timespec tv = {
+ /* How long should we block (wait) for fd_socket to have a request */
+ .tv_sec = 0,
+ .tv_nsec = 100000,
+ };
+
+ // Stop accepting connections on SIGTERM
+ signal(SIGTERM, handler_refuseConnections);
+
+ while (acceptConnections) {
+ /*
+ * Check if fd_socket has something we can read
+ */
+
+ FD_ZERO(&rfds);
+ FD_SET(fd_socket, &rfds);
+
+ herrc(pselect(fd_socket + 1, &rfds, NULL, NULL, &tv, NULL), "pselect");
+ if (!FD_ISSET(fd_socket, &rfds)) continue;
+
+ /*
+ * Accept the connection
+ */
+
+ fd_client = accept(fd_socket, (struct sockaddr*)&sa_client, &sa_client_size);
+ if (acceptConnections) herrc(fd_client, "accept");
+ if (fd_client < 0) continue;
+
+ char* strAddr = inet_ntoa(sa_client.sin_addr);
+ count++;
+
+ /*
+ * Logic when connected with client
+ */
+
+ int fp = fork();
+ if (fp == 0) {
+ close(fd_socket);
+ on_connection(strAddr, fd_client, vhosts, argc - 1);
+ close(fd_client);
+ freeVhosts(vhosts, vhostsc);
+ sdsfree(host);
+ sdsfree(port);
+ return 0;
+ }
+ close(fd_client);
+ }
+
+ while(wait(NULL) > 0);
+ freeVhosts(vhosts, vhostsc);
+ close(fd_socket);
+ sdsfree(host);
+ sdsfree(port);
+}
diff --git a/Year 3/Network programming/Project/util.c b/Year 3/Network programming/Project/util.c
new file mode 100644
index 0000000..822a4d2
--- /dev/null
+++ b/Year 3/Network programming/Project/util.c
@@ -0,0 +1,180 @@
+#include <util.h>
+#include <arpa/inet.h>
+#include <stdlib.h>
+
+#include <string.h>
+#include <stdio.h>
+#include <errno.h>
+#include <regex.h>
+
+/*
+ * Networking
+ */
+
+uint16_t atop(const char *port) {
+ return htons(atoi(port));
+}
+
+struct in_addr aton(const char* cp, int* output) {
+ struct in_addr inp;
+ *output = inet_aton(cp, &inp);
+ return inp;
+}
+
+/*
+ * Error handling
+ */
+
+void herrc(int output, const char* funcName) {
+ if (output < 0 && errno != EINTR) {
+ perror(funcName);
+ }
+}
+
+void herr(int output, const char* funcName) {
+ if (output < 0) {
+ perror(funcName);
+ exit(errno);
+ }
+}
+
+/*
+ * sds string substitution
+ */
+
+sds getMatch(const sds str, const regmatch_t match) {
+ return sdsnewlen(str + match.rm_so, match.rm_eo - match.rm_so);
+}
+int validMatch(const regmatch_t match) {
+ return match.rm_so > -1;
+}
+
+void resizeMatches(int* *matches, int* size) {
+ if (*size == 0) {
+ *matches = malloc((*size = 8) * sizeof(int*));
+ return;
+ }
+
+ int* *biggerArr = malloc((*size * 2) * sizeof(int*));
+ for (size_t i = 0; i < *size; i++) {
+ biggerArr[i] = matches[i];
+ }
+ *size *= 2;
+ free(matches);
+ *matches = *biggerArr;
+}
+void pushBackMatch(int* *matches, int *matchesCount, int *matchesSize, int matchStart) {
+ if (*matchesCount >= *matchesSize)
+ resizeMatches(matches, matchesSize);
+
+ (*matches)[*matchesCount] = matchStart;
+ *matchesCount += 1;
+}
+
+#define MATCHSTART str + strInd
+sds gsub_getm(sds str, const regex_t *regex, const char* repl, int* *matches, int *matchesCount) {
+ regmatch_t pmatch[10] = {
+ { .rm_so = 0, .rm_eo = 0, }, { .rm_so = 0, .rm_eo = 0, }, { .rm_so = 0, .rm_eo = 0, },
+ { .rm_so = 0, .rm_eo = 0, }, { .rm_so = 0, .rm_eo = 0, }, { .rm_so = 0, .rm_eo = 0, },
+ { .rm_so = 0, .rm_eo = 0, }, { .rm_so = 0, .rm_eo = 0, }, { .rm_so = 0, .rm_eo = 0, },
+ { .rm_so = 0, .rm_eo = 0, },
+ };
+
+ int strInd = 0;
+ int matchesSize = (matchesCount != NULL) ? *matchesCount : 0;
+ size_t replLen = strlen(repl);
+
+ sds ret = sdsempty();
+ /*
+ * Substitute all occurences of regex with repl in str
+ */
+ // sdslen is in O(1) time
+ while (strInd < sdslen(str)) {
+ /* Run regex */
+ if (regexec(regex, MATCHSTART, 10, pmatch, 0) != 0) {
+ /* If there are no matches, return the rest of the string as-is */
+ ret = sdscat(ret, MATCHSTART);
+ break;
+ }
+
+ /* Store everything before the match as-is */
+ ret = sdscatlen(ret, MATCHSTART, pmatch[0].rm_so);
+
+ /* Replace match with repl
+ * repl can include matched subexpressions */
+ for(size_t i = 0; i < replLen; i++) {
+ if (repl[i] <= '\10') {
+ if (pmatch[repl[i] % 10].rm_so > -1) {
+ sds match = getMatch(MATCHSTART, pmatch[repl[i] % 10]);
+ ret = sdscatsds(ret, match);
+ sdsfree(match);
+ }
+ }
+ else
+ ret = sdscatlen(ret, &repl[i], 1);
+ }
+
+ /* Add index of current match to matches */
+ if (matchesCount != NULL) {
+ pushBackMatch(matches, matchesCount, &matchesSize, strInd + pmatch[0].rm_so);
+ }
+
+ /* Continute after the current match */
+ strInd += pmatch[0].rm_eo;
+ }
+
+ sdsfree(str);
+ return ret;
+}
+
+sds gsub(sds str, const regex_t* regex, const char* repl) {
+ return gsub_getm(str, regex, repl, NULL, NULL);
+}
+
+/*
+ * other
+ */
+
+int digits(int num) {
+ if (num < 0) num *= -1;
+ // This is the fastest way to get the number of digits
+ if (num < 10) return 1;
+ if (num < 100) return 2;
+ if (num < 1000) return 3;
+ if (num < 10000) return 4;
+ if (num < 100000) return 5;
+ if (num < 1000000) return 6;
+ if (num < 10000000) return 7;
+ if (num < 100000000) return 8;
+ if (num < 1000000000) return 9;
+ // 2147483647 (2^31-1) is max value of int
+ return 10;
+}
+
+int streq(const char* first, const char* second) {
+ return strcmp(first, second) == 0;
+}
+
+void shiftLeft(char* str, size_t size, size_t shift) {
+ while (*(str + shift - 1) != '\0') {
+ *str = *(str + shift);
+ str++;
+ }
+}
+
+int isNumber(char* str) {
+ while (*str >= ' ') {
+ if (*str < '0' || *str > '9') return 0;
+ str++;
+ }
+ return 1;
+}
+
+int charCount(char* str, char cmp) {
+ int count = 0;
+ while (*str != '\0') {
+ count += *str == cmp;
+ str++;
+ }
+ return count;
+}
diff --git a/Year 3/Network programming/Project/util.h b/Year 3/Network programming/Project/util.h
new file mode 100644
index 0000000..b2836eb
--- /dev/null
+++ b/Year 3/Network programming/Project/util.h
@@ -0,0 +1,29 @@
+#ifndef H_UTIL
+#define H_UTIL
+
+#include <inttypes.h>
+#include <sds/sds.h>
+#include <arpa/inet.h>
+#include <regex.h>
+
+/* Networking */
+uint16_t atop(const char *port);
+struct in_addr aton(const char* cp, int* output);
+
+/* Error handling */
+void herr(int output, const char* funcName);
+void herrc(int output, const char* funcName);
+
+/* sds string substition */
+sds gsub(sds str, const regex_t* regex, const char* repl);
+sds gsub_getm(sds str, const regex_t *regex, const char* repl, int* *matches, int *matchesCount);
+
+/* Other */
+#define clear_arr(arr) memset(arr, 0, sizeof(arr)/sizeof(*arr))
+int digits(int num);
+int streq(const char* first, const char* second);
+void shiftLeft(char* str, size_t size, size_t shift);
+int isNumber(char* str);
+int charCount(char* str, char cmp);
+
+#endif