Podcast.__init__: Generate Your Text Files With Python Using Cog

Planet Python - Thu, 2022-01-13 18:27
Developers hate wasting effort on manual processes when we can write code to do it instead. Cog is a tool to manage the work of automating the creation of text inside another file by executing arbitrary Python code. In this episode Ned Batchelder shares the story of why he created Cog in the first place, some of the interesting ways that he uses it in his daily work, and the unique challenges of maintaining a project with a small audience and a well defined scope.Summary

Developers hate wasting effort on manual processes when we can write code to do it instead. Cog is a tool to manage the work of automating the creation of text inside another file by executing arbitrary Python code. In this episode Ned Batchelder shares the story of why he created Cog in the first place, some of the interesting ways that he uses it in his daily work, and the unique challenges of maintaining a project with a small audience and a well defined scope.

  • Hello and welcome to Podcast.__init__, the podcast about Python’s role in data and science.
  • When you’re ready to launch your next app or want to try a project you hear about on the show, you’ll need somewhere to deploy it, so take a look at our friends over at Linode. With the launch of their managed Kubernetes platform it’s easy to get started with the next generation of deployment and scaling, powered by the battle tested Linode platform, including simple pricing, node balancers, 40Gbit networking, dedicated CPU and GPU instances, and worldwide data centers. Go to pythonpodcast.com/linode and get a $100 credit to try out a Kubernetes cluster of your own. And don’t forget to thank them for their continued support of this show!
  • Your host as usual is Tobias Macey and today I’m interviewing Ned Batchelder about Cog, a tool for generating files or text from embedded Python logic
  • Introductions
  • How did you get introduced to Python?
  • Can you describe what Cog is and the story behind it?
  • What are the use cases that you initially created Cog to address?
  • What were the shortcomings or extraneous overhead that you encountered in tools such as Jinja, Mako, Genshi, etc. that led you to create a new tool?
  • What was your path from a quick and dirty script that suited your own purposes to turning it into a niche open source project that was general and stable enough for the broader community?
  • One of your claims to fame is your role as the maintainer for coverage.py. How has your experience managing such a widely used project translated to the relatively small and low traffic project like Cog?
  • Can you describe how Cog is implemented?
    • How did you approach the design of the syntactic elements for embedding Python code into a host file?
  • What is the workflow for someone using Cog to generate all or parts of a file?
    • How does the introduction of third party dependencies impact the viability and utility of Cog as compared to other templating systems?
  • What are the most interesting, innovative, or unexpected ways that you have seen Cog used?
  • What are the most interesting, unexpected, or challenging lessons that you have learned while working on Cog?
  • When is Cog the wrong choice?
  • What do you have planned for the future of Cog?
Keep In Touch Picks Closing Announcements
  • Thank you for listening! Don’t forget to check out our other show, the Data Engineering Podcast for the latest on modern data management.
  • Visit the site to subscribe to the show, sign up for the mailing list, and read the show notes.
  • If you’ve learned something or tried out a project from the show then tell us about it! Email hosts@podcastinit.com) with your story.
  • To help other people find the show please leave a review on iTunes and tell your friends and co-workers

The intro and outro music is from Requiem for a Fish The Freak Fandango Orchestra / CC BY-SA

Categories: FLOSS Project Planets

Community Working Group posts: Nominations are now open for the 2022 Aaron Winborn Award

Planet Drupal - Thu, 2022-01-13 18:01

The Drupal Community Working Group is pleased to announce that nominations for the 2022 Aaron Winborn Award are now open. 

This annual award recognizes an individual who demonstrates personal integrity, kindness, and above-and-beyond commitment to the Drupal community. It includes a scholarship and travel stipend for the winner to attend DrupalCon North America and recognition in a plenary session at the event.

Nominations are open to all Drupal community members*, including but not limited to people who have made a big impact in their local or regional community. If you know of someone who has made a big difference to any number of people in our community, we want to hear about it. 

