Categories
Online Marketing

Rethinking packaging, development and deployment

I’r going to talk about the tool sets that I’ve been using for the last year and a half called Nicks and how it applies to the whole stack of packaging development deployment, basically like using in Python. We all know it’s a quite a depressing topic, but it’s getting better and one of the main things that I really really really hate about.

It is that we have the setup dot pipe that is dynamic and whatever you do, we have to run this dynamic script at least run the egg info command to get something out of it, and that’s why, for example, we don’t have dependencies on the pipe I And so on, and so on and for example, no J’s community has these J’s simple JSON file that is static. You write it down and, and you can easily parts packages and do stuff with it, but there is hope there is the pep for to 6 meter data 2.

0, which specifies basically the JSON media data for packaging, and hopefully people will then generate this file. Put it into a distribution with with the Python source and we will have static meter data available it’s in the draft mode. So who knows when this will get upstream but yeah? There is hope – and the second point is – we have a lot of legacy infrastructure which is kind of connected to this set of data.

But there is now Python packaging Authority group, that’s working on this and all the contributors, and I think they really deserve an applause for they work. And then there is this scary third part of the problem. These are non Python dependencies and this is this. Is the problem that every community tries to solve by you know, building an infrastructure to package all the other stuff that not just Python, and we all share this goal, but maybe maybe it’s time you know to to to look out and find take something else.

You know nowadays, JavaScript stack is basically inevitable. You have always JavaScript stack in your tool set and you know we can either build all the the the tools in Python to process JavaScript dependencies and so on and so on, or we can take the JavaScript. Our tools said to use, but then we need a tool that will actually package Python in JavaScript right for our application, and then we might even other things.

So so mixed project was basically started 11 years ago and it was developed by L code Ostra. As part of his PhD and the PhD talks about dependency hell and and how to approach that – and it was done in a university in hotel in Holland in a functional language department. So the idea is to take functional language for moral thinking and applied to the packaging problem, and it turns out it’s. It’s really really really fits the problem, so basically mixes two things: it’s a package manager and it’s also the language which we also call mix expressions.

It’s a very minimal language. It’s basically a configuration files plus lambda functions and it’ll be a little bit of other stuff. It’s lazy, evaluator! That’s something that we’re kind of not used in the Python community that much and you have to get used to the whole thing that when you actually something is actually touched, then it’s actually evaluated, and that gives it a really a lot of power for a configuration Which I will show a little bit later, it’s a standalone package manager.

You can install it on any POSIX system, the visual support we have for Linux, Mac and FreeBSD. There could be it could work on Windows if a company will sponsor that work. But currently it’s the support is basically discontinued yeah. This is so so. What is a purely functional language? I will give a very vague description in in sense of the software package, so basically, the software package should be output of a function that is deterministic and it only depends on the functional inputs without any side effects.

So when we describe the packages in Nix the the meter data that we put on those files, that’s the only thing that should affect the package and not nothing else, and we call this purity mix. So there you see for an example package. This is the prefix where the package would get installed. Our slash sneaks story is like a flat repository for the packages, and then you see the cryptographic hash as how one and then the name of the package and the version.

So every package is stored in this separate folder mmm and because we want this result, the outputs to be to be deterministic. We want to make it immutable, so the whole NIC story is mounted as read-only just to be sure that nobody will touch it and all the times times are set to UNIX day time, plus one and so on, and so on and this this hash that you See there is basically the hash of all the inputs, so if we, if this theory works that it’s the the result should depend on it on the inputs, then if we hash it, then we can uniquely identify a package.

So so this is, can you actually see this? It’s a little bit. I hope you can, but this is like an example nginx package, how you would package nginx it’s a little bit simplified at what we currently have in the repositories. So at the top you see this is our anonymous lambda function. It gets high order function, so those are just. Another function was passed in and then we called the standard environment make the duration, which is the main, the main function that does all the heavy lifting and in there you basically see it’s like.

We call it attributes I’d cynics, but this is basically a dictionary and we pass it name version, and then we tell it where to go to download sources. We tell the dependencies which is called built in puts some configure flags and then some just description about the package and that’s and then all this is basically passed to to a bash script. That goes to different phases, and it knows what to do with this meter.

Data and what you see here, this is basically that’s what gets hashed. These are all the inputs to build and nginx. This is all the information we need and, of course, there is a dependency graph of the of the packages or OpenSSL dilip and so on and so on are also written in these enix. So this is like a quick example how how powerful Nix is? If you look, if you go they’ll be back, if you look at the of this this file, we want to overwrite the things.

Basically, the the lambda function at the top and Demeter data by the package. So we want to give a user of this distribution or package repository the power to to change anything. So the top, the top line, basically overrides the lambda function with something new but is probably fell asleep. So basically it overrides the lambda lambda function and we can. We can say: okay, let’s, let’s take another open, SSL and feed it into, and then we get a new engine expeced which, which is a different, open, SSL version mmm, and we can all write a derivation itself and, for example, at the bottom example.

I have I over I’d their source and we can, for example, take nginx from gate and this this is you what you can do in the user space right, because sometimes you you have to change what the upstream does so so to install Nix on your distribution. This is like I mean just from security point of view. People will like go crazy, but you can download the script and see it’s not doing that much and you can run it yourself, but basically this is the easiest way to install it and because everything is stored under slash sneaks, you can just remove slash sneaks and You don’t have your package manager anymore, and you also have to remove the profile and you’re in your user.

Ok, so so this is. This is basically where, where everything comes together and there’s a lot of things to explain around how the NICS works so ok, we say that we have slash, sneak store and inside there are the packages and you can see it’s version and Firefox. So somehow we need to get these file system here here, that you are used to nowadays right and that basically, is then joined together into an user environment which you can see on the right – and this is this – is basically your environment with all the binaries, our Libraries are stored and under slash bin, slash leap and so on, and because we have this set of packages, will it be cool that we can have multiple of those, not just one on the system.

So this is what we have so called profile. Cynics like. We have, then, I will talk later about Nick size, which is distribution, builds on top of the package manager and we have a system profile there, which is basically your distribution. But then each user gets a profile and you can define it can create profiles on the fly per project and each profile has its own life cycle, of how you install packages inside and upgrade and and delete them and uninstall them and and basically then, the profile.

Also has a whole history of what what’s changed. So basically, when you install a package, you would get a new user environment with that binary inside and the profile would get like an another version number in the history and basically the last thing that you actually do something to the package manager. Is that sibling, Nicks vernix profile default will then at at the end of all operation, change to the new user environment and because ceilings are atomic in in POSIX.

That means that we have atomic operations of installing upgrading and uninstalling packages, and then you see on the left, you see that each user, then yeah has its own profile, and that means that users without root access, they can install packages for themselves. Of course, you can disable this if you want, and so on. So one of the really cool features is that Nix is source and binary based collection of packages.

This is very unique and the way that this is actually works is that we have a so called built farm called Hydra, and we built all the packages about all the packages there and basically the because the hash basically provides the basically unique, uniquely identifies the package. You can go as the hijra server or do you have a package with this hash, and if it has this package it will fetch the binary and if not, it will go and compile it.

And this is something that companies they then used to to set up Hydra at their own servers and have their own, like basically continuous integration tool for building the packages, and there is now all in the Nick’s 1.7. I think there is also support for SSH. So you can do the same thing to the SSH protocol, not only HTTP. So just I don’t know if this is going to work, but let’s try it out it’s a little bit yeah.

So basically like this is nixar, so it’s a little bit different than if you only use NYX but like my vim binary, then points to the vim to the vim binary that is stored inside the next or I’ll. Let me show you next or just how did you see that there is a bunch of stuff in there so yeah? This is. This is the whole thing and, for example, if we look at if we look at the linker of vim, you will see that all the dynamic libraries points to precisely one package in the nick store, and that makes it very deterministic that you, you know for sure That if you build this on two different machines, you will get the same result if you use the same source of Nick’s packages.

So right, let’s talk about Python mmm. Of course we have also collection of Python packages, and we have this. Have this function called build fight on package, which is basically a wrapper around make the duration that knows about these two tools and setup tools, and it works a little bit. It’s quite designed and then to make the duration – and this is like, for example, how you would package pillow, provide the dependencies source meter data and build vitam package will know how to run the setup I built and then setup.

I install at the right phases. You can check inside the next packages repository how it works. It’s just like 200 lines for the whole implementation. So so, when you have a lot of packages, for example, I also do a clone development and we have like 250 packages. You don’t want to do it by your hand, so there are basically two two tools for this Python. Tunics is basically just goes. There grabs the tarball gets the hash and splits out a template that is very generic, and if there is something really like non python dependencies, then you will have to fix that on your own and there is this cool tool called pipette unix, which will also be We will be working on during the sprints there’s quite a lot of developers here that tries to handle all the edge cases and automatically basically fetch packages from pypy and then generate these NYX packages.

For you – and we have these tools for note. We have no judge makes and – and we have our and so on – and so on right. So, let’s, let’s packaging, let’s move to development right, so wouldn’t it be cool if we had a tool like virtual environment but on the level on the on the layer of the package manager, not just for Python software, so you would activate environment and you would get Like geeks and all the other non Python, basically dependencies in tools available and that’s what Nick shell does so, basically how Nick shell works is that it will build all the dependencies of your package.

It will source all the information it has about those and instead of actually go and building this package, it will get you into this shell that it’s in the shell that it would actually build the package. So you have everything there available and there is a cool. Well, not really hack, because it’s also meant to use this way. But there is a cool feature that you can say that you’re not building any package.

You said source to no, and then you just provide the build inputs – and you say Nick shell – and you only get these dependencies available in your shell, for example, and in this right. This works on unemployed system, so this POSIX system. So you can give this to developers and they will get always the same environment with the same gates and and so on and so on. There is also a flag called code, pure so by default.

Nick shell will inherit your current environment and you will have all the tools available and pure basically means that it will not do that it. You will have only the tools available that you list in the build inputs. So, let’s I’m sorry for them. I hope you still see something, so this is basically activated Nick shell. I mean I I did this before on my laptop. Otherwise it would go and download those packages from from Hydra, but the network here is a bit flaky.

So, basically now I have it available. Well, let me just see that file yeah. So now I have get available and if I do pure here and then get it will say it’s not available because it will not inherit it, and this is one way to make sure that you have all the tools in your nick shell. So the same thing goes: this is, I use this this trick to actually install media core on centers, because I just didn’t want to bother with Python there.

So I just use the whole Nick’s like a stack of packages and use Nick shell, and then I have everything available in run virtual and install and that’s it. So the same goes if you have a Python package, basically all right. So this is, for example, a Python package of this is one project that I did like. I have gstreamer in there d-bus and all kinds of things that are hard to package normally with Python and, and there is of this code trick, we call we have a like – we have a variable called in Excel, so when you actually run the shell, this will Be true and we can act the extra dependencies in this case and if you only build the package, those dependencies will not get into the derivation.

So so then, okay, then okay, we have this set of packages. How could we extend this idea of a functional language to to the whole operating system and build a distribution on top of it, and it turns out that, yes, this works really nicely and when you think of it, like a configuration, files are basically just one file And software package is a bunch of files. The only difference is that your Linux distribution will package software for you and the configurations.

Files is what you will not really write yourself or change some default, but Nix Nix is basically the language that we have now. So you can use this language on both sides. Hmm so Nick says basically is a stateless. This uses stateless approach to configuration so, for example, in puppet and in chef they have declarative configuration in front, but at the back, basically, they still execute a step-by-step imperative.

They check if nginx is up and if not I mean that Network started and so on, and there are a lot of edge cases to cover here. So a lot of errors that you can hit onto and here basically the way it works is if something changes. I will show later an example of how how to do a system D process and if any parameter to that system D process changes, then it will know that it has to restart or real that process.

So it all boils down to these data going through these functions, Enix and and when something changes it will do an update. So here you can see like a minimum configuration and I just like configure moanin and you then say Nick shires rebuild switch and it would activate and get the machine into this state. So one of the things that’s also good to mention here is that mixes is basically DevOps from the beginning.

