De architect: in spagaat tussen mensen en technische details Illustratie met een simpel voorbeeld
Illustratie van stap voor stap naar een architectuur aan de hand van een voorbeeld Overview Exercise Assistant: het voorbeeld Stakeholders en hun wensen en eisen Stapsgewijs naar een architectuur die voldoet Voorbeeld is eenvoudig: Weinig stakeholders Weinig harde eisen De schaal van het systeem
Exercise Assistant Hulpmiddel voor studenten, bij het leren oplossen van bijvoorbeeld wiskundige vergelijkingen Inzetbaar in het onderwijs Maar ook: Onderwerp van onderzoek: work in progress
Uitgangspunt: desktop applicatie Equation Solver
Equation Solver Intelligente feedback geven op stappen in de oplossing van vergelijkingen met meerdere onbekenden Gemakkelijk uit te breiden naar andere domeinen (logica, andere wiskunde opgaven, …) Geschreven in Haskell functionele taal
Intelligente feedback
Voorbeeld uit de propositielogica:
Je hebt onjuist toegepast: de De Morgan regel. Je hebt het volgende gedeelte herschreven: ¬ (p ٧ q) in : ¬ p ٧ ¬ q. Correcte toepassing van de regel resulteert in: ¬ p ٨ ¬ q.
of
“Bedoelde je soms…” voor oplossingen van opgaven
of
en
Nodig voor intelligente feedback:
Representatie van een domein
Regels voor oplossen
Strategieën eerst de Morgan, dan distributie
Implementatie gaat het handigst in een functionele taal
Functionele taal: Haskell Onder andere: Algebraïsche Datatypen data Tree = Empty | Leaf Int | Node Tree Tree depth :: Tree -> Int depth Empty =0 depth (Leaf n) = 1 depth (Node l r) = 1 + max (depth l) (depth r)
Logische expressies in Haskell data Expression = Var String | Expression | Expression | Expression | Expression | Not Expression |T |F
:->: :<->: :&&: :||:
Expression Expression Expression Expression
-- implication -- equivalence -- and -- or -- not -- true -- false
Regels voor afleidingen containsdoubleNeg :: Expression -> Bool containsdoubleNeg e = case e of Var v -> (e1 :->: e2) -> (e1 :<->: e2) -> (e1 :&&: e2) -> (e1 :||: e2) -> Not (Not e) -> Not e -> T -> F ->
False containsdoubleNeg e1 || containsdoubleNeg e2 containsdoubleNeg e1 || containsdoubleNeg e2 containsdoubleNeg e1 || containsdoubleNeg e2 containsdoubleNeg e1 || containsdoubleNeg e2 True containsdoubleNeg e False False
Wens: on-line
Exercise assistant on-line http://ideas.cs.uu.nl/exas/
Waarom on-line? Geen noodzaak om versies voor verschillende platforms te onderhouden Work in progress, maar we willen het ondertussen ook al gaan gebruiken: veranderingen graag op één plaats Gegevens verzamelen over gebruik van de tool gaat lastig op individuele desktops
Uitgangspunt Programma geschreven in een functionele taal Student verandert expressie stap voor stap Functies: Oefening genereren Feedback op stap geven Hint geven (in tekst: regel die kan worden toegepast) Nextstep geven (in tekst, plus een expressie die in een stap kan worden afgeleid)
Stakeholders Gebruikers: studenten Ontwikkelaars: onderzoekers Later ook: docenten, webapplicatiebouwers
Gebruikers: studenten
Duidelijke, intuitief werkende user-interface
Gemakkelijke invoer, via muis of toetsenbord
Directe response Niet wachten op volgende pagina Geen wachttijden wanneer meer studenten tegelijkertijd werken
Duidelijke feedback Meerwaarde ten opzichte van papier en potlood
Ontwikkelaars: onderzoekers Experimenteren, dus veel en vaak kunnen veranderen Gui De functionaliteit zelf Veel en vaak kunnen uitbreiden: Meer domeinen ondersteunen Meer soorten oefeningen per domein De desktopversie erbij kunnen houden met minimale inspanning Gegevens van gebruik kunnen verzamelen
Ontwikkelaars: onderzoekers Waar mogelijk bestaande componenten gebruiken Niet opnieuw het wiel uitvinden Beschikbare tijd naar wat interessant is voor het onderzoek
Docenten Inpassen in eigen cursussite of eigen e-learning omgeving (maar vooral niet te moeilijk) Mogelijkheden: traject oefeningen samenstellen gegevens bijhouden over individuele studenten
Eisen, prioriteiten 1. Flexibiliteit GUI Functionaliteit 2. Response geen page reload schaalbaar 3. Gebruik bestaande componenten 4. Gemakkelijk inpasbaar in electronische leeromgevingen
Uitgangspunt en doel
Code of executable
Webserver die de oefeningen aanbiedt
Communicatie Haskell - webserver Programma-aanroep vanuit scripttaal en CGI -> vertraging vanwege steeds opnieuw starten programma Apachemodule, FastCGI -> zelf threads en scheduling schrijven Webserver die zelf in Haskell geschreven is -> niet ideaal: hercompileren bij elke verandering
Eisen 1. Flexibiliteit GUI Functionaliteit 2. Response geen page reload schaalbaar 3. Gebruik bestaande componenten 4. Inpasbaar in electronische leeromgevingen
Een tussenschakel gebruiken
Browser
Webserver
Webserver als applicatieserver
Applicatieserver
Browser Webserver
Illustratie van: Bestaande componenten zijn niet “gratis” -> kosten van leren gebruiken en onderhouden afwegen tegen zelf bouwen -> goed kijken naar nadelen Een tussenschakel draagt bij aan flexibiliteit -> ontkoppelt (deels) de subsystemen aan weerszijden
Lijkt flexibel te zijn (MVC pattern)
http
Webserver: GUI (View en Control)
Applicatieserver Functionaliteit (Model)
MVC pattern in een Webapplicatie
Gebruiker
Voordeel: Model en View ontkoppeld: Onafhankelijk van elkaar te veranderen
(3-tier applicaties: Presentatie = View+Controller Logicalaag = Model)
View
Controller
Model
Browser Met HTML
Webserver
Haskell applicatieserver
Submit Request
gegevens stap Feedback
Feedback
Eisen 1. Flexibiliteit GUI Functionaliteit 2. Response geen page reload schaalbaar 3. Gebruik bestaande componenten 4. Inpasbaar in electronische leeromgevingen
Responsetijd: Ajax
Webserver
Webserver
request
Data
Nieuwe pagina
Webbrowser
request
Ajax engine (Javascript)
Webbrowser
Webpagina met link
Webpagina met link
Ajax inpassen Browser
Webserver
Ajax via XMLHTTP
Webserver als applicatieserver
Verantwoordelijkheden
Webserver
Applicatieserver
Control: Ajax engine (Javascript)
Model: Haskell executable
View: HTML, CSS,
Webserver
Verloop communicatie
Control: Ajax engine (Javascript) View: HTML, CSS,
View en control
Applicatieserver Model: Haskell executable
Browser
In detail bekijken: Model, View en Control verknoopt Xmlhttp POST request url: http://.../feedback Inhoud: stap=value&vorigestap=value feedback=value
Browser krijgt van Webserver: View: HTML Control: Javascript
Applicatieserver Biedt light-weight service Model
Eisen 1. Flexibiliteit GUI Functionaliteit 2. Response geen page reload schaalbaar 3. Gebruik bestaande componenten 4. Gemakkelijk inpasbaar in electronische leeromgevingen
Illustreert: Soms is detailkennis nodig over ingezette technieken Daardoor ook: steeds nieuwe inzichten in tactics en patterns Het probleem zit hem in de verbindingen Verknoping MVC in webtoepassingen is al vaker opgemerkt Oplossingen bijvoorbeeld Ruby on Rails: M en V en C vanuit één plek genereren. Ontwikkelaars: terugkoppelen naar architect wat lastiger is dan het lijkt.
Flexibiliteit, tactics Bescherm semantische coherentie -> dat is al gebeurd Parametriseer -> kunnen we proberen Verberg informatie -> is al gebeurd Gebruik een tussenschakel -> is al gebeurd (maar zou nogmaals kunnen) …
Tussenschakel
parametrisatie
http Cursuswebsite Beheer: docent Uiterlijk te beïnvloeden met css
http Webserver: Control
Webserver: View: door Control gegenereerd Control: Javascript
Webserver: Model
Eisen 1. Flexibiliteit GUI Functionaliteit 2. Response geen page reload schaalbaar 3. Gebruik bestaande componenten 4. Gemakkelijk inpasbaar in electronische leeromgevingen
Mogelijkheden: services bieden en gebruiken
Oefeningen aanbieden
Services gebruiken
Conclusies
Voortschrijdend inzicht patterns Bij klein systeem al haken en ogen Problemen ingewikkelder door: Meer bestaande componenten inzetten (legacy) Alle systemen van één organisatie inbedden in architectuur -> ontwerpbeslissingen hebben verregaande gevolgen Meer stakeholders, lastiger om requirements compleet te krijgen, prioriteitenlijst van requirements te maken en vooral botsende concerns oplossen Communicatie naar buiten het systeem -> constraints Beslissing voor platforms vaak al genomen -> constraints
Conclusies – 2 Beschrijvingen ingewikkelder Concerns liefst kwantitatief uitdrukken Views op de architectuur voor de verschillende stakeholders Precieze betekenis pijlen en rechthoeken: ontwikkelaars moeten aan de slag kunnen Het vinden van componenten met de juiste functionaliteit is meestal niet het grootste probleem; de verbindingen zijn het probleem
Op beide vlakken excellent zijn:
Mensen
Techniek