DjangoCon US 2023 Recap

Table of Contents

Intro

Disclaimer: the content of this post is a reflection of my career journey and not specific to my work at JPMorganChase.

DjangoCon US 2023 took place from October 16-20 in Durham, North Carolina. It was the sixth DjangoCon US I’ve had the privilege of attending, and in my opinion, the best one yet.

Attendees (photo credit: Bartek Pawlik (https://bartpawlik.format.com/))

back to top

Pre-Conference Activities

DEFNA Board Dinner

"Thank you to our DEFNA President Peter Grandstaff and Two Rock Software for treating fellow DEFNA Board Members in Durham for DjangoCon US to a magical dinner last night at Parizade. The apple pie mezcal margarita, linguini and clams, cookie and ice cream dessert, and company were stellar."

Things got off to a great start with a DEFNA Board dinner at Parizade on Saturday night.

According to every person I spoke to who had eaten there before, you can’t go wrong. Everything is so good. I’d never eaten linguini and clams before, but it sounded really good. I decided to be adventurous and try it. If you won’t do something new on the eve of DjangoCon US, when will you? I chose well.

It was a rare opportunity to spend time in person with other board members and enjoy a perfect meal.

Wow…

Apple Pie Mezcal Margarita (“Del Maguey Vida Mezcal, triple sec, lime juice, apple pie syrup, salted rim”)

Linguini and clams (“chorizo, cherry tomatoes, toasted garlic, white wine sauce, tarragon bread crumbs”)

DEFNA Board (photo credit: Bartek Pawlik (https://bartpawlik.format.com/))

back to top

Django Girls Workshop

I love a good cup of coffee. On Sunday, I ventured to nearby Cocoa Cinnamon coffee shop. I had a Dr. Durham Latte (organizer recommended).

Cocoa Cinnamon Coffee Shop

Dr. Durham Latte (“House made vanilla bean syrup, maca root, and ginger topped with black lava salt”)

With coffee in hand, I was looking for the Durham Convention Center to help with organizing, got lost, and serendipitously stumbled upon the Django Girls Workshop hosted at the office of our wonderful, longtime partners Caktus Group. I was reunited with my friends Dawn Wages, Jay Miller, Jason Judkins, Rebecca Conway, and Tim Allen. It was a great time at an event where lives are changed. The event featured a majority of Black participants! While at the workshop, I enjoyed food from Neomonde Mediterranean (organizer recommended), caught up with my friends, and picked up some swag!

So good to be welcomed in by my friend Tim :)

Django Girls lunch from Neomonde Mediterranean

I’ve always wanted one of these shirts!

back to top

Swag Stuffing

I eventually made it to the Durham Convention Center for swag stuffing! Many hands make light work.

Swag stuffing operation (I spy a DEFNA sticker!)

back to top

Django Social

Later that night, I attended Django Social at Ponysaurus. The event was hosted by Jason Judkins, DjangoCon US Organizer, and Jon Gould of Foxley Talent, DjangoCon US Sponsors.

Jon and company have started a network of Django meetups in the UK called Django Social. Jason is starting a Raleigh-Durham chapter and this was the kickoff.

Not being a fan of beer, I had a Ponysaurus signature Beer Cocktail called a Gosé Margarita (lime juice, triple sec, & tequila, topped with Gosé beer).

Gosé Margarita

"Thank you to Jason Judkins and Jon Gould for generously hosting a wonderful Django Social event tonight on the eve of DjangoCon US. I enjoyed meeting and getting to know the new Python Software Foundation Executive Director Deb Nicholson, spending time with two of my favorite Python/Django authors Eric Matthes and William Vincent, and catching up with my wonderful Revsys friends Frank and Jeff, among many interesting conversations."

back to top

Meeting the New PSF Executive Director Deb Nicholson

During the event, I happened to find myself having a conversation with a woman who really knew a lot about open source and events! It turned out to be the new Python Software Foundation Executive Director Deb Nicholson. Serendity strikes again. I love it when that happens. :) She was accessible throughout the conference, and it was a wonderful place to get to know her. Check out her Monday talk Meet-ups: A Grand Vision for a Humble Endeavor.

Me and PSF Executive Director Deb Nicholson later in the week

back to top

A Chance to Hang Out with Old Friends and Make New Friends

Hanging out with favorite Python/Django authors Eric Matthes and William Vincent, and my wonderful Revsys friend and fellow DEFNA Board Member Jeff Triplett

back to top

Monday

Meeting the New Django Fellow Natalia Bidart

On Monday, I ate breakfast with our new Django Fellow Natalia Bidart. I was thrilled to meet her! We talked about our work, what her experience has been like so far as a Django Fellow, and she introduced me to the art of drinking maté.

back to top

Kojo Idressa and Peter Grandstaff Kick Off the Conference

DEFNA North America Ambassador Kojo Idressa kicked of the conference with the the kind of Orientation and Welcome that only he can deliver.

Thank you Kojo for setting the stage for a wonderful conference.

“All of you are beyond welcome and we are thrilled you are here.”

Kojo also educated the audience about the concept of a Self Care Sprint. It’s important to take time for yourself, as needed.

Self Care Sprint

During the Opening Remarks, Conference Chair Peter Grandstaff asked everyone to be kind and make this conference a great place for everyone else. “If you see someone engaging in inappropriate behavior, here’s a phrase you can use, ‘Hey, we don’t do that here.’”

A powerful tool borrowed from PyCon Australia and written about by Eric Holscher of Read the Docs and Write the Docs for setting norms: “Hey, we don’t do that here.

back to top

Finding Purpose in Open Source Through Community Building

Abigail Mesrenyame Dogbe delivered the keynote Finding Purpose in Open Source Through Community Building.

When Abigail was young, she didn’t like math, science, and computers. Her parents would show her how to do a chore, then leave her to do it herself. She credits them with having taught her how to bring people into open source. That is her purpose in life.

In 2017, after her undergraduate studies, she took part in a Django Girls workshop with DjangoCon US Organizer Noah Alorwu as her mentor. She was encouraged to give back by teaching other women how to code. She went on to be an organizer or mentor at 25 events with 500+ participants in cities and and remote areas of Ghana. She was happy to be the first female mentor, but not satisfied. She encouraged other women to become involved.

Only two years later, at PyCon Africa Django Girls workshop in Ghana, all of the coaches were women. It was a proud moment and a result of that effort.

Abigail told the stories of six people she had met through her open source work. Some were shy or inexperienced. Others were more established. Some were coders, some weren’t. Some had a passion. Others were trying to figure out where they could fit in. She was able to get to know them and see their potential. Like her parents, she taught them how to do tasks, then left them on their own to grow into leadership and perhaps find themselves in the process. She has been able to “10x” her impact this way.

Abigail talked about some of the challenges faced:

  • Lack of opportunities (especially for junior developers)

  • Lack of paid open source work

  • Lack of resources

  • Travel and visa difficulties

Abigail missed out on some high profile international speaking opportunities due to visa denials. Being a US grad student has opened doors.

Abigail talked about organizers who have grown the Africa Python/Django community, looked out for her, and pushed her outside of her comfort zone.

She is currently on a journey to become an open source program manager, using all of her lessons learned. Contributing to open source has helped her develop resilience, embrace discomfort, achieve personal growth, and find purpose.

Her organizer resume is impressive: Django Girls, PyLadies Ghana, PyData Ghana, PyLadies Morovia, PyLadies Zambia and other PyLadies communities, PyLadies Global, PyCon Ghana 2018, PyCon Africa, PSF internship, Everything Open Research (a non-profit she started), and DE&I research

She invited the audience to DjangoCon Africa in Zanzibar, Tanzania from November 6-11. Another PyCon Africa is also in the works.

She asked the audience to consider how they are helping bring people into open source, especially people who do not necessarily love coding. She hopes her story will inspire others to give back to their local communities.

Abigail and I have been following each other on social media for quite a while. I was really excited to meet her in person!

Me and Abigail

"Don’t have stats, but this feels like the most diverse DjangoCon US I’ve ever been to. Particularly excited at how many Africans we have speaking and attending, starting with Abigail Mesrenyame Dogbe‘s inspiring keynote “Finding Purpose in Open Source Through Community Building.” #DjangoConUS"

back to top

HTML-ivating your Django web app’s experience with HTMX, AlpineJS, and streaming HTML

Chris May has been a long-time appreciator of the Django community and wants to give back by elevating the experience of your Django app through his talk HTML-ivating your Django web app’s experience with HTMX, AlpineJS, and streaming HTML.

Chris began by talking about the prevalent architectural pattern of SPAs.

Chris believes that better user experience drove their popularity. An initial page load downloads a JavaScript application that handles all interactions and uses APIs to communicate with servers. As the data changes, the page is updated with small payloads without reloading the page. Users enjoy dynamic and engaging interfaces.

But, SPAs have been overused. "SPAs incur complexity that simply doesn't exist with traditional server-based websites: issues such as search engine optimization, browser history management, web analytics and first page load time all need to be addressed. Proper analysis and consideration of the trade-offs is required to determine if that complexity is warranted for business or user experience reasons. Too often teams are skipping that trade-off analysis, blindly accepting the complexity of SPAs by default even when business needs don't justify it. "

Spa user experience is no longer an advantage.

Chris referred to a real life case study Making the world’s fastest website, and other mistakes by Taylor Hunt, a developer at a supermarket chain. Taylor knew their web app needed a better experience and wanted to record what customers experienced.

He bought several popular phones, gave them to people, and recorded them performing a task. He asked them to load either the production web app, super market chain native app, or the competitor amazon.com or walmart.com apps. Once loaded, search for eggs, add the first result to the shopping cart, and start the checkout process.

Chris showed a video of the results.

Each app takes a significant amount of time to accomplish the task, sometimes with a lag between the time the user touches the device and app response. The apps took between 59 seconds and 4 minutes to finish.

Ranging from 59 seconds to 4 minutes to finish

Taylor knew it could be better and had a vision: “Be so fast it’s fun on the worst devices and networks our customers use.”

He found some advice from 2017- for optimal website performance, establish a budget of 130 kb or less (first download- HTML, CSS, JavaScript). Due to the third party JavaScript data collection tools and use of ReactJS and Redux in the production app, he could not meet the budget as a SPA app. He decided to focus on HTML, with minimal CSS and laser-focused JavaScript that required complex interactivity.

His demo app was the functional equivalent of the production app (using same phone, internet, server, APIs, data), with a drastically elevated experience. Much quicker to load and interact with, it finished in 20 seconds.

20 seconds to finish!

Due to the capabilities of new tools, Django websites can be just as friendly as SPAs and much easier to maintain. In the talk, Chris would show us how.

Chris told the story of Caleb, a Laravel developer at Titan, one of the best PHP shops. He realized there was a significant cost and complexity to SPAs, so he decided to default to traditional web apps and only choose a SPA when needed. But, after starting to create a web app, he would always feel a gravitational pull back to SPA. He realized the seminal decision causing this would be when you decide to return JSON from the server. You need JavaScript on the page to receive the request. If you return HTML, you need much less JavaScript on the page to handle it. He created a framework called Livewire for Laravel Developers.

Python and Django devs have adopted a different framework called HTMX that is growing in popularity. HTMX enables JavaScript-like functionality, without the use of JavaScript, such as re-rendering part of a page using AJAX at the cost of just 14 kb.

Alpine was created to support Livewire. According to Chris, it’s an incredible framework that can create rich interactions with very little JavaScript. Its focus is the in-page experience. You can use it to create mobile components, make dynamic forms. It is reactive, so any data on the page associated with HTML will updated when changed.

HTMX and Alpine together can enable you to give your users a SPA-like experience for less than 30 kb.

Five components of elevated experiences: remove whole page refreshes for every interaction- accomplished with HTMX, use small pyaloads form the server to update the interface- accomplished with HTMX, update HTML as a result of changes in data- accomplished with Alpine, empower rich on-page interactions- accomplished with Alpine, be fast

These two frameworks, along with Tailwind CSS have brought the joy of web dev back to his life. He hadn’t realized how much it had faded over time.

Developer Experience boost: Both frameworks can use HTML attributes to control behavior, locality, remove your JS build system, write mostly Python and HTML, easier maintenance, faster iteration cycles

Chris then wanted to focus on the “Be fast” component of elevated experience, which he said could trump the rest.

SPAs using React and other JavaScript frameworks have a hidden cost- time to boot up.

Chris went back to the production app and demonstrated that the JavaScript prep took so much phone resource that it caused the text input to lag. The eggs search was deleted and the app then attempted to find 360,000 items and summarize them on the page instead. The user would then have to research, taking over a minute and a half.

In the demo app, the transaction happens very quickly, before the app has finished loading. As soo as the search bar appears, it is able to be used for a search. Critical elements are delivered as quickly as possible, and the user is not prevented from accomplishing their goal.

Chris wants Python developers to be able to do this.

Currently, Python will obtain all of the data, put it in the template, then send it in the response. This is ok, but can hurt user experience.

Chris proposes that when the request comes in, we start sending the template as soon as we can and continue sending pieces of it as they become available, until it’s done. This can be done using streaming HTML technology that has been around since 1997. Every browser is already optimized to use it.

Chris created a recommendation engine and engineered it to take up to five seconds to load recommendations on the homepage.

If the CSS container element does not have four items, the page will render the CSS skeleton elements shaped like the eventual content. This will prevent the page from jumping around as it renders. Each recommendation will be sent when it is ready. Meanwhile, the user can use the site.

He demonstrated how to create the demo functionality in Django using Django 4.2’s new StreamingHttpResponse async functionality. Unfortunately, as of the conference, this pattern only works with Jinja templates.

He also showed some patterns that work with Django templates too.

Option 1: Split templates into parts, yield each one via Django 4.2's new async iteration in

Option 2: Render a view, subscribe to HTMX Server-Side Events, send the slow parts to the page when they're ready

These are not the only options. Chris has created a web-async-patterns repo in PyHAT-stack GitHub organization. He wants your contributions. He believes that the community can create better patterns that empower us and enable Django to do new things.

Chris closed by summarizing what created an exception experience. Exceptional Experiences with Django: Using  to stream critical elements to the user as quickly as possible, use HTML fragments to update parts of the page with HTMX, leverage scoped down frameworks like Alpine.js to power rich interactions

back to top

Fried Green Tomatoes :)

At lunch… trying a fried green tomato for the first time!

back to top

What Can the DSF Do for Me? What Can I Do for the DSF?

Chaim Kirby, Django Software Foundation (DSF) President, asked What Can the DSF Do for Me? What Can I Do for the DSF?

What can the DSF do for me? He gave a report card:

  • Support development of Django by sponsoring sprints, meetups, gatherings and community events: B

  • Promote the use of Django among the World Wide Web development community: D

  • Project the intellectual property and the framework’s long-term viability: A

  • Advance the state of the art in web development: no grade

Chaim gave a special thanks to DSF Board Assistant Catherine Holmes: “Honestly, we could disappear and if Catherine sticks around, things keep going.”

What can I do for the DSF?

Chaim announced two new initiatives:

  • Change to DSF membership qualification

  • DSF Working Groups

In the past, DSF membership has been available to people who shared IP with the DSF- that is, literally wrote code or documentation.

DSF membership will now go beyond code or documentation to recognize the myriad of ways that people support the Django community. It will be predicated on making meaningful contributions toward the purpose of the DSF.

The DSF is also changing how its day-to-day work gets done by re-distributing power from the DSF Board to working groups. The working groups will be tracked in the DSF Working Groups GitHub repo. If you have an idea for how to better achieve a DSF goal, there is a process and template. You can nominate yourself to define a working group and the board will review, with the potential for a budget.

Chaim gave a special thanks to Jacob Kaplan-Moss for taking the lead on the DSF Working Groups initiative.

For more info, check out Jacob’s blog post Announcing DSF Working Groups.

During the sprint, Jacob also submitted a pull request to update the Django Enhancement Process (DEP) process docs.

Jacob talking to attendees about the new DSF Working Groups initiative

It’s great that the creators and early architects of Django continue to be engaged with and accessible to the community. Check out this DjangoCon 2008 Schema Evolution Panel that Django Co-Creator Simon Willison recently unearthed featuring himself, Andrew Godwin, and Russell Keith-Magee. :)

