Hi! My name is Arianna and I'm a graduate and ambassador at Opus University. I have decided to make this video in order to shed some light on what it's like to be an international student in Denmark. With this content I aim to offer you a bit of guidance and inspire you to make the most out of this experience. So let's get started! The Danish culture is indeed one of a kind, so if you're doubtful about bonding with the locals, just keep in mind the following aspects. We don't want to make the first Danes don't really do it unless they know you, so if you really want to engage them in a conversation, just loosen up and be the one to approach them first. Also, be mindful of their personal space. You'll be noticing how important it is to them. Remember, don't take these sorts of things personally. It doesn't mean Danes don't like you. Just try to keep an open mind. When you're out and about, don't get anxious if someone approaches you and you don't speak Danish. Everyone here speaks perfect English, and what is more, Danish classes will soon be free again for international people. Moving on to the structure of your classes, many of the degree programs are structured into lectures and tutorials. The difference is that tutorial classes are very practical and much more private than lectures. These classes last for about two hours, and in that time you will get the chance to solve a bunch of exercises and ask your teacher for guidance. In one regards exams, they are meant to test your understanding of the subject and not your memory, so make sure to distinguish between the two. All the material you need for studying will be provided to you on Blackboard and in class, but it is 100% up to you to decide how much time you want to dedicate to the learning process. What is again amazing about the school is the opportunity to customize an entire semester to your liking. This is also done to help you decide what career path to pursue. Events such as company dating have the same aim, and I encourage you to check them out as you might land your dream job right there. Also, did you know that it is possible to become an ambassador at university? This is an exciting opportunity to help with promoting the school to other international students through various marketing efforts, and share your own insights as to what it is like to be studying at a top European school.  I go out a lot to the Board Game Cafe, where my friends and I play tons of games and enjoy a beer on a late afternoon. The Student House, right by the uni, is where you can do a lot of volunteering and attend the best parties in town. Also, if you are a karaoke enthusiast, check out the Sherlock Holmes Pub down in the city center. Studying at home or in school might get really tiring, so if you want to change of scenery but still want to feel the academic vibe, check out the Royal Library or Dock 1. The latter has a very calming and beautiful view over the harbor, and it's usually packed with students at all times. In the weekend, it is worth checking out a Latin Quarter. That's where you'll find some of the greatest boutiques and coffee shops in Obus, and also some of the oldest buildings in the city. For a smoother adaptation to the Danish life, I introduce you to some of the key apps that will definitely make your life easier. Anything important sent either from your bank or SU office will come on your e-box, so remember to check it regularly. In order to access your account, you will need your key card, which is also available as an app. For easy transactions, install your own bank's application, and don't forget about mobile pay, so that you and your friends can easily return each other's money after that Friday night party. If you love shopping, don't forget to get the Zalando app for that 10% student discount. Also, the best deals on meals come from too good to go, and if you really crave that tiramisu coffee, get the Espresso House app, along with a lot of other hot deals. Another great thing about Obus is that you can travel anywhere using the public transportation. Briceplan and Google Maps are the best apps to plan your journey, and tickets can be purchased using mid-traffic. If you are in doubt about the location of your lecture hall, download AU Find and type in the four digit code of your specific building. Trust me, in the beginning of the first semester, this app is key to not being late to class. If you're still a bit skeptical about getting on a bus, try to buy a bike. It is by far the most popular way to get around, and the city's infrastructure dedicated to cycling is totally safe. And that's it! Hopefully you found it useful, and if you have any other questions, don't hesitate to contact me. Have a great uni start and be safe.


