I can't see anything. Hi. My name is Emily Stolfo. I work for MongoDB on the Ruby driver to the database. It's the Mongo and BISAN gems, if you've ever used them. I'll soon be working on MongoDB as well, which if you're a Rails developer using MongoDB, you're probably familiar with. I am an adjunct faculty at Columbia, where I teach Ruby on Rails. I've recently moved to Berlin, so I actually haven't been teaching this semester. But I probably will come back in the spring and teach them more. And I'm going to talk about peeling back Ruby's layers and C extensions. So who here has written a C extension? OK, who's an expert on writing a C extension? Because I'm not, so. If you're an expert, this might not be the talk for you. Who wants to write a C extension? Are you curious about writing a C extension is that why you're in this talk? OK. So I had the experience of writing a C extension over the last year to provide Kerberos authentication support for our driver. And I learned a lot from the experience, both about Ruby itself, about the C interpreter, MRI, and about Ruby gems, what to do, what not to do. And I'm going to talk about what you need to know if you want to write a C extension for Ruby, and if you want to package it with your gem. What mistakes you can avoid that I've made. I think Ruby itself as a language is really unique because it has these different implementations. So it has the primary ones are like a C implementation, MRI, and a Java implementation, so JRuby. And I think that's really unique and interesting, partially because it means that you can write these extensions that work with external libraries. So in the case of Kerberos, which is a certain kind of authentication protocol, there are external libraries that you use to do all of the fancy math algorithms. And they're not implemented in Ruby. They're implemented in Java or C in this case. And you have to write some kind of glue that can go back and forth between your Ruby code and these external libraries. So once upon a time, in January 2013, Ticket was created for the Ruby team at MongoDB. There were three of us at the time saying implement GSEP, the Kerberos authentication support. And it was originally assigned to one of my colleagues, but it was a hot potato. We just sort of pestered around between the three of us for about a year, and nobody did anything about it because nobody wanted to deal with this ticket. So Kerberos authentication is something that's not usually popular amongst Rubyists. It's this kind of authentication that is used in pretty large enterprises and is usually some kind of policy where they say like every kind of authentication with the database has to be done using Kerberos. And if you ever find a Ruby project needing to use Kerberos authentication, it's usually in the context of one of these big enterprises as part of a suite of technologies that need to meet this certain policy. So it wasn't really a super high priority or demanded feature of the Ruby driver. It was something we had to do in order to comply with standardization across all drivers. So hence the resistance or just the lack of interest in implement. The return on investment in writing the C extension to provide this authentication was not very high. So we spent about a year trying to figure out how we could avoid writing the C extension. We researched a bunch of alternatives which were, there was a gem called G-Stappy which was, it wasn't a C extension for working with the Kerberos library. It was using something called Ruby FFI which allows you to write Ruby code that goes directly into C code. It doesn't really need the glue or the C extension glue in between. And essentially this gem was doing the Kerberos authentication in Ruby code and calling into a C external library directly using this glue called Ruby FFI. I tried using that and I got a bunch of segmentation faults and I consulted with our C developers and after some time and them helping me read assembly code we realized that it wasn't really good use of our time to debug this. It would have been time better spent if I just wrote a C extension myself. The other thing I investigated was Ruby FFI which again was this way of just going directly from Ruby code into a C library and skipping the whole extension writing itself and that didn't really work out either. I got also a segmentation faults and I figured it would be time better spent if I actually just sucked it up and wrote the extension. So I did finally write it. Learned a lot in the process. Wrote it in over the course of about a month like August into September and by that time the PHP team had implemented it also in C so I was able to talk with them and learn about how they actually wrote the C code to use the Sazel C library. And I released it the day before by Ruko Barcelona RubyConf on September 9th and on September 10th, yeah, September 10th I had to yank it. So I'll tell you why I had to yank it towards the end and how you can avoid having to yank your gems depending on C extensions. So let's talk about what it means to write a C extension, why you shouldn't be afraid of writing a C extension and what you can get out of writing a C extension. So thinking about Ruby as an onion in the context of MRI, Ruby is a very high level language, pretty elegant, very expressive, but underneath all of that expression or that simplicity that we like, there's a lot of C code. So we're sort of under water in C code and Ruby is like up there above water and there are these like beautiful floats floating above us. So let's think about it almost like an onion in the sense that we have this like core understanding of how Ruby objects work and how C works and then we provide increasing numbers of abstractions on top of the C code and eventually we get up to a gem that's released that has an extension that we've written sort of at the core of this Ruby red onion. So what Ruby knowledge do you gain in writing a C extension? I'm gonna talk about that. I'm gonna talk about how you actually write the extension, how you work with Ruby objects, how you go back and forth between C data and Ruby data. How do you package it with your gem? And finally, what are the Ruby gem limitations? So what did I learn after having made a mistake with packaging it with my gem? So starting with knowledge gains, resources, what can you use to learn about this besides looking at source code?  You can look at C at other implementation other C extensions, but the core documentation in my opinion that you should look at is the readme.ext in the Ruby source code. So it's pretty straightforward, it's not very rich, it's just text, but it's really clear it has an appendix at the end and it tells you exactly what you need to do as a Ruby developer who's running C code working with the Ruby implementation in C. And the other thing is there are a lot of blogs out there as well that talk about how to write C extensions and there are a couple of really good ones over the last three or four years. None of them are, I wouldn't call, I wouldn't highly recommend any of them, I would highly recommend looking at this readme, which is short and sweet, but really gets to the core of what you need to know. And one line in it that I find sort of charming is when you're writing a C extension, you're adding new features to Ruby. So again, Ruby is nothing but a way to write code that is then implemented in another language. So when you're writing code in that other language, it allows you to do other things in the higher level code. You're actually sort of adding features to that language. I think that's the sort of cool way of thinking about writing a C extension. You're sort of in the belly of the machine playing around with how it works and providing new abstractions to the thing above you. So the actual knowledge you'll gain in terms of how to go back and forth between Ruby and C and C Ruby is, when you're going from Ruby to C, keep in mind that Ruby objects have types. Ruby variables don't have types. C data doesn't have a type and C variables do have types. So how do you go back and forth between these constructs or these data structures? In C code, when you're working with Ruby objects, you'll be handed this structure and you'll have no way of really knowing what type it is or how it'll behave or what behaviors that can actually have what features this object has unless you check the actual type on that object. And there's a certain way to do that. Each Ruby object when you're working with it in C code will have this identifier, this integer flag on it that tells you how to work with it and how to convert into C data. So these are, there are 18 of them that correspond to the Ruby core objects. And you'll recognize these as like nil, object, class, string, array, false symbol, and the list goes on. And again, these are integers. These are like constants that tell you what Ruby objects, what the object that you're working with how it should behave and how you can use it. So when you interact with these data types, when you have this Ruby object and you wanna convert it to C code, you first check the type and you get the integer, so that constant, and then you convert value into C data. So I didn't explain what value is. Value is sort of this like generic C structure that doesn't really have a specific type or specific object class, but that could be any one of those Ruby objects. So when you want to convert into C data or C data into Ruby, the go-between is this value generic structure. So how do you actually check the type? There are two main ways. There's a macro called type where you provided this value, so this generic structure, this Ruby object, and I'll give you back the integer that corresponds to one of the constants in that list that I showed you in this list. And then the other way that you can check is using a function that takes in that value, that generic data structure, and a integer that you wanna check, and we'll throw an exception if it's not that type that you're expecting. So that's how you check the type. So once you know the type, you'll know what to do with the type or how to convert into C data. And Ruby objects that are defined like a string or a false symbol, these have corresponding C data types. So once you have this Ruby object, you check the type, you know what integer it is, what constant in that list it is, you can then convert it into C data. And the way you do that is by using macros like R string. Actually, so on this side, like R string and R array, these are just examples, like each one of these has its own corresponding C data type. And R string and R array are this the C representation of those Ruby objects, C data type. And so when you use something like R string or R array, these functions, they'll take in this generic value, the data structure, and give you back a pointer to the corresponding C data type.  And then you can work directly with those data structures themselves if you want, but it's highly recommended to use functions instead. So there are helper functions for you like Ruby string set length, which will take in the value data and then a length and set the length on that string. You could go into the structure itself and change it yourself, but that's not recommended because there are implementation details of that data type, that C data type that you will avoid clashing with or messing around with if you use the helper functions. And then something like Ruby array entry, this is the equivalent of using brackets with an array. So if you provide a offset, so an index in the array, it'll return to you the object in the array at that offset. And so this is another way of accessing an element in the list. So I can imagine like in a C data R array, you can take that structure and access the list within that structure and get it the element you want, but it's much better to use this function because it knows the implementation details of the C data type R array and can protect you from anything that you might mess up or any misunderstanding that you have. So that's how you go from Ruby to C. Ruby, you have these objects. They have identifiers or this flag, this constant. It tells you how to convert it into C data. C data have corresponding types for Ruby objects that you're familiar with. And we'll talk about what happens when you have your own custom Ruby objects and how you go back and forth with C data. So now we're gonna talk about going from C to Ruby. So how do you go from these variables that have types, these generic structures that don't have types and convert them into Ruby objects that do have types or variables that don't have types? You can take a structure of C data and cast it to a value and then convert it into some kind of user, a function or macro to convert it into the corresponding Ruby object. You can use functions to create Ruby strings based off of C data given a certain length. There are a number of things you can do, but I think the most interesting is wrapping C data in your own custom Ruby object. And that's what I'm going to show you in the next couple of slides. The first two are pretty straightforward. You can look at documentation for that, but the third one is where you running a C extension is the most valuable because you can take C data that you've gotten based on interacting with an external library and turn it into something that your Ruby code can actually use and make use of. In capsulating C data into Ruby objects, these are three lines taken from the C extensions that I wrote that pretty much show you like what you would do if you wanted to create a custom Ruby object in your C code. So I create a variable of type value. So again, this generic data, C data, and then I wrap it using a function called data wrap struct. And what this does is it has sort of this laser, maybe not, it has four arguments. So the first one is the class of the object and I just use a generic Ruby object class. The second argument, I have null here, but what that is is a function you provide that tells the garbage collector when it's executing how to mark that object or mark the objects that that one points to. So if I had in this C data, if I had it pointing to other C objects that I wanted to deal with somehow when the garbage collector came around and needed to mark this one object, I would put it inside that function. The third argument is another really interesting one that I actually do have a function for, sasocon free. What that does is it tells the garbage collector how to free the pointer. So when I'm in this Kerberos authentication C extension, I work with an external C library. I set some variables, I allocate memory, and then I create this Ruby object that's wrapped up and available for me in my Ruby code. When I free up that object in my Ruby code, I need to free up some other C stuff that I've done that the Ruby interpreter has no idea about. And you do that in that function. So sasocon free will take some C variables, so the C memory that I've allocated and free it up because the Ruby interpreter doesn't know about it. And then the last one is the actual C data that I'm wrapping. And then the third line is another really interesting one. And this is how you tell your Ruby code how it can actually access this data now that you've wrapped in a nice Ruby understandable way. This code is written within a function that can be called from my own Ruby code, an instance of a class that I've created. And I've actually defined that class inside my C code and I'll show you later how I do that. And what this does is it takes that, it works with the external Kerberos library. It creates this object, this data, it wraps it up in Ruby and then it says here I'm assigning it to this instance variable that's available on this class to my Ruby code that I will be writing at some later point or using at some later point. And so it's pretty easy to understand. Ruby instance variable set, it'll set it on self because this method is an instance method being called on a specific Ruby object and it's setting this wrapped C data to the variable context and then I can access it from my Ruby code. So again, that's encapsulating C data into a Ruby object and that's that third thing you could do when you're going between C and Ruby that I find the most interesting and it's most customizable and this is where you can have the most fun in your C extension. Okay, so now we understand how to go from Ruby to C and from C to Ruby. How do we actually write this extension and include it in the context of our gem? So include an extension with your gem. There are four things you need to do and I don't find the documentation for this to be that straightforward online. So maybe you could even use these slides as a reference in the future if you need to do this. The first one is you need to write a file called extconf.rb which essentially is a script that runs that checks the environment or your platform in the system, checks to see if the external library that you're dependent on is there if you are dependent on external library and creates a make file that can be used to build and install the extension. And what it looks like is like this. Ours is actually pretty simple. It requires MKMF which allows you to use these functions which finds header. It looks for this header file in your system. It says you have this library. If so, create a make file and then either we'll look at a rake test later that will actually install the extension or RubyGems will do it or if it doesn't find the library, it'll abort. So it won't even get to this step of installing the extension, compiling and installing. So that's a script that you have to write that's like essential for having a C extension. The second thing which isn't completely essential but if you're ever going to test your extension or do anything else with it like either testing building the extension or actually just using it in your own Ruby test you're gonna have to write a rake compile test. You'll probably use rake compiler that's sort of the go-to gem for this and you'll write a task that will build the extension and install it for you so that you can actually use it in a testing environment. That's not that interesting to look at. You can find really good documentation on rake compiler online but you'll have to probably write this task yourself. Then the third thing is the gem spec. So gem spec is the file that you have inside your gem that has all the metadata about your gem. It says like the authors, it says what to do based on different platforms, has all this information and in the context of having an extension in your gem you're gonna have to tell, you're gonna have to specify in your gem spec that you have a C extension or a Java extension so you have to check the platform in there and do something depending on which one you want Ruby gems to look for. So the gem spec will look like this. This is the simplified version of our gem spec. It says if the Ruby platform is Java, it's going to include the jar. So Java extensions function differently from C extensions. I'm not gonna explain it but you already have the binary there and you add it into your files that will be used when Ruby gems go to install the gem but when you're doing C you wanna add the header files, the C files, the Ruby file will be the exe comp file that it'll be looking for in that directory and then you tell it to run the exe comp file when it wants to install the extension as you just basically need to have those two lines inside your gem spec and then Ruby gems will know this gem has an extension, I need to run this file, create the make file, et cetera, et cetera. And then finally, obviously the C code. You need the C code in your gem directory. There are some conventions on where you're supposed to put that and you can find that in documentation online also but in looking at an example of some C code this is taken again from the C extension and this is probably like the most interesting or the most valuable part thing that you need to know about running a C extension. When you want to use, so I wrote a class called C-Sazzle that I instantiate and use within my Ruby code inside the gem and when you write require-sazzle this is the code that actually runs. So this defines the class and defines the methods on that class and other behaviors. So in going line by line, it, the first line creates a structure that will hold the definition of this class.  And then within this init-sazzle it'll, when you do require-sazzle it'll look for a function called init-sazzle. So require-x will look for init-x. It starts going through these lines and the first one, Ruby constant get will look for the module-mongo and the second one will look for the module-sazzle and have a pointer each one of those modules and then define the class under the, I think here I'm doing it under the sazzle module. So it defines this class G-Sappy-off under-sazzle and this is the same thing as actually just creating a file with module-mongo-module-sazzle and then class G-Sappy-off. And then the next couple of lines define methods on that class and what they do is they'll define it on that object, the pointer that I've defined on the top and they'll give the second argument is the name of the method on that class and then the third argument is the name of the C function that corresponds to that Ruby method that we called on that Ruby class. And then the last argument is the number of arguments that it should expect would be passed to that method. So this is just a little snippet of code from the thing that you definitely will write if you write a C extension. This is essential for defining anything that will be loaded when you say require X. So this is the C code. So again, the four things you need to do when you package a C extension with your gem is the ext comp file, so that creates the make file. You need a rate compiler task, not necessarily but you probably should if you wanna test your gem. You need the C code and you need your gem spec which will tell Ruby gems that you have an extension and it needs to be installed when you install the gem. So that seems pretty straightforward. I understand how to work with a Ruby API. I know how to write C code. I've packaged it up in my gem and so now I'm ready to release. What you need to know about releasing is back to this story of how I released this gem and I had to yank it. I released it again on September 9th and then September 10th, I went to the airport. I was on my way to Barcelona for Barcelona Ruby comp and my flight was delayed by four hours. I took out my phone to check my email. There's no wifi in the airport so it's one of those tiny domestic airports and I see this ticket saying Ruby driver 111 does not install in systems without Libsazzle and all I had to do was look at the first couple of lines of the error and I knew exactly what the problem is. So it says that 110 cannot be installed on Amazon bamboo because of the following error. It says failed to build gem native extension and then it shows the lines that happen when it goes through xtconf and looks for the header files and then tries to install the extension in the process of installing the gem. And so the one line that told me everything was it says sazzle down sort of towards the bottom fatal error sazzle.h no such file or directory. So when I saw this I knew that xtconf was running so that was fine like Ruby gems is finding everything just fine I put all the files in the right place. What was happening was in xtconf which I have in the next slide it was going through this file and it said I don't have sazzle.h I can't find this header file I don't have this library so I'm just gonna abort installation and aborting installation does not mean aborting installation of the C extension it means aborting installation of the gem itself. So you can't optionally install a C extension inside your gem with Ruby gems which means that the Ruby gem limitation is a gem extension cannot I just said that an extension dependency is a gem dependency. So remember in the beginning when I said like nobody really uses Kerberos authentication with Ruby. So I just released the Ruby driver that has a hard dependency on a C sazzle library that allows you to do Kerberos authentication but nobody does Kerberos authentication with Ruby driver so why am I requiring that? So quickly I consulted a lot of people and I realized that the only solution to this was to put the extension in a separate gem and so what you gain by doing this is you can have a dependency on the other gem or you can programmatically require the other gem. In this case the other gem was called Mongo Kerberos and programmatically if it can't require it if it doesn't find it then I can just say you know what you can't do Kerberos authentication but doesn't affect the installation of the Ruby driver of the Mongo gem at all. So that's what we did we put the C extension in its own gem called Mongo Kerberos and we released it it was pretty easy to do that just a matter of like moving directly around and creating another gem specification and then as I said programmatically when someone would go to do authentication I would do require C sazzle and if it couldn't find it that meant that the dependency on Mongo Kerberos was not met and in that case I knew that I could just like throw an exception to say like hey you can't actually do Kerberos authentication but that wouldn't affect the installation of the driver itself. And as you can see we have 309 downloads and I can assure you 300 of those are a testing environment. But anyway I've learned a lot from that and I hope that if you get the chance to write a C extension it'll be a little bit more clear to you than it was to me when I started out dropping around trying doing things by trial and error because now you know that you'll gain a lot of Ruby knowledge by writing a C extension even though you're writing C code you'll understand what the Ruby language is or the C implementation of the Ruby language is what it actually is by doing this. You'll know actually how to write the extensions of those four things that you have to do and you'll know the Ruby gem's limitations so you'll know that if you have a hard dependency on a header file on the system that better be a hard dependency of the gem you're trying to install itself because if you abort in the extconf.rb file you're going to abort the installation of your gem not just the extension. And that's it. Thank you.