This award was created in honor of long-time Drupal contributor Aaron Winborn, whose battle with Amyotrophic lateral sclerosis, or  ALS (also referred to as Lou Gehrig's Disease)  came to an end on March 24, 2015. Based on a suggestion by Hans Riemenschneider, the Community Working Group, with the support of the Drupal Association, launched the Aaron Winborn Award.

Nominations are open until Friday, March 25, 2022. A committee consisting of the Community Working Group members (Conflict Resolution Team) as well as past award winners will select a winner from the nominations. 
* Current members of the CWG Conflict Resolution Team and previous winners are not eligible for winning the award.

Previous winners of the award are:

2015: Cathy Theys 
2016: Gábor Hojtsy 
2017: Nikki Stevens  
2018: Kevin Thull 
2019: Leslie Glynn  
2020: Baddý Breidert
2021: AmyJune Hineline 

Now is your chance to show, support and recognise an amazing community member!

If you know someone amazing who should benefit from this award please submit a nomination.

Categories: FLOSS Project Planets

Kay Hayen: First Nuitka Live Stream

Planet Python - Thu, 2022-01-13 18:00

Tomorrow, Saturday 15.01.2022, there will be not one, but two live stream of me coding on Nuitka, and talking and chatting with visitors in the Discord channel created specifically for this. I will go from 9-12 CEST and from 17-20 CEST.

There is a dedicated page on the web site which has the details. Spoiler, it’s free and I have no plans for anything that involves a subscription of any kind. Of course, talking of subscription, do also checkout the Nuitka commercial offering. That is a subscription with adds that protect your IP even more than regular Nuitka.

I want to do this on a regular basis, and I will be happy to do this even when nearly nobody shows up. It will be however your chance, and in previous GSoC and generally, I made very good experiences with joint sessions. So I hope you will help me pasting code snippets and Google results in chat, and discuss the optimization that we are going to add.

Come and join me there. Instructions here. You know you want to do it. I know I want you to do to it!

Yours, Kay
Categories: FLOSS Project Planets

Year in Review: Calamares

Planet KDE - Thu, 2022-01-13 18:00

It’s the start of a new year, which means some retrospective – let’s look at what happened in Calamares in 2021. Calamares is an independent Linux system installer. Independent in the sense that it is developed outside of any specific distribution, but it supports Arch derivatives, Debian, Fedora derivatives, and openSUSE derivatives. KDE Neon and KaOS. Probably Gentoo and Slackware and Nix, also, although I haven’t heard of any. Some day it will install FreeBSD, as well.

Calamares was started in 2014, back then mostly by Teo, Anke, Aurélien, with a changing cast of characters. I can find over 100 different contributors in the git history.

Commit Stats

Not that commits are all that interesting, but:

  • 31 different contributors in 2021
  • 1200 commits during the year.

One of the things to conclude from that is “it’s not just me”, but there is an active community of contributors. If I had to characterize us all, I’d say that I’m the janitor, plugging away on internals and infrastructure and making sure the parts all play together, while other people contribute neat features and bugfixes.

I don’t anticipate what distro’s want; I do listen to what they ask for and try to build things that the distro’s can then innovate with.


Calamares releases on a short-cycle. That is, roughly every two weeks there is a release regardless of what has landed. I wrote about the development process on the Calamares site a while back, but I realise I didn’t particularly write down what the development cadence is.

  • git alligator branches,
  • it’s always summer in trunk (well, in branch calamares which is the primary development branch),
  • automated releases by script, whenever I press the button.

Basically every two weeks I run RELEASE.sh and the things happen. All I need to do then is upload a tarball. These regular releases mean that new things arrive relatively quickly, and we don’t end up bogged down by long-slow-moving-branches that tackle difficult bugs. It also means that a particular bug might be serious, and still not fixed over several releases because it doesn’t land until it’s fixed in some issue-branch.

There were 22 releases of Calamares in 2021. And one release of Calamares-Extensions. That’s roughly every two weeks, allowing for some summer vacation and the like. Sometimes hotfixes happenend: only days between releases. Sometimes things were slow, or unintentionally bogged down: may and june saw no releases at all.


Notable new names in the community are Evan, who has recently submitted lots of new feature work around ZFS, followed by bugfixing all over, Artem who shows up with interesting UI improvements, and Matti who wrote BTRFS things. Anke continues to be a prolific bug-fixer and chaser-of-reported-issues.

In May there was some shake-up in the community as the communications-channels moved from one IRC network to another, and then primarily to Matrix. Thanks to KDE community supervision, there’s pretty good bridging between the Libera.chat IRC and the Matrix channels for Calamares. A couple of have-been-idling-forever accounts went away, but the discussion is still going on (slowly: really most of what needs to be said happens in issues and pull requests).

For 2022

Let’s keep doing the thing.

For releases and versioning, there is a rough plan as follows:

  • the 3.2 series (now at 3.2.50) is going to come to an end,
  • a 3.3 series will be released as an LTS version,
    • this will bump the requirements for Calamares from 2014-era to 2022-era
    • ABI stability checking
    • bugfix-only releases
  • a 3.4 series will follow the same style as 3.2 did: short-cycle

The big-ticket item before 3.3 is really one of cleaning up the internals of libcalamares so that it “feels right” to have it as an LTS. I do not have a handle yet on how long it will take for that stability to be reached.

Categories: FLOSS Project Planets

Will Kahn-Greene: Everett v3.0.0 released!

Planet Python - Thu, 2022-01-13 13:30
What is it?

Everett is a configuration library for Python apps.

Goals of Everett:

  1. flexible configuration from multiple configured environments

  2. easy testing with configuration

  3. easy automated documentation of configuration for users

From that, Everett has the following features:

  • is flexible for your configuration environment needs and supports process environment, env files, dicts, INI files, YAML files, and writing your own configuration environments

  • facilitates helpful error messages for users trying to configure your software

  • has a Sphinx extension for documenting configuration including autocomponentconfig and automoduleconfig directives for automatically generating configuration documentation

  • facilitates testing of configuration values

  • supports parsing values of a variety of types like bool, int, lists of things, classes, and others and lets you write your own parsers

  • supports key namespaces

  • supports component architectures

  • works with whatever you’re writing–command line tools, web sites, system daemons, etc

v3.0.0 released!

This is a major release that sports three things:

  • Adjustments in Python support.

    Everett 3.0.0 drops support for Python 3.6 and picks up support for Python 3.10.

  • Reworked namespaces so they work better with Everett components.

    Previously, you couldn't apply a namespace after binding the configuration to a component. Now you can.

    This handles situations like this component:

    class MyComponent: class Config: http_host = Option(default="localhost") http_port = Option(default="8000", parser=int) db_host = Option(default="localhost") db_port = Option(default="5432", parser=int) config = ConfigManager.basic_config() # Bind the configuration to a specific component so you can only use # options defined in that component component_config = config.with_options(MyComponent) # Apply a namespace which acts as a prefix for options defined in # the component http_config = component_config.with_namespace("http") db_config = component_config.with_namespace("db")
  • Overhauled Sphinx extension.

    This is the new thing that I'm most excited about. This fixes a lot of my problems with documenting configuration.

    Everett now lets you:

    • document options and components:

      Example option:

      .. everett:option:: SOME_OPTION :parser: int :default: "5" Here's some option.

      Example component:

      .. everett:component:: SOME_COMPONENT .. rubric:: Options .. everett:option:: SOME_OPTION :parser: int :default: "5" Here's some option.
    • autodocument all the options defined in a Python class

      Example autocomponentconfig:

      .. autocomponentconfig:: myproject.module.MyComponent :show-table: :case: upper
    • autodocument all the options defined in a Python module

      Example automoduleconfig:

      .. automoduleconfig:: mydjangoproject.settings._config :hide-name: :show-table: :case: upper

    This works much better with configuration in Django settings modules. This works with component architectures. This works with centrally defining configuration with a configuration class.

    Further, all options and components are added to the index, have unique links, and are easier to link to in your documentation.

    I updated the Antenna (Mozilla crash ingestion collector) docs:


    I updated the Eliot (Mozilla Symbolication Service) docs:


Why you should take a look at Everett

Everett makes it easy to:

  1. deal with different configurations between local development and server environments

  2. write tests for configuration values

  3. document configuration

  4. debug configuration issues

First-class docs. First-class configuration error help. First-class testing. This is why I created Everett.

If this sounds useful to you, take it for a spin. It's almost a drop-in replacement for python-decouple and os.environ.get('CONFIGVAR', 'default_value') style of configuration so it's easy to test out.

Where to go for more

For more specifics on this release, see here: https://everett.readthedocs.io/en/latest/history.html#january-13th-2022

Documentation and quickstart here: https://everett.readthedocs.io/

Source code and issue tracker here: https://github.com/willkg/everett

Categories: FLOSS Project Planets

Bits from Debian: New Debian Developers and Maintainers (November and December 2021)

Planet Debian - Thu, 2022-01-13 11:00

The following contributors got their Debian Developer accounts in the last two months:

  • Douglas Andrew Torrance (dtorrance)
  • Mark Lee Garrett (lee)

The following contributors were added as Debian Maintainers in the last two months:

  • Lukas Matthias Märdian
  • Paulo Roberto Alves de Oliveira
  • Sergio Almeida Cipriano Junior
  • Julien Lamy
  • Kristian Nielsen
  • Jeremy Paul Arnold Sowden
  • Jussi Tapio Pakkanen
  • Marius Gripsgard
  • Martin Budaj
  • Peymaneh
  • Tommi Petteri Höynälänmaa


Categories: FLOSS Project Planets

Python for Beginners: Detect Cycle in an Undirected Graph

Planet Python - Thu, 2022-01-13 09:00

Graph traversal algorithms are used to perform various operations on a graph data structure. In this article, we will use the breadth-first graph traversal algorithm to detect cycle in an undirected graph.

What is a cycle in a graph?

We say that a cycle is present in a graph if we can reach the same place after starting from a vertex and traversing one or more edges only once. In other words,if we can start from a vertex and reach the same vertex after traversing one or more edges only once, then we say that a cycle is present in the graph.

For example, consider the following graph.

Graph in Python

In this graph, we can start from vertex A and reach the same vertex after traversing through the edges E2->E5->E4. So, we will say that there is a cycle present in the graph.

We can also start from vertex B and follow the path E2-E4-E5 to reach vertex B. Hence, we will again find that there is a cycle present in the graph. Here, you can see that we have considered each edge only once while traversing a path.

On the contrary, consider the following graph.

Acyclic Graph

Here, we cannot reach the same vertex after starting from a vertex without repeating any edge. So, we will say that the graph doesn’t contain any cycle. 

Algorithm to detect cycle in an undirected graph

As we now have an overview of what a cycle is, Let us formulate an algorithm to detect a cycle in an undirected graph. For this, we will start from the source vertex and will traverse the graph using the breadth-first search algorithm. During traversal, if we find a vertex that has already been traversed, we will say that there is a cycle present in the graph. 

The algorithm to detect cycles in an undirected graph can be formulated as follows.  

  1. Create an empty Queue Q. 
  2. Create a list visited_vertices to keep track of visited vertices.
  3. Insert source vertex into Q and visited_vertices.
  4. If Q is empty, go to 10. Else goto 5.
  5. Take out a vertex v from Q.
  6. If any neighbor of v is already present in the visited_vertices, goto 7. Else, goto 8.
  7. Print that cycle is present in the graph. Goto 11.
  8. Insert the unvisited neighbors to  Q and visited_vertices.
  9. Go to 5.
  10. Print that there is no cycle in the graph.
  11. Stop.
Python Program to detect cycle in an undirected graph

As we have formulated the algorithm to detect cycle in an undirected graph, let us implement it in python and execute it for the graphs given in the images in the previous sections.



In this article, we have discussed the algorithm to detect cycle in an undirected graph.  Here, we have used the breadth-first graph traversal algorithm.  To read about binary tree traversal algorithms, you can read the Inorder tree traversal algorithm or level order tree traversal algorithm.

The post Detect Cycle in an Undirected Graph appeared first on PythonForBeginners.com.

Categories: FLOSS Project Planets

Jaime Buelta: “Python Architecture Patterns” now available!

Planet Python - Thu, 2022-01-13 05:08
My new book is available! Current software systems can be extremely big and complex, and Software Architecture deals with the design and tweaking of fundamental structures that shape the big picture of those systems.The book talks about in greater detail about what Software Architecture is, what are its challenges and describes different architecture patterns that can be used when dealing with complex systems. All to create an “Architectural View” and grow the knowledge on how to deal with big software systems.All the examples in the book are written in Python, but most... Read More
Categories: FLOSS Project Planets

Python Bytes: #266 Python has a glossary?

Planet Python - Thu, 2022-01-13 03:00
<p><strong>Watch the live stream:</strong></p> <a href='https://www.youtube.com/watch?v=tS8ZsH2WOnk' style='font-weight: bold;'>Watch on YouTube</a><br> <br> <p><strong>About the show</strong></p> <p>Sponsored by Datadog: <a href="http://pythonbytes.fm/datadog"><strong>pythonbytes.fm/datadog</strong></a></p> <p><strong>Brian #1:</strong> <strong>Python</strong> <a href="https://docs.python.org/3/glossary.html"><strong>glossary</strong></a> <strong>and</strong> <a href="https://docs.python.org/3/faq/"><strong>FAQ</strong></a></p> <ul> <li>Inspired by a tweet by Trey Hunner that referenced the glossary</li> <li><a href="https://docs.python.org/3/glossary.html">glossary</a> <ul> <li>All the Python and programming terms in one place</li> <li>Often refers to other parts of the documentation.</li> <li>Forget what an “abstract base class” is? <a href="https://docs.python.org/3/glossary.html#term-abstract-base-class">Just look it up</a> </li> </ul></li> <li><a href="https://docs.python.org/3/faq/">FAQ</a> <ul> <li>Has sections on <ul> <li><a href="https://docs.python.org/3/faq/general.html">General Python</a></li> <li><a href="https://docs.python.org/3/faq/programming.html">Programming</a></li> <li><a href="https://docs.python.org/3/faq/design.html">Design and History</a></li> <li><a href="https://docs.python.org/3/faq/library.html">Library and Extension</a></li> <li><a href="https://docs.python.org/3/faq/extending.html">Extending/Embedding</a></li> <li><a href="https://docs.python.org/3/faq/windows.html">Python on Windows</a></li> <li><a href="https://docs.python.org/3/faq/gui.html">Graphic User Interface</a></li> <li><a href="https://docs.python.org/3/faq/installed.html">“Why is Python Installed on my Computer?”</a></li> </ul></li> <li>Some decent reading here, actually.</li> <li>Example <ul> <li><a href="https://docs.python.org/3/faq/programming.html#id15">What is the difference between arguments and parameters?</a> - that’s under Programming</li> </ul></li> </ul></li> </ul> <p><strong>Michael #2:</strong> <a href="https://anyio.readthedocs.io/en/stable/basics.html"><strong>Any.io</strong></a></p> <ul> <li>Learned about it via <a href="https://github.com/tiangolo/asyncer">asyncer</a></li> <li>AnyIO is an asynchronous networking and concurrency library that works on top of either <a href="https://docs.python.org/3/library/asyncio.html">asyncio</a> or <a href="https://github.com/python-trio/trio">trio</a>. </li> <li>It implements trio-like <a href="https://en.wikipedia.org/wiki/Structured_concurrency">structured concurrency</a> (SC) on top of asyncio</li> <li>Works in harmony with the native SC of trio itself</li> <li>Check out <a href="https://anyio.readthedocs.io/en/stable/index.html#features">the features</a></li> <li>AnyIO also comes with its own <a href="https://docs.pytest.org/en/latest/">pytest</a> plugin which also supports asynchronous fixtures.</li> </ul> <p><strong>Brian #3:</strong> <a href="https://github.com/vaexio/vaex"><strong>Vaex</strong></a> <a href="https://github.com/vaexio/vaex"><strong>:</strong></a> <a href="https://github.com/vaexio/vaex"><strong>a high performance Python library for lazy Out-of-Core DataFrames</strong></a></p> <ul> <li>suggested by Glen Ferguson</li> <li>“Vaex is a python library for lazy <strong>Out-of-Core DataFrames</strong> (similar to Pandas), to visualize and explore big tabular datasets.”</li> <li>out-of-core: “The term <em>out-of-core</em> typically refers to processing data that is too large to fit into a computer’s main memory.” - from <a href="https://machinelearning.wtf/terms/out-of-core/">machinelearning.wtf</a>, a Machine Learning Glossary site. <ul> <li>nice tie in, right?</li> </ul></li> <li>Vaex uses memory mapping, a zero memory copy policy, and lazy computations.</li> <li>There’s a great intro in the form of a presentation from <a href="https://www.youtube.com/watch?v=ELtjRdPT8is">SciPy 2019</a></li> </ul> <p><strong>Michael #4:</strong> <a href="https://lp.jetbrains.com/django-developer-survey-2021-486/"><strong>Django Community Survey Results</strong></a></p> <ul> <li>Only 15% of Django developers use it ONLY for work, while two thirds use it both for work and for personal, educational, or side projects.</li> <li>Majority use latest Django</li> <li>Most devs upgrade every stable release</li> <li>Postgres is the primary DB (MongoDB is nowhere in sight)</li> <li>Most sites have Redis caching tiers</li> </ul> <p><strong>Michael #5: Extra, Extra, Extra, Extra:</strong></p> <ul> <li><a href="https://www.djangoproject.com/weblog/2022/jan/04/security-releases/">Django security releases issued: 4.0.1, 3.2.11, and 2.2.26</a></li> <li><a href="https://talkpython.fm/sphinx">Static Sites with Sphinx and Markdown</a> course by Paul Everitt is now out</li> <li><a href="https://www.caldigit.com/thunderbolt-4-element-hub/">CalDigit Thunderbolt 4 Element Hub</a> review (more info <a href="https://www.youtube.com/watch?v=OEhnTed0MSk">Video by Doc Rock</a>, get it on <a href="https://amzn.to/34wpvUx">Amazon here</a>)</li> <li><a href="https://twitter.com/mkennedy/status/1479523408064909312">StreamDeck setup</a> for our live streams</li> <li><a href="http://">Michael’s PyBay HTMX talk</a> is up</li> <li><a href="https://2022.pythonwebconf.com/">Python Web Conf 2022</a> - I’ll be speaking there and we’re media sponsors of the conference so use code <strong>PythonBytes@PWC2022</strong> for 15% off, March 21-25.</li> <li><a href="https://2022.pycascades.com/">PyCascades 2022</a> is also happening soon, February 5th-6th, 2022</li> </ul> <p><strong>Joke:</strong> </p> <p><img src="https://paper-attachments.dropbox.com/s_67096A17659F83D1A0CAC669BBCB58FEC5006BC10F41A506FBC5F05857E4E9C9_1641757150692_Screen_Shot_2021-11-07_at_8.15.29_AM.png" alt="" /></p>
Categories: FLOSS Project Planets

Python⇒Speed: Memory location matters for performance

Planet Python - Wed, 2022-01-12 19:00

If you’re writing high-performance code, what matters is how many CPU instructions you run. Right?

That’s what I learned long ago in school, anyway, when I took algorithms and data structures classes. The basic assumption was that reading or writing to memory took a small, constant amount of time, and so you could focus on how many operations were being done. This was so fundamental to how we were taught that we didn’t even have to write real code: pseudo-code was sufficient.

Unfortunately, this is not how a CPU works in the real world.

In the real world, access to memory is vastly slower than CPU instructions, and all those O(N) measurements that just focus on CPU operations are insufficient to tell you what real-world performance will be. And that means you need to think about not just your computation, but also how you access memory.

Categories: FLOSS Project Planets

Plasma 5.24 Beta

Planet KDE - Wed, 2022-01-12 19:00

Thursday, 13 January 2022

As is traditional, today we are bringing you the testing version of KDE’s Plasma 5.24. Plasma 5.24 Beta is aimed at testers, developers, and bug-hunters.

To help KDE developers iron out bugs and solve issues, install Plasma 5.24 Beta and test run the features listed below. Please report bugs to our bug tracker.

The final version of Plasma 5.24 will become available for the general public on the 8th of February.

DISCLAIMER: This release contains untested and unstable software. Do not use in a production environment and do not use as your daily work environment. You risk crashes and loss of data.


We made several improvements to the Breeze theme to make Plasma even more pleasant to use:

  • Folders now respect your accent color or the color scheme’s “Selection” color: LINK
  • The focus effect for buttons, text fields, checkboxes, radio buttons, comboboxes, and spinboxes has been enlarged into a “focus ring” that should be much easier to visually distinguish at a glance: LINK
  • The Breeze color scheme has been renamed to “Breeze Classic”, to better distinguish it from the Breeze Light and Breeze Dark color schemes: LINK
  • The “Breeze High Contrast” color scheme has been deleted, as it actually offered lower contrast than the very similar-looking Breeze Dark. Existing users will be migrated to Breeze Dark: LINK

  • Critical notifications now have a little orange strip on the side to visually distinguish them from background clutter and help them stand out so that you will be more likely to notice them: LINK
  • Header and title text in notifications received better contrast and visibility: LINK
  • Notifications about video files now display a thumbnail in the notification, just like for image files: LINK
  • When sending or receiving files via Bluetooth, a system notification is now always shown: LINK
  • The “Annotate” button that appears in screenshot notifications has been moved to the same row as the hamburger menu button: LINK
System Tray and Widgets

  • The “Plasma Pass” password manager has a modernized design: LINK
  • Scrollable areas in the system tray now use a more consistent style: LINK
  • The Weather widget prompts you to configure it when first added and automatically searches through all available weather sources: LINK/LINK
  • We have added a “Date always below time” option for the Digital Clock to complement its “Date always beside time” and “Automatic” options: LINK
  • Battery & Brightness has had its user interface for blocking sleep and screen locking improved again for more clarity: LINK
  • Clipboard and Network management are now fully keyboard navigable: LINK
  • You now have the option to see network speeds in bits per second: LINK
  • The Kickoff Application Launcher’s sidebar no longer shows arrows, to be consistent with how sidebars are typically presented elsewhere: LINK
  • Battery and Brightness now turns into just Brightness controls on computers with no batteries: LINK
  • The Free Space Notifier no longer pointlessly monitors read-only volumes: LINK
  • The Audio Volume’s sliders highlight the part before the slider: LINK
  • Bluetooth calls a phone a phone: LINK
  • The Media Player correctly shows “nothing playing” when the last playing app is closed: LINK
Desktop and Panel
  • It is now possible to set your wallpaper using the context menu of any image: LINK
  • You can now drag a panel from anywhere on its Edit Mode toolbar, not just from a tiny button, with a label making this even more obvious: LINK
  • Users of the “Picture of the Day” wallpaper plugin can now pull images from http://simonstalenhag.se which is full of cool and creepy sci-fi images: LINK
  • There is a new “Configure Display Settings” item in the Desktop’s context menu and Edit Mode toolbar, replacing the “Open in Dolphin” item by default: LINK/LINK
  • Those of you who like really huge icons can now make your desktop icons twice as large as the previous maximum size: LINK
  • The previews in the wallpaper chooser now respect your aspect ratio: LINK
  • When you drag-and-drop widgets, they now smoothly animate moving to their final position rather than instantly teleporting there: LINK
Task Manager
  • It is now possible to reverse the alignment of tasks, which can be useful for example for having a Task Manager next to a Global Menu: LINK
  • Tasks have a new “Move to Activity” context menu item: LINK
  • Task Manager tooltips for windows that are playing audio now show a volume slider under the playback controls: LINK
  • The “Start New Instance” context item has been renamed to “Open New Window” for clarity and no longer appears for apps marked as having a single main window or that already provide a “New Window” action of their own: LINK
  • The “More Actions” item in the context menu has been moved to the bottom and renamed to just “More”: LINK
  • Tooltips for large number of open windows for the same app are now significantly faster to load and much more responsive: LINK
  • There is a new inline help feature, shown by clicking on the question mark icon on its toolbar or typing “?”. While in Help mode, clicking a particular plugin will show you all the different search syntaxes for it: LINK
System Settings
  • The very minimal contents of System Settings’ own settings window have been moved into its hamburger menu for easier access: LINK
  • You can now pick your own custom accent color on the Colors page: LINK
  • System Settings pages that have a single big grid or list now use a more modern frameless style: LINK
  • The Formats page has been rewritten in QtQuick, which also improves the UI and prepares it for a future merge with the Languages page: LINK
  • The Keyboard page now respects the “Show Changed Settings” feature and supports more than 8 spare layouts. Also, the “add a keyboard layout” dialog has been redesigned for simplicity and ease of use: LINK/LINK/LINK
  • Night Color also now supports “Highlight Changed Settings”: LINK
  • The battery charge limit feature gained support for more than one battery: LINK
  • The speaker test sheet in System Settings’ Audio page has a better look: LINK
  • Display & Monitor shows the scale factor used for each screen as well as the proper physical resolution: LINK/LINK
  • Even when your language is not set to English, the System Settings' search field will still find results for English words: LINK
  • When you enable auto-login, you are now warned about some changes you might want to make to your KWallet setup: LINK
  • A new button on the “About this System” page lets you quickly access the Info Center: LINK
Window Management
  • The new Overview effect, toggled with Meta+W, has a blurred background by default, lets you control your Virtual Desktops and find search results from KRunner all in one place: LINK/LINK
  • KWin lets you optionally set a keyboard shortcut to move a window to the center of the screen, which is also where they now appear by default: LINK/LINK
  • Windows now remember the screens they were on when those screens are turned off or unplugged, fixing many multi-monitor annoyances: LINK
  • The “scale” effect is now used by default when opening and closing windows, instead of “fade”: LINK
  • The “Cover Switch” and “Flip Switch” effects are back, rewritten in QtQuick for easier extensibility in the future: LINK
  • Fixed a major performance issue in QtQuick-based effects for NVIDIA GPU users: LINK
  • Added the option to automatically reboot after an update is complete: LINK
  • Discover now switches its home page to a two-column card view when the window is very wide and a bottom tab bar in narrow/mobile mode: LINK/LINK
  • The Update page is now less overwhelming by only showing progress bars for in-progress items and having a nicer design to select updates. Additionally, it tells you the source of the updates: LINK/LINK/LINK/LINK
  • A new “Report this issue” button takes you straight to your distribution’s bug tracker: LINK
  • The search tries to help users if they know an app exists but nothing is found and stops searching automatically if nothing is found after some time: LINK/LINK
  • You can now easily manage repositories for Flatpak and your distribution: LINK/LINK
  • Locally downloaded Flatpak apps can now be opened and installed, adding their repository automatically to your system: LINK
  • Application list items now have a more attractive and logical layout: LINK
  • A new safety feature prevents you from accidentally uninstalling Plasma: LINK
  • Checking for updates is much faster and installation error messages are more user-friendly: LINK/LINK/LINK
Login/Lock Screen
  • Fingerprint support has been added, letting you enroll and de-enroll fingers. Any of those fingers can be used to unlock the screen, provide authentication when an app asks for your password, and also authenticate sudo on the command line: LINK
  • The Lock screen now lets you Sleep and Hibernate (if supported): LINK
  • Colors greater than 8-bit are now supported: LINK
  • There is a new drawing tablet page in System Settings: LINK
  • “DRM leasing” support has been added, which allows us to re-add support for VR headsets with optimal performance: LINK
  • Spectacle finally has access to the “Active Window” mode on Wayland: LINK
  • We added the concept of the “primary monitor”, which works like in the X11 session: LINK
  • The “Minimize All Windows” widget now has Wayland support: LINK
  • The virtual keyboard now only appears when you explicitly focus a text-based UI control with a touch or stylus poke: LINK
  • When using a stylus, it is now possible to activate other windows from their titlebars and also just interact with more with titlebars in general: LINK
  • Restoring a minimized or maximized window now switches to the virtual desktop that the window was on before restoring it, instead of restoring it to the current virtual desktop: LINK
  • You can now use the default Meta+Tab shortcut to cycle through more than two activities at a time: LINK
  • The System Tray item for showing and hiding the virtual keyboard becomes active only in tablet mode: LINK
General Behavior
  • It is now possible for Global Themes to specify and change Latte Dock layouts: LINK
  • Changing the color scheme now toggles the standardized FreeDesktop light/dark color scheme preference, so third-party apps that respect this preference will be able to automatically switch to light or dark mode based on your chosen color scheme: LINK
  • Kate has been replaced with KWrite in the default set of favorite apps, since it is a bit more user-friendly and less programmer-centric: LINK
  • The odd behavior of middle-clicking on a panel to create a sticky note has been disabled: LINK
  • The screen layout OSD now indicates screens’ scale factors in it: LINK
  • Scrollable controls in Plasma and other QtQuick-based apps now only change their contents when you start scrolling on them, preventing you from accidentally changing things while scrolling the view: LINK
  • Plasma now shuts down faster by no longer accepting new connections after it has begun the shutdown process, which particularly helps when using KDE Connect: LINK

If you would like to learn more, check out the full changelog for Plasma 5.24 Beta.

Categories: FLOSS Project Planets

Open@RIT: Helping Students Embrace the Power of Open Source

Open Source Initiative - Wed, 2022-01-12 14:30

Creative, exciting applications of open source software can be found worldwide, and who better to share the details of new use cases than the practitioners themselves. In this blog series we’ll feature guests who told their open source stories during Practical Open Source Information (POSI) 2021, an online conference hosted by OSI. Five blogs will be featured in this series, so visit the OSI blog frequently to learn from what these open source advocates have to share.

Creative, exciting applications of open source software can be found worldwide, and who better to share the details of new use cases than the practitioners themselves. In this blog series we’ll feature guests who told their open source stories during Practical Open Source Information (POSI) 2021, an online conference hosted by OSI.

The Rochester Institute of Technology (RIT) not only offers a minor in free and open source software and free culture, but it also recently created an official Center of Excellence called Open@RIT. It’s dedicated to fostering the collaborative engine for faculty, staff, and students working on open source projects. The goal is to discover and grow the footprint of RIT’s impact on all things open across many disciplines, both within the university and beyond. This includes open source software, open data, open science, open hardware, and open educational resources and creative commons licensed efforts, which collectively they refer to as Open Work.

Mike Nolan, Assistant Director at Open@RIT and Django Skorupa, Strategic Designer, walked POSI participants through their work, and you can watch their presentation, the video of which is embedded at the end of this post.

Through their Open@RIT Fellowships, students interested in careers working with open source have the opportunity to serve on a project accelerator, offering them exposure to the launch or conversion of projects to open source. Open@RIT Fellows can begin building a community around and collaborating on on-campus projects to get first-hand experience in the maintenance and structure of the community, an important facet of open projects that balances the contribution of community members. Essentially, Open@RIT is a cooperative education program set up as a consultancy where student fellows are placed on a team that provides services such as design, development, technical writing, and project management on Open Work being developed by members of the RIT community.

In its early days, the program focused on the creation of a methodology playbook detailing how Fellows work with faculty members, staff, and students on their open projects and how they create, build, and sustain communities around that work. This methodology playbook offers a framework for fellows to follow in their efforts to better understand and support the community that surrounds the Open Work. Leaders at Open@RIT give credit to the Mozilla Open Leadership Training Series and the work of Nadia Eghbal in her book Working in Public for inspiring their program and the development of the methodology.

The consulting process used by Open@RIT with Fellows has three steps. Step one is contextualization, asking questions that allow student fellows to understand the scope and goals of the project. Step two is identification of stakeholders and contributors and how they’re attracted to a project, examined through an archetypal model. Here, goals of the stakeholders and contributors are compared with the goals of the project, revealing gaps in the contributor pathways. This naturally leads to step three which is identifying shortcomings. This step uncovers the role Open@RIT can play in support of the project, moving it toward a unified goal. This step develops a ground-up solution, reframing the problem as many times as necessary until an end-to-end pathway is established. Services provided by the fellows include project documentation, marketing inbound materials, feedback systems, and outreach and networking strategies.

Many Open@RIT Fellows have never worked in open source before. The program offers them a valuable opportunity to learn about open source terms and methods while actually doing the work. Developing open source projects in an academic setting offers students an ecosystem that embraces questioning, teaching, and mentorship, which aligns with the definition of open source itself and equips these students to step into careers in open source with experience that sets them up for success.

Watch Nolan and Django of Open@RIT at the POSI event:

<iframe width="560" height="315" src="https://www.youtube.com/embed/2uxk3X8EVow" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

Come back to catch our next featured member from the Practical Open Source Information (POSI) 2021 next week.

if(window.strchfSettings === undefined) window.strchfSettings = {};window.strchfSettings.stats = {url: "https://open-source-initiative.storychief.io/openatrit-helping-students-embrace-the-power-of-open-source?id=554878812&type=3",title: "Open@RIT: Helping Students Embrace the Power of Open Source",id: "d41e8c3e-e034-48f3-84d1-20372c1b1028"};(function(d, s, id) {var js, sjs = d.getElementsByTagName(s)[0];if (d.getElementById(id)) {window.strchf.update(); return;}js = d.createElement(s); js.id = id;js.src = "https://d37oebn0w9ir6a.cloudfront.net/scripts/v0/strchf.js";js.async = true;sjs.parentNode.insertBefore(js, sjs);}(document, 'script', 'storychief-jssdk'))
Categories: FLOSS Research

Michael Prokop: Revisiting 2021

Planet Debian - Wed, 2022-01-12 12:30

Uhm yeah, so this shirt didn’t age well. :) Mainly to recall what happened, I’m once again revisiting my previous year (previous edition: 2020).

