PyCoder’s Weekly: Issue #368 (May 14, 2019)

#368 – MAY 14, 2019
View in Browser »

The PyCoder’s Weekly Logo


CPython 3.8.0a4 Avaliable for Testing

Among the new major new features and changes so far: Assignment expressions (PEP 572), Positional-only arguments (PEP 570), multiprocessing can now use shared memory to avoid pickling, typed_ast is back.
PYTHON.ORG

Playing and Recording Sound in Python

In this tutorial, you’ll learn about libraries that can be used for playing and recording sound in Python, such as PyAudio and python-sounddevice. You’ll also see code snippets for playing and recording sound files and arrays, as well as for converting between different sound file formats.
REAL PYTHON

SQL, Python, and R. All in One Platform. Free Forever.

alt

Mode Studio combines a SQL editor, Python & R notebooks, and visualization builder in one platform. And it’s free forever. Connect data from anywhere and analyze with your preferred language. Build custom visualizations or use out-of-the-box charts.
MODE ANALYTICS sponsor

How the Dropbox Client Uses Python

“This blog post talks about reverse engineering the Dropbox client, breaking its obfuscation mechanisms, de-compiling it to Python code as well as modifying the client in order to use debug features which are normally hidden from view.”
ANVILVENTURES.COM

Has the Python GIL Been Slain?

A discussion of PEP554 (subinterpreters) and how it relates to the global interpreter lock (GIL) in CPython.
ANTHONY SHAW

Will the GIL Be Obsolete With PEP 554?

Another discussion of subinterpreters (PEP 554) and how they will allow true in-process parallelism.
PYTHON BYTES podcast

Discussions

Python Jobs

SIPS Programmer (Madison, WI)

University of Wisconsin

Senior API Developer (Copenhagen, Denmark)

GameAnalytics Ltd.

Senior Backend Python Developer (Remote)

Kiwi.com

More Python Jobs >>>

Articles & Tutorials

The Best Docker Base Image for Your Python Application

Which Docker image should you use for your Python app? There are many choices, and it may not be obvious which is the best for your situation. This article gives you a good overview of the current options available.
ITAMAR TURNER-TRAURING

Writing Cleaner Python Code With PyLint

In this video series you’ll see how to install and set up the PyLint code linter tool. You’ll learn why you should use code linters like PyLint, Flake8, PyFlakes, or other static analysis tools—and how they can help you write cleaner and more Pythonic code.
REAL PYTHON video

Learn Enteprise API Integrations With Zato

alt

Zato is a high-performance open-source Python-based enterprise integration platform and application server for SOA/API with built-in support for Odoo, SAP, IBM MQ, REST, SOAP, AMQP, SSO, Publish/Subscribe, Docker, LDAP, SQL, NoSQL, Caching, S3, SMS, Kafka, Search and more. Click here for details.
ZATO sponsor

Finding the Cheapest Flights for a Multi-Leg Trip With Python

“I was able to find the cheapest flights with the minimal duration and the resulting prices were almost the same as on Google Flights.”
NVBN.GITHUB.IO

F-String Debugging in Python 3.8

F-Strings will get a = format specifier that expands like a macro into <variable_name> = <value_of_variable> to serve as a debugging aid.
TIRKARTHI.GITHUB.IO

Innovate Software at OSCON

Join the O’Reilly Open Source Software Conference (OSCON) this July to see what’s shaping software development—from AI and cloud technology to distributed computing—and learn how to put it to work for you. Save 25% with code PYCODER.
O’REILLY sponsor

Letting Google Know of Other Languages in Your Django Site

If you have a public facing Django site in multiple languages, you probably want to let Google and other search engines know about it. This article shows you the minimal setup necessary to support this use case.
HAKI BENITA

Styling Output in Pandas

Pandas has a relatively new API for styling output. This article shows examples of using the style API.
CHRIS MOFFITT

Django Search Tutorial

How to add basic search functionality to any Django website.
WILLIAM VINCENT

Projects & Code

Events

EuroPython 2019 Early-Bird Ticket Sales Open

July 8 – 14 in Basel, Switzerland
EUROPYTHON.EU


Happy Pythoning!
This was PyCoder’s Weekly Issue #368.
View in Browser »

alt


[ Subscribe to 🐍 PyCoder’s Weekly 💌 – Get the best Python news, articles, and tutorials delivered to your inbox once a week >> Click here to learn more ]

