Thank you all for joining. I'm noticing the formatting is a little off on this computer, but hopefully that doesn't affect things in a noteworthy way My name is Ashraf I'm the founder at debug Academy. I formerly worked as a technical architect at Acquia for a few years and Ultimately, I am a self-taught Drupal developer who has also picked up React a number of years ago as I'm sure you all started to see the industry shift towards that direction, you know, very JavaScript heavy very Much a lot of passion and interest in decoupled projects so Why should Drupal developers be interested in JavaScript or in learning JavaScript? Again, as I'm sure many of you have noticed JavaScript frameworks have really dominated the discourse on the web There are so many decoupled use cases We have mobile apps, but in the future I imagine that the decoupled use cases are going to continue to present themselves in the forms of you know apps on your watches potentially devices like Alexa and whatever the Google equivalent of Alexa is called and I forget what it's called, but There's also of course Drupal and even WordPress at least WordPress.com has a react app Powering managing multiple WordPress websites at once. So the surface area that can be addressed with Decoupling your projects is much more vast than what you could accomplish on a non-decoupled project But for those of us who have been doing web development for a while You might remember back when everybody really disliked JavaScript People used to say like oh you use JavaScript. That's a joke. You're like, why would you do that? But all of a sudden a couple of years ago it became really popular and If you're wondering why that happened It's because in 2009. That's when ES5 the ES5 version of JavaScript came out and Notice there were no updates after that 2010 2011 12 13 14. There were no updates to the JavaScript language and Various reasons for that notice Between 1999 and 2009 there were also no updates and also noticed that ES4 never came out due to some, you know, disagreements in the spec But it got back on track in 2015 and that's when ES6 came out. It came along with a number of improvements to the language itself and Also a goal of having annual releases to continue to improve the language and you can see they've been doing a pretty good job at that as well 2016 17 18 19 each of those years they released updates to the JavaScript language and and So the question becomes What version can I use today? Because as you may know PHP Most of Drupal is server side, which means as long as your server supports it You're fine to use it JavaScript on the other hand like CSS and HTML is client side primarily Which means if the person visiting your website if their browser does not support The the JavaScript you're using then you can't use it so When you're writing CSS or JavaScript you have to make sure that whatever you're writing is compatible with The browsers that people are visiting your website on So yes, five which is the last uncool version of JavaScript is very well supported but IE 11 has limited support for ES6, which is the first version that people actually enjoy using and Drupal 9 does support IE 11 So does that mean I can't use ES6 or above because I'm working on a Drupal 9 website There are a couple of Considerations well as you look at this sad little child a couple of considerations to keep in mind One even though Drupal 9 supports IE 11, maybe your client doesn't care about it and then you don't have to worry about it. You can use ES6 But even if your client does care about IE 11 There are compilers you can use to transpile your ES6 back down to ES5 So what that means is think of SAS if you're familiar with SAS and CSS You write your code in SAS, but you don't deliver the SAS at the end of the day to your end user You compile your SAS to CSS and that's what the end user sees It's very similar with ES6. You can write your JavaScript in ES6 You can compile it down to ES5 and you can deliver that to the end user now This is hopefully a temporary measure But it would apply to things like ES6, ES7, etc now the way that Drupal core handles this is They actually have files in Drupal core and instead of using a .js extension they use .es6.js and this is sort of to have a marker on the files to say this file is using features from ES6 and Eventually maybe in Drupal 10 they might rename all of those ES6 files to just .js because they might not need to compile them down anymore When we finally dropped IE 11 support again in Drupal 10 as is the plan I did throw in an issue link down here. There is an issue for extending that Compilation process that core is using and making it available to contrive and even custom modules it has not merged in yet, but Their progress has been made on it So you might get lucky you might have a patch you can apply from that issue so that you can also Leverage that same compilation process, but if even if you cannot Text editors VS code for example, they have a lot of plugins that will compile ES6 back to ES5 search for something You know note.js Babble, etc. plugins You can use those to transpile your code You can sort of manually mimic the process if you don't have the expertise on your team to recreate The build workflow that is available in Drupal core and if you're using Something like aqueous BLT tool that Very likely if you run BLT front-end it may actually compile the JavaScript down to ES5 for you Okay, so now that we know we can use it Let's start to think about what you know, what's the All right, JavaScript is more enjoyable to write. Is that enough reason to use it? You know, why do people want to use it? First of all, so for those of you who are truly new to JavaScript We give a high-level introduction PHP runs basically before the page is built its server side It runs before the page is given to the user JavaScript on the other hand runs after the user receives the page and that's why sometimes You'll see something similar with CSS and fonts loading But sometimes the page will load and maybe it you know half a second later or 30 seconds later The page will finish loading and then all of a sudden it's interactive and that's because again JavaScript Runs or can run on a fully built page Some of the things that JavaScript can do that PHP cannot do it can traverse the DOM and I am aware of You know certain plugins and symphony components you can use to traverse the DOM But I'm referring to you know after the page is built after it's reached the user JavaScript can traverse the DOM which means it can crawl the contents of the page It can find a div and it can change the text for example within that div And that's the second bullet it can manipulate the DOM The DOM refers to the document object model Which is basically all of the elements on the page and a bit more JavaScript can react to user interactions Just like in CSS you hover over a link and the link color changes JavaScript can for example react to a user scrolling on the page It can periodically run code you can set a timer every 30 seconds run the following code with JavaScript And its code is asynchronous which we'll talk about a bit more So I mentioned the DOM again that stands for document object model and The DOM exists whether or not you're using JavaScript You know if you build an HTML page you deliver that page to your user The DOM is a representation of everything on the page and again JavaScript has the ability to add modify remove Elements within the DOM so you can target the h1. You can delete it replace it with different texts You can replace it with something entirely different You can create HTML elements on the fly and insert them into the page And more you can add and remove Elements sometimes when you hover over a menu link JavaScript might be responsible for creating a drop-down link or Adding a class to whatever it is that you hover it over to adjust the styling Now I mentioned also that JavaScript is asynchronous PHP is not an asynchronous programming language and what asynchronous pretty much means is Or well, let me say PHP PHP for example if you run If you write a couple of lines of code one after the other Even if one of those lines of codes is an API call that takes 30 seconds to run PHP is going to wait for that line of code to finish. It's gonna wait all 30 seconds before it goes to the next line and runs the next line JavaScript on the other hand if you make an API call using JavaScript that takes 30 seconds to run It may start to making that API call, but it's not going to wait until it's finished It's immediately going to skip ahead to the next line and run that line and the line after that and the line after that so in JavaScript, it's possible for you to Finish running lines two through ten before you finish running line one and that's the meaning of asynchronous It doesn't necessarily run in order. It doesn't necessarily wait for each line to finish before running the next line It's one of the things you have to get used to when going from PHP to JavaScript Now let's talk about some of the new features You know, what is it that changed in JavaScript that makes people now like using it more than they used to? Let's talk about this the variable this and this is One of the hardest things for me to teach because somehow whenever I'm on these slides I use the word this in conversation so many times and muffles the message so in JavaScript there is a variable named this and The variable this refers to the global object by default However, if you are inside of an object and you use the variable this and use the variable this The variable this refers to the object itself. Okay, so it has a scope of the object that it's written inside of and that's even true if you Create a method for that object and you write this inside of that method So that doesn't sound too terrible but Methods and functions are not the same a method is a member of an object So if again, you create an object in JavaScript and the object has a method The variable this inside of that method will refer to the object However, if you create a function inside of that method Functions in JavaScript are also technically objects So if you create a function inside of an object the function will automatically Receive its own this value so its own variable named this which points to not the outer object, but to the function and What ends up happening is it becomes hard to keep track of the variable this So you have this on the outermost level You have this in an object you have this in a function you have this in a function in a function and They all refer to different things So traditionally there have been some workarounds to that problem One of the common solutions is to create another variable. You might create a variable named underscore this and set it equal to Whichever instance of this that you want to refer to so for example If you're interested in the global object this and that's what you want to keep working with everywhere else you could say underscore this is equal to the global this and Now Within your functions, you can keep referring to underscore this. You know, you're gonna be reliably interacting with the global Objects or I should say the global this Variable another option is Referred to as binding so if you can see the bold text dot bind You can add that to the end of a function declaration You create a function and at the closing curly brace of the function you write dot bind and you put This in parentheses and what ends up happening is inside of that function Instead of creating its own this variable that refers to the function object Instead of doing that it will take whichever variable you're binding and it will use that variable as The value for its own this variable Now this is all hard to talk about right it's it might be it might be hard to follow Especially if you haven't done this a lot. So now let's see how ES6 fixes that issue So it's referred to as the fat arrow function some people refer to it as the arrow function But basically Instead of creating a function Using the traditional syntax instead of typing the word function followed by a function name followed by parentheses You can get rid of the word function you can go straight to putting the parentheses and instead of Putting curly braces right after those parentheses you can put again. This is what they refer to as the fat arrow So it's an equal sign and a greater than sign And by doing that You're still creating a function, but basically it's like the function is no longer an object So the function does not get its own scope for or its own variable this So you no longer have to worry about you know I created a function inside of a function inside of a function. There are three different values for this if you create your functions Using the following syntax It will not create an additional scope for the variable this so a lot of developers who learn JavaScript in the past few years they aren't even aware of The whole you know dilemmas with the variable this they just always use the syntax And they never have to worry about the scope of the variable this There are a number of ways to actually write functions and all of them comply with What I just described they all have that feature of not creating a new variable scope for the variable this As long as you use any of the Syntaxes that do not include the word function then you will you know reap those benefits another one of the changes is Traditionally, we would use var to declare variables. We would say var underscore this equals this But now there are two other ways to declare variables let and const And to simplify it simplify your process when deciding should I use var let or const? You can sort of follow this workflow. Should I use var? No Should I use let if I need to change the value then yes use let should I use const? If I will not need to reassign the value or if it's an object or an array which you know They are mutable, so it's also okay to use const for those So basically you should use const if you're not going to need to re-declare the variable you're only going to declare it once You should use let otherwise Const cannot be reassigned. So if I say const Age equals 40. I cannot then say age equals 41. It won't let me change that value So what's the difference? Why shouldn't we use var? Take a look at this example. In this example, we are declaring three variables Using each method of declaration. We're declaring using var let and const Right after that, there's an if statement. We just said if true to make sure it always executes Inside of that if if statement we are declaring three new variables using the same variable names and the same variable types and and Look after that if statement in before the if statement and inside of the if statement we Use the same values, but notice after the if statement when we log each of those variables The value is different when it was declared as a var. So let's talk about why when you use var Var is not block scoped So that means When I create a variable using var I've created it for example in the function. I've created it in That variable will carry through into all of the Children into all the if statements for example or all of the switch statements and so on So inside of the if statement in this example When I did when I redeclare my var, I'm not actually redeclaring it It's the same variable Because var is not scoped to that block level var doesn't care that it's inside of curly braces It just inherits the same variable from outside But let and cons on the other hand they recognize we are inside of an if statement and we were created inside of an if statement We're not going to mess with anything outside of this if statement We exist only inside of these curly braces So that's the real difference So it tends to be safer to use let and cons because you're not going to accidentally Overwrite a value outside of your if statement or outside of your function or Etc. Okay Doing on time pretty good I've been moving a little quickly because normally this is an hour and a half presentation, but now I realize I've got plenty of time Okay, so in PHP When you create a function You have the ability to set default parameters. So you can create a function and you can say You know function The variable x equal to one and what that means is if someone calls on your function And they don't pass a value x will have a value of one But if you do pass a value x will have whatever value you pass So that's a default parameter sort of like a fallback value if none is passed in So in ES6 you now have the ability to do the same thing in JavaScript You can set default values on functions. The behavior is slightly different because in PHP We have null which is the end all be all of Emptiness no null means there truly is no value whereas in JavaScript null means you have a value of null So in JavaScript if you pass in null, it's not the same as leaving it empty It will not there goes my wedding ring I'll get that after it will not inherit to the value that is is the default value if in JavaScript if you want it to Use the default value you have to actually type the word undefined or type nothing at all Now this is a nice feature So if you've used Drupal and twig and you compare it to theming in Drupal 7 where we had the TPL PHP files Remember in Drupal 7 we would actually write PHP files and maybe you would print out strings using quotation marks and Can catenate strings and all that stuff and we don't really have to do that anymore in twig In ES6 and above there are now what are called template literals and Basically in your JavaScript code you can use not single or double quotes, but you can use back ticks So very similar to a single quote just a little more slanty so you can use those back ticks to surround your HTML code and And Basically, it allows you to use single quotes double quotes, etc. Etc inside of your Content without sort of breaking the string but also if you notice on the last line of this there's a dollar sign and some curly races and what that allows you to do is Almost toggle back and forth between I'm writing a string and I'm writing JavaScript You see so inside of this again, what's called a template literal? I can put back ticks I can write all the HTML in the world and I don't really have to worry about escaping it But if I want to write some JavaScript code if I want to write some conditional logic I can put a dollar sign and curly braces and anything in between those curly braces Takes you out of template literal land back into JavaScript land where you can write whatever JavaScript you like what people normally use that for is What you can see here sort of a shorthand if statement Where you know if this value is true then return the following text Otherwise return some alternative text another nice interesting but nice feature is destructuring and What I like to think of it as is the ability to mass declare variables So imagine you were given a node object from Drupal and you were given it To your JavaScript file now imagine you wanted to create a variable named title with the nodes title named created with the node created date and Author with the authors ID You might think that you have to write let Title equal node dot title let created equals node dot created let was last one author equal node author But instead of doing that line by line you can use what's called destructuring So you type the word let and then you type if it's for an object you type Curly braces and then you write the names of all of the properties in the object that you sort of want to extract and What it does is it does two things it declares the variables so in this example on the screen it declares two variables one named debug one named Drupal and To the right of the equal sign you see an object so in the example. I was speaking about where you have a node You would actually basically be writing let curly brace Title comma created comma author equal node and what it does is it extracts those three values from the object It gets the title property the created property and the author property and it creates three new variables in JavaScript Again title created an author and it creates those three variables and it also populates them with the corresponding values from the object So it's a shorthand way to both extract values from an object and declare variables It works if the variables you want to declare Have the same name as the properties you want to extract So that's the top half the bottom half is also referred to as destructuring, but that is array destructuring So instead of the top half where we said we want to pull specific properties Which happened to have specific names the bottom half We're saying we want to pull specific values from the array and we can actually name these ones whatever we like because rather than Based on the array key. It's actually based on the position in the array. So You type again let you could also do this with const Or var, but you type let and you put those square brackets type whatever variable name You like and then you put comma separated lists and in this example We have the word one comma a blank comma the word three and what what is actually happening is we're creating a variable named One which will automatically take the first value from that array The second position which is intentionally blank. We are not creating a variable We are skipping the second position in that array and in the third position We're creating a variable named three and it's progressing to the third value from that array taking that value Populating the new variable and when I say taking that value, I don't mean removing. I mean copying So of course the values are still inside of the array as well You might start to notice a pattern with some of these new features They're all just about doing things faster writing less code repetitive operations That's you know now have shorthand versions So there's also something called enhanced object literals which Again in the past you would have to or in the past if you were to create a variable Named the letter a let's say And it had a value If you then wanted to create an object which had a property whose name was the same as the variable's name You would have to manually type in that property name So if you wanted to create an object where you said The property name is going to be the letter a the property value is going to come from the variable a You used to have to type a colon a but in ES6 if You want to create an object whose property name is the same as a variable name and whose Value is the same as the variables value. You no longer have to type curly brace Name of the variable colon value of the variable You just type You create your object and you just put the variable in the object and what that does is it automatically creates a New property whose name is the same as the name of the variable and whose value comes also from that variable So, you know another example if you are working with a node and Someone passes you a variable named title and you want to go to your node object You want to create a title property on your node object and you want to pass that title property The variable that was just given to you you could basically create your object and you can say object equals curly brace or node equals curly brace and You can put the title variable directly and automatically it will create an object with a property named title and It will take that value from the title variable that you pass Some of these things are a little tricky to talk about so make sure you go, you know play with these afterwards There are websites like JS fiddle net which you can just pull a website up and try these things out and See for yourself and on websites like that sometimes you can Turn on automatic compilation So you can write yes six on the left and it will immediately Transform it to yes five on the right so you can try out these features and see what's happening Another nifty feature is the spread operator It allows you to in the examples has two dots. It should have it should actually have three But it allows you to basically take all of the values from an array or take all of the values from an object and Pass them individually So imagine you had an object or imagine you had an array With a couple of nodes that you wanted to pass into a function and you wanted to pass them in You want to make your function call? Let's say the function was named merge nodes So you want to call merge nodes and you want to pass it node one comma node two comma node three If you have an array that contains node one node two node three Let's say that this array is named all nodes What you can do is you can call your function merge nodes and in parentheses you can type dot dot dot all nodes and JavaScript will automatically Sort of explode that array. It will take all the values out of that array It will pass them one by one as a comma separated list of arguments This is actually especially useful if you want to let's say clone an object because in JavaScript sometimes you Especially in react sometimes you want to clone an object you want to replace it with a new object and the easiest way to do that is to create a new object by typing your curly braces Take the old objects and put it as the value inside of that new object But start it with dot dot dot So if you create a new object and its only value is dot dot dot some other object What ends up happening is it takes that other object? It takes every single value from it every property value pair and it Passes them into the object as a comma separated list and it basically builds you an entirely new object with all of the same properties and values And again, you can do the same thing with arrays You can do the same thing with arguments to functions and again, this is very common in React it's it's also useful if someone's giving you an Array or an object and you don't know how many parameters it has or what the parameters are called Then you can use that to pass all of the parameters into another function individually In PHP we might do something like a for each loop where you loop through an object and you I Don't know pass each of the values one by one within that loop Maybe something like that But in JavaScript you just type dot dot dot and it will separate those values out for you and pass them as separate arguments Now earlier I mentioned that JavaScript is asynchronous and I gave the example of if on the first line You made an API call. It's very likely that the next 10 lines would finish running before the first line finishes But sometimes that's problematic if I want to make an API call and then I want to format the data I receive from the API call and this is a very common bug You know, you don't want to make the API call and then format it and have the formatting code run before the API call finishes So sometimes you want to tell JavaScript? You know, I know you're asynchronous by default, but I want these lines to be synchronous And so there's a concept introduced in ES6 Referred to as promises where instead of making your API call directly where you say You know go get this value from this URL and then immediately format it instead of doing that You can make a promise where you say Values from the API are equal to a new promise and inside of that promise you make your API call and What ends up happening is? the line one Technically finishes running immediately, but the value stored in that variable is a promise So when you get to line two and line three again line one does have a value, but the value is a promise and What a promise is it's it's a guarantee that later on We will convert into some other value will convert into an object an array an integer something else now That's that's I've painted part of the picture right because what next right? I say I have a promise It will be something else later Promises are the venable I'm not making up these words. This is how it's talked about. I'm so for each promise You can say for example I make an API call then Do something else so you might say promise The first promise is to make an API call then which means wait for it to finish when it finishes Do the following so then maybe you're going to format the output? Maybe you're going to display it And you can have multiple thens one after the other You can also as you see here you can have a catch so sort of like a try catch block in PHP So you can have multiple thens and you can have a catch So you would have a catch in case any of those calls failed So within that promise you might have some code to detect did this API call fail if it did fail Let me throw an error and that will skip all of the rest of the then calls and it'll go straight to the catch And you can handle that error If you're familiar with try and catch in PHP you might also be familiar with finally Finally allows you to run code Regardless of whether it was successful. So whether it was caught or whether it finished normally Finally runs at the end. Yes, six did not introduce finally. I believe yes nine did so You know Drupal core I think they're going as far as yes six if you're writing custom code You can use yes nine as long as you're compiling it down But I think the way you should handle it is as soon as you write any code, which is yes nine for example You should rename your file from dot j s to dot yes nine dot j s Sort of give yourself some information You know, we cannot stop compiling this file until yes nine is fully supported by all of the browsers And because of that because of the fact that there are maybe features that you want to use that are in yes seven or above You you do sort of have to Not don't take it for granted that these there are new features and we can use all of them You really need to sort of keep track. So most teams restrict themselves to Yes, six they usually say There are features in yes seven but on this project. We're not going to use those We're gonna make sure we stick to yes six. So whenever you're looking up these new features You might want to go to a site like can I use calm and search for the feature you're using that would tell you across browser compatibility But through there or through the Mozilla website The MDN documentation you can find which version of JavaScript Did the feature come out with or will the feature come out with? Okay now With Drupal if you're gonna do a decoupled Drupal site for example, you are going to make API calls and So you have to ask or you will encounter this question. How do I make those API calls? Fetch is the native option. That's available in JavaScript it can return a promise and It gets the job done There's Axios, which is a third-party plugin. You can download that with npm npm install Axios It's a very intuitive and very easy to use you can basically do something like Axios get this URL and it'll behave exactly how you expect it to Fetch on the other hand Requires you to write more code to get the expected results because for example if you make an API call and The end point says error, you know Error, this was an invalid request fetch is gonna say the API call worked success. They told us it's an error But Axios would say hey, they told us it was an error. You probably think that should be treated like an error So I'm gonna throw an error so Axios kind of gets the job done without you needing to think about it too much Ajax comes with jQuery you might be used to that if you've been doing Drupal That's the upside of it familiarity Downside is it requires jQuery and it's typically excessive So decoupled projects typically are not built on built on top of Ajax for the API calls So what should you use? Comes down to personal preference if you want to write less code and you want your job as a developer to be easier use Axios But if you want your website to have less code So if you don't want to download a third-party dependency use fetch So that will make you write more code, but it will make your website have less code I'd say most websites probably Axios if you're building something like Amazon comm where every bite matters because you have so many visitors Maybe you want to use fetch Okay in Drupal. There are a number of ways to expose the data through API Or I should say exposing data to JavaScript JSON API is available in core and therefore it's essentially the standard Option there is graph QL Nice thing about graph QL. You can download it as a contrib module But it can be installed either server side or client side and what it does for you is Think of it as Middleware between your back end and your front end so it can take as many inputs as it needs to from the back end It can say all right We're gonna take some sort one of the sources of data is going to be from Drupal One of the sources is going to be a third-party API and what it outputs is another API It's essentially an API endpoint which can be formatted however you like so JSON API it's It's a spec that Drupal core follows very closely The data is exposed in a very, you know predictable way graph QL on the other hand Is more like a middleware you can have JSON API data go to graph QL Graph QL can reformat it in a way that's easier for your front-end developers to use and then you can pass it through to them some teams prefer graph QL because Again, you format it however you like for your front-end team So your front-end team might not even know you're using Drupal because you truly can format it however you like And if you ever migrate from Drupal 7 to 8 to 9 to WordPress and then back to Drupal You can keep graph QL the whole time. You can keep your front-end API exactly the same So your front-end developers don't even know you switched So that's the upside of graph QL And then through the DOM JavaScript has access to the DOM So if you're only doing a little bit of decoupling think about whether you need an API endpoint at all Sometimes you can just expose some data in twig and then you can traverse the DOM sort of scrape that data from your own page Pass it into your React component or whatever you like and use it that way That makes sense if you're doing like one component or something very small But it doesn't typically make sense for a fully decoupled website So what are the advantages of decoupling? again, it gives you the ability to write your content once, you know in Drupal and Disperse it to multiple sources again the watch the mobile app the website billboard etc Separation of concerns so you can focus on the back-end development work front-end developers can Focus on front-end using JavaScript and CSS and they don't need to learn twig They don't need to learn something that's designed for the back-end tool that you're using so It also Makes it so that you can potentially hire front-end developers who don't know Drupal at all don't know PHP at all They know React or they know something that you know That is popular at the time That's one of the advantages of Decoupling it makes it much easier to build a team of front-end developers very quickly And also, there's a vast community very very large community of people, you know using react using Vue.js, etc And so it's often much easier to get help on your questions and such and there are also just like Drupal has modules React and Vue, etc. They have also Contributed components. They have basically design systems that are contributed Where you can say oh you have like a really fancy slider widget. So material UI is one of them For react you can get all these react components And then you can just start passing in your Drupal data and all of a sudden you have a really good looking website That's highly interactive Drawbacks of decoupling. There's an additional point of failure. So now you have two completely separate tech sex The front-end safeguards built into something like Drupal are lost. So for example Content validation on the front-end You have to recreate that Also, the accessibility Drupal is pretty accessible out of the box But if you throw away all of Drupal's front-end, most of the accessibility work that's done is in the front-end So you're going to have to redo it and that's no small feat I actually think that doesn't get enough attention But also the caching layers Drupal has a very thorough caching system with cache tags and such As soon as you fully decouple Now you have to worry about my whole front-end being served with JavaScript and browsers like to cache JavaScript So if I make an update to my front-end, it's possible my users won't receive that update, right? It's not enough for me to clear Drupal's cache if their browser cached it. So that's a whole nother layer You have to worry about. There are there are solutions, but they're not all that simple So it does make caching for complex websites more difficult So what should you use? I would say you should do a fully decoupled project If your site exists on multiple mediums So if I have a mobile app that Features most of the content that my main site uses then I'm already decoupling my mobile app if the data comes from Drupal I'm already decoupling the mobile app. I already have to maintain that API So at that point you can sort of double-dip and benefit by Decoupling your website as well Especially if there's not one single primary source of data if you're pulling in data from multiple sources Progressively decoupled think of it like partially decoupled That makes sense if you want to include some external information on your website, but really it can probably fit into a block So for example on the debug academy website We have an internal task Management sort of system that is a react app and that is decoupled But the rest of the site the front-end the course list page that that all comes from Drupal We don't really benefit much from Decoupling all of that so we are to progressively decoupled most of the site is not decoupled one page is decoupled pseudo decoupled is Sort of where you might be scraping some data from the page and decoupling it or you're Or you're also You know Yeah, basically that you're you're serving the front-end from Drupal, but you're supplementing it You're enhancing it with some react apps, but really the primary source is twig That might make sense if the if you need your Non-developers to be able to manage layout if you want them to use tools like layout builder It might make sense to do very light decoupling Otherwise, it's usually best not to decouple a Drupal website And one more note Just because JavaScript makes sense for your project. It doesn't necessarily mean that decoupling or that you need to use react this Website, I don't know what will happen if I click this link because it is the Nope, it did not pop up Because it is the conference Screen there we go. Okay, so this is an example of a decoupled app that I'm working on and I said decoupled. This is an app that I'm working on and It is somewhat interactive I Put in numbers here the numbers on the right side change you know, I can I Can just trying to show you that it does change even more so you see even another set of inputs appears And it is all sort of interactive It almost reaches the point where I want to use react because there are so many moving parts that Need to be updated at the same time But it's still a small enough number that I don't need to use react So in this case we chose not to use react because we felt like we could wrap our heads around You know, there are three numbers on the right that need to change There are two sets of inputs that need to change under certain scenarios We can manage that with a couple of functions in JavaScript If there were a lot more moving parts, I would have gone with react if we had Five more areas of the website that change, you know dynamically, I would probably go to react I think we're on the last slide Okay, yeah, and that's basically it. I run debug academy We are in a booth go all the way to the right as far as you can Next next to the coffee in the expo hall Feel free to come by say hello. We do have an architect series So even if you're an experienced Drupal developer, we can Teach you all about performance about maintainability of your code How to do front ends in Drupal quality assurance and more We have also if you are looking to get into back-end development We've got short courses on php symphony as well as advanced module development And of course we have a couple of classes on react and advanced react Specifically geared towards a Drupal audience. So if you're maybe a programmer comfortable writing code Maybe you're an experienced php developer That those courses would be good for you because we dive right into the code We don't spend too much time saying this is what a variable is because we expect you to have that background from For example php or javascript and we get right into integrating it with Drupal and react Yeah, most of these classes are short term and if anyone you know is looking to start their career in Drupal We also have a part-time three month course where we do a pretty deep dive in all things Drupal and help people start their careers I hope you found this helpful and I hope to see you in the expo hall


