I am Linus Valle. I am the maintainer of the GPIO and pin control subsystems in the Linux kernel. Plus, I do MISC ARM32 maintenance and generally, like, all over the place when I have to be there. I upstream a few boards and so on. I'm going to talk today about GPIO for engineers and makers. I put this title because the engineers want to use GPIO for their board support or for their, like, very clearly defined task, let's say, and the makers, they just want to bang the GPIOs to do MISC stuff, interesting things. You're familiar with the maker concept, the maker community is a maker spaces and so on. It's been bust around a lot. And I didn't put the IoT in here. I'm sorry. I'm not buzzword compliant, but I did put in the makers. They do have interesting use cases, as we will see. So the GPIO subsystem came about in 2006. Until then, GPIO was seen as obscurity, just something very local to a certain SOC or PCI ISA card, something like that. The parallel part on the first PCs was seen as some kind of home-brewed GPIO. It had a 24 volts pin, so it was a bit nasty to use. But it was seen as somewhat of an obscurity, not nothing that really needed a subsystem or so. The target hardware when this was invented, and here you see the calls that were implemented by David Bronell. That was an SOC that has a few lines of GPIO on the SOC. It was invented for the ARM SOCs, primarily strong ARM, I think. And it was implicit that there is just one GPIO controller on the system. There is no GPIO expanders or several instances, banks and such things, nothing like that. The API here was merged eventually in 2007. I was defined first, and then in 2007 the GPIO Lib driver's GPIO was created. Again, by David Bronell. And he started to maintain it, not officially, but half-officially. And it goes on for a while. Then David who invented this got very ill. And Grant Lively took over the subsystem in February 2011. And started to maintain it. And in April David died, so no more work from him on GPIO. We are very grateful for his contributions, but it's one of the things that he never really could drive to the finishing line. I picked it up later the same year in December, because Grant simply didn't have time to take care of it.  And also in December the same year I got Alexandre Corbeau from NVIDIA as co-maintainer. And we have been bringing it forward since that time, 2011-12-14. I got it mostly because I created PingControl, which is related as a subsystem. So Grant said you can have this too. First I said no, but then he listed me as co-maintainer and then removed himself. Very clever. Biggest lies. You can insert whatever burlesque quote you want here. It's somewhat of a meme, but GPIO is simple. It's not. It turns out it's not. You think it's so simple. It's just one line. It goes up and down. And a GPIO driver should be nothing. It's just something that sets register. And it can be like that. But it turns out that the infrastructure around the whole thing is actually pretty complex. So let's start with the engineer part. And now we're going to be inside the kernel. And later on in this seminar I'm going to switch over to talking about user space. And I want to share with you a few things that have happened since 2011 until now, the last five years. Because I've never lectured about them until now. I've done a lecture at the embedded Linux conference about ping control. Very interesting. And I've done some kind of a smallish GPIO lecture on assembly Norikonnect. But this time I'm going to go over the changes we actually made. Because it makes a lot of sense. And a lot of people, it turns out, haven't really noticed these things and still ask me questions about it. So let me share this with you. I have separate slides for these things. We can just first name the few things that I fixed recently. If you want to use GPIO lib, the library, the driver subsystem as it is now, just select GPIO lib. We used to have two kernel symbols that's called ArcRequires GPIO lib. Or Arc wants optional GPIO lib. And I never wrapped my head around that until I read the changelog. The latter, like Arc wants optional GPIO lib that sounded like a wish list to Santa Claus or something. I never... And then I asked the guy who submitted a patch and he didn't remember either why he called it like that. So just get rid of it. We select the subsystem just like we select all others. And making it abstract code that gets compiled everywhere amounted to some work. So, for example, user-mode Linux crashed immediately because it doesn't have IOMapped memory. And we had to work around it. So now you can compile GPIO lib actually for user-mode. Not that I know what you would use it for because there's no way out of it, but anyway, you can do it. Yeah, then we have this to add to the small things. GPIO ship add data, that's only that the GPIO lib stores a pointer to your driver data internally. So, because it will itself appropriate the data pointer in the driver. So, to help you out, we add another pointer. Some people think that the container of construction here is better. That's what we used before, usually. So the state container for the driver would have a GPIO ship embedded inside of it and you would do container of to get the pointer to the state container. And it can be argued that that is more typesafe to do it that way. And I argue that this is easier from a user perspective. It's a matter of show. If you can make a good argument for using container of and type safety, okay, I buy it. If you don't know what that is and you think that container of is obscure, use this. So it's a matter of taste, I would say. And much of the change that started from 2011 and forward and even earlier was driven by the incentive to refactor the ARM architecture to use device tree or just generally clean up stuff. Get drivers out of the ARM architecture tree and now also other trees actually do it, MIPS, PowerPC and so on, move it down into drivers proper. And another thing was getting rid of the global number space and get device associated descriptors instead. Make it a real driver subsystem, make it a device, things like that. I will go into those details because I have separate slides about that. GPIO descriptors, this is the big refactoring that's been done inside the kernel and the big change. Alexandre Corbeau has driven it mostly. The motivation is that GPIO numbers are inherently unstable. You're used to pausing a number or something here instead of device pointer and names and so on. So it would say GPIO get. Now GPIO request, actually. We didn't even have a get function. So I'm already forgetting the old API. But it doesn't work because it doesn't scale and it's unpredictable. Imagine, for example, as I said in the beginning with GPIO, you would have SOC and it would have one GPIO controller. It's right to have numbers, just 0, 1, 2, up to N, no problem. Now we have SOCs which have multiple GPIO controllers on them and then we have GPIO expanders and sometimes there's a secondary processor with GPIOs that you control from the first one. And ProBorder comes into play here because if you don't hard code your GPIO number space, it will be controlled by ProBorder, dynamically assigned a number. And then you hard code that number into a lot of platform data or, in worst case, start using it from the surface in user space. It's just mess, just complete disaster. Some people just like to do this hash define games and really carefully architecture and design like this number goes here, this number goes here and so on. That's train spotting. We don't do that. We need to manage this by machine. That's like getting a human to do machines work and that's never a good idea, just never. So we need to dynamically assign descriptors to the GPIOs and not use fixed numbers. So we have associated descriptors with the device. By using this pointer, you can retrieve the GPIO descriptor from device tree, ACPI, or board files. Actually board files was the first thing I supported. There's no excuse whatsoever not to use descriptors on a new architecture or system. There is no excuse to not convert old architectures to use descriptors apart from time and effort or testing.  Then there are corner cases. Regulators is one. But generally for any simple GPIO, use descriptors internally in your drivers everywhere. It's so much neater. We get this opaque cookie here. And let's say this device needs to de-assert a reset to be up and running. It's active high. So when the reset line is high, the device is in reset state. So you just issue this. Associate with DevM here. We'll garbage collect this when we remove it. Call it reset and say that when you fire it up, when you retrieve this descriptor, set it low. This is all. It's done. Finished. Finito. It will be retrieved, set low, and then garbage collected when you remove the module. It's a bit of a chosen example. But you get the picture. Select here out high, of course, and you can also select as is if you don't want to touch the pin when you retrieve it. It will take some time to convert the whole world to using this. I'm aware of that. It's just so much better when you're dealing with abstract stuff instead of these fixed numbers. More stuff. As I said, you define these descriptors like this in a device tree, for example. There is a similar thing for the ACPI, but I don't understand ACPI, so I can't give you an example. But for example, here you specify that it's active high. And you can specify active low, and that means if you ask the descriptor to go high, it will actually go low, so it will just invert it. Sometimes you want that, sometimes not. There is also GPIOD API to do it raw, so you actually control the actual value if you want to. What is good with this is here you can also specify in your device tree, and for the consumer, you are defining it for the consumer, not like a hack in the GPIO controller. That was very common before that people had their driver and they just hack in some extra numbers here that I set a little bit of extra flags here and there. It's going to work out fine, but what they didn't think about was reusability, of course, because they hard-coded it to their system, and then when the next system was using the same driver, they got open drain or something that was used for something totally different. Here, you define for the consumer that you want it active high and you can oar on flags for open drain, for example here. Open drain and open source you can set. We will get to what that is. So no silly hard coding in the driver or special platform data quirks or anything like this. No, no, define it here in the device tree. This consumer needs it to be active high or open drain or active low or whatever. You just put it there. Same thing for ACPI, but I don't know how it looks. Use any function prefixed GPIOD or DevM in front of it is even better. So GPIOD set value, GPIOD set direction, so on. GPIOD direction input, GPIOD direction output, and so on. And I said the GPIO ship is now a real device. So internally in the GPIO lib, it is a device. The struct GPIO ship that you used to know, that's what you register in your driver. That's ideally just static information. It's not really true, but ideally it's just static information that's passed and then the subsystem instantiated a state container for it. And it's called like this GPIO device. Very straightforward. But this is private. This is for my subsystem. That's not for you to play around with unless you're GPIO subsystem developers. So this is hidden from the rest of the kernel. But it does contain a struct device like this. And that device is registered on the bus. This bus GPIO is where it appears. This is not where it appears. This is the old CISFS interface that I hate. And as you can see, there's also a character device here. We'll talk about that later. But GPIO ships, they are now real devices after you instantiate them. And we have added open drain, open source. Also known from the past as open collector and open emitter. I really love this. If you don't understand electronics, this is going to be very esoteric. We support a callback in the driver called set single ended. That's the generic term for this kind of open collector, open emitter, open drain, open source business. If you don't know it, these are transistors. This is CMOS and TTL logic. And this is a typical construction of a push-pull gate. If the hardware support, open drain and open source configuration, it will now be possible to use that with the set and get single ended setting from the driver framework. And it boils down to controlling these switches here. That's also transistor in practice. But these are software controlled and not all systems have them. And some have a static configuration. They have just synthesized their ship to have a thing like that instead of push-pull construction. And that's called an open drain construction. Open drain is used for level shifting, mostly. So as you can see, if this is the output pin and you have something pulling it up to VDD here, that VDD doesn't have to be the same voltage level that's used inside of this ship. It can be 24 volts, no problem. You will get a 24-volt signal out so you can drive your long-distance serial cable or something with it. That's awesome. Provided that you understand the concept here that either you short this within and then you pull this line down to ground so it becomes zero and when you close the gate it will drift up to whatever is connected here. That's also used for wire or constructions so that any transistor on the line can pull it low and it becomes a negative oar for the entire rail that is connected to it. That's not so popular as popular as using it for level shifting. So you can say that I want to set this into open drain mode, then I flick the switch open. This just goes numb and the output is just this transistor down here. I can set it to open source, then this one is disabled and I just have this and I can only drive it low actively. And that's exactly how it looks on the silicone more or less. So it's kind of neat. But until now we only emulated it in the GPIO library by setting it as input. If I turn this into an input I don't have a good illustration but if you have done operation amplifiers you know what is the input resistance of an ideal operational amplifier? Eternal. So it's infinite input resistance. And that's of course exactly what you get here when you turn off the gate. You get infinite resistance here, ideally. Not in practice, but ideally. So it will drift to whatever the line is pulled up by a resistor or so. That's nice. So we have this. What we do not have is other stuff, other electrical stuff that you want to do over here in your gate. We can set open drain, open source, we can set push-pull. Free state of the single-endedness, the output modes. And that's because the GPIO lib has supported that for some time. We can also set debounds with a special function. Hackish. Driver can implement it. We cannot set biasing, like pull-up, pull-down. We cannot set drive strength. And that's when you stack a few of these output stages so you get more drive strength out, more milliamps out of the line. And those things, because they are generally considered ping control. And I have a separate lecture about ping control that I could give you, but that would take the rest of the day. So it's not going to happen. But you can read up on it. The thing is there are things you can do in ping control that you cannot, at least yet, do in GPIO. Only open drain, open source, and debounds for now. Maybe we need to add some more stuff here. I will get to that in a minute. And we have ping control backends. Okay, let's continue with some ping control here. These sort of presupposes that you understand what ping control is. I usually say that GPIO is about driving lines high and low. I've been so far. Now I also just gave you an example of open drain. So it's not really true. But it is something about driving lines high and low. And ping control has been specifically of pins coming out of a package. Pins, balls, what else do they call pads? These kind of things that are on the edges of an SOC or circuit. Those things and their electrical characteristics, their flexing, and their biasing, and drive strength, and such things. That's generally considered ping control and ping config. Maxing is a separate subsub system in the subsystem. And config, electrical configuration of pins is another subsub system in the subsystem. Did anybody understand anything? So since the pins are the physical place where the GPIOs come out and the GPIOs here in the back somewhere as a separate IP block in many modern SOCs, you need sometimes to use it as a back end of the GPIO. There's a pin control subsystem in the back end managing the electrical and multiplexing, and so on of the pin. And here in the front end, we have the GPIO, which is a little bit simpler. So we mapped the two subsystems together with something like GPIO chip add-pin range tell of this GPIO chip with this pin controller, which we give by name, from that offset of the GPIO local number space, not the global one, to that offset of the pin controller local number space, we map this number of pins. It's okay to pass one here if it's very sparse. Just add as many ranges as you want. Just make sure they map. You can also map by name here. This is a bit esoteric. I think maybe one driver uses it. Then to get the pin controller to use this, you put these calls into your GPIO driver. So in the request function, you call back to the pin control layer, in the free function, in the input and output direction callbacks, you put these things, and it will call back into the pin controller and do these things for you. There's nothing to set any configuration and debounce and biasing or driving and so on. Maybe there should be. I just didn't do it because, well, I didn't have a use case for it. If you have, you're welcome to come in and help out. I am thinking that maybe we should have a callback that can set any config, one more callback, not 12. One more callback to set config using the generic pin config configuration options to let the GPIO subsystem put the pin into open drain or add free drive stages or a Schmidt trigger or anything, fun like that. But it has not yet been conceptualized or realized. In the back end of the pin controller, now we are jumping over to another subsystem. It looks like this. You have to implement this. If you are using that from the first slide, if you are calling back to the pin controller like this, your pin controller must, must implement this.  So they fit together like this. Request enable, that is going to max that very pin to GPIO function. Same in this, it's going to free it up and then for setting the direction. And that's it. And also here, we would need to add another callback if you want to set some other configs. Preferably just one more. Then this one is something that people evidently don't know very much about. What this thing means, if you set it to true in your pin controller, it means that the pin cannot be used at the same time for GPIO and something else. Because it turns out the surprising number of systems actually allow you to use something as GPIO at the same time as it's used for something else. It's detailed in the documentation slash pincontrol.txt file. If you're interested in how you construct hardware to either do this or not, you can just go and read that document. It's called GPIO mode pitfall. It has something to do with the fact that the way you duct tape together these silicon blocks and the fact that hardware engineers tend to think about their IO cells as GPIO because they are general purpose for them. When you synthesize something on hardware, of course you take a general purpose input-output cell and you synthesize it. So to a hardware engineer, that cell is very much general purpose input-output. You're following me now. But to me as a software engineer, when they have purposed that input-output line for a specific purpose, it is no longer general purpose. It is special purpose. So it's not GPIO at all. Maybe it's special purpose UART, for example. Then it's not the GPIO thing. But the hardware engineers do this and then they go and write the manual and then they write, this is GPIO. And that's where the confusion just starts to go all over the map. You have to think as a hardware engineer to get this right. You have to figure out what they were actually meaning when they wrote the datasheet. Sometimes they say, like, this is a GPIO line and it's very much not general purpose at all. Now it gets tricky. Here's another thing I added to the GPIO lib. It's very useful. It's very nice refactoring. First, I realized that I started fiddling around with this GPIO lock as IRQ. This is a good function because if something is used as an IRQ, a GPIO line is used to generate an interrupt. You don't really want to switch that line to output mode, right?  Of course I can think of hacks. I can think of hacks where you absolutely want to do this. Then that's the exception. The rule is if something is in output mode you probably don't want interrupts from it. And it's probably an error. So out of that, well, then we started to actually, you know, this whole interrupt business from GPIOs. GPIOs are model-less cascaded interrupt controllers or IRQ ships. Actually, that looks the same pretty much everywhere, especially if the hardware is simple. It's a register where you get a zero or one depending on whether that GPIO pin fired an interrupt or not. And surely we can handle that centrally in the GPIO library. And we do. So you just select GPIO lib IRQ ship. You include the header and then you use this GPIO lib IRQ ship ad with the GPIO ship and IRQ ship like that. Of course you need to know what you're doing. You need to know exactly how to define that struct. So set type, for example. You absolutely have to understand what you're doing in set type. You have to understand, like, what functions you have to implement for your IRQ ship. But once you understand that part, associating it with a GPIO ship and telling it where to enumerate IRQs, this should be zero on all model systems. So we just pick something dynamically, an interrupt range. And you can give it a default handler here and a type default type. Edge setting, for example. Normally none. It will help you out by constructing IRQ domain, mapping all the offsets to IRQ numbers, setting up the nested thread if this is a sleeping IRQ ship. And generally just helping out and putting things into the library and managing it with central code. Because it's quite a bit of code and everybody gets it wrong. So set one thing or another. Just use this, unless you have a very good excuse. So you do it in two steps. First you associate them and then the IRQ domain and so on are created. And then you set a chained IRQ ship and say, like, this IRQ ship with this interrupt ship is going to spawn cascade off of this parent interrupt with this handler. And this you really have to implement a register and look which bits are set to one and so on and fire those interrupts and wait for them to go low. This handler is for the default handler for the individual interrupt on the individual offset line on the GPIO ship. Did you understand the difference between this one and this one? With the parent, which goes and cascades into a lot of children here. So they have different handlers depending on if they are children. This will typically be something simple like handle edge, what's the exact name? Handle edge IRQ or handle level IRQ. And if your GPIO controller supports both edge and level IRQs you can also have handle simple IRQ. If it supports both and need, let me think, clear the edge register, the first thing it does in its hard path in order to be able to receive another edge while it is processing the previous edge. Then you definitely need to have this to handle edge IRQ because it will call back into a special function in your IRQ ship that does exactly that, clears that bit and then continues processing. And some IRQ, some GPIO IRQ ships will need to associate different handlers here depending on if it's an edge or a level IRQ. Because they need to clear that bit if it was an edge IRQ and do absolutely nothing if it was a level IRQ. Instead just pull the register at the end of the function to see if the flag is still there. And for that case you actually have to assign this handler in the set type callback in your IRQ ship. And then what you should pass here is actually handle bad IRQ because everything is bad until it has got the proper handler associated. There are examples just grep in driver's GPIO. PLO61 for example, the prime cell from ARM. Very good example on this. It is also possible now to have holes in this IRQ domain. So let's say not all of the interrupts that can be generated or all the lines on this GPIO ship can actually be used to generate IRQs. So Mika Westerberg from Intel added functionality so that you can say pass in a bitmap and say like this and this and this IRQ. No mapping, no using. That's helpful. And as I mentioned you can have sleeping communication here and then the interrupt handler will become nested and if it's not sleeping it will be just chained. I know the difference between a nested and a chained IRQ cascade handler. Yeah, everybody knows it, I understand. Okay. A cascaded one will just call down to all the cascaded IRQ ships in the hard IRQ context from the IRQ signal to the processor to the primary interrupt controller down to the GPIO block or even out onto the peripheral. Whereas a nested one will it runs in an IRQ thread context so you will have something with the request threaded IRQ and then it will handle in the top half just a quick callback to the main interrupt controller of the system and then shoot off the thread and the thread will go out to a typical I2C device, pull its interrupt register, 400 kilohertz maybe, I2C traffic and then handle all the callbacks in a thread context. Absolutely necessary to do in the thread, it will not work otherwise because the CPU will not wait for that long. GPIO expanders typically on I2C do this. Both of them can be handled with this central code because they are both essentially very simple. But all the IRQ domain stuff like map, unmap, translate all that is inside the GPIO lib here and you cut quite a bit of code out of your driver and it's quite a bit of code that everybody got wrong so please use it if you can. And it will tear down and remove the IRQ domain and everything when the driver is removed when you, there is even DevM GPIO chip add so when that is unreferenced everything will be torn down and disposed of including mappings and IRQ domain and what not. There are excuses for using some custom local handling and those are typically used in the IRQ hierarchy. Then we have hogs. That's when you want to set up something at boot. Those are also new and you can define in your device tree that you want this set up low at the boot time and don't do it when it's easy to abuse for example when you have too much well a reset line for example is not okay but the bias line, the reset line pertains to certain hardware it should be handled by the driver but if you set up bias here it's not really it's a board thing it's not associated with any device so then you can use hogs but don't abuse it please now let's go to user space. SysFS is dead use shardev you have this in sysfs you have this in slashdev from kernel 4.8 everything is there it was released the other day so start using it no excuse to use the old stuff I have marked this as for deprecation the sysfs abi has been marked for deprecation in 2020 we will see about that I know I can't just remove things but the good thing is that this is a kconfig option you have to actually turn it on actively turn it on this one I have made compiled in all ways so there's no way getting away from this and that's how I push it so then the lazy people will be like yeah but I have you have some library for this but this is already available I want to use this that's nice so that's how I enforce it the rules of linux user space GPIO you do not access GPIOs from user space you do not access GPIOs from user space and all of yet all of you do it my god you read this document and then you use the character device if you anyway have to do it so I have been convinced that there are indeed use cases where you have to access GPIOs from user space but for push buttons for sensors any bit bank GPIO I to C SPI traffic one wire whatever you're doing write freaking kernel drivers don't bit bank stuff from user space I know it's fun it's very Arduino to do it but it's not engineering it's it's it's fooling around it's not the proper thing to do recompile your kernel have a good time write the driver we need more people like that because it's the right thing to do and with I understand that all mechanism for using easily using device trees for things like you boards and whatever they call them it's not always really there we had this session the other day discussing device tree overlays which is the mechanism by why you by why you can plug in a board on top of your board someone but it's getting there and for example sensors IO use IO use use real drivers even if they have GPIOs in the back and use the kernel internal GPIO API to get to them and write the real IO driver no fooling around all right but there are use cases where you have to do user space GPIO I have been convinced industrial automation factory lines doing with the Linux systems I don't want random hard kernel drivers for hydraulic press or bottle filler or whatever I mean that doesn't make sense of course you just want to drive that from user space control systems or industrial control robots and stuff fire alarms door openers and this very highly specific domain specific systems I don't want the door opener driver in my kernel I understand that you want to use this you want to use the character device I'm not going to give any examples for this it the problem with the system as I said is it uses the global GPIO number space well that's enough as an argument to remove it really because it's a mess and it can't be maintained but it's also stateless because it emulates states by doing export and unexport in system and creating mock devices for every one of these exports so new device is created every time you do export number so into a sysfs and then it plops up as another sysfs file and if your script or whatever you're using program who did that crashes guess what it's going to stay around forever until you reboot the system or go in there manually and remove the GPIO from export really really stable right there are so many horrible things with the sysfs that you can't imagine it was unfortunately merged in the period between David Brownell getting too ill to maintain and grant likely taking over but it's a big historical mistake don't use it and it involves of course compulsory string parsing when doing context switch from kernel space to user space maybe that's not very much overhead but it's still silly from an engineering point of view I parse a zero or one or whatever what is good about the character device we have a discovery mechanism based on strings we can look up GPIOs in user space by their name if they have a reasonable name you can also hard code an offset on a specific GPIO chip it cleans up resources when you close or crash so close the character device everything is cleaned up the GPIOs are available for the next client to use use support open drain open source I will not add support for this to the sysfs ABI forget it it's obsolete but you can do it with the character device go ahead you can get and set multiple lines at once and if the driver supported you can write several lines with one single register right there are good examples on how to use it so there is really no excuse not to use it other than not being on kernel v4.8 plus but that's not a problem right you're not following mainline anyways this is a little tool like LS GPIO it will look through all your chips and this chip has this name that's just a helpful string it has 54 GPIO lines and it goes on like this those are not really GPIO I just it's like maybe you didn't want to see those even I'm thinking about this where we should mask off something else but there's something GPIO here active loaders generic 1 and 2 and so on this is from the Raspberry Pi by the way the maintainer was happy with it so we're going to merge something like this so you can just go in and look through the GPIO chips I have in dev, look up GPIO name GPIO gen3 and that's where I connected my thing on this header thing let's bit bang it from user space and do our Arduino niche thing that's much better than using sysfs by the way you can name these things in the device tree with GPIO line names this is merge functionality you can use it today for all of your boards lab boards whatever go in and it should be on the top level DTS file usually because that's a specific hardware and the routing and railing is going to be specific to that one you set up here the names of the GPIO lines the names are up to you if there's a specification for your board that says it should be named like this use that name that's the case for example for 96 boards for aspery pi we are discussing it if you don't have a better idea use the rail name that's usually what people are going to see in the schematic this is how it works you open this device which will appear after it will appear by default with Udev I have patched busybox to also create it because busybox had a bug that it didn't create device nodes for devices that were bus only and didn't have a class it's going to be fixed in the next release of busybox which will be 1.26x just call an IO control on this thing that you open get the chip info into this struct and then you can print fields from it like that just check the header file this one this is not the kernel internal header file mind you this is the include UABI GPIO.h file this is user space and then you can check for a certain line whether it's high or low or whatever and what name it has this just gets the information so it's telling you the name for example of the line there's an information gathering ABI for ships and lines then you can read lines, the values say you want to read offset 4 on this specific GPIO chip and then you can print out the data that you already opened this fd that's the one from the previous slide that's opening the device itself just open on the GPIO chip this say line handle 4 request only that line as input call it push button this will be what the kernel will name it get the line handle that's the one from the previous slide there if you think that this arraying business here and telling how many is awkward I could have added another eye of control to just handle one line I mean I understand that but the neat thing with this is you can get and set many lines at the time that is indeed very neat you can handle up to this is 64 lines wide once so you can make a 64 line signal analyzer for example and read all 64 lines with one eye of control atomic and it depends on the driver I mean if it's an expander then it's going to be doing I2C traffic or something like so so it depends depends very much on the driver it's probably not atomic at all but it's fast if the driver supports setting multiple lines with a single register right it's going to be writing atomically to those that share a single register we don't have a get multiple call somebody write the patch you over there patch all drivers that can read several lines with a single register right that's also going to be atomic in that case but at least it has one context switch to kernel mode and then it will loop over there and read with several callbacks into the driver so it's going to be faster because you avoid overhead of a context switch from user space to kernel space we can optimize but the infrastructure to optimize upon there is in place and that's most my idea you can request let me see here as input you can also add on that you want open drain for example here or active low also very neat thing that you can't do with the CFFS same thing to write things again this one line request as output call it blinker get the line handle set the data to one and then set line values set it to zero set the line value so you toggle it from one to zero like that let's slide line events this only handles one GPIO because you're going to have to register an interrupt to handle events just to make it a little bit more tricky example I set it to open drain both rising and falling edges get the line event for that thing read the event this is based on IIO same principle as IIO and then you get the time stamp and you can look here what kind of event it was rising edge falling edge and print it out why do you want the time stamp you want it to do sensor fusion because that's something very important for sensor people or anything that's related to whatever industrial control really the time stamp is something you want to correlate with your accelerometer gyroscope or whatever you probably want that that's why I put it in there I hope I was not wrong in putting it there your GPIO ship must support interrupts for this to work otherwise the call will fail that sort of given so it will call eventually to IRQ and set up an IRQ handler and that IRQ handler will use a K-5-4 to push events up to user space in a 5-4 it's 16 events deep right now we can expand it if you get overflow and they will appear as interrupts go into the kernel and interrupt is handled in the kernel the event is pushed up to user space in this binary way which is exactly the way that it's done in IIO more or less you just pull the file descriptor for these structs there are some future works on this for example you might want to select this uses the nanoseconds from 1970 I think this time stamp that's a bit coarse people want to use the RTC or something like that that is available in the IIO subsystem so we might want to put that also into GPIO for the character device so we can select there are some rough edges but the ABI is there anyways alright I'm out of time I don't know if somebody else wants to use this facility or if you want to put some questions or if you want to ask them in person does anybody have a very important question to ask did anybody understand anything of what I said alright then it's good because when I did the pin control lecture at the ELC and the USA nobody understood what I was saying really because it was so complicated and GPIO is a little bit simpler so okay thank you then


