## presentation comprises a sequence based on a generic slide called slideX ## control then passes to the text presenter interface slideList is []; ## slides is [buttonPrev, buttonNext, buttonProj, slideNumber, slideList[currentSlide]]; slides is [buttonPrev, buttonNext, slideX]; ## setting up the script to present the contents of the generic slide keyword = ""; paragraphs is findwordparatext(keyword, allparasplusslides); ## this is default paratext is paragraphs[ixpara]; ixpara = 1; ## this is default allsentences is splitintosentences(paratext); numsentences is allsentences#; ## this is default seqsentences is list1tok(min(sentencessofar, numsentences)); ## this is default /* ixselsentences is list1tok(allsentences#); ## this is default ## use to update "sentence n of N" ## and maybe control behaviour "mod allsentences#" selsentences is filter(allsentences, ixselsentences); parasofarread is concatpsentences(filter(selsentences,seqsentences)); */ ## the defns commmented out above were previously used to enable the selection of sentences ## from a paragraph via observable ixselsentences: now reorganising management of state so ## that have means to specify the block of text generated by selecting a subset of sentences ## - see mkTextblock(). Also gives flexibility to concatenate blocks, interspersing explicitly ## specified content parasofarread is concatpsentences(filter(allsentences, seqsentences)); /* ## taking account of the selection of a subset of sentences: nextsentencelab is "Reading sentence " // str(ixselsentences[sentencessofar]) // " of " // str(allsentences#) // " ..."; nextsentenceenabled is (sentencessofar < ixselsentences#); */ nextsentencelab is "Reading sentence " // str(sentencessofar) // " of " // str(allsentences#) // " ..."; nextsentenceenabled is (sentencessofar < allsentences#); ## default context allows a specific paragraph in the essay to be selected (by assigning a value to ixpara) ## and permits the first numsentences on the slide to be displayed ## can change what paragraph(s) is/are supplied, how many sentences are displayed, and which are selected ## so can provide your own custom paragraph ## for purposes of presentation, paragraphs is defined to be paraSlides ## initially paraSlides = [titleheader]; ixpara = paraSlides#; ixsentence = 1; ## the generic description of slideX is: ## slideX is Slide("

" // parasofarread // "

"); ## no need for the extra

slideX is Slide(parasofarread); ## paragraphs is paraSlides; ########################################## ## useful function for generating text from the essay content by selection ## might be of interest here to consider how a script might be used (as has been) ## to engineer a function - in keeping with idea of definitive specification of fn ################################ func mkTextblock { para kword, indexpara, arrsel; return concatsentences(filter(splitintosentences(getlscomp(findwordparatext(kword, allparasplusslides),indexpara)), arrsel)); } ################################## contents is "

Contents of the essay ...

  1. Software and Experience
  2. Fortran / TM experience - two kinds of experience of programming
  3. Hermeneutic and formalist perspectives
  4. Maths and computer science from an experiential perspective
  5. Beyond a 'computational thinking' perspective on computing
  6. Software development, learning and construction
  7. Empirical Modelling
  8. Retrospect and Prospect

