Good afternoon. My name is Philippe Henri-Gour. I want to tell you about my Mongol clusters. Because most of the time, I have wonderful relationships, my Mongol clusters. But sometimes they just stop responding to me. They don't take my requests anymore. So in these cases, I'm a little lost. I'm like, how should I feel about it? What can I do about it? And that's pretty much what I want to cover tonight. What you can do when your Mongol cluster is misbehaving and you cannot figure out what's going on. So in case you're still wondering about the accent, yes, I'm French. I'm working for a company called ThoughtWorks which is providing consulting services, specializing in agile and also cool and exciting technologies like Ruby. I wrote, published with Addison Westley a short cut on the topic of Ruby troubleshooting, covering how you can leverage system tools like LSOF, S-Trace and GDB in the context of Ruby. And you might also know me for my involvement as a creator and main author of Selenium Grid. By the way, we need to talk about virtual Selenium tests because there's a way not to do that. So Selenium Grid is a tool that's human. You're Selenium tests in a distributed manner across multiple machines so you can bring your tests in parallel and instead of waiting three hours for your tests to finish, you wait 10 minutes. Anyhow, the important stuff is one ahead tonight. The main reason dates back once upon a time like a year and a half ago, Patrick Fowley who did the presentation in Ruby Internals, myself and a couple of other ThoughtWorkers, we were on a pretty ambitious Ruby on Rails, okay, we're working on a pretty ambitious Ruby on Rails project. Is that all? Thanks. Which we're talking to a lot of database, multiple database from the same Ruby on Rails application, multiple web services, a pretty aggressive user load, so it was kind of big, enterprisey, ambitious Ruby on Rails project. And having fun on it, our velocity was pretty high. And here we started to assess the stability of that. And we realized that our Rails instances were getting stuck, called frozen, pretty quickly, pretty consistently, but unfortunately at random times, at random requests, and just looking at our logs, just going to instrument Ruby, we couldn't go anywhere, and we were not even close to find the problem and the root of the problem. So this is when Pat Fowley, who was a tech lead at the time, came to me and a colleague of mine called Jessen Miller and said, hey, Philippe and Jessen, you know the stability problem we have? He was like, yeah, yeah, you need to solve it quickly. So we responded, of course, but you know ahead, some of us were thinking, we don't even know where to start. So when you have a problem on your hands and you don't even know where to start, usually it's good to ask a little help from your friends. We're a big software community, right? There's a lot of people that could help us. So we went around and we asked the PHP dude, we even asked the .NET troopers, you know? And we were so desperate, we even asked Java the hut, you know? Super powerful, hardly lightweight. But it turns out none of these guys could really help us.  You have to think about who you are, as there will be community, as there will be developers. So let's think about who we are, you know? We're nimble, for sure. We're moving fast. We have style. We have values and principles. And more importantly, we have the force. So who can we be but Jedi's? So the cool thing about being a Jedi, Ruby developer, is life is easy, right? We have our problems. We just use the force, a little ruby trick, you know? RB, script console, looking at our logs, raise inspect, we're out of trouble in no time. And that works for us 99% of the time. But sometimes we're in real world trouble. Usually in a production environment, you know? And not only we're in trouble, but this is one of these cases when we have to solve the problem quickly, and the entire team is counting on us. Does that sound familiar?  So when you're in this kind of situation, it's good to remember that even a Jedi is never alone.  You remember him? So this guy, we have it as Ruby developers. We have our own little R2D2, just for us. We have somebody that keeps our Ruby applications running all the time. We don't even know about it. We forget about it. It's called the operating system, units for most of us, the lucky ones, you know? So in terms of, there's a lot, in my experience, Ruby developers, for some reason, might not know all of them, and they're well-documented, you know, in the world. There's a lot of tools you could use, a lot of success, you know, L-S-O-F-I-O-STAR, TAR-P-R-STAR, whatever, you name it. Something you might not know about is some of the tools that are not only system level, they also give you, at the same time, information about your Ruby, stuff happening in Ruby, and stuff happening at a system, which is pretty cool, but then you can correlate the information easily and see what's going on. So tonight, I'm going to concentrate mostly on two of these tools where you can see what's happening in Ruby or what's happening in your system at the same time. The first one, unexpectedly, is GDB, the Groody Burger. So acting as a C-D-Burger, GDB can tell you everything what's happening in C, so everything that's happening in your system, level, like system calls, signals, everything that's happening in your Ruby interpreter. But what you might not know is, with a couple of clever macros, you could also, from GDB, do stuff like getting a stack trace, a Ruby stack trace, raising a Ruby exception, or even evaluate arbitrary Ruby carry, which is pretty freaking cool. So do you guys want to see that tonight? So let's try to get started. It's mostly going to happen in the terminal. So I've got a little raise application, which I'm going to launch. I'm going to try to find it. So three actions in one control. The first one I'm going to call just right now. So it's basically mostly sleeping and returning. So live on the stuff here, as you see, my action is working. My Mongol cluster is happy, up and running. Then something is going to happen. Actually, let me start over again, because I forgot one critical step, I think. Ping rep. Yep. Let me start over. Here we go. So something is going to happen, but you don't know anything. Something strange is going to happen. You don't know anything about. But all of a sudden, when you're going to start to target your Mongol cluster, whereas it's not going to respond anymore. By the way, it's never Mongol the problem. Every time I investigate all of these troubleshooting problems in production, it's never Mongol.  Mongol is pretty freaking solid on that. So when you're like this, well, let's try to use GDB to attach to the process. So first, I need to know what the process is, the PID. Now that I got my PID, I'm going to try to attach to it. Here we go. So now it's a C debugger, right? So I kind of was going on that C level. So let's try to get a back trace, a C back trace. I got my back trace. So here, it's not going to tell me much, right? Of course, I'm evaluating Ruby code. I knew that. What's more interesting is if you go to the top of the stack, where am I stuck? If we go up, we should just try again. That's going to be easier. If we go to high level of stack, I see, oh, that's what I'm blocked on. I'm trying to get a lock on the file. So why am I trying to get a lock on the file? Well, it seems to be this kind of blackmagic.cs doing something, start trains. Oh, I kind of remember. I think I'm using a native gen called blackmagic, but maybe it. But from where? Which controller is curving this? So what would be cool would be to be able to get the stack trace, right? What Ruby stack trace, not just a C level stack trace. So let me try to go to my process. Here we go. I'm going to clear the process so that you can see the output. I'm going to show it on the space here. Not this guy.  So let's try this. That works. Let's try something else. Maybe there would be a good way to get a stack trace. Eval caller. Showing off. We got our stack trace. And if I go up, oops, let me clear this and do it again.  Showcase, line 6 in the Action Provide Business Value. And if I were going to my code, I would figure out pretty quickly, oh, this is when I use this black magic Jamestar trace. So you could argue that what would be nice would be to know which file I'm trying to lock on. That would be a great job for LSOF, but I'm going to go back to this to another talk. You're welcome to check LSOF documentation if you want. So if I can you evaluate arbitrary Ruby code, I can evaluate caller. That's pretty cool. But I can't even go crazy, right? I could go stuff like actually let me clear my window first. I could go like Oshik space, each string. Or each object, sorry. And I could say, well, for each of these strings, just spin them. And I've got all those strings in my web instance. Not super useful, but on the same principle you could try to find all the classes in your system and walk the object space and try to see how many of them you have. It turns out actually pretty nice micro to do that. Let me clear this up and do it again. So now we see that we have only one mongrel, what we're showing. We see how many strings, how many hash, how many modules we have could be handy. So that's going to be it for the demo. Something important when you attach to a process with GDB, actually I could show that to you maybe, is if I try to control C here I'm not going to be able to exit. That's called GDB is getting a lock on your process, so you first need to exit from GDB. Cool. So something also I'm going to tell you I cheated a little bit is for GDB to do this magic you need to be able to access the debugging information of your process. Which most of the time it's a non-issue. If you're on Linux or Solaris stuff like that, you're pretty much okay. We're out of the box to be interpreter. On the macOS Leopard the interpreter is not compiled with debugging information. So if you want to do this kind of tricks you can go off with compiling your own Ruby which by default enable debug and use it to troubleshoot your problem. So let's review a little bit. First let's give credit to who it's due. All these wonderful macros, I didn't make them I wish I could, I did. They've been done by James Buck two of them and most of them record them, Mauricio Fernandez and Noble. If you look at them I'll tell you later how to get them and download them, it's pretty freaking awesome. They're basically re-implementing eval, but as GDB macros that's pretty cool. So let me review some macros with you. First, how can we get the macros? You can get them in different places on the internet. The easiest way is actually to go to my website phsupport.com On this page you're going to find download link you get all the macros compiled together with additional documentation. Save it as a dot GDB init in your home directory and your golden. So what kind of macros can you have? Well, this one is one of the most important one. It's all be finished. You're basically not doing anything except putting it in a safe state because you might attach to your process in a state whether it's not safe when interpreter without arbitrary code. So all be finished is taking care of that. In a safe state, you can keep going. The next macro is the best one, eval which you can evaluate to have it through Ruby code, especially caller when you're in trouble and want to get its backtrace. Some other ones, this one is by James Buck. This is a way to get the Ruby backtrace, the Ruby backtrace, not the C1 from GDB, interpreting the C-level backtrace. It's not working all the time though, it's working using eval caller.  It's a way to raise from C it would be exception so you can get your stacktrace in your log, most of the time. So all these macros are going to put the output to the standard output of your process. Sometimes it's a little difficult to trace down the output most of the time on gold.log but if you don't know, you could temporarily redirect the output and it ends up in a temporary file in the slash TMP ruby-debug-pid directory. So GDB is a pretty nice tool, it was better than nothing to figure out what's going on at C-level and at Ruby-level and gives you pretty good visibility in what's going on from what I call the Jedi space, Ruby interpreter and application space which is more like Yoda. But you can get too much into R2-D2, you can't get too much into this operating system because there's a fundamental limitation in Unix between kernel space and user space. Another important stuff to understand about GDB also is that when you touch your process with GDB you basically capture a snapshot of your process, just like any debugger, right? So when you see your application with GDB, it's basically like this. It's frozen, you know?  So GDB is a great tool, you know? It feels like a Jedi pistol. You're very glad you have it. But also it gets jammed. You know, I would lie to you if I would promise you that any Ruby process we have that's locked you're going to attach it to GDB and all these macros are going to work at all the bugs and you get answers to all your questions. That's not true. That's true. 70-80% of the time there's still this last mile when the macros are not working and it's going to be very hard for you to figure that out. So it feels like we're a very nice tool, we have a pistol as a Jedi, but we wish we had a more powerful or more comprehensive tool, you know? Something more like a lightsaber. And actually Ruby developers do have a lightsaber already. It's called Detrace. Some made it just for us, you know? More exactly just for the ones that are running on the West End, BSD or Solaris. So Detrace is a revolutionary, amazing dynamic tracing tool made by Sun, but that you cannot find on Leopard and on BSD. What's so amazing about it? Well, the best part about it is, there's this fundamental divide between user space and cannot space. With Detrace you can see everything in your system. Everything, everything. It means the deepest internal internals, if you can make sense out of them, and the higher level constructs of your application. So why is it so good? Well, first you only learn one tool. You know, one tool to all the more. But also, more importantly, if you use only one as opposed to using logs in your Rails application, instrumenting the Ruby VM and becoming a guru in tracing what's happening in your kernel, the stuff about Detrace is instead of having this information in different places with different format, it's going to be very hard to correlate, you know, to put one in relation with the other. Because using one tool, you can correlate all this information. So you could answer very easily questions very difficult to achieve, like within this Rails request, so high in application level. Just for this particular Rails request, tell me all the system calls that are called only during this method, because you have visibility of the world stack. So this is extremely powerful. Sometimes Detrace is used like as a sys admin tool. We need to take it over and we need to make it a Ruby tool, you know, and other things. So remember like GDB was a lot like frozen processes static view of your process. Detrace is the total opposite. It's all about dynamic aspect of your application. It's all about motion. And a matter of fact, it's a lot like motion capture, in a sense of Detrace is going to be able to monitor little probes that you're going to put on your application just like these little bulbs on a motion capture outfit. So you can monitor in real time all the actors working in your system. So it's a little motion capture but even better, even more complex because not only monitor in real time but you manipulate multiple levels in real time. You go from the bare bone system view to the mechanics of it, more like the Ruby interpreter to the full flash body of your Rails application. So you can see everything at the same time in real time but basically there's no limit to your visibility there's just limit to your understanding of what you're capturing and how to make a sense out of it. So first a quick show of hand how many people here already use Detrace? Okay, quite a bit and how many people know about the de-scripting language? Okay, we're much the same. So I'm going to cover a little bit of introductory material on Detrace to make sure you understand what's going next. So first a little bit of vocabulary. Detrace is tracing what is called Detrace probes. A probe is pretty much like a sensor you put in your code at location, it's a location it's an event you care about and that makes sense to you and you want to be able to record and capture. So in another way you can see these Detrace probes as little bulbs on the machine capture off that stuff you can capture and monitor. These Detrace probes one of the amazing stuff about them is you can enable them or disable them on demand. So to keep the analogy about little bulbs imagine some of the bulbs you can turn them on and off on demand to capture only what you want I mean just the arm, maybe the full body and to keep the analogy even further if you were going to turn off a bulb and machine capture off that it's not going to use any electricity just saving on electricity. The same stuff with Detrace if you disable a probe by design the Detrace impact, the performance impact of Detrace on disable probes is very close to zero. So the great stuff by being close to zero is you can use it in production. Like you can launch your application and Detrace probes turn off when we have a problem we just turn on a couple of probes here and there to analyze what's going on and progressively understand what's going on in your system. So you can analyze the problem you care about in the environment you care about your production and at the layer you care about you can be very selective.  This event you can record, capture and you can do all kind of analysis on it. We're going to see that later with examples. So the question would be like oh we're talking about these probes, these probes, these probes where do they come from? Well somebody has to give it to them to provide them to us and it's called providers and basically it's some user space libraries or some kernel modules that somebody writes for you are providing instrumentation for something you care about. So let's say you TCP IP stack let's say your system calls let's say you will be a interpreter let's say Postgres let's say javascript interpreter could be whatever you want. So now that we know this we can try to understand the D language it's all about when this probe is triggered what should I do? So it's very very simple D is pretty much influenced by C in its syntax so you shouldn't be lost at all. So the first line is going to be always this is pseudo D the first line is going to be a probe description which probe which little bulb should I listen to and when you listen to this probe the action that's going to be between curly braces is going to get executed what are you doing in the action you're going to print information you're going to collect information you're going to aggregate information you're going to do something and you have this second line the slash predicate stuff that's an additional refinement you could have on your probes you could say oh my probe fires but only under these conditions only when all the conditions in my predicates are true then you're going to do my action make sense? let's see what kind of predicates could we have it's very very simple it's going to look familiar to you you could be like I'm only running on one CPU I don't care about stuff happening on one CPU or I only care about one process or I don't care when a program is actually the system schedule and of course you can combine all these conditions together using the regular C conditions so that's more like a real life sample that's true D code so this one is like remember the first line is a probe description here's a probe description is for every system call that's of right when it stops ok? so at this moment what am I going to do only then I'm going to second line for the predicates only the condition is going to be true so only if the program is actually bash and in this case I'm going to just print a little message telling you the PID of the bash process that is doing the right so not work at science but actually very powerful we're going to see that in a second so what kind of action can you do within your curly braces block you could do a lot of stuff but most of the time it end up being printing information with printf regular C syntax printa which is more printing aggregation you could print some average distribution of values you could also capture the stack the kernel stack or the user's level stack of your process useful to know like you could every 10 seconds see where you are in your system and figure out where you're spending time in your system and you could also create variables and capture a timestamp and put it in a variable here that's the last line is assigning a variable to a safe storage self so that you can use it later so sometimes people think detrace is only to listen to events that's somewhat true but that's very powerful for example you can use detrace for performance analysis to capture how long it's taking you to do something and the pattern is always the same it looks like this first you're going to start something every time we're starting a read system call for Apache the demo in HTTPD what are we going to do we're going to capture in a thread local storage a variable we're going to call start that's going to be the timestamp of when this stuff started so now we have the start of the process so next we're going to define the rule which is saying oh no time returning from my read system call you remember this timestamp I add instead of the start I'm going to minus it from the timestamp of now which is how long it took and I'm going to print it and I'm going to aggregate it to distribute it too there's a little trick there's some little trick around there like if you look at the second line this is in there to make sure we actually did record the entry before recording the return because with detrace you attach to whatever process so you might very well record a return before recording a read so what can you do with detrace what kind of providers do you have what kind of stuff can you listen to of running Solaris just do sudo detrace-l you're going to see all the providers you have that's pretty amazing very different just to give you a little taste here are some providers that cover pretty much a whole stack from canal level providers so system call PAD, VM stat also network stuff there's some pretty amazing providers for UDP traffic, TCP traffic and FS traffic and also like VR level language interpreters there's some pretty amazing providers for javascript thanks to Joi we have providers for Ruby but also we have some providers for Java and Alang and even for stuff that are like bigger pieces of software like database passgrass or even x11 and adobe hair that was a pretty cool demo in detrace conf about adobe hair so of course we mostly care about some of them which are the Ruby probes now we can trace Ruby with detrace which is pretty awesome so be kudos to giant who wrote these probes in the first place mostly for their Solaris platform then Apple was the amazing job at incorporating these probes in Leopard and you have them for free in Leopard so on Solaris and Leopard you pretty much out of the box you can get these Ruby probes which is pretty nice so what kind of stuff can you probe with these Ruby probes it's pretty inclusive you can trace every time you're entering a function every time you're returning from a function every time you're raising an exception every time you rescue it you can even trace every line of code you execute for HTML file which is pretty amazing every time the garbage collection is starting or stopping every time you're starting to create an object and finish starting creating an object which if you have huge location time for creating Ruby objects might be useful every time you're free an object and the last probe Ruby dash probe is actually one of the coolest but I'm going to tell you about it right now I'll keep it for later so now is about time to see this in action so let me go back to my little Rails application I'm going to restart I'm going to reduce the duration of the call so with less so basically I have a running Rails application nothing very fancy here what's more fancy is that now I can use detrace to kind of see what's going on on multiple levels so let's first start at the system level so detrace is a command line tool you need Ruby relish to use it and you can inline some scripting like this so I'm going to try to record all the system calls happening and now I can see everything that's happening at the system level on my system which is pretty cool but of course you want to see what's going on at Ruby level so let's try another probe for Ruby so first I'm going to need to know which process I'm going to target so there's something a little strange on Leopard with Ruby probes is that they are not enabled until you launch a reprocess so if you do detrace that shell and don't see any Ruby probe when you're freaking out just launch a reprocess they're going to appear so now we could try to target every function we execute so Ruby I don't see my terminal anymore function entry and need to give the PID of the process and of course I need to agree so now I see every time I execute a function what's not very useful is sure I'm entering a function or method which one is that you know I want to know better so every probes give you some arguments which I'll call arg0 and arg1 which you can print so let's do it so that would be the intuitive way of doing it unfortunately that's not the way it works because arg0 and arg1 are coming from user space detrace is instrumented at kernel space so you want to copy from user space to kernel space this argument so detrace can make sense out of it so there's a little utility to do this and now I see which object probably twice arg0 not arg1 I see which object but also which method I'm entering in real time which I could correlate the system course for this particular method which is pretty freaking cool so this is basically relying on system instrumentation this is relying on Ruby instrumentation but wouldn't it be cool if you could go even higher remember I promised you can go to your application level and it feels like how am I going to do that how am I going to be able to go from a stuff that's provided to me as providers in ccode which I probably don't want to write to something I can trigger from our Rails application or Ruby application that's going to make sense for me that would be nice right every time we're starting a new request we could trigger a probe and every time we start stopping the request we could trigger an event based on another probe so it turns out the join guys did that if you look at the source code they're providing for the Ruby VM on Solaris they're using the Ruby tracer they have a method called fire and if you give two arguments to fire basically two strings you remember this arg0 and arg1 that's what you're going to get you can trigger detrace probes and events you can trace which is pretty freaking cool you can even give it a block and it's going to trigger an event at the start and then at the end the problem is I don't run Solaris I love Solaris I love open Solaris but as servers not too much in my laptop so when I was preparing for the demo I was like hey I want to do the demo on Lepid I don't want to do it on Solaris so I looked for tracer for dot fire on Solar on Lepid couldn't find it so I was going crazy I was like I can't believe Apple was so smart to introduce all these pros and they'd leave away tracer this is so powerful well actually after a little bit of investigation and going into the internals I found out Apple did provide tracer it's just called detracer and unfortunately it's not exactly the same API it doesn't take a block and provide a new method called isEnable so it's kind of ok that's cool but I want my applications to have the same code to run on any platform I want to run it on a joint VM so I was in production I want to run it on Lepid VM for the development environment and for this QE and business analysis guys running Linux or windows for them to work too the same code even though there's no detrace facility on the platform so I wrote a little gem called xray which is basically just subtracting you from all this different implementation stuff and give you one interface to all the systems and no implementation for the entire detrace so let's see this how it would look like so let's imagine we have a Ruby class just my application I want to trigger a detrace probe every time I'm starting my application so every time I'm entering this stop method well with xray or detracer or tracer that's very easy and do something like fire arg0 arg1 and whatever arg0 and arg1 you decide what it is what's meaningful to you of course this fire method needs to come from somewhere so you need to include a little module and require and you're all done so extremely easy any Ruby developer can do it and it gives you tremendous instrumentation at all the value of stack of course most of the time you don't want to record only when something starts you want to record when something starts and when something ends so a nice convenience way to do that is to use xray to do like firing and you got this arg0 and arg1 again you give it a block and automatically in this case my-ws-start will be triggered at the beginning before executing the block and my-ws-end will be triggered after executing the block that's pretty convenient so let's try to see it in action I'm going to show you this showcase controller so I'm going to try to do something useful which is using this firing stuff here I want to trigger a probe with custom request do something useful which is basically the name of my action and then let's imagine somewhere here I'm doing some kind of database success I like to fire a custom db stuff with the actual SQL query I'm executing to monitor how long I'm spending in it so if I'm trying to run this action here we go so now let's try to use dtrace to see if our custom tracing can be recorded so I'm going to go remember this magic ruby-probe I didn't want to tell you about that's exactly what it is for so we're going to use it I know nothing happens because my application is not moving the request I'm not getting in so let's get a couple of requests and now my probes are firing so if you're paying a lot of attention you might realize that some probes seems to be out of order so you could have rendering finish I mean you could have your request finish before you're rendering which doesn't make any sense this is actually a feature of dtrace in a sense that this is happening when you're changing scheduling multiple CPUs which are recorded by dtrace on each CPU and to avoid in the one dtrace team wants it to be very lightweight no impact on performance so I don't bother correlating on each CPU the two different flows so if it's a problem to you just print a timestamp and you can solve a timestamp of course if you want to record time and timestamp and stuff like this this is not impacted by this CPU scheduling stuff so I hope you're excited about it but the thing is do you really want to write this for all your rails request I don't think so so part of x-ray 2 is easy and on-the-fly instrumentation of all your actions to know how long you're spending in request time in rendering time and database time monkey patching active record and action control so of course I'm going to need to restart my world's application at this point we don't need gdb anymore so let's restart it now I'm going to execute another action on my control which is more a classic version there's nothing dtrace specific here it's all going to happen magically with monkey patching so let's go back to dtrace window and let's do the same thing because it's pretty much the same thing Ruby dashboard stuff is always very good for your custom application level probes and here R0 and R1 I'm going to be, is it a request is it rendering and argument is going to be which request it is or which SQL I'm executing for dv query so process change so here we go again nothing is happening because I would need to use my application to make something happen so let's go to this controller clear everything so we can see better and do a request and sure enough we see we started a request we ending a request the rendering started the rendering handed and the dv access started and dv access handed so here we're not out of order which is pretty lucky so that's pretty cool and what I really want to know is how long I'm spending in rendering how long I'm spending in database that would be way more useful so let me try to show that to you very quickly so of course this is more involved so I'm not going to do it on the common line in one minor thing I'm going to use you can write dtrace scripts so it's more something like this so you could have a begin block which is going to get executed when you start your script no big deal here I'm just saying ctrl c to n because basically here I'm going to compute times so basically I'm going to aggregate information instead of just putting information on the fly I'm going to capture information aggregate it process it, normalize it and then give it back to you so you could have a begin block and you could have end block too it shows you're cutting at the beginning and at the end let's focus just on the first probes so this one is saying for each probe that I'm triggering that's the start of a new request or just capture the time as a local variable called request start and this is actually not a regular local variable this is an aggregation local variable think of it as map hash map or action so I'm going to be able to trace by action it was the name of the action then when my request is ending I'm making sure this is really a request hand I'm making sure that previously I did record a start for this guy then I'm going to count how many times I invoke this request I'm going to compute how much time I spend in this request I'm going to compute the average, the sum and even quantize the time spent in the request and if you look down you're going to see exactly the same start for database success so let's try to run the script it's going to be way more meaningful here we go ctrl c to hand so first I need to generate a couple of requests I'm going to try to generate a couple of classic requests which go pretty fast and also be consistent then I'm going to try this particular action because I can trigger how long it's taking with this parameter so I'm going to do two of them that are pretty consistent in time and one that's being consistent and hopefully you're going to be able to see that so we're going to see not only we're going to be able to see how much on average we're spending in one request for each request, we're going to be able to see do I have a consistent time for this request or is it all over the board so let's try to get our results now let me clean my buffer we'll see so let's see what we have so for the showcase controller classic action I see it's pretty consistent the distribution consistent almost always the same duration which seems to be a pretty small duration as opposed to the next guy which is a second action and trigger for a second action and trigger I say oh I'm not that consistent most of the times it's not that bad but sometimes it's taking way way too long I need to do something about it and this is where you can start drilling down and figure out so for this guy talking long you know what was happening in my system what was happening at the Ruby interpreter level or what was happening in my OS I will answer this kind of question and so it's instrumentation of the requests but you have the same stuff for oops maybe I didn't enabled it here we go now for the database requester so you could analyze how long you're spending in your database query using Dtrace 2 so if we go back to the presentation the great stuff about Dtrace is you can drill down to your system you can start a very high level saying oh this request is low or this collection of requests are slow and from this analysis try to figure out how am I going down and out refining your understanding little bit by little bit you can start saying oh which method which Ruby method is taking a long time within this request we're going from application level to interpreter level and say oh is this method and within this method you're going to say so what's taking long at a system level within this method and you figure oh it's just TCP access only when I'm talking to this IP oh so this subnet is actually going slow right now so that's a kind of investigation you can go from very broad top level to very you know sharp low level or it could be the opposite, it could be like I had this system problem that's happening like the lock we have on the file why is this happening what was going on at a level in the stack and you could say oh when this is happening before that record which request and record which method and I'm going to be able to go up the stack again so this is where Dtrace shines I think considering time I'm probably going to skip this demo I did all my demos come online but the cool thing about Leopard is it comes out of the box with something called instrument which is a kind of visualization tool built on Dtrace which is pretty awesome and come with stuff that are useful out of the box something that is worse investigating is you can build your own custom instruments so for example if you're X-Ray for request or your own custom probes you can define new instruments in this application recording only this and give you a visualization of it and auto completing what you can do this R0 stuff so I encourage you to build new instrument and you're going to see exactly the same stuff probe description, predicate, action the same thing just nice and graphic and you cannot complete the probes you're interested in so what should you remember about this presentation I hope you're going to remember at least one thing and the one thing is don't wait for your tough production problem to show up don't get caught unprepared for the first time your deployment is going to go so on more importantly do not wait do not wait for the emperor to take over your mongrel cluster you know so start training today and how can you train today well there's a lot of system tools you can get familiar with and on your day job and that's going to provide useful value and like LSOF you know like IOS stuff like D-Trace you could use it for developer stuff and if you get used with these tools then you won't have to learn the tool and the problem at the same time when your time matters in a good track so there's a lot of documentation on system tools on the internet but I would recommend you to do especially if you have a leopard machine is to install the x-ray gem this way you got all this simple and useful rails implementation and you won't have to figure out for a couple of days why tracer is not in the leopard VM I'm obviously not objective here but I would still recommend my shortcut for example there's a great chapter on my LSOF which is a well underused tool in our community and I didn't have time to cover it tonight you could look around the internet if you don't know where to get started with on my website I posted a couple of pointers especially for D-Trace you are welcome to check it out and have fun with it so that's it for the presentation thank you very much I hope you liked it I know if you have any questions we have a good time to ask them go for it do you have something you would be I have the PID with PS this would be for specific PID so you don't have to show me this I would be before PID so it would actually be before and you can do this it's a problem for what we do for now but for some reason it escapes me it's a mixture of we don't really agree with your design we think it would be better than D-Trace and it's also a mixture of different feelings so Linux doesn't want to port D-Trace which is strange because even BSD which is pretty picky what it picks did port D-Trace to the platform so they read that for a couple of companies supporting as an alternative which is fine but the thing is, it's way fine SystemTap is still stuck in kernel level basically it doesn't give you anything user level and it's going very slow I mean unless somebody does a miracle quickly it's not going to happen very quickly so actually if somebody is feeling pretty hardcore about D-Trace, kernel, some tunnels SystemTap, that would be great because a lot of projects are deployed on Linux and on Linux we don't have a lightsaber we stuck with a pistol at this point does that answer your question? on my website I included some links for D-Trace that does include something to SystemTap the official website and also some opinions on SystemTap but one of the D-Trace guys was a few of the experience and plans for D-Trace the module that's calling the C-Extension so you still have the cost of going from the module to the C-Extension but reasonably for Ruby applications we don't care about it it's more like if you're writing a Ruby on Rails application you're probably not concerned about the cost of one single method call within your system so I would encourage you to try it we're not with these tools do you think there are any ways for other priorities to happen especially with the things that you showed us with the GDB so what I want to talk about is Ruby was lagging a little bit in terms of tooling especially for performance it was going on your system and we're like we're kind of lazy waiting for a good solution I think we say we're stuck with NVN we don't have a common platform we're not going to build some kind of instrumentation stuff for Linux, for blah blah with D-Trace we start to have a pretty compelling standard platform standard APIs people can use to build whatever creative tools they can think of so a D-Trace instrumented ROB would be awesome also some kind of demonstrations not for Ruby but for more like an array disk stuff for interface no one was telling you about drilling down you would see on the top what's going on for one system then you could be fine graphically what you wanted to see and see another line and see what's going on and keep going this way and you see what Apple did with instrument that's pretty awesome even if you could argue that some aspect of D-Trace could be leveraged even better with an instrument but in any case I think there's a huge potential based on D-Trace because it's still like how many people are going to come align it and write the script and stuff like that I think especially for startups and people with creative minds there's tremendous possibilities for providing visualization tools the community needs based on D-Trace with standard API


