Hey curlfriends, I'm Bianca Renee and you're watching Bianca Renee Today. And today I've got a new challenge for you that's gonna make everybody around you happy. I'm talking your spouse, your friends, your roommates.  Now I feel like 30 minutes was the safer option but since we're trying to challenge ourself, I'm gonna try to do it in 20. But that is putting a lot of pressure on my diffuser because I'm trying to go from wet to dry in 20 minutes like out the door in 20 minutes. We are not going to be late all week. Now today's video is sponsored by Sally Beauty AM part of the Sally crew. So I'm gonna be trying a new product line. Well, not, they're not new actually at all but they're new to me which is the texture ID. I've definitely heard of texture ID. I haven't, I think I've used them maybe once a long, long time ago. But they have a texture ID for curls now and they've really like brought in their hair type. So I really love that it says for curly hair types and it literally says types one, two, three and four. This is already telling me that this product is good for type three, which is what I have. So if you're ever confused about which product is gonna be best for your curly hair, I love that texture ID has it right on the front of the label for you. So if your hair is more coily than mine, you can get the type four, coily product. So this is the regular line. The turquoise and orange, it says texture ID. Then the yellow bottle say texture ID coils. And then the purple is texture ID for curls. So even in their original product, it still has the little labels that shows you that this is good for type three and four hair. This one says it's good for type four, this says for type three. So look for the colors but also just read the little hair type chart on all the packaging. So I think I've tried the styling cream a long time ago, I have to try this again. But since we're only gonna be using one styling product today, I think the safer option is to be using a gel. This is actually a styling custard. My hair loves custard. It's kind of giving me like shame moisture, curling souffle vibes, even though something happened with that formula, it is not the same anymore. But this one is what I like to see. So let me open it for you. Oh, that smells heavenly. What is that lavender or is it just purple? Oh, even better. It has Moodle Moodle Butter, which has become my favorite ingredient as of last year. Every product that I tried that had Moodle Moodle Butter in it made my hair so creamy and soft. So that makes me very excited. It has rose water, maybe that's what it is.  And it has vitamin E. It's supposed to softly define and control your curls. Softly define makes me a little nervous because you know I like stronghold, but we're gonna branch out. We're gonna get out of our comfort zone, okay? Texture ID Curl Styling Custer provides style versatility with maximum curl definition. This crunch-free, crunch-free non-caking formula can be used for rod sets, twist outs, braid outs, or wash and go styles. We're gonna use it as a wash and go today. So here's the consistency. It's a little jiggly, jiggly jello. Now, if you wanna try this one product challenge with me, I would recommend either using a cream styler that you know has a good enough hold to last you throughout the day or use a non-drying gel. Texture ID also has a good leave-in conditioner. This has aloe vera extract and coconut oil. Good for types two, three, and four. Very lightweight. But I'm gonna skip it today and see how it does. I have used both of these together and I had great results, but today I wanna see how well this does all on its own. All right, here we go. Maybe I should rewet my hair because I've been talking and it's been drying, but this is day one here, fresh out of the shower. Oh my goodness, why did I put on these nails right now? These claws are only gonna hold me back. Okay, here we go. I'm ready. I'm pumped. We've got zero on the clock. Here we go. On my mark, set. Okay, Jalen, don't you walk in and mess this up again. Go. Okay, 20 minutes on the clock. Gonna spray the parts that dried. Okay, I want to apply this on damp hair, but not soaking wet. Gotta get the ends, always dries out. So, smoothing it down. Smooth it down, smooth it down. Okay, now let's get the curling custard. No, styling custard. Oh, it smells so good. Look at the consistency real quick. Look at this, ooh, slimy. Kinda reminds me of like flax seed gel. I like this consistency. My hair like this consistency. Everyone's happy. Smoothing it together. Oh, it's slippery. Has a lot of slip. I love when gels have slip because they don't even need to. Smoothing it down. Got one minute on the clock. Not bad. Styling my hair in one minute. Maybe two for both sides. Is anyone impressed? Half the gel is in my long nails. I did not think that part through. We are two minutes on the clock. And a little extra to the top. This is how I style my hair. I'm not gonna cut any of this. Just gonna show you exactly what I do when styling. Okay, as long as your hair can feel completely saturated and you got a good product, you should be good to go with one. I just started using leave-ins like last year. But this does not feel drying at all. And because it has mutter and mutter butter in it, I feel like it's gonna give me that moisture that I need without using a leave-in. But since it has no hold, I'm gonna put more than I probably should just because I need some hold. Oh, look at that. We are under, under three minutes styled. Now the drying part. My hair usually takes seven to 10 business days to dry. So I'm gonna need the diffuser for this one. This is my eye-on blow dryer and diffuser. Let's see if I can get away with just doing a medium heat setting. I don't wanna go too crazy. Okay, starting the clock again, I'll speed this up. My roots, because the roots take the longest parts of dry. Your ends are easier to dry. We are just at the nine minute mark. I think I'm gonna bump it up to high heat because my hair is still very wet. Let's go. Stop of the time. We're at 15 minutes. Okay, I mean, it looks really good. It's super shiny. It's not completely dry yet. I have to decide if I wanna keep diffusing or use my last five minutes to fluff. It's not exactly safe enough to fluff at this time because it's still a little damp. I think I'm gonna give it to the diffuser. Going back in, go. I'm at 1750. I've got about three minutes to complete the style. Let's see how dry I am. Ooh, the pearls are juicy. It is dry, but because it's so moisturized, probably that little, little butter, it doesn't feel like dry, dry. It's just not wet. And I'm also not used to not having a crunch. I feel like I wanna keep going to get the crunch, but the crunch isn't coming. And then I'm gonna use my last three minutes, diffusing and fluffing. Once I get to this point where it's basically dry, like 98% dry, that's when it's definitely safe to start scrunching. If you start scrunching when it's wet, you're gonna create frizz. So I usually let my hair just air dry until a cast is formed, and then I diffuse. So I don't have to diffuse as long, but since we're going from soaking wet to dry, it's gonna take a little bit more diffusing. So let's just keep going until exactly 20 minutes. And I'll show you how I zhush and scrunch around the door. I got one minute to spare. Gonna shake, fluff, let's have a camera, let's do this. And time. 19 minutes, 38 seconds. I've got a little less than 30 seconds to spare. She did it. One product, wet to dry, diffused, and under 20 minutes. Not bad. Let's take a good look at the curls. Look how they look great. Super shiny, very defined, minimal frizz, if any. My hair loves custards and the gooey types of jiggly jails. I'm impressed. So this week I want you to try to get ready using only one styling product, see what happens. And then I want you also to just be on time for work, for your hangouts, whatever it may be, waking up early, leaving the house early, just doing everything early and you will get there on time. So this is going to be, what should we call this? The one product challenge or the punctual challenge or the keep it cute and simple challenge, speed it up challenge, speed it up challenge. Let's call it speed it up challenge. Overall thoughts on the Texture ID styling custard? I'm a fan. I will definitely continue to use this. The best part is it's only $9.99, this was another affordable product exclusively available at Sally Beauty. This is a 12 ounce bottle. A little goes a long way. I used a lot, which I think made my hair take longer to dry because I did put so much because it feels so moisturized. It's super defined with zero crunch.  This is me accepting the no crunch challenge basically. And like look, like just look. It's so shiny. Moodle-moodle butter makes your hair so shiny and so soft. Like honestly, I think if I put a leave in, it'd be too soft. This is a great standalone product. So if you want to join me on this challenge and you don't know what one product to use, you might want to go to Sally Beauty and get the styling custard to try on your type three curls. Now even if you have type four hair, my curl friend, happy curl, happy girl, aka Reina, she has a mix of curl patterns, but her hair is way tighter than my curls and she also loves this custard and she's not even a custard girl. So I've seen it work on multiple hair types if you guys do want to try it out. But Texture ID has so many products from edge control to leave in conditioners. This is the Soothing Oil for Dry Hair and Scalp Relief. They got shampoos, conditioners, hair masks, they got everything. So definitely check out this line at Sally Beauty. I will be continuing to try more of these products and I'll let you guys know which ones are my faves. If you enjoyed this affordable and fast curly hair routine, make sure to give me a thumbs up and subscribe. Follow me on Instagram and TikTok and I'll see you guys next time. Thanks for watching. Bianca Renee, today.


