While I'm sharing my screen, unfortunately, I can't watch the chats. But I am relying on my wonderful team behind me. Oh, that's not the right button. To monitor the chat and let me know if anything comes up. But let me go ahead and first of all open my speaker now. And also say, hello, welcome. Thank you guys so much for joining us for this presentation. My name is Amanda figure out I am the community director of the curationist project. I'm really excited to use this this time we have together all 15 minutes of it to talk to you about this platform that we've been working on for quite some time, and about how it fits into this broader open knowledge ecosystem, and about how we truly are at curation is trying to reimagine what curatorial work looks like through open knowledge. Along the way will also do some interactive stuff, led by my colleague Neha, who will introduce yourself to you in just a moment. And we're also going to be able to show you guys the demo of what's to come for this platform in the very end so I'm going to hop right to it. Again, thank you all so so much for being here. What a compliments I have your close attention. So, our project is called curationist and right at the heart of that word is of course the word curation. All of us in sort of this Wikimedia community and all of us in open knowledge broadly understand that so much of our work is curatorial work is this work of taking care of organizing and making visible. All of the knowledge and all of these artifacts and all of these images that exist in the world. So the word curation and the the act of curation is a little sticky is always the word that I like to use for it it's sticky, primarily because, especially in the Western world, all of our curatorial work is rooted in a singular Western tradition and that tradition initially with what we could call cabinets of curiosities, the collections and the truly the literal cabinets that were put in in homes of wealthy people to sort of showcase their travels and showcase the places they've been in the wealthy to accumulate So when the British Museum was founded in 1753. It should be no surprise that it also took on that sort of cabinet of curiosities form, meaning that it really became a place for the might of the British Empire to be displayed, just like those Regency wealthy families were displaying artifacts from their travels. So to the British Empire was displaying evidence of their travels, primarily in the form of looted cultural objects from Africa, Asia, and all around the world. As a result, although we as a field, the museum field the open knowledge field, the cultural heritage fields have all moved away, as much as possible from that colonial legacy. The fact is that so much of that stuff, so much of that legacy remains in the way that we classify and organize our artifacts, so much of that remains in the ways that we create taxonomy and made it metadata structures now that we're taking those collections online. So that's, that's why I say it's sticky that's why I say that as much as I love this work as much as my colleagues that curationist love this work. There's more to do. There's a lot more to do. Which brings us to who you can see exactly what I was talking about previously, which brings us to this, this fun little joke that one of one of my colleagues always likes to say in our meetings is that yeah it's curationist, but often it's curation ish. And so what might what I mean by that is that in our pursuit of this really important curatorial work. We're also encountering amazing beautiful inspiring alternatives to that that legacy that that Western colonialist legacy. And that is really excited and really inspired us as a team to start to invent this platform which I'm going to get into depth into a little bit later. We saw an incredible amounts of knowledge being held in local level and grassroots organizations all around the world. And so people who really had such an intimate relationship with these objects, and had the historical knowledge behind them to really offer something that we're not seeing an institution to offer a different take on the institutional taxonomic and metadata structures that we're seeing in museums art institutions cultural heritage institutions broadly. So the project for curationist became to really understand okay how can we augment and support this, what I'm calling curation ish work. And there are three things that we can and should do both ourselves at curationist and the open knowledge field in general. And those three things are of course to make images and artifacts widely available. I'm speaking to the Wikimedia community I don't need to tell you guys that you're, you're down you get it. And along with that we also need to grant knowledge holders access to share their information. That means we have a lot of work to do in closing the digital divide. And as cutesy of a name as that is the fact is that if open knowledge and especially digital open knowledge is going to be a force for good in the world. It really really needs to enable internet access profit. And the last thing, which in my mind is the sort of most important hurdle is, is we need to find a way to put local level knowledge on heart with institutional expertise. We need people in their local communities to be able to speak to these large institutions and to be heard by these large institutions, and to be able to do so, both on the level of conceptual knowledge sharing, and also on the level of that metadata also on the level of those taxonomic structures. So towards that ends we at curation and have been developing a platform that is working towards these things and I'm really excited to take you through it more a little bit more in depth. But first I'm going to hand it over to my colleague Neha to take you through a little activity to illustrate exactly what I mean towards that ends. Neha go ahead and say hello and introduce yourself. Hello everyone. I am one of the content editors here at Curationist, where we also produce features and collections on the site for people to see how our tools are being used. I am going to do a sort of visual associative brainstorming game with you to make you aware of how there are gaps in metadata right now so we can do that game. And yeah, the gaps in metadata but there are also resources out there and and although we're going to use Wikimedia Commons as our search bar in order to do this game and all of you will are welcome to participate in this game. So the game board is in the chat. That's where we're going to be working so it's for those of you who don't know it so whiteboard that is run by Google and we all can contribute to it it's super easy.  There's no log in needed. The next slide please. So what we're looking at is a cat mummy and cartonage. That's the title of the object as you would see it in the Brooklyn Museums website that leaves you thinking, you know, a variety of associations with it, not the least of which maybe if you don't know the word cartonage means. Next slide please. This is I'm just walking you through how we might work this example. So you might be reading this and it tells you it's a painted plaster coffins and now you might be interested in plaster, maybe interested in painted coffins. There's a diamond shaped pattern you might get interested in how the linen is arranged in that crisscross pattern that it's a wild desert cat you might be interested in that. So this is necessarily in the metadata here. And then it was shown an exhibition called soulful creatures animal mummies and ancient Egypt. So that's kind of exciting there's actually more description on their website but and more images as you can see on the bottom left including their x-ray images. But we're going to move forward to the next. So this sort of cat mummy can lead us as a group, for instance, or any group to research cat figures and jewelry, or look up Egyptian mummy portraits, or we may think of jaguars, aka wild cats and pre-Columbian or Mayan art. What I wanted to point out is I, I'm going to go clockwise from the top left. So the first image is the linen from Tutankhamen's embalming cache. So I only put in the search from linen bandage and the Wikimedia Commons image search and this was one of the images that showed up. So that was pretty easy that kind of puts us in the right neighborhood. So the next one, I, you know, know about all these mummy portraits and I was like, Oh, this cat mummy makes me think of mummy portraits, where these paintings were made and placed on top of these mummies. So that was a useful search term. Next time, instead of doing cartonage, which doesn't really quite give you important links. The definition of cartonage is painted coffin led me to, led me to this painted coffin of Lady Nefair. So good. But then when I started searching for cat jewelry or jewelry depicting cats or anything like that, it was well not impossible I was just getting one thing, and the rest were not useful search.  So I went to the Wikipedia page for Egyptian cats directly and found this image. It's an Egyptian cat amulet. And there are obviously tons, there must be tons of jewelry out in the world that has cats in it but there was no way for me to get there. This is off off topic in some ways right like a cat mummy and cartonage doesn't necessarily need to lead you to cat amulets, but cat mummies exist because Egyptians revered cats. They had cat jewelry and they had tons of cat amulets but there was no way for me to go from cat mummy to Egyptian cat amulet, the way the metadata currently exists. The next, the next one is the bottom left image. I did the search term. I am jaguar, because my cat or pre Colombian wild cat or pre Colombian cat or any such combination did not lead me to what I knew existed out there which are these jaguar sculptures and amulet you know, decorative items that they had in the pre Colombian age. So this is just to set out how this type of thing can go. The next slide shows how we might actually work. If we just started with the cat mummy image next frame please. Our game is to you use Wikimedia Commons for the images. The yellow sticky note tells you that you can copy. I'm going to. Oh, right, I need to be in mine. Hold on. I'm going to catch up to you guys. So the yellow sticky note tells you that you can either copy the image from your search and Wikimedia Commons. Or you can use this tool on the left side, which is to the left of my, my laser pointer, and you can use that to create a sticky note and just put your search term up on the Jamboard. So we're going to basically use another image to do something very similar like this cat mummy I could have searched for just so covered mummy cartonage animal mummies pet burials painted coffin which I did while desert cat cat headdress cat jewelry cat worship which I didn't search but I could have put in linen strips and the linen bandage that's kind of like the search term universe and you can obviously put in either the term or the image. Next slide please. But we're not going to use the cat mummy for the image where instead going to use this image, this work which exists in. I cannot see the bottom. I think it's in the Brooklyn Museum. I'm going to. Could you shrink the or put the text somewhere else. It's at the mat. Okay. And it's a jade item from the early classic Mayan period. I just want us to observe like if you have to like now go and make a few thoughts about this or follow up on this. What could you possibly be looking for. You can notice that the creature is seated. It's cross legged so you can be searching for something cross legged. I'm not going to give up too much about this but if you know about the piece of course you may look for those key search terms. The pose involves the hands like this. If you notice there's a beak. And the face. And then, additionally, if you look at the two eyes it seems like there's a series of receding eyes, but there's something even more novel about the eyes. They seem cross eyed, just like it's cross legged. It's kind of a few key things to give you something to go off of most people think of jade as Chinese and precious jade artifacts. They come from China, but, or at least regular Americans well, but there's also these plastic Maya jades I kind of wanted to put those two together. And our next slide please that is our jam board. So I've shrunk the deity figure and we can search and Wikimedia Commons. Maybe someone can put the link in the chat. For those who may not know how to get there for whatever crazy reason. And, and based on whatever you find or what your search term might be, I would love it if you guys were able to populate this for me. It could simply be a search term or an object. And I know. I know Amanda is going to help me here. I was just typing in the chat, please feel free to jump in this jam board with us, add your images or potential search terms based on this image to this jam board. You shouldn't need a login to be able to access it but if you are having any trouble, go ahead and send me a direct message and I can help you troubleshoot. You should also just be able to copy paste images about needing to save them. But again, if anything seems difficult or unintuitive to you, go ahead and let me know. I'm going to come and add my search term. Thanks everyone for being so active in this jam board. I just get a thrill to see things start to pop up. And what I'm doing is, I'm actually trying to put the image. I'm trying to do some of these searches and find images and I'm putting them right next to them next to the search terms. But if, if you go to, if you were to put that search term in your thing in your browser, you can right click and just copy the image and then paste it directly you don't have to actually download it or anything. So we take, let's say five more minutes to can see I'm thinking of so many things as we play. I'm delighted to see so many things on this jam board that I either would never have thought of, or actually I'm not sure what they are. We'll give it a few more minutes guys. Any final thoughts, right about 60 more seconds for any final thoughts any last search terms or images. Wow. All right, I'm going to do a last call and then Neha I think you're ready to walk us through our results, whenever you're ready. Yeah, give me two seconds I'm putting this text down there. Okay. Great. We've come up with a lot. Going from everything from ancient Mayan Jade artifacts and ancient days to search terms that are about modern Jade figures and animals because clearly this one's not quite human, even if it's anthropomorphized. So we, I, you know, what the, what happened to the Jade mining image to get covered. It's all good. So, let's check that one out and there was like a to this isn't a bright over here. You can see a tiny know which is sort of like the Caribbean Puerto Rican and Cuban like in that area, like an inhaler. So we're in the right neighborhood of where we're looking at, and not even quite the similar thing but I and I could not find anything like our object when I did cross-eyed deity so that kind of gives us a clue of what's missing. We have. I also did the search for, I think it was the Jade artifacts or something and I came up or ancient Jade that was ancient Jade and I came up with this Jade Kong from China, the Neolithic period and that was interesting. When I did Maya Jade artifacts, I got this Maya Jade mask. And as we are able to find and a range of things that we might have more more trouble with what the curationist in some ways is trying to do is not only create the imagery, I mean create access to all this imagery and all these works that exist in the partner archives, but also create a second layer metadata level that may not exist in the original websites to create a possibility for thinking through some of our questions. In some cases it's as simple as writing some colonialist strong in some way, and or by writing the information or by adding information because the metadata has not been supplied because it's an object of low rank in some sense for the museum that's holding hit it, but may not be so from the point of view of the culture from which it was collected. So we're we're working all of those angles and that kind of gives you an idea of how this this board might end up the next slide please. This is just to give you an idea of what the next slide, what slide before it sorry. This tells you what the website actually tells us on the mat. It's an object that's well researched and there's a lot of text on it, but it you know you might be searching. Well after you read this text you might say oh I'm going to look across legged figures, or I'm going to look at look at something where there's an imagery of arms bent in towards the chest and curled in the crab claw position. The deities actually named it's a principle bird deity. And so we don't know if it's actually the bird deity itself, or human wearing that mask, as they do during rituals. That is depicted in this imagery. As I mentioned the figure is cross side. We did not. Nobody caught on to the square pupils part, but they are square so you could have gone searching for that. These kinds of eyes I used to identify shining solar and or the splendid supernatural beings that could have led us to searching for solar beings or you know various solar deities and creating a collection that has to do with solar deities for somebody to come and look at on our website, or somebody's research paper might be on solar deities. How are we on time. We're doing great on time thanks for checking. Oh great. Would we like to do a very quick second jamboard in this case I'm not going to give you very much information at all. And I want to see what happens when we work with that image. So this is a bowl with kufic calligraphy. This is all the information I'm providing it's from the arts of the Islamic world. It's categorized as that in the Berkeley Museum, through the 10th century. And all we know is that it's from the summit period, which doesn't tell us unless you read carefully in the text where it's from. Next slide please and that will be our jamboard. Make this image smaller, please, so we can put other things on there. How's that. Yeah, that's great. Let's go for it. Let's try and come up with Again, everyone is free to hop in this jamboard and let's see what we can turn out for this objects, even though we have so much less metadata originally to work with so again similar to the previous, the previous artifact. Please feel free to jump in and add post it notes with search terms add images that come to your mind. I see we're already thinking Islamic ceramics. And again, that information that we were giving us down here in the bottom right hand corner. Kufic was absolutely going to be my first search term. And we'll give it about, let's say seven minutes. Maybe even a little briefer. Oh no someone put us on the jamboard. We two are search terms each and every one of us. I am going to move that with apologies to its to its creator, a couple more minutes for any final thoughts or images. Excellent about 60 more seconds for any final images search terms, thoughts of any kind. Any last screenshots of the zoom room. Yeah, this is great. So I can see vessels calligraphic vessels but people also want to know about calligraphic tools like how did this thing get drawn on this vessel. That's an interesting thing to think about how was it thrown Islamic ceramics, the Kufic script itself and then we see it being used in the Quran and a couple of examples here. Which might lead us to think oh it's got very flat and tall. Writing style which is correct to sort of squared off script. Summoned art gives us a beautiful vessel but what is summoning so just found the area that it's from over there. So these are great. These are great. Wide rim platters, we could go with that. We could go with shallow bowls. We could go just text on vessels it doesn't have to be Islamic calligraphic calligraphic I really love the spiritual ceramics sticky note that someone put up. You know, you know, is is absolutely something could could be searching for and it's not necessarily here and the metadata and Islamic cookware that could take us in another way like dinnerware. What's the purpose of this writing might take us to like proverbs on on or reminders on our so on our ceramic where so and slip trail painted text amazing great that's so useful in terms of what we can and cannot find from this in terms of the actual image, it would be nice to go to the link, and I'm going to put it in our chat so that here's to everyone in the meeting. So if we can throw that up on our screen to for us to read what it says which tells us what the the inscription says that it is brown painted in brown slip on a white slip ground. So someone who was looking for slip where was doing during it was in the right place. We didn't get to Iran but that's the summit period once you saw the map you would have gotten to that point and start looking up Iran if somebody wanted to be nationalist in their search terms they could go in that direction. The script is actually placed there in Arabic which is great. And it tells us the proverbs are attributed to Imam Ali and where they were published. So there's a lot of information here if we keep scrolling down. It tells us. Not much else the catalog descriptions has large bore bull with flaring sides ceramic transparent colorless glaze brown slip so this is all technical. First half, then it says huge kufik characters form with center reset the interior design outside is plain. But it, the kufik characters is it's where it's left it doesn't say the proverb part you'd actually need to get to the inscriptions part for it to tell you that it's a proverb. Those are sort of some clear quick observations. So if this object hadn't been fully catalogued and inscription hadn't actually been noted, then the description at the very bottom would be the only metadata in a way that we would have to work with. Any, any thoughts that anyone else might have to add to this. Otherwise, I'm done here. I certainly have some. A widely known for is my constantly having thoughts. So, thank you so much Neha for that that wonderful activity which really shows the way that not only are we as humans you know subject to our own biases and our own sort of trains of thoughts when it comes to describing images cataloging images, putting into organization and taxonomy is and metadata. We also you know have all of the legacy behind us of the history of these objects, both the history that we have captured and that we haven't, which is what brings us to first certainly to our metadata storytelling. I'm going to share these slides after the presentation which will include the associated visual brainstorm and for those of you who are even interested in more metadata, a link to our our medium publication on metadata learning and learning. But it also takes it to the original question which is what is curationist, what are we going to do about having so many different systems for metadata tagging, some of which are are living with us sort of the, the choices and non choices of the people living now as well as the legacies of these objects and the the colonialism and the conquer that they went through. Curationist is a platform that's doing our best to ameliorate some of those issues. Access databases from individual institutions like we saw the Met's like we saw the Brooklyn Museum and making them all searchable in one place one platform, but then trying to go a little bit further and making a place for those additional metadata and additional community cultural level knowledge to be helped. So I'd like to take you now briefly through what our platform looks like. We are launching officially in October this year. And then there's a beta open and available to you on at curationist.org, where you can also sign up to be on our newsletter to hear more about the platform ends with front and center that idea about reimagining culture. It's at the heart of everything we do and so towards that end. So I'm going to bring us down quickly here since our time is limited to look at some of our editorial features. This is the place where on our platform we're showcasing not only these open access images, but also the, the information that goes along with that. For example, if we come in here into Marshall goddesses and mythical Queens, we can see so much information so many images that depict mythical Queens but also so much information that was contributed by. And then if I scroll back up quickly, I can also show you what the search looks like so say I read this editorial feature and I think gosh I want to see more pictures of armor. Who wouldn't buy simply come up and type in armor just like on our metadata Jamboard. You can see that we get a bunch of different things this feels like a wildly disparate collection here we get both images of armor, but we're also getting weapons. So if we come in we add let's say women, so we're getting a little bit closer our metadata is becoming clearer, both because of the metadata of our partner institutions that we're drawing from. And because of the curation is sort of streamlining standardization process, we've got women let's also filter by material and say we only want to see bronze goddess statues. So we're getting even closer things are things are shaping up. Let's say I find an image that I'm really intrigued by, I can come in, look at it here. You all the images, read information about the work and see the original inscription that comes from the Metropolitan Museum of Art. From there I'm able certainly of course to add it to a collection. Let's see armor goddess it seems like the right collection to add in. And then if you come to my profile. Hello, this is me. This collection either public or private again allowing people to choose the level at which they contribute their knowledge. So, in our last five minutes here we are back at the curation is homepage to come again when we launched very soon. I'll speak just a couple minutes more about where we're headed even after this. Like I said in the beginning our metadata and our taxonomy is are the ways that we find an access images, but they're also the way that we we make those images, and those artifacts known to other people. The big next step for curation is even after this original platform launches is to think about ways that we're contributing our metadata and the grassroots level community cultural heritage knowledge that we're canvassing for in our editorial features in our fellowship program in our critics program, and be able to contribute it back to this large open access ecosystem. So what we're exploring ways to contribute that metadata back to the wiki data and the wiki media community, as well as back to the home institutions for so many of these objects. We really see that as part of our role as just a good citizen in the open access open knowledge space. So there's so much more to come from curation at. I really hope that you guys were able to get a sense not only of our work, but also how we do it and what is important about it to us. And in our very last five minutes. First of all, let me thank Neha for her amazing thoughtful work on that. Thank you for that interactive activity and let me thank Raven and Steak and Allison my teammates for also being here. And then if you guys have any questions we would love to hear them. I can stick around certainly until our time slot ends to answer any questions or hear what you guys think, or perhaps I'd like to hear from my teammates what sort of metadata, they were putting on our on our activity boards. Thank you everyone that came up with the syrup the spiritual ceramics. Well done. That was amazing. So please remember to follow us on social media as we will be doing more updates as we get closer to their product launch in October. I have shared the information about where to find us on social media. Well, again, thanks to everyone so much for being here. What a joy to get to share so much so many people's hard work with you. There's so much more to come from us. Like I said, please stay tuned. And if you'd like to connect I'm going to go ahead and put my direct email address in the chat. So if you have any questions thoughts ideas or you just want to have another conversation, please don't hesitate to get it. Thank you everyone.