The footage in this video is transformative and is protected under section 107 of the Copyright Act 1976 for purposes of criticism, comments or news reporting. Hello everyone, welcome to another video now. Just heard some really crazy news. I've got a few comments in my last video. The chairman of Channel 7, you know, the Sunday night program who done that hit piece, the most disgraceful bias hit piece against veganism I have literally ever seen. This whole time the media have been coming at me, coming at veganism in the UK, it's been crazy. This was by far the worst. And it was almost like in my last video where I called the producer and I was like, is this conspiratorial? Like, is this industry bias? Is there money involved with this? Like, you gotta be careful. It looks like you just, there's some money involved under the table or something. I mean, that's conspiratorial as well. But no, it wasn't. There clearly obviously is. Now, the producer didn't even write this story or oversee its edit, which is really strange, she said. Like, that was her words, her words. So who wrote the story? Who oversaw the edit? Who was involved in this story? Now it turns out, right? It turns out that the chairman of Channel 7 is this guy, Kerry Stokes. Kerry Stokes. Australian businessman holds interest in a diverse range of industries, including electronic, print media, property, mining, construction equipment. He's also known as the chairman of Channel 7 Network. What else is he involved in? What else is he involved in? Let's have a look here. He's, whoa, he's 3.3 billion net worth USD. So that's, I don't know what's that, $45 billion Australian. He's worth a lot of money, this guy. Oh, here he is here. Here he is here. Kerry Stokes owns 1 million hectares of land. Wow, 7 networks chairman Kerry Stokes is passionate about the agricultural industry, as well as the media. Wow, that's not a bias. So he's, he's passionate about agricultural industry, as well as the media. He's literally the chairman of Channel 7. So he controls media out of that channel at least, minimum. The Australian TV boss currently owns around 1 million hectares of farmland. Wow, isn't this all coming out? Wow, isn't this, isn't this interesting? In Western and South Australia, as well as Northern Territory, equivalent to more than the entire Greater Melbourne area, he owns a million hectares of land. Wow, what's this? Big vision for the Red Dust Country. Look at this. Look at his pals here. Look at his pals. They all look like farmers. Does this look like someone who's going to be friendly with vegans? Obviously not. Not with the vegan message anyway, especially when he has vested interest. Millions, tens and tens of millions of dollars invested in agriculture. Let's have a look through here. Looking across the Napier Down station and the King Leopard Ranges in the distance. Kerry Stokes shares a vision for the Kimberley that is as clear as the crack of a stock whip, a stock whip, to whip stock. A sheep or cattle farmer. Okay. Standing alongside him, a born and bred pastoralist. Someone who owns sheep or cattle. So his mates are all sheep and cattle farmers. Peter Murray. Mr. Stokes is convinced that the Norval and cattle industry is about to take off. When was this written? Is about to take off. This is 13th September 2015. You know what else took off around that time? Veganism. Veganism did. He probably wasn't happy about that since he had such a large investment in beef. Let's have a look. Let's have a look how large his investments were. In the north of Australia, not just WA, but through the Northern Territory Queensland and WA, there's an economic zone that at last has the potential to be realised. Wow. He's realising some potential for some cattle farm here. There's a demand for the produce. Wow. There's a demand for the produce and an ever-growing demand for the quality. The vegans hurt the demand of beef, don't they? So it's kind of making sense now, this crazy media buyer story coming out of this guy as the chairman of that media company. Now that's not even a conspiracy. This is just follow the money. Follow the money. Isn't that statement true? Oh my God. This is crazy guys. I can't believe this. We offer the world's most incredible free range, drug free, insecticide free product. Nothing but pure beef and no one else is capable of that. This is in quotes. This is Mr. Stokes talking. Offering beef. He's a beef farmer. Mr. Stokes said, The key to unlocking the potential included better use of water, applying its latest in soil and plant science, land-tenner reform and a lot of hard work. A lot of hard bias.  Obvious vested interest. Obviously. Follow the money. Carry Stokes. Crazy. It's all coming together now. Hey. It's all coming together. Mr. Stokes and Pete Murray own farms on Kangaroo Island and one on South Australia's mainland carrying about 7,000 cattle and 24,000 sheep. Well that whole, that, you know, this makes that make a lot of sense. That hit piece against veganism. Here we go. Kerry Stokes builds his cattle empire in Western Australia's far north. Wow. Seven group holdings, which is channel seven. Owner, Kerry Stokes. He owns seven group holdings. The owner, chairman. Wow. It's set to increase the size of his privately owned cattle empire in Western Australia's Kimberley region to more than one million hectares in a deal involving cash-strapped Aboriginal corporation. So he's bought all this land off Aboriginal corporation for cattle. For cattle stations. Cattle stations. Are you seeing this, guys? Are you seeing this with me? This is absolutely. Look at this. Look at this. Billionaire tycoons. Billionaire cattle tycoons who own media. And you're telling me you're going to get unbiased information from the media? This is, this is absolutely crazy. I can't believe it. Oh well you know what? I can't believe it. But it's just, I didn't think it was going to be this obvious. He's, he owns so much land and so much cattle. Look at this. Kerry Stokes seeks beef steak with Kimberley station subways plan. He now controls more than 4,000 head of cattle in South Australia. That's just in South Australia. That's not including everywhere else. Has an incredible rags to riches story. And today he is Australia's 12th richest person. Billionaire and he runs media. He runs what you think. He controls what you think. Okay? One man. You think that he doesn't have control over his whole media empire? This one guy over the whole seven network? Of course he does. He's the boss. This guy is the boss. Do you see what I'm saying? Oh and look what else he owns. Him and his mate Andrew Forrest and Kerry Stokes enter in a honey business. For two of Australia's richest men, the newest business catchphrase appears to be show me the honey. Vegans don't eat honey. Veganism hurts the honey industry as well. Another bias. See his mates are all beef holders. Billionaires Andrew Forrest and Kerry Stokes already have competing business interests in beef and resource. Wow. Beef. Which takes up most of the resources to be honest. Very interesting honey. Veganism not good for honey. And it was interesting how like they talked about wool in the show. They talked about beef. You can't have woolen clothing because wool is from sheep. There's no silk from a silkworm. No honey from a bee. Kerry Stokes sold his Kangaroo Island aggregation. $50 million he got for it. $50 million on it for his farm. The offering of Signet Park farms through Elders Real Estate includes a herd of about 3.3 thousand cattle and 15.7 thousand sheep. Crazy. How's this for bias, eh? And I also got information that there was a pork ad running between both commercials. Okay, a pork ad. The whole show was a pork ad. And you know, Kerry, if you're watching this, I doubt you will, but if you are, you got to get into the plant-based products. Vegans are not your enemies. I know you might feel attacked by vegans. We just want to see a more peaceful world, a more environmentally sustainable world. There's a lot of money in plant-based alternatives. Beyond meat, they're cranking it with the plant-based meat. Put your investment into some plant-based alternatives that are better for the animals in the environment. We're not your enemies. Okay, let's work together. Let's invest some of those billions of dollars into plant-based products. We're not going away. We're not going away, so we might as well learn to get along.  It makes your media look biased. You're losing credibility. You're losing credibility.  And if you can't and you're watching this video, this is the type of bias we're talking about. This is the type of bias we're talking about. If you look at the dislike ratio on that video, the dislike ratio just shows that people can see the insane bias, nonsense.   At least try some fair and honest reporting. Another thing. This was crazy. At the end of the segment, I didn't know about this. The presenter talks about, oh, eating steak. Now who told her to say that? I have to admit, I'm still finding it hard to say no to a good old barbecue steak. I'm still finding it hard to say no to a good old barbecue steak. Who told the presenter to say that? Kerry Stokes? Kerry Stokes? I mean, this is just crazy. If you guys, right, had any doubt, I hope this completely eradicates any doubt of this crazy bias. This isn't a conspiracy. Just follow the money. This guy, Kerry Stokes, who runs Channel 7, who did a hit piece attack against vegans, is a cattle farmer, beast producer. He has, you know, pigs and sheep and a honey business. Vested interest. There you go. Five seconds, there was one picture of some pigs and that was it. It was completely biased.  And...