Sometimes we throw around terminology that can be confusing at first one of the questions I got today was what does long volatility mean? What's up trade hackers welcome to today's update today's Monday April 13th. Let's jump onto the platform and answer this question. So when we say long volatility basically what we're saying and I've got a chart up of the VIX basically what we're saying is if we're going to get long volatility we would want volatility to go up so if we're looking at a chart of VIX there are strategies that you could do to do so you know this is an example of just a long call not necessarily a strategy we would do but if you look at the option Greek called Vega that is the change of volatility and so if Vega is positive that means you want volatility to go up if Vega is negative that means you want volatility to contract a lot of the strategies that we use are short Vega meaning we want implied volatility to contract we like to sell premium or sell options when they're priced high when implied volatility is high and profit from them when they contract but there are also strategies such as like I just showed you the long call in VIX but another one that we actually trade quite a bit is a double calendar and I'm showing you one in SPY right now so if I set my price slice right on the current price you can see in this case we've got a positive Vega so not only do we get the time decay of theta but we also get a positive Vega meaning we actually benefit when implied volatility expands so that's all we mean by long volatility another word for volatility contracting would be short volatility so anytime in the in the trading world when we say short that means we want it to go down when we say long that means we wanted to go up another way of saying that is buy equals long short equals sell so hopefully that helps let's check out the markets overall and see what's going on today we've got about six minutes left in the cash market S&Ps down 28 they were down as much as 60-ish I believe so their losses have been cut in half retraced a little bit dows down 320 NASDAQ is actually up over a percent and the Russell's down over two and a half percent so quite a discrepancy especially between the NASDAQ and the Russell with the NASDAQ being up a full percentage and the Russell being down over two and a half percent kind of crazy there oil down just barely now this is a little bit misleading from a standpoint of if you look at the continuous contract which is the K 20 because he oils actually down about a third of a percent whereas if you look at CLM 20 for example for slash CLM 20 which is the June contract so those are the options we would be trading oils up actually about two and a half percent so little discrepancy between the expirations in oil as well now over the weekend on Sunday I believe Easter Sunday what a great Easter Sunday to be dealing with the oil agreement but apparently the whole OPEC oil situation has at least initially reached an agreement and so a lot of the country oil producing countries are going to be cutting back on production which is going to cut down on the supply which theoretically should increase the price of oil now the fact that oil is actually down a little bit today on the continuous contract but it's up a little bit about two and a half percent it was up quite a bit more but it has come off those highs so interesting movement in oil gold fairly flat bonds down about a half percent so we're continuing to see a little bit of downside in bonds which for our positions has been good and so that's what we got going on in the markets now I've been talking about specifically Ian in the ES how you know this this rally that we've seen about 25% rally off the bottoms has been a pretty solid rally I've been talking about you know I don't think we really had much above 2800 we did bounce off of that today now I'm not a big support and resistance or technical analysis type person I don't think that gives you any type of edge in trading but that was just kind of a theoretical mental line in the sand if you will and we are seeing you know bounce off that and I still think that we're gonna see some lower lows below that 21 74 level and so I'm getting questions like okay we've got trillions of dollars being pumped into this system we've got all these things going on the feds cut rate to zero you hear the kind of the cliche don't fight the Fed kind of thing in a I don't believe that at all but B if you just look at well let me let me bring it up if you just look at unemployment okay so this is a chart of jobless claims going back to the 70s and the gray shaded bars represent little spikes in the jobless claims so you can see there's a big spike there big spike there big spike in the early 80s big spike in the 90s of course after the dot-com bubble burst that we had a spike there and then the September 11th happened right after that in 2001 and then 2008 right the biggest crisis we've seen really in the markets in my lifetime and you know I'm in my early 40s so you know that was a huge spike in unemployment well look what is going on right now and this is this is the spike that we're seeing right now I mean we're talking almost seven million jobless claims already and this thing hasn't even started so you know I mean just that alone makes me pause on saying is this rally for real are we really gonna rip to new highs I just I don't see it and that I mean think about the unemployment rate and you know are we really gonna everyone just gonna go back to work as normal in a month or two if that happens if people are starting to go back to work and maybe everybody has to wear masks or whatever that looks like but think about that I mean right now the social distancing theoretically is working with the numbers starting to kind of level off as far as the deaths and cases and that kind of thing but as soon as people start getting back together I mean what says that this this virus isn't going to spiral out of control again and so that's just my thoughts I mean and and and going back to the jobless claims when you see a situation like that where you know in the biggest crisis we've seen in 2008 where is a little blip like this you know not even not even a million and now we're at almost 7 million I don't know ladies and gentlemen I just don't see that hold water as far as you know continuing this rally in the market so we will see what happens so what did we do today you know we've been talking about we've been kind of layering in some short positions layering in some positions that are gonna benefit from the ensuing potential sell-off and today and there's the closing bell today we all we did was we rolled down a couple of our short position so continuing to extend duration and keep that short delta in our portfolio and stay mechanical I mean that's what it is all about and so that's what we are doing so no new trades just kind of letting our positions work for us hope that was helpful everybody have a great evening talk to you tomorrow


