Secret Santa – Python Flask Webapp

Hey all, sorry for the past quiet months. It has been quite hectic with my company moving downtown, changing positions, and ultimately trying to crank out and learn so really cool and exciting technology. As every with every winter, I expect to have a bit more downtime and hopefully I can share some cool things I have been working on in my spare time!

Today, I am excited to share with all of you a fun, but very basic (and I mean verrry basic) web app I wrote while trying to digest an exorbitant amount of Thanksgiving dinner. I was tired after Thanksgiving dinner and want to learn something new as well! Some backstory; every year, my family and I get together for Thanksgiving dinner and we do a yearly “Secret Santa” pool. With this being said, this is usually quite problematic as:

  1. Sometimes people draw their own name, thus making it public who is left in the pool
  2. Someone isn’t able to make it to dinner due to other arrangements so we need to draw the name and just tell them (but that is no fun…)
  3. Someone spills the beans on who they got thus potentially breaking the secret chain of who got who

In comes my idea; how about we do secret santa online this year? It sounded like a great idea, I would whip up a simple app that collect names and email addresses and shoots random emails out using Amazon SES. This would have worked if it wasn’t the fact that not everyone at dinner had an email address (primarily my grandparents). So I had to come up with a solution that solves all the three above existing problems, but also allowed folks without email to sign up as well.

With the goal set, I created a simple flask app that allows people to register their name and a unique passphrase. Once registered, users can check their status to see who they have been matched with. When it has been determined that all people have registered, the admin (me in this case) would go to a randomizer url and scramble all the people’s matches. Until the randomizer piece happens, users are told to check back later or poke the admin with a stick to kick off the match pairing. In my situation, I told everyone to register by noon Friday, I would do a shuffle at that time. Once the randomizer was complete, people can then check their pairing.

So after about 2 hours, I came up with the solution, implemented it, and had people up and running on AWS. It worked surprisingly well and even got a chance to show my younger cousin how it works! Best of of all, I have made the code open for you all to use and implement. I added a lot of “bootstrapping” files such as apache configs, sqlite3 setups, and even a sample WSGI file. Below you will find a list of technologies I used, as well as a number of improvements that could be done.

Hope this helps someone else out there as well! Happy Holidays all!

Technologies Used:

  • Python
  • Flask
  • Sqlite3
  • AWS (for EC2 primarily)

Potential Improvements:

  • Admin Interface
  • Secure Passwords
  • Allow for multiple pools
  • SQLAlchemy
  • Various Flask and Pythonic improvements


March Madness Payout Calculator

So it’s that time of year again, March Madness has come around! This means people spending countless hours researching teams, creating brackets, joining pools, etc. At work every year we start a pool for the scores of each round. Basically, you get assigned a random winning number and losing number. You look at the final box score of a given game, and if they match your assignment you win X amount of dollars based on the round! Simple right?

This year, I found myself busier than normal (basically I have other things to do than watch College Basketball all day) so I decided to write a quick app to determine how much I will win. I am leveraging a unOfficial NCAA API so the data might not be 100% accurate, but it will be good enough for my purposes! 🙂

Feel free to check out the source code below so you can use it too. Note: you might need to tweak payouts, and your magic numbers to your specs!


No wget, No Problem!

I don’t post enough, so I am going to try to make some day to day blog posts here and there.

So today, I had an interesting experience with some hardware at work running a custom Linux OS. It was pretty locked down, and there is no simple “yum/apt-get install.” To make matters worse, most “core” packages were custom and didn’t exist. Some of these missing packages were wget, rsync, or curl.

I was tasked with putting a rather large file on this system, and was told the best way was to take a USB stick and plug it in. See…I am lazy (it was also -25 degrees outside to get to Building B). This means I needed to waste my time walking in the tundra I call Chiberia, when I could have been hammering away at something else.

First thing I do, login the box. Alright…so I have remote access. Let’s see, I can resolve internal addresses. Typical. Hmm…what about other addresses? Hmm interesting, I can reach them as well. Telnet to 80? Cool, that works too! wget failed…as expected…meh, worth a shot. Hmm, this is custom Linux, I mean…they really shouldn’t touch python. I wonder…BINGO! I got a python shell! In the shell, I ran the below script to essentially “wget” a file onto the box. Took a while, but it worked.

