studium 0.10.1

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of studium might be problematic. Click here for more details.

Files changed (882) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +1982 -0
  3. data/bin/ask_exam_question +7 -0
  4. data/bin/check_description_of_these_lectures +7 -0
  5. data/bin/curriculum_module_displayer +7 -0
  6. data/bin/d10 +7 -0
  7. data/bin/d100 +7 -0
  8. data/bin/d15 +7 -0
  9. data/bin/d20 +7 -0
  10. data/bin/d25 +7 -0
  11. data/bin/d3 +7 -0
  12. data/bin/d30 +7 -0
  13. data/bin/d5 +7 -0
  14. data/bin/determine_curricula +7 -0
  15. data/bin/exam_registration_at +7 -0
  16. data/bin/exam_statistics +7 -0
  17. data/bin/exams_per_month +9 -0
  18. data/bin/finished_exams_at_this_university +7 -0
  19. data/bin/flashcards +7 -0
  20. data/bin/mandatory_continuous_assessment +7 -0
  21. data/bin/mandatory_upcoming_courses +7 -0
  22. data/bin/n_exam_questions_already_answered +16 -0
  23. data/bin/nquestions +7 -0
  24. data/bin/nsolved +7 -0
  25. data/bin/open_last_exam_question_asked_file +7 -0
  26. data/bin/passed_pr/303/274fungsimmanente_courses +7 -0
  27. data/bin/return_n_ects_from_this_file +7 -0
  28. data/bin/show_lectures_on_the_commandline +7 -0
  29. data/bin/show_themes +7 -0
  30. data/bin/solved +9 -0
  31. data/bin/solved_ects +7 -0
  32. data/bin/studienkennzahl +7 -0
  33. data/bin/studium +7 -0
  34. data/bin/studium_skeleton +7 -0
  35. data/bin/ufind +7 -0
  36. data/bin/upcoming_exams +7 -0
  37. data/bin/week_parser +7 -0
  38. data/doc/ECTS_CONSIDERATIONS.md +81 -0
  39. data/doc/HOW_TO_ADAPT_THIS_PROJECT.md +43 -0
  40. data/doc/HOW_TO_DETERMINE_WHICH_PART_IS_THE_QUESTION_AND_WHICH_PART_IS_THE_ANSWER.md +47 -0
  41. data/doc/README.gen +1965 -0
  42. data/doc/TODO_FOR_STUDIUM_GEM.md +113 -0
  43. data/doc/deprecated_components.md +24 -0
  44. data/doc/documentation_for_the_file_lecture_information.md +294 -0
  45. data/doc/elegant_colours.md +20 -0
  46. data/img/STUDIES.png +0 -0
  47. data/lib/studium.rb +5 -0
  48. data/lib/studium/autoinclude.rb +7 -0
  49. data/lib/studium/base/base.rb +84 -0
  50. data/lib/studium/base/cliner.rb +58 -0
  51. data/lib/studium/base/colours.rb +307 -0
  52. data/lib/studium/base/commandline_arguments.rb +64 -0
  53. data/lib/studium/base/constants.rb +34 -0
  54. data/lib/studium/base/curriculum.rb +329 -0
  55. data/lib/studium/base/directory_to_the_exam_topics.rb +23 -0
  56. data/lib/studium/base/editor.rb +28 -0
  57. data/lib/studium/base/encoding.rb +36 -0
  58. data/lib/studium/base/esystem.rb +23 -0
  59. data/lib/studium/base/minimal_prototype.rb +66 -0
  60. data/lib/studium/base/misc.rb +854 -0
  61. data/lib/studium/base/mode.rb +92 -0
  62. data/lib/studium/base/obtain.rb +145 -0
  63. data/lib/studium/base/opnn.rb +46 -0
  64. data/lib/studium/base/prototype.rb +92 -0
  65. data/lib/studium/base/readlines.rb +55 -0
  66. data/lib/studium/base/replace.rb +110 -0
  67. data/lib/studium/base/reset.rb +77 -0
  68. data/lib/studium/base/run.rb +17 -0
  69. data/lib/studium/base/src_dir_at_home.rb +20 -0
  70. data/lib/studium/base/time.rb +634 -0
  71. data/lib/studium/base/unicode.rb +95 -0
  72. data/lib/studium/base/word_wrap.rb +58 -0
  73. data/lib/studium/boku/README.md +4 -0
  74. data/lib/studium/boku/boku_biotechnology_all_master_lectures.rb +142 -0
  75. data/lib/studium/boku/boku_/303/266ffnungszeiten.rb +29 -0
  76. data/lib/studium/boku/show_three_pillars_of_these_lectures.rb +96 -0
  77. data/lib/studium/boku/three_pillars.rb +232 -0
  78. data/lib/studium/check_and_sanitize/README.md +11 -0
  79. data/lib/studium/check_and_sanitize/check_curriculum_for_correct_separation_of_bachelor_and_master.rb +149 -0
  80. data/lib/studium/check_and_sanitize/check_for_all_exam_topics_being_registered.rb +107 -0
  81. data/lib/studium/check_and_sanitize/check_for_existing_description_of_this_lecture.rb +197 -0
  82. data/lib/studium/check_and_sanitize/check_the_lecture_information_file.rb +171 -0
  83. data/lib/studium/check_and_sanitize/missing_priority_entry.rb +44 -0
  84. data/lib/studium/check_and_sanitize/sanitize_this_string_containing_the_lva_dates.rb +79 -0
  85. data/lib/studium/colours/colours.rb +570 -0
  86. data/lib/studium/colours/sfancy.rb +40 -0
  87. data/lib/studium/colours/sfile.rb +35 -0
  88. data/lib/studium/colours/simp.rb +38 -0
  89. data/lib/studium/colours/use_this_colour_for_exam_questions_and_exam_answers.rb +76 -0
  90. data/lib/studium/commandline/commandline.rb +25 -0
  91. data/lib/studium/commandline/constants.rb +16 -0
  92. data/lib/studium/commandline/help.rb +152 -0
  93. data/lib/studium/commandline/initialize.rb +27 -0
  94. data/lib/studium/commandline/menu.rb +760 -0
  95. data/lib/studium/commandline/misc.rb +707 -0
  96. data/lib/studium/commandline/reset.rb +24 -0
  97. data/lib/studium/commandline/run.rb +20 -0
  98. data/lib/studium/constants/boku_wien.rb +52 -0
  99. data/lib/studium/constants/constants.rb +25 -0
  100. data/lib/studium/constants/delay.rb +28 -0
  101. data/lib/studium/constants/editor.rb +28 -0
  102. data/lib/studium/constants/exam_topics.rb +183 -0
  103. data/lib/studium/constants/file_constants.rb +875 -0
  104. data/lib/studium/constants/image_constants.rb +216 -0
  105. data/lib/studium/constants/last_question_asked.rb +38 -0
  106. data/lib/studium/constants/lecture_types_that_are_mandatory_continuous_assessment.rb +47 -0
  107. data/lib/studium/constants/misc.rb +163 -0
  108. data/lib/studium/constants/namespace.rb +14 -0
  109. data/lib/studium/constants/newline.rb +14 -0
  110. data/lib/studium/constants/regexes.rb +35 -0
  111. data/lib/studium/constants/return_file_for_this_curriculum.rb +411 -0
  112. data/lib/studium/constants/roebe.rb +173 -0
  113. data/lib/studium/constants/time.rb +52 -0
  114. data/lib/studium/constants/tu_wien.rb +39 -0
  115. data/lib/studium/constants/uni_wien.rb +24 -0
  116. data/lib/studium/constants/unicode.rb +27 -0
  117. data/lib/studium/constants/week.rb +138 -0
  118. data/lib/studium/constants/www_constants.rb +23 -0
  119. data/lib/studium/curricula/curriculum.rb +199 -0
  120. data/lib/studium/curricula/curriculum_as_string.rb +279 -0
  121. data/lib/studium/curricula/curriculum_module_displayer/constants.rb +38 -0
  122. data/lib/studium/curricula/curriculum_module_displayer/curriculum_module_displayer.rb +417 -0
  123. data/lib/studium/curricula/curriculum_module_displayer/initialize.rb +25 -0
  124. data/lib/studium/curricula/curriculum_module_displayer/menu.rb +45 -0
  125. data/lib/studium/curricula/curriculum_module_displayer/reset.rb +77 -0
  126. data/lib/studium/curricula/curriculum_module_displayer/run.rb +20 -0
  127. data/lib/studium/curricula/curriculum_module_displayer/set_use_this_curriculum.rb +93 -0
  128. data/lib/studium/curricula/curriculum_module_displayer/show_and_report.rb +190 -0
  129. data/lib/studium/curricula/determine_curricula/constants.rb +16 -0
  130. data/lib/studium/curricula/determine_curricula/determine_curricula.rb +36 -0
  131. data/lib/studium/curricula/determine_curricula/help.rb +39 -0
  132. data/lib/studium/curricula/determine_curricula/initialize.rb +48 -0
  133. data/lib/studium/curricula/determine_curricula/menu.rb +138 -0
  134. data/lib/studium/curricula/determine_curricula/misc.rb +402 -0
  135. data/lib/studium/curricula/determine_curricula/report.rb +131 -0
  136. data/lib/studium/curricula/determine_curricula/reset.rb +62 -0
  137. data/lib/studium/curricula/determine_curricula/run.rb +19 -0
  138. data/lib/studium/curricula/determine_elective_courses_in_this_curriculum.rb +112 -0
  139. data/lib/studium/curricula/display_bachelor_curricula.rb +89 -0
  140. data/lib/studium/curricula/mitteilungsbl/303/244tter.rb +336 -0
  141. data/lib/studium/curricula/modules/display_on_the_commandline.rb +316 -0
  142. data/lib/studium/curricula/modules/return_n_ects_in_this_module.rb +74 -0
  143. data/lib/studium/curricula/n_percent_solved_in_this_curriculum.rb +75 -0
  144. data/lib/studium/curricula/random_curriculum_creator.rb +171 -0
  145. data/lib/studium/curricula/show_lectures_of_this_curriculum.rb +114 -0
  146. data/lib/studium/curricula/show_lectures_of_this_curriculum_id/constants.rb +16 -0
  147. data/lib/studium/curricula/show_lectures_of_this_curriculum_id/initialize.rb +27 -0
  148. data/lib/studium/curricula/show_lectures_of_this_curriculum_id/menu.rb +35 -0
  149. data/lib/studium/curricula/show_lectures_of_this_curriculum_id/misc.rb +242 -0
  150. data/lib/studium/curricula/show_lectures_of_this_curriculum_id/report.rb +140 -0
  151. data/lib/studium/curricula/show_lectures_of_this_curriculum_id/reset.rb +67 -0
  152. data/lib/studium/curricula/show_lectures_of_this_curriculum_id/show_lectures_of_this_curriculum_id.rb +37 -0
  153. data/lib/studium/curricula/show_solved_percentage_among_the_registered_curricula.rb +87 -0
  154. data/lib/studium/ects/boku_ects_splitter.rb +127 -0
  155. data/lib/studium/ects/ects_parser.rb +179 -0
  156. data/lib/studium/ects/ects_per_university.rb +140 -0
  157. data/lib/studium/ects/ects_scanner.rb +141 -0
  158. data/lib/studium/ects/ects_to_university_parser.rb +148 -0
  159. data/lib/studium/ects/erledigt.rb +131 -0
  160. data/lib/studium/ects/last_entry_is_curriculum.rb +147 -0
  161. data/lib/studium/ects/n_ects_in_these_lectures.rb +185 -0
  162. data/lib/studium/ects/n_ects_points_in_mandatory_presence_courses.rb +50 -0
  163. data/lib/studium/ects/noch_zu_absolvieren.rb +172 -0
  164. data/lib/studium/ects/return_n_ects_from_this_file.rb +58 -0
  165. data/lib/studium/ects/return_n_ects_from_this_url.rb +202 -0
  166. data/lib/studium/ects/search_for_n_ects.rb +540 -0
  167. data/lib/studium/ects/show_completed_ects_in_all_curricula.rb +210 -0
  168. data/lib/studium/ects/show_passed_credits_per_curriculum.rb +254 -0
  169. data/lib/studium/ects/simple_total_ects_points.rb +143 -0
  170. data/lib/studium/ects/solved_ects/constants.rb +24 -0
  171. data/lib/studium/ects/solved_ects/reset.rb +54 -0
  172. data/lib/studium/ects/solved_ects/solved_ects.rb +325 -0
  173. data/lib/studium/ects/solved_ects_per_university/reset.rb +25 -0
  174. data/lib/studium/ects/solved_ects_per_university/solved_ects_per_university.rb +106 -0
  175. data/lib/studium/ects/still_missing.rb +133 -0
  176. data/lib/studium/ects/sum_of_ects.rb +150 -0
  177. data/lib/studium/encoding/encoding.rb +150 -0
  178. data/lib/studium/exam_topics/RNAi_siRNA_and_miRNA +79 -0
  179. data/lib/studium/exam_topics/abfall_als_ressource +86 -0
  180. data/lib/studium/exam_topics/advanced_biochemistry +762 -0
  181. data/lib/studium/exam_topics/advanced_biotechnology +192 -0
  182. data/lib/studium/exam_topics/advanced_cellbiology +25 -0
  183. data/lib/studium/exam_topics/advanced_chemistry +453 -0
  184. data/lib/studium/exam_topics/advanced_microbiology +44 -0
  185. data/lib/studium/exam_topics/advanced_topics_in_plant_sciences +51 -0
  186. data/lib/studium/exam_topics/advanced_virology +52 -0
  187. data/lib/studium/exam_topics/ageing +101 -0
  188. data/lib/studium/exam_topics/agrar_ecology +61 -0
  189. data/lib/studium/exam_topics/agrarmarkt +70 -0
  190. data/lib/studium/exam_topics/agrarphysik +35 -0
  191. data/lib/studium/exam_topics/alcohols +29 -0
  192. data/lib/studium/exam_topics/algorithms +49 -0
  193. data/lib/studium/exam_topics/allergie +73 -0
  194. data/lib/studium/exam_topics/allgemeine_genetik +1006 -0
  195. data/lib/studium/exam_topics/allgemeine_mikrobiologie +855 -0
  196. data/lib/studium/exam_topics/aminoacids +417 -0
  197. data/lib/studium/exam_topics/analytische_chemie_1 +131 -0
  198. data/lib/studium/exam_topics/analytische_chemie_2 +31 -0
  199. data/lib/studium/exam_topics/anatomie +248 -0
  200. data/lib/studium/exam_topics/anorganische_chemie +289 -0
  201. data/lib/studium/exam_topics/anthropologie +115 -0
  202. data/lib/studium/exam_topics/antibodies_and_antigens +747 -0
  203. data/lib/studium/exam_topics/apoptosis +35 -0
  204. data/lib/studium/exam_topics/archaea +41 -0
  205. data/lib/studium/exam_topics/architecture +8 -0
  206. data/lib/studium/exam_topics/artificial_intelligence +81 -0
  207. data/lib/studium/exam_topics/audio +10 -0
  208. data/lib/studium/exam_topics/bacteriophages +224 -0
  209. data/lib/studium/exam_topics/basic_biochemistry +1008 -0
  210. data/lib/studium/exam_topics/basic_biotechnology +1011 -0
  211. data/lib/studium/exam_topics/basic_chemistry +1007 -0
  212. data/lib/studium/exam_topics/basic_virology +955 -0
  213. data/lib/studium/exam_topics/bauwesen +6 -0
  214. data/lib/studium/exam_topics/betriebssysteme +125 -0
  215. data/lib/studium/exam_topics/betriebswirtschaftslehre +29 -0
  216. data/lib/studium/exam_topics/bioanalytik_und_biosensoren +381 -0
  217. data/lib/studium/exam_topics/biochips +78 -0
  218. data/lib/studium/exam_topics/bioelektrochemie +56 -0
  219. data/lib/studium/exam_topics/biofilms +22 -0
  220. data/lib/studium/exam_topics/bioinformatics +475 -0
  221. data/lib/studium/exam_topics/biological_therapeutics +152 -0
  222. data/lib/studium/exam_topics/biologie +134 -0
  223. data/lib/studium/exam_topics/biomarkers +106 -0
  224. data/lib/studium/exam_topics/biomaterials +46 -0
  225. data/lib/studium/exam_topics/biomembranes +6 -0
  226. data/lib/studium/exam_topics/bionik +65 -0
  227. data/lib/studium/exam_topics/biophysik +34 -0
  228. data/lib/studium/exam_topics/biopolymers +10 -0
  229. data/lib/studium/exam_topics/bioprozesstechnik +139 -0
  230. data/lib/studium/exam_topics/bioressourcenmanagement +78 -0
  231. data/lib/studium/exam_topics/bodenkunde +345 -0
  232. data/lib/studium/exam_topics/bodenmikrobiologie +40 -0
  233. data/lib/studium/exam_topics/cancerbiology +441 -0
  234. data/lib/studium/exam_topics/cell_cultures +154 -0
  235. data/lib/studium/exam_topics/cellbiology +962 -0
  236. data/lib/studium/exam_topics/cellular_transport_and_protein_secretion +27 -0
  237. data/lib/studium/exam_topics/chemische_technologie_anorganischer_stoffe +208 -0
  238. data/lib/studium/exam_topics/chemisches_labor +59 -0
  239. data/lib/studium/exam_topics/chemotaxis_and_motility_in_prokaryotes +74 -0
  240. data/lib/studium/exam_topics/citric_acid_cycle +70 -0
  241. data/lib/studium/exam_topics/clinical_microbiology +486 -0
  242. data/lib/studium/exam_topics/computer_graphics +5 -0
  243. data/lib/studium/exam_topics/computer_science +269 -0
  244. data/lib/studium/exam_topics/crispr +25 -0
  245. data/lib/studium/exam_topics/cyanobacteria +37 -0
  246. data/lib/studium/exam_topics/cytogenetics_and_chromosome_biology +506 -0
  247. data/lib/studium/exam_topics/databases_and_sql +105 -0
  248. data/lib/studium/exam_topics/dna_mutation_and_dna_repair +33 -0
  249. data/lib/studium/exam_topics/dna_replication +53 -0
  250. data/lib/studium/exam_topics/ecogenetics +27 -0
  251. data/lib/studium/exam_topics/ecological_agriculture +12 -0
  252. data/lib/studium/exam_topics/ecology +313 -0
  253. data/lib/studium/exam_topics/economy +210 -0
  254. data/lib/studium/exam_topics/elektronenmikroskopie +353 -0
  255. data/lib/studium/exam_topics/elektrophorese +88 -0
  256. data/lib/studium/exam_topics/elektrotechnik +8 -0
  257. data/lib/studium/exam_topics/elisa +54 -0
  258. data/lib/studium/exam_topics/embryologie_und_entwicklung +541 -0
  259. data/lib/studium/exam_topics/endospores_and_spores +92 -0
  260. data/lib/studium/exam_topics/enzymes_and_cofactors +327 -0
  261. data/lib/studium/exam_topics/epigenetik +177 -0
  262. data/lib/studium/exam_topics/ethik +125 -0
  263. data/lib/studium/exam_topics/evolution_and_evolutionary_genetics +323 -0
  264. data/lib/studium/exam_topics/excel +7 -0
  265. data/lib/studium/exam_topics/fish +19 -0
  266. data/lib/studium/exam_topics/fluorescence_microscopy +7 -0
  267. data/lib/studium/exam_topics/food_microbiology_and_food_biotechnology +17 -0
  268. data/lib/studium/exam_topics/forensik +11 -0
  269. data/lib/studium/exam_topics/forstwirtschaft +52 -0
  270. data/lib/studium/exam_topics/fortgeschrittene_genetik +429 -0
  271. data/lib/studium/exam_topics/fortgeschrittene_gentechnik +189 -0
  272. data/lib/studium/exam_topics/fortgeschrittene_physik +6 -0
  273. data/lib/studium/exam_topics/fungi +78 -0
  274. data/lib/studium/exam_topics/genetische_krankheiten +150 -0
  275. data/lib/studium/exam_topics/genexpression +1008 -0
  276. data/lib/studium/exam_topics/genomics_and_metagenomics +205 -0
  277. data/lib/studium/exam_topics/gentechnik_und_praktische_biochemie +863 -0
  278. data/lib/studium/exam_topics/geochemistry +66 -0
  279. data/lib/studium/exam_topics/geography +5 -0
  280. data/lib/studium/exam_topics/geologie_und_mineralogie +610 -0
  281. data/lib/studium/exam_topics/geschichte +94 -0
  282. data/lib/studium/exam_topics/gluconeogenesis +34 -0
  283. data/lib/studium/exam_topics/glycolysis +95 -0
  284. data/lib/studium/exam_topics/glykomik +42 -0
  285. data/lib/studium/exam_topics/glyoxylatzyklus +23 -0
  286. data/lib/studium/exam_topics/grassland_cultivation +32 -0
  287. data/lib/studium/exam_topics/hormone +122 -0
  288. data/lib/studium/exam_topics/html +7 -0
  289. data/lib/studium/exam_topics/human_ecology +8 -0
  290. data/lib/studium/exam_topics/hygiene +191 -0
  291. data/lib/studium/exam_topics/imaging_and_microscopy +224 -0
  292. data/lib/studium/exam_topics/immunanalytik +88 -0
  293. data/lib/studium/exam_topics/immunologie +888 -0
  294. data/lib/studium/exam_topics/informatik +95 -0
  295. data/lib/studium/exam_topics/innate_immunity +20 -0
  296. data/lib/studium/exam_topics/insekten +30 -0
  297. data/lib/studium/exam_topics/insulin_and_diabetes +55 -0
  298. data/lib/studium/exam_topics/java +440 -0
  299. data/lib/studium/exam_topics/javascript +10 -0
  300. data/lib/studium/exam_topics/klima +6 -0
  301. data/lib/studium/exam_topics/landtechnik +27 -0
  302. data/lib/studium/exam_topics/lebensmittel +206 -0
  303. data/lib/studium/exam_topics/lebensmitteltechnologie +16 -0
  304. data/lib/studium/exam_topics/linux +5 -0
  305. data/lib/studium/exam_topics/lipids +95 -0
  306. data/lib/studium/exam_topics/macroeconomics +39 -0
  307. data/lib/studium/exam_topics/mathematics +175 -0
  308. data/lib/studium/exam_topics/medizin_und_biomedizinische_technik +250 -0
  309. data/lib/studium/exam_topics/medizinische_chemie_und_pharmazie +397 -0
  310. data/lib/studium/exam_topics/messtechnik_und_regeltechnik +104 -0
  311. data/lib/studium/exam_topics/metabolismus +433 -0
  312. data/lib/studium/exam_topics/microbial_ecology +35 -0
  313. data/lib/studium/exam_topics/mikrobielle_lebensgemeinschaften +34 -0
  314. data/lib/studium/exam_topics/mikrobielle_physiologie +153 -0
  315. data/lib/studium/exam_topics/mixed +289 -0
  316. data/lib/studium/exam_topics/molecular_biology_of_plants +235 -0
  317. data/lib/studium/exam_topics/molekulare_medizin +129 -0
  318. data/lib/studium/exam_topics/nanotechnologie +303 -0
  319. data/lib/studium/exam_topics/nature_conservation_and_biodiversity +165 -0
  320. data/lib/studium/exam_topics/naturstoffe +9 -0
  321. data/lib/studium/exam_topics/netzwerke +32 -0
  322. data/lib/studium/exam_topics/neurobiology +266 -0
  323. data/lib/studium/exam_topics/nucleotide_sequencing +30 -0
  324. data/lib/studium/exam_topics/object_oriented_modeling +14 -0
  325. data/lib/studium/exam_topics/obstbau +234 -0
  326. data/lib/studium/exam_topics/organische_chemie +1007 -0
  327. data/lib/studium/exam_topics/organische_chemie_2 +72 -0
  328. data/lib/studium/exam_topics/paleobiology +33 -0
  329. data/lib/studium/exam_topics/parasitic_diseases_and_molecular_infection_biology +335 -0
  330. data/lib/studium/exam_topics/patent_law +55 -0
  331. data/lib/studium/exam_topics/pathologie +713 -0
  332. data/lib/studium/exam_topics/pcr +133 -0
  333. data/lib/studium/exam_topics/peroxisomes_glycosomes_and_lysosomes +54 -0
  334. data/lib/studium/exam_topics/pflanzenanatomie +240 -0
  335. data/lib/studium/exam_topics/pflanzenbau +24 -0
  336. data/lib/studium/exam_topics/pflanzenschutz +35 -0
  337. data/lib/studium/exam_topics/pflanzenwissenschaften +1009 -0
  338. data/lib/studium/exam_topics/pharmaceutical_biotechnology +250 -0
  339. data/lib/studium/exam_topics/physik +338 -0
  340. data/lib/studium/exam_topics/physikalische_chemie +85 -0
  341. data/lib/studium/exam_topics/physiology_and_histology +485 -0
  342. data/lib/studium/exam_topics/phytochemie +33 -0
  343. data/lib/studium/exam_topics/plant_biotechnology +127 -0
  344. data/lib/studium/exam_topics/plant_breeding +64 -0
  345. data/lib/studium/exam_topics/plant_development +50 -0
  346. data/lib/studium/exam_topics/populationsgenetik +136 -0
  347. data/lib/studium/exam_topics/posttranslationale_modifikation_von_proteinen +186 -0
  348. data/lib/studium/exam_topics/projektmanagement +218 -0
  349. data/lib/studium/exam_topics/prokaryote_genetics +470 -0
  350. data/lib/studium/exam_topics/proteomik +38 -0
  351. data/lib/studium/exam_topics/prozesstechnik +95 -0
  352. data/lib/studium/exam_topics/psychologie +9 -0
  353. data/lib/studium/exam_topics/python +350 -0
  354. data/lib/studium/exam_topics/quality_management +241 -0
  355. data/lib/studium/exam_topics/rechtsgrundlagen +115 -0
  356. data/lib/studium/exam_topics/research_topics_in_immunobiology +42 -0
  357. data/lib/studium/exam_topics/rna_and_dna +362 -0
  358. data/lib/studium/exam_topics/rna_seq +11 -0
  359. data/lib/studium/exam_topics/ruby +131 -0
  360. data/lib/studium/exam_topics/ruby_on_rails +62 -0
  361. data/lib/studium/exam_topics/scientific_writing_and_publishing +38 -0
  362. data/lib/studium/exam_topics/semisynthese_von_proteinen_und_nukleotiden +120 -0
  363. data/lib/studium/exam_topics/sexualbiologie +59 -0
  364. data/lib/studium/exam_topics/signal_transduction_and_laser_systems +136 -0
  365. data/lib/studium/exam_topics/splicing_exons_and_introns +57 -0
  366. data/lib/studium/exam_topics/statistik +202 -0
  367. data/lib/studium/exam_topics/stemcells +87 -0
  368. data/lib/studium/exam_topics/structural_bioinformatics +54 -0
  369. data/lib/studium/exam_topics/strukturbiologie +319 -0
  370. data/lib/studium/exam_topics/system_biology_and_synthetic_biology +87 -0
  371. data/lib/studium/exam_topics/systematische_zoologie +430 -0
  372. data/lib/studium/exam_topics/technical_ecology +144 -0
  373. data/lib/studium/exam_topics/technische_chemie +194 -0
  374. data/lib/studium/exam_topics/technische_grundlagen_der_informatik +22 -0
  375. data/lib/studium/exam_topics/technische_mikrobiologie +403 -0
  376. data/lib/studium/exam_topics/technisches_zeichnen +5 -0
  377. data/lib/studium/exam_topics/the_bacterial_cell_wall +86 -0
  378. data/lib/studium/exam_topics/the_c_plus_plus_programming_language +488 -0
  379. data/lib/studium/exam_topics/the_c_programming_language +128 -0
  380. data/lib/studium/exam_topics/the_cellcycle +65 -0
  381. data/lib/studium/exam_topics/the_european_union +119 -0
  382. data/lib/studium/exam_topics/the_interferon_system +32 -0
  383. data/lib/studium/exam_topics/the_microbiome +163 -0
  384. data/lib/studium/exam_topics/the_universe +6 -0
  385. data/lib/studium/exam_topics/theoretische_chemie +5 -0
  386. data/lib/studium/exam_topics/theoretische_informatik +157 -0
  387. data/lib/studium/exam_topics/tierzucht +94 -0
  388. data/lib/studium/exam_topics/toxikologie +403 -0
  389. data/lib/studium/exam_topics/transcription +26 -0
  390. data/lib/studium/exam_topics/translation_ribosomes_and_translational_control +138 -0
  391. data/lib/studium/exam_topics/umweltbiotechnologie +58 -0
  392. data/lib/studium/exam_topics/umweltchemie +233 -0
  393. data/lib/studium/exam_topics/urbanism_and_traffic +19 -0
  394. data/lib/studium/exam_topics/vaccines_and_vaccination +234 -0
  395. data/lib/studium/exam_topics/vectors_and_gene_therapy +237 -0
  396. data/lib/studium/exam_topics/verfahrenstechnik +32 -0
  397. data/lib/studium/exam_topics/veterinary_medicine +10 -0
  398. data/lib/studium/exam_topics/vitamine +19 -0
  399. data/lib/studium/exam_topics/wasserkunde +141 -0
  400. data/lib/studium/exam_topics/weinbau +59 -0
  401. data/lib/studium/exam_topics/wissenschaft +17 -0
  402. data/lib/studium/exam_topics/yeast +97 -0
  403. data/lib/studium/exam_topics/zoologie +329 -0
  404. data/lib/studium/exams/afterburn.rb +264 -0
  405. data/lib/studium/exams/ask_exam_from_the_upcoming_exams_pool.rb +158 -0
  406. data/lib/studium/exams/ask_exam_question/answer.rb +106 -0
  407. data/lib/studium/exams/ask_exam_question/ask_exam_question.rb +135 -0
  408. data/lib/studium/exams/ask_exam_question/constants.rb +74 -0
  409. data/lib/studium/exams/ask_exam_question/delay.rb +101 -0
  410. data/lib/studium/exams/ask_exam_question/help.rb +72 -0
  411. data/lib/studium/exams/ask_exam_question/initialize.rb +70 -0
  412. data/lib/studium/exams/ask_exam_question/menu.rb +382 -0
  413. data/lib/studium/exams/ask_exam_question/misc.rb +938 -0
  414. data/lib/studium/exams/ask_exam_question/question.rb +77 -0
  415. data/lib/studium/exams/ask_exam_question/reset.rb +103 -0
  416. data/lib/studium/exams/ask_exam_question/run.rb +49 -0
  417. data/lib/studium/exams/ask_exam_topic_question.rb +120 -0
  418. data/lib/studium/exams/ask_question_from_alias.rb +151 -0
  419. data/lib/studium/exams/ask_question_from_any_of_the_still_missing_lectures.rb +133 -0
  420. data/lib/studium/exams/ask_question_from_grouped_themes.rb +141 -0
  421. data/lib/studium/exams/ask_question_from_last_topic.rb +93 -0
  422. data/lib/studium/exams/ask_random_question.rb +190 -0
  423. data/lib/studium/exams/autoinclude.rb +7 -0
  424. data/lib/studium/exams/class.rb +127 -0
  425. data/lib/studium/exams/csv/create_csv_passed_exams_file.rb +225 -0
  426. data/lib/studium/exams/cycle.rb +283 -0
  427. data/lib/studium/exams/dataset.rb +90 -0
  428. data/lib/studium/exams/exam_registration_at/constants.rb +49 -0
  429. data/lib/studium/exams/exam_registration_at/exam_registration_at.rb +254 -0
  430. data/lib/studium/exams/exam_registration_at/help.rb +46 -0
  431. data/lib/studium/exams/exam_registration_at/menu.rb +81 -0
  432. data/lib/studium/exams/exam_registration_at/report.rb +108 -0
  433. data/lib/studium/exams/exam_registration_at/reset.rb +49 -0
  434. data/lib/studium/exams/exam_statistics_from_this_file/exam_statistics_from_this_file.rb +127 -0
  435. data/lib/studium/exams/exam_topics.rb +202 -0
  436. data/lib/studium/exams/exams.rb +18 -0
  437. data/lib/studium/exams/exams_per_month/colours.rb +81 -0
  438. data/lib/studium/exams/exams_per_month/constants.rb +69 -0
  439. data/lib/studium/exams/exams_per_month/dataset.rb +64 -0
  440. data/lib/studium/exams/exams_per_month/exams_per_month.rb +291 -0
  441. data/lib/studium/exams/exams_per_month/help.rb +72 -0
  442. data/lib/studium/exams/exams_per_month/initialize.rb +39 -0
  443. data/lib/studium/exams/exams_per_month/menu.rb +258 -0
  444. data/lib/studium/exams/exams_per_month/open.rb +139 -0
  445. data/lib/studium/exams/exams_per_month/requires.rb +8 -0
  446. data/lib/studium/exams/exams_per_month/reset.rb +115 -0
  447. data/lib/studium/exams/exams_per_month/run.rb +18 -0
  448. data/lib/studium/exams/exams_per_month/sanitize.rb +129 -0
  449. data/lib/studium/exams/exams_per_month/show_and_report.rb +1281 -0
  450. data/lib/studium/exams/exams_this_week.rb +179 -0
  451. data/lib/studium/exams/fix_exam_dates.rb +129 -0
  452. data/lib/studium/exams/last_exams/last_exams.rb +381 -0
  453. data/lib/studium/exams/lectures_without_exam_entry.rb +145 -0
  454. data/lib/studium/exams/mandatory_continuous_assessment/compare.rb +144 -0
  455. data/lib/studium/exams/mandatory_continuous_assessment/constants.rb +18 -0
  456. data/lib/studium/exams/mandatory_continuous_assessment/help.rb +92 -0
  457. data/lib/studium/exams/mandatory_continuous_assessment/initialize.rb +46 -0
  458. data/lib/studium/exams/mandatory_continuous_assessment/mandatory_continuous_assessment.rb +1115 -0
  459. data/lib/studium/exams/mandatory_continuous_assessment/menu.rb +114 -0
  460. data/lib/studium/exams/mandatory_continuous_assessment/misc.rb +61 -0
  461. data/lib/studium/exams/mandatory_continuous_assessment/reset.rb +85 -0
  462. data/lib/studium/exams/mandatory_continuous_assessment/run.rb +33 -0
  463. data/lib/studium/exams/mandatory_continuous_assessment/set_title_of_the_curriculum.rb +181 -0
  464. data/lib/studium/exams/mandatory_continuous_assessment/show_and_report.rb +147 -0
  465. data/lib/studium/exams/move_the_last_exam_question_to_the_top_of_the_file/move_the_last_exam_question_to_the_top_of_the_file.rb +119 -0
  466. data/lib/studium/exams/n_exams_in_these_topics.rb +408 -0
  467. data/lib/studium/exams/new_questions_per_year.rb +153 -0
  468. data/lib/studium/exams/next_exam.rb +111 -0
  469. data/lib/studium/exams/next_exams.rb +385 -0
  470. data/lib/studium/exams/open_exam_associated_url.rb +158 -0
  471. data/lib/studium/exams/open_last_exam_question_asked_file/constants.rb +20 -0
  472. data/lib/studium/exams/open_last_exam_question_asked_file/initialize.rb +29 -0
  473. data/lib/studium/exams/open_last_exam_question_asked_file/open_last_exam_question_asked_file.rb +112 -0
  474. data/lib/studium/exams/passed_exams/passed_exams.rb +46 -0
  475. data/lib/studium/exams/pruefung.rb +288 -0
  476. data/lib/studium/exams/push_solved_questions_on_top.rb +188 -0
  477. data/lib/studium/exams/question_answer/question_answer.rb +842 -0
  478. data/lib/studium/exams/questions_solved_from_day_to_day.rb +353 -0
  479. data/lib/studium/exams/repeat_last_question.rb +78 -0
  480. data/lib/studium/exams/show_all_passed_exams_of_this_university.rb +260 -0
  481. data/lib/studium/exams/show_backlog_of_exams.rb +125 -0
  482. data/lib/studium/exams/show_next_exams_for.rb +141 -0
  483. data/lib/studium/exams/show_themes/constants.rb +33 -0
  484. data/lib/studium/exams/show_themes/menu.rb +61 -0
  485. data/lib/studium/exams/show_themes/misc.rb +536 -0
  486. data/lib/studium/exams/show_themes/reset.rb +64 -0
  487. data/lib/studium/exams/show_themes/show_themes.rb +27 -0
  488. data/lib/studium/exams/show_upcoming_exams/consider_autogenerating_exam_aliases.rb +170 -0
  489. data/lib/studium/exams/show_upcoming_exams/constants.rb +82 -0
  490. data/lib/studium/exams/show_upcoming_exams/help.rb +33 -0
  491. data/lib/studium/exams/show_upcoming_exams/initialize.rb +71 -0
  492. data/lib/studium/exams/show_upcoming_exams/menu.rb +53 -0
  493. data/lib/studium/exams/show_upcoming_exams/report.rb +195 -0
  494. data/lib/studium/exams/show_upcoming_exams/reset.rb +38 -0
  495. data/lib/studium/exams/show_upcoming_exams/run.rb +20 -0
  496. data/lib/studium/exams/show_upcoming_exams/show_upcoming_exams.rb +494 -0
  497. data/lib/studium/exams/solve_all_questions_from_this_topic.rb +122 -0
  498. data/lib/studium/exams/solved/constants.rb +37 -0
  499. data/lib/studium/exams/solved/help.rb +23 -0
  500. data/lib/studium/exams/solved/menu.rb +35 -0
  501. data/lib/studium/exams/solved/reset.rb +30 -0
  502. data/lib/studium/exams/solved/solved.rb +306 -0
  503. data/lib/studium/exams/steop.rb +99 -0
  504. data/lib/studium/exams/unsolve_all_questions_from_this_topic.rb +170 -0
  505. data/lib/studium/exams/upcoming_exams/constants.rb +20 -0
  506. data/lib/studium/exams/upcoming_exams/help.rb +38 -0
  507. data/lib/studium/exams/upcoming_exams/initialize.rb +27 -0
  508. data/lib/studium/exams/upcoming_exams/menu.rb +79 -0
  509. data/lib/studium/exams/upcoming_exams/misc.rb +360 -0
  510. data/lib/studium/exams/upcoming_exams/reset.rb +37 -0
  511. data/lib/studium/exams/upcoming_exams/run.rb +25 -0
  512. data/lib/studium/exams/upcoming_exams/upcoming_exams.rb +32 -0
  513. data/lib/studium/exams/upcoming_exams_at_the_boku/constants.rb +23 -0
  514. data/lib/studium/exams/upcoming_exams_at_the_boku/html.rb +64 -0
  515. data/lib/studium/exams/upcoming_exams_at_the_boku/upcoming_exams_at_the_boku.rb +194 -0
  516. data/lib/studium/exams/upcoming_exams_dataset.rb +251 -0
  517. data/lib/studium/exams/upload_exam_topics.rb +357 -0
  518. data/lib/studium/flashcards/flashcards.rb +95 -0
  519. data/lib/studium/graphviz/README.md +4 -0
  520. data/lib/studium/graphviz/bachelor_vector_based_strategies.dot +160 -0
  521. data/lib/studium/graphviz/master_vector_based_strategies.dot +46 -0
  522. data/lib/studium/gui/gtk2/constants.rb +52 -0
  523. data/lib/studium/gui/gtk2/exam_card.rb +199 -0
  524. data/lib/studium/gui/gtk2/flip_card.rb +8 -0
  525. data/lib/studium/gui/gtk2/frame.rb +319 -0
  526. data/lib/studium/gui/gtk2/main_box.rb +188 -0
  527. data/lib/studium/gui/gtk2/misc.rb +99 -0
  528. data/lib/studium/gui/gtk2/module_methods.rb +58 -0
  529. data/lib/studium/gui/gtk2/require_gtk_files.rb +25 -0
  530. data/lib/studium/gui/gtk2/run.rb +47 -0
  531. data/lib/studium/gui/gtk2/show_curriculum_entries.rb +186 -0
  532. data/lib/studium/gui/gtk2/simple_widget_question_answer.rb +185 -0
  533. data/lib/studium/gui/gtk2/vbox.rb +748 -0
  534. data/lib/studium/gui/gtk3/README.md +1 -0
  535. data/lib/studium/gui/gtk3/studium_panel.rb +54 -0
  536. data/lib/studium/lectures/show_lectures_on_the_commandline/constants.rb +22 -0
  537. data/lib/studium/lectures/show_lectures_on_the_commandline/determine.rb +630 -0
  538. data/lib/studium/lectures/show_lectures_on_the_commandline/help.rb +44 -0
  539. data/lib/studium/lectures/show_lectures_on_the_commandline/html.rb +599 -0
  540. data/lib/studium/lectures/show_lectures_on_the_commandline/initialize.rb +53 -0
  541. data/lib/studium/lectures/show_lectures_on_the_commandline/konsole.rb +32 -0
  542. data/lib/studium/lectures/show_lectures_on_the_commandline/menu.rb +466 -0
  543. data/lib/studium/lectures/show_lectures_on_the_commandline/misc.rb +598 -0
  544. data/lib/studium/lectures/show_lectures_on_the_commandline/reset.rb +120 -0
  545. data/lib/studium/lectures/show_lectures_on_the_commandline/run.rb +44 -0
  546. data/lib/studium/lectures/show_lectures_on_the_commandline/show.rb +106 -0
  547. data/lib/studium/lectures/show_lectures_on_the_commandline/show_lectures_on_the_commandline.rb +491 -0
  548. data/lib/studium/lectures/show_lectures_on_the_commandline/sorted_individual_curricula.rb +117 -0
  549. data/lib/studium/logging/README.md +2 -0
  550. data/lib/studium/logging/ensure_that_the_log_directory_exists.rb +47 -0
  551. data/lib/studium/logging/html_log_directory.rb +35 -0
  552. data/lib/studium/logging/log_directory.rb +100 -0
  553. data/lib/studium/logging/store_last_question_asked_into_file.rb +138 -0
  554. data/lib/studium/misc/return_remote_homepage_of_this_lecture.rb +8661 -0
  555. data/lib/studium/misc/return_remote_moodle_link_of_this_lecture.rb +1343 -0
  556. data/lib/studium/parsers/README.md +2 -0
  557. data/lib/studium/parsers/custom_exam_results_parser.rb +208 -0
  558. data/lib/studium/parsers/parse_lva_dates.rb +190 -0
  559. data/lib/studium/pdf/README.md +2 -0
  560. data/lib/studium/pdf/create_pdf_file_for_this_exam_topic.rb +277 -0
  561. data/lib/studium/project/project.rb +80 -0
  562. data/lib/studium/requires/common_popular_requires.rb +37 -0
  563. data/lib/studium/requires/commonly_used_requires.rb +13 -0
  564. data/lib/studium/requires/require_class_exams_solved.rb +7 -0
  565. data/lib/studium/requires/require_ects_scripts.rb +25 -0
  566. data/lib/studium/requires/require_encoding.rb +7 -0
  567. data/lib/studium/requires/require_the_exam_scripts.rb +37 -0
  568. data/lib/studium/requires/require_the_studium_constants.rb +14 -0
  569. data/lib/studium/requires/require_the_studium_project.rb +47 -0
  570. data/lib/studium/requires/require_the_utility_scripts.rb +26 -0
  571. data/lib/studium/requires/require_toplevel_methods.rb +26 -0
  572. data/lib/studium/requires/require_upcoming_exams.rb +7 -0
  573. data/lib/studium/requires/require_yaml.rb +7 -0
  574. data/lib/studium/requires/with_GUI.rb +12 -0
  575. data/lib/studium/requires/www_mode.rb +17 -0
  576. data/lib/studium/sinatra/app.rb +225 -0
  577. data/lib/studium/sinatra/misc.rb +111 -0
  578. data/lib/studium/statistics/README.md +4 -0
  579. data/lib/studium/statistics/best_exam_months.rb +81 -0
  580. data/lib/studium/statistics/curriculum_comparer.rb +344 -0
  581. data/lib/studium/statistics/determine_exam_statistics_from_this_file.rb +140 -0
  582. data/lib/studium/statistics/max_stats.rb +171 -0
  583. data/lib/studium/statistics/report_how_many_ects_points_per_curriculum_were_completed.rb +172 -0
  584. data/lib/studium/statistics/report_how_many_exam_questions_were_answered.rb +478 -0
  585. data/lib/studium/statistics/show_exam_statistics.rb +60 -0
  586. data/lib/studium/statistics/top_stats.rb +122 -0
  587. data/lib/studium/steop/README.md +4 -0
  588. data/lib/studium/steop/show_all_steop_lectures.rb +101 -0
  589. data/lib/studium/steop/steop_lectures_in_this_curriculum.rb +291 -0
  590. data/lib/studium/steop/steop_lva_dates.rb +102 -0
  591. data/lib/studium/toplevel_methods/all_passed_exams.rb +35 -0
  592. data/lib/studium/toplevel_methods/already_solved_this_lecture.rb +98 -0
  593. data/lib/studium/toplevel_methods/available_curricula.rb +71 -0
  594. data/lib/studium/toplevel_methods/available_topics.rb +145 -0
  595. data/lib/studium/toplevel_methods/average_grade.rb +141 -0
  596. data/lib/studium/toplevel_methods/calculate_pr/303/274fungsimmanente_lectures_from_this_file.rb +55 -0
  597. data/lib/studium/toplevel_methods/cd.rb +25 -0
  598. data/lib/studium/toplevel_methods/cd_stud.rb +134 -0
  599. data/lib/studium/toplevel_methods/copy_the_last_backup_of_file_lecture_information.rb +27 -0
  600. data/lib/studium/toplevel_methods/determine_local_directory_of_this_lecture.rb +72 -0
  601. data/lib/studium/toplevel_methods/does_this_course_require_mandatory_presence.rb +44 -0
  602. data/lib/studium/toplevel_methods/download.rb +157 -0
  603. data/lib/studium/toplevel_methods/e.rb +16 -0
  604. data/lib/studium/toplevel_methods/ects_from_lectures.rb +251 -0
  605. data/lib/studium/toplevel_methods/editor.rb +64 -0
  606. data/lib/studium/toplevel_methods/esystem.rb +22 -0
  607. data/lib/studium/toplevel_methods/exams_dataset.rb +45 -0
  608. data/lib/studium/toplevel_methods/filter_away_invalid_questions.rb +77 -0
  609. data/lib/studium/toplevel_methods/find_exam_topic_and_exam_title.rb +2771 -0
  610. data/lib/studium/toplevel_methods/from_curriculum_id_to_university.rb +47 -0
  611. data/lib/studium/toplevel_methods/frozen.rb +32 -0
  612. data/lib/studium/toplevel_methods/handle_archive_of_the_exam_questions.rb +136 -0
  613. data/lib/studium/toplevel_methods/has_a_bachelor_or_master_curriculum.rb +84 -0
  614. data/lib/studium/toplevel_methods/has_this_lecture_been_already_passed_but_the_id_was_changed_lateron.rb +41 -0
  615. data/lib/studium/toplevel_methods/has_this_module_been_completed.rb +206 -0
  616. data/lib/studium/toplevel_methods/install_the_project_on_the_given_hostsystem.rb +32 -0
  617. data/lib/studium/toplevel_methods/is_on_roebe.rb +26 -0
  618. data/lib/studium/toplevel_methods/is_this_exam_topic_included.rb +46 -0
  619. data/lib/studium/toplevel_methods/is_this_homepage_registered.rb +31 -0
  620. data/lib/studium/toplevel_methods/is_this_lecture_a_practical_course.rb +100 -0
  621. data/lib/studium/toplevel_methods/is_this_lecture_part_of_the_vector_curriculum.rb +110 -0
  622. data/lib/studium/toplevel_methods/is_this_lecture_registered_in_upcoming_exams.rb +43 -0
  623. data/lib/studium/toplevel_methods/lecture_information.rb +101 -0
  624. data/lib/studium/toplevel_methods/lectures_without_attribution_to_any_curriculum.rb +42 -0
  625. data/lib/studium/toplevel_methods/lva_numbers.rb +339 -0
  626. data/lib/studium/toplevel_methods/main_dataset.rb +73 -0
  627. data/lib/studium/toplevel_methods/map_curriculum_number_to_curriculum_name.rb +97 -0
  628. data/lib/studium/toplevel_methods/methods_related_to_curricula.rb +47 -0
  629. data/lib/studium/toplevel_methods/methods_related_to_files.rb +197 -0
  630. data/lib/studium/toplevel_methods/mkdir.rb +25 -0
  631. data/lib/studium/toplevel_methods/n_questions_available.rb +128 -0
  632. data/lib/studium/toplevel_methods/n_topics_available.rb +63 -0
  633. data/lib/studium/toplevel_methods/name_of_this_curriculum.rb +38 -0
  634. data/lib/studium/toplevel_methods/names_of_all_solved_exams.rb +71 -0
  635. data/lib/studium/toplevel_methods/note_down_the_start_time_and_how_many_exams_have_been_already_solved.rb +70 -0
  636. data/lib/studium/toplevel_methods/opnn.rb +25 -0
  637. data/lib/studium/toplevel_methods/passed_this_exam_on.rb +105 -0
  638. data/lib/studium/toplevel_methods/pristine.rb +69 -0
  639. data/lib/studium/toplevel_methods/read_dataset_from_a_curriculum_file.rb +133 -0
  640. data/lib/studium/toplevel_methods/read_delay_between_questions_from_file.rb +34 -0
  641. data/lib/studium/toplevel_methods/regexes.rb +90 -0
  642. data/lib/studium/toplevel_methods/registered_for_this_exam.rb +62 -0
  643. data/lib/studium/toplevel_methods/remote_url.rb +57 -0
  644. data/lib/studium/toplevel_methods/remove_comments.rb +26 -0
  645. data/lib/studium/toplevel_methods/remove_exam_topics_that_were_already_answered.rb +27 -0
  646. data/lib/studium/toplevel_methods/remove_tags.rb +26 -0
  647. data/lib/studium/toplevel_methods/report.rb +143 -0
  648. data/lib/studium/toplevel_methods/report_all_lectures_matching_this_lecture_type.rb +45 -0
  649. data/lib/studium/toplevel_methods/report_attributed_lectures_to_universities.rb +30 -0
  650. data/lib/studium/toplevel_methods/report_n_ects_per_university.rb +63 -0
  651. data/lib/studium/toplevel_methods/report_n_entries_in_the_file_lecture_information.rb +36 -0
  652. data/lib/studium/toplevel_methods/report_nquestions_of.rb +96 -0
  653. data/lib/studium/toplevel_methods/report_solved_topics.rb +56 -0
  654. data/lib/studium/toplevel_methods/return_all_exams_on_this_day.rb +66 -0
  655. data/lib/studium/toplevel_methods/return_curriculum_of_this_lva_number.rb +82 -0
  656. data/lib/studium/toplevel_methods/return_dataset_for_this_exam_topic.rb +41 -0
  657. data/lib/studium/toplevel_methods/return_dataset_from_this_curriculum_file.rb +150 -0
  658. data/lib/studium/toplevel_methods/return_directory_for.rb +66 -0
  659. data/lib/studium/toplevel_methods/return_div_timetable_of_upcoming_exams.rb +489 -0
  660. data/lib/studium/toplevel_methods/return_ects_from_this_lecture_stored_in_the_file_lecture_information.rb +197 -0
  661. data/lib/studium/toplevel_methods/return_hash_of_already_solved_lectures.rb +41 -0
  662. data/lib/studium/toplevel_methods/return_local_path_of_this_pwdstud.rb +59 -0
  663. data/lib/studium/toplevel_methods/return_lva_number_of_this_lecture.rb +72 -0
  664. data/lib/studium/toplevel_methods/return_n_percent_solved_from_this_topic.rb +75 -0
  665. data/lib/studium/toplevel_methods/return_n_questions_were_answered_for_this_topic.rb +37 -0
  666. data/lib/studium/toplevel_methods/return_proper_university_image.rb +80 -0
  667. data/lib/studium/toplevel_methods/return_question_answer_string_from_this_topic.rb +56 -0
  668. data/lib/studium/toplevel_methods/return_sanitized_dataset_from_the_file_lecture_information.rb +126 -0
  669. data/lib/studium/toplevel_methods/return_theme_of_the_next_upcoming_exam.rb +38 -0
  670. data/lib/studium/toplevel_methods/return_this_curriculum_as_a_string.rb +26 -0
  671. data/lib/studium/toplevel_methods/return_title_from_this_curriculum_file.rb +91 -0
  672. data/lib/studium/toplevel_methods/rinstall2.rb +34 -0
  673. data/lib/studium/toplevel_methods/rti_conflict.rb +29 -0
  674. data/lib/studium/toplevel_methods/runmode.rb +86 -0
  675. data/lib/studium/toplevel_methods/sanitize_this_theme_topic.rb +128 -0
  676. data/lib/studium/toplevel_methods/sanitized_dataset_from_file_passed_exams_per_month.rb +52 -0
  677. data/lib/studium/toplevel_methods/save_all_registered_upcoming_exams.rb +62 -0
  678. data/lib/studium/toplevel_methods/save_file.rb +81 -0
  679. data/lib/studium/toplevel_methods/save_this_delay_between_questions_and_answers.rb +43 -0
  680. data/lib/studium/toplevel_methods/set_last_file_for_exam_questions.rb +64 -0
  681. data/lib/studium/toplevel_methods/set_this_cd_alias_to.rb +86 -0
  682. data/lib/studium/toplevel_methods/show_passed_ects_in_the_individual_bachelor_and_master_curricula.rb +81 -0
  683. data/lib/studium/toplevel_methods/show_passed_exams_having_this_grade.rb +27 -0
  684. data/lib/studium/toplevel_methods/spacer.rb +18 -0
  685. data/lib/studium/toplevel_methods/time.rb +220 -0
  686. data/lib/studium/toplevel_methods/total_ects_points_passed.rb +72 -0
  687. data/lib/studium/toplevel_methods/try_to_guess_the_most_likely_lva_id.rb +57 -0
  688. data/lib/studium/toplevel_methods/try_to_return_the_expanded_name_of_this_lecture.rb +63 -0
  689. data/lib/studium/toplevel_methods/unfinished.rb +51 -0
  690. data/lib/studium/toplevel_methods/url.rb +74 -0
  691. data/lib/studium/toplevel_methods/verbose_truth.rb +21 -0
  692. data/lib/studium/toplevel_methods/when_was_this_lecture_passed.rb +53 -0
  693. data/lib/studium/toplevel_methods/yes_or_no_ja_oder_nein.rb +33 -0
  694. data/lib/studium/tu_vienna/README.md +6 -0
  695. data/lib/studium/tu_vienna/tu_ferien.rb +38 -0
  696. data/lib/studium/tu_vienna/tu_/303/266ffnungszeiten.rb +29 -0
  697. data/lib/studium/utility_scripts/attribute_lecture_to_curriculum/attribute_boku_lecture_to_curriculum.rb +389 -0
  698. data/lib/studium/utility_scripts/attribute_lecture_to_curriculum/attribute_lecture_to_curriculum.rb +236 -0
  699. data/lib/studium/utility_scripts/attribute_lectures_to_university/attribute_lectures_to_university.rb +385 -0
  700. data/lib/studium/utility_scripts/audio_stats.rb +176 -0
  701. data/lib/studium/utility_scripts/auto_stud/auto_stud.rb +253 -0
  702. data/lib/studium/utility_scripts/auto_stud/constants.rb +23 -0
  703. data/lib/studium/utility_scripts/auto_stud/initialize.rb +23 -0
  704. data/lib/studium/utility_scripts/auto_stud/misc.rb +18 -0
  705. data/lib/studium/utility_scripts/autopurge_this_lecture_date.rb +101 -0
  706. data/lib/studium/utility_scripts/calendar/README.md +2 -0
  707. data/lib/studium/utility_scripts/calendar/calendar.rb +244 -0
  708. data/lib/studium/utility_scripts/calendar/misc.rb +35 -0
  709. data/lib/studium/utility_scripts/check_description_of_these_lectures.rb +224 -0
  710. data/lib/studium/utility_scripts/clean_up_lecture_date.rb +151 -0
  711. data/lib/studium/utility_scripts/current_lectures_belonging_to_both_bachelor_and_master_curriculum.rb +113 -0
  712. data/lib/studium/utility_scripts/currently_participating_in_these_lectures.rb +104 -0
  713. data/lib/studium/utility_scripts/display_lecture_url.rb +117 -0
  714. data/lib/studium/utility_scripts/expand_time_range.rb +422 -0
  715. data/lib/studium/utility_scripts/find_duplicate_lectures.rb +121 -0
  716. data/lib/studium/utility_scripts/finished_exams_at_this_university.rb +94 -0
  717. data/lib/studium/utility_scripts/foreign_language_percentage/constants.rb +28 -0
  718. data/lib/studium/utility_scripts/foreign_language_percentage/foreign_language_percentage.rb +142 -0
  719. data/lib/studium/utility_scripts/foreign_language_percentage/help.rb +29 -0
  720. data/lib/studium/utility_scripts/foreign_language_percentage/initialize.rb +25 -0
  721. data/lib/studium/utility_scripts/foreign_language_percentage/menu.rb +141 -0
  722. data/lib/studium/utility_scripts/foreign_language_percentage/report.rb +62 -0
  723. data/lib/studium/utility_scripts/foreign_language_percentage/reset.rb +57 -0
  724. data/lib/studium/utility_scripts/foreign_language_percentage/run.rb +19 -0
  725. data/lib/studium/utility_scripts/generate_spreadsheet.rb +349 -0
  726. data/lib/studium/utility_scripts/holidays.rb +143 -0
  727. data/lib/studium/utility_scripts/lecture_downloader.rb +115 -0
  728. data/lib/studium/utility_scripts/lectures_attributed_to_universities.rb +344 -0
  729. data/lib/studium/utility_scripts/lva_nummer.rb +440 -0
  730. data/lib/studium/utility_scripts/mandatory_lectures_in_this_month.rb +321 -0
  731. data/lib/studium/utility_scripts/name_of_this_lva_id.rb +110 -0
  732. data/lib/studium/utility_scripts/new_stud.rb +332 -0
  733. data/lib/studium/utility_scripts/next_week.rb +111 -0
  734. data/lib/studium/utility_scripts/passed_ects_per_year.rb +172 -0
  735. data/lib/studium/utility_scripts/passed_pr/303/274fungsimmanente_courses/passed_pr/303/274fungsimmanente_courses.rb +181 -0
  736. data/lib/studium/utility_scripts/prepare_individual_curriculum.rb +182 -0
  737. data/lib/studium/utility_scripts/priority.rb +126 -0
  738. data/lib/studium/utility_scripts/priority_points.rb +263 -0
  739. data/lib/studium/utility_scripts/publish_my_exams.rb +174 -0
  740. data/lib/studium/utility_scripts/regexes/README.md +2 -0
  741. data/lib/studium/utility_scripts/regexes/generate_regex.rb +278 -0
  742. data/lib/studium/utility_scripts/regexes/generate_regexes_for_the_available_moodle_links.rb +54 -0
  743. data/lib/studium/utility_scripts/regexes/generate_regexes_for_the_registered_lectures.rb +48 -0
  744. data/lib/studium/utility_scripts/report_outdated_timetable_entries.rb +148 -0
  745. data/lib/studium/utility_scripts/report_total_amount_of_questions_and_answers_for.rb +120 -0
  746. data/lib/studium/utility_scripts/report_whether_this_lecture_is_registered_in_the_file_lecture_information.rb +125 -0
  747. data/lib/studium/utility_scripts/resolve_practical_courses_date_conflicts/individual_resolve_practical_courses_date_conflicts.rb +257 -0
  748. data/lib/studium/utility_scripts/resolve_practical_courses_date_conflicts/resolve_practical_courses_date_conflicts.rb +273 -0
  749. data/lib/studium/utility_scripts/scrape_remote_university_url.rb +146 -0
  750. data/lib/studium/utility_scripts/semester_schedule_creator/semester_container.rb +142 -0
  751. data/lib/studium/utility_scripts/semester_schedule_creator/semester_schedule_creator.rb +381 -0
  752. data/lib/studium/utility_scripts/semesterplaner.rb +289 -0
  753. data/lib/studium/utility_scripts/show_all_lectures.rb +403 -0
  754. data/lib/studium/utility_scripts/show_all_passed_master_lectures.rb +127 -0
  755. data/lib/studium/utility_scripts/show_conflicting_lva_lectures/constants.rb +56 -0
  756. data/lib/studium/utility_scripts/show_conflicting_lva_lectures/do_report_the_upcoming_exams.rb +60 -0
  757. data/lib/studium/utility_scripts/show_conflicting_lva_lectures/help.rb +49 -0
  758. data/lib/studium/utility_scripts/show_conflicting_lva_lectures/initialize.rb +28 -0
  759. data/lib/studium/utility_scripts/show_conflicting_lva_lectures/menu.rb +54 -0
  760. data/lib/studium/utility_scripts/show_conflicting_lva_lectures/misc.rb +214 -0
  761. data/lib/studium/utility_scripts/show_conflicting_lva_lectures/report.rb +118 -0
  762. data/lib/studium/utility_scripts/show_conflicting_lva_lectures/reset.rb +80 -0
  763. data/lib/studium/utility_scripts/show_conflicting_lva_lectures/run.rb +22 -0
  764. data/lib/studium/utility_scripts/show_conflicting_lva_lectures/show_conflicting_lva_lectures.rb +651 -0
  765. data/lib/studium/utility_scripts/show_descriptions_of_lectures_belonging_to_this_module/constants.rb +28 -0
  766. data/lib/studium/utility_scripts/show_descriptions_of_lectures_belonging_to_this_module/menu.rb +62 -0
  767. data/lib/studium/utility_scripts/show_descriptions_of_lectures_belonging_to_this_module/reset.rb +36 -0
  768. data/lib/studium/utility_scripts/show_descriptions_of_lectures_belonging_to_this_module/run.rb +35 -0
  769. data/lib/studium/utility_scripts/show_descriptions_of_lectures_belonging_to_this_module/show_descriptions_of_lectures_belonging_to_this_module.rb +145 -0
  770. data/lib/studium/utility_scripts/show_lecturers/show_lecturers.rb +145 -0
  771. data/lib/studium/utility_scripts/show_lectures/constants.rb +16 -0
  772. data/lib/studium/utility_scripts/show_lectures/help.rb +34 -0
  773. data/lib/studium/utility_scripts/show_lectures/initialize.rb +23 -0
  774. data/lib/studium/utility_scripts/show_lectures/menu.rb +106 -0
  775. data/lib/studium/utility_scripts/show_lectures/misc.rb +582 -0
  776. data/lib/studium/utility_scripts/show_lectures/reset.rb +92 -0
  777. data/lib/studium/utility_scripts/show_lectures/run.rb +27 -0
  778. data/lib/studium/utility_scripts/show_lectures/show_lectures.rb +48 -0
  779. data/lib/studium/utility_scripts/show_lectures_fitting_to_this_language.rb +129 -0
  780. data/lib/studium/utility_scripts/show_lectures_fitting_to_this_theme.rb +100 -0
  781. data/lib/studium/utility_scripts/show_lectures_on_this_day.rb +154 -0
  782. data/lib/studium/utility_scripts/show_lva_dates_of_this_lecture.rb +177 -0
  783. data/lib/studium/utility_scripts/show_outdated_lva_dates.rb +218 -0
  784. data/lib/studium/utility_scripts/show_solved_english_lectures.rb +139 -0
  785. data/lib/studium/utility_scripts/show_the_associated_lectures_for_the_individual_curriculum.rb +285 -0
  786. data/lib/studium/utility_scripts/studienkennzahl.rb +109 -0
  787. data/lib/studium/utility_scripts/studium_skeleton.rb +220 -0
  788. data/lib/studium/utility_scripts/stundenplan.rb +603 -0
  789. data/lib/studium/utility_scripts/sync_studium_relevant_entries_one_level_downwards.rb +221 -0
  790. data/lib/studium/utility_scripts/ufind.rb +101 -0
  791. data/lib/studium/utility_scripts/upcoming_mandatory_presence_courses/constants.rb +31 -0
  792. data/lib/studium/utility_scripts/upcoming_mandatory_presence_courses/run.rb +20 -0
  793. data/lib/studium/utility_scripts/upcoming_mandatory_presence_courses/upcoming_mandatory_presence_courses.rb +179 -0
  794. data/lib/studium/utility_scripts/vorbesprechungen.rb +293 -0
  795. data/lib/studium/utility_scripts/week_parser/constants.rb +28 -0
  796. data/lib/studium/utility_scripts/week_parser/help.rb +32 -0
  797. data/lib/studium/utility_scripts/week_parser/menu.rb +56 -0
  798. data/lib/studium/utility_scripts/week_parser/misc.rb +51 -0
  799. data/lib/studium/utility_scripts/week_parser/reset.rb +55 -0
  800. data/lib/studium/utility_scripts/week_parser/run.rb +18 -0
  801. data/lib/studium/utility_scripts/week_parser/show.rb +242 -0
  802. data/lib/studium/utility_scripts/week_parser/week_parser.rb +362 -0
  803. data/lib/studium/utility_scripts/weekday_parser.rb +159 -0
  804. data/lib/studium/utility_scripts/weekly_schedule.rb +209 -0
  805. data/lib/studium/utility_scripts/wochenplanung.rb +278 -0
  806. data/lib/studium/version/version.rb +46 -0
  807. data/lib/studium/www/curricula_displayer.cgi +170 -0
  808. data/lib/studium/www/curriculum_displayer.rb +162 -0
  809. data/lib/studium/www/exams.cgi +50 -0
  810. data/lib/studium/www/statistics.cgi +55 -0
  811. data/lib/studium/yaml/allowed_themes_for_exams.yml +307 -0
  812. data/lib/studium/yaml/array_allowed_entries_for_the_file_lecture_information.yml +68 -0
  813. data/lib/studium/yaml/backlog_of_exams.yml +35 -0
  814. data/lib/studium/yaml/current_exams.yml +19 -0
  815. data/lib/studium/yaml/curricula.yml +530 -0
  816. data/lib/studium/yaml/curricula/README.md +3 -0
  817. data/lib/studium/yaml/curricula/bachelor_agrarwissenschaften_033255.yml +130 -0
  818. data/lib/studium/yaml/curricula/bachelor_biologie_basisblock_033630.yml +65 -0
  819. data/lib/studium/yaml/curricula/bachelor_biologie_botanik_033630.yml +84 -0
  820. data/lib/studium/yaml/curricula/bachelor_biologie_ecology_033630.yml +74 -0
  821. data/lib/studium/yaml/curricula/bachelor_biologie_mikrobiologie_und_genetik_033630.yml +120 -0
  822. data/lib/studium/yaml/curricula/bachelor_biologie_molekulare_biologie_033630.yml +104 -0
  823. data/lib/studium/yaml/curricula/bachelor_biologie_zoologie_033630.yml +87 -0
  824. data/lib/studium/yaml/curricula/bachelor_chemie_033662.yml +164 -0
  825. data/lib/studium/yaml/curricula/bachelor_dummy_curriculum.yml +135 -0
  826. data/lib/studium/yaml/curricula/bachelor_elektrotechnik_und_informationstechnik_033235.yml +13 -0
  827. data/lib/studium/yaml/curricula/bachelor_forstwirtschaft_033225.yml +105 -0
  828. data/lib/studium/yaml/curricula/bachelor_informatik_033521.yml +130 -0
  829. data/lib/studium/yaml/curricula/bachelor_informatik_und_molekulare_biologie.yml +1144 -0
  830. data/lib/studium/yaml/curricula/bachelor_ktww_033231.yml +84 -0
  831. data/lib/studium/yaml/curricula/bachelor_lmbt_033217.yml +108 -0
  832. data/lib/studium/yaml/curricula/bachelor_medizinische_informatik_033533.yml +200 -0
  833. data/lib/studium/yaml/curricula/bachelor_molekularbiologie_033665.yml +93 -0
  834. data/lib/studium/yaml/curricula/bachelor_nutrition_science_033638.yml +117 -0
  835. data/lib/studium/yaml/curricula/bachelor_pharmazie_033305.yml +170 -0
  836. data/lib/studium/yaml/curricula/bachelor_technische_chemie_033290.yml +129 -0
  837. data/lib/studium/yaml/curricula/bachelor_technische_informatik_033535.yml +23 -0
  838. data/lib/studium/yaml/curricula/bachelor_ubrm_033227.yml +140 -0
  839. data/lib/studium/yaml/curricula/bachelor_vector_based_strategies_in_life_sciences_molecular_medicine_and_biotechnology.yml +1157 -0
  840. data/lib/studium/yaml/curricula/bachelor_verfahrenstechnik_033273.yml +167 -0
  841. data/lib/studium/yaml/curricula/bachelor_wirtschaftsinformatik_033526.yml +29 -0
  842. data/lib/studium/yaml/curricula/master_bioinformatics_and_molecular_biotechnology_including_aspects_from_molecular_medicine.yml +438 -0
  843. data/lib/studium/yaml/curricula/master_bioinformatik_066875.yml +76 -0
  844. data/lib/studium/yaml/curricula/master_biologie_molekulare_mikrobiologie_mikrobielle_oekologie_und_immunbiologie_066830.yml +78 -0
  845. data/lib/studium/yaml/curricula/master_biologische_chemie_066863.yml +61 -0
  846. data/lib/studium/yaml/curricula/master_dummy_curriculum.yml +137 -0
  847. data/lib/studium/yaml/curricula/master_food_science_and_plant_biotechnology.yml +30 -0
  848. data/lib/studium/yaml/curricula/master_genetik_und_entwicklungsbiologie_066877.yml +90 -0
  849. data/lib/studium/yaml/curricula/master_lmbt_066418.yml +65 -0
  850. data/lib/studium/yaml/curricula/master_molekulare_biologie_066834.yml +142 -0
  851. data/lib/studium/yaml/curricula/master_pharmazie_066605.yml +170 -0
  852. data/lib/studium/yaml/curricula/master_technische_chemie_066490.yml +123 -0
  853. data/lib/studium/yaml/curricula/master_vector_based_strategies_in_life_sciences_molecular_medicine_and_biotechnology.yml +741 -0
  854. data/lib/studium/yaml/custom_colours.yml +21 -0
  855. data/lib/studium/yaml/daily_questions_solved.yml +789 -0
  856. data/lib/studium/yaml/default_delay.yml +4 -0
  857. data/lib/studium/yaml/default_encoding.yml +1 -0
  858. data/lib/studium/yaml/directory_to_the_exam_topics.yml +0 -0
  859. data/lib/studium/yaml/editor.yml +1 -0
  860. data/lib/studium/yaml/file_for_exam_questions.yml +1 -0
  861. data/lib/studium/yaml/german/README.md +2 -0
  862. data/lib/studium/yaml/german/german_to_english_month_names.yml +16 -0
  863. data/lib/studium/yaml/grouped_themes.yml +187 -0
  864. data/lib/studium/yaml/holidays.yml +176 -0
  865. data/lib/studium/yaml/important_exams.yml +194 -0
  866. data/lib/studium/yaml/inscription_dates_of_universities.yml +58 -0
  867. data/lib/studium/yaml/lecture_aliases.yml +108 -0
  868. data/lib/studium/yaml/lecture_information.yml +47783 -0
  869. data/lib/studium/yaml/log_dir.yml +1 -0
  870. data/lib/studium/yaml/main_topic.yml +11 -0
  871. data/lib/studium/yaml/max_stats.yml +227 -0
  872. data/lib/studium/yaml/mitteilungsbl/303/244tter.yml +315 -0
  873. data/lib/studium/yaml/n_total_questions.yml +1 -0
  874. data/lib/studium/yaml/participating_in_these_courses.yml +50 -0
  875. data/lib/studium/yaml/rename_konsole_tab.yml +1 -0
  876. data/lib/studium/yaml/show_topic.yml +1 -0
  877. data/lib/studium/yaml/statistics.yml +57 -0
  878. data/lib/studium/yaml/use_colours.yml +1 -0
  879. data/studium.gemspec +79 -0
  880. data/test/testing_studium.rb +244 -0
  881. data/test/testing_time_component.rb +29 -0
  882. metadata +1079 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 69df115224042327a631442c11f99d4d36ec46c40090f39d32414c0d356742d7
