Redovisning av kursmoment

Detta är redovisningssidan för kursen, här finns samtliga redovisningstexter när du är klar.

Kmom01

Det gick jättebra att komma igång med kursmomentet det behövde fixas lite nya ssh-nycklar och sådant för dbwebb cli men annars var det inga problem jag har gått dbwebb-kurser förut så allting var i ordning redan. Jag har också en miljö uppsatt sedan tidigare, den består av min server och nas där all kod ligger och kan köras. Detta innebär att jag kan genomföra uppgifterna från vilken enhet jag vill. Jag föredrar att jobba från min desktop dator även fast det är windows på den. Men den har 3 skärmar så man får ett bekvämt arbetssätt där man slipper tabba för att hitta information osv.

Jag har även petat lite python tidigare men absolut för lite för att säga att jag kan det, det ska bli kul att lära sig något nytt. Jag skrev ett enklare script för att uppdatera DNS records men inget mer än så. Jag har också jobbar med Unix terminaler innan, min server kör Arch Linux så jag skulle nog kunna påstå att jag känner mig rätt hemma med terminaler men det behövs byggas på kunskap där också.

Jag läste inget av materialet utan slängde mig rakt in i övningarna, dem var rätt bra för att värma upp. Sen kändes uppgiften med värden och variabler rätt långtråkig. Jag kände inte att jag kunde visa vad jag kunde där. Andra uppgiften var bättre där skapade jag funktioner för att räkna ut resultatet i båda riktningar. Jag implementerade bara de som var med i kraven i slutresultatet dock men funktionerna finns där och funkar.

En variabel en lagringsyta i minnet som refereras till med en minnesadress och innehåller information.

http://www.student.bth.se/~rasb14/dbwebb-kurser/python/

Kmom02

Jag är van vid att skriva kod i JavaScript eller C# dessa båda språk har en liknande struktur som varandra men den är annorlunda jämfört med Python. Det har varit lite svårt att anpassa sig när man är riktigt van med något annat. Ha kommit på mig själv flera gånger med parenteser i if-satser och måsvingar runt scopes. Annars tycker jag att det är ganska enkelt att hänga med. Det är lite ovant att läsa då texten helt plötsligt hoppar en massa tabbar fram och tillbaka men det har med vana att göra.

Det gällde bara att hänga med i syntaxen så loopar inga problem heller. For-loopen är väldigt användbar när du skall gå igenom en sekvens av världen eller tugga igenom en lista med en fixad längd. När du inte vet hur många loopar du ska köra kan en whila istället vara lösningen då du för styra helt själv vilka conditions som skall gälla och när loopen skall avslutas.

När jag validerar mina uppgifter så tycker jag att pylint har rätt. Den är något sträng kanske men det är bara bra så man får lära sig att skriva mer enligt best practise. Annars gick det bra att genomföra uppgifterna och jag gillar att kunna utgå från ett exempelprogram där eventuell overhead är klart så att det blir mer fokus på uppgifterna. Jag tycker det är skönt att slippa pilla med saker som egentligen bara tar tid men inte påverkar resultatet.

Jag gjorde en av extra uppgifterna då jag tyckte den såg enkel ut. Såg direkt att det bara krävdes en loop och en if-sats för att lösa det så jag kastade ihop A1 lite snabbt.

http://www.student.bth.se/~rasb14/dbwebb-kurser/python/

Kmom03

Jag har programmerat med funktioner innan, Jag skulle nog inte klara av att skriva ett större program utan dem. För mig är det ett sätt att dela upp problem i mindre bitar. Personligen kan jag då fokusera på ett delproblem i taget och se till att allt där fungerar korrekt innan jag går vidare. Jag brukar också försöka se till att mina funktioner har en enda uppgift. Hur funktionen sen genomför uppgiften kan vara hur avancerat som helst. Huvudsaken är att det ska vara tydligt vad funktionen gör.

Uppgifterna i kursmomentet var inte jättesvåra men man fick mer koll på syntaxen i Python jämför med andra språk som JavaScript och C#. Jag funderade lite när jag gjorde uppgifterna men använde mig mycket av Pythons manual för att ta reda på hur saker och ting görs på ett smidigt sätt.

Jag vågar inte säga något om videon i detta kursmoment då jag inte kollade på den men tidigare har dem varit jättebra om det är något som varit svårt (har gått andra dbwebb kurser tidigare).

Jag gjorde båda extra uppgifterna. Dem var lite svårare än allt annat men jag tror jag lyckats med båda. Jag är lite orolig för den med betygen då jag inte visste om det var någon skala som gällde. Jag skapade bara en array av bokstäver från lägsta betyg F till högsta A. Jag tog inparametrarna och normaliserade värdet och multiplicerade med 5.9 och floorade sedan resultatet. Betyget hämtades från betygssträngen med indexet som räknades ut ifrån den normaliserade poängen.

http://www.student.bth.se/~rasb14/dbwebb-kurser/python/

Kmom04

