Vad händer när en visionär och en kodare får en idé och lite utrymme mellan varven?
Resultatet blev SweClockers Jobb, en ny betatjänst där teknikintresserade kan hitta relevanta jobb inom IT och utveckling.

Under året har vi också testat samarbeten med företag som söker IT-kompetens. Med Smartoptics satte vi communityts fiberkunskaper på prov, med Metrea testade vi flygsimulatorer och IT-Total väckte nätverksteknikernerven. Vi hann även med en mingelkväll i Stockholm.

...göra verklig nytta för egenlärda personer som bygger sin kunskap via SweClockers forum

För mig, @Edin, handlar SweClockers Jobb om något större. Jag har jobbat på SweClockers i över 25 år, är självlärd och har sett hur många medlemmar här gjort liknande resor. Vår vision är att skapa en plats där kunskap och passion väger tyngre än formella meriter, där företag ser personen bakom titeln.

Visionen bakom

Det pratas ofta om kompetensbrist i branschen samtidigt som många bolag söker kandidater med perfekta CV:n. Vi vill hitta företagen som ser potential, driv och nyfikenhet, inte bara titlar och erfarenhet.

SweClockers Jobb ska bli en plats där människor och företag med samma passion hittar varandra. Vi har små resurser men ett stort community. Därför testar vi en enkel metod: att bara komma igång och bygga vidare tillsammans.

Från idé till skiss

Som så ofta börjar det med anteckningar i mobilen, sena kvällar och ett dokument som växer till något större. Efter några dagar fanns en plan och tack vare @jreklund hittade vi en startlinje som gick att genomföra med de resurser vi har.

Tekniken bakom SweClockers Jobb

Har du fått nog av ovan flum? Låt oss hoppa vidare till Johan som går in på de tekniska detaljerna bakom SweClockers Jobb istället!

johan_kodar_swecjobb.jpg

Johan kodar jobb (...hunden Zingo gör konstig min i bg)

Edin: Vad var det första du gjorde när idén om SweClockers Jobb dök upp?
Johan: Först behövde jag identifiera vilka datamängder som fanns i Platsbanken hos Arbetsförmedlingen, vad de innehöll och hur relationerna såg ut mellan dem. Det finns ingen tydlig dokumentation kring datatyper, obligatoriska fält eller relationer, och ibland saknas kopplingar trots unika ID:n. Vissa värden skiljer sig dessutom från vad deras publika gränssnitt visar.

Tyvärr fick vi inte åtkomst till en av de viktigaste datapunkterna: möjligheten till distansarbete.

Efter kartläggningen var det äntligen dags att bygga den första databasstrukturen och resten är historia.

Edin: Vilka tekniker och ramverk har du använt under huven?
Johan: Efter att ha analyserat datamängderna så visade sig html-koden vara väldigt smutsig. Du får allt från bilder, JavaScript och inbäddade videoklipp till klassiska punktlistor. Att sanera information innan den visas för besökarna blev ett krav. För mig som är PHP-utvecklare föll blicken mot Symfony och deras HTML Sanitizer, de är gamla rävar i branchen och deras bibliotek används i flera populära CMS (Content Management System), e-handel mjukvaror och ramverk.

Då vi även skulle bygga en fullfjädrad hemsida utan några beroende av befintlig kodbas behövdes även ett ramverk. Det är här jag går mot strömmen och inte väljer Laravel's ramverk, om antalet Github stjärnor är sanningen. Valet föll på Symfony, inte bara för vad vi har behov av idag, utan även i framtiden. Personligen föredrar jag egentligen micro ramverk, där less is more och med så få beroenden som möjligt.

Ett fullfjädrat ramverk kommer med cykel på köpet och ett par val görs automatiskt baserat på hur tätt kopplade de redan är. Backend består av Symfony-utvecklade paket och Doctrine för databas hantering, om man ignorerar paketens egna beroenden. Det är lättare att vara mer flexibel på frontend sidan men för enkelhetens skull väljer jag deras rekommendationer; Symfony UX, Stimulus, Turbo och Tailwind CSS. För att rendera responsiva e-postmeddelandes väljs Maizzle och inte Inky, som Symfony själva rekommenderade. Inky har inte uppdaterats på flera år, genererade bloatad HTML-kod och kändes gammal och dassig.