These astronauts, and look at them! They're going to the moon! I expect nothing but astronomical success. Remember, we are far away, and, Steve, we are here for you. We are your peer college counselors, after all. Your own personal mission control. We're like the NCS's un-counseling department. Except, not quite that good. But nobody can be that good. We're here to take care of your well-being, teach you about college, scholarship, and summer opportunities, and human confidentiality. Talking about counseling really gets me hyped, guys. Especially because I know that I can always be able to talk to my counselor. Even if they're not there, someone else will help. Okay, guys. I know we can talk about counseling all day long. In fact, we'll touch on that a bit more, a bit later. But for now, let's get these guys to the moon. Okay, people, let's get it in formation. Get hyped, get hyped! If we're videoing besides Earth, how are we going to survive? Realize, Rachel. Mission control tells us everything we need to know. We'll be fine.  It's time to take off! And you don't hear me complain. Teachers, TAs, tutorials, they're all going to help you so much, it hurts. But seriously, guys, if you just find ways to take care of yourselves, it's intense here. Like, can't we get it in? You know, sometimes I just space out and I just feel weird.  Exactly. If you don't take care of yourselves, it really marrs for your chance at self-success. We don't need time to reveal.  I play first-beat. And if you do all these great things, you'll really blast through adversity and you'll be feeling out of this world. And pretty soon, you'll be like... More than friends! Hey, as long as you wait two weeks and lead a balanced lifestyle, I space ship it! Oh! Did he start? Well, there's another... You didn't know to save us. Okay, that's... To the counseling website. But never forget to stop by Sacred Royal or the counseling floor. Just visit your counselor and say hi. They have snacks and coffee and tea sometimes.