Welcome to this episode of Door Hardware Nerds. I'm your host, Mia Merrill.  It's just blocked with random obstacles, especially if there's an exit device on there. You need to make sure that that door is not blocked. Now that we have those obstacles out of the way, why don't we want to block doors, especially fire doors? Well, for two reasons. Number one, it could be your only source of egress. So in an emergency, we need everything out of the way so you can go through that door. The other thing is, is we don't want any of those obstacles to fall in the door as the door's trying to shut. We rely on fire doors to stop the spread of fire from one side to the other. So what do I want to look for? Well, number one, we want to make sure that there's nothing keeping this rail from extending. And mainly, we're making sure that the lock can come out and still interact with the strike. So no zip ties, no jamming things in here, nothing like that. The other thing we want to look for is that there is a closer. In the event of a fire, we want that door to always close. It means that the fire is going to be prevented or slowed from spreading from one side of the door to the other. So how do you tell if an opening is fire rated? We can come to the exit device. On the side here, there are labels. This one is the UL Fire label. So you look there, it should still be on the device. It's required to be. So don't take them off when you install them. Now, when we're checking if the device has the ability to dog, there is usually some sort of a hole that a hex key can go in. You want to make sure that that's not there. Just so you can see what that looks like on multiple devices, over here is where you would dog this device down. Another place to take note is both on the door as well as the frame itself. These happen to be windstorm labels, which if you're in that type of territory, you should probably look for this as well. So important to note, don't paint over these. We've had to have folks go through, scrape it, and have a whole building re-inspected because of it.  Don't block them. Don't dog them. Thanks for watching, and if you could, give us a like on the video and subscribe to the channel if you're not already.