Hello friends. I am Sanjay Gupta. I welcome you on Sanjay Gupta Tech School. In this video, I am going to explain how you can implement these patterns with the help of C programming. Before starting, if you want to watch more programming related videos, you can go to the details of this video. So there you will find various links related to programming players to do one step. Now, first I am going to implement the solution for this pattern. Then I will tell you how easily you can convert that pattern to print this one and this pattern. So here you can see we have five different rows. We have five different rows and these number of rows can be any number. So right now it is five. So user can enter that I want to print 10 rows. User can enter like I want to print 15 rows. So number of rows will be entered by the user. So I am assuming that that will be stored inside n variables. So you will use print app and scan up to read that number from the user. So starting from main, I will be using these three variables n, i, n, j. Now inside print app, I am writing enter number. So this message will be displayed on output screen and user will provide a number into n variable. So n is having how many number of rows you want to print. So let's say n is five. So we need to print five rows. So we need to implement one loop that will repeat five times. So for that I am implementing first for loop. So because I need to iterate this loop five times, so that's why I started it from one and condition is I less than equals to five. So it will start from one and it will end to five. So it will be five times. Then it will repeat first time. So it will print one. That is one. Then if it repeats second time, so this needs to print two digits. That is two times. So it means inside this loop, we need to implement one more loop that will be printing these digits. And that loop will depend upon the value of i, like how many times that loop will repeat. So inside this loop, I am going to implement one more loop. So here see the condition j less than equals to i. So j loop termination condition is dependent upon i. It will iterate as per the value of i. And then you can write j plus this, right? Now inside this loop, you need to write print f percent b. Now here you can see in each row, we need to print same visit. In each row, we need to print same visit.  So it means we need to print value of i because i is pointing to the row. So here we can print value of i and we can prove this. After completion of this loop for new line, you can use this print f. So it will print new line character that is backslash m so that cursor will be shifted to new line. Then this for loop will be completed and then main function will be completed. Now I am going to explain the execution cycle of this loop so that you can see how it will be printed. So initially value of i will be one, initially value of i will be one. Check this condition. It is true. Now we will move to this loop. So when condition of outer loop that is i is true, then we transfer control to inner loop, then inner loop will complete its cycle, then it will come to this print f and then control will move here. So j is starting from one, condition is j less than equals to i and what is the value of i? It is one. So this loop will repeat one time and what value will print value of i?  So this time value of i is two. This time value of i is two and again we are entering into j loop. So j will begin from one and it will move to i. So right now value of i is two. So how many times this loop will repeat two times because it is again starting from one and it is going to two. So two times it will repeat and two times it will print value of i. So see carefully why we are rotating this loop. So anywhere are we changing the value of i? No, we are not changing value of i anywhere. So inside this loop value of i will be two and that will be printed two times. So now I hope you understood why I took i here. After completion of this loop print f will print new line then i plus plus will take place. So i will become three. Again j will start from one and it will move three times now because i is three. So it will repeat three times and three times i will be printed. So value of i is three. So three times three will be printed. So this way this loop will print the pattern. Now if I replace this i to j, so this pattern will be printed. Now see how. So again initially value of i will be one. It will start from one j loop and move to one. So j will print one so it is five. Then new line then i plus plus so i will become two. I will become two. So again j will begin from one it will move to two. And now here you can see we are printing j not i. So first time j is one so in second row. In second row you can see j is printing one first. Then j plus plus so it will become two because this time loop will repeat two times. So j will become two and next time it will print two. Then it will be terminated new line will be printed i plus plus. This time value of i is three. So it means j will repeat three times starting from one to three. So j first will print one then two and then two. So this time we are printing j because we want every time printing will start from one and it will go to that value which is representing the loop. So this way this change will print the second pattern. Everything will be same except this i will be replaced to j. Now we are going to print this one. So here you can see continuous visits are printed one two three four five six. So we can't use i we can't use j. So we need one more variable k and that I am starting from one. So in place of j I am going to print k here. And after printing I am going to increase it by one. So that next visit will be available. So if you rotate this so when i will be one. So this j loop will repeat one time so k will print one after printing k it will become two. After printing k one it will become two but j is repeating one time so it will terminate. Then we will move to new line then i plus plus will take this so i is two now. Then j will repeat two times. So first time it will print k so what is the value of k it is two. So two will be printed and k plus plus will make it to three. So this time j is repeated only once. So j loop printed value of k then it is incremented to three. So this is one rotation one rotation is more pending. So j will increase its value check the condition it is true. Then again k will print so right now k is three and after printing it will become four. So now two rotations are completed so two and three are printed. Then completion of this loop new line i plus plus. So i will become three. So this time j will repeat three times. So three times k will be printed and three times k will be incremented. So first we will print k the last value of k is four. So it will print four and after that it will increment to five. So printing of k and its increment is completely one rotation of loop. So now we print five and increase it to six so it is second rotation. Then again print k that is six and increase it to seven. So it is third rotation. So after this third rotation this j will terminate new line with print and i plus plus. So i will become four and so on. You can print the rest of the digits. So this way these three patterns can be printed with the same profit. You just need to put i, j and k values here for this first, second and third pattern. So I hope you understood how you can print these three patterns of the DynamoC program. So implement this solution in your laptop so that you can understand how this is working. And if you want to watch more programming related videos you can open my channel go to playlist. There I have uploaded more than 1000 videos so you can watch them. And I hope you understood whatever I explained in this video. Thank you for watching this video.


