HOW WAS LUNCH? GOOD? YOU KNOW, AFTER 
YESTERDAY, WITH THE BURRITOS, IT 
WAS A LITTLE DISAPPOINTING, I KIND 
OF HALF EXPECTED TO SEE THE SIGN 
SAY COLD BURRITOS TODAY, BUT IT'S 
CONFERENCE FOOD. SO TODAY, WE'RE 
GOING TO TALKING ABOUT BACKEND ARCHITECTURE 
FOR MOBILE APPS AND IT'S A FUN TOPIC, 
IN FACT, ITSELF A LITTLE BIT TOO 
FUN OF A TOPIC, BECAUSE THERE'S 
SO MUCH GOING ON WITH IT. THERE 
IS JUST REALLY SO MUCH WHAT HAVE 
YOUS? SO MANY CHOICES TO BE MADE. 
THERE'S REALLY -- THERE'S TOO MANY 
CHOICES. AND SO TODAY, WE'RE GOING 
TO BE GOING THROUGH A COUPLE OF 
OPTIONS THAT YOU CAN MAKE. AND THERE'S 
NO ONE RIGHT CHOICE THAT YOU CAN 
MAKE IN ALL SITUATIONS AND IN FACT, 
THERE'S NO ONE RIGHT CHOICE THAT 
YOU CAN MAKE IN ANY SPECIFIC SITUATION 
EITHER. SO YOU -- I'M NOT GOING 
TO BE ABLE TO GIVE YOU SOMETHING, 
COME OUT OF HERE AND SAY THIS IS 
WHAT I'M GOING TO DO. BUT THERE'S 
PROS AND CONS FOR EACH ARCHITECTURE 
THAT WE'RE GOING TO TALK ABOUT TODAY. 
SO HOPEFULLY, WHEN YOU COME OUT 
OF HERE AND TAKE IT TO YOUR SPECIFIC 
APPLICATION THAT YOU'RE BIDDING, 
THAT YOU CAN WEIGH THE PROS AND 
CONS AND PICK AN ARCHITECTURE OR 
A COUPLE OF DIFFERENT ARCHITECTURES 
AND WEAVE THEM INTO YOUR APP AND 
HAVE A SUCCESSFUL APPLICATION EXPERIENCE 
WITH THEM. SO MY NAME IS MATT SOUCOUP, 
I'M A SENIOR CLOUD ADVOCATE AT MICROSOFT, 
AND WHAT DOES THAT MEAN? IT MEANS 
I HEART DEVELOPERS. I WANT YOU TO 
BE SUCCESSFUL IN ANYTHING THAT YOU'RE 
BUILDING. WHETHER IT'S THE APP, 
A NATIVE iOS OR ANDROID APP. I WANT 
YOU TO BE SUCCESSFUL BUILDING THAT. 
IN FACT, MY DM'S ON TWITTER, ALWAYS 
OPEN, CODE MAIL MATT, GET IN TOUCH 
WE MANY, WHETHER YOU'RE BUILDING 
A MOBILE APP OR NOT, BUILDING . 
NET CORE APPLICATIONS, WHETHER YOU'RE 
BUILDING A DOCKER, GET IN TOUCH 
WITH ME, I'LL BE ABLE TO PUT IN 
TOUCH WITH SOMEBODY ELSE IF I DON'T 
KNOW THE ANSWER. BUT EVEN MORE IMPORTANTLY, 
I WANT TO BE YOUR ADVOCATE WITHIN 
MICROSOFT. SO IF YOU HAVE AN IDEA 
FOR AN APPLICATION OR FOR A PRODUCT 
THAT WOULD BE BETTER FOR ONE OF 
OUR PRODUCTS, OR IF YOU'RE HAVING 
TROUBLE WITH SOMETHING OR IF THERE'S 
A BUG THAT WE CAN IF I CAN, I WANT 
TO BE YOUR VOICE WITHIN MICROSOFT 
AND MAKE SURE OUR COMMUNITY IS WELL-REPRESENTED. 
SO LET ME START OFF WITH A FLASH 
QUIZ, HOW MANY PEOPLE HAVE DEVELOPED 
AN APP THAT DID NOT HAVE TO TALK 
TO THE INTERNET? ONE. TWO? THREE. 
YEAH, IT'S MORE THAN I THOUGHT. 
I HAD TO DO ONE. I HAD TO STRUGGLE 
TO THINK OF THE ANSWER. AND IT WAS 
BACK IN 2009, THE FIRST MOBILE APP 
I CREATED, YOU WOULD THINK THIS 
WOULD BE FRONT OF MIND. IT WAS A 
LONG STORY. IT STARTED OUT AS AN 
iOS APP, I GOT MYSELF INTO A LOT 
OF TROUBLE BECAUSE C IS A -- IT 
HAD GPS FUNCTIONALITY IN IT SO A 
LITTLE GEE -- ONE APP, OUT OF ALL 
OF THESE YEARS, OVER TEN YEARS, 
IT DID NOT HAVE TO TALK TO THE INTERNET. 
SO MOST OF THE PEOPLE ARE NOW DEVELOPING 
APPS THAT TALK TO THE INTERNETS 
RARE, THREE PEOPLE. AND OF THOSE 
APPS, HOW MANY PEOPLE HAVE DEVELOPED 
THEIR OWN CLOUD OF IT, WHETHER IT'S 
ON-PREM OR TALKING TO AZURE OR AWS 
OR SOME OTHER VENDOR? SO WHAT WE'RE 
DOING IS NOT ONLY JUST TALKING TO 
THINGS LIKE LET'S SAY A TWITTER 
FEED, OR SOME OTHER THIRD PARTY, 
WE'RE DEVELOPING OUR OWN THINGS 
AS WELL. AND IN FACT, WE'RE DOING 
SUCH A GOOD JOB AT IT, BUILDING 
OUR OWN CLOUDS THAT WE MIGHT COME 
UP WITH SOMETHING LIKE THIS. WHERE 
WE HAVE A BUNCH OF DIFFERENT MICROSERVICES 
OR LITTLE CLOUDS IN IT. AND THOSE 
LITTLE CLOUDS COULD BE DEVELOPED 
IN A BUNCH F OF DIFFERENT LANGUAGES 
AND SITTING ON-PREM. THEY COULD 
BE SITTING ON DIFFERENT CLOUD VENDORS. 
THEY'RE ALL OVER THE PLACE, AND 
THEY DO DIFFERENT THINGS, THEY'RE 
WRITTEN IN DIFFERENT LANGUAGES, 
POSSIBLY. AND MICROSERVICES ARE 
A GOOD THING AND WE'LL GET TO TALKING 
ABOUT THAT IN A BIT. BUT SO NOT 
ONLY DO WE HAVE TO DEVELOP APPS 
FOR SOMETHING THAT LOOKS LIKE THIS. 
WHICH HAPPENS TO BE AN IPHONE. WE 
HAVE TO DO SOMETHING FOR ANDROID 
AS WELL. AND A BUNCH OF DIFFERENT 
SCREEN SIZES. A BUNCH OF DIFFERENT 
OPERATING SYSTEMS, REALLY, WHEN 
YOU CONSIDER ANDROID AN iOS, WE 
HAVE TO GO BACKWARDS COMPATIBLE 
FOR IT. AND NOW WE HAVE TO DO THIS, 
TOO. AND SO NOBODY HAS EVER BEEN 
WRONG WHEN THEY SAID MOBILE APP 
DEVELOPMENT IS TOUGH. IT'S BAD. 
RIGHT? IT GETS WORSE. WHEN YOU PUT 
IN CLOUD DEVELOPMENT WITH IT. OR 
BACKEND ARCHITECTURE WITH IT. BECAUSE 
THERE'S SO MANY THINGS THAT YOU 
HAVE TO CONSIDER WITH IT. AND SO 
MOBILE BACKENDS HAVE SOME UNIQUE 
NEEDS THAT GO ALONG WITH THEM. THE 
FIRST IS API VERSIONING. WE'RE GOING 
TO WRITE AWE BACK ENDED AND WE HAVE 
APIS WITH IT, WE HAVE TO MAKE SURE 
THAT WE VERSION IT. WE RELEASE A 
BRAND NEW FEATURE, A BRAND NEW APP, 
NOT EVERYBODY IS GOING TO UPDATE 
TO THAT. SO WE HAVE TO OUR APIS 
BACKWARDS COME PARTABLE. WHETHER 
WE DO A V2 IN OUR RIOTING OR PUT 
IT IN THE -- ROUTING OR PUT IT IN 
THE HEADERS, WE HAVE TO MAKE SURE 
THAT THE APIS IN OUR APPS ARE CAPABLE 
OF HANDLING API VERSIONING, UNIQUE 
FOR MOBILE. OFF LINE DATA. THE BANE 
OF EVERY MOBILE APP DEVELOPER'S 
EXISTENCE. USERS ARE GOING TO FIND 
A WAY TO GO OFF LINE, WHILE THEY'RE 
OFF LINE, THEY'RE GOING TO FIND 
A WAY TO CHANGE THE DATA, AT THE 
SAME TIME, THEY'RE GOING TO FIND 
A WAY TO CHANGE THE DATA ON LINE, 
AND WHEN THEY COME ON LINE WITH 
THE FIRST DEVICE, THE DATA IS GOING 
TO COLLIDE. WE HAVE TO HAVE A WAY 
TO RESOLVE THAT CONFLICT, TOO. PUSH 
NOTIFICATIONS, NOTE EVERY APP HAS 
A PUSH NOTIFICATIONS, BUT IT IS 
A NEED ACROSS BACKENDS, WHICH WE 
SHOULD ACCOUNT FOR PUSH NOTIFICATIONS 
BEING SENT OUT. AND FINALLY, DEBUGGING 
IS ROUGH FOR MOBILE BACKENDS. DEBUGGING 
IS ROUGH FOR JUST MOBILE FRONT ENDS 
BUT WE START MIXING IN CLOUD OR 
EVEN JUST PLAIN OLD NETWORKING INTO 
IT, WE HAVE TO TAKE INTO ACCOUNT, 
WELL, THE FIRST DISCONNECTED, THEN 
WE HAVE TO TAKE INTO ACCOUNT INTERMITTENT 
CONNECTIVITY, SLOW CONNECTIVITY, 
THE FAST CONNECTIVITY, AND ANDROID, 
WHEN YOU'RE DEBUGGING THE EM ULATE 
TORS, RUNS ON A DIFFERENT AN iOS. 
ANDROID RUNS IN THE OWN LITTLE NETWORK 
THAT YOU HAVE TO CREATE A BRUNEIDGE 
FOR IT. IT GETS MADDENING HAVING 
TO DO THAT. YOU CAN WRITE ALL OF 
THE NOOUN -- OOUN UNI TESTS THAT 
YOU WANT. IN ORDER FOR THE MOBILE 
BACK END TO BE CALLED A MOBILE BACKEND, 
YOU HAVE TO HAVE THESE FEATURES 
WITHIN IT. FIRST OFF IS SCALEABLE 
COMPUTE. HERE, THIS IS YOUR BUSINESS 
LOGIC, THIS IS YOUR APP LOGIC AND 
YOU WANT IDEALLY YOU'RE WRITING 
SOMETHING AND YOU WANT A TON OF 
PEOPLE USING IT, SO YOU WANT TO 
BE ABLE TO SCALE OUT. YOU DON'T 
WANT IT TO COLLAPSE UNDER LOAD. 
AT THE SAME TIME, NOBODY IS USING 
IT, IT WOULD BE NICE IF IT SCALED 
BACK IN, SO YOU DON'T GET CHARGED 
A BUNCH OF MONEY FOR IT. AUTHENTICATION. 
YOU WANT TO BE ABLE TO AUTHENTICATE 
PEOPLE OR PERSONALIZE AND MAKE SURE 
THAT YOU LOCK DOWN RESOURCES. DATA 
AND FILE STORAGE, BACK TO WHAT WE 
WERE TALKING BEFORE WITH DATA SYNCH, 
YOU WANT TO BE ABLE TO HANDLE PURE 
ON LINE, YOU HAVE A DATABASE ON 
THE BACK END, YOU WANT TO BE ABLE 
TO FILE STORAGE. STATIC DATA. AND 
THEN, AGAIN, PUSH NOTIFICATIONS. 
THE TABLE STAKES, YOU WANT TO BE 
ABLE TO HANDLE PUSH. AND THERE'S 
MORE. THERE'S MORE THAT WE WANT 
TO CONSIDER WHEN WE'RE BUILDING 
OUR MOBILE BACKENDS. COSTS, WE'RE 
NOT UNLIMITED. WE HAVE TO CONSIDER 
COSTS. PRODUCTIVITY. NOW, HERE, 
WHEN I'M TALKING ABOUT IS NOT ONLY 
US BEING PRODUCTIVITY, AND I'M A 
DEVELOPER, SO I KNOW C SHARP AND. 
NET PRETTY WELL. BUT, HOWEVER, IF 
I HAVE ON MY DEVELOPMENT TEAM A 
BUNCH OF JAVASCRIPT NO DEVELOPERS, 
WHO HAPPEN TO BE REALLY GOOD IN 
SUPPLY CHAIN MANAGEMENT, I DON'T 
WANT THESE PEOPLE TO LEARN C SHARP 
AND . NET IN ORDER TO WRITE A BACK 
END FOR THEM. LET THEM WORK IN NODE. 
I WANT THEM TO BE UP AND RUNNING 
QUICKLY. I WANT MY MOBILE BACKEND 
TO BE LANGUAGE AGNOSTIC. AND UNFORTUNATELY, 
NOT EVERYBODY IS A MOBILE CLIENT. 
SO WE WANT TO HAVE YOUR BACKENDS 
READY TO BE ABLE TO SERVE A BUNCH 
OF DIFFERENT FRONT ENDS. NOW, WHETHER 
THAT FRONT END IS, YOUR TRADITIONAL 
WEB CLIENT, LIKE AN ANGULAR OR A 
REACT APPLICATION OR A VIEW APPLICATION, 
OR EVEN LIKE AN IOT APP. SO WE WANT 
TO START THINKING THROUGH THAT TYPE 
OF STUFF, TO MAKE SURE IT'S THERE, 
TO MAKE SURE IT'S THERE IN THE FUTURE, 
OR EVEN THE PRESENT, THAT MORE APPLICATIONS, 
MORE FRONT ENDS CAN ACCESS IT. SO 
THERE'S A LOT OF POSSIBILITIES THAT 
WE CAN USE TO BUILD OUR APPS UP. 
AND THREE OF THEM THAT I'M GOING 
TO TALK ABOUT TODAY, FIRST, OUR 
WEB APIS, THE TRADITIONAL WEB API, 
LIKE A . NET CORE OR A NO JS APP 
AND USING CONTAINERS TO BUILD THESE 
UP. SERVERLESS, AZURE FUNCTIONS, 
AND THEN FINALLY, MOBILE BACKEND 
AS A SERVICE OR MBaaS, NOW, NOTICE 
ONE THING, I'M USING FOR THE LOGO 
MBaaS VISUAL APP CENTER, WELL, VS 
APP CENTER, IF YOU'RE FAMILIAR WITH 
THAT, DOESN'T HAVE ANY MBaaS FEATURES 
OR MOBILE FEATURE, TABLE SIX THAT 
WE TAUGED ABOUT BEFORE. IT HAS PUSH 
NOTIFICATIONS BUT IT DOESN'T HAVE 
DATA, IT DOESN'T HAVE AUTHENTICATION 
UNTIL TOMORROW. YOU HEARD IT HERE 
FIRST. ACTUALLY, THEY'RE DESIGNING 
IT IN THE OPEN, SO IT'S KNOWN, IT'S 
GOING TO BE IN PREVIEW TOMORROW, 
PEOPLE CAN START PLAYING WITH IT. 
ALL RIGHT. HOWEVER, NONE OF THESE 
-- YOU COULD GO ALL IN ON ONE. IF 
YOU WANTED TO. BUT MOST LIKELY, 
YOU'VE GOING TO BE MIXING AND MATCHING 
TO BUILD YOUR BACK END UP. YOU MIGHT 
BE USING SOME WEB APIS TO DO SOME 
MORE HEAVY LIFTING, SOME FUNCTIONS 
TO DO SOME EVENT-DRIVEN PROCESSING 
AND MIGHT BE USING THE MOBILE BACKEND 
SERVICES BECAUSE IT PACKAGES THINGS 
REALLY NICELY FOR YOU AND YOU GET 
THEM FOR FREE. IT'S NOT FREE-FREE, 
BUT YOU GET THE ABILITY TO WRITE 
WITH THEM FOR A LITTLE AMOUNT OF 
INVESTMENT IN TYPING. SO LET'S TAKE 
A LOOK AT WHAT WE'RE GOING TO BE 
USING TODAY. WHAT WE'RE GOING TO 
BUILDING UP TO USE DIFFERENT BACKENDS 
AND IT'S CALLED TAIL AND TRADERS. 
AND IT IS A -- HERE WE GO -- ALL 
RIGHT. DEBUGGING IS ROUGH. LOOK 
AT MY ANDROID EMULATE TOR. IT'S 
ANDROID. IT NEVER WORKS. REALLY 
BIG. ALL RIGHT. SO HERE'S TAIL WIND 
TRADERS, IT'S A DEMO APP THAT WAS 
CREATED BY MICROSOFT SO THOUGH US 
A BUNCH OF -- SHOW US A BUNCH OF 
DIFFERENT ZAMARRON 4 FEATURES, ANNOUNCED 
AT IGNITE LAST YEAR, I TOOK IT AND 
MADE IT WORK WITH A BUNCH OF DIFFERENT 
BACK ENDS JUST FOR THIS PARTICULAR 
TALK. AND IT'S A SHOPPING CART. 
YOU CAN GO OUT AND YOU CAN VIEW 
DIFFERENT PRODUCTS. SO WE'RE RIGHT 
HERE, YOU CAN VIEW THIS SPONGE, 
FOR EXAMPLE. AND IF YOU WANTED TO 
ADD THIS SAFETY CORD TO YOUR SHOPPING 
CART, YOU HIT ADD TO CART. AND IT 
SAYS ITEM ADDED. SO IT'S NOT REALLY 
VERY COMPLICATED. BUT IT SHOWS UP 
A COUPLE OF DIFFERENT MICROSERVICES 
RUNNING IN THE BACK GRGROUND. SEE 
HOW WE CAN AIRCRCHITECT THIS AND 
MAKE IT WORK BETTER FOR US. ALL 
RIGHT. SO THE COMPONENTS OF IT ARE 
A PRODUCT METADATA SERVICE. WE HAVE 
THAT PRODUCT SERVICE THAT I'M CALLING 
IT. WE HAVE THE SHOPPING CART SERVICE, 
THE ONE THAT ALLOWS USERS TO ADD 
THINGS TO THE CART TO THEN PURCHASE 
THEM AS WELL OR REMOVE THINGS FROM 
THE CART. AND PURCHASING IN THIS 
CASE REALLY JUST MEANS DELETING 
IT FROM THE DATABASE THAT SITS UP 
IN AZURE. AND THEN INVENTORY. THERE 
IS AN INVENTORY ONE, YOU MIGHT NOT 
HAVE SEEN IT, IT JUST SAYS HOW MANY 
OF THESE HAPPEN TO BE LEFT? AND 
IT GETS OBVIOUSLY DECKMENTED WHEN 
SOMEBODY PURCHASES IT. BUT WE SEE 
HOW WE CAN PUT THESE TOGETHER AND 
USE THEM? FIRST UP, I WANT TO TALK 
ABOUT, HOW WE CAN DO THIS IN WHAT 
I'M GOING TO BE CALLING TRADITIONAL 
WEB API. NO JS, USING A MONGO BACKEND. 
USING MONGO FOR THE SHOPPING CART. 
AND ASP. NET, WEB API, USING SQL 
SERVER AS BACK END FOR THE INVENTORY. 
SO LET'S JUST SEE THIS, THIS ONE 
IN ACTION, THEN. ALL RIGHT. AND 
SO HOW ARE WE DOING WITH THE FONT 
BACK THERE? WE'RE GOOD? WE CAN SEE? 
ALL RIGHT. EXCELLENT. ALL RIGHT. 
SO THE WEB OR THE MOBILE APPLICATION 
REALLY JUST ALL WE CAN BE CONCERNED 
ABOUT TODAY ARE THREE SERVICES. 
THE PRODUCT SERVICES, INVENTORY 
SERVICE, AND THE SHOPPING CART SERVICE. 
THE WHOLE UI REALLY DOESN'T MATTER 
FOR WHAT WE'RE CONCERNED WITH TODAY. 
AND THESE SERVICES, WHAT THEY DO, 
IS THEY CALL UP TO THERE, AND THEY 
ARE USING A THIRD PARTY OR NOT A 
THIRD PARTY, AN OPEN SOURCE PRODUCT 
CALLED REFIT TO COMMUNICATE UP THERE. 
SO THAT'S HOW WE'RE DOING THE COMMUNICATION. 
ALL RIGHT. SO WE'RE USING RIGHT 
NOW THE WEB APIS. AND SO TO GET 
THE PRODUCTS, ONE THING I WANTED 
TO CALL OUT IS TO GET AT THEM, I 
AM HANDLING USING MONKEY CASH, ANOTHER 
OPEN SOURCE PRODUCT, AND I'M MANUALLY 
AS YOU CAN SEE, GOING THROUGH AND 
SAYING ALL RIGHT, FIRST OFF, IF 
I HAVE INTERNET, AND IF IT EXISTS, 
POPPING EVERYTHING INTO THE CACHE. 
SO I'M HANDLING THE DATA MYSELF. 
SO IN ORDER TO BUILD UP THIS BACKEND, 
I'M DOING WORK. I'M DOING WORK ON 
THE FRONT END, AND NOT GETTING ANYTHING 
FOR FREE HERE. AND THEN FINALLY, 
I'M CALLING THE WEB API GET MY PRODUCTS 
BEFORE I GET THEM BACK. INVENTORY. 
OVER HERE, GET THE CURRENT INVENTORY, 
I WANT THE CURRENT INVENTORY AS 
IT IS, IF NOTHING 'TIS EXISTS OUT 
THERE, A WEB API EXCEPTION, I'M 
RETURNING 0, PROBABLY NOT THE STORMEST 
-- SMARTEST THING TO DO, BUT IT'S 
A DEMO. IT'S BUILT UP BY HAND. AND 
ON THE SHOPPING CART, SAME THING. 
USING MONKEY CASH TO BILL EVERYTHING 
UP AND THEN CALLING OUT, GETTING 
THE CART ITEMS FOR THE USER. PUTTING 
THEM IN THE BARREL, RETURNING THEM. 
WHEN I ADD THEM TO THE CART, AGAIN, 
I'M BUILDING IT UP. SO WHAT I'M 
SAYING WHEN I'M BUILDING THEM UP, 
I'M NOT GETTING ANYTHING FOR FREE, 
SO TO SPEAK, WITH MY DATA. WITH 
MY OFF LINE CACHING. I HAVE TO BUILD 
IT UP MYSELF. SO HERE, WHEN I ADD 
IT, INTENTIONAL BUG, IS IF I'M OFF 
LINE, IF I HAVE INTERNET, I'M GOING 
TO CALL UP TO THE API, POP IT IN. 
GREAT. IF I DON'T HAVE INTERNET, 
I'M ADDING IT TO THE CACHE SO I 
CAN SEE THAT MY APP. BUT I'M DOING 
NO CHECKING AFTERWARDS TO ACTUALLY 
ADD IT IN. SO IT'S A BUG AND IT'S 
AN EXAMPLE OF WORK I HAVE TO DO 
TO MAKE SURE THAT THINGS SYNCH UP. 
IT'S A PAIN WHEN I HAVE TO START 
DOING IT, I HAVE TO START THINKING 
THROUGH ALL OF THIS STUFF. AND THEN 
IN THE PURCHASE CART HERE, AGAIN, 
IF THERE'S INTERNET, I'M GOING TO 
GO OUT AND ACTUALLY PURCHASE EVERYTHING, 
BUT I HAVE TO ACTUALLY CHECK FOR 
AN EXCEPTION COMING BACK, AND IT'S 
A CONFLICT EXCEPTION IN THIS CASE, 
AND THEN REALLY SHOULDN'T HANDLE 
IT HERE, TO DO SOMETHING. IN THIS 
CASE, I WOULD POP IT UP TO THE USER. 
ALL RIGHT. SO NOW LOOKING AT THE 
BACK END. THE INVENTORY CONTROLLER 
HAPPENS TO BE WRITTEN WITH C SHARP. 
AND ENTITY FRAME WORK TO TALK TO 
SQL SERVER, WHICH IS KIND OF NEAT. 
I'M USING A FULL ENTITY FRAMEWORK, 
. NET CORE, BUT IT'S ROBUST, I CAN 
GET INVENTORIES BY SKUS, USING A 
FRAMEWORK. WHAT I'M TRYING TO GET 
ACROSS HERE, WEB APIS VERBOSE. AND 
WHAT I'M GOING TO DO HERE IS START 
IT UP SO WE CAN SEE HOW WE CAN DEBUG. 
SO AS THAT STARTS UP, SHOPPING CART. 
AGAIN, THE SHOPPING CART EXCEPTION. 
OCCURRED. SQL CLIENT EXCEPTION. 
A HAH. WE ARE NOT -- SQL SERVER 
-- GRANTED FIREWALL. GOOD. SHOPPING 
CART. ONE THING I WANT TO CALL OUT 
HERE WITH THE SHOPPING CART IS THAT 
DURING THE PURCHASE PART, I'M USING 
MONGO DB, JUST USING THE . NET CORE 
VERSION OF MONGO DB. AND HERE, JUST 
CHECKING OUT WITH ITEMS I HAVE IN 
THE DATABASE CURRENTLY. WHICH ITEMS 
I PASSED UP TO IT. AND JUST THINGS 
-- IF THEY MATCH. ESSENTIALLY. BY 
DOING A LITTLE WINK CHECKING OVER 
HERE. IF THEY DON'T MATCH, I'M HANDLING 
IT MYSELF. I'M HANDLING EVERYTHING 
MYSELF AND THAT'S WHAT I WANT TO 
GET ACROSS HERE. AND THEN FOR THE 
PRODUCT SERVICE. PRODUCT SERVICE 
IS WRITTEN IN NODE JS. JAVASCRIPT. 
I WOULDN'T KNOW JAVASCRIPT FROM 
TYPE SCRIPT. I HEARD A GIGGLE. I 
WOULDN'T KNOW JAVASCRIPT FROM TYPE 
SCRIPT, RIGHT? I DON'T KNOW IT, 
HOWEVER, I HAVE A TEAM OF DEVELOPERS 
THAT DO. SO WHAT I CAN HAVE THEM 
DO IS I CAN HAVE THEM PUT THIS UP 
INTO A CONTAINER FOR ME. AND THEN 
IN THIS CONTAINER, I HAPPEN TO HAVE 
IT IN AZURE CONTAINER REGISTRY. 
AND I CAN PUT IT IN DOCKER HUB AS 
EASILY, BUT I CAN TAKE THIS TALE 
WIND PRODUCT SERVICE AND DOWNLOAD 
THE LATEST TAG AND THEN DEBUG AGAINST 
THAT. SO RIGHT HERE, I'M SHOWING 
OUT THE VARIOUS DOCKER IMAGES THAT 
I CURRENTLY HAVE. AND THEN, I'M 
GOING TO USE THE AZURE CLI TO LOG 
INTO MY REGISTRY AND DOCKER PULL 
IT DOWN. SO DOCKER PULL. SO WHAT 
THAT'S GOING TO DO, IDEALLY, IF 
I CAN TALK TO IT, IS GO OUT AND 
GRAB IT. AND PULL EVERYTHING DOWN 
FOR ME. AND THEN EXTRACT IT AND 
INSTALL THE IMAGE. AND WE CAN SEE 
THAT RIGHT NOW, WE HAVE IT RIGHT 
HERE. AND SO THIS NEXT ONE I'M GOING 
TO ACTUALLY START IT UP, IT'S A 
DOCKER RUN. PASSING IN SOME ENVIRONMENT 
VARIABLES. AND SAYING ALL RIGHT 
I WANT IT TO RUN ON 48, 000. SO 
I'M GOING TO SAY CLEAR. ALL RIGHT. 
SO NOW, I HAVE IT UP AND RUNNING 
ON 8, 000. SO I'M GOING TO BE ABLE 
TO NOW NOT HAVE TO WORRY ABOUT IT. 
MY DOCKER CONTAINER IS UP AND RUNNING. 
MY JAVASCRIPT FOLKS HAVE TOLD ME 
IT'S GOOD. I DON'T NEED TO TEST 
IT. SO IT'S UP, IT'S CONTAINED, 
GREAT. THEN EVERYTHING I HAVE HERE 
IS JUST I'M RUNNING ON LOCAL HOST, 
LOCAL HOST 9, 000 FOR THE SHOPPING 
CART FOR INVENTORY, LOCAL HOST 5, 
000, AND THEN FOR DOCKER, OR FOR 
MY PRODUCT SERVICE, 8, 000. START 
IT UP. AND WE'RE GOING TO BUILD 
iOS, SO HOPEFULLY DONE THE TAKE 
AS LONG -- ANDROID. AND THEN SINCE 
I ALREADY HAD IT IN INSTALLED, WHEN 
I GO OUT AND TRY TO GRAB PRODUCTS, 
IT'S NOT GOING TO HIT THE DATABASE 
AT ALL. IF I SHOW OVER HERE ON THE 
DOCKER SIDE, I DON'T HAVE ANYTHING, 
IT WOULD LOG IF I WAS. BUT WHEN 
I GO OUT AND TRY TO GET THE INVENTORY, 
I CAN ACTUALLY SIT NOW, GO THROUGH 
AND DEBUG FROM IT. SO NOW I'M GOING 
TO SEE MY SQU'S GO THROUGH, SO IT'S 
A -- SKU'S GO THROUGH, SO IT'S ALLOWING 
ME TO DEBUG THROUGH VS CODE AND 
SEE IT ALL IN THERE, WHICH IS NICE. 
IF I GO THROUGH HERE AND ADD IT 
TO THE CART, ADDING THE ITEM, I 
THINK I KNOW WHY. BUT I CAN THEN 
RAKE INTO SHOPPING CART. AND THE 
REASON WHY IS THAT IT'S NOT STARTED. 
THAT'S WHAT I WAS GETTING MY -- 
FOR. BUT THAT'S THE POINT. I CAN 
ACTUALLY RUN THE VISUAL STUDIO CODE, 
RUNNING MY WEB APIS, DEBUG FROM 
VISUAL STUDIO ON THE MAC, SAME THING 
OVER IF I WAS USING WINDOWS. NOW, 
I COULD ACTUALLY, IF I WANTED TO, 
DEBUG INTO A DOCKER CONTAINER, WITH 
THE LATEST VS CODE EXTENSIONS AS 
WELL. IT'S IN PREVIEW ON THE INSIDER 
BUILDS, JUST RELEASED A COUPLE OF 
DAYS AGO, AND ON VISUAL STUDIO 2017, 
YOU'RE ABLE TO DO THAT FOR A WHILE. 
SO JUST BECAUSE IT IS A DOCKER CONTAINER 
DOESN'T MEAN YOU CAN'T DEBUG INTO 
IT. BUT THE IDEA HERE IS THAT YOU 
HAVE YOUR WEB DEVELOPMENT TEAM SAY, 
HEY, THIS IS GOOD, THIS IS SOLID, 
THEY PASS IT OVER TO YOU. AND YOU 
DON'T HAVE TO WORRY ABOUT IT, YOU 
STILL CAN DEBUG YOUR ZAMARRON APPLICATION 
UP AGAINST IT. AND ONE OTHER THING, 
WHEN YOU DO DEPLOY UP TO AZURE, 
TO BE ABLE TO SCALE IT OUT, IT'S 
GOING TO GO INTO A APP SERVICE PLAN. 
AND TO BE ABLE TO SCALE OUT, ITSELF 
PRETTY STRAIGHTFORWARD, YOU'RE GOING 
O BE ABLE TO SCALE UP OR SCALE OUT. 
AND YOU CAN SET UP, ENABLE AUTO 
SCALE, AND JUST PUMP UP THE INSTANCES 
FOR CHANGE WHICH PRICING TIER YOU'RE 
ON. AND YOU CAN GO TO SUPER EXPENSIVE 
WITH A TON OF ACUS IN MEMORY AND 
SUCH. SO IT'S PRETTY EASY TO GET 
MORE HORSEPOWER BEHIND YOUR APPLICATION 
TO HIT THE COMPUTE STUFF. SO TO 
JUDGE HOW WELL THE WEB APIS STACK 
UP AGAINST THE MOBILE NEEDS OF THINGS, 
THE API VERSIONING, I DIDN'T TOUCH 
ON THAT, BUT YOU ARE GOING TO HAVE 
TO ROLL YOUR OWN AGAIN. YOU'RE GOING 
TO HAVE TO COME UP WITH A WAY TO 
VERSION THINGS AND YOU'RE GOING 
TO HAVE TO HAUL THAT IN A UNIQUE 
WAY FROM YOUR APP AS WELL. OFF LINE 
WITH CONFLICT, WE TOOK A QUICK LOOK 
AT THAT, AGAIN, YOU'RE ROLLING YOUR 
OWN. PUSH NOTIFICATIONS. I DIDN'T 
TOUCH ON THAT, BUT I WILL BE WITH 
VS APP CENTER. YES. BUT WITH A LITTLE 
BIT OF WORK, WE HAVE AZURE NOTIFICATION 
HUBS. NOTIFICATION HUBS PROVIDES 
AN SDK, WHICH MAKES IT RELATIVELY 
EASY ON THE SERVER TO CALL OUT AND 
DO PUSH NOTIFICATIONS, APPLE APNS, 
HOWEVER, THERE IS GOING TO BE SOME 
WORK SETTING IT UP INITIALLY. SO 
ONCE YOU GET THAT DONE, IT'S RELATIVELY 
OKAY. BUT YOU HAVE TO DID A LITTLE 
BIT OF -- DO A LITTLE BIT OF WORK. 
AND DEBUGGING IS NOT BAD ONCE YOU 
GET IT ALL SET UP AND RUNNING. TO 
HANDLE THE UNIQUE NEEDS, YOU'RE 
DOING A LOT OF ROLLING YOUR OWN. 
SO BACK IN TABLE TAKES, SCALEABLE, 
YEAH. AUTHENTICATION, I DIDN'T TOUCH 
ON THAT, I HAVE A TON AND TON OF 
CONTENT AROUND AUTHENTICATION. CODE 
MAIL MATT. COM. TWEET ME, I'LL SEND 
IT TO YOU. SAME THING WITH PUSH 
NOTIFICATIONS, YOU CAN HOOK IT UP 
WITH AZURE B TO C. MICROSOFT AUTHENTICATION 
LIBRARY, YOU CAN HOOK IT UP, BUT 
YOU'RE DOING A LITTLE BIT OF WORK 
TO GET IT ALL HOOKED UP. DATA AND 
FILE. IT'S NOT TOO BAD TO ACTUALLY 
TALK -- I WAS TALKING TO COSMO, 
SQL SERVER, IT'S NOT BAD, BUT YOU 
ARE ROLLING YOUR OWN. AND PUSH NOTIFICATIONS, 
YES, WITH WORK, THE TABLE STAKES. 
AND THEN THE THINGS TO KEEP IN MIND 
WITH THE WEB APIS. MORE THAN MOBILE, 
YES. JUST HAVE TO THINK OF IT THAT 
WAY. BUT THESE ARE JUST WEB APIS, 
THESE ARE REST SERVICES. THESE ON 
BOARDING. PRODUCT -- PRODUCTIVITY, 
YES. YOUR PEOPLE, THEY KNOW THE 
FRAMEWORKS AND THEY'RE BUSINESS 
SPECIALISTS IN THE AREA, AWAY YOU 
GO. COST? COULD BE BETTER. AT LEAST 
FOR THE WAY I DEMONSTRATED IT, I 
HAD AZURE CONTAINER REGISTRIES RUNS, 
APPS RUNNING, IF WE DID PUSH, WE 
HAVE NOTIFICATION HUBS RUNNING, 
IT ADDS UP, SO IT COULD BE BETTER, 
AND THESE THINGS ARE ALWAYS UP AND 
RUNNING. THE INTANGIBLES. HERE'S 
THE THINGS THAT ARE KIND OF HELPING 
OUT AND KIND OF PUSHING IT TO MAKE 
IT REALLY GOOD. YOU GET NICE, FINE 
CONTROL OVER DATA CACHING AND MEMORY 
MANAGEMENT. SO WHAT'S NEAT HERE, 
IF YOU'RE USING SQL SERVER ON THE 
BACK END, BECAUSE YOU ARE, YOU CAN 
USE IN ANY FRAMEWORK OR USE THE 
SQL DATA. SQL CLIENT, YOU CAN FINE 
TUNE YOUR CONNECTION STREAM. AND 
YOU CAN HOLD UP A NICE CONNECTION 
POOL OPEN. SO YOU DON'T RUN OUT 
OF CONNECTIONS TO YOUR SQL SERVER, 
SO YOU CAN REALLY FINE TUNE YOUR 
CACHING AND MEMORY MANAGEMENT. YOU 
COULD USE NATIVE LIBRARIES AND FULL 
FRAMEWORKS; IF YOU NEEDED A C LIBRARY 
IN THERE OR SOMETHING LIKE THAT, 
YOU COULD GO THAT WAY. ALWAYS RUNNING. 
IF YOU CLUZ TO DO IT, YOU -- CHOOSE 
TO DO IT, YOU DON'T HAVE TO WORRY 
ABOUT COLD STARTUP. LOTS OF LONG 
WAJS AVAILABLE. WHATEVER -- LANGUAGES 
AVAILABLE. WHATEVER YOU WANT TO 
WRITE IT. PYTHON. YOU CAN GET BARE 
METAL PERFORMANCE. THE YOU'RE DOING 
A BUNCH OF MACHINE LEARNING, SPIN 
IT OUT TO DO MACHINE LEARNING OR 
SOMETHING, THIS IS THE WAY TO GO, 
BECAUSE YOU CAN HAVE CONTAINERS 
DOING A TON OF WORK RIGHT AT THE 
BARE METAL. AND IT'S IN PROCESS, 
AND WHAT I MEAN BY IN PROCESS, ONCE 
THE REQUEST COMES IN, YOU HAVE EVERYTHING 
ELSE LOADED UP. IT'S NOT EVEN DRIVEN 
PER SE. -- EVENT DRIVEN, PER SE. 
AND WE'LL TALK ABOUT AZURE FUNCTIONS 
NEXT. SO TO LEARN MORE, I HAVE A 
COUPLE SHORT LINKS RIGHT HERE. ONE, 
THE FIRST ONE, BRINGS YOU TO MICROSOFT 
LEARN. AND IF YOU HAVEN'T HEARD 
ABOUT MICROSOFT LEARN, IT'S ACTUALLY 
SUPER, SUPER COOL, THAT YOU SHOULD 
CHECK OUT. WHAT IT DOES IS THAT 
YOU ARE ABLE TO SPIN UP YOUR OWN 
VERSION OF AZURE. IT'S -- WELL, 
I SHOULD MENTION IT'S FREE, AND 
YOU GET A STEP BY STEP TUTORIAL 
AS YOU RUN THROUGH. SO HERE YOU, 
YOU CAN ACTUALLY CREATE A CONTAINER, 
YOU CAN APPLY AN APP SERVICE TO 
IT AND YOU RUN THROUGH TUTORIAL 
AS YOUR COMMAND LINE INTERFACE AS 
YOU GO. SO IT'S REALLY COOL TO CHECK 
OUT. THE SECOND ONE IS A DOCUMENTATION, 
TO SEE THE APP SERVICE CONTAINERS. 
ALL RIGHT. AZURE FUNCTIONS. HERE, 
EVERYTHING IS GOING TO BE IN C SHARP. 
MY LANGUAGE. MY WHEEL HOUSE. THIS 
IS WHAT WE'RE GOING TO BE DEALING 
WITH. STILL WITH MONGO DB BUT WITH 
SQL SERVER FOR THE INVENTORY. SO 
LET'S TAKE A PEAK AT HIT, HOW IT'S 
GOING TO WORK. THE FRONT END. IS 
GOING TO BE EXACTLY THE SAME. WHICH 
IS VERY INTERESTING. BECAUSE WHEN 
I WAS WRITING THIS TALK, I WAS DEBATING 
WITH JAMES AND I WAS SAYING, I COULDN'T 
UNDERSTAND WHY ANYBODY WOULD EVER 
WANT TO WRITE A FUNCTION OR WRITE 
A BACKEND NOT USING FUNCTIONS. HE 
WAS PURELY ON THE OTHER SIDE. HE 
KEPT ON SAYING, I WOULD JUST WRITE 
IT WITH WEB APIS ALL THE TIME, EVERY 
SINGLE TIME. SO WE HAD TO DISAGREE 
ON THAT. AND THE REASON WHY I WOULD 
ALWAYS GO WITH FUNCTIONS, WE'LL 
TALK ABOUT THAT IN A SECOND, AND 
I'M ACTUALLY NOT ON THAT CAMP ANYMORE 
FOR SEVERAL REASONS THAT WE TALKED 
ABOUT THAT THEY'RE ALWAYS IN PROCESS 
AND YOU CAN ACTUALLY CONTAINER WAY 
IS COOL. HOWEVER, YOU'RE FRONT END 
STAYS THE SAME. YOU ARE GOING TO 
BE ROLLING YOUR OWN DATA. HANDLING, 
YOU'RE GOING TO HAVE TO HANDLE YOUR 
OWN OFF LINE CONFLICTS F YOU'RE 
DOING PUSH NOTIFICATIONS, DO IT 
YOURSELF, IF YOU'RE DOING NOTIFICATION, 
YOU HAVE TO HANDLE IT YOURSELF AND 
SO ON.
WHAT CHANGES, THOUGH, IS 
IN THE BACK END. ALL RIGHT. SO WHAT 
I HAD HERE IS THIS SHOPPING CART 
FUNCTIONS. PRODUCTS AND INVENTORY 
FUNCTION. AND SO OUR GET ALL PRODUCT, 
THERE'S NO CEREMONY HERE IN SETTING 
IT UP. AT ALL. IT'S JUST THIS. SO 
BEFORE THERE WAS OPENING UP MACH 
MONGO AND TAKING CARE OF THE MONGO 
CONNECTION AND EVERYTHING, HERE'S 
PRODUCT COLLECTION AS QUERYABLE, 
TO LIST A SYNCH. AND THE PRODUCT 
CONNECTION, I'M GOING THROUGH HERE 
AND TELLING IT WHICH PRODUCT CONNECTION 
I WANT. OR WHICH -- WHAT COLLECTION 
I WANT HERE. BUT THAT'S IT. AND 
IT'S SAYING IT'S AN HTTP TRADER, 
I'M NOT ACTUALLY STARTING UP A NODE 
SERVER IN THE BACKEND AT ALL. I'M 
LETTING FUNCTIONS TAKE CARE OF THAT 
FOR ME. IT'S EVEN BETTER IN INVENTORY. 
INVENTORY, I CAN STILL CAN HANDLE 
A SQL SERVER ON THE BACKEND, BUT 
WHERE I MIGHT RUN INTO TROUBLE IS 
ON FUNCTIONS BECAUSE IT DOES SCALE 
OUT REALLY GREAT. IS I MIGHT START 
RUNNING OUT OF CONCURRENT CONNECTIONS 
TO MYSQL SERVER. POSSIBLY. SO THAT'S 
SOMETHING THAT I HAVE TO WORRY ABOUT. 
BUT I CAN WORK AROUND IT BY DOING 
SOMETHING LIKE THIS. WHERE MY RUN 
INVENTORY, I WRITE TO A CUE, AN 
AZURE STORAGE CUE, THIS IS NEAT 
BECAUSE I'M DOING A BINDING AND 
THIS BINDING, ALL THAT TAKES TO 
ACTUALLY WRITE TO IT IS DOING RIGHT 
HERE, I SYNCH COLLECTOR. AND THEN 
THIS. SO IT'S JUST AN ATTRIBUTE 
TO AN OBJECT AND THAT'S ALL I NEED 
TO TALK TO ANOTHER AZURE SURFACE. 
RIGHT, SO THIS IS WHERE FUNCTIONS 
REALLY STARTS TO SHINE. AND IT'S 
EVENT-DRIVEN. SO RUN DECK RIMENT 
ENVENN T-- INVENTORY. WHAT I WANT 
TO DO WITH IT, HERE IT IS, THIS 
IS MY INCOMING RIGHT HERE, IN THE 
ROUTE, PUTS IT IN THE CUE, RETURNS 
IT. YOU CAN IMAGINE THE HANDLE INVENTORY 
CUE HERE. WE MIGHT BE DOING SOMETHING 
ELSE, MIGHT BE GOING OUT AND TALKING 
TO SOME MANAGEMENT SERVICE WHERE 
WE NEED TO ACTUALLY ORDER SOMETHING 
ELSE IF IT GETS DOWN TO A CERTAIN 
LEVEL, I DON'T WANT MY MOBILE CLIENT 
TO WAIT FOR ALL OF THAT TO HAPPEN. 
PURCHASING IS THE SAME THING, I 
HAVE TO GO OUT AND CHECK. SO FUNCTIONS 
REALLY IS THE SAME AS WEB API, IT'S 
EVENT-DRIVEN. AND IT'S LESS CEREMONY 
IN SETTING IT UP. SO IT MAKES SENSE, 
THOUGH, BECAUSE FUNCTIONS ITSELF 
IS RUNNING ON A APP SERVICE AS A 
BACK END. AS WELL. SO IT REALLY 
IS KIND OF SORT OF LIKE A WEB API. 
BUT YOU'RE NOT WORRIED ABOUT SETTING 
UP ALL OF THE INFRASTRUCTURE, THAT'S 
TAKEN CARE OF BEHIND THE SCENES 
AND YOU'RE WORRIED ABOUT YOUR APP 
LOGIC, WRITING EXACTLY WHAT YOU 
KNOW. AND YOU CAN WRITE THEM IN 
A BUNCH OF DIFFERENT LANGUAGES OR 
JAVASCRIPT AND JAVA. AND C SHARP. 
AND SO ON. IT'S REALLY -- SO IT 
GIVES YOU A LOT. YOU CAN WRITE FUNCTIONS 
IN A CONTAINER AS WELL. SO LET'S 
JUST TAKE A PEAK AT THIS. WHEN WE 
WANT TO DEBUG, I'LL CHANGE IT ALL 
OVER TO RUN FUNCTIONS LOCALLY. AND 
I'LL START THIS UP. ALL RIGHT. SO 
REBUILDING AN iOS, IT DOESN'T TAKE 
FOREVER LIKE AN ANDROID WOULD. GREAT. 
PRODUCTS AGAIN ARE CACHED LOCALLY, 
SO I DON'T HAVE TO WORRY ABOUT THAT, 
I DIDN'T CHANGE ANY OF MY LOCAL 
CODE. BUT AS SOON AS I TRY TO PURCHASE 
AN ITEM, AGAIN, NOW, I'M HITTING 
-- NOW I'M INTO MY RUN PURCHASE 
ITEMS. I WANT TO RUN THROUGH THAT. 
AND RIGHT HERE, I HAVE HIT THE ROUTE 
OF THE RUN PURCHASE ITEMS IN THE 
FUNCTION. AND ONCE IT WRITE, IT 
HAD CUE, WHICH I MIGHT HAVE NOT 
SET A BREAK POINT FOR. BUT WE'LL 
KEEP ON CHUGGING HERE. D ALL RIGHT. 
SO WHAT FUNCTIONS GIVES YOU IS API 
VERSIONING AGAIN, YOU'RE ROLLING 
YOUR OWN. AND YOU CAN ACTUALLY SET 
THE ROUTES. RIGHT HERE, IT'S FAIRLY 
EASY TO SET UP YOUR ROUTES. BUT 
YOU'RE ROLLING IT YOURSELF. OFF 
LINE WITH CONFLICT, AGAIN, YOU'RE 
ROLLING YOUR OWN. PUSH NOTIFICATIONS, 
VERSION ONE WITH FUNCTIONS HAD A 
BUILT IN LIKE THE STORAGE CUES, 
VERSION TWO WITH FUNCTION, YOU'RE 
GOING TO HAVE TO BILL IT YOURSELF. 
IT'S GOING TO BE THE SAME THING 
AS YOU WERE DOING WITH THE WEB API. 
DEBUGGING, NOT TOO BAD, AGAIN, YOU 
CAN RUN IT LOCALLY, SEPARATE POINTS 
AND DEBUG THAT WAY. THE TABLE STAKES. 
SCALEABLE, FUNCTIONS ARE WONDERFUL 
FOR SCALING, AND THEY SCALE DOWN 
AS ZERO WHEN YOU'RE NOT USING THEM. 
AUTHENTICATION. SAME THING WITH 
WEB API. DATA AND FILE, YES. A LITTLE 
MORE WORK TO IT, TO HOOK UP WITH 
EVERYTHING. AND THEN PUSH NOTIFICATIONS, 
AGAIN, YES, WITH WORK. SO, THEN, 
SOME THINGS TO KEEP IN MIND, MORE 
THAN MOBILE. YES. EASY ON BOARDING, 
YES, BECAUSE THEY SUPPORT ALL DIFFERENT 
LANGUAGES AND IT'S EASIER ON BOARDING 
BECAUSE OF THE BINDINGS AND THE 
TRIGGERS THAT FUNCTIONS SUPPORTS 
TO OTHER LANGUAGES AND THE COST 
IS GOOD BECAUSE IT SCALES UP AND 
SCALES DOWN FOR YOU. SO THE INTANGIBLES 
HERE, EASY AZURE. INTEGRATIONS. 
GREAT FOR MORE THAN JUST HTTP. AND 
SO A LOT OF THE FUNCTIONS ARE RUNNING 
NOT BASED ON HTTP TRIGGERS, YOU 
CAN BE BASED ON COSMOS R A LOT OF 
COOL THINGS RUNNING THAT YOU DON'T 
HAVE TO BUILD YOUR FUNCTIONS OFF 
OF AND THEY'RE GREAT AT SCALING. 
AND THERE'S DURABLE FUNCTIONS. SO 
BY DEFAULT, FUNCTIONS DON'T HAVE 
STATE. DURABLE FUNCTIONS DO. SO 
THEY GIVE YOU A WAY TO ORCHESTRATE 
THINGS, KIND OF SORT OF KIND OF 
LIKE LOGIC APPS, BUT THEY ARE ABLE 
TO INFLATE STATE AS YOU GO THROUGH. 
HELP WITH LONG-RUNNING PROCESSES. 
SO SAME THING AS BEFORE. LEARN MODULE 
AT TOP, DOCUMENTATION AT THE BOTTOM 
FOR FUNCTIONS. ALL RIGHT. APP CENTER. 
OR MBaaS, MOBILE BACK END AS A SERVICE. 
COOL THING ABOUT MOBILE BACK END 
AS A SERVICE IS IT GIVES YOU EVERYTHING. 
YOU'RE NOT REALLY ROLLING YOURSELVES 
OR ANYTHING, YOU GET IT ALL AND 
YOU'RE MAKING TWEAKS TO IT, ESSENTIALLY. 
SO DEMO APP CENTER, RIGHT? NOT REALLY, 
IT'S IN PREVIEW RIGHT NOW, I DIDN'T 
GET THE BITS UNTIL TOO LATE. SO 
HOW ABOUT SOME SLIDES? FOR AUTHENTICATION, 
IF YOU'RE FAMILIAR WITH APP CENTER 
AT ALL, YOU NOTICED THAT THE DATA 
THERE AT THE BOTTOM ARE NEW. AND 
SO WHAT YOU CAN DO FOR OTH, YOU 
CAN HOOK IN TO AZURE B TO C, AND 
SO WHAT THEY HAVE DONE IS THEY HAVE 
MADE A SEAMLESS TRANSITION TO AZURE 
B TO C AND WRAPPED THAT TO MAKE 
A FRIENDLIER API TO USE. DATA THE 
SAME THING, DATA SUPPORTED BY COSMOS, 
SUPPORTS OFF LINE SYNCH AS WELL. 
CONFLICT RESOLUTION EVENTUALLY. 
AND SO THIS ALSO HOOKS UP THROUGH 
THAT. AND WHAT I'M GOING TO SHOW 
OFF, THOUGH, IS THAT THEY'VE MADE 
THEIR APP CENTER DOES A GREAT JOB 
WITH THEIR SDKS, THEY DO A WONDERFUL 
JOB WITH THEIR SDKS. AND SO GOOD 
THAT I'M GOING TO SHOW OFF THEIR 
PUSH NOTIFICATIONS. SO PUSH NOTIFICATIONS 
ARE KIND OF TOUGH TO IMPLEMENT. 
AND BY THAT, LET'S SEE, WE'RE GOING 
TO START UP ANDROID. SO TO GET PUSH 
NOTIFICATIONS TO WORKING, GENERALLY 
WHAT YOU HAVE TO DO IS TALK TO GOOGLE, 
FIRE BASE, TALK TO APPLE, HANDLE 
A LOT OF THINGS WITHIN YOUR PLATFORM 
PROJECTS TO HOOK EVERYTHING UP. 
SO THE APP CENTER PUSH NOTIFICATIONS, 
WHAT YOU HAVE TO DO IS JUST DOWNLOAD 
GOOGLE, THIS GOOGLE SERVICES, JSON 
FROM FIRE BASE. CHANGE A LITTLE 
BIT INTO THE ASSEMBLY MANIFEST. 
ESSENTIALLY, JUST ADDING RIGHT HERE. 
AND THIS IS ALL STUFF THAT APP CENTER 
GIVES YOU. AND THEN THE SDK, WHAT 
IT LOOKS LIKE, THE HANDLE, PUSH 
NOTIFICATION IS THIS. APP CENTER 
START. YOU'RE JUST PASSING IN TYPE 
OF PUSH. AND DOWN, WAY AT THE BOTTOM, 
JUST PUSH NOTIFICATION RECEIVE. 
SO THEY WRAP EVERYTHING VERY NICELY 
FOR YOU. AND SO LET'S PUSH THIS 
UP. AND SO HERE, GO INTO PUSH, MAKE 
SURE WE START UP GETTING A BUILD 
HERE. ALL RIGHT. I'M NOT GOING TO 
TRY TO DEBUG IT. HOWEVER, IT WOULD 
WORK GREAT, HAD THE DEBUGGING WORKED. 
SO WHAT I'M TRYING TO GET ACROSS 
HERE IS THAT A MOBILE BACKEND AS 
A SERVICE WRAPS THINGS UP REALLY 
NICELY SO YOU DO LESS WORK. SO SOME 
APP CENTER, HOW UNIQUE MOBILE NEEDS, 
YOU'RE STILL GOING TO HAVE TO ROLE 
YOUR OWN API VERSION, API VERSIONING 
IS SOMETHING YOU'RE GOING TO HAVE 
TO DO. YOU'RE GOING TO HAVE TO FIGURE 
OUT HOW YOU WANT TO HANDLE IT AND 
BY THAT, I MEAN, WHICH ONE WINS. 
WHETHER IT'S THE SERVER ONE OR THE 
ONE THAT'S ON THE CLIENT OR IF YOU 
WANT TO ASK USER. BUT IT'S GOING 
TO AUTOMATICALLY TELL YOU THAT -- 
YOU'RE NOT GOING TO HAVE TO BUILD 
THAT IN. PUSH NOTIFICATIONS, IT'S 
THERE. DEBUGGING, I'M NOT SURE HOW 
TOUGH OR EASY THAT'S GOING TO BE 
YET, I HAVEN'T TRIED IT. THE TABLE 
STAKES, SCALEABLE. I DON'T KNOW 
YET. I HAVEN'T TRIED IT. AUTHENTICATION. 
GOING TO BE THERE. IT'S BUILT IN. 
DATA IN FILE. IT'S THERE. DATA IS 
GOING TO BE THERE, FILE IS COMING 
UP. AND PUSH NOTIFICATION, IT IS 
THERE. SOME THINGS TO KEEP IN MIND. 
MORE THAN MOBILE, RIGHT NOW, IT'S 
JUST MOBILE, EVENTUALLY, IT WILL 
SUPPORT MORE. EASY ON BOARDING. 
NOT SURE YET. HAVEN'T USED IT. AND 
COST, I WILL WORK ON IT, WE'RE TRYING 
TO PUSH THEM DOWN ON COST. MAKE 
IT A NICE REALLY LOW-COST, IF NOT 
FREE ON BOARDING EXPERIENCE, SO 
PEOPLE CAN USE IT AND GET GOING 
WITH IT. SO SOME INTANGIBLES, IS 
THAT YOU GET EVERYTHING TOGETHER. 
YOU GET THE ABILITY TO HAVE APP 
CENTER TELL YOU, HEY, I FOUND A 
CONFLICT. OR HEY, I'M GOING TO HANDLE 
THE PUSH NOTIFICATIONS, I'M GOING 
TO TALK TO FIRE BASE FOR YOU, I'M 
GOING TO TALK TO APNS FOR YOU AND 
PROVIDE YOU WITH A NICE SDK TO HANDLE 
EVERYTHING. HOWEVER, BECAUSE IT'S 
HANDLING EVERYTHING, YOU'RE GOING 
TO BE PLAYING INSIDE OF ITS BOX, 
SO YOU MIGHT OUT GROW IT AS YOU 
COME UP WITH SOME WEIRD REQUIREMENTS. 
HOWEVER, IT IS BEING DESIGNED ON 
GITHUB. SO YOU CAN GO OUT AND RAISE 
ISSUES AS THEY'RE MAKING IT AND 
SAY, HEY, THIS ISN'T WORKING FOR 
ME, LET'S DO IT THIS WAY AND THEY'RE 
VERY RESPONSIVE. ALL RIGHT. SO A 
COUPLE OF OTHER THINGS THAT SIT 
OUTSIDE OF ANY ARCHITECTURE THAT 
I WANT TO TALK ABOUT THAT APPLY 
TO EVERYTHING. ONE BLOB STORAGE, 
DELIVERY NETWORK, AND AZURE FRONT 
DOOR. LET'S TAKE A PEEK AT THESE. 
SO ALL OF THE IMAGES THAT I WAS 
PULLING DOWN HERE, HAVE COME FROM 
COSMOS OR THE URL HAS COME FROM 
COSMOS DB ITSELF. RIGHT HERE. THIS 
URL. AND SO I'M STORING EVERYTHING 
IN BLOB STORAGE AND YOU REALLY, 
IF YOU HAVE STATIC DATA, STATIC 
BINARY DATA, YOU REALLY SHOULD BE 
PUTTING THAT UP INTO SOME SORT OF 
BLOB STORAGE. AND MAINLY BECAUSE 
IT'S CHEAP FOR A LOT OF IT. AND 
WHAT'S NICE ABOUT THAT, THEN, IS 
THAT YOU CAN POP IT IN HERE AND 
I CAN GO THROUGH AND ACTUALLY VIEW 
IT, LIKE 1, 000 AND 2051 AND SEE 
MY IMAGE OF MY POWER CORD. BUT THE 
REALLY COOL THING IS THAT I CAN 
POP A CDN ON TOP OF IT REALLY EASILY, 
JUST BY GOING AND SCROLLING DOWN 
TO AZURE CDN IN FRONT OF IT, IT 
COULD CREATE A NEW END POINT, I 
ALREADY HAVE ONE HERE, CALLED PI 
MA CDN AZURE. NET. WHAT THE CDS 
IS GOING TO PUT IS PUT ALL OF MY 
IMAGES ON THE EDGE OF AZURE. SO 
NORMALLY, IF I WOULD HAVE PUT THAT 
BLOBS URL, IT WOULD HAVE TO GO THROUGH 
SEVERAL LAYERS OF THE AZURE NETWORK 
TO FIND IT. BY PUTTING IT ON THE 
CDN, IT'S GOING PUT IT RIGHT ON 
THE EDGE, IT'S GOING TO CACHE IT, 
SO THAT WAY A REQUEST COMES IN AND 
IT'S NOT GOING TO HAVE TO NEGOTIATE 
THROUGH A COUPLE OF SERVER LAYERS, 
IT'S GOING TO BE RIGHT AT THE EDGE 
OF THE NETWORK AND BE ABLE TO PUT 
IT THROUGH. SO I CAN GET THIS END 
POINT NAME. AND IT'S JUST GOING 
TO BE THEN MY CONTAINER NAME. FOLDER. 
AND THEN IT'S JUST 2051. AND IT 
COMES UP THAT WAY. IT'S RIGHT ON 
THE EDGE. AND IT'S REALLY EASY TO 
SET UP BY GOING THROUGH THE BLOBS, 
GIVE ME A CDN, PUT IT ON THERE AND 
SEVERAL DIFFERENT FORMATS THAT WE 
CAN DO VERIZON, THERE'S MICROSOFT 
HAS ONE AS WELL. AND IT'S REALLY 
SOMETHING THAT YOU SHOULD THINK 
ABOUT FOR WHEN YOU'RE DOING ANY 
STATIC DATA POSTING. ANOTHER ONE 
THAT I WANTED TO POINT OUT IS WHAT'S 
CALLED AZURE FRONT DOOR. SO A LOT 
OF THE TIMES IS WHEN YOU'RE SERVING 
A GLOBAL APPLICATION, IS THAT ALL 
OF MY SERVICES HERE WERE IN WEST 
U. S. . OR WEST U. S. 2 OR WEST 
U. S.. HOWEVER, I'M GOING TO BRING 
UP COSMOS BECAUSE I HAD SOME MAP 
TO IT. OBVIOUSLY, WE HAVE PEOPLE 
OVER HERE IN WASHINGTON, BUT I MIGHT 
HAVE PEOPLE ON THE WEST COAST OR 
DOWN IN -- ON THE PACIFIC IN AUSTRALIA 
YOU MIGHT WANT TO BE USING THE APPLICATION. 
AND SO IF ANYBODY OVER HERE WOULD 
ISSUE AN APP, A REQUEST, EVEN THOUGH 
I MIGHT HAVE COSMOS REPLICATED HERE, 
THEY'RE GOING TO HAVE TO GO OVER 
TO WEST U. S. TO GET -- TO SERVE 
THE DATA, TO SERVE THE REQUEST AND 
THAT'S WHERE IT'S GOING TO GRAB 
THE DATA FROM. MY DATA REPLICATED 
HERE IS NOT DOING ME ANY GOOD. WHAT 
I CAN DO IS CREATE THIS AZURE FRONT 
DOOR AND FRONT DOOR GIVES ME A DESIGNER, 
THEN, THAT I'M GOING TO SAY, FD. 
NET, ALL OF MY REQUESTS ARE GOING 
TO BE SENT THROUGH. AND NOW I SET 
UP SOME ROUTING RULES TO IT. SO 
I'M GOING TO SAY ANYTHING THAT'S 
API INVENTORY OR API INVENTORY WILDCARD, 
SEND IT TO THIS BACKEND CALLED INVENTORY 
AND JUST PASS ON, FORWARD ON THE 
ROUTE TO IT. AND SO THIS INVENTORY 
RIGHT HERE BACKEND, I HAVE SEVERAL 
DIFFERENT BACKENDS SET UP HERE. 
I HAVE ONE THAT HAPPENS TO BE ALREADY 
IN AUSTRALIA. I HAVE ONE THAT'S 
HOSTED IN THE EAST U. S. AND THEN 
ONE OVER HERE THAT'S ACTUALLY HOSTED 
IN THE WEST U. S. . SO WHAT FRONT 
DOOR, THEN, DOES IS THAT IT IS PINGING, 
CHECKING THE HEALTH OF EVERYTHING. 
AND SO WHEN A REQUEST COMES IN,. 
NET -- AZURE FD. NET IS WORLDWIDE, 
AND SO BASED ON WHICHEVER AZURE 
FRONT DOOR THAT IT HITS, WHETHER 
I'M MAKING THE REQUEST IN AUSTRALIA 
OR EASTERN U. S. , IT'S GOING TO 
SEE, ALL RIGHT, MY BACKEND POOL, 
WHICH IS CLOSEST TO ME, IS THE HEALTHYIEST, 
IT'S GOING TO SERVE IT FROM THERE. 
SO IT'S JUST A REALLY COOL WAY TO 
SET UP A -- ESSENTIALLY AN ORCHESTRATION 
OF YOUR WEB APIS, YOU CAN PUT AZURE 
FUNCTIONS IN HERE, YOUR ON-PREM 
DATA SOURCES ON HERE AS WELL. TO 
HAVE IT UP, TO MAKE A REALLY A GLOBAL 
MICROSERVICE ARCHITECTURE THROUGH 
HERE. IT ALSO FAILS OVER VERY WELL, 
SO IF I HAD ONE OF MY SERVICES HERE, 
IF I WOULD ACTUALLY DISABLE IT, 
IT WOULD FAIL OVER AFTER A COUPLE 
OF SECONDS AND TAKE, STOP SERVING 
ANYTHING FROM EAST U. S. AT ALL, 
SO IT AUTOMATICALLY FAILS OR WITHOUT 
ME HAVING TO DO ANY WORK AT ALL 
WITH IT. AND THERE'S A COUPLE OF 
DIFFERENT HEALTH CHECKS THAT I CAN 
DO. SO RIGHT NOW, I'M JUST SERVING 
EVERYTHING GEOGRAPHICALLY, THE LOWEST 
LATENCY. AND THEN DOCUMENTATION 
FOR THE STORAGE FRONT DOOR, SO FRONT 
DOOR IS ACTUALLY REALLY COOL. ALL 
RIGHT. SO WHAT HAVE WE GONE THROUGH? 
WELL, WE'VE GONE THROUGH THAT WE'RE 
ABLE TO ESSENTIALLY CREATE A MESS 
WITH OUR BACK END ARCHITECTURE, 
BUT THERE'S -- WE CAN MAKE SENSE 
OF IT. AND WE DON'T NESCESSARILY 
NEED TO MAKE SENSE OF IT BY PROGRAMMING 
AN ASP. NET, WE CAN HAVE A MULTITUDE 
OF DIFFERENT MICROSERVICES WORKING 
TOGETHER TO HAVE OUR BACKEND HIT 
IT. AND WE CAN MIX AND MATCH BY 
GOING THESE WAYS, WE CAN HAVE A 
SERVERLESS ARCHITECTURE WORKING 
WITH SOMETHING, A WEB API THAT IS 
MANAGING OUR SQL SERVER CONNECTIONS, 
ARE WE GOING TO HAVE THAT WEB API 
RUNNING IN A DOCKER CONTAINER THAT 
IS BUILT OFF OF GPU? OR SOMETHING 
THAT REALLY NEEDS PERFORMANCE? OR 
IF WE NEED TO HAVE OUR MOBILE BACKEND 
HANDLE PUSH NOTIFICATIONS, WE'RE 
NOT REALLY WORRIED ABOUT CUSTOMIZING 
IT, WE CAN DO IT THAT WAY. SO REALLY, 
IT'S UP TO US TO ANALYZE THE REQUIREMENTS 
AND KNOW WHERE EACH OF THESE SHINE. 
AND REALLY, CONTEXT IS EVERYTHING, 
WHERE WE HAVE OUR UNIQUE NEEDS OF 
OUR APP, VERSIONING, WHICH WE'RE 
ALWAYS GOING TO HAVE TO ROLL OUR 
OWN, UNFORTUNATELY, BUT OFF LINE 
DATA SYNCH OR PUSH NOTIFICATION. 
AND THE TABLE STAKES, SCALABILITY, 
PUSH NOTIFICATIONS, DATA, AND ALSO 
THE MISCELLANEOUS, SUCH AS COSTS 
AND PRODUCTIVITY AS WELL. SO EVERYTHING 
I HAVE TALKED ABOUT HERE IS THAT 
THIS URL, INCLUDING DATA AND ANY 
DEPLOY SCRIPT TO PUSH EVERYTHING 
UP. RUNNING EVERYTHING OFF OF A 
CONTAINER AND AZURE AS WELL. I'LL 
WARN YOU, IF YOU PUSH IT UP INTO 
AZURE, RUNNING EVERYTHING OFF OF 
CONTAINERS, SHUT IT OFF AFTER YOU'RE 
DONE PLAYING WITH IT. AND WITH THAT, 
I THANK YOU VERY MUCH. AND PLEASE, 
FEEL FREE TO REACH OUT TO ME ANY 
TIME, IF YOU HAVE ANY QUESTIONS 
