Compare commits
22 commits
main
...
rewrite-wi
Author | SHA1 | Date | |
---|---|---|---|
|
1d00963035 | ||
|
2e1490d98f | ||
|
c4ba0f5e75 | ||
|
f45f7b715b | ||
|
d41712e010 | ||
|
ef011cda55 | ||
|
4ed9804405 | ||
|
c64b2c2044 | ||
7078c8255b | |||
|
e489ef1517 | ||
|
e816fe50a2 | ||
|
18df4d059e | ||
|
7c73d3b5f6 | ||
|
1381c37500 | ||
|
833f0bdf4c | ||
|
0efcea4879 | ||
|
bee767eb98 | ||
|
52c3ab5c37 | ||
|
df1cff80d8 | ||
|
e9407a6b6e | ||
|
85abfeb743 | ||
|
4fca7c7bae |
38 changed files with 2621 additions and 709 deletions
25
README.md
25
README.md
|
@ -5,12 +5,11 @@ to generate multi-lingual curricula documentation tables from
|
|||
structured representations as a flatfile database. Data scheme and
|
||||
actual values are kept in YAML files in order to version them with git.
|
||||
|
||||
# Usage
|
||||
## Usage
|
||||
|
||||
```sh
|
||||
$> python coursebuilder
|
||||
usage: [-h] [-m META [META ...]] [-l LANG] [-f FIELDS [FIELDS ...]] [-s SCHEMA] [-p] [-t] [-b BOOK] [--level LEVEL]
|
||||
[--table-gen TABLE_GEN]
|
||||
usage: [-h] [-m META [META ...]] [-l LANG] [-f FIELDS [FIELDS ...]] [-s SCHEMA] [-q QUERY] [-qs QUERY_SORT] [-qc QUERY_COMPOUND] [-qf QUERY_FILTER [QUERY_FILTER ...]]
|
||||
[-p] [--title TITLE] [-b BOOK] [--level LEVEL] [--table-gen TABLE_GEN] [--template TEMPLATE] [-o OUT] [--legacy] [--leftcol LEFTCOL]
|
||||
|
||||
versatile curricula generator
|
||||
|
||||
|
@ -23,19 +22,31 @@ options:
|
|||
Fields to be used, the table will be build accordingly
|
||||
-s SCHEMA, --schema SCHEMA
|
||||
using provided schema
|
||||
-q QUERY, --query QUERY
|
||||
compound query to select items
|
||||
-qs QUERY_SORT, --query-sort QUERY_SORT
|
||||
sort query with a min/max over a column like min:credits
|
||||
-qc QUERY_COMPOUND, --query-compound QUERY_COMPOUND
|
||||
create a compound from a column with multiple values/dictionaries in cells
|
||||
-qf QUERY_FILTER [QUERY_FILTER ...], --query-filter QUERY_FILTER [QUERY_FILTER ...]
|
||||
filter final list of columns for output
|
||||
-p, --pagebreak add a pagebreak after each module
|
||||
-t, --title take first value in list as title
|
||||
--title TITLE template for title - use curly brackets (i.e. {}) to mark where the title string is inserted
|
||||
-b BOOK, --book BOOK process a whole curriculum book with sections
|
||||
--level LEVEL level of header tags
|
||||
--table-gen TABLE_GEN
|
||||
runs table generator
|
||||
--template TEMPLATE defines a template to be used with fields
|
||||
-o OUT, --out OUT set the output type
|
||||
--legacy use legacy generator mode for compatibility
|
||||
--leftcol LEFTCOL maximum size of left column
|
||||
```
|
||||
|
||||
# Author
|
||||
## Author
|
||||
|
||||
© Copyright 2020-2024 Hartmut Seichter
|
||||
|
||||
# Licence
|
||||
## Licence
|
||||
|
||||
Coursebuilder is licensed under the terms of the MIT License. For details consult https://opensource.org/license/mit/ or the attached license file
|
||||
|
||||
|
|
3
TODO.md
3
TODO.md
|
@ -6,4 +6,5 @@
|
|||
* [x] add a book mode for mixing input and headers (# Blah -m mod.cg.yaml)
|
||||
* [~] table generator
|
||||
* [ ] overlay of compulsory with other modes ...
|
||||
* [ ] add template based generator
|
||||
* [ ] add template based generator
|
||||
* [ ] port over to structured YAML ... https://tolgee.io/platform/formats/structured_yaml
|
0
coursebuilder/__init__.py
Normal file
0
coursebuilder/__init__.py
Normal file
|
@ -1,130 +1,340 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
"""
|
||||
CourseBuilder
|
||||
CourseBuilder
|
||||
|
||||
Coursebuilder is a preprocessor tool for [pandoc](https://pandoc.org)
|
||||
to generate multi-lingual curricula documentation tables from
|
||||
structured representations as a flatfile database. Data scheme and
|
||||
Coursebuilder is a preprocessor tool for [pandoc](https://pandoc.org)
|
||||
to generate multi-lingual curricula documentation tables from
|
||||
structured representations as a flatfile database. Data scheme and
|
||||
actual values are kept in YAML files in order to version them with git.
|
||||
|
||||
"""
|
||||
|
||||
from argparse import ArgumentParser
|
||||
import os, sys
|
||||
import yaml
|
||||
import string
|
||||
import os,sys
|
||||
import pandas as pd
|
||||
from string import Template
|
||||
|
||||
from tablegenerator import TableGenerator
|
||||
from markdowngenerator import MarkdownGenerator
|
||||
from templategenerator import TemplateGenerator
|
||||
from metagenerator import MetaGenerator
|
||||
from schema import Schema
|
||||
|
||||
|
||||
class CourseBuilder:
|
||||
|
||||
@staticmethod
|
||||
def run():
|
||||
|
||||
# arguments
|
||||
parser = ArgumentParser(description='versatile curricula generator')
|
||||
|
||||
parser.add_argument('-m','--meta',action="extend", nargs="+", type=str,help="course description(s) as YAML file(s)")
|
||||
parser.add_argument('-l','--lang',help="Language to parse from meta file (use de or en)",default='de')
|
||||
parser.add_argument('-f','--fields',help="Fields to be used, the table will be build accordingly",action="extend", nargs="+", type=str)
|
||||
parser.add_argument('-s','--schema',help="using provided schema")
|
||||
parser.add_argument('-p','--pagebreak',action="store_true",help="add a pagebreak after each module")
|
||||
parser.add_argument('-t','--title',action="store_true",help="take first value in list as title")
|
||||
parser.add_argument('-b','--book',type=str,help="process a whole curriculum book with sections")
|
||||
parser.add_argument('--level',type=int,default=1,help="level of header tags")
|
||||
parser.add_argument('--table-gen',type=str,default=None,help='runs table generator')
|
||||
parser.add_argument('--template',type=str,default=None,help='defines a template to be used with fields')
|
||||
|
||||
# get arguments
|
||||
args = parser.parse_args()
|
||||
|
||||
if args.table_gen:
|
||||
|
||||
tg = TableGenerator()
|
||||
|
||||
tg.generate_table(args.table_gen)
|
||||
|
||||
return
|
||||
|
||||
|
||||
# book mode with predefined setting from a book file
|
||||
if args.book and args.schema:
|
||||
|
||||
generator = MetaGenerator()
|
||||
|
||||
with open(args.schema) as sf:
|
||||
generator.set_schema(yaml.load(sf,Loader=yaml.Loader))
|
||||
|
||||
with open(args.book) as bf:
|
||||
|
||||
actual_fields = []
|
||||
|
||||
book = yaml.load(bf,Loader=yaml.Loader)
|
||||
book_path = os.path.abspath(args.book)
|
||||
|
||||
for bi in book['book']:
|
||||
if 'fields' in bi:
|
||||
actual_fields = bi['fields']
|
||||
if 'sections' in bi:
|
||||
for section in bi['sections']:
|
||||
if 'text' in section:
|
||||
print(section['text'][args.lang])
|
||||
if 'modules' in section:
|
||||
for m in section['modules']:
|
||||
mod_path = os.path.join(os.path.dirname(book_path),m)
|
||||
|
||||
with open(mod_path) as fm:
|
||||
try:
|
||||
|
||||
table_items = generator.process(yaml.load(fm,Loader=yaml.Loader),fields=actual_fields,lang=args.lang,pagebreak=args.pagebreak,createTitle=args.title,header_level=args.level)
|
||||
|
||||
MarkdownGenerator.generate(table_items,pagebreak=args.pagebreak,title=args.title,header_level=args.level)
|
||||
|
||||
except Exception as exc:
|
||||
print(f'{type(exc).__name__} in {mod_path}: {exc}',file=sys.stderr)
|
||||
|
||||
|
||||
# verbose command line mode
|
||||
elif args.schema and args.meta and len(args.fields) > 0:
|
||||
|
||||
def generate(args):
|
||||
if args.schema and args.meta:
|
||||
# get actual fields
|
||||
actual_fields = []
|
||||
actual_fields = None
|
||||
|
||||
if os.path.isfile(args.fields[0]):
|
||||
# use a file instead of list
|
||||
if args.fields and os.path.isfile(args.fields[0]):
|
||||
with open(args.fields[0]) as ff:
|
||||
actual_fields = yaml.load(ff,Loader=yaml.Loader)['fields']
|
||||
actual_fields = yaml.load(ff, Loader=yaml.Loader)["fields"]
|
||||
else:
|
||||
actual_fields = args.fields
|
||||
|
||||
|
||||
# seem we have a list or None
|
||||
actual_fields = args.fields
|
||||
|
||||
# get schema
|
||||
actual_schema = None
|
||||
schema = None
|
||||
with open(args.schema) as f:
|
||||
actual_schema = yaml.load(f,Loader=yaml.Loader)
|
||||
schema = Schema(yaml.load(f, Loader=yaml.Loader))
|
||||
|
||||
# if no fields are given, take all!
|
||||
if actual_fields == None:
|
||||
actual_fields = list(schema.keys())
|
||||
|
||||
result_df = []
|
||||
|
||||
# iterate through meta files
|
||||
for m in args.meta:
|
||||
with open(m) as fm:
|
||||
|
||||
generator = MetaGenerator()
|
||||
generator.set_schema(actual_schema)
|
||||
if args.legacy:
|
||||
MarkdownGenerator.generate_table_legacy(
|
||||
table_items=schema.to_list_of_tuple(
|
||||
meta=yaml.load(fm, Loader=yaml.Loader),
|
||||
fields=actual_fields,
|
||||
lang=args.lang,
|
||||
),
|
||||
add_pagebreak=args.pagebreak,
|
||||
title_template=args.title,
|
||||
first_colwidth=args.leftcol,
|
||||
)
|
||||
elif args.query:
|
||||
lot = schema.to_short_dict(
|
||||
meta=yaml.load(fm, Loader=yaml.Loader),
|
||||
fields=actual_fields,
|
||||
lang=args.lang,
|
||||
)
|
||||
|
||||
table_items = generator.process(yaml.load(fm,Loader=yaml.Loader),fields=actual_fields,lang=args.lang,pagebreak=args.pagebreak,createTitle=args.title,header_level=args.level,template=args.template)
|
||||
|
||||
if args.template:
|
||||
TemplateGenerator.generate(table_items)
|
||||
result_df.append(pd.DataFrame([lot]))
|
||||
else:
|
||||
MarkdownGenerator.generate(table_items,pagebreak=args.pagebreak,title=args.title,header_level=args.level)
|
||||
MarkdownGenerator.generate_table(
|
||||
table_items=schema.to_list_of_tuple(
|
||||
meta=yaml.load(fm, Loader=yaml.Loader),
|
||||
fields=actual_fields,
|
||||
lang=args.lang,
|
||||
),
|
||||
add_pagebreak=args.pagebreak,
|
||||
title_template=args.title,
|
||||
first_colwidth=args.leftcol,
|
||||
)
|
||||
|
||||
# print(table_items)
|
||||
# query mode
|
||||
if args.query and len(result_df):
|
||||
# got the list
|
||||
df = pd.concat(result_df, ignore_index=True)
|
||||
|
||||
# generate a dataframe
|
||||
df_q = df.query(args.query)
|
||||
|
||||
# generate a compound column --query-compound column:sum
|
||||
if args.query_compound:
|
||||
# print('{}.sum'.format(args.query_compound))
|
||||
df_q.loc[:, "{}.sum".format(args.query_compound)] = df_q[
|
||||
args.query_compound
|
||||
].apply(lambda x: sum(list(x.values())))
|
||||
print(df_q)
|
||||
|
||||
# --query-sort is parameterized as min:credits - hence direction:column
|
||||
if args.query_sort:
|
||||
qs = args.query_sort.split(":")
|
||||
match qs[0]:
|
||||
case "min":
|
||||
df_q = df_q.sort_values(
|
||||
by=qs[1],
|
||||
ascending=True,
|
||||
key=lambda col: min(col)
|
||||
if hasattr(col, "__len()__")
|
||||
else col,
|
||||
)
|
||||
case "max":
|
||||
df_q = df_q.sort_values(
|
||||
by=qs[1],
|
||||
ascending=False,
|
||||
key=lambda col: max(col)
|
||||
if hasattr(col, "__len()__")
|
||||
else col,
|
||||
)
|
||||
|
||||
# filter query
|
||||
if args.query_filter:
|
||||
df_q = df_q.loc[:, args.query_filter]
|
||||
|
||||
# print(df_q.head())
|
||||
|
||||
# set value transforms
|
||||
if args.query_template:
|
||||
# no idea yet how to parameterize this
|
||||
ww = "written"
|
||||
# df_q['form-of-exam'] = 'Schriftlich' if df_q.loc[:,'form-of-exam'] == 'written' else 'was anderes'
|
||||
# mm = Template("{'written':'S','oral':'mündlich'}[${v}]")?
|
||||
# print(mm.format(v=mm))
|
||||
|
||||
# lets get crazy to create a summary table!
|
||||
# df_summary = pd.DataFrame([{
|
||||
# 'sum.credits': df_q['credits'].sum()
|
||||
# }])
|
||||
|
||||
# set labels directly!
|
||||
if args.query_labels:
|
||||
df_q.columns = args.query_labels
|
||||
|
||||
q_as_md = df_q.to_markdown(tablefmt="grid", index=False)
|
||||
|
||||
print(q_as_md)
|
||||
|
||||
# print(df_summary.to_markdown(tablefmt='grid',index=False))
|
||||
|
||||
@staticmethod
|
||||
def old_run():
|
||||
# arguments
|
||||
parser = ArgumentParser(description="versatile curricula generator")
|
||||
|
||||
# loading mode for internal database
|
||||
parser.add_argument(
|
||||
"-m",
|
||||
"--meta",
|
||||
action="extend",
|
||||
nargs="+",
|
||||
type=str,
|
||||
help="course description(s) as YAML file(s)",
|
||||
)
|
||||
parser.add_argument(
|
||||
"-l",
|
||||
"--lang",
|
||||
help="Language to parse from meta file (use de or en)",
|
||||
default="de",
|
||||
)
|
||||
parser.add_argument(
|
||||
"-f",
|
||||
"--fields",
|
||||
help="Fields to be used, the table will be build accordingly",
|
||||
action="extend",
|
||||
nargs="+",
|
||||
type=str,
|
||||
)
|
||||
parser.add_argument("-s", "--schema", help="using provided schema")
|
||||
|
||||
# query mode
|
||||
parser.add_argument(
|
||||
"-q",
|
||||
"--query",
|
||||
type=str,
|
||||
default=None,
|
||||
help="compound query to select items",
|
||||
)
|
||||
parser.add_argument(
|
||||
"-qs",
|
||||
"--query-sort",
|
||||
type=str,
|
||||
default=None,
|
||||
help="sort query with a min/max over a column like min:credits",
|
||||
)
|
||||
parser.add_argument(
|
||||
"-qc",
|
||||
"--query-compound",
|
||||
type=str,
|
||||
default=None,
|
||||
help="create a compound from a column with multiple values/dictionaries in cells",
|
||||
)
|
||||
parser.add_argument(
|
||||
"-qf",
|
||||
"--query-filter",
|
||||
type=str,
|
||||
default=[],
|
||||
action="extend",
|
||||
nargs="+",
|
||||
help="filter final list of columns for output",
|
||||
)
|
||||
parser.add_argument(
|
||||
"-ql",
|
||||
"--query-labels",
|
||||
type=str,
|
||||
default=[],
|
||||
action="extend",
|
||||
nargs="+",
|
||||
help="new labels for query like",
|
||||
)
|
||||
parser.add_argument(
|
||||
"-qt",
|
||||
"--query-template",
|
||||
type=str,
|
||||
default=[],
|
||||
action="extend",
|
||||
nargs="+",
|
||||
help="templates for values in the form of {value}",
|
||||
)
|
||||
|
||||
# create pagebreaks
|
||||
parser.add_argument(
|
||||
"-p",
|
||||
"--pagebreak",
|
||||
action="store_true",
|
||||
help="add a pagebreak after each module",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--title",
|
||||
type=str,
|
||||
default=None,
|
||||
help="template for title - use curly brackets (i.e. {}) to mark where the title string is inserted",
|
||||
)
|
||||
parser.add_argument(
|
||||
"-b",
|
||||
"--book",
|
||||
type=str,
|
||||
help="process a whole curriculum book with sections",
|
||||
)
|
||||
parser.add_argument("--level", type=int, default=1, help="level of header tags")
|
||||
parser.add_argument(
|
||||
"--table-gen", type=str, default=None, help="runs table generator"
|
||||
)
|
||||
parser.add_argument(
|
||||
"--template",
|
||||
type=str,
|
||||
default=None,
|
||||
help="defines a template to be used with fields",
|
||||
)
|
||||
parser.add_argument(
|
||||
"-o", "--out", type=str, default=None, help="set the output type"
|
||||
)
|
||||
parser.add_argument(
|
||||
"--legacy",
|
||||
action="store_true",
|
||||
help="use legacy generator mode for compatibility",
|
||||
)
|
||||
|
||||
parser.add_argument(
|
||||
"--leftcol", type=int, default=35, help="maximum size of left column"
|
||||
)
|
||||
|
||||
# get arguments
|
||||
args = parser.parse_args()
|
||||
|
||||
if args.table_gen:
|
||||
tg = TableGenerator()
|
||||
tg.generate_table(args.table_gen)
|
||||
|
||||
return
|
||||
|
||||
# book mode with predefined setting from a book file
|
||||
if args.book and args.schema:
|
||||
with open(args.book) as bf:
|
||||
actual_fields = []
|
||||
|
||||
book = yaml.load(bf, Loader=yaml.Loader)
|
||||
book_path = os.path.abspath(args.book)
|
||||
|
||||
for bi in book["book"]:
|
||||
if "fields" in bi:
|
||||
actual_fields = bi["fields"]
|
||||
|
||||
if "sections" in bi:
|
||||
for section in bi["sections"]:
|
||||
if "text" in section:
|
||||
print(section["text"][args.lang])
|
||||
|
||||
# gernerate section wise parts
|
||||
if "modules" in section:
|
||||
# override fields
|
||||
args.fields = actual_fields
|
||||
|
||||
# expand filenames to be relative to the book
|
||||
args.meta = [
|
||||
os.path.join(os.path.dirname(book_path), mod_path)
|
||||
for mod_path in section["modules"]
|
||||
]
|
||||
|
||||
CourseBuilder.generate(args=args)
|
||||
|
||||
# verbose command line mode
|
||||
elif args.schema:
|
||||
CourseBuilder.generate(args=args)
|
||||
else:
|
||||
parser.print_help()
|
||||
|
||||
if __name__ == '__main__':
|
||||
CourseBuilder.run()
|
||||
|
||||
def main():
|
||||
# parser
|
||||
parser = ArgumentParser(description="versatile curricula generator")
|
||||
|
||||
# loading mode for internal database
|
||||
parser.add_argument(
|
||||
"-m",
|
||||
"--meta",
|
||||
action="extend",
|
||||
nargs="+",
|
||||
type=str,
|
||||
help="course description(s) as YAML file(s)",
|
||||
)
|
||||
|
||||
|
||||
# run as main
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
# # recommended setting for pandas
|
||||
# pd.options.mode.copy_on_write = True
|
||||
# # run
|
||||
# CourseBuilder.run()
|
||||
|
|
132
coursebuilder/app.py
Normal file
132
coursebuilder/app.py
Normal file
|
@ -0,0 +1,132 @@
|
|||
#
|
||||
# coursebuilder
|
||||
#
|
||||
|
||||
from typing import Any
|
||||
from argparse import ArgumentParser
|
||||
from pathlib import Path
|
||||
import yaml
|
||||
|
||||
from coursebuilder.schema import Schema
|
||||
|
||||
|
||||
class Course:
|
||||
i18n_name: str = "lang.{}.yaml"
|
||||
mod_name: str = "mod.yaml"
|
||||
|
||||
def __init__(self, *, path: Path) -> None:
|
||||
with open(path) as f:
|
||||
# resolve rest of bundle
|
||||
self.__data = yaml.load(f, Loader=yaml.Loader)
|
||||
# load i18n overlays
|
||||
self.__i18n = {
|
||||
f"{str(p).split('.')[1]}": yaml.load(open(p), Loader=yaml.Loader)
|
||||
for p in path.parent.glob(Course.i18n_name.format("*"))
|
||||
}
|
||||
|
||||
def __getitem__(self, name: str, /) -> Any:
|
||||
"""this overload magic function takes a key and a language code like my_key.en or my_key.de"""
|
||||
s = name.split(".")
|
||||
|
||||
if len(s) != 2:
|
||||
raise ValueError(
|
||||
"query with item selector requires form ['key.lang'] alternative is ['key.*']"
|
||||
)
|
||||
return (
|
||||
self.__i18n[s[-1]][s[0]]
|
||||
if s[-1] in self.__i18n.keys() and s[0] in self.__i18n[s[-1]].keys()
|
||||
else self.__data[s[0]]
|
||||
)
|
||||
|
||||
def __str__(self):
|
||||
return f"data:{self.__data}\ni18n:{self.__i18n}"
|
||||
|
||||
|
||||
class StudyCourse:
|
||||
def __init__(self, *, path: Path) -> None:
|
||||
self.path = path
|
||||
|
||||
with open(path) as f:
|
||||
self.__data = yaml.load(f, Loader=yaml.Loader)
|
||||
|
||||
self.courses: dict[str, Course] = {
|
||||
f"{c}": Course(path=self.path.parent / c / Course.mod_name)
|
||||
for c in self.__data["courses"]
|
||||
}
|
||||
|
||||
def __getattr__(self, name: str, /) -> Any:
|
||||
return self.__data[name] if self.__data else None
|
||||
|
||||
def __str__(self):
|
||||
return f"path: {self.path}\ndata: {self.__data}"
|
||||
|
||||
|
||||
def main():
|
||||
# parser
|
||||
parser = ArgumentParser(description="versatile curricula generator")
|
||||
|
||||
# loading mode for internal database
|
||||
parser.add_argument(
|
||||
"-i",
|
||||
"--input",
|
||||
type=str,
|
||||
help="course file with definition of the course",
|
||||
)
|
||||
|
||||
parser.add_argument(
|
||||
"-s",
|
||||
"--schema",
|
||||
type=str,
|
||||
help="schema to validate against",
|
||||
)
|
||||
parser.add_argument(
|
||||
"-f",
|
||||
"--fields",
|
||||
help="Fields to be used, the table will be build accordingly",
|
||||
action="extend",
|
||||
nargs="+",
|
||||
type=str,
|
||||
)
|
||||
parser.add_argument(
|
||||
"-c",
|
||||
"--create",
|
||||
help="Fields to be used, the table will be build accordingly",
|
||||
type=str,
|
||||
)
|
||||
|
||||
# get arguments
|
||||
args = parser.parse_args()
|
||||
|
||||
# with input
|
||||
if args.input and args.schema:
|
||||
with open(args.schema) as f_schema:
|
||||
schema = Schema(schema=yaml.load(f_schema, Loader=yaml.Loader)) # Schema
|
||||
sc = StudyCourse(path=(Path(".") / args.input).absolute()) # Database
|
||||
|
||||
actual_fields = args.fields if args.fields else schema.keys()
|
||||
|
||||
for field in actual_fields:
|
||||
for lang in sc.languages:
|
||||
for shortcode, course in sc.courses.items():
|
||||
print(
|
||||
field,
|
||||
"@",
|
||||
shortcode,
|
||||
".",
|
||||
lang,
|
||||
"\n",
|
||||
course[f"{field}.{lang}"],
|
||||
)
|
||||
|
||||
elif args.schema and args.create:
|
||||
schema = Schema(
|
||||
schema=yaml.load(open(args.schema), Loader=yaml.Loader)
|
||||
) # Schema
|
||||
print(schema.fields())
|
||||
print(schema.types())
|
||||
print(schema.facets())
|
||||
|
||||
|
||||
# run as main
|
||||
if __name__ == "__main__":
|
||||
main()
|
|
@ -1,25 +1,44 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
import textwrap,itertools
|
||||
|
||||
# we need raw value maybe add a third item - tuple the input?
|
||||
|
||||
# alternative use a dictionary
|
||||
# { name: XYZ }
|
||||
|
||||
# or make it the class
|
||||
import itertools
|
||||
|
||||
class MarkdownGenerator:
|
||||
|
||||
@staticmethod
|
||||
def generate_tablerow() -> str:
|
||||
pass
|
||||
|
||||
|
||||
@staticmethod
|
||||
def generate_table(table_items,add_pagebreak = False,title_template = None,first_colwidth = 28):
|
||||
|
||||
import pandas as pd
|
||||
import tabulate
|
||||
|
||||
# get the dataframe
|
||||
df = pd.DataFrame(table_items)
|
||||
|
||||
# use first column for
|
||||
df.columns = df.iloc[0]
|
||||
df = df[1:]
|
||||
|
||||
if title_template != None:
|
||||
print(title_template.format(df.columns[1]),'\n')
|
||||
|
||||
print(df.to_markdown(tablefmt='grid', index=False, maxcolwidths=[first_colwidth,None]))
|
||||
print('\n') # always add a newline after the table
|
||||
|
||||
if add_pagebreak:
|
||||
print('\\pagebreak')
|
||||
|
||||
|
||||
@staticmethod
|
||||
def generate(ti,pagebreak = False,title = False,header_level = 1) -> str:
|
||||
def generate_table_legacy(table_items,add_pagebreak = False,title_template = None,first_colwidth = 28):
|
||||
|
||||
import textwrap
|
||||
|
||||
line_length = 128
|
||||
column_ratio= 0.28
|
||||
column_ratio = float(first_colwidth) / 100
|
||||
|
||||
h_len = int(line_length * column_ratio)
|
||||
d_len = line_length-h_len
|
||||
|
@ -27,8 +46,8 @@ class MarkdownGenerator:
|
|||
#
|
||||
# generate title (currently the first one)
|
||||
#
|
||||
if title:
|
||||
print('#' * header_level,ti[0][1],'\n')
|
||||
if title_template != None:
|
||||
print(title_template.format(table_items[0][1]),'\n')
|
||||
|
||||
print(''.join(['+',"".ljust(h_len,'-'),'+',"".ljust(d_len,'-'),'+']))
|
||||
|
||||
|
@ -40,7 +59,7 @@ class MarkdownGenerator:
|
|||
|
||||
# test if this affected by a third item!
|
||||
|
||||
for k,v in ti:
|
||||
for k,v in table_items:
|
||||
|
||||
#
|
||||
if v == None:
|
||||
|
@ -79,5 +98,5 @@ class MarkdownGenerator:
|
|||
|
||||
|
||||
# to control pagebreaks for pandoc
|
||||
if pagebreak:
|
||||
if add_pagebreak:
|
||||
print('\n\\newpage')
|
|
@ -1,155 +0,0 @@
|
|||
import os,string,sys
|
||||
import yaml
|
||||
|
||||
class MetaGenerator:
|
||||
|
||||
def __init__(self) -> None:
|
||||
self.__schema = None
|
||||
|
||||
def set_schema(self,schema = None):
|
||||
self.__schema = schema
|
||||
|
||||
def get_template(self,field,lang='de'):
|
||||
if 'template' in self.__schema[field]:
|
||||
return self.__schema[field]['template'][lang]
|
||||
else:
|
||||
return "$value"
|
||||
|
||||
def is_translatable(self,field):
|
||||
if 'translatable' in self.__schema[field]:
|
||||
return self.__schema[field]['translatable']
|
||||
else:
|
||||
return True
|
||||
|
||||
def needs_spec(self,field):
|
||||
if 'spec' in self.__schema[field]:
|
||||
return self.__schema[field]
|
||||
else:
|
||||
return False
|
||||
|
||||
def process_label(self,field,lang='de'):
|
||||
# processes the label of a field item
|
||||
return self.__schema[field]['label'][lang]
|
||||
|
||||
def process_str(self,meta,field,lang='de'):
|
||||
if self.is_translatable(field):
|
||||
|
||||
return [self.process_label(field,lang),meta[field][lang]]
|
||||
else:
|
||||
if not 'value' in meta[field]:
|
||||
raise AssertionError(field,'incomplete')
|
||||
|
||||
return [self.process_label(field,lang),meta[field]['value']]
|
||||
|
||||
def process_enum(self,meta,field,lang='de'):
|
||||
"""
|
||||
enum have a specification 'specs' option
|
||||
that can be forced by the scheme
|
||||
"""
|
||||
vv = meta[field]['value']
|
||||
enum_val = self.__schema[field]['values'][vv][lang]
|
||||
|
||||
if self.needs_spec(field):
|
||||
|
||||
t = string.Template(self.get_template(field=field,lang=lang))
|
||||
|
||||
spec = meta[field]['spec'][lang]
|
||||
|
||||
return [self.process_label(field,lang),t.substitute({'value': enum_val,'spec': spec})]
|
||||
else:
|
||||
return [self.process_label(field,lang),enum_val]
|
||||
|
||||
def process_num(self,meta,field,lang='de'):
|
||||
v = meta[field]['value']
|
||||
t = string.Template(self.get_template(field,lang))
|
||||
return [self.process_label(field,lang),t.substitute({'value' : v})]
|
||||
|
||||
def process_multinum(self,meta,field,lang='de'):
|
||||
v = meta[field]['value']
|
||||
t = string.Template(self.get_template(field,lang))
|
||||
if hasattr(v, "__len__"):
|
||||
vv = [t.substitute({'value' : ev}) for ev in v]
|
||||
return [self.process_label(field,lang),', '.join(vv)]
|
||||
else:
|
||||
return self.process_num(meta=meta,field=field,lang=lang)
|
||||
|
||||
|
||||
def process_multikey(self,meta,field,lang='de'):
|
||||
"""
|
||||
multikey need to assign a numeric value to a key
|
||||
"""
|
||||
vs = meta[field]['value']
|
||||
t = string.Template(self.get_template(field,lang))
|
||||
|
||||
k = self.process_label(field,lang)
|
||||
|
||||
parts = []
|
||||
|
||||
for e in vs:
|
||||
kk = self.__schema[field]['keys'][e][lang]
|
||||
parts.append(t.substitute({'key': kk, 'value' : vs[e]}))
|
||||
|
||||
return [k,', '.join(parts)]
|
||||
|
||||
|
||||
def process(self,meta,fields = [],lang = 'de',pagebreak = False,createTitle=False,header_level=1,template=None):
|
||||
|
||||
table_items = []
|
||||
|
||||
# iterate over requested fields
|
||||
for field in fields:
|
||||
try:
|
||||
# correlate with schema and append
|
||||
match self.__schema[field]['type']:
|
||||
case 'str': table_items.append(self.process_str(meta,field,lang))
|
||||
case 'enum': table_items.append(self.process_enum(meta,field,lang))
|
||||
case 'int' | 'num' : table_items.append(self.process_num(meta,field,lang))
|
||||
case 'multinum' : table_items.append(self.process_multinum(meta,field,lang))
|
||||
case 'multikey': table_items.append(self.process_multikey(meta,field,lang))
|
||||
except Exception as exp:
|
||||
print(field,' not resolvable in ',self.__schema,exp)
|
||||
|
||||
# maybe return tableitems as np.Dataframe?
|
||||
return table_items
|
||||
|
||||
|
||||
|
||||
# if template != None:
|
||||
# # use template generator
|
||||
# TemplateGenerator.generate(table_items,pagebreak,createTitle,header_level=header_level)
|
||||
# pass
|
||||
# else:
|
||||
# # conventional MD mode
|
||||
# MarkdownGenerator.generate(table_items,pagebreak,createTitle,header_level=header_level)
|
||||
|
||||
# def process_book_section(self,section,lang='de'):
|
||||
# pass
|
||||
|
||||
# book mode
|
||||
# def process_book(self,book,bookpath,create_title,pagebreak,lang='de',header_level=2):
|
||||
|
||||
# actual_fields = []
|
||||
|
||||
# for bi in book['book']:
|
||||
# if 'fields' in bi:
|
||||
# actual_fields = bi['fields']
|
||||
# if 'sections' in bi:
|
||||
# for section in bi['sections']:
|
||||
# if 'text' in section:
|
||||
# print(section['text'][lang])
|
||||
# if 'modules' in section:
|
||||
# for m in section['modules']:
|
||||
# mod_path = os.path.join(os.path.dirname(bookpath),m)
|
||||
|
||||
# with open(mod_path) as fm:
|
||||
# try:
|
||||
# table_items = self.process(yaml.load(fm,Loader=yaml.Loader),fields=actual_fields,lang=lang,pagebreak=pagebreak,createTitle=create_title,header_level=header_level)
|
||||
|
||||
# print(table_items)
|
||||
|
||||
# except Exception as exc:
|
||||
# print(f'{type(exc).__name__} in {mod_path}: {exc}',file=sys.stderr)
|
||||
|
||||
|
||||
|
||||
|
159
coursebuilder/schema.py
Normal file
159
coursebuilder/schema.py
Normal file
|
@ -0,0 +1,159 @@
|
|||
class Schema:
|
||||
__yes_vals: list[str] = ["true", "yes", "on"]
|
||||
|
||||
__unique: str = "unique"
|
||||
__spec: str = "spec"
|
||||
__facets: str = "facets"
|
||||
__fields: str = "fields"
|
||||
__type: str = "type"
|
||||
__label: str = "label"
|
||||
|
||||
def __init__(self, *, schema: dict) -> None:
|
||||
self.__schema = schema
|
||||
|
||||
def facets(self) -> list[str]:
|
||||
return list(self.__schema[Schema.__facets])
|
||||
|
||||
def fields(self) -> list[str]:
|
||||
return list(self.__schema[Schema.__fields].keys())
|
||||
|
||||
def types(self) -> dict:
|
||||
return {
|
||||
field: a[Schema.__type]
|
||||
for field, a in self.__schema[Schema.__fields].items()
|
||||
}
|
||||
|
||||
def is_unique(self, field: str) -> bool:
|
||||
return (
|
||||
Schema.__yes_vals in self.__schema[field][Schema.__unique].lower()
|
||||
if Schema.__unique in self.__schema[field].keys()
|
||||
else True
|
||||
)
|
||||
|
||||
def needs_spec(self, field: str) -> bool:
|
||||
return (
|
||||
Schema.__yes_vals in self.__schema[field][Schema.__spec].lower()
|
||||
if Schema.__spec in self.__schema[field].keys()
|
||||
else False
|
||||
)
|
||||
|
||||
# def get_value(self, meta: dict, field: str, lang: str):
|
||||
# """
|
||||
# treats receiving the value like a variant,
|
||||
# returns values with their language specific representations
|
||||
# """
|
||||
# match self.__schema[field]["type"]:
|
||||
# case "str":
|
||||
# return (
|
||||
# meta[field][lang]
|
||||
# if self.is_translatable(field)
|
||||
# else meta[field]["value"]
|
||||
# )
|
||||
# case "enum" | "int" | "num" | "multikey":
|
||||
# return meta[field]["value"]
|
||||
# case "multinum":
|
||||
# return (
|
||||
# meta[field]["value"]
|
||||
# if hasattr(meta[field]["value"], "__iter__")
|
||||
# else [
|
||||
# meta[field]["value"],
|
||||
# ]
|
||||
# ) # force list!
|
||||
|
||||
# def to_list_of_dict(self, meta, fields, lang):
|
||||
# """
|
||||
# generates a list of dict which can easily be converted
|
||||
# to a pandas dataframe
|
||||
# """
|
||||
# # list comprehension for rows
|
||||
# return [
|
||||
# {
|
||||
# "field": field, # field name
|
||||
# "lang": lang, # language shortcode
|
||||
# "type": self.__schema[field]["type"], # datatype
|
||||
# "label": self.__schema[field]["label"][lang], # label
|
||||
# "value": self.get_value(meta, field, lang), # actual value
|
||||
# "template": self.__schema[field]["template"][lang]
|
||||
# if "template" in self.__schema[field]
|
||||
# else None,
|
||||
# # getting crazy with nested dict comprehension
|
||||
# "enum_values": {
|
||||
# k: v[lang] for (k, v) in self.__schema[field]["values"].items()
|
||||
# }
|
||||
# if "enum" in self.__schema[field]["type"]
|
||||
# else None,
|
||||
# "key_values": {
|
||||
# k: v[lang] for (k, v) in self.__schema[field]["keys"].items()
|
||||
# }
|
||||
# if "multikey" in self.__schema[field]["type"]
|
||||
# else None,
|
||||
# "spec": meta[field]["spec"][lang] if "spec" in meta[field] else None,
|
||||
# }
|
||||
# for field in fields
|
||||
# ]
|
||||
|
||||
# def to_short_dict(self, meta, fields, lang):
|
||||
# """
|
||||
# generates a short version of dict which can easily be converted
|
||||
# to a pandas dataframe
|
||||
# """
|
||||
# # dict comprehension for whole meta part
|
||||
# return {field: self.get_value(meta, field, lang) for field in fields}
|
||||
|
||||
# def to_list_of_tuple(self, meta, fields, lang):
|
||||
# """
|
||||
# generates a list of tuples with a label and value (text)
|
||||
# this is usually consumed by a Markdown generator
|
||||
|
||||
# todo: needs deuglyfication of free standing loop, templates are possible for all
|
||||
# """
|
||||
# list = []
|
||||
# for r in self.to_list_of_dict(meta, fields, lang):
|
||||
# match r["type"]:
|
||||
# case "str":
|
||||
# list.append((r["label"], r["value"]))
|
||||
# case "int" | "num":
|
||||
# list.append(
|
||||
# (
|
||||
# r["label"],
|
||||
# r["template"].format(value=r["value"], spec=r["spec"])
|
||||
# if r["template"]
|
||||
# else r["value"],
|
||||
# )
|
||||
# )
|
||||
# case "enum":
|
||||
# list.append(
|
||||
# (
|
||||
# r["label"],
|
||||
# r["template"].format(
|
||||
# value=r["enum_values"][r["value"]], spec=r["spec"]
|
||||
# )
|
||||
# if r["template"]
|
||||
# else r["enum_values"][r["value"]],
|
||||
# )
|
||||
# )
|
||||
# case "multikey":
|
||||
# list.append(
|
||||
# (
|
||||
# r["label"],
|
||||
# ", ".join(
|
||||
# [
|
||||
# r["template"].format(
|
||||
# key=r["key_values"][k], value=v
|
||||
# )
|
||||
# for k, v in r["value"].items()
|
||||
# ]
|
||||
# ),
|
||||
# )
|
||||
# )
|
||||
# case "multinum":
|
||||
# list.append(
|
||||
# (
|
||||
# r["label"],
|
||||
# ", ".join(
|
||||
# r["template"].format(value=v) for v in r["value"]
|
||||
# ),
|
||||
# )
|
||||
# )
|
||||
|
||||
# return list
|
|
@ -4,6 +4,8 @@ import string
|
|||
import tempfile
|
||||
import subprocess
|
||||
import os
|
||||
import pandas as pd
|
||||
import tabulate
|
||||
|
||||
class TableGenerator:
|
||||
"""
|
||||
|
|
41
docs/quickstart.md
Normal file
41
docs/quickstart.md
Normal file
|
@ -0,0 +1,41 @@
|
|||
# concept
|
||||
|
||||
The concept behind coursebuilder is to store curricula descriptions in `YAML` files that can be versioned in a git repository. Unlike classic databases, an observable and well defined versioning is paramount in these descriptions as they are the legal foundation for study and exam regulations.
|
||||
|
||||
The following pieces play together here:
|
||||
|
||||
- `schema` files, usually a `schema.yaml`
|
||||
- `mod` files, usually something along the lines of `mod.coursecode.yaml`
|
||||
- `book` files describing a whole regulation set and course global details
|
||||
- some sort of transformation with `coursebuilder` into Markdown that is piped through [pandoc](https://pandoc.org) in order to generate PDF, HTML and other representation from this code
|
||||
|
||||
# schema files
|
||||
|
||||
Schema files are responsible to describe the used structures in a database. The following datatypes are supported:
|
||||
|
||||
- `str` a simple string, can be accompanied with a `template`
|
||||
- `enum` a classic enum datatype with a fixed set of values
|
||||
- `num` a numeric datatype
|
||||
- `multinum` an array type with the possibility to `spec` each value
|
||||
- `multikey` a key-value type with additional numeric data associated with each key instance
|
||||
|
||||
# mod files (modules)
|
||||
|
||||
Modules describe a course in detail and implement an instance of the schema file. Especially `strings` and `enums` are translatable One of the plan is to use a validator to find inconsistencies automatically, like workloads that are not following the 30h = 1ECTS rule.
|
||||
|
||||
|
||||
# datatypes
|
||||
|
||||
## `str` datatype
|
||||
|
||||
```yaml
|
||||
# this would reside in a schema field on top level
|
||||
# a field of name 'id'
|
||||
id: # name of the field
|
||||
type: str # sets the datatype to str
|
||||
translatable: false # enforces the value is not translatable (default is true)
|
||||
label: { # label describes the meaning of the datatype in regards of the schema
|
||||
de: "Kürzel", # translation of the label in German (de)
|
||||
en: "code" # translation of the label in English (en)
|
||||
}
|
||||
```
|
7
requirements.txt
Normal file
7
requirements.txt
Normal file
|
@ -0,0 +1,7 @@
|
|||
numpy==1.26.4
|
||||
pandas==2.2.2
|
||||
python-dateutil==2.9.0.post0
|
||||
pytz==2024.1
|
||||
six==1.16.0
|
||||
tabulate==0.9.0
|
||||
tzdata==2024.1
|
44
test/Makefile
Normal file
44
test/Makefile
Normal file
|
@ -0,0 +1,44 @@
|
|||
# debug make file for testing
|
||||
build_dir := build
|
||||
target_en := ${build_dir}/table.en.pdf
|
||||
target_de := ${build_dir}/table.de.pdf
|
||||
target_de_book := ${build_dir}/curricullum.de.pdf
|
||||
|
||||
targets := ${target_de} ${target_en} ${target_de_book}
|
||||
|
||||
target_flags := --template pandoc-template/eisvogel.latex -V table-use-row-colors:true
|
||||
|
||||
coursebuilder := ../coursebuilder
|
||||
|
||||
all: ${targets}
|
||||
|
||||
${target_en}: mod.cg.yaml
|
||||
@echo "creating English version ..."
|
||||
mkdir -p ${build_dir}
|
||||
python ${coursebuilder} -s schema.yaml -m $^ -l en -f fields.yaml | pandoc ${target_flags} -o ${target_en}
|
||||
|
||||
${target_de}: mod.cg.yaml
|
||||
@echo "creating German version ..."
|
||||
mkdir -p ${build_dir}
|
||||
python ${coursebuilder} -s schema.yaml -m $^ -l de -f fields.yaml | pandoc ${target_flags} -o ${target_de}
|
||||
|
||||
${target_de_book}: *.yaml
|
||||
python ${coursebuilder} -s schema.yaml -b book.yaml -p --title "### {}" -l de --leftcol 25 --legacy | pandoc ${target_flags} -V toc:true -V lang:de -o ${target_de_book}
|
||||
|
||||
clean:
|
||||
rm -f ${targets}
|
||||
|
||||
debug:
|
||||
python ${coursebuilder} -s schema.yaml -m mod.cg.yaml mod.interactsys.yaml mod.test.yaml -p --title "## {}" -l de -f name credits goal content
|
||||
# | pandoc ${target_flags} -V lang:de -o ${target_de}
|
||||
|
||||
debug-query:
|
||||
python ${coursebuilder} -s schema.yaml -m mod.cg.yaml mod.interactsys.yaml -q "kind=='compulsory'" -qs min:credits -qc form-of-instruction -qf name credits form-of-exam -ql Modulname Kreditpunkte Prüfungsart -qt quatsch
|
||||
|
||||
debug-query-book:
|
||||
python ${coursebuilder} -s schema.yaml -b book.yaml -q "kind=='compulsory'" -qs min:credits -qc form-of-instruction -qf name credits form-of-instruction -ql Modulname Kürzel Kreditpunkte
|
||||
|
||||
debug-query-full:
|
||||
python ${coursebuilder} -s ~/Documents/MaACS/MHB/schema.yaml -b ~/Documents/MaACS/MHB/book.yaml -q "kind=='compulsory_elective'" -qc form-of-instruction -qf name form-of-instruction.sum credits term -ql Modulname SWS Kreditpunkte Semester
|
||||
|
||||
.PHONY: clean
|
|
@ -4,8 +4,9 @@
|
|||
#
|
||||
|
||||
book:
|
||||
- fields:
|
||||
- name
|
||||
- fields:
|
||||
- name
|
||||
- instructor
|
||||
- id
|
||||
- goal
|
||||
- content
|
||||
|
@ -33,5 +34,21 @@ book:
|
|||
en: "## elective courses {.unnumbered}"
|
||||
- modules:
|
||||
- mod.interactsys.yaml
|
||||
- mod.test.yaml
|
||||
|
||||
|
||||
#
|
||||
# tables
|
||||
#
|
||||
query:
|
||||
list-credits-and-workload:
|
||||
- fields:
|
||||
- name
|
||||
- credits
|
||||
- workload
|
||||
|
||||
# just for ideas
|
||||
regulations:
|
||||
- globals:
|
||||
- course_name: Applied Computer Science (M.Sc.)
|
||||
|
19
test/fields.yaml
Normal file
19
test/fields.yaml
Normal file
|
@ -0,0 +1,19 @@
|
|||
field-names:
|
||||
- name
|
||||
- instructor
|
||||
- id
|
||||
- goal
|
||||
- content
|
||||
- form-of-instruction
|
||||
- prerequisites
|
||||
- teaching-material
|
||||
- author-of-indenture
|
||||
- used-in
|
||||
- workload
|
||||
- credits
|
||||
- form-of-exam
|
||||
- term
|
||||
- frequency
|
||||
- duration
|
||||
- kind
|
||||
- remarks
|
118
test/maacs/v1/mod.3dcc.yaml
Normal file
118
test/maacs/v1/mod.3dcc.yaml
Normal file
|
@ -0,0 +1,118 @@
|
|||
name:
|
||||
de: 3D Content Creation
|
||||
en: 3D Content Creation
|
||||
|
||||
instructor:
|
||||
de: Prof. Hartmut Seichter, PhD
|
||||
en: Prof. Hartmut Seichter, PhD
|
||||
|
||||
id:
|
||||
value: 3DCC
|
||||
|
||||
form-of-instruction:
|
||||
value: { 'seminar': 2, 'exersise': 2 }
|
||||
|
||||
goal:
|
||||
de: >
|
||||
Studierenden erlernen ein breites Spektrum an computergrafischen
|
||||
Grundlagen zur Erstellung von 3D Inhalten für Spiele, Animationen und
|
||||
Visualisierungen. Es wird vertieftes, praxisorientiertes Wissen im
|
||||
Bereich der 3D Modellierung Animation und Compositing vermittelt.
|
||||
Darüber hinaus lernen die Studierenden Grundlagen der Ästhetik,
|
||||
Komposition des Raumes um mit computergrafischen Mitteln visuell
|
||||
anspruchsvolle Inhalte zu konzipieren, planen und umzusetzen.
|
||||
Es werden technologisch neueste Methoden eingesetzt um die
|
||||
verschiedene Ausspielwege von 3D Inhalten an Projektarbeiten
|
||||
zu erlernen.
|
||||
|
||||
en: >
|
||||
Students learn a wide range of fundamental computer graphics concepts to create 3D content for games, animations and visualizations. In-depth, practice-oriented knowledge in the field of 3D modeling animation and compositing is taught. In addition, students learn basics principles of aesthetics, composition of space make efficient use of computer graphics to conceptualize, plan and implement visually appealing content. Latest techniques are tought to adapt to a number of 3D content pipelines through project work.
|
||||
|
||||
content:
|
||||
de: |
|
||||
- Menschliche Wahrnehmung
|
||||
- Visuelle Kommunikation und Design Methodik
|
||||
- Szenengestaltung, Gestalt und Semiotik
|
||||
- Didaktik des Raums
|
||||
- 3D Modelle und Darstellung
|
||||
- Modellierungstechniken
|
||||
- Animationsprinzipien und techniken
|
||||
- Match-Moving und Motion-Capturing
|
||||
- Szenen und Projektmanagement
|
||||
- Bildsyntheseverfahren (Rasterization, Raytracing, Pathtracing und Radiosity)
|
||||
- Beleuchtungsmodelle, Texturierung, PBR workflow
|
||||
- Licht- und Kamerasetzung
|
||||
- Special FX und 3D Compositing
|
||||
|
||||
en: |
|
||||
- Human perception
|
||||
- Visual communication and design methodology
|
||||
- Scenedesign, Gestalt and semiotics
|
||||
- Tenets of space
|
||||
- 3D model representations and visualization
|
||||
- modelling techniques
|
||||
- Animationprinciples and techniques
|
||||
- Match-Moving and Motion-Capturing
|
||||
- Scene- and project management
|
||||
- Image synthesis (rasterization, raytracing, pathtracing and radiosity)
|
||||
- Lighttransport, texturing and PBR workflow
|
||||
- Lighting and camera work
|
||||
- special FX and 3D compositing
|
||||
|
||||
|
||||
teaching-material:
|
||||
de: |
|
||||
- Seminare
|
||||
- Übungen
|
||||
- Blitzentwürfe
|
||||
- Video-Tutorien
|
||||
|
||||
en: |
|
||||
- seminar
|
||||
- exersises
|
||||
- inpromptu designs
|
||||
- video tutorials
|
||||
|
||||
|
||||
prerequisites:
|
||||
de: >
|
||||
Formale Voraussetzung bestehen nicht. Für eine erfolgreiche Teilnahme sollte das Modul „Grundlagen der Computergrafik“ im Vorfeld belegt werden.
|
||||
en: >
|
||||
No formal prerequisites. For a successful attendance the course *Computergraphics* is recommended.
|
||||
|
||||
author-of-indenture:
|
||||
de:
|
||||
en:
|
||||
|
||||
used-in:
|
||||
de: "Master Applied Computerscience"
|
||||
en: "Master Applied Computerscience"
|
||||
|
||||
workload:
|
||||
de: "150h Insgesamt bestehend aus 60 Stunden Präsenzzeit, 60 Stunden Selbststudium, 30h Prüfung und Prüfungsvorbereitung"
|
||||
en: "overall 150h comprising of 60h in-person training, 60h of self-study and 30h exam preperation and exam"
|
||||
|
||||
credits:
|
||||
value: 5
|
||||
|
||||
form-of-exam:
|
||||
value: alternative
|
||||
spec:
|
||||
de: abzugebende Projektarbeit (70%) und mündliche Prüfung (30% ~20min)
|
||||
en: submitted project (70%) and oral exam (30% ~20min)
|
||||
|
||||
term:
|
||||
value: 2
|
||||
|
||||
frequency:
|
||||
value: once_per_year
|
||||
|
||||
duration:
|
||||
value: 1
|
||||
|
||||
kind:
|
||||
value: compulsory_elective
|
||||
|
||||
remarks:
|
||||
de:
|
||||
en:
|
130
test/maacs/v1/mod.cg.yaml
Normal file
130
test/maacs/v1/mod.cg.yaml
Normal file
|
@ -0,0 +1,130 @@
|
|||
name:
|
||||
de: Computergrafik
|
||||
en: Computer Graphics
|
||||
|
||||
instructor:
|
||||
de: Prof. Hartmut Seichter, PhD
|
||||
en: Prof. Hartmut Seichter, PhD
|
||||
|
||||
id:
|
||||
value: CG
|
||||
|
||||
credits:
|
||||
value: 5
|
||||
|
||||
|
||||
form-of-instruction:
|
||||
value: { 'lecture': 2, 'exersise': 1 }
|
||||
|
||||
term:
|
||||
value: 1
|
||||
|
||||
duration:
|
||||
value: 1
|
||||
|
||||
goal:
|
||||
de: |
|
||||
Computergrafik ist ein Schmelztiegel von Technologien in der Informatik mit dem Ziel visuelle
|
||||
Inhalte effizient zu generieren und dem Nutzer zu präsentieren. Studierende können den
|
||||
Zusammenhang von visuellen Technologien in der Informatik, den zugrunde liegenden mathematischen
|
||||
Konzepte und der Physiognomie des Menschen, insbesondere des Sehapparates herstellen.
|
||||
Sie können die Eigenschaften verschiedener Darstellungsformen und -techniken analysieren und
|
||||
bewerten. Sie lernen grundsätzliche Technologien der 3D Echtzeitdarstellung
|
||||
kennen und wenden diese an.
|
||||
en: |
|
||||
Computer graphics is describing all techniques in computer science
|
||||
generating images perceivable by humans. Participants will have a broad
|
||||
overview of techniques and concepts of computer graphics. They will be
|
||||
able to apply theoretical concepts in practice.
|
||||
|
||||
content:
|
||||
de: |
|
||||
* Grundkenntnisse der menschlichen Wahrnehmung
|
||||
* Grundkonzepte der Bilderzeugung, Speicherung und Transformation
|
||||
* Anwendungen von Computergrafik
|
||||
* Technologien zur Bilddarstellung
|
||||
* 3D Modelle, insbesondere Surface- und Volumemodelle
|
||||
* Transformationspipeline
|
||||
* Homogene Vektorräume und Transformationen
|
||||
* Szenengraphen und Echtzeit Rendering APIs
|
||||
* Bildsyntheseverfahren
|
||||
* Geometrie und Bild Samplingverfahren und Anti-Aliasing Strategien
|
||||
* Lichttransport, Physikalische Beleuchtungsmodelle
|
||||
* Texturierungsverfahren
|
||||
* Überblick Visualisierung
|
||||
* Graphische Nutzeroberflächen und Systeme
|
||||
en: |
|
||||
* Basics of human perception
|
||||
* Concepts of image storage and manipulation
|
||||
* Applications of computer graphics
|
||||
* Display sytems
|
||||
* 3D models,i.e. surface and volume models
|
||||
* Transformationspipeline
|
||||
* Homogenous vector spaces and transformations
|
||||
* Scenegraphs and rendering APIs
|
||||
* Methods for image-synthesis
|
||||
* Sampling in computer graphics
|
||||
* Light transport and shading models
|
||||
* Texturing
|
||||
* Overview visualizations
|
||||
* Graphical User Interfaces
|
||||
|
||||
teaching-material:
|
||||
de: |
|
||||
* H5P Lernmodule
|
||||
* Lernforum
|
||||
* Übungen
|
||||
* Folien
|
||||
* Auszug aus der Literaturliste:
|
||||
* Bar-Zeev, Avi. Scenegraphs: Past, Present and Future, 2003 http://www.realityprime.com/scenegraph.php
|
||||
* Burley, Brent. “Physically-Based Shading at Disney.” In ACM SIGGRAPH, 2012:1--7, 2012
|
||||
* Goldstein, E. Bruce. Sensation and Perception. 3rd ed. Belmont, Calif.: Wadsworth Pub. Co., 1989
|
||||
* Hughes, John F. Computer Graphics: Principles and Practice. Third edition. Upper Saddle River, New Jersey: Addison-Wesley, 2014
|
||||
* Shirley, Peter, and R. Keith Morley. Realistic Ray Tracing. 2. ed. Natick, Mass: A K Peters, 2003
|
||||
en: |
|
||||
* H5P learning modules
|
||||
* learning forum
|
||||
* exersises
|
||||
* slides and quizzes
|
||||
* Literature:
|
||||
* Bar-Zeev, Avi. Scenegraphs: Past, Present and Future, 2003 http://www.realityprime.com/scenegraph.php.
|
||||
* Burley, Brent. “Physically-Based Shading at Disney.” In ACM SIGGRAPH, 2012:1--7, 2012
|
||||
* Goldstein, E. Bruce. Sensation and Perception. 3rd ed. Belmont, Calif.: Wadsworth Pub. Co., 1989
|
||||
* Hughes, John F. Computer Graphics: Principles and Practice. Third edition. Upper Saddle River, New Jersey: Addison-Wesley, 2014
|
||||
* Shirley, Peter, and R. Keith Morley. Realistic Ray Tracing. 2. ed. Natick, Mass: A K Peters, 2003
|
||||
|
||||
prerequisites:
|
||||
de: >
|
||||
Formelle Voraussetzungen bestehen nicht.
|
||||
Für die erfolgreiche Teilnahme sollten Kenntnisse in linearer Algebra vorhanden sein.
|
||||
|
||||
en: >
|
||||
No formal prerequisites. For a successful participation attendees should have an understanding of linear algebra.
|
||||
|
||||
author-of-indenture:
|
||||
de: ""
|
||||
en: ""
|
||||
|
||||
used-in:
|
||||
de: "Master Applied Computerscience"
|
||||
en: "Master Applied Computerscience"
|
||||
|
||||
workload:
|
||||
de: "150h Insgesamt bestehend aus 90h Präsenz und 30h Prüfungsvorbereitung und Prüfung"
|
||||
en: "overall 150h with 90h in-person training and 30h exam preperation and exam"
|
||||
|
||||
form-of-exam:
|
||||
value: written
|
||||
spec:
|
||||
de: Klausur von 120min
|
||||
en: exam of 120min
|
||||
|
||||
frequency:
|
||||
value: once_per_year
|
||||
|
||||
kind:
|
||||
value: compulsory_elective
|
||||
|
||||
remarks:
|
||||
de:
|
||||
en:
|
104
test/maacs/v1/mod.interactsys.yaml
Normal file
104
test/maacs/v1/mod.interactsys.yaml
Normal file
|
@ -0,0 +1,104 @@
|
|||
name:
|
||||
de: Interactive Systems
|
||||
en: Interactive Systems
|
||||
|
||||
instructor:
|
||||
de: Prof. Hartmut Seichter, PhD
|
||||
en: Prof. Hartmut Seichter, PhD
|
||||
|
||||
id:
|
||||
value: InteractSys
|
||||
|
||||
form-of-instruction:
|
||||
value: { 'lecture': 2, 'exersise': 2 }
|
||||
|
||||
goal:
|
||||
de: |
|
||||
Studierende lernen vertieftes Wissen um grafische Nutzeroberflächen
|
||||
zu analysieren und informierte Designentscheidungen zu treffen.
|
||||
Dabei werden auch Grundlagen der Wahrnehmung vermittelt.
|
||||
Studierende entwickeln anhand von Prototypen anwendbares Wissen
|
||||
Interaktionen zu messen und anhand von wissenschaftlichen
|
||||
Methoden zu bewerten.
|
||||
|
||||
en: |
|
||||
Students acquire in-depth knowledge to analyse graphical user interfaces,
|
||||
analyse and make informed design decisions. Basics of perception are taught.
|
||||
Students develop applicable knowledge using prototypes to measure
|
||||
interactions and evaluate them using scientific methods.
|
||||
|
||||
content:
|
||||
de: |
|
||||
- Wahrnehmung
|
||||
- Visuelle Gestaltung von Graphischen Nutzerschnittstellen
|
||||
- Applikationsdesign mit Fokus auf GUI Konzepte
|
||||
- Nutzerstudien
|
||||
- Evaluierungsmethoden mit interaktiven visuellen Systemen
|
||||
en: |
|
||||
- Perception
|
||||
- Visual design of graphical user interfaces
|
||||
- Application design with a focus on GUI concepts
|
||||
- User studies
|
||||
- Evaluation methods with interactive visual systems
|
||||
|
||||
teaching-material:
|
||||
de: |
|
||||
- H5P Lernmodule, Lernforum und Übungen am PC
|
||||
- Auszug aus der Literaturliste:
|
||||
- Card, Stuart K., Thomas P. Moran, and Allen Newell. The Psychology of Human-Computer Interaction. Repr. Mahwah, NJ: Erlbaum, 2008.
|
||||
- Cooper, Alan. About Face: The Essentials of Interaction Design, 4th Edition. 4th edition. Indianapolis, IN: John Wiley and Sons, 2014.
|
||||
- Dix, Alan, Janet Finlay, Gregory D Abowd, and Russell Beale. Human-Computer Interaction. Pearson Education, 2003
|
||||
- Krug, Steve. Don’t Make Me Think, Revisited: A Common Sense Approach to Web Usability. Third edition. Berkeley, Calif.: New Riders, 2014.
|
||||
- Nielsen, Jakob. Usability Engineering. Boston: Academic Press, 1993.
|
||||
en: |
|
||||
- H5P learning modules, Q&A meetings and lab sessions
|
||||
- Excerpt from literature list:
|
||||
- Card, Stuart K., Thomas P. Moran, and Allen Newell. The Psychology of Human-Computer Interaction. Repr. Mahwah, NJ: Erlbaum, 2008.
|
||||
- Cooper, Alan. About Face: The Essentials of Interaction Design, 4th Edition. 4th edition. Indianapolis, IN: John Wiley and Sons, 2014.
|
||||
- Dix, Alan, Janet Finlay, Gregory D Abowd, and Russell Beale. Human-Computer Interaction. Pearson Education, 2003
|
||||
- Krug, Steve. Don’t Make Me Think, Revisited: A Common Sense Approach to Web Usability. Third edition. Berkeley, Calif.: New Riders, 2014.
|
||||
- Nielsen, Jakob. Usability Engineering. Boston: Academic Press, 1993.
|
||||
|
||||
prerequisites:
|
||||
de: >
|
||||
Formale Voraussetzung bestehen nicht.
|
||||
Für eine erfolgreiche Teilnahme sollten Kenntnisse in Statistik und Programmierung vorhanden sein.
|
||||
en: >
|
||||
No formal prerequisites. Knowledge in statistics and programming are advisable.
|
||||
|
||||
author-of-indenture:
|
||||
de:
|
||||
en:
|
||||
|
||||
used-in:
|
||||
de: "Master Applied Computerscience"
|
||||
en: "Master Applied Computerscience"
|
||||
|
||||
workload:
|
||||
de: "150h Insgesamt bestehend aus 60 Stunden Präsenzzeit, 60 Stunden Selbststudium, 30h Prüfung und Prüfungsvorbereitung"
|
||||
en: "overall 150h comprising of 60h in-person training, 60h of self-study and 30h exam preperation and exam"
|
||||
|
||||
credits:
|
||||
value: 5
|
||||
|
||||
form-of-exam:
|
||||
value: alternative
|
||||
spec:
|
||||
de: abzugebende Projektarbeit (80%) und Dokumentation (20%)
|
||||
en: submitted project (80%) and documentation (20%)
|
||||
|
||||
term:
|
||||
value: 3
|
||||
|
||||
frequency:
|
||||
value: once_per_year
|
||||
|
||||
duration:
|
||||
value: 1
|
||||
|
||||
kind:
|
||||
value: compulsory_elective
|
||||
|
||||
remarks:
|
||||
de:
|
||||
en:
|
112
test/maacs/v1/mod.virtaugenv.yaml
Normal file
112
test/maacs/v1/mod.virtaugenv.yaml
Normal file
|
@ -0,0 +1,112 @@
|
|||
name:
|
||||
de: Virtual and Augmented Environments
|
||||
en: Virtual and Augmented Environments
|
||||
|
||||
instructor:
|
||||
de: Prof. Hartmut Seichter, PhD
|
||||
en: Prof. Hartmut Seichter, PhD
|
||||
|
||||
id:
|
||||
value: VirtAugEnv
|
||||
|
||||
form-of-instruction:
|
||||
value: { 'seminar': 2, 'exersise': 2 }
|
||||
|
||||
goal:
|
||||
de: >
|
||||
Studierende beschäftigen sich tiefgreifend mit Technologien der
|
||||
Mixed, Augmented und Virtual Reality. Es werden der Stand
|
||||
der Technik im Seminar detailliert erörtert und es werden wissenschaftliche
|
||||
Diskussionen um die jeweiligen Technologien geführt. Anhand von heutigen
|
||||
VR/AR und MR Technologien setzen sich die Teilnehmer mit dem Stand der
|
||||
Technik und den Möglichkeiten der Umsetzung von immersiven
|
||||
Medienprodukten auseinander.
|
||||
|
||||
en:
|
||||
Students acquire in depth knowledge with technologies of Mixed,
|
||||
Augmented and Virtual Reality. The state of the art is discussed in detail
|
||||
in this seminar. Using today's VR/AR and MR technologies
|
||||
the participants will implement a prototype to learn about the possibilities of
|
||||
current immersive media products.
|
||||
|
||||
content:
|
||||
de: |
|
||||
- Tracking Technologien
|
||||
- Display Technologien in VR und AR
|
||||
- Interaktionsgeräte
|
||||
- Interaktionstechniken
|
||||
- Echtzeitrendering-Methoden
|
||||
- Stereorendering
|
||||
- Compositing
|
||||
- Evaluierungsmethoden in VR/AR
|
||||
- Human Factors in VR/AR
|
||||
en: |
|
||||
* tracking technolgies
|
||||
* display technologies in VR and AR
|
||||
* interaction devices
|
||||
* interaction techniques
|
||||
* realtime rendering methods
|
||||
* stereo rendering
|
||||
* compositing
|
||||
* UX and evaluation methods in VR/AR
|
||||
* human factors in VR/AR
|
||||
|
||||
teaching-material:
|
||||
de: |
|
||||
- Folien, Vorlesungen, Vorträge
|
||||
- Auszug aus der Literaturliste:
|
||||
- Drummond, T., and R. Cipolla. “Real-Time Visual Tracking of Complex Structures.” IEEE Transactions on Pattern Analysis and Machine Intelligence 24, no. 7 (July 2002): 932-46. https://doi.org/10.1109/TPAMI.2002.1017620.
|
||||
- LaViola, Joseph J., Ernst Kruijff, Ryan P. McMahan, Doug A. Bowman, and Ivan Poupyrev. 3D User Interfaces: Theory and Practice. Second edition. Addison-Wesley Usability and HCI Series. Boston: Addison-Wesley, 2017\.
|
||||
- Stanney, Kay, Cali Fidopiastis, and Linda Foster. “Virtual Reality Is Sexist: But It Does Not Have to Be.” Frontiers in Robotics and AI 7 (January 31, 2020). https://doi.org/10.3389/frobt.2020.00004.
|
||||
- Wloka, Mathias M. “Interacting with Virtual Reality.” In In Virtual Environments and Product Development Processes, edited by J. Rix, S. Haas, and J. Teixeira. Chapman and Hall, 1995\.
|
||||
|
||||
en: |
|
||||
* slides, lecture, impulse talks
|
||||
* excerpt of the literature list:
|
||||
* Drummond, T., and R. Cipolla. “Real-Time Visual Tracking of Complex Structures.” IEEE Transactions on Pattern Analysis and Machine Intelligence 24, no. 7 (July 2002): 932-46. https://doi.org/10.1109/TPAMI.2002.1017620.
|
||||
* LaViola, Joseph J., Ernst Kruijff, Ryan P. McMahan, Doug A. Bowman, and Ivan Poupyrev. 3D User Interfaces: Theory and Practice. Second edition. Addison-Wesley Usability and HCI Series. Boston: Addison-Wesley, 2017.
|
||||
* Stanney, Kay, Cali Fidopiastis, and Linda Foster. “Virtual Reality Is Sexist: But It Does Not Have to Be.” Frontiers in Robotics and AI 7 (January 31, 2020). https://doi.org/10.3389/frobt.2020.00004.
|
||||
* Wloka, Mathias M. "Interacting with Virtual Reality." In In Virtual Environments and Product Development Processes, edited by J. Rix, S. Haas, and J. Teixeira. Chapman and Hall, 199\.
|
||||
|
||||
prerequisites:
|
||||
de: >
|
||||
Formale Voraussetzung bestehen nicht. Für eine erfolgreiche Teilnahme sollte das Modul Computergrafik im Vorfeld belegt werden.
|
||||
en: >
|
||||
No formal prerequisites. For a successful attendance, knowledge of the topics covered in the module Computergraphics is required.
|
||||
|
||||
author-of-indenture:
|
||||
de:
|
||||
en:
|
||||
|
||||
used-in:
|
||||
de: "Master Applied Computerscience"
|
||||
en: "Master Applied Computerscience"
|
||||
|
||||
workload:
|
||||
de: "150h Insgesamt bestehend aus 60 Stunden Präsenzzeit, 90 Stunden Selbststudium und Projektbearbeitung"
|
||||
en: "overall 150h comprising of 60h in-person training, 90h of self-study and project preperation"
|
||||
|
||||
credits:
|
||||
value: 5
|
||||
|
||||
form-of-exam:
|
||||
value: alternative
|
||||
spec:
|
||||
de: abzugebende Projektarbeit (80%) und Dokumentation (20%)
|
||||
en: submitted project (80%) and documentation (20%)
|
||||
|
||||
term:
|
||||
value: 3
|
||||
|
||||
frequency:
|
||||
value: once_per_year
|
||||
|
||||
duration:
|
||||
value: 1
|
||||
|
||||
kind:
|
||||
value: compulsory_elective
|
||||
|
||||
remarks:
|
||||
de:
|
||||
en:
|
40
test/maacs/v2/3dcc/lang.de.yaml
Normal file
40
test/maacs/v2/3dcc/lang.de.yaml
Normal file
|
@ -0,0 +1,40 @@
|
|||
goal: >
|
||||
Studierenden erlernen ein breites Spektrum an computergrafischen
|
||||
Grundlagen zur Erstellung von 3D Inhalten für Spiele, Animationen und
|
||||
Visualisierungen. Es wird vertieftes, praxisorientiertes Wissen im
|
||||
Bereich der 3D Modellierung Animation und Compositing vermittelt.
|
||||
Darüber hinaus lernen die Studierenden Grundlagen der Ästhetik,
|
||||
Komposition des Raumes um mit computergrafischen Mitteln visuell
|
||||
anspruchsvolle Inhalte zu konzipieren, planen und umzusetzen.
|
||||
Es werden technologisch neueste Methoden eingesetzt um die
|
||||
verschiedene Ausspielwege von 3D Inhalten an Projektarbeiten
|
||||
zu erlernen.
|
||||
|
||||
content: |
|
||||
- Menschliche Wahrnehmung
|
||||
- Visuelle Kommunikation und Design Methodik
|
||||
- Szenengestaltung, Gestalt und Semiotik
|
||||
- Didaktik des Raums
|
||||
- 3D Modelle und Darstellung
|
||||
- Modellierungstechniken
|
||||
- Animationsprinzipien und techniken
|
||||
- Match-Moving und Motion-Capturing
|
||||
- Szenen und Projektmanagement
|
||||
- Bildsyntheseverfahren (Rasterization, Raytracing, Pathtracing und Radiosity)
|
||||
- Beleuchtungsmodelle, Texturierung, PBR workflow
|
||||
- Licht- und Kamerasetzung
|
||||
- Special FX und 3D Compositing
|
||||
|
||||
teaching-material: |
|
||||
- Seminare
|
||||
- Übungen
|
||||
- Blitzentwürfe
|
||||
- Video-Tutorien
|
||||
|
||||
prerequisites: |
|
||||
Formale Voraussetzung bestehen nicht. Für eine erfolgreiche Teilnahme sollte das Modul „Grundlagen der Computergrafik“ im Vorfeld belegt werden.
|
||||
|
||||
form-of-exam:
|
||||
spec: abzugebende Projektarbeit (70%) und mündliche Prüfung (30% ~20min)
|
||||
|
||||
workload: "150h Insgesamt bestehend aus 60 Stunden Präsenzzeit, 60 Stunden Selbststudium, 30h Prüfung und Prüfungsvorbereitung"
|
31
test/maacs/v2/3dcc/lang.en.yaml
Normal file
31
test/maacs/v2/3dcc/lang.en.yaml
Normal file
|
@ -0,0 +1,31 @@
|
|||
goal: |
|
||||
Students learn a wide range of fundamental computer graphics concepts to create 3D content for games, animations and visualizations. In-depth, practice-oriented knowledge in the field of 3D modeling animation and compositing is taught. In addition, students learn basics principles of aesthetics, composition of space make efficient use of computer graphics to conceptualize, plan and implement visually appealing content. Latest techniques are tought to adapt to a number of 3D content pipelines through project work.
|
||||
|
||||
content: |
|
||||
- Human perception
|
||||
- Visual communication and design methodology
|
||||
- Scenedesign, Gestalt and semiotics
|
||||
- Tenets of space
|
||||
- 3D model representations and visualization
|
||||
- modelling techniques
|
||||
- Animationprinciples and techniques
|
||||
- Match-Moving and Motion-Capturing
|
||||
- Scene- and project management
|
||||
- Image synthesis (rasterization, raytracing, pathtracing and radiosity)
|
||||
- Lighttransport, texturing and PBR workflow
|
||||
- Lighting and camera work
|
||||
- special FX and 3D compositing
|
||||
|
||||
teaching-material: |
|
||||
- seminar
|
||||
- exersises
|
||||
- inpromptu designs
|
||||
- video tutorials
|
||||
|
||||
prerequisites: >
|
||||
No formal prerequisites. For a successful attendance the course *Computergraphics* is recommended.
|
||||
|
||||
workload: "overall 150h comprising of 60h in-person training, 60h of self-study and 30h exam preperation and exam"
|
||||
|
||||
form-of-exam:
|
||||
spec: submitted project (70%) and oral exam (30% ~20min)
|
22
test/maacs/v2/3dcc/mod.yaml
Normal file
22
test/maacs/v2/3dcc/mod.yaml
Normal file
|
@ -0,0 +1,22 @@
|
|||
id: 3DCC
|
||||
|
||||
name: 3D Content Creation
|
||||
|
||||
instructor: Prof. Hartmut Seichter, PhD
|
||||
|
||||
form-of-instruction:
|
||||
- seminar: 2
|
||||
- exersise: 2
|
||||
|
||||
credits: 5
|
||||
|
||||
form-of-exam:
|
||||
type: alternative
|
||||
|
||||
duration: 1
|
||||
|
||||
author-of-indenture:
|
||||
|
||||
kind: elective
|
||||
|
||||
remarks:
|
15
test/maacs/v2/maacs.yaml
Normal file
15
test/maacs/v2/maacs.yaml
Normal file
|
@ -0,0 +1,15 @@
|
|||
# shortcode
|
||||
shortcode: maacs
|
||||
|
||||
# name
|
||||
name: Applied Computer Science (Master of Science)
|
||||
|
||||
# validation schema
|
||||
schema: schema.yaml
|
||||
|
||||
# languages (oder defines the order of overlay)
|
||||
languages: [de, en]
|
||||
|
||||
# courses
|
||||
courses:
|
||||
- 3dcc
|
130
test/maacs/v2/mod.cg.de.yaml
Normal file
130
test/maacs/v2/mod.cg.de.yaml
Normal file
|
@ -0,0 +1,130 @@
|
|||
name:
|
||||
de: Computergrafik
|
||||
en: Computer Graphics
|
||||
|
||||
instructor:
|
||||
de: Prof. Hartmut Seichter, PhD
|
||||
en: Prof. Hartmut Seichter, PhD
|
||||
|
||||
id:
|
||||
value: CG
|
||||
|
||||
credits:
|
||||
value: 5
|
||||
|
||||
|
||||
form-of-instruction:
|
||||
value: { 'lecture': 2, 'exersise': 1 }
|
||||
|
||||
term:
|
||||
value: 1
|
||||
|
||||
duration:
|
||||
value: 1
|
||||
|
||||
goal:
|
||||
de: |
|
||||
Computergrafik ist ein Schmelztiegel von Technologien in der Informatik mit dem Ziel visuelle
|
||||
Inhalte effizient zu generieren und dem Nutzer zu präsentieren. Studierende können den
|
||||
Zusammenhang von visuellen Technologien in der Informatik, den zugrunde liegenden mathematischen
|
||||
Konzepte und der Physiognomie des Menschen, insbesondere des Sehapparates herstellen.
|
||||
Sie können die Eigenschaften verschiedener Darstellungsformen und -techniken analysieren und
|
||||
bewerten. Sie lernen grundsätzliche Technologien der 3D Echtzeitdarstellung
|
||||
kennen und wenden diese an.
|
||||
en: |
|
||||
Computer graphics is describing all techniques in computer science
|
||||
generating images perceivable by humans. Participants will have a broad
|
||||
overview of techniques and concepts of computer graphics. They will be
|
||||
able to apply theoretical concepts in practice.
|
||||
|
||||
content:
|
||||
de: |
|
||||
* Grundkenntnisse der menschlichen Wahrnehmung
|
||||
* Grundkonzepte der Bilderzeugung, Speicherung und Transformation
|
||||
* Anwendungen von Computergrafik
|
||||
* Technologien zur Bilddarstellung
|
||||
* 3D Modelle, insbesondere Surface- und Volumemodelle
|
||||
* Transformationspipeline
|
||||
* Homogene Vektorräume und Transformationen
|
||||
* Szenengraphen und Echtzeit Rendering APIs
|
||||
* Bildsyntheseverfahren
|
||||
* Geometrie und Bild Samplingverfahren und Anti-Aliasing Strategien
|
||||
* Lichttransport, Physikalische Beleuchtungsmodelle
|
||||
* Texturierungsverfahren
|
||||
* Überblick Visualisierung
|
||||
* Graphische Nutzeroberflächen und Systeme
|
||||
en: |
|
||||
* Basics of human perception
|
||||
* Concepts of image storage and manipulation
|
||||
* Applications of computer graphics
|
||||
* Display sytems
|
||||
* 3D models,i.e. surface and volume models
|
||||
* Transformationspipeline
|
||||
* Homogenous vector spaces and transformations
|
||||
* Scenegraphs and rendering APIs
|
||||
* Methods for image-synthesis
|
||||
* Sampling in computer graphics
|
||||
* Light transport and shading models
|
||||
* Texturing
|
||||
* Overview visualizations
|
||||
* Graphical User Interfaces
|
||||
|
||||
teaching-material:
|
||||
de: |
|
||||
* H5P Lernmodule
|
||||
* Lernforum
|
||||
* Übungen
|
||||
* Folien
|
||||
* Auszug aus der Literaturliste:
|
||||
* Bar-Zeev, Avi. Scenegraphs: Past, Present and Future, 2003 http://www.realityprime.com/scenegraph.php
|
||||
* Burley, Brent. “Physically-Based Shading at Disney.” In ACM SIGGRAPH, 2012:1--7, 2012
|
||||
* Goldstein, E. Bruce. Sensation and Perception. 3rd ed. Belmont, Calif.: Wadsworth Pub. Co., 1989
|
||||
* Hughes, John F. Computer Graphics: Principles and Practice. Third edition. Upper Saddle River, New Jersey: Addison-Wesley, 2014
|
||||
* Shirley, Peter, and R. Keith Morley. Realistic Ray Tracing. 2. ed. Natick, Mass: A K Peters, 2003
|
||||
en: |
|
||||
* H5P learning modules
|
||||
* learning forum
|
||||
* exersises
|
||||
* slides and quizzes
|
||||
* Literature:
|
||||
* Bar-Zeev, Avi. Scenegraphs: Past, Present and Future, 2003 http://www.realityprime.com/scenegraph.php.
|
||||
* Burley, Brent. “Physically-Based Shading at Disney.” In ACM SIGGRAPH, 2012:1--7, 2012
|
||||
* Goldstein, E. Bruce. Sensation and Perception. 3rd ed. Belmont, Calif.: Wadsworth Pub. Co., 1989
|
||||
* Hughes, John F. Computer Graphics: Principles and Practice. Third edition. Upper Saddle River, New Jersey: Addison-Wesley, 2014
|
||||
* Shirley, Peter, and R. Keith Morley. Realistic Ray Tracing. 2. ed. Natick, Mass: A K Peters, 2003
|
||||
|
||||
prerequisites:
|
||||
de: >
|
||||
Formelle Voraussetzungen bestehen nicht.
|
||||
Für die erfolgreiche Teilnahme sollten Kenntnisse in linearer Algebra vorhanden sein.
|
||||
|
||||
en: >
|
||||
No formal prerequisites. For a successful participation attendees should have an understanding of linear algebra.
|
||||
|
||||
author-of-indenture:
|
||||
de: ""
|
||||
en: ""
|
||||
|
||||
used-in:
|
||||
de: "Master Applied Computerscience"
|
||||
en: "Master Applied Computerscience"
|
||||
|
||||
workload:
|
||||
de: "150h Insgesamt bestehend aus 90h Präsenz und 30h Prüfungsvorbereitung und Prüfung"
|
||||
en: "overall 150h with 90h in-person training and 30h exam preperation and exam"
|
||||
|
||||
form-of-exam:
|
||||
value: written
|
||||
spec:
|
||||
de: Klausur von 120min
|
||||
en: exam of 120min
|
||||
|
||||
frequency:
|
||||
value: once_per_year
|
||||
|
||||
kind:
|
||||
value: compulsory_elective
|
||||
|
||||
remarks:
|
||||
de:
|
||||
en:
|
130
test/maacs/v2/mod.cg.en.yaml
Normal file
130
test/maacs/v2/mod.cg.en.yaml
Normal file
|
@ -0,0 +1,130 @@
|
|||
name:
|
||||
de: Computergrafik
|
||||
en: Computer Graphics
|
||||
|
||||
instructor:
|
||||
de: Prof. Hartmut Seichter, PhD
|
||||
en: Prof. Hartmut Seichter, PhD
|
||||
|
||||
id:
|
||||
value: CG
|
||||
|
||||
credits:
|
||||
value: 5
|
||||
|
||||
|
||||
form-of-instruction:
|
||||
value: { 'lecture': 2, 'exersise': 1 }
|
||||
|
||||
term:
|
||||
value: 1
|
||||
|
||||
duration:
|
||||
value: 1
|
||||
|
||||
goal:
|
||||
de: |
|
||||
Computergrafik ist ein Schmelztiegel von Technologien in der Informatik mit dem Ziel visuelle
|
||||
Inhalte effizient zu generieren und dem Nutzer zu präsentieren. Studierende können den
|
||||
Zusammenhang von visuellen Technologien in der Informatik, den zugrunde liegenden mathematischen
|
||||
Konzepte und der Physiognomie des Menschen, insbesondere des Sehapparates herstellen.
|
||||
Sie können die Eigenschaften verschiedener Darstellungsformen und -techniken analysieren und
|
||||
bewerten. Sie lernen grundsätzliche Technologien der 3D Echtzeitdarstellung
|
||||
kennen und wenden diese an.
|
||||
en: |
|
||||
Computer graphics is describing all techniques in computer science
|
||||
generating images perceivable by humans. Participants will have a broad
|
||||
overview of techniques and concepts of computer graphics. They will be
|
||||
able to apply theoretical concepts in practice.
|
||||
|
||||
content:
|
||||
de: |
|
||||
* Grundkenntnisse der menschlichen Wahrnehmung
|
||||
* Grundkonzepte der Bilderzeugung, Speicherung und Transformation
|
||||
* Anwendungen von Computergrafik
|
||||
* Technologien zur Bilddarstellung
|
||||
* 3D Modelle, insbesondere Surface- und Volumemodelle
|
||||
* Transformationspipeline
|
||||
* Homogene Vektorräume und Transformationen
|
||||
* Szenengraphen und Echtzeit Rendering APIs
|
||||
* Bildsyntheseverfahren
|
||||
* Geometrie und Bild Samplingverfahren und Anti-Aliasing Strategien
|
||||
* Lichttransport, Physikalische Beleuchtungsmodelle
|
||||
* Texturierungsverfahren
|
||||
* Überblick Visualisierung
|
||||
* Graphische Nutzeroberflächen und Systeme
|
||||
en: |
|
||||
* Basics of human perception
|
||||
* Concepts of image storage and manipulation
|
||||
* Applications of computer graphics
|
||||
* Display sytems
|
||||
* 3D models,i.e. surface and volume models
|
||||
* Transformationspipeline
|
||||
* Homogenous vector spaces and transformations
|
||||
* Scenegraphs and rendering APIs
|
||||
* Methods for image-synthesis
|
||||
* Sampling in computer graphics
|
||||
* Light transport and shading models
|
||||
* Texturing
|
||||
* Overview visualizations
|
||||
* Graphical User Interfaces
|
||||
|
||||
teaching-material:
|
||||
de: |
|
||||
* H5P Lernmodule
|
||||
* Lernforum
|
||||
* Übungen
|
||||
* Folien
|
||||
* Auszug aus der Literaturliste:
|
||||
* Bar-Zeev, Avi. Scenegraphs: Past, Present and Future, 2003 http://www.realityprime.com/scenegraph.php
|
||||
* Burley, Brent. “Physically-Based Shading at Disney.” In ACM SIGGRAPH, 2012:1--7, 2012
|
||||
* Goldstein, E. Bruce. Sensation and Perception. 3rd ed. Belmont, Calif.: Wadsworth Pub. Co., 1989
|
||||
* Hughes, John F. Computer Graphics: Principles and Practice. Third edition. Upper Saddle River, New Jersey: Addison-Wesley, 2014
|
||||
* Shirley, Peter, and R. Keith Morley. Realistic Ray Tracing. 2. ed. Natick, Mass: A K Peters, 2003
|
||||
en: |
|
||||
* H5P learning modules
|
||||
* learning forum
|
||||
* exersises
|
||||
* slides and quizzes
|
||||
* Literature:
|
||||
* Bar-Zeev, Avi. Scenegraphs: Past, Present and Future, 2003 http://www.realityprime.com/scenegraph.php.
|
||||
* Burley, Brent. “Physically-Based Shading at Disney.” In ACM SIGGRAPH, 2012:1--7, 2012
|
||||
* Goldstein, E. Bruce. Sensation and Perception. 3rd ed. Belmont, Calif.: Wadsworth Pub. Co., 1989
|
||||
* Hughes, John F. Computer Graphics: Principles and Practice. Third edition. Upper Saddle River, New Jersey: Addison-Wesley, 2014
|
||||
* Shirley, Peter, and R. Keith Morley. Realistic Ray Tracing. 2. ed. Natick, Mass: A K Peters, 2003
|
||||
|
||||
prerequisites:
|
||||
de: >
|
||||
Formelle Voraussetzungen bestehen nicht.
|
||||
Für die erfolgreiche Teilnahme sollten Kenntnisse in linearer Algebra vorhanden sein.
|
||||
|
||||
en: >
|
||||
No formal prerequisites. For a successful participation attendees should have an understanding of linear algebra.
|
||||
|
||||
author-of-indenture:
|
||||
de: ""
|
||||
en: ""
|
||||
|
||||
used-in:
|
||||
de: "Master Applied Computerscience"
|
||||
en: "Master Applied Computerscience"
|
||||
|
||||
workload:
|
||||
de: "150h Insgesamt bestehend aus 90h Präsenz und 30h Prüfungsvorbereitung und Prüfung"
|
||||
en: "overall 150h with 90h in-person training and 30h exam preperation and exam"
|
||||
|
||||
form-of-exam:
|
||||
value: written
|
||||
spec:
|
||||
de: Klausur von 120min
|
||||
en: exam of 120min
|
||||
|
||||
frequency:
|
||||
value: once_per_year
|
||||
|
||||
kind:
|
||||
value: compulsory_elective
|
||||
|
||||
remarks:
|
||||
de:
|
||||
en:
|
104
test/maacs/v2/mod.interactsys.de.yaml
Normal file
104
test/maacs/v2/mod.interactsys.de.yaml
Normal file
|
@ -0,0 +1,104 @@
|
|||
name:
|
||||
de: Interactive Systems
|
||||
en: Interactive Systems
|
||||
|
||||
instructor:
|
||||
de: Prof. Hartmut Seichter, PhD
|
||||
en: Prof. Hartmut Seichter, PhD
|
||||
|
||||
id:
|
||||
value: InteractSys
|
||||
|
||||
form-of-instruction:
|
||||
value: { 'lecture': 2, 'exersise': 2 }
|
||||
|
||||
goal:
|
||||
de: |
|
||||
Studierende lernen vertieftes Wissen um grafische Nutzeroberflächen
|
||||
zu analysieren und informierte Designentscheidungen zu treffen.
|
||||
Dabei werden auch Grundlagen der Wahrnehmung vermittelt.
|
||||
Studierende entwickeln anhand von Prototypen anwendbares Wissen
|
||||
Interaktionen zu messen und anhand von wissenschaftlichen
|
||||
Methoden zu bewerten.
|
||||
|
||||
en: |
|
||||
Students acquire in-depth knowledge to analyse graphical user interfaces,
|
||||
analyse and make informed design decisions. Basics of perception are taught.
|
||||
Students develop applicable knowledge using prototypes to measure
|
||||
interactions and evaluate them using scientific methods.
|
||||
|
||||
content:
|
||||
de: |
|
||||
- Wahrnehmung
|
||||
- Visuelle Gestaltung von Graphischen Nutzerschnittstellen
|
||||
- Applikationsdesign mit Fokus auf GUI Konzepte
|
||||
- Nutzerstudien
|
||||
- Evaluierungsmethoden mit interaktiven visuellen Systemen
|
||||
en: |
|
||||
- Perception
|
||||
- Visual design of graphical user interfaces
|
||||
- Application design with a focus on GUI concepts
|
||||
- User studies
|
||||
- Evaluation methods with interactive visual systems
|
||||
|
||||
teaching-material:
|
||||
de: |
|
||||
- H5P Lernmodule, Lernforum und Übungen am PC
|
||||
- Auszug aus der Literaturliste:
|
||||
- Card, Stuart K., Thomas P. Moran, and Allen Newell. The Psychology of Human-Computer Interaction. Repr. Mahwah, NJ: Erlbaum, 2008.
|
||||
- Cooper, Alan. About Face: The Essentials of Interaction Design, 4th Edition. 4th edition. Indianapolis, IN: John Wiley and Sons, 2014.
|
||||
- Dix, Alan, Janet Finlay, Gregory D Abowd, and Russell Beale. Human-Computer Interaction. Pearson Education, 2003
|
||||
- Krug, Steve. Don’t Make Me Think, Revisited: A Common Sense Approach to Web Usability. Third edition. Berkeley, Calif.: New Riders, 2014.
|
||||
- Nielsen, Jakob. Usability Engineering. Boston: Academic Press, 1993.
|
||||
en: |
|
||||
- H5P learning modules, Q&A meetings and lab sessions
|
||||
- Excerpt from literature list:
|
||||
- Card, Stuart K., Thomas P. Moran, and Allen Newell. The Psychology of Human-Computer Interaction. Repr. Mahwah, NJ: Erlbaum, 2008.
|
||||
- Cooper, Alan. About Face: The Essentials of Interaction Design, 4th Edition. 4th edition. Indianapolis, IN: John Wiley and Sons, 2014.
|
||||
- Dix, Alan, Janet Finlay, Gregory D Abowd, and Russell Beale. Human-Computer Interaction. Pearson Education, 2003
|
||||
- Krug, Steve. Don’t Make Me Think, Revisited: A Common Sense Approach to Web Usability. Third edition. Berkeley, Calif.: New Riders, 2014.
|
||||
- Nielsen, Jakob. Usability Engineering. Boston: Academic Press, 1993.
|
||||
|
||||
prerequisites:
|
||||
de: >
|
||||
Formale Voraussetzung bestehen nicht.
|
||||
Für eine erfolgreiche Teilnahme sollten Kenntnisse in Statistik und Programmierung vorhanden sein.
|
||||
en: >
|
||||
No formal prerequisites. Knowledge in statistics and programming are advisable.
|
||||
|
||||
author-of-indenture:
|
||||
de:
|
||||
en:
|
||||
|
||||
used-in:
|
||||
de: "Master Applied Computerscience"
|
||||
en: "Master Applied Computerscience"
|
||||
|
||||
workload:
|
||||
de: "150h Insgesamt bestehend aus 60 Stunden Präsenzzeit, 60 Stunden Selbststudium, 30h Prüfung und Prüfungsvorbereitung"
|
||||
en: "overall 150h comprising of 60h in-person training, 60h of self-study and 30h exam preperation and exam"
|
||||
|
||||
credits:
|
||||
value: 5
|
||||
|
||||
form-of-exam:
|
||||
value: alternative
|
||||
spec:
|
||||
de: abzugebende Projektarbeit (80%) und Dokumentation (20%)
|
||||
en: submitted project (80%) and documentation (20%)
|
||||
|
||||
term:
|
||||
value: 3
|
||||
|
||||
frequency:
|
||||
value: once_per_year
|
||||
|
||||
duration:
|
||||
value: 1
|
||||
|
||||
kind:
|
||||
value: compulsory_elective
|
||||
|
||||
remarks:
|
||||
de:
|
||||
en:
|
104
test/maacs/v2/mod.interactsys.en.yaml
Normal file
104
test/maacs/v2/mod.interactsys.en.yaml
Normal file
|
@ -0,0 +1,104 @@
|
|||
name:
|
||||
de: Interactive Systems
|
||||
en: Interactive Systems
|
||||
|
||||
instructor:
|
||||
de: Prof. Hartmut Seichter, PhD
|
||||
en: Prof. Hartmut Seichter, PhD
|
||||
|
||||
id:
|
||||
value: InteractSys
|
||||
|
||||
form-of-instruction:
|
||||
value: { 'lecture': 2, 'exersise': 2 }
|
||||
|
||||
goal:
|
||||
de: |
|
||||
Studierende lernen vertieftes Wissen um grafische Nutzeroberflächen
|
||||
zu analysieren und informierte Designentscheidungen zu treffen.
|
||||
Dabei werden auch Grundlagen der Wahrnehmung vermittelt.
|
||||
Studierende entwickeln anhand von Prototypen anwendbares Wissen
|
||||
Interaktionen zu messen und anhand von wissenschaftlichen
|
||||
Methoden zu bewerten.
|
||||
|
||||
en: |
|
||||
Students acquire in-depth knowledge to analyse graphical user interfaces,
|
||||
analyse and make informed design decisions. Basics of perception are taught.
|
||||
Students develop applicable knowledge using prototypes to measure
|
||||
interactions and evaluate them using scientific methods.
|
||||
|
||||
content:
|
||||
de: |
|
||||
- Wahrnehmung
|
||||
- Visuelle Gestaltung von Graphischen Nutzerschnittstellen
|
||||
- Applikationsdesign mit Fokus auf GUI Konzepte
|
||||
- Nutzerstudien
|
||||
- Evaluierungsmethoden mit interaktiven visuellen Systemen
|
||||
en: |
|
||||
- Perception
|
||||
- Visual design of graphical user interfaces
|
||||
- Application design with a focus on GUI concepts
|
||||
- User studies
|
||||
- Evaluation methods with interactive visual systems
|
||||
|
||||
teaching-material:
|
||||
de: |
|
||||
- H5P Lernmodule, Lernforum und Übungen am PC
|
||||
- Auszug aus der Literaturliste:
|
||||
- Card, Stuart K., Thomas P. Moran, and Allen Newell. The Psychology of Human-Computer Interaction. Repr. Mahwah, NJ: Erlbaum, 2008.
|
||||
- Cooper, Alan. About Face: The Essentials of Interaction Design, 4th Edition. 4th edition. Indianapolis, IN: John Wiley and Sons, 2014.
|
||||
- Dix, Alan, Janet Finlay, Gregory D Abowd, and Russell Beale. Human-Computer Interaction. Pearson Education, 2003
|
||||
- Krug, Steve. Don’t Make Me Think, Revisited: A Common Sense Approach to Web Usability. Third edition. Berkeley, Calif.: New Riders, 2014.
|
||||
- Nielsen, Jakob. Usability Engineering. Boston: Academic Press, 1993.
|
||||
en: |
|
||||
- H5P learning modules, Q&A meetings and lab sessions
|
||||
- Excerpt from literature list:
|
||||
- Card, Stuart K., Thomas P. Moran, and Allen Newell. The Psychology of Human-Computer Interaction. Repr. Mahwah, NJ: Erlbaum, 2008.
|
||||
- Cooper, Alan. About Face: The Essentials of Interaction Design, 4th Edition. 4th edition. Indianapolis, IN: John Wiley and Sons, 2014.
|
||||
- Dix, Alan, Janet Finlay, Gregory D Abowd, and Russell Beale. Human-Computer Interaction. Pearson Education, 2003
|
||||
- Krug, Steve. Don’t Make Me Think, Revisited: A Common Sense Approach to Web Usability. Third edition. Berkeley, Calif.: New Riders, 2014.
|
||||
- Nielsen, Jakob. Usability Engineering. Boston: Academic Press, 1993.
|
||||
|
||||
prerequisites:
|
||||
de: >
|
||||
Formale Voraussetzung bestehen nicht.
|
||||
Für eine erfolgreiche Teilnahme sollten Kenntnisse in Statistik und Programmierung vorhanden sein.
|
||||
en: >
|
||||
No formal prerequisites. Knowledge in statistics and programming are advisable.
|
||||
|
||||
author-of-indenture:
|
||||
de:
|
||||
en:
|
||||
|
||||
used-in:
|
||||
de: "Master Applied Computerscience"
|
||||
en: "Master Applied Computerscience"
|
||||
|
||||
workload:
|
||||
de: "150h Insgesamt bestehend aus 60 Stunden Präsenzzeit, 60 Stunden Selbststudium, 30h Prüfung und Prüfungsvorbereitung"
|
||||
en: "overall 150h comprising of 60h in-person training, 60h of self-study and 30h exam preperation and exam"
|
||||
|
||||
credits:
|
||||
value: 5
|
||||
|
||||
form-of-exam:
|
||||
value: alternative
|
||||
spec:
|
||||
de: abzugebende Projektarbeit (80%) und Dokumentation (20%)
|
||||
en: submitted project (80%) and documentation (20%)
|
||||
|
||||
term:
|
||||
value: 3
|
||||
|
||||
frequency:
|
||||
value: once_per_year
|
||||
|
||||
duration:
|
||||
value: 1
|
||||
|
||||
kind:
|
||||
value: compulsory_elective
|
||||
|
||||
remarks:
|
||||
de:
|
||||
en:
|
112
test/maacs/v2/mod.virtaugenv.de.yaml
Normal file
112
test/maacs/v2/mod.virtaugenv.de.yaml
Normal file
|
@ -0,0 +1,112 @@
|
|||
name:
|
||||
de: Virtual and Augmented Environments
|
||||
en: Virtual and Augmented Environments
|
||||
|
||||
instructor:
|
||||
de: Prof. Hartmut Seichter, PhD
|
||||
en: Prof. Hartmut Seichter, PhD
|
||||
|
||||
id:
|
||||
value: VirtAugEnv
|
||||
|
||||
form-of-instruction:
|
||||
value: { 'seminar': 2, 'exersise': 2 }
|
||||
|
||||
goal:
|
||||
de: >
|
||||
Studierende beschäftigen sich tiefgreifend mit Technologien der
|
||||
Mixed, Augmented und Virtual Reality. Es werden der Stand
|
||||
der Technik im Seminar detailliert erörtert und es werden wissenschaftliche
|
||||
Diskussionen um die jeweiligen Technologien geführt. Anhand von heutigen
|
||||
VR/AR und MR Technologien setzen sich die Teilnehmer mit dem Stand der
|
||||
Technik und den Möglichkeiten der Umsetzung von immersiven
|
||||
Medienprodukten auseinander.
|
||||
|
||||
en:
|
||||
Students acquire in depth knowledge with technologies of Mixed,
|
||||
Augmented and Virtual Reality. The state of the art is discussed in detail
|
||||
in this seminar. Using today's VR/AR and MR technologies
|
||||
the participants will implement a prototype to learn about the possibilities of
|
||||
current immersive media products.
|
||||
|
||||
content:
|
||||
de: |
|
||||
- Tracking Technologien
|
||||
- Display Technologien in VR und AR
|
||||
- Interaktionsgeräte
|
||||
- Interaktionstechniken
|
||||
- Echtzeitrendering-Methoden
|
||||
- Stereorendering
|
||||
- Compositing
|
||||
- Evaluierungsmethoden in VR/AR
|
||||
- Human Factors in VR/AR
|
||||
en: |
|
||||
* tracking technolgies
|
||||
* display technologies in VR and AR
|
||||
* interaction devices
|
||||
* interaction techniques
|
||||
* realtime rendering methods
|
||||
* stereo rendering
|
||||
* compositing
|
||||
* UX and evaluation methods in VR/AR
|
||||
* human factors in VR/AR
|
||||
|
||||
teaching-material:
|
||||
de: |
|
||||
- Folien, Vorlesungen, Vorträge
|
||||
- Auszug aus der Literaturliste:
|
||||
- Drummond, T., and R. Cipolla. “Real-Time Visual Tracking of Complex Structures.” IEEE Transactions on Pattern Analysis and Machine Intelligence 24, no. 7 (July 2002): 932-46. https://doi.org/10.1109/TPAMI.2002.1017620.
|
||||
- LaViola, Joseph J., Ernst Kruijff, Ryan P. McMahan, Doug A. Bowman, and Ivan Poupyrev. 3D User Interfaces: Theory and Practice. Second edition. Addison-Wesley Usability and HCI Series. Boston: Addison-Wesley, 2017\.
|
||||
- Stanney, Kay, Cali Fidopiastis, and Linda Foster. “Virtual Reality Is Sexist: But It Does Not Have to Be.” Frontiers in Robotics and AI 7 (January 31, 2020). https://doi.org/10.3389/frobt.2020.00004.
|
||||
- Wloka, Mathias M. “Interacting with Virtual Reality.” In In Virtual Environments and Product Development Processes, edited by J. Rix, S. Haas, and J. Teixeira. Chapman and Hall, 1995\.
|
||||
|
||||
en: |
|
||||
* slides, lecture, impulse talks
|
||||
* excerpt of the literature list:
|
||||
* Drummond, T., and R. Cipolla. “Real-Time Visual Tracking of Complex Structures.” IEEE Transactions on Pattern Analysis and Machine Intelligence 24, no. 7 (July 2002): 932-46. https://doi.org/10.1109/TPAMI.2002.1017620.
|
||||
* LaViola, Joseph J., Ernst Kruijff, Ryan P. McMahan, Doug A. Bowman, and Ivan Poupyrev. 3D User Interfaces: Theory and Practice. Second edition. Addison-Wesley Usability and HCI Series. Boston: Addison-Wesley, 2017.
|
||||
* Stanney, Kay, Cali Fidopiastis, and Linda Foster. “Virtual Reality Is Sexist: But It Does Not Have to Be.” Frontiers in Robotics and AI 7 (January 31, 2020). https://doi.org/10.3389/frobt.2020.00004.
|
||||
* Wloka, Mathias M. "Interacting with Virtual Reality." In In Virtual Environments and Product Development Processes, edited by J. Rix, S. Haas, and J. Teixeira. Chapman and Hall, 199\.
|
||||
|
||||
prerequisites:
|
||||
de: >
|
||||
Formale Voraussetzung bestehen nicht. Für eine erfolgreiche Teilnahme sollte das Modul Computergrafik im Vorfeld belegt werden.
|
||||
en: >
|
||||
No formal prerequisites. For a successful attendance, knowledge of the topics covered in the module Computergraphics is required.
|
||||
|
||||
author-of-indenture:
|
||||
de:
|
||||
en:
|
||||
|
||||
used-in:
|
||||
de: "Master Applied Computerscience"
|
||||
en: "Master Applied Computerscience"
|
||||
|
||||
workload:
|
||||
de: "150h Insgesamt bestehend aus 60 Stunden Präsenzzeit, 90 Stunden Selbststudium und Projektbearbeitung"
|
||||
en: "overall 150h comprising of 60h in-person training, 90h of self-study and project preperation"
|
||||
|
||||
credits:
|
||||
value: 5
|
||||
|
||||
form-of-exam:
|
||||
value: alternative
|
||||
spec:
|
||||
de: abzugebende Projektarbeit (80%) und Dokumentation (20%)
|
||||
en: submitted project (80%) and documentation (20%)
|
||||
|
||||
term:
|
||||
value: 3
|
||||
|
||||
frequency:
|
||||
value: once_per_year
|
||||
|
||||
duration:
|
||||
value: 1
|
||||
|
||||
kind:
|
||||
value: compulsory_elective
|
||||
|
||||
remarks:
|
||||
de:
|
||||
en:
|
112
test/maacs/v2/mod.virtaugenv.en.yaml
Normal file
112
test/maacs/v2/mod.virtaugenv.en.yaml
Normal file
|
@ -0,0 +1,112 @@
|
|||
name:
|
||||
de: Virtual and Augmented Environments
|
||||
en: Virtual and Augmented Environments
|
||||
|
||||
instructor:
|
||||
de: Prof. Hartmut Seichter, PhD
|
||||
en: Prof. Hartmut Seichter, PhD
|
||||
|
||||
id:
|
||||
value: VirtAugEnv
|
||||
|
||||
form-of-instruction:
|
||||
value: { 'seminar': 2, 'exersise': 2 }
|
||||
|
||||
goal:
|
||||
de: >
|
||||
Studierende beschäftigen sich tiefgreifend mit Technologien der
|
||||
Mixed, Augmented und Virtual Reality. Es werden der Stand
|
||||
der Technik im Seminar detailliert erörtert und es werden wissenschaftliche
|
||||
Diskussionen um die jeweiligen Technologien geführt. Anhand von heutigen
|
||||
VR/AR und MR Technologien setzen sich die Teilnehmer mit dem Stand der
|
||||
Technik und den Möglichkeiten der Umsetzung von immersiven
|
||||
Medienprodukten auseinander.
|
||||
|
||||
en:
|
||||
Students acquire in depth knowledge with technologies of Mixed,
|
||||
Augmented and Virtual Reality. The state of the art is discussed in detail
|
||||
in this seminar. Using today's VR/AR and MR technologies
|
||||
the participants will implement a prototype to learn about the possibilities of
|
||||
current immersive media products.
|
||||
|
||||
content:
|
||||
de: |
|
||||
- Tracking Technologien
|
||||
- Display Technologien in VR und AR
|
||||
- Interaktionsgeräte
|
||||
- Interaktionstechniken
|
||||
- Echtzeitrendering-Methoden
|
||||
- Stereorendering
|
||||
- Compositing
|
||||
- Evaluierungsmethoden in VR/AR
|
||||
- Human Factors in VR/AR
|
||||
en: |
|
||||
* tracking technolgies
|
||||
* display technologies in VR and AR
|
||||
* interaction devices
|
||||
* interaction techniques
|
||||
* realtime rendering methods
|
||||
* stereo rendering
|
||||
* compositing
|
||||
* UX and evaluation methods in VR/AR
|
||||
* human factors in VR/AR
|
||||
|
||||
teaching-material:
|
||||
de: |
|
||||
- Folien, Vorlesungen, Vorträge
|
||||
- Auszug aus der Literaturliste:
|
||||
- Drummond, T., and R. Cipolla. “Real-Time Visual Tracking of Complex Structures.” IEEE Transactions on Pattern Analysis and Machine Intelligence 24, no. 7 (July 2002): 932-46. https://doi.org/10.1109/TPAMI.2002.1017620.
|
||||
- LaViola, Joseph J., Ernst Kruijff, Ryan P. McMahan, Doug A. Bowman, and Ivan Poupyrev. 3D User Interfaces: Theory and Practice. Second edition. Addison-Wesley Usability and HCI Series. Boston: Addison-Wesley, 2017\.
|
||||
- Stanney, Kay, Cali Fidopiastis, and Linda Foster. “Virtual Reality Is Sexist: But It Does Not Have to Be.” Frontiers in Robotics and AI 7 (January 31, 2020). https://doi.org/10.3389/frobt.2020.00004.
|
||||
- Wloka, Mathias M. “Interacting with Virtual Reality.” In In Virtual Environments and Product Development Processes, edited by J. Rix, S. Haas, and J. Teixeira. Chapman and Hall, 1995\.
|
||||
|
||||
en: |
|
||||
* slides, lecture, impulse talks
|
||||
* excerpt of the literature list:
|
||||
* Drummond, T., and R. Cipolla. “Real-Time Visual Tracking of Complex Structures.” IEEE Transactions on Pattern Analysis and Machine Intelligence 24, no. 7 (July 2002): 932-46. https://doi.org/10.1109/TPAMI.2002.1017620.
|
||||
* LaViola, Joseph J., Ernst Kruijff, Ryan P. McMahan, Doug A. Bowman, and Ivan Poupyrev. 3D User Interfaces: Theory and Practice. Second edition. Addison-Wesley Usability and HCI Series. Boston: Addison-Wesley, 2017.
|
||||
* Stanney, Kay, Cali Fidopiastis, and Linda Foster. “Virtual Reality Is Sexist: But It Does Not Have to Be.” Frontiers in Robotics and AI 7 (January 31, 2020). https://doi.org/10.3389/frobt.2020.00004.
|
||||
* Wloka, Mathias M. "Interacting with Virtual Reality." In In Virtual Environments and Product Development Processes, edited by J. Rix, S. Haas, and J. Teixeira. Chapman and Hall, 199\.
|
||||
|
||||
prerequisites:
|
||||
de: >
|
||||
Formale Voraussetzung bestehen nicht. Für eine erfolgreiche Teilnahme sollte das Modul Computergrafik im Vorfeld belegt werden.
|
||||
en: >
|
||||
No formal prerequisites. For a successful attendance, knowledge of the topics covered in the module Computergraphics is required.
|
||||
|
||||
author-of-indenture:
|
||||
de:
|
||||
en:
|
||||
|
||||
used-in:
|
||||
de: "Master Applied Computerscience"
|
||||
en: "Master Applied Computerscience"
|
||||
|
||||
workload:
|
||||
de: "150h Insgesamt bestehend aus 60 Stunden Präsenzzeit, 90 Stunden Selbststudium und Projektbearbeitung"
|
||||
en: "overall 150h comprising of 60h in-person training, 90h of self-study and project preperation"
|
||||
|
||||
credits:
|
||||
value: 5
|
||||
|
||||
form-of-exam:
|
||||
value: alternative
|
||||
spec:
|
||||
de: abzugebende Projektarbeit (80%) und Dokumentation (20%)
|
||||
en: submitted project (80%) and documentation (20%)
|
||||
|
||||
term:
|
||||
value: 3
|
||||
|
||||
frequency:
|
||||
value: once_per_year
|
||||
|
||||
duration:
|
||||
value: 1
|
||||
|
||||
kind:
|
||||
value: compulsory_elective
|
||||
|
||||
remarks:
|
||||
de:
|
||||
en:
|
239
test/maacs/v2/schema.yaml
Normal file
239
test/maacs/v2/schema.yaml
Normal file
|
@ -0,0 +1,239 @@
|
|||
facets: ["de", "en"]
|
||||
|
||||
templates:
|
||||
name:
|
||||
de: Modulname {value}
|
||||
en: name of course {value}
|
||||
|
||||
fields:
|
||||
#
|
||||
# Kürzel / ID
|
||||
#
|
||||
id:
|
||||
type: str
|
||||
translatable: false
|
||||
label: { de: "Kürzel", en: "code" }
|
||||
#
|
||||
# Modulname
|
||||
#
|
||||
name:
|
||||
type: str
|
||||
label:
|
||||
de: "Modulname"
|
||||
en: "name of course"
|
||||
|
||||
#
|
||||
# Modulverantwortliche:r
|
||||
#
|
||||
instructor:
|
||||
type: str
|
||||
label:
|
||||
de: "Modulverantwortlicher / Modulverantwortliche"
|
||||
en: "module instructor"
|
||||
|
||||
#
|
||||
# Qualifikationsziele
|
||||
#
|
||||
|
||||
# Welche fachbezogenen, methodischen, fachübergreifende Kompetenzen,
|
||||
# Schlüsselqualifikationen - werden erzielt (erworben)? Diese sind
|
||||
# an der zu definierenden Gesamtqualifikation (angestrebter Abschluss) auszurichten.
|
||||
#
|
||||
# Lernergebnisse sind Aussagen darüber, was ein Studierender nach Abschluss des Moduls weiß,
|
||||
# versteht und in der Lage ist zu tun. Die Formulierung sollte sich am Qualifikationsrahmen
|
||||
# für Deutsche Hochschulabschlüsse orientieren und Inhaltswiederholungen vermeiden.
|
||||
#
|
||||
# Des Weiteren finden Sie im QM-Portal die „Handreichung zur Beschreibung von Lernzielen“
|
||||
# als Formulierungshilfe.
|
||||
|
||||
goal:
|
||||
type: str
|
||||
label: { de: "Qualifikationsziele", en: "educational goal" }
|
||||
|
||||
#
|
||||
# Modulinhalte
|
||||
#
|
||||
|
||||
# Welche fachlichen, methodischen, fachpraktischen und fächerübergreifenden
|
||||
# Inhalte sollen vermittelt werden?
|
||||
#
|
||||
# Es ist ein stichpunktartiges Inhaltsverzeichnis zu erstellen.
|
||||
|
||||
content:
|
||||
type: str
|
||||
label: { de: "Modulinhalte", en: "content" }
|
||||
|
||||
#
|
||||
# Lehrform
|
||||
#
|
||||
|
||||
#
|
||||
# Welche Lehr- und Lernformen werden angewendet?
|
||||
# (Vorlesungen, Übungen, Seminare, Praktika,
|
||||
# Projektarbeit, Selbststudium)
|
||||
#
|
||||
# Es sind nur Werte aus der Prüfungsordung zugelassen
|
||||
#
|
||||
form-of-instruction:
|
||||
type: multikey
|
||||
label: { de: "Lehrform(en)", en: "form of instruction" }
|
||||
keys:
|
||||
{
|
||||
"lecture": { de: "Vorlesung", en: "lecture" },
|
||||
"lecture_seminar":
|
||||
{
|
||||
de: "Seminaristische Vorlesung",
|
||||
en: "lecture and seminar",
|
||||
},
|
||||
"seminar": { de: "Seminar", en: "seminar" },
|
||||
"exersise": { de: "Übung", en: "lab exersise" },
|
||||
"pc_lab":
|
||||
{ de: "Rechnergestütztes Praktikum", en: "PC exersise" },
|
||||
"project": { de: "Project", en: "project" },
|
||||
}
|
||||
template:
|
||||
de: "{key} ({value}SWS)"
|
||||
en: "{key} ({value}SWS)"
|
||||
|
||||
#
|
||||
# Voraussetzungen für die Teilnahme
|
||||
#
|
||||
|
||||
# Für jedes Modul sind die Voraussetzungen für die Teilnahme zu beschreiben.
|
||||
# Welche Kenntnisse, Fähigkeiten und Fertigkeiten sind für eine
|
||||
# erfolgreiche Teilnahme vorauszusetzen?
|
||||
#
|
||||
# Alternativ können die Module benannt werden welche für die erfolgreiche
|
||||
# Teilnahme im Vorfeld zu belegen sind.
|
||||
|
||||
prerequisites:
|
||||
type: str
|
||||
label: { de: "Voraussetzungen für die Teilnahme", en: "prerequisites" }
|
||||
|
||||
#
|
||||
# Literatur und multimediale Lehr- und Lernprogramme
|
||||
#
|
||||
#
|
||||
# Wie können die Studierenden sich auf die Teilnahme an diesem Modul vorbereiten?
|
||||
#
|
||||
teaching-material:
|
||||
type: str
|
||||
label:
|
||||
{
|
||||
de: "Literatur und multimediale Lehr- und Lernprogramme",
|
||||
en: "media of instruction",
|
||||
}
|
||||
|
||||
#
|
||||
# Lehrbriefautor
|
||||
#
|
||||
author-of-indenture:
|
||||
type: str
|
||||
label: { de: "Lehrbriefautor", en: "author of indenture" }
|
||||
|
||||
#
|
||||
# Verwendung in (Studienprogramm)
|
||||
#
|
||||
# used-in:
|
||||
# type: str
|
||||
# label: { de: "Verwendung", en: "used in study programs" }
|
||||
|
||||
#
|
||||
# Arbeitsaufwand
|
||||
#
|
||||
workload:
|
||||
type: str
|
||||
label: { de: "Arbeitsaufwand / Gesamtworkload", en: "workload" }
|
||||
#
|
||||
# credits/ECTS
|
||||
#
|
||||
credits:
|
||||
type: num
|
||||
unit: ECTS
|
||||
label:
|
||||
{
|
||||
en: "credits and weight of mark",
|
||||
de: "Kreditpunkte und Gewichtung der Note in der Gesamtnote",
|
||||
}
|
||||
template:
|
||||
de: "{value}CP, Gewichtung: {value}CP von 120CP "
|
||||
en: "{value}CP, weight: {value} / 120 "
|
||||
|
||||
#
|
||||
# Leistungsnachweis
|
||||
#
|
||||
form-of-exam:
|
||||
type: enum
|
||||
label: { de: "Leistungsnachweis", en: "form of examination" }
|
||||
values:
|
||||
{
|
||||
"written": { de: "Schriftliche Prüfung", en: "written exam" },
|
||||
"oral": { de: "Mündliche Prüfung", en: "oral exam" },
|
||||
"alternative":
|
||||
{
|
||||
de: "Alternative Prüfungunsleistung",
|
||||
en: "alternative examination",
|
||||
},
|
||||
}
|
||||
spec: true
|
||||
template:
|
||||
de: "{value} ({spec})"
|
||||
en: "{value} ({spec})"
|
||||
|
||||
#
|
||||
# Semester
|
||||
#
|
||||
# term:
|
||||
# type: multinum
|
||||
# label: { de: "Semester", en: "term" }
|
||||
# template:
|
||||
# de: "{value}\\. Semester"
|
||||
# en: "{value}\\. semester"
|
||||
|
||||
#
|
||||
# Häufigkeit des Angebots
|
||||
#
|
||||
# frequency:
|
||||
# type: enum
|
||||
# label: { de: "Häufigkeit des Angebots", en: "frequency of Offer" }
|
||||
# values:
|
||||
# {
|
||||
# "once_per_term": { de: "jedes Semester", en: "every semester" },
|
||||
# "once_per_year":
|
||||
# { de: "einmal im Studienjahr", en: "once per study year" },
|
||||
# }
|
||||
|
||||
#
|
||||
# Dauer des Angebots
|
||||
#
|
||||
# duration:
|
||||
# type: int
|
||||
# label:
|
||||
# de: Dauer
|
||||
# en: duration
|
||||
# template:
|
||||
# de: "{value} Semester"
|
||||
# en: "{value} term(s)"
|
||||
|
||||
#
|
||||
# Art der Veranstaltung
|
||||
#
|
||||
# kind:
|
||||
# type: enum
|
||||
# label:
|
||||
# {
|
||||
# de: "Art der Veranstaltung (Pflicht, Wahl, etc.)",
|
||||
# en: "kind of module (compulsory, elective)",
|
||||
# }
|
||||
# values:
|
||||
# {
|
||||
# "compulsory": { de: "Pflicht", en: "compulsory" },
|
||||
# "elective": { de: "Wahl/Wahlpflicht", en: "elective" },
|
||||
# }
|
||||
|
||||
#
|
||||
# Freiform Bemerkungen
|
||||
#
|
||||
remarks:
|
||||
type: str
|
||||
label: { de: "Besonderes", en: "remarks" }
|
|
@ -2,6 +2,9 @@ name:
|
|||
de: Computergrafik
|
||||
en: Computer Graphics
|
||||
|
||||
instructor:
|
||||
de: Prof. Hartmut Seichter, PhD
|
||||
en: Prof. Hartmut Seichter, PhD
|
||||
|
||||
id:
|
||||
value: CG
|
106
test/mod.test.yaml
Normal file
106
test/mod.test.yaml
Normal file
|
@ -0,0 +1,106 @@
|
|||
name:
|
||||
de: Test Vorlesung
|
||||
en: Lecture of Test
|
||||
|
||||
instructor:
|
||||
de: Cicero
|
||||
en: Cicero
|
||||
|
||||
id:
|
||||
value: Test
|
||||
|
||||
credits:
|
||||
value: 5
|
||||
|
||||
form-of-exam:
|
||||
value: written
|
||||
|
||||
form-of-instruction:
|
||||
value: { 'lecture': 2, 'exersise': 1 }
|
||||
|
||||
term:
|
||||
value: [1, 3]
|
||||
|
||||
duration:
|
||||
value: 1
|
||||
|
||||
kind:
|
||||
value: compulsory
|
||||
|
||||
goal:
|
||||
de: |
|
||||
**What is it**
|
||||
|
||||
Lorem Ipsum is simply dummy text of the printing and typesetting
|
||||
industry. Lorem Ipsum has been the industry's standard dummy text
|
||||
ever since the 1500s, when an unknown printer took a galley of type
|
||||
and scrambled it to make a type specimen book. It has survived not only
|
||||
five centuries, but also the leap into electronic typesetting, remaining
|
||||
essentially unchanged. It was popularised in the 1960s with the release
|
||||
of Letraset sheets containing Lorem Ipsum passages, and more recently with
|
||||
desktop publishing software like Aldus PageMaker including versions of
|
||||
Lorem Ipsum.
|
||||
|
||||
|
||||
|
||||
en: |
|
||||
|
||||
|
||||
content:
|
||||
de: |
|
||||
**Where did it come from**
|
||||
|
||||
Contrary to popular belief, Lorem Ipsum is not simply random text.
|
||||
It has roots in a piece of classical Latin literature from 45 BC,
|
||||
making it over 2000 years old. Richard McClintock, a Latin professor
|
||||
at Hampden-Sydney College in Virginia, looked up one of the more
|
||||
obscure Latin words, consectetur, from a Lorem Ipsum passage, and
|
||||
going through the cites of the word in classical literature,
|
||||
discovered the undoubtable source. Lorem Ipsum comes from sections
|
||||
1.10.32 and 1.10.33 of "de Finibus Bonorum et Malorum" (The
|
||||
Extremes of Good and Evil) by Cicero, written in 45 BC. This book
|
||||
is a treatise on the theory of ethics, very popular during the
|
||||
Renaissance. The first line of Lorem Ipsum, "Lorem ipsum dolor
|
||||
sit amet..", comes from a line in section 1.10.32.
|
||||
|
||||
|
||||
en: |
|
||||
|
||||
|
||||
teaching-material:
|
||||
de: |
|
||||
|
||||
en: |
|
||||
|
||||
|
||||
prerequisites:
|
||||
de: ""
|
||||
en: ""
|
||||
|
||||
author-of-indenture:
|
||||
de: ""
|
||||
en: ""
|
||||
|
||||
used-in:
|
||||
de: "Master Applied Computerscience"
|
||||
en: "Master Applied Computerscience"
|
||||
|
||||
workload:
|
||||
de: "2SWS Vorlesung 1SWS Übung"
|
||||
en: "2SWS lecture 1SWS exersise"
|
||||
|
||||
form-of-exam:
|
||||
value: written
|
||||
spec:
|
||||
de: "120min Klausur"
|
||||
en: "120min exam"
|
||||
|
||||
frequency:
|
||||
value: once_per_year
|
||||
|
||||
kind:
|
||||
value: compulsory
|
||||
|
||||
remarks:
|
||||
de:
|
||||
en:
|
228
test/schema.yaml
Normal file
228
test/schema.yaml
Normal file
|
@ -0,0 +1,228 @@
|
|||
# fields in curricular description
|
||||
# leaning on methods in OpenAPI 3.0
|
||||
|
||||
#
|
||||
# Modulname
|
||||
#
|
||||
name:
|
||||
type: str
|
||||
label:
|
||||
de: "Modulname"
|
||||
en: "name of course"
|
||||
|
||||
#
|
||||
# Modulverantwortliche:r
|
||||
#
|
||||
instructor:
|
||||
type: str
|
||||
label:
|
||||
de: "Modulverantwortlicher / Modulverantwortliche"
|
||||
en: "module instructor"
|
||||
|
||||
#
|
||||
# Kürzel / ID
|
||||
#
|
||||
id:
|
||||
type: str
|
||||
translatable: false
|
||||
label: { de: "Kürzel", en: "code" }
|
||||
|
||||
#
|
||||
# Qualifikationsziele
|
||||
#
|
||||
|
||||
# Welche fachbezogenen, methodischen, fachübergreifende Kompetenzen,
|
||||
# Schlüsselqualifikationen - werden erzielt (erworben)? Diese sind
|
||||
# an der zu definierenden Gesamtqualifikation (angestrebter Abschluss) auszurichten.
|
||||
#
|
||||
# Lernergebnisse sind Aussagen darüber, was ein Studierender nach Abschluss des Moduls weiß,
|
||||
# versteht und in der Lage ist zu tun. Die Formulierung sollte sich am Qualifikationsrahmen
|
||||
# für Deutsche Hochschulabschlüsse orientieren und Inhaltswiederholungen vermeiden.
|
||||
#
|
||||
# Des Weiteren finden Sie im QM-Portal die „Handreichung zur Beschreibung von Lernzielen“
|
||||
# als Formulierungshilfe.
|
||||
|
||||
goal:
|
||||
type: str
|
||||
label: { de: "Qualifikationsziele", en: "educational goal" }
|
||||
|
||||
#
|
||||
# Modulinhalte
|
||||
#
|
||||
|
||||
# Welche fachlichen, methodischen, fachpraktischen und fächerübergreifenden
|
||||
# Inhalte sollen vermittelt werden?
|
||||
#
|
||||
# Es ist ein stichpunktartiges Inhaltsverzeichnis zu erstellen.
|
||||
|
||||
content:
|
||||
type: str
|
||||
label: { de: "Modulinhalte", en: "content" }
|
||||
|
||||
#
|
||||
# Lehrform
|
||||
#
|
||||
|
||||
#
|
||||
# Welche Lehr- und Lernformen werden angewendet?
|
||||
# (Vorlesungen, Übungen, Seminare, Praktika,
|
||||
# Projektarbeit, Selbststudium)
|
||||
#
|
||||
# Es sind nur Werte aus der Prüfungsordung zugelassen
|
||||
#
|
||||
form-of-instruction:
|
||||
type: multikey
|
||||
label: { de: "Lehrform(en)", en: "form of instruction" }
|
||||
keys:
|
||||
{
|
||||
"lecture": { de: "Vorlesung", en: "lecture" },
|
||||
"lecture_seminar":
|
||||
{ de: "Seminaristische Vorlesung", en: "lecture and seminar" },
|
||||
"seminar": { de: "Seminar", en: "seminar" },
|
||||
"exersise": { de: "Übung", en: "lab exersise" },
|
||||
"pc_lab": { de: "Rechnergestütztes Praktikum", en: "PC exersise" },
|
||||
"project": { de: "Project", en: "project" },
|
||||
}
|
||||
template:
|
||||
de: "{key} ({value}SWS)"
|
||||
en: "{key} ({value}SWS)"
|
||||
|
||||
#
|
||||
# Voraussetzungen für die Teilnahme
|
||||
#
|
||||
|
||||
# Für jedes Modul sind die Voraussetzungen für die Teilnahme zu beschreiben.
|
||||
# Welche Kenntnisse, Fähigkeiten und Fertigkeiten sind für eine
|
||||
# erfolgreiche Teilnahme vorauszusetzen?
|
||||
#
|
||||
# Alternativ können die Module benannt werden welche für die erfolgreiche
|
||||
# Teilnahme im Vorfeld zu belegen sind.
|
||||
|
||||
prerequisites:
|
||||
type: str
|
||||
label: { de: "Voraussetzungen für die Teilnahme", en: "prerequisites" }
|
||||
|
||||
#
|
||||
# Literatur und multimediale Lehr- und Lernprogramme
|
||||
#
|
||||
#
|
||||
# Wie können die Studierenden sich auf die Teilnahme an diesem Modul vorbereiten?
|
||||
#
|
||||
teaching-material:
|
||||
type: str
|
||||
label:
|
||||
{
|
||||
de: "Literatur und multimediale Lehr- und Lernprogramme",
|
||||
en: "media of instruction",
|
||||
}
|
||||
|
||||
#
|
||||
# Lehrbriefautor
|
||||
#
|
||||
author-of-indenture:
|
||||
type: str
|
||||
label: { de: "Lehrbriefautor", en: "author of indenture" }
|
||||
|
||||
#
|
||||
# Verwendung in (Studienprogramm)
|
||||
#
|
||||
used-in:
|
||||
type: str
|
||||
label: { de: "Verwendung", en: "used in study programs" }
|
||||
|
||||
#
|
||||
# Arbeitsaufwand
|
||||
#
|
||||
workload:
|
||||
type: str
|
||||
label: { de: "Arbeitsaufwand / Gesamtworkload", en: "workload" }
|
||||
#
|
||||
# credits/ECTS
|
||||
#
|
||||
credits:
|
||||
type: num
|
||||
unit: ECTS
|
||||
label:
|
||||
{
|
||||
en: "credits and weight of mark",
|
||||
de: "Kreditpunkte und Gewichtung der Note in der Gesamtnote",
|
||||
}
|
||||
template:
|
||||
de: "{value}CP, Gewichtung: {value}CP von 120CP "
|
||||
en: "{value}CP, weight: {value} / 120 "
|
||||
|
||||
#
|
||||
# Leistungsnachweis
|
||||
#
|
||||
form-of-exam:
|
||||
type: enum
|
||||
label: { de: "Leistungsnachweis", en: "form of examination" }
|
||||
values:
|
||||
{
|
||||
"written": { de: "Schriftliche Prüfung", en: "written exam" },
|
||||
"oral": { de: "Mündliche Prüfung", en: "oral exam" },
|
||||
"alternative":
|
||||
{ de: "Alternative Prüfungunsleistung", en: "alternative examination" },
|
||||
}
|
||||
spec: true
|
||||
template:
|
||||
de: "{value} ({spec})"
|
||||
en: "{value} ({spec})"
|
||||
|
||||
#
|
||||
# Semester
|
||||
#
|
||||
term:
|
||||
type: multinum
|
||||
label: { de: "Semester", en: "term" }
|
||||
template:
|
||||
de: "{value}\\. Semester"
|
||||
en: "{value}\\. semester"
|
||||
|
||||
#
|
||||
# Häufigkeit des Angebots
|
||||
#
|
||||
frequency:
|
||||
type: enum
|
||||
label: { de: "Häufigkeit des Angebots", en: "frequency of Offer" }
|
||||
values:
|
||||
{
|
||||
"once_per_term": { de: "jedes Semester", en: "every semester" },
|
||||
"once_per_year":
|
||||
{ de: "einmal im Studienjahr", en: "once per study year" },
|
||||
}
|
||||
|
||||
#
|
||||
# Dauer des Angebots
|
||||
#
|
||||
duration:
|
||||
type: int
|
||||
label:
|
||||
de: Dauer
|
||||
en: duration
|
||||
template:
|
||||
de: "{value} Semester"
|
||||
en: "{value} term(s)"
|
||||
|
||||
#
|
||||
# Art der Veranstaltung
|
||||
#
|
||||
kind:
|
||||
type: enum
|
||||
label:
|
||||
{
|
||||
de: "Art der Veranstaltung (Pflicht, Wahl, etc.)",
|
||||
en: "kind of module (compulsory, elective)",
|
||||
}
|
||||
values:
|
||||
{
|
||||
"compulsory": { de: "Pflicht", en: "compulsory" },
|
||||
"elective": { de: "Wahl/Wahlpflicht", en: "elective" },
|
||||
}
|
||||
|
||||
#
|
||||
# Freiform Bemerkungen
|
||||
#
|
||||
remarks:
|
||||
type: str
|
||||
label: { de: "Besonderes", en: "remarks" }
|
|
@ -1,28 +0,0 @@
|
|||
|
||||
coursebuilder := ../../coursebuilder
|
||||
|
||||
table.en.pdf:
|
||||
@echo "creating English version ..."
|
||||
python ${coursebuilder} -s schema.yaml -m mod.cg.yaml -l en -f fields.yaml | pandoc --template pandoc-template/eisvogel.latex -o table.en.pdf
|
||||
|
||||
table.de.pdf:
|
||||
@echo "creating German version ..."
|
||||
python ${coursebuilder} -s schema.yaml -m mod.cg.yaml -l de -f fields.yaml | pandoc --template pandoc-template/eisvogel.latex -o table.de.pdf
|
||||
|
||||
all: table.en.pdf table.de.pdf
|
||||
|
||||
clean:
|
||||
rm -f table.en.pdf table.de.pdf
|
||||
|
||||
debug-template:
|
||||
python ${coursebuilder} -s schema.yaml -m mod.cg.yaml mod.interactsys.yaml -l de -f name credits --template "$$name | $$credits"
|
||||
|
||||
debug-markdown:
|
||||
python ${coursebuilder} -s schema.yaml -m mod.cg.yaml mod.interactsys.yaml -l de -f name credits
|
||||
|
||||
debug-book:
|
||||
python ${coursebuilder} -s schema.yaml -b book.yaml -l de
|
||||
|
||||
debug:
|
||||
python ${coursebuilder} -s schema.yaml -m mod.cg.yaml -l de -f fields.yaml
|
||||
|
|
@ -1,18 +0,0 @@
|
|||
fields:
|
||||
- name
|
||||
- id
|
||||
- goal
|
||||
- content
|
||||
- form-of-instruction
|
||||
- prerequisites
|
||||
- teaching-material
|
||||
- author-of-indenture
|
||||
- used-in
|
||||
- workload
|
||||
- credits
|
||||
- form-of-exam
|
||||
- term
|
||||
- frequency
|
||||
- duration
|
||||
- kind
|
||||
- remarks
|
|
@ -1,98 +0,0 @@
|
|||
|
||||
name:
|
||||
en: Test Course
|
||||
|
||||
|
||||
test:
|
||||
|
||||
competency-table:
|
||||
de:
|
||||
- "Lineare Algebra": 'ABC'
|
||||
- "Vector Spaces": 'A'
|
||||
|
||||
|
||||
|
||||
#
|
||||
# nested lists seem to work in Markdown only in the US style way
|
||||
#
|
||||
# reference here: https://meta.stackexchange.com/questions/85474/how-to-write-nested-numbered-lists
|
||||
#
|
||||
# note the parser actually corrects 'Tervuren' to 3 in resulting data
|
||||
#
|
||||
|
||||
content:
|
||||
en: |
|
||||
1. Blah
|
||||
|
||||
2. Blub
|
||||
|
||||
1. Blah
|
||||
|
||||
1. Blub
|
||||
|
||||
1. Blah
|
||||
|
||||
1. Blub
|
||||
|
||||
1. Blah
|
||||
|
||||
1. Blub
|
||||
|
||||
1. Blah
|
||||
|
||||
1. Blub
|
||||
|
||||
3. Blah
|
||||
|
||||
4. Blub
|
||||
|
||||
<!-- break -->
|
||||
|
||||
5. Blah
|
||||
|
||||
6. Blah and Blub
|
||||
|
||||
1. Blah
|
||||
|
||||
1. Blub
|
||||
|
||||
7. Blah and Blub
|
||||
|
||||
- Blah
|
||||
|
||||
- Blub
|
||||
|
||||
- Blah
|
||||
|
||||
- Blub
|
||||
|
||||
8. Blub and Blah
|
||||
|
||||
- Blah
|
||||
|
||||
- Blub
|
||||
|
||||
- Blah
|
||||
|
||||
- Blub
|
||||
|
||||
- Blah
|
||||
|
||||
- Blub
|
||||
|
||||
- Blah
|
||||
|
||||
- Blub
|
||||
|
||||
9. Blah, Blub and Blub
|
||||
|
||||
- Blah
|
||||
|
||||
- Blub
|
||||
|
||||
- Blah
|
||||
|
||||
- Blub
|
||||
|
||||
|
||||
|
|
@ -1,291 +0,0 @@
|
|||
# fields in curricular description
|
||||
# leaning on methods in OpenAPI 3.0
|
||||
|
||||
#
|
||||
# Modulname
|
||||
#
|
||||
name:
|
||||
type: str
|
||||
label:
|
||||
de: "Modulname"
|
||||
en: "name of course"
|
||||
|
||||
#
|
||||
# Modulverantwortliche:r
|
||||
#
|
||||
instructor:
|
||||
type: str
|
||||
translatable: false
|
||||
label:
|
||||
de: "Modulverantwortlicher/Modulverantwortliche"
|
||||
en: "module instructor"
|
||||
|
||||
|
||||
#
|
||||
# Kürzel / ID
|
||||
#
|
||||
id:
|
||||
type: str
|
||||
translatable: false
|
||||
label: {
|
||||
de: "Kürzel",
|
||||
en: "code"
|
||||
}
|
||||
|
||||
|
||||
#
|
||||
# Qualifikationsziele
|
||||
#
|
||||
|
||||
# Welche fachbezogenen, methodischen, fachübergreifende Kompetenzen,
|
||||
# Schlüsselqualifikationen - werden erzielt (erworben)? Diese sind
|
||||
# an der zu definierenden Gesamtqualifikation (angestrebter Abschluss) auszurichten.
|
||||
#
|
||||
# Lernergebnisse sind Aussagen darüber, was ein Studierender nach Abschluss des Moduls weiß,
|
||||
# versteht und in der Lage ist zu tun. Die Formulierung sollte sich am Qualifikationsrahmen
|
||||
# für Deutsche Hochschulabschlüsse orientieren und Inhaltswiederholungen vermeiden.
|
||||
#
|
||||
# Des Weiteren finden Sie im QM-Portal die „Handreichung zur Beschreibung von Lernzielen“
|
||||
# als Formulierungshilfe.
|
||||
|
||||
goal:
|
||||
type: str
|
||||
label: {
|
||||
de: "Qualifikationsziele",
|
||||
en: "educational goal"
|
||||
}
|
||||
|
||||
#
|
||||
# Modulinhalte
|
||||
#
|
||||
|
||||
# Welche fachlichen, methodischen, fachpraktischen und fächerübergreifenden
|
||||
# Inhalte sollen vermittelt werden?
|
||||
#
|
||||
# Es ist ein stichpunktartiges Inhaltsverzeichnis zu erstellen.
|
||||
|
||||
content:
|
||||
type: str
|
||||
label: {
|
||||
de: "Modulinhalte",
|
||||
en: "content"
|
||||
}
|
||||
|
||||
#
|
||||
# Lehrform
|
||||
#
|
||||
|
||||
#
|
||||
# Welche Lehr- und Lernformen werden angewendet?
|
||||
# (Vorlesungen, Übungen, Seminare, Praktika,
|
||||
# Projektarbeit, Selbststudium)
|
||||
#
|
||||
# Es sind nur Werte aus der Prüfungsordung zugelassen
|
||||
#
|
||||
form-of-instruction:
|
||||
label: {
|
||||
de: "Lehrform(en)",
|
||||
en: "form of instruction"
|
||||
}
|
||||
type: multikey
|
||||
keys: {
|
||||
'lecture' : {
|
||||
de: "Vorlesung",
|
||||
en: "lecture"
|
||||
},
|
||||
'lecture_seminar' : {
|
||||
de: "Seminaristische Vorlesung",
|
||||
en: "lecture and seminar"
|
||||
},
|
||||
'seminar' : {
|
||||
de: "Seminar",
|
||||
en: "seminar"
|
||||
},
|
||||
'exersise' : {
|
||||
de: "Übung",
|
||||
en: "lab exersise"
|
||||
},
|
||||
'pc_lab' : {
|
||||
de: "Rechnergestütztes Praktikum",
|
||||
en: "PC exersise"
|
||||
},
|
||||
'project' : {
|
||||
de: "Project",
|
||||
en: "project"
|
||||
}
|
||||
}
|
||||
template:
|
||||
de: "${key} (${value}SWS)"
|
||||
en: "${key} (${value}SWS)"
|
||||
|
||||
#
|
||||
# Voraussetzungen für die Teilnahme
|
||||
#
|
||||
|
||||
# Für jedes Modul sind die Voraussetzungen für die Teilnahme zu beschreiben.
|
||||
# Welche Kenntnisse, Fähigkeiten und Fertigkeiten sind für eine
|
||||
# erfolgreiche Teilnahme vorauszusetzen?
|
||||
#
|
||||
# Alternativ können die Module benannt werden welche für die erfolgreiche
|
||||
# Teilnahme im Vorfeld zu belegen sind.
|
||||
|
||||
prerequisites:
|
||||
type: str
|
||||
label: {
|
||||
de: "Voraussetzungen für die Teilnahme",
|
||||
en: "prerequisites"
|
||||
}
|
||||
|
||||
#
|
||||
# Literatur und multimediale Lehr- und Lernprogramme
|
||||
#
|
||||
#
|
||||
# Wie können die Studierenden sich auf die Teilnahme an diesem Modul vorbereiten?
|
||||
#
|
||||
teaching-material:
|
||||
type: str
|
||||
label: {
|
||||
de: "Literatur und multimediale Lehr- und Lernprogramme",
|
||||
en: "media of instruction"
|
||||
}
|
||||
|
||||
#
|
||||
# Lehrbriefautor
|
||||
#
|
||||
author-of-indenture:
|
||||
type: str
|
||||
label: {
|
||||
de: "Lehrbriefautor",
|
||||
en: "author of indenture"
|
||||
}
|
||||
|
||||
#
|
||||
# Verwendung in (Studienprogramm)
|
||||
#
|
||||
used-in:
|
||||
type: str
|
||||
label: {
|
||||
de: "Verwendung",
|
||||
en: "used in study programs"
|
||||
}
|
||||
|
||||
#
|
||||
# Arbeitsaufwand
|
||||
#
|
||||
workload:
|
||||
type: str
|
||||
label: {
|
||||
de: "Arbeitsaufwand / Gesamtworkload",
|
||||
en: "workload"
|
||||
}
|
||||
#
|
||||
# credits/ECTS
|
||||
#
|
||||
credits:
|
||||
type: num
|
||||
label: {
|
||||
en: "credits and weight of mark",
|
||||
de: "Kreditpunkte und Gewichtung der Note in der Gesamtnote"
|
||||
}
|
||||
template:
|
||||
de: "${value}CP Gewichtung: ${value}CP von 120CP "
|
||||
en: "${value}CP weight: ${value} / 120 "
|
||||
|
||||
|
||||
#
|
||||
# Leistungsnachweis
|
||||
#
|
||||
form-of-exam:
|
||||
label: {
|
||||
de: "Leistungsnachweis",
|
||||
en: "form of examination"
|
||||
}
|
||||
type: enum
|
||||
values: {
|
||||
'written' : {
|
||||
de: "Schriftliche Prüfung",
|
||||
en: "written exam"
|
||||
},
|
||||
'oral' : {
|
||||
de: "Mündliche Prüfung",
|
||||
en: "oral exam"
|
||||
},
|
||||
'alternative' : {
|
||||
de: "Alternative Prüfungunsleistung",
|
||||
en: "alternative examination"
|
||||
}
|
||||
}
|
||||
spec: true
|
||||
template:
|
||||
de: "${value} (${spec})"
|
||||
en: "${value} (${spec})"
|
||||
|
||||
|
||||
#
|
||||
# Semester
|
||||
#
|
||||
term:
|
||||
label: {
|
||||
de: "Semester",
|
||||
en: "term"
|
||||
}
|
||||
type: multinum
|
||||
template:
|
||||
de: " ${value}. Semester"
|
||||
en: " ${value}. semester"
|
||||
|
||||
#
|
||||
# Häufigkeit des Angebots
|
||||
#
|
||||
frequency:
|
||||
label: {
|
||||
de: "Häufigkeit des Angebots",
|
||||
en: "frequency of Offer"
|
||||
}
|
||||
type: "enum"
|
||||
values: {
|
||||
'once_per_term' : {
|
||||
de: "jedes Semester",
|
||||
en: "every term"
|
||||
},
|
||||
'once_per_year' : {
|
||||
de: "einmal im Studienjahr",
|
||||
en: "once per study year"
|
||||
}
|
||||
}
|
||||
|
||||
duration:
|
||||
type: int
|
||||
label:
|
||||
de: Dauer
|
||||
en: duration
|
||||
template:
|
||||
de: "$value Semester"
|
||||
en: "$value term(s)"
|
||||
|
||||
kind:
|
||||
type: enum
|
||||
label: {
|
||||
de: 'Art der Veranstaltung (Pflicht, Wahl, etc.)',
|
||||
en: 'kind of module (compulsory, elective)'
|
||||
}
|
||||
values: {
|
||||
'compulsory': {
|
||||
de: "Pflicht",
|
||||
en: "compulsory"
|
||||
},
|
||||
'elective' : {
|
||||
de: "Wahl/Wahlpflicht",
|
||||
en: "elective"
|
||||
}
|
||||
}
|
||||
|
||||
remarks:
|
||||
type: str
|
||||
label: {
|
||||
de: "Besonderes",
|
||||
en: "remarks"
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue