FLOSS Project Planets

Luke Plant: pyastgrep and custom linting

Planet Python - Thu, 2024-05-23 15:07

A while back I released pyastgrep, which is a rewrite of astpath. It’s a tool that allows you to search for specific Python syntax elements using XPath as a query language.

As part of the rewrite, I separated out the layers of code so that it can now be used as a library as well as a command line tool. I haven’t committed to very much API surface area for library usage, but there is enough.

My main personal use of this has been for linting tasks or enforcing of conventions that might be difficult to do otherwise. I don’t always use this – quite often I’d reach for custom Semgrep rules, and at other times I use introspection to enforce conventions. However, there are times when both of these fail or are rather difficult.

Examples

Some examples of the kinds of rules I’m thinking of include:

  • Boolean arguments to functions/methods should always be “keyword only”.

    Keyword-only arguments are a big win in many cases, and especially when it comes to boolean values. For example, forcing delete_thing(True, False). to be something like delete_thing(permanent=True, force=False) is an easy win, and this is common enough that applying this as a default policy across the code base will probably be a good idea.

    The pattern can be distinguished easily at syntax level. Good:

    def foo(*, my_bool_arg: bool): ...

    Bad:

    def foo(my_bool_arg: bool): ...
  • Simple coding conventions like “Don’t use single letter variables like i or j as a loop variables, use index or idx instead”.

    This can be found by looking for code like:

    for i, val in enumerate(...): ...

    You might not care about this, but if you do, you really want the rule to be applied as an automated test, not a nit-picky code review.

  • A Django-specific one: for inclusion tags, the tag names should match the template file name. This is nice for consistency and code navigation, plus I actually have some custom “jump to definition” code in my editor that relies on it for fast navigation.

    The pattern can again be seen quite easily at the syntax level. Good:

    @inclusion_tag("something/foo.html") def foo(): ...

    Bad:

    @inclusion_tag("something/bar.html") def foo(): ...
  • Any ’task’ (something decorated with @task) should be named foo_task or foo_task, in order to give a clue that it works as an asynchronous call, and its return value is just a promise object.

There are many more examples you’ll come up with once you start thinking like this.

Method

Having identified the bad patterns we want to find and fix, my method for doing so looks as follows. It contains a number of tips and refinements I’ve made over the past few years.

First, I open a test file, e.g. tests/test_conventions.py, and start by inserting some example code – at least one bad example (the kind we are trying to fix), and one good example.

There are a few reasons for this:

  • First, I need to make sure I can prove life exists on earth, as John D. Cook puts it. I’ll say more about this later on.

  • Second, it gives me a deliberately simplified bit of code that I can pass to pyastdump.

  • Third, it provides some explanation for the test you are going to write, and a potentially rather hairy XPath expression.

I’ll use my first example above, keyword-only boolean args. I start by inserting the following text into my test file:

def bad_boolean_arg(foo: bool): pass def good_boolean_arg(*, foo: bool): pass

Then, I copy both of these in turn to the clipboard (or both together if there isn’t much code, like in this case), and pass them through pyastdump. From a terminal, I do:

$ xsel | pyastdump -

I’m using the xsel Linux utility, you can also use xclip -out, or pbpaste on MacOS, or Get-Clipboard in Powershell.

This gives me some AST to look at, structured as XML:

<Module> <body> <FunctionDef lineno="1" col_offset="0" type="str" name="bad_boolean_arg"> <args> <arguments> <posonlyargs/> <args> <arg lineno="1" col_offset="20" type="str" arg="foo"> <annotation> <Name lineno="1" col_offset="25" type="str" id="bool"> <ctx> <Load/> </ctx> </Name> </annotation> </arg> </args> <kwonlyargs/> <kw_defaults/> <defaults/> </arguments> </args> <body> <Pass lineno="2" col_offset="4"/> </body> <decorator_list/> </FunctionDef> </body> <type_ignores/> </Module>

In this case, the current structure of Python’s AST has helped us out a lot – it has separated out posonlyargs (positional only arguments), args (positional or keyword), and kwonlyargs (keyword only args). We can see the offending annotation containing a Name with id="bool" inside the args, when we want it only to be allowed as a keyword-only argument.

(Do we want to disallow boolean-annotated arguments as positional only? I’m leaning towards “no” here, as positional only is quite rare and usually a very deliberate choice).

I now have to construct an XPath expression that will find the offending XML nodes, but not match good examples. It’s pretty straightforward in this case, once you know the basics of XPath. I test it out straight away at the CLI:

pyastgrep './/FunctionDef/args/arguments/args/arg/annotation/Name[@id="bool"]' tests/test_conventions.py

If I’ve done it correctly, it should print my bad example, and not my good example.

Then I widen the net, omitting tests/test_conventions.py to search everywhere in my current directory.

At this point, I’ve probably got some real results that I want to address, but I might also notice there are other variants of the same thing I need to be able to match, and so I iterate, adding more bad/good examples as necessary.

Now I need to write a test. It’s going to look like this:

def test_boolean_arguments_are_keyword_only(): assert_expected_pyastgrep_matches( """ .//FunctionDef/args/arguments/args/arg/annotation/Name[@id="bool"] """, message="Function arguments with type `bool` should be keyword-only", expected_count=1, )

Of course, the real work is being done inside my assert_expected_pyastgrep_matches utility, which looks like this:

from pathlib import Path from boltons import iterutils from pyastgrep.api import Match, search_python_files SRC_ROOT = Path(__file__).parent.parent.resolve() # depends on project structure def assert_expected_pyastgrep_matches(xpath_expr: str, *, expected_count: int, message: str): """ Asserts that the pyastgrep XPath expression matches only `expected_count` times, each of which must be marked with `pyastgrep_exception` `message` is a message to be printed on failure. """ xpath_expr = xpath_expr.strip() matches: list[Match] = [item for item in search_python_files([SRC_ROOT], xpath_expr) if isinstance(item, Match)] expected_matches, other_matches = iterutils.partition( matches, key=lambda match: "pyastgrep: expected" in match.matching_line ) if len(expected_matches) < expected_count: assert False, f"Expected {expected_count} matches but found {len(expected_matches)} for {xpath_expr}" assert not other_matches, ( message + "\n Failing examples:\n" + "\n".join( f" {match.path}:{match.position.lineno}:{match.position.col_offset}:{match.matching_line}" for match in other_matches ) )

There is a bit of explaining to do now.

Being sure that you can “find life on earth” is especially important for a negative test like this. It would be very easy to have an XPath query that you thought worked but didn’t, as it might just silently return zero results. In addition, Python’s AST is not stable – so a query that works now might stop working in the future.

It’s like you have a machine that claims to be able to find needles in haystacks – when it comes back and says “no needles found”, do you believe it? To increase your confidence that everything works and continues to work, you place a few needles at locations that you know, then check that the machine is able to find those needles. When it claims “found exactly 2 needles”, and you can account for those, you’ve got much more confidence that it has indeed found the only needles.

So, it’s important to leave my bad examples in there.

But, I obviously don’t want the bad examples to cause the test to fail! In addition, I want a mechanism for exceptions. A simple mechanism I’ve chosen is to add the text pyastgrep: expected as a comment.

So, I need to change my bad example like this:

def bad_boolean_arg(foo: bool): # pyastgrep: expected pass

I also pass expected_count=1 to indicate that I expect to find at least one bad example (or more, if I’ve added more bad examples).

Hopefully that explains everything assert_expected_pyastgrep_matches does. A couple more notes:

  • it uses boltons, a pretty useful set of Python utilities

  • it requires a SRC_ROOT folder to be defined, which will depend on your project, and might be different depending on which folder(s) you want to apply the convention too.

Now, everything is set up, and I run the test for real, hopefully locating all the bad usages. I work through them and fix, then leave the test in.

Tips
  • pyastgrep works strictly at the syntax level, so unlike Semgrep you might get caught out by aliases if you try match on specific names:

    from foo import bar from foo import bar as foo_bar import foo # These all call the same function but look different in AST: foo.bar() bar() foo_bar()
  • There is however, an advantage to this – you don’t need a real import to construct your bad examples, you can just use a Mock. e.g. for my inclusion_tag example above, I have code like:

    from unittest.mock import Mock register = Mock() @register.inclusion_tag(filename="something/not_bad_tag.html") def bad_tag(): # pyastgrep: expected pass

    You can see the full code on GitHub.

  • You might be able to use a mixture of techniques:

    • A Semgrep rule avoids one set of bad patterns using some thirdparty.func, and requiring everyone to use your own wrapper, which is then constructed in such a way to make it easier to apply a pyastgrep rule

    • Some introspection that produces a list of classes or functions to which some rule applies, then dynamically generates XPath expression to pass to pyastgrep.

Conclusion

Syntax level searching isn’t right for every job, but it can be a powerful addition to your toolkit, and with a decent query language like XPath, you can do a surprising amount. Have a look at the pyastgrep examples for inspiration!

Categories: FLOSS Project Planets

Mike Driscoll: Episode 41 – Python Packaging and FOSS with Armin Ronacher

Planet Python - Thu, 2024-05-23 12:13

In this episode, I chatted with Armin Ronacher about his many amazing Python packages, such as pygments, flask, Jinja, Rye, and Click!

Specifically, we talked about the following:

  • How Flask came about
  • Favorite Python packages
  • Python packaging
  • and much more!
Links

The post Episode 41 – Python Packaging and FOSS with Armin Ronacher appeared first on Mouse Vs Python.

