# Automatisering og CI/CD

> Utvalgt arbeid fra Engineer ApS som viser Automatisering og CI/CD — resultatene som beviser det.

- [Løste 1 000 problemer i geografiske data og tidsseriedata med GDAL, ArcGIS, PostGIS, Mapbox, QGIS, SQL (PL/pgSQL, Transact‑SQL) og Bash, og sikret behandling av stordata med høy kvalitet.](https://software.engineer.company/nb/portfolio/resolved-1-000-issues-in-geographical-data-and-7/)
- [Designet, implementerte og administrerte 6 ETL/ELT‑pipelines med Google BigQuery, MSSQL, PostgreSQL, Shell‑skripting, PL/pgSQL og Transact‑SQL, og integrerte data for effektiv behandling i et Python‑API.](https://software.engineer.company/nb/portfolio/designed-implemented-and-administered-6-etl-elt-pipelines-8/)
- [Automatiserte produksjonssettingen, databehandlingen og rapporteringssystemet for en GIS SaaS‑applikasjon med GitHub Actions CI/CD, Python, Bash og SQL.](https://software.engineer.company/nb/portfolio/automated-gis-saas-application-deployment-data-processing-and-16/)
- [Automatiserte leveransen av 20 GIS‑datapipelines og ETL‑prosesser for applikasjonsdata, og effektiviserte infrastrukturautomatisering og rapportering.](https://software.engineer.company/nb/portfolio/automated-delivery-of-20-gis-data-pipelines-and-17/)
- [Fornyet interne prosesser og sparte 8 000 timer ved å forbedre programvarearkitekturen, systemene og effektiviteten i planleggingen.](https://software.engineer.company/nb/portfolio/overhauled-internal-processes-saving-8-000-hours-by-38/)
- [Utviklet et rapporteringssystem for dataanalyse og økte kvartalsinntektene fra programvaren med 400 % gjennom Python‑baserte PDF‑rapporter.](https://software.engineer.company/nb/portfolio/developed-a-data-analytics-reporting-system-increasing-quarterly-44/)
- [Genererte API‑kontrakten fra databasen og utover — OpenAPI, en typet TypeScript‑klient på 44 076 linjer, 61 mock‑handlere og grensene brukergrensesnittet håndhever — med en kontroll i hvert ledd som feiler ved avvik.](https://software.engineer.company/nb/portfolio/built-a-request-schema-validation-contract-with-automated-61/)
- [Etablerte et engelsk/dansk internasjonaliseringssystem med 12 027 meldinger per språkversjon fordelt på 458 navneromsfiler, med vokabular håndhevet av linter og et budsjett på 400 linjer per fil.](https://software.engineer.company/nb/portfolio/established-an-english-danish-internationalization-system-with-linter-78/)
- [Bygde en lagdelt automatisert testsuite — 981 Go‑tester, 543 spesifikasjoner for frontend og nettleser, 494 atferdstester i SQL — med mutasjonstesting, egenskapsbaserte tester og en kvalitetsport for universell utforming.](https://software.engineer.company/nb/portfolio/built-a-layered-automated-test-suite-across-four-layers-94/)
- [Flyttet tregt arbeid ut av forespørselsbanen og over i en River‑jobbkø — 15 worker‑moduler, 8 planlagte oppgaver og 20 pg_cron‑jobber — slik at en forespørsel returnerer mens arbeidet bak den fortsetter.](https://software.engineer.company/nb/portfolio/moved-slow-work-onto-a-river-job-queue-97/)
- [Satte selskapets egen git‑forge på Soft Serve i produksjon, privat som standard, uten webpanel og med SSH‑porten bundet til loopback bak en hoppvert, og gjorde landingssiden foran den til en byggeartefakt fra hovednettstedet i stedet for en kopi som vedlikeholdes for hånd.](https://software.engineer.company/nb/portfolio/deployed-the-companys-own-git-forge-121/)
- [Kuttet nettstedets nettleserdrevne kvalitetsport fra 1 636 sekunder til 615 ved å kjøre kontrollene med de lengste først gjennom en worker‑pool begrenset til fire baner, etter å ha målt at alfabetisk rekkefølge kostet 320 sekunder mot 224.](https://software.engineer.company/nb/portfolio/cut-the-visual-quality-gate-to-ten-minutes-128/)
- [Erstattet 27 gjengitte skriftstørrelser, der de nærmeste naboene lå 0,6 % fra hverandre, med en Major Third‑skala i seks trinn, og skrev linteren som avviser den tjueåttende.](https://software.engineer.company/nb/portfolio/replaced-27-font-sizes-with-a-six-step-scale-129/)
- [Fant og rettet 11 feil i universell utforming som nettleseren meldte var i orden — åtte bunntekstlenker som fortsatt lå i tabulatorrekkefølgen bak pointer‑events, en scroll‑tidslinje som klippet kolofonen av tre sider, og en regelmotor som kjørte 70 av sine 105 regler.](https://software.engineer.company/nb/portfolio/fixed-11-accessibility-defects-the-browser-called-healthy-131/)
- [Lukket fargesystemet ved 28 dokumenterte farger med en linter som avviser en verdi som er malt, men udokumentert, dokumentert, men ikke malt, feilmålt, skrevet om som en literal, eller innenfor en perseptuell avstand på 0,02 fra en som allerede finnes.](https://software.engineer.company/nb/portfolio/closed-the-colour-system-at-28-colours-133/)
- [Fant ut at det lyse temaet hadde manglet et helsides overleggslag helt siden det ble skrevet, ved å kreve at begge temaene maler hver lagdelte flate med like mange lag.](https://software.engineer.company/nb/portfolio/found-the-light-theme-missing-an-overlay-layer-134/)
- [Speilet hele nettstedet som 777 Gemini‑dokumenter og 777 Gopher‑dokumenter fra det samme publiserte treet, med null byte endret i HTML‑en.](https://software.engineer.company/nb/portfolio/mirrored-the-site-to-gemini-and-gopher-137/)
- [Byttet ut 963 anonyme blokker med strukturerte data, som gjentok selskapet 1 671 ganger, mot én lenket graf av 16 typer utledet fra stabile opprinnelsesidentifikatorer.](https://software.engineer.company/nb/portfolio/replaced-963-structured-data-blocks-with-one-graph-138/)
- [Kuttet stilarkpakken fra 87 KB til 31 KB ved å ta ut en base64‑kodet skrift, og fjernet 756 KB fordelt på 22 filer som ble publisert ved hver produksjonssetting og som ingenting refererte til.](https://software.engineer.company/nb/portfolio/cut-the-stylesheet-bundle-from-87kb-to-31kb-139/)
- [Rettet et sitemap der 172 av 176 URL‑er delte ett endringstidspunkt, ved å hente datoen fra git‑historikken etter å ha slått fast at eksporten skriver om hver fil ved hver kjøring.](https://software.engineer.company/nb/portfolio/fixed-a-sitemap-with-one-shared-timestamp-140/)
- [Satte 10 242 linjer JavaScript i kvalitetsporten under en formaterer og en linter etter å ha slått fast at det var den største kodemengden i repoet og den eneste ingenting leste, og rettet 13 funn uten å undertrykke noen.](https://software.engineer.company/nb/portfolio/brought-the-quality-gate-code-under-a-linter-143/)
- [Bygde en databasedrevet generator for CV, referanser, portefølje og søknadsbrev i Python — 41 moduler, 10 580 linjer — som gjengir seks utdataformater fra én SQLite‑kilde med 23 tabeller, satt sammen av en idempotent pipeline i 19 trinn.](https://software.engineer.company/nb/portfolio/built-a-database-driven-cv-and-portfolio-generator-144/)
- [Holdt generatoren til 981 testtilfeller med et minstekrav på 92 % grendekning og advarsler behandlet som feil, og verifiserte idempotens ved å kjøre hele byggepipelinen to ganger fra en tom fil og kreve at den andre kjøringen ikke endret noe.](https://software.engineer.company/nb/portfolio/held-the-generator-to-964-tests-and-a-coverage-floor-145/)
- [Etablerte PDF/UA‑1‑samsvar for ni dokumenter med 106 av 106 regler, og fant at arkivvarianten feilet på én regel av 146 — et nesten‑treff som ser ut som bestått for alle som ikke kjører validatoren.](https://software.engineer.company/nb/portfolio/established-pdf-ua-1-conformance-across-nine-documents-146/)
- [Slo på alle reglene i Python‑linteren på feilnivå og arbeidet seg gjennom 1 815 funn ned til null, med en skriftlig begrunnelse for hvert av de få unntakene og to av dem sikret av en kontroll i stedet for en kommentar.](https://software.engineer.company/nb/portfolio/enabled-every-python-linter-rule-as-an-error-147/)
- [Bygde en innholdskontroll på tvers av språk som feiler når en oversettelse mister et tall den engelske teksten oppgir, og når et språk bruker en notasjon som ikke hører hjemme i det — og fant to danske beskrivelser som manglet en måleverdi, og seksten ukrainske tekstbiter med engelske anførselstegn.](https://software.engineer.company/nb/portfolio/built-a-cross-language-figure-and-notation-check-153/)
- [Skrev en parser som leser den faktiske C‑headeren på 7 308 linjer og verifiserer hvert kallsted, hver enum‑konstant og at hver klasse som eier en peker, er final, etter at en håndskrevet plassholder‑header lot kall til tre fjernede funksjoner kompilere, lenke og krasje.](https://software.engineer.company/nb/portfolio/wrote-a-parser-that-verifies-every-ffi-call-site-157/)
- [Ga hver kontroll med bare ikon i grensesnittet et navn for skjermlesere etter å ha funnet at send‑knappen ble lest opp som «arrow up circle, button», og skrev linteren som krever etiketten innen åtte linjer fra ikonet.](https://software.engineer.company/nb/portfolio/named-all-seventeen-interface-icons-for-screen-readers-159/)
- [Bygde et designsystem med 48 tokens på plattformens eget glassmateriale og skrev linteren som avviser et magisk tall, en hardkodet skriftstørrelse eller en animasjon som ignorerer innstillingen for redusert bevegelse.](https://software.engineer.company/nb/portfolio/built-a-48-token-design-system-160/)
- [Tok i bruk den halvdelen av meldingskjernen applikasjonen aldri hadde brukt — overføring av sikkerhetskopier, forsvinnende meldinger, redigering og ny sending av meldinger, verifiserte invitasjoner, proxyer og krypteringspolicy — og kjørte hver test mot det ekte biblioteket uten mocks.](https://software.engineer.company/nb/portfolio/reached-the-unused-half-of-the-messaging-core-161/)
- [Bygde selskapets ikon- og favicon‑sett fra to håndlagde tegninger, med alle avledede filer regenerert av skript og en kontroll som feiler når en avledet fil ble committet før kilden.](https://software.engineer.company/nb/portfolio/built-the-visual-identity-from-two-drawings-164/)

<https://software.engineer.company/nb/categories/automation/>