Very good morning to you. First of June, hope you're doing well. And if you're based in the U.K. and U.S., I hope you had a lovely long weekend. But getting you back up to speed on what's been going on and a bit of a review for the week ahead. And we'll also talk not only about the news, but look at the charts from a technical perspective as well. Gonna talk a little bit about inflation in Germany, some data we saw yesterday, latest COVID situation, OPEC meeting happening today, of course. The pound traded at a three-year high overnight in the Asia PAC session. We had the RBA rate decision where actually the Aussie dollar sold off irrespective of them holding policy. And then also a few other bits to look out on the calendar for today. So looking at the charts firstly, let's just give an overview of where we stand from a technical perspective. And I'll try to layer in a couple of the news arse calls as well. So as I mentioned, the pound did touch on a multi-year high in the overnight session. Dollar index is generally weaker this morning. It is down about two-tenths of 1%, albeit we're starting to see a slight fade from those initial highs that were seen in the overnight session for the time being as Europe come into the market. Couple of things then here, looking from a technical perspective with the pound. No, for one, why is the pound, which if we put this onto a daily chart? So everything from here, this encapsulates the last one and a half year or so is worth the price action. So we're starting to encapsulate here the downturn, but we saw on the onset of the global pandemic and then the recovery that we've seen thereafter. And on the daily chart, we're at a really key point here because we're retesting up and around the February year to date high of which we've just traded above, hence the three-year high we've printed overnight. So we're trading at the moment here. If we start to just push this chart a little bit further over to the left, you can see right over here to the right-hand side would be the 2018 high. So if we did continue to push on and above this week, then the next target would be 144. Now from a sterling point of view, what's the deal here? Why are we seeing such a research in pound? And it really is to do with the vaccination program. The UK was arguably very slow to adopt restrictions right at the beginning of the pandemic, but they've been very quick to deploy the minister vaccines as we know on the rollout program. And at this point in time, that continues to move on at pace. Three-quarters of the UK population will be covered with a two-dose vaccine within a month, based on the current pace of inoculations and data from Bloomberg and the Johns Hopkins University. We've got some meaningful milestones obviously coming up this month, which is the 21st of June for the ultimate kind of ending of lockdown that we've been in for several months. Whether or not that that happens on the 21st of June is a bit debatable because of the gradual uptick that we're seeing in COVID numbers in the UK, albeit in context still quite low on the back of the Indian variant. And that really is still probably yet to peak at this point and feed through into hospitalizations and death rates. But the point being is that now with more people immunized the wave, if you like, which was anticipated around this time of year shouldn't be as bad as we've had before against touch wood. And so therefore that lends its hand to whether 21st of June or not, the economy is going to reopen in time. And with that being the case then, there's a lot of kind of chitter chatter around the fact that the Bank of England could arguably follow suit of what we've heard from the Bank of Canada, from the RBNZ and start leaning on the more hawkish side of policy in the period ahead and bringing forward rate increases into 2022. And so that more kind of progression if you like on the normalizing out of the post pandemic comparative to the Fed being fairly standing pattern at the moment not wanting to move, then that plays favorably upside for further gains in the British pound going forward. So definitely have an immediate perspective still remain even though we've moved a fair distance even in the last month or so. Technically now we're at quite a key point if we can break above here and close above on the daily charts this week, then it might lend its hand to then a continuation up to 144 eventually amid the ongoing weakness that we've been seeing in the US dollar as the Fed want to just be gradual and cautious. And obviously this week of course we do have the non-farm power report we'll talk about that a little bit more but remember last month that was a shocker. And if that comes in weak again then it's only gonna probably further cement then the fact that the Fed are gonna hold off until they see something more materially consistent in economic data to warrant them any hint towards tapering and tightening policy with their view of inflation being purely transitory at this point. On a shorter timeframe for cable just having a look here there's a trend line I've gone on as you can see that goes back to the end of last week so starting from the 27th about a test on 28th and we've come up to test it in yesterday's holiday quiet session markets were to a certain degree in futures open and we did see a nice progressive move higher thereafter so only pullback here you can see we found a little bit of rough support at the European Open around that previous hunt 27th any further pullback would be ironed down around 142 handles to this area here as near support with the trend line then below should we move any lower on the pullback but overall looking for a continuation of price to be supported lower down if we were to see that move lower to pair back some of the overnight gains. In the Euro not too interesting here right now on the shorter timeframe on the half an hour on the daily chart certainly we did see a false break back on the 28th where we ran through that trend line going back to April and again the European story's been pretty positive I mean let me just quickly show you you'll remember there's that age old saying sell in May and go away well you wouldn't have done very well if you sold in May and went on holiday A the weather was atrocious and you wouldn't have had a very good holiday but B also European stocks recorded their fourth consecutive month of gains and in fact Italy and Spain I think were putting in kind of five, six percentage points in a month alone and as you can see here you've had a really nice progressive move higher across all of the major indices. On that point you know why is that happening well actually if you look at the vaccine situation much like I was talking about the UK being very good with their initial rollout program to get ahead in that process Europe were very slow if you remember a few months ago but they've really started to get their act together in the recent months and as you can see here the steepness of their people receiving at least one vaccine has continued to increase at a fairly decent pace whereas the UK and the US just levelling off a little bit but we could anticipate those to start picking up some more of those vaccines supply starts to come back online over the coming weeks but positive signs here positive signs for the global economy you could argue but equally so at the moment the equity space liking it for the idea that this is all positive, the economy is going to reopen but it's not yet positive enough that it's really filtering out to all central banks to start talking in a more hawkish manner because that definitely is just a minority at this point but that's definitely something to watch over the weeks to come just while we're here talking of Europe just having a look at Germany then and there's a couple of German things to be aware of, one on the COVID restriction side and one on the inflation CPI side we had some data yesterday starting off with Germany has gradually been easing restrictions as infections have fallen and vaccinations have accelerated so here you can see COVID-19 infections per 100,000 people over seven days and you can see it's been continuing to decrease to one of the lowest levels we've had certainly year to date and below that kind of threshold 100K figure that they had which had led to more recently a lockdown law passing in the Bundestag and what Merkel said yesterday was that effectively given now that the current case rate is at its lowest level since mid-October of last year and as of Sunday 43% of the populations received at least one inoculation Merkel confirmed that those Bundestag laws for mandatory restrictions and curfews which were set to expire in June that is set to be the case unless there is a further mutation of which they will take action so again another positive in that sense for the European economic prospects given how important Germany is on the inflation front how's that looking at the moment well a couple of things I wanted to point out here I mean the headline would suggest here German inflation climbs to highest since 2018 as lockdown eases as local authority started to lift coronavirus restrictions on restaurants, shops cultural venues CPI came in at 2.4% versus expected 2.3% I always find it hard sometimes reading Bloomberg hard in a sense of quite grating because they put out this type of headline and factually of course they are right inflation has climbed to its highest since 2018 but this is absolutely sensational and not applying one drop of context at all and as we know inflation is has will be rising sharply going forward because of those effects that we know of multiple but also mainly the base effects the other thing here as I said it's always whenever you see these types of headlines and data always kind of question it and look for any other rationale behind why is the number so high and this doesn't just go for inflation this goes for reading interpreting economic data full stop and a couple of things here the Bundesbank for one the Bundesbank themselves have said inflation in the country could climb as high as 4% this year 4% so the fact that we're at 2.4% against normal measurements you could deem in a non-contextual way is quite high is also 0.1 high and expected but the Bundesbank have already prepped the market and we're going to double that effectively so this shouldn't really spook the market secondly prices are being boosted by several special factors reversal of last year's sales tax cut changes to the basket of goods and services and how that is measured as well these are all having a meaningful impact to make the number higher as well so a couple of things there just wanted to cover that because I want people to get spooked in that respect by thinking all of a sudden we should start panicking about inflation or anything like that alright next thing I want to talk about is OPEC and let's talk about the news first and then we'll bring up the oil chart because we have some really nice gains in the overnight session and starting off with ministers are expected to press ahead with a gradual increase that had already been penciled in for July completing return of 2 million barrels since May in theory, according to the deal that was brokered in the middle of the pandemic when they really had to support prices last year the group committed to hold at that level until early 2022 but a tight market may call for that agreement to be revised and so here what they're talking about tight market, meaning that demand is picking up with parts of global economy reopening but it gets tight in terms of the supply side because there's just not enough oil come back to market so the natural thing then is they could revisit that plan and start to actually just water down how stringent their cuts currently are to offer more supply to the market delegates have said initial discussions would begin today the OPEC meeting is today and the alliance's moves well they'll talk about the alliance's moves after July it's a key thing to look out for apparently though, according to delegates no decision has been made as yet however, we have had sources yesterday afternoon who said OPEC Plus is not expected to discuss the output beyond July they want to wait and see what happens with Iran and that really is why we've moved higher in the overnight session and if we just have a look over at oil this is a 30 minute chart for oil you can see here we've had a nice move during the age of, this is the APAC session we've really just started to rally and move up we did have the occasion manufacturing PMI overnight in China 52 against 51 spot 9 but really this is a reaction effect to more participants coming in reacting to that overnight news we have found a bit of a short term platform now for price support from that previous hike we had at the end of last week we came down to test that close as Europe have come in and we just bumped back higher but on the session, look, we're up at $40.67.72 and on the daily chart if you start looking at oil here we are at very important levels because if you take that previous high that we had in March and then we're up at those previous highs at the end of April of 2019 we're getting up to trading at multi-year highs here and one would think that if we get our heads above that year to date peak then really can't see why we can't get up to 70 bucks psychologically here now over a medium-term perspective which would put us back up to October 2018 highs so, you know, Tim and I have remained fairly bullish oil for some time and even through that period of pullback we had through mid-late May and it's proving to be the right call for the time being but on the intraday again, I'll be looking at $67.51 on any pullback that would be an area of support now followed by R1 which was also the high that was seen during yesterday afternoon's US session and the futures market any further pullback then I'd be keeping on this trend line initiative from the 21st tested on the 27th, 28th and the pivot coinciding with around the pivot level or the 67th handle depending on timing as an area of support but oil generally trading firmly higher this morning and looking out for any of those OPEC comments the other thing is not only then did I say that sources are saying they're not expected to discuss output beyond July and if they stay put that keeps the market tight and that was as per some of the reports that were coming out from third parties about the tightness of supply at this present point in time as you can see from here but one of the other things is Iran and Iran is a real source of focus for energy traders at the moment because obviously they've been in dialogue with world powers and namely the US and whether or not they can rekindle that relationship and go back to that 2015 nuclear accord which got kind of torn up by President Trump now a couple of things on that point Iranian deputy foreign minister said negotiations are complex looks like a deal is not likely to happen in this latest round of talks secondly Iran has failed to explain traces of processed uranium discovered at some undeclared sites according to the latest IAEA report that we've seen overnight so to me given the comment from the Iranian foreign minister given what I've been saying all last week about the complexity of these talks and therefore we should be a lot more pessimistic on the timeline for structuring a deal and getting it agreed and then thirdly the fact that this IAEA report has come out there's no deal coming in imminently in my mind and so therefore this whole kind of fear of a flush of Iranian crude coming back online I really don't think is going to materialize anytime soon so for me again further kind of just tracking of economic data akin then to the reopening in key geographic regions in the Western developed world as well as globally particularly in China as well allied to the fact that the Iran situation and then open to stand back hence the reason why we're up already up around a dollar and a half this morning sticking with commodities let's just have a quick look at gold gold has had a nice little breakout as well early well two part Asia pack session we had a little blip hire and then Europe's coming we've just bumped higher again we've just printed a height 1918 spot 9 up around 13 bucks short-term got a bit of a trend line going on from the end of last week had a retest yesterday and then around that 1909 was the final bounce so any further pullbacks probably keeping nine around this level 1912 and then around that trend line as well on the upside on the daily these are the kind of same chart we were looking at last week which was the progressive kind of areas to focus on on any progressive move higher and the next stop here is what we're looking at last week would be that high that we're printed back on the eighth of jammed that would be around 1918 spot four here on a daily continuation and we're not far from there at the at the current present point in time probably beyond that point I'd keep an eye on then seventh of jammed high 19 kind of 30 that also starts to encapsulate here I just put in a lips so this high here but then also these price points going back to where we were trading the October kind of peak as well from last year would be the next target so this thing's still leading looking good for any of the gold bugs out there quick look at the Aussie dollar and just going to bring that into shot the Aussie dollar has had a bit of a seesaw performance in the overnight session it was moving higher generally speaking under the premise of the weaker dollar but then has excuse me, it was moving higher on the back of the weaker dollar overnight but then weakened out weakened the greenback and declined and reversed all of that move on the back of the RBA rate decision so what exactly did they say and why did that move happen so the RBA kept their cash rate and three year target rate unchanged at 0.5% while it also maintained parameters of his QE program or pretty much as expected but if you think about it in the region the RBNZ just last week talking in a much more hawkish fashion they was their forecast talking about their rate what they see for interest rates going forward which really promoted strength in the Kiwi dollar last week and there was some thinking that the RBA could follow suit I guess at the moment they're still trying to tackle COVID Australia's second most populous state of Victoria if you remember is currently still in lockdown after they reported their first locally transmitted coronavirus cases in nearly three months and then so at the moment I think until they get the real all clear on that regard perhaps then they'll continue to shackle the hands of the RBA at the moment irrespective of what the RBNZ decisions were the week before one other story just I wanted to mention for the calendar for the whole week was Tesla it's never a normal weekend without some kind of Elon Musk tweet and he didn't let us down he came out this time instead of talking about Bitcoin or Doge he was talking about Tesla and the price of Tesla vehicles is increasing due to supply chain pressures across the auto industry particularly for raw materials that was actually Elon Musk replying to a tweet that someone has said in a string of commentary I mention this because obviously Tesla's a big company it can influence the global not global but the US stock indices of which it trades because it's one of the larger index weighted components but one thing is how much it will move not too sure it'll be interesting to watch the pre-market because this marks the fifth incremental price increase of which Tesla has done in just a matter of a few months so perhaps it's not that surprising in that regard I'm going to look at the indices before we just talk about the calendar so I'm going to have a look at the S&P firstly I'm going to put it on a daily continuation same drills last week still kind of watching this area of an inflection point around 41, kind of 80 level you remember last week at the beginning of the week I think it was a Monday we broke out above it and it's just acted as previous resistance now to solid support and so even though we've come off and faded a little bit from the highs that were seen last week you know if you think about things we still are up within close proximity to record highs at this point in time so for now I think I'd just be looking at that as a range last week's high of 42, 17 to that inflection point and strong support area at 41, 80 is quite key now going forward for the S&P in a similar vein it's not too dissimilar for the NASDAQ 100 for the NASDAQ 100 at the time being I mean I was just looking at this chart this morning I feel fairly doesn't look too compelling right now but obviously we had that big jump up at the beginning of the start of last week and this range low I think is quite key for price going forward so you've got those lows that were seen yesterday afternoon in the futures market which line up nicely with the low on last Thursday pivot at the moment finding a bit of resistance which was also the yes time yesterday's morning high in the futures market but don't see that as being too much of an obstacle any further above than those highs that were seen the recommencement of electronic trade on Sunday night and then just playing the kind of range I guess for the moment I mean overall from a daily perspective looking on a much more higher timeframe this is going back to June of 2020 so this is a year long trend line for the NASDAQ 100 future on the daily chart and it's been such a nice response to that area as we've continued this progressive move higher so at the moment you can see here the NASDAQ is a fairly challenging point from a technical resistance point of view you can see here if I just put this ellipse on and let's just zone in a little bit so really it has failed to break above this last week and that will be the key level that I'd want to be keeping an eye on so if we translate that to the daily I'd still prefer range kind of trades at the moment over then not unless we get a breakthrough and we get a daily close above this level then it will be much more bullish to take us right up to the higher levels but this week is going to be really key of course we've got payrolls on Friday payrolls was a meaningful development if you remember from the prior month and certainly I reckon it's a bad number that takes us up to record highs as weird as that sounds because it's just going to mean that the Fed aren't going to move anytime soon and by default then it's almost like the perfect storm for equities then further gradual global reopening and the Fed they're willing to read through inflation as pure transit tree and so a lower for longer policy adjustment to normalize means that that's generally a good environment for equities and that could well be the case again so let's just have a quick wrap up the calendar just conscious of time so as far as today is concerned we've already had the overnight stuff and then later on this morning we do get the German latest unemployment rate and change the rate expected 6% to change minus 5,000 you do have the various different PMIs coming up but these are final readings interesting though for the Euro and European assets will be the HICP flash so Eurozone CPI expected to year and year to rise to 1.9 from 1.6% and then you've got the unemployment rate expected to remain unchanged at 8.1 into the afternoon one of the main highlights is going to be the ISM manufacturing PMI according to analysts at ING these are expected to stay strong as you can see a fairly unaltered number but well above 50 in the expansionary territory at 60.8 news that General Motors reopened five plants having seemingly overcome chip shortages is likely going to be welcome news on the manufacturing front and also further reopening of course on a state level it's likely to help on the services side of things as well these will obviously be quite key on the employment constituent will be watched closely of course to give us a little bit of a reference point as to formulate expectations around the payrolls number on Friday so that's coming out this afternoon 3pm that'll be key I'll keep you guys updated as and when I hear any further updates on OPEC Plus but of course be keeping an eye on Emina Baker on Twitter who works for Energy Intel she's like the most informed go-to person for breaking news well before Bloomberg Reuters could ever dream of getting it out there she's got the ear of all the officials and she normally breaks all the stuff that moves the market first but I'll keep the community informed otherwise speakers today couple it does include the Bank of England Governor Bailey but is talking more climate change so not really expecting too much there in terms of an actual comment on the economy or policy Qual and Brainard are both voters and speaking the latter on the economy and monetary policy and she's been quite vocal of late but definitely much more on kind of neutral to dubbish side of things I'd say so keep an eye on that 7pm otherwise let's jump to Wednesday and what have we got so Wednesday really want to focus more on the afternoon kind of session let's have a look in the US yeah fairly quiet actually because the US obviously was a memorial on Monday so a lot of that data has been bumped actually until Thursday so on Wednesday mainly it's just speakers you need to keep an eye out for it does include Christine Lagarde she's just a prize award ceremony but nonetheless worth noting then you've got Feds Harker, Evans, Harker again Kaplan, Kashkari, Bostick loads of Feds speakers coming on Wednesday otherwise what is quite quiet the economic data kind of front and then on Thursday you get the overnight Chinese services PMI get the final services data out of Europe and the UK and then you get ADP national employment obviously seen as a main precursor for payrolls expected at 545,000 so a decrease from what was 742 last time out initial jobless claims last week remember hit a new pandemic low at 406,000 so we'll be keeping an eye out for the latest estimates there and then we'll get the ISM non-manufacturing PMI again expected to be a fairly strong number and that will act as the final piece of information then going into the Friday payrolls figure DOE all inventories any oil traders going to come out Thursday not Wednesday and at 4pm London time not 3.30 because of the holiday always is that way on a bank holiday and then more Feds speakers plus Bank of England Bailey and then going into Friday of course then we have non-farm payrolls one of the things and one of the things you might have seen here to remember is lots of Fed speakers this is Thursday going to Friday got feds Powell speaking on Friday but again at this climate change conference but the point being is there's a lot of Fed speakers this week and the reason for that is the Fed meeting they hold their next meeting on the 16th of June and this week is the last week for them to communicate before of course they're going to that blackout period where they can't speak and so this is their last chance to really try and guide the market and remember this is quite important and I think the rationale why there's so many speakers is that everyone's been looking at June because June's 16th meeting we get the latest summary and economic projections and so therefore we're looking for clarity about this idea about when the tapering discussions might emerge any alteration in the doplock matrix to become a little bit more steeper for rate rises more sooner rather than later and at the moment the Fed are stuck in a bit of a catch-22 the economy continues to progress obviously we've got inflation starting to emerge and the jobs data this week could be quite a key component and it's quite interesting that you've got all of these speakers speaking that their last chance to really communicate thoroughly to the market before that blackout period does commence but that is it I'm going to leave you at that let you get on with things remember if you're not part of the community then you can join us for absolutely free at amplifylive.com for the guys already in there on the pro service then we'll see you on the live feed shortly and have a good day and week ahead alright, take care