Hi everyone, I'm Javier Luraski and in this useR 2020 talk we are going to learn how to use the PINTS package to make your data science workflow reproducible even when you're using data sets. So a lot of the common kind of like anti-patterns that I've seen when using data sets is that well they fall into two categories. So the first one is we overuse iris and empty cars because it's just hard to get data so we just fall back to the easiest data sets to use. And the other one, a lot of times we don't include our data set in the code that we're trying to share or reproduce, right? So you know you can see a couple examples on the slides that I found from our bloggers where the data set is missing or where it requires you to provide manual steps to actually download the data set and that creates friction and ultimately leaves code that is broken. Now in general we talk a lot of times of the core data science workflow which was popularized by R4DataScience and in this workflow we start by importing data then tidying it, understanding and communicating which is all good but at a lot of times we also need to figure out where the data is. We need to search for data and we need to bring the data from a remote location into our local computer and a lot of times we also want to share these data sets with our colleagues, friends or the world. And this is what I call discover, cash and share which is something that the PINTS package was designed to help you resolve. And in general reproducibility is important. I don't even need slides for this but tools like Jupyter, our notebooks and our markdown were designed with reproducibility in mind. So we want to make sure that our data sets are part of this workflow and are not left behind with manual instructions, hard to configure, permission, dependencies and why not. We want to be able to take code, rerun it even if it has data sets attached to it. So what do we want from a package and a tool? Well, I think we want a few characteristics. One, we want to make sure that we have a single tool. We want to avoid relearning different tools for different storage locations. Second, we don't want to be locked in with a specific storage provider. Say that we're using Amazon S3 and then we want to move to Google Cloud. It should be easy to move from one cloud provider to the other one without having to relearn or change our code. A third, the tool should allow us to also create automated workflows that don't require authentication, right? Because that way we can also automate our data workflows and just make workflows that are more efficient. Fourth, it needs to work with any type of data. And by any type of data, I mean any size from small data sets to large data sets that ideally are hosted in things like HDFS to really scale up the type of data sets that you can store. Fifth, it should help us find interesting data sets because we are all tired of using iris and empty cars, so wouldn't it be nice to use additional more interesting data sets? Sixth, it needs to be fast, right? We don't want to be waiting for our data sets to load. And ideally, we also wanted to make sure that it works offline when we don't have an internet connection. These are all things that we consider when designing the PINs package. The PINs package allows you to pin a remote resource or a local resource into your local machine or into remote machines. It allows you to discover data sets and it allows you to share resources with others in multiple services like Kaggle, RStudio Connect, GitHub, S3, Azure, Google Cloud Compute, and Digital Ocean. The PINs package is now on CRAN. You can download the latest version, which is 0.4.1. And to use it, it's actually quite straightforward. So after you install from CRAN and after you run library PINs, all you have to do to save an object is say PIN, the R object that you are interested in storing, and then a name. In this case, we're saying numbers. And then you can retrieve the PIN using the name. You say pin get numbers. If you are retrieving a remote data set, you can also specify a remote URL. In this case, we're retrieving a smaller version of ImageNet from a zip file, all with one line of code, and then we're retrieving it from our local storage using pin get. You can also use pin find to find data sets. And not only that, but also this is nicely integrated with RStudio for those RStudio users out there. So what is a board? Well, a board is a concept from the PINs package that describes the storage location. So it's basically anywhere that allows you to store data. And currently, we have seven different storage providers that the PINs package support. You can store data sets in RStudio Connect, Kaggle, GitHub, S3, Digital Ocean, Google Cloud, and Azure. And it's basically quite easy to store data sets in a remote location to share with others. And all you have to do is include one line before you start using the PINs package, which is board register. So board register will enable this particular data set. We'll enable this particular storage provider to store your data sets.  And yeah, that's that's the way it works. Then you can do pin get to retrieve your data set. And you can optionally also specify the board name, if you want to make sure that you're retrieving the data from a very specific board. So that's that's how it works. If you had to manage permissions or look at the content or whatever, well, obviously, this is different between different storage providers, right? Like, if you were to go to RStudio Connect, the user interface that you would get from each storage provider is different. And also the defaults that they allow you to change as permissions and settings are a little bit different. So let's just take a look at a quick example. So in this case, this is the pins website. And you can navigate to use cases to take a look at a few things that actually are common cases of using the pins package. So the first one is reusing data sets. So as I was mentioning, a lot of times we spend a lot of time cleaning data sets. So we find the data set, we clean it, and we want to share it with others. And in this case, we're just executing one line to share this data set in RStudio Connect. But you can run very similar code to share it in GitHub or cloud providers and why not. And you get a preview of the data set. But more importantly, you also get a line that you can use to basically retrieve this data set from an R session with ease. A few other use cases, you can automate the data set update. So if you have a data set that a lot of people are consuming, you can basically create GitHub action or an RStudio Connect automated report to update this data set in an automated fashion. And not only that, but you can also create multiple pipelines. You can have two data sets that are automatically generated and then a third report that uses the previous two data sets to update something else or why not. And last but not least, also a pretty great use pattern of the PIN's package is to use it to preload data in plumber and shiny applications, right? So in this case, we have a deep learning model that trains overnight and takes a long time to compute and requires GPUs and why not. But after we finish processing this data set, what we do is we create a PIN, which then a shiny application can make use of by simply loading the data from a PIN. Not only that, but the shiny application uses what we call a PIN reactive, which is defined on the PIN's package, which allows you to update the data set reactively without having to require the entire data set. So it's kind of like the PIN's package is smart enough to only bring data when it has changed. And that's exactly what PIN reactive is doing with your shiny application. There's a few other features worth mentioning. The first one is that you can support multiple versions. If you're familiar with GitHub, you already expect the PIN's package to allow you to retrieve previous versions, but you can also use versioning with boards like S3, RStudio Connect Kaggle and why not. Some of them like the cloud boards require you to opt in since it comes with additional costs to store multiple versions. But nevertheless, versioning is supported in all the package and all the boards that the PIN's package supports. You can also extend the PIN's and the boards. So say, for instance, that you are dealing with a proprietary file system in your organization or something that simply the PIN's package does not support. You can obviously send us a pull request, but you can also create a package that implements four operations, which are create, find, PIN, retrieve and remove. If you can implement these four operations, you can have a fully functioning board, whatever storage provider that might be. And in addition, you can also configure how each particular R object is stored. For instance, when we store a data frame, it gets stored as a native R object and also as a CSV file for easy interoperability. But you can choose to store a ggplot or plots in general objects with their screenshot as well. And this is something that you can configure with an S3 method over the PIN verb. Last but not least, this is actually a feature that I think is quite great and almost no one knows about. Whenever you store data in a board, what the PIN's package uses is what we called the data.txt specification. This specification is just a YAML file that describes the location of your data sets and the metadata. So it's quite simple. It's just a text file that describes your data sets. But what you can do with these data, with this specification is use tools like the data.txt package, which allows you to generate a website for your data sets that are already available in the data.txt specification. So whenever you create a PIN in an S3 bucket, you also get by default these data.txt specification, which then you can use to point a custom domain name and basically pre-create this website out of the definition of your data sets. And this is how it looks like. So this is the seller subproject on the CASA.ai project, which contains a data set site with five different insurance-related data sets. And in this case, you can see that the data set has some of the contents and some of the column descriptions and summaries that you would expect. But what it's also really awesome is, apart from being able to see this website, once you have made your data sets public, you can easily interoperate with them from our studio or our in general, with a single call, which is a PINS board register, and then the path to your domain that contains the data.txt file. And you get in the connections pane, you can see all your data sets being displayed, and you can also view them, you can also PIN get them, and you can also, for instance, find them and why not. All right, well, thank you so much for attending this talk. If you want to learn more about the PINS package, the best resource to go at is pins.rstudio.com. If you want to keep in touch with updates on the PINS package, we are putting all the updates that our team is working on on their blogs, rstudio.com slash AI. We also have a YouTube channel where you can learn how to use big data technologies, deep learning and data management technologies like MLflow and PINS under youtube.com slash C slash MLverse, or you can contact us directly on Twitter, myself at Javier Luraski on Twitter, Kevin Ikuo for data.txt and insurance data related solutions, Alex Gold, which has been advocating for using PINS with RStudio Connect, and the rest of our team members on the Multiverse team, Daniel Siegret and Yita Boli. Thank you so much.


