Hi everybody, how's it going? It's a great conference. I'm really glad to be here actually. My name's Nadim Duba. I'm going to be presenting Maltago's local partner in crime. Just a little bit about me. I come from Canada. I'm working with my dad at a security firm. I like to think that I taught him security. Don't tell him that. But I also worked with Paterva down in South Africa with Andrew and RT on appifying the Maltago client for macOSX. And now I'm here to present some framework for the local transforms in Maltago. So we're going to discuss Maltago briefly. What is Maltago? Before and after Maltago. I'm going to show you some cool demos. Hopefully you'll enjoy them. And we'll wrap things up at the end. So who here is not familiar with Maltago? Is anybody not familiar with Maltago? All right, so this is going to be just short and sweet. So this is Maltago. It's a graphing tool for what people have turned open source intelligence.  So let's hear it. Let's take a person. And you can run a transform, which is essentially a data mining function on the internet and get more information out of it. So here we go. Hold on. So that's it. So these are called entities. What you're seeing on the graph here. So John Doe apparently has a whole bunch of emails. This is all fetched from the internet. There's no penetration on any system. It's all open source. So Google, PGP, whatever is available. And by the way, this just ran on a server on the internet. So that's what we call a remote transform. Sploitago is actually a local transform. So this is going to be running locally on your machine. So as I said, what is Sploitago? It's a local transform framework for Maltago. I wrote it in Python. But I'm here to oversell it. Andrew was telling me I was underselling at the whole conference, so I'm going to make my best to sell this. So it brings sexy back. Seriously. It's a rapid transform development framework. It's got some awesome set of core features. I was so addicted to developing this thing, I stayed up every night during our busy season until 4 a.m.  I really enjoyed learning the tech. You're going to see some of it today, hopefully. And it's ridiculously simple. So any of you can really pick up if you know a little bit of Python and make some really incredible transforms to create some really cool data visualization of your data. And we even got great early feedback from the designers at Apple. It's true that when something exceeds your ability to understand how it works, it sort of becomes magical. And that's exactly what Sploitago is. I hope I'm overselling. So why use local transforms instead of the remote transforms? If you guys are familiar with Maltago and you're familiar with Peturva down in South Africa, they have an awesome set of transforms. They've done really good work out there. But the problem is, their transforms are only able to see the data that's publicly available to them, which is the data that's available on the internet. And that's not a lot when you're doing a local assessment, when you're doing something internal. The other part of it, too, is by doing your assessment against Maltago servers, sometimes your clients want some sort of privacy. And by kind of disclosing that your open source intelligence subject or target to Peturva, you've kind of lost that privacy. And finally, they might not want to make transforms that are evil enough or powerful enough. They might want to just focus on what they want to do, like social engineering transforms. You know, it's not their fault. That's what they do.  And this is why I've developed Sploitago. So here's a scenario. This is a really quick demo. So your boss wants answers. Is there anybody in the company breaking our internet acceptable use policy? So you know, first place to look, DNS logs. So here we'll start a new graph. And I'm going to pull in, where's the IP address? There it is. I'm going to pull in a DNS server off the net. And actually, let's make it two to make it interesting. And what we're going to do here is I'm going to use Sploitago transform that essentially does DNS cache snooping. So if anybody is not familiar with DNS cache snooping, when you do a DNS request, it's recursive in nature. And if you turn off, you have the ability to turn off that recursive nature in DNS and essentially figure out what's cached on those DNS servers. So let's do that. So now what this is going to be doing is it's actually going to be going to the DNS server, hitting it with DNS requests with the non-recursive bit. And it's actually going to use the Alexa top 500 list. This is actually customizable. You can use any list you want. For this case, I'm going to use Alexa top 500. So here we go. We got some results back from one server. We're still waiting for the next.  And so this is what your data would look like. I know it's really hard to see. You're not going to see anything. But let's put it into bubble view and make this data really come out. And check it out. What you're seeing here is essentially the work of two transforms. So if I go back to this one graph here, one transform that I forgot to show you is that you can actually change this type. This is not the transform itself. But if you change it to website and then you go to reconnaissance, I've actually included two site categorization transforms. One from Luco and one from WebSense. By right clicking on that, you'll be able to get the site categories. And so this is what you're seeing in those big bubbles. The bigger the bubble, the more sites that are pointing to this piece of information. So if I go to my entity list and I see incoming lengths, you can see the internet's most popular site categories right there. So that's a little demo. So now, why sploitego? Well, let's take a little look about how we create local transforms without sploitego. Because I've seen a lot on the internet before sploitego, the nightmare. This is our development checklist. So you've got to learn Maltago's local transform spec, which is an XML messaging system. You've got to develop the transform, input parsing logic, data mining logic, XML serialization, some debugging facilities if you need them. Then you need to install, configure, and maintain the transform. And optionally define an entity. So let's go through this. We write the code. If you can't see it, it's all right. I'll just explain it. So there's a little bit of parsing logic right there. There's some hard coded XML. And this thing doesn't do much except say hello world. What about installation? Well, it's currently manual. You've got to go through the graphical user interface. And if you're really enthusiastic, you're going to want to do maybe 100 transforms. I don't know how enthusiastic you are. But this is a really painful process and it can be really tedious. Not only that, if you want to apply that transform to different pieces of information, you've got to do this multiple times. It's really painful. So after Splitego, Rainbows and Lollipops, this is all you've got to do. Everything's being done except the data mining logic and optionally the entity spec. As Borat would say, wow, the code. You probably have a better time seeing this now. It's very short. And I've actually exaggerated the code here because I put an on terminate. But this is exactly what the code looks like. It's very, very simple. I focused on making this as simple as possible. And so you're going to see a few annotations there. And that actually has to do with the way you're going to be able to install transforms in Maltego and configure them seamlessly without user interaction, without GUI interaction, nothing. It's a command line script. And this is what it looks like. Very simple. That's what I focused on.  So in Splitego, you're actually installing Python packages. And within those Python packages, you actually have modules which have transforms. And then the prefix here, the dash M is actually a working directory. So if you have for Maltego, sorry, so this is the config directory. This is where Maltego keeps all of its state. So if you have multiple installs of Maltego, then this is where you pick the version. And then the dash W is the working directory. That's where the actual transform is working if it needs something on the file system. So let's look at the head to head. Which method would you rather use? 47 lines of code versus 24. Graphical versus command line. Config is graphical. And in Splitego, the config is code and file based. And to end development versus data mining logic, barely reusable code versus super reusable. I don't know. I'd rather go with the right side. So why Splitego? To take to take advantage of the core features that are available to you. It's easy and it's an easy and extensible framework. You can do tons of stuff. You can extend it to your heart's desire. You don't even have to know XML. One of the common complaints that I get from developers. Oh, we always have to do this XML serialization these are a headache. I've taken care of all of that. I've done that all for you so you don't have to do anything. Feature rich auxiliary modules and you're going to see some things right now. What the first demo showed was actually scappy integration for multigo local transforms. And I've provided you with some great transform debugging tools. And finally, some really good pen testing transforms that I hope you'll be able to use and maybe even add to your artillery. So we've got a scenario. Your colleague wants to know if there's any cool way of finding common services across hosts. The answer is yes. And I'm going to show you right now. So just give me a second here. I'm just trying to hook up my second laptop. So here we go. This is my target machine. And right now we'll just do a very short as n map dash f. And you notice there that pseudo actually popped up. That's because all the transform the dispatcher itself. If you remember in the code before there was an at super user annotation and that annotation instructs dispatcher which is responsible for executing the transform that this transform needs to execute in super user mode. All right. So I've done that.   And there are the results. It's not that exciting. But imagine this in larger networks. You can start to see common services and from there. Take the services, right click, do a service banner check using n map. You can even right click on n map report files and use a map. And that produces output as well. And here you see that my laptop is using Postgres DB and Mac OS X. Not only that, I've also integrated Nessus. Where are you Nessus? There you are.  And here is the proof that it's running. So nothing exciting yet. But there it is. Nessus and n map integration in multago. And another thing too that I've added. I've actually extended just the input parsing logic just a bit. If you look at the spec it's a bit limited on what you can do. But essentially let's say I wanted to add some more parameters. I wanted to pass some more parameters to command line tool. While in this case I know that SNMP is running.  Where are you? Did I click it? One second. I can't see anything on us. So it's probably disappeared. There we go. So there we go. So I can do a dash P161 and that's going to pass it to n map. So I'm just going to cheat a little bit because I know that service is actually running and there you go. You got a UDP scan. Right there. And so from here you know we could have done a service check. I know it's n map. But let's just pretend this SNMP string is not there. I can do an SNMP brute force. And what this is going to do is like every other transform I've provided the ability to configure lists, to configure different options for this to run. And so here I've provided the regular n map word list. And there you go. You got your SNMP strings. Community strings. And you'll notice that there's two of each. That's because I brute force both version one and version 2C. And so pick your poison, right click, and I've got a whole bunch of transforms there to do some kind of, some mining from SNMP. Two location, two person, two routes. So what you can do is if you figure out your SNMP community strings, you can recursively run this transform and you can figure out the route out the door. Or you can figure out the other routers on the network. It's simple. So I'll just do it all. And there you go. Where is this? So our admin, administrator, our location right here right now. And the two routes that were detected were local host because there's no real route out and 0.0.0. That was it. But this you can do over and over again.  Really simple. And if you look at the code, I've provided some SNMP libs. So everything I've done to date, I've provided the libraries for you to use so that you can reuse them and you can do your own really cool transforms. I'm really encouraging people to try this framework out. I really want you guys to contribute as much as you can. I'd really be happy to see that. So that is the service discovery demo. Here's another scenario. The lazy firewall admin. So our client wants to know is the firewall admin doing a good job of securing the DMZ? All right. Release the ARPs. So this is another SCAPI integration demo. So we're on a network. We're connected to our DMZ. I'm not sure if everyone's familiar here with IRS scan by OXID. But basically this does the same thing. It essentially art poisons the router's cache and spoofs the peers around you on the network and sends sends out to your destination. In this case I've made the destination 4-2-2-1 and I've also configured five ports. So it'll just shotgun blast a sin to these five ports and send back the response. So this is a really good way of measuring the firewall rules. And so here I'm going to just show it to you. One second. Lots of cable switching. Where's the cable? So I'm just going to be a bit lazy here. I'm going to put a location down. So DEF CON 20. Right click. What is my internal IP? Pops it up. So now I know I'm on this network. Right click. And find, where am I? To neighbors. So this is what the act, this will basically, this will find the active neighbors in your network. And so we found just one which is the router and that's fine. And then let's pretend, let's just pretend that we found another one here. So let's put in 2-4-5 and we'll basically run the IRS scam. Come on. And there we go. So it's spoof 2-4-5 and it returned the responses. And here if you just click on one of the port responses you can see that the destination was 4-2-2-1. The source IP was 2-4-5 and the port status was that it timed out. So it gives you a reason why timed out. And here's 53 which is known for 4-2-2-1 that it is available, DNS. And there it's open. So this is a great way if you have a whole bunch of IPs you want to measure what each server has access to in terms of internet access out to the internet or maybe to another neighboring network. You can run this on a net block and you can actually get all of the results. Now you're going to ask me how do we actually put this in some sort of spreadsheet. So I've created the tool for that as well. So if we just do this, save our little graph. Come here. So can anybody, can you guys see this easily? I just want to make sure. Do I need to zoom in? Zoom in? I hear yes. So I'm going to zoom in. Sorry. All right. Is that better? That's not bad. Bit better? All right. Here. Cool? All right. So MTGX to CSV and IRS scan. It's going to pop out graph, the graph results in CSV format. And so let me zoom out. And there you go. And what you can do on top of that is if, let's say for whatever reason you wanted to separate the entities by type, we can still do that. So CSV to sheets, put in your graph, and prefix, and there you go. It separates the graph into separate sheets. And now you have separate CSVs with common entities. And there's your report. So there's more to learn. We've barely scratched the surface here. There's tons of stuff that I've built into this framework.  Like every other developer documentation comes last. But there's a lot of tools. Here, I'll just show you one. So this is the way this patcher works. So essentially, it's a command line tool. You put in your parameters, which the first parameter being the transform you want. So I'm going to do what is my IP. And in this case, there's no real parameter. And there you go. There's another way of actually seeing that your script is working. So in this case, it takes the ugly XML that humans aren't meant to read and puts it in a nice tree, graphical tree for you. So just for debugging purposes for those of you who are enthusiasts. I like this guy. He keeps clapping for me. Now I know who my real friend is here. So where to look for more information currently? It's only, it's in the code. I'm going to get around to it. I'm going to put out a big document for your needs. I really want you to play around with it. Please, you know, drop me a line. I have my contact info at the end of this presentation. And it's on a DVD. The other point that I want to make on the DVD, there's a different presentation. And that presentation actually has more technical details. So you can actually reference that for your development needs. And what's next? You know, I'm going to set up the website, documentation, more evil transforms, that is. And hopefully we're going to have a, I'm looking forward to doing an online transform index, kind of like Pi Pi, where you guys can post your transform packages and people can share ideas. And it'll be really easy. And some top secret stuff. It's also on the slides on the DVD. And last but not least, I'm looking for free labor. Anybody that wants to develop, transform gurus, hackers, documenters, website designers, I like documenters. And pastry chefs, I like my stomach. Anyways, please feel free to drop me a line. In summary, Sploit Tego is an awesome framework. Awesome. And Uncle Sploit Tego needs your help. So thanks to Paterrava. They've been really encouraging Andrew McPherson, role of timing. Really great guys. Always a pleasure to work with them. And Signals and RCGT down in Canada for letting me come out to do the talk. I hope you enjoyed the talk. And I'll be in the Q&A if there's any questions or I could take some questions here. Email. Thank you. Thank you.