Categories: FLOSS Project Planets

Wim Leers: XB week 1: 0.x branch opened!

Planet Drupal - Thu, 2024-05-23 10:16

Acquia is sponsoring me full-time to operate as the tech lead for Experience Builder — thanks!

Dries announced the formal start of the Experience Builder initiative at DrupalCon Portland 2024, on May 6. Shortly before DrupalCon, Drupal core product manager Lauri already shared the findings of the deep & wide research he conducted in prior months.

During the (entire!) month of March, Lauri walked some members of Acquia’s Drupal Acceleration Team (Ben “bnjmnm”, Ted “tedbow” Bowman
“hooroomoo”, Alex “effulgentsia” Bronstein, Tim Plunkett and I) as well as the lead front-end and lead back-end developer of Acquia’s Site Studio team (Felix Mazeikis and Jesse Baker) through the product requirements that were identified for Drupal to leapfrog its competitors on this front.
We spent that month understanding those requirements and do an initial pass at sizing them. To be able to refine the estimates, we started building proof-of-concepts for the riskiest areas. For example, I started one for dynamically loading a different “design version”, and a few days later another one for validating the data model proposed by Alex.

These proof-of-concepts have been shared with long-time Drupal core contributors while they were being worked on — for example, we asked feedback from Mateu “e0ipso” at Lullabot from the very start since Single Directory Components are his brain child. We asked feedback from Lee “larowlan” Rowlands at PreviousNext given his work on Decoupled Layout Builder. And so on.
They’re hacky as hell — the purpose was to explore connections between concepts and check viability.

At DrupalCon, Dries revealed that he’d love to see organizations using Drupal to contribute back significantly to both Starshot (the other announcement, which will include Experience Builder once it’s ready). So at DrupalCon, Lauri and I found many people asking us how to start contributing — an excellent new challenge to have!

We’re currently in an awkward phase to welcome contributors. Because  despite a clear product ambition/vision, we are in the very early stages of defining the concrete UX (Acquia’s UX team is working on wireframes and did user testing at DrupalCon). And during DrupalCon, there was no code base to point to!

So, during the week after DrupalCon, hooroomoo got a 0.x branch of Experience Builder going, cooking up a delightful hodgepodge of various PoC branches we’d worked on.
On Thursday May 16, Lauri and I met with 6 (!!!) people of the PreviousNext team, where they have not only serious Drupal core expertise, but also deep Layout Builder and JS knowledge — they offered to run the asynchronous meetings in the #experience-builder Drupal Slack channel. They’ve used this pattern before with great success, and it is the only viable way to truly involve the global Drupal community.
 

By the end of the week I got GitLab CI pipelines going (PHPStan L8!). Ready for more serious work in week 2 :)

Categories: FLOSS Project Planets

The Drop Times: EvolveDrupal: Insights from Atlanta & What's Next in Montreal!

Planet Drupal - Thu, 2024-05-23 09:08
Dive into the highlights of EvolveDrupal Atlanta and brace yourself for major updates from Montreal! Get ready to be part of this exciting journey of innovation and collaboration.
Categories: FLOSS Project Planets

DrupalEasy: Ruminations on Drupal Starshot

Planet Drupal - Thu, 2024-05-23 08:03

a second official version of Drupal

- Dries Buytaert, in his blog post announcing Drupal Starshot

If you're a Drupal developer of any caliber and pay any attention to the goings-on in the Drupal community, then you no doubt have heard about Starshot, recently announced by Dries Buytaert at DrupalCon Portland 2024.

In this post, I'll do my best to not repeat everything that was announced, but rather to summarize, ask a question or two and offer an opinion or two…

The basics

Starshot will be a new download available on drupal.org that includes contributed modules and configuration to provide a superior out-of-the-box solution that is more usable/approachable/friendlier than Drupal core.

In my opinion, Starshot can be thought of (generally speaking of course) as two-ish large tasks. First, full integration with Automatic Updates, Project Browser and Recipes (including full Recipe support in Project Browser.) Second; Experience Builder, which is planned to be (roughly speaking) some combination of Layout Builder (or a replacement,) Paragraphs, Single Directory Components, an in-browser styling tool and other modules/configuration to provide a best-of-breed page-building solution.

The -ish in two-ish from above is all the additional functionality that having full Recipes support will bring. IMHO, this is the star in Starshot.

Note: Experience Builder is not new - it is an evolution of Next generation page builder initiative that started in 2023. 

Why?

In his keynote, Dries spoke about the need for Starshot over the course of a few minutes, enumerating various reasons why he and others in the community feel this is a necessary task, including the fact that Drupal's UI is difficult to use for new users.

I think Mike Herchel summed the Why up nicely in his blog post

It’s an acknowledgement of the perception that Drupal is archaic and/or legacy software, and that this perception needs to change.

Starshot is the Drupal community's effort to win back small- and medium-sized sites that don't currently even consider using Drupal.

Furthermore, one of the main goals of Drupal Starshot is to allow for faster innovation cycles, allowing Starshot to add functionality at a faster pace than Drupal core.

Timeline

There's a countdown clock to liftoff on drupal.org/starshot that is currently at a bit over 200 days. Based on this, Starshot will be ready by January 1, 2025. Dries mentioned in his keynote that the goal was to have an initial release by the end of 2024.

There's actually a very early prototype of a subset of the functionality available from phenaproxima (Adam G-H.) 

I'm a bit dubious about all of the mentioned functionality of Starshot being ready by the end of the year. More of my opinion on this in a bit…

Relationship to Drupal core

It's not a fork - that much is clear. It will include Drupal core, but have its own release schedule. I can only imagine that any time Drupal core has a security update, there will be a new Starshot release (as well as any time any of the contrib modules used in Starshot have a security release as well, I assume)

What's up with the "Launch" button?

One of my biggest questions after Dries' keynote was based on a mockup of a drupal.org page that he presented.

What happens when someone clicks "Launch?" I've been a proponent of the Drupal Association engaging/partnering with low-cost hosting providers to provide a way to easily provide hosting for a Drupal site that supports relies on Automatic Updates and Project Browser. The community has invested a lot of time in both of these initiatives, and I feel that neither really has a hosting "home." What would be a better way to officially launch these projects than hosting partners that fully support both, as well as a meaningful site backup plan, all included in a low monthly hosting price. IMHO, this type of thing should definitely be one of the options behind the mysterious "Launch" button. Maybe the DA gets a small referral fee from the hosting providers as well?

Gábor Hojtsy writes in his blog post about Starshot, "Discussions around making simple hosting available for simpler sites was reignited and a WebAssembly-based browser-executed demo solution's feasibility is also explored again." He also mentioned the potential for a WebAssembly-based option in his DrupalCon Portland 2024 session about Drupal 11, as well as options for ephemeral (temporary) hosting solutions (think SimplyTest.me.) 

Will the plan and/or timeline change?

Absolutely. Dries and other folks already involved in Starshot admit that there's a lot of things to still figure out, decisions to be made and a lot of work to do to make all this a reality. Nothing is set in stone. 

If I had a magic wand 🪄

As exciting as Experience Builder sounds, I'm worried that this is going to take a long time. In addition, as we've seen with the plethora of Layout Builder related contrib modules, there is often no one-size-fits-all solution for page creation.

From my perspective, I think that Drupal Starshot (or Drupal CMS, or whatever we end up calling it) phase 1 should be Automatic Updates, Project Browser, Recipes, and a set of curated recipes available geared towards page building. Experience Builder should be phase 2.

Being able to install recipes from Project Browser (leveraging Package Manager from Automatic Updates) will be a game-changer.

The way I look at it is with full Recipes support, we don't have to have just one Experience Builder, we can have many. We can have simpler ones (sooner) and more intricate ones (later.) We can have recipes that leverage Layout Builder and any number of the currently existing supporting contrib modules or recipes that focus on Paragraphs. The cream will rise to the top as the various Experience Builder modules are written, tested, and released.

Simon Hobbs agrees that Recipes is the "secret sauce" to Starshot in his optimistic blog post

Community reaction

In the two-ish weeks since Dries announced Starshot, Drupal agencies from around the world have weighed in with their support, including PreviousNext from Australia (blog post by Kim Pepper,) 1xINTERNET from Europe (announcement,) Specbee (blog post by Malabya Tewari,) and (obviously) Acquia (United States.) 

In my conversations with folks while at DrupalCon Portland 2024, reactions were mostly positive, but some folks had some concerns; with the leading issue being that (paraphrasing) the announcement feels like there were some internal (non-public) discussions about doing Starshot following by a "we are doing this" announcement by Dries. While I don't completely agree with this sentiment, I do understand it. The main pieces of Starshot have been open to discussion in the community, while the idea of putting them all together into a new "product" is something that (as far as I could tell) wasn't necessarily widely open for community input. 

Additional resources
Categories: FLOSS Project Planets

Salsa Digital: Why Use Drupal?

Planet Drupal - Thu, 2024-05-23 08:00
1. Introduction to Drupal What is a Content Management System (CMS)? A CMS is a tool that helps you create and manage your website’s content without needing to write code or have much technical experience. It's like a platform that provides the base for your website.  Some well-known CMSs include WordPress , which is great for beginners and has many plugins; Joomla , which works well for online stores; Magento, which suits larger e-commerce sites and of course Drupal , which can be used to build any complex website. These tools make it easier to build and customise your site. What is Drupal? Drupal is an advanced, open-source CMS. It's perfect for making complex websites thanks to its flexibility and strong security features.
Categories: FLOSS Project Planets