Det är skönt att kunna dela upp koden så att man inte har allt på samma ställe och får en gigantisk röra med funktioner, klasser och andra kodsnuttar i en enda gigantisk soppa till fil. Något som jag däremot oroar mig för är hur mappen kommer se ut. Känns som att man lätt får en mapp med hur mycker fler som helst utan någon som helst struktur. Men som jag sa i början kan modulerna användas till att dela upp koden på ett smidigt och logiskt sätt.

Vet inte riktigt vad som menas här, är det programkod filer eller andra typer av filer? Filer som innehåller programkod tolkar jag i nuläget mer eller mindre som moduler. Andra filer hanteras väldigt lika många andra språk så jag vet inte om det är något konstigt. Att kunna läsa från filer kan dock vara otroligt viktigt. Om man har ett program som kräver en komplex konfiguration så kan det vara bra att läsa den från fil så slipper man massa startargument. Det kan också vara så att programmet ska läsa en större mängd data. Då kan det också vara praktiskt att läsa från en fil.

Alla uppgifter tog ganska lika lång tid. Större delen av tiden spenderades med att läsa manualen för att ta reda på hur de inbyggda funktionerna fungerade. Jag egentligen inga problem med uppgifterna däremot så var tyckte pylint illa om min kod. Jag kan förstå varför men det tog också en del tid då jag inte validerade förens det var dags att skriva detta. Jag hade velat göra extra uppgiften men jag hade för ont om tid för att hinna med den.

http://www.student.bth.se/~rasb14/dbwebb-kurser/python/

Kmom05

Jag har programmerat en del tidigare så listor var inte nytt och heller inte svårt att förstå sig på. Jag jobbar hela tiden med listor, uppslagsverk och arrayer i jobbet men även en hel del på fritiden också. Jag ser väl inte direkt någon större skillnad på listor i python jämfört med andra språk, det skulle vara vad funktionerna man använder för att manipulera listor ibland har annorlunda namn. Det kan vara förvirrande ibland men manualen är till god hjälp där.

Att jobba med innehåll i filer som listor istället för strängar är väldigt praktiskt så länge filen är formaterad och/eller skriven på ett sådant sätt att den supportar det. Jag gick direkt på att spara datan som ett JSON objekt men jag vet hur filer används som listor. Håller på en del med CSV-filer via jobbet, där har du filer som lämpar sig väl att läsa in som listor.

Jag la en del tid på att göra inventoryt till marvin. Det finns en del som skulle kunna bättras på där, t.ex hur argumenten läses in och processas. Jag gjorde tyvärr bara några av extra uppgifterna. Jag hoppade direkt till “kryperingen” och gjorde de två första uppgifterna. Jag vet inte om jag tycker det är kryptering, känns mer som encoding med tanke på svagheten av algoritmen. Det handlar väl mest om att förvränga datan på ett sätt där man via en nyckel kan få tillbaka den igen. Tyvärr räckte inte tiden till att göra någon av de andra extra uppgifterna även om jag var riktigt sugen på att göra tic tac toe uppgiften. Den kanske kommer i en senare marvin bara för att.

http://www.student.bth.se/~rasb14/dbwebb-kurser/python/

Kmom06

Jag hade rätt bra koll på listor, dictionaries och tupler sedan tidigare. Det var inga större problem med att få koll på dessa i python också. När du vill använda någon av tidigare nämnda datastrukturer beror helt på vad du vill göra skulle jag säga. Vill du skriva och jämföra object mot ett t.ex ett API så kan en dictionary vara bra då du troligtvis har någon typ av unik nyckel du kan använda för att slå upp ett objekt med och sedan göra jämförelsen. Har du av någon anledning en sekvens av objekt i t.ex en kö där ordning spelar roll kan en lista vara bättre, har du en kö så bryr du dig om vilken ordning object ligger i snarare än att du vill kunna hitta ett specifikt object. Tupler känns lite mer sällsynta men kan användas när man har en ändlig lista med värden som man kanske vill namnge. Som en array av namngivna variabler.

En lista, en oändlig mängd objekt som behåller sin ordning men refereras till via index.
Ett uppslagsverk (dictionary), en oändlig mängd objekt som refereras till med en nyckel.
En tuple , en ändlig lista med namngivna objekt.

Jag använde listor för alla ord och rader i texten, här finns egentligen inte någon anledning till ordning men en nyckel för varje objekt är överflödig och jobbigare att skapa. Dictionaries använde jag för att räkna ut frekvensen för ord och bokstäver. Spara antalet ord som värdet med ordet som nyckel. Tillsut tupler fungerade väldigt bra när utskrift skulle ske. Det var enkelt att hantera dessa efter att ha plockat fram dem ur uppslagsverket.

Att genomföra uppgifterna gick bra det var inte allt för knepigt men jag tänkte lite fel några gånger så fick gå tillbaka och se till att saker funkade som de skulle. Fick lägga till extra felhantering efter att ha skapat min egen textfil crasher.txt. Jag visste att det skulle sprängas när jag skapade den men jag ville testa ändå. Några extra uppgifter fanns inte så dem hoppade jag över.