2021 was quite challenging overall. It started with four weeks of distance learning at school. Luckily at least at school things got back to "some kind of normal" afterwards. The lockdowns turned out to be an excellent opportunity for practising Geocaching though, and that’s what I started to do with my family. It’s a great way to grab some fresh air, get to know new areas, and spend time with family and friends – I plan to continue doing this. :)

We bought a family season ticket for Freibäder (open-air baths) in Graz; this turned out to be a great investment – I enjoyed the open air swimming with family, as well as going for swimming laps on my own very much, and plan to do the same in 2022. Due to the lockdowns and the pandemics, the weekly Badminton sessions sadly didn’t really take place, so I pushed towards the above-mentioned outdoor swimming and also some running; with my family we managed to do some cycling, inline skating and even practiced some boulder climbing.

For obvious reasons plenty of concerts I was looking forward didn’t take place. With my parents we at least managed to attend a concert performance of Puccinis Tosca with Jonas Kaufmann at Schloßbergbühne Kasematten/Graz, and with the kids we saw "Robin Hood" in Oper Graz and "Pippi Langstrumpf" at Studiobühne of Oper Graz. The lack of concerts and rehearsals once again and still severely impacts my playing the drums, including at HTU BigBand Graz. :-/

Grml-wise we managed to publish release 2021.07, codename JauKerl. Debian-wise we got version 11 AKA bullseye released as new stable release in August.