Hi, welcome to Visual Studio Toolbox. I'm your host, Robert Green, and joining me today is Phillip Carter. Hey, Phillip. Hi. How's it going? Welcome to the show. Yeah. Thanks for having me. We're here to talk about F-Sharp. Yes. Yes, which is, I think, one of the most under-appreciated languages out there. Functional programming, and we've heard about it for a while. F-Sharp's been out there for a while. You're going to show us what's new in F-Sharp in Visual Studio, some of the tooling, and you're going to sneak in whenever you can, reasons why we should pick it up and use it. We're all in C-Sharp, some VB developers, why would we want to do F-Sharp? So make sure you get that in there. Yeah, absolutely. I mean, there are a lot of cool things that happened with F-Sharp. We shipped a new version of the language. It's not the most exciting update in that there are a lot of little features that were added, but they weren't big headliner features or something. They were nip and tuck, fixing up various parts of the language that people identified as problematic over the years and things like that. It now runs on.NET Core and.NET Standard in Rc form, and we're going to be targeting.NET Core 2.0 and.NET Standard 2.0 with a lot more stuff because that brings a lot more APIs. So much more of F-Sharp is going to be able to run on that, and we're super excited about that. But with VS 2017, we shipped quite a few updates to the tools, and these are really special in my mind because they introduced a ton of new features that have never been inboxed in the product before, and basically all of these came from the community. So we have an incredibly talented and really strong community that basically know the language in and out, they know Visual Studio in and out. It's actually pretty incredible how much they know about the way Visual Studio APIs work and that sort of stuff. So they had this extension called the Visual F-Sharp Power Tools that had some extra features, and they began porting some of that stuff over to this newer infrastructure that we put in there to sit F-Sharp on top of what is known as Roslin Workspaces.  And also- Was F-Sharp on Roslin in 2015? It was not on the Roslin Workspaces layer in 2015, no. So this is completely brand new. Some of the things that you're using, especially if you've been using the Visual F-Sharp Power Tools before, they may not seem new, but you'll probably notice there's a new UI, and they're probably a bit faster. Things look a bit snappier. The UI is a little bit just cleaner looking, and more importantly, the same really great UI that C-Sharp and Visual Basic have for these features, F-Sharp now has them too, which is something that we've never had before. And you get to take advantage of the compiler working, the background and the refactorings and the tooltips and all that kind of fun stuff? Absolutely. Cool. So I guess first thing, I'll just show you how you actually get it on the box if you don't have it already. Yeah. So this is the Visual Studio 2017 installer. I have community on my machine, so I can just go modify. And in here, I mean, this is the workload page and you'll think, okay, well where is F-Sharp in this? Well, I've already installed.NET desktop development.  And they see that I checked F-Sharp language support. So it's optional that means it's not installed by default? No, it will actually be unchecked by default, but all you got to do is go in here and check it by default. That's the same thing for the ASP.NET workload. Okay. It runs on core. It's the same thing for the data storage and processing workload. I'm just going to uncheck that one there. And it's actually checked by default in the mobile development with.NET workload. That's the Xamarin workload. Yep. Or if you're feeling like hunting through the list of components, you can go to individual components and you can look for it here. I think it's under languages or something. It's right next to the- There's no search in that, is there? Yeah, they got to get that in there. There we go. Okay. So that under development activities, I thought it would be under languages. But there's a whole bunch of different places where you can look for it. As the installer improves with search and things like that, hopefully, it'll be even easier to find it. And so let's see, it looks like this. But it's easy enough to add if you don't have it. Yeah, exactly. And so you would just go modify if you needed to. But since I already have it on box, I'm just going to launch Visual Studio. Okay. So once my user settings are loaded, there's one other extra thing or like definitely a pro tip that I suggest. We blogged about this on the.NET blog, but we established a new nightly release process for the F sharp tools. So basically when code gets checked into master, it runs through our CI and all that sort of stuff. And it's basically at a point where it's fairly stable, runs through a set of other checks and things like that. And then a V6 is generated. And that V6 is then signed and all that sort of stuff as if it were to be inserted into the product itself. And basically it's the same kind of V6 that you get when you check the F sharp checkbox. But we have it as a nightly process. So if a new feature gets checked in and you want to try it out, you're interested in onboarding to a whole set of new features which is the case today. You can go here under tools, extensions and updates and that needs to load up. And you'll be able to find a visual F sharp tools here. You'll notice this thing says experimental. That's because I actually have something on my machine today. But so that's the actual extension. So experimental is that's internal to Microsoft. Is that correct? No. Oh, no. Okay. So that's the nightly. Yes. This is the nightly itself. So you notice Rosalind language service experiment like all these different things that say experimental visual F sharp tools like this. If you want to onboard yourself to new features, this is a way that you can do it. So I can go to change your extensions and update settings.  If you go here, this is actually the feed where we publish the latest version of the signed V6. Wow. So you can set up your extensions to be updatable on a regular basis and that's different than the usual publishing a new one where it shows up in a little flag and they have a variety. So there's a variety of different ways. This one you can actually, in this case, you just give it a name in URL, you click apply and that will basically say, oh, there's this V6 that I could now use. So what's going on is it then downloads the V6 when there's a new one available and then it installs it in your app data folder on your machine. So there's basically two V6's that you have now. One that is in the release of Visual Studio location where all the other components are and things like that, and then one under app data. So we change the setup offering a little bit for this nightly release process so that Visual Studio knows to go and pick the one in app data rather than the one that are installed by default. So what happens is later when there's a future update of Visual Studio 2017, we'll basically take wherever one of those nightly release V6's are, we will just test it a bit more, make sure everything is really solid, maybe make a few changes if we need to, and then it will then get installed in that other place where everything else gets installed when you're installing by default. So basically we have this really great process where code changes and it's all out in the open, all open source, gets into a new V6, you can play with that V6 and then as you play with it, you're actually also kind of testing stuff out, you notice problems, you maybe make an issue, you say, hey, I noticed this bug, that sort of stuff, and then what you have been working with just gets fixed up and eventually finds its way into the release version itself. So there's not this huge weight of time between big updates to get a set of features that you care about, you can start getting them today and then see what they will look like when they're actually in the product. Cool. So then you just press okay and because I already updated the latest update here, I don't actually have a new one waiting for me, but what happens is it will update and download it and then install it for you and then eventually you'll get prompted, like, hey, if you want to have this thing installed, you have to restart Visual Studio and then it goes ahead and it does it. But so I'm gonna start creating an F-Sharp app, a really, really basic one. Let's just make this run on 4.6. We'll just, I'll call it web demo or VS Toolbox demo. There we go. So this is just a simple console app that runs on Donut Framework today. And so what I'm gonna do is I'm gonna turn this console app into a very basic web service and I'm going to do that with the SWAV web library.  You can set up API routes and that sort of stuff or you can take those API routes and you can sit them on top of another web server technology if you like. But we're just gonna go with the whole thing because that's just kind of the default out-of-box experience.  Just let main, main is the name of the function. I'm defining a function called main. It takes in argv which is just a string array because that's just kind of how main works for most stuff. We have the entry point attribute which that's just the entry point of the application and printfn is basically just printf and it's a formatted print. So this percent a basically means print whatever it is and internally it uses reflection and that sort of stuff. But I could change that to just be percent s for a string and this will actually give me an error because it's like oh argv is a string array but you're expecting a string. So this is kind of a cool thing with fsharp.  And that's gonna be a benefit for certain people. But I'm just gonna go ahead actually first I need to add the suave package that'd be helpful. So I'll go under and manage new get packages and browse and I'll type suave. And it's the first one see it's the little guy with the mustache and the bow tie. We got a cool logo. So we'll just go ahead and install it need some dependencies yada yada yada goes ahead and adds them all right we're good to go. So I'm gonna get rid of this and I know that start web server is the actual function that starts a web server but I don't have anything added so I get red squigglies but I also get a light bulb. Light bulb says open suave all right now I'm good to go. And notice I typed default config actually I think I just there we go default config I'm already getting intelligence for this thing this default config is this sort of you can just well it's a default configuration for your web server it listens on a certain ports it binds on IPv4 has a kind of a generic error handler and stuff like that. You could pass your own configuration if you want but we're not gonna do that. And then the second argument to start web server is a web part or basically your routes. I'm not gonna go into the details of what web part means in suave that's just they have that on their site explaining kind of the types behind it and how they get the types to all match and that sort of stuff. But what's really great is within the screen here I'm just gonna type some stuff fill some stuff in and I will have basically 15 to 20 lines and a web server already going. So I'm gonna set it up as a get I'm going to compose that with this choose function and I'm going to have a list of routes. So I'll type path.  I'll compose that with an okay of hello folks and all okay does is just return to 200 okay. And so you'll notice that types of stuff that doesn't compile things are kind of weird. Again, I get light bulbs suave.successful. That's where the okay function is actually defined. Get another one, suave.filters that's where the path function is defined. And I get another light bulb saying suave.operators and that's where this custom operator is defined. And so that operator it uses some pretty cool type system stuff known as Klycely composition to sort of compose functions between each other that sort of return these types that are context sensitive. And you want to be able to compose them together and there's a whole bunch of theory on how that works but in practice it just means you get to write very little code that's very expressive and saying oh well you know the path of hello composes with this output. Okay. And so I will just go ahead and do another one. We'll call it goodbye. All right so now I have two paths. We'll just go ahead and start it without debugging just so it's a little bit faster. All right and then I'll go to localhost 8080 oh that's right I didn't actually have a path just for 8080 we'll go hello. And it says hello folks. And then I'll go goodbye and goodbye folks. So this is I mean this is super basic stuff. I mean like this is just spitting out strings. But I've got 18 lines of code including some white space and some comments and I have two routes on a web server already running. That's pretty nice I'd say. And so this is sort of one of the great things about Fsharp is that you know there may be some extra stuff that you gotta learn like you gotta learn that there's this composition that there's these functions that are being composed with each other and all that sort of stuff. But at the end of the day I have four lines of code that defines my API routes for my web server. And then I just have a function called start web server that takes in those routes as a parameter. Takes in a function as a parameter to that other function. And so this is it's like this foundational thing in functional programming that as you use it more and more you'll really start to love it. If you've been using link in Csharp or Visual Basic and you know composing different link expressions that sort of stuff that's exactly sort of the same path. And so if you find yourself loving code like that in Csharp you will probably end up falling in love with Fsharp because it basically takes that to a whole nother level. So this is kind of cool but you know you get some you get some hovers I can actually do something kind of nice here and click on routes I can go okay find all references this is something that's brand new in VS 2017 for Fsharp. It's kind of down here at the bottom here but you notice this is the same UI that Csharp has. So there was so much functionality implemented at this common layer. We didn't have to do anything to implement this UI. We didn't have to you know the fact that you could hover over this and see a little block of code that shows where it's being used. We didn't have to implement that at all. That was just done in a common layer. We got so much of that stuff for free. The other thing that you may have noticed on the guidelines right. Oh yeah yeah we have these structured guidelines as well. Which you know you can hover over it you can see that you can collapse them. That's also that was only available via a power tools extension that not everybody downloaded before. And even then it wasn't quite it wasn't using the same UI. And then under default config you know if I were to type that again right. You'll notice that it's using this sort of fuzzy matching. So there we go I got it to die there. So diff a C and it's already knowing to pick it. So you'll notice it's kind of hovering that C and stuff like that. That fuzzy matcher is implemented at the workspace layer. It's not implemented at the F sharp layer. We got that for free. Also these filters that you see here we also got that for free. Now we had to add some glyphs and like associate certain things with glyphs. That sort of stuff that was about maybe a hundred lines of F sharp code to do that in our tools. But you know that's easy. Also another cool one I can rename routes because you know why not. We'll go to rename and this is the Roslin inline rename sort of thing. We'll call it app instead. You'll see that online. Some people will call their routes app. I'll hit enter and that'll be good to go. And then I can rename that to oops rename. There we go. We'll call it routes again and we can do preview changes and you can see the same preview changes window that you can see sharp as well. This is like this is kind of a whole another level of F sharp tools that haven't existed in box before. And they're getting better and better and better. And especially if you're on the nightly release train you're gonna see so many of these things. So I'll just go ahead and close that out. And I'll do something a bit more exciting to sort of kind of really try to nail down why you want to use F sharp. So browse will go to F sharp data. Whoops I can't spell. There we go. So this is a really awesome library that is used by well it's built by some people who had worked for Microsoft and worked on F sharp and they're now a part of the community. They're absolutely amazing. And so this is basically a whole bunch of different data storage data processing data gathering parsing that sort of stuff inside of this library. And most importantly it uses what's known as F sharp type providers. Now type providers are I mean I'm basically gonna say they are your way to get IntelliSense for data under the covers what they do is they you effectively pass a sample data set to a type provider say it's you're reading some JSON data right you can either pass a schema or you could pass an example and then it will read that in build up an object model that represents that thing for you and then pass it to the compilers and specifically the compiler service. And so then the compiler service inside of Visual Studio will allow you to get IntelliSense for that object model so you could dot into things. So that way you don't have to create these sort of ephemeral types that exist solely for being able to deserialize into so that you could turn them into something useful. Yeah that's just kind of boilerplate that nobody really likes doing. And so at type providers let you just do away with that entirely. So I'll just go ahead and open F sharp dot data so get some IntelliSense there so I don't have to quite remember the thing this is actually unused right now so I could choose to just remove it but you know I'm not gonna do that cause I wanna actually use it. So I'm going to put a little bit of boilerplate here that you should never actually do in real life.  I have like my own generated code here that for using this API for the Washington State Ferries. It's they have a rate limit and stuff so I'm not too worried about having the string up there or anything. Like they force you to actually access it with your own your own GUID. But so I take the ferry to work because I live on an island and to get over here I have to ride a boat and they have an app that I'm not the most happy about and so I've just been kind of curious about like. That tells you when the ferries are and which ones have been canceled and which ones are out of service. Yeah yeah and so like you know I know that I'm on a particular route has these sets of boats between these two terminals and then basically the question that I wanna ask is like okay when is what's the set of ferries that I can take for my point in time and where I'm at right now. And so I'm working on building an app that sort of does that but I figured I'd show off just type providers for accessing a real life data set. Okay. So I'll go ahead and open system here just so I have this date time offset here. And so now I have this ability to build this URL out just takes a base URL and a little code. And then one thing that I'm gonna do here is I'm going to create a sample URL. So you would package this up somewhere in a self-contained spot of your app. You wouldn't actually like do it like this. But that's fine and this notion of storing these things inside of a module is also kind of a code smell but you know whatever. So I'm going to define this string so we'll go sketch routes sample. So basically this data set is the intersection of schedules and routes. So a route is like this abstraction of there are these two points across the water that a boat can go across and that's considered a route. And then routes have IDs, schedules have IDs and there's a way to correlate them and that sort of stuff. So we're just gonna grab that information and see what it looks like. So I will go ahead and create a string literal here. And I just built out the URL here and we are good to go. Actually I just realized I'm not using the state string in any way but you know whatever. I just copied that out from somewhere else. So I will create a new type provider here. So we'll call this sketch routes context because JSON provider because it's a context and I will just pass in this sketch routes sample string. And so it compiled all that sort of stuff. I have this now type provider object. So let's have a function that gets the data. It's not gonna take in any parameters because the URL itself is kind of a static thing. There's no input parameter to this schedule routes URL. It's always gonna be the same thing. If there was a URL that you had to provide meaning there was like a parameter or something you needed to have that would probably be good as a parameter to this get data function. And then you would build the URL out like that and then you pass that off to the context object. So we'll just say that the data will assign data to something and we will go sketch routes URL. Did I not? Oh, I didn't open that. I gotta open up my module. There we go. Okay, and I'm going to pipe that. So this is the way of passing a parameter to a function in a Unix pipeline sort of style. And I'm going to pipe that into something. And so pipelines are really cool. If you ever use Unix pipes and you basically say there's this operation, I pipe something into an operation. The output of that operation could then get piped into the input of another operation and so on. We have that as a language construct in F-sharp. And so you think of like stacked link queries when you know dot where dot select dot select many things like that. You could do that with just F-sharp pipes and just piping regular functions together. So you don't need like special functions to do that. Just regular boring plain old F-sharp functions can get piped, which is pretty cool. So I'm going to pipe that into the sketch routes context dot load function. So there's a couple different things. I could do this in an asynchronous context but I'm not gonna do that just for the sake of time. So now I have piped it into the load function. And so that means within this scope, I now have data and data is an array. Okay, that's kind of cool. I guess I got an array back for the thing. So I'll pipe that into an array function. We'll do array dot map. So let's just, we'll transform this into a array of tuples. So that I can get some of the data off of it. Cause some of the data I'm probably- The tuples new in this version of F-sharp or where they always there. They've been in there for a long time. Okay. And just as an aside, we introduced struct tuples in F-sharp 4.1. And those are the ones that actually fully interoperate with C-sharp tuples. So they operate across assembly contacts. So like, you can dot into a tuple or like you can consume a tuple and just have that be an F-sharp tuple. You can pass an F-sharp tuple and have that be just a C-sharp tuple. So we're gonna dot into this X. So X is an item inside of that JSON array. And it looks like, what's this? It says contingency something, contingency description. The description sounds kinda nice. That looks like real-life data. Yeah. Sweet. This is real-life data. Nice. It's IntelliSense for data. Wow. It's pretty magical.  I just- And while you were typing, the compiler went out and retrieved that and did that all for you. Absolutely. That's pretty cool. It's a pretty sweet feature. We have one for Azure, by the way. So, you know, you're doing stuff with Azure Storage, Azure Blob Storage. You don't like dealing with these long names or, you know, whatever like that. You can just dot into it. Cool. Yeah, it's pretty fantastic. And so, we'll just go description. Yeah, we'll do description. So we got the data, then we didn't wanna do one last thing. We'll just kinda put that into a string somewhere. Let's see. Yeah, I'll just do that in one fell swoop here. No, I'll just make that another function. That's better. We'll call that format and we'll just call it data. In this case, I'm going to explicitly annotate my type. So something you may have noticed that I didn't even mention is that I didn't specify the types for anything anywhere. It uses global type inference to figure out what things are. But you can also specify types if you want. There's kind of a, some people, and I subscribe to this belief, is that if you have a function which is intended to be consumed, outside of whatever you're working in, so not just as an implementation detail, but actually something that you want other consumers to have like in a package or just within your own code base in different projects, things like that, is annotating the input parameters. And that's just kind of more of a stylistic thing, but I choose to do that. So what I've actually done here is under get data, if you hover, if I, hang on. All right, I'll just hover over this and you'll see there's a type signature that was generated by the compiler here. Given a unit, which is basically void, this produces an array of tuples and that tuple is, has an int and int and a string inside of it. So that's what my signature for format should be. That type, yeah, okay. Formats and we'll go data and we will say that that is an int, int string array. And so now I know what that is. So basically I had to wrap this thing all around. I specified the type with colon. If I did not wrap this with parentheses, then what it actually does is it says data is a generic type and then the output type of the format function is this. That's kind of a gotcha. So you can specify the output types of functions as well. That's just with a colon at the very end of your signature and then type stuff there. So that's why I have this wrapped in parentheses, in case anybody was wondering why. So we're just going to take this array of tuples and we'll just turn it into a big fat string. If I can type here. Again, we'll just map this over here. Array.map, no, sorry, we'll do fold. So this is a bit more of a functional programming thing. So fold basically takes a data set, so in this case an array and then just collapses the items together into a result. So basically it applies this function that for each item in there goes in and just kind of gives it to this state that keeps getting passed in the implementation details. So you can imagine that summing an array is basically implemented that way. If you think about it, that's basically what you do is you go through an array, you add to a cumulative thing, that sort of stuff. This is just kind of a generalized concept of that. So I'm going to fold this array of data into a string. So we'll go fun at. So in this case, I'm going to destructure the tuple here. So we'll just call this schedule ID, route ID and description. And so I have just kind of ad hoc, destructure that tuple and given it a name so that I could access those constituent parts. And I'm just gonna new line this thing so it doesn't go off the screen here. And we'll go let str equal to sprintf. So this is similar to the printf one except this does that formatted print but it generates the string that you wanted that format to be of. And we'll say schedule ID and that's an int so we'll do percent d. We'll do route ID. We'll do another percent d and then we'll do. What's the backslash t? Oh, that's the tab. Yeah, tab space. So any sort of formatting that you may have done with C it's basically the same stuff here. There's a few extra formats that we have but those are documented and you'll let them. Description and that's an s because that one's a string so that's percent s. And then I will type schedule ID and we want to go, believe this is what I was going for here. So I want to have an initial state of a string here and this guy is generating the string. Did I screw up on my parentheses here? Yes. No, I'm having a little fun here and we'll just line that or something.  Okay, this is schedule ID. I'm sorry, I'm having a bit of a brain fart because it's demo mode and I'm trying to talk and write code at the same time. Okay, so string. All right, yeah, I'm using the correct fold function. Well, in the interest of time, let's just turn that into a set of strings because I don't want to try to talk and think at the same time. So we'll just go SID, RID description and we'll go, there may have been some sort of scope thing where I was screwing up here. Percent D, okay. So I have now turned that into an array of strings. Right, so now string.4, no, not format. String. is it join? String.join, yeah. So I'll just use a .NET function instead. So that's kind of another benefit of F-sharp is that you can just, this is a .NET function, well, sorry, .NET method and I'm just passing stuff in and it all just kind of works. So in this case, format now takes in the data and produces a string. I don't know why I was having trouble with the actual F-sharp function. There must have been some sort of thing that I wasn't thinking right, but so now I'm just gonna wire that up to a quick path. And we'll call that. When it occurs to you three hours from now we can put the correct line of code in show notes. Yeah, yeah, exactly. That's always the way it works. Yeah, exactly, yeah, exactly. So in this case, I will just call get data format. And so I've just kind of done this inline pipe where I'm calling get data and I'm piping the result of that into the format function and the result of the format function goes into the okay. So let's just go ahead and start with this without debugging here. Oh no, there were build errors. What do I do this time? Because capitalization turns out that's important. There we go, okay. So now the web server has started and goodbye, it works again. Hello, it works again. We'll go fairies. And there we go. So I just have a data set here that let's see if I can zoom in here. It wasn't the best zoom, but yeah. So you can see there's this schedule ID, route ID. Yeah, so this is the actual data from the fairies in this Yaddle area. So I mean, you could conceivably take, okay, given a schedule ID and a route ID and the description, correlate that schedule and route and say, okay, these are the things that I care about, so then I could pass that to another thing that says, okay, for a given route and for a given schedule, give me the set of departures that are gonna happen at a particular terminal or something like that. And you could use the description to sort of throw that up on your app or something like that. So I mean, even with just not being able to think while coding for some reason, I was able to spit out a data set pretty quickly here and not with that much code. Let's see, what do we have here? 39 lines of code with some comments. And 38, if you take out the date string, which you're not even using, right? Yeah, yeah. Never do this. Never do this. We always do this. You can't hide your codes. So you are doing it already. I just, I don't wanna perpetuate a bad practice, but yeah, so kinda, I hope this sort of demonstrated that, you know, A, you can use F-sharp to do real stuff, like, you know, there's kind of this misconception that it's for super smart people who only do math and science and all that sort of stuff. And, you know, certainly great for that. But, you know, here, this is just a web server picking up a real JSON data set and playing around with it. And in this case, I just dot into what I need. I format the data into a string. I mean, I could of course do more with that data if I wanted to. I could construct some types and then work with those and then, you know, build out an application, which is what I'm actually doing. So are there people that build their data libraries in F-sharp and then call them from their C-sharp apps? Is that the? Absolutely. Yeah. That's a good scenario. Yeah, yeah, that's very common. Typically what'll happen is, you know, they may have some existing code that was written in C-sharp. They have a web service or a WPF app or, you know, something like that. And they say, okay, well now we have this new requirement. Right. Which, you know, we could certainly do it in C-sharp but we heard F-sharp is great for it, so let's give it a go. Right. And then they do it and then they love it and then they keep wanting to write more F-sharp. And so because it's just a project, you know, just to demonstrate how easy this is, I will add a new project in C-sharp. We'll do it a framework 4.6 library. Do you trust this source? Are you kidding me? Of course I do this in my laptop. You got that on creating a new, I've never seen that when you created something new. I've only seen that when you open existing code. That's interesting. But so I can go add reference, class library one, it's already there. Okay. Did I click okay? Oh, did I create this Donut standard? Oh, that's my bad. Well, so we have a bit of a point in time problem which is, I mean, that's gonna be coming in a future update is the ability for F-sharp projects to reference Donut standard class libraries. And basically work bi-directionally in that case. And then we're also gonna be doing some future work to take this project system that we have here and use the same project system that C-sharp is using for .NET Core and Donut standard. And so as that becomes the future project system of C-sharp, that's also going to become the future project system of F-sharp. Okay. And I mean, I guess I could show you debugging but debugging also works in F-sharp. It's, you know, it's not too crazy. You could write a PCL, a portable class library using F-sharp, right? Absolutely. And call it from multiple places. Absolutely, so if I go- So that might, that's, just to finish the thought, that might be the way of getting into this, right? Just focusing on a handful of things that does really, really well, right? Those bits of the app in F-sharp to kind of get your feet wet without deciding that you're going to completely switch over everything over to F-sharp, right? Exactly. You can just create a class library and just stick it in your existing solution. Or as you said, a PCL, maybe, so like these portable profiles, for example, these map to Xamarin profiles. So you're building a Xamarin app. You could have a library component in F-sharp. You could actually write the UI in F-sharp, which is what I'm doing today in Visual Studio for Mac, which actually also supports F-sharp. So I'll just open that up really briefly to just show you that it exists. Once it loads, my machine seems to be having a bit of stuff here. So there's this fairies thing. So you're just showing Visual Studio code, which has support for F-sharp. That too. And Visual Studio for Mac has support for F-sharp. Yeah, so this is a talk that I'm working on, but yeah, yeah, there's, and so here, like getting some highlights, that sort of stuff, and under this fairies right here, you can go this tab controller, that's the one. So you're doing the whole app in F-sharp. Yeah, okay. So for example, I mean, this is just an absolutely dead basic sort of thing here that doesn't even really do anything except for allow you to switch between tabs in an iOS app. But I mean, as you can see, it's less than 20 lines of code, and this is a UI tab bar controller, which kind of lets you go back and forth between different tabs, and you can launch it on the iPhone simulator, which you get, and so there's being able to click on that sort of stuff. That's 20 lines of code to get that hooked up. It's kind of nice. So templates are definitely a work in progress there. We definitely want to get more templates out for Xamarin. Get some of this sort of stuff right here, making sure you inherit the right thing, and for different types of apps that you want to do where there's different controllers, we could just have different, lay out the boilerplate for you. So then all you're focused on is, okay, well, what's the title? What's the background color? What children do I want to add to this UI view controller, that sort of stuff? But it's also, it's pretty easy. I highly recommend people try it out. This is Visual Studio for Mac, which is in preview. It already works today. Visual Studio, it's already there. You can set up the nightly feeds, get even more stuff. There's Visual Studio code. I'll just briefly show, there's this inide F-sharp. So this is a community project that is amazing. They have a ton of features in there. So many of that, you'll probably think that Visual Studio code is itself an IDE by using this. And so this, because I'm running on Mac, it requires mono, but if you have it on Windows, it just needs the F-sharp tools and MS build and that sort of stuff. And it, yeah, it gives you all sorts of really cool stuff. Some syntax highlighting, tool tips, go to declaration, show symbols in file. It has the little Visual Studio code, code lines. It actually takes advantage of that and then puts type signatures in the code lines thing that pops up too, so. Cool. Yeah, it's really great. You can basically, whatever flavor of tooling you want, you can use F-sharp in, which is great.  It's all there. So what's the best way to learn F-sharp? Best way to learn F-sharp. There are a number of good ways to learn F-sharp. One of the things that I would recommend is we'll go docs. Interesting that type extension showed up here. There we go. Ooh, the new header's there. I got the header color change for the docs, so I just didn't, I didn't realize that. So we have the F-sharp guide. So if you go under docs.microsoft.com.net, you see there's this F-sharp guide here. Click on that. There's a couple of different things. You know, there's some links to external sources that are amazing that we definitely suggest. Then we also have our own content. There's this tour of F-sharp, which kind of goes through, you know, at a very fundamental level, what are some of the cool features of the language and why you might use them, what some of the code looks like. You can copy and paste this over and run it on your machine. We have a couple of tutorials for getting started. So getting started with Visual Studio. These are the kind, this is, you know, setting yourself up and running code using F-sharp interactive, which I didn't even show, but that's a replica. It also works with Xamarin Workbooks, right? Does Xamarin Workbooks support F-sharp at this point or is there only C-sharp? No, it's only C-sharp at the moment, but they are going to be adding F-sharp support. They're super excited. I know that Miguel loves F-sharp, so he's going to want to add it. It can't be too far away. Yeah, and so then we have getting started with F-sharp and Visual Studio Code and I-Nite.  So you can find all those ways to get started here. I'll be adding a Visual Studio for Mac article here pretty soon. I've just been busy with other stuff. And yeah, and then, you know, you want to dive into parts of the F-sharp language that are kind of weird. Like, say you're already on your machine, you saw some code online, tried it out, kind of worked. You're not really sure why. You don't know what's going on. You can go here. You can be like, oh, well I saw this thing called async. Oh gosh, what's that? Oh, asynchronous workflows under F-sharp language service. And so you can go here and sort of get a really deep explanation of the actual language constructs and why things are happening the way they are. Another one that I highly suggest is F-sharp for fun and profit. And actually, I actually like the Git book more than anything else. I donated to this, which is pretty neat. So this right here, so if you go ahead and read this here, this is a huge thing written by Scott Willaschen who is a longtime member of the F-sharp community who he came from an enterprise development background. And so although this isn't the enterprise learning thing, it's actually really fun and exciting. And all that sort of stuff. He's like, oh, if you have used Python or C-sharp or Visual Basic or something like that, well, here are some common concepts that you know in those languages. And here's what it looks like in F-sharp. And so this is super, super awesome. Like this low-risk ways to use F-sharp at work. Highly recommend this thing right here. Goes through all sorts of things that F-sharp is good at in ways that you can incorporate it into your code base without basically telling everybody, oh, you gotta go learn a whole new language to do everything, right? Yeah, incremental, using it incrementally, picking a specific task and using it would seem like a great way to get to introduce it into your existing code, certainly. I know that when I was going from VB to C-sharp, I made good use of a lot of these. There were some tools or online places where you could enter VB code and it would translate it into C-sharp code for you. Are there things like that for F-sharp, C-sharp? Maybe. Maybe, all right. I'm not aware of it. That might be a good community project if somebody wants to write that. Yeah, so I mean, one thing you can do if you're into it is you can actually recompile the IL that F-sharp compiles into and you can recompile that into C-sharp. But it's kind of messy, because you see- That sounds kind of messy. Yeah, there are some, so you can go this, there's this place called glott.io. So if you just want to try it out in the browser, you can see F-sharp right there. And so this, it doesn't have too many things, like there's no, there's no even like highlighting and things like that. Like there's some basic syntax highlighting, but I can go, you know, let's square x equal to x times x, and you know, print fn square of 12 is like that. I'll go ahead and run that. And it'll run this thing, my analogist thing has like a Docker container in the background and it needs to do that sort of stuff. But then you can kind of play with it there. So there's some online playgrounds for learning how to play with it as well. There's going to be, there's this tri-f-sharp site that you may have, that you may run into at some point, which is like this silver light thing. That's going to end up getting replaced here pretty soon. The community's been working on having a much more modernized version of that. And it's using what's known as Fable, which is an f-sharp to ECMAScript compiler. And it actually produces really beautiful JavaScript, which is kind of- Is there such a thing? Yes, it is. Like the JavaScript that it produces is very functional and modern and all sorts of stuff. And it's like, it's this super incredible project and they're basically almost to the point where they can host the f-sharp compiler service in the browser itself. So you can imagine, for a playground perspective, you want IntelliSense, the browser's actually generating it for you rather than needing to go to like a remote server that goes and generates this stuff for you. So we're super excited about that and getting the work done into our compiler service project so that we could support this Fable compiler being able to do that because that lets you use f-sharp to write web apps. And so everybody has to write a web app and not everybody likes using JavaScript for it. And so f-sharp developers can say, well, I can use f-sharp. So it's pretty great. Very cool. All right, lots of cool stuff here. Thanks so much. Not a problem. All right, I hope you enjoyed that and we will see you next time on Visual Studio Toolbox.


