In this video, we're going to look into the string data type, in particular in how we create strings and how we obtain strings from various sources. So let's open a new text file, a new notebook file, and rename it to text ipython notebook because we are modeling textual data here. So we have seen a couple of times that using the double quote notation creates text objects. So if I write in there, for example, random text and execute that, Python understands it. And the reason why is because that is the so-called literal notation to create text objects, to string, so-called string objects. So whenever Python sees the double quotes, a starting double quote and an ending double quote here, it knows that everything that is in between is part of the text that is to be modeled. However, the representation of the object that is created below the cell has a single quote. So you may wonder, what is the difference here? Well, there is no real difference. So double and single quotes are perfect synonyms. So you can use either double quotes or single quotes. You have to be consistent, but both are perfect synonyms. So which one do I personally use? I personally prefer the double quote notation for the main reason that here it is clear that this is a string, a textual object without any characters inside. If you use here instead the single quote notation, then maybe you can confuse that with one double quote. And if you work all day with code, then you don't like confusing things on the screen. So I prefer double quotes. And also a major reason why the double quote notation, I guess, is more popular in recent years in the Python community is because there is a very popular code formatting tool. A tool that automatically automates the formatting of your source code. And it's called black. And it's called black because it goes back to a quote that was given by Henry Ford. He said you can have cars. So Henry Ford, the car manufacturer, so he said you can have the car in any color as long as it's black. So in other words, there's only one color to choose from. And in a similar spirit, the black tool, the black code formatting tool, gives you back your Python source code in one and one only way. So here we have, and this tool simply prefers or uses double quotes instead of single quotes. That is why it is very popular in recent years. So let's check quickly the type of that. And it's, of course, also string as we could have guessed. And now what are further things that we should know about when talking about text-through data. So let's go ahead with another example, a bit more complex example, but not too hard. So first I make a markdown cell here and let's write a quote by Albert Einstein. So Einstein said, if you can't explain it, you don't understand it. Period and quote ending. And I hope in my videos that I kind of can explain what I want to explain. Otherwise, this would be an indication that I don't understand a couple of things. And probably some of the videos are a bit hard to understand because I still need to get more feedback from you in what are better ways to talk about content. But let's continue here with this quote. So let's say we want to model this quote here, this entire sentence here in memory, in our computer's memory. How could we do that? So let's simply go ahead and first of all copy paste it. And let's try to use the double quote notation to create a text object. So let's simply paste the sentence in between. And we can already see with the weird coloring here that we have red here and black here, but this is an indication that Jupiter lab does for us that Python will probably have a hard time understanding that. So let's quickly run the cell and indeed we get a syntax error. So syntax error means that Python cannot even read what we are giving it. And the reason why is because it thinks that the first double quote here indicates the beginning of a string literal. And then anything that comes after it should be part of the string's value. And then the second double quote here is indicating the end of the string. However, it is not really the end. The line goes on and that is the trouble here. So what can we do here is we can give a hint to Python that the second double quote here should not be the end of the string. So how do we do that? We use the so-called escape character and in Python this is the backslash. So backslash quotes basically means that the quotes here have a meaning other than the end of the string. And in general, the escape sequence, so the escape character, implies that the one character following has a meaning other than its literal meaning. So in this case, it simply means put a quote there as part of the value of the string object. And of course, we will do that here as well for the second double quote inside the sentence. And now if I run the cell, it works. Python understands it. We don't get a syntax error. And what now Python gives me back is it gives me back a representation of the object that is now in memory, but it defaults to single quotes. So just like above, whenever I enter something with double quotes, Python usually defaults to single quotes. There are a couple of exceptions from this rule, but usually we get back a notation with enclosing single quotes. And Python does that here as well. And now what we see in this notation is now the single quotes here are escaped. So backslash single quote means we escaped the single character. And the double quotes, of course, do not need to be escaped here because Python can clearly understand that if we begin the string object with a single quote, then double quote is simply part of the value of the string. So let's copy paste everything here into another code cell just to prove the point that the representation that we see here is a so-called literal notation, literal meaning we can simply copy paste it as it is into another code cell and it works. It is a valid Python code. So this creates another object with the same value. Okay, so now you may be confused. You now see that below the code cell we have these weird characters that we actually don't want to be part of the text that we are modeling. So the thing is, the backslashes here, they are only part of the syntax in the source code to make this happen. They are not part of the semantic value of the object that we create. So remember back in chapter one, there was a video that I did on object orientation and that three properties every object has and one of them being the semantic value. And the semantic value is basically what the object means to us as humans. And to us humans, the backslash, the escape character, the backslash here has really no meaning. It is really just syntax to not cause an error here in Python. So what that means is if I take, for example, this entire piece of code here, which is valid Python code, and I put it in between the, at the argument to the print function between the parentheses, then we are now printing out only the value of the text object, of the string object. And now what we see is the weird backslashes, they are not part here. And also as a minor detail, there is no red number seven here. But if I go back up here, there is a blue five and a red five and a blue six and a red six. But here is only a blue seven. The reason why is these two cells, they give me back some object, some reference to an object in memory. And this cell here does not because the print function has no return value, it returns none. Instead, the print function has a side effect. And the side effect is in this case, it prints something to a screen and it just happens to be both below the code cell, right? So up here we have a so-called literal notation that we can copy paste into a code cell. And then it's valid Python code. This is what usually the text representation of an object in memory is. Instead, if we simply copy paste the value of the string, then I get a syntax error again. So the value of a text object is not necessarily valid as a Python expression. And what the text representation of an object is that it's valid Python. We will see very much later on in this course when we talk in chapter 11 about classes and how we can design our own data types. And we will also among others talk about the text representation of objects. And the built-in objects, the string object in this case, they also have a text representation. And in this case, Python's text representation defaults to the single quotes. Okay, so note that the value of a string is not necessarily what you can read here in the text representation of a string. Okay, so let's go ahead and see further escape sequences and a little bit of more syntax before we can go on with other stuff. So let's say you want to go on and you want to write a list of things and you want to separate that into several lines that you want to see. So let's write here a list of colon and let's now break the line and say step one, break the line and say step two. And let's do it one more time and say step three. So let's say I want to model a text object that contains a list of things, right? And yeah, I just want to model that as a string. So let's do that with the double-core notation. And again, I get a syntax error and it says EOL, which is short for end-of-line while scanning string. So the end-of-line is simply here because we have a new line character. So I'm breaking the line right here and that is the end of the line. And Python, for syntactic reasons, when we start a string using either a single quote or a double quote, does not expect that. It cannot handle that. So it expects that everything, the entire string as we see, must be on one line in the source code. Okay? And so how can we fix that? So there is an easy fix and the easy fix is to simply use the so-called triple-double-quote notation, or maybe simply triple-quote notation for short, which we have seen previously when we define functions and we use the triple-quote notation there to implement the doc strings, right? That document the input-output relationship that is behind the functions that we have implemented. So if I now execute the code, now I don't get a syntax error, so instead Python understands it. However, as we see, Python gives me back a text representation where we have these backslash n's in there, right? And a backslash n is simply an escape sequence that indicates a new line. Okay? So just like backslash single quote or backslash double quote means put a double or single quote within the text, the backslash n simply means break the line. But only this regards only the value of the text object. So where do we see that? Well, if I go ahead and I copy-paste that into a new cell, and let's say I pass that as the only argument to the print function, now I see a list of step one, step two, step three on four different lines, okay? So now this string, which is a so-called multi-line string, is actually shown correctly as we would expect it, okay? So again, this here is just the text representation of the string object in memory that we can use to simply go ahead and copy-paste that. And we see that we get back in this valid Python code. So we get back another object which happens to have the same value. And of course, if we use the print function, and we go ahead and we print this, and we copy-paste in this one line notation here with the backslash n's, then we also get back exactly the same output as above, okay? So we really have to get used to the idea that the way text is portrayed in syntax, the text representation, that's the formal word for it, is different from the semantic meaning of what is inside the text, what is being modeled by the text. This is what we would see as, you know, printed out when we use the print function, for example, but we could also do different stuff, right? We don't have to simply print out to, in this case, below the cell, but we could also print or write to some file, right? And maybe when you write to some file later on, you also want to break a line in there. And this only regards this file then into which you write. It does not regard the object as it exists inside the Python process, okay? So get used to that. It looks maybe a bit weird for now, but you will get used to that. It's not too hard. Okay, so backslash n is just another escape character. Okay, so what else do you need to know about the triple double quote notation? Well, obviously, you could also use a triple single quote. So if we say, let's say, a, b, c, if I enter that, we get backslash n, a, backslash n, b, and so on. Why do I get a leading and a ending backslash n? Well, obviously, we have a line break here. So right here, there's one line break. And also down here, we have a line break. This is why we have the backslash n's here and here. And this is why you often in code see simple dot strip here. So we have seen the strip method before. I think the last time was in the video when we covered modeling interactive games, guessing games. So what does the strip method do? The strip method simply removes leading and trailing white space. So this is something that you often see in source code. And now you could actually go ahead and you could probably put in some more empty lines. This will basically not make the value, will not change the value in any way. And now you can format everything nicely in terms of text. But the backslash n's between the a, b, and c, they will not go away, of course. They are, of course, part of the value of the text object. So this is everything that you need to know about the so-called different kinds of literal notations. So there are two kinds of literal notations. It is the single quote and a double quote. This is one kind of literal notation and the triple quote notation from so-called multi-line strings. This is another built-in literal. Of course, you must not forget we can use the str constructor. So let's say if I pass 7 to the str constructor, I get back 7 as a string object. That is almost trivial by now. Then, of course, just as a reminder, there is a built-in function called input, which takes as an argument a prompt, which happens to be a string object. So maybe I say enter something. And if I do that, then a text box opens and I can enter text. And then the return value of the input function is simply the text object. But as we see, it's a proper text object using single quote notation here. And if I go ahead and let's say I put in one single quote as a text, or maybe I say you don't know that, then what I get back is a literal notation using double quotes because Python is smart enough to know that I don't have to backslash that here, escape that if I use double quotes instead of single quotes. So the problem with the sentence above was that we have both single and double quotes inside. But if we only have one of them, then Python defaults to the other one to use as the delimiters here. So input function is also a source of how we can obtain string objects. Let's look at another very important source where we can obtain string objects. So what we see here on the left-hand side, I created a file which is called lauromepsum.txt. I can open that with a double click. And this is simply a file holding textual data. And so now I show you how you can open a file in Python. We do that using the built-in function called open. And the open function takes as its argument a string, as its first argument a string with a path to the file. So let's put there simply lauromepsum.txt. And now if I execute this cell, what I get back is a so-called textIO wrapper object. So this is a special object of type textIO wrapper. So this may be a bit weird for now, but let's store the object in a variable. Let's call it file. And now you already may guess what the IO wrapper object is. Well, it is really a model of a file. And how does this work? So maybe I'll show you a little diagram in memory of what happened in memory as I executed the cell. So when I run the open function, then what happens? Python will create a new object. And let's put here as the type of the object simply IO wrapper, IOW maybe. And it has, of course, a couple of ones and zeros in here. And what the ones and zeros here do is they do the following. Let's assume that this is the border from the operating system to the Python process. So this is now OS world, the operating system on your computer. And the operating system not only handles the random access memory, the so-called RAM memory, basically the short term memory of your computer. It also handles what happens on disk. So let's assume somewhere the operating system gives you access to a file that lives on your computer's hard drive. And the file contains, for example, textual data. So let's maybe call it TXT something. It's a text file. And what this IOW wrapper object does is really just a pipeline that goes from inside the Python process to the outside world. And this way, the Python process can look into the outside world and obtain data. In particular here, it can load in data from a file on disk. Okay. So this is what happens in memory. And in the example, I gave it the variable file. So we also should put the variable file here. Okay. So this is what has happened so far in memory when I execute this line here, the line open and then a path. So why is opening a file so weird? So the reason for that is I haven't so far opened any or I haven't so far read any of the content of the file yet. So the only thing I have done is I have created this pipe to the outside world, which gives me access to a file on disk. However, I have not yet read in anything from disk so far. So how can I do that in Python? So I could do that one way of doing that is I could simply loop over the file object here. So I could say for line in file and let's simply say print line. And this will show all the texts that we just saw in the text file that I opened in a different tab here. So this is now one way of how to load in data from a text file. So you may wonder why do we have to go so far to make that happen? Why couldn't we just load in all the text data right here at once? Well, the reason is quite simple. Usually, so this here is the modeling the Python processes memory and anything, any program that is running on your computer, so-called processes, they only occupy basically the space inside your computer's short term memory. Okay, this is the memory that gets erased when you restart the computer. Right here, I'm basically saying, okay, this is supposed to be the disk. So this is basically what is not erased when you restart your computer. And now the problem is this, the disk space usually these days is goes into the terabytes already or at least gigabytes. So in other words, the space here in terms of how big the space is is very big. Your computer's working memory, the RAM memory is usually a lot smaller compared to the disk drive, right? So RAM is usually very expensive. Hard disks are usually very cheap. So therefore, it could happen, it could be the case that the file that we want to read is simply too big for our computer's random access memory. Therefore, the Python core developers, they decide the open function such that we only get a so-called proxy to the outside world. And then this proxy here allows us to obtain, for example, a line by line. Okay, so we are only reading in a line at a time. And we do that by iteration. Okay, so in a previous video when we talked about the difference between abstract and concrete data types, I introduced the term interval. An interval is any object over which I can loop, for example, with a for loop. And obviously, the file object here, I can loop over it. So what do we learn from that? We will learn from that that file objects are modeled as some sort of a proxy to the outside world and we can iterate over them. So they are iterables. Okay. And so we are iterating over them using the for loop. And we're simply looping one line at a time. And now it happens that the iteration variable, the line called line here, also exists after the for loop is done and it is still set to the value of the last line. So let's do that. Let's look at that. And as we see, it is still set to the value of the last line in the text file. What we also see here is a backslash N. So every line in the text file that we just opened ends with a new line. So maybe I open the text file one more time here in the tab. So we see that the end of almost every line here is simply a new line. So these, the new line characters, they are also read in somehow. And this is what the backslash N does. And we have seen above when I print it out, when I say here print line, the backslash N, these special characters, they go away when printed out. However, we see that the variable line points to a object of type string. So let's prove that it is a type string. So type of line is of course string. And what we see from that is that every line in the file when we loop over it becomes a string object. So this is just another way of how to obtain string objects. So above, we looked at the way to use a constructor function or to use literals. And now we, by opening a file, we have a third way of how to obtain string objects in the Python process. Okay. So before we end this video, there is one thing that I want to get across. So what we did now, we looped over the file object. So we looped over the proxy, right, over this proxy object here. And what the proxy does is it really isn't it. So I throw it here as a pipe to the outside world. But what this proxy really is in a bit more detail is like a cursor. So in other words, at first the cursor looks at the very first spot or at the very first character inside the file. And now if I make one iteration in the for loop, what happens is this cursor will move. So let's do it like this. We'll simply move to the second line, right? And so on. And as we loop through the for loop that we have in the example, at some point we reach the end of the file. And that means our cursor that goes from the proxy object is now at the end. And now one thing you need to understand is, if let's say we go ahead and we go ahead and loop one more time over the file object, we get no output. Why? Well, the reason is because the cursor does not automatically move forward. So there are two ways of solving this problem. One, there is a method on the file object, which simply would put the cursor back to the beginning or to any other spot where we want to put it. Another way of doing it is to simply create another proxy object, which then automatically is started by pointing at the beginning of a file. So when we loop over files, we must always remember that the file object is a proxy to the outside world. And it not only points at some file, but it points at some spot inside this file in particular. And it always remembers that. And this way we can basically move through a file line by line or one character at the time or however we want to move. And that is how this proxy object works. And now there's one more thing I want you to understand. So for technical reasons, any operating system can only obtain so many open files at the same time. Usually it's around about 1000. So let's use the file object here that we still have. And let's call or let's look at an attribute using the dot operator. So I use file dot and let's use the closed attribute. And the closed attribute gives us back the value false. So the closed attribute tells us that the file is still open. And we shouldn't do that. So when we are done reading a file, we should close the file because again, for technical reasons, your operating system can only handle so many open files at the same time. And so whenever you are done with some file, the good practice is to simply close it. How can you do that? Well, you can simply go ahead and say file dot close. And now we are calling the close method on the file object. Before that, we access the closed attribute on the file object. And now we are calling the close method on the file object. If I do that, and of course it does not take an argument, it takes no argument. We're calling it like that. And now if I go ahead and ask Python, hey, is the file closed? It will now tell me yes. And now if you go back and we try to loop over the file object one more time, I now even get a value error. So what did the calling the close function do? Well, what it really did is this cursor that points to the outside world will now simply be removed. So the file object here, the proxy object is still existent in our computer's memory, but the cursor going to the outside world is now removed. So if we try to now do anything with this object here, then we will get an error message. In particular here, we will see IO operation on a closed file. Basically this means the file is closed. We can't do anything with it anymore. So now this file object is totally worthless. So the only thing that we could do now is we could simply create another one using the open function again. And now we can basically loop over everything as before and properly close it. There is a nice syntax that we have not yet seen in this course, which is the so-called with statement. So with is basically what we call a context manager. And let's do that to end the video. Let's open the file, but not simply by using the open function just like that, but by using the open function together with the with statement. So we say with open and now we will say as file. And now what I will do is I will go ahead and I will say for line in file, print line. Okay, so this is the same code that we executed above here. But now I'm executing this code as we see in the context of the with statement. This is why we call this the context manager or a context manager because the code block here is indented. So it's one level of indentation. And that means this code block here, the for loop is basically executed in the context of this context manager. And for the open function, the context manager has only one purpose and the purpose is to automatically close the file so that you don't forget it. So if I go after the with statement and if I ask Python, hey, is the file closed? Just like this. So we know that this is not this code here is not inside the context anymore. It is after the context because it's not indented. So if I execute this code here, now I will see all the content of the text file. And also we get back through here because the file is now closed. So it's automatically closed. We don't have to manually close it. So that's a nice trick to know. And we will see a couple of other examples of the with statement in future videos. For now, simply treat it as you can understand it here. It is simply executing some code in its context. And when concerning the open function, it is simply closing the file automatically so that you don't have to do it, nothing else. So it's the same as above, but we don't have to manually do it. Okay, so we have learned quite a lot here in how to create different ways of creating text data, different other sources of how to obtain textual data, in particular the input function that gives you back text object and also the open function that gives you back a file object, which then gives us back string objects. So these are various ways of how to deal with textual data. And also remember that there is a difference between the syntax of a text object here to create it and also its value. And its value is the thing that we see when we print it out. Okay, so there are a couple of subtleties in this video that you should understand. So in the next video, we will see how the string data type has also some nice abstract properties that the list data type has. It's very much related to the list data type and we will do so in the next video. So I will see you then.