back to top

Parts and Labor, The Parlour, and Back to the Hotel

That night, I walked with a group of fellow conference-goers to Parts and Labor for light food and drinks.

Parts and Labor margarita

Afterward, I had a scoop of chocolate ice cream from The Parlour (organizer recommended).

The Parlour

Parlour flavors

Back at the hotel, a late night chat… great crew :) (© 2023 Paolo Melchiorre CC BY-SA 4.0)

Incidentally, on the first sprint day, Paolo, along with Will Vincent, presented μDjango, a single file Django micro project. Read about its inception on Paolo’s blog.

back to top

Tuesday

Hallway track

Ken Whitesell at the registration desk

back to top

Django Social T-Shirt

On Monday, I was fortunate to come into the possession of one of Foxley Talent’s Django Social T-shirts. :)

"Couldn’t resist wearing this super cute Django Social shirt from Jon and company. I’ve been to a Django Social in Durham now. Hoping to make it to one in the U.K. eventually!"

Me wearing my Django Social T-shirt with Django Social Organizer and Foxley Talent Principal Jon Gould

back to top

Coherence Demo

Two members of our party at Parts and Labor had founded a startup called Coherence.

On Tuesday, I stopped by their sponsor table for a demo.

Coherence demo

Coherence is an alternative to traditional PaaS built on top of AWS and GCP that provides:

  • Full-stack previews

  • Build pipelines

  • Static and production environments

  • Cloud IDEs

  • Hosted web-based SSH tools for secure & audited access to REPL or databases in each environment

  • Polished UI for admin and deployments

  • Infrastructure-as-code

