• Sun. Feb 28th, 2021

TEST. TEST. TEST. TEST. >>> HELLO AND WELCOME TO DAY TWO OF .NETCOM. YOU GOT ME. >> HELLO. I'M SUPER EXCITED TO BE HERE. >> WE HAVE TONS OF EXCITING THINGS. A TON OF SESSIONS. CAN YOU GIVE US A TASTE? >> LET ME GET OUT MY LIST. WE HAVE FUTURE OF BLAZER, SOME F SHARP, TIPS AND TRICKS ON MOVING TO DOT NET CORE. >> GET YOUR QUESTIONS IN WHILE YOU ARE WATCHING. IF YOU ASK YOUR QUESTIONS AFTER WE LEAVE, THEN WE CAN'T ASK THEM. WE WANT ALL OF YOUR QUESTIONS IN. TREASURE HUNT.HAVE A TECHNICAL – I'M GOING TO READ THIS. BETH MASSI PROBABLY WROTE THIS. YOU NEED TO FOLLOW HER ON TWITTER. SHE'S ALMOST TO 10,000 FOLLOWERS. IF SHE GETS THERE, SHE OWES ME 50 BUCKS. I DON'T KNOW. >> WE WILL SPLIT IT. >> SHE GETS 80. I GET 50.

DO YOU LIKE SOLVING TECHNICAL PROBLEMS AND WINNING COOL PRIZES? I KNOW YOU DO AND I DO. YOU ARE GOING TO WANT TO WATCH BECAUSE THEY ARE SPONSORING A TREASURE HUNT. YOU WILL BE ELIGIBLE TO WIN PRIZES. WHAT IS THE SESSION WE GOT COMING UP? >> RIGHT NOW, WE HAVE MAC REBORN, NEW EDITORS AND NEW EXPERIENCES WITH CODY.

>> HELLO. GOOD MORNING. GOOD EVENING WHEREVER YOU ARE. THANK YOU FOR JOINING ME. I'M SENIOR PROGRAM MANAGER. TODAY, WE WILL TALK ABOUT WHAT'S NEW FROM NEW EDITORS AND NEW EXPERIENCES. ALL OF THE OTHER GREAT GOODIES WE HAVE IN VISUAL STUDIO 2019 FOR MAC. WITHOUT FURTHER ADO, LET'S GET STARTED. 8.3 WE JUST RELEASED YESTERDAY. IT'S THE BIGGEST RELEASE THAT WE HAVE EVER HAD. IT'S FILLED WITH ALL A BUNCH OF GREAT NEW FEATURES FROM NEW WEB EDITORS, OF COURSE DOT KNOT CORE THREE AND C SHARP EIGHT SUPPORT AS WELL AS SMALLER UPDATES LIKE PINNING DOCUMENTS, IMPROVED QUICK FIXES AND SOURCE LINK. BY INTRODUCING THESE FEATURES, WE ARE HOPING TO IMPROVE THE OVERALL DEVELOPER EXPERIENCE WITHIN VISUAL STUDIO FOR MAC. NOT JUST ONE THING OR ANOTHER THING BUT THE OVERALL END TO END EXPERIENCE. WE HAVE UPDATES IN EACH OF THOSE. WE WILL GET TO THOSE IN A MOMENT. OF COURSE, THIS IS BUILT UPON THE SOLID FOUNDATION OF VISUAL STUDIO 2019 FOR MAC. THAT INCLUDES UPDATES SUCH AS THE NEW C SHARP EDITOR, IMPROVED GET RELIABILITY.

UPDATED TEMPLATES. ALL SORTS OF OTHER IMPROVEMENTS AS WELL. NOT ONLY THOSE 8.3 REPRESENTS A MAJOR STEP FORWARD IN WEB DEVELOPMENT AND IN DOT NET CORE DEVELOPMENT, BUT BUILT ON THIS GREAT RELEASE WITH NEW EDITORS, NEW NATIVE EDITORS SO WE CAN GET INTO THOSE. I CAN'T WAIT TO SHOW YOU ALL THE NEAT STUFF. NONE OF THIS WOULD HAVE BEEN POSSIBLE WITHOUT THE FOLKS WHO HOPPED ON THE PREVIEW CHANNEL, TRIED OUT THE FEATURES AND GAVE US FEEDBACK. IT'S INVALUABLE TO US. WE COULD NOT DO IT WITHOUT YOU. THANK YOU VERY MUCH FOR TRYING OUT THESE NEW FEATURES AND GIVING US THE FEEDBACK TO GET US TO WHERE WE ARE TODAY.

NEW EDITOR. NEW BACK END. WHAT MAKES UP THIS NEW EDITOR, WHY WE HAVE A NEW EDITOR AND WHAT WE CAN DO WITH IT. I LIKE TO THINK OF DOT NET AS THE MOST POWERFUL CROSS PLATFORM TOOL KIT THERE IS. IF YOU LOOK AT WHAT DOT NET DOES AND WHAT WE CAN DO WITH DOT NET, MORE THAN THE NEW EDITOR.S THIS- IF YOU THINK ABOUT WHAT A QUINTESSENTIAL WINDOWS APPLICATION IS, THE VISUAL STUDIO EDITOR FITS THAT BILL. WPF, IT'S BEEN ON WINDOWS FOREVER, IT'S FAST. IT'S STABLE. IT'S ALSO BASED ON DOT NET. WE LOOKED AT WHAT WE NEEDED FOR A NEW EDITOR IN VISUAL STUDIO FOR MAC. BECAUSE IT'S BASED ON DOT NET, BECAUSE IT'S THIS CROSS PLATFORM, WE WERE ABLE TO PUT A VAST MAJORITY OVER TO MAC OS. THE ONLY PORTIONS WE DIDN'T TAKE WITH US WAS UI LAYER ON WINDOWS IT'S WPF, ON MAC THAT'S COCOA AND CORETEXT. ALL THE QUICK FIXE LITTLE TOOLS THAT TELL TEXTS WHERE TO GO, THEY WERE SHARED. THAT IS THE POWER OF DOT NET. THAT IS HOW WE ARE ABLE TO TAKE THE QUINTESSENTIAL WINDOWS APPLICATION AND MOVE IT TO MAC OS.

SO LET'S TAKE A LOOK AT IT. LET'S SEE HOW IT LOOKS IN THE REAL WORLD. I HAVE A CAT. THIS IS BUTTONS. HE IS MY CAT. I WENT TO MY VET. I WAS TOLD THAT HE NEEDED TO GO ON A DIET. I NEEDED TO TRACK MY CALORIES FOR MY CAT. THIS IS SOMETHING THAT'S HARD. IF YOU HAVE CATS, YOU KNOW THEY DON'T TAKE WELL TO BEING TOLD HOW MUCH THEY CAN EAT.

I WANTED TO MAKE AN APP TO REMIND ME OF THIS. WHAT A PERFECT OPPORTUNITY TO DO THIS, TO TRY OUT THE NEW WEB EDITOR. I CAN MAKE AN APP WITH TRACKING MY CAT'S FEEDING. IN THIS APPLICATION, I WANTED TO USE ASP DOT NET CORE UTILIZING RAZOR PAGES. I WANTED TO MARK WHICH DAYS EXCEEDED LIMITS AS WELL AS ALLOW FOR MULTIPLE CATS. I DO HAVE MORE THAN ONE CAT.

I DON'T WANT TO GET THEM CONFUSED. FINALLY,DEMARCATE BY DAY. LOOK AT WHAT WE DID. I'M GOING TO LAUNCH THE FITTY KITTY DEMO. I IMMEDIATELY SEE THERE'S A TUTOR HERE. I NEED TO FILL IN THIS CLASS. WHAT AM I GOING TO DO? I KNOW I NEED A DB CONTEXT HERE. THIS IS THE MEAL CONTEXT CLASS. I TYPE IN — SHOOT.

I DON'T REMEMBER THE LIBRARY AND NAME SPACE. THAT'S RATHER EMBARRASSING. I AM GIVEN A BEAUTIFUL NEW TOOL THAT HELPS ME FIGURE THIS OUT. HOP INTO PREFERENCES. SELECTING INTELSENSE, SHOW IMPORT ITEMS. I'M ABLE TO ENABLE THIS FEATURE THAT LISTS WHICH IMPORT ITEMS ARE AVAILABLE TO BE IMPORTED INTO MY PROJECT BASED ON WHAT I'M TYPING IN. SEE THAT IN ACTION. HOPEFULLY THAT WILL MAKE MORE SENSE. TYPING IN DB CONTEXT, NOW I HAVE ALL OF THESE DIFFERENT COMPLETIONS AVAILABLE TO ME. YOU WILL SEE TO THE RIGHT, I HAVE THE NAME SPACE FOR WHICH THOSE COMPLETIONS BELONG.

DB CONTEXT, WHICH IS WHAT I NEED TO IMPORT INTO MY PROJECT, COMES FROM MICROSOFT ENTITY FRAMEWORK CORE. ALL I NEED TO DO IS ARROW DOWN TO DB CONTEXT IN MY EDITOR. HIT TAB. NOT ONLY DOES IT COMPLETE DB CONTEXT, IT ADDS THE USING INTO MY APPLICATION. THIS IS A HUGE TIME SAVER AND SPEEDS UP THE AMOUNT OF TIME IT TAKES FOR YOU TO REMEMBER ALL THESE IMPORTS. I FORGET THEM ALL THE TIME.

IT SAVES ME TIME. I HOPE IT SAVES YOU TIME, TOO. ANOTHER GREAT TIME SAVER THAT I FOUND TO BE USEFUL IN THIS IDE IS THE CONCERT OF SNIPPETS. SNIPPETS REPRESENT ANY AMOUNT OF CODE YOU MAY USE MANY TIMES. IN THIS CASE, I NEED TO TYPE IN ALL THE METHODS AND MECHANISMS FOR THE DB CONTEXT HERE. I DON'T NECESSARILY AGAIN REMEMBER THE EXACT EVERYTHING ABOUT IT. BECAUSE I WANT TO IMPRESS MY FRIENDS, I WILL USE A SNIPPET THAT ALLOWS ME TO SEE AND ENTER THE CODE WITH JUST A FEW CHARACTERS. PREVIOUSLY, I CREATED A SNIPPET FOR CREATING THE DB CONTEXT INFORMATION. TO DO THIS, I'M GOING TO TYPE IN DB CTX. YOU CAN SEE NOT ONLY IS THERE A SNIPPET, IT HAS A SNIPPET ICON THERE. IF I TAP TWICE, IT'S GOING TO IN INSERT. I HAVE ALL OF THE CODE I NEED FOR THE DB CONTEXT METHOD. I CAN TYPE IT IN HERE. AS YOU CAN SEE, TWO SECTIONS WITHIN THIS CODE THAT SAY NOT SET. THOSE ARE VARIABLES I SET WITHIN THE SNIPPET THAT ALLOW ME AS I'M FILLING OUT THE SNIPPET TYPE IN THE CODE.

LET'S SEE. I KNOW THIS NEEDS TO BE NAMED MEAL CONTEXT. I TYPE IN MEAL CONTEXT. NOT ONLY DOES IT FILL IN THE FIRST VARIABLE, BUT ALSO FILLS IN THE SECOND. THEY ARE BOTH MARKED WITH THE SAME PLACE HOLDER. I WILL SHOW YOU WHAT THAT LOOKS LIKE IN A SNIPPET EDITOR. GO TO PREFERENCES. NAVIGATE TO CODE SNIPPETS. YOU CAN SEE THE DB CTX IS THE FIRST ON THE LIST. THAT'S THE ONE I CREATED. AS YOU CAN SEE, I HAVE PUBLIC, DOLLAR SIGN NAME DOLLAR SIGN. THAT REPRESENTS A PLACE HOLDER FOR USER INPUT. YOU CAN SEE THE NAME IS THE SAME. SAME NAME BETWEEN BOTH OF THE INSERTION POINTS. THIS MEANS THAT WHAT I TYPE IN ONE I GET IN THE OTHER. IF THESE WERE DIFFERENT, I WOULD USE DIFFERENT VARIABLE NAMES. YOU CAN MIX THESE UP AS MUCH AS YOU WANT TO GET THE RESULTS YOU WANT.

I FINE SNIPPETS TO BE A HUGE TIME SAVER FOR CODE THAT HAS A FEW PLUG AND PLAY PARTS THAT YOU CAN QUICKLY REPLACE WITH OTHERS. THAT'S GREAT. I GOT THIS PART COMPLETED. I DO NEED TO ADD MY DB SET. I'M GOING TO CALL PUBLIC. DB SET AND WHILE WE'RE HERE, I WANT TO POINT OUT ANOTHER FANTASTIC TIME SAVING FEATURE THAT I ABSOLUTELY LOVE. THAT IS TYPE FILTERING. THIS WORKED WELL WHEN YOU HAVE THE SHOW IMPORT ITEMS FEATURE ON THAT WE TALKED ABOUT PREVIOUSLY.

MY COMPLETION LIST IS RATHER LENGTHY. IF I BACK SPACE HERE AND START WITH THE D, YOU CAN SEE THIS IS A VERY FULL COMPLETION LIST. IT CAN BE SOMEWHAT DAUNTING WHEN YOU DON'T NECESSARILY REMEMBR EXACTLY WHAT YOU WANT BUT YOU KNOW IT'S A CLASS, YOU KNOW IT'S A DELEGATE. WITH FILTERING, YOU SEE THE ICONS DOWN AT THE BOTTOM OF YOUR COMPLETION WINDOW. YOU CAN SELECT WHICH ONES OR WHICH TYPES YOU WANT TO FILTER BY. FOR EXAMPLE, IF I'M GOING TO FILTER ONLY BY CLASSES, I CLICK CLASSES. THAT LIMITS THE COMPLETION LIST TO INCLUDE CLASSES. SAME GOES FOR THINGS SUCH AS ENOMS AND STRUCTURES. THERE WE GO. BY LIMITING THE NUMBER OF ITEMS IN MY COMPLETION LIST, COMBINED WITH THE POWER OF SHOWING ALL AVAILABLE IMPORTS, I HAVE A MUCH MORE HELPFUL AND FRIENDLY COMPLETION LIST AVAILABLE TO ME.

ANOTHER DB SET IS A CLASS. I'M GOING TO LIMIT THE CLASS, NAVIGATE DOWN TO DB SET. I KNOW IT'S A TYPE OF MEAL. IT'S GOING TO SUGGEST I CALL IT MEALS. WHICH I AGREE WITH. THAT'S A GOOD NAME. I'M GOING TO ACCEPT THAT BY HITTING TAB. ADD MY GET SET HERE. THERE WE GO. THAT COMPLETES MY CONTEXT HERE. CHECK OUT MY TO DO LIST AND SEE IF THERE'S ANYTHING ELSE I NEED TO DO. ONCE I CLEAR THIS GUY OUT. THERE WE GO. BY CLICKING ON TASKS, I CAN SEE I NEED TO CHANGE K COUNT. I'M GOING TO DOUBLE CLICK AND NAVIGATE. OKAY. I NEED TO CHANGE THE DOUBLES TO IN I INTEGERS. I'M GOING TO GO AHEAD AND CHANGE THIS.

I CAN DO THIS SEVERAL DIFFERENT WAYS. I CAN DO FIND AND REPLACE. THAT MIGHT REPLACE THINGS I DON'T WANT TO REPLACE. I CAN DO ONE BY ONE. WE DON'T WANT TO DO THAT. THIS IS THE 21st CENTURY. WHAT OPTIONS DO I HAVE? I HAVE THE POWER OF MULTI-CARAT EDITING. WHAT I'M GOING DO IS I'M GOING TO HIT COMMAND — SORRY, OPTION SHIFT PERIOD. IT'S GOING TO SELECT DOUBLE. IF I TYPE THAT KEY COMBINATION AGAIN, WE WILL SEE THAT THE NEXT DOUBLE IS SELECTED. A THIRD TIME, THE THIRD DOUBLE. NOW IF YOU NOTICE TO THE RIGHT OF EACH OF THESE STRINGS, I HAVE THE WORD — THE OCCURSOR BLINKI FOR DOUBLE. IF I TYPE IN I-N-T, EACH IS CHANGED. WITHOUT HAVING TO FIND AND REPLACE OR DOING EACH BY HAND, I'M ABLE TO QUICKLY REPLACE THOSE. THIS IS A VERY SIMPLE USAGE.

IT IS A SUPERPOWERFUL FEATURE. IT HAS WAY MORE USES THAN WHAT'S DEMONSTRATED HERE. I HOPE YOU GIVE THIS FEATURE A TRY. IT'S AVAILABLE AGAIN THROUGH KEY WORD SHORTCUTS AND THROUGH YOUR HOUSE CLICKS AS WEL. FOR KEY WORD SHORTCUTS, YOU CAN SEE ALL THE DIFFERENT COMBINATIONS OF KEYS YOU CAN HIT TO ENABLE DIFFERENT OPTIONS. STEP TWO IS DONE. IF WE RECALL, I NEED TO BE ABLE TO TELL WHEN I OVERFED MY CAT. LET'S GO INTO THE INDEX, TAKE A LOOK AT THE NEW WEB EDITORS.

THIS IS THE FITTY KITTY INDEX. I KNOW A FEW THINGS, SURPRISINGLY, BUT I DO KNOW A FEW THINGS. ONE OF THOSE IS THAT I NEED A CSS STYLE. I WANT TO MAKE SURE THAT I'M USING PROPER INTELISENSE. I'M GOING TO — I'M IN HTML. WILL OPEN A TAG. I SEE I GET HTML. THAT'S WHAT I WOULD EXPECT. I NOTICE IT'S A STYLE. I KNOW THE STYLE I WANT IS OF TYPE CSS. NOW I'M WITHIN CSS. I'M WITHIN THE STYLE TAB. I NEED TO HAVE A DESIGNATION FOR OVERWEIGHT OR OVER CALORIES. HERE I'M GOING TO SAY BACKGROUND COLOR — NOW, I'M GIVING CSS INTELISENSE. I'M ABLE TO THEN COMPLETE WHAT I NEED IN THIS CONTEXT. BACK ON COLOR, I WANT THAT TO BE RED. TO WARN ME THAT I DID OVERFEEDING. I WANT THE TEXT COLOR TO BE WHITE. SO IT'S READABLE. I ALSO MENTIONED I WANTED TO HAVE SOME SORT OF DESIGNATION OF DIFFERENCES OF DAYS. EVEN DAZE YS WILL HAVE A GRAY BACKGROUND. ODD DAYS WILL HAVE A WHITE BACKGROUND. I'M GOING TO SAY EVEN DAY.

AGAIN, GOING TO USE CSS BACKGROUND COLOR. I'M GOING TO PICK LIGHT GRAY. PERFECT. THERE WE GO. NOW I HAVE ALL THE CSS THAT I NEED TO FILL OUT THE STYLES. I'M GOING TO HAPPEN INTO MY FOR EACH LOOP AND ADD THE CODE. WE SAW HTML. WE SAW CSS. NOW WE WILL SEE C SHARP WITHIN THE SAME FILE WITH CONTEXT. HOW ARE WE GOING TO DO THIS? TYPE IN C SHARP. I NEED A STRING TO DESIGNATE THE STYLE I'M DOING. STYLE CHOICE. SO I KNOW THE MAIN DIFFERENTIATOR IS THE DAY. FIRST THING I WANT TO MARK IS WHETHER IT'S AN EVEN OR ODD DAY. IF ITEM DOT TIME DOT DAY IS AN EVEN NUMBER, THEN STYLE CHOICE IS GOING TO EQUAL EVEN DAY. THAT'S WHAT I SET HERE. EVEN DAY. YOU NOTICE THAT I HAVE SET THESE VALUES TO BE EVEN TO OR TO BE EQUAL TO THOSE WHICH I DECLARED WITHIN MY STYLE.

THAT WAY I CAN USE A C SHARP CODE TO DESIGNATE MY STYLE. I'M GOING TO DO THE SAME THING FOR THE OVER. IF IT'S GREATER THAN 75 — 85, LET'S GO WITH THAT. STYLE CHOICE IS GOING TO EQUAL OVER. AGAIN, THAT IS THE NAME OF THE STYLE THAT I PUT IN PLACE. FINALLY, I NEED TO ADD THE CLASS HERE TO MY TABLE ROW DESIGNATION. CLASS EQUALS AT STYLE CHOICE. THAT SHOULD COMPLETE IT. I SHOULD HAVE WHAT I NEED HERE TO SEE IF I OVERFED MY CAT, WHICH IS IMPORTANT. ONE THING I WANT TO POINT OUT IS I CAN CHOOSE WHICH IDE, WHICH BROWSER I WANT THE IDE TO LAUNCH. IN THIS CASE, LET'S GO AHEAD AND LAUNCH WITH MICROSOFT EDGE BETA. I'M GOING TO CLICK DEPLOY. HERE WE ARE GOING TO WATCH THIS WORK, HOPEFULLY. THE ABILITY TO REALLY PICK OUT YOUR WEB EDITOR IS A SMALL BUT BIG FEATURE, IF YOU KNOW WHAT I MEAN. IT'S NOT SOMETHING THAT'S GOING TO CHANGE EVERYTHING.

BUT IT MAKES THINGS SIMPLER. I TRUST THE CERTIFICATE. I'M A TRUSTING PERSON. TYPE IN MY PASSWORD. I'M GOING TO LET YOU SEE IT BECAUSE I'M A TRUSTING PERSON. PASSWORD IS IN. BUILD IS SUCCESSFUL. DEPLOYMENT IS OCCURRING. LET'S SEE HOW I DID ON FEEDING THIS WEEK. PERFECT. HERE WE GO. I DO HAVE THESE DAYS DESIGNATED FOR WHEN I OVERFED MY CAT. ONE DAY. THAT'S UNFORTUNATE. NOW I KNOW WHICH DAYS I DID OVERFEED MY CATS ON. WE DID HAVE AN ISSUE WITH EVEN DAY. THAT IS BECAUSE I NAMED IT WRONG. IF I GO BACK DOWN HERE AND I RUN IT AGAIN, EVEN DAY SHOULD NOW DESIGNATE THE COLORS AS WE WOULD EXPECT. LET'S MAKE SURE THAT WORKS AS EXPECTED. THERE WE GO. EVEN DAYS ARE MARKED AT SUCH.

LOOK BACK AT WHAT FEATURES WE COVERED. FIRST WE COVERED THE UPDATED WEB EDITOR. NATIVE TYPING PERFORMANCE. THE ABILITY TO HAVE DIFFERENT INTELISENSE. WE ALSO SAW AUTOMATIC IMPORTING. YOU CAN IMPORT TYPES AS YOU TYPE. ONE THING TO NOTE IS THAT IF A NEW PACKAGE IS AVAILABLE, IT WILL BE AVAILABLE IN THE COMPLETION LIST. TYPE FILTERING ALLOWS YOU TO LIMIT THE AMOUNT DATA IN YOUR COMPLETION LIST.

THAT COMBINED WITH THE SHOW IMPORT ITEMS IS USEFUL. FINALLY WE SAW MULTI-CARAT EDITING. YOU CAN INSERT CODE EAT THE SAM TIME BASED ON MANY NUMBER OF DIFFERENT CONSTRAINTS SUCH AS MATCHING CHARACTERS AS WELL AS STRINGS. FINALLY, ONE THING I DIDN'T GET TO SHOW WHICH IS SUPER IMPORTANT IS RIGHT TO LEFT SUPPORT IN THE EDITOR. IF YOU SEE ON THE TRANSLATION HERE, IT SAYS WELCOME TO THE EDITOR IN ARABIC. IT MEANS THE LANGUAGE STARTS ON THE RIGHT AND END ON THE LEFT. OPPOSITE OF ENGLISH. YOU SEE THE STRING IS BACKWARDS. IT READ IN REVERSE. THAT'S NO GOOD IF YOU ARE TRYING TO TYPE.

THE NEW EDITOR SUPPORTS RIGHT TO LEFT LANGUAGE. WE CAN SEE THE END OF THE STRING IS WHERE IT SHOULD BE IN A RIGHT TO LEFT LANGUAGE. THIS IS A VERY IMPORTANT FEATURE IF YOU TYPE AND WE ARE SUPER HAPPY TO HAVE THAT IN OUR IDE. IT WAS A TOP COMMUNITY REQUEST. WE'RE HAPPY TO FULFILL IT. QUICKLY I WANT TO TALK ABOUT MULTITARGETING.

LET'S SEE. I'M GOING TO OPEN A NEW INSTANCE OF THE IDE. MULTITARGETING IS A NEW FEATURE IN VISUAL STUDIO FOR MAC THAT ALLOWS US TO TARGET DIFFERENT VERSIONS OF THE DOT NET CORE FRAMEWORK WITHIN THE SAME SOLUTION. SUPER USEFUL WHEN YOU ARE TRYIN WANT TO WORK ON MIGRATING YOUR CODE. I WILL OPEN UP THE MULTITARGET SAMPLE. AS IT'S OPENING, LET'S LOOK AT WHAT THIS ACTUALLY MEANS IN PRACTICE. HERE WE ARE. MULTITARGET FRAMEWORK.

YOU CAN SEE UP HERE I HAVE THE ABILITY TO CHOOSE DOT NET CORE THREE OR 2.2. I HAVE THE ABILITY TO TARGET IT HERE. ONE THING I WANT TO POINT OUT IN THIS EXAMPL IS HOW IT'S AWARE OF YOUR MULTITARGET SITUATION AND LET'S YOU PICK AND DEMONSTRATES WHAT VERSIONS OF COMPLETIONS ARE AVAILABLE TO YOU. I'M GOING TO GO DOWN HERE AND TYPE A. AS I SCROLL DOWN, YOU WILL SEE THAT SOME OF THESE HAVE THESE LITTLE WARNING TRIANGLES. LET'S SEE WHAT THAT'S ALL ABOUT. IF I HOVER OVER AND SELECT, WE SEE IT'S ONLY AVAILABLE IN DOT NET CORE 3. IT'S NOT AVAILABLE IN . NOW AS A DEVELOPER, I KNOW WHICH TARGET FRAMEWORK I NEED TO PICK IN ORDER TO USE THE CODE I NEED TO USE THIS TIME.

ANOTHER SUPER HANDY FEATURE THAT MAKES DEVELOPMENT GO A LOT FASTER. LET'S HOP BACK OVER TO POWERPOINT HERE. YOU ARE ABLE TO SEE THAT YOU CAN TARGET DIFFERENT FRAMEWORK WITH A SINGLE APP. THE FRAMEWORK IS — IT'S AWARE OF THE FRAMEWORK SELECTS AND AWARE OF WHAT'S AVAILABLE IN EACH FRAMEWORK. SUPERPOWERFUL FEATURE. I HOPE YOU CHECK IT OUT. WE HAVE AN EDITOR WHICH IS A HUGE, HUGE, HUGE BENEFIT IF YOU ARE A ZAMUL EDITOR.

I DON'T HAVE ENOUGH TIME TO GET INTO THIS. I DO SUGGEST CHECKING OUT TWO TALKS TO SEE HOW THE NEW ZAMUL EDITOR WORKS IN REAL TIME. I WANT TO POINT OUT THERE'S MORE AVAILABLE AT DOT NETCOM. TOMORROW AT 8:00 A.M., WE WILL DEMONSTRATE HOW TO GET STARTED WITH VISUAL STUDIO 2019. I SCRATCHED THE SURFACE OF WHAT'S AVAILABLE. THEY WILL DEEP DIVE AND MAKE AN APP FROM GIVING TO END. IT'S GOING TO BE A GREAT PRESENTATION. TIME FOR QUESTIONS. QUICKLY, MY NAME IS CODY. FOLLOW ME ON TWITTER. WE HAVE @VISUAL STUDIO FOR MAC IF YOU WANT TO FOLLOW US ON TWITTER. DOCUMENTATION, CHECK IT OUT. WE ARE HEAR TO LISTEN TO YOUR FEEDBACK. PROVIDE SELECTIONS. LET'S TOSS IT OVER FOR QUESTIONS. >> THAT WAS AWESOME. THANK YOU SO MUCH, CODY. I LOVE THOSE MULTI-CARAT TOOLS. IT WAS PRETTY SWEET. WE HAVE QUESTIONS FROM TWITTER. I DON'T SEE AN OPTION TO ADD DOCKER SUPPORT. ANY IDEA WHEN THAT WILL BE AVAILABLE? >> I DON'T OFF THE TOP OF MY HEAD.

IF YOU WANT TO HIT ME UP ON TWITTER, I WILL GET BACK TO YOU AS SOON AS I CAN ON THAT. I BELIEVE THAT MOST OF THOSE — THE MAIN GOAL WAS TO GET C SHARP AND ZAMUL AND WEB AND THE EXTRA DOCKER FILES AND ALL THOSE OTHER FILES IN THERE AS QUICKLY AS WE CAN POST THAT. HIT ME UP ON TWITTER. I WILL GET YOU MORE EXACT TIME FRAMES.

>> WE HAVE ANOTHER QUESTION. THEY WANT TO KNOW WHAT'S ON THE ROAD MAP FOR VS FOR MAC. >> GREAT QUESTION. FIRST OF ALL, CHECK OUT OUR ROAD MAP ON THE DOCS PAGE. I DON'T HAVE THE LINK AVAILABLE. WE ARE FOCUSING ON BRINGING BLAZER SUPPORT IN 8.4. IT'S AIMING FOR 8.4 AS OUR BLAZER TIME FRAME. CHECK OUT THAT. ALSO UPDATED GET BACK IN TO ENSURE YOUR GET EXPERIENCE IS AS GOOD AS CAN BE. BRINGING MORE EDITOR ACROSS THE IDE. >> ONE MORE QUESTION RIGHT HERE. WHEN WILL DOT NET COM VIDEOS BE AVAILABLE ON DEMAND? WITHIN 24 HOURS. YOU CAN GET THEM RIGHT OFF THE PRESSES. I'M EXCITED FOR THE NEXT SESSION — ACTUALLY, WE HAVE A LITTLE COMMERCIAL BREAK.

ENJOY THIS SHORT LITTLE PACKAGE. >> HEY THERE TREASURE HUNTERS. I HAVE YOUR NEXT CLUE. FOR THIS CHALLENGE, YOU WILL USE THE LEAD TOOLS OCR AND BARCODE SDK TO EXTRACT THE SECRET KEY AS TEXT FROM BOTH AN IMAGE AND A BARCODE. JOIN THOSE TWO PARTS INTO A ONE LINE SECRET KEY AND THEN WHISPER THAT COMPLETE KEY TO THE DOT NET BOT IN THE VIDEO TWITCH CHANNEL TO CONTINUE ON WITH OUR TECHNICAL TREASURE HUNT. GO TO THIS URL TO GET STARTED. SOLVE THAT AND YOU COULD BE WELL ON YOUR WAY TO THE NEXT STEP IN OUR TECHNICAL TREASURE HUNT. >> I'M CAM. I'M A CONTENT DEVELOPER. WELCOME BACK TO ENTITY FRAMEWORK CORE 101. SO FAR, WE HAVE LOOKED AT USING ENTITY FRAMEWORK CORE WITH SEQUEL SERVER.

WE WILL USE IT WITH OTHER DATABASE PROVIDERS. DAD TA DATABASE PROVIDER IS RESPONSIBLE FOR THE COMMUNICATION. IT'S A PLUGABLE ARCHITECTURE. WE CAN SUPPORT ALL KINDS OF DATABASES. THE FIRST PROVIDER WE WILL LOOK AT IS SEQUEL LIGHT. TO USE THE PROVIDER, WHERE I WOULD PREVIOUSLY USE DOT USE QU SEQUEL SERVER. THAT CONNECTION SPRING POINTS TO A LOCAL FILE HERE ON MY MACHINE. I HAVE CREATED A NEW RECORD. I'M GOING TO USE A TOOL TO READ SEQUEL LIGHT DATABASES. IT'S AVAILABLE FOR DOWNLOAD ON THE INTERNET. WE WILL BROWSE TO THE PRODUCTS TABLE. AS YOU CAN SEE, THERE'S THE ROPE PULL TOY I JUST ADDED. THE NEXT DATABASE PROVIDER WE WILL LOOK AT IS A NEW DATABASE PROVIDER FROM THE MICROSOFT ENTITY CORE TEAM. COSMOS BD IS A CLOUD BASED DISTRIBUTED NO SEQUEL DATABASE. INSTEAD OF BEING A RELATIONAL DATABASE, IT WORKS WITH J-SON. THIS WEB APPLICATION, I HAVE ADADD ED MICROSOFT EDITOR. WE ALSO HAVE A WORKING ENTITY MODEL AND A WORKING DATABASE CONTEXT. WE WILL USE THE USE COSMOS METHOD TO PASS IN OUR CONNECTION INFORMATION AND ONCE AGAIN I WILL HAVE TO REMIND YOU, DON'T INCLUDE SENSITIVE INFORMATION IN YOUR CODE.

ONE DIFFERENCE WITH COSMOS DB IS THAT IT DOESN'T SUPPORT THE CONCEPT OF AN AUTO GENERATED END FOR A PRIMARY IDENTIFIER. I CHANGED IT SO OUR ID WILL BE STRINGS AND THEY WILL BE IN INIT INITIALIZED. LET'S RUN THE APPLICATION AND ADD A RECORD TO OUR COSMO DB INSTANCE. >>> WE WILL GO TO THE AZURE PORTAL AND REFRESH MY LIST OF ITEMS IN MY INSTANCE. YOU CAN SEE THE SQUEEZY BONE I ADDED. SUPPORT INCLUDES MY SEQUEL, POST G POSTGRESS, ORACLE AND OTHERS. WE LOOKED AT DATABASE PROVIDERS. IN THE NEXT VIDEO, I WILL SHOW YOU TIPS. >>> W . >> WELCOME BACK. WE WILL TALK ABOUT THE FUTURE OF BLAZER ON THE CLIENT. BLAZER IS A CLIENT WEB UI FRAMEWORK. THE BROWSER WAS A BLACK BOX PREVIOUSLY. NOW YOU CAN USE DOT NET FOR YOUR CLIENT WEB DEVELOPMENT NEEDS. WHAT IF YOU NEED TO TAKE YOUR APP TO OTHER NATIVE PLATFORMS LIKE MOBILE, DESK-TOP AND OTHER DEVICES? IT COULD BE EXPENSIVE TO BUILD NATIVE EXPERIENCES FOR ALL THOSE PLATFORMS. YOU MIGHT NOT HAVE THE DEVELOPER RESOURCES OR THE DEVELOPER SKILL SETS.

ONE COMMON STRATEGY IS TO USE THE OWEB AND THE WEB DEVELOPERS TO BUILD APPS WITH NATIVE LIKE CAPABILITIES. WE WANT TO INVOLVE BLAZER TO USE IT TO BUILD APPS THAT HAVE NATIVE-LIKE CAPABILITIES. WE WILL WALK THIS SPECTRUM FROM THE WEB TO NATIVE APPLICATIONS. HE WOULD HAVE SEEN BLAZER SERVER APPS AND DOT NET COM 3.0. IT'S AVAILABLE. DOWNLOAD IT. INSTALL IT. TRY IT OUT. BLAZER SERVER APPS ENABLE TO GET AT RICH INTERACTIVITY TO YOUR APPLICATIONS. THEY RUN ON THE SERVER. BUT THEY ALLOW YOU TO HAVE THAT CLIENT INTERACTIVE FEEL LIKE A SINGLE PAGE APPLICATION. THEY ALSO ENABLE YOU TO LEVERAGE THE CAPABILITIES OF THE BROWSER USING JAVA SCRIPT. LET'S ME HOP OVER HERE TO VISUAL STUDIO. HERE IS THE BLAZER WEATHER APPLICATION THAT WE SAW EARLIER THIS WEEK. THIS IS A BLAZER SERVER APP. I HAVE ALREADY REFACTORED IT TO MOVE ALL OF ITS COMPONENTS INTO THIS RAZOR CLASS LIBRARY.

WE EXPAND SOME OF THE FOLDERS. WE WILL SEE THE RAZOR FILES IN THERE. THAT'S SO I CAN REUSE THESE COMPONENTS IN THE FUTURE DEMOS. WE HAVE SEEN WHAT THIS LOOKS LIKE. IT HAS A UI FOR SHOWING THE WEATHER. ONE OF THE THINGS WE SAW IS THAT WE DO HAVE CLIENT SIDE INTERACTIVITY. WE CAN CHANGE THE TEMPERATURE UNIT. WE CAN USE THE CAPABILITIES OF THE BROWSER TO GET THE USER'S CURRENT LOCATION BY CLICKING HERE. THAT SHOULD USE THE GEO LOCATION API TO GIVE US WHERE WE ARE AT.

ONE OTHER THING I ADDED TO THIS APPLICATION THAT ALSO LEVERAGES AN ADDITIONAL CAPABILITY IS THE BROWSER'S LOCAL STORAGE. I USED — IT'S A COMMUNITY PROJECT. THIS IS A PROJECT BY CHRIS. HE HAS DONE GOOD STUFF. HE HAS A PACKAGE THAT USES JAVA SCRIPT TO ENABLE LOCAL STORAGE IN BLAZER APPLICATIONS. I USED THAT SO IF BE GO BACK TO THE APP, WE CAN STORE OUR PINNED LOCATIONS LOCALLY IN THE BROWSER. LET'S GO TO CHICAGO AND WE WILL PIN THAT ONE. THERE IT IS. NOW WE CAN CYCLE THROUGH OUR PIN LOCATIONS. WE HAVE SEATTLE AND CHICAGO. IF I GRAB THIS, I WILL CLOSE THAT TAB AND OPEN UP A NEW ONE. WE STILL HAVE SEATTLE AND CHICAGO AS OUR PINNED LOCATIONS USING THE BROWSER'S LOCAL STORAGE TO STORE THOSE THINGS. WE LEVERAGE BROWSER CAPABILITIES AS WELL. >> MR. ROTH — >> MY GOODNESS. >> I BROUGHT YOU BLAZER.

>> YES, YES. >> GOTTA LOOK THE PART. >> YEAH. >> THE BLAZING BLAZER. >> THIS MAKES ME READY NOW. THANK YOU. WE WILL BLAZE ON NOW. YEAH. I WAS NOT EXPECTING THAT. WHAT'S THE NEXT STEP ON ADDING MORE NATIVE-LIKE CAPABILITIES TO OUR BLAZER APPLICATION? THE NEXT STEP IS BLAZER WEB ASSEMBLY. THEY RUN IN THE BROWSER ON A WEB ASSEMBLY-BASED DOT NET RUN TIME. SORRY. WITH BLAZER WEB ASSEMBLY APP, YOUR APP IS STATIC FILES. THEY CAN BE DOWNLOADED. THEY ARE DOWNLOADED INTO THE BROWSER AND EXECUTED. THEY CAN THEN LEVERAGE THE CAPABILITIES OF THE BROWSER AS WELL. I HAVE TAKEN THE SAME APPLICATION. THIS IS THE SERVER VERSION. LET'S CLOSE THAT. LET'S NOW GO TO A DIFFERENT PROJECT. THIS IS A WEB ASSEMBLY VERSION OF THE SAME PROJECT. IT'S USING THE SAME COMPONENTS. THIS IS KIND OF COOL. A LOT OF CUSTOMERS THAT I TALK TO ARE STARTING OUT WITH BLAZER SERVER WITH THE PLAN TO WHEN BLAZER WEB ASSEMBLY IS READY NEXT YEAR, THEY CAN SHIFT TO RUN FULL ON IN THE CLIENT.

LET'S RUN THE WEB ASSEMBLY VERSION OF THIS APP. LOOKS PRETTY MUCH THE SAME. DOES THE SAME THINGS. WE CAN GET OUR CURRENT LOCATION HERE. THERE WE ARE. THEN IF WE F12 AND LOOK AT WHAT WAS DOWNLOADED, IT LOOKS A LITTLE DIFFERENT. YEAH. THERE YOU SEE DOWN AT THE BOTTOM, THERE'S THAT FILE. THAT'S OUR WEB ASSEMBLY-BASED DOT NET RUN SIDE. TO SHOW THAT IS OCCURRING, WE CAN DE-BUG. IF WE LOOK IN THE CONSOLE, YOU CAN SEE THERE'S A DE-BUGGING HOT KEY GESTURE WE CAN DO. I'M NOT DE-BUGGING THIS IN STUDIO.

WE DON'T SUPPORT DE-BUGGING IN VISUAL STUDIO FOR BLAZER WEB ASSEMBLY APPS. WE WILL IN THE FUTURE. YOU CAN DO THIS TRICK. YOU WILL HIT SHIFT ALT-D. THAT'S GOING TO TRY TO BRING UP THE BROWSER TOOLS TO CONNECT TO THE TAB. FOR THAT TO WORK, WE HAVE TO RUN THE BROWSER WITH REMOTE DE-BUGGING ENABLED, WHICH I DON'T HAVE IT DOING. IT'S TELLING ME HOW I CAN RESTART IT. I WILL CLOSE DOWN THE BROWSER. I'M GOING TO RUN THE COMMAND THAT IT TOLD ME TO DO TO RESTART THE BROWSER WITH REMOTE DE-BUGGING ENABLED. NOW I SHOULD GET THE BROWSER TOOLS THAT CAN CONNECT TO MY TAB.

THERE WE GO. LET'S PUT THIS SIDE BY SIDE WITH THE TAB I WANT TO DE-BUG. WE HAVE SOME FILES OPEN. LET'S CLOSE THOSE. IN THE SOURCES TAB, WE CAN SEE DOWN HERE — WE CAN ACTUALLY TAKE A LOOK AT ALL OF OUR — GIVE MYSELF MORE SPACE. ALL OF THE FILES THAT ARE IN OUR APPLICATION. THERE'S BLAZER WEATHER CORE. WHAT DO WE WANT TO LOOK AT? LET'S LOOK AT THE TEMPERATURE UNIT PICKER. PEN THAT FILE UP. WE CAN SET A BREAK POINT RIGHT HERE ON THE CLICK HANDLER WHEN THE TEMPERATURES CHANGE. LET'S GO HEAD AND GET THE CURRENT LOCATION BACK UP ON THE SCREEN SO WE CAN CHANGE THE TEMPERATURE UNIT.

CLICK. WE HIT A BREAK POINT IN C SHARP IN THE BROWSER RUNNING ON TOP OF A WEB ASSEMBLY BASED DOT NET WEB TIME. WE CAN LOOK AT LOCAL FIELDS IN OUR COMPONENT. CURRENTLY, THE TEMPERATURE WAS FAHRENHEIT. LET'S LET THE APP CONTINUE. IF WE CLIP THE TEMPERATURE UNIT THICKER, IT SHOULD SAY IT'S CHANGED. IT LOOKS LIKE WE'RE GOOD. THE TEMPERATURE IS CELSIUS. WE DE-BUGGED OUR BLAZER WEB ASSEMBLY APP. THAT'S COOL. WE WILL LET THAT RUN. THAT'S BLAZER WEB ASSEMBLY. WE CAN USE SOME OF THE MORE MODERN WEB STANDARDS IN OUR BLAZER WEB ASSEMBLY APP TO MAKE IT EVEN MORE NATIVE LIKE. APPS LIKE THIS ARE TYPICALLY CALLED PROGRESSIVE WEB APPS OR PWAs. A PWA IS JUST A WEB APP. BUT IT USES MODERN WEB STANDARDS TO ENABLE THINGS LIKE OFFLINE SUPPORT. YOU ADD A SERVICE WORKER SO FILES CAN BE CACHED AND USED WHEN THE BROWSER IS NOT CONNECTED. SUPPORT FOR PUSH NOTIFICATIONS. PWAs TEND TO — ARE FAST AND RESPONSIVE.

THEY HAVE THE NATIVE APP LIKE FEEL. THEY CAN EVEN BE OS INSTALLABLE. YOU CAN PIN THEM TO YOUR HOME SCREEN ON YOUR PHONE OR ON WINDOWS 10, YOU CAN INSTALL THEM SO THEY CAN BE RUN FROM YOUR START MENU. WE CAN TAKE OUR BLAZER WEB ASSEMBLY APP AND TURN IT INTO A PWA. LET'S DO THAT. WE HAVE GOT IT RUNNING. WE LOOK AT THE TOP WITH OUR BLAZER WEB ASSEMBLY APP, YOU CAN SEE THERE'S A COUPLE ICONS UP THERE. THIS ONE SAYS INSTALL — INSTALL BLAZER WEATHER AS A PWA. THAT'S BECAUSE THE BROWSER AND WINDOWS 10 IS DETECTING THIS IS A PROGRESSIVE WEB APP. IF I CLICK THAT, LET'S GO AHEAD AND INSTALL.

NOW WE SEE OUR BLAZER WEB ASSEMBLY APP BUT IT'S IN A NATIVE SHELL WITH ALL THE SAME FUNCTIONALITIES. STILL WORKS. WE CAN FIND NEW LOCATIONS. WE CAN GET THE LOCATION BY GEO LOCATION. WE CAN SEE ON THE START SCREEN OF MY WINDOWS 10 BOX THERE IS MY BLAZER WEATHER APP. IT HAS A NICE ICON SO THAT IT SHOWS UP IN THE START MENU. THAT'S PRETTY COOL. THAT'S A BLAZER PWA. HOW DID WE ENABLE THIS? IF WE GO BACK TO CODE AND LOOK AT HOW THIS WAS IMPLEMENTED, IN THE WWW ROOT FOLDER, WE CAN SEE THERE'S A SERVICE WORKER THAT WAS ADDED TO THIS APPLICATION. THIS SAY PIECE OF JAVA SCRIPT THAT ENABLES CACHING. THERE'S THIS MANIFEST FILE WHICH SPECIFIES ICONS THAT CAN BE USED. THAT'S A BLAZER PWA. STARTING TO LOOK MORE NATIVE.

IT HAS A NATIVE SHELL. IT CAN RUN FROM THE START MENU. LET'S CLOSE THAT. HYBRID APPS ARE NATIVE APPS THAT RUN NATIVELY ON THE DEVICE. THEY HAVE ACCESS TO ALL THE NATIVE CAPABILITIES OF THE DEVICE. THEY USE WEB TECHNOLOGIES FOR RENDERING THEIR UI. FOR EXAMPLE, YOU MIGHT HAVE A MOBILE APPLICATION THAT'S RUNNING NATIVELY BUT IT'S USING A WEB VIEW FOR RENDERING ALL OF ITS USER INTERFACE. YOU CAN HAVE AN ELECTRON APPLICATION. IT'S USING AN EMBEDDED CHROMIUM SHELL TO HANDLE ALL OF ITS USER INTERFACE. LET'S SEE IF WE CAN BUILD BLAZER HYBRID APPS AS WELL. WE HAVE BEEN DOING SOME EXPERIMENTS IN THIS SPACE. LET ME GO BACK TO VISUAL STUDIO. HERE IN MY THIRD PROJECT, WE HAVE A BLAZER WEATHER ELECTRON APP. I WILL SET THIS AS THE START OF THE PROJECT. WE WILL RUN IT.

IT'S USING THE SAME COMPONENTS AS BEFORE. NOW INSTEAD OF RUNNING AS A WEB APPLICATION, IT'S GOING TO RUN IN AN ELECTRON SHELL. IT'S A NATIVE SHELL LIKE WE HAVE ALL THE ACCESS TO THE NATIVE CAPABILITIES OF ELECTRON. THE SAME FUNCTIONALITY STILL WORKS.pLET'S SEE WHAT THE WEATH LIKE IN NEW YORK. WE CAN GET THE CURRENT LOCATION AND SO FORTH. WE HAVE ALL OF OUR PIN SITES. THIS APP IS INTERESTING.pIT'S N. THE BLAZER WEB ASSEMBLY APP, THAT WAS WEB ASSEMBLY BASED. THEY WERE LIMITED BY THE BROWSER SECURITY SAND BOX. PEOPLE ASK ME ABOUT BLAZER WEB ASSEMBLY APPS. WHEN THEY SEE DLS BEING DOWNLOADED AND ASK, IS THAT OKAY, IS THERE ANY SECURITY ISSUE THERE, THE ANSWER IS NO BECAUSE THE CODE THAT'S BEING EXECUTED IS BEING EXECUTED USING THAT DOT NET WEB ASSEMBLY RUN TIME. IT CAN'T DO ANYTHING MORE THAN WHAT NORMAL JAVA SCRIPT COULD DO.

CAN'T DO ANYTHING MORE. CAN'T DO ANYTHING LESS. IT HAS ALL THE CAPABILITIES OF WHAT JAVA SCRIPT CAN DO BUT NO MORE. IT'S SAFE. IN THIS CASE, WE ARE RUNNING ON ELECTRON. AN ELECTRON APP, THE DOT NET COAT IS RUNNING IN A NORMAL ORE PROCESS. THAT DOES ACTUALLY HAVE FULL ACCESS TO THE NATIVE CAPACITIES OF THE MACHINE. BASICALLY WHAT WE HAVE HERE IS A NATIVE DESK-TOP APP WITH THE UI BUILT USING WEB TECHNOLOGY, BUILT USING DOT NET.

THIS WILL RUN ON WINDOWS AND MAC. THAT'S AN EXAMPLE OF WHAT A BLAZER HYBRID APP MIGHT LOOK LIKE FOR DESK-TOP SCENARIOS. THEY THIS IS SOMETHING WE'RE INVESTIGATING. IF YOU WANT TO PLAY AROUND, I THINK I HAVE THIS ALL SET UP. LET'S SEE IF THIS IS LIFE. I THINK I SET THIS UP THIS MORNING. THERE I GO. THIS WILL TAKE YOU TO OUR LABS. WE HAVE AN EXPERIMENTAL PROJECT WE'RE WORKING ON THAT INTEGRATES BLAZER WITH ELECTRON. THERE'S A SIMPLE YOU CAN TRY OUT. THE LAST STOP ON OUR SPECTRUM FROM WEB TO NATIVE IS GOING — FIRST WE SKIP PAST THE HYBRID SCREEN.

GOING FULL NATIVE. ACTUALLY, HAVING A NATIVE APP BUT INSTEAD OF USING WEB UI OR WEB TECHNOLOGY TO RENDER THE UI, WE USE NATIVE CONTROLS. SO THAT WE CAN LEVERAGE THE NATIVE CONTROLS OF THE DEVICE. IN IS AN AREA THAT WE ARE INVESTIGATING AND EXPERIMENTING WITH. I DON'T HAVE A LIVE DEMO FOR THIS AREA. BLAZER WAS ARCHITECTED FROM THE BEGINNING SO THAT ITS RENDER WAS EXTE EXTENSIBLE. YOU USE BLAZER TO BUILD WEB APPLICATIONS. THE RENDER KERER CAN BE REPLACE. YOU MIGHT RENDER INSTEAD TO NATIVE CONTROLS. THERE'S A COOL DEMO THAT IS JUST A TECH DEMO. IT'S NOT ANYTHING WE HAVE PLANS TO SHIP. STEVE DID EARLIER THIS YEAR. WHAT HE DID IS HE TOOK THE BLAZER RENDERER, HE REPLACED IT WITH A RENDER THEY'RE COULD RENDER TO NATIVE FLUTTER CONTROLS.

HE WAS ABLE TO BUILD A FLUTTER APP USING BLAZER. WRITING HIS CODE IN C SHARP. YOU CAN SEE STEVE DEMO THAT CAPABILITY. THIS IS NOT SOMETHING THAT WE ACTUALLY PLAN TO SHIP. IT SHOWS YOU WHAT IS POSSIBLE WITH THE BLAZER MODEL. THIS IS VERY SIMILAR IN NATURE TO WHAT YOU TYPICALLY WRITE WITH APPLICATIONS THAT ARE USING TECHNOLOGIES LIKE ZAMRON OR REACT NATIVE. THESE ARE APPLICATIONS THAT RUN NATIVELY OPE LY ON THE DEVICE. WE ARE LOOKING AT — COULD WE DO SOMETHING SIMILAR WITH BLAZER? HAVE A BLAZER NATIVE THAT DOES A VERY SIMILAR THING? NOTHING TO SHARE THERE YET.

IT'S AN AREA WE ARE CURRENTLY LOOKING AT. THIS IS WHAT THE ROAD MAP LOOKS LIKE FOR BLAZER. BLAZER SERVER IS AVAILABLE TODAY. IT'S SUPPORTED IN DOT NET CORE 3.0. YOU CAN DO THAT RIGHT NOW. GO AHEAD AND DOWNLOAD IT, INSTALL IT. YOU CAN START ADDING RICH INTERACTIVITY TO YOUR APPLICATIONS. BLAZER WEB ASSEMBLY, WE ANNOUNCED EARLIER THIS WEEK WILL SHIP NEXT YEAR. WE'RE TARGETING MAY OF NEXT YEAR.

WE WILL SEE MORE PRO GGRESS IN E MONTHS AHEAD. WE ARE STARTING WORK ON BLAZER HYBRID APPS. YOU SHOULD EXPECT TO SEE PREVIEWS OF THAT FUNCTIONALITY IN SOME OF THE DOT NET 5 PREVIEWS THAT WILL BE COMING UP SHORTLY. DOT NET 5 IS EXPECTED TO SHIP IN NOVEMBER OF NEXT YEAR. HOPEFULLY, WE WILL HAVE PWA SUPPORT AND ELECTRONS SOONER THAN THAT.

IF YOU WANT TO PLAY AROUND WITH THEM, THERE ARE NICE COMMUNITY PROJECTS YOU CAN DOWN. >> Dale: DOWNLOAD AND INSTALL. BLAZER NATIVE IS AN AREA WE ARE EXPERIMENTING WITH. THAT IS THE FUTURE OF BLAZER. I HOPE YOU ENJOY THE THINGS YOU SAW. I HOPE YOU ARE EXCITED ABOUT THEM. GIVE THEM A TRY. TRY OUT BLAZE WE ARE A SAMPLE. GI GIVE US FEEDBACK. THERE'S NO TIME LIKE THE PRESENT. MAKE SURE YOU ARE USING THE BITS AVAILABLE. THIS IS A BUNCH OF USEFUL RESOURCES THAT YOU CAN GO LOOK AT TO GET STARTED WITH BLAZER. GO TO BLAZER.NET TO FIND THE DOCUMENTATION. YOU CAN GET THE BITS AT THE DOT NET. MAKE SURE YOU GET VISUAL STUDIO IF YOU ARE ON WINDOWS. YOU WILL WANT TO GET THE LATEST RELEASE. WE HAVE A WONDERFUL BLAZER WORKSHOP IF YOU WANT TO LEARN TO PROGRAM WITH BLAZER. PARTICIPATE IN THE COMMUNITY. THEY HAVE A LOT OF GREAT FOLKS LIKE CHRIS WHO DID THE PROJECT AND OTHERS THAT ARE BUILDING WONDERFUL JAVA SCRIPT LIBRARIES AND COMPONENT LIBRARIES.

I WILL TURN THE REMAINDER OF THE TIME OVER TO QUESTIONS. >> THANK YOU. >> CHECK THIS OUT. >> THAT'S AWESOME. I LOVE THAT. THANK YOU SO MUCH. WE HAVE A LITTLE SPECIAL SURPRISE. >> WHAT? ANOTHER SURPRISE? >> WALK OVER AND LET'S GET THIS OVER THERE. >> I WANT EVERYBODY THAT'S WATCHING TO KNOW THIS IS DAN'S 15-YEAR ANNIVERSARY AT MICROSOFT. >> IT IS. >> BLAZER WOULDN'T EXIST WITHOUT DAN. >> A LOT OF PEOPLE. A LOT OF PEOPLE. >> I WANT TO GIVE YOU THIS GIFT. THIS IS A PILLOW. WHAT'S BETTER IS IF YOU SWIPE UP. >> OH, MY GOODNESS. >> LOOK AT THAT. IS THAT SPECTACULAR? >> SPECTACULAR.

>> ARE THESE BEING FABRICATED AT LARGE? I WOULD LOVE TO LAY MY SWEET HEAD ON THAT. >> THIS LOOKS LIKE A ONE OF A KIND THING. >> CONGRATULATIONS. >> THANK YOU VERY MUCH. IT'S BEEN A GOOD 15 YEARS. TO THE NEXT 15 YEARS. >> YES. FANTASTIC. >> THANK YOU. >> CAN I BORROW THAT PILLOW FOR A COUPLE OF WEEKS? NO? THIS GOT AWKWARD REAL QUICK. I'M SO SORRY. >> WE PROBABLY HAVE A TON OF QUESTIONS. LOTS OF PEOPLE TWEETED YOU IN YOUR NEW JACKET. THAT'S SWEET. DO YOU WANT TO — >> LET'S GO IT. LET'S START FROM THE LEFT. WE WILL GET THIS QUESTION HERE. WILL BLAZER BE A GOOD CLOSE FOR ENTERPRISE LEVEL WEB APPS THAT NEED SCALEABILITY? >> THAT'S WHAT IT'S BUILT FOR. THAT'S WHAT IS SHIPPING TODAY. THAT'S WHAT IS SUPPORTED. SUPPORTED FOR A LARGE ENTERPRISE APPLICATION.

I THINK WE THINK OF BLAZER AS BEING PARTICULARLY WELL SUITED TO ENTERPRISE APPS FOR LINE OF BUSINESS APPLICATIONS. YES, IT IS READY. >> THE ANSWER IS YES. WHAT ELSE DO WE HAVE HERE? WHAT ABOUT THIS ONE? HOW DO USERS UPDATE NEW BUILD VERSIONS IN A BLAZER PWA? >> UPDATES. >> NEWER VERSIONS IN A PWA. I BELIEVE THAT'S MANAGED BY YOUR SERVICE WORKER POLICY. I THINK THE INHERENT QUESTION IS WHEN YOU DOWNLOAD A PWA, YOU CAN OFTEN SET UP A SERVICE WORKER SO THAT IT'S AVAILABLE OFFLINE, WHICH IS LIKE CACHES THE FILES. WHEN YOU SET UP THE SERVICE WORKER, I BELIEVE YOU PUT POLICY ABOUT WHEN DOES THE APP GO BACK TO GET THE NEW FILES. I'M SURE THERE'S A WAY WHERE YOU CAN FORCE THE APP TO REFRESH. I THINK THAT'S HOW WOULD YOU DO IT. I WILL DOUBLE-CHECK ON THAT. THAT'S MY CURRENT UNDERSTANDING.

WE HAVEN'T DONE A LOT OF INVESTIGATIONS IN BLAZER IN PWA. WE HAVE DONE EARLY CONCEPTS LIKE YOU SAW TODAY. THIS IS AN AREA THAT I EXPECT YOU WILL SEE US LOOKING MORE INTO THE DOT NET 5 WAVE. >> NEXT QUESTION, ANY UPDATES ABOUT SUPPORTING GRPC WEB FOR BLAZER, ALSO BLAZER NATIVE ON MOBILE? >> THAT'S REALLY INTERESTING. WE SUPPORT GRPC NOW IN DOT NET WORE 3.0. IT DOESN'T WORK FROM A BROWSER. THERE'S A VARIANT OF GRPC YOU CAN USE.

WE DON'T CURRENTLY SUPPORT IT. WE DON'T HAVE CONCRETE PLANS TO SUPPORT IT YET. WE ARE TALKING ABOUT IT AS A POTENTIAL AREA TO INVEST. LET US KNOW IF YOU THINK THAT WOULD BE INTERESTING AND USEFUL. FOR BLAZER NATIVE, WE JUST TALKED A BUNCH ABOUT WHAT WE'RE THINKING FOR BLAZER NATIVE. WE ARE RIGHT NOW IN THE PROTOTYPING AND INVESTIGATING STAGE. IT WAS ARCHITECTED TO SUPPORT NON-WEB NATIVE SCENARIOS WHERE YOU REPLACE ITS RENDER WITH SOME OTHER NATIVE THAT CAN GO TO NATIVE CONTROLS. IT'S VERY SIMILAR TO REACT DID.

REACT MOVED TO SUPPORT NATIVE APPS. BLAZER CAN ABSOLUTELY DO THE SAME THING. WHAT THE ROAD MAP FOR THAT IS WE DON'T KNOW. STILL TBD. >> OKAY. WE HAVE ANOTHER QUESTION. A PWA USING BLAZER, THAT'S FOR NOW, MY QUESTION IS, WHICHU PREFERRED? >> WHICH OFF MECHANISM SHOULD YOU USE WITH A BLAZER APPLICATION? THAT WILL, IN PART, DEPEND ON YOUR HOSTING MODEL. IF YOU ARE HOSTED ON THE SERVER OR IF YOU ARE RUNNING ON WEB ASSEMBLY IN THE CLIENT. REALLY, THE TYPE OF OFF YOU USE WILL DEPEND ON YOUR APP AND WILL DEPEND ON YOUR ENVIRONMENT.

IF YOU ARE RUNNING IN THE CLIENT ON WEB ASSEMBLY, THAT'S LIKE A SPA. YOU USE SPA-STYLE AUTHENTICATION PATTERNS. TYPICALLY THAT MEANS USING AN OPEN ID CORRECT. USE THAT WITH ALL OF YOUR HTP CLIENT REQUESTS. YOU CAN ALSO USES COOKIE-BASED. THAT IS POSSIBLE. BLAZER SERVER APPS, YOU HAVE THE SET OF OFF OPTIONS AVAILABLE. IF YOU ARE WRITING A LINE OF BUSINESS APPLICATION AND YOU HAVE WINDOWS USERS AND YOU WANT TO LET THEM LOG IN, IF YOU ARE WRITING AN APP WHERE THEY NEED TO REGISTR THEIR OWN USER PROFILE AND HAVE PASSWORDS, THEN USING CORE IDENTITY FOR YOUR SUPPORT IS A GREAT OPTION FOR THE WEB SASSEMBLY APPS. >> FANTASTIC. JUST A COUPLE OF PICTURES. THIS ONE TO ME IS — >> THAT'S GREAT. >> IT FEELS LIKE I'M THERE. >> WE ARE THERE LIVE. >> IT'S WONDERFUL. ANOTHER ONE, OF COURSE. >> LOOK BEING SHARP. >> HE DID ANOTHER PICTURE OF ME BUT NOT AS FLATTERING AS THIS ONE.

YOU GOTTA GET MY GOOD SIDE. FOR MORE IMPORTANT QUESTIONS, OBVIOUSLY, CAN THIS BE INTEGRATED WITH AN EXISTING DOT NET FRAMEWORK PROJECT? HOW? >> THAT'S A GREAT QUESTION. COULD YOU USE BLAZER WITH A DOT NET FRAMEWORK APP? BLAZER SERVER IS RUNNING ON ASP DOT NET CORE. SO NO. YOU CAN'T RUN THAT ON A DOT NET FRAMEWORK APP. BLAZER WEB ASSEMBLY IS STATIC FILES. IT DOESN'T CARE WHAT IS ON THE SERVER. IT COULD BE PHP OR WHATEVER ON THE SERVER. TECHNICALLY, I GUESS YOU COULD USE DOT NET FRAMEWORK ON THE SERVE WE ARE A BLAZER WEB ASSEMBLY APP. IT'S BEEN INTEGRATED WITH DOT NET CORE.

IT'S THE FULLIMAGINE IS YOU HAV NET CORE ON THE SERVER, BLAZER WAE WEB ASSEMBLY ON THE CLIENT. THAT'S HOW WE MOSTLY IMAGINE IT BEING USED. TECHNICALLY, IT SHOULD BE DOABLE. >> HERE IS A SUPER AWESOME QUESTION. WHAT DOES IT SAY? >> IS THAT BLAZER'S FUTURE WEB DEVELOPMENT? >> IS BLAZER THE FUTURE WEB DEVELOPMENT? NOT TRYING TO PUT YOU ON THE SPOT. YOU HAVE A PILLOW WITH YOUR FACE ON IT. >> ABSOLUTELY IS. FOR MANY WEB DEVELOPERS. IS IT THE ONLY WAY PEOPLE WRITE WEB APPS GOING FORWARD? SOME PEOPLE ASK, DOES THIS MEAN THAT NO ONE WILL WRITE JAVA SCRIPT AGAIN? NO. THAT'S NOT WHAT BLAZER IS GOING TO DO. THERE WILL BE PEOPLE SKILL WRITING JAVA SCRIPT. PEOPLE WRITING IN ALL SORTS OF DIFFERENT TECHNOLOGIES. WHAT WEB ASSEMBLY DID IS IT ACTUALLY OPENED UP THE DOOR FOR REALLY ANY PLATFORM YOU WANT TO BE USED IN THE BROWSER.

I IMAGINE THERE WILL BE PEOPLE USING PYTHON AND GO AND RUST IN THE BROWSER AS WELL. WE ARE WORKING HARD TO MAKE SURE WE HAVE A GREAT DOT NET FULL STACK WEB DEVELOPMENT STORY. >> HERE IS ANOTHER ONE. THIS IS INTERESTING TO ME. I REMEMBER WHEN THIS WAS INTRODUCED. I SAW SANDERSON DEMO IT TO ME. IT WAS ME. IT WAS DAMION EDWARDS AND FOWLER. HOLY COW. THIS IS RIDICULOUS. THE FIRST THING I THOUGHT WAS, IS THIS THE SAME AS THE OTHER? ANY STATS THAT SHOW PERFORMANCE COMPARISON? >> YEAH. THERE'S A COUPLE DIFFERENT COMPARISONS THAT YOU COULD DO. FIRST OF ALL, IT'S NOT AN APPLES TO APPLES COMPARISON. WE TALKED ABOUT YESTERDAY, BLAZER IS FOR YOUR CLIENT WEB DEVELOPMENT NEEDS.

IT DOESN'T REPLACE MVC. IT DOESN'T EVEN DO THE SAME THINGS THAT MVC AND RAZOR PAGES DO. THOSE ARE SERVER RENDERED TECHNOLOGIES. BLAZER IS MEANT TO BE USED IN THE BROWSER FOR A CLIENT WEB UI. WHEN YOU WANT TO DO A SERVER RENDERING, YOU DO THAT WITH MVC. YOU DON'T DO THAT WITH BLAZER. THERE'S INTERESTING CHARACTERISTICS THAT ARE WORTH MENTIONING.

THE BLAZER IS BASED ON A DIPPING ALGORITHM. YOU RENDER IT. IT'S OPTIMIZED TO BE VERY EFFICIENT. WHEN YOU RUN TONIT ON WEB ASSEM. THERE'S PERFORMANCE USE WITH LOADS ON OUR EXISTING WEB ASSEMBLY RUN TIECME. RIGHT NOW IT'S DOING IL INTERPRETATI INTERPRETATION. IT DOESN'T HAVE A JITTER. THAT CAN BE SLOWER. WE ARE WORKING ON SUPPORTING AHEAD OF TIME COMPILATION. WHICH DOES GIVE YOU BACK THAT NATIVE-LIKE PERFORMANCE. WE HAVEN'T HAD A PREVIEW THAT WAS YET. WE HOPE TO HAVE ONE AS SOON AS WE CAN. THAT WILL HOPEFULLY ADDRESS THE PERFORMANCE PROBLEMS OF RUNNING BLAZER WEB ASSEMBLY IN THE BROWSER. WHEN YOU RUN ON THE SERVER, YOU RUN ON DOT NET CORE. NO PERFORMANCE PROBLEMS AT ALL. >> WE HAVE ONE MORE QUESTION. >> WE HAVE TIME FOR ONE MORE. >> MORE QUESTION. >> WOW, WE HAVE TO PARSE THAT. >> A PERFORATED COMPONENT SERVER SIZE SLASH — SO MANY PIECES HERE. THAT'S WHY IT'S SUCH A GOOD QUESTION. >> I WAY I CHOOSE TO INTERPRET THIS QUESTION — >> YES.

>> YOU ARE WEARING THE JACKET. YOU CAN DO WHATEVER YOU WANT. >> I THINK WHAT THIS IS ASKING IS YOU CAN IMAGINE MAYBE HAVING A MIXTURE OF HOSTING MODELS IN THE SAME APP WHERE THIS COMPONENT WILL RUN ON WEBASSEMBLY BUT THAT COMPONENT WILL RUN ON THE SERVER. MAYBE FOR WHATEVER REASON IT MAKES SENSE TO DO THAT. WE DON'T HAVE A FIRST CLASS WAY OF DOING THAT TODAY. IT IS SOMETHING PEOPLE ASKED US ABOUT. RIGHT NOW YOU EITHER PICK ONE OR THE OTHER. DO BLAZOR WEBASSEMBLY OR BLAZOR SERVER. IT DOESN'T SEEM LIKE THERE SHOULD BE ANYTHING BLOCKING IT. BLAZOR WEBASSEMBLY IS JUST A BUNCH OF STATIC FILES. YOU THROW A BUNCH OF BLAZOR WEBASSEMBLY FILES INTO ITS WWW ROOT FOLDER, IT SEEMS LIKE YOU CAN GET IT TO WORK. BUT I HAVE NOT DONE IT YET. WAS PLAYING AROUND WITH, BUT MAYBE THAT'S SOMETHING WE WILL LOOK AT GOING FORWARD.

>> THIS HAS BEEN AMAZING. WE HAVE COMING UP A SHORT COMMERCIAL BREAK. AFTERWARDS, NO COMMERCIALS. WE WILL GO DIRECTLY TO JEFF HOLLEN, WILL PROBABLY GET US TO THINK ABOUT SERVERS LESS. HIS WORDS. >> THAT IS RIGHT. WHAT AN AMAZING TRANSITION FOR THE BLAZOR POWER HOUR I'M HAVING THIS MORNING. I'M JEFF HOLLEN, PRINCIPAL P.M. ON AZURE FUNCTIONS. TODAY WE'RE GOING TO CONTINUE THE AMAZING CONVERSATION, VERY FLASHY CONVERSATION DANIEL HAD THIS MORNING WITH HIS BLAZOR AND PILLOW AROUND BLAZOR, BOTH SERVERS TIED AND WEBASSEMBLY.

WE'RE ACTUALLY GOING TO APPLY THAT TO A VERY COMMON SCENARIO, WHICH IS RUNNING BLAZOR AND AZURE FUNCTIONS FOR SERVERLESS WEB APPS. TO START WITH, WHAT TO EXPECT FOR THE NEXT HALF HOUR, LET'S START BY TALKING ABOUT WHAT ARE SERVERLESS WEBSITES? WHAT ARE SOME OF THE ARCHITECTURES PEOPLE ARE USING? WHAT ARE SOME OF THE BENEFITS OF WHY PEOPLE WOULD LOOK INTO DOING THIS? WHERE BLAZOR FITS INTO THE STORY, WHERE AZURE FUNCTIONS FITS INTO THE STORY. WE WILL TALK ABOUT HOW YOU DEAL WITH THINGS LIKE DOMAINS AND DELIVERY OF THAT CONTENT AND FINALLY TIME FOR QUESTIONS AND ANSWERS.

TO START WITH, WHEN WE LOOK AT A TRADITIONAL WEB ARCHITECTURE, THE KIND OF WEB APP YOU PROBABLY BUILT BEFORE, HAS BEEN KIND OF THE ONE TALKED ABOUT AS A THREE-TIERED WEB APPLICATION, IT WORKS A LOT LIKE THIS, WHERE YOU HAVE A CLIENT WHO'S GOT THEIR BROWSER AND THEY MAKE A REQUEST TO SOME WEBSITE. IN THIS CASE I HAVE A COOL HIP.NET DOMAIN. LET'S SAY I WANT TO CALL JEFF.HOLLEN.DEV, THAT'S THE WEBSITE I WANT TO GO TO.

THE BROWSER MAKES THAT REQUEST. THAT REQUEST TRAVELS ACROSS THE INTERNET AND ENDS UP LANDING ON SOME SERVER. THAT SERVER IS RUNNING SOME CODE, RIGHT? MAYBE THIS IS AN ASP.NET HAPPEN, MAYBE A NODE APP RUNNING EXPRESS. IT DOESN'T MATTER, JUST THE ARCHITECTURE I WANT YOU TO BE AWARE OF. IT'S GOING TO LAND ON THAT SERVER AND THAT SERVER'S GOING TO PROCESS THE REQUEST. MAYBE IT HAS SOME THINGS LIKE RAZOR FILES, HTML ASSETS AND IMAGES AND THE SERVER IS GOING TO RENDER INDEX.HTML PAGE AND TURN THAT PAGE BACK TO THE BROWSER AND BROWSER PRETTY MUCH JUST PAINTS IT FOR YOU, RIGHT? THIS IS THE TRADITIONAL WEB ARCHITECTURE. YOU HAVE YOUR BROWSER, YOU HAVE A SERVER RUNNING CODE.

MAYBE TALKING TO A DATABASE BEHIND THE SCENES. AND THIS IS A FINE ARCHITECTURE. IT DOES HAVE SOME LIMITATIONS. ONE OF THE LIMITATIONS IS I NEED A SERVER THERE. IN THIS CASE JEFF.HOLLEN.DEV. THAT MIGHT BE MY PERSONAL WEBSITE. I'M NOT A SUPER POPULAR GUY. I DON'T REALLY NEED A SERVER RUNNING 24/7 TO PROCESS THOSE REQUESTS.pBUT IN THIS ARCHITECTD TO HAVE A SERVER RUNNING ALL OF THE TIME READY TO PROCESS THOSE REQUESTS. SO I'M PLAYING A DOZEN, MAYBE $20, $30 A MONTH ON A WEBSITE GETTING A FEW HITS A WEEK. ON THE OTHER SIDE MAYBE I HAVE SOME TRAFFIC THAT IS INCREDIBLE LOAD. MAYBE I ACTUALLY NEED TO SCALE OUT. AND WITH THIS THREE-TIERED ARCHITECTURE, I HAVE TO SCALE OUT ALL OF THESE SERVERS BECAUSE AS I GET ALL OF THESE BROWSERS THAT ARE COMING, I GET THOUSANDS OF BROWSERS WHO ALL NEED THEIR RENDERED VERSION OF THE HTML PAGE AND PROCESSED IN THE SERVE AND RETURNED BACK.

I HAVE TO NOW SCALE LARGE SERVERS, WHICH CAN BE A CUMBERSOME PROCESS WHEN I NEED TO THEN SERVE THIS FOR HIGH TRAFFIC. NOW LET'S TALK A LITTLE BIT ABOUT A SERVERLESS WEB APP ARCHITECTURE. AND HOW YOU CAN WRITE APPS IN A SERVERLESS WAY. IT STARTS THE SAME. YOU HAVE THE USER AND BROWSER AND THEY SAY I WANT TO GO TO JEFF.HOLLEN.DEV. BUT IN THIS CASE INSTEAD OF HITTING A SERVER, THEY JUST HIT SOME FILES IN STORAGE. SO IT'S LIKE PULLING DIRECTLY FROM A STORAGE ACCOUNT. YOU CAN ALMOST THINK IF I OPEN ONE DRIVE AND GET A LINK AND CLICK THAT LINK, THAT'S ALL I'M DOING. I'M JUST ROUTING THE REQUEST TO SAY GO PULL IN SOME FILES. THE STORAGE ACCOUNT IS GOING TO RETURN BACK AND INDEX THAT HTML PAGE AND SOME CODE THAT HE NEEDS TO BE RENDERED ON THE BROWSE ESH.

IN THIS CASE SINCE THERE'S NO SERVER RENDERING THE PAGE, WHAT I'M ACTUALLY RELYING ON IS THE BROWSER TO RENDER THAT PAGE FOR ME SO ALL OF THE CODE, ALL OF THE LODGE TOIK DRAW THE ELEMENTS, UNDATPDATE THE ELEMEN NOW NEEDS TO RUN ON MY BROWSER. I JUST HAVE ARE THIS STORAGE ACCOUNT WITH STATIC ASSETS. THIS IS A POPULAR ARCHITECTURE BECAUSE IN MANY WAYS IT'S A LOT LESS EXPENSIVE. I'M NOT PAYING FOR A SERVER. I JUST NEED FILES IN A STORAGE ACCOUNT. I COULD ALSO JUST HAVE THE BROWSER DO ALL OF THE PROCESSING. FOR SCALE-OUT SITUATIONS IT'S VERY NICE TOO. BUT ONE OF THE CHALLENGES WITH THIS ARCHITECTURE IN THE PAST REALLY IT WAS JAVASCRIPT USERS WHO WERE ABLE TO BENEFIT FROM THIS ARCHITECTURE. JAVASCRIPT HAD FRAMEWORKS LIKE REACT AND VIEW AND ANGULAR YOU COULD DO RICH, NATIVE RENDERING ON THE BROWSER. YOU COULDN'T RUN.NET IN THE BROWSER. BUT AS WE TALKED ABOUT THIS WEEK, YOU CAN NOW RUN.NET IN THE BROWSER AND RUN IT IN EDGE OR CHROME OR FIREFOX.

THIS IS RUNNING BECAUSE OF BLAZOR AND WEBASSEMBLY. WEBASSEMBLY IS LIKE AN UNDERLINING UNIVERSAL TECHNOLOGY THAT LETS YOU RUN CODE IN A SAFE WAY. AND BLAZOR IS A PART OF.NET CORE 3. SO.NET DEVELOPERS CAN DEVELOP THESE ARCHITECTURES TOO. IT MIGHT LOOK LIKE THIS. IN THE CASE I DO NEED TO CALL A DATABASE, WHY I COULD WRITE BLAZER CODES THAT CONNECT TO SOMETHING LIKE SQL OR COSMOS BD DIRECTLY, IT MAKES ME FEEL ANTSY TO BE THINKING ABOUT THESE BROWSERS MAKING A DIRECT CONNECTION TO MY DATABASE, SO THE OTHER PATTERN WE OFTEN SEE IN THESE SERVERLESS WEB APPS IS WHEN YOU NEED SOME CODES THAT RUN SERVER SITES LIKE DATABASE CONNECTION OR ANYTHING TO DO WITH DATA REALLY, YOU CAN CALL AN AZURE FUNCTION.

THESE AZURE FUNCTIONS ARE SERVERLESS. SO YOU'RE ONLY PAYING WHEN AN EXECUTION ACTUALLY IS HAPPENING. YOU STILL GET AMAZING SCALE AND COST BENEFITS AND SCALE BENEFITS, BUT YOU COULD STILL p. WHAT'S NICE ABOUT BLAZOR AND AZURE FUNCTIONS THAT I LOVE, I CAN WRITE.NET CODE RUNNING IN MY FUNCTION. I CAN RUN.NET ACROSS THE BOARD. EVEN IF I NEED TO PASS MAYBE A CLASS OR OBJECT FROM THE BROWSER TO AN AZURE FUNCTION, I CAN USE THE SAME CLASS FILE IN BOTH SPOTS. I CAN SHARE CODE BETWEEN THE SERVER AND CLIENT. THIS IS REALLY NICE AND GIVES ME BENEFITS WHEN I NEED TO SCALE, LET'S SAY A MEDAL PEOPLE GO TO JEFF.HOLLEN.DEV, ALL OF YOU WATCHING NOW, WHAT IS AT JEFF.HOLLEN.DEV, MAYBE YOU'RE POKING AROUND NOW, MY FUNCTIONS SCALE AUTOMATICALLY AND MY STORAGE ACCOUNT IS SUPER ELASTIC AS HOW IT SCALES AS WELL.

WHAT'S NICE I MAY NEED THOUSANDS OF RENDERED HTML PAGE, IT'S ALL HAPPENING ON THE BROWSERS. I'M TAKING ADVANTAGE OF THE USERS. MAKING THEM DO THE WORK, THEIR SMARTPHONES AND DESKTOPS AND LAPTOPS ARE RENDERING THE PAGE AND I NEED TO MAKE SURE I SERVE STATIC CONTENT. IT'S A SUPER APPEALING SCENARIO. THIS IS HOW I PERSONALLY RUN MY WEBSITE OR JEFF.HOLLEN.DEV BECAUSE I PAY PENNIES A MONTH, GET AMAZING SCALE AND RUN.NET IN THE BROWSER AND SERVER AS WELL. I WANT TO DEMO THIS TO LET YOU KNOW HOW TO GET STARTED BUILDING SOMETHING LIKE THIS. THE FIRST ONE TO NOTE, I HAVE.NET CORE 3 ON MY MACHINE. TO START USING BLAZOR, I WANT TO MAKE SURE I'VE INSTALLED THE BLAZOR TEMPLATE. HERE'S AT DOCS.MICROSOFT.COM I HAVE TEMPLATES FOR BLAZOR RIGHT HERE I CAN INSTALL AND BE READY TO GO.

LET'S START HERE, I HAVE A FOLDER READY TO GO. I CAN SAY .NEW. SO I PUSH TO CREATE, USING A TEMPLATE TO CREATE A BLAZOR ASSEMBLY APP. LET'S OPEN IT UP IN STUDIO VISUAL CODE NOW SO YOU CAN SEE WHAT THE APP LOOKS LIKE AND SOME OF THE STUFF IT SCAFFOLD FOR US. THIS IS PRETTY FAMILIAR.

YOU PROBABLY ALREADY SAW THIS IN EARLIER DEMOS THIS WEEK AS WELL. I HAVE MY START-UP FILE, WHICH FEELS VERY FAMILIAR TO ME, PROGRAM.CS. I'M ABLE TO INJECT IN SOME DIFFERENT BUILDER AND CONFIGURATION ASPECTS. I HAVE HERE SOME DIFFERENT PAGES. THESE ARE RAZOR PAGES. IN THIS CASE THESE ARE RAZOR PAGES THAT RENDER IN THE CLIMATE. THE HTML PAGE IS PRETTY BORING. THE COUNTEREXAMPLE IS A LITTLE MORE INTERESTING BECAUSE HERE I HAVE SOME CODE AND IT'S GOING TO INCREMENT THE COUNTER USING CURRENT COUNT PLUS PLUS. AND FINALLY FETCH DATA EXAMPLE IS FETCHING SOME DATA FROM AN EXTERNAL SOURCE. MY FAVORITE LINE OF CODE IN ALL OF THIS TEMPLATE TOO IS THIS LINE RIGHT HERE, AND I DON'T KNOW WHY, BUT JUST THE FACT I'M USING HDP CLIENT AND I KNOW MY OLD BUDDY WILL MAKE THIS REQUEST FROM MY BROWSER USING MY CASE ON MAC, IT TICKLES ME.

I LOVE THE CLIENT AND THE FACT I CAN USE IT IN THE BROWSER. HERE I HAVE CLOUDS AND BASIC PAGES HERE. IF I WANT TO AS WELL, LET'S GO AHEFT AND TEST THIS OUT THE WITHOUT MAKING CHANGES. I WILL SAY .NET RUN. IT WILL COMPILE THIS BLAZOR TEMPLATE AND COMPILE IT ALONG RUN CLEANLY IN THE BROWSER AND IN JUST A COUPLE SECONDS IT WILL EXPOSE A LOCAL HOST TO BROWSE AND NAVIGATE TO. RIGHT HERE LOCAL HOST 5000 AND IF I OPEN IT UP HERE C-SHARP APP, NO CODE SERVER SIDE.

IT'S NOT DOING CODE LOCALLY, IT'S COMPILED IT AND HANDED IT OVER TO MY BROWSER AND MY BROWSER IS NOW DOING ALL OF THE WORK HERE THROUGH WEBASSEMBLY. NOW LET'S TALK ABOUT HOW WE CAN START TO CALL SOME DATA UP FROM AN EXTERNAL SOURCE. IN MY CASE I SAID SOMETIMES YOU MIGHT HAVE A DATA BIS, SOMETHING LIKE COSMOS DB OR SQL THAT I DON'T WANT TO CALL DIRECTLY FROM MY WEBASSEMBLY APP. HERE LET'S ADD IN FUNCTION INFORMATION. SINCE WE'RE ALREADY AT THE BLAZOR SIDE, I'M GOING TO START BY CREATING THE BLAZOR ASPECTS TO CALL A FUNCTION. LET'S ADD A NEW PAGE HERE. LET'S CALL IT MY FUNCTION.RAZOR PAGE. AND HERE I'M GOING TO TYPE FASTER THAN A SPEEDING BULLET AND PASTE IN SOME CODE I WROTE BEFORE THAT SAYS HEY, I HAVE A NEW PAGE HERE CALLED FUNCTIONS.

I'M GOING TO GET MY HANDY-DANDY HTP CLIENTS THAT TICKLES ME, AS I MENTIONED BEFORE. AND HERE WHEN I TRY TO INITIALIZE THE PAGE, YOU NOTICE I'M ACTUALLY CALLING AN AZURE FUNCTION. NOW, IN THIS CASE IT'S CALLING A FUNCTION THAT WOULD BE RUNNING IN THE CLOUD. IF I'M DEBUGGING THIS LOCALLY, I COULD CHANGE THIS TO LOCAL HOST AND CALL A FUNCTION THAT'S RUNNING ON MY BOX. AND IT ACTUALLY HAS SOME INFORMATION HERE SO WHILE IT'S WAITING FOR THE FUNCTION TO RESPOND, IT'S GOING TO SAY LOADING. ONCE I GET BACK MY MESSAGE FOR THE FUNCTION, IT WILL AUTOMATICALLY POPULATE THE MESSAGE.

IT WILL BE DYNAMIC AS WELL AND WAIT FOR THOSE RESPONSES. HERE I CAN CALL THAT FUNCTION, LET'S GO AHEAD INTO THE NAVIGATION MENU AS WELL AND I WANT TO MAKE SURE THERE'S A WAY TO NAVIGATE TO THE NEW PAGE. I WILL TYPE THAT QUICKLY AS WELL TOO. NOW I HAVE WHAT COULD BE CODE TO CALL A FUNCTION. WHAT ABOUT MY FUNCTION? WHERE IS THE FUNCTION I CAN CALL? THAT'S SUPER EASY TO SET UP AS WELL. LET'S GO AHEAD AND OPEN UP ANOTHER EMPTY FOLDER CALLED FUNCTION APP. I WILL JUST CREATE A NEW WINDOW FOR VS CODE. I CAN ADD THESE TO THE SAME WORK SPACE. HERE IN VIDEO STUDIO CODE, I HAVE INSTALLED THE AZURE EXTENSION. I CAN DO THIS FROM VIDEO STUDIO 2019 AS WELL BUT SINCE I'M ALREADY IN VS CODE, I WILL JUST STICK WITH IT. LET'S GO AHEAD AND CREATE A BRAND-NEW FUNCTION PROJECT USING THAT FUNCTION EXTENSION. AS I MENTIONED, WHAT I LOVE ABOUT BLAZOR I WANT TO WRITE C-SHARP CLIENT SIDE AND SERVERLESS SIDE.

SO LET'S CHOOSE C-SHARP AS OUR LANGUAGE. THESE ARE APIs SO THEY WILL BE FIGURED BY HTP REQUESTS. I WANT TO CALL THIS MY HELLO FUNCTION. AND I CAN GIVE IT THE NAME SPACW SCAFFOLDING FOR ME AN AZURE FUNCTIONS PROJECT THAT I CAN USE TO RUN ON MY CODE, IN THIS CASE SE SERVER SIDE. THIS IS THE DEFAULT TEMPLATE. IT'S PRETTY GBORING. SAY HEY, GET A REQUEST, PASS THE USER NAME. I CAN ADD CONNECT TO COSMOS DB, A QUERY, RESULTS. IN THIS CASE I WILL SIMPLIFY IT AND SAY RETURN NEW OKAY OBJECT RESULT AND WE WILL JUST SAY HELLO WORLD. HERE IS MY AZURE FUNCTION.

WHEN I'M READY TO GO, I COULD DEBUG THIS LOCALLY. I CAN NOW PUBLISH THIS TO THE CLOUD AND SAY I ACTUALLY WANT THIS CODE TO BE RUNNING IN AZURE SO IT CAN BE CALLED WHENEVER I NEED TO. I HAVE A FUNCTION ALREADY HERE CALLED J.HOLLEN.BLAZOR. AND NOW IT CAN BE CREATED TO RUN IN THE CLOUD AT THE URL I DECIDE. IF I SWITCH BACK OVER HERE, WILL YOU NOTICE I PUBLISHED THE SAME APP AHEAD OF TIME AND SAID HELLO. NOW THAT WE ADDED CUSTOM CODE, WE WILL DO THE SAME THING, .NET RUN. IT WILL COMPILE THE APP, CREATE THE WEBASSEMBLY BRIDGE, PASS THE CON TENT FROM MY FILES TO BROWSER IN A SECOND, AND ON UP AGAIN THE SAME DATA AS BEFORE BUT HERE'S MY AZURE FUNCTION TAB. WHEN I CLICK THIS, YOU WILL NOTICE IT SAYS LOADING FOR A SECOND IF YOU CAUGHT IT. IT SAID LOADING WHILE IT WAS MAKING THAT CALL. AS SOON AS IT GOT THE CALL BACK, IT SAYS THE MESSAGE IS HELLO. SO THE CALL UP FUNCTION, FUNCTION TURNS DATA, IN THIS CASE A STRING, BUT I COULD VERY EASILY REPLACE THIS WITH DATA FROM SQL AS WELL.

FOR THE LAST PART OF THIS I WANT TO SHOW, NOW THAT I HAVE THIS RUNNING LOCALLY, HOW DO I GET IT SO IT CAN ACTUALLY BE ACCESSED FROM SOMEWHERE THAT'S NOT LOCAL HOST 5000? I SAID BEFORE IT NEEDS TO BE IN A STORAGE ACCOUNT SO HOW DO I GET THIS INTO A STORAGE ACCOUNT? THIS IS MY FAVORITE PART OF THIS ENTIRE DEMO BECAUSE IT COULD NOT BE EASIER. I'M IN VISUAL STUDIO CODE ALREADY. I MENTIONED BEFORE I HAVE THE AZURE FUNCTIONS EXTENSION ALREADY INSTALLED. LET ME SHOW YOU ONE — NOT TASK, I'M SORRY, LET ME SHOW YOU ANOTHER EXTENSION INSTALLED. I HAVE A LOT OF EXCEPTIONS BECAUSE I LOVE THE S CODE. IN ADDITION TO THE AZURE FUNCTIONS EXTENSION, I HAVE THE AZURE STORAGE IS EXTENSION. WHICH WILL VIDEO STORAGE CODE KNOW HOW TO TALK TO A STORAGE ACCOUNT. WITH THIS EXTENSION, I CAN GET A ONE-CLICK PUBLISH TO A STORAGE ACCOUNT. FIRST I NEED TO GENERATE THE BITS I NEED TO PUBLISH. RIGHT NOW I HAVE BEEN DEBUGGING.

HOW DO I GENERATE THE STATIC CONTENT I NEED TO UPLOAD TO THE STORAGE ACCOUNT? IF YOU'RE FAMILIAR WITH THE .NET CLI, THE NEXT COMMAND WILL BE FAMILIAR. IT'S REALLY JUST .NET PUBLISH. I'M SAYING PUBLISH ME A RELEASE. THIS ISN'T FOR DEBUGGING ANYMORE. I WILL DEFINE MY OWN OUTPUT FOLDER. I WILL JUST USE PUBLISED FOLDER OR DEFAULT IF I WANTED TO. WHEN I RUN, THAT IT WILL COMPILE MY APP AS WELL AND CREATE A RELEASE PROFILE FOR IT AND STICK IT IN A FOLDER I JUST DEFINED CALLED PUBLISH.

IF I COME HERE ONCE THIS IS DONE COMPILING, YOU WILL NOTICE I HAVE A NEW FOLDER CALLED PUBLISH. AND I OPEN UP PUBLISH, IT'S GOT ALL OF MY BITS HERE. YOU MIGHT BE WONDERING WHAT ARE THE FILES I NEED TO COPY TO MY STORAGE ACCOUNT? THERE'S WEB CON FIG, DLLs HERE. THE ANSWER IS RIGHT HERE, YOU SEE THE FOLDER DISTRIBUTION, THIS IS THE FOLDER TO COPY AND STATE INTO THE STORAGE ACCOUNT.

YOU WILL NOTICE THE INDEX HTML PAGE, STATIC AND RETURNS, PRETTY BORING PAGE. IT PRETTY MUCH SAYS LOAD UP ALL OF THE ASSEMBLY STUFF. IT HAS MY BIN FOLDER WITH MY DLLs. SO THIS FOLDER IS THE ONE I NEED TO GET INTO THE STORAGE ACCOUNT. I MENTIONED THIS IS THE FAVORITE PART OF MY DEMO, CHECK THIS OUT. I WILL RIGHT CLICK THIS FOLDER AND BECAUSE I HAVE THAT AZURE STORAGE EXCEPTION, IN VS CODE I HAVE THIS ONE CLICK GESTURE RIGHT HERE WHICH IS DEPLOY TO STATIC WEBSITE. NOW REALLY ALL IT'S DOING IS GOING TO COPY THIS FOLDER AND COPY IT INTO A AZURE STORAGE ACCOUNT FOR ME AND CONFIGURE THE AZURE STORAGE ACCOUNT SO IT CAN SERVE WEB CONTENT. SO I CAN DO THIS MANUALLY, THROUGH AZURE DevOPS IF I WANTED TO. BUT FOR GETTING STARTED I LIKE TO SAY, YOU KNOW WHAT, DEPLOY A STATIC WEBSITE. HERE IT'S GOING TO ASK ME TO CREATE A NEW STORAGE ACCOUNT OR SELECT AN EXISTING ONE. I ALREADY HAVE A STORAGE ACCOUNT CALLED J. HOLLEN WEBSITE SO I WILL SAY PUBLISH TO THAT ONE. LET'S GO AHEAD AND TELL IT TO DEPLOY.

SO YOU NOTICE HERE IT SAYS COPYING OVER THOSE 49 FILES INTO THE WEB FOLDER OF THIS STORAGE ACCOUNT. SO AS IT COPIES THOSE FILES OVER, IT JUST TAKES A SECOND. NOW ALL OF THOSE FILES HAVE BEEN COPIED AND HERE I CAN GO TO J HOLLEN WEBSITE.G5. AND THAT'S EASY ON A BUSINESS CARD. AND THE STORAGE ACCOUNT NOW RETURNED TO ME BACK ALL OF THE STATIC CONTENT I HAVE BEEN ABLE TO RENDER INTO THIS BLAZOR PAGE. THIS IS NO LONGER LOCAL HOST 5000, THIS IS NOW MY STORAGE ACCOUNT RUNNING IN THE CLOUD. IN FACT IF I COME OVER TO MY STORAGE ACCOUNT, THERE'S NOT ONE OPENED UP. LET'S USE MY STORAGE ACCOUNT PREVIEW IN MY ACCOUNT, THE DISK FOLDER, RIGHT? ALL I HAVE POINTED TO IS I CONFIGURED THE STORAGE ACCOUNT TO DO, STATIC WEBSITE HOSTING. I TURNED THIS ON. GIVES ME A NICE END POINT. AND VISUAL STUDIO CODE WENT AND COPIED ALL OF MY FILES INTO THIS FOLDER IT CREATES FOR WEB HOSTING.

ALL THAT'S HAPPENING IS MY BROWSER MAKES A REQUEST TO THIS DOMAIN AND MY BROWSER RETURNS BACK THIS INDEX TO RENDER THE PAGE. NO SERVER ANYMORE, JUST STORAGE. NOW, THE LAST THING I WANT TO TALK ABOUT — AGAIN, I'M NOT IN LOCAL HOST ANYMORE BUT I'M NOT REALLY AT A NICE DOMAIN. I'M AT J HOLLEN WEBSITE.G.NET AND YOU CAN BROWSE TO IT AND IT WILL WORK BUT IT'S NOT A WEBSITE FOR A BLOG. YOU WILL REMEMBER THE ONE I WANTED WAS JEFF.HOLLEN.DEV IS THE ACTUAL WEBPAGE I WANTED, RIGHT? YOU WILL NOTICE HERE WHEN I GO TO THAT, I ACTUALLY DO HAVE JEFF.HOLLEN.DEV SET UP, CALLING MY AZURE FUNCTION AND IT EVEN HAS A BEAUTIFUL CERTIFICATE.

SO THE LAST THING I WANT TO TALK ABOUT IS HOW DID I PULL THAT PART OUT? HOW DID I GET A STORAGE ACCOUNT TO WORK WITH A CUSTOM NAMED LIKE JEFF.HOLLEN.DEV? THE OTHER ASPECT IF YOU'RE GOING TO SET THIS UP FOR YOURSELF, AND THERE ARE GREAT DOCS AND EXAMPLES AS WELL, IN AZURE I HAVE A FEW RESOURCES THAT ARE HELPING ME OUT. FOR ONE I'VE HOSTED ANY DNS RECORDS INSIDE OF AZURE. I HAVE HOLLEN.DEV, IT'S A REGISTERED DOMAIN IN MY ACCOUNT. AND I TOLD IT — I APOLOGIZE, MY ZOOM IS AGGRESSIVE AS I'M ZOOMING IN AND OUT. I HAVE ACTUALLY TOLD IT WHEN I GO TO HOLLEN.DEV I CONFIGURE THIS TO ROUTE TO AZURE FRONT DOOR.

SO AZURE FRONT DOOR IS KIND OF LIKE A CDN PLUS PLUS SERVER FOR AZURE. I CAN ALSO SERVE THIS DIRECTLY TO CDN. I HAVE EVEN ADDED OTHER C NAMES TOO SO I CAN GO TO JEFF.HOLLEN.DEV OR CALL MY FUNCTIONS. AND I HAVE DNS HERE AND I MENTIONED THE AZURE FRONT DOOR. THIS IS WHAT GIVES ME CUSTOM DOMAINS. SO AT MY AZURE FRONT DOOR, WHICH IS KIND OF THE DELIVERY NETWORK RESOURCE, I HAVE TOLD IT TO SERVE RESOURCES FOR REQUESTS TO HOLLEN.DEV, JEFF.HOLLEN.DEV, FUNCTIONS.HOLLEN.DEV. I SET UP ROUTING RULES SO IT WILL REDIRECT ALWAYS TO HDTPS, FRONT DOOR GIVES ME CERTIFICATES SO I REDIRECT IT IF YOU GO TO HOLLEN.DEV IT WILL REROUTE YOU TO JEFF.HOLLEN.DEV BECAUSE I'M VAIN AND I WANT MY FULL NAME IN THE URL AND NOT JUST MY LAST NAME.

THERE ARE A FEW OTHER HELPER RESOURCE IT'S YOU'RE STARTING TO BUILD THESE ARCHITECTURES, THAT RESOURCE GROUP I WAS SHOWING YOU HERE, THIS IS ALL I NEEDED. SO I HAVE MY FUNCTION APP, I HAVE MY DNS RECORDS, I HAVE MY AZURE FRONT DOOR, I HAVE APPLICATION INSIGHTS TO MONITOR THE HEALTH. AND THAT'S REALLY EVERYTHING THAT I NEED TO GET STARTED IN HOSTING MY NEW BLAZOR APPS. HOPEFULLY YOU GET A SENSE HOW YOU CAN GET STARTED USING TOOLS LIKE VISUAL STUDIO, VISUAL STUDIO CODE, CREATE A SERVERLESS BLAZOR APP.

AND WHY THIS IS FUN FOR THINGS LIKE BLOGS, MAYBE WHERE I WILL FINISH TOO IS WE ALSO SEE PEOPLE USING THIS FOR BIGGER SCENARIOS, RIGHT? SO ONE OF THE THINGS — I'LL LEAVE THIS PAGE UP HERE ON LEARNING MORE. ONE OF THE COOLEST SCENARIOS WE RAN INTO ACTUALLY ABOUT A YEAR AGO IS WE HAD A LARGE RETAILER WHO WAS RUNNING A MASSIVE PROMOTION. THEY NEEDED TO SERVE LIKE 10,000 REQUESTS A SECOND BECAUSE THEY WERE GOING TO BE GIVING A HUGE, HUGE DEAL. THEY WERE WORRIED BECAUSE THEIR WEBSITE TRADITIONALLY WAS THIS MASSIVE WORDPRESS SITE. IT'S REALLY HARD FOR US TO SCALE THAT OUT TO HANDLE 10,000 REQUESTS A SECOND.

SO WHAT THEY DID IS THEY TOOK JUST THE PAGE THAT WAS GOING TO BE HIT WITH THE PROMOTION, THEY MADE THAT PAGE INTO THIS SERVERLESS WEB ARCHITECTURE WHERE THEY HAD AZURE KRFRMT DN, STORAGE, FUNCTION. THIS WAS BEFORE BLAZOR SO THEY WERE USING JAVASCRIPT BUT THE WORLD STILL LIVES THE SAME, LIKE THE TRUTH OR DARE. BUT THEY WERE ABLE TO RUN THIS MASSIVE PROMOTION. THIS PAGE SCALED DRAMATICALLY AND THE NUMBER OF HITS IT HAD AND THE REST COULD GO BE HAPPY AT THE WORDPRESS SITE. THIS IS AN INTERESTING PATTERN TO BE AWARE OF. I ENCOURAGE YOU TO TRY IT OUT FOR YOUR OWN BLOGS OR TRY ASPECTS OF THE WEBSITE AS SERVERLESS ARCHITECTURE. IF YOU WANT TO LEARN MORE ABOUT BLAZOR, CHECK OUT BLAZOR.NET, TEMPLATES ON GETTING STARTED, FUNCTIONS PAIR GREAT WITH IT. AND THANK YOU ALL VERY MUCH FOR JOINING. WE WILL SEE NOW SETH IF WE HAVE ANY QUESTIONS THAT HAVE COME IN ALONG THE WAY. >> WE DO ACTUALLY HAVE SOME QUESTIONS. >> I'M GLAD. >> BY THE WAY, WELL DONE. >> THANK YOU. >> I'M ALWAYS IMPRESSED WITH THIS DUDE. SUCH A GOOD PRESENTER.

LET'S START WITH THIS, ARE YOU READY? NO MATTER WHAT YOU USE WITH AZURE FUNCTIONS IS STILL ONE OF THE COOLEST AND MOST AMAZING — I WANT TO SAY — >> IS THAT MY OPEN TWEET? >> LEVELS UP THE COOL FACTOR. IT'S GOOD TO BE COOL EVERY ONCE IN A WHILE. AT LEAST IT WAS FOR ME AT ONE TIME.

NOW HERE'S A SERIOUS ONE. I WANTED TO LOB ONE TO YOU, A LITTLE HARDER ONE. JEFF HOLLEN, DOESN'T INFINITE SCALEABILITY ALSO MEAN INFINITE COST? >> OH, THAT'S A FANTASTIC QUESTION. IT CAN MEAN INFINITE COST. SO ONE OF THE THINGS WITH FUNCTIONS THAT'S FANTASTIC IS YOU CAN SCALE PER REQUEST BUT THERE'S A TERM AND YOU HIT IT ON SERVERLESS SOMETIMES CALLED DENIAL OF WALLET ATTACK, WHERE IF YOU JUST HIT — IF SOMEONE ACTUALLY DID A D-DOS ON JEFF.HOLLEN.DEV, YOU MIGHT WRACK SO ONE OF THE THINGS WE ALLOW IN OUR PREMIUM TIERS OF AZURE FUNCTION BUT A WAY TO SET CAPS SO YOU CAN BE LOOK I WANT THIS TO BE SERVERLESS BUT I NEVER WANT TO PAY MORE THAN WHATEVER, $500 A MONTH.

SOMETHING TO BE AWARE OF, THINGS LIKE API MANAGEMENT ARE OFTEN PAIRED WITH FUNCTIONS FOR RATE LIMITING AND THROTTLES. SO IT CAN MEAN INFINITE COSTS. EVEN THEN IT'S WHATEVER .0054 CENTS PER REQUEST, BUT IT IS SOMETHING TO BE AWARE OF. >> IF YOU'RE WRACKING UP THAT MANY CALLS, YOUR WEBSITE IS PROBABLY RACKING IN MORE TOO, RIGHT? >> RIGHT.

>> SO LAST QUESTION, WHEN WILL .NET CORE 3.0 BE SUPPORTED IN AZURE FUNCTIONS? >> THIS IS SOMETHING WE'RE REALLY EXCITED ABOUT. WE MADE AN ANNOUNCEMENT ON GITHUB ABOUT TWO WEEKS AGO. IN OCTOBER, A FEW WEEKS, WE'LL HAVE A PREVIEW OF WRITING AZURE FUNCTIONS IN .NET CORE 3. IT WILL BECOME GENERALLY AVAILABLE AROUND QUARTER ONE OF NEXT YEAR. SO KEEP AN EYE OUT FOR WHERE YOU CAN START USING THAT, WHERE WE WILL REWRITE OUR ENTIRE HOST AND LET YOU WRITE CODE THAT TAKES FULL ADVANTAGE OF .NET CORE 3 IN AZURE FUNCTIONS AS WELL. >> I SAID THAT WAS THE LAST QUESTION AND I LIED. PEOPLE ARE PUTTING THEM IN. AND QUESTIONS ARE IMPORTANT. A QUESTION ABOUT THIS TUTORIAL, WILL THIS TUTORIAL BE AVAILABLE FOR PEOPLE TO LOOK AT? >> YES, SO RIGHT NOW IT'S SCATTERED IN A FEW DOCS.

I'M ACTUALLY LEARNING RIGHT NOW WITH THE LEARN TEAM TO TRY TO TURN THIS INTO AN ACTUAL STEP-BY-STIP TUTORIAL. THERE ARE A FEW DOCS ON THE BLAZOR PAGE THAT TALK ABOUT STATIC HOSTING AND AZURE STORAGE PAGE THAT TALK ABOUT THIS. OBVIOUSLY, IT'S A RECORDING. I KIND OF DID EVERYTHING STEP BY STEP. SO IT IS THERE. IT'S MORE SCATTERED THAN I WOULD LIKE IT TO BE. SO ONE OF THE THINGS WE'RE DOING BEFORE IGNITE IS TURNING THIS TUTORIAL THAT PEOPLE CAN FOLLOW STEP BY STEP. >> I DID AN AZURE FUNCTION THE OTHER DAY AND I THOUGHT OF YOU THE WHOLE TIME. I EVEN WROTE IT IN PYTHON, SUPER COOL. BUT ONE OF THE QUESTIONS AND J POWELL ALSO HAS HOW DOES AUTHENTICATION WORK IN BLAZOR AND AZURE FUNCTIONS IN GENERAL? >> DALE MENTIONED THIS A LITTLE BIT BEFORE.

AZURE FUNCTIONS HAS A FEW FEATURES OUT OF THE BOX TO HELP WITH AUTHENTICATION. THERE'S APP AUTHENTICATION THAT CAN AUTOMATICALLY DO AZURE DIRECTORY VALUATION. GENERALLY WHAT WE SEE IN THESE TYPE OF SCENARIOS IS KIND OF OFA-TYPE FLOW WHERE THEY MAKE THE CALL AND IT PASSES THE TOKEN ALONG TO THE FUNCTION AND IT'S UP TO EITHER THE FUNCTION ITSELF IN CODE OR AS I MENTIONED FEATURES LIKE APP SERVICES AUTHENTICATION OR API MANAGEMENT THAT CAN DO THE VALIDATION OUTSIDE OF YOUR CODE. LOOK AT THE OWP TOKENS AND CODES. THAT'S THE PATTERN I WOULD RECOMMEND. >> HERE'S ANOTHER QUESTION, COULD HTPS SERVER FOR AZURE STORAGE BE CONFIGURED TO BE CASE INSENSITIVE? DO YOU KNOW THAT ONE? >> I THOUGHT IT WAS.

I TYPE IN CAPITAL JEFF.HOLLEN.DEV. >> WHICH IS HOW I TYPE IT IN. >> IT STILL GAVE ME A SHUTTY ONE. IF THERE IS, SEND IT TO ME DIRECTLY AND I WILL BE SURE TO PASS IT ALONG. >> AND I SORT OF ON THE SLY MENTIONED PYTHON, BUT WHAT LANGUAGES CAN YOU WRITE THESE SERVERS IN FUNCTIONS IN. >> C-SHARP, F-SHARM, POWERSHELL — >> WHAT? >> PYTHON, JAVA AND JAVASCRIPT. >> DID JEFFREY SNOWBIRD SHOW UP ONE DAY? >> HE SAID HE WRITES POWERSHELL FUNCTIONS AND HE SAID THE SAME THING, HE THINKS WHEN ME THE WHOLE TIME.pI HOPE ALL OF YOU W YOU'RE WRITING A FUNCTION AND YOU'RE HAPPY OR SAD, KEEP ME IN YOUR MINDS. I'LL HELP WHERE I CAN. >> FANTASTIC. THANK YOU VERY MUCH, JEFF. BY THE WAY, ALL OF YOU GET YOUR QUESTIONS IN AS EARLY AS POSSIBLE. IF YOU THINK OF IT DURING THE QUESTION, JUST PUT IT IN A COUPLE STATS BEFORE WE GO TO MY GOOD COLLEAGUE, THE PEOPLE THAT HAVE BEEN WATCHING THE MOST MINUTES HAPPEN TO BE TRINIDAD AND TOBAGO, 265.28 MINUTES ON AVERAGE.

I'M WONDERING WHO WAS THAT ONE PERSON WHO IS LIKE I THINK I WILL WATCH FOR .28 MINUTES? PROBABLY ME. NOW WITHOUT FURTHER ADO, WE HAVE HERE MY COLLEAGUE ZACK TALKING ABOUT DevOPS FOR THE .NET ENGINEER. LET'S GO TO HIM. >> HEY, EVERYBODY, I'M A CLOUD ADVOCATE FOR MICROSOFT AND EXCITED TO BE HERE TODAY TALKING ABOUT DevOPS FOR .NET CORE DEVS. SO LET'S JUST JUMP IN. WHAT IS DevOPS? WE'VE OFTEN THOUGHT, YOU KNOW, DO WE ACTUALLY NEED DevOPS? IS IT A QUESTION OF — IS THIS SOMETHING WE SHOULD EVEN BE FOCUSING ON NOW OR IN THE NEAR FUTURE? WELL, WE KNOW NOW YOU ABSOLUTELY NEED DevOPS. IT'S CRITICAL FOR BUSINESSES TO INNOVATE AT THE SPEED NECESSARY IN TODAY'S WORLD.

AND IF YOU ASK PEOPLE WHAT IS DevOPS, YOU ASK FIVE PEOPLE, YOU WILL PROBABLY GET TEN DIFFERENT ANSWERS. SO I CAN TELL YOU IN MICROSOFT'S VIEW OF DevOPS IS. DevOPS IS THE UNION OF PEOPLE PROCESS AND PRODUCTS TO ENABLE CONTINUOUS DELIVERY OF VALUE TO OUR END USERS. NOTICE I DIDN'T SAY CONTINUOUSLY DELIVER CODE. I SAID CONTINUOUSLY DELIVER VAL YEA. IF I JUST CONTINUOUSLY DELIVER CODE, I CAN PUSH IT UP IN SOURCE CONTROL BUT I END UP WITH A MOUNTAIN OF CODE SOMEWHERE, UNLESS IT'S DELIVERING VALUE, IT'S NOT REALLY WORTH ANYTHING. SO WHY IS DevOPS IMPORTANT? THIS IS A BIG ONE. IF YOU'RE NOT CURRENTLY READING DevOPS' BEST PRACTICES, I CAN GUARANTEE YOUR COMPETITORS EITHER ARE OR GOING TO BE VERY SOON. WHAT THAT MEANS IS YOUR COMPETITOR WILL BE ABLE TO OUT-INNOVATE YOU, THEY WILL BE ABLE TO DO THINGS AT A MUCH QUICKER PACE THAN YOU CAN AND THAT MIGHT MAKE YOU OBSOLETE.

NOBODY WANTS TO BE OBSOLETE, BELIEVE ME. SO WE ALWAYS THOUGHT ABOUT THIS DevOPS THING. WE GOT MANUAL PROCESSES WE'RE GOING TO START TO AUTOMATE THEM. THINGS ARE FEELING GOOD. IT'S KIND OF A THEORY RIGHT NOW, LET'S GET THINGS GOING. BUT NOW WE HAVE ACTUAL DATA. WE CAN SEE THE EMPIRICAL DATA THAT SAID PEOPLE WHO USE DevOPS ACTUALLY I OWE VAT A LOT MORE THAN THOSE WHO DON'T USE DevOPS. AND IT'S NOT JUST BY A LITTLE BIT. IT'S BY A LOT. WHEN WE THINK OF DevOPS AT MICROSOFT, THERE ARE THREE PILLARS TO PAY ATTENTION TO.

NUMBER ONE BEING PEOPLE, NUMBER TWO BEING PROCESS AND NUMBER THREE BEING PRODUCTS. WE WILL DIVE INTO THOSE A LITTLE BIT HERE. ADMITTEDLY THE HARDEST PART OF ALL OF THIS, ADOPTING DevOPS BEST PRACTICES IN MY OPINION IS THE PEOPLE. PEOPLE ARE ADVERSE TO CHANGE, AND NOT ONLY THAT, WE HAVE TO HAVE THIS IDEA OF CONTINUOUSLY DELIVERING VALUE TO YOUR END USERS FROM THE VERY TOP OF YOUR ORGANIZATION TO THE VERY BOTTOM. EVERYBODY HAS TO BE IN LINE SAYING, YES, WE WILL CONTINUOUS' DELIVER THIS VALUE TO OUR END USERS AND THAT WILL BE THE HARDEST PART, MAKING THAT SHIFT.

THE PROCESS, THAT'S A LITTLE BIT EASIER. BECAUSE REALLY ALL OF THE PROCESS IS FINDING SOMETHING INSIDE OF YOUR ORGANIZATION, INSIDE OF YOUR TEAM THAT WORKS FOR YOU, ALLOWS YOU TO INNOVATE QUICKLY AND ALLOWS YOU TO MAINTAIN A HIGH STANDARD OF QUALITY FOR YOUR APPLICATIONS. THAT'S PROBABLY THE EASIEST OF ALL THREE OF THESE. NOW LET'S TALK ABOUT THE PRODUCTS. SO THIS IS WHERE YOU'RE GOING TO FIND THINGS THAT WILL HELP YOU USE THE DevOPS BEST PRACTICES AND METHODOLOGIES.

PRODUCTS TO HELP YOU PLAN AND TRACK THINGS LIKE WORK ITEMS, BUGS, IMPEDIMENTS, THINGS THAT ARE GOING TO ALLOW YOUR DEVELOPERS TO PUSH AND PULL FROM SOURCE CONTROL BUT NOT ONLY THAT, THAT WILL TIE BACK TO THE PLANNING AND TRACKING SO YOU CAN SEE WHERE YOUR WORK IS ACTUALLY MAKING AN IMPACT. AND YOU ALSO NEED SOMETHING THAT WILL BUNDLE UP YOUR CODE FOR YOU AUTOMATICALLY. YOUR DEVS SHOULD BE ABLE TO PUSH THEIR CODE FOR TESTING AND HAVE SOMETHING FIRE UP TO BUNDLE THAT UP AND PUSH IT OUT INTO A TEST ENVIRONMENT FOR YOU RIGHT AWAY. AFTER YOU HAVE EVERYTHING INTO PRODUCTION, IT DOESN'T STOP THERE. YOU NEED A MONITOR TO WATCH EVERYTHING IN YOUR APPLICATION. IS YOUR APPLICATION UP? IS YOUR APPLICATION DOWN? HOW ARE THE RESPONSE TIMES WITHIN YOUR APPLICATION? YOU NEED TO BE ABLE TO SEE WHAT YOUR USERS ARE ACTUALLY DOING INSIDE OF YOUR APPLICATION. I DON'T KNOW HOW MANY TIMES I'VE TALKED TO CLIENTS THAT SAY WE BUILT THIS APP TO DO THIS THING BUT OUR CUSTOMERS ARE USING IN A MUCH DIFFERENT DIFFERENT WAY THAN WE THOUGHT THEY WOULD USE IT.

WHAT THAT DATA ALLOWS YOU TO DO IS LOOK AND SAY YES, WE'RE ABSOLUTELY ABSOLUTELY DELIVERING VALUE. AND YES, THAT'S GREAT BUT WE CAN DOUBLE DOWN AND DO WAY MORE COOL THINGS FOR OUR END USERS TO DELIVER VALUE. IF YOU'RE NOT DELIVERING VALUE, THAT'S AWESOME TOO SO YOU PIVOT AND MAKE SURE YOU DELIVER VALUE ON THE NEXT SPRINT. ALL OF THESE THINGS, THERE'S A TON OF TOOL THAT'S CAN DO ALL OF THESE THINGS. THESE ARE ALL GREAT TOOLS. YOU CAN PICK AND CHOOSE THESE TOOLS THAT WILL FIT WHAT YOU'RE DOING. YOU HAVE TO MAKE SURE THESE TOOLS CAN COMMUNICATE. YOU HAVE TO MAKE SURE THERE IS NO PROBLEM WITH THAT COMMUNICATION. AND YOU HAVE TO MAKE SURE IT'S SET UP ACCORDINGLY AND THEY WORK GREAT, OR YOU CAN REPLACE ALL OF THESE THINGS WITH SOMETHING LIKE AZURE DevOPS SERVICE.

YOU CAN TARGET ANY LANGUAGE, TARGET ANY PLATFORM USING AZURE DevOPS. THAT'S WHAT WE'RE GOING TO TALK ABOUT TODAY. SO WHAT IS AZURE DevOPS? AT A HIGH LEVEL IT'S A SUITE OF FIVE PRODUCTS, AZURE BOARDS BEING THE WORK ITEM TO TRACKING MANAGEMENT, IT CAN TRACK BUGS, IMPEDIMENTS, FEATURES, THINGS LIKE THAT. AZURE PYTHON BEING THE GIT REPOSITORY SYSTEM FOR PRIVATE GIT INSIDE AFTER SZOHR. THE PIPELINE BEING CI/CD PORTION. THIS IS THE BUILDING AND RELEASE PORTION. AUTOMATION AS REPOS GETTING AZURE PORTIONS. THE TESTING INFRASTRUCTURE INSIDE OF DEVIA OPENS IS THE ARTIFACT REPOSITORY INSIDE OF DevOPS. SO THAT'S GREAT. THAT'S A TON OF TALKING. I GOT IT OUT OF THE WAY AS QUICK AS I COULD.

LET'S JUMP INTO A DEMO TO SEE THIS IN ACTION. WHAT YOU'RE LOOKING AT HERE, THIS IS A .NET CORE APP I HAD DEPLOYED. IT'S AN ACTUAL APP RUNNING. YOU CAN GO TO THAT IF YOU WANT TO. THIS IS AN APP THAT SIMPLY TRACKS MY EXERCISE AND TRACKS MY NUTRITION FOR ME. WHAT I NOTICED — ACTUALLY, WHAT MY CO-WORKER ABEL NOTICED IS FOR SOME REASON, WE'RE TRACKING THE COLOR OF OUR FOOD, AND HONESTLY, WE DON'T CARE ABOUT WHAT THE COLOR OF THE FOOD IS. WE JUST CARE ABOUT THE IMPORTANT INFORMATION. SO WE HAVE THIS BOARD INSIDE OF AZURE DevOPS. THIS IS OUR PROJECT AND THIS IS OUR BOARD. CAN YOU SEE TRACKING HERE, SPRINT, SUPER DUPER IMPORTANT LINE AND WE HAVE A BUG FOR FOOD TRACKING, SHOULD NOT TRACK COLORS. THIS IS AWESOME. I'M HOSTING THE CODE INSIDE OF AZURE REPOS HERE. WH WHAT I CAN DO, CLICK THIS BUTTON HERE, CREATE A NEW BRANCH. CALL IT FOOD, COLOR, TRACKING, IF I CAN SPELL.

THERE WE GO. IT WILL BE BASED ON THE .NET REPOSITORY AND MASTER BRANCH. WHAT'S REALLY AWESOME IS BECAUSE I BUILT IT FROM THAT WORK ITEM, FROM THAT BUG, IT ACTUALLY LINKS RIGHT TO IT. SO I WILL CREATE THIS BRANCH AND IT WILL LEAP FROM MY WORK ITEM TO THAT BRANCH. SO NOW ON THIS BRANCH THAT WORK ITEM IS THERE. NOW I HAVE A NEW BRANCH, FOOD COLOR TRACKING, NEW DROP OVER TO POWERSHELL. THIS IS NORMAL GITHUB STUFF. I WILL DO A GIT PULL BECAUSE I JUST CREATED MY BRANCH. IF I COULD SPELL. AND CHECKOUT AND — NOT THAT. I CAN'T SPELL TODAY.pTHERE WE G. NOW WE'RE BACK ON TRACK. I CHECKED OUT THE FOOD COLOR TRACKING BRANCH. NOW THAT I HAVE THAT CHECKED OUT, LET'S ACTUALLY GO WITH THE CODE. SO I DON'T CARE ABOUT THIS COLOR FIELD IN MY DATABASE. I WANT TO DELETE IT INSIDE MY SUPER FILE HERE. I WILL SAVE THAT.

I NEED TO COMMENT SOME STUFF OUT HERE REALLY QUICKLY. AND I DON'T MEAN THESE THINGS, OKAY. AND I WILL COMMENT OUT HERE AS WELL. LET'S GET THIS COMMENTED OUT. THAT'S NOT NECESSARY. NOW THAT I MADE THESE CHANGES, I WILL SAVE THIS. IF I GO BACK OVER TO MY POWERSHELL, I SEE THAT I'VE CHANGED THOSE THREE FILES. SO I WANT TO DO COMMANDS OF GET ADD, DO A GET COMMIT/M AND THIS WILL GET A COMMITMENT TO SEARCH FOR CHANGES, FOOD, COLOR, TRACKING REMOVED. AND I WILL DO A GIT PUSH. WHAT THIS IS DOING IS ACTUALLY PUSHING THE CODE THAT I JUST TRACKING BRANCH INTO AZURE – DevOPS REPOS SO NOW IF I GO BACK OVER TO MY REPOSITORY AND I REFRESH, AZURE AND DevOPS, THE REPOS ACTUALLY SAW THAT I UPDATED MY FOOD COLOR TRACKING BRANCHES AND SAY HEY, WE JUST UPDATED THIS. DO YOU WANT TO CREATE A PULL REQUEST? IF I WASN'T DONE WITH MY WORK, I WOULDN'T CREATE A PULL REQUEST. BUT I'M DONE. THIS IS ALL OF THE WORK I NEED TO DO SO I WILL CREATE A PULL REQUEST. IT POPS IT UP AUTOMAICALLY.

I WILL MERGE IT INTO THE FOOD TRACKING MASTER, THAT'S GREAT. TITLE AND DESCRIPTION PULLED FROM MY COMMITMENT MESSAGE AND YOU CAN SEE MY FOOD TRACKING SHOULD NOT TRACK COLOR BUG IS ATTACHED TO THIS PULL REQUEST. I DIDN'T HAVE TO DO ANYTHING. YOU CAN SEE CHANGES HERE THAT I MADE. EVERYTHING LOOKS GOOD. LET'S CREATE THIS PULL REQUEST. BOOM, WE GOT A PULL REQUEST. I CAN CHECK OUT THE FILES AND TAKE A LOOK. NOT ONLY THAT, I CAN MAKE COMMENTS AND SAY INLINE, THIS IS THE BEST KCODE I HAVE EVER SEEN WHICH IS TOTALLY TRUE. I CAN HIT COMMENT. THERE'S THE COMMENT IN LINE. AND NOW IF EVERYTHING LOOKS GOOD, I CAN GO AHEAD AND APPROVE THIS.

NOW, YOU PROBABLY DON'T WANT TO APPROVE YOUR OWN PULL REQUESTS BUT FOR THE PURPOSES OF THIS DEMO, I AM. WHAT'S REALLY AWESOME IS INSIDE OF AZURE DevOPS, I HAVE A BUILD AND RELEASE PIPELINE. AND I HAVE IT SET FOR CONTINUE INTEGRATION. IT SAW I MADE A CHANGE IN MY MASTER BRANCH AND KICKED OFF MY BUILD FOR ME. AND THIS IS HAPPENING IN REALTIME. WE'RE WATCHING REALTIME BUT EVEN AFTER THE FACTKY DRILL IN AND GET A LOOK AT WHAT HAPPENED IF I NEEDED TO, IF I WANTED TO GO BACK FOR TROUBLESHOOTING OR SEE WHAT HAPPENED. WHILE THIS IS RUNNING THOUGH, LET'S TAKE A LOOK AT WHAT A BUILD IS COMPRISED OF INSTEAD OF AZURE DevOPS. HERE WE GO. THIS IS A BUILD. YOU CAN SEE WE'RE GETTING A SOURCE — THIS SOURCE WAS PULLING FROM THE AZURE REPO I HAVE, THE MASTER BRANCH. COY PUL I COULD PULL IT FROM ANOTHER SOURCE IF I WANTED TO.

THIS IS AN AGENT-BASED TASK PRINTER. WHAT'S REALLY COOL IS WE CAN USE A HOSTED AGENT HOSTED INSIDE OF AZURE OR RUN AN AGENT ANYWHERE YOU WANT TO RUN IT. I'M ACTUALLY RUNNING MY AGENT ON MY DEMO SERVER, AND THAT'S JUST SOMETHING YOU CAN DO IF YOU LIKE TO DO THAT. YOU CAN SEE THIS IS .NET CORE APP, I'M USING NOUGAT AND COPYING IT BACK AND I WILL PUBLISH IT TO AN ARTIFACT. THIS WILL BE WHAT'S USED IN THE RELEASE. CAN YOU SEE MY BUILD FINISH. LET'S GO AHEAD AND TAKE A LOOK AT THIS ARTIFACT REAL QUICK. HERE'S THE ARTIFACT.S FINISHED,- I'VE CALLED IT DROP. CAN YOU SEE I'VE GOT MY DEV PACK AND WHAT I NEED FOR RELEASE. NOT ONLY THAT I HAVE CONTINUOUS INTEGRATION AND CONTINUOUS DELIVERY SET UP HERE. IT'S ALREADY KICKED OFF MY BUILD INTO MY DEVELOPMENT ENVIRONMENT, AND THAT IS SO POWERFUL. I DIDN'T HAVE TO DO ANYTHING BESIDES MAKE THAT PULL REQUEST AND MERGE IT.

LET'S TAKE A LOOK AT RELEASES REAL QUICK. THE WAY THAT I VIEW RELEASES, YOU CAN SET UP STAGES IN SUCH THAT YOU HAVE ONE FOR EACH ENVIRONMENT. YOU HAVE A DEVELOPMENT ENVIRONMENT, STAGING ENVIRONMENT, PRODUCTION ENVIRONMENT. CAN YOU DO THIS IN ANY MANNER THAT YOU WANT TO IF YOU HAVE A DIFFERENT WAY YOU LIKE TO SET THAT UP. WE ALSO HAVE STAGES THAT CAN RUN IN PARALLEL WITH EACH OTHER IF YOU NEED THAT. YOU CAN SEE THE REASON, THE ARTIFACT THAT WAS BUILT AND ALSO I CAN DRILL IN HERE AND JUST LIKE MY BUILD, WATCH IT HAPPEN REALTIME OR GO BACK AND LOOK AT THE LOGS IF I NEED TO.

WHILE THIS RELEASE IS HAPPENING THOUGH, LET'S TAKE A LOOK HOW A RELEASE IS CREATED AND HOW A RELEASE IS SET UP. YOU CAN SEE EACH STAGE HAS JOBS AND TASKS. FOR EACH OF MY STAGES, THEY ALL LOOK THE SAME BUT IT'S THE SAME SETUP FOR MY BUILD. THIS IS A TASK RUNNER THAT RUNS ON AN AGENT. IT CAN BE HOSTED IN AZURE AGAIN OR HOSTED ON AN AGENT, ON A SERVER LIKE I HAVE FOR MY DEMO. BUT I'M DEPLOYING MY AZURE APP SERVICE, DEPLOYING MY DATABASE RUNNING AND THAT'S THE GIST OF MY RELEASES. LET'S LOOK AND SEE WHERE WE ARE. MY RELEASE FINISHED TO DEVELOPMENT BUT YOU NOTICE IT'S BLUE HERE, IT'S NOT GREEN. THAT'S KIND OF WEIRD, RIGHT? LET'S TAKE A LOOK AT WHAT'S GOING ON. SO I SET UP A POST DEPLOYMENT APPROVAL REQUIRED. SO NOW THAT THIS HAS KICKED OFF, I HAVE DONE MY DEVELOPMENT DEPLOYMENT, I HAVE AN APPROVER REQUIRED TO SAY YES, EVERYTHING LOOKS GOOD, I HAVE TESTED IT OUT.

LET'S GO OVER AND ROLL OVER TO OUR STAGING ENVIRONMENT. I'M AN APPROVER SO I WILL GO AHEAD AND APPROVE THIS. I CAN SAY LOOKS GOOD TO ME, APPROVE. I CAN ALSO REJECT IF I WANTED TO BUT EVERYTHING LOOKS GOOD. SO THEORETICALLY THAT SHOULD HAVE KICKED OFF MY BUILD, RIGHT? LET'S TAKE A LOOK. I'M SORRY, MY RELEASE TO STAGING. BUT IT LOOKS LIKE IT'S HUNG AGAIN. WHAT'S GOING ON HERE? AH, MY SETUP APPROVED DEPLOYMENT APPROVER AS WELL. YES, SOMEONE THAT LOOKED AT THE DEVELOPMENT AND MADE SURE EVERYTHING WAS FINE, THEN Y WER ABLE TO APPROVE IT, PUSH IT TO STAGING BUT NOW STAGING NEEDS TO LOOK BEFORE IT BLASTS THAT CODE INTO MY STAGING ENVIRONMENT. SO WHOEVER IS MANAGING THAT ENVIRONMENT CAN GO AND SAY EVERYTHING LOOKS GOOD. BUT NOT ONLY THAT, IF EVERYTHING LOOKS GOOD, THEY CAN ALSO DEFER DEPLOYMENT FOR LATER. SO SAY SOMEBODY LIKE — LIKE ME DECIDES I WANT TO PUSH CODES AT 5:00 P.M. ON A FRIDAY, WHICH IS NOT THE BEST IDEA, I CAN ROLL THAT OUT FOR DEVELOPMENT AND EVEN ACCEPT THAT IN MY POST APPROVAL ACCEPTANCE HERE BUT IT WON'T BLAST UNTIL ANOTHER ENVIRONMENT UNTIL FROM THAT ENVIRONMENT CAN TAKE OWNERSHIP AND ACCEPT IT.

SO THAT'S AWESOME. I WILL GO AHEAD AND APPROVE THIS THOUGH. AND NOW IT'S IN PROGRESS AND IT'S ROLLING INTO MY STAGING ENVIRONMENT. YOU CAN SET THIS UP SO IT'S MANUAL ONLY AND YOU DON'T HAVE TO DO AUTOMATIC RELEASES. BUT THAT'S HOW I HAVE THIS CONFIGURED. THIS IS ALL REALLY COOL BUT I WANT TO SHOW YOU A NEAT TRICK HERE. LET'S MAKE SURE BEFORE I DO THIS, LET'S MAKE SURE MY CHANGES ARE WORKING. THERE WE GO. THE COLOR FIELD IS GONE.

MY CHANGES LOOK GOOD. NOT ONLY DO MY CHANGES LOOK ALL RIGHT BUT IF I GO BACK TO MY BOARDS, THAT BUG I WAS TRACKING THAT I OPENED THIS BRANCH FOR, BECAUSE THE BRANCH CLOSED IN THE PULL REQUEST, THAT BUG CLOSED FOR ME. I DIDN'T HAVE TO DO IT AND JUST MOVED RIGHT ON OVER. IT'S ALSO TRACKING THAT.

IF I DRILL DOWN INTO HERE, YOU CAN SEE THAT IT ACTUALLY TRACKS WHAT HAPPENED WITH THIS WORK ITEM. AND SO NOW THAT LOOKS ALL GREAT. BUT LET ME SHOW YOU SOMETHING AWESOME. SO I'M JUST INSIDE MY AZURE PORTAL HERE. AND I'M GOING TO CLICK CREATE A RESOURCE, AND I CAN CLICK ON DevOPS PROJECT. WHAT THIS DOES IS THIS ACTUALLY SCAFFOLDS OUT AN ENTIRE DevOPS — AZURE DevOPS FOR YOU. CAN YOU SEE ALL OF THE DIFFERENT LANGUAGES WE HAVE BUILT IN, BRING YOUR OWN CODE IF YOU WOULD LIKE TO.

I WILL CLICK .NET AND ASP.NET, I WILL ADD A DATABASE. LET'S USE WINDOWS WEB APP AND NAME THIS .NET.COMP.DEVO 9. AND CHANGE THE LOCATION HERE. LET'S PUT THIS IN THE EAST U.S. THERE ARE ALSO ADDITIONAL SETTINGS I CAN SET. I CAN CHANGE WHERE MY APPLICATION INSIGHTS ARE AND I CAN CHANGE WHERE MY DATABASE LIVES AS WELL. I WILL PUT THEM ALL IN THE EAST U.S. JUST BECAUSE. AND HERE WE GO. I CAN CLICK DONE. NOW WHAT THIS IS DOING IS SUPER POWERFUL. THIS IS ACTUALLY BUILDING OUT MY AZURE DevOPS PROJECT FOR ME.

IT'S BUILDING OUT MY REPOSITORY, IT'S BUILDING OUT MY BUILDS AND BUILDING OUT MY RELEASES ALL FOR ME AND ACTUALLY GOING TO DO A DEPLOYMENT. THIS TAKES A FEW MINUTES TO SET UP BECAUSE THERE ARE SEVERAL MOVING PIECES AND IT IS DOING A DEPLOYMENT BUT I HAVE ONE PREBAKED RIGHT HERE. YOU CAN SEE WHERE IT'S GONE BUILDING, YOU HAVE YOUR CDIC PORTION, DevOPS PORTION ON THE LEFT, AZURE RESOURCES ON THE RIGHT. BUT WHAT I FIND REALLY COOL IS YOU CAN GO INTO THESE AND THESE ARE DEEP LEAKS INTO AZURE DEVS ON. IF I CLICK HERE, THIS WILL TURN ME RIGHT INTO AZURE DevOPS INTO THIS PROJECT, AND NOW I CAN SEE THAT IT ACTUALLY GAVE ME AN ARM BOOK FOR WHAT IT DEPLOYED, I CAN SEE MY APPLICATION, CLOSE IT, DO ALL OF THE THINGS YOU WOULD NORMALLY DO WITH A GIT REPOSITORY AND THAT'S AWESOME.

AND I CAN SEE — I CAN GO RIGHT IN AND CONTROL RIGHT INTO THE RELEASE AND I CAN ALSO HIT THE APPLICATION — THIS IS A LIVE APPLICATION, THIS URL WILL WORK FOR YOU AS WELL. IT'S JUST A DEMO APPLICATION. SO IT'S NOTHING ROBUST BUT IT IS AN APPLICATION NONETHELESS. SOMETHING ELSE I WANT TO MENTION THAT' REALLY COOL, YOU CAN BUILD A SCAFFOLDING USING A DevOPS PROJECT INSTEAD OF INSIDE OF THE AZURE CORE. BUT ONCE YOU HAVE THAT BUILT, IT'S A ESAP APP. I CAN TAKE ALL OF THE CODE OUT OF THE REPOSITORY, PUSH UP MY ASAP APP AND HAVE IT APPLY AUTOMATICALLY TO MY TESTING ENVIRONMENT. THAT GIVES ME A QUICK WAY TO TEST THIS WITHOUT SETTING UP THE BITS AND PIECES MYSELF. NOT ONLY THAT, IF YOU DON'T WANT TO MESS WITH THIS REPOSITORY, YOU CAN GO TO YOUR BUILDS HERE AND JUST LIKE THE OTHER BUILD I SHOW YOUED YOU IS A HOSTED TASK RUNNER AND MY SOURCES ARE RIGHT HERE. SO I CAN CHANGE THE SOURCE HERE THAT MY BUILD IS ACTUALLY PULLING FROM IF I WANT TO.

SO WE CAN SET THIS UP, YOU CAN CHANGE OUT YOUR SOURCE OR JUST CHANGE OUT THE INFORMATION IN YOUR REPOSITORY AND YOU'RE INSTANTLY OR ALMOST INSTANTLY WORKING WITH A FULLY DevOPSED PROJECT. SO THAT'S REALLY POWERFUL. I IMPLORE YOU TO GO CHECK THAT OUT AND TRY IT OUT. BUT, YEAH, SO MY WORK HERE IS DONE. LET'S GO BACK TO THIS. AND THAT'S ALL I HAVE FOR YOU. IF YOU WANT TO CONNECT WITH ME I'M ON STWITER, CLOUD ADVOCATE LIKE I MENTIONED.

AND HERE ARE SOME GOOD LINKS IF YOU WANT TO TAKE A SCREENSHOT, MAKE SURE TO FOLLOW AZURE DevOPS FOR THE LATEST INFORMATION. AND THAT'S IT. THANK YOU SO MUCH. >> AWESOME, WOW. THAT WAS GREAT. THANK YOU VERY MUCH. SO WE HAVE SOME QUESTIONS HERE ON TWITTER. LET'S SEE WHICH ONES WE HAVE. ALL RIGHT. LET'S SEE, SOMEBODY HERE IS ACTUALLY ALREADY USING IT. pSO T >> NICE. >> AND LET'S SEE, HERE WE HAVE A QUESTION, WHY AZURE REPO AND NOT GITHUB? I GUESS WHAT ARE THE PROS AND CONS BETWEEN THE TWO IN YOUR OPINION? >> YEAH, WITH AZURE REPOS, IT IS USING THE GIT PROTOCOL. YOU CAN ACTUALLY HOST ZBIGITHUB YOU WANT TO. YOU CAN USE IT AS YOUR SOURCE.

YOU DON'T HAVE TO HOST INSIDE REPOS BUT IF YOU'RE USING AZURE DevOPS, YOU ARE LINKING INTO ALL OF YOUR ACTIVE DIRECTORY CONFIGURATION IF YOU HAVE THAT. THAT MIGHT MAKE THINGS A LITTLE EASIER. BUT IT'S UP TO YOU. WE DON'T WANT TO FORCE YOU TO USE AZURE REPOS. WE WANT YOU TO USE WHAT IS BEST FOR YOU BASICALLY. >> SWEET. AND THEN WE HAVE ANOTHER QUESTION HERE, HEY, ZACK, HOW CAN YOU TELL AN INQUIRY WHEN IN-LINE COMMENTS HAVE BEEN MADE? >> LET ME TAKE A LOOK AT THAT. LET'S GO BACK TO MY PULL REQUEST. THAT'S SOMETHING I HAVE NOT ACTUALLY LOOKED AT BUT IT SHOULD SHOW YOU. I'M ON THE WRONG BUILD HERE. IT SHOULD SHOW YOU HERE IN THE PULL REQUEST, IF I CAN GET TO THAT. THERE WE GO. I'M OPENING UP THIS PULL REQUEST AND YOU CAN SEE THIS LITTLE ICON HERE. IT TELLS ME I HAVE AN IN-LINE COMMENT AND YOU CAN SEE THAT COMMENT RIGHT HERE. >> AWESOME.

GREAT. AND WE HAVE ANOTHER QUESTION HERE. ANY PLANS OF ADDING FEATURES TO ENABLE AZURE BOARDS TO BE USED AS A HELP DESK TICKETING SYSTEM? ACCESS, RAISE TICKETS, AUTOMATED TICKET CREATION VIA EMAIL OR OTHER SOURCES? >> HONESTLY, I'M NOT SURE. THAT'S A QUESTION THAT'S BEST POSED FOR THE PRODUCT TEAM. I CAN ACTUALLY TAKE THIS QUESTION BACK AND FIGURE THAT OUT AND GET BACK TO YOU. SO THAT'S NO PROBLEM. >> AWESOME, YEAH. DEFINITELY. THERE'S A LOT OF QUESTIONS HERE. LET'S SEE. THIS ONE, CAN WE SPECIFY THE VERSION NUMBER OF THE RELEASE ON AZURE DevOPS, OR SHOULD WE MODIFY THE CS-PAGE AND SOMETHING SIMILAR FOR RELEASE NOTES? >> THIS I'M ACTUALLY NOT SURE OF TO BE COMPLETELY HONEST. I'M BRAND NEW TO ASP.NET STUFF.

BUT I HAVE BEEN GIVEN PERMISSION TO REACH OUT TO ABEL LEAK ON TWITTER. >> GREAT NAME. >> HE CAN GIVE YOU ALL OF THE INFORMATION. ABEL IS AN AWESOME GUY THAT WORKS FOR MICROSOFT AS WELL. >> SWEET. LOOK AT THIS, RIGHT HERE WE HAVE PEOPLE WATCHING FROM GERMANY. THAT'S PRETTY AWESOME. AND LET'S SEE WHAT ELSE WE HAVE, LET'S SEE HERE. ALL RIGHT. HERE'S ANOTHER .NET QUESTION BUT ASIDE FROM WRITING CUSTOM TASKS, DO YOU KNOW A WAY TO LOOP OVER A SET OF TASKS DURING YOUR DEPLOYMENT? SINCE IT'S DEPLOYED ON SEVERAL SERVERS AND ADOPT OLD VERSIONS INSTEAD OF NEW VERSION? >> SURE F YOU'RE GOING TO DEPLOY SELF-SERVERS, LET ME PULL THIS UP QUICK.pTHIS IS ACTUALLY PRET. WE HAVE A CONCEPT OF DEPLOYMENT GROUPS. I DIDN'T GET INTO THIS.

IT'S GREAT FOR ANOTHER VIDEO INTERACTION, AND WE'VE ACTUALLY DONE IT BEFORE, YOU CAN CREATE A GROUP THAT SAYS HERE MY DEVELOPMENT OR PRODUCTION, WHATEVER YOU WANT TO CALL YOUR DEPLOYMENT GROUP. YOU CAN BUILD THAT OUT AND CREATE AGENTS — PUT AGENTS ON YOUR SERVERS, WINDOWS OR LINUX, THAT WILL ALLOW YOU TO DEPLOY TO THOSE IN PARALLELS. TWO SERVERS, 50 SERVERS, IT DOESN'T MATTER. YOU WOULD WANT TO USE THE PLAYER GROUPS FOR THAT. >> SWEET. A COUPLE MORE QUESTIONS QUICK. HERE'S ANOTHER ONE, CAN I HAVE AN AZURE DevOPS DEPLOY MY JOB OF ARTIFACTS TO A TOMCAT SERVER? >> DEFINITELY.

IF THERE'S NOT A TASK ALREADY BUILT — I ACTUALLY FAILED TO MENTION THAT. LET ME SHOW THAT QUICKLY AS WELL. THERE'S SO MUCH INFORMATION THAT YOU CAN DO IN HERE. THESE TASKS ARE JUST BASICALLY — THEY'RE JUST TASKS. THESE ARE FIRST PARTY TASKS WE BUILT. WHEN YOU ADD A FASTER AGENT, THERE ARE HUNDREDS OF BUILT-IN TASKS YOU CAN ADD. NOT ONLY THAT, IF YOU KP THE FIND ANYTHING IN HERE THERE'S A MARKETPLACE OF LIKE 1,500 TASKS.

AND NOT ONLY THAT — WAIT, THERE'S MORE, YOU CAN WRITE YOUR OWN TASK. IT'S JUST JAS OR POWERSHELL. MOST DEFINITELY YOU CAN DO THAT. >> COOL. ANY WAY TO FILTER PRs BY LABELS OR TAGS? >> I'M HONESTLY NOT SURE. THAT'S SOMETHING I WILL HAVE TO CHECK ON AND GET BACK TO YOU. I IMAGINE YOU CAN BUT I WILL HAVE TO DOUBLECHECK. >> AWESOME. WE'RE GOING TO GO AND VIEW SOME COMMERCIALS RIGHT NOW. SO THANK YOU, THANKS AGAIN. >> THANKS. >> I HAVE ANOTHER CLUE FOR YOU, THIS TIME FROM THE FOLKS AT MUSTOUS. THEY SAY THE ANSWER, DEAR DEVELOPER, IS ONLY TWO DOCUMENTS AWAY. START HERE AND GO WHERE THE CLUES LEAD YOU.

FIND THAT SECRET PASSWORD, SECRET PASSCODE YOU'RE LOOKING FOR. THIS FOR YOUR RESPONSE TO THE .NET BOT INDIVIDUAL STUDIO TWITCH CHANNEL, AND YOU CAN BE WELL ON YOUR WAY TO THE NEXT STEP IN OUR TECHNICAL TREASURE HUNT. >>> HELLO, EVERYONE, AND WELCOME TO THE SERIES ON ML.NET, LEARNING FRAMEWORK FOR DEVELOPERS. I'M A PROGRAM MANAGER ON THE .NET TEAM FOCUSING ON MAKING MACHINE LEARNING APPROACHABLE TO .ET DEVELOPERS. IN THIS SERIES OF VIDEOS, WE WILL BE LOOKING IN DEPTH AT ML.NET.

LET'S START BY UNDERSTANDING WHAT IS MACHINE LEARNING? MACHINE LEARNING IS ALL ABOUT PROGRAMMING THE UNPROGRAMMABLE. LET'S SAY IN THIS CASE WE WANT TO WRITE A FUNCTION WHETHER THIS PICTURE IS AN IMAGE OF A DOG OR NOT. MACHINE LEARNING WILL HELP US FIGURE OUT WHETHER THIS IMAGE IS A DOG OR NOT. SOME OTHER EXAMPLES OF USING MACHINE LEARNING ARE, LET'S SAY I WANT TO PREDICT THE PRICE OF A HOUSE. THE PRICE OF A HOUSE CAN DEPEND ON A VARIETY OF FEATURES, SUCH AS HOW MANY ROOMS DOES A HOUSE HAVE? DOES THE HOUSE HAVE ANY SPECIAL AMENITIES LIKE A POOL? HOW BIG IS THE YARD? AND ALL OF THESE FEATURES WILL COMBINE FOR WHAT THE EXACT PRICE OF THE HOUSE IS. TRADITIONALLY, LET'S SAY WE HAD TO WRITE A PROGRAM TO DETECT WHETHER THIS IS A DOG OR NOT. WHAT YOU WOULD HAVE DONE IS, YOU WOULD HAVE LOOKED AT IMAGES OF DOGS AND CATS AND YOU WOULD HAVE LOOKED AT CERTAIN CHARACTERS LIKE HOW LARGE ARE THE EARS? DO THEY HAVE A TONGUE? HOW BIG THE TONGUE IS.

AND YOU WOULD WRITE THIS PROGRAM OURSELVES TAKING CARE OF ALL OF THE POSSIBILITIES TO FIGURE OUT WHETHER THE IMAGE IS OF A DOG OR CAT OR NOT. THESE ARE SOME EXAMPLES, IMAGES THAT I WOULD HAVE LOOKED AT TO FIGURE OUT HOW TO MAKE THE PROGRAM UNDERSTAND WHETHER THIS IMAGE IS A DOG OR A CAT. SO I WOULD BE LOOKING AT CAT PICTURES, I WOULD BE LOOKING AT DOG PICTURES, I WOULD BE LOOKING AT DIFFERENT EXAMPLES OF ALL OF THESE IMAGES AND TRY TO WRITE A PROGRAM BY MYSELF. BUT WITH MACHINE LEARNING, ALL OF THIS BECOMES MUCH MORE SIMPLER. MACHINE LEARNING ALLOWS A PROGRAM TO LEARN FROM A SET OF DATA TO FIGURE OUT WHAT ARE ALL OF THE CHARACTERS AFFIXED TO PARTICULAR PROBLEMS.

IN THIS CASE WHAT DEFINES A DOG? WHAT DEFINES A CAT? MACHINE LEARNING WILL LOOK AT DIFFERENT IMAGES AND SEE, ALL RIGHT, HOW BIG IS THE MOUTH? HOW BIG IS THE TONGUE? DOES IT HAVE CLAWS? DOES IT HAVE WHISKERS? AND AS IT TRAINS ON MORE AND MORE DATA, THE MACHINE LEARNING PROGRAM WILL BECOME MORE SMARTER AND SMARTER IN TERMS OF FIGURING OUT WHETHER OR NOT THERE'S IMAGE IS OF A DOG OR CAT OR NOT. AND IN THE END WHAT WOULD YOU HAVE IS A PROGRAM THAT YOU COULD CALL TO FIGURE OUT WHAT TYPE OF ANIMAL IS THIS? SO MACHINE LEARNING IS REALLY ABOUT PROGRAMMING THE UNPROGRAMMABLE. WHAT THIS ALLOWS US TO DO IT ALLOWS YOU TO WRITE A FUNCTION WHICH TRAINS ON A SET OF DATA TO FIGURE OUT WHETHER THIS PICTURE IS OF A DOG OR OF A CAT. AND THE MACHINE LEARNING MODEL THAT YOU GET IS TRAINED ON LOTS OF THESE IMAGES WHERE IT LEARNS ABOUT DIFFERENT FEATURES, WHETHER HOW BIG THE MOUTH IS, WHETHER THE CAT HAS CLAWS OR NOT, WHETHER THE CAT HAS WHISKERS.

AND SO YOU DON'T HAVE TO WRITE ALL OF THESE CONSTRUCTS YOURSELF. THE MACHINE LEARNING PROGRAM LOOKS AT ALL OF THESE IMAGES AND LEARNS, AND THEN IT GIVES YOUR FUNCTION, A MACHINE LEARNING MODEL, THAT YOU CAN USE IN YOUR APPLICATION. SUCH ADVANCEMENT IN MACHINE LEARNING HAS OPENED MANY AND POSSIBILITIES WHERE YOU CAN USE MACHINE LEARNING TO TRAIN MACHINE LEARNING MODELS OVER DATA, WHICH IS OF DIFFERENT KINDS. YOU CAN TRAIN MACHINE LEARNING MODELS TO IMPACT AUDIO, TO RECOMMEND NEW MUSIC IF YOU LIKE, YOU CAN USE MACHINE LEARNING ON TEXT-BASED SCENARIOS SO YOU CAN DO THINGS LIKE SET UP AN ANALYSIS, SALES FORECASTING, MOVIE RECOMMENDATIONS, ANOMALY DETECTION.

YOU CAN USE MACHINE LEARNING ON IMAGES SO YOU CAN CLASSIFY IMAGES, WHETHER IT'S A CAT OR DOG. YOU CAN DETECT OBJECTS IN AN IMAGE SO YOU CAN FOR ONLINE CATALOGING AND THE MACHINE LEARNING CAN ALSO BE USED TO TEACH MACHINES ITSELF. SO THEY CAN BE MUCH MORE SMARTER. IN THIS VIDEO, WE LOOKED AT THE BASICS OF WHAT IS MACHINE LEARNING. IN THE NEXT VIDEO, WE WILL TAKE A LOOK AT ML.NET, A FRAMEWORK FOR BUILDING MACHINE LEARNING MODELS FOR .NET DEVELOPERS.

>> HELLO, EVERYONE. WELCOME TO BRINGING BIG DATA ANALYTICS THROUGH PATCHY SPARK TO .NET. I'M A PROGRAM MANAGER HERE AT MICROSOFT ON THE .NET TEAM. LET'S START OFF WITH WHAT IS A PATCHY SPARK. SO BIG DATA MEANS THAT THERE IS AN INCREASING VOLUME, VELOCITY AND VARIETY OF DATA. SO LET'S TAKE, FOR INSTANCE, A FACTORY. THERE CAN BE THOUSANDS OF INTERNET OF THING SENSORS IN A FACTORY, EACH PRODUCING PETABITES OF DATA. WHILE IT IS GREAT TO HAVE THAT MUCH DATA SO WE CAN UNDERSTAND HOW OUR FACTORY IS PERFORMING AND WAYS TO IMPROVE THE EQUIPMENT, HOW CAN WE PROCESS IT ALL WHEN WE HAVE THAT MUCH AND MORE THAN JUST THAT, HOW CAN WE PROCESS IT ALL QUICKLY AND EFFICIENTLY? WELL, WELCOME TO THE WORLD OF APACHE SPARK. SO WHAT IS APACHE SPARK? APACHE SPARK IS A GENERAL PURPOSE DISTRIBUTED PROCESSING ENGINE FOR ANALYTICS OVER LARGE DATA SETS. A LITTLE MORE SIMPLY, I APACHE SPARK IS A GREAT TOOL WE CAN USE TO ANALYZE A LARGE AMOUNT OF DATA IN A QUICK AND EASY TO UNDERSTAND WAY SO WE DON'T HAVE TO BE DATA SCIENCE EXPERTS IT UNDERSTAND OR USE IT.

QUITE A FEW DIFFERENT THINGS WE CAN DO WITH APACHE SPARK THAT ARE ALL SUPER INTERESTING AND EXCITING. JUST TO TOUCH ON A FEW OF THEM, ONE OF THEM IS SPARKS EQUAL, WHICH MEANSS ANALYZING DATA THROUGH A CSV OR FROM A DATA BEACH THERE IS SPARK STREAMING, WHICH MEANS ANALYZING DATA IN REAL TIME AS BEING PRODUCED. IN OUR FACTORY EXAMPLE IT MEANS ANALYZING DATA LIVE AS IT IS COMING FROM THE IOT SENSORS. WE CAN GO AND ADDRESS IT RIGHT AWAY. THERE IS ALSO MACHINE LEARNING CAPABILITIES WITH APACHE SPARK, SO YOU CAN COMBINE THE POWERS OF BIG DATA AND ML TO SCALE AND HAVE FASTER MORE EFFICIENT TRAINING AND PREDICTION OF MACHINE LEARNING ALGORITHMS. SO TO UNDERSTAND HOW APACHE SPARK WORKS, THERE IS ONLY THREE MAIN COMPONENTS THAT WE REALLY NEED TO TAKE A LOOK AT. THE FIRST ONE IS THE DRIVER. DRIVER CONSISTS OF THE USERS' PROGRAM. FOR INSTANCE, IF YOU WROTE A C SHARP CONSOLE OUT, THAT WOULD BE PART OF THE DRIVER. THE DRIVER ALSO CONSISTS OF A SPARK SESSION.

WHAT THE SPARK SESSION DOES IS IT TAKES THAT USER PROGRAM, FOR INSTANCE, TAKES THAT C SHARP CONSOLE APP AND DIVIDES IT INTO SMALLER PIECES KNOWN AS TASKS. NOW, THOSE TASKS ARE DIVIDED AMONG OUR SECOND COMPONENT, WHICH ARE THE EXECUTORS OR THE WORKER NOTES. AND THE EXECUTORS ARE THE WORKERS ARE ON SOMETHING KNOWN AS A CLUSTER. SO EACH OF THOSE EXECUTORS TAKES ONE SMALL TASK, THE ONE SMALL PIECE OF OUR USERS PROGRAM, AND FINISHES EXECUTING IT. AND THE THIRD COMPONENT OF OUR ARCHITECTURE IS THE CLUSTER MANAGER, WHICH HELPS WITH DIVIDING UP THE TASKS AND ALLOCATING RESOURCES AMONG OUR DRIVER AND OUR EXECUTORS. SO HOW CAN I USE APACHE SPARK, IT SOUNDS SUPER GREAT, SUPER USEFUL, HOW CAN I GET STARTED WITH IT? THERE IS DEFINITELY APIs WE CAN USE THAT ARE POPULAR WITH SPARK. THE WRITTEN LANGUAGE IS LIKE SCALE, PYTHON, JAVA, AND R, BUT UP UNTIL THIS POINT, THERE WEREN'T ANY .NET APIs FOR SPARK.

SO IF I WANTED TO USE APACHE SPARK, COMBINED WITH MY PRE-EXISTING .NET KNOWLEDGE OR CODE BASE AND BUSINESS LOGIC, WE NOW HAVE AN AWESOME TOOL THAT WE CAN ALL USE AND IT IS KNOWN AS .NET FOR APACHE SPARK. SO .NET FOR APACHE SPARK IS A FREE OPEN SOURCE AND CROSS PLATFORM BIG DATA ANALYTICS FRAMEWORK. IT ALLOWS US TO RE-USE THE KNOWLEDGE, SKILLS AND CODE WE HAVE AS D.NET DEVELOPERS, NOW YU CAN GO AHEAD AND INTRODUCE BIG DATA ANALYTICS WITHIN IT. .NET FOR APACHE SPARK IS ALSO DESIGNED FOR HIGH PERFORMANCE. THE OVERALL GOAL FOR .NET FOR APACHE SPARK IS TO PROVIDE .NET DEVELOPERS A FIRST CLASS EXPERIENCE WHEN WORKING WITH APACHE SPARK.

SO WE HAVE HAD SEVERAL CUSTOMERS EXPRESS OUT OF INTEREST AND ACTUALLY SEE SUCCESS WITH .NET FOR APACHE SPARK, ONE OF THEM IS THE MICROSOFT SURGE ASSISTANCE AND INTELLIGENCE TEAM WORKING TOWARD MODERNIZING WORK SPACES IN OFFICE 365. THEIR JOB IS TO WORK WITH ML MODELS ON TOP OF SUBSTRATE DATA TO INFUSE INTELLIGENCE INTO OFFICE 365 PRODUCTS. THEIR DATA RESIDES IN ADLS AND GETS FED INTO THEIR MODELS. WHILE LOOKING TOWARD .NET SPARK WAS ALL WRITTEN IN C SHARP, C – MEANING IT WOULD BE IDEAL TO BE ABLE TO USE BIG DATA ANALYTICS STILL WITHIN THE .NET ECOSYSTEM. AND SO FAR THE EXPERIENCE HAS BEEN EXTREMELY PROMISING, STABLE AND THEY REALLY LOVE THE VIBRANT OPEN SOURCE BIG DATA ANALYTICS ECOSYSTEM WITHIN THE .NET COMMUNITY. THE SCALE OF THEIR JOBS HAS BEEN ABOUT 50 TERABYTES, QUITE A BIT OF DATA. THEY STARTED SEEING SUCCESS WITH IT. SO NOW THAT WE HAVE SEEP A LITTLE BIT ABOUT WHAT .NET FOR APACHE SPARK IS AND WHY IT IS AN EXCITING NEW SOLUTION FOR US, LET'S LOOK AT A FEW DIFFERENT SCENARIOS WE CAN COMPLETE IN EXCITING APPLICATIONS WE CAN BUILD USING .NET FOR APACHE SPARK.

ONE OF MOST FUNDAMENTAL BIG DATA APPS IS BATCH PROCESSES. SO WHAT IS BATCH PROCESSING WHAT IS BATCH DATA. IT MEANS WE'RE WORKING WITH DATA THAT HAS ALREADY BEEN STORED. FOR INSTANCE, WE COULD BE DOING SOMETHING CALLED LOG PROCESSING. WHICH MEANS LOOKING AT AND GAINING INSIGHTS FROM LOGS FROM MAYBE A WEBSITE OR A SERVER OR A NETWORK OF SOME SORT, SO WE CAN UNDERSTAND WHAT ACTIONS OUR USERS ARE TAKING, WHAT PAGES OF OUR WEBSITE ARE THE MOST POPULAR. WE CAN ALSO DO DATA WARE HOUSING, WHICH MEANS TAKING IN DATA, MAYBE FROM A VARIETY OF DIFFERENT SOURCES, AND THEN PERFORMING LARGE SCALE ANALYSIS ON IT, MAYBE THAT DATA IS ALL STORED IN THE AZURE STORAGE AND GAINING MEANINGFUL INSIGHTS FROM IT. AN EXAMPLE WE'RE GOING TO BE LOOKING AT TODAY, WE'RE GOING TO TAKE A LOOK AT SOME GET HUB PROJECTS DATA. SO YOU CAN SEE HERE IN THE SNIPPET OF THAT DATA THAT OUR PROJECTS DATA INCLUDES THE URL OF OUR PROJECTS, THE AUTHOR, A DESCRIPTION, WHAT LANGUAGE IT IS, THINGS LIKE THAT.

WE WANT TO KNOW ON AVERAGE HOW MANY FORKS DOES EACH LANGUAGE HAVE. AND THE NUMBER OF TIMES EACH PROJECT HAS BEEN FORGED IS REPRESENTED BY THAT COLUMN THERE. LET'S LOOK AT OUR FIRST EXAMPLE. SO I'M GOING TO OPEN UP VISUAL STUDIO 2019 HERE. AND WE CAN SEE HERE THAT I'M JUST DEALING WITH THE C SHARP CONSOLE APPLICATION I'VE ALREADY CREATED AND I'VE ALREADY INSTALLED THE MICROSOFT SPARK NOUGAT PACKAGE. YOU SEE IT WAS ALSO INSTALLED BECAUSE I HAVE GREAT DRIVER FILES OVER HERE AND THE SOLUTION EXPLORER. AND AT THE TOP I'M USING MICROSOFT SPARK SEQUEL AND MICROSOFT SPARK SEQUEL FUNCTIONS BECAUSE AS I MENTIONED, SPARK SEQUEL HELPS US WORK WITH STRUCTURE DATA. SO IF I'M READING IN GET HUB PROJECTS DATA, THAT DATA DOES HAVE SOME SORT OF PATTERN OR STRUCTURE TO IT.

I WANT TO USE SPEC SEQUEL. SO TO START OFF WITH, IN MY MAIN METHOD HERE, THE WAY THAT WE START OFF ANY .NET FOR APACHE SPARK APP IS BY CREATING A SPARK SESSION. THAT'S WHAT IS DIVIDING OUR PROGRAM INTO THE SMALLER TASKS TO BE DISTRIBUTED AMONG THE EXECUTORS. SO WE CAN SEE I'VE CREATED A SPARK SESSION CALLED SPARK. AND I WENT AHEAD AND BUILT THE SESSION AND I JUST CALLED MY APP GET HUB AND SPARK BATCH. AFTER DOING THAT, THE NEXT STEP WE TYPICALLY WANT TO DO IS TO ACTUALLY READ IN OUR DATA. I HAVE DATA STORED IN A CSV AND WE WANT TO READ THAT CSV INTO AN OBJECT CALLED A DATA FRAME. SO DATA FRAME IS GOING TO BE THE BASIC OBJECT THAT WE STORE OUR DATA IN WHEN WORKING WITH STRUCTURED DATA IN SPARK. SO IF I OPEN UP THIS REGION HERE, WE CAN SEE THAT I'M WORKING WITH A DATA FRAME HERE.

AND I JUST CALLED IT PROJECT CF, PROJECT DATA FRAME. I CALL IT THE READ METHOD AND SCHEMO, I'M WORKING WITH WHATEVER PATTERN MY DATA HAS, SO I KNOW MY DATA HAS AN I.D. COLUMN, URL, OWNER I.D., I KNOW THE TYPE OF DATA THAT IS STORED IN THERE, WHETHER IT IS INTERESTING OR SOMETHING LIKE THAT. IT IS AT A RATHER LONG SCHEMIA, I HAVE QUITE A FEW COLUMNS. I CAN CALL DOT CSV SINCE I KNOW IT IS A FILE. ANOTHER POPULAR METHOD IS DOT SHOW, WHICH ALLOWS US TO PRINT THAT DATA FRAME TO THE SCREEN. SO I CONTINUE ON AND ANOTHER POPULAR STEP THAT WE WANT TO DO WHEN WORKING WITH BATCH DATA IS TO DO SOME DATA PREP OR DATA PREPARATION. AND THAT MEANS THAT WE'RE KIND OF CLEANING UP OUR DATA, SO MAYBE IF THERE IS SOME MISSING VALUES OR EXTRA VALUES, MAYBE A FEW EXTRA CLUMZ WE DON'T NEED, WE CAN REMOVE THOSE THAT ARE DATA IS EASIER TO READ AND EASIER TO WORK.

SO ONE OF MY FIRST STEPS OF DATA PREP, WORKING THE DATA FRAME NA FUNCTIONS AND I CHOSE TO DROP ANY VALUES THAT ARE NULL. ANY ROWS THAT HAVE MISSING OR NULL VALUES, I CHOSE TO REMOVE. WHEN I PERFORM CALCULATIONS LETTER, I'M NOT TRYING TO PERFORM CALCULATIONS ON A MISSING VALUE. ALSO WITH MY DATA PREP, I CHOSE TO DROP A COUPLE OF COLUMNS, DON'T THINK WILL BE IMPORTANT FOR MY FINAL CALCULATIONS. SO I DROPPED THE I.D., THE URL AND THE OWNER I.D. COLUMNS. AFTER DOING DATA PREP, WE CAN GO AHEAD AND PERFORM THE FUNCTIONALITY WE WANTED TO. WHICH WAS FINDING ON AVERAGE WHICH LANGUAGES HAVE BEEN FORKED FROM THE MOST OFTEN. SO THE FIRST THING I WANTED TO DO WAS GROUP MY PROJECTS BY LANGUAGE. SO WHAT I'VE DONE HERE IS — I CREATED A NEW DATA FRIM THAT WILL REPRESENT NOW MY GROUP TO DATA AND I CALLED THE GROUP BUY METHOD WHICH ALLOWS ME TO CHOOSE WHICH COLUMN OF DATA I WANT TO ORGANIZE BY OR TO GROUP BY.

SO I CHOSE THE LANGUAGE COLUMN. AND THEN WHENEVER I DO A GROUP BUY, I NEED TO CALL AGGREGATE OR STOP AGG METHOD. WITH AGGREGATE, IT ALLOWS ME TO PERFORM SOME SORT OF FUNCTIONALITY ACROSS EVERY ROW OR EVERY ENTRY OF MY DATA. IN MY CASE, I PERFORMED THE AVERAGE OF THE FORKED FROM COLUMN ON ICHIEACH ROW OF DATA. I'M FINDING HOW MANY TIMES EACH LANGUAGE HAS BEEN FORKED. AND THEN FINALLY, I DON'T WANT TO JUST DISPLAY MY DATA AS IS, I WANT TO DO ONE FINAL STEP TO MAKE IT A LITTLE EASIER TO UNDERSTAND AND READ. SO I'VE CHOSEN HERE TO ORDER MY DATA FRAME IN DESCENDING ORDER. THAT WAY I HAVE THE TOP FORKED LANGUAGES AT THE TOP OF MY DATA FRAME, SO I CAN SEE THOSE FIRST. AND THEN A FINAL GOOD STEP TO DO IS TO GO AHEAD AND STOP OUR SPARK CONTEXT. SO I WENT AND — WENT AHEAD AND CALLED SPARK DOT STOP, CLEAN UP RESOURCE AND MAKE SURE EVERYTHING FINISHES EXECUTING CORRECTLY.

OKAY. SO NOW I HAVE A FEW STEPS HERE THAT WILL NEED TO BE ABLE TO BUILD AND RUN MY PROGRAM. SO ONE OF THE STEPS I'M WORKING WITH THE .NET FOR APACHE SPARK APP IS TO MAKE SURE WE HAVE ONE OF OUR ENVIRONMENT VARIABLES SET CORRECTLY. THERE IS A .NET ASSEMBLY SEARCH PASS VARIABLE AND WE WANT TO MAKE SURE TO SET IT TO SPECIFICALLY MY APP, SO IN THIS CASE, BATCH AND THE BIN, DEBUG FOLDER AND WHATEVER VERSION OF NET CORE APP YOU'RE USING. AND THEN ALSO ONE OTHER THING YOU CAN CHECK IS THE LEVEL OF LOGGING YOU HAVE IN YOUR OUTPUT. I GO AHEAD AND OPEN THIS UP, SO THERE IS A FILE CALLED LOG FOUR J PROPERTIES. I SET THE LOGGING TO BE THE ERROR LEVEL. SO RATHER THAN DISPLAYING SOME EXTRANEOUS SPORTINGS OR INFO, I'M GOING TO DISPLAY MESSAGES ACTUALLY IN ERROR WHICH WILL HELP MAKE SURE MY OUTPUT ISN'T TOO CONFUSING OR CROWDED IN MY CONSOLE.

OKAY. SO NOW IT CAN ACTUALLY BE TIME TO GO AHEAD AND BUILD AND RUN OUR PROGRAM. SO FORTUNATELY I'VE ALREADY DONE THAT WITH FOR US HERE TO SAVE SOME TIME. SO I'M GOING TO OPEN UP THE TERMINAL. NOT THAT ONE. THAT ONE WILL BE LATER. OKAY. SO HERE I MOVED INTO MY BATCH DIRECTORIES AND CD BATCH AND THEN I JUST WENT AHEAD AND BUILT MY PROJECT USING .NET BUILD. YOU CAN SEE THAT BUILD SUCCEEDED. SO NOW LET'S GO AHEAD AND SEE HOW WE ACTUALLY RUN A .NET FOR APACHE SPARK APP. WE USE SPARK SUBMIT OR SPARK SUBMIT COMMAND AND EVERY TIME WE USE SPARK SUBMIT, THERE IS A FEW DIFFERENT COMPONENTS TO IT. SO WE SAY SPARK-SUBMIT AND WE REFERENCE THE .NET RUNNER, WE'RE GOING TO SPECIFICALLY REFERENCE ONE OF THOSE JAR FILES. IN OUR CASE, WE'RE USING APACHE SPARK VERSION 2.4 AND .NET 0.4.0. AND THEN ALSO WE WANT TO HAVE A PATH TO OUR APPS DLL. IT CAN BUILD AND RUN CORRECTLY.

SO AFTER RUNNING SPARK SUBMIT, LET'S SEE HOW OUR PROGRAM DID. FIRST WE'RE EXPECTING JUST TO SEE THE DATA FRAME WITH OUR CSD DATA IN IT. LET'S TAKE A LOOK. ALL RIGHT, SO WE CAN SEE IT ERE, WE SEE THAT IT HAS ALL THE COLUMNS WE EXPECTED, BUT WE CAN ALSO SEE THAT THE DATA IS KIND OF OVERLAPPING WITH ITSELF, THERE IS A FEW TOO MANY COLUMNS LIKE UPDATED ALL THE WAY OVER HERE INSTEAD OF CONTINUING TO THE RIGHT. AND THEN ALSO A LOT OF NULL AND MISSING VALUES. IT SEEMS LIKE IT IS A GOOD IDEA TO GO AHEAD AND DO THAT DATA PREP WE DID. IF I SCROLL DOWN, NOW WE LOOK AT OUR DATA PREP RESULTS. SO NOW THIS DATA FRAME IS A LOT EASIER TO READ AND UNDERSTAND. WE CAN SEE THE DATA DOESN'T OVERLAP AND ALL THE DATA EXISTS. THERE IS NO LONGER ALL THOSE NULL VALUES. SO IT IS A LOT EASIER TO WORK WITH.

SO NEXT WE CAN GO AHEAD AND SEE THE OUTPUT OF WHEN WE WERE TRYING TO CALCULATE THE AVERAGE NUMBER OF TIMES EACH LANGUAGE HAS BEEN FORKED. SO LET'S TAKE A LOOK. AND SO WE CAN SEE WE HAVE A COLUMN HERE FOR LANGUAGE AND A COLUMN HERE FOR THE AVERAGE NUMBER OF TIMES IT HAS BEEN FORKED, AND ALL LOOKS CORRECT. AND WE CAN SEE IT DID SORT IN DESCENDING ORDER.

LANGUAGE IS AT THE TOP, HAVING FORK ON AVERAGE MORE OFTEN THE LANGUAGES DOWN HERE. AND THEN IT IS ALSO WORTH NOTING THAT FOR ALL OF THOSE DATA FRAMES IT IS ONLY SHOWING THE TOP 20 ROWS. AND SO THIS IS REALLY USEFUL BECAUSE IN CASE WE'RE WORKING WITH TERABYTES AND PET BITES OF DATA, WE DON'T WANT TO BE STUCK TRYING TO SHOW THE DATA FRAMES AND THEN HAVING IT TAKE FOREVER OR GETTING CONFUSED AND TOO CROWDED ON THE CONSOLE. OKAY. SO WE HAVE SUCCESSFULLY RUN OUR FIRST .NET FOR APACHE SPARK APP. SO LET'S GO AHEAD AND GO BACK TO OUR PRESENTATION. ALL RIGHTY. SO WE HAVE ALREADY DONE THAT DEMO. SO LET'S MOVE ON TO OUR NEXT SCENARIO, COMBINING MACHINE LEARNING WITH BIG DATA.

SO WHEN WE COMBINE MACHINE LEARNING WITH BIG DATA, IT MEANS THAT WE WANT TO SCALE THE TRAINING AND PREDICTION OF MACHINE LEARNING ALGORITHMS. WE'RE COMBINING ML WITH BIG DATA IS ML .NET, A FREE CLOSE PLATFORM OPEN SOURCE MACHINE LEARNING FRAMEWORK. AN EXAMPLE WE'RE LOOKING AT, WE'RE GOING TO BE PERFORMING SENTIMENT ANALYSIS. WHICH MEANS THAT IF WE'RE GIVEN A PIECE OF TEXT, WE WANT TO DETERMINE IF IT REPRESENTS SOMETHING POSITIVE OR SOMETHING NEGATIVE. SO IN OUR CASE, WE'RE GOING TO ANALYZE A SET OF ONLINE REVIEWS AND WANT TO KNOW WHICH ARE POSITIVE AND WHICH ARE NEGATIVE. IF WE WERE GIVEN A REVIEW SUCH AS I LOVE .NET FOR APACHE SPARK THAT WOULD BE CONSIDERED pPOSIT EITHER A TRUE OR A ONE DEPENDING IF WE'RE USING A BULLY TO INTERRUPT POSITIVE OR NEGATIVE SENTIMENT.

IF WE SAW A STATEMENT LOOK I HATE RUNNING INEFFICIENT BIG DATA QUERIES, THAT WOULD BE CONSIDERED A NEGATIVE SENTIMENT. SO LET'S GO AHEAD AND TAKE A LOOK AT OUR SENTIMENT ANALYSIS DEMO, WE COMBINE ML .NET AND FOR APACHE SPARK. OKAY. SO I'VE OPENED UP VISUAL STUDIO 2019 ONCE AGAIN AND IN THIS CASE, WHEN I LOOK AT THE NOUGAT PACKAGES I'VE INSTALLED, I HAVEN'T ONLY INSTALLED MICROSOFT.SPARK, I'VE INSTALLED MICROSOFT.ML, A NOUGAT PACKAGE WE NEED TO USE ML.NET.

I'M USING STATEMENTS BOTH YOU CAN SEE L .NET.- MICROSOFT.SPARK.SEQUEL. JUST LIKE WE HAD DONE IN THE BATCH EXAMPLE, WE START OFF BY CREATING A SPARK SESSION FOR OUR PROGRAM. AND I'VE JUST GONE AHEAD AND GIVEN MY APP A DIFFERENT NAME COMPARED TO THE BATCH APP. NEXT IT IS ALSO GO TO BE SIMILAR TO OUR BATCH EXAMPLE SENSE WE ARE STILL TECHNICALLY WORKING WITH BATCH DATA, JUST TAKING IT A STEP FURTHER BIER ARE FORMING MACHINE LEARNING. IN OUR CASE, WE WANT TO READ OUR REVIEW DATA INTO A DATA FRAME. SO I HAVE SOME YELP REVIEWS, SO I HAVE IT IN A YELP.CS FILE. I SET A FEW OPTIONS HERE. FOREIGN STANCE, I KNOW MY DATA HAS A HEADER, SO THE WITH DIFFERENT COLUMNS IN MY DATA, WHICH INCLUDE THE TEXT AND IF IT IS A POSITIVE OR NEGATIVE REVIEW, THOSE COLUMNS ARE LABELED.

SO THAT'S A HEADER. I DON'T WANT SPARK TO TREAT THAT HEADER AS PART OF THE DATA. IT COULD THROW OFF MY RESULTS. AND THEN I JUST WENT AHEAD AND CALLED SHOW SO I CAN SEE MY RAW AHEAD AND ACTUALLY PREDICT USING ML.NET. NOW, IT IS TIME FOR THE FUN PART. WE CAN ACTUALLY START COMBINING MACHINE LEARNING WITH BIG DATA.

SO HOW WOULD WE START CALLING THE ML.NET CODE. HOW WE CAN DO THAT IS USING A UDF. UDFs ARE A POPULAR SOLUTION, SO THAT WE CAN PERFORM SOME SORT OF FUNCTION ON LET'S SAY ICHIRO IN OUR DATA FRAME. SO IF I OPEN THIS UP HERE, WE CAN SEE THAT WE CREATE A NEW UDF BY CALLING THE UDF METH ODD AND REGISTER. AND THEN I HAVE STRING TO REPRESENT THE INPUT THAT I'M WORKING WITH, WHICH IS TEXT OR REVIEWS. AND THEN BOUILLON TO REPRESENT WHAT MY OUTPUT IS GOING TO BE, A TRUE OR FALSE OR NEGATIVE OR POSITIVE SENTIMENT.

I'VE DECIDED TO CALL MY U UDF MLUDF. I'M PASSING THE TEXT INTO A METHOD CALLEDSENTIMENT. WE MAY BE ASKING WHAT DO WE DO WITHIN IT? WITHIN SENTIMENT, IF I SCROLL DOWN HERE, WE CAN SEE THAT SENTIMENT ACTUALLY CONTAINS OUR MACHINE LEARNING CODES. THE CODE THAT WAS GENERATED FROM ML.NET AND I GOT THIS CODE AND I ACTUALLY ALSO TRAINED MY SENTIMENT ANALYSIS ML.NET MODEL BUILDER WE CAN USE WITHIN VISUAL STUDIO THAT HELPS US TRAIN AND WORK WITH MACHINE LEARNING IN A MUCH EASIER AND UNDERSTAND WAY. SO JUST TO SEE WHAT MODEL BUILDER LOOKS LIKE, IF I RIGHT CLICK ON MY PROJECT, AND SAY ADD MACHINE LEARNING, I CAN SEE THAT WITHIN HERE, I CAN CHOOSE THE SCENARIO, SO I CAN CHOOSE THINGS LIKE ISSUE CLASSIFICATIONS, SENTIMENT ANALYSIS, PRICE PREDICTION, MY CASE I WOULD HAVE CHOSEN SENTIMENT ANALYSIS AND GO AHEAD AND CHOOSE MY INPUT FILE, SO I COULD CHOOSE MY INPUT pREV TRAINING ON AND THEN ML.NET DOES THE TRAINING FOR ME AND GENERATES AWESOME CODE FOR ME. SO IF I GO BACK HERE, THIS WAS ACTUALLY CODE GENERATED FROM MODEL BUILDER. AND WHAT IT IS DOING IS ESSENTIALLY CREATING A WAY TO START PREDICTING.

SO IT CALLS THE ML MODEL TRAINED AND CREATED AND THEN IT CREATES A PREDICTIONVER STRINGS I PASSED TO IT. AND THEN DOWN HERE, I'VE CREATED CLASSES TO REPRESENT MY REVIEW DATA SINCE I DO NEED TO PASS THAT OR WORK WITH THAT WHEN I'M USING ML.NET. OKAY. SO NOW THAT I'VE GONE AHEAD AND CREATED A FUNCTION WHERE I CAN CALL THE ML.NET CODE, I WANT TO ACTUALLY CALL THAT FUNCTION. SO WHAT I'VE DONE HERE IS THERE IS THIS REALLY NEAT FUNCTIONALITY WHERE WE CAN ACTUALLY EXECUTE SEQUEL QUERIES. IF YOU'RE FAMILIAR WITH SEQUEL SYNTAX, WE CAN HAVE QUERIES WITHIN OUR CODE. SO IN MY CASE, I'VE GONE AHEAD AND SELECTED COLUMN ONE, WHICH REPRESENTS MY INPUT REVIEW TEXT, AND PAST COLUMN ONE, TO MY ML.NET METHOD AND WHAT I CAN DO HERE IS JUST GO AHEAD AND PRINT THAT OUT ESSENTIALLY.

AND THEN I CALLED SHOW, I CAN SEE THE OUTPUT OF MY OPERATIONS. AND THEN SIMILARLY, JUST LIKE WE HAD DONE USING THE BATCH APP, YOU'LL WANT TO MAKE SURE YOU SET YOUR ENVIRONMENT VARIABLE CORRECTLY, SO THAT APP FOLDER AND THEN WE CAN GO AHEAD AND GO INTO OUR APPS DIRECTORY AND BUILD AND RUN IT. LET'S LOOK AT HOW THAT CAME OUT. OKAY. SO WE CAN SEE HERE, I HAD BUILT MY PROJECT AND BUILT SUCCEEDED.

AND THEN I RAN SPARK SUBMIT USING PRETTY MUCH THE SAME TYPES OF PARAMETERS, JUST IN THIS CASE, HAD TO BE MY CURRENT APPS DLL. I SCROLL DOWN, WE SEE HERE FOR THE FIRST DATA FRAME, THAT WAS JUST THE RAW REVIEW DATA. SO THIS IS — THESE ARE ALL THE REVIEWS IN MY YELP DATA SET AND THIS IS THE TRUE ANSWER IF IT IS A NEGATIVE OR POSITIVE SENTIMENT. SO WE CAN SEE WHEN SOMEONE LOVED SOMETHING, THAT REPRESENTED WITH THE ONE, THAT MEANS A POSITIVE SENTIMENT, AND IF SOMEONE SAID SOMETHING WAS NOT GOOD, THAT WAS A ZERO, NEGATIVE SENTIMENT. SO NOW THE NEXT DATA FRAME WE'RE GOING TO SEE IS GOING TO REPRESENT THE PREDICTION FROM OUR ML.NET CODE, LET'S SCROLL DOWN AND SEE, AND WE CAN SEE HERE WITH WE'RE DEALING WITH THE SAME REVIEWS, BUT NOW THIS IS PREDICTED SENTIMENT. SO YOU CAN SEE HERE THAT IT LOOKS LIKE IT WAS PRETTY ACCURATE. WE CAN SEE WHEN SOMEONE LOVED SOMETHING, IT WAS PREDICTED AS TRUE, POSITIVE. AND THEN AGAIN WHEN SOMETHING WAS NOT GOOD, IT WAS FALSE.

NEGATIVE SENTIMENT. YOU SEE HERE, WE WERE SUCCESSFULLY ABLE TO COMBINE.NET AND ML .NET. GO BACK HERE. NOW THAT WE HAVE DONE THAT DEMO, WE HAVE ONE FINAL QUICK SCENARIO TO GO THROUGH AND THIS IS WITH STRUCTURED STREAMING OR REAL TIME DATA ANALYSIS. SO IN STRUCTURED STREAMING OR REAL TIME ANALYSIS, WE'RE WORKING WITH LIVE DATA, DATA FROM A SENSOR, LIKE IOT FACTORY SENSOR OR PHONE OR NETWORK. AND STRUCTURED STREAMING USES THE PRINCIPLE OF MICROBATCH PROCESSING. SO ESSENTIALLY IT TAKES OUR CONTINUOUS STREAM OF DATA AND DIVIDES IT INTO SMALLER LITTLE CHUNKS SO MAYBE EVERY FIVE SECONDS REPRESENTS A NEW BATCH.

AND THEN IT CAN PERFORM FUNCTIONALITY ON EACH OF THE SMALLER BATCHES AND THEN PENNED THE RESULT TO A TABLE THAT ALREADY EXISTS. SO THEN IF ANOTHER FIVE SECONDS PASSES, WE'LL HAVE ANOTHER BATCH, APEND IT, AND ANOTHER BATCH, PERFORM FUNCTIONALITY ON IT, APEND IT, SO ON AND SO FORTH UNTIL OUR EXTREME EXISTS. IN THE QUICK DEMO HERE, WE CAN DO LIVE OR REAL TIME SENTIMENT ANALYSIS. SO STILL USING .NET WITH ML.NET, YOU SEE IF I TYPE A STRING INTO A CONSOLE, WE CAN DETERMINE IN REAL TIME IF IT REPRESENTS A POSITIVE OR A NEGATIVE QUICK LOOK AT THAT DEMO.

OKAY. I STILL HAVE THE MICROSOFT ML, NOUGAT PACKAGES INSTALLED, I CREATED A SPARK SESSION. INSTEAD OF READING INTO A DATA FRAME, NOW I'M DOING SOMETHING WHERE I'M READING A STREAM AND I HAVE TO SET UP THE HOST IMPORTANT INFORMATION MY STREAM IS COMING FROM. THEN I STILL USE ML.NET WITH UDF AND CAN CALL THE ML.NET CODE IN A SIMILAR WAY. FINALLY, AS I'M WORKING WITH THE DATA AND DISPLAYING IT. I USE SOMETHING CALLED A STREAMING QUERY. I CAN GO AHEAD AND CALL RIGHT STREAM AND DETERMINE I WANT TO WRITE MY STREAM TO THE CONSOLE. AND INSTEAD OF SAYING SPARK.STOP, WE CAN DO QUERY DOT AWAIT TERMINATION. IF I GO OVER HERE, I CAN SEE HERE THAT I SET UP A QUICK NET CAP TERMINAL, EASY WAY TO READ TO OR WRITE FROM A CONNECTION. AND I CAN WRITE SOMETHING LIKE I LOVE SPARK.

AND THEN IN MY OTHER TAB OVER HERE, I'VE ALREADY BUILT AND RUN MY .NET FOR APACHE SPARK APP. YOU CAN SEE I'VE BEEN WORKING WITH MY DIFFERENT BATCHES HERE, SO EVERY TIME I HIT ENTER, CONSIDERED A NEW BATCH AND IT DETERMINES IN REAL TIME IF MY LINE WAS A POSITIVE OR NEGATIVE SENTIMENT. YOU CAN SEE WHEN I SAID I LOVE SPARK, IT WAS CONSIDERED TRUE. A POSITIVE SENTIMENT. SO THAT'S AWESOME. WE HAVE REAL TIME STREAMING WORKING. OKAY. SO A COUPLE OF QUICK STEPS FOR HOW TO GET STARTED. WE HAVE, IF YOU GO TO THE .NET WEBSITE, YOU CAN GO AHEAD AND READ EVEN MORE ABOUT .NET FOR APACHE SPARK, GO THROUGH A NEAT GETTING STARTED TUTORIAL WE HAVE WHERE YOU GET UP AND RUNNING WITH .NET SPARK ON YOUR LOCAL MACHINE IN TEN MINUTES OR LESS AND ALSO VISIT OUR R DOCS AND SEE OTHER LEARNING RESOURCES WE HAVE.

YOU CAN VISIT OUR GET HUB. GET HUB.COM AND GO AHEAD AND USE SOME OF THE DOCUMENTATION, SEE HOW THINGS ARE IMPLEMENTED, YOU CAN PARTICIPATE IN OPEN SOURCE COMMUNITY WITH SPARK. SO THANK YOU SO MUCH AND NOW I GUESS WE'LL TURN TO QUESTIONS. >> FANTASTIC. SO THAT WAS AN AMAZING PRESENTATION, BRIDGET. HELP ME OUT. I AM A LITTLE DENSE. SPARK ISN'T LIKE A DATABASE, IS IT? IS IT WHERE THE DATA IS STORED OR IS IT A MEDIUM FOR TRANSFERRING DATA OVER? HELP ME OUT TO SET THE CONTEXT FOR THESE QUESTIONS. >> SURE, YEAH. SPARK ISN'T A DATABASE. IT IS NOT WHERE THE DATA IS STORED. YOU'LL ALREADY HAVE YOUR DATA STORED IN SOMETHING LIKE — SOMEWHERE IN AZURE, AZURE DATA LINK STORAGE OR SOMETHING LIKE THAT.

SPARK IS ACTUALLY KIND OF LIKE THE FRAMEWORK OR THE TOOLS WE CAN USE TO START ANALYZING THAT DATA. SO IT ALLOWS US TO READ IT IN AND TO PROCESS IT MORE QUICKLY AND TO MAKE DIFFERENT CALLS TO IT SO THAT WE CAN GAIN MEANINGFUL INSIGHTS FROM IT. >> IT IS LIKE THE PIPE THAT TAKES THE DATA FROM ANY SCENARIO AND MOVES IT OVER, RIGHT? >> YEAH, THAT'S A GOOD WAY TO THINK OF IT. >> SO YOU MENTIONED A LOT OF STUFF WITH .NET. WE DIDN'T HAVE .NET-ISMS FOR SPARK. WHEN DID THIS START AND IF YOU WERE TO POINT — YOU POINTED OUT TONS OF COOL THINGS. IF YOU TELL PEOPLE ONE THING, LOOK AT THIS FIRST AND SEE WHY IT IS POWERFUL, WHAT WOULD YOU SUGGEST TO THEM? >> SO WE STARTED THIS PROJECT, WE FIRST STARTED IT TOWARDS THE BEGINNING OF THIS YEAR, SO I WOULD SAY ABOUT IN APRIL. EVEN THOUGH WE DID HAVE A PREDECESSOR TO THIS PROJECT A FEW YEARS AGO, BUT, YEAH, I WOULD SAY AS OF THIS YEAR IS WHEN WE STARTED HAVING AWESOME .NET BINDINGS TO APACHE SPARK.

AND FOR SOMETHING REALLY AWESOME, I WOULD SAY IF YOU CHECK OUT THAT LANDING PAGE, YOU CAN SEE REALLY THAT YOU CAN REALLY START PROCESSING TERABYTES OF DATA AT A MANAGEABLE SCALE. SO YOU DON'T HAVE TO SPEND, LIKE, DAYS AND WEEKS AND MONTHS AND YEARS PROCESSING ALL THIS DATA. YOU CAN START GAINING INSIGHT FROM IT IN A MATTER OF HOURS. >> THAT'S COOL. DOES .NET FOR APACHE SPARK SUPPORT USING F SHARP INSTEAD OF C SHARP? >> YES, I BELIEVE IT DOES. >> FANTASTIC. THIS IS AMAZING. THANK YOU SO MUCH, BRIDGET. NOW, HERE IS A COUPLE OF THINGS, THOUGH. BEFORE WE GO, I WANT TO REMIND EVERYBODY ABOUT — NOT FINDING IT, BUT THE ACTUAL TECH CHALLENGES THAT ARE AVAILABLE, LET ME GET MY HANDY NOTES OUT HERE, BECAUSE THEY'RE PRETTY GOOD. AND IF YOU HAVE MORE QUESTIONS FOR BRIDGET, GET THEM IN.

MAKE SURE YOU PARTICIPATE IN THE TECHNICAL TREASURE HUNT, HAPPENING ALL DAY, TONS OF TECHNICAL PROBLEMS YOU CAN SOLVE, MAYBE DO A LITTLE BIT OF CODE. IF YOU SOLVE ALL OF THEM, YOU GET A TON OF WONDERFUL PRIZES. IT IS COOL IF YOU GO TO .NET PARTY/COMP/PARTY YOU'LL SEE ALL THE COOL THINGS AND THERE SAY TON OF THINGS HAPPENING TODAY. GO TO APACHE SPARK COOLNESS WE'RE GOING TO GO TO A TY COOL.- COMMERCIAL BREAK HERE IN A SECOND. AFTER THAT, WE'RE GOING TO HAVE MORE SERVERS LESS WITH JOSH HOLLINGS AND TALK ABOUT 2.0, SERVERLESS ACTORS, ORCHESTRATIONS AND A STATEFUL FUNCTIONS.

ALL RIGHT. LET'S GO TO JEFF. >> IT'S THE SECOND TIME I'M WAY BETTER THAN A COMMERCIAL BREAK. WHY EVEN WAIT. SO I AM THRILLED TO BE HERE TODAY. MY VOICE IS GOING TO HOLD OUT FOR ONE MORE AMAZING SESSION HERE AT .NET COM. I'M SO EXCITED I WILL BE JUST AS DURABLE AS THE FUNCTIONS WE'LL TALK ABOUT. SO LAST YEAR AT .NET COM I TALKED ABOUT THE DURABLE FUNCTIONS AND I'LL DO A SLIGHT REFRESHER ON THAT FOR THOSE WHO MIGHT NOT HAVE SEEN LAST YEAR'S ONE. BUT WHAT I WANT TO TALK ABOUT TODAY IS DURABLE FUNCTIONS 2.0. SOME OF THE STATEFUL PATTERNS THAT YOU CAN DO FOR .NET TO LET YOU DO STATE, ORCHESTRATIONS, THAT UNLOCK AN ENTIRE NEW WORLD OF SCENARIOS YOU CAN START TO GET INTO. SO TO START WITH, AS MENTIONED BEFORE, I'M JEFF HOLLAND, A PROGRAM MANAGER FOCUSING ON AZURE FUNCTIONS SO WE'LL DO AN OVERVIEW OF WHAT DURABLE FUNCTIONS ARE. WE'LL TALK ABOUT THE DURABLE ENTITIES, GO OVER SOME EXAMPLES AND SCENARIOS AND IF YOU HAVE QUESTIONS BE SURE TO TWEET # .NET COM AND I'LL ANSWER THEM.

PLEASE ASK QUESTIONS AS WE GO SO I CAN ANSWER THEM HERE LIVE. SO THINKING ABOUT FUNCTIONS. I APOLOGIZE FOR THOSE WHO MIGHT NOT BE FAMILIAR WITH AZURE FUNCTIONS ALREADY. I'M GOING TO KIND OF MAKE SOME ASSUMPTIONS THAT YOU'RE AWARE OF, WHAT A SERVERLESS FUNCTION IS IF YOU HAVEN'T USED ONE. WHEN YOU THINK OF FUNCTIONS THERE'S OFTENTIMES PAIRED WITH SOME QUALIFICATIONS, OH, THEY'RE SHORT LIVED AN IF YOU WANT TO DO A PATTERN, AN EVENT HAPPENS LIKE HEY, WE HAD A CUSTOMER.

WHENEVER WE ADD A CUSTOMER WE NEED TO CREATE A RECORD FOR THEM IN THE CRM DATABASE AND SEND SOME SQL DATABASE. YOU HAVE THREE TASKS THAT NEED TO HAPPEN. THE WAY THAT TRADITIONALLY YOU HAVE TO BUILD THAT IS LIKE WHAT'S SHOWING BEHIND ME. THIS IDEA THAT YOU HAVE FUNCTION ONE. DROPS IN THE QUEUE. DOES THE SHORT PROCESSING AND THEN DROPS IT INTO THE QUEUE AND HITS FUNCTION THREE. YOU CAN DO IT THAT WAY BUT IT'S A BIT CUMBERSOME AS A DEVELOPER OR AN OPERATOR TO HAVE TO WRITE THE DECOUPLED CODE, MANAGING IT, DEPLOYING IT, LOOKING AT HOW MANY CUSTOMERS I'M ADDING IN THE HEALTH OF THE PIPELINE. WHAT DURABLE FUNCTIONS LETS YOU DO AN EXTENSION, IT CAN BE INSTALLED IN AS THE NUGET PACKAGE. YOU CAN WRITE IT IN CODEFUL WAYS TO DESCRIBE MORE STATEFUL AND LONG RANGE STUFF.

THIS IS AN EXAMPLE OF AN ORK STR STRAIGHT — ORCHESTRATION. THAT'S WHAT I HAVE DESCRIBED HERE IN CODE. BUT HERE RATHER THAN ME MANAGING THE QUEUES OR MENTALLY MAP HOW THINGS MIGHT BE HAPPENING, I HAVE BEEN ABLE TO WRITE THIS AS CODE. AS A SPECIAL TYPE OF FUNCTION. AS A DURABLE FUNCTION. NOW, THIS ENTIRE ORCHESTRATION MIGHT TAKE 30 MINUTES OR THREE DAYS. THAT'S TOTALLY FINE. DURABLE FUNCTIONS WILL DO IT ALL FOR ME. AS A NICE EXTENSION AND LET ME DESCRIBE IT AND MONITOR IT AND MANAGE IT AS CODE. HERE I CAN SEE WHAT'S HAPPENING. FUNCTION ONE, TWO, THREE. IF AN EXCEPTION HAPPENED YOU'LL NOTICE I HAVE A TRY AND A CATCH BLOCK SO I CAN CATCH EXCEPTIONS AND HANDLE THEM. SO IT'S THIS NICE PATTERN THAT I'M ABLE TO DO. AS I MENTIONED I'M GOING TO BE DURABLE. I'LL MAKE IT THROUGH THIS. SO WHAT ARE SOME OF THE PATTERNS THAT YOU CAN DO WITH DURABLE FUNCTIONS? I MENTIONED BEFORE THE KIND OF ONE I SPENT SOME TIME ABOUT LAST YEAR WAS TALKING ABOUT ORCHESTRATIONS. SO I HAVE MY ORCHESTRATER FUNCTION IT'S CALLING ME TO THE ACTIVITY FUNCTIONS.

SHE HAS ARE OTHER FUNCTIONS IN THE SAME APP. I CAN CHAIN THEM TOGETHER BUT I CAN DO OTHER PATTERNS. SEQUENCING. YOU CAN DO FAN OUT AND FAN IN. LIKE IMAGINE THE SCENARIO WHERE HEY, EVERY WEEK THERE'S GOING TO BE A REPORT, I'LL GET A BATCH REPORT. FOR EVERY SINGLE RECORD IN THAT REPORT I WANT TO GO EXECUTE A FUNCTION. AND RATHER THAN ME HAVING TO KIND OF MANUALLY DROP STUFF IN QUEUES, DURABLE DOES IT FOR ME. I CAN DESCRIBE THIS AS A FOR LOOP. DURABLE FUNCTIONS IS GOING TO DO THAT FOR YOU. EXTERNAL EVENTS CORRELATION. I HAVE AN EXAMPLE I LIKE TO THINK ABOUT.

IMAGINE THAT YOU'RE HIRING A NEW EMPLOYEE AND THERE'S THREE EVENTS THAT HAVE TO HAPPEN. THEY HAVE TO UPLOAD THEIR DRIVER'S LICENSE, UPLOAD THEIR SOCIAL SECURITY INFORMATION AND MAYBE SOME FORMS. I WANT TO HAVE HAPPEN IS WAIT UNTIL ALL THREE OF THOSE THINGS HAVE HAPPENED AND THEN CONTINUE MAYBE FIRE A THIRD FUNCTION THAT SAYS HEY, YOU'RE DONE. YOU HAVE UPLOADED ALL YOU NEEDED TO DO. YOU CAN WRITE IN CODE A WAY FOR A FUNCTION THAT WAITS FOR THE THREE EXTERNAL EVENTS, WAITS FOR ALL OF THEM TO HAPPEN. WHEN ALL THREE HAVE HAPPENED WE'LL CONTINUE ON. ALSO WRITE IN THE .NET CODE LIKE I SHOWED YOU EARLIER. LONG RUNNING OPERATIONS IS A POWERFUL PATTERN AS WELL.

YOU WANT TO MONITOR SOMETHING. I DID A SAMPLE A FEW MONTHS AGO WHICH IS PRETTY SIMPLE. IT'S ALSO IN OUR DURABLE FUNCTIONS DOCS WHICH WAS HEY, TELL ME WHEN THE WEATHER IS GOING TO BE NICE OVER THE NEXT SIX HOURS. SO YOU CAN KICK OFF A FUNCTION IN EVERY TEN MINUTES IT'S GOING TO POLL THE WEATHER. HEY, IS IT GOING TO RAIN, IS IT GOING TO BE SUNNY? I LIVE IN SEATTLE SO WE NEED THIS DURABLE FUNCTION TO KNOW WHEN IT'S SUNNY OUTSIDE. AS SOON AS THE WEATHER IS NICE IT SENDS ME A TEXT MESSAGE. THE IDEA THAT I HAVE THIS LONG RUNNING FUNCTION I CAN DESCRIBE THAT AS A DURABLE FUNCTION AS WELL. ASYNCHRONOUS WORK, THIS IS ANOTHER POWERFUL PATTERN. MAYBE I WANT ONE THAT CAN BE TRIGGERED ON THE HDPD REQUEST AND MAYBE IT WILL TAKE FIVE OR TEN MINUTES TO PROCESS THE WORK.

I DON'T WANT TO CALL THE FUNCTION AND HAVE THE THING THAT'S CALLING IT KEEP THAT REQUEST ALIVE FOR THOSE FIVE OR TEN MINUTES. OFTENTIMES, LIKE IF IT'S FROM A MOBILE APP IT'S VERY COMMON I'LL HAVE A HICCUP IN THE CONNECTION AND MIGHT DISCONNECT AFTER THREE OR FOUR MINUTES. NOT A SCALEABLE PATTERN. SO WITH DURABLE FUNCTIONS I CAN SAY HEY, THE FUNCTION, FIRE IT AND THEN RETURN BACK IMMEDIATELY WITH A STATUS END POINT. I GOT YOUR REQUEST. CHECK BACK IN A FEW SECONDS SO LET ME KNOW WHAT MY PROGRESS IS. SO YOU CAN KIND OF HAVE LIKE THIS PROGRESS API WHERE THE FUNCTION MIGHT TAKE TEN MINUTES TO PROCESS THAT HDP REQUEST BUT THE CLIENTS JUST CHECK THE STATUS. LIKE HEY, ARE YOU DONE YET, NO, ARE YOU DONE YET, YES, HERE'S THE RESULT. SUPER SEAMLESS PATTERN. A FEW LINES OF THE DURABLE CODE. MAYBE I HAVE AN APPROVAL, I SUBMIT A DOCUMENT I NEED TO WAIT FOR JEFF TO APPROVE IT. I NEED TO WAIT FOR SETH TO APPROVE IT.

ONCE BOTH HAVE APPROVED IT, THEN SUBMIT IT TO THE FINAL RESULT. SO THESE ARE JUST A FEW OF THE PATTERNS THAT ARE MORE STATEFUL IN NATURE. MORE LONG RUNNING IN NATURE. IF YOU'RE USING SERVERLESS OUT OF THE BOX OR AZURE FUNCTIONS OUT OF THE BOX, HOW DO I SOLVE THESE AND IT'S CODE SAMPLES AND EXAMPLES AND IN FACT ALL OF THE PATTERNS I HAVE SHOWN HERE IF YOU GO TO THE DURABILITY FUNCTION, WE HAVE CODE SAMPLES AND EXAMPLES FOR DOING ALL OF THESE.

NOW, HOW DOES DURABLE FUNCTIONS WORK BEHIND THE SCENES? I WANT TO ILLUSTRATE WITH THIS SLIDE. THE COLORS ARE HARD TO NOTE. BUT THIS THE GRAY BOX I HAVE THE DURABLE FUNCTION CODE AND IT'S JUST A REALLY SIMPLE DURABLE FUNCTION ORCHESTRATER. IT WILL CALL THE SAY HELLO FUNCTION AND PASS IN THE VALUE WORLD. NOW, BEHIND THE SCENES HOW DURABLE FUNCTIONS IS WORKING IS YOU WRITE THIS LITTLE BIT OF CODE HERE. THAT GRAY BOX UP TOP. AND DURABLE FUNCTIONS THIS EXTENSION TO THE AZURE FUNCTION IS GOING TO INTERACT WITH AZURE STORAGE, TO MONITOR AND MAINTAIN THE STATE FOR YOU.

IT'S GOING TO KEEP WHAT'S CALLED AN EXECUTION HISTORY SO THAT IT KNOWS WHAT STEP IT'S AT, STILL ENABLING YOU TO DO LIKE SCALING TO ZERO. SO FOR AN EXAMPLE IF I WAS DOING AN APPROVAL WORK FLOW I NEED TO WAIT OR THE SETH TO APPROVE A DOCUMENT BEFORE I CAN CONTINUE YOU'RE NOT PAYING FOR THE TWO, THREE, FOUR HOURS OR FOUR DAYS WHERE YOUR FUNCTION IS NOT RUNNING AND YOU'RE WAITING FOR APPROVAL. YOUR FUNCTION CAN SCALE TO ZERO AND WHEN SETH APPROVES THE DOCUMENT IT WAKES UP AND CONTINUES ON. SO THAT'S ALL HAPPENING BECAUSE OF THE STATE MANAGEMENT BEHIND THE SCENES SO LET'S WALK THROUGH IT NOW. ALL RIGHT. LET'S SAY I TRIGGER OFF THIS FUNCTION. HEY, START MY ORCHESTRATION, IT WILL START TO EVALUATE THE FIRST LINE OF CODE. ALL RIGHT. SO CREATE A NEW LIST OF OUTPUTS AND IT WILL GET TO THE NEXT LINE AND DURABLE FUNCTIONS IS GOING TO SEE THIS AWAIT WORD. WHEN IT SEES THE AWAIT WORD IT KNOWS THERE'S SOME ACTIVITY OR TASK IT NEEDS TO PERFORM. AS I MENTIONED BECAUSE IT MIGHT BE RESUMING FROM A PREVIOUS STATE, IT MIGHT HAVE CRASHED FROM THE PREVIOUS STATE THE FIRST THING IT WILL DO IS IT'S NOT GOING TO EVALUATE THE CODE BUT ASK DURABLE FUNCTIONS AND IT WILL SAY, HEY, HAVE I DONE THIS, HAVE I SAID HELLO TO WORLD? THE DURABLE FUNCTION ASKS THE EXECUTION HISTORY, HAVE I SAID HELLO TO THE WORLD AND THE DURABLE FUNCTION IS LIKE, NO, YOU HAVEN'T YET.

IT WILL GO AHEAD AND SCHEDULE THE WORK. IT WILL DROP A MESSAGE IN THE QUEUE THAT'S MANAGED COMPLETELY FOR YOU. HEY, WE NEED TO SAY HELLO TO THE WORLD. AFTER THAT, YOUR DURABLE FUNCTION STOPS. IT'S DONE. I SCHEDULED THE LAST SO I'LL WAIT TO GET TRIGGERED AGAIN. AT THIS POINT YOUR ACTIVITY FUNCTION YOUR FUNCTION THAT'S ACTUALLY GOING TO DO THE WORK, YOUR SAY HELLO FUNCTION IT HAD SOME WORK SCHEDULED FOR IT. SO IT WILL WAKE UP. JUST BEEN TRIGGERED. IT'S GOT WORK SCHEDULED FOR IT SO IT WAKES UP AND TRIGGERS AND SAYS, HEY, MY ORCHESTRATER WANTED ME TO SAY HELLO TO THE WORLD SO THE FUNCTION IS GOING TO DO THE WORK. IT'S GOING TO UPDATE THE EXECUTION HISTORY TABLE. YOU'LL NOTICE I VISUALIZED THAT HERE. I SAID HELLO TO THE WORLD. AND THEN THAT SHUTS DOWN. NOW WHEN THAT HAPPENS THE ORCHESTRATER GETS TRIGGERED AGAIN. WHEN THE ORCHESTRATER STARTS AGAIN, IT DOESN'T RESUME FROM THE MIDDLE. THERE'S NOT REALLY A WAY TO JUST START FROM LINE 52. SO WHAT'S GOING TO HAPPEN IS THE DURABLE FUNCTION IS GOING TO START FROM THE TOP AGAIN.

IT'S GOING TO EVALUATE THAT FIRST LINE OF CODE AND AS I MENTIONED, HEY, I NEED TO AWAIT SOMETHING. I NEED TO AWAIT SAYING HELLO THE WORLD. IT WILL MAKE THAT SAME CHECK. IT WILL SAY, HEY, EXECUTION HISTORY, HAVE I ALREADY DONE THIS THING? HAVE I SAID HELLO TO THE WORLD? IN THIS CASE I HAVE. RIGHT, IN THE HISTORY TABLE, MY ACTIVITY FUNCTION DID THE WORK, CREATED THE OUTPUTS AND LIKE, YEAH, YOU SAID HELLO TO THE WORLD. THE RESULT WAS HELLO WORLD SO THEN THE FUNCTION IS LIKE GREAT, I'LL GO TO THE NEXT LINE. YOU CAN IMAGINE IF I CALL ANOTHER FUNCTION AND ANOTHER FUNCTION THIS PATTERN KIND OF CONTINUES WHERE I'M SCHEDULING WORK. THE WORK GETS SCHEDULED.

I'M UPDATING THE RESULTS IN THE HISTORY TABLE. THEN MY FUNCTION SPINS UP AGAIN AND STARTS AGAIN. ALL OF THIS HAPPENS FOR YOU BEHIND THE SCENES. YOU DON'T HAVE TO WORRY ABOUT THIS KIND OF EXECUTION HISTORY SONG AND DANCE. YOU WRITE THAT REALLY SIMPLE CODE THAT I SHOWED EARLIER THAT LOOKS LIKE THIS. BUT BEHIND THE SCENES THAT'S WHAT'S HAPPENING. IT'S USING STORAGE AND QUEUING SCHEDULING WORK AND REPLAYING THAT ORCHESTRATER AND REHYDRATING THE STATE EVERY TIME IT PLAYS. NOW, THAT'S DURABLE FUNCTIONS SO LET'S TALK ABOUT DURABLE FUNCTIONS 2.0. AS THE NAME IMPLIES 2.0 IS BETTER. IT'S GREAT. IT'S NEW, IT'S EXCITING. DURABLE FUNCTIONS 2.0 IS CURRENTLY IN PREVIEW. WE HAVE SHIPPED A BETA TO PACKAGE FEW WEEKS AGO. WHAT ARE SOME OF THE IMPROVEMENTS THAT ARE COMING TO DURABLE FUNCTIONS? WELL, THE FIRST ONE THAT I'M THE MOST EXCITED ABOUT IS THIS DURABLE ENTITIES PATTERN THAT WE'LL GO INTO IN A SECOND.

IF YOU HAVE DONE ANY ACTOR PROGRAMMING BEFORE, LIKE OCA.NET YOU MIGHT SEE SOME SIMILARITIES IN THIS PATTERN. THE OTHER THING IN 2.0 IS THE ABILITY TO MAKE RESILIENT HDP REQUESTS FROM AN ORCHESTRATER. CALL FUNCTION ONE, TWO, OR THREE YOU CAN SAY, OH, NOW MAKE AN HDP REQUEST. YOU CAN ADD AUTHENTICATION TO THE REQUEST SO MAYBE YOU HAVE A DURABLE FUNCTION TO CALL A FEW AZURE API'S. ALL WITHIN A DURABLE FUNCTION. PLUGABLE STATE PROVIDERS, SO PREVIOUSLY DURABLE FUNCTIONS JUST WORKED ON AZURE STORAGE. WE HAVE A METHOD TO SWAP IN DIFFERENT PROVIDERS. MAYBE YOU WANT IT TO BE REDDIT BECAUSE YOU'RE RUNNING THE DURABLE FUNCTIONS ON KUBERNETES OR IN CAFTA, WE HAVE A NEW PATTERN SO YOU CAN PLUG IN DIFFERENT STATE PROVIDERS AND YOUR CODE DOESN'T NEED TO KNOW ABOUT IT, BUT IT CAN TAKE ADVANTAGE OF THE BETTER THROUGH PUT AND ET CETERA. WE'RE SHIPPING A ROSALYN ANALYZER THAT WILL EVALUATE YOUR CODE OR VS CODE AS YOU WRITE IT TO LET YOU KNOW OF COMMON PIT FALLS. LIKE HEY THE CODE ISN'T DETERMINISTENT. AND WHEN IT DOES A REPLAY IT MIGHT GET IN A WEIRD STATE. OUR ANALYZER CAN DETECT THAT AND DO THE SQUIGGLY LINES FOR YOU.

WHICH IS FANTASTIC. WE MADE NICE IMPROVEMENTS AROUND THE INTERFACES AND TESTABILITY SO YOU CAN WRITE FOR YOUR DURABLE FUNCTIONS. SO THIS IS SOME OF THE GOODIES THAT ARE THERE. BUT LET'S ACTUALLY SPEND THE NEXT FEW MINUTES DIVING IN TO DURABLE ENTITIES. NOW, WHAT IS A DURABLE ENTITY? TRADITIONALLY, YOU THINK ABOUT FUNCTIONS, YOU THINK ABOUT STATELESS AND SHORT LIVED. THESE ARE STATEFUL FUNCTIONS THAT CAN BE LONG RUNNING IN THEIR STATE. SO LET'S TAKE A VERY SIMPLE EXAMPLE. A COUNTER. LET'S PRETEND THAT I'M CREATING THE NEXT FITBIT OR APPLE WATCH. EVERYONE IS GOING TO GET A DEVICE. I WANT TO TRACK THE AMOUNT OF STEPS THAT SOMEONE HAS TAKEN. SO I REALLY NEED SOME STATE FOR EACH USER, THIS COUNTER. LET'S LOOK AT HOW YOU CAN WRITE THAT USING DURABLE FUNCTIONS. THIS IS AN EXAMPLE OF A DURABLE ENTITY. THIS IS A ENTIRE FUNCTION APP. THIS IS ALL THE CODE I NEED FOR MY FUNCTION APP. REALLY IT LOOKS LIKE A CLASS BECAUSE THAT'S WHAT IT IS.

IT'S A COUNTER CLASS. AND MY CLASS HAS PROPERTIES. I HAVE THE COUNT PROPERTY WHICH IS AN INTERGER WHICH I'LL SET TO ZERO. I CAN INCREMENT THE COUNT, I CAN DECKRAMENT THE COUNT. I CAN TERMINATE AN INSTANCE OF A COUNTER. MAYBE I HAVE JEFF'S COUNTER. I HAVE CHRIS' COUNTER, SETH'S COUNTER. MAYBE I WANT TO DESTROY ONE OF THE COUNTERS. IN FACT, IF YOU RIG FUNCTIONS BEFORE THE ON THING THAT MIGHT LOOK FAMILIAR IS THIS LINE AT THE BOTTOM. HEY, I HAVE A FUNCTION, BUT ALL IT'S SAYING IS MAP THIS.

TO A DURABLE ENTITY OF CLASS COUNTER. THAT'S THE ONLY CODE I HAVE TO WRITE HERE FOR A FUNCTION APP. AZURE FUNCTIONS WILL NOW TURN THIS INTO THE COUNTER. LET'S CHECK THAT OUT NOW. I HAVE HERE AN EXAMPLE OF THAT COUNTER. THIS IS THE SAME COUNTER WE WERE JUST LOOKING AT. THE ONLY THING I HAVE ADDED HERE IS I HAVE INJECTED IN A LOGGER. YOU CAN INJECT IN BINDINGS AS WELL, YOUR OWN CUSTOM SERVICES BUT HERE I'M JUST INJECTING IN A LOGGER. BUT IT'S STILL THAT COUNTER. THIS IS THE ENTIRE CODE FOR MY FUNCTION APP HERE ON THE SCREEN. WHAT'S AMAZING HERE IS JUST LIKE ANY FUNCTION APP LET'S GO AHEAD AND START AND DEBUG THIS PROJECT. AGAIN, ALL IT IS THE 25 LINES OF A CLASS DEFINITION SAYING HEY, I WANT YOU TO KEEP TRACK OF A SERVICELESS COUNTER. IT WILL SPIN THAT UP AND A RUN THE RUN TIME ON THE MACHINE RIGHT NOW. BECAUSE I HAVE THE DURABLE FUNCTIONS EXTENSION INSTALLED, IN FACT, IF I OPEN MY CS PROJECT FILE I HAVE PULLED IN THE BETA 2 PACKAGE OF THE DURABLE TEST FUNCTION. IT'S GOING TO RECOGNIZE THIS IS A DURABLE ENTITY, THIS IS A STATEFUL FUNCTION.

IT'S GOING TO LET ME INTERACT WITH IT. NOW, THERE IS A DURABLE SDK I CAN USE TO INTERACT WITH THAT COUNTER INSIDE OF MY CODE IF I WANTED TO, OR DURABLE ENTITIES EXPOSES A DIRECT REST API, SO I PERFORM OPERATIONS AND GET THE STATE OF THE ENTITIES OVER HDP WITHOUT HAVING TO CREATE A TRIGGER. SO MY FUNCTION IS NOW RUNNING AND HERE I HAVE SOME HDP REQUESTS THAT I'M GOING TO USE TO CALL THIS ENTITY. SO IT'S RUNNING ON LOCAL HOSTS 771. HERE'S THE PATH TO THAT REST API. HEY, CALL DURABLE TASK AND ENTITY. AND HERE I HAVE COUNTER. WHY DOES IT SAY COUNTER HERE? THAT'S THE NAME OF THE CLASS, THE FUNCTION, CALLED COUNTER AND IN THE PATH THIS IS WHERE I PUT IN THE I.D.

OF THE COUNTER. IF YOU THINK OF THE STATEFUL FUNCTION, I MIGHT NOT JUST HAVE JEFF'S COUNTER BUT SETH'S COUNTER. HERE'S WHERE I CAN DEFINE THE DIFFERENT COUNTERS THAT ARE RUNNING. EACH MIGHT HAVE A DIFFERENT STEP FOR EACH PERSON. LET'S TRY TO GET THE STEPS FOR JEFF RIGHT HERE. WHAT IT'S TURNING IS A 404 NOT FOUND. THAT'S BECAUSE THIS IS A BRAND-NEW FUNCTION, BRAND-NEW STORAGE ACCOUNT. I HAVE NEVER RUN IT BEFORE.pNEV. HE'S NEVER TAKEN A STEP. SO IT DOESN'T EXIST YET. WHICH IS FINE. LET'S DO AN OPERATION ON THE JEFF COUNTER. LET ME MOVE THIS OUT OF THE WAY. SO HERE I HAVE A POST REQUEST THAT I'M GOING TO MAKE. AND HERE I'M GOING TO SAY INCREMENT THE COUNTER FOR JEFF. NOW WHY DOES IT SAY INCREMENT HERE? AND THAT'S BECAUSE IF I COME BACK HERE TO MY COUNTER CODE, IT IS BECAUSE HERE I DEFINED THE METHOD CALLED INEMENT. SO IT MAPS TO THE METHOD I DEFINE. SO LET'S GO AHEAD AND SEND THAT REQUEST. IT SAYS ACCEPTED. SEND IT A FEW MORE TIMES. SEND SEND SEND.

I HIT THAT FOUR OR FIVE TIMES. NOW LET'S DO THE FIRST CALL AGAIN. GET THE CURRENT STATE OF JEFF. WHEN I CALL THAT HERE I GET BACK A 200 OKAY. YOU'LL NOTICE IT ACTUALLY KNOWS THE COUNT FOR JEFF IS FIVE. NOW, WHAT'S COOL HERE IS I COULD SHUT DOWN MY MACHINE. I COULD RESTART MY MACHINE. I COULD SPIN IT BACK UP AGAIN, MAKE THIS SAME CALL. IT'S GOING TO REMEMBER OH, YEAH, I HAVE THIS FOR JEFF AND THE COUNT IS FIVE. I COULD PUBLISH THIS TO THE CLOUD RUNNING AS AN AZURE FUNCTION. IT IS ONLY GOING TO RUN AND BILL ME WHEN IT'S BEING INVOKED BUT I CAN CALL IT IN THREE WEEKS TIME AND IT'S GOING TO REMEMBER THE COUNT FOR JEFF IS FIVE. SO THIS IS A POWERFUL PATTERN THAT LETS ME NOW REPRESENT STATE.

KEEP THAT STATE AROUND. MANIPULATE THAT STATE. AND IT HAS SOME OPERATIONS ON THAT STATE. COMPLETELY SERVICELESS. SO ALL OF THE BENEFITS AND FUNCTIONS, MASSIVE SCALE. ONLY PAY FOR WHEN IT'S RUNNING BUT IN THIS CASE USING DURABLE FUNCTIONS IN THE NEW STATEFUL ENTITY PATTERN. WHAT ARE SOME OF THE PLACES THAT THIS MIGHT COME IN HANDY? THERE'S A LOT. I HAVE ANOTHER EXAMPLE I WON'T RUN INTO NOW LIKE IMAGINE I HAVE A BUNCH OF SESSIONS, RIGHT? I WON'T RUN THE SAMPLE BUT I'LL SHOW IT. I THINK IT'S A GOOD ONE TO VISUALIZE.

IMAGINE I HAVE SESSIONS, I HAVE A SESSION CLASS, A SESSION AT .NET CONF. MAYBE THEY CAN SUBMIT REVIEWS OR EVALUATIONS WHICH IS A DICTIONARY WITH STRING AND DOUBLE STRING BEING THE ATTENDEE NAME AND I CAN SUBMIT AN EVALUATION. HERE I'M GOING TO PASS IN AN EVALUATION. JUST AN ATTENDEE AND THE SCORE AS I MENTIONED. I CAN ADD THOSE TOGETHER. I CAN GET BACK AN AGGREGATATION. I CAN NOW DEPLOY THIS DURABLE ENTITY AS A FUNCTION APP, HAVE IT PROCESSING AND MAINTAINING FOR EVERY SESSION HAPPENING AT THE CONFERENCE. MAYBE MULTIPLE IN PARALLEL AND DURABLE ENTITIES IS GOING TO MAINTAIN THE STATE FOR ME. STORING THIS IN AZURE STORAGE BEHIND THE SCENES BUT I AS A DEVELOPER HAVEN'T HAD TO WORRY ABOUT WIRING THAT UP. I GET NICE GUARANTEES TOO WHERE IMAGINE THAT, YOU KNOW, I TRIED TO INCREMENT MY COUNTER 100 TIMES AT THE EXACT SAME SECOND. I WILL GUARANTEE SINGLE THREADED FOR ONE INSTANCE OF THE COUNTER. SO THAT MY COUNTER WILL INCREMENT 100 TIMES. IT WON'T HAVE RACE CONDITIONS AS WELL. THERE'S SOME COOL STUFF HERE. THE LAST PATTERN I WANT TO SHOW WITH DURABLE ENTITIES THIS GETS MORE ADVANCED SO HOPEFULLY YOU HAVE BEEN ABLE TO FOLLOW ALONG SO FAR.

IT'S A PATTERN I HAVE COMING UP AGAINST A LOT, SO LET ME WALK YOU THROUGH THIS HERE. IMAGINE I HAVE A SIMPLE ARCHITECTURE. I HAVE AZURE EVENT HUBS, THOSE EVENTS ARE TRIGGERING A FUNCTION. THAT FUNCTION MAYBE NEEDS TO UPDATE SOME DATA LIKE COSMOSDB OR SQL. BEHIND THE SCENES AS THE THOUSANDS OF EVENTS ARE COMING IN, MY FUNCTION IS ACTUALLY PROBABLY GOING TO SCALE. IT'S GOING TO SCALE TO MANY, MANY INSTANCES. THE PROBLEM COMES IN WHAT HAPPENS IF THERE'S AN OUTAGE OR SOME ISSUE WITH MY DATABASE DOWNSTREAM? WHAT IF MY FUNCTION IS TRIGGERING THE WHOLE TIME IT'S TRYING TO UPDATE THE RECORDS IN A DATABASE BUT THE CALLS ARE FAILING. PEOPLE CAN GET NERVOUS, BECAUSE IT'S TRIGGERING BUT HITTING FAILURE AFTER FAILURE AFTER FAILURE. SO WHAT I WANTED TO IMPLEMENT IS A CIRCUIT BREAKER PATTERN WHERE IDEALLY I HAVE SOMETHING THAT IS MONITORING THE STATE AND THE HEALTH OF MY CIRCUIT. SO HERE IT'S THE SAME ARCHITECTURE BUT NOTICE I HAVE ADDED IN THE STOP LIGHT HERE WHICH IS GREEN WHICH IS SUPPOSED TO BE SAYING WHICH IS HEALTHY. WHAT I WANT TO HAVE HAPPEN IS THAT IF I START GETTING A BUNCH OF EXCEPTIONS LIKE MAYBE 100 EXCEPTIONS, I ACTUALLY WANT TO SET THIS TO RED AND STOP TRIGGERING MY FUNCTION.

BUT HOW DO I DO THAT? THAT CAN BE COMPLICATED TO SOLVE FOR, ESPECIALLY NOTING THAT MY FUNCTIONS ARE SCALING ACROSS THE CONCURRENT INSTANCES. WELL, THIS IS WHERE DURABLE ENTITIES COMES IN. I'M GOING TO DEPLOY A DURABLE ENTITY WHICH WILL BE MONITORING THE STATE OF MY FUNCTION CIRCUIT. THAT STOP LIGHT. AND WHENEVER ONE OF MY FUNCTIONS HITS AN EXCEPTION I WANT IT TO SEND A SIGNAL UP TO THE ENTITY. IT'S UP TO THE CIRCUIT ENTITY, THAT STATEFUL FUNCTION TO DO SOME AGGREGATATION MATH AND IF IT NOTICES I GET 100 EXCEPTIONS IN THE SAME SECOND, IT'S UP TO THE DURABLE ENTITY TO STOP THE TRIGGER. TO TURN IT OFF.

THAT'S WHAT I WANTED TO BUILD. IN FACT, THERE'S A SAMPLE ON GITHUB THAT DOES EXACTLY THAT. I HAVE A DURABLE ENTITY THAT HAS THE STATE OF THE CIRCUIT OPEN OR CLOSED. YOU CAN ADD A FAILURE TO IT. ANY OF MY FUNCTIONS CAN SAY I HIT AN EXCEPTION. I HAVE SOME CODE. I WON'T DIG INTO IT RIGHT NOW. I'M SAYING, YOU KNOW WHAT, IF I EVER HAVE MORE EXCEPTIONS IT'S LIKE 50 EXCEPTIONS WITHIN A 30 SECOND WINDOW THEN I WANT TO BREAK THE CIRCUIT AND TURN IT OFF. I HAVE SOME CODE. SO IT'S TESTING OUT NOW. I HAVE HERE RUNNING IN THE AZURE PORTAL THIS IS MY EVENT HUB TRIGGERED FUNCTION. RIGHT NOW IT'S RUNNING. IT'S HAPPY. LET'S GO AHEAD AND PUBLISH NOW A THOUSAND POISON EVENTS TO THIS FUNCTION. I'M GOING TO SEND VERY BAD EVENTS.

LET'S POST A THOUSAND BAD EVENTS. LET'S PRETEND THESE ARE DATABASE FAILURES. WE — YEP IT'S SENDING THE MESSAGES. MY FUNCTION IS GOING TO WAKE UP AND START TRIGGERING AND HIT EXCEPTION AFTER EXCEPTION AFTER EXCEPTION. WHAT'S POWERFUL HERE IS THAT AFTER I HIT THAT THRESHOLD OF EXCEPTIONS, MY DURABLE ENTITY IS ACTUALLY GOING TO FIRE AND DISABLE MY FUNCTION APP. NOW I'M REFRESHING AND NOW IT DOES AND LOOK LIKE IT'S TRIGGERED — THERE WE GO. MIGHT HAVE BEEN SOME WI-FI HICCUPS THERE. SO I'M ONLINE I SEE SOME FAILURES PROCESSING. RIGHT AWAY, MY EXCEPTION RATE STARTED TO CLIMB. IT'S HITTING A LOT OF EXCEPTIONS HERE. NORMALLY THIS IS WHERE I GET REALLY NERVOUS. IF I HAD A THOUSAND REQUESTS COMING IN EVERY SECOND, THIS EXCEPTION RATE IS GOING TO GROW AND GROW. BUT YOU'LL NOTICE IT DROPPED OFF PRETTY QUICKLY.

AND THE REASON IT DROPPED OFF IS BECAUSE HERE I HIT MY THRESHOLD OF EXCEPTION, IT IS ACTUALLY DISABLED. IT STOPPED MY FUNCTION APP. SO I HAD THE DURABLE ENTITY THAT WAS KEEPING THE STATE OF DYSFUNCTION, IT HIT ENOUGH EXCEPTIONS IN THE WINDOW THAT THAT WAS ABLE TO TURN OFF THE FUNCTION. I'M TRYING TO GIVE YOU THE IDEA ON HOW YOU CAN USE THE STATEFUL FUNCTIONS TO UNLOCK PATTERNS THAT ARE TRADITIONALLY REALLY HARD. MABE YOU WANT AN AGGREGATION, BUT IT'S SUPER SIMPLE.

BEFORE I MOVE TO QUESTIONS THESE ARE RESOURCES TO BE AWARE OF. IF YOU'RE INTERESTED IN DURABLE 2.0, CHECK OUT THE DOCS FOR DURABLE FUNCTIONS 2.0. THAT'S A NUMBER OF SAMPLES LIKE HOW YOU CAN USE DURABLE FUNCTIONS TO CREATE A TWITTER SERVICE OR RIDE SHARE SERVICE. CHECK IT OUT AT THE SECOND LINK. AND THE CIRCUIT BREAKER SAMPLE WHAT I USED TO USE IN DISABLING THE FUNCTION THAT'S HERE AS WELL. IF YOU HAVE ANY QUESTIONS REACH OUT ON TWITTER AS WELL. BUT WITH THAT, I'M GOING TO SEE IF THERE ARE ANY QUESTIONS THAT HAVE COME IN DURING THIS TIME. I'LL TURN IT BACK OVER TO SEE IF THERE'S ANYTHING THAT POPPED UP.

>> THANK YOU SO MUCH, JEFF. WE HAVE SOME QUESTIONS. SO THE FIRST ONE IS WHEN IS ASP.NET, WHEN WILL IT BE AVAILABLE FOR AZURE APP SERVICE? >> SO I BELIEVE IT SHOULD BE THERE, IF NOT NOW, VERY, VERY SOON. I WAS ON AN EMAIL THREAD YESTERDAY WHERE ONCE IT WENT TO — WE HAVE TO GO UPDATE THE ENTIRE FLEET OF MACHINES AND MAKE SURE THEY HAVE 3.0. IT SHOULD BE THERE NOW. THERE'S A FEW WAYS TO RUN APP SERVICES SO YOU CAN RUN IT IN THE CONTAINER WHICH WOULD WORK OUT OF THE BOX.pBUT I BELIEVE N A .NET FUNCTION AND IT SHOULD WORK. IF NOT, IT SHOULD BE IMMINENT. THERE'S BEEN SOME CHATTY THREADS TO MAKE SURE WE'RE READY TO GO. >> WHERE CAN PEOPLE GET YOUR AZURE FUNCTIONS T-SHIRT? >> THIS IS MY FAVORITE SHIRT. I'LL MOVE MY LAPTOP. SO I WILL TELL YOU, WE ARE PRINTING A BUNCH OF THEM RIGHT NOW.

BECAUSE IT'S A HOT COMMODITY. IF YOU CAN MAKE IT TO MICROSOFT IGNITE WE'LL HAVE THOUSANDS OF THEM. COME TO OUR BOOTH THERE. IF YOU CAN'T MAKE IT, TRY TO GRAB US AT ANOTHER CONFERENCE. .NET IS A DIGITAL CONFERENCE SO IT'S HARDER TO DISTRIBUTE THROUGH THE LIVE STREAM BUT THEY'RE COMING. I LOVE THIS SHIRT. >> YEAH. SO YOU HEAR THAT EVERYONE? GO TO IGNITE. THAT'S WHERE YOU'LL GET THE T-SHIRTS. SO WE HAVE ANOTHER QUESTION. WHAT LANGUAGES SUPPORT THE DURABLE FUNCTIONS FRAMEWORK? >> FANTASTIC QUESTION.

SO .NET SUPPORTS IT OBVIOUSLY IS WHAT I SHOWED. JAVASCRIPT IS THE ONE YOU CAN WRITE THE DURABLE OPERATIONS IN. WE'RE GETTING IT TO WORK WITH THE NEW ENTITY FEATURES SO SOME OF THE 2.0 FEATURES ARE ONLY EXPOSED THROUGH THE .NET STK RIGHT NOW. BUT WE'RE WORKING ON PYTHON SUPPORT. I DON'T KNOW IF WE HAVE SAID THAT PUBLICLY BEFORE. BUT WE ARE WORKING ON PYTHON SUPPORT AS WELL. STAY TUNED OVER THE NEXT FEW MONTHS FOR ANY UPDATES AND NEWS AROUND PYTHON FOR THE DURABLE FUNCTIONS.

>> GREAT. WE HAVE ANOTHER QUESTION. DURABLE FUNCTIONS OR LOGICS APPS WHEN SHOULD I USE WHAT? >> IF YOU USE LOGICS APPS YOU CAN CREATE ORCHESTRATIONS. LOGICS APPS IS A DECLARATIVE VISUAL DESIGNER. SO YOU HAVE THE DIFFERENT CONNECTORS AND YOU CAN HAVE, YOU KNOW, STEP ONE, STEP TWO, STEP THREE, DOING SIMILAR THINGS THAT A ORCHESTRATION CAN DO. HONESTLY WHAT IT COMES DOWN TO FOR A LOT OF FOLKS IS PERSONAL PREFERENCE.

SOME PEOPLE WANTED TO DESCRIBE THE ORCHESTRATIONS IN CODE. SOME PEOPLE LIKE THIS DECLARATIVE NATURE OR THE VISUAL DESIGNER OF LOGICS APP. THERE'S OTHERS WHERE IT'S EASIER. IF YOU WANT TO LEVERAGE THE OVER 200 CONNECTORS THAT LOGIC APPS HAS, USE LOGIC TH . >> SOME OF THESE OTHER PATTERNS, THAT'S REALLY GOING TO BE DURABLE ONLY. THERE DEFINITELY IS SOME OVERLAP, PERSONAL PREFERENCE IS BIG THERE. I'M A FAN OF BOTH. I'LL USE LOGIC APPS FOR SOME THINGS, DURABLE FOR OTHERS. IT'S KIND OF LIKE HEY, DO I WANT ONE OF THESE KEBCONNECTORS OR A GOING TO WRITE SIMPLE LOGIC AND CODE DIRECTLY? >> WHEN WILL IT BE POSSIBLE TO CHANGE THE RUN TIME OF AN AZURE APP SERVICE OR FUNCTION SERVICE TO.NET CORE 3.0? >> YOU CAN WRITE LIKE AN ASP .NET AND DEPOLFUNCTIONS WHE SHOWED YOU THE FUNCTION CODE, IT'S ITS OWN SDK. IT'S ITS OWN FLAVOR OF ASP.NET. THAT DOES NOT SUPPORT 3.0 YET. THERE'S AN ANNOUNCEMENT IN OUR GITHUB REPO. CURRENTLY NEXT MONTH, SO OCTOBER IN .NET CORE 3 AVAILABLE TO TRY OUT AND BECOMING GENERALLY AVAILABLE EARLY NEXT YEAR, SO STAY TUNED FOR THAT AS WELL TO BE ABLE TO WRITE THESE FUNCTIONS IN .NET USING .NET CORE 3.

APP SERVICES AS I MENTIONED, IF YOU'RE JUST DEPLOYING A WEB APP USING ASP NET KCORE, THAT'S SOONER. >>> I THINK WE HAVE TIME FOR ONE MORE QUESTION. SO LAST ONE IS HOW MUCH DATA CAN YOU STORE IN A STAPLE PATTERN? IS THERE A LIMIT OF HOW MANY USERS CAN STORE HOW MANY STEPS? FOR HOW LONG DOES THIS DATA GET STORED? AM I PAYING FOR THE DATA? >> IT'S REALLY UP TO THE STORAGE ACCOUNT FOR THE LIMITS. THERE'S NO LIMITS WITH THE FRAMEWORK ITSELF. WE'LL USE YOUR AZURE STORAGE ACCOUNT. YOU WILL BE PAYING FOR THAT STORAGE.

BY DEFAULT WE'LL KEEP IT AROUND INDEFINITELY. IF YOU HAVE A BUNCH OF DATA IN THERE, WE HAVE SDKs TO HELP YOU KIND OF CLEAN UP OLD INSTANCES OR OLD ENTITIES IF YOU WANT TO KEEP IT CLEAN, BUT BY DEFAULT WE'LL STICK THEM IN AN AZURE STORAGE ACCOUNT AS LONG AS YOUR AZURE STORAGE ACCOUNT HAS THE ROOM FOR IT, YOU CAN KEEP YOUR STATE THERE. IF YOU WANT KIND OF MORE STATE OR YOU NEED TO HIRE THROUGHPUT, THEN AZURE STORAGE IS ABLE TO PROVIDE, THAT'S WHERE SOME OF THOSE PLUGABLE PROVIDERS COME IN. MY COUNTER EXAMPLE, IF I OPEN MY STORAGE ACCOUNT RIGHT NOW, THERE'S GOING TO BE A BLOB THAT SAYS LIKE JEFF'S COUNTER, THE VALUE IS 5. I'M GOING TO BE PAYING SOME, WHATEVER, 1/100 OF A CENT FOR THAT STATE. IF I HAD BIGGER STATE, I'D BE PAYING MORE. >> ALL RIGHT, AWESOME. THANK YOU SO MUCH, JEFF. NEXT UP WE HAVE BEYOND COPY AND PASTE, CREATING INTERACTIVE DOCUMENTATION WITH MARINA NICAGA.

>> THANK YOU SO MUCH, THANKS EVERYONE FOR STAYING TUNED WITH .NET COM 2019. I AM A SENIOR PROGRAM MANAGER ON THE VISUAL STUDIOAND .NET TEAM, AND I WANT TO TALK TO YOU TODAY ABOUT INTERACTIVE DOCUMETATION AND HOW WE THINK ABOUT THAT AND HOW IT'S IMPORTANT FOR OUR FIRST TIME DEVELOPERS AS WELL AS DEVELOPERS WHO ARE CONTINUING TO GROW AND BUILD ON OUR PLATFORM, SO LET'S TALK ABOUT DOCUMENTATION. DOCUMENTATION IS HOW WE BUILD TRUST WITH OUR DEVELOPERS. IT'S HOW WE EDUCATE PEOPLE. IT'S HOW WE SELL OUR PRODUCTS. AND GOOD DOCUMENTATION MEANING THAT WE ARE AS INVESTED IN OUR PRODUCT AS MUCH AS YOU ARE. IT'S IMPORTANT AS WE BUILD OUR DOCUMENTATION FROM FIRST TIME DEVELOPERS TO PEOPLE WHO ARE BUILDING CODE EVERY SINGLE DAY, BUT WE MAKE SURE THAT THE ONRAMP IS AS SMOOTH AND AS EFFORTLESS AS POSSIBLE, SO LET'S TALK ABOUT DOCUMENTATION TODAY FOR A FEW MINUTES.

WITH DOCUMENTATION TODAY, IT'S GETTING REALLY GOOD, BUT THERE'S STILL A FEW ASSUMPTIONS THAT WE CONTINUE TO MAKE ABOUT OUR CUSTOMERS. FIRST IS THE ASSUMPTION OF KNOWLEDGE. SOMETIMES WHEN CONTENT CREATORS ARE WRITING DOCUMENTATION, THEY ASSUME THAT THE PEOPLE COMING TO OUR DOCUMENTATION HAVE PRIOR KNOWLEDGE OF THE FRAMEWORK AND THE LANGUAGES BEING TAUGHT. THE ASSUMPTION OF TECH, AS A CONTENT AUTHOR MYSELF I SOMETIMES CONTINUALLY FIND MYSELF THINKING OF MY EXPERIENCE I SOMETIMES REFERENCE THE OPERATING SYSTEM I'M USING.

I SOMETIMES REFERENCE A VERSION OF WINDOWS. I ALWAYS ASSUME THAT SOMEONE HAS AS GOOD INTERNET BANDWIDTH AS I DO. A GOOD EXAMPLE OF THIS IS PROVIDING LINKS TO CERTAIN SPECIFIC DOWNLOADS AS WELL AS SCREEN SHOTS THAT ONLY REFLECT A PARTICULAR OPERATING SYSTEM. AND THE LAST ONE IS THE ASSUMPTION OF TIME. WE ARE ALL REALLY GUILTY OF DOING THAT. WE ASSUME THAT THE PEOPLE COMING TO READ OUR CONTENT OR USE OUR VIDEOS OR OUR DOCUMENTATION HAVE MORE TIME THAN THEY DO. USUALLY WHEN PEOPLE ARE LEARNING THINGS, TRYING NEW THINGS OR TESTING SOMETHING OUT, THEY HAVE A LIMITED AMOUNT OF TIME, WHETHER YOU'RE AN EDUCATOR, A HOB HOBBYIST OR A SEASONED DEVELOPER, YOU'RE PROBABLY DOING THIS OVER YOUR LUNCHTIME OR JUST BEFORE YOU GO TO BED OR BEFORE WORK. WHEN WE LOOK AT DOCUMENTATION TODAY, A MAJORITY OF THE DOCUMENTATION LOOKS LIKE THIS. IT'S STATIC CODE. IF WE THINK ABOUT THIS FROM THE PERSPECTIVE OF A NET DEVELOPER, A BRAND NEW FIRST TIMER THEY'RE OFTEN LEFT WONDERING WHAT DOES THIS DO? SO WE THEN GO TO STACK OVERFLOW. WE COPY AND PASTE A BUNCH OF CODE FROM HERE AND THERE, BUT WE STILL HAVE THE CHALLENGE, WHAT TEMPLATE DO I USE IN VISUAL STUDIO.

WHAT LIBRARIES DO I NEED? WHAT DO THESE ERROR MESSAGES MEAN? WE'RE TELLING PEOPLE FOR THE FIRST FEW LINES OF CODE THERE'S A HUGE ONRAMP. FOR SEASONED DEVELOPERS YOU'RE PROBABLY WORKING REALLY FAST AND YOU DON'T WANT TO COPY AND PASTE CODE IN AND OUT OF YOUR CODE BASE. YOU JUST WANT TO SEE IF THIS IS THE BEST THING FOR YOU. WE'VE NOTICED ONE THING AS WE BEGIN TO IMPROVE OUR DOCUMENTATION, OUR EXPECTATIONS HAVE CHANGED, AND WE EXPECT MORE FROM THE PEOPLE BUILDING OUR CONTENT TO DO MORE. VIDEO HAS DONE GREAT WORK IN THIS SPACE, AND WE JUST LAUNCHED RIGHT NOW WITH .NET VIDEOS ON HOW WE ARE INVESTING IN VIDEOS AND HOW WE ARE MAKING SURE THAT OUR DEVELOPERS HAVE AN INTERACTIVE EXPERIENCE WHERE THEY'RE ABLE TO LISTEN, PAUSE, AND REWIND, BUT STILL, WE'RE ASSUMING A BIT OF TIME ON YOUR SIDE, BUT IT'S REALLY GOOD CONTENT, SO PLEASE GO AND LOOK IT UP.

ANOTHER THING IS INTERACTIVE SNIPPETS ONLINE. THIS HAS ACTUALLY BECOME A REQUIREMENT FOR LANGUAGES AND FRAMEWORKS, WHEN YOU CAN SEE POPULAR LANGUAGES LIKE JAVA SCRIPT AND PYTHON ARE ALLOWING PEOPLE TO TEST ATX AND SYNTAX IN THE BROWSER. WE'RE SEEING IT IN EMERGING LANGUAGES AS WELL SUCH AS SKOM L SCHOLAR AND GO, WHERE PEOPLE ARE ABLE TO INTERACT RIGHT WITHIN THE BROWSER. THIS IS JUST A FEW PIECES OF THE PUZZLE. WE HAVE VIDEO ON THE ONE SIDE. WE HAVE SYNTAX ITERATION ONLINE. HOWEVER, PEOPLE WANT TO HAVE EXPERIENCES THAT FEEL AS MNATIV TO THE EXPERIENCE THEY WOULD HAVE IN THE BROWSER.

WE'RE SEEING THIS IN PLACES LIKE MICROSOFT LEARN WHERE PEOPLE ARE ABLE TO T AND TEST THINGS OUT. SO WHEN THEY DO TRANSITION INTO AN OFFLINE EXPERIENCE, IT FEELS VAGUELY FAMILIAR. BUT THEN WE ALSO HAVE THE CONCEPT OF TRYING. NOW, THIS IS SOMETHING I CONSTANTLY DO. IF I WANT TO TRY OUT A NEW NUGGET PACKAGE, I WILL CREATE A THROW AWAY PACK AAGE, SEE IF IT WORKING. I WILL DELETE IT, DO IT AGAIN. YOU'RE SEEING PLACES LIKE MPM CREATING THESE EXPERIENCES ONLINE. WE SHOULD BE ABLE TO TRY OUT OUR NEW GIT PACKAGES AND SEE WHAT THEY'RE LIKE RIGHT WITHIN THE COMFORT OF OUR BROWSER. AND WHAT WE'RE CONTINUING TO SEE HERE IS A NARROWING OF THE DIVIDE BETWEEN DOCUMENTATION AND CODE, AND THE REASON WHY WE'RE SEEING THIS IS THE LANDSCAPE IS CONTINUOUSLY GROWING. WE HAVE DEVELOPERS SUCH AS PEOPLE WHO ARE WATCHING THIS SHOW WRITING BLOG POSTS EVERY SINGLE DAY, WE HAVE HOBBYISTS, AND THE HOBBYIST FIELD JUST KEEPS ON GROWING FROM MAKERS TO WEB DEVELOPERS, MOBILE DEVELOPERS, IoT FROM SOCIAL MEDIA INFLUENCERS WHERE THEY'RE JUST CONSTANTLY LEARNING HOW TO OWN THEIR OWN ONLINE EXPERIENCE.

WE HAVE DATA RESEARCHERS WHO ARE USING AND MINING DATA AND MAKING THESE ANALYTICAL CHOICES TO MAKE MORE INFORMED DECISIONS. WE HAVE EDUCATORS, BOTH CS EDUCATORS AS WELL AS NON-TECHNICAL EDUCATORS WHERE WE'RE SEEING IN PRIMARY AND SECONDARY SCHOOLS ALL AROUND THE WORLD, WHERE NON-TECHNICAL TEACHERS ARE GIVEN THE TASK TO ONRAMP THE NEXT GENERATION TO BE COMFORTABLE IN THIS NEW WORLD OF CODING. AND FINALLY, WE HAVE OUR STUDENTS WHO WANT TO EXPLORE AND LEARN AS MUCH AS POSSIBLE, AND WE NEED TO PROVIDE THOSE OPPORTUNITIES FOR THEM. SO WHEN WE'RE CREATING THESE NEW EXPERIENCES AROUND DOCUMENTATION, ESPECIALLY AT MICROSOFT, THEY'RE THINGS THAT WE WANTED TO MAKE SURE WE LANDED VERY COMFORTABLY WITH THE CUSTOMERS. WE WANTED TO MAKE SURE THEY HAVE UP TO DATE DOCUMENTATION, NICE AND FRESH.

REFERENCING ARTICLES THAT WERE FROM 2019 VERSUS 2003. WE WANTED TO MAKE IT ENGAGING AND ENGAGING IS NOT JUST ABOUT MAKING IT FLASHY AND COOL. YOU WANT TO MAKE THE NAVIGATION REALLY EASY. YOU WANT SOMEONE TO LAND ON A WHERE THEY NEED TO GO. KNOW – YOU ALSO WANT THE STEPS TO BE CLEAR AND QUICK AND EASY, SO IF YOU GO TO .NET RIGHT NOW AND YOU GO TO GETTING STARTED YOU CAN SEE HOW TO GET UP AND RUNNING IN TEN MINUTES. GIVING PEOPLE THE MOMENT TO FEEL EMPOWERED IN TEN MINUTES OR LESS. AND FINALLY WE WANTED TO CREATE A FRICTION FREE LEARNING EXPERIENCE. WE WANTED SOMEONE TO BE ABLE TO GO ONTO A WEB PAGE AND LEARN ABOUT THE LANGUAGE WITHOUT HAVING TO INSTALL ALL THE TOOLS OR KNOW EVERYTHING, AND IN 2017, WE LAUNCHED AN INTERACTIVE ONLINE EXPERIENCE WITH A PRODUCT THT I BUILT CALLED TRY.NET, WHICH ALLOWS PEOPLE TO EXPERIENCE AND TRY.NET THE LANGUAGE WITHIN THE BROWSER.

SO LET'S TALK AOUT MORE ABOUT THE TRY.NET INTERACTIVE EXPERIENCE AND WHAT WE OFFER THEM. WE HAVE OUR INITIAL GOALS WERE IN 2017 WAS TO HAVE AN INTERACTIVE DOCUMENTATION ONLINE. BRINGS US UP TO SPEED WITH THE OTHER LANGUAGES THAT HAVE BEEN PROVIDING THIS FOR THEIR CUSTOMERS. MOST IMPORTANTLY, WE WANTED IT TO BE LOG-IN FREE. WE WANTED TO MAKE SURE SOMEONE DIDN'T HAVE TO INSTALL EVERYTHING ON THEIR MACHINE IN ORDER TO JUST WRITE CONSUL.RIGHT LINE, WE WANTED TO GIVE THAT QUICK WIN. FINALLY WE WANTED A FAST ONRAMP. WEP WE WANTED YOU TO FEEL THAT MOMENT OF SUCCESS. WE NOTICED THAT TRY.NET IS GROWING. THOSE ARE SOME OF THE WONDERFUL THINGS I WANTED TO SHOW YOU TODAY.

WHEN WE FIRST BEGAN IN 2017, WE WANTED A FRICTION FREE ONLINE EXPERIENCE, AND WE DID THAT. WITH TRY.NET AND GO TO D DOCS.MICROSOFT.COM YOU'RE ABLE TO RUN C SHARP CODE IN THE BROWSER. THERE WERE CERTAIN DIFFICULTIES. FIRST OF ALL, WHAT HAPPENED IF SOMEONE DIDN'T HAVE GOOD INTERNET ACCESS. WHAT IF SOMEBODY WANTED TO DO THIS LOCALLY ON THEIR MACHINE. HOW WERE WE CREATING THAT EXPERIENCE FOR YOU.

ALSO, WE WANTED TO MAKE A CHEAPER ALTERNATIVE THAT ALLOWED PEOPLE TO RUN THINGS EASILY WITHIN THEIR WEBSITE, AND LUCKILY IN 2018 WE ALSO GOT BLAZOR, AND IT ALLOWED US TO PIVOT FROM RUNNING THINGS IN CONTAINERS ON AZURE CONTAINER INSTANCES TO RUNNING THINGS ON THE CLIENT SIDE WITH BLAZOR, AND NOT ONLY THAT, BECAUSE WE CREATED THESE EXPERIENCES IT ALSO ALLOWED US TO CREATE A LOCAL EXPERIENCE WITH THE .NET TRI FWLGLOBAL TOOL. WE HAVE A STUDENT IN SOUTH AFRICA WHO CALLS THIS ONE OF THE MOST INFLUENTIAL THINGS HE'S USED THAT ALLOWS HIM TO GO AND SHARE C SHARP EXPERIENCES WITH HIS FELLOW EXPERIENCES. WE THANK YOU AND HOPE YOU CONTINUE TO USE US. AND THEN WE HAVE A SPECIAL SURPRISE NSURF THAT I THINK A LOT OF YOU DIDN'T EXPECT. WE HAVE DOT.NET RUNNING IN NOTEBOOKS. I'LL BE SHARING THAT WITH YOU LATER. LET'S GO AND SEE SOME DEMOS NOW. >> OKAY. SO AS I SAID, TRY.NET STARTED IN THE BROWSER. SO IF YOU GO TO ANY SINGLE SAMPLES, YOU NOTICE THAT WE HAVE AN EDITOR RIGHT NOW.

YOU CAN COPY THE CODE OVER, RUN IT, AND YOU HAVE THE DIRECT RESULTS. YOU CAN ALSO EDIT IT EASILY RIGHT WITHIN THE BROWSER, SO YOU'RE NOT RESTRICTED BY WHAT IS IN THE CODE, AND YOU RUN IT AGAIN. THIS IS ALL RUNNING ON BLAZOR. IT'S ALL RUNNING ON THE CLIENT SIDE. IT ALLOWS US TO CREATE OPPORTUNITY WHERE IS PEOPLE COULD POSSIBLY ADD THIS TO THEIR WEBSITES AS WELL, WHICH WE'RE HOPING TO ENABLE IN THE FUTURE. BUT I ALSO TALKED ABOUT THE OFFLINE EXPERIENCE. IF ANY OF YOU HAVE EVER DONE A WORKSHOP OR DONE A TUTORIAL OUT THERE, YOU'VE PROBABLY HAD TO GET PEOPLE TO DOWNLOAD THE T TOOLS, CLONE THE REPO, MAKE SURE THEY'RE IN THE RIGHT OPERATING SYSTEM, AND BEFOE YOU KNOW IT, IT'S TWO, THREE HOURS INTO THE WORKSHOP AND NOBODY HAS DONE ANYTHING. WE WANTED TO MAKE SURE THAT PEOPLE COULD BE JUST SUCCESSFUL WITH A .NET SDK AND THE .NET GLOBAL TOOL AND GET THINGS UP AND RUNNING. I'M GOING TO GIVE YOU A QUICK DEMO OF THAT. WE HAVE THIS REPO. IT'S OUR SAMPLES REPO, YOU'LL CLONE THIS REPO.NSTRUCTIONS.- ONCE YOU HAVE THIS REPO CLONED GO INTO THE DIRECTORY AND TYPE .NET TRY.

SO AS SOMEONE WHO PREPARES FOR DEMOS AHEAD OF TIME, I DID THE FIRST THREE STEPS AHEAD OF TIME. I'M GOING TO GO RIGHT INTO HERE, TYPE .NET TRY, HIT RUN, AND WHAT THIS IS GOING TO DO, IT'S GOING TO START UP MY BROWSER, AND IT'S GOING TO GIFLD ME AN INTERACTIVE MARKDOWN EXPERIENCE. IF YOU LOOK AT THE TOP, THIS IS AN MD FILE. I'M GOING TO CONTINUE INTO INTRODUCTION TO PROGRAMMING WITH C SHARP AND YOU'LL NOETSTICE TH YOU HAVE A LIST OF INSTRUCTIONS, LOOKS LIKE AN INTERACTIVE BOOK. LET'S GO AHEAD AND RUN THIS CODE. YOU HAVE HALLOW WORLD, I CAN GO IN, CHANGE IT AGAIN AND I WILL PUT IN MY NAME, RUN IT AGAIN, AND I SEE THE RESULTS. THIS GIVES PEOPLE THE FLEXIBILITY TO LEARN AN EXPERIMENT WITHIN THE BROWSER, GIVING YOU THAT NICE INTERACTIVE EXPERIENCE. I HOPE YOU'LL GIVE IT A TRY FOR THE NEXT WORKSHOP YOU'RE TENDING. THE BIG QUESTION HERE IS HOW ARE WE DOING THIS? HOW ARE WE ABLE TO HAVE THIS MIX OF INTERACTIVE CODE, C SHARP CODE WITH A MARKDOWN FILE? SO I'M JUST GOING TO GO OVER TO VISUAL STUDIO CODE AND SHOW YOU SOME OF THE MAGIC THAT WE'RE RUNNING.

SO I'M JUST GOING TO CLOSE UP THE SERVER HERE. SO THIS LOOKS LIKE MARKDOWN THAT YOU'VE PROBABLY WRITTEN IN THE PAST IF YOU'VE DONE ANYTHING WITH A READ ME FILE, AND IF YOU ADD ANY SORT OF LANGUAGE FEATURES WITHIN YOUR MARKTDOWN. YOU USUALLY HAVE TO USE A FLAG. WHICH IS THE C SHARP. WE'RE POINTING TO A SPECIFIC REGION. THIS IS GENERAL C SHARP REGIONS CALLED INTRO. WE'RE POINTING TO A SOURCE FILE, AND WE'RE POINTING TO A PROGRAM IN MY APP. SO LET'S SEE WHAT THIS IS. IF I GO OVER TO MY PROGRAM.CS, YOU WILL NOTICE THAT I HAVE A COUPLE OF REGIONS THAT HAVE A BUNCH OF SWITCH CASE STATEMENTS AND I HAVE A REGION CALLED INTRO. SO IF I EDITED THIS, AND I SAID HELLO.NET.COM AND I SAVED THIS FILE AND LET'S JUST GO AHEAD AND RUN THIS AGAIN, .NET TRY.

I GO BACK INTO MY INTRODUCTION TO C SHARP, AND I'VE EDITED IT, RIGHT? THERE'S A SEAMLESS DIFFERENCE, BUT ANOTHER THING THAT WE HAVE TO BE CAREFUL WITH, SOMETIMES IT GETS OUT OF SYNC. HOW DO WE SUPPORT OUR BACKING PROJECT AS WELL AS WHAT WE'RE PUTTING IN THE DOCUMENT TAKES. WE WANTED TO MAKE SURE WE SUPPORTED THAT.

LET'S MAKE SOME QUICK EDITS. HOW DO WE VERIFY CODE? I'M GOING TO GO OVER TO VS CODE AGAIN, AND I'M JUST GOING TO MAKE SOME CLUMSY MISTAKES OVER HERE. I AM GOING TO REMOVE THE SEMICOLON, SAVE THAT. I AM GOING TO CHANGE THIS FROM INTROS — FROM INTROTO INTROS. I'M GOING TO SAVE THAT AGAIN, AND I WANT TO SHOW YOU A NEW ADDITION CALLED .NET VERIFYING. RIGHT? SO WHAT IT'S SAYING, IT'S .NET TRY VERIFY. SO THIS IS GOING THROUGH, AND IT'S ACTUALLY CHECKING YOUR MARKDOWN AND CHECKING YOUR BACKING PROJECT TO MAKE SURE THAT EVERYTHING'S GOING OKAY, AND YOU'LL NOTICE THAT IT SAYS, HEY, YOU'RE MISSING SOME THINGS HERE. YOU'RE MISSING A SEMICOLON, AND WE ALSO HAVEN'T FOUND THE INTROS REGION. WE WANTED TO MAKE SURE THAT BEFORE YOU HIT PUSH INTO GITHUB, YOU'RE ABLE TO ACTUALLY SEE ANY ISSUES THAT MIGHT POP UP. AND WE ENABLE YOU TO DO THAT. IF YOU'RE SOMEONE WHO WOULD PREFER TO SEE THIS IN A UI FORMAT, IT'S ALSO SUPPORTED ON THE SERVE — ON THE UI SIDE AS WELL, SO I'M JUST GOING TO CLICK, DO THIS, DO .NET TRY.

IT'S GOING TO LAUNCH THE LOCAL HOST AGAIN, AND IF I GO OVER TO THE INTRODUCTIONS, IT WILL TELL ME THAT THE REGION HASN'T BEEN FOUND. SO ON BOTH SIDES YOU HAVE THIS EXPERIENCE WHERE USERS ARE EASILY ABLE TO CATCH WHAT THEIR MISTAKES ARE. SO LET'S GO ON SINCE WE'VE SEEN THAT, IF YOU WANT TO LOOK AT THIS MORE, YOU CAN GO AHEAD TO OUR GITHUB REPO AND PLEASE GIVE IT A TRY.

SO I WANT TO SHOW YOU A LITTLE BIT MORE IN OTHER EXPERIENCES THAT WE'VE CREATED. SO I SHOWED YOU THE .NET TRY GR GLOBAL TOOL. BUT I ALSO WANTED TO SHOW YOU SOMETHING THAT WE JUST DID THIS WEEK, AND I'M REALLY LOOKING FORWARD TO HEARING YOUR FEEDBACK. IF YOU GO TO OUR GITHUB REPO AND SCROLL TO THE BOTTOM, WHICH IS PRETTY LONG, YOU'LL NOTICE THAT WE HAVE A .NET TRY ENABLE, BUT WE ALSO HAVE LAUNCH TO BINDER.

NOW BINDER IS A PROJECT, AN OPEN SOURCE PROJECT WHERE IT'S ABLE TO POINT TO A GITHUB REPO AND TAKE OUT ALL THE NOTEBOOK FILES AND RUN THEM IN THE BROWSER SO THEY SPIN UP A NICE CONTAINER AND YOU'RE ABLE TO LOOK AT IT RIGHT WITHIN THE BROWSER. OVER HERE I ALREADY GOT THIS STARTED. THIS IS C SHARP NOTEBOOKS. OH, SORRY, LET ME START THAT AGAIN. LET'S LAUNCH BINDER. THIS IS GOING TO TAKE A FEW MINUTES BECAUSE IT'S CONFIGURING A CONTAINER FOR US, AND THE BEAUTY OF LIKE LIVE DEMOS IS THAT THIS WILL HAPPEN AS THE CIRCLE SPINS AROUND, BUT WHAT WE WANTED TO SHOW YOU HERE IS WE WANTED TO BE ABLE TO TRY THE .NET NOTEBOOK RIGHT WITHIN THE BROWSER. WE WANTED YOU TO PLAY AROUND WITH IT. MAKE THIS INTO C SHARP, GOING TO GO INTO SAMPLES, AND I HAVE A HOUSING ML SAMPLE RIGHT HERE, SO LET'S WALK THROUGH THIS EXPERIENCE. YOU CAN INSTALL NEW GIT PACKAGES, RIGHT? SO THIS ALLOWS YOU TO CUSTOMIZE IT AT ANY NEW GIT PACK ANAGES Y LIKE.

IT'S INSTALLING THOSE PACKAGES FOR ME. THIS WILL TAKE A FEW MINUTES. AS WE WANT YOU TO KNOW, IF YOU ARE USING THIS ON YOUR SIDE, YOU CAN INSTALL AS MANY PACKAGES AS YOU WOULD LIKE. YOU CAN NOTICE THAT WE'RE USING THE ML PACK AMG, WE'RE USING AUTO ML AND ALSO PULLING THE DATA FRAMES PACKAGE AS WELL. AS THAT'S INSTALLING, LET'S LOOK THROUGH THE REST OF THE CODE SO I CAN RUN THROUGH IT.

WE'RE ABLE TO USE OUR PACKAGES AS SOME OF YOU MAY KNOW, NOTEBOOKS HAD CELL BY CELL EXEC EXECUTION. WE ALSO WANTED TO MAKE SURE THAT PEOPLE HAD GRAPHS BEING ABLE TO PLOT. WE WANTED TO MAKE SURE PEOPLE WERE ABLE TO DISPLAY GRAPHS RIGHT WITHIN THE NOTEBOOK. WE WANTED TO MAKE SURE WE MADE THIS FEEL AUTHENTIC TO PEOPLE WHO R COMING FROM THE PYTHON NOTEBOOK SPACE, BUT WE ALSO WANTED TO MAKE SURE THAT OUR CUSTOMERS WHO ARE REGULAR .NET DEVELOPERS, THIS ALSO FELT AUTHENTIC AND NATURAL TO THEM. I'M GOING TO HIT RUN THE NEXT BROWSER, SORRY NEXT CELL. SHIFT ENTER, ALL RIGHT. AND AS YOU CAN SEE, WE HAVE A NICE TABLE THAT HAS BEEN DELAYED. WE'VE ACTUALL BEEN ABLE TO DAYS PLAY TABLE OF THE HOUSING DATA. WE CAN ALSO PLOT SOME GRASS, WHICH I THINK WILL BE THE COOL THING.

LET'S START LOOKING AT SOME COOL STUFF. ALL RIGHT, LET'S RUN THAT AGAIN. ALL RIGHT. SO I'M GOING TO GO OVER TO DOCS, SAMPLES, AND HOUSING. LET'S PULL IN SOME PACKAGES. BEAR WITH ME. I AM SO SORRY. BUT THIS SHOULD TAKE A FASTER TIME THE NEXT TIME AROUND. WE'VE INSTALLED OUR PACKAGES. WE'RE WAITIN FOR JUST ONE MORE, WHICH HAS BEEN SUCCESSFULLY INSTALLED. LET'S RUN THIS.

WHAT WE WANTED PEOPLE TO DO WAS BE ABLE TO SEE THE GRAPHS AND CUSTOMIZE THESE GRAPHS AUTHENTICALLY. OKAY. LET'S GIVE IT A MOMENT. WHAT WE SHOULD SEE IN A BIMINUT IS A HISTOGRAPH, WHICH SHOWS US THE DATA. WHILE WE'RE DOING THAT, OKAY. LET'S DO IT ONE MORE TIME. I THINK THE THIRD — YES, THERE WE GO. IT JUST NEEDED ONE MORE TIME. IF YOU HIT IT HARD ENOUGH, IT WILL HAPPEN.

SO WHAT WE CAN SEE IS THAT WE HAVE A HISTOGRAM THAT SHOWS THE DATA. IF YOU'RE SOMEONE COMING FROM THE NOTEBOOK SPACE YOU HAVE SUPPORT, SO YOU CAN SEE THESE THINGS IN MORE DETAIL. WE ALSO WANTED TO MAKE SURE YOU'RE ABLE TO DO MORE INTERESTING GRAPHS LIKE SCATTER PLOTS SO LET'S RUN THIS. GIVE IT A MOMENT. ALL RIGHT. AND AS YOU CAN SEE WE HAVE A SCATTER PLOT, AND GUESS WHICH STATE THIS IS. CALIFORNIA. SORRY, I DON'T HAVE A LIVE AUDIENCE. IT'S CALIFORNIA. AS WE CAN SEE THE PRICING IS A LITTLE HIGH.

I CAN DO THIS. KY I CAN ZOOM IN ON THE HOT SPOTS. OUT EVERYTHING ELSE. WILL CANCE- WE WANT THAT RICH INTERACTIVE EXPERIENCE PEOPLE EXPECT. IF YOU HAVE ANY QUESTIONS ON HOW TO GET STARTED WITH THE .NET KERNEL, THAT WILL COME AROUND IGNITE TIME. WE WON'T HAVE ANYTHING O'FOR PEOPLE TO TRY AT THE MOMENT. HOWEVER, WE DO HAVE THE MIND BINDER EXPERIENCES AVAILABLE RIGHT NOW.

IF YOU GO OVER TO OUR GITHUB PAGE YOU'LL BE ABLE TO LAUNCH IT RIGHT THERE. SO WE HAVE A COUPLE OF MINUTES FOR QUESTIONS, I BELIEVE, WHEN WE HAVE A CHANCE, AND WE CAN GIVE IT A GO. >> ARE WE READY FOR QUESTIONS? >> WE'RE READY FOR QUESTIONS. >> FANTASTIC. HOPEFULLY YOU CAN SEE US HERE. I'VE BROUGHT MY BRAND NEW PHONE. >> HELLO. >> THAT WAS REALLY AWKWARD. WELL, YOU KNOW, THE FIRST THING THAT'S KIND OF COOL IS THIS ONE RIGHT HERE. MIKA, HOW DID YOU FEEL ABOUT WHAT SHE JUST SHOWED US? I THINK IT'S AWESOME. >> HAVE YOU EVER TRIED — HAVE YOU EVER TRIED TRY.NET? YOU'RE GOING TO LOVE THIS.

I'M READING UPSIDE DOWN LIVE. >> IT'S A FAIRLY SIMPLE WAY TO LEARN OR WRITE C SHARP CODE INSIDE YOUR BROWSER WITHOUT HAVING TO FIRST CREATE A VISUAL SOLUTION. PLUS LOTS OF SAMPLE CODE AIMED AT NEW LEARNERS. >> YOU HAVE A FAN. >> AND THERE'S A GIF, I'M GOING TO SAY GIF FOR ALL OF YOU OUT THERE LISTENING. I WILL NOT SAY JIF. IT'S NOT PEANUT BUTTER. THE GUY IN AUSTRALIA GOING LIKE THIS, TWO THUMBS UP. WHAT ELSE DO WE HAVE HERE? >> WISH THIS HAD BEEN AROUND WHEN I WAS WORKING ON BIFROST A FEW YEARS BACK. IT LOOKS REALLY IMPRESSIVE F FOR .NET OPEN PROJECTS. >> I WONDER IF THIS GUY IS THOR. >> I THINK HE MIGHT BE. CHRIS HEMSWORTH, HI. >> OF COURSE. >> HI FOR ME TOO. >> WE BOTH SAY HI. >> HERE'S ANOTHER ONE FROM JOHN, GREAT TO SEE THE IMPROVEMENTS MICROSOFT HAS MADE IN LANGUAGE PLATFORM DOCUMENT TAATION. I STILL REMEMBER THE HUGE STACK OF BOOKS FROM C 6.0. THAT'S A LONG TAIME AGO.

SHOULD HAVE INCLUDED A BACK BRACE WITH THE PRODUCT. >> THIS IS PRETTY COOL. I LOVE THE IDEA OF BEING ABLE TO LEARN AND READ AS YOU GO. I AM PERSONALLY A FAN OF NOTEBOOKS. I'M SO GLAD C SHARP IS COMING TO, AND THE TRY.NET STUFF IS COOL. >> NUMBER ONE — CAN IT ONLY BE ONE OR CAN I GIVE TWO? >> YOU CAN GIVE AS MANY AS YOU WANT. THIS IS YOUR SESSION. >> NUMBER ONE, PLEASE GO AND TRY THE .NET TRY GLOBAL TOOL. WE ARE LOOKING FORWARD TO HEARING HOW YOU'RE DOING WITH IT. WE'VE HAD PEOPLE TRY IT WITH WORKSHOPS THAT ARE PULLING FROM AZURE FUNCTIONS. SO I WOULD LOVE TO SEE MORE WORKSHOPS WITH THAT. ALZHEI ALSO, IF YOU WANT TO GIVE THE BINDER EXPERIENCE A TRY, LET ME WORK THROUGH THAT EXPERIENCE ONE MORE TIME SO PEOPLE CAN LOOK AT IT.

I HAD SOME TECHNICAL ISSUES BECAUSE, YOU KNOW, THAT'S THE WORLD. SO LET'S DO THAT. IF YOU GO TO OUR GITHUB REPO, WHICH IS .NET/TRY. YOU SCROLL DOWN ALL THE PAGES AND NOTICE LAUNCH MY BINDER. WHEN YOU LAUNCH MY BINDER, WHAT THIS IS DOING, IS THAT IT IS SPINNING UP A CONTAINER FOR YOU, AND YOU'RE ABLE TO START RUNNING THAT CODE. IT'S PULLING IN THE .NET SDK AND ALL THAT STUFF. FOR IT TO EVEN LOOK NICER, LOOK AT IT IN THE LAB FORMAT, WHICH I JUST THINK IS ALWAYS LIKE A NICER WAY TO LOOK AT THIS EXPERIENCE. >> I'M A FAN. >> IT'S REALLY COOL. I ALSO WANT TO POINT OUT WE DO HAVE F SHARP SUPPORT. >> IS THAT BECAUSE PHILLIP'S NEXT? >> I DIDN'T SAY IT. >> THAT'S RIGHT. >> WE DO HAVE F SHARP SUPPORT. IF YOU GO TO DOCS, THERE'S AN OUTPUT.

THERE IS A BUG, WHICH I CAN FIX RIGHT NOW. HIT RUN, BUT THIS HAS ALL THE NICE F SHARP EXPECTATIONS THAT PEOPLE WILL HAVE, AND MY TEAM WILL CONTINUE TO WORK ON THAT. >>EN FANTASTIC. >> IF YOU LOOK AT C SHARP AS WELL. LET'S GO UP ONE, LOOK AT C SHARP. YOU WILL FIND TWO DIFFERENT SAMPLES. YOU'LL HAVE ONE WHICH IS THE HOUSING SAMPLE. AND JUST TO GIVE REFERENCE OF THIS HOUSING SAMPLE, IT'S LITERALLY PULLED OUT OF A DATA SCIENCE BOOK, AND DERRICK DID A SIDE BY SIDE AND WAS ABLE TO REPLICATE THIS ENTIRE EXPERIENCE.

AND WE ALSO HAVE A REPO ONE THAT I SHOULD HAVE RUN TO SHOW YOU HOW WE ARE ACTIVELY KEEPING TRACK OF THE ISSUES YOU ARE DOING AND TRYING TO CLOSE THEM. YOU CAN START INSTALLING THE BITS ON YOUR MACHINE. >> NICE. WE HAVE ANOTHER QUESTION. IS IT POSSIBLE TO INTEGRATE TRY.NET WITH DOC FX IMPLEM IMPLEMENTATION? >> NOT AT THE MOMENT, NO. >> OKAY. AND I THINK THERE'S ONE MORE. >> CAN I TAKE A SUBSET OF THE TRY.NET CODE AND USE IT TO INK INCORPORATE C SHARP SCRIPTS WITHIN EXISTING APPLICATIONS. JEREMY, GOOD QUESTION. YES, YOU CAN. JUST LOOK AT OUR REPO AND ASK US QUESTIONS. >> HERE'S ANOTHER ONE WITH ANOTHER GIF. >> GIF. >> YODA. >> IT SAYS SO DO WHAT YOU CAN AS THERE IS NO TRY, TRY.NET.NET. LIKE I LOVE THE .NET.NET. THE COOL WITH JUPITER NOTEBOOKS. I'M TRYING TO LIKE PARSE IT. THIS IS REALLY GOOD STUFF.

IT SAYS SO DO WHAT YOU CAN AS THERE IS NO TRY, TRY.NET.NET. >> TRY.NET IS COOL AND WE'RE ALSO EXCITED ABOUT THE NOTEBOOKS EXPERIENCE. >> ARE WE READY TO GO TO THE NEXT SESSION? >> WE HAVE WHAT'S NEW IN X SHARP WITH PHILLIP. SO PHILLIP. >> IS IT PHILLIP OR PHIL OR DO I HAVE TO SAY IT WITH A BRITISH ACCENT? >> YOU CAN SAY HIS IMAMAJESTY PHILLIP. >> KING SETH, THANK YOU. MY NAME IS PHILLIP CARTER. I'LL LOOK IN DIFFERENT CAMERAS. I'M HERE TO TALK TODAY ABOUT WHAT'S NEW WITH F SHARP BECAUSE I WORK ON F SHARP AND OTHER .NET STUFF IN THE F SHARP AND .NET TEAM. SO YEAH, I WANT TO GIVE A LITTLE BIT OF AN OVERVIEW FIRST.

THE FIRST IS I WANT TO GIVE A SLIGHT RECAP OF F SHARP 4.6, WHICH WE RELEASED EARLIER THIS YEAR, AND WE'VE BEEN MAKING IMPROVEMENTS SORT OF LEADING UP TO THE 4.6 RELEASE. I THINK IT'S GOOD TO TALK ABOUT THAT SORT OF STUFF. I THEN WANT TO TALK ABOUT BRAND NEW STUFF WITH F SHARP 4.7, AND THEN I WANT TO TALK ABOUT BRAND NEW NEW STUFF, EVEN NEWER THAN THE BRAND NEW STUFF, WHICH WE'RE ACTUALLY SHIPPING ALONGSIDE F SHARP 4.7. THIS IS THE FIRST TIME WE'RE DOING THIS, IT'S PRETTY RADICAL. F SHARP 4.6, THIS WAS RELEASED EARLIER THIS YEAR WITH VISUAL STUDIO 2019. WE'VE BEEN MAKING INCREMENTAL IMPROVEMENTS, ESPECIALLY TO THE TOOLS SINCE THAT RELEASE, SO F SHARP 4.6 WASN'T REALLY THIS IND OF THING THAT CAME OUT AND NOW IT'S DONE, IT'S SOMETHING THAT'S BEEN CONTINUALLY IMPROVD UPON, AND REALLY THE BIG PIECES THERE WERE JUST PERFORMANCE, SO WHA YOU'LL SEE HERE ARE TWO ISSUES ON OUR GITHUB REPOSITORY THAT ARE RELATED TO TOOLING PERFORMANCE, AND INTERESTINGLY ENOUGH, THIS TOOLING WORK IS NOT NECESSARILY IN THE TOOLS SO MUCH AS IT IS IN THE COMPILER, AND SO WHAT I MEAN BY THAT IS THE F SHARP COMPILER HAS BEEN AROUND FOR A WHILE, AND IT'S VERY WELL OPTIMIZED FOR COMPILING CODE, RIGHT? YOU TAKE SOME CODE.

YOU RUN THE COMPILER AGAINST IT. IT'S VERY GOOD AT DOING THAT SORT OF STUFF. HOWEVER, WHAT SOME PEOPLE MAY NOT NECESSARILY KNOW IS THAT THE F SHARP COMPILER THAT WE USED TO ACTUALLY COMPILE YOUR CODE IS ALSO THE SAME COMPILER THAT'S HOSTED INSIDE OF VISUAL STUDIO, INSIDE OF VISUAL STUDIO CODE, THAT SORT OF STUFF. SO YOU KNOW, THE SAME CODE PATHS THAT WE HAVE INTERNALLY THAT TAKE YOUR CODE ARE THE ONES THAT ARE RUN WHEN YOU'RE ASKING FOR THINGS LIKE TOOL TIPS OR THINGS LIKE THAT. ONE OF THE PROBLEMS THAT WE IDENTIFIED WAS THINGS THAT WERE VERY HIGHLY OPTIMIZED FOR, YOU KNOW, JUST A SINGLE PASS COMPILATION WERE NOT NECESSARILY OPTIMIZED IN A LONG-TERM — LIKE A LONG LIVE PROCESS, SORT OF LIKE A SERVER PROCESS YOU CAN IMAGINE INSIDE OF TOOLING.

AS YOU CAN SEE, THERE'S A WHOLE BUNCH OF PROBLEMS THAT WERE HERE THAT WERE ALL CHECKED OFF BECAUSE THEY'RE ALL ISSUES THAT WERE FIXED, AND THE END RESULT IS JUST MASSIVE PERFORMANCE IMPROVEMENTS IN ALL OF YOUR TOOLING, ESPECIALLY IF YOU HAVE REALLY LARGE SOLUTIONS. THIS IS SOMETHING THAT CAME OUT WITH F SHARP 4.E6, BUT IT'S ALSO BEEN CONTINUALLY IMPROVING. I LIKE TO THINK OF IT AS THIS THING THAT OVER THE COURSE OF MULTIPLE RELEASES HAS JUST GOTTEN A LOT BETTER LEADING UP TO THE F SHARP 4.7 RELEASE. THE OTHER THING THAT WAS SORT OF MENTIONED THERE WITH F SHARP 4.6 IS THE ANONYMOUS RECORDS FEATURE. I WANT TO SHOW THAT IN VISUAL STUDIO CODE JUST A LITTLE BIT BEFORE I GET INTO THE NEW STUFF. MOVING OVER HERE INTO VISUAL STUDIO CODE, WHICH I WILL POINT OUT IS USING THE OFFICIAL F SHARP PLUG -IN KNOWN — WHICH HS 1.4 MILLION DOWN LOADS. IT'S ACTUALLY THE F SHARP 4.7 COMPILER. I'M JUST SHOWING F SHARP 4.6. I'M GOING TO SHOW YOU A LITTLE BIT ABOUT ANONYMOUS RECORDS.

FOR F SHARP PROGRAMMERS WHO ARE FAMILIAR WITH RECORDS. YOU KNOW THEM WELL AS THESE TI TYPES YOU CAN DECLARE UP FRONT. YOU CAN DO A WHOLE BUNCH OF DIFFERENT STUFF WITH THEM. THEN A LOT OF F SHARP PROGRAMMERS ARE VERY USED TO TU PILL WHERE IS YOU CAN AD HOC ON THE FLY WHERE YOU NEED IT, GROUP SOME STUFF TOGETHER AND DO WHATEVER YOU WANT TO DO WITH IT. THE PROBLEM WITH — YOU DON'T GET AS GOOD OF TOOLING SUPPORT AS YOU DO WITH RECORDS. YOU CAN'T RENAME LABELS. IT'S NOT ABLE TO TRACK THINGS AS WELL. THAT'S INHERENT WITH RECORDS BEING THIS OKAY, I DECLARED A TYPE, I'M GOING TO USE IT IN THIS PARTICULAR WAY, AND A LOT OF PEOPLE WANT SOMETHING IN BETWEEN. THEY WANT SOME OF THE TOOLING SUPPORT YOU GET WITH RECORDS, HOWEVER THEY ALSO WANT THAT AD HOC HEY ON THE FLY I WANT TO CONSTRUCT A FEW THINGS AND DO SOME STUFF WITH IT, AND THEN LATER ON THEY MAY ACTUALLY DECIDE THAT AD HOC STUFF THAT I CONSTRUCTED, I WANT TO PULL THAT OUT INTO A REAL TYPE DECLARATION.

YOU CAN'T REALLY DO THAT WITH TU PILLS TODAY. THAT'S ONE OF THE PRIMARY REASONS ANONYMOUS RECORDS EXISTS. WE'VE GOT THIS FUNCTION THAT'S CALLED GET CIRCLE STATS, IT TAKES IN OUR RADIUS, WHICH IS A FLOAT. YOU'LL NOTICE IF I HOVER OVER HERE, THERE'S A BIG TOOL TIP, GIVEN A RADIUS PRODUCES THIS LITTLE BRACKET THINGY, AND THAT'S AN ANONYMOUS RECORD TYPE. THAT'S — YOU KNOW, YOU NOTICE THERE'S THE LITTLE BRACKET IN THE BAR, REGULAR RECORDS DON'T HAVE THE BAR, THAT'S SORT OF THE MAIN WAY YOU DISTINGUISH THEM IN SY SYNTAX. I GOT THE AREA, THE DIAMETER, THE CIRCUMFERENCE, AND THEN I CONSTRUCT SOME STATS ABOUT THAT — ABOUT THE CIRCLE THAT IS DEFINED BY THE RADIUS I WAS GIVEN.

IT'S GOT A DIAMETER, AN AREA OF THE CIRCLE, AND IT'S GOT A CIRCUMFERENCE. WHEN I ACTUALLY CALL THAT CODE, I CAN GET MY LITTLE RADIUS VALUE. I GET THE CIRCLE STATS, AND THEN I CAN PRINT THE VALUES OUT. SO IF THIS WERE A TUPIL: IF I WERE TO DO SOMETHING LIKE THIS, THERE'S NOTHING TOPPING ME FROM DOING SOMETHING LIKE THIS RIGHT, RETURNING THE TUPIL, AND DECOMPOSING AT THE CALL SITE. I HAVE TO CONSTRUCT THE NAME AT THE CALL SITES EVERY TIME TO GET ACCESS TO STUFF AND ESPECIALLY IF I HAVE LIKE A LOT OF STUFF THAT HAS LIKE MEANINGFUL NAMES THAT I WANT TO CHANGE OVER TIME.

MAYBE I DON'T LIKE THE NAME. I WANT TO REFACTOR IT A LITTLE BIT, I CAN'T REALLY DO THAT. IN FACT, NOW IF I WANT TO REFACTOR THIS, I CAN JUST GO AHEAD AND DO THAT RIGHT HERE. KY I'LL JUST CALL THAT AREA. U I DON'T HAVE TO GO AND FIND A NAME I CONSTRUCTED FROM THE TU PILL I GOT BACK AND ALSO RENAME THAT.

I CAN DO IT ON THE FLY. SO THIS IS, YOU KNOW, PRETTY MUCH WHAT YOU CAN ALREADY DO WITH RECORD TYPES. I COULD HAVE DEFINED A CIRCLE STATS TYPE AS A RECORD UP FRONT AND CONSTRUCTED AN INSTANCE ONE OF THOSE. WHAT I WANTED TO SORT OF AD HOC GROUP THE RADIUS VALUE WITH THESE OTHER VALUES I HAVE HERE. I COULD DO SOMETHING LIKE THIS. I COULD GO, THE GROUP IS — I COULD GO RADIUS AND I COULD GO CIRCLE STATS AND THERE WE GO, THIS IS A TYPICAL THING YOU WOULD DO IN F SHARP. WHAT IF I WANTED AN ACTUAL RADIUS VALUE I COULD FACTOR OVER TIME. THAT'S WHERE ANONYMOUS RECORDS REALLY SHINE HERE. I'LL CALL THIS MORE CIRCLE STATS AND I'M GOING TO TAKE MY CIRCLE STATS VALUE AND I'M GOING TO COPY AND UPDATE SYNTAX THAT YOU WOULD NORMALLY HAVE WITH A REGULAR RECORD. INSTEAD OF JUST COPYING THE RECORD WITH A NEW VALUE, I'M GOING TO THROW A NEW FIELD ON THERE. I'M GOING TO SAY CIRCLE STATS WITH RADIUS EQUALS RADIUM, AND NOW I COULD PRINT THIS OUT.

I COULD GO MORE CIRCLE STATS.RADIUS, AND THERE I HAVE THAT. THAT GIVES YOU THE POWER BEING ABLE TO AD HOC WITH TUPLES AND GET SOME OF THE NICENESS WITH RECORDS. THERE'S A LITTLE MORE YOU CAN DO WITH ANONYMOUS RECORDS. I WANT TO SHOW JUST SORT OF BRIEFLY, IF YOU'RE DOING TYPE DECORATIONS, THERE'S A BIT OF CODE HERE, SO YOU MAY HAVE SOMETHING LIKE A DISCRIMINATED UNION TYPE, AN EMPLOYEE COULD EITHER BE AN ENGINEER, A MANAGER OR AN EXECUTIVE, AND SO BUT I MAY WANT TO HAVE A BUNCH OF DATA ASSOCIATED WITH EACH OF THOSE TYPES.

A COMMON WAY TO DO THAT SORT OF THING IS TO DO SOMETHING LIKE THIS, RIGHT? I COULD HAVE A MANAGER TYPE HERE. >> I MAY WANT TO HAVE A RECORD THAT HOLDS DATA AND HAVE THAT GROW OVER TIME. IF I WANT TO GROUP THINGS UP IN A WAY THAT'S CONVENIENT I WANT TO USE RECURSIVE TYPE, WHAT IT ACTUALLY MEANS YOU HAVE TO WRITE MORE CODE AND YOU HAVE TO SORT OF DECLARE SOMETHING AS LIKE A BIG OLD UNIT TOGETHER. NOW I COULD TUPLE THESE UP. I COULD HAVE A NAME AS LIKE A STRING AND THEN I COULD SAY REPORTS AND EMPLOYEE LIST, BUT THEN THAT'S A TUPLE INSTEAD OF A RECORD TYPE, AND WHAT IF I WANT TO HAVE A RECORD TYPE. WELL, NOW I HAVE TO ACTUALLY MAKE IT, YOU KNOW, THE NAME MANAGER.

WELL, WITH ANONYMOUS RECORDS YOU DON'T HAVE TO DO THAT AT ALL. YOU'LL NOTICE THERE'S LESS CODE HERE. THERE'S NO NEED FOR RECURSIVE TYPE DECLARATION. THAT'S BECAUSE I'VE END LINED THE RECORD HERE. YOU GET SORT OF THE BENEFIT OF BOTH WORLDS OF HAVING SORT OF AN AD HOC GROUPING OF VALUES BUT IN THIS CASE A TYPE DECLARATION. THAT'S PRETTY POWERFUL FOR ANONYMOUS RECORDS. SO MOVING ON, F SHARP 4.6. IT'S GREAT. WE RELEASED IT. WE MADE SOME IMPROVEMENTS. SOME IMPROVEMENTS ARE SHIPPING IN THE — THE ENOUGH STUFF IS F SHARP 4.7 AND THE F SHARP PREVIEW WE SHIPPED ALONG SIDE IT. THIS I'M A LITTLE MORE EXCITED ABOUT MOSTLY BECAUSE WE SHIPPED IT YESTERDAY.

IT INCLUDES A FEW THINGS, NAMELY LANGUAGE VERSIONING IN THE COMPILER ITSELF, WHICH I'LL TALK ABOUT A BIT, IMPLICIT YIELDS AND SOME RELAXED SYNTAX WHICH IS — I'LL GO OVER THAT A LITTLE BIT, THE HIGH LEVEL BIT HERE IS — IT JUST MAKES YOUR CODE EASIER TO WRITE, LESS SURPRISES. THINGS ARE A BIT MORE CONSISTENT WITH OTHER THINGS IN THE LANGUAGE. THAT F SHARP FEATURE HAS NEW FEATURES I'LL SHOW OFF HERE.

I'M GOING TO SHOW OFF SOME OF THIS STUFF. I'M GOING TO HOP OVER TO VISUAL STUDIO HERE, THE OLD BIG IDE, AND WE'LL GET GOING. I HAVE A CONSULT PROJECT HERE NAMED F SHARP 4.7. THIS IS DOWN AT CORE PROJECT. I WANT TO SORT OF DEMONSTRATE WHAT IMPLICIT YIELDS MEAN BY TAKING YOU FROM A COMPILE ERROR TO A WORKING CODE, SO AS YOU MAY HAVE NOTICED THERE'S A RED SQUIGGLE HERE, RIGHT? I CAN GENERATE SEQUENCE WITH A RANGE EXPRESSION. GIVE ME FROM ONE TO TEN. THAT'S A SEQUENCE. WHAT IF I WANT A SEQUENCE COMPRISED OF ONE, TWO, AND THREE. NOW IT SAYS INVALID, OBJECT, SEQUENCE, OR RECORD EXPRESSION. THAT'S — WHAT? THAT'S PRETTY WEIRD. NOW, YOU CAN ACTUALLY DO THIS IN LISTS AND ARRAYS BUT YOU CAN'T DO IT WITH SEQUENCES, WHICH IS KIND OF WEIRD. IN FACT, YOU HAVE TO SPRINKLE THIS KEYWORD EVERYWHERE, THIS YIELD KEYWORD. ESPECIALLY IF YOU'RE A BEGINNER TO THE LANGUAGE. THIS IS NOT VERY FUN. IT'S NOT VERY DISCOVERABLE. THE ERROR MESSAGE DOESN'T TELL YOU ANYTHING ABOUT IT.

WE CAN IMPROVE THE ERROR MESSAGE BUT WE FIGURE WE MIGHT AS WELL FIX THE LANGUAGE. FIX THE ROOT PROBLEM, NOT NECESSARILY MAKE THE DIAGNOSTICS A BETTER. WE ALSO HAVE THIS FUNCTION CALLED GET DAYS OF WEEK THAT PRODUCES A LIST. THIS SAME PROBLEM ACTUALLY SHOWS ITSELF IN THINGS THAT ARE NOT SEQUENCES. IF YOU DECIDE TO START CONDITIONALLY GENERATING THINGS SO IN THIS CASE I WANT TO GENERATE MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, BUT IF INCLUDE WEEKEND IS TRUE, I ALSO WANT TO GIVE BACK SATURDAY AND SUNDAY. THERE'S JUST A BUNCH OF STUFF HERE. THIS IS A HORRIBLE ERROR MESSAGE FRANKLY. I CAN PUT IN THE YIELD. YES, IT TURNS OUT I HAVE TO PUT YIELDS IN ABSOLUTELY EVERY SINGLE SPOT, AND THAT'S THE ONLY WAY TO GET RID OF THAT ERROR MESSAGE. AT LEAST THAT'S THE WAY THAT THINGS WERE UP UNTIL F SHARP 4.7. NOW IF I OPEN UP MY PROJECT FILE, YOU'LL NOTICE THAT I HAVE THIS LANE VERSION PROPERTY UP HERE, AND I'VE EXPLICITLY SET IT TO 4.6 WHICH IS THE OLDER — I SHOULDN'T SAY OLD ER. I'M GOING TO COMMENT THAT OUT.

THIS IS A NEW PROJECT. NEW PROJECTS IMPLICITLY USE THE LATEST VERSION SO YOU DON'T HAVE TO ALWAYS SET IT YOURSELF. IF I GO BACK TO THIS FILE, VOILA, ALL OF THESE ERRORS MESSAGES ARE GONE BECAUSE ALL OF THESE YIELDS CAN BE MADE IMPLICIT. IF I'M REALLY IN LOVE WITH THESE YIELDS I CAN ADD THEM BACK, AND THE COMPILER IS FINE WITH THAT. THIS IS BACKWARDS COMPATIBLE. THERE'S NO ISSUE WITH DOING THAT THE OLD WAY.

WE THINK A LOT OF PEOPLE ARE GOING TO LIKE DOING THIS THE NEW WAY ONCE THEY'RE IN F SHARP 4.7. SPEAKING OF DOING THINGS A LITTLE BETTER, WE GOT A WONDERFUL FEATURE THAT WAS CONTRIBUTED BY ONE OF OUR COMMUNITY MEMBERS, WHOSE NAME IS GUSTAVO LEONE. THIS IS HOW YOU DECLARE AN OBJECT IN F SHARP. I COULD NAME THIS ANYTHING I WANT. I COULD NAME IT THIS OR SELF OR SOMETHING LIKE THAT. THERE'S SORT OF A CONVENTION OF THE LANGUAGE. YOU'LL NOTICE THIS IS GRAYED OUT. THAT'S BECAUSE I'M NOT ACTUALLY USING SELF.

I'M NOT REALLY DOING ANYTHING RECURSIVELY WITH THIS CLASS, SO WHAT TYPICAL F SHARP PROGRAMMERS WOULD DO, THEY'D SAY OKAY, I'M GOING TO PUT AN UNDER BAR THERE THAT INDICATES THAT THAT DOESN'T REALLY MATTER. BUT YOU HAD TO DO A DOUBLE UNDER BAR, AND THAT'S BECAUSE IT COULD PERHAPS BE VIEWED AS A BUG IN THE — SORT OF HAD THIS LITTLE WEIRD QUIRK WHERE YOU HAD TO PUT A DOUBLE UNDER BAR INSTEAD OF A SINGLE UNDER BAR. IF YOU WANT TO DISCARD SOMETHING OR SAY I DON'T CARE WHAT THE NAME IS, YOU CAN JUST HAVE A SINGLE UNDER BAR.

SO THIS WAS FIXED BY GUSTAVO LITTLE CHANGE.S A WONDERFUL – IT'S KIND OF ONE OF THOSE THINGS, IT'S THESE LITTLE PAPER CUTS THAT CAN GET YOU SOMETIMES WHEN YOU'RE WORKING IN A LANGUAGE, ESPECIALLY IF IT'S A NEW LANGUAGE AND YOU'RE NOT QUITE FAMILIAR WITH ITS IDIOMS. THIS IS ONE OF THOSE THINGS THAT CLEANS UP THOSE PAPER CUTS. THE LITTLE CODE FIXER KNOWS TO PREFIX IT. IN THIS CASE IT PREFIXES IT WITH UNDERSCORE, THAT'S ONE OF THE OPTIONS YOU HAVE. THE CODE FIXER WILL ALSO ACTUALLY DO THE SAME THERE, SO THE TOOLING IS ALSO UP TO DATE WITH THAT PARTICULAR FEATURE.

SPEAKING OF RELAXATIONS, THIS PART OF THE DEMO IS — ACTUALLY, IT'S REALLY NOTHING. IT'S JUST LOOKING AT THE CODE, AND THE REASON WHY — ANDI THINK THAT'S IMPORTANT IS BECAUSE IF YOU'VE BEEN USING F SHARP PRIOR TO F SHARP 4.7, YOU KNOW THAT YOU WOULD NOT BE ABLE TO WRITE THIS CODE TODAY. YOU WOULD HAVE TO TAB EVERYTHING OVER LIKE THIS. YOU WOULD HAVE TO ALIGN THIS B AND THIS D WITH THIS A. AND THAT WAS THE ONLY WAY YOU COULD GET THE COMPILER TO ACCEPT THIS PARTICLAR DECLARATION OF THE CONSTRUCTOR THAT YOU HAVE HERE, AND FRANKLY, THAT'S JUST KIND OF ANNOYING, SO WE JUST MADE IT SO YOU GOT TO INDENT OVER ONE. THE SAME THING APPLIES TO STATIC METHODS IN THIS CASE.

SO AGAIN, BEFORE YOU HAD TO MOVE ALL OF THESE OVER SO THAT THEY WERE PERFECTLY ALIGNED WITH TE FIRST PARAMETER THAT YOU LAID OUT. NOW THEY DON'T HAVE TO BE. THEY JUST NEED TO HAVE ONE INDENTATION LEVEL OVER SO THE COMPILER CAN UNDERSTAND THAT THESE ARE REFERRING TO THE METHOD THAT YOU ARE DECLARING RIGHT HERE. SO THAT'S KIND OF, YOU KNOW, ASIDE FROM A WHOLE BUNCH OF BUG FIXES AND MORE PERFECT PERFORMANCE IMPROVEMENTS, THAT'S KIND OF WHAT'S GOING ON FOR F SHARP 4.7. BUT LET'S TALK A LITTLE BIT ABOUT F SHARP PREVIEW BECAUSE THAT'S WHERE THINGS START TO GET A LITTLE BIT FANCY HERE. I'M GOING TO GO BACK TO MY PROJECT FILE, AND I'M GOING TO UNCOMMENT OUT THIS LANE VERSION FLAG. THIS IS SOMETHING I'M GOING TO HAVE TO ACTUALLY DO NOW IF I WANT TO USE PREVIEW FEATURES. I'M GOING TO CLEAR OUT 4.6. I'M GOING TO TYPE PREVIEW, SO IF I SAVE THAT, NOW I CAN OPEN UP THIS FILE CALLED NAME OF, AND YOU'LL NOTICE THAT THERE'S NO RED SQUIGGLES AND THAT'S BECAUSE WE'VE SORT OF ACTIVATED THE PREVIEW MODE.

INTERNALLY, THE WAY THAT WE DO THINGS IN THE COMPILER IS WHENEVER THERE'S A FEATURE TAT'S IMPLEMENTED NOW, IT'S ASSOCIATED WITH A FEATURE FLAG, AND THEN THAT FEATURE FLAG IS ASSOCIATED WITH A GIVEN RELEASE OF THE LANGUAGE, SO IN THIS CASE NAME OF HAS THE NAME OF FEATURE FLAG, AND THAT FEATURE FLAG IS ASSOCIATED WITH THE PREVIEW RELEASE OF THE F SHARP COMPILER. WHAT THAT ACTUALLY MEANS IS IF YOU SET YOUR LANE VERSION TO BE PREVIEW YOU WILL GET EVERYTHING THAT IS ASSOCIATED WITH THAT INTERNALLY, ONE OF THEM BEING NAME OF.

GOING BACK TO THE CODE HERE, THIS IS JUST SORT OF SOME BASIC USAGE THAT YOU COULD, YOU KNOW, IT'S PRETTY SELF-EXPLANATORY, RIGHT? I HAVE A FUNCTION THAT'S CALLED COMBINE LENGTHS. I TAKE TWO STRINGS, STR 1 AND STR 2, AND I WANT TO COMBINE THEM. PRETTY STRAIGHTFORWARD. I WANT TO MAKE SURE THEY'RE NOT NULL BEFORE I DO THAT. IN THIS CASE I'M GOING TO RAISE AN ARGUMENT NULL EXCEPTION, AND I WANT TO PASS THE NAME OF THE PARAMETER THERE. SO IN THIS CASE BEFORE I WOULD HAVE TO DO THIS OR, YOU KNOW — THERE WE GO. I WOULD HAVE TO DO SOMETHING LIKE THAT, AND IF I CHANGED THE NAME OF THE PARAMETER, I WOULD HAVE TO KNOW TO GO BACK INTO THE STRING LITERAL AND ALSO CHANGE IT: THAT YOU DON'T HAVE TO DO IF YOU'RE ON THE F SHARP PREVIEW ANYMORE. YOU CAN JUST TAKE THE NAME OF EVERYTHING YOU'RE WORKING WITH, AND THAT'S PRETTY GREAT. THIS IS — THIS HAS BEEN AROUND IN C SHARP FOR A WHILE.

THIS IS SOMETHING THAT'S BEEN HIGHLY REQUESTED BY THE F SHARP COMMUNITY FOR MANY YEARS. IT'S EXTREMELY POWERFUL IF YOU'RE DOING A LOT OF LOGGING OF PARAMETERS AND DIFFERENT VALUES AND YOU WANT TO SORT OF LOG, OKAY, THIS THING WHICH WAS, YOU KNOW, NESTED IN THIS THING, AND NESTED IN THIS THING, AND YOU WANT TO LAY IT ALL OUT AND GET IT INTO STRINGS, YOU CAN REFACTOR WITH EASE AND KNOW THAT YOU DON'T HAVE TO ACTUALLY UPDATE ANYTHING ELSE FROM THERE. SO JUST TO SHOW A LITTLE BIT MORE OF WHAT YOU CAN DO WITH NAME OF, I HAVE A MODULE WITH A FUNCTION, AND THEN I HAVE THE SYSTEM NAME SPACE UP THERE, SO I'M ACTUALLY TAKING THE NAME OF THE NAME SPACE, SO YOU CAN DO THAT IF YOU'D LIKE.

I'M TAKING THE NAME OF A MODULE THAT I DECLARED AND I'M TAKING THE NAME OF AN EXPLICITLY QUALIFID FUNCTION, YOU KNOW, N.F, THAT'S THE NAME OF THE ACTUAL FUNCTION. JUST FOR KICKS I CAN GO LET NAME OF, NAME OF, AND I CAN TAKE NAME OF NAME OF ITSELF. NOW, THIS IS PROBABLY NOT VERY USEFUL FOR ANYONE BUT YOU KNOW, IT JUST HAPPENED TO BE SOMETHING THAT WAS ENABLED BY THE FEATURE, AND SO THERE'S KIND OF NO REASON NOT TO KEEP IT. SO WE HAVE IT, AND IT'S FUN. SO THE NEXT ONE, THE NEXT FEATURE THAT'S SHIPPING IN THE F SHARP PREVIEW IS OPENING OF STATIC CLASSES. SO LET ME GO UP RIGHT HERE. SO A STATIC CLASS IS, YOU KNOW, IT'S JUST GOT A BUNCH OF STATIC METHODS ON IT OR STATIC MEMBERS, MAYBE SOME CONSTANTS, THINGS LIKE THAT.

ONE OF THE BEST EXAMPLES OF A STATIC CLASS IS THE SYSTEM.MATH CLASS. HISTORICALLY IF YOU'RE IN F SHARP, YOU WOULD HAVE TO GO MATH. — YOU WOULD HAVE TO EXPLICITLY QUALIFY MATH.WHATEVER YOU WANT TO USE TO USE IT. NOW YOU CAN JUST ACTUALLY OPEN THIS THING. IF YOU WERE TO DO THIS IN F SHARP 4.7 OR F SHARP 4.6, YOU DID NOT HAVE THE PREVIEW TURNED ON. YOU WOULD GET AN ERROR SAYING THERE IS NO NAME SPACE. THAT'S BECAUSE IT'S A CLASS. IT'S NOT A NAME SPACE. WHAT THAT MEANS IS I CAN JUST CALL SIGN OF PI RATHER THAN MATH.SIGN.MATH.PI. IT'S REALLY HANDY IF YOU'RE WORKING WITH THE MATH NAME SPACE AND THE OTHER LIBRARIES THAT PUT THIS KIND OF FUNCTIONALITY BEHIND STATIC CLASSES. THIS IS ALSO HELPFUL FOR F SHARP PROGRAMMERS WHO WANT TO CREATE DSLs THAT USE METHOD OVERLOADS. JUST LIKE YOU CAN DO A LITTLE BIT IN C SHARP, AND YOU CAN ACTUALLY DECLARE THOSE IN F SHARP TODAY BECAUSE AS IT TURNS OUT, A STATIC CLASS IS — IT'S NOT REALLY LIKE A REAL THING.

IT'S AN ABSTRACT SEALED CLASS IN .NET, AND SO YOU JUST CREATE A TYPE THAT IS BOTH ABSTRACT AND SEALED AND YOU GIVE IT SOME STATIC NUMBERS. IN THIS CASE I GAVE IT L, M, N, O, AND P. THEN YOU CAN OPEN THIS CLASS WHEN YOU HAVE THE FEATURE ENABLED AND YOU CAN JUST CALL THEM LIKE THAT. I DON'T HAVE TO SPECIFICALLY SPECIFY MY OF MY STATIC CLASS.L, AND MY STATIC CLASS M, THIS IS SOMETHING WE'RE EXCITED ABOUT, ESPECIALLY ON SOME OF THE FOCUS WITH WORKING WITH MACHINE LEARNING FRAMEWORKS WE'VE BEEN DOING LATELY. A LOT OF THESE FRAMEWORKS ARE USING STATIC CLASSES TO PACK THESE OVERLOADS BEHIND THERE BUT HAVE IT BE FUNCTIONAL INTERFACE. THIS WILL PLAY NICELY WITH THAT SORT OF STUFF IN THE FUTURE. SO THAT JUST ABOUT ROUNDS OUT F SHARP 4.7 AND THE F SHARP PREVIEW.

SO AS A QUICK SUMMARY HERE, F SHARP 4.6, WE SHIPPED ANONYMOUS RECORDS. WE MADE IMPROVEMENTS TO THOSE AND THE TOOLING FOR THEM OVER TIME. IT WORKS PRETTY MUCH EVERYWHERE, AND THERE'S BEEN TONS OF PERFORMANCE IMPROVEMENTS IN THE COMPILER AND THE TOOLS SINCE IT WAS RELEASED ALL THE WAY UP UNTIL NOW, AND ALSO INCLUDING THIS RELEASE WITH F SHARP 4.7. F SHARP 4.7 ONCE I FIX THE SPELLING ERROR HERE, I LIKE TO THINK IT MAKES THINGS EASIER FOR YOU AS AN F SHARP PROGRAMMER.

IT CLEANS UP A LOT OF LITTLE THINGS, ESPECIALLY IF YOU'RE pU IF YOU'RE WRITING WEB SHARP OR FABLE CODE, WHICH USES LISTS AS SORT OF LIKE AN HTML STYLE DSL, SOMETHING LIKE THAT. THIS MAKES IT A LOT EASIER. AND THE LANE VERSION SUPPORT ALLOWS YOU TO BUMP UP TO A PREVIEW, TRY STUFF OUT, GIVE US A LOT OF FEEDBACK. GET ACCESS TO FEATURES WAY EARLIER. THAT F START PREVIEW IS ALL ABOUT FEATURES RIGHT NOW. WE'RE GOING TO KEEP BUILDING FEATURES AND SHIPPING FEATURES STARTING NOW PRETTY MUCH ALL THE WAY UNTIL THE MIDDLE OF NEXT YEAR BEFORE WE START STABILIZING FOR THE DON ET 5 RELEASE. IF YOU WANT TO GET STARTED WITH F SHARP 4.7. THERE'S A SINGLE LINK, AKA.MS/FSHARP HOME. THIS TAKES US TO THE F SHARP HOME PAGE ON THE .NET WEBSITE.

THERE'S A BIG BUTTON THAT SAYS GET STARTED. IT WILL TAKE YOU TO DOWNLOAD THE LATEST SDK, YOU'LL HAVE F SHARP ALREADY AVAILABLE, AND YOU'LL BE ABLE TO GO OFF AND GET RUNNING WITH IT. >> IS IT TIME FOR QUESTIONS? >> I BELIEVE IT IS. >> SO AS I CAME IN, MIKA THOUGHT, YOU KNOW, BECAUSE IT WAS MY TURN, SHE'S LIKE HEY, I'M GOING TO WRITE DOWN SOME COOL F SHARP JOKES, AND I'M JUST GOING TO READ THEM IN THE ORDER THEY WERE GIVEN.

OKAY? YOU LET ME KNOW IF THEY'RE FUNNY. >> ACTUALLY, SORRY, SETH, I HAVE TO PAUSE YOU. IT'S NOT PRONOUNCED F SHARP, IT'S PRONOUNCED F OK TO — >> THAT WAS F SHARPING FANTASTIC. >> OOH. >> WHAT THE F SHARP IS F SHARP? LIKE I LIKE THE COURTESY LAUGH. MIKA WE'RE ONLY GETTING COURTESY LAUGHS ON THIS ONE, JUST FYI. NEXT ONE, KNOCK KNOCK. >> WHO'S THERE? >> F. >> F WHO? >> F SHARP. >> OOH, I DIDN'T SEE THAT ONE COMING.

>> I KNOW, I MEAN IT'S REALLY GOOD STUFF. HERE'S THE FIRST ONE BY THE WAY FROM JEFFREY HUNTLEY FROM CALIFORNIA. >> UH-HUH. >> I THINK THE CA IS CANADA, OR IT COULD BE CALIFORNIA, WHAT DO YOU THINK? >> ONLY JEFFREY CAN TELL US. JEFFREY HUNTLEY FROM CALIFORNIA OR CANADA. I'M GOING TO GET THE PENCIL OUT OF THE WAY FOR YOU. OVERHEARD PROJECT HAS MILLIONS OF DOWNLOADS. >> YES INDEED. >> WHAT'S THE IONIDE PROJECT? >> IT'S THE OFFICIAL F SHARP PLUG-IN FOR VISUAL STUDIO CODE. IT' BUILT BY THE COMMUNITY. IT'S SOMETHING WE'VE ALSO WORKED WITH THEM A LOT TO MAKE A LOT BETTER BECAUSE FRANKLY A LOT OF PEOPLE USE IT.

WE'VE BEEN COORDINATING WITH THEM ESPECIALLY ON THOSE PERFORMANCE IMPROVEMENTS. >> FANTASTIC. pHERE IS FROM HIEZ. WHY IS F SHARP SO COMPLICATED? THERE IS A MYTH THAT F SHARP IS COMPLICATED. WHAT SAY YOU, PHILLIP? >> I DON'T THINK IT'S PARTICULARLY COMPLICATED. THERE'S A LOT LESS SYNTAX THAT I NEED TO DO TO ACTUALLY GET MY WORK DONE. C SHARP IS A WONDERFUL LANGUAGE, BUT I KIND OF GET LOST IN THE CURLIES A LOT. >> YEAH. YOU KNOW, I WILL SAY THAT AS SOON AS YOU CAN FUNCTIONALLY, IT CHANGES THE WAY YOU WRITE YOUR CODE EVERYWHERE ELSE. EXCEPT MY FIRST FUNCTIONAL LANGUAGE, I'M GOING TO GO WAY BACK WAS 2007.

IT WAS F SHARP BEFORE IT WAS EVEN RELEASED, I WROTE A BLOG POST ON MY LITTLE BLOG, IT WAS LIKE THE FIRST ONE I'D EVER WRITTEN, AND GUESS WHO COMMENTED ON MY CODE? >> SANTA CLAUS. >> IT WAS DON SIGN WHO IS THE F SHARP SANTA CLAUS. HE'S LIKE THIS IS REALLY NICE. YOU COULD MAKE YOUR CODE BETTER BY DOING THIS. IT WAS PRETTY GOOD. SO THANK YOU SO MUCH, PHILLIP. WE HAVE COMING UP NEXT TIPS AND TRICKS ON MOVING TO .NET CORE WITH KATHERINE DOLLAR, BUT BEFORE THAT, WE'RE GOING TO GO TO JUST A TINY COMMERCIAL BREAK. LET'S TAKE YOU TO THAT RIGHT NOW. >> HEY THERE TREASURE HUNTERS. OUR FRIENDS AT PREEMPTIVE HAVE YOUR NEXT CLUE. PROVIDE THE SECRET KEY TO UNLOCK THE TREASURE, THE LANDING PAGE WILL GUIDE YOU.

GO TO THIS URL TO FIND THAT SECRET KEY, FIGURE OUT WHAT IT IS, WHISPER YOUR RESPONSE TO THE .NET BOT IN THE VISUAL STUDIO TWITCH CHANNEL, AND YOU COULD BE WELL ON YOUR WAY TO THE NEXT STEP N OUR TECHNICAL TREASURE HUNT. >> IN THIS VIDEO WE'RE GOING TO TALK ABOUT HOW TO GET INVOLVED WITH .NET AND THE WHOLE COMMUNITY IN GENERAL, SO I BROUGHT SCOTT HANSELLMAN ALONG WHO'S KIND OF AN EXPERT AT THIS.

>> I DON'T KNOW ABOUT THIS, BUT I WANT EVERYONE TO FEEL AS WELCOME AS POSSIBLE. IT'S A GREAT COMMUNITY AND SO MANY GREAT RESOURCES. I'M EXCITED TO SIT HERE WITH YOU AND SHARE THEM WITH EVERYONE. >> AWESOME. SO WE ACTUALLY HAVE A WEBSITE COMPLETELY DEVOTED TO THE .NET COMMUNITY, SO YOU CAN GO TO .NET.MICROSOFT.COM AND HIT THIS COMMUNITY TAB AND FIRST OFF WE CAN TALK ABOUT MEET UPS. WE HAVE AN AWESOME MEET-UP SITE FOR .NET EVENTS HAPPENING ALL AROUND THE WORLD. YOU CAN FIND SOMETHING LOCAL IN YOUR AREA OR IF THERE'S NOTHING LOCAL IN YOUR AREA. >> MAKE A MEET-UP, RIGHT? WE'VE GOT MEET-UPS EVERYWHERE. THERE'S HUNDREDS AND HUNDREDS OF MEET-UPS OUT THERE, LOTS OF GROUPS. MAYBE YOU SHOULD MAKE ONE.

WE'LL HELP YOU MAKE A MEET UP. WE'LL GIVE EWE SECTION ON THE SITE HERE. WE'VE EVEN GOT PRESENTATIONS AND SAMPLE CODES AT YOUR NEW MEET UP YOU WILL MAKE IN YOUR TOWN. >> DEFINITELY. SO NEXT UP WE ARE PRETTY ACTIVE ON STACK OVERFLOW, TWITTER, AND GITHUB, ESPECIALLY TWITTER. WE'RE ALWAYS TALKING ABOUT THE LATEST AND GREATEST STUFF WE HAVE OUT. IF YOU WANT TO FOLLOW ANY OF OUR TWITTER ACCOUNTS, THEY'RE ALL LISTED THERE. GITHUB IS OFTEN WHERE I HANG OUT. SO MUCH OF OUR DEVELOPMENT IS OPEN SOURCE, SO WE DIRECTLY INTERACT WITH YOU, OUR USERS ON A REGULAR BASIS, SO IT'S A GOOD WAY TO IMMEDIATELY ENGAGE WITH OUR DEVELOPMENT TEAMS. >> MM-HMM. BUT THESE AREN'T ONLY PLACES THAT WE HANG OUT. THERE'S A LOT MORE. IF YOU KEEP SCROLLING DOWN .NET AND THE .NET COMMUNITY IS EVERYWHERE YOU WANT TO BE.

IF YOU'RE NOT COMFORTABLE ON TWITTER OR GITHUB OR FACEBOOK WE HAVE PLACES WHERE YOU CAN TALK TO US ON INTERACT WITH US ON A VIDEO OR PODCAST, WE HAVE A COMMUNITY STANDUP WHERE WE JUST KIND OF TALK ABOUT THE COMMUNITY AND WE'LL INTERACT LIVE WITH YOU ON YOUTUB CHAT. >> YEAH, AND THAT'S EVERY WEEK. >> NEXT UP, SO WE DO HAVE A LOT OF BLOGS COMING OUT AS WELL AS GITTER AND DISCORD CHANNELS. IF YOU WANT TO HOP IMMEDIATELY ON A CHAT, WE HAVE CHANNELS IN THERE FOR BEGINNERS AS WELL AS PEOPLE WHO REALLY JUST WANT TO TALK ABOUT C SHARP DESIGNS AND ALL OF THE VARIOUS THINGS WE COULD DO WITH THE LANGUAGE. >> MM-HMM. ANOTHER THING THAT I MIGHT WANT TO POINT OUT IF YOU DON'T MIND SCROLLING UP IS THE .NET FOUNDATION WEBSITE.

IF WE COULD OPEN THAT IN ANOTHER TAB. .NET FOUNDATION HAS A BUNCH OF RESOURCES FOR YOU TO DIVE INTO PROJECTS. IF YOU SCROLL DOWN THESE ARE ALL THE PROJECTS. LOOK HOW BIG THE COMMUNITY IS. ISN'T THAT GREAT? >> YEAH. >> A LITTLE FURTHER DOWN FIND A MEET UP. A LITTLE FARTHER DOWN WE'VE GOT RESOURCES, BUILT YOUR OWN EVENT. LOOK AT THAT, BROWSING RESOURCES. FREE WORKSHOP CODE, FREE PRESENTATIONS. THIS IS A WAY FOR YOU TO JUMP START YOUR OWN COMMUNITY. ALL OF THESE THINGS ARE AVAILABLE TO YOU, BUT IT ALL STARTED AT THE .NET COMMUNITY WEBSITE. >> SO CHECK OUT THE .NET COMMUNITY WEBSITE TO FIGURE OUT HOW TO GET MORE INVOLVED.

THANK YOU SO MUCH FOR WATCHING THE VISUAL STUDIO AND SHOW SERIES. WE HAVE TONS OF OTHER VIDEOS COMING OUT ON C SHARP AND .NET CORE, ASP.NET, BE SURE TO CHECK THOSE OUT. >>> WELCOME BACK TREASURE HUNTERS. I HAVE YOUR NEXT CLUE FROM OUR FRIENDS AT TWILIO. THEY HAVE THIS TO SAY, SOMETIMES A SONG AND A MOMENT BECOMES SO INTERTWINED IT BECOMES IMPOSSIBLE TO DISTINGUISH THE TWO.

ONE SUCH SONG, ONE THAT CREATED ONE SUCH MOMENT IS THE ANSWER TO THIS PUZZLE, BUT CAN YOU ROLL WITH THE PUNCHES AND DISCOVER THE SONG? THE ANSWER LIES AT THE END OR MAYBE THE BEGINNING OF YOUR TWILIO QUEST. GO TO THIS URL TO GET STARTED AND FIND THAT ANSWER. WHISPER YOUR RESPONSE TO T THE .NET BOT IN THE VISUAL STUDIO CHANNEL, AND YOU COULD BE WELL ON YOUR WAY TO THE NEXT STEP IN YOUR TECHNICAL TREASURE >> HI, I'M HERE TODAY WITH RICH LANDER TO TALK ABOUT SOME TIPS FOR MOVING TO .NET CORE. HOW ARE YOU DOING TODAY? >> GREAT. SO THE WAY I KIND OF THINK ABOUT THIS TALK IS I OFTEN MEET WITH THE BIG CUSTOMERS WHO COME TO CAMPUS TO ASK US FOR GUIDANCE.

I'M PUSHING, LIKE, RICH, DON'T LIE TO ME. YOU KNOW, TELL ME THE TRUTH. TELL ME HOW IT REALLY IS. >> YEAH. >> SO THIS IS SUPPOSED TO BE THE HOW IT REALLY IS TALK FOR MOVING TO .NET CORE. >> WE'RE CERTAINLY AIMING IN THAT DIRECTION. SO WE'RE GOING TO BE GOING INTO A FEW PLACES YOU MIGHT NOT EXPECT US TO GO. INCLUDING SPENDING SOME TIME ON MAKING THAT DECISION ABOUT WHETHER TO GO TO .NET CORE AND WHEN TO DO IT. LET'S START OFF — >> AND NO LIE. >> WE'RE NOT GOING TO LIE TO YOU. WE'LL TRY HARD NOT TO LIE TO YOU. SO WE'LL START OFF LIKE I SAID WITH SHOULD YOU DO IT, IN THE FIRST PLACE.

SHOULD YOU GO TO .NET CORE, HOW WILL YOU PREPARE FOR IT AND THEN SOME TIPS. THE BIGGEST PART IS THE SETTING UP WHICH IS THE EXPERIENCE YOU HAVE AS WELL. >> LIKE HOW TO MAKE THE PLAN. >> HOW TO DETAIL THAT DOWN TO BEING ABLE TO CARRY ITOUT. SO BEFORE WE DO THAT, I THINK WE SHOULD STAR — START WITH WHY DO IT IN FIRST PLACE, WHAT'S GREAT ABOUT .NET CORE? BECAUSE THEN WE'LL TALK ABOUT SOME PAIN POINTS. I DON'T WANT TO DO THAT WITHOUT SAYING WHY BOTHER? THESE ARE THE BENEFITS FOR .NET CORE. FOR A LOT OF A PEOPLE THE SIDE BY SIDE INSULATION WHICH IS — THAT'S INSULATION OF THE RUN TIME.

THAT CAN BE ONE OF THE PAIN POINTS. BUT IT'S A BENEFIT IN THAT YOU CAN HAVE TWO APPLICATIONS ON THE SAME — IN THE SAME SPACE, TWO APPLICATION ON THE SAME AND THEY'RE EACH RUNNING THE COPY OF THE RUN TIME. IT'S ALSO FASTER ACROSS THE PLATFORM. OP SOURCE AND IT WILL BE GETTING NEW FEATURES. WHILE .NET FRAMEWORK IS STABILIZED. >> ONE THING WE FORGOT TO SAY, IT'S FASTER AND USES LESS MEMORY. >> WHEN YOU ACTUALLY MEASURE ONE LITTLE PIECE OF CODE YOU CAN SEE THE SPEED OF THAT. BUT WHAT'S MUCH, MUCH HARDER TO GET A HANDLE ON IS HOW THE ALLOCATIONS GOING ON IN THE BACKGROUND ARE INCREASING YOUR LOAD FOR GC AND THEN YOU WIND UP WITH GC PRESSURE.

SO ALLOCATIONS ARE SUPER IMPORTANT FOR A COUPLE OF REASONS. THAT'S THE MAIN ONE. >> THE SIMPLEST THING IS IF YOU HAVE A HOSTED ENVIRONMENT, YOU CAN PACK MORE APPS ON TO THE SAME MACHINE. >> THAT'S RIGHT. ALL RIGHT. FIND OUT MORE AT THE .NET CORE 3 FEATURES AT THIS BLOG POST. RICH WROTE IT SO HE'S PRETTY EXCITED ABOUT IT. SO SHOULD YOU MOVE? >> A BIG QUESTION. >> WE'LL LOOK AT A COUPLE OF CONSIDERATIONS. WE'LL WALK THROUGH EACH OF THESE. >> YEAH. JUST ONE TINY BIT IS YOU KNOW I HAVE BEEN ON — YOU KNOW, TALKING TO CUSTOMERS ON CAMPUS. SO I HAVE BEEN TO CUSTOMER SITES. I THINK MOST OF THEM IN THE UNITED STATES, BUT MAYBE IN OTHER COUNTRIES TOO. DEFINITELY IN OTHER COUNTRIES. AND, YOU KNOW, THIS QUESTION IS VERY REAL. BECAUSE, YOU KNOW, DIFFERENT COMPANIES WORK DIFFERENT WAYS BUT A LOT OF TIMES YOU HAVE LIKE A HIGHER LEVEL MANAGER WHO'S RESISTANT TO CHANGE.

THEY'RE LIKE YOU KNOW SHOW ME WHY WE SHOULD — WHY WE SHOULD DO THIS. THIS IS THE RISK, IS IT LOW? >> YEAH. SO THIS IS SOME OF THE THINGS YOU CAN DO TO ESTABLISH SPECIFICS ABOUT WHAT IT'S GOING TO TAKE AND WHERE YOU'RE GOING TO GET VALUE FROM IT. WE DEFINITELY ENCOURAGE YOU TO GO IF YOU CAN FIND THE VALUE. THAT'S WHY THE BENEFIT SLIDE IS SUPER IMPORTANT. I HOPE THAT WHEN YOU COME BACK AND CONSIDER THIS, YOU'LL — YOU WILL EXPLORE THE GREAT THINGS ABOUT .NET CORE, BUT NOT IN ISOLATION. YOU WANT TO LOOK AT THOSE ALONGSIDE THE COST.

SO BEFORE WE GO THERE — >> CAN I SAY ONE MORE THING? >> YEAH. >> BACK TO THESE MANAGERS THAT ARE RESISTANT, I WAS AT THIS ONE CUSTOMER — I THINK HE WAS IN LAST SPRING. WE DID THIS PROJECT WITH HIM AND THE MANAGEMENT WAS KIND OF RESISTANT. WE SPENT A DAY UPGRADING THE APP. WE'RE ABLE TO GIVE THEM REAL NUMBERS. BUT HE WERE LIKE WHOA, THIS ACTUALLY LOOKS PRETTY GOOD. THIS WAS — >> WAS IT PERFORMANCE NUMBERS? >> YEAH.

PERFORMANCE NUMBERS. THIS IS BACK LIKE IN PREVIEW 3. >> IT'S GREAT. SO BEFORE WE GET INTO SOME OF THE SPECIFICS, I WANT TO LOOK AT THE OTHER CONCERNS, KIND OF THE THINGS THAT AREN'T THE RIGHT REASONS TO MAKE A DECISION. LET'S TAKE A QUICK LOOK ANOTHER THESE. THE FIRST THING IS YEAH, IF YOU'RE WORRIED ABOUT .NET FIRMWARE NOT BEING SUPPORTED THAT'S NOT IN AND OF ITSELF A GOOD REASON TO MOVE. SO IT WILL BE SUPPORTED FOR A VERY LONG TIME. >> YEAH. >> I UNDERSTAND THAT IN RESPONSE TO THAT, YOU MIGHT SAY HEY, BUT THERE WAS THIS THING WHICH EVER THING IT IS THAT COMES TO MIND. AND .NET FRAMEWORK IS DIFFERENT THAN ANYTHING THAT'S BEEN OUT THERE BEFORE THAT'S UNDERGONE A SIMILAR CHANGE. AND THE FIRST REASON IS THAT IT'S A WINDOWS COMPONENT. SO IT'S A CRITICAL — IT'S PART OF WINDOWS.

WINDOWS NEEDS IT. >> IT IS LITERALLY ON THE WINDOWS DVD IF WE STILL HAVE THOSE. THE DVDs. >> FOR THOSE OF YOU WHO REMEMBER WHAT A DVD IS. >> YES. >> THEN CHOOSE HEAVILY WITHIN MICROSOFT. IN FACT, VISUAL STUDIO. >> YES. THAT'S AN EXAMPLE. >> VISUAL STUDIO IS A .NET FRAMEWORK APPLICATION. THE BIGGEST REASON IS THAT THIS IS NOT SOMETHING — THIS CHANGE TO .NET CORE AND .NET FRAMEWORK SPLITTING A LITTLE BIT HERE. NOT ONLY TO FREE US UP TO DO GREAT THINGS WITH .NET CORE BUT TO DO THAT, BUT IT'S ALSO TO SAY THERE ARE OH, WE DON'T EVEN HAVE A GOOD ESTIMATE OF HOW MANY APPS THERE ARE OUT IN THE WILD.

>> MILLIONS. >> THOSE — THAT'S WORKING. IT'S WORKING AND GETTING THINGS DONE FOR PEOPLE. SO STABILIZING THAT ASPECT OF OUR ECOSYSTEM IS IMPORTANT TO US. IMPORTANT TO BEING ABLE TO SET UP FOR THE FUTURE WITH THIS BASE OF EXISTING APPS BEING SOLID WHERE THEY ARE. SO I THINK IT'S SUPER IMPORTANT TO THINK ABOUT THERE'S GREAT REASONS TO GO TO .NET CORE. THEY'RE AFRAID WE'LL PULL THE PLUG ON .NET FRAMEWORK. YOU NEED SERVICES, WE CAN DO THAT.

LICENSING, IF YOU'RE CONCERNED ABOUT THE LICENSING WE'RE MIT, THAT'S A GOOD LICENSE FOR BUSINESS. IF YOU WANT TO HEAR MORE, LET US KNOW AND WE'LL GET RICH TO WRITE A BLOG POST. >> ONE THING ABOUT THAT. I HAVE TALKED TO SEVERAL CUSTOMERS SOME OF THEM VERY, VERY LARGE. SO OUR SOURCES ON MIT THE PART THAT'S RUNNING THE BUSINESS BUT A LOT OF CUSTOMERS WANT TO HEAR FROM US THAT THEY'RE STILL INSTALLING MICROSOFT PROVIDED SOFTWARE. WHEN YOU ACTUALLY GO DOWN LOAD IT FROM THE WEBSITE THAT'S A MICROSOFT BUILD. AND IT'S — IF YOU WANT TO THINK OF IT AS A MICROSOFT PROPRIETARY PRODUCT, FEEL FREE. IT'S A MICROSOFT SUPPORTED PRODUCT SO THERE'S NOTHING SCARY THERE. IF YOU WANT TO USE THE WORD OPEN SOURCE YOU CAN. IF YOU WANT TO USE THE WORD LIKE, YOU KNOW, MICROSOFT CERTIFIED AND SUPPORTED YOU CAN USE THAT WORD TOO.

IT'S ALSO TRUE. >> BOTH TRUE. >> WE ALSO PROVIDED THE SOURCE CODE FOR PEOPLE TO BUILD IT SEPARATELY SO WE HAVE WORKED REALLY HARD TO BE ON BOTH SIDES OF THIS FENCE. >> BOTH DOING ALL THE THINGS. >> WE THINK IT'S GREAT TO BE BOTH AT ONCE. WE THINK WE'RE HITTING THAT. SO MICROSOFT IS STILL, YOU KNOW, WE'RE STILL — NOBODY IS GOING TO DO ANYTHING CRAZY.

WE ARE WATCHING IT VERY CLOSELY. WE APPROVE EVERY COMMIT. WE ARE WATCHING IT VERY CLOSELY, IT IS VERY SAFE. BUT AT THE SAME TIME, WE TAKE COMMITS FROM THE COMMUNITY, WE'RE THRILLED TO DO THAT AND I THINK IT'S WORKED OUT WELL. LET'S GET INTO THE SPECIFIC QUESTION. THE FIRST ONE IS YOUR APPLICATION IN ACTIVE DEVELOPMENT BECAUSE IF YOU ONLY OPEN YOUR APPLICATION OCCASIONALLY IT'S TO DO SMALL THINGS LIKE CHANGE WHAT A CURRENT YEAR IS YOU'RE NOT DOING TO GAIN A LOT.

THE NEW FEATURES — >> WELL, THERE'S THE OTHER SIDE OF IT IS. MAYBE IT'S AN ENORMOUS APP THAT HAS A VERY SLOW RATE OF CHANGE. THAT'S PROBABLY THE ONE THAT YOU MOST WANT TO THINK ABOUT. IF YOU ONLY HAVE THIS ONE DEVELOPER LEFT WHO IS WORKING ON THIS MEGA APP, THEN YOU WOULD — THAT MAY NOT BE THE BEST THING TO MOVE TO IT. YOU WANT A TEAM. >> I WANT TO CLARIFY THAT. BECAUSE THE ACT OF MOVING WILL PUT IT UNDER ACTIVE DEVELOPMENT SO THAT IF'S SENSIBLE HEY, THAT'S GREAT. >> THAT'S A PERFECT WAY OF PUTTING IT. >> IT WILL FORCE IT. SO WE'LL TALK MORE ABOUT THINKING ABOUT THAT. IN FRAMEWORKS WE HAVE SOME STUFF THAT'S NOT THERE. MOST THINGS ARE THERE. WPF IS THERE AND THEN THE WINDOWS COMPATIBILITY WILL BRING SOME MORE THINGS IN. A NUMBER OF THINGS ARE ACTUALLY THERE, BUT THERE'S SOME IMPORTANT THINGS NOT DOING TO BE THIS. A COUPLE OF THINGS ABOUT DOMAIN OR IS THAT COMPLETELY — >> NO.

THAT DOMAIN TYPE IS THERE. SOME OF THE BASIC FUNCTIONALITY LIKE GETTING THE LIST OF ASSEMBLIES IS THERE BUT THE FUNDAMENTAL CONCEPT OF APP DOMAINS IS NOT THERE. >> RIGHT. SO IT DOESN'T MAKE SENSE TO DO THINGS IN A PARTICULAR WAY ON .NET CORE FOR SOME OF THE THINGS. SO THEY'RE JUST NOT THERE. SO IF YOUR WEB FORMS YOU'RE LOOKING AT A DEEP CONSIDERATION OF THE — >> CAN I SAY ONE MORE THING ABOUT THE SLIDE? >> YOU CAN ALWAYS SAY ONE MORE THING. >> ONE OF THE THINGS WE'RE DOING OVER THE LAST FEW YEARS OKAY WE'LL BRING MORE FUNCTIONALITY INTO .NET CORE THAN FRAMEWORK AND WE DEFINITELY DID THAT IN .NET CORE 3.0.

WINDOWS FORM AND WPF AND THOSE WERE OBVIOUSLY VERY BIG PROJECTS. THAT IS THE END OF THAT JOURNEY. THE JOURNEY OF BRINGING M MORE .NET FRAMEWORK INTO .NET CORE. SO WE FEEL WE DID A GREAT JOB. WE TOOK A TON OF CUSTOMER FEEDBACK. WE ADDED LIKE IF YOU LOOK AT BETWEEN .NET 1.0, WE ADDED 40,000 APIs. THAT'S NOT INCLUDING WHAT WE DID WITH WINDOWS FORMS AND WPF AND THIS IS THE END OF THAT PARTICULAR PHASE. SO ALL THESE THINGS ON THE RIGHT-HAND SIDE, THOSE ARE NOT THE NEXT CANDIDATES WE'RE GOING TO BRING BACK. THOSE ARE GOING TO REMAIN ON THAT LIST ON THE RIGHT. AND NOW WE'RE GOING TO GO DO OTHER THINGS BUT NOT MORE .NET FRAMEWORK FUNCTIONALITY.

>> WAITING TO SEE — SORRY, YEAH IT'S JUST NOT IN THE CARDS. THERE'S SOME GOOD REASONS FOR THESE. NONE OF THIS IS ARBITRARY. IT WAS ALL — WE TOOK A VERY DEEP LOOK AT ALL OF THESE THINGS AND HOW IT WOULD IMPACT .NET CORE. AND WHERE WE FELT THAT IT WAS NOT GOING TO COME FORWARD WITH ENOUGH COMPATIBILITY WITHOUT BEING INCONSISTENT WITH .NET CORE AND IT WENT ON THIS LIST. YEAH. ALL RIGHT. SO NEXT THING IS TO TALK ABOUT SUPPORT POLICY. THAT SOUNDS EXCITING. >> YEAH. I REMEMBER WHEN I FIRST — BEFORE YOU WORKED HERE I WAS TELLING YOU ABOUT THIS SUPPORT POLICY. DO YOU REMEMBER THAT? >> YEAH. >> I WAS TALKING TO YOU AND JULIE. >> YES.

SO THE SUPPORT POLICY IS DIFFERENT FOR .NET FRAMEWORK AND .NET CORE. I'M GOING TO TALK ABOUT THE .NET CORE SUPPORT POLICY. AND A YEAR AGO, IN DECEMBER, NOT QUITE A YEAR AGO WE RELEASED 2.2. THEN 3.0 WE RELEASED LIKE RIGHT NOW. >> JUST YESTERDAY. >> THAT'S WHERE WE ARE. SO LET'S LOOK AT THE SCHEDULE GOING FORWARD BECAUSE WE HAVE ANNOUNCED THE SCHEDULE. WE THINK THAT'S A GREAT IDEA SO YOU KNOW WHAT IT'S GOING TO BE. SO FIRST OF ALL, IN NOVEMBER WE'RE GOING TO HAVE 3.1. WE'RE CALLING THAT LTS WHICH IS LONG TERM SUPPORT. I'LL EXPLAIN WHAT THAT MEANS. COMING UP AFTER THAT WE'LL HAVE A MAJOR RELEASE EVERY YEAR. EVERY OTHER YEAR IT'S GOING TO BE LTS.

YOU CAN THINK OF IT LIKE A SECOND TRAIN. ALONG THAT SECOND TRAIN TRACK, WE HAVE LTS VERSIONS. ONE OF THE REASONS THIS VISUALIZATION IS KIND OF IMPORTANT IS THAT IT'S HARD TO JUMP ACROSS THE TRACK IN BETWEEN. SO FOR EXAMPLE, IF YOU'RE ON .NET 5.0 AND YOU WANT TO GET BACK TO 3.1 BECAUSE YOU WANT TO JUMP ACROSS, YOU HAVE TO GO BACK TO 3.1. SO YOUR BEST BET IS TO PICK ONE OF THE TRACKS AND THEN BE ABLE TO COMMIT TO IT. THAT'S THE BEST WAY TO GO ABOUT IT. SO LET'S TALK ABOUT THE SPECIFICS SUPPORT POLICY AND HERE'S A LINK TO IT.

IT'S — YOU CAN GO READ IT. AND EVERYTHING HERE IS A VISUALIZATION OF THAT. IT'S TRUE, THIS IS MY PICTURE. SO FIRST OF ALL, WHAT DOES LTS LOOK LIKE? THE CURRENT LTS TODAY IS 2.1. WE HAVE ANNOUNCED A SPECIAL DATE FOR IT. WHICH IS AUGUST 21st OF — IT WAS RELEASED 2018 SO IT WILL GO OUT OF SUPPORT AUGUST 21st I THINK THAT MAY BE — MAYBE A TYPO ON THIS SLIDE. 2021. >> YEAH. IT DEPENDS ON WHEN WE SHIP 3.1 BUT I GUESS THAT WILL BE THE DATE ACTUALLY. YES. >> IT'S A SPECIAL DATE FOR THAT ONE BECAUSE IT WAS — WE WERE SETTLING ON A FINAL POLICY. IT HAD BEEN DISCUSSED FOR A WHILE BEFORE THAT. BUT THAT'S WHY WE COMMITTED TO THE POLICY SO THERE'S A SPECIAL DATE ON THAT ONE. ALL OF THESE ARE MINIMUMS. WE COULD EXTEND SUPPORT FURTHER.

IT HASN'T BEEN OUR PATTERN SO I DON'T THINK YOU WANT TO COUNT ON ANY OF THESE EXTENDING BEYOND THESE DATES. MIGHT HAPPEN. SO 3.1. IT'S THREE YEARS FROM THE DATE OF RELEASE. ACTUALLY THREE YEARS FROM THE DATE OF THE RELEASE AND UNLESS WE RUN LATE ON THE NEXT RELEASE THEN WE EXPECT TO GO A YEAR PAST THAT. BUT THE EASIEST WAY TO THINK ABOUT IT IS THREE YEARS. THAT'S THE EASIEST WAY TO THINK ABOUT IT. SO WHAT'S THE CURRENT THEN? THAT'S WHAT LTS DOES. CURRENT TRACK IS 2.2. IT WILL DO OUT OF SUPPORT ON DECEMBER 23rd OF THIS YEAR. THEN 3.0 WHICH IS RELEASING TODAY WILL GO OUT THREE MONTHS AFTER 3.1 SHIPS. GO OUT OF SUPPORT, SORRY. YES. GO OUT OF SUPPORT. THREE MONTHS AFTER 3.1 SHIPS. WE DON'T KNOW EXACTLY WHAT THE PATTERN WILL BE AROUND 5.0 AND WE DON'T ANTICIPATE POINT RELEASES IN THE 3.1 TIME FRAME.

WE DON'T REALLY EXPECT — >> MEANING 3. 2. >> EXACTLY. >> THERE'S NO PLANS FOR 3.2 OR 3.3. WE COULD SEE A 5.1 OR 5.2 BUT WE DON'T KNOW YET. YOU CAN SEE THE SUPPORT IS SIGNIFICANTLY SMALLER. THIS IS NOT TO SCALE. THE STUFF ON THE LEFT IS A BIT MORE SPREAD OUT THAN THE STUFF ON THE RIGHT. >> YEAH. SO THE THING I'D LIKE TO ADD ON THIS IS IF WE LOOK AT SAY 3.0 TO 3.1 IN PARTICULAR THE LEVEL OF KIND OF MIGRATION COSTS BETWEEN THOSE SHOULD BE EXTREMELY LOW. >> ABSOLUTELY. >> SO, YOU KNOW, IN TERMS OF LIKE — THE THING I WOULD BE DOING IF I WAS TRYING TO INTERPRET THIS, LIKE IF I HAD A TEAM BUILDING AN APPLICATION I WOULD JUST ALWAYS STAY ON TIP. STAY ON THE LATEST VERSION. AND THEN MY TEAM WOULD GET ALL OF THE BENEFIT OF ALL OF THE LATEST FEATURES. I KNOW THAT THE MICROSOFT TEAM IS TRYING TO MAKE THOSE AS COMPATIBLE AS POSSIBLE AND, YOU KNOW, PROBABLY MY SERVER COSTS ARE GOING TO BE LOWER THAN SOMEONE ELSE'S WHO DOESN'T STAY ON 2.

UP. >> YEAH, THIS IS TRUE. NOT ONLY ARE YOU GOING TO BE GETTING THE NEW FUTURES SO — YOU WOULD GET THAT IF YOU'RE ON 3.0 RIGHT NOW. IF YOU'RE IN THE LTS 2.1 YOU DON'T GET THE SIX STREAMS ALL THE GREAT STUFF YOU ARE HEARING ABOUT. YOU DON'T GET F#, ALL THE GREAT STUFF YOU DON'T GET THAT. >> ALL THE NEW DOCKER LIMIT SUPPORT THAT WE ADDED. >> THAT'S RIGHT. >> IN 3.0 OR LIKE THE MUCH SMALLER SDK IN 3.0. >> RIGHT. PERFORMANCE. SO THERE'S A LOT OF REASONS TO STAY ON THE TIP. HOWEVER, WE FEEL LIKE IT'S IMPORTANT FOR IT TO BE YOUR CHOICE. >> ABSOLUTELY. >> NOT OUR CHOICE. SO THIS IS WHY WE OFFER THIS ALTERNATIVE COMMITMENT THAT OCCASIONALLY ONCE EVERY COUPLE OF YEARS WHEN WE SAY WE'LL SUPPORT IT LONGER, SO IF SWITCHING VERSIONS IS A PROBLEM FOR AN INDIVIDUAL PROJECT, THIS IS AT AN COMPANY WIDE DECISION, IF THAT'S THE RIGHT THING TO DO GO FOR IT.

WE'RE RUNNING BEHIND SO WE HAVE TO KICK IT UP BIT. ONE MORE THING IS THE .NET FRAMEWORK. IT KEEPS GOING. SO LET'S — WE ARE GOING TO KICK IT UP BECAUSE I REALIZE WE ARE RUNNING A BIT SHORT ON TIME. >> WE'RE TALKING TOO MUCH. >> I'M TALKING TOO MUCH TOO. ONE OF THE THINGS YOU'RE MANAGING YOUR OPEN SECURITY UPDATES FOR .NET CORE AND IN FRAMEWORK, PART OF THE WINDOWS UPDATES. WE WON'T GO DEEP INTO THIS. THE REASON IT'S ON YOU DEPLOYING YOU HAD TO MAKE SURE IT WAS THE RIGHT .NET FRAMEWORK ON THAT MACHINE YOU WERE DEPLOYING OUT TO, BUT YOU HAD TO DO THAT. MAKE SURE IT'S THERE AND WON'T BE THERE FROM WINDOWS. >> WINDOWS UPDATE. >> IT'S NOT PART OF WINDOWS AND THERE'S GOOD REASONS FOR THAT.

SO WE CAN CHANGE IT AND MOVE IT FORWARD. THIRD PARTY — HOW DO WE ASK TODAY? WE GO TO SEARCH ENGINE. THIRD PARTIES MOSTLY HAVE A STATEMENT. NOW LET'S PREPARE. SO PREPARING TO .NET CORE IS GOING TO HAVE A COUPLE OF STEPS. WE'LL WALK THROUGH THESE AGAIN. THE FIRST ONE THOUGH YOU WANT TO MOVE TO THE RECENT VERSION. IF YOU'RE BACK ON 4.5 OR ANY PROBLEMS YOU HAVE MOVING FORWARD SETTLE THAT FIRST. >> RIGHT. THERE WERE A FEW POINTS WHERE WE HAD MADE SIGNIFICANT CHANGES. YOU NEED TO KIND OF MAKE SURE YOU HAVE GOTTEN THROUGH ALL OF THOSE. THOSE WAVES OF CHANGES BECAUSE LIKE 4.72 AND LATER ARE THE MOST SIMILAR TO .NET CORE.

SO THAT'S WHY IT'S VALUABLE TO VALIDATE THAT YOUR APP RUNS SUCCESSFULLY ON 7.2 OR 4.8. >> YOU WANT TO KNOW HOW YOU VALIDATE SUCCESS. TEST COVERAGE IS ONE GREAT METRIC HERE. WE EXPECT IT TO GET BETTER. BUT CHECKING ON THAT IS ALWAYS A GOOD IDEA. >> BACK TO THE STORIES I TOLD EARLIER. THOSE DEVELOPERS THAT I TALKED TO, THEY HAD PERFORMANCE TESTS WHICH THEY RAN ON THE OLD STUFF AND THE NEW STUFF. THEN THEY — YOU KNOW, THEN THEY DID BASIC ARITHMETIC TO FIND OUT WHICH ONE IS FASTER. IF YOU DON'T HAVE THOSE THINGS YOU'RE A FINGER IN THE WIND TYPE OF SET-UP WHICH IS NOT THE SCIENCE.

>> SO EVALUATING ARCHITECTUR CHANGES. I THINK THE SLIDE TO COME BACK TO IT, THIS IS DEEP CONSIDERATION ON YOUR PART. WE'RE THROWING THIS OUT THERE AND THEN YOU CAN SAY, YEAH, I WANT TO SPEND MORE TIME ON THAT TOPIC. FIRST OF ALL, IF YOU HAVE A LIBRARY THAT CAN TARGET .NET STANDARD 2.0, THAT'S WHAT'S SUPPORTED ON .NET FRAMEWORK. YOU WANT TO LIMIT THE CHANGES DURING THE PORT. OH, I'M GOING TO CHANGE A BUNCH OF STUFF AND PORT AT THE SAME TIME REALLY THE WHOLE EFFORT IS GOING TO BE CRAZY. IT'S GOING TO BE HARD. >> THEN IT WON'T BE OBVIOUS TO EVERYONE WHY THIS — WHY THE BUILD IS BREAKING. IT IS BECAUSE OF MY MIGRATION OR BECAUSE I ACTUALLY MADE SOME BAD PLANS? JUST CAN BE A MESS.

>> BEFORE YOU MOVE, YOU MIGHT WANT TO LOOK AT A COUPLE OF THINGS. ONE OF THOSE IS THE ISOLATION OF CONCERN. IF YOU'RE USING WCF, BUT IT'S SPREAD ALL OVER THE APPLICATION STAKE BY TAKING ALL THAT INTO ONE LIBRARY SO YOU CAN REPLACE IT IN ONE PLACE THAT'S WHAT WE MEAN BY ISOLATION AND CONCERNS. THERE'S A .NET PORTABILITY ANALYZER.

AND I'M GOING TO WALK THROUGH THIS JUST REAL QUICKLY. IT'S A VISUAL STUDIO DOWNLOAD YOU CAN GET AT THAT LINK. IT'S AN EXTENSION TO VISUAL STUDIO AND AFTER YOU RUN IT, YOU GET A SPREADSHEET. I'M GOING TO START WITH THE PORTABILITY SUMMARY. I DID TWO. THESE ARE BOTH JUST STANDARD .NET FRAMEWORK APPLICATIONS FOR WINFORMS AND A WEB — LET'S LOOK AT THE DIFFERENCE. 34% THAT SAYS WE'RE IN TROUBLE. ASP YOU DON'T DO A STRAIGHT PORT ON IT. YOU CAN SEE THAT NUMBER. IF YOU LOOK AT — IF YOU LOOK AT WINFORMS, YOU SEE 77. — 77% WHICH IS STILL A LITTLE BIT LOW BUT YOU CAN IMMEDIATELY GO AND FIND OUT WHAT YOU'VE GOT AND I THINK THAT I JUST DON'T HAVE THE RIGHT SDK HERE.

THAT THERE'S SOME — THE WORK THAT I CAN DO THAT'S GOING TO MOVE THAT OVER, THE WAY THAT YOU DEFINE WINDOWS FORMS ITSELF CHANGES THE WAY THAT THE PROJECT FILE LOOKS BETWEEN FRAMEWORK AND CORE. I THINK THAT'S WHAT CAUSES THIS. >> YOU CAN SEE ALMOST ALL OF THAT STUFF IS SUPPORTED — YEAH. ALL OF THAT IS SUPPORTED SO THIS ONE WAS PRETTY CLOSE TO 100%. >> IT WOULD HAVE BEEN EXCEPT THAT WE CHANGE FROM THE DEPENDENCY TO THE SDK AND THAT CAUSED — >> I SEE. >> SO I'M SHOWING YOU THIS BECAUSE YOU MIGHT TRIP A LITTLE BIT. DON'T PANIC AND THINK YOU WON'T BE ABLE TO MOVE WINFORMS. BUT THE WAY WE DEFINE IT ISN'T — THIS TOOL DOESN'T HANDLE IT VERY WELL. ALL RIGHT. SO PORTABILITY ANALYZER. ALL RIGHT. SO WE DID A LITTLE DEMO OF THAT. AND GOING BACK TO PORTING YOUR APP WHEN YOU ACTUALLY WANT TO DO IT.

>> THIS IS THE ACTIVE PHASE. >> WE ARE UPDATING THESE APPS TODAY. DOCS DOCS. I'M SORRY. WE ARE UPDATING THE DOCS TODAY RIGHT NOW THERE'S A PR. WE DON'T KNOW THE STATE OF THE PR AT THE MOMENT. >> BUT WITHIN THE NEXT 24 HOURS IT SHOULD BE MERGED AND THE RIGHT CONTENT AT THAT LINK. >> RIGHT.

YOU WANT TO CHOOSE THE PROJECT SUPPORT. WE RECOMMEND YOU LOOK AT THE LEAST DEPENDENCIES AND CHANGE PROJECT FILES AND CODE DIFFERENTLY. TEST PROJECTS EARLY. IS THAT OBVIOUS? IF YOU MOVE ON WITH THEM — >> SO I DON'T THINK IT'S OBVIOUS. >> OKAY. >> SO, YEAH, THIS HELPS SHINE THE LIGHT ON WHAT THE HECK IT IS YOU'RE DOING. I THINK THIS IS GREAT ADVICE. >> ALL RIGHT. PROJECT FILES, PROJECT FILES IS GOING TO BE A BIG HEADACHE FOR YOU. I'LL TELL YOU THAT UP-FRONT. IT WILL BE A BIT OF A HEADACHE ON THIS. SO RIGHT NOW ACTUALLY THEY SHOWED SOMETHING IN THE KEYNOTE. IN PASSING, THERE WAS A TOOL AND THERE WASN'T MUCH BACKGROUND GIVEN ON THAT. WHAT I WANT TO CLARIFY, THAT'S A PROTOTYPE THAT IS REALLY GOT — IT'S GOING TO WORK IN SOME EASY CASES.

SO WE ARE TRYING TO UNDERSTAND HOW YOU PERCEIVE THAT PROCESS OF MOVING YOUR PROJECT FILE. SO WE HAVE NORMAL CHANNELS THAT YOU CAN GIVE US FEEDBACK ON THAT WHICH IS THE UPPER RIGHT GIVE FEEDBACK AND VISUAL STUDIO OR IF YOU DON'T HAVE A GITHUB, DON'T NET GITHUB.NET/CORE. SO YOU WANT TO CREATE A NEW PROJECT FILE AND BRING IN YOUR ACTUAL FILES. THE STANDARD LIBRARIES ARE READY TO GO. WPF WINFORMS, CONSULT, CLASS LIBRARY. THESE SHOULD BE PRETTY STRAIGHTFORWARD. ASP.NET IS GOING TO BE A LITTLE BIT HARDER. YOU'LL NEED TO REPLACE CERTAIN ASPECTS OF THAT IN THE I.S.

INTEGRATION. >> YEAH. >> AND YOU'RE NOT GOING TO WANT THIS TO BE STRAIGHTFORWARD. THIS IS VASTLY IMPROVED. YOU'LL WANT TO TAKE THAT AND THEN MOVE YOUR OLD CODE INTO IT. >> I REALIZE THAT WE HAVE MADE THE SLIDE — >> MESSED IT UP. >> IT SHOULDN'T SAY PLAN TO REPLACE THE I.S. INTEGRATION — >> RIGHT. ONLY WHEN YOU'RE COUNTING ON THE FEATURES THEN THEY'RE DIFFERENT. YOU'RE STILL GOING TO USE ISS. WE HAVE ONE MORE SLIDE AND THEN TAKE QUESTIONS. WE RAN A LITTLE BIT OVER HERE. WEB FORM, LOOK AT BLAZOR AND THAT'S AN EVENT MODEL SIMILAR TO THE WAY THAT WEB FORMS IS AN EVENT MODEL.

IF YOU GO TO BLAZOR, IT WILL BE EASIER TO TAKE YOUR IDEAS FORWARD. >> SHOULD WE MOVE TO QUESTIONS? >> YEAH. YEAH. >> ALL RIGHT. SO MOVING TO QUESTIONS, SO RICH I THOUGHT THIS ONE WOULD MAKE YOU SMILE. RICH LANDER ROCKS LOOKS LIKE YOU HAVE A FAN. >> WOW, THE FIRST ONE. >> LET'S SEE. LET'S LOOK AT REAL QUESTIONS NOW. OKAY. WHAT'S A GOOD ONE? IS .NET STANDARD GOING TO MOVE TO V 5 WHEN WE GET .NET 5? >> I DON'T THINK WE KNOW. >> WELL, I THINK THE FIRST ANSWER IS THAT'S UNLIKELY. BECAUSE WE HAVE A DIFFERENT NUMBERING SCHEME FOR THE TWO. SO — >> OH, DO YOU MEAN THERE'S GOING TO BE A .NET STANDARD — >> WHATEVER THE QUESTION IS. WE HAVEN'T FIGURED IT OUT GOING FORWARD. >> LET'S MOVE ON TO THE NEXT ONE FROM BILL. SO IN ADDITION TO THE RELEASES ON THE PRODUCT PLAN CAN WE EXPECT BUG FIXES AND OTHER UPDATES ON A FAIRLY FREQUENT BASIS? >> YES. >> BASICALLY MONTHLY.

>> GREAT. >> THAT'S EASY. I LIKE THAT QUESTION. >> LET'S SEE. THIS IS FROM SIMON, WHAT WOULD YOU RECOMMEND TO MOVE TO .NET CORE, CAN YOU PROVIDE A DOWNLOAD LINK FOR THE TRY CONVERT.EXE WOULD BE GREAT. >> FIRST OF ALL, IT ALL DEPENDS ON WHETHER YOU SHOULD MOVE. PART OF THAT IS — IMPROVED PERFORMANCE. A SIMPLER MODEL AND A MORE CONSISTENCY BETWEEN WEB API AND NVC. IF YOU WANT TO USE BLAZOR, YOU'LL WANT TO GO TO .NET CORE. THIS IS WHERE I TALKED ABOUT PROTOTYPE. THE TRY CONVERT APPLICATION THAT GLOBAL TOOL WHICH WAS TALKED ABOUT IN THE KEYNOTE IS NOT AVAILABLE TODAY. AND WHETHER WE PUT THAT UP FOR THE LIMITED USAGE IT WOULD BE SUCCESSFUL IN, I DON'T THINK WE HAVE DECIDED YET. THERE MAY BE — WE'LL LET PEOPLE KNOW, BUT RIGHT NOW, WHAT WE NEED TO KNOW IS IF THAT'S IMPORTANT WE WOULD LIKE TO DO IT RIGHT. AND THAT TOOL WORKS IN — WELL CONSTRAINED BOXES BUT NOT ACROSS EVERYTHING YOU'RE DOING. AND SO WE WOULD LIKE YOUR FEEDBACK ABOUT THAT PARTICULAR TOOL AND IDEA AND WHAT YOU NEED ON THAT.

ANOTHER QUESTION? >> YEAH. ANOTHER ONE FROM SHAWN. ANY MAJOR CHANGES TO .NET STANDARD OR USING THE .NET STANDARD? >> DO YOU WANT TO TAKE THAT? >> SURE. THERE'S NO REAL CHANCES SO 2.1 IS THE LATEST ONE. IF YOU WANT .NET FRAMEWORK STAY ON 2.0. >> HOW MUCH EFFORT IS REQUIRED TO MOVE AN ASP.NET TO CORE 3.0? IS IT AUTOMATIC? >> IT'S NOT AUTOMATIC. WE ACTUALLY — ME AND TWO OTHER PEOPLE PORTED THE DINE MUTT — SORRY, THE .NET MARKETING WEBSITE. IT WAS FAIRLY STRAIGHT FORWARD. >> IT IS WORK. >> THE ONLY THING THAT WE RAN INTO THAT WAS WEIRD WAS THE WAY THAT ASP.NET CORE HANDLES SOME LOCALIZATION.

BUT EVERYTHING ELSE WAS PRETTY STRAIGHTFORWARD. >> AWESOME. ANOTHER ONE. WHAT ABOUT SSRF ON THE — >> THAT STANDS FOR SQL SERVER REPORTING SERVICES. THAT WILL NOT BE SUPPORTED. >> WHAT ABOUT MOVING THE PROJECTS TO — >> THAT WILL BE SUPPORTED IN THE .NET CORE. >> THAT'S GREAT PIECE WE HAVE GOT IN THERE. WE'RE HAPPY TO DO THAT. >> OKAY. AESOME. SO NEXT WE HAVE AZURE APP CONFIGURATION MAKING CENTRALIZED CONFIGURATION STANDARD. JIMMY CAMPBELL, TAKE IT AWAY. >> I'M A DEVELOPER ON AZURE APP CONFIGURATION TEAM. I'M EXCITED TO BE HERE TODAY TO TALK ABOUT OUR SERVICE AND ALSO TO CELEBRATE .NET CORE 3.0.

I HAVE BEEN A .NET CORE DEVELOPER SINCE BETA 8 AND DEFINITELY A LOT OF CHANGE SINCE THEN. I THINK THAT AZURE APP CONFIGURATION IS A GREAT TOOL FOR .NET CORE DEVELOPER TO ADD TO THEIR ARSENAL. WHETHER IT'S MICROSERVICES OR MAYBE STICKING IN THE DEVOPS PIPELINE. WHATEVER CONFIGURATION IS ALL ACROSS THE STACK SO A CENTRALIZED CONFIGURATION SERVICE MAKES A LOT OF SENSE. SO WHAT ENDED UP HAPPENING WAS WE SAW A LOT OF PROBLEMS WITH CONFIGURATION THE WAY APPLICATIONS ARE MOVING TODAY. SOME EXAMPLES OF SOME OF THE PROBLEMS MIGHT BE HOW DO I CENTRALIZE APPLICATION — CENTRALIZE CONFIGURATION WHEN I'M RUNNING ON THE AZURE FUNCTION. I'M RUNNING ON KUBERNETESS. I'M RUNNING ON SOME DMs AND I NEED TO SHARE SETTINGS BETWEEN THEM. WELL, MAYBE SOMETHING LIKE I'M RUNNING APPS IN NORTH AMERICA AND I'M RUNNING THEM IN EUROPE.

I NEED TO SHARE SETTINGS BUT I NEED THEM SLIGHTLY NUANCED BECAUSE THE APPLICATION JUST NEEDS TO BEHAVE DIFFERENTLY IN NORTH AMERICA AND EUROPE. THE MORE ADVANCED USE CASES LIKE WHEREVER I'M GETTING MY CONFIGURATION FROM HOW DO I DYNAMICALLY UPDATE IT DURING RUN TIME. SO CONFIGURATION IS A FUNDAMENTAL PIECE AND THERE'S SOME COMMON PROBLEMS. WE SAW PEOPLE TRYING TO DEVELOP THEIR OWN SOLUTIONS. THAT COMES WITH THE COST. WE SAW THINGS LIKE PEOPLE TRY TO USE THINGS THAT WEREN'T NECESSARILY MEANT FOR CONFIGURATION. THEN THEY WOULD EVENTUALLY GET TO THE POINT WHERE THEY GOT STUCK BECAUSE THE SOLUTION THEY'RE USING WASN'T DESIGNED FOR THAT. SO REALLY IT MADE SENSE TO MAKE THE SERVICE. AZURE APP CONFIGURATION WHICH IS THEN IN PREVIEW NOW SINCE APRIL. AND WE GOT ON THIS AND NOW IT EXISTS SO A CENTRALIZED CONFIGURATION SERVICE. FOR .NET CORE DEVELOPERS SPECIFICALLY WE OFFER THINGS LIKE A CONFIGURATION PROVIDER. SIMILAR TO THE JSON FILE PROVIDER. WE HAVE A CLIENT WHERE YOU CAN WRITE, READ SETTINGS. I THINK FIRST OF ALL WHAT I SHOULD DO IS GET STARTED SAYING WHAT IS AZURE APP CONFIGURATION, WHAT HAPPENS WHEN I CREATE IT, WHAT DO I ACTUALLY GET WHEN I START USING IT SO WE'LL KIND OF GET STARTED RIGHT NOW.

SO I'LL GO INTO MY COMMAND LINE AND GET STARTED WITH AZURE APP CONFIGURATION FROM THE CLI. .NET CORE HAS A PRETTY GOOD CLI AND WE'RE ALL GOOD DEVELOPERS SO WE CAN ENJOY THE AUTOMATION OPPORTUNITIES THAT COME WITH THE CLI. SO I'M USING THE AZURE CLI AS DENOTED BY AZ AND THEN APP CONFIG IS THE GROUP. THEN I'LL CREATE AN AZURE CONFIGURATION DEMO. THE RESOURCE GROUP IS JIMMY CA CONFIG. A LOCATION OF CENTRAL U.S. SO WHAT AM I GETTING WHEN I CREATE AZURE APP CONFIGURATION? IT'S AN AZURE RESOURCE. I'M GOING TO GET A PLACE I CAN STORE SETTINGS.

SETTINGS ARE STORED AS KEY VALUE PAIRS. SO YOU MAY HAVE A MESSAGE WHICH IS HELLO WORLD. OR SOMETHING LIKE THAT. JUST A SIMPLE KEY VALUE. THAT'S REALLY WHAT WE STORE THE FOUNDATION. WE DO OFFER METADATA ON TOP OF THAT. YOU'RE STORING THE SETTINGS AND THEY'RE AVAILABLE THROUGH A WEB END POINT SO IF YOU LOOK ON THE CONFIGURE — @CONFIGURATION, THAT END POINT IS — SO NOW I HAVE A REST API LISTENING ON THIS END POINT WHERE I CAN CREATE IN THE CENTRAL MANNER. THE DEVOPS, ANYTHING THAT REALLY SPEAKS OF THE API CAN READ FROM THIS APP CONFIGURATION INSTANCE. OF COURSE THE CLI IS ONE OF THE THINGS THAT CAN DO THIS.

WE CAN GO AHEAD AND CREATE THE FIRST SETTING HERE. NOW THAT I JUST BOOTED THIS UP. EASY @CONFIG, KV FOR KEY VALUE. SET. I WANT TO SET A KEY VALUE. SO THE NAME OF MY STORE IS .NET CONF DEMO. I HAVE A COLOR, AND A VALUE OF BLUE. ALL RIGHT. SO NOW WE USE THE CLI AZURE CLI TO CREATE AN APP CONFIGURATION INSTANCE AND CREATE OUR FIRST SETTING. ALL RIGHT. THIS KIND OF SHOWS SOME OF THE AUTOMATION WITH THE SERVICE. SO YOU CAN RUN THESE THINGS IN A SCRIPT OR WHATNOT. BUT NOW WE'LL GO INTO THE PORTAL.

AND WE CAN SHOW THE UI FOR THIS THING. WE CAN KIND OF GET THE BEST OF BOTH WORLDS. SO I WANT TO GO INTO THE PORTAL HERE. I'M GOING TO REFRESH THE PAGE. I'M GOING TO SEE THIS .NET — NOW EVERYTHING I HAD DONE IN THE CLI CAN BE DONE THROUGH THE PORTAL. ALSO THE THINGS THAT I DO IN THE PORTAL CAN BE DONE THROUGH THE CLI. WE LOOK FOR FUTURE PARITY ACROSS BOTH.

IF I WANTED TO CREATE MY APP CONFIGURATION THROUGH THE PORTAL I CAN CREATE IT THROUGH CONFIGURATION EXPLORER. COLOR, THEN BLUE. SIMPLE KEY VALUE PAIR TO REPRESENT A SETTING. THEN WE SEE SOME METADATA ON TOP OF IT. LAST MODIFIED. THE ONE I ACTUALLY DO WANT TO MENTION BEFORE WE GET TOO DEEP HERE IS LABEL. SO KEY VALUE ARE DEFINITELY IMPORTANT BECAUSE YOU NEED THOSE TO HAVE A SETTING. BUT LABEL IS SOMETHING IMPORTANT TO OUR SERVICE BECAUSE IT CAN BE USED WHEN YOU'RE QUERYING SETTINGS. FOR EXAMPLE, I MAY HAVE AN APPLICATION THAT RUNS A PREMIUM AND A STANDARD SKU.

I MIGHT WANT THE COLOR TO BE GREEN AND STANDARD. I MIGHT WANT IT TO BE RED AND PREMIUM OR SOMETHING LIKE THAT. SO I CAN KIND OF MODEL THIS WITH LABEL. IT'S NOT JUST A METADATA. NOT JUST LIKE A TAG THAT WHEN YOU GET IT. IT IS ACTUALLY USED IN QUERIES. YOU CAN SAY, GIVE ME ALL THE SETTINGS FOR THE STANDARD LABEL. OR GIVE ME ALL THE SETTINGS FOR THE PREMIUM LABEL. THIS IS WHAT I TALKED ABOUT BEFORE WHERE I HAVE NUANCED CONFIGURATION WHERE I WAS EUROPE AND LABEL IS SOMETHING IMPORTANT FOR OUR SERVICE. SO NOW WE HAVE THE ABILITY TO CREATE SETTINGS. WE KNOW WHAT IT KIND OF MEANS TO HAVE THE APP CONFIGURATION INSTANCE. HOW I CAN CREATE SETTINGS FOR IT.

I WANT TO GO A LITTLE BIT FURTHER INTO THE PORTAL HERE BEFORE WE LEAVE IT. JUST TO KIND OF GET THE COVERAGE. WE SEE SOME OTHER THINGS DOWN HERE IN OPERATIONS SUCH AS FEATURE MANAGER. FEATURE MANAGER IS A VALUE ON TOP OF JUST SIMPLE CONFIGURATION. CAN PROBABLY GO INTO THAT ANOTHER TIME BUT WE HAVE SOME CONFIGURATION UTILITIES DOWN HERE. WE ARE STORING CONFIGURATION. WE'RE A CONFIGURATION SERVICE SO IT MAKES SENSE FOR US TO HAVE UTILITIES. LIKE FOR EXAMPLE, I NEED TO RESTORE MY CONFIGURATION TO WHAT IT WAS YESTERDAY. BECAUSE IT WORKED YESTERDAY BUT DOESN'T WORK NOW. YOU CAN DO THAT THROUGH THE RESTORE TAB. SO YOU CAN SELECT A DAY OF WHAT MY — WHAT I WANT MY CONFIGURATION TO LOOK LIKE. FOR EXAMPLE, ON SEPTEMBER 11th I DIDN'T HAVE ANY KEYS SO IT'S SAYING DO YOU WANT TO DELETE THESE KEYS? I CAN COMPARE SETTINGS. I CAN COMPARE APP CONFIGURATION STORES. COMPARE ACROSS LABELS. I WANT TO COMPARE THESE THINGS. I CAN SEE RED AND GREEN. I CAN ALSO DO END IMPORT AND EXPORT. IMPORT AND EXPORT IS MY FAVORITE THING BECAUSE YOU PROBABLY HAVE APPS .JSON AND WE SUPPORT THE ABILITY TO COME IN FROM THE CONFIGURATION FILE, IMPORT SETTINGS.

AND THIS CAN BE DONE THROUGH THE CLI. THAT'S THE FEATURE PARITY I TALKED ABOUT. ALL RIGHT. SO THAT IS KIND OF THE BACKGROUND FOR APP CONFIGURATION, THE PORTALS. CLI, INTERACTING WITH IT. NOW THAT WE KNOW HOW THE SETTINGS ARE REPRESENTED AND HOW WE CAN KIND OF GET STARTED, IT MAKES SENSE TO MOVE INTO A .NET CORE APP THAT'S UTILIZING THIS. AND SO BEFORE I DO THAT, LET ME GO AHEAD AND GO TO ANOTHER APP — MOVE TO ANOTHER APP CONFIGURATION THAT I ALREADY ALLOCATED. THIS ONE DOESN'T HAVE ANY SETTINGS YET, BUT I'M GOING TO SHOW THE IMPORT I TALKED ABOUT FROM A CONFIGURATION FILE. I'M GOING TO IMPORT SOME SETTINGS. @CONFIG WEB DEMO.JSON. I'LL SHOW THAT FILE. IT'S JUST LIKE AROUND APP SETTINGS JSON FILE IF YOU L. I IMPORTED IT INTO THE CONFIGURATION STORE AND THEN I HAVE THE SETTINGS HERE. THEY START WITH WEB DEMO COLON. THAT'S KIND OF A PREFIXING PRACTICE I MAY HAVE MULTIPLE APPS CONFIGURATION SETS STORED AND ONE WAY TO SEPARATE THEM IS BY NAME SPACING THEM.

SO ALL OF THEM ARE FROM THE WEB DEVELOPMENT APP. AND NOW, I HAVE THE SETTINGS HERE. I CAN START CONSUMING THEM AND LET'S MOVE INTO THE ASP.NET CORE APPLICATION I HAVE. THIS IS THE ASP.NET RAZOR PAGES APPLICATION. IT'S DOING VERY LITTLE — ACTUALLY, THE MAIN PART TO GET OUT OF THIS APP IS THAT IT'S PULLING THE CONFIGURATION AND THE WAY WE'RE DOING THAT IS WE'RE BINDING OUR CONFIGURATION TO A MODEL CALLED SETTINGS. AND YOU CAN SEE THERE'S KIND OF A ONE TO ONE MAP IN HERE. REFRESH RATE, LANGUAGES. THESE ALL MAP TO SETTINGS HERE. AND FOR BINDING TO THEM THAT MODEL WE'RE USING THE PROBLEMS IN THE RAZOR VIEW. WE HAVE A ONE PAGE APP AND JUST USING THE SETTINGS TO SHOW WHAT WE'RE SEEING ON THE WEB PAGE. THE VERY SIMPLE WAY TO DEMO THE CONFIGURATION. NOW THE TYPICAL PRACTICE AND .NET CORE FOR CONFIGURATION IS TO USE A CONFIGURATION PROVIDER. .NET CORE COMES WITH A FEW VERY COMMON ONES LIKE JSON FILE CONFIGURATION PROVIDER. COMMAND LINE. ET CETERA. WE OFFER A CONFIGURATION PROVIDER.

IT'S THE AZURE APP CONFIGURATION PROVIDER. SO THAT IS WHAT'S DOING TO BE SHOWING RIGHT NOW ON THE PROGRAM, CS. ON TOP OF THE ONE — ON TOP OF THE ENVIRONMENT VARIABLE AND JSON FILE PROVIDERS THAT COME BY DEFAULT AND DEFAULT BUILDER I'M WIRING UP AZURE APP CONFIGURATION. SO THIS API AND AZURE APP CONFIGURATION IS EXPOSED BY THE NUGET PACKAGE RIGHT HERE. MICROSOFT.AZURE.APP CONFIGURATION SO I NEEDED TO ADD THIS. SO I CAN GO AHEAD AND START USING THIS API.

OKAY. SO I GO IN, I CALL ADD AZURE APP CONFIGURATION. THEN I NEED TO DO A LITTLE BIT OF CONFIGURING TO PULL THE SETTINGS FROM MY APP CONFIGURATION INSTANCE. THE MOST IMPORTANT THING I NEED TO CONNECT. NOW, WHAT I'M DOING RIGHT HERE IS CALLED CONNECT WITH MANAGE DIVINITY. THIS IS RUNNING APPLICATIONS THAT SUPPORT MANAGE IDENTITY. THESE IDENTITIES CAN BE ASSIGNED TO THE AZURE PLATFORMS. IN THIS CASE I'M RUNNING APP SERVICE SO I ASSIGNED AN IDENTITY TO MY APP SERVICE. I GRANTED THAT IDENTIFY — IDENTITY ACCESS TO MY APP CONFIGURATION INSTANCE. SO I CAN GO INTO MY APP CONFIGURATION INSTANCE AND I CAN LOOK AT THE ROLE ASSIGNMENTS. OH, I GRANTED ACCESS TO THE APP SERVICE. SO USING THIS FLOW ALLOWS ME TO SHORT CIRCUIT THE OTHER WAY OF CONNECTING. I CAN SHORT CIRCUIT FROM STREAM BASICALLY AND I CAN TAKE — I CAN RUN THROUGH THE APP SERVICE OUT THERE. BUT IF YOU DON'T WANT TO DO THAT THAT'S PERFECTLY FINE. YOU CAN JUST USE CONNECT AND YOU PASS THE CONNECTION STREAM. CONNECTION STREAM COMES FROM — YOU CAN SEE IT LISTED THERE.

AL THEN PROVIDE IT IN THE BOOT STRAPPER APP. I CAN UTILIZE IT THIS WAY OF CONNECTING. ONE OF THE GREAT THINGS ABOUT THIS I DON'T NEED ANY CONFIGURATION TO BOO STRAP MY CONFIGURATION. BECAUSE AS YOU CAN SEE, I'M NOT USING A CONNECTION STRING. I'M SPECIFIES THE END POINT OF THE CONFIGURATION INSTANCE. MOVING ON TO SOME OTHER OPTIONS USED IN THIS. WE HAVE A LITTLE BIT OF FILTERING HERE. THIS USE — THIS IS JUST SPECIFYING A KEY FILTER. I KIND OF WANTED TO SEGMENT MY APPLICATIONS.

AND IN THIS CASE I HAVE THEM ALL NAME SPACED BY WEB DEMO COLON. ALL RIGHT. SO I'M SELECTING ONLY THOSE. THEN FINALLY WE HAVE THIS CONFIGUREE REFRESH. THIS GOES BACK TO WHAT WE TALKED ABOUT BEFORE, A NOTION OF WANTING TO DYNAMICALLY UPDATE DURING THE RUN TIME BECAUSE SOME DEPEND ON THIS BEHAVIOR. SO BEFORE I GO INTO CONFIGURE REFRESH I WANT TO TALK ABOUT WHERE THE REFRESH IS TRIGGERED. SO I'M GOING TO GO INTO — START-UPS, YES. WE SEE THIS USE AZURE APP CONFIGURATION. THIS IS THE ONLY OTHER PLACE WHERE AZURE APP CONFIGURATION CODE IS FOUND IN THE APPLICATION.

WHAT THIS DOES IS IT WIRES UP INSIDE OF YOUR ASP.NET CORE APP TO TRIGGER A REFRESH. IF YOU'RE USING THE TRIGGER REFRESHER PROVIDER, NOW WHICH SWITCHED TO A MIDDLE MODEL. THE REASON FOR THIS WHEN YOU'RE PULLING FOR CONFIGURATION ESPECIALLY IN A MICROSERVICE WORLD, YOU END UP USING A LITTLE BIT OF UNNECESSARY RESOURCES IF YOU'RE DOING THAT CONTINOUSLY. EVEN IF THE APPLICATION IS DORMANT. WE CAN BE SMART ABOUT WHEN WE WANT TO REFRESH THE CONFIGURATION.

IF YOU HAVE TEN APPS MAYBE NOT ALL ARE GETTING REQUESTS. YOU'RE LOAD BALANCING ONLY THE ONES GETTING REQUESTS NEED TO BE TRIGGERING THE REFRESHERS. SO THAT'S THAT THIS DOES RIGHT HERE. REQUEST BASED REFRESHERS. NOW WE CAN GO BACK TO WHERE WE'RE CONFIGURING THE REFRESH. WE KNOW THAT REFRESHERS ARE BEING TRIGGERED BUT WHAT DOES IT MEAN TO TRIGGER A REFRESH? THAT'S WHAT WE'RE TRIGGERING RIGHT HERE. ESSENTIALLY WHAT WE'RE SAY IS WHAT DO WE WANT TO KEEP UP TO DATE? REFRESH EVERY SETTING OR ONE OR TWO THAT'S REALLY IMPORTANT. AND THAT'S WHAT'S CONFIGURED RIGHT HERE. IN THIS CASE, I'M WATCHING THE WEB DEMO SENTINEL. I'M SPECIFYING REFRESH ALL. WHICH MEANS WHEN THAT SETTING CHANGES WHEN I NOTICE A CHANGE IN THAT SETTING I WANT TO REFRESH MY ENTIRE CONFIGURATION JUST LIKE I DID WHEN THE APPLICATION STARTED UP.

I WANT TO GET EVERYTHING AGAIN. THAT'S WHAT'S HAPPENING RIGHT HERE. SO WITH THAT, THAT'S THE FULL SET-UP OF APP CONFIGURATION AND THE .NET CORE APP. NOW I CAN SEE IT IN ACTION SO I HAVE THIS APPLICATION RIGHT HERE, IT'S BLANK RIGHT NOW BECAUSE I DIDN'T HAVE ANY SETTINGS BEFORE BUT I UPLOADED SOME JSON SETTINGS. I HAVE SOME CONFIGURATION FROM — FROM SETTINGS. SOME DATA THAT CAME FROM THE SETTINGS. THAT CAME FROM THE AZURE APP CONFIGURATION. THIS CAME BECAUSE I UPLOADED THE JSON FILE BUT TO GIVE A BETTER VIEW OF THAT, IF WE CAN GO IN AND EDIT SOME MORE THINGS RIGHT NOW. LET ME SHOW THE VALUES FOR THESE LET'S CHANGE THE BACKGROUND COLOR TO GREEN. MAYBE INCREASE THE FONT SIZE. KIND OF DO WHAT WE CAN DO TO MAKE THE CHANGES APPARENT. ALSO MAKE BETTER MESSAGE. ALL RIGHT. NOW WHAT HAPPENS IF I REFRESH THE APPLICATION NOW, NOTHING IS GOING TO CHANGE.

BECAUSE WE'RE ONLY WATCHING THAT SENTINEL VALUE. BUT AS SOON AS I UPDATE THE SENTINEL VALUE I JUST NEED TO CHANGE IT. IT DOESN'T MATTER WHAT I CHANGE IT TO. THE APPLICATION CAN START PICKING UP THE CHANGES TO ALL OF THE SETTINGS THAT I UPDATED SO WE'LL START SEEING THE CHANGE TO THE GREEN COLOR. HIGH .NET CONF, BIGGER FONT. THIS SHOWS THE UPDATING OF THE SETTINGS DURING THE RUN TIME IN THE APPLICATION. SO TO GET STARTED ALL YOU REALLY NEED TO DO, PULL IN THE NUGET PACKAGE. MICROSOFT AZURE, THE APP CONFIGURATION, THAT'S IF YOU WANT TO BUILD THE ASP.NET CORE APP.

IN YOU'RE BUILDING A CORE NETAPP, WE HAVE ANOTHER PACKAGE THAT USES THAT COMMON CONFIGURATION PROVIDER NAME SPACE. THAT DOESN'T PULL ANY ASP STUFF INTO IT. IF YOU'RE HOSTING A SERVICE, IT MAKES SENSE TO USE THAT. IT WILL GIVE YOU THE ABILITY TO DO REFRESHES. IT DOESN'T GIVE YOU THE REFRESH MIDDLEWARE BUT YOU CAN REFRESH THE CONFIGURATION YOURSELF ON DEMAND. ALL RIGHT. SO THAT'S THE .NET CORE SCENE BUT FOR .NET CORE DEVELOPER JUST DEVELOPING APPLICATIONS ISN'T THE WHOLE PICTURE.

THERE IS ALSO YOU NEED TO BUILD AND BE ABLE TO RELEASE YOUR APPLICATIONS. SO WE HAVE BEEN SEEING A LOT OF MENTION OF AZURE DEVOPS FOR THIS — FOR THESE KIND OF NEEDS. WE ACTUALLY HAVE A DEVOPS BUILD AND RELEASE TASK. IT IS ON THE DEVOPS MARKETPLACE. YOU CAN GO LOOK FOR AZURE APP CONFIGURATION. YOU CAN ADD IT TO YOUR ORGANIZATION OR PROJECT AND START USING IT. AND WHAT THIS DOES IS IT UTILIZES ALL THE SETTINGS WE PUT IN AND INJECTS THEM AS VARIABLES INTO THE BUILD, INTO OUR RELEASE. SO I CAN ACTUALLY GO AHEAD AND CREATE A NEW BUILD PIPELINE TO KIND OF SHOW OFF USING THIS. SO CREATE A NEW BUILD PIPELINE HERE. DELETE ALL THE STEPS. JUST TO ADD IN AZURE APP CONFIGURATION. SUBSCRIPTION. MY CONFIGURATION INCIDENCE NAME. SO NOW WITH THIS TASK, EVERY SETTING THAT'S PRESENT IN HERE WILL BE AVAILABLE TO MY BUILD PIPELINE.

AND IF I USE IT IN OTHER BUILDS IT WILL BE AVAILABLE IN THE BUILD PIPELINES SO I CAN SHARE MY BUILDS VERY EASILY IF I'M CENTRALIZING THEM IN THE APP CONFIGURATION AND PUT THE APP SETTINGS THERE. SO KIND OF MAKES IT EASY TO MANAGE IT IN ONE PLACE. AND HAVE ONE INTERFACE THAT YOU'RE WORKING WITH FOR SETTINGS. ONE SET OF POOLS. ONE FORM OF AUTOMATION. AND NOW TO DEMO THIS I WILL ADD IN A POWER SHOW TASK HERE. I'M GOING TO ECHO A SETTIN FROM AZURE APP CONFIGURATION. MESSAGE. I DON'T HAVE THAT YET BUT I CAN CREATE IT. MESSAGE, HELLO DEVOPS. COOL. NOW WHEN I RUN — WHEN I SAVE AND RUN THIS BUILD, I DON'T WANT TO COMMIT TO MASTER.

BUT I'LL SAVE AND RUN THIS BUILD. THEN WHAT WE'LL SEE IS IT'S GOING TO PULL THE SETTINGS AND PUT THEM IN AS BUILD VARIABLES. SAY HELLO DEVOPS AND WE'LL KIND OF HAVE THAT. LIKE I SAID, WHAT THIS ALLOWS US IS WE CAN EASILY HAVE ONE INTERFACE FOR MANAGING THE SETTINGS FOR THE APPLICATIONS WE HAVE A BUILDING. WE CAN SHARE THE SETTINGS, JUST MAKE SURE TO BUILD THEM IN THROUGH THE ONE BUILD TASK AND KIND OF KEEP WITH THE SEMANTICS ON HOW TO ADD WITH THE LABEL. THINGS OF THAT NATURE. I EVEN WANT TO GO A LITTLE BIT DEEPER INTO THE DEVOPS INTEROPERABILITY WITH THAT CONFIGURATION. I MEAN, CONFIGURATION IS REALLY ALL ACROSS THE STACK. SO APPLICATIONS USING INTEGRATION, DEVOPS IS USING IT. THERE'S EVEN MORE ROOM TO TALK ABOUT IT HERE BECAUSE AZURE DEVOPS IS VERY EASY TO INTERACT WITH THE AZURE CLI. YOU CAN SPIN UP TO AZURE, CLI AND LINE SCRIPT TO START DOING SOMETHING. SO THIS KIND OF TIES IN TO A SCENARIO WHERE YOU MAY HAVE AN APPLICATION AND YOU CAN'T AFFORD TO PULL SETTINGS AT THE RUN TIME OF YOUR APPLICATION.

YOU CAN'T MAKE AN HP REQUEST AND IF YOU WANT TO USE AZURE APP CONFIGURATION IT IS PERFECTLY REASONABLE TO HAVE THE SETTINGS PULLED AT BUILD O RELEASE TIME. PACKAGE THEM IN THE JSON FILE AND DEPLOY THEM WITH THE APPLICATION. I CAN SHOW WHAT THAT MIGHT LOOK LIKE RIGHT HERE AND USING THE AZURE CLI TO TALK TO APP CONFIGURATION. SO LET'S HOOK UP AZURE CLI TASK. LET'S DO AN IN LINE SCRIPT. YOU SAW IMPORT ON THE PORTAL AND NOW LET'S DO AN EXPORT ON THE CLI. DO AN EXPORT ALL OF THE SETTINGS IN THE APP APPLICATION TO THE JSON FILE. APP CONFIG, EXPORT, TO A FILE. WE WILL GIVE THE FILINGS — APP CONFIGURATION ON JSON, A JSON FILE. THE SEPARATOR WE WANT TO USE AND FINALLY, LET ME GO AHEAD AND PUBLISH THESE ARTIFACTS SO WE CAN SEE THEM AT THE END OF THE BUILD. IT GRATES AS I — IT DEMONSTRATES AS I MENTIONED YOU WANT TO PULL SETTINGS DURING BUILD. YOU DON'T WANT TO PULL THEM DURING THE RUN TIME OF YOUR APPLICATION.

YOU WANT TO HAVE THAT VERY CONSISTENT OR JUST A REQUIREMENT FOR WHEN YOU'RE BUILDING THE APPS. SO THIS WILL TAKE JUST A SECOND FOR THE AZURE CLI TO LOG IN. THAT'S PROBABLY THE LONGEST PART OF USING THE AZURE CLI, BUT IT WILL DEVELOP THE AZURE SETTINGS JSON FILE. IF YOU WERE DOING THIS IN THE REAL SCENE YOU YOU WOULD PUT IT NEXT TO THE APP SETTINGS AND THEN BAM YOU HAVE DYNAMIC SETTINGS BUT THEY CAME FROM — DURING BUILD TIME.

SO THAT'S PRETTY MUCH ALL I HAVE RIGHT NOW FOR AZURE APP CONFIGURATION. CENTRALIZED CONFIGURATION MANAGEMENT SOLUTION, WE HAVE UTILITIES FOR MANAGING YOUR CONFIGURATION. A WAY TO SHARE YOUR CONFIGURATION ACROSS ALL KINDS OF DIFFERENT PLATFORMS. DEVOPS. DOESN'T MATTER WHERE IN THE STARK YOU ARE. AZURE APP CONFIGURATION CAN FILL IT OUT RIGHT THERE AND THEN I WANT TO SHOW THE BUILD ARTIFACTS OF THIS. I DID SAY PUBLISHER BUILD ARTIFACTS. OKAY. WELL, THERE'S SUPPOSED TO BE A JSON FILE THERE BUT I MAY HAVE TYPED SOMETHING WRONG BUT I THINK THE IDEA IS THERE. IT BASICALLY PRODUCES THE EXACT SAME FILE AS THIS. pIT WOULD BE D ARTIFACTS. I MUST HAVE MISTYPED SOMETHING BUT THAT'S IT FROM ME. >> ALL RIGHT. THIS HAS BEEN A PRETTY AMAZING — JIMMY, LOOK, I'M GOING TO TELL YOU THIS. BECAUSE I THINK IF I SAY IT WRONG I'M SORRY. I THOUGHT THIS PRESENTATION WAS GOING TO BE ABOUT APP SETTINGS.JSON AND AZURE APP IS AMAZING.

>> IT WAS ABOUT APP SETTINGS.JSON KIND OF. >> WHAT'S THE BEST WAY TO DO THE FALL BACK TO OFF LINE SETTINGS? YOU SHOWED IT IN THE DEMO. MAYBE HE'LL DEMO ABOUT THE — HOW DO YOU DO A FALL BACK? >> THERE ARE MULTIPLE DIFFERENT CONFIGURATIONS. THERE'S WHAT I JUST TALKED ABOUT ABOUT PUTTING YOUR SETTINGS THERE DURING BUILD TIME AND RELEASE TIME. SO YOU DON'T HAVE TO MAKE A QUERY DURING RUN TIME.

I JUST QUERIED THAT. LIKE I SAID I PROBABLY MISTYPED SOMETHING IN THE BUILD PIPELINE SO THERE WOULD HAVE BEEN A JSON FILE TO BE USED WITH THE APP JSON. SOMETHING THAT WE HAVE IN THE CONFIGURATION PROVIDER WHICH IS AN OFF LINE FILE CACHE. MAYBE ONE TIME WHEN YOU'RE STARTING OUT IT DOESN'T HAVE NETWORK CONNECTION USE THE OFF LINE CACHE AND IT WILL PULL THE LAST RETRIEVED SETTINGS. IT WILL PULL THEM IN CASE THERE'S NO NETWORK CONNECTIONAL. KIND OF TWO DIFFERENT APPLICATIONS FOR OFF LINE. >> THAT'S COOL. BECAUSE I THOUGHT YOU'D PULL — BUT THEN YOU HAVE A CACHE TO FALL BACK ON AS WELL. IS AZURE CONNECTED FOR CONNECTION SECRETS? >> AZURE APP CONFIGURATION IS A COMPLETELY WAY TO STORE ANY KEY VALUE.

ENCRYPTING THINGS. AUTHENTICATION. AUTHORIZATION. ALL GOOD. HOWEVER, THERE IS ANOTHER SERVICE NAMED KEY VAULT WHICH IS BETTER FOR MANAGEMENT — OR MANAGEMENT OF SECRETS. THEY HAVE THINGS LIKE IF YOU'RE MANAGING TICKETS, CONNECTION STRING THEY'LL EXPIRE CONNECTION STRING. SO THEY ARE — LIKE THE BEST PLACE TO STORE A SECRET. SO THERE'S NOTHING WRONG PER SE WITH STORING IN THE APP CONFIGURATION, BUT ULTIMATELY FOR SECRETS THAT'S EXACTLY WHAT KEY VAULT WAS DESIGNED FOR. WHEREAS WE WERE DESIGNED FOR EXTENSIVE QUERYING MECHANISMS, THINGS OF THAT NATURE. ONE OF THE THINGS WE'LL COME OUT WITH SOON IS A WAY TO LOOK AT THE KEY VAULT SECRETS AND WE'LL GO THROUGH THAT ON YOUR APP. >> THAT'S COOL BECAUSE NICK HAD THE SAME SORT OF QUESTION. WHAT'S THE DIFFERENCE BETWEEN THE NEW APP CONFIG AND SECRETS. SO KEY VAULT IS FOR — >> 100% DESIGNED FOR SECRETS. AZURE ZAP IS DESIGNED FOR CONFIGURATION. NOTHING IS COMMIT — LIKE WE HAVE THE UTILITIES KEY VAULT HAS EXPIRATION, SECRET ROTATION OR CERTIFICATE ROTATION.

THOSE ARE VALUES WE WON'T BE ABLE TO GIVE BECAUSE THAT'S NOT WHAT WE ARE DESIGNED FOR. >> DOES THIS CONFIGURATION SERVICE GO INTO AZURE FUNCTIONS SO I DON'T NEED TO MANAGE THE CONFIG THERE? >> TWO THINGS. OUR .NET CORE PROVIDER IS NET STANDARD. YOU CAN USE THAT IN THE APP FUNCTION. PULL IT WHE THE APP FUNCTION STARTS OFF. I EXPORTED SOMETHING TO A JSON FILE IN THE LAST PRESENTATION. YOU CAN EXPORT IT TO THE APP SERVICE THROUGH THE CLI OR THE PORTAL. SO OTHER APP — OTHER PLATFORMS WITHIN AZURE WE WANT TO INTEGRATE WITH TO PUSH OUR STUFF THERE. AZURE FUNCTION, AKS. YOU NAME IT. YOU NAME IT. ON OUR ROAD MAP IS OUR ABILITY TO DO THIS AUTOMATICALLY. YOU CAN STILL MANAGE IT ESSENTIALLY IN APP CONFIGURATION. >> IS THEREIN APP CONFIGURATION NUGGET PACKAGE. >> THE ONE I JUST MENTIONED IS NET STANDARD. WE TO HAVE A CONFIGURATIONS BUILDERS NUGGET PACKAGE. IT WAS INTRODUCED IN 47 AND IT'S A NET FRAMEWORK WAY TO DO CONFIGURATION BUILT INTO THE FRAMEWORK THERE, AND WE DO SHIP SOMETHING FOR THAT, SO IT'S AN AZURE APP CONFIGURATION SPECIFIC .NET FRAMEWORK BUILDING.

>> AMAZING. WE HAVE SOME FEEDBACK COMING IN ON MAY I SAY THEY'RE MIKA'S JOKES THAT I WAS ASKED TO READ. OKAY, THE JOKES ON .NET.COM I TOLD HER THAT THEY MAY NOT WORK, BUT SHE WAS ADAMANT, SO MAYBE WE SHOULD HAVE A TALK WITH HER AFTERWARDS. UP NEXT APP SERVICES EVERY .NET DEVELOPER NEEDS TO NOW WITH TIM AND ANGELOS PETROP O', LOUS. >> I'M TIM, THIS IS MY ESTEEMED COLLEAGUE. WE'RE HERE TO TALK WITH YOU ABOUT AZURE SERVICES THAT EVERY .NET DEVELOPER SHOULD KNOW AND GET EXCITED ABOUT USING YOUR APPS.

SO FIRST I WANT TO SET THE STAGE, AND JUST MAKE SURE EVERYBODY — WE'RE GOING TO THROW OUT SOME TERMS ABOUT AZURE SO WE SHOULD PROBABLY MAKE SURE EVERYONE KNOWS WHAT THOSE TERMS ARE. IN AZURE, THERE'S A LOT OF DIFFERENT THINGS THAT WE'LL TALK ABOUT, BUT JUST A LEVEL SET. WE'RE GOING TO SAY THINGS LIKE ACCOUNTS AND SUBSCRIPTIONS. ACCOUNTS IS SOMETHING THAT REMITS YOU AND ME, OUR ACTUAL IDENTITIES. THAT'S HOW WE AUTHENTICATE WITH THE SERVICE. A SUBSCRIPTION IS SOMETHING WE CAN SHARE TOGETHER. A BILLABLE UNIT. YOU'LL HEAR US TALKING ABOUT RESOURCES AND RESOURCE GROUPS. A RESOURCE RERPRESENTS AN INDIVIDUAL UNIT OF ANY SERVICE THAT'S CREATED IN AZURE, AND SO LIKE I HAVE AN APP SERVICE, WHICH IS ONE OF THE THINGS WE'LL TALK ABOUT TODAY IS AN ACTUAL RESOURCE.

A RESOURCE GROUP IS THINGS THAT WE CAN GROUP TOGETHER, PERFORM SOME MORE SECURITY ON, ESTABLISH SOME, YOU KNOW, MORE BOUNDARIES OF WHAT CAN BE IN THOSE SERVICES AND CONFIGURATION AROUND THERE. WE'LL TALK ABOUT THOSE TWO THINGS QUITE A BIT. MOST EXPLICITLY TODAY WE'RE GOING TO TALK ABOUT TWO THINGS. WE'RE GOING TO TALK ABOUT HOSTING AND SERVICES, RIGHT? AND THE WAY THAT WE THINK ABOUT THESE THINGS IS HOSTING IS YOU'RE GOING TO PROVIDE THE CODE AND AZURE'S GOING TO RUN IT FOR YOU.

AND THE SERVICES THAT WE'RE GOING TO TALK ABOUT IS MORE YOU'RE GOING TO PROVIDE THE DATA AND AZURE'S GOING TO — THESE AZURE SERVICES ARE GOING TO TAKE SOME ACTION ON THE DATA. SO SPECIFICALLY DURING THIS SESSION, WE'RE GOING TO FOCUS ON THOSE TWO ASPECTS OF HOSTING AND SERVICE. TO DO THAT ANGELOS HAS BUILT A SIMPLE APPLICATION. WE'RE GOING TO SHOW AN IMAGE GALLERY, AND SO — YOU WILL — WE ARE GOING TO IPO AT THE END OF THIS. YOU'LL WANT TO GET IN AT THE BTTOM HERE. I THINK WE SHOULD JUST DIVE RIGHT IN AND GET STARTED, AND LET'S — SO THROUGHOUT THIS, WE'RE GOING TO COVER ROUGHLY FIVE SERVICES THAT ARE REALLY KIND OF TABLE STAKES THAT .NET CORE DEVELOPERS SHOULD KNOW.

>> LET'S JUMP STRAIGHT IN BECAUSE WE HAVE A LOT TO COVER. SO I HAVE THE SIMPLE APPLICATION WORKING HERE RUNNING LOCALLY, LOCAL HOST. IT'S CALLED CORE GALLERY. I CAN REGISTER A NEW USER AND LOG IN, SO I'M GOING TO GO AHEAD AND LOG IN WITH MY DEMO ACCOUNT. >> AS YOU'RE LOGGING IN, YEAH, WHAT ARE YOU USING FOR THIS AUTHENTICATION HERE? >> THIS IS POWERED BY CORE IDENTITY, SO GO SEARCH FOR THAT IF YOU WANT TO KNOW MORE ABOUT IT, BUT THE WHOLE REGISTER WITH DIFFERENT ACCOUNTS, SOCIAL AND ALL OF THAT COMES FOR FREE AND YOU CONFIGURE THOSE THINGS. >> IT'S ALL TAKEN CARE OF FOR YOU WHEN YOU DO THE INITIAL CONFIG CONFIGURATION. >> THAT'S RIGHT. >> I CAN PICK ONE FROM MY LOCAL MACHINE TO UPLOAD IT TO OUR GALLERY. IT'S GOING TO TAKE A LITTLE IT'S TELLING ME IT DID SOME FILE PROCESSING, AND THE FILE WILL BE AVAILABLE SHORTLY IN THE GALLERY, AND I CAN JUST CLICK RETURN TO GALLERY, AND HERE'S THE PICTURE I UPLOADED AND I'LL OPEN IT UP TO SHOW YOU THE PROCESSING WE'RE TALKING ABOUT IS JUST A LITTLE — >> COPYRIGHT SO THAT WE PROTECT OUR MILLIONS.

>> OH, NOBODY WILL STEAL THIS. VERY SIMPLE APPLICATION, LET ME STOP IT FROM WORKING, AND LET'S GO BACK TO THE CODE AND CHECK OUT WHAT I JUST SHOWED YOU. SIMPLE SOLUTION, A COUPLE OF PROJECTS, I'LL START WITH IMAGE GALLERY.MODEL. NOTHING BUT A LIBRARY, NOTHING INTERESTING HERE REALLY, JUST A CLASS WITH SOME PROPERTIES. THAT'S WHAT WE USE ON THE PAGE, I SHOW YOU THE CONFIRMATION AFTER THE UPLOAD. JUST SHOWING YOU THERE'S NO TRICKS. NOTHING INTERESTING THERE. THE MAIN PROJECT, AXP.NET CORE, START UP REAL QUICKLY. CLASSIC STUFF, LIKE WE SAID WE'RE USING CORE IDENTITY. WE'RE USING MVC. BUT THE THING I WANT TO DRAW YOUR ATTENTION TO IS WE HAVE A SERVICE, AN INTERFACE, AND IMPLEMENTATION OF IT WITH FILE STORAGE SERVICE. LET'S START WITH THE INTERFACE. LET'S CHECK THAT OUT. IT'S PRETTY SIMPLE. JUST A COUPLE OF OPERATIONS ON IT. GET IMAGES ASYNC, THAT'S SO WE CAN POPULATE THE GALLERY AND ADD IMAGE ASYNC IS WHEN YOU DO ANOTHER UPLOAD.

NOTHING CRAZY HERE, CLOSE THAT DOWN. ACTUALLY, IMMATE WANT TO SHOW YE IMPLEMENTATION AS WELL. >> THE ONE WE'RE CURRENTLY USING. >> YEAH. LET'S TAKE A LOOK AT THE CLASS THAT IMPLEMENTS I STORAGE SERVICE. IMMEDIATELY YOU'LL SEE HERE THERE'S GOING TO BE A FOLDER CALLED USER IMAGES. WE'RE GOING TO PUT IT UNDER WW, THAT'S WHERE THE PICTURES GO INTO, THE LOCAL STORE FOR THE SERVER. NOTHING INTERESTING IN THE CONSTRUCTOR, ADD IMAGE ASYNC, YOU HAVE A LITTLE METHOD HERE TO GET THE PROPERTIES OUT OF THE IMAGE SO I CAN SHOW THE CONFIRMATION LATER. WE'LL JUST GET THE PATH HERE FOR THE DESTINATION. WE CREATE A STREAM. WE USE A LITTLE WATER MARKING CLASS TO ADD THE WATER MARK. I'LL JUST SHOW YOU THAT QUICK.

I DON'T EVEN KNOW WHAT IT'S DOING, BUT IT WORKS. AND FINALLY WE JUST RECORD THE UPLOAD, AND YOU GET THIS SCREEN THAT SAYS GO BACK TO THE GALLERY. >> SO IT'S A STANDARD ASP NET CORE, WEB APPLICATION, USES MVC. NOTHING SPECIAL THAT'S ANY CLOUD SPECIFIC OR BINDING US TO ANY DECISIONS AT THIS POINT, BUT NOW WE'VE ONLY BEEN RUNNING IT LOCAL. >> YEAH, THIS IS ALL LOCAL, AND I FORGOT TO MENTION THAT CORE NET IDENTITY, WE HAVE A DEPENDENCE ON SQL SERVER RIGHT NOW. LET'S TAKE THIS APPLICATION, WHICH A TYPICAL APPLICATION. IT'S DEPLOYED TO AZURE, AND SLOWLY WE'LL TRY TO MODERNIZE IT AND MAKE IT A BIT MORE CLOUD NATIVE.

I'M GOING TO RIGHT CLICK ON THE PROJECT AND CLICK PUBLISH. >> THE ONE THING WE'VE ALREADY DONE IS WE'VE ALREADY CREATED THAT ACCOUNT AND SUBSCRIPTION WE'VE TALKED ABOUT. >> IT'S BECAUSE WE DON'T WANT TO WASTE TOO MUCH TIME IN THE DEMO. THAT'S PRETTY EASY TO LOOK UP. IT'S ALL PRETTY EASY. SO HERE WHEN I RIGHT CLICK PUBLISHED, I'M PICKING AZURE APP SERVICE, AND BECAUSE YOU'RE NICE AND YOU'VE READ THE PROVISION RESOURCES FOR ME, I'M GOING TO SELECT EXISTING AND GO FIND THEM. >> I TRY TO ADD VALUE BY PROVISIONING RESOURCE GROUPS ALL DAY. >> THAT'S FANTASTIC. SO HERE IT'S GOING TO ACCESS MY SUBSCRIPTION AND GO LOOK FOR THE RESOURCE GROUPS UNDER THAT SUBSCRIPTION, AND I WILL BE ABLE TO FIND APP SERVICE INSTANCES RUNNING IN THOSE RESOURCE GROUPS. SO LIKE YOU SAID A RESOURCE GROUP IS JUST A FOLDER. IT'S BASICALLY A NICE WAY TO ORGANIZE YOUR STUFF SO YOU CAN FIND EASILY.

>> YOU CAN HAVE MORE THAN ONE SUBSCRIPTION. YOU DO A LOT OF SUBSCRIPTIONS. >> SEVEN. >> HERE'S MY DEMO, AND I'M PICKING MY EXISTING INSTANCE OF APP SERVICE. I'M CLICKING OKAY, AND NOW VISUAL STUDIO WILL TALK TO THAT INSTANCE, CAPTURE SOME INFORMATION, AND ALL I HAVE TO DO NOW IS HIT PUBLISH. BEFORE I DO THAT, I HAVE TO MAKE SURE MY AXP.NET CORE IDENTITY DATA AND SCHEMA MAKES IT UP TO THE NEW INSTANCE YOU'VE CREATED FOR ME. >> RIGHT BECAUSE WE WERE USING THE LOCAL DB, AND NOW WE WANT TO USE AN AZURE SQL PROVIDER. >> THANKFULLY VISUAL STUDIO WILL LET ME DO EVERYTHING THROUGH ITS OPTIONS. SO IF I'LL JUST EDIT THE PUBLISHED PROFILE SO I CAN ACCESS SETTINGS, YOU WILL SEE HERE WE ARE DISCOVERING DATA CONTEXT. WHAT THAT MEANS IS VISUAL STUDIO IS HITTING THE APP SERVICE INSTANT I'VE SELECTED AND IT'S ASKING IT IF IT HAS ANY SQL SERVER CONNECTION STRINGS.

IF YOU'VE ALREADY DONE THE WORK, YOU MIGHT AS WELL BENEFIT FROM IT. >> IT'S REALTIME. >> THIS IS REALTIME. >> WE'RE COMMUNICATING WITH OUR SUBSCRIPTION, AND I'VE ALREADY DONE THE PROVISIONING OF AZURE SQL FOR YOU. >> SO WHY SHOULD I BOTHER WITH THAT AGAIN, RIGHT? I CAN CLICK IT, CHECK A BOX, THAT WILL APPLY DATA MIGRATIONS AS SOON AS I PUBLISH. pALL I HAV PUBLISH, NOW WHAT'S GOING TO HAPPEN IS VISUAL STUDIO OF COURSE WILL BUILD THE PROJECT. WE'LL TALK TO THE UP SERVICE INSTANCE, UPLOAD ALL OF THE CONTENT.

THEN IT'S GOING TO GO AND CHECK SQL SERVER, RUN MIGRATIONS, AND WE TRY TO GIVE YOU, YOU KNOW, VISUAL CLUES WHAT'S GOING ON. YOU CAN ALWAYS GO TO THE OUTPUT WINDOW AND GET MORE INFORMATION ABOUT WHAT'S HAPPENING HERE. >> WHY ARE WE USING APP SERVICE? >> RIGHT, SO VM'S ARE GREAT. IF YOU GO AND CREATE A VM THROUGH THE AZURE PORTAL, WE EVEN HAVE A NICE TEMPLATE WHERE IT WILL SET UP I.S. AND DEPLOY AND YOU CAN JUST COME INTO VISUAL STUDIO LIKE I DID NOW. IT'S ALL GREAT. BUT THIS IS A TALK ABOUT SERVICES OF AZURE THAT YOU SHOULD KNOW ABOUT. APP SERVICE SHOULD REALLY BE YOUR GO-TO HOSTING OPTION IN AZURE. AT THE VERY LEAST, YOU'RE GETTING A FULLY MANAGED INSTANCE, SO YOU DON'T HAVE TO WORRY ABOUT SECURITY FIXES AND FRAMEWORKS AND ALL THAT KIND OF STUFF.

IT CAN VERY EASILY SCALE OUT AND SCALE BACK BASED ON SETTING SOME METRICS AND SOME OPTIONS UP. IT CAN MAKE SURE THAT YOU CAN KEEP YOUR SITE RUNNING EVEN WHEN YOU'RE DEPLOYING INTO THE SAME INSTANCE BY TAKING ADVANTAGE OF THE PHYSICAL DEPLOYMENT SLOTS. >> LIKE A STAGING AND PRODUCTION KIND OF THING? >> THERE'S MANY, MANY GOOD REASONS. IT'S YOUR GO TO, AND DON'T BE — ALL THESE FEATURES, IF YOU DON'T NECESSARILY NEED THEM, DON'T THINK IT'S SUPERFLUOUS. THERE'S DIFFERENT SKEWS AND TIERS. THERE IS DIFFERENT PRICING AND FEATURES FOR DEV TESTS AND PRODUCTIONS. >> ONE THING I LIKE ABOUT APP SERVICE, VMs ARE GREAT, THERE STILL IS CONFIGURATION YOU HAVE TO DO TO BOOT STRAP THEM.pAPP S DEPLOYING DIRECTLY FROM AN IDE OR DEVOPS, IT'S TAKEN CARE OF A LOT OF THAT CONFIGURATION FOR US.

WE HAVE A .NET FRAMEWORK AND HERE'S OUR BITS. LOOK, THE URL DOESN'T SAY LOCAL HOST ANYMORE. SUCCESS. >> RUNNING IN AZURE RIGHT NOW. >> AWESOME. >> FANTASTI. LET'S GO BACK TO THE SLIDES REAL QUICK AND KIND OF REVIEW THOSE FIRST TWO THINGS. WE SAID WE WERE GOING TO HOPEFULLY COVER FIVE SERVICES HERE. THE FIRST TWO THINGS WE JUST WERE ABLE TO SHOW IS TALKING ABOUT TWO SERVICES, APP SERVICE, WHICH KIND OF IS THAT HOSTING PLATFORM HERE. APP SERVICE IS REALLY GREAT FOR WEB APPS AND APIs, AS ANGELOS MENTIONED IT'S A FULL MANAGED ENVIRONMENT, YOU GET HIGH AVAILABILITY, HIGH SCALE.

BY DEFAULT WITH YOU ABLE TO KIND OF PROVIDE THE THROTTLING MECHANISMS AS WELL. YOU SAW HERE WE'RE USING VISUAL STUDIO FOR WOLFINDOWS BUT WE AL HAVE SIMILAR SPEEEXPERIENCES IN FOR MAC WE WERE USING A LOCAL DB SQL SERVICE INSTANCE. WE WERE ABLE TO USE FRAMEWORK MIGRATION SCRIPTS TO PUT THAT INTO AZURE SQL. NOW OUR APP THAT WAS RUNNING ON PREM, BASICALLY PREM BEING YOUR BOX HERE IS NOW HOSTED IN AZURE, AND OUR IDENTITY IS ALSO IN AZURE, BUT WE'VE GOT A COUPLE MORE BITS THERE, RIGHT? WE'RE UPLOADING IMAGES. WERE THOSE IMAGES IN SQL? >> NO. LET'S TAKE CARE OF THAT. THAT'S PROBABLY BAD. >> YEAH, THE APP IS RUNNING IN AZURE, BUT WE CAN DO A BIT BETTER BECAUSE IF WE WANT TO TAKE ADVANTAGE OF APP SERVICE AND ITS ABILITY TO SCALE OUT, FOR EXAMPLE, YOU WILL NOTICE OR YOU WILL REMEMBER THAT THE IMAGES ARE BEING STORED UNDER WW. >> THE FILE STORAGE PROVIDER THAT YOU HAD.

>> RIGHT. SO PROVISION, THEN FOLDER WILL BE EMPTY. IF TRAFFIC GOES TO THAT SERVER THE GALLERY WILL LOOK EMPTY. >> RED X, WE DON'T LIKE RED X IMAGINGS. LET'S SOLVE THAT. SO WE CAN GO BACK TO THE DEMO. >> WHAT I'M GOING TO DO HERE IS INTRODUCE THE THIRD SERVICE, AZURE STORAGE. WE WANT TO BE ABLE TO STORE FILES. IT'S A COMMON THINGS APPS HAVE TO DO. WHAT I'M GOING TO SHOW YOU IS IMPLEMENTATION OF I STORAGE, THE SAME WE SAW BEFORE. SOME SIMPLE STRINGS AND VARIABLES HERE. WE'LL TALK ABOUT THOSE. NOTHING TO WORRY ABOUT. LET'S GO BACK AND COMPARE IT TO THE PREVIOUS ONE. SO HERE WE HAVE PROPERTIES LIKE BEFORE. WE HAVE AN UPLOAD CONTAINER AND WE JUST GET A REFERENCE TO IT. THIS IS BASICALLY A STREAM WE CAN WRITE INTO.

WE THEN CREATE THE MEMORY STREAM. BEFORE WE WERE CREATING A FILE STREAM. WANT TO DO THE WATER MARKING. I'M GOING TO DO IT IN MEMORY AND THEN IMAGE LOAD, WHICH IS A REFERENCE TO AZURE STORAGE, AND NOW THE PICTURE'S UPLOADED SFR THOSE TWO APIs THAT YOU'RE CALLING THERE, THE GIT BLOG REFERENCE AND THE UPLOAD FROM STREAM, THOSE AREN'T THINGS THAT YOU WROTE? >> THAT'S AZURE.

THAT'S A LIBRARY I GET FOR FREE. >> AND BECAUSE WE'RE MAKING A DECISION WE'RE USING AZURE STORAGE AND BLOB STORAGE IN THIS CASE. WE HAVE AN SDK AVAILABLE TO US THAT ALLOWS US AS .NET DEVELOPERS AND C SHARP DEVELOPERS IN THIS CASE TO WORK IN A LANGUAGE WE LOVE, GET ALL THE PRODUCTIVE IN VISUAL STUDIO THAT WE LIKE AND HAVE KIND OF THIS STRONGLY TYPED INTERFACE WITH THE SERVICE, NOT HAVE TO WORRY ABOUT REST AND ALL THAT TYPE OF THING. PERFECT. >> NOW, WHAT I HAVE HERE IS THE APP WILL WORK JUST AS BEFORE, BUT NOW IT'S GOING TO TAKE THE PICTURES AND UPLOAD THEM TO STORAGE. EVEN IF NEW INSTANCES ARE FIRED UP, THEN THEY WILL HAVE THE SAME USE OF STORAGE, SO I'M GOOD. BUT WE CAN DO EVEN BETTER. WHEN YOU'RE IN THE CLOUD, AND YOU'RE MIGRATING APPLICATIONS, IT'S A GREAT OPPORTUNITY TO OPTIMIZE AND GET EFFICIENCIES AND MODERNIZE AN APPLICATION. WHEN YOU'RE ON PREM, TASKS LIKE THINGS FIRING OFF ON TIMERS AND SCHEDULED EVENTS AND TRIGGERS THAT TO GET WORK FLOWS AND MULTIPLE OPERATIONS, AND TYPICALLY THOSE THINGS ARE WITH A WINDOWS SERVICE RUNNING SOMEWHERE >> SOME DEMON.

>> HOW DO YOU DO THAT IN APP SERVICE? AZURE OFFERS YOU A SERVICE CALLED AZURE FUNCTIONS, WHICH I'M GOING TO USE NOW TO TAKE THE WATER MARKING PROCESS OUT OF THE MAIN A.PP AND JUST DO THE WATER MARKING AFTER THE PICTURE HAS BEEN PUT INTO STORAGE WITH SOME SORT OF BACKGROUND TASK. >> WE'VE IDENTIFIED AN AREA WHERE IT'S NOT MISSION CRITICAL TO US. >> EXACTLY. >> AS SOMEONE'S UPLOADING IT WE'RE KIND OF ALMOST LIKE ASYNC WORK FLOW IN NATURE TO UPLOAD THIS LITTLE MICRO SERVICE YOU'RE GOING TO CREATE HERE. >> IT DOESN'T MATTER IF THE IAGE TAKES A SECOND OR TWO. >> WE MAY LOSE $1. >> 999,000.

>> WHAT WE LOSE WE'LL MAKE UP FOR IN SAVINGS ON AZURE THEY TELL ME. >> BACK ON THE PROJECT. I HAVE A NEW PROJECT HERE IN MY SOLUTION CALLED IMAGE GALLERY.AZ FUNCTIONINGS. H I DID RIGHT CLICK, ADD NEW PROJECT AND I PICKED AZURE FUNCTIONS OR I CAN SEARCH FOR AZURE FUNCTIONS UP HERE. AND I CREATE THE PROJECT. NOW INSIDE IT YOU HAVE MY WATER MARK FROM BEFORE. I JUST MOVED IT OVER HERE, IT'S THE SAME CODE. I STILL DON'T KNOW WHAT IT IS. IMAGE UPLOADED. SO THAT'S MY FIRST AZURE FUNCTION.

I'M GOING TO RIGHT CLICK, AND I'M GOING TO SHOW YOU HOW I DID THAT. I CLICK ADD NEW AZURE FUNCTION. YOU GET TO NAME IT WHATEVER YOU LIKE. YOU CLICK ADD, AND HERE'S WHERE I TALKED BEFORE ABOUT, YOU KNOW, YOU PROBABLY WANT TO HAVE SOME SORT OF TRIGGER OR TIMER. HERE WE HAVE THE LIST OF POSSIBLE WAYS YOU CAN EXECUTE YOUR AZURE FUNCTION, VERY COMMONLY YOU HAVE HDP TRIGGERS. MAYBE YOU DO SOMETHING WITH THE WEBSITE. >> THIS IS A GET AND POST. >> BUT I ALSO HAVE WHAT I WANT TO USE IN THIS CASE WHICH IS THE BLOB PICTURE. AS SOON AS THE PICTURE GETS UPLOADED TO BLOB STORAGE, I'M GOING TO GET TOLD THAT HAPPENED. I GAVE YOU THE CONNECTION STRING AND THAT'S HOW I GOT IT IN THERE.

SO LET'S TAKE A LOOK AT THE CODE. THERE'S NOT A LOT TO IT. I HAVE MY WATER MARK UP HERE. I HAVE AN ATTRIBUTE TELLING ME THAT THIS IS ACTUALLY GOING TO BE AN AZURE FUNCTION AND THE NAME CAN BE WHATEVER I WANTED. IT CAN BE DIFFERENT THAN THE NAME OF THE METHOD, AND I'M GOING TO LOOK AT MY FIRST PARAMETER CALLED INPUT BLOG. THAT'S BASICALLY WHENEVER THE PICTURE GETS UPLOADED BECAUSE THE NAME OF THE CONTAINER IS GOING TO BE CALLED IMAGES AND WHATEVER THE FILE NAME IS IS GOING TO VARIABLE CALLED NAME. I HAVE A STRING NAME HERE AND I CAN REFERENCE IT CONVENIENTLY THROUGH HERE, AND NTHEN I HAVE SECOND VARIABLE PARAMETER, WHICH IS BASICALLY MY OUTPUT. SO AFTER I DO MY WATER MARKING, I'M GOING TO PUT THE CONTENTS IN HERE, AND IT'S GOING TO GET WRITTEN WHERE? INTO A NEW FOLDER CONTAINER CALLED IMAGES-WATER MARK.

>> THAT'S ALSO AN AZURE STORAGE. >> YOU CAN CREATE AS MANY OF THESE GROUPS AS YOU LIKE. >> ALL THIS WILL DO IS BE NOTIFIED, DO THE WATER MARK, AND THEN MOVE THE PICTURE. BUT SINCE I'M CREATING THIS TWO GROUPS AND I'M MOVING PICTURES FROM ONE TO THE OTHER, WHAT I WANT TO DO IS ALSO CLEAN UP AFTER MYSELF, SO WHEN I GO AND DELETE THE ORIGINAL IMAGE THAT WAS UPLOADED. WHAT I'M GOING TO DO IS DELETE THE IMAGE, THAT'S ANOTHER AZURE FUNCTION. KEEP IN MIND, YOU CAN HAVE MORE THAN ONE PER PROJECT. SOMETIMES IT'S OFTEN EASY TO MISS. >> MORE THAN ONE FUNCTION. >> PER PROJECT, YEAH. >> HERE WHAT I'M DOING IS I'M SHOWING YOU YOU CAN EVEN ACCESS CONFIGURATION VALUES.

>> BEFORE WHAT WE HAD, YOU HAD THE HARD COATED BLOB NAME. NOW YOU'RE PULLING IT FROM ASP NET CON FIG. >> BOTH ARE POSSIBLE. THE OTHER WAS JUST EASIER TO READ. HERE WHAT WE'RE GOING TO DO WE'RE GOING TO BE TOLD WHEN THE IMAGE LANDS INSIDE THE WATER MARK CONTAINER. THAT'S AFTER THE FIRST FUNCTION HAS WORKED, AND WHAT I'M GOING TO DO IS I'M GOING TO KNOW TO GO INTO THE ORIGINAL ONE NOW. ALL RIGHT, SO I HAVE THIS WORKING, AND I THINK IT'S GOING TO WORK, BUT YOU WANT TO MAKE SURE IT WORKS LOCALLY BEFORE I PUT IT INTO AZURE, AND EVERYONE TH — AND EVEN THOUGH I'M USING AZURE FUNCTIONS, SOMETHING THAT IS NATIVE TO AZURE, I CAN STILL RUN MY PROJECT LOCALLY INCLUDING AZURE STORAGE.

WHAT I HAVE TO DO IS FALL OFF THE AZURE STORAGE EMULATOR. >> THAT'S A GOOD POINT. THIS IS ANOTHER SET OF TOOLS ALLOWING YOU TO DO CLOUD DEVELOPMENT. >> THAT'S RIGHT. >> BUT HAVE A FASTER INTERLOOP DEVELOPMENT, YOU KNOW, F 5 DEBUG KIND OF LIFE CYCLE. >> AND THE EMULATOR YOU HAVE TO START IT ON YOUR OWN. IT'S KIND OF REALLY HARD FOR VISUAL STUDIO TO KNOW EXACTLY WHEN YOU'RE GOING TO ACCESS IT. BUT THEN IT MIGHT BE TOO LATE. FOR AZURE FUNCTIONS ALL I HAVE TO DO IS RIGHT CLICK, SET IT AS THE STARTUP PROJECT, AND SEE WHAT HAPPENS. >> WE'VE STARTED THE STORAGE EMULATOR, AND NOW YOU'RE STARTING THE AZURE FUNCTION. THIS IS GOING TO RUN ON THE CLOUD NOW OR THIS IS ALSO ANOTHER EMULATOR. >> THIS IS NOW THE EMULATOR BEING FIRED UP BY VISUAL STUDIO. IT'S CLEVER ENOUGH TO KNOW THAT'S EXACTLY WHAT YOU NEED. >> THIS IS A LOCAL INSTANCE OF THE AZURE FUNCTION RUN TIME.

>> YOU'LL NOTICE THIS IS THE 64, THAT WE DID SUPPORT FOR RECENTLY. IT DETECTED THE RUN TIME IS UP. DEPLOYED MY FUNCTION, AND NOW THE FUNCTION SHOULD BE WORKING. >> NOW THE FUNCTION'S THERE. IT'S READY TO LISTEN. READY FOR THE TRIGGER. >> EXACTLY. SINCE WE'RE ON THE TOPIC OF WORKING LOCALLY, I ALSO WANTED TO SHOW YOU THE AZURE STORAGE EXPLORER. THAT'S A — YOU CAN DOWNLOAD SEPARATELY. SIMILAR FUNCTIONALITY EXISTS IN VS IF YOU GO TO CLOUD EXPLORER. LOOK THAT UP. IT LETS ME INTERACT WITH AZURE STORAGE WHETHER THE INSTANCE IS IN THE CLOUD OR LOCALLY. HERE I CAN GO AND LOOK AT MY STORAGE ACCOUNT LOCALLY. I CAN LOOK AT MY EMULATOR RUNNING. I CAN LOOK AT MY CONTAINERS, AND I CAN ACTUALLY SEE THE TWO CONTAINERS I HAD BEFORE, IMAGES WATER MARKED. SO IF I REALLY WANTED TO EXECUTE MY AZURE LOCALLY I CAN LITERALLY DROP THIS FILE. LET'S DO THE FULL THING.

GOING TO COME BACK TO VISUAL STUDIO AND I'M GOING TO FIRE UP THE WEBSITE. >> AND NOW WE'VE GOT TO RUN THE APP ITSELF. >> GOING TO RUN THAT LOCALLY AND JUST EXERCISE THE FULL END TO END. >> SO NOW WHAT WE HAVE HERE AS THIS SPINNING UP, WE'RE RUNNING OUR LOCAL PROCESS THAT'S USING HE STORAGE SDKs, USING SERVERLESS FUNCTIONS BUT RUNNING BOTH OF THOSE BASICALLY IN A LOCAL INTERLOOP. >> THAT'S EXACTLY RIGHT. >> WE HAVEN'T PUBLISHED ANYTHING TO OUR AZURE YET.

>> EVERYTHING'S LOCAL RIGHT NOW, LOCAL HOST. I'M GOING TO DO THE SAME THING RIGHT NOW, UPLOAD AN IMAGE, PICK A DIFFERENT ONE THIS TIME. SO FILE IS BEING PROCESSED, BLAH BLAH BLAH. OH. >> AND THAT'S OUR BREAK POINT. ALL RIGHT, SO THAT IF I GO HERE, PUT A BREAK POINT ON MY DELETE ONE, SO I GO BACK TO UPLOAD. I'LL JUST LET IT GO. COME BACK TO MY WEBSITE. OH, DIDN'T HAVE ENOUGH CHANCE. MY SECOND TRIGGER HAS FIRED OFF. EVERYTHING IS HAPPENING.

ALL RIGHT, IT'S ALL GOOD. GOING TO CONTINUE THIS. NOW WHEN I'M GOING TO GALLERY THE IMAGE WILL ALREADY BE THERE, AND IT'S ALREADY WATER MARKED. >> THAT'S AWESOME. NOW WE CAN GO AHEAD AND REPUBLISH THESE, REPUBLISH OUR APP TO AZURE AT THAT POINT. >> EXACTLY. WHAT I WANT YOU TO SEE HERE, IF I WANT TO TAKE THIS AZURE FUNCTION AND PUBLISH IT TO THE CLOUD, RIGHT CLICK, PUBLISH, EXACTLY THE SAME EXPERIENCE AS BEFORE. I ALREADY HAD THE PROFILE THERE. >> SAME CONFIGURATION. >> THE SAME AS BEFORE. NOT GOING TO BORE YOU WITH THE SAME STUFF. >> AWESOME. SO NOW WE'VE GOT — WE'RE USING A APP SERVICE TO HOST, AZURE SEQUENCE IN THE CLOUD, BLOG STORAGE FOR OUR FILES WE'VE GOT LIKE FOUR SERVICES WE'RE RUNNING ON TOP OF THE APP ITSELF. SO HOW ARE WE GOING TO FEEL GOOD ABOUT THE HEALTH OF THE APP HERE? >> SO THE FEEDBACK WE GET FROM CUSTOMERS A LOT IS RUNNING THINGS IN THE CLOUD FEELS LIKE MAYBE THEY'RE FAR AWAY FROM THE DIAGNOSTICS A LITTLE BIT. >> YEAH. >> THAT'S NOT TRUE.

THAT'S NOT TRUE. LET ME SHOW YOU HOW. ALL RIGHT, SO LET'S GO BACK, CLOSE ALL THIS DOWN. I DON'T NEED ANYTHING LOCAL RUNNING. I'M GOING TO GO TO MY PRODUCTION RESOURCE GROUP. SO THIS IS MY WEBSITE RUNNING IN PRODUCTION RIGHT NOW, AND I HAVE A REPORT THAT IF YOU TRY TO UPLOAD AN IMAGE WITHOUT LOGGING IN FIRST, SOMETHING HAPPENS TO THE APP.

SO LET'S GO CHECK IT OUT. WE'LL GO AND UPLOAD THE IMAGE. PICK ONE. >> SO WE'VE GOT A CRASH HERE EFFECTIVELY. >> THIS IS THE DREADED, YOU KNOW, SOMETHING WENT WRONG BUT YOU'RE NOT IN A DEVELOPMENT MODE, AND YOU CAN'T REALLY GET THE — NOW YOU'RE GOING TO BE WORRIED ABOUT HOW DO I GET ACCESS TO LOGS, THIS IS ANNOYING.

IT WAS SO MUCH NICER WHEN IT WAS LOCAL. WELL, LET ME JUST SHOW YOU SOMETHING CALLED AZURE MONITOR. >> NOW WHERE WE'RE GOING IS WE'RE LOGGING INTO THE PORTAL. >> GOING TO GO BACK TO THE PORTAL, AND YOU KNOW HOW WE SAID THAT RESOURCE GROUPS ARE A NICE WAY TO ORGANIZE YOUR RESOURCES, WHAT I'M GOING TO GO DO HERE IS I'M GOING TO GO TO MY RESOURCE GROUPS, SCROLL DOWN UNTIL I FIND MY PRODUCTION RESOURCE GROUP, AND HERE I GET A LIST OF ALL THE SERVICES THIS RESOURCE GROUP HAS PROVISIONED, AND YOU WERE KIND ENOUGH WHEN YOU PROVISIONED OUR APP SERVICE INSTANCE TO ACTUALLY ATACH IT TO AZURE MONITOR. WHAT YOU GET BY JUST ATTACHING IT TO AZURE MONITOR IS DIAGNOSTICS. SO ALL I'M DOING IS NAVIGATING TO THE INSTANCE, AND OH, LOOK. THERE IS A CHART THERE.

EXACTLY WHAT I NEEDED. SO I'M GOING TO CLICK THAT, SEE WHERE IT TAKES ME. OKAY. SO THERE'S AN ACTION POST UPLOAD, THAT SOUNDS LIKE WHAT I JUST DID. AND IT LETS ME DRILL INTO IT. I'M GOING TO KEEP CLICKING. >> SO WE'RE ABLE TO GO TO THE PORTAL NOW AND SEE — THIS IS ALMOST REALTIME DIAGNOSTICS AS WELL OF WHAT HAPPENED AND GET BASICALLY TO OUR CORE EXCEPTION HERE THEN.

>> SO THIS HAS AN END TO END TRANSACTION IT HAS AUTOMATICALLY RECORDED FOR ME WITHOUT ME DOING ANYTHING SPECIAL. IF I KEEP GOING, I EVENTUALLY GET TO THE CALL THIS IS WHAT WE ALL WANTED TO SEE. >> WE CAN FIGURE OUT THE EXCEPTION FROM THERE. >> OKAY. SO. >> SOMETHING WITHOUT AUTHORIZATION. IT'S KIND OF OBVIOUS I SHOULDN'T LET YOU UPLOAD A PICTURE WITHOUT SIGNING IN FIRST. NOW I CAN GO BACK TO MY CODE AND SEE IT'S ASSUMING I'M AUTHENTICATED. >> LET'S GO BACK TO THE SLIDE AND REVIEW WHAT WE'VE SEEN HERE. SO WHAT AGENEWE HAD A TYPICAL ASP.CORE APPLICATION, A VERY SIMPLE ONE. WE BASICALLY MOVED IT ALL TO THE CLOUD, NOT HAVING TO WORRY ABOUT MANAGING OUR OWN BOX AND INFRASTRUCTURE. WE GOT HOSTING OUT OF APP SERVICE. WE'VE GOT DATA STORAGE USING AZURE SQL, IF WE NEEDED RELATIONAL DATABASE NEEDS ON TOP OF IDENTITY WE COULD STILL USE THAT AS WELL.

WE'RE USING BLOB STORAGE, OUR DURABLE STORAGE FOR OBJECTS AND THINGS LIKE THAT. A SERVERLESS FUNCTION THAT IS ASIN KRON NOUS, IT'S NOT THIS LONG RUNNING PROCESS, AND THEN WE HAVE REALLY RICH INSIGHTS IN MONITORING INTO OUR APP. SO THERE'S A TON MORE IN AZURE THAT WE COULD DO AS WELL. WE DIDN'T EVEN TALK ABOUT CONTAINERS AND THINGS BUT THAT'S KIND OF LIKE THE NEXT LEVEL THAT I THINK AN ENTERPRISE APPLICATION WILL LOOK AT HOW DO WE COCONTAINER, AND AZURE HAS ACTIVE DIRECTORY, SERVICE BUS, AND SQL MANAGED INSTANCE AND EVERYTHING LIKE THAT.

I THINK IT'S A REALLY QUICK OVERVIEW OF KIND OF SOME KEY SERVICES THAT .NET DEVELOPERS SHOULD KNOW. HERE'S SOME RESOURCES FOR YOU. WE WANT YOU TO GET THE TOOLS AND SDKs, VISUAL STUDIO AND THE CORE SDK AND THEN AS WELL THAT SECOND LINK, IF YOU WANT TO LEARN MORE ABOUT AZURE AND ACTUALLY WALK THROUGH SOME OF THE SAME TUTORIALS OF THE SERVICES AND GET THOSE SDKs THAT MAKE IT EASIER FOR A .NET DEVELOPER, THAT'S THE PLACE TO GO. IF YOU HAVEN'T TRIED AZURE YET, YOU CAN GET A FREE SUBSCRIPTION THAT GIVES YOU FREE SERVICES, SOME FOREVER, AND SOME FOR A 12-MONTH PERIOD.

I THINK THE GOOD THING ABOUT THE — YOU KNOW, WE DIDN'T — THERE'S A LOT MORE RICHNESS IN THE MONITORING AND DIAGNOSTICS, AND I THINK A GOOD THING IS THE SESSION RIGHT AFTER THIS AS ROBIN IS GOING TO GO OVER SOME MORE OF WHAT WE'VE DONE MORE AND .NET CORE 3 FOR THOSE TYPES OF THINGS. THANKS ANGELOS, A GOOD PRIMER AND I ENCOURAGE EVERYONE TO TAKE A LOOK AT THIS. >> THANK YOU. THOSE WHO DON'T KNOW, TIM IS ACTUALLY MY BOSS, SO HOW ARE YOU DOING TIM? >> I'M DOING WELL. YOU'RE DOING A FANTASTIC JOB. >> THANK YOU. SO YEAH, WE HAVE A FEW QUESTIONS THAT WE CAN GO OVER RIGHT NOW. LETS SEE. THIS ONE'S FOR TIM. GOOD TO SEE TIM PRESENTING. BRINGS BACK BITTERSWEET MEM ORIS OF SILVER LAKE, DO YOU HAVE ANYTHING ABOUT THAT? >> PROBABLY NOT ALLOWED TO SAY ANYTHING. >> LET'S SEE THE NEXT ONE. CAN APP SERVICES RUN BLAZOR? >> YES, AND IF YOU'RE INTO BLAZOR ALSO CHECK OUT THE AZURE SQL R SERVICE.

IF YOU NEED MORE INFO LET ME KNOW. >> DAN ROTH GAVE TWO PRESENTATIONS EARLIER TODAY BUT ALSO YESTERDAY, KIND OF HOW THAT ALL WORKS TOGETHER AS WELL WITH BLAZOR AND AZURE. >> HERE'S ANOTHER ONE, THIS ONE'S FROM JOHN. WILL VS GENERATE THE EF SCRIPTS IF YOU JUST SAVE THE PUBLISHED PROFILE INSTEAD OF CLICKING PUBLISH? >> CLICKING PUBLISH ACTUALLY DEPLOYS THE APP AND THEN EXECUTES THE MIGRATION SCRIPTS I HAD ALREADY SET UP BEFORE. I DIDN'T TYPE, CREATE MIGRATION. YOU HAVE TO DO THAT FIRST, AND THEN PUBLISH WILL EXECUTE IT FOR YOU. >> CREATING THE PROFILE OPPORTUNITY CREATE A MIGRATION SCRIPT FOR YOU. >> IT DOES ON THE SERVER. >> BUT LOCALLY IT DOESN'T. >> OKAY. GREAT, THANK YOU SO MUCH, GUYS AGAIN. NEXT WE HAVE — LET'S SEE, WE HAVE DIAGNOSTICS IMPROVEMENTS AND .NET CORE 3.0 AND THIS IS WITH SERAB AND JOHN, TAKE IT AWAY. >> YEAH. ALL RIGHT, EVERYONE SO JOHN AND I ARE GOING TO BE TALKING ABOUT DIAGNOSTICS IMPROVEMENTS IN .NET CORE 3.0.

>> SO I'M JOHN, I'M AN ENGINEER ON THE .NET RUN TIME TEAM AND I WORK ON DIAGNOSTICS. >> AND I'M A PROGRAM MANAGER ON THE .NET TEAM. SO LET'S GO AHEAD AND GET STARTED. SO THIS IS WHAT WE'RE GOING TO BE COVERING TODAY. WE'RE TALKING ABOUT NEW FEATURES IN THE RUN TIME, WHICH IS THE NEW DIAGNOSTIC SERVER THAT ALLOWS US TO EGRESS THIS RICH DIAGNOSTICS INFORMATION AND THE IPC PROTOCOL IT SPEAKS. WE ALSO COVER THE NEW DIAGNOSTIC TOOLS THAT WE'VE BUILT, WHICH WILL ALLOW YOU TO CONSUME THIS INFORMATION AND GO OVER .NET COUNTERS, .NET FOR COLLECTING TRACES. WE'RE ALSO GOING TO VISUALIZE SCOPE THAT WE COLLECTED SPEED – WITH .NET TRACE, AND WE'RE ALSO GOING TO LOOK AT .NET DUMP AS A WAY OF COLLECTING AND ANALYZING DUMPS.

ASK FINALLY WE'LL RECAP AND TELL YOU HOW TO ACQUIRE THESE TOOLS SO YOU CAN DO WHAT WE SHOWED YOU TODAY DURING THE COURSE OF OUR TALK. >> SO WE'VE ADDED DIAGNOSTIC SERVER INTO THE .NET RUN TIME ITSELF, SO IT SPEAKS ACROSS A TRANSPORT PROTOCOL DEPENDING ON WHICH PLATFORM IT'S GOING TO BE A NAMED PIPE ON WINDOWS OR — IT SPEAKS A CUSTOM IPC PROTOCOL, AND WE'VE BUILT SOME TOOLS ON TOP OF THAT PROTOCOL THAT ARE KAUPA CAPABLE OF CREATING DUMPS ON LINUX AS WELL AS ATTACHING PROFILERS. >> IF I UNDERSTAND CORRECTLY, YOU'VE PREPARED A DEMO, IT'S AN IMAGING PROCESSING APP THAT'S HAD A FEW PERFORMANCE ISSUES THAT YOU RAN INTO AS YOU WERE BUILDING IT.

WE'RE GOING TO RUN THROUGH THE TOOLS AND WE'RE GOING TO SOLVE YOUR ISSUES, AND EVERYONE CAN SEE HOW WE USE THESE TOOLS TO SOLVE YOUR ISSUE. SO WITH KE CAN WE JUMP OVER TO COMPUTER RIGHT NOW? >> YOU SEE HERE IN THE BEGINNING OF A BASIC CONSOLE APP. IT'S PUTTING AN INPUT IMAGE, IN THIS CASE THE HEAD SHOT FOR THE .NET.COM, AND OUTPUTS WHAT WE CALL A PPM FILE. THIS IS A CLASSIC IMAGE FORMAT. IT'S VERY, VERY SIMPLE. IT'S JUST A COUPLE ASCII CHARACTERS AS A HEADER INDICATING WHAT IT IS FOLLOWED BY EVERY PIXEL WRITTEN OUT IN ASCII PLAIN TEXT LIMITED BY WHITE SPACE. VERY EASY CLASSIC CS 101 TYPE ASSIGNMENT TO GENERATE THESE FILES. >> CAN WE GO AHEAD AND HAVE A LOOK AT YOUR APP RUN? >> YEAH, SO LET'S GO AHEAD AND RUN IT. >> SO JOHN'S JUST RUNNING HIS APPLICATION, AND HE'S GOING TO START IT UP WITH HIS — THE IMAGE THAT HE JUST SHOWED YOU.

AS YOU CAN SEE, HE HAS A COUPLE THAT HE CAN RUN. HE'S GOING TO RUN THE APTLY NAMED VPM SLOW TRANSFORM. IT'S A LITTLE SLOW. NO MATTER HOW LONG I TALK, THIS THING IS STILL PROCESSING JUST ONE IMAGE. SO JOHN, HOW DO WE GET MORE VISIBILITY INTO WHAT'S GOING ON? SO YOU KNOW, THIS IS LIKE MY 10,000 FOOT VIEW OF THE WORLD, I FIRST WANT TO KNOW THAT THERE'S SOMETHING WRONG. HOW DO I GET THESE METRICS WHEN YOUR PLAPPLICATION IS RUNNING? >> SO WE ALREADY KNOW IT'S SLOW. THE RUN TIME PRODUCES A WHOLE BUNCH OF OTHER INTERESTING DATA WE CAN TAKE A LOOK AT USING ONE OF OUR TOOLS .NET COUNTERS. >> JOHN'S RUNNING .NET COUNTERS, AND HE'S GOING TO — THE PROCESS I.D.

OF HIS ALREADY RUNNING APPLICATION, SO ONCE IT LOADS UP, YOU CAN SEE THAT HE'S OUT OF PROCESS CONNECTED TO HIS EXISTING APPLICATION, AND HE'S GETTING LIVE UPDATES TO EVENT COUNTERS, AND WHEN HE GOES AHEAD AND RUNS HIS APPLICATION, YOU CAN SEE THESE COUNTERS JUST LIGHT UP. YOU CAN SEE HIS CPU IS ABOUT 22%. HE HAS A LOT OF GC COLLECTIONS HAPPENING, ALLOCATIONS RATE IS REALLY HIGH. IF I WERE TO LOOK INTO THIS, JUST THE ALLOCATION RATE NUMBER SHOULD MAKE ME SUSPICIOUS, SO WHY ARE YOU ALLOCATING THAT MUCH, JOHN? >> I DON'T KNOW. >> CAN WE LOOK AT YOUR APP AND SEE WHAT'S GOING ON. >> YEAH, LET'S FGO AHEAD AND TAE A LOOK.

SO IF WE SCROLL ON DOWN, YOU'LL SEE WE'RE DOING A WHOLE BUNCH OF STUFF. WE'RE LOADING THE IMAGE. WE'RE MUTATING THINGS. WE'RE APPENDING TO A STRING. IT'S REALLY HARD FOR ME TO TELL FROM THIS POINT OF VIEW LIKE WHAT EXACTLY IS GOING WRONG. >> SO HOW ABOUT WE RECAP WHAT WE LEARN ABOUT PRET METRICS, AND THEN WE'LL LOOK AT THE OTHER TOOLS AVAILABLE THAT WILL GIVE US MORE DETAILED INFORMATION ABOUT WHAT WAS HAPPENING WHILE YOUR APPLICATION IS RUNNING. I'M HOPING MY SCREEN'S BACK UP. AND THEN LET'S GO AHEAD AND TALK ABOUT METRICS, RIGHT? SO THE .NET RUN TIME AND ASP NET CORE, YOU CAN CUSTOMIZE CUSTOM EVENT COUNTERS, USING THE EFFERENT COUNTER API. THESE EVENT COUNTERS CAN BE CONSUMED IN PROCESS AND OUT OF PROCESS. IN PROCESS WE HAVE THE EVENT LISTENER API, AND THAT'S IN FACT WHAT THE APPLICATION INSIDE SDK USES TO GIVE YOU COUNTERS IN .NET CORE 3.0. AND OUT OF PROCESS YOU CA DOCTOR THE DIAGNOSTIC SERVER. THAT'S EXACTLY WHAT YOU DID WITH THE .NET COUNTER STOOL. LIVE VALUES FOR THOSE NETWORKS.

THE RUN TIME ACTUALLY COMPUTES ADDITIONAL STATS. YOU CAN GET ALL THE METRICS THAT ARE ADMITTED AND YOU CAN THINK OF EVENT COUNTERS AS THE SUCCESSOR, SO THEY WORK EVERYWHERE THAT .NET CORE DOES. UNLIKE BOTH COUNTERS WHICH ARE WINDOWS ONLY, EVENT COUNTERS WORK ON LINUX AND MAC OS. AND THEY ARE USABLE IN LOW PRIVILEGE ENVIRONMENTS. YOU DO NOT NEED ADMINISTRATIVE PRIVILEGES TO ACTUALLY GET ACCESS TO THOSE COUNTERS. SO THIS WAS A GOOD, YOU KNOW, WE GOT A VIEW INTO WHAT'S HAPPENING IN THE RUN TIME. WE KNOW WE'RE ALLOCATING A LOT. SO IF I WERE INVESTIGATING THIS, I WOULD BE LIKE CAN I SEE WHAT WAS ACTUALLY ON THE STACK? CAN WE SEE WHAT'S TAKING UP CPU TIME? CAN WE SEE WHAT'S ACTUALLY CAUSING THOSE ALLOCATIONS? SO IF WE SWITCH BACK OVER TO JOHN'S COMPUTER, JOHN'S GOT HIS APPLICATION BACK UP AND RUNNING, AND ARE YOU GOING TO INTRODUCE US TO THE NEW TOOL? >> YEAH, SO I'M GOING TO GO AHEAD AND RUN .NET TRACE, AND WE'RE GOING TO RERUN THAT SLOW TRANSFORM AGAIN, AND THAT'S GOING TO ACTUALLY GIVE US A VIEW JUST LIKE YOU'RE ASKING FOR, WHAT WAS ON THE STACK AT A GIVEN POINT IN TIME.

>> SO JOHN'S RUNNING .NET TRACE. HE'S POINTING IT TO THE PROCESS I. DIFFICULT EXISTING. ALREADY RUNNING APPLICATION, AND THIS IS GOING TO DO A COUPLE OF THINGS. YOU CAN SEE ONE OF THE PROVIDERS ENABLED BY DEFAULT IS THE SAMPLE CPU STACK PROFILER, SO WHAT'S HAPPENING RIGHT NOW IS THE RUN TIME SUSPENDS ALL RUNNING TREADS EVERY ONE MILLISECOND, WALKS ALL YOUR STACKS AND GENERATES THE CPU STACKS. IN ADDITION TO THE SAMPLE CPU PROFILER, YOU CAN ENABLE ADDITIONAL PROFILERS. WE RAN INTO THE DEFAULT ARGUMENTS.

WE DIDN'T DO ANYTHING LIKE THAT. IF YOU'RE USED TO USING EPW AND COLLECTING OTHER EVENTS FROM THE RUN TIME, YOU CAN BOSS THEM AS PARAMETERS. IT'S THE SAME KEY WORDS AND FILTERING THAT YOU WOULD FOR ETW EVENTS. SO JOHN I SEE THE OUTPUT FILE. CAN YOU TELL ME WHAT THE NET TRACE FILE IS AND HOW WE WOULD CONSUME IT? >> WE SEND EVENTS ACROSS THE EVENT TRACE SITE USING NET TRACE. IF YOU'RE RUNNING VISUAL STUDIO, YOU CAN OPEN UP THAT FILE THAT HAS A TON OF INFORMATION LIKE YOU SAID. MOST THINGS YOU CAN SEND ACROSS ETW YOU CAN SEND INTO THESE FILES. BECAUSE I'M NOT ON WINDOWS I NEED ANOTHER WAY OF OPENING THIS T FILE SO FOR NOW WE HAVE A WAY OF CONVERTING THESE FILES INTO OTHER FORMATS. RIGHT NOW WE HAVE SPEED SCOPE, WHICH IS WHAT I'M GOING TO GO AHEAD AND DO NOW. >> WE'RE CONVERTING IT TO SPEED SCOPE FOR THE PURPOSE OF USING IT AND VISUALIZING CPU STACKS IN SPEED SCOPES. IF YOU WERE IN WINDOWS YOU COULD OPEN IT AND GET DETAILED ACTIVITY VIEW, EVENT COUNTS AND ALL THE OTHER THINGS YOU'RE USED TO DOING WHEN YOU DO ETW WITH WINDOWS.

JOHN'S GONE AHEAD AND OPENED THIS COLLECTED CPU TRACE IN THIS APPLICATION. JOHN, JUST TELL US MORE ABOUT SPEED SCOPE AND HOW DO I GET IT? APPLICATION.PE IS AN OPEN SOURC- YOU CAN FIND IT ON GITHUB. THE AUTHOR HAS IT HOSTED AT WWW.SPEEDSCOPE.APP. I HAVE IT INSTALLED LOCALLY ON MY LAPTOP USING CHROMIUM BASED EDGE. THIS IS RUNNING RIGHT HERE. >> SO NOW THE PART OF THE EXERCISE WHERE I GOT TO SEE A BUNCH OF COLOR LINES ON YOUR SCREEN AND FIGURE OUT WHAT'S WRONG WITH YOUR APP. SO I'M KIND OF GOING TO ASK YOU QUESTIONS, AND HOPEFULLY YOU WILL POINT ME AT WHAT'S NEEDED TO GET TO THE ROOT CAUSE OF THIS PROBLEM. SO I'M JUST READING FROM LEFT TO RIGHT. I'M SEEING A BUNCH OF THINGS. I SEE THIS UNMANAGED CODE TIME. WHAT IS THAT? >> SO BECAUSE IT'S THE RUN TIME TRACING ITSELF, WE DON'T HAVE INSIGHT INTO THE NATIVE CODE. SO MOST THINGS THAT ARE AFTER A TRANSITION INTO NATIVE CODE YOU'LL SEE UNMANAGED CODE TIME.

IN THIS CASE THAT'S THE TOP OF THE STACK FOR A CONSOLE READ LINE SO WAITING FOR SOME KIND OF IO INTEROP OR SOMETHING LIKE THAT, RIGHT? >> THAT MAKES SENSE. WE KNOW YOUR APP IS SLOW. WE KNOW THE PART WE DON'T CARE ABOUT IS WAITING FOR YOU. THAT'S JUST YOU BEING SLOW RIGHT? HOW DO I FILTER OUT TO ONLY THE PARTS I CARE ABOUT? WHERE DO I GET TO THE MEAT OF WHAT WAS HAPPENING IN YOUR APPLICATION? >> THIS IS WHAT WE REFER TO AS AN ICICLE GRAPH. IF YOU'RE FAMILIAR WITH THE FLAME GRAPH, IT'S THE SAME THING. THE BOTTOM FRAME HERE IS THE TOP OF THE STACK AT A GIVEN POINT IN TIME.

THIS IS THE TIME ORDER VIEW, WHICH MEANS WE'RE GOING TO READ IT FROM LEFT TO RIGHT. IF SOMETHING'S ON THE STACK FOR A REALLY, REALLY LONG TIME, CHANCES ARE WE'RE GOING TO SEE A VERY CONSISTENT BAR ACROSS, AND IN FACT WE DO. IF YOU TAKE A LOOK HERE, YOU'LL SEE THAT WE HAVE A CONVERT TO PPM SLOW THAT'S BEEN ON THE STACK FOR IT'S AT 78% OF THE TIME OF THE TRACE. IF I DOUBLE CLICK ON THAT, WE CAN SCOPE INTO JUST WHAT WAS HAPPENING DURING THAT CALL. >> SO THAT'S INTERESTING. NOW WE'RE IN THE REGION OF INTEREST. WE'RE ABLE TO FILTER OUT THE STUFF THAT WE DON'T CARE ABOUT. AND IF I RECALL CORRECTLY, WE'RE PROCESSING AN IMAGE. SO I ASSUME THERE'S A LOT OF YOU REPEATING THE SAME OPERATION OVER AND OVER AGAIN ON EVERY PIXEL, WHICH PROBABLY ALSO EXPLAINS WHY WE HAVE SO MANY OF THOSE ICICLES.

IS THERE A WAY FOR ME TO VIEW THE CUMULATIVE IMPACT OF THESE OPERATIONS? CAN I STITCH THESE STACKS TOGETHER TO SEE WHAT'S REALLY EATING UP THE MOST TIME? >> YEAH, SO LIKE YOU SAID, WE'RE SEEING A WHOLE BUNCH OF FRAGMENTATION HERE. THIS IS A SAMPLED SET OF STACKS, WHICH MEANS WE'RE GOING TO HAVE A LITTLE BIT OF NOISE IN TERMS OF TIMING, RIGHT? SO WE GET A SENSE OF WHAT SAT ON THE STACK FOR A REALLY LONG TIME, BUT FOR A LOT OF THESE REALLY SMALL CHUNKS THESE ARE PROBABLY A BUNCH OF REPEATED CALLS THAT WERE HAPPENING QUICKLY IN SUCCESSION.

WE JUST KNOW THAT IT WAS THERE A LONG TIME. IF WE TAKE A LOOK AT THIS, YOU'LL SEE FROM THE LEFT TO THE RIGHT WE'VE GOT THAT IMAGE WHICH DIDN'T ACTUALLY TAKE MUCH TIME. IF WE GO AND TAKE A LOOK AT THIS LEFT HEAVY VIEW, LIKE YOU WERE ASKING FOR THIS GIVES US A NICE AGGREGATE VIEW. ALL OF THESE DISCREET SAMPLES GET AGGREGATED INTO A SINGLE SAMPLE. IN THIS CASE WE CAN SEE AGAIN THERE'S OUR NICE LONG FRAME FOR CONVERT TO PPM SLOW. IF WE ZOOM IN ON THAT, WE CAN TAKE A LOOK AT EXACTLY WHAT'S HAPPENING DURING THE WHOLE TIME THAT WAS ON THE STACK. >> SO CAN WE GO BACK TO YOUR — IF I'M LOOKING AT WHAT YOU'RE SHOWING ME, I SEE SOME STRENGTH, SOME STUFF THAT SEEMS VAGUELY FAMILIAR FROM WHEN WE SAW YOUR CODE. DO YOU THINK THIS IS ENOUGH FOR US TO GO FIX THE PROBLEM AT HAND? >> I THINK THIS IS ENOUGH FOR ME TO IDENTIFY WHAT HAPPENED. IF WE GO BACK TO THE CODE, YOU'LL SERE HERE'S THAT IMAGE LOAD THAT DIDN'T TAKE TOO MUCH TIME.

HERE'S SOME BASIC IO, AND THEN HERE'S THAT MUTATE THAT WAS ONLY ON THE STACK FOR A FRACTION OF A SECOND. LIKE I POINTED OUT BEFORE, WE SEE A WHOLE BUNCH OFSTRING IN CAT NATION HAPPENING INSIDE A TIGHT LOOP. >> JUST SPRAIEXPLAIN TO ME IS T BAD THING? >> I'M TAKING A SINGLE STRING AND CONCATENATING TO IT OVER AND OVER AGAIN. THIS IS GOING TO BE CREATING A WHOLE NEW STRING EVERY TIME I APPEND TO IT, WHICH MEANS THERE'S A WHOLE BUNCH OF JUNK STRINGS THAT ARE GETTING THROWN OUT. WHICH IS WHY WE SAW MY ALLOCATION RATE SPIKE AND THE GC RATE SPIKE. I ACTUALLY ALREADY HAVE A SOLUTION WRITTEN UP. IF WE SCROLL BACK UP HERE, IT'S QUITE A SIMPLE SOLUTION. YOU JUST HAVE TO USE A STRING BUILDER. THIS IS EXACTLY WHAT IT WAS MADE FOR. IF I REPLACE ALL OF THOSE PLUS EQUALS, AND CON CAT CALLS, AND SWITCH BACK TO THE APP AND RUN THE REGULAR PPM, YOU'LL SEE IT TAKES LESS THAN 0.2 SECONDS. >> 200 TIMES FASTER. >> JUST ABOUT.

>> WE WERE ABLE TO USE METRICS TO FIGURE OUT THAT THERE WAS SOMETHING WRONG, AND NETHEN WE KNEW WHAT TO GO LOOK AT BY COLLECTING A TRACE, RIGHT? LET'S RECAP WHAT WE'VE LEARNED ABOUT TRACING. SO WE INTRODUCED YOU TO THE .NET TIES TOOL THAT ALLOWS YOU TO COLLECT EVENT SOURCE EVENTS INCLUDING SAMPLE CPU STACKS. YOU CAN OBVIOUSLY COLLECT OTHER PROVIDERS, BOTH THOSE PRESENT IN THE RUN TIME AND CUSTOM PROVIDERS AS WELL. WE ARE WORKING ON ADDING SUPPORT FOR GC, SO WE CAN GIVE YOU OBJECT COUNTS OF WHAT'S ON THE HIP THAT YOU CAN COLLECT OUT OF PROCESS IN THIS MANNER, AND WE HAVE TOOLS FOR VISUALIZING CPU STACKS IN SPEED SCOPE, IN VISUAL STUDIO, AND WE'RE LOOKING AT ADDING OTHER TOOLS TO VISUALIZE THIS DATA, YOU KNOW. WE HAVE A PROTOTYPE FOR CHROME DEPTH TOOLS, AND WE'RE LOOKING AT OTHER STUFF AS WELL.

SO THIS WAS GREAT, BUT I SUSPECT THIS IS NOT GOING TO SOLVE ALL OUR PROBLEMS, RIGHT? WHAT IF I WANT TO LOOK AT ALL THE OBJECTS IN THE HEAP. LOOKING AT CPU STACKS ISN'T QUITE GOING TO GET ME THAT FIDELITY INFORMATION. SO DO WE HAVE SOMETHING ELSE WE CAN LOOK AT TODAY TO GET MORE INFORMATION ON WHAT'S GOING ON IN YOUR APPLICATION? >> YEAH, IF YOU'RE LOOKING FOR SOMETHING THAT'S MORE DESCRIPTIVE OF A PRECISE MOMENT IN TIME, OF THE ENTIRE WORLD OF YOUR APPLICATION, YOU'RE GOING TO WANT TO — IF WE SWITCH BACK TO MY BOX, WE CAN TAKE A LOOK AT A BUG THAT I'VE BEEN HITTING WHENEVER I'VE BEEN RUN THE GRAY SCALE TRANSFORM, I'M ACTUALLY HITTING AN ISSUE WHERE I THROW AN UNHANDLED EXCEPTION AND MY WHOLE PROCESS DIES. >> OKAY. >> I COULD LOAD UP A FEW DIFFERENT DUMPING TOOLS INCLUDING OUR .NET DUMP TOOL, BE U IT'S HAPPENING A LITTLE FASTER THAN I'M CAPABLE OF HITTING THE KEYS, SO LET'S GO AHEAD AND RUN MY GRAY SCALE TRANSFORM, AND IT'S PRETTY INSTANTANEOUS, BUT LUCKILY THERE'S A COMMAND LINE — OR AN ENVIRONMENT VARIABLE THAT YOU CAN SET THAT TELLS THE .NET RUN TIME THAT IF IT ENCOUNTERS AN UNHANDLED EXCEPTION AND IT'S DYING TO TAKE A CRASH DUMP OF ITSELF.

YOU CAN SEE AS IT WAS DYING IT WENT AND WROTE A CORE FILE FOR ME. >> IF I UNDERSTOOD CORRECTLY, I CAN USE THE .NET DUMP TOOL TO COLLECT A PROCESS DUMP ON LIKE WHEN DESIRED, OR I CAN HAVE THE RUN TIME SET ITSELF UP TO COLLECT A DUMP WHEN IT'S ABOUT TO CRASH DUE TO UNHANDLED EXCEPTION? >> YES. >> SO THAT'S GREAT. NOW I HAVE A CORE DUMP. HOW DO I ANALYZE THIS DUMP? HOW DO I ACTUALLY INTROSPECT WHAT WAS IN MEMORY AT THAT TIME AND WHAT IS POSSIBLY THE CAUSE OF MY OTERROR? >> .NET DUMP HAS A SUB COMMAND CALLED ANALYZE. IF I RUN THAT AND POINT IT AT THE DUMP THAT WE JUST COLLECTED, YOU'LL SEE WE GET THIS NICE LITTLE ENVIRONMENT.

LET'S TAKE A LOOK AT WHAT WE CAN RUN HERE. NOW, IF YOU'RE FAMILIAR WITH .NET DIAGNOSTICS FROM THE PAST, YOU MIGHT RECOGNIZE PRETTY MUCH ALL OF THESE COMMANDS. THESE ARE THE COMMANDS FROM SOS. THE RUPP L THAT I'M GETTING IN THE .NET IS A HOSTED VERSION OF SOS THAT'S READING MY DUMP THAT I JUST TOOK AND WAS PLACE INSTEAD THAT DIRECTORY EARLIER. >> SO FOR FOLKS WHO AREN'T FAMILIAR, SOS IS A SET OF DEBUGGER EXTENSIONS THAT WE SHIP. IT ALLOWS YOU TO INTROSPECT .NET STRUCTURES IN MEMORY. INITIALLY IT SHIPPED, FRAMEWORK SHIPPED AS EXTENSION, BUT NOW WE'VE HOSTED IT INSIDE A CONSOLE APPLICATION BECAUSE WE HAVE AN — WE CAN READ THESE MEMORY DUMP FILES OURSELVES AND GIVE YOU MORE INFORMATION ABOUT IT.

CAN YOU FIND OUT THE EXCEPTION THAT OCCURRED, JOHN? >> YEAH, I CAN USE THE GOOD OLD PRINT EXCEPTION COMMAND HERE. IF I JUST TYPE PE, IT WILL GO AHEAD AND SHOW ME WE HIT A SYSTEM OVERFLOW EXCEPTION, THAT I WAS DOING SOME KIND OF ARITMATIC EXCEPTION THAT RESULTED IN AN OVERFLOW. IT EVEN TELLS ME IT HAPPENED INSIDE THE CONVERT TO GRAY SCALE FUNCTION. LET'S TAKE A LOOK AT WHAT MIGHT BE THE OFFENDER. >> JOHN JUST SHOWED RUNNING PE OR YOU CAN RUN THE NEWLY ADDED SOS COMMAND FOR DUMP BASING.

YOU CAN ACTUALLY WALK THE HAPPY AND STITCH TOGETHER STACKS. DEFINITELY RECOMMEND YOU TRY THAT OUT. >> LOTS TO EXPLORE ON THAT TOOL. IF WE TAKE A LOOK, PART OF CONVERTING AN IMAGE TO GRAY SCALE IS TAKING WEIGHTED AVERAGES OF ALL THE VARIOUS COLOR CHANNELS. IN THIS CASE I WAS TAKING 30% OF THE RED CHANNEL, 59% OF THE GREEN CHANNEL AND ACCIDENTALLY 111% OF THE BLUE CHANNEL, WHICH MEANS I'M DEFINITELY GOING TO BE OVERFLOWING IF THERE'S ANY BLUE THERE. IT'S QUITE AN EASY FIX, AND IF WE GO AHEAD AND REPLACE THE CODE AND RERUN MY PROCESS AND RERUN THE TRANSFORM AND GO AHEAD AND SEE WE GET OUR NICE LITTLE — OH, LOOKING GOOD, JOHN.

>> GRAY SCALE IMAGE. >> SO THIS IS GREAT, BUT WHAT IF I WAS RUNNING IN A LINUX CONTAINER. WOULD THAT WORK? WE SPOKE ABOUT DEBUGGERS BECAUSE I KNOW THERE ARE DIFFICULTIES EVEN BUILDING LLBD SAY IF I WAS RUNNING AN CONTAINER. >> I RAN THAT ENTIRE DEMO FROM INSIDE A CONTAINER USING THE NEW DEV CONTAINER EXPERIENCE IN VS COLD AND VISUAL STUDIO. >> DO YOU NEED TO DO SOMETHING SPECIAL TO RUN IN A CONTAINER TO GET THIS TO WORK? >> WHEN YOU'RE RUNNING INSIDE A CONTAINER AND YOU WANT TO TAKE RASH DUMPS, YOU NEED TO ENABLE A COUPLE OF CAPABILITIES.

THE SIS AS WELL AS SETTING THE SECURITIES OPTIONS SET COMP UNDEFINED. >> OKAY. SO LET'S GO AHEAD AND RECAP WHAT WE JUST LEARNED ABOUT CAPTURING AND ANALYZING MEMORY DUMPS. SO RIGHT NOW WE DON'T HAVE ANY DUMP COLLECTION OR ANALYSIS ON MACRO S, BUT IT'S FULLY SUPPORTED ON WINDOWS AND LINUX INCLUDING ON 64 AND L DISTRIBUTIONS LIKE ALPINE. IT DOES NOT REQUIRE PSEUDO PRIVILEGES ON LINUX TO CAPTURE A DUMP, BUT YOU DO NEED P TRACE, SORRY, AND YOU DO NEED TO TURN OFFSET COM SO YOU CAN COLLECT THE DUMP.

THE COLLECTED DUMPS AREN'T PORTABLE. YOU NEED TO ANALYZE IT ON THE SAME OS ARCHITECTURE OR AT LEAST THE SAME ARCHITECTURE AND LIP C VERSION, DEPENDENCIES SO THAT YOU CAN ANALYZE IT. THAT WAS THE ABILITY TO COLLECT DUMPS AND ANALYZE THEM WITHOUT USING A DEBUGGER. >> YEP. >> ALL RIGHT. SO THE OBVIOUS NEXT QUESTION AFTER WE'VE INTRODUCED PEOPLE TO ALL THESE TOOLS, IS HOW DO WE ACQUIRE THESE TOOLS? SO THESE TOOLS SHIP AS .NET GLOBAL TOOLS. GLOBAL TOOLS IF YOU HAVEN'T HEARD OF BEFORE ARE JUST PACKAGES ON NUGET THAT HAVE AN EXECUTABLE AND THE .NET SDK KNOWS HOW TO EXTRACT THEM AND PLACE THEM ON YOUR POD SO YOU CAN RUN THEM.

ONCE YOU'VE ACQUIRED ALL THESE TOOLS, ONCE YOU DO .NET DUAL INSTALL, YOU SHOULD JUST BE ABLE TO DO .NET BASE COUNTERS LIKE HOW JOHN RAN THEM ON HIS MACHINE. IN ADDITION TO THE TOOLS WE MENTIONED, WE HAVE A COUPLE OF OTHER TOOLS. WE HAVE .NET SYMBOL, WHICH IS A TOOL TO DOWNLOAD ALL THE FILES NECESSARY FOR DEBUGGING. THAT INCLUDES SYMBOLS, MODULES, SOS, AND IT WORKS FOR MACRO S AND DUMPS AREN'T SUPPORTED QUITE YET, AND WE HAVE .NET SOS. WE SPOKE ABOUT HOW YOU DON'T NEED A DEBUGGER TO ANALYZE MEM RIP DUMPS BUT THERE ARE CASES WHERE YOU MIGHT NEED A NATIVE DEBUGGER TO LOOK AT NATIVE STACKS OR LOOK AT MANAGE TO NATIVE STACK TRANSITIONS.

DEASSEMBLY, THINGS THAT AREN'T POSSIBLE WITH JUST OUR HOSTED VERSION OF THE TOOL. FOR THOSE SCENARIOS WE HAVE A GLOBAL TOOL THAT ALLOWS YOU TO CONFIGURE LLDB AND SOS. ON WINDOWS IT'S EVEN EASIER BUT WE SHIP SOS AS PART OF THE WIN DBG EXTENSION. YOU SHOULD OPEN A PROCESS DUMP AND BE GOOD TO GO. MAKE SURE YOU HAVE A NEW ENOUGH VERSION OF WIN DBG. WITH ALL THOSE TOOLS COVERED, I THINK WE'RE READY TO TAKE QUESTIONS FROM PEOPLE. >> ALL RIGHT. THANK YOU, GUYS. LET'S SEE IF WE HAVE ANY QUESTIONS UP HERE. WE HAVE LIKE A TRY.NET JUPITER QUESTION. YEAH, IT DOESN'T SEEM LIKE WE HAVE TOO MANY QUESTIONS, BUT IS THERE ANYTHING ELSE YOU WANT TO ADD TO THE TALK? >> LET'S RECAP, SO THERE WERE A LOT OF CAPABILITIES WE COVERED.

>> YEAH. >> SO LET'S JUST — WE HAVE THIS BIG SCARY SLIDE THAT WE WERE, YOU KNOW, HOPING TO USE FOR ONE OF THE QUESTIONS, BUT WE TALKED ABOUT THINGS THAT WE'VE ADDED, SO WE'VE ADDED STUFF IN THE RUN TIME, SO THE RUN TIME NOW SYNTHESIZES COUNTERS. WE HAVE RUN TIME COUNTERS AND ASP NET COUNTERS. WE'RE LOOKING AT ADDING ADOEF COUNTERS. COUNTRS AND THESE CAN BE ENT – CONSUMED VIA THE EVENT PIPE, WHICH HAS — WHICH CAN BE CONSUMED IN PROCESS OR AN IPC STREAM. THESE CAN BE COLLECTED VIA YOUR LESS NATIVE EVENT MECHANISMS. SO WE HAVE SUPPORT FOR ETW ON WINDOWS. WE ALSO HAVE SUPPORT FOR LTGE. ONE OF THE THINGS WE'VE ALSO DONE IS IF YOU'RE USING ASP NET OR OTHER APP MODELS THAT MAKE USE OF I LOGGER. WE ACTUALLY PUMP ALL THE LOGS TO iLOGGER THROUGH THE — THROUGH EVENT SOURCE SO YOU CAN CONNECT OUT OF PROCESS TO YOUR RUNNING APPLICATION AND EGRESS SAY ASP NET LOGS WITHOUT HAVING LIKE, YOU KNOW, AND YOU CAN CHANGE THE FLY, DO THINGS LIKE THAT.

WE'VE ALSO ADDED THE ABILITY TO CAPTURE — PROCESS DUMP AND ANALYZE IT. >> COOL. WE ACTUALLY DO HAVE ONE QUESTION REAL QUICK. EVENT SOURCE DUMP LIKE EVENT VIEWERS DUMPS OR SOMETHING ELSE, CRASH DUMP IS THIS SOMETHING LIKE BLUE SCREEN CRASH DUMP AND WE HAVE TO USE CRASH ANALYZER TO OPEN THOSE FILES IS THE QUESTION? >> SO EVENT SOURCE IS A CLASS INSIDE OF THE RUN TIME THAT ALLOWS YOU TO ESSENTIALLY WRITE YOUR OWN EVENTING INTO YOUR APPLICATION. SO IT'S MORE AKIN TO BEING ABLE TO CALL AN EVENT AND SEE THAT IN A LOT OF RICH DETAILED INFORMATION. YOU CAN FEED OBJECTS INTO IT. YOU CAN FEED ADDITIONAL METADATA INTO IT, AND IT'S A LIGHTWEIGHT INFRASTRUCTURE FOR EGRESSING THAT OUT OF YOUR APPLICATION. CRASH DUMPS ARE STATE OF THE WORLD WHEN YOU HIT A CERTAIN POINT IN TIME.

SO YOU MENTIONED SIS INTERNALS. THERE ARE TOOLS LIKE PROK DUMP. THERE ARE LOTS OF OTHER WAYS OF COLLECTING CRASH DUMP, RIGHT CLICKING ON TASK MANAGER ON WINDOWS, USING LLG DIRECTLY WHEN YOU ARE WORKING ON NON-WINDOWS PLATFORMS AS WELL. >> GREAT, THANK YOU SO MUCH, GUYS. WE'RE GOING TO ACTUALLY RUN TO SOME COMMERCIALS RIGHT NOW, SO WE'LL BE RIGHT BACK. >>> HEY THERE, TREASURE HUNTERS. HERE'S THE NEXT CLUE FOR YOUR HUNT. YOUR JOURNEY, AND IT COMES TO US FROM OUR FRIENDS AT DEV EXPRESS, AND THEY RIDDLE YOU THIS. WE LOVE HELPING DEVELOPERS SOLVE THEIR TASKS, WHETHER THAT'S HELPING THEM WRITE CODE FASTER IN VISUAL STUDIO OR INTEGRATING POWERFUL UI CONTROLS INTO THEIR WIN FORMS, WPF, ASP.NET, JAVA SCRIPT, OR .NET KCORE APPLICATIONS.

OUR LOYAL CUSTOMERS LOVE US TOO, AND THERE'S A SPECIAL NUMBER THAT SHOWS JUST HOW MUCH. FOLLOW THE CLUES TO FIND IT AND CONTINUE ON THE TREASURE HUNT AT THIS ADDRESS. HEAD OUT THERE NOW, FOLLOW THEIR CLUES, AND RESPOND TO THE .NET BOT IN THE VISUAL STUDIO TWITCH CHANNEL, WHISPER THAT RESPONSE, THAT MAGIC NUMBER, AND YOU CAN BE WELL ON YOUR WAY TO THE NEXT STEP IN THE TECHNICAL TREASURE HUNT. >>> WE ARE IN THE EXCITING AND EVER CHANGING AGE OF BIG DATA. THE VOLUME VELOCITY AND VOLUME OF DRA TA HAS BEEN INCREASING MULTIFOLD IN RECENT YEARS.

THERE COULD BE THOUSANDS OF IoT SENSORS OR INTERNET OF THINGS SENSORS IN A FACTORY, EACH PRODUCING PETABYTES OF DATA. WHILE IT'S GREAT TO HAVE THAT MUCH DATA SO YOU CAN UNDERSTAND HOW OUR MACHINERY IS FUNCTIONING AND PLACES FOR IMPROVEMENT, HOW CAN WE ACTUALLY PROCESS IT ALL WHEN WE HAVE THAT MUCH? AND MORE THAN JUST THAT, HOW CAN WE PROCESS IT ALL QUICKLY AND EFFICIENTLY? WELL, WELCOME TO THE WORLD OF APACHE SPARK. HI, I'M BRIDGET MURTAW, AND I'M A PROGRAM MANAGER ON THE .NET TEAM HERE AT MICROSOFT.

IN THIS SERIES OF .NET APACHE SPARK 101 VIDEOS WE'RE GOING TO BE DIVING INTO THE EXCITING WORLD OF DAY ANALYTICS WITHIN THE .NET ECOSYSTEM. WHAT IS APACHE SPARK? APACHE SPARK IS A GENERAL PURPOSE DISTRIBUTING PROCESSING ENGINE FOR ANALYTICS OVER LARGE DATA SETS, TYPICALLY PETABYTES OR TERABYTES OF DATA, PUT MAYBE MORE SIMPLY, APACHE SPARK A GREAT TOOL WE CAN USE TO ANALYZE A LOT OF DATA IN A QUICK AND EASY TO UNDERSTAND WAY, SO YOU DON'T HAVE TO BE A DATA SCIENCE EXPERT TO USER UNDERSTAND IT. THERE'S QUITE A FEW USEFUL THINGS WE CAN DO WITH APACHE SPARK. THERE'S SPARK SEQUEL WHICH ALLOWS US TO — A DATABASE OF SOME SORT. THERE'S SPARKS STREAMING WHICH ALLOWS US TO ANALYZE AND GAIN INSIGHTS FROM DATA LIVE AS IT'S BEING PRODUCED SO IN OUR FACTORY EXAMPLE WE COULD GAIN MEANINGFUL INSIGHTS FROM OUR DATA LIVE AS IT'S COMING FROM OUR IoT SENSORS.

IF THERE'S SOME SORT OF MALFUNCTION OF THE EQUIPMENT, WE COULD DETECT IT AND GO ADDRESS IT. THERE'S ALSO MACHINE LEARNING CAPABILITIES WITH APACHE SPARK SO THAT WE CAN COMBINE THE POWERS OF BIG DATA AND MACHINE LEARNING TO GET FASTER TRAINING AND OR PREDICTION. >>> THERE'S ALSO VISUALIZATION OPPORTUNITIES WE CAN GAIN MEANINGFUL INSIGHTS INTO OUR DATA THROUGH GRAPHS OR PLOTTING OR OTHER VISUAL MEANS.

SO IN ORDER TO UNDERSTAND HOW APACHE SPARK WORKS, THERE'S ONLY THREE MAIN COMPONENTS THAT WE NEED TO DISCUSS. THE FIRST ONE IS THE DRIVER. THE DRIVER CONSISTS OF THE USER'S PROGRAM, SO FOR INSTANCE, THAT COULD BE A C SHARP CONSOLE APPLICATION YOU'VE WRITTEN. IT ALSO CONSISTS OF THE SPARK SESSION, SO THE JOB OF A SPARK SESSION IS TO TAKE THE USER'S PROGRAM, SO TO TALK THAT C SHARP CONSOLE OUT AND TO DIVIDE IT INTO SMALLER PIECES, WHICH CAN BE KNOWN AS TASKS. THOSE TASKS WILL BE DIVIDED AMONG OUR SECOND COMPONENT, WHICH ARE THE EXECUTORS OR THE WORKER NODES. EACH WORKER NODE IS GOING TO GET ITS OWN TASK AND WITH THAT IT WILL BE ABLE TO EXECUTE A ■SMAL PART OF OUR USER'S PROGRAM. THE THIRD COMPONENT OF OUR ARCHITECTURE IS THE CLUSTER MANAGER, WHICH HELPS MANAGE ALLOCATION OF RESOURCES AND HOW OUR PROGRAM OVERALL GETS DIVIDED AND THEN EXECUTED IN THE END.

SO NOW THAT WE KNOW HOW APACHE SPARK WORKS, IT SOUNDS GREAT. I WANT TO BE ABLE TO USE IT TO ANALYZE ALL OF MY DATA, ALL OF MY TERABYTES AND PETABYTES OF DATA, BUT UP UNTIL NOW THE POPULAR WERE WRITTEN IN LANGUAGES LIKE PYTHON, WHAT IF I WANT TO USE APACHE SPARK WITH MY PRE-EXISTING .NET CODE OR KNOWLEDGE. WE NOW HAVE A GREAT SOLUTION, AND IT'S KNOWN AS .NET FOR APACHE SPARK.

SO IF I GO TO THE .NET WEBSITE, WHICH IS JUST DOT.NET, I CAN SCROLL DOWN AND FIND THE MACHINE LEARNING SECTION. WE'VE COMBINED THE MACHINE LEARNING AND BIG DATA SECTIONS TOGETHER. I'LL GO PAST ML.NET NOW AND I'LL SEE DOT.NET FOR APACHE SPARK. IT'S A FREE OPEN SOURCE AND CROSS PLATFORM BIG DATA ANALYTICS FRAMEWORK, LIKE SOME OF THE SNA R OWES WE MENTIONED EARLIER LIKE SPARK SQL AND MACHINE LEARNING, WE CAN USE .NET FOR APACHE SPARK FOR ALL OF THESE APPLICATIONS. THE .NET BINDINGS FOR SPARK ARE DESIGNED TO PROVIDE HIGHER PERFORMANCE FOR MULTIPLE LANGUAGES. IT'S ALSO COMPLIANT WITH .NET'S STANDARD MEANING ANYWHERE THAT YOU ALREADY HAVE C SHARP OR F SHARP CODE YOU'LL BE ABLE TO USE .NET FOR APACHE SPARK MEANING YOU CAN FINALLY USE BIG DATA ANALYTICS. AS WE MENTIONED, .NET FOR APACHE SPARK IS OPEN SOURCE, SO YOU CAN GO AHEAD AND CHECK OUT THE GITHUB TO LEARN MORE AND CONTRIBUTE TO THE OPEN SOURCE COMMUNITY THERE.

THANKS FOR JOINING ME IN THIS VIDEO WHERE WE LEARNED ALL ABOUT APACHE SPARK AND THE EXCITING NEW TOOL KNOWN AS .NET FOR APACHE SPARK. STAY TUNED TO THE OTHER 101.NET FOR APACHE SPARK VIDEOS TO LEARN ABOUT ALL OF THE EXCITING APPLICATIONS WE CAN START BUILDING AND RENTING USING BIG DATA ANALYTICS HAVE HAD A LOT O ANNOUNCEMENT. .NET CORE AND VISUAL STUDIO FOR MARK. TODAY WHAT I WANTED TO SHOW YOU AND WHY I WANTED TO PICK UP THIS SESSION IS BECAUSE I WANTED TO SHOWCASE THAT WITH .NET YOU CAN BUILD SOME AMAZING THINGS, INCLUDING GAMES, RIGHT? OUR AGENDA FOR TODAY IS VERY SIMPLE. I AM GOING TO INTRODUCE UNITY, AND THEN ALSO HOW TO GET STARTED IF YOU HAVE NEVER DONE UNITY GAMING BEFORE LIKE I HAVEN'T.

IT'S A GOOD EXPERIENCE TO SEE HOW YOU CAN SET UP YOUR MACHINE. THEN WHY YOU WANT TO USE VISUAL STUDIO OR VISUAL STU FODIO FOR . AND FINALLY, WHY VISUAL STUDIO IS SO WELL ALIGNED WITH UNITY AND WHAT MAKES IT SUCH A GREAT PRODUCT FOR DEBUGGING OR WRITING GAMES OR 3D REAL-TIME APPLICATIONS. HOPEFULLY, AT THE END WE LEAVE YOU WITH LEARNING MATERIALS AND OF THE DAY.FOR THE NEXT SESSION- UNITY, OF COURSE, IS THE MOST WIDELY USED REAL-TIME 3D FRAMEWORK. IT STARTED AS GAMING, BUT NOW THEY ARE TARGETING DIFFERENT INDUSTRIES. THE GOAL THERE IS TO GIVE YOU THE TOOLS TO CREATE APPLICATIONS FOR NOT JUST GAMES, BUT 3D REAL-TIME APPLICATIONS. THEY ARE THE MOST WIDELY KNOWN ENGINE. ANY BUILD IN .NET. IF YOU ARE A .NET DEVELOPER, THERE IS NOTHING STARTING YOU FROM WRITING GAMES TODAY.

AND THE NICE THING ABOUT UNITY IS THAT YOU DON'T JUST HAVE ONE PLATFORM, BUT OVER 25 DIFFERENT PLATFORMS FOR XBOX, WHETHER YOU WANT TO BUILD SOLUTIONS FOR THE RUN ON WINDOWS OR MAC OS. MOBILE GAMES ARE FANTASTIC THESE DAYS. MANY TEPEOPLE ARE MONETIZING TH. IF YOU WANT TO BUILD THINGS FOR THAT, THAT'S THERE. pTVOS. THE PLATFORM IS INSANE. TAKING YOUR .NET SKILLS WITH UNITY AND OUR IDs MEANS YOU CAN BUILD ALMOST ANYTHING FOR ANY PLATFORM OUT THERE. AND GETTING STARTED, OBVIOUSLY, THE FIRST THING YOU NEED DO AND BE AWARE OF AND EVER SINCE 2019.2 VERSION OF UNITY THINGS HAVE CHANGED HOW YOU INSTALL UNE TILL. THERE ARE TWO WAYS. ONE GO TO THE UNITY WEBSITE AND DOWNLOAD THE INSTALLER AND THAT ALLOWS YOU TO ACTUALLY GO AND GET WHAT YOU NEED. A UNITY FIRST EXPERIENCE. MANY DEVELOPERS WILL START FROM THERE. IF YOU ARE A VISUAL STUDIO DEVELOPER THERE IS A WAY TO ADD THE WORKLOAD TO ALLOW YOU TO GET STARTED. SO WE WILL SEE HOW YOU DO BOTH. IF YOU ARE INSIDE VISUAL STUDIO SELECT THE GAME DEVELOPMENT WITH UNITY AND THAT DOWNLOADS UNITY FOR YOU.

AND IF YOU ARE ALREADY ON UNITY, YOU CAN ADD THE COMPONENTS THAT YOU NEED. SO IF YOU ARE ON MAC OS, IT WILL DOWNLOAD FOR MAC COMPONENTS. FOR WINDOWS, IT'S CLEVER ENOUGH TO LET YOU KNOW YOU NEED TO DOWNLOAD VISUAL STUDIO. I ALREADY HAVE BOTH, THE INSTALLERS HERE. SO IF YOU ARE IN VISUAL STUDIO INSTALLER, GO TO MODIFY. IT KICKS OFF THE MODIFICATION OF THE LATEST VERSION THAT YOU ARE USING. TODAY WE ARE USING 16.3, WHICH IS THE LATEST AND GREATEST. IF I SCROLL DOWN HERE YOU WILL FIND I ALREADY HAVE SELECTED A GAME DEVELOPMENT WITH UNITY. IF YOU DON'T HAVE IT SELECTED, IT WILL BRING DOWN THE NECESSARY DEPENDANCIES. SO I CAN CLOSE THAT OFF. A IF I GO TO THE UNITY HUB, UP UNTIL THIS POINT THAT DIDN'T EXIST, SO YOU WOULD DOWNLOAD DIRECTLY UNITY AND GET STARTED. NOW THEY HAVE A UNITY HUB LIKE THE VISUAL STUDIO INSTALLER AND IT ALLOWS YOU TO ADD MULTIPLE VERSIONS BECAUSE CERTAIN THINGS MAY NOT BE WORKING WITH THE LATEST VERSION OF UNITY, ESPECIALLY THEIR COMPONENT ENGINE.

SO HERE YOU JUST COME TO INSTALL. YOU ADD YOUR INSTALLATION AND THEN FROM HERE YOU CAN ALSO ADD MODULES. IN THIS INSTANCE WE ALREADY HAVE THE UNITY GAME DEVELOPMENT BECAUSE WE WENT FROM THE VISUAL STUDIO WORKFLOW FIRST. BUT IF YOU DON'T ARE HAVE IT, IF YOU START WITH UNITY, THAT'S THE WAY YOU GET STARTED. THAT'S ALL YOU NEED. AS SOON AS YOU DO THAT, IF WE JUMP BACK THE SLIDES, YOU NOTICE THAT THERE ARE CERTAIN THINGS BOTH INSIDE UNITY AND THE VISUAL STUDIO INSTALLER THAT SHOW YOU THAT EVERYTHING HAS BEEN CONFIGURED CORRECTLY.

SO WE'RE READY TO GO WITH THIS ONE. WHAT THIS ONE IS TELLING HERE FOR THE EXTERNAL TOOLS, IF YOU ARE WORKING WITH UNITY AND YOU ARE ON WINDOWS, IT HAS ALREADY RECOGNIZED VISUAL STUDIO 2019 AS PRESENT AND DETECTING THE EDITOR ATTACHING. AS YOU WRITE YOUR CODE FOR YOUR GAMES, YOU WANT TO MAKE SURE THAT YOU CAN DEBUG THE CODE, RIGHT. AND YOU WANT TO DO IT IN VISUAL STUDIO BECAUSE IT'S THE BEST EDITOR OUT THERE.

SO NEXT WE ARE GOING TO LOOK AT WHY WOULD YOU WANT TO USE VISUAL STUDIO OR VISUAL STUDIO FOR MAC. THERE ARE — IF YOU HAVE BEEN DEVELOP FOR A LONG TIME WITH VISUAL STUDIO, YOU PROBABLY KNOW SOME OF THESE CAPABILITIES. BUT IF YOU ARE NOT, IF YOU ARE NEW TO VISUAL STUDIO OR IF YOU ARE JUST FOCUSED ON UNITY, I WOULD LIKE TO HIGHLIGHT SOME OF THE BIG FEATURES HERE. ABSOLUTELY, AS YOUR CODE GROWS, YOU WANT TO QUICKLY JUMP IN THE CODE AND CHANGE THINGS, MOVE THEM AROUND, CLEAR YOUR CODE AND WHAT HAVE YOU.

SO YOU CAN ALWAYS USE THE MOUSE AND RIGHT CLICK ON A LINE OR YOU CAN USE CONTROL OR COMMAND DOT. AND GO STRAIGHT TO DEFINITIONS. I WILL SHOW THESE IN THE DEMO VERY QUICKLY. NAVIGATE THE COMPILE ASSEMBLIES, SUGGESTIONS FOR VARIABLE NAMES. I.D. GUIDES YOU THROUGH GOOD PRACTICES AND TRIES TO GIVE YOU THE TOOLS YOU NEED TO BUILD GOOD CODE. SO IF YOU ARE CREATING A METHOD THAT YOU WANT TO DUPLICATE, FOR EXAMPLE, WE CAN QUICKLY DO THAT IN THE CODE. THERE ARE A LOT OF TOOLS THERE TO MAKE YOU MORE PRODUCTIVE WITH THE SCRIPTING IN YOUR GAMES. MOVE TCURSOR MODE, EDITING. GLOBAL SEARCH IS VERY BIG. IF YOU HAVE A BIG CODE BASE AS YOUR CODE BASE GROWS, YOU WANT TO KQUICKLY SEARCH AND FIND DIFFERENT COMPONENTS IN YOUR CODE.

IF YOU HAVE BIG BLOCKS OF CODE. FINALLY, WHETHER YOU ARE WORKING ON VISUAL STUDIO OR VISUAL STUDIO FOR MAC AND YOU LIKE A SPECIFIC SET OF BINDINGS, WE GIVE YOU THE ABILITY TO ACTUALLY SWITCH THE BINDINGS AROUND. SO IF YOU ARE IN VISUAL STUDIO MAC, THERE IS A SETTING THERE THAT TELLS YOU I WANT TO USE MY VISUAL STUDIO KEY BINDINGS. SINCE I HAVE BOTH MACHINE AS WELL, I LIKE TO HAVE THAT CONSISTENCY ACROSS THE TWO I.D.s. SO YOU CAN DO THAT AS WELL. NEXT ONE WE HAVE INTELLICODE. SOME PEOPLE MAY ALREADY KNOW INTELISENSE AND INTELLICODE IS THE NEXT LEVEL.

IT'S THE A.I.-GUIDED INTELLIGENCE YOU GET INSIDE YOUR CODE. IT'S ALWAYS CONTEXT AWARE AS WELL. I WILL DO A DEMO ON HOW INTELLICODE WORKS AND HOW YOU CAN IMPROVE YOUR GAME CODING. VISUAL STUDIO LIVE, THIS IS LIFE-CHANGING EXPERIENCE. UP UNTIL THIS POINT YOU MAY BE HAVE BEEN DEVELOPING IN TEAMS OR DEVELOPING IN ISOLATION AND YOU ALWAYS GET STUCK. THERE IS ALWAYS THE INTERNET, BUT THERE IS NOTHING AS SOMEBODY OUT THERE THAT CAN HELP YOU OUT. SO USING LIVE, YOU CAN ACTUALLY SET UP A SESSION TO SHARE YOUR EXISTING CODING ENVIRONMENT WITH SOMEBODY ELSE. SO THERE COULD BE SITTING THREE HOURS AWAY FROM YOU WATCHING TV ON THEIR, YOU KNOW, ON THE SURFACE GO AND THEN YOU CALL AND SAY I'M STUCK WITH THIS SOLUTION HERE IN MY GAME. I DON'T KNOW WHAT TO DO. CAN YOU HELP ME OUT? YOU CAN HAVE A SESSION INSIDE VISUAL STUDIO. THEY COULD BE SITTING ON THEIR SOFA AND PLAYING WITH THEIR VISUAL STUDIO CODE, DOING SOME WEB DEVELOPMENT. THEY DON'T NEED TO HAVE THE EXACT SAME SETUP. SO IT ALLOWS YOU TO UNBLOCK, ALLOWS YOU TO SHARE YOUR ENVIRONMENT AND FIND SOLUTIONS TO PROBLEMS.

SOMETIMES YOU CAN USE IT AS A LEARNING EXPERIENCE AS WELL. SO THAT IS REALLY IMPORTANT. I WILL SHOW YOU HOW TO DO THAT IF YOU WANT TO. WE HAVE BUILDING SOURCE CONTROL. OBVIOUSLY, IF YOU ARE USING GATE, WE HAVE BUILT IN I.D. SUPPORT THERE. WE HAVE REAL-TIME CODE ANALYSIS. THT'S VERY IMPORTANT AS YOU WRITE YOUR CODE, YOU WANT TO HAVE REAL-TIME FEEDBACK. YOU DON'T WANT TO HAVE TO WRITE YOUR CODE, SAVE IT AND BUILD IT ONLY TO FIND OUT THAT SOMETHING IS NOT AS YOU WOULD LIKE IT TO BE. THAT ALSO INCLUDES SOME OF THE THINGS THAT I'LL BE TALKING LATER LIKE ANALYZERS AND GETTING IMMEDIATE FEEDBACK ABOUT THE QUALITY OR THE ERRORS IN YOUR CODE. EDITOR CONFLICT IS VERY BIG. PEOPLE TALK THROUGHOUT THE CONFERENCE SO FAR ABOUT HOW IT TIES WITH VISUAL STUDIO OR VISUAL STUDIO FOR MAC. AND FOR THOSE PEOPLE THAT HAVE NOT USED EDITOR CONFLICT BEFORE, IT'S A WAY TO ACTUALLY DEFINE AND CODE HOW THE CODE SHOULD LOOK AND BEHAVE, HOW YOU WANT YOUR VARIABLES TO BE DECLARED, HOW YOU WANT YOUR SPACES AND TABS TO BE DECLARED IN YOUR CODE IF YOU WANT TO GO DOWN THE ROUTE.

AND BECAUSE IT'S A FILE THAT IS CHECKED INTO YOUR SOLUTION, IT FOLLOWS THE CODE EVERYWHERE YOU GO. IF A NEW DEVELOPER JOINS THE TEAM, EDITOR CONFLICT ALLOWS THEM TO PICK UP THE EXACT SAME CODE HABITS IF YOU WANT AND APPLY TO THE CODE BASE AS THEY CODE. IT GIVES YOU A QUICK GLANCE ABOUT HOW YOUR CODE HAS CHANGED OVER THE TIMES AND OVER THE YEARS, HOW MANY CHECK-INS FOR A SPECIFIC METHOD.

OTHER CAPABILITIES, OBVIOUSLY, IF YOU ARE CHANGE AG CROSS MACHINES, IF YOU ARE WORK AT THE OFFICE AND COME HOME AND PICK UP THE WORK YOU CAN SYNCHRONIZE YOUR SETTINGS FOR THE I.D.s ACROSS THOSE DEVICES AND THOSE ENVIRONMENTS. SO YOU CAN HAVE A CONSISTENT WINDOWS LAYOUT. YOU CAN HAVE A VERY CONSISTENT LOOK AND FEEL. SO IF YOU PREFER DARK THEMES, THAT'S HOW IT WORKS. THEN WE HAVE CUSTOM SCREEN LAYOUTS WHICH YOU CAN SAVE AND TAKE THEM WITH YOU. AND IF YOU DIDN'T KNOW, SUPPORT LIGHT AND DARK THEMES ON YOUR I.D. TO MAKE IT LOOK AND FEEL AS YOU WOULD LIKE TO. SO NEXT I'M GOING TO JUMP TO A COUPLE OF DEMOS AND WE ARE GOING TO TALK ABOUT SOME OF THE THINGS I HAVE SHOWN YOU ALREADY.pSO MO HAVE TALKED ABOUT FACTORING. WHEN YOU ARE SITTING IN YOUR I.D., YOU CAN CONTROL DOT AND GET INTELISENSE SAYS WE CAN REMOVE THOSE USINGS AND MAKE SURE YOU DON'T HAVE THEM ANYMORE.

FIX ALL DOCUMENTS, PRODUCTS, AND SOLUTIONS. IF YOU ARE BRAVE ENOUGH, YOU CAN APPLY THOSE SOLUTIONS ACROSS. IT SAYS I CAN PREVIEW CHANGES AND APPLY THEM. WE HAVE THINGS LIKE — LET ME GO TO ANOTHER ONE. WE HAVE FIXES. WE TALKED ABOUT THE MULTI-EDITING. IF I WERE TO SAY ADD NEW METI YOU, CONTROL ALT DOT AND SELECT MULTIPLE LOCATIONS OR CONTROL SHIFT DOT. SORRY. CONTROL ALT. SELECT ONE. THAT SEEMS TO NOT BE WORKING. I'LL MOVE ON. WE CAN DO MULTILINE EDITING. IF YOU WANT TO CHANGE FROM PRIVATE TO PUBLIC, GO PUBLIC, AND AUTOMATICALLY APPLIES. AGAIN WITH THIS REPORT MULTI-EDITING ACROSS THE FILES. . WE DON'T WANT TO BREAK OUR CODE. OKAY. SO THIS ONE I DID TALK ABOUT EDITOR CONFIGURE. THEY JUST WAIT TO SHOWCASE THESE.. THEY JUST WAIT TO SHOWCASE THESE.

THE EASIEST WAY TO GET STARTED IS IF YOU JUMP ON GITHUB, THEY PRETTY WELL FWEETWEAKED SO FAR. YOU WILL SEE WE HAVE ALL THESE DIFFERENT SETTINGS. OBVIOUSLY, YOU CAN ALSO CHANGE THEM TO FIT YOUR TEAM'S NEEDS, AND THAT MEANS IF YOU WANT TO BREAK OR IF YOU WANT TO GO FROM A WARNING TO AN ERROR, THEN IT WILL IT ALLOWS YOU TO. THIS IS A SUGGESTION. YOU CAN CHANGE IT TO ERROR AND THEN THAT WOULD CAUSE EVERYBODY TO ACTUALLY GO AND FIX THEIR ISSUES. BUT IF I GO BACK UP, I'LL PICK UP SOMETHING THAT IS WELL DEBATED AND A HEATED CONVERSATION. I WILL GO WITH TAB AND SAVE THAT. SAVING. IT'S THINKING ABOUT IT. THERE YOU GO.

IF I SWITCH BACK TO MY CODE, RIGHT NOW I HAVE FOUR SPACES EVERYWHERE. BUT IF I DO CONTROL K AND CONTROL D, AUTOMATICALLY IT APPLIES THE EDITOR CONFLICT SETTINGS TO MY CODE. AS SOON AS YOU ADD YOUR EDITOR CONFLICT, YOU CAN APPLY THE SETTINGS TO YOUR FILES, WHICH IS FANTASTIC. YOUR TEAM CAN HAVE A CONSISTENT CODE BASE THERE. DON'T SAVE THAT ONE, OBVIOUSLY.

LET ME GO BACK AND REVERT THAT BECAUSE I AM PRETTY SURE MY TEAM WILL BE UPSET ABOUT THAT. SAVE THAT. THAT APPLIES. I DID SAY, I DID MENTION ABOUT LIVE SHARE. SO IF YOU HAVE NEVER USED LIVE SHARE, IT'S VIBL OAVAILABLE ON STUDIO AND VISUAL STUDIO CODE. YOU DON'T HAVE TO HAVE THE SAME ENVIRONMENT ON THE TARGET MACHINE. YOU CAN GO INTO LIVE SHARE. IT'S ALREADY KICKED OFF A SHARING SESSION. I DON'T HAVE ANYONE RIGHT NOW TO SHARE WITH. BUT IF I GO INTO MORE INFO, YOU WILL NOTICE THAT IS SAYS COPY THIS URL, SEND SOMEBODY ELSE RMS AND WITH THAT THEY CAN JOIN YOUR SESSION AND SHARE EXACTLY WHAT YOU SEE HERE, WHICH IS FANTASTIC, ESPECIALLY YOU ARE N GAMES DEVELOPING AND YOU ARE NEW AND YOU NEED HELP THROUGHOUT I AM GOING TO STOP THAT LIVE SHARE IN CASE ANYBODY WANTS TO JOIN.

I WILL GO BACK TO SOME OF THE OTHER THINGS I TALKED. LET'S SEE WHAT ELSE WE HAVE. BUILDING SOURCE CONTROL. LET ME SHOW YOU THAT ONE. WITH SOURCE CONTROL AGAIN YOU WILL AUTOMATICALLY PICK UP, I WAS USING GIT LOCAL HERE. THERE IS A LOT OF FILES THAT HAVE CHANGED THROUGHOUT MY EDITING. YOU CAN ALSO USE AN EXCLUDE. SO GIT IGNORE TO EXCLUDE SOME OF THE FILES. OBVIOUSLY, YOU DON'T WANT TO CHECK IN EVERYTHING ON YOUR SOURCE CODE. LIGHT AND DARK THEMES. WITH THE SETTINGS, IF YOU DIDN'T KNOW, YOU CAN CREATE CUSTOM SETTINGS AS WELL. IF YOU WANT A VERY SPECIFIC LAYOUT FOR YOUR GAMES DEVELOPMENT, I WANT TO IGNORE YOUR DEBUG, IGNORE OTHER THINGS, WINDOWS THAT ARE NOT LIKE TOOLBOX, YOU CAN COME HERE, CREATE YOUR SESSION — YOUR LAYOUT, AND THEN YOU CAN APPLY IT. I KNOW WHERE YOU ARE. THESE SETTINGS CARRY WITH YOU AS SOON AS YOU LOG INTO VISUAL STUDIO WITH YOUR ACCOUNT. SO IF I WERE TO CHANGE THE WEB LAYOUT, AND THEN IT DOES THAT. THERE YOU GO. VERY DIFFERENT, RIGHT? I WANT TO GO BACK TO THE DEFAULT ONE BECAUSE I DON'T LIKE THIS ONE.

I CREATED ONE FOR UNITY, BUT IT'S FINE. SO I'LL ABOUT BACGO BACK TO MY DEFAULT LAYOUTS. FANTASTIC. INTELLICODE I WILL SHOW YOU IN A BIT AND EXPLAIN WHY REAL TIME ANALYZERS, WE HAVE ROSIN, YOU CAN DOWNLOAD AND INSTALL. THE I.D. COMES WITH DEFAULT ANALYZERS. AS I TYPE, YOU MIGHT COME BACK WITH A SUGGESTION SAYING YOU ARE MISSING AN UNDERSCORE PREFIX OR COULD MAKE THIS — SO STRAIGHTAWAY IT TRIES TO MAKE ME A BETTER DEVELOPER BY PROVIDING SOME SUGGESTIONS FOR MY CODE. AND IT'S VERY POWERFUL. THEY RUN IN REAL TIME AS YOU TYPE YOUR CODE, SO YOU DON'T HAVE TO SAVE AND BUILD BEFORE YOU FIND OUT THERE ARE SOME WARNINGS AGAINST YOUR CODE.

MOVING ON. I WANT TO HIGHLIGHT WHY VISUAL STUDIO IS SO IMPORTANT WITH UNITY AND WHY WHEN YOU USE THEM TOGETHER, THEY SET YOUR CODE ON FIRE. YOU BECOME A LOT MORE EFFICIENT. OBVIOUSLY, INTELLICODE NOW HAS BEEN DESIGNED TO WORK WITH MOST OF THE C# DEFAULT PRODUCTS. OUR TEAM IS WORKING TO BRING IT INTO INTELLICODE. WE ARE SCANNING OUR CODE BASES OUT THERE TO MAKE SURE THAT WE PICK UP THE BEST SKILLS FOR YOUR UNITY GAMES.

AND INTELLICODE GOES ONE STEP ABOVE SINTELISENSE. IT WILL PROVIDE YOU WITH THE BEST IDEAS AS YOU TYPE. VISUAL STUDIO COMES WITH SUPERIOR DEBUGGING. WE HAVE THE ABILITY TO SET UP TRACE POINTS AND BREAK POINTS AND REALLY DIG THROUGH THE CODE. THERE HAVE BEEN ALREADY SESSIONS THAT SHOW ADVANCED TIPS AND TRICKS ON HOW TO DEBUG USING VISUAL STUDIO. I WILL URGE YOU TO GO AND SEE THESE. WE ALSO ADDED A UNITY PRODUCTS EXPLORER. IF I SWITCH BACK TO MY VISUAL STUDIO, YOU WILL NOTICE THAT — I DON'T HAVE IT ON HERE. IF I SEARCH FOR UNITY, YOU WILL NOTICE IT HAS UNITY PROJECT EXPLORER. SO THAT BRINGS UP, IT GIVES YOU A SIMPLIFIED VERSION OR A LOOK AND FEELING OF YOUR FILES AND YOUR ASSETS, SO YOU DON'T HAVE TO GO THROUGH THE STANDARD SOLUTION EXPLORER. SO WE HAVE AN OPTIMIZED EXPERIENCE FOR YOU. THAT'S IN PLAY. GOING BACK TO THE I.D. UP UNTIL THIS POINT WE HAD ATTACH.

SO YOU HAD TO SPIN UP THE GAME. SO YOU HIT SPIN UP THE VISUAL STUDIO ATTACHED TO UNITY AND HAD TO GO BACK TO THE UNITY EDITOR AND SPIN UP THE GAME AND THE BREAK POINT IS HERE IN ORDER TO BE ABLE TO ATTACH. BUT NOW, LO AND BEHOLD, WE HAVE ATTACHED THE UNITY IN PLACE RIGHT AWAY. SO IT WILL KICK OFF YOUR GAME END-TO-END.

IF I WERE TO TRY THIS ONE, I KNOW WE CAN ALSO PUT A BREAK POINT OVER HERE. WE WILL KICK OFF MY AWESOME GAME. IT'S NOT AWESOME, BUT I DID SPEND AN AFTERNOON WRITING THIS GAME. I WANTED TO PROVE AS A .NET DEVELOPER I CAN WRITE SOMETHING IN UNITY AND IN NOT A LOT OF TIME. LET'S SAY FOUR OR FIVE HOURS I WAS ABLE TO PUT THIS THING TOGETHER. SO LET'S SEE IF IT'S KICKED OFF. THE BREAK POINT IS THERE. IF I'LL GO TO MY GAME, I AM TRYING TO SHOW IT NOW. MAYBE. LET ME STOP THAT ONE. I WILL BRING IT BACK TO FOCUS. SO THAT'S MY GAME. A VERY BASIC GAME. I CREATED A CAR AND PUT SOME OBSTACLES ON THE ROAD. I AM TRYING TO CIRCUMNAVIGATE AROUND THEM. SO I HAD NO KNOWLEDGE OF THAT. I HAVE USED SOME READY-MADE COMPONENTS. SO UNITY MAKES IT VERY EASY TO ACTUALLY CREATE A WHOLE WORLD OUT OF READY-MADE ASSETS.

ALL YOU HAVE TO DO LITERALLY IS WRITE THE EXPERIENCE OR THE BEHAVIOR AROUND THESE OBJECTS AND HOW YOU WANT THEM TO BEHAVE. RIGHT NOW BEFORE WE ARE STARTING CODING ANYTHING THESE WERE JUST SITTING THERE. S WHAT I DID IS ACTUALLY ADD MUSIC CONTROLS TO NAVIGATE AROUND THE CAR AND THEN I WANTED TO ALSO ADD THE BEHAVIOR OF MOVING THE CAMERA BEHIND THE CAR SO IT FOLLOWS THE CAR AS IT GOES THROUGH. AND LATER IN THE GAME, OR IN MY TALK, WE ARE GOING TO HAVE BEHAVIOR, WHICH IS EXPLODING.

THERE IS NO EXPLOSION, RIGHT? SO I WANTED TO MAKE SURE IF YOU ATTACH THE CRATE, IT EXPLODES. SO RIGHT NOW WE'RE HERE. YOU SEE IT ACTUALLY HAS KICKED OFF THE GAME. SO I CAN — THERE YOU GO. WE CAN NAVIGATE AROUND THE SPACE. IT'S VERY BASIC. I SHOWED THEM TO MY DAUGHTERS WHO WERE NOT VERY IMPRESSED. THEY PLAY XBOX. WHEN I SHOWED THEM THIS THEY WERE EXCITED, BUT IT DIDN'T PAN OUT WITH THEM. AS YOU CAN SEE, I CAN ALREADY CONTROL IT. THE CODE THAT I NEEDED TO WRITE TO MAKE THIS HAPPEN WAS LITERALLY A FEW LINES OF CODE. IN THIS INSTANCE FOUR LINES OF CODE THAT CONTROL THE FORWARD AND BACKWARD AND THE SIDEWAYS MOVEMENT.

AND THEN ONE MORE LINE OF CODE THAT ACTUALLY ALLOWS US TO CONTROL THE CAMERA. NOW, I DID SPEAK ABOUT INTELLICODE AND HOW IT WORKS FOR US. SO IF I WERE TO DO TRANSFORM HERE AND THEN DO A DOT, YOU NOTICE THAT WE DO HAVE POSITION, LOCAL SCALE. THE INTELLICODE TELLS THE CODE THAT YOU MIGHT WANT TO USE THESE FIRST BECAUSE THESE ARE THE MOST COMMON ONES IN THE CONTEXT OF THE UPDATE. SO MAYBE YOU WANT TO PICK THESE UP RATHER THAN TRY TO FIND THROUGH THE ASP. AS YOU CAN SEE, IT'S A MASSIVE ASP HERE. I HAVE NO IDEA WHAT I AM TO DO. INTELLICODE HELPS ME FOCUS ON THE THINGS THAT REALLY MATTER. THE NICE THING IS THAT IF YOU GO INTO A STATEMENT, IT WILL ACTUALLY CHANGE THE WHOLE EXPERIENCE. SO LET'S SAY IF I GO DOWN HERE AND SAY IF, AND THEN TRANSFORM, AND DOT. YOU NOTICE IT'S CHANGED SLIGHTLY.

SO IT GIVES US THE ROOT, WHICH WAS NOT THERE BEFORE. ALSO A CHILD OBJECT. SO IT LOOKS FOR LIKE IF TRANSFORM HAS CHILD OBJECTS, YOU MIGHT WANT TO DO SOMETHING. SO INTELLICODE HONES INTO THOSE PARTS OF THE ASP THAT DO MAKE SENSE TO YOU. I DID TALK ABOUT INTELLICODE. YES. ONE MORE THING ABOUT INTELLICODE. WE ALREADY HAVE THE AUTOMATIC INTELLICODE WHICH DOES A LOT OF THINGS OUT OF THE BOX FOR US, BUT YOU CAN TAKE IT ONE STEP FURTHER BY TRAINING INTELLICODE TO APPLY SPECIFICALLY TO YOUR CODE BASE. SO IF YOU SEARCH FOR INTELLICODE UP HERE, INTELLICODE, YOU NOTICE THAT THERE IS AN INTELLICODE MODEL MANAGEMENT. AND WHAT THIS DOES IS ALLOWS YOU TO SUBMIT YOUR CODE TO OUR INTELLICODE ENGINE TO CREATE THE MODEL THAT YOU NEED TO APPLY TO YOUR MACHINE. AND THAT MAKES IT VERY SPECIFIC TO YOUR CODE BASE. YOU CAN ALSO SHARE THAT WITH THE REST OF THE TEAM. THAT MAKES EVERYBODY MORE EFFICIENT.

IF YOU HAVE A LOT OF CODE BASE WITH A LOT OF CLASSES THAT YOU WANT TO QUICKLY BRING TO THE TO DO THAT.TELLICODE ALLOWS YOU- YOU ALSO HAVE A CUSTOM MODEL FOR UNITY TO ALLOW YOU TO BE EVEN MORE EFFICIENT JUMPING BACK INTO OUR UNITY. LAST THING I WANTED TO DO IS, OBVIOUSLY, SHOW YOU SOME OF THE GOOD THINGS IN VISUAL STUDIO. WE DO HAVE THE ABILITY NOW TO CREATE C# FILES DIRECTLY IN THE UNITY PROJECT IN THE EXPLORER. WE WANTED TO MAKE SURE AS YOU CHANGE YOUR CODE FROM UNITY, THE PROJECT RELOADS MUCH FASTER. WE WANT TO HAVE REDUCED TIME FOR DEBUGGING. SO NO MANY DELAYS. WE ALSO TO WANT TO POR MORE SAFE CODE DEBUGGING OPTIONS AND UNITY SPECIFIC ANALYZERS AND DIAGNOSTICS. AND WE ARE SUPPRESSING NONAPPLICABLE C# DIAGNOSTICS. SO WITH THAT I WANTED TO GO BACK TO OUR GAME AND ADD THE ESSEKS PLO — THE EXPLOSION.

WE WILL SEE SOME EXPLOSIONS. THIS TIME I AM GOING TO GO VIA UNITY. HERE YOU NOTICE I HAVE AN OBSTACLE WHICH I ACTUALLY USE A LOT OF OBSTACLES IN THE GAME. WE HAVE SIX OF THEM. IT DOESN'T HAVE ANY BEHAVIOR OR CODE. I AM GOING TO ADD A COMPONENT. IN THIS INSTANCE C# FILES. A NEW SCRIPT. WE'LL CALL IT COLLISION DETECTION, BECAUSE IT'S ACTUALLY COLLIDING WITH SOMETHING. COLLISION HELPER. THERE YOU GO. IN YOUR SCRIPT. COLLISION HELPER. CREATED AN ADD. THIS ADDS IT TO OUR OBSTACLE. BECAUSE EVERYTHING ELSE IN OUR CODE BASE INHERITS FROM THAT BASE OBSTACLE, ALL I AM GOING TO DO NOW IS GOING INTO OUR — WHERE DID THAT GO? IT'S STILL LOADING. OKAY. STILL FIXING IT. ADDING IT. THERE YOU GO.

SO THE COLLISION HELPER HERE. NOW THAT FILE IS HERE. LET'S TIDY UP A LITTLE BIT. WE WANT A NICE TIDY SOLUTION. I AM GOING TO JUMP INTO MY COLLISION HELPER. THIS WILL OPEN INSIDE VISUAL STUDIO. I AM GOING TO DELETE THESE ONES BECAUSE I DON'T NEED THEM AND I AM GOING TO ADD MY SNIPPET. SO WHAT WE'RE DOING HERE, VERY BASIC, TOOK ME PROBABLY TWO HOURS TO FIGURE IT OUT, FOUR LINES OF CODE, AND THERE YOU GO. WE ARE GETTING THE GAME OBJECT. WE NEED TO MAKE SURE ONLY THE VEHICLE COLLIDES WITH OUR CRATE, RIGHT. IF EVERYTHING ELSE COLLIDES, WE DON'T NEED TO KNOW ABOUT THAT. THEN WE GRAB THE PARTICLE SYSTEM THAT THROWS THE EXPLOSION. WE MAKE SURE THAT WE HAVE A HANDLE ON THAT. IF YOU USE THE BRACKETS THAT ARE ON THE FIRST DAY TO CHECK WHETHER IT'S NEW OR NOT. AND THEN WE NEED TO MAKE SURE IT'S NOT PLAYING RIGHT NOW. THEN KICK OFF THE DESTROYMENT. SO I'M GOING TO KICK OFF THE GAVE NAME. SAVE THIS ONE.

KICK OFF THE GAME. BLOW SOMETHING UP. THEN WE CAN MOVE INTO QUESTIONS. THERE YOU GO. IT'S GOING TO TAKE A COUPLE OF SECONDS. EXPLOSION, RIGHT? THAT'S IT. FOUR LINES OF CODE AND YOU HAVE AN EXPLOSIVE CRATE. LAST SLIDE FOR ME FOR TODAY IS ALL ABOUT WHAT YOU CAN DO NEXT. SO IF YOU ARE KEEN ON LEARNING WHAT IT CAN DO NEXT, WE LAUNCHED SOME AMAZING LEARNING TUTORIALS WITH UNITY IN COLLABORATION. GO THERE. WE HAVE MORE THAN SIX HOURS OF LEARNING MATERIALS. AND THEN WE ALSO HAVE A HOW TO BUILD YOUR FIRST GAME. OUR PM, JOHN MILLER, WROTE THIS ONE. IT GOES THROUGH STEP BY STEP HOW TO USE VISUAL STUDIO FOR MAC AND BUILD YOUR OWN TIC-TAC-TOE GAME. THANK YOU VERY MUCH FOR JOINING ME TODAY. >> FANTASTIC. WE HAVE ONE QUESTION FOR YOU, MY FRIEND. IT IS, WHAT UI CONTROLS ARE COMPATIBLE WITH UNITY? >> FROM UI CONTROLS? >> YEAH.

>> THERE ARE A LOT OF COMPONENTS OUT THERE. YOU CAN GET A LOT OF SASSETS FRM THE UNITY STORES, THIRD-PARTY SUPPLIERS. AS MUCH AS YOUR BUDGET CAN AFFORD. >> FANTASTIC. AMAZING. THANK YOU SO MUCH FOR YOUR TIME, MY FRIEND. THAT WAS AMAZING. WE HAVE A SHORT COMMERCIAL BREAK. AFTER THAT WE HAVE BUILDING AMAZING CLOUD CONNECTED APPS WITH MY DEAR FRIEND AND COLLEAGUE MATT. >>> HEY THERE TREASURE HTERS. YOUR NEXT CLUE IS COURTESY OF OUR FRIEND AT DOCUSIGN. AND THEY WANT YOU TO USE THE LANDING PAGE TO GUIDE YOU IN POKING AROUND DOCUSIGN'S C# TOOLS TO FIND THE SOLUTION CODE. GO TO THIS URL. POKE AROUND THERE. FIND THAT SECRET CODE. WHISPER THE RESPONSE THAT YOU FOUND BACK TO THE .NET BOT IN THE VISUAL STUDIO TWITCH CHANNEL.

LET TO KNOW AND YOU COULD BE WELL ON YOUR WAY TO THE NEXT STEP IN OUR TECHNICAL TREASURE HUNT. >>> HEY, FRIENDS. LET'S TALK ABOUT A HELLO WORLD APP. WE DID A VIDEO ON A HELLO WORLD APP FROM THE PERSPECTIVE OF C#. WE LOOKED AT THE NAME SPACE AND THE USING COMMANDS AND THINGS LIKE THAT. IN FACT, WE HAD A WHOLE VIDEO SERIES AND WE RAN THE APPLICATION AND WE HIT CONTROL F 5 TO START WITHOUT DEBUGGING.

BUT WE NEVER REALLY LOOKED AND FOUND THE THING WE MADE, DID WE? >> YEAH, WE WERE INTELLICODE FOCUSED. LET'S TAKE A LOOK AT PROJECT TYPES. >> WHAT WE ARE LOOKING AT RIGHT HERE IS EXACTLY WHERE WE LEFT OFF AT THE END OF THE C# VIDEO SERIES. IT'S A BANKING APPLICATION. IT'S A CONSOLE APP. NOT A WINDOWS APP THAT POPS UP AND HAS BUTTONS AND THINGS. IT RUNS AT THE COMMAND LINE. ON THE RIGHT-HAND SIDE WE HAVE GOT THIS SOLUTION EXPLORER. ARE THOSE MY FILES? IS THAT A REPRESENTATION OF WHAT'S HAPPENING ON THE DISC? >> RIGHT. SO WHAT YU SEE IN THE FILE EXPLORER ISN'T EXACTLY WHAT YOU SEE IN THE SOLUTION EXPLORER. YOU HAVE A BIN FOLDER AND OBJECT FOLDER, DOT CS PROJECT FILES.

THAT ISN'T EXACTLY WHAT YOU NEED RIGHT NOW IN YOUR CODING. >> ARE THEY HIDING THAT FROM ME? ET THE POINT IS MY CODE RIGHT NOW? >> RIGHT. >> OKAY. BUT WE WERE BUILDING STUFF, RUNNING STUFF. WE SPENT A WHOLE BUNCH OF VIDEOS LEARNING C#. I WAS RUNNING MY APPLICATION BY FRE PRESSING CONTROL F5. BUT I NEVER SAW THE THING I MADE. RIGHT. SO THE OUTPUT OF YOUR APP IS ACTUALLY IN THE BIN FOLDER. WHY DON'T YOU DOUBLE-CLICK ON THAT? >> OKAY. BIN. >> AND IN DEBUG. >> DEBUG. >> AND IN NET CORE APP 3.0. SO NOW WE CAN SEE THAT THE .EXE, THE OUTPUT APPLICATION OF WHAT WE BUILT. >> THAT'S WHAT I MADE MY SUPER BANK .EXE AND OTHER PEF IFR RESULT STUFF THAT CAME ALONG FOR THE RIDE. >> RIGHT. >> CAN I RUN? >> YES. >> SO IF I RUN THAT, THAT WASN'T EXCITING.

LET ME DO IT AGAIN. MAYBE I DID IT WRONG. IT CAME AND WANT. >> THAT'S WHAT CONSOLE APPS LOOK LIKE F WE DON'T ADD A READ LINE OR IF IT DOESN'T WAIT FOR FEEDBACK. >> I WILL GO OUT TO THE COMMAND PROMPT AND YOU NOTICE THAT I AM IN THE SAME FOLDER. I AM IN THE EXACT SAME FOLDER.

I CAN COMPARE THESE FOLDERS. I ACTUALLY RIGHT CLICKED HERE IN EXPLORER AND SAID COPY. AND I CAME DOWN TO THE COMMAND LINE AND SAID CD, AND I PASTED IT IN. THAT'S HOW I GOT HERE. IF I TYPE DIR, THAT'S THE SAME STUFF, RIGHT? >> YEAH. >> YOU SAID I CAN RUN THAT. SO MY SUPER BANK, I AM GOING TO HIT TAB.

REMEMBER, TABS ARE A FRIEND IN VISUAL STUDIO AND OUR FRIEND AT THE COMMAND LINE. SO I HIT ENTER. AH-HA. THAT'S WHAT I WAS SEEING YESTERDAY. >> RIGHT. >> WHEN WE WERE DOING C# SOROS. SO THAT'S THE APP WE WROTE YESTERDAY. THE SUPERBANK EXE AND THE STUFF AROUND IT IS MY APP. CAN I GIVE THAT TO MY FAMILY AND THEY CAN RUN IT, TOO? >> YEAH, IF THEY ARE RUNNING IT ON THE SAME OPERATING SYSTEM. IF YOU WANT TO PUBLISH IT OUT TO DIFFERENT OPERATING SYSTEMS YOU CAN RUN DIFFERENT COMMANDS. WE WILL COVER THAT IN A DIFFERENT VIDEO. >> PUBLISHING AND THE DIFFERENCE BETWEEN RUNNING ON WINDOWS OR MAC A LITTLE BIT LATER AND THE IDEA OF A .NET RUN TIME AND HOW THAT RUN TIME IS NEEDED AND ALL THE THINGS IN THE PUBLISHING WORLD.

THAT'S HELLO WORD. THAT'S THE ANATOMY USING VISUAL STUDIO 2019. STICK WITH US FOR MORE .NET CORE VIDEOS COMING UP NEXT. >>> HELLO, FRIENDS. I AM MATT, A SENIOR CLOUD ADVOCATE HERE AT MICROSOFT. FOR THE NEXT 30 MINUTES I AM GOING TO SHOW YOU HOW TO BUILD A MOBILE APUSING XAMARIN AND MAKE AN AMAZING APP CENTER. SO LET'S JUMP RIGHT INTO IT AND SHOW YOU WHAT WE ARE BUILDING TODAY.

WHAT I HAVE HERE IS YOU MAY HAVE SEEN THIS APP USED A COUPLE OF TIMES YESTERDAY AND DURING YOUR KEYNOTE AND TODAY. IT'S THE PRETTY WEATHER APP. IT LOOKS PRETTY GOOD, RIGHT? WE HAVE THE WEATHER CONDITIONS. WE ARE IN SEATTLE. WE HAVE THE TEMPERATURE. WE HAVE THE CURRENT DATE. BUT THE WORLD DOESN'T REVOLVE AROUND SEATTLE, RIGHT? DON'T TELL ANYBODY THAT HERE, BUT THERE ARE MORE CITIES INVOLVED.

SO WE ARE GOING TO MAKE THIS APP FULLY FUNCTIONAL. BY THAT WE ARE GOING TO HIT THE THREE LITTLE ICONS ON THE BOTTOM AND THEN WE ARE GOING TO BE ABLE TO SIGN INTO CHROME, SAY NO THANKS, AND ACTUALLY BE ABLE TO SIGN INTO OUR APP. I AM GOING TO ENTER MY EMAIL ADDRESS. AND MY FAVORITE PASSWORD OF ALL TIME ABCD 1234 WITH AN EXCLAMATION POINT. THIS ALLOWS ME TO SAVE CITIES THAT I WANT TO BE ABLE TO VIEW THE WEATHER WITH. HIT A PLUS BUTTON, AND I CAN NOW ADD OTHER CITIES OTHER THAN SEATTLE AROUND. ENTER HONOLULU. PROBABLY HAS A LITTLE BIT BETTER WEATHER THAN SEATTLE. NOW I CAN BE ABLE TO SEE THE CURRENT WEATHER CONDITIONS THEN IN HONOLULU. SO WHAT I DID IS IN ADDITION TO THE CURRENT WEATHER CONDITIONS, ADDED A LITTLE MAGIC TO BE ABLE TO SIGN IN AND HAVE DATA FOLLOW ME AROUND THE DIFFERENT LOCATIONS OR DIFFERENT DEVICES. SO LET'S SEE HOW WE DID ALL OF THAT.

WE ARE GOING TO BE USING TO BUILD ALL OF THIS THREE THINGS. XAMARIN FOR THE MOBILE APP, FUNCTIONS TO BE OUR COMPUTE IN THE CLOUD, AND APP CENTER, MOBILE BECKONS AS A SERVICE TO DO OFF AND DATA, WHICH WRAPS AROUND AZURE BETA C AND AZURE COSMOSDB. SO FIRST UP, XAMARIN. SO A QUICK OVERVIEW OF WHAT XAMARIN IS. XAMARIN IS MICROSOFT'S FRAMEWORK FOR BUILDING PERFORMANCE IOS AND ANDROID APPS. BUT IT'S SO MUCH MORE THAN THAT. YOU CAN BUILD MAC OS APPS, YOU CAN EVEN BUILD APPS FOR SAMSUNG'S TYSON COPERATING SYSTEM. IT'S MORE THAN IOS AND ANDROID APPS.

HOW THIS IS DONE IS THAT YOU USE THE VERY POWER OF .NET AND C#. SO WE HAVE, LET'S SAY, AN IOS UI, ANDROID UI, C# UI FOR WINDOWS. WE ARE GOING TO BUILD A UI FOR EACH SEPARATE. WE ARE USING C#. WE ARE USING .NET. WE HAVE FULL ACCESS TO THE PLATFORM BUT WE ARE BUILDING THOSE UIs SEPARATELY. BUT WE ARE BUILDING AN APP. THAT ONE APP IS GOING TO PERFORM THE SAME THING LIKE WE BUILD FO PLATFORM. WHEN WE GO GET OUR WEATHER INFORMATION, IT'S GOING TO BE DONE THE SAME WAY. SO WE MAY AS WELL USE A SHARED C# LOGIC LAYER AND THAT'S WHERE THE POWER OF XAMARIN COMES IN, THAT WE CAN WRITE OUR SHARED LOGIC JUST ONCE AND HAVE IT USED ACROSS MULTIPLE PLATFORMS AT THE SAME TIME. BUT WE CAN DO BETTER. AND THAT'S WHERE XAMARIN FORMS POPS IN. WHAT XAMARIN FORMS DOES IS GIVE US AN ABSTRACTION OF THE USER INTERFACE LAYER.

LET'S SAY IOS HAS A BUTTON, ANDROID HAS A BUTTON, AND UWP HAS A BUTTON. AWAY WE ARE GOING TO DO THEN IS XAMARIN FORMS GIVES US IN AN IPI THAT LETS US PROGRAM AGAINST A BUTTON AND FORMS TAKES CARE OF EMITTING A NATURAL NATIVE BUTTON FOR US. SO NOW WE ARE SHARING C# LOGIC FOR APPLICATION LOGIC. SHARED LOGIC FOR A UI LOGIC. AND WE HAVE MORE AND MORE SHARED CODE. THIS IS GREAT. SO THAT IN A NUTSHELL IS WHAT XAMARIN IS. THE NEXT THING I WANTED TO TALK ABOUT IS THE COMPUTE LAYER, OR AZURE FUNCTIONS. AND SO THIS IS A QUICK DIAGRAM OF WHAT WE'RE GOING TO CALL THE CLOUD NATIVE COMPUTE. OR HOW WE ARE GOING TO ARCHITECT OUR ACH. BACK IN THE DAY, WE HAD THE ON-PREMISE ARCHITECTURE. SO WHAT THAT WAS, WAS ESSENTIALLY THAT WAS THE OLD DATA — THE COMPUTER UNDERNEATH YOUR DESK, RIGHT, WHERE YOU HAD TO TAKE CARE OF EVERYTHING ABOUT YOU YOURSELF.

THE MACHINE, MAKE SURE THE OPERATING SYSTEM WAS GOOD. YOU HAD TO INSTALL ALL OF THE SOFTWARE YOURSELF. BUT AS WE MOVED ALONG WE SORT OF MOVE INTO THE CLOUD. SO YOU HAD INFRASTRUCTURE AS A SERVICE. SO YOU NO LONGER HAD TO TAKE CARE OF THE HARDWARE. THEN YOU MOVED TO PLATFORM AS A SERVICE, SO YOU DIDN'T HAVE TO WORRY ABOUT THE OPERATING SYSTEM. NOW WE'RE AT FUNCTIONS AS A SERVICE, OR SERVERLESS, WHERE WE'RE ONLY WORRIED ABOUT WRITING OUR CODE. AND SO OUR ANSWER TO THAT IS AZURE FUNCTIONS WHERE IT'S EVENTS BEING TIED TO CODE AND THEN WE HAVE FUNCTIONS. AND SO WHAT ARE SOME OF THE EVENTS THAT WE CAN WRITE THAT FUNCTIONS RUN OFF OF? THINK OF HAVING A BLOB BEING WRITTEN TO BLOCK STORAGE. OR SOMETHING BEING WRITTEN TO AN AZURE QUEUE. THAT WILL KICK OFF AN AZURE FUNCTION AND HAVE OUR CODE START RUNNING. THE SECRET SAUCE THOUGH COMES IN WITH THE BINDINGS. SO WHAT A BINDING MEANS IS THAT WE CAN HAVE SOMETHING, LET'S SAY FROM COSMOS DB, BE BOUND TO AN AZURE FUNCTION, AND THEN LIKE A DOCUMENT CAN BE SENT INTO OUR FUNCTION AS A VARIABLE.

THE SAME THING COULD HAPPEN WITH AN AZURE STORAGE TABLE OR A FILE. IT AUTOMATICALLY GETS SENT IN OR WE CAN WRITE IT OUT AS WELL. SO THIS GIVES US A REALLY POWERFUL MECHANISM TO WRITE SOME REALLY COOL CODE WITH A LITTLE BIT OF LINES. SO SOME SCENARIOS TO DEMONSTRATE THIS. SO LET'S SAY WE HAD A TIMER GOING OFF EVERY 15 MINUTES. THAT'S OUR EVENT. THE FUNCTION THEN KICKS OFF. IT WILL THEN FIND AND MAYBE CLEAN SOME DATA FROM A TABLE, AND THEN WE ARE RESULTING WITH A CLEAN TABLE AFTERWARDS. ANOTHER EVENT COULD BE A FILE, A CSV FILE, LET'S SAY, GETS ADDED TO BLOB STORAGE.

WE HAVE A FUNCTION THEN THAT TAKES THAT IN, TRANSFORMS THAT CSV FILE INTO DATA ROWS, AND THEN FROM THERE WE CAN DISPLAY A POWER BI CHART GRAPHIC. OR OUR SCENARIO THAT WE'RE DEALING WITH TODAY IS OUR MOBILE APP NEEDS A FORECAST. IT SENDS OFF AN HTTP GET REQUEST TO A FUNCTION. THAT FUNCTION THEN IS GOING TO CALL OFF TO A THIRD-PARTY WEATHER SERVICE, GET THE DATA BACK, AND THEN IT'S GOING TO MASSAGE THAT DATA INTO A VERSION THAT THE APP CAN DEAL WITH. SEND IT BACK DOWN TO THE APP, AND THEN THE APP DISPLAYS THE DATA. SO LET'S SEE HOW WE CAN USE COMPUTE WITH AZURE FUNCTIONS AND ADD THAT IN TO OUR MOBILE XAMARIN APPLICATION.

THIS IS WHAT THE FUNCTION LOOKS LIKE. IT'S CALLED GET CURRENT CONDITIONS, AND IT'S RUNNING AS AN HTTP TRIGGER. SO THAT MEANS THAT AS SOON AS THE HTTP GET REQUEST COMES IN, IT'S GOING TO TRIGGER OFF THIS FUNCTION AND IT'S GOING TO START RUNNING. THEN IT HAS VARIOUS REQUESTS, QUEER RIS THAT I CAN GET, A LATITUDE AND LONGITUDE, AND THEN IT RUNS THROUGH. LET'S KICK THIS OFF AND RUN IT. IT'S GOING TO COMPILE AND I'M GOING TO RUN THIS ALL LOCALLY. AND THEN AS THAT FIRES UP, I AM GOING TO CALL IT OUT THROUGH POST MAM THROUGH THIS LOCAL HOST 7 701.

I AM GOING TO BE PASSING IN A LATITUDE AND A LONGITUDE OF SEATTLE. SO I SEND IT OFF. AND IT COMES IN HERE AND HITS. SO NOW WHAT I CAN DO HERE IS STEP THROUGH. SO I GET MY LATITUDE AND LONGITUDE OUT OF THE QUERY STRING, AND THEN THESE NEXT ONES I AM JUST PULLING OUT OF ESSENTIALLY A CONFIG FILE TO GET MY KEY AND MY URL FROM MY THIRD-PARTY WEATHER SERVICE.

SO THAT'S ANOTHER GREAT THING ABOUT PUTTING THIS UP IN FUNCTIONS INSTEAD OF HAVING IT IN MY MOBILE APP. I CAN HAVE THE KEY TO MY WEATHER SERVICE NOT ON BOARD MY MOBILE APP WHERE IT COULD BE POSSIBLY COMPROMISED. I HAVE IT UP ON FUNCTIONS WITHIN THE AZURE CLOUD AND IT'S SAFER. EVENTUALLY, I COULD PUT THAT IN THE AZURE KEY VAULT AND REALLY LOCK IT DOWN IF I WANTED TO. GREAT. SO BACK TO THE FUNCTION THEN. ALL I'M DOING HERE IS USING THIS CLIENT WHICH HAPPENS TO BE AN HTTP CLIENT CALLING, GET STRING A SYNC, IP VOKING THAT THIRD-PARTY WEATHER SERVICE, GETTING MY DATA BACK, DESERIALIZING IT, AND FINALLY ALL I'M DOING HERE IS PUTTING IT INTO A VERSION MY MOBILE APP WOULD USE. I CONTINUE THAT OFF AND DOWN HERE I JUST GET THIS LITTLE JSON BACK. THIS IS ALL MY MAP APP NEEDS TO DISPLAY ITS DATA. SO I HAVE ALREADY ACTUALLY DEPLOYED THAT TO AZURE, THAT PARTICULAR FUNCTION, AND THEN I'M GOING TO RUN MY MOBILE APP NOW TO ACTUALLY SEE IT IN EFFECT.

SO I'LL COMPILE IT AND RUN IT ON THE EMULATOR. AND AS IT'S GOING ALL I'M GOING TO DO HERE AGAIN USING THE HTTP CLIENT IS CALL A GET STRING SYNC, AND IT'S CALLING OUT THAT PRETTY WEATHER AT AZURE WEBSITES D .NET TO GET ITS WEATHER BACK. SO AS SOON AS IT FIRES UP, STILL COMPILING. THEN WE SHOULD HAVE IT DONE IN JUST A SECOND HERE. HOPEFULLY. AND THEN WE'LL CONTINUE ON TALKING. HERE WE GO. SO IT LOADS UP. IT'S GOING TO DEPLOY IT TO THE EMULATOR. THEN ONCE THAT'S DONE, IT WILL GO THROUGH. AND THE VERY THING IT IS GOING TO DO IS HIT THIS WEATHER SERVICE HERE, GET THE WEATHER INFO, AND THEN IT'S GOING TO DEPLOY, CALL OUT TO THE FUNCTION. LOADING IT SELF UP. AND THEN IT SHOULD COME IN HERE AND THAT'S WHAT IT DID. IT CALLED THE GET STRING A SYNC. I SEE THE WEATHER. IT'S THE SAME THING AS BEFORE. AND NOW IT'S JUST BEEN UPDATED WITH WEATHER FROM HONOLULU.

SO THERE WE GO. SO THAT'S ALL THAT'S INVOLVED WITH LOADING UP AND CALLING IN AZURE FUNCTION FROM A MOBILE APP. IT'S AN HTTP GET REQUEST INVOLVED. SO THAT'S PRETTY STRAIGHTFORWARD. IT'S CREATING JUST A BACK END, A WEB ASP, BUT DEALING WITH AZURE FUNCTIONS, A CLOUD NATIVE WAY OF CREATING A WEB API.PI, BUT DEAL FUNCTIONS, A CLOUD NATIVE WAY OF CREATING A WEB API. NOW ADDING THE REAL AMAZING STUFF TO FUNCTIONS OR TO OUR MOBILE APP. AND THAT'S WITH APP CENTER. AND SO WHAT APP CENTER IS GOING TO DO, IT'S GOING TO ALLOW US TO WRAP TOGETHER AZURE, AD, B TO C, DIRECTORY, B TO C, CLIENT, ALSO AZURE COSMOSDB AND A NICE EASY TO USE DEVELOPER FRIENDLY SDK. AND SO THE WAY THIS WORKS IS THAT A LOT OF Y'ALL ARE MAYBE FAMILIAR WITH APP CENTER IN THE DEVOPS PORTION WHERE WE HAD BUILD AND TEST AND DISTRIBUTION.

SO WHAT HAPPENED IS THAT WITH BUILD, WHAT YOU WOULD DO IS YOU WOULD CONNECT TO YOUR FAVORITE REPO. AS SOON AS YOU PUSH, IT WOULD BUILD, KICK OFF SOME UNIT TESTS AND MAYBE ONLY UI TESTS THAT WOULD RUN ON REAL DEVICES. IT WOULD KICK OFF TO THE DISTRIBUTION WHETHER DISTRIBUTING TO THE STORE OR EXTERNAL BETA TESTERS, AND THEN YOU WOULD HAVE SOME DIAGNOSTICS THAT RUN. IF THE APP CRASHED, KOW GET FULL STACK TRACING, HOOK INTO INSIGHTS, AND ANALYTICS TRACKS HOW PEOPLE ARE USING YOUR APP. THAT WAS APP CENTER. HOWEVER, THERE IS THIS NOW THIS NEW FEATURE CALLED THE MOBILE BACK END AS A SERVICE. THERE IS AUTHENTICATION, DATA, AND PUSH. NOW, WHAT'S GREAT ABOUT THESE FEATURES IS THAT THEY INTERACT REALLY WELL AMONGST EACH OTHER AND THEY ARE SUPER EASY TO USE. SO FIRST WE'LL TAKE A PEEK AT WHAT THE AUTHENTICATION DOES. AS I MENTIONED BEFORE, VISUAL STUDIO APPS CENTERS AUTHENTICATION WORKS HAND IN HAND WITH AZURE, ACTIVE DIRECTORY, B TO C.

SO ADB TO C ITSELF, I AM GOING TO SAY IT'S A LITTLE BIT INVOLVED IN GETTING SET UP. SO WHAT APP CENTER IS GOING TO HELP YOU DO IS GOING TO HELP YOU EASE THAT PROCESS OF GETTING SET UP AND MAKING CALMS TO IT. ITS FOCUS IS ON MAKING EVERYTHING EASY FOR YOU. AND SO THE OTHER WAY — THERE ARE TWO PARTS INVOLVED IN CALLING AND AUTHENTICATING AND SIGNING IN USERS. THE B TO C PORTION AND THEN THE ACTUAL SIGNING IN PORTION, WHICH IS DONE THROUGH MICROSOFT AUTHENTICATION LIBRARY OR MSL.

NOW, THE MSL IS ALL DONE ON DEVICE. THAT'S TAKING CARE OF DISPLAYING THE WEB VIEW AND ACTUALLY COMMUNICATING THE B TO C AND PERFORMING THE AUTHENTICATION. B2C CALLS OUT EMAIL OR TWITTER TO MAKE SURE YOU ARE WHO YOU SAY YOU ARE. YOU HAVE TWO PLACES THAT NEED TO INTERPLAY NICELY TO GET YOUR SIGN-IN EXPERIENCE. APP CENTER MAKES THIS WHOLE LAYOUT, THIS WHOLE JOURNEY WAY EASIER. THIS IS WHAT IT LOOKS LIKE. IT'S JUST SIGN IN A SYNC. IF YOU ARE FAMILIAR WITH THE MSAL FRAMEWORK BEFORE, IT'S SUPER POWERFUL BUT A LOT OF CEREMONY GOES ON IN SETTING IT UP. THIS IS WHAT IT LOOKS LIKE NOW. IT'S SUPER — IT'S NICE. IT'S DEVELOPER FRIENDLY. THAT GOES RIGHT ALONG WITH THE APP CENTER ETHOS.

GOING ALONG WITH THIS, I MENTIONED THAT RIGHT NOW IT'S JUST WORKING WITH AZURE, ACTIVE DIRECTORY B2C. THIS THE FUTURE WE ARE INVENTING BRING YOUR OWN IDENTITY. WHAT THIS MEANS, IF YOU ARE USE OFF 0 OR FIRE BASE OR IF YOU ARE USING AZURE ACTIVE DIRECTORY ALREADY, YOU CAN JUST BRING THOSE IN TO APP CENTER AND IT'S GOING TO WORK FOR YOU. SO YOU DON'T HAVE TO BE JUST USING B2C. YOU COULD BE USING ANY OTHER IDENTITY PROVIDERS, BRING IT IN, AND YOU WILL BE ABLE TO WORK WITH THEM BEHIND THAT BEAUTIFUL SDK THAT WE HAD. THEN NEXT UP IS THE DATA PORTION. SO WHAT THE DATA GIVES US HERE IS A NICE WRAPPER AROUND AZURE COSMOSDB.

SO THE WAY, AS I MENTIONED BEFORE, IS THAT OFF AND DATA AND PUSH WORK TOGETHER HAND IN HAND. SO THIS IS ONE OF THE WAYS THAT THEY DO. SO WE'RE LOGGED IN WITH OTAUTH. US USER A, B, C, THEY GET THEIR OWN PRIVAT PARTITION WITHIN COSMOSDB. WHEN I WANT TO STORE IDATA, I GT MY USER PARTITION, SAME WITH A, SAME WITH B, STILL WITH C, AND WE HAVE PUBLIC DATE A I DON'T HAVE TO SET UP AS A DEVELOPER SET UP A NEW PARTITION FOR ANYBODY. APCENTER ASDK TAKES CARE OF THAT FOR ME. IF I'M CONNECTED, IT WRITES TO THE CLOUD RIGHT AWAY. ALSO WRITES TO AND A SQL CACHE ON DEVICE. IF WE ARE NOT CONNECTED CACHE ON DEVICE, WE KEEP ON GOING, IT WRITES UP TO THE CLOUD THE NEXT TIME WE ARE CONNECTED. SAME THING WITHHEN WE ARE READI. READS FROM THE ONLINE — OR THE CACHE ON DEVICE.

IF CONNECTED, READS TO THE CLOUD AND SYNCS UP. AUTOMATICALLY WORKS. DOIPT HAVE TO WORRY ABOUT WHETHER YOU ARE ONLINE OR OFF. THE SDK IS GOING TO TAKE CARE OF IT FOR YOU. SO IT'S THE METHODS HERE THAT YOU HAVE. YOU CREATE YOUR DATA MODEL. NEW IT UP, AND THEN THERE IS A CREATE METHOD, A DELETE METHOD, PASSING IN THE I.D.s OF WHAT YOU WANT AND THEN THE PARTITIONS HERE ARE THE USER DOCUMENTS AS OPPOSED TO PUBLIC. AND THEN THERE IS A LIST TO GET THEM ALL BACK, A READ FOR A SINGLE, AND THEN A REPLACE, WHICH IS LIKE AN UPCERT OR UPDATING.

OTHER COOL THINGS THAT WE HAVE WITH APP CENTER IS THAT YOU CAN SEE DATA METRICS FROM WHAT YOUR COSMOS DATABASE LOOKS LIKE WITHIN THE APP CENTERPORTLE, AND YOU CAN ACTUALLY GO THROUGH AND VIEW DIFFERENT DOCUMENTS. AND THE BEST THING OF ALL IS THAT THERE IS A FREE TIER COMING ALONG. IT'S NOT THERE TODAY, BUT IT IS COMING ALONG SOON. SO IT IS COSMOSDB FREE TIER WITH APP CENTER. THAT'S REALLY SLICK. SO LET'S JUMP IN TO THE LAST DEMO THAT WE HAVE GOING. WALKING ON SUNSHINE, AUTH, AND DATA WITH APP CENTER. I WILL SHOW YOU HOW WE WOULD SET UP THE APP CENTERPORTLE TO WORK WITH AUTH AND DATA. SO WHAT I HAVE HERE IS I OPEN UP AN APP CENTER APPLICATION AND I HAVE AUTH AND DATA HERE.

SO JUST BY HITTING AUTH, IT SAYS WELCOME TO AUTH, CONNECT MY AZURE SUBSCRIPTION, AND I CAN GO THROUGH. I HAVE MY PRETTY WEATHER. IT'S READING WHAT'S ALREADY IN MY AZURE SUBSCRIPTION. USER IMPERSONATION, AND THEN FOR THE POLICY I HAVE TO MANUALLY ADD MY USER FLOW, WHICH HAPPENS TO BE THIS. USER FLOW IS THE HOW YOU SIGN IN. SO IT'S LIKE WHICH IDENTITY PROVIDERS IF YOU WANT TO CONNECT TO FACEBOOK OR TWITTER. THEN I CAN SAY CONNECT, AND THAT'S ALL THERE IS TO IT. NOW MY APP IS SET UP TO USE AUTHENTICATION. THE SAME WITH DATA. ALL I WILL SAY IS I WANT TO USE AN EXISTING DATABASE, USE MY SUBSCRIPTION, HIT NEXT HERE, WHICH DATABASE WITHIN IT, USER PREFERENCES, WHICH COLLECTION, AD THAT'S IT. I WOULD HIT DONE. SO TO SHOW YOU ONE THAT'S ALREADY SET UP AND READY TO GO IS ONE OF MY ANDROID.

AUTH IS TALREADY THERE. MY TENANT NAME, APPLICATION I.D., AND THE DATA. YOU CAN SEE HERE I HAVE OVERVIEW AND THEN MY EXPLORER. AND YOU CAN SEE I HAVE BOTH SEATTLE AND HONOLULU ADDED. SO THE NEXT THING WHAT I WANT TO DO HERE IS, FINALLY, GO THROUGH AND SHOW YOU THE METHODS THAT I HAVE SET UP. LOG IN AND SAVE DATA. SO I HIT THE LITTLE THINGS BELOW AND THE SIGN-IN RIGHT HERE IS JUST AUTH SIGN IN, A SYNC. I HAVE TOKENS THAT COME BACK, AN ACCOUNT I.D., MY B2C ACCOUNT I.D., ALL WITHIN I CAN GET, LISTING MY CITIES OUT IS JUST THE DATA LIST A SYNC SITTING IN A CITY INFO, WHICH HAPPENS TO BE A REGULAR CLASS. CONTINUE ON. AND THEN WHEN I WANT TO ADD A NEW ONE, I WILL COME THROUGH HERE, PICK A NEW CITY, AND CRASH THE APP. SO WHAT IT WILL LOOK LIKE IF I PICK THE NEW CITY THEN IS IT SAYS CREATE A.I. SYNC, EVERYTHINEED. THEN I HAVE SOME REALLY, REALLY FUNKY STUFF. IF I GO OVER TO MY REAL DEVICE, I CAN SEE IF I LOAD UP THE APP.

I SHOULD BE ABLE TO SEE MADISON, SEATTLE, AND HONOLULU COME UP. OBVIOUSLY, MADISON DID NOT SAVE. BUT THAT'S OKAY. SO HOPEFULLY IT SAVES HERE WITHOUT CRASHING ANYTHING. SO, GREAT. THAT'S THE QUICK VERSION OF ADDING EVERYTHING AND USING APP CENTER WITH A XAMARIN MOBILE APP. SO, IN SUMMARY, WE USE XAMARIN FOR CREATING A CROSS PLATFORM MOBILE APPLICATION. AZURE FUNCTIONS FOR OUR SERVERLESS BACK IN FOR A COMPUTE. AND APP CENTER FOR A MOBILE BACK END SERVICE DATA AND AUTHENTICATION. SO PLEASE GO ON AND LEARN MORE. FOLLOW THESE DOCUMENTATION LINKS FOR XAMARIN, APP CENTER, AUTH AND DATA, AND FINALLY THE BOTTOM ONE THERE IS ALL THE CODE THAT YOU CAN WATCH FROM THIS SESSION. >> ALL RIGHT. THANK YOU SO MUCH, MY FRIEND, MATT. HOW ARE YOU DOING, MY FRIEND? >> I AM DOING WELL, SETH. >> HERE IS A QUESTION THAT I ALWAYS GET I THOUGHT I WOULD ASK YOU. PERSPECTIVE WITH XAMARIN VERSUS NATIVE, LIKE TELL US ABOUT THAT. >> YOU GET 100% NATIVE PERFORMANCE WITH XAMARIN AS YOU WOULD IF YOU WERE WRITING SOMETHING IN JAVA OR SWIFT.

YOU ARE GOING TO GET THE SAME NATIVE LEVEL PERFORMANCE AS YOU WOULD. SO THERE IS NO DIFFERENCE, AS IF ANYTHING SETH, YOU CAN GET BACK CODE? >> HE IS SAYING FROM EXPERIENCE, BECAUSE WE WORK TOGETHER. SO HE HAS SEEN SOME OF THAT. HERE IS ANOTHER QUESTION. DOES AZURE APP CENTER AUTH WORK WITH SECURING A WEB FROM A DESKTOP APP? >> THAT'S A GOOD QUESTION. SO THE AUTH CENTER APP WORKS WITH SECURING A WEB API CALLING FROM A MOBILE APP. I HAVEN'T TRIED IT FROM A DESKTOP APP. BUT THEY DO SUPPORT WINFORMS IN THE OTHER PORTION OF APP CENTER. SO I'M NOT GOING TO SPECULATE AND GET THE PROJECT TEAM OR PRODUCT TEAM INTO TROUBLE, BUT IT'S JUST A TOKEN. >> FANTASTIC. THERE ARE A LOT OF GOOD LINKS HE PUT UP THERE. MAKE SURE THAT YOU FOLLOW THOSE AND GET SOME OF THE CODE TO TRY IT OUT. IT'S PRETTY AMAZING. AS WE GO ALONG, MAKE SURE TO REMEMBER TO PARTICIPATE IN THE TECHNICAL TREASURE HINT. IT'S STILL GOING ON. WATCH ALL OF .NET 2019 BECAUSE THEY ARE SPONSORING A TREASURE HUNT.

YOU WILL BE ELIGIBLE TO WIN A LOT OF PRIZES. SO WE ARE GOING TO THROW TO A COMMERCIAL BREAK. RIGHT AFTER THIS WE ARE GOING TO HAVE A TOUR OF WHAT'S NEW FOR ZAMLE TOOLS WITH DEMETRI. BUT THIS FIRST. >>> WELCOME BACK, TREASURE HUNTERS. I HAVE GOT YOUR NEXT CLUE FROM THOSE WILEY FOLKS AT MOBILIZE.NET. THEY WANT YOU TO USE THIS CHOOSE YOUR OWN ADVENTURE BENDER SNATCH TILE STORY TO DECIDE WHAT TO DO WITH TOXIC LEGACY CODE. CHOOSE THE RIGHT PATH AND YOU'RE A HERO. CHOOSE WRONG, AND DREADFUL CONSEQUENCES MIGHT BEFALL YOU.

GO TO THIS URL TO GET STARTED. WHISPER THAT RESPONSE WHEN YO GET TO THE END TO THE .NET BOT IN THE VISUAL STUDIO TWITCH CHANNEL AND YOU COULD BE WELL ON YOUR WAY TO THE NEXT STEP IN OUR TECHNICAL TREASURE HUNT. >> I'M SCOTT. >> I'M KENDRA. >> WE ARE GOING TO TALK ABOUT .NET. THIS IS OUR 101 VIDEO SERIES. YOU MIGHT WANT TO LOOK AT THE C#101 SERIES. IT'S ONE OF THE LANGUAGES WITHIN .NET. WHAT IS .NET ANYWAY? >> RIGHT. SO WE HAVE BEEN TALKING ABOUT .NET FOR A WHILE, AND WE HAVEN'T FULLY EXPLAINED WHAT IT IS. IT DEFINITELY HAS SOMETHING TO DO WITH DEVELOPMENT. SO LET'S DIVE INTO THAT. SO .NET IS AN OPEN SOURCE DEVELOPMENT PLATFORM FOR BUILDING DIFFERENT TYPES OF APPS. AND OF COURSE THAT NEXT QUESTION IS THEN WHAT'S A DEVELOPER PLATFORM? >> YEAH, IT'S A LITTLE BIT CONFUSING. IT IS THE LANGUAGES THAT YOU USE PLUS THE LIBRARIES THAT YOU USE AND THAT IS A DEVELOPER PLATFORM AND .NET IS ONE.

WITH .NET THERE ARE CERTAIN LANGUAGES YOU CAN USE. C#, ALSO VISUAL BASIC AND F#, AND THEN THE PLATFORMS ARE THE THINGS THAT YOU STAND ON, THE THINGS THAT YOU WRITE YOUR SOFTWARE FOR, .NET CORE, RUNS WITH WINDOWS AND LINUX AND MAC. THE .NET FRAMEWORK, POPULAR, BEEN AROUND A LONG TIME, LETS YOU WRITE WEBSITES AND SERVICES ON APPS FOR MANY, MANY YEARS. XAARIN OR MONO IS A .NET FOR MONO. WRITE YOUR .NET APPLICATIONS ON AN IOS DEVICE OR APPLE WATCH OR TV OR ANDROID. THIS IS EXAMPLES OF .NET. THESE ARE MULTIPLE .NETS. THAT COULD BE CONFUSING. WE CAN JUST WRITE TO A STANDARD. WE CAN USE A STANDARD SET OF LIBRARIES AND MAKE SURE THAT OUR LIBRARIES ARE STANDARD. SO YOU JUST THINK ABOUT THE .NET STANDARD AND YOUR .NET STUFF WILL RUN ANYWHERE, WHICH IS REALLY COOL. >> THINKING OF RUNNING ANYWHERE, WHAT EXACTLY CAN I BUILD WITH .NET? TURNS OUT YOU LISTED A FEW JUST NOW. QUITE A LOT. SO WE HAVE DESKTOP, MICROSERVICES, WEB, MOBILE, ALL OF THAT.

WHAT IS YOUR FAVORITE? >> EI LIKE IOT ON A RASPBERRY P OR WINDOWS DESKTOP. I CAN GO TO A TINY DEVICE AND I AM USING THE SAME SKIMS AND SAME LIBRARIES WHICH IS REALLY COOL. >> WHO BUILDS .NET? TURNS OUT IT'S MICROSOFT AND SEVERAL THOUSAND OF OUR CLOSEST FRIENDS. SO OVER 60,000 DEVELOPERS IN T 3,000 — >> I'M SCOTT. >> I'M KENDRA. >> THIS IS OUR .NET 101 VIDEO SERIES. IF YOU HAVE JUST ARRIVED, YOU MIGHT WANT TO LOOK AT THE C#101 SERIES. IT'S ONE OF THE LANGUAGES WITHIN .NET. WHAT IS .NET ANYWAY? >> RIGHT. WE HAVE BEEN TALKING ABOUT .NET FOR A WHILE. WE HAVEN'T FULLY EXPLAINED WHAT IT IS. IT DEFINITELY HAS SOMETHING TO DO WITH DEVELOPMENT. SO LET'S DIVE INTO THAT. SO .NET IS AN OPEN SOURCE DEVELOPMENT PLATFORM FOR BUILDING DIFFERENT TYPES OF APPS.

AND OF COURSE THAT NEXT QUESTION IS, THEN WHAT'S A DEVELOPER PLATFORM? >> YEAH, IT'S A LITTLE BIT CONFUSING. IT IS THE LANGUAGES THAT YOU USE PLUS THE LIBRARIES THAT YOU USE AND THAT TOGETHER IS A DEVELOPER PLATFORM AND .NET ONE. WITH DOT NET THERE ARE CERTAIN LANGUAGES YOU CAN USE. C#, VISUAL BASIC AND THE PLATFORMS ARE THE THINGS THAT YOU STAND ON, THE THINGS THAT YOU WRITE YOUR PROGRAMS FOR.

DOT NET CORE WHICH RUNS ANYWHERE. THE DOT NET FRAMEWORK WHICH IS VERY POPULAR AND BEEN AROUND FOR A VERY LONG TIME. IT'S LET YOU WRITE WEBSITES, SERVICES AND APPS ON WINDOWS. AND THEN XAMARIN OR MONO. >>> HI THERE. MY NAME IS DMITRY. I'M GLAD YOU'RE JOINING ME TODAY. TODAY I'M GOING TO DO A SESSION ON ZAMER TOOLS. WE'RE GOING TO LOOK AT FEATURES THAT ARE EXISTING FEATURES YOU CAN USE TODAY, FEATURES THAT ARE COMING. WE'RE GOING TO DO SOME WORK IF .

LET'S GET GOING. BEFORE I JUMP INTO THE DETAILS OF MY TALK I'M GOING TO MENTION THAT THREE DAYS OF CONTENT AND DESKTOP TALKS THAT YOU CAN SPREAD OUT. DESKTOP DEVELOPMENT IS SOMETHING YOU'RE INTERESTED IN, I HOPE YOU CAN CHECK OUT ONE OF THE SESSIONS. THEY ARE ALSO IN THE AGENDA. THE AGENDA LINK IS DOWN BELOW AND EVERYTHING WILL BE AVAILABLE ON THE APP IF YOU MISSED IT. MY SESSION. WE'RE GOING TO START OFF BY LOOKING AT ZAMER TOOLS. I'M A FAN OF ZAMER TOOLS. I WORK CLOSELY WITH THE FORMS. ALL OF THE TEAMS WORK CLOSELY TOGETHER. AND IN MY TALK I'M GOING TO COVER WHAT'S NEW IN TOOLING IN HOW WE LOAD DESIGNER AND THE CODE EDITOR. I'LL TALK ABOUT THE ISLANDS AND JUST TOUCH ON ROADMAP A LITTLE BIT AND HOPEFULLY IT WILL BE A GOOD TALK. LET'S JUMP IN. SO THIS DEMO WAS GOING TO BE A CODE DEMO.

I'M GOING TO APOLOGIZE AND DO SOME SCREEN SHOTS. IT'S A COOL DEMO. UNFORTUNATELY MY VM DIED THIS MORNING. THANKS, VM. LET'S TALK ABOUT A NEW FEATURE WE'RE WORKING ON IN ZAMEL DESIGNER. IF YOU USE A ZAMEL DESIGNER, WE'RE ADDING FEATURES TO THAT CAPABILITY, TO THAT SPACE. WE HAVE BEEN THINKING FOR A LONG TIME WHAT FEATURE WOULD BE A GOOD WAY TO INCREASE DEVELOPER PRODUCTIVITY. SOMETHING WE'RE GOING TO SHIP IN THE FUTURE, VISUAL STUDIO UPDATE AS A PREVIEW FLAG FEATURE. IT'S ZAMEL SUGGESTED ACTIONS. THINK ABOUT IT AS A LIGHT BULB ON TOP OF CONTROLS.

WE'RE STARTING OFF WITH A WELL-DEFINED SET OF CONTROLS AND A LIGHT BULB IS GOING TO MAKE ALL THE COMMON PROPERTIES OF THOSE CONTROLS AVAILABLE. HERE'S STACK PANEL. HERE'S A LABEL. WE EVEN HAVE NICE COLOR PICKERS WE'RE GOING TO BUILD INTO THAT. HERE'S THE IMAGE CONTROL. THINGS LIKE SOURCE, VISIBILITY, VERY MUCH COMMON PROPERTIES. AS I GO DOWN THIS LIST OF CONTROLS YOU SEE THAT THESE PROPERTIES ARE PROBABLY THE ONES YOU OFTEN HAVE TO GO SET AND TODAY IF YOU WOULD GO INTO THE PROPERTIES PANEL IT'S KIND OF HARD TO FIND THE MOST COMMON PROPERTIES.

THIS IS HOPEFULLY GOING TO ALLEVIATE THAT. IN THE FUTURE IT WILL EXPAND BE TO OTHER CAPABILITIES AS WELL. IT'S A COOL FEATURE WE'RE WORKING ON. ONE OF THE UPDATE TRAINS, ONE OF THE PREVIEW TRAINS WE'LL PUT IT INTO RELEASE NOTES. IT'S GOING TO SUPPORT THE CONTROLS ON THE SCREEN THAT ARE LISTED BUT IT IS GOING TO BE EXTENDIBLE. WE ARE GOING TO ADD IT TO MORE CONTROLS IN THE FUTURE. WE'RE LOOKING AT ACTIONS. SOMETIMES YOU HAVE A CONTROL THAT HAS PROPERTIES YOU WANT TO CHANGE AND THAT IS GREAT. OTHER TIMES YOU HAVE A CONTROL. YOU NEED TO ADD ANOTHER TAB. INSTEAD OF HAVING TO KNOW HOW TO DO THE ZAMEL OR OTHER PARADIGM, IT ALLOWS YOU TO ADD A NEW TAB EASI. WE'LL RECEIVE THESE SUGGESTED ACTIONS. SO CHECK IT OUT. WE MAKE IT AVAILABLE. JUST WANTED TO SHOW YOU ONE FEATURE FACING THING AND UNFORTUNATELY MY DEMO FAILED. FROM HERE IT'S DEMO TIME. I'M GOING TO JUMP RIGHT IN AND TALK ABOUT A STORY THAT COULD HAVE BEEN A LITTLE BIT BETTER BUT SUCH IS LIFE.

TODAY THIS WEEK, YET WPF CORE SHIPPED. THAT MEANS WPF AS A CORE IS G8. IF YOU INSTALL VISUAL STUDIO G 3 THAT MEANS YOU HAVE THE TOOLING. UNFORTUNATELY THE DESIGNER IS OFF BY DEFAULT. WE SCREWED UP. WE MADE A LITTLE MISTAKE. I'LL SHOW YOU HOW TO ENABLE IT. IF YOU HAVE A WPF PROJECT. THIS IS A WPF PROJECT HERE. YOU GO TO TOOLS, OPTIONS, PREVIEW FEATURES. IF YOU HAVE THE DOT NET CORE AS THE KING AND YOU RESTART IT, WE'LL DO THAT JUST TO KIND OF PROVE THE POINT. SO LET'S RESTART THE APPLICATION REAL QUICK. AND I SHOULD HAVE MY LITTLE DEMO APP. I HAVE TO GET THIS TO OPEN. SO YOU CAN SEE DESIGNER IS OPENING. TOTALLY OUR FAULT.

SORRY ABOUT THAT. BUT DESIGNER IS THERE AND WE'RE GOING TO SERVICE THIS RELEASE TO MAKE IT AVAILABLE. I SHOWED YOU HOW TO ENABLE IT RIGHT AWAY AND START USING IT. THE ONE THING I DO WANT TO POINT OUT IS LET'S MAKE SURE I HAVE THE RIGHT — SOME OF THESE LITTLE APPLICATIONS. SO JUST MAKE SURE THAT I'M LOOKING AT THE RIGHT ONE. ALL RIGHT. YEAH, THIS IS THE RIGHT ONE. ALL RIGHT. SO WE HAVE MULTIPLE DESIGNERS THAT MY TEAM WORKS ON. SOME OF OUR DESIGNERS IS FOR DOT NET FRAMEWORK, ONE IS DOT NET CORE AND WDP. IF YOU PAY ATTENTION, YOU'LL SEE SLIGHT DIFFERENCES. THOSE ARE NOT BUGS, THOSE ARE DIFFERENCES THAT WE SORT OF MADE DECISIONS ON. WE'RE HERE TO HEAR YOUR FEEDBACK ON IT. MOST OF THE DECISIONS ACROSS THE DESIGN ARE THE SAME. EVERYTHING YOU EXPECT IN DESIGNER WORKS HERE IF I GO INTO TOOLBOX, I DRAG IT HERE AND THAT WORKS. IF I RESIZE THE BUTTON THAT WORKS AS WELL. ZAMEL IS CHANGING.

ONE TIP, LOTS OF PEOPLE DON'T REALIZE THERE'S AN EDIT TEMPLATE FEATURE IN HERE, CREATED A COPY OF A STYLE. THIS IS ACCESSIBLE THROUGH RIGHT CLICKING THE CONTROL IN THE DESIGN SURFACE OR IN THE DOCUMENT OUTLINE. IT'S AVAILABLE ANYWHERE. IF YOU RIGHT CLICK ON THAT AND SAY, YES, CREATE AN APPLICATION. YOU GET A LOT OF ZAMEL. SOME OF THE FEATURES THAT WE ALSO GET ASKED WOULD YOU ADD THE FEATURE, WE SAY IT'S THERE, IT'S OUR FAULT YOU DON'T KNOW ABOUT IT.

WE'RE WORKING TO FIX THAT. ONE OF THE COOL FEATURES IS REGIONS. I'M GOING TO SHOW THAT RIGHT NOW. REGION BUTTON STYLE. SO THIS CAME IN THROUGH SURVEYS. PEOPLE WERE ASKING ME, CAN YOU PLEASE ADD THIS FEATURE. AND I WANTED TO SHOW THAT IT'S THERE. SO WE CAN ADD A REGION AND THEN WE CAN COLLAPSE THE REGION. SO REGION BEGIN. MAKE SURE IT'S RIGHT. AND REGION — I HAVE MY FIRST DEMO FAIL OF THE DAY. OH, JESUS. YOU KNOW, WHEN SOMETHING JUST WORKS EVERY SINGLE TIME. WELL, I CAN ASSURE YOU THIS FEATURE DOES WORK. WE'VE TESTED IT SO MANY TIMES. I'M NOT SURE WHY THIS IS MISBEHAVING. THERE YOU GO. SOONER OR LATER ONE OF YOUR DEMOS WILL FAIL. REGIONS ARE IN THERE. GIVE IT A SHOT. IF YOU HIT A BUG LIGHT THIS, PLEASE LET IT GO. WE HAVE THE ABILITY TO USE DEFAULT STYLES OR TEMPLATES. FROM THERE I'M GOING TO JUMP INTO THE DEMO AND WE'RE GOING TO TALK ABOUT AN APPLICATION. SO HERE'S MY PROJECT.

IT'S HERE FOR DEMONSTRATION PURPOSES. YOU HAVE THE MODEL WITH SOME DUMMY DATA. IT'S A FAKE EMAIL CLIENT. IT'S BUILD TIME. WITH THIS APPLICATION I'M GOING TO RESET IT BACK TO THE ORIGINAL STATE AND RUN THE APP. THE FIRST TOOL IS THE IN APP TOOL BAR. IT'S COLLAPSABLE. ONE OF THE FEATURES WE ADDED IS WE MADE IT MOVABLE LEFT AND RIGHT AND WE BLOCK UI. IF YOU COLLAPSE IT, IT'S PRETTY SMALL. WE ALSO ADDED THIS RIGHT-HAND SIDE HAVING IT AVAILABLE BECAUSE DEVELOPERS, WE'RE NOT AWARE OF THIS FEATURE WORKING AND SOME SCENARIOS SO WE ADDED THE MESSAGE THAT SAYS UNAVAILABLE OR AVAILABLE AND YOU CAN COLLAPSE THAT AWAY IF THAT'S NOT HELPFUL TO YOU.

CLICKING ON THE LINK WILL TAKE YOU TO DOCUMENTATION. BOTH THE DOCUMETATION SAYS HOW TO USE THE FEATURE OR IF IT'S UNAVAILABLE, HOW TO RESOLVE THAT AS WELL. IT'S A REALLY IMPORTANT TOOL AND HOPEFULLY YOU FIND IT USEFUL. ONE OF THE THINGS THAT A LOT OF PEOPLE DON'T REALIZE, THERE'S A B BUTTON IN THE LIVE VISUAL TRAIN.

IT GOES AWAY FROM THE APPLICATION. YOU DON'T HAVE TO GO THERE IF THAT'S NOT SOMETHING YOU WANT. IN OUR CASE WE'RE GOING TO PUT IT BACK IN. I WANT TO SHOW YOU HOW TO RELOAD. IT CHANGES THE APP AS IT'S RUNNING. I'VE CHEATED A LITTLE BIT. I'VE CREATED A VIEW MODEL AND ALL THE PLACE MODELS. WHEN YOU ARE RUNNING, VISUAL STUDIO BLOCK YOU FROM ADDING A NEW CONTROL. THE MODEL IS GOING TO RESPOND VERY WELL. AND NOW I WANT TO SHOW YOU HOW V LOAD AND SOME OF THESE OTHERS MADE IT A GREAT EXPERIENCE. I'M GOING TO SHOW YOU THE FIRST FEATURE. I'M GOING TO ADD A BUTTON FOR THE DEMONSTRATION PURPOSES. I'M GOING TO ADD A BUTTON. IT WILL BE 100. 15. ALL RIGHT. THERE'S THE BUTTON AND IF WE GO BACK TO APPLICATION, I SEE THE BUTTON. IT JUST APPEARED MAGICALLY. NOW THIS WINDOW, I'D ACTUALLY LOVE FOR IT TO BE AVAILABLE AT ALL TIMES. I'M GOING TO SAY TOP MOST AND NOW TRUE. NOW IT'S VISIBLE ALL THE TIME. THESE ARE CHANGES HAPPENING TO ZAMEL AND REFLECTED REAL TIME.

LET'S SAY I WANTED TO LEARN MORE ABOUT THE BUTTONS. SEE THE C# CODE AND I DIDN'T KNOW WHERE THE BUTTON WAS IN SOURCE. IN THIS CASE IT'S EASY, MORE COMPLEX LOCATIONS. WE HAVE A BUTTON CALLED ENABLE SELECTION. YOU CLICK ON THAT AND IN OUR LIVE VISUAL TREE YOU CAN SEE THE BUTTON. THIS IS WHERE I WANT TO HIGHLIGHT A NEW FEATURE COMING SOON. IT'S NOT YET AVAILABLE. IT'S CALLED JUST MY ZAMEL. IF I TURN JUST MY ZAMEL OFF, YOU GET A MUCH BIGGER LIVE VISUAL TREE. THAT'S USEFUL. BY DEFAULT WE FIND ONLY THE ZAMEL YOU'VE WRITTEN. WE'VE ADDED A FEATURE CALLED JUST MY ZAMEL. IT WILL BE A SETTING YOU CAN TURN OFF. THAT'S PRETTY COOL. THIS IS BASICALLY GIVING YOU ALL THE FLEXIBILITY HERE TO BUILD YOUR APP AS THE APP RUNS. LET'S START BUILDING THE APP FOR REAL. I'M GOING TO GO AHEAD AND KILL THE TEMPORARY BUTTON AND SHOW YOU A FEATURE WE'VE GOTTEN BY DEFAULT BECAUSE OTHER TEAMS ARE DOING WORK CALLED INTELICODE. YOU GET THE MOST LIKELY ACTIONS THAT OUR AI ANALYSIS SHOWS YOU MIGHT TAKE.

OUR ML. THAT MEANS WE'VE LOOKED AT GET HUB AND OPEN SOURCE AND WE'VE MADE DECISIONS BASED ON ZAMEL, C#. THERE'S A HIGH PROBABILITY THAT YOU WANT TO ADD GROUP DEFINITION. IN FACT, I DO. SO AS I DO THAT, IT SAYS, HEY, THERE'S A REALLY GOOD CHANCE THAT NOW YOU WANT TO ADD A COLUMN DEFINITION. YES, I DO. AS I'M DOING THAT IT MAKES WRITING CODE JUST SO MUCH EASIER. HERE I AM DOING ROAD DEFINITION. I'M GOING TO TAP COMPLETED FOR NO TOMORROW. REALLY, REALLY PERFORMING AND HOW WE LOAD IS MAKING ALL OF THE CHANGES COME ALIVE FOR US IN THE APP ITSELF. AS WE GO THROUGH, I WAS GOING TO WRITE ALL OF THE CODE BUT AS I REALIZE HOW LITTLE TIME I HAVE I'M GOING TO CHEAT A LITTLE BIT AND CUT AND PASTE A FEW TIMES. THAT'S FINE, RIGHT? ALL RIGHT, FIRST OF ALL, LET'S ADD SOME LOOP TO THIS APPLICATION. I'M GOING TO PASTE THIS THING RIGHT HERE. ALL RIGHT. AND AS SOON AS I DO THAT, MY APP COMES ALIVE.

I JUST CREATED A LIST BOX. I CREATED — SORRY, A LIST VIEW. IF I CLICK ON THE LIST VIEW THERE'S AN AREA HERE WHERE THE DETAILS OF THE EMAIL SHOULD BE COMING UP. I'VE ALSO CREATED SOME REFERENCES TO SOME STYLES THAT SHOULD BE IN MY RESOURCE DICTIONARY. I HAVE A RESOURCE DICTIONARY SO I'M GOING TO GO AHEAD AND CREATE THAT. I'M GOING TO GO IN HERE AND I'M GOING TO GO TO MY SOLUTIONS.

HERE'S MY MERGED IN RESOURCE DICTIONARY. I'M GOING TO PUT SOME CODE IN THERE. SAVE THAT OFF. NOW THE ERROR WENT AWAY. ALL OF A SUDDEN MY APPLICATION LIKELY CHANGED. YOU CAN SEE IT'S PICKING IT OUT. APPLICATION CHANGE, PUT IT BACK IN. VERY POWERFUL FEATURE IN THAT SENSE. WE ALSO HAVE A COOL FEATURE AVAILABLE AS PART OF THE IN APP TOOL BAR WHICH LETS YOU SEE THE ALIGNMENT OF THINGS. YOU CAN SEE HOW THAT SELECTION IS ALIGNED TO OTHER THINGS SO WE DRAW GRID LINES BASED ON ENABLE SELECTION.

YOU SAY ENABLE SELECTION, YOU CLICK ON SOMETHING AND THEN IT ENABLES YOU TO SHOW THE GRID LINES AROUND IN THE CROSS. VERY USEFUL FEATURE AND MORE COMPLEX APPLICATIONS. YOU CAN SEE EXACTLY WHERE THEY REMIND THE BABY SHOPPING ENDS AND YOU CAN SEE HOW IT'S USEFUL. COOL LITTLE FEATURE, DISPLAYS IT AND IT'S ADORABLE. WITH THE SELECTION, ENABLE IT TO ONCE AGAIN CLICK ON HERE AND THEN SEE WHERE IS THIS BORDER DEFINED. CLICK ON DEFINED VIEW. SEE WHERE THIS THING IS AVAILABLE IN MY SOURCE CODE. NOW LET'S KEEP BRINGING THIS APPLICATION UP. I'M GOING TO ADD MORE OF THE CODE I DID BEFORE.

I'M GOING TO ADD ANOTHER PIECE HERE WHICH IS A TIGHT BLOCK. AND THINK ABOUT THIS. WHOLE TIME. BEEN RUNNING THE – I'M NOT GOING TO SWITCH AROUND. AS SOON AS I ADDED ANOTHER ONE, LET'S COLLAPSE THIS. THIS IS WHERE COLLAPSING IS USEFUL. AS I'M SWITCHNG IT'S WORKING, RIGHT? IT'S DISPLAYING THE CONCEPT. NOW BEHIND THE SCENES THIS IS JUST ALL IN VDM. I HAVE BINDINGS HAPPENING AND THE BINDINGS ARE — LET'S GET RID OF THIS. WE HAVE BINDINGS TO AN EMAIL COLLECTION, AN OBSERVER COLLECTION OF EMAIL OBJECTS. WE HAVE SELECTED ITEM BINDING TO THE SELECTED ITEM.

THEN WE HAVE THE TEXT BLOCK BINDING TO SELECTED ITEM BODY. EVERYTHING JUST WORKS AND YOU CAN GO AHEAD AND SAY TITLE. SO YOU CAN REALLY CHANGE THIS IN REAL TIME, BODY, WORKS. IF YOU MISSPELL SOMETHING IT'S JUST NOT GOING TO WORK UNTIL YOU FIX IT BUT YOU'RE GETTING ERRORS INSIDE OF THE OUTPUT. YOU'RE WATCHING THAT TO SEE IF YOU HAVE SPELLING ERRORS COMING IN THERE. ALL RIGHT. THERE YOU GO. THAT IS BEING BUILT UP. THAT'S NOT ALL THE THING CAN DO. LET'S GO A LITTLE DEEPER. I'M GOING BACK TO MY CUT AND PASTE WINDOW HERE AND PUTTING A STATUS BAR IN. IF WE WERE BUILDING A REAL CLIENT WE'D HAVE A STATUS BAR. I'M GOING TO ADD THE STATUS BAR IN AND NOW WE'RE IN A STATUS BAR. IT'S CONNECTED. WORKS GREAT. BUT IN REALITY A LOT OF THE WAY THAT YOU COMPOSE A REAL WPF APPLICATION IS TO MOVE SOME OF THE LOGIC OUT.

IN THIS CASE I WANT TO MOVE MY STATUS BAR INTO A CONTROL. I'VE CHEATED A LITTLE BIT. I'VE PUT A LITTLE CONTROL IN HERE SO I HAVE THE STATUS BAR PLACE HOLDER. IF YOU DIDN'T HAVE THIS, YOU WOULD HAVE TO STOP RIGHT NOW AND GO AHEAD AND MAKE THAT HAPPEN. SO IN HERE I WILL SELECT THIS AND I WILL SAY, OH, I'M GOING TO CUT THIS OUT BECAUSE I DON'T NEED THAT AND I AM GOING TO FIRST ADD A REFERENCE TO THE CONTROL. SO ALL THESE, YOU KNOW, NORMAL ZAMEL THINGS — OH, I DID THIS BEFORE, I SHOULD HAVE CREATED UP. WE'LL DO IT AGAIN. JUST BECAUSE I WANT TO SHOW THAT EVERYTHING CAN BE SKEWED IS DUE IN REAL TIME.

I'M TYPING CONTROL AND GETTING INTELISENSE. AND HIGHLIGHT AND AS THEY GO DOWN, I CAN PUT THE CONTROL IN HERE SO I'M GOING TO GO DOWN HERE AND I'M GOING TO SAY CONTROL. THERE'S THE CONTROL. I'M GOING TO PUT THE GRID ROLL COM SPAN. CLOSE THAT OUT. AND RIGHT NOW IT LOOKS A LITTLE BIT MESSED UP. RIGHT NOW MY STATUS BAR LOST THE GRID ROLE. I'M GOING TO REMOVE IT. I'M GOING TO GO AND OPEN UP THE CONTROL AND PASTE IT IN THERE AND EVERYTHING IS BACK TO NORMAL. VERY POWERFUL. YOU CAN BE SITTING HERE BUILDING YOUR APP ESPECIALLY IF YOU GET YOUR VIEW MODEL AND EVERYTHING WORKING CORRECTLY. SO LET'S DIVE A LITTLE DEEPER ON THE TOOLS THAT ARE AVAILABLE. I REALLY WANT TO PLAY AROUND WITH THIS BUT WE'RE SHIFTING IT. I WANT TO MAKE CHANGES. I WANT TO EXPLAIN ONE CONFUSION.

THERE'S A PROPERTY PANELS. IF YOU WANT THEM TO BE COMMITTED TO THE SOURCE CODE, BUT IF YOU JUST WANT TO PLAY WITH THE APPLICATION AS IT'S RUNNING AND JUST HAVE IT BE TEMPORARY, WE HAVE ANOTHER TOOL FOR YOU. I'M GOING TO SELECT THE STATUS BAR CONTROL. I'M GOING TO OPEN IT UP AND I'M GOING TO GO TO THE STATUS ITEM. IN FACT, I'M GOING TO GO ALL THE WAY DOWN TO THE TEXT BLOCK INSIDE OF IT. I'M GOING TO CLICK THIS BUTTON HERE CALLED SHOW PROPERTIES. THIS SHOW IS CALLED THE LIVE PROPERTY EXPLORER. THIS IS ANOTHER WINDOW. IT'S NOT THE PROPERTIES WINDOW. IT'S THE LIVE PROPERTIES WINDOW. IT'S THE ONE THAT LETS YOU MAKE CHANGES TEMPORARY. FIRST OF ALL, THE WORD I WANT TO SAY, I'M LIKE CONNECTED WORKS.

CONNECTED BY THE NETWORK. THAT SORT OF FITS. HIT ENTER. THAT'S THE STATUS BAR. THAT'S GOOD. I ACTUALLY WANT TO CHANGE FONT SO I'M GOING TO GO IN HERE. I'M GOING TO SAY FONT SIZE. WHAT IF THE FONT WAS 24. THAT'S NOT GOING TO WORK. FONT 24 IS DEFINITELY GOING TO BE TOO MUCH. HOW ABOUT FONT 18? STILL CUTS OFF A LITTLE BIT, RIGHT? NOT REALLY GREAT. 14. 14. 14 LOOKS GOOD. SO NOW I KNOW WHICH FONT I WANT TO MAKE. SO I'M GOING TO GO IN HERE AND I'M GOING TO SAY FONT SIZE, 14. THIS ENABLES YOU TO PLAY WITH THE APPLICATION IN A WAY THAT YOU CAN KIND OF GO CRAZY. YOU CAN RESET EVERYTHING BACK TO THE DEFAULT VALUES. IT'S VERY MUCH SAFE TO GO IN THERE AND MAKE LOTS OF CHANGES IF YOU WANT TO TRY IT. I'VE GONE THROUGH AND I'VE BUILT LIKE A LITTLE APPLICATION THAT SORT OF FEELS LIKE A REAL APPLICATION. WE'VE GOT EVERYTHING WORKING AND WE CAN SEE CLEARLY WHAT OUR TREE LOOKS LIKE.

SOME OF THE OTHER FEATURES THAT I WANT TO POINT OUT THAT MIGHT NOT BE FAMILIAR TO EVERYBODY IS SOME OF THE WORK WE'VE DONE. I'M GOING TO MINIMIZE THE APP BECAUSE I WANT TO FOCUS IN THE ZAMEL WINDOW. SOME OF THE WORK WE'VE DONE IN ZAMEL ITSELF. ONE OF THE THINGS YOU MIGHT WANT TO GET HELP ON BECAUSE IT'S NOT CLEAR WHERE SOMETHING IS IS, FOR EXAMPLE, STATIC RESOURCES. WHERE IS THE LIZ BOX EMAIL STYLE LOCATED? I'M NOT SURE WHERE THE ZAMEL IS. IF YOU RIGHT CLICK ON IT, YOU SAY DEFINITION, YOU CAN ACTUALLY LOOK AT THE DEFINITION AND YOU CAN SEE THE FILE THAT IT'S IN AND IT'S ONE OF THESE TEMPORARY FILES THAT YOU CAN PIN UP. IT'S A PEAK DEFINITION.

THAT WORKS. IT WORKS IN A LOT OF PLACES. GIVE IT A TRY. IF IT'S NOT WORKING, LET ME KNOW. IF THERE'S NOT A SCENARIO, THAT'S A COOL FEATURE. YOU CAN RIGHT CLICK OR SAY GO TO DEFINITIONS. YOU CAN ACTUALLY JUMP STRAIGHT TO THE FILE AND MAKE CHANGES THERE. IF YOU WANTED TO GO HERE, I WANTED TO MAKE THE FONTS EVEN BIGGER. FONTS ARE EVEN BIGGER. WORKING AS WE'RE DOING ALL OF THESE THINGS. ANOTHER FEATURE THAT I TALKED TO PEOPLE, THEY'RE NOT FAMILIAR. IT'S ACTUALLY REALLY USEFUL FOR REALLY COMPLICATED APPLICATIONS. THEY MIGHT HAVE LIKE LET'S SAY A LOT OF RESOURCES AT THE TOP. YOU MIGHT WANT TO LOOK AT SOMETHING, LOOKING AT ZAMEL AT THE BOTTOM. THEY HAVE THE SPLITTER. JUST LIKE IN OTHER PLACES YOU STAIR AT THE TOP.

YOU CAN SCROLL DOWN TO THE BOTTOM ONE. MAKE CHANGES. CHANGE VALUES. VERY USEFUL FEATURE AND DEFINITELY WORTH KNOWING ALL OF THESE LITTLE TIPS AND TRICKS TO MAKE IT EASIER TO USE ZAMEL APPLICATION. I'M GOING TO GO AHEAD AND MOVE THIS BACK UP SO THAT WORKS AND NOW IT'S BACK INTO THE SINGLE WINDOW. ALL RIGHT. LET ME MAKE SURE THAT I SHOW YOU EVERYTHING THAT I WANTED TO. I THINK I DID IN THIS CASE. SO LET'S LOOK AT ONE MORE FEATURE HERE. DOCUMENTING UNDER VALUED WINDOW. BASICALLY THIS WINDOW ENABLES YOU TO SEE ALL THE CONTROLS THAT YOU HAVE WRITTEN INSIDE OF YOUR APPLICATION AND YOU CAN GO AHEAD AND LOOK AT THE DESIGNER AND YOU HAVE THAT ABILITY. I DON'T HAVE MUCH TO SHOW IN THAT SENSE. SO THINK ABOUT DOCUMENT OUTLINE AS THE CONTROL THAT YOU CAN USE WHEN YOU'RE USING THE DESIGNER AND THE ZAMEL EDITOR. THEN WHEN WE SWITCH TO POD RELOAD AS YOUR APP IS RUNNING, THAT'S WHERE THE LIVE VISUAL TREE IS AVAILABLE FOR YOU.

ALL RIGHT. I ALSO WANT TO POINT OUT A COUPLE OF THINGS LIKE WE'RE CONSTANTLY MAKING THIS BETTER. I'LL GIVE YOU SOME EXAMPLES. THERE WAS A DEADLOCK ERROR. WE MESSED UP. WE HAD AN ERROR WHERE IF YOU SAID GO TO DEFINITION. WE ACTUALLY FROZE VISUAL STUDIO. REALLY SORRY ABOUT THAT. WE DIDN'T MEAN TO DO THAT. WE FIXED IT. IT WAS IN ONE OF THE RECENT UPDATES. WE HAD A BUG WHERE IF YOU WERE TYPING IN THE CODE EDITOR YOU WOULD GET STATIC RESOURCES FOR A LIST VIEW. WE WOULD IN THEORY ONLY SHOW YOU THE STYLES THAT APPLY TO TARGET. WE HAD A BUG WHERE WE WERE SHOWING EVERYTHING. THINGS LIKE THAT ARE BEING FIXED. WE'RE NOT MAKING A LOT OF NOISE ABOUT IT BUT THESE ARE BEHAVIORS NOBODY WANTED TO HAVE. IF YOU FIND BEHAVIORS THAT YOU'RE LIKE, WHY IS THIS WORKING KIND OF STRANGE? LET US KNOW. WE COULD MISS SOMETHING, TOO.

WE REALLY WANT TO MAKE IT BETTER. THESE ARE INVESTMENTS GOING INTO WPF AND THE DEVELOPERS ARE DOING EVERYTHING FOR EVERY TYPE OF CUSTOMER WE HAVE. THE LAST COUPLE OF MINUTES I WANT TO SHOW YOU ONE BE MORE DEMO. ONE THING I WANT TO POINT OUT IS WE ARE SWITCHING QUITE A BIT HERE. IT'S REALLY WORTH KNOWING ABOUT. I'M GOING TO SWITCH OVER. YOU CAN CLICK ON THE LINK. ZAMEL ISLAND IS ONE THAT'S BEEN WORKING FOR A WHILE. IT'S A TECHNOLOGY THAT ALLOWS YOU AS A WPF WORKER TO HOST INSIDE OF YOUR APPLICATION. LET'S JUMP BACK INTO MY SLIDES. WE HAVE JUST A COUPLE OF MINUTES HERE. AND JUST IN THE INTEREST OF TIME I'M GOING TO GO QUICKLY THROUGH IT AND EXPLAIN IT AS IF YOU HAVE — IF YOU THINK ABOUT UWP, THERE'S AN APP MODEL.

ONE OF THE BIGGEST PARTS ARE THE CONTROLS. IF YOU WANT THE CONTROLS IN YOUR APPLICATION, ZAMEL ISLAND IS THE WAY WE ENABLE IT. THE WORK THAT MY TEAM IS DOING FOR A FUTURE RELEASE, PROBABLY SOMETIME IN THE 16-4 TIME FRAME, WE'RE IMPLEMENTING ZAMEL ISLANDS AND IT WILL REQUIRE YOU TO DO MANUAL STEPS. IT WILL MAKE IT SO YOU DON'T NEED TO DO MANUAL STEPS. THE WAY ZAMEL ISLANDS WORKS IS IT REQUIRES 1903 VERSION OF WINDOWS. IT'S ANOTHER VERSION OF WINDOWS.

FOR NOW THAT'S THE THING. IT ALLOWS YOU TO HOST INSIDE OF A SINGLE APP. 132 APP, WIN FORMS. WHEN THEY'RE BUILT I WOULD SAY LOOK AT THE DOCUMENTATION. THAT'S THE BEST PLACE TO GET ALL OF THE INFORMATION BUT THERE'S LOTS OF CONTROLS. EVERYTHING IS BUILT, IT'S OPEN SOURCE. IT'S EASY TO IMPLEMENT. IT'S KIND OF BASIC. THERE'S NOT A LOT OF TOOLING SUPPORT. IT DOESN'T GIVE YOU ALL THE LIKENESS OF HOW TO LOAD DESIGNERS BUT IT DOES WORK IN THE APPLICATION. AND JUST A QUICK DEMO OF WHAT THAT CAN LOOK LIKE. I WILL SHOW YOU SOMETHING THAT'S SUPER SIMPLE. THIS APPLICATION LITERALLY HAS THREE LITTLE BOXES BUT IT'S VERY SIGNIFICANT. THE FIRST BOX ON THE VERY LEFT IS THE ONE THAT COMES WITH WPF.

THIS IS A WPF CORE APP WITH A WPF LIST BOX. NOTHING TO SEE HERE. THIS NEXT ONE IS ZAMEL ISLAND. I'M DOING NATIVE BINDING USING C#. DOING IT IN C# TO DEMONSTRATE THAT THAT'S POSSIBLE. THEN WE HAVE A THIRD ONE WHICH I'VE STYLED. IT'S IMPOSSIBLE TO STYLE IT AS WELL BECAUSE I'M HOSTING IT IN THE CUSTOM CONTROL. I HAVE POOR CONTROL OVER STYLE, LOOK AND FEEL. I'LL HAVE THE SAMPLE AVAILABLE ON THE LINK.pTHAT'S MY DEMO. ALL OF THIS IS HERE FOR YOU. I WISH I HAD MORE TIME AND I'LL BE BACK ON DOING STANDUPS AND OTHER THINGS WE'RE DOING TO TALK MORE ABOUT THIS. THANK YOU SO MUCH FOR JOINING ME. IF YOU HAVE QUESTIONS, PLEASE TWEET AT ME OR EMAIL ME. >> ALL RIGHT. AWESOME. THANK YOU SO MUCH, DMITRY. SO WE HAVE A COUPLE OF QUESTIONS. START WITH THIS ONE. SO, JDK WANTS TO THANK YOU FOR USING THE DARK THEME FOR YOUR DEMO. >> DARK THEME. >> LOVE THE DARK THEME. >> I CAN'T TAKE ANYMORE OF THE WHITE BACKGROUND SO THANKS, DMITRY.

LET'S SEE. WHAT ELSE DO WE HAVE. MATTHEW SAYS THE CHANGES TO ZAMEL DESIGNER THAT I'M SEEING GIVE ME HOPE FOR A NORMAL SLEEP CYCLE IN THE FUTURE. >> HEY. >> WE'RE TRYING. IT'S A GOAL OF OURS AND WE HAVE SOME REALLY INTERESTING THINGS PLANNED FOR THE ZAMEL DESIGNER. IF YOU'RE INTERESTED TO HAVE SOME CONVERSATIONS WITH US, TWEET AT ME OR EMAIL ME. I'LL MAKE SURE MY EMAIL IS AVAILABLE. >> HERE'S A QUESTION THAT I HAVE. IS IT PRONOUNCED XMAL, ZAMEL OR — >> WE TALKED ABOUT THIS. IT'S ZAMEL. >> ARE YOU SURE THOUGH? >> IT'S ZAMEL. >> OKAY. ZAMEL. >> ZAMEL. >> AS WE GO, WE ARE ALMOST DONE WITH THIS PART OF IT.

WE HAVE ONE MORE SESSION BUT BEFORE THAT I WANT TO LET YOU KNOW THAT YOU NEED TO PARTICIPATE IN THE TECHNICAL TREASURE HUNT. THAT'S THE IMPORTANT BIT. YOU CAN DO THAT ALL DAY TODAY. THERE CAN BE MORE STUFF GOING ON BUT BEFORE WE GO TO THE NEXT SESSION, WHICH IS SECURE PACKAGING SYSTEM, WE HAVE SOMETHING TO SHOW YOU. LET'S TAKE A LOOK. >> THIS ONE'S FROM THE FOLKS AT CONTRAST SECURITY. THEY WANT TO KNOW WHICH ONE OF THE CODE SNIPPETS CONTAINS A SECURITY VULNERABILITY. IN YOUR BEST INVESTIGATION, TAKE A LOOK. LET US KNOW. WHISPER YOUR RESPONSE IN THE FORM OF CODE AND A LETTER. ONE OF THE LETTERS THAT CORRESPONDS TO THAT CODE SNIPPET THAT DOES CONTAIN THE SECURITY VULNERABILITY, WHISPER THAT TO THE DOT NET BOT IN THE VISUAL NET STUDIO CHAT ROOM IN TWITCH AND YOU COULD BE WELL ON YOUR WAY TO THE NEXT STEP IN OUR TECHNICAL TREASURE HUNT. >> HI. I'M CAM SOPER. I'M WORKING ON DOT NET DOCS. IN OUR PREVIOUS VIDEO I SHOWED YOU HOW EASY IT IS TO USE THE FRAMEWORK CORE TO CREATE AND WORK WITH A NEW DATABASE.

IN THIS VIDEO WE'RE GOING TO SHOW YOU THE FRAMEWORK CORE TO WORK WITH AN EXISTING DATABASE BY REVERSE ENGINEERING IT. I HAVE A BRAND-NEW CONSOLE APP THAT DOESN'T HAVE ANY CODE ADDED TO IT AT ALL. I'VE ALREADY ADDED THE NUGET PACKAGES, THE SAME WE DO WITH A NEW DATABASE. MICROSOFT DOT SQL SERVER DOT DESIGN DOT TOWELS. I HAVE AN EXISTING DATABASE. IT WAS BUILT BY HAND BY A DATABASE ADMINISTRATOR. TO REVERSE ENGINEER THE DATABASE I AM GOING TO USE THE SCAFFOLD DB CONTEXT COMMAND MODE. I'M GOING TO PASS THE CONTEXT CONNECTION STRING.

I'M GOING TO PASS IN THE NAME OF THE PROVIDER SO IT KNOWS WHAT KIND OF DATABASE AND THEN I'M GOING TO OPTIONALLY SPECIFY AND A NAME FOR THE DATABASE CONTEXT. NOW THAT THE SCAFFOLD IS RUN, WE HAVE A COMPLETE WORKING ENTITY MODEL. LOOKING AT THE PRODUCTS ENTITY, IT SHOULD LOOK PRETTY SIMILAR TO THE ONE WE CREATED IN THE LAST VIDEO. ONE DIFFERENCE YOU'LL NOTE IS THERE ARE NO DATA ANNOTATIONS DESCRIBING THE PROPERTIES, FOR EXAMPLE, WHICH ONE MIGHT BE REQUIRED OR MIGHT BE A KEY.

THAT'S BECAUSE THESE BEHAVIORS ARE CONTAINED IN THE ON MODEL CREATIVE METHOD OF THE DATABASE CONTEXT. IF WE'D LIKE TO CREATE AN ENTITY MODEL THAT LOOKS MORE LIKE THE ONE WE CREATED IN THE PREVIOUS VIDEO, WE CAN DO THAT, TOO. I'LL START BY DELETING THIS ENTITY MODEL. AND I'LL RUN THE SCAFFOLD DB CONTEXT BUT THIS TIME I'LL ADD THE DATA ANNOTATIONS FLAG. THIS TIME THE PRODUCTS ENTITY HAS DATA ATTRIBUTES THAT DESCRIBE THE DATA OF THE PROPERTIES SUCH AS THE KEY AND REQ REQUIRED. AND THE ON MODEL CREATING METHOD IN THE DATABASE CONTEXT IS MUCH MORE SPARSE. NOW THAT WE'VE SEEN HOW ENTITY FRAMEWORK CORE CAN WORK WITH AN EXIST DAGG AT THAT BASE, IN THE NEXT VIDEO I'M GOING TO SHOW YOU HOW TO STREAMLINE YOUR WEB DEVELOPMENT. >> HEY, EVERYONE. WELCOME TO DOT NET CON. I'M A PM ON THE NUGGET TEAM. TODAY WE'RE LOOKING AT HOW YOU CAN SECURE YOUR NUGGET PACKAGE SYSTEM.

THEY MADE THE NEWS. WE HAVE SEEN THE PROPENSITY FOR PACKAGE MANAGERS FOR THE MODE OF ATTACK. >> SO THE PACKAGE NEWS. THERE ARE MANY NEW THINGS. NOW WE'LL DO IT. IT WAS ABLE TO GET ACCESS TO THE CORE DEPOSITOR RIS. THEY HAD ACCESS TO THESE DEPOSITOR RIS WHICH MEANS THEY COULD HAVE MADE A CHANGE AND THAT CHANGE WOULD HAVE FLOWN ANYBODY THAT RAN HOME BREW UPDATE OR EASILY INSTALL HOME BREW AND THEY WOULD HAVE GOTTEN THEIR MALICIOUS FORMULA.

NOW THE TAKE AWAY REALLY HERE IS THAT THERE WAS NO WAY FOR THE END USER TO DO THIS. REALLY WHAT WE'RE ASKING IS THE TOOLS THAT PACKAGE SHOULD BE ABLE TO DETECT AND BLOCKED. IN ADDITION THERE SHOULD BE A WAY FOR PACKAGE ORDERS TO STAND THE IDENTITY ON THE OTHER END FOR THE PACKAGE CONSUMER TO CONFIRM THAT THIS PACKAGE TRULY CAME FROM WHO IT SAYS IT CAME FROM. IN A SEPARATE INTEREST LAST YEAR THE MPM ACCOUNT OF THE MAINTAINER OF A REALLY POPULAR PACKAGE IS COMPROMISED. THE HACKER WENT ON TO PUBLISH A MALICIOUS BIT THAT GOT INTO 4500 ACCOUNTS AND GOT THE CREDENTIALS BEFORE IT WAS TAKEN DOWN. NOW THIS WAS — THIS WAS NOT ON THE MPSJ SITE. THE ATTACKER WAS ABLE TO GET THE PASSWORD AND USER MAIN FROM THE MAINTAINER FROM THE THIRD PARTY AND WAS ABLE TO REUSE IT. SO THE CLEAR TAKE AWAY HERE IS USER NAME AND PASSWORD SECURITY IS SIMPLY NOT ENOUGH. IN A SEPARATE INCIDENT AN ATTACKER USED A DIFFERENT VECTOR TO TARGET PACKAGE USERS. THEY PUBLISHED SEVERAL PACKAGES THAT LOOKED VERY SIMILAR TO A VERY POPULAR PACKAGE WHICH HAS OVER 2.5 MILLION WEEKLY DOWNLOADS.

THEY THEN WENT ON TO — THESE WERE ALL MALICIOUS PACKAGES THAT HARVESTED ENVIRONMENT VARIABLES FROM THE VECTOR'S MACHINE. IT WENT UNNOTICED FOR NEARLY TWO WEEKS. THE KEY TAKE AWAY HERE IS REPOSITORIES SHOULD BE ABLE TO DETECT AND BLOCK THE ATTEMPTS. IN ADDITION THERE SHOULD BE A WAY FOR USERS TO DEFINE WHICH PUBLISHERS THEY REALLY TRUST AND IF A PACKAGE DOES NOT NEED THAT IT SHOULD FAIL TO INSTALL. NOW LET'S TAKE A QUICK LOOK AT WHAT DOES A TYPICAL ONE LOOK LIKE AND WHAT ARE SOME OF THE BEST PRACTICES? SO LET'S SAY I HAVE AN AWESOME LIBRARY THAT I WANT TO SHARE WITH THE WORLD AND THE OBVIOUS NEXT STEP THERE WOULD BE TO CREATE A NUGGET PACKAGE.

THE FIRST BEST PRACTICE HERE WOULD BE TO AUTO SIGN IT. AUTO SIGNING IT ALLOWS ME TO STAMP MY IDENTITY ON THE PACKAGE AND ON THE CONSUMPTION SITE IT ALLOWS THE CONSUMER TO VALIDATE THAT THIS PACKAGE REALLY CAME FROM ME. NEXT I WANT TO PUBLISH THIS PACKAGE TO NUGGET ART. LAST YEAR THE NUGGET ART ADOPTED EMBASSY BASED AUTHENTICATION. NOW SETTING IT UP IS REALLY EASY. IT IS LITERALLY THREE STEPS AFTER YOU LOG IN. NOW IF YOU ARE AN ENTERPRISE CUSTOMER THAT USES AZURE ACTIVE DIRECTORY TO LOG IN, YOU CAN ASK YOUR ADMIN TO ENABLE FA AND IT IS THAT EASY. ENABLING 2FA WOULD HAVE PREVENTED SEVERAL OF THESE ATTACKS. THE NEXT HERE IS TO PUBLISH THIS PACKAGE. NOW WHEN THE PACKAGE IS BEING PUSHED, WE ACTIVELY CHECK IF THIS PACKAGE I.D. LOOKS VERY SIMILAR TO AN EXISTING PACKAGE AND IF IT DOES WE BLOCK IT FROM PUBLISHING AT THAT POINT ITSELF. AFTER IT PASSES THAT AND IT DOES NOT LOOK SIMILAR, IT UNDERGOES SEVERAL CHECKS TO SEE, INCLUDING VIRUS SCANNING TO ENSURE THAT THIS PACKAGE IS SAFE FOR CONSUMPTION.

ONCE IT PASSES THESE CHECKS, THEY SIGN IT WITH THEIR OWN REPOSITORY SIGNING. THIS WAY YOU CAN BE GUARANTEED IF YOU ARE USING IT THROUGH ADO, USING AN UPSTREAM SOURCE OR THIS IS HOSTED ON AN INTERNET FEED, ET CETERA. THIS WAS A PUBLISHING SIDE OF THINGS. LET'S SEE WHAT WE CAN DO WHEN YOU'RE CONSUMING THESE PACKAGES. WE HAVE SOMETHING CALLED CLIENT POLICIES. THIS ALLOWS A PACKAGE CONSUMER TO DEFINE AND SAY I WANT TO TRUST A PACKAGE THAT HAS BEEN AUTHORED BY CERTAIN AUTHOR. I ONLY WANT TO TRUST PACKAGES THAT COME FROM A SPECIFIC FEED AND YOU CAN GET MORE SPECIFIC BY SAYING ONLY BY THESE SPECIFIC USERS ACCOUNT.

LET'S TAKE A LOOK AT A QUICK DEMO OF HOW YOU CAN DO THIS IN THE DAY-TO-DAY FLOW. SO I HAVE A SOLUTION THAT IS CLEANER AND I'VE BEEN WORKING ON THIS SIDE PROJECT ALONG WITH THE NEW PM ON THE TEAM. I WANT TO IMPLEMENT THIS POLICY. THE FIRST THING I DID HERE WAS ADD A NEW DOTCOM AND THIS IS AT THE SOLUTION LEVEL. THIS IS NECESSARY TO ISOLATE THE SETTINGS THAT I WANT TO APPLY FOR THE SOLUTION FROM THE OTHER SOLUTIONS THAT I MIGHT HAVE ON THE FIRST THING I REALLY WANT TO DO HERE IS START USING — IS START VALIDATING SIGNATURES WHEN PACKAGES ARE BEING INSTALLED. THE WAY YOU WILL DO THAT IS BY SETTING THE SIGNATURE VALIDATION MODE TO REQUIRE. WHAT THIS DOES IS EVERY TIME YOU INSTALL A NUGGET PACKAGE TO ANY PROJECT IN THE SOLUTION, YOU CHECK THAT THE PACKAGE HAS A VALID SIGNATURE.

NOW THIS HAPPENS AT THE TIME OF THE SOLUTION WHICH MEANS WHEN THE PACKAGE IS BEING EXTRACTED IT CHECKS FOR THE SIGNATURE AND THEN FROM THAT POINT ONWARDS THAT PACKAGE IS PRESUMED TO BE SAFE. HENCE, IT IS A BEST PRACTICE TO ADD A NEW GLOBAL PACKAGES FOLDER WHICH IS EXCLUSIVE FOR THE PACKAGES YOU WANT TO USE WITH THE SOLUTION. THE WAY YOU CAN DO THAT IS SIMPLY BY USING — BY ADDING A NEW KEY CALLED GLOBAL PACKAGE AND DEFINING THAT FOLDER. NOW LET ME QUICKLY CLOSE THE SOLUTION AND RE-OPEN IT SO THAT THE NEW CONFLICT CAN TAKE EFFECT. ALL RIGHT. S LET'S START TO INSTALL SOME NUGGET PACKAGES INTO THIS PROJECT.

I'M GOING TO TRY TO INSTALL IT INSIDE OF JASON. THE PACKAGE FAILED TO INSTALL. ALTHOUGH WE SAID WE WANTED TO VALIDATE PACKAGES ON INSTALLATION, BUT WE DID NOT REALLY SPECIFY WHAT PACKAGES OR SOURCES WE TRUST. THE NEXT THING TO DO HERE IS DEFINE IT AS A TRUSTED PACKAGE SOURCE. WE'RE USING THE TRUSTED SIGN. FIGURE OUT WHAT IS THE RIGHT FINGERPRINT FOR THE PACKAGES THAT ARE SIGNED AND SET IT IN YOUR CONTRACT FILE. SO I'M GOING TO ONCE AGAIN RELOAD MY SOLUTION FOR THE SETTINGS TO TAKE EFFECT AND LET'S TRY TO INSTALL THAT PACKAGE AGAIN. AND AS EXPECTED, THIS PACKAGE WHAT IF YOU TOLD ME THAT I WANT TO HAVE MORPHINE CONTROL OVER THE KIND WHICH USERS ON — OR WHICH PACKAGES I TRUST.

YOU CAN EASILY DO THAT BY SPECIFYING OWNERS. I'M GOING TO SAY, I TRUST JAMES AND KATE. AWESOME. >> LET'S SAY SOMETHING LIKE THIS. AND AS EXPECTED, IT DID NOT — IT DID NOT GET INSTALLED BECAUSE ALTHOUGH IT IS — IT HAS VALID SIGNATURE, IT IS NOT IN OUR LIST OF TRUSTED SIGNERS. SO TO SUMMARIZE, CLIENT TRUST POLICIES ALLOWS YOU — GUARANTEES YOU PACKAGE AUTHENTICITY AND INTEGRITY.

YOU'RE GUARANTEED IT COMES FROM WHO IT SAYS IT COMES FROM. THE PACKAGE HAS NOT BEEN TAMPERED AFTER IT HAS BEEN CREATED. NOW IN ADDITION TO CLIENT TRUST POLICIES YOU CAN ALSO USE LOCK FILE. WHAT LOCK FILES DO IS THEY STORE THE HASH OF THE PACKAGE CONTENT AND WHEN A PACKAGE IS BEING RESTORED IT VALIDATES THIS AGAINST THE CONTENT THAT HAS BEEN RESTORED. IF IT DOES NOT MATCH, IT FAILS THE RESTORE AND THEN SHOWS THAT A PACKAGE DOES NOT — A BAD PACKAGE DOES NOT FIND ITS WAY INTO YOUR NUGGET DEPENDENCY CHAIN.

AND TO CLOSE THE LOOP HERE, WE HAVE HOSTED A FIRST CLASS AND HIGHLY AVAILABLE SIMPLE SERVER. THIS ALLOWS PACKAGE OWNERS TO SUBBLISH SYMBOLS USING THE NEW FORMAT. THIS USES A SECURE PORTABLE AREA FOR SYMBOLS. THIS ALLOWS YOU — THIS ALSO ALLOWS YOU TO SECURELY DEBUG YOUR NUGGET PACKAGES AND TO MAKE THINGS EASIER THIS IS LISTED AS ONE OF THE DEFAULT SOURCES IN VISUAL STUDIO. THE ADDED SECURITY HERE IS THAT THE NUGGET — THE DLS IN THE NUGGET HAVE A CHECK SYMBOL FOR THE PDMPs. IT WILL VALIDATE AND HAVE THE SECURITY. NOW LET'S TAKE A SNEAK PEEK AT WHAT WE HAVE COMING UP IN THE NEXT FEW RELEASES. WE WILL BE INTEGRATING WITH GET HUB ACCOUNTING SERVICE. WHAT THIS MEANS IS IF YOU INADVERTENTLY CHECKED IN ONE OF YOUR NUGGET IPs, WITHIN SECONDS WE WILL BE ABLE TO DETECT THAT AND DELETE THAT IPA AND NOTIFY YOU. THIS WILL ENSURE — THIS WILL MINIMIZE THE POTENTIAL FOR MALICIOUS USE OF ANY KEY THAT MIGHT HAVE LEAKED.

ALSO WE ARE WORKING ON A NEW FEATURE THAT HELPS YOU IDENTIFY AND FLAG VULNERABLE PACKAGES AND EVEN IN OUR DEPENDENCY GLOVE, THIS INCLUDES ANY PACKAGES THAT — THIS INCLUDES DIFFERENCES AS WELL. AND THIS WILL ALLOW YOU TO PROACTIVELY UPDATE YOUR DEPENDENCIES TO A — TO ONES THAT DO NOT HAVE THESE V VULNERABILITIES AND SHIP SECURE CODE AND APPLICATIONS TO YOUR CUSTOMERS. AT TODAY THAT YOU WANT TO KNOW – MORE, GO TO AKMS/SECURENUGGET AND YOU HAVE LINKS FOR EVERYTHING. THAT'S ALL WE HAVE FROM THE NUGGET PERSPECTIVE. THANK YOU VERY MUCH. >>> ALL RIGHT. I'M EXCITED TO BE HERE, MICA. >> ME, TOO. >> SO WE HAVE JUST COME INTO FRAME BECAUSE I WAS SINGING SOME SPICE GIRLS SONG OVER THERE.

>> YEAH. >> THEY'RE LIKE, HEY, SETH, THE DIRECTOR'S LIKE, YOU NEED TO GO IN THERE RIGHT NOW. BECAUSE YOU'RE IN THE A VERY GOOD SINGER WHEN IT COMES TO SPICE GIRLS, NUMBER ONE. AND NUMBER TWO, YOU'RE KIND OF WORKING AND — >> YOU'RE ON THE CLOCK. >> LET'S GET IN THERE. >> YEAH. >> MAYBE DO SOMETHING.

>> YEAH. >> ALL RIGHT. SO WHAT HAVE WE GOT HERE FOR A NEW POST? LOOKS LIKE WE ARE DONE FOR THE DAY. THANK YOU SO MUCH FOR THAT. >> YEAH, THANK YOU. >> THE COOL THING ABOUT NUGGET THAT I LIKE IS IT ALLOWS YOU TO SHARE CODE BUT THAT'S ALSO THE BAD THING ABOUT NUGGET. SO IT'S GOOD TO HAVE ALL OF THIS INFRASTRUCTURE. DO WE HAVE ANYTHING ELSE IN THERE? >> YEAH.

RYAN, ACTUALLY, IS TALKING ABOUT SECURING PACKAGES. SUPER PUMPED ABOUT THIS SESSION. >> SUPER GREAT. THE COOL THING ABOUT NUGGET IS YOU CAN SHARE STUFF BUT THAT'S ALSO A BAD THING ABOUT NUGGET. OKAY. SO, LOOK, WE ARE DONE IN STUDIO A FOR TODAY. >> YES. >> IS THAT RIGHT? >> YES, WE ARE. YEAH. >> SO WHAT WE'RE GOING TO DO — WHAT WE'RE GOING TO DO IS WE'RE GOING TO NOW TOSS IT OVER TO STUDIO C.

>> YES. >> SO YOU CAN STILL ASK QUESTIONS ON THE DOT NET HASHTAG BUT I'M PROBABLY GOING TO GO HOME AND HAVE A BEER — >> TAKE A NAP. >> MAYBE GO TO SLEEP OR SOMETHING. >> YEAH. YEAH. >> TAKE A NAP. >> SING SOME MORE SPICE GIRLS. WHAT WE'RE GOING TO DO, WE'RE GOING TO HAVE JESS COME IN HERE. RIGHT NOW, COME ON OVER, DUDE. AS HE'S COMING, WE'RE GOING TO TOSS OVER TO THEM. YOU HAD THE PARTY LAST NIGHT, TOO, RIGHT? THE AFTER THING? >> WE HAD THE AFTERPARTY.

AFTERPARTY PARTY. >> WERE YOU WEARING THAT? >> NO. >> SO NOW THIS TIME WE'RE GOING TO HAVE AN EXTRA PARTY. SO IT LOOKS LIKE YOU'RE MUTED RIGHT THERE. >> YES. >> WHY DON'T YOU TALK INTO THE SMALL OF MY CHEST HERE. >> HI, SETH. IT'S SO GOOD TO SEE YOU. >> HOW ARE YOU? >> SO THAT I'M NOT MUTED. NOW HE'S ON. CAN YOU HEAR ME NOW? >> YOU WERE ON BEFORE BUT NOT WITH THE MIKE. >> WE'RE PROFESSIONALS. >> LET'S SHOW THEM WHERE STUDIO C IS.

>> LET'S GO, MICA. >> WE'RE GOING OUT HERE. I'LL OPEN THE DOOR FOR YOU. NO ONE EVER GETS TO SEE CHANNEL 9 STUDIO THE WAY I DO. THIS IS CHANNEL 9 STUDIO. >> YEAH. >> LET'S COME OVER HERE. WAIT, COME HERE. I WANT YOU TO MEET SOMEONE. COME HERE. CLOSER, CLOSER. THIS IS BETH MASSEY. SHE IS THE ONE THAT DID ALL OF THE WORK. WE JUST STAND AROUND AND LOOK PRETTY. SNEAK THIS RIGHT HERE. TELL — >> I LOVE YOU ALL. THANK YOU SO MUCH. WE HAD SUCH A GREAT EVENT. >> WE ADJUSTED THE MIKE SO THAT SHE COULD LITERALLY TALK RIGHT INTO IT.

>> TALK RIGHT INTO IT. >> DO YOU SEE THIS? THIS WAS ALL PLANNED BY OUR WONDERFUL STUDIO PEOPLE. WE'RE GOING TO HAVE YOU BACK UP HERE. >> LET'S GO FOR A WALK. >> LET ME SHE YOU ALL THE BUTTONS THEY PUSH. I'M GOING TO TRY TO PUSH SOME BUTTONS AND IF ANYTHING HAPPENS, JUST LET ME KNOW. THIS IS WHERE ALL THE BUTTONS HAPPEN. THIS IS THE DIRECTOR. CAMERA AND CAN CAM. HE TELLS US WHAT TO DO AND WE DO IT MOSTLY OUT OF FEAR. SO THERE IS THAT. AND SO THESE BUTTONS SHE SAYS NEVER TO PUSH. OKAY? THIS MEANS THAT WE'RE RECORDING COME OVER HERE. AT THE END ALL OF IT IS GOING TO BE HERE.

>> LET'S TAKE A LOOK. >> SO WE'RE GOING TO BE BACK HERE. >> NO, NO, NO. >> THIS IS STUDIO C. ANYTHING IN THIS ROOM CAN BE LIVE STREAMED. SO WE'RE GOING IN HERE. WE'RE GOING TO OPEN IT UP. HELLO. >> FANTASTIC. >> THIS IS WHERE THE MAGIC HAPPENS. JOIN US. >> HELLO. >> VERY GOOD. WE'RE ABOUT TO GO LIVE LIVE. TWITCHTV/VISUALSTUDIO. CLICK THAT FOLLOW BUTTON. WE HAVE LOTS MORE BUT WE HAVE OUR CRACK TEAM OF HOSTS ALL THROUGHOUT THE DAY YOU'RE GOING TO SEE A BUNCH OF FOLKS HOSTING, SHOWING CONTENT THROUGHOUT THE DAY. EVERY TIME ZONE. >> THEY ARE TELLING ME TO WRAP IN MY EAR BECAUSE I HAVE A SPECIAL EARPIECE THAT MAKES ME GET INTO SPECIAL PLACES ALL THE TIME. IT'S FANTASTIC. WE'RE GOING TO WRAP IT UP HERE WITH THE DOT NET COM FROM STUDIO A. THEY TELL ME TO KEEP TALKING. XAVIER IS THE OTHER MASTERMIND. YOU CAN TALK INTO — HE DOES ALL OF THE WEBSITE STUFF AND HE BROUGHT UP A BEAUTIFUL DASHBOARD.

>> YOU'RE WELCOME. >> LET ME GET CLOSER. >> YOU'RE WELCOME. >> THANK YOU. THANK YOU. >> HERE'S HOW TECHNICAL WE ARE — >> DOUBLE KEYBOARDS. >> TWO KEYBOARDS. THIS IS A TWO-KEYBOARD SHOW. >> IT'S GREAT. THERE ARE MORE BUTTONS. >> LOOK AT ALL OF THESE BUTTONS. >> DON'T PUSH THIS ONE. THEY TOLD US THAT THIS WILL CAUSE ISSUES. THERE'S LITERALLY AN X THERE THAT SAYS DON'T PUSH IT. >> KIND OF WANT TO PUSH IT. >> SO BEFORE WE GO, WE'D LIKE TO SAY THANK YOU FOR THOSE THAT WERE WITH US IN STUDIO A. WE'RE GOING TO TURN IT OVER TO STUDIO C AFTER A SHORT LITTLE BREAK BUT GO TO TWITCH DOT TV/FRONTSTUDIO TO ENJOY ALL OF THE FUN. MAKE SURE YOU TUNE IN. SEE YOU THERE. >> KIND OF WANT TO PUSH IT..

Leave a Reply

Your email address will not be published. Required fields are marked *