Hello, I'm Anne-Marie Burkle, acting Chairman of the Consumer Product Safety Commission. Ten years ago, important legislation was signed into law. The Virginia Graham Baker Pool and Spa Safety Act mandated safer anti-entrapment drain covers in public pools and spas across America, and led to CPSC's pool safely campaign. Seven-year-old Virginia Graham Baker passed away after becoming entrapped by a faulty drain cover in a hot tub. Virginia's family, including her grandfather, former Secretary of State James Baker, came together with other families who had suffered similar tragedies to advocate for this important legislation. We are not aware of any drain-entrapment-related deaths in public pools or spas since the law went into effect ten years ago. I would like to personally thank everyone in the water safety community who has worked so hard over the past ten years to reduce childhood pool and spa drownings. Working together, we can reduce drowning, which is the leading cause of unintentional deaths for young children. For more information on how to stay safer around the water, please visit PoolSafely.gov and remember, simple steps save lives. Thank you.


Thanks a lot for coming tonight. Thanks a lot to coming to the next cloud conference in the first place, but also coming to our special event tonight, which I think is really, really interesting. So this is a day that few of us worked on for quite some time, I think over a year now, in all kinds of different areas, from development to design to hardware to partnerships and so on. So this is a really, really interesting day and I'm really, really happy that you're all here. So as you know, this is the next cloud conference here, so let me talk a little bit about the idea behind next cloud, you probably know it already, but the idea is that next cloud enables everyone to host their own data. So to control your data, to control your communication, to have security here to really own and protect your data. And we also want to break data silos. So if you're a data somewhere at a service provider or somewhere at a big company, we really think that you should own your data and you should have the right to get it out. Here we have a picture of our Federation concept that we have. So the idea behind next cloud is that there's not one central big instance, but there are lots and lots of smaller ones that can actually work together. So how do we do this? How do we actually reach millions and millions of users to own their data and to have secure communication and control over their files? We've been working on this for many, many years and there are lots of different ways to do it. First of all, you want to make it really easy to install and to set up and to run a next cloud instance. So as you know, we provide zip files and tar files and packages and virtual machines and containers and all kinds of things to make it really easy for you to set up your own instance. Another thing, if you don't want to run your own server, another thing we do is we work together with service providers. So if you go to our website, there are already over 20 service providers listed where we can go and get your own next cloud. That's really cool. But there's always one idea floating around. Wouldn't it be great to have a device that you can just take home with plug-and-play install at home and you have your own local small next cloud server? And I'm really happy. I'm really, really, really, really happy that we do exactly that today. Surprise. So what we're doing tonight is we're launching the next cloud box. It looks like that. It looks like that. It's a really nice little box. It has a hard disk. It has an arm base, Raspberry Pi, and it has next cloud, of course. Okay. This is how it looks like. You have your connectors here. It's actually really easy to open. You don't even need screws. So it's a really open platform. It's just hold together by magnets. Come back to this later. It's really important that this is open. Okay. So what exactly is in it? It is, first of all, this contains a preconfigured next cloud instance. So if you don't know how to set it up, how to configure it, it's all out of the box. It's really plug-and-play. This should be used by consumers and by enthusiasts. So this is really ready for normal users to run at home. It contains one terabyte hard disk from Western Digital to install all your files. It runs Ubuntu with Snappy. Obviously a completely open operating system that you can do whatever you want with it. It's also very important. It doesn't contain, in this version, a Raspberry Pi 2. The idea is that you should bring your own. But it's very easy to just plug it in. Everything with magnets is very nice. And the most important thing, everything is preconfigured and it's really plug-and-play. So what is the price? I'm really, really happy that this is really affordable with 70 euros. I think this is a really nice price. I'm not sure. I think if you buy the hard disk alone, it might cost the same amount of money. I'm not really sure. But this is really everything you need. The software and the nice box and the hard disk and everything that you need. So when it is available, when it is ready, it's actually available today. So you can buy this here at this conference. So we have lots of them here. You can buy them tonight or later over the weekend. And it's also available online. You can go to nextcloud.com slash box where you can audit online. Okay, so now you probably have a question in your head. Because earlier Frank told you that we really want to change the world. And we want to enable people to own their own data and to control their own communication and have everything secure. So does Frank actually expect that we sell like hundreds of millions of those boxes? Well, we actually expect that we sell a lot of boxes here, but probably not 100 million or more. So what this really is, besides being a consumer device for enthusiasts, this is also a reference design. So this is really important for us. So this is a completely open platform. So everything that runs on this box, everything that what this box is, is fully open source. Nextcloud, as you know, fully open source. This runs Ubuntu and Snappy, also fully open source. All the software that runs on this is actually available on GitHub in our repository. So really completely open. And it's also the reason why we picked the Raspberry Pi 2, because it's the most common ARM platform at the moment. So what this is, it's a reference design that everybody can take, copy it, improve it, adapt it, sell it, distribute it, do whatever you want with it. This is basically a template that we give you and the community to take this and build on top of that. Obviously this is only possible with great partners. So obviously we couldn't do this alone. So I'm really happy to have great partners here, which we did this together with us. And I want to welcome Jane Silva from Canonical to the stage to talk a little bit about Ubuntu and Snappy. Thank you. Thank you. Thank you. It's great to be here. I'm impressed that you guys have put on such a strong conference already. I hope everybody had a good day because you've been working away, toiling away in the heat already today, right? Was it a good day? Is it productive? I was really pleased to come here because projects like this and events like this are part of what make us really excited to make Ubuntu and to keep making it for developers and others. There's some of us who love operating systems. We have to. It's the foundation of everything we do. But one of the things that's most interesting about operating systems is actually what people like you do on top of it and how you innovate on top of it in the platform that it provides for people to do their work and make other great products. And that's really exciting. And that's part of why we're here today and why we are so pleased to work on this project with NextCloud and Western Digital Labs. It may look easy of putting some slides up, but I think Frank and others will attest to the fact that a lot of hard work has gone into this for many months to make it come to fruition. And it is just the beginning. I would echo the comments that it is a chance to build and improve and innovate on top of it. I'm going to speak again tomorrow. So I'm not going to go into too much detail because you'll get tired of hearing me say the same things tonight and tomorrow. I want everybody bright and eager for the morning. And I also know that you're ready for beers tonight. But one of the things that we're doing, you probably know Ubuntu beyond just the lanyards around your neck. I expect you know it from use in this cloud or on servers or on your developer desktop or laptop itself. We also more recently have been doing a lot of IoT work. As developers use Ubuntu and as that innovation happens at the maker developer area, Ubuntu is pulled into that IoT field. And it is a great fit there. Although there are things that we wanted to improve as we look at what's happening in that IoT space. When we look particularly at the operations demands around devices that are connected to the internet at scale without a user interface for many of them. The issues of updating them, of keeping them secure, of maintaining them provides all sorts of new challenges for the operating system and for any applications on top of it. Even without IoT, you all will know that there's already challenges in a platform distribution system like we've had for many years. As apps evolve more quickly and want to put out updates more often than a platform distribution maybe can handle. Frank talked about giving users control of their data. We as an operating system and a platform want to give developers control of their apps and allow application developers to update their apps on the cycle that they deem appropriately. But also do that in a safe secure way that can be maintained reliably for users. And that's what's behind the snappy architecture that we talk about. That's part of Ubuntu Core, which is a snap-based version of Ubuntu. And it is part of what's behind the application snaps of which NextCloud has one. It's all aimed at enabling agility for application developers, for device manufacturers, for silicon vendors, and a secure, reliable environment for end users. So we'll talk a bit more about that tomorrow. I think you all should be very proud of the box that's being announced tonight. Even if it was a grand surprise for you, I'm sure nobody read any of the press today. And everybody was surprised. But it really is a really interesting piece of hardware. I'm super excited about seeing what gets done with it. I think NextCloud is fantastic. I also think it'll be fantastic to see what else people put on top of the boxes and what sort of device it evolves into in people's homes. And we're happy to provide the foundation to make that happen and look to you to provide the spark of genius to see what it turns into. So thank you. Thank you, Che. Thanks a lot. I can really say that it was a pleasure and honor to work together with you and your engineers to make this happen. This was a really success story. But of course, we also need some hardware partner to make a box happen. So I want to introduce to the stage, Joe Lee, head of global operation from Western Digital Labs, to talk a little bit about our nice hardware here. Thank you. Thank you, everyone. I'm just really super excited to be here. I mean, this is a wonderful partnership with NextCloud and Canonical to bring a wonderful hardware to go along with the wonderful OS and the software. So when we heard about this opportunity, we just felt like this is naturally a great fit. I mean, we're, as you guys know, we make millions and millions of hard drives. And in the last year or so, we have been focusing on non-traditional PC industry. So here you see WD Labs here. You think that might be a huge organization, but we're really not. We're a small business technology incubation group. Consisting about 20 or so people. And of which three of us are really dedicated to small, you know, SBC small board computer business or the field. So, you know, we got engaged and, you know, we had some of the products, accessories that were already in development.   So, sorry, I just went to the next page.  So I won't bore you with the details. But, you know, we have the cable, you know, like over here where it can connect to the hard drive, as well as to the Raspberry Pi and also powers both the Raspberry Pi board and the hard drive. So it eliminates the need for, you know, having like two separate power supplies to, you know, power both devices. And so we just, you know, have everything kind of packaged neatly.  And, yeah, sure, yeah. So here's what it looks like inside. That's a real, you know, sample there. So, you know, you got this cable I was talking to you about that, you know, connects the hard drive to the Raspberry Pi and also powers the Raspberry Pi and the drive with one single USB charger. And also we're providing with the preloaded microSD card. Okay, so you, most of you probably heard that Western Digital has purchased Sandisk about six to nine months ago. I, you know, can't quite remember which day it was. So we're, you know, we can provide all different storage solutions from hard drive to SD cards to, you know, flash drives to SSD now. So, you know, we're able to, you know, put all that together and preload the software on the microSD card. So it's really a true turnkey system.   So, yeah, that's about it. Thank you. Thanks Joe. So now I want to basically ask to give a big applause to everyone here and a lot of people in this room here from design to packaging over there to everybody who helped to make this happen. So this is really great achievement. So awesome team. Thanks a lot.