Planet Python

PyCoder’s Weekly: Issue #367 (May 7, 2019)

#367 – MAY 7, 2019
View in Browser »

The PyCoder’s Weekly Logo


This Was PyCon 2019

PyCon 2019 in Cleveland was an amazing experience! A big Thank You to all of the organizers and volunteers who made it happen! At the link above you’ll find a list of tweets from the conference to give you a sense of what it was like there. Also check out the talk recordings on YouTube.
TWITTER.COM

Guido Says Social Media Played a Part in His Decision to Step Down as BDFL

“I did not enjoy at all when the central developers were sending me hints on Twitter questioning my authority and the wisdom of my decisions, instead of telling me in my face and having an honest debate about things.”
TFIR.IO • Shared by revyuh.com video

Logging for Scientific Computing: Debugging, Performance, and Trust

“You’ve run your batch process with your scientific model, and after hours and hours it spit out a result. And the result is wrong.” Itamar’s article has some valuable tips on how to debug this type of situation in your own Python programs.
ITAMAR TURNER-TRAURING

Find a Python Job Through Vettery

alt

Vettery specializes in developer roles and is completely free for job seekers. Interested? Submit your profile, and if accepted, you can receive interview requests directly from top companies seeking Python devs. Get started →
VETTERY sponsor

A Discussion of PyPI’s “Business Model”

Challenges in making a package index turn a profit and what happened in the JavaScript community with NPM. Recommended reading!
DUSTIN INGRAM

Deterministic and Statistical Python Profiling

This post discusses some of the current profiling tools and techniques for Python apps: “The official documentation has a whole section on the subject, but we shall go beyond that and have a look at some alternative solutions, especially in the area of sampling profilers.” Nice read!
GABRIELE TORNETTA • Shared by Gabriele Tornetta

Make Your Own GeoIP API, With Python

This article shows you how to maintain your own GeoIP database and how to implement an API around it. Very cool, I had no idea this data was available for free.
ENZO CALAMIA

sorted() vs sort() in Python

Learn how to sort various types of data in different data structures, customize the order, and work with two different ways of sorting in Python.
REAL PYTHON

Python Jobs

Senior API Developer (Copenhagen, Denmark)

GameAnalytics Ltd.

Senior Python Engineer (Remote)

ReCharge Payments

Python Engineer in Healthcare (Burlington, MA)

Nuance Communications

Senior Backend Python Developer (Remote)

Kiwi.com

More Python Jobs >>>

Articles & Tutorials

Defining “Main” Functions in Python

Learn how to use the “main function” pattern in Python, as well as some best practices to organize your code so it can be executed as a script and imported from another module.
REAL PYTHON

Teaching Python Podcast

A new & fun Python podcast hosted by two middle school teachers learning and teaching Python. Kelly & Shawn, nice meeting you at PyCon!
TEACHINGPYTHON.FM podcast

Stop Reviewing Code Manually

alt

Take the hassle out of code reviews—Codacy flags errors so you can fix them quickly. Address security concerns, code duplication, code complexity and drops in coverage, directly from your workflow. Click here to get started →
CODACY sponsor

Building a RESTful API with Flask

“In this tutorial, we’ll be learning and creating RESTful APIs with Flask. To follow along with this tutorial, you should already have a good grasp of Python, Flask, and SQLAlchemy.”
SHAJIA ABIDI • Shared by Shajia Abidi

Remote Python Development in Visual Studio Code

New feature that allows you to edit locally and have your code and tools are running remotely inside of Docker containers, remote SSH hosts, and the Windows Subsystem for Linux (WSL).
DAN TAYLOR

Distributed Python Systems With RabbitMQ

An intro to the benefits of distributed systems and how to move to distributed systems using RabbitMQ. Learn the fundamentals of RabbitMQ and how to interact with it using Python.
DENIS OREHOVSKY • Shared by Denis Orehovsky

Innovate Software at OSCON

Join the O’Reilly Open Source Software Conference (OSCON) this July to see what’s shaping software development—from AI and cloud technology to distributed computing—and learn how to put it to work for you. Save 25% with code PYCODER.
O’REILLY sponsor

Reinventing the Wheel: Discovering the Optimal Rolling Shape With PyTorch