Hello everyone and welcome to a special edition of Issues and Answers here at the NTN studios Featuring outstanding students of the Sir Arthur Lewis Community College. My name is Natalie Julie Fannes And I thank you for joining us here this today It's a pleasure always for us to be able during the Nobel Laureate Festival to feature our outstanding students at the college Who are able to balance so much and who are able to achieve so much this year the theme for the Nobel Laureate Festival is Celebrating excellence vision 2020 so our main topic will be to hear the students vision for St. Lucia and for youth in particular With me today are two students Daniel De Freitas from the division of art science and general studies and Zanaka Emilia from the division of agriculture and we want to welcome both of them and thank them for being with us Welcome So you are Exemplary students in leadership positions who do so much particularly where youth is concerned I want to give you an opportunity first to tell the nation about yourself. Let's start with Daniel Good day As you have already stated my name is Daniel Taj De Freitas. I am a second-year student of Sir Arthur Lewis Community College. I will be sitting keep for the second time this year. I study Biology chemistry physics and the Caribbean studies It sounds weird that I do so many sciences Especially when people find out that I was the creator of the Nobel Laureate production This year. I'm still happy on how well that it turned out I'm also the vice president of the drama club vice president of the dark students council I'm also on the executive of Spanish club that and of course many other other other clubs But I also one thing I will get to my house is being the general secretary of the grizzly south youth and sports council That sounds like a full plate Daniel And I know Zanaka is no different. Let's hear from you Zanaka. Okay Zanaka Emilia Currently acquiring an associate's degree in general agriculture at the south of his community college yet, too I'm currently the president of the national students council newly elected country representative for the youth climate change activists regional group. I also serve on my divisional council at the division of agriculture Many clubs as Daniel including the Spanish club, which we love daily And also I do work in my community on the baboon youth and sports council. I like so much that you sound like community people and Not only do you serve on your school at your school clubs, but you're also part of your community So tell us a little bit about how you balance all of that with your challenge of completing your studies at the south of Lewis community college, which I know is not Just a walk in the park. It's Daniel As I said, it's definitely not a walk in the park But I think the more time that you spend doing it the easier that it it becomes doing doing it meaning what balancing Yes, all these extracurricular activities. I would say To one who is looking to do the same firstly is just time management Time management is the be all of one schedule if you have one and you should have have one So you're having a schedule helps you map out what you're going to do for the day the week the month And it helps you visualize what you'll spend your time doing so that not only do you have You're able to make time for the things all of the commitments that you have put on your plate But it also allows you to work more efficiently with the time that you have Okay, how do you manage well for me? It's all about prioritizing your time and committing yourself to specific stuff as it relates to school and what we have going on a lot of What we do outside of school is actually related to school. So you find Knowledge filtering from us being in these groups also helps us at school But at the same time you need to sort of balance the two where you Go to school. I mean we miss a lot of school being a part of all these things But at the end of the day, it's all about having a proper schedule a proper planner as to what you're going to do and Actually designating time to specific things that matter So putting the ones that need a lot more work first and then come to the rest later So that's how I go about actually trying to stay in school and balancing out the other stuff Give us a little background into what propelled you into those fields that you're in now particularly with the community service What what pushed you in that particular direction? Well in terms of the community service as they said What propelled me was actually someone else that I work with frequently. She's also a very Heavily involved person in youth development. Her name is Desiree Daisy It was two years ago. I believe when she Asked me knowing the the qualities that I have Be with before While she worked with me and also just being a close friend She realized that the qualities and passions that I possessed would have allowed me to thrive in in youth development, so it was more of a recruitment but It's just that I think a lot of young people I mean including myself has the Passion and the interest to give back to their society because most people think well Some people may think that the only opportunity that they'll get to give back to societies Maybe when they're already working maybe when they're an adult But the truth is that we can already give back and be a part of change From this early age and from this level Thank you, Diane. What about you? Well, I live in Babonu and Although I'm not one to always be on the streets as you may call it. I do a lot of Observations in Babonu and I have realized that a lot of young people spend their time doing nothing and For me any way that I could be a part of something where we could Get to these young people to have them to be involved Include them in stuff that would keep them out of the on the blocks and actually have their mind being Stimulated in something that is positive that would impact our society. I believe that's where it started for me and then Being able to see that also we have students impacted in that same breath It really pushed me to get involved in the student movement and like Daniel I have many friends who encouraged me to continue continue to be a leader in that capacity So that all students are looked after and all young people actually have a voice on maybe half and their concerns can't be heard Just a follow-up. So you told me about your interest in community development. Why did you choose agriculture as your field of study? Well growing up. I really loved My environment everything and my dad specifically used to spend a lot of time with us Well me In the yard doing different stuff and for me it was something where I didn't want to go into business and Science because it wasn't too exciting. I wanted to be more out there with Nature mother nature as you would say it. I wanted to really get involved in Planting stuff and I was so fascinated to see that stuff could actually grow from me planting it So it really stemmed from there and a lot of people usually when they see the brown shirt and not the green pants They would say that I go to dogs, but in Trifon in fact I go to daugery and I really love that I chose that Excellent. Daniel, what about your interest in science? Well, my interest in science started from a very young age I've always been the one to even from for more knowledge as I have from a very young age I believe that knowledge is power. So I was always Interested in knowing how things work Whether it be what what what's in our food or how we get to to to to work What we put on our bodies. I just think that everything stems from somewhere and Science if you look at the science that I do it's the free pure sciences as people may call them biology Physics and chemistry. So it allows me to get in information on essentially how the world works from every standpoint My main focus is biology Because that is what I aspire to what field I aspire to go in into later So my fascination when it comes to when it came to their environment More specifically animals was really what pushed me to continue Working in the scientific fields very good You sound like you have that career path very well mapped out and that for me is something that young people Can have difficulty with but I'm glad that you're thinking of it from such an early age So we have to take a quick break now I ask that you remain with us We've heard about the young people when we come back their views on issues of concern to young people If you are in receipt of an abnormally high bill It is highly possible that you have a leak that leak may not always be visible before you contact wasco Conduct a do-it-yourself test one record your meter reading to do not use water for 30 minutes to one hour Three take another meter reading if the reading changes you have a leak contact a plumber to identify and fix the leak at earliest a message brought to you by the water and sewage company incorporated wasco Welcome back to issues and answers. Thank you for staying with us and if you're just joining us welcome We are here speaking with students of the Sir Arthur Lewis Community College as part of the so the college's activities for the Nobel Laureate Festival and With us are Daniel de Freitas and Sannika Emiliae both very active students on the campus and in their communities And we just heard all about their lives and what they would want to do in the future And now we want to move on a little bit to their passions so Daniel recently was the writer co-writer and director producer of one of our Activities, which is a theatrical production at a student-led and this year the title was God of Earth Daniel tell us about your passion for the arts That despite being a science student and marveling at all of the Scientific-based research and concepts that I've stumbled upon in my 18 years of life I do have a side of me which is so creative and abstract that I just absolutely Need to have an outlet for it and that is exactly where the arts come in In the past when it came to SMC I have been a performer. I have written for Literary night Tau Fest. So having the ability to sing is Where it all really started for for for me people would always tell me that oh you have a nice voice So I practiced and right now I do sing Jen generally unfortunately, I didn't get the opportunity to sing for the production But I just came up that but I'm everyone did get to see my writing skills per producing skills so that in itself is another facet of my creative being is Is what I should say so The arts is really just an an outlet for anyone's Emotions imaginations Anything that you would like to put out here in a media in a medium that people would find fascinating and of course entertaining because at heart I don't feel like I am an entertainer That is where the arts plays a significant role in my life Let's just speak a little bit more about God of Earth and what inspired it because it was so well received and the adults in the audience People like Kendall Hippolett of Donald Dixon Jade King Hippolett was so impressed with the concept and with even how you're Executed tell us a little bit about what inspired God of Earth So God of Earth is inspired by a multitude of things as you could Well, if you've seen by the plea You could see the incorporation of my science based background in terms of the planets Space in in general all of the tidbits and little fine points in the theatrical production Did cater to the scientific side of me? So that was the site the scientific based Inspiration of it, but God of Earth as the name suggests is also heavily influenced by religion and Religion in the sense of How what role religion plays in human societies? How did it come about the different? variations of of of religion and how religion is is a venue of cultural expression so my love for cultural diversity Which is prominent in the Caribbean As well as religion on a whole whether it be from the Western or Eastern Hemisphere all Communated to one together with my scientific background to give you the really a Mishmashed almost kind of concept, which is God of Earth give us a little bit of synopsis for somebody who hadn't seen it Just said a little bit about what the play was about so God of Earth is The premise of it is that The nine the eight planets are in our solar system is are all named after God's except If originally was named after a God whose name is Gaia and that character does appear in the production But it's still the official name of the planet is if which is just it So I thought of what would be the If if were to be named after a Roman God or if there was a Roman God Entitled of what would be that story of that God and how would it intertwine in the bigger picture of Roman mythology? Very very interesting, and I know there are calls for you to do a second showing I hope you all could work on that so that more people can be I hope I know yes Thank you so much for that Zanaka Climate change. I know one of the reasons you miss school is because you attend Conferences on on climate change. Tell us about your involvement and your passion for that. Okay, so I started a Secondary school at Leon. Yes, I Was really motivated by one of my past teachers who recently passed away. Mr. Gabriel and he really encouraged me to Speak on issues as it relates to climate change because he was my bio teacher and During class I would challenge him with a lot of questions as it relates to what's going on with our planet right now and a lot of the issues that we're facing and Due to that I went to a summit in Jamaica and this Summit really pushed me to really speak on issues more and I've been doing a lot of research Because we are part of a small island developing state and I've worked with many key stakeholders such as the Caribbean regional Caribbean agricultural regional research and development Institute caddy and one of the main projects was to Really go out to our farmers and really see what the effects of climate change has been doing to their farms and I must say that we are really in a bit of some problems here in St. Lucia and That in itself has really made me question myself as a young person as to why Don't we have many more young people speaking on climate change issues? I recently went to the United Nations summit in September last year where that was the first youth climate change summit actually hosted by the General Secretary of the UN and We really had a good time hearing different Experiences different solutions as it relates to getting from where we are to a better place for future generations to come and That in itself I really think that with my new position as a country rep for the YCCA that I need to mobilize more young people To really speak on issues and really get involved and know what is actually going on because it's not going to only affect the agriculture aspect of the island or the earth in itself But that will filter down into all of our industries and I think that's something that we need to understand Okay, so We just have a little time left before the break, but what kind of activities have you planned? for youth Before I went to the summit. I actually hosted a forum a lecture with the division of agriculture where I brought in someone to speak on The effects of climate change as it relates to food security because we know that we have a high food Import bill in St. Lucia So I really wanted them to have a feel on what it really is and what does it mean? That we will not be able to Provide food for our country anymore soon if we don't start to look at alternative ways of farming in St. Lucia So I've hosted that and I've been speaking to many other Climate change activists and we're working on some other activities to involve young people Fascinating so proud of those students and the work that you're doing. We are due for yet another break Please stay tuned. There's a lot more to come from Daniel and Yanaka How Excessive agrochemical use additives and genetically modified foods are harmful to health and the environment join the good food Revolution grow buy and consume organic a message from rise St. Lucia and the Ministry of Sustainable Development with funding from the GEF small-grants program Welcome back to issues and answers We are speaking with Daniel and Zanaka to students from the south of Lewis Community College And it really has been an uplifting conversation with them They are really inspiration to young people and we want to continue now. They have spoken about themselves and their passion I want them now to speak to some issues that affect young people And I think given that you at the highest level of Education that we have in St. Lucia our premier tertiary institution I want to talk about education and your vision for education in St. Lucia and for young people Who wants to start? I'm throwing it up this time. I'll start so if I may for education definitely one of the first Visions that I have for St. Lucia's education system is the implementation Or should I say the transition of Sir Arthur Lewis? College to become a full-fledged university. I mean that would be so much easier and So much easier for one for People who want to remain in St. Lucia people to attain a proper degree in whatever field that the the university will provide and it will cut costs on us students having to leave to gain Diplomers and and certificates such as our masters or or or bachelor's so that I think is one of the one of the Visions that should be at the forefront of being brought into fruition in addition to that I would also like to see that the variety of of Courses provided at this Tutorial institution, I would hope to be expanded in the past Sorry has to be expanded in the future in the past. I know that there has been courses which used to be Delivered to to students, but aren't any more. So I would like to see a revitalize every revitalization Of of these courses to be brought back as well as the introduction of theater arts for for for keep For for example I just think that there is so much potential in terms of the Variety of skills and interests that young people have that they want to take seriously and turn into a profession That is sadly being missed out upon Hey in in St Lucia. Okay. Thank you. I totally agree Daniel and another thing is that I Would like to see that we have a more inclusive syllabus in St Lucia Mainly at the secondary schools Because a lot of the time we see that our syllabus sort of caters to the more academic students and a lot of the time our more vocational and Athletic students are sort of left out, but the transition is happening with we're seeing their Turn the grizzly secondary school into a sports facility And I just wish that they would really sort of start to do more in terms of the arts and Even agriculture in itself. So that's what I would like to see with the education system and being a part of the NSC we've begun to a closely with ministers even we had a meeting with the prime minister where we discussed How we could make the education system a more conducive and effective one in St. Lucia for our students So we've been working along with them and I could see that if we continue to discuss these issues And how we could improve education that sooner or later Our education system will be one that would cater to all students and wouldn't be suffering from bridge brain drain Sorry, so that everyone could feel like they have a place here to study in St. Lucia. Okay. Thank you We are getting very close to our independence celebrations Last year there was a lot of festivity around our 40th I think we can see we're adult now at the age of 40 And I know you've been around just for 18 years But for a country that has been that is celebrating 40 years of independence. What for you would you like to see? Stand out as representing St. Lucia as being at the forefront of our development as an independent nation Okay, well When one speaks of independence, I think definitely what comes to mind is Self-efficiency and sufficiency and as Zanaka has stated before one of the main importance for us is Providing food for the nation it is sad to see that our import bill for foods as well as other items It's so high so One thing that I think that needs to be put at the forefront of development For St. Lucia in order to exemplify our independence is to lessen our dependency on other countries in terms of Imports so There's just so much potential. I'll use an example such as And energy generation. I think there has been a discussion for the generation of geofoomal energy using our Volcano for some time now Taking advantage of the Caribbean climate where there is so much sun and so much wind to Generate solar or wind-powered energy So in all I think that there is a lot of talk happening in terms of allow trying to push St. Lucia forward to Investing into those sort of Plans, but I think that what a lot of us would like to see especially young people who are hearing so much about climate change and seen So so much that the world may not be in a position Where we could and enjoy We would just like to see these initiatives brought to the forefront as these are ways to help preserve The earth and these are ways which will ensure our future To be successful and long-lasting Sanika has he has he stolen your fire? He's not like he's included on your area Is there anything else given that you will be in a season anything else as an independent nation that you'd like to see for St. Lucia, and definitely agreeing with Daniel I also think along with that as an independent island. We need to sort of Try to lessen on the unemployment of young people in the country recently young people across the Caribbean actually last week We had a summit in Trinidad where we discussed Economic growth and decent work for young people Not only having just an informal job where you probably go twice a week, but something that could Enable you to get something for yourself Daily, and I think that as an island we need to not only look at trying to create jobs But how as a young person in yourself can you start up something? How could you do something that could actually help other young people? And I think that we need to sort of resort to having these discussions as an island and As young people also Entrepreneurship. Yes, definitely. I think that is so important. I think these are two critical areas for young people Sustainability having a future and being able to provide employment and be self-employed We are celebrating excellence and therefore we celebrate you This has been an excellent discourse I thank you so much for all the work that you put in for being Shining examples for the young people and I thank you for sharing your vision with us And I want to encourage you to continue what you're doing and I know it'll be nothing but success for you So, thank you so much Danielle de Fritches and Zanaka Emilia students of the south of the Lewis community college for being with us today on Issues and answers and thank you so much for joining us here today I hope that you were inspired and that you have hope for the future We end here with the Nobel laureate festival being celebrated by the south of the Lewis community college under the theme Celebrating excellence vision 2020. Thank you so much for joining us