Today on The Journey, we're talking about how to improve conversions on your website. To The Journey, entrepreneurs and small business owners, a website ends up being more of a chore than anything else. You build it and then leave to take care of the other 10,000 things that you need to be doing. But what if your website could actually be an automated sales machine and in fact, one of your hardest working employees? A channel to bring you qualified leads that takes less effort than managing a full sales team. And we're going to give you some handy pointers on how website design can help you increase conversions and sales. First off, Nealey, what is conversion rate optimization? Yeah, so without digging too much into the jargon, there's a method where designers and marketers crunch data both from analytics tools and user feedback. It's called conversion rate optimization or CRO. This technique provides insights into fine tuning a website and making it the best possible ratio between visitors and a specific action such as making an order on the website. And this can be leveraged into acquiring new customers, gathering leads, downloads, or anything of the like. So let's say last month, we're going to do a little math, you had 1000 website visitors and you had 10 requests for proposals that would give you a conversion rate of 1%. Now a quick disclaimer, keep in mind that the insights from each analysis will be highly contextual because what might work for you and your company might not work for another company. And there are a few key areas where you can get started to improve your website's design to increase this conversion. And you should commit not only to implementing them, but to also measure it and constantly improve. Think of it as a continuous process instead of that, set it and forget it. And one of the first things that you can do that is an instant win is placing your call to action above the fold. Now take a step back and kind of consider something for a second. What is the goal of your website? Is it to make a sale? Is it to acquire a lead? Is it to just entertain people and make them watch tons of your videos? With that in mind, each page of your website should have a beautiful and prominent call to action, be it a button or a form right above the fold or whatever they first see when they visit your website. That means the visitor doesn't have to take any other action by scrolling or viewing, they can go right to what you want them to do by clicking that CTA. Also by adding a benefit to following your call to action, it's a double win. So instead of using the generic buy now, mix it up and try a start my 14 day free trial. Test a few different colors. With only this slight adjustment, you can heap extra conversion points. Still at the page above the fold, research shows that 55% of visitors spend fewer than 15 seconds on a website. So make sure you have a creative bold and catchy headline. And besides text attracts attention before graphics to help increase that conversion with design. Consider bold fonts taken a stage really paint a persuasive picture with words that really resonates with your target audience. Also add social proof elements. If you're unfamiliar with the term social proof, the name gives it away a little bit. It's all about following the group, following the crowd, buyers turn to their fellow peers for guidance and help inspire their purchasing decisions. That's reminds me of like laugh tracks on comedy shows. They exist for this reason, but translating that conceptualization into website design to increase conversions include testimonials, right? Like I'm way more likely to go to this dentist in town. If that dentist has a ton of patient reviews on the site, or I'm way more likely to go try a soy latte at a new local coffee joint. If I can read what the customers are saying about their coffee. So people sharing how happy they are by using your services or drinking your coffee. It's going to help. If you can include also the reviewers pictures, I saw a dentist do that here in San Diego recently. Holy smokes. Like that made it even more believable. And I trusted that business before I ever even actually went and made an appointment to get my teeth cleaned. Another way to approach this is a case study. So it's a powerful tool that you can add for social proof to your website. And think of it as storytelling. So think of it as like testimonials on steroids.  And design wise, you can distribute case studies in a multitude of formats. You could do a report, you could do a video, you could simply put in just a section on your website. But all in all case studies testimonials, they're going to facilitate social proof. That's right. Social proof is huge for improving your conversion. But it's also been shown that videos can dramatically increase conversions as well. And this alone seems like a pretty good reason to start thinking about how to add them to your website. And a couple of content ideas that you can start doing right now, or I know it's Emma's favorite that behind the scenes showing off the work that went into creating the product itself, whether it's me developing websites or a restaurant owner making their signature dish, whatever that might be show off that behind the scenes. You can also do a bit of a product tour, a quick 60 seconds on your product and its benefits will save the visitor's time scrolling around their page. But they just want to see something nice and easy to digest without having to read a ton. But you can also turn that case study, remember that testimonial on steroids into a video and have one of your customers go on video and really tell their story and talk about how you help them accomplish their problem. It kind of goes in the direction of that social proof and video and it's just a win-win overall. Totally agree nearly. Also, show off your badges. So adding badges as a design element can bring an extra element of trust to your website, which I'm all about that. How can we build trust online when more consumers are doing all their shopping and decision making online now than ever? And you can organize these into three categories. One, trust badges. So typically that would be like from review sites. Trust Pilot is a pretty popular one in the B2B market while Tripp Advisor and Yelp, I use Yelp all the time, are popular for consumers in the B2C market. There's also security badges. These badges are provided by companies like McAfee and it demonstrates you have an encrypted link in between your website and your visitor's browser. Now these badges assure all info sent through your landing pages are secure. And lastly, award badges, my favorite. So highlight your best in class status with badges for industry specific awards like awards for the best web designers and developers and agencies. And consider all these points as starting points to boost your website's conversion and sales. But don't only implement them, remember to measure them and always work towards improving your overall performance. You'll have a surefire path towards increasing your lead generation and ultimately growing your business. Now if you liked this video go ahead and drop us a like below and add a comment with what you learned from this video. Also be sure to subscribe and ring that bell so you're the first to know when our next video comes out. This is a journey.


