Am I on? Good. Thank you very much for coming. Nice to see that there. Thank you, Descar. That's on. Thank you, Descar. Ah, so go in there. So, I'm happy to see that Commodore 64 is still a topic or still raises some interest. It definitely does for me. A few words about me in daily work. I'm a Linux kernel hacker specialized on embedded systems and doing lots of low level stuff. And I still prefer limited machines. If people come to me and saying, hey, have you heard about this new arm quad core with super duper GPU graphics powers? That's not what amazes me. Yeah, well. But with limited machines getting something done, that's what raises my interest.  I'm hacking the Commodore 64 since 1988. I just realized that's 23 years. 23 is always a nice number. And I've been mainly interested in the demo scene, which was back then very, very high. And laid the foundations to the demo scene we know today, even if it's PC or whatever. And yeah, it is a passion. I don't know if Zen is the right word, so I put a question mark behind it. But searching enlightenment via excessive practice is not an understatement. I really did this a lot. And I learned a lot. It is part of my history. So it made me who I am today. And I'm not so active like I used to be, but I have still a lot of interest and I have still a lot of ideas left. What I'm going to show the demo is, of course, not my personal work. That would be too much. It is a group effort. I mainly work with some close friends of mine, also located in Germany, and a group of people which are in Hungary. And I really have to thank them because it's always a great collaboration. I think we collaborate now for more than seven years. And it's always great fun working together. And I really have to thank them a lot. Also, I want to mention that I want this talk to be seen as a case study. This is one example, I think an interesting example. But it doesn't mean that this demo is the best C64 demo of all times. I think it's a good one, though. We're not the absolute gods of C64 coding. And there are other people doing great stuff at the moment. This is one case study. And it's not even meant to be a glorification of the C64, although it is a very cool machine. But there are other platforms. And I'm usually easily bored by platform walls. So if you have another 8-bit machine and have a great demo, I'd be the first one to appreciate that. I also understand if people get bored by C64 demos, because I get bored with PC demos. So that's kind of fair, then, I guess. Some short facts about the Commodore 64. I don't want to talk too much about it. I think Michael has doing the last time great overviews of the Commodore 64 just for those to freshen up. We have a 6-fave i2-based CPU, which has less than 1 MHz, 3 registers, 556 opcodes, although we used some extra ones. I'll be talking about that. Few addressing modes. We have no multiplication on assembly level. Of course, no sine, cosine. So it's more like adding, shifting, stuff like that. 64 kilobytes of RAM. People are always amazed how less that is. I still think it's quite a lot. Forget about the ROM. First thing you usually do is switch it off to get all the RAM. The machine has various graphics modes. The one which is used in this demo is mostly 160 by 200 by 16, with a limitation you see there. But we have movable object called sprites. We can C64 is very famous for it. We can place it and we will use it. Yeah, sound, the famous sit. This is quite a mighty synthesizer, I think, because of the modulation filter options. We have to do load and data, so we have to take care of the disk drive. 170 kilobytes per site. Yes, you can turn the disk. Remember that part? Turn the disk. Sadly, it's connected by a serial interface which requires even handshaking. So it's very, very slow, especially if you use what is supplied from the beginning. And one other gimmick which is used in demos usually are the internal timers, which can be changed to each other. They are a bit underestimated, but they are powerful and I like them a lot. The design choices about this specific demo, it's a bit special in that case that we had the music in the beginning. Usually you have a concept and then you have a musician who follows, tries to follow the concept with some music. But this time it was around. There was a music already present and a few effects were already done. And Oswald, who's really, really, really good at designing demos, had the idea of so much potential for a demo and came up with a script. And given by this music, we wanted high-pace, really. Effect, effect, effect. Not showing too long. Yeah, what's the last point here is really meant right in your face. Here you have it. With other demos you notice, okay, there's some filling material, either to build up some tension or to have load in new data or for whatever reasons, and we wanted to avoid this or empty screens as much as possible, which was quite a lot of work. The next demo we did, we decided on a slow pace and that was so relaxed to do, but it's missing the kick, I think. So, with that bit of talk, I want to show the demo now, so everybody has seen it at least once. You see the current work state, because when we released it, it was a 90% version, then we put out 91%, what you now see is like maybe 93, although it's five years ago. But actually, we tried to finish it for this talk, but we couldn't make it. Although we have some, internally makes some good steps to finish it really somewhere. No promises, though. So, let's see. Let's hope everything works now. It's an emulator, though. Forgive me about that, but the C64 has such a strange pulse signal, it usually confuses beamers and if you want to go, say, if you use emulators. So please turn me down and the volume up. Thank you very much, glad you liked it. So, before we talk some further, I need to define some terminology, which happened to, which is established in the C64 community. These names are there for ages, although they're sometimes weird. I will probably talk, or mention the term speed code a lot, which is basically unrolled loops. Maybe you have heard that before. You just skip loops, because iterating over loops costs some extra cycles and you want to save that. I took some very primitive, simple example, load a value from a sine table indexed with an index register, add another value of that table with another register, and store that as a pixel to whatever graphics mode you just have. And instead of doing this in a loop, you just put the offset here again, sine table, sine table, and then the pixel again. Do this 1,000 times, and you have a simple plasma. Okay, you can do a bit more nifty things to make that plasma look better, but it's as simple as that, and that's why I generally don't like these plasma wavy thingies, because they are just too boring, I think. Speed code, unrolled loops. Sometimes I might mention illegal op codes. Those are in fact just undocumented op codes. Back in the days, that sounded perhaps not cool enough, so they were illegal. This is just from the fact that not all op codes were, yeah, wired to some useful or planned features, so they had some open, and didn't bother to knob that out. So they do strange things, and people have learned to understand those strange things and make use of it. So we have actually more op codes and if you really go for the ultimate thing, you should use those which are useful. In fact, I own one world record, which is only possible because of these illegal op codes. There's no way you could have done that without them, but that's too much detail, just believe me. Sometimes I might talk or slip through the term rustle time, just interpret this as cycles. It's based on that because, you know, the ruster is building up the screen and if you take some time or burn some cycles, the ruster moves, so sometimes it's called ruster time.  I don't think there's any decent demo about self-modifying code. It doesn't matter if you modify the arguments of an op code or the op code itself, it's all the same. Code is data, data is code. You do what is what you want. Sometimes tables are mixed patterns of code and data and whatnot, so we make extensive use of that. One other example is we abuse a stack. What you see in the first line is I want to get a lot of information from a table, so I could just get the first value here index, increase the index, so that will cost me six cycles.  It just costs four cycles and the stack counter will automatically move, so I can just do the next pull and I will get the same value for four cycles without taking care of incrementing something and it leaves the... We just have three registers, it leaves one free. So there are routines which completely use the stack as a table of whatever. The problem is when you have interrupts, the processor will use the stack to store data on it. So you have to copy that somewhere else and later put it back and in the end this is some kind of sliding window technique. So you have the stack as you wanted. Tell that to your computer science professor he will be very happy about that. He would also like this one. Okay. On the C64 it's pretty important sometimes that you do really certain things at a certain time. One cycle off and it won't work. So you first you have to eliminate some jitters so you know when you get something stable so you know when you are where. And this is usually done by timers, using timers. And let's now just assume DC06 I like talking in hex values. I would never do this when doing kernel code but when I do C64 I just I would never give that a define. That's DC06, that's a timer and let's assume if you read that timer you know how much jitter you have. And one thing you could do you read the timer, feed that value into a delay loop and once you run through the delay loop you have your set everything stable you know where we are. There's one thing I don't like about this approach there's a delay loop. I mean we have just 20,000 cycles per frame and I hate delaying very much. And there's one way to get rid of it. DC04 is another timer which you can imagine is rightly in front of that one and we write some values to it. You could now think okay it's counting for C what's that that's 76, okay it's probably counting 76 cycles for whatever reason. But later we see this this is setting up the interrupt vector. Low byte 04, high byte DC. Hey we've seen that, that's DC04. It's directly jumping into the IO register space it's accessing code here in the first timer register. And now I can tell you 4C is the opcode for jump. I don't care about 76 the timer is not running it's constant memory so this is the opcode for jump this is the low byte of the opcode it's zero it could be anything wherever I place the routines it's DC06. That's the timer who gives us the jitter. So it changes with every cycle it changes the jump instruction changes and when we jump to it at exactly defined times we will jump to a very very specific jitter routine so we can optimize it for that special occasion. That will terribly fragment memory but it's really fast. And this is used for doing one graphics mode where we have 100 extra interrupts per frame and it wouldn't be possible without such techniques. I love such things. Okay there are such as two sets of effects on the Commodore 64. I call them the first one table based effect and those have lots of tables and lots of speed code and the magic is in the tables and the speed code generators. If you look at the speed code itself you probably will not figure out anything because it's just shuffling data around and you see no pattern. These are more mathematically based effects for example if you saw the tunnel there or stuff like that and those are for people who like 3D effects or whatever mathematically based they are easy in that part that if they are too slow well they just look slow and you can try to make them faster. You can use some chunky molds to get them farther then you have resolutions like 80 by 50 or whatever if you use dithering you can hide that and most people also call them new school effects where new school means like 1995 and ongoing. Remember next year the Commodore 64 will turn out 30 this is quite a lot and those effects are usually in frames per second 50 would be good that would be the maximum or one frame 25 depends on the effect you can do that but some people do 10 that's not very enjoyable for the audience I think but some people are very brave in that regard. The other type of effects are Vig this is the graphics chip or register based effects they might use speed code not so much and pretty simple tables and the magic is the actual code so if you look at the code you see a lot of registers written and if you know the registers you can really get the idea of what is going on there. They mostly run in interim context to make this stable thing more easy must be cycle exact like I mentioned and this is different from the others if your code is too slow the effect is impossible because you get up a certain amount of registers in a certain time and if you fail to do that you won't create the program the chips as you want and you will just get a black screen or whatever so this is what the old school effect were famous for cycle counting okay I have to do this at that time and I have to do that at that time okay I could do this no no no I need to do that as well but it won't fit and then you start doing some magic and if you're good it fits totally different style of effects and the nice thing about the combination from the Hungarian guys and me or our group is we can do both and we can combine that we're not the only ones who can do that but that has a lot of potential if you maybe remember at the beginning there was a bump mapper it looks like a torch was shining onto something the bump mapper itself is a new school effect it needs a lot of tables not lots of speed code but it moves and the moving is an old school effect because the main all the CPU time is done to do the actual bump mapping we need a fast way to scroll and then you can use old school effects because then you can start poking in registers and confuse the poor wick chip so much that it gets totally confused and shifts the picture around and this combination between new and old school there's lots of potential still left I think I don't want to spend too much time with this one just to give you an idea what's used in these days it's mainly really only cross development I started in 1996 with cross development back then I was laughed at killing the true feeling and stuff like that but it's status quo today especially when it comes to coding but you should always pay attention to test everything you do on the real machine especially if you do graphics if you do sound otherwise you might have strange surprises with code it's a bit easier yeah of course we're using the internet they being in Hungary or one is in England and me being here interesting thing is that the whole demo was compiled using my old Pentium laptop running DOS but it was working fine since 1996 and I never had a reason to change and I think it still did a pretty good job but other than that every developer has a freedom to use what he wants so there's visual basic Java and what not involved that's the basic memory layout I tried to impose on the other people because I could impose because I was responsible for the linking so I could say I'm aiming for that and the lowest things are given by the hardware architecture the zero page is special because you can access this memory very fast this is the stack and then I decided okay we need a loader to get data from the disk it needs some buffers and we have a deep packer which is relocatable so I can move it around if I want some temporary stuff the music which needs to be memory present all the time this is here you can do what you want with the parts and now let's take the recursive mapper which is also in the beginning as an example so far so good it uses the zero page a bit of a stack for variables here are some temporary tables and here's the init code table speed codes new school effects lots of speed code 500 byte left that can be quite a lot so you think it's all fine but then oh no there's this special table which without which the effect can't work sadly that is terribly fragmented but I'm tempted to show you why it won't work okay I I'll be brave and UV2 the nice thing with the way I do it is that I compile the demo as a whole but also part separately which makes testing a lot easier no no music off is okay we don't need that okay this is the part can you read that in the back good just show some code speed code it shuffles memory around gets it from some table, puts it somewhere this is in direction so it's more or less a pointer some 9.9 I don't know so try to make a pattern out of that let's look at the pointers oh okay that was not good yeah the font is too large but if I make it smaller you won't see much okay will you believe me it points to roughly the same memory if we go to that memory we see another speed code which shuffles memory around again this is in fact the screen memory so here the screen gets updated and you see here it gets again values from some tables and the tables always the high byte and the low byte are always in the range 0 to 0f and this is one of the key tricks of that effect because it's recursive it's important that the index to the table can be used as an immediate value or as an address here so this value can be just again it's the speed code with lots of self-modification we modify the speed code so we need that we have to directly put this value here or let's say here and here or we need it in a register to work with it further scary huh and all I wanted if you're happy that way this is what I wanted to mention why those tables have to be exactly there and you can't move them so you have to work around it so the key thing to remember is you can make plans but demo part coders will always come across and think of something else you have to deal with it there's no way around it so there is a table destroying my loader code so I have to back it up somewhere before so I have to do a lot of relocation and this is really really ugly dirty work but there's no way around it talking about loading I don't want to meet the Commodore engineers who designed that or actually for that and it was mainly management who spoiled that because they wanted some backward compatibility so the engineers couldn't use all the hardware features which could have made loading fast it is really awfully slow and you cannot use the routines Commodore delivered at all so demos have their own way to improve the situation and one way to do this is well usually you have a clock and a data line so you have one bit transfer and we use the clock line as a data line too so we have a two bit transfer that means we have to use the attention line which is just for basic signaling more or less like clock or handshaking line which is a bit dirty but works reasonably well the drawback is that you can have only one drive attached to your Commodore 64 if you have two drive attached they will be totally confused but with one drive it works fine but you have to design it all for yourself you need custom code in the drive because Commodore drives are intelligent they have their own CPU they have their own memory and so you write code for that too to make a proper loading system there are advanced demos who use the co-processor so while the Commodore 64 is cleaning the bitmap or whatever doing some drawing the floppy drive is actually rotating some points and the rotated points are sent back or stuff like that back in the days it was very cool to do everything on your own so people did their own loaders but as you can imagine it's pretty hard so a lot of them crashed and did not work reliably but as a result we have just a few these days and these are commonly commonly used one of them is our Dreamload which has special feature you can run it from a hard disk which is available or even from the MMC cartridge that used to be a feature which was cool but it got a bit outdated people have other hardware and you don't really need to have to support the hard disk anymore so that's a bit of a pity because we could put quite some effort into it but you have as a result you have to take care of loading all yourself to design the protocol get it stable and keep in mind that your drive is not the only drive in the world it's involves mechanics so if you tune your loader for your drive it will perfectly crash on the next one because the mechanic is a bit worse it won't come up with what you programmed a rule of thumb you want good compression to minimize loading if you can avoid loading do so so what can you do to do packing, crunching, compressing whatever how you name it there are millions of compresses out there everyone has his favorite and people like to do their own most are LZ based I used the best packer around which is called ExoMizer which is really good and it's astounding how long you can a gigahertz or two gigahertz PC can take to pack 40 kilobytes it's not like minutes or hours but a few seconds and it was really designed to achieve the best packing results which is nice in many ways but the drawback is that sometimes the de-packing is too slow so we pimped it a little bit with some parameters and that worked out pretty well and I rewrote the de-packer so it's larger of course there has to be a trade-off but it's faster but if you want to have decent packing system I don't think you will you can take something off the shelf and invest a bit of time to that one as well but that worked quite good the other rule of thumb is you know your data best use your a priori knowledge you know the symmetries of your tables you know where delta packing might be sufficient and try to not rely on a generic compression algorithm if you know something which could be helpful use that this is a lot of work but if you want to save loading and want to keep a high pace do that and then we need to put it all together because you can imagine if you work on a demo on a part you work only on that part you want to get it going and once it's done it does roughly what you want you consider yourself done and then you want to throw seven or eight of them together that won't work that way yeah well I won't read it all this is really really the dirt work everybody I know hates it it's usually not regarded in the scene it's got given and still it's the number one reason why demos fail come not into existence stop at 64 or 90% versions doing this right, removing all the glitches doing some transitions but there's no way around it you have to go through it to get the proper flow and here's where also where you have the trickiest part to keep all in 64 kilobytes of memory I have this part running I want the next part loading oh I can shut off maybe half of the part sometimes and then load that already and this is tricky and totally different from demo to demo I don't think you can use a generic framework on that not with C64 demo effects as I tried to show you with the memory layout before this is too special there will always be one special case where all your framework won't work so it's mostly hand work there's only in this demo there's three global things more to say load from this and call the music and everything else has to be handled individually and even after being done at 90% I don't see more to generalize synchronization it's usually a good idea to do that with music people like that me included if things are timed to music if music switches and you have an effect something switches on the screen as well because music is played once per frame once the raster beam runs through you just use a simple counter that there's no magic you have to keep in mind with syncing that loading drives drives are mechanics loading times can be different from the system you use yourself so always use some tolerance most coders have a really really bad floppy drive they call it killer drive or bad drive or whatever the worst drive they could find and they test their demos on them and once it passes on that bad drive you can consider yourself done and another nice thing music players do use instruments internally you have a little bit of noise and you have a drum, something like this and they have numbers and you can peek into the music player find out which memory location contains the instrument number and okay then you find out instrument 6 is a drum and then you can check in your code is currently a drum used then I don't know light up the effect or change the color scheme or whatever this is also a nice way to spice up your demo okay now I'd like to show the demo again with some minor comments I think we can leave the music off so because I will be interrupting anyway just to point out some more specials now I gladly killed my terminal let's see if I get some one thing I don't know if you've not heard that before here this is the so called border and this is the visible area I mention this because soon there will be an old school effect which is crossing the borders it used to be a main effect back in the days but these days you can just add it somewhere to give a bit of oh that was nice feeling oh they took care nice detail here we went through the border with the graph it's nothing breathtaking anymore but it's some extra effort which is nice to put once in a while okay here as I mentioned the main effect is a new school effect but we are able now the old school effect to get this moving and I don't think this has been copied so far one thing I'd like to mention here is that we also decided to entertain the audience a bit with additional graphics that used to be I had to change my way of thinking because I always wanted to put all the energy into the effect itself but Oswald rightfully convinced me that we need to add some elements onto it because displaying this graphics because it takes 10 to 12 percent of CPU time we need to use sprites for that and those need to be multiplexed so here are three or four we just have eight sprites so usually they would be ending here so we have to reuse them which requires additional code displaying sprites not all that 10 percent might not be too noticeable it gives a little extra feeling to the demo part this one is special because it's what we call a loader part I think 20 percent of the time is used to load the next part into memory actually it was just meant we need something to do or let's do a plasma Oswald tried hard to make a high resolution one and he succeeded in that we made a very good move with moving the girl into the middle because you have a full screen like impression although just one third roughly one third of the screen are used calculated by the plasma so what was intended to be a loader part I think if everyone most people on the net if they want to put up a screenshot of our demo they use that it started to be a loader part pretty amazing but the sad thing is we know how fast it actually could run if you don't have the loading in the background so that makes us a little bit sad luckily you don't know so you can enjoy it as you see it here the rubber cube originally you think cubes are easy you just draw lines but now the lines try to shape hey that needs to be a lot of mathematics involved the key thing here is you draw the cube into buffers so you have a set of buffers and pick from older buffers what you actually display is a mix of current and older buffers so I wouldn't call that cheating but I don't know if some people on PC would do but it gives a very good rubber cube yeah well the Hungarian guys are really good at math and although this is Oswald's part and he is very good at this speedcode table thingy and I know there are some lookup tables involved using shadow and I rewrote the part the speedcode generator was taking 3.5 seconds and that was too long so I optimized the generator I'm quite sure he wouldn't recognize it anymore so it just took 1.5 seconds but what the part actually does I still haven't figured out ok this is the 7-color tristor this is so to say an old school effect because on every line here I set up the amount of registers to display the line itself and I do this 192 times and then I'm done which is pretty nice because it leaves all the upper and lower bottle again for loading and while this part is displayed we load the next two parts and keep them in memory for later it's also technically not quite interesting because I don't think any internal counter of the graphics ship is the way as it was intended so it's totally confused there's just one problem with the part have you noticed it's fucking ugly we ran out of time to add a proper object meanwhile thanks Joe I have a proper object which is this is generated from some I don't know and now we got a hand drawn object and the movement is very very bad I mean it looks like it should be like twisting it should be a twister but the final version will definitely improve on that because this was one of the main blockers for the final version this is what we call coder colors every graphician would run away crying we're seeing that colors but well I'm a coder for a reason the graphics are all hand pixel by the way I think they had a photograph as a reference but it was not not wired as we say it was really hand pixel and I think they given the constraints they did a really really good job yeah and this I don't know it's a free directional tunnel the final version will be able you will be able to control it with your joystick to see it's real time the creator boobies has a PhD in math I think you need that no idea I fell off my chair when I saw this was a first one think about it we have still 985 kilohertz and we do a free rotating tunnel there well beats me also this is this is a filler we have to get rid of that in the final version that's just too boring I don't like the graphics too much either yeah and then we have the tunnel we have to admit that the calculation of the movement that's all pre-calculated but the filling the filling is done in real time and this is another part which will be greatly improved in the final version that was that oh one thing I changed it now reloads itself so once you started it you either stop it or we'll run endlessly yeah I think this was it from my side I hope you could find something interesting in that for you I hope it wasn't boring or could give you an idea and of course if you have still questions I'm eager to hear them we have 10 minutes for questions so if there are any questions please raise your hand so that an audio engineer can come to you yeah okay alright 80s we needed you now actually why wasn't this possible in the 80s I mean I've seen a lot of counter 64 and nothing goes I mean just the last scene was a bit like the game way out but everything else was just totally amazing and beyond what was being done in the 80s so what makes the difference evolution I can't probably say more than that because of course with those new school effects they were influenced by PC demos sometimes they had more computing power so they could try free directional tunnels once they had this done C64 coders tried okay let's try that on our machine so this would be one one answer to that and it takes time to really understand the machine this is what troubles me in real life I work for linux for new CPUs and once we have the basic set of drivers and everything in the mainline the processor is discontinued and you start working on the next one that's somehow stupid and a lot of things which are abused here are more or less flaws in the chips to find out that there are flaws and then it takes time to find out what you can do with these flaws and we're still it got rare but there are still once in a while somebody comes and shows something on the Commodore 64 which has not seen before after 30 years it takes time any more questions yes maybe I want to connect to this question is it possible that emulators got an impact on developing demos on the 64 because of using the development cycles is it possible I would extend this to cross development in general my first system I had was a cross development system where the assembler address was on the PC and I transferred the object code to the C64 via cables that was already a big help using emulators is another help because you can stop the machine at any point in time without any side effects there are very good freezer cartridges so you can stop the real machine but they tend to have side effects so it makes it a bit easier yes I have another question I really understand that you have to use self modifying code to show such demos is it possible to reuse code or do you write every demo from scratch can self modifying code be reused to generate every code even the self modified code has an initial state and you can reuse that but reusing in this term at least from my point of view it means if you want to use something from older demos it's copy paste and hack until it fits to the current demo I don't have any kind of library that tends to not work for my case I'm not sure about all the others but I would think it's rare okay thank you there's one question on the EISC there are actually two Finkel is asking what your favorite C64 demo is that changes over time at the moment I like very much Andrapolis from Boost Design which has a very astonishing 3D part which is real time and I like Insomnia from 64 ever pretty much and there was one Fairlight demo I just forgot doesn't matter Delroth did you find or fix any bug in the emulator while working on this demo I didn't fix any bugs but the emulators had to be fixed for that demo that happened because I'm the guy who really likes to do the register based effects and try out new things I think there are quite some but a few improvements that's always fun gives you good feeling okay one more question I have two questions do you have a macro assembler on C64 don't you use macros for speed coding for example the problem, yeah you can do that but the problem is that with speed code it has a pattern but for example the addresses to use change very much so a generic packer will have lots of problems with that code speed code so that results in large binary blobs you have to load as I said you have a priori knowledge you know how the pattern is and using these generators you save a lot of code it's really like these generators are I don't know 500 bytes, 1 kilobyte or whatever and the packets code could be 12 kilobytes or 20 so you usually don't do that and on Commodore you can have a scene manager because I am from the PC scene and we use scene managers but I don't think that I don't know actually if Commodore have enough power for that for what? scene managers I don't think so that's yeah so how do you manage the scenes like yeah we have a script written down more or less and then we work according to that script sync to the music and then it's more or less done manually there's one more question in the back so how does the demo team organize itself do you use version control or do you use IAC and how do you communicate and does everyone work on its own part in the end someone has to put it together or is it yeah is there cooperation involved it depends a bit usually we use a lot of email and IRC so far we did not use a version control system but for our next demo we will start using one it's a bit of Oswald is really a great coder he lacks a bit in terms of software development methods so for this demo the next one we introduced him to the magic of make files sorry Oswald but that was necessary so we will next introduce version control systems to him what else working on the parts sometimes you have an idea and work on that individually and then in the end show it to people and then they have comments or not you already have a script and then you have an empty spot there and then you collect ideas together and one starts and others add to it so that depends a bit on the situation it can be that really one coder is responsible for a part but it can also be a team effort or like with the bump wrapper Oswald comes to me and says okay I want to do this and I will do the bump wrapper and I need a routine from you so we start with the scrolling and then we define some interface and we throw it together and which version control system are you intending to use once again which version control system are you intending to use in the future um subversion because what do you want to explain gits to someone who just learned make files but but he's got a phd right so no no that's it no I think it's see we have windows mac linux systems and I think it's okay to use subversion as the least common denominator I will use git as for n for sure and I'm happy with it they will we have I don't want to force something on people I just want to work with them as they want and as they are used to and most people in that regard are used to subversion okay okay there's one last question here in the audience I'd like to ask another question connected to the previous one how do you organize in the sense not what tools do you use but how do you interoperate personally do you explain stuff to each other do you educate each other or is it more like a splitting task and work individually and put it all together afterwards no we're teaching and we're explaining stuff to the degree the other person wants so I am more the specialist for these register based effects and the other guys are more specialist for the table based effects but that does not mean that we don't know shit about the other part so we do know something and we do want to improve our knowledge so we really we discuss to a certain degree I did not want to know all the mathematics behind the free direction I'm just happy that it's possible to do in the 64 and but to a certain degree yeah we work as a team and explain stuff to each other we also discuss ideas do you think this is possible what would it need and how could it be done do some brainstorming together also yeah okay I'm sorry but we are running out of time so thank you Ninja for this wonderful talk