Hello everyone! Thanks for taking the time to attend this session. This is a research effort of TecMEX. The presentation that we are going to be looking today is Mexico Open Source Contribution. My name is Alex Gonzalez and I just said TecMEX is the nonprofit organization that helps Mexican engineers to raise. A brief introduction of myself is that I'm one of those who has studied 100% in Mexico, got my college degree there and my master's in Sanidad, which is a research center and have been lucky to work for American companies such as EMC, Gesang, the other umbrella staff and a sourcing company. Now I had contributed in open source encryption systems and had reported and coordinated the resolution of more than 200 security issues on certified libraries for the entire Hadoop ecosystem through different components such as high, sentry, ranger, atlas and more. Also those and so for those sense of security issues being coordinated and resolved for plundera's proprietary code. Now let's start with the challenge that we have in Mexico. The challenge is to promote open source contributions by Mexican developers. You will see in a second in the next slide that software guru, the most important software digital magazine in Mexico had driven a survey where the question was if you are in Latin America and you use but do not contribute to open source projects, what's the reason? And the answers from the developers is the main reason is that they don't feel they have the skills. They don't know as a second reason they don't know how to contribute. There is no information in Spanish and they don't or they don't work for free. That's the categories that we were doing that. So this is the challenge and this is the problem that we are stating and we are taking steps and I want to show you at the end of the presentation what are steps taken. Now what can you expect from this presentation? I'm going to show you who from Mexico is working on open source, what projects are Mexicans contributing to and how you can help. Some statistics, some general statistics is that over the past year 10 million new developers have joined the github community and they are contributing to 44 million repositories and 80% of them, 80% of the contributors are not or are contributing outside of the United States. So this last statistic, I like it because it shows that open source projects belong to everybody and nobody at the same time. Maybe we should name it as quantum source if you get it. Now in this slide I'm showing you what are the most popular Mexico open source projects. Today by the end of the day you will have on Twitter if you follow Tecnex Austin, these slides so these links are going to be available to you. And the ones that I picked are the ones that I want to talk about right now. The first one is ARA. In short this is a framework that helps to create a front end by decomposing it through micro apps or micro front end services such as network overload, issues resolution, banner display, page refresh, etc. The second one that I picked to talk about is Drupal console and this is a CLI suite of tools to generate boilerplate code. Boilerplate are sections of code that have to be included in many places with little or no alteration. As you can see this is a very popular project with multiple or millions of downloads, multiple releases and multiple contributors. The top three contributors that this project has are Jesus, Eduardo and Omar. You can see the one at the top which is Jesus. He has multiple stars. He's a well-recognized contributor as well as has several followers. Now in total it's the next project that I want to talk about. The name is Fanny because in total if you kind of translate it to Spanish means in everything and that's pretty much what in total does. So this is a framework to secure the integrity of software supplying chains. It does so by verifying that each of the tasks in the chains are carried out as planned and it uses and has a project lead for each of the chains and also uses fingerprints for each of the steps. So it's kind of like workflow validation. The next one that I want to talk about is the update framework which is another project where Mexican developers contribute to. This is a framework that helps developers to maintain the security of software update systems providing protection even against attackers that compromise the repository or signing keys. This is hosted by Linux Foundation and is used by important companies such as Cloudflare, Docker, DigitalOcean, IBM, Microsoft, VMware, etc. There is also Apache Wacamole. The name is it's a funny name. This is a client-less remote desktop gateway. Just a brief mention. The government is also contributing to open source. I'm going to mention two organizations, government organizations. The first one is the Genomic Medicine National Institute. This one has 40 repositories and some of the repositories or projects are related to data science projects with R, genomic algorithms implementation, and also statistic calculation. The next one is Open Mexico or Mexico abierto, which has 207 repositories on GitHub. The projects are related to metadata validations. Engines for MongoDB also has data access points for government data sets. As well, it has Ansible Playbooks to deploy CEPH or CEPH, which is a distributed file system. Now, there is a site called commits.top, which is gathering information about the main committers around the world. In the top 10, based on the stars and the number of followers, you can find Carlos Toschli. Carlos Toschli is listed with 6,000 commits, around 6,000 commits in the last year. He created a repository where he was actually automating the commits for reasons in a repository, in a public repository. That's why he has a lot, but it's worth to mention him since he has multiple followers as well as has been active in more than 1,000 repositories. In the same website, which is commits.top, you can find that it's listed per country, which are the top contributors in two different views. One is the independent developers that are on GitHub. You can find the zero dragon with 10,000. You will see in a second why 10,000. This guy did something really interesting. Carlos, of course, is there. Carlos Toschli that I just mentioned. In the top 20, I was very happy to see that we have a woman, which is Elizabeth Dijalejos. Elizabeth is a full-stack software engineer. She works with React, JavaScript, Ruby, Redux, and Ruby and Redux. As I said, in a different view, in the same commits.top, you can find Victor Alfredo, who I'm going to talk about in a second, zero dragon. On the right side of this slide, you can see the organizations that they are part of or members of, such as Weisslein, Michelara, Golang MX. At the very bottom, you can see OpenMexico, MX Aviator. Now, this is what I was talking about in regards to zero dragon. This guy on the top right of your screen, you can see that there's a repo called GitDrawing. He automated his commits in order to draw the Martian, the mushroom, the heart, and his signature, which is Ziggy. It wasn't performed for me. Now, here it is, Victor. Victor Torres. As you can see, and based on his description, profile description, or bios, you can see that he says that whatever people say I am, that's what I am not. I'm going to let the numbers speak by themselves. You can see that he has several stars and followers. While I was doing this research, I noticed that on his repositories, his areas of interest or the ones that he has contributed are particle detector algorithms, SpaceX REST API is also in his repositories. He has ported several repos of mathematical algorithms that I'm not even going to mention because those are way beyond my understanding. The previous that I mentioned are independent contributors, but there is another model which are people that get hired by companies to contribute or solve the customer issues. This is the case of Sergio Peña. Sergio Peña is a member of Technics as well, and he works for Confluent. He contributes to the project KSQL or Kafka SQL for streaming. In the past, he has worked at Cloudera, and he became a PMC of Sentry and PMC of Hype. Another contribution that Sergio and I worked together with was Navigator Encrypt, which is a Linux kernel encryption system that sits on top of FikripFS and DMCrypt, which is a really, really interesting project. Worth to mention as well that we have another member in Technics that participates as a contributor of Firefox. He has been working several years with his collaboration, and his name is Alex Mallorca. Now, if in this heat map, you can see the people that has marked themselves as available for hire on GitHub. As you can see, there are several people or several contributors of Mexico based on this heat map. If you are lucky, you can maybe hire any of the ones that I just mentioned, including me. Now, I want to talk about the active communities that are in Mexico. I'm not going to mention all of them in this slide, as again, if you want to check this out and follow the links, this is going to be available on Twitter following Technics Austin. I picked some of these, which are the ones that I want to talk about. The first one is GNU Linux Mexico. They have several activities and webinars on Meetups, such as the SE Linux on the on yellow listed over here that happened last May. It's a very active community. Also, there is LAPSOL, which is an open source lab. This one has 10 branches around Mexico in different cities. There is a 216 open source project created. 44 universities have contributed, and there are more than 500 students listed as contributors. The next one is OSOM. OSOM means Bear in Spanish, and this is open source Mexico. The culture that they have is open source first. They have several Meetups from Meetup.com that I'm going to show in a second. The next community that I'm mentioning here is the one from Technology Code and Monterey, which is one of the most, if not the most, techy university with developed plans. They have a very strong community for Linux. Now, I'm listing for Citi the different Meetups that we can find on Meetup.com and are related to open source, such as Open Infrastructure is in Mexico City, CDMX is Mexico City. There is also API Addicts, and there is also many Uber engineering events, which we know that has some open source projects over there. Also, in Guadalajara, which is the city of the Mariachi and the Tequila, we have OSOM, the open source Mexico. There is a Meetup, in particular, the one in blue, that is the open source Meetup for Guadalajara. They also have interest in Jenkins. They have interest in Linux and Solar. On the top right, you can see that Solar, Mahout, as well, are in there. In Monterey, there is also an open source Meetup. Specific for that, they have interest in Jenkins. Something that I like a lot from Monterey community, or one of the Meetups, and actually it's a great community, a big community, is the Woman Who Code. This is probably the chapter that is more active in Mexico of Woman Who Code. Now, the IBM and Technology Code in Monterey also offer support services to Latin America community in regards to multiple open source projects. The ones that are listed on your screen are the ones that they are offering support services for. Now, this is the part where I'm going to show you how you can help. Basically, in TechMEX, we are making the efforts to align the need of contributing into open source and trying to educate and help into the Mexican community of developers. You can follow us on Twitter. That's one way. Second way is that you can participate in the different summits that we have there, such as the Latin America Festival for open source installation, open source software installation. This is Faisal. One, another important summit that we have is cost.org, which is Contributor Summit. In particular, Contributor Summit has some specific goals this year. This is going to happen in October 2020. They are planning to select 20 open source projects. For each of them, they are planning to develop documentation guidelines in Spanish for contributing to open source projects. Also, they are planning to host online workshops where committers guide participants. This is also going to be a virtual event. The plan is to have new participants into making their first pull request and also making their first commits. It's also a desire to mentor and motivate participants to continue contributing in open source projects. It's also not that I'm mentioning the goals, the ultimate goals for this summit that I've been in recently. I didn't add that in the slides because it was after I shared with Link's Foundation the slides. I've been talking with a university who is very interested in making their research efforts as open source code. They are planning and making a plan to legacy or all projects make them or submitting them or uploading them into GitHub as well. As I mentioned at the beginning, this is a research effort done by TecMEX. I would like to show appreciation to Mara, Ismael, Sara and Natalia. If you have any question, I will be open to see on the Q&A box and I appreciate your attention to this. If you don't have any question for now that is not showing in my box and my window, you can find me on Slack. I will be here the four days or you can find me on my Twitter which is kozlex.com. Thank you so much.