Hello and a very warm good morning from BoaFest. My morning is indeed warm and warm Mr Ravi Sankhanam, a very difficult man to catch hold of, CMO of HDFC Bank. Ravi, thanks for taking on time for us. I'll ask you a quick question. One of the courses that BFSI sector is expected to spend most during the last quarter of financial year. How was the last quarter for you in terms of marketing? Thanks for the opportunity to speak with you. Good to see you, good to see all the people here in BoaFest. As usual, as you see right here, Waterfall has been one of the best partners for all of us in the Bank of India. We have come out of the poverty and come back to the BFSI. It has been better this year. And across the consumer category, we see a lot of, what do I say? An abundance to spend more and that is seen in our cards space, that is said in the alliances that we have. And there are some people with a lot more space, but it has actually done one of the points. And as expected, we are definitely in the market for making more and more use of the media. More and more use of how to creatively reach our customers to get them hooked on our production services. There's a boom in digital advertising and you are amongst one of the top spenders on digital media. How has a banking brand to you ensured brand safety? Because we need to understand what digital does for the high end. I think repeating this again and again that marketing is a revenue function in the bank today. Clearly because of the fact that banking is one of those few industries where you can actually convert from sales to fulfillment to life cycle management, everything digital. And so digital marketing is one of the identified channels in the bank in terms of actually acquiring customers. And we are very clear we need to do that. And then when you do that, actually along with the brand safety comes into play because we need to make sure that this is head to head bank. And this is exactly the right place that we need to go in. And we do a lot of groundwork in terms of making sure that all our properties, the industry heavily is technically trying to make sure that our properties are very highly prohibited. Like for example, our mobile brand, all those stuff. We have that technology, we have SIM binding, we have device binding that ensures that people are taken care of in any kind of a fraud or any other design. When you do that advertising, we are very clear that we go only with trusted partners. We do not use any third party providers. We directly deal with the trusted partners and when we deal with trusted partners we are sure that your brand is in a safe place and we do not use third parties at all. You have almost answered my next question but you are still... I would want to understand that while you are also one of the biggest vendors you are also most vulnerable sector when it comes to ad frauds. So what are the kind of measures that you have taken to protect your brand? See, it's more about awareness that you have to create amongst your consumers in terms of what is the right hand from the HFC bank and what is the right property of the destination of the HFC bank. And we spend a lot of money in terms of technology. We work with a lot of people who identify and help us in terms of awareness that are advertising. You are the people who are coming into our hotel from where it is coming from.


