Closed DavveDP closed 1 year ago
Tack för bra synpunkter!! Vi tar med det i kursutvecklingen inför nästa år.
I have worked on this here: https://github.com/lunduniversity/introprog/commit/dddf1624f3aa9aaa7cac216e949245072d46b999 Now ready for review.
@DavveDP If you are interested I would be happy of you could check out the new photo project in this compendium2.pdf here, section 12.5: https://fileadmin.cs.lth.se/pgk/compendium2.pdf The given code-files are here: https://github.com/lunduniversity/introprog/tree/master/workspace/w13_photo_proj
I have tried to make it more fun and lagom challenging. Also improved explanations on convolve and intensity and made the whole code base more Scala-idiomatic.
Let me know what you think, if you have some minutes available to check it out.
It looks a lot better overall! The code base resembles the rest of the scala code in the course and the focus is shifted more to understanding the actual image manipulation. Clever column function in the Button-object I must say. The gui should be quite straight-forward thanks to it and the other functions of pixelwindow, as long as students know to look for them. It’s also a lot clearer how to build the application.
TLDR: Looks good to me! Great Job @bjornregnell !
Thanks! Closing this based on your review @DavveDP
And many thanks again for your detailed comments on the old version! @DavveDP
I have added som more optional tasks based on ideas in this issue here: a46d439a61c5059b5d36e18503ae834bc80f8405
Efter att ha genomfört projektet photo har jag några synpunkter om projektets utformning. Som Björn nämnt i sina föreläsningar är "Bank" det "bästa" projektet eftersom den kräver kunskaper i majoriteten av delarna som kursen omfattar. Vad gäller photo tycker inte jag att den kan mäta sig med bank av anledningarna nedan.
1. För mycket fokus på att skapa nya Filterklasser
Alla uppgifter är av typen att skapa nya filterklasser. Inte nog med det, den givna filterklassen som ser ut som på bilden är redan ett fullt fungerande filter. Kodaren måste bara klura ut att
Image.update
tar en funktion som bestämmer färgen för varje pixel och sedan modifiera den. Därefter är det bara att använda copy-paste och göra nästa, och sedan nästa tills alla uppgifter är gjorda. Visserligen blir det teoretiskt tungt i de senare uppgifterna, men den komplicerade logiken som involverar matrismultiplikation och så vidare är redan definierad iconvolve
.2. Utvecklar snäva kunskaper
Till följd av att endast skapa nya filter får utövaren inga nya typer av problem att angripa. Det framgår väldigt tydligt av den anledningen att photo tidigare varit en labb som fokuserat på ett specifikt ämne och inte ett projekt. Att utföra labben är som att göra monotona uppgifter i matteboken (no pun intended) under ett specifikt kapitel en efter en. Det saknar variation helt enkelt.
3. För mycket given kod
I kompendiet finns, likt andra labbar, givna klasser och funktionshuvuden som saknar implementationer. En otroligt smart design eftersom labbutövaren då inte måste spendera onödig tid på att formulera programmets arkitektur, vilket inte heller är kursens huvudsakliga syfte. Däremot stämmer koden i kompendiet inte överens med den i
introprog/workspace
. Där finns redan implementerade funktioner som t.excomputeIntensity
och den tidigare nämndaconvolve
(inklusive dokumentation).Förändringsförslag
1. Uppdatera kodbasen i
introprog/workspace
för att matcha den i kompendietDen klart enklaste lösningen som ger utövaren en utmaning att översätta den matematiska teorin till kod. Förklaringen i kompendiet är väldigt utförlig, men i nulägen behöver labbutövaren inte ens läsa majoriteten av den utan istället bara använda
convole
ochcomputeIntensity
.2. Låt utövaren själv implementera
imageChooser
Om utövaren ska få implementera hela klassen eller bara några enskilda funktioner är en bedömningsfråga. Oavsett får utövaren repetera att arbeta med filer, i det här fallet flertalet bilder dessutom. En liten förändring, som ger en helt ny smak av uppgift att sänka tänderna i.
3. Låt användaren utveckla verktyg
Brush, erase, subsection, textbox etc. Alla som har använd en image editor innan är bekant med dessa begrepp.
Event.MousePressed
,Pixelwindow.drawText
ochintroprog.Image.subsection
är exempel på funktioner ur introprogbiblioteket som skulle kunna användas av användaren för att efterlikna dem här verktygen. Det skulle dock kräva att applikationsloopen skrevs om för att använda ett eventdrivet system istället, vilket inte gör så mycket eftersom utövaren redan känner till eventsystemet vid det här laget i kursen.Slutsats
Att det ska finnas flera olika projekt som alternativ är nog en stor angelägenhet för studenter. Det skapar fler avenyer som kan väcka intresse och inspiration, vilket jag anser är en av kursens viktigaste aspekter. Men att projekten riktar in sig på ett specifikt ämne ska inte hämma deras huvudsakliga uppgift att sätta utövarens kunskapsbredd inom scala på prov. Ju fler olika kodavsnitt och varians inom respektive projekt desto bättre. Vad gäller photo kan förslagen ovan göras olika krävande beroende på mängden given kod. De är bara några spontana idéer på hur projektet skulle kunna reworkas. Med hjälp av att implementera dem på ett eller annat sätt lär projektet lämpa sig bättre som ett avslutningsprojekt. Ett sådant som till större utsträckning syftar till kursen mål att ge studenten en så bred bas inom programmering som möjligt.
//David Riley