You want going chains on configuration files by default. You have one file to specify it. What is what you want, your state machine machine state to be, and you execute it, and then we have a tool that basically does provisioning of cloud servers and so on. On top of that, so, for example, if we wanted to use pyramids, which I’m using my day job, basically we would import that the default that makes file that we were using before for development.

So the project is already packaged, but then we would say package rights tests and we would write the production any file to Nick store. That’s right X is basically a function that will write a configuration files to the next or then we will do a clarity of Li specify. Ok, we have a process system D process that should start with pyramids Ben serve and pass the production in E file and, for example, if the production in e file changes here, then this hash of will change of this service, and it will know it has to Reload or restart it and so on, and then of course, on top of that, we want to use a provisioning control right, and this is like the minimum example how to how to them provision excise machines.

You install Nix ops, you specify, for example, this is a trivial, a trivial machine, so we have like a web server running Apache serving some static files. This is like the physical configuration and then we have the logical, which is basically. Where do we want to deploy it? We say: okay, the backend is VirtualBox, giving me one gigabyte of memory, and then I have like a trivial hetner, because sneaks up supports like Amazon, Pfitzner and now also Google compute engine, it’s experimental bits and all Korean.

And then you would say, create created this configuration and then deploy it and it would actually provision the VirtualBox and and you would have Apache running in your VirtualBox. So I don’t really have a demo for this because it’s going to take a while to actually show it, but just to show just to show you the whole stack. So when I would actually deploy in my projects, then I would have three files, one into full techniques, which is for the map, the development and the building of this project and developing example, machine which defines the physical and then the physical state of machine.

At the end of VirtualBox, or can then also the history, so it’s four and if we look at all those files, first default, it’s a little bit straight, but basically there you have just like build packets, my name sources current, so director II and dependencies pyramid – and This is this is, for example, configuration of machine that would lunch of chromium full screen in kiosk mode and serve the pyramid.

So at the top you say we say: okay, import. The package then enable each server enable display manager, window manager and sets etc, and the desktop manager with provider or all command, which is basically waits three seconds and then run chromium at a local host 8080 and then lower. You see again the configuration of the system D service for pyramids very simple example, and at the bottom you see how we define declaratively, a user called guest that we use for the for this.

For the chromium, graphical interface and it’s. This is basically, then the whole configuration of the Machine, so you can see like you package. The package was about 10 lines. This is about, I don’t know 100 lines or something or 150, and the VirtualBox is is like a few lines also, and this is – and this is the whole packaging development and deployment stack, that you then use to to actually and let’s might still try to so Now it’s tries to download the basic image and it’s yeah.

We can wait for a little while, but there is no point so basically now it would download first the image. Then all the dependencies configure them. It configure launch the VirtualBox copy. All those sneaks store packages inside and then activate, and you were to get the fullscreen Chrome, which we the pyramid, application running. We are having the cycle mixer springe in slovenia and Leblon aware i’m thrown in from the 23rd to 22nd of august.

So this is a great opportunity to meet the developers, talk to them. The decor and the Elco toaster will probably also be there the core developer – and this is this – is basically the image from the last year just to to shameless plugs. I wrote a blog post a little bit more into detail. Why why whining sighs tries to solve this problem in the little better, wait and other other solutions, and I had a talk at forced them about Nick’s OS.

It was more focused on Nick’s eyes, so there is a article on YouTube if you want to read it and, of course, well check it out on Nick’s eyes, dork and you’re welcome on freenode to stop by and say hi and meet the community, no questions yeah. So it looks quite interesting – and I didn’t know Nick so as before, so it looks like my puppet, my vagrant and everything I can throw away and get Nicks and it all runs out of the box.

Why isn’t that like widely adopted? So so far? What do you can you mark out? What are the differences, what are pros and cons, and so on? So the question is: if why did why? Is it not that popular yet yeah it comparison to like vagrant and all the established tools, which are, of course, very different, have different ESL’s and so on? So of course, it would be awesome to have one approach to this kind of problems.

I mean the short answer would be: we need more marketing people. The long answer would be that actually now for about a year or two, we have Nick shops and a Nick shell and so on, and now I think finally, this is this stack is ready to be used and one of the biggest two companies is logic blocks And Zalora, and they have about 100 servers provisioned with this and and the community is really growing the haskell community.

Basically, there were a few blog posts in the last few months explaining how people develop haskell with Nick shires, and it went very viral, and I would love that the same happens to to the Python community. If we actually want to solve these problems – and I think now it’s the time – that’s you know – this is we’ll really see a lot of a lot of new users. You can see that a mailing list IRC and everywhere, and I hope that we get there.

I hope that we get to the same point. It looks really interesting. The you said that it’s supported on POSIX systems include Mac, yeah yeah, and we have we have quite a bunch of unhappy home, Brio X users that ain’t no use sneaks or credit packages. Thank you, but we don’t have that much freebsd users yet so I it’s more of a just one thing. Maybe was not clear what it does like. What are the benefits of it’s not a question.

It’s just as what I miss from the talk. What are the benefits of actually using in starting developing mix, using mix and with Python? It’s you get in our company. We got development environment, which was the kind of switch to continuous development environment like not only for deployments. We use the this thing, but also for continuous development right. So, each time a developer comes like in a snap of a finger, you have a development environment, ready and no virtualization right.

It’s just your system, so it’s kind of a lot different way and quickly getting started with new projects. That was a major boost for us cool thanks hi. Thanks for a great great talk, I had a few questions. One is that you mentioned briefly: binaries find uh. Do you provide, like the sneaks itself, provide binary? So do you expect the one wanting to use binary for deploying stuff with next to like roll, your own binary storage or something? Yes, so the Hydra project? Basically, you can host it yourself and then it will build the binaries of your customized packages or your projects in your company, and you can point that to the official Hydra and to your here, and it will just ask about for binaries and fetch them.

Mine is more like a security related like I say you find you know things that would never happen. You find a bug in open, SSL or something, and you get like like counting, is like. If I run normal like say, depending upon the books, I get the new openness cell, which has to say ABI competitively, and our only thing I need to do is just restart my services for them to end up in the same by using the newest version.

So how do you – because I saw that you linked specifically to those like a certain verses of software? How do you solve this index? Dude, that’s just mean rebuilding everything or, and so um yeah. This is this is one of the problems that we so basically have. If you, if you change the OpenSSL, then he drew has to recompile all the binaries. This is not like the last time that was a hole in the OpenSSL.

I think it took like one day or something and that’s of course, unacceptable, but we have now an option called. I think it’s called security updates or something in exercise, and basically there is a hack around thing. So, as the hash will not change, so you don’t have to recompile everything, so you say the regional, the regional library was open, SSL and the new one is open, SSL, bla, bla, bla and, and that will replace older everything that uses this open, SSL library and It will not go and rebuild everything, that’s needed, and that way you can really really quickly.

You know update your server and because, if you’re using the NYX OS, it will also know that which which processes were using open, SSL and go and restart those. The the hash of a mafia package depends on its inputs, which is say sorry Saudi hash. For your package depends on the inputs, which say for a pure Python package would be and Python itself, so you can rebuild that and get the same version, but is there? Is there anything that also ties it to the version of the next tool chain that you used to build it? Because if there was a new feature introduced in the Nix tool chain or something is that? Is there a way of basically rebuilding a package of like two years ago or something exactly as it was at that time? So if basically Nix upgrades or something yeah yeah, but that’s like the whole Nix is upgraded separately.

So it doesn’t affect the Nix tool chain. But everything else down to the GCC and Julie and so on is basically a dependency then of your Python up package. I’r not sure if that answers your question and so um, I believe the Knicks toolchain sort of, if you build a binary, will change to change the our path for some in binaries etc. But if the so, if they, if that behavior slightly changes, is something like that, can you rebuild its especially diversion of the next tool chain that are used in a part of the hash, just as a as its dependencies are? There’s that part of the dependency? I’r not sure I understand the questions I may be chocolates.

Yeah come to me and we can hear okay any more questions. Then your slides, I missed a version definition when you listed the dependencies where are they defined like so. Basically, this is kind of like Ubuntu style, where the name is. The version is tied to the name and the name. Basically, the version is not important in UNIX at all, because that’s just basically a meter data and when, when the mix packages repository changes, you will just get the new package and inside there.

Of course there is the the version name, but we don’t do any. Like detection or something about the versions, you showed this plan example, so I want some specific like GStreamer version, and it was part of the name yeah. So when we have like, when you have like GStreamer, which you have version 1 and the version before 1, then we have basically two packages and then you can pick which one you want to use and you can always override the source and get another version.

If you want to change the upstream default for your project or server or whatever, what is the difference between Nix and docker? Let’s so, basically, docker tries to isolate the environments from your system right and provides a very nice API. On top of that, while sneaks basically tries to solve the packaging problem and configuration problem, so these are not like, I think, they’ll. Those two things go together, you can use.

Nix is inside the docker. If you want, of course, we’re also using the darker to solve the packaging problem and providing a huge binary blob, but that’s another discussion and in Nix you don’t have to do this. You don’t have this problem, but it’s still nice to have. You know those lightweight containers and to experiments around that and so on. That’s very short answer cool. Oh one make one question: yes, lon! Do you use sneaks in the web development because you showed a lot of stuff about the OS dependencies and OS package dependencies and even if python dependencies, let’s say right now it’s for the backend, but in our company we have a lot of struggle of packaging and Deploying services with a lot of let’s say, for example, JavaScript with Bower and so on.

So how does Nix apply to that? I know that you can declare your own sources and it can be JavaScript sources, but do you have any, for example, JavaScript repository and how does it apply to the package so that, for example, Python code finds those JavaScript libraries and so on? Because this is our crucial problem, the Debian, for example, can handle their own dependencies and it’s fine. You can do you, your own pipe people repository and it’s fine, but gluing beep and bother, for example, that’s a struggle and how does nicks apply to that yeah? That’s! That’s that’s exactly where Nick shines really good, so we have a tool.

Bower tunics. I think it’s called to generate Bower packages to generate nick’s packages from bower upstream in the next packages repository and then you would go in your project. Do the same for all the extra stuff that you want and basically the NICS knows all about about both sets of packages and you have those available and then you have all the Python dependencies available and then you use the DES make derivation and Nick shell to Develop on that and it will make it it will expose those packages for you to use.

It’s really hard to explain this without an example. But there are, there is a blog post. If you, if you google around, you, will see how it’s used for notes packages for Bower, I don’t think it’s, but it’s the same thing I mean it’s just the front end, and this is exactly where Nick’s really shines when you have to combine two two stacks Together, you


 

Categories
Online Marketing

Learning Chess from data

My name is Tom Ron and I will present the Rosati who couldn’t attend. You can see both our slides, github nib m-learning chess. So what are you going to talk about today? Is learning chess from data, but what everyone wants to make computer we’re a bit modest and we just want to make the computer play chess, okay, um! So, what’s on our mind, we want to know if a computer can learn chess only by looking at data of chess games.

So there are many questions that can be asked in this domain. We’re going to focus today on two of those questions. One is giving a board state: can we make okay, we do a specific move. Is it a legal move and that one is game over giving a board state? Is it a checkmate? Is the game? Has the game ended? Of course, if those are possible, then the sky is the limit, and what else can we imply learn about other systems, maybe some physics and other things? I want to mention this that this is a work on progress, we’re still working on it.

We have additional and further ideas, but I came here today to show you what we have done so far. Ok, so, let’s start and what will know about chess – and there is first done at this – there is some constant tension between feature that we allow ourselves to know when doing this learning process and features or other things that we wanted to know. But first we know that there are two sides to parties who play the game.

We know that could and with either one winner or a time, no two winners or other situation. We know that the board is eight by eight and doesn’t change through the game. We know that there are different pieces that have different unknown properties such as: how can our the species move? Can they eat other pieces? What happened to them when they get eaten, maybe promotion, four pounds and so on? Okay, okay, so the data set we worked on is given in algebraic chess notation.

If you have some time in the end, I’ll show you how it looks like, but the idea is that every square on the board is represented by a letter, A two to H and the number one to write and the move is basically done from one square To another, usually only the two square is written, and while there is only one piece that can do the truth or if it’s not clear than the both the two and the from square is written, we ignored the metadata on this set, such as Flair, ranking, location And so on, we had just a bit more than one thousand one hundred thousand games with full or partial description.