Python Anywhere: New help page: Playwright

Planet Python - Thu, 2024-05-23 07:00

We’ve had an increasing number of people asking us how to use Playwright on PythonAnywhere. Playwright is a browser automation framework that was developed by Microsoft; like the more-established Selenium it’s really useful for testing and web-scraping, and it’s getting a reputation for being a robust and fast library for that kind of work.

Getting it set up to run on PythonAnywhere is pretty easy, but you need to do the installation slightly differently to the way it’s documented on Playwright’s own site; user hcaptcha on our forums worked out what the trick was to making it work, so now we have a new help page documenting how to do it.

Categories: FLOSS Project Planets

EuroPython: EuroPython May 2024 Newsletter

Planet Python - Thu, 2024-05-23 06:12

Hello, Python people! &#x1F40D;

Welcome back to our cosy corner of community & code!

It&aposs absolutely fantastic to have you here again, especially as we countdown the days until our reunion in Prague! &#x1F389; It’s been months since our last gathering in this magical city, and we couldn’t be more excited to be back.

Fun fact: did you know that Czechia has recently been ranked among the world&aposs top 20 happiest countries? It&aposs the ideal place to spark joy and inspiration as we come together once again.

A lot of things have happened since our last catch-up. Let’s dive right into it!

&#x1F4E3; Programme

As you might know, we reached a record number of submitted proposals this year. After analyzing 627 submissions, we are glad to announce a sneak peek of what you will see at EuroPython this year.

If you are still not convinced to join us, we have another big announcement! Here are the keynote speakers we have lined up. &#x1F31F;

  • Carol Willing - Three-time Python Steering Council membership, Core Developer status, and PSF Fellow
  • Tereza Iofciu - Seasoned data pro with 15 years experience, Python community star, won the PSF community service award in 2021
  • &#x141;ukasz Langa - CPython Developer in Residence, Python 3.8 & 3.9 release manager, original creator of Black, pianist, dad
  • Mai Giménez - Google Deepmind senior engineer specializing in large language and multimodal models, former Spanish Python Association board member &#x1F40D;
  • Armin Ronacher - Creator of popular Python libraries such as Flask, Jinja, and Click, Armin is currently the VP of Platform at Sentry.
  • Anna P&#x159;istoupilová - Bioinformatics scientist focused on genome analysis techniques and their applications in understanding rare genetic diseases. She received the Bolzano Award for her doctoral thesis.

The schedule is gonna be packed with all your amazing talks, tutorials and posters. The official schedule with the dates and times will be posted soon!  Keep those eyes open on our social media channels and website! &#x1F4C5;✨

All of this wouldn’t be real without the great efforts of the EuroPython programme team.  Many volunteers from all teams spared their time to reach out to people and review the proposals. ❤️

&#x1F64C; Big cheers to those who helped shape the EuroPython programme making EuroPython 2024 the best one yet! &#x1F680;&#x1F40D;

&#x1F5C3;️ Keynote Speakers

Let us better introduce the listed EuroPython 2024 keynote speakers! ⚡️&#x1F40D;❤️

Keynote speaker #1: Carol WillingCarol Willing

Don&apost miss your chance to hear from Carol Willing, who is a three-time Python Steering Council member, Python Core Developer, PSF Fellow, and Project Jupyter core contributor. &#x1F525;

In 2019, she was honoured with the Frank Willison Award for her outstanding technical and community contributions to Python. Carol played a pivotal role in Project Jupyter, recognized with the prestigious 2017 ACM Software System Award for its enduring impact. Being the leading figure in open science and open-source governance herself. Carol serves on the advisory boards of Quansight Labs, CZI Open Science, and pyOpenSci.

She’s committed to democratizing open science through accessible tools and learning resources, and most recently served as Noteable&aposs VP of Engineering.

Get ready to be inspired by Carol&aposs insights at EuroPython 2024!

Keynote speaker #2: Tereza IofciuTereza Iofciu

Get ready to be inspired by Tereza Iofciu, a seasoned data practitioner and leadership coach with over 15 years of expertise in Data Science, Data Engineering, Product Management, and Team Management. &#x1F525;

Tereza&aposs dedication to the Python Community is unmatched; she has worn numerous hats over the years, serving as the organiser for PyLadies Hamburg, board member of Python Software Verband, steering committee member of NumFocus DISC, and team member of Python Software Foundation Code of Conduct. Not stopping there, Tereza is also actively involved in promoting Diversity & Inclusion as a working group member, while also taking the roles of the organiser for PyConDE & PyData Berlin, Python Pizza Hamburg, and co-leader of PyPodcats (If you haven&apost heard, PyPodcats is a fantastic new podcast dedicated to highlighting the hidden figures of the Python community. Led by the PyPodcats team—Cheuk Ting Ho, Georgi Ker, Mariatta Wijaya, and Tereza Iofciu— aimed to amplify the voices of underrepresented group members within the Python community). &#x1F408;&#x1F431;

In recognition of her outstanding contributions, Tereza was honoured with the Python Software Foundation Community Service Award in 2021. Now, if that&aposs not a sign to catch her awesome keynote, I don&apost know what is!

Keynote speaker #3: &#x141;ukasz Langa

Introducing &#x141;ukasz Langa: a polymath whose impact on the Python ecosystem is as diverse as his array of interests!

As the CPython Developer in Residence and the mastermind behind Python 3.8 & 3.9 releases, &#x141;ukasz plays a pivotal role in shaping the future of Python. He&aposs the original creator of Black, revolutionising the way we write Python code.

Beyond his coding prowess, &#x141;ukasz is a talented pianist and a devoted father.

When he&aposs not immersed in Python development, you&aposll find him indulging his passions for analogue modular synthesisers &#x1F60D;, immersing himself in captivating single-player role-playing games like Fallout and Elder Scrolls, or relishing in the complexity of a fine single malt Scotch whisky.

Brace yourself for an enlightening journey through &#x141;ukasz&aposs experiences and insights! &#x1F680;&#x1F3B9;&#x1F943;

Keynote speaker #4: Mai GiménezMai Giménez

Allow us to introduce Mai Giménez, Ph.D., a senior research engineer at Google DeepMind specialising in large language and multimodal models.

Mai&aposs passion lies in crafting technology that benefits everyone, with her primary research focus being on language and the sociotechnical impacts of AI in the real world. The impact of her contributions extends beyond her work at Google DeepMind. She&aposs a former board member of the Spanish Python Association and has played a pivotal role in organising several PyConES conferences.

Additionally, Mai proudly contributes to the Python community as a member of PyLadies. Get ready to be inspired by Mai&aposs expertise and insights as she graces the stage at EP24! &#x1F31F;

Keynote speaker #5: Armin Ronacher

A household name in the open-source world Armin Ronacher is the creator of popular Python libraries such as Flask, Jinja, and Click, Armin has left quite a mark on the Python ecosystem, empowering developers worldwide with efficient tools and frameworks.

Armin Ronacher

He is currently the VP of Platform at Sentry and recently he started an experimental Python package and project manager that attempts to bring Rust’s modern developer experience to Python. We are so excited to hear from him at EuroPython 2024!

Keynote speaker #6: Anna P&#x159;istoupilová

Put your hands together for Anna P&#x159;istoupilová!! Anna is a bioinformatics scientist focused on genome analysis techniques and their applications in understanding rare genetic diseases. She received the Bolzano Award for her doctoral thesis!

Anna P&#x159;istoupilová

Anna holds a PhD in Molecular and Cell Biology, Genetics, and Virology and two MSc degrees: one in Medical Technology and Informatics, and the other in Molecular Biology and Genetics, all from Charles University.

She has co-authored over 25 publications in peer-reviewed journals and has presented her work at various scientific conferences.

Currently, Anna works as a Senior Bioinformatics Scientist at DNAnexus company, where she assists customers with their bioinformatics analysis. She also conducts research at the Research Unit for Rare Diseases at the First Faculty of Medicine, Charles University.

&#x1F39F;️ Conference Registration

It&aposs time to secure your tickets for the conference!

We&aposve heard you loud and clear—you don’t want to miss the opportunity to hear from our incredible keynote speakers and be a part of EuroPython 2024.

Here&aposs the list of tickets available for purchase.&#x1F447;

  • Conference Tickets: access to the main Conference AND Sprints Weekend
  • Tutorial Tickets: access to the two days of Workshops AND Sprints Weekend. NO access to the main event.
  • Combined Tickets: access to everything for the seven days! Includes workshops, main Conference and Sprints weekend.

Other than the types, there are also payment tiers that are offered to answer each participant’s needs. Such as:

  • Business Tickets (for companies and employees funded by their companies)
  • Personal Tickets (for individuals)
  • Education Tickets (for students and teachers, an educational ID is required at the registration)
Buzzing registration desk from EuroPython 2023

For those who cannot physically join us but still want to support the community, we have the remote ticket option.

  • Remote ticket: access to the Live streaming of the talks, Q&A with the speakers and Discord server.

Join us and connect with the delightful community of Pythonistas in Prague. Make your summer more fun!

Need more information regarding tickets? Please visit the website or contact us at helpdesk@europython.eu!

⚖️ Visa Application

Not sure if you need one? Please check the website and consult your local consular office or embassy. &#x1F3EB;