What's good Josh your boy Ross back again with another video. So we're gonna check out what made Smackdown in the 2000s so awesome by none other than wrestling gifts Just seems like a dope interesting video and I'm looking forward to checking this out on down memory lane man Smackdown in the 2000s not gonna lie to you. It was great. It was fantastic It was one of those shows where If you didn't have cable like I didn't have cable, you know only a select few of my family members had cable So I would be over there sometimes watching Monday night raw and loving it But if you didn't have cable you would watch this on regular Regular television and it sometimes in my opinion I felt like it was damn near the better show than raw even though raw was pretty good at the time It's just the fact that they catered to people with free television And it was the story lines was just as intense just as dope just as epic, bro Hey, man, I was all for it, bro. Smackdown in the 2000s was fantastic So we got to check this out to go down memory lane appreciate all love and support road to 60k We're almost there and let's get right into this In the 2000s you had to pick a side when it came to many many things you were either a team PlayStation 3 or Team 360 you were either a Kobe fan or a LeBron fan Crosby or a Vechkin who had the better diss track Jay-Z or Nas team Edward or team jake wait wait wait wait This is not my twilight fan fiction channel. Never mind scratch that And the most important question with that was where you want team Smackdown or team raw back in the day As I've said many times before in other videos Smackdown versus raw was more than just a video game This was our wrestling version of Crips versus Bloods You had to choose a side I don't care if you watch both deep down everyone had a favorite and the thing is when I look back at it I was no doubt no questions asked about it through and through. I was a Smackdown kid UPN CW my network TV. It didn't matter what channel They could have put it on the god damn hallmark channel and I would have been there Smackdown in the 2000s was just awesome There was just something so special about Smackdown just seeing this logo saying this stage I get the warm and fuzzy especially when Smackdown became Friday night Smackdown when you're older The last thing you want to do is spend Friday night inside watching TV when they moved to Friday night. It was it was pretty dope I think originally when Smackdown originally came up I believe it was on UPN for for Houston. It was on UPN. I think it was Thursday night I could be wrong on that correct me if I'm right or correct me if I'm wrong But I believe it was originally Thursday night Smackdown I want to say it originally aired on Thursday nights. What was it Tuesdays? I think it used to be Tuesdays, right? It'll be Monday night raw then Tuesday night Smackdown or something like that I'm not sure. I can't remember, but I know it was it was always Something to watch and you definitely did not want to miss Smackdown because a lot of times they would continue stories from Monday night raw On Smackdown, so it was like you definitely wanted to check it out So but when they did move it to Fridays, I thought that was the best way to start off the weekend to get your fix Friday night Smackdown V but when you're a kid and it's Friday, it's time for the weekend There's nothing better than going home and waiting for 8 p.m. And watching Smackdown There was no better way to start the weekend Smackdown in the 2000s just felt right. Listen. I watched raw I loved raw. I had fun watching raw But if I could only choose one show to watch from back in the day, I will always choose Smackdown The best part was everyone was watching Smackdown I know for a fact that so many kids grew up just watching Smackdown as their WWE fix because it was on network television I had so many friends that didn't watch raw because they didn't have cable So they couldn't but they never complained because Smackdown was all they ever needed and that's what worked for Smackdown because at the end of the day It was just as entertaining or even more entertaining entertaining at times because Everyone could watch it. You didn't have to have cable to watch Smackdown It was just free television at this stage the colors the aesthetic the roster It was so chill and such a different vibe than raw Raw always felt like the super try hard sweaty ass show whereas Smackdown was honestly the wrestling We all wanted to see Smackdown was the show where John Cena got his start and became the goat This was where you would see Rey Mysterio jumping up the sky doing his thing There was no way in hell that Rey Mysterio would have ever gotten the same chance as he got on Smackdown No on raw to simply put it Smackdown had all the real ones They had angle Rey Eddie Sina and then Batista eventually Booker T Benoit their cruiser ways to attack division and Smackdown was the place where you got the undertaker If you wanted to see the dead man He was Smackdown all the way which was a huge draw when they announced like oh next we got Smackdown The undertaker is back. Yo, you best believe that everyone was hyped and we would wait the entire week just to see the Remember the Smackdown exclusive pay-per-views. I remember I believe Armageddon was a Smackdown exclusive pay-per-view One of my favorite pay-per-view series was Armageddon, man Oh my god, take me back. Take me back was his entrance gonna be longer than the match Of course, but we were still so excited and even I have to give credit Other than Edge Edge carried Smackdown so hard you would have thought it was Lita But one I think back of Smackdown in the 2000s One thing I remember is how the mid card was filled with the most random shit, but it was still amazing This was the time of the boogeyman the weird-ass creep who ate worms and caught on the floor bashing a clock on his head Simon Dean the personal trainer MVP the guy who thought he was an NBA free agent doos and Domino In the 1950s they legit had a pirate running around Paul Birchell and if that wasn't enough How about veto veto wrestled in a dress? Yeah, this was his finisher.  I was like, oh my god.  Yeah real when this happened.  Yeah, you'd have rap battles You would have Teddy long doing his thing her dangle on a wheelchair Jesse and Festus Yeah, this was the funniest thing ever they had Festus a man who was whatever this is Okay, but as soon as the bell ring he became you know, it's just a straight-out beast I remember when Shawn Michaels put up on Smackdown to mock taker and yo every time a raw man pulled up on Smackdown It was actually a big deal and of course of course of course of course the night that I was depressed after watching Smackdown It was Jeff Hardy and CM Punk in a cage match with Jeff lost He had to leave the WWE and he lost so I spent the rest of the night on my PSP listening to Lincoln Park in the end You had edge and marrying Everyone that he cheated on her with the wedding planner not the top of my head There are so many random matches. I remember Smackdown was just the wave It was kind of like this raw was the show that the company made which they did everything they wanted But they kind of have Smackdown do its own thing and kind of just use that to give That's kind of what it was. I don't think they have planned on Smackdown to be as good as it was So they you know, they they always felt like raw was the a show, but a lot of consumers Would be different like different on that opinion. I know a lot of people were like nah I mean, we don't have cable so we can only watch Smackdown and we've been enjoying it You know, and if we do get to see raw it's cool, but Smackdown is where it's at, you know I'm saying so give what the fans wanted so if Smackdown in that sense was always just fun except when JBL was the champion It was kind of rough, but yo, I'm not gonna lie to you when this man went hunting for illegal immigrants Oh, that is top tier one of the funniest segments in wrestling history This was something straight It was literally Cartman at the Mexican border Smackdown was just a show where you spent your Friday's watching your family Probably sat with you and watched it even Your friends probably came over after playing outside and you just all enjoyed it so much talent So many great matches every week there would be a fire match or a segment But Smackdown was the wrestling show whereas raw was the entertainment show Smackdown was the show where you saw your new favorite wrestlers slowly become somebody It was this show where the WWE sent their wrestlers that they thought were kind of on the beats here Yeah, do their thing, but they were still so awesome. Yeah, my eyes. They were the a tier at the end Same man. That's what happened, bro. Same with Booker T. He was never considered the a tier guy He goes to Smackdown and becomes an a tier guy a till a tier heel, you know I'm saying so And I enjoyed it man. I enjoyed it. You know, they would not have thrived and made it as far Just on raw they needed a new show and them branching out creating Smackdown was the best thing They could have ever done for a lot of people's wrestling careers today as much as I loved raw It always felt so extra and too much. Yeah, it was still fun But Smackdown was the sweet spot when I think of 2000s wrestling I think of Smackdown my fondest memories are me sitting there with my mom on Friday nights watching Smackdown But t-staff versus taker in the cage Rey Mysterio is doing his thing even the 08 to 09 era was a fun time Obviously the WWE in the 2000s I loved it my childhood blah blah blah you've heard it all before but when you really dig deep Smackdown like I said Smackdown was the wave Smackdown is a large part of the reason why it was so special to us in the first place Friday nights 8 p.m. On the CW I was hype. Just take me back in the comments below Let me know your all-time favorite Smackdown moment from the 2000s and before I leave I think it's time to hit you with the greatest theme song of all time But yeah, man, Smackdown was great, man, I fucking love I miss that era of Smackdown Even though right now Smackdown is my opinion. It's it's it's the a-show It's a show right now Smackdown is much more enjoyable to watch It's a lot more entertaining to watch for me personally. Obviously they got Roman Reigns. So that's a good thing But Smackdown is is they're holding it down. They are definitely the a-show in my opinion So comment down below. Let me know Do you guys? Which did you guys prefer? Did you guys prefer and we're talking about the people that grew up in this era? Did you guys prefer Smackdown over Raw in the 2000s? Or did you guys prefer a raw over Smackdown? Why and why not? You know I'm saying these are for only my fans that actually grew up in that time period of watching it on Television comparing it to watching Raw on cable network television. So comment down below Let me know which guy what did you guys prefer Smackdown in the 2000s or raw in the Early 2000s. I would like to get your thoughts and opinions on that. Appreciate all love support row two 6k appreciate y'all kicking me. See y'all next time. Peace