There were many games that didn’t end. I do it checkmate or tie just ended in the middle and had a bit more than eight million most with distributes tribution between the different pieces. We use a pie tomorrow package, which is called chest. It allows us to parse chess McGavock notation and provided the board status provided methods like is this as chances making so on, and some pilot mainly site by some mud float for plotting and the 9pi.

Basically, we thought we would head. We would have not enough or big enough data for doing MapReduce and all we build it as your first we’re going to to do MapReduce, but for this time it was enough to do it on a single machine, maybe some in the future. So this nurse think we wanted to do the first question we addressed before the game on. Can we do a simple move, so the most naive think would be okay.

Have we seen that smooth before? By saying this move, I mean the board status and the move? I want to do if so, yes, good, do it no try again, maybe there’s not enough data, so I haven’t seen it move or maybe it’s not legal and therefore I haven’t seen it. It’s not efficient on neither running time or memory so well and, of course, there’s no learning down here. So, let’s move to our second try you and so for each move for each move.

We made. We checked the difference from the to describe farm square and to square, and we drove the diff histogram. For example, if the pound move two steps on the first time a pumpkin move, then the X difference is zero and the y lift is two and we did some adjustments of the black and white. So it will be relative it, and now you can see those histogram. So this is a least 1/4 pound a pound can move either one step forward, two step forth or one step forward into the side and two to each side.

This is how the Bishop move. This is how the workman only stretch. This is how an I night room it’s a kind of nice, the king, and you can see that the king can move one step to each side and cast a link to one of the sides. Okay, so the price of these approaches, it’s very good for common moves, and it’s getting better as this data size files, of course, and it’s fairly time and memory efficient, we can code all this really really simply and, however, it doesn’t take into account the word status.

So if there are pieces in the way, I cannot answer this question. I can answer it strongly, so so it’s a necessary condition if we have enough data, but it’s not sufficient so did next. Take we did on this idea. Was that for each move we have not only looked at the move, dick, but also into the surrounding of each piece. So you can see here and we have three possible states. One is occupied, one is 3 and Y is out of the board.

If we’re standing off the edge of the board, then some of the squares ma can be out of the board, and this is some of the results. We got aggregating those histograms and doing some working on it. So, for example, for the Quinn, if the Quinn wanted to move to at least 2 steps, then the square above it and on the right must be free, and that makes sense knowing the chess rules. Another thing about the Quinn: if you want to move seven steps downward and right, then this dis means that she’s moving cross of the board.

Therefore she must stand in the court in the corner and this square must be free. Okay, cool um. So is the the King: if there is custom link and the King move, then the one near it should be free must be free also for the pound. If the pound go goes forward, and, oh surprisingly, nothing for the night and no chess rules, we know that the the knight can jump over pieces. However, not having this rule doesn’t tell us anything, because maybe there is not enough data.

Maybe there is nothing relevant, but that’s nice for us, knowing the rules of the system that the knight can skip over pieces. Okay. So the premise of this approach is also. We keep it efficient, not too much. Doesn’t that win it and we store and of course run time we take the surrounding into account, so we can argue whether the surrounding is one reduce to reduce more, but also doing this says tell us that we have the trade-off.

I talked before that we have some external knowledge about the game and about the environment. We are in so again this trade-off and the main comp about this or these strategies is that to assume that moves are independent of one another and while it we can usually say that true, it’s not true for all. The moves, for example, cast a link and a kink and not to castling if there was just before or if the King moved before, and there are several more more moves that are limited by this limitation.

So, okay, this is how we’re going to discuss about moves today and we still have an idea to improve it. But but we know that this gives you roughly good results, and it’s of course, let’s generalize, which I mentioned before. Okay, so now for learning checkmate – and here we ask giving state of a board, is it checkmate or not, we’re not asking whether if it is a checkmate who, on the black or the white, we might be asking that in the future? Okay, yeah, we used several datasets 10k a 30k, a 800 K, the training set.

We use 40 % of its, we used for training 60 for testing, and we had 50/50 of true and full samples. Of course, the real distribution. The probability is much less because you only have one checkmate at most at each game, maybe less and we use SVM classifier with linear kernel. We won’t probably won’t use it in the future, although we had some nice results. Just with this naive, classifier now crash course about classification for people who don’t come from this domain, really crash course um.

I know I speak too fast and I apologize. We have a lot to talk about tonight. Ok, so we start with data and then we extract features and we’ll talk about the features we we use in a minute, but features can be current. Reachable and features categories met, many others may be. A combination may be. The features depend on one another. There are models for each problem and then there is a classification.

Some of the data is used for training some for testing some. You predict we use side pipe for this mission and actually we’re able cipher is very, very general, and we were able to use very a code that we used before for a total of different tests, just applying our feature extraction and pushing it to the classifier. We had and actually another good feature of cyber. It is very easy to tackle between different classifiers.

They all have trying and estimate and fit functions so just play with it. Okay, so here again we have a few versions. So the first version we had was a simple count, features what what that means. First, we counted the number the total number of faces that were on the board. Then we counted how many white pieces, how many black pieces for each type of piece we counted. How many piston world, for example, door, five white count and three black pants, so we had total of eight pounds.

We also counted the number of different white points, five and three black pounds. So this process to something that well, is a bit better than a monkey with accuracy of 70 we had for the cases forward checkmate. This is a checkmate and we were four not checkmate were able to say in 59 percent of time that it’s not a checkmate, but then we had some misclassifications so well. We want to be much better than a monkey, so we moved to the next thing and the next thing was using the previous features and you think that about the first-degree neighbors in this case we didn’t looked out of the board and we excluded it.

But we’ll do that on the next versions, and so we looked on that of empty. Is it of the same side of the piece we are looking on or from other piece around it and we aggregated the data for all the different pieces on the board from each party, and we also built some boolean features based on this data, for example, is Is there more pieces around me from my side or from the other side? Is it mostly empty and such features, and we did had improvement? We can say see that the checkmate rises to now able to classify well on 87 %.

Remember we had 59 % previously, so we’re doing much better now, and this third version was doing taking the same as before, but extending the radius to two and three. This make much more features, however. 300 features is not that much and maybe in the next versions. We can add more features without it’s not as much and but it’s I said four, it makes it less journal. I generalize, as we assume something bigger about the game and the board, and indeed we we had improvement.

Curacy is eighty nine point. Five and both has its improved. We can ask further questions if increasing the radius to four five six eight would improve it. I personally don’t like this approach and don’t want to do it because we assume more about the board and about the game and about the system as a whole, and I would rather think about or suggest different features so having this benchmark. What what we think about or what we suggest want to do in the future? Okay, so test different classifiers, you used SP and maybe changing the kernel, maybe think of nearest neighbor, may be using some deep learning as a password.

I don’t know this is a small change, but I think that it would have interesting effect and the result integrate out of the board. The edges of the board into the different counts, we’re doing. Okay asking who is the winner, which I mentioned earlier? Is it the black the white? We can either approach it as multi classification problem, where the white one, whether the black one or it’s not a checkmate or we can use it just as black or white like if we have checkmate.

Is it black or white who won okay, asking whether a specific situation is just not necessary, checkmate, complex, smooth detection, okay, history, starting writing the history, or maybe we can think of other features you have to represent us what we have done, maybe, for example, counting how Many time this specific piece moved or something else, of course, as I said in summation, we want to reduce the data.

We have external data, we have on the game: okay, more efficient parsing. We use the chess package which it, which is nice, but on some cases we did something like bootstrapping. We took the data we put it into. The chest will produce what we wanted. Maybe we cannot not do this lap and just do it ourself scaling. So for classifying the 800,000 samples, it was really hard for our computers and sci-fi.

It eventually happened, but it was hard. So maybe we need to think about distributing it about using something likes like shaman that was mentioned here earlier. I think there are many tools that we can think of and surprising. We have time for question and thank you for listening so far, but and of course the question is whether we can like to honor system. Can you learn physics just by looking at me? For example, Chesson Giants generally are stateless.

We just get a position and make estimations neither except for the first part of the game, which is very easy, any stage just the Inquisition and not that yeah, but knowing what they can do doing strategy we’re focused on you. You


 

Categories
Online Marketing

PyCon.DE 2017 Thomas Waldmann – The BorgBackup Project

So this is about Bart back up it’s about two and a half years old project, but the software is quite a bit older, because the project was forked from another project called attic so attic. It was four or five years old when we forked it so it’s quite old, but not very well known yet, because attic did not get much advertising back then some guy who found it in 2013 from Greece, I think, wrote about attic.

I found the holy grail of backups, so he what was quite impressed by it and from heat was the same and I found attic back. Then it was quite kind of oh, that’s, nice, stuff. Let’s, let’s use this, I was using our sink before and I just searched for something more modern and after looking at a lot of tools, I found attic and it was somehow the best and it was in Python. So I hacked on it and we had to fork the project, because the original project was not going on quickly and there was also no cooperation, so pork makeup is kind of the fast going attic somehow now this is a bit about me.

I am doing Python since about 2001. I think it started with my mine wiki project. That was basically the reason for me to learn Python also doing Linux, since it wasn’t floppies, free and open source software. These are some of the projects I was heavily involved in so the first one you maybe know from the python.Org wiki it’s running on Moin Moin, original, Auto sitting here and I okay same story yeah.

The second one is a dynamic DNS service software written in Django, be pasty is a paste pin that can be used for binary stuff. Also, VPN gateway is not a software project. It’s basically just some configuration and porkpie copy. You will soon hear the details. This is my email address at my company and yeah, I’m doing Python development. So if you search for freelance remote develop or talk to me so about boric yeah, it’s a backup tool.

There are dozens of backup tools, so there should be something special about it, and the special thing is that a lot of tools are somehow a pain to use their idle, slow or not always working or you can’t use them when our platforms – and so this feature Said somehow, it reads rather stupid simple, but you will see this is the special stuff somehow about boric. So about simple. If each of your backup is a full pack up, it’s it’s very simple to manage.

If you want to delete one, you can just delete it and it will not influence anything else. If you have the usual full and incremental and differential stuff, you have to be careful what you delete, because it might influence other backups. If you want to restore stuff, you can just do a fuse mount and basically copy your files out of the backup archive or search for your files. So you don’t have to use a lot of command line, commands to find your stuff easy pruning.

You can basically define a policy, I want to keep so, and so our only backup so and so weekly backups on so daily backups, and it will just that policy. It’s a one line of command. The tooling is also very simple: you have just the boric software. You have SSH for remote stuff and you just write a shell script and that’s it. It’s not a complex thing. There are also also quite some good documentation and main pages, and so on, so you can look up stuff.

We offer a single file binary. So if you just want to throw it on a machine and it should work, you can use that, so you don’t need to install header files and compile stuff and to keep check out or such stuff. It’s just a file that includes everything, even Python and all libraries, and also it’s simple. If you can just use the same backup tool on all your machines, so we support Linux, BSD Mac OS X, even under Windows, you can use it under psych win or with the Linux subsystem and for Windows 10.

There is no native Windows support yet because we have no windows developer, but we could do it if somebody would care for it. Also. We support a lot of file system features so extended attributes, ACLs and so on, and even if you have a strange architecture, there’s this big endian, it also will work so there’s quite a lot of testing about a point efficient, it’s extremely fast for unchanged files.

So it’s always a full backup, that’s done, but it will not feel like a full backup, because it’s so fast for unchanged files. It will basically feel like a differential backup. Although the backup archive includes all the files, not only the changed ones, chanty table keishon is important. It’s that not only DTaP like a ting complete files if they are completely identical, it’s enough. If somehow a piece of the file is the same.

Also, it’s not caring about file names. It’s just looking at the content, we’ll see more details about this later. We also have flexible compression, so we can have a have it either very fast or very good compression. It’s not flooding your file system cache! If you, if you read gigabytes of files, all the time while doing your backup, usually your file cache from the operating system takes a lot of memory, and maybe you basically flood out other stuff that should be in the cache just by doing a backup, and we Avoid this by some special system calls it’s not only in Python.

We also have a bit of C and sizin for being more efficient with memory and also being faster, and we have hardware accelerated cryptography just by using open SSL so about safety. There are a lot of checksums. There is some CLC 32 on the low level, basically and there’s also a lot of cryptographic, hashing and making going on. So if something is corrupt also, we will notice it. We use transactions.

