Thanks for joining this session. Today, we're going to be talking about eBPF programs and the way to simplify to monitor your system. And we're going to be talking about an open source project we have at Solotio called Bumblebee. Just a way to simplify your eBPF. So just a quick intro to the speaker today. My name is Adams. I'm a field engineer at Solotio. Basically, I've been dealing with API getways and service mesh for quite a while now. But we started looking to kind of a deeper layer now, even at Solotio. And we're operating way deeper layer. So instead of being at L7, where it's mainly application, now we're looking to the L3, L4, dealing with, for example, now, we try to deal with eBPF, seeing how we can leverage it to enhance monitoring, security, and so on. So it's pretty new to me. I'm still learning it. And it's very interesting, because that falls exactly where Bumblebee is. To simplify the way to provide the eBPF application to someone that is just getting up to speed in the technology. And with me, Jim Barton, I think he just went to get his laptop. He's a field engineer with me and the team. We pair work together. All right. So again, thanks for joining. OK, so quick intro to eBPF, what it is. eBPF stands for Extended Vehicle Packet Filter. I think everyone using TCP dump, for example, have been using the eBPF technology in the past. It's even based, basically, as a way to create some code that runs in the kernel, in kind of a sandboxed way, so secure manner. And we can interact with that code. We can interact either to get data or to provide features like security and so on. So the way we see it again, so you're going to create a code that will run in the kernel. That code will be tied to a hook, so an event. And then we're going to have a process that will interact with that code to read data and process it. And we're going to see that more into details later in the workshop. All right, so why eBPF? Why would you care about this? I was talking a little bit earlier what we do at Solo, and I mentioned that we've been historically dealing with L7 type systems where you have the gateway. A gateway can produce some monitoring stack, like metrics and so on, or security and so on. But that's a way to hide layer. So if you want a security system, you want to secure it in depth.  In terms of security, obviously, if you want to secure a network to not talk to another, I think the first one is basically having these two networks not being connected to each other. So that's physical. That's the most secure. From there, I think the layer after that, in terms of security, let's say they're connected now, is to deal with lower levels in the model. For example, L3, L4, when you deal with TCP and network, you'll say, hey, so now we are segregating these two networks or these two services. They can't talk to each other. We block in the communication there. Because when it hits the L7 layer, so when it hits the application layer, it's sometimes pretty late. So it's more challenging to enforce strong security when it deals only with the top level L7 policies, which is, for example, HTTP. So yeah, why ABPF? It operates super low in the model. You can create code that goes directly in the kernel. So you have access data fast, operate fast, enhance security. I think one of the main advantages of ABPF is observability. So you have a program running in your kernel, listening to events, for example, network connections or file opens or things that are really low level and acts on that, either operate that to enforce a policy or capture that metric and transform it, send it to a program that can read it, and, for example, display metrics and so on. So observability, I think, that's one of the key features of ABPF and what we can do with it. And I talked a bit about the other features, mainly networking, allowing you to kind of use this technology to plug multiple systems or reroute or deal anything that comes to traffic itself. And when I talk about that, I can mention security as part of the same bundle, security, securing services to service communication, and so on at a way lower level. For example, I'm not allowing this group of IPs to talk to this group of IPs. So it's touching to networking plus security. And I think, I don't know if you guys are familiar with Cilium, for example. Cilium use ABPF for networking. That's a good example of use cases where we can use ABPF. All right, so the way how it works. As I mentioned earlier, there's a program, what we call a kernel program, that runs within the kernel. It's a code that would be listening on certain events and reacting, producing data. When this data is produced, it's put into a map. And then you're going to have what we call a user space program that this one will look into that map, read data from it, and do something. Either, I don't know, print it, format it into metrics, do anything you want. But basically, it's two-part system. You have one running in a kernel, producing the, that's the most important one, producing what you want. And there's another one, which is the user space program. That's the one that actually listen to the data and do something with it. All right, so now, if I'm going to write an ABPF program, what can I do today? There's multiple ways. I think, historically, the first one is BCC, right? So BPF Compile Collection. This one will allow you to create some code. I think it's easier to see this way. It allows you to create some code in C for what I call kernel programs. So the code that runs in the kernel is written in C. And then you're going to execute that code. You're going to embed it into a binding technology. For example, we can use Python. Where in Python, you're going to use your user program to execute the user part of it. So in the same Python script, you see the example here, you're going to have the user program, so the one that actually, the user space program, the one that's going to read data. And you can also have C, a kernel code, C embedded into your Python. And this is fine. It allows you to write your ABPF programs, though it has some drawbacks. And I think the main one is that it is actually compiled on the go. So every time you run that specific program, it's going to compile everything. So take some time there to run the system, to run the binary. So time plus, it is really dependent on the platform. So let's say you have, you're running it on a certain system. You can't guarantee that this binary or this code will work somewhere else. It's going to really tie to your environment. So yeah, not that great. OK, so let's think about what's a better solution there. A better solution would be to run what you call the BPF plus BPF query. Query stands for compile once, run everywhere. So it's more like if you look into just a bad comparison here, but you look at the go code, for example, it would probably compile once. You're going to create your program, compile once in a specific environment. It's going to be able to copy this somewhere else and it's going to still work. So it is a better way. It's better than the previous way, like with the VCC. LibBPF allows us to create the code only once, it's compiled once, so we don't have to compile every time. And you can transport it from environment to another. Though what you have to do here, you still have to create your user space program plus the kernel one, so both of them, right? You still need to create both of them. And that will work with any ABPF who always need to create both, but this here is better than VCC. And we're going to see an example of all this, and we're going to create multiple programs using the platform later on in the workshop. We're going to compare different technologies and see how it works. All right, now why Bumblebee? So we talked about VCC, we said it's all right. Now we talked about LibBPF, we said, hey, it's better. Now let's make it great. And to make it great, quite if I have a library or program or something that would help me to create an EBPF program, I would care only about the kernel code, so I'm not going to care about the user space code. I'm just going to just write what matters, and what matters is basically the code running in the kernel. And what if I want a tool that's packaged all that, so build it and package it and put it somewhere where I can be able to reuse, have a good user experience where I can be able to reuse my binaries. And that's actually what Bumblebee is trying to solve here. It's a tool that allows us to care only about the kernel code, so I'm going to create only the kernel code. Plus I'm going to be having a good user experience into building and compiling, building, and distributing my binary. And if you guys use Docker, I'm pretty sure everyone uses Docker here, it's kind of a similar experience. So you're going to create your code, then you're going to build it, and then you're going to package it into an OCI image, then you're going to be able to push it somewhere to a registry, and then you're going to be able to pull it when you need it on a specific environment. So we're going to do this later. So again, that's just what I said right now, focusing on kernel code first, not dealing much with the user space one and also all the user experience around it. So okay, let's get hands on here, let's start on this. I don't know if you guys were in the workshop yesterday, kind of the same thing, we will just, everything you guys need today, gonna be on a browser. So you need nothing else, you just need a browser, you're going to have to go on the specific link here and then gain access to your environment, and then we're going to do the same thing. I'm going to do the exact same instructions with you guys, okay, I'm going to do it here on, if you don't have any laptops, you're going to follow with me here on the screen. If you want to do it, just use your laptop right now and we're going to do it in the same time. I just want to mention that at the end of this workshop, we're offering a certification, okay? So if there is a quiz at the end, and if you pass 80% of the questions, you receive a badge that can be, you can link it to LinkedIn or it's basically a certification based on fundamentals to EBPF since we're gonna be creating some EBPF programs today. And I'm going to share the link to the quiz at the end of the session, okay? So again, please join this link here.  All right, there you go. So what you guys are going to see is you're going to have to gain access to your class and you're going to see here, EBPF workshop loaded into my exclusives, right? And just click on the track and then click on start track, okay? So three steps there. First click on the link and then you're going to add it and then click on start track. Once you click here, well, because it's in Cognito, it's going to recapture me here, so I'm doing the exercise. Very good. And then we see that now, the environment is creating, right? It's going to take a couple of seconds to get probably a minute or two to get ready and after that I'll do the exam from here. So going back to my slides, just to go back and show you basically the certification. First thing, click on the link. You're going to have access to the workshop, just add it and then click on start track. Then you're going to be ready to follow with us. And then once ready, you're going to see like a green button in a corner saying that your environment is ready to start and then we're going to click on it and we're going to start our workshop. So again, the badge is going to be a fundamentals for EBPF, all the things needed is to pass with 80%. If you, you can always retake the test if you miss the first time, the only thing you have to create it will use a different email to retry the quiz and the badge will be issued in a couple of weeks, okay? So we're going to send that badge to a specific email in a couple of weeks. Alrighty, so there you go. I think we start here, we're good. We go to start. Link reduction to EBPF. So in this workshop, we're going to do three things. We're going to start by creating a BPF program using BCC, right? And then we're going to create a same program using libbpf. And at the end, we're going to use the same thing but creating the same program but using Bumblebee, okay? So first step, let's see how to create a BPF program using BCC. So to do this, we're going to go straight to the code. And as I mentioned earlier, when you create a BCC program, you're going to create your kernel code plus you're going to create a user space, user space program. If you guys have, yeah, all good? Sorry. Oh, okay, sorry. Oh, man, I didn't notice that. Sorry about that. All good? Let's go back to it. Maybe there's someone on the chat that missed it. Yeah. So where was the... Oh, man. I needed a coffee when I created this link. Yeah. All right, sorry about that. It's eBPF, but yeah, just click on that link, I guess. Queer with typo. Yeah, sorry about that. That's what we do when we multitask, right? Okay, going back to... So yeah, can you check in the chat? I don't know if you have access. I can do it. Just check if anyone needs help there. All right, well, you guys good now? Awesome, awesome. All right, so, again, let's try to create an eBPF program using VCC this time. So as I mentioned, to create one using VCC, you're gonna create everything in Python. Like you're gonna write in Python, you're gonna have the C code for the kernel. Sorry, I just ran it directly. But you're gonna write the C code in Python, and you're gonna have also the user program written in Python, right? So we're gonna show you guys this in a second. So let's see, start by that. So let's start here and take a look at an eBPF program using VCC. So what we do here is gonna see that we have some C code, which is starting from here, all the way, I don't know if it's too small. Yeah, but starting from around here, all the way down to, I don't know what's going on with my UI now. I'm gonna just refresh. Let's go back. You're gonna see that you have some C++ code, I'm sorry, some C code all the way down here. That's basically for our kernel code. That's the one, the program we were writing right now, just gonna grab any IP communication and print it, okay? So it's gonna be attached to basically a TCP for connect, and it's gonna print anything, like if there is any IP interaction, let's say you call out somewhere, or there is a service calling something, we're gonna print it, okay? That's the program we were writing right now. So to do this, we're gonna have to do two things. Mainly the first part would be creating what we call the kernel code, the kernel program, and that's in C, and that is tied to the TCP connection event, and then it's gonna put that address, it's gonna put that IP into a map, as I mentioned. Okay, I was like, maybe it's a question here. And then once the kernel code will grab that IP when detect there is a connection there, you're gonna put it in the map, and then you're gonna have the user program, that's one is in Python, gonna read that map and print it, and that basically what's happening here on the second part of the Python code here. We'll see that we are just looping on all everything in that map, and then we're gonna print it, okay? So again, kernel code will get the data, is listening to the event, grabbing the data, any connection, grabbing the IP, putting it in the map. The user program is connecting that specific map and fetching data there and just printing it, okay? That's basically how ABPF programs are. Now, let's try to do the same thing. So, okay, again, let's go back here and let's just run it. So again, if you run this Python three data, if you run the same Python code, we're just looking at here, we see that we are capturing all the IP communication here, okay? So source address to destination address what's happening in your system right now, okay? And you see this is really powerful. So now we can definitely monitor what's going on, all the interaction, IP interaction that you have within your same system. Now, let's try to do the same thing, but this time we're gonna try to do it using libbpf. All right, to do this, let's go to a specific folder and then we're just gonna copy all the code that we need. Again, as I mentioned earlier, the main difference between bcc and libbpf, in the bcc, what we did, we had Python that, you know, taking care of our user program code and we just embedded the C code for the kernel within the same Python script. In libbpf, everything is in C, both a user program and your kernel code, okay? So we're gonna see how this one worked. Now we copied everything, our example here, let's just do a make and test it out first. So we're gonna make our binary, I think also something I mentioned with libbpf, the binary you're gonna create, this one can be reused on other platform, okay? It's not only tied to a specific environment compared to the first code we did. Now that we have our binary, let's just run it. Okay, and we see basically it's kind of the same thing. We are capturing the traffic, we're capturing the source destination and, you know, the target destination and printing both IPs here, okay? It's kind of the exact same functionalities. If we take a look at how this one is implemented, you guys are gonna see that, let's look at the source code. I think we should focus on mainly, we should focus on mainly what we need here is defining, sorry, just messed up here. Let's talk about this here, right? So in your code, as I mentioned earlier, you always use a map to communicate between your current program and your user space program. And through that, you're gonna use a map and there's basically two main ways of doing it. Either you can use a hash map, which is basically a key value store, or you can use ring buffer, right? So basically it's just like a queue. So you're putting data in a certain queue and then we are fetching it on the other side. That basically, like what we're using right now, right? No, sorry, we're using a hash map here. But basically you're gonna define the structure of the data you're gonna send to your user program. All right, so once this one is defined, then we're gonna look into what are we doing and the other part important here is that we are tying our kernel code to a K-Prop TCPv4 connect. So again, as I mentioned earlier, when you create your kernel code in ABPF in the kernel, you tie it to a specific event, right? So this code is watching for something and reacting to it. In our use case here, we are listening to a TCPv4 connect, okay? So we are checking any communication going on and then processing this data and putting it in the map, kind of the exact same situation we have previously. Only difference here, both codes are in C. Okay, so now we saw the kernel code at this stage. We saw how we defined the structure of the data we need. Like we see here that we need a map and the data actually that you mentioned that, but the data you see that we are sending here that we're looking for, we're looking for, we know we're capturing this two field here. Basically that's what we are sending through our map. We are sending the address, the source address and the destination address, kind of, like if you're looking at, like if you're writing any code, like you're familiar with like definition of structures, you're gonna define like what kind of objects you wanna transport from like, through a map or through like a channel if you're doing go or something. So basically here we're defining that we need to capture, populate the source address and the destination address we're gonna define all this dimension and use it to put it through the map. All right, so that was the kernel code. Now let's take a look at the user space application. So as I mentioned earlier, once the data is processed on the kernel, now we need to connect to it and read it and do something with it, okay? And in this case, it's basically just going through the list. It's just going through the list and printing whatever it gets, right? We are going to connect to that map, capture the data and just print it. There's nothing magic here. Now the thing is, so the thing is that you need to be aware of here, there is no mainly difference, like at the end, the two, the BCC program and the Libbpia program are behaving exactly the same, though this time we create something more efficient. So we just, you know, we built it once, okay, we had to create our user, we had to create our user space program, but basically we just built it once and now we can reuse the same binary on a different environment, right? You can even like copy it to somewhere else and run the same thing, it's gonna always work. I mean, as long as you're running on kind of a new kernel. All right, so I hope you guys see at least the difference between BCC and Libbpia. Now, let's simplify this even a bit further. So let's try to make a simplified application. To do this, we're gonna use Bumblebee, okay? First, just a question here, are you guys on the same lab? Are you guys right here? Are you good? All right, awesome, okay. Okay, so we saw how to do an eBPF program. So at this stage, you guys can create eBPF programs, right? Right? All right, proud of you guys. Yeah, so let's say now, I'm kind of, you know, that's what I was like mentioning when I started talk.  I think that's the main goal of it, and we're trying to simplify things through technology. If we have to still deal with low-level libraries, it's gonna be complicated, though here, we still have to deal partially with some low-level libraries, but there's a lot of other toolings that can simplify our life. And that's the goal of Bumblebee. We see the complexity, let's try to reduce it, and I'm gonna solve it completely, but let's try to make it better. Okay, so let's install Bumblebee here. Okay, now we have Bumblebee installed. So if you run just B, sorry, too many E's. You should see it installed. So let's go and do B init. So B init will just create kind of a placeholder-type project within in your system and allow you to create your first eBPF program. So you do B init and then, okay, so which kind of language we wanna use today? Today we're just, we can only use C, but in the future we're looking to using Rust, too. So, okay, I wanna a C-based eBPF program. Now let's take a look on what we wanna do. Are we looking into doing network stuff? Are we looking into capturing data from the network, or are we looking more into kind of file system things? Are we looking to capturing who is opening certain files or so on? Okay, at this time, in this example, let's do a network point. Now, in term of what we wanna do, you know, I mentioned the map, like I mentioned the map that contains the data sent from the kernel code to the user space program. What kind of type, what type of map you want? At this stage, let's say I want a hash map, okay? So I don't want just a queue, I want a key value store. And now, the last one is basically how, so the data I'm gonna get from my kernel, the data I'm gonna get from my kernel program, what I wanna do with it? Am I gonna want it as a metric, like a counter, or wanna as a node, I want it just maybe to print it. And this is what we're gonna do right now. We're just gonna print the data coming from the kernel program, okay? And then, let's say we just want this into a file called probe.c. All right, now we good. Alrighty, so let's take a look at probe.c. Probe.c. And we can see that now, at this stage, it's kind of just a placeholder of what kind of data you're looking for, okay? In this case, you saw earlier, we define our structure of the data we're looking for, and here, we didn't define anything, right? The dimension is empty, so we didn't find any data we wanna process, but we're gonna do it later. And then, we're gonna define basically the configuration of the map that we need for transporting data from the kernel all the way to the user program. And at this stage, we are actually connecting basically just kind of a hailware example, but in this case, we are connecting to TCPv4 connect, okay? So because we said it's a network ABPF program we created right now, we are watching the event for any TCPv4 connects, right? Now, let's do something. Let's do a difference between, a diff between the previous, we do a, let's do a diff between how we do, create a user kernel program in just libpf, comparing that with how we do it in bumblebee. If we run it here, we're gonna see that the only difference, so basically, bumblebee behind the scene to use to create like a kernel programs, it's still using libpf, okay? So the only difference here is that we added like a way to say how we wanna process this specific data, okay? And we see here, like in the old, basically on the libpf one we did previously, we just use the map. This time, we're saying, okay, we want a map, but basically we want also a counter based on that, okay? And we'll see how useful is this in the future. All right, so now let's just get the code of the libpf we did previously, which is gonna get up the same one this time, just the kernel program one, okay? We're not gonna get the user program one, we're just gonna do the kernel program, copy it and just modify the specific line that's calls only that put data in map, we're gonna put maps.counter. All right, so let's copy this, now we have it, all right. So, okay, so at this stage, we have a libpf type program, so we have a bumblebee program only for the kernel program, we didn't write the user space one that actually reads the data, and the only thing we modified here is that on the map, we did map.counter, so we are gonna count the data. Now, we decide that as a counter metric. Now, why bumblebee is important here? How's it gonna make our life easier? At this stage, we'll see no difference, right? We just saw, we still wrote, we still have to write a libpf program on the kernel. Well, the good news is, you don't need to create the user space program, you don't have to write that anymore. So this is gonna be taken care of by bumblebee, right? So if we go back to the previous, I don't know if we can go back to the previous example, but if you guys remember the second example we had to create two C files, and this time we have to create only one, which is just the kernel one, only the one that matters, okay? All right, so let's do, and now let's show you also how we can simplify all the process using B. When I say B is like bumblebee actually, right? So let's do a B build here, and you guys see that I'm compiling my BPF program. So it's gonna compile the example I have here for TCP connects, taking some time, and then, all right, now it's compiled, okay? Now I have my BPF program ready. I didn't have to create a user space program, okay? That's a win, right? Now, okay, so I have it compiled, I have it in OCI image. I mentioned earlier it's kind of same Docker, kind of a Docker experience. Now that I have my program I can push it somewhere, right? I can push it in any OCI compliant registry, anything that can store for example a Docker image. So here locally you can start like a Docker image registry in your environment, and then we're gonna be able to push that program, okay? So now think about it. You have your BPF program created, you have it now in the registry that you can reuse, okay? All right, so now we have the program there. So let's now just run it. Okay, we're just gonna do be run and point to that specific, you know, build and look at that, okay? Basically, we didn't have to do much. We had to create obviously the kernel code one, but you see that we have a counter automatically included and you see the values here, how many communication we have between that specific address to that specific address.  These ones aren't coming from any traffic operating on your system, okay? So think about the power here, what you can do. Now we create a BPF program that we push to a registry that we can deploy anywhere we want is actually printing really valuable data, okay? All right, everybody. So let's take a look at what we can do with other data we can use. Since B is running right now, like Bumblebee is running, it's actually also providing metrics, okay? We said that this is one of the most important things providing metrics easily. So if we do a curl slash metrics, pointing out on the port 1991, since our Bumblebee service is running, let's go to another terminal and just run this command here. You guys are gonna be able to see that we are getting a lot of metrics that we can be able to use. And we're gonna see that later, but you see the first one here on top, right? I don't know if you guys see it or I can just probably zoom in. But basically we got the data, we are getting the data from source and destination, like the data that we really need as a primate as metric, right? And this kind of component we already wrote, we can reuse it. I mean, within the same enterprise or company, people can reuse like ABPF programs without having to write them. They'll be able to run it somewhere that's gonna collect data from a specific, like let's take an example here. Let's say I'm part of a company and I'm maybe an Asari or maybe just a security guy. But the thing is, they're asking me to provide a way to monitor every single cluster, communities clusters to get all the data from the traffic going from a service to another. Okay, so what I'm gonna do, let's say I have like 50 clusters. The only thing, it's pretty straightforward what I can do here. I can build my BPF program, compile it, build it, push it into a registry, and then just deploy it on every single cluster. I can just have like a, for example, Argo CD or something like that, that deploys this BPF program everywhere. It's gonna collect data from everywhere and then I'm gonna be able to see a full graph or communication between all my services, okay? So let's put, actually, we've been seeing a lot of code now. Let's see a use case. Let's see how we can use BPF in one cool example. All right, so in the next lab, we're gonna put all this together and try to see the power of, actually the BPF program with Bumblebee. Are you guys excited? Are you guys ready? All right, so are you guys done at least? Are you guys at this stage here, or am I going too fast? Good, good, awesome, awesome, yeah, cool. All right, so too much code. Let's see the fun stuff. All right, we already wrote our BPF program. We already pushed it to a registries, already ready. You don't have to do anything. You're done with that part. Let's put it in a real use case here. So let's say I have a demo application, right? Let's say, in this case, we're gonna use the book info demo application. Let's say I wanna use that one. I'm gonna deploy it on my currentest cluster. There you go. This will create my demo application with couple services. If you do a QPSTL, good bud. You're gonna see some containers getting created. Okay, so the book info application just contains like four services. It has new Y, and you can see like, you can have, I think it has like a product page and reviews and details, ratings. Does anyone here use these two? No? Okay. It's basically the demo example that you use always, okay? All right. So I have a demo application running. Think about that as your application, right? Like whatever you're using internally. It's on communities today. Now, let's actually deploy Prometheus to collect all this data and put it in Prometheus. Oh, sorry, I need to click on the right things. All right, let's create a namespace for Prometheus, and then let's just install Prometheus. Do you guys use Prometheus here? All right, cool. All right, so the goal here is to collect metrics and put them, like all this data, all the connectivity data we saw in the previous lab, we're gonna put that into Prometheus and then leverage this data. All right, now Prometheus is installed. That's cool. Now let's install, actually deploy Bumblebee. So again, previously we mentioned that we can package the ABPF programs into an OCI image that can be in the registry. So now what we're gonna do is that we can deploy this ABPF program on our cluster. And to do that, we're gonna use a demon set, okay? And we're gonna make sure that we have at least one pod running on every single node in our Kubernetes cluster to collect this specific data. So just the demon set here, nothing crazy. And you can see here the only difference here. So we have Bumblebee running the, you know, just the Bumblebee Docker image. We have a package here, but the thing here, what matters is that we are pulling data from this OCI image that we pushed in the previous lab. You guys did B push to a registry, right? So that's the only thing we are doing. So we are running a Bumblebee container, but we are running actually this, the BPF program within the same pod. And then we're exposing everything through a port 1991. Now once I deploy this, this is done. So this will create a pod on every single node. And that pod will have our program that we created previously running, okay? And the metrics we saw gonna be exposed on a specific port. Now, the only thing we have to do is to configure, you know, Prometheus pod monitor in this case to look into this pod and, you know, collect data from it, collect all the metrics to send them to Prometheus. And we see that here, okay? All right, good. All right, so at this, okay, so at this stage here we have our demo application installed. We have our ABPF program running on every single node and we have Prometheus configured to listen to metrics on that specific pods. Now, the only thing we're gonna do is to run some traffic. All right, so here, just generating a traffic, imagine that's a customer playing with your environment or anything you want. So we are running traffic through multiple microservices, right, so going from a pod to another and we just need some data here. Now, so at this stage we have all our data in Prometheus. So the only thing I'm gonna do right now, actually one of my colleagues created this small program called key ABPF, it's just gonna look into Prometheus like for the data and then gonna format it in a graph. So that's the only thing that's happening right now. We're looking into Prometheus and then we're gonna collect all this data, show that as a graph. All right, there you go, we're gonna just create this system and here we are just deploying this pod key ABPF and it's looking into Prometheus, right? We're pointing it to Prometheus itself directly and that's all we need to do. This is running, this is cool. So let's see what's happening here. I don't know if you guys can see but this is what we just created, okay? So we have a Prometheus cluster of multiple nodes. We have Bumblebee installed on every single node, that's the one collecting the data and then we have our product page and details and reviews and ratings installed in our cluster. I don't know which nodes, basically it's just installed there and then we're running some traffic here to see what's going on, okay? And all this data from Bumblebee is pushed into Prometheus and then we have this KEBPF, it's just a server to process Prometheus data and show them in a certain way. So if you go to KEBPF, there you go. Look at this magic, really cool. All right, so you guys saw what happened here? So like the program we created earlier in the previous lab is producing data here. It's producing a really valuable data. We can see what's going on. We can see which service is calling which service. You see here, we can know that the traffic is originating from the product page, going to the reviews, going to details. All this data got captured by the BPF program we just created, okay? We deploy in our clusters and then how we collect them and how we process them to show some valuable data. And after you guys, I'm gonna be using like for example, Cilium, Cilium do something kind of similar with a project called Humble that will collect data and produce some sort of graph or some sort of charts, okay? So this is just a quick example of what you can do with the BPF. It's really powerful to get data directly from your notes, you can process them, you can display them this way, you can create policies to secure the traffic and so on. So I hope you guys saw the power here. That's basically the end of this workshop. I hope you guys saw what we can do with the BPF. It's a really powerful tool. I invite you guys to test Bumblebee locally. See maybe that's, maybe because I'm gonna find another use case for it.  First thing I wanna mention basically what if you guys interested in all these technologies, right? Like a BPF, Cilium are interested into Istio, Envoy, we are hiring, we're going to company fast. You take a look there, always looking for talented people. Second thing, we are, we have a booth here at 25. You guys have any questions right now or after this talk, if you wanna just continue the conversation, please visit us there. It's gonna be always good to see you there. And lastly, I wanna just mention our badge for today.  Yeah, so if you go to ABPF-exam or just scan the QR code, pretty small, but I don't know if you can do it, that will take you to a quiz and it's probably, like I think there's like a 15 questions on it. And if you answer them all correctly or more than 80%, we're gonna provide you a fundamental for a BPF badge. If you just wanna redo that specific exam, just use a different email and that'll totally be fine. All right, and about that, well thank you guys for listening to me. Those, hopefully that was some valuable information here. And the best thing we did in only one hour. At five p.m. in the afternoon, I guess you guys were done. If you guys didn't have any questions, I'll be here around. Hey. Yeah, so let's go back to data show here. Let's go back to it. So if you go back here, all right. So remember, Bumblebee was providing metrics directly on the server. Once it runs, it provides metrics on the port. I remember it was 991 when we can't figure it out, right? Primitives have a way to collect data and that through what they call a pod monitor, I think. Where is it? Did you look for it? Yeah, there you go. So basically, this CR here, right? We'll tell Prometheus to go and look for data from slash metrics on a specific port that we call, like for example, this time we're putting the port HTTP monitoring, okay? This CR here will configure Prometheus to aggregate data from any service, any pod basically labeled Bumblebee and that has a slash metrics on a port HTTP monitoring. We don't have to put specifically 991, just we need to label the port itself and that's gonna take care of the data collection. All right, any other questions? I'll line, okay. Yeah, don't mind me, sorry if I mispronounce anything. Yeah, go ahead. So Adam, you mentioned that the EBPF program you prepared would work on any other machine. Is it due, so would work, so yeah. Is it due to BTF? What code changes if any need to be made for an EBPF program to be portable? Oh, okay, good. All right, so mainly the portability part of it is based on two things. Like if we look just between BCC, right, and LibBPF, which let's take the comparison here because that's the main one that is allowing us to do portability. If we go back to, I'm not sure I have any program here running, well let's see if we can do that. Let's just give me a second. I'm gonna go back to the example. EBPF introduction, I'm gonna show you something here. So once you, if you create any BCC program you're dealing directly with binding methods that talk directly to the kernel, okay. Where if you do LibBPF, you have to use specific libraries, right, that kind of creating an abstraction there to allow the portability, okay. I'm gonna just try to find you an example here. It's gonna be easier to understand. Well, this is still the first example of BCC. But yeah, let's first start with BCC here.  So in LibBPF, and let's be finding you this right now. Okay, let's be just finding you this. Well, maybe I can just do it here. Okay, oh yeah, maybe here. All right, there you go. Maybe I'm wrong, but okay, let's do this now. Okay, so every time you're dealing with, every time you're dealing with like, you're trying to do portability, the way you do it in LibBPF is to call this binding command, for example, this BPF core read into. This one will guarantee the portability across multiple kernels, because it's actually a binding on top. It is the one dealing with this, you know, building a binary for multiple kernels. It has this awareness because we're using an abstraction that's a framework on top of just direct code like in BCC. Okay, so that's the first part of the portability. The second part of the portability is once you create that, like once you create a LibBPF program, it's just running on Docker image, right? It's running on Docker image, and so the portability is gonna be there because even if you have another environment, it's still a Docker image running, okay? So that's how portability is assured. Hope I answered the question. Why do I get assertion error expected zero to be at least one? Okay, you got the same thing? Oh, okay, yeah, you just do, I think when you miss to do a B push, there's like this command Bombaby push basically. If you miss that specific command, I think I had the same previously. It's gonna say, you know, we have to be at least, yeah. Awesome. Well, thank you guys. Really, really, thank you for joining the session, and hope to see you soon, hope to see you on that. We offer a lot of, you know, this kind of same workshops. We provide them online, so if you join Solotio, you're gonna see we do that for Istio, we do that for like Istio, we have three, we have one which is fundamentals, one is like more advanced and one is expert, right? We do that for Envoy, we do that for like now for ABPF, so there's multiple certification you can have. So yeah, you're about to see you to see there. All right, thank you guys.


