Courses/ASE 24WS: Difference between revisions

(→‎Timetable: fix table)
(→‎Timetable: fix alias query)
 
(16 intermediate revisions by 2 users not shown)
Line 1: Line 1:
<div style="font-size:35px; font-weight:bold"> Kurs Advanced Software Engineering, Wintersemester 24/25 </div> <!--so it doesn't show up in TOC-->
<div style="font-size:35px; font-weight:bold"> Kurs Advanced Software Engineering, Wintersemester 24/25 </div> <!--so it doesn't show up in TOC-->
M.Sc. Medieninformatik, Universität Regensburg.
M.Sc. Medieninformatik, Universität Regensburg.
Imagemap?


<div style="float:right; width:25em;">__TOC__</div>  
<div style="float:right; width:25em;">__TOC__</div>  
Line 11: Line 7:
<!-- Links to important/official resources -->
<!-- Links to important/official resources -->
<div style="width:40em; padding-bottom: 7px; background-color:#fff2e5; border: solid 2px #ffcc99">
<div style="width:40em; padding-bottom: 7px; background-color:#fff2e5; border: solid 2px #ffcc99">
* Der Kurs in [... GRIPS] (TODO)
* Der Kurs in [https://elearning.uni-regensburg.de/course/view.php?id=68743 GRIPS]
* Der Kurs in [https://campusportal.uni-regensburg.de:443/qisserver/pages/startFlow.xhtml?_flowId=detailView-flow&unitId=22990&periodId=426&navigationPosition=studiesOffered,courseoverviewShow SPUR]
* Der Kurs in [https://campusportal.uni-regensburg.de:443/qisserver/pages/startFlow.xhtml?_flowId=detailView-flow&unitId=22990&periodId=426&navigationPosition=studiesOffered,courseoverviewShow SPUR]
* Das GraphIT-Item für den Kurs: [[Item:Q1022]]
* Das GraphIT-Item für den Kurs: [[Item:Q1022]]
* [https://wiki.mi.ur.de/lehre/ws24/ase_24ws/start Tutorials] used in the Practice Sessions
</div>
</div>


== Overview ==
== Overview ==
The course gives an overview of current issues in Software Engineering. <!-- ein kurzer Satz über den Kurs -->
The course gives an overview of current issues and trends in Software Engineering. <!-- ein kurzer Satz über den Kurs -->
 


<!-- Floated Table that contains the big topics of the course note(32.5em)-->
<!-- Floated Table that contains the big topics of the course note(32.5em)-->
Line 41: Line 40:
   SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". }
   SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". }
}
}
| height=20em
| height=15em
}}
}}
|-
|-
Line 48: Line 47:


<!-- Rest der Beschreibung -->
<!-- Rest der Beschreibung -->
{{Note|text=TODO: Practice, Leistungsnachweis}}
It discusses strategies, patterns and automations to help develop and maintain complex software.
 
 
The course includes bi-weekly practice sessions to teach the students practical skills using excercises and examples.
 
At the end of the semester each student has to turn in a project, in which they use their new found skills in developing a small contained application.




