Kunskapsbanken
Artiklar, guider, tips och trix tillsammans med exempelprogram inom webbprogrammering och webbutveckling. Inläggen är listade i den ordning som de senast uppdaterats.
Artiklar, guider, tips och trix tillsammans med exempelprogram inom webbprogrammering och webbutveckling. Inläggen är listade i den ordning som de senast uppdaterats.
Så här gör du för att installera Bash med Ubuntu i Windows via WSL samt tar hjälp av pakethanteraren och installerar det som behövs för att komma igång med kurserna.
Denna artikel visar hur du kommer igång och installerar python i terminalen.
Ibland räcker det inte till med enbart SQL utan man behöver någon form av ytterligare programmeringsmässig hantering av informationen. För att ta ett exempel, säg att man vill flytta pengar från ett konto till ett annat, men bara om det finns tillräckligt mycket pengar på kontot.
Man kan naturligtvis koda detta i godtyckligt externt programmeringsspråk. Men kan det finnas en möjlighet att koda sådant direkt i databasen?
Här kommer lagrade procedurer kommer till vår hjälp.
I denna övningen tittar vi på hur vi kan använda websockets för att kommunicera i realtid mellan flera klienter.
Inom programmering är en ‘datastruktur’ en struktur för att organisera data. Valet av datastruktur är viktigt då de har olika betydelse för prestanda och presterar olika beroende på vilka algoritmer som har planerats att användas. En datastruktur är en abstrakt beskrivning till skillnad från ‘datatyper’. En datatyp kan vara exempelvis Integer, String eller boolean. Det har en fast betydelse medan en datastruktur beskriver något odefinierbart, till exempel en lista eller array.
Vi går några steg längre med våra enhetstester. Hur ska vi tänka när vi testar metoder som innehåller if-satser och loopar? Hur hanterar vi beroenden till annan kod?
Enhetstester, eller unittester, används för att testa att enskilda metoder eller funktioner gör vad vi förväntar oss. Till exempel om en metod ska returnera bool-värdet True
, så ska den aldrig kunna returnera False
.
Vi ska titta lite på pythons inbyggda testramverk unittest och hur en katalogstruktur med kod och enhetstester kan se ut. Vill du läsa mer kan du kika på docs.python.org.
Vi kommer i denna artikel titta på hur vi kan använda GitHub Education Pack för att få ett gratis domännamn.
En snabb översikten av vad Docker är kan vi hitta på Dockers egna webbsida. Docker är en container teknologi som liknar en avskalad virtuella maskin. Vad tillför det till oss som utvecklare?
Docker låter utvecklare att utveckla och driftsätta applikationer i virtuella container miljöer. Detta ska göra att en applikation kan köras på exakt samma sätt utan kompabilitets problem oberoende av vilken dator/server den körs på, så länge Docker är installerat. Att applikationen kan köras oberoende av systemet gör att applikationen blir lättare att använda, utveckla, underhålla och driftsätta.
Kolla på följande video för en kort introduktion till Docker och hur vi kan använda det.
Om ni redan har läst kursen vlinux kan ni gå vidare till nästa steg. Annars jobba igenom hela följande guide för att lära er skapa egna images och containrar och använda docker-compose.
Om ni vill öva mer på Docker så finns det många Docker övningar på killercoda.
Läs om Docker latest tag, ett annat hett ämne inom Docker är om man ska använda latest
taggen för att köra images eller ej.
Docker är väldigt populärt inom devops världen av många anledningar, läs om varför i Dockers bloggserie Docker and the Three Ways of DevOps.
Att köra sin databas i Docker har länge varit debatterat, många är emot men fler och fler börjar tycka att det är OK. Jag är för att köra databasen in Docker så länge man lägger data mappen som en volym så att datan inte skrivs över när vi startar om containern.
MySQL sparar sin data i mappen /var/lib/mysql
så när ni kör er databas container i produktion gör den mappen till en volym på host systemet. Så att datan i databasen inte försvinner när vi stänger ned containern.
En viktigt del av det praktiska inom devops är att spara konfiguration som kod och versionshantera den. Detta är för att undvika att tillfällen uppstår där det bara är specifika personer som vet hur man startar/kör/konfigurerar något. Allt ska finnas som kod och versionshanterat så alla kan göra det.
En typisk sån sak är att bygga/köra Docker images. Att bygga/starta en image behöver ofta någon slags konfiguration t.ex. vad ska vara volymer, miljövariabler eller vilken port som ska öppnas. Om detta inte finns som kod blir det svårt för någon annan än för den som skrev koden att göra det.
För Docker använder vi docker-compose i detta syftet.
Läs att använda docker compose i produktion.
För att docker-compose ska klara av att hantera <<-EOF
i Dockerfile, vilket vi använder för Microblog, behöver ni sätta följande miljövariabler:
export DOCKER_BUILDKIT=1 export COMPOSE_DOCKER_CLI_BUILD=1
Om ni jobbade igenom hela docker guiden längre upp borde ni ha det installerat. Annars jobba igenom följande guide för att installera.
Vi har kikat på grep tidigare och vi vet hur vi använder det för att matcha delsträngar från en fil och manipulera utskriften. Vi kan även använda oss av reguljära uttryck i vår matchning.
Några “bra att ha”-options:
Command | Beskrivning |
---|---|
$ grep -E |
Vi slipper “escapea” tecken som []{} etc. Utan -E hade vi fått använda \[\]\{\} . |
$ grep -o |
Vi visar enbart matchningen och utelämnar resten av raden. |
$ grep -n |
Visar även vilken rad matchningen är på. |
$ grep -f <file1> <file2> |
I file1 kan vi ha ett uttryck per rad och använda det på textmassan i file2. Till exempel: $ grep -f a.txt b.txt kommer plocka radvis från a.txt och applicera det på b.txt. Mycket effektivt. |
$ grep <pattern> <file1> <file2> |
letar i båda filerna och matchar. |
Vi kan såklart kombinera options i våra kommandon, tex $ grep -Eo -f <file1> <file2> <file3>
.
GNU grep har ett par inbyggda “backslash expressions” som kan underlätta för oss. Framförallt är det \w
(matcha ord) och \s
(space) som fungerar.
Vi tar några exempel på hur det kan gå till. Det bästa är att själv sitta och testa de olika konstruktionerna tidigare i artikeln för att se vad som händer. Filen som används återfinns i exempelmappen. Den innehåller en massa amerikanska presidenter.
Matcha alla som har förnamnet “William”:
$ grep -E "William" presidents.txt
William Henry Harrison, 1841-1841
William McKinley, 1897-1901
William Howard Taft, 1909-1913
William Jefferson Clinton, 1993-2001
Om ens mönster innehåller mellanslag måste man omsluta mönstret med quotes:
$ grep -E "George Walker" presidents.txt
George Walker Bush, 2001-2009
Matcha alla vars första bokstav är “W” eller “A”:
$ grep -E "^[WA]" presidents.txt
Andrew Jackson, 1829-1837
William Henry Harrison, 1841-1841
Abraham Lincoln, 1861-1865
Andrew Johnson, 1865-1869
William McKinley, 1897-1901
William Howard Taft, 1909-1913
Woodrow Wilson, 1913-1921
Warren Gamaliel Harding, 1921-1923
William Jefferson Clinton, 1993-2001
Matcha alla vars första bokstav INTE är i spannet A-V:
$ grep -E "^[^A-V]" presidents.txt
William Henry Harrison, 1841-1841
Zachary Taylor, 1849-1850
William McKinley, 1897-1901
William Howard Taft, 1909-1913
Woodrow Wilson, 1913-1921
Warren Gamaliel Harding, 1921-1923
William Jefferson Clinton, 1993-2001
Matcha alla vars rad sllutar på 93:
$ grep -E "93$" presidents.txt
Benjamin Harrison, 1889-1893
George Herbert Walker Bush, 1989-1993
Matcha alla vars tillträdesår börjar på 1 och slutar på 3:
$ grep -E " 1..3" presidents.txt
# Alternativt
# grep -E "1[0-9]{2}3-" presidents.txt
Franklin Pierce, 1853-1857
Grover Cleveland, 1893-1897
Woodrow Wilson, 1913-1921
Calvin Coolidge, 1923-1929
Franklin Delano Roosevelt, 1933-1945
Dwight David Eisenhower, 1953-1961
Lyndon Baines Johnson, 1963-1969
William Jefferson Clinton, 1993-2001
Matcha alla “James” vars andra namn börjar på “B” eller “K”:
$ grep -E "James [BK]" presidents.txt
James Knox Polk, 1845-1849
James Buchanan, 1857-1861
Matcha alla där antingen “Obama” eller “Earl” finns med:
$ grep -E "Obama|Earl" presidents.txt
James Earl Carter Jr., 1977-1981
Barack Hussein Obama, 2009-2017
Matcha alla “John” och “Johnson”. Här ser vi även hur en grupp fungerar, ?
talar om att gruppen med “son” ska finnas 0 eller 1 gång.
$ grep -E "John(son)?" presidents.txt
John Adams, 1797-1801
John Quincy Adams, 1825-1829
John Tyler, 1841-1845
Andrew Johnson, 1865-1869
John Fitzgerald Kennedy, 1961-1963
Lyndon Baines Johnson, 1963-1969
Som vi sett kan vi använda “character classes” för att matcha spann av antingen bokstäver eller siffror. Grep har även stöd för några till som fungerar likadant men ser ut på ett annat sätt:
Quantifier | Character Classes |
---|---|
[:alnum:] | Alphanumeric characters. |
[:alpha:] | Alphabetic characters. |
[:blank:] | Space and tab. |
[:digit:] | Digits. |
[:lower:] | Lowercase letters. |
[:upper:] | Uppercase letters. |
Dessa behöver vi lägga i en character class då [
är en builtin i shellet ($ man [
).
$ grep "[[:digit:]]" <file>
Det här var lite om grunderna i regex med grep. Kör igång och testa på sidorna:
Använd sedan artikeln att luta dig mot i uppgifterna.