Good afternoon everybody My name is Kashi Kran Prishnassai. I work in a company called School of Shire Shopping. The brief introduction as well is that Shere Spool is concerned. Okay, this is good. The brief introduction as well Sorry, I've been having a terrible cold. The brief introduction as well is that Shere Spool has been concerned Has been that I've been writing JavaScript for the last two years My code initially used to be extremely sucky actually four years code used to be initially sucky now It's like much less Okay, so the talk today that I want to give is about The talk today. I'm gonna give is about a real-time web and How to actually go about implementing real-time strategies? I mean implementing real-time infrastructure in your existing web application So the history on how I actually ended up doing real-time web is we developed this product my project management software and We got a lot of requests from people saying that you know There are like lots of people logged in to the board at the same time And they want to see what each of them are like updating so if one is updating something on the board and The other person wants wants to see what actually is happening. So Because of this We're like thinking about like various ways of like implementing this probably like Reloading the page every couple of seconds and all of them seemed intrusive and we had to go We had to dive into technology and start doing the really cutting-edge cool stuff So that's how we started running our fingers with red time web and last time When by we kind of like managed to I think we can kind of manage David So what I'm gonna do today is I'm not gonna talk through all the options possible. I'm gonna do it another way We're gonna assume that We are having a web application. So I've just created a simple to-do list and a Simple static. I mean a simple to-do list and they're gonna see how we can actually implement real-time stretch I mean how we can implement real-time on that Web app. So these are the general steps that we would I would suggest anyone who they're considering real-time to First and foremost before you actually start doing real-time make sure your code is actually clean because lots of event when programming and if your code is already messy Then it's gonna be really hard to implement Then I like The first step would be to like start using new functionalities available in like modern browsers like web sockets like an awesome technology I'm pretty sure lots of people who have talked about it Through the course today. So we want to see how we use web socket start implementing that time at least for the new browsers Whereas for older browsers, you know, just don't do anything. Let's leave it and then We go to the next step where and we say, okay, okay new browsers own browsers Let's implement real time for all the browsers. So all the all the browsers that includes IE six, which is like After that, I mean you have real time you have a nice system working and then you start realizing that Maintaining that code is really complicated. So what are the strategies you do what's ideal? What are what are things that you can do with the technologies available to make? maintenance really simple and finally The usual deployment scalability and all those big words Let's give you a hand loss so Let me jump into the court. I think that makes a lot more sense Okay, so this Is the code for a very simple Web app So what does it do?  Very simple. And yeah, if you want to add a task you add something else Now So This is all fun, right? I tell you when it's not fun when I like two or three people working on this through this and You have one guy using firefox, there is another guy On Google Chrome doing the same thing. Well, he's like changed it to green is that doesn't get reflected here Right. So what this guy has to do is they constantly keep refreshing the page, which is a sad thing to do okay, so Let's look at the code. I mean this is probably how most of us write our code initially if you're at least loaded I think I started writing it like yesterday night and Initially, you know, it's it's like crazy. So you have like a render task the render task Okay, before that, okay, you get tasks from the back end and You allow tasks to be in them. So get us. That's a Jack's query. It's a list of tasks as Jason object I mean just the projects to Jason format And for every time that was a turn Render task so render task then does it and also like does the call back to make do an edit So it's it's a bit of a mess, right? So Yeah what's happening is code is like And that technically means the truck factor is one.  Any guesses it's like this Assume truck factors technically the number of people who are working on a project on whose absence the project will come to a standstill so Very crudely put the number of people from your team who have to get run over by a truck for the project to come to a complete Sansa so the truck factors one which technically means the guy who wrote that quote is the only one who actually understood it So that's gonna be like really complicated, right? So, yeah, why was the truck factor one because business logic data and rendering are all tied up There are like two functions which does the rendering which also does the data patch which handles the data and which also That's like the logic on the click, right? now Such codes are really really hard to test testing is extremely hard and Feature addition is even more harder because you're like you already have a really big Big messed up system and you're trying to squeeze in something else within the force and that's like adding complication chaos to the system, right? Which all boys down to the fact that they are going to be box. No excuses. They will definitely be box I'd be really surprised if a guy can like a code like that and come and say it's completely buck me Right, so what are we gonna do first step step zero is to clean our code be ready for real time Step zero is essentially decoupled logic data and rendering So let's look at the code again. So I am gonna show you a slightly different version of the code What I've done over here is I've used back home Which is like a nice JavaScript framework from writing like rapid web applications There was actually supposed to be a talk on that one's questions. He was not possible. So So back what it does it can influence the MVC strategy on the front end. So you have like models You have models and you have collections which are like a list of models So what about every every time you get Data you like get the data and like populate the collection create a model for each start and populate and You can also it also does signal handings or technically if it fires a signal Every time a new model is created every time a new model is edited or anything of that sort Signals created and you can listen to the signal and like do it So essentially what am I doing? I'm breaking down and like isolating my models Isolating the logic and how whether or there's a task change the So isolating rendering so whenever a task changes, I mean when you like change it to like done or not started how that gets rendered and you have your logic separately so the kick logic on the structure is separate so there's not technically completely Ordinary MVC for MVC example, but this is a way this is a place to get started So from that convoluted code you've come to a slightly more organized piece of code So yeah, yeah So what's happened? this Was much more cleaner Which technically means course also easily testable Changed in logic data schema and rendering is easy So if you're like changing away your task models like past or the way tasks are rendered on the page Or how you handle it so instead of that clicking if you want to put a checkbox So all those things have been like decoupled So you can you only have to have to change small bits of code instead of like all the code and yeah I technically avoid repetition on all the good traits of good programming Adding new functionality is easy. So this is where you have to be in order to even start doing start thinking about So step one, what are we gonna do web sockets? Brilliant real-time support for browsers which support the awesome HTML that fire web sockets pick Right to fail there for browsers written for a couple of others. I mean that's technically a great story So make sure that browsers which have web socket Will you use the web socket and for browsers which do not have or which do not have web socket implementations Don't do anything just leave it as such so you can actually tell your customers saying hey You know what we want additional functionalities start using it in Chrome or firebox. It's a bad thing to say But at least it's a start right so a Small bit of note on the technologies have used technologies. You can use and stuff like that I'm using to order, which is like a Python web server Running on a different port which basically handles web socket connections So web sockets are not handled the way HTTP is right So what happens? If you get any details, it's basically you start with a HTTP 1.1 call and then that gets upgraded into the web socket spec But as implementers we need not worry much about it because your framework your browser and your server will like take care of it What you need to know what you need to like do is get a server which had which does the web socket Spec properly the tornado does if it has a web socket handle So I'm using that and I'm running it in a separate port not only default port 18, but on a different port 88 I'm going to use the native web socket JS API Which comes with a browser to create a new connection with my web socket server and like pass data Do nothing when I impossible integrate the user. This is a nice way to do it This from a conference for which I was like So, yeah Let's look at the code again. So what's now happening This unit like I've written a method called a real time So I'll come to this check later on so essentially what it does is it creates a Web socket connection Connects it to port 80 ad and Whenever the connection the server sends a message this receives it and this functions the call back for the server's message So it basically picks a tough object and like updates its own collection So what am I doing in this step? I'm Whenever I do an edit and it goes to us it goes to the server To my actual app server after I get a success call back I I send a message to all the to the web socket server saying notify all of the friends that this Update has taken place so the technically So this is the ad task so I added task on the success of it I sent WS the web socket Variable in which we store the web socket and So I say WS dot send a j-signified Representation of the task so the task has a name an ID and a status right This T dot get okay, you don't get a party around that backbone model methods, which is like basically get the The property of the task So yeah, so what are we done? We send a message and other we send a message from one browser and other servers Sorry other servers receive it over here I mean other other client other browser clients a browser's will receive the same signal over here So that's like the second step So I'll actually show you how it runs You see both the browser's I'm gonna Make this so that gets changed on the other thing so what what's actually happening goes to the server So it is stores it in the back end Then comes back on the subsist on the subsist sends a message to a live server saying hey update on all the other clients But I open Internet Explorer nothing's gonna happen so The changes will happen in Chrome and in Firefox, but on Internet Explorer nothing is gonna happen because Internet Explorer The version at least the version I have does not support the web socket Right So we got Simple homogeneous So I'll actually come to that in the third step, so I just wanna like go on incrementally, right? So Your ad or it using web sockets is done So we have a real-time back-end server running on a different port a full real-time support for new browsers and No real-time support for old browsers. Okay a bit of a note here in the code. I was doing Something like this Now what what is I actually doing now the web socket? Spec has only been recently very recently finalized until then all the browsers love the spec and the spec was in progress as well So they used to implement various various versions of the spec So Firefox has this crazy idea of like adding a prefix to anything that has not been like standardized So fire in Firefox, you can't just do a new web socket. You have to do a new Mars website All right. I think the latest version of Firefox. It's kind of being it's it's become web socket again and In Chrome, well, it's web socket. So what am I doing? I'm actually doing I'm actually doing a feature snips I'm seeing if the web socket features available and if it's on the Mars web socket name Then I say that's the class I have to use if it's not there Then I say okay at least you get web socket. So so that I say hey, it's a webkit based browser If it's not there as well, then I say return don't do anything if it's there then create a web socket connection and do Right Yeah, so Full real-time support for new browsers no real-time support for old browsers If you if you hate Internet Explorer users, you can stop right here. You have a fully working system But as it turns out most of us, I think there was a graph which was shown the other room We are like some 26% of you internet users who still use IE sticks So for those blocks you I mean you really want to explain give real time to all your customers, right?  So What are we what are we going to do in this step step to use a combination of comic? Web sockets flash and any other possible technology that is possible to create across browser functionality which is kind of uniform across all browsers so Comet what is Comet Doing non-http things through http ways It's a ugly hack, but it works and people have been using it much before the web socket spec even came So, yeah, the technology we're going to use is something like socket.io or js.io or something similar in the front end and Us a server which also understands the handshake. So let me explain this to you I Have a browser and I have a socket IO client. Okay, it's a piece of it's a piece of code What it's going to do is it's kind of like a snip. I'm saying how I got web socket. No Have I got flash support? No Then I should probably do http long polling so it falls back to the technology available right and In the back end and then once it falls back to the technology available It notifies its server saying I'm going to communicate with you for real-time communications using this So is that it using http long polling or using like http multi-part cards or using web sockets So what it does is yeah, yeah, you saw the previous code where I actually put that features in it for like much web socket or I Mean that was just for web socket like two browsers We are now talking about like lots of technologies and the big there's a huge logic involved on deciding which Which is the protocol that I have to use to communicate with my real-time server now Libraries like socket IO makes that easy point. So it takes care of doing the handshake. It decides on which on which Channel or on which transport the data can be communicated and finally Once all these things have been decided you can just create a class and they start sending data Which can be like transfer between the lights over and your client So let's go look at code again Now if you see I use the socket IO the JS client library Which gives me This IO dot connect object. I use that I You start to connect to my server my server is run my server is not a mere web socket server It's not a smart server. It can like decide on which connection it has to use So once I do the new IO to connect it's gonna like this. It's gonna communicate They're gonna be a handshake and the most ideal transport is going to be chosen You can you have options to like tell These are only transports. I want the socket IO to use and there are various configurable options, which you can But let's leave that for me This is like very similar to what we're doing whenever it gets a message Connection receives a message execute this callback and the callback is exactly similar to what we did on the previous What we saw in the web socket message code Yeah, so the first preferred transport Transport method using this. Yeah, this library will like do use web socket then falls back to Flash then falls back to HTTP long coding then falls back to like God knows a lot of things. I mean high frames Never loading high frames and form multi parts and every possible hack okay, so let's actually look at This code again Well kill the web sockets over Now comes the big guy. They said I'm not going to use you to my good friend local on Cool So I think you can actually all the tree right now. So the magic happens works on IE as well So cool. We now have all of Real-time. I mean we now have real-time System in place which supports every browser. I mean, you can write right on compatibility more So, you know the first like 99% of your Cool So are we? Yeah Okay, so what I used is I Which is basically socket Ios for a server-side port into Python So a quick note here you can use a lot of servers You've got event machine which can handle that socket and like this thing Turnado has turn audio which is like do that and I think almost every major language Implementation every major language has an implementation which kind of uses the socket. I was standard in the back end to run a server No, I purposely did not use socket Ios server But used a Python server just to say that you know the communication handshake has been kind of standardized Thanks to talk it I which is being the first one which actually incremented the thing I mean, there was yes, I know which also talk about the handshakes right now socket. I was kind of become the de facto and socket I on the client side using that code and Using a server which understands the socket I or handshake protocols So are you saying that my server side code which will respond back to the Jason will be saying You Yeah, yeah, yeah, that's right. I can actually show you the code but it's gonna be Python If you can understand it like just a second so I was this is like a socket IO connection, which which is like which is Channel connection is from what turn audio gives. Oh, sorry So you have this thing called channel connection, which has basically the on message on open So the handshake is a completely taken care of my turn audio at the back end and socket So you have to write your logic over here and that gets like decimated across So usually You know The server goes down What happens in a web socket which has some kind of connection Yeah, that's that's the tricky part and that's that's a part that everyone that has a big time right now So there are a lot of which I will be talking about right now. So What we had is yeah We in this that we bring support for real time real real time even on ice six Abstracted out API to perform real-time action.  Oh How about if an action is performed on an API so you expose API is to your back end So I do a post on to the API and how is that going to be reflected across all the people locked into my client and How about we need authentication? I mean we just all we did was like you know what open connections and data authentication is another big problem so What we what the web is heading towards is Especially the real time one is a pop-up channel based system So what there are these systems available which will like it's like chat So whenever you open a new connection you say I want to subscribe to this channel. Give me data to this channel alone okay, and Your back end will like if you're subscribed to that channel though you can do a lot of the kids saying hey I'm this user Please check with my back end if I am this user then add me to this channel and once you add it It'll like send you data only pertaining to that channel So you don't get to see what someone else is start to do this this right step one Actions activities performed through the API Okay before that I was telling you all these systems There's something there was something called hookbox which was like return last year Which was amazing in the ability that because Hupbox was written on top of A socket IO kind of system So all you had to do is open a hookbox connection say subscribe to this channel This are my authentication details hookbox and then go check with the back end see if you are the user with the authenticated Details then subscribe to the channel Javan art is another rails implementation which has been Implemented on top of socket IO, which does the exact same thing Yeah, I wrote one myself which so that technically means that it's not like really hard to implement such a thing So I I took up tornado and like wrote something over the weekend Which is basically a simple pop-up channel system which Was the second thing what happens when you are doing API calls, right? So you have to like now decide on what your strategy has to be for it, right? So what was initially happening? So what was initially happening was? What was initially happening was? This is the client which made the action Then the retail to the server So it's a response. It sends a positive response This then sends data to the live server, which is like separate entity in itself Which then tells all the other clients subscribe to the lights up, right? Now what happens if an API call interaction happens over here, which means This action lot which means none of these clients will be updated so The next logical way of like doing it is something similar to this very Action is like one direction goes to serve now serve as the one which actually Sends the data to the live server The back end the back side of the life server, which then Decimates the data across all its clients So the advantage of this is whenever there's an API action happening this action like still continue Which means your clients would be afraid Now deciding on which architecture works best for you is one more Critical there's one more schematic that you can consider wherein All these are like bi-directional and the live server is the one which communicates the server so the live server acts like a kind of proxy which then channels on the day a transmission to The server especially if you're writing chat applications, right? That's like awesome because Data gets transferred and then it gets locked on your login Right so This is a second missing and what is the final thing? How about having to need to authenticate? Okay? I The stock was like meant to be a real-time talk So I've reduced amount of content I was flying through on like socket.io So socket.io has like this method by which you can like Send events which are like not which are specific messages pertaining to a particular topic So you can actually write an event which does authentication handling So as soon as I open a connection, I send an event saying authenticate me against my back-end server So when that is done then they carry me to the channel So Yeah So the first question is you're assuming that all of these things are user events. Yeah, so there is a system event Let's say a timer or let's say, you know, a com job. Yeah Your workflow So in that you would you would have a user even triggered directly from the server and yeah, so that schema will work Yeah All right Deploy scale and much much more Okay, these are the really really really big problems that you will be facing because until now everything will be like cakewalk You have a really nice working system on your sandbox. The second you're talking about deploys You have to think enterprise think what your customers will be facing Running the light running the lights are all on a different port is not a great idea at all Reason there are lots of companies out there which have blocked every other port but for port 80 and for what? So if I'm running a running it on 8080 running my lights over on 8080 My life so actions will not take place at all If you have an architecture which was like that the previous one then your entire system brings right? So you need to figure out if you are figure out a way to like write a feel safe So you say you shouldn't run it on the different port that means you'll need a web server that's web socket compatible Yeah, so I'm getting to it. So what has what has happened is? I mean I can run it on a different board if my customers do not feel the pinch But if my customers feel the pinch then I need to figure out a way to like put a proxy or use a user server Which can like understand it's rocket connections and think I got all the any web servers out there that can understand a web socket connection engine X has this has this engine X cannot Technically what happens is I'm going to use engine X as like a proxy server Which is everyone's I mean everyone who's using socket I have lost in there, but it also has the problem of How it connects it talks to its client side the client-facing side on HTTP 1.1 Whereas talks to its back end to the server that actually does the web socket or but that does real time on HTTP 1.0 Which technically means you can't? You can't use the HTTP The WebSocket protocol itself violates HTTP 1.1. It's not compatible with the 1.1 Yeah, no, it's so initially one of the engine X doesn't support WebSockets So yeah, so what are the options available? So anyone wants to build an application what web servers do? Okay What I do is okay scale So what I found as a big good strategy this is like personal and is what I have been doing I use half proxy and what I do is Before that if you're doing HTTPS connections as well, I have a HTTPS terminal point So like something extra start all What's that other thing called? Okay, yeah Yeah, so Basically have an endpoint for HTTPS connections, which is like the encrypted and put it to another port So what happens if I get a call on 443, which is like HTTPS. I forward it to 8443 Or if I get a call to 18 just transfer it how proxy is a proxy server a load balancer Which listens on 8443 and 8443 and 80 and I basically say if I can like do like you are in between saying if I'm getting a call on the socket IO socket IO URLs then pass it to the socket IO server or pass it to my main web app server So the half proxy is like basically a load balancer which will say hey, is this connection a WebSocket or is this connection a real-time server connection or is it like the same based on the URL So I have a unique URL for my WebSocket Calls, so I will call my real-time call So I'll say anything that goes to that when I go to go forward to the real-time server It's come over to my web app server and I think you know engine X. There is an official patch for you The the TCP Again, it violates H2 and when yeah, it's never get it's never gonna get accepted officially So the authentication will happen two different times if you don't use this cross So these are all in the back-end back-end There's a back-end server And then you have a live server So I will do the authentication first Back-end server So when I go to the live server Again, yeah, it's since it's the same port and you're using the same this thing, right? Using the same your domains. There's no cross-domain calls. Let's happen So if you're if you're talking about sessions, okay again sessions, right? It's a very tricky thing because some Some some of the transport connections have the habit of like sending your session cookies there some of them So Authentication it's actually subject to based on what you're actually doing Authentication I wrote Yeah Over there what I would ideally do is do a Put a channel based system over there and say Authenticate me against my back-end so the lights are all like authenticate me against the back-end and then let's say, okay I'm I accept it or not. So there's a call back happening over there Yeah, any other questions? Any other questions? 10 So Add on to that so the stock it's was a mature for a while and it finally got The spec got production ready only two months ago and there are multiple drafts of the proposal. Can you talk more about it? Yeah, so there have been like quite a bit of drafts and all having like weird games. But what happened was they want to finally an RFC which got accepted like two months ago. But until then every browser, the new browsers love the idea of WebSocket and jumped into it. So whichever spec seemed advanced enough at that point was implemented. So Chrome was on a different spec and these specs are basically not APIs but internally how the action happens, right? I mean how the TCP connection takes place or how the HTTP connection takes place. So a quick question to add on to that. Most of the specs are not intercompatible. So if you're writing an application that works on certain spec it doesn't work on the other one. So how do you ensure that your code continues to work everywhere? I mean this is a big deal and node knockout happened. Everybody was using Socket.io. Chrome released a new version with the newest draft and Socket.io broke. All the WebSocket applications broke. So how do you ensure that these things don't happen? So okay, you can't really ensure because you're in a very nascent stage and you don't know what new drafts are. My question is what can you do about it? Try to use the standard APIs provided exposed by your native client which will not change unless the draft changes. So the on message and on connect and things have not changed for WebSocket. Though internally how it works has changed. So if you're writing back in servers you need to be worried because that's where the connection handshakes and things have to be taken care of. Let's say when the draft updates the way the handshake happens changes. You're also writing code for the server side and your code is still not ready for that kind of handshake. So is there a way you can say this is not compatible and you can probably send the HTTP normal response saying please switch to a fallback. Yeah, there is probably, yeah, you could probably implement a fallback. I mean seeing if there's a connection problem. I'm pretty sure most of the browsers will also raise their defecation money. Chrome does for us. Any other questions? Yes. Thank you.


