1 A web-based course in quantitative basin analyses Eindrapportage Projecttitel: A web-based course in quantitative basin analyses Projectcode: ICT200...
A web-based course in quantitative basin analyses ICT2001/1 Aard- en Levenswetenschappen september 2001 – augustus 2002 Faculteit Aard- en Levenswetenschappen
Opgesteld door: Silvester Draaijer, ICT Onderwijscentrum VU Pieter W. Groen, ICT Onderwijscentrum VU Marlies ter Voorde, Faculteit Aard- en Levenswetenschappen Datum:
Juni 2003
Contactadres: icto ICT Onderwijscentrum VU p.a. Onderwijs Adviesbureau VU De Boelelaan 1105, kamer 1G 30 1081 HV Amsterdam www.icto.vu.nl tel. 020 – 4445477 [email protected]
icto
ICT Onderwijscentrum VU
Eindrapportage A web-based course in quantitative basin analyses ICT2001/1
Inhoudsopgave
1 2
Samenvatting...............................................................................................................................1 Doelstelling van het project ..........................................................................................................2 2.1 Aanleiding .............................................................................................................................2 2.2 Verwachting ..........................................................................................................................2 2.3 Fasering ................................................................................................................................2 3 Uitwerking ...................................................................................................................................4 3.1 Vernieuwing programmatuur ..................................................................................................4 3.1.1 Verwachtingen................................................................................................................4 3.1.2 Uitwerking......................................................................................................................4 3.1.3 Ontwikkeling input-gedeelte van het programma..............................................................6 3.1.4 Genereren van output gedeelte van het programma (grafieken).......................................11 3.2 Vernieuwing van het onderwijs .............................................................................................14 3.2.1 Verwachtingen..............................................................................................................14 3.2.2 Uitwerking....................................................................................................................14 3.3 Veranderende cursistenpopulatie..........................................................................................16 3.3.1 Verwachtingen ..............................................................................................................17 3.4 Cursusuitvoering .................................................................................................................17 4 Conclusies een aanbevelingen.....................................................................................................19 4.1 Procesevaluatie ....................................................................................................................19 Taakverdeling tussen programmeurs .......................................................................................19 Taakverdeling voor de onderwijsuitvoering ..............................................................................19 4.2 Continuering van het ontwikkelde product en onderwijs........................................................19 4.3 Inhoudelijke resultaten en aanbevelingen..............................................................................19 4.3.1 Begripsvorming verbeterd .............................................................................................19 4.3.2 Geschikt voor afstandsstudenten...................................................................................20 4.3.3 Verder verbeteren.........................................................................................................20 5 Bijlage: Files en code BMOD webinterface Bijlage files en code BMOD webinterface .......................21 5.1 File "index.html" ..................................................................................................................21 5.2 Hoofddeel cgi-programma "index.cgi"...................................................................................23 5.3 File "index.cache".................................................................................................................26 5.4 File "index"..........................................................................................................................26 5.5 File "Session.pl" ...................................................................................................................27 5.6 File "Bmod.pl"......................................................................................................................29 5.7 File "Forms.pl" .....................................................................................................................32 5.8 File "Gnuplot.pl"...................................................................................................................45 5.9 File "push.cgi"......................................................................................................................49
icto
ICT Onderwijscentrum VU
Eindrapportage ICT2001/1
1
1 Samenvatting In het cursusjaar 2001/2002 herontwerpen medewerkers van Faculteit der Aard- en Levenswetenschappen en het ICTO een cursus “Basin analysis” (bekkenmodelleren). Voor die cursus wordt een nieuwe internet-interface ontworpen voor het BMOD simulatieprogramma en wordt het practicumgedeelte van de cursus herontworpen. Het eerste resultaat van het project is een geheel nieuw ontworpen internet-interface voor het simulatieprogramma. Deze interface maakt het ook mogelijk de simulaties op afstand (via het internet) door afstandstudenten te laten gebruiken. In deze eindrapportage staat beschreven hoe het programma ontwikkeld is, wat de belangrijkste ontwikkelkeuzen zijn geweest en is de beschrijving van de programmatuur en programmacode opgenomen. Het tweede resultaat is een nieuw ontworpen practicum. Dit practicum kenmerkt zich door een betere opdrachtstructuur voor studenten. Deze is gerealiseerd door de oorspronkelijke doelstelling en opzet van het practicum te expliciteren en in duidelijke deelopdrachten op te splitsen. Door het inzetten van voorkennistoetsen komt het practicum sneller op gang. Door het invoeren van resultaten van simulaties in de toetsomgeving van de digitale leeromgeving Blackboard krijgen studenten sneller feedback. Helaas is het niet empirisch is vast te stellen of de begripsvorming van studenten rondom het bekkenmodelleren is verbeterd, maar het is de overtuiging van de staf dat dat wel heeft plaatsgevonden.
1
Eindrapportage ICT2001/1
2
2 Doelstelling van het project 2.1 Aanleiding De bestaande cursus “Basin analysis” van de faculteit Aard- en Levenswetenschappen wordt jaarlijks door ongeveer 25 deelnemers van zowel binnen als buiten de VU gevolgd. De cursus is onderdeel van het 3e jaars curriculum van de studie geologie. De gehele cursus bestaat uit een serie van 7 hoorcolleges van ieder 2 uur (theorie, 25%), een serie practicum opgaven met begeleiding (10 halve dagen (practicum 50%)) en een hoeveelheid zelfstudie (25%) aan de hand van aangeboden recente literatuur. De cursus wordt afgesloten met een schriftelijke toets. Het algemene doel van de cursus is dat studenten fundamentele principes van voorwaarts en achterwaarts modelleren leren begrijpen en kunnen toepassen op extensiebekkens en om simulaties kunnen uitvoeren. In het kader van dit rapport zal hier niet verder ingegaan worden op hetgeen voorwaarts modelleren van extensiebekkens is. Daarvoor wordt verwezen naar de in het kader van dit project ontwikkelde cursuswebsite 1 en een presentatie van het project op de studiedag ‘Stilstaande en bewegende digitale beelden in het onderwijs’ van het ICT Onderwijscentrum op 23 mei 200223. Er was een aantal wensen om dit onderwijsonderdeel voor wat betreft opzet, uitvoering en middelen te verbeteren: 1. De programmatuur waarmee in de cursus wordt gewerkt is meer dan 10 jaar geleden ontwikkeld, en hoewel de inhoud nog altijd niet verouderd is, is de user-interface dat wel. Deze moet verbeterd worden. 2. De cursus als geheel dient opnieuw doorgenomen en op een onderwijskundig meer verantwoord niveau te komen. 3. De cursistenpopulatie wijzigt zich sterk waardoor een flexibeler cursusopzet en cursusuitvoering mogelijk moet zijn.
2.2 Verwachting De verwachtingen rondom het project waren dat de drie genoemde verbeterpunten gerealiseerd zouden worden. De opbrengsten zouden vooral bestaan uit een web-interface voor de genoemde programmatuur en een revisie van de cursus op het niveau van inhoud, opzet en uitvoering waarin het ontwikkelen van een cursuswebsite als belangrijk uitgangspunt werd genomen.
2.3 Fasering Het project heeft het volgende verloop gekend. q September 2001. Start project, Introductie, vaststelling doelstellingen, nader informeren van projectleden, uitleg aan medewerkers ICTO van bekkenmodellering. q November 2001. Start ontwikkeling van webinterface en start herontwerp onderwijsonderdeel. q April 2002. Afronding ontwikkeling software, afronding ontwikkeling onderwijs. Uitvoering cursus. q Mei 2002. Evaluatie van ontwikkelde webinterface en (verbeterde) cursus(uitvoering). Vaststellen van verbeteringen aan de software en doorvoeren daarvan. Beschrijven van uiteindelijk ontwikkelde software t.b.v. overdrachtsdoeleinden. Vaststellen van verbeterpunten aan de ontwikkelde cursus, beschrijving van projectuitvoering, overwegingen en resultaten. q Augustus 2002. Afronden project. 1
Cursuscode op de Blackboardserver van de VU: GEO_HD703_2001_1: Formation and Evolution of Extensional Basins; of
3 Uitwerking 3.1 Vernieuwing programmatuur In de huidige vorm van de cursus (voorafgaand aan het project), wordt veel tijd (2 van de 10 middagen) gebruikt voor het leren omgaan met het UNIX platform voor de invoer van data in de Basin Modelling en Subsidence Analyses programma’s (resp. BMOD en Backstrip). Er zijn duidelijke signalen ontvangen van studenten en stafleden dat het leerdoel om de fundamentele principes van het modelleren te begrijpen en toepassen ondergesneeuwd raakt door de complexiteit van het invoeren van de gegevens en het bedienen van het platform en de programmatuur.
3.1.1 Verwachtingen Het belangrijkste uitgangspunt voor wat betreft de programmatuur is dat de software via het web ontsloten zal moeten gaan worden. Zo worden de programma’s platform-onafhankelijk. De webinterface zal een input-interface bevatten die via www-formulieren de inputfiles voor de programmas maakt en op interne consistentie checkt, en een output-interface die op een grafische manier de output van het programma (curves) beschikbaar maakt voor de gebruiker. Het maken van de input files is in principe een eenvoudig proces, en kan via web-forms worden aangestuurd. Voor de grafische output bestaat nog geen standaard op internet, het gaat om het schaalbaar afdrukken van eenvoudige x-y grafieken. Er bestaan hiervoor verschillende browser-plugins. De bestaande programma’s (BMOD en Backstrip) zijn beide in Fortran geschreven en dienen enigszins aangepast te worden om de nieuwe output te kunnen genereren. Het opschonen van de source codes en het bug-vrij maken van de programatuur zal door de medewerkers van de faculteit gebeuren. Er ontstaat een modulair geheel, web-forms, source-code met CGI-scripts, en output-interface. Waarbij de webforms en de output interface voor beide programma’s, BMOD en Backstrip vrijwel identiek kunnen zijn.
3.1.2 Uitwerking BMOD is een commandline-gestuurd (Fortran-) programma. De gebruikersinterface is echter gebruiksonvriendelijk: indien een fout wordt gemaakt bij het invoeren van de waarden van de parameters, moet men helemaal opnieuw beginnen en ook de context binnen het model van de in te vullen parameters is tijdens het invullen niet zo duidelijk. Daarnaast is ook de methode om de gegenereerde output te visualiseren niet optimaal: BMOD genereert een aantal files waarmee de gebruiker in een ander pakket de grafieken moet maken. Men kan het programma overigens nog wel op afstand laten draaien, bijvoorbeeld via een telnetverbinding, zodat aan de wens om het aan gebruikers op afstand aan te bieden kan worden voldaan, maar deze methode wordt sterk ontmoedigd door de onvriendelijke gebruikersinterface. De opzet van het programma BMOD is gegeven in Figuur 1:
4
Eindrapportage ICT2001/1
5
Flexural or isostatic calculations (f/i)? f
i
Which flexural model? e - elastic i - isotherm defined o - oceanic depth dependent e
i
o
Give EET (km)
Give number of boxes, and width (km)
Give number of boxes, and width (km)
Enter gridspacing (km)
Per box, give beta and delta
Per box, give beta and delta
For how many times after stretching do you want subsidence/statigraphic
For how many times after stretching do you want subsidence/statigraphic
Do you want intraplate stress calculations? y Give those times + stress (kbar) at each time
n Give those times Give those times
Do you want subsidence curves? (y/n)
Do you want subsidence curves? (y/n)
Do you want plots for temp. structure? (y/n)
Do you want plots for temp. structure? (y/n)
Account for lateral heatflow? (y/n)
Account for lateral heatflow? (y/n)
5
Eindrapportage ICT2001/1
6
Fill with sediments? (y/n)
BMOD runs
n
BMOD runs
Fill with sediments? (y/n) n
Water profile? (y/n)
Water profile? (y/n) y
Compaction? (y/n)
Waterdept h
Waterdept h
Plot stratigraphy? (y/n)
Grain density sediments? (g/cm3)
y Compaction? (y/n)
Plot stratigraphy? (y/n) BMOD runs
BMOD runs
Grain density sediments? (g/cm3)
Figuur 1: blokschema programma BMOD
3.1.3 Ontwikkeling input-gedeelte van het programma De keuze die een gebruiker in het begin kan maken is tussen een "Flexural" en een "Isostatic" model. Alvorens de gebruiker dit punt bereikt, wordt eerst gevraagd of deze door wil gaan met het programma en of de gebruiker in de interactieve modus wil werken, of in de modus waarbij een statische, vooraf aangemaakte, inputfile wordt uitgelezen. Deze inputfile heet "INPUT". Verder komt dan nog de keuze, als de file "INPUT" er al is, om deze al dan niet te overschrijven bij het runnen van BMOD. BMOD maakt overigens zelf de file "INPUT" na elke run aan, als deze er voor de run niet is. De stappen die gemaakt worden zijn in grote lijnen voor beide keuzen van modellering gelijk. De opzet van een "flexural" model biedt meer stappen (zie het schema). Om een run van BMOD mogelijk te maken is nog een file nodig, "PARAMETER.DAT" geheten. Deze is als volgt gedefinieerd: Eerste regel: • litosphere thickness (km) • crustal thickness (km) • thermal expansion coefficient (ºC-1) • temperature asthenosphere (?) (ºC) • thermal diffusivity (m2/s) • mantle density (at surface conditions) (g/cm3) • crustal density (g/cm3) • isotherm defining EET (only used if put on in input file) • 0,02 Tweede regel: • surface porosity (fraction) • depth coefficient for porosity (km-1) Verder is een waterdiepte-profiel file nodig, indien hiervoor gekozen wordt bij het vullen met sediment (zie schema). Voor deze waterprofiel file geldt: Eerste regel: • number of positions and depths (NP) Volgende NP regels:
6
Eindrapportage ICT2001/1
•
7
horizontal position (km), measured from center of first box, water depth (m)
BMOD genereert, al dan niet optioneel, outputfiles bij elke run: Een outputfile, waaraan zelf een naam gegeven kan worden. Plot command files (om datafiles in een specifiek plotprogramma in te laten lezen): • tec.cf • sub.cf • tstr.cf • strat.cf Data files for plots (*** geven tijden aan): • horizon*** • subsid*** • tecsub*** • ts*** Tijdens het project is een webinterface voor BMOD ontwikkeld (zodat het programma te bereiken is via Internet, tijds- en plaatsonafhankelijk) die zowel zorgde voor een gebruiksvriendelijke invul-interface als voor een gebruiksvriendelijke visualisatie van de gegenereerde output. Om deze webinterface te realiseren moest gebruik kunnen worden gemaakt van een webserver waarop het programma BMOD gedraaid kan worden en die ook in staat is om de scripts goed te draaien. Hiertoe moest de server als CGI-server worden ingericht. Binnen het project is zo'n server opgezet. In de opzet is de code van BMOD ongemoeid gelaten. Het is namelijk mogelijk om met scripts externe (buiten het script om) processen te starten, input aan te bieden aan zo'n proces en output ervan op te vangen. Het was in het project ook niet wenselijk om de Fortran-code aan te passen, omdat dit risico's van compilatiefouten vergrootte, zodat BMOD dan niet meer zo goed zou draaien. Dezelfde aanpak is gekozen voor de visualisatie: de scripts stuurden output van BMOD door als input van het visualisatie-programma Gnuplot (is ook volledig via de commandline aan te sturen), vingen de gegenereerde figuren weer op en genereerden vervolgens een webpagina met deze figuren. De CGI-scripts die voor dit project zijn ontwikkeld zijn met de scripting-taal Perl vervaardigd en dragen zorg voor: • • • • • • •
het het het het het het het
laten inloggen van een gebruiker (authenticatie, via Internet) ordenen van de gebruikers sessies en files op de server tonen van de formulieren aan de gebruiker (via Internet) opvangen van de waarden die in de formulieren worden ingevuld aansturen van het programma BMOD opvangen van de output van BMOD visualiseren van de output van BMOD (via Internet)
Dit alles is in stappen ontwikkeld. De eerste stap was het ontwikkelen van scripts puur om BMOD lokaal (off-line, dus nog niet via het internet en zonder formulieren) aan te sturen. De projectmedewerker ICTO, die zorg droeg voor het programmeerwerk, deed in deze periode kennis op van Perl. Die kennis was daarvóór in zeer beperkte mate aanwezig. In de loop van het project kreeg hij ondersteuning van de programmeur/projectmedewerker van Geologie. Vooral in deze beginperiode was meerdere malen overleg en werd ingeschat of de wensen, n.a.v. de eerste ervaringen, haalbaar leken. Hierop kon bevestigend geantwoord worden. Wel werd de aandacht gericht op het programma BMOD en niet op Backstrip. Voor het aansturen van BMOD werd uiteindelijk gekozen voor een dynamisch (door het script) gegenereerde commandfile (lijst commando's onder elkaar) die door het script in BMOD werd geleid. Deze commandfile bevat dus in essentie dezelfde informatie als de file "INPUT" die men door BMOD kan laten inlezen in de niet-interactieve mode. (Eerste maand.)
7
Eindrapportage ICT2001/1
8
De volgende stap was om de (hierboven genoemde) commandfile – dynamisch - op te zetten a.d.h.v. input in een serie webformulieren en het opzetten van die formulieren. Al snel werd de keuze gemaakt om alles door de scripts te laten uitvoeren, zo ook het aanbieden van de formulieren aan de gebruiker. Dit betekent dat het script - dat dus via het Internet wordt gedraaid - dynamisch HTML-pagina's aanmaakt. Er kwamen dus geen "statische" HTML-files op de webserver te staan (dit geldt alleen voor het modelleringsprogramma. Het inlogformulier dat de gebruiker naar het cgi-script leidt is wel een statische HTML pagina). Om de formulieren door het script te laten vervaardigen en deze te kunnen lezen via het Internet werd de CGI-server ingericht. Bij het opzetten van de formulieren werd in eerste instantie gekozen voor dezelfde volgorde als de stappen die gevolgd moeten worden om BMOD via de commandline in te vullen4. Het stroomschema hiervoor werd door de docent geleverd, waardoor volledigheid van de invulling van de parameters kon worden afgedwongen (de ontwikkelaar van de scripts kende daarvoor niet alle opties van BMOD). De formulieren hebben het voordeel dat de gebruiker weer terug kan navigeren naar eerder ingevulde parameters zonder dat BMOD begint te draaien. Dit kan door de opzet met de commandfile: eerst kunnen alle formulieren volledig worden ingevuld, pas als op de "Run"-knop wordt gedrukt wordt (de commandfile aangemaakt en) BMOD aangeroepen.
Figuur 2: Screenshot van het startformulier voor het modelleren met BMOD. Bovenin zijn de hyperlinks naar de verschillende onderdelen te zien: naar het formulier voor de opzet van het model ("Model"); naar de grafieken ("Plots"); naar de files in de gebruikers eigen "werkruimte" ("Files"); naar een functie om het model op te schonen voor nieuw gebruik("Erase").
4
De keuze aan het begin om door te gaan met het programma en de -voor deze opzet met in te vullen formulieren noodzakelijkekeuze om in de interactieve mode te werken, moesten wel worden meegenomen in de commandfile, maar werden niet aan de gebruikers voorgelegd. Zo werd ook standaard gekozen voor het genereren van plotfiles en kreeg de gebruiker hiervoor niet de keuze voorgelegd.
8
Eindrapportage ICT2001/1
9
Figuur 3: Screenshot van het formulier waarin het model wordt opgezet. Ook werd rekening gehouden met de opvang van mogelijke invulfouten: er werd gecheckt op mogelijke invulfouten (waarbij de check dus geschiedt voordat BMOD wordt aangeroepen). Dit is echter zeer intensief, omdat er zeer veel mogelijkheden zijn om de velden verkeerd in te vullen. Dit ondanks het feit dat er bij het opstellen van de formulieren hier zoveel mogelijk rekening mee is gehouden, door gebruikers bijvoorbeeld "dropdown" lijsten , "checkboxes" en "radiobuttons" aan te bieden omtikfouten en andere fouten te voorkomen. Om toch alle fouten op te vangen werd tevens de foutmelding van BMOD (waarbij de check dus geschiedt nádat BMOD is aangeroepen) door het script opgevangen en omgezet in een foutmelding op de formulieren. Dit ondermijnt dus enigszins het bovengenoemde voordeel van het heen- en terugnavigeren in en invullen van de formulieren voordat BMOD runt. In de praktijk blijkt echter dat herstel van de fouten altijd zeer snel gaat en sowieso vele malen sneller en gebruiksvriendelijker dan in het geval van het gebruik van BMOD via de commandline alleen. Er is later aan gebruikers de mogelijkheid gegeven om een debug-file in te kijken, waardoor de fout snel kan worden opgespoord. Deze file heet "DEBUG". Wat betreft de outputfile die BMOD genereert en waaraan de gebruiker bij het runnen van BMOD - via de commandline - zelf een naam kan geven: deze wordt door het script "OUTPUT" genoemd en deze keuze wordt niet meer aan de gebruiker voorgelegd (tweede, derde en vierde maand.)
9
Eindrapportage ICT2001/1
10
Figuur 4: Screenshot van (een deel van) de pagina die de grafieken toont na het draaien van BMOD.
Figuur 5: Screenshot van (een deel van) de pagina die de links naar de files van de gebruiker geeft.
10
Eindrapportage ICT2001/1
11
Het opzetten van de formulieren en het draaien van BMOD werd aan de projectgroep voorgelegd. Besloten werd op de gekozen weg verder te gaan.
3.1.4 Genereren van output gedeelte van het programma (grafieken) Dat was ook het moment om een begin te maken met het zoeken naar een manier om de door BMOD gegenereerde output in grafieken te tonen (visualisatie) via het web. Er werden meerdere pakketten geïnventariseerd die moesten voldoen aan de eis dat de visualisatie dynamisch en via het web mogelijk was. Er werd gekozen voor het pakket Gnuplot dat de mogelijkheid kent om volledig via de commandline gestuurd te worden, dus ook door scripts. Hierbij inbegrepen is de mogelijkheid om dan dynamisch grafieken weg te schrijven (naar de server) in verschillende formaten, waaronder PNG en GIF. Deze zijn dan door het script weer op te nemen in een HTML-pagina. Gekozen werd voor het PNG formaat, omdat dit vrij te gebruiken is en door elke – up-to-date - browser getoond kan worden. Verder is Gnuplot in staat om zowel X-Y-plots als Contourplots te genereren, wat noodzakelijk is voor bruikbare resultaten. De uitvoering kende enig oponthoud, omdat offline de combinatie scripts, BMOD en Gnuplot wel werkte, maar online, d.w.z. via het web, niet. Het aansturen van Gnuplot komt overeen met de manier van aansturen van BMOD: het script maakt dynamisch een commandfile voor Gnuplot aan, stopt deze in Gnuplot en vangt de output (een grafisch bestand in dit geval) op ter verdere verwerking. Output van BMOD fungeerde als input voor Gnuplot (input waar de commandfile naar verwijst), maar moest hiertoe eerst in het goede formaat worden omgezet. Deze opzet werd wederom in de projectgroep besproken en goed bevonden. Enkele wijzigingen, verbeteringen en aanpassingen werden geuit en meegenomen in de verdere uitvoering. (Maand 5.) De laatste stap was het inbedden van het programma in een omgeving waarin gebruikers de nieuwe webinterface van BMOD gelijktijdig te draaien zonder dat zij elkaar "in de weg zitten" en per ongeluk gegevens van elkaar gebruiken, of erger: wissen. Dit vereist dus afhandeling van de sessies (het draaien van een programma) van verschillende gebruikers tegelijkertijd, het netjes wegschrijven van hun gegevens (al dan niet tijdelijk) op de server, het aanbieden van de mogelijkheid om de gegevens door de user zelf te laten managen. Om het systeem de gebruikers te kunnen onderscheiden en om niet elke willekeurige gebruiker op het Internet ervan gebruik te laten maken werd een inlogprocedure en webpagina ontwikkeld. In deze stap werd ook een stuk code ontwikkeld dat ervoor zorgde dat de nodige files in de gebruikersdirectory terechtkwamen. Het gaat hierbij om de files "PARAMETER.DAT" en een waterprofiel file "waterprofile". De module waarin deze worden aangemaakt is "Bmod.pl". Aan de formulieren (in de module "Forms.pl") werd functionaliteit toegevoegd die het voor de gebruiker mogelijk maakt om het waterprofiel zelf te definiëren. Daarnaast kwam een revisie van de indeling van de formulieren: de nieuwe indeling richtte zich meer op een flexibelere volgorde, die dichter aansluit bij het opzetten van het geologische model. De "oude" volgorde wordt in principe nog wel enigszins gevolgd als men van de "Next" (">>") knop op het formulier gebruik maakt. De ingevulde waarden worden steeds bijgehouden zodat men ook weer terug kan naar eerder ingevulde formulieren. Het verschil met de eerste versie is dat de waarden nu in een file worden weggeschreven, en dat ze kunnen worden opgehaald wanneer nodig5. 5
In de eerste versie werden alle waarden steeds alleen als "hidden field" in de dynamisch gegenereerde HTML-files weggeschreven. In die versie was het wegschrijven naar een file niet nodig, omdat één vaste volgorde van opeenvolgende formulieren werd aangehouden en de ingevulde waarden behouden bleven in de browser als men met de "Back"-toets van de browser terugnavigeerde. In de nieuwe versie ligt de volgorde niet geheel vast en blijven ook de ingevulde waarden niet door de browser behouden als men de "Back" toets gebruikt, zodat wegschrijven de beste oplossing is. (Dat met de browser het terugnavigeren niet lukt is een bijkomend verschijnsel van de opzet van het sessiebeheer.) Om toch terug te kunnen navigeren is in de formulieren een speciale "Back"-toets ("<<") opgenomen.
11
Eindrapportage ICT2001/1
12
Het script dat tot dan toe uit één file bestond, wordt opgedeeld in meerdere modules. Dit maakt het zowel overzichtelijker als modulair, zodat latere uitbreidingen en aanpassingen beter uit zijn te voeren. Verder werd het uiterlijk nog wat verfraaid en kleine verbeteringen aangebracht. deze fase werd voornamelijk uitgevoerd door de programmeur van Geologie. (Maand 6.) De uiteindelijke versie werd ingezet op het practicum. Hierbij kwamen nog enkele foutjes aan het licht die direct werden opgelost. In een later overleg werden alle extra wensen kenbaar gemaakt, maar werd ook geconstateerd dat deze een lagere prioriteit hebben.
12
Eindrapportage ICT2001/1
13
Web server CGI server Gebruiker
WWW URL Inlogformulier
Op de server wordt nu één script geactiveerd dat alles afhandelt
Formulieren in te vullen door de gebruiker
Inloggen Aanmaken werkplek gebruiker op server (eenmalig) Hier de files e.d. voor die
Op de formulieren verschijnt een knop om BMOD te starten, zodra dit mogelijk is
Aanmaken commandfile BMOD BMOD laten runnen met commandfile als input
Aanmaken commandfile Gnuplot Gnuplot laten runnen met commandfile en output BMOD als input Door Gnuplot gegenereerde grafieken verschijnen in webpagina
Gebruiker kan naar believen files opvragen, grafieken bekijken en opnieuw modelleren en runnen
13
Eindrapportage ICT2001/1
14
3.2 Vernieuwing van het onderwijs De doelstelling van de cursus blijkt bij aanvang van het project niet duidelijk te zijn. Deze wordt losjes in de handleiding omschreven als: ‘The aim of this practical course is to gain some insight in the basic principles underlying the numerical analysis and modelling of the tectonic evolution of sedimentary basins using computer programs’. In de afgelopen tien jaar is het onderwijsonderdeel rondom het modelleren van extensiebekkens min om meer organisch gegroeid, er is niet systematisch geëvalueerd en de mix van mensen en middelen is vrij ondoordacht tot stand gekomen. De huidige opdrachtomschrijving voor de vijf dagdelen van het BMOD practicum bestaat uit één A-4tje. Het geeft zowel studenten als medewerkers weinig houvast voor het doorlopen van het practicum. Het is een observatie van de medewerkers dat het eindresultaat van het practicum (een rapport met daarin een uitwerking van de opdrachten) laat zien dat veel studenten toch nog veel elementaire fouten maken, dat zij niet toekomen aan de meer complexe opdrachten en dat er weinig mogelijkheid is om via gestructureerde feedback studenten beter te ondersteunen. De medewerkers ervaren deze tekortkoming van de cursus deels bewust, deels onbewust.
3.2.1 Verwachtingen Er wordt overeengekomen om de inhoud van de cursus en de aangeboden taken kritisch door te nemen, opnieuw vast te stellen en zo mogelijke te wijzigen, verbeteren of aan te passen. Gezien de randvoorwaarden van het project (mensen, middelen, tijd) kan echter niet de gehele cursus gereviseerd worden. Een van de tentameneisen blijft bijvoorbeeld het verzorgen van een presentatie over interpretatie van eigen data met behulp van de Basin Analyses software. Het project zal zich concentreren op de aanpak van het practicumgedeelte van de cursus. Dat wordt op zijn beurt weer geconcentreerd rondom het gedeelte van het voorwaarts modelleren (BMOD) omdat alleen daarvoor besloten is een web-interface te ontwikkelen.
3.2.2 Uitwerking Door middel van een aantal werkoverleggen en gesprekken worden uiteindelijk de doelstelling van het practicum als volgt vastgelegd: At • • • • • • •
the end of this course the student should: be able to name the most important mechanisms for extensional basin formation be able to describe qualitatively the effect of the first-order parameters on the basin-geometry have a feeling for the orders of magnitude of these parameters, as well as for the dimensions of sedimentary basins be able to describe and use the concepts 'effective elastic thickness' (of the lithosphere) and 'necking-depth' be able to 'translate' stratigraphic patterns (as observed in sedimentary basins) into variation in vertical movements of the lithopshere understand the influence of variations in sealevel and waterdepth on the stratigraphy have insight in the strength but also the limitations of numerical modelling in basin analysis
Deze leerdoelen worden vervolgens gebruikt om de cursus zoals deze tot dan toe was vormgegeven mee door te lichten. Hieruit zijn een aantal te realiseren verbeterpunten naar voren gekomen. 1. Het is belangrijk dat bij studenten de voorkennis meer geactiveerd wordt voordat zij aan de practicumopgaven beginnen. Er wordt daarom besloten om een aantal voorkennistoetsen te maken. Die toetsen zullen via Blackboard aangeboden worden. Essentieel is dat de aangeboden feedback de cursisten voldoende houvast moet bieden en motiveren om zelfstandig (of in
14
Eindrapportage ICT2001/1
15
discussie met een medecursist of begeleider) de gevraagde kennis of inzicht alsnog te verwerven. Zie figuur 9 voor een voorbeeld van een voorkennisvraag. Uiteindelijk zijn er twee voorkennistoetsen ontwikkeld met in totaal 14 voorkennisvragen. Zie voor een voorbeeld van een vraag in Figuur 6: voorbeeld van voorkennistoetsvraag.
Figuur 6: voorbeeld van voorkennistoetsvraag. 2. Het is belangrijk dat de opdrachten van het practicum gestructureerder aangeboden worden. Voor de nieuwe opdrachtstructuur wordt vastgesteld dat studenten moeten beginnen met eenvoudige opdrachten zodat de elementaire begrippen en handelingen stapsgewijs geleerd worden (en zo mogelijk individueel voor afstandsstudenten). Deze opdrachten moeten goed aansluiten bij de voorkennistoetsen. Daarna kunnen wat meer complexe en open opdrachten worden gedefinieerd. Zie Figuur 7 voor de hoofdstructuur van de drie dagdelen zoals zichtbaar gemaakt in Blackboard via zogenaamde Learning Units.
Figuur 7: Learning Unit q
Bij afronding van elke opdracht dient er een mogelijkheid te zijn dat een begeleider feedback kan geven. Om dit te stimuleren dienen de cursisten hun antwoord op de opdracht in te voeren in Blackboard waarna zij een vrij algemene feedback van het systeem krijgen. Die feedback moet zodanig zijn dat studenten gemotiveerd worden om zelfstandig (of in discussie met een medecursist of begeleider) de gevraagde kennis of inzicht alsnog te verwerven. Zie figuur 8 voor een voorbeeld van Assignment 1-4 met bijbehorende feedback.
15
Eindrapportage ICT2001/1
16
figuur 8 3. Er wordt voor gekozen om de opdrachten waarin cursisten met de geavanceerde versie van de BMOD software werken geheel te schrappen. De redenen daarvoor zijn: q Het ontwikkelen van een webinterface van de geavanceerde versie zou niet lukken binnen de randvoorwaarden van het project. q Het vaststellen van het rooster voor de cursus is dermate moeizaam dat er uiteindelijk slecht drie dagdelen in plaats van vijf dagdelen beschikbaar zijn voor het practicum. Bovendien kwamen cursisten in de oorspronkelijke opzet sowieso niet toe aan dat onderdeel van de opdracht. q Voor het behalen van de vastgestelde doelstellingen van het onderwijsonderdeel is het werken met de geavanceerde mogelijkheden niet nodig.
3.3 Veranderende cursistenpopulatie De cursus wordt jaarlijks door rond de 25 studenten gevolgd. De deelnemers zijn te verdelen in drie groepen: q De eerste groep betreft de reguliere voltijdstudenten (jongvolwassenen) q De tweede groep betreft een groeiende groep buitenlandse voltijdstudenten die in het kader van bijvoorbeeld Europese uitwisselingsprogramma’s het onderwijsonderdeel volgen (jongvolwassenen). q De derde groep betreft een groeiende groep reeds afgestudeerden die het onderwijs volgen in het kader van een vervolgstudie, specialisatie of promotie met een achtergrond uit industrie, consultancies of academia (volwassenen). Er bestaat een wens om deze cursisten ook de mogelijkheid te bieden om het onderwijs op afstand te kunnen volgen. De groep niet-reguliere VU-studenten groeit de laatste jaren sterk. Dat komt onder andere omdat de inhoud van de cursus vrij uniek is in Europa. Dit wordt gestimuleerd door een zo direct mogelijke koppeling van onderzoek en onderwijs op het gebied van de tektoniek van sedimentaire bekkens te leggen. Vaak blijven buitenlandse deelnemers langer om hun eigen gegevens verder te interpreteren met de Basin Analyses software. Dit geeft op zijn beurt de VU-studenten de mogelijkheid om mee te kijken met internationale onderzoek. Bij aanvang van het project is reeds ongeveer 25% van de deelnemers is van buiten de VU afkomstig. Het belangrijkste is dat het studeergedrag van de jongvolwassenen sterk verschilt van de volwassenen en dat onderwijs op afstand een andere aanpak en middelen vergt dan een reguliere practicumaanpak met een belangrijke face-to-face component. De drie verschillende groepen studenten vragen ieder om een mogelijkheid om deze specifiek te ondersteunen.
16
Eindrapportage ICT2001/1
17
3.3.1 Verwachtingen Als uitgangspunt voor de verdere ontwikkeling van de cursus wordt aangenomen dat het ontsluiten van cursusmateriaal, practicummateriaal en opdrachten via een cursuswebsite als voorwaardelijke mogelijkheid wordt geaccepteerd om de flexibiliteit van het cursusonderdeel vorm te kunnen geven. Het ontsluiten via het web maakt het mogelijk om materiaal en oefeningen tijd- en plaatsonafhankelijk aan te bieden en maakt het mogelijk om materiaal flexibeler en in meerdere vormen of uitvoeringen aan te bieden. Een nader uitgangspunt is dat daar voor de Digitale Leeromgeving Blackboard van de faculteit als basis wordt gebruikt. Het is nadrukkelijk niet de bedoeling dat de gehele cursus vanaf het web kan worden gevolgd. Een bepaalde mate van persoonlijk contact met de docenten is noodzakelijk maar zal zich meer richten op fundamentele aspecten van de stof dan op technische randvoorwaarden zoals in de oude opzet. Het is in het kader van het project de verwachting dat afstandsstudenten nooit geheel het onderwijs op afstand kunnen uitvoeren. Het is met name de verwachting dat zij op afstand bijvoorbeeld: q de cursusvoorbereiding kunnen uitvoeren (bijvoorbeeld de voorkennistoetsen gebruiken) om te bepalen of zij al toe zijn aan het cursusonderdeel). q stof door middel van zelfstudie via het web kunnen bestuderen q de afronding van het cursusonderdeel kunnen uitvoeren (op de eigen lokatie doorwerken met de BMOD software voor nadere opdrachten, uitwerkingen of onderzoeken). In het kader van het project is overwogen om studenten mogelijk via video-conferencing daadwerkelijk op afstand te laten werken en te begeleiden. Gezien de randvoorwaarden van het project (namelijk dat de BMOD webinterface pas in de laatste fase van het project zou werken) is daarvan afgezien.
3.4 Cursusuitvoering Begin april 2002 waren de software en de cursus net op tijd gereed voor de cursusuitvoering. De cursus vond plaats op 10, 11 en 12 april. De cursusuitvoering werd uiteindelijk geplaagd door een aantal problemen: 1. Door de roosterproblemen waren er slechts 2 uren per practicumsessie beschikbaar, terwijl in het ontwerp van de oefeningen en opdrachten rekening was gehouden met een tijd van 3,5 uur. Dit probleem is uiteindelijk opgelost door de groepen studenten in hun eigen tijd toegang te geven tot de computerfaciliteiten. Hierdoor is het echter wel heel moeilijk geworden om te kunnen bepalen of de uiteindelijke opzet van het practicum tot de gewenste positieve resultaten heeft geleid. 2. De software werkte op zich prima, maar door het gebruik van een ander platform waarop de webbrowser draaide, traden toch nog vervelende softwareproblemen op. Het belangrijkste probleem was wel dat het niet lukte om de grafieken die het programma gegenereerd te kunnen printen. Daarom moest tijdens de uitvoering van het practicum nog extra software geïnstalleerd worden. Er kunnen echter een aantal duidelijke bevindingen genoteerd worden. 1. De webinterface heeft (naar mening van de cursusleider en practicumbegeleiders) zeker de vereenvoudiging in de bediening opgeleverd die verwacht was. De begeleiders gaven aan veel minder tijd kwijt te zijn aan het uitleggen van het programma en het verhelpen van technische problemen. De webinterface is uiteindelijk simpel, intuïtief en onthoudt voor de gebruiker de – in de door hem in verschillende stappen ingevoerde – gegevens vanzelf. 2. De voorkennnistoetsen stimuleren studenten sterk om snel en gericht met de opdrachten en oefeningen aan de slag te gaan. De feedback is zodanig dat studenten gestimuleerd worden om zelfstandig (of in discussie met een medecursist of begeleider) de gevraagde kennis of inzicht alsnog te verwerven of te verdiepen. Het feit dat studenten hun antwoorden op de opdrachten via een ‘Quiz’ moesten inleveren werd door één niet als positief ervaren. Hij merkt op: ‘I think
17
Eindrapportage ICT2001/1
18
it's not right of your final grade is based on this kind of tests. You should LEARN something here, not being tested!!!!’. Het concept ‘leren door toetsen’ is hem vreemd. 3. De opdrachtstructuur is voor de meeste studenten helder. De begeleider is in staat om via Blackboard beter te volgen wat de voortgang is van de groepen. Het volgen van de voortgang gaat goed via het Online Gradebook van Blackboard. Zie figuur 9.
figuur 9 4. Tijdens de uitvoering van het practicum blijkt duidelijk het verschil tussen de jongvolwassen en de volwassenen. q De jongvolwassenen gaan direct aan de slag met de voorkennistoetsen en de opdrachten. Ze bekommeren zich weinig om de achtergrond en inhoud van de stof. Zij zijn redelijk snel tevreden met hun antwoord op opdrachten. De jongvolwassenen proberen ook aan elkaar het ‘goede’ antwoord door te geven dat als feedback op de voorkennistoetsen en de opdrachten wordt gegeven. De feedback op de opdrachten is echter wel een reden voor hen om veel vragen te stellen aan de begeleiding. q De volwassenen gaan naar aanleiding van de voorkennistoetsen en de opdrachten juist eerst uitgebreid de theorie en literatuur doornemen. Zij stellen voorafgaand aan het beantwoorden van de vragen al veel vragen aan de begeleiding. Ze reageren kritisch op de feedback die gegeven wordt bij de toetsvragen. q De conclusie is dat bij een volgende uitvoering van de cursus, de twee groepen apart genomen zouden moeten worden. De jongvolwassenen zouden nog meer en gestructureerde kunnen werken. Het opnemen van groepsgewijze terugkoppeling en feedback verzorging zou het onderwijs voor hen ten goede komen. De exacte feedback op de voorkennistoets en de opdrachten zou later ter beschikking kunnen worden gesteld en niet direct na beantwoording van de vraag.
18
Eindrapportage ICT2001/1
19
4 Conclusies een aanbevelingen 4.1 Procesevaluatie Tijdens de projectuitvoering bleek het moeilijk om de werkzaamheden voldoende snelheid te geven. Dat had een aantal oorzaken. Taakverdeling tussen programmeurs De taakverdeling tussen de programmeurs verliep niet erg soepel en er waren de nodige communicatieproblemen. Toen de deadline naderde verliep de samenwerking echter soepeler. Op het moment dat de cursus draaide was de software net operationeel. Taakverdeling voor de onderwijsuitvoering Het was lange tijd onduidelijk wie uiteindelijk als docent de uitvoering van het practicum ter hand zou nemen. De oorspronkelijk docent bleek bij een ander onderdeel van de opleiding werkzaam te zijn geworden. Gelukkig wilde zij toch nog tijd ter beschikking stellen om aan een nieuweOp het laatste moment werd pas duidelijk wie het practicum daadwerkelijk ging begeleiden. Het zal duidelijk zijn dat zij nog zeer goede input hebben gehad bij de ontwikkeling van de web-interface, maar dat zij zich veel minder goed hebben kunnen voorbereiden en bewustworden van de wijzigingen in de opzet van de curus. Ook waren ze niet geschoold in het gebruik van Blackboard. Problemen met Blackboard konden zij derhalve niet oplossen. Bovendien konden ze daarom niet op een optimale manier gebruik maken van de mogelijkheden die Blackboard biedt om studenten te informeren en begeleiden. Het is duidelijk dat de medewerkers die in deze cursus werkzaam zijn, goed moeten kunnen werken met Blackboard. Het volgen van een cursus van het ICT Onderwijscentrum kan een eerste stap zijn.
4.2 Continuering van het ontwikkelde product en onderwijs De huisprogrammeur van de vakgroep heeft na afloop van het project (overigens niet vanwege het project zelf) de faculteit verlaten. De vakgroep heeft aangegeven de applicatie zelf verder te willen ontwikkelen en wil uiteindelijk ook de andere modelleringstechnieken via het internet ontsluiten. Door het vertrek van de programmeur komt dit aspect echter in gevaar. De ontwikkelde documentatie rondom de software die ontsloten wordt in dit rapport is hopelijk voldoende om de opgedane kennis en expertise niet verloren te laten gaan en nieuwe ontwikkelingen te starten. Zoals bleek tijdens het project, is de personele samenstelling rondom de onderwijsuitvoering nogal eens aan wijzigingen onderhevig. De onderwijsgevenden hebben nog geen vaardigheid in het omgaan met Blackboard en de ontwikkelde webomgeving kunnen zij wel bedienen, maar hun kennis van de opbouw van de programmatuur is onvoldoende. Het moet expliciet in het personele ontwikkelingsplan van de faculteit worden opgenomen dat deze expertise opgebouwd en onderhouden dient te gaan worden.
4.3 Inhoudelijke resultaten en aanbevelingen 4.3.1 Begripsvorming verbeterd De uiteindelijke resultaten van het project dienden te zijn dat studenten op een efficiëntere en effectiever manier tot begripsvorming rondom het voorwaarts modelleren zouden komen. De vraag is of dat gelukt is. Vastgesteld kan worden dat er een goed werkende internetomgeving is ontwikkeld. De omgeving is intuïtief en eenvoudig te bedienen. De opzet van het onderwijs is zodanig dat verwacht mag worden dat studenten inderdaad gestructureerder en actiever met de stof bezig zijn. Helaas is het niet mogelijk gebleken door allerlei externe factoren (zie paragraaf 3.4) tijdens het uitvoeren van het onderwijs om de hoofdvraag goed te beantwoorden. Er kunnen geen empirische gegevens worden gegenereerd die een betrouwbare vergelijking kunnen geven tussen de oude situatie
19
Eindrapportage ICT2001/1
20
en de nieuwe situatie. Het is een belangrijke aanbeveling om deze vergelijking uit te voeren bij de komende uitvoering van deze cursus en het practicum.
4.3.2 Geschikt voor afstandsstudenten De nieuw ontwikkelde interface zou het mogelijk moeten maken dat studenten eenvoudiger op afstand het cursusonderdeel zouden kunnen volgen. Gezien de beschikbaarheid van de simulatieomgeving binnen de reguliere internetomgeving zou dit goed mogelijk moeten zijn. De structuur die is aangebracht binnen het practicum en de informatie die besloten ligt binnen de Blackboard cursusomgeving maakt het ook mogelijk om dit onderwijsonderdeel eenvoudiger op afstand aan te bieden. Wel is het zo dat voor volledig afstandsonafhankelijke aanbieding extra maatregelen getroffen dienen te worden. Zo zal er naar een vrij intensieve vorm van communicatie toegewerkt moeten worden, bij voorkeur gebruikmakend van de communicatiefaciliteiten van Blackboard (white-board toepassingen, discussionboard toepassingen, group-pages) en e-mail of videoconferencing contact. Het realiseren van deze onderwijsvorm vraagt echter visie, inzet en gerichte scholing die in het kader van dit project niet realistisch was.
4.3.3 Verder verbeteren De interface van BMOD via het internet kan nog enkele verbeteringen gebruiken die in de toekomst vrij eenvoudig gerealiseerd zouden kunnen worden. De volgende functies zouden met name gerealiseerd moeten worden: § Printen: oplossen van bugs in verschillende browsers, verbeteren van lay-lout mogelijkheden. § In- en uitzoomen op grafieken moet mogelijk worden. § Behouden van modeldata gedurende runs zodat in verschillende – in tijd uit elkaar liggende sessie – met de software gewerkt kan worden. In het kader van de uitvoerbaarheid van het project is besloten om alleen het practicumgedeelte van de cursus aan te pakken. Het spreekt voor zich dat het goed zou zijn de gehele cursus nog eens aan een goede analyse en revisie te onderwerpen.
20
Eindrapportage ICT2001/1
21
5 Bijlage: Files en code BMOD webinterface Bijlage files en code BMOD webinterface 5.1 File "index.html" Inlogpagina. De pagina waarnaar gelinkt wordt (bijvoorbeeld vanuit Blackboard) om in de webinterface in te loggen.Inleveren van het formulier (submit) start index.cgi. Bmod <script> function setnext ( next ) { // main.next="string" document.mainfrm.next.value = next; // submit document.mainfrm.submit(); }
22
Eindrapportage ICT2001/1
23
5.2 Hoofddeel cgi-programma "index.cgi" De body van het programma; het aanroepen van de modules. #!/usr/bin/perl # # index.cgi # # imports use CGI qw(:standard); # this is necessary: $ENV{'LD_LIBRARY_PATH'} = '/usr/local/lib:/usr/lib:/lib'; # global vars used in our special imported modules $ID = undef; $NAME = undef; $DIR = undef; $BMOD = "/home/tecpub/bin/bmod"; $GNUPLOT = "/usr/local/bin/ gnuplot"; my %data; $nextform="main"; my $currentform; # our own source modules (.pl) do "Session.pl"; do "Gnuplot.pl"; do "Bmod.pl"; do "Forms.pl"; # html header START print "Pragma: no-cache\r\n"; print "Cache-Control: no-cache\r\n"; print "Content-type: text/html\r\n\r\n"; if (param("user")) { # start a new session for this user Session_create(param("user"),param("password")); } elsif (! (&Session_is(param("session")))) { # oops! no valid session was found Session_invalid(); exit 1; }; # we have a session, so open it: Session_open(); # # MAIN program flow is below here #
23
Eindrapportage ICT2001/1
24
print <<EOF0; Bmod <script> function setnext ( next ) { document.mainfrm.next.value = next; document.mainfrm.submit(); } EOF4 # close and exit Session_close(); # html END # # end of index.cgi #
25
Eindrapportage ICT2001/1
26
5.3 File "index.cache" Wat doet dit precies? serveall=true file=index.html&content=text/html; charset=iso-8859-1&title=Bmod file=index.cgi&content=text/plain; charset=iso-8859-1&title=File index.cgi&attributes=512 file=push.cgi&content=text/plain; charset=iso-8859-1&title=File push.cgi&attributes=512
5.4 File "index" Wat doet dit precies? attributes=serveall file=index.html file=index.cgi Attributes=cgi
26
Eindrapportage ICT2001/1
27
5.5 File "Session.pl" Deze module handelt de "sessies" af van de gebruikers, die het systeem via Internet bezoeken en vervolgens inloggen. Een eigen directory wordt aangemaakt waar de noodzakelijke files, die iedereen behoort te hebben, in worden gezet en waar de files terechtkomen die door die gebruiker bij het modelleren worden aangemaakt. Bij erop volgende keren dat er door de gebruiker wordt ingelogd wordt automatisch in de bestaande corresponderende directory gewerkt. Er wordt dus gecheckt of de gebruiker al eerder heeft ingelogd en dus al zijn directory heeft; heeft hij deze niet dan wordt hij aangemaakt. Deze directory wordt dus ook in vervolgsessies gebruikt. Niet-geregistreerde gebruikers wordt kenbaar gemaakt dat de sessie niet geldig is. sub Session_is { # check to see if this is a valid session $ID = shift; $DIR = "/var/tmp/bmod/$ID"; return (($ID ne "") && (-d $DIR)); }; sub Session_create { # create a new session from the input provided by generating # a unique session ID and generating it's appropriate session # directory $NAME = shift; $PWD = shift; ($login,$pwd,$uid) = split (/:/, `ypmatch $NAME passwd`, 3); if ($login eq $NAME) { $ID = $NAME; $DIR = "/var/tmp/bmod/$ID"; mkdir $DIR, 0755; # write the users name in a file open USERNAMEFILE, ">$DIR/username"; print USERNAMEFILE $NAME . "\ n"; close USERNAMEFILE; } return; }; sub Session_delete { # delete the session and all of it's files return; }; sub Session_open { # open a session $DIR = "/var/tmp/bmod/$ID"; chdir $DIR; open USERNAMEFILE, "<$DIR/username"; $NAME = ; chomp $NAME; close USERNAMEFILE; return; };
27
Eindrapportage ICT2001/1
28
sub Session_close { # close a session chdir '/home/web/gorge'; return; }; sub Session_invalid { # return a session-invalid message forcing the user to start # over again print <<EOF; <META HTTP-EQUIV=Refresh CONTENT="10; URL=http://gorge.geo.vu.nl/">
Session expired or invalid
Please log in again with a valid session. You will be taken there automatically after 10 seconds.
EOF return; }; # # end of Session.pl # 1;
28
Eindrapportage ICT2001/1
29
5.6 File "Bmod.pl" Module om BMOD aan te sturen. Creëert de commandfile voor BMOD. Zorgt voor het aanmaken van files, zoals de file "PARAMETER.DAT", die noodzakelijk is en "waterprofile" die nodig is indien voor modellering met een waterprofiel wordt gekozen; of juist het verwijderen van files, zoals "INPUT" die voor elke run verwijderd moet worden en van "OUTPUT". ("OUTPUT" bevat een samenvatting van de resultaten. Met deze samenvatting wordt verder niets gedaan en voegt in deze opzet niets toe.) De aanwezigheid van "INPUT" veroorzaakt een extra commandline-vraag van BMOD of "INPUT" overschreven mag worden. Die vraag zorgt ervoor dat de commandfile uit de pas gaat lopen met BMOD. BMOD maakt de file bij elke run weer aan. Ook foutmeldingen van BMOD worden hier afgevangen en vertaald naar een melding in de formulieren. sub run_bmod { # clean up stuff first: if ( -f "INPUT" ) { unlink "INPUT"; } if ( -f "OUTPUT" ) { unlink "OUTPUT"; } foreach ( `ls ts???? tecsub???? horizon???? subsid???? *.cf` ) { chomp; unlink $_; } # then create whateva needad: create_parameter_dat(); create_waterprofile(); create_cmd_file(); # and run bmod: open (BMODOUT, "$BMOD < cmdfile |"); open (DEBUG, ">DEBUG"); $num_lines_output = 0; $i = 0; while ( ) { print DEBUG $_; chomp; $output[$i] = $_; if ( ( $output[$i] =~ /NONSENSE/ ) || ( $output[$i] =~ /WATERDEPTH/ ) ) { close(BMODOUT); close(DEBUG); print h2("An error has occurred"); print "
An error has occurred while running Bmod, please check "; print "your input and try again
} sub create_parameter_dat { # create a default PARAMETER.DAT if needed if ( defined $data{"eet_isotherm"} ) { open ( PARMFILE, ">PARAMETER.DAT" ); printf PARMFILE " 125. 30.0 0.340E-04 1333. 7.8E-07 3.33 2.80 %.1f 0.02\n0.50 0.50\n", $data{"eet_isotherm"}; close ( PARMFILE ); } elsif (! -f "PARAMETER.DAT" ) { open ( PARMFILE, ">PARAMETER.DAT" ); print PARMFILE " 125. 30.0 0.340E-04 1333. 7.8E-07 3.33 2.80 450. 0.02\n0.50 0.50\n"; close ( PARMFILE ); } } sub create_waterprofile { # create the waterprofile file if ($data{"water_profile"} eq "y") { open ( WATERP, ">waterprofile" ); @wp = split (/:/, $data{"water_profile_data"}); print WATERP $#wp . "\n"; foreach ( @wp ) { print WATERP $_ . "\n" ; } close ( WATERP ); } } sub create_cmd_file { unless ( open CMD, ">cmdfile" ) { die "Cannot open cmdfile\n"; } print CMD "y\nOUTPUT\ni\n"; print CMD $data{"iso_flex"} . "\n"; if ( $data{"iso_flex"} eq "f" ) { print CMD $data{"elast_iso"} . "\n"; if ( $data{"elast_iso"} eq "e" ) { print CMD $data{"eet_value"} . "\ n"; } } print CMD $data{"num_boxes"} . "\ n"; print CMD $data{"box_width"} . "\n"; if ( $data{"iso_flex"} eq "f" ) { print CMD $data{"grid_spacing"} . "\ n"; } for ( $i = 0 ; $i < $data{"num_boxes"} ; $i++ ) { printf CMD "\t%0.3f\t%0.3f\n", $data{"beta$i"}, $data{"delta$i"}; } print CMD $data{"num_ages"} . "\ n"; if ( $data{"iso_flex"} eq "f" ) { print CMD $data{"intra_stress"} . "\ n"; } if ( $data{"intra_stress"} eq "y" ) {
30
Eindrapportage ICT2001/1
31
for ( $i = 0 ; $i < $data{"num_ages"} ; $i++ ) { printf CMD "\t%0.3f\t%0.3f\n", $data{"age$i"}, $data{"stress$i"}; } } else { # zowel voor iso als voor flex met intra_stress niet-on for ( $i = 0 ; $i < $data{"num_ages"} ; $i++ ) { printf CMD "\t%0.3f\n", $data{"age$i"}; } } print CMD "y\n"; print CMD "y\n"; print CMD $data{"heat_flow"} . "\n"; print CMD $data{"sedim_fill"} . "\n"; if ( $data{"sedim_fill"} eq "y" ) { print CMD $data{"water_profile"} . "\n"; if ( $data{"water_profile"} eq "y" ) { print CMD "waterprofile\n"; } print CMD $data{"compaction"} . "\n"; print CMD "y\n"; printf CMD "\t%0.3f\t\t\t#grain density (gr/cm3)\n", $data{"grain_density"}; } close(CMD); }
31
Eindrapportage ICT2001/1
32
5.7 File "Forms.pl" Deze module bevat alle code voor het -dynamisch- genereren van de formulieren die door de gebruiker moeten worden ingevuld. Het eerste formulier toont de knoppen naar de andere formulieren die ingevuld kunnen of moeten worden. Als de gebruiker een formulier moet invullen verschijnt voor de knop naar dat formulier een uitroepteken. Er wordt dus gecheckt of er nog formulieren zijn waar men nog naartoe moet. Zodra er voldoende gegevens zijn om BMOD te kunnen draaien, verschijnt er een knop "Run BMOD", maar men is dan niet verplicht om die al te kiezen. Er zijn ook "Next" en "Back" knoppen. Als de gebruiker consequent voor "Next" alleen kiest zal BMOD gestart worden, zodra geen verdere gegevens nodig zijn om BMOD te draaien voor dat specifieke model. Hier worden tevens de waarden uit de file met parameterwaarden "DATA" gehaald en er ook in weggeschreven, en de historie van de formulieren wordt bijgehouden (zie de functie "do_getset_data()"). Als een formulier bezocht wordt dat al eerder is ingevuld, worden de waarden van de parameters (uit DATA) daar weer in ingevuld, voor de niet-eerder ingevulde parameters wordt een default (maar wel zinnige) waarde ingevuld. sub page_title { # then print a nice title: for ( $currentform ) { /^erase$/ && do { return "
Bmod - Erase your model
\n"; next; }; /^eraseit$/ && do { return "
Bmod - Model erased
\n"; next; }; /^files$/ && do { return "
Bmod - Your files
\n"; next; }; /^main$/ && do { return "
Bmod - Model
\n"; next; }; /^setup$/ && do { return "
Bmod - Model setup
\n"; next; }; /^flexure$/ && do { return "
Bmod - Flexural model setup
\n"; next; }; /^boxdef$/ && do { return "
Bmod - Box setup
\n"; next; }; /^boxval$/ && do { return "
Bmod - Box thinning
\n"; next; }; /^stress$/ && do { # return "
Bmod - Box stress levels
\n"; next; }; return "
Bmod - Stress levels per age
\n"; next; }; /^agedef$/ && do { return "
Bmod - Age setup
\n"; next; }; /^ageval$/ && do { return "
Bmod - Ages for plots
\n"; next; }; /^misc$/ && do { return "
Bmod - Miscellaneaous
\n"; next; }; /^water$/ && do { return "
Bmod - Water profile
\n"; next; }; /^result$/ && do { return "
Bmod - Results
\n"; next; }; /^plots$/ && do { return "
Bmod - last results
\n"; next; }; } } sub checkp {
32
Eindrapportage ICT2001/1
33
# Pretty check return check (shift) ? " " : "!"; } sub checkall { $testall = 1; foreach ( "setup", "flexure", "boxdef", "boxval", "stress", "agedef", "ageval", "water", "misc") { $testall &&= check ($_); } return $testall ? 1 : 0 ; } sub whichnext { foreach ( "setup", "flexure", "boxdef", "boxval", "stress", "agedef", "ageval", "water", "misc") { if (check($_) == 0) { return $_; } } return "result"; } sub check { # check each section for ( shift ) { /^setup$/ && do { $test = (defined $data{"iso_flex"}); next;}; /^flexure$/ && do { $test = defined $data{"elast_iso"}; $test ||= ($data{"iso_flex"} eq "i"); next;}; /^boxdef$/ && do { $test = (defined $data{"num_boxes"} && defined $data{"box_width"}); next;}; /^boxval$/ && do { $test = 1; for ($n=0 ; $n < $data{"num_boxes"} ; $n++) { $test &&= defined $data{"beta$n"}; $test &&= defined $data{"delta$n"}; } next;}; /^stress$/ && do { $test = 1; for ($n=0 ; $n < $data{"num_ages"} ; $n++) { $test &&= defined $data{"stress$n"}; } $test ||= ($data{"intra_stress"} eq "n") || ($data{"iso_flex"} eq "i"); next;}; /^agedef$/ && do { $test = (defined $data{"num_ages"}); next;}; /^ageval$/ && do { $test = 1;
33
Eindrapportage ICT2001/1
34
for ($n=0 ; $n < $data{"num_ages"} ; $n++) { $test &&= defined $data{"age$n"}; } next;}; /^misc$/ && do { $test = 1; if ($data{"elast_iso"} eq "e") { $test &&= defined $data{"eet_value"} } if ($data{"water_profile"} eq "y") { $test &&= defined $data{"grain_density"} } if ($data{"iso_flex"} eq "f") { $test &&= defined $data{"grid_spacing"} } if ($data{"elast_iso"} eq "i") { $test &&= defined $data{"eet_isotherm"} } next;}; /^water$/ && do { $test = defined $data{"water_profile_data"} || ($data{"water_profile"} ne "y"); next;}; } return $test ? 1 : 0; } sub do_getset_data { # read all available data from file if ( -f "DATA" ) { open (DATA, "DATA"); while () { chomp; ($name, $val) = split ( /=/, $_ ); $data{$name} = $val; } close (DATA); } # append newly provided data from POST # here we move all values from (param("")) to %data foreach ("box_width", "eet_value", "eet_isotherm", "elast_iso", "grain_density", "grid_spacing", "iso_flex", "num_boxes", "num_ages", "water_profile_name") { if ( param($_) ) { $data{$_} = param($_); } } if ( param("water_profile_data") ) { $data{"water_profile_data"} = ""; foreach (split (/\n/, param("water_profile_data"))) { $_ =~ s/\r//g ; $data{"water_profile_data"} .= $_ . ":"; }
There is no need to fill in 0 Ma, bmod will always calculate "; print "that age. Also make sure the ages are increasing continuously
\n";
41
Eindrapportage ICT2001/1
42
next; }; /^misc$/ && do { # grain density print h4("Grid spacing"); print "
Grid Spacing (km)
"; print "
\n\n"; print "
The number of grid lines may not exceed 200, and the number of grid lines within each box must be an integer number.
\n"; print h4("EET Thickness"); print "
EET thickness (km)
"; print "
\n\n"; print h4("EET isotherm"); print "
EET isotherm (C)
"; print "
\n\n"; print h4("Grain density"); print "
Grain Density (gr/cm3)
"; print "
\n\n"; next; }; /^water$/ && do { # water profile dialog print h4("Water profile"); print "\n"; print "
First column is horizontal distance (km), \nsecond "; print "column is the measured (bathymetric) water depth(m)
\n\n"; next; }; /^result$/ && do { # run bmod and print the output all over the screen!!! run_bmod(); run_gnuplot(); # show output foreach (`ls *.png`) { chomp; if (! -z $_) { print "
\n"; } } next; }; /^plots$/ && do { # show output foreach (`ls *.png`) { chomp; if (! -z $_) { print "\n"; } } next; }; } # necessary evil: print "\n\n"; } sub do_forms_buttons {
43
Eindrapportage ICT2001/1
44
# BACK button if ($data{"history"} ne ":main") { print <<EOF31; \n"; } # FORWARD button print <<EOF32; \n"; # check 3 if ( checkall() ) { # RUN_BMOD button print <<EOF33; EOF33 } }
44
Eindrapportage ICT2001/1
45
5.8 File "Gnuplot.pl" De module "Gnuplot.pl" zorgt voor de communicatie van het script met Gnuplot en zet de Gnuplot commandfile op voor elke grafiek. sub run_gnuplot { system("rm gnu_cmd_* *.png"); # prepare the input filez create_gnu_cmdfiles(); # smart gnuplot: check for gnu_cmd_* and run whatever needed :-) foreach ( `ls gnu_cmd_*` ) { open ( GPLOT, "|$GNUPLOT < $_" ); close ( GPLOT ); } } sub create_gnu_cmdfiles { # remove old gnu_cmd_ files :-) foreach (`ls gnu_cmd_*`) { unlink $_; } create_gnu_tecsub(); create_gnu_subsid(); if ( $data{"sedim_fill"} eq "y" ) { create_gnu_horizon(); } # reparse ts files: reformat_input ( "ts0000" ); create_gnu_ts ( 0 ); for ( $i = 0; $i < $data{"num_ages"} ; $i++ ) { $s = sprintf("ts%04d", $data{"age$i"}); # trick: reformat and make cmd file in one: reformat_input ( "$s" ); create_gnu_ts ( $data{"age$i"} ); } } sub create_gnu_tecsub { unless ( open TECSUB, "> gnu_cmd_tecsub" ) { die "Sorry, can't create gnu_cmd_tecsub"; } print TECSUB <<END_tecsub; set term png color set output "plot_tecsub.png" set size 0.8, 0.8 set title "Tectonic Subsidence, in Ma after rifting" set xlabel "X (km)" set ylabel "subsidence (m)" set yrange [*:*] reverse set border set nogrid set autoscale
45
Eindrapportage ICT2001/1
46
#set nokey END_tecsub print TECSUB "plot \"tecsub0000\" every::1 title '0 Ma' w lines, \\\n"; for ( $i = 0 ; $i < $data{"num_ages"} - 1 ; $i++ ) { printf TECSUB "\"tecsub%04d\" every::1 title '%d Ma' w lines, \\\n", $data{"age$i"}, $data{"age$i"}; } printf TECSUB "\"tecsub%04d\" every::1 title '%d Ma' w lines", $data{"age$i"}, $data{"age$i"}; close(TECSUB); } sub create_gnu_subsid { if (! -f "subsid0000") { return; } unless ( open SUBSID, "> gnu_cmd_subsid" ) { die "Sorry, can't create gnu_cmd_subsid"; } print SUBSID <<END_subsid; set term png color set output "plot_subsid.png" set size 0.8, 0.8 set title "Basement subsidence, in Ma after rifting" set xlabel "X (km)" set ylabel "Subsidence (m)" set yrange [*:*] reverse set border set nogrid set autoscale #set nokey END_subsid print SUBSID "plot \"subsid0000\" every::1 title '0 Ma' w lines, \\\n"; for ( $i = 0 ; $i < $data{"num_ages"} - 1 ; $i++ ) { printf SUBSID "\"subsid%04d\" every::1 title '%d Ma' w lines, \\\n", $data{"age$i"}, $data{"age$i"}; } printf SUBSID "\"subsid%04d\" every::1 title '%d Ma' w lines", $data{"age$i"}, $data{"age$i"}; close(SUBSID); } sub create_gnu_ts { $a = shift; $s = sprintf ("%04d", $a); unless ( open TSGNU, "> gnu_cmd_ts$s" ) { die "Sorry, can't create gnu_cmd_ts$s"; } print TSGNU <<END_ts0; set term png color set output "plot_ts$s.png" set size 0.8, 0.8 set title "Temperature Structure at $a Ma after rifting" set xlabel "X (km)" set ylabel "Depth (km)" set yrange [*:*] reverse set border
46
Eindrapportage ICT2001/1
47
set nogrid set autoscale #set nokey set samples 20 set isosamples 21 set contour # set cntrparam levels 20 set cntrparam levels incr 0,100,1300 set view 0,0,1 set nosurface splot "ts${s}" matrix with lines END_ts0 close(TSGNU); } sub create_gnu_horizon { if ( ! -f "horizon0000" ) { return; } unless ( open HORIZON, "> gnu_cmd_horizon" ) { die "Sorry, can't create gnu_cmd_horizon"; } print HORIZON <<END_horizon; set term png color set output "plot_horizon.png" set size 0.8, 0.8 set title "Flexural stratigrapy, in Ma after rifting" set xlabel "X (km)" set ylabel "Depth (m)" set yrange [*:*] reverse set border set nogrid set autoscale #set nokey END_horizon print HORIZON "plot "; foreach ( sort `ls horizon????`) { chomp; $t = int( substr ( $_, 7, 4 )) ; $n = $data{"num_ages"} -1 ; if ( $_ ne "horizonbsmt" ) { printf HORIZON "\"$_\" every::1 title '%d Ma' w lines, \\\n", ($data{"age$n"} - $t); } else { print HORIZON "\"$_\" every::1 title 'Basement' w lines\n"; } } close(HORIZON); } sub reformat_input { $filename = shift; my @numbers;
47
Eindrapportage ICT2001/1
48
open (FILE, $filename); while () { foreach $number ( m/[0-9\x2e]+/g ) { push @numbers, $number; } } close (FILE);