SlideShare a Scribd company logo
1 of 45
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 Oslo
Et 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 Norge
All pasientinformasjonen ligger i våre systemer
80.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
ReSharper
er 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 Await
private 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?

More Related Content

Similar to Cross-platform mobile development in c sharp with Xamarin

Hvordan forberede seg på en fremtid som allerede har kommet?
Hvordan forberede seg på en fremtid som allerede har kommet?Hvordan forberede seg på en fremtid som allerede har kommet?
Hvordan forberede seg på en fremtid som allerede har kommet?Geir Børdalen
 
Prototyping med Microsoft Web Matrix
Prototyping med Microsoft Web MatrixPrototyping med Microsoft Web Matrix
Prototyping med Microsoft Web MatrixØyvind Malin
 
Hvis du ikke leverer kontinuerlig, så er du ikke smidig!
Hvis du ikke leverer kontinuerlig, så er du ikke smidig!Hvis du ikke leverer kontinuerlig, så er du ikke smidig!
Hvis du ikke leverer kontinuerlig, så er du ikke smidig!Stein Inge Morisbak
 
Hva er NoCode? Introduksjon til NoCode, LowCode og hvordan jobbe effektivt me...
Hva er NoCode? Introduksjon til NoCode, LowCode og hvordan jobbe effektivt me...Hva er NoCode? Introduksjon til NoCode, LowCode og hvordan jobbe effektivt me...
Hva er NoCode? Introduksjon til NoCode, LowCode og hvordan jobbe effektivt me...Jacob Mørch
 
Lecture on Interaction Design, Pt 3
Lecture on Interaction Design, Pt 3Lecture on Interaction Design, Pt 3
Lecture on Interaction Design, Pt 3Jon Skivenes
 
Presentasjon av Newsfront. Case study med Drupal, Angular og Solr
Presentasjon av Newsfront. Case study med Drupal, Angular og SolrPresentasjon av Newsfront. Case study med Drupal, Angular og Solr
Presentasjon av Newsfront. Case study med Drupal, Angular og SolrFrontkom
 
Presentation of Newsfront. Case study using Drupal, Angular and Solr
Presentation of Newsfront. Case study using Drupal, Angular and SolrPresentation of Newsfront. Case study using Drupal, Angular and Solr
Presentation of Newsfront. Case study using Drupal, Angular and SolrHenrik Akselsen
 

Similar to Cross-platform mobile development in c sharp with Xamarin (9)

Hvordan lage apper
Hvordan lage apperHvordan lage apper
Hvordan lage apper
 
Tcd 2014 tirsdag_05 mintra_mobile_enheter
Tcd 2014 tirsdag_05 mintra_mobile_enheterTcd 2014 tirsdag_05 mintra_mobile_enheter
Tcd 2014 tirsdag_05 mintra_mobile_enheter
 
Hvordan forberede seg på en fremtid som allerede har kommet?
Hvordan forberede seg på en fremtid som allerede har kommet?Hvordan forberede seg på en fremtid som allerede har kommet?
Hvordan forberede seg på en fremtid som allerede har kommet?
 
Prototyping med Microsoft Web Matrix
Prototyping med Microsoft Web MatrixPrototyping med Microsoft Web Matrix
Prototyping med Microsoft Web Matrix
 
Hvis du ikke leverer kontinuerlig, så er du ikke smidig!
Hvis du ikke leverer kontinuerlig, så er du ikke smidig!Hvis du ikke leverer kontinuerlig, så er du ikke smidig!
Hvis du ikke leverer kontinuerlig, så er du ikke smidig!
 
Hva er NoCode? Introduksjon til NoCode, LowCode og hvordan jobbe effektivt me...
Hva er NoCode? Introduksjon til NoCode, LowCode og hvordan jobbe effektivt me...Hva er NoCode? Introduksjon til NoCode, LowCode og hvordan jobbe effektivt me...
Hva er NoCode? Introduksjon til NoCode, LowCode og hvordan jobbe effektivt me...
 