In today's video, we're pitting two of Yu-Gi-Oh's greatest rivals against each other. F**k it, it's time to ju-ju-ju-ju! What's up, guys? We're back with another epic versus battle video. In this video, we have some legendary collections. We have legendary collection Yu-Gi's World of Fan Favorite, one of my favorite products to open in general, a really awesome box. It's very expensive. This is unlimited. This is like a $200 product. So, when I decided to pin it against Yu-Gi's rival, Kaiba, I decided Kaiba would get not one, but two boxes because, ironically, this first edition box costs about $100, so two of them is $200. This unlimited Yu-Gi is $200. So, the unlimited is twice as much, but it is a much older product, so there's that. But $200 worth of Kaiba versus $200 worth of Yu-Gi in this video. Just to make things fair, because sometimes Yu-Gi cheats. And so does Kaiba. He said he was going to jump off a building. But before that, we have a giveaway. I'll be giving away these three cards. We have the Dark Magician Girl, Rush Duel. We have a Rush Duel Dark Paladin and a Rush Duel Dark Magician. All you have to do is like the video, be subscribed to the notifications. Let me know down below who will win. Yu-Gi or Kaiba. All right, let's start off with one legendary collection, Kaiba Game Board. Kaiba only has three packs inside, but there are like four secret rears in each pack. So, it's a very interesting combo here. So, these are first-ed. One way you can tell is look and see if it says first-edition on the mini packs there. That will tell you if it's first-edition. I don't know if Kaiba even got unlimited. It might have. Probably did. It's a pretty good product. But that's just one way to tell on these legendary collections. Some of them only have first-ed, some of them only have unlimited. And Yu-Gi's World, you have other signs like the little window or whatever. But here we go. We have our promos and then we have our three packs. So, all this space for this, I guess you do get the Game Board. But I mean, nobody really likes those if they were rubber, maybe? We are gonna have totals on the screen. So, we're gonna see not only who will win the battle, but how much do we lose out of our $400? $200 on each side, obviously. So, there's our promos. That's gonna be about $10 value right there. So, that adds up, but Yu-Gi's World has one as well. Here we go. Mega Pack, Ash Blossom is inside this. So, there's some crazy stuff. There's some really valuable blue-eye stuff in here as well. Like, you would think it's like a dollar card. It's like $5 because it's blue-eyes. So, that stuff can really add up. We'll do two from the back because there's two secrets at the front, two secrets at the back. Wide Dragon Head, we have Deck Devastation Virus. This was probably money for a little bit a second ago. I don't know if it is now. We have Castle of Dragon Souls. The Fusion Sage, that's a throwback card.  Eradicate, here's one that was probably big. You know, thanks to Labrador, Eradicate or Epidemic Virus was crazy. I don't know if it's still money, but I'm gonna set it to the side. We have a Shrink, not the prize card. Very cool artwork, though.  Looks like a Gomorrian guard from Star Wars. This is what the Rancor saw right before he ate the little dude. Okay, Return of the Dragon Lords, that's a good one. First edition. That's gonna be at least $5 right there. Very good for blue-eyes. Call of the Grave, all right. Very cool World Championships 2011 reprint. Right here, that's very cool. A Assault Core, also very cool. And Cards of Consonance, another blue-eyes card. Very, very solid, good stuff so far. And another reason I like these products is you do often pull quite a bit of value. Probably not $100 worth, but I mean, a decent amount of value back already on that first pack. We only have three total though, so we need to continue that to have a chance to even like get close to breaking even. Here we go. We have the V-Tiger Jet. Soul Exchange. Kyven Man, I think the Ash, Ash might actually be an Ultra in here, but I think about it, so it could be in one of these. We have Ring of Destruction, very nice. Double Summon, good print of that card. Ooh, a Ghost Ogre and Snow Rabbit. That's gonna be a couple bucks for sure. Very good. Awesome card. Got us a Sweet Revenge. I think this is one of the promos. It is, Secret Rare. For some reason, they put it as a promo here and then a secret in the set, so probably not a great one there. It's not a very good card. Terraforming, that's money. Very solid. White, sort of like, this is a great pack. This pack is really good so far, and Neuron Blast, Neutron Blast. That's not a good one either. But honestly, a very strong pack. I think Kaiba's doing well. Here's what their total is. All right, one more pack in the first one. Then there is another one in the Yu-Yi's World. I think we're gonna do Yu-Yi's World after this and then we'll finish with the other Kaiba. Here we go. Four more secrets, but still more Ash Blossom potential. When I first opened this, I've said this many times on the channel. I pulled two Ash Blossom in one game board, which back then paid for like, double your game board, which is crazy. Just those two cards. Ghost Reaper, very solid. Master with Iza Blue. We have Tyrant Burst Dragon. The Protector with Iza Blue. Come on, Kaiba. What have you got? You got Fangacridious. Can you beat Yu-Yi finally? Without jumping off a cliff, we have a Beanbuster Drake. Okay, not crazy. Enemy Controller. I think this had a little resurgent. Could be maybe a dollar, I don't know. Flute of Summoning Dragons. It's Blue Eyes, but not a very good card. And a Dragonic Tactics. That's definitely the worst one so far. Overall, not a bad game board, but definitely not the best way to end it. All right, it's time to bring in Yu-Yi. Yu-Yi, you only have one board, so you've got to go off. There are five packs in here though, but you have one chance. You've got to get way ahead so the last Kaiba game board can't catch you. Here we go. This is such a fun product to open, but it's ridiculously expensive, even unlimited.  The first edition, like four or five, it's ridiculous.  So, yeah, getting this is a very, very difficult product. Opening it up, usually not worth it. You're probably not going to pull $200 worth. Okay, but it is a fun one. It is really cool with the Silver Vory Calcos. Let's see. We have the promos there, and then our five mega packs. They look so cool though. I remember they had like a re-wave of these in like Walmart's for, it was like 2019 or 18. They're like 30 bucks. So this promo pack, I don't know the exact value. We're going to have it on the screen, but that's going to be a decent one to add. And then I don't know if it counteracts both of those Kaiba promo packs though. We have five packs here. Lot of awesome secrets, but the problem is this is like a 300 card set. So you can easily get terrible, terrible cards and not get the good ones. Dark Magician Girls in here, the Exodia sets in here, Dark Paladin I think is in here. Dark Sage I think is a money card is a common right here. So that's pretty solid looking good. I don't know if there's a pack trick. So I'm just going to go through it. Dark Sage, Black Luster Ritual. We have the Tune Cannon Soldier. I think there's definitely a back trip then if it's this early on the rare. A Royal Tribute. Okay. That's probably not the best card to get in the ultra rare slot. Okay. Arcana Knight Joker also probably not a good one. Secret Rare. Mystical Shine Ball. That feels like a pretty rough start. Gold Sark and Feral Limit. And that is a classic Yu-Gi card. It's also a classic Yu-Gi card, but Yu-Gi specifically. Immissary of the afterlife for women to play our Exodia decks. That's fun. All right. Four packs left. We definitely need to do better than that. That was not good. Kaiba might win this one in just one round like without even having to open the second one. We'll find out. I think I could have done like two or something right there. Diffusion. We've got a Charm of Shabdi. Arsenal Summoner. Level Limit Area A. Okay. It's a card. We have DD Warrior. Pretty decent. We have a... Cosmo Queen. I think it's like $2, but it is a McDonald's pack of reprint. Very cool. But unfortunately, not that great. I think this has the alternate Ardyn, Millennium Shield. And I don't know why they didn't do the Yu-Gi. It's very sad. Compulse. Very nice Secret Rare. That's going to be a few dollars. Very good. And Barfamance. That's also a cool card. But Dark Magician 9. Hmm. Interesting Game Promo. So I don't know if that's going to have a little value as a common. We are definitely losing right now. I think Yu-Gi is in big trouble without pulling something. Dark Magician Girl though. I didn't say it, but the secret out of here is insane. I think it's like crazy money. It might be like 300 bucks or something. I'd have to check for that to be sure. But it's a big one. Dark Knight Parshath. Reprint from Phantom Darkness. That's pretty cool. Magicians Unite. That's a champion pack of reprint. We have Arsenal Summoner. Area A. We have the DD Warrior again. Okay. Not the same cards, please. We have Mind Control. That's not terrible. Usable in some old formats. And Black Horn of Heaven. It's fine. And then a Reckless Greed. Also fine. Feral Imp again. So Yu-Gi is really, you know, he's shown up. This is bad. This is really not a good opening so far. The problem is, I think with Kaiba, those Blue-Eyes cards are just always so expensive. There's not as many like Dark Magician cards in here you think for Yu-Gi. It's mostly like, I mean, there were a few, but just like random stuff. Magicians Unite. We have the Creator. Cool to see that. I wonder if that's money in a common. Giant Germ. Mystic Swordsman Level 2. Good card in a Goat Format for the Warrior Deck. We have Dark Mirror Force Rare. And we have a Morphing Jar. That's a good one. Morphing Jar Ultra Rare. That's definitely solid. A few dollars right there. Really trying to catch up right now and get the lead. Let's see what a secret will be. Mocking the Soldier. That's bad. That's a bad one. That's under a dollar. Okay. And then the Agent of Wisdom Mercury. It's not good either. So we at least got one good Ultra, I guess. Yeah. Just just showing why Legendary Collection 3 is probably not worth opening because there are so many options. A lot of them are terrible. Last pack here. Legendary Collection. Yu-Gi's Whirl. Two from the back. We need that Dark Magician Girl. Come on. We have Magical Dimension. That'd be a huge pull. Silent Swordsman Level 3. Knight's Tidal. Invader of Darkness is in here as a common. Very nice. Detonate. Watch out, Karugos. Tomb Dark Magician Girl. Okay. We got a Dark Magician Girl. Is that a sign for the Secret Rare slot? Let's find out. Here is Ultra Rare Mind Control again. Okay. Here we go. They need something big here. They need something big to win this. Okay. Book of Moon. It's not big, but it's a good card in Magician's Circle. So honestly, I don't know if we even passed Kaiba right there. I mean, it was not good. Let's be honest. It wasn't. It wasn't good. Okay. I don't know what the score is. I'm not feeling too good about Yu-Gi right out. Kaiba is sitting pretty. If they get an Ash Blossom here, they're going to be off to the races. All right. Let's open this up real quick and get to the final bit of the opening. All right. Let's get our three packs out. Three packs. Very interesting. I don't know why they decided to go with three packs. I don't like it as much because it opens too quickly. You know, you spend 30 bucks. You want to like, or 35, whatever this was originally. You want to like have a few packs to open. All right. Another five to 10 bucks for that one, whatever it was. Three packs left. Kaiba is looking very solid right now. Can they get the Ash Blossom? Really just dominate here. Kaiba, he's standing on the edge. He said, you better not do it, Yu-Gi.  All right. We have the Monarch Storm 4th. We have Y Dragonhead, Tyrant Wing, Dragonity Legionnaire, Blue Ice Twinburst Dragon. That's solid. We have the Protector with the Eyes of Blue. We have a Chain Disappearance, Secret Rare, Beals, the Diabolic Dragons, and ABC Dragonbuster. One more. A Maiden with Eyes of Blue. That was not a great pack. That's definitely what Yu-Gi needs. Another couple of those. I personally though would love to have another good pack.  Sorry, Yu-Gi. This was an expensive opening. Here we go. We have Heavy Mech Support Platform. We have Mikazuki No Yaiba. Like people like to call it mech. Okay. That's a cool tournament pack to your reprint. We have Blue Eyes, White Dragon, the Ring of Defense. DD Crow used to be like three bucks, but then it got that other ultra reprint. So I don't know if it's even a dollar anymore, but still nice. Thunder Dragon, that's definitely good. That's like three or four bucks. Oh, Rocks and Special. What was this one? Cost down. Okay. Dragons are being maybe decent because it, you know, Blue Eyes stuff. Princess with Eyes of Blue. Priestess, I mean, and Silver's Cry is pretty decent. So that was kind of an iffy pack as well. I mean, so far the first one was way better. This could be close actually. I don't know if Yu-Gi got enough, but we'll find out.  Let's see. Will this be enough to win it? I mean, I think they may already have it. But if not, I mean, they definitely want to pull something good anyway. We have Soul Exchange. Kaipa, man. Very cool Kaipa. Mausoleum of White. Very cool. Oh, Rocks and Special. We have Lajin, the mystical genie of the lamp. Good to see the Lajin. He's a classic card. We have the Eradicator Epidemic Virus. A very good Ultra Rary. Love to see that. That's probably money. We have X-Head Canon. Here we go. We're getting into the secrets right here. If you guys have enjoyed this video, don't forget to subscribe to the channel for more content like this. Some more old-school openings and hopefully we'll have better luck in the future. X-Head Canon. Here we go. Polymerization Secret. This is money. We didn't get the ash. I think it's all Ultra, so no ash, unfortunately. Sage with Eyes of Blue. It's like a $10, or it was a $10 card. I said that last time I think it went down. It might be like six. It's still pretty decent. Couple cards left. A Neutron Blast. Okay, one more card in this opening. Here we go. The Blue Eyes Shining Dragon. Let's go. It's not the Retro Back 2. I mean, we'd be freaking out if it was, but this is still like a $4, $5 card because it is the best-looking version besides the Blue Eyes Shining from Retro Back 2. So naturally, it's got to be money, even though it's completely unplayable. I try to summon on Master Duel for weeks. Shout-out to Tomahawk Show, Dax, Search, Mato Juice, Puffins of Doom, Ernesto D'Annet, America Deuyser, Supreme Sage 21, CJ, Liu Guine 62, Yu-Gi-Oh Unboxed, and Anatai Show, Ian Mooster Jr. Bartik, Robert F., Thomas Belklane, and Changa Lange. Thank you guys for supporting the channel, and I'll see you guys in the next one. Peace.


