Övningar Lektion3 Avancerade Webbteknologier 2

Relevanta dokument
Versionshantering. Problem som uppstår i större (samt även mindre) projekt:

Börja med git och GitHub - Windows

Introduktion till git

Introduktion till Git

Versionshantering med Git. Henrik Henriksson 17 april 2018

GitHub for Windows och GitShell

Versionshantering med Git

Bryt ut logiken för att göra Bulk-ersättning av Category i Index i ProductControllern.

1 Vad är Versionshantering? 2 Git. 2.1 GitHub

Arbeta med databas. Översikt. Lektion 1: Arbeta med Entity Data Models. Arbeta med Entity Data Models. LINQ (Language Integrated Query).

Inledande programmering med C# (1DV402) Ditt första C#-program med Visual Studio

Generiska konstruktioner. Kursbokens kapitel 13

Övning GIT Andreas Wieden

Förstå grunderna i LINQ. Mål med lektionen!

Mål med lektionen! Repetera och befästa kunskaperna.

DIAGNOSTISKT PROV. Tid. Hjälpmedel. Antaganden. Rättning. Övrigt. Diagnostiskt Prov. Klockan Inga

Programmering B med Visual C

Objektorienterad programmering D2

TDP005. Föreläsning 2. Filip Strömbäck

Kopiering av objekt i Java

Language Integrated Query, LINQ, och databaser

Laboration 1 Introduktion till Visual Basic 6.0

Innehåll MySQL Intro. Allmänt om Lagrade Procedurer Enkel utformning Skapa en lagrad procedur Använda parameter som indata

Konsolfönster i Windows Momentet ingår i kursen PDA DTR1206 Lab 1 DOS Konsolfönstret

Objektorienterad programmering Föreläsning 2

Använda Python Laboration 1 GruDat, DD1344

Översikt. Installation av EasyPHP 1. Ladda ner från Jag använder Release Installera EasyPHP.

Polymorfi. Objektorienterad och komponentbaserad programmering

Objektorienterad programmering i Java I

Objektorienterad Programkonstruktion. Föreläsning jan 2016

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat

Introduktion till Git Anton Ekberg Version 2

1.Lär känna MS SQL Observera. Tips. Förberedelse

Sync Master startas via Task Scedule (schemaläggaren). Programmet kan köras på servern utan att någon är inloggad på servern.

Objektorientering: Lagring, räckvidd och livstid

DAT043 Objektorienterad Programmering

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan.

ADO.NET Murach Kapitel 17-20

Laboration: Grunderna i MATLAB

Objektsamlingar i Java

Introduktion till Jasmine 1.2 ODQL

Lär känna MS SQL 2008 / Övning. Observera. Tips. Förberedelse

CVS-Introduktion. CyberRymden Introduktion till CVS,17 november (27) Marcus Rejås

Lab 6: ASP.NET 2.0 Providermodellen

Föreläsning 5 (6) Metoder. Metoder Deklarera. Metoder. Parametrar Returvärden Överlagring Konstruktorer Statiska metoder tostring() metoden javadoc

Metoder. Inledande programmering med C# (1DV402)

Versionshantering. Jan Erik Moström

Två designmönster, MVC och Observer/Observable. Objektorienterad programvaruutveckling GU (DIT011)

Subversion. Laboration. Höstterminen 2008 r81. Ronny Kuylenstierna

Kapitel 4 Arkivmenyn Innehåll

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p

Objektorienterad programmering. Fält som funktionsresultat. Mer om fält: att uppdatera ett parameterfält. Kontrast: Parametrar av primitiv typ

Manual licenserver. Installations och konfigurations-manual för Adtollo licenserver

Stored procedure i ASP.NET

Stored procedure i ASP.NET

Introduktion till Entity Framework och LINQ. Källa och läs mer

DRAFT. CVS kurs laboration 1 Checka in, ut och uppdatera. Marcus Rejås. 17 november 2002

Java: Utvecklingsverktyg, datatyper, kontrollstrukturer

Objektorientering: Lagring och livstid

Labb LABB 1. Databassagan och en rundtur i databasers märkliga värld. Plushögskolan Frågeutveckling inom MSSQL - SU14

UTVECKLINGSVERKTYG. Praktiska tips för PUM-projekten

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

INTRODUKTION TILL JDBC

Statistik över heltal

Att deklarera och att använda variabler. Föreläsning 10. Synlighetsregler (2) Synlighetsregler (1)

Kort repetition. Programmeringsteknik för Bio1 och I1. Vad ska vi lära oss idag? Ett exempel