So if you start a backup and somehow the machine crashes or the connection goes down, there is no problem, it will just roll back to transaction. We are doing lot of thinking to the file system, atomic file system operations and the whole thing is like keep a key value store, but it’s not like, so we always append at the end and at the beginning we don’t change stuff, except if we delete it. So that’s a rather safe thing.

If something goes wrong. There are also check points while you do the backup. So if you have a longer in backup that runs for days, it will do a check point now and then and if something goes wrong, you will just. You will still have that stuff that you push to the repository. You will not have to completely start from the beginning and you can use off-site repositories. So if your house burns down that’s also kind of a safety feature, it’s also secure.

We are using authenticated encryption, so basically the threat model. We don’t trust the repository server. It could be at a hosting company or something so if somebody looks inside your repository, you should not see anything because everything is encrypted. The metadata at the data, because it’s authenticated encryption can also detect tampering. So if somebody is playing with the bits and just toggling some bits, we will notice it because we check this.

There is SSH as the Transport for remote repositories, so basically you get all the security properties from as its age. You will have a secure connection and also, if you use key login, you will have a good authentication and you don’t have to care for an extra services security issues. Concerning the network exposure, we also support a special append-only mode for repositories. It means that nothing will change that was already there.

We only append at the end. So even if some bad guy is owning your client machine and using Borak to delete stuff, he will not really delete it. The delete will just be recorded at the end, but nothing at the beginning will change so you can just delete some files and everything will be as before. It’s free and opensource. We can look in the code about the crypto or some details. Of course, we encrypt client-side, because the server is not trusted metadata and data, its authenticated encryption, it’s the encrypt-then-mac mode.

This is the more secure mode and it’s counter mode of AES and H make sha-256 or since 1.1, we also have displayed to be it’s also. A hash or a Mac, it’s just a lot of fast form. We do counter management, it’s important for this counter mode, that you never repeat the counter value with the same key, and we have some sort of reservation going on. So, even if the connection breaks or something bad happens, it will never repeat counter values.

The key material is either on the client or you can also store it. In the repository in the in the config of the repository, the key itself is encrypted, so it’s no problem and the encryption is done with pbkdf2 in aes. The repository mode is a bit nicer. If you don’t have a separate backup of your key and we support both the old and also the new one of our version of open ssl from open ssl, we only use lip crypto with the crypto, primitive, so nothing complex, so that stuff should work quite okay.

The compression stuff is junk based, so it’s only a piece of the file, not a full file, usually except if the file is rather small. There are some algorithms, fast, algorithms, medium fast and rather slow, and you will get more or less good compression a nice thing with lsat, for is it’s often faster than if you use no compression at all. If course leads needs a little bit of time to do. The compression, but you have to store less data to disk or to a remote server, so it’s safe small compression more time, then it’s it’s leading for a compression in 1.

1. We also have this auto mode. It uses as it for a prediction. Basically, can I compress this file and if it looks good, then it uses expensive compression to get even more out of it and with Beaudry create you can even change the compression mode if you started with lsat 4 and later you want something stronger about this. The application stuff – this is one of the main features of Borak. You have to not only imagine it as somehow duplicate files in your file system.

That is one dimension. You might have copies, so you have identical files on the same machine. Of course, it will deter placate these files. Also, if you have a virtual machine, maybe and a lot of zeros are coming from disk or from the kernel. When you read that file, it will duplicate all those zeros. Also, this is basically the inner tablet. You know the application of the data set, it’s just dupes inside your source data, but there is also a historical deduplication if you’re, making full backups all the time.

Of course, most of your files will be the same and not change. Some files will change, but a lot of files just won’t change, so it will also deduplicate them, and you can also have data application between machines. If you move files from one machine to another machine – and you pick up both machines to the same repository, it will just read applicate it also because it already has that data or if you have the same operating system on all your machines or if you have The same data on multiple machines, so these are basically the three dimensions of this deduplication.

How does it work? It reads the file and then cuts. It cuts the file into a variable length, chunks. It decides by the content when it should cut. So it’s just the rolling hash, that’s computed and if the head says zero, it will cut the nice thing about this. You could also cut at specific positions, but then you have a problem. If your content is shifting a bit to the end or to the beginning, then every chunk would change.

But if you cut by content, then the cutting of places will also shift it’s very nice for virtual machine disk files, usually not a whole file changes, but only some sectors, basically in this virtual machine file, and it will only backup these new chunks and everything else. That’s still, the same is already in the repository. You can also rename huge directories and it will still have same content, so your repository is not growing.

It can look like this. This is actual data from one of my repositories and the knife. This is one so you see if I would have just used Tower, I would need 22 terabytes of disk space without Lisette it would be still 18 terabytes and with the dwk ssin it’s just half a terabyte, so most of the stuff was somehow the same. This is this historical deduplication and you see total chunks. This is basically the references to chunk.

Ids and unique chunks is way less because a lot of chunk references are referencing the same chunk in the next version. We will introduce multi-threading. Currently, it’s the single threaded and we plan to use 0 mq, so it will use more of your CPU, not just one or half half of a core. The Gil might be no big issue, because there is lots of i/o and lots of C code. So we can just release the Gil when doing that stuff, and we will also do some some crypto improvements and maybe go to open SSL 1.

1 as a requirement some stuff up our project. I have to hurry up a bit. We are using Python size and C for the usual reasons, see if it’s extremely important to save resources site in this more or less glue code and interfacing stuff in python is the high level logic of use. Cherry CI, it checks all the pull requests and all the branches and multiple price inversions we use PI tests and talks. High test is quite nice.

It’s not that much boilerplate like the normal unit test stuff, so it’s actually fun to write code, write tests and toxis on top of it running PI tests for every Python version. Pi, n F is also nice. If you want to have a specific python version. For example, 3 point 4.0: you usually don’t get it in your distribution. You can just use PI n to install any version you like, and if you want to find somehow problems, then you always use the oldest point release or the dot zero release, because there are the most bugs and people might even have that version.

So if you want to find everything, just use the oldest version and of course, if you are building something you distribute, you rather use the latest version, because that’s the best version. We also use a lot of little machines in automatics with vagrant, so we can test on all these operating systems and even a PowerPC. The Turing machine is possible using Q email and if you do that, you have way less surprises.

Oh, it doesn’t work on X because you have tested it, so it usually works pints dollars. Also, nice thing: it’s making a one file binary of all the stuff. You need to run your software, so there is the Python code inside the Python interpreter. All the shared libraries except the G Lipsy that needs to come from the operating system, but it’s quite nice. You can just throw it under your system and run it, and you are done.

You don’t need to install a lot of stuff a word about secure, releasing if you think about it, a lot of people just download some binary somewhere and then run it as root. So what could go wrong if the binary is tampered, it could even happen under transmission. Then you have a problem. So maybe, if you release software, especially if it’s binary stuff, maybe rather assign it with GPG, then people can really check if it is the same stuff that you have produced.

If you just publish a hash like a sha-256, it’s better than nothing but not much better, because the hash could also be tempered, and if you check it, it will of course match an attacker can also compute the hash of the fake binary. Sorry, you really have to sign it with a release, key that only you have setup tools. Scm is a nice tool, so usually you have to pump your version number somehow increase from 1.

0 to run point 1 or something this tool automates this for you. You can just use text in get and set up to its SCM will just compute a version from it, and it’s not only the release stuff, it’s also the stuff in between. So if you output this in your tool or you exactly know what a user is running and it’s no effort just changing a few lines in your project and you can use it things, maybe a lot of you know already.

We have some special stuff. We build a lot of automatically from our paths, so all our usage stocks and the main pages are basically extracted from Python code, so we don’t have to maintain them separately. If you have a readme for your project, maybe think of it as a elevator speech. So don’t write the installation steps into it. Just try basically to sell the stuff because people read it and then decide if they use your stuff or not so don’t put a lot of other stuff in it read the docs is quite nice.

It hosts your documentation and it even supports multiple versions of your software, so users can select whether they want to read talks about 1.0 or 1.1. They have nice mobile support of a PDF s download and they also use things and they pull your stuff automatically from github. So you don’t have to care for the hosting as Kinema is somehow it looks like a movie, but it’s not really a movie. It’s just some JavaScript interpreting a JSON file and you can basically see it typing you typing commands and the output.

The nice thing is rather small. You can just commit it to your repository and you can even copy and paste stuff from it, because it’s not a article. It’s just text output by a JavaScript and if, in the record you made some typos, you can just editor chase the file. You don’t have to record your article again, we use github, I think most of you already know this may be worth mentioning is bounty sauce.

So if you want to have a way for people to donate funds to you and make fundraisers or basically put a bounty on fixing some issues, you can use bounty sauce for it. We basically every donation. We get comes in over bounty sauce and I usually then just select some tickets and put some money on it. So basically the money gets distributed to the people who do the work and close this ticket yeah. My stones are quite nice for release planning and you can reuse your documentation for the github readme.

Also, we have a community repository where people can just say. Oh I’ve read written that nice script for Borak and then we can just link to them so yeah. The usual github features – the releases stuff is also quite nice because you can put all your binary since those close go there and it’s also based on attack in the repository yeah, the usual communication blogs. We have a mailing list, IRC Twitter, for support, discussion, release announcements and you can help.

We have a few developers currently, but could be more just try it. Maybe if you like it test, it find parks, improve Doc’s whatever. If you use Windows and if you like Windows, we have no windows developer yet so that would be a good thing or if you use it, you can also donate funds. We are bounty sauce and this is the home page and you can also grab me outside for questions. Do we have time for questions still I up? Okay, so yeah, so I’m in time, great okay, you can always you we can always use, for example, our sink or our clone to just copy the stuff elsewhere.

You just should not. You just should not update both copies because that causes crypto is used with the counters and stuff, but I think quite some users basically do first, the local backup and then somehow sync it to the cloud in case their house burns down or not a company. So that’s one mode of operating it. We don’t have direct cloud support. We just support putting stuff into directories or talking client-server over SSH, but you need Borg at the other end, so it won’t work with Amazon or something except if you run a server there yeah well, that there are multiple caches.

The question was about sinking caches between machines, usually the the local files cache is about the files you have on that machine. So it won’t be useful if you sync it to another machine, because the files might be different. There are also some other caches, but maybe you shouldn’t do that that somehow too deep into the internals there is one problem by the way. If you use multiple machines and you push your stuff to the same repository, then you basically bring the cash out of sync with the repository.

It’s like cache, coherency the usual problem. Then port will be a bit slower because it has to rebuild some caches first before it starts to back up. If we do them alternatingly. So that’s a bit of an unsolved problem. Yet no it’s it’s locked. It might be possible in the future, but but not right. Now, yeah yeah um, the call to not spoil the file system cache by pumping get gigabytes of data is F advice.

You can basically see okay, I’ve read that data, but I don’t. I won’t need it and anytime soon, so it basically just drops that cache and there is. There was some sort of a discussion, whether it’s good or bad. If we do effort wise, but I think overall, it is good to do it. There were some people with other opinions, but I think if you always somehow flood the cache all the time, that’s way worse, then, if you maybe effort wise something that that needs to get reloaded by some other process, yeah yeah, that’s a bit tricky.

The point is we basically do it like Python, there are objects and there are references to these objects and the fast processing of unchanged files works with this files cache and in the files cache it has the modification time or the change time. It has the size of the file and the inode number, and if all these did not change that the file is still the same, and it also has a list of the of the chunk IDs and then it will just create an item by using that information.

It will basically create a metadata and everything else. The data is already in the repository yeah, but it it doesn’t matter. Is it’s like a hard link. It doesn’t matter if it’s the first hard link or a second half link, so just a reference. Basically, no not yet, but we have a JSON API. Meanwhile, so one could write agree now, but there is nothing usable yet except some small web interface, but it’s only for very basic use cases, but not for Python 3.

I think yeah you can do as many backups as you like, and it’s even good, because you should not lose anything because it’s completely deduplicated, so there is no redundancy, so better, maybe have two of them or have a rather good hardware. That does not lose data. I will also be at a conference until Sunday at the sprints, for example, so just grab me anytime. So thank you.


 

