MORNING. COME ON IN. WE'RE GOING
TO GET STARTED HERE. THANK YOU SO
MUCH FOR COMING. MY NAME IS SYLVIA
OKAFOR. WE WILL HERE TO TALK ABOUT
THE MICROSOFT 365 PROGRAM. SHOW
OF HANDS, I KNOW IT'S EARLY, BUT
RAISE THEM HIGH SO I CAN SEE THEM.
YES? NO? ALL RIGHT. THAT'S WHAT
I LIKE TO SEE. WE'RE DOING OUR JOB.
HOW DOES THE OFFICE 365 DEV PROGRAM
FIT INTO THAT? WELL, THE OFFICE
365 PROGRAM HAS INTEGRATED WITH
75 OF THE MICROSOFT 365 PROGRAM.
WE ARE THE BEST PLACE FOR YOU TO
GET STA STARTED STARTED WITH MICROSOFT
365 DEVELOPMENT. WE CONNECT TO YOU
THE EXPERTISE YOU NEED TO BUILD
SOLUTIONS ON TOP OF THE MICROSOFT
365 PLATFORM. AND WE ENGAGE TO UNDERSTAND
WHAT YOUR TOUGH PROBLEMS ARE AND
HOW WE CAN CONTINUE BUILDING SOLUTIONS
TO HELP MAKE MICROSOFT 365 DEVELOPMENT
EASY. FOR EXAMPLE, LAST YEAR AT
BUILD, YOU GUYS GAVE US REALLY GREAT
FEEDBACK. THE FIRST THING YOU SAID,
WAS, HEY, EVERYTHING IS SCATTERED.
HOW DO I FIND ALL THE INFORMATION
FOR ALL THESE DIFFERENT PRODUCTS?
WHAT WE'VE DONE IS INTRODUCED THE
MICROSOFT RESOURCES GALLERY. THIS
IS WHERE WE PULL TOGETHER TOOLS,
SAMPLES, TRAINING, BLOG POST, ET
CETERA, WE PULL IT ALL INTO ONE
PLACE MAKING IT EASY TO FIND AND
SAVING YOU TIME AS YOU ONBOARD TO
THE MICROSOFT 365 PLATFORM. YOU
CAN FILTER BY PRODUCT OR TECHNOLOGY
OR SEARCH FOR SOMETHING IF YOU KNOW
WHAT YOU'RE TRYING TO FIND. THE
SECOND THING YOU GUYS SAID LAST
YEAR IS, HEY, I NEED HELP. WHERE
I CAN GET ACCESS TO EXPERTS? SO
WHAT WE STARTED DOING IS WE STARTED
DOING 10 TO 13 MONTHLY COMMUNITY
CALLS WITH OUR COMMUNITY. WHAT WE
DO IS YOU CAN CALL IN AND HAVE A
CONFERENCE CALL WITH THE PMs AND
ENGINEERS THAT WORK ON YOUR SPECIFIC
TECHNOLOGY WHICH RANGE FROM OFFICE
ADD-INS, SHARE POINT, MICROSOFT
TEAM, AND THE WHOLE MICROSOFT 365
PLATFORM. YOU CALL IN, YOU CAN GET
YOUR QUESTIONS ANSWERED OR DIVE
DEEPER WITH THE PMs AND ENGINEERS
FOR THOSE PLATFORMS. WE ALSO DO
BOOT CAMPS AND THESE START IN THE
EARLY OCTOBER TIMEFRAME, BUT WHAT
IT IS, YOU CAN COME IN FOR ONSITE
TRAINING ON HOW YOU CAN BETTER LEVERAGE
THE MICROSOFT 365 PLATFORM. IT'S
ALL DAY, IT'S YOU AND A GROUP OF
PMs AND ENGINEERS WORKING SIDE BY
SIDE ON THE SOLUTION YOU'RE TRYING
TO BUILD. LASTLY, THE BIGGEST THING
THAT WE HEARD LAST YEAR WAS, HEY,
I'M A CORPORATE DEVELOPER, AND IT
IS WAY TOO HARD TO GET STARTED.
MY ADMIN WON'T GIVE ME MY OWN TENANT,
YOUR PROCESS TAKES 16 STEP, I HAVE
TO ADD THE CREDIT CARD. IT'S TOO
HARD. MAKE IT EASY FOR ME. SO WHAT
WE DID AS A BENEFIT OF THE OFFICE
365 DEV PROGRAM, YOU GET A FREE
OFFICE SUBSCRIPTION. THAT COMES
WITH 25 LICENSES AND YOU CAN GET
SET UP IN LESS THAN FIVE MINUTES.
YES, LET THAT SINK IN, LESS THAN
FIVE MINUTES. NO CREDIT CARD, NO
16 STEPS AND I WILL SHOW YOU HOW
EASY BY DOING IT LIVE, GET ONE RIGHT
HERE. >> YOU KNOW, I THINK WE OUGHT
TO TIME IT SO THAT WE CAN ACTUALLY
KEEP YOU ACCOUNTABLE. >> TIME IT.
I AM THAT CONFIDENT. >> I'VE GOT
MY TIMER ON MY APPLE WATCH HERE
READY. >> HOLD ON. >> I'M READY
TO ROCK. >> THE ONE THING TO JOIN
THE DEV PROGRAM, GO TO THIS LINK.
AND LET'S SEE IF I CAN GET IT UP
HERE. >> JUST SKIP THE VERIFICATION.
>> THANK YOU. IT DIDN'T COME UP.
THERE IT GOES. GOOD THING I HAD
IT UP ANYWAYS. 365. THERE IT IS.
ALL RIGHT. SO YOU GO TO THAT LINK,
AND YOU CAN JOIN THE DEV PROGRAM
HERE. I'VE ALREADY JOINED, SO I'M
GOING TO DIRECTLY INTO THE DASH
BOARD. WHEN YOU SIGN UP, YOU GET
TO THE DASH BOARD. YOU CAN MAKE
PREFERENCES AND WE WILL SERVE YOU
CONTENT BASED ON THE CONTENTS SO,
YOUR BLOG, CODE SAMPLES, THOSE ARE
BASED ON THE PREFERENCES I PICKED
WHEN I SIGNED UP. READY, MIKE SNELL.
>> ARE YOU READY IS THE QUESTION.
>> START THAT TIMER. >> IT'S GOING.
>> SET UP SUBSCRIPTION, CREATE A
USER NAME. I'M GOING TO USE MY NAME.
>> NO PRESSURE, ONLY FIVE SECONDS.
>> THEN I CAN CREATE A PASSWORD.
JUST GOING TO DO THAT HERE. ALL
RIGHT. THAT'S STEP ONE. PHONE NUMBER.
I'M GOING TO ACTUALLY USE MICHAEL'S
PHONE BECAUSE I SEE HE HAS HIS PHONE
RIGHT HERE. >> THAT'S RIGHT. YOU
BETTER BUY ME A COFFEE LATER OTHERWISE
-- >> IF WE GO OVER FIVE MINUTES.
>> 91185. >> THAT'S IT? OKAY. >>
I'M ADDING SO MUCH VALUE HERE. >>
AND HOW MUCH TIME DO WE HAVE? WHAT
ARE WE AT? >> YOU ARE AT 48 SECONDS.
49 SECONDS. 50 SECONDS. 51. 52.
SO YOU'RE DOING OKAY. >> ALL RIGHT.
I'M DOING OKAY. I'M GOING TO BLAME
THIS LITTLE LAST PART ON HOW MANY
PEOPLE ARE IN HERE AND ALL OF YOU
ON THE INTERNET. THERE IT IS. WHAT'S
THE TIME? CALL IT. >> WHOA, THAT
WAS 1: 05. >> YOU SEE? -- THAT WAS
1:05. >> THREE STEP, DIDN'T HAVE
THE CREDIT CARD. >> WAY TO ROCK.
>> SO AS YOU CAN SEE HERE, SO MY
SUBSCRIPTION IS HERE. I SEE MY DOMAIN
NAME. I HAVE WHEN IT EXPIRES AND
I HAVE MY 25 USER LICENSES. AS YOU
CAN SEE, I HAVE 92 DAYS LEFT RIGHT
NOW. SO WHEN YOU JOIN, YOU GET 90
DAYS RIGHT OFF THE BAT. AS LONG
AS YOU DEVELOP ON THE PLATFORM AND
CONTINUE TO DEVELOP, WE WILL CONTINUE
TO RENEW YOUR SUBSCRIPTION. SO YOU
GET IT AS LONG AS YOU'RE DEVELOPING
ON THE PLATFORM. YEAH? THANK YOU.
THAT'S FIRST PART OF THE OFFICE
DEV PROGRAM. AND I'M GOING TO KICK
IT TO MIKE TOLL SHOW YOU MORE COOL
STUFF. >> THANKS, SYLVIA. LET ME
GET THE SLIDES BACK UP FOR EVERYBODY.
OKAY. >> ALL RIGHT. >> WELL, THANKS.
AS YOU CAN SEE, WE TACKLED ONE OF
THE TOP PROBLEMS WHICH IS JUST GETTING
ACCESS TO A PLACE THAT YOU CAN ACTUALLY
START PLAYING WITH THE OFFICE 365
PLATFORM AND THE ASPECTS OF SHARE
POINT AND MICROSOFT GRAPH. AND IT'S
BEEN AN AMAZING YEAR. WE LITERALLY
LAUNCHED THIS A LITTLE OVER A YEAR
AGO. WE HAVE BEEN HARD AT WORK OVER
THE LAST YEAR AND A HALF ON THIS.
WE HAVE OVER 130, 000 MEMBERS NOW
WHICH WE ARE EXCITED ABOUT. 80,
000 DEV SUBSCRIPTIONS HAVE BEEN
DELIVERED OR NEARLY 80. AND WHAT'S
REALLY COOL IS THAT IT'S HAPPENING
FROM ALL OVER THE WORLD. GLOBALLY.
SO 75 OF ALL OUR MEMBERS ARE COMING
FROM THESE TOP 10 COUNTRIES OF WHICH
ONLY 15 IS THE UNITED STATES. THAT'S
SUPER EXCITING MOMENTUM THAT WE
HAVE. AND WE'RE TRYING TO MAKE IT
EASIER TO GET TO THE DEV PROGRAM,
PARTICULARLY FOR THOSE THAT HAVE
VISUAL STUDIO PRO AND ENTERPRISE
SUBSCRIPTIONS. AND WE'RE ANNOUNCING
TODAY AT BUILD THAT FOR VISUAL STUDIO
PROFESSIONAL MEMBER, YOU'RE GOING
TO NOW BE ABLE TO GET ACCESS TO
THE OFFICE 365 DEVELOPER PROGRAM
RIGHT FROM YOUR VISUAL STUDIO PORTAL.
SO YOU CAN GO TO MYVISUALSTUDIO.
COM AND CLICK ON THE TILE RIGHT
THERE AND BEGIN THE PROCESS TO GO
INTO THE PROGRAM. WE ACTUALLY RATE
YOUR VISUAL STUDIO ID AND YOUR SUBSCRIPTION
DOESN'T LAST JUST 90 DAY, IT LASTS
AS LONG AS YOUR SUBSCRIPTION TO
VISUAL STUDIO LASTS WHICH IS A REALLY
NICE BENEFIT. SO THERE'S REALLY
TWO WAYS THAT YOU CAN ACTUALLY ACCESS
OUR PROGRAM. IF YOU'RE A DEVELOPER
WITH VISUAL STUDIO PRO OR ENTERPRISE,
YOU CAN GET THAT SUBSCRIPTION. AND
GO INTO MY VISUAL STUDIO BENEFITS.
IF YOU'RE A DEVELOPER THAT DOESN'T
HAVE VISUAL STUDIO PRO OR ENTERPRISE,
NO PROBLEM, WE DO OFFER A FREE OPTION
RIGHT AT OUR DEV PROGRAM LINK. AND
THAT CAN GIVE YOU THE FREE SUBSCRIPTION
THAT SYLVIA DISRATED. SO I WANTED
TO TALK ABOUT ANOTHER FUNDAMENTAL
PROBLEM THAT DEVELOPERS TALKED TO
US ABOUT LAST YEAR. OKAY, FINE,
I'VE GOT MY DEV SUBSCRIPTION. BUT
IT'S REALLY HARD TO ACTUALLY BUILD
A SAND BOX. IT'S INCREDIBLY TIME
CONSUMING, YOU MAKE ME HAVE TO GO
TO DIFFERENT PLACES, SPEND A LOT
OF TIME BUILDING FAKE SAMPLE DATA
TO TRY THE SCENARIOS. SO ONE THING
WE'RE ANNOUNCING HERE AT BUILD THAT'S
COMING IN JUNE, OOPS. >> OTHER WAY.
>> THERE WE GO. IT HELPS IF I USE
THE RIGHT DIRECTION. THERE WE GO.
ONE OF THE THINGS WE'RE ANNOUNCING
IS IN JUNE WE WILL BE RELEASING
TWO SAMPLE PACKS FOR MICROSOFT GRAPH.
USERS AND MAIL-IN EVENTS. AND THIS
GIVES YOU THE FOUNDATION OF SAMPLE
DATA WHERE YOU CAN GET 16 USERS
PLUS PREPOPULATED MAIL. THESE ARE
FAKE USERS, FAKE USERS WITH FAKE
METADATA SO YOU CAN PLAY AROUND
AND DON'T HAVE TO MAKE IT UP YOURSELF.
SO I'M GOING TO DEMONSTRATE THAT
IN JUST A MINUTE. AND THEN, LATER
ON IN THE SUMMER, WE ARE GOING TO
BE RELEASING TWO SAMPLE PACKS FOR
SHARE POINT AND ONEDRIVE. AND WORKING
CLOSELY WITH HIS SHARE POINT PNP
TEAM AND THE PROVISIONING SERVICE
THAT HE'S LAUNCHING. AND WE'RE GOING
TO ACTUALLY INTEGRATE THAT INTO
THE DEV PROGRAM SO THAT YOU CAN
ACTUALLY ON TOP OF THIS SAMPLE DATA
FOR USERS AND MAIL EVENT, IT WILL
WORK TOGETHER. AND THERE'S RICHER
SCENARIOS YOU CAN DO WITH SHARE
POINT AS WELL AS ONEDRIVE. SO WE'RE
TRYING TO AUTOMATE SOME OF THE LAYER
INTENSIVE PROCESS IT TAKES TO GET
A SAND BOX UP AND RUNNING. SO WHAT
CAN I DO WITH THIS SAMPLE DATA ONCE
I HAVE IT? WELL, IF YOU HAVE THE
USER DATA INSTALLED, YOU CAN LOOK
AT THESE GRAPH SCENARIOS. AND IF
YOU ACTUALLY INSTALL THE EVENTS
IN MAILBOXES, YOU CAN BE ABLE TO
ADD WITH THESE KIND OF GRAPH SCENARIOS.
BEGINNER PLACES YOU CAN USE MICROSOFT
AND THE GRAPH EXPLORER IF YOU HAVEN'T
PLAYED WITH THAT, TO BE ABLE TO
LOOK AT THIS. YOU CAN SEE THESE
ARE THE KINDS OF USERS THAT WE WOULD
ADD INTO THAT. THEY WOULD HAVE FAKE
NAMES, PHOTOS, METADATA, AND THEN
WE CREATE CALENDAR EVENTS. I WANTED
TO SHOW YOU HOW WE INTEGRATED INTO
THE EXPERIENCE THAT SYLVIA DISRATED.
SO ONCE I HAVE -- SYLVIA DISRATED.
THERE'S A BUNCH OF SPACE DOWN HERE,
IF YOU LOOK DOWN HERE, THERE'S A
TILE THAT SAYS USER, SHAREPOINT,
AND ONEDRIVE. IF I CLICK ON THE
USER'S ONE, IT'S GOING TO ASK ME
TO ADD 16 SAMPLE USERS WITH LICENSES,
MAILBOXES INCLUDING THE METADATA
AND PHOTOS. SO I NEED TO HAVE THE
ADMINISTER ID AND MY PASSWORD. YOUR
ADMINISTER PASSWORD IS IN YOUR TILE
AND YOU HAVE TO REMEMBER THE PASSWORD.
AND NEXT STEP, YOU'RE GOING TO HAVE
TO HAVE THIS VALIDATED AND HAVE
THE PERMISSIONS ACCEPTED. A LITTLE
UGLY FULL SCREEN PROCESS. WE WISH
WE COULD HAVE MADE IT MORE ELEGANT,
IT IS WHAT IT IS. BUT WE HAVE THAT
HERE FOR YOU. AND THE OTHER THING
WE'RE GOING TO DO, THESE ARE FAKE
USER, REMEMBER, AND IN ORDER FOR
US TO HAVE A STREAMLINED INSTALLATION
EXPERIENCE FOR YOU, WE ASK YOU TO
DO SOMETHING COUNTERINTUITIVE AND
WE WANT TO ACTUALLY HAVE ONE SHARED
PASSWORD FOR THOSE FAKE USERS. THIS
MAKES IT EASIER TO ADMINISTER AND
INSTALL OTHER THINGS IN THE FUTURE
AS WELL SO PUT IN THAT ONE SHARED
PASSWORD HERE, AND THEN WE GO TO
THE NEXT STEP. AND WE BEGIN INSTALLATION.
AND NOW THIS IS GOING TO TAKE PROBABLY
ABOUT 15 TO 20 MINUTES SO. WE'RE
NOT GOING TO -- WE ONLY HAVE A 20
MINUTE SESSION SO WE CAN'T SHOW
YOU THAT TODAY. BUT YOU CAN GO AND
HAVE A CUP OF COFFEE, INSTALLING
IN BACKGROUND OR SURF THE INTERNET,
WHATEVER YOU WOULD LIKE TO DO. AND
THEN ONCE THAT INSTALLATION IS DONE,
YOU'RE GOING TO ACTUALLY GET CONFIRMATION.
AND YOU'RE GOING TO BE ABLE TO BEGIN
THE NEXT STEP WHICH IS INSTALLING
YOUR MAIL AND EVENTS. SO WE RECOMMEND
YOU DO BOTH BECAUSE THE OTHER SAMPLE
PACKS ARE DEPENDENT UPON THESE THINGS
BEING IN PLACE. SO THEN YOU ADD
YOUR MAIL-IN EVENTS BY CLICKING
THE TILE. GET IT INSTALLED. >> THERE
YOU GO. >> AND YOU'RE DONE. SO VERY
QUICK, STREAMLINE PROCESS. PROBABLY
WILL TAKE ROUGHLY, YOU KNOW, BOTH
OF THESE SAMPLE PACKS TOGETHER MAYBE
35 MINUTES MAX TO BASICALLY INSTALL.
AND YOU'RE NOT HAVING TO GO AND
SPEND TONS OF TIME CREATING THIS
YOURSELF. SO I THINK YOU HAVE HEARD
FROM SYLVIA AND MYSELF IN THE TIME
THAT WE'VE HAD THAT WE'VE REALLY
TRY TO MAKE THE OFFICE DEVELOPER
PROGRAM REALLY THE BEST PLACE TO
BEGIN MICROSOFT 365 DEVELOPMENT.
TAKE A PICTURE OF THIS BECAUSE IT'S
A GREAT WAY TO REMEMBER HOW TO JOIN
THE PROGRAM. FIRST WE TALK ABOUT
SOLVING THE PROBLEM OF EASILY GETTING
YOU AN OFFICE SUBSCRIPTION THAT
YOU CAN USE FOR DEVELOPMENT PURPOSES.
SECOND, NOW STARTING TO GIVE YOU
DEV SAND BOX CREATION TOOLS THAT
ALLOW YOU TO AUTOMATE SOME OF THE
PROCESS OF CREATING SAMPLE DATA.
AND ACCESS TO MICROSOFT 365 EXPERTS
ACROSS TEAM, SHARE, ONEDRIVE, MICROSOFT
GRAPH, TO GET DEEPER UNDERSTANDING
DIRECTLY FROM THE PEOPLE WHO CREATED
THE TECHNOLOGY. AND WE CAN'T FORGET
ABOUT THE TOOLS, TRAINING, AND DOCUMENTATION
AND THE ABILITY TO GET NEWS LETTERS
WHERE WE'RE GIVING YOU MONTHLY NEWS
LETTERS ABOUT THINGS IMPORTANT TO
YOU AND NEW DEVELOPMENTS WITH THE
MICROSOFT 365 PLATFORM. SO I WANT
TO THANK YOU ALL FOR ATTENDING TODAY.
AND IF YOU HAVE QUESTIONS, WE CAN
CERTAINLY AND A FEW QUESTIONS NOW.
I THINK WE'VE GOT ROUGHLY ABOUT
FIVE MINUTES FOR QUESTIONS. THE
OTHER THING I WOULD LIKE YOU TO
KNOW IS SYLVIA AND I ARE RUNNING
FOCUS GROUPS TOMORROW. IF YOU'RE
INTERESTED TO PARTICIPATE AS A DEVELOPER
ON THE OFFICE DEVELOPER PROGRAM
OR FOCUS GROUPS ON OFFICE JS, COME
TO US AND WE WOULD BE HAPPY TO SIGN
YOU UP. AND SEND AN INVITE TODAY.
THANK YOU AGAIN FOR YOUR TIME. AND
I HOPE YOU HAVE A GREAT BUILD 2019.
[ APPLAUSE ] >> ANY QUESTIONS. YES,
SIR? LET ME REPEAT YOUR QUESTION.
YOU ALREADY HAVE AN AZURE SUBSCRIPTION.
CAN YOU BIND YOUR AZURE SUBSCRIPTION
-- >> SIMILAR TO HOW WE DO THE VISUAL
STUDIO. >> WELL, WHEN YOU SAY YOU
HAVE YOUR AZURE SUBSCRIPTION, YOU
CAN USE IT WITH THE TENANT LIKE
ANY OTHER TENANT. YEAH. CREATING
-- OKAY. THAT I DON'T THINK WE MAY
BE ABLE TO DO. SO WE SHOULD TALK
ABOUT THAT. I WOULD LOVE TO UNDERSTAND.
LET'S TALK ABOUT THAT AFTERWARDS.
THOSE ARE THINGS THAT WE WANT TO
LEARN AND FIGURE OUT WHAT TO DO
IN THE FUTURE. SO ABSOLUTELY. ANY
OTHER QUESTIONS? YES, SIR? GREAT
QUESTION. YES, ABSOLUTELY. IN FACT,
I FAILED TO MENTION THAT, BUT TEAMS
IS DEFINITELY ONE OF THE CONTENT
PACKS WE WANT TO DEVELOP. WE DON'T
HAVE A DEFINITE TIMEFRAME. WE ARE
WORKING WITH THE TEAM'S TEAM ON
THAT. THEY WERE SUPER EXCITED TO
SEE WHAT WE ARE DOING WITH SHAREPOINT
AND THEY WANT TO JOIN. THAT'S ONE
OF THE THINGS WE'RE WORKING ON IN
THE NEXT YEAR. STAY TUNED ABOUT
TEAMS. BUT ABSOLUTELY WE WANT TO
HAVE TEAMS AS ONE OF THE CONTENT
PACKS. YES, SIR? SO GREAT QUESTION.
HE'S ASKING, IS THERE AN OPTION
FOR THE COMMUNITY TO CREATE THE
CONTENT PACKS? THAT'S -- BASICALLY
WITH SHAREPOINT PNP, THEY HAVE A
STRONG COMMUNITY AND TEAMS IS BUILDING
ONE. AND THAT'S AN INTERESTING IDEA.
IN FACT, WE MIGHT WANT TO EXPLORE
THAT, BUT WE DON'T HAVE A DEFINITE
PLAN BUT I THINK IT'S A COOL IDEA.
HOW DO WE INTEGRATE THE COMMUNITY
IS A WONDERFUL THOUGHT THAT WE SHOULD
THINK ABOUT FOR NEXT YEAR. THANK
YOU. ANY OTHER QUESTIONS? >> ALL
RIGHT. >> NO? OKAY. IF ANYBODY IS
INTERESTED TO JOIN THE FOCUS GROUP,
PLEASE COME AND TALK TO US. WE WILL
BE RIGHT OVER HERE. THANK YOU AGAIN.
IF YOU HAVE QUESTION, WE WILL BE
HAPPY TO ANSWER THEM AND FOLLOW-UP
I WOULD SAY HAT TWO. GOING FROM
THE TWO CHARACTERS FROM THE END
AND THEN ALL THE WAY UP TO THE END
WHEREVER IT IS. JUST TO BE CLEAR
RANGE EXPRESSIONS DON'T HAVE TO
HAVE HATS IN THEM. CAN YOU GO FROM
THE BEGINNING. HERE WE WANT TO SHAVE
OFF THE LAST TWO CHARACTERS AND
GET THEM IN. >> IF YOU REALLY, REALLY
WANTED TO. YOU COULD HAVE SAID LICENSE
LENGTH MINUS TWO. >> WE CAN GET
THE REST OF THE LICENSE, THE ACTUAL
PLATE. >> YEAH. USING SIMPLY, WE
GO FROM THE FRONT UP TO -- WE GO
ONE LESS THAN WE DID BEFORE. SO
WE LOSE THE HYPHEN. >> SURE THERE'S
NO BUGS IN THERE BUT I WON'T RUN
ANY TESTS. PROBLEM FOR MY FUTURE
SELF. >> SOMETHING IS HARD MAKE
A NEW LANGUAGE FEATURE. >> OVERENGINEERING
AT ITS BEST, PUREST FORM. >> WE
HAVE A POWER. >> NOW WE HAVE AN
OWNER, DIDN'T SAY IT RETURNS NULL.
I'M GOING TO TRUST THAT. IF WE HAD
TO SEND A BILL AS A BUREAUCRAT,
WE'LL SEND THEM A BILL. >> THEY
HAVE TO PAY FOR THAT. >> PAY FOR
POSTAGE, PAY FOR EMOTIONAL DAMAGES,
TO ME, SO PASS THE FINAL TOLL. THEN
I'M GOING TO LOG THIS TO OUR LOGGER
GUY. >> WE'LL SEND THIS BILL TO
CANADA IF NEED BE. NO FURTHER THAN
THAT. >> NO FURTHER THAN THAT. >>
THAT'S GREAT. THERE WAS A WHOLE
IN THE FUNCTION AT. >> WORKED AS
DEMO, I PRESSED CONTROL F5, WAITING
FOR IT TO BUILD. SOMETHING GOOFY
HERE. THINKING ABOUT BUILDING, THINKING
ABOUT BUILDING THEN THE PROGRESS
BAR SHOWS, I'M DONE. NO LONGER IS
A NULL REFERENCE. >> NEXT UP, LIMIT'S
LOOK AT HOW THESE TOLLS ARE ACTUALLY
CALCULATED. DRILL INTO THIS, UP
HERE, TWO METHODS, CALCULATE TOLL,
AND PEAK TIME PREMIUM. AS I MENTIONED
EARLIER, THESE VEHICLES DON'T HAVE
ANY CONNECTION TO EACH OTHER. NOT
LIKE SOME META VEHICLE CLASS EVERYONE
INHERITS FROM, THEY'RE DISPARATE
OBJECTS. YOU HAVE TO USE FEATURES
THAT WE INTRODUCE IN C# 7. OCCUPANCY
CHARGES WHERE IF THERE'S MORE PASSENGERS
WE'LL SUBTRACT OR ADD, SIMILARLY
WITH TAXIS, MORE FARES. IF THERE'S
A BUS WE CHARGE IT DIFFERENTLY BASED
ON THE CAPACITY. TRYING TO GET EVERY
IN THIS CASE THE OUT THAT WE CAN.
DELIVERY TRUCKS OVER WEIGHTS AND
THAT SORT OF THING. SO THIS IS GREAT.
THIS IS USING C# 7 PATTERN MATCHING.
THAT'S GOODNESS, WE HAVE UPDATE
ED. >> THIS WOULD HAVE BEEN REALLY
NASTY BEFORE C# 7. >> IT'S INWIELDY
WITH THE WIN CLAUSES, THIS IS REALLY
IF ELD STATEMENTS REALLY IN DISGUISE.
BUT, YOU KNOW, IT STILL READS NICELY.
>> SEE IF WE CAN DO MORE. >> WHAT
CAN WE DO? >> WELL, FIRST OF ALL,
THE PATTERNS WE INTRODUCE IN C#
7 WERE TOP LEVEL PATTERNS, LOOK
AT THE VALUE COMING IN, AND TRY
TO APPLY TO THAT. BUT SOMETIMES
YOU WANT TO DIG IN, AND WHAT WE'RE
DOING IS DIGGING INTO THE OBJECT.
ONCE WE KNOW IT'S A CAR WE DIG INTO
THE PROVIDENCE. >> DIG IN RIGHT HERE.
>> WE'VE ADDED WHAT WE CALL A PROVITY
PATTERN. WHAT THIS DOES IS IF YOU
ARE A CAR, YOU HAVE THE TYPE CHECKED
THERE. THEN WE WILL DIG IN TO THE
PROVITY AND APPLY A PATTERN TO THEM.
THIS WILL GET THE PASS JENNERS PROVITY
OF THE CAR AND SEE IF IT MATCHES
THE PATTERN ZERO. IF SO THE WHOLE
PATTERN MATCHES WOOMPBLGTS E CAN
USE THIS THROUGHOUT -- OOPS, NOT
CONTROL C. WE CAN JUST USE THIS
THROUGHOUT HERE, COPY AND PASTE
THESE. WHAT'S COOL WE GET ERRORS.
AND ERRORS, WHAT'S COOL ABOUT THIS,
WE'RE DOING THE ANALYSIS, NO, YOU'VE
ALREADY CHECKED FOR THIS, PATTERN
MATCHED THIS AND PROVIDING THE ERROR,
THIS CASE IS HERE. >> THAT'S AN
EXAMPLE OF WHAT WE SAID WITH, LIKE,
TRYING TO LEAD YOU INTO THE PIT
OF SUCCESS, USING PATTERNS INSTEAD
OF BALLIAN LOGIC. THE COMPILER KNOWS
WHAT YOU'VE TRIED, YOU'VE ALREADY
TRIED THIS. >> I'M GOING TO DO THIS
WITH FARES. IT'S PRETTIER. >> I
HATE WIN CLAUSES. >> I LOVE THEM,
THEY'RE BETTER THAN NOTHING. >>
FINE, WE AGREE TO DISAGREE. NOT
MUCH WE CAN DO, THIS IS DOING A
CALCULATION. LESS THAN AND GREATER
THAN. WE DON'T HAVE RANGE PATTERNS
YET, WE CAN'T CHECK THOSE. >> STILL DON'T.
>> BUT BUST IT SELF, IF I LOOK AT
BUS, IT HAS A DEACON STRUCKTOR,
DECONSTRUCTION IS USUALLY USED FOR
THINGS LIKE TUPLES, YOU WANT TO
TAKE A TUPLE AND TURN NIGHT A VARIABLE
OR ASSIGNMENT. USING THE DEACON
SFRUKT METHODS. -- >> BUS HAS THE
DECONSTRUCTOR, DECONSTRUCT IT INTO
THE VARIABLES THAT IT DECONSTRUCTS
INTO AND APPLY PAT ATTORNEYS THOSE.
THE PATTERNS ARE THE VAR PATTERNS,
GIVE THE TWO VALUES NAMES. THEN
THOSE NAMES ARE IN SCOPE FOR THE
REMAINDER OF THE SCOPE OF THIS CASE
HERE. >> I FEEL HAPPIER. >> EXTRACT
THE R AND C, WHAT WERE THEY, RIDERS.
>> RIDERS AND CAPACITY DO. THAT
OUT OF ORDER ON? DID I INTRODUCE
A BUG? I TOTALLY INTRODUCED A BUG.
NOBODY SAID ANYTHING. >> WE SHOULD
HAVE BETTER INTELLIGENCE. >> I'M
SUPER DISAPPOINTED IN ALL OF YOU.
THIS WOULD HAVE BEEN HORRIBLE. >>
THIS IS LIKE ADDITIONAL STUDIO FEATURE,
CHECKING THAT THE ONE LETTER VARIABLE
INTRODUCED MATCH UP WITH THE FIRST
THE LETTER OF THE THING YOU'RE USING
IT FOR. >> YOU CAN WRITE THAT WITH
ANALYZERS, LOOKING FORWARD TO YOUR
FULL REQUESTS. >> THAT WAS THE OTHER
RECURSIVE PATTERN, WHEN THE DECONSTRUCTIVE,
YOU HAVE A TUPLE, CAN YOU USE THE
POSITIONAL DECONSTRUCTOR INSTEAD
OF THE PROVITY PATTERN. >> NOT MUCH
YOU CAN DO WITH THE DELIVERY TRUCK.
IF WE HAD THE RANGE PATTERN WE MIGHT
BE ABLE TO DO IT WITH A PROPERTY
PATTERN. WE'LL SEE IF THERE IS A FUTURE.
LOOKING AT THIS, THAT'S ABOUT AS
GOOD AS WE GET WITH THE SWITCH STATIONS.
USING THESE C PATTERNS. SOMETHING
BETTER WE CAN DO. THIS WHOLE THING
RETURNS STUFF AT THE END OF THROWS,
IF NOTHING IS FOUND, THAT COULD
HAVE BEEN THE DEFAULT. WE COULD
JUST TURN IT INTO, BE NICE TO TURN
NIGHT ONE EGGS PRESENTATION THAT GETS
RETURNED. THAT'S TEDIOUS, I DON'T
HAVE A RETRACKTOR. >> ESSENTIALLY,
IF OLD FASHIONED SWITCH STATEMENTS
WERE SO '60s, THEN C# 7 TOOK NIGHT
THE '90s BY ALLOWING PATTERNS TO
BE APPLIED. NOW WE TAKE THEM INTO
2020. >> A SWITCH EXPRESSION WOULD
LOOK LIKE THAT. SAME PATTERN, BUT
NOW EVERYTHING IS A LIST OF EXPRESSIONS.
>> THIS IS CONFUSING. BUT NOT REALLY.
>> WHAT YOU HAVE IS THAT NOW THE
CALCULATE METHOD TOLL METHOD IS
AN EXPRESSION BODY METHOD, AN ARROW
AND EVERYTHING AFTER THAT IS A SINGLE
EXPRESSION. YOU WALK UP TO THE VEHICLE
AND SAY SWITCH ON THAT. YOU HAVE
CASES INSIDE. WE DON'T USE THE CASE
KEYWORD. INSTEAD WE HAVE THE PATTERN
FOLLOWED BY AN ARROW. >> THIS IS
LIKE THE ARROW, RETURNS A SINGLE
EXPRESSION. WHAT ABOUT THE CATCH-ALL.
WHEN YOU SWITCH AND THE RESULT IS
A VALUE, AS OPPOSED TO JUST STATEMENTS
GETTING EXECUTED, IT'S IMPORTANT
THAT THE VALUE COMES OUT. IF YOU
HAVE CASES THAT COULD COME IN THAT
YOU DON'T HANDLE, THEN WHAT SHOULD
THE SWITCH EXPRESSION RESULT IN?
IT'S GOING TO CHECK AS BEST KIT,
THAT YOU ACTUALLY HANDLE ALL OF
THE INPUTS THAT YOU COULD GET. NOW
IT SEES THE CATCH- ALL IN THERE,
NOTHING COULD FALL THROUGH. >> ONE
OF THE THINGS THAT IS COOL, RETURN
A LIST OF POSSIBLE MATCHES THAT
RETURN A SINGLE EXPRESSION. ALSO
ITSELF BE A SWITCH EXPRESSION. IF
I CICERO. AND CAN I CLEAN IT UP LIKE
THIS. WHICH I THINK IS FANTASTIC.
WE CAN HAVE NESTED SWITCH OF EXPRESSIONS.
I DID NEED THAT. THAT'S ANOTHER
NICE WAY OF WRITING IT. >> ONE WAY
OF DIGGING, IN RECURSIVE PAIRINGS.
I HAVE A SWITCH FIRST ON THE CAR,
THE NEXT LEVEL DOWN, SWITCH ON THE
PASSENGERS WHEN I KNOW IT'S NEAT.
TOOK ME AN ACHINGLY AMOUNT OF TIME.
WE'LL JUST STEP ON PAST THAT. WE
HAVE A COUPLE OF WARNINGS IN THE
FILE, IT'S TWO OTHER FUNCTIONS THAT
RETURN SWITCH EXPRESSIONS. THEY
ARE CLEARLY EXHAUSTIVE. THEY STILL
HAVE WARNINGS ON THEM. THEY SEEM
TO BE EXHAUSTIVE. I DON'T KNOW ANY
OTHER DAYS OF THE WEEK YET. >> YOU
CAN CONVERT ANY VALUE INTO AN ENOM,
NOT LIMITED ON THE LISTED VALUES.
>> SEVERAL OF THEM RETURN TRUE.
REAL THING WE CARE ABOUT IS THE
WEEKENDS. IF IT'S A WEEKEND IT'S
FALSE, OTHERWISE RETURN TRUE. THAT'S
GOING TO GIVE AN ERROR, BECAUSE
OF COURSE WE'RE HANDLING -- >> YOU
HANDLE EVERYTHING, YOU HAVE TO MOVE
IT TO THE END. THAT'S THE CATCHALL.
>> PUT A COMMA IN THERE. >> IF THERE'S
ANOTHER DAY ADDED, IT'S BOUND TO
BE A WORK DAY, I'M SURE OF IT. THIS
WILL HOLD UP TO TIME. [ LAUGHING
] >> THIS WILL, NO TEST, IT'S FINE,
WE KNOW THAT WILL BE TRUE. >> OH,
WHAT DO WE HAVE? >> A SIMILAR PROBLEM,
ENUM TIME BAND. NOT TO BE CONFUSED
WITH TIME BANDED. IT HAS SIMILAR
SITUATION WHERE WE HAVE A BUNCH
OF VALUES, SEEMS TO BE EXHAUSTIVE,
THE PERMUTATIONS OF THE TWO BOOLEANS,
BUT IT'S NOT EXHAUSTIVE, THAT ENUM
IS NOT EXHAUSTIVE. >> THESE ARE
THE MULTIPLIERS FOR PEAK HOURS.
THIS IS LISTING ALL OF THE CASES
WE CAN THINK OF. >> THE BUREAUCRAT
LOVES ALL OF THE CASE THERE IS.
BUT WHEN I LOOK AT THIS I SEE EVERYTHING
DOWN HERE, EVERYTHING WHERE IT'S
THE WEEKDAY, NOT A WEEKDAY, IS ALWAYS
1. SEEMS LIKE IT'S PROBABLY A LITTLE
OVER THE TOP. I KNOW THAT SOUNDS
WEESHD FOR THE BUREAUCRAT. IT SOUNDS
WEIRD. >> MOVE THAT. IF IT'S THE
MORNING RUSH AND OUTBOUND. >> NOT
CHARGING THE EXTRA. >> EVENING RUSH,
GOING INBOUND. NEED THOSE TO THE
DEFAULT. SOME OF THEM ARE THE SAME
REGARDLESS OF WHICH DIRECTION ARE
YOU TRAVELING. >> SO WE CAN SAY,
TRUE OR FALSE. >> HANG ON, HANG
ON. INTRODUCE THAT ONE AGAIN. PUT
THE DISCARD IN. >> YEAH. >> WAIT
FOR A SECOND. >> YOU WANT TO SEE
THERE'S AN ERROR. >> IT SAYS YOU
DEALT WITH TRUE AND FALSE. >> YEAH,
YEAH, THAT IS COOL. IT'S SIMILAR
DOWN HERE. YOU WANT ME TO PAUSE?
>> NO, THEY HAVE THE POINT. ARE
YOU MAKING FUN OF ME? >> NO, NO.
IT'S FINE. [LAUGHING] >> THIS IS
GREAT. THIS IS VERY CLEAR WE'RE
DEALING WITH ALL OF THE SPECIAL
CASES, SOME OF THEM LUMPED TOGETHER,
AND THEN THERE'S THE DEFAULT CASE,
MULTIPLY JUST ONE. EASY TO READ.
>> GREAT. AND SO EVERYTHING STILL
WORKS. WE'VE PERFECTED THIS TO DEATH.
THIS IS THE IMPROVEMENTS WE MADE
TO PATTERN MAGIC, FINISHING OF THE
THE STORY AS PART OF C# 8. 0, THAT'S
IN BUILD RIGHT NOW. >> GREAT. NOW
WE PLAYED AROUND WITH THE CONSOLE
APP, LET'S GET TO THE REAL DEAL,
WHERE YOU ACTUALLY, WE HAVE A CAMERA
OUT ON THE 520 BRIDGE AND STREAMING
DIT A LIVE INTO THIS ROOM. >> WELL,
IT'S NOT LIVE. >> IT'S NOT THAT
REAL. >> NOT REAL. THAT'S ALL SORTS
OF PROBLEMS WITH THAT. THEY'RE GOING
TO PUT IT UP ON, LIKE, THE INTERNET
THIS VIDEO, THAT WOULD BE AWFUL.
>> DOES THE INTERNET HAVE A LIVE
PUBLIC FEED? >> WE HAVE ANOTHER
APPLICATION, ANOTHER PROJECT CALLING
INTO THIS. AND IT'S CALLING INTO
THE SAME SYSTEM TO BASICALLY, GOING
GIVE US THE BUT TONGUES ON THE BOTTOM.
WHENEVER IT COMES UP, IF YOU, THOSE
OF YOU -- THE BUTTONS, I PRESS CONTROLF5,
AMANY AWAITING, THIS IS ASYNC BUILD.
>> WE HAVE A U. I. WHERE WE STIMULATE
A CAR OR INFRASTRUCTURE COMES AND
GENERATE RANDOM DATA. >> WE CAN
SIMULATE, PASSING THESE INTO THE
SYSTEM, THESE ARE RANDOMLY GENERATED.
IT'S A CAR, HAS RANDOM NUMBER OF
PASSENGERS. BUT THE PROBLEM KICKS
ALREADY SEE, THIS AND, AGAIN, I'M
NOT HAPPY ABOUT IT BEING MY JOB
IG TO CHARGE -- IS TO CHARGE PEOPLE,
I'M NOT CHARGING ANYBODY, I'M NOT
GETTING MESSAGES ANYTHING IS BEING
CHARGED. WE HAVEN'T ACTUALLY IMPLEMENTED
THAT PART OF THE APPLICATION. >>
WE HAVEN'T HOOKED IT UP. I'M GOING
TO WRITE A METHOD, CALL IT CHARGE
TOLLS. ON OUR TOLL SYSTEM CLASS
THAT WE'VE BEEN USING THAT WE USED
IN THE CONSOLE APP, THERE'S CHARGE
TOLL ASYNC, ALSO GET VEHICLES ASIRNG
THAT WE PROBABLY WANT TO USE --
ASYNC, ITER IT A OVER THE VEHICLES
THAT HAVE PASSED SINCE THE LAST
TIME. GO AHEAD AND CHARGE THEM.
>> IT'S RETURNING SOMETHING WE HAVEN'T
SEEN BEFORE, AN I ASYNC NUMERABLE.
>> I WANT TO BE CLEAR, THIS TYPE
IS THERE IN DOT NET CORE 3, . PFF.
NO PACKAGES, THERE'S JUST PLAIN
VANILLA. THIS IS THERE IN THE LATEST
BIT. >> I ASYNC I NUMERABLE, MAYBE
WE CAN PLAY WITH THAT. >> WE GET
THIS GUY BACK. I DON'T KNOW HOW
TO CALL IT. DIDN'T SAY IT WAS TASK,
IT'S RETURNS, I NUMERABLE. >> HOW
DO YOU CONSUME THAT. IT GIVES YOU
VALUES LIKE I NURMERABLE BUT IT
GIVES THEM ASYNC RONNOUSLY. YOU
CAN AWAIT THE NEXT VALUE. HOW DO
YOU DO THAT? THERE'S LANGUAGE SUPPORT
FOR THAT. INSTEAD OF AWAITING A
SINGLE VALUE, CAN AWAIT FOR EACH.
IN I ASYNC INNUMERABLE. YOU WAIT
TO REACH IT, THAT MEANS FOR EACH
LOOP, IT AWAITS THE NEXT VALUE WHEN
IT ISN'T READY. ANYTHING THAT IS
PRODUCED OUT OF A STREAMING SERVICE.
ANYTHING THAT IS DISCREET VALUE
COMING IN REALTIME. CAN BE REPRESENTED
BY THAT INNUMERABLE, THE LANGUAGE
HELPS YOU CONSUME IT WITH THE AWAIT.
>> WHAT WE HAVE SET UP IS A PUMP,
THAT WILL, AS VEHICLES COME IN,
WILL BE AWAITING AND GET THE NEXT
VEHICLE AND CHARGE IT. WE SET IT
UP. I NEED KICK IT OFF. >> RUN THAT
METHOD ONCE AND FOR ALL AND IT'S
SITTING THERE IN ITS LOOP LOOKING
AT THAT I ASYNC INNUMERABLE. I SEE
THE CARS COME OVER AND THE CHARGES
ARE SENT OUT. >> AS THEY COME THROUGH
THE STREAM. >> SEEMS LIKE THIS THING,
LAST YEAR WE SHOWED I ASYNC, AND
IT WAS MIRRORS. BUT IT IS COMPLICATED
TODAY. LET'S LOOK AND SEE WHAT WE
ACTUALLY HAD TO DO TO IMPLEMENT
ASYNC ANUMERABLE. THE MOST SCARY
PART IS THE DEFINITION OF THE TUPLE.
VEHICLE ASYNC. >> PRODUCES TUPLES
OUT AND WE YIELD. >> A YIELD RETURN
LIKE ANY OTHER IT TERATOR. >> YIELD
RETURN THAT SOMETHING, THE COMPILER
GENERATES. >> SO THAT HORFULLY COMPLEX
MACHINE, DON'T WRITE. THAT USE AN
ITTERATOR. >> 1 TO 1 WITH THE ASYNCHRONOUS
-- SYNCRONOUS, LANGUAGE SUPPORT
FOR BOTH. THE ONLY THING COMPLEX
WITH ASYNC WHICH WE CAN'T SHOW,
IT'S NOT DONE, IS THAT WITH AZINC
YOU HAVE CANCELLATION TOKENS FLOWING
THROUGH. YOU CAN SAY STOP DOING
THAT. >> WHAT DO YOU THINK, ASYNC
ITTERATORS? [APPLAUSE] YOU'VE BEEN
VERY, VERY QUIET? YOU ASKED FOR
APPLAUSE. >> KIND OF, KIND OF, I'M
SORRY. IT MADE ME FEEL GOOD. >>
ONE THING WE'D LIKE TO DO IS THERE
IS A BUTTON THAT I DIDN'T CLICK,
YOU PROBABLY SAW, WE'RE HOPING I
WOULD CLICK, YOU KNOW. IF WE PLUG
IT IN, IT GETS THE EXCEPTION BACK.
NO, IT LOGS AN ERROR. WHAT IF I
REALLY DID WANT THIS EXCEPTION,
AN EXCEPTION OCCURRED, I WANT TO
GET IT BACK. CAME THROUGH THE LOGGING
SYSTEM. I-LOGGER OVER HERE, THAT
CALLS IN TO IT, PASSES A MESSAGE.
WHAT IF I WANTED TO 2K3WE79 THE
EXCEPTION OUT. WHAT IF I WANTED
TO GET THE EXCEPTION OUT. >> IF
YOU WANT TO ADD ANOTHER MEMBER TO
THE INTERFACE. >> YEAH, ADD ANOTHER
MEMBER AND DO IT LIKE THIS. I LIKE
TO BREAK THE WORLD. THIS IS WHAT
YOU DO. >> ADD ANOTHER MEMBER TO
THE INTERFACE. DO IT. >> BUT I LIKE
BREAKING THE WORLD. THIS DOES BREAK
THE WORLD. IF I BUILD THIS, YOU
KNOW, EVERYTHING, THERE THEY ARE,
EVERYTHING WILL FAIL. >> EVERY PART
OF THE INTERFACE IS BROKEN. >> TWO,
THE WPF APPLICATION AND ONE IN THE
CONSOLE APP. >> AND WE HAPPEN TO
OWN THESE, WOO CAN FIX THEM UP.
YOU PROBABLY SHOULD INTERFACE, IT
LOCKED FOREVER, SOMEBODY IS IMPLEMENTING
IT F YOU CHANGE IT YOU BREAK THEM.
ADD ANOTHER MEMBER YOU BREAK THEM.
PUT A NEW REQUIREMENT ON THEM TO
IMPLEMENT IT. >> I GOT THAT, IT'S
GREAT, DO IT RIGHT HERE. AND ALL
IS GOOD. THE PROBLEM IS THAT WHAT
I REALLY WANT TO DO, IS I WANTED
TO SAY, WELL, IF SOMEBODY DOESN'T
IMPLEMENT THAT I WANT TO DO THIS
BEHAVIOR. BEAT HAIFIOR THAT WAS
RIGHT HERE. THE BEHAVIOR THAT WAS
RIGHT HERE. >> THAT'S LIKE DEFAULT
BEHAVIOR. >> I COME BACK IN HERE.
AND I WILL JUST GIVE THIS AN IMPLEMENTATION
USING EXPRESSION BY MEMBER. AND
WE'LL SAY THAT. NOW, EVERYTHING
STILL BUILDS, WHICH IS GREAT, IT
BUILDS AGAIN. THE PROBLEM HERE IS
THAT, WE DIDN'T REALLY DO ANYTHING.
ARE YOU SITTING HERE, WHY WOULD
YOU DO THAT, IT SEEMS UNBELIEVABLY
COMPLICATED FOR SOMETHING THAT AN
EXTENSION METHOD IS GREAT FOR. YOU
HAVE ALL COME UP AND SAID THAT IN
YEARS PREVIOUS. >> NOT ALL OF YOU.
>> WELL, MOST OF YOU. WHAT I CAN'T
DO IS CREATE A SPECIALIZATION OF
THAT PARTICULAR INTERFACE MEMBER
ON ONE OF MY IMPLEMENTERS. ONE OF
MY TYPES OF IMPLEMENT IT. CAN I
COME HE EVERER ON TO THE I-LOGGER,
ACTUALLY WHEN I GET AN EXCEPTION
I WANT TO DO SOMETHING DIFFERENT.
I CAN INTERFACE, IMPLEMENT, I DON'T
WANT TO CALL IT ITEM, YEAH, WE'LL
SCROLL IT INTO VIEW. I HAVE A DIFFERENT
DATA TEMPLATE SET UP FOR EXCEPTIONS
ON THE LIST. SO I PRESS BOOM, NOW
I GET THE STACK TRACE. I HAVE THE
EXCEPTION. S I CAN, NOW YOU KNOW,
EVOLVE AN INTERFACE WITHOUT BREAKING
EVERY IMPLEMENTER. YOU CAN GOING
TO BEND OVER THE APPLICATION TO
DO THAT, TWIST IT. MAYBE IT COULD
DESCEND FROM THE ABSTRACT CLASS.
>> ALREADY DERIVING FROM ANOTHER
CLASS. THE INTERFACE CAN HAVE BODIES.
JUST SUGGESTED IMPLEMENTATION MAKE
IT SO THAT PEOPLE DON'T TO HAVE
IMPLEMENT THAT MEMBER. YOU DON'T
TO HAVE TAKE THAT DEFAULT IMPLEMENTATION
F YOU DIDN'T KNOW ABOUT IT OR IF
YOU LIKED IT VERY MUCH. GIVES YOU
THAT FLEXIBILITY, STRIKES A GOOD
BALANCE. >> YEAH. READY TO GO BACK
TO THE SLIDES? >> YES. >> WE SHOULD
TALK ABOUT THE FUTURE. >> THE FUTURE
FUTURE. THIS IS IN THE FALL FUTURE.
THIS IS FOR WHEN SEPTEMBER OR WHEN
WE SHIP C# 8. 0. WHAT HAPPENS WITH
C# AFTER THAT. >> A HUSH FALLS OVER
THE CROWD! >> THE LIGHTS WENT DOWN.
>> WEIRD. >> THIS IS A TRAILER FOR
THE MODELS OF MOVIES. NEVER SEEN
BEFORE. EXCEPT ON GITHUB. WE CHANGED
HOW INTERFACES WORKED. THAT'S NOT
SOMETHING WE CAN JUST DO IN THE
C# COMPILER. THAT'S HOW THE RUN
TIME WORKS. WE HAVEN'T CHANGED THE
RUN TIME TO ENABLE NEW LANGUAGE
FEATURES. SINCE GENERICS IN 2005
WHEN THEY SHIP. BECAUSE WE COULDN'T.
TOO MANY PEOPLE WERE DEPEN DON'T
DIFFERENT VERSIONS OF WINDOWS. AND
THEY HAD DIFFERENT VERSIONS RUNNING.
WITH THE FRAME WORK 4. 0 BEING THE
LAST VERSION, AND WITH YOU WILL
AFTER THE INNOVATION GOING INTO
THE CORE TRACK AND MERGING TOGETHER
INTO THE DOT NET 5, NOW WE HAVE
A STACK THAT'S NOT ONLY, IT'S SINGLE
STACK TO INOWE VA ON. ABLE TO CONTROL
AND MODIFY, AND EVOLVE EVERY SINGLE
COMPONENT OF THE TOOL STACK. COMPILER,
DOWN TO THE RUN TIME BECAUSE OF
THE WAY WE CAN NOW, THE WAY WE CAN
DEPLOY. IF YOUR PROGRAM DEPENDS
ON THE LATEST, YOU JUST GET THE
LATEST. THAT GIVES US AN ENORMOUS
FREEDOM TO INNOVATE. WE SCRATCH
THE SURFACE WITH THIS. BUT WE COULD
DO THAT SO MUCH MORE NOW. WE'LL
SHOW YOU WHAT WILL SHOW UP IN C9,
MAYBE. >> I DON'T WANT TO SEE ANY
ARTICLES THAT SAY THIS IS C# 9.
WE'RE UNVEILING -- I MEAN THESE
ARE THINGS WE TALK ABOUT PUBLICLY
BUT WE'RE DREAMING ABOUT. >> THIS
IS US DREAMING ABOUT WHAT COULD
WE DO, WITH THE HELP OF THE RUN
TIME, SOME OF THE ABSTRACTSY THINGS
WE CAN DO. LET'S TALK ABOUT THE
THINGS. WHAT DP YOU HAD A SUPER
TERSE SYNTAX, THAT REALLY MEANT
THIS IS A DATA CLASS, AND HATTED
ALL OF THE NONDEFAULT BEHAVESIORS
OF A NULL CLASS. IMMUTABLE. IT HAS,
WELL, HAS CONSTRUCTOR AND DECON
STRUCKTOR, BALL GAMES IT'S POSITIONAL.
AND IT HAS VALUE BASED QUALITY AND
HASH CODE. >> WE'VE BEEN SHOWING
THIS SLIDE FOR YEARS AND PEOPLE
ARE LIKE, WHY HAVEN'T YOU DONE IT?
WHY CAN'T YOU GENERATE THAT. AND
WE'LL SORT OF GET TO THAT A LITTLE
BIT. PART OF IT IS THAT -- ACTUALLY,
I SAY -- >> NO, MADS, I WANT AN
ANSWER. >> THE COMPILATION STRATEGIES
THAT WE USE FOR DOING THIS TODAY
RESULTS, THEY RESULT IN VERY BRITTLE
CODE. THEY RESULT, WE CAN GET THIS
FUNCTIONALITY RUNNING ON THE CURRENT
RUN TIME BUT THERE ARE ALL THESE
INNOCENT LOOKING CHANGES THAT YOU
MIGHT DO TO YOUR SOURCE DHEED WOULD
BREAK THE RELATIONSHIP BETWEEN TYPES
WHEN THEY'RE GENERATED INTO -- WE
NEED SOME CLR HELP TO DO IT RIGHT.
THAT'S THE REALIZATION. >> WHEN
IT COMES DOWN TO IT WHEN YOU LOOK
AT THEM IN RUN TIME, TO YOU, THEY'RE
THE CONSUMER OF THE OBJECTS, THEY'RE
GOING LOOK LIKE REGULAR REFERENCE
TYPES OR VALUE TYPES. THAT BRITTLENESS
STARTS TO CRACK AND THINGS START
TO FLAKE OFF. NOW YOU NEED KNOW
YOU'RE TALKING TO A RECORD. IT HASN'T
REALLY HELPED YOU ALL THAT MUCH.
WE'RE TRYING TO FIGURE OUT WAYS
AROUND THE PROBLEM WITH THE COMPILATION
SEEMS NOT TO BE WORKING. >> IT MAKES
IT BRITTLE IN THE PARENT. GREAT
FEATURES LIKE LAMDA AND ASYNC, DID
THEM WITH COMPILER TRICKS INSTEAD
OF BUILDING THE NOTIONS OF CLOSURES
AND STATE MACHINES INTO THE RUN TIME.
WHERE THEY PROBABLY BELONG. BECAUSE
WE DID IT THE WRONG WAY, IT'S STILL
AWESOME FEATURES BUT ALL KINDS OF
SEAMS THAT SHOW THAT PEOPLE DEPEND
ON. NOW WE CAN'T CLEAN IT UP. MAYBE
WE'LL LOOK AT THAT IN THE FUTURE
TRYING TO SEE IF WE CAN PULL IT
INTO WHERE THEY BELONG. THE RUN
TIME CAN OPTIMIZE THEM. WE DID THE
SUB OPTIMAL IMPLEMENTATION AND WE
DON'T WANT TO DO IT AGAIN, WE WANT
TO BUILD THINGS WHERE THEY BELONG
AND NOW WE CAN. A FEW MORE THINGS
ABOUT RECORDS, YOU MAY NOT WANT
THEM TO BE ORDERED, YOU MAY HAVE
A DATA OBJECT WITH THESE PROPERTIES
IN IT. YOU WOULD PROBABLY WANT TO
USE ONT INITIALIZER. IT'S THE --
OBJECT INITIALIZER. ONLY WORKS THROUGH
MUTATION. YOU ARE ENCOURAGED TO
LEAVE YOUR OBJECT MUTABLE AND VULNERABLE
SO AN OPERATE TY MIZER CAN BE USED.
WHAT IF THERE WAS A FEATURE WHERE
YOU CAN HAVE IT APPLY TO IMMUTABLE.
THAT REQUIRES RUN TIME REP. IF YOU
HAD IMMUTABLE OBJECTS, YOU WANT
TO CREATE THE NEXT VERSION OF IT,
A LITTLE DIFFERENT, THIS FIELD HAS
BEEN CHANGED, SORT OF THE NEXT VERSION.
I'M NOT SAYING IT'S THE NEXT VERSION
OF SCOTT HUNTER, BAD EXAMPLE, BUT
THE IDEA THAT I HAVE P1 AND WANT
TO CREATE ANOTHER VALUE, THE FIRST
ONE, EXCEPT FOR THIS ONE OR TWO FIELDS CHANGE.
OBJECT INITIALIZER LIKE SYNTAX TO
CREATE THE NEW OBJECT. IN A STRONGLY
TIED WAY. THAT'S ANOTHER THING.
SOMETHING THAT IS REALLY HARD TO
DEAL WITH HERE, AND PART OF WHY
WE WANT RUN TIME HELP, ONCE YOU
TALK ABOUT RECORDS AND INHERITANCE,
THESE THINGS BECOME HARD TO IMPLEMENT.
WE HAVE TO FIGURE THAT OUT IN A
ROBUST WAY. >> AS SOON AS YOU HAVE
THAT PERSON THERE, THEN IT'S, YOU
KNOW, YOU WANT TO PUT IN A CUSTOMER.
YOU WANT TO INHERIT THE THINGS FROM
THE PERSON AND NOT DECLARE THEM
AGAIN. THAT'S REALLY HARD. >> WE
TOUCHED ON IT WITH THE EXHAUSTIVENESS
CHECKS OF OUR PATTERN MATCHES. INHERITANCE
IS GREAT FOR, I HAVE A BASE CONCEPT
BUT IT'S OPEN ENDED. YOU CAN ALWAYS ADD ANOTHER ONE.
IF YOU DO SWITCH EXPRESSIONS, REALLY
NICE TO KNOW YOU HAVE THEM THROUGH
IT. MANY FUNCTIONAL LANGUAGES, DISCRIMINATED
UNIONS, ESSENTIALLY A CLOSED SET
OF DERIVED TYPES IF YOU WILL. THIS
TYPE CAN ONLY HAVE THESE FOUR DIFFERENT THINGS.
THAT'S IT. CAN ONLY BE LOOKING AT
THESE FOUR DIFFERENT WAYS. YOU CAN
DO IT FROM ENUMS BEING CLOSED OFF,
ONLY SET NUMBER OF HOURS, TO DIFFERENT
CLASSES BEING THE ONLY POSSIBLE
DERIVED CLASSES FROM A GIVEN BASE
CLASS, HOW I WANT TO SAY IT. THAT'S
SOMETHING WE WANT TO LOOK INTO.
THAT'S KIND OF THAT EXPRESS YOUR
DATA KIND OF DATE SHAPE BETTER.
REALM OF FEATURES. NOW I WANT TO
GO INTO SOMETHING THAT IS -- >>
MORE ABOUT BEING, I DON'T KNOW,
EXPRESSIVE THINGS ABOUT YOUR DATA.
>> THIS IS ABSTRACTS 2. 0. THINKING
ABOUT WHAT ARE THE PLACES IN C#
TODAY WHERE WE LACK THE ABSTRACTIVE
POWER, ABILITY TO SHOW SOMETHING
ABSTRACTIVELY AND BE GENERAL OR
GENERIC WITH SOMETHING IECHLTS THOORD
WRITE A SHAREDAL GO RHYTHM FOR DIFFERENT
TYPES. WE HAVE NOTORIOUSLY, WE SHARE
THIS WITH LANGUAGES, BUT NOTORRIOUSLY
BAD ABSTRACTS. I WOULD LIKE TO WRITE
A GENERIC METHOD THAT TAKES THINGS
AND ADDS THEM TOGETHER. OKAY? THAT'S
SIMPLE EXAMPLE. IF THEY'RE NOT SERIAL,
ADD THEM TO THE RESULT, ACCUMULATE.
I CAN'T TODAY. A BUNCH OF THINGS
TODAY THAT CAN'T BE EXPRESSED AS
A GENERIC CONSTRAINT. I CAN'T --
I CAN SAY, I CAN SAY THAT, I CAN
USE AN INTERFACE TO SAY IT IS A
SERIAL METHOD ON THE VALUE BUT NOT
A PLUS ON THE TYPE OR THAT IT'S
A STATIC METHOD THAT I CALL ZERO,
I CAN'T SAY THESE STATIC THINGS.
IN AN INTERFACE. I CAN'T PUT REQUIREMENTS
ON THE CLASS AS OPPOSED TO THE INSTANCES.
WHAT IF I COULD? >> THAT WOULD BE
A GOOD IDEA. >> WHAT IF INTERFACES
COULD EXPRESS STATIC MEMBERS AS
WELL. >> WHY DIDN'T WE DO THAT YEARS
AGO? >> THERE'S AN INTERFACE IMONOID.
>> I THOUGHT YOU WERE A PRETEN TO
US ACADEMIC. >> I SAID I GROUP,
THERE'S A MORE PRETEN TO US MEMBER
OF THE PEOPLE WHO SAID THAT'S NOT
A GROUP, IT'S A MONOID. >> NOT LIKE
THIS AUDIENCE AT ALL. I HAD NO IDEA.
>> YOU HAVE THE ZERO OF THIS TYPE,
AND THE NEUTRAL ELEMENT OF THIS
TYPE, THEN SOMETHING THAT CAN CHECK
A GIVEN VALUE. AS AN ORDER PROPERTY
THAT YOU HAVE TODAY. EXTEND INTERFACES
WITH THE ABILITY TO EXPRESS THOSE.
THEN PUT THAT INTERFACE AS A CONSTRAINT
ON THE ENGINEERING METHOD. IMPLEMENT
THE INTERFACE ON COMMON TYPES AND
SAY IMPLEMENT IMONOID. AND BECAUSE,
YOU KNOW, ADD THESE EXTRA STATIC
MEMBERS. THESE EXTRA MEMBERS THAT
DIDN'T ALREADY HAVE, WE CAN MAKE
THEM EXPLICIT IMPLEMENTATION IF
WE DON'T WANT THEM TO SHOW UP. >>
ALREADY HAS A PLUS OPERATOR. >>
RIGHT, YOU DON'T TO HAVE PUT THAT,
IT HAS THE PLUS OPERATOR THAT, WOULD
SATISFY THE INTERFACE. NOW, BY JUST
USING ORDER INTERFACE, I'VE BEEN
ABLE TO DO GENERIC EXTRACTION FOR
NUMBER THINGS AND THE OTHER THINGS
WE WANT TO EXPRESSION IN STATICS
RATHER THAN INSTAINS. CAN I CALL
IT WITH AN ARRAY OF INTS. THAT WOULD
BE COOL, RIGHT? [APPLAUSE] I LOVE
THAT YOU APPLAUD SOMETHING THAT
WE DON'T EVEN KNOW HOW TO BUILD.
>> WE ARE SO DREAMING RIGHT NOW.
>> WE'RE WINNING. [LAUGHING] THAT'S
THAT. STATIC MEMBERS AND INTERFACE,
SOMETHING WE'LL LOOK INTO. WE HAD
A PROTOTYPE SEVERAL YEARS AGO, COULDN'T
DO IT AT THE TIME BECAUSE IT NEEDED
RUN TIME CHANGES. THERE'S A PROBLEM
HERE, SWITCHING TO -- SWITCHING
GEARS, SORT OF A SOFTWARE COMPOSITION
PROBLEM IN THIS PARTICULAR EXAMPLE,
NOT STATICS IN JINL, BUT I'M PUTTING
AN INTERFACE, ANOTHER INTERFACE
AND A POPULAR CENTRAL TYPE. ALL
KINDS OF REASONS WHY I MIGHT NOT
BE ABLE TO PUT THAT INTERFACE AND
INT. IT MIGHT BE THAT, YOU KNOW,
I'M ME AND I DON'T OWN THE CORE
LIBRARY AND I CAN'T PUT MY INTERFACE
ON IT. IT MIGHT BE AN INTERFACE
THAT'S SPECIFIC TO ME THAT I WANT
INT TO SATISFY SO IT CAN BE ADAPTED
TO GENERIC MACHINERY OVER HERE.
BUT INT DOESN'T MAKE SENSE TO EVERYBODY
AND IT SHOULDN'T KNOW ABOUT THIS
INTERFACE. MAKE IF WE PUSHED THROUGH
WITH IT, THERE MIGHT BE SO MANY
THINGS THAT IT MIGHT BE OVERWHELMING
AND SILLY. ALL OF THESE REASONS
PUTTING ANOTHER INTERFACE, ADOPTING
THIS STRATEGY OF SLAPPING IT ON
TYPES, IT'S NOT ALWAYS GREAT OR
POSSIBLE. BUT I WANT TO. WHAT CAN
WE DO? LET'S STEP BACK FROM THAT.
PLACES WHERE WE HAVE A SIMILAR SITUATION.
I WISH THAT TYPE HAD THIS METHOD.
IT WOULD MAKE SENSE FROM MY DOMAIN
IF INT HAD THIS METHOD BUT IT DOESN'T.
I ADD IT AS AN EXTENSION METHOD.
PEOPLE HAVE BEEN SAYING FOR LITERALLY
A DECADE. >> MORE THAN THAT. >>
WHY CAN'T I HAVE EXTINCTION STATIC
MECHANICS AND ALL THAT. >> WE CALL
THAT EXTENSION SDPLVERG EXTENSION
EVERYTHING, GIVE ME EXTENSION THE
WHOLE THING. YEAH, BUT UNFORTUNATELY
WE BACKED OURSELVES A CORNER WITH
THE SYNTAX OF EXTENSION METHODS.
>> WE ARE SO EVASIVE ABOUT THAT
ONE. [LAUGHING] >> LET'S BACK OUT
OF THE CORNER, SAY WE MADE A MISTAKE,
NOT WITH EXTENSION METHODS BUT HOW
THEY'RE DECLARED. LET'S HAVE A NEW
WAY OF DECLARING EXTENSION THINGS.
YOU HAVE SOMETHING LIKE A TYPE DECLARATION,
THIS SYNTAX ISN'T SET IN STONE.
STRONG MAN SYNTAX. THIS IS AN EXTENSION
FOR THAT TYPE, AND HERE ARE ALL
OF THE MEMBERS THAT I WANT TO ADD.
USING THIS AND EVERYTHING. LIKE
YOU WOULD WRITE THEM AS INSTANCES
OF STATIC MEMBERS. >> WHAT WOULD
THE SCOPE OF THIS THING BE, FOR
EVERYBODY? >> NO, IT'S KIND OF LIKE
EXTENSION METHODS PULL NIGHT THE
SCOPE. >> DIFFERENT PARTS OF MY
PROGRAM FOR EXAMPLE. >> YES. NOW
I CAN ADD, AT LEAST CAN I ADD THOSE
EXTRA MEMBERS TO INT, THE PROVITY,
SO CAN I GET THOSE MEMBERS, SO THAT'S
GOOD. I CAN CALL INT ZERO, I KNOW
WHAT THE NEUTRAL ELEMENT OF INT
WAS, IF I DIDN'T BEFORE. NEUTRAL
FOR PLUS. DOESN'T MEAN WHAT I SOLVE,
I AM THE RIGHT MEMBER I AM NOT SATISFYING
THAT INTERFACE. WHAT IF AN EXTENSION
KWO DO THAT -- COULD COULD THAT,
WHAT IF CAN I SLAP AN INTERFACE
ON THE DECLARATION AND SAY USING
THESE MEMBERS THAT I'M JUST INTRODUCING
AS EXTENSION MEMBERS PLUS WHATEVER
MEMBERS THE THING HAS, LIKE THE
PLUS IN THIS CASE, PLUS-PLUS, IMPLEMENT
THIS EXTENSION METHOD, THE FACT
THAT INT IMPLEMENTS IMONOID IS ALSO
IN SCOPE. A LOCAL THING I'M BRINGING
FOR ME, IMPLEMENTS IMONOID, NOT
FOR YOU, FOR EVERYONE ELSE, WHO
IMPLEMENTS THIS. >> THAT'S GALACTIC
SPACE TIME STUFF. BUT IT'S COOL.
>> I AM IMPLEMENTING IMONOID FOR
INT, NOT OWNING IT KICKS DO THAT.
WHAT THIS FEATURE LETS ME DO. [APPLAUSE]
>> SHIPPING SOME TIME FOR YOUR CHILDREN.
>> YOU SEE HOW THIS MIGHT NEED HELP
FROM THE RUN DIME. WE ARE SEEING
IF IT HANGS TOGETHER. THAT IS ADD-ALL
WITH INTS, THAT REQUIRES SOMETHING
IMONOID AND INT DOESN'T DO THAT.
WE THINK THAT'S PRETTY COOL. I THINK
THIS CAN GET IMPORTANT IN THIS AGE
OF CONSUMING DATA, THAT YOU KNOW,
NOT VERY STRONGLY TYPED. YOU HAVE
JSON AND YOU HAVE THE DICTIONARY
THINK REPRESENTING OVER THE WIRE.
ARE YOU ABOUT TO SEND OVER THE WIRE.
WORKING WITH THOSE IS KIND OF LIKE
YOU CAN USE DYNAMIC OR INDEXERS
AND STRINGS. LIKE PROGRAM INCOME
JAVA SKRIRNGTS SFLIET. [ LAUGHING
] >> FOR SOME DEFINITION OF PROGRAMMING.
>> EXCEPT UGLIER. DOES THIS WORK?
THE IDEA BEING THAT MAYBE, MAYBE
WE CAN LET YOU PUT WITHOUT CHANGING
RUN TIME, REPRESENTATION, MAYBE
WE CAN LET YOU PUT STRONGLY TYPED
OVERLAYS, PERSPECTIVES, THAT ARE
LIKE I WANT TO VIEW THIS AS AN ORDER,
AND ORDER HAS STRONGLY TIED MEMBERS,
I WANT TO VIEW IT AS CUSTOMER. NOW
CAN I WRITE STRONGLY TYPED CODE
OVER THEM. THEY CAN STILL BLOW UP
IF I LIED WHEN I VIEWED THIS, BUT
AT LEAST ALL OF THE LOGIC CAN BE
WRITTEN IN A STRONGLY TYPED FASHION.
MAYBE THOSE ROLES COULD IMPLEMENT
INTERFACES TOO. BUT, SO THAT WAS
WHAT WE HAD ABOUT THE FUTURE OF
C#. HERE ARE THE PLACES YOU SHOULD
GO TO LEARN ABOUT WHAT WE'RE THINKING.
LOOK AT THE DOCS, THEY'RE AWESOME,
THEY HAVE THINGS COMING IN WHERE
CAN YOU WRITE CODE LIVE IN THE DOCS,
GITHUB IF YOU WANT TO FOLLOW ALONG
IN THE MESSY DESIGN PROCESS THAT
TAKES PLACE THERE. >> VERY MESSY.
>> COME AND SEE US AT THE BOOTH.
WE WILL BE THERE FROM 11:30, C#
BOODZ IN EXPOSE, AND -- C# BOOTH,
WE'D LOVE TO TALK TO YOU. THANK