Check out the docs!

Coherence brand

back to top

Don’t Buy the “AI” Hype

While DjangoCon US 2022 Chair Logan Kilpatrick, first DevRel hire at OpenAI, is busy getting OpenAI’s first developer conference OpenAI DevDay off the ground, Tim Allen, gave an impassioned talk Don’t Buy the “AI” Hype the he had put together at the last minute to fill an open slot.

Tim has been writing code since 1980. Over the years, he has seen a lot of tech trends and hype, and has been involved in some of it. He has never seen anything like what he calls the “AI” hype cycle. According to Tim, it’s next level. At the risk of sounding “like an old man yelling at kids to get off my lawn,” he wants to provide a warning.

Tim on stage

Tim cited a KPMG report that says that 93% of senior business leaders believe that generative AI will provide value for their businesses. He does not dispute that.

He compared the Gartner Hype Cycle for Emerging Trends 2023 with generative AI at the peak that he calls “Mount Hype” with the Dunning-Kruger effect curve. He believes the similarity is not a coincidence.

Tim gave an entertaining rundown of technology trends over the past 25 years. They were all useful tools in the technology toolbox, but did not live up to the hype. According to Tim, the media builds the technology up to “Mount Hype” for clickbait, then tears it apart in its descent. By blinding the world with hype and fear, it’s impossible to find the true utility of these new technologies and use them to improve the human condition.

