For the second year in a row, DjangoCon US took place in sunny San Diego and it was great to be back. San Diego is a thriving port city with palm trees, picturesque beaches, and perfect weather year-round. It's hard to imagine anyone not loving this fun location. The conference returned to the gorgeous Mission Valley Marriot, where attendees have a view of a sparkling blue pool in the courtyard surrounded by palm trees.
The format for this year was similar to past years, with one day of tutorials, three days of talks, and two days of sprints, but with one notable difference. One two-track talk day was replaced with a one-track deep-dive day.
The conference was a huge success. Tickets sold out for the second year in a row and the talk lineup was impressive. The deep-dive day in particular was a big hit. Attendees I spoke to enjoyed hearing from experts in the field. The sprint days were also well attended, including a "How to Contribute to Django" workshop that resulted in quite a few people contributing to Django core.
Also, like DjangoCon US 2018, DjangoCon US 2019 was visibly diverse, I believe the most diverse conference I have ever been to. There were many faces from underrepresented groups in the crowd and I was thrilled to find a line at the women's bathroom throughout the week. It's amazing to see the progress the PyCon US and DjangoCon US communities have made in drastically increasing diversity in just a few years.
Monday kicked off with an Orientation and Welcome led by DEFNA North American Ambassador and DjangoCon Organizer Kojo Idrissa. Notably, Kojo asked, what if the audience were primarily black women in their 40s to 60s? White men might start to wonder if they fit there. That is what underrepresented people are dealing with. All are welcome at DjangoCon US.
Matt Mitchell, a security expert who specializes in working with marginalized groups around the world, gave the opening keynote, "Building Community and Supporting Others." Matt compared community to the Model/Template/View paradigm (MTV), gave some examples of people and groups who dig deep to find inner strength, including Sheroes, Knowledge House, Torchbox, and Laura Tich of SheHacks, and challenged the audience to see the beauty in the community and be kind to each other.
A few other talks that resonated with me:
In "The Unspeakable Horror of Discovering You Didn't Write Tests," Melanie Crutchfield explained how she went from not even having one little digusting kale testing leaf in her app Five Up, to wanting to eat that disgusting testing vegetable for real. Yay!
Peter Baumgartner gave a detailed overview of hosting, configuration, web server, and asset options and tradeoffs in "Prepping Your Project for Production," using special slides by Joni Trythall, our DjangoCon US Website Designer!
Casey Faist, Heroku's Python Platform Maintainer, gave a great talk, "Everything you need to know but were afraid to ask about Data Classes" about the ins and outs of Python Data Classes. Heroku is special to me, as the first platform I ever deployed a Django app to. I'm thrilled that I had the chance to meet Casey at PyCon US and further chat at DjangoCon US!
After a very popular DjangoCon US 2018 talk about uncovering gender bias in Harry Potter, Eleanor Stribling followed up in 2019 with "Think Like a Product Manager: Straightforward frameworks for building great products," which provided a product management black box for non-product managers.
Monday ended with an Opening Reception that evening on the Marriott Lawn. Guests enjoyed drinks and food from buffet-style food stations... the mac and cheese bar was a huge hit!
Your Web Framework Needs You
At DjangoCon US 2018, Carlton Gibson, Django Fellow, gave a talk "Your Web Framework Needs You." Carlton acknowleged that the community is more diverse than ever, but the core contributors have continued to be white guys, many of whom have been associated with Django for a very long time and are no longer even contributing. The talk was a call to action to community members to contribute to the Django core code. In short, there is not a quick fix, but change is a priority.
As a side note, after DjangoCon US 2018, a draft DEP dissolving Django Core and creating a new model of governance was merged into the Django organization. This DEP is in part intended to fix some of the problems discussed by Carlton in his talk. James Bennett, the author of the DEP, explained the changes in his blog post "Core no more."
This year, Carlton gave a "Framework Update." Progress is happening in Django core: the 1328 accepted tickets that existed last year were reduced to 1262 this year, with over 1000 new tickets opened; more than 1200 commits to master branch were made from 290 separate contributors, including new contributors and more contributors overall. Carlton gave examples of areas where individuals or self-organized groups could make improvements to Django core and its docs that could have a massive positive impact. Carlton again extended the invitation, "You're web framework still needs you! Come and join us."
Jessica Rose kicked off Tuesday with a keynote about a very important topic: "Burnout and Balance." Using cognitive psychology and humor, she explained what occupational burnout is, the warning signs (based on the Mayo Clinic diagnostic survey for burnout), and strategies for preventing it or reducing the negative impact of it. I found these strategies very practical and plan to apply them in life. A few strategies in particular: take care of yourself first ("put on your own airmask before helping other people"), invest your energy selectively, and learn to say no.
A few other talks that resonated with me:
In his talk "Prefetching for Fun and Profit," Mike Hansen walked us through what pre-fetching is, the problem it's trying to solve, and how it is implemented. In the process, Mike took a deep dive into the Django code. He suggested that people should dig into the Django internals more often and use their knowledge of it to improve their own code, instead of going directly to Stack Overflow. I like that.
As a maintainer of Pinax, I'm always on the lookout for new ways to improve our process. Luca Bezerra's talk "Pull Requests: Merging good practices into your project" provided some good food for thought. Plus, the talk ended with one of Vinta's trademark checklists. I love a good checklist!
Thank You Dinner
As a DEFNA Board Member and DjangoCon US Website Chair, I was treated to dinner on Tuesday evening at the nearby Yard House restaurant, along with speakers, emcees, patrons, and other organizers. It was a pleasure to attend. The atmosphere was warm and relaxed, filled with good conversation and laughs. I got to know my fellow-attendees better.
Plates of appetizers were passed around the tables to share, filled with Wisconsin fried cheese curds, fried mac and cheese, jumbo Bavarian pretezel, fried calimari and poke nachos. I tried calimari, poke, and ahi for the first time. The mini chocolate soufflé cake topped with vanilla ice cream that I had for dessert was divine.
After dinner, a cake was brought out for a special recognition of the longtime service of DjangoCon US volunteer Ken Whitesell. Thank you, Ken!
Wednesday was the first ever DjangoCon US deep-dive day!
The future of Python and Django has been on the minds of many lately. Community members have been asking how Python can remain relevant and vibrant, instead of becoming a legacy language.
With the async and await keywords having been introduced in Python 3.5, Python is at a crossroads. The new async model is much more efficient than the traditional sync threading model, and can provide functionality that makes Python and Django hugely scalable and more competitive with major players such as Node and Go.
Unfortunately the sync and async models are largely incompatible.
On the other hand, while sync is operating system managed and async is runtime managed, increasingly more code is being run in the browser. Could Python be run natively in the browser?
What could be more timely than several deep-dive day talks grappling with these subjects?
The Natural State of Computers
I was thrilled that morning when I met Amber at breakfast.
In her keynote, Amber gave a review of the computer architecture and performance landscape. Amber argued that computers are not getting faster and won't. All of the easy options have already been used to improve computer hardware performance. The alternative is to become more efficient, and async IO is far more efficient than traditional techniques that require blocking.
Amber believes that computer performance is driving the async story. She said programming languages need a good async story, or they will lose users. async is nearly universally supported among operating systems and has been around for a long time. In the not so distant past, Node was similar to traditional Python, bound by single thread limits, until async support was added. Python then lost users to Node.
The tide started turning when async was added to Node. Languages can no longer opt out of async support. While the Python GIL prevents the problems created by multi-threading, it also makes it difficult to use multi-threading in Python. Async is an alternative and can improve the Python async story.
Amber gave a hat-tip to Andrew Godwin and other contributors who are bringing native async to Django. Amber said adding async to Django will bring async into the Python mainstream. The sky will be the limit.
The Django community is embarking on one of the largest changes in Django's history: adding async support to Django core, led by Andrew Godwin.
Andrew's deep-dive day talk "Just Add Await: Retrofitting Async Into Django" was definitely a highlight of the week for me.
Andrew has done extensive research about how to add async support into Django in a safe, backwards compatible way that maintains the familiarity of the Django API. His approach is detailed in DEP 0009 (Async in Django), which he authored.
Andrew explained the challenges and opportunities of adding async to Django and gave an update on the work that has been done and is planned for the future:
- Phase One is complete. ASGI support was merged into Django 3.0 (PR), but can't do much yet other than speak to ASGI servers such as Daphne and Uvicorn
- Phase Two is in process. Andrew has async def views working in a branch right now (branch), but performance is a struggle at the moment. Once async views are working, a lot of parallel work can begin in bringing async to other parts of Django.
- Phase Three, redefining the ORM for async, involves a lot of research, vision, and implementation work.
Code development and maintenance are not cheap and an initiative of this scale needs to be properly organized and funded. If you are interesting in helping, Andrew has outlined some ways to help on the Async Project Page
Andrew had a "Thanks" slide at the end of his talk, but the community should be thanking Andrew for his hard work in bringing async to Django!
In addition to Andrew's talk, I highly recommend watching Tom Christie's DjangoCon Europe 2019 talk, "Sketching Out a Django Redesign." Tom contrasted sync and async, explained the benefits of async and why it matters to the longterm success of Django, gave an overview of the ASGI landscape, and praised Andrew's plan of progressively adding async into the Django stack as very achieveable. He believes that while nothing beats Python for productivity, by adding the performance provided by async, Python will hit its sweet spot.
Python and WebAssembly
Russell explained what WASM is and how it works. WASM can take code such as Python, that would normally be compiled and run in a virtual machine via a computer operating system, and instead compile it into a ready-to-use binary format that can be run in the browser. Russell gave a review of the landscape, starting with emscripten, a tool for compiling code Clang can compile (such as C) into asm.js and WASM binary instead.
Russell gave a few promising ways of using Python and WASM together
- The Pyodide project uses enscripten to compile the CPython source code to WASM. The result can be used to deploy a Python shell in the browser completely clientside, similarly to a Jupyter notebook session. Because it's big, the smaller implementation Micro Python could be used alternatively.
Russell ended by mentioning the great organization BeeWare.
For a view of the larger picture of the "Black Swan" challenges facing the Python ecosystem as a whole, I also highly recommend watching Russell's excellent keynote from PyCon US 2019.
Django Framework Deep-Dives
In addition, several stellar talks further explained important aspects of the Django framework itself:
- Using Django as a Micro-Framework: Hacking on the HTTP handlers and middleware (for fun and profit) by Carlton Gibson
- The Ins and Outs of Model Inheritance by Blythe J Dunham
- Generic View? What is that and why would I use it? by Felipe Lee
- Understanding Django authentication by Renato Oliveira
Deep-Dive Day Wrap Up
Sprints took place on Thursday and Friday
On the first day of sprints, Carlton Gibson led a workshop "How to Contribute to Django." More people than expected showed up and we had to move to a larger area.
While we were installing Django, it was pointed out that a bug commonly occurs while installing Django on Mac OS. This bug can be circumvented by using the django-docker-box tool. I went ahead and used django-docker-box, which probably sped up my installation process and saved me some frustration. It was great to see so many people sharing knowledge and trouble shooting together.
Later in the day, I made my first PR to Django core. Yay!
In the PR, I added django-docker-box to the Django docs as an installation option. Hopefully, drawing attention to this option will have a big impact in making the local setup process easier for others.
Due to a sick computer and conference travel, Django Fellow Mariusz Felisiak assisted me in updating and merging this important PR. I'm proud to have left the campground better than I found it, as my friend Jeff would say.
The workshop notes are open source for anyone who would like to use them to contribute!
A special shoutout to Django Core Dev Chris Beaven of Lincoln Loop who personally assisted people at my table with troubleshooting.
If the conference wasn't amazing enough, I had time to do some spectacular sightseeing in San Diego.
Here are some highlights:
The night of my arrival, I enjoyed a simple, but magical evening in downtown San Diego's Little Italy district. After eating delicious alfredo and zucchini pasta for supper at Landini's Pizzeria, I wandered through the large, open-air piazza. People relaxed at tables, eating ice cream and Italian food, under the colorful lights strung overhead, amid the sound of accoustic guitar music and water flowing in a nearby fountain.
I happened to look down the street at the marina in the distance. For several breathtaking minutes, I gazed at the boats and water dramatically illuminated by a pastel sunset. Wow!
In 2018, I traveled to Coronado Island by bus and got off at the Hotel del Coronado bus stop in search of Coronado Beach. Having known nothing in advance about the location, I was gobsmacked to find a beach-front hotel that felt like a movie set. Walking around back, I found the greenest of manicured grass, palm trees rising high into the air, and in the distance, Coronado Beach glittering gold under the sun. It was a jawdropping moment that I'll never forget.
Walking along Mission Beach boardwalk, for the first time, I experienced the quintessential California culture I had read about and seen on TV. On the strip, there were brightly painted taco, ice cream, and surf shops. The boardwalk was lined with cottages and palm trees. In the distance, beachgoers sunbathed, swam, made sand castles, ran along the water and played beach volleyball. Surfers in body suits carried their surfboards to and from the ocean. Rollerbladers deftly maneuvered through the crowds.
At Ocean Beach, I walked to the end of the pier, the longest concrete pier on the west coast at 1,971 feet, for a panoramic view of the ocean and beach.
Afterward, I returned to San Diego proper and embarked on a tour of Tijuana. For me, an important part of having the opportunity to travel is to learn about and enjoy the local culture and this was the perfect opportunity to do that. I was amazed to find out that the border between the US and Mexico can be reached from downtown San Diego in about 45 minutes by Trolley. Led by a tour guide who grew up Tijuana, we were issued one-day visas, then walked into Mexico. We went to the Tijuana Wax Museum, walked the downtown, ate tacos, and went to a club.
Later in the week, I walked the embarcadero, went to the Midway museum, and took a cruise of the harbor. With a clear blue sky and water the gorgeous pictures practically take themselves at the embarcadero. The Midway museum was incredible. I particularly enjoying standing at the end of the deck on a walkway suspended above the ocean, then taking the Bridge Tour, which included the Flight Control, Chart Room, Navigation Bridge, and Admiral and Captain's Quarters. And the harbor cruise was a great way to relax at the end. The ship circled the bay with the Captain pointing out the notable sights. The California sea lions were a highlight for me, as well as the stunning San Diego skyline.
That night, I went to the Taco Stand where I enjoyed a Carne Asada Taco and Grilled Pescado Taco (Mahi Mahi). I had never had a fish taco before. The combination of grilled fish, cabbage, and chipotle sauce was delicious in a way I hadn't anticipated. Thank you to Trey Hunner for one of many great recommendations.
Afterward, for dessert, I visited Salt and Straw ice cream shop in Little Italy. Their ice cream cups are a familar sight in Little Italy. I am still dreaming of the Sea Salt with Caramel Ribbons ice cream I had there that night. Can't wait to go back sometime.
If you enjoyed this blog post, you might enjoy reading my PyCon US 2019 blog post, or watching the replay of the DjangoCon US 2018 "State of Django" panel, in which several DEFNA Board Members, including myself, and other community members talk about our efforts.
My DjangoCon experience couldn't have been better. I learned a ton, networked with friends new and old, and had some once-in-a-lifetime sight seeing moments. Thank you to Chair Jessica Deatz, Co-Chair Sara Gore, and all of the organizers, speakers, and attendees who made DjangoCon US 2019 a special conference.
Join us next year... ?