DjangoCon US 2018 - Lightning Talks Day 1
Heim, Sarah
Allen, Tim
Michel, Raphael
McLaughlin, Katie
Willison, Simon
Rees, Griffith
Durbin III, Ernest W.
Juvenal, Flavio
Ximens, Filipe
Lightning Talks Day 1 Heim, Sarah Allen, Tim: Change just one thing Michel, Raphael: Automatic Screenshooting with Python, Django, py.test, and Selenium McLaughlin, Katie: That's not my emojii Willison, Simon: Cryptozoology Rees, Griffith: Collab Canvas Durbin III, Ernest W. Juvenal, Flávio: 1+1=1 or Record Deduplication with Python Ximens, Filipe: Parks, Buildings and Patterns
 Alright. I'm coming up here as I feel like I'm Miss Schwag here. I've got my new little self-unholder and water and shades. So I'm like stoked on all the free stuff. So I don't know if a lot of you guys here are for the free stuff, but I'm here to, so next week I'm going home. I live here so I'm kind of on vacation all the time, but next week I'm going home to Minnesota. And yeah, Skoll, right? Anybody who is here from Minnesota? So next week, going home, my cousin is in stand up and I want to do that with him. So this is my first kind of public speaking little practice. But meanwhile, I'm a programmer. So I feel like I have some funny things to say about programming, alright? So I'd like to say thank Chloe and because as a programmer who's locked in a padded cell all day, it's nice to laugh. And I think we don't laugh enough as programmers. So here I am trying to make us laugh. And my boss shows me away in that padded cell, says go do X, Y, Z, a little inside joke because I did just did a plot on X, Y, Z. And I work at Scripps Institute of Oceanography. My goal, you know, save the oceans. So that's what I do on my day job. And meanwhile, I crack myself up all the time. So I thought hey, might as well give it a try, you know, crack into me all. So we're in the land of the hippies, aka San Diego. And we like labels. So I actually don't have a button because I don't really care for labels, but I respect other people's labels. And so, you know, except for food, I'm always like is this local organic shade grown fair trade, you know, I like my food labels, right? Well, another thing of land of the one, we are one with, we like to be one with each other, one with nature, one with ourselves. Let me tell you about what I wish we were one with at a time. It was just like there's just never enough time, right? And anybody program with time, time zones, time zones. Oh, those are fun, aren't they? Because oh, man, there's more than just 24. And I'm talking to normal people, like oh, I know a lot about time zones, man. There's more than 24. Some of them are 30 minutes or 45 minutes apart. And then there's daylight savings time. I am like, please, can we get rid of this? Like, I've been looking up on the history of this because I'm like, this just is archaic. This needs to go. Programming, you're just like, oh, my God, can we not just all be one with time? It's called UTC. You know, I wish that would be, that would just be my programming life so much easier. So, new to social media. I just started my Twitter. Thank you. I started my Twitter today to, because I was like, it's in a spreadsheet and I love to fill up spreadsheets. I've been doing spreadsheets since I was 10. So Twitter, all right, but we need to do this at procrastinating. I was just in a little push. All right, made a Twitter. Twitter is Pico DeLoco. There's one. But because there was already Pico DeLoco, I just made an Instagram account like a month ago. Only a few posts, a lot of cats, dogs, you know, and I skateboard and so anyways. So it's me, right? Well, I was Pico DeLoco. I do Twitter. There's already one. So I'm Pico DeLoco, one. Well, okay. Well, all right, so get on Instagram, change my name now. And I am now Pico DeLoco, one. Because guess what? I am crazy. I was crazy once. They locked me in a room with bugs. Bugs make me crazy. I was crazy once. They locked me in a room with bugs. Oh, yes, because programming bugs, programming bugs make me crazy. Especially when you're all alone trying to figure out a bug. It makes me crazy. So I'm crazy. I embrace the crazy. I am proud of my crazy label. Some people think, oh, crazy is derogatory. No, I'm crazy and I'm proud. So, oh, oh, I got one minute left. I'm going fast because I talk fast. So try to listen fast because I ain't slowing down. Can't stop. Won't stop. Social media. I'm on social media. So, so, I'm new to things. I got this 360. I want to get a YouTube. Haven't done a YouTube video yet. Going to. I see you. And focus, focus, focus. It's what I need to do. I have a little bit of ADD. I'm having a hard time right now staying to this microphone because I like to move. And my boss, meanwhile, I just sit in an office all day trying to sit on that chair. I'm trying to be a real good. I'm trying to be a good employee trying to sit on that chair all day. Sometimes you get tunnel vision. You get code mode. You're just going, going, going, going, going, going, right? Meanwhile, oh, dang it. I got to go to the bathroom. Boom. That's when you figure something out is when you stepped away, right? You step away. You realize I need to step away a little bit more often, you know? Because we all need to step away. Anyways, last thought, trying to save the oceans. Sometimes there's labels, respect those labels, including recycle labels. So maybe I'll use them, recycle cups or whatever. Hey, try to put in a cup. Try to put in a bottle. If you're not, if it's a recycle, make sure it goes in the recycle. Thank you. Want to hug? Thanks. Hi, everybody. I'm Tim. I write code for the Wharton School, various open source projects and most importantly for myself. I help organize DjangoCon US here and also the Philadelphia Python users group back home. I started writing code when I was six years old because my mom won a raffle and I've been doing it ever since and absolutely love it. I consider myself very lucky to get paid to do what I love with colleagues and friends that are close enough to be considered like a second non-DNA family. So let me show you my GitHub chart from 2014. Does that look like the chart of somebody who likes to write code a lot? The truth is in 2014 I wasn't doing what I loved. I had been slipping further and further away from doing what I loved for a long time. While I still worked hard and had a lovely home, squaring who I thought I was and who I should be with how I acted was getting harder and harder every day. Looking in the mirror was getting harder and harder every day. It was because of this that I had to change just one thing. What happened here? For many, many years I had been trying to change just one thing on my own and failing. Finally in April I asked for help with my alcohol addiction problem. In May I got out of rehab and you can see a sudden uptick in activity there and I've been cleaning sober one day at a time ever since. So thank you. So what happened here in July and August? I made a terrible, terrible, tragic mistake and reopened my World of Warcraft account. So 2016 looks like it might be a bit of a lighter year but I was contributing to several private repositories and me and my friends from Morton were also a little busy helping host this conference that you may have heard of the year it was in Philadelphia. But when we take a look at 2017, this is where I really started to hit my stride having gotten more involved with a bunch of open source projects and from Morton we also started to put some of the packages we had been developing internally on GitHub and PyPI. If you take a look at 2018, it's up to, so the first year was 21 contributions in the year, 1053 in the last year. So as you can see now I'm pretty active again and doing what I love, writing code with a community of friends old and new. It's been such a wonderful way to connect and just such a better life. So what I just really want to do here is ask everybody, if there is one thing that you could change about yourself, one thing that you don't like, what would it be and how much better could your life look if you could change just that one thing? It doesn't have to be an addiction like I had. It doesn't have to be, you know, only you will really know what it is when you look at the mirror at night. But I want to encourage everybody here to, you know, if you do have that one thing that you want to change about yourself, it is worth doing. It is worth asking for help for. I couldn't do it until I asked for help. And I've had support not just from the rehab center I went to and not just the recovery communities I've been in. My colleagues at work have been incredibly supportive. The Django community, which I've immersed myself in ever since, has been incredibly supportive. And it's been an amazing amount of support everywhere I've looked to try to keep this going one day at a time. And the same thing could happen for you. Because if you need help to make that change, you know, absolutely ask for it because it really did save my life. And you know, as Gandhi said, we must be the change we want to see in the world. So if you have a problem, sometimes changing one thing can change everything. And it really did for me. Thank you very much. Hello, everyone. I'm a software developer and I write software. But occasionally I do not only need to write software, I also need to write documentation or put a website for the software that I've written. Both things usually include screenshots. And doing screenshots is cumbersome. You want to do them on different screen resolutions. You might want to do them with different locale. And once you're all done having created them, they are outdated and you have to start over again. So let's automate this. And let's automate it with tools that we already know or that probably most of you have already seen. The first tool that we want to use is Selenium. You might know Selenium as something to write front-end tests for your web application. Basically, it's a way to remotely control your browser from a program. The next ingredient is Chrome Headless. Chrome Headless is a way to start Chrome without requiring a display or anything attached. So you can run it on a server without needing to have a full-blown desktop operating system. And then we use PyTest. PyTest is a test runner. But if you look at it closely, it's not only a test runner, but it makes it easy to define tests and run them in specific ways. But basically, it's a way to run functions in a specific way. So usually you have a test that is just a Python function prefixed with test underscore and that checks for something. And then you run PyTest and it finds all of those functions in your project and runs them and informs you about the result. But PyTest can do so much more. It can have parameters for input and fixtures and so on. Fixtures, for example, are things that you want to, that should be there before the test is run. So for example, in this code snippet, we are testing in the SMTP library and we have a fixture that creates an SMTP connection object and then we have a test that declares that it needs this fixture parsed as an input. And for Django, there is PyTest Django. And in Django itself, there's live server test case which allows for creating a test case that accesses an actual run server-like version of your app. So with all these ingredients, we already know them. They are usually used for testing. In this case, we will use them for screen-shutting. And to make it a bit nicer, we use PyTest's configuration to redefine some strings. For example, we want to define our screen-shuts in scene files with shot functions and not in a, we don't want to call it tests. And then we can use fixtures to create objects because nobody is interested in screen-shuts of an empty application. We want to populate the data ways in some way beforehand. And we can define, and as another picture, we define the Selenium client that is already logged into our system. We can also define our screen resolution in a fixture as well as any other options that we want to pass to Chrome. And then we can define everyone, our screen-shuts by simply writing something like a PyTest test with specifying what fixtures we want to be run before and then just calling a utility function that does a screen-shut with Selenium. And we can run it by just calling PyTest on our folder and we're done. And with PyTest parameters, for example, you could do this for every language that your project supports or for every theme that your project supports or whatever and you end up with a bunch of screen-shuts. And for the application I'm working on, you can find the repository with the screen-shut definitions and also the utility code that is a bit more complicated than I've shown here in this GitHub repository. And thank you very much. If you have any questions on that, feel free to talk to me in the hallway. Thank you. Hello. It's time for our story. Today's story is that's not my emoji. That's not my emoji. Its head is too shiny. This is too emoji put together. This is not an emoji. This is not my emoji. Its face is far too animated. Can you make a unicorn sound? Emojis do not have sound. This is not my emoji. Its existence as a character in a movie is far too distressing. You see, when a studio loves a marketing opportunity too much, they can make a terrible movie out of it where a bunch of the main characters aren't actually emoji. That's not my emoji. It is partying far too hard. You see the pretty bird? He's dancing. Emoji do not dance. That's not my emoji. Its permutations are under documented. Can you wave at the Kai emoji? Hello. That's not my emoji. Its ligature is only vendor implemented. You see the cat drinking coffee? Cats don't drink coffee. This only appears on Windows 10 operating systems. That is my emoji. Its code point is so standardized. That's the end of our story. Sorry about that. This is a talk about crypto. It is not a talk about that stupid new thing. This is a talk about the original crypto which is cryptozoology, the study of cryptids or legendary stroke mysterious creatures. We are talking big foots and chupacabras and the Michigan dog faced man. The reason I am interested in cryptids at the moment is that last week I was in Ohio and I went bat-texing with my wife Natalie in the woods in the dark. It was dark and the woods in the high. We realized we had not done our research. This is America. There are weird creatures out here. We did not know if we were within the range of any of these mythical creatures. I would like to know so that I can greet them and say hi. I obviously hit Twitter and on Twitter I said, just out of interest, does anyone know where I can retain range maps of cryptozoological creatures like yetis and chupacabras and so forth? Then I asked a question about it on Ask Matter Filter and I realized that actually no, the internet does not have a conclusive source of range maps for cryptozoological creatures. I started a GitHub repository. This is a GitHub repository which I would actively encourage people to contribute to where I am trying to get a directory of information on cryptids and their ranges. The way I am doing this is using a file format called GeoJSON. It is a way of representing geographical shapes in JSON. Let's take a look at the Love Land Frogman. This is my GeoJSON file for the Love Land Frogman. The great thing about GitHub is that GitHub knows how to render GeoJSON. It is rendering this shape for me. If I click on that shape, I can see that it has a Wikipedia URL, the name. It was first cited in 1955, last seen in 1972. It is a human-eyed frog described as standing roughly four feet tall. That was my first cryptid. I have been, you know what, I have got some pull requests. Russell has sent me a pull request adding the drop-bear. I am going to merge this right now. If I am lucky, it will deploy by the end of my lightning talk. I should have done this a couple of minutes ago. We now have a drop-bear. It is very exciting. So you get the idea. What am I doing with this data? I have been working on this open source project called Dataset, which is an application that takes a SQLite database and gives you a UI for exploring it. It gives you an API for getting the data back out as well. It is the perfect application for cryptozoology. What I have done here is this GitHub repository has Travis set up to run a script every time I commit anything. The script reads in the GeoJSON and writes it into a SQLite database. It is all of what? 123 lines of code. There is not a lot to this. It builds a SQLite database with all of these cryptids. It deploys it. Then, based on this, I can build out an API. Here is the nice thing about Dataset. Everything is SQLite. The API is just a SQL query. Here is a SQL query that selects details of cryptids where the geometry overlaps the, where, within GeoMTech, so where the geometry overlaps a point. Here is our current last-year longitude right now. If I run that query, I get back the Bigfoot. It turns out America has a lot of Bigfoot sightings. This is now a JSON API, which you can feed last-year longitude to. It will tell you which cryptozoological creatures you are within range of. Here is Travis. Travis is building the drop-air right now. If we are lucky, that will be built and deployed in just a moment. I will talk about Bigfoot quickly. It turns out there is already a database of Bigfoot sightings run by the Bigfoot research organization who are banned from Twitter. If you try and tweet a link to bfro.net, you get an error message. Clearly, Twitter is part of a cover-up conspiracy trying to hide the, trying to hide the existence of Bigfoot. But they have got 3,000 sightings. They publish a KML file. A KML file has last-year longitude in. I happen to know that the range of Bigfoot is 15 miles from a conversation I had at the Bigfoot Discovery Museum outside of Santa Cruz, thoroughly recommended. If you take those 3,000 points and put a 15-mile radius on them, you can see that Bigfoot has been sighted across much of the United States, everywhere in Florida, it turns out everyone in Florida has seen a Bigfoot, and here in San Diego. When I ran that query with our San Diego coordinate, I did get back the Bigfoot. I have got an iOS shortcut that isn't working at the moment, so I can say, hey Siri, check for cryptids, that's very useful. If you want something a bit more useful, I do have a version of this that works for time zones instead. Please take a look at the project. Draw maps of cryptozoological creatures, since they probably don't exist, they don't have to be very accurate. Before I get hugged, I'm just going to quickly see if Russ's drop bear has deployed yet. Unfortunately, it looks like the drop bear did not quite make it, but in a couple of minutes there will be a drop bear, so thank you very much. All right. Thank you. This is the first presentation I've given in a very long time. This was from something I did literally eight years ago, so I'm going to try and do this really quickly. In 2010, I was at a place called the Santa Fe Institute for Summer Program, and they asked us to create various research projects, so me and some friends stuck something together in three weeks, which was a Django app, which you'll see. Four years later, I got diagnosed with a really complicated situation, which is why I've had three surgeries and why I can't have this part of my glasses on that side of my face. Long story. Still managed to get a PhD in sociology, now I'm trying to figure out what to do. It went so well. My most recent surgery in June that I'm here, and I'm really, really happy to be here. My GitHub name is Spool. If any theater nerds who know Crap Slash Tape get that reference, please see me after, because very few people do. The project was to try to study how people collaborate creatively and how they might respond to each other in making a design. I'm going to skip over that, because that was a lot of, again, some things I had before. You can ask me stuff about. Basically, if we're working together on making a design, how do people respond to each other's things? People may be aware of the whole Reddit project that came a couple years ago. This came before that, technically, in 2010, and you'll see some differences in the Yotuzer interface. The idea was we printed a t-shirt at the end. It was going to be a black t-shirt by default, and then we were going to put some designs on it. We wrote it in Django in a language called processing, which is really cool for doing some user interface and sound experiment stuff. There was a processing JS back then, which was really slow. There's now P5JS, which I really recommend people try if they like to. What we did is we created a grid with 64 cells or squares that people could do their own designs on, and that whole thing became the canvas. You could only see your more neighbors. Can I see a pair of hands? Are hands for anyone who knows what a more's neighbor is? Okay. Oh, there's one. Do you want to tell everyone what that is? Fine. Okay. That's cool. You'll see it in a second. This is just an example of how we've run it in a museum recently. You get assigned a square in this big grid, and you can only see the edges of your neighbors. There's the ones to the left, right, top, and bottom, and then those are the ones on the corners. Those eight are the more's neighborhood. You can press spacebar, do a design, and then press spacebar at the end, and you see how your design fits alongside the designs of everyone else. Okay. Press play again. That was that. You could log back in. When we ran it at a museum, you could only do one design and then see the whole canvas. The way we ran it as a website is you could log in. You could only see your neighbors, and if you logged in the next day, you might see how your neighbors changed, and then you could respond. We had a couple of problems. If someone logged in and then left it for an hour and then logged back in, their neighbors might have changed, and then they would log in, and we ended up, they would accidentally not respond to the most recent changes of their neighbors. We should have done that with web sockets. We also didn't take into account time zones. Someone's laptop was on a different time zone, and they kept overwriting everyone else's, and we didn't know why. That was really frustrating. This is what it looked like. Each of those cubes are individual people's designs. Oh, the music. That was when the dude tried to do his own and then accidentally overwrote everyone else's. It's a torus, so the people on each side can actually see each other, and the people on the tops can see the bottoms. Thank you very much. Well done. Well done. Good job. So that was the final thing. If anyone's interested in the music you just heard, that's by a really incredible composer named Julius Eastman, who sadly died in poverty in 1990. Look them up. Thank you. Hello. I'm Ernest. I really like to tweet. You might think that tweeting is my full-time job based on this incredible brand engagement, but in reality I work for the Python Software Foundation. I also tweet a lot, and so if you want to follow me, that's where you do it on Twitter. But yeah, the Python Software Foundation. So the Python Software Foundation, if you're not aware, is a nonprofit that controls the intellectual property, copyright, trademark, et cetera, for Python the language. Also, it is a grant-giving nonprofit, and so we raise money, and we pour that money back into the community in order to support events like this, meetups, and smaller events as well. There's a larger event associated with the Python Software Foundation called PyCon. If you're not familiar with PyCon, it was in Cleveland in 2019. It's going to be in Cleveland in 2018. It's going to be in Cleveland in 2019, and I want to talk briefly about that. Currently, the call for proposals for PyCon is open. You can check that URL out to go submit a talk, tutorial, education summit, presentation poster, or a charlis, or a talk in Spanish. Speaking of talks in Spanish, the PyCon charlis came out of the PyCon Hatchery Program, and so this is kind of what I really want to pitch to you. The PyCon Hatchery Program is a way for your ideas to be realized in PyCon. So if you've ever been to PyCon and not seen something that you wanted to see, this would be the way that you would tell us what you want to see, and perhaps even propose to do the work to make it so. So please check out the Hatchery Program and read more about that. So you might be saying, okay, like, this is DjangoCon. So what about Django? The Python Software Foundation loves Django. We actually, so I'm the director of infrastructure, and so that's like a bunch of services that run on python.org. Out of that, seven of them are currently written in Django. The PyCon website is written in Django, and I love Django. Admission, I haven't always loved Django, but it's gotten much easier in the past few years. And so being here and being among people who are interested in or experts in Django has been really exciting. And so I'm also going to come up here and ask for your help. I frequently tweet, and sometimes I tweet about asking for help in Django. More often than not when I'm tweeting about Django, it's asking for help. So help, please. And when I say this, I mean this sincerely. If you're in this room, it is probably because Django has either made you feel like you have superpowers or you want to feel what it feels like to have superpowers, and I want you to be involved in Django and the PSF and PyCon, if any of that's true. You might just be starting out, and I'd love to work with you to get you started. You might be an expert, and I would love to work with you to get a little bit more of that expertise, and so that we can all share and grow. So there's also a bonus. It's not Django, but PyPI is a piece of software many of you in the room might be familiar with, and if you're all interested in contributing to PyPI, we have stickers now. You can check out a micro sprint that's going to be occurring at lunch with myself and Dustin Ingram, and that's it. I'm Ernest, and you can follow me on Twitter there. Okay, so I'm going to talk about you get folks about one plus one equals one or record a duplication with Python. This is a 45-minute talk. I will make it in five minutes. Not sure if it will work. So real-world data is a mess. Probably you dealt with data like this before. Those are restaurants, restaurant records, and you see here that clearly those four records here from zero to three are duplicates because the name is quite similar. The address is similar, CDKMVRI. So we have duplicates here. Real-world data is a mess. We don't have unique identifiers, and the solution is to perform the duplication, as well as record linkage to join records in a fusing way using data like names and addresses. Mostly we'll deal with those kinds of dates, but it can be other kinds of dates. And to solve that, we should do some fuzzy comparison of strings. We can use algorithms like Jeroinkler, similarity. If I compute the Jeroinkler similarity between those two similar strings, I get this high number, and with those different strings, I get this lower number. So I can use that as a tip for me as an indication of similarity between records. I can do also fuzzy comparison of addresses. And the trick is to geocode them to lead to the longitude, and that will allow us to clean irrelevant address variations, like a small variation on the street number or something like that, and to enable the calculation of geometric distance using latitude and longitude, because we want to group and match things that are close together. And if I geocode those two addresses here, you can see that although they have variations and even typos, the latitude and longitude is the same, and the zip code is also the same. I can grab this from Google Geocoders, for example. Okay, now into the process of deduplicating a dataset. First, we need to preprocess it. We will use the restaurant dataset. It contains 181 restaurant records from the folders and Zagats guides, and it contains 150 duplicates, and we want to find those duplicates. The dataset looks like this. So it comes with the cluster column, which is the truth about this data. Of course, we will remove that, and we will also remove the phone column, because it will make things very easy for us, and we will have left only with name, address, and CD. And we want to deduplicate using only that. First, we clean, just using some reg access to clean the name. We will geocode all the addresses, so we get the postal latitude and longitude for the addresses. And then we can move to the next step on the record linkage process, which is indexing. We will use the library record linkage, also known as Python record linkage toolkit, and we have the clean records. Now we want the pairs to compare to find matches. To produce the pairs, we could do a full index. We could compare our records against our records. Of course, that's slow, but we don't have enough time to think about a smarter way to index, so we just produce our records against our records. And the pairs look like this. We compare 0 with 1, 0 with 2, and there it goes. Now running the comparisons. We want to compare the pairs to get a comparison vector for each pair. So the comparison vector looks like this. The names are similarities 0.5, the other similarity 0.8, and that's our comparison vector. And to compute the comparison vectors, we define similarity functions for each column. We can do that with the record linkage toolkit. We use Jeroinkle for our name address postal and an exponential decay geometric similarity between latitude and longitude. And that's what we get if we run that. Now with the vectors, we want to explore different ways to classify them as matches and no matches. And we can do some simple threshold-based classification. We can compute a weighted average over those vectors. And by looking at data, we see that those three are matches. So we just consider anything with more than 0.9 of a score as a match. And if we do that and compute from the truth about this data, we see that we got 128 true positives and two false positives, only two false positives and 22 false negatives. So it's quite good performance, but there are smarter ways to solve that problem. Make sure to check active learning classification. It will help you a lot because it will allow you to build a training set for your data. Thank you very much. Thank you. Okay. So I said in Felipe, I'm partners at Vinta. And let's talk about parks. So I have an image here of two layouts for a park trail or something like that. And I want you to think about which one of those you think is a more pleasant trail for a park. So to be honest, this is a very trick question. I didn't give you enough information to answer that. And the reason is you don't know anything about the terrain. You don't know anything about if there are trees around. You have no idea of what's going on in that area. So to answer that kind of questions, you need something like this book, which called a partner language from Christopher Alexander. And it's from 1977. And this guy, he defined a series of patterns and things to help architects to build and design and do good architecture. So for example, you can take the pattern 120, which is about paths and goals. And it says the out of path will seem right and comfortable only when it's compatible with the process of walking. And the process of walking is far more suitable than one might imagine. This is very interesting, especially because it can be visualized through this thing called desire paths. Desire paths are like in this image, they show how people interact with the place they live through like these patterns in the terrain. So for instance, here we are seeing there are two paths going one that goes straight to the door, where there is a fence and another one that goes around. So at some point, the fence didn't exist there. And people just changed the way they went inside the house after that. Also, this other example, so in this case, people are going around the trees. And here is very interesting because they got the desired pattern, the desired path and actually made it a fixed path and a proper path. So one thing to remember, and this comes from this idea of patterns and paths, is that when you see a big street, mainly when it's a old one, a main avenue in a city, probably at some point there was a bare road in the woods. And maybe before that, there was just a path where people and animals passed by. And so those are patterns and this is from Christopher, the author of the book, and he says, this idea comes simply from the observation that most of the wonderful places of the world were not made by architects but by people. So the book is really very based on this, on how architecture is made by people and constructed naturally. So the book has other partners and, for example, the path shape one, there is seed spots. So there's another part that's missing here, which is about language. So it's a pattern language. We talk about pattern and language. It's just like when you have words. You have words that have separate meaning by each of them. And when you group that together, you get a lot more meaning through language. So language is a group, you group words to convey a lot more meaning. And that's where we get to design patterns. So design patterns was actually created, the book we know, the software book we know, was actually created based on Christopher's book. And I don't have a lot of time to talk about design patterns here, but it's just that idea that comes from. So let's just jump to some takeaways. So for things that partners are not created, they emerge. So just like the Christopher's patterns, our design patterns are just observation from how people code. Design patterns are two for communication between programmers, free speech and code. They are not to brag about. They are to help you communicate with your teammates. And the last thing I want to leave to you is that quote that says, good architecture is about improving people's lives. And most of the time, this means that what feels more natural or more pleasant to us. And this applies to both to architecture and to programming. Thank you. Thank you. Thank you. Thank you.
 Alright. I'm coming up here as I feel like I'm Miss Schwag here. I've got my new little  self-unholder and water and shades. So I'm like stoked on all the free stuff. So I don't  know if a lot of you guys here are for the free stuff, but I'm here to, so next week  I'm going home. I live here so I'm kind of on vacation all the time, but next week I'm  going home to Minnesota. And yeah, Skoll, right? Anybody who is here from Minnesota?  So next week, going home, my cousin is in stand up and I want to do that with him. So this  is my first kind of public speaking little practice. But meanwhile, I'm a programmer.  So I feel like I have some funny things to say about programming, alright? So I'd like  to say thank Chloe and because as a programmer who's locked in a padded cell all day, it's  nice to laugh. And I think we don't laugh enough as programmers. So here I am trying  to make us laugh. And my boss shows me away in that padded cell, says go do X, Y, Z, a  little inside joke because I did just did a plot on X, Y, Z. And I work at Scripps Institute  of Oceanography. My goal, you know, save the oceans. So that's what I do on my day job.  And meanwhile, I crack myself up all the time. So I thought hey, might as well give it a  try, you know, crack into me all. So we're in the land of the hippies, aka San Diego.  And we like labels. So I actually don't have a button because I don't really care for labels,  but I respect other people's labels. And so, you know, except for food, I'm always like  is this local organic shade grown fair trade, you know, I like my food labels, right? Well,  another thing of land of the one, we are one with, we like to be one with each other, one  with nature, one with ourselves. Let me tell you about what I wish we were one with at  a time. It was just like there's just never enough time, right? And anybody program with  time, time zones, time zones. Oh, those are fun, aren't they? Because oh, man, there's  more than just 24. And I'm talking to normal people, like oh, I know a lot about time zones,  man. There's more than 24. Some of them are 30 minutes or 45 minutes apart. And then there's  daylight savings time. I am like, please, can we get rid of this? Like, I've been looking  up on the history of this because I'm like, this just is archaic. This needs to go. Programming,  you're just like, oh, my God, can we not just all be one with time? It's called UTC. You  know, I wish that would be, that would just be my programming life so much easier. So,  new to social media. I just started my Twitter. Thank you. I started my Twitter today to,  because I was like, it's in a spreadsheet and I love to fill up spreadsheets. I've been  doing spreadsheets since I was 10. So Twitter, all right, but we need to do this at procrastinating.  I was just in a little push. All right, made a Twitter. Twitter is Pico DeLoco. There's  one. But because there was already Pico DeLoco, I just made an Instagram account like a month  ago. Only a few posts, a lot of cats, dogs, you know, and I skateboard and so anyways.  So it's me, right? Well, I was Pico DeLoco. I do Twitter. There's already one. So I'm  Pico DeLoco, one. Well, okay. Well, all right, so get on Instagram, change my name now. And  I am now Pico DeLoco, one. Because guess what? I am crazy. I was crazy once. They locked me  in a room with bugs. Bugs make me crazy. I was crazy once. They locked me in a room with  bugs. Oh, yes, because programming bugs, programming bugs make me crazy. Especially when you're  all alone trying to figure out a bug. It makes me crazy. So I'm crazy. I embrace the crazy.  I am proud of my crazy label. Some people think, oh, crazy is derogatory. No, I'm crazy  and I'm proud. So, oh, oh, I got one minute left. I'm going fast because I talk fast.  So try to listen fast because I ain't slowing down. Can't stop. Won't stop. Social media.  I'm on social media. So, so, I'm new to things. I got this 360. I want to get a YouTube. Haven't  done a YouTube video yet. Going to. I see you. And focus, focus, focus. It's what I need  to do. I have a little bit of ADD. I'm having a hard time right now staying to this microphone  because I like to move. And my boss, meanwhile, I just sit in an office all day trying to  sit on that chair. I'm trying to be a real good. I'm trying to be a good employee trying  to sit on that chair all day. Sometimes you get tunnel vision. You get code mode. You're  just going, going, going, going, going, going, right? Meanwhile, oh, dang it. I got to go  to the bathroom. Boom. That's when you figure something out is when you stepped away, right?  You step away. You realize I need to step away a little bit more often, you know? Because  we all need to step away. Anyways, last thought, trying to save the oceans. Sometimes there's  labels, respect those labels, including recycle labels. So maybe I'll use them, recycle cups  or whatever. Hey, try to put in a cup. Try to put in a bottle. If you're not, if it's  a recycle, make sure it goes in the recycle. Thank you. Want to hug?  Thanks. Hi, everybody. I'm Tim. I write code for the Wharton School, various open source  projects and most importantly for myself. I help organize DjangoCon US here and also  the Philadelphia Python users group back home. I started writing code when I was six years  old because my mom won a raffle and I've been doing it ever since and absolutely love it.  I consider myself very lucky to get paid to do what I love with colleagues and friends  that are close enough to be considered like a second non-DNA family. So let me show you  my GitHub chart from 2014. Does that look like the chart of somebody who likes to write  code a lot? The truth is in 2014 I wasn't doing what I loved. I had been slipping further  and further away from doing what I loved for a long time. While I still worked hard and  had a lovely home, squaring who I thought I was and who I should be with how I acted  was getting harder and harder every day. Looking in the mirror was getting harder and harder  every day. It was because of this that I had to change just one thing. What happened here?  For many, many years I had been trying to change just one thing on my own and failing.  Finally in April I asked for help with my alcohol addiction problem. In May I got out  of rehab and you can see a sudden uptick in activity there and I've been cleaning sober  one day at a time ever since. So thank you. So what happened here in July and August? I  made a terrible, terrible, tragic mistake and reopened my World of Warcraft account.  So 2016 looks like it might be a bit of a lighter year but I was contributing to several  private repositories and me and my friends from Morton were also a little busy helping  host this conference that you may have heard of the year it was in Philadelphia. But when  we take a look at 2017, this is where I really started to hit my stride having gotten more  involved with a bunch of open source projects and from Morton we also started to put some  of the packages we had been developing internally on GitHub and PyPI. If you take a look at  2018, it's up to, so the first year was 21 contributions in the year, 1053 in the last  year. So as you can see now I'm pretty active again and doing what I love, writing code  with a community of friends old and new. It's been such a wonderful way to connect and just  such a better life. So what I just really want to do here is ask everybody, if there  is one thing that you could change about yourself, one thing that you don't like, what would  it be and how much better could your life look if you could change just that one thing?  It doesn't have to be an addiction like I had. It doesn't have to be, you know, only  you will really know what it is when you look at the mirror at night. But I want to encourage  everybody here to, you know, if you do have that one thing that you want to change about  yourself, it is worth doing. It is worth asking for help for. I couldn't do it until I asked  for help. And I've had support not just from the rehab center I went to and not just the  recovery communities I've been in. My colleagues at work have been incredibly supportive. The  Django community, which I've immersed myself in ever since, has been incredibly supportive.  And it's been an amazing amount of support everywhere I've looked to try to keep this  going one day at a time. And the same thing could happen for you. Because if you need  help to make that change, you know, absolutely ask for it because it really did save my life.  And you know, as Gandhi said, we must be the change we want to see in the world. So if  you have a problem, sometimes changing one thing can change everything. And it really  did for me. Thank you very much.  Hello, everyone. I'm a software developer and I write software. But occasionally I do  not only need to write software, I also need to write documentation or put a website for  the software that I've written. Both things usually include screenshots. And doing screenshots  is cumbersome. You want to do them on different screen resolutions. You might want to do them  with different locale. And once you're all done having created them, they are outdated  and you have to start over again. So let's automate this. And let's automate it with  tools that we already know or that probably most of you have already seen. The first tool  that we want to use is Selenium. You might know Selenium as something to write front-end  tests for your web application. Basically, it's a way to remotely control your browser  from a program.  The next ingredient is Chrome Headless. Chrome Headless is a way to start Chrome without  requiring a display or anything attached. So you can run it on a server without needing  to have a full-blown desktop operating system. And then we use PyTest. PyTest is a test runner.  But if you look at it closely, it's not only a test runner, but it makes it easy to define  tests and run them in specific ways. But basically, it's a way to run functions in a specific  way. So usually you have a test that is just a Python function prefixed with test underscore  and that checks for something. And then you run PyTest and it finds all of those functions  in your project and runs them and informs you about the result. But PyTest can do so much  more. It can have parameters for input and fixtures and so on.  Fixtures, for example, are things that you want to, that should be there before the test  is run. So for example, in this code snippet, we are testing in the SMTP library and we  have a fixture that creates an SMTP connection object and then we have a test that declares  that it needs this fixture parsed as an input. And for Django, there is PyTest Django. And  in Django itself, there's live server test case which allows for creating a test case  that accesses an actual run server-like version of your app. So with all these ingredients,  we already know them. They are usually used for testing. In this case, we will use them  for screen-shutting. And to make it a bit nicer, we use PyTest's configuration to redefine  some strings. For example, we want to define our screen-shuts in scene files with shot  functions and not in a, we don't want to call it tests. And then we can use fixtures to  create objects because nobody is interested in screen-shuts of an empty application. We  want to populate the data ways in some way beforehand. And we can define, and as another  picture, we define the Selenium client that is already logged into our system. We can  also define our screen resolution in a fixture as well as any other options that we want  to pass to Chrome. And then we can define everyone, our screen-shuts by simply writing  something like a PyTest test with specifying what fixtures we want to be run before and  then just calling a utility function that does a screen-shut with Selenium. And we can  run it by just calling PyTest on our folder and we're done. And with PyTest parameters,  for example, you could do this for every language that your project supports or for every theme  that your project supports or whatever and you end up with a bunch of screen-shuts. And  for the application I'm working on, you can find the repository with the screen-shut definitions  and also the utility code that is a bit more complicated than I've shown here in this GitHub  repository. And thank you very much. If you have any questions on that, feel free to talk  to me in the hallway.  Thank you. Hello. It's time for our story. Today's story is that's not my emoji. That's  not my emoji. Its head is too shiny. This is too emoji put together. This is not an  emoji. This is not my emoji. Its face is far too animated. Can you make a unicorn sound?  Emojis do not have sound. This is not my emoji. Its existence as a character in a movie is  far too distressing. You see, when a studio loves a marketing opportunity too much, they  can make a terrible movie out of it where a bunch of the main characters aren't actually  emoji. That's not my emoji. It is partying far too hard. You see the pretty bird? He's  dancing. Emoji do not dance. That's not my emoji. Its permutations are under documented.  Can you wave at the Kai emoji? Hello. That's not my emoji. Its ligature is only vendor  implemented. You see the cat drinking coffee? Cats don't drink coffee. This only appears  on Windows 10 operating systems. That is my emoji. Its code point is so standardized.  That's the end of our story. Sorry about that. This is a talk about crypto. It is not a talk  about that stupid new thing. This is a talk about the original crypto which is cryptozoology,  the study of cryptids or legendary stroke mysterious creatures. We are talking big  foots and chupacabras and the Michigan dog faced man. The reason I am interested in cryptids  at the moment is that last week I was in Ohio and I went bat-texing with my wife Natalie  in the woods in the dark. It was dark and the woods in the high. We realized we had  not done our research. This is America. There are weird creatures out here. We did not know  if we were within the range of any of these mythical creatures. I would like to know so  that I can greet them and say hi. I obviously hit Twitter and on Twitter I said, just out  of interest, does anyone know where I can retain range maps of cryptozoological creatures  like yetis and chupacabras and so forth? Then I asked a question about it on Ask Matter  Filter and I realized that actually no, the internet does not have a conclusive source  of range maps for cryptozoological creatures. I started a GitHub repository. This is a GitHub  repository which I would actively encourage people to contribute to where I am trying  to get a directory of information on cryptids and their ranges. The way I am doing this  is using a file format called GeoJSON. It is a way of representing geographical shapes  in JSON. Let's take a look at the Love Land Frogman. This is my GeoJSON file for the  Love Land Frogman. The great thing about GitHub is that GitHub knows how to render GeoJSON.  It is rendering this shape for me. If I click on that shape, I can see that it has a Wikipedia  URL, the name. It was first cited in 1955, last seen in 1972. It is a human-eyed frog  described as standing roughly four feet tall. That was my first cryptid. I have been, you  know what, I have got some pull requests. Russell has sent me a pull request adding the  drop-bear. I am going to merge this right now. If I am lucky, it will deploy by the end  of my lightning talk. I should have done this a couple of minutes ago. We now have a drop-bear.  It is very exciting. So you get the idea. What am I doing with this data? I have been working  on this open source project called Dataset, which is an application that takes a SQLite  database and gives you a UI for exploring it. It gives you an API for getting the data  back out as well. It is the perfect application for cryptozoology. What I have done here is  this GitHub repository has Travis set up to run a script every time I commit anything.  The script reads in the GeoJSON and writes it into a SQLite database. It is all of what?  123 lines of code. There is not a lot to this. It builds a SQLite database with all of these  cryptids. It deploys it. Then, based on this, I can build out an API. Here is the nice thing  about Dataset. Everything is SQLite. The API is just a SQL query. Here is a SQL query  that selects details of cryptids where the geometry overlaps the, where, within GeoMTech,  so where the geometry overlaps a point. Here is our current last-year longitude right now.  If I run that query, I get back the Bigfoot. It turns out America has a lot of Bigfoot  sightings. This is now a JSON API, which you can feed last-year longitude to. It will  tell you which cryptozoological creatures you are within range of. Here is Travis. Travis  is building the drop-air right now. If we are lucky, that will be built and deployed  in just a moment. I will talk about Bigfoot quickly. It turns out there is already a database  of Bigfoot sightings run by the Bigfoot research organization who are banned from Twitter. If  you try and tweet a link to bfro.net, you get an error message. Clearly, Twitter is  part of a cover-up conspiracy trying to hide the, trying to hide the existence of Bigfoot.  But they have got 3,000 sightings. They publish a KML file. A KML file has last-year longitude  in. I happen to know that the range of Bigfoot is 15 miles from a conversation I had at the  Bigfoot Discovery Museum outside of Santa Cruz, thoroughly recommended. If you take those  3,000 points and put a 15-mile radius on them, you can see that Bigfoot has been sighted  across much of the United States, everywhere in Florida, it turns out everyone in Florida  has seen a Bigfoot, and here in San Diego. When I ran that query with our San Diego coordinate,  I did get back the Bigfoot. I have got an iOS shortcut that isn't working at the moment,  so I can say, hey Siri, check for cryptids, that's very useful. If you want something  a bit more useful, I do have a version of this that works for time zones instead. Please  take a look at the project. Draw maps of cryptozoological creatures, since they probably don't exist,  they don't have to be very accurate. Before I get hugged, I'm just going to quickly see  if Russ's drop bear has deployed yet. Unfortunately, it looks like the drop bear did not quite  make it, but in a couple of minutes there will be a drop bear, so thank you very much.  All right. Thank you. This is the first presentation I've given in a very long time. This was from  something I did literally eight years ago, so I'm going to try and do this really quickly.  In 2010, I was at a place called the Santa Fe Institute for Summer Program, and they  asked us to create various research projects, so me and some friends stuck something together  in three weeks, which was a Django app, which you'll see. Four years later, I got diagnosed  with a really complicated situation, which is why I've had three surgeries and why I  can't have this part of my glasses on that side of my face. Long story. Still managed  to get a PhD in sociology, now I'm trying to figure out what to do. It went so well.  My most recent surgery in June that I'm here, and I'm really, really happy to be here. My  GitHub name is Spool. If any theater nerds who know Crap Slash Tape get that reference,  please see me after, because very few people do. The project was to try to study how people  collaborate creatively and how they might respond to each other in making a design.  I'm going to skip over that, because that was a lot of, again, some things I had before.  You can ask me stuff about. Basically, if we're working together on making a design,  how do people respond to each other's things? People may be aware of the whole Reddit project  that came a couple years ago. This came before that, technically, in 2010, and you'll see  some differences in the Yotuzer interface. The idea was we printed a t-shirt at the end.  It was going to be a black t-shirt by default, and then we were going to put some designs  on it. We wrote it in Django in a language called processing, which is really cool for  doing some user interface and sound experiment stuff. There was a processing JS back then,  which was really slow. There's now P5JS, which I really recommend people try if they  like to. What we did is we created a grid with 64 cells or squares that people could  do their own designs on, and that whole thing became the canvas. You could only see your  more neighbors. Can I see a pair of hands? Are hands for anyone who knows what a more's  neighbor is? Okay. Oh, there's one. Do you want to tell everyone what that is?  Fine. Okay. That's cool. You'll see it in a second. This is just an example of how we've  run it in a museum recently. You get assigned a square in this big grid, and you can only  see the edges of your neighbors. There's the ones to the left, right, top, and bottom,  and then those are the ones on the corners. Those eight are the more's neighborhood. You  can press spacebar, do a design, and then press spacebar at the end, and you see how  your design fits alongside the designs of everyone else. Okay. Press play again. That  was that. You could log back in. When we ran it at a museum, you could only do one design  and then see the whole canvas. The way we ran it as a website is you could log in. You  could only see your neighbors, and if you logged in the next day, you might see how  your neighbors changed, and then you could respond. We had a couple of problems. If someone  logged in and then left it for an hour and then logged back in, their neighbors might  have changed, and then they would log in, and we ended up, they would accidentally not  respond to the most recent changes of their neighbors. We should have done that with web  sockets. We also didn't take into account time zones. Someone's laptop was on a different  time zone, and they kept overwriting everyone else's, and we didn't know why. That was really  frustrating. This is what it looked like. Each of those cubes are individual people's  designs. Oh, the music. That was when the dude tried to do his own and then accidentally  overwrote everyone else's. It's a torus, so the people on each side can actually see each  other, and the people on the tops can see the bottoms.  Thank you very much.  Well done. Well done. Good job.  So that was the final thing. If anyone's interested in the music you just heard, that's by a really  incredible composer named Julius Eastman, who sadly died in poverty in 1990. Look them  up. Thank you.  Hello. I'm Ernest. I really like to tweet. You might think that tweeting is my full-time  job based on this incredible brand engagement, but in reality I work for the Python Software  Foundation. I also tweet a lot, and so if you want to follow me, that's where you do  it on Twitter. But yeah, the Python Software Foundation. So the Python Software Foundation,  if you're not aware, is a nonprofit that controls the intellectual property, copyright,  trademark, et cetera, for Python the language. Also, it is a grant-giving nonprofit, and  so we raise money, and we pour that money back into the community in order to support  events like this, meetups, and smaller events as well. There's a larger event associated  with the Python Software Foundation called PyCon. If you're not familiar with PyCon,  it was in Cleveland in 2019. It's going to be in Cleveland in 2018. It's going to be  in Cleveland in 2019, and I want to talk briefly about that. Currently, the call for proposals  for PyCon is open. You can check that URL out to go submit a talk, tutorial, education  summit, presentation poster, or a charlis, or a talk in Spanish. Speaking of talks in  Spanish, the PyCon charlis came out of the PyCon Hatchery Program, and so this is kind  of what I really want to pitch to you. The PyCon Hatchery Program is a way for your ideas  to be realized in PyCon. So if you've ever been to PyCon and not seen something that  you wanted to see, this would be the way that you would tell us what you want to see, and  perhaps even propose to do the work to make it so. So please check out the Hatchery Program  and read more about that. So you might be saying, okay, like, this is DjangoCon. So  what about Django? The Python Software Foundation loves Django. We actually, so I'm the director  of infrastructure, and so that's like a bunch of services that run on python.org. Out of  that, seven of them are currently written in Django. The PyCon website is written in  Django, and I love Django. Admission, I haven't always loved Django, but it's gotten much  easier in the past few years. And so being here and being among people who are interested  in or experts in Django has been really exciting. And so I'm also going to come up here and  ask for your help. I frequently tweet, and sometimes I tweet about asking for help in  Django. More often than not when I'm tweeting about Django, it's asking for help. So help,  please. And when I say this, I mean this sincerely. If you're in this room, it is probably because  Django has either made you feel like you have superpowers or you want to feel what it feels  like to have superpowers, and I want you to be involved in Django and the PSF and PyCon,  if any of that's true. You might just be starting out, and I'd love to work with you to get  you started. You might be an expert, and I would love to work with you to get a little  bit more of that expertise, and so that we can all share and grow. So there's also a  bonus. It's not Django, but PyPI is a piece of software many of you in the room might  be familiar with, and if you're all interested in contributing to PyPI, we have stickers  now. You can check out a micro sprint that's going to be occurring at lunch with myself  and Dustin Ingram, and that's it. I'm Ernest, and you can follow me on Twitter there.  Okay, so I'm going to talk about you get folks about one plus one equals one or record a  duplication with Python. This is a 45-minute talk. I will make it in five minutes. Not  sure if it will work. So real-world data is a mess. Probably you dealt with data like  this before. Those are restaurants, restaurant records, and you see here that clearly those  four records here from zero to three are duplicates because the name is quite similar. The address  is similar, CDKMVRI. So we have duplicates here. Real-world data is a mess. We don't  have unique identifiers, and the solution is to perform the duplication, as well as  record linkage to join records in a fusing way using data like names and addresses. Mostly  we'll deal with those kinds of dates, but it can be other kinds of dates. And to solve  that, we should do some fuzzy comparison of strings. We can use algorithms like Jeroinkler,  similarity. If I compute the Jeroinkler similarity between those two similar strings, I get  this high number, and with those different strings, I get this lower number. So I can  use that as a tip for me as an indication of similarity between records. I can do also  fuzzy comparison of addresses. And the trick is to geocode them to lead to the longitude,  and that will allow us to clean irrelevant address variations, like a small variation  on the street number or something like that, and to enable the calculation of geometric  distance using latitude and longitude, because we want to group and match things that are  close together. And if I geocode those two addresses here, you can see that although  they have variations and even typos, the latitude and longitude is the same, and the  zip code is also the same. I can grab this from Google Geocoders, for example. Okay,  now into the process of deduplicating a dataset. First, we need to preprocess it. We will use  the restaurant dataset. It contains 181 restaurant records from the folders and Zagats guides,  and it contains 150 duplicates, and we want to find those duplicates. The dataset looks  like this. So it comes with the cluster column, which is the truth about this data. Of course,  we will remove that, and we will also remove the phone column, because it will make things  very easy for us, and we will have left only with name, address, and CD. And we want to  deduplicate using only that. First, we clean, just using some reg access to clean the name.  We will geocode all the addresses, so we get the postal latitude and longitude for the  addresses. And then we can move to the next step on the record linkage process, which is  indexing. We will use the library record linkage, also known as Python record linkage  toolkit, and we have the clean records. Now we want the pairs to compare to find matches.  To produce the pairs, we could do a full index. We could compare our records against our records.  Of course, that's slow, but we don't have enough time to think about a smarter way to  index, so we just produce our records against our records. And the pairs look like this.  We compare 0 with 1, 0 with 2, and there it goes. Now running the comparisons. We want  to compare the pairs to get a comparison vector for each pair. So the comparison vector looks  like this. The names are similarities 0.5, the other similarity 0.8, and that's our comparison  vector. And to compute the comparison vectors, we define similarity functions for each column.  We can do that with the record linkage toolkit. We use Jeroinkle for our name address postal  and an exponential decay geometric similarity between latitude and longitude. And that's  what we get if we run that. Now with the vectors, we want to explore different ways to classify  them as matches and no matches. And we can do some simple threshold-based classification.  We can compute a weighted average over those vectors. And by looking at data, we see that  those three are matches. So we just consider anything with more than 0.9 of a score as  a match. And if we do that and compute from the truth about this data, we see that we  got 128 true positives and two false positives, only two false positives and 22 false negatives.  So it's quite good performance, but there are smarter ways to solve that problem. Make  sure to check active learning classification. It will help you a lot because it will allow  you to build a training set for your data. Thank you very much.  Thank you.  Okay. So I said in Felipe, I'm partners at Vinta. And let's talk about parks. So I have  an image here of two layouts for a park trail or something like that. And I want you to  think about which one of those you think is a more pleasant trail for a park. So to be  honest, this is a very trick question. I didn't give you enough information to answer that.  And the reason is you don't know anything about the terrain. You don't know anything  about if there are trees around. You have no idea of what's going on in that area. So  to answer that kind of questions, you need something like this book, which called a partner  language from Christopher Alexander. And it's from 1977. And this guy, he defined a series  of patterns and things to help architects to build and design and do good architecture.  So for example, you can take the pattern 120, which is about paths and goals. And it says  the out of path will seem right and comfortable only when it's compatible with the process  of walking. And the process of walking is far more suitable than one might imagine.  This is very interesting, especially because it can be visualized through this thing called  desire paths. Desire paths are like in this image, they show how people interact with  the place they live through like these patterns in the terrain. So for instance, here we are  seeing there are two paths going one that goes straight to the door, where there is  a fence and another one that goes around. So at some point, the fence didn't exist there.  And people just changed the way they went inside the house after that. Also, this other  example, so in this case, people are going around the trees. And here is very interesting  because they got the desired pattern, the desired path and actually made it a fixed path and  a proper path. So one thing to remember, and this comes from this idea of patterns and  paths, is that when you see a big street, mainly when it's a old one, a main avenue  in a city, probably at some point there was a bare road in the woods. And maybe before  that, there was just a path where people and animals passed by. And so those are patterns  and this is from Christopher, the author of the book, and he says, this idea comes simply  from the observation that most of the wonderful places of the world were not made by architects  but by people. So the book is really very based on this, on how architecture is made  by people and constructed naturally. So the book has other partners and, for example,  the path shape one, there is seed spots. So there's another part that's missing here,  which is about language. So it's a pattern language. We talk about pattern and language.  It's just like when you have words. You have words that have separate meaning by each of  them. And when you group that together, you get a lot more meaning through language. So  language is a group, you group words to convey a lot more meaning. And that's where we get  to design patterns. So design patterns was actually created, the book we know, the software  book we know, was actually created based on Christopher's book. And I don't have a lot  of time to talk about design patterns here, but it's just that idea that comes from. So  let's just jump to some takeaways. So for things that partners are not created, they  emerge. So just like the Christopher's patterns, our design patterns are just observation from  how people code. Design patterns are two for communication between programmers, free speech  and code. They are not to brag about. They are to help you communicate with your teammates.  And the last thing I want to leave to you is that quote that says, good architecture is  about improving people's lives. And most of the time, this means that what feels more  natural or more pleasant to us. And this applies to both to architecture and to programming.  Thank you.  Thank you.  Thank you.  Thank you.