Categories
Online Marketing

Egad! How Do We Start Writing (Better) Tests?

I am known as the automation Panda. I love software testing, automation, behavior, driven development and Python. You can follow me on Twitter and my blog at automation, Panda. I like to thank my company for sending me here today. I work at precision lender I’ve been there for just a year as of this week.

Precision lender does applied banking insights and a couple of us will be at PyCon this coming May. So, thank you for sitting lender. Here’s a question for everybody. Raise your hand if you have ever hit a software bug everybody to put your hands up. Okay. Thank you. Great we all we all have experienced a fair bugs. Do we like software, bugs no they’re bad, thus far, they’re bugs that’s why we want to squish them so here’s another question.

Raise your hand if you always test your code, Wow Wow yeah, that’s about what I expect I’ll, give them a sulk a couple times and that’s usually what happens now, I’m not here to do shaming or anything. It’s not bad. There’s there’s reasons it’s okay, but I want us to stop and pause for a moment think time out what why is there just this discrepancy? We know we have all these software bugs, but we’re not always testing our code.

Well. Why is that and, furthermore, why don’t we automate the tests so that they test the code gets tested automatically, so we can spend more time making the code to begin with. This is not an easy question to answer, because there are some tough points we have to face. First of all, especially with test automation like we know deep down, this is something we should do right for small projects. It’s not such a big deal, but for big projects, things at scale, things that are have huge teams working on them.

We have to move fast. We have to move continuously and there’s lots of moving parts as there’s lots of danger areas that things could just break and all those bugs just rush in like cockroaches right. We know that we also don’t have enough time in the day or even in the universe, to test everything manually right. We can’t repeat the full testing of these giant systems over and over again ourselves, there’s just not enough time for that.

We need some solution to do things automatically and that’s where test automation is supposed to help us. Unfortunately, though, we also know the test, automation is hard and that’s one of the barriers of entry of why I think so. Many people didn’t quite raise their hand. When I asked do you always test your code test automation, it’s not an easy thing. I do this day to day. I know firsthand, it’s not easy.

I fight the problems in the test automation every day. It requires strong developer skills, it has its own technologies, it has its own software stack just because you’re, a good developer doesn’t mean you’re necessarily going to be a good test. Automation engineer, because there are certain aspects to that domain that are tricky, and I could. I could spend all day talking about that, but we ultimately, what I want you to recognize is it test.

Automation is not just about writing test scripts test. Automation itself is software and deserves same practices and tools and attention that we give the product code so to speak, and with that in mind, I’ve also from talking a lot of people, different companies and teams. I found that test automation can be intimidating for a lot of folks. Many teams really don’t know how to start. They know they need it.

They know they have bugs, but they don’t know how to to to approach the test. Automation challenge so to speak, and so I see two things happen: either teams will keep punching the football down the core and just keep avoiding test automation altogether and they’ll either skip test coverage or the higher teams just to do manual testing, and that’s not a really Good situation, because that’s not scalable or a lot of times what happens is they’ll try, but because they don’t train themselves appropriately, they don’t get the information they need, they don’t really try or they don’t take the the careful steps to begin with next thing.

You know you’re later they’ve got thousands of tests that are failing every night and they’re not getting value out of them, and they just want to nuke the whole thing and say we wasted time. Let’s start over right: that’s not good, both of those situations not having anything or having stuff. That is detracting from your value very bad, and we hit this moment where we began. What do we do with this? Because we know we need this, but we’re not doing it well and that’s what I’m here to talk about today and in fact I’ve got a little story too to go along with how we can approach the test, automation challenge.

Now I want you to meet a friend of mine, let’s meet someone who can help I’d like you to meet my friend Amanda. The Panda amanda is a software engineer who loves using Python. Amanda works at a company called bamboozled. Yep bamboozle is a small but growing tech company bamboozle provides an online platform for panda commerce as a full-stack developer. Amanda has a good understanding of bamboozles web front-end REST API service layer and infrastructure needs recently bamboozled had a couple severe bugs escaped to production.

Oops egad management decided that was finally time to start automating tests and Amanda volunteered to lead the effort. Since this is the first time she’s done test, automation, Amanda does her homework. She starts learning about different testing types tools and frameworks. However, her web research feels more like a game of buzzword bingo, because there are so many buzzwords when it comes to testing and automation, and everyone seems to give different definitions to the same words.

Anyone have that problem before true story, so like what are the differences between unit integration and to end testing we’re all the packages. I need with this cucumber thing. The selenium webdriver thing: do they work together? They separate from egad, we don’t know, we need help. So Amanda calls her friend Andy. That’s me, software engineer and test there’s so much info out there. Amanda says that I can’t discern what is the right approach to take.

We want to do things right. How do we do it right? Let me ask you a question. Andy says: what is your main goal with testing? What is your main goal? Well, Amanda replies. I guess I want to make sure that the critical parts of the bamboozles app are working correctly. Any time someone introduces a bug test should catch it immediately great. It sounds like you need a functional test, automation, solution, functional test to make sure the features work correctly.

As you said, functional tests serve two main purposes: validating goodness and identifying badness I’d like to share with you to test automation pyramid. Has anybody seen this before some people? Okay, cool? Let’s talk about this, the pyramid is a rough guideline for how to automate how an automation solution should be structured. All layers are functional tests from unit to integration to end-to-end at the bottom, we have unit tests which cover individual units of code like functions, methods and classes.

Unit tests are white box in that they interact with the product code directly they’re, making calls to your functions and classes above that are what we call feature tests which cover blackbox behaviors of real live instances of product under test. So you don’t directly access the code. You access whatever the deployed version of that product is integration, tests cover components or things needs usually like a want to hop.

Maybe a service API and to end tests come a pass through the entire system. Typically, like a user would exercise through the web UI, each layer of the pyramid mitigates risk at its optimal return on investment. That’s why we have the layers. We want a strong foundation of unit tests because they are small, quick, easy to maintain and will catch things very quickly. Integration and especially end-to-end tests are far more costly to build a maintain and they also take more time to run.

I want you all to consider the rule of laws. A unit test would take about one millisecond to run an integration test. Usually it would take about one second to run and an end-to-end test order of magnitude will take about one minute to run so there’s this issue of scale as we go up the pyramid hold on, Annie, Amman Energex. Why do we even need feature tests? They sound like such a burden when compared to unit tests.

I also read that web tests can be flaky with selenium-webdriver Andy replies well hold on now unit tests don’t catch all problems. Here’s an example: back in 1999, NASA lost the Mars climate orbiter when it disintegrated into the Martian atmosphere, h.Y ground-based software did not convert US measurements into the metric system. This is a real story. The calculation modules worked individually, but they did not integrate properly.

Had NASA checked software with proper integration tests, they would not have lost six hundred fifty five million dollars. Wow Amanda explains. I wouldn’t want that to happen to my company. It sounds like I need to take a pyramid approach, so what skills do I need to get started? Mandy smiles, good news. You already have the skills test, automation is software and the same development principles apply just pick a core framework and get rolling.

You may also want to take some online courses about frameworks and test packages that you’ll need check out test automation University, which offers a bunch of courses from testing experts for free, so there’s another question: Amanda asks what test framework should we use? Bamboozle does a lot of Python on the back end, so I looked at frameworks like unit tests, PI test and behave. Python is one of the best languages for test automation and E replies, and you can’t go wrong with PI test.

Pi tests can handle tests at all layers of the pyramid, markers can categorize tests, test functions and fixtures of lightweight and plugins can be added for reports, code coverage and even parallel execution among all Python test frameworks. Pi test is also arguably the most pythonic, though that could be up to debate now. A test automation solution is more than a score framework, though so be cautioned successful automation projects bring together readily available packages, rather than developing everything from scratch.

For example, you may want to use Python standard logging library for logging messages. Requests would be great for testing rest. Ap is selenium, webdriver and splinter would be great for automating web UI interactions, and there are also tons of PI test plug-ins for different frameworks like flask or Django, so be sure to look before you leave to see what packages will be useful for you. I can also recommend a few books to get you started.

I’ts Python testing, with pod tests by Brian Aachen, is an excellent resource on the PI test framework. Also by Bruno Oliveira is high test Quick Start Guide, which is another take on how to get started with PI testing and for general automation. Concerns in Python, hands-on Enterprise, automation, Python by bass. O’ralley is another great resource, so check these books out. If you want to learn more creative, I sandy Amanda says this will help me get started.

So Amanda goes back to the imbecile. It starts ready tests in Python using PI tests. She found it was fairly easy to get started even though she’s new, with test automation. Taking a pyramid approach, she starts by beefing up the existing unit tests and then she moves on to using requests for REST, API testing and selenium webdriver for web UI testing. She puts code in the same repository as the product code so that they can be version controlled together.

However, after writing, a number of tests Amanda discovers some frustrations. She meets up with Andy for bubble tea. To pick his mind, Andy says: how do I avoid duplicating so much test code? So many of these test steps are the same. It’s very repetitive. I just need to make minor tweaks here and there code duplication is code, cancer and it replies. Have you heard about property testing with hypothesis? It could help you with your unit testing.

I thought that this hypothesis automatically runs tests against a wide range of scenarios, so you don’t need to hard code variations also to avoid duplication with feature level tests. Try using gherkin with a PI test, BDD plugin, you can write test scenarios in plain language using given length in scenarios and those will be glued to Python functions that will execute like a test script. Steps can be weary.

Steps can be reused by different scenarios and writing in gherkin. First helps you mentally separate test cases from test code, so you can focus on writing good tests. I’ll definitely check out hypothesis and BD high test. Bdd Amanda says I think there were talks about them at PyCon, 2018. Now here’s another question: how have you handled test data? In the past? My unit tests use PI tests monkey patch fixture to mock data, but I’m struggling to find good ways to manage data for bamboozled systems for black box testing test data is definitely hard to maintain.

Try to keep test data to a minimum for most tests. Data needs are actually pretty small tests should set up and clean up whenever they need, such as database records or custom settings. Some data, however, like user accounts, are expensive to prepare and should be handled outside of the tests and treated as a ready State. It may also be good to periodically set up and regenerate that data to make sure your systems are clean after any unexpected damage could happen.

That makes sense. Samantha says I’ve also been storing inputs like URLs and usernames and local config files, so that they aren’t hard-coded into the test code. Awesome Andy says that’s great. You may also want to consider using some sort of key management service like AWS kms or as your keyboard. That way your passwords will be secure and your config files will not go. Stale Amanda goes back to bamboozle again and she uses what she learned to improve.

Her test automation project, it becomes her full-time work and she transitions unit tests work to other developers, so she can pose focus exclusively on future tests. She does so well that her team keeps asking for more and more tests, despite training other developers, to help write tests. She becomes buried by the backlog. Amanda takes a step back and asks herself what tests should we automate? Her answer is simple.

Automation is expensive, so focus on the highest return on investment. Amanda writes guidelines for her team to avoid getting crushed by an impractical 100 % test automation goal. She recommends automating, happy paths of core features that will be run repeatedly. She also recommends avoiding edge cases, one-off checks and visuals, because those would be much easier for an expert to log in and try manually.

Amanda also recognizes that these are simply guidelines for her team and her project at bamboozle, and they may not necessarily apply universally to all other circumstances. However, even after narrowing the scope of the test to automate the number of tests is still quite large. Amanda’s team has hundreds of future tests that will balloon to thousands in the upcoming year. The service level tests now take about ten minutes to run and web tests take over an hour.

It’s no longer practical for developers to run the tests on their local machine. So Amanda calls a meeting with her friend Auto the Panda another developer at bamboozle and she asks how can we reduce the burden of automating tests or how can we reduce the burden that automating tests puts on our development team? How can we reduce this burden? Auto says it would be really nice if we could run these tests as part of a continuous integration and delivery pipeline.

Then every code change I make as a developer would become automatically tested once it gets pushed. The only problem we still have, then, would be that the tests take a long time to run what if we run the tests in parallel using PI tests, X’test Amman ax asks it could plug directly into our existing framework and parallel testing. Even though we’ll be hard on our laptops would be much easier to scale in a CI environment with shared compute resources, I can make sure that the test code is thread safe and would have no collisions such as web logins and thankfully PI test fixtures can help Us set up and tear down everything cleanly and safely.