My name is Charles Ramsey and I teach history of South Asia at Baylor University and I'm also a senior fellow at the Religious Freedom Institute. And I'm here at USIP today to talk about Afghanistan and to talk about what I observed and what I'm hearing, what I've experienced about religious communities in Afghanistan. I've seen students and people that I've walked with because of their faith, because of deepening understanding of religious texts, of ideas from religious teachers, but also those from the secular studies have engaged in everything from protest to student action and different creative programs such as theater and music. I've seen such a spectrum of activities that were birthed almost without a great plan or great financial motives, but from something that touched their heart. Religion, it's different than history, it's different than economics. It touches something that's very personal and because of that it can tap great potential, potential to do wonderful things, but also more base things, things that touch on fear and on violence. And so it has great potential for good, but when manipulated or used poorly it can bring about great harm as well. And I've seen both. Religious actors will have a central role in the development of what's next in Afghanistan. They've had an outsized role over the past 20 years. We've seen this kind of group of clerics who've received special attention and special opportunities and who have played an outsized role in developments there. But I don't think they're able to carry this forward and so there's confusion about what will be next and who will lead. But one thing is certain to me that religion and the place of religion and the honor of religious actors will be essential in formulating that. And so speaking and engaging religious actors in a way that conveys honor and understanding and empathy is essential. It's important to remember that Taliban does not equal Afghanistan. It does not equal any particular community. It is one expression and one who many Afghans that I interacted with would say have outlived their use. Even the name Taliban by many is kind of outlived its use and so it's time to find something new. And so engaging religious actors I think will be essential in formulating what that new is. I think the pressure right now is on the caretaker government to justify the system that they have. And so far they have not been able to do that. They have fumbled over and again on articulating why women cannot be in school, why women cannot be in the workplace. Religious leaders and actors from Afghanistan and Saudi Arabia and all their neighboring countries have said what you're doing is not consistent with religious tradition. So how do you justify this and why? So far there has not been a cohesive answer from the Taliban leadership. There just has not. And so that causes us to ask what other factors are at play there because what they're doing is not consistent with their own sources of authority. As we're watching to see that develop I think there's a great opportunity for religious actors who are in the country, people of wisdom and experience, tribal leaders, male and female to speak. And I believe those conversations are happening. I don't believe for a minute that the conversation around the food plates in the evening and around the kitchen table so to speak are not happening. I firmly believe in the agency and the ability of Afghan women in these homes, whether in the village or the city, to speak and to hope for their daughters and for the brothers and sisters to have a future and a success.