Ladies and gentlemen, a very good morning. It's a real pleasure to be with you at the fourth ECB Forum on Banking Supervision. And thank you to the ECB for inviting me to speak here today. During the last ten years, the agenda for banking regulation and supervision has been dominated by the global financial crisis. That financial crisis showed that financial regulation was too lax. So we've spent the past decade bringing in reforms to tighten that regulation. And this latest crisis prompted by the pandemic showed that those reforms have been effective. Our banks stayed resilient and they helped deliver some of the public supports to households and businesses. But we have not yet finished the job. We need to finalise the reforms we decided on after the financial crisis. And that will let us look towards preparing the banking system for the future. The reality is that our world is changing fast. If we want banking to benefit from change and not be overwhelmed by it, we need to take action. With the pandemic came an acceleration in the digitalisation of the financial world. Finance has also woken up to the urgency of the climate crisis. The financial system that we will see in ten years time, perhaps even in five years, could be very different to the one we have today. We will not be well prepared for the future if all we do is look towards the past. But to move beyond the post-financial crisis agenda, we must first finish what we started. EU banks are more resilient as a result of post-crisis reforms and of high-quality supervision. This year the European Banking Authority is celebrating its 10th anniversary and the single supervisory mechanism is turning seven. The EU's single rulebook made our bank regulatory framework more robust. We addressed many of the flaws the financial crisis brought to light. Now banks are much better capitalised. They have enough liquidity and they are not excessively leveraged. But there are still some gaps in the rules that we need to close. The Commission recently adopted a new banking package that addresses some of the deficiencies that remain in the provincial framework. The first part of this proposal implements the final Basel III reforms. The main element that remains to be implemented is to limit the ability of banks to excessively reduce capital requirements when using internal models. The proposal aims to increase the comparability of capital ratios across banks. The reforms avoid a significant increase in the overall capital requirements of EU banks and the reforms would be phased in over a long period, giving banks time to adopt. Our proposal is faithful to the Basel III agreement while using flexibility within the international standards. It includes targeted adjustments to reflect the specific features of the EU banking sector and the EU economy. In particular, it recognises the significant contribution of SMEs, most of which are not rated to the EU economy. We are taking into account the fact that European banks finance low-risk mortgages and keep them on their balance sheets. We are also taking into account that our banks have an important role in financing big projects and infrastructure. And EU banks' long-term equity holdings will not be treated as speculative investments. On top of that, the reforms are proportional and help reduce compliance costs, in particular for smaller banks, without losing prudential standards. The second part of this banking package is about making sure that banks are more resilient when it comes to sustainability. We are introducing requirements for banks to manage ESG risks systemically and consistently. Banks should also set out transition plans. And we are giving supervisors the tools they need to enforce those requirements. The third part of the package is a series of measures to strengthen supervision. One weak point addressed is the rules for non-EU banks with branches in the European Union. These third country branches have a substantial footprint in the EU and they provide important services. But right now, they are regulated at national level and there is a lack of consistency between the approaches applied by different member states. And that's why we are proposing minimum standards for the regulation and supervision of third country branches, moving to a more coordinated approach. And we are also taking this opportunity to respond to some of the lessons we learned in the Wirecard scandal. Notably, we're clarifying our rules on financial groups headed by a fintech company that have a bank as a subsidiary, so that they are properly regulated and supervised. We are also proposing minimum requirements on supervisory independence based on international best practices. So on the Progencial Regulations side, we are on track to achieve what we set out to do following the financial crisis. But after that financial crisis, we also decided to build the Banking Union. The Banking Union was a response to the Eurozone sovereign debt crisis. We realized we needed the Banking Union to back up the economic and monetary union, our common currency, the Euro. The Banking Union is vital to protect the European banking sector from a future crisis and to safeguard financial stability. The banking sector has remained stable during this crisis, but if we do not complete Banking Union, we have no guarantee of this stability in the future. So we need to live up to our promises as policy makers to do all we can to prevent another banking crisis with all the impact that would have on lives, livelihoods and taxpayers' money. The Banking Union will also provide a strong regulatory framework that can accommodate change. Because the financial sector is changing and we need a system that fosters consolidation for scale matters, including across borders. And we need to ensure that banks that do not adopt can exit the market in an orderly way without threatening financial stability. But here we still have a lot of work to do. We want to strengthen the crisis management and deposit insurance framework. We know that the cost of a bank failure should be borne primarily by a bank itself. But when extra money is needed, the common safety net financed by industry should be used and not public funds. If a bank fails, taxpayers should not foot the bill. We also need to build the third pillar of the Banking Union, a European deposit insurance scheme. The Banking Union will only be complete when this EDIS is in place. Reforms by the EU in this area have already helped protect citizens' money and reduce the risk of bank runs. But of course national deposit guarantees schemes can only go so far. EDIS would make common safety nets stronger and more consistent across the EU. This would make national schemes more resilient to large local shocks. It would help to maintain the trust of depositors, regardless of where a bank is located. And banks in trouble would be less dependent on national governments. To start with, EDIS could provide liquidity to national deposit guarantees schemes in need, strengthening depositor confidence and making banks more robust in a crisis. But the Commission remains convinced that a more ambitious EDIS setup involving loss mutualisation is needed in the steady state of the Banking Union. Progress on the crisis management framework and EDIS should help increase market integration. We know that the home host debate is sensitive. Only when our banks are European in both their success and failure will we reap the full benefits of the Banking Union. And the Banking Union requires making hard choices and reaching difficult compromises, and so far we have not been able to do that. In short, if we want to successfully navigate a changing banking landscape, we first need to complete the post-financial crisis agenda. But if we want our banking sector to be well positioned to embrace the latest technology and support the green transition, we can and must go beyond it. As I mentioned, digitalisation is fundamentally changing the financial landscape. Technology companies, large and small, are increasingly offering financial services. This increases competition, but it also makes value chains more complex, making it harder for supervisors to have an overview of the risks. It can fundamentally change banking service supply chains, introducing new critical suppliers and a new category of risks that must be managed. It also has consequences for the business model of traditional banks. New fintechs unbundle the full service model of traditional banks and big tech companies enter financial services using data and extensive customer information. Last year the Commission put forward a digital finance strategy. We want financial institutions, capital markets, consumers and the economy as a whole to be able to make the most of new technology, such as blockchain or artificial intelligence, while addressing the risks. Today I want to focus on how the Commission is addressing cyber risk, which is key to banking supervision. According to research by the ECB, there was a 54% increase in the number of cyber incidents reported to the ECB last year, compared with 2019. Indeed, the financial sector is the sector that faces the most cyber attacks. A digital financial system needs to be resilient to these risks. The Commission's proposed regulation on digital operational resilience, or DORA, defines common rules for all parts of the financial system to ensure that they can withstand all types of ICT-related threats. The rules we want to put in place are robust, consistent across the financial sector and proportionate. The draft regulation also addresses the risks of large technology providers that offer ICT services, such as cloud computing to financial firms. Third-party providers of ICT services should be subject to EU-level oversight. We're working hard with the Member States and Parliament towards a swift agreement on the new rules. Making sure banks have the right procedures in place to be resilient to cyber risk must be a top priority for banking supervisors. And supervisors need to understand the technologies, such as artificial intelligence, that banks are using and monitor the risks they can create. Beyond these new risks, technology could fundamentally change the financial system. The very nature of money is changing. Money is increasingly digital, as cyber currency and stable coins gain in popularity. But for now, this digital money is private money. Also, central banks, including the ECB, have been thinking about central bank digital currencies, whether we need digital money backed by a central bank, in the way that cash is, and how that would be designed. According to the Atlantic Council, 87 countries, including the United States, China, Japan, the United Kingdom, are at various stages of looking into central bank digital currencies. Seven countries, mostly in the Caribbean, have already launched CBDCs. In the European Union, the ECB has begun the investigation phase for a digital euro. The Commission is working closely with the ECB to explore what a digital euro could look like, and we are carefully considering the potential impact. A digital euro could bring benefits for citizens. We already face situations where cash cannot be used, like when making online purchases, though a digital euro would be a complement to cash and not a replacement for it. A digital euro would give consumers more choice about how to pay, and therefore increase financial inclusion. People who currently don't have a bank account, or have difficulty accessing cash due to bank branches closing, could be brought into the financial system. Beyond the benefits for individuals, the digital euro could also support our ambitions for the EU retail payments market. It could help private intermediaries develop truly European payment solutions, using European infrastructures and standards, and it could support instant payments. It could also help us achieve some of the political goals of the European Union, such as support for innovation, supporting the digitalisation of the economy, and strengthening the international role of the euro. But there are big questions to address as well. Like what would the impact be on banks? How do we ensure that privacy is protected? How would we keep this digital system secure? Introducing a digital euro would be a big decision, and one that we would have to get right. And if we decide to go ahead, then the digital euro will have to be well designed. So I look forward to continuing our close collaboration with the ECB on the next steps in this project. The other fundamental transformation confronting us is the transition to climate neutrality. Economy, society, politics all will need to change. And to meet our sustainability targets, all of our policies must contribute, including in the area of financial services. I mentioned earlier that we use the opportunity of the new banking package to ensure that banks take account of ESG risks. This transformation will not be easy, and that's why the Commission's sustainable finance strategy is so important.  The ECB's economy-wide climate stress test released this September shows just how important addressing climate risk is. If we do nothing to tackle the climate crisis, we risk knocking 10% off European GDP. The climate stress test by the ECB, as well as those that we in the Commission have mandated, the European supervisory authorities to carry out, are a key way to figure out where the vulnerabilities in the financial system lie. We want to know how climate change affects financial institutions, the exposure of banks to biodiversity loss, environmental degradation or extreme weather events. At the same time, we want to know the impact that financial institutions themselves have on the climate and environment through their financing decisions. Looking at climate risks from both these perspectives will help us make the financial system more resilient to climate change, and enable it to make a full contribution to the climate transition. In conclusion, we have not yet finished implementing the post-financial crisis agenda, but we must complete the process for the sake of financial stability, and we must finish implementing the reforms for another reason, to allow us to move on from the past and look to the future. There are many challenges ahead. Cyber risks and climate risks are just two, but there are also huge opportunities to build a financial system that delivers for both people and the planet. As regulators and supervisors, we must help the financial system navigate these choppy waters as we safeguard financial stability. Thank you for your attention. Thank you very much, Commissioner, for your insightful contribution. Let's follow up with a few questions. You analyzed how ESG risks are implemented in the bank's risk management. How do you plan to advance risk management practices and prudential supervision in that regard? Well, this is a work in progress. The 2019 banking package already integrated certain ESB elements into the prudential framework, so large listed banks will have to publicly disclose ESG risks from June of next year. And we have an EBA mandated study into whether differentiated capital requirements are needed to better capture environmental and social risks, and the results of this will be hugely important. You know, the Commission already had a public consultation on potential further measures aimed at better integrating these ESG considerations into the overall prudential framework, and this came after the adoption of the European Green Deal. I think the importance of holding on to the risk-based approach was certainly something that was stressed, so that we have to take account of ESG risks, but that this shouldn't lead, for example, to a decrease of requirements where there's no evidence that the green nature of the assets leads to a reduction of financial risks. So it's a complex discussion. Our latest proposal takes a step further towards the inclusion of ESG considerations into the prudential framework. We're introducing specific requirements for banks to implement this systemic management of ESG risks, and we're also giving supervisors the tools they will need to enforce these requirements. You know that we've asked the EBA to bring forward their work on dedicated capital rules and ESG risks to June 2023. That's two years earlier than planned, because we need evidence to assess the implications of introducing, for example, a brown or a green or a social factor into all of our planning. And as we expand the scope of ESG disclosures to all banks, so not only large enlisted ones, while ensuring proportionality for the smaller banks. You pushed for expanding AML CFT rules to the entire crypto sector. How do you walk the tightrope of mitigating the risk without stifling innovation? Well, I suppose the overall comment I'd make is that innovation and regulation are not enemies. They should actually be friends. So if we have smart forward-looking regulation, this can create the conditions where innovation flourishes. Regulation, in my view, is the key to provide legal certainty. And the legal certainty is needed by market players, both the new and established market players. And we need to confidently develop and offer new innovative products and services. Regulation, I think, is also vital to manage risks, and therefore to build the trust that investors and consumers need to fully buy into these new offerings. And I suppose that's the rationale behind our approach to crypto assets. Our framework for markets and crypto assets will introduce a bespoke regime for previously unregulated crypto assets, including stablecoins. And I think this will provide legal clarity. It will help to boost innovation. And at the same time, solid rules for issuers and service providers will prevent abuse, fraud and theft, protecting investors and safeguarding market stability. And already the Member States and the European Parliament are making progress in their negotiations on the draft regulation for markets in crypto assets, and we're urging them to keep up the tempo so we can get agreement on these new rules this autumn. Because crypto assets are evolving fast, enabling innovation, homegrown firms to enter the market, while also attracting retail investors. It is our policy and our duty as policymakers to put sound rules in place as quickly as possible. And then closely linked to this proposal is a pilot project for market infrastructures based on distributed ledger technology, DLT. This pilot will create a safe space for market players to experiment with issuing, trading and settling securities using blockchain technology. And again, the trial negotiations are proceeding well, and I'm hopeful of an agreement by the end of this year. The technology has the potential to increase efficiency, but we need to be clear about how it works in practice. So the pilot will allow us to test this in a setting that balances innovation and safety. It will run for five years, and at the end of that period, we will decide on whether to adopt our existing legislation to ensure that it's effective in fostering responsible innovation. So as of next year, market participants will be able to test the use of DLT on a large scale in asset classes such as shares and bonds. And this is a great opportunity, not only to give our capital markets a much needed push, but also in particular for smaller firms to attract new business. Thank you, Commissioner. And one last question on the Banking Union. The European Parliament just discussed the Sixth Report on Banking Union, which stressed the need for progress. Will the Banking Union ever be completed, or will it be work in progress forever? Well, look, it is work in progress, and we believe it has to be completed. The Parliament's annual report on Banking Union comes at a time where the sense of urgency to complete the Banking Union has eroded. And we've seen political stalemate over the last years. What we need to do is highlight that we cannot wait for another banking crisis to continue this work. And the Commission very much shares the commitment on the need to complete the Banking Union. And we appreciate the work of the European Parliament in calling for increased efforts to achieve our common goals. We want to strengthen the second pillar of the Banking Union and review the crisis management and deposit insurance framework. And also to build a third pillar of the Banking Union, a European deposit insurance scheme, and a solution for liquidity in resolution. The Commission has, you know, repeatedly stressed the importance of the Banking Union completion for the achievement and the progress of several other flagship initiatives because the benefits of a more integrated Banking Union are widely recognized, both to promote financial stability but also to look ahead and finance the necessary transitions, digital and climate change. So again, the Commission supports the efforts to create this ambitious work plan towards a steady-state Banking Union. And we're ready to take our responsibility with concrete legislative proposals. It is really vital that discussions continue with the aim of reaching an agreement. And I would say to the point of your question, while the negotiations are difficult and the sense of urgency may have been eroded somewhat, our determination to complete the Banking Union is as strong today as it was when we made a decision that we needed the Banking Union. And frankly, we needed more now than ever because of the rapid change in the entire banking system and the financial world. So while it's difficult, we're determined to achieve it. Thank you very much for your time, Commissioner. Thank you very much.