import urllib
urllib.urlretrieve("", "bigoldfile.tgz")

Sure this works, but again…i’m lazy; this is a bit of typing anyways. I want something scriptable that I can just call with a url. Behold, my I know, nothing fancy, but it works. Just call, python <some_url>. Enjoy it for what it’s worth.

import urllib
import sys

url = str(sys.argv[1])
file_name = url.split("/")[-1]
urllib.urlretrieve (url, file_name)

PyCon Day 4/5: The Synopsis

So…about those daily posts. 🙂 As you know, the blog life can be sometimes hard. I have been too busy learning and meeting some awesome people.

Day 2 (Saturday of Testing and Best Practices)


Great talk about getting Python into schools. Its just there for the taking! Very nice Keynote for the day. It was given by Jessica McKellar, and I even got to meet her! Very nice person, and I got a signed Twisted O’Reilly book! 🙂

Introduction to Docker

I think I am officially in love with Docker. Create images to make containers. These containers are not VMs but essentially spin up and just run. Much faster to run and very compressed. Also you can make containers as images and even use them as deployment mechanisms! Definately something I am going to look into!

So you want to build an API?

It was very flask heavy, was hoping for more generic based talk. It was pretty good none the less.

Getting Started Testing

Yes. Yes. Yes. Test. Test. Test. One of the best talks of the afternoon. Can’t wait to add some test cases for my code. Even covered some mocks testing too!

REST is not enough: Push notifications for Android and iOS

Gave a good overview of what one might do to get started with Android and iOS. Good news. Tons of support in Python! 😀

In Depth PDB

Very solid talk and highly recommended. Stop using the darn print statement already! 🙂

Python Packaging simplified

Good talk about packaging your app for the world.

Its Dangerous to Go Alone: Battling Imposter Syndrome

I will admit. For a while I hit a wall. I burned out. I was experiencing imposter syndrome. There I said it. This was an excellent talk for anyone out there trying to get better and feel good about coding. Don’t listen to anyone else, go and be the best you can be. Stop telling yourself you aren’t good enough. You may not understand something…yet. 😀 Great talk and 100% recommend.


Day 3 (final day):


Guido essentially had a txt file with a list of titles. He basically live coded a simple little script and had his talk on random topics. Quite fun, and kind of laid back….the most important thing:



Time to move to Python 3! Its official! Go out and help y’all! Also become a member of the PSF and join our awesome community!

Deliver your Software in An Envelope

Hitchhikers Guide to Open Source

Very fast paced talk but a feel good talk about committing to open source.

Set your code free: releasing open source code

Very nice presentation that really helped me structure my project. Ran through everything step by step, from License to Testing! 🙂

And that concluded the regular event! Wow that was a quick 7 days! I officially leave later today but just an amazing experience once again. Met a lot of smart and super talented individuals, and got to hang out and have fun with some great people too. I can’t wait til 2015! 🙂

PyCon 2014 Day 3: The big day is here!

So I apologize right now, if you consider these blog posts too much! I don’t usually get much time to write some blog posts but I thought I would share some great talks and my notes on a few of them.

Today, was the “official” first day of PyCon with some awesome Keynote speakers and also big talks. Again, this is my first PyCon so I was a bit new to talk tracks. However, I think I found all of the talks interesting that I attended 🙂


The main keynote was given by John Perry Barlow and it was a fun and pleasurable talk about privacy and policy. Had me chuckling, and at times made some very good points. Talked about how we should have a lack of secrecy, and how we should not be afraid about large controlled corporations. Nice talk to listen too.

Computer Science Fundamentals for Self-Taught Programmers

Took this talk to get a grip of the big O notation as that has been one of my bigger weaknesses when it comes to programming. Big O notation (O(n)) is a way developers talk about the theoretical measure of the execution of an algorithm. At the end of a day, algorithm is just a fancy way of saying a recipe (a step by step guide on how to do something). While big O notation is very important, for really small sample sizes, it can not just matter. Always remember that theoretical speed is different than practical speed. In short, unless you are coding for large datasets this is probably not going to make your app faster. With all this being said it is still something you should be familiar with because it allows you to discuss your code in an organized format with other developers. I still need some work in this domain regardless but I honestly just need to refocus because I was able to do this roughly a year ago. That’s what happens when you don’t hone your craft! 🙂