If necessary, we could even set up selenium grid to scale our test, automation, execution across multiple nodes, with multiple platforms and multiple browser versions, or we could also look into platform as a service providers such as sauce labs or browser stack auto-replies. That would be awesome. We also need to make sure feature owners are automatically notified of test failures that way they can triage any failures immediately and we get that vast feedback cycle Amanda and Otto team up to make it happen.

Amanda updates the automation code to use pipe test X, test and Otto adds new jobs to their existing Jenkins. Build server for running tests means they also set up a report portal instance to to their test results. Dash board tests now complete in a fraction of the time and developers get failure. Notifications immediately, unfortunately, though, adopting true CI brings unforeseen consequences of scale.

More test runs means more issues are uncovered, while most test runs are fine, some start failing intermittently ouch, and that is one of the classic problems with test automation. There are four common reasons. We see these test failures. It could be that the feature under test has a really tricky bug. It could be. The feature under test was the feature itself was updated without also updating the test code.

It could be the automation didn’t, handle an unexpected condition, such as a timeout or egad. The worst, the automation itself has a buck. None of these, though, are good outcomes. Unfortunately, as well. The failures leave a bad impression on the team. Some of Amanda’s co-workers stopped triaging test failures and they even suggest skipping the tests altogether. A man who doubles down. How can we make tests more reliable? She asks herself first.

She realizes that continuous integration is the production environment for tests and should be treated as such. I’r going to repeat that again: ci is production for test automation. Test code should undergo the same best practices as product code, including coding, standards and review share test framework components should also have unit tests because they’re shared by multiple things. Secondly, Amanda discovers that the most common points of failure are remote calls and race conditions.

She Tunes the framework to have appropriate, timeouts, immediate retries and helpful failure messages when problems arise, she makes it correct what it can and safely abort when it cannot. She also looks into something called contract testing, which uses mocks for services to avoid intermittent Network problems. Third Amanda reaches out to her team members for better collaboration because it starts with the team.

The Institut better processes for flagging feature changes that will affect tests and also for being gracious when failures happen on both sides. As a result of these three improvements, automation becomes more reliable and confidence in the whole test. Solution has been restored by this point. In our story, the automation solution is quite mature. New tests are added every sprints and results provide fast feedback to the development team.

Other developers like auto, join Amanda in automating tests at all layers of pyramid as part of their natural development. Workflow quality becomes centric to the team’s vision, and that is Amanda’s test automation journey. There’s so much more. I could say about all of this. A half-hour slot is just not enough time, but I do want to share some resources if this talk was meaningful to you and you want to go, learn some more.

This is the slide to take the pictures of it’s just disclaimer boom right. If you want to learn more, I highly recommend my blog at automation – Panda, yes, I’m biased towards that one, because it’s mine, I also recommend, checking out test automation University as well as the Ministry of testing the three books and their authors are listed here as well. Those are the ones I mentioned earlier in the slides and at the bottom.

I’ve also listed all different frameworks and packages and such that I recommend it as part of Amanda’s journey, so you can learn more about those and so yeah. Thank you so much for inviting me here to Texas. This is my second time in Austin. If you have any any other questions or want to talk more, please come see me. You know whenever I’ll be here both days, you can reach out to me on Twitter. At automation, Panda, you can contact me through my blog.

Thank you. So much appreciated.


Don't have time to do the blogging thing?

Maybe Copywriting services are for you.

 

 

Categories
Online Marketing

Django Web App Development on the Raspberry Pi

So what is Django well Django is a web development framework that saves you time and makes web development a joy using Django. You can build and maintain high-quality web applications with minimal fuss, and we are all going to do that on the Raspberry Pi.

The Raspberry Pi is a tiny computer with enough power to run a Django development server. So here we’re going to attempt installing and deploying our first Django project on the Raspberry Pi and maybe develop a web application on later articles. You may be asking why don’t we just build a web application from scratch without a framework? Well, there will come a time when your application would be needing to connect to a database, and you would end up duplicating your database connection code to other parts of your application.

The practical way is to refactor it into a reusable function. Another problem you’ll encounter is you have to remember to close your database every time and you will end up with a lot of boilerplate code that is prone to mistakes. Your application may not be reusable in a different environment because of some environments, specific configuration. And lastly, if a web designer, who has no experience in coding, wants to redesign the page, he or she might crash the application, because, ideally the logic of the page or the retrieval of information from the database would be separate from the presentation which is the HTML Display of the page, these problems are precisely what a web framework intends to solve.

I’r sure some of you are already familiar with the MVC design pattern or Model View controller design pattern for beginners MVC, like what I mentioned earlier, is a django architecture that separates the logic, the model and the controller from the presentation. The view in django it’s more like an mtv or model template view design pattern. Don’t worry about that now, we’ll get more into that later.

In the meantime, let’s go ahead and install django on the raspberry pi. Okay, so I have here a freshly installed raspbian, which is the official operating system of the raspberry pi. What we’re going to do here is to open up a terminal and install virtual ends, which stands for a virtual environment. To put it simply, virtual environment is an isolated working copy of Python, which allows you to work on a specific project without worry of affecting other projects.

So let’s go ahead and install virtual end, but before we do that, let’s update our package lists by typing sudo. Apt-Get update and when it’s done updating we can go ahead and type in sudo, apt-get install virtual end hit enter, and in my computer, my or my raspberry pi, it’s already been installed. Now that we have our virtual environment installed. We can now create our virtual environment directory that we are going to use for our project to do that.

We just type virtual end dot. Then P, slash user, slash bin, slash Python 3. What this code does is. It makes a hidden directory called vent because in Linux beginning your directory name with the dot, makes that directory hidden and the dash B is an option. You pass virtual environment on what version of Python you want to use. In this case, we want to use Python 3 inside slash user USR, slash bin now hit enter, and when it’s done, if you type LS la you would see that it created our project directory as expected to use it.

We just type source that Ven slash bin. Slash activate you will see our prompt has changed, indicating that we are now in our isolated Python environment. We just type the activate to go back to our regular, prompt and escape our isolated Python environment. We can now install django. There are other ways to install django, but for simplicity, we’ll use pip to install the latest version of django available from PI P or the Python package index repository to do that.

We just type pip, install django and hit enter to test Jiang, the Django installation. You just start up a Python, interactive interpreter by typing Python, and if the installation was successful, we should be able to import Django and check its version. Okay. Moving on, we can now take our first step into creating our first project. A project is a collection of settings for an instance of Django, including database configuration Django, specific options and application specific settings.

So let’s exit our Python shell and type sy, Django admin, the PI or just Django admin, start project. Then the name of our project, which we’ll just name my site for now then hit enter okay. So it says that my site directory already exists just going to delete, delete it for now and make another one. So I’m just going to repeat the command Django admin that I start project my site and then hit enter.

What the start project command does is it creates a directory containing six files? Okay, there we are my site, which is the outer. My site directory is just a container for our project. It name doesn’t matter to Jango, you can rename it to anything. You like manage that PI py is a command line utility that lets you interact with this Jango project in various ways. Type Python manage that hi-oh. We just have to change into the directory first and type Python manage that py help to get a feel for what it can do.

Okay, so here are your options now you should never have to edit this file. It’s created in this directory purely for convenience. Okay, so let’s go back to files that were created. Oh now, it has added a few more files, but we’ll just go over on the basic files that we are concerned about. The next is the inner my site directory. It is the actual Python package for your project and we have our ini’ that py, it’s an empty file required for python to treat the my site directory as a package example a group of python modules – and we also have our settings that pi, which is the Settings configuration for this Django project take a look at it to get an idea of the types of settings available along with their default values.

Okay, so we’ll just skip that for now and we have our URL stat pot, the URLs that PI for this Django project is the table of contents of your jungle powered site. Next. Is we have our WSGI pi an entry point for WSGI compatible web servers to serve your project? And lastly, we have Ras GI that pipe as well as WSGI Jango also supports deploying on a SGI which is the emerging python standard for a synchronous, web servers and applications.

Now to see our barebone application in action. Let’s run the server by changing into the directory of our project, CD, my site and type the command that slash manage, that pi run server the run server launches the built-in django development server, which is a lightweight web server that we can use while developing our site. We will receive a warning message in red telling us we have unapplied migrations welljust.

We will just ignore that for now. Okay, now, if we open up our browser and go to HTTP colon, slash slash 127.0.0.1 colin 8000, which is the IP address that stands for home on port 8000 and if everything goes well, then we’ll see that it works by default. The run server command starts the development server on port 8000, listening only for local connections. If you want to change the server sport, pass it a command-line argument like so so, let’s just ctrl C and run our command again run server and we want to run it on port 8080.

So that’s how you change the port? Ok! So now we will access it here on port 8080. If you want other computers on your local network to be able to view your Django site by visiting your IP address in their web browsers, then you type manage that slash manage that pie run server. 0.0.0.0. 8000. Well, that’s all we have for now in this tutorial. If you have any questions or comments, please post it in the comment section below down below and I’ll do my best to answer them.

If you enjoy the article, please hit the like button and kindly support my blog by subscribing again. My name is Ryan and you are reading recurse TV see you next time.


 

Categories
Online Marketing

Python Bangla Tutorial for Beginners [Full Course] | Part-1 | Learn Python for Web Development |

I want to fight with you to really thank you. Truly, I’m not fightin. It basically sushi fish here, that’s Coco. What so main folder keep utilities stop engines? Oh I want this. I appreciate an unexpected if I was a boom. Bitches shut up programs shampoos here Janice. It won’t point about the prohibition, a gravel road change it to 20 she’s effective June with Umbra she’s uh.

Back to this vitamin egg do busy kazoo! That’s a beauty: she kebab blogs are a blue. She kicks and parsley lips close shows it put the bunny ear, for it should be active, but it still it can give me taro or interpret the programming language which it can under Python. Simple cash code table today would be from the computer screen is Julie. She she – I was a brochure which alone can open book hermano tooth into Karrueche, put’em hello.

I turn a position. I’r not. The Google is a search goody, top programming language 2020, Tommy, I’m predictable by tundra, che egg dome, f-number e TT o current a blow by Tony. Bravo: heart fight on machine learning, diffusion intelligence, Kimba web development and mocha Java hardcore aquatic ape enter a mobile, app development of items in it in a geometry of a wood chip in for a up, another Juneau hammer should take the solution.

Third base. She develop programming. Circuitry kanakam IDE download, Corvina ID. You know, mulatto jaqen, a program, decay compile clarify a Caronia for the nacho-cheese current computer AIT download crack it to jungle, of whom no connection with a photonic a familiar part, a piranha egg. Do it in try correct time for programming? It’s headed by a timer bubonic bundu Kim Bauer needs a shadow, Putin, Putin OHA so going to come.

Id download, Corvina Abner computer is Judy available, Wi-Fi connection okay, so they have not a softer tip. I work with different Google as a search Corbin, our EP l, dot ID dignity, put AAT softer province, shade it along incorrect Abner gmail account their the register, Corbin color or a language. He shall be Python touches cordovan tahole of not air. Come octopus Pavan they own. A kanay Python, three point: eight point: one dvorkovich, a jetty Python, a shop see latest fashion.

They want a pure class. We could develop our simulator, which is from I lack going to tycoon, welcome ID downloaded, Shyamalan, RJ Cooper, J, a customer. Could the param Toby on a cable topology? I wanted to available Wi-Fi connection named Alec Eger book Hamish, Hamilton, read, say after AI de Beauvoir could the button Tony it is specially Python and juno te Kura 80 download could therefore there could be seekers to Havana topo, Judy up Naja Mellish, a MOOC in horn.

So another common books at Jonathan progeny, Umbra, a tear for Allah, DirecTV duty record book. It can Iraq the shots. They said, you’re the only K about both of our a Jay. I was at the computer, the laptop Nate. Okay, I’m going to give up a programming code book now the schaumschau Shyamalan row, its head show the of narcotic the Android phone. Take a is your sister up, not programming, shrew courage, you know I mean so application and humble.