“How could ancient Sumerian wheel builders have calculated the ideal shape without modern computers and software? We may never know. Luckily, with today’s technology, it is relatively easy to rediscover the wheel’s optimal shape.” 😉
BEN WIENER

Python Context Managers and the with Statement

Learn how context managers and the “with” statement work in Python, including the difference between class-based and function-based context managers.
REAL PYTHON video

Format Python However You Like With Black

Quick overview of the Black code formatter, one of my favorite developer productivity tools.
MOSHE ZADKA

Projects & Code

zfsp: ZFS Implemented in Python, From Scratch

This is incredible, a clean-room reimplementation of the ZFS filesystem in Python, without reading the original C source code. Quote: “It seemed like it might be a fun project.”
GITHUB.COM/ALCARITHEMAD

Pykka 2.0 Released: Actor Model for Python

Pykka is a Python implementation of the actor model. The actor model introduces some simple rules to control the sharing of state and cooperation between execution units, which makes it easier to build concurrent applications.
STEIN MAGNUS JODAL

Events

PyladiesFest Kampala 2019

May 6 to May 11, 2019
PYLADIES.COM

Python Miami

May 11 to May 12, 2019
PYTHONDEVELOPERSMIAMI.COM


Happy Pythoning!
This was PyCoder’s Weekly Issue #367.
View in Browser »

alt


[ Subscribe to 🐍 PyCoder’s Weekly 💌 – Get the best Python news, articles, and tutorials delivered to your inbox once a week >> Click here to learn more ]

Planet Python

PyCoder’s Weekly: Issue #366 (April 30, 2019)

#366 – APRIL 30, 2019
View in Browser »

The PyCoder’s Weekly Logo


How to Get the Most Out of PyCon

PyCon is about to kick off! Whether you’re a first-timer or a seasoned attendee, this guide will help you get ready to have a great PyCon.
REAL PYTHON

Meet Python Content Creators at the PyCharm PyCon Booth

If you’re at PyCon this week come and meet yours truly, along with Michael Kennedy from the Talk Python podcast, Brian Okken from Test & Code, Miguel Grinberg, Chris Medina, PyBites, and the Real Python Team. Be sure to stop by and say hi 🙂
PAUL EVERITT

Become a Python Guru With PyCharm

alt

PyCharm is the Python IDE for Professional Developers by JetBrains providing a complete set of tools for productive Python, Web and scientific development. Be more productive and save time while PyCharm takes care of the routine.
JETBRAINS sponsor

Teaching a Kid to Code With PyGame Zero

How can you excite a kid about computers? In this article the author shares his experience teaching his six year old son some programming using PyGame Zero.
MATT LAYMAN

Detecting Parkinson’s Disease With Computer Vision

Learn how to use OpenCV and machine learning to automatically detect Parkinson’s disease in hand-drawn images of spirals and waves.
ADRIAN ROSEBROCK

Mac Adware, à la Python

An examination of a malicious piece of macOS software (adware) which leverages Python and various levels of obfuscation to hinder analysis.
OBJECTIVE-SEE.COM

Make a Location-Based Web App With Django and GeoDjango

Learn how to use Django and GeoDjango to build a location-based web application from scratch. You’ll be building a simple nearby shops application that lists the shops closest to a user’s location, powered by PostgreSQL and PostGIS.
REAL PYTHON video

Discussions

repeatfunc() Itertools Recipe

For example, repeatfunc(random, 10) would be a shortcut for (random() for i in range(10))
RAYMOND HETTINGER

Why Is This in the Official Python Docs?

“Lame Lame Lame, DO NOT USE THIS!!!”
REDDIT

Python Jobs

Senior API Developer (Copenhagen, Denmark)

GameAnalytics Ltd.

Senior Python Engineer (Remote)

ReCharge Payments

Python Engineer in Healthcare (Burlington, MA)

Nuance Communications

Senior Backend Python Developer (Remote)

Kiwi.com

More Python Jobs >>>

Articles & Tutorials

2019 PSF Annual Report

“Our first Annual Report shows you just a few ways the generous support from our partners and friends helps us support our mission”
PYTHON.ORG

Detecting SQL Injections in Python Code Using AST

Python has a built-in ast module that lets you inspect, parse and edit Python code. This article shows a real-world example of how you can use this module to detect SQL injection vulnerabilities in Python code.
ARTEM GOLUBIN

