cross-platform mobile development in c sharp with xamarin

Post on 19-Jun-2015

210 Views

Category:

Software

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

Slides from a talk (in Norwegian) me and @hjerpbakk had at IT Dagene at NTNU about mobile development in C# with Xamarin and Mono.

TRANSCRIPT

E N A B L I N G E F F I C I E N T H E A L T H C A R E

Kryssplattform mobilutvikling i C#

Runar Ovesen Hjerpbakk | Utviklingsleder | roh@dips.no Andreas Mosti | Systemutvikler | anm@dips.no

E N A B L I N G E F F I C I E N T H E A L T H C A R E

DIPS? DIPS. Motivasjon for kryssplattformutvikling Hva gjør C# til et flott språk å bruke også på mobil? Nyttige mønstre Demo og kodedykk

Agenda

E N A B L I N G E F F I C I E N T H E A L T H C A R E

Hvem er DIPS?

Kontor i Bodø, Tromsø, Trondheim og OsloEt av de største programvarehusene i Norge

220 ansatte i DIPS– 130 utvikling– 20 databaseutviklere– 30 sykepleiere og leger

E N A B L I N G E F F I C I E N T H E A L T H C A R E

Hva gjør DIPS

Vi utvikler journalsystem for 80% av sykehusene i NorgeAll pasientinformasjonen ligger i våre systemer80.000 sykehusansatte bruker DIPS hver dag

E N A B L I N G E F F I C I E N T H E A L T H C A R E

Før var alt enkelt: Windows!

E N A B L I N G E F F I C I E N T H E A L T H C A R E

DIPS Mobile Platform 2007

E N A B L I N G E F F I C I E N T H E A L T H C A R E

Dagens klientlandskap

E N A B L I N G E F F I C I E N T H E A L T H C A R E

Andre forventninger fra brukerne

E N A B L I N G E F F I C I E N T H E A L T H C A R E

DIPS Mobile Platform 2014

E N A B L I N G E F F I C I E N T H E A L T H C A R E

Native utvikling

E N A B L I N G E F F I C I E N T H E A L T H C A R E

Selvpining

E N A B L I N G E F F I C I E N T H E A L T H C A R E

E N A B L I N G E F F I C I E N T H E A L T H C A R E

Hybrider

Omtrent umulig å få til native brukeropplevlse

Ytelsen!

E N A B L I N G E F F I C I E N T H E A L T H C A R E

Prøving og feiling

Mark Zuckerberg: Our Biggest Mistake Was Betting Too Much On HTML5

“There are mobile experiences out there that are so good, that … we need to have the highest quality, and the only way is doing native.”

“We have definitely shifted from HTML5 to native. The primary reason for that is, we’re seeing that more and more people are spending more time in the app, and the app is running out of memory.”

E N A B L I N G E F F I C I E N T H E A L T H C A R E

Native for brukeren

Betyr det at vi er stuck med native utvikling om vi ønsker fornøyde brukere og vil ha en behagelig utviklerhverdag?

E N A B L I N G E F F I C I E N T H E A L T H C A R E

Nei. Vi har Xamarin!

Alt du kan gjøre i Objective-C, Swift eller Java, kan du gjøre i C# vha. Xamarin!

E N A B L I N G E F F I C I E N T H E A L T H C A R E

Ikke bare mobiler

E N A B L I N G E F F I C I E N T H E A L T H C A R E

C# fordeler

«Ligner på Java, alt er bare bedre.»

«Visual Studio med ReSharperer verdens beste IDE»

- Runar Ovesen Hjerpbakk

E N A B L I N G E F F I C I E N T H E A L T H C A R E

C vs C#

C# with XamarinC

E N A B L I N G E F F I C I E N T H E A L T H C A R E

Java vs C#

C# with XamarinJava

E N A B L I N G E F F I C I E N T H E A L T H C A R E

LINQ - Language Integrated Query

E N A B L I N G E F F I C I E N T H E A L T H C A R E

XML? JSON? JSONx?

XML kan parses med LINQ

JSON er støttet av fantastiske 3. parts biblioteker

E N A B L I N G E F F I C I E N T H E A L T H C A R E