DjangoCon_US_2018_-_Lightning_Talks_Day_1_3iFG9nTSyeo_0_251.png DjangoCon_US_2018_-_Lightning_Talks_Day_1_3iFG9nTSyeo_252_335.png DjangoCon_US_2018_-_Lightning_Talks_Day_1_3iFG9nTSyeo_336_8039.png DjangoCon_US_2018_-_Lightning_Talks_Day_1_3iFG9nTSyeo_8040_8087.png DjangoCon_US_2018_-_Lightning_Talks_Day_1_3iFG9nTSyeo_8088_8999.png DjangoCon_US_2018_-_Lightning_Talks_Day_1_3iFG9nTSyeo_9000_10547.png DjangoCon_US_2018_-_Lightning_Talks_Day_1_3iFG9nTSyeo_10548_12131.png DjangoCon_US_2018_-_Lightning_Talks_Day_1_3iFG9nTSyeo_12132_19331.png DjangoCon_US_2018_-_Lightning_Talks_Day_1_3iFG9nTSyeo_19332_20867.png DjangoCon_US_2018_-_Lightning_Talks_Day_1_3iFG9nTSyeo_20868_20987.png DjangoCon_US_2018_-_Lightning_Talks_Day_1_3iFG9nTSyeo_20988_21347.png DjangoCon_US_2018_-_Lightning_Talks_Day_1_3iFG9nTSyeo_21348_22259.png DjangoCon_US_2018_-_Lightning_Talks_Day_1_3iFG9nTSyeo_22260_22655.png DjangoCon_US_2018_-_Lightning_Talks_Day_1_3iFG9nTSyeo_22656_23459.png DjangoCon_US_2018_-_Lightning_Talks_Day_1_3iFG9nTSyeo_23460_23639.png DjangoCon_US_2018_-_Lightning_Talks_Day_1_3iFG9nTSyeo_23640_23759.png DjangoCon_US_2018_-_Lightning_Talks_Day_1_3iFG9nTSyeo_23760_25115.png DjangoCon_US_2018_-_Lightning_Talks_Day_1_3iFG9nTSyeo_25116_28043.png DjangoCon_US_2018_-_Lightning_Talks_Day_1_3iFG9nTSyeo_28044_29267.png DjangoCon_US_2018_-_Lightning_Talks_Day_1_3iFG9nTSyeo_29268_29915.png DjangoCon_US_2018_-_Lightning_Talks_Day_1_3iFG9nTSyeo_29916_31463.png DjangoCon_US_2018_-_Lightning_Talks_Day_1_3iFG9nTSyeo_31464_31859.png DjangoCon_US_2018_-_Lightning_Talks_Day_1_3iFG9nTSyeo_31860_35459.png DjangoCon_US_2018_-_Lightning_Talks_Day_1_3iFG9nTSyeo_35460_35639.png DjangoCon_US_2018_-_Lightning_Talks_Day_1_3iFG9nTSyeo_35640_36551.png DjangoCon_US_2018_-_Lightning_Talks_Day_1_3iFG9nTSyeo_36552_39131.png DjangoCon_US_2018_-_Lightning_Talks_Day_1_3iFG9nTSyeo_39132_39587.png DjangoCon_US_2018_-_Lightning_Talks_Day_1_3iFG9nTSyeo_39588_40979.png DjangoCon_US_2018_-_Lightning_Talks_Day_1_3iFG9nTSyeo_40980_41435.png DjangoCon_US_2018_-_Lightning_Talks_Day_1_3iFG9nTSyeo_41436_42179.png DjangoCon_US_2018_-_Lightning_Talks_Day_1_3iFG9nTSyeo_42180_42275.png DjangoCon_US_2018_-_Lightning_Talks_Day_1_3iFG9nTSyeo_42276_42335.png DjangoCon_US_2018_-_Lightning_Talks_Day_1_3iFG9nTSyeo_42336_43391.png DjangoCon_US_2018_-_Lightning_Talks_Day_1_3iFG9nTSyeo_43392_43727.png DjangoCon_US_2018_-_Lightning_Talks_Day_1_3iFG9nTSyeo_43728_44447.png DjangoCon_US_2018_-_Lightning_Talks_Day_1_3iFG9nTSyeo_44448_44531.png DjangoCon_US_2018_-_Lightning_Talks_Day_1_3iFG9nTSyeo_44532_45155.png DjangoCon_US_2018_-_Lightning_Talks_Day_1_3iFG9nTSyeo_45156_45227.png DjangoCon_US_2018_-_Lightning_Talks_Day_1_3iFG9nTSyeo_45228_46475.png DjangoCon_US_2018_-_Lightning_Talks_Day_1_3iFG9nTSyeo_46476_49091.png DjangoCon_US_2018_-_Lightning_Talks_Day_1_3iFG9nTSyeo_49092_49391.png DjangoCon_US_2018_-_Lightning_Talks_Day_1_3iFG9nTSyeo_49392_49823.png DjangoCon_US_2018_-_Lightning_Talks_Day_1_3iFG9nTSyeo_49824_49955.png DjangoCon_US_2018_-_Lightning_Talks_Day_1_3iFG9nTSyeo_49956_52127.png DjangoCon_US_2018_-_Lightning_Talks_Day_1_3iFG9nTSyeo_52128_52331.png DjangoCon_US_2018_-_Lightning_Talks_Day_1_3iFG9nTSyeo_52332_55463.png DjangoCon_US_2018_-_Lightning_Talks_Day_1_3iFG9nTSyeo_55464_56579.png DjangoCon_US_2018_-_Lightning_Talks_Day_1_3iFG9nTSyeo_56580_56903.png DjangoCon_US_2018_-_Lightning_Talks_Day_1_3iFG9nTSyeo_56904_57683.png DjangoCon_US_2018_-_Lightning_Talks_Day_1_3iFG9nTSyeo_57684_58007.png DjangoCon_US_2018_-_Lightning_Talks_Day_1_3iFG9nTSyeo_58008_58223.png DjangoCon_US_2018_-_Lightning_Talks_Day_1_3iFG9nTSyeo_58224_58595.png DjangoCon_US_2018_-_Lightning_Talks_Day_1_3iFG9nTSyeo_58596_59723.png DjangoCon_US_2018_-_Lightning_Talks_Day_1_3iFG9nTSyeo_59724_59771.png DjangoCon_US_2018_-_Lightning_Talks_Day_1_3iFG9nTSyeo_59772_60071.png DjangoCon_US_2018_-_Lightning_Talks_Day_1_3iFG9nTSyeo_60072_60731.png DjangoCon_US_2018_-_Lightning_Talks_Day_1_3iFG9nTSyeo_60732_60851.png DjangoCon_US_2018_-_Lightning_Talks_Day_1_3iFG9nTSyeo_60852_60995.png DjangoCon_US_2018_-_Lightning_Talks_Day_1_3iFG9nTSyeo_60996_61043.png DjangoCon_US_2018_-_Lightning_Talks_Day_1_3iFG9nTSyeo_61044_61111.png
Alright. I'm coming up here as I feel like I'm Miss Schwag here. I've got my new little self-unholder and water and shades. So I'm like stoked on all the free stuff. So I don't know if a lot of you guys here are for the free stuff, but I'm here to, so next week I'm going home. I live here so I'm kind of on vacation all the time, but next week I'm going home to Minnesota. And yeah, Skoll, right? Anybody who is here from Minnesota? So next week, going home, my cousin is in stand up and I want to do that with him. So this is my first kind of public speaking little practice. But meanwhile, I'm a programmer. So I feel like I have some funny things to say about programming, alright? So I'd like to say thank Chloe and because as a programmer who's locked in a padded cell all day, it's nice to laugh. And I think we don't laugh enough as programmers. So here I am trying to make us laugh. And my boss shows me away in that padded cell, says go do X, Y, Z, a little inside joke because I did just did a plot on X, Y, Z. And I work at Scripps Institute of Oceanography. My goal, you know, save the oceans. So that's what I do on my day job. And meanwhile, I crack myself up all the time. So I thought hey, might as well give it a try, you know, crack into me all. So we're in the land of the hippies, aka San Diego. And we like labels. So I actually don't have a button because I don't really care for labels, but I respect other people's labels. And so, you know, except for food, I'm always like is this local organic shade grown fair trade, you know, I like my food labels, right? Well, another thing of land of the one, we are one with, we like to be one with each other, one with nature, one with ourselves. Let me tell you about what I wish we were one with at a time. It was just like there's just never enough time, right? And anybody program with time, time zones, time zones. Oh, those are fun, aren't they? Because oh, man, there's more than just 24. And I'm talking to normal people, like oh, I know a lot about time zones, man. There's more than 24. Some of them are 30 minutes or 45 minutes apart. And then there's daylight savings time. I am like, please, can we get rid of this? Like, I've been looking up on the history of this because I'm like, this just is archaic. This needs to go. Programming, you're just like, oh, my God, can we not just all be one with time? It's called UTC. You know, I wish that would be, that would just be my programming life so much easier. So, new to social media. I just started my Twitter. Thank you. I started my Twitter today to, because I was like, it's in a spreadsheet and I love to fill up spreadsheets. I've been doing spreadsheets since I was 10. So Twitter, all right, but we need to do this at procrastinating. I was just in a little push. All right, made a Twitter. Twitter is Pico DeLoco. There's one. But because there was already Pico DeLoco, I just made an Instagram account like a month ago. Only a few posts, a lot of cats, dogs, you know, and I skateboard and so anyways. So it's me, right? Well, I was Pico DeLoco. I do Twitter. There's already one. So I'm Pico DeLoco, one. Well, okay. Well, all right, so get on Instagram, change my name now. And I am now Pico DeLoco, one. Because guess what? I am crazy. I was crazy once. They locked me in a room with bugs. Bugs make me crazy. I was crazy once. They locked me in a room with bugs. Oh, yes, because programming bugs, programming bugs make me crazy. Especially when you're all alone trying to figure out a bug. It makes me crazy. So I'm crazy. I embrace the crazy. I am proud of my crazy label. Some people think, oh, crazy is derogatory. No, I'm crazy and I'm proud. So, oh, oh, I got one minute left. I'm going fast because I talk fast. So try to listen fast because I ain't slowing down. Can't stop. Won't stop. Social media. I'm on social media. So, so, I'm new to things. I got this 360. I want to get a YouTube. Haven't done a YouTube video yet. Going to. I see you. And focus, focus, focus. It's what I need to do. I have a little bit of ADD. I'm having a hard time right now staying to this microphone because I like to move. And my boss, meanwhile, I just sit in an office all day trying to sit on that chair. I'm trying to be a real good. I'm trying to be a good employee trying to sit on that chair all day. Sometimes you get tunnel vision. You get code mode. You're just going, going, going, going, going, going, right? Meanwhile, oh, dang it. I got to go to the bathroom. Boom. That's when you figure something out is when you stepped away, right? You step away. You realize I need to step away a little bit more often, you know? Because we all need to step away. Anyways, last thought, trying to save the oceans. Sometimes there's labels, respect those labels, including recycle labels. So maybe I'll use them, recycle cups or whatever. Hey, try to put in a cup. Try to put in a bottle. If you're not, if it's a recycle, make sure it goes in the recycle. Thank you. Want to hug? Thanks. Hi, everybody. I'm Tim. I write code for the Wharton School, various open source projects and most importantly for myself. I help organize DjangoCon US here and also the Philadelphia Python users group back home. I started writing code when I was six years old because my mom won a raffle and I've been doing it ever since and absolutely love it. I consider myself very lucky to get paid to do what I love with colleagues and friends that are close enough to be considered like a second non-DNA family. So let me show you my GitHub chart from 2014. Does that look like the chart of somebody who likes to write code a lot? The truth is in 2014 I wasn't doing what I loved. I had been slipping further and further away from doing what I loved for a long time. While I still worked hard and had a lovely home, squaring who I thought I was and who I should be with how I acted was getting harder and harder every day. Looking in the mirror was getting harder and harder every day. It was because of this that I had to change just one thing. What happened here? For many, many years I had been trying to change just one thing on my own and failing. Finally in April I asked for help with my alcohol addiction problem. In May I got out of rehab and you can see a sudden uptick in activity there and I've been cleaning sober one day at a time ever since. So thank you. So what happened here in July and August? I made a terrible, terrible, tragic mistake and reopened my World of Warcraft account. So 2016 looks like it might be a bit of a lighter year but I was contributing to several private repositories and me and my friends from Morton were also a little busy helping host this conference that you may have heard of the year it was in Philadelphia. But when we take a look at 2017, this is where I really started to hit my stride having gotten more involved with a bunch of open source projects and from Morton we also started to put some of the packages we had been developing internally on GitHub and PyPI. If you take a look at 2018, it's up to, so the first year was 21 contributions in the year, 1053 in the last year. So as you can see now I'm pretty active again and doing what I love, writing code with a community of friends old and new. It's been such a wonderful way to connect and just such a better life. So what I just really want to do here is ask everybody, if there is one thing that you could change about yourself, one thing that you don't like, what would it be and how much better could your life look if you could change just that one thing? It doesn't have to be an addiction like I had. It doesn't have to be, you know, only you will really know what it is when you look at the mirror at night. But I want to encourage everybody here to, you know, if you do have that one thing that you want to change about yourself, it is worth doing. It is worth asking for help for. I couldn't do it until I asked for help. And I've had support not just from the rehab center I went to and not just the recovery communities I've been in. My colleagues at work have been incredibly supportive. The Django community, which I've immersed myself in ever since, has been incredibly supportive. And it's been an amazing amount of support everywhere I've looked to try to keep this going one day at a time. And the same thing could happen for you. Because if you need help to make that change, you know, absolutely ask for it because it really did save my life. And you know, as Gandhi said, we must be the change we want to see in the world. So if you have a problem, sometimes changing one thing can change everything. And it really did for me. Thank you very much. Hello, everyone. I'm a software developer and I write software. But occasionally I do not only need to write software, I also need to write documentation or put a website for the software that I've written. Both things usually include screenshots. And doing screenshots is cumbersome. You want to do them on different screen resolutions. You might want to do them with different locale. And once you're all done having created them, they are outdated and you have to start over again. So let's automate this. And let's automate it with tools that we already know or that probably most of you have already seen. The first tool that we want to use is Selenium. You might know Selenium as something to write front-end tests for your web application. Basically, it's a way to remotely control your browser from a program. The next ingredient is Chrome Headless. Chrome Headless is a way to start Chrome without requiring a display or anything attached. So you can run it on a server without needing to have a full-blown desktop operating system. And then we use PyTest. PyTest is a test runner. But if you look at it closely, it's not only a test runner, but it makes it easy to define tests and run them in specific ways. But basically, it's a way to run functions in a specific way. So usually you have a test that is just a Python function prefixed with test underscore and that checks for something. And then you run PyTest and it finds all of those functions in your project and runs them and informs you about the result. But PyTest can do so much more. It can have parameters for input and fixtures and so on. Fixtures, for example, are things that you want to, that should be there before the test is run. So for example, in this code snippet, we are testing in the SMTP library and we have a fixture that creates an SMTP connection object and then we have a test that declares that it needs this fixture parsed as an input. And for Django, there is PyTest Django. And in Django itself, there's live server test case which allows for creating a test case that accesses an actual run server-like version of your app. So with all these ingredients, we already know them. They are usually used for testing. In this case, we will use them for screen-shutting. And to make it a bit nicer, we use PyTest's configuration to redefine some strings. For example, we want to define our screen-shuts in scene files with shot functions and not in a, we don't want to call it tests. And then we can use fixtures to create objects because nobody is interested in screen-shuts of an empty application. We want to populate the data ways in some way beforehand. And we can define, and as another picture, we define the Selenium client that is already logged into our system. We can also define our screen resolution in a fixture as well as any other options that we want to pass to Chrome. And then we can define everyone, our screen-shuts by simply writing something like a PyTest test with specifying what fixtures we want to be run before and then just calling a utility function that does a screen-shut with Selenium. And we can run it by just calling PyTest on our folder and we're done. And with PyTest parameters, for example, you could do this for every language that your project supports or for every theme that your project supports or whatever and you end up with a bunch of screen-shuts. And for the application I'm working on, you can find the repository with the screen-shut definitions and also the utility code that is a bit more complicated than I've shown here in this GitHub repository. And thank you very much. If you have any questions on that, feel free to talk to me in the hallway. Thank you. Hello. It's time for our story. Today's story is that's not my emoji. That's not my emoji. Its head is too shiny. This is too emoji put together. This is not an emoji. This is not my emoji. Its face is far too animated. Can you make a unicorn sound? Emojis do not have sound. This is not my emoji. Its existence as a character in a movie is far too distressing. You see, when a studio loves a marketing opportunity too much, they can make a terrible movie out of it where a bunch of the main characters aren't actually emoji. That's not my emoji. It is partying far too hard. You see the pretty bird? He's dancing. Emoji do not dance. That's not my emoji. Its permutations are under documented. Can you wave at the Kai emoji? Hello. That's not my emoji. Its ligature is only vendor implemented. You see the cat drinking coffee? Cats don't drink coffee. This only appears on Windows 10 operating systems. That is my emoji. Its code point is so standardized. That's the end of our story. Sorry about that. This is a talk about crypto. It is not a talk about that stupid new thing. This is a talk about the original crypto which is cryptozoology, the study of cryptids or legendary stroke mysterious creatures. We are talking big foots and chupacabras and the Michigan dog faced man. The reason I am interested in cryptids at the moment is that last week I was in Ohio and I went bat-texing with my wife Natalie in the woods in the dark. It was dark and the woods in the high. We realized we had not done our research. This is America. There are weird creatures out here. We did not know if we were within the range of any of these mythical creatures. I would like to know so that I can greet them and say hi. I obviously hit Twitter and on Twitter I said, just out of interest, does anyone know where I can retain range maps of cryptozoological creatures like yetis and chupacabras and so forth? Then I asked a question about it on Ask Matter Filter and I realized that actually no, the internet does not have a conclusive source of range maps for cryptozoological creatures. I started a GitHub repository. This is a GitHub repository which I would actively encourage people to contribute to where I am trying to get a directory of information on cryptids and their ranges. The way I am doing this is using a file format called GeoJSON. It is a way of representing geographical shapes in JSON. Let's take a look at the Love Land Frogman. This is my GeoJSON file for the Love Land Frogman. The great thing about GitHub is that GitHub knows how to render GeoJSON. It is rendering this shape for me. If I click on that shape, I can see that it has a Wikipedia URL, the name. It was first cited in 1955, last seen in 1972. It is a human-eyed frog described as standing roughly four feet tall. That was my first cryptid. I have been, you know what, I have got some pull requests. Russell has sent me a pull request adding the drop-bear. I am going to merge this right now. If I am lucky, it will deploy by the end of my lightning talk. I should have done this a couple of minutes ago. We now have a drop-bear. It is very exciting. So you get the idea. What am I doing with this data? I have been working on this open source project called Dataset, which is an application that takes a SQLite database and gives you a UI for exploring it. It gives you an API for getting the data back out as well. It is the perfect application for cryptozoology. What I have done here is this GitHub repository has Travis set up to run a script every time I commit anything. The script reads in the GeoJSON and writes it into a SQLite database. It is all of what? 123 lines of code. There is not a lot to this. It builds a SQLite database with all of these cryptids. It deploys it. Then, based on this, I can build out an API. Here is the nice thing about Dataset. Everything is SQLite. The API is just a SQL query. Here is a SQL query that selects details of cryptids where the geometry overlaps the, where, within GeoMTech, so where the geometry overlaps a point. Here is our current last-year longitude right now. If I run that query, I get back the Bigfoot. It turns out America has a lot of Bigfoot sightings. This is now a JSON API, which you can feed last-year longitude to. It will tell you which cryptozoological creatures you are within range of. Here is Travis. Travis is building the drop-air right now. If we are lucky, that will be built and deployed in just a moment. I will talk about Bigfoot quickly. It turns out there is already a database of Bigfoot sightings run by the Bigfoot research organization who are banned from Twitter. If you try and tweet a link to bfro.net, you get an error message. Clearly, Twitter is part of a cover-up conspiracy trying to hide the, trying to hide the existence of Bigfoot. But they have got 3,000 sightings. They publish a KML file. A KML file has last-year longitude in. I happen to know that the range of Bigfoot is 15 miles from a conversation I had at the Bigfoot Discovery Museum outside of Santa Cruz, thoroughly recommended. If you take those 3,000 points and put a 15-mile radius on them, you can see that Bigfoot has been sighted across much of the United States, everywhere in Florida, it turns out everyone in Florida has seen a Bigfoot, and here in San Diego. When I ran that query with our San Diego coordinate, I did get back the Bigfoot. I have got an iOS shortcut that isn't working at the moment, so I can say, hey Siri, check for cryptids, that's very useful. If you want something a bit more useful, I do have a version of this that works for time zones instead. Please take a look at the project. Draw maps of cryptozoological creatures, since they probably don't exist, they don't have to be very accurate. Before I get hugged, I'm just going to quickly see if Russ's drop bear has deployed yet. Unfortunately, it looks like the drop bear did not quite make it, but in a couple of minutes there will be a drop bear, so thank you very much. All right. Thank you. This is the first presentation I've given in a very long time. This was from something I did literally eight years ago, so I'm going to try and do this really quickly. In 2010, I was at a place called the Santa Fe Institute for Summer Program, and they asked us to create various research projects, so me and some friends stuck something together in three weeks, which was a Django app, which you'll see. Four years later, I got diagnosed with a really complicated situation, which is why I've had three surgeries and why I can't have this part of my glasses on that side of my face. Long story. Still managed to get a PhD in sociology, now I'm trying to figure out what to do. It went so well. My most recent surgery in June that I'm here, and I'm really, really happy to be here. My GitHub name is Spool. If any theater nerds who know Crap Slash Tape get that reference, please see me after, because very few people do. The project was to try to study how people collaborate creatively and how they might respond to each other in making a design. I'm going to skip over that, because that was a lot of, again, some things I had before. You can ask me stuff about. Basically, if we're working together on making a design, how do people respond to each other's things? People may be aware of the whole Reddit project that came a couple years ago. This came before that, technically, in 2010, and you'll see some differences in the Yotuzer interface. The idea was we printed a t-shirt at the end. It was going to be a black t-shirt by default, and then we were going to put some designs on it. We wrote it in Django in a language called processing, which is really cool for doing some user interface and sound experiment stuff. There was a processing JS back then, which was really slow. There's now P5JS, which I really recommend people try if they like to. What we did is we created a grid with 64 cells or squares that people could do their own designs on, and that whole thing became the canvas. You could only see your more neighbors. Can I see a pair of hands? Are hands for anyone who knows what a more's neighbor is? Okay. Oh, there's one. Do you want to tell everyone what that is? Fine. Okay. That's cool. You'll see it in a second. This is just an example of how we've run it in a museum recently. You get assigned a square in this big grid, and you can only see the edges of your neighbors. There's the ones to the left, right, top, and bottom, and then those are the ones on the corners. Those eight are the more's neighborhood. You can press spacebar, do a design, and then press spacebar at the end, and you see how your design fits alongside the designs of everyone else. Okay. Press play again. That was that. You could log back in. When we ran it at a museum, you could only do one design and then see the whole canvas. The way we ran it as a website is you could log in. You could only see your neighbors, and if you logged in the next day, you might see how your neighbors changed, and then you could respond. We had a couple of problems. If someone logged in and then left it for an hour and then logged back in, their neighbors might have changed, and then they would log in, and we ended up, they would accidentally not respond to the most recent changes of their neighbors. We should have done that with web sockets. We also didn't take into account time zones. Someone's laptop was on a different time zone, and they kept overwriting everyone else's, and we didn't know why. That was really frustrating. This is what it looked like. Each of those cubes are individual people's designs. Oh, the music. That was when the dude tried to do his own and then accidentally overwrote everyone else's. It's a torus, so the people on each side can actually see each other, and the people on the tops can see the bottoms. Thank you very much. Well done. Well done. Good job. So that was the final thing. If anyone's interested in the music you just heard, that's by a really incredible composer named Julius Eastman, who sadly died in poverty in 1990. Look them up. Thank you. Hello. I'm Ernest. I really like to tweet. You might think that tweeting is my full-time job based on this incredible brand engagement, but in reality I work for the Python Software Foundation. I also tweet a lot, and so if you want to follow me, that's where you do it on Twitter. But yeah, the Python Software Foundation. So the Python Software Foundation, if you're not aware, is a nonprofit that controls the intellectual property, copyright, trademark, et cetera, for Python the language. Also, it is a grant-giving nonprofit, and so we raise money, and we pour that money back into the community in order to support events like this, meetups, and smaller events as well. There's a larger event associated with the Python Software Foundation called PyCon. If you're not familiar with PyCon, it was in Cleveland in 2019. It's going to be in Cleveland in 2018. It's going to be in Cleveland in 2019, and I want to talk briefly about that. Currently, the call for proposals for PyCon is open. You can check that URL out to go submit a talk, tutorial, education summit, presentation poster, or a charlis, or a talk in Spanish. Speaking of talks in Spanish, the PyCon charlis came out of the PyCon Hatchery Program, and so this is kind of what I really want to pitch to you. The PyCon Hatchery Program is a way for your ideas to be realized in PyCon. So if you've ever been to PyCon and not seen something that you wanted to see, this would be the way that you would tell us what you want to see, and perhaps even propose to do the work to make it so. So please check out the Hatchery Program and read more about that. So you might be saying, okay, like, this is DjangoCon. So what about Django? The Python Software Foundation loves Django. We actually, so I'm the director of infrastructure, and so that's like a bunch of services that run on python.org. Out of that, seven of them are currently written in Django. The PyCon website is written in Django, and I love Django. Admission, I haven't always loved Django, but it's gotten much easier in the past few years. And so being here and being among people who are interested in or experts in Django has been really exciting. And so I'm also going to come up here and ask for your help. I frequently tweet, and sometimes I tweet about asking for help in Django. More often than not when I'm tweeting about Django, it's asking for help. So help, please. And when I say this, I mean this sincerely. If you're in this room, it is probably because Django has either made you feel like you have superpowers or you want to feel what it feels like to have superpowers, and I want you to be involved in Django and the PSF and PyCon, if any of that's true. You might just be starting out, and I'd love to work with you to get you started. You might be an expert, and I would love to work with you to get a little bit more of that expertise, and so that we can all share and grow. So there's also a bonus. It's not Django, but PyPI is a piece of software many of you in the room might be familiar with, and if you're all interested in contributing to PyPI, we have stickers now. You can check out a micro sprint that's going to be occurring at lunch with myself and Dustin Ingram, and that's it. I'm Ernest, and you can follow me on Twitter there. Okay, so I'm going to talk about you get folks about one plus one equals one or record a duplication with Python. This is a 45-minute talk. I will make it in five minutes. Not sure if it will work. So real-world data is a mess. Probably you dealt with data like this before. Those are restaurants, restaurant records, and you see here that clearly those four records here from zero to three are duplicates because the name is quite similar. The address is similar, CDKMVRI. So we have duplicates here. Real-world data is a mess. We don't have unique identifiers, and the solution is to perform the duplication, as well as record linkage to join records in a fusing way using data like names and addresses. Mostly we'll deal with those kinds of dates, but it can be other kinds of dates. And to solve that, we should do some fuzzy comparison of strings. We can use algorithms like Jeroinkler, similarity. If I compute the Jeroinkler similarity between those two similar strings, I get this high number, and with those different strings, I get this lower number. So I can use that as a tip for me as an indication of similarity between records. I can do also fuzzy comparison of addresses. And the trick is to geocode them to lead to the longitude, and that will allow us to clean irrelevant address variations, like a small variation on the street number or something like that, and to enable the calculation of geometric distance using latitude and longitude, because we want to group and match things that are close together. And if I geocode those two addresses here, you can see that although they have variations and even typos, the latitude and longitude is the same, and the zip code is also the same. I can grab this from Google Geocoders, for example. Okay, now into the process of deduplicating a dataset. First, we need to preprocess it. We will use the restaurant dataset. It contains 181 restaurant records from the folders and Zagats guides, and it contains 150 duplicates, and we want to find those duplicates. The dataset looks like this. So it comes with the cluster column, which is the truth about this data. Of course, we will remove that, and we will also remove the phone column, because it will make things very easy for us, and we will have left only with name, address, and CD. And we want to deduplicate using only that. First, we clean, just using some reg access to clean the name. We will geocode all the addresses, so we get the postal latitude and longitude for the addresses. And then we can move to the next step on the record linkage process, which is indexing. We will use the library record linkage, also known as Python record linkage toolkit, and we have the clean records. Now we want the pairs to compare to find matches. To produce the pairs, we could do a full index. We could compare our records against our records. Of course, that's slow, but we don't have enough time to think about a smarter way to index, so we just produce our records against our records. And the pairs look like this. We compare 0 with 1, 0 with 2, and there it goes. Now running the comparisons. We want to compare the pairs to get a comparison vector for each pair. So the comparison vector looks like this. The names are similarities 0.5, the other similarity 0.8, and that's our comparison vector. And to compute the comparison vectors, we define similarity functions for each column. We can do that with the record linkage toolkit. We use Jeroinkle for our name address postal and an exponential decay geometric similarity between latitude and longitude. And that's what we get if we run that. Now with the vectors, we want to explore different ways to classify them as matches and no matches. And we can do some simple threshold-based classification. We can compute a weighted average over those vectors. And by looking at data, we see that those three are matches. So we just consider anything with more than 0.9 of a score as a match. And if we do that and compute from the truth about this data, we see that we got 128 true positives and two false positives, only two false positives and 22 false negatives. So it's quite good performance, but there are smarter ways to solve that problem. Make sure to check active learning classification. It will help you a lot because it will allow you to build a training set for your data. Thank you very much. Thank you. Okay. So I said in Felipe, I'm partners at Vinta. And let's talk about parks. So I have an image here of two layouts for a park trail or something like that. And I want you to think about which one of those you think is a more pleasant trail for a park. So to be honest, this is a very trick question. I didn't give you enough information to answer that. And the reason is you don't know anything about the terrain. You don't know anything about if there are trees around. You have no idea of what's going on in that area. So to answer that kind of questions, you need something like this book, which called a partner language from Christopher Alexander. And it's from 1977. And this guy, he defined a series of patterns and things to help architects to build and design and do good architecture. So for example, you can take the pattern 120, which is about paths and goals. And it says the out of path will seem right and comfortable only when it's compatible with the process of walking. And the process of walking is far more suitable than one might imagine. This is very interesting, especially because it can be visualized through this thing called desire paths. Desire paths are like in this image, they show how people interact with the place they live through like these patterns in the terrain. So for instance, here we are seeing there are two paths going one that goes straight to the door, where there is a fence and another one that goes around. So at some point, the fence didn't exist there. And people just changed the way they went inside the house after that. Also, this other example, so in this case, people are going around the trees. And here is very interesting because they got the desired pattern, the desired path and actually made it a fixed path and a proper path. So one thing to remember, and this comes from this idea of patterns and paths, is that when you see a big street, mainly when it's a old one, a main avenue in a city, probably at some point there was a bare road in the woods. And maybe before that, there was just a path where people and animals passed by. And so those are patterns and this is from Christopher, the author of the book, and he says, this idea comes simply from the observation that most of the wonderful places of the world were not made by architects but by people. So the book is really very based on this, on how architecture is made by people and constructed naturally. So the book has other partners and, for example, the path shape one, there is seed spots. So there's another part that's missing here, which is about language. So it's a pattern language. We talk about pattern and language. It's just like when you have words. You have words that have separate meaning by each of them. And when you group that together, you get a lot more meaning through language. So language is a group, you group words to convey a lot more meaning. And that's where we get to design patterns. So design patterns was actually created, the book we know, the software book we know, was actually created based on Christopher's book. And I don't have a lot of time to talk about design patterns here, but it's just that idea that comes from. So let's just jump to some takeaways. So for things that partners are not created, they emerge. So just like the Christopher's patterns, our design patterns are just observation from how people code. Design patterns are two for communication between programmers, free speech and code. They are not to brag about. They are to help you communicate with your teammates. And the last thing I want to leave to you is that quote that says, good architecture is about improving people's lives. And most of the time, this means that what feels more natural or more pleasant to us. And this applies to both to architecture and to programming. Thank you. Thank you. Thank you. Thank you.
had been trying to change just one thing on my story is that's not my emoji. That's not my written in Django, and I love Django. Admission, or record a duplication with Python. This is a