Hello Sam, it's such a pleasure for me to meet you at your camp Brighton and to know something about your Bretman's side story, how have you gotten involved in your personal work at all? Hi there, well, yeah it was nice to meet you there too as well, I really enjoyed the work camp. Yeah, so I've been working with WordPress for I would say around 12 years, maybe a bit longer. And I've been the head of technology here at SNAP Media for around 10 years since we were a small startup. Now we have around 30 or 40 employees working for us. So it's been quite a journey and we're a sports company, so sports media. A lot of that centers around blogging, hence the sort of heavy involvement with WordPress. So we're basically a digital media company, we reach around 30 million sports fans every month. And we pretty much position ourselves that we connect sports fans with brands. So we have a large audience and we work with brands to get them in front of that sports audience. So do you do that with all of the WordPress stuff to say? Well for a long time it had been just with WordPress, so I've had experience of multi-site for previous projects where multi-site was still in its very early days. But more recently we've done a couple of interesting projects with multi-site since the beginning of this year. So I'm going to tell you about one of those projects. Do you have some specific projects on your mind that you would like to share about it? What was the project like? Objectives? Sure. So the main project I wanted to talk about today was the Sports Predict a Game that we built based on WordPress multi-site. So this is a game for football fans where they can predict the scores and the outcomes of every football match and they will score points when they get the result correct and they score points when they get the correct outcome of the game so whether it was a win or a draw or that type of thing. And yeah I mean it's been quite a big project but it relates quite a lot to your presentation at WordCamp because it's really that software as a service type of setup where it's a white label product and then using multi-site we can roll out a site per client and brand it individually for them. So when did you sell your product? Well we started this in the WordCamp in the summer and now we're continuing for the Premier League season this year so for the World Cup one the first client to come on board was a big pan-European network of TV channels. They have seven channels in six different countries and five different languages so they're quite a big and challenging client for the first use of the white label product and then we also have a couple of clients here in the UK as well using the same technology. What kind of software do they get? What they get is essentially the game itself so the prediction game which lists all the football matches and allows people to make their user signs in, registers and then they can predict on the games. The user can also create mini-leagues where they invite friends, family, colleagues and things to join in the game and play with them. Exactly like that type of thing where they can play amongst themselves so they're also competing against every other user who's playing the game but they can also compete individually against each other in a smaller league as well and then the client also has options around different game mechanics so they can choose, first of all, which football competition they want to make with the game centre around so it would be the domestic league of that country or the World Cup or Champions League, that type of thing and then they can also choose a structure for how they want to award prizes so some clients have done things where they choose streaks of eight games and if a user was to predict correctly on all eight of those games they win the prize and there's also things like prizes for monthly and weekly leagues as well so it depends on the client how they want partly their budget for prizes whether they've got hundreds of thousands of Euros or just a smaller amount of money and things like that the type of company they are and then the game mechanic that they decide on depends on how they want to promote the game What were the specific reasons to choose what prize not to side? Well, I guess the sort of requirements for the minimal viable product were beyond the game mechanics itself where things like the user needs to be able to log in and register we need to be able to integrate a single sign on so for example, if someone has an account with one of these TV channels they can sign in through their existing account we use something like open north to authenticate their user on our side it needed to be able to be branded to their client it also needed to be translated into different languages which WordPress does very well being able to set locality, time zone, that type of thing and also we needed the ability to add extra pages that weren't part of the game itself things like an FAQ, game rules, contact arts, that type of thing so WordPress has all of those functionalities built in so WordPress for us was an obvious choice it's also a technology we're very comfortable using and have been using for a long time so we're very familiar and happy to use it Multisite specifically was really because it's a white label product that we wanted to be able to roll out for multiple clients every time a new client joins we can spin up a new site for them, we can brand it for them and we can also translate it into their language set it up so that all the times and everything relate to their time zone so Multisite seemed like a really good choice for that so why did I get that right when a new client comes to you and you prepare a new sub-domain for him, auto-level domain Exactly, yes I made branding according to his guidelines and gave him instance for his players, for users Exactly, yes, so for example the company would approach us for the game and they have some sort of campaign and wants to run around it whether they're monetizing it through advertising or sponsorship or that type of thing so yeah, then we would spin up a new site within our Multisite environment all the game mechanics and everything is instantly available we can set some options for that client so we can set options like the competition that they want to, the football competition they want to follow stuff around the prizes and game mechanics and then we can also set up things like their branding so branded header and footer for the site advertising banners for the site even down to things like when we send automated emails to each user telling them how many points they've scored that week and things we can include client branding in those email templates and things as well It sounds very interesting but have you met any obstacles while developing such kind of project with Multisite? Well yeah, obviously with a big project like that there's always going to be some obstacles Luckily for us not many of them really related to Multisite specifically as you know, as a developer you always face problems trying to code something new and something big like that but there was a couple of things that related to Multisite specifically so a couple of examples is Cron so obviously WordPress has its own native Cron for us we don't tend to use that we would normally replace that with the server side Cron so that we have ultimate control over it and with Multisite we found that we had to trigger a Cron per site so that was a small obstacle but we easily found a solution for it we used the WPCLi and wrote a few bash scripts and things like that so that obstacle was like... I'd say it was small in terms of the overall development that was really a small obstacle and then there's another one as well so the way that Multisite handles users is that they're all still grouped together in one main user table so different clients that have their own clients that are not related to those sites exactly so you have some clients where they want all of the users even like the TV network one for example they have seven different brands and seven separate instances of Multisite but they want all of their users to be able to compete together amongst each other so people from the German TV channel compete with the Austrian and the Czech and Belgian and so on with some clients they obviously don't want their users to be in that pool with another client's users so we needed a way of not only separating the users per site but also grouping them together in some cases as well but we did find some custom systems to identify which user belongs which site how do you do these custom fields for a number of users? on registration so depending on which site they register through we then create an user meta which knows which site they joined through which site they belong to but then we also have some way of saying these six sites are part of a group so we can actually group them together as well exactly that type of thing that sounds cool they seem like sort of problems at the time especially because this was only really our second major project using Multisite so some of these things we weren't used to coming from just a straight WordPress developer background but they were easy to find the answers to and actually we found working with Multisite just as easy as we did working with normal WordPress yeah that's good because me too and many developers find working with WordPress Multisite is easy to work with that's why it's so easy to make projects with that how do you feel for other companies that are not your clients right now is there a second choice to pick a software project like this for their businesses? I think so, I think if it's the right use case I would like to give too much advice to our competitors but I think for anyone even outside of sports as well some of the use cases that I've seen in your presentation at WordCamp and elsewhere you know you can see where it's very very appropriate so I think for something like this where it's a white label product that needs to be branded for various different clients and things like that that's a great use case for it also for things like networks of websites where you've got one publisher but they have let's say a hundred different websites within that publisher they all work from the same theme, they all work from the same plugins if you can make that all work from a single code base then you've only got one code base to maintain and that for me is the beauty of Multisite is that instead of maintaining ten different code bases for ten different websites you can maintain one and those websites all have very similar functionality and look and feel and things it makes a lot of sense So I just wanted to make it clear Did SNAP Media start it as a small startup made a software as a service with all the press, Multisite and grown up right now to 40 people? What are you here? No, no, we started really as a blogging platform so it started with one flagship website footballfarencast.com which originally was a news and podcasting platform for football and at the time when I joined the website was being outsourced and it was built on a Drupal platform when I joined they wanted a major overhaul of the website and they needed someone who was more full-time to come and work with them and things so at that point I convinced them to move everything over to WordPress so we were really working with single instances of WordPress at that point I built a few more sites and we started to sort of build out from being a single site into a network right now we have about I think 40 sites that we own and operate and then supply advertising and technology services to around another 350 websites who are mostly WordPress, I'd say around 80% of them use WordPress and then the others are a mixture of forums and other different types of software I see, that's an interesting example of building business with WordPress, Multisite definitely, yeah I mean it's our second time using it we've had a previous client which had one of these networks of websites they had around 100 websites for various different teams and they wanted to upgrade the technology and they were keen to move to the WordPress platform as well so we also suggested Multisite to these guys and helped them to build out their network and migrate everything into Multisite setup and what's been really good about that is getting a single code base to maintain so you make an improvement and you only have to deploy it once to one instance the rest is all the other sites benefit from that and also it gave them the ability to easily spin up a new site so how long does it take to spin up a new website for the new client in second meeting? well it depends a lot on the website, we do a lot of custom work as well some of our stuff is outside of WordPress it really depends but I think within these Multisite environments like the example I was just giving, it's very very quick you could do five a day, you know if you have everything ready, all the branding and assets and everything ready you could do it very very quickly for standard WordPress installs it's probably just a bit longer but you have to set up things like a virtual host and more configuration on the server side per site and then for custom jobs like we work with professional football association things like that, those type of jobs can take between weeks and months depending on the build and what if I do a new one? with Multisite, yeah so the example I was giving for that network as long as they had assets they could spin up a site within an hour or two really just setting the options, testing everything works how do clients do feel about using WordPress Multisite now? well our clients are incredibly happy in both the examples I gave for the network and also the main project that I was talking about, the predictor game so for the predictor game the client was very very happy with the way it all operated and ran we met all of their requirements I think during the World Cup we supported around 10,000 players of the game across the seven different TV channels since then we've launched for two new clients at the beginning of the Premier League season and also we're continuing to develop the products so the White Label product has already had major improvements in the last few weeks which were based on my learnings from the World Cup so some of the features that the World Cup client wanted we've now built in as proper options into the White Label offering and expanded on that and we'll continue to do so so it's an actually ongoing, evolving project what is it like to non-technical staff of the clients using this system that they get? well it was fine for them because they have a different sort of brand manager per site so we can give that person back end access to each site individually so their Dutch channel manager gets the back end for the Dutch site only so you are the super enemy? exactly, we can set them up as admins on each site so actually only we need to be super admins because we maintain the product and set up the site for each client but the client himself doesn't need to see the other sites or anything like that so we can obviously control their access and they found it easy as well they were able to do things like go in and update text add extra pages to the site and to the menus and things like that because we're using all the core features of WordPress we're using the standard posts and pages set up we're using the standard menu manager all of that so it's as easy as in regular WordPress install? exactly, I mean to them it just looks like a normal WordPress install and obviously with things like roles and responsibilities we can decide which things they get access to so we'd probably restrict access to things like themes and plugins but we would give them access to users, pages and so on that sounds amazing and this is such an interesting case of using WordPress as a website so thank you very much for your interesting story for this interview, for sharing your experience with us thank you thank you as well, thanks for interviewing me it was nice to meet you and your work got brightened and to see you again here yeah likewise, alright thanks very much