I'm Felix Libreiro, Professor Emeritus of the UP Open University. I'm a simple man, therefore I'm going to talk about the simple thing, something that is largely ignored by most communication experts. I refer to what I call MDC contagion, MDC standing for mass communication, development communication, and corporate communication. You know in the Philippines, when we engage in communication practices, we normally talk about we are engaged in mass communication if we are into general communication practices. When we engage in the discussion or at least in communicating development messages, we say we are engaged in development communication, or we call our work corporate communication when we are into convincing members of our organization and the public. Now in this simple discussion, I have borrowed a terminology from medical science called contagion. You see, I look at three strategies of communication, mass communication, development communication, and corporate communication. In contagion theory, we talk about how things or how communication practices influence the behavior, the attitude, the level of knowledge of our audiences. And that these different audiences normally would look at these levels of knowledge, attitudes, and behavior as a means of converging their knowledge levels and skills into a focus on a communication purpose. Now the thing that happens here is that when we talk of contagion theory, when we talk of communication contagion, suppose we are engaged in the general practice of informing. Now let me define that first. When I refer to mass communication here, I go back to the traditional descriptor. Now so when I say mass communication, I am generally referring to informing and entertaining my audience. When I talk of development communication, I talk about informing and educating my audience whereas when I talk about corporate communication, I talk about informing and convincing members of the communication organization internally or externally. So let me now put this into some kind of a mixed form. When we engage in a communication practice, if we highlight mass communication, we should correspondingly lessen our focus on development communication or corporate communication. When we highlight development communication, then we lessen our response, our focus on development communication or corporate communication. And when we focus our attention on corporate communication, there is less emphasis on mass communication and development communication terminologies. So what's the basic difference? Well, the basic difference is really this. It's the context of our communication goal. We use the same techniques. We use the same procedures. In fact, we use the same measures of success and failure. In other words, those are the parameters. We are working on the same parameters. We are only differing in context. And that's how the mass com, dev com, corporate com, contagion works. For all our intents and purposes, therefore, the intention really is to influence the levels of knowledge, attitudes and behaviors of members of our audiences. Our audience in mass communication may be general mass or in development communication specific or focused. Or in corporate communication, members of our organization or internally or members of the public who are in fact using the products of the organization. So this is how we look at it. Now in the start of this discussion, I mentioned the fact that in the practice of communication, sometimes we overemphasize our role as mass communicator or development communicator or corporate communicator. Well, that's only for us. I would imagine that's only for us as communicators. But the entire practice really is that it is based on the context of the content. Now, so if you want to, oh, by the way, before I forget, the reason why it becomes important to focus on these things is that in communication, changes happen all the time. In mass communication today, for instance, there are crossing over of concepts and practices so that more and more mass communication experts in North America are looking at the possibility of media communication taking over. So there seems to be a crossover already. In development communication, there are experts in communication, in development communication who now believe that perhaps we should not overemphasize the concept of development in the field of development communication. After all, what we do is really simply communication, period. Now, we say mass communication. We have an end goal there. We say development communication. We have a separate end goal there. We say corporate communication. We have an intention to satisfy it. But overall, when we talk of communication, this is all we do. We communicate using the same skills, using the same levels of knowledge, using, in fact, measuring our communication impact, using specific behaviors of our audiences. So that to me is the simple explanation of the concept of communication contagion. And, well, this may not be expressed as often and as conveniently in communication courses. This is what all of us communication experts should bear in mind when we do specific communication work. That, to me, is what I refer to as the MDZ contagion or the Mascom Devcom corporate communication contagion. Thank you.