If you do need a visa to attend EuroPython 2024, you can lodge a visa application issued for Short Stay (C), up to 90 days, for the purpose of “Business /Conference”. Please, do it ASAP!

Make sure you read all the visa pages carefully and prepare all the required documents before making your application. The EuroPython organizers are not able nor qualified to give visa advice.

However, we’re more than happy to help you with a visa support letter. But before sending your request, please note that you will need to be registered to request the letter. We can only issue visa support letters to confirmed participants.

Hence, We kindly ask you to purchase your ticket before filling in the request form.

For more information, please check https://ep2024.europython.eu/visa or contact us at visa@europython.eu. ✈️

&#x1F4B6; Financial Aid

The first round of our Financial Aid Programme received record-high applications this year and we are very proud to be supporting so many Pythonistas to attend the conference.

The second round of applications wrapped up on May 19th and now the team is actively working to individually review the applications! More information at https://ep2024.europython.eu/finaid/.

&#x1F4B0; Sponsorship

If you want to support EuroPython and its efforts to make the event accessible to everyone, please consider sponsoring, or asking your employer to do so. More information at: https://ep2024.europython.eu/sponsor &#x1FAC2;

Sponsoring EuroPython guarantees you highly targeted visibility and the opportunity to present yourself/your company to one of the largest and most diverse Python communities in Europe and beyond!

There are several sponsor tiers and slots are limited. This year, besides our main packages, we offer add-ons as optional extras where companies can opt to support the community in many other ways:

  • By directly sponsoring the PyLadies lunch event
  • By supporting participants by funding Financial Aid
  • By having their logo on all lanyards of the conference
  • Or even by improving the event’s accessibility.

Interested? Email us at sponsoring@europython.eu.

&#x1F91D;Join us as a Volunteer!

To make the conference an amazing experience for everyone, we need enthusiastic on-site volunteers from July 8-14. Whether you&aposre confident at leading people, love chatting with new folks at registration, are interested in chairing a session or just want to help out -  we&aposve got a role for you. Volunteering is a fantastic way to gain experience, make new connections, and have lots of fun while doing it.

Interested? Have a look at https://ep2024.europython.eu/volunteers to find out more and how to apply.

We&aposre also considering remote volunteers, so if you&aposre interested in helping out but can&apost make it to Prague, please mention that explicitly in your email.

We can&apost wait to see you in Prague! &#x1F680;

&#x1F39F;Events @EuroPythonEuroPython 2023 social event

This year, we want to make our social event bigger and better for everyone. Hence, we are planning to host a bigger party. Tickets will be available for purchase on the website soon! Stay tuned.

&#x1F389; CommunityEuroPython at PyCon Italia &#x1F1EE;&#x1F1F9; May 22nd - 25th 2024

PyCon Italia 2024 will happen in Florence. The birthplace of Renaissance will receive a wave of Pythonistas looking to geek out this year, including a lot of EuroPython people.

If you are going to PyCon Italia (tickets are sold out) join us to help organise EuroPython 2024!

&#x1F3A4; First-Time Speaker Workshop

Join us for the Speaker’s Mentorship Programme - First-Time Speaker Workshop on Monday, June 3rd, at 19:00 CEST! &#x1F3A4;

This online panel session features experienced speakers sharing advice for first-time (or other) speakers. Following the panel discussion, there will be a dedicated Q&A session to address all participants&apos inquiries. The event is open to the public, and registration is required through this form.

As the event date approaches, registered participants will receive further details via email. Don&apost miss this opportunity to learn and grow as a speaker!

News from the EuroPython Community❣️
  • Check out our phenomenal co-organizer Mia Bajic on a recent podcast where she shared her experiences volunteering in the Python community! &#x1F399;️ Mia is a true pillar of the Python community, she has shared her expertise and passion at multiple PyCons across the globe. &#x1F30D; Her efforts extend beyond borders as she tirelessly works to bring Pythonic people together in Prague, hosting events such as Pyvo and the first-ever Python Pizza in the city! &#x1F355; Mia&aposs dedication and contributions make both Czech Python community and EuroPython a better place, and we&aposre beyond grateful to have her on board shaping the EuroPython experience. &#x1F64C; Note: The podcast is in Czech. &#x1F3A7;

Podcast: https://www.youtube.com/watch?v=-UcHqap89Ac

  • Joana is doing a Master&aposs in Medical Imaging and Applications. Originally from Ghana, she joined the Communications team of EuroPython this year bringing her experience and innovative thinking from PyLadies Ghana.

She wrote an article about her Community involvement and the impact it has had on her career. She says:

I met and saw women who had achieved great things in data science and machine learning, which meant that I could also, through their stories, find a plan to at least help me get close to what they had done.

Full article: https://blog.europython.eu/community-post-invisible-threads/

&#x1F40D; Upcoming EventsGeoPython: May 27-29 2024
  • GeoPython 2024 will happen in Basel, Switzerland.

For more information about GeoPython 2024, you can visit their website: https://2024.geopython.net/

Djangocon.eu: June 5-9 2024