These are my good friends Dominic and Dana, and together we're going to ride bikes around Western Cuba. Before we jump into this, I want to give you some background on these friends of mine. Dominic is a talented filmmaker, storyteller, photographer, but he's also ridden his bike all over the world, and he once rode a tandem bike from Alaska to South America, picking people up along the way. You might recognize Dana because she's been in a lot of my videos. She's a super strong athlete. We once rode bikes together to Burning Man a thousand miles through the desert. The love and we got the kindness. She is one of the most kind and loving and generous and non-judgemental and just beautiful human beings I have ever met. Okay, now you know Dominic and Dana. Let's do this. I had such an amazing time last time I was in Cuba. It's one of the best places I've ever ridden a bicycle. You know what I'm doing right now? I am loving life. And I'm excited to bring friends back this time. It's not just me. I get to share the adventure. How are you feeling this morning? I'm feeling a little discombobulated, but I think I'm going to get out of it. Yeah, I'm going to get re-combobulated. Oh, I'm excited that we're all here together, guys. We're going to try it. On this very short flight, I'm going to read this book because I have not planned our route yet. Seriously, I don't really know where we're going. We're going to the western side, Vignales, Pinar de Río, something like that. But this is the least organized I've ever been for a bike trip. But I like it that way. Steps off the airplane. Goodbye, thank you. The hour is late. I had a friend picking me up. The same guy that I gave the bike to at the end of my last bike trip. He's a gym teacher, a runner. And although I only talked to him for a few minutes, I know that he'll put this bike to good use. We'll see if he's really here. Gracias, amigo. Oh, miren, los zapatos tan bonitos. Yeah. Our buddy has arranged a place for us to stay. We're down here in downtown Havana, right next to the ocean, actually. Hola, amigo. ¿Qué tal? Mucho gusto. Ah, sí, bueno, qué bueno. We got situated in our room. It's cozy cozy. Now we're off to the workshop, the bike shop, where we're going to get the bikes all ready for our big bike tour. It is time to rent the bicycles. We're at Velocuba, which is an awesome bike shop. From what I can tell, it's run by all women. I have been chatting with them online. They said they have three bikes for us. We're going to rent them. We're going to rock at them. We're going to rattle over this island, the western part. And I'm really excited to be supporting a local bike shop.  And this way we get to make new friends. So when I was chatting with the woman, she said they had saddlebags for us. When we get here, they're like, no, we don't have saddlebags. So we have a bit of problem solving to do right now, because we have stuff to carry. And not really much way to carry it. I brought it with me. It's really nice. I like it a lot. I've been doing it for a long time. It's very healthy. And above all, I avoid public transportation, which is very expensive. And well, I save money. I earn in health. And I feel really good riding bicycles. We have stuff to carry and not really much way to carry it. I brought a few green guru bags, but definitely not enough to carry all of our stuff. All right, these are going to be key, Dom. Yeah, Bungie, I consider myself somewhat of an expert using these to affix every piece of paraphernalia to the bicycle. So I think we'll be good. You brought your own seat. I brought my own seat. So leaving the city is probably going to be the biggest challenge. We're going to try and get ourselves a paper map. But I think beyond directions, breathing in the sheer volume of carbon monoxide that comes out of these classic cars is going to mean we're more likely to fall asleep than actually aggressively crash into anything. What? Oh, my God. Are you kidding? Look at that one. Gracias, gracias, gracias. Gracias. We got our bikes. We are ready to rock and roll. I'm psyched. I'm psyched. I feel so much better when I have two wheels to travel on. OK, this is by far the most minimal I've ever done a bike tour. We have two pairs of socks. I'm going to have two shirts, helmet, giant wad of money, which is really only $300. Shaver, deodorant, sunscreen, selfie stick, camera batteries, tube, patch kit, pump, passport, memory cards, IB profan, water bottle, flip flops. And it's all going in here, and here, and here. I'm going to put it into this orange bag and I'm going to strap it there. I can kind of make it rain, but I don't want to do no. If I make it rain, it's going to go out the window. What are you doing, Dom? A bit of trial and error. Just want to make sure that my camera bag doesn't get run over by a classic car. I'm getting closer, finding a spot for everything. Of course, this is very important. I already made my own bike bag. I take this, and I put it into this, and it's waterproof, and that is my canary. And where's it going to go? It's going to go right here. And I already tried the bungee. That works. I'm really excited to debut this new cycling outfit from my buddy, Matt, Co-Nation Collective. Check them out. Look at this. This thing right here matches right here. This is all made in the USA. And these buttons, these pearl snaps right here are vintage 70s Levi's buttons. Because when you ride your bike, you want to look cool. I don't know if I look cool, but at least I feel cool. All right, so we're pretty much done packing. Evening is upon us. We're going to go to sleep because we didn't sleep last night. We're going to wake up, ride our bikes. You ready? I'm ready. I'm so ready. Ready to ride my bike. See you in the morning.


