BuildStuff Konferanse 2023

Onsdag

Spearheading the future of Programming

Å lære språk er lett. Å lære paradigmer er vanskelig.
Ting skjer egentligt ikke så fort som det virker. Ting tar en genereasjon.

Ser fram til continuations.

Ser han bruker et verktøy for å kjøre programmet som er åpent i Vim, og vise output som en svart gjennomsiktig overlay. Kul teknikk for å vise live kode.

The Data Abstraction Talk

Published interface er ikke det samme som public interface. Published interface bør man være forsiktig med å endre. Dette er kode som andre utenfor ditt team bruker. Public interface er bare public innad i din egen kodebase. Ikke vær redd for å endre og refaktorere dette.

OCP (open close principle) er teit. Kode man ikke kan røre har et navn: legacy kode. OCP gjelder bare for publiserte interfaces. Ting som andre enn teamet bruker. Men innad i teamet er det mye bedre å kunne rive i ting og refaktorere as one sees fit.

Rock your code

List.Exist er mye raskere enn IEnumerable.Any
Source-generatorer i C# gjør alt raskere. Eksempler er Sytem.Text.Json pg ILogger interfacet. Da trenger de ikke å bruke reflection at runtime. De bare fikser det ved build time.

The Architecture That You've Never Head of: Software Product Lines

Hun som snakket var fra JetBrains. Snakket om Software Product Line som betyr gjenbruk i større skala enn man vanligvis er vant til med f.eks. webkomponenter eller programvare biblioteker. Man har en kjerne som er lik for alle produkter, som man deretter kan legge til plugins rundt.

Eksempelvis vil Rider, WebStorm og IntelliJ alle hooke inn på Generate Code som ligger i kjerne koden. Og kan tilby sine egne kode generatorer.

Ett produkt hos JetBrains er bare «forced set of plugins».

Er det bedre enn modellen VSCode kjører?

Intentional Code - Minimalism in a World of Dogmatic Design

Patterns = language of concepts

Donald Knuth sitt literal programming var et forsøk på å kombinere litteratur, dokumentasjon og kode.

Dagens kodespråk og verktøy har på et vis smeltet dette sammen. Foreach leses som språk. Vi har docs som kommentarer over koden.

Som i litteratur, skriv kode i paragrafer med kode som passer sammen i en paragraf. Det gjør det lettere å lese.

Han påstår at den beste koden er den han har sittet med på slutten av dagen, med en drink i hånda, og lest i ro og mak. Som en introvert code review.

Anbefalte bok som ble anbefalt av andre også: Your code is a crime scene.

Torsdag

Stay with C# or switch to F#? Let's fight! Let's vote!

Meh. Monader er kult fordi exceptions er et helt sjukt konsept. Hvilken som helst linje i koden din kan gå på en alternativ path.

Empowering Developers: OpenAI SDK and the Future of AI Applications

Ingenting interessant.

Architecture as Knowledge

Vi jobber alltid med incomplete knowledge.

Sitat fra hitchikers guide to the galaxy som kan beskrive hva kode ofte er:

Rigidly defined area of doubt and uncertainty

Patterns is a destillation of concepts.

ADR skal være korte og enkle og kjappe å lese, ikke mange sider lange dokumenter.

Event Sourcing for the Rest of Us

Alternativ til Electron, der det ikke blir shippet en hel Chrome installasjon med hver app: https://tauri.app/

EventSourcing gir deg Business intelligence for free.

Git er det mest kjente eventsourcede systemet. Et godt spørsmål å spørre seg selv om man er usikker på hvordan man skal løse noe er: "What would Git do".

Snapshot metodikker:

Kafka visualisering: https://softwaremill.com/kafka-visualisation/

Modular Monolith and the Prisoner of Microdisservices

Jargon-First architecture

Logical decomposition må gjøres uavhengig av hvilken arkitektur man velger, hvor man definerer hvilke moduler og ansvarsområder et system består av.
Deploy strategien bestemmer om det er microservices eller modulær monolitt.

Fredag

Understanding Probabilistic Data Structures with 112,092 UFO Sightings

Guy Royse, som jobber for Redis hadde talken. Relevant fordi strukturene han snakker om støttes av Redis.

Datastrukturer som kan gi svar som mest sannsynlig er rett, men ikke 100%.

Eksempelvis Bloom filter for medlemskap:
Er dette elementet en del av settet?
"Nei" er alltid 100% korrekt.
"Ja" er sannsynligvis rett.
Fordel: Mye raskere. O(1) lookup. Og mye mer plass besparende.

Kan brukes om man f.eks. har et enormt sett med brukernavn, og vil sjekke om brukernavnet er tatt. Får man nei, kan man lage den nye brukeren uten å sjekke hele listen. Får man ja må man ta en kikk i den ekte listen for å forsikre seg om at det faktisk ikke er tatt.

Top k
Estimering av K høyeste rangerte elementer. Kan typisk brukes til å detektere anomalier i nettverk og DDoS angrep ved å se om det er en plutselig økning i forespørsler til samme adresse eller fra samme IP

Total liste av de som støttes i Redis ligger her:
https://redis.io/docs/data-types/probabilistic/

Alle frontend rammeverk implementerer Signals for tiden. (Umiddelbart virker det som hovedforskjellen fra Observables konseptet i AngularJs er enklere syntax.)

Nevnte Keel som virker spennende. Minner meg om Darklang i forhold til rapid prototyping, men mer realistisk utført.

Kill All Mutants! (Intro to Mutation Testing)

Mutation testing er testverktøy som gjør koden din om til et AST, for deretter å endre små aspekter ved koden og verifisere at minst én unit test blir rød etter endringen.
Om ingen tester blir røde så kan det indikere at unit testene ikke er omfattende eller presise nok.

F.eks. har man en metode:

def add(a, b):
	return a+b

Og en test

def test():
	result = add(1,4)
	expect(result).to_be(5)

En mutasjon vil da være å erstatte + med -. Da feiler testen over, og vi har "drept" en mutant. Som er bra. Det betyr at testen vår er presis.

Tar lang tid å kjøre. Inntrykket mitt er at det allerede er problemer med å motivere utviklere til å i det hele tatt skrive unit tester for ny kode. Men kult konsept.

From Hot Metal to HTML: The Story of Type

Egentlig ikke så mye faglig relevant, men en god underholdene talk. Det mest interessante var Linotype Maskinen som var oppfunnet sent på 1800-tallet og ble brukt til å printe aviser. Animasjon av hvordan den funker