so guys i am back with another halo infinite video and today guys i bring you all the secrets from the foundation mission which is the second mission here we have two audio logs and one school so let's get into it how's it going guys my name is dpj and if you do enjoy the video leaving a like really helps out and if you like what you see i want to see more halo be sure to subscribe so the foundation mission is the second mission and within this mission there are three secrets you want to collect through collectibles one school and two audio logs so let's go so within this mission you will get well once you get around a further way through you'll come to a cutscene where you speak to and hear about uh cortana this that and the other once you get past this part you will go up in a lift and then you're like travel forward and then go up again guys from here it's pretty simple well i say simple you have to use that grapple hook so from this point come off the lift go left uh go around go through the door uh on your left again get to the top of there go left again guys and you'll eventually come to here now you obviously want to take at the ads here because they will do nothing but just drive you around the bend trying to shoot at you while you're trying to uh get up to where this school is now i've said this before these schools within these missions once you go past these missions you have to literally restart the campaign to get them again so yeah so make sure you get them while you can so you want to grapple up to here doesn't matter this pillar or the pillar in front of it i actually made a mistake in thinking this was the one i needed to go to which ain't now so you'll see i'll walk up here which is actually wrong i'm like uh whatever gotta go this actually isn't the one my bad crazy i'm like i'm so confused it's actually the next one this one here i actually get to have to get up there right there so yeah i was confused please forgive me so i just shoot across to this one then what i do is i just walk up here like this and then grapple onto here now you may get this we may make a mistake and fall down but it's all good just keep trying you'll get it and there you go guys there is the school is as simple as a vet that's actually the second school within the campaign the first one is in the first mission which i've already covered on my channel for you guys do you want to go and check that out you can okay so now on to two audio logs the first one being well actually straightforward to actually get if i'm honest with you but just in case you may miss them so the first one you're located you'll come across uh this room right here we have to construct the bridge you have to do this a couple of times now once you actually construct these bridges and get across them take out all the ads this and the other uh after you've constructed the second bridge you then need to take out even more ads now actually died the first time me trying this i'm gonna cut that in the video don't want to look like a noob but yeah once you've taken out all the ads guys and you actually have to uh i'll leave the room just on the left hand side before you leave the room there is one of the audio logs so make sure you don't miss that guys and the final audio log again is relatively straightforward to pick up so once you progress through this mission you will eventually get to this area right here where there's like a giant red elevator which you have to power up see that right here so from this point and this actual like what do you even call this and this uh i don't know i'm just going to call it a red thing so from this thing right here just follow the path to the core you actually have to go and grab so it's not too hard to uh well you probably some people will miss us on audio but you can see it's just left at the core is right there and that is the second audio log the foundation mission guys so take that core power up that elevator and get on with the mission guys and you are done for all the collectibles within this mission so i hope you do enjoy the video guys if you did leave a like really helps me out if you're new around here want to see more halo be sure to subscribe and if you never want to miss a video please can turn on notifications on by hitting that bell button guys thanks as always for stopping by i appreciate the love and i'll catch you on the next one