So you want to be a full stack developer?

This talk briefly touched a ton of tools available for a full stack setup. I consider myself a full stack developer in that all (almost all) of my code is essentially written and maintained by me from beginning to end. This talk was useful not in the sense of planning, but finding out what is out there in the world! I got a list, and I am not going to bore you with a long winded list, but if you wish. Please reach out and I can share!

Python Web Scraping Showdown

In a short demo, @kjam, talked about different web scraping utilities in Python and how they differ in speed. In short, lxml with xpath was the fastest, lxml with css was a close second, and finally BeautifulSoup came in last. With that being said, at the end of the day, the results weren’t that much different. I would say, use what is easiest to read and understand.


Ansible – Python Powered Automation  #3

Things I like about Ansible:

  • Agentless (no remote resources used)
  • Keeps things simple
  • Auditable
  • Batteries are included (Close to 250 plugins in core)

I think the only issue I see is that we have committed to puppet and salt, but I definitely don’t disregard Ansible as a powerful tool. In fact, it may become a leader in this domain. It has BLOWN up on Github in the past year.

Puppet Modules: Apps for Ops  #2

I attended this talk to see if there were any gotchas in our setup. I use puppet at the moment, but I think I was recently won over by Salt. 🙂


Getting Started with SaltStack  #1

I recently fell in love with salt after the heartbleed mess in the past week. I was tasked with finding out all our server config to see what needed to be patched. In a short salt command on our master, I ran the following command and did a complete inventory of our openssl versions:

sudo salt * “openssl version” >> out.txt

Aside from this, I like the whole Jinja2 (coming from a django background) and yaml based config files. I also like the level of granularity (haha a pun…go figure :p). I am also interested in their Salt Reactor. Basically you can listen in to events that occur, and “react” to them in a proper fashion. It uses Zeromq implementation which in itself if kind of interesting. I have not read much about it but looks like a cool setup. 😀



Application Deployment State of the Onion

Watch this video….Fast…and less than 30 minutes. Probably the greatest talk of the day in my book. No nonsense and straight to the point.

Writing Idiomatic Python

I got around to meeting up with Jeff Knupp, author of the book Writing Idiomatic Python, and we had a little meetup in one of the huddle rooms. Discussed a bit about writing a book and some of the challenges, and we got to discuss what it means to be idiomatic. There were a few people who had some comments on some of the idioms of Python, but as Jeff pointed out. The book is not based on his opinion and he might share the same views as someone, but he is simply writing a book about the idioms that are accepted by Python as a whole. Very interesting talk and also got a signed book out of it.

All the PyCon videos and talks can be found at:

Day 4 recap coming tomorrow night!

PyCon Day 2

Come one, come all to day 2 of my PyCon experience!

Today was a lot more social, got to finally meet-up with @jeffknupp, writer of Writing Idiomatic Python, and a few other individuals including smortaz from reddit (who is from the Microsoft team and wrote the open source Python Tools for Visual Studio!)

In terms of tutorials and talks, I am going to follow the same format as last night. Today on the agenda? Flask and Intermediate Python!


Topic: Flask by Example

Speaker: Miguel Grinberg

General Overview:

In short, the speaker went over how to create a sample website like his using only flask and its various add-ons. Coming from a django perspective, this is exactly what I needed. I needed a quick browse over how to create forms, db models, routes, etc. The slides take you step by step from hello world to something pretty solid. Talked a lot of best practices and overall was a great talk! Very fast paced with TONS of information!


I want to take this flask knowledge and see if I can improve upon my automation portals that I have created for work. By doing this, I can make faster and more lightweight pages than my existing django setup. I love my django, but I think that at times it can be a tad “overkill.” There are tons of one off scripts I would love to just run from a GUI for end users, and this might help. An avenue for investigation is whether or not I can maintain user session persistence across both implementations (flask and django). I have been tinkering the idea of using redis to maintain a user session that can be referenced in both. Interesting stuff.



Topic: Hands On Intermediate Python

Speaker: Matt Harrison

General Overview:

In a very long, and full of content tutorial, Matt covered tons of material ranging from list comprehension, decorators, generators, you name it! Working through examples, talking about real world scenarios, this talk really clicked for me! Nothing really to share other than finally going to start using generators and decorators a lot more now that I understand them. The generator piece is huge as there are tons of code that I could actually improve on.