Hi and welcome to the session. Let us discuss the following question. Question says complete the following statements. Second part is the probability of an event that cannot happen is dash. Such an event is called dash. Let us now start with the solution. First of all let us understand that the probability of an event which is impossible to occur is zero and such an event is called impossible event. Now from this discussion we get probability of an event that cannot happen is zero. Such an event is called impossible event. We know probability of an event E is equal to number of outcomes favorable to event E upon total number of possible outcomes. Now we know an event which cannot happen has the outcome equal to zero so we get number of outcomes favorable to impossible event is equal to zero. Now substituting this value zero in this expression we get probability of an event E is equal to zero upon total possible outcomes that is further equal to zero only so we get the probability of an event that cannot happen is zero and such an event is called impossible event. This is our required answer. This completes the session. Let me understood the solution. Take care and have a nice day.


I went to Ringling School of Art and Design as an art major and studied painting. I had the most wonderful and the most critical mentor, Leslie Lerner. At that final critique of my junior year, it was my turn and I was nervous. I stood up and explained my project and showed these large paintings that I felt like I worked really hard on and he tore them apart to the point that I did everything I could but cry in class. After class, because he knew I was upset, he took me aside and it made it worse.  He was implying that I just wasn't working to my potential. At the end of my junior year, he gave me a C in painting. I wanted to go to graduate school, so a C in painting was not gonna get me very far. I cried and I cried for a long time. That summer, I took an artist residency where I was the youngest of all of the residents. I think I was 22 at the time and the average resident was between 40 and 60. I learned a lot from all of the others at the residency and learned how to oil paint, which gave me this newfound confidence. A week before classes started my senior year, the rumor was that Leslie only gave one A to a painting senior and I wanted that A to be mine. I called him up and I went to his studio. He was a little surprised that I actually showed up and I said, Leslie, I said, you keep your eye on me. I just took this painting residency, this retreat and I learned how to paint with oils and I realized I wasn't working to my potential, but I'm a painter, not a sculptor, so just keep your eye out because I'm gonna get that A and I worked harder than I've ever worked in my whole life, which was really to my full potential. I managed to get that A and graduate Ringling and go on to graduate school, but it really wasn't about the grade and in the end it wasn't about me impressing my mentor, but it was about learning to work to my full potential because a lot of times we feel like we're working so hard and we're doing something and we don't realize that we have the capacity to do more and to keep reinventing ourselves in the way that feels right.