Tim told the story of the startup he built as a web portal for Second Life virtual world. Hyped to the max, Second life was the media’s darling, then became its whipping boy.

He says among generative AI companies, it’s now an arms race, and the race to the bottom “is dangerous.” He puts “AI” in quotation marks, because he says it’s not AI, it’s machine learning models, a subset of AI. “It’s not artificial and it’s not intelligent.” It’s dangerous to give these attributes to machine learning models. By saying that models “hallucinate” (a.k.a. make things up) we are removing the responsibility of the programmer and model trainer to be ethical.

With these falsehoods becoming part of the permanent record, we risk the line of collective truth becoming so blurred, it’s invisible.

He believes that a large portion of our population have been left behind by the education system and are easily misled. He fears that we are unprepared for the effect of generative AI on future elections.

He doesn’t have an easy answer, but says that as technologists we must be responsible stewards and do better.

“We’ve got to stop falling for it.”

back to top

An Approach to Lightweight Tenancy Management Using Django Rest Framework

Having implemented multi-tenancy myself, I thought Eliana’s talk An Approach to Lightweight Tenancy Management Using Django Rest Framework would be an interesting one to attend, and it was.

In a single-tenancy architecture, each tenant has its own application instance and its own database, physically isolated.

In a multi-tenancy architecture, all tenants share the same database and application instance, but each tenant is isolated from the rest, and you have to implement the isolation. A user can belong to multiple tenants, but can only access resources from the tenants to which they belong.