DjangoCon Europe 2024 will happen in Vigo, Spain. You can check more information about Django Con Europe at their lovely website (https://2024.djangocon.eu/)

PyCon Portugal: 17-19 October 2024

Pycon Portugal will happen in Altice Forum, Braga. More information on the official website: https://2024.pycon.pt/

PyCon Poland: August 29th - September 1st

The 16th edition of PyCon PL is happening in Gliwice! For more information, visit their website https://pl.pycon.org/2024

PyCon Taiwan 2024: September 21st - September 22nd

PyCon Taiwan will introduce a new activity segment: Poster Session! The deadline to submit your posters is June 15th, through the submission form.

More information on their website: https://tw.pycon.org/2024/en-us

&#x1F92D; Py.Jokes~ pyjoke Two threads walk into a bar. The barkeeper looks up and yells, &aposHey, I want don&apost any conditions race like time last!&apos&#x1F423; See You All Next Month

Before saying goodbye, thank you so much for reading. We can’t wait to reunite with all you amazing people in beautiful Prague again.

It truly is time to make new Python memories together!

With so much joy and excitement,

EuroPython 2024 Team &#x1F917;

Categories: FLOSS Project Planets

Matt Layman: Export Journal Feature - Building SaaS with Python and Django #191

Planet Python - Wed, 2024-05-22 20:00
In this episode, I started with cleaning up a few small items. After those warmups, we moved on to building an export feature that will allow users to take their journal entries if they want to leave the service.
Categories: FLOSS Project Planets

KDE Gear 24.05.0

Planet KDE - Wed, 2024-05-22 20:00
A script element has been removed to ensure Planet works properly. Please find it in the original post. Dolphin

Dolphin lets you navigate your folders and files, move and copy things from one place to another, connect to file servers and manage everything in your local and remote storage.

It is important to the Dolphin team that you can see what is happening at all times, and we have implemented animations to help you follow every action. For example, dragging a file or folder over another folder triggers a subtle animation if the option to open the folder is enabled. Dolphin's bars also animate when they appear and disappear.

Dolphin also provides more tailored and informative insights into specific folders by default, so when browsing through recently used files and folders, users will find modification times listed by default and have streamlined access to the most recent items. Similarly, the Trash folder now offers detailed information on the time and origin of each deleted file.

During searches, Dolphin has refined its result views to offer more pertinent details. For images, we display dimensions and creation times, while audio files reveal track information such as author, album, and duration. For general searches, results are conveniently accompanied by their respective paths and modification times, so you have all the context you need at your fingertips.

Seamless navigation through interfaces is crucial for users around the world, and our latest update delivers just that. Now, when using right-to-left languages such as Arabic or Hebrew, Dolphin's arrow navigation works flawlessly.

Itinerary

Itinerary now shows more information about your train and coach facilities (where this information is available). This includes general comfort features such as air conditioning or WiFi, as well as things specifically relevant if you are traveling with young children, a bicycle, or a wheelchair. These can also be qualified by availability (e.g. if they require a special reservation) and marked as disrupted. This information is displayed when viewing a train's car layout and when searching for a connection.

The Itinerary team, in collaboration with other open source projects, has started work on a community-run, vendor-neutral international public transport routing service called Transitous. Transitous aims to focus on users' interests rather than on those of public transport operators). It is free to use, respects users' privacy, and does not stop at borders. We are now at a point where public transport information is available for a large part of Europe, and the data for services outside Europe is growing. The amount of information is now large enough that we have decided to enable support for Transitous by default in Itinerary and KTrip.

As with most updates, we've improved the coverage of travel document extractors, as well as adding support for a number of companies including AMSBus, ANA, Deutsche Bahn, Eckerö Line, Elron, European Sleeper, Eurostar, Eventim, Finnair, Flibco, Leo Express, LTG Link, Moongate, National Express, Pasažieru vilciens, Salzbergwerk, SNCF, Thalys, ti.to, Trenitalia and UK National Railways.

NeoChat

NeoChat is a chat app that lets you take full advantage of the Matrix network.

In its newest version, we moved the search to a popup allowing you to search for a conversation independently of the space you are in.

NeoChat will also now scan PDFs and other files sent to the chat for travel documents, and displaying all the relevant information directly in your conversation. All the processing is done on your device and no private information is sent to any third parties servers. Similarly your text documents will be directly displayed in the timeline.

Tokodon

Tokodon brings the Mastodon federated social media platform to your fingertips. With Tokodon you can read, post, and message easily. Now when writing a new post, it is possible to do that in a separate window, allowing you to continue using Tokodon while writing your post.

In this release, we also added a badge counter for follow requests in the sidebar.

Kdenlive

Kdenlive is KDE's full-featured video editor that gives you everything you need to build advertisements, documentaries, TV shows, and full-fledged movies.

Version 24.05 adds Group Effects, effects that can be added to clips grouped together all at the same time. You can also reach wider audiences by using an offline AI that can translate your subtitles with the Automatic Subtitle Translations feature.

The feature that allows you to capture audio from your desktop or microphone from directly within Kdenlive is back, and the performance of moving clips with the spacer tool has been hugely improved. The multiple resource bins management feature (bins being the areas where you keep your clips, images, titles and animations) has also been reworked and improved.

Elisa

Elisa is KDE's elegant and feature-rich music player. Yet another improvement to its already sleek design is that this new version lets you switch between list and grid views.

And all this too...

Ark helps you manage compressed files and archives. Ark can now open and un-archive self-extracting .exe archive files

The date and time picker in Merkuro has been updated and is now significantly faster.

The reading experience on Akregator, KDE's RSS news reader, is more pleasant in this version thanks to a new layout and the support of dark themes.

Full changelog here Where to get KDE Apps

Although we fully support distributions that ship our software, KDE Gear 24.05 apps will also be available on these Linux app stores shortly:

Flathub Snapcraft

If you'd like to help us get more KDE applications into the app stores, support more app stores and get the apps better integrated into our development process, come say hi in our All About the Apps chat room.

Categories: FLOSS Project Planets

Ned Batchelder: Echos of the People API user guide

Planet Python - Wed, 2024-05-22 18:58

PyCon 2024 just happened, and as always it was a whirlwind of re-connecting with old friends, meeting new friends, talking about anything and everything, juggling, and getting simultaneously energized and exhausted. I won’t write about everything that happened, but one thread sticks with me: the continuing echos of my talk from last year.

If you haven’t seen it yet, I spoke at PyCon 2023 about the ways engineers can use their engineering skills to interact better with people, something engineers stereotypically need help with. I called it People: The API User’s Guide.

A number of people mentioned the talk to me this year, which was very gratifying. It’s good to hear that it stuck with people. A few said they had passed it on to others, which is a real sign that it landed well with them.

On the other hand, at lunch one day, someone asked me if I had done a talk last year, and I sheepishly answered, “um, yeah, I did the opening keynote...” It’s hard to answer that question without it becoming a humble brag!

The most unexpected echo of the talk was at the coverage.py sprint table. Ludovico Bianchi was working away when he turned to me and said, “oh, I forgot to send you this last year!” He showed me this picture he drew during the talk a year ago:

I’ve only ever stayed for one day of sprints. It can be hard to get people started on meaty issues in that short time. We have a good time anyway, and merge a few pull requests. This year, three people came back who sprinted with me in 2023, another sign that something is going right.

Once the sprint was over, Ludovico also sketched Sleepy into the group photo of the sprint gang:

Half the fun of preparing last year’s talk was art-directing the illustrations by my son Ben, similar to how we had worked to make Sleepy Snake. As much as I like hearing that people like my words, as a dad it’s just as good to hear that people like Ben’s art. Seeing other people play with Sleepy in clever ways is extra fun.

Categories: FLOSS Project Planets

FSF Events: Free Software Directory meeting on IRC: Friday, May 24, starting at 12:00 EDT (16:00 UTC)

GNU Planet! - Wed, 2024-05-22 18:32
Join the FSF and friends on Friday, May 24, from 12:00 to 15:00 EDT (16:00 to 19:00 UTC) to help improve the Free Software Directory.
Categories: FLOSS Project Planets

Release GCompris 4.1

Planet KDE - Wed, 2024-05-22 18:00

Today we are releasing GCompris version 4.1.

It contains bug fixes and graphics improvements on multiple activities.

It is fully translated in the following languages:

  • Arabic
  • Bulgarian
  • Breton
  • Catalan
  • Catalan (Valencian)
  • Greek
  • Spanish
  • Basque
  • French
  • Galician
  • Croatian
  • Hungarian
  • Italian
  • Lithuanian
  • Malayalam
  • Dutch
  • Norwegian Nynorsk
  • Polish
  • Brazilian Portuguese
  • Romanian
  • Russian
  • Slovenian
  • Swedish
  • Turkish
  • Ukrainian

It is also partially translated in the following languages:

  • Azerbaijani (97%)
  • Belarusian (86%)
  • Czech (95%)
  • German (95%)
  • UK English (95%)
  • Esperanto (99%)
  • Estonian (95%)
  • Finnish (94%)
  • Hebrew (95%)
  • Indonesian (99%)
  • Macedonian (90%)
  • Portuguese (95%)
  • Slovak (83%)
  • Albanian (99%)
  • Swahili (99%)
  • Chinese Traditional (95%)

You can find packages of this new version for GNU/Linux, Windows, Android, Raspberry Pi and macOS on the download page. This update will also be available soon in the Android Play store, the F-Droid repository and the Windows store.

Thank you all,
Timothée & Johnny

Categories: FLOSS Project Planets

parallel @ Savannah: GNU Parallel 20240522 ('Tbilisi') released

GNU Planet! - Wed, 2024-05-22 16:43

GNU Parallel 20240522 ('Tbilisi') has been released. It is available for download at: lbry://@GnuParallel:4

Quote of the month:

  GNU Parallel é mais um daqueles "como eu vivia sem isso?!"
  -- Ivan Augusto @ivanaugustobd@twitter
 
New in this release:

  • --onall now supports sshpass - user:pass@host.
  • --memfree kills do not count as --retries.
  • Bug fixes and man page updates.


GNU Parallel - For people who live life in the parallel lane.

If you like GNU Parallel record a video testimonial: Say who you are, what you use GNU Parallel for, how it helps you, and what you like most about it. Include a command that uses GNU Parallel if you feel like it.


About GNU Parallel


GNU Parallel is a shell tool for executing jobs in parallel using one or more computers. A job can be a single command or a small script that has to be run for each of the lines in the input. The typical input is a list of files, a list of hosts, a list of users, a list of URLs, or a list of tables. A job can also be a command that reads from a pipe. GNU Parallel can then split the input and pipe it into commands in parallel.

If you use xargs and tee today you will find GNU Parallel very easy to use as GNU Parallel is written to have the same options as xargs. If you write loops in shell, you will find GNU Parallel may be able to replace most of the loops and make them run faster by running several jobs in parallel. GNU Parallel can even replace nested loops.

GNU Parallel makes sure output from the commands is the same output as you would get had you run the commands sequentially. This makes it possible to use output from GNU Parallel as input for other programs.

For example you can run this to convert all jpeg files into png and gif files and have a progress bar:

  parallel --bar convert {1} {1.}.{2} ::: *.jpg ::: png gif

Or you can generate big, medium, and small thumbnails of all jpeg files in sub dirs:

  find . -name '*.jpg' |
    parallel convert -geometry {2} {1} {1//}/thumb{2}_{1/} :::: - ::: 50 100 200

You can find more about GNU Parallel at: http://www.gnu.org/s/parallel/

You can install GNU Parallel in just 10 seconds with:

    $ (wget -O - pi.dk/3 || lynx -source pi.dk/3 || curl pi.dk/3/ || \
       fetch -o - http://pi.dk/3 ) > install.sh
    $ sha1sum install.sh | grep 883c667e01eed62f975ad28b6d50e22a
    12345678 883c667e 01eed62f 975ad28b 6d50e22a
    $ md5sum install.sh | grep cc21b4c943fd03e93ae1ae49e28573c0
    cc21b4c9 43fd03e9 3ae1ae49 e28573c0
    $ sha512sum install.sh | grep ec113b49a54e705f86d51e784ebced224fdff3f52
    79945d9d 250b42a4 2067bb00 99da012e c113b49a 54e705f8 6d51e784 ebced224
    fdff3f52 ca588d64 e75f6033 61bd543f d631f592 2f87ceb2 ab034149 6df84a35
    $ bash install.sh

Watch the intro video on http://www.youtube.com/playlist?list=PL284C9FF2488BC6D1

Walk through the tutorial (man parallel_tutorial). Your command line will love you for it.

When using programs that use GNU Parallel to process data for publication please cite:

O. Tange (2018): GNU Parallel 2018, March 2018, https://doi.org/10.5281/zenodo.1146014.

If you like GNU Parallel:

  • Give a demo at your local user group/team/colleagues
  • Post the intro videos on Reddit/Diaspora*/forums/blogs/ Identi.ca/Google+/Twitter/Facebook/Linkedin/mailing lists
  • Get the merchandise https://gnuparallel.threadless.com/designs/gnu-parallel
  • Request or write a review for your favourite blog or magazine
  • Request or build a package for your favourite distribution (if it is not already there)
  • Invite me for your next conference


If you use programs that use GNU Parallel for research:

  • Please cite GNU Parallel in you publications (use --citation)


If GNU Parallel saves you money:



About GNU SQL


GNU sql aims to give a simple, unified interface for accessing databases through all the different databases' command line clients. So far the focus has been on giving a common way to specify login information (protocol, username, password, hostname, and port number), size (database and table size), and running queries.

The database is addressed using a DBURL. If commands are left out you will get that database's interactive shell.

When using GNU SQL for a publication please cite:

O. Tange (2011): GNU SQL - A Command Line Tool for Accessing Different Databases Using DBURLs, ;login: The USENIX Magazine, April 2011:29-32.


About GNU Niceload


GNU niceload slows down a program when the computer load average (or other system activity) is above a certain limit. When the limit is reached the program will be suspended for some time. If the limit is a soft limit the program will be allowed to run for short amounts of time before being suspended again. If the limit is a hard limit the program will only be allowed to run when the system is below the limit.

Categories: FLOSS Project Planets

Evgeni Golov: Upgrading CentOS Stream 8 to CentOS Stream 9 using Leapp

Planet Debian - Wed, 2024-05-22 15:19

Warning to the Planet Debian readers: the following post might shock you, if you're used to Debian's smooth upgrades using only the package manager.

Leapp?!

Contrary to distributions like Debian and Fedora, RHEL can't be upgraded using the package manager alone.

Instead there is a tool called Leapp that takes care of orchestrating the update and also includes a set of checks whether a system can be upgraded at all. Have a look at the RHEL documentation about upgrading if you want more details on the process itself.

You might have noticed that the title of this post says "CentOS Stream" but here I am talking about RHEL. This is mostly because Leapp was originally written with RHEL in mind.

Upgrading CentOS 7 to EL8

When people started pondering upgrading their CentOS 7 installations, AlmaLinux started the ELevate project to allow upgrading CentOS 7 to CentOS Stream 8 but also to AlmaLinux 8, Rocky 8 or Oracle Linux 8.

ELevate was essentially Leapp with patches to allow working on CentOS, which has different package signature keys, different OS release versioning, etc.

Sadly these patches were never merged back into Leapp.

Making Leapp work with CentOS Stream 8 (and other distributions)

At some point I noticed that things weren't moving and EL8 to EL9 upgrades were coming closer (and I had my own systems that I wanted to be able to upgrade in place).

Annoyed-Evgeni-Development is best development? Not sure, but it produced a set of patches that allowed some movement:

However, this is not yet the end of the story. At least convert dot-less CentOS versions to X.999 is open, and another followup would be needed if we go that route. But I don't expect this to be merged soon, as the patch is technically wrong - yet it makes things mostly work.

The big problem here is that CentOS Stream doesn't have X.Y versioning, just X as it's a constant stream with no point releases. Leapp however relies on X.Y versioning to know which package changes it needs to perform. Pretending CentOS Stream 8 is "RHEL" 8.999 works if you assume that Stream is always ahead of RHEL.

This is however a CentOS only problem. I still need to properly test that, but I'd expect things to work fine with upstream Leapp on AlmaLinux/Rocky if you feed it the right signature and repository data.

Actually upgrading CentOS Stream 8 to CentOS Stream 9 using Leapp

Like I've already teased in my HPE rant, I've actually used that code to upgrade virt01.conova.theforeman.org to CentOS Stream 9. I've also used it to upgrade a server at home that's responsible for running important containers like Home Assistant and UniFi. So it's absolutely battle tested and production grade! It's also hungry for kittens.

As mentioned above, you can't just use upstream Leapp, but I have a Copr: evgeni/leapp.

# dnf copr enable evgeni/leapp # dnf install leapp leapp-upgrade-el8toel9

Apart from the software, we'll also need to tell it which repositories to use for the upgrade.

# vim /etc/leapp/files/leapp_upgrade_repositories.repo [c9-baseos] name=CentOS Stream $releasever - BaseOS metalink=https://mirrors.centos.org/metalink?repo=centos-baseos-9-stream&arch=$basearch&protocol=https,http gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial gpgcheck=1 repo_gpgcheck=0 metadata_expire=6h countme=1 enabled=1 [c9-appstream] name=CentOS Stream $releasever - AppStream metalink=https://mirrors.centos.org/metalink?repo=centos-appstream-9-stream&arch=$basearch&protocol=https,http gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial gpgcheck=1 repo_gpgcheck=0 metadata_expire=6h countme=1 enabled=1

Depending on the setup and installed packages, more repositories might be needed. Just make sure that the $stream substitution is not used as Leapp doesn't override that and you'd end up with CentOS Stream 8 repos again.

Once all that is in place, we can call leapp preupgrade and let it analyze the system.

Ideally, the output will look like this:

# leapp preupgrade … ============================================================ REPORT OVERVIEW ============================================================ Reports summary: Errors: 0 Inhibitors: 0 HIGH severity reports: 0 MEDIUM severity reports: 0 LOW severity reports: 3 INFO severity reports: 3 Before continuing consult the full report: A report has been generated at /var/log/leapp/leapp-report.json A report has been generated at /var/log/leapp/leapp-report.txt ============================================================ END OF REPORT OVERVIEW ============================================================

But trust me, it won't ;-)

As mentioned above, Leapp analyzes the system before the upgrade. Some checks can completely inhibit the upgrade, while others will just be logged as "you better should have a look".

Firewalld Configuration AllowZoneDrifting Is Unsupported

EL7 and EL8 shipped with AllowZoneDrifting=yes, but since EL9 this is not supported anymore. As this can potentially break the networking of the system, the upgrade gets inhibited.

Newest installed kernel not in use

Admit it, you also don't reboot into every new kernel available! Well, Leapp won't let that pass and inhibits the upgrade.

Cannot perform the VDO check of block devices

In EL8 there are two ways to manage VDO: using the dedicated vdo tool and via LVM. If your system uses LVM (it should!) but not VDO, you probably don't have the vdo package installed. But then Leapp can't check if your LVM devices really aren't VDO without the vdo tooling and will inhibit the upgrade. So you gotta install vdo for it to find out that you don't use VDO…

LUKS encrypted partition detected

Yeah. Sorry. Using LUKS? Straight into the inhibit corner!

But hey, if you don't use LUKS for / you can probably get away by deleting the inhibitwhenluks actor. That worked for me, but remember the kittens!

Really upgrading CentOS Stream 8 to CentOS Stream 9 using Leapp

The headings are getting silly, huh?

Anyway, once leapp preupgrade is happy and doesn't throw any inhibitors anymore, the actual (real?) upgrade can be done by calling leapp upgrade.

This will download all necessary packages and create an intermediate initramfs that contains all the things needed for the upgrade and ask you to reboot.

Once booted, the upgrade itself takes somewhere between 5 and 10 minutes. Then another minute or 5 to relabel your disks with the new SELinux policy.

And three reboots (into the upgrade initramfs, into SELinux relabel, into real OS) of a ProLiant DL325 - 5 minutes each? 😿

And then for good measure another one, to flip SELinux from permissive to enforcing.

Are we done yet? Nope.

There are a few post-upgrade tasks you get to do yourself. Yes, the switching of SELinux back to enforcing is one of them. Please don't forget it.

Using the system after the upgrade

A customer once said "We're not running those systems for the sake of running systems, but for the sake of running some application ontop of them". This is very true.

libvirt doesn't support Spice/QXL

In EL9, support for Spice/QXL was dropped, so if you try to boot a VM using it, libvirt will nicely error out with

Error starting domain: unsupported configuration: domain configuration does not support video model 'qxl'

Interestingly, because multiple parts of the VM are invalid, you can't edit it in virt-manager (at least the one in Fedora 39) as removing/fixing one part requires applying the new configuration which is still invalid.

So virsh edit <vm> it is!

Look for entries like

<channel type='spicevmc'> <target type='virtio' name='com.redhat.spice.0'/> <address type='virtio-serial' controller='0' bus='0' port='2'/> </channel> <graphics type='spice' autoport='yes'> <listen type='address'/> </graphics> <audio id='1' type='spice'/> <video> <model type='qxl' ram='65536' vram='65536' vgamem='16384' heads='1' primary='yes'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'/> </video> <redirdev bus='usb' type='spicevmc'> <address type='usb' bus='0' port='2'/> </redirdev> <redirdev bus='usb' type='spicevmc'> <address type='usb' bus='0' port='3'/> </redirdev>

and either just delete the or (better) replace them with VNC/cirrus

<graphics type='vnc' port='-1' autoport='yes'> <listen type='address'/> </graphics> <audio id='1' type='none'/> <video> <model type='cirrus' vram='16384' heads='1' primary='yes'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'/> </video> Podman needs re-login to private registries

One of the machines I've updated runs Podman and pulls containers from GitHub which are marked as private. To do so, I have a personal access token that I've used to login to ghcr.io. After the CentOS Stream 9 upgrade (which included an upgrade to Podman 5), pulls stopped working with authentication/permission errors. No idea what exactly happened, but a simple podman login fixed this issue quickly.

$ echo ghp_token | podman login ghcr.io -u <user> --password-stdin shim has an el8 tag

One of the documented post-upgrade tasks is to verify that no EL8 packages are installed, and to remove those if there are any.

However, when you do this, you'll notice that the shim-x64 package has an EL8 version: shim-x64-15-15.el8_2.x86_64.

That's because the same build is used in both CentOS Stream 8 and CentOS Stream 9. Confusing, but should really not be uninstalled if you want the machine to boot ;-)

Are we done yet?

Yes! That's it. Enjoy your CentOS Stream 9!

Categories: FLOSS Project Planets

Glyph Lefkowitz: A Grand Unified Theory of the AI Hype Cycle

Planet Python - Wed, 2024-05-22 12:58
The Cycle

The history of AI goes in cycles, each of which looks at least a little bit like this:

  1. Scientists do some basic research and develop a promising novel mechanism, N. One important detail is that N has a specific name; it may or may not be carried out under the general umbrella of “AI research” but it is not itself “AI”. N always has a few properties, but the most common and salient one is that it initially tends to require about 3x the specifications of the average computer available to the market at the time; i.e., it requires three times as much RAM, CPU, and secondary storage as is shipped in the average computer.
  2. Research and development efforts begin to get funded on the hypothetical potential of N. Because N is so resource intensive, this funding is used to purchase more computing capacity (RAM, CPU, storage) for the researchers, which leads to immediate results, as the technology was previously resource constrained.
  3. Initial successes in the refinement of N hint at truly revolutionary possibilities for its deployment. These revolutionary possibilities include a dimension of cognition that has not previously been machine-automated.
  4. Leaders in the field of this new development — specifically leaders, like lab administrators, corporate executives, and so on, as opposed to practitioners like engineers and scientists — recognize the sales potential of referring to this newly-“thinking” machine as “Artificial Intelligence”, often speculating about science-fictional levels of societal upheaval (specifically in a period of 5-20 years), now that the “hard problem” of machine cognition has been solved by N.
  5. Other technology leaders, in related fields, also recognize the sales potential and begin adopting elements of the novel mechanism to combine with their own areas of interest, also referring to their projects as “AI” in order to access the pool of cash that has become available to that label. In the course of doing so, they incorporate N in increasingly unreasonable ways.
  6. The scope of “AI” balloons to include pretty much all of computing technology. Some things that do not even include N start getting labeled this way.
  7. There’s a massive economic boom within the field of “AI”, where “the field of AI” means any software development that is plausibly adjacent to N in any pitch deck or grant proposal.
  8. Roughly 3 years pass, while those who control the flow of money gradually become skeptical of the overblown claims that recede into the indeterminate future, where N precipitates a robot apocalypse somewhere between 5 and 20 years away. Crucially, because of the aforementioned resource-intensiveness, the gold owners skepticism grows slowly over this period, because their own personal computers or the ones they have access to do not have the requisite resources to actually run the technology in question and it is challenging for them to observe its performance directly. Public critics begin to appear.
  9. Competent practitioners — not leaders — who have been successfully using N in research or industry quietly stop calling their tools “AI”, or at least stop emphasizing the “artificial intelligence” aspect of them, and start getting funding under other auspices. Whatever N does that isn’t “thinking” starts getting applied more seriously as its limitations are better understood. Users begin using more specific terms to describe the things they want, rather than calling everything “AI”.
  10. Thanks to the relentless march of Moore’s law, the specs of the average computer improve. The CPU, RAM, and disk resources required to actually run the software locally come down in price, and everyone upgrades to a new computer that can actually run the new stuff.
  11. The investors and grant funders update their personal computers, and they start personally running the software they’ve been investing in. Products with long development cycles are finally released to customers as well, but they are disappointing. The investors quietly get mad. They’re not going to publicly trash their own investments, but they stop loudly boosting them and they stop writing checks. They pivot to biotech for a while.
  12. The field of “AI” becomes increasingly desperate, as it becomes the label applied to uses of N which are not productive, since the productive uses are marketed under their application rather than their mechanism. Funders lose their patience, the polarity of the “AI” money magnet rapidly reverses. Here, the AI winter is finally upon us.
  13. The remaining AI researchers who still have funding via mechanisms less vulnerable to hype, who are genuinely thinking about automating aspects of cognition rather than simply N, quietly move on to the next impediment to a truly thinking machine, and in the course of doing so, they discover a new novel mechanism, M. Go to step 1, with M as the new N, and our current N as a thing that is now “not AI”, called by its own, more precise name.
The History

A non-exhaustive list of previous values of N have been:

  • Neural networks and symbolic reasoning in the 1950s.
  • Theorem provers in the 1960s.
  • Expert systems in the 1980s.
  • Fuzzy logic and hidden Markov models in the 1990s.
  • Deep learning in the 2010s.

Each of these cycles has been larger and lasted longer than the last, and I want to be clear: each cycle has produced genuinely useful technology. It’s just that each follows the progress of a sigmoid curve that everyone mistakes for an exponential one. There is an initial burst of rapid improvement, followed by gradual improvement, followed by a plateau. Initial promises imply or even state outright “if we pour more {compute, RAM, training data, money} into this, we’ll get improvements forever!” The reality is always that these strategies inevitably have a limit, usually one that does not take too long to find.

Where Are We Now?

So where are we in the current hype cycle?

Some Qualifications

History does not repeat itself, but it does rhyme. This hype cycle is unlike any that have come before in various ways. There is more money involved now. It’s much more commercial; I had to phrase things above in very general ways because many previous hype waves have been based on research funding, some really being exclusively a phenomenon at one department in DARPA, and not, like, the entire economy.

I cannot tell you when the current mania will end and this bubble will burst. If I could, you’d be reading this in my $100,000 per month subscribers-only trading strategy newsletter and not a public blog. What I can tell you is that computers cannot think, and that the problems of the current instantation of the nebulously defined field of “AI” will not all be solved within “5 to 20 years”.

Acknowledgments

Thank you to my patrons who are supporting my writing on this blog. Special thanks also to Ben Chatterton for a brief pre-publication review; any errors remain my own. If you like what you’ve read here and you’d like to read more of it, or you’d like to support my various open-source endeavors, you can support my work as a sponsor! I am also available for consulting work if you think your organization could benefit from expertise on topics like “what are we doing that history will condemn us for”. Or, you know, Python programming.

Categories: FLOSS Project Planets

Lullabot: Drupal Release Planning in the Enterprise

Planet Drupal - Wed, 2024-05-22 10:00

Yesterday, your CTO mandated that all new CMS builds would be on Drupal and that all existing CMS platforms would be consolidated to Drupal within the next three years. Great! Time to start prioritizing sites, hiring teams, and planning development and launch schedules.

Categories: FLOSS Project Planets

Real Python: The Python calendar Module: Create Calendars With Python

Planet Python - Wed, 2024-05-22 10:00

The Python calendar module provides several ways to generate calendars for Python programs. It also includes a variety of functions for working with calendar data as strings, numbers, and datetime objects.

In this tutorial, you’ll learn how to use the calendar module to create and customize calendars with Python.

By the end of this tutorial, you’ll be able to:

  • Display calendars in your terminal with Python
  • Create plain text and HTML calendars
  • Format calendars for specific locales and display conventions
  • Use calendar-related functions and methods to access lower-level calendar data in a variety of formats

Get Your Code: Click here to download the free sample code you’ll use to learn about creating calendars with the calendar module in Python.

Take the Quiz: Test your knowledge with our interactive “The Python calendar Module” quiz. You’ll receive a score upon completion to help you track your learning progress:

Interactive Quiz

The Python calendar Module

In this quiz, you'll test your understanding of the calendar module in Python. It'll evaluate your proficiency in manipulating, customizing, and displaying calendars directly within your terminal. By working through this quiz, you'll revisit the fundamental functions and methods provided by the calendar module.

Displaying Calendars in Your Terminal

Unix and Unix-like operating systems such as macOS and Linux include a cal command-line utility for displaying calendars in an interactive console:

Shell $ cal May 2024 Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Copied!

Python provides a similar tool, which allows you to run the calendar module as a command-line script. To begin exploring the Python calendar module, open up your terminal program and enter the following command:

Shell $ python -m calendar 2024 January February March Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su 1 2 3 4 5 6 7 1 2 3 4 1 2 3 8 9 10 11 12 13 14 5 6 7 8 9 10 11 4 5 6 7 8 9 10 15 16 17 18 19 20 21 12 13 14 15 16 17 18 11 12 13 14 15 16 17 22 23 24 25 26 27 28 19 20 21 22 23 24 25 18 19 20 21 22 23 24 29 30 31 26 27 28 29 25 26 27 28 29 30 31 April May June Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su 1 2 3 4 5 6 7 1 2 3 4 5 1 2 8 9 10 11 12 13 14 6 7 8 9 10 11 12 3 4 5 6 7 8 9 15 16 17 18 19 20 21 13 14 15 16 17 18 19 10 11 12 13 14 15 16 22 23 24 25 26 27 28 20 21 22 23 24 25 26 17 18 19 20 21 22 23 29 30 27 28 29 30 31 24 25 26 27 28 29 30 July August September Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su 1 2 3 4 5 6 7 1 2 3 4 1 8 9 10 11 12 13 14 5 6 7 8 9 10 11 2 3 4 5 6 7 8 15 16 17 18 19 20 21 12 13 14 15 16 17 18 9 10 11 12 13 14 15 22 23 24 25 26 27 28 19 20 21 22 23 24 25 16 17 18 19 20 21 22 29 30 31 26 27 28 29 30 31 23 24 25 26 27 28 29 30 October November December Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su 1 2 3 4 5 6 1 2 3 1 7 8 9 10 11 12 13 4 5 6 7 8 9 10 2 3 4 5 6 7 8 14 15 16 17 18 19 20 11 12 13 14 15 16 17 9 10 11 12 13 14 15 21 22 23 24 25 26 27 18 19 20 21 22 23 24 16 17 18 19 20 21 22 28 29 30 31 25 26 27 28 29 30 23 24 25 26 27 28 29 30 31 Copied!

Running python -m calendar with no arguments outputs a full year’s calendar for the current year. To display the full calendar for a different year, pass in the integer representation of a year as the first argument of the calendar command:

Shell $ python -m calendar 1989 Copied!

To view a single month, pass in both a year and a month as the second parameter:

Shell $ python -m calendar 2054 07 July 2054 Mo Tu We Th Fr Sa Su 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Copied!

As you can see in these examples, the calendar module can display calendars for both past and future dates. According to the official documentation, the calendar module uses the current Gregorian calendar, extended indefinitely in both directions. It also uses the ISO 8601 standard, which is an international standard for exchanging and communicating date and time-related data.

Now that you know how to display calendars in your terminal with Python, you can move on and explore other approaches to creating calendars as plain text or HTML markup representations.

Creating Text-Based Calendars

To generate plain text calendars, the calendar module provides calendar.TextCalendar with methods to format and print monthly and yearly calendars.

TextCalendar.formatyear() accepts a single parameter for the year, like the calendar command-line script. Try it out in your Python REPL by executing the following code:

Python >>> import calendar >>> text_calendar = calendar.TextCalendar() >>> text_calendar.formatyear(2024) ' 2024\n\n January (...)' Copied! Read the full article at https://realpython.com/python-calendar-module/ »

[ 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

Drupal Association blog: DrupalCon Portland 2024 - Recapping Drupal’s most significant North American event!

Planet Drupal - Wed, 2024-05-22 09:52

Written by DrupalCon Portland Marketing Committee members Iwantha Lekamge, Luke McCormick, and Christina Lockhart.

DrupalCon Portland 2024 has come to an end, and what an exciting event it was. The City of Roses welcomed back Drupalists from around the world with open arms as we gathered at the Oregon Convention Center once more. It’s always great to get together with the rest of the Drupal community in person, and this particular DrupalCon was full of exciting news, from announcing a new version of Drupal to updated branding for the Drupal project. Four days full of networking and learning with the community through over 70+ sessions went by so quickly! 


Attendees gather at DrupalCon Portland 2024 for the group photo

Whether you could not attend the conference or want a reminder of how awesome it was, we’ve broken down each day of the event in our DrupalCon Portland 2024 recap. Read on to learn more about how each day went!

Day One

Day One of DrupalCon Portland kicked off with a morning of sessions, including Key to Collaboration—How to Build Psychological Safety with Individuals and Teams. This session, led by Britany Acre and Cori Neslund, was an impactful examination of the value of psychological safety. It explained how having it (or not) can affect teams, some best practices to build it within teams, and reviewed tools that can help teams based on their current state.

Another session highlight on Monday morning included Accessibility Audits -The many shapes and sizes, what’s the right fit for you with Kathy Beck and Julie Elman. During this session, the two speakers discussed why accessibility matters, the components of an audit, and steps that teams can take to ensure their work is accessible. 

Next up came the Welcoming Remarks prior to the Driesnote, where we witnessed Michael Anello win the Aaron Winborn award - congratulations on a well-deserved win, Michael! The excitement in the air continued when we found out where the next few DrupalCons will be held: Barcelona, Singapore, and Atlanta! Three vibrant, exciting cities that will be a perfect fit for the Drupal community. We can’t wait to attend! 

This year’s Driesnote, one of the most anticipated parts of DrupalCon, introduced a new version of Drupal – Drupal Starshot. Speaker and Drupal founder Dries Buytaert explained how Drupal Starshot will bring a new wave of users to the Drupal Community. Drupal Starshot, which aims to build the new default download of Drupal, will be a package built on Drupal core. It will include refined common features from the contributed project ecosystem to create a great user experience out of the box. You can learn more about Drupal Starshot and make your Drupal Starshot Pledge!


Driesnote


Photo of the attendees at the Welcoming Reception

At the end of the day, the Expo Hall Welcome Party celebrated the start of an exciting week. Along with a food truck and libations, the crowd enjoyed a robot DJ, giant Lite Brite, and a 360–degree photo booth. See all of the images from the booth on the DrupalCon Portland Flick.r group!

Day Two 

Day Two of the conference held the highly relevant keynote, Open Source AI Now: Why Open Must Win the AI War, with Alex Salkever. During his keynote, Alex walked the audience through the significant changes that AI will bring to every industry. 


 Day 2 Keynote by Alex Salkever

Other highlights from Tuesday included Gábor Hojtsy’s deep dive into what to expect from Drupal 11, the Women in Drupal Luncheon, and many other informative sessions – some of which you can watch now on the DrupalCon Portland 2024 YouTube playlist. The Women in Drupal Luncheon, in particular, celebrated the women of Drupal, with four panelists from Four Kitchens discussing being either the only woman in a particular role or one of the few. 

Day Two continued with a few Drupal Association sessions, including the Drupal Association Public Board Meeting and Innovation and Contributions Challenges with Alex Moreno and Irina Zaks. Alex and Irina shared their research on innovation and contribution friction analysis, which led to an open discussion on what resources are needed to propel Drupal to the next level.

Day Three

The third day of DrupalCon Portland 2024 was a dynamic conclusion to the conference, filled with insightful sessions, collaborative workshops, and networking opportunities. The day began with the highly anticipated Drupal Initiative Leads Keynote, where initiative leads for nine projects shared updates on current and future endeavors within the Drupal community. Among these updates were the results of the six Pitchburg projects, showcasing innovative developments such as the Drupal API client, Decoupled Layout Builder, Policy-based access, Mentor the Mentor project, JSON Document Storage, and Drupal Gutenberg Editor.

Initiative Updates:

  • Amber Himes Matz – Issue Queue changes, designed to increase the "throughput" of the issue queue.  Since almost all improvements in Drupal's code come through the issue queue, improving this system ripples down helpfully throughout the entire Drupal ecosystem.
  • Janez Urevc - Introducing Gander, the new core performance-testing framework that has been added to core.  This change will make it dramatically easier to monitor and improve performance in the code that runs a huge proportion of the Internet.
  • Fran-Garcia Linares – Gitlab CI, replacing Drupal CI. Compared to Drupal CI, Gitlab CI is easier to use, offers many useful features, and is much easier to maintain.
  • Ted Bowman - Automatic Updates is almost ready for release. It has been in use in over 300 sites for a year. They’ve begun expanded testing and hope to get this into core soon.
  • Jürgen Haas – ECA and BPMN, Automation API.  Powerful toolkit that enables automation of Drupal tasks, similar in some ways to a low-code/no-code approach to Drupal's "Actions" facility.
  • Mateu Aguiló Bosch - Single Directory Components. This project gives site builders and themers a lot of power to control the presentation of Drupal sites.  It integrates with UI Suite, Storybook, Experience Builder, and other exciting developments.
  • Christina Chumalas – New Navigation.  A new vertical/collapsible menu system is available now as an experimental module in Drupal core.  It incorporates many exciting features, including easier customization of menus, a "drawer" feature, a new design system, and much more.

For more information about any of these initiatives (including information about how to get involved with any of them), be sure to watch the action-packed video: Drupal Initiatives Keynote.


Drupal Project Initiatives Keynote

Following the keynote, attendees could participate in various sessions tailored to different interests and skill levels. The Drupal Branding Panel provided a comprehensive overview of efforts to modernize and enhance the Drupal brand, while the First-Time Contributor Workshop welcomed newcomers to learn about contributing to Drupal, fostering a welcoming environment for fresh talent. Simultaneously, the Mentored Contribution session offered hands-on guidance for participants to navigate the contribution process with the help of experienced mentors.

In the Marketing Contribution room, marketing professionals explored strategies to effectively promote Drupal, emphasizing the crucial role of marketing in expanding and sustaining the Drupal community. This not only provided valuable insights but also encouraged active participation and collaboration among attendees.

The day concluded with the "Unofficial Official DrupalCon24 Party" at the Oregon Museum of Science and Industry (OMSI), where attendees had the opportunity to unwind, network, and celebrate the successful conclusion of DrupalCon Portland 2024.

Overall, day three was a testament to the vibrant and collaborative spirit of the Drupal community, highlighting innovative developments, strategic goals, and the importance of community involvement. The event set a positive tone for future DrupalCons, showcasing the dedication and enthusiasm of Drupal enthusiasts worldwide.

Day Four

Finally, the conference’s fourth and final day was jam-packed with a day full of trainings and summits. From the insightful Nonprofit Summit to the community-driven Community Summit, attendees of the summits enjoyed guest panels and learned from each other during roundtable discussions. You can watch sessions from some of the summits and trainings on the Drupal Association YouTube channel.


The Nonprofit Summit at DrupalCon Portland

We’ll see you next time!

After four days of collaborating and learning with the community, DrupalCon Portland 2024 came to an end. From the sessions to the social events each day after the conference, we enjoyed every bit of it! Don’t forget that you can watch session recordings now on the Drupal Association YouTube channel.

As always, it was an incredible event, and we cannot wait to get together at the next DrupalCon – DrupalCon Barcelona, which will be held in Barcelona, Spain, from 24-27 September 2024. Don’t forget to also mark your calendars for DrupalCon Singapore (9-11 December 2024) and DrupalCon Atlanta (24-27 March 2025)! By visiting each conference’s official website, you can sign up to stay up to date with the latest news and updates from the conference.

Categories: FLOSS Project Planets

The Python Show: 41 - Python Packaging and FOSS with Armin Ronacher

Planet Python - Wed, 2024-05-22 09:37

In this episode, I chatted with Armin Ronacher about his many amazing Python packages, such as pygments, flask, Jinja, Rye, and Click!

Specifically, we talked about the following:

  • How Flask came about

  • Favorite Python packages

  • Python packaging

  • and much more!

Links
Categories: FLOSS Project Planets

Pages