Did you know that we've mapped more of the surface of Mars than our very own oceans? How has our curiosity driven us to space travel, but not to explore the most perplexing mystery that lies on our very own planet? I've explored much of our waters myself, mapping and documenting our oceans and seas. I've learned that we are better off to just leave what lies below the waves, alone. I grew up by the ocean. In my youth, I love to explore the tide pools and sea caves that dotted the east coast. I love to see life interacting with each other, crabs scuttling away when a big fish swam by, or an octopus camouflaging itself undetectable until its prey made the fatal mistake of getting too close. The sea was always just so interesting to me. When I turned 13, my father bought me a cheap scuba set off the internet. It only allowed for 20 minute excursions underwater, but man if I didn't cherish it. I would dive at least twice a day, blowing all my allowance on air tank fillups and footage from my underwater camera. Most of my childhood was spent under the sea. As I grew, my interest for the water developed from a hobby into a fully fledged career. I received my degree in marine biology with the highest marks in my class and was almost immediately hired by the Poseidon Foundation. Poseidon was a great place to work. I got to travel the globe, documenting new species, and reclassifying the old ones. Here I met people who shared my passion for the waters on earth and discovering what dwells within them. I was a model employee. My data never had mistakes and was never once late. I quickly rose through the ranks until I was the right hand man of the CEO, Barry Henderson. He was an amazing man, with love for the oceans that even surpassed my own. The man had a twinkle, a spark of curiosity that all great explorers possessed. He was not my boss, but my friend. Barry's life goal was to chart the bottom of the Mariana Trench, the deepest pit in the world. Every time we were together, it was the same old story. What do you think is at the bottom? He'd ask me. Something new I would always retort. One day, me and you, we're going to go down there. Of course, an expedition to the bottom of the ocean would cost huge sums of money, which would simply bankrupt the company. But I knew Barry would be unable to rest until he got what he desired. It was a rainy afternoon. I was sitting in my office drinking a coffee and finishing up a report on a new species of starfish my team had discovered off the coast of Australia. When Barry burst in, Lucas, it's happened. My God, it's happened. Huh? The department accepted my request to fund our expedition, our expedition to the bottom of the sea. The following months were spent preparing the submarine. It had to be perfect. That far underwater would put tons of water pressure on every square inch of the hall. I could hardly contain my excitement for what lay ahead. What kind of diverse life could exist that far below the waves? Only one expedition had ever been made before ours, and it lasted less than 20 minutes. Our submarine was designed to be submerged for over 20 hours. Barry and I would be true modern day pioneers. The Triton finished construction in less than two months. And by God, the thing was a tank. 40 inch thick walls left more interior space to be desired, but it was plenty of room to house just the two of us. The best flashlight money could buy was mounted on the bottom, illuminating whatever lied in front in dazzling white light. Two robotic arms were attached to either side, giving us the ability to grab whatever was lying there to meet us and document it. We submerged on the 12th of July, the excitement that boiled inside me as we sank to the ocean completely pushed aside the nervousness that accompanied anyone facing the unknown. I could barely sit still as we sank further and farther into the murky depths. We'll reach the bottom in less than 10 minutes, Barry exclaimed. You've not experienced true darkness until you've been to the bottom of the ocean. Any traces of sunlight died out miles above us, leaving me and my partner in the utter blackness that is the deep sea. Even our fluorescent light had dimmed down to nothing but an orange glow. We could see less than 20 feet in front of us, but that didn't stop Barry or I from getting straight to work. In less than 45 minutes, we discovered over 32 species of deep sea fish, three types of crustaceans and two types of octopi. It was marvelous, never in my life had I had so much fun. The biology in the trench was so diverse and unique, I'd never seen anything like it before. Barry and I were discussing our first hour findings when we felt a jolt on the right side of our ship. It knocked us back several feet and sent me out of my chair and onto the floor. What was that? Are you okay? Barry screamed. Of course no one heard him, along with a petrifying darkness came soundlessness. The world below was nine mute. It held a very disturbing vibe. I'm fine. What was that? I asked, pulling myself back onto my chair. Barry didn't answer.   Barry cried out. The tentacle, which must have been 25 feet, wrapped the front of our machine like a fish caught by a squid. I was dumbfounded.  No, they don't live that deep underwater. It was impossible. It had to be something new. I sprang into action and took control of both of the robotic arms. I gripped the tentacle as firmly as the machine could and ripped it off furiously. Whatever it was attached to quickly scurried away. I, Barry started, but didn't finish. We both knew that we just discovered something, something big. Let's follow it. I decided. The submarine turned in the direction that the thing went in. We followed a trail of half-eaten fish and overturned stones to something we both had not expected to see that deep, a spear. It was made from some kind of metal and it almost looked new. This is freaky, Barry stated. We followed the trail further, neither of us wanting to give up on what could be the biggest discovery of the decade. But then it happened again, harder, the familiar jolt and thudding sound, this time knocking us both out of our chairs. Then it came again, another thud from the opposite side of our cramped ship. Then another and another and another. They happened rapid fire, hit after hit. It felt like I was stuck in an intense game of pong. Then we saw it, an unintelligible mass moving slowly towards us from the thick blanket of darkness edging closer and closer every minute. It wasn't a squid coming towards us, nor was it an octopus. It was a monster. It had the face of a human. If humans lived at the bottom of the ocean, huge glazed solid black eyes dominated the monsters menacing face gills pocketed its neck, appearing to be slashes made by a knife, elongated arms that extended from the bony sides of the creature ended in pale webbed hands with inch long claws jutting out from its grotesque fingers. It had fins to where its hair should have been and on its forearms, the most disturbing part of the monster was below the torso where its leg should have been was instead a mass of thick tentacles that wriggled and squirmed around like worms in a bucket. It clutched its spear firmly as it opened its mouth revealing several rows of needle like teeth.  Instantly, the thudding began again, but this time faster and much more furiously. The creature that we did see whipped its spear at our windshield rattling it uneasily giving the impression that while strong, it was not impervious to danger.  I heard Barry say. I once again grabbed the joysticks that control the arms of our vessel. I swatted crazily at the pack of devils that surrounded us, but it was hopeless. One of them grabbed the left arm with its jagged teeth and ripped it off like it was chicken on a bone. These creatures were strong, intelligent and out for blood. Another rip the other arm off as the spear ricocheted off the glass again. We were in trouble. We were at their mercy as they teamed up on us like a pack of wolves. Pull her up! cried Barry. I jumped into gear.  I shifted our propellers downward and shot our submarine up as fast as the damn thing could go. The mer demons gave chase. They didn't want us to leave. I counted 13 more spear hits before we were out of the trench and desperately radioing in for extraction. We waited at the surface of the water in the Triton for less than five minutes before the helicopter came. I guess they heard the desperation in our voices. It hovered above our heads and released the rope ladder for us to climb to our escape away from that watery hell. I hopped on first and began my ascent up. Barry began to climb after me when suddenly an all too familiar tentacle burst from the surface wrapping itself around his leg firmly. Before I could even scream. He was below the waves and out of reach. There was nothing I could do. Barry's life had been claimed by what he loved most. The ocean. I didn't just lose my friend on that dreadful day. I lost my passion. It's turned into an undying fear of water. I can hardly take a bath without the thought of a dreaded tentacle bursting through the drain and finishing the job dragging me back down to the depths. I will never return to the ocean.