“Multitenancy is a software architecture where a single software instance can serve multiple, distinct user groups.”- Red Hat’s definition

According to Eliana, multi-tenancy is more common when a company uses your product and will have its own users, not when you market directly to the end user.

She referred to Slack as a possible example of multi-tenancy architecture: each workspace is a tenant, isolated from each other, and users can access multiple workspaces, but can only access workspaces to which they belong, and information does not cross from one workspace to another.

Eliana showed an example app that was an abstraction of the requirements from a number of different multi-tenant websites that she and her colleagues had implemented.

Example

  • The tenants are represented as companies

  • The resources are represented as company reports

  • The user can access many companies (an example user is a fractional account who does accounting for multiple companies)

Key points

  • Effectively nest API routes so resources fall under the specific tenant

  • Consistently restrict access to resources

  • Centralize checks in a single place to avoid code duplication

They used drf-nested-routers package to nest resources under a specific tenant.

URL example: tenant/<tenant-id><some-resource/<resource-id>

In order for this to work, a few lines of code need to be added to urls.py.

If there is a company_id 23 associated with a report with id 1 and a company_id 5 associated with a report with id 2:

A GET request to companies/23/reports/1 will return a 200 HTTP status A GET request to companies/5/reports/1 will return a 404 HTTP status

She then explained how they write a custom viewset and overrided the initial() method to implement tenancy check functionality to restrict user access to resources.

First they check that the user is logged in and get the company primary key from the URL. If either is missing an exception is raised. They then get the user from the request. Instead of looking up the company using the primary key, they look for it within the user’s set of companies. The company needs to exist and be among the user’s set of companies in order for it to be returned.

Eliana and her colleagues would occasionally forget to filter by company which would result in accidentally leaking information from other tenants. As a bonus, she demonstrated how they created a custom model manager to avoid this.

They would override the filter() method and check if company_id or company is in the kwargs. If not, the MissingCompanyException is raised. If either exists, company is filtered like intended with the kwarg.

back to top

Speaker and Organizer Dinner

After the conference activities and group photo, I attended the complimentary speaker and organizer dinner at The Pit. The food was really good!