Well thank you everyone for coming along, today's session here presenting is debunking the myths of digital governance. I'm Morgan Richings, I'm the Senior Program Manager at Acquia. Just a bit of a introduction and welcome as we run through the agenda. So today I'll be covering off what is digital governance, is digital governance actually needed, case study of who needs digital governance and what digital governance can actually do for you. So a lot about digital governance. Before we get to that, a little bit about myself. My name is Morgan Richings, as I mentioned. I have 15 years working on different digital focused roles. Currently I work for Acquia. My role as a Senior Program Manager is a mix of many different things. I think like everyone's roles these days. A bit of project management, a business analyst and also a camp manager to my clients. So where do I come from? I come from Canberra, Australia. Please don't laugh. Though I think a few of my friends in Hobart probably get the same stick that everyone else does, everyone else gives from around the world. So Canberra itself is known for the balloon spectacular. Once a year from about a week balloons ago, no actually it's known for Parliament House and the politicians that are there. So I'd like to think the balloon spectacular actually does take that focus. Here we are. So what motivates me? My family, of course. This is a picture of us up at Lake Indivine just a few hours up from Canberra. Besides that, what motivates me at work? I am passionate about the change management processes behind best practice web content management system implementations. I am weird like that. There's plenty of devs out there outside today that will talk about different technologies and things like that. I love process. Who here loves process? Hands up. Yes! Yes! My friends, my friends. The other thing I like is building better collaborative partnerships within teams. So as a vendor working with our clients, the motivation I have is to actually achieve the most valuable outputs with the resources that we collectively have available. We walk in the door with a budget, a timeline, a set of scope that needs to be achieved. So how can we actually deliver upon that and deliver upon that as much as we can. And one thing I like to talk about is going beyond on time, on budget as expected. So if you can get to that point of going beyond that, we can actually get to the really cool stuff which everyone wants to work on besides potentially just the very boring state things that project might be, actually project goals that might be there in the first place. Why am I talking about all these things? Because good digital governance helps to deliver those goals and ideas I've talked about above. So what actually is digital governance? Let's start with, before we throw the buzzword digital into it, let's talk about governance. So governance is a decision-making framework which defines the people, the processes, and the technologies used to support your organization. So we'll have jobs, we'll have things to do, and we have the technologies that ultimately deliver upon those goals that we try to achieve. So digital governance is a critical framework and process for managing a successful digital presence. So your organization's digital presence, whether that's a kiosk, whether that's an intranet, whether that's a website or multiple websites, or AR, or potentially Google assistance or whatever the hell that thing actually is, it's more than just writing good code. Good code is really, really helpful, it's really, really important, but there's more to it than just that. So a well-designed digital governance framework will minimize the number of ongoing technical debates required for managing your organization's digital presence. So part of this is why have a digital governance plan? You want to be in a situation where good code can be delivered, good efficiency can be gained, and there are some things that if you actually set a plan in place in the first place, you can avoid dealing with those issues and debates and discussions as you go throughout the actual delivery of your project or ongoing business as usual. So we're here to debunk the myths of digital governance, and the first question opposed to everyone here, is this a truth or a myth? I've completed a rock-solid governance plan document. It'll address all my digital governance issues. So hands up who thinks this is a myth? Hands up who thinks this is a truth? Come on! Someone, anyone? All right, fine. So Jeremy, why would you think it's a myth? Yep. So with that in mind, your work is never done. Your plan is a great start. Communicating that plan, seeking further information, further feedback, actually improving the effectiveness and actually testing that plan throughout the life of your project is an important essential thing to do. So yes, definitely a myth. And the point here is it is ultimately a simple plan to start off with. So everyone can tick off the scorecard. You've got one for one so far. So once again, what is digital governance? It makes clear who has the decision to make an authority in these areas. Digital strategy. What's your organization's approach to using the Internet and the World Wide Web? Why are we here? What are they intending to do? Your digital policy, what your organization must and must not do online. Ultimately, there are guidelines that guide what we do.  And having some full policy plan in the first place will help provide that guidance. And digital standards. What is the nature of your organization's digital portfolio? So think DTA and other organizations like that providing those stands for you but also what is it about your organization that is actually unique? So digital governance is most effective in larger, more distributed organizations.  We're talking about organizations that multiple cities, multiple time zones, multiple languages, multiple everything, different cultures across the world. This is where having those digital governance plans actually will help assist and guide you and how you work within your organization and the work that you do. So it's most effective in being able to actually assign ownership and confirm delegation. The priorities of why you are here and what you are doing. And defining the guideline stands as well as training resources to deliver upon that vision. So some components now, I have to admit these are actually only three of about probably 18 I could rattle off. But we'll focus here on content editorial workflow, digital governance, branding and visual assets and technical governance as we go through. This is definitely not a definitive list and I'm sure you can think of some of yourselves but we only have limited time for the session as it is. So content editorial governance, content governance establishes standards for how your organization communicates with its audience in an engaging and persuasive manner across channels. So as I said before, you might have kiosks, you might have a website, a web app, progressive web app, a name, all your different omnichannel opportunities and each of those will have their own content editorial guidelines associated, hence having a plan to actually guide that. Brand governance ensures consistency across your brand promise of your organization. Consistency is critical as it drives awareness, engagement, retention and loyalty for your customers. So technical governance. Now I have to concede that this presentation actually worked with two of my colleagues from Europe, Graham and Verna. I've stolen some of his technical slides and cut those down. So please don't come after this presentation and ask me more details about code governance, security governance, domain and platform governance because I only have a very satellite view of that. But here we are again. Truth or myth? A good digital plan is a strict set of standards or design rules to enforce co-workers and distributed teams in doing exactly what you want. Who thinks this is truth? Hands up. Who thinks this is a myth? Who doesn't know? Come on Jeremy. So why Chris, would you think this is a myth? So definitely a myth. It's kind of the big stick authority view. So this approach, if you do run with it, treats individuals as risk factors. The people that are employed do jobs and do jobs well. You're actually treating them as a problem that needs to be addressed. Looking to suppress unwanted behavior and that's going against the idea of actually building a supportive environment. They actually trust the people that you've employed, ideally vetted and there's a reason why they're here and ideally you're actually empowering your team so they can focus on delivering. So once again a digital governance plan can help support this approach. So autonomy not authority. So it doesn't have to be viewed as an enforcement of authority over developers and contributors. Good governance enables autonomy to find the best and most elegant solutions using the most appropriate tools. But I guess the key thing here is that people need to actually know what the standards are to be able to comply with them. It's not to say that you can't have healthy debates about how to approach things and potentially contrary to the guidelines itself. But say of an environment where you're actually debating the issues as opposed to individuals or coming from a situation of your own personal kind of biases and things like that. So is digital governance needed? Hands up who thinks digital governance is not needed? Who thinks it is actually needed? Cool. Hopefully, well actually I think it's pretty much consensus. So if you do see something here that you don't necessarily agree with I'm actually keen to hear your thoughts as we go through. We'll have a Q&A towards the end of the presentation anyway so feel free to take some notes and go from there. So truth or myth digital governance is easy. I'll look up digital governance frameworks on Wikipedia. Copy, paste and my job is done. Who doesn't think this is a myth? Very good. One dissenting view. I think maybe at this point in time you've kind of got the answer to these things. It is another myth that it's easy. So the key thing about this myth is that you can look at frameworks. You can look at out-of-the-box kind of and you can even buy out-of-the-box frameworks and governance plans and things like that. The key thing here though is that every organization is different. Genuinely different. The people that make that up, the processes, the goals, etc. They are different. The culture of your organization will actually influence those behaviors and how successful a pre-existing digital governance plan could be. But the key thing about this is that what you bring to your organization is sorry what you bring to a governance plan is your understanding of your organization and how it works. So I guess the general advice is if you do go or you have somebody come along and says we've got a digital governance plan for you unless they work for your organization unless they've lived and breathed that experience it's only effectively a guide as to what you should achieve. So once again one of the earlier myths talking about testing and validating those guidelines that you have in place this is kind of reinforcing that as well. Your organization is unique as much as it could be very similar to other places you've worked with before. So do we need digital governance? Everyone in the audience is saying yes and I agree. So in the end most organizations are facing challenges around budget, times, resourcing, availability, all of those good things that we all deal with on a daily basis. And that limited pool of resources I need to actually support those priorities. So where do we start? Well the goals were how are we effectively agreeing to deliver upon these things when we all have those situations where there's enough people, time, etc. And these guidelines can actually help provide that guidance in how these things can be achieved. So a clear plan for your enterprise and your organization. And at the same time a solid digital governance framework enables organizations to manage and mitigate those challenges successfully. So these are some typical digital governance challenges that we've identified and I guess our organization deals with on a fairly regular basis. Broken down by organizational delivery and brand challenges. I'll give you guys a couple of seconds to read through those. One, two, three, four, eight and ten. Of those described up there, who would have only hit maybe one or two of those hands up? All right, let's go three, only about three or four of these issues. Let's step a little bit higher. Maybe who's probably hit around about 80% of those issues in your organization or 100% of those issues and I think everyone's got their hands up as it is. So these are challenges which everyone has to deal with and I guess that's where I talked about every organization is unique. These challenges in themselves are not unique. If they're not unique, if they're understood, if people are dealing with these then ideally there are some form of governance or way to actually manage these things on an ongoing basis. If you identify the problem you can discuss it, you can try to identify it, you can try and find ways to change that within your organization or even within your team as an opportunity. So talked about the challenges but some of the digital governance objectives that we're trying to achieve. So established clear roles and responsibility, definition of purpose, digital presence. What is that minimum viable product you're trying to achieve? What is the goal that you're trying to go for? The desired capabilities. Determining where flexibility is necessary and where it should be removed. So giving people the opportunity to do things but at the same time flexibility itself and customization can become a problem. Enabling shared ownership and coordination. Enabling efficient evaluation of priorities and continually connect execution, strategy, vision and goals. Two I want to pull out though here is these. Establishing clear roles and responsibilities. Enabling shared ownership and coordination. Can you both establish clear roles and responsibility if it's a shared ownership of that? Can you? That's a question I guess I'm putting out to the audience here. Who actually believes that you can have both a shared responsibility but clear roles and responsibilities? Cool. And I'll pick on Jeremy again. How would you achieve that in that sense? I mean do you see the challenge I guess I'm alluding to in that? So I guess responsibility is a sign but at the same time there's a shared kind of ownership and delivery, a team-based approach to actually achieve that. Is it kind of? Yeah. Okay. Cool. I struggle with this one myself. So it's something that I naturally gravitate towards. Who's responsible for this? Is it Jeremy? Is it who is that person? But ultimately it's not a group of individuals. It ultimately is a team in itself. And so there needs to be that support and the governance around that. So it's something I struggle with myself on a regular basis. But just wanted to call that one out as we as we went through. So once again digital framework outputs, things that you were actually producing as part of a digital governance plan. A charter, defining customer experiences goals and how the platform supports those goals. Establishing the governance around teams, data management, processes, risk management. And once again the concept here is that as you're establishing these things you're constantly reviewing them, testing them, validating them and revising them as required throughout that time. Now this is the really exciting part. Well I get really excited about this. Who needs digital governance or ultimately what can actually go wrong without digital governance? So I guess it's some airing of dirty laundry, which everyone, I know I certainly enjoy hearing these things in these presentations. So truth or myth, governance is a lot of people talking. We only ever get in the way and slow me down from doing real work. I think you can all guess it's a myth or I'm going to say it's a myth. Hands up who's come across people with this kind of viewpoint around governance or other kind of I guess planning practices and things like that. Cool. And what I guess when you're in that situation and enthusiastically put your hand up. So we'll go to you sir. How do you deal with that yourself? How do you respond to that situation or that suggestion? Yeah. And so I guess the myth is as long as lines I don't need digital governance. And the concept there is yes. It's not that the idea behind it is actually have resilience to handle stresses or eventually accumulate in the absence of effective decision making processes a bit wordy. But in the end I guess the when things are going well, things are going well. There's no problems. You can do it your own way and there's no issues and there's no hazards. But in the end what I guess I see is digital governance, the benefit around that is building that resilience. So when you do hit situations that aren't expected, there are problems, there are issues. How will that be dealt with? And you know we can all live in hope and we can all live in optimism. But in the end these things will come up. But I guess along the lines of what you described, if you kind of I guess it's viewed as a set of rules and regulations and kind of that authoritative thing that we talked about before, it can I guess put people off. One thing I don't really talk about directly in this presentation but it's around I guess the subtlety of trying to actually inject digital governance into your organization. I think that's kind of what you're touching on as well which I don't address here but I'm keen to have a chat with anyone after this presentation about that point as well. So say the scene, what could possibly go wrong? So this is I guess the background as to a potential project which I may or may not have worked on or was aware of. And so large multinational company consulting multiple, multiple, multiple websites across multiple regions, multiple languages, multiple everything on a single web platform using the Aqueous site cloud factory platform. What's a platform there? So what was the circumstances? A three-month project, Intel team with multiple vendors involved the design, website build, testing everything, progressive timelines for go live type but who's worked on a project like this before? Yeah yeah they're always fun aren't they? Define scope versus agile delivery, no one no one cares about digital governance thinking your concepts let's just make it happen. And at the same time why not let's do digital transformation of the internal business to achieve even greater things and somehow those efficiencies are going to make everything work great. So what did go wrong? I think you guys probably guessed all these prelocation of funds, time overrun, lots of conflict, inability to make decisions, bad focus and deliverables being done that simply made no sense. So what are they calling out some of the major issues and before I get hypnotized and stop we're going to move on from this but effectively the work may be perpetually in progress. So one kind of key example of the issues were happening was we had a visual design process that was allowed to continue whilst previous sprints remain open with show stopping issues. The catchcry was we can't stop to discuss our problems because we have a tight deadline which makes absolutely no sense but it was very important to not talk about these things. So no approvals meant no work was ever actually completed. Sprints kept going but problems kept accumulating. Project management had no idea what the hell was going on because there was no reflection back as to what was going on or visibility of that. The executive had absolutely no idea what was going on and then in turn because of the multiple vendor relationships the next vendor in line to start on ex-state simply couldn't be briefed in to actually start their work. So things grinded to an absolute halt. So lessons learned from this were introducing a process be ready to compromise and face with new challenges be agile the dream that is sold but at the same time regularly evaluate the impact of those compromises. If you are going to compromise in a process you should factor in stopping to reevaluate that but the key thing here is if you don't actually stop if you don't actually evaluate these things this becomes a new normal. So you think about I guess if all of a sudden it's all very very stressful you've decided to compromise in a particular approach and run with that if that isn't being I guess made visible and available to your management your colleagues etc you've effectively created the new de facto process. So if there's a process to find or one undefined you've actually created it by doing what you're doing. The problem is you simply have no support from your organization so you are effectively going alone and nobody wants that. Another issue multiple partners with competing approaches. So once again multiple vendors involved in this project the concept was the client had brought in the experts so let's lead them to do what they do best what could possibly go wrong. Misalignment between expectations of every partner everyone had different viewers to what was to be achieved how it could be done what should be done who was doing what was part of the problem lots of rework lots of unplanned meetings and lost efficiency budget burned. So lessons learned or things that should have been done having a clear responsibility of roles and roles the roles and responsibilities between you and your partners. You've got these partners so why not actually involve those partners in developing your frameworks critiquing your frameworks if you've got a wonderful plan in place don't simply wake them over the head with us as they walk in the door ask them about it collaborate with them help them to review help them to actually help them to help you improve upon that base based on their experience and their their understanding and ultimately working together to align those competing visions to achieve a broader benefit to the overall program and work that you're doing. So the next kind of major area that to call out was who owns a scope and what actually is that scope. So part of the problem once again with this wonderful project was we're running an agile delivery process and ultimately you need a prioritized backlog of work to be done you have a product owner they're meant to be guiding and actually and actually delivering helping to live that vision for the project itself. The problem was that this was this backlog never actually stayed still constant reprioritization depending on which executive sponsor rocked up and had a look at the project at the time. So you start to engage the partners are starting to be engaged by the the project itself they'd start their work then all of a sudden in an agile things would shift because this particular executive has walked in the door and that priority is now picked up. Who's worked on that project anyone anyone everyone who hasn't worked on that project I think probably all have. So it was the impact there was a vision I mean that was the good thing there was a vision for the project but there simply was no consensus in being able to actually deliver upon and translate those priorities and what was the most valuable thing we worked on. Usual story budget time burnt as things were changed again and again and again. So one point I keep saying I think if anyone has ever talked to me about talking talk to me about agile being only one product owner is an essential thing. By having that product owner jumping to the whims of multiple different stakeholders there weren't really one product owner they'd effectively remove their responsibility and pass it back up to multiple managers fighting over that responsibility. In the end I think the problem was the classic one of the product owner wasn't delegated that authority the reason why they were flipping and flopping back and forth was because they simply didn't have the real authority to actually deliver upon the vision that the organization had set forth. At the same time a program roadmap that actually underpins that is a great guideline for that product owner and their executive by having that roadmap in place they can all point at that and they can all look at that. And when someone comes across and says I want to spend my time I think you should really put the the headshot of the CEO on the front page of the website. You can look at that roadmap and you can say where is on the roadmap that's an important thing is this purely vanity project for that for that CEO yes it probably is well hey let's not do that that doesn't make any sense. So ultimately where did this project get to? It was a reset with a positive project outcome which is a nice story to have. In the end once again a lot of optimism a lot of hope but very very little digital governance and so in the end what was decided was with a lot of pain and decision-making and discussions and multiple meetings again and again the project went on hold based on the the the budget being burnt the time being wasted we were able to get to a situation where explain that making even more poor decisions based on a timeline which in the end did not need to hold wasn't going to be beneficial for anybody the partners the client the budget the stakeholders there was no benefit in that process. So at the same time went by putting on hold the outstanding issues around design scope delegation vendor relations could be resolved by giving it that space we went through the process of actually establishing that governance framework to support that decision-making processes as well as bringing all the partners into the room to actually have a conversation so that dictatorial kind of approach that was being put in place you go live established and was met at the same time civil time being established for that. So what digital governance can do for you? Digital governance is once again decision-making framework which defines the people the processes the technologies used to support a digital marketing organization provide clarity on your roles and responsibilities within your work and is most needed for when organizations are distributed and have competing priorities. What can do for your organization strategy and ownership establish roles responsibilities clear ownership and clear lines of communication develop a decision-making model so that goals can be prioritized and communicated across the enterprise itself improve corporate culture etc etc define those policies and standards standards all these things I'm talking about here hands up who thinks their organization has actually got this down pat partway there yeah and I guess the thing is that do find that digital governance is and I think it's having a brief conversation with someone from a water authority based out of Melbourne that these are things that people talk about a lot but don't don't necessarily deliver upon well one of the things is that I find that executive are less interested in gauge with working with digital governance once again that viewpoint around and that myth around it being a lot of talking with little value at the same time the issues around actually selling digital governance within organizations itself is one of the hardest possible things because you have and I guess probably every single person seeing in this room has likely an interest in digital governance has experience with and also experience poor outcomes within projects itself I guess the thing is that we can talk a lot about digital governance but without actually having that I guess implemented and working throughout your organization there's less benefit of that and so I guess the I don't necessarily cover in this presentation but once again how to actually get digital governance thinking introduced within organizations is a big struggle as it is and I guess the other thing here is that I'm keen to actually ask you guys in the audience as to what has been a strategy that's worked well within your organizations that has actually delivered upon digital governance or at least partway through that approach so hands up who has I guess talked about these things within their organization met some hesitation but has been able to actually overcome that within your organization and I guess if no one puts their hands up it means that no one has actually ever succeeded in getting anything through in this place Jeremy what have you got what have you hit a lot of time educating our clients in these sort of things which is often difficult and especially as you're changing quite regularly so yeah sometimes you're yeah put all this effort in and then you have to do that all over again but our producers and project managers are very comfortable by doing this so often that it's becoming kind of second nature so our first step is ingraining the so do you find yourself educating clients as to how to work through these types of things is that kind of yeah what the activity is yeah because often it's all new to them they they have no idea so yeah seeing as we've done it so regularly it's a lot more comfortable for us to get them into this mindset and that makes our life much easier going forward because you're avoiding a lot of the pitfalls that you yeah and so do you find I mean is agile helped in that respect or is it kind of made things harder or yeah agile is great a waterfall budget so obviously everyone would love to work agile with yeah all the money in the world the thing I was alluding to there around agile is that we do find a lot of projects start that haven't actually had the planning in place in front of them it's kind of the the extreme opposite of waterfall where people will spend you know years and years and years potentially briefing a project which in the end by the time it starts of course the requirements are so out of date irrelevant as it is but the other extreme is no thought around actually having frameworks to actually support a project going forward actually gets done and so I guess the experience that we have is that that education of clients when we come on on board a lot of that I guess the first couple weeks is actually trying to establish these things test and validate had these have these types of governance things been established and I guess the thing that we're always looking for is you know I can go through these slides as to I guess what the benefits are but trying to find that hook within an organization itself to actually get that motivation that interest and actually enact that change is I guess part of the goals of my role and the style of project as it is and so trying to find those angles and I guess part of the reason for us in the audience is trying to take some extra notes down myself as to how that has been achieved and I guess from a client side perspective I guess more internal team perspective hands up who is on more usually on the client side working with outside vendors cool I mean the flip side of that situation I mean hands up who I guess have had vendors come in the door to actually try and start a process have you had governance models in places has it worked well with having a vendor coming in to actually help establish those those practices within your organization how do you find that situation I guess had some hands up here if don't get a volunteer I'm going to pick someone out who looks friendly and smiley there's a friendly smiley person right there usually comes into play with us with of course the bigger clients again which comes down to again the amount of money in the pot that we can afford to spend in like part of the project management for us to sort of set all these processes up so a lot of our smaller clients this is where I hope I based a lot of our client portfolio is the smaller client and while we try and set up a lot of these parameters on a project level again depending on the size of the project of revisiting over and over again throughout the process sometimes just doesn't happen just because we're trying to get the job done we've got to just a finite amount of hours I know that goes against the agile concept but a lot of our clients here are working to a finite budget so while we try and lay out all these parameters and work out who's doing what again like everything that you've stated previously yeah we only really fulfill any of this with the larger whether it's a government department or larger private clients yeah yeah I mean I guess part of that is what we try and put forward and we kind of move to Q&A so I guess if you haven't got any questions feel free to put your hands up in given there but on that point I guess the having actually having checkpoints in place predefined for a project even before you start I find is being really essential because when things are going well you know everyone's happy just to not really worry about these things but at the same time it's quite easy to dilute yourself and thinking that everything is going well until a week before launch then oh my gosh what's happened everything's falling to pieces so actually establishing those kind of checkpoints throughout the project itself to kind of reassess those plans yeah yeah of course of course yeah yeah if you can't if you can't actually even find your product only because they're on three thousand other different things at once they should sit down even talk to you because there are they are a three person band and yeah it's it's quite difficult so like a lot of these seminars being great just listening to to the great talks like someone yourself is giving but again being such a small business we have a lot of hats to wear in our organization and so where a lot of the large businesses that have been giving these seminars have individual operators within the company that can focus on these areas sometimes we're we're running around doing so many different things that again things get left a little bit sometimes in a project where we're trying to cover off another areas of the project so have you solved that problem yet on a on a pro yeah i'm not constantly weekly basis yeah yeah so any other questions otherwise i'll start posing questions back to the audience jeremy you had a question actually actually sorry jeremy spoke enough uh sorry you had a question question down the back there have fun to running around i think sorry question down this way or is that more of a scratch to the face we can we go back to jeremy as it is sorry oh come on jeremy yeah i just sort of maybe this is more of a question and answer is something that we're going through at the moment is we're putting together uh full project methodology so um from uh pitch through to proposal through to every step and we also have sort of managed services so it's sort of even offboarding that project into the usual um and as part of that we've kind of just did some really deep brainstorming sessions to try and come up with every thing we're possibly going to need to address and we've kind of made our own uh handbook on this idea with the project so in sort of your case you're wearing many hats um and sort of have to think about sort of lots of things if you're constantly be able to uh maybe once a week look in this booklet and go we're at this phase of the project or at this week i should be sort of talking about these things and sort of have you have you had a chance to test that out i mean you mentioned is that that's a recent thing as such that methodology approach yeah we've kind of just done a few chapters so far okay so kind of really the start and the end so we're currently working our way through the middle but it's been really successful with um making sure all of our projects start off consistently these days and we've got all of our requirements and we don't get halfway through and you're going oh we're kind of missing this important thing which we just asked the question at the start we would have had that and so and i guess my my natural version is uh to methodology not necessarily to the methodologies but i guess the the the volume actually is and i guess time spent against that because i guess thinking agile from a methodology perspective that these things need to evolve as well and i guess the fact that's a newer thing i'll be keen to ask you i guess in six months time as to how that actually is progressing and how much change has actually been put back into that as it is um because i think the part of the old kind of project management concept PMO concept was define the process that's the process do the process do that and everything will be perfect um and the reality is uh when you hit the ground running um that's not necessarily going to be the case we talked about the compromises that you need to make um at the same time be able to communicate those back up so i guess it's being able to have that methodology but also keeping that conversation open to critique as such so and you guys are great so i'm sure they keep doing that as well so yeah you're never going to solve all the problems um and i guess the key is just to make sure that you're not missing stuff which and especially when you're sort of onboarding new staff project managers you're able to put them you know this is how we do things and they're starting off in the right place with a really good knowledge of how to deal with projects cool thank you any other questions chris um my question is just uh briefly about um governance um we sort of uh i suppose when you're do you ever see a situation where you should compromise on governance in any way so uh i've worked in uh teams where often you're under staffed and so forth and often governance is switching very very quickly it's almost like once you're set in one team you're you're about to deliver on a project and then it's a new manager and so forth with a whole new set of goals and objectives and so forth and often it feels that i kind of feel that if you want to um ship a project before moving on to a new set of goals i suppose uh you kind of have to compromise on some of the particulars when it comes to a strategy or something like this so um do you have any experience there in terms of when to compromise and uh and when to go back to the plan well i guess it's it's compromised for the right reasons is the usual thing it's it's have that um actually have that conversation um about why you are compromising and what the benefit actually is um i mean talked a little bit earlier about the whole defacto process being established if you don't even talk about it like you can't escape that reality it's just you know actually talking about it um so in the end um in the end uh yes that compromise can make sense but do it in a visible fashion do it in a way that um do it in a way that actually does um i guess start it test it and make sure it works um is the key thing around that so hopefully that helps do it for the right reasons not the wrong reasons um and have you had an experience of that i suppose working um well um i guess uh i uh i have my own natural version to um i said methodologies are stuck in stone um and i guess the probably the best examples are that um i may or may not actually um adhere to all parts of our own methodologies within our projects but when i do that um i've got to have a really really good reason um to be doing that um ideally communicating that reason um but also being responsible for making that decision so yes in the end you are if you think that you have a better way of doing something you're taking on that responsibility yourself so you're going to know you're doing it right you've got to make sure you uh i guess if you're going to fail with that fail very quickly so you can revert back um but you're ultimately taking responsibility for that action itself if you can't convince of course your superiors and things like that so i guess that's the the dangerous part of it um but at the same time you are closest to the ground so you're likely going to be able to experience um you have that experience you have that knowledge and you can make that decision possibly more i guess more accurately than someone else a little bit further up so yeah um yes a little bit dangerous though a little bit dangerous so and i think we're actually at time so thank you very much