Hello everyone, so yeah, so I'm good to be here and and to speak at this event Yeah, so as MC has mentioned, I've been using WordPress for for some time. Can you guys hear me? All good, right? Okay so I've been using WordPress for as long as I can remember like since almost as long as I I use Facebook, I remember it was like first year in uni when Facebook first came about for me So just to maybe customize my talk a little bit, how many are really existing WordPress users here? Most of you right and Okay, cool. So I'll maybe go into a bit more detail Yeah, so just a quick introduction of Tech in Asia. We have about over a hundred people 14 of which are in the editorial team So we do about, you know, five to 15 articles a day As mentioned about 1.4 million pages a month. So so but aside from the editorial team, we also have a Jobs feature where people can post and And and they are job postings if they're hiring or they can apply for jobs We also recently implemented a feature where people can submit content So anyone can be a writer on Tech in Asia, basically Yeah, so my job basically is to In Singaporean terms, Baokaliao. So I write I edit I help to manage Strategize content strategy everything. So, you know, that that's what how it's like in a startup, I guess That's what this is what Tech in Asia looks like. It's been through a lot of Uh iterations Yeah, so pretty Straightforward editorial website. You have the articles Um, you have jobs you have we also allow people to submit events On our website and on the top right, you can see the the right button where people can submit content Yeah, so just a quick snapshot of the stuff we cover Um, so this is EV, which is a great personal assistant that arranges your meetings for you. It's actually a bot So we do startup profiles. We do leaks We do Yeah, cute infographics like like this Um, yeah, there's a snapshot of what we do. Yeah, so, um, the subject of today's talk is really to give a glimpse Into how how we use WordPress Uh, to in our workflow how we manage content And and how we publish on WordPress basically So, uh, within the editorial team, we we use something called flow dog, which is kind of like slack or or What's the other hip hip chat or something like that? Um, yeah, so Uh, whenever someone wants an article published, uh rather edited on uh by Dialogue editors, they will post a link on a google docs link On flow doc and then, you know, some of us will just go in and and we'll edit the article Um, so we use like google docs as like the first stage of our editing Um before WordPress, right? So everything goes on there Um, the reason we use google docs is that it's very collaborative In that, you know, you can actually see editing happen live You know as it happens on on google docs. Um, you can do things like leave comments um, you can So everything's very instantaneous, right? It happens Uh, live, so that's why we we like using google docs. Um, yeah, maybe there's something similar in WordPress, maybe not so I love to hear your thoughts as well if you come across something like this Yeah, so the the first stage happens on google docs um We use something called markdown. Um, I'm sure some of you are familiar with this So, uh, basically markdown Is is a very easy way to write html. We you can actually write html without knowing html. So Um, yeah, this is basically markdown Um, so this is basically like a list, right? Uh An unordered list. So the yeah, I I'll show you how how you look like later Yeah, and then we move on to wordpress. So we'll upload the article on wordpress. Um Yeah, we we put the picture we Insert the headline and things like that yeah So there are a few very interesting, uh, customizations we do In wordpress itself. Um, thanks to to lester who's Really the brains behind everything in on our website. So, uh Yeah, so we there's actually markdown support in wordpress that comes with jetpack, right? Yeah, if you can correct me if I get anything wrong. Yeah, so, um, yeah so basically how this works is that you can just copy and paste the markdown into Wordpress itself in visual mode Um, and when you press preview right it actually turns out Exactly the way you want it as a as a list in this case So the the bolding is there the link is there Without the need to like convert it into html first and then Paste it into wordpress. So we used to actually manually convert into html But we managed to get rid of that intermediate step Um, we have another customization. So we we did like a short code So, you know pool code and then end off with another pool code tag and This is how it shows up on on wordpress so Very nifty feature Yeah, another customization we did was that um, so when we write about company will include like a Profile of the company at the bottom of the article So in wordpress, we are able to like select, you know the company and then Once we save, you know, everything will show up here um Another key part of our editorial workflow is that uh, we have like we're very clear about Who edited the article and the reason for that is is first of all accountability, right? If if somebody screws up the editing, you know, who's at fault basically and and that includes me, right? um Yeah, and also helps us to keep track how many editing work people have done So nothing fancy here. It's just like a text field where we key in manually edited by whoever Yeah Yeah, um, very important this So we have a what what plugin we use for this uh custom coded. Yeah, so um Yeah, so basically we it's very important for uh editorial website like tech in asia to Um to appear right on google so when google Um, and the reason for that is is google has like a 90 character Um limit for no not 90 60 character limit there about for headlines. So anything after that, right? Will be cut off That's why we have this right so We have like Guidelines so if we surpass 60 characters, you will know Again, right? This is like seo best practice Generally to to keep your description within 145 to 155 characters So we implemented this to make sure that our writers follow the guidelines Yeah, so if they So which that's why sometimes the headlines on our website It's actually very different from the headlines on google because We want to make sure that our headline is short enough and concise enough for google And also contains the right keywords Yeah Yep, so we have this in wordpress as well um What one thing we implemented recently was uh Nowadays, you know branded content is it's like the next buzzword in in media, right? Like buzzfeed is it's all about branded content and yeah tech in asia. We started going into this recently so We used to do this like brought to you by who the sponsor manually like someone would Do the image and then would Upload the image and then um So the whole thing was an image. Uh, so but now we just need to key in the Uh sponsor logo and then you'll show up there So that's another thing with it Yeah, so um I guess uh at this point Um, is there any questions about you know Anyone know about how we do things or Yeah Okay, right so, um, I guess how do we expose our content to readers, right? People don't come all right, right? So where do our readers come from? Yeah, because sometimes one story just goes viral very easily But sometimes there are some stories just like nobody wants to watch it So how have you get people really get excited about that? Okay. Um, there are many ways so Um, number one, uh, we sometimes do stories specifically for people that come in on google So we are very so we do like keyword research Um, so one example was that um, you know a lot of startups They are looking for funding in singapore, right? So I did an article about um So I did some keyword research. I found that venture capital singapore was very popular So I did an article like listing down all the venture capital firms in singapore Uh, and until today that has gotten traffic because I think it is still the number one Um, article if you search venture capital singapore on google So that's one way we we get traffic Very simple keyword research on google and then we write content targeting those keywords um, another way would be um I think that it's an art when it comes to writing stories for social media. So A lot of our stories A lot of our readers come from facebook So we are very careful So we pay a lot of attention to the headline like um We try to emphasize the The human element in every story um, so this uh last night there was a story about this startup called plinz who they're basically college dropouts and They left their scholarships to to do this company. So We we make sure we spend a lot of attention we pay a lot of attention to the headline to make sure that um The headline draws in readers. So The headline was something like, you know college dropouts race Funding to do their startup something like that to highlight the human story in it Yeah, not sure if I'm answering your question though like so Do you and do you pay Facebook for the readers? Um, very rarely. So all our traffic has been organic Um, I in the early days, we just kept publishing kept sharing And then we would publish a story on our facebook page Uh, and then we would just share ourselves and then we tag our friends And we just grew organically over four years Stories Yeah, so it's it's a numbers game like the more you publish The more you publish the more likely your content will go viral Um, that's one number two. Obviously is that you understand what makes good content So I also there are a lot of studies done, right? So content that's emotional, right? So if the content makes you go like holy shit, right and Or makes you really happy or joyful or angry Those kinds of content tend to propagate on social media So we will look out for those kinds of stories Yeah Any questions? Yeah, uh, I I've heard that you are using custom SEO plugin And so I'm wondering why not using something prove it. You ask SEO or it's not good Yes, I think Yeah, let's just answer that Of course our Our So we don't need anything. We can't have anything that's Code or snippets that's injected into the team. We don't use the reverse email So everything's exposed by API. So when we do our custom SEO, we can expose it via our custom API as well Then the react partner will render Google Yeah, obviously bogey text and the meta description Yeah Thank you. Okay. Um, any any other things? Yeah How do you work with uh freelancers because I know you have um, like writers and the community Community page Because um, the community page is is not paid for freelancers, right? So do you Do you work with? Um, okay. So your question is whether we work with freelancers? Yeah so we We we don't really rely on a lot of freelancers because Um, I think just part of how we do things is that we like to have full control over our content. So We engage mainly full timers um so On rare occasions, we do get freelancers. Actually, no, actually. Yeah, I need to correct myself. Um In the india team, so we have like about four writers in india full-time writers Uh, we we just tried one So in india, we do have like three or four regular very regular freelancers So how we manage them obviously is that uh, so at first we'll stick them out first So these are writers that um That our team members already know Um, and through their years of working in the industry So we'll engage them. Uh, often we treat freelancing as like an audition Um, so before we hire someone full-time, we sometimes give them freelance work. We pay them, of course um, and then Yeah, if they do well with their freelance articles if their language is good if they write well The content's great. Um, we'll probably hire them full-time So that's the extent to which we use freelancers. We have regular freelancers who we have like full timers will become freelancers um, so sometimes the story ideas come from us In that we'll we'll have like, hey, we think this will make a great story. We'll pitch it to the freelancers Uh, if they're interested, they'll work on it. Sometimes they pitch ideas to us So we have one person in India designated to manage the freelancers Um, yeah, so that's roughly how it works uh, yeah Cool. Um, yeah, I guess I'll move on to with the talk so so, uh, one thing I'm touched on is that um Like I've been using WordPress for seven eight years, right? So Uh, I guess I've seen in a way how the media landscape has evolved so I just want to touch a bit on um The the future of media and and where I see this going and whether WordPress will continue to be relevant Um, so in the past this has how more or less websites have been operating right how editorial websites Uh have been operating so that the website is king and everyone else, right? Uh, if you're publishing on facebook if you're publishing on twitter or linkedin or google The objective is To drive traffic to your website So everything else services the website Um, but I find that in the past Few couple of years maybe things are starting to shift, right? So So this is the future basically where facebook is like eating up the media and everyone about us are like serves in in a vast kingdom so So what's happening is that you know facebook has has instant articles, um, which we use um, that basically lets readers Read content on facebook without even leaving the website Leaving the social network google is also like encroaching on um on media because like nowadays you can Can play what tic-tac-toe on on google now or or solitaire or something like that. I think there's a recent announcement um, they are they even launching a travel Uh feature where you can I don't know like check flights or something on google So in a way it's also encroaching on On websites So I think publishing is going to be very distributed Um, and I'll give you a very good example So this is bus feet. Um You can see that since 2014 to now the website traffic has basically been flat, right? Um, but what has happened is for bus feet is that its video views has has actually grown By many multiples, right? So, um, it's publishing on on Facebook it's publishing on youtube it's publishing on snapchat Instagram and every other platform you can think of So I think that the era of websites uh, I think websites will still play an important role, but As a publisher if you're thinking of publishing if you're running a content marketing website if you're doing content marketing Um, I think this is the future right the era websites that websites are sort of diminishing um, so just to play this So this shows like how the bus feet editorial team has is evolving Um, yeah, let me wait for this too Yeah, so as you can see right in the beginning it was very straightforward just editorial And then they published to busfeet.com Right, but over time Um, you started to see how they're doing youtube snapchat vine How they are syndicating to over 20 other platforms Yeah, so I think I think this is the future and At tech in asia, we are also starting to shift uh In terms of direction So only like a couple of months ago, we started to realize that you know, we need to stop treating our website as The final destination right for readers Rather it's it's A means to an end it's One of the many ways which we can expect which we can reach out to to our audience Um, yeah, so we started experimenting with video Um, so this was published directly on facebook um Yeah, and we didn't we yeah, so and and this got viral on facebook Um, this was an article that we did on facebook as well So in the past right how we would do this is that we would So the news breaks, right? Okay. We're all scrambling to write the story We would just write this story on On wordpress and then hit publish and once we publish we share onto facebook um, but now Like we can just write the story on facebook, right? Why go to the website that and I think that's a question that many Publishers have to grapple with and the story did well And so yesterday night, right?  Only thing I didn't do was the image, right? Which I use canva so canva Who's familiar with canva? Okay, not bad. So canva is it's basically a uh Image editing tool that's much easier to use than photoshop and I highly recommend it. Okay. Um, yeah, so publishing is moving to social networks Um, yeah, we started doing stuff on instagram as well. So experimenting with memes and Very visually driven stories So like if you click onto this story, for example, it's actually a shorter version of the story we did on the website um so the the story on the website was about the news that they got funding but um, this story started with like, you know, are these these Brothers like indonesians. Indonesia's next media tycoons a more human interest driven stories Yeah, so it's very interesting what i'm seeing now because uh in the past We would just write for the website and we would just distribute it everywhere But now we're starting to write for facebook. We're starting to write for instagram And we are starting to think right? How should this story be presented natively for the facebook audience? um And this has kind of complicated things for us because Now instead of just having like one workflow, right? We have three workflows for three different platforms. So facebook uh website and Instagram and then we have a video team that does Our videos and we have an infographics team So the question becomes right, you know, will WordPress still be relevant? um, okay, honestly, I don't have a good answer to this but um I I do think and i'm not an expert on WordPress. Okay, so um, I I think WordPress does have the capacity to evolve right and and become Whatever the community wants it to be. So this this will give you an example. So this is cool schedule. Uh, anyone uses cool schedule Okay, okay cool something new. Um I haven't used this, but it has come across come across my reader. I might use it in the future So this basically allows you to use WordPress as a means to organize your editorial calendar to see what you're publishing to publish from WordPress to Facebook to Instagram Okay, maybe not Instagram to Twitter and other platforms um, so effectively WordPress becomes like a hub for your entire publishing workflow Whether it's on the social network or on the website Uh, and and this is integrated obviously with WordPress.  Yeah, and that's it Yeah, so any last questions? Yeah In the past when we write for websites is because the website has like, um, you can sell ad space and all that but When you write for the social media platforms, it's more just like brand building and building up your brand, right? So is is is that indeed, uh, the shift because if you do on facebook, then How do you earn money out of it? Right? I think banner ads are Dead, uh, basically, uh, I mean obviously google still makes a lot of money and facebook Um, but the click-through rates are so pretty low, right? I don't know less than what 0.1 percent something like that. Um, so Okay, so how tech in asia makes money? Uh, we have our events. We have our conferences. We're we're we're seeing a lot of growth in branded content So brands say ibm pays you like five thousand dollars to write an article about Um, they are all about what since they are ai solution And then so an article So it's a full article and it's brought to you by ibm Like like you saw just now Yeah, I think so. Yeah, like like that. So um so what we're seeing at tech in asia is that We're seeing of interest from brands in this kind of advertising Uh, I think it's more engaging than banner ads um And sponsors don't care where this is published whether it's on facebook instagram or Whoever so it doesn't matter. Yeah Any one last question maybe yeah at the back Sorry Right. So, uh, that that's done for now. Um, so banner content is still new to us So we are tracking it Firstly using google analytics. So we know how many page views the website's generating Uh, facebook pages if so we run a facebook page and on the facebook page. There's uh insights feature that can track the reach of your articles on facebook So I think every Social media platform has their own analytics Yeah So just combine that and then we share that with the sponsor Okay. Actually you got time for one more question Yeah, hi, uh Yeah, I think that's the point you mentioned about Maybe being platform agnostic is interesting But I was also thinking like, you know, facebook recently they have been changing their algorithm to which group publishers in some way. Yeah. Yeah. So as a whole I mean think about it this way When it comes to revenue everybody as much as they say Everybody wants a piece of the cake So when it gets too good, I think the publishers, uh, sorry the social media platform They were just the one of the tech for the publishers as well. Yeah. So having said that, right, so in the longer scheme of day How do you think publishers? I don't think anyone have an answer to that. This is about how Maybe Yeah, good, good, good question. Very good question. I think all this all the time, right? So I think there are two answers, right?  So there are a lot of websites like, uh, there's there's the information, right? Just this Damn expensive website pay like 400 a year and then you get really good content. It's very very high quality stuff So it doesn't care. So the website doesn't care about social media reach Uh, it's really about quality journalism Um, new york times it is adopting a hybrid. So a paywall model again, right? Very high quality journalism Uh, so it's either really high quality stuff Uh, you go to the Buzzfeed route just get as many people as possible and as many platforms as possible or Tech in Asia, we subsidize our media using events and other revenue streams That's okay. So I think we're out of time. So if you have any questions, I'm I'll be around. Yeah, I can answer them. Thank you