The Pit dining room

Another delicious southern-style meal!

A wonderful conference partner Discover Durham generously provided city guides for swag bags and gift boxes by City Box Durham for organizers and speakers.

City Box Durham gift boxes

back to top

Wednesday

Testing Modern Web Apps Like a Champion

My friend Andrew “Pandy” Knight delivered the Wednesday morning keynote Testing Modern Web Apps Like a Champion.

Andy is a local and learned development through Django. At DjangoCon US 2019, he gave a Selenium tutorial. It was special for him to be back four years later giving a keynote about testing.

Andy introduced us to Suki, his French bulldog. He created Bulldoggy Reminders app to help him take care of his dog.

Users can log in. On the left side are the reminders lists they have created. On the right side are the items in a list. Users can dynamically add items to lists, rename lists, and delete lists. When an item is completed they can strike through it by clicking on it.

The app was made with FastAPI, HTMX, and stores data in TinyDB.

Bulldoggy app architecture

Andy singing the praises of HTMX "Another high level endorsement of HTMX: “HTMX is a great way to democratize front-end development.” Andrew Knight"

Testing is an art and a science, Andy said. Development and testing are two sides of the same coin.

This talk was a bookend for a keynote Andy did at PyTexas that focused on the full-stack Python development of Bulldoggy Reminders app.

In this talk, Andy would be talking about how to test the app.

“Testing is hard.”

Testing Challenges

Historically, testing strategy has been built around the Test Pyramid that has probably been around longer than Andy has been in a professional environment. :)

According to the strategy, we want a lot of unit tests. They are white box, next to the code, low level, very fast, touching the Python methods. Moving up the pyramid, if we have UI, we want to test the widget library as components. Moving up the pyramid, we reach API testing. We make a request, get a response, verify a 200 code. They take a bit longer to run and there could be network issues, but they are ok. We reach UI tests. We want to do as few of them as possible. They are the most complex, longest, slowest, most brittle, most prone to flakiness, the riskiest.

Test Pyramid Scheme

“We have developed an entire testing strategy with this pyramid around presumptions that certain types of tests are good and bad. And I’m here to tell you today that’s bull crap. Every type of test adds value in unique, special ways. To try to label some as good and bad is not healthy for us as we approach the quality of our applications. I could argue that UI tests are the valuable ones because they are the ones that are testing your application as a user would.”

Modern testing goals- let’s break away from the pyramid and its preconceived notions

While testing can be challenging, our approach to testing doesn’t need to be.

Writing good tests: follow the Arrange-Act-Assert method:

  • Arrange things in the system

  • Act on the target behavior

  • Assert expected outcomes

Arrange-Act-Assert works for all types of functional tests, whether they are unit, component, API, or UI. This pattern came up over and over again in the talk.

Can’t we just use pytest or unittest? Andy loves pytest. He is a pytest stan and thinks it is the best testing framework in any language, but…

pytest and unnitest cannot test web apps or frameworks. They provide the structure for writing test cases. You need to add the “magic sauce” inside the test cases. pytest alone is not the answer.

What about Django’s testing support? Django has an awesome test client. Django testing support is probably some of the best Andy has seen in a Python web framework, but…

You are going to be limited to “white box” testing of calling methods and functions directly from the code. You’re not going to be able to test the app like a user by opening up a browser and clicking around or calling the API with a REST client.

Andy pointed out the “white box” unit testing at the bottom of the pyramid and “black box” testing of the components above.

Tools for black box testing… Cypress and Playwright can do all of these things

Focusing on open source tools, Andy went over how to do component, API, and UI testing, with examples and pitfalls from his own personal experience.

Web Test Automation Tool Comparison

Tips for testing modern web apps like a champion

Afterw the talk, I had the chance to catch up with Andy. His talk has rekindled my desire to get better at testing and reminded me of what a great resource Test Automation University is. He gave me a card resource too!

A gift from my friend Andy

back to top

Inside Out: My Journey of Understanding Inclusion

This year, along the lines of my fellow DEFNA board member Jeff Triplett’s annual DjangoCon US Talks I’d Like to See list, I created my own Talk Topic Ideas List and posted it on social media.

"The @djangocon US CfP closes May 15th. We'd LOVE to receive your talk proposal! If you need some inspiration, I've written up a list of possible topics. What topics would you like to learn more about? ❤️🐍"

Tim Schilling, who has done an incredible job of taking over my former role of DEFNA Corporate Secretary and driving a lot of improvement across DEFNA and DjangoCon US, tooted to me and Natalia in response.

"@kati @djangocon Oh, I really like this one on your list: > Learning more about our new fellow :) @nessita are you submitting a talk?!"