Denna laboration skapades för elever vid Roslagens Högskola men kan användas av vem som helst. Namnen på servrarna måste i så fall ändras.

Att koppla FB till AD-inloggning

Inledande programmering med C# (1DV402) Introduktion till C#

Design Collaboration Suite

Labb 1: Vad, hur, och varför?

MATLAB. Python. Det finns flera andra program som liknar MATLAB. Sage, Octave, Maple och...

Högskolan Dalarna sid 1 av 7 DI-institutionen Hans-Edy Mårtensson Sten Sundin

Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad. Skriv ditt idnummer på varje blad (så att vi inte slarvar bort dem).

KAP 18 SQL SERVER AGENT

Det här dokumentet är till för att ge en översikt över ASP.NET MVC samt hur WCF Services används från.net applikationer.

KARLSTADS UNIVERSITET 12/8/09 informatik & datavetenskap Johan Öfverberg, Kerstin Andersson Laboration 4, ISG A04 och DVG A08 HT-09

INSTALLATION AV KLIENT

Arv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... }

Tentamen i Introduktion till programmering

Introduktion till programmering D0009E. Föreläsning 1: Programmets väg

Delegater, events och lambdauttryck

Klasser i Java kan ha metoder och egenskaper. Metoder beskriver funktioner som klassen kan utföra. Egenskaper beskriver innehållet i klassen.

Malmö högskola 2007/2008 Teknik och samhälle

Lösningar för tenta 3 DAT043,

JUnit. Junit Unit Testing. JUnit 3. JUnit 3 forts. Villkorskontroller i test. Exempel JUnit3

Övning Dictionary. Övning 1. Steg 1: På din virtuella maskin, starta Visual Studio.

Manual - Storegate Team

Övning: Arbeta med Azure Explorer

Detta dokument skall ge en kortfattad introduktion till Jasmine installationen vid DSV.

Manual - Storegate Team med synk

Objektorienterad programmering i Java I. Uppgifter: 2 Beräknad tid: 5-8 timmar (OBS! Endast ett labbtillfälle) Att läsa: kapitel 5 6

Instruktioner för att kunna programmera på skolans datorer

Installera din WordPress med 9 enkla steg

Uppgiften är att beskriva en kvadrat i ett Java program. En första version av programmet skulle kunna se ut så här:

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

Dagens program. Programmeringsteknik och Matlab. Objektorienterad programmering. Vad är vitsen med att ha både metoder och data i objekten?

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

Instruktion för användande av Citrix MetaFrame

Lab 5: ASP.NET 2.0 Site Navigation

Transkript:

Övningar Lektion3 Avancerade Webbteknologier 2 Del 1: C#, Linq, Generics, Delegates Linq är väldigt centralt för en datadriven webbsida. I Backend-koden så blir det lätt väldigt mycket Linq-uttryck för att hantera all data. Förberedelser: Skapa en ny Console Application. Ladda ned Filerna för User.cs, Post.cs och Repository.cs från Dokument/Filer på bloggen (awt2gbgb2012.wordpress.com). Lägg till filerna till ditt projekt (Add existing ). Fundera över i vilka subkataloger/namespaces det kan vara lämpligt att lägga dessa klasser i. Kontrollera att du kan bygga projektet. Ifall du får problem, kontrollera namespace i respektive klass och using direktiv. Tips: ifall du saknar using direkt för en klass som Visual Studio känner till så kan du ställa markören på typen i klassen där using-direktivet saknar och trycka på snabbkommandot ctrl+. så kommer du få möjligheten att automatiskt lägga till rätt using-direktiv. Repository-klassen är tänkt att simulera ett väldigt enkelt datalager och skulle tänkas hämta data från en databas. Metoden LoadUser( ) i Post laddar in ett relaterat User-objekt på ett Post-objekt (User-objektet kan sedan kan nås med en Propery CreatedBy på de objekt som metoden körts på). Jag vill påpeka att konstruktionen att man behöver skicka med en lista över users i metod-anropet är onaturlig och ineffektiv. Anledningen att jag tar med den ändå är att jag vill att ni skall ha hanterat objekt där man behöver ladda in ett relaterat objekt i efterhand. Ifall ni tycker detta känns konstigt så hoppas jag att ni kan ha överseende med det tills vidare. Vi kommer titta på hur detta hanteras normalt senare i kursen, efter att vi börjat jobba i MVC 3 med en underliggande databas. 1. Skapa en extension method för int som gör kontrollerar ifall en integer är mellan två andra integers som ges som parametrar i extension method anropet. Tips: metoden kommer ha signaturen public static bool Between(this int i, int min, int max ) 2. Vad gör följande extension method? public static bool In<T>(this T source, params T[] list) { } Testa! if (null == source) throw new ArgumentNullException("source"); return list.contains(source);