Hi fynd, rydw i'r brad o'n fawr yw anglion iawn i'r ffermlynedd ac yn ddod am ymwneud am ymddiw'r ffaith llenniol yng Nghymru. Yn ymddiwch yn ymddiwch, mae'r fawr yn fawr, ychydig yn ymddiwch yn ymddiwch, ymddiwch yn ymddiwch yn fawr, ymddiwch yn ymddiwch yn ymddiwch, ymddiwch yn ymddiwch yn ymddiwch. Felly, i'r ffaith yn ymddiwch, I'm going to be using glow bright floss number 16 so catch your floss in and start taking your floss down the hook, touching turns, cut away your waste piece, take your floss down to the bend of the hook. For the tail I'm going to be using fly box span flex in white, catch it in, two turns, make sure it's sitting on top of the hook, stretch your floss, tie it in, touching turns on the weight, back up the hook towards bead, cut away your excess, take your floss, touching turns, back down the hook. For the back we're going to be using sci by stick foil fluorescent yellow. All I've done is cut a strip away around a mill and a half to two mill in diameter, tie it in on the back, make sure it's straight, take your touching turns, back up the hook towards a bead, pull your foil up the back of the hook, pull in with one loose turn, make sure it's straight and that you're happy with the way it's sitting, which I am, take three or four locking turns and break away your foil. All it's left to do is build up a head at the back of the fly, take your whip finish tool, put a three turn whip finishing at the back of the bead, pull it tight, trim away your floss, trim your legs to your desired length, I like mine quite short, make sure you're happy with the way they're sitting. Now to finish the fly off I'm going to give it a coat of gulf classic clear UV resin, so apply a small amount onto the top of the hook, use a dubbing needle to spread it evenly around the fly. At this point you're not worried about time as it's not like varnish, it only cures when you put the torch on it. Again you can always apply more if you need be, you're not in a rush, you're not in any hurry to finish the fly. Work to the resin so that you get a shape you're happy with and flies evenly covered.  Once you're happy that is the fly complete, a great pattern for this time of year fishing under the bung and definitely worth having in your fly box.