What's going on everyone? Sam here with late in sports cards ripping 21 22 pinny contenders optic basketball hobby 20 box full case break number 11 tiered random team style there's a look again at your random results as always you can find these on the website under the results tab as well as the link that's in chat so good luck here everybody let's do it full 20 box case contenders optic basketball there it is like one and you gave Blake once how do you hurt your hand you baby he just looked at he's like what and I had to explain the entire thing you don't have to act like a three-year-old I know you basically are one but you don't have to act like one yeah that's pathetic what is that it's all a fever dream it's a fever dream yeah yeah so that is you're really in a coma right now none of this exists you can hear me get out of here man good luck here guys uh to uniformity Evan Mobley and blue ice to 75 of Darius Garland Evan Mobley for the caps base red colin sexton silver donovan Mitchell and first auto Jalen Suggs silver rookie auto going to the magic there you go michael m congrats michael suzy nice one there toss the empty box over my left shoulder for good luck is that you mike harry there you go buddy legendary contenders joe dumars and isiah thomas we've got hoop dreams franz Wagner on the red ice going to the magic hey stay man lillard's 75th anniversary wish it was me uh orange trey murphy 41 of 49 going to the pelicans and blue ozman garuba 33 out of 35 the goofy garuber congrats on that rockets this one's about reference john and cominga hoop dreams and sweet shot trey young not numbered red ice the silver carousel overt uh red luka for the maps and arvita saponis that's going to the blazers 70 out of 149 legendary contenders he was sleeping and you woke him up good there's anything to wake up to his sweet shots dude that should be your alarm vaughn in the morning just me on repeat sweet shots sweet shot now he hasn't gotten it yet i know vaughn you're you're i'm sorry we may never see vaughn again after that and rightfully so me and vaughn will still be friends with you nope shake ill just alexander uniformity understandable too hoop dreams germire robinson erl red ice these col anthony red oh printing plates that's gonna be joel m bead going to the sixers mike s congrats man one of one printing plate this one's sick legendary contenders dino rajda or rod rajda rajah 17 of 25 on the orange for the c's i always got i can never pronounce his name right dino rajah rajah no it's not rajda patrol lmb rajah thank you pronounce rajah summary i never can get his name down i just asked one of those things man john the kaminga uniformity and trey hymn to 75 i would be scared more than excited vaughn kaminga on the silver red carl anthony towns up to here and cam thomas going to the next nice one there that is nine of 35 on the blue auto congrats brooklyn bennell on the tier two hit yeah it was pathetic super star is lamella ball red ice flan the numbers game jason tahino not numbered for the celtics please stop watching that game after the first quarter that wasn't worth it anymore no red ben simmins black velocity og anonabee case hit that's going to the raptors james c and jaden springer base rookie auto for the sixers it's yourself now i want you to hear it back and be like wow that's really bad no dirkina whiskey jason kid legendary tandems red ice jaylen green on the color match uniformity base silver miles bridges red lamella ball and keon johnson going to the blazers rookie silver autograph another spot gone in um divisional it's not pikachu uh how you doing man too i think he said something in french i can't there's paul george playing the numbers game and red ice there grows for the volts silver roody go bair silver zack levine and auto pervert jones going to the pelicans nice one there new orleans mark f where that's mark playing the numbers game kairi erving red ice john and kaminga hoop dreams mellow red silver quintan grimes and isael everett's going to the pistons base rookie auto that's detroit motor city lebron and anthony davis pick and roll not numbered for the lakers red ice jaylen brown some barns pascal siakam orange james arden it's uh 49 and nice one here going to hang why how about a jaylen green 66 of 75 boom let's go baby congrats on that buddy there you go hang heck yeah dude very nice we got that magged yes optic does have gold vinyls another 10 to go yeah theoretically the entire 20 boxer would how much do we have it can you check the website how much it is for personal there's optic yeah uh 380 box yeah 380 times 20 so yeah like 7500 the entire for the entire thing christ warte nice one there and uniformity stef curry red ice not for sale this is a group break clay thompson uh blue tiries helleburton that is 299 and legendary contenders tim hardaway that is to 149 going to the heat nice one there miami mark f with the heat stop jay zack levine de mar de rosen pick and roll red ice playing the numbers game tiries helleburton jaylen brown to 99 that's nasty this going to michael h 16 out of 35 larry legend larry bird on card throwback auto congrats buddy nice one there larry me bird bc what up we'll take that very nice i was gonna say i knew fawn would like that one that is pretty cool yeah that set of throwback autos they have man is unbelievable but the checklist is unreal we've pulled curry kg luca barkley bird there's a couple other guys too on there which is just makes it nasty playing the numbers game rj bear red ice yannis yeah they're so they did such a great job with those another printing plate xyre williams rookie it's gonna be of fred van vleet going to the raptors nice one there toronto that's going to james c what up joshua uh we ripped some star wars earlier sanatra we have it in stock for personals latent sports cards dot com and erin wiggins rookie auto for the thunder they can roll trey young jaylon johnson and sweet shots four of 75 nickley yokech finally dude went like a whole case without one marvin bagley for the pistons silver jimmy butler and josh christopher not numbered for the rockets this is dairies uh garland evan mobley sweet shot gold one of ten zack levine on the gold sweet shot nice one there what's up mark isaiah thomas silver bagnonovic red erik gordon it does never end vaughn trey man rookie auto for the thunder it's disgusting 21 22 panini contenders optic basketball brandon boston's year red ice playing the numbers game is jason tatum yeah 24 7365 og anonabee gary harris silver desmond vane on the second year for nil contenders for the grizzlies 19 of 99 nice one there memphis going to regina congrats regina gina ain't stopping till i'm dropping you know ain't no stopping obi toppen as she got some 2020 products coming up too trey young right there sweet shots joel mv red ice not numbered actually injuries stop obi fair fair josh giddy there's a blue julius randall to 99 the turkish tim duncan out from shengun for the rockets nice one there yeah shack autos are in here relatively uh not i don't know if they're in this but shack's got autos in certain products i'm trying mark zion coming up right here i like shengun a lot too well sweet shots lebron james we're on a roll of these right now you're on a roll zack levine red ice go into the bowls oh my god donnie even donnie shaking his head that takes a lot right there pascal siacom there's an rj barrett 225 for the nicks jaden springer red auto 18 of 99 for the sixers like butter you're on a roll that's right jonathan jonathan knows the vibes we're taking jonathan over the sweet shots dark side man yeah hypnotizing so jon don't look into the light jon go away from the light it's sam run ant-man anthony edwards and red ice alphan shengun nice one there they really should shade rj berry it's kind of garbage actually silver chris middleton silver ben Simmons and jared butler rookie auto going to the jazz not numbered jb last box of the break good luck y'all come on baby one time we need one i think you're safe bones island at nick only okay that's a big no what the next yeah yeah probably not french garbage red ice jonathan kaminga i don't watch the next but i also know if you don't improve in three years when you average the exact same stats you're not that good sorry you're paying a hundred million dollars to a third on your team malcolm brogdon red there's a blue daemon lillard wow that's nasty going to banel how about a dirt on the throwback auto 3 of 35 let's go man dirt no whiskey that's awesome dude let's go man congrats on that to ben going to ben what a last car to the break man so nasty on car dirk full sig we'll get that magged i'll do it for the break guys do a quick recap here we had autos jared butler jazz jaden springer sixes alfred shangoon rockets desmond being grizzly's treyman thunder josh christopher rockets erin wiggins thunder tim hardaway heat azalea livers pistons herbert jones pelicans keon johnson blazers jaden springer sixers cam thomas nets uh dino raja for the celtics arvita sabonis um trail blazers usman garuba rockets jalen suggs for the magic uh joellen bead printing fleet we had a jalen green 66 to 75 for the rockets larry bird uh 16 of 35 dirk no whiskey three of 35 for the mabs i'll do it for the break guys thanks again for the next up 10 bucks tuesday


