 Alright, first let me talk is Ali Sevgi. He's going to talk about Busy Beaver, the Chicago Python Community Engagement Slackbots. Give him a round of applause. Hi everybody, my name is Ali Sevgi. I'm one of the organizers of the Chicago Python users group. And I'm here to talk to you about this community engagement initiative I've been working on for the past few months called Busy Beaver. So we're really fortunate to have a fantastic community of Pythonistas in the Windy City. And at the heart of this community is the Chicago Python users group, or CHIPI. With over 4,600 members, CHIPI is one of the largest tech-focused communities inside the United States. We've been around for 15 years, and at that time we've had around 150 plus monthly meetings. In addition to our general meeting that happens once a month, we have a lot of special interest groups for more niche interests. So we have one for data, web development slash DevOps, finance. We recently started one on algorithms and coding interviews to help people whiteboard. We have one for lunch, so people that can't make their evening meetups can attend that one. And we recently started doing some open-source spreads. So last month we spurred it on chippy.org. We also have a monthly project night. And this project night has two tracks. There's a challenge project night track. And here there's a group of four people. They mod program on an assignment together. And we also have a BYO, bring your own project track, where people just work on projects and they get help if they need it. We also have a world-famous mentorship program. This is a 13-week, one-on-one project-based mentorship. There's two cohorts a year. There's around 20 to 30 people every single cohort. And at the end, the top 10 mentees present their lightning talks at a CHIPI May meeting. The next one's going to be on May 9th in Chicago, so if you're around, please come on by. It's going to be a lot of fun. So like most organizations, Slack is our primary means of communication. And it's really become ingrained within our community. So we have a lot of channels focused on different conversations. Some of my favorites include Book Club. There's one for Admin of Code. And Code Review is always a lot of fun, too. Slack has a lot of plugins. And we use these plugins quite extensively. But they don't really solve the specific problem that we have. We're trying to build a tech-focused community, and we have a different set of problems. So trying to foster conversations around technology to keep people coming back. So our Slack is only as good as our integrations, only as good as our community. So nothing really fit our specific use case. So we got a team together, and we let them loose on the problem. After a little bit of design and a lot of hard work, the end result was Busy Beaver. And it's a Slack built specifically for the Chicago Python workspace. So the bot's mission is to increase engagement within the Chicago Python community. So that's a pretty broad scope. So what does it really mean? What are some ways we can engage your community? GitHub seems like a good place to start. It's a social coding platform. A lot of developers use GitHub. But as an organization, we didn't really have a lot of insight into what our community was working on. What projects they were doing. What open source contributions they were making. What things were they starring? So working with GitHub seemed like a good place to start. So the first feature we created was a GitHub summary bot. And so what this did was, if you register with this bot, every day at two o'clock, it goes out to GitHub, collects all your public activity in the last day, and it posts it within a channel. It got a lot of great publicity, mostly for me. So we decided to add another feature. Over the past few months, the Chicago Python at Chicago Python Twitter channel, it's becoming a little bit more popular. We're sharing more content. So we decided to integrate this within our Slackler space. So the second feature we built was, since not everybody on Slack follows us on Twitter, we just reshare our tweets inside of that one channel. So if we were released in January so far, we only have two features. But we are an open source project, released under the MIT license. We have a lot of documentation showing how to get started contributing. We also have a project board with a lot of issues. I've been tagging them with a good first issue, how hard they are, how much effort they're going to take. There's also a CI CD pipeline built in. So if you get a feature out there, writes them tests, we can get it shipped into production really quickly. So if you want to start getting contributing, look at it, read me, join the Chippy Slack. I'm going to be sprinting on this project Monday if anybody's around. I have stickers. If anyone wants to get stickers, there could be somebody out there, find me. If you make a PR, I will give you a button. So there's some incentive there. So thanks for your time. But before I go, I just want to acknowledge all my Chippy organizers. Couldn't be up here without all their hard work. And also to everybody on the busy road teams. Thank you, everybody. I'm just holding the mic for you. Yeah, who knew about computers? That's a preview of slide number five, you all. All right. Yeah. Thank you. All right. Veronica is going to give us a talk about get hooked on images and up your documentation game. Let's give her a round of applause. I'm going to do a 30 minute talk in five minutes so you guys don't hold onto your cats. All right. So how many of you use get and get hub for your programming files? Almost all of you. That's fabulous. Okay. So how many of you have explored different ways of documenting your projects? Could be creative use of comments, man pages, images, anything. Can I see some hands? So we talked a little bit about this earlier today. Remember our cat. We got to label our cat. So you could have ASCII to explain where you are in a particular piece of code. You could create whole man pages describing sections of your code. But it's possible that some of these obvious comments aren't so obvious to you. So the best docs are the ones that help you. You need to learn to solve the problems that you have. And your problem solving is going to be with you throughout your careers. Certainly longer than any particular flavor of JavaScript. And I'm a self-taught second career developer and I manage trying a lot of different hats. So today I'm going to talk about a problem that I encountered as I started to shift from scripting to front-end roles, how I developed a solution, and how we can learn to build the tools that we wish we had. So this talk, while it's about tools, is really about opening yourself up to making the software you need to make your Git workflow work for you. So not everyone uses Git the same way. So before I talk about my Git venture, I should tell you where I was when I got started. So when I learned Git, I learned it the way many people do, a kind and loving friend told me, there are these five commands, okay? Don't ask me again. It's been 72 times that you've asked. Just write down the five commands. Okay, okay. So maybe I got a little bit into that person's hair. I never did get intensive and everything that I've learned since then, I've learned as I've needed to do it. So as you can guess, when I started to work on my own projects, I was a little uncomfortable with the whole Git time travel thing. So I tried to keep things linear, so I could push, pull, check out. But anything fancier than that didn't feel like it, you know, it kind of felt out of the question. However, there's a lot of things you can do with Git, and I made a partial list right here. So at the time I was relying, as I started to move to more visual work, I was continuing to rely on commit messages to guide this time travel, and I researched how to write good commit messages, but because I was making these small visual changes, sometimes just color changes. Do I add in hex values to my commits? And I was making small changes and experimenting, and so I had a lot of trouble finding the right commit to makes. So I started to wonder if there was a better way. So I'm a super visual person. I've always been a super visual person. This is my second career. I used to be a geologist. We look at rocks. Rocks have orientations, and we take pictures of them, and we use these as documentation. So as I was shifting, I started to look for ways that that visual documentation would show up. One of my first open source projects was I was applying to outreach, and I was trying to create a dashboard, and I found myself really wishing, as I was looking at these requests, to know where the dashboard had been in the past, because I was not only trying to learn a new language. Yes, I tried to apply to outreach using the language I hadn't worked in before. So I was trying to learn that new language, but I was also trying to kind of see where the dashboard had been. And so I talked to the developers and said, do we have screenshots of this? I'd really love to see it. And they said, well, no one does that. And I said, oh, wow, there's a whole industry that doesn't think like me. How amazing does that feel? So I could have felt kind of bad about that, but I realized that I wanted to make something as if five minutes already. It really is. It really is. That's really depressing. Sorry, bro. Let's give her a round of applause. The full version of that talk is online, so you can also just go and watch it. It'll be good. I'll post it. So next up, Mason. Paul, are we set to do another five minutes? We do have raffle prizes. Our funny Python script to wrap them off is not happening today, I guess. The irony there is not lost on anybody. Anyone know if I've done it over? Ooh, that is really hyper-contrasting. Can you all hear me? All right, so Mason is going to talk about CL's program of computer science in every high school. I love it. Let's give him a round of applause. Okay, so in my talk earlier today, I mentioned that I am a volunteer for Teals, and I'm going to take this quick time to do a five-minute spiel on what Teals is. So Teals is a nationwide program that aims to pair industry professionals with teachers who do not have the experience that they need to be teaching computer science in high schools, but are being forced into these situations because of the demand for computer science educators. A lot of these statistics that I'm going to use and put out here are going to be mostly strictly based on Texas because I gave this talk at HomeAway with my regional manager literally yesterday, and I have all of those stats, but I guarantee you these apply across the nation. From what we've actually heard, Texas is actually doing a little bit better on the computer science education than most. So I think a couple of years ago there was a poll that came out that 85% of parents want their children to be learning computer science in high school or in some form of primary education. Currently today in Texas, as it stands, 60% of schools do not offer a single computer science course through their entire primary school curriculum, all the way through secondary school and all of that. So no CS whatsoever. You get a typing course and how to use Word, but you don't get any sort of programming. And what ends up happening, and I give a similar talk at Texas State University, my alma mater, where I usually poll who's a math major and I tell them, congratulations, you're now a computer science educator because you're going to take this class in college and you're going to know computer science and you're going to be asked to teach this. They basically pick a random teacher who has had some sort of programming experience in their collegiate career and they go, oh, you now have to teach AP Computer Science A, which is the advanced Java course that basically covers all the way through data structures and object-oriented programming and oh, you only get one year to teach it. It's extremely difficult. I'm currently doing that right now at a school about 20 miles that way in Ideal Montopolis. And I will tell you right now, I came out of a program from a high school that did this and we're talking getting from Hello World in Java to abstract classes and interfaces and being able to implement them in a timed test by the end of the school year. It's insanely difficult. So what we need is we need educators or what we need is we need professionals to pair with these educators who have the professional experience that can teach and help us teach not only the students, but the main goal is to help educate the teachers so that way after a couple of years the teachers would be able to teach this class on their own without our help anymore. I guess the example that we use is imagine that you had a single AP French class or you had a single French class in college and then you are told you're going to be given ten weeks over the summer to learn French and now you're going to be teaching French AP next semester or oh and I hope all your students pass that test. That's the reality of what's happening. But what if we also said, well also what we're going to do at the same time we're going to put four native French speakers in your classroom and they're going to help you not only teach the course but they're also going to help you teach how to teach the course. Makes it a little bit easier, right? So that's what TEALS aims to be. So there are varying levels of volunteers that you can do. I myself went in deep in with the I teach three times a week from eight to nine o'clock before I go to work every day. You can be a teaching assistant and that's kind of at the same level. That's at the co-teach model. If you don't have that kind of time to dedicate, that's awesome. You know, I understand we all have busy lives. You could also do what's known as the lab assistant model, which is where maybe the teacher has a little bit of experience in the classroom teaching this but doesn't need like a full on co-teach environment to learn how to teach those courses. So what we end up doing is you'll just be a lab assistant two times a week. You come in, the teacher teaches the course and you're there to answer questions during lab maybe help with some of the other stuff. If that's still too much and you don't have like you have very little time they offer things a classroom enrichment program which basically turns into a guest lecture program where you go in every other week, maybe once a semester and enrich the class with your experience. Any level of time you can get, they will find a place to put you. And this is not also only in person. They have an amazingly built remote classroom system that they demoed for me yesterday at my talk at HomeAway and it's like unbelievable. This is where education is going to go in the future with remote educators and they're going to be leading the way with this tech because it's really cool. So if you don't have a school in your local area and you still want to dedicate and you have this time to dedicate, that's fine. If you can get a webcam and a microphone they can set you up in your home and you can teach remotely. So the main thing that we need here is we need people to sign up. If you are interested, I would say go to teals12k.org slash volunteers or just check out the website teals12k. It has been worth everything. It's really been worth it for me to get back in the classroom. I came out of an extremely strong high school computer science program three years in high school computer science. High school got all the way through computer science four in three years and did multiple competitive programming things. I have more medals that say I know Java than I care to admit. Also this curriculum is not all Java. There are multiple classes. Java is kind of like the end course. It's the top level AP. There's a computer science principles AP course which teaches more about what the internet is and stuff and there's an intro course that they're piloting that they're starting just in Python and they need Python developers to help with it and I'm out of time. Round of applause. I can breathe again. I have to leave this plugged in for him. Take it. Alright. Okay so our next talk is Carl. Carl is our videographer. So let's give Carl a round of applause for doing great videos. My answer to can you teach me some Python? Round of applause. I used to hate that question. Now I love it because not enough hands. I whip one of these out. I whip one of those out of my backpack. I handed it to the person. They say. Wow how did it do that? Didn't do it. Yeah it did the battery. Oh no it did it. Whoa. It blinks. Yeah. We did not rehearse this at all. I helped them plug it in. It's a USB thumb drive. Oh by the way it's an Adafruit product 3333 Circuit Playground Express and then their file manager comes up. It's a thumb drive. Yeah. They open code.py with an editor. That's it. So if you can right click and pick open with editor. Yep. You can put that over there. Put that over there. Oh well that makes sense. Yeah. If we would just done rehearsal this would have worked. We're rehearsing. And there you've got some Python code and you can show them if you touch the things lights turn on and if they say how do you make it turn off you can talk to them about Python code and within five minutes they're engaged in programming. No virtual environments. No downloading. No project management. None of that boring stuff. Like even Hello World is boring compared to hey how did that do that? So there you go. I'm done. I need you to just call it whatever. Okay. There you go. All right. So next up is Paul. Paul what's your talk? We're going to talk about custom argument types with argpars. We're going to fix your mic first. Custom argpars. Custom argpars. That's it. That's the types with argpars. Okay. Custom argpars. Let's give them a round of applause. So the last time I gave a lightning talk I went for 45 minutes. So I wrote a script. I hope I can get it done in five this time. So I learned to use argpars the last few months at my job and we needed to do some custom types. Who uses argpars in here? Write CLI scripts with community arguments. Great. So you can see I have some sample code here showing a simple parser. I'm just gonna run that. And there's actually several arguments that are defined. Both of them, let's just look at a few of them. So the first one is name. And if I put in a name, we can see that unrecognized arguments Alice are because I didn't do dash dash. So we see I put in Alice. It's a default argument that comes out as a string. No big deal, pretty basic. If I wanna say the type is gonna be an integer, then I can add. And now if I see the quantity is not in quotes, it's actually been converted to an int and I can use it as an int. I can also define other custom arguments, argument types, if I write a method that takes a string and will return, will check the content. So here's a case where I wanna have a percent type. So in my case, I wanna do a percent type and it's gonna be, so sometimes we wanna give 110% or managers do sorry, 110 must be in the range from zero to 100. So that's the first test we have. Let's make it 50%. And so now percent has been validated to be zero to 100 and also been converted to a float so that I can now just do direct multiplication with it in my function. But the big interesting one is that we have a lot of enums in our test environment, large, small, medium, brief, and testing for these arguments. We test for the name and then we have to test for the string of the enum and so forth and then I thought that was very clunky. I like testing using is for testing enum values. So I wrote a mix in to go with our enum class that allows me to use it directly or almost directly as a argument type. And in this type, we define a method. It's gonna take our string. It's a class method. It's gonna take a string and it's gonna try to actually use the indexed access on an enum to give me back the enum that matches. If not, I got a key error in which case I'll return not valid. I also have the string because what I want, I think if you notice here that if there's no color provided, we're actually getting the list of the valid colors. So I can say color is some bad color. It's gonna say sorry, that's not a valid color. Say red. Then what I got was actually not the string red. I actually got the enum color dot red. And then when I use that in my code, I can treat it as an enum. So here I've got parsed the arguments and now I'm gonna say if the color is color dot gold, I wanna print pretty. And oh, I'm still doing 110%. That's not so good. Color is gold and we're pretty. That's, and so that little mix in is sufficient to take any enum, add it as a mix in for art typing and then I can treat it as an argument saying type is color dot art type and the choices are color. And that's all I need to do to make that enum work as a valid art type for art parsed. And this is a gist on github, gistgithub.com slash ptmcg so you can pull it down from there. Thank you. 40 minutes. Title's not there so I need to look up over here. I could ask him about, oh okay. So Jay's gonna give us a talk, building and deploying a site for beginners. Let's give him a round of applause. Okay, so my journey with coding has really started in 2012. It was with this, 2014, with this online programming class called Team Treehouse. So who here has been coding with Python for about a year or less? Okay, very few of us. We know someone that they want to tell Python that hey, this is a good programming language you can learn about for a complete newbie. We got some people, right? So how would you introduce that to them? There's some boot camps you can take in different areas, in different cities, but what if you're really remote somewhere? So my journey started with here. It didn't end here, actually. But what I love about this system is it's with Team Treehouse. They have so many different languages. I was actually on a Tech2V program of theirs. This is a subscription-based model with 25 dollars a month. First I was actually trying to be a full stack of JavaScript, but I like how Python is typed and how I was reading it. That actually switched over to there. And I was actually learning how to build my own website. So I'll show that to you right now. And it started with this program, but it turned into a series of YouTube videos, which I'll show in just a moment. But this is what I built. This is just, I built this with Flask. I'm running this on SQLite server. I deployed it on the node. So then I also use Bootstrap to design the interface. It's very simple, but I have an account. I can reset my email if I don't remember it. I can change my code at any time. So for someone who you want to show Python to and say, hey, you can build your own website. So who here has their own website? Who here has designed it and built it on their own? Good. Yeah, so that's the power of Python. And if you know someone who wants to demonstrate their work, this could be the place for it. So what ended up happening was, I didn't need to use Team Treehouse. Actually, there's this guy. I think he's the best, as far as step-by-step tutorials on YouTube. It's free, okay? He does, he starts actually with a lot of basic Python language concepts. And in his videos, it's kind of a rabbit hole. For example, what is a closure before that he talks about what is a first-class function? And before that he talks about what is a decorator? Or something like that in that order. So he has this amazing class tutorial series. There's also a Django tutorial series that it's about maybe five to six hours total, but I'm allowed to dive into things deep when I'm looking at them. So it ended up being maybe 10 hours total. But this will get you from zero to knowing how to access Linux, will SSH encrypt and make your site secure because that's kind of a complicated process. This should not be so, but it was, but that's okay. I also have, so with that, what I learned along the way, just for someone like me who's learning Python, really on my own, I've been using OneNote to build a glossary. I know there's a glossary and there's documentation online already for these different packages. But what I've done is sometimes I just say things in my own words. So for example, you can see here, I was trying to learn about SQLalchemy before that actually was reading just about SQLalchemy itself. So this is what I would use as reference because instead of having to access the website, I can do this offline. And like I said, it's in my own words. Also putting on procedures there. And so that was a lot of help. Next, this is, I don't know if anybody uses this but at least for Windows, this is a great command line interface called Commanderly. You can have multiple tabs open. This is in PowerShell. We can just also add another one. Let's say it's Command, Commander. So that can be there as well. Can all these tabs open and available. And I've been using GitHub for my code. And apart from that, I just have to say, I did a lot of this on my own in my house in coffee shops. So if you know someone who wants to learn this language, they can learn it online and actually do it pretty much for free at the start. But eventually you want to get to know people and that's what I did. So that's why I'm here. I just found out about this convention two days ago. So that is all for me. It's over on the box. Hello again, everybody. This will be a quick talk. I get this question a lot of times being a test guy and I gave the whole talk about EGAT, how do we're a better test? So which one is better? Unit test or Pi test? What should we pick for writing our tests? Before I give my personal opinion of answer, I want to just compare the two and just kind of shake out things. So has everyone seen the Python Developer Survey from 2018? Yes, no, maybe? Yeah, yeah, if you haven't just Google it, it gives a whole bunch of cool statistics on the Python Developer community that was done in collaboration with the Python Software Foundation as well as JetBrains. If you look at that survey, it's interesting, of the people who are using test frameworks in Python, 46% use Pi test, whereas only 32% use Unit test. Unit test is pretty nice. The best thing about Unit test is that it comes with a standard library. You don't need to install anything extra, it's there from the get go. There is nothing wrong or particularly bad about Unit test. However, when you look at Pi test, Pi test is a little bit more powerful and a little bit cleaner. When you write your tests in Pi test, you can write them as functions, whereas in Unit test, it shoe-horns into a class structure. Personally, I prefer the functional style of writing test functions. Some other things with Pi test, you get those fixtures that are more reusable. You also can scope fixtures to that individual test level versus module level, it's really nice. And Pi test also has plugins galore. If there's a plugin for something you want, a Pi test probably has it. If you want parallel execution, Pi test exists. If you want code coverage, Pi test code. If you want integrations with Django or Flask, it's there. And also just want to shout out, in case you missed it, Nose is dead. I strongly recommend not using the Nose framework. So, now to my opinions, overall, I think Python is one of the best languages for test automation, period. It's because it's Pythonic, it's easy to pick up for beginners, it's powerful for power users. I also personally think Pi test is one of the best frameworks in ending language, particularly because it has test functions, because of its plugins, and also because of its fixtures. It's a very, very nifty way of handling things. Personally, I also like Pi test BDD too. BDD behavior development, if you don't know what that is, I recommend you look it up, it's a really cool way to write tests. And so with all that to say, personally I prefer Pi test over unit test. Thank you. All right, let's give Ernest a round of applause. All right, I'm Ernest, I like the bicycle because it makes you feel strong and beautiful. I also work for the Python Software Foundation. If you're not aware of what the Python Software Foundation is, we're gonna do that really quickly. First off, it is a legal entity that takes care of the copyright, trademark, and intellectual property for the Python programming language. We also support the Python community via infrastructure, both technical and fiscal. From a technical perspective, it's things like Python.org and PyPI.org. From a fiscal perspective, we can support any project that aligns with our mission by letting them sort of hang out on the umbrella of our 501c3 status. We also provide grants worldwide, over $300,000 in counting and sort of going up with time, and 75% of those grants are distributed outside of the US. Those grants go to things like the Django Girls, PyLeague's workshops, meetups, and regional Python conferences like, there's one in Texas, what's it called? Yeah, oh, PyTexas, right. Additionally, the PSF puts on PyCon every year. If you're not aware of what PyCon is, PyCon is a conference that happens in, I think it's Cleveland, Texas. So it's only three hours from here. Oh, I'm sorry, it's actually in Cleveland, Arkansas. So it's nine hours from here. Oh, Tennessee, Cleveland, Tennessee, which is 14 hours from here, 16. Oh, here we go, okay, so Cleveland, Ohio. So it's a 20-hour drive, and it's not too late to come. And as a matter of fact, if you want, you could just like caravan with me. I'm heading back that way in my car after PyTexas, so you could just get in your car and come along with me. But sincerely, there are some tickets left for PyCon if you haven't made arrangements yet, and in preparation for this lightning talk, I realized that next time I do a road trip, there are a lot of Clevelands I could go see. So this is Micah. Micah put his talk title as Senior Network Security Infrastructure Engineer. I think that's your title. I thought I was asking my title, not my talk's title. I was confused why there wasn't another field. I thought you'd want to know what the talk was about, too. So I went back to edit it, and there was no other field, so anyway, that's who I am. All right, so the talk is actually, it's not how good this happened to me either. No, it isn't. It's Python Unicode Adventures. Let's give them a round of applause. So spoiler alert, this talk is recycled, and also you're getting the five minute version of a 30 minute talk. But anyway, this is about Unicode and the problems that I've had with it, and just the simple fact, first of all, not doing live coding demo here. These are the kinds of problems that you run into trying to deal with Unicode versus ASCII in Python. The long and short of it is that back in the day, we all used ASCII, and Python was built back in the day, and it still wants to use ASCII most of the time. The hilarious thing about this particular error is that the program crashes while trying to print a Unicode character and then successfully prints the Unicode character in the stack trace. Now you may have noticed, you may have noticed that the problem here is that I'm using Python 2 now if you're like me and you have to maintain some legacy code, it's a fact of life, you have to live with it and at least not break things that were already working. But assuming that you switch over to Python 3, that should fix all of your problems, right? Because Python 3 uses Unicode by default instead of ASCII. So it's a lot simpler, we just print, and we get the same crash, and now in Python 3, it fails to print the stack trace correctly. So I'm not sure that I have time to get through all of the reasons why this is a problem and continues to be a problem in 2019, so let me see if I can give you the short version. ASCII was nice because it skipped a lot of steps. We had a direct mapping of characters to numbers, and those numbers were all one byte. With Unicode though, things get a little more complicated. We have direct mappings of characters to numbers, but those numbers are not mapped directly to bytes. There are actually a lot of different types of encoding that you can get for Unicode. Some of them represent all characters, well, not all characters, some of them represent more characters than others, and the one that you're gonna be using most of the time is gonna be UTF-8, which will, I don't know what's going on here, there's some problem with the k-guts of Unicode in here. You know what, I would explain it. So anyway, when you're working in Python specifically, Unicode is a type, it's a type of variable, although if you're on Python 3, skipping over a bunch of stuff here, this is the nice little disambiguation table that you should use. Basically in Python 3, strings by default are representations of Unicode code points, so they don't map directly to bytes until they have to. In other words, until you're outputting them to something outside of the Python language, like a file or your terminal or the network, and at the point where you have to convert a Python Unicode object into some bytes, you have to go through your encoding and you have to basically settle on what, how that character should be represented in bytes. According to the official Python how-to on how to use Unicode in your code, basically don't care about encodings as much as possible, just use the built-in Unicode objects that the language gives you internally and let the interpreter handle the encoding when it needs to talk to something else. But as we saw earlier, that actually doesn't work a lot of times. You can handle the encoding yourself manually by using dot encode or dot decode on your string objects to make a long story short, Python does its best to detect the preferred encoding of the file it's writing to. So when you're running a script in a terminal, it's going to actually ask the terminal, hey, terminal, what kind of encoding do you want? I don't know why it's doing that. And so the reason that, the reason that we can still get this crash, even on Python 3, is that it's possible to misconfigure your terminal. If any of you have worked inside of like Docker containers, for example, if you just build the default Debian Docker container and you go in there and you try to use Unicode, you may get a crash because out of the box, it doesn't have a lot of environment variables set and there's one in particular, here we go, LCC type is an environment variable that is going to signal to not only Python but to a lot of programs what type of encoding they should use when they're talking to the system. And so if you explicitly tell it that it should use ASCII, then it's going to try to use ASCII and it's going to fail to print this multi byte number in one byte. So yeah, that's kind of a long and short of my talk or I guess the short of my talk, five minute version anyway. And there are further problems if you try to do this in SSH. All right, round of applause. And on that note. Okay, so Jeremy's going to give us a talk. Maybe PyTex is happening. Yeah, legally. All right, cool. So some of you may have been coming to PyTex for a while. We might be the oldest regional Python conference in the US at least. Apparently the question is whether PyOhio happened earlier or later in the year in 2007. That's like the question about who is actually the first regional. Anyway, so we started out as PyCamp for Texas and then two years later adopted the name PyTex. And then for a few years we carried along and then until 2012 the important thing to note is there was one person running this group, running the whole thing, okay. Which is okay because it was actually only a couple dozen people that would come to each one. I think I started coming in 2010 and there were like 30 or 40 of us in Waco. And then as we grew it became more and more difficult for people to, for this one person to do it. It was Sheila Allen if you know her. So in 2013 Sheila kind of backed away and we had a group organize it for the first time ever. And that group also decided to start charging because we would have people say, yeah sure I'm coming and then they wouldn't come. And that by the way is the primary reason why people pay to go to the conference. So that led to a problem, right? If we're gonna take money, including sponsor dollars, how do we do that? Well, as Ernest just mentioned, the PSF jumped in and helped us out with funding. We could send our funds to the PSF and then they would reimburse us for charges and that worked out really well, except it took a while and everybody had to put dollars, like we would get reimbursed and all that. So, and also the logistics have improved greatly in the last five years, in the last two years, but it just took, it was kind of a problematic process for us. So we thought it would be easy and we decided to just do it ourselves. So in 2014 we founded the Pi Texas Foundation which is a registered nonprofit corporation here in Texas. And the next year we got the Department of the Treasury to agree that we're a 501C3 because if we ever go under any profits that we make we'll actually go to another nonprofit. Guess which one it would go to. And then we even got, come on. This actually, I don't know why that would be challenging. Cool. Well, you can see it here. I don't know why you can't see it up there. But we got a logo, it's blue and it's yellow and it's in the shape of Texas. And we actually talked to the Python, the PSF logo committee because they have for very good reasons, have protected their trademarks. They actually said they liked this one. So that's nice. So anyway, here's the world since then. We were in College Station again in 2014. We get our 501C3 and boom, we're in 2019 now. So what's the governance of the Pi Texas Foundation? There's a board of directors, currently there are three of us. There are four officerships that are sort of mandated by our bylaws. Interestingly, if you think that, if you note that there are three boards of, three directors and four officers, that means that one person is doing two people's jobs. And the good news is we can grow our board. So we have some committees, for example, for the conference, semi-annual meetings, that's all. So we're interested in building support for the foundation. It is not that much work. It's mostly coming to meetings and making sure that you sign things. So if you're at all interested in the foundation and I'm talking to some of you who've been around in the community for a while and also some of you who are brand new, who could bring new ideas to it, we're really interested in hearing from you. Can't promise a board seat, but I can promise that we will find a way to let you contribute to the community. So let us know, show up at meetings, they're on Google Hangouts, it's not hard, and really that's it. And then one last thing that I think is important, but Google doesn't, is, man, it really doesn't like, so the foundation is not the conference. Every year kind of a new group of people could work on the conference. There's a standing committee that has worked on it, but they're not at all the same. So I think Dustin tomorrow is going to be talking about how to contribute to the conference, which is a much more immediate need every year. But that, the foundation and the conference are not the same. I'm really glad you took the picture of the broken slide. Okay, all right, and that's it, that's it for me, thanks. All right, we're going to get this done. This is going to be really awkward, but it's going to work. Other screen. No, it'll be on this one. It'll be on this screen right when we start on this one. To be fair, the screencast did work when I, the moment I sat down. Yeah, it all means. All right, this is going to be hard. I love it, I love it. You're going to see something. Everyone turn your heads. I love you. This is as good as it's going to get, all right? Okay, so when I showed up today, I wasn't exactly planning on getting a lightning talk, but over lunch I was talking to Aloy and I was showing this really cool terminal on your winner program. And he was like, oh, you should present on this. There are a lot of guys that like hacking with Python. And I go, oh, that's fair. And I know when you're not surrounded by other people who are enthusiastic about Python or actually developing on your own computers, that you might kind of get the itch to develop in Python. Well, this can kind of scratch that. Here we have our handy-dandy REPL. Boom, there we are. We are at home on your Android device using Turmux on our phone. I mean, we can do simple things. You want to do some minor subtraction. There it is. You're like, oh, that's pretty cool, Sorenson. But what if I want to develop on my phone? Like, I really want to develop. I said, oh, I hear you. OK, so here we are. We're running a Teamux session. So I can just simply transfer over to another window. And I go, OK, I want to write something. So I'm going to pull up my faithful Emacs client. And I'm going to open my little Python development project. And this, I cobbled together over lunch. It's a small script that takes in a user input. Oh, is this mirrored? Oh, god. OK. So it takes in a user input and translates it to Morse code and then vibrates the phone. It does a little system OS call in Morse code just because. And so I'm not going to do any of this live. So we'll switch over to another Teamux window and go and call our little Morse generator through Python. Well, that's pretty cool. There we go. Now it's running and it's asking for our input. Let's see what I can spell sideways. Let's see if there's a pi, Texas, and pi works, whatever. And then we run it. And you can't feel it, but I can. My phone's vibrating and it's punching out the Morse code there. So if you're ever just needing development public, there you go. That's it. I'm going to raffle off, not raffle, to the speakers. I'm going to give to one of the speakers. To one of the speakers, I'm going to give this lovely water bottle that is our speaker's gift, by the way. So if next year you become a speaker, get a talk accepted at the conference, submit a CFP. You might win maybe not this exact water bottle, but something quite nice like it. As our appreciation for all the speakers, I've done a really excellent job giving a talk today. We don't have enough for all the lightning talk speakers. We have one for one of them. So we're just going to, I don't know why it's showing it twice. So we're just going to random that choice this right now and see who it is. That's Andy. Andy, congratulations. OK, so thank you to all the lightning talk speakers. Thanks for all the talks today. We have a whole lot of.