Azure Functions gir en kraftig plattform for å bygge serverløse applikasjoner som reagerer på ulike hendelser. Ved å bruke triggere og bindings kan utviklere effektivt lage applikasjoner som reagerer på meldinger, databaser eller HTTP-forespørsler uten å måtte skrive mye repetitiv kode. I denne delen ser vi på hvordan man kan bruke disse mekanismene i Azure Functions for å bygge effektive og skalerbare løsninger.
En vanlig måte å starte på er ved å bruke en Service Bus-trigger, som aktiveres hver gang en ny melding legges til i en kø. Når meldingen er mottatt, kan funksjonen logge innholdet av meldingen for videre behandling. Dette kan gjøres som følger:
I eksemplet over blir funksjonen utløst når en melding blir lagt til i myqueue på Azure Service Bus. Dette gir et godt grunnlag for å bygge løsninger hvor systemkomponenter kommuniserer med hverandre gjennom meldinger, noe som gjør applikasjonen mer fleksibel og desentralisert.
En annen viktig trigger er Cosmos DB-triggeren, som gjør det mulig å utføre handlinger når data endres i en Cosmos DB-samling. Dette er svært nyttig for sanntidsbehandling av data, som for eksempel oppdatering av materialiserte visninger eller triggere for arbeidsflyter.
Når funksjonen trigges av endringer i Items-samlingen i Cosmos DB, logger den antallet modifiserte dokumenter og ID-en til det første dokumentet som er endret. Dette gjør det mulig å reagere på endringer i databasen umiddelbart, noe som er essensielt for applikasjoner som krever sanntidsbehandling.
Bindings i Azure Functions forenkler arbeidet med eksterne tjenester. De kan brukes til både inngående og utgående dataoperasjoner. For eksempel kan du bruke en output-binding for å skrive data til en blob-lagring direkte fra funksjonen. Dette kan se slik ut:
Her leser funksjonen innholdet av en HTTP-forespørsel og skriver det til en blob med et tilfeldig GUID-navn for å sikre at navnet er unikt. Denne tilnærmingen forenkler håndtering av data som skal lagres i eksterne systemer som blob-lagring.
Videre kan en input-binding fra Cosmos DB gjøre det mulig å hente data direkte fra en Cosmos DB-samling basert på et spesifikt ID-nummer i en forespørsel. Dette eksemplet viser hvordan du kan hente et element fra en ToDo-liste:
Denne funksjonen henter et spesifikt ToDoItem basert på ID og partisjonsnøkkel som angis i spørringen. Hvis elementet finnes, returneres det; ellers returneres en NotFound-respons. Denne typen bindinger gjør det enkelt å hente og manipulere data direkte fra databaser uten å måtte skrive omfattende kode for tilkobling og spørringer.
Azure Functions tilbyr et bredt spekter av triggere og bindings for ulike tjenester, som Event Hubs, IoT Hub, SignalR, Table Storage, SendGrid, RabbitMQ, og Twilio. Dette gjør det mulig å bygge komplekse applikasjoner som reagerer på forskjellige hendelser og tjenester uten å måtte håndtere alt manuelt.
Når det gjelder deployering av Azure Function Apps, kan man bruke blue-green-deployments med slots. En deployment slot lar deg teste ny funksjonalitet på en staging-miljø før du bytter til produksjon. Dette gir muligheten til å validere applikasjonens funksjonalitet før den rulles ut til sluttbrukerne. For å opprette en ny staging-slot og deployere til den, kan du bruke Azure CLI eller PowerShell:
Etter deployeringen kan du teste applikasjonen i staging, og når alt fungerer som forventet, kan du bytte slottene for å rulle ut endringene til produksjon:
Blue-green-deployment gir deg raskere tilbakemelding på eventuelle problemer etter utrulling, og gjør det lettere å rulle tilbake til en stabil versjon hvis noe går galt.
Automatisering av Azure Function-deployeringer kan gjøres ved hjelp av CI/CD-pipelines, som i Azure DevOps eller GitHub Actions. I Azure DevOps kan du bruke en spesifikk oppgave for å deployere til Azure Functions:
Tilsvarende, i GitHub Actions kan deployeringen gjøres ved hjelp av azure/functions-action:
Når du automatiserer deployeringen, kan du oppnå kontinuerlig levering, slik at du raskt kan rulle ut oppdateringer og fikse problemer i applikasjonen din.
For å få mest mulig ut av Azure Functions, er det også viktig å forstå logging. Azure Functions genererer logger som gir innsikt i applikasjonens oppførsel, men for å gjøre disse loggene tilgjengelige i overvåkingsverktøyene må du eksplisitt logge relevante informasjoner. Dette kan gjøres på forskjellige nivåer, som Information og Error, for å gjøre feilsøking og overvåking mer effektivt.
Hvordan designe hendelsesdrevne løsninger på Azure
Når man utvikler hendelsesdrevne applikasjoner på Azure, er det avgjørende å velge riktig tjeneste for den aktuelle bruken og hvordan denne tjenesten integreres med applikasjonen. Dette innebærer forståelse for hvordan den valgte tjenesten interagerer med andre Azure-komponenter og applikasjonens arkitektur.
Den første beslutningen man står overfor når man designer et hendelsesdrevet system på Azure, er valget av tjeneste basert på de spesifikke behovene til løsningen. Azure tilbyr flere tjenester som støtter hendelsesdrevne arkitekturer, inkludert Azure Event Grid, Azure Event Hubs og Azure Service Bus. Hver av disse har sine styrker og er egnet for forskjellige typer håndtering av hendelser.
Azure Event Grid er ideell for å rute hendelser fra ulike kilder til flere destinasjoner. Den egner seg godt for scenarier hvor det er behov for å reagere på endringer, som filopplastinger, databasenheter eller ressursmodifikasjoner i Azure. Event Grid er utformet for scenarier der hendelsene kan genereres hyppig og der hver hendelse raskt må ledes videre til de riktige destinasjonene.
Azure Event Hubs, derimot, er spesialdesignet for høyytelses datastreaming. Denne tjenesten er best egnet for scenarier hvor man må håndtere store datamengder, for eksempel telemetri fra IoT-enheter, logger fra applikasjoner eller sanntidsanalyse. Event Hubs støtter partisjonering, som gjør det mulig å prosessere data parallelt, noe som gir høy skalerbarhet for sanntids databehandling. Dette gjør Event Hubs til et ideelt valg for scenarioer med stor datatrafikk.
Azure Service Bus er spesielt nyttig i situasjoner hvor man trenger garantert meldingsoverføring, som i systemer for ordrebehandling, bestillingssystemer eller finansielle transaksjoner. Service Bus støtter både køer for punkt-til-punkt-meldinger og emner for publiser-/abonner-scenarier, og gir dermed fleksibilitet for forskjellige kommunikasjonsbehov. I systemer som krever pålitelig levering av meldinger, kan Service Bus være det beste alternativet, ettersom det tilbyr mekanismer for å sikre at meldinger ikke går tapt, og at de prosesseres på riktig tidspunkt.
Valget av riktig tjeneste er ikke bare avhengig av eventvolumet, men også av behovet for sanntidsbehandling og viktigheten av meldingslevering. For eksempel, hvis man utvikler en løsning som skal prosessere sanntidsdata fra tusenvis av enheter, vil Event Hubs være det beste valget. Hvis løsningen derimot krever at arbeidsflyter trigges basert på spesifikke hendelser, vil Event Grid være mer passende. Service Bus er ideell når det er kritisk at meldinger leveres til de rette mottakerne på riktig tidspunkt, for eksempel i finansiell transaksjonsbehandling.
Priser er et annet viktig aspekt å vurdere. Hver tjeneste har ulike prismodeller som tar hensyn til faktorer som antall behandlet hendelser, datalagring og gjennomstrømning. Å analysere eventvolum og behandlingsbehov kan hjelpe med å estimere kostnadene og finne den mest kostnadseffektive løsningen for den spesifikke bruken.
En annen viktig vurdering er hvordan tjenesten integreres med andre Azure-tjenester. Hvis løsningen din er sterkt avhengig av serverløse funksjoner, vil Event Grid integreres sømløst med Azure Functions. For avansert analyse er Event Hubs godt egnet sammen med Azure Stream Analytics eller Azure Data Explorer.
Når man designer en hendelsesdrevet løsning, er det viktig å forstå hvordan forskjellige eventproducere og -konsumenter fungerer i systemet. Eventproducere er komponentene som genererer hendelser, mens eventkonsumenter er komponentene som lytter etter og responderer på hendelsene. For at systemet skal være både responsivt og skalerbart, må disse komponentene være nøye utformet.
Eventproducenter kan være ulike systemer som genererer hendelser, som applikasjoner som genererer logger, sensorer som måler miljødata eller tjenester som utfører spesifikke operasjoner som må videreformidles. På den andre siden er eventkonsumentene systemene eller tjenestene som er ansvarlige for å motta og reagere på disse hendelsene, enten ved å prosessere informasjonen, sende varsler, eller utføre operasjoner basert på eventene som blir sendt.
Når du designer systemet, må du også vurdere hvordan eventene skal håndteres og distribueres. Hvis et system håndterer mange hendelser samtidig, kan det være nødvendig med partisjonering for å fordele belastningen på flere prosesser, slik at hver konsument kan bearbeide en delmengde av eventene parallelt. Dette kan forbedre ytelsen og hjelpe systemet med å skalere etter behov.
Ved valg og implementering av eventdrivende løsninger er det også viktig å tenke på feilhåndtering og robusthet. Hvordan skal systemet reagere hvis en eventkonsument ikke er tilgjengelig, eller hvis det oppstår feil i behandlingen av hendelser? Å bygge inn mekanismer for feilsikkerhet og gjenoppretting kan være avgjørende for å sikre at løsningen forblir pålitelig over tid.
I tillegg til å velge riktig tjeneste og designe eventprodusenter og -konsumenter, må du også ta hensyn til sikkerheten ved håndtering av hendelser. Hvordan kan du sikre at bare autoriserte systemer kan generere og motta hendelser? Hvordan kan du sikre at eventene ikke kan manipuleres under overføring? Sikkerhet er en kritisk faktor som må vurderes på tvers av alle nivåene i systemdesignet.
Endtext
Hvordan opprette og administrere ressurser i Azure: En guide til Ressursgrupper og App Service Planer
I Azure er ressurser organisert i forskjellige omfang som gjør det lettere å administrere og kontrollere dem. Ressursgrupper spiller en sentral rolle i dette, da de fungerer som beholdere for ressurser som deler samme livssyklus. Dette gjør at du kan distribuere, oppdatere og slette ressurser sammen som en enhet. Ved å bruke ressursgrupper kan du også bruke policyer, tillatelser og overvåking på et høyere nivå, som kan forenkle administrasjonen og sikkerheten av infrastrukturen.
En ressurs i Azure er det minste omfanget og kan være hva som helst fra en virtuell maskin til en lagringskonto eller en webapp. Ressurser arver tillatelser og policyer fra sine overordnede enheter, som ressursgruppen, abonnementet og administrasjonsgruppene. Dette betyr at kontrollen og administrasjonen av ressursene kan standardiseres og forenkles gjennom overordnede enheter.
Et praktisk eksempel på å jobbe med Azure-resurser er å opprette en ressursgruppe for en webapplikasjon. For å gjøre dette kan du bruke kommandoen:
Denne kommandoen oppretter en ressursgruppe med navnet "SampleRg" i regionen "eastus". Valget av region er viktig fordi det bestemmer hvor de fysiske datacentrene er lokalisert, noe som kan ha innvirkning på både ytelse og samsvar med lokale forskrifter. For eksempel kan du velge en region som er nærmere brukerne dine for å få raskere tilgang, eller velge en region som oppfyller spesifikke regulatoriske krav.
Når du har opprettet ressursgruppen, kan du gå videre til å opprette en App Service Plan, som er en sentral komponent for webapplikasjoner i Azure. En App Service Plan gir nødvendige ressurser til å kjøre webapplikasjoner og gir deg muligheten til å velge region, prisnivå og instansstørrelser som bestemmer de tilgjengelige beregningsressursene.
App Service Planer støtter forskjellige prisnivåer, som inkluderer "Free", "Basic", "Standard", "Premium" og "Isolated". Hvert nivå tilbyr forskjellige nivåer av ytelse, skalerbarhet og funksjoner, slik at du kan tilpasse planen etter behovene til applikasjonen din. For å opprette en App Service Plan, kan du bruke kommandoen:
I dette eksemplet opprettes en App Service Plan med navnet "SamplePlan" i ressursgruppen "SampleRg" og med SKU-en P1V2, som er en av de mer avanserte prisnivåene.
En viktig del av arbeidet med Azure er å forstå og bruke riktige SKU-er (Stock-Keeping Units), som representerer forskjellige ressursnivåer og prisklasser. For å få en full oversikt over de tilgjengelige SKU-ene og deres egenskaper, kan du se på prisdetaljene i Azure.
Når App Service Planen er opprettet, kan du gå videre til å opprette den faktiske webapplikasjonen ved å bruke følgende kommando:
Det er viktig å merke seg at dette og andre kommandoer kan føre til at Azure-kreditter brukes eller at kostnader påløper. Det er derfor essensielt å overvåke bruken din og forstå prisstrukturen før du distribuerer ressurser.
Azure tilbyr flere distribusjonsmetoder, og en av de mest brukte er ZIP-distribusjon, hvor du pakker bygde artefakter i en ZIP-fil og distribuerer dem til Azure. For å utføre dette kan du bruke kommandoen:
Her refererer ./path/to/file.zip til stien til ZIP-filen på din lokale maskin. Sørg for at ZIP-filen inneholder alle nødvendige komponenter for applikasjonen.
Selv om kommandolinjegrensesnittet er et kraftig verktøy for automatisering, kan du også utføre de samme trinnene gjennom Azure-portalen. Når du er logget inn, kan du søke etter "Resource groups" for å opprette en ny ressursgruppe. Når du har opprettet ressursgruppen, kan du gjøre det samme for App Service Planen. Dette gjøres gjennom et enkelt trinn-for-trinn-oppsett i portalen, hvor du spesifiserer nødvendig informasjon for å opprette begge komponentene.
For å oppsummere, er det viktig å merke seg at opprettelsen og administrasjonen av ressurser i Azure krever en god forståelse av hvordan ressursgrupper, App Service Planer og distribusjon fungerer sammen. Ved å velge riktig region, prisnivå og plan, kan du optimere applikasjonens ytelse, skalerbarhet og kostnader. Husk også at hver distribusjon kan føre til kostnader, så det er viktig å være oppmerksom på bruken av ressurser og hvordan du administrerer disse ressursene effektivt.
Hvordan Azure Nettverksinfrastruktur Optimaliserer Sikkerhet og Ressursforvaltning
I Azure kan nettverkskommunikasjon oppnås ved å isolere trafikk internt ved hjelp av private IP-adresser. Dette gjør at data forblir innenfor Azure sin bakbenninfrastruktur, og eliminerer dermed potensialet for eksponering på offentlig internett. En betydelig fordel ved å bruke private IP-er er også redusert kostnad ved dataoverføring, ettersom trafikken ikke trenger å passere over eksterne nettverk. Når man jobber med Azure, er det viktig å forstå hvordan nettverkssegmentering og IP-adressering fungerer, for å maksimere sikkerheten og skalerbarheten i infrastrukturen.
Azure benytter Virtual Networks (VNet) som en måte å organisere og segmentere nettverksressurser. Dette gir en strukturert måte å plassere ressurser på, som gir mulighet for sikkerhetspolicyer og enklere administrasjon. En VNet kan deles opp i flere subnets, som kan tildeles spesifikke arbeidsbelastninger eller applikasjoner. For eksempel kan en frontend-subnet benyttes for web-applikasjoner som er tilgjengelige for eksterne brukere, mens en backend-subnet kan være dedikert til intern databehandling og databaser.
En vanlig praksis er å bruke Azure CLI eller Infrastructure as Code (IaC) verktøy som Bicep for å definere og opprette denne nettverksstrukturen. Ved å bruke kommandoer som az network vnet create, kan man enkelt opprette en VNet med spesifikke adresseområder, og deretter skape subnets for ulike formål. Dette gjør det mulig å dele opp nettverket på en måte som er logisk og lett administrerbar.
Når man oppretter et VNet, kan man spesifisere et adresseområde som eksempelvis 172.16.0.0/16. Dette betyr at det første 16-biters segmentet av adressen er dedikert til nettverksdelen, mens de resterende bitene brukes til å identifisere individuelle IP-adresser for ressurser i nettverket. Med en /16 adresse, kan man potensielt ha 65 536 IP-adresser innenfor nettverket, som gir mer enn tilstrekkelig plass for de fleste bedriftsløsninger.
For å effektivt håndtere adresseområder, er det viktig å bruke Azure CLI for å overvåke og administrere IP-bruken i VNet. Med kommandoene az network vnet show og az network vnet subnet list kan man få innsikt i hvilke adresseområder som er tildelt til ulike subnets, samt hvilken IP-bruk som er tilgjengelig for nye ressurser. Dette gjør det enklere å utvide nettverket etter behov og identifisere ledige områder for videre vekst.
I tillegg til private IP-adresser, er det også nødvendig å forstå hvordan offentlige IP-adresser fungerer i Azure. Offentlige IP-er tillater at ressurser kan kommunisere med internett, noe som er avgjørende for applikasjoner som webservere eller tjenester som må være tilgjengelige fra eksterne brukere. Man kan opprette en offentlig IP med kommandoen az network public-ip create, og deretter knytte den til et nettverksgrensesnitt, som kan ha både en offentlig og privat IP-adresse samtidig. Dette gjør at ressurser kan være tilgjengelige på internett, men samtidig isolert innenfor et privat nettverk for sikker kommunikasjon med andre interne systemer.
Når det gjelder det praktiske arbeidet med å administrere IP-adresser i Azure, er det viktig å være klar over de spesifikke IP-adresseområdene som Azure benytter for private nettverk. I henhold til RFC 1918 benyttes adresseområdene 10.0.0.0/8, 172.16.0.0/12 og 192.168.0.0/16 for private IP-er, som gir god fleksibilitet i tildeling av interne adresser.
En annen nøkkelfunksjon i Azure-nettverk er muligheten til å koble sammen forskjellige virtuelle nettverk (VNets) ved hjelp av VNet Peering. Dette er en Azure-løsning som gjør det mulig for ressurser i forskjellige VNets å kommunisere med hverandre som om de var på samme nettverk. Denne teknologien er essensiell for å bygge større, distribuert infrastruktur i Azure, hvor forskjellige deler av applikasjonen kan kjøre i separate nettverk, men fortsatt være i stand til å kommunisere sikkert og effektivt.
Det er også viktig å forstå hvordan nettverkssikkerhetsgrupper (NSG) fungerer i Azure. Disse gruppene gjør det mulig å kontrollere innkommende og utgående trafikk på subnettnivå, og gir ekstra beskyttelse mot uønsket tilgang. Ved å bruke NSG kan man spesifisere hvilke IP-adresser, porter og protokoller som skal tillates eller blokkeres, og dermed sørge for at applikasjoner og tjenester kun er tilgjengelige for autoriserte enheter.
Til slutt er det viktig å merke seg at god nettverksstruktur i Azure ikke bare handler om å skape de riktige adresseområdene og segmentene, men også om å planlegge for skalerbarhet og sikkerhet på lang sikt. Dette innebærer at man ikke bare må ta hensyn til dagens behov, men også fremtidige krav og potensielle vekstpunkter. Det er avgjørende å bruke riktig verktøy og metodikk for å administrere og utvide nettverket etter hvert som nye tjenester og applikasjoner introduseres.
Hvordan Azure Front Door og Traffic Manager forbedrer global trafikkdistribusjon og ytelse
Azure Front Door og Azure Traffic Manager er to viktige verktøy i Azure-plattformen som gjør det mulig å håndtere global trafikkdistribusjon effektivt. Begge løsningene er utformet for å sikre at applikasjoner og nettsteder gir optimal ytelse og tilgjengelighet for brukere over hele verden. Selv om de begge tjener et lignende formål, er det viktige forskjeller i hvordan de fungerer og hva de kan tilby.
Azure Front Door er en applikasjonens lastbalanserer som opererer på applikasjonslaget (Layer 7), og det er utmerket for web-applikasjoner som bruker HTTP eller HTTPS. Front Door har et kraftig innebygd system for trafikkfordeling, som tilpasser seg raskt endringer i applikasjonens helse. Når både opprinnelsesressursene er sunne, vil Front Door fordele trafikken jevnt mellom dem. Ved å bruke en helseprobe som sjekker /health-endepunktet hvert 120. sekund via HTTP GET-forespørsler, kan Front Door raskt oppdage om en opprinnelse er treg eller utilgjengelig. Når dette skjer, dirigeres trafikken automatisk mot en sunnere opprinnelse, noe som sikrer at brukeropplevelsen forblir optimal.
Det som skiller Front Door fra andre løsninger, er dens integrasjon med Microsofts globale nettverk. Denne tilkoblingen gir en ekstra dimensjon av pålitelighet, ettersom trafikken kan rutes gjennom Microsofts private backbone-nettverk. Dette gir bedre pålitelighet og reduserer avhengigheten av det offentlige internett, som ofte kan være utsatt for problemer som nettverksflaskehalser eller høye ventetider.
På den andre siden har Azure Traffic Manager en litt annen tilnærming. Denne tjenesten opererer på DNS-nivå (Domain Name System) og er derfor mer fleksibel når det gjelder å håndtere ikke-HTTP/S-protokoller eller trafikkomdirigering mot lokale ressurser. Traffic Manager er en DNS-basert lastbalanserer som fordeler trafikken til forskjellige Azure-regioner avhengig av konfigurerte regler, som for eksempel ytelse, geografisk nærhet, eller lastbalansering basert på en prioritert modell. Trafikken rutes basert på latensmålinger, hvor Traffic Manager automatisk velger det endpointet som gir den laveste ventetiden til brukeren.
Når du bruker Traffic Manager med metoden for ytelsesbasert lastbalansering, vil DNS-tjenesten returnere IP-adressen til det endpointet som har lavest responstid. Dette betyr at brukere alltid blir dirigert til den raskeste tilgjengelige ressursen, noe som forbedrer applikasjonens responstid og reduserer forsinkelser for brukeren. Selv om Traffic Manager ikke kan håndtere SSL/TLS-terminering eller tilbyr beskyttelse gjennom WAF (Web Application Firewall) som Front Door, gir den stor fleksibilitet, spesielt når det gjelder ikke-HTTP/S-trafikk og når du trenger å distribuere trafikk til fysiske servere på stedet.
I tillegg til denne dynamiske trafikkstyringen kan Azure Traffic Manager konfigureres for grundig overvåking og diagnostikk. Ved hjelp av Azure Monitor kan du få innsikt i helsen til endepunktene og ytelsen til DNS-forespørslene. Dette kan omfatte informasjon om hvor raskt forespørsler håndteres, hvilke endepunkter som har feilet helsesjekker, og eventuelle avvik i tjenestens ytelse. Med riktig oppsett av varsler, kan Traffic Manager varsle systemadministratorer når et endepunkt blir utilgjengelig eller når ytelsen faller under et visst nivå.
For å legge til en ekstra lag med pålitelighet, kan både Front Door og Traffic Manager benytte seg av Azure DNS, som er den skybaserte DNS-tjenesten til Azure. Azure DNS sørger for at trafikken som rutes til webapplikasjoner og tjenester går raskt og pålitelig, uavhengig av hvor brukeren befinner seg. Dette skjer takket være Azure DNS sine globale navnetjenere som er optimalisert for raske svar. For eksempel kan man opprette en offentlig DNS-sone for et domene som administreres i Azure, og knytte det til ressurser som en webapp, noe som forbedrer tilgjengeligheten og hastigheten på trafikken.
Det er også viktig å forstå at Azure Traffic Manager ikke bare er for applikasjoner som bruker HTTP/S. Den gir støtte for alle typer trafikk, og den er ideell i situasjoner der du ønsker å balansere trafikk på tvers av flere datalagringspunkter, for eksempel når man har lokale databehandlingsressurser eller ikke-HTTP/S-basert trafikk. Ved å bruke Traffic Manager på denne måten, kan man effektivt distribuere trafikken uten å være avhengig av spesifikke applikasjonslag.
Trafikkstyring på globalt nivå er kompleks og krever kontinuerlig overvåking og administrasjon. Med løsninger som Azure Front Door og Traffic Manager er det imidlertid mulig å sikre høy tilgjengelighet og optimal ytelse for applikasjoner som er avhengige av global distribusjon. For alle som driver tjenester på internett, er det viktig å forstå både de tekniske aspektene og forretningskravene som bestemmer hvordan trafikk skal håndteres. Optimale ytelsesmetoder og riktig konfigurasjon av belastningsbalansering kan bety forskjellen på en smidig brukeropplevelse eller en tjeneste som sliter med forsinkelser og tilgjengelighetsproblemer.
Hvordan fungerer logging, moduler og testing i Python for effektiv koding?
Hvordan dyplæring kan forbedre nøyaktigheten ved diagnostisering av bryst røntgenbilder
Hvordan løse potensialet i et lukket, uendelig langt sylindrisk område ved hjelp av spesialfunksjoner
Hvordan inspirerer plantenes bevegelsesmekanismer utviklingen av myke roboter?

Deutsch
Francais
Nederlands
Svenska
Norsk
Dansk
Suomi
Espanol
Italiano
Portugues
Magyar
Polski
Cestina
Русский