So this is the introductory. So I'm going to just start off with the first lecture. It's an introductory lecture to sort of give everybody sort of the basics about sequencing the next generation platforms. This lecture, like all the other CBW lectures, are protected under Creative Commons license, means that at the end of the lecture, whoops. Oh yes, I did press start. At the end, I didn't? You did, you did, yes, okay. So at the end of the lecture, we're actually going to put the PowerPoints up from this year's full series of workshops on the Bioinformatics.ca website. And this year, we're experimenting with a video version or voiceover PowerPoint, so that we'll have the presentations also available for downloads. If there's somethings you forgot, or you want to, again, you want to show your colleagues, what this year's workshop was about, we'll have those files available at a few weeks after the workshop. So Creative Commons license means that the one we're using is a variety of the sort of Creative Commons that allows you to share. So it means you can take this file, download it, and share it with your friends. You are allowed to remix. And for a PowerPoint slide, that means you're allowed to take one slide out and put it in your own presentation, for example. But you have to acknowledge who it came from. And this is sort of the tricky part. It becomes sort of like a virus.  And so it's a share like practice that if you take some of our slides, then you have to share your slides as well. So if you don't want to share, then don't take it. But I'm assuming you don't want to share. So as I mentioned, we're going to present this is going to be an introductory lecture on an next-gen sequencing. I'm going to be going over some of the technologies, some more in depth than others. There is definitely not time to do, we could spend two days on 454, two days on Solexa, two days on Solid. We could spend two days on just doing SNP detection. There is going to be really sort of a choice that we make strategic choice based on the faculty that we have, but also based on covering what some of the hot areas in the field are. So the field is a next-generation sequencing. People call it next-gen or next-next-gen. I have a slide in my talk where I call it about the now-gen. It's really, it's the current-gen. It's the current-generation of DNA sequencing. There are obviously many of the old capillary senior sequencing machines still around in a lot of departments worldwide, but more and more places are now purchasing the new machines. And it's even between last year and this year when we first offered this workshop last year, there has been, I think it's just announced that Illumina has got record profits in sales in the last quarter, and it just goes on and on. And Solid and Illumina, both of those machines, as well as 454, are really sort of fighting it out, battling this very active landscape. The things that we're going to oversee in this lecture is what kind of sequencing you can do and how does it actually work, trying to stay away from the vendor-specific challenges, although there are some very unique things to some vendors' sort of data output. The biggest difference, I would say, between the various vendors we've talked about right now would be, because currently they're also relatively short read, even 454 is a bit longer, but the biggest challenge is probably working with solid data, you're working in color space, and so I'll spend a bit more time sort of talking about color space. And then all the sort of challenges downstream from that end, in the following two days, then we'll deal with the data sets from either from Selexa and Solid. So just to set things in context, those of you that are still in your 20s may not remember this far back, but I remember when I was in graduate school that it was obligatory to show your autorads in any paper you published, and so that you had to show that you actually had performed the sequencing, and then you had all the bars and on your autorad to show. And obviously this has changed quite a bit and it's gained new sort of dawn, but so has the throughput, so has the sort of the tools that come with it. And if you go back to just 50 years ago, I mean the sort of the throughput of one nucleotide per year per person was all that could be obtained. And so from that going to sort of the large scale, sort of hundreds of billions of nucleotides per person per year is within this next gen. And even between last year and this year, we've sort of doubled or tripled sort of the throughput of the sequencing of next gen sequencing machines. And so there's from the ability of sequencing full organisms where these organisms are small viruses where now these are now large humans, it has definitely evolved quite a bit. So I think in the before the next generation, so in the Sanger world of sequencing, be it capillary or gel-based, I think we were definitely had a simplistic idea of what a genome was. That said, in how much information we could get it. And so we figure out, we get all the pieces, we get all the parts and then we'll figure out the organism. Unfortunately, I mean even since the first microbial genome, H-hemophilus influenza, it was quite clear that there were a lot of parts that we didn't know what they did and we didn't understand the full organism. But that said, with sequencing, we did DNA, we did some RNA and we deduced from that proteins and we deduced from that sort of population organization. We had some sampling sort of experiment where we would sort of look at various members of populations and so you can have some ideas of what was present, but you didn't have quite really the full grasp. And so you were able to do sort of sampling averages and consensus and definitely that led to a lot of information. And of course that led to other problems about sampling averages and consensus in that it's really, it confused the information and our understanding of the biology that was there. With this next gen sequencing platform, I think we're still reductionists, but we're better reductionists in the sense that we have a better idea of the parts and what we now have is that we have a much better idea of the variation and I think human variation sort of as we always knew about it, but now we know how complicated it is and because we've done some deep sequencing. And then the other sort of very big thing that next gen sequencing platform has brought on, although it's not the only way of getting that information, is all the structural variants in our genomes and how they're different in disease genomes and in normal genomes and how they are different between normal individuals. And that is still cheaper to do by sort of really sort of high density genotyping array type technology, but I think will soon be done by next gen sequencing entirely. And so what the next gen sequencing platform offers is ways to interrogate genome, be it of a bacteria or a population of bacteria or of a human or a population of humans in ways that sort of unprecedented. The other sort of big advantage of the next gen platforms is it's less, it's fewer sort of cloning steps, fewer PCR steps in some of the technologies and so fewer introductions of artifacts. And so when we're trying to detect sort of allele frequency, which are very close to the sort of the error frequency of the technology, so you won't have smaller and smaller errors that come from various lab manipulation and or sort of technical manipulation of the data or handling of the DNA itself. And so that's definitely moving there. And there's some, there's a couple of vendors that are doing sort of single molecule sequencing. And so that's obviously going to generate very interesting kind of data. It's going to make it much easier to sort of assemble phasing of alleles along chromosome. And so that kind of information is going to lead to new insights in biology questions that we're not been able to answer before. So quickly old school sequencing, you clone the DNA, you generate sort of a ladder of colored molecules and they're all different size and then you separate by size and then you sort of elude that through a capillary system or through a gel and then you detect the fluorochrome of these molecules and then you would get sort of sequences, strings of 500 to 1000 letters long. The problem is that you can only do even with the sort of the latest version of capillary sequence and you can only do sort of 96 well-plated samples at a time. So you could, the parallelism of the system only allowed you to do about 100 samples at once and it took a few hours to do that. And that's been definitely sort of one of the sort of bottlenecks in the old technology. That said, the old technology was how the human genome, the first and ladder drafts of the human genome were done. It was all through capillary electrophoresis and Sanger sequencing. So Sanger, the old gen sequencing and then the now gen sequencing. So for whole genomes obviously we've done the early drafts of human genome, we've done model organisms, we've done bacteria, viruses, mitochondria, chloroplasts and a lot of things at low coverage. So the first dog genome was a 2x coverage. The first, a lot of sort of organisms, you can do sort of low the cow genomes, sort of 5x coverage and so forth. And those are many of these things were done at low coverage. For RNA, cDNA clones, ESTs were the rave of the 90s and at first thought to be a sort of a contaminant of GenBank but then you sort of put them aside in a separate pile and you started making sense of the STs. And so we learned a lot of technology and sequencing approaches actually led to new discoveries and new tools and so forth obviously. From a community assessment, environment sampling, 16S RNA sequencing and so forth and ocean sampling, the Craig Ventures first sort of ocean sampling of the ocean viruses and bacteria were all done on the old technology. Now with the next gen sequencing, we're sort of doing some of the same project but we're doing it better. So we can now do human genome fully and do it sort of two way and do all the chromosomes, not just half the chromosomes and not an average of both chromosomes basically. We can do now, there's a thousand genome project, the ICGC cancer initiative, we wanna do 25,000 human genomes for both match and tumor types. So that's gonna be 50,000 genome projects in the next few years. And then we're also gonna be doing, we're, you know, Neanderthal man or in the mammoth and all these sort of the weird organisms that are sort of frozen up in the ice age somewhere. We only have a bit of DNA and we're gonna be able to do these samples through next gen sequencing. RNA secant digitization of transcriptome is sort of revolutionized. It's gonna, I think it's gonna kill the AFI industry and it's gonna totally replace the way gene expression is monitored and done right now. I think it's still a bit more expensive than AFI, so I think AFI still has one or two years of life left. But I think that kind of approach sort of chip technology for the high throughput analysis is gonna become much cheaper on the next gen sequencing platform. And what's, some of the challenges of course is sort of the alternative splicing. And so we can monitor alternative splicing events so we can sort of get tags or reads that sort of span a splice variant. But to sort of link up all the splice variants together into transcripts is still a challenge. But not to say that there's not a lot of people working on this problem trying to figure this out. And I think interesting people are doing really great things there. As far as communities are concerned, there is now much more sort of deep environmental sampling. The very interesting environment is the human microbiome project where they're actually exploring 17 or 16 sites on the human body and looking for what the normal microbiome, microbial sort of community that's living there. And then being able to use that as a baseline against which we'll be looking at sort of disease states. People mentioned Crohn's and other disease have been sort of thought to be associated with the sort of imbalance or things going wrong with the microbiome.  And so that's gonna be some very interesting things which are, again, we're not really quite good at sort of, we can sort of sequence a whole things and a lot of things and we're not really good at describing communities. We're not really good at, so there's a lot of these things, technologies are gonna lead software development and software tools that need to identify where the problems are and then you get some really good people working on them. There's just, this week there's a paper from New York, Toronto on Bar Seek. Another Seek, I should start collecting all these Seek names. So a Bar Seek is nothing to do with drinking but it's a bar coding system so that if, for example, in yeast, the 6,000 genes have been bar coded and so that if you can have 6,000 different yeast strains living in a test tube, you can sort of throw different treatments at them and you see which ones survive and which ones live, then you can go sample the DNA and see which ones are still alive by doing this bar code sequencing, next-gen sequencing. They used to do it with, and again, they used to do it with a hybridization model like a chip and but they found that this new Bar Seek is much more sensitive and gives a much broader more depth of the things you can do. So we, a number of people here talked about the epigenome rearrangement, chip-seek and all these things which are, there were chip-chip equivalents and other ways of looking at the epigenome but now this, with this new sequencing technology, it will be quite feasible to do and new, very interesting data is coming through. So there's a lot, we're gonna talk about a few technologies, it's a lot of different nanotechnologies, these products are using resolution of image analysis, chemistry and somology, signal to noise, software image size and pipeline and so forth and cost. And so that's all the sort of important stuff that sort of factored in into, should I use this platform or that platform and you're trying to answer some of those questions. This is a comparison between the Sanyur 3730 which is sort of the top model and the capillary sequencing, the 454 and the Illumina. People talk about Selexa and Illumina, so Illumina bought Selexa, so Selexa is the old name, Illumina is the new name and so if I use Selexa I meant to use Illumina and so forth. And the solid AB is quite similar sort of in the types, it's not identical and I'll get back to that a bit later, but it's very similar to the Illumina. And so the amount of read lengths, so if you want to sequence a human genome, you'd say it's three megabases, actually it's six megabases, because it's a two end genome and so you want to sequence both genomes fully and so if you want to do that, coverage, if you did a six X coverage and on a, with the 3730, that would probably work. 454, 12 X coverage is probably good, maybe 15 would be a bit better. Illumina and solid, anywhere between 30 and 40 X is probably good. Let's just give you an idea so that the base pair reads, you could get 600, 700 on a 3700, 400 is really, that's a really good run on a 454 and Illumina and solid now have, well solid is more like two times 50 or Illumina now has 75 things, base pairs times two. So you can get 150 nucleotides often prepared and read. So how many runs would you need to do, how many reads do you get per run? So as I mentioned, you only get 96 reads off of a Sanger, you get about a half a million from a 454 and 100 million from a Selexa slash AB. So base pairs per run, so you're looking at 57,000 nucleotides versus half a gigabase versus 15 gigabases. So you're starting to see the numbers change here. So how many runs can you do a day? This one you can actually probably do four a day if you're really like people working at night time. But basically two or three a day is probably a maximum. This one a run takes 10 to 12 hours. So you do about one a day, maybe if you have really good people management skill, you can sort of figure out how to run through a day. And this one, it takes about 10 days to do that length of a run. So it's a 0.1, so that takes a lot longer. So machine days per genome would be 312,000 days. So it would take you 850 years to do a human genome. Fortunately, they had a lot of these machines when they did the first genome. So it didn't take them that long. This one it would take you 144 days and this one would take you 120 days. So if a place has 10 of these machines right there, you've got this or 12 of these machines, it would take them a week or two. So cost per run is about 40. So this is much cheaper, but still for a human genome, that means it costs in today's dollars, not at the time they did it. Because the human genome as we know, cost about a billion dollars. So this is about $15 million if we did it today. On the 454, it would be about a million dollars. And on the Illumina would be about $100,000. So these numbers are changing. Last year, this number was half a million. So in a year, this number has gone down five fold. I was updating my slide and so I know that. And this one came down about two, it was like two and a half fold. And so it's really costs are obviously going down, but the way the costs are actually staying quite similar what's changing is how much reads are getting per run. And that's where the companies have really done a lot of inroad is on the throughput. Yeah. That cost, was that your reagents cost? Yeah, there's no bioinformatician salaries in here. Yeah, not absolutely. So I don't think it's reagents and it doesn't advertise sort of, there's no labor costs in there. And obviously that's an important factor and which actually makes this one go even higher because it's over many more, over 800 years. It's quite a, yeah. Yeah. Why do you think that the coverage and barrage of this company is similar to what the same number of base-reads per every year? The same number of base-reads per a base-reader? No matter what you think about it. So you mean first line? Why is this number different? I think so that's a good question. So there's basically the logic there is that with the longer reads of the 454 and even the longer reads of the Sanger, you can have, you don't need as deep coverage to get full sort of coverage of the genome you're interested in. And so that because of the gaps with the repeats because it's easier to align, so you can align multiple pieces and because they're longer. So obviously if we had, if the genome pieces were all 20 kV long, you'd need a lot less than, you would not need 40X if you had 20 kV long reads, right? Which is what some of the companies are promising in the future. And so that's gonna be, if we can get longer reads then you can start requiring shorter reads. But currently, I mean with the 35 base-pair reads not the 75 one, you really need 40X for, and so 30X is sort of is okay for the 75, but that's really, there's other issues that come up if you do those longer reads. But that's where the companies are. And solid right now, I think the longest read on solid is 50 base pairs. And so they're not quite up there as well. So there's, yeah, so no. And so I think that's the main reason. So with the longer reads, so if you can imagine, with the longer reads there's more chances of overlap and then there'll be less gaps and so you won't need, if you sort of assume a Poisson distribution of all your pieces and how they are good at overlapping each other, the chances are you have a lot of short reads and the chances of hitting another one is much smaller. And so that's why you need more. So this is another way, so this slide you actually don't have in your binder and the next one neither. In that, I borrowed this from John and I didn't ask him about it yet. So that's why I didn't want to print it.  Okay, I should have included. I'll have them printed then. Good. And so I didn't know John didn't acknowledge you. I'll have a word with him on that one. So basically this is a plot that shows sort of read length and bases per machine. And so what AB and Solexa or Lumina are at right now sort of 10 gigabases with sort of 50 to 100 base pairs per reads. And so they generate 100 million reads and so 100 million times 50, so times 100 over four to eight days. And obviously the longer the reads, the longer the time. So the 454 longer reads but much less data. And then Sanger even longer reads but even much, much less data. And this is where the companies sort of hope to be, they're promising to be sort of next year. So they're gonna be like 120 gigabases in Lumina 90 and they're sort of jockeying for position at the top end. And 454 is also gonna generate a lot more data in that sort of 400 base pair length. And this one, there's no more development on that platform. So that guy's not changing. So a lot of the figures I have, I'm sort of putting this acknowledgement slide up front is from a paper review from Elaine. And actually it's a paper and annual reviews. So it's not an open access publisher. You have a copy of the article in your binder because I have written permission from Elaine to distribute this in my class. So just in case you were wondering I did something illegal, I did not. I have permission from the author and she says this is enough and sufficient for me to allow you to, you're allowed to use my paper in your lectures. So I'm gonna talk a little bit about select cell first and sort of this is what the machine looks like. This I think is one of the older machines. And basically, sort of quickly, the way this works is that you start with your DNA, you add your adapters and then with these adapters you're able to attach your DNA to this solid support. Once you have that, you then with the adapters is sort of, you do this bridge amplification where you basically do PCR of your DNA so that you create these islands of all the same DNA because it sort of attached itself to the surface right next to where it attached it first. And so you have the right, you have this bundle and then you do PCR application. So you have a bunch, then you sort of detach it and then so you end up with a bunch of, oops, end up with, yeah. Maybe this is the right way to ask a question. So while I was reading the paper also I had this doubt. So I quite don't understand what bridge amplification is all about and why do you do it and has it got something to do with the period and the bridge also. Which one? The bridge amplification part. So you want to amplify that one, that's, you've got a single molecule here and then you want to basically create an island of thousands of these molecules. And so, and you want it right there at the same place. And so you want, so if you bridge right next to where you started, then it will be, that will be the location. So the trick is to have the right density of attachments and it's on your solid surface. And then once you do this amplification then you have locally, you will have this thing happening right there on the surface, okay. How's it going to do with the pyridine particles? So that's a different thing, yeah. So this is nothing to do with pyridine. And, yeah. And so then what you have is you have these clusters of sequences, of analytical sequence which then become your, this is where from which you do your sequencing reaction. And then the sequencing reaction for, is a sort of a fluorochrome terminated DNA sequencing reaction. And so you basically, if the same way the signage sort of worked, it would stop, the fluorochrome would attach where it would stop building the molecule once it got one of those, the one modified bases here. All the bases are modified at every step so that they all grow by one. The fluorochrome that gets incorporated does not have, does not allow the addition of another color. So they all get extended by one molecule. You take, you have this very powerful microscope because now you're looking at millions of dots on your slide. And you have this very powerful microscope that's taking pictures at every stage and then you're taking multiple pictures throughout the whole experiment. And so, and what happens is that every nucleotide addition is a different color that shows up in that little cluster of identical molecules. And so what you're doing through the image analysis, the first step of the image analysis is to look at these pictures and see the changes in colors that goes on. And then that's how you figure out which, because you know one color is one nucleotide and so you know which nucleotide is being added at that position. Yeah. My prevention of syncytine is that randomly you pass through the chip. So how do you... So I'm not sure I understand. Can you... Okay, so here in the chip, you have a random fragment of syncytine strength. Yes, but these are, so we think this cluster is all the same. It's one fragment. One fragment? Yeah. So it's going to then amplify at that one location. So all these molecules here are exactly the same. Yeah, but there are different... This one is different from that one. These are all different. So after that, everything's random. Okay, how do you control the position of these clusters and these clusters? Okay, so that I'm actually not sure for the same somebody else, but I think it's basically, it's a density, it's a solution density to how you observe the positive. You know, it's your laters and how they're placed on the surfaces also. Okay, so on 4.5.4, we'll wait for 4.5.4. Basically, you have the solid support which sort of tells you it's actually a very well-spaced surface that the beads can only go at one place. And so this one is much more random.  They're trying to get these closer so they can get more, higher and more reads per run. That's how they're getting the hub. It's one of the ways that they're increasing their throughput. So there's the paired end read which is a modification of this method, which I'm not, so I'm not talking about the paired end read, that's another way. Basically reading both ends of the same molecule. So then you now know there's 75 duplicates long and they both, they're like 200 or 300 base pairs apart. That's what you know exactly. So you have math from the beginning, these two reads in the genome. So when you try to map one, you know the other one is just a few 75 base pairs away. Of course, that becomes a useful reagent for translocations and alternative splicing because that one things are further or closer than you expect. So that's the way that's being used for that kind of study. And copy number variation as well. Are there also problems? One second, here, first here. Now I'll get you. Is each cluster of the nucleotide and the nucleotide activity quite quick, one rate? Yes. Yeah. The question about it is are there problems? Yes, so not as bad as 454. So that's definitely one of the drawbacks of 454 is the homopolymer detection. But this, actually, Michael was probably better at answering that question. So I mean. No, I mean, so like, so it's actually beautiful when it comes to insertion of the deletion. And you was talking about homopolymers. Right, right. Yeah. I mean, not having insertion and deletions on homopolymers. Right, right. Yeah. In general, there's very few. There's much more, yeah. Whether or not, I'll speak to that. When what goes up? Sure, yeah. But we haven't seen that machine yet. So. Well, it's mostly a soft break. They look at all the spots of the image from the instrument. They have to be able to hear. The spots apart, yeah. I have to speed up a little bit, but you had another question? Kind of an answer to the question. OK, and you will catch me a comfy break. So I'm going to try to go a bit faster now, just looking at the time. So basically, this is a luminal data. So you have the follow spot, the top spot over. You see the different colors. And so basically, the image is a multi-layer TIF image, so that you have progression changing of color over time that is layered into one image. And so you see the changing in color. And so you can sort of read. It goes from green to blue again, and so forth. So software does that. Obviously, read it off yourself. But then the first step of the pipeline for Alexa or Lumina data is to do that. And the same here. You look at another tough sort of cluster of sequences. And then here you have a T-polymer, and then so forth. So you can quickly go over the solid preparation and amplification and preparation of samples. One thing actually I didn't mention with the Selexa, but it's also or Lumina, and it's also very true. It's even more true for the solid is that you have to anticipate a lot of storage needs for that pipeline. And so your laptop that you're using today will not be storing, could store maybe one experiment, but most people don't have terabytes on their laptops. And so it's definitely been one of the big concerns. Not as much a storage issue as a bandwidth issue within your network of your institution between this sequencing machine and the server farm is at the needs of high bandwidth fast transfer rates. So the solid platform works. This is Michael Bruno, one of the instructors. He's not a late student. He's a late instructor. And actually works on solid. So it's a very timely appearance. He'll answer your question. So these are images from the paper, which are actually images from the solid website. And so yes, I know I'm over time. I'm going to try to go fast. So basically what we have here is we have single-stranded molecules attached to the glass slide. And again, it's sort of a somewhat random but uniform sort of type distances. And it's more a ligation type issue. And so what they have now is they have four colors still. But they're working in a totally different space. And so what we have is that we have your dye-based probes, which are the different colors, which are attached at a unique spot. And so basically you have your primer. And then you know exactly the sort of P1 adapter. You actually know the first nucleotides off your adapter because you set that. And then you have your template sequence, which is from your sample that you're looking at. And so you attach that and only so you know sort of the first two and then these can only attach because of the matching of these two nucleotides. So basically you're excited to get a fluorescence and then you get a color. You remove the fluorescent. You have a cleaving reagent. And then the whole thing starts over. And then you add some more. And basically you repeat that step. And then so every and basically what you're interrogating at that stage, you're only interrogating two nucleotides. Although the other ones have to anneal, but you only know about two of the nucleotides that you've interrogated that. And then you remove this whole molecule and then you start over with a shorter primer. So you're going to shift the experiment and do that experiment again. And we've just done all those steps where you take pictures at every step and so forth. And so now you're again interrogating two nucleotides at every seven or eight nucleotides. And so what you end up doing is you end up doing this five times and every position out of the 35 mer because you're looking, you're interrogating five mer and in this case it's 35 or it could be 50 now. You've got two, you have information about two, you have two informative positions that tell you what's at that position. And so you end up with a 35 nucleotide relinks which has informed you what was at that position across the molecule. And this, I'm going to try to come in here. And so you have now the different colors and what each color does is it tells you now what nucleotide is there is what pair of nucleotides is there. And so, oops. And so the color now is gonna, so these are the four different dyes. They're telling you you have an A, A, C, and so on. You have, so actually let me rephrase that. If you have this color, then you have one of these four pairs. If you have this color, you have one of these pairs and so forth. So one color gives you four possibilities, okay? So if we have this sequence, I'm gonna try to go through the exercise of translating the color space into nucleotide space. If you have this sequence, you start at the five prime and you replace the first dye base A, T at this position and corresponds to code three from the table. And the code three you have, I'll show you in the next slide. It tells you which color that is. And so code three, it tells you, so it's down to the T, and then I call it three, so that means the next letter is an A, okay? So we sort of go like that throughout the whole molecules. There's some rules here that it's sort of useful to know. But basically, let me just jump across to this. So in this case, the first one is an A. It's a red dye, so we know that the first base is an A and it's a red dye, then the next one is a T. So then I put a T down. The next one is a green dye by the T and green, so by the T and then it's green, the next one is a G, so I put a G down. Next, so the G is a blue dye, and so if it's a G, first base of G, if it's a blue dye, then the next one is a G. So all the homopolymers are all blue, so A, A, C, C, D, D, T, T, that's always blue. The G, E is blue. Then you have three of them being here. You have a G, then you have a yellow, so the G is a QA, and then you have an A. Then you go like that throughout the whole molecule. So solid data sort of looks like, one part of it looks like this, which is basically you have the first nucleotide, because that comes from the primer, and then you have the color code. So I had anticipated, and this is sort of an analysis pipeline, anticipated actually going through this with all of you right now and getting you to do this. We won't have time to do this right now, but maybe tonight we'll do it at the lab, which is basically to take one of these, translate and change it into a nucleotide space and see what the nucleotide is, try to figure out, understand what the software is doing. What the software is actually doing is it's using these numbers. It's actually not translating it to nucleotide space. It's actually using this and it can use that because it actually makes it easier to see errors, for example, or to see SNPs. And so SNPs will appear as two agents in color changes. And so if you have the same blue, green, then two colors are different, and then colors re-sync again, that's corresponding to a SNP. When you only have one color change, it's actually telling you there's an error in one of your detection or base calling or something. And then you have deletions and insertions which have, so these become diagnostic of the type of changes that you're seeing in your DNA that's been very useful. And Michael Bruteno is gonna talk quite a bit more about this. 454, much smaller number of runs, sorry, number of reads per run. Technology-wise, it's basically single-stranded. You have adapters. And what you do is we were just talking about is you have these micelles, which then become in a single micelle, you have a clone basically of one molecule. So that one micelle will have a single from one single molecule. And then you put these micelles on a sort of micro-titer or nanotiter type plate and then you will sort of capture the images that are generated from light being emitted every time you have a nucleotide added and that's what you capture. And this is not a microscope. It's a much sort of not as high resolution as the solid is Alexa. And so you don't need as fine tune more a CCD type camera to detect these and so forth. Smaller file size and so an easier process. But it's actually more complicated than that. You have quality score files, you have mismatches. You need to align the reference to genome and often. So there's the challenges of doing a de novo sequencing versus a re-sequencing project. And so the next gen sequencing platform for let's say for the human genome, I've been good to re-sequence the human genome because we already think we have a template of the human genome. For doing a bacterial genome that's never been sequenced before it's a much better off going in a 454 technology because you're getting longer reads and you have to assemble de novo. And so that's some of the things that some of the choices you have to make in those platforms. Also in a big new player last year, PacBio, that was their website. So this year they actually have a real website. And they actually there's a cute little video on how the technology works. And this is like Helicose is a single molecule sequencing.  And there's definitely, this is sort of a chromatogram off of a PacBio machine. And there's definitely some of these, what do you call these dark bases? Is that what you call them? Dark bases where there are things which should show up where the things, and it's not a uniform over time because you're dependent on the DNA polymerase going through these various sequencing this one molecule. And so the DNA polymerase because of homopolymers and various types of things. So the structure of the DNA may slow down or speed up. And so it's not as uniform as some of the other technologies. But that said, it's quite promising and we're still expecting a machine to be rolled up from this company in the next, so it was early 2010 is the latest estimate. The things to keep in mind is that all people are learning and so you can obviously learn a lot from each other and from the people in the room and from the people in your institute. The technology is changing. This workshop this year is different than the same workshop, same topic last year. And as I mentioned, we can only do so many things in two days. And I hope you'll be able to see some of the things you need to learn. Other things that you have to keep in mind more is not about the specifics of the technology and the specifics of the way things are being done, but more of the process by which it's being done and because the read lengths are changing, the technology is the software and everything is changing. So you'll have to, what you learn this week is gonna be different than what you'd be learning having to do in a few months. And so you get, but you'll be, hopefully you'll be in tuned with the way of thinking about this kind of data and so forth. Obviously, cost of machines is an important factor. That's sort of stagnating for the two big ones at about a half a million. Helicose, I think is advertised, is gonna go for like over a million. Pac-Bio unknown, maybe several million, but I have no idea. But it can sequence even genome in four minutes. So how many millions are you willing to pay for that? And so all these things are gonna change. Whether you're a department and you have one machine, it's a 454 or if you have your genome center that has 15 machines, it's gonna very much influence the type of infrastructure and types of things and types of projects you embark on. And so all these things are quite important. There was a recent tweet I read somewhere that in the Beijing genome center, they have 22 machines and they have 250 bioinformaticians. So they have 10 bioinformaticians per machine. And so if you're getting one machine, think about how many bioinformaticians you'll need to recruit. And of course the software is changing all the time. This is just a quick snapshot of what we have here at the OICR. So we have 14 machines. So we have seven solids and seven selects us. And this is the amount of the hardware we have. We have about 1.2 petabytes. We have about 1600 core clusters. We have about 120 sort of different types of servers. And basically the genome center is not the only purpose of the OICR, but it's the main purpose. It's the main purpose of what we have this kind of infrastructure. So obviously this 14 machines is a lot of machines, but it's sort of what we have. This is also what's coming up next is another tweet about, you can text me your blood sample so I can over my cell phone line. So we'll be texting each other our genomes pretty soon. And that should be quite interesting. So we have coffee break here, which has sort of shortcut it a little bit, but we'll sort of make do. And then we'll have Michael Brudino's, sorry, Michael Brudino's lecture, yes. Okay, thank you very much.