Is it sigil I’ve not a place to take a coupe shows a download create programming should with the Bourbon. Both of my jet is got the whole. Your decoder didn’t cook paper. Take the app it a place to recoup Shoji page 7 among download core upon another. It about could the could be shipped Acosta Havana. The way it is how much leverage a tibia more could tape. Removal of show em be tucked. The hub is OD after MB, not a get over Finity Bauer.

Could the Bourbon now only cover both of our edgy? I wanted more so maybe talking of internet connection tagging alcoholic he could go so Vitara aft power could different. Aft after offline a power cut, the power will itself brother, Eric pepper Kosovo, g q, python 3 l android for python for android integrate the offline app. Do 10 g connect, download, Karenin evan programming sugar. It in. I should applaud schakal programming so much in Cudahy.

She blows hard, indeed, ability so not ever programming each object. Amra equals same also tinted in Ipoh bottom develop output, the theoretical of variable. I want it a little variable type put to me: output, some pork, it to Bellini output, an active short uterine delay after output. Every shuttle could charge a booster bargain, I’m not Judy. Google help is Ajay among shaken and j-rock on am resorts, Karachi top programming language 2020.

Talk on Google came to a mother. Arrow calm case would result occasion Jessica. I’r the on internal information. Victor Chi is the information below you looking to output. It’s a direct order on this. After I’d open facebook AJ, I brought their phone number Kim the Gmail ID the a tarp or a password. They login a click. Current talking to Facebook up at the news pretty near Jack, is a Facebook about the news pretty near: yellow attack him to output, children ever ah Jack Python programming, amra corrector code, an output give her back and book output.

As you know, Python Abhishek to shop the beber core avoid shaking color print print like helper, a after they’re, both oh, my first bracket did the hobbit first predator. With her a quotation signal is cut away after a single quotation, came a double rotation jq- ever cook. The parens so by / Shui character with duper shake, do pressure quotation, duty, aikidoka, motorway, a bark rotational victory, amra supposed hola mi amor nam, tok click la let her pour a me to the Ranbir Tony Lee, curry Toby it can output is awake in term 1.

Lambda Big Dipper Qi or thought I’m Jay could tell Islam Shaytan out, put it in the AMIA one ant addictive achi ogre they quite to be sure to kill right away. Shaitan, hello print. Let’s assume oil in the / show printed Peter show to half their voter base Jody. It have got a deal Toby it color in to change Havana arkovich in snaffle eating into cash of Havana. Sorry, I’m not a unit collector change, Vegas, a.

J, kuna ID to the back wall, current of a pigpen J bring through Tata. Lately it all wrong to put even with it’s a romper. You go through Qi, money et, that’s cool babe it! Sarah! I wish I had a first bracket: you’ve cooked away mmm fast break until bitter a potential chin, nose, cooked away mmm quotation. Chin nose do push a kid Okamoto be do the upload the code to their own decay. A partial double quotation use correlation a precious Demi single quotation.

You scurry cover for a run, but only click curry. So may they come again. Even the program does successfully run hot China Karen it a pool like duper, shape, Akira come see, Nova har could Hebei judy Abner duper che, who I up like a double quotation and I do single condition, never good the way I shall go to booster bar changeup Pythonic Kaimuki, so output, cockatoo, Tasha read ever children. I’r rachel is a variable.

A variable shop, the deck into the Apollo, make hell current. Even I won’t have any deeksha with it and so restarts could have Bangladesh interval. Bangla, Ashby pulley would turn she thought. Coupe. Charles babbage JJ information, GUI button hi a actually variable security variables from porque up Nora to hulu, clear, which and Joan quite a variable up another key deck. Hi para games. Sharpener cutter only variable M on gene easier to blow ot neo to change.

I German Abner boyish landscape on a road, I’m not just into asshole of a big family, what to say to her with a machete keen to show true if I may keep the Abner boyish, booty, neo to change, shape and age. Eighteen step I take into variable. I like to show you turn me jerk on Facebook, a after you can connect a post current token possibility hotel Abner door stuck in the corner to like hi ed got the pony, keep those shitty exo-k Modesto like wage.

I hate you put in Utah like go change it change it change ho. Take into variable should inquire on. They can unblock the kitchen if the ambos of equal to move upon a leaky temper upper hombre is dilemma. Sorry Tamra about SD, lambda, equal D, solo dilemma. Then Umbra sba equal, the shuttle up DARPA a a bra. Ever it are output to take book, monitor, output, white tunic. You have a deck, a hot-shit each other.

I worship, printable topic print PA equals XI. Node atomic bomb air betray is leaked away, like a poor average. The run button, a click curry the way I’m not victor Babu output, a shooter addictive achieve you. Can it I’m reporter my variable lacquer style tech to calculate variable like her to know put them up like it is subject: licked awake in a subjective Umbra? Is you scratching that probability equals into the table a doubt? Pouring a blur J information tachanka become shop, daughter, Siddalee lake, her poor opera previa, the bracket and v3 she’s subject a lately output is away shaded exa job a it can elected in each category.

Even again, tumblr tEEN TOP variable legacy came to a camera out. Push of addictive Archie anthem last victim, you know, Karen ever with your home Kuno variable lack of it talkin printing shop. A last trick. Today, cutaway shop called a Decker option outside the machete Emre arrow porridge, a chic book opposite or umrah variable can be liquefied FM variable concept, a key shader, some poor kid to clear tirana near a key.

I’r going to arrow cracked a variable that hike gem on like equal x upon Josh, then print ta-dah like delay, run button and economically kirbo talk on I’m extra punch. Esther output is away dicta Boche, I’m racked up variable K, declare Cola. It can act official character way up in supreme territory, variable as subject alike built on him take any kind of bracket. You score a job in a happening to the bracket.

Sorry kanakam quotation, chin! No, you score! A Havana opposes the quotations in no use Korean public. In traitor successfully are run Havana, a chakra parry, a polar concept, uploader catch, a clear which him air for a amrap variable type near catch scorebook, variable, mulatto, teen, praça, bottom T, low string, D, 30, hello, number, FM, t, t OT, hello, flute bottom. I am restraining a catabolic string, hello’ molotov j-job do da do do not her own.

A variable declare core ahoy dobisch ATK string, malahide stringer, Vijay, Khanna, caciotta /, a German nom nom Kimba. Oh no karo nam came back on later kin, McCullough paragraph or top. I’r Rob or know by work, Ray J variable technically occur. Bo che, take him to stream. Quite a stringer on the head table. Brother cuz are clear, homogeneous term yeah, one name you can. I am subject, namely club named a equal.

The last echo name Eric an affinity crank above or cut the Bourbon Pinero kin, bachou thorough now applique over, should buy work of table a connector shop, though German I mean I’m on, am too late. L’r in a Thai hello, mulatto stream airport amra it again print cool book. It can t be shy of my cake to hell right away. Applicant stream declare Corbin dock hone up like a overjoyed string and she sobbed a decade, double quotation and veto reductive obey.

So the ethnicity Nara can so be him to print Havana. They’re gone. It is successful leak into output. It should be amia one namkha, dicta patchy economies. The quotations in no time, surely at the table, take on a TV show. I mean for our new for a. I mean the run, but when a clip curry the way they can eating in to successfully run hot China, what’s up stream variable it up like a subsidy, a turn for equal Chin movie, a tarp or a DJ variable tallied been shaken or show double quotation.

Peter Iraq, the Hebei 10 Quinto eater successfully run Javed airport after emridge a variable Tanika, conversatio low number number hula bullet of shankha shouts. For me, Shankar Jaya, Shankara is a variable. Take a declare chorus of a shitty hello number number, a bird. We poke our egg in teaser from Dewey float into the hollow, punish, Anka J variable. A of napoo notion can declare carbon she’ll, ok, integer, Bala fight a bomb J variable a up.

My float declare sorry door show mix, Shankara Ditchley a curveball. She cool, ok, fluid Paulo fire turn amra intezaar. Declare, curry, I’m not to be is leaky is like her four equally boo. Equally amra, auto Apollo roll, a clump it correct official calendar. Coon is therefore a up Nikki up nom nom before cut the power of the power good turbine, now a plug it into a connector, strong, kebab or cut away at each honker birthday.

Hello number variable it can. I am break people no Shankar Babar Karrueche tie. I take the integer, I’m ready Pond Road or show me pass you scream so alt visible AP flute. Did you be a variable T blow boolean boolean air concept of not read Potomac to clear Carini, boolean, hello, Evan, hyper variable j j variable across honking baku? No need to shop Dutch heritage Anna need to shove. The volt Umrah through kimba, false k, buchiach’ a boolean variable, a do.

They output assure with definite, I say, Taylor, true Kimba, false a do of the boolean variable que trabajar con ahoy yeah, I’m City bully. I am a programmer equal. I mean Kim two variable Alicia babe Cornish, Wonka in BA no going to stop the power cut the power behind it. Can I work a bolt of a hair and program, one nah nah, I’m programming nah, i’m rishabh in life, a taking? Yes, but no Kim a negative, positive negative of the power cord into it kind of programming and especially fight on programming.

It up like a true Kimba falls. Backward coulda been a tutor of thee, come on Judy Q approach, the correct, so the up Nikki approach to correct the shaky Abner bondo tahole up a little bit: hair Kimba nah, a kick-ass joke on Hamra programming. Your kid record boy talk on ethnic, a to the table, a true Kimba, false fake it a boolean. You can erect a Bishoy character bit up like a true Kimba, false a bush.

I borrow hot air, Oh crash record, AHA baby, I’m making a truly clump. True, literally, they can the wrong touch injury. Is it a wrong changing, say money, it take him to shorty bubble net average. He even attacked us boolean. As you know, true kin. The false special word it take is Dubin. Now, like a fighter waiter put it on top or even Havana, I’m not to be true. Jk t like he like heat over the collector wrong boots on Hawaii into a Merida from Bordeaux Hutton little I’m talking into it are wrong.

Corey Burton Haga. Lo by true can befall a Kirk III up like a over showing both appear occur, a shrew good to have a mullet or umrah up. Motorcade output variable a variable type, cool or concept: cool, ok, sha-booyah, no Chester, Karrueche, even Ambra Damon cannot cast a candy camera Eric porridge, a web worker Booker joke on i’m aero package in his chicken ebook talk on she look exit. Do like a mother bear work or, after a booster, bourbon a poor bay, Amram unit or variable in variable type of output.

A concept of a clear conscience to Karachi is an American caucus day: honey cat Umbra Alec to porridge a cooker on puta madre cool; okay. Polish car Bobby booster Hebei a shock, URI concept, cooler, Pushkar power boost every 10 yo te conozco neshama quinoa, quinoa, kannada nisha for the boosters. How much? Aha, I will share mother k, corn boxer, Johnathan Capo’s, enjoy Schuster Tec, been a logic Ben


 

Categories
Online Marketing

Python Bangla Tutorial for Beginners [Full Course] | Part-1 | Learn Python for Web Development |

I want to fight with you to really thank you. Truly, I’m not fightin. It basically sushi fish here, that’s Coco. What so main folder keep utilities stop engines? Oh I want this. I appreciate an unexpected if I was a boom. Bitches shut up programs shampoos here Janice. It won’t point about the prohibition, a gravel road change it to 20 she’s effective June with Umbra she’s uh.

Back to this vitamin egg do busy kazoo! That’s a beauty: she kebab blogs are a blue. She kicks and parsley lips close shows it put the bunny ear, for it should be active, but it still it can give me taro or interpret the programming language which it can under Python. Simple cash code table today would be from the computer screen is Julie. She she – I was a brochure which alone can open book hermano tooth into Karrueche, put’em hello.

I turn a position. I’r not. The Google is a search goody, top programming language 2020, Tommy, I’m predictable by tundra, che egg dome, f-number e TT o current a blow by Tony. Bravo: heart fight on machine learning, diffusion intelligence, Kimba web development and mocha Java hardcore aquatic ape enter a mobile, app development of items in it in a geometry of a wood chip in for a up, another Juneau hammer should take the solution.

Third base. She develop programming. Circuitry kanakam IDE download, Corvina ID. You know, mulatto jaqen, a program, decay compile clarify a Caronia for the nacho-cheese current computer AIT download crack it to jungle, of whom no connection with a photonic a familiar part, a piranha egg. Do it in try correct time for programming? It’s headed by a timer bubonic bundu Kim Bauer needs a shadow, Putin, Putin OHA so going to come.