the challenge of the Yukon. Un King, Un New Husky! The Wonder Dog King's, just and strongest of Eskimo lead dogs, blazes the trail through storm and snow for Sergeant Preston as he meets the challenge of the Yukon. Sergeant Preston was typical of the small band of Northwest-mounted police, who preserved law and order in the new Northwest country where the greed for wealth and power led to frequent violence and bloodshed. But in spite of the odds against them, Sergeant Preston and his Wonder Dog King met that challenge and justice ruled triumphant. Being a mounted policeman in the North country isn't exactly the life of Riley. I had just completed a northern patrol and we'd mushed almost 30 miles a day before. I fell into bed and didn't move for 15 hours and wouldn't have then, except for the cold nose and warm tongue of King, my lead dog. When King decides it's time to get up, he won't accept any arguments. I'll go away, King. I don't want to get up. Take that big paw. My chest, quit it. I'll wash my own face. I'll not pull those covers off. All right, I'll get up. What type is it?  You must have thought I'd died. All right, boy, bring me my boots, come on. King not only leads my dog, Dean. He's an ex-bessing to a personal valid. He brings my clothes to me in the morning, not in a proper sequence, of course, but he brings them. First a sock, then maybe a boot. But he takes great pride in being it, and when we have time, I let him. This morning, however, he didn't have time to complete the ritual. We were alone in the barracks, and King dropped the boot he was wearing when Pat Sweeney, an old friend of mine, came hurrying in. Well, hello, Pat. What are you doing in town? Oh, hello, Preston. How are you, King, old boy? Preston, I've got some bad news. Zeke Bailey's been killed. Zeke Bailey killed? Yes. He lives so far from town that nobody would have known it for weeks. I was going hunting with him. We planted two weeks ago. That's how I happened to find him. And Preston, he was murdered. Murdered? Shot in the back. He sprawled in his face on the floor of his cabin. I'll get the rest of my clothes on right away. I thought you'd rather handle the case because Zeke was an old friend of yours. Glad you came to me first, Pat. They'd probably have put another man on the case. I just got back from patrol. I'll permission to handle it. Are there any tracks around the cabin? Yep, plenty of them. Huh?  They robbed Zeke. Everything in his cabin was torn apart. Bring us gold in the tower and it'll be safely. Never listen to me. You didn't disturb anything, did you, Pat? Not a thing. I left it just as I found it. Didn't even put Zeke on the bed. Good. I'll run over and see the inspector and get my supplier. We'll go right out to Zeke's cabin. Look at that dog. He knows something's up. There weren't many hours of daylight left. So, when we got to Zeke's cabin, just as darkness was falling, I examined the tracks while I could still see them because it had started to snow. And I knew they'd soon be covered. Tracks of three men here at Pat. You're right, Preston. I hadn't stopped to examine the tracks closely. I made no attempt to cover them. They probably figured it would snow before anyone found for Zeke. Well, they were almost right. Well, they've taken the trail north, all right. Yes, they headed for 40 miles. It's a shame it had to snow. Now, you won't be able to trail them. Well, this trail is used so much, Pat. It doesn't really matter about the track being covered. Come on, let's go in the cabin. Munking. I light a lamp. It's getting dark in here. There we are. This place is sure as shambles. And where's Zeke? He was shot at close range. Oh, that he was. The modern rats, I'd like to get my hands off of. So would I. Give me a lift, Pat, and put Zeke on the bed. True. It's not so heavy. Shall I be starting a fire, do you think? No, we won't be here that long. What is it, King? He's got something in his mouth. Give it to me, fella. That's a boy. What is it? It's a mitten, Pat. Red woolen mitten. The king must have found it on the floor somewhere. What if it belonged to Zeke? Did he wear red mittens under his furwands? I never seen him wear anything like that. Well, keep this. It may help. Hey, Sergeant, there's a million mittens like that here in the Yukon. That's true. Well, let's look around and we may find another clue. Is this where he kept his gold? Well, Zeke never told me where he kept it. We went over the cabin thoroughly, but found nothing more. I started out on the trail in spite of the darkness. I didn't want to push my teams too hard the next day. It was late the following day when I stopped the team to rest at the top of the hill. I was sitting on the sled and King was a few yards away. Suddenly, he whined. His ears pricked forward and he looked down into the valley. What's wrong, fella? See something? That is clear. It's awful. Oh, yeah, boy. I see him, too. It's a man. How to get off the trail, I wonder. Come on, King. He's in trouble. We're going after him. Hello, there. Wait. We're coming. Oh, fella, he's harmless. Back, King. It's all right. Oh, I can't see him. Don't worry, fella. You'll be all right. You were smart to keep moving. You'd have frozen if you hadn't. I'm tired. I can hardly stand. Well, it's all right now. We can rest a minute. And I'll help you back to my dog team. All right. Is that a dog? Yes, it's mine. What's wrong with you, King? Who are you? Sergeant Preston, Northwest Mountain Police. I'm on the... Yeah, here.  How'd you happen to leave the trail? Where's your pack? I lost my pack. I guess I just wandered around. I'm sorry. I lost my pack. I guess I just wandered off the trail. Were you all alone? Yeah. Yeah, I was alone. How about your feet? They feel numb. Not frozen, are they? No, but I think one of my hands is... Oh, let's have a look.  This one's all right. It's the other one. Let's see. Then I knew why King had growled at him. He recognized the scent of a man who had lost a red mitten in Zeke's cabin, and King connected it with death. This man was wearing only one red mitten under his fur gauntlets. Cautiously, I drew the other one from my pocket, and it matched. This hand isn't seriously frozen yet, but it's going to need attention. We'd better get back to my dog team as soon as possible. Think you can make it if you lean on me? Yeah. Yeah, I can make it. I know a trapper near here. I'll take you to his cabin. You, uh, on your way to Dawson? I know. I've got to get to Forty Mile. I've got some business to take care of. My name was... I didn't say. You can call me Red. All right, Red. Let's get going. I drove Red back to Pierre La Rue's cabin. Pierre helped me fix his eyes and hand. All right, 80 air that came outside with me. What's the hand with my dogs, will you, Pierre? Jesus! You can feed yourself alone, Red. Sure. I can find my mouth. Go ahead. Your eyes will be better by tomorrow morning. All right. Sure hope so. I'll tie the dogs up while you feed them, Pierre. This is first time you asked me to help with dogs. I, uh, wanted to get to a lawn to tell you something. The man I brought to your cabin is a murderer, I think. Oh, dear. And you do not handcuff him? Come. He will get my gun. Why do you not tell me this before? Because he doesn't know that I suspect him. But why, for, don't you arrest him? Because there are two more men I want. I don't know just exactly what happened to Red, but he hasn't any money on him. He's not carrying any gold. These men, you're after. They steal some gold. Yes, plenty of it. And I think Red will find it for me. Now tomorrow morning I'll leave early. You tell Red that I've gone on to Dawson. Give him all the supplies he needs to get to Forty Mile. You will leave me alone with this murderer? He won't hurt you and I won't be far away. Now you must do this, Pierre. Mm-hmm. Oui, Sergeant. If you say so. Now go on back into the cabin. I'll take care of the dogs. I got up before daylight the following morning and left Pierre's cabin. I made sure that I left a clear trail going south toward Dawson. But about a quarter of a mile from Pierre's I stopped the team. And taking King with me went to the top of a small hill, where I could get a clear view of the cabin to my field glasses. It was a long, cold wait. But soon after daylight Red came out carrying a pack. I watched him through my glasses. His eyes were better. They weren't bandaged. And he inspected my tracks closely before he started in the other direction toward Forty Mile. I let him get well out of sight and went back to Pierre's cabin. Pierre met me at the door, his face frightened. Sergeant, he is gone. Yes, I saw him go, Pierre. Going to let him get a good start and then follow him. But Sergeant, you must be careful. Me, I don't know how to tell you. Well, what's wrong, Pierre? It is all my fault. I should have hated you. Right, what? What are you talking about? My gun. His arm. His take my gun and bullets. Oh, I'm so sorry. I was more than annoyed at Pierre, but there was nothing. We waited a few hours and then I took Red's mitten out of my pocket and shipped to King. Are you all right, King? We're going after him, boy. He knows you should follow him. Yes. He probably thinks I'm crazy, Pierre, having him here and letting him go again. King, I know it doesn't make sense to you, but that's the way it has to be, fella. And you won't understand why we have to take a very slow trip to Forty Mile, either. You see, King, Red has to get there before we catch up to him. We managed to keep about a mile behind Red all the way to Forty Mile. It was hard to hold King back, but I did it. It was the end of the second day and pitched dark when we neared the town and I let King have his head and speeded up the team. I wanted Red's trail through town to be fresh and easy for King to follow, but I needn't have worried. Red didn't go through town at all. He went around it. And I knew then that he was headed for a pre-arranged hideout. It was a cabin tucked neatly in the hills back of town. I left my team, taking King, perhaps silently to one of the lighted windows. Just as I looked in, the gun went off. One of the men flopped forward on his face. Red turned the gun on the other one and stood with his hands in the air, babbling with fear. Don't shoot, Red. I promise I'll give you all the gold we got from Zeke.  Honest! It was Hank! Stop your open-yellow rat! Hank, you're gonna get it just like Hank.   Well, it didn't work. Now you're gonna... Stop that gun, Red! Stop it! Oh, no, you don't... Get him, King! Hank, take him off now! Stay right where you are, Mike. Don't move. All right, King, back for now. I've got his gun. Get up, Red.  He wouldn't have hurt you if you hadn't tried to shoot me. You're both under arrest for the murder of Zeke Bailey. Watch some, King. Please copyrighted dramas originate in the studios of WXYZ Detroit and all names, characters and incidents used are fictitious. Here is a special announcement. Consult your local newspaper regarding the challenge of the Yukon starting Thursday, June 12th. Your announcer, Larry McCann.


I'm Kinsey Grant, and I'm so excited to welcome you to the streets coverage of the LD Micro Conference in Los Angeles. We're here all week getting the latest scoops from over 230 micro-cap companies, everything from energy to fintech to legal marijuana. As LD Micro's sanctioned video partner for this week's events, we're going to be getting the scoops directly from the founders and CEOs themselves, so get excited. We've got a big week ahead of us.