ݺߣs from a talk (in Norwegian) me and @hjerpbakk had at IT Dagene at NTNU about mobile development in C# with Xamarin and Mono.
1 of 45
Download to read offline
More Related Content
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
Publikum kan Java
Etter kurset være i stand til å sette i gang
Til forskjell fra konsulentselskap
C# og Oracle
OUS 20. oktober, Nord-Europas største
MS har vunnet
En klientplatform
Man slipper unna med dårlig UI
Mobile er crap og sjeldent bedre enn alternativer
Første steg var flyttbar pc med strekkodeskanner
Tryggere, men enklere og raskere?
I dag er det annerledes
iOS, Android og Windows alle relevante
Mobiler og tablets løser enkelte problemer enklere
Brukbarhet i fokus
Ikke lenger nok å kun løs oppgavene
Oppgavene må løses av rett device
Visitt-app på tablets
Medisin utleveringsapp på mobil
Ytelse
Oppstartstid
Størrelse på binary
Tilgjengelighet
Flere språk, utfordrende å dele kode
Må implementere det same på forskjellige måter
Delphi!
= Cordova
Mange rammeverk å velge mellom, av varierende kvalitet
Apache Cordova (PhoneGap), Icenium
Minste felles multiplum
Gjenbruk kunnskapen fra Web
Facebook
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)
Bra språk
Vi har .Net rammeverket i bunnen
Vanskelig å lese
Feilhåndtering?
Vanlig flyt
Enkel feilhåndtering
Også vanlig med Java, Python, Ruby, node.js
Andreas oppdager at DIPS Applikasjonsserver er skrevet i C# og låst til IIS.