Permalink
Browse files

Merge branch 'master' of github.com:water/resources

  • Loading branch information...
2 parents 32280ce + ba7006c commit 5f0f1ce28de04701393c033306751f78eddbe83e @oleander oleander committed May 31, 2012
@@ -51,11 +51,11 @@
- Databasen normaliserad enligt 4NF
- Egna erfarenheter
- Tester is the shit
- - Versionhantering / Github
+ - Versionshantering / Github
- Ex. Gash / OS-andan
- Sista sliden
- whyisgitbetterthanx.org
- github.com/water
- GPL V.3 Affero
- Feedback
- - thefoamproject@gmail.com
+ - thefoamproject@gmail.com
Binary file not shown.
@@ -1,5 +1,6 @@
graph G {
/* Startgroups and it's repos */
+ LHG1 -- SG1
SG1 -- S1
LHG2 -- SG2
SG2 -- S2
Binary file not shown.
@@ -1,6 +1,13 @@
\section{Hantering av roller}
-För att användare ska ha tillgång till olika funktionalitet, beroende på vilken typ av användare de är har roller implementerats. Dessa roller är student, assistant, examiner och administrator. Funktionalitet för de olika rollerna befinner sig i en \emph{scope}, och en användare har bara tillgång till den funktionalitet som dess roll tillhandager. Om en användare är en adminstratör kan den skapa nya kurser, men en användare som är en student tillåts inte göra det.
+Varje användare i systemet är en User, och olika Users kan ha olika ansvarsområden. I Water har fyra typer av användare modellerats:
+
+1. Student som ska simulera en student som kan bland annat göra inlämningar och registera sig på kurser.
+2. Assistant som ska simulera en handledare som kan bland annat rätta labbar.
+3. Examiner som ska simulera en examinator, som kan bland annat kan utnämna handledare.
+4. Administrator som ska simulera en administratör, som kan bland annat skapa nya kurser.
+
+För att användare ska ha tillgång till olika funktionaliteter, beroende på vilken typ av användare de är har roller implementerats. Funktionalitet för de olika rollerna befinner sig i en \emph{scope}, och en användare har bara tillgång till den funktionalitet som dess roll tillhandager. Om en användare är en adminstratör kan den skapa nya kurser, men en användare som är en student tillåts inte göra det.
\subsection{Rollernas påverkan på routes}
Användarfunktionaliteten befinner sig inom en \emph{scope} med roller. Detta ger upphov till estetiska, och intuitivt förstådda URL:er. Till exempel kan kurser visas upp för en student genom: |/student/courses|. Om studenten också är en Assistant, används en annan route för att visa relevant information för det sammahanget.
@@ -168,7 +168,7 @@ \subsubsection{LabGroup}
\end{itemize}
\subsubsection{LabHasGroup}\label{sec:modell-labhasgroup}
-Representerar kopplingen mellan en Lab och en LabGroup. När en LabHasGroup skapas så skapas även ett Git-repositorium där inlämningarna lagras. Gruppen har nu tillgång till versionhanteringsfunktionalitet och kan göra inlämningar via webbgränssnittet och Git.
+Representerar kopplingen mellan en Lab och en LabGroup. När en LabHasGroup skapas så skapas även ett Git-repositorium där inlämningarna lagras. Gruppen har nu tillgång till versionshanteringsfunktionalitet och kan göra inlämningar via webbgränssnittet och Git.
Relationer:
\begin{itemize}
@@ -1,4 +1,4 @@
\section{Systemarkitektur}
-Systemets kärna är en Ruby on Rails-applikation som bygger på plattformen Gitorious. Som versionhanteringssystem används Git. Inlämningar förvaras i Git-repositorier. Grack fungerar som Git-server. Köhanteringssystemet består av Stomp, Beanstalkd och Poller. Faye fungerar som WebSocketserver. Data lagras i en PostgreSQL-databas.
+Systemets kärna är en Ruby on Rails-applikation som bygger på plattformen Gitorious. Som versionshanteringssystem används Git. Inlämningar förvaras i Git-repositorier. Grack fungerar som Git-server. Köhanteringssystemet består av Stomp, Beanstalkd och Poller. Faye fungerar som WebSocketserver. Data lagras i en PostgreSQL-databas.
Se bilaga \ref{appendix:systemoversikt} för översikt.
@@ -1,12 +1,12 @@
\section{Frågor gällande inlämning via versionshantering}\label{sec:fragor-git}
-I systemet behövs lämpliga sätt att relatera koncept inom versionhantering till inlämningsuppgifter. Frågan kan delas upp i två delar: hur inlämningarna ska förvaras och hur inlämningen sker.
+I systemet behövs lämpliga sätt att relatera koncept inom versionshantering till inlämningsuppgifter. Frågan kan delas upp i två delar: hur inlämningarna ska förvaras och hur inlämningen sker.
\subsection{Förvaring av inlämningsuppgifterna}
Vad gäller förvaringen ser kandidatgruppen två alternativ:
Antingen skapas ett nytt repositorium för varje grupp och inlämningsuppgift, eller så sparas gruppens samtliga inlämningsuppgifter i ett repositorium, men i olika grenar.
-I skarpa projekt har varje delprojekt ett eget repositorium. Särskilt vanligt är detta för distribuerade versionhanteringssystem, eftersom de ofta inte erbjuder clone för bara delar av ett repositorium. Se till exempel Git (2012). Kandidatgruppen är av uppfattningen att \emph{branches} traditionellt uppfattas som olika versioner av samma kodbas. Detta stöder idén om att använda ett repositorium per inlämningsuppgift. Det leder även till separation mellan inlämningsuppgifter – misstag eller tekniska problem inom en inlämningsuppgift drabbar inte andra inlämningsuppgifter. Metoden öppnar även för att Water i framtiden erbjuder studenterna flera \emph{branches} att arbeta med, till exempel för att definiera delmoment i inlämningsuppgifter.
+I skarpa projekt har varje delprojekt ett eget repositorium. Särskilt vanligt är detta för distribuerade versionshanteringssystem, eftersom de ofta inte erbjuder clone för bara delar av ett repositorium. Se till exempel Git (2012). Kandidatgruppen är av uppfattningen att \emph{branches} traditionellt uppfattas som olika versioner av samma kodbas. Detta stöder idén om att använda ett repositorium per inlämningsuppgift. Det leder även till separation mellan inlämningsuppgifter – misstag eller tekniska problem inom en inlämningsuppgift drabbar inte andra inlämningsuppgifter. Metoden öppnar även för att Water i framtiden erbjuder studenterna flera \emph{branches} att arbeta med, till exempel för att definiera delmoment i inlämningsuppgifter.
En nackdel med separata repositorier är att det krävs en \emph{remote-url} per repositorium, och därmed per inlämningsuppgift. För varje inlämningsuppgift måste studenten hämta en \emph{remote-url} ifrån webbapplikationen och använda den för att konfigurera sin versionshanterare.
@@ -1,6 +1,6 @@
\section{Inlämningskanaler}
-Det nya systemet ska vara anpassat för användare med olika kunskapsnivåer. En konsekvens av detta är att inlämning via versionshanteringsklient inte kan vara det enda tillvägagångssättet. Studenter vid olika program och vid olika skeden av sin utbildning kan ha varierad eller ingen erfarenhet av versionhantering. Det är därför viktigt att erbjuda flera kanaler.
+Det nya systemet ska vara anpassat för användare med olika kunskapsnivåer. En konsekvens av detta är att inlämning via versionshanteringsklient inte kan vara det enda tillvägagångssättet. Studenter vid olika program och vid olika skeden av sin utbildning kan ha varierad eller ingen erfarenhet av versionshantering. Det är därför viktigt att erbjuda flera kanaler.
\subsection{Versionshanterare}
Versionshanterare som inlämningskanal behandlas i avsnitt \ref{sec:fragor-git}, sida \pageref{sec:fragor-git}.
@@ -1,11 +1,11 @@
\section{Invarianter för studenters laborationsantal}
-Det finns möjlighet att ha en invariant mellan hur många simultana “laboration-till-grupp”-kopplingar det finns per laboration för varje enskild student. Det rör sig mellan alternativen att forcera maximalt en koppling per laboration, att forcera till exakt en koppling per laboration samt att strunta i att ha invarianten. Det leder till mer arbete att uppehålla en striktare invariant, men det har fler fördelar.
+Det finns möjlighet att ha en invariant mellan hur många simultana “laboration-till-grupp”-kopplingar det finns per laboration för varje enskild student. Det rör sig mellan alternativen att forcera maximalt en koppling per laboration, att forcera till exakt en koppling per laboration samt att strunta i att ha invarianten. Det är mer arbete att uppehålla en striktare invariant, men det visar sig ha fler fördelar.
För att göra detta avsnitt läsbart inför vi termen LabHasGroup, förkortad \emph{LHG}. \emph{LHG} är den entitet i modellen som representerar kopplingen mellan en grupp och en laboration, vilket beskrivs i sektion \ref{sec:modell-labhasgroup}.
\subsection{Max en \emph{LHG} per laboration ($\leq 1$)}
-Som en direkt konsekvens av denna invariant kan inte en student lämna in samma laboration genom flera laboration till grupp kopplingar eftersom invarianten direkt stryper kopplingsantalet till maximalt en per laboration. I praktiken jobbar aldrig en student på samma laboration via flera kopplingar samtidigt. Det är troligt att studentanvändare blir förvirrade av att de ser att de jobbar på samma laboration via olika kopplingar. Det bör alltså noteras att fördelarna är främst ytliga, alltså att produktens webbgränssnitt blir tydligt för studentanvändarna. Vidare ska en handledare inte av misstag behöva rätta två inlämnade laborationer kopplade till samma student.
+Som en direkt konsekvens av denna invariant kan inte en student lämna in samma laboration genom flera \emph{LHG}:s eftersom invarianten direkt stryper kopplingsantalet till maximalt en per laboration. I praktiken jobbar aldrig en student på samma laboration via flera kopplingar samtidigt. Det är troligt att studentanvändare blir förvirrade av att de ser att de jobbar på samma laboration via olika kopplingar. Det bör alltså noteras att fördelarna är främst ytliga, alltså att produktens webbgränssnitt blir tydligt för studentanvändarna. Vidare ska en handledare inte av misstag behöva rätta två inlämnade laborationer kopplade till samma student.
Flera möjliga sätt finns för att enforcera invarianten, gemensamt för implementeringssätten är att de måste definera nödvändiga gruppoperationer och visa att de är riskfria, det vill säga att invarianten aldrig bryts efter operationerna har utförts. Några operationer kan tänkas vara följande:
@@ -23,7 +23,7 @@ \subsubsection{Förslag på implementering}
\begin{proof}[Bevis av korrekthet]
- Vi har medvetet försökt minimera antalet operationer som påverkar antalet kopplingarern student har till en given laboration. Att skapa en grupp påverkar ej \emph{LHG}-antalet. Att gå med i en grupp har begränsats till att bara fungera för grupper utan påbörjade laborationer, därav påverkas ej invarianten av påhopp heller. Att ta bort en \emph{LHG} innebär en minskning vilket aldrig kan bryta mot en “mindre-än”-olikhet. Den enda operationen som ökar antalet \emph{LHG}:s är att “påbörja laborationen”, men den har definierats att bara vara utförbar då invarianten inte bryts. \qedhere
+ Vi har medvetet försökt minimera antalet operationer som påverkar antalet \emph{LHG} en student har till en given laboration. Att skapa en grupp påverkar ej \emph{LHG}-antalet. Att gå med i en grupp har begränsats till att bara fungera för grupper utan påbörjade laborationer, därav påverkas ej invarianten av påhopp heller. Att ta bort en \emph{LHG} innebär en minskning vilket aldrig kan bryta mot en “mindre-än”-olikhet. Den enda operationen som ökar antalet \emph{LHG}:s är att “påbörja laborationen”, men den har definierats att bara vara utförbar då invarianten inte bryts. \qedhere
\end{proof}
\subsubsection{Användarperspektiv}
@@ -49,7 +49,7 @@ \subsubsection{Användarperspektiv}
\subsection{Alltid exakt en \emph{LHG} per laboration ($= 1$)}
Den mindre strikta ($\leq 1$) invarianten ger Water möjligheten att ha ett intuitivt användargränssnitt eftersom ingen student vill se att de gör samma laboration via två olika grupper samtidigt. En striktare variant är dock önskvärd av tekniska skäl. Med en striktare variant behövs till exempel inte hantering av fall då en \emph{LHG} inte finns, eftersom att den alltid finns. Detta öppnar även upp för att förenkla våra databasförfrågningar, vi kan till exempel få reda på alla laborationer för en student i en kurs genom att “gå” via kopplingarna, eftersom vi har en 1-till-1–relation mellan “laboration-till-grupp”-koppling och laboration per student.
-En operationsuppsättning för denna invariant måste även definiera initialtillståndet eftersom det går inte längre att ha studenter utan \emph{LHG}:s vid kursstart. Operationerna som måste beaktas för denna invariant är fler eftersom tillägg av student eller laboration både är icketriviala. Ifall en student läggs till i en kurs så måste den “direkt” få sina \emph{LHG}:s. Laborationstillägg måste även se till att varje student får en \emph{LHG} för den nyligen skapade laborationen. En operation som inte längre kan finnas är att manuellt ta bort en \emph{LHG} för då skulle invarianten brytas direkt.
+En operationsuppsättning för denna invariant måste även definiera initialtillståndet eftersom det går inte längre att ha studenter utan \emph{LHG}:s vid kursstart. Operationerna som måste beaktas för denna invariant är fler eftersom tillägg av student eller laboration båda är icketriviala. Ifall en student läggs till i en kurs så måste den “direkt” få sina \emph{LHG}:s. Laborationstillägg måste även se till att varje student får en \emph{LHG} för den nyligen skapade laborationen. En operation som inte längre kan finnas är att manuellt ta bort en \emph{LHG} för då skulle invarianten brytas direkt.
\subsubsection{Förslag på implementering}
Invarianten kan framtvingas genom följande initialtillstånd och operationsuppsättning.
@@ -64,7 +64,7 @@ \subsubsection{Förslag på implementering}
\end{figure}
\paragraph{Operationer}
-I detta förslag behandlas operationerna “skapa en grupp” och “lägg till en student i gruppen” på samma sätt som i förslaget för den mindre strika invarianten. Att skapa en ny \emph{LHG} kommer inte ha kräva några förhandsvillkor, studenten behöver alltså inte längre manuellt se till så att \emph{LHG}:en sätts in genom att ta bort sina egna kopplingar i sina tidigare grupper, istället tar Water bort alla kopplingar som “är i vägen”. Operationen sker mer specifikt på följande sätt:
+I detta förslag behandlas operationerna “skapa en grupp” och “lägg till en student i gruppen” på samma sätt som i förslaget för den mindre strika invarianten. Att skapa en ny \emph{LHG} kommer inte kräva några förhandsvillkor, studenten behöver alltså inte längre manuellt se till så att \emph{LHG}:en sätts in genom att ta bort sina egna kopplingar i sina tidigare grupper, istället tar Water bort alla kopplingar som “är i vägen”. Operationen sker mer specifikt på följande sätt:
\begin{enumerate}
\item För alla medlemmar i gruppen där \emph{LHG}:en ska läggas till ska
deras \emph{LHG} för den laborationen tas bort, notera att de alltid har
@@ -112,7 +112,7 @@ \subsubsection{Förslag på implementering}
\end{figure}
\subsubsection{Användarperspektiv}
-Det ovanstående sättet att skapa en ny \emph{LHG} innebär att även laborationskamraternas laborationskamrater påverkas av den aktiva studentens operation (se figur \ref{fig:strict-proof-continue}). Detta är givetvis inte bra för de utsatta studenterna. Att samtliga studenter har en egen laborationsgrupp kan vara förvirrande för användare som ser att de redan är medlemmar i en laborationsgrupp som är låst och redan har påbörjat sina laborationer. I gengäld kräver operationen färre steg för en student att påbörja en laboration med en annan laborationsgrupp.
+Det ovanstående sättet att skapa en ny \emph{LHG} innebär att även laborationskamraternas laborationskamrater påverkas av den aktiva studentens operation (se figur \ref{fig:strict-proof-continue} där $S2$ tar bort $S4$s laboration). Detta är givetvis inte bra för de utsatta studenterna. Att samtliga studenter har en egen laborationsgrupp kan vara förvirrande för användare som ser att de redan är medlemmar i en laborationsgrupp som är låst och redan har påbörjat sina laborationer. I gengäld kräver operationen färre steg för en student att påbörja en laboration med en annan laborationsgrupp.
\subsection{Ingen invariant}
Naturligtvis går det att strunta i att forcera någon invariant. Det blir minimalt med jobb och ingenting behöver bevisas. Nackdelen är att det lätt blir förvirrande för användaren att ha flera aktiva laborationer samtidigt. Vidare krävs fler användaroperationer för att lokalisera sin \emph{LHG} då användaren inte bara behöver specifiera laboration utan även laborationsgrupp.
Oops, something went wrong.

0 comments on commit 5f0f1ce

Please sign in to comment.