It kicked off a conversation that led to her giving the talk Inside Out: My Journey of Understanding Inclusion on Wednesday.

"@CodenameTim @kati @djangocon I've been thinking about this a lot, and I would be most thrilled to prepare a talk. Currently, one of the topics I'm feeling most passionate about is Diversity And Inclusion, so I'd be excited to share my view, thoughts and my experience on the matter. Would that be a talk you'd like to see/attend?"

In her talk, Natalia gave some examples of prejudice that she has faced as a woman. Thank you Natalia for putting into words the type of that experiences I’ve also had, but have questioned.

She explained what unconscious bias is and that we are unaware of it. Her hope is that we will reflect on our unconscious biases to improve the Django community as a whole.

She then talked about the conflicting standards women are expected to meet. I personally found this to be a very powerful part of her talk.

Double Bind

Double Bind Paradoxes

Double Bind from Barbie movie

Natalia went on to talk about cultural aspects too and recommended Ned Batchelder’s PyCon US 2023 keynote People: the API User’s Guide and the book The Culture Map by Erin Meyer.

Thank you to Natalia for embracing our community and generously asking for reflection about an important subject. I hope she found our conference to be very welcoming in return.

“I had to stand in line at the women's bathroom. I’ve never had to do that before at a conference.” Natalia Bidart at #DjangoConUS

I’ve chatted with women recently about the additional overhead women and other underrepresented people often have from doing extra work to change the system. It can be exhausting. I am looking forward to getting to know Natalia’s development work.

back to top

DjangoCon Africa

Daniele Procida has been involved in organizing and attending African PyCons for nearly a decade now. He spoke of the special challenges, including questions of safety.

Daniele said we should not just be asking these questions about African events. We should be asking them about events in all countries, including our own. Other countries need to come with safety warnings as well.

African PyCons are creating safe spaces through codes of conduct. It’s an investment in courage. “This is what we do and this is how we are.”

He also pointed out that African PyCons and DjangoCon operate on a shoestring budget. For example, PyCon Namibia’s total conference budget was less than $7,000 USD. The conference finished with a balance of just over $100 USD.

Daniele asked DjangoCon Africa Keynoter and Organizers to come up to the stage.

Wonderful people I am proud to call friends: Daniele Procida, Kojo Idressa, Sheena O’Connell, Abigail Mesrenyame Dogbe, Dawn Wages, Noah Alorwu

Daniele praised DjangoCon US for doing exactly the same work from another part of the world. “I haven’t seen so many African and Black faces, non-white faces, as a proportion at an event outside Africa.”

DjangoCon Africa 2023 will take place in Tanzania, Africa in November and DjangoCon Europe 2024 will take place in Vigo, Spain in June 2024.

I hope to go to both someday.

One day at lunch, I had the pleasure of eating with a table of Africans: Richard Ackon, Abigail “Afi” Gbadago, Noah Alorwu, Ntale Geofrey, and Benedict Kofi Amofah. I learned that Ghanians are laid back and Ugandians are tribal. We had the chance to speak at length about our cultures. It was a really fun conversation!

New friends… beautiful on the inside and out! (photo courtesy of Abigail Mesrenyame Dogbe)

Later in the week, a Black attendee told me that when he attends a conference in the U.S. or Europe, he is sometimes the only Black person in attendance. DjangoCon US was a very different and wonderful experience.

By one organizer’s count, we had around 10 Black speakers.

Check out the Black Python Devs write-up about their DjangoCon US experience.

"This makes me smile. ❤️ We are nowhere near where we want to be on diversity, but making big strides. I think this was the most fun DjangoCon US I've been to so far, and the growing diversity played a big part in that."

back to top

Another Great Adventure

After conference activities, as usual, hanging around in the lobby led to a great adventure. Hanging around in a lobby once led to me sitting next to Python creator and BDFL Guido van Rossum at an impromptu group dinner and chatting with him about the early days of Python.

On this night, I ended up having dinner with Jacob Kaplan-Moss, Andrew Godwin (Django Core Dev, Django Async Architect, South creator, and the only person who has attended every DjangoCon US), Frank Wiles (Revsys Founder and Partner, and former DSF President), and Tim and and Charles of the Wharton School, my past client.

We ate at a restaurant called It’s a Southern Thing. The food was high quality and the service was great. I had the Crispy Catfish.

Crispy Catfish (“Crispy cornmeal fried catfish served over a bed of red beans & rice; made with beef sausage, holy trinity, creole spices, finished with a creole mustard aioli”)

Our table after an incredible meal!