4
+ data.tar.gz: 1d55b0884187d54f98c2b617b386c9d4bfaf5ec526d830903e6006d1449b0b77
5
+ SHA512:
6
+ metadata.gz: 4f07ae700cf768fbdcf3db1dcc8c5d7a6bc37dca10e44e3c628099b364d08fb40f5851685663b51d9eb2807c653595fad211661261c03b6a13d1407c5e943fc2
7
+ data.tar.gz: 7d8fdbf1a53f8ef429a01c50a9f862157f24fcc226a216a5ef8dda354f003ae45d46a25c72b0be4181e596c4325f1ca9ae3d4dd38c61cf21d000387a4a979c4c
@@ -0,0 +1,1982 @@
1
+ [![forthebadge](http://forthebadge.com/images/badges/built-with-love.svg)](https://www.gobolinux.org/)
2
+ [![forthebadge](http://forthebadge.com/images/badges/made-with-ruby.svg)](https://www.ruby-lang.org/en/)
3
+ [![Gem Version](https://badge.fury.io/rb/studium.svg)](https://badge.fury.io/rb/studium)
4
+
5
+ [![logo](http://shevy.bplaced.net/STUDIES.png)](https://rubygems.org/gems/studium)
6
+
7
+ ## Introduction to the studium-gem
8
+
9
+ Welcome to the <span style="color: darkgreen; font-weight: bold">
10
+ Studium</span> project!
11
+
12
+ This is the documentation that refers to the 0.10.x release series
13
+ primarily, being a partial rewrite of the 0.9.x series.
14
+
15
+ A lot of internal code was changed between these two versions, re-shuffled,
16
+ added or deleted compared to the 0.9.x series. The last release of the
17
+ 0.9.x series was version **0.9.383**; this one will be made available
18
+ for several months, but users are recommended to transition to the
19
+ 0.10.x series eventually.
20
+
21
+ ## The purpose and goals of the studium-gem
22
+
23
+ The **Studium project** attempts to help the user with **study-**
24
+ and **exam-related topics** in general.
25
+
26
+ The **primary** purpose of the studium gem is to distribute the code
27
+ (in ruby), the associated dataset (mostly text files, in particular
28
+ yaml files) and also **interconnect** the various ruby files that
29
+ are distributed with this project under the same "umbrella-project".
30
+ The main toplevel "namespace", in ruby, is **"module Studium"**.
31
+
32
+ The original goal for the **Studium project**, that is **why** it
33
+ was started, was to bundle together **knowledge** from different
34
+ topics - be these topics related to **ruby**, **informatics**,
35
+ **biology**, **chemistry**, **biotechnology**, **molecular
36
+ biology** or **physics**, as an **exam trainer** mostly.
37
+
38
+ The objective here in this regard, as a trainer-for-upcoming-exams,
39
+ was to improve the grades of the student at hand, and be able to
40
+ pass more exams within a given time frame, thus making your time
41
+ spent more "efficient" or worthwhile in this regard. (Evidently
42
+ you still have to invest time into learning, so the studium-gem
43
+ can only play a **supportive** role; it can not replace your
44
+ own impetus for wanting to learn more.)
45
+
46
+ Since then this original use case has been **extended** quite a
47
+ lot, including online-related aspects (make the dataset available
48
+ via a web-interface, such as through sinatra), or via GUI
49
+ bindings (primarily via ruby-gtk2, still).
50
+
51
+ There are several different classes which are all part of the
52
+ **Studium** gem, that could potentially be of **help** to the
53
+ user.
54
+
55
+ Not all code may be needed for all use cases, so it is recommended
56
+ to focus only on those parts that may be relevant for the user
57
+ at hand, and simply ignore the other parts that seem of no use.
58
+ People are different, so they may need different parts more so
59
+ than others.
60
+
61
+ As a by-product of ruby being hugely OOP-centric in nature,
62
+ lots of different classes may typically reside in the same
63
+ project; the studium project is not different to that. In
64
+ the event that you are curious about these classes, feel
65
+ free to have a look at the right hand side of this gem's
66
+ homepage, the **Table of Contents**. The direct URL for
67
+ this is here:
68
+
69
+ https://www.rubydoc.info/gems/studium/
70
+
71
+ Furthermore, some classes are described in more detail in that
72
+ file here (**README.md**), or respectively doc/README.gen, which
73
+ is the template from which the **README.md** file is
74
+ autogenerated upon publishing a new version of this gem. However
75
+ had, do not expect a full explanation for all classes here; only
76
+ some classes will be discussed in more detail.
77
+
78
+
79
+ Note that there are **a LOT** of different classes and it is rather
80
+ unlikely that you will need all of them, so don't focus on all
81
+ classes with the assumption that they will all be equally useful.
82
+ Some of these classes have only **a very limited scope** and
83
+ use case, and thus are not too overly useful. Other classes are
84
+ more important, though, and the page here **attempts to focus
85
+ primarily on these more useful classes**, or rather, the
86
+ **functionality** that these classes ultimately provide. It is
87
+ hoped that this functionality may be of benefit to other people
88
+ as well.
89
+
90
+ But not every feature is described there; it would make the
91
+ listing way too long.
92
+
93
+ The **major** focus of the studium gem lies in regards to
94
+ "flashcards", mnemo-cards, anki-cards - aka entries that have
95
+ a registered **question**, and an **associated answer** to
96
+ that question. (anki-cards are a bit different in that they
97
+ focus on a **GUI** and allow such fancy things like embedding
98
+ pictures; the studium project here also has this as a minor
99
+ goal, but this comes **only** via GUI bindings, not the
100
+ commandline variant, obviously. It is of a lower priority,
101
+ though.)
102
+
103
+ These exam-related questions can be asked on the commandline,
104
+ via a **delay** - usually a three seconds delay, but this
105
+ can be toggled and changed by the end user on the commandline.
106
+
107
+ First, the question will appear on the commandline, and then,
108
+ after that specified **delay** has passed, the answer will be
109
+ revealed (and shown) on the commandline. This way the user can
110
+ improve his/her knowledge on a daily basis. In fact: although
111
+ I have not been studying at a university in many years, I
112
+ still use this project almost daily to expand my own local
113
+ knowledgebase.
114
+
115
+ You can query the current **set delay** via:
116
+
117
+ studium --delay?
118
+
119
+ Note that, in order for the question-answer "exam trainer" to work, you
120
+ need to have written down these questions and answers somewhere. By
121
+ default, I have bundled the dataset that I personally use, but this
122
+ will probably be very useless to most other people, so I recommend
123
+ to keep your own entries. (Many of my own entries are in german rather
124
+ than english, so ... feel free to re-use any of these questions as
125
+ you like to, if you find them useful. As of **March 2019**,
126
+ there are over **32.500** question-answers registered in the studium
127
+ project, in various different topics).
128
+
129
+ The **format** for question-answers is very simple:
130
+
131
+ - **One question** and **one answer** per given line. For example:
132
+
133
+ '- How does Rails call a "footer" on every page? "Partials".'
134
+
135
+ The above would constitute a question-answer exam entry.
136
+
137
+ The first part there constitutes the question; and the part after the
138
+ first '?' character is the answer. The '?' token is not mandatory though;
139
+ you can also substitute with 'A:' (which stands short for "Answer") and
140
+ not make use of '?' at all.
141
+
142
+ Note that any words enclosed in double quotes "" will be colourized differently
143
+ when displayed on the commandline. The reason for this is mostly so that it
144
+ provides a stronger visual cue as to what may be more important in the given
145
+ question/answer at hand. I found this helpful for memorizing when having these
146
+ questions asked on the commandline; for some reason my brain reacts more
147
+ strongly to colours. Probably does so for other people too, but again - if
148
+ you dislike anything there, you can (and should) always use your own
149
+ exam-dataset here.
150
+
151
+ ## Namespaces in the project
152
+
153
+ The main namespace for this gem is simply called **Studium**, which is
154
+ german for **studies**. The game could be renamed to **Studies** but
155
+ considering the fact that the original use case was for universities
156
+ in central europe, and many of the lectures stored in the main yaml
157
+ file are for lectures in german, I think it would make sense to retain
158
+ that name; you can always "alias" it like so, anyway:
159
+
160
+ Studies = Studium
161
+
162
+ The exam-relevant part resides under the **Studium::Exams** namespace.
163
+ So when you see that latter namespace, you know that it has to be code
164
+ that is specific to exams.
165
+
166
+ There are also some auxiliary classes, such as a primitive
167
+ "statistical analyzer" of some sort, to rate the performance
168
+ per day (from day to day, in regards to exam-questions that
169
+ were answered).
170
+
171
+ ## Showing helpful information on the commandline
172
+
173
+ A **general overview on the commandline**, as to what the main
174
+ functionality is, can be obtained through this entry point,
175
+ aka **--help**:
176
+
177
+ studium --help
178
+
179
+ This will query **bin/studium**.
180
+
181
+ ## Constants and toplevel-variables used in the Studium project
182
+
183
+ The Studium project makes use of lots of constants, in the ruby
184
+ code. This subsection mentions a few noteworthy ones - in particular
185
+ those that may be useful to know in some later situations when you
186
+ wish to "globally" change an aspect of the project.
187
+
188
+ The constant called MAKE_USE_OF_UNICODE_SYMBOLS_WHENEVER_POSSIBLE
189
+ refers to unicode symbols. Elements such as the right-facing arrow,
190
+ aka →. This can be useful as a visual cue.
191
+
192
+ If you wish to make use of more unicode symbols than retaining this
193
+ constant to true is good. This is the default value too (true).
194
+
195
+ A toplevel query method exists as well - see:
196
+
197
+ Studium.shall_we_make_use_of_unicode_symbols?
198
+
199
+ The old constant called ARRAY_EXCLUDE_THESE was removed for the 0.10.x
200
+ series. The old content was [ '[]','[skip]','[done]','X' ] but I
201
+ decided that a trailing [] is ideal. The trailing [] marks the
202
+ exam question at hand as "answered and thus solved". Back then I
203
+ experimented with different, simple ways to mark an exam question
204
+ as solved, but I came to the conclusion that a trailing " []"
205
+ is probably the best way to indicate that. A trailing "X" alone
206
+ can lead to confusion, when the answer itself has some upcased
207
+ characters near the end and such. A unicode symbol could be used,
208
+ but not every keyboard makes it easy to use that, so trailing
209
+ [] seems better. The other variants, such as [skip] or [done]
210
+ seem too long.
211
+
212
+ To query **where** the last exam question will be stored, use
213
+ this method:
214
+
215
+ Studium.file_last_question_asked? # => "/root/Studium/last_question_asked.md"
216
+
217
+ This could be used if you forgot which question was the last one
218
+ that was asked; or to automatically solve this question, via
219
+ other scripts in the **studium gem**.
220
+
221
+ There is a very important file, called **lecture_information.yml**.
222
+
223
+ Since that file is so important for the Studium project, a toplevel
224
+ instance variable keeps track of the path to this file (the **location**
225
+ to that file):
226
+
227
+ @file_lecture_information = nil # nil here means "not yet initialized to any value"
228
+
229
+ On my home system and home setup, I also keep all exam-files stored in a
230
+ specific location, which is revealed via:
231
+
232
+ Studium.file_exams? # => "/home/x/studium/YAML/exams.yml"
233
+
234
+ The path to this can be modified via:
235
+
236
+ Studium.set_file_exams()
237
+ Studium.set_file_exams(insert_path_here)
238
+
239
+ The Studium gem defaults to the UTF-8 encoding. As we require a bit
240
+ of flexibility here (some users may want to use another encoding),
241
+ the toplevel variable called **@use_this_encoding** stores which
242
+ encoding is to be used for all code and data within the studium
243
+ gem.
244
+
245
+ To query the current encoding in use, try this method:
246
+
247
+ Studium.encoding?
248
+
249
+ ## Exam dataset
250
+
251
+ The **individual exam topics**, such as for **genetics** or **physics**
252
+ are stored in the subdirectory called <b>exam_topics/</b>.
253
+
254
+ I distribute the dataset for the topics that I have an interest in
255
+ with this gem, which explains why the gem is quite large. This dataset
256
+ will probably not be very useful for other people - after all you
257
+ may not necessarily share my own interest in different topics - but
258
+ if you want to use this project (such as for a base-system, and then
259
+ modify and adapt it to your needs) then you are very much encouraged
260
+ to build up your own dataset, anyway.
261
+
262
+ The primary reason as to why I have distributed my own dataset with
263
+ this gem is to simply show how it can be done; it is just more
264
+ convenient that way in the event that other people want to use the
265
+ project and adapt it to their own needs. It makes it easier for
266
+ people to figure out how to work with the project, by adding new
267
+ questions.
268
+
269
+ The format for these exams must be a **simple** one, that is - **one
270
+ question and one answer per registered line**. I currently encourage
271
+ you to use not more than 1000 question-answer entries per such a file,
272
+ as it becomes unwieldy otherwise, but if you want to, you can ignore
273
+ this limitation. I personally found it useful to have.
274
+
275
+ Whenever I have more than 1000 questions, I tend to **create a new
276
+ file** with "advanced" questions, or simply split things up.
277
+
278
+ For example, I used to have a single file for biochemistry. Since then
279
+ I split it up into several sub-topics, such as **metabolism**,
280
+ **advanced biochemistry** and **aminoacids**, so the total question-answers
281
+ for biochemistry is close to about 4000 as of now. (It may be even more
282
+ if you also include molecular techniques and genetics into the field of
283
+ **biochemistry**, which some university lectures may do. But I found it
284
+ easier to use separate topics here, such as **genetics**, **genomics**
285
+ and **gene technology** instead.)
286
+
287
+ If you want to query which exam-topic is the current default (the <b>current
288
+ studyset</b>), then you can use the following invocation on the commandline:
289
+
290
+ studium --current-studyset?
291
+
292
+ **How to best prepare for exams?**
293
+
294
+ This probably depends on the type of person you are, how your brain works,
295
+ how you memorize content. I can not give a general recommendation as to
296
+ how that should be for everyone - you need to determine this on your
297
+ own, for your particular case at hand.
298
+
299
+ But - what I believe may work very well for many different people, are
300
+ so called "flash-cards", that is: you have the question on one side,
301
+ and then the answer or answers on the other side of that card
302
+ (flip card). For looking at the answer you simply flip around the
303
+ card.
304
+
305
+ In my opinion, such mnemo cards or flash cards, are **quite effective**
306
+ and may also work for you. This was the primary goal for the studium
307
+ project too; it was built around that central concept for the most
308
+ part, at the least in regards to **exam questions**.
309
+
310
+ Note that the python-software **anki** (anki cards) uses a somewhat
311
+ related concept, although it is more sophisticated, e. g. you can
312
+ embed images into the dataset, and so forth.
313
+
314
+ ## Flashcards
315
+
316
+ Since as of **March 2018**, the studium project also supports
317
+ flashcards formally.
318
+
319
+ Flashcards are **mnemonic-cards**, where a question may be on the
320
+ front of a paper, and the answer to that question is on the backside.
321
+
322
+ Obviously computers can simulate this more easily without wasting
323
+ paper - but some people may prefer oldschool paper for memorizing
324
+ content.
325
+
326
+ At any rate, if you wish to add a new question-answer, then you
327
+ can use this commandline invocation:
328
+
329
+ flashcards add
330
+
331
+ You can also add a new question via the bin/studium file:
332
+
333
+ studium --add-a-new-question
334
+
335
+ Internally this will call class <b>AddExamQuestion</b>. As of
336
+ October 2020 I am not sure whether the namespace Flashcards
337
+ will be retained, though. We may have to look how useful these
338
+ flashcards are; at a later time it may be decided what to do
339
+ with that, but it could be removed as well.
340
+
341
+ ## The main dataset (Studium.main_dataset?)
342
+
343
+ The file called **lecture_information.yml** is the most important
344
+ yaml-file in this project. It stores all lectures that are tracked
345
+ by the studium-gem.
346
+
347
+ Loading a big yaml file can take some time. Having to do so again
348
+ and again may really slow down a project; it also makes little
349
+ sense to want to do so, because you already had to load it up
350
+ before, so why do it again?
351
+
352
+ Due to this situation, it seemed to make sense to allow a way to
353
+ store the dataset in an instance variable on the toplevel
354
+ namespace.
355
+
356
+ require 'studium/toplevel_methods/main_dataset.rb'
357
+ dataset = ::Studium.main_dataset? # ← Store it in a variable if you would like to.
358
+
359
+ ## lecture_information.yml
360
+
361
+ The file <b>lecture_information.yml</b> is extremely important and rather
362
+ central to the studium gem, so this subsection will detail the rationale
363
+ for this file and what information can be found in that file..
364
+
365
+ The file **lecture_information.yml** is distributed as part of the **studium
366
+ gem**, in the <b>yaml/</b> **subdirectory** specifically. You can have a
367
+ look at it if you don't quite know the structure; perhaps use the editor
368
+ nano or vim or emacs for a quick look.
369
+
370
+ In order to obtain the **full path to this file**, via the commandline,
371
+ the following command can be used (**commandline instruction**):
372
+
373
+ studium --path-to-file-lecture-information
374
+
375
+ Essentially, lectures of universities can be **registered** in that file.
376
+
377
+ The basic **format** of that file is quite simple:
378
+
379
+ - The first line of every lecture-related entry, within enclosed "" quotes,
380
+ constitutes the **name** of the lecture. <b>Make sure that the name is
381
+ exactly, 1:1, the official name of the lecture at hand.</b> Make sure
382
+ that the name really is the name of the lecture, too - awkward errors
383
+ may otherwise be the consequence. From experience I can tell that the
384
+ more accurate the dataset is in that yaml file, the better.
385
+
386
+ Then, **additionally**, you must **prepend* the LV ID as the first entry
387
+ in that particular line.
388
+
389
+ Complete example for this follows:
390
+
391
+ <b>"301617 Strukturbiologie I":</b>
392
+
393
+ So - first comes the particular **LV ID** entry and then comes the
394
+ **name of the lecture**.
395
+
396
+ This is the **main entry** for that lecture in the **.yml** file.
397
+
398
+ Then, you can denote the content of the lecture at hand, via a
399
+ Hash. You can use !ruby/symbol to use a symbol; it is a yaml file
400
+ after all, with all pros and cons that come with it.
401
+
402
+ The **three main entries** are presently:
403
+
404
+ !ruby/symbol ects: 3.0
405
+ !ruby/symbol university: BOKU
406
+ !ruby/symbol language: german
407
+
408
+ More information can be added to describe the particular lecture
409
+ at hand. See the file
410
+ **studium/doc/documentation_for_the_file_lecture_information.md**
411
+ for more information pertaining to this.
412
+
413
+ Why is this information about the available lectures so important?
414
+
415
+ The information stored in the file **lecture_information.yml** is
416
+ important because it allows us to automatically calculate the ECTS
417
+ points in a given curriculum, and also keep track whether a
418
+ particular exam has already been passed successfully. (The latter
419
+ part has to be adjusted to your own exam-dataset of course;
420
+ it makes no sense for others to re-use my own dataset, as
421
+ that is specific to my use case. Obviously different people
422
+ will have totally other use cases.)
423
+
424
+ Some **helper classes** exist to sanitize or check the validity
425
+ of the information contained in that file. For example,
426
+ <b>class Studium::AutopurgeThisLectureDate</b> can be used to
427
+ purge outdated lva-entries from the file, allowing you to
428
+ more easily stay up-to-date with ongoing lectures.
429
+
430
+ (Obviously, for all of this to work, you need to have a
431
+ file that keeps track of these different lectures in the
432
+ first place.)
433
+
434
+ You can also check the validity of the file lecture_information.yml,
435
+ from the commandline, through
436
+ <b>class Studium::CheckTheLectureInformationFile</b>.
437
+
438
+ This can be invoked from the commandline as well:
439
+
440
+ studium --check-file-information
441
+
442
+ Note that you can also directly load the dataset from this file
443
+ via the following method:
444
+
445
+ Studium.lecture_information
446
+
447
+ ## class Studium::FinishedExamsAtThisUniversity
448
+
449
+ class Studium::FinishedExamsAtThisUniversity can be used to show
450
+ which exams at a university have been passed successfully.
451
+
452
+ require 'studium/utility_scripts/finished_exams_at_this_university.rb'
453
+ Studium::FinishedExamsAtThisUniversity.new(ARGV)
454
+ Studium::FinishedExamsAtThisUniversity.new('uniwien')
455
+ Studium::FinishedExamsAtThisUniversity.new('tu')
456
+
457
+ Note that there are a few other classes that have a similar
458
+ functionality. It just seemed useful to also have an additional
459
+ class that is dedicated to that particular task.
460
+
461
+ ## class Studium::Exams::ShowUpcomingExams
462
+
463
+ The **class ShowUpcomingExams** will display the next n upcoming
464
+ exams, where n should be a number from 3-20. There are also files
465
+ such as d10 or d20 in the bin/ subdirectory, which defaults to
466
+ e. g. 10 or 20 upcoming exams.
467
+
468
+ Note that in order for this to work, this may require to define
469
+ local directories, and the exams in a file called **exams.yml**.
470
+
471
+ This may change in the future, since the **exams.yml** file is
472
+ not distributed with this gem (it is specific for my exams, so
473
+ really most useless to other people) - but for now, this is how
474
+ things are.
475
+
476
+ If you want to designate another file or location, have a look
477
+ at the file **file_constants.rb**. You can also invoke this
478
+ method to set another file position:
479
+
480
+ Studium.set_file_exams()
481
+
482
+ Simply pass the **location** of your exams-file, which must be
483
+ a yaml file, into that method.
484
+
485
+ ## Regex-search for exams
486
+
487
+ You can search for passed exams via a "pseudo-regex", aka //
488
+ in a string:
489
+
490
+ studium /Partial name of exam goes in here/
491
+ studium /Elektronen/
492
+ studium /Bioinf/
493
+
494
+ Let's look at the last example, on the commandline. This will
495
+ send the first argument <b>"/Bioinf/"</b> to the ruby code that
496
+ handles the commandline. ARGV is an Array that will hold the
497
+ arguments given to a ruby .rb file as Strings, so we have a
498
+ pseudo-regex there - a String object that starts and ends with
499
+ the character '/'. We assume this String to be a regex, which
500
+ conveniently allows us to query for the name of passed exams.
501
+
502
+ This may be helpful if you want to find all exams that you have
503
+ passed successfully (and registered somewhere) but do not quite
504
+ remember the full name of the exam. Or, as in the last example,
505
+ to show all exams passed with a title that includes "Bioinf"
506
+ (meaning **Bioinformatics** or **Bioinformatik**).
507
+
508
+ Of course this should be tailored to your exams, not mine or
509
+ anyone else's exams. :)
510
+
511
+ You can also see the passed exams that belong to a given theme.
512
+
513
+ So for example, to show all exams that fit to the theme
514
+ "chemistry", you can use this call to output these exams:
515
+
516
+ studium --passed-exams=chemistry
517
+
518
+ ## Flashcards / Mnemo-cards
519
+
520
+ The core of this project is to simulate the behaviour of mnemo-cards,
521
+ memo-cards or flashcards (we will assume these names to be
522
+ synonymous).
523
+
524
+ The project can ask a random exam question.
525
+
526
+ Then, if the correct answer has been given, this question can be marked
527
+ as "solved" - the code for the latter solved action resides in the
528
+ file called **solved.rb**.
529
+
530
+ Any question that has been marked as "solved" will no longer be
531
+ within the total pool of questions that the computer will ask you.
532
+
533
+ In other words, we can toggle on/off on a per question basis, via
534
+ a trailing [] to a line in that file.
535
+
536
+ This allows you to systematically work through an exam dataset for
537
+ a given topic at hand.
538
+
539
+ Currently there is a cap - 1000 questions to the same topic, not
540
+ more than that. This was mostly because I found it better to split
541
+ up the topics, e. g. "basic chemistry", and then "advanced
542
+ chemistry", and so on and so forth.
543
+
544
+
545
+ ## Statistical information within the Studium project
546
+
547
+ The Studium project also allows for a few statistical informations,
548
+ e. g. such as how many exams were passed in this or that period
549
+ of time. You can also show the curricula used for any given
550
+ individual curriculum at hand.
551
+
552
+ This can be invoked such as in this way:
553
+
554
+ studium --statistics
555
+
556
+ This will tap into <b>class Studium::DetermineCurricula</b>.
557
+
558
+ ## class Studium::AutoStud
559
+
560
+ The class AutoStud can automatically modify the cd_aliases yaml
561
+ file. cd_aliases are part of another project and bundle together
562
+ my cd-aliases, that is - aliases that help me navigate through
563
+ my local filesystem quickly. I make heavy use of aliases in
564
+ general.
565
+
566
+ If there is a file called exams.yml, then we can put numbers,
567
+ so called "tag-identifiers", into these. So for example, we
568
+ may have the entry '# === (13)' there. This means that
569
+ pwdstud13 is an alias to this directory, which will correspond
570
+ to an exam entry. These entries should be sorted in a way so
571
+ that entry 1 means the next upcoming exam, entry 2 the one
572
+ after that, and so forth and so on.
573
+
574
+ In the past, before 20.01.2018, I manually did most of the
575
+ work there - first, by modifying exams.yml, and then by
576
+ navigating towards the target directory, and then invoking
577
+ "newstud NUMBER" here, such as newstud 13. This was tedious
578
+ and somewhat error-prone, but mostly unnecessary. I then
579
+ created class AutoStud, which allowed me to navigate to
580
+ the directory at hand, and just take the name of the working
581
+ directory to determine the number. But even that was too
582
+ cumbersome, so I added a range specifier, such as:
583
+
584
+ autostud 1-15
585
+
586
+ This will, similar to a Range in ruby, work through from 1
587
+ to 15, and invoke class NewStud. This class is the one
588
+ that will modify the cd-aliases file.
589
+
590
+ Even the range specifier was unnecessary since I added:
591
+
592
+ autostud --max
593
+
594
+ This will automatically guess what is the max entry and use
595
+ that.
596
+
597
+ If the above subsection is a bit confusing, don't worry, it
598
+ really is simple once you understand it. It essentially
599
+ serves two purposes:
600
+
601
+ (a) to be able to show which exames are upcoming, via
602
+ say, <b>d25</b> (see bin/d25 for that)
603
+ (b) to just quickly navigate to these directories
604
+ for upcoming exams
605
+
606
+ I can then e. g. do "to4" to navigate to exam number 4
607
+ and look at the directory as to what material has been
608
+ collected for this exam.
609
+
610
+ Obviously this works for the exam dataset on my system -
611
+ you may have to maintain your own exams.yml file. I am
612
+ willing to make improvements to this part, both in
613
+ regards to code, but also in regards to the <b>documentation</b>.
614
+
615
+ ## Determine which curricula are used for which lecture
616
+
617
+ One of the most important files for this project, file
618
+ <b>lecture_information.yml</b>, also contains the assigned
619
+ curricula for a given lecture at hand.
620
+
621
+ The class <b>Studium::DetermineCurricula</b> can then be used
622
+ to automatically output, on the commandline, in which curricula
623
+ a certain lecture is listed. This allows us to batch-calculate
624
+ the curricula used in an individual curriculum - e. g. if you
625
+ design such a curriculum, the class may help you to
626
+ automatically output from which other curricula certain lectures
627
+ were used/re-used. This constitutes the <b>"statistics"</b>
628
+ part of that class.
629
+
630
+ ## class Studium::ForeignLanguagePercentage
631
+
632
+ class <b>Studium::ForeignLanguagePercentage</b> can be used
633
+ to show which lectures are in a given language, such as
634
+ the english language.
635
+
636
+ This requires that the entry called "!ruby/symbol language: english"
637
+ in the file <b>lecture_information.yml</b> has been set.
638
+
639
+ ## class Studium::ShowLecturesOnTheCommandline
640
+
641
+ This class will show lectures that are part of the given
642
+ curriculum on the commandline. Additionally, a .html file
643
+ can be autogenerated (and will be opened in the browser,
644
+ if a certain constant has been set to true).
645
+
646
+ If a lecture has already been passed, then the remote URL
647
+ will not be shown. This behaviour can be overruled from
648
+ the commandline like so:
649
+
650
+ show_lectures_on_the_commandline --show-all-URLs --tuwienbiotech
651
+
652
+ This will show all remote URLs, even for lectures that were
653
+ already solved.
654
+
655
+ Do note that you can also design any arbitrary "curriculum"
656
+ on your own, and then load this dataset up.
657
+
658
+ Say that you have stored this into the file called **foo.md**.
659
+
660
+ To load this up, you can do:
661
+
662
+ studium --use-this-curriculum=foo.md
663
+
664
+ Remember to use only registered lectures (in the file
665
+ **lecture_information.yml**), and only one lecture per
666
+ line in that .md file (or any other text file).
667
+
668
+ ## class Studium::ShowLectures
669
+
670
+ <b>class Studium::ShowLectures</b> will show lectures according
671
+ to a particular <b>theme</b>. For example, say that you want to
672
+ see all lectures that have something to do with
673
+ <b>"analytical chemistry"</b>.
674
+
675
+ You could then invoke this class and pass in a commandline option
676
+ such as the following one:
677
+
678
+ --analytical_chemistry
679
+
680
+ I have aliased the <b>show_lectures.rb file</b>, to the alias called
681
+ <b>show_lectures</b>, and then I can do this from the commandline:
682
+
683
+ show_lectures --analytical_chemistry
684
+
685
+ (Actually, I even have this aliased, to "tanalytical" - the
686
+ t stands for "theme". I use this for all the themes, e. g.
687
+ "tgenetics" for all themes belonging to the theme genetics,
688
+ "tinformatics" for all themes belonging to the theme
689
+ informatics, and so forth.)
690
+
691
+ This class will also show a split between bachelor and master
692
+ lectures. Bachelor lectures are shown first, then we will
693
+ show the lectures belonging to a master curriculum.
694
+
695
+ This class thus allows us to quickly find out which lectures
696
+ belong to a certain theme. It can then help when you wish
697
+ to create an individual curriculum based on one or several
698
+ <b>certain themes</b> - or when you simply want to see
699
+ which lectures are available belonging to a particular theme.
700
+ (I used it to see which exams I may do next, to fulfil a
701
+ certain theme criteria.)
702
+
703
+ Note that this class acts on information, which must have been
704
+ added prior to the file <b>lecture_information</b>, which is
705
+ also distributed with this project. Always keep that file
706
+ up to date - a lot of code in this project depends on that
707
+ file.
708
+
709
+ Since as of 10.03.2018, you can also pass in the options
710
+ --timetable or --upcoming. This will then autogenerate a
711
+ .html file listening the coming exams. That functionality
712
+ depends on class <b>ShowLecturesOnTheCommandline</b>.
713
+
714
+ ## class Studium::Exams::Cycle
715
+
716
+ The class <b>Studium::Exams::Cycle</b> can be used to
717
+ cycle through the yaml file that holds which exams may
718
+ be upcoming.
719
+
720
+ Since as of March 2018, the yaml file is distributed with
721
+ the studium gem and can be found in the respective yaml
722
+ directory, such as at:
723
+
724
+ studium/yaml/current_exams.yml
725
+
726
+ Obviously if you wish to make use of it, you will have to
727
+ modify that file to fit your own preferences rather than
728
+ mine. This also depends on the exam topics that you want
729
+ to be exercising next.
730
+
731
+ The way how the class operates is really simple:
732
+
733
+ - After having asked one question from the current main
734
+ topic, the class will move towards the next topic at
735
+ hand, and so forth. When it reaches the "end", it will
736
+ resume at the beginning, so in other words this is a
737
+ cyclic array and the class operates via a "cyclic modus
738
+ operandi" - which thus explains he name of this class:
739
+ <b>Cycle</b>.
740
+
741
+ If you want to find out where the main .yml file resides,
742
+ you can do so via:
743
+
744
+ Studium::Exams::Cycle.main_file?
745
+
746
+ If you want to display which entries are part of the
747
+ current exam-cluster, you can do so from the commandline
748
+ via:
749
+
750
+ studium --collage?
751
+
752
+ ## class Studium::ShowOutdatedLvaDates
753
+
754
+ <b>class Studium::ShowOutdatedLvaDates</b> can be used
755
+ to show which lectures (lva aka "lehrveranstaltung")
756
+ have outdated lva_dates entries.
757
+
758
+ That way the outdated entries can be updated (or removed).
759
+
760
+ This then allows other classes in the project to more
761
+ reliably show only lectures that are up-to-date.
762
+
763
+ You can also query this from the commandline via the bin/studium
764
+ script, by issuing:
765
+
766
+ studium --outdated
767
+
768
+ ## class Studium::ShowLecturesOnThisDay
769
+
770
+ This class will show all lectures that occur on a given day. The
771
+ format for that day must be in dd.mm.yyyy format such as
772
+ <b>18.06.2018</b>. (In the future this requirement may change
773
+ and allow for other formats, such as yyyy.mm.dd; but for now,
774
+ this is the only supported time format.)
775
+
776
+ The class will then proceed to check the file <b>lecture_information.yml</b>
777
+ for matching entries. If found, they will be retained and lateron
778
+ displayed, via the <b>.report</b> method.
779
+
780
+ You can either invoke the clas directly - it resides at
781
+ <b>studium/utility_scripts/show_lectures_on_this_day.rb</b> -
782
+ or you can invoke this functionality from the commandline.
783
+
784
+ The syntax for the commandline invocation can be in two formats.
785
+
786
+ studium --lectures-on-this-day=05.05.2018
787
+ studium 07.05.2018
788
+
789
+ The latter is significantly shorter and is recommended. It is the
790
+ current default action for input in the form dd.mm.yyyy. Do note
791
+ that this may, however had, also change in the future - but for
792
+ now (March 2018), this is the documented default behaviour for
793
+ input like the above. Use the more explicit one with the --
794
+ flags, since that one will be supported forever.
795
+
796
+ ## class Studium::NExamsInTheseTopics
797
+
798
+ class <b>Studium::NExamsInTheseTopics</b> can report how many exam
799
+ topics are registered in the given input-topics at hand, and how many
800
+ of these were solved.
801
+
802
+ Several topics are combined together.
803
+
804
+ For example, for basic **biochemistry**, you can pass the argument
805
+ <b>meta_biochemistry</b> to this class, as a **String**.
806
+
807
+ class **Studium::NExamsInTheseTopics** will then output how many
808
+ questions were registered in that topic in total, and how many of
809
+ these questions were already solved.
810
+
811
+ For the "meta-topic" meta_biochemistry, we group together many
812
+ biochemistry-related topics - basic biochemistry, advanced
813
+ biochemistry, structural biology, proteomics, metabolism,
814
+ enzymes, glycolysis and so forth.
815
+
816
+ I created this class so that I can have a look at combined
817
+ topics. Otherwise it is quite similar to the statistics shown
818
+ when a single question is asked on the commandline, through
819
+ <b>class AskExamQuestion</b> (full name is:
820
+ <b>Studium::Exams::AskExamQuestion</b>).
821
+
822
+ Since as of August 2018, you can also use this as exam-trainer,
823
+ by providing the number of the sub-topic at hand.
824
+
825
+ So for example, if the main topic is meta-genetics, and
826
+ you pass in the argument 3, then the entry at the 3rd
827
+ place will be used as means to ask a question.
828
+
829
+ Examples:
830
+
831
+ metagen 2
832
+ metagen 5
833
+
834
+ Where "metagen" is my alias to:
835
+
836
+ n_exams_in_this_topic meta_genetics
837
+
838
+ By default, lines that end via "[]" are ignored, but you can also
839
+ ask a question from ALL available questions, even if they end
840
+ with a "[]" token.
841
+
842
+ Commandline example:
843
+
844
+ ask_exam_questions amg1 --all-questions
845
+
846
+ This would ask a random question from the **amg1-dataset**.
847
+
848
+ ## class Studium::Exams::UpcomingExamsDataset
849
+
850
+ The **class Studium::Exams::UpcomingExamsDataset** is a **helper**-class.
851
+
852
+ It wraps over the file <b>exams.yml</b> and allows a simple query to
853
+ the upcoming exams, based on that file (which, as exam, must be
854
+ registered in the file <b>exams.yml</b>).
855
+
856
+ This information can then be used to query which exams are upcoming
857
+ on which day, at which time. This information can also be re-used
858
+ in different classes, which was one important reason as to why
859
+ this class has been created in the first place.
860
+
861
+ ## class Studium::Exams::MandatoryContinuousAssessment
862
+
863
+ class <b>Studium::Exams::MandatoryContinuousAssessment</b> can
864
+ be used to handle lectures that require mandatory attendance
865
+ (in german "prüfungsimmanente Lehrveranstaltungen").
866
+
867
+ The section here does not include all options that this class
868
+ is able to handle; instead, only a select subset will be shown
869
+ and explained here.
870
+
871
+ If you want to show which mandatory courses may be upcoming,
872
+ sorted on the assigned priority, then you can do this:
873
+
874
+ mandatory --upcoming
875
+
876
+ The command <b>mandatory</b> is an alias I use to
877
+ the .rb file that holds
878
+ <b>class Studium::Exams::MandatoryContinuousAssessment</b>.
879
+
880
+ You can also compare (some of) the registered curricula,
881
+ by issuing:
882
+
883
+ mandatory --compare
884
+
885
+ This will output the amount of ECTS points stored in
886
+ courses that require a mandatory attendance.
887
+
888
+ If you want to also see the individual lectures and courses
889
+ that were used to determine all courses requiring mandatory
890
+ presence, you can use the following commandline switch:
891
+
892
+ mandatory --compare-detail
893
+ mandatory --compare-stats
894
+ mandatory --details
895
+
896
+ On a side-note: if you wish to see some mandatory lectures,
897
+ such as those that belong to the lecture type VO+SE, you
898
+ can pass this as input to **bin/studium**, like so:
899
+
900
+ studium VO+SE
901
+
902
+ ## Studium.pristine
903
+
904
+ The toplevel-method made available through <b>Studium.pristine</b>
905
+ can be used to create a new <b>lecture_information</b> file,
906
+ from scratch.
907
+
908
+ The one that is, by default, bundled with the studium-gem is/was
909
+ tailored to my own needs and use case. So if you want to use the
910
+ file, it may be better to generate it once, and then modify that
911
+ newly generated file on your own. (Don't forget to keep a backup
912
+ of it available as well, in case it is deleted or overwritten
913
+ accidentally.)
914
+
915
+ Note that you can invoke **Studium.pristine()** via the
916
+ commandline as well, via:
917
+
918
+ studium --pristine
919
+ studium --new-lecture-information
920
+
921
+ You can then copy this file into the default location, where
922
+ the file <b>lecture_information.yml</b> is normally stored,
923
+ via:
924
+
925
+ studium --merge
926
+
927
+ ## Commandline examples of the studium gem
928
+
929
+ This subsection shows some commandline examples, in a succinct
930
+ manner.
931
+
932
+ Display **bachelor curricula**, via the syntax --bachelor=NAME_HERE
933
+
934
+ studium --bachelor=vektorx
935
+ studium --bachelor=genetics
936
+
937
+ Display **master curricula**, via the syntax --master=NAME_HERE
938
+
939
+ studium --master=vektorx
940
+ studium --master=immunobio
941
+
942
+ Note that in both cases, the curriculum has to be registered.
943
+
944
+ If you wish to see which exams have been passed, that is,
945
+ completed successfully, then use this invocation style:
946
+
947
+ studium --passed-exams?
948
+ studium --passed-exams
949
+
950
+ If you want to show how many ECTS points have been completed
951
+ in the registered curricula, do either of the following:
952
+
953
+ studium --passed-ects?
954
+ studium --passed-ects
955
+
956
+ To show how many question-answers I added per year, on my
957
+ own exam dataset, this can be used:
958
+
959
+ studium --questions-per-year
960
+
961
+ ## Studium.return_div_timetable_of_upcoming_exams
962
+
963
+ This module-method can show the upcoming exams, as a html table.
964
+
965
+ This allows you to look at the upcoming exams in a <b>browser</b>.
966
+
967
+ The priority of the given lecture must be among these values:
968
+
969
+ 1, 2, 3, 4, 5
970
+
971
+ Thus, a priority value of higher than 5 will <b>not</b> be
972
+ shown/considered.
973
+
974
+ ## Aliases
975
+
976
+ The studium-gem uses several aliases. These exist mostly for
977
+ convenience.
978
+
979
+ For example, bin/studium has an entry point called <b>--master-curricula</b>.
980
+ This variant also works via <b>--master</b> alone. The latter option
981
+ is not explicitely mentioned since it is just an alias. If you think
982
+ that a specific alias is missing, let me know and I will add it (as
983
+ long as it does not conflict with any other entry point.)
984
+
985
+ ## Return all passed exams
986
+
987
+ If you need to obtain a list (an <b>Array</b>) of all exams passed,
988
+ you can use any of the following two methods:
989
+
990
+ Studium.all_passed_exams
991
+ Studium.return_all_passed_exams
992
+
993
+ On the commandline, you can invoke this via:
994
+
995
+ studium --passed-exams
996
+ studium --all-passed-exams
997
+ studium --return-all-passed-exams
998
+
999
+ Note that this will <b>only</b> honour exams that have been
1000
+ registered in the file <b>lecture_information.yml</b>.
1001
+
1002
+ To show how many ECTS you have passed in all curricula,
1003
+ use this method:
1004
+
1005
+ Studium.show_passed_credits_per_curriculum
1006
+
1007
+ ## Vorbesprechungen / Preliminary meetings
1008
+
1009
+ Some courses require a date before the actual course week, which we
1010
+ will call "preliminary meetings" (in german, "Vorbesprechung" or
1011
+ "Vorbesprechungstermin").
1012
+
1013
+ The Studium project also supports this. The corresponding entry that
1014
+ has to exist, in the file **lecture_information.yml**, is called
1015
+ "vorbesprechungen:".
1016
+
1017
+ The **class Vorbesprechungen** can show upcoming preliminary meetings.
1018
+ That way you should not miss the mandatory attendance part anymore.
1019
+
1020
+ ## curricula.yml and registered curricula
1021
+
1022
+ The file <b>curricula.yml</b> collects the <b>id-numbers</b> of different
1023
+ bachelor/master curricula, from <b>different universities</b>, in
1024
+ <b>Austria</b>. It can be found under the <b>yaml/</b> subdirectory.
1025
+
1026
+ In theory this file could be extended to also include EU-wide curricula
1027
+ listed, but I only limited it to my own potential use cases or that of
1028
+ (former) colleagues.
1029
+
1030
+ If other people want to add different curricula numbers, subdirectories
1031
+ may have to be created for each country - but for now, since nobody else
1032
+ may need more curricula, the current structure will remain as it is.
1033
+
1034
+ Do also note that within the <b>yaml/ subdirectory</b>, there is another
1035
+ directory called <b>curricula/</b>. The latter directory includes
1036
+ several curricula with the respective lectures that belong to
1037
+ this particular curriculum. These files are used to keep track of
1038
+ which lectures are part of these curricula and whether you have already
1039
+ successfully passed these or whether you have not.
1040
+
1041
+ ## Grades
1042
+
1043
+ Exams at universities are typically graded. Different countries make
1044
+ use of different systems. For example, germany uses 6 grades whereas
1045
+ Austria uses 5 grades.
1046
+
1047
+ If you want to output which exams fit to a certain grade, such as
1048
+ <b>grade 2</b>, then you can use code written in
1049
+ <b>studium/toplevel_methods/show_passed_exams_having_this_grade.rb</b>:
1050
+
1051
+ The API is:
1052
+
1053
+ Studium.show_passed_exams_having_this_grade
1054
+ Studium.show_passed_exams_having_this_grade(2)
1055
+ Studium.show_passed_exams_having_this_grade(3)
1056
+ Studium.show_passed_exams_having_this_grade(4)
1057
+
1058
+ Simply pass the <b>number</b> to that method, corresponding to the
1059
+ grade that is sought. In order for this to work, you must use some
1060
+ file where the grades are stored. This can be either in the file
1061
+ <b>lecture_information.yml</b> (I recommend this approach), but it
1062
+ could also be a local .csv file. (The latter is mostly still there
1063
+ for legacy reasons; when this project was started, a .csv file was
1064
+ used rather than a .yml file. Lateron it was realized that the yaml
1065
+ file would be much better, since it can also include native and
1066
+ nested data structures, which makes it a lot easier to parse
1067
+ as-is, via the yaml wrapper that ruby has.)
1068
+
1069
+ ## Improving this project
1070
+
1071
+ If other people would like to make use of this this project, I am open
1072
+ for suggestions on how to make it more flexible.
1073
+
1074
+ Otherwise, I will just keep it here as it is, as I do (or rather, did)
1075
+ require it in a few of my other projects. And if nobody else uses it
1076
+ then this is also fine because I used to be the number one user here
1077
+ anyway - the project had to solve existing problems, and it did so
1078
+ fairly well. Extra work past this point (in the year **2018**) is
1079
+ mostly done just to polish existing functionality, and to add a
1080
+ tiny bit of new functionality every now and then, or to improve the
1081
+ documentation. :)
1082
+
1083
+ I am also adding some code now and then for GUI and www-related use,
1084
+ as this interests me personally; but other than that, I consider the
1085
+ project mostly "done" in regards to time investment.
1086
+
1087
+ ## The method obtain_this_value_from_hash()
1088
+
1089
+ This method resides in the file <b>studium/base/base.rb</b>.
1090
+
1091
+ It was created in order to access the main Hash - that is, the
1092
+ Hash that is returned from the file <b>lecture_information.yml</b>.
1093
+
1094
+ I had to access the various entries from said file and this was
1095
+ becoming a bit tedious. It became even more tedious because some
1096
+ keys are Strings and some keys are Symbols. Since I did not want
1097
+ to look up all the time whether I am dealing with Strings or
1098
+ with Symbols, I transitioned into using that method instead.
1099
+
1100
+ It is thus a bit similar to <b>HashWithIndifferentAccess</b>, except
1101
+ that it is just a simple method (and the main name is actually
1102
+ <b>obtain()</b>).
1103
+
1104
+ ## Download the exam dataset
1105
+
1106
+ You can download the exam dataset by making use of this commandline
1107
+ option:
1108
+
1109
+ studium --download-exam-dataset
1110
+ studium --download-dataset
1111
+
1112
+ This will copy into the exam_topics/ subdirectory, so make sure
1113
+ that you want this BEFORE calling the above. If in doubt, backup
1114
+ your exam dataset and store it elsewhere on top of that (which
1115
+ may be a good idea in general).
1116
+
1117
+ ## class Studium::ShowLecturesOfThisCurriculumId
1118
+
1119
+ **class Studium::ShowLecturesOfThisCurriculumId** can be used to output
1120
+ all lectures that **belong to a particular curriculum ID**. That way
1121
+ you can see which lectures could be done for a particular curriculum;
1122
+ and which lectures have already been passed in this curriculum, too.
1123
+
1124
+ You can input either the curriculum ID to this class; or some
1125
+ shortcuts.
1126
+
1127
+ The following input works on my home system, where
1128
+ show_lectures_of_this_curriculum_id is alias to the .rb file that
1129
+ holds **class Studium::ShowLecturesOfThisCurriculumId** can be used to output:
1130
+
1131
+ show_lectures_of_this_curriculum_id 066875
1132
+ show_lectures_of_this_curriculum_id Bioinformatik
1133
+ show_lectures_of_this_curriculum_id MolBio
1134
+ show_lectures_of_this_curriculum_id Landschaftsplanung
1135
+
1136
+ ## Description of lectures
1137
+
1138
+ Some lectures are described in the file **lecture_information.yml**, but not
1139
+ all are. I have described only some which were of relevance to me. Most of
1140
+ these descriptions are in german, because the teaching language for most of
1141
+ these lectures is in german.
1142
+
1143
+ If you ever want to add your own descriptions, you can do so, by populating
1144
+ the entry called:
1145
+
1146
+ !ruby/symbol description: |
1147
+
1148
+ ## KDE Konsole support
1149
+
1150
+ In the past we could rename KDE Konsole tabs, but this behaviour is presently
1151
+ (November 2018) slightly buggy. I have thus disabled it.
1152
+
1153
+ It may be re-enabled one day in the future, but via a configuration setting,
1154
+ so that users can disable/enable it. By default it will then be disabled.
1155
+
1156
+ ## Studium::PassedEctsPerYear
1157
+
1158
+ If you need to find out how many ECTS points have been passed per given
1159
+ year for a particular curriculum then you can use class
1160
+ **Studium::PassedEctsPerYear**.
1161
+
1162
+ The input is the name of that curriculum. Obviously for this to work, the
1163
+ curriculum has had to be registered first.
1164
+
1165
+ You can also invoke it from the commandline, via:
1166
+
1167
+ studium --passed-ects-per-year
1168
+
1169
+ ## Display the amount of ECTS points passed in Bachelor/Master lectures
1170
+
1171
+ You can find out how many ECTS points were passed in Bachelor and
1172
+ Master lectures so far via:
1173
+
1174
+ studium --ects-bachelor-master
1175
+
1176
+ ## Using an environment variable to specify your replacement for lecture_information.yml
1177
+
1178
+ Some people may wish to use the project but wish to use another .yml
1179
+ file, other than the default one called **lecture_information.yml**.
1180
+ This is normally done so that you can, for example, add your own exam
1181
+ dataset into this .yml file (and have it persistent, that is, stored
1182
+ somewhere else on your filesystem, rather than use the bundled
1183
+ variant that comes distributed with the **studium** gem itself).
1184
+
1185
+ For people who require this, there exists an **environment variable**
1186
+ called **STUDIUM_FILE_LECTURE_INFORMATION**. Simply assign to this
1187
+ variable the full path to your dataset, which must be a .yml file
1188
+ in the same format.
1189
+
1190
+ Example for bash:
1191
+
1192
+ STUDIUM_FILE_LECTURE_INFORMATION=/opt/foo/bar.yml
1193
+
1194
+ ## class Studium::ShowCompletedEctsInAllCurricula
1195
+
1196
+ **class Studium::ShowCompletedEctsInAllCurricula** can be used
1197
+ to show the completed ECTS per curriculum, sorted by n ECTS (maximum
1198
+ amount of ECTS) first. This is really just an "overview" class that
1199
+ shall quickly tell you how many different curricula exist.
1200
+
1201
+ A threshold value ("cut off") exists, which is set to 5.0 ECTS
1202
+ by default. Only if you have passed exams worth a total of at
1203
+ the least 5.0 ECTS will they be shown. This is set via a constant
1204
+ which can be toggled.
1205
+
1206
+ ## class Studium::ShowConflictingLvaLectures
1207
+
1208
+ **class Studium::ShowConflictingLvaLectures** resides at the internal
1209
+ location <b>studium/utility_scripts/show_conflicting_lva_lectures.rb</b>,
1210
+ within the **studium** gem.
1211
+
1212
+ The purpose of this class is to **show conflicting lva-lecture dates**.
1213
+
1214
+ For example, say that you want to know whether there are any conflicts on
1215
+ the day **16.10.2018** (16th October in the year **2018**). Then you would
1216
+ simply pass that string into <b>class Studium::ShowConflictingLvaLectures</b>
1217
+ and that class will then display which exams and which lectures are on
1218
+ that date, **sorted by time**.
1219
+
1220
+ Example:
1221
+
1222
+ conflict 16.10.2018
1223
+
1224
+ (I use the alias called **conflict** to invoke that .rb file from the
1225
+ commandline.)
1226
+
1227
+ You can pass in any number of dates in the **dd.mm.yyyy** format, and the
1228
+ class will iterate through all of them and report which lectures and
1229
+ exams happen on each respective day.
1230
+
1231
+ You can use a range of dates too, if you pass in a **-** between two
1232
+ such dates.
1233
+
1234
+ Example:
1235
+
1236
+ conflict 16.10.2018-20.10.2018
1237
+
1238
+ This will be treated as if you would have given input from the
1239
+ 16th, 17th, 18th, 19th and 20th. That can thus be used as a
1240
+ sort of "mini-calendar", on the commandline, in regards to
1241
+ important lectures/exams. (Remember that you will have to
1242
+ populate and maintain the dataset in the file called
1243
+ **lecture_information.yml** for this to work.)
1244
+
1245
+ You can also use a few **abbreviations** for **class Studium::ShowConflictingLvaLectures**.
1246
+
1247
+ For example, the capital letter **A** is a hardcoded entry that I may
1248
+ change to indicate which is the starting day of university in a given
1249
+ semster, such as **01.10.2018** or any such day. The capital letter B
1250
+ then refers to the day after that day, the capital letter C refers to
1251
+ the day after B, and so forth. The idea here is to use just a one-letter
1252
+ abbreviation rather than have to input **4 - 10** characters instead.
1253
+
1254
+ As already stated in this subsection, the file **lecture_information.yml**
1255
+ needs to have these lectures/exams registered first, before <b>class
1256
+ Studium::ShowConflictingLvaLectures</b> is able to display them.
1257
+
1258
+ Why was this class added? I needed that functionality to plan **exam-dates**
1259
+ ahead of time. That way I could display which exams may be upcoming
1260
+ and so forth - helped me in regards to **time management**.
1261
+
1262
+ ## Underline-support for exam questions
1263
+
1264
+ You can use **ud**test**/ud** or **u**test**/u** to use underline-support
1265
+ in KDE konsole for question-answer combinations. (I can not use tags
1266
+ here in markdown, or so it seems, so assume that **ud** stands for the
1267
+ corresponding tag.)
1268
+
1269
+ ## Studium::ShowLecturers
1270
+
1271
+ class **Studium::ShowLecturers** will show the lecturers of each lecture
1272
+ in a given curriculum, on the commandline/terminal.
1273
+
1274
+ If an entry is missing the lectures then this will be reported on
1275
+ the commandline.
1276
+
1277
+ The idea behind this class is mostly to allow you to quickly find out
1278
+ which lecturer holds which particular lecture (and when).
1279
+
1280
+ It is not a too terribly useful class, though - mostly exists just
1281
+ for **sake of completeness**.
1282
+
1283
+ ## Generating .pdf files
1284
+
1285
+ You can generate some .pdf files about exam-topics.
1286
+
1287
+ For example, for the topic **amg**, you can generate a .pdf file
1288
+ through:
1289
+
1290
+ studium --generate-pdf-for=amg1
1291
+
1292
+ Do note that this functionality depends on the gem called **prawn**.
1293
+
1294
+ Here are more examples for pdf-generation:
1295
+
1296
+ studium --generate-pdf-for=biotech1
1297
+ studium --generate-pdf-for=biotech2
1298
+ studium --generate-pdf-for=virus1
1299
+ studium --generate-pdf-for=virus2
1300
+
1301
+ ## Colours
1302
+
1303
+ The **colours** within the Studium project are handled in two main ways:
1304
+
1305
+ (1) By an external gem called colours
1306
+
1307
+ (2) Internally in most classes of this project via the
1308
+ @use_colours instance variable.
1309
+
1310
+ In other words, if the toplevel instance variable **@use_colours** is set
1311
+ to **false** then the Studium project/namespace will not use colours at
1312
+ all. That way you can also disable colours for the whole project.
1313
+
1314
+ In ruby code you could invoke this method:
1315
+
1316
+ Studium.disable_colours
1317
+
1318
+ By default, on the **commandline**, for exam questions and exam answers
1319
+ to said question, colours can be defined by the user, through the file
1320
+ called <b>yaml/custom_colours.yml</b>.
1321
+
1322
+ That file has ***keys*** such as <b>colour_for_answers</b> and
1323
+ <b>colour_for_answers</b>, which denotes the colour to be used for
1324
+ when a question is asked and an answer to that question is revealed,
1325
+ on the commandline.
1326
+
1327
+ Currently this defaults to <b>olivedrab</b> for exam-questions and
1328
+ <b>lightslategray</b> for exam-answers, but you can use any other
1329
+ colour code here if you would like to. These HTML names are the
1330
+ preferred variants; if you need a link to these names, you could
1331
+ use this one here https://www.w3schools.com/colors/colors_hex.asp.
1332
+
1333
+ You can also change these colours through the commandline,
1334
+ as the next examples will show.
1335
+
1336
+ Examples:
1337
+
1338
+ studium --use-this-colour-for-exam-answers=slateblue
1339
+ studium --use-this-colour-for-exam-questions=grey
1340
+
1341
+ Do note that you can "style" exam questions and exam
1342
+ answers in various ways. For example, if you use "" quotes,
1343
+ then another colour will be used. If you use a tag such
1344
+ as <u> and </u> (a html pseudo-tag, u meaning underline),
1345
+ then the word will be underlined. You can also add HTML
1346
+ colours, such as %3Cslateblue %3Ethis will be in slateblue
1347
+ colour %3C/slateblue %3E. The latter variant may become shorter
1348
+ in the future, such as <slateblue>foo</> or something
1349
+ like that - but for now, you have to use the name of the
1350
+ HTML colour both in the opening and in the closing tag.
1351
+
1352
+ ## Registered URL entries to the (registered) lectures
1353
+
1354
+ Since as of 15.04.2019 (April 2019) it is possible to
1355
+ return the remote URL of a given registered lecture,
1356
+ through the **Studium** module.
1357
+
1358
+ Let's first show an example for this:
1359
+
1360
+ Studium.return_remote_homepage_of_this_lecture "270016 Massenspektrometrie" # => "https://ufind.univie.ac.at/de/course.html?lv=270016&semester=2019S"
1361
+ Studium.return_remote_homepage_of_this_lecture "Massenspektrometrie" # => "https://ufind.univie.ac.at/de/course.html?lv=270016&semester=2019S"
1362
+
1363
+ As you may be able to see, we take a shorter input string,
1364
+ aka the name of the lecture at hand, and then return the
1365
+ remote URL for that lecture.
1366
+
1367
+ This requires that there is a key called :homepage registered
1368
+ for that particular lecture in the file **lecture_information.yml**.
1369
+
1370
+ Right now only a very few lectures contain such an entry, but I
1371
+ will extend on this slowly, as time permits. The long term goal
1372
+ will be to provide a remote URL to **all** registered lectures.
1373
+ (This was already possible through the BeautifulUrl project,
1374
+ but I realized that it may be better to a) register this directly
1375
+ within the Studium project and b) to not depend on other projects
1376
+ if possible).
1377
+
1378
+ ## Encoding
1379
+
1380
+ The default encoding for the **Studium** gem used to be
1381
+ the **encoding ISO-8859-1**, aliased onto the constant
1382
+ called **ENCODING_ISO**. This setting (constant) can be found
1383
+ in the file **studium/encoding/encodings.rb**
1384
+
1385
+ Since as of **May 2019** the default encoding is now **UTF-8**.
1386
+
1387
+ In the event that you may wish to use another encoding, you
1388
+ can modify the yaml file called <b>default_encoding.yml</b>,
1389
+ at **studium/yaml/default_encoding.yml**. Simply add the name
1390
+ of the constant there.
1391
+
1392
+ The reason why I personally used **ISO-8859-1** as encoding is because
1393
+ german umlauts can be a hassle under UTF when combined with an
1394
+ old editor I used to use. I finally abandoned that editor in 2019
1395
+ and am now using another editor, so it was also possible to
1396
+ switch to UTF-8. Unicode/UTF has quite a massive
1397
+ <b>intrinsic complexity</b>, but it also has some useful things,
1398
+ such as emojis and unicode characters, which can be used on the
1399
+ terminal in a colourized manner. That was actually the primary
1400
+ reason why I switched into UTF-8, as odd as that may sound.
1401
+
1402
+ The Studium project will continue to allow any other encoding
1403
+ though, as long as it is supported by ruby itself.
1404
+
1405
+ For the time being, there also exists a commandline way to change
1406
+ the encoding in use for the Studium project.
1407
+
1408
+ studium --encoding=utf
1409
+ studium --encoding=iso1
1410
+
1411
+ If you are fine with UTF-8 then obviously you do not have to change
1412
+ anything.
1413
+
1414
+ ## Studium::SolvedEctsPerUniversity
1415
+
1416
+ If you have solved ECTS credits at different universities, and
1417
+ registered this in the file **lecture_information.yml**, then
1418
+ this class will give a little summary on the commandline as to
1419
+ the number of ECTS points solved at different universities.
1420
+
1421
+ ## Logging activities done within the Studium project
1422
+
1423
+ The **Studium project** will try, by default, to log a lot of
1424
+ information that may be useful in some cases. This is not a
1425
+ trivial task, because there are many different classes that
1426
+ make up this project.
1427
+
1428
+ The paragraph here aims to explain some of the rationale behind
1429
+ the logging.
1430
+
1431
+ class **Studium::Log::StoreLastQuestionAskedIntoFile** will store
1432
+ the last exam-question asked into a file, together with the time
1433
+ stamp. This can then be used to answer questions such as "have I
1434
+ already asked myself this question today?". So this may help
1435
+ for training purposes, e. g. when you wish to acquire some knowledge,
1436
+ and learn for new questions that way.
1437
+
1438
+
1439
+ ## Studium.find_corresponding_exam_topic
1440
+
1441
+ The toplevel method **Studium.find_corresponding_exam_topic** is
1442
+ mostly a convenience method. It will accept an input, ideally
1443
+ a **String**, and return back the official, registered name
1444
+ of the particular exam topic at hand.
1445
+
1446
+ For example, 'genetik' becomes 'allgemeine_genetik', which
1447
+ is also the locally existing name for the exam-file at hand.
1448
+
1449
+ The idea behind that method is that we can take a shorter
1450
+ input, and still obtain the real filename. This is convenient
1451
+ because you can type just a few characters, and have the
1452
+ name of the exam-file returned. It allows us to be lazy here.
1453
+
1454
+ This is especially useful on the commandline, but it is also
1455
+ useful to aggregate it together in different ruby files of
1456
+ this project, and present a "unified" API for this topic.
1457
+
1458
+ Note that since as of 09.11.2019 (9th of November), the
1459
+ number of available exam-topics as part of this project
1460
+ are calculated automatically. Prior to that a constant was
1461
+ used that was hand-counted manually by me, which was too
1462
+ tedious and error-prone - so the new approach should work
1463
+ better for more exam topics in the future.
1464
+
1465
+ ## Studium::Exams::PushSolvedQuestionsOnTop
1466
+
1467
+ **class Studium::Exams::PushSolvedQuestionsOnTop** has a very simple
1468
+ objective: it will move all lines ending with ' []' to the top of
1469
+ a given file, if at the least one ' []' is encountered in that
1470
+ file. Note that "top of the given file" specifically excludes
1471
+ comments, that is lines starting with **#** in that file, and the
1472
+ first line after that '#' comment, which is just a newline for
1473
+ readability reasons usually.
1474
+
1475
+ The idea behind this class is really just to be able to quickly
1476
+ reshuffle all solved questions towards the top of the file;
1477
+ the unsolved questions will then be at the bottom of the file.
1478
+
1479
+ I needed this functionality because it allows me to quickly
1480
+ re-structure existing question-answers, into different
1481
+ topics/themes.
1482
+
1483
+ On my home system, I aliases it to <b>ontop</b> simply.
1484
+
1485
+ ## Studium::Statistics::TopStats
1486
+
1487
+ class **Studium::Statistics::TopStats** can be used to
1488
+ display the percentage value of questions answered in the
1489
+ registered exam topics.
1490
+
1491
+ Invocation example:
1492
+
1493
+ Studium::Statistics::TopStats.new(ARGV)
1494
+
1495
+ ## Display the upcoming exams, via the timetable
1496
+
1497
+ You can show the list of <b>upcoming exams</b> via:
1498
+
1499
+ studium --timetable
1500
+
1501
+ Note that this makes use of the information stored in the file called
1502
+ <b>lecture_information.yml</b>, which has to be maintained by someone.
1503
+ In this case, I am still maintaining the dataset stored in that
1504
+ file (in the year **2019**) - but this may not be the case at a later
1505
+ time, so ideally someone else should be able to maintain that file,
1506
+ or just anyone. I will add sufficient documentation to explain what
1507
+ has to be done, in order to maintain that single file.
1508
+
1509
+ At any rate, the class that is responsible for interpreting the dataset
1510
+ stored in that .yml file, is **class Studium::Exams::UpcomingImportantExams**.
1511
+
1512
+ This is the very same class that is invoked by issuing
1513
+ <b>studium --timetable</b>.
1514
+
1515
+ The exam dates should ideally follow the **dd.mm.yyyy notation**,
1516
+ that is <b>day.month.year</b>.
1517
+
1518
+ An example will be given next. Say that you have a course called
1519
+ <b>Physics for Engineers</b>. Two exams for this course are upcoming,
1520
+ which you may wish to **register** in the above-mentioned yaml
1521
+ file, like in such a way:
1522
+
1523
+ "Physics for Engineers":
1524
+ - "02.02.2018"
1525
+ - "02.03.2018"
1526
+
1527
+ The above means that the next exam for the course "**Physics for
1528
+ Engineers**" will occur at the beginning of february; and then
1529
+ the next exam will be at the beginning of march, and so
1530
+ forth. You should sort this by date.
1531
+
1532
+ In the .yml file, the exam-related entries are called
1533
+ <b>exams:</b> and should denote an **Array**.
1534
+
1535
+ Once the exam has been registered like that,
1536
+ **class Studium::Exams::UpcomingImportantExams**
1537
+ will make use of the information. That's about it for
1538
+ that class. :)
1539
+
1540
+ ## Showing upcoming exams
1541
+
1542
+ **class Studium::ShowUpcomingExams.new** can show **upcoming exams**,
1543
+ on the commandline.
1544
+
1545
+ The **first input argument** should be a number, e. g. 10, which
1546
+ means that the first 10 upcoming exams will be shown. For the
1547
+ next 20 exams, it would be **d20**.
1548
+
1549
+ Note that this **depends on aliases** called "**pwdstud1**" or
1550
+ "**pwdstud2**". These have to exist in a yaml file (on my system
1551
+ this is the yaml file named **cd_aliases.yml**). The display is
1552
+ on the commandline but in principle, a **GUI** could be used as
1553
+ well for this task.
1554
+
1555
+ Do note that when this class is invoked, it will additionally store
1556
+ the result into a file called, e. g. **d20.md** or **d10.md**. This
1557
+ would allow you to upload that file if you want to. I needed that
1558
+ functionality because I wanted to display the upcoming exams
1559
+ somewhere else other than on my machine, for when I am not at home.
1560
+
1561
+ Note that there does exist another class, which can show upcoming
1562
+ exams, via a **.html** file. This class is called
1563
+ <b>Studium::Exams::UpcomingImportantExams</b>.
1564
+
1565
+ You can invoke class <b>Studium::Exams::UpcomingImportantExams</b>
1566
+ from the commandline by issuing something like the following:
1567
+
1568
+ studium --upcoming-exams
1569
+
1570
+ The display will be a HTML table essentially. In order for this
1571
+ to work, the file **lecture_information.yml** must contain the
1572
+ information for these upcoming exams - it is the only file
1573
+ that you may have to update, though. (In theory code could
1574
+ be added to automatically check for new exams, but this
1575
+ requires more code to be written. I am not sure if I will
1576
+ add this, simply due to time constraints alone.)
1577
+
1578
+ You can pass in some other commands to the file from the
1579
+ commandline, such as **--do-not-exit** - see the **--help
1580
+ option** for more information pertaining to class
1581
+ <b>Studium::Exams::UpcomingImportantExams</b>.
1582
+
1583
+ ## Graphviz: generating module dependencies
1584
+
1585
+ Since as of December 2019 it is possible to generate a module
1586
+ dependency image (as a .png file). This depends on the project
1587
+ called **ImageParadise**, and on the program called graphviz.
1588
+
1589
+ The code works, but it is not really optimized or very flexible.
1590
+ Consider it more as a proof-of-concept for the time being -
1591
+ perhaps in the future this may be extended.
1592
+
1593
+ (Note that most of the code for this can be found in the
1594
+ image_paradise gem; the studium gem only generates the
1595
+ Hash that is passed into image_paradise, and it is
1596
+ then the responsibility of image_paradise to generate
1597
+ the image file at hand.)
1598
+
1599
+ ## class Studium::SearchFor_nECTS
1600
+
1601
+ **class Studium::SearchFor_nECTS** can be used to show all lectures
1602
+ having the specified n ECTS credits.
1603
+
1604
+ So for example:
1605
+
1606
+ Studium::SearchFor_nECTS.new(1)
1607
+
1608
+ would show all lectures having 1.0 ECTS points.
1609
+
1610
+ You can invoke this class from the commandline as well.
1611
+
1612
+ I aliased the class to **nects**, and can then do the following:
1613
+
1614
+ nects 1.0 --master --show-numbers
1615
+
1616
+ This would show all lectures belonging to a master-curriculum
1617
+ having 1.0 ECTS points. Additionally, the leading LVA ID numbers
1618
+ will be shown as well.
1619
+
1620
+ ## The following curricula have been completely integrated into the Studium gem so far
1621
+
1622
+ The following **table** lists which curricula have been **integrated fully** so far,
1623
+ as of **March 2020**:
1624
+
1625
+ Number | Name of the Curriculum | Curriculum Number | University | URL to the curriculum
1626
+ --------|----------------------------------------------------|--------------------|--------------------------|---------------------------------------------------------------------------------------------------------
1627
+ **1** | **Bachelor LMBT** | **033 217** | **BOKU** | https://www.boku.ac.at/fileadmin/data/H01000/mitteilungsblatt/MB_2016_17/MB21/033_217_Bachelorcurriculum_LMBT_2017U.pdf
1628
+ **2** | **Bachelor KTWW** | **033 231** | **BOKU** | https://boku.ac.at/fileadmin/data/H01000/mitteilungsblatt/MB_2018_19/MB17/033_231_Bachelorcurriculum_KTWW_2019U.pdf
1629
+ **3** | **Bachelor Agrarwissenschaften** | **033 255** | **BOKU** | https://www.boku.ac.at/fileadmin/data/H01000/mitteilungsblatt/MB_2017_18/MB20/033_255_Bachelorcurriculum_AW_2018U.pdf
1630
+ **4** | **Bachelor Technische Chemie** | **033 290** | **TU** | http://www.tuwien.ac.at/fileadmin/t/studabt/downloads/Studienplaene/Oktober_2017/BachelorstudiumTechnischeChemieE033290.pdf
1631
+ **5** | **Bachelor Pharmazie** | **033 305** | **University of Vienna** | http://senat.univie.ac.at/fileadmin/user_upload/s_senat/konsolidierte_Bachelorcurricula/BA_Pharmazie.pdf
1632
+ **6** | **Bachelor Molekulare Biologie** | **033 630** | **University of Vienna** | https://senat.univie.ac.at/fileadmin/user_upload/s_senat/konsolidierte_Bachelorcurricula/BA_Biologie_Version2015_Juni2018.pdf
1633
+ **7** | **Bachelor Ernährungswissenschaften** | **033 638** | **University of Vienna** | https://nutrition.univie.ac.at/fileadmin/user_upload/i_ernaehrung/Download/Bachelor/Curriculum/Curriculum_Bachelor_Ernaehrungswissenschaften_2013__geringfuegige_AEnderung__2017_2018_40.pdf
1634
+ **8** | **Bachelor Chemie** | **033 662** | **University of Vienna** | http://senat.univie.ac.at/fileadmin/user_upload/s_senat/konsolidierte_Bachelorcurricula/BA_Chemie.pdf
1635
+ **9** | **Bachelor Molekularbiologie** (Graz) | **033 665** | **University Graz** | https://online.uni-graz.at/kfu_online/wbMitteilungsblaetter_neu.display?pNr=14602&pDocNr=3627868&pOrgNr=14190
1636
+ --------|----------------------------------------------------|--------------------|--------------------------|---------------------------------------------------------------------------------------------------------
1637
+ **10** | **Master LMBT** | **066 418** | **BOKU** | https://www.boku.ac.at/fileadmin/data/H01000/mitteilungsblatt/MB_2017_18/MB21/066_417_Mastercurriculum_LMWT_2018U.pdf
1638
+ **11** | **Master TU Vienna Biotechnology** | **066 490** | **TU** | https://www.tuwien.ac.at/fileadmin/t/studabt/downloads/Studienplaene/Oktober_2018/MasterTechnischeChemie.pdf
1639
+ **12** | **Master Pharmazie** | **066 605** | **University of Vienna** | http://senat.univie.ac.at/fileadmin/user_upload/s_senat/konsolidierte_Masterstudien/MA_Pharmazie.pdf
1640
+ **13** | **Master Immunobiologie** | **066 830** | **University of Vienna** | http://senat.univie.ac.at/fileadmin/user_upload/s_senat/konsolidierte_Masterstudien/MA_Molekulare_Mikrobiologie_Mikrobielle_Oekologie_und_Immunbiologie.pdf
1641
+ **14** | **Master Biologische Chemie** | **066 863** | **University of Vienna** | http://senat.univie.ac.at/fileadmin/user_upload/s_senat/konsolidierte_Masterstudien/MA_BiologischeChemie.pdf
1642
+ **15** | **Master Bioinformatik** | **066 875** | **University of Vienna** | http://senat.univie.ac.at/fileadmin/user_upload/s_senat/konsolidierte_Masterstudien/MA_Bioinformatik.pdf
1643
+ **16** | **Master Genetik und Entwicklungsbiologie** | **066 877** | **University of Vienna** | http://senat.univie.ac.at/fileadmin/user_upload/s_senat/konsolidierte_Masterstudien/MA_GenetikEntwicklungsbiologie.pdf
1644
+
1645
+ **BOKU** stands short for "Universität für Bodenkultur" (Wien / Vienna).
1646
+
1647
+ **TU** stands short for "Technische Universität" (Wien / Vienna), aka the
1648
+ "Technical University" in Vienna.
1649
+
1650
+ Keep in mind that the above table currently **only** lists curricula organized in
1651
+ **Austria**. If anyone else wants to extend this table to include other
1652
+ **european universities**, such as in Germany, feel free to do so - but the
1653
+ dataset for these universities will have to be registered **externally**
1654
+ (or at the least maintained by someone else for these other european
1655
+ universities).
1656
+
1657
+ I am willing to add required code to the studium gem, in order to make
1658
+ available any external dataset (and thus add other universities),
1659
+ though. I just can not maintain the dataset itself, since it will require
1660
+ constant adjustments. (In theory we could obtain the dataset dynamically,
1661
+ via HTTP-queries and parsing of the result, but no code doing this in
1662
+ an automated manner is presently part of the studium gem itself.)
1663
+
1664
+ ## Evaluating the progress in different curricula
1665
+
1666
+ You can evaluate your progress in different curricula via class
1667
+ <b>Studium::CurriculumComparer</b>. This class resides within the
1668
+ <b>statistics/</b> subdirectory of this gem.
1669
+
1670
+ In order for this class to work properly, all your successfully completed
1671
+ lectures have to be registered in the file <b>lecture_information.yml</b>
1672
+ prior to using that class. (Thus, you need to use your own dataset,
1673
+ but this is the only sensible thing to do; it would not make a lot of
1674
+ sense for you to use my dataset, since that makes no sense for
1675
+ **your** particular progress in your own studies. People will have
1676
+ to maintain their own dataset here.)
1677
+
1678
+ The class will then output which curricula have the highest amount
1679
+ of successfully completed ECTS points, sorted first. That way you
1680
+ can assess how far you have gotten in this or that curriculum so
1681
+ far.
1682
+
1683
+ ## Deprecations within the Studium gem
1684
+
1685
+ This subsection may eventually contain deprecations within the
1686
+ Studium gem itself.
1687
+
1688
+ - class Studium::Exams::ShowExamThemes was deprecated on
1689
+ 01.06.2020; most of its functionality was integrated into
1690
+ class Studium::Exams::ShowThemes. The new code is better
1691
+ than the old code, in my opinion. Less confusing.
1692
+
1693
+ ## Sinatra interface
1694
+
1695
+ The Studium project has a small sinatra interface, which can
1696
+ be started like this from the commandline:
1697
+
1698
+ studium --sinatra
1699
+
1700
+ (If this fails, try to reload again. On my system I have
1701
+ tied this to open it in the browser the moment sinatra
1702
+ is started, and this takes perhaps two or there seconds.)
1703
+
1704
+ Note that the sinatra-interface is fairly minimal, but it
1705
+ can be used to display different curricula. Expect this
1706
+ to be improved in the long run (past **June 2020**).
1707
+
1708
+ ## Determining the name of a curriculum
1709
+
1710
+ If you have a use case for determining (and returning) the
1711
+ name of a curriculum, you can do this:
1712
+
1713
+ require 'studium/toplevel_methods/name_of_this_curriculum.rb'
1714
+
1715
+ Studium.name_of_this_curriculum
1716
+ Studium.name_of_this_curriculum(:indi2)
1717
+ Studium.name_of_this_curriculum(:tu_wien_chem) # => "Technische Chemie"
1718
+
1719
+ ## class Studium::Exams::UpcomingExams
1720
+
1721
+ class Studium::Exams::UpcomingExams can report which exams are
1722
+ upcoming, via a HTML table.
1723
+
1724
+ ## class Studium::Calendar
1725
+
1726
+ class **Studium::Calendar** attempts to display which courses are
1727
+ upcoming, so that you can plan ahead. It currently works only on
1728
+ the commandline, but in the future ruby-gtk bindings and a
1729
+ sinatra-web-interface may be added - we'll see.
1730
+
1731
+ The main dataset for this class is derived from the file
1732
+ called **participating_in_these_courses.yml**. The key
1733
+ that is listed there will become the full name.
1734
+
1735
+ The class was added in September 2020, so expect things
1736
+ to not work pefectly well for the time being - it will
1737
+ be improved upon at a later time.
1738
+
1739
+ ## Showing all STEOP lectures of a curriculum
1740
+
1741
+ You can show all STEOP lectures that are in a curriculum.
1742
+
1743
+ Issue something like the following on the commandline:
1744
+
1745
+ steop_lectures --curriculum1
1746
+ steop_lectures --curriculum2 # number-input should work
1747
+ steop_lectures --ktww
1748
+ steop_lectures --lbt # Bachelor Biotech-Curriculum at the BOKU
1749
+ steop_lectures --AW # as should abbreviations; AW is "Agrarwissenschaften"
1750
+ steop_lectures_in_this_curriculum --ktww
1751
+
1752
+ Where **steop_lectures** is an alias to where class
1753
+ **Studium::SteopLecturesInThisCurriculum** resides - usually
1754
+ in the file **studium/steop/steop_lectures_in_this_curriculum.rb**.
1755
+
1756
+ If you want to show all steop-lectures in the current semester,
1757
+ consider using <b>Studium::SteopLvaDates.new</b>.
1758
+
1759
+ ## Semesterplaner - planning a given semester (half-year) at a university
1760
+
1761
+ There is a class that may try to plan ahead for a given semester
1762
+ at a university. This class is not very flexible and such but
1763
+ the code could be improved.
1764
+
1765
+ See:
1766
+
1767
+ require 'studium/utility_scripts/semesterplaner.rb'
1768
+ Studium::Semesterplaner.new
1769
+
1770
+ ## Display exam statistics
1771
+
1772
+ To show the exam statistics, try:
1773
+
1774
+ Studium.show_exam_statistics
1775
+
1776
+ ## class Studium::ShowLvaDatesOfThisLecture
1777
+
1778
+ If you need to show the **LVA dates** of a given lecture at hand, on
1779
+ the <b>commandline</b>, then you may want to use <b>class
1780
+ Studium::ShowLvaDatesOfThisLecture</b>, defined in the file
1781
+ <b>studium/utility_scripts/show_lva_dates_of_this_lecture.rb</b>.
1782
+
1783
+ The usage for this class is quite simple - pass in the name of the
1784
+ lecture that you are interested in, such as "Primatologie".
1785
+
1786
+ If you want to get the most accurate information, then you should
1787
+ ideally also pass in the lecture ID; such as in the above example
1788
+ with "Primatologie", the input string should be in the form of:
1789
+
1790
+ "300227 Primatologie"
1791
+
1792
+ We call the "300227 Primatologie" variant as the <b>full
1793
+ input</b> and the variant with "Primatologie" alone as
1794
+ <b>partial input</b>. If only a partial input is provided,
1795
+ then the script will try to be <b>greedy</b> and find as
1796
+ many relevant entries as possible. This can be used as a
1797
+ feature too.
1798
+
1799
+ For example, consider that <b>show_lva_dates_of_this_lecture</b>
1800
+ is an alias to the above .rb file, then the following
1801
+ commandline use:
1802
+
1803
+ show_lva_dates_of_this_lecture Geneti
1804
+
1805
+ would show all lectures that have the tag "Geneti"
1806
+ included.
1807
+
1808
+ Note that you do not necessarily need an alias such as
1809
+ <b>show_lva_dates_of_this_lecture</b>; you can also invoke
1810
+ it from the commandline, as the following example shows:
1811
+
1812
+ studium --show-lva-dates-of-this-lecture=Primatologie
1813
+ studium --show-lva-dates-of-this-lecture="300227 Primatologie"
1814
+
1815
+ To use it in ruby code, try something like this:
1816
+
1817
+ require 'studium/utility_scripts/show_lva_dates_of_this_lecture.rb'
1818
+ result = Studium::ShowLvaDatesOfThisLecture.new("802300 Biological nanosciences and nanotechnology (in Eng.)")
1819
+
1820
+ ## Expanding time ranges
1821
+
1822
+ Consider the situation where a student participates in a lecture
1823
+ requiring practical work time, such as by being active in a
1824
+ laboratory, with a time schedule requiring the students to
1825
+ begin early morning, and work until the late evening, over a
1826
+ time period of three weeks. (This is just an example to illustrate
1827
+ this subsection here; the *use case* is explained.)
1828
+
1829
+ You may see that the school/university displays the specific dates
1830
+ online via something like:
1831
+
1832
+ 15.10. - 2.11.2020,
1833
+
1834
+ **Exactly** like this (this is actually a copy/pasted "real-world"
1835
+ example, including the trailing ',').
1836
+
1837
+ What does the above mean? Well, it means that the course will
1838
+ **begin** at the 15th of october, in the year 2020 (this is
1839
+ the dd.mm.yyyy notation which is in general used in europe).
1840
+
1841
+ The **-** in between means "up until" and the end date is
1842
+ specified to be at the second of november, in 2020.
1843
+
1844
+ Since I needed to quickly convert such short, one-line
1845
+ dates of a given course into a specific time for use in a
1846
+ **calendar-like application**, I needed a class that can output
1847
+ an Array of dates where this course will be held. So, class
1848
+ <b>Studium::ExpandTimeRange</b> was created to tackle this
1849
+ problem.
1850
+
1851
+ This class will accept such odd input as the last example, and
1852
+ then output an Array that can be used in a yaml file, of the specific
1853
+ dates, weekend-names associated with that day and the time. This
1854
+ then allows me to quickly copy/paste this into the corresponding
1855
+ yaml file. (I needed to have this expanded to every day because
1856
+ I also visually have to look at that yaml file. For this, it
1857
+ does help to have every day listed as-is, rather than specify
1858
+ a range such as **02.11-04.12**.)
1859
+
1860
+ Internally you can also use the following toplevel-method:
1861
+
1862
+ Studium.expand_time_range()
1863
+ Studium.expander()
1864
+
1865
+ Use whichever variant you prefer - the last method is quite short
1866
+ though, so you can use it like this:
1867
+
1868
+ Studium.expander('15.10. - 2.11.2018')
1869
+
1870
+ This also works over the **commandline**, of course:
1871
+
1872
+ studium --expand-time-range="15.10. - 2.11.2018,"
1873
+ studium --expander="15.10.-2.11.2018"
1874
+
1875
+ ## Querying whether a student is registered for a particular exam
1876
+
1877
+ To query and thus determine whether you are registered for a
1878
+ particular exam, use this method:
1879
+
1880
+ Studium.registered_for_this_exam?
1881
+ Studium.registered_for_this_exam? "892104 Physik (LBT)"
1882
+
1883
+ Note that in order for this to work, the information has
1884
+ to be registered for that particular course, e. g. as
1885
+ **registered** - that is typically found right above the
1886
+ **exams** setting, if it exists.
1887
+
1888
+ ## class Studium::GenerateSpreadsheet
1889
+
1890
+ The idea for class Studium::GenerateSpreadsheet was to
1891
+ generate a spreadsheet (LibreOffice excel file) for
1892
+ individual curricula automatically. This works partially
1893
+ in the sense that the generated file is correct, but
1894
+ its visual looks are not necessarily ... awesome. If
1895
+ you need to use it, I recommend to use this only as
1896
+ a blueprint, and make enhancement to the generated
1897
+ file manually.
1898
+
1899
+ ## Reporting all lectures that match to a specific lecture type
1900
+
1901
+ If you need to find out all registered lectures that match
1902
+ a particular type, such as 'VO', or 'UE' or 'VO+SE', then you
1903
+ can use the following toplevel-method:
1904
+
1905
+ Studium.report_all_lectures_matching_this_lecture_type('VO+SE')
1906
+
1907
+ The latter was the primary reason why this method has been
1908
+ added; I needed to find out all lecture types that are
1909
+ of combined VO + SE style ("VO" for "Vorlesung", "SE"
1910
+ for "Seminar").
1911
+
1912
+ ## Report how many ECTS were solved per university
1913
+
1914
+ This can be done via:
1915
+
1916
+ Studium::EctsPerUniversity.new
1917
+
1918
+ Or via the **commandline**, through <b>bin/studium</b>:
1919
+
1920
+ studium --ects-per-university
1921
+
1922
+ ## Showing the weekly lectures
1923
+
1924
+ In order to show the weekly lectures, you can use **class WeekParser**.
1925
+
1926
+ ## class Studium::UpcomingMandatoryPresenceCourses.new
1927
+
1928
+ class Studium::UpcomingMandatoryPresenceCourses.new can be
1929
+ used to show the upcoming courses that require your physical
1930
+ presence. By default this class will "peek ahead" 40 days
1931
+ into the future; this can be modified via the method
1932
+ **.set_n_days_into_the_future()**.
1933
+
1934
+ You can also invoke this on the commandline via:
1935
+
1936
+ studium --mandatory
1937
+
1938
+ ## Working with a curriculum
1939
+
1940
+ From the ruby side, you can do this:
1941
+
1942
+ require 'studium'
1943
+
1944
+ this_curriculum = Studium::Curriculum.new(:bachelor_vektoren)
1945
+
1946
+ ## Studium.backup_this_exam_file
1947
+
1948
+ The method **Studium.backup_this_exam_file()** may be used from
1949
+ various classes, but most importantly it is used by
1950
+ **class AskExamQuestion**. The idea here is to first back up
1951
+ the **old** exam question file, before making any changes. That
1952
+ way you can restore to the prior file, if you ever need to.
1953
+
1954
+ ## Marking all exam questions of a given topic to solved
1955
+
1956
+ If you want to mark all questions of a particular topic to
1957
+ "solved" then you can try this:
1958
+
1959
+ qa agrarmarkt --ALL_SOLVED
1960
+ qa agrarmarkt --all-solved
1961
+
1962
+ This will solve all topics from agrarmarkt to **solved**.
1963
+
1964
+ Internally this will ensure that each line has a trailing
1965
+ **[]**.
1966
+
1967
+
1968
+ ## Contact information
1969
+
1970
+ If your creative mind has ideas and specific suggestions to make this
1971
+ gem more useful in general, feel free to drop me an email at any
1972
+ time, via:
1973
+
1974
+ shevegen@gmail.com
1975
+
1976
+ (Do keep in mind that responding to emails may take some time, depending
1977
+ on the amount of work I may have at that moment, due to reallife. I will,
1978
+ however had, read feedback. Patches and code changes are welcome too
1979
+ of course, as long as they are in the spirit of the project at
1980
+ hand, e. g. fitting to the general theme.)
1981
+
1982
+ Thank you.