När vi nu har stommen på plats fattas det viktigaste av allt; en bra sökmotor. Valet föll på Typesense för dess snabbhet, licensvillkor, funktioner och konfigurations möjligheter. Du får ju självklart även bra relevanta matchningar.

Edin: Vad har varit den största tekniska utmaningen hittills?
Johan: Den mest krävande insatsen var att analysera och strukturera Arbetsförmedlingens API:er samt att skriva den JavaScript som kommunicerar med sökmotorn.

Det här projektet innehåller många nya teknisk beroenden som jag inte använt tidigare. Mycket av min tid har lags på att läsa dokumentation samt testa, testa och testa. Inte bara för att det är kul med nyheter - utan för att hitta nya bättre sätt att utveckla våra befintliga sajter.

Edin: Vad blev du mest nöjd med?
Johan: Hur enkelt det faktiskt var att sätta upp en riktigt bra sökmotor! Bortsett från all JavaScript som behövde utvecklas.

Edin: Hur har du tänkt kring prestanda, sökning och filtrering?
Johan: Faktiskt ganska lite, vi använder varken cache-proxy eller Symfony:s inbyggda cache-motor. Trafiken på de unika sidorna (annonserna) är för låg för att det ska löna sig.

Sökmotorn lagrar allt i RAM-minnet och hanterar filtrering och sortering på egen hand. Symfony behöver aldrig behandla sökfrågorna, de går bara via en reverse proxy för TLS-terminering och för att dölja API-nycklar.

Edin: Vad var roligast att bygga?
Johan: Att använda Stimulus för att väcka liv i HTML-element via JavaScript. Det är fascinerande hur man med små medel kan lyssna på knapptryck och uppdatera innehåll dynamiskt.

Edin: Om du fick fria händer framåt, vad skulle du göra?
Johan: Jag skulle nog ta bort all källkod och börja om från början. Vissa lösningar fungerar, men är mer snabba fixar än permanenta lösningar.

Edin: Vad har du lärt dig på vägen?
Johan: Att det kanske är dags att byta ut vår egenutvecklade sökmotor till Typesense, för mer träffsäkra matchningar. Den mängd RAM-minne vi kommer behöva ger mig redan mardrömmar.

Symfony och Doctrine har genererat mång svordomar, något som jag med enkelhet skapar i vår ordinarie kodbas kunde initialt ta timmar att hitta i dokumentationen. När man väl bekantat sig med hur man ska göra så gillar jag det mer och mer. Här finns det i vart fall en dokumentation, vilket vår kodbas saknar idag.

Stimulus och Turbo har varit intressant att jobba med och skulle ge ett lyft i kod-läsbarhet, men jag är inte riktigt vän med alla aspekter. Kan ju vara skit bakom spakarna, men det erkänner jag aldrig!

När vi bygger om nyhetsbreven ligger Maizzle närmst att implementeras.

Tailwind CSS var riktigt trevligt att använda då alla tänkbara egenskaper ligger till ditt förfogande, men det skulle krävas en väldigt stor omskrivning att implementera det i befintlig miljö.

Edin: Om du skulle beskriva SweClockers Jobb med en kodrad, vilken skulle det vara?
Johan:

return new JobPortal('Konfigurationen du letar efter finns i en annan YAML-fil.');

SweClockers_jobb_ljus_bg.png

Vill du hjälpa oss bygga SweClockers jobb?

Vi söker dig som vill bidra på distans, ideellt, som praktikant eller på annat sätt. Just nu vill vi bland annat:

  • Sammanställa den feedback som kommit in från communityn och utveckla tjänsten vidare.

  • Integrera SweClockers Jobb med Teamtailor hos våra partners (IT-Total, Webhallen, Inet med flera) för att kunna importera deras annonser direkt.

Låter det som något för dig? Hör av dig genast!

Utforska SweClockers jobb