Afterward, led by Tim, we had ice cream at a novel ice cream shop called Simon Says Dip This. Tim said he’s never seen an ice cream shop like this anywhere else. Vanilla soft serve has a core, dip, and topping of your choice.

Simon Says Dip This Counter

Final product… wow! (chocolate core, bourbon dip, and strawberry topping)

back to top

Conference Conclusion

I came away from Durham with many new friends, renewed optimism, and some amazing swag.

Conference badge

Prized possessions

Proud to be a DEFNA Board Member and DjangoCon US Organizer

Standing ovation for organizers

DjangoCon US Organizers (photo credit: Bartek Pawlik (https://bartpawlik.format.com/))

back to top

Sight Seeing and More Food!

I consider getting to know the host city to be an important part of the conference experience.

back to top

Sarah P. Duke Gardens

After doing a bit of research, I chose the Sarah P. Duke Gardens as my top priority for sight seeing. After spending time there, I can personally report that if you are in Durham, it is an absolute must see. Some of the scenes there were simply stunning! A local pointed out to me that it’s a different garden every month depending on which plants are in bloom.

Pink flowers

Glorious nature

H.L. Blomquist Garden of Native Plants Pavilion

Fish pool, historic terraces, and Cindy Brodhead Pergola

South Lawn

Red Bridge

Wooden Bridge

back to top

Duke Chapel

After visiting the gardens, I made the quick walk over to the Duke Chapel. Not only was the chapel gorgeous, but the Conference for North Carolina Chapter of the American Choral Directors Association was taking place. A choir that must have been made up of elite children singers happened to be practicing. I’ve stumbled into some jaw-dropping experiences while traveling. This was another one. Together, the music and surroundings were magical.

back to top

Museum of Life and Science

I also visited the Museum of Life and Science. The Butterfly House in particular was a really special experience. I was also happy to have a second change to see lemurs. Duke University has the largest population of lemurs in the world outside of Madagascar, but unfortunately, its tours were booked through the rest of the year. The Museum of Life and Science has a Lemur Exhibit. I enjoyed observing these beautiful animals. The Farmyard, Insectarium, and Aerospace exhibits were also really fun and interesting.

Unfortunately, the train that takes passengers around the museum’s 84 acres was not in operation at the time of my visit. I know I would have really enjoyed it.

Lemurs

Lemur Exhibit

Lemur

Butterfly House path

Butterfly House path

Butterfly House butterfly

Butterflies with “eyes” eating fruit

Insectarium- cockroaches

Insectarium- tarantula

back to top

Parizade

More pics from the incredible Parizade!

Amazing ambiance

Cookie and ice cream desert

back to top

Loaf

After having read rave reviews about Loaf bakery, I had to pay a visit. It did not disappoint. I ordered a ham and gruyere croissant, a walnut sea salt brownie, a pain au chocolat, and 5 pumpkin chocolate chip cookies.

Ham and gruyere croissant

Walnut sea salt brownie

back to top

Pizzeria Toro

For dinner one night, I ordered takeaway from Pizzeria Toro, right around the corner from the Marriott. I had a mouthwatering red-sauce pizza with shredded mozzarella, black olives, mixed mushrooms, and fennel sausage.

Cool atmosphere!

Yum!

back to top

Simon Says Dip This

More pics from the amazing Simon Says Dip This!

Dip being poured on

Toppings to choose from

back to top

Press Coffee, Crepes,and Cocktails

After having read rave reviews about Press Coffee, Crepes, and Cocktails at the American Tobacco Campus, I simply had to visit. I was keen to have a seasonal Black Forest Latte. I finally had the opportunity on the first day of sprints. The atmosphere was bright and cute. The food was excellent. I think this was the first time that I’ve ever had a savory crepe.

Coffee Bar

Bar bar

Black Forest Latte… the foam was silky smooth. Delicious! (“a combination of our house-made chocolate-sauce and cherry syrup”)

The Down Home breakfast crepe (“bacon with scrambled eggs and hoop cheese”)

The inside

back to top

In Closing

The talk replays will be available on the DjangoCon US YouTube channel in a few weeks.

Can’t wait for next year! :)

"As usual, I've tried to squeeze every last bit of experience out of DjangoCon US and have done about as much as I humanly can. 🤣 Today is a day for relaxed sprinting, catching up with a few more people, and flying back to Plano. I'll write up a proper blog post soon with thoughts about talks, the people I met, sightseeing, and food. For the moment, suffice it to say, this conference just gets better every year and that is because of the people. Everyone is welcome and everyone makes it a better place. This community is changing the world for the better through shared humanity and technology. And, it's not a coincidence that it started in wonderful Lawrence, Kansas."

djurham

back to top