For 2021 I planned to and also managed to minimize buying (new) physical stuff, except for books and other reading stuff. Speaking of reading, 2021 was nice — I managed to finish more than 100 books (see “Mein Lesejahr 2021“), and I’d like to keep the reading pace.

Now let’s hope for better times in 2022!

Categories: FLOSS Project Planets

Steinar H. Gunderson: Training apps

Planet Debian - Wed, 2022-01-12 12:27

I've been using various training apps (and their associated web sites) since 2010 now, forward-porting data to give me twelve years of logs. (My primary migration path has been CardioTrianer → Endomondo → Strava.) However, it strikes me that they're just becoming worse and worse, and I think I've figured out why: What I want is a training site with some social functions, but what companies are creating are social networks. Not social networks about training; just social networks.

To be a bit more concrete: I want something that's essentially a database. I want to quickly search for workouts in a given area and of a given length, and then bring up key information, compare, contrast, get proper graphs (not something where you can't see the difference between 3:00/km and 4:00/km!), and so on. (There's a long, long list of features and bugs I'd like to get fixed, but I won't list them all.)

But Strava is laser-focused on what's happened recently; there's a stream with my own workouts and my friends', just like a social network, and that's pretty much the main focus (and they have not even tried to solve the stream problem; if I have a friend that's too active, I don't see anything else). I'd need to pay a very steep price (roughly $110/year, the same price of a used GPS watch!) to even get a calendar; without that, I need to go back through a super-slow pagination UI 20 and 20 workouts at a time to even see something older.

Garmin Connect is somewhat better here; at least I can query on length and such. (Not so strange; Garmin is in the business of selling devices, not making social networks.) But it's very oriented around one specific watch brand, and it's far from perfect either. My big issue is that nobody's even trying, it seems. But I guess there's simply no money in that.

Categories: FLOSS Project Planets

Bounteous.com: Planning Your Drupal 7 to Drupal 9 Migration

Planet Drupal - Wed, 2022-01-12 11:38
With Drupal 7 support ending in late 2022, it's time to plan your next steps! Here are key considerations as you prepare to upgrade to Drupal 9.
Categories: FLOSS Project Planets

BADCamp News: Sun, Fun & Drupal: Florida DrupalCamp Returns In Person and a few words about SFDUG

Planet Drupal - Wed, 2022-01-12 11:23
Sun, Fun & Drupal: Florida DrupalCamp Returns In Person and a few words about SFDUG Wed, 01/12/2022 - 12:00 volkswagenchick Wed, 01/12/2022 - 08:23 We have missed our Drupal friends immensely and really are excited that the Drupal Community is opening up again and having in-person events. Our friends at Florida DrupalCamp were the last to hold an in-person camp-event in North America in Feb 2020, and they are the first to reconvene in person. They will be meeting in person Feb 18-20 in sunny Orlando Florida. Several of our organizers, past attendees, and volunteers will be attending so we want to share some details from their organizers. Drupal Planet
Categories: FLOSS Project Planets

DevCollaborative - Planet Drupal: Enhance Your Drupal Website’s Authoring Experience Part 1 - Modernize the Admin Theme with Gin

Planet Drupal - Wed, 2022-01-12 11:01
Something as simple as switching the administrative theme can have a big impact on the usability of your website for sighted users, thanks to the law of the aesthetic-usability effect.
Categories: FLOSS Project Planets

Evolving Web: The Future of Web Content Publishing in the Canadian Government with Drupal WxT

Planet Drupal - Wed, 2022-01-12 10:16

Co-created with Nathan Vexler, Trainer at Evolving Web with 9 years of Government of Canada/Higher Education developer experience.

The Canada.ca domain is home to the subdomains and websites of hundreds of Canadian government departments and agencies. While each has its own function, they're all joined in their mission to inform and serve the people of Canada.

Despite this unity, these websites face major challenges in sharing information with the public:

  • Different information architecture and content types on each website results in a confusing user experience.
  • Siloed workflows slow down content publication and promotion.
  • Use of different content management systems hampers integration between websites and departments.
  • Lack of structured metadata makes content meaningless to other systems, resulting in missed opportunities to reach the public.
  • Ensuring that content is fully accessible and translated in both official languages.

Implementing a standardized content model and the methodical selection and configuration of a CMS can help overcome these issues. In a recent webinar, my fellow Drupalist Nathan Vexler and I looked at how Drupal—and the Drupal WxT distribution of Drupal in particular—is an ideal tool for Government of Canada websites. In this article, we'll present some takeaways from the webinar. If you prefer to watch the full video, you can access it here.

Leveraging Key Modern CMS Capabilities

Content creation and management practices vary across Government of Canada (GoC) departments and agencies. While some have implemented modern conventions like structured content, rich metadata, and efficient workflows, others are lagging.

Even where fully-featured CMSs are implemented, day-to-day publishing often relies on barebones practices, with copy-and-paste HTML blobs and manually-created teasers and snippets. This reality turns publishers into mere CMS gatekeepers and creates bottlenecks in the publishing process.

This doesn't work for end-users, either. Stretched content resources result in content publishing lags, uncorrected errors, and frustrating searches through inconsistent and often obsolete content. And department-by-department content models and presentation standards create a disjointed and disorienting experience for general audiences.

Alleviate Key Challenges with Modern Content Practices

Fortunately, modern content practices can alleviate some critical challenges in managing vast amounts of timely content across large organizations serving large and diverse audiences. Content management best practices include:

  • Efficient and effective workflows with smart permissions and automation reduce demands on stretched resources.
  • Structured content, automated listings, contextual presentation, and faceted searches allow end-users to find what they need.
  • Standardized content models allow end-users to have a cohesive and predictable experience and allow the implementation of modern service, search, and distribution tools.

Now comes the good part: many GoC sites are already on CMS platforms, such as Drupal, that have the tools to apply these practices.

Enter Drupal WxT: a Toolbox for GoC Websites

Drupal WxT is a distribution of Drupal, meaning that it's a version of Drupal which comes already configured with a few content types and views, mobile navigation, languages, a language switcher, and out-of-the-box responsiveness and accessibility. It relies on the Web Experience Toolkit/Boîte à outils de l'expérience Web (WET-BOEW), which conforms to WCAG guidelines and supports the implementation of the GCWeb theme standard.

Drupal offers full multilingual support, which is critical for GoC websites that need to be presented in English and French. The Drupal WxT distribution is already configured to manage content in both languages, and includes a theme that offers accessibility and responsive support. The distribution comes with a suite of optional extensions, and additional enhancements are available via Drupal's ecosystem of contributed modules. Drupal WxT is open source and free to any organization that wishes to use it. That said, some departments decide to selectively choose particular components (e.g. the theme) of the distribution to use.

While Drupal WxT provides some content structure, the number of content types it provides out-of-the-box is quite limited, meaning that individual sites then have to define their own content types.

📖 Download Now Our Free Drupal Accessibility Ebook!

Structured Content Unlocks the Benefits of the Modern CMS

One of Drupal's greatest strengths is its structured content. Custom content types with predefined fields allow publishers to create rich content and metadata. Rather than simply storing content as blobs of HTML, we can store individual fields that give us more control over the accessibility, formatting, and consistency of the content output. If we want to move past the limitations of unstructured content, we should change how we think about our content.

For example, if you're following a structured content methodology, Video content in Drupal isn't stored as a page with a video on it. Instead, we create a Video content type that defines its properties via specific fields. A Video content type definition might include:

  • Title
  • Release date
  • Video (remote link or local file)
  • Keyframe/thumbnail
  • Transcript
  • Description

A well-defined Video content type contains all the information needed for the individual Video display pages, the landing page teasers, promotional blocks, and other uses. When information on the Video node is updated, all the places where videos are displayed also automatically display the up-to-date information. Drupal uses the correct display settings according to the context. If we decide to change a setting in the display of the video player, we can do that across the website with one change to Drupal.

The power of content types is amplified by the core Views module. Views provides a user interface to define how lists of content should be presented and the criteria for what content they display. That may sound basic, but you can configure these lists at a very granular level based on fields, content relationships, and a broad selection of conditions to define when and how content should display.

Using tools like Content Types and Views to structure the storage and presentation of content transforms the whole content publishing process. Let's compare the two approaches:

Content stored in an HTML field

  • Only web publishers can enter content into CMS
  • Content entry requires knowing how to write HTML
  • Presentation is prone to inconsistency
  • Content is vaguely defined and difficult to search
  • Bottleneck: web publishers

Structured content using Content Types and Views

  • Anyone in the organization can enter content into the CMS
  • Forms make it easy for subject matter experts to enter content
  • Presentation standards are automatically enforced
  • Content is clearly defined, faceted, and searchable
  • Web publishers focus on auditing and managing content
Why Migrating to a Structured Content Model Is Worth the Effort

Given all the benefits, you might wonder why not all websites adopt a more structured content model. The answer often comes down to the amount of legacy content that so many GoC websites have to support. The fact is that migrating from free-form HTML blobs to more structured fields and metadata requires either time-consuming manual work or automation that requires technical expertise and careful planning and testing--or a combination of both. It also does more to disrupt the content editor experience, since it fundamentally transforms how content is managed.

However, migrating unstructured content to structured content also provides an opportunity for improvements. It's a chance to automate improvements to content accessibility and adherence to WxT, as well as the benefits of structured content listed above. These improvements go hand-in-hand with the content validation and control that structured content types offer.

Standardized Content Models Create Powerful Experiences

It's intuitive to focus on standardizing components across a network of sites. Platforms like the Drupal WxT distribution have the power to do just that. There's definitely an opportunity for the GoC and its participating communities to standardize more content types to allow for greater portability and consistency between GoC websites.

While government departments often need autonomy over particular types of content, sharing the content model for common content types has huge benefits across the board. A standardized content model means that we can build a confederated search experience with a search engine like Apache Solr. And modern service technologies like chatbots and voice search are made possible by standardizing key content types like videos, job postings, and news items.

Need Drupal WxT Training for your team? Contact us for a custom training proposal! //--> + more awesome articles by Evolving Web
Categories: FLOSS Project Planets

Real Python: Build and Submit HTML Forms With Django – Part 4

Planet Python - Wed, 2022-01-12 09:00

In this four-part tutorial series, you’re building a social network with Django that you can showcase in your portfolio. This project is strengthening your understanding of relationships between Django models and showing you how to use forms so that users can interact with your app and with each other. You’re also making your site look good by using the Bulma CSS framework.

In the previous part of this series, you added functionality so that users can create dweets on the back end and display them on the front end. At this point, your users can discover and follow other users and read the content of the profiles they follow. They can click a button that sends an HTTP POST request handled by Django to unfollow a profile if they want to stop reading their content.

In the fourth part of this tutorial series, you’ll learn how to:

  • Create and render Django forms from your Dweet model
  • Prevent double submissions and display helpful error messages
  • Interlink pages of your app using dynamic URLs
  • Refactor a view function
  • Use QuerySet field lookups to filter your data on the back end

Once you finish going through this final part of the tutorial, you’ll have a fully functional basic social network built with Django. It’ll allow your users to create short text-based messages, discover and follow other users, and read the content of the profiles they follow. They’ll also be able to unfollow a profile if they want to stop reading their content.

Additionally, you’ll have showcased that you can use a CSS framework to make your web app look great without too much extra effort.

You can download the code that you’ll need to start the final part of this project by clicking the link below and going to the source_code_start/ folder:

Get Source Code: Click here to get the source code you’ll use to build and submit HTML forms with Django.


In this four-part series, you’re building a small social network that allows users to post short text-based messages. The users of your app can also follow other user profiles to see the posts of these users or unfollow them to stop seeing their text-based posts:

You’re also learning how to use the CSS framework Bulma to give your app a user-friendly appearance and make it a portfolio project you can be proud to show off.

In the fourth and final part of this tutorial series, you’ll learn how to build Django forms on top of an existing model. You’ll also set up and handle more HTTP POST request submissions so that your users can post their text-based messages.

At the end of this tutorial, you’ll have completed your basic social network built with Django. By then, your users will be able to navigate to a profile list and to individual profile pages, follow and unfollow other users, and see the dweets of the profiles they follow displayed on their dashboard. They’ll also be able to submit dweets through a form on their dashboard.

Project Overview

In this section, you’ll get an overview of what topics you’ll cover in this final part of the tutorial series. You’ll also get a chance to revisit the full project implementation steps, in case you need to skip back to a previous step that you completed in an earlier part of the series.

At this point, you should have finished working through parts one, two, and three of this tutorial series. Congratulations! You’ve made your way to the final part, which focuses on building forms and handling form submissions:

    Step 10 Submit Dweets Through a Django Form Step 11 Prevent Double Submissions and Handle Errors Step 12 Improve the Front-End User Experience

Once you’ve implemented the steps of this last part of the series, you’ve completed the basic version of your Django social network. You’ll be ready to take any next steps by yourself to make this project stand out in your web developer portfolio.

To get a high-level idea of how the final part in this series on building your Django social network fits into the context of the whole project, you can expand the collapsible section below:

Full Project Implementation StepsShow/Hide

You’re implementing the project in a number of steps spread out over multiple separate tutorials in this series. There’s a lot to cover, and you’re going into details along the way:

✅ Part 1: Models and Relationships

  • Step 1: Set Up the Base Project
  • Step 2: Extend the Django User Model
  • Step 3: Implement a Post-Save Hook

✅ Part 2: Templates and Front-End Styling

  • Step 4: Create a Base Template With Bulma
  • Step 5: List All User Profiles
  • Step 6: Access Individual Profile Pages

✅ Part 3: Follows and Dweets

  • Step 7: Follow and Unfollow Other Profiles
  • Step 8: Create the Back-End Logic For Dweets
  • Step 9: Display Dweets on the Front End

📍 Part 4: Forms and Submissions

  • Step 10: Submit Dweets Through a Django Form
  • Step 11: Prevent Double Submissions and Handle Errors
  • Step 12: Improve the Front-End User Experience

Each of these steps will provide links to any necessary resources. By approaching the steps one at a time, you’ll have the opportunity to pause and come back at a later point in case you want to take a break.

With the high-level structure of this tutorial series in mind, you’ve got a good idea of where you’re at and which implementation steps you might have to catch up on, if you haven’t completed them yet.

Before getting started with the next step, take a quick look at the prerequistes to skim any links to other resources that might be helpful along the way.


To successfully work through this final part of your project, you need to have completed the first part on models and relationships, the second part on templates and styling, and the third part on follows and dweets. Please confirm that your project works as described there. You should also be comfortable with the following concepts:

Read the full article at https://realpython.com/django-social-forms-4/ »

[ Improve Your Python With 🐍 Python Tricks 💌 – Get a short & sweet Python Trick delivered to your inbox every couple of days. >> Click here to learn more and see examples ]

Categories: FLOSS Project Planets