We're going to be starting the next talk. Next talk will be by Barry Harris, and he's going to be talking about how to do snippets to boost your hook-commerce website. A round of applause. Thanks, Martha. Can you everybody hear me okay? Perfect. So two things are at the front. One, I'm from Newfoundland, so I may say some words that you don't understand. And two, I may speak fast. So if I do, let me know. So yes, I am that whole. So for people that don't know, that is a Radio Shack Color Computer 2. That was my first computer system that I learned that had a version of basic on it. The first one I purchased did not have any way to save data, so if you turned it off, you lost everything. It started over fresh. My next upgrade was a cassette player where I could record and save programs too, and you would have to actually listen to the tape, wind it forward until you got a blank, push, play, and it would load code into the computer. My next upgrade was a hard drive. No, that's a lie. My next update was a five and a quarter inch floppy disk, which had 360K of data available on it. So my next upgrade was a hard drive, which had 10 megabytes of data. So that's where I started. So I spent 34 and a half years in the military as a logistics person, beans, bullets, and gas. I found that if you get that right, everything is golden. A vehicle accident in Kosovo in 1999 started my release process from the military. What happened was I was rear-ended in a motor vehicle accident, and it injured my back, so I could not carry on doing soldier-like tasks, like carry a 50KG rucksack, couldn't do the farmers' carry where you're carrying a 300 pound or the same weight as you on your shoulder out of a building. So I couldn't do that. So in 2012, I finally said, I can't do this anymore, and they started the release process to release me out. So I've always enjoyed computers. In 1999, in Kosovo, I was working out of a sea container because we didn't have any offices. So I was in the logistics in supply, actually, so we had spare parts and the beans, bullets, and gas.  And you had to do them in that order because if you'd mixed them up, if you did your issues before your receipts, you would get errors, and your inventory would be out. So we had a technical visit team come in, and they were using barcode readers back then, and it blew me away. They would scan an item, get the quantity, adjust the quantity, and it saved it to a database CSV file, and I said, what are you doing with that CSV file? And they said, we're going to, when we get back to Canada, we're going to upload that to the database, and your inventory will get updated, and I like it. Can I email that CSV file to the data clerk who was in Montreal? And the guy said, I don't know, so he linked us up. So I wrote a program in Visual Basic that did all our transactions, created the CSV file, and every morning I would send her off the CSV file. So our inventory was always up to date. That was my biggest program back then. So I was released from the military in 2016. Part of the program with the military is they have an insurance program through manual life where if you are injured, they will retrain you. So I went to BCIT and took a web design course. So I did that for a couple of years, found out that I don't like design.  I still do some, but I hate it because design is very personal to people. So I'm working on my Bachelor of Science with Athabasca right now. I'm 80% done, eight courses less. I started my business in 2016. I did not know anything about website building business.  Do you need help? And my very first client was a fellow veteran who was running an auspice retreat in Nova Scotia, and they said, our hosting guy just died. And we don't have any hosting anymore. Can you do it? So I agreed to take on those guys, and they're still my client today. I did their website for nothing. But the beauty thing about that was they told people. So they told people. I gained more business. And the more work I did, the more referrals I got. I discovered WordPress, WooCommerce, I would say, about 2018, because I was writing websites by hand with HTML, CSS, JavaScript, and PHP. And updating those, it just was, I did not have the time for it. So here I am today. I'm a freelancer. All my own business. I'm out of Vegas, EPC. I have 350 websites under my belt to date. And I have not marketed yet. I don't think I will ever have to. Because WooCommerce and WordPress, there's enough work out there for everybody. So here's what I use for my development setup. I have a Mac Mini M2 that I use as my main coding machine. I like it for speed and graphics. I like the Adobe suite on it for doing my graphics and my videos. My text editor is sublime text. I have used others. I have used visual code, but I like sublime. I use a software package, local WP, on my local computer to develop all my websites on. So I keep a local copy on my local WP. And this is free. What I like about it is it has an email capture part built into it. So when I'm testing websites, the emails never get sent out. The emails get captured within the system. And I test all my sites on Chrome, Firefox, Edge, Safari. I used to do Opera, but the user base was not there. Those four capture about 98% of all web browsers out there. I also test on iPhone and Samsung. I do have a Windows system that I use, and I have several Ubuntu systems that I use to test on. I use DreamOS as my main web hosting company. They're one of the top three recommended by WordPress. I also have websites on OVH, Web Hosting Canada, Cloudways, Kinsta. The OVH one is interesting because when they had the fire in their server firm, a lot of websites went down. Not mine because mine were in Canada, but I learned a lot about backups then. One of the great things about DreamOS is their staging process. I can have a staging and a live site being hosted together, and I can migrate easily from one to the other. Some of the hosting packages that I have learned not to like, and I'll tell you why in a bit, are any of the hosting packages that are owned by Endurance International Group, EIG. These include Doxter, Oskater, there's iPage, there's a whole bunch of them. The reason I don't like them is not that they're not good hosting platforms. What I don't like about them is they don't give me access to the actual server itself to touch it, and I like being able to touch the actual files on the server. These guys do not like to do that. We went to some caveats on my talk. When coding for WooCommerce and WordPress, use the coding standards. They provide you with a good example of how to properly code. If you follow the coding standards, your code will be fine and it will live on through different updates to WordPress WooCommerce. Always sanitize your data and escape your data. What do we mean by that? You don't want people inputting stuff into your forms and your fields that contains JavaScript or code that will trick people into doing stuff with your website. If you don't sanitize or escape your data, people can import JavaScript into and then take over your website. Always use a child theme. I cannot stress this enough because if you make changes to a theme in WordPress and don't use a child theme, any time the theme updates, all your changes are lost, so always use a child theme. Functions.php is a file inside of the child theme that you can also put all of these code snippets that I'm going to give you into the child theme. The difference between the PHP or Functions.php and the code snippets is that if you ever want to change themes, you've got to make sure that you take your Functions.php. If you use code snippets, I can export from one website, change the theme, and carry on. One of the things that I found out early is when you're copying and pasting from the internet, be very careful of quotes. The quotes that you see on a website are not necessarily the same quotes that you need in your code. And test, test, test. WordPress hooks. This is where we get into the meat of the lecture. So WordPress has actions and filters. The main difference is actions run a function at a specific time. Filters modify the data that's in an already existing function. And you can tell the difference what they are in the code. If you're looking through a code and you see a do action, that's an action hook. If you see apply filter, that's a filter hook. So when you're changing up your code and you're looking into the code for WordPress and WooCommerce into all the PHP files, the different classes, and I highly recommend you get in there and find out how they actually do things, because that's how I learned. I got in there and I actually played with the code and said, what if I do this? What if I do that? Can I change this? What if I do this? And that's how you learn. The biggest things on actions and filters is an action will return nothing. It'll just change the way that a function works. A filter will always return something. And we'll get into what the differences are. So here's an example of the actual code from these files within WooCommerce. So in the orders.php file, you will find this do action WooCommerce before account orders pagination. That is a action hook that you can touch now using snippets. And then the WooCommerce shipping code class, there's an apply filters where you can apply to different shipping methods. So you can add your own shipping methods to WooCommerce. And the references are there. Business Bloomer, I use this site, not daily, but I use it a lot created by a former Word Camp presenter Rodolfo. He has built some great visual hook guys where you can actually see the actual place. These are the actions and filters where you can inject code into the different sections of your WooCommerce. So what are snippets? Those are just basically short sections of PHP code that you can inject into your site.  Where to find them? Google is your friend. The only caveat is you got to test everything you take off Google search engine because some of it is outdated and some is not updated to the newer versions of WordPress WooCommerce. WooCommerce, they have their own section, code snippets that you can use. Rodolfo, that's Business Bloomer. Him and I have collaborated on a couple of websites. When I had a problem that I couldn't solve, I went to Rodolfo. He's in Italy and he was worth every penny I paid him. The guy is brilliant. Michael Erickson, well-known PHP coder, WordPress guy. On limited WP, they have a bunch of snippets you can use and WP Explorer, these are just some. If you just Google WordPress code snippets or WooCommerce code snippets, you'll have enough to read for days. So now that you have a code snippet and you understand what you want the snippet to do, how do you add it to your WordPress WooCommerce site? One, you can add it to the child theme in the functions.php file. What that does is every time WordPress loads a page, it loads the functions.php and that code is available for that page to use. The other two are plugins. They are both good. I use both. So I would say code snippets, 80%, WP code for 20%, but WP code, if anybody used insert headers footers plugin in the past, they're the same people. So they allow you to insert code into your header and footer and now they also have where you can input snippets into your pages. So should I use a snippet, should I use a plugin? There are plugins for most of the code snippets that are out there.  So I am a fan. I have used all of these plugins, but I nowadays, I would say 75%, I use code snippets instead of plugins. And a lot of these are paid plugins. So this is basically what a code snippet looks like. And there are use cases, and I'll explain what the use case was. These are short code snippets. You can have code snippets that are 1,000 lines long and more. So we had this one website. They sell liquor products online. They have 5,000 products. We pull their inventory from GlobalTill, which is a major POS system. And we pull their inventory every 15 minutes from GlobalTill to update the WorldCommerce website so that their inventory is up to date. Problem is, every time it updates an inventory, every 15 minutes, there's an action scheduler that runs, and it saves a log file. So my web host sent me an email one day, says, hey, what are you guys doing? Your database is 1.5 gigs. Trim it down. So I go in and look, and the table for action scheduler was 1.5 gigabytes, one table. Wordpress, WooCommerce retains that data for 30 days. So how do we get rid of it? Let's go back up. The back end code, there was a filter called action scheduler retention period that tells WordPress, WooCommerce, how long to save the log files. And these two are the same process, just the timing is different. And it's very easy. So all you add to the code snippet is add filter, areas where we want to attach it to, areas to function we want to run, which is the same as this, and it returns, remember functions always return something, weekend seconds, which is a standard, which the number of seconds in a week. So what this function does now is it only keeps the logs for one week, then it wipes them out. This one does it, what we found was even when we added a week, we still got over a gigabyte in data in one week, but then we just changed it to this, and the web host was happy. So now we're going to get into the different types of snippets that I use all the time for WooCommerce. There are actual product snippets that show on the product pages, cart snippets that will show on the cart page, checkout snippets that show just on the checkout page, and then there's miscellaneous snippets. And I got about four or five of each just to show you what can be done. So product snippets. So this little snippet here hides that. So if you don't want to show the product made of data on your product page, this little bit of code removes that. This number here is the priority for running this snippet. You will see when you look at the WordPress WooCommerce code, a lot of the functions in the action and filters have a priority. If you set your number to a number that is lower than what's there, it'll run before that one runs, if you do it after, it'll run after that bit of code runs. If you do it the same, it replaces it. So this one is the same. So it just replaces this, removes that. WooCommerce pages. There are tabs that show a description, additional information. You can have a shipping tab here. This one, code, removes this tab. And you get into the code, you can remove that. You can add them. You can add your own tabs. Can you CSS to hide this? Right? Because this comes with its own class, NID. You can use CSS to hide it. When you do CSS to hide and set the display to none, the code is still in the back end code. It's still there. It's still getting searched, it's still getting part of the index. Using a code snippet, takes it up, never gets seen. This little snippet, some themes have a breadcrumb. This client did not want WooCommerce breadcrumbs, hated them. So a couple lines of code, took it out there. We could have used the child theme and changed the template file in the child theme to remove it as well, but this was simpler. This one was a little bit tricky. One of our top websites is another liquor store. By the way, liquor stores and cannabis stores are the two most popular clients I have nowadays. Since COVID kicked in, these guys all wanted to be online. So this one client, they're on track, they're going to do 10 million sales on their WooCommerce site this year. They run a sale once a year where they have a special product that they bring in and what they did not want was one customer coming in and buying the whole lot. So what this does is it limits any one order to two bottles. The reason there is so much code here that is longer than the previous snippets is because in WooCommerce you have things that are called simple products and you have things that are called variable products. And this does the simple products, this does the variable products. Limits them both to one bottle. Limits them to two bottles. And this item was very, very popular. Like I say, people wait once a year when they do their mail-chimp mail-out. People are just hungry waiting for the sale to start. This is one, the client wanted to know this because they used a third party to create their stuff. So the third party needed some lead time. So this notice, they wanted this notice to show on all their products that required extra shipping. And the way we got to select the products is not included in there is we used a query that if the product ID matched the products that they were at extra shipping requirements, this message shows. Any other products that they did not need at the time of shipping, message doesn't show. And there's different, there's some different use cases that you can use this for. And this is another example where we use just one product using the product ID. So if it is this product, show this message. You can also use this, let's say you have 10 products, just use an array of product IDs, loop through it, if the product ID is in the array, don't show it. This one was not tricky but was interesting and we couldn't understand why the client wanted to say that one each. We couldn't understand that. But the client wanted it, so we coded it. We haven't figured that one out yet. But it was just a couple lines of code. Now we're going to go into some cart snippets. This client wanted us to show on the website how many items were in stock. So if the customer saw there's only one in stock, maybe it would have impressed them to buy it because there's limited stock. This was a little different one because we have, there is a couponing system in WooCommerce that you can use but they wanted to show the customer how much off they were saving when they purchased their item. So because there was a lot of code there, this is what they wanted the customer to see, the regular price and the sale price. They wanted to see the discount amount to show on the cart page, not the product page but on the cart ship, on the cart page. This was for one of our liquor stores. They had a shipping and handling fee that they wanted. You can get a plug-in that I had, shipping and handling fees. But they wanted to have $10. Wanted to show us shipping and handling fee on the cart page. And this is what it does. It automatically totals, automatically updates with just those few lines of code. This one, you may have noticed on some websites, WooCommerce, when you change the quantity in the cart, you have to click Update. This code, since anytime there is a click on the quantity changer, it automatically updates for you. And what we did as well is we used CSS to hide the Update button because you didn't need it anymore. Here's something that a lot of clients asked for in that when they have somebody on their cart page is they don't want them leaving their cart page. They want them to go through with the checkout. They did not want links to their products on the cart page. There, there's the link, there's the link gone. This one, our client sold one product. They did not want people going to the cart page. They wanted to go from Buy Now to Check Out. And what this code does is it updates the buttons, gets rid of Add to Cart, Buy Now, and it's there twice because you have simple and variable products. And then, when it's done, it just redirects to the checkout. Now we move on to some checkout snippets. Every WooCommerce installation comes with company name optional field. They didn't want that. This bit of code takes out this. All of the fields that are in the billing can be removed by on setting them. So if you want to remove any of those, just use this code, on set the ones that you don't want, like building address line 2. Very, very few people use that. There is a caveat. Most payment gateways require the name, the address, and phone number for fraud detection. You can do the same thing with these shipping fields. You don't want them, on set them. This client wanted us to have a shipping field. They shipped flowers, but they wanted the recipient's phone number in the shipping field. So this code, and it validates as a phone number required, can be true or false. There's a text. The type is a telephone. There's a text that gets shown. I don't have one. It saves it to the database, retrieves it from the database for the order. This one was a little interesting, and it made sense for cart abandonment. On a normal WooCommerce site, the email address is way, way down. If you capture it up front, that gets saved to the database, and you can do cart abandonment with it. With these few lines of code, move the email address up to the top. Made the priority number one. This is one where our customer had free shipping over $200. If their customer's order meant that, they did not want to show any other shipping methods. Just show it a free shipping. And this is the code that we put in. And what it does is it goes through an array of all these shipping methods on the site. And if free is available, it sets it up as free as the only rate, breaks, and returns. The shipping method. Here's another one. The client did not like the coupon at the top. They wanted the coupon at the bottom. So we moved it to the bottom. What this did for them, believe it or not, is they got more full-price sales. Believe it or not, even though they sent out coupons, they got more full-price sales because coupons took away from their profit merge. Trust image. This client wanted to let people know that their system was secured by PayPal. You can use Moneras. You can use Stripe. You can use Square. You can use any image. And this image is straight from PayPal, right? Here's the source of it. It is approved for use by PayPal on your website. And all this code does, puts this image there. There's no link, but the image is there. You could wrap this in an A tag with the link to PayPal. Why would you? Don't give your customers a chance to leave your cart or checkout page. Now, these are miscellaneous snippets that did not fit anywhere. They're not product. They're not cart. They're not checkout. This is one. There is a plugin out there called Follow Up Emails that will send emails out to your customers and say, how did we do? There's a code snippet. You pay for it. There's a code snippet. This little bit of red here is a link to a Google reviews page for the business. So they are sending an email. Seven days after the order is completed, they're asked, can you please do a review on Google for us? And they are getting tons of these getting filled out. We had a client that went away on vacation for two months, and he didn't want to shop to sell anything. So what do we do? If the user is not logged in, i.e., not an administrator in the back end, remove, add the cart button, remove the pricing, remove so that nobody can buy from the website. There was a paid plugin that does this. It was a little, how shall I put the word, cheat? They had a third-party email, and they were being charged by the number of emails being sent out. I said, well, let's change your email provider. No, I've been with these guys for years. So they wanted to turn off as many emails going out from the system as we could. So whenever somebody changes a password on the website, it sends out an email. So we just turned it off. So no longer sends us password change. And you can do that for just about any of the emails being sent out. Here's one I use.  Do this on your testing site. And what it does, this little snippet will show you the actual items in the cart array for troubleshooting. So if I have a problem that a cart has not got the number of items, or I put this snippet in and I get to see what's in the cart. I use this one all the time. Again, don't use it on a live site. This client, they operated a boutique invitation-only website. If you were not invited to the website as a customer, you could not buy. So the way we've got around that, or the way we've implemented that functionality is we set it up so that if the user is not logged in, we send them back to my account page to get them logged in. You don't log in? You can't buy anything. Share this slide. Yeah. I've provided these slides to the WordCamp team, and I think they're going to be available. If not, pop me an email, and I'll gladly email them to you. So this is the continuation of these people, if they're not logged in, this is what they see. Cannot see the prices? Must log in.  I built this for this conference. This customer wanted the shipping methods sorted by price. Cheap is at the top, most expensive at the bottom, and there's the magic code there that does it. It returns it, and that is my talk today. So here's my website, LinkedIn, email, phone number, any questions you want to join up on LinkedIn, feel free, you want the presentation, email me. I will gladly send it out. Okay. Do you want to ask any questions for him, before, or can I always email? I don't want three o'clock. One more conference. Any questions at all? Okay. So I will carry on, because we have a few minutes. Oh, okay. So my journey to this, like I say, has been long, but once I found WordPress on WooCommerce, I fell in love with it. I like that you can actually touch the code and change it and make it do what you want. Can it be better? Sure. It keeps getting better every iteration that comes through. I've been using WordPress since 2016, and every improvement that comes through, and I have submitted stuff to WordPress, and the app came back with questions, and one of my items they did take. So how do I get business? Like I say, I haven't marketed at all. So what I found effective for me is Facebook and LinkedIn. I write blog posts on the website on a regular basis, but for Facebook and LinkedIn, I belong to certain groups, WordPress, WooCommerce, small business. I lurk in those groups, and I answer questions that people ask. I don't seek any money. I just, you know, if I know the solution, I will put it in. And what I have found is, one, it builds credibility, two, I get work. People will say, hey, can you do that on my website? Sure. And away we go. So Facebook, LinkedIn have worked for me. A couple of tools that I use that I didn't mention is backups. I use all-in-one migration for migrating websites back and forth from staging to live. And the second one I use is Migrate, not Migrate, ManageWP from GoDaddy. I have all my sites in there. I can go in, one click of a button, see what needs updating, and I can update it right from there. Those are two of my go-to. Thank you.