Got a response, hi everyone, this is awesome, okay. Thanks for having me here, I'm gonna get started. So today I'm talking about implementing a visual CSS testing framework, and we're gonna be using automatic screenshot comparison to catch style repressions. My name is Jessica, just to introduce myself, and I'm Jessica on most of the internet. And I work at a company called Bugsnag over in San Francisco, and Bugsnag is an exception monitoring tool, and I'm a software engineer there, working primarily in Ruby and JavaScript, but our stack includes lots of languages. We also have error notifiers for lots of languages and frameworks, so we have support for things like .NET, over to Unity, over to Objective-C and Angular, so that people can monitor their errors and crashes from all their different applications all in the same place. And we are also currently hiring, so please get in touch with me either with me or at our booth, we have a booth here at RailsConf. You're interested in working at developer tools at a pretty small company. And also at the booth we have mugs and stickers, so if you like those sorts of things, you can also get those. I also wanted to let you know that I have a written version of this talk because I might talk fast, or some of the slides might go by quickly, so if you're interested in seeing a written version, you can go to the Bugsnag's blog and you can find it there. So back to the whole implementing a visual CSS testing framework thing. What am I even talking about? Well, as we all know, writing, reading, code reviewing CSS, all of that can be really intense and even more intense to refactor. Generally, this is what my face looks like when I'm working with CSS. And at Bugsnag, we decided we would take on a huge multi-week project. That would be an entire organizational and code cell refactor. So we wanted a way to test that all of our site looked the same despite changing all of the code. And unfortunately, as you can tell, that didn't always work out for us. We went through many iterations of refactoring and we realized we needed a tool to help us test the pages automatically. Otherwise, our process looked a lot like, oh, have you visited all the pages? Have you visited that? Have you clicked on that? What about that border? And that didn't really work out for us because that was wasting a lot of developer time. So we needed a better way. So we went on the hunt for a way to test our CSS. We wanted to know if there was a tool already built that did what we wanted. And we didn't exactly know what it is that we wanted yet. So it was kind of an interesting journey. We dug up on the internet and we found quite a few libraries. It definitely took a bit of digging to compile a list like this, but there were definitely quite a few libraries available doing something similar to this. And we decided from the list of what we found online, we'd try a few and see what happened. So one of the first frameworks we stumbled upon was one of Facebook's open source libraries, Huxley. In Huxley's Read Me, it says it watches you browse, it takes screenshots, and it tells you when they change, which sounds amazing. That sounds like something we might be looking for. But I had noticed that it hadn't been updated in over a year. And I was like, okay, that's not promising, but maybe it's completely done. Maybe there's no bugs in it. And it's awesome. So no, that's not what happened. After a good solid day of fiddling around with it and trying to implement it, it did work sometimes, but it ended up being a little bit too buggy for us. And in something where we're trying to find bugs, we didn't want a whole lot of more bugs happening. So it would have random failures. It randomly wouldn't take screenshots. And we started realizing this is not the tool we're looking for. So we moved on. So we tried another library like Quijote. This would let you make assertions about your pages elements and their relationships and how they're actually styled in the browser. So that sounded pretty good to us. Let's give that a shot. But I went to the example code to see how it actually worked in action. And I quickly decided I didn't want to use a library where I'd have to be manually checking how many pixels away something is in order to test it. Like on line 11 over here, I don't want to check if something's 10 pixels away because stuff changes. Like designs iterate quickly. We don't want to be checking manually all of those different heights. So I wanted a framework that was gonna be smarter than that. It didn't need to understand all the different heights. So this didn't work. We tried a few more after this and we kind of had the same failures going on. Like, oh, this one is checking it manually. This one, the screenshots aren't quite working. So we couldn't quite find what we wanted in this list. But like I said, there are a lot of frameworks.  Maybe you should check through these frameworks and see if they might do something that you're looking for. But I decided I needed to figure out what I wanted. So I started really thinking about it. What would fit the way that Bugsnag has built best? I decided I wanted it to be visual. So to take screenshots, not sit there and manually measure everything. And we decided we wanted a way to somehow in our app take two points. Like, say we had production on the left and we wanted to compare it with something that we have locally, like on the right, our testing. So thinking about this in Git, let's say we had a feature brand that we just pushed to commit to. And we wanted to take a look at what our homepage looks like on that branch, versus how our homepage looks on production or what's currently running in master. So with those two different points in time, we'd want to spot those differences that are happening. Like, see, we have the normal header on the left and in our master branch and on the testing header on the right, on our feature branch. And with those, we'd want a way to produce some sort of highlighted area where those differences are automatically. So at Bugsnag, our web dashboard is written in Rails. So this mixed with the fact I wanted the test to take screenshots really affected my decisions in wanting to write my own framework. A lot of the existing CSS testing frameworks were using JavaScript, so a lot of them were node-based and stuff. But I wanted to take advantage of the fact I was using Rails, like DHH. So at Bugsnag, we also use Git for our source control and we use it the feature branch way. So this is kind of important in case you might not use it this way. But what that means for us is we have our master branch, which is always deployable in production ready, but that's not always the case. Generally, it's always deployable or production ready. And whenever we want to create a feature, what we'll do is we'll branch off of master until that feature is ready and then we'll merge it in. So considering the tools we had at our disposal and after taking a look at some of those screenshotting libraries I showed you, I realized that there wasn't actually that much code to a lot of them. So as one does, I decided I'm just gonna write one myself, which always goes well. But just as a disclaimer, this talk is not about like, here's my cool gem, you should use it. This talk is walking you through the process I went through to create this framework. And in fact, this isn't actually a gem or even open source so I'm sorry, but there's a blog post if you're interested in the code. Okay, so I first decided that I should come up with the process of how I wanted my test to work. So that I had an idea of what I wanted to accomplish when I was building this tool. So number one, I needed a way to somehow automatically visit the pages of our site. So the test would, in an actual browser, hit each page of our site on a local server. Once the test visited the page, I wanted the test to take a screenshot of that page. So the important bit for the screenshot is that I wanted to take a screenshot of the entire page, not just our current viewport in our browser. So for example, if a change happened below the fold of the site, like we changed the footer or removed the footer, we would need to have that full page, otherwise we wouldn't be able to capture a diff down there. So next, I need somewhere to store all these screenshots I'm taking, and I need a way to upload and download these screenshots from that storage area. So using Git, every time I made a push to a branch, I'd upload a screenshot of the current stage of each page, including our master branch. And if I had a screenshot already uploaded to our storage area from our master branch, I need a way to upload my current futures branch to that storage area, and download my already uploaded master screenshot from there. And after uploading my screenshots, I'd then need a way to make a diff of my screenshots. So I'd want a diff between a screenshot I took on master, downloaded from our storage area, and the newest screenshot I took on my future branch. So if I have the previous screenshot I took, which would be the current commit on master, versus my branch's screenshot, I'd need a way to mark those differences between those visually and produce some sort of diff like we've seen before that we could view, showing the differences between the images. And finally, after I have diffs for my screenshots, I need a way to view these diffs. Even though I'll have a place to upload them, I need an accessible way for everyone on the project, so that they can view the diff screenshots depending on the commit. So we need some sort of page something like this in order to view the different branches and the commits. And when you would click through, it would show you all of the screenshots and the diffs. So we have a plan. Now we can start to try building our framework around these things that we need. So first off, we need a way to write some tests that will run automatically after each push. So we decided to use RSPEC. RSPEC, if you're not familiar, it's a tool, it's a testing tool for the Ruby programming language. And we already use RSPEC for our tests in our Rails app, so we decided to continue that trend. So we wanted to be able to write specs that looked something like this, where we would just be able to navigate to a local URL and save a screenshot of that page. We wanted to keep them simple like this, and right now not have like any assertions that would cause a path fail other than the test failing for some technical reason, like it didn't end up running. And we also wanted these tests to be separate from our main tests, so we needed to mark them out in some way. So luckily, RSPEC has that feature available, so we pulled out these visual specs into their own RSPEC tag that we called visual. That way, the specs wouldn't run with our main specs when we were running this week locally, unless we explicitly wanted them to. And this also made it so we could break out our specs on our CI. We wanted to break out our visual specs for a few reasons. Number one was our local build speed. If our local tests were bogged down by waiting for our visual specs, that would become a huge issue for us. And by having them broken out, we could iterate on our main app specs faster and be able to push more often. And number two is speed with our CI tests. So we wanted our main specs to still be fast on our CI so that we could merge non-visual pull requests without waiting for our visual specs to finish. CI, or continuous integration, if you're not familiar, is a way for us to automatically run our test suite when we push things to GitHub. And after our specs run on our CI, we're able to see if our build is passing or not on GitHub, which is pretty handy. And GitHub also has a feature where you can split up your build. So we can split out our visual specs from our main specs here so we can quickly see whether our visual build is passing or if it's our main specs. Without the builds being combined, so if we commit a non-visual thing and our main specs are passing, we can merge it. So at Bugsnag, we use BuildKite for our CI. BuildKite allows us to add steps to our tests. That way, we can run our main specs first, apart from our visual specs. And when they're separate, our visual specs don't slow down our main specs and we can merge our non-visual pull requests. So next, we needed a way to visit web pages and take screenshots with our spec tests. And for that, we decided to use Selenium. Selenium is a tool for automating browsers for testing purposes. We would need to use specifically their WebDriver API. And this would allow us to drive a browser natively on a local or a remote machine. And more specifically, this just provides an API between us and the browser. To use Selenium, we need to use a service like SoftLabs or BrowserStack. We need to use a service like this because we need access to an actual browser. Since we're using a CI, it doesn't just have browsers built in on the server. So we'd either have to set up our own virtual machines for that, or just use one of these services. So we ended up trying BrowserStack. So before our visual tests, we'd need to start up our proxy to BrowserStack in a forked-rail server. And then we'd make an instance of our Selenium WebDriver. And then, of course, after all these tests, we would terminate those services. And we also had to allow WebMock only in our visual tests. WebMock is a library for stubbing and setting expectations on HTTP requests in Ruby. So, and we use it to disable outside web requests during our tests. We needed to enable it in order to run real web requests so that we could use our local servers and upload our screenshots, but only on our visual specs. So to get our BrowserStack proxy running, we would just spawn a new BrowserStack process, and then we'd need to be able to terminate that process. And to get our rail server running, we'd spin up a new Rails process unless one was currently running, and terminate it the same way as our BrowserStack process. So to set up our Selenium WebDriver, we just have to pass it the capabilities we wanted. And like our Browser and our Browser version, which is Firefox and 31 in this example, and we'd also have to pass a URL to hit, which is pointed at BrowserStack, which would be our Browser. Setting up our Selenium Driver was easy, but when we were setting it up, we did learn some interesting things about taking screenshots with different browsers. So as a reminder, with our WebDriver, if we wanted to hit web pages in a real browser, and be able to take screenshots of the full page, not just the current viewport. And unfortunately, this feature, I can only get working in Firefox, which is not ideal. Since Internet Explorer and Chrome didn't work for me, we couldn't really transform this tool we were using as a refactoring tool. We couldn't use it for browser compatibility or anything like that. So although this wasn't ideal, this will work for our purposes right now as a refactoring tool. However, this was when I implemented it a few months ago, and I have heard of people that have gotten it working since then, so there is hope. We can change this. So after we set up our Selenium Driver and our Forked Rail server, we could then start saving our screenshots and our tests. So we'd use our Selenium WebDriver to navigate to our local host URL, and then we could save our screenshot after navigating successfully. When saving our screenshots, we need to set up a local screenshot directory so that we could have a nice, clean place to dump all the screenshots locally, and then we would only have one thing to remove once we were done successfully uploading those screenshots. And then after we have our folder, we need to use our driver to save the screenshot, and there we can just pass it the path we wanted it to save to along with some other things so that we can name it properly. So after our writing tests for static pages, such as our homepage, we quickly realized going into the dashboard that we'd have an issue with dynamic data, like those would just produce diffs all over the place. So with dynamic data, you can get false positive diffs because data can change between the viewing times. So to come at this, we set up fixture data for our RSpec tests and manually adjusted any other data not covered by fixtures using Selenium's JavaScript support so that we don't get a false positive diff. So now we have to have our test taking screenshots. This is the fun part. So we need to figure out a way to make a diff between two of our screenshots and ImageMagic worked perfectly for this. Despite having literally one of the worst sites I've ever seen, ImageMagic did exactly what we needed. So ImageMagic is a tool to convert, edit, and compose images. So ImageMagic has this command line tool and one of them is compare. And that when using compare with various options enabled, it allowed us to shout out and produce diff screenshots based off of two other screenshots. So for example, when we'd make a simple change like to the header, ImageMagic would spot those differences for us and provide this diff you've seen. So that's from ImageMagic. Thanks, ImageMagic. So ImageMagic has a lot of options you can pass to a compare tool and we do take advantage of a few of these options in order to make this work. So let's go back and go through each one of these options and I can explain to you how we're using them. So ImageMagic's compare tool from their website. It will mathematically and visually annotate the differences between an image and its reconstruction. Or in my terms, it'll make a diff. So compare lets you provide a metric that outputs the standard error, measure of the differences between two images according to a type given metric. So here we're using PAE, where PAE stands for peak absolute. And we can use the peak absolute to find the size of the fuzz factor needed to make all the pixels similar. So if we had screenshot one and screenshot two that were pretty different, it would end up producing a diff like this. And our peak absolute measurement would be outputted as you're needing a huge fuzz factor to make all the pixels similar or to be exactly the same. The fuzz factor can be important in case we want to ignore pixels which only changed by a small amount. We might actually want to be using this in case of false positives. Like for example, sometimes gradients render slightly differently depending on two different images depending on the browser. So you might not want to count that as an issue. We don't use this output right now, but it would be important if you wanted to make an assertion in your tests meaningful. Like actually have a failure if a diff was produced by a certain amount. But we didn't end up doing that because it doesn't necessarily mean something is wrong if a diff is produced. So on to the next issue, which was a few times when we were running our specs, we noticed the diffs weren't even being produced and we were trying to figure out why. And we took a look at the screenshots and realized that they were two different heights or sizes for some reason, like if we made a change to accidentally remove the footer. And image magic wouldn't let us do a default compare on those images. So we had to use a sub-image search. Sub-image searching is required to have compare search for the best match location of a small image within a larger image. This option will produce two images or two frames as image magic calls them. And the first is the difference image, which is the image we're interested in. And the second image would be the match score image. So the match score image is a smaller image containing a pixel for every possible position of the top left corner of the given sub-image. The search will try to compare the sub-image at every possible location in the larger image. And because of this, sub-image searching can be very slow. But as you could guess, the smaller the sub-image is, the faster the search is. That being said, this option doesn't actually take effect unless you have two images that are different sizes. And this doesn't happen that often to us. We're not normally chopping our screens in half. So that's fine. So the amount it slows down our visual specs on the CI is not meaningful. Especially since those specs aren't tied to our main specs. So another fun thing we ran into was sometimes our screenshots were completely different and they were completely different. But this is only for testing, that's not on our website. And image magic was not having that. In fact, it wouldn't even give us a diff because the images were so different. So we found an option called the dissimilarity threshold. This threshold determined how different two images could be in order to diff them. And it defaulted to 0.2 or 20%. So we upset to one, the images could be completely different. But generally you don't need to do that because your things aren't gonna be changing by so much. But this was just for testing our tool. The only caveat to this, as you might have guessed, is doing diffs on completely different images can slow down your tests by a lot. So like our previous issue with sub-image searching, this doesn't happen to us much, if at all. And since the tests are separate from our main specs, it's not a huge issue. So the last three arguments aren't exciting. That's just where our current screenshot is, where our master is, and where we want to save the diff to. So okay, we're done with image magic, cool. So now that we have our screenshots and diffs, we needed somewhere to throw the screenshots online and we'd need to be able to grab them back out with our Rails app. So we decided to use AWS. AWS, or Amazon Web Services, offers cloud storage and has Ruby API. So we'll store and retrieve our screenshots from one of their buckets. We need to set up our bucket via the Ruby API using our access key ID and our secret access key.  So then in our specs, we would call save shot. And that would take care of setting up our screenshots directory, taking screenshots, and then uploading those screenshots to AWS. So inside of save shot, after we successfully got our screenshots inside of our local screenshot folder, we'd call our save shots to AWS method. Our save shots to AWS method would be responsible for getting our current screenshot, our master screenshot, and our diff screenshot up to AWS. It would also download our master screenshot in order to produce a diff, so that we could then upload that diff to our bucket. So first, we'd find the correct area of our AWS bucket and we'd upload our current screenshot to AWS. After that, we download the master screenshot that we need to produce the diff with. And we'd find that screenshot using our current shot, our current get shot. And, oh boy, hold please. Java wants to update. I don't, I don't think I'm gonna do that right now, if that's okay. Okay, okay, hold on please. Okay, where was I? So, yeah, we wanna download the master screenshot that we need to produce the diff with. And we'd find that screenshot using our current get shot. And we'd pull the screenshot down into a local temporary folder we made for this. Then we'd check if we had our master screenshot. And if we did, we'd do our fun image magic compare that we talked about earlier in order to produce our diff image. And then we'd save it to the same local storage area. After that, we'd need to upload our master screenshot to the storage area. And then we'd need to upload our newly made diff to that storage area. And then we would have finished our whole round of saving our shots to AWS. Thanks. In our AWS bucket, we ended up using a naming pattern of commit shot, area of site, page name, and image type. So, for example, we could have a commit shot of A1, A1, A1A, where we'd be on the marketing part of our site, on the index page, uploading the diff for that page. The image types could be the current screenshot we took, the master screenshot we downloaded from AWS, and or the diff we made from the two screenshots. So, now that we have our images uploaded to AWS, we needed a way to view them, but viewing the screenshots from a bucket was far less than ideal. I don't know if you've done it, but you don't want your whole team going in there and trying to play with the screenshots. So we decided to set up our own custom viewing page in our admin dashboard. So we created a page that looks familiar because I showed it to you earlier that listed out our current branches with their last three commits. The controller action takes care of grabbing our remote branches and making sure they're in AWS. And then it formats our branch names correctly for the view. Then, in our view, we loop through and show all of our branches. And we also provide a way to prune our remote branches so we can keep this area clean without forcing a prune every time you load the page. And pruning our origin would be as simple as running get remote prune origin. So then when you would click through a shot on our view, we would see by area all of your screenshots in diff. And the controller action for our show page just grabs the areas and pages based on our current shot out of our bucket so that we can display them in the view. And in our view, we iterate through each area and each page in order to show our diff image as well as the current and our master images for clarity. So cool, we made it. Our tool is done, but it's not perfect right now. I think there are some improvements we can make in the future. So for example, right now, all of our tests pass whether or not there's a diff and they'll only fail if there's an issue executing the test. So it could be interesting to make our assertions mean something like fail if there's a diff, but we need to think more about that because like I said, a diff doesn't necessarily mean a failure to us. Another thing we want to consider is accounting for 0% diffs. So maybe we shouldn't upload a diff image at all if there's no diff between the images. This could save us space on our AWS bucket as well as speed up our tests because we're trying to upload fewer screenshots and it would make our admin dashboard less messy. We also think it could be nice to automatically link these to a GitHub pull request. So when a diff is created, maybe automatically attach it onto its relevant pull request, but this one's a little tricky because maybe we don't want to create that much noise every time we push, but it's an idea. And another thing is that we currently only diff between our current commit on a branch versus our current most recent commit on master. So when we push a new commit to our branch, it'll diff versus the last thing that was pushed to master. And this way we know what's changed between the feature that I'm working on and what's currently running in production. It would be nice if we could diff on master with the current most recent commit versus its previous commit. So that way, in case you push a visual change directly to master, you can still see a diff of it. It would also be nice to see a diff between the previous commit on the current branch as well. So if you push a commit to your branch that changes some stuff visually, you might want to see a diff between those two regardless of what's happening on master. I would also really love to get this hooked up to more browsers. That would enable us to make this into a backwards compatibility tool as well as automatic browser comparison so that we can make sure things aren't messed up in Internet Explorer. Anyway, that's all I have. So oops, I shouldn't punch my mic. Feel free to find me online or during the conference if you wanna talk more about the stuff or just wanted to say hi. And I also wanted to mention that I'm working on a book with Just Enough Media about a command line tutorial series that I wrote in a blog post series a long time ago. So it's in its very early stages right now but feel free to visit that page which is leanpub.com slash Just Enough Unix Command Line and subscribe for announcements. And anyway, thanks for having me. Appreciate it. Anybody have any questions? Okay, so his question was in my current tool, am I telling the tool where to go for each page or is it just traversing the site automatically? Right now I'm telling it which page to go on and also we're using Selenium to click around in case you wanna check modals, different states. So there's no way to automatically traverse for us right now but I'm sure it's something that you could end up implementing but we do find it very valuable to be able to click around and change states in order to capture those. His question is am I getting back any metrics? Image magic gives us back some metrics but we aren't capturing any of that right now but it would be very easy to capture it because it's just outputting the standard error so we could grab that and implement it somewhere but currently we're not. Ah yes, so his question is did we explore committing our images so that we could use get in order to check diffs? Up until very recently, get was generally not recommended for images because what happens is every time you push the repo gets exponentially larger I believe because it's continually saving all those images so our repo would get quite large. However, GitHub just released get-lead-ya I believe that takes care of that problem but we haven't looked into that yet so that would be an interesting idea though. Okay, thank you. We'll see you in the next video.