Hi everyone, welcome back to my channel and a very happy new year. I hope you all had a wonderful Christmas and like me, I'm looking forward to rocking 2021 in style. So today I'm sharing some outfit ideas from my own capsule wardrobe.  If you're new here, it'd be really wonderful if you could subscribe to my channel for all my weekly outfit ideas and style inspiration. And don't forget to tap all notifications on the popup which will just send you a quick reminder each time I've uploaded a new video. And at the end of this video, follow the link in the description box below to find my daily style pictures over on Instagram. Right, let's get straight to it with winter outfit number one. Now while it's fun playing with new styles and trends each season, there is something to be said for sticking with the classics, especially when that means bringing in a little bit of Parisian style, which brings me to the bright and top. The gift that keeps on giving year after year. This little beauty is new in my winter capsule wardrobe and I love it. I bought it just before Christmas and it's swiftly become a new favourite. It's made from organic cotton, so it feels really lovely against my skin, but the chunky knit gives it more of a cosy sweater vibe rather than something that needs layering. Now the joy of umbrella top is of course the fact that you can mix and match it in so many different ways than I could possibly squeeze into a 10 minute video. So here I'm wearing one of my favourite outfit ideas, keeping it simple with light wash jeans and ankle boots, bringing out the navy tone with my coat and adding a sprinkle of Parisian with my handbag. You could switch out the blue denim for white, add a black boot to tie in with your bag or for warmer climates, stitch the coat and add your sunnies. There are endless possibilities with this one. Don't save your smart trousers just for the office, there are so many more ways you could wear them. Obviously at the addition of my trainers instantly relaxes the look, but then I polished it again with my recycled cashmere sweater, complimenting that tone but not matching with my crop jacket and adding my leather toe into the mix for another take on that neutral shade but with a contrasting texture. Now socks kind of ruined this look and while I'm all for suffering from my fashion, if it's absolutely freezing outside you could add tights underneath which keeps the line of your ankle slimline to go with those cigarette trousers. If you don't already have a pair of cigarette trousers in your capsule wardrobe I can highly recommend you putting them on your wish list. I've added some really affordable favourites that I found across the high street in the description box below. Now I'll admit it's not the most groundbreaking look of the season but the coat and boot trend never seems to fail. It's not only practical but when it comes to making winter outfits this is one look that always seems to be on the fashion carousel. Now to update this look make sure your boots are at least knee high. You get extra points for over the knee but in truth they look ridiculous on me so I always tend to stick with this sort of style. Now I think this coat will always make it into my winter capsule wardrobe both for its versatility but also its ability to smarten whatever I might be wearing underneath. But the coat can actually be any colour and still work just as nice. I just like to make sure the tones are on a similar train of thought. Now of course the sales are a great time to invest in a beautiful winter coat and I found some absolutely gorgeous versions across the high street, the independents and with the designers. So in the description box below I shall link to some of my favourites I found recently because there's definitely a few bargains to be had. Now has anyone else discovered a love for leather trousers recently? I went from doubting their very existence in my capsule wardrobe to wearing them on repeat. Thankfully mine have softened enough now that I don't resemble Ross from Friends trying to get them on and I much prefer the slight slouch that the leather has taken on rather than that really unforgiving super tight leather. My favourite way to style them so far this winter has been with a great big chunky knit. Because you've kept your bottom half quite slimline it means you can get away with quite oversized knits and this one from Carl's is definitely one of my favourites. Now this look would work with ankle boots of course but I really quite like the look of dressing it down with trainers. Starved with my crossbody bag, breaks up the knit nicely or a cropped puffer jacket would add to this look nicely. I know there is literally nowhere to go right now but that doesn't have to stop you getting dressed up for parties in the kitchen and throwing caution to the wind I've broke my own rule of wearing heels on my brand new wooden floor. So for house parties with your own family or maybe via zoom this is the sort of outfit I would wear. It's that casual effortless kind of chic. I'm comfy in my jeans and a floaty laid-back blouse, elevated with my heels and a splash of gold jewellery. And if needed a light wool coat thrown over my shoulders. I think the key to looking effortless in evening winter outfits is really about comfort. I don't know about you but I'm personally not hugely comfortable in a skin-tight body-con dress. I'd wear one if it was right for the occasion but I don't think I could say it was exactly comfy or I felt relaxed in it. My favourite out-out styles are always much more relaxed, more chilled out, more my personal style. Maybe elevated with heels or a nice clutch but they're always easy going at their core. Apologies in advance to anyone watching in Oz or anywhere else super warm but for us Brits, winter outfits must include a whole lot of jumpers but I'm a firm believer in trying to make something warm and toasty look as chic as possible. One simple trick I reach for time and time again and it's actually something I'm conscious of when I shop for my capsule wardrobe is trying to match my jumpers with the coats I already have. It instantly makes an outfit feel more polished. For the ultimate tonal outfit you can opt for dark jeans but personally I like adding a lighter blue into the mix. For a more subtle approach, go with lighter neutrals. I love a palette of camels, I think that always looks chic and I'm a big fan of grey mild jumpers layered with charcoal grey coats. My loafers keep this look feeling informal but I think the combination of all those elements together make it feel elegant at the same time. Talking of full tonal in this look, I did just that. I'll be it with a sprinkle of camel into the mix. You could easily recreate this look with a co-ord of which there are many different options on the high street and you don't have to go with trousers either. A colour blocked maxi skirt and top would look equally nice and have the same effect. Well I personally prefer lighter neutral tones that just make me think of cozy log fires for some reason. I do also admire those that can rock this look with really bright bold tones. Head to toe emerald green outfits for example can look absolutely amazing or even red in the right shade. So don't be afraid of colour if that's your thing and you love it and you feel good in it. My personal taste is just to prefer these lighter tones. These kind of winter outfits are the perfect opportunity to play with contrasting textures. Maybe mix a satin skirt with a matching chunky knit or a smooth wool with a cable knit, a silk with cashmere. Playing with that combination of textures really makes a tonal outfit come alive. This blazer has definitely had its wear in my capsule wardrobe and even better it looks as good today as it did the day it arrived. Made from 100% recycled Italian wool, it's truly been made to last. And I think it's fair to say it's become one of my favourite pieces to make outfits with. The men's wearing a spied shape gives it that effortless cool and the blend of tones together rather than just one matte colour gives it a depth that I love. Plus of course a grey blazer will go with a million different outfit ideas. I probably even wear this one more than my black one. Here I've styled it with my needle cord flares, definitely something I reach for when I want to feel a bit taller. An accessory with a light grey scarf and charcoal crew neck which contrasts nicely with the blazer tones. The outfit feels thrown together and haphazard which is probably why I like it so much. It's not too contrived, it's comfy, it's elongating and with a nod to a few different trends it feels up to date or rolled into one. Now while I do love my jeans, one thing that always manages to make me ditch them is a lovely pair of cigarette trousers. I picked these up a while ago from H&M and they quickly became a firm favourite in my capsule wardrobe. In fact this is probably an area where you can save rather than spend because there are so many great options on the high street. I shall link a couple of my favourites in the description box below. Now I like styling them with ballet flats, of course a little nod to Audrey Hepburn but it's a look I don't think is ever going to date. On my top half I decided to contrast the navy with a tone that Eveline calls cider and complement it with the cosy tone of my camel coat. There's an easy elegance to outfits like this which might explain why I've been wearing it on repeat this winter so far. When I want to look a bit more refined, elegant and classy this is the sort of outfit I tend to create. Beautiful warm tones of golden brown blended with cosiness. It's a combination of layering but making sure the items I use bring something different to the table. So for instance the waffle knit of my jumper sat against the smoothness of my coat. The slight silky feel to the trousers with the leather on my bag and my shoes. Just have a play with winter outfits like this and keep blending in pieces you think might work. It's a bit of trial and error but you'll know and you'll feel when you've got the balance right. I really hope you've enjoyed this video and it's given you lots of outfit ideas for this winter 2021. It's always lovely to hear from you in the comment section below so do let me know which was your favorite outfit idea I put together. And don't forget if you did like this video I would really appreciate if you could give it a thumbs up and if you're not already subscribed that would be lovely too. I'll be back in a couple of days with more outfit ideas and inspiration so hopefully I will see you then. Take care.