Direct primaries are prone to massive rigging, says the People's Democratic Party Governance Forum and Minister of Interior Al-Fareq Bishala has been criticised for his call for the signing of deaths warrants. The Governance Forum of the People's Democratic Party PDP has condemned the proposed direct primaries recommended by the National Assembly in the Electoral Act Amendment Bill saying that it is prone to massive rigging. Speaking on behalf of the Governors in Bolchi on Monday, Chairman of the Forum Amino Tambol of Sakato State backing his claim cited a situation where President Bahari scored 15 million votes in the 2018 APC Direct primaries, only to score 15 million votes from the entire country in the 2019 General Election. The Forum lambasted the federal government for the use of underhand tactics and amt twisting of some PDP Governors and other stakeholders to join the APC and they called it a political party that is wrecked or has wrecked the Nigerian economy. Joining us to discuss this is Dhirah Odeyemi. He is the Deputy Publicity Secretary of the People's Democratic Party and also joining us is Adaji Usman, Publicity Secretary of the APC FCC Chapter. Thank you very much gentlemen for joining us. Thank you very much and happy to be with you this evening. So Mr. Dhirah, I'm going to start by giving us a clear, let's talk about what direct primaries are for the purpose of those who are watching us because some people would not understand what it is so I'm going to put it up on the screen. Direct and indirect primaries and I just want us to quickly just give a background to it. So in a direct primary election, registered members of a political party just vote for who they want to be the flag bearer of their party. Unlike indirect primaries where no delegates are involved, party members choose their representatives through polls like they would do in a general election. So this is the difference. I just wanted us to clear that difference. Now in the direct primaries which is being proposed in the Electoral Act Amendment Bill, I want to understand why the PDP seems to be against it. Isn't this an opportunity for everyone's voice to be heard, especially when you have Democratic in the middle of the two P's? There are two reasons involved in this. And the first is the fact that political parties should be independent and they should have a method of choosing whoever is going to put on their flag. So no law should compel any political party about how they are going to choose their candidates in whatever way and whatever form, whichever political party chooses the wrong candidates, then they are bound to lose at the general election. So I don't think it's the business of the House of Rep or the lawmaker to choose for us how we are going to select whoever is going to be a representative in any election. That is number one. And number two, just like Governor Tamboa rightly put it, if you say you are proposing a direct primary, it's open to fraud and it's open to raking. The example given was that during the direct primary of KPC, the president was able to record 150 million votes or whatever. And at the end of the day, during the election, that was the tax vote he claimed to have made him the president. So where's the difference? Are we now saying that it's only the membership of the political party that's elected him into office? So this we don't understand and based on the fact that we just agreed that political parties should have that independent power to choose how or who is going to represent them, I think it's more than enough. I want to take you back to something you just said. You did say that the members of the National Assembly do not have a right to tell political parties how to run their private business. But then let's look at the politics of it all. The members of the National Assembly are a makeup of the PDP and the APC. Maybe these people do not have a problem with it, but the governors do have a problem with it. So is it really about the fact that the parties want to be independent or is it that the maybe the governors have a different agenda as opposed to the members of the legislature? Yeah, you may be right. If you say that the way and manner the legislators are looking at it could be quite different from the way the governors are looking at it. But at the end of the day, they have represented our voice, I mean the governors. They have said what we wanted. And there's now let for the I want to put it to you that right now we try to make a kind of to clarify what really happened. It was a proposal mentioned by the speaker of red by Javier Miller. It has not been put into anything. Maybe they are going to put it into voting or whatever. What it is, it is a personal opinion of Mr. Speaker. And we are not sure to what extent that is going to have the support of other members. Interesting. Why is indirect primary is very important to the PDP? Why you obviously are a member of a ranking member of the political party? Why is it very important to you? And how does this help the democracy, the internal democracy in your party? We believe it is too cumbersome and it gives room for reading. Anybody can just come up with any figure that declare it and declare the candidate unlike the delegate election whereby you know the number of delegates. You were in Nigeria when PDP conducted its presidential primary in Kotaku. It was the most transparent election internally done that was you know applauded everywhere. So that is the kind of politics or that is the kind of election we take which will follow in order to be able to choose our leaders. Not direct one whereby anybody can just sit down anywhere and come out with any figure from any world or from any local country. But you make it seem as if if you were to try these direct primaries that it would not be controlled. Are you trying to tell me that as a party you really cannot control the primaries that you would hold within your party? Meaning that even when you go to the polls you also cannot control. I mean because what you're trying to tell me is that there is no form of internal democracy and you're afraid that if you throw an election open to all and allow everybody's voice to be heard then you're scared that you know someone might or will rig it. Where is the control in terms of the electioneering process within your party? Because if we do not expect some form of proper internal democracy in your party we do not we should not be able to trust you to hold any offices or run for any offices if you cannot get it right within your party. You are missing the issues together. The two proposals are the method to choose whoever is going to flag the whoever is going to choose. I understand but I'm following you up. No no no no I understand but you said that it would be over to you. But you cannot decide to which one is better. Well I'm asking you why you have chosen or you have kicked against the direct primaries if you haven't tried it but and then you quickly told me that you know you don't want just anybody to sit somewhere and decide who wins. I mean it's supposed to be a democracy everybody's voice will come together and whoever has the highest voice or the highest number of votes will be the flag bearer isn't it as simple as that? To even select a delegate involves virtually all the members of the party is a process on its own that is their level of involvement that is stage one the stage two is the delegates to elect whoever they now want as their as the candidates so it's still a process that involves virtually all the members of the party the two systems are good but one has an advantage of having a better control than Georgia and that is what I'm saying it's not that anybody is afraid about that. Exactly and I'm asking why can't you control the other? Can you now are you trying to force out to accept a system we know is super party? But you it's like telling me that you can't drive and I'm asking why can't you drive are you afraid to drive or you just don't want to drive this is it it's a simple question why is why do you why do you as a person think that the other is too cumbersome why? Because by the time you involve all the party members in such an election there is no way you can control if the number of voters they claim to have gotten is correct or not. Does it mean that you don't trust them? So it means that there is no trust within your party and its members you're telling me that for example I'm in Ward 7 of a certain local government area of your party and you're telling me that in that ward you cannot trust the ward chairman of your party to say that these are the number of people who actually voted and these are the people who voted for Mr. A and Mr. B you're saying that you can't control it because they might one way or the other tamper with the numbers so you do not trust the members of your own political party that's it. There's nothing to do with trust or nothing but we believe this is the best system that is so transparent and for everybody to know that is it can I be given the opportunity to speak on this? We will get to you Mr. Adagio please just hold on we'll get to you. Okay go ahead Mr. Duran. So we are as a political party if we decide to use indirect method I think that is the as a political party we have the right to say yes this is the best system I just mentioned where we have used it and we got a plot from Nigerians and that is the last residential election where people can think we're a match as our candidates. We believe that's the best method so and we cannot be quoted about it what matters is to have a candidate that will be presented with to Nigeria and that is why often now you cannot force the primary of a PDP anywhere because we have not lost governorship through 40 primaries. Interesting to you Mr. Adagio I want to understand why why does the APC that is if the APC is open to this proposition by the Speaker of the House of Representatives is this something that the APC is open to Mr. Adagio direct primaries? Well in the APC party's constitution the party is open to three methods of conducting its primaries one directs primaries two indirect and three consensus where consensus is most acceptable where you can sit down as a party and decide on a candidate acceptable party people it goes where that does not work it be holds on the party to decide on either the direct or indirect primaries in the case of Mr. President we have tried the three methods we have used direct primaries we have used indirect primaries we will recall that in 2016 2015 rather where we had our primaries in Lagos we employed the indirect primaries that brought about the president president Mahmoud Gowari as the candidate of the party where he contested among other four contestants and now that election was very transparent when my colleague did say that PDP had the most consents I mean a transparent primaries in Potacot I love I love because that primary that primary election that was conducted in Potacot cannot in any way be compared to what we had in 2015 in Lagos where you at the PDP's primary how do you know or how can you tell you're not a party man how can you tell that their primaries is not anything compared to yours we cannot speak for him can you if you were not there my name is Mary Ann my name is Mary Ann you cannot speak for the PDP if you were not part of their primaries can you bank as you speak now my name is Mary Ann what what what happened in in PDP in the primaries in Potacot is there for everybody to see what are putting the primaries of the APC in Lagos everybody to see they are there in the archive so these are not secret issues well let me leave that for now but what I'm trying to make you understand is that in 2015 we employed the indirect primaries we tested it and it worked for us in 2019 the president said we need to go by direct primaries we need to try all the options the direct primaries gives room to every member of the party to participate in the select in the election of who governs them every card carry member of the party is allowed to participate to vote cast their votes and say look this is our choice where somebody says they cannot be controlled that is not correct every card carry member of the party is known if your party had a total registration of 2000 it is expected that other primaries haven't done the direct primaries 2000 votes are expected when you have 2001 it means that something is wrong with that primaries so for anybody to say it cannot be controlled if we can control general election conducted by INEC where we have over 15 2030 million Nigerians casting their votes either can be controlled I wonder why a little less than two million three million members cannot be controlled in a party where you employ direct primaries so for us in APC we are very comfortable with all the three methods of conducting primaries which which which has which has the APC been using more often because right now there's so much split in the APC we're having we're having challenges within the APC in Akiti there's there's been an ongoing tussle within the APC in Quara so really which one has the APC used most importantly especially when we're talking about direct primaries we have conveniently used both the direct and indirect primaries in states I can give you I can give you for free that the last election primary election that we conducted in FCT we're all conducted through the direct primaries that is in 2019 all the House of Breasts Senate elections look at government elections were done by direct primaries I can also tell you that in 2016 we used the indirect primaries I can also tell you for free that most of our elections across so many states were done by direct primaries it all depends on what the state feels that is most convenient most comfortable most acceptable by the members of the party because the primary election is about them it is not about an individual but it's about the voters so what is most acceptable and comfortable and convenient for the members of the party at that particular is employed so long as it is within the ambit of the constitution the party's constitution if the House of Representatives decides that this will become part of the amended the electoral act that is being passed as about to be passed as a bill will the APC be comfortable with this particular one being the modus operandi going forward yet are you sure we are already used to it really because I asked the question that you glossed over the APC seems to be having cracks within the party right now and I pointed to choir stage I spoke about choir APC over and over that there's an ongoing squabble within the party the most recent is in akiti states so I'm trying to understand what type of internal democracy does the APC have in terms of states now now let me let me say this clearly any political party that is ruling any ruling political party is prone to having more members moving into the party and politics is all about interest where you have two three four five persons come together to vie for a particular position interest abounds and where you have interest there are rules for what you call cracks I don't look at it as cracks I look at it as normal political party struggles where you decide to play the game by the rule to decide to do whatever you can within the ambit of the law to win election so what is happening in akiti or is happening in um choir like you have said as far as I'm concerned it's not a crack but it is a sure way of people testing their potentials with regards to the voters casting their votes and then deciding who governs them thereafter so it is not a crack it is normal it is I would have agreed with you miss adage I would have agreed with you because uh I mean if I were if I were just to go by what you just told me but I have had members of the opposing sides from especially uh choir states on this show and the most recurring thing is that there was no room for democracy someone was foisted overnight by the opposing party on the whole party and this is the issue can you can you do you also understand okay I did tell you that there are three methods of spending hold on hold on that there are three methods of electing um they will represent the people in our party constitution are they told you about consensus are they told you about direct are they told you about indirect where the leaders meet and decide look when you say somebody says to if we are 30 and 27 agrees that consensusly this is the man that we want to govern us three is in the minority so you wouldn't say that what has been done there is the legal it is within the party's constitution it is within the legal framework of the party that consensus can be used where it can where it cannot then you employ the other two methods which is other direct or indirect so what is happening in part like I have said may have been brought out of the fact that leaders of the party across board may have settled for consensus but perhaps maybe some 30 minute number of persons who did not have their way may possibly want to take to the media to say look what has been done and so the minute number of people are the ones that are holding the party to ransom right now is that what you're telling me that the party is facing what they're facing now because of a handful of people don't forget don't forget in politics where you have there are times we could have multitude of persons who of course have their say genuinely and very few persons who could decide to take to violence may hold the place to ransom that does not mean that that is in the majority people checking people to ransom may have done that through violence and it's not everybody in the party that would want to go by violence so majority of the people may have done what is right but few persons who may not have gotten it right may want to use violence so holding them hostage or holding the people to ransom was not employed that the majority of the people are on that side I wanted to understand that great let me go back to you Mr. Duran there are many grievances that the PDP governor's forum hold against the APC I'd like to make mention of one recently the the governor's forum even before this meeting had come out to say that the PDP governor's forum had come out to say that the federal government is engaging in some form of am twisting and threatening most of their governors to join the APC and I'm really I'm curious as to why this is happening if it is really happening of course I know that you have lost two governors if not three so far to the APC why why do you think the governors have taken this position saying that the government is hand twisting them to one way or the other play to you know the rhythm of the APC the am twisting is very simple because APC is in power because they are in government they have a way of coaxing wherever they want into their party and part of it or one special part of it is the DSC and the argument we are saying is that if you believe some governors are corrupt why is it that you lure them to join you with the threat of VCC you see them as a devil in PDP but moment they cross to your to your party they become a saint and you no longer talk about VCC there are many governors that have been contacted not only the three of them that went the other governors have been contacted and they are only trying to safeguard the situation in the country they are not they don't want to mention it actually and that's why they use that word am twisting am twisting could be a way could be anything to lure you or to coax you into the other side and what we are saying as a political party is that if you are really fighting corruption do you now use that as an excuse to coax them into your party if you are looking for thieves and the thieves easily walk into your neck the next thing is to arrest them and irrespective of whatever is happening but as it is now they are coaxing their am twisting and what we are saying as a political party is that our motto is power belongs to the people no individual is bigger than PDP there has been instances when people left the party the party remain and there has been instances when they came back to the party the party remain so PDP with the main PDP that means because some people left there's some media they will not be PDP again they are here to do their congress and I can assure you by the time they finish their congress you never can say how many governors are going to coax the PDP upon everything I'm not saying this is good for a democracy it is a past system whereby people just wake up and stay PC today and tomorrow they are PDP but if the tables return you know I've asked you this question before what's the difference between the PDP and the APC I mean because when these people decide to cross over from the APC to the PDP the doors are wide open for them to come right in and the same thing is happening in the APC and you're pointing fingers what's the difference the lines of blood have you asked me I have just said it neither PDP or APC is benefiting from this is affecting our democracy it's affecting the growth of our democracy so why is the PDP not setting a trend if you think that this is a problem to our democracy as you have said what are you doing about it to stop the trend of cross-capteting and criss-crossing what we were proposing is an electoral law that we buy you from crossing to a political party with whatever office you may hold once you have that cross it will be very difficult for office holders to cross to another political party and not until that is done we will continue to see this cross-capteting affecting our democracy so for the matter that it is affecting PDP and for them it does only that I'm applauding it if they come to PDP generally it is a bad system that is affecting our democracy but if they come will you take them politics is a game of number and no political party ever short story against anybody political party is always open people can go in people can come out but there must be people all right well quickly Mr. Dajin closing the PDP governors have made many claims in fact they have said that the APC is a party that has wrecked Nigeria's economy the economy that the president promised to build when he came into power the issue of unemployment that he promised to deal with they also lambasted the APC and the presidency in terms of the insecurity that has been bedeviling the country they've talked about the fact that Nigerians have only witnessed nothing but misery and bad governance what do you have to say about this well I what I can say to you is for you to go back into his to go back to history once upon a time I like I don't like talking about this because um six years down the line I don't like to recall where we were before this particular government took over administration from the PDP but it will interest you to know that the the government was almost what in fact has fank completely was sinking completely at the time the APC came into power and Okoja Iwela the then of Senusila Mido Senusi who was of course the governor of Sibia Okoja Iwela who was the minister of finance and both of us and even Soludo they had all to say about where we were I'm sure Nigerians remember where we were in 2015 before we voted in president Buhari yes those were the problems of Nigeria and that's why Nigerians voted the president in what has the president done and the APC government to change that situation today that's my my name is Mary Ann I'll tell you for the last time my name is Mary Ann please remember that if you allow me if you allow me my analysis will take me to where you want me to go now the point is very clear we were we were we were we were the economy was so bad was in Shambu when we came in but as we speak today you could remember that salaries were not paid we were in recession when we took over but today we are taking the APC are taking Nigeria out of recession as we speak today salaries have been paid as a when due money from the federal allocations have been sent to the federal states the issue of security has been an issue that has been there in the last 10 15 20 years and this government has been doing everything possible to ensure that the issue of the security did your government promise that they were going to put an end to insecurity as soon as they go into office yes or no did the government promise that they were going to make all of our problems a thing of the past they are no magician did they promise I'm sorry sir did they promise that they were going to put an end to our problems yes okay and has the government been able to do that well it's almost six years down the line has the APC led government been able to scratch the surface of that okay unfortunately your your connection is breaking uh Usman Adaji is the all progressive congress party chairman for the fct and of course um Diro Deyemi is the deputy spokesperson of the People's Democratic Party thank you very much for speaking with us uh gentlemen thank you very much thank you very much for the opportunity all right well we have to go we'll take a short break and when we come back we'll talk about um the um situation by Raul for Erugbe Shalahi is calling for governors to sign the execution warrant of over 3 000 prison inmates why to decongest the prisons we'll be right back