Welcome to All Hands Update, I'm Petty Officer Brandy Wills with your headlines from around the fleet. The Navy Exchange Service Command or NEXTCOM is bringing a little home to deployed service members' holidays. They announced December 5th that they will be giving a free $10 phone card to service members who are underway or forward deployed. For a complete list of ships that will receive the phone cards, visit navy.mil. Three sailors assigned to USS Maine and USS Wyoming became the first female unrestricted line officers to qualify in submarines December 5th. The women received their dolphins during separate ceremonies at Naval Submarine Base Kings Bay, Georgia, and Naval Base Kitsap, Bangor, Washington. You can read more about these stories at navy.mil. From All Hands Update, thanks for watching.


Does tribalism undercut honesty? Yeah, I mean of course. Tribalism has the theory of truth under tribalism, whatever the tribe believes. So tribalism undercuts facts. It undercuts reality. It undercuts truth. And the basis of honesty is truth. The most important person to be honest to is yourself. The virtue of honesty and objectivism is not about lying or not lying to other people. It's about a commitment to reality. A commitment to the facts. A commitment to truth. And yet, if the tribe is supreme, then truth is not supreme. See, in objectivism, truth is supreme. Reality is supreme. What is, is supreme. But for tribalism it isn't. For tribalism it's whatever the tribe wants. Whatever the tribe believes. Whatever the tribe upholds. That is what is supreme. That is the standard for everything. So truth, honesty, reason, rationality is out the window. Tribalism is, you know, is a primitive form of collectivism. It's such an unsophisticated form of collectivism that, you know, it's not just everybody, you know, that you have to maximize everybody's wellbeing. It's only, no, we're only going to maximize the wellbeing of the people who look like me who belong to my tribe, to my little group, to my subgroup within. And I hated tribalism and denounced tribalism and it's anti everything she believed in. It's anti her metaphysics, her epistemology, her ethics and her politics. So absolutely tribalism undercuts honesty. It undercuts every one of the virtues. Every single one of them. What we need today, what I call the new intellectual would be any man or woman who is willing to think. Meaning any man or woman who knows that man's life must be guided by reason, by the intellect. Not by feelings, wishes, wins or mystic revelations. Any man or woman who values his life and who does not want to give in to today's cult of despair, cynicism and impotence and does not intend to give up the world to the dark ages and to the role of the collectivist. Using the super chat and I noticed yesterday when I appealed for support for the show, many of you step forward and actually supported the show for the first time. So I'll do it again. Maybe we'll get some more today. If you like what you're hearing, if you appreciate what I'm doing, then I appreciate your support. Those of you who don't yet support the show, please take this opportunity. Go to your own book show dot com slash support or go to subscribe star dot com your own book show and and make a kind of a monthly contribution to keep this to keep this going. I'm not sure when the next