<blockquote>
<blockquote>
For a graph showing the full course click [https://tinyurl.com/23vz49ul here].
For a graph showing the full course click [https://tinyurl.com/23vz49ul here].
For a graph showing the goals of the course and their immediate prerequisites click [https://tinyurl.com/29qlmvzd here].
</blockquote>
</blockquote>


{{Note|text=TODO: Required Prerequisites, Goals}}
<!-- Table that contains simple/fast queries for the beggining & ending nodes of a course -->
{| class="wikitable"
! '''Required Knowledge''' !! '''Goals'''
|-
<!-- Linke Spalte -->
| style="width: 50%" | {{#widget:SPARQLquery|code=
#defaultView:Table
# Prerequsisite=outside -depends on-> Course-Topic=inside
PREFIX wdt: <https://graphit.ur.de/prop/direct/>
PREFIX wd: <https://graphit.ur.de/entity/>
select distinct
?Vorwissen ?VorwissenLabel
where {
  wd:Q1022 wdt:P14/wdt:P14 ?item. # get all items in course
 
  ?item wdt:P1 ?Vorwissen. # get the prerequsites
  MINUS { wd:Q1022 wdt:P14/wdt:P14 ?Vorwissen. } # filter out all prereqs that are included in the course
  service wikibase:label { bd:serviceParam wikibase:language "en".}
} LIMIT 30
|caption= Items, not part of the Course, but that are required knowledge


== Timetable ==
|height=20vh
}}
<!-- Rechte Spalte -->
| style="width: 50%" | {{#widget:SPARQLquery|code=
#defaultView:Table
PREFIX wdt: <https://graphit.ur.de/prop/direct/>
PREFIX wd: <https://graphit.ur.de/entity/>
SELECT DISTINCT ?ZielLabel ?Ziel
where {
  wd:Q1022 wdt:P36 ?Ziel.
  service wikibase:label { bd:serviceParam wikibase:language "en".}
} LIMIT 20
|caption=Items, marked as goals
|height=20vh
}}
|-
<!-- Linke Spalte -->
| [https://tinyurl.com/25gbeeea Full screen view of the Query]
<!-- Rechte Spalte -->
| [https://tinyurl.com/2c2qgg48 Full screen view of the Query]
|}
 
 
 
=== Timetable ===
<div style="border: solid 5px #d2d6e0; background-color:#eaecf0;">
<div style="border: solid 5px #d2d6e0; background-color:#eaecf0;">
{{#widget:SPARQLquery|code=
{{#widget:SPARQLquery|code=
#defaultView:Timeline
#defaultView:Timeline
# title: Alle geplanten Termine
PREFIX wdt: <https://graphit.ur.de/prop/direct/>
PREFIX wdt: <https://graphit.ur.de/prop/direct/>
PREFIX wd: <https://graphit.ur.de/entity/>
PREFIX wd: <https://graphit.ur.de/entity/>
select distinct ?Datum ?Session ?SessionLabel ?Inhalte ?InhalteLabel
select distinct ?Datum ?Session ?SessionLabel # ?Inhalte ?InhalteLabel
# ?item # for debug
where {
where {
   # todo. change Q:468 to current course
   # todo. change Q:468 to current course
   wd:Q1022 wdt:P14 ?Session.
   wd:Q1022 wdt:P14 ?Session.
   ?Session wdt:P3 wd:Q427.  
   ?Session wdt:P3 wd:Q427.  
   ?Session wdt:P19 ?Datum.
   ?Session wdt:P19 ?Datum.  
   # OPTIONAL {?Session wdt:P14 ?Inhalte.}
   # OPTIONAL {?Session wdt:P14 ?Inhalte.}  
   OPTIONAL { ?Session skos:altLabel ?SessionLabel. # get alias instead of label
    
              FILTER (!regex(?SessionLabel, "ASE -", "i")) }
  # re-get the alias as ?SessionLabel (for the links)
  ?Session skos:altLabel ?SessionLabel.
  FILTER (LANG(?SessionLabel) = "de").
 
  # Filter out all descriptive alias (aka. don't use a "[Course] - 01a"-type label)
  OPTIONAL {
    ?Session skos:altLabel ?alt.
    FILTER (!regex(?alt, "ASE", "i"))
    FILTER (LANG(?alt) = "en")  # Ensure the alias is in English
  } # and save them in a different var
 
  # Default to the normal alias, but use the descriptiv one if it exists
  BIND(IF (?aliasCount > 1, ?alt, ?alias) as ?SessionLabel)
 
   service wikibase:label { bd:serviceParam wikibase:language "en".}
   service wikibase:label { bd:serviceParam wikibase:language "en".}
} ORDER BY ASC(?Datum)
} ORDER BY ASC(?Datum)
LIMIT 50
| height=38em
| height=38em
| caption=Planned Sessions
| caption=Planned Sessions
}}
}}
</div>
</div>
=== Interests & Knowledge ===
A graph showing the items students have marked as "interesting" or "known".
<div style="border: solid 5px #d2d6e0; background-color:#eaecf0;">
{{#widget:SPARQLquery| code=
#defaultView:SwarmScatterChart
PREFIX wd: <https://graphit.ur.de/entity/>
PREFIX wdt: <https://graphit.ur.de/prop/direct/>
SELECT DISTINCT ?known ?interests ?itemLabel # ?known ?interests ?item ?itemLabel
WHERE {
  wd:Q1022 wdt:P14* ?item.
  OPTIONAL {
    SELECT ?item ?itemLabel (COUNT(DISTINCT ?student) as ?known) WHERE {
      ?student wdt:P25 wd:Q1022.
      ?student wdt:P12 ?item.
    } GROUP BY ?item ?itemLabel
  }
  OPTIONAL {
    SELECT ?item ?itemLabel (COUNT(DISTINCT ?student) as ?interests) WHERE {
      ?student wdt:P25 wd:Q1022.
      ?student wdt:P23 ?item.
    } GROUP BY ?item ?itemLabel
  }.
  BIND (IF(!BOUND(?interests), 0, ?interest) as ?interests).
  BIND (IF(!BOUND(?known), 0, ?known) as ?known).
  SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". }
}
}}
</div>
=== Preview ===
A list of things to be discussed in the upcoming session.
<div style="border: solid 5px #d2d6e0; background-color:#eaecf0;">
{{#widget:SPARQLquery| code=
#defaultView:Table
PREFIX wdt: <https://graphit.ur.de/prop/direct/>
PREFIX wd: <https://graphit.ur.de/entity/>
select distinct ?today ?sessionDate ?interested ?completed
?item ?itemLabel
?resource ?resourceLabel ?url ?type ?typeLabel
where {
  { # subquery: get the session for next week
    SELECT ?session  ?today ?sessionDate
    WHERE {
      # get all sessions, that are "bigger" than today
      # BIND("2024-04-29"^^xsd:dateTime as ?today) # for test
      BIND(now() as ?today) # for real
 
      wd:Q1022 wdt:P14 ?session.
      ?session wdt:P3 wd:Q427.
      ?session wdt:P19 ?sessionDate.
      # FILTER(?sessionDate > ?today).
      FILTER(xsd:date(?sessionDate) >= xsd:date(?today)).
    } ORDER BY ASC(?sessionDate)
    LIMIT 1 # limit to 1 session
  } # end of subquery
 
  # limit to 1 session (from subquery)
  ?session wdt:P14 ?item.
  OPTIONAL {?item wdt:P21 ?resource.
            ?resource wdt:P20 ?url.
            ?resource wdt:P3 ?type}
 
    { # start of union
      {  # get all items user is interested in
      SELECT ?item ?itemLabel
      WHERE {
          ?user rdfs:label "{{#username:Max Mustermann}}"@en.
          ?user wdt:P23 ?item.
      } }
      BIND(IF(BOUND(?item), "true", "false") as ?interested)
  } UNION {
      { # get all items user has completed
      SELECT ?item ?itemLabel
      WHERE {
          ?user rdfs:label "{{#username:Max Mustermann}}"@en.
          ?user wdt:P12 ?item.
      } }
      BIND(IF(BOUND(?item), "true", "false") as ?completed)
  } UNION { # union: get all other items
      ?session wdt:P14 ?item.
      ?user rdfs:label "{{#username:Max Mustermann}}"@en.
      # Remove all item user is interested in / has completed -> otherwise duplicates
      MINUS {?user wdt:P23 ?item}
      MINUS {?user wdt:P12 ?item}
  } # end of union
 
  service wikibase:label { bd:serviceParam wikibase:language "en".}
} ORDER BY DESC(?resource)
LIMIT 80
| caption=A Todolist for {{#username:Max Mustermann}}
| height=30em
}}
</div>
=== Additional Learning ===
Items, that are part of the course, but are not [[Property:P14|included]] in a Session. Meaning that they either weren't discussed, or weren't discussed in depth.
{{#widget:SPARQLquery|code=
#defaultView:Table
PREFIX wdt: <https://graphit.ur.de/prop/direct/>
PREFIX wd: <https://graphit.ur.de/entity/>
select distinct
?category ?categoryLabel
?item ?itemLabel
where {
  # get all items in categories
  wd:Q1022 wdt:P14 ?category.
  ?category wdt:P3 wd:Q169.
  ?category wdt:P14 ?item.
 
  MINUS {
    # Remove all items that are included in Sessions
    wd:Q1022 wdt:P14 ?session.
    ?session wdt:P3 wd:Q427.
    ?item ^wdt:P14 ?session.
  }
  service wikibase:label { bd:serviceParam wikibase:language "en".}
} LIMIT 200
| caption=Items not "included in" a Session of the course.
}}
<small>Or they haven't been added yet.</small>
==Erste Schritte mit GraphIT==
#'''GraphIT-Account einrichten'''
##Account anlegen (gerne mit Pseudonym oder Initialen): [[Special:CreateAccount]].
##Einen ''Graph User'' (einfach ein Item) mit gleichem Namen anlegen (siehe z.B. das Item Q630: [[Item:Q630|Markus Mustermann]]):
###auf [[Special:NewItem]] gehen oder oben im Menü "Items → New Item" auswählen.
###Label (für Sprache Englisch): ''<eigener Name>''
###Description (für Sprache Englisch): ''Student at University of Regensburg (<eigener Name>)''  // Hinweis: in WikiBase dürfen unterschiedliche Items nicht die gleiche Beschreibung haben, deshalb bitte den eigenen Namen noch dranhängen
###Button 'Create' anklicken
##Statements ''beim Benutzer-Item'' hinzufügen (siehe z.B. das Item Q630: [[Item:Q630|Markus Mustermann]]):
###'[[Property:P3|instance of]]' (P3) + '[[Item:Q167|Student]]' (Q167)
###'[[Property:P28|username]]' (P28) + Benutzernamen (siehe Schritt 1)
###'[[Property:P25|participates in]]' (P25) + [[Item:Q1022|ASE WS 2024]] (Q1022)
##Auf der eigenen Benutzerseite (des Accounts) einen Link zum eigenen Item anlegen:
###[https://graphit.ur.de/w/index.php?title=Special:MyPage&action=edit Benutzerseite anlegen/bearbeiten]
###Folgenden Text dort einfügen und Seite speichern (mit eigenem Item statt Platzhalter): <code><nowiki>My GraphIT item: [[Item:Q123]]</nowiki></code>. Achtung: das Item muss ein Link sein, d.h. entweder im grafischen Editor verlinken oder im Quellcode-Editor in eckigen Klammern schreiben.
#'''Vorkenntnisse und Interessen angeben'''
##Auf https://test.graphit.ur.de/app/src/pages/selectionTools/ einmal mit Benutzername und Passwort (aus Schritt 1) anmelden. Achtung: das Passwort wird momentan beim Eintippen angezeigt.
##Oben rechts die Lehrveranstaltung "ASE 24WS" auswählen.
##Im angezeigten Graph die damit verbundenen Themen anschauen.
##Alle Themen als "completed" markieren, mit denen man sich schon befasst hat (auswählen und Taste '1' drücken bzw. den Button auf der rechten Seite).
##Mindestens fünf Themen als Interessen markieren (auswählen und Taste '2' drücken bzw. den Button auf der rechten Seite).
##'''Änderungen speichern über den 'save'-Button unten rechts!'''
##Auf der eigenen Item-Seite überprüfen ob die Interessen und Vorkenntnisse korrekt dokumentiert wurden.
Als ein Beispiel kann [[Item:Q157|Max Mustermann]] angesehen werden. Für eine detailiertere Übersicht kann die Seite [[ExampleStudent]] besucht werden.

Latest revision as of 15:06, 18 November 2024

Kurs Advanced Software Engineering, Wintersemester 24/25

M.Sc. Medieninformatik, Universität Regensburg.



Overview

The course gives an overview of current issues and trends in Software Engineering.


Important Topics

Full Query

It discusses strategies, patterns and automations to help develop and maintain complex software.


The course includes bi-weekly practice sessions to teach the students practical skills using excercises and examples.

At the end of the semester each student has to turn in a project, in which they use their new found skills in developing a small contained application.


For a graph showing the full course click here.

For a graph showing the goals of the course and their immediate prerequisites click here.

Required Knowledge Goals

Items, not part of the Course, but that are required knowledge

Items, marked as goals

Full screen view of the Query Full screen view of the Query


Timetable

Planned Sessions

Interests & Knowledge

A graph showing the items students have marked as "interesting" or "known".

Preview

A list of things to be discussed in the upcoming session.

A Todolist for Max Mustermann

Additional Learning

Items, that are part of the course, but are not included in a Session. Meaning that they either weren't discussed, or weren't discussed in depth.

Items not "included in" a Session of the course.

Or they haven't been added yet.


Erste Schritte mit GraphIT

  1. GraphIT-Account einrichten
    1. Account anlegen (gerne mit Pseudonym oder Initialen): Special:CreateAccount.
    2. Einen Graph User (einfach ein Item) mit gleichem Namen anlegen (siehe z.B. das Item Q630: Markus Mustermann):
      1. auf Special:NewItem gehen oder oben im Menü "Items → New Item" auswählen.
      2. Label (für Sprache Englisch): <eigener Name>
      3. Description (für Sprache Englisch): Student at University of Regensburg (<eigener Name>) // Hinweis: in WikiBase dürfen unterschiedliche Items nicht die gleiche Beschreibung haben, deshalb bitte den eigenen Namen noch dranhängen
      4. Button 'Create' anklicken
    3. Statements beim Benutzer-Item hinzufügen (siehe z.B. das Item Q630: Markus Mustermann):
      1. 'instance of' (P3) + 'Student' (Q167)
      2. 'username' (P28) + Benutzernamen (siehe Schritt 1)
      3. 'participates in' (P25) + ASE WS 2024 (Q1022)
    4. Auf der eigenen Benutzerseite (des Accounts) einen Link zum eigenen Item anlegen:
      1. Benutzerseite anlegen/bearbeiten
      2. Folgenden Text dort einfügen und Seite speichern (mit eigenem Item statt Platzhalter): My GraphIT item: [[Item:Q123]]. Achtung: das Item muss ein Link sein, d.h. entweder im grafischen Editor verlinken oder im Quellcode-Editor in eckigen Klammern schreiben.
  2. Vorkenntnisse und Interessen angeben
    1. Auf https://test.graphit.ur.de/app/src/pages/selectionTools/ einmal mit Benutzername und Passwort (aus Schritt 1) anmelden. Achtung: das Passwort wird momentan beim Eintippen angezeigt.
    2. Oben rechts die Lehrveranstaltung "ASE 24WS" auswählen.
    3. Im angezeigten Graph die damit verbundenen Themen anschauen.
    4. Alle Themen als "completed" markieren, mit denen man sich schon befasst hat (auswählen und Taste '1' drücken bzw. den Button auf der rechten Seite).
    5. Mindestens fünf Themen als Interessen markieren (auswählen und Taste '2' drücken bzw. den Button auf der rechten Seite).
    6. Änderungen speichern über den 'save'-Button unten rechts!
    7. Auf der eigenen Item-Seite überprüfen ob die Interessen und Vorkenntnisse korrekt dokumentiert wurden.

Als ein Beispiel kann Max Mustermann angesehen werden. Für eine detailiertere Übersicht kann die Seite ExampleStudent besucht werden.