It's a fit if you're not physically fit if you are physically fit it can increase your mental fitness They tend to gather you can have one without the other


Here inside the queue for exciting wrap up of the Enterprise activity, OpenStack Enterprise Forum. O.D. forms the hashtag. Go to crowdchat.net slash O.D. and pitch me. I'm John Furrier, the founder of SiliconANG. I'm John Michalho. Dave Alonso, co-founder of guvon.org. Our next guest, saving the best for last, Chris Kemp, founder of Nebula and OpenStack, former CEO of NASA, making a dent in the universe by democratizing cloud computing. That's his Twitter bio right now, as of today. Chris, welcome inside the house, inside the queue. Appreciate you coming back. Two days in a row, we had Cole on yesterday. I think he's great to be here. We had all the luminaries. It's funny, Dave, you've been here over so long, you meet everybody when we knew them when. So now that they're all famous, Chris and Cole, big journey for you.  Chris, how do you feel right now? Enterprise is hot, packed house, Twitter's on fire. Yeah, it's great. Crowdchat's going crazy. It's great to see hundreds of people show up for an event that's just focused on Enterprise Cloud and just a couple of companies here. I can remember a couple years ago, we had a room full of 15 or 20 people at the first OpenStack meeting and now we have thousands of people that gather around the world to participate in the community. So it's just incredible to see how fast it's grown. What is the deal with Enterprise Cloud? We were just at the Open Compute Summit earlier yesterday, covering it this morning. We didn't have the cube there today. But you have this homebrew computer club mentality right now, inflection point, massive sea chains, transformation, growth market, bubble, whatever you want to call it. It's massive investment, great action. Yeah. But what's the big aha? Why Enterprise Cloud? Why is it so freaking hot right now? Well, I think Enterprise is realizing that they have some big challenges in IT. And if it's an insurance company that's trying to figure out how they can collect all that data from cars to figure out how to price premiums or to better understand their customers, it's advertising companies that are trying to understand how to take all the click streams from the Internet. Every place you look, financial services companies trying to do a better job of understanding markets, you have to build massive scale-out computing infrastructure. And I think Tim O'Reilly actually said it best when he did our company launch video. You know, just a few years ago, no one would have imagined that a company would need a Google scale compute infrastructure. Now everybody's building them. So you've got projects like Open Compute that are democratizing the hardware and OpenStack democratizing the software stack. And obviously there'll be companies like Nebula that help deliver some of this technology to the Enterprise. I want to ask you a question because this is my theme for the week because I was really, I'm an older, one of the older guys, Dave and I are a little older. I'm in the generation of the Mac guys, about ten years younger than the guys who built the original Mac. And that was, you know, the computer science. That's when we cut our teeth into coding, that kind of generation. It made me think about those guys change the world because they built stuff for themselves. If you look at the stuff going on now, what you're working on, people in this room, these are guys that are building it for themselves because they know that that resource that was elusive before, that was controlled by the big guys, is now fully available, tax-free. So I want to get your perspective on that. The modern-day version of what that homebrew club did for the computer revolution is kind of going on, I would say cloud, whatever market you want to call it, I just globalize it and say cloud computing being represented of all the nuances of convergence in mobile. What is that, what's that world like? You're in the center of it. Yeah, I think we're at the beginning of a new generation in computers. I think there was this mentality that computers were these big, large-scale systems that were primarily focused on large business problems. The personal computer disrupted that and you had companies like Apple and Microsoft build these very small systems which ended up being incredibly successful and that transformed enterprise computing. So if I'm building a large enterprise-scale computer, I'm going to start using the components that exist in the PC. What's happening now is, it's happening all over again. We have mobile phones and ARM processors and DRAM chips and flash chips that are coming and spilling over from these consumer devices into enterprise platforms and it allows us to rethink the way we do software. Let's not just run software on one big computer, let's run it on thousands or tens of thousands or hundreds of thousands of small computers and I think we're at the beginning of this revolution and it'll be a 25-year journey. 25 years from now we'll still have software running. I'll be dead, you'll be like... Yeah, but I think it'll be the new mainframe. All the software that's running today will be running in a rack of VMware somewhere 25 years from now. So it'll be exciting to see. So we're at the beginning. In your view, we're just tinkering around. Early days. We're wiring it together with infrastructure. Yeah, early days. So when we first met, you told me, and I wonder if you could just do the bumper sticker version of that story. You told me a great story about really the roots of OpenStack inside of NASA, how you're able to successfully extract that from NASA, which is great. Maybe it trashes the US government. So many great innovations come out of the US government. It's unbelievable. So the short version of that story, and what led you to Nebula? Did you envision that you'd actually be doing Nebula? I got this picture of a box. I'm like, wow, it's Chris's company. Yeah. So when I was at NASA, we had a problem to solve. We wanted to share NASA's vast treasure of knowledge with the American public. And if we looked at how we could do that, there's not enough funding that we could have ever gotten to do that. So by partnering with Google, I had a view into how you could manage very large-scale computing infrastructures. We partnered with Microsoft, and we had another view on how you manage infrastructure at the time. And we ended up using these partnerships to build a very, what we'll call a prototype of a very inexpensive, scale-out computing environment. We did it in shipping containers, and the impact that that had was, you don't want to have people managing servers in shipping containers because people don't like to work in shipping containers, right? And so it had the added effect of automating all the servers in that shipping container externally. And OpenStack really emerged out of that work. And we've obviously seen it go to incredible places since then. OK. And then you made the comment. I tweeted out, Chris's tongue-in-cheek comment was, mark my word, someday that Amazon will be integrating with the OpenStack APIs. But we joke about it, but what's your position on that? We all know Randy Byers is very vocal on that. We heard some pretty couched opinions today on the panel. Where do you stand on that? I won't be couched about it. I think that having OpenStack APIs allows this community to innovate. It allows OpenStack to be something different than Amazon. I also think that what Amazon is doing as a company with Amazon Web Services is they're listening to customers and they're innovating. And I think it is a valid way to look at a segment of the market. I think it's looking at a segment of the market which is mostly small companies building new applications. And OpenStack is attempting to bring a lot of existing technology into the enterprise. And so I do think that it's fair to say that there's a different set of opportunities that exist when you bring a cloud into an enterprise. And I don't think Amazon will see those things. And so I think having the OpenStack APIs be discreet and can innovate on an independent trajectory will create more innovation for private clouds and for competition, frankly. So I do think both are important and that's not hedging. But I also think the Google Compute Engine APIs could be important as we start to see people do incredible things on that platform. And the market will decide, do you feel like Amazon's ambitions for the enterprise are overly ambitious and Amazon's being somewhat naive about the enterprise? I mean, Amazon, we've talked to Andy Jassy and he's flat out. I'm going after that trillion dollar opportunity that is the enterprise. There is no workload, no situation that we will not pursue. I'm very confident of that and putting a lot of resources behind it. Do you not buy that? You know, I think that when we talk about making large enterprises, giving them the power of a cloud platform, it isn't just about technology. It isn't just about making sure you can plumb the network. Those are important things to do to make it possible. But what you're dealing with is you're dealing with a cultural transformation. You're dealing with a different way of thinking about building software. And I think most importantly, you're dealing with a lot of existing applications that are just not going to run very well in the kind of ideal cloud architecture that we see the Amazon style cloud companies leveraging. And that's where the economic advantages of cloud are. If you're not able to elastically scale up and down your infrastructure, you're not able to take advantage of the economic benefits of cloud. And frankly, a lot of applications, I commented earlier, what I think is brilliant about VMware strategy, and they're a very smart company and they have an incredible product, they're virtualizing everything. They're virtualizing the network, they're virtualizing storage, they're virtualizing compute. And so they're creating an effect, and I'm a Star Trek fan here, but they're creating a holodeck for software. And you put all your software in there, and it'll run like it's 1995 in the year 2025. And you can change the hardware out a couple generations of hardware underneath it. And that's a good thing, just like mainframes are still running. This is our fifth year of theCUBE. This is the beginning of our fifth, I guess, season, I'm going to call it. But in 2010 was our first kind of initiation of theCUBE. We were at VMworld, one of our first early shows. Maritz launched the stack, right? And that was the software mainframe we all remember those days. A lot's changed since then.  You know, beautiful. However, the top of the stack just never evolved fast enough. So you saw some end-user computing, you know, kind of misfire multiple times. Now it's kind of coming home with mobiles, okay, matured. And then Maritz takes all that out of the pivot, makes total sense. On PowerPoint, makes a lot of sense. So I want to ask you, because you're also smart, you were also, you know, NASA, and then with Sprite and Founding, Nebula, knowing what you know now, given some of the market conditions of what's advanced faster than others, if you can go back and do a mulligan with Nebula, what would you tweak a little bit? Because some things just didn't materialize fast enough, some were held by other factors. What would you do differently? I mean, obviously if you could go back in time and you could look at everything that's happened over the past few years, one thing I'll say is I'm very optimistic about the future. I'm optimistic about, I think there are visionary CIOs and CTOs at America's most successful companies that understand that the only way that they're going to be able to win is to power their most critical applications on extremely inexpensive-scaled infrastructure. And this makes so much sense to me, right, coming from NASA. But I find that there are a lot of companies out there that have CIOs that work for CFOs that have big challenges to deal with, with their existing applications. And they're also optimistic about where they are in their journey of virtualizing all these applications. And I think many of them say, well, we've virtualized 80% or 100% of our applications. And I don't think that's right. I think they've virtualized maybe 50% or 60% of their applications. And I think that's a good thing for VMware's market share. It'll continue to grow. But I think in the long term, when we see the incredible advantages that big financial companies or insurance companies or media and entertainment companies get when they can use something like OpenStack on OpenCompute, and Nebula's going to be a part of that, I think that you're going to have winners emerge. And it won't even be a fight. So would you do anything different going, knowing what you know now? I'd make it easier. And I don't know if there's any way we could have done this differently because we have, frankly, what's been called an HP strategy. We built a system that could scale kind of big and kind of small, but not super small and not super big. And so then we can start there and then scale bigger. So I think if I had to do it over again, seeing what some companies have done with rebranding a small server and selling that as a data center in a box, maybe making Nebula even less expensive and even easier and even simpler. We're so easy and so simple, but to just never underestimate the power of simplicity. So we're getting the hook there from the folks here, but I want to ask you, okay, now let's look forward because you're an optimist and we just want to get that question out there because the market's changed. We had predicted some things would move faster if they didn't. Going forward now, you get the chess board. You're looking at the chess board of where we are now over the next 12, 24 months. There's going to be some sprints and some straight and narrow, maybe some curves. You've got to slow down a little bit. Where do you see the current landscape now with Nebula, Visa, V, the marketplace? Well, I think the key is to allow customers to more easily run applications. So what will happen here is this ecosystem will emerge. OpenStack already has a huge ecosystem around the infrastructure. What now needs to emerge is the ecosystem around running things on infrastructure services. And so you're going to start to see every software company that's ever existed solving every problem you can imagine, re-architect on cloud architectures. And these applications will run on Nebula private clouds, they'll run on public clouds, and they'll run in both. And I think the really exciting thing for me is just watching as a whole generation of software evolves to be completely dynamic and elastic. And that, I think, will ultimately make this transition. That's where the knee and the curve will be when we start making it possible. When you think about your first Mac or your first PC, what would you do with it if no software ran on it? If everything you ran, you had to write in hypercard or basic. Remember when Microsoft had the basic and Apple had hypercard and that little... So this is where we are with OpenStack. What we have is we have heat. Heat is the new hypercard. And we've got Chef and Puppet, and everybody has to do everything. Things will change when all the software that everybody runs in the enterprise runs on cloud. You're a Star Trek fan, I'll end with this quote from the founder, Screnta, he's with the search engine, I'm blanking on the name, but he said, everything that was on Star Trek will be invented. Maybe the holodeck might be a little bit different. The warp drive is going to be tough as well. Warp drive will be hard. Beaming for warping. Big Star Trek fan. Chris, thanks for coming on theCUBE. Really appreciate your insight. And again, your perspective is very relevant. You've been there at the beginning. You've seen the trend. You've seen the chessboard. Great market. Congratulations on your success. Appreciate you coming on theCUBE. This is theCUBE, our special exclusive coverage of OpenStack for the enterprise. Breaking out. O-E, forum, that's the hashtag. Follow us on Twitter and crowdchat.net. We'll be back with a wrap-up after this short break.