SlideShare a Scribd company logo
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

PPTX
Zookeeper-aware application server
PPTX
Kryssplatform mobilutvikling i C#
PDF
Meetup16
PPTX
Tilpasning til mobil
PPTX
Hvordan lykkes med mobile prosjekter
PDF
Softwareutvikling anno 2012 torbjørn marø
PDF
Kristiansand php meeting #1
PDF
Dnd design smartere dagsavisen
Zookeeper-aware application server
Kryssplatform mobilutvikling i C#
Meetup16
Tilpasning til mobil
Hvordan lykkes med mobile prosjekter
Softwareutvikling anno 2012 torbjørn marø
Kristiansand php meeting #1
Dnd design smartere dagsavisen

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

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

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

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