Hey, what's with you guys? Welcome back to my channel if you're new here. Hi. Hello. I'm Lillia Today, I'm going to talk about my good experience with the crisis team Now usually when I talk about crisis team, it's negative, but this is a positive experience Okay, you shouldn't hear the bill girls message. It's raining So I'm currently under the care of the home treatment team such crisis team They've been really helpful and really beneficial to me and I'm still under them I've got a woman's next week sees like I would just almost like I address and to knock you out not the request And the reason this is a good experience is because they're they're actually trying to help Every time I've been under the crisis team It's been for a few days and that's it as he's actually you're trying to support me I'm just trying to support me by getting me to see an occupational therapist I get me to see a psychologist by getting me to see us like I address I'm the one that came out to see me. They gave me the actual resources like they gave me actual resources To do this And they went through them with me. To me the crisis team that I'm under is beyond any crisis I've been under. Mind is the fact that they didn't come to see me when they were supposed to. Mind is the fact that they didn't come to see me when they were supposed to. Mind is the detail They're just such a good team to be under. Like the one information that they gave me was soothing and safety They've just been really really good with me But I asked to stop one of the exercises They did and they understood because it was a trigger for me. This team have been Amazing for supporting me.  All I'm saying is this team have been really supportive It's how every team should be. It shouldn't be a Shopping video. Every team should be helpful. What's wrong with this camera? It's going in and out of focus For me saying I had a good experience with the crisis team Shouldn't be a big shot To people. Because it's how everyone should be treated. And I know it's not and I know people are gonna be well I know you're gonna be like I'm happy for a good team. Mind is the Siren Every crisis team should want to help and should want to make a difference. Yeah, that's all I've got for this video If you have any comments or thoughts that we know in the comments down below If anything wrong, I've had my bad experiences with process teams too. I'll leave you on the o-card Look there What there? Thanks for watching this video and I'll see you guys in my next one. Peace


