Att lära sig skillnaden på upp och ned

Den här veckan har jag fokus på web-design och responsiva sidor. Som led i #100DaysOfCode går jag igenom freeCodeCamp:s utbud med fokus på frontend. Jag har 5 uppgifter att genomföra i den kurs som kallas Responsive Web Design.

De 5 uppgifterna, varav den första är påbörjad:

  • Tribute. Jag har valt att göra en hyllning till Horizon: Zero Dawn. Dess aktuella form (f.n. inte klar, 17 februari 2020) återfinns på femtearenan.se/tribute.
  • Survey Form.
  • Product Landing Page.
  • Technical Documentation.
  • Personal Portfolio.

Målet är att få alla fem klara denna vecka. Men för det så behöver jag färdigställa en sida per dag. Jag har fokuserat en del på att använda nya tekniker som jag har lärt mig på den första uppgiften. Förhoppningsvis innebär det att jag lättare kan implementera rätt tekniker på de efterföljande uppgifterna.

Så vad har jag lärt mig då? Framförallt har allt med CSS animation varit nytt för mig. Det har inneburit att jag lärt mig om keyframes, timing, cubic Bezier curves, med mera. Jag har också lärt mig en del om CSS Flex. Med tanke på att jag framförallt har använt mig av CSS Grid så har detta varit nyttigt för mig. Men jag lärde mig trots detta även något nytt om Grid. Det jag lärde mig var att äntligen förstå vilka siffror det är som utgör hur mycket en cell ska uppta av kolumner och rader. Jag har trott att det har haft att göra med hur många kolumner (eller rader) en cell ska uppta (minus ett). Men det visade sig att siffrorna egentligen relaterar till tänka linjer som omger respektive kolumn. Ta första kolumnen som exempel. Den utgörs av linje 1 och 2.

Det var allt för idag. Ni kan fortsätta kolla på tribute-sidan om hur det hela utvecklas. På onsdag har jag tänkt att jag ska kunna presentera uppgift 2 och 3. Vi ses då!


Här görs det JS.

Denna veckan påbörjade jag #100DaysOfCode samtidigt som jag slängde mig in i JavaScript. Jag har använt mig av en kurs från freeCodeCamp och så här långt har jag hunnit gå igenom följande:

  • Basic JavaScript
  • ES6
  • Regular Expressions
  • Debugging
  • Basic Data Structures
  • Basic Algorithm Scripting

Vad har varit svårast så här långt då? Regex! Regex (regular expressions) handlar om att skapa instruktioner för att hitta mönster. I JavaScript kan man göra enligt följande:

let regex = /\w{1,}/g;
let str = "Words on the screen";
str.match(regex);
// results in ["Words", "on", "the", "screen"]

Då kommer regex användas för att hitta mönster som passar in mot instruktionerna. I exemplet ovan så säger instruktionen att den ska fortsätta kolla igenom hela textsträngen tills den hittar bokstäver (och siffror) i en följd. Det ska ingå minst ett tecken i strängen men inga specialtecken eller mellanslag ska matchas. Ibland har jag trott att jag har haft koll på hur det ska användas, men ofta har det blivit lite av trial and error.

Det som jag har tyckt varit roligast hittils är det avsnitt som kallas för Basic Algorithm Scripting. Det har inneburit mer frihet att komma fram till lösningar själv. En klassiker som kom var att göra en funktion för att beräkna fakultet. Den är ett klassiskt exempel på hur man kan använda sig av rekursion. Min lösning såg ut så här:

function factorialize(num) {
  if (0 === num) {
    return 1;
  } else {
    return num * factorialize(num - 1);
  }
}

Vad rekursion innebär är att funktionen kommer kalla sig själv med ett nummer mindre för varje gång tills numret är lika med 0. Låt oss ta ett exempel:

let product = factorialize(3);

Första steget:

function factorialize(3) {
  if (0 === num) {
    return 1;
  } else {
    return 3 * factorialize(3 - 1);
  }
}

Vi har skickat in 3 till funktionen och kommer ned till att den kallar sig självt med 3 – 1:

function factorialize(2) { 
  if (0 === num) { //fortfarande inte lika med 2
    return 1;
  } else {
    return 2 * factorialize(2 - 1);
  }
}

Som ni kan se så blir det att den åter kallar sig själv tills talet blir lika med 0. 0 fakultet är definierat som 1 och det är detta värde som kommer returneras. Vi kommer då att åter hamna där funktionen åberopades första gången, och sammanfattat ser det då ut så här:

function factorialize(3) {
  if (0 === num) {
    return 1;
  } else {
    //varje parantes motsvarar de gånger som funktionen kallar sig självt: 
    return 3 * (2 * (1 * (1))); 
  }
} 