private void SnapAndPost (){    Busy = true;    UpdateUIStatus ("Taking a picture");    var picker = new Xamarin.Media.MediaPicker ();    var picTask = picker.TakePhotoAsync (new Xamarin.Media.StoreCameraMediaOptions ());    picTask.ContinueWith ((picRetTask) => {        InvokeOnMainThread (() => {            if (picRetTask.IsCanceled) {                Busy = false;                UpdateUIStatus ("Canceled");            } else {                var tagsCtrl = new GetTagsUIViewController (picRetTask.Result.GetStream ());                PresentViewController (tagsCtrl, true, () => {                    UpdateUIStatus ("Submitting picture to server");                    var uploadTask = new Task (() => {                        return PostPicToService (picRetTask.Result.GetStream (), tagsCtrl.Tags);                    });                    uploadTask.ContinueWith ((uploadRetTask) => {                        InvokeOnMainThread (() => {                            Busy = false;                            UpdateUIStatus (uploadRetTask.Result.Failed ? "Canceled" : "Success");                        });                    });                    uploadTask.Start ();                });            }        });    });}

E N A B L I N G E F F I C I E N T H E A L T H C A R E

Async og Awaitprivate async Task SnapAndPostAsync (){    try {        Busy = true;        UpdateUIStatus ("Taking a picture");        var picker = new Xamarin.Media.MediaPicker ();        var mFile = await picker.TakePhotoAsync (new Xamarin.Media.StoreCameraMediaOptions ());        var tagsCtrl = new GetTagsUIViewController (mFile.GetStream ());

        // Call new iOS await API        await PresentViewControllerAsync (tagsCtrl, true);        UpdateUIStatus ("Submitting picture to server");

        await PostPicToServiceAsync (mFile.GetStream (), tagsCtrl.Tags);        UpdateUIStatus ("Success");    } catch (OperationCanceledException) {        UpdateUIStatus ("Canceled");    } finally {        Busy = false;    }}

E N A B L I N G E F F I C I E N T H E A L T H C A R E

Utvikle raskere!

Del kode mellom plattformene

Bruk ferdige biblioteker

E N A B L I N G E F F I C I E N T H E A L T H C A R E

Standard mønster

E N A B L I N G E F F I C I E N T H E A L T H C A R E

IoC & Dependency Injection

E N A B L I N G E F F I C I E N T H E A L T H C A R E

Men hva med Cloud?

E N A B L I N G E F F I C I E N T H E A L T H C A R E

Men hva med Cloud?

66.9% markedsandel på web!

E N A B L I N G E F F I C I E N T H E A L T H C A R E

LAMP: 58.5%

E N A B L I N G E F F I C I E N T H E A L T H C A R E

E N A B L I N G E F F I C I E N T H E A L T H C A R E

Skalerbar, Kryssplattform webkomponent i C# !?!?

Awesomeness!

E N A B L I N G E F F I C I E N T H E A L T H C A R E

Forslag til REST-arkitektur

E N A B L I N G E F F I C I E N T H E A L T H C A R E

HTTP GET

HTTP POST

E N A B L I N G E F F I C I E N T H E A L T H C A R E

Kjapp pakking og deployment med Docker

E N A B L I N G E F F I C I E N T H E A L T H C A R E

Miguel approves!

E N A B L I N G E F F I C I E N T H E A L T H C A R E

En manuell, papirbasert prosedyre

Medikamenter føres fra papir til papir

Feilmedisinering: – Annen dose enn ordinært: 39%– Feil legemiddel til pasient: 17%– Legemiddel gitt til feil pasient: 12%

Usecase: medikamentutlevering

E N A B L I N G E F F I C I E N T H E A L T H C A R E

Demo og kodedykk

E N A B L I N G E F F I C I E N T H E A L T H C A R E

Hva vi ikke har pratet om: Xamarin Insights

E N A B L I N G E F F I C I E N T H E A L T H C A R E

Hva vi ikke har pratet om: Xamarin Profiler

E N A B L I N G E F F I C I E N T H E A L T H C A R E

Hva vi ikke har pratet om: Xamarin Test Cloud

E N A B L I N G E F F I C I E N T H E A L T H C A R E

Hva vi ikke har pratet om: Xamarin Forms

E N A B L I N G E F F I C I E N T H E A L T H C A R E

Priser

E N A B L I N G E F F I C I E N T H E A L T H C A R E

C# er et fantastisk språk og kan brukes på «alle» plattformer vha. bla. Xamarin

Native Apps kan gi bedre brukeropplevelse og bedre ytelse enn hybrider

Opp mot 90% kodedeling på tvers av plattformer 27,533 - 3. parts komponenter og biblioteker på NuGet,

de viktigste er kryssplattform allerede Kan bruke Visual Studio eller Xamarin Studio

Oppsummering

E N A B L I N G E F F I C I E N T H E A L T H C A R E

@hjerpbakk@amostii

xamarin.com

github.com/xamarin

Sommerjobber og faste stillinger på dips.no

Spørsmål?

top related