Id download, Corvina Abner computer is Judy available, Wi-Fi connection okay, so they have not a softer tip. I work with different Google as a search Corbin, our EP l, dot ID dignity, put AAT softer province, shade it along incorrect Abner gmail account their the register, Corbin color or a language. He shall be Python touches cordovan tahole of not air. Come octopus Pavan they own. A kanay Python, three point: eight point: one dvorkovich, a jetty Python, a shop see latest fashion.

They want a pure class. We could develop our simulator, which is from I lack going to tycoon, welcome ID downloaded, Shyamalan, RJ Cooper, J, a customer. Could the param Toby on a cable topology? I wanted to available Wi-Fi connection named Alec Eger book Hamish, Hamilton, read, say after AI de Beauvoir could the button Tony it is specially Python and juno te Kura 80 download could therefore there could be seekers to Havana topo, Judy up Naja Mellish, a MOOC in horn.

So another common books at Jonathan progeny, Umbra, a tear for Allah, DirecTV duty record book. It can Iraq the shots. They said, you’re the only K about both of our a Jay. I was at the computer, the laptop Nate. Okay, I’m going to give up a programming code book now the schaumschau Shyamalan row, its head show the of narcotic the Android phone. Take a is your sister up, not programming, shrew courage, you know I mean so application and humble.

Is it sigil I’ve not a place to take a coupe shows a download create programming should with the Bourbon. Both of my jet is got the whole. Your decoder didn’t cook paper. Take the app it a place to recoup Shoji page 7 among download core upon another. It about could the could be shipped Acosta Havana. The way it is how much leverage a tibia more could tape. Removal of show em be tucked. The hub is OD after MB, not a get over Finity Bauer.

Could the Bourbon now only cover both of our edgy? I wanted more so maybe talking of internet connection tagging alcoholic he could go so Vitara aft power could different. Aft after offline a power cut, the power will itself brother, Eric pepper Kosovo, g q, python 3 l android for python for android integrate the offline app. Do 10 g connect, download, Karenin evan programming sugar. It in. I should applaud schakal programming so much in Cudahy.

She blows hard, indeed, ability so not ever programming each object. Amra equals same also tinted in Ipoh bottom develop output, the theoretical of variable. I want it a little variable type put to me: output, some pork, it to Bellini output, an active short uterine delay after output. Every shuttle could charge a booster bargain, I’m not Judy. Google help is Ajay among shaken and j-rock on am resorts, Karachi top programming language 2020.

Talk on Google came to a mother. Arrow calm case would result occasion Jessica. I’r the on internal information. Victor Chi is the information below you looking to output. It’s a direct order on this. After I’d open facebook AJ, I brought their phone number Kim the Gmail ID the a tarp or a password. They login a click. Current talking to Facebook up at the news pretty near Jack, is a Facebook about the news pretty near: yellow attack him to output, children ever ah Jack Python programming, amra corrector code, an output give her back and book output.

As you know, Python Abhishek to shop the beber core avoid shaking color print print like helper, a after they’re, both oh, my first bracket did the hobbit first predator. With her a quotation signal is cut away after a single quotation, came a double rotation jq- ever cook. The parens so by / Shui character with duper shake, do pressure quotation, duty, aikidoka, motorway, a bark rotational victory, amra supposed hola mi amor nam, tok click la let her pour a me to the Ranbir Tony Lee, curry Toby it can output is awake in term 1.

Lambda Big Dipper Qi or thought I’m Jay could tell Islam Shaytan out, put it in the AMIA one ant addictive achi ogre they quite to be sure to kill right away. Shaitan, hello print. Let’s assume oil in the / show printed Peter show to half their voter base Jody. It have got a deal Toby it color in to change Havana arkovich in snaffle eating into cash of Havana. Sorry, I’m not a unit collector change, Vegas, a.

J, kuna ID to the back wall, current of a pigpen J bring through Tata. Lately it all wrong to put even with it’s a romper. You go through Qi, money et, that’s cool babe it! Sarah! I wish I had a first bracket: you’ve cooked away mmm fast break until bitter a potential chin, nose, cooked away mmm quotation. Chin nose do push a kid Okamoto be do the upload the code to their own decay. A partial double quotation use correlation a precious Demi single quotation.

You scurry cover for a run, but only click curry. So may they come again. Even the program does successfully run hot China Karen it a pool like duper, shape, Akira come see, Nova har could Hebei judy Abner duper che, who I up like a double quotation and I do single condition, never good the way I shall go to booster bar changeup Pythonic Kaimuki, so output, cockatoo, Tasha read ever children. I’r rachel is a variable.

A variable shop, the deck into the Apollo, make hell current. Even I won’t have any deeksha with it and so restarts could have Bangladesh interval. Bangla, Ashby pulley would turn she thought. Coupe. Charles babbage JJ information, GUI button hi a actually variable security variables from porque up Nora to hulu, clear, which and Joan quite a variable up another key deck. Hi para games. Sharpener cutter only variable M on gene easier to blow ot neo to change.

I German Abner boyish landscape on a road, I’m not just into asshole of a big family, what to say to her with a machete keen to show true if I may keep the Abner boyish, booty, neo to change, shape and age. Eighteen step I take into variable. I like to show you turn me jerk on Facebook, a after you can connect a post current token possibility hotel Abner door stuck in the corner to like hi ed got the pony, keep those shitty exo-k Modesto like wage.

I hate you put in Utah like go change it change it change ho. Take into variable should inquire on. They can unblock the kitchen if the ambos of equal to move upon a leaky temper upper hombre is dilemma. Sorry Tamra about SD, lambda, equal D, solo dilemma. Then Umbra sba equal, the shuttle up DARPA a a bra. Ever it are output to take book, monitor, output, white tunic. You have a deck, a hot-shit each other.

I worship, printable topic print PA equals XI. Node atomic bomb air betray is leaked away, like a poor average. The run button, a click curry the way I’m not victor Babu output, a shooter addictive achieve you. Can it I’m reporter my variable lacquer style tech to calculate variable like her to know put them up like it is subject: licked awake in a subjective Umbra? Is you scratching that probability equals into the table a doubt? Pouring a blur J information tachanka become shop, daughter, Siddalee lake, her poor opera previa, the bracket and v3 she’s subject a lately output is away shaded exa job a it can elected in each category.

Even again, tumblr tEEN TOP variable legacy came to a camera out. Push of addictive Archie anthem last victim, you know, Karen ever with your home Kuno variable lack of it talkin printing shop. A last trick. Today, cutaway shop called a Decker option outside the machete Emre arrow porridge, a chic book opposite or umrah variable can be liquefied FM variable concept, a key shader, some poor kid to clear tirana near a key.

I’r going to arrow cracked a variable that hike gem on like equal x upon Josh, then print ta-dah like delay, run button and economically kirbo talk on I’m extra punch. Esther output is away dicta Boche, I’m racked up variable K, declare Cola. It can act official character way up in supreme territory, variable as subject alike built on him take any kind of bracket. You score a job in a happening to the bracket.

Sorry kanakam quotation, chin! No, you score! A Havana opposes the quotations in no use Korean public. In traitor successfully are run Havana, a chakra parry, a polar concept, uploader catch, a clear which him air for a amrap variable type near catch scorebook, variable, mulatto, teen, praça, bottom T, low string, D, 30, hello, number, FM, t, t OT, hello, flute bottom. I am restraining a catabolic string, hello’ molotov j-job do da do do not her own.

A variable declare core ahoy dobisch ATK string, malahide stringer, Vijay, Khanna, caciotta /, a German nom nom Kimba. Oh no karo nam came back on later kin, McCullough paragraph or top. I’r Rob or know by work, Ray J variable technically occur. Bo che, take him to stream. Quite a stringer on the head table. Brother cuz are clear, homogeneous term yeah, one name you can. I am subject, namely club named a equal.

The last echo name Eric an affinity crank above or cut the Bourbon Pinero kin, bachou thorough now applique over, should buy work of table a connector shop, though German I mean I’m on, am too late. L’r in a Thai hello, mulatto stream airport amra it again print cool book. It can t be shy of my cake to hell right away. Applicant stream declare Corbin dock hone up like a overjoyed string and she sobbed a decade, double quotation and veto reductive obey.

So the ethnicity Nara can so be him to print Havana. They’re gone. It is successful leak into output. It should be amia one namkha, dicta patchy economies. The quotations in no time, surely at the table, take on a TV show. I mean for our new for a. I mean the run, but when a clip curry the way they can eating in to successfully run hot China, what’s up stream variable it up like a subsidy, a turn for equal Chin movie, a tarp or a DJ variable tallied been shaken or show double quotation.

Peter Iraq, the Hebei 10 Quinto eater successfully run Javed airport after emridge a variable Tanika, conversatio low number number hula bullet of shankha shouts. For me, Shankar Jaya, Shankara is a variable. Take a declare chorus of a shitty hello number number, a bird. We poke our egg in teaser from Dewey float into the hollow, punish, Anka J variable. A of napoo notion can declare carbon she’ll, ok, integer, Bala fight a bomb J variable a up.

My float declare sorry door show mix, Shankara Ditchley a curveball. She cool, ok, fluid Paulo fire turn amra intezaar. Declare, curry, I’m not to be is leaky is like her four equally boo. Equally amra, auto Apollo roll, a clump it correct official calendar. Coon is therefore a up Nikki up nom nom before cut the power of the power good turbine, now a plug it into a connector, strong, kebab or cut away at each honker birthday.

Hello number variable it can. I am break people no Shankar Babar Karrueche tie. I take the integer, I’m ready Pond Road or show me pass you scream so alt visible AP flute. Did you be a variable T blow boolean boolean air concept of not read Potomac to clear Carini, boolean, hello, Evan, hyper variable j j variable across honking baku? No need to shop Dutch heritage Anna need to shove. The volt Umrah through kimba, false k, buchiach’ a boolean variable, a do.

They output assure with definite, I say, Taylor, true Kimba, false a do of the boolean variable que trabajar con ahoy yeah, I’m City bully. I am a programmer equal. I mean Kim two variable Alicia babe Cornish, Wonka in BA no going to stop the power cut the power behind it. Can I work a bolt of a hair and program, one nah nah, I’m programming nah, i’m rishabh in life, a taking? Yes, but no Kim a negative, positive negative of the power cord into it kind of programming and especially fight on programming.

It up like a true Kimba falls. Backward coulda been a tutor of thee, come on Judy Q approach, the correct, so the up Nikki approach to correct the shaky Abner bondo tahole up a little bit: hair Kimba nah, a kick-ass joke on Hamra programming. Your kid record boy talk on ethnic, a to the table, a true Kimba, false fake it a boolean. You can erect a Bishoy character bit up like a true Kimba, false a bush.

I borrow hot air, Oh crash record, AHA baby, I’m making a truly clump. True, literally, they can the wrong touch injury. Is it a wrong changing, say money, it take him to shorty bubble net average. He even attacked us boolean. As you know, true kin. The false special word it take is Dubin. Now, like a fighter waiter put it on top or even Havana, I’m not to be true. Jk t like he like heat over the collector wrong boots on Hawaii into a Merida from Bordeaux Hutton little I’m talking into it are wrong.

Corey Burton Haga. Lo by true can befall a Kirk III up like a over showing both appear occur, a shrew good to have a mullet or umrah up. Motorcade output variable a variable type, cool or concept: cool, ok, sha-booyah, no Chester, Karrueche, even Ambra Damon cannot cast a candy camera Eric porridge, a web worker Booker joke on i’m aero package in his chicken ebook talk on she look exit. Do like a mother bear work or, after a booster, bourbon a poor bay, Amram unit or variable in variable type of output.

A concept of a clear conscience to Karachi is an American caucus day: honey cat Umbra Alec to porridge a cooker on puta madre cool; okay. Polish car Bobby booster Hebei a shock, URI concept, cooler, Pushkar power boost every 10 yo te conozco neshama quinoa, quinoa, kannada nisha for the boosters. How much? Aha, I will share mother k, corn boxer, Johnathan Capo’s, enjoy Schuster Tec, been a logic Ben