What is going on guys? I know a lot of you are worried about Bitcoin's price today, so I'm doing this video for you guys here in the inner continental downtown Miami I'm about to speak in about two hours. I'm gonna go on stage to a workshop Show some people show the people here how to trade and how to go about that how to get into trading how to start You know basically an introduction to Bitcoin trading, but I'm going to do a quick video today talking about this Massive crash that we've seen over the last week if you guys remember on Friday I told you guys that there was a possible pullback coming within the neck for the next two weeks and I didn't call it the exact prices or exact timing But I knew was the second half of the month and that's exactly what we're seeing right now So we're gonna talk a little bit about it's not gonna be a super long video So let's jump right in a J here and welcome back to Bitcoin daily Bring you guys the best tips tutorials and ideas to help you guys become profitable and successful investors The goal of this channel is to empower you guys with the knowledge and resources to get you up to that next level So if you guys are new here consider subscribing make sure to turn on the notification bell as well and Everybody make sure to smash the like button. All right guys. So as you know on Friday last Friday's video We spoke about a possible Pullback that was coming in the second half of this month and that's where we're at right now one week later I don't like to be right about these things. I don't like to call pullbacks, but you know in the markets There's always going to be pullbacks. All right So we look back at the chart that I show you guys on Friday that what we're looking at these patterns over the last Five months the pullbacks that that continue to happen over the back half of each month for the past five months So you see here if we take a look at the last four months, you see here in January We had a pullback of 31 percent from its high when it reaches new all-time high To the low after the drop in the second half of January, then it'll be moved forward to February We had the same type of drop where we went to a new all-time high and then we had a pullback of 26% to the low after that all-time high Then if we look back into the last month again Posted a new high we printed a new high and then had a pullback of the 18 and a half percent and now this month We've yet again gone to a new high and had a pullback in the back half of the month If you guys notice this pullback to this month has been around 27 percent So we're still on the same track Literally the same exact pattern that we've seen over the last five months. It's repeating yet again All right So if we go ahead and look at the charts here You can see that we set a new high here and then now we've currently been pulling back So these are these lows have not been seen since all the way back and let's see When's the last time we saw this price in March We haven't seen these prices since March, which was last month in case you forgot guys So we are back and if you look here I'm not gonna even try to get the drawing tool because this laptop is like about to explode Right now from so much that I'm doing here But if you guys look here, you can see my my click you can see that we are bouncing off that exact Fibonacci level not only this Fibonacci level But the second Fibonacci level that I have set up here Which is also happens to be this exact level where we had a bounce right here last month So this is where I'm expecting for the bottom city I'm hoping that we can hold this price off here at that 50k level and bounce back up Now of course, although we're probably all hoping that this is it We all we also have to be you know We have to accept the reality of different case scenarios that could happen including a bearish one So in the bearish case scenario where we go lower than what we're currently at right now in this moment We can see a drop down to that 44,000 level if you see here on my chart You see that the next level that I have here set up is between that 44 to $42,000 level So that would be my very next Target for a bounce if we were to continue down in this trajectory Now if you see a bounce the big level that we have to watch that we're watching is going to be $50,000 That's the level that's the key area right there above 50 if we come break above it to that's what I'm looking at long Again, I'm looking for long day and after 52 we have to close the candle above it as well We can't just test it. We got to close above there to show some more some momentum and some strength on a bounce back up So those are the current levels that I'm looking at in a bit coin today So I'm not even gonna talk about the theorem today If they're just going to for the moment follow Bitcoin as long as Bitcoin is at these levels and continues down It's going to pull down the entire market with it including the theorem Now if we start seeing a bounce the theorems also going to bounce and it's probably going to outperform Bitcoin during that bounce So we can expect on a bounce if we bounce on if Bitcoin bounces from 50 up to 52 Let's say between 52 to 55 we can expect a theorem to go back up to that $2500 range and possibly retest that previous all-time high as you guys know yesterday We broke all-time highs with the theorem, but because of this pullback it pulled everything the whole market back down But if we do see a bounce here, I'm expecting to see the theorem go back up to retest at 2,500 level and retest that all-time high So as far as trade setups that I'm looking at this weekend that first level is 50k The issue with 50k is going to be a lot of price action a lot of back and forth a lot of fakeouts So I'm not taking trades at 50k. It's just too much risk for me. I'm looking for a trade of bug $52,000 so I'm going to be looking for a trade right above this level above 52 is where I'm looking and then of course the next Level I'm going to be watching is above $55,000 as well. That's my second Breakout trade now in the event that we continue down a bounce entry that I'm going to be looking for is at that $44,000 area between 44 to 42,000 I'll be using both those levels as potential break out. I mean not break out as potential bounce entries In the event that we see that case scenario where we test that during the weekend now guys keep in mind During the weekend there's a lower volume so it's easier to move the market in either direction now It's hard to tell I can't I wish I knew you know Which way the market was gonna go unfortunately, I'm not a wizard You know, I can't tell these things but from looking at the daily right now If we pull up the RSI here You see that the RSI is about to reach that oversold territory Okay, if we go here to the four-hour chart, right? And we look at the four-hour chart It's right there at the edge of that oversold territory as well Usually when there's when the RSI gets this oversold territory There's either a bounce or consolidation But usually it doesn't continue down until the RSI is more in a neutral area You can see here when we had this this drop over here The RSI was in a neutral area and I went oversold and then it kind of went back into the neutral area Then we had that dump last night and it went back to oversold Now it's climbing its way back up so I expected to at least get back to around that 40 to 50 area in the RSI Before being able to dump further is what I would guess so currently I don't think it's going to continue down So that mean it won't though. Alright guys, I hope you guys have enjoyed this video I know it was kind of in a rush, but you know, I'm here at the conference right now I'm about to go up on stage in about an hour and about two hours. So I have to get prepared now I'll be updating you guys on Instagram on, you know, the moves that Bitcoin does make I might even jump on a live stream or something later on today or over the weekend If I have some time, so I'll definitely keep you guys in the loop with anything the next move that Bitcoin does And if you're in my trade group, you already know I will be posting updates in there If you guys enjoyed this video make sure to smash that like button if you guys are new here Make sure to hit the subscribe and turn on the post notification bell as always guys I'll see you on the next one. Have a great weekend peace and love