A St. Lucian business startup that introduces medical tags to the Caribbean market in response to COVID-19 represents at the Entrepreneurship World Cup EWC 2020 Finals. Gilland Avril, founder of Engage, competed with 99 other finalists from around the world at the MISC Global Forum event from the 18th to the 20th of October 2020. Avril was selected as the EWC Global Finalist after winning the local leg of the pitch competition. We have a report on the recent recognition ceremony held at the GIS Studios. Gilland Avril is the 2020 champion of Entrepreneurship World Cup EWC St. Lucia. In a recognition ceremony, Avril was awarded US $850,000 worth of services from global partners of EWC for his pitch to introduce meditags or medical tags to the Caribbean market in response to COVID-19. This is the latest venture under his company Engage. Avril believes that his award-winning project was fated. I had a medical condition, a heart condition, and I felt that, you know what, I need to bring this to light because I started a project with the ministry, well, I was initiated a conversation with the ministry, and COVID-19 stopped that. So I was like, how do I now re-initiate that conversation with the ministry of COVID-19? So I said, Michelle contacted me. I was like, oh, Michelle, do I really want to take part in a competition? And I think two days before the end, I actually submitted my project. And lo and behold, I actually won the competition. And through Investiture, part of Investiture actually opened the doors. The same thing that I wanted to have done, that I could not have gotten a meeting of the CMO and her team through Investiture and winning this competition that allowed me to do this. Avril St. Lucia's 2020 EWC champion was also given the opportunity to compete with 99 other champions from around the world in the global finals at the MISC Global Forum held virtually this year, from the 18th to the 20th of October 2020. Entrepreneurship World Cup country director, Michelle Samuel, explained the journey to competing at the international level. St. Lucia's who have the dream of sharing the global stage with other phenomenal and change-making companies must first go through screening round one, the preliminaries, and finally the national finals in order to get that chance. After making it to the national finals, the winner will participate in EWC Accelerate 2 and can be selected as one of the EWC top 100, who will then compete at the global finals in Saudi Arabia. Unfortunately, as a result of COVID, the global finals will now take place online, which means we can all witness it and be part of it. This summer, EWC St. Lucia received 104 applications for the local leg of the competition. The top nine finalists were also recognized at the ceremony. Judges present, OECS Business Development Officer, Quasie Roberts and entrepreneur, Dinelle Florius, offered congratulations and words of encouragement to the winner and other finalists. I want to offer special congratulations to the winners. I think you did yourselves proud, did your families proud. We would like that this fire that is started to burn in St. Lucia, with what Michelle is doing here and supported by Invescent Lucia and so to continue to spread throughout the region. And I just want to encourage all of the entrepreneurs because being an entrepreneur myself, I know how tough it is, especially in the market in St. Lucia and the Caribbean as a whole. It's not easy to grow a business, especially a tech based business. And I'd also just like to employ you guys to never give up, because that is what is going to make you successful. The EWC is pegged as one of the world's largest and most diverse pitch competitions and support programs for the next generation of entrepreneurs globally, with 175,000 entrants applying from 200 countries. From the Government Information Service, I am Jesse Leance reporting.