The best way I can help now is if I step aside and let government get back to governing. And therefore that's what I'll do. Because I work for you. And doing the right thing is doing the right thing for you. Because as we say, it's not about me, it's about women. I'm so sorry that you had to see that, but yeah. By the way, that Randy Rainbow video is still up. I mean, Randy, brother, what are we doing? Delete that. It very clearly did not age well. And I get that you probably want to leave it up because you spent so much time working on it.  So even if it didn't age well, you're still proud of your work. Just cut your losses and delete it. Like, let this be a lesson to you.  But having said that, though, the reason why I'm talking about Andrew Cuomo again is because surprisingly, he resigned. Now, I'm not necessarily sure what it was that ultimately led to him finally realizing that he needs to resign. But I think that this interview with his accuser, maybe this was the straw that broke the camel's back. Either way, it's really nice to see government officials face at least some accountability. But him just simply resigning isn't enough. Now he needs to be prosecuted. Not just for his behavior as governor and treatment of women, but because he has the blood of thousands of older folks on his hands. And thankfully, Assemblyman Ron Kim recommitted to take it on Andrew Cuomo with regard to the nursing home debacle.  And he adds, reupping my commitment. So this is good. This is what I really want to see. And, you know, I don't think people truly understand how insane it is that during a pandemic, like this governor, as he was allowing old people in nursing homes to die, he wrote a book about how to handle the pandemic like a good leader while the pandemic was still going on. I mean, it's just insanity. And it's not just that he let thousands of seniors in his state die. He tried to cover it up. So as Michael Gold and Ed Shanahan of the New York Times explains, beginning last spring, Mr. Cuomo was criticized over a state requirement that forced nursing homes to take back residents who had been hospitalized with COVID-19 once they recovered. Critics said the policy had increased the number of virus-related deaths among nursing home residents. At the time, Mr. Cuomo and his aides dismissed the outcry as politically motivated. And in July, the state health department released a report that found the policy was not responsible for an increase. The report did, however, raise questions in some quarters about how the state was reporting deaths. In January, New York's Attorney General said the administration had undercounted nursing home deaths by several thousand. Mr. Cuomo later acknowledged as much, blaming the lower figure on fears that the Trump administration would use the data as a political weapon. The suggestion that the actual death count had been covered up intensified criticism of Mr. Cuomo, including from his allies in state government. The scandal deepened after reports that the governor's aides had altered the July report to hide the true figure. In April, the New York Times reported that Mr. Cuomo's aides had gone to far greater lengths than previously known to obscure the death toll. Reportedly overruling state health officials over a span of at least five months.  Because those survivors telling their stories is really important and people need to pay attention to what they have to say. But I'm talking about this because oftentimes, once a government official resigns, people think that they've been sufficiently held accountable when that's not actually the case. And I just really want to remind everyone that Andrew Cuomo allowed thousands of people to die, lives that will never come back. They're gone forever. And he did all of this while patting himself on the back, writing a book about how to deal with the pandemic as a good leader. So it's not enough that he is resigning. He needs to be prosecuted. He needs to go to jail. Because this individual isn't just a corrupt corporate Democrat. What he did amounts to criminal negligence. And if he's not held accountable, then other governors around the country also won't be held accountable. So this isn't about Democrat versus Republican. If you think that individuals like Ron DeSantis, for example, have bungled the pandemic and have done actions that are comparable to criminal negligence, and worse possibly, then you also have to hold Democrats accountable as well. And what Andrew Cuomo did is, in my opinion, worthy of criminal prosecution. And I hope that he's actually going to be prosecuted for it. And I'll leave that there. He's down.  So maybe we can get him to take that down and that'll be like the next victory in the Andrew Cuomo saga. I don't know.