What's the word y'all? The goal of today's video is to maybe change your perspective on some things in the NBA. I'm being honest, this is mostly for the younger viewers of the NBA slash fans of this channel. But if you're an older dude, you might relate to some of the things I'm talking about in this video. So a few nights ago, the Knights and the Warriors went head-to-head on national TV in Brooklyn, and it wasn't necessarily a closed game. Kevin Reinhardt had one of his worst games of the season. Steph Curry, J-Mon Green and the cast went in and they got an easy W. After the game, J-Mon Green said some things. J-Mon Green and the three-year partnership of Kevin Reinhardt and Steph Curry, very disrespectful to not include Clay Thompson in there. I must admit, but we continue. Everybody criticized it. Everybody criticized Kevin. Everybody criticized us. They didn't appreciate it. But people usually don't appreciate greatness until they no longer have it. And there are some things within this quota, within this article, which was published on the Washington Post, that I agree and disagree with. And the thing I want to try to change y'all mind on the younger viewers is the appreciation part of the players that we currently got in the NBA. Let me take a step back. I'm gonna be honest with you. I did not love everything that was going on in the NBA when you had the Super Team Warriors, right? I didn't hate the league. I wasn't, you know, watching less games than I am now. I was still doing what I was doing. But obviously with that Super Team, there wasn't a ton of parody in the NBA. And I'm happy. I'm happy that Kevin Durant ended up in Brooklyn, right? Because now the league right now seems like it has parody. Yes, the Warriors are killing it. Even today they had a crazy comeback against the Cavaliers. Brooklyn is still very interesting with their star players, but it feels like the league is open to anybody. And we kind of started last year with the Milwaukee Bucks, right? Nobody, well, not nobody, I wouldn't say nobody. Majority of the people did not see the Milwaukee Bucks going out there and winning the championship. Now again, everything had to fall in perfectly form, but a championship is a championship. I'm getting that out there first. I'm not saying that I love that Kevin Durant ended up there or loved the three years that they were there. Kevin Durant signed with them in the summer of 2016. So if I'm doing my math right, summer of 2016 would have made me 20 years old when Kevin Durant signed with the Golden State Warriors. And I'm gonna admit that that first day when I got that Wolds bomb or maybe it was Shams, that my new chapter, whatever the hell it was, I was hurt, you know what I'm saying? Everybody knew the salary cap was about to spike and people had money, but I don't think a lot of people saw Kevin Durant going to the Wolds. I think maybe it was Stephen A. Smith went on to TV like a couple of days before and was like, I know that's about that, but somebody on national TV knew that Kevin Durant was going, but nobody believed him and they ended up being right. But other people, people that watched the game was like, ain't no way, man. He just, first of all, they just won 73 games. So Kevin Durant not gonna take that route. And Kevin Durant just recently lost to them in the playoffs, there's no way, right? And it happened and I was mad, man. I was mad because in that moment when I saw that tweet, I knew that parody and the NBA was going to be gone as long as he was there. And that was true. The only reason they didn't win that last championship, I'm not taking away from the Toronto Raptors, but if they were healthy, everybody can agree that they were gonna win that series. But even at the age of 20 years old and I was upset in the moment that Kevin Durant went there, I appreciated the years that they played together. Now, again, I'm not saying that I love the entire league in that moment, but this is what I mean. We had the greatest shooter of all time. We have maybe the greatest score of all time. We had a player that's one of the better defensive players in the last decade, and we had another player that's arguably one of the greatest shooters of all time at Clay Thompson. All of those four historic players on the same team. And I, even though I didn't love that that team existed or loved how they got there, wasn't, I wasn't hate watching the team because I had learned my lesson. Let's take a step back even further. 11 years ago, I remember, I remember where I was. I was in my grandma's house and the TV was on and we were watching, I'm pretty sure it was ESPN because this was one of the biggest moments and sports history. We have a player announcing his free agency signing and we're finding out on a television show about him. You know, back in the day before Wolge and Shams, what I used to do to figure out who was signing, where or trades it was going on. I would turn on ESPN and just read the bottom or see what they were talking about. But this guy, LeBron James had a whole TV 30 minute hour little spot on the biggest sports market in the world and he decided to take his talents to salvage. Remember, this is 11 years ago. I'm, I'm 20, I'm 25 now. That's crazy. I was, I was 13 years old. So you gotta, yeah, I think about me as like a seventh, eighth grade or maybe about to go into high school and I'm loving the game of basketball.  I was devastated because even at 13 years old I knew that that was a wrap. And I, in my mind at 13 years old, I hated that heat's team. I actively, actively rooted against them every single night. If Twitter was a thing back then y'all know those annoying accounts with no profile picture that just be saying dumb stuff because they hate a certain team, a certain player, I would have been him at the age of, well, I would have been him if Twitter was around. I hated that decision for LeBron. I hated that decision for the league. And most of it was because I was a Bulls fan and I knew for sure in the prime of Derrick Rose, Joachim Noor, and Luanda, we didn't stand a chance against their big three. So for the next however many years LeBron James was with the Miami Heat, I was hate watching them, which means that I missed out on so much just elite level basketball. I just want to show y'all this so y'all can really understand what I missed out. Now this is not a word is bond, but this is an article, top five individual season NBA history. Number one, I don't really know, but I'm sorry, number five was LeBron James in 2013. Right now I am dreading the day that LeBron James retires from the league. And 2013 while I was still hate watching him, he had his best individual season. And according to this publication, the fifth best individual season in the history of basketball. But since I was hate watching him slash Wade slash Bosch, I didn't get to experience the greatness of this season of those players because I disliked them so much. So that brings me back to the Warriors. At the age of 20 or however old I said I was, I had learned my lesson because I missed some of the best years of Bronn, some of the last of the great years of Wade and legitimately some of the last years of Chris Bosch because he ended up getting the blood clot slash whatever health issue. I missed that era, I missed it. So when Kevin Arrest signed with the Warriors, yeah, I was fuming, but it didn't last long because I knew that the basketball that we were about to see between those four players and whoever the hell they decided to run that center, it didn't matter at that point, was going to be a great product of just basketball. So yes, I knew that every season it was gonna be warriors versus calves. I knew it, but I still watched Kevin Arrest do his thing. I still watched the elite shooting of Stephen Curry and Clay Thompson. And I still watched the elite defense of Draymond Green and admired it in the moment. Now my message for the younger people out there, don't fall into the trap that you see with people that still hate the Warriors or still hate Kevin Arrest for the decision five years, six years ago. Don't fall into the trap that 13-year-old me did and try to appreciate every single basketball player slash team for what they are. Now luckily for us right now, again, we have parody. Thanks to Kyrie Irvin, maybe. I don't know, if Kyrie Irvin was hooping, maybe we won't really have parody. But we have parody in the league currently. And that's an amazing thing. We don't have the super, super, super teams. And the teams that we thought might have been super teams aren't performing that way. But I do know of people in my real life that hate watch certain players. And we're talking about some of the greatest players of all time that are still kicking it. I don't wanna expose nobody, but I know somebody that legitimately hates Carmelo Anthony. And we might be seeing some of the last good years of Carmelo Anthony's year of career. He was just out of the league for a whole year. We cannot, we cannot be hate watching players anymore. We can't. And Steph and Kyrie, every single day I watch them. I'm amazed. And I still know there's a percentage of NBA fans that don't like Steph Kyrie, which is fine. I'm not saying you'll have to become a fan, but I want you to watch it while it's still going on because I don't want you to miss out on some of the greatest stuff that is happening in the league. That's all. Another thing, kind of unrelated, but kind of related. I still don't want you to take things for granted, but even if it's not hate watching, like I kind of took, I definitely took prime Tim Duncan or Tim Duncan's run in the NBA for granted. Like I understood that he was the greatest power forward of all time, even though he played majority of his career center. You know what I'm saying. But I didn't find myself tuning in to a bunch of Spurs games when he was in his prime. And maybe that was due to the fact that they were a boring team. And I wish I would have. I wish I would have experienced some of the greatest moments of Tim Duncan's career live. Now, luckily for us, we live in in 2021, going to 2022. So any footage of basketball you want to see, it exists on the internet, but there's nothing better than experiencing it live. Right? Like I could watch every single game of the Beatles career together right now. And I would still enjoy it, but there's nothing like watching something live. What was this video? I don't really know. This quote, it made me, it made me think. It made me reminisce about some stuff and hopefully y'all enjoyed it. My older people that are watching this, if you fall to the same category as me as hate watching a player or team, let me know who that was. I would assume that a lot of people my age were probably hate watching the heat unless you're a LeBron fan. And I think the, not generation, but the era after mine is going to be that Warriors team. What's the next big super team that might get hate watched? Ooh, that's very interesting.