Funktionen ger svaret att 3! är 6.

Det har varit en rolig vecka, och mycket har också varit tack vare det stödet som jag får från alla på Twitter. Det är många som gör eller har gjort liknande resa som jag själv gör just nu. Även om vi har lite olika uppfattningar om den. Nästa vecka blir det lite objekt orienterad programmering följt av funktionell programmering. Det förstnämnda är jag välbekant med från Java och PHP, men funktionell programmering kommer nog bli något nytt.

Trevlig helg, allihopa!


Det går framåt

Det blev visst en ordvist här. ”Det går framåt”. Jättekul! För att JavaScript ofta handlar om frontend. Men titta här:

Sedan jag startade min JavaScript-resa i måndags med freeCodeCamp så har jag nu gått igenom grundstegen. Jag gillar upplägget med ett interaktivt fönster som man kan koda i och jag tog mig snabbt genom de grundläggande delarna (Basic JavaScript). Jag har fortsatt till ES6. ES6 står för EcmaScript 6 och är synonymt med den senaste standarden av JavaScript. Det ES6 erbjuder är bland annat konkurrerande variabeldeklarationer till var; dessa är let och const. Med let så kan man få varning om man försöker deklarera en till variabel med samma namn. Det innebär också att den variabel som deklareras också kommer hålla sig inom det block där det deklarerades. I en for-loop så kommer let i att vara förbehållet den loopen. Men med var så kommer i att finnas tillgänglig utanför loopen. Med const så kan man skapa konstanter. Om jag gör en konstant const PI = 3.14; så kommer jag inte kunna ändra värdet på PI senare i koden.

Fler roliga saker är arrow functions. Dessa påminner om de lambda-funktioner som kom med Java 8. Det dessa gör är att det blir enklare att göra anonyma funktioner. Kombinerat med att man kan skicka godtyckligt många argument så får man väldigt mycket flexibilitet.

Än så länge har ES6 erbjudit JavaScript sådant som jag känner igen från min tid med Java. Något som jag däremot bara skrapat på ytan än så länge är callback functions och destructuring assignment. Jag behöver mer träning här.

Jag fortsätter med kurserna på freeCodeCamp och återkopplar vad jag lär mig. Under tiden rekommenderar jag att ni håller ögonen på #100daysOfCode på Twitter. Det är fantastiskt vad folk motiverar varandra där och det är något som gör mig glad. Vi ses på fredag!


Från baksida till framsida – dags att lära mig JavaScript

Förra veckan la jag till en nyhetsblogg till Bokarenan som dessutom kom med logisk perma-länk till respektive inlägg. Det finns fortfarande fler funktioner och justeringar som kan göras till hemsidan, men för närvarande riktar jag min blick till JavaScript. Jag vet att det finns de som löser både frontend och backend med JavaScript, men för min del har jag än så länge undvikit det hela på alla sidor. Undantaget är när användare ska manuellt lägga till bokinformation och behöver fler fält om en bok har flera författare. Faktum är att jag vet näst intill ingenting om JavaScript. Nu är det dags att ändra på det!

Denna vecka kommer jag därför att börja lära mig JavaScript. Jag tittar därför på www.freecodecamp.org och ser om deras sätt att lära ut är något för mig. Detta blir det tredje programmeringsspråket jag lär mig. Tidigare har jag lärt mig Java och PHP. Med Java var det inledningsvis böcker som jag använde mig av, för att sedan använda TeamTreehouse. Med PHP började jag också med en bok och försökte sedan med TeamTreehouse igen. Men att lära mig PHP genom Treehouse var inget för mig då. Jag tror att jag började på en för enkel nivå då och blev lite uttråkad. Jag kunde bygga funktionella saker efter den första boken, så att använda officiella guider verkade vara lösningen för mig. Nu går jag alltså in för JavaScript utan att ha läst någon bok innan. Jag är dock väl inläst på de grundläggande detaljerna som är gemensamt för många programmeringsspråk, jag måste dock lära mig dialekten och de finesser som följer med språket.

Upplägget på freeCodeCamp är textbaserad förmedling av information kombinerat med interaktiva test. Det innebär att det finns ett kodar-fönster i samband med informationen där man får försöka klara av olika test. Så här kan det se ut:

Exempel på en sida ur JavaScript-tutorial på freeCodeCamp.org

Som del av att lära mig JavaScript så har jag gått med i gemenskapen #100DaysOfCode. Det innebär ett åtagande gentemot gemenskapen att programmera en timme om dagen i etthundra dagar. För att hålla mig på banan nu när jag ger mig in i ett nytt språk är det bra att få det extra lilla stödet man kan få av varandras pepp.

Vi ses på onsdag, då blir det lite initiala reaktioner på JavaScript. Men nu kör vi!