http://www.student.bth.se/~rasb14/dbwebb-kurser/python/

Kmom10 Examination

Första uppgiften löste jag de delarna med bokstäver och mellanrum genom att ta borta alla tecken som inte var a-zA-Z respektive \s. Detta gjorde jag med en regex som byter ut allt som inte stämde med [^a-zA-Z] eller [^ ]. Jag har då kvar bara a-zA-Z eller \s och kan ta len på strängen och på så vis få reda på hur många av de olika tecken som finns. Specialtecken i paragraf löste jag genom att dela texten på varje radbrytning och sedan loopa igenom raderna. Om en rad har längden noll finns ingen anledning att genomföra ytterligare operationer så då hoppar jag vidare till nästa genom en continue. Jag loopar sedan igenom alla tecken i raden och kollar om något av dem finns i en fördefinierad sträng som innehåller de angivna specialtecken som skall letas efter. Hittas ett specialtecken läggs en etta på en räknare. Om värdet på räknaren är större en tidigare största rad sätts tidigare största rad att vara antalet på nuvarande rad. Resultatet skrivs sedan ut på skärmen.

Uppgift två använde jag också regular expression för. Om parameterns värde matchar ‘07[02369]-[0-9][3} [0-9][2} [0-9]{2}’ så är det ett giltigt och korrekt formaterat mobiltelefonnummer enligt uppgiften. Om regexen inte matchar så får man resultatet None så man måste kolla på resultatet och se om det är ett värde. Först då vet man om man skall returnera True eller False.

Den tredje uppgiften ville jag lösa utan att använda mer än en loop. Det slutade med en while-loop som går utför en del operationer på alla tecken i parametern (number) utom den sista som sparas undan innan while loopen startar. Innan loopen startar så kollas längden av det inskickade värdet och om det inte är 14 eller 16 så returneras False. Det finns ingen mening med att utföra operationer på något som kommer att bli felaktigt. I loopen så multipliceras varannan siffra med två. Jag använder modulus på räknaren för att kolla om det är en siffra på en jämn index för att hitta varannan. Sedan om värdet är större än nio delas talet upp i tiotal och ental med hjälp av modulus och division och adderas. En variabel får sedan iterationens resultat adderat till sig. Det värdet multipliceras med nio och modulus hämtar den sista siffran och jämför den med kontrollvärdet för att få ett resultat.

Uppgift nummer fyra ville jag också gärna lösa med en enda loop men det blev två stycken tillslut ändå. Det första som händer är att det skapas en lista till. Jag går igenom alla värden i lista ett och ser till att värdet är i lowercase. Om värdet inte finns i den nya listan så läggs det till. Jag går sedan igenom alla värden i lista två och ser till att värdet är i lowercase. Om värdet finns i den nya listan tar jag bort det ur den nya listan, annars lägger jag till det. Jag sorterar listan och får ett resultat. Det är inte den mest effektiva lösningen men den får duga.

Den sista uppgiften (uppgift fem) är nog den där jag tycker minst om min lösning. Här bör det ha varit möjligt att skapa en generell funktion som kunde hantera både datumen och tiderna. Funktionerna är väldigt lika det som skulle vara knepigt att göra generellt är jämförelserna i looparna. Dessa jämförelser kollar att klockan inte är mer än 23:59 och datum inte är mer än yyyy-12-31. Båda funktionerna börjar dock lika genom att jag hämtar alla möjliga tider och datum från texten med hjälp av regex. Alla matchande strängar som regex hittat loopas sedan igenom och jämförelser för att värdet är korrekt genomförs. De värden som passerar loopen returneras sedan som en lista. Anropande funktion får se till ar skapa strängen som sedan skrivs ut.

Jag tyckte att det gick bra att genomföra uppgifterna. Det var gott om tid. Jag hade löst alla uppgifterna efter cirka tre timmar och 20 minuter så jag hade mycket tid att lugnt och städat gå igenom uppgifterna och se till att jag tyckte att mina lösningar var godtyckliga. Jag var helt klar efter ungefär fyra timmar. Jag hade bara ett problem som under mina första 30 minuter var riktigt frustrerande. Jag hade stavat fel i namnet på filen för analyze modulen så fick ett fel från correct kommandot där det stod att något var None. Tog mig en halv timme att komma på vad det var. Jag kan tycka att det kunde fått vara lite svårare faktiskt. Det hade inte heller skadat med lite mer varierande uppgifter. Nästan alla handlade om någon form av stränghantering.

Det hade varit roligt om något kursmoment faktiskt innebar att man skapade någon typ av server som man skulle kunna curla lite mot. Annars tycker jag att jag fått bättre koll på baserna i python. Jag tror dock att man hade kunnat läsa sig till mycket av det som vi lärt oss på internet. Kursen får 6/10 pizza slices.

http://www.student.bth.se/~rasb14/dbwebb-kurser/python/