Course restore. Upload your course to Moodle Cloud. It's possible to save a course you've made on one Moodle site and reuse it on a different Moodle site. When you save your course, the process is called backup. And when you add it or upload it to a different site, the process is called restore. In this video, we'll look at how you can restore the practice course you made during our Learn Moodle MOOC into your own personal Moodle Cloud site. You can also restore your course to the Moodle site of your school or organisation, but the way you do it may be different, so you need to check with your administrator. First, make sure you saved or backed up your practice course using the video on Course Backup to help you. Make sure you have it in a safe place on your computer. Our teacher, Sam, has her practice course on her desktop here, and she's logged into her Moodle Cloud site where she's an administrator. You may not be an administrator on your organisation's Moodle site, and that's why you should ask for their advice if you want to restore your practice course there. We click Site Administration in the nav drawer, Find Courses, and click Restore Course. We can then import the backup file, either by clicking the button to upload it, or, as our teacher Sam is doing here, dragging and dropping it in. When we click the Restore button, we're prompted to check the backup details, and we scroll down and click Continue. Note how it appears we are doing in reverse what we did when we backed up the course previously. On the next screen, we decide if we want to add this as a new course or into an existing course. Again, you might experience this differently if you're restoring to your organisation's Moodle site and you don't have administrator rights. If we restore it as a new course, we need to choose the category. Our teacher only has one category, Miscellaneous, on her Moodle Cloud site at the moment, so she clicks that button. Clicking Continue then takes us to another screen to check the settings and we press Next again. We can move through this quickly because we've already checked the settings. We can edit the name and details of the course and decide which activities to keep. We move on again. We do a final check and then press Perform Restore. Once the process is complete, there is a green success message and Sam's practice course from Learn Moodle is now available on her Moodle Cloud site.


