Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Kryssplatform mobilutvikling i C#
1. 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
2. Agenda
DIPS? DIPS.
Motivasjon for kryssplattformutvikling
Hva gjør C# til et flott språk å bruke også på mobil?
Nyttige mønstre
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
3. Hvem er DIPS?
Kontor i Bodø, Tromsø, Trondheimog 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
4. 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
5. 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
11. 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
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. 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
14. 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.”
E N A B L I N G E F F I C I E N T H E A L T H C A R E
“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. 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
16. Nei. Vi har 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
Alt du kan gjøre i
Objective-C,
Swift eller Java,
kan du gjøre i C#
vha. Xamarin!
17. 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
18. 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
19. C vs C#
C C# with 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
20. Java vs C#
Java C# with 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
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. 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
23. 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
24. 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
25. Utvikle raskere!
E N A B L I N G E F F I C I E N T H E A L T H C A R E
Del kode mellom
plattformene
Bruk ferdige biblioteker
37. Usecase: medikamentutlevering
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%
E N A B L I N G E F F I C I E N T H E A L T H C A R E
38. 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
39. 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
40. 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
41. 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
42. 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
43. 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
44. Oppsummering
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
E N A B L I N G E F F I C I E N T H E A L T H C A R E
45. Spørsmål?
@hjerpbakk
@amostii
xamarin.com
github.com/xamarin
Sommerjobber og faste stillinger på 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
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.