Meanwhile, the People's Democratic Party in Ugun State today issued a 72-hour ultimatum to the state's commissioner of police, Abiodhu Alamutu, to release the report on the allegation voted by and leveled against the governor, Dapa Abiodhu, and his party, the All Progressive Congress. The BDP chairman, Seguro Ulai Ugun Deli, issued the ultimatum at a press briefing held in Abelkuta, the state capital. Ulai Ugun State, to reprises PDP members, we are passionately appealing to the inspector general of police, Mr. Akawade Gbetukun, who is also a proud indigene of Ugun State, that findings of the investigation should not be tampered with. Let the world know that transpired at the March 18, 2023 governorship election in Ugun State. The interim report of APC petition against us have been submitted and released. Let the report of our own petition and the investigation be submitted and released. We call on the, once again I call on the inspector general of police to call the commissioner of police of Ugun State to submit the report of the investigation as it is.


Most of the way that human beings meet their emotional needs is by socializing. If for whatever reason you find it hard to do what everyone else around you is doing, then it's going to be difficult to meet those needs because it's hard to have a strong social network if you don't do the same things as as people around you. A great example of this is just if you if you need something in terms of information or maybe I need help moving house or I don't know fixing a water system or something or something happens and I don't know how to deal with it. If I have a social network, then I'll ask one of my friends or I'll ask my family and they will say, Oh, well, when that happened to me, I did this. And then and I'll put you in touch with the plumber that I used or something and all of a sudden that's problem is solved instantly through the passive help of the social network.