I have to interrupt here, I wouldn't know how this is proof necessary. This is something that a Buddhist monk can say as well about a golden Buddha statue. He could say it doesn't benefit me nor does it harm me and therefore we have proof that it is correct.


Now I will take you back at the beginnings of textile research, because from where I came, we are actually there at the beginnings. So, this presentation is a result of the project, textile production in prehistoric times in the territory of Macedonia, during which artifacts for producing textile from Neolithic period until Iron Age were documented, and also documentation of preserved textile and basketary impression from Neolithic and Neolithic period was provided. As part of this project, a reconstruction of prehistoric long was made in the waving technique preserved on the ceramic fragments discovered in the settlements. In this presentation, I will focus on the textile impression from the Neolithic settlements. The analysis is based on 39 impressions of bottom fragments on ceramic vessels and one leg of an altar from six settlements in the Neolithic period. We tried to identify the process of craftsmanship and the features of the textile. The wave analysis and technological classification point to only one technique, a two, three, or a double wave finding where the warp is the passive and the wave is the active element of the structure. We identified two variations of two-thread wave finding. On 29 impressions, we were able to identify tight, simple, twist winding where the rows of the waves are tightly packed on 80 impressions, close, simple, twist winding where the rows are tightly packed where the rows are slightly separated and on two impressions, we were not able to identify the waving technique. I would like to single out one impression in the middle of the bottom, a tight, simple, twist winding was identified, but towards the edge of the fragment it looks like every thread from the warp is split into two threads which increase the density of the structure. Further waving continued with even thinner web. The warp is not visible on the impressions. Only information that we have for the warp is from the impressions where damaged parts are visible. We can see that the warp is from two S-twist yarns with diameter of one millimeter. Unlike the warp, the weft is clearly visible. The thickness of the weft is ranking roughly from less than one millimeter to three millimeters in diameter. On several specimens an uneven weft can be observed. Although this may be a result of uneven spinning it also be a result of more or less tension during waving. On my first attempt, you can see on the right, on my first attempt to reconstruct winding structure you can see thicker and thinner parts of the weft. This can confirm that the quality and appearance of the fabric depends also on the skills and the performance on the one who produced it. One more reason for uneven weft can be appearance on the fragments. On many fragments we can see, on many fragments we can notice protruding and hollow parts which probably appear when vessel was made. On the protruding parts the weft is more visible and have bigger diameter due to stretching in these parts and on the hollow parts the weft is not or is not so well visible and has smaller diameter. Fabric counts noted during analysis ranging from 7 to 17 yard elements per square centimeters. Verifying textile with fabric counts 15 and greater than 15 appear on 10 examples. 25 examples have textile with fabric counts between 10 and 14 and only 3 examples with fabric count less than 10 elements per square centimeters. From this we can conclude that some of the specimens have densely packed weft with even tension and uniform angle of the weft giving the fabric fine, smooth and even structure. The others on contrary are uneven with thinner and thicker parts and bumps giving the rough appearance of the fabric. Impressions are better visible in the center of the bottom of the vessels and towards the edge of the bottom they are less or not at all visible. The analyst textile impressions lack any marks of borders or selvages. The secondary use of worn out textile was noticed on some impressions during analysis. This is evident by missing elements or distortion on more than the half analyzed impressions. The fabric imprinted on the bottom of the pottery was probably pieces of used clothes or blankets. The pieces of textile imprinted on the clay were probably used other to protect pottery for contamination but dirt while drying after the modeling or as a support while racing the vessel. Planted straw mats should have had the same function as the twine fabrics as suggested by the imprints of mats on the pottery shirt from the Olympic settlement. How this textile was manufactured? In small numbers spindle worlds and longways can give us a general idea of the process of textile manufacturing at these sites. Documented spindle worlds are from two settlements Pešterica and Vrbjalska Cuka. The spindle worlds are of diskoise shape made of clay most of the peripheral spindle were cut off shirts the ends were rounded and a hole was punched in the middle. But also some examples from Vrbjalska Cuka are made of clay which has been molded in the form of disk. The diameter is from 2.5 cm to 8 cm there are thicknesses from 0.5 cm to 2 cm and the perforation diameter from 0.2 cm to 1 cm the weight of the world is from 6 to 80 grams diskoise spindle worlds are probably earliest form of spindle worlds and the most often form discovered from the early Neolithic horizon of settlements and their use continues in the later horizons. Unlike the clay spindle worlds the earliest discovered stone diskoise worlds is from the Middle Neolithic. In these settlements biconical worlds are not detected. Generally, biconical spindle worlds are rarely found in Neolithic sites in Macedonia. They are discovered in the Middle Neolithic horizons of the settlements and their use continues in the late Neolithic settlements. We do not have direct evidence of using clay. The points of ceramic and stone long weights indicate that some type of supported frame perhaps a vertical work weighting long was used for manufacturing this textile at least for the densely packed and evenly twined fabrics. The long weights discovered on these sites were made of clay or stone with spherical, diskoid or dumbbell shapes. Two long weights with dumbbell shape were discovered in Brbianjska Cuka. The weights are made of clay with cylindrical body 8.5 cm to 11.5 cm long and extended at both ends. The weight is from 240 grams to 300 grams. Weight with dumbbell shapes are discovered in the Neolithic settlements from the early Neolithic. Unlike dumbbell weights from Brbianjska Cuka which characterized by larger dimension and weight on some sites dumbbell shapes with smaller dimensions 6.5 cm to 5.5 cm body long and weight from 40 to 65 grams were discovered. The spherical long weights are represented with only two examples from Brbianjska Cuka. One loom is made from clay and the other one of stone. The weight made of clay has a diameter of 6.2 cm and weight around 300 grams The weight of stone has a diameter of 5.5 cm and weight around 100 grams. In the settlement Cuka to Polčanin diskoid long weights made of stone were discovered. These long weights are quite large the diameter is roughly from 6 to 15 cm and the weight is from 200 to 700 grams. One of the long weights has no perforation but has visible traces of bindings. On the other loom weights rounded perforation with diameter from 1.5 to 2.5 cm were made in the middle. A clay diskoid long weight was discovered in Brbianjska Cuka with a diameter of 6 cm perforation of 1 cm and weight of 96 grams. Oval and conical long weights have not been documented at this settlement but weight with these shapes are discovered from the middle neolithic phases of the settlements in Macedonia. One exception is the elliptical weight from Governevo that has been discovered in the first Corisant of Life. Given that it is an isolated case that is used in the early Neolithic cannot be confirmed. The surface of the weight is smooth and the upper part has a circular perforation. The high of these long weights ranges from 7 cm to 10 cm perforation diameter from 1 cm to 2 cm and weight from 200 to 400 grams. Unfortunately archeological textile in Macedonia were not investigated until now but even from this basic information we can suggest that on this territory there was a thriving textile industry from the earliest phases of the Neolithic revealing a developed stage of the twining textile technology. Thank you for your attention.