Join a Community of 3.5 Million Developers on DigitalOcean

alt

Discover why Python developers love self-hosting their apps on DigitalOcean, the simplest cloud platform. Get started with a $ 100 credit for new users →
DIGITALOCEAN sponsor

Python at Netflix

A sampling of how Python is used at Netflix: “We use Python through the full content lifecycle, from deciding which content to fund all the way to operating the CDN that serves the final video to 148 million members.”
AMJITH RAMANUJAM

Distributions vs Releases: Why Python Packaging Is Hard

Why Python packaging is hard: just because you both installed v1.2.3, doesn’t mean you installed the same thing…
ALEX BECKER • Shared by Alex Becker

Getting to Know Python 3.7

Short & sweet article that covers some of the new features and improvements available in Python 3.7: data classes, async/await, and more.
CASEY FAIST

Python in Visual Studio Code: April 2019 Release

Python interactive now comes with a built-in variable explorer, debugging is easier to configure, and improvements to the Python Language Server have been made.
MICROSOFT.COM

Python KeyError Exceptions and How to Handle Them

Learn how to handle Python KeyError exceptions. They are often caused by a bad key lookup in a dictionary, but there are a few other situations when a KeyError can be raised as well.
REAL PYTHON

Getting Started With Mercurial for Version Control

Super short article to show you the basics of Mercurial, a distributed version control system written in Python.
MOSHE ZADKA

Top 3 Python Libraries for GraphQL

A summary of the best Python libraries for the GraphQL query language.
OBERT MATYSZEWSKI

Create Your Own Timing Context Manager in Python

Covers various ways to write a Python context manager that measures execution time.
FLORIAN DAHLITZ

Python dis Module and Constant Folding

Why is pow(3, 89) slower than 3 ** 89? Quick article looking at the dis module and when CPython’s constant folding kicks in.
PYTHONTIPS.COM • Shared by Jim Anderson

Projects & Code

typed-json-dataclass: Enhanced Dataclasses

Enhances dataclasses to perform basic type checking and makes the dataclass JSON serializable.
GITHUB.COM/ABATILO

Python Decompiler

This free online tool can decompile Python bytecode (.pyc) back into equivalent Python source code.
PYTHON-DECOMPILER.COM

Events

PyCon US 2019

May 1 to May 10, 2019. See you there!
PYCON.ORG

PyDays Vienna

May 3 to May 5, 2019
PYDAYS.AT


Happy Pythoning!
This was PyCoder’s Weekly Issue #366.
View in Browser »

alt


[ Subscribe to 🐍 PyCoder’s Weekly 💌 – Get the best Python news, articles, and tutorials delivered to your inbox once a week >> Click here to learn more ]

Planet Python

PyCoder’s Weekly: Issue #365 (April 23, 2019)

#365 – APRIL 23, 2019
View in Browser »

The PyCoder’s Weekly Logo


Requests III: HTTP for Humans and Machines

Requests is getting a makeover slated for release in 2020: asyncio, HTTP/2, connection pooling, timeouts, Python 3.6+, and more.
PYTHON-REQUESTS.ORG

Python Learning Paths

Step-by-Step Python learning paths and study plans for beginner, intermediate, and advanced Python developers.
REAL PYTHON

Packaging Python Inside Your Organization

What do you do when your organization uses Python for in-house development and you can’t (or don’t want to) make everything Open Source? Where do you store and manage your code? How do you distribute your packages? Stefan lays out his approach in this detailed article.
STEFAN SCHERFKE

Find a Python Job Through Vettery

alt

Vettery specializes in developer roles and is completely free for job seekers. Interested? Submit your profile, and if accepted, you can receive interview requests directly from top companies seeking Python devs. Get started →
VETTERY sponsor

Flask vs Django: Choose Your Python Web Framework

What are the main differences between Django and Flask? What are their respective strengths and weaknesses? Read Damian’s article to find out.
DAMIAN HITES

Make a Python GUI App for NASA’s Image Search API

Learn how to build a Python GUI app for browsing the NASA image library from scratch using the wxPython toolkit.
MIKE DRISCOLL

Discussions

Suitable Tattoo for a Job Interview

Now that’s some dedication!
REDDIT

Python Jobs

Senior Python Developer (Copenhagen, Denmark)