Analysis of the two slit experiment, where you put things through two slits, they arrive on the detector one by one, and then only over time, doing that lots of times you get an interference pattern, is an excellent way to talk about the core conceptual changes that happen when quantum mechanics arrive in its final, modern form. But it's not actually the experiment that quantum mechanics was invented to explain. Quantum mechanics was invented to solve a whole bunch of problems that had been growing over the latter half of the 19th century. It doesn't even explain the name quantum mechanics, why is it called quantum? Now, the history of quantum mechanics is connected with the odd properties of light, and the way light interacts with matter. So quantum mechanics started with the idea of photons. In 1807, Young publishes double slit experiment for light. But it wasn't until about 1818, where Poisson's spot had been observed, that people really believed that light was indeed a wave. But it was nearly 50 years later that Max will combine the equations for electricity and magnetism together, and discover that there was a possibility of an electromagnetic wave that would propagate. And he also realized that that wave would propagate the speed of light, and made the large jump that maybe light was indeed an electromagnetic wave. And if you understand that light is an electromagnetic wave, then you understand how much energy it carries, you understand how it interacts with charged particles. And over the following decades, people started to realize that basically all matter was made of charged particles. At a microscopic level, you had a nucleus in the middle, and then a cloud of electrons around the outside, which people still sort of visualized as particles, because the wave theory of matter hadn't been invented at that stage. And so if you understand electromagnetism, and you understand that matter is made of charged particles moving in particular ways, then basically you can figure out exactly how they interact and exactly what should happen. In the late 1800s it was certainly felt that people were really closing in on the truth of the matter. They were figuring out the fundamental physics, the fundamental laws of the universe, and it was all coming together. They decided to work out a few details. Now unfortunately, some of those supposedly small details were starting to cause some really big problems. Now historically the first of those details arose when people tried to marry their understanding of light as an electromagnetic wave with the other great success of physics, which was thermodynamics. Thermodynamics was the physics behind the industrial revolution. It told us how energy could be transformed between different forms, and how we could manage temperature to build engines and machines that would eventually let us use so much more energy than we could produce with our own hands. And this is effectively what transformed technology for humans.