This episode brought to you by Noble Gold. Now, it's not often you get a gift for it yourself in the holidays, is it? So, how does a free 22 carat American Gold Eagle Coin sound? Not bad, huh? A free 22 carat American Gold Eagle Coin in a special presentation box. But it's not that simple. To qualify, you have to take out a precious metals IRA or 401K rollover with Noble Gold.<PHONE_NUMBER> and get this special coin offer, but don't hang around. That's<PHONE_NUMBER>. Hey everyone, just wanted to quickly do a video. I'm doing a car wash right now, so I thought it'd be a good time to rant about something that has really bothered me this morning. I tweeted about it earlier. So I get up this morning and I see Brian Stelter has tweeted out a clip from his show with Daniel Dale, CNN's supposed fact-checker, and they're already putting out rationalizations to explain why they're going to seem like they're Joe Biden regime propaganda. And we're already seeing that. And so he tweets out this video saying, oh, it's not going to be that we're not fact-checking Joe Biden. It's just that Joe Biden doesn't lie. He doesn't lie. Trump's a big liar, so that's why we're always fact-checking. The trend right now is toward asymmetric line, one side line a lot more than the other. Now if it flips, if Biden turns out to be the biggest Pinocchio out there, then you'll be back on this program pretty soon, telling us. Be easier if Biden was an equal liar to Trump, for me, because then I could go and sort of showily demonstrate, look, I'm independent, I'm treating them the exact same way. The fact is, though, that Biden is not the same, and so the coverage of Biden is going to be equally rigorous, but the final product when we cover Biden is not going to be the same. All right, rub my nose in it, why don't you? And so that's why we're not going to be fact-checking him, so it's not because we're in the tank for Joe Biden.  It's just that Trump was such a prolific liar, and Joe Biden's not known for that. Joe Biden's, you know, straight Joe or whatever. Well, you know, Brian Stelter often talks about how Fox News and the right-wing media echo chamber create these alternate realities. Well, this is an alternate reality where Joe Biden's not a liar. Why does Joe Biden make so much stuff up, and will it hurt him against Trump in the general election? I had the great honor of meeting him. I had the great honor of being arrested with our U.N. ambassador on the streets of Soweto trying to get to see him on Robbins Island. Except it's a lie. Biden himself was forced to fess up on CNN. When I said arrested, I meant I was not able to move. Cops, upper conners, would not let me go with them, made me stay where I was. I guess I wasn't arrested, I was stopped. This guy climbed down on ravine, carried this guy up on his back under fire, and the general wanted me to pin the silver star on him. I got up there and said, God's truth, my word is a Biden. He stood his attention. I went to pin him.  Do not pin it on me, sir. Please, sir. Do not do that. He died. He died. He didn't pin the medal on the guy who wasn't a Navy captain. He just made it up. And Biden has told a story time and again over the years. I made a mistake. I said it 14 years ago, I trusted George Bush to keep his word. He said he was not going to go into Iraq. Except Biden was calling for war with Saddam Hussein in 1998. The only way we're going to get rid of Saddam Hussein, and it's going to require guys like you in uniform to be back on foot in the desert, taking the son of the, taking Saddam down. The moment shock and awe started, from that moment, I was opposed to the effort and I was outspoken a complete fabrication. Some of my own party have said that it was a mistake to go to Iraq in the first place. But the cost of not acting against Saddam, I think, would have been much greater. When I marched in the Civil Rights Movement, I marched with tens of thousands of others to change attitudes. We changed attitudes. When I was about the age of the guys standing over there, I got involved in the Civil Rights Movement. He knows it's untrue. Don't take my word for it. Take his. I was not an activist. I was not out marching. I was not down in Selma. I was not anywhere else. It would almost be easier if Biden was an equal liar to Trump, for me, because then I could go and sort of showily demonstrate, look, I'm independent. I'm treating them the exact same way. I think what bothers me most about this tweet from Brian Stelter and the tweets from Daniel Dale is that it's just such flagrant gaslighting and lying to the American people. I know that just more of that is coming. We've dealt with it for the last four years, but folks, it's going to be even worse than the Obama years. It's going to be even worse than them ignoring all these things that they call scandals now. They ignored them back then, and then called a scandal-free administration, and then suddenly these things become scandals under a Republican administration. You can guarantee that's all any of this is. All they're doing is setting up the justification for the fact that all these fact checks are going to go away. There may still be fact checks, but there'll be fact checks of Republicans, and there'll be fact checks of criticism against Democrats. There'll be fact checks in service of promoting and pushing a Democrat party agenda. It just bothers me that they think they can get away with it. In this latest tweet from Brian and Daniel, it's just so in your face gaslighting.  It's like the video that I put out yesterday from the view, and Meghan McCain suddenly saying, oh, Joe Biden, he's a national treasure. Americans love Joe Biden. Since when? I mean, where were these massive shows of love for Joe Biden in the run-up to the election? The way I remember is that everybody hated Joe Biden, and he had no chance, and Kamala Harris called him a racist, and then suddenly they have nobody else that has any possibility, so he becomes a guy. And suddenly we're just supposed to forget all that. You're supposed to forget that he plagiarized JFK speeches and other speeches, and forget that he lied about being at the head of his class.  Brian Stelter and Daniel Dale literally are just pretending like that never happened. They've created an alternate offshoot reality where that never happened. And now don't worry when you're not seeing fact checks of Joe Biden because it's just that he doesn't lie, everybody. Of course, like I said, back in the day before Trump, it was just commonly accepted that when a politician's mouth moves, they're lying. But no, no, no, no. Now that's, no, Democrats always tell the truth. They're always perfect. The bad people are their opposition. It's the people that criticize us here at CNN. It's the people that stand in opposition to all the free programs and all the free stuff that Democrats want to give you. So that's where we're at, folks. That's what is really what impassions me and keeps me going to do this because I don't understand why the public can't see the harm in what they're doing. It's very harmful to this country. It's very harmful to people's trust in our institutions, which they claim is their highest, is the thing that they care about most. And yet they are the ones destroying any trust in these institutions. This is a great example of it. And you know, where's the Twitter fact check? Where's the Twitter fact check to say, well, Biden is a liar and here's, this is a disputed claim. Where's that? It's not. It's nowhere to be seen because fact checks aren't actually fact checks. These people don't actually care about the truth. They care about their own power and their own politicians getting that power.