Hello, welcome to SSUnited, so since this side and this is continuation of SQL Server interview questions and answers. So today we are going to discuss one more interview question that is how to check the Armstrong numbers. So what is Armstrong number and how we can check it. So let's move to next slide to understand about the Armstrong number. So here as we can see the first number that is 153. So first we need to get the length of this so that would be 3. Then we need to take the separate numbers that is 153. Then we need to take the power with the length that would be 3. And then we need to add those numbers. If that number will be equals to 153 that is existing number then that would be Armstrong numbers otherwise not. As we can see in the last that would be 1634 so length of this is 4 and we need to take the separate characters that would be 163 and 4. Then we need to take the power with the 4 and then we need to add those numbers. If that number will be equals to our input number that is 1634 that would be Armstrong number. So here we need to write a function that will accept a parameter with the number and we need to write our logic inside the function. If that number is Armstrong number then we just want to print the Armstrong number otherwise we need to print the given number is not Armstrong number. So let's move to Sikosovo management studio where we will write the query and we can get the output. So here I am using sql2o17 so you may have another version of Sikosovo. So first of all I would like to declare a variable that would be our input variable. So we can say like input and it would be work at type and this is 100. Now we can set the value like 153 inside this variable. Now I need to declare few more variables. So next variable would be length data type would be integer and we can set the value of this variable length of our input. Now we need to declare one more variable that would be final variable. So in the final variable it will be going to combine the result set. Then I need to declare one more variable that would be i and initial value we can set as length of our input. So we have done our variables. Now we need to write our logic. So first of all we need to use while loop if this add rate i value is greater than 0 this loop will be executed and here we can write begin then end. So here we can set add rate final variable should be equals to add rate final plus. Here we need to take the power with each characters so we can use power and here we need to fetch out one by one so we can use substring. So this is substring function and inside the substring function we just want to get values from the input. So this is input then we can specify add rate i and we just want only one character. We can put comma and here we can use add rate length. Next we just want to decrease the value of this add rate i variable. So add rate i minus one. Now we have done our loop. So what we are going to deal with this loop? So here we will calculate the length of this input. So length variable will hold 3 and this i will also going to hold 3. So here it will be going to start from input that is 153 and here that is 3 we need to pull only one character. So it will be going to get 3 at the first time. And here we have length that is 3 so 3 to power 3 in the first execution then in the second execution it will be going to pick second character and in the third execution it will be going to pick the first character and it will be going to add those values into add rate final. Now we can check so here we can use if add rate input is equals to add rate final. So that value will be armstrong number. So we can use begin and so we can print the message like given number is armstrong. And if these values is not going to equal then we can print given number is not armstrong. So here we can use print given number is not armstrong now we can execute. So given number is armstrong that is good. Now we can change this number given number is not armstrong. Now we need to put this into a function so we can create a function. So that would be the function and it would be fn dot get strong and it will be going to accept a parameter so we can call this as input and data type would be where care and it is 100. Now we have to specify the returns and data type. So this is where care and 100 now we can use as then we can use begin now it looks good but here we need to make some changes. So this else is statement should not be there now it looks good and here we have already declared the input parameter so we have to comment this now let me execute this. So now function is created let me copy this and we just want to check it's working fine or not. So select and here we can use dbo dot or function and here we can specify the value. So first of all 153 now we can execute given number is armstrong then 143 given number is not armstrong so it is working fine now 100 now it looks good then we can check for last value that is 1634 execute so given number is armstrong. So this is the code and this is very simple if you can understand step by step so this is the function as we have created. So thank you so much for watching this video if you like this video please subscribe our channel to get many more videos. If you need this script it will be available on the description of this video so you can copy from there. Thank you so much for watching.