Hi, welcome to Visual Studio Toolbox. I'm your host Robert Green. Joining me today is Ed Sharbano. Thanks for having me. Thanks for coming on. Ed's going to show us a couple ways that you can using ASP.NET Core from inside Visual Studio of course, take advantage of Angular. So the marrying of Angular and ASP.NET Core. Right. So when you think of JavaScript frameworks, the first thing that might not come to mind is Visual Studio, right? We're not used to developing JavaScript applications in Visual Studio. We're used to C-Sharp and F-Sharp and XAML applications. But the JavaScript frameworks that are out today like Angular are very popular and they work really well with a.NET back-end. Cool. So we're going to look at three scenarios. First, we're going to look at how to create an Angular application in Visual Studio using the new templates that the Visual Studio or the.NET team is releasing with ASP.NET Core 2.0. Then we're going to look at how you would create an Angular application using a web API back-end with an Angular front-end without that templating. Okay. Then we'll look at how to use the template with an open-source framework called NativeScript. So we'll use the template to build an Angular web application and then we'll use Angular to build a native iOS and Android application. Cool. Using JavaScript code that we're sharing between the native application and the web application. So these three interesting scenarios, and they're all just a little bit different. Right. They fit different development types or different team types. Depending on how friendly your team is with front-end development, you may want to choose one scenario over the other. All right. Cool. So let's look at the first way to do this. I've already generated the project, but I want to walk through the steps of how it's done. I won't do it live here because it takes quite a while to pull in all those dependencies. But what we do is go to File, New Project. When we do File, New Project in the latest bits of Visual Studio. Now, by latest, do you mean? I am on Visual Studio Preview for ASP.NET Core 2.0. Okay. So by the time people watch this, it will have released. So you'll be using Visual Studio 2017 15.3 and ASP.NET Core 2.0, right? Yes. Okay. This tooling should be available and when you go to ASP.NET Core web application and click Okay. Normally, we see web API and web application. This would get our MVC application going. Now we have these JavaScript applications in here. So we have Angular, React. In this case, we choose Angular. Okay. This is going to spin up a brand new project for us that is an all-in-one application. So we're essentially removing the view from MVC and replacing that view with Angular. Okay. So we still have models and still have controllers. We still have models, we still have controllers. And you'll see just a little bit of view in there. And that's just to bootstrap up the application. We're not going to be writing any razor. So if you're a big fan of razor, like I said, depends on what your team is like.  So with that said, we'd go ahead and click OK. This would pull all of our dependencies in. We don't want to do that for a live audience here. But what we'll do is show a project that I already have created. So we'll go ahead and open this project up. And you can see here, let me collapse this down. We'll start from the beginning. We open this up and you'll see controllers and views in here. We don't have any models yet because we haven't gone to any databases or anything in this template. But you would normally see models in here if you're connecting to a data on a back end. So we have our controllers and our views. If we go into our views, I'm just going to go into the shared layout here. And we'll notice there's just a little bit of code in here and stuff that we're used to like render body. And if we go into the index, this is just the bootstrapper for Angular. So we're not going to write any views into this folder at all with this approach. We could potentially use some views if we had things that weren't going to apply Angular. But for the sake of the conversation, we're talking about Angular development. So let's close this up and look where the actual client side of the application lives. Since we're at this point, you've brought down a whole bunch of Angular code, JavaScript code, and it's got to be sitting somewhere, right? Right, absolutely. So if we go into our client app, here's where you'll find all of the TypeScript for the application. Now it's important that I said TypeScript because Angular is actually built on TypeScript. And we have to compile that TypeScript down to JavaScript and then use it that way. So I'll get to that more in a moment, but let's look at some of the files that we have in here. The main one I want to dig into here is the app folder and then the components. When we spin up this application, this is the views that you're going to see in the application. So mainly we'll look at fetch data here in this counter component. So let's give this guy a run. And then we'll kind of go back and forth between the running application and look at the code. So Visual Studio now is booting up the server and loading the application in. And there's a lot of magic going in behind the scenes. So we'll talk about that in a second. But when this application loads up, we'll have a counter view where we can press a button in increment a counter and then we'll have a fetch data component where we can fetch some weather. Okay, so here's the application. All right, this is out of the box what you get with the template. I haven't modified it in any way. First we have this incremental counter. We can click on a button and just increments a counter for us. Very simple. That's just as exciting the hundredth of times it was the first. What we're demonstrating here though is the model binding in Angular.  And then we have our weather forecast. This is actually going back to a web API endpoint. Wow, I don't live there. 76, 24, 37, 7, 84, holy cow. 76 is sweltering for some reason. And 7 is chilly. But it's going to be from like the Arctic or something. So we're generating some random data in a web API controller and passing Jason back to Angular and then Angular populates the view for us. So this is again all being done as a single page style application. So let's go look at the code that's running this view. First let's look at the counter component. So again, this is TypeScript. It's written in Angular so you'll see a lot of Angular syntax around this component, and it's just as simple as it looks. So TypeScript written in Angular. TypeScript and we're writing Angular specific syntax. Okay. So you'll see the component directive, the component directive is wiring up the tag that is going to be output from this component, the HTML tag. And then it's specifying the view or the HTML template. You also see things in here like CSS and you'll see dependency injection and things like that being introduced here as well. So a lot of Angular workflows you'll see in here. But for the most part this is TypeScript and all we're doing is incrementing this value and this value updates this field. And then the field is bound to the HTML. So if we look at this current count right here, this binds to our backing field that is right here being exposed. So it's very, very simple stuff. But let's actually take a look at something that's going on here. So if we increment this counter, you see it goes up and our application is running. It's already, the TypeScript's already been compiled and the application is being served. If we go back here and we change this to decrement instead of increment and I save that and we'll give this a second cuz what it's actually gonna do is it's gonna compile that behind the scenes and then re-update this view with the new code and you'll see the counters actually reset. That's because our counter component initializes at zero. So when it sent the JavaScript back to the web page and it updated the code base, it reset that counter to zero. But now when I hit increment, it's gone down. I didn't have to recompile, I didn't have to refresh the page. So what's happening? And what is that a function of? Is that a ASB core thing? Is that an Angular thing? Is that a Visual Studio 2017 thing? So Steve Sanderson, part of the.NET team, he's built what is called JavaScript services, which a subset of that is something called node services. With node services, we can actually run from within Visual Studio, within C-sharp code, a JavaScript library that's running in node. So we can call out to Node.js and call a function in JavaScript and get the return values from JavaScript in our C-sharp code. And then we can utilize that. So we can do things like kick off Webpack, which is a bundling minification compiler like JavaScript tool. So that's exactly what it's doing. When I save that file, there's a watch in the background that picks up the save. It recompiles that JavaScript and Node.js is actually running in the background and it's recreating that view using the Angular server side rendering and everything, sending that back to the view. Okay, so is that a Visual Studio feature? Or is it a feature, if we were doing this in Visual Studio code, could we get the same behavior? Yes, okay. So this is a feature of the code that's running on the server. Okay. So this is a piece of middleware that's running as a service and it's called node services. And that's the ability to talk to Node.js from within our code. Okay. So we have the best of both worlds. I thought we were doing Angular. Are we using Node? So Angular uses Node.js. Got it, okay. To create server side rendering. So we're used to doing server side rendering at .NET through Razr. And the HTML is built up on the server and sent down to the client. With Angular, the same thing is happening with JavaScript and HTML and Angular components. But when it's happening on the server, it's happening in Node.js. Okay, cool. Got it. So with that piece of middleware we're able to talk to a Node.js instance without having to serve directly to the client through Node.js. So we can still serve through our application, all right? So that's the magic that's happening under the hood there. I can actually demo that in a minute. But let's walk through the rest of this template first. So we have the counter component and you saw how I can update that code in real time. And if we go back and look at our application here with the type script for the fetch data component, this is going out to our API. And it's calling API, sample data, weather forecast. So this endpoint actually exists in the same project in our controller. So if we go to controller and look at sample data, this is where that fun weather data that you're having some fun with. This is where that's generated. Got it. So if we look at our API route here, we have our API slash controller. So it grabs the controller name, which is sample data controller. Wax the controller name off the end so we get sample data. And then our action is weather forecast. So that's where you see that API on the fetch data component. So this is actually going out to a C sharp back end web API call. Jason is returned from it and then Angular parses that and repopulates the web page with the appropriate HTML and data that's being bound. So this JavaScript services component that I was talking about. This is really cool stuff that's been built. And I'll just demo this really quick because it's such a neat piece of software. This project that I've just pulled up here, this is just a bare bones web app. There's nothing going on here except we're spinning it up. So you'll see we have a simple service layer being spun up. And then I'm making a call to get this node services package here. So I've got our service being registered as add node services. That's a service I talked about that goes out to Node.js and runs modules and can get back the code. And you'll see I'm invoking a JavaScript method here with node services dot invoke. And then it's going to return a string. And it's going to return other things like an integer and so on. And then the name of the script is just going to be greeter. I don't have to tack on the JS. It knows that it's understood that that's what it's going to be. And if you look in the root of the application, I have a greeter.js file. So let's open this guy up. So this is just using module syntax and it's saying we have a function and it's going to take a parameter of a callback and a parameter of a name. And we're going to just concatenate something onto hello from node. And then our callback will be received in our C sharp code here. And we can use that. And we're just going to write that out to the web application. So when I run this, you can see I'm calling invoke async greeter with visual studio toolbox as the parameter. When the application spins up, we should get hello from node visual studio toolbox. So we actually ran node.js code from within our C sharp application. This is very cool stuff. And that's how that template works is it's got that built in behind the scenes. Very nice, very nice. So this is actually a really good starting point for most people. The knowledge of web and C sharp seems to be very interesting. Does it kind of lead into the WebAssembly conversation? They're related. WebAssembly is kind of different. WebAssembly we're talking about running the app, compiling the code onto something that the browser can understand directly on the browser. This is kind of more magic. We're running node.js in the background. Node already understands JavaScript and we're just calling out to that and getting the results back from it. So it's a little bit different and it's actually running, that instance is running on the server, not on a browser anymore. So we're actually running server side JavaScript code through C sharp. So this template that I showed you to be in with, it's a very good starting point for most people. You don't have to know all of the bits and pieces that are working behind the scenes. You can learn those gradually as you need to add more functionality to the application. So where I work, I'm a developer advocate for progress. We make the Telerik UI components. We are keeping very close eye on this because it lets our customers get up to speed on using our UI tools much more quickly. We have a brand new package called Kendo UI for Angular. So we have charts and graphs and grids and all those rich UI controls that are built for Angular applications. So in .NET 2.0, .NET Core 2.0, there's a new templating system. So we can easily generate templates based on existing projects. So what we're doing is we're going to piggyback off of the template that already exists here. And we have a similar startup experience. So this is something that we're working on. It's not quite released yet. And we hope to offer this pretty soon, waiting for those final bits of .NET to be released. There's still some things with the templating system that are being worked out before the release. So we're watching that very closely. But the startup experience here will be almost identical except the components that are generated in the application will be our UI components. And we have rich charting UIs that are friendly at any resolutions. You can pull them up on a mobile phone and you can have that responsive behavior on your devices without any additional coding and stuff like that. So this is the project template that we're working on. And you see very familiar, we have a counter component. We have our themed button in here. We have our fetch data component. And this is using our Kendo UI grid. And then we've added additional components in here like a chart. And we're still loading some things here in the background. So there we go. Nice, beautiful chart there. We can hover over the different data points. And then we even have additional drop-down components where we can create tag-like interfaces and things like that. So that's what we're taking. The new templating system in .NET Core is really cool.  In our case, it would be like Angular-NG. You get a whole new Angular application with our stuff built in. Nice. So that was scenario one. So we've got an all-in-one package, one server that's doing everything, serving the views from both Angular client-side rendering and Visual Studio, or sorry, and ASP.NET. It's doing that little bootstrapping piece of razor markup that gives us the introduction into Angular on the client-side. Next, we're going to look at the scenario of what if we don't use a template. So there's a lot of people that like using the Angular command line tools. So we can actually use the Angular command line tools to generate the front-side of the application. Then that changes how our back-side of the application works. And we're actually going to need two server instances to deliver all of the content to the client. One piece of it will deliver the UI, and then the UI will talk to a Web API server on the back end. So again, to keep this brief, we'll just kind of walk through the steps of spinning this up. Let me stop this previous demo from rolling, and we'll get into the final new project again. So we'll do a final new project Web API, and then once we've created that application, we'll do Angular command line, NG init, and start up a new application in the command line, and then we just pull those projects together. And our debugging process is misbehaving. So it's giving us a little struggle shutting down here, but we'll spin this guy up here shortly. Okay, here we go. File, new project, ASP.NET Core Web Application, and then instead of choosing Angular, this time we would choose Web API. Okay. So that gives us our back end. Once we hit OK, we'd generate that back end, and we'd go into our application. And we would go into the command line, we would do a new Angular project, and then we'd add that project, and I've put up the wrong one here. Let's go back to this guy and do our back end for Angular project. Loading all the dependencies in on these is pretty lengthy over Wi-Fi even. So it's easier just to show you projects that have set up already. So the file new Web API would be this project here. This is our Web API controller. We have controllers, and I've recreated that sample data controller. Okay. So this is our fun weather service again. And then to add the client app, the Angular client app into Visual Studio here, we would just right-click into Add Existing Website. So... Because you created it in the command line first. Yes, you create that in the command line using the NG init, or NG, I think it's NG init. If I remember correctly, to generate that template for an Angular application. Once we do that, we can do Add Existing Website, and because it's all web code, Visual Studio understands that perfectly. So there's no additional steps to configure anything once it's in Visual Studio. And again, I've rebuilt the same type of application. Now, when I say rebuilt, I've modified this because the initial Angular application is very bare bones. You get almost nothing. So remember that first experience, you get at least some template code to click a button and see how things bind together and call a web service. With this approach, you get nothing. You're starting from scratch. Now, some people like that, that's fine. It gives you the opportunity to make choices and build what you need to build and not have to take anything out that's been added previously for you. So there's pros and cons to each approach. If we run this application, the experience of running it's going to be slightly different. So we don't have that all-in-one approach. When we run the application from Visual Studio, we're running a web API application. So notice we get just data dumped to the screen. So this is just JSON data. Now, to run the Angular portion, the client side of the application, we need to call on the command line. Now, I'm not going to step out of the command line. I like to be in Visual Studio. It's a preference of mine. You could use this in tandem with the command line if that's how you choose to operate it. Instead, I've installed a plugin for Visual Studio called NPM Task Runner. Now, in the latest versions of Visual Studio, we have a Task Runner Explorer. And Task Runner Explorer basically takes anything that is in this project.json file in a node application or package.json file. Any of these scripts that you see here in the package.json file, you'll notice are in the Task Runner Explorer window. So to start my web client experience, I can just double-click right here. So normally I'd go out to the command line, and you can see it actually running it in here. ng serve, and then I'll explain this proxy config here in just a second. So it's something I've had to modify to make it work with the web API back in. So let's go into the browser, and it's on local host 4,200. Now, let me hit this 5,000 here real quick again. So when we spun up our ASP.NET web API, we had api backslash. Let's see here. Let me actually restart this.  Then we can come into it from this way. So when we started up our web API project, we're hitting that raw endpoint. There it is. Local host 5,000. And then our api endpoint. It's important to note that because our client app is running on a different port. So when we spun up the client app in the console here, it says go to the browser on local host 4,200. So if I go to local host 4,200, I've got hello world, and I can click on fetch data. Notice not beautiful like the last app. Again, I had to start from scratch, so I just did the bare minimum to get this going. Now, like I said, local host 4,200, the code is going to be looking for an api on local host 4,200. Our api is actually on 5,000. So what we have to do in this situation is we have to create a file called proxy config. So this is port forwarding for Angular. So it's telling the Angular application, our api is actually on a different port. So when you see this slash api path come through, we're going to forward that request over to local host 5,000. That ties the two together for our development experience. So it's a little more ceremony here to get started. But there's teams that work separately building the api infrastructure, and then you have your front-end developers that are building Angular. They might use Visual Studio Code, they might use Vim, some other thing, but this lets you have that scenario where you can work with both. So just different approaches for different teams with different skill sets so far. The next thing I want to show is an application that's actually sharing some code with a native application. So we're still using Angular, but we're building a native application. There's no web views, there's no magic. We're taking an Angular application with TypeScript, and it's compiling down to JavaScript. That's being translated to native api calls on the devices. We're using an open source framework called native script for that. So let's take a look at how that operates. Again, I'm going to use all Visual Studio tools. Native script? Native script is by progress, the company that I work for. So again, we're in Visual Studio, and to get this project up and running, I would do a file new project, and then click on the Angular template that we originally looked at. So that gives us our all-in-one Angular application with our counter and our fetch data component. I've modified it slightly. You'll also notice another solution in here called native application. Now they're all web technologies that are being used to create these native Android and iOS applications. Since they're all web-based pieces of code, we can come in and do file add existing website, even though it's a native application. So the native application is done in what? It's Angular, TypeScript, CSS, and XML. Okay, that's the native application. Yes. Okay. So they're all web-based pieces of technology. Okay. So we can do file add existing website, and it works just fine in Visual Studio. Got it. Okay. So in this scenario, I've got, again, this application, I'll run it, and we have our counter component and our fetch data component. And all of that code is very similar to what we saw initially, except for one thing. The ability to run Angular on a native application means I can share some code between the two applications. They're both using Angular. They're both using TypeScript. So I can come in to my application and open up this client app. And I still have my same folders as before. I have components, fetch data, and counter. If I open up my counter, there's actually not a lot of code in here. So if I look at this, I have exports class counter component extends counter component base. So what I'm doing here is I'm using inheritance. So I'm inheriting from counter component base, and that's coming from my shared library counter component base. So in this project, I have a counter component base class. And that has my ability to increment this counter variable. And if I look in my native application under app shared libraries, you'll notice I have the counter component base in there as well. And it's the exact same code as the Angular web application. Now, for this simple demo, I'm just using a copy script. So it's an x copy. It just goes out to my web application, copies the shared library over to my native application. So I can use it there. In a more advanced scenario, I could use NPM packages or advanced CI CD pipelines or whatever to share code that way. But just to keep things simple, I just have a script that I run. And again, I'm using the NPM task runner for that. So if you look down here, I have this shared Libs script. If I double click on that, it just pulls that new code from my web application to my native app. So this application should be running. You can see that I'm pulling it up on this IP address here. The reason I'm pulling it up on an IP address and not local host. So the native part of the application needs to talk to the back end. If I'm on an emulator or another device, it doesn't know what local host is. So I need to have an IP address and some firewall ports need to be open. Now I can go into my counter component. You can see I can count like I could before. And then also fetch data works the same way. However, the fetch data code has been abstracted a little bit. So if I look at my fetch data component, instead of just going directly out to the web and hitting that endpoint, I'm using a service. And I can share that service between both the native and the web application. So in my shared code, if I go into shared, you'll see I have a weather forecast interface that's shared between both apps and I have my weather service that's shared between both apps. So this is the same code both apps on the right at once. So now another handy Visual Studio tool is I can come in to tools and I can add this Visual Studio emulator for Android. This is something that you have to add on. It's a free component to Visual Studio and it works very well with this. So I have my devices here and I've already spun up an emulator. The next thing I want to do is run my new native app that I built. So again, use my NPM task runner and I'm going to click on Live Sync. Live Sync is going to call TNS run Android. That's the command line operator to kick off the build process for my native application and it's going to load it on to the emulator. And then it's going to create what's called a Live Sync connection with the device. You remember that experience I had on the web where I can update the increment counter and decrement instead? I can do the same thing with a native application. I can update that code. It'll recompile from a native script and it will send that new compiled code up to the device and swap that out for me. So I don't have to recompile manually and go through that process. And there's my native application and I have my counter component and I have my fetch data component. Now the parts that I can't share between the two pieces, native script runs XML, not HTML. So the actual view code, the view markup can't be shared. There's some similarities. We're using angular directives. So if you're writing angular, some of the things like creating templates and looping over objects is the same in the view code. But it is XML markup. It is nothing like HTML. Right. And then if you need some code that is custom to iOS and Android, that's possible as well. So if I wanted to have a view for iOS, I could name that view whatever the view is.ios.xml and it would compile only for iOS. So I can target specifically if I want to. Otherwise it's shared between the two operating systems. And those are native views as well. So when we write an XML component, let's pull one up. The extension I'm using is HTML because it's more friendly with Visual Studio and Visual Studio Code. Otherwise you get a lot of red squiggly underlines if you just try XML. It looks for namespaces and things and it gets kind of crazy. But you'll see I have a label. It's not like an HTML label, but it's a label. When I write label in this XML format, it maps to the native label control that's on iOS and the native label control on Android. So it's pulling up native view code on those devices. So there's no web view being run in the browser module or anything like that. It's not Apache Cordova. This is actual native development. Got it. So that's another scenario where you can reuse web skills. If you have a strong web team, they have limited native experience. This is a way to get started building a native application using Angular in Visual Studio with a C-Sharp web API backend. Very nice. Cool. Cool stuff. Thank you. All right. It's a lot to take in, but it's a new way. So it's a couple pointers as to where people can go to learn more about this. We'll put some stuff in the show notes, but if they're new to Angular or new to native, new to matching, to mixing and matching native with web. So if you want to learn more about native script, go to nativescript.org. If you want to learn more about the template that I showed you and how to integrate that with our UI controls, go to blogs at teller.com. Search for cooking with Angular. That's an easy one to remember. Just put that in Google or Bing and do cooking for Angular. You should find an article that I wrote all about the template and how to add components to it. It should get you familiar with the processes that are involved there. All right. Cool. Thanks for coming on. Absolutely. Thanks for having me. All right. Hope you enjoyed that. And we will see you next time on Visual Studio Toolbox.