"; #################################### paraSlide1 is "Realising Software Development as a Lived Experience? Realising Software Development as a Live Experience? - the present, of-this-moment, being lived, experience of the software developer. " // note1 // " The Light Table - Chris Grainger. A Small Matter of Programming - Bonnie Nardi."; ####################################### note10x = "Douglas Crockford. ''We imagine that we spend most of our time power typing ... when in fact ... We spend most of our time looking into the abyss, asking My God - what have I done?, trying to make sense of this puddle of confusion and turn it back into a working program.''."; ## note the 'dot' after the single quote paraSlide2 is "Realising Software Development as a Lived Experience ... Realising Software Development as a Loved Experience? " // note10x // " ... Realising Software Development as a Livid Experience?"; paraSlide3 is "" // mkTextblock("", 3, [1,2,7,8,9]) // ""; ## Fortran programming paraSlide4 is "" // allparas[4] // ""; ## accidental / essential paraSlide5 is "" // mkTextblock("", 5, [2,3,4,6,7,8]) // ""; ## Turing machine programmming paraSlide6 is "Two extreme perspectives on programming. Two too extreme perspectives on programming? Surely the Fortran experience was full of ephemera. And yet ... I have become more circumspect about what is ephemeral in computing, and ever more convinced that what is not ephemeral is more than a formal mathematical treatment can endorse. I have also come to believe that ... The notion that the principles of software development are first and foremost concerned with computational thinking and the study of process-like behaviours is an illusion."; paraSlide9 is mkTextblock("", 18, [1,2,3,4,5,6]); ## West on hermeneutics paraSlide11 is "With respect to what West characterises as formalist and hermeneutic/constructivist perspectives, this essay makes ... - a counter-proposal to the idea of computational thinking as the sole foundation of computing... - aimed at sustaining both perspectives ... - not as antithetical alternatives, but as complementary. In this reconceptualisation of computing, the notion of experience has a critical role."; paraSlide12 is "The critical need to reconcile experience with logic is recognised only reluctantly by formalists ... " // note7 // " Invoking experience is seen as compromising mathematical ideals."; paraSlide13 is "Hermeneutic and formalist perspectives in software development. Relational algebra / SQL - truth: absolute and hermeneutic. XP and TDD - functional specifications vs 'object thinking'. More than modelling a mind following rules ..."; paraSlide14 is "Matters of classification of experience ... Aspects of live experience can be construed as computational in character. We can construct situations in which we observe patterns with the universal and objective characteristics of logic. But the act of construing a pattern as logical is personal and subjective. - reconciling formalist and hermeneutic perspectives. (cf.\u00A0" // mkTextblock("", 18, [3,4]) // ")"; paraSlide15 is "Empirical Modelling ... " // allparas[48]; paraSlide16 is "EM as exploration in 'the space of sense'. Questions we can ask in making sense of our environment. ...\u00A0what can be reliably observed - observables\ - ? ...\u00A0how are changes to observables perceived to be connected - dependencies\ - ? ...\u00A0what are the possible sources of change - agents, agencies\ - ? Neighbouring in the space of sense ... ...\u00A0'lived' and 'loved' on a keyboard. - illustrating the alogical associations that can be critical in software failure."; paraSlide17 is "QUESTIONS?"; ##################################### ## paraSlides = [titleheader, contents, paraSlide1, paraSlide2, paraSlide3, paraSlide4, paraSlide5, paraSlide6, paraSlide9, paraSlide11, paraSlide12, paraSlide13, paraSlide14, paraSlide15, paraSlide16, paraSlide17; paraSlides = [titleheader, contents, paraSlide1, paraSlide2, paraSlide3, paraSlide4, paraSlide5, paraSlide6, paraSlide9, paraSlide11, paraSlide12, paraSlide13, paraSlide14, paraSlide15, paraSlide16]; ######################################### emptystring = ""; paraSlideKeyword is "

To display all the paragraphs that refer (e.g.) to West or Naur, we specify them in the keyword observable: ixsentence=1; thisixpara = (keyword==emptystring) ? ixpara : thisixpara; ## bookmark slide ixpara=1; keyword=\"West\"; ixsentence=1; thisixpara = (keyword==emptystring) ? ixpara : thisixpara; ixpara=1; keyword=\"Naur\";

To restore the focus to the bookmarked slide ...

ixsentence=1; ixpara=thisixpara;
keyword=emptystring;

"; ######################################### paraSlideTopics is "

To display extracts on SQL, XP and modelling mind respectively: ixsentence=1; ixpara=(ixpara==189)?19:189; ixsentence=1; ixpara=(ixpara==189)?35:189; ixsentence=1; ixpara=(ixpara==189)?31:189;

"; ###################################### paraSlidePractEM is "EM in practice

To access this presentation, invoke the JS-EDEN interpreter at the url:

http://www.dcs.warwick.ac.uk/jseden.dcs.warwick.ac.uk.

and execute the following command in the EDEN Interpreter Window:

include(\"models/Onward2012/run.js-e\").

The environment can seamlessly switch between presentation and commentary-interface-development environment for an artefact

ixpara = 1; include(\"models/cs405/JUGSinJS-E/jugspres.e\");

To return to the presentation requires just the five redefinitions listed in the procedure: restoreSlidePres(); "; proc restoreSlidePres { slideList is [dummy1, dummy2, dummy3]; currentSlide = 1; slides is [buttonPrev, buttonNext, (currentSlide == 1) ? slideX : ((currentSlide == 2) ? Slide(paraSlideAux[currAuxSlide]) : slideStream3)]; picture is [textdisp, nextsentence, nextparagraph, backbutt, header, title, buttonProj]; buttonPrev is SlideButton("buttonPrev","<<", jspeleft-155, ${{ $('#jspe').height()+15 }}$, buttonPrevEnabled); buttonNext is SlideButton("buttonNext","Stream " // str(currentSlide) // " >>", jspeleft-120, ${{ $('#jspe').height()+15 }}$, buttonNextEnabled); } paraSlideRestorePres is "

To return to the presentation requires just the five redefinitions listed in the procedure: restoreSlidePres(); "; ###################################### paraSlideSoftExp is "

SOFTWARE AND EXPERIENCE

  1. Software and Experience
  2. Fortran / TM experience - two kinds of experience of programming
  3. Hermeneutic and formalist perspectives
  4. Maths and computer science from an experiential perspective
  5. Beyond a 'computational thinking' perspective on computing
  6. Software development, learning and construction
  7. Empirical Modelling
  8. Retrospect and Prospect

"; paraSlideFormalHermeneutic is "

FORMALIST AND HERMENEUTIC PERSPECTIVES

  1. Software and Experience
  2. Fortran / TM experience - two kinds of experience of programming
  3. Hermeneutic and formalist perspectives
  4. Maths and computer science from an experiential perspective
  5. Beyond a 'computational thinking' perspective on computing
  6. Software development, learning and construction
  7. Empirical Modelling
  8. Retrospect and Prospect

"; paraSlideModSpaceSense is "

MODELLING IN THE SPACE OF SENSE

  1. Software and Experience
  2. Fortran / TM experience - two kinds of experience of programming
  3. Hermeneutic and formalist perspectives
  4. Maths and computer science from an experiential perspective
  5. Beyond a 'computational thinking' perspective on computing
  6. Software development, learning and construction
  7. Empirical Modelling
  8. Retrospect and Prospect

"; paraSlideCayley is "

."; paraSlideLogicExp is "

"; paraMindFollRules is "

"; paraSlideTouristNative is "

"; paraSlideFormHerm is "

"; paraSlideEMconstrual is "

"; paraSlideDefaultAux is "AUXILIARY SLIDE"; ## paraSlideEMconstrual is "

paraSlideWestFormalismMC is "" // mkTextblock("", 14, [3]) // ""; ## West on formalism and the m/c paraSlideTMpalin is "

"; paraSlideAck is "Acknowledgements

"; ## paraSlideAux = [paraSlideDefaultAux, paraSlideSoftExp, paraSlideFormalHermeneutic, paraSlideKeyword, paraSlideCayley, paraSlideFormHerm, paraSlideLogicExp, paraMindFollRules, paraSlideTouristNative, paraSlideModSpaceSense, paraSlideEMconstrual]; paraSlideAux = [paraSlideDefaultAux, paraSlideSoftExp, paraSlideFormalHermeneutic, paraSlideCayley, paraSlideFormHerm, paraSlideLogicExp, paraMindFollRules, paraSlideTouristNative, paraSlideModSpaceSense, paraSlideEMconstrual, paraSlideWestFormalismMC, paraSlideTMpalin, paraSlideAck]; func setauxSlide { para indexpara, indexsentence; result = 1; if ((keyword=="Naur")&& (indexpara==1)) result = 11; if ((indexpara==31) &&(indexsentence>3)) result = (indexsentence<6) ? 7 : 8; if ((indexpara>178) && (indexpara<186)) result = 2; if ((indexpara==184) && (indexsentence>1)) result = 12; if (indexpara==188) result = 4; else if (indexpara==190) result = (indexsentence<5) ? 6 : 5; else if ((indexpara>185) && (indexpara<191)) result = 3; else if (indexpara==191) result = (indexsentence>1) ? 10 : 9; if (indexpara==192) result = 13; return result; } currAuxSlide is setauxSlide(ixpara, ixsentence); /* SOFTWARE AND EXPERIENCE 178:title, 179:contents, 180:Lived-Live, 181:Lived-loved-livid, 182:Fortran, 183:Essence-Accident, 184:TuringMachine, 185:TwoTooExtreme FORMALIST AND HERMENEUTIC PERSPECTIVES 186:West-Hermeneutics, 187:Stance-on-Perspectives, 188:Bell-on-Cayley MODELLING IN THE SPACE OF SENSE */ ## 48: EM intro slideList is [dummy1, dummy2, dummy3]; ## needed in order to make currentSlide = 1/2/3 controllable by the Previous / Next buttons - otherwise redundant ## slideStream3 is (ixpara==189) ? Slide(paraSlideTopics) : ((ixpara==192) ? Slide(paraSlidePractEM): ((ixpara==193) ? Slide(paraSlideRestorePres) : Slide(paraSlideKeyword))); slideStream3 is (ixpara==189) ? Slide(paraSlideTopics) : ((ixpara==192) ? Slide(paraSlidePractEM): Slide(paraSlideKeyword)); slides is [buttonPrev, buttonNext, (currentSlide == 1) ? slideX : ((currentSlide == 2) ? Slide(paraSlideAux[currAuxSlide]) : slideStream3)]; showObservables("paragraphs|notes|abst|ixpara|ixsent|curr"); nextparalab is "P:" // str(ixpara) // "/" // str(paragraphs#) // " >>"; nextsentencelab is "S:" // str(sentencessofar) // "/" // str(allsentences#) // ">>"; nextsentence is Button("nextsent", nextsentencelab, jspeleft-400, ${{ $('#jspe').height()+15 }}$, nextsentenceenabled); nextparagraph is Button("nextpara", nextparalab, jspeleft-500, ${{ $('#jspe').height()+15 }}$, nextparaenabled); backbutt is Button("lastpara", "<<", jspeleft-535, ${{ $('#jspe').height()+15 }}$, ixpara>1); buttonPrev is SlideButton("buttonPrev","<<", jspeleft-155, ${{ $('#jspe').height()+15 }}$, buttonPrevEnabled); buttonNext is SlideButton("buttonNext","Stream " // str(currentSlide) // " >>", jspeleft-120, ${{ $('#jspe').height()+15 }}$, buttonNextEnabled); centredSlides = [1,4,5,6,7,8,10,12]; func isinlist { para ix, ls; auto i, result; result = 0; for (i = 1; i<=ls#; i++) { if (ls[i]==ix) result = 1; } return result; } proc alignSlides : currAuxSlide, currentSlide { ${{ $('#jspe_slide').css("text-align","left"); }}$; if (currentSlide == 2) { if (isinlist(currAuxSlide, centredSlides)) { ${{ $('#jspe_slide').css("text-align","center"); }}$; } } } ## binding stream change actions to the keyboard ${{ $(document).bind('keydown', 'down', function () { $('#jspe_buttonPrev').click(); }); }}$; ${{ $(document).bind('keydown', 'up', function () { $('#jspe_buttonNext').click(); }); }}$; ${{ $(document).bind('keydown', 'left', function () { $('#canvas_lastpara').click(); }); }}$; ${{ $(document).bind('keydown', 'right', function () { $('#canvas_nextsent').click(); }); }}$; ixpara = 178;