GameAnalytics Ltd.

Senior Python Engineer (Remote)

ReCharge Payments

Python Engineer in Healthcare (Burlington, MA)

Nuance Communications

Machine Learning and Data Science Developer (Austin, TX)

Protection Engineering Consultants LLC

More Python Jobs >>>

Articles & Tutorials

How to Work With a PDF in Python

In this step-by-step tutorial, you’ll learn how to work with PDF files in Python. You’ll see how to extract metadata from preexisting PDFs . You’ll also learn how to merge, split, watermark, and rotate pages in PDFs using Python and PyPDF2.
REAL PYTHON

The 10 Most Common Mistakes That Python Developers Make

A list of harmful patterns & pitfalls you can avoid in your own Python code. This is an older post but it still applies as of 2019. Worth a read!
MARTIN CHIKILIAN

Python Opportunities Come to You on Indeed Prime

alt

Indeed prime is a hiring platform exclusively for tech talent like you. If you’re accepted, we’ll match you with companies and roles that line up with your skills, career goals and salary expectations. Apply for free today.
INDEED sponsor

Sending Emails With Python

In this course, you’ll learn how to send emails using Python. Find out how to send plain-text and HTML messages, add files as attachments, and send personalized emails to multiple people. Later on you’ll build a CSV-powered email sending script from scratch.
REAL PYTHON video

Getting Started With Google Coral’s TPU USB Accelerator

Learn how to get started with your Google Coral TPU Accelerator on Raspberry Pi and Ubuntu. You’ll then learn how to perform classification and object detection using Google Coral’s USB Accelerator.
ADRIAN ROSEBROCK

What Do Companies Expect From Python Devs in 2019?

“We took 300 job specs for Python developers, scraped from StackOverflow, AngelList, LinkedIn, and the websites of some fast-growing tech companies worldwide. From all these descriptions, we extracted the skills which were mentioned most frequently”
ANDREW STETSENKO • Shared by Andrew Stetsenko

Raspberry Pi for Computer Vision and Deep Learning

You can teach your Raspberry Pi to “see” using Computer Vision, Deep Learning, and OpenCV. Let Adrian Rosebrock show you how →
PYIMAGESEARCH sponsor

Comparison of Top Data Science Libraries for Python, R, and Scala

This is an infographic comparing commit frequency and other metrics for the most popular data science libraries in Python, R, and Scala.
CORIERS.COM

Guide to the Python time Module

Learn how to use Python’s time module to represent dates and times in your application, manage code execution, and measure performance.
REAL PYTHON

Projects & Code

Events

SciPy Japan 2019

April 23 to April 25, 2019
SCIPY.ORG

Python Sudeste 2019

April 26 to April 29, 2019
PYTHONSUDESTE.ORG

PyCon US 2019

May 1 to May 10, 2019
PYCON.ORG

PyDays Vienna

May 3 to May 5, 2019
PYDAYS.AT


Happy Pythoning!
This was PyCoder’s Weekly Issue #365.
View in Browser »

alt


[ Subscribe to 🐍 PyCoder’s Weekly 💌 – Get the best Python news, articles, and tutorials delivered to your inbox once a week >> Click here to learn more ]

Planet Python

PyCoder’s Weekly: Issue #364 (April 16, 2019)

#364 – APRIL 16, 2019
View in Browser »

The PyCoder’s Weekly Logo


Hands-On Python 3 Concurrency With the asyncio Module

Learn how to speed up your Python 3 programs using concurrency and the asyncio module in the standard library. See step-by-step how to leverage concurrency and parallelism in your own programs, all the way to building a complete HTTP downloader example app using asyncio and aiohttp.
REAL PYTHON video

Python Used to Take Photo of Black Hole

“Scientists have used a new algorithm to take a photo of a black hole. One of the most exciting parts about it to me is that they used a lot of Python libraries to do the magic.”
MIKE DRISCOLL

Monitor Python Applications With Datadog APM and Distributed Tracing

alt

Datadog’s tracing client integrates with asynchronous libraries like asyncio, gevent, and Tornado. Trace requests across service boundaries to identify bottlenecks, and get the necessary context to debug critical errors. Dive into your Python applications today with a free 14-day trial of Datadog →
DATADOG sponsor

Django: Keeping Logic Out of Templates (And Views)