Next question is from Jordan Harris. You speak on the importance of periodization and proper phasing of workouts found in your maps programs. How about the phasing or periodization of endurance-based workouts such as running, swimming, biking, etc., and the proper programming of resistance training if it's alongside endurance training for the endurance-based athlete? Will there be any program changes if I were to run maps anabolic or performance alongside my endurance sport? Well, yeah, so that's going to be your priority, right? The endurance is obviously at the top of your pile. So now you're going to kind of adjust things to kind of fit into that as being the skill and the attribute that you value the most. And so, you know, in terms of the actual strength training, that's going to reduce a bit in my opinion. We created the maps programs with the overall fitness goals, aesthetic goals, functional goals in mind. When you start getting into an endurance athlete, that's a very goal-specific type of program. And just like Justin said, you're going to prioritize that. If you're an endurance athlete, I'm focused on your endurance training first, and then I want your weight training program to complement that, which is not what we wrote. Like, we wrote programs that were really geared towards somebody who's trying to change body composition, improve mobility, build strength, very overall health general purpose for the masses. Then when you have someone like this, and I got a DM and I didn't even be the same person who asked this very, very similar question, it's like, listen, if you're an endurance sport, that's priority one. Then I'm going to use Maps Anabolic or Performance to complement that. So you're going to set your endurance goals based on that, which is completely different. Okay, so for those that are listening right now that are wondering about cardio, for somebody who's wanting to do cardio for the sole benefits of losing body fat, they're different. So you have to understand that. Yeah, so I've trained a lot of endurance-based clients. So I've had clients that are triathletes or competitive swimmers or marathon runners. They love their sport. I never would try to talk someone out of doing something that they love, unless it was damaging them. But these people were very healthy about it. Very good people. Again, I've trained a lot of them, hundreds at least. And the way you train them with resistance training is to support what they're doing. The more endurance training you're doing, the less resistance training your body is going to be able to tolerate. So most of these people, I would train them, no joke, around once a week with resistance training. No joke. And I'm talking about people who are really endurance training focused. So I'll give you an example. I had one client that was a triathlete, loved competing in those types of events. So they would either run, swim, or bike most days. So once a week, they would come into the gym and I would do probably 20 minutes of mobility work. And another 30 minutes of traditional compound lift resistance training. I would keep the intensity moderate. If I pushed them too hard with intensity, I would take away from their endurance training, which was their focus. The goal really was to minimize injury and give them some strength to support. Because here's the thing with strength. This is the wonderful thing about strength. It is the foundation of all other physical pursuits. So if you make an endurance athlete a little bit stronger, they get more endurance. And so that's kind of what my training was. And to that point too, I would take that time to really assess where the focus should be. Like in the posterior chain, for instance, with runners. And with endurance athletes was a very big priority of mine to help to strengthen. So that way it provides that way for them to decelerate. To be able to have the strength to control their body better and support their joints. So everything is about supporting their joints in their movement pursuits. And also alongside with that, mobility practices to make sure you're greasing the groove. That's the one thing I would do more than once a week. Strength training, I might be only strength training one, maybe tops two times a week. You do mobility every day. Mobility I'm doing on a very regular basis.  So that like, and so if you have, if you own performance, I'm assuming this person does because they brought it up. I would be, I would be living in those maps, performance or mobility days as your primary focus. And then like the one of the strength training days, full body strength training days. And then the rest is really geared around your endurance training because that's your priority. Yeah, do one a week because in there you have three resistance training workouts a week. Do one and make sure the intensity is moderate and then do lots of mobility. But you know, Justin brought up a good point about individualizing it for the sport like runners. You know, I've trained a few competitive runners. And one thing you don't want to do with a runner is make their upper body really muscular because it's just more weight that will take away from their performance. So we didn't train on getting their upper body super muscular, but I did train their upper body to give them good posture. So I'd work a lot on making sure they don't get forward shoulder. I would work a lot on their core and help them a lot with their running mechanics because here's what happens with competitive runners as their posture starts to break down. So it started to become less efficient with their running and it takes away from their performance. And then with their legs, I was making sure their legs stayed strong through full range of motion. One of the things about running is you work in such a short range of motion. So we would work on being able to do full squats and split stance type lunges. Yeah, I like a lot of unilateral work for somebody who's a runner. A lot of them. And then I would do things like tibialis raises to help prevent things like shin splints and stuff like that. Now as far as phasing or periodizing your endurance-based workouts, so you may be focused on one type of endurance sport, but studies have shown that if you do a little bit of other types of endurance sports, it actually might, it helps prevent injury. So if you're a runner, running is great. You might benefit from doing a little bit of cycling and a little bit of swimming on top of it. Studies show that that helps reduce overuse. So in other words, you know, let's say you run five days a week. Maybe that one of those days you do a short run and then do a little bit of swimming or cycling, something to kind of offset a little bit, then do your strength training and you're totally set. But what you don't want to do is this. If you're endurance focused, you can't have push endurance and strength at the same time. You'll get neither. So it's one or the other. So if you're endurance focused, the strength training is there to support it. It's not there to be the dominant thing because otherwise you're just going to overdo it.