Okay, thanks for the introduction. So I'm Lorenzo. I'm from Napoli in the south of Italy Which means that pretty much the only thing that you really need to know about me is that this is a big no Okay Now that now that we have settled this for good once and for all Let's let's start with the presentation. So I don't know how many of you actually know about John was already This is going to be just a very quick recap about what it is Basically, it was conceived as a general purpose WebRTC server and I'll try to explain by what we mean by general purpose in this sense it's of course all open source there are demos and documentation available there and The idea was that we would write a core that will be responsible for all the webRTC stack So Stephen just explained what how webRTC works what it is basically these webRTC stack allows Janus to act as as a browser in the communication in that peer-to-peer communication that you saw before so These were vertices that was responsible for all eyes details all the protocols that that relates to webRTC And then we have different models to take care of the rest So we do have a Janus API so a way to communicate with Janus to control what it needs to do and how and this is Available different models can implement different protocol transports for this but more importantly We have all the media logic implemented as different plugins as well Which means that this way you can just write a new plug-in to have Janus behave in a different way So handle the peer connections that you created with the core in a different way So by default by the stock plugins allow you to have an SFU plug-in something that allows you to do some Basic video conferencing. Let's say an audio mixer ways to talk to the SIP world way to talk to RTSP cameras or whatever So all the logic belongs there So if there is a new need that you have that is not covered by the existing plugins You just need to write a new plug-in to handle media room Added to Janus and it will it will theoretically work The only caveat here is that Janus is written in C which means that you if you want to write a new plug-in You typically have to write it in C as well, which may or may not be an issue for you I mean for some it might be because you You need to know how to code in C and make sure you're not screwing up and causing issues of any sort and Just to give you an idea of how the plug-in API looks and this this is important Just because I'll get back to it in a few slides when we'll address the the purpose of this talk here Is that typically a plug-in has to implement a set of callbacks in order to talk to the core because of course if you Want to be plugged as a model to to Janus as a core application you have to respect some some APIs in order to communicate with it and typically it's just let's say some some ways to To register at the at the core to let's say this is my package name This is my version a couple of meters to initialize the plug-in and to destroy it and typically in it is called Whenever your plug-in is loaded which happens at startup So Janus starts starts to load the plug-ins You will get notified whenever your plug-in starts and destroy instead is called when the when Janus is shutting down so that you can keep Track of the life cycle of Janus itself that way some versioning information as we said but most importantly some ways to Handle users so to interact with sessions because typically the Janus core will notify you anytime that the user attaches to your plug-in We call this attach as a meeting so anytime that the user Joins your plug-in you are notified about this so that you can keep start keeping track of this user You can start receiving messages from the user You are notified anytime appear connections for this user on this specific connection came up or came down and of course most Important of them all you are notified anytime you have incoming data from that user So if the browser is sending RTP packets via the web RTC peer connection These RTP packets get to you in the plug-in so that you can then decide what you want to do with it Which may be I'm going to send this to all of the other participants in a conference or I'm going to decode it added to a mix I'm going to send it to a CPUs or whatever same thing for RTC RTP statistics and data channel messages as well because you may want to handle Just that a channel so that a channel sink conjunction with media and in general This allows you to track all the life cycle of a specific peer connection for a user, which is quite useful and Finally of course the core itself also exposes an API by which plugins can then start sending info back to the user Stuff like ways to send messages to a user via the Janus API And this is important because each plug-in has its own API You can consider each plug-in in Janus as a separate application living within Janus itself Meaning that each plug-in can actually implement their own messaging that then gets transported over the Janus API And you can do that via I'll show a couple of sequence diagrams to that show how these works and at the same time you can also Tell Janus when you have an RTP packet to send back to the user when you have statistics to send a data channel message to send And so these two set of API's allow a plug-in to both receive and send media at any time or a peer connection Which gives you complete control over what peer connection will transport for within the context of a session And then you have some additional meetings Let's say for close up your connection because you don't want it anymore and stuff like this and just to give you an idea of how this works from from a Sequence darn perspective the idea is that the user decides to attach to a specific plug-in and typically The user just specifies the plug-in name space, which is the unique identifier for a plug-in The Janus core knows that the plug-in is registered somewhere and so uses the create session callback to add the new user to the Plug-in then it's up to the plug-in. It's up to the it's a responsibility of the plug-in itself to to take care of the of this user And and do all what we've seen before so keeping track of the user Maybe create a new structure for this user to have to as a conference participants or whatever And then anytime that the user sends a message via via the browser or whatever meant for that specific plug-in the the Janus core will strip everything else and will just give the The message itself to the plug-in so that this can be processed somehow and The way that this messaging works is that Typically where plugins can handle messages in two different ways in a synchronous or an asynchronous Approach when you handle messages Synchronously then you just send a response right away to that callback that we've seen before so you receive the message You process it you send a response back and this can be useful for instance in like you will Like when I request these for give me a list of conferences that these plug-in handles and stuff like this in this case It's pretty much sinkers as you see but more often than not plug plugins actually communicate asynchronously instead which means that users send the message the core Passes the message to the plug-in the plug-in just sends an act back And then later on will send you one or more events notifications to take care of this The asynchronous messaging is particularly important because it also takes care of the WebRTC negotiation by itself So you Steven has anticipated how SDP offers and answers are involved plug-ins are responsible to Prepare that those are SDP offers and answers depending on who originates the session and this is all done in an asynchronous way So maybe a user sends an offer it gets to the plug-in the core will strip all the webRTC stuff It will just give you a bare-boned SDP the the plug-in prepares enough for an answer and sends it back so same thing when the plug-in is actually offering something and Finally of course me as we've seen media will be just bridged by the general score So the users send something via secure RTP the plug-in will strip the security part And the plug-ins will have access to the unencrypted traffic for for their needs As we've seen as I anticipated before all of these plug-ins and meters need to be implemented See because that's how see Janus was conceived. So Janus loads a shared model and expects See interface to communicate with but if we think about it We don't really need the whole plug-in to be in see if as long as the interfaces are Something that looks like see and the code is happy then we can implement all the logic in whatever language we want if we then implement the hooks in Somehow so that we have some stubs that then delegate the all the logic to something else which In principle, it's exactly what we did with the Lua plug-in Which at the moment is pull request that is available on our Janus repository I also wrote a small tutorial about how to write a Lua script from scratch to use these I'll go a bit on this later on and the basics are that Typically there are a few things that we need to consider so when for this Lua plug-in we basically decided to of course It's still a see plug-in because we need a see interface But then these plug-in loads a user provided Lua script when you initialize it So you say open this Lua script which can be maybe different scripts for different applications Then all the plug-in callbacks are implemented in see but they then call the Lua function so that the Lua script can handle those requests and we've seen and at the same time the the this plug-in also implements all the core methods that should be needed to communicate with the With the core and exposes them as Lua functions so that when I call push event from a Lua script The C plug-in will call will transform them in something that the core will be able to digest And in order to track user sensations in a way that both the C and Lua code can identify We chose just for a for simplicity to use a unique numeric ID to do that and In principle, this is exactly what we did so some kind of a C to Lua proxy communication Even though there are some problems that we needed to address that I'll talk about in a minute Which means that if you look at the date that API that we've seen before This is the C version of these callbacks that the plug-in implements because the core needs them But they are in turn then all passed to Lua to Lua functions on the other end The only two important ones in this case are in it and destroy because for the versioning information the Lua plug-in can answer It's in himself, but if you want to override that information as well You can basically and more importantly for all the Session management we have alternatives for that as well So whenever a user attaches with there will be a create session callback called on the Lua script and so on with the only Exceptions of incoming RTP RTCP and data which you might implement But you probably will not want to and typically you will not want to as I explained in a minute And for of course for sending his stuff back. It's pretty much the same thing So the Lua script will call push event or and session or whatever this will be Intercepted by the C plug-in via this Lua C communication and and it will be sent by the core to the core by the Lua to the Lua plug-in itself Which means that very simply this plug-in then acts as an intermediate layer between the C word and the Lua script So anytime something comes from one direction it translates it to to the other part and and vice-versa typically The there are there were a couple of issues that we had to implement you to take care of the most importantly We've seen how a synchronous event or more very important in the plug-ins communication because that's also how negotiations happens and The problem was that the Lua is typically Single-tread I mean they have a concept of threads, but they are not really threads They are mostly code coroutines typically and besides the access to the Lua state Which means the Lua script that we loaded that access the we might call it the virtual machine for the Lua Script that we are handling is not tread safe So we cannot access it from multiple threads without causing trouble basically So we had to first of all lock that to a state anytime that we wanted to access it and most importantly We had to implement some sort of a C scheduler that we could implement to take advantage of any time that we wanted to have some kind Of a synchronous communication So anytime the Lua script wants to have a message handled asynchronously It will basically just say create a core routine Keep it in a task list and then notify the scheduler in C to say I will need these to be handled in a core routine later on as soon as there is time for that Which is what we implemented via a meter that is called pox scheduler So the Lua plugin will just call this meter. This meter will handle a thread internally that then keeps keeps a queue in order to then Call the core routine as if as if it were a generic Lua function later on and you can see it Pretty much as exemplified here. I'm not going I will not go too much into the details be due to lack of time, but we you can ask for more information later if you're interested in this and And this is a very simple example of how you can do that. So You have a message you want to add you want this to be handled as synchronously you you add it to a To your own nash map or whatever you call pox scheduler And then a thread will wake up in the C code to then invoke Later on the be a resume scheduler the the task list so that you can do it again We also have an alternative to let's say time callbacks on on your own On your own schedule rather than let's say called this meter that soon as it is possible and you can do that VIM meter that is called That is called the time callback which basically means you say call this callback with these arguments in five seconds For instance and typically the approach is exactly the same We have a thread back in the C code that takes care of these as soon as the time pass We invoke the function that you wanted to be invoked which makes for a for an easy way to implement this as synchronous behavior That we needed but more in this is actually more important than the rest We wanted to have also a way to handle RTP RTCP and data in a way that would not completely block the Lua state machine because As we've seen we have meters to handle incoming traffic So an incoming RTP meter to handle incoming RTP traffic for instance the let's say the The the normal way you think you be you could do this would mean Take this RTP packet and pass it to Lua exactly as it is and let Lua worry about it Which is actually not an option because as we've seen Lua is single-treaded It will completely kill performances if you try to have Lua take care of this delivery itself so the the way that we handled it was to basically Handled this in a in a different way and this was because for RTP and RTCP and that as well The traffic may actually be very frequent Which means that you may actually kill performance if you did it directly there, so We basically implemented some meters that allow you to configure the routing of the media depending on how media is flowing in and then Let the C code worry about actually Delivering these packets in a one or either direction and the concept was quite simple. So we chose to Add a couple of meters that are called ad recipient and remove recipient that basically Allow you to say for these specific users all media coming from this user send it to these other users instead And of course you can call these multiple times for the same user so that you can have a one-to-one Conversation or a one-to-many conversation if you wanted and then the C plug in takes care of all the rest So they overriding the RTP headers if needed Sending packets around as they are needed and so on without the Lua plug in needing to worry about anything at all So it just let's say turn some knobs and some bugs here and there to say This is where the media should flow and this is flexible enough to allow you to do any kind of Communication from one to one to actually a complete SFU if you wanted to do that And this is a very simple example where for instance Alice is starting to send media Just Bob is subscribed to it and then we receive a new meter that says send this media to Tom as well Which means that the L the package that Alice is sending will be sent to both eventually We can see a couple of examples here So for instance we in that poor request that I've shown before we have a couple of examples out of the box So one of the examples was we just replicated the exact echo test that we have implemented in C as the Lua plug-in itself Which means the in this case it is really easy We replicate the same API and then we just make sure that whatever the user is sending we send back to him Which as you may expect it just means that As soon as the webRTC connection goes up and we know it because we are notified about this by the C plug-in We just call another recipient meter for this session and we pass it to the same session itself So that we say any packet that is coming from these sessions and it back to the same session with the which is Kind of easy, but already shows the flexibility that you can do with it. But of course this is more Almost done. Okay, sorry. I'll fly. We don't deal at this light So we also have an SFU clone so you can there is also a small video conferencing application written in Lua That is kind of a kind of cool where you actually do this ad recipient stuff for one too many kind of thing But I also wrote a complete tutorial to write a plug-in from scratch using a video call example and you can see it On our blog we have a complete post over here that goes all over the basics So it starts from the very beginning and it will drive you in explaining all the steps that you need to do in order to do that I also Implemented a small demo at an asterisk on a few months ago that took advantage of that and I also wrote a Demo specifically for this session here. Unfortunately, there is no time for that But if you go over that link over there, there is a something that looks like the video call But it's actually a chat roulette. So I assume that you know pretty much how chat roulette's work So you start you are not connecting to anybody then somebody randomly may join in in this completely Unedited and altred pictures may see Then people may go away and then another match may be maybe coming for me Which I may not be really comfortable with so I may decide to drop the communication instead And all of these happens within the context of the same pure connection So I connect to the plug-in once and then I just send buttons to say I accept this match I reject this match and so on and the plug-in in the background decides who should receive my media and Dynamically so in this way. So and I'm almost done here. So what to do next I mean where there are some things missing so typically there are the most advanced and stuff that we have in Janus are not Available in the plug-in yet like simulcasting and stuff like this and besides these Lua plug-in is also based on a branch that is experiment experimental by itself because it's the reference counters branch But there are some things that we may want to do in the future like for instance I mentioned that we have a couple of other type of plugins like transports an event handler So it might make sense to start to think about Lua for those as well if it makes any sense But actually something that is more interesting to me start experimenting with other programming languages as well Because Lua may be just an opening door for for this We already have all the hooks in place to decide how to then communicate with a different language and have all the hooks and Stubs in the C code so it should be easy enough to let's say use something like duct tape or something else To communicate instead with other programming languages with javas like javascript or Python or whatever else I mean this is something that I'd like to experiment in the future and I hope this was interesting enough for you to play with and so if you want to start playing with these or maybe Also start implementing a new programming language by yourself. Just just play with it and let us know it will be to be really cool So that's all I don't know if we have time for questions or if you're done Okay, sorry about that