The main focus of my research is to enable companies to avoid what they do today to build a series of prototypes and reduce the number of those in a virtual environment inside a computer animation. We are, for example, incorporating a company called Kongskilde, and Kongskilde are building aggregates that go in the back of tractors to cultivate the ground, etc. And here, their prototypes are quite expensive, both to build and to test. But we can test them and test the tolerance of the things that could happen to it in a virtual environment. Another example could be, most normally, feeding of mink, which is a way of being able to avoid having human beings sitting on the vehicles when they are feeding all these animals. The growth of products in my field is exponential. Because the combination of cyber parts controlling a physical component is growing tremendously and time to market for the products being developed in this field is so important to get right first time and, for that reason, a virtual environment is the right solution to interact with.


Welcome back everyone. Today, we're going to be talking about potentially one of the most important topics when we're dealing with digital forensics and that is documentation and reporting. If you have good documentation and reporting, then you still have to do good investigation, but if you can communicate, it will really help to express exactly what you were doing in your investigation, how you were doing your investigation. You'll convince everyone or convince the courts especially that what you're doing is correct. Now, if you don't have good documentation, you don't have good reporting and you can't communicate, then even if you have a perfect investigation, if you can't communicate your perfect investigation, no one will believe you or no one will trust what you say. Documentation and reporting is potentially one of the best or most important skills that you can have as an investigator aside from investigation itself. Documentation allows you or someone else to understand and verify your findings. Whenever you're doing an investigation, you want to be able to let everyone or whoever is helping you with the case or verifying your results, you want to let them be able to follow exactly what you were doing in your investigation so that way they can understand what you were trying to do and to verify that everything you were doing is correct. The court systems work in a way where everything you do should be able to be verified by a third party. So, for example, if I'm a police officer and I do an investigation and I have my documentation, if the defense wants to check my documentation to make sure that I did the investigation properly, they can call in an external expert who can then take the data, the suspect data, and my report and be able to verify that everything I did is correct. That's the right in most countries of the defense to be able to do that. So, in that case, people or third parties should be able to verify what you're doing. Now, documentation is also for your colleagues.  Documentation should be clear, concise, and detailed. You don't want a lot of extra words. You don't necessarily need to be writing a book about this, but you do want to make sure that everyone can understand exactly what you were trying to do whenever you were doing your investigation. You want to keep it as clear and concise as possible because you have to understand it quickly, other people have to understand it quickly, and if you write long paragraphs about what you're doing, it takes more time out of your investigation. So, make sure everything is very clear, concise, use as few words as possible where you still understand the meetings, and everyone else can understand the meeting as well. Clear indication of what you did, what you found, and how you interpreted your findings. So, in your documentation, what did you do? What did you find? How do you interpret what this means? So, if you see a Windows registry key that's set to a certain value, how do you interpret that registry key being set? How would your colleagues interpret that? Documentation should be accessible very far into the future. So, some investigations might last years, or some cases, I should say, might last years. So, after you finish your investigation, then it will go to court, and this court battle could take a very long time. So, you might be asked questions four, five, six, maybe ten years later about this case. Now, the only way you're going to remember about this case is if you have good documentation whenever you first create it. So, think very long term. Should be able to access electronic documentation in the future. Keep the documentation in common, ubiquitous formats. So, for example, TXT. If you write all of your documentation as a text file, programs in the future will definitely be able to open up a text file. If you write, you know, your documentation in, let's say, WordPerfect, which is a very old word processor, you're going to have a very difficult time trying to open up those file formats in the future. Hangul word processor. It's only used in Korea, and if Hancom, or at least the Hangul word processor branch of Hancom, either shuts down, goes out of business, whatever, if they stop, then HWP will be almost impossible to open. That means that instead of doing your documentation in maybe HWP format, choose something like text or even doc. Doc readers exist, and they will exist for a very, very long time. Even DocX, there's a lot of open source readers for DocX. So, you never have to worry about, can I access this information in the future? Okay, use a word processor that can embed links and images.  Probably Microsoft Office, Libra Office, maybe Hancom word processor. Just switch it to open document format or something like that. Use the same word processor for both documentation and reporting, and this is a formatting issue. You want your documentation and your reports to look as professional as possible. And if you use different programs for each, whenever you copy things back and forth, you might get different formats and it might mess things up. So, you want it to look as professional as possible. In your documentation, you want to log the time for every action that you take. You want to document every action and make sure you log the time. Time is extremely important for establishing when everything happened. So, when did you collect a suspect hard drive? When did you go into the suspect's house? When did you make a disk image of the suspect's hard drive? When did you start analyzing the suspect's hard drive? You need times for all of those things. So, time is extremely important. You need a list of exhibits. So, all of the devices that you're going to be dealing with in this case, you need to list them and give things like serial numbers, make, model, any identification that you can find. For example, stickers. If somebody put a sticker on something, what is the sticker? What question is being asked and by whom? So, an investigator is asking some sort of question. You're doing the investigation for some reason. Why are you doing the investigation? Who asked you to conduct this investigation? What question do they want answered? You should have that in your documentation. This investigator asked me to look into this computer's hard drive to see if I can find illegal videos or something like that. Make sure that's stated in your documentation so you know why you're doing this investigation. And then any derived hypotheses to explain the question and why? So, we'll talk more about the question being asked and hypotheses in week seven. Yeah, so just what hypotheses? What do you think could have happened? How can you possibly explain this case or this question? And what evidence can you find to support that? We'll talk more about that later. Documentation. So, notes of all actions taken. What actions did you take? What time did you take those actions? Any programs that you ran? Any forensic software or any tools that you ran? And the version of the tools that you ran? The version is very important because different versions of a tool can give different results. So, the version is very important. Data types extracted? Like, what files did you recover and where did you save them? It's important to know where you saved the files because maybe you get multiple cases mixed up and you save files in the same folder. Now, which one is for case A and then which one is for case B? So, knowing where files are located is very, very important. Any devices that you've examined and also storage sizes. So, the size of a hard drive, the size of RAM, just any disks that you have, phones, things like that. And then your examination results. So, after you actually examine all of the devices, any conclusions that you've made? What did you actually find? So, you're trying to answer some question. Did you find evidence supporting it or evidence denying the question? Yeah, just what conclusions can you make from what you've seen on these digital systems? You should also give documentation supporting your reasoning. So, you make some conclusion. Well, why do you make that conclusion? You can't just say, because I'm an expert, no. You have to actually provide evidence that supports what you're trying to say. So, you can use things like research papers. So, say these researchers found this particular information and I'm using that in my case. So, that means that you're basically borrowing other experts to say, listen, these experts have already found this is true. So, this is what I'm saying in my investigation. Case law. So, if you're doing an investigation, especially a criminal investigation, cite case law as much as possible to say other cases were like this. So, they came to this conclusion and it was found correct. I'm coming to the same conclusion. So, use research a lot. Use case law a lot. And also document the hours that you've worked.  This is more for consulting companies than maybe government workers. But, you should be aware of about how long it takes to do a certain type of case, more or less. How much time you spend doing certain tasks in that case and that will make you more efficient in the long run. Knowing the goal of the investigation will dictate the scope of the documentation. So, you need to know what the point of this investigation is. Again, ask the investigator what question am I answering and then clearly define the goals before beginning. What question am I answering? How am I going to answer that question? Again, we'll talk more about how to proceed through an investigation later. So, that was documentation. Documentation is basically for you, for your colleagues and also for maybe a third party that's trying to verify your findings. But, documentation should be very technical because you are probably very technical, your colleagues are very technical. Documentation is not for court. It's not the type of thing that you will give to your boss. What you'll be giving to your boss and what you'll be giving to the prosecutor in court is reports. So, the overall report is for a very different audience. So, reporting is for a very different audience than documentation. Reporting is where you demonstrate your findings, arguments and evidence. So, once you've documented all of the steps you took, now we need to take that information and condense it into a final report that says, what did we find? Why do we think that we're right? And what evidence do we have that shows that our reasoning is correct? Describe the analysis and conclusions. So, what analysis did you do and what conclusions did you come to? And it should be very understandable even for people who have no technical background. So, if you say, you know, I examine the Windows registry key to find timestamps that were modified in, you know, UTC-8, something like that, most people won't understand it partially because it didn't make any sense and also because it's just too technical, right? So, describe it in a way that anyone could understand. The report is basically for everyone, especially for judges, and judges may have no technical background. They might be very technical. They may have no technical background. So, we're writing for a very different non-technical audience. So, it should be understandable. It should be easily referenced. So, every part of your report should be easy to reference, like, individual paragraphs. So, if you look at case law, for example, each paragraph in case law has usually a number and a letter. So, write your reports like that so that way they can say, in paragraph 1A, I found this statement to be true. Use unambiguous, it should be unambiguous in logic and conclusions. Now, this is very cultural. What unambiguous means? If you read, for example, Korean newspapers, especially the opinion articles, the logic in newspaper's opinion articles, there's basically no logic there and the conclusions are very, very ambiguous. So, people will say, you know, Korea has a lot of problems. Let's fix Korea's problems. Well, what exactly is the problem here? What evidence do you have that Korea has lots of problems? What is the conclusion? How do we fix these problems, right? But most opinion articles I see are very vague like that. They kind of give a very general problem that's not really well supported or well defined and then they give a conclusion that's so general that it makes no sense. Let's fix problems. Well, which problems do we want to fix, right? Potholes in the road or, you know, government's issues or, you know, what are we fixing? Well, if you look at reports in your investigation, you can't be like that. You have to be extremely specific. I found this piece of evidence and this piece of evidence, that means that the suspect used Internet Explorer to download a virus, okay? I can tell you exactly what the suspect did and here's my evidence. Now, what does that mean in terms of our investigation? Well, it means the suspect got a virus, so maybe the virus was, you know, all related to the case. My point is be very specific. Do not be general and make sure everything is supported. Contain all necessary information to explain the conclusions. A lot of people really neglect evidence, actually. Sometimes even in investigations they just say, well, it's very obvious that this must be the case. No, it's not obvious. You have to provide evidence for everything you say. Yeah, so make sure you give all of the information you can to support whatever you're trying to say. Don't contain irrelevant or too much information. If your report is 100 pages, it's probably too long unless it was a really complicated case. Only include in your report the things that you absolutely need to describe what you're talking about, okay? Don't add extra text just to sound fancy or just to add extra things to make it look better. That's completely wrong. It wastes everyone's time and no one will read it. And more importantly, people might think that you're trying to lie. And that's definitely something you want to try to avoid. And make sure you satisfy legal requirements in your country. So every country will have different reporting requirements, so you have to satisfy those requirements as well as being logical, show your evidence, make sure your conclusions are sound. The parts of a report should be something like a title page, table of contents, background information, adopted analysis methodology, description of analysis steps and results, conclusions, references and appendices. And I'll talk about those. So in the introduction, you should give the events leading to the analysis. Why are we doing this investigation? Any initially known information? What did you know about the victim? What did you know about the suspect? What did you know about a bank account that was used? Any exhibits, computers, cell phones that were relevant to the case and then questions posed by the investigator? So now we have the question again that's both in our documentation and our report.  What is your analysis strategy? Did you demonstrate due diligence? Did you search for both conclusions that the suspect is guilty and conclusions that the suspect is innocent? Did you practice due diligence? And did you back up your reasoning? So is your reasoning process actually justified? Is it sound reasoning process? Next is description of steps and results. So collection analysis step by step, how did you collect the data? How did you analyze the data? Results and findings, once you analyze the data, what were the results and what does that mean in terms of the investigation question being asked? Key points in the main text and more detail in the appendix. So your main text should be relatively short and then you might have more than 100 pages of appendices or additions that you add on. But don't put them in the main text, just keep your main report very short. The appendices can be hundreds of pages, no problem. Any conclusions you're making? So answer the investigator's question. Was this computer used to commit a certain type of crime? Yes or no? Here's my evidence to support it or here's my evidence to deny it? And then any recommendations that you might make? Now recommendations really depend on the country again. Next is references. So in your report you should be referencing case law, you should be referencing research, websites that have done different types of investigations, things like that. Use a lot of references. So you need to reference this section. Then the appendices come after that, so any extra things that you want to attach. And then make sure that at the beginning of the document you put an executive summary. An executive summary. And this is a one to two page maximum summary of your entire results in the report. So you have your main report that's probably 10, 20, possibly 30 pages. You have an executive summary that's one to two pages and most people will read the executive summary to get the basic idea like, here's the question, here's the answer, here's my evidence. Then if they're very interested they can go read the rest of the report. So make sure you include an executive summary because that's what most people will read and then the actual judge or prosecutors will read the full report. Yeah, and then while you're reporting beware placing a person at the keyboard. It's very rare that we can actually place a specific person at the keyboard unless we see, unless we have CCTV on their computer or whatever, but unless we have a person that says they were sitting there it's very difficult for an investigator to say that a specific person was there. So for example, an account does not mean a person. So if somebody logs into Gmail account at a certain time well maybe their password was stolen so we don't necessarily know that it was a specific person. So be very careful about putting a person at the keyboard. Additional evidence is normally required like CCTV or these other things. Absence of evidence is not evidence of absence so not finding a trace does not mean it didn't happen. So for example, anti-pharynzics is becoming relatively popular which means that traces that you would find in your investigation might be removed by the suspect so you might not find anything but the crime still happened. So you might need to look for other sources of evidence.  Up to a certain point. The ultimate issue, the expert is not usually allowed to make an opinion about the guilt or innocence of the accused. So the investigator themselves cannot normally say this person is definitely guilty or this person is definitely innocent or not guilty I should say. But some countries like Korea kind of thinks what's your opinion about the guilt or not guilt of this suspect. So be very careful about giving your opinion on whether somebody is actually guilty or not. Stick to answering the question that the investigator has posed to you. So kind of a report. Make detailed documentation technically because you might jump between cases and it could be a long time before you get back to the case. Make sure it's very technically detailed and then consider the purpose of the report. Who are you writing for? Make sure that it's not technical usually unless you're writing a technical report for somebody else. Brief report for communicating progress comprehensive technical report for other experts or an expert report for the court for example. Just make sure that you know your audience. Use terminology geared toward whatever audience you're speaking to and define all of your technical terms. Any technical terms you're using either put definitions in footnotes or in the appendix. Reporting. Also in reporting develop conclusions. Have a logical argument for each conclusion. Use clear and consistent visual style so the same font style and line spacing throughout. Don't copy and paste or if you do copy and paste make sure everything has the same look. Number paragraphs for easy reference and read sample reports. The best way to write good reports is to go look at samples. Yeah, so that's it. Like I said, reporting and documentation in digital forensics is probably one of the most important skills you can have and really it's just about communicating your results. Can you communicate your results effectively and convincingly? That's really the major point I want to get across with this. Make sure you're documenting and reporting well. It's one of the most important things you can do. Thank you very much.