Are we almost ready? Good to go, yes, now? Okay. Okay, next up we have cyber warfare games, excuse me, cyber war game tabletop exercises with Gurney Halleck. Please give him a warm welcome. Thank you. Yes, as I said, I'm Gurney Halleck, if I know my name right. And I guess I'm doing a talk on cyber war games, tabletop exercises, TTXs. I'm going to use TTX because it's easier. I am not pimping my employer, like all the other speakers. And I'm using my hacker handle and not my real name, like none of the other speakers are doing. Anyways, so who I am, my, as if you care, I've been doing cybersecurity for a while, mostly offensive, aerospace. So I get to play with a lot of equipment and systems that aren't normally what you would think of as IT equipment. So that's kind of cool. I've been doing red team work. I've been the red team lead for about three years for TTXs. I am a CISSP, so bite me. I collect a lot of useless computers. I'm starting to call myself a cybersecurity nihilist. And that securing all the things is a noble pursuit. But in the end, it doesn't matter. We're all fucked. So that's where I'm coming from. And maybe it's just jaded because I've been working in this area for too long. So what is this presentation going to be? So it's my observations and experiences doing tabletop exercises. I'm not going to talk about any specifics from the engagements I've done because I'd like to keep my job. I like Bruce Potter's comment here that he starts out with every presentation that he does is don't believe anything I say. So this might be a good starting point for you. If you're interested in doing TTXs for your organization, then you should probably go out and do some more research. I'm going to use the term TTX just because it's easier. Some of my clients are sensitive about using the term war games, so we usually use TTX.  It has no meaning at all. But I'm stuck with it, so I'll be using it. So a little history for war gaming. Probably since people have been able to scratch maps into the sand or dirt, we've been doing war gaming. Back in the 1800s, the Prussians put together a game called Kriegspiel. It was a war game, an actual game, and it provided rules for moving troops and artillery and terrain and so forth. But they actually started using it to train their officers. And it proved to be very effective. HG Wells actually came up with a game called Little Wars. Again, it was a game, but it had extended rules such that it could be a Kriegspiel. It's interesting because HG Wells was a ardent pacifist. We've gone into, of course, modern war gaming. We have war games and movie. We do tabletop exercises, go to high fidelity computer simulations, and all the way to actual troop deployments and live fire exercises. But specifically, obviously, what I'm going to be talking about is the tabletop. So who are doing these tabletop exercises? A lot of them are emergency response organizations, state and federal. Things like FEMA for the hurricane that we just had. They do tabletop exercises where they play through various scenarios, events, situations that they have to deal with deploying or supplying and so forth to manage those sorts of disasters. Government is starting to do cyber-based exercises where they are dealing with attack events, how they're going to work through it, do remediation and how they're going to deal with these sorts of things. Some companies are doing this as a service and they're starting to be done internally in some commercial organizations. You might not hear a lot about it because they're not really that open about it, but they're starting to do it. So what is a TTX, basically? So it's a simulation. It's a rehearsal. It's a defense exercise. For a TTX, as in a tabletop, it's paper-based or it could be electronic-based, but it's not a computer simulation in any sense. You have selected scenarios. You can only do so much in a single exercise. Most of the exercises I do are a single day and I maybe get to do like four scenarios. Four major attack scenarios and that's not full coverage of a system at all. It's a face-to-face meeting and that's really important and the previous speaker mentioned face-to-face. You get all the engineers, all the developers in together in one room working out problems and that's a special situation and you can really see when you're participating in that, you can really see the interaction going on and the problem-solving going on. It should be a non-threatening, non-avisorial. Whenever I have an engagement, I always bring everyone into the room and tell them, we're not here to embarrass you. We're not here to criticize you or really be adversaries. We're all working together to make the system more secure and that really sets a tone to make sure that everyone's playing together, everyone's working together with the same objective. So what is a cyber TTX not do? So it's not a pen test. We're not actually trying to exploit systems. It's not a vulnerability assessment. We're not scanning, looking for open vulnerabilities. Not a risk assessment. We're not going through and determining the risks of the very system, enumerating them and so forth. We're not going through and doing a detailed review of policy and procedure. Now both some of the outputs of the TTX may include identification of risks. It may include identification of lax policies or gaps in policies, but it's not a review of it. And it's not an audit, so it's not going to give you a check box on your FSMA or PCI requirements.  And why do I want to do this? It doesn't sound like it's going to do much for me, right? Okay, so what does it do? It provides you with a tax simulation. And so you can see or discover gaps in your planning for dealing with attacks, both technical and in process procedure. A lot of times when I do a TTX, we come up with some pretty novel attacks that the engineers and the devs have never thought of before. And they're just blown away and it's like I didn't know that could happen. And we never designed for that. So there's a lot of learning that goes in there. Like I said, policy and procedure, again, if there's attack vectors or methods that no one's really thought of or considered previously, we can look at policies and procedures that are maybe not covering those aspects of how they, the remediation of the tax. Look at the development process, insufficient requirements, insufficient requirements on suppliers. People don't think about this. I'm buying software from a third party that's developing it, it's in Mumbai. All right, so they're creating software there. How much would it take to buy off some guy to put a backdoor in that software? We're shipping equipment from China to the US and we're gonna put it in our system. What's the potential for intercept and modification? Maybe not in an IT environment? Well, not that that's never happened, but we won't go into that. But anyways, so those are kind of things that is your supplier management, taking a look at these things, is supplier management putting security requirements on your third party suppliers. And socialization, which is really important, bringing together the right people to experience effects of attacks and potential deficiencies in their systems that maybe they never knew about. And a lot of times we have people meeting each other for the very first time. I was supposed to start that timer. Anyways, okay, so when should you do a TTX? And this is idealized because it never works out this way. But you'd like to do it really early on. Even if you don't have a well-defined system, it'd be great to get a round table and do something informal. We'll even just discuss some of the security aspects of the system or aspects that haven't been thought of before. You should ideally be running them through the development process so that before major milestones, before major releases of the product, you're doing a review of the security, not only in technical terms, but also in the policy procedure aspects of it. And you'd also like to do it over the life cycle. So many times I see deploy and forget type of situations and the dev team or whoever's deploying it out in the field, they never think that the threat landscape is gonna change and it does. So you really should be doing, bringing the product back in, doing a TTX over again and then see how you can improve the product that's already out in the field. Sometimes there's problems with that because they cost too much to upgrade it, but I mean that's a management decision. There's not a lot that you can do. If you don't have clear goals and objectives or support from your management and the technical staff, you probably shouldn't do it. I know it's hard to sell it to your management, but if they're not gonna support it as an engineer, it's just not gonna be worth it in the end.  Sorry. So who do you want as participants? You want your subject matter expert SMEs, who are your primary engineers, system owners, people who are really smart on the system, your software developers, hardware developers? Look at your integration and test people because they know how they're testing it or not testing it. Are they testing it for security or not? They're probably not. Get some customer reps so that you know how is this product actually being used in the field? Maybe it's not being used as the way you thought it was. Again, your procurement and the supplier management security other than the TTX team itself, if you got IT security that's involved with the product. Your managers, well, we'll talk about managers and other people who might be involved. So as I said previously, you really do want some strong goals and objectives. So you wanna try to specify it as best you can. So we wanna take a look at this system or this portion of the system and we're gonna look for specific gaps in security technology. You maybe even go down to a specific service and what is the response recovery process procedure that we use to handle an event, a security event in this system? You need to talk to your management about this so they're aware of it and they give you a buy-in and you need to know what sort of data you're gonna collect because if you don't know what you're gonna collect then you can't really write the report that your management's gonna want. So we got a number of teams. You would think normally we have a blue team and a red team, a defender and an attacker. The blue team would be the system engineers, the software devs and network engineers that are gonna play their everyday roles, what they would do normally in their day-to-day job. You've got the red team who are hopefully security experts and a lot of times, especially in my case, I'm not an expert in the system we're gonna review or we're gonna test. So I'm at a disadvantage a lot of times and I have to spend a lot of time doing my homework to figure out what the system is and your red team ideally would be independent of any of the development of the product. There's a couple other teams that are very helpful. Facilitators, you really should have some facilitators. I've been lucky to have a really good group of facilitators that help us put the event together, do the scheduling, pulling together the right people to be in the exercise, who know how to collect data and can do it in the middle of the fray of the exercise. They have to mediate conflicts, which happen.  You may have some observers, again, this is where I'm like sponsoring management, but they need to know that they're not gonna play. They cannot play. And ideally when we have management come in, we might have them come in and say hi and make a little talk before we get started and then we usher them out.  Because they're gonna end up playing, may or may end up playing politically correct instead of technically correct. And certainly you want the technical aspects to come out. So red team prep. My mantra has always been no magic. So when you develop attacks in the exercise, it's you don't say, oh, the server is magically compromised. Or this wireless device is magically compromised. You wanna have some references, either exploits that have already happened, theoretical exploits, some sort of reference that when you run your attack, you can provide proof or at least indicate probability or possibility that this exploit could happen. Normally when I do mine, I'm forward looking. I'm not looking at what is today's CVE or last week's CVE. I mean you can play those if you know the exact configuration, this Linux is 10 years old or something like that. You could go back and see exactly what it's vulnerable to. But I like to push forward since we wanna see what's coming up, what's gonna be in the next thing so we can prepare as best we can for the next thing. So that's why I look for some proof of concepts or a paper here at Torcon or something like that that I can provide to the blue team and say, this is how this happened.  They have to wrangle management, do the scheduling, educate the blue team and the red team on how the game is played. They get to manage disgruntled blue team members who can get very excited and pissed off and infighting between members in the blue team. So there's a lot of management that goes on there. And the blue team itself, like I said, they're just playing their normal every day job. So they come in knowing what they need to do in a normal situation while they're working at their desks or whatever and they have access to any resources they would normally have either documents or on the network or whatever. So I'll go through, is someone snickering? So, Injects, when we play the game we have Injects that we give to the blue team. There's a couple type of Injects. We do red team Injects and those describe the effect of the attack but not the attack method. You don't wanna give away how you're actually attacking although at some point you might have to provide that proof that I talked about previously. But you don't wanna tell the blue team how you've actually attacked. You wanna give them the effect of the attack just like someone would discover when they're doing log analysis or service goes down or something like that. They're seeing the effect. They're not necessarily seeing the attack actually occur unless we're providing that. And so what the blue team does is they provide a response, what they've done to mitigate the attack event or the attack effect. They can also send back questions and clarifications to the red team. A lot of times the blue team is they're not security experts so you have to kind of explain to them this is what happened and this is why you saw it. We also do external events. So that may be something, it's not a red team events but news reporter comes in and wants to talk to your CEO, law horse comes in and your chief engineer's pulled away for two days talking to them so he's now out of the picture as a resource. Those sorts of things, some sort of service outage, a customer screaming at you, why is my service down or whatever. And we also do tracking so that if you're using physical paper cards or if you're doing it electronically with messages or so forth, you're getting time stamps on those. So later on after the TTX you can recreate the flow of what happened and use that for your documentation. So, hopefully you can see that. So here's kind of just a flow diagram. You have these external events and your red team injects going into the blue team. Blue team is sending back responses. You get a volley going kind of attack response, attack response and that continues until you meet your exit criteria. And that could be your goals and objectives have been met. Sometimes you've just played out the game, you just don't have any more moves to go. And a lot of times you got time called. You just haven't been able to get the full gameplay in the amount that you have. Like I said, I'm lucky if I can get four scenarios in in a single day. And depending on how quickly the blue team or how much infighting the blue team is doing, you can burn up a lot of time. Yes. Yes. Sure, we do. So in some of our, well in a lot of our scenarios, you may have an event occurs that is pretty public and people are tweeting about it or putting Facebook posts on it. And so the news media starts knocking down your door or your customers find out about it or your management finds out about it. So I mean a lot of exploits that we see now, that's the sort of things that happen. It will hit Twitter and the cause of the event may not be fully known or researched, but it's hit the news already. And you get in a situation where your CEO may not know what to say. We're still researching it, but people want an answer. And that's part of your process too. You may need to have, if you come up and say, well we don't even know how to deal with this in the press when something goes wrong, well maybe you better have a policy about or a procedure about how you're gonna deal with media when something bad happens. So when a blue team doesn't really know how to play through a scenario and sometimes they just say, I don't know how to start or do something. How do I deal with this? It may be a situation where you don't have any process to deal with events. We've taken a look at the NIST cybersecurity framework and use the lower three portions, which is detect, respond and recover. So at high level, that's what we would tell a blue team to do. Detect, figure out what it is. Do your mitigation and then get the system back to normal operation. So work through that process and go through the discovery of what your gaps are or what you're lacking. Common issues. So I always get, there's always one person who's gonna say that can't happen. And it's usually someone who owns a system who's been working the system for 20 years or something like that. And thinks that this system cannot be hacked because I created it. I have a Plumbus 2000 in it that has a WAF and you can't hack into it. Oh, well, yeah, I don't have WAF filters in the WAF, but you still can't hack it because it's got a WAF. I have the buzzword, so it's secure. So you have to have the facility here is to, again, you go back to no magic and you can say, okay, here's the attack and here's the backup, the references, everything to say, this is why it could possibly happen. And then you need to have facilitators to go in and say, we need to play through the scenario, we need to get through it, don't fight it. After the scenario is done, we can talk about why you think it wouldn't happen, but let's just get through it. A lot of times the blue team will go down a rabbit hole. Those external events, which may be press or another business sector gets hacked with some sort of exploit. Sometimes the blue team will latch onto that and just beat on that when there's another attack vector that is the main purpose of the scenario. And sometimes you have to go in, the red team actually has to go in and kind of say, well, you guys gotta come back. You're going down the wrong way and you're wasting our time, so you need to go focus on this. Internal conflicts. I've had people almost yelling at each other. I've had people bullying each other. I've had quiet people who have really important things to add to the conversation, who are being bowled over and don't get a chance to talk. So you get a lot of internal conflicts. You get a lot of pointing, oh, well, that wasn't in my requirements to do this security thing. That wasn't in your requirements. No, it wasn't in my requirements, so. So you get a lot of those things and obviously that brings up some important gaps that you're discovering. Blue team always usually gets pissed off at the red team. We're being mean, we're going too fast. Sometimes I go fast on purpose. Things don't happen on the vacuum. Things don't happen at the pace that you would like them to happen. So I may hit them with three or four events, one right after another, and they're freaking out.  So you're gonna have to learn how to deal with it. Sometimes they're just befuddled and say, what are we supposed to do? And you have to help guide them a little bit. Oh, and sometimes, like I said, the red team doesn't have, they're not experts in the system necessarily. So sometimes the red team makes incorrect assumptions and we just have to comp to it and just say, okay, we made the wrong assumption but let's just finish going through the exercise. Data collection, so it could be quantitative or qualitative. Since you're kind of playing a round table or a game, you may not necessarily get a lot of quantitative results. You may come to realizations that we're lacking in this area. Oh, maybe we're strong in this area but it may not be numbers necessarily. You may find gaps in RACI, if you're familiar with that, who are responsible, accountable, consulted and informed and you see that someone's not getting the information that they're supposed to be getting so that they can make important decisions or someone's getting too much information when they really don't need it. They just need to get a quick status report. They don't need to get a whole data dump on them that's not gonna help them. You may pick up the unconsidered attack scenarios I think that we talked about in the supply chain and supply chain or lack of supply chain requirements. Supply chain is becoming a really big issue especially in where I work in aerospace not only because we source parts and systems from all over the world but we have some people who don't like us and we need to think about that too. Oh, and security lifecycle. As I said before, sometimes it's just deploy and forget. And some developers don't have their software lifecycle. Okay, we understand that. We're software devs and we know how to do that but we have no idea about a security lifecycle that we need to do periodic reviews of system security even if it is deployed in the field. Post game review. So you wanna get everyone together. Everyone who played, get in there. We want everyone to have equal opportunity to speak. As I said, sometimes people get bowled over but we need to manage the after game discussion so we can really get all the information that's been discovered.  Sometimes they're the ah-has or we did a really good job in this area or oh shit, we didn't have any idea about that. Get those improvements. Get feedback on the event itself so that when you do another one, you can do it a little bit better. Then yeah, you have to present it to management.  So you can say these are the technical gaps in our defensive systems. Here are technical gaps in our policies and procedures and then give them a schedule and plan of action. We're gonna work on these and get these fixed and you're probably never gonna get everything you want but hopefully you can get a buy-in on some of it. It's always tough to present to management but if you can give them enough things that they can make, you always give them like two or three options.  So wrapping it up, so yeah, TTXs can be, oh yeah, Pickle Rick, Pickle Rick! So TTXs can be really helpful for your organization or for your products. Make sure you have clear goals and objectives. Without that, maybe you're just doing it for fun but you really need to get some good output from the exercise. Get the right people and that's a tough to do and that's why I have some really good facilitator people because you wanna get a small group of people but a small group of very expert people. And that's it. If there's any, is there any questions?  But that's, I haven't met one that doesn't like a carrot. Well, that's my standard answer. So I mean, what can you do? Did I hear, see a question, question here? Yes, so I guess the question was how do your facilitators get experience if they're starting from zero? Well, one good thing is if they can participate in another one, in another TTX, either with someone, another organization you work with or a partner or even with maybe a college or government agency, a lot of colleges that are doing these. So if you can get keyed in to that and they can get experience with that. Doing some research, obviously. Doing something really small, just with a few people doing just a round table, just having a couple people. You don't have the red team off in a closet somewhere but you have blue team and red team sitting across from each other and just start discussing it. And as you build up that experience then you can go on to something of a larger scale. Anything down there? Yes, so the question was what is the typical size of the teams? My red teams are five to eight depending. I usually don't want more than five because then it's getting, I'm sorry? Okay, the blue team, I have worked with like 10 to about 50 which is really hairy. It's hard to manage all of them and in the scenarios maybe not everyone is playing because it's different areas of the system. So sometimes you've got people not doing anything during a scenario which is not great. So you want everyone involved. More questions, any other question? One, two, three, no. All right, hey, thanks.