Tips: T är en generisk typ-parameter, som byts ut mot en faktisk typ när metoden används. Behöver du skriva med T, eller någon annan typ, när du använder ovanstående metod? 3. Skriv om ToString() på User och Post till en Extension method istället. 4. Skapa en Func-delegate som tar en sträng och returnerar en bool och initiera till en lambdafunktion som returnerar true ifall strängen är mindre än 4 tecken. Tips: fundera på hur Func-typen kommer se ut. Vilka typer har Func-typens in-parameter och utparameter? 5. Filtrera ut alla användare som har ett förnamn som är mindre än 4 tecken med ett Standard Linq Query (from [] in [] where [] select []) och delegaten du skapade i punkt 4. Tips: använd delegaten i where-satsen. 6. Gör en join med User och Post på UserID/CreatedByID med Standard Linq Query (from [] in [] where [] select []). Filtrera ut de poster som är gjorda av en användare av typen UserType.Admin. Tips: Läs om nyckelordet join och kika på exempel. 7. Använd Method-based Linq Query för fråga 7-10. Filtrera och skriv ut en lista av alla användare som är av typen UserType.User 8. Vad är snittlängden av alla användares FullName? Tips: Filtrera först ut en lista av namn-längder. Kontrollera ifall det finns någon lämplig metod att köra på den filtrerade listan. Beroende på hur du löser det, kan du behöva göra en cast: float myfloat = 64 / 7; ger resultatet 9 (64 / 7 räknas ut som en int innan det konverteras till float) float myfloat = (float)64 / (float)7; ger resultatet 9,142858 9. Filtrera ut alla poster med en viss tag, skapa utifrån filtreringen en lista av alla unika användare som skapat dessa poster. Tips: Använd.Any i ett Linq-uttryck för att hitta alla poster med en viss tag. Vilket nyckelord används i SQL för att plocka ut unika rader ifall man får ett resultat som innehåller dubletter av rader? Fråga mig ifall du inte känner till detta nyckelord. 10. Skriv ut en lista av alla poster under datumet de skapades på. Lista datumen i ordning och lista även posterna under varje datum i datumordning. Ex: 2012-08-17 2012-08-18 [Första posten aktuellt datum] [Andra posten aktuellt datum]