Get better at Python! This talk was awesome and broke a few misconceptions and barriers I had. Sometimes I would look at Python repo’s and be lost in the code. After today, I got some great take aways that I am going to look to take advantage. Time to get those generators and yields going! 😀



Talk Schedule for Tomorrow:

  • Breakfast!
  • Opening Keynote
  • Break!
  • Computer Science for self taught programmers
  • So You want to be a full stack dev?
  • Import-ant decisions -or- Python Scraping Showdown
  • Lunch!
  • Ansible -or- Twisted
  • Puppet Modules
  • Getting Started with SaltStack
  • Break!
  • Distributed Computing -or- App Deployment
  • External Talk: Writing Idiomatic Python
  • Lightning Talks!

Hello Montreal! PyCon 2014 underway!

So as many of you know I went to Montreal to attend PyCon 2014! As a up and coming “Pythonista,” this is very exciting. This is the first time I have travelled internationally, and also this is my first “major” conference! Looking to take in as much information as possible in these seven short days. Overall, Montreal is a great city. Everyone thus far is very nice, helpful, and understanding; despite my ability to speak the native tongue French. The weather is similar to that of Chicago, so not much to complain there 🙂

In terms of tutorials, I have attended the following thus far. I will give a title, a general overview, how I might apply it, and general reference links. I believe all the talks are recorded, I will share this as soon as I find out more information.


Topic: mrjob: Snakes on a Hadoop

Speaker: Jim Blomo

General Overview:

Essentially we walked through various examples, talking about MapReduce functions. We talked about how to orchestrate our logs in a manner that provides as much information in a single line vs multiple lines; Makes writing your jobs SO much easier. Essentially, Map and Reduce should be stateless; we are looking at an individual log line at a time, and the framework will merge values back together.


  • map(key1,value) -> list[key2,value2]
  • reduce(key2, list[value2]) -> list[value3]

We didn’t work with a direct Hadoop instance, but rather we worked in a simulated mode, where we had all the data locally. This was smart due to the possible instability of the wifi. (which if I might add has been kick ass! Great job PyCon team!) We worked through simple page visit MapReduce, to more complex multi step MapReduce jobs (get a list of users and their businesses reviewed, and convert it back to a match users together based on Jaccard Similarity). At the end, Jim talked about how to hook it up to a AWS instance of Hadoop and how to properly schedule your jobs. The nice advantage to AWS is that its easily scalable and takes a lot of the heavy lifting of getting Hadoop setup off your plate. Also if you need to spin up extra nodes, its just a nominal fee instead of having to possibly re architecture your own. Probably the biggest talk of the day for me because I am in a position to get more comfortable with Hadoop now. Before it just looked like a big scary elephant 🙂


Now while I don’t have TB of data on my personal machine….there are tons of big data possibilities at work! Looking to see if I can take some of this back to the office, and write some MapReduce jobs on a lot of our data logs. With all this being said, the more efficient your logs are the better results you can get (or at least the easier it is to interpret). So I think this is going to become a bigger project soon. Glad I took this course. Very informative and broke the initial “scary” barrier of big data. BRING IT ON!



Topic: Build your own PiDoorbell!


General Overview:

In short, we took a Raspberry Pi (a small microcomputer) and wired it to a breadboard using the GPIO pins on the board. By doing this, we can have all sorts of fun with the circuits and program some cool things. We setup some sample led’s, but I finally got the Pi to snap this picture! 🙂



So I plan on installing my PiDoorbell on my home’s door whenever someone gets closer than 24 inches away. This will allow me to snap and view a video stream of who is at the door before I get my lazy butt off my third floor apartment. (Remember, developers are supposed to be lazy ;)) The implementation in class only took a phone, and uploaded to Dropbox and set a SMS via Twilio. My plan is to tweak it to use the Google Drive API, and continue to get SMS or at least email alerts to my phone. This way, I can see when packages are delivered, or stolen O_O, even when I am not home. Long term, I want to add some way to interface with the person at the door; LED bar saying “I am on my way.” or “GO AWAY!” 🙂



Anyways that’s all I got for now! Looking forward to tomorrow’s tutorials on Flask and Intermediate Python! As always, learning all the time 🙂