The process of looking for a new home can be exciting browsing through different properties and beautiful pictures But finding the right one for you can be a bit more tricky But once you have it it is time to make the offer to purchase But what does that process really look like here to guide us through this is private property CEO Simon Bray Good morning Simon. Let's say I have found the perfect property. I have now ready to make that commitment What are some of the things that I need to ask before I make that commitment? Well, I mean that's the stage that everyone wants to get to right, you know You're looking for the property you spend hours on our website perhaps looking through Tens of different properties, and you finally find the one that you really like At that stage you're going to make an offer to purchase Which is really a binding contract between you and the seller provided the seller accepts it so it can be a particularly Difficult process if you haven't done it before to understand exactly what needs to go into that contract But really you have to know that you want the house. So is it in the location that you Are happy with you know close to schools the neighborhood in the community that you enjoy Sometimes it's worth having rented in that neighborhood before so you know exactly what you're getting into Is the house the type of house you want? You know the space and all of that and and I think most importantly can you afford it? Because as soon as you sign that offer to purchase it starts a whole process in motion And if you can't afford it while you've wasted your own time and that of the seller okay now Let's say I've cleared my mind of any doubt. I'm a hundred percent sure this is the property. I want to purchase What do I do? So the best thing to do at that point is to engage with the professional So an estate agent or an attorney to draw up a contract for you Which is called an offer to purchase basically it records your offer the price you're going to pay and the terms and conditions that you're happy to accept in a sale and Then that'll get submitted to the seller and if the seller likes what he sees then he's going to sign it And you're going to have a binding sale agreement So it really is just a contracting phase between two parties and it's important to understand what goes into that contract You know what are the various clauses that you need to look out for? And and that's where an estate agent or an attorney can really add value and is there anything specific a buyer should be aware of or at least look out for before making that offer to purchase Absolutely, I mean there are a couple of really important things around the sale agreement outside of what price you're going to pay for the property a Suspensive condition is basically if it's if this condition isn't met. Well, then the sale doesn't go through So they're usually a number of suspensive conditions inside of sale agreements or offer to purchase And they things like you have to get a bond within 30 days Or perhaps I've got to sell my house before I can buy this house So those would be suspensive conditions and it's good to look out for those Another one people often misses this concept of the foots toots clause There's this Misunderstanding in the market that because of the consumer protection act There's no such thing as the foots toots clause But in an individual property transaction say you're selling a house to me that clause Absolutely can go into a sale agreement, which means You're selling the house to me as it stands So I need to be aware of any defects and be happy to Sort them out if they do present themselves down the line. So that's a good one to look out So that is what the foots toots clause is yeah, I'm selling it to you as is Yeah, exactly provided. You don't know about any major problem that you haven't told me about because that would be fraudulent Right, but if you don't know that the geezers about to burst and the geezer bursts Well, then it's the new Purchases problem and that's kind of the definition of that foots toots clause and Simon What happens in the event that you've bought the house, but people are still occupying it Yeah, I mean the transfer process usually takes about 12 weeks in this country So specifying exactly when you're going to move in has to be in that offer to purchase So it usually records a date of occupation and if as you say the person continues to live in the place after that date of Occupation, then you'd also specify occupational rent So that's how much rent they would effectively pay you to live in that place and it's usually quite high It usually has to cover all the costs of ownership for the property. So you do need to look out for those ownership Clauses like the occupational rent clause So they basically want to get you out on the day you said exactly and what are some of things you should not do after you've done your OTP Well, one thing that's really interesting is people will sign multiple offers to purchase. So You've seen two or three houses. You put in two or three different offers And then you look to get the cheapest one But the problem is if all of those sellers sign those offers you've actually just bought three properties So you don't want to do that You don't want to sign an offer that you can't get finance for so you need to know what your affordability level is And you can't just rely on what people call the cooling off period There's a little clause that goes in the contract that says, you know If I change my mind in the next five days that I'm allowed to that cooling off clause Actually really only applies to property below a certain value usually really low like 250,000 rent and those directly marketed so you don't really want to rely on that clause Well, thank you Simon for showing us all those small details when you have to make these big decisions Now if you want more information visit private property dot co dot z and have a look at the property advice section Where you can find some valuable information about when it comes to buying property