Lecture on Interaction Design, Pt 3
Lecture on Interaction Design, Pt 3Lecture on Interaction Design, Pt 3
Lecture on Interaction Design, Pt 3
 
Presentasjon av Newsfront. Case study med Drupal, Angular og Solr
Presentasjon av Newsfront. Case study med Drupal, Angular og SolrPresentasjon av Newsfront. Case study med Drupal, Angular og Solr
Presentasjon av Newsfront. Case study med Drupal, Angular og Solr
 
Presentation of Newsfront. Case study using Drupal, Angular and Solr
Presentation of Newsfront. Case study using Drupal, Angular and SolrPresentation of Newsfront. Case study using Drupal, Angular and Solr
Presentation of Newsfront. Case study using Drupal, Angular and Solr
 

Cross-platform mobile development in c sharp with Xamarin

  • 1. 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
  • 2. 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
  • 3. 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 Oslo Et av de største programvarehusene i Norge 220 ansatte i DIPS – 130 utvikling – 20 databaseutviklere – 30 sykepleiere og leger
  • 4. 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 Norge All pasientinformasjonen ligger i våre systemer 80.000 sykehusansatte bruker DIPS hver dag
  • 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 Før var alt enkelt: Windows!
  • 6. 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
  • 7. 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
  • 8. 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
  • 9. 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
  • 10. 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
  • 11. 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
  • 12. 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
  • 13. 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!
  • 14. 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.”
  • 15. 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?
  • 16. 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!
  • 17. 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
  • 18. 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 ReSharper er verdens beste IDE» - Runar Ovesen Hjerpbakk
  • 19. 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
  • 20. 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
  • 21. 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
  • 22. 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
  • 23. 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 (); }); } }); }); }
  • 24. 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 Await private 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; } }
  • 25. 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
  • 26. 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
  • 27. 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
  • 28. 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?
  • 29. 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!
  • 30. 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%
  • 31. 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
  • 32. 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!
  • 33. 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
  • 34. 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
  • 35. 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
  • 36. 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!
  • 37. 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
  • 38. 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
  • 39. 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
  • 40. 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
  • 41. 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
  • 42. 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
  • 43. 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
  • 44. 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
  • 45. 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?

Editor's Notes

  1. Publikum kan Java Etter kurset være i stand til å sette i gang
  2. Til forskjell fra konsulentselskap
  3. C# og Oracle OUS 20. oktober, Nord-Europas største
  4. MS har vunnet En klientplatform Man slipper unna med dårlig UI Mobile er crap og sjeldent bedre enn alternativer
  5. Første steg var flyttbar pc med strekkodeskanner Tryggere, men enklere og raskere?
  6. I dag er det annerledes iOS, Android og Windows alle relevante Mobiler og tablets løser enkelte problemer enklere
  7. Brukbarhet i fokus Ikke lenger nok å kun løs oppgavene Oppgavene må løses av rett device
  8. Visitt-app på tablets Medisin utleveringsapp på mobil
  9. Ytelse Oppstartstid Størrelse på binary Tilgjengelighet Flere språk, utfordrende å dele kode Må implementere det same på forskjellige måter
  10. Delphi!
  11. = Cordova Mange rammeverk å velge mellom, av varierende kvalitet
  12. Apache Cordova (PhoneGap), Icenium  Minste felles multiplum Gjenbruk kunnskapen fra Web Facebook
  13. Animasjoner Scrolling Minneforbruk Tooling Debug-muligheter
  14. Native ytelse! Del opp til 90% av kildekoden
  15. Take advantage of everything great about C# and now write code that can be shared across all platforms iOS Android, Mac Windows (WPF, Store, Phone, ASP.NET, etc)
  16. Bra språk Vi har .Net rammeverket i bunnen
  17. Vanskelig å lese Feilhåndtering?
  18. Vanlig flyt Enkel feilhåndtering
  19. Også vanlig med Java, Python, Ruby, node.js
  20. Andreas oppdager at DIPS Applikasjonsserver er skrevet i C# og låst til IIS.