Inlägg om Open Source

Publicerat Tech

Våra Open Source-projekt på Spinit

På Spinit älskar vi mjukvara skapad med öppen källkod, eller Open Source. I alla våra projekt drar vi nytta av duktiga mjukvaru­utvecklare världen över som delar med sig av sina skapelser utan kostnad. Vi vill inte vara sämre och vill gärna vara med och ge tillbaka av det vi skapar.

För att underlätta och fin­trimma våra processer program­merar vi verk­tyg och skript när behov uppstår, och istället för att bara dela det mellan våra olika projekt i huset låter vi andra utveck­lare också ta del av det genom en open source-licens. För vad har vi egent­ligen att tjäna på att hålla saker för oss själva när vi kan vara med och bidra till en bättre webb globalt?

Vi har skapat såväl stora, väl under­hållna utvecklings­verktyg som mindre och experi­ment­ella embryon som vi gärna vill ska kunna växa vidare med hjälp av utveck­lare utanför våra väggar.

Nedan är ett urval av verktyg som våra med­arbetare skapat och valt att dela med sig av.

Web Anchor

Web Anchor, som skapades av Mattias Nordqvist, möjlig­gör de­klara­tion av ett webb-API via ett interface, vilket Web­Anchor sedan kan skapa en im­plementa­tion av.

Vi har även bloggat tidigare om Web Anchor.

Web Anchor på Github

Appeaser

Appeaser skapades av Carl Berg i ett projekt där vi började gå ifrån en lager­baserad kod­upp­delning till en vertikal kod­upp­delning. I och med det började vi dela upp kod i features bland annat med hjälp av ett så kallat mediator design-mönster. För att kunna åter­använda mönstret bröts det ut som öppen källkod.

Appeaser på Github

Captain Data

Captain Data är ett verktyg för att på ett smidigt sätt skapa data i SQL-databaser. Verk­tyget skapades av Mattias Nordqvist och används exempel­vis vid integrations­test.

Captain Data på Github

Spinit CosmosDb

En lättvikts OR-Mapper för CosmosDb. Projektet skapades av Martin Oom och Viktor Alveflo för att på ett mer typ­säkert sätt kunna inter­agera med Microsoft Azure CosmosDb.

Spinit CosmosDb på Github

Galactic Waste Management

Ett verktyg, skapat av Mattias Nordqvist, för att hantera databas­migrering på olika sätt i olika skeden (GreenField, LiveField och BrownField) av ett utvecklings­projekt. Migrerings­script skapas i olika kataloger vilket ger skripten olika betydelse. Vissa skall köras varje gång de förändras, andra bara en gång.

Galactic Waste Management på Github

Spinit Expressions

Projektet skapades av Martin Oom och förenklar de­klarering och kombina­tioner av Expressions i C#. Används exempel­vis i Spinit CosmosDB. Spinit Expressions har även lite mer avancerad funk­tion­alitet som är använd­bar vid generering av filter eller liknande för databas­frågor.

Spinit Expressions på Github.

Spinit AspNetCore ReverseProxy

Ett projekt, skapat av Martin Oom, som ger Reverse Proxy-funktion­alitet i en ASP.Net Core-applikation.

Spinit AspNetCore ReverseProxy

Jelly Dust

Ett projekt, skapat att Mattias Nordqvist, för att för­enkla transaktions­hantering i en unit of work tillsammans med Dapper.

Jelly Dust på Github

Golden Fox

Ett projekt, skapat att Mattias Nordqvist för att förenkla schema­läggning.

Golden Fox på Github

Spinit Library

Spinit Library innehåller flera paket som under åren har kurerats och använts för lösningar man vill kunna åter­använda, bland annat säkerhets­paket för hash­ning och salt­ning av lösen­ord, interface­baserad filsystem­access och exporterings­verktyg för Excel och CSV.

Spinit Library på Github
Spinit Library på Nuget

Publicerat Nyheter, Tech

Spinit goes open source med Web Anchor

I ett projekt för en av våra kunder har vi använt biblioteket Refit för att från .Net enkelt kunna använda webbresurser på ett mysigt sätt. Vi tyckte dock inte om den kod-genererande vändningen Refit tog vid version 2.0, samtidigt som tidigare versioner fortfarande gjorde det komplicerat att formatera datum och listor på det sätt vi ville i bland annat querystring-parametrar. Vi började med att gaffla (’forkade’, ni vet vad jag menar) en tidigare version av Refit men vi kände samtidigt att vi kunde göra något bättre själva.

Som utvecklare på Spinit har du turen att du får spendera en del av din arbetstid på att göra vad du vill, med det enda kravet att det tillför till företagets eller din egen professionella utveckling. Några av oss valde att använda detta privilegiet till att bygga ett eget ”Refit”. Resultatet blev Web Anchor. Web Anchor har nu nått version 1.0 och har redan ersatt Refit i orginalprojektet, men har också smugit sig in på andra platser.

Hur man använder Web Anchor

Som en kort introduktion är detta vad Web Anchor är, och hur det kan använda SWAPI för att hämta information om planeter i Starwars-världen.

Först måste vi skapa en typ som representerar resultatet vi förväntas oss från http://swapi.co/api/planets/1.

public class Planet
{
    public string Name { get; set; }
    public string Climate { get; set; }
    public int Diameter { get; set; }
}

För att kunna anropa apiet behöver vi definiera det med ett Interface.

public interface SWAPI
{
    [Get("planets/{id}")]
    Task<Planet> Planet(int id);
}

Vi kan därefter anropa apiet så här

var api = Api.For<SWAPI>("http://swapi.co/api/");
var planet = await customerApi.Planet(1);

// => HTTP GET http://swapi.co/api/planets/1

Web Anchor har stöd för ”de vanliga” HTTP-verben (GET/POST/PUT/DELETE) och det finns många så kallade extension points som du kan använda för att förändra och utöka Web Anchors beteende.