Solid advice! Keep your Django templates and views clean by moving application logic into model methods and model managers.
BLOT.IM

How to Create an Index in Django Without Downtime

In this step-by-step Python tutorial, you’ll get a solid understanding of the limitations of Django migrations by tackling a well known problem: creating an index in Django without downtime.
REAL PYTHON

Meet Python Content Creators at PyCharm’s PyCon Booth

I’ll be there, the Real Python team will be there, and so will Mike Kennedy from Talk Python, Brian Okken from Test & Code, Matt Harrison, the PyBites team, Chris Medina, and Miguel Grinberg. Be sure to stop by and say hi 🙂 Thanks JetBrains!
JETBRAINS.COM

list.sort() vs sorted(list)

Taking a closer look at Python’s built-in list sorting methods with regards to memory consumption and time efficiency. Nice writeup!
FLORIAN DAHLITZ

PyCon 2019 Close to Sell Out

Get your ticket before it’s too late 🙂
PYCON.BLOGSPOT.COM

Discussions

Just Found the Best Python Book…Cover

(Potentially not safe for work)
REDDIT

Python Jobs

Senior Python Developer (Copenhagen, Denmark)

GameAnalytics Ltd.

Senior Python Engineer (Remote)

ReCharge Payments

Python Engineer in Healthcare (Burlington, MA)

Nuance Communications

Machine Learning and Data Science Developer (Austin, TX)

Protection Engineering Consultants LLC

More Python Jobs >>>

Articles & Tutorials

Python String Formatting Tips & Best Practices

Learn the four main approaches to string formatting in Python, as well as their strengths and weaknesses. You’ll also get a simple rule of thumb for how to pick the best general purpose string formatting approach in your own programs.
REAL PYTHON video

Python App Settings Management With Dynaconf

Nice little project for managing settings in your Python apps: “The only line of code you need to manage your Python 3 configurations”
BRUNO ROCHA

Stop Reviewing Code Manually

alt

Take the hassle out of code reviews—Codacy flags errors so you can fix them quickly. Address security concerns, code duplication, code complexity and drops in coverage, directly from your workflow. Click here to get started →
CODACY sponsor

Introduction to the Python Calendar Module

Short & sweet intro to the calendar module in the Python standard library.
STACKABUSE.COM

Be Your Own Certificate Authority

How to create a simple, internal CA for your microservice architecture or integration testing—with Python.
MOSHE ZADKA

Linear Regression in Python

In this step-by-step tutorial, you’ll get started with linear regression in Python. Linear regression is one of the fundamental statistical and machine learning techniques, and Python is a popular choice for machine learning.
REAL PYTHON

LSTMs for Human Activity Recognition

An example of using TensorFlow for Human Activity Recognition (HAR) on a smartphone data set in order to classify types of movement, e.g. “walking”, “sitting”, “standing” etc.
GUILLAUME CHEVALIER

Raspberry Pi for Computer Vision and Deep Learning

You can teach your Raspberry Pi to “see” using Computer Vision, Deep Learning, and OpenCV. Let Adrian Rosebrock show you how →
PYIMAGESEARCH sponsor

How to Write a Python Web Framework (Part 4)

In this part of Jahongir’s blog post series you’ll see how to expand your web framework with custom exception handlers, support for static files, and middleware processing.
JAHONGIR RAHMONOV

Using Python to Analyze Game of Thrones

Want to learn Python? What better way to learn than by having a Game of Thrones project to complete as motivation.
ROCKY KEV • Shared by Ricky White

Projects & Code

eht-imaging: The Code Behind the Black Hole Image

Imaging, analysis, and simulation software for radio interferometry used for generating the famous black hole image. Python FTW!
GITHUB.COM/ACHAEL

Events

PyColorado 2019 CFP

September 6 to September 8 in Denver, CO
PAPERCALL.IO

PyLadies Dublin

April 18, 2019
PYLADIES.COM

BangPypers

April 20, 2019
MEETUP.COM

SciPy Japan 2019

April 23 to April 25, 2019
SCIPY.ORG


Happy Pythoning!
This was PyCoder’s Weekly Issue #364.
View in Browser »

alt


[ Subscribe to 🐍 PyCoder’s Weekly 💌 – Get the best Python news, articles, and tutorials delivered to your inbox once a week >> Click here to learn more ]

Planet Python