[Första posten aktuellt datum Etc Tips: Titta på DateTime-objektens Date Property. Använd GroupBy för att skapa en lista av datumgrupp,post-par (sök på och titta på lite exempel på.groupby). Genom 11. Läs på... Övriga Linq-nyckelord, repetera arv och interface (försök skapa ett exempel där det är mer lämpligt att använda ett interface snarare än arv). Läs i någon av böckerna som finns länkade i kursplaneringen, eller kika på t.ex. http://msdn.microsoft.com/en-us/vstudio/hh341490.aspx Överkurs: 12. Gör om GetUsers och GetPosts i Repository-klassen så att du har möjlighet att skicka med en filtrerings-parameter i metodanropet. T.ex. var adminusers = GetUsers([Filtreringsparameter för att filtrera ut alla användare av typen Admin här]). Det skall även gå att använda GetUsers() och GetPosts utan att skicka med någon parameter (Detta går att lösa utan att skapa fler metoder). 13. Detta är en följdfråga på punkt 2 ovan. Vad krävs av de typer som man använder denna metod på för att det skall fungera? 14. Skriv om metoden LoadUser( ) i Post så att man inte behöver skicka med en lista över users i anropet. Det finns flera sätt att lösa detta på, ett sätt skulle kunna vara att göra om Repository till en Singleton (Singleton är ett designmönster för att skapa en, ensam, unik instans av ett objekt som hålls levande hela tiden programmet exekveras. En Singleton kan t.ex. användas för att hålla reda på ett programs interna tillstånd eller state). Del 2: git, github Git-övningarna innehåller ingen överkurs. Du bör kunna allt som görs i dessa övningar. Ifall du kör fast experimenter och googla efter lösningar och exempel. Det går också bra att fråga/maila mig. 1. Skapa ett konto på github (https://github.com) (För Windows: välj att kunna använda git från windows command prompten, välj Checkout Windows Style). 2. Ladda ned och installera git (Följ länk efter du skapat konto, jag valde att installera git gui). 3. Skapa ett Repo (Namnge repot till t.ex. Lektion3, lägg till en.gitignore-fil för csharp, gör Repot publikt, annars måste du betala för kontot). 4. Hur hittar du adressen/adresserna till ditt repo? För att använda git kan du använda git från kommando prompten (generellt så ser kommandon ut som följer: git [kommando] [växlar/options/etc] testa git help eller sök på nätet). Alternativt så kan du använda Git Gui som finns integrerat i Windows utforskaren. Jag har inte testat, men jag förutsätter att Git Gui finns tillgängligt för andra operativsystem också (Man kan även använda andra grafiska GUIs se sista stycket i detta dokument). 5. Hämta ut ditt Repo lokalt. (clone) 6. Ställ in ditt användarnamn och epost. Antingen via Git Gui om du valde att installera det med git, eller via en kommando prompt med följande 2 kommandon:

git config user.email your@email.here git config user.name your_git_username_here Lägg märke till att det är 2 st. - framför git. För Windows kan du göra det i kommandoraden om du valde att kunna använda git från windows kommando prompt. För Linux/mac/unix bör det fungera förutsatt att du har git i din PATH. 6. Lägg till en text-fil till ditt lokala Repo (add) 7. Gör en förändring i filen i ditt lokala Repo och commita (commit) 8. Pusha till github från ditt lokala Repo Gör det till en vana att alltid hämta ned senaste versionen från det centrala Repot innan du gör en push. (push) Titta på länken längre ned Everyday git in 20 commands or so hur de använder push och försök lista ut hur man gör för att pusha till github (tips: Origin är 9. Testa merge på en fil - t.ex. genom att klona ytterligare en kopia av ditt repo lokalt - göra olika ändringar i samma ställe i en textfil i båda dina lokala Repos, commita och pusha sedan till github. 10. Gå tillbaka till den första versionen av filen som du commitat(git checkout). Efter att du kontrollerat att du är på den första versionen av filen gå tillbaka till den senaste versionen igen (git checkout master). 11. Skapa en namngiven branch och gör några ändringar i textfilen i branchen. Commita ändringarna till ditt lokala Repo och pusha sedan till github. Merga sedan ihop den nyskapade branschen med huvudbranchen igen (denna kallas normalt master). (checkout b) (merge) 12. Ställ in ett Repo för sammarbete på github du måste veta något användarnamn på github för att kunna lägga till en kollaboratör mitt användarnamn är awt2gbg2012 ([Gå in på Aktuellt Repo] - > Admin -> Collaborators -> Add). Vad innebär det att ha en Collaborator i ett Repo? 13. Klona mitt Lektion3-Repo (https://github.com/awt2gbg2012/lektion3.git) - eller sök på min användare awt2gbg2012 på github för att hitta Repot. 14. Läs på hur man hanterar konflikter försök skapa en konflikt som du måste lösa innan du kan pusha till github (använd två lokala repositories för att simulera flera användare). 15. vad gör.gitignore-filen? 16. Överkurs: Läs på och experimentera med rebase-kommandot finns det bra och dåliga sätt att använda kommandot på? Avslutningsvis: Läs på: http://www.kernel.org/pub/software/scm/git/docs/everyday.html (Everyday git in 20 commands or so) Läs på: Hur hanterar man en konflikt vid merge? Läs på: http://sethrobertson.github.com/gitbestpractices/

Läs på: på github - features (länk längst ned på sidan om du är inloggad, längst upp annars) - lägg speciellt märke till Features/Project Management/Collaboration Features/Project Management/Integrated Issue Tracking Features/Code Hosting/File History Features/Code Hosting/Blame / Annotate Utforska: Det finns en uppskö GUI klienter listade på git-scm.com (T.ex. github for windows). Ifall någon av er är vana git-användare får ni gärna rekommendera bra GUI klienter (Bl.a finns TortoiseGIT som är en portning av TortoiseSVN). Det finns även GUIs som är integrerade med Visual Studio t.ex. GitExtensions de har tutorial-videos på sin hemsida så ni själva kan kan avgöra ifall ni tycker det verkar vara smidigt. Min erfarenhet vad gäller GUIs för versionshanterings-verktyg är att så länge man använder ett GUI som är stabilt så spelar det mindre roll vilket man väljer. Ofta går det snabbare och smidigare att utföra vardagliga kommandon i ett GUI. Ifall man väljer ett GUI som är integrerat med sin editor (VS Pro i det här fallet) så kan det vara enklare att arbeta in en vana att commita ofta. Dock är det bra att vara hyfsat bekant med att använda git från kommandoraden, för det händer att man stöter på situationer där man inte kommer undan det.