FLOSS Project Planets

pspp @ Savannah: PSPP 1.6.1 has been released.

GNU Planet! - Fri, 2022-06-24 12:57

I'm very pleased to announce the release of a new version of GNU PSPP.  PSPP is a program for statistical analysis of sampled data.  It is a free replacement for the proprietary program SPSS.

Changes from 1.6.0 to 1.6.1:

  • The SET command now supports LEADZERO for controlling output of a leading zero in F, COMMA, and DOT format.
  • Bug fixes and translation updates.

Please send PSPP bug reports to bug-gnu-pspp@gnu.org.

Categories: FLOSS Project Planets

Peoples BLOG: How to work with Twig Templates in Drupal?

Planet Drupal - Fri, 2022-06-24 10:15
In this article, we are going to see how a developer can work with Twig templates, and how to override templates (if needed) and create template suggestions with hooks, so that templates could be easily managed. Basically drupal allows people to override the existing twig templates, so that people can fully have control on the html generated via the custom theme. First thing, we need to make sur
Categories: FLOSS Project Planets

Web Review, Week 2022-25

Planet KDE - Fri, 2022-06-24 09:47

Let’s go for my web review for the week 2022-25.

What would a Chromium-only Web look like?

Tags: tech, browser, web

This is a good question… not a good outcome overall. Are we really heading that way? Looks like it.


I fucking hate Jira.

Tags: tech, jira, funny, satire

Totally unbiased of course. I admit I’m not really in love with that ecosystem either.


Brenton Cleeland - Six things I do every time I start a Django project

Tags: tech, python, django

A couple of good advises in there for a Django project inception.


DORA Metrics: the Right Answer to measuring engineering team performance - Jacob Kaplan-Moss

Tags: tech, devops, metrics, project-management

Interesting set of metrics indeed. As usual the danger lies in how/if you set targets and potentially fuzzy definitions of some of the terms.


“Sharing Interesting Stuff”: A simple yet powerful management tool | by Florian Fesseler | Shipup blog | Jun, 2022 | Medium

Tags: tech, management, knowledge

OK, this is an interesting practice… I do some of that in a less formal fashion, maybe it’s worth exploring further.


writing one sentence per line | Derek Sivers

Tags: writing

OK, this is a neat and simple trick. I think I’ll start experimenting with it.


Bye for now!

Categories: FLOSS Project Planets

Real Python: The Real Python Podcast – Episode #115: Digging Into PyScript & Preventing or Handling Python Errors

Planet Python - Fri, 2022-06-24 08:00

Have you heard about PyScript? The brand-new framework has the community excited about building interactive Python applications that run entirely within the user's browser. Would you like to dig into the details beyond the "Hello World" examples? This week on the show, Christopher Trudeau is here, bringing another batch of PyCoder's Weekly articles and projects.

[ 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

Reproducible Builds: Supporter spotlight: Hans-Christoph Steiner of the F-Droid project

Planet Debian - Fri, 2022-06-24 06:00

The Reproducible Builds project relies on several projects, supporters and sponsors for financial support, but they are also valued as ambassadors who spread the word about our project and the work that we do.

This is the fifth instalment in a series featuring the projects, companies and individuals who support the Reproducible Builds project. We started this series by featuring the Civil Infrastructure Platform project and followed this up with a post about the Ford Foundation as well as a recent ones about ARDC, the Google Open Source Security Team (GOSST) and Jan Nieuwenhuizen on Bootstrappable Builds, GNU Mes and GNU Guix.

Today, however, we will be talking with Hans-Christoph Steiner from the F-Droid project.

Chris: Welcome, Hans! Could you briefly tell me about yourself?

Hans: Sure. I spend most of my time trying to private communications software usable by everyone, designing interactive software with a focus on human perceptual capabilities and building networks with free software. I’ve been involved in Debian since approximately 2008 and became an official Debian developer in 2011. In the little time left over from that, I sometimes compose music with computers from my home in Austria.

Chris: For those who have not heard of it before, what is the F-Droid project?

Hans: F-Droid is a community-run app store that provides free software applications for Android phones. First and foremost our goal is to represent our users. In particular, we review all of the apps that we distribute, and these reviews not only check for whether something is definitely free software or not, we additionally look for ‘ethical’ problems with applications as well — issues that we call ‘Anti-Features’. Since the project began in 2010, F-Droid now offers almost 4,000 free-software applications.

F-Droid is also a ‘app store kit’ as well, providing all the tools that are needed to operate an free app store of your own. It also includes complete build and release tools for managing the process of turning app source code into published builds.

Chris: How exactly does F-Droid differ from the Google Play store? Why might someone use F-Droid over Google Play?

Hans: One key difference to the Google Play Store is that F-Droid does not ship proprietary software by default. All apps shipped from f-droid.org are built from source on our own builders. This is partly because F-Droid is backed by the free software community; that is, people who have engaged in the free software community long before Android was conceived, and, in particular, share many — if not all — of its values. Using F-Droid will therefore feel very familiar to anyone familiar with a modern Linux distribution.

Chris: How do you describe reproducibility from the F-Droid point of view?

Hans: All centralised software repositories are extremely tempting targets for exploitation by malicious third parties, and the kinds of personal or otherwise sensitive data on our phones only increase this risk. In F-Droid’s case, not only could the software we distribute be theoretically replaced with nefarious copies, the build infrastructure that generates that software could be compromised as well.

F-Droid having reproducible builds is extremely important as it allows us to verify that our build systems have not been compromised and distributing malware to our users. In particular, if an independent build infrastructure can produce precisely the same results from a build, then we can be reasonably sure that they haven’t been compromised. Technically-minded users can also validate their builds on their own systems too, further increasing trust in our build infrastructure. (This can be performed using fdroid verify command.)

Our signature & trust scheme means that F-Droid can verify that an app is 100% free software whilst still using the developer’s original .APK file. More details about this may be found in our reproducibility documentation and on the page about our Verification Server.

Chris: How do you see F-Droid fitting into the rest of the modern security ecosystem?

Hans: Whilst F-Droid inherits all of the social benefits of free software, F-Droid takes special care to respect your privacy as well — we don’t attempt to track your device in any way. In particular, you don’t need an account to use the F-Droid client, and F-Droid doesn’t send any device-identifying information to our servers… other than its own version number.

What is more, we mark all apps in our repository that track you, and users can choose to hide any apps that has been tagged with a specific Anti-Feature in the F-Droid settings. Furthermore, any personal data you decide to give us (such as your email address when registering for a forum account) goes no further than us as well, and we pledge that it will never be used for anything beyond merely maintaining your account.

Chris: What would ‘fully reproducible’ mean to F-Droid? What it would look like if reproducibility was a ‘solved problem’? Or, rather, what would be your ‘ultimate’ reproducibility goals?

Hans: In an ideal world, every application submitted to F-Droid would not only build reproducibly, but would come with a cryptographically-signed signature from the developer as well. Then we would only distribute an compiled application after a build had received a number of matching signatures from multiple, independent third parties. This would mean that our users were not placing their trust solely in software developers’ machines, and wouldn’t be trusting our centralised build servers as well.

Chris: What are the biggest blockers to reaching this state? Are there any key steps or milestones to get there?

Hans: Time is probably the main constraint to reaching this goal. Not only do we need system administrators on an ongoing basis but we also need to incorporate reproducibly checks into our Continuous Integration (CI) system. We are always looking for new developers to join our effort, as well as learning about how to better bring them up to speed.

Separate to this, we often experience blockers with reproducibility-related bugs in the Android build tooling. Luckily, upstreams do ultimately address these issues, but in some cases this has taken three or four years to reach end-users and developers. Unfortunately, upstream is not chiefly concerned with the security aspects of reproducibility builds; they care more about how it can minimise and optimise download size and speed.

Chris: Are you tracking any statistics about reproducibility in F-Droid over time? If so, can you share them? Does F-Droid track statistics about its own usage?

Hans: To underline a topic touched on above, F-Droid is dedicated to preserving the privacy of its users; we therefore do not record usage statistics. This is, of course, in contrast to other application stores.

However, we are in a position to track whether packages in F-Droid are reproducible or not. As in: what proportion of APKs in F-Droid have been independently verified over time? Unfortunately, due to time constraints, we do not yet automatically publish charts for this.

We do publish some raw data that is related, though, and we naturally welcome contributions of visualizations based on any and all of our data. The “All our APIs” page on our wiki is a good place to start for someone wanting to contribute, everything about reproducible F-Droid apps is available in JSON format, what’s missing are apps or dashboards making use of the available raw data.

Chris: Many thanks for this interview, Hans, and for all of your work on F-Droid and elsewhere. If someone wanted to get in touch or learn more about the project, where might someone go?

Hans: The best way to find out about F-Droid is, of course, the main F-Droid homepage, but we are also on Twitter @fdroidorg. We have many avenues to participate and to learn more! We have an About page on our website and a thriving forum. We also have part of our documentation specifically dedicated to reproducible builds.

For more information about the Reproducible Builds project, please see our website at reproducible-builds.org. If you are interested in ensuring the ongoing security of the software that underpins our civilisation and wish to sponsor the Reproducible Builds project, please reach out to the project by emailing contact@reproducible-builds.org.

Categories: FLOSS Project Planets

Fun with Paths and URLs in QML

Planet KDE - Fri, 2022-06-24 05:00

There are a few small, and sometimes already quite old, features in Qt that, when combined, can be a very nice way to deal with assets in your QML application — especially if some of them live on the file system, some in a resource, and some may need localization or translation. Let’s dive in!

QDir’s searchPaths Feature

There is a seldom-used feature in QDir: to have it search for your files in a variety of places. You register a custom file prefix together with a list of possible paths where files with this prefix may be found. Then, whenever you need such a file, you simply use the custom prefix. Qt will locate the file for you in any of the locations you told it to look. You use QDir’s static methods setSearchPaths and addSearchPath to setup such special paths, after which you can utilize the new prefix using the QFile (and related) API’s.


QQmlAbstractUrlInterceptor is a simple interface class from which you can inherit to implement a class that gets to intercept all* URLs used in QML, by the engine itself in resolving paths to QML files or dirs and also when setting Image or SoundEffect sources, for instance. You implement a function that takes a QUrl and returns a QUrl, allowing you to manipulate the URL in the process. You can then install the interceptor on the QML engine by using addUrlInterceptor on Qt6 or setUrlInteceptor on Qt5 (undocumented, but does not require really private API). Warning: The Qt5 version can clash with Qt classes using the same mechanism, such as FileSelector. The Qt6 version that allows for multiple interceptors to be installed should not have that issue.

The Problem

In a customer project, we had two problems. On the one hand, we had some resources like icons stored in resource files, while we had others like video files and sound effects stored on the file system. This meant many uses of either "qrc:///assets/<the asset>.png" or "file:///" + baseDir + "/assets/<the asset>.mp4," littered around the code. On top of this, some of these files needed to be localized, sometimes only on language and other times more on region. It was quite a messy situation and, also, not very flexible in changing between locations from which we want to use assets.

So, I figured I could use a combination of the above two to implement an elegant solution to this issue.

Building the `asset:` Schemes

Use QQmlAbstractUrlInterceptor to implement a custom URL-scheme I called “asset,” which would resolve to either an asset in the resources or an asset on the file system. Finding the files is easy because we can rely on the custom `asset:` file scheme, implemented using QDir‘s searchPaths feature described above. To do that, we register the search paths in the constructor of the interceptor:

class AssetUrlHandler : public QQmlAbstractUrlInterceptor { public: AssetUrlHandler() { QDir::setSearchPaths("asset",{":/assets", QGuiApplication::applicationDirPath() + "/assets"}); } //... }

We need to then re-implement the actual intercept call, which, in a basic version, would look like this:

QUrl AssetUrlHandler::intercept(const QUrl& path, QQmlAbstractUrlInterceptor::DataType type) { if (type == QQmlAbstractUrlInterceptor::DataType::QmldirFile) return path; // no need to lookup these files; this is about assets, not about QML files auto scheme = path.scheme(); if (scheme == QLatin1String(assetScheme)) { QFileInfo fi("asset:" + path.mid(1)); if (fi.exists()) { if (fi.filePath().startsWith(":/")) { // we need to deal with files in the resources by adding the url scheme for them return QUrl("qrc" + fi.filePath()); } return QUrl::fromLocalFile(fi.filePath()); } return {}; } //followed by other (related) schemes if needed }

After installing an instance of the interceptor on the QmlEngine, we can change our QML from code like this:

SoundEffect { id: someEffect source: "file:///" + baseDir + "/assets/someEffect.wav" } //... Image { source: "qrc://assets/images/niceImage.png" }

to code like this:

SoundEffect { id: someEffect source: "asset:/sounds/someEffect.wav" } //... Image { source: "asset:/images/niceImage.png" }

Our URL interceptor handles actually locating the asset in the resources or the file system.

Localized Assets

Then, we also added a second scheme I called “localizedAsset” (casing doesn’t matter, but this is easier to read) that will try to find a localized variant of the requested asset, by either using an explicit locale passed in via a query parameter or using the current locale from the application settings. It will try a progressively more generic version of the file, starting from the full locale inserted as an additional suffix between the base name and the original suffix, via simply using the country or the language, down to just using the file itself as a fallback — again in either the resources or the file system.

For example, instead of just looking for myAsset.png, looking for a localized asset in QML with the locale set to german/Germany for language and country would first look for myAsset.de_DE.png, then for myAsset.de_EU.png (we’re treating the European Union (EU) as a special meta-country in our code), then for myAsset.DE.png, myAsset.EU.png, myAsset.de.png and, finally, as a default fallback using just myAsset.png. Though we could have chosen to use directories, we didn’t because that would have complicated the distribution of the application and spread out the related assets over multiple locations. So, we settled on using the additional suffix instead.

The interceptor we implemented caches the paths it resolves, so especially localized assets don’t get hit with too many locations, so if the requested path is already known (and returns it if so), if not looks it up and inserts it into the cache.

The result is that the QML code has become much cleaner, and localizations are trivial to add as they require no further code changes. We can also decide later where to best place a resource without changing the code where it is used.

Additional Benefits

We actually found that the asset scheme can make automatic tests a bit easier at times. By adding an additional constructor to the AssetUrlHandler that allows one to pass an additional resource path that is searched first, it becomes easier to write tests that need access to some resources without having to have those resources in the normal locations for them. It’s a small benefit, but it made writing some tests easier for us.


There is no such thing as a perfect solution, unfortunately, and there are a few snags to take into account:

First of all, the MultiMedia components don’t use the url interceptors to resolve the URLs they get passed. That’s a bug. It’s not so hard to work around though. Using Qt.resolvedUrl around the asset URL is enough.

Second, in Qt 5, using this results in some weirdness in what you get back, depending on how the URL got set on the property. In Qt 5, URLs in principle get resolved by the engine when they get set on a QUrl-type property. But there are many ways this can happen, and the behavior isn’t always consistent:

// property initialization Image { id: img1 source: "asset:/icons/icon.png" } // property binding Image { id: img2 source: someProperty ? "asset:/icons/icon1.png" : "asset:/icons/icon2.png" } // assign through state changes Image { id: img3 } PropertyChanges { target: img3; source: "asset:/icons/icon.png" } // assign in JavaScript Image { id: img4 Component.onCompleted: source = "asset:/icons/icon.png" }

We ran into some interesting issues while testing these properties with Squish:

img1.source === "qrc:///assets/icons/icon.png" img2.source === "asset:/icons/icon1.png" (or icon2.png) img3.source === "asset:/icons/icon.png" img4.source === "asset:/icons/icon.png"

So, that makes for some inconsistent results, depending on how the property was set. Again, Qt.resolvedUrl can be used as a work-around.

Qt 6 does not have this issue, as, in Qt 6, the URL resolving has been moved from the engine to the items, so that items can also get relative URLs. That does mean that if you have custom C++ based items that have URL properties, your item is responsible for resolving the URLs passed in (and for that: should be using any URL interceptors installed on the QML engine), and not just if you use the asset handling system from this blog or you will have to start adding Qt.resolvedUrl calls in your QML.


On Android, Qt provides the special “assets:/” file system, which maps to the Android system of packaging assets in a special directory in your package. The difference is just in the last ‘s’ of the name of the url scheme and file system, and this can be confusing.


*) All URLs? No, see the Caveats section for details.


About KDAB

If you like this article and want to read similar material, consider subscribing via our RSS feed.

Subscribe to KDAB TV for similar informative short video content.

KDAB provides market leading software consulting and development services and training in Qt, C++ and 3D/OpenGL. Contact us.

The post Fun with Paths and URLs in QML appeared first on KDAB.

Categories: FLOSS Project Planets

Russ Allbery: Review: A Dead Djinn in Cairo

Planet Debian - Fri, 2022-06-24 00:11

Review: A Dead Djinn in Cairo, by P. Djèlí Clark

Publisher: Tordotcom Copyright: May 2016 ASIN: B01DJ0NALI Format: Kindle Pages: 47

Fatma el-Sha'arawi is a special investigator with the Egyptian Ministry of Alchemy, Enchantments, and Supernatural Entities in an alternate 1912 Egypt. In Fatma's world, the mystic al-Jahiz broke through to the realm of the djinn in the late 1800s, giving Egypt access to magic and the supernatural and the djinn access to Egypt. It is now one of the great powers of the world, able to push off the Europeans and control its own politics.

This is a Tor.com original novelette, so you can read it on-line for free or drop $2 on a Kindle version for convenience. It's the first story in the "Dead Djinn" universe, in which Clark has also written a novella and a novel (the latter of which won the Nebula Award for best novel in 2022).

There are three things here I liked. Fatma is a memorable character, both for her grumpy demeanor as a rare female investigator having to put up with a sexist pig of a local police liaison, and for her full British attire (including a bowler hat) and its explanation. (The dynamics felt a bit modern for a story set in 1912, but not enough to bother me.) The setting is Arabian-inspired fantasy, which is a nice break from the normal European or Celtic stuff. And there are interesting angels (Fatma: "They're not really angels"), which I think have still-underused potential, particularly when they can create interesting conflicts with Coptic Christianity and Islam. Clark's version are energy creatures of some sort inside semi-mechanical bodies with visuals that reminded me strongly of Diablo III (which in this context is a compliment). I'm interested to learn more about them, although I hope there's more going on than the disappointing explanation we get at the end of this story.

Other than those elements, there's not much here. As hinted by the title, the story is structured as a police investigation and Fatma plays the misfit detective. But there's no real mystery; the protagonists follow obvious clue to obvious clue to obvious ending. The plot structure is strictly linear and never surprised me. Aasim is an ass, which gives Fatma something to react to but never becomes real characterization. The world-building is the point, but most of it is delivered in infodumps, and the climax is a kind-of-boring fight where the metaphysics are explained rather than discovered.

I'm possibly being too harsh. There's space for novelettes that tell straightforward stories without the need for a twist or a sting. But I admit I found this boring. I think it's because it's not tight enough to be carried by the momentum of a simple plot, and it's also not long enough for either the characters or the setting to breathe and develop. The metaphysics felt rushed and the characterization cramped. I liked Siti and the dynamic between Siti and Fatma at the end of the story, but there wasn't enough of it.

As a world introduction, it does its job, and the non-European fantasy background is interesting enough that I'd be willing to read more, even without the incentive of reading all award winning novels. But "A Dead Djinn in Cairo" doesn't do more than its job. It might be worth skipping (I'll have to read the subsequent works to know for certain), but it won't take long to read and the price is right.

Followed by The Haunting of Tram Car 015.

Rating: 6 out of 10

Categories: FLOSS Project Planets

Factorial.io: How it felt being back at Drupalcamp Spain

Planet Drupal - Thu, 2022-06-23 20:00

After three years of waiting, finally a Drupal event was held in Spain. It was taking place in Zaragoza from June 3rd to 5th 2022 and we at Factorial had the pleasure to sponsor the event within the philosophy of giving back to the community.

Categories: FLOSS Project Planets

Chapter Three: Hell is Programming a Calendar (Part 2 - Time in Drupal)

Planet Drupal - Thu, 2022-06-23 16:41
​Welcome to part two of Hell is Programming a Calendar, where I will dive into some of the more nitty-gritty details about handling time specifically in Drupal. If you haven’t already, I highly recommend checking out part one where I explain why time, in a more general programming sense, is so complicated in the first place. Anatomy of a date field Let’s start by breaking down Drupal’s core date field into its smaller components to examine how it works. In my mind, the core date field can be broken down into four major components.
Categories: FLOSS Project Planets

Mike Driscoll: An Intro to Kivy Layouts (Video)

Planet Python - Thu, 2022-06-23 14:24

Learn how to layout your widgets in Kivy, a mobile GUI framework for Python. Kivy is a cross-platform GUI framework that also works on iOS and Android.

The examples in this video are based on the code from Kivy 101: How to Use BoxLayouts


The post An Intro to Kivy Layouts (Video) appeared first on Mouse Vs Python.

Categories: FLOSS Project Planets

Evolving Web: The Most Important Criteria When Selecting Drupal or WordPress

Planet Drupal - Thu, 2022-06-23 11:08

Choosing which platform to use to manage your website or web platform can be a daunting task, especially if you have stakeholders with different priorities and skills, existing technologies, tools, and processes to take into account. Whatever your goals are when building or improving your website, your choice of technology will have many organizational impacts.

For many years now, Drupal and WordPress have been the two most popular content management systems(CMS), used by a large number of organizations. Both CMS offer a comprehensive, widely adopted, open source solution. In this article, we will take a deeper dive into the differences between these two popular options, and which factors to consider when doing your evaluation. While it's likely that either option could get you to your goal, choosing one option or the other will impact how you get there, what investments you'll need to make, and what options you'll have in the future.

Let's dive in.

Choosing your CMS

Before making a decision, here are a few factors to keep in mind:

  • Your team's skills (if you are building your website in-house),
  • Your website's technical requirements today and what added features it might need in the future.
  • Your budget for this project
Choosing a platform your team will love to use

Let's start with WordPress. Originally designed as a blog publishing platform, WordPress has always been touted as a more beginner-friendly option. The platform makes it easy to get from a fresh install to a finished website. If you're willing to pay for premium plugins, you can get most things done without writing any code.

Creating a page in with the Gutenberg editor in WordPress

Drupal, on the other hand, is more than a content management system. The platform allows you to integrate content and functionality in a myriad of ways. Not only is the functionality modular, but the front-end can be completely decoupled, and the back-end can be seamlessly integrated with third-party data sources.

🗺️ Just getting started with Drupal? Download our free guide: Get Started with Drupal

Defining your content structure

Let's say you're building a recipe website. Sometimes your visitors will be searching for a specific type of recipe, but other times they'll be in the mood to browse. You want people to be able to filter recipes by main ingredient, course, meal, dietary restriction, cultural origin, etc. You'd also like to recommend related recipes based on the one currently being viewed.

This type of functionality is made possible by taxonomies and content types in a CMS. Drupal's taxonomy implementation is more intuitive and extensive for sites that handle a lot of multifaceted content. You can create the vocabularies that are used to organize terms, and easily use taxonomy terms to tag content. This enables the creation of advanced search interfaces, dynamic landing pages, and content recommendations.

In Drupal, you can easily create custom content types or templates for your content—such as "Recipe"—and control what they look like and how they get displayed.

To do the same in WordPress, you can use plugins available to extend the built-in content model (made up of Posts and Pages). This is recommended for websites with a simpler content structure and it makes migrating content from one WordPress site to another much easier.

Assessing your media needs

WordPress has had its media library functionality for longer than Drupal, but the latter caught up nicely with its built-in Media module.

Media handling within WordPress

Drupal is more flexible when it comes to what can be considered "media", so you can add new media sources, like remote or local videos, add metadata to media content, and if a digital asset management (DAM) system already exists, it can easily be integrated into a Drupal site.

An example of this: Tourism Montreal has a massive library of images and videos that they use not only online, but also in brochures, on billboards, and across all sorts of other channels. To help them centralize these assets and easily use them on their Drupal site, Evolving Web created an integration for DAM system Bynder.

What's more, in Drupal, media items have fields just like content, meaning you can customize how they're displayed on a really granular level, or categorize media items so they're easier to find and reuse later. Like other aspects of Drupal, this requires careful customization through the admin UI.

Anticipating your website's needs in the future Extensibility and Plugins

Drupal and WordPress come with many features out-of-the-box. But as your company's needs evolve, you'll want to add more features to your website. As open-source projects, they both have a ton of extensions available to add to your project, as seen in the WordPress plugin directory and Drupal's module list. WordPress offers significantly more themes (free and paid), whereas most Drupal sites use a custom theme to define the look and feel.

The main difference is the model for managing contributed integrations: while virtually all Drupal modules are free and available on Drupal.org, you can find WordPress plugins all over the web, many of which are paid or freemium.

Multilingual Capabilities

Site content that needs to be translated into multiple languages often falls victim to discrepancies that slip between the cracks.

Drupal has always offered multilingual management built into the core—it's one of the main reasons Evolving Web, being based in bilingual Montreal, chose to focus on Drupal back in 2008.

WordPress, on the other hand, handles multiple languages through third-party plugins, which may be inconsistent when combined with other plugins.

Version Control and Workflow Integration

WordPress tool simply allows you to manage content versions, draft and publish content. If you have a small team and publish blog posts every other day, WordPress will certainly do the job. But if you have a big team and want to have approval processes in place, Drupal would be more in line with your needs.

Content and page view in WordPress

With Drupal, you can create content states and transitions from scratch, making it easy to implement more publishing and approval workflows. Revisions are tracked every time content is saved, and you can draft content while the existing, approved version remains visible on the website.

Content view in Drupal


No platform is 100% immune to security vulnerabilities, but the handling of security updates varies greatly from one system to another. Drupal is well-positioned to manage complicated security issues and offers database encryption. Drupal also has a security team providing a streamlined process for handling security vulnerabilities for core and contributed modules. Drupal's strong coding standards make it a favourite amongst organizations looking for a secure enterprise platform.

Whichever platform you're using, selecting modules or plugins that are vetted and reviewing custom code for vulnerabilities is a must.

So, in terms of security, no tool is better than the other, it all depends on how you configure each system and what plugins or modules you install.

How much is it going to cost you?

When looking at the cost of Drupal and WordPress, it's important to consider what you're getting for your money. WordPress and Drupal are both open-source, which means they're free to download, customize, and use. But in order to create a website, you'll need to factor in the cost of custom design, development, the QA and deployment process, and any paid plugins or third-party integrations. Figuring out the actual cost of implementation for each platform is an important step in your evaluation. Keep in mind that it might cost more to develop a flexible platform, but that this can save money in the long run as your needs evolve.

The Bottom Line

If WordPress aims to help you create a website, Drupal's goal is to let you build whatever you can dream of - which explains why it's often seen as the "developer-focused" option. Both have made significant improvements to the user experience over two decades of development, and they often strive to make the experience even better.

More importantly, Drupal and WordPress are active open source projects with large communities and a wealth of resources to get started. Both communities host meetups and events around the world; here are some WordPress ones, and here's where to find Drupal-related events.

At Evolving Web, although we are long-time Drupal contributors, we design and develop for both platforms. Some of our clients stick with WordPress for new projects because they've always used it, which is often a smart decision—don't underestimate the cost of switching.

Just getting started with Drupal? Check out our content editor training!

+ more awesome articles by Evolving Web
Categories: FLOSS Project Planets

PyBites: Common Python developer pitfalls and the 80/20 that really matters

Planet Python - Thu, 2022-06-23 10:50

Listen here:

Welcome back to another Pybites podcast episode. In this episode we talk about common pitfalls you want to avoid when becoming a Python developer:

Pitfall #1: Tutorial paralysis
Pitfall #2: Improper sequencing
Pitfall #3: Obsessing over Pythonic code
Pitfall #4: Going on your own for too long

… after that we look at the 80/20 (aka “Pareto”) to focus on  to become a well-rounded Python developer:

80/20 Rule #1: Work on bigger projects
80/20 Rule #2: Build a portfolio
80/20 Rule #3: Work with experienced developers
80/20 Rule #4: Become a content provider

If this resonates with you and you want to better your career as a Pythonista, book us in for a career chathttps://go.oncehub.com/pybites

Thanks for listening,  Any feedback, write us an email to info@pybit.es

We’ll be back next week!

Categories: FLOSS Project Planets

Rapha&#235;l Hertzog: Freexian’s report about Debian Long Term Support, May 2022

Planet Debian - Thu, 2022-06-23 08:15

Like each month, have a look at the work funded by Freexian’s Debian LTS offering.

Debian project funding

Two [1, 2] projects are in the pipeline now. Tryton project is in a final phase. Gradle projects is fighting with technical difficulties.

In May, we put aside 2233 EUR to fund Debian projects.

We’re looking forward to receive more projects from various Debian teams! Learn more about the rationale behind this initiative in this article.

Debian LTS contributors

In May, 14 contributors have been paid to work on Debian LTS, their reports are available:

  • Abhijith PA did 14.0h (out of 14h assigned).
  • Andreas Rönnquist did 14.5h (out of 25.0h assigned), thus carrying over 10.5h to June.
  • Anton Gladky did 19h (out of 19h assigned).
  • Ben Hutchings did 8h (out of 11h assigned and 13h from April), thus carrying over 16h to June.
  • Chris Lamb did 18h (out of 18h assigned).
  • Dominik George did 2h (out of 20.0h assigned), thus carrying over 18h to June.
  • Enrico Zini did 9.5h (out of 16.0h assigned), thus carrying over 6.5h to June.
  • Emilio Pozuelo Monfort did 28h (out of 13.75h assigned and 35.25h from April), thus carrying over 21h to June.
  • Markus Koschany did 40h (out of 40h assigned).
  • Roberto C. Sánchez did 13.5h (out of 32h assigned), thus carrying over 18.5h to June.
  • Sylvain Beucler did 23.5h (out of 20h assigned and 20h from April), thus carrying over 16.5h to June.
  • Stefano Rivera did 5h in April and 14h in May (out of 17.5h assigned), thus anticipating 1.5h for June.
  • Thorsten Alteholz did 40h (out of 40h assigned).
  • Utkarsh Gupta did 35h (out of 19h assigned and 30h from April), thus carrying over 14h to June.
Evolution of the situation

In May we released 30 DLAs. The security tracker currently lists 71 packages with a known CVE and the dla-needed.txt file has 65 packages needing an update.

The number of paid contributors increased significantly, we are pleased to welcome our latest team members: Andreas Rönnquist, Dominik George, Enrico Zini and Stefano Rivera.

It is worth pointing out that we are getting close to the end of the LTS period for Debian 9. After June 30th, no new security updates will be made available on security.debian.org. We are preparing to overtake Debian 10 Buster for the next two years and to make this process as smooth as possible.

But Freexian and its team of paid Debian contributors will continue to maintain Debian 9 going forward for the customers of the Extended LTS offer. If you have Debian 9 servers to keep secure, it’s time to subscribe!

You might not have noticed, but Freexian formalized a mission statement where we explain that our purpose is to help improve Debian. For this, we want to fund work time for the Debian developers that recently joined Freexian as collaborators. The Extended LTS and the PHP LTS offers are built following a model that will help us to achieve this if we manage to have enough customers for those offers. So consider subscribing: you help your organization but you also help Debian!

Thanks to our sponsors

Sponsors that joined recently are in bold.

Categories: FLOSS Project Planets

Niels de Feyter: Is Drupal Still the Leading CMS in 2022 and 2023?

Planet Drupal - Thu, 2022-06-23 06:14
The question we want to answer in this blog post is whether Drupal is still the leading CMS platform in 2022 and beyond. If you have been thinking of trying out Drupal, this article will help you decide whether it is still worth it in 2022. Let’s jump right in!
Categories: FLOSS Project Planets

parallel @ Savannah: GNU Parallel 20220622 ('Bongbong') released

GNU Planet! - Thu, 2022-06-23 04:29

GNU Parallel 20220622 ('Bongbong') has been released. It is available for download at: http://ftpmirror.gnu.org/parallel/

Quote of the month:

  Parallel has been (and still is) super useful and simple tool for speeding up all kinds of shell tasks during my career.
    -- ValtteriL@ycombinator

New in this release:

  • , can be used in --sshlogin if quoted as \, or ,,
  • --plus {/#regexp/str} replace ^regexp with str.
  • --plus {/%regexp/str} replace regexp$ with str.
  • --plus {//regexp/str} replace every regexp with str.
  • 'make install' installs bash+zsh completion files.
  • 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:


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

Submit a Goal and Help Shape the Future of KDE

Planet KDE - Thu, 2022-06-23 04:24

By Adam Szopa

I'm super excited to finally announce the start of the submission process for the brand new KDE Goals!

KDE sets goals that help the community focus on important things that need to get done in collaboration across many teams. Over the years, the community has set goals to tackle issues with usability, made it easier for new contributors to start working on KDE projects, implemented new tech that will serve us for years to come, and much more.

KDE Goals set a direction for the community and help concentrate efforts in areas deemed important by the KDE community itself. Every couple of years, new goals are selected to reflect the community's current priorities.

Jonathan Riddell and Niccolò Venerandi explain their ideas for the KDE goals during Akademy 2019.

To submit a new goal proposal, you can use the dedicated workboard and shape the future direction of the KDE community.

This stage in the process lasts until July 16th, but don’t wait until the last moment! Submit early, and use the remaining time to listen to the feedback, refine and update your proposal. Only submissions with good descriptions will move to the next stage: the community vote.

To make things easier, we provide a template ticket that you have to copy and fill out with your content. This way, none of the important parts of a good proposal will be skipped, and there will be consistency between the different proposals.

You will need an account to create a new proposal, and then use the arrow in the “Not ready for voting” column to create a new task. Don’t forget to copy the description from the template!

Remember, by submitting a Goal proposal, you are also submitting yourself as the Goal’s Champion! A Goal Champion is the face of the goal and the motivator of the initiative, but not necessarily the one that implements most of the tasks. After all, this is a community goal, so a good champion will motivate others to join in and help achieve amazing things.

If you want to learn more about the whole process, see the wiki for more details.

Don’t wait! Submit your proposal and, who knows? Perhaps your idea will be announced as one of the new goals during Akademy 2022!

Categories: FLOSS Project Planets

First Beta for Krita 5.1.0 Released

Planet KDE - Thu, 2022-06-23 04:00

We’re releasing the first beta for Krita 5.1.0 today. Krita 5.1.0 is packed with new features! For the full list, check out the work-in-progress full release notes!

Krita is a free and open source project. Please consider supporting the project by joining the Krita Dev Fund, donations or by buying training videos! With your support, we can keep the core team working on Krita full-time.

  • Even more operations can handle multiple selected layers
  • We’ve improved support for the WebP, Photoshop layered TIFF and Photoshop files, and there’s new support for the JPEG-XL file format. (See the warning below, though!)
  • We’re now using XSIMD instead of VC, improving painting performance, especially on Android where vectorization now is used for the first time.
  • The fill tools have been extended with continuous fill and a new Enclose and fill tool.
  • For Windows, we’re using a newer version of Angle to improve compatibility with video drivers and improve performance.
  • You can now configure touch controls in canvas input settings, like “Tap to Undo”.

And of course, there are hundreds of bug fixes, performance improvements, user interface refinements, improvements to the animation system (though the revamped audio system sadly didn’t make it, that’s for 5.2).

Known Issues
  • Touch gestures can be customized now, however if you were previously using touch gestures, you will now have to add them to the canvas input settings before they work again.
  • Though this release add support for the new JPEG-XL format, which supports animation, exporting and importing animations in this format gives incorrect results. A fix is pending.

Download Windows

If you’re using the portable zip files, just open the zip file in Explorer and drag the folder somewhere convenient, then double-click on the krita icon in the folder. This will not impact an installed version of Krita, though it will share your settings and custom resources with your regular installed version of Krita. For reporting crashes, also get the debug symbols folder.

Note that we are not making 32 bits Windows builds anymore.


The separate gmic-qt appimage is no longer needed.

(If, for some reason, Firefox thinks it needs to load this as text: to download, right-click on the link.)


Note: if you use macOS Sierra or High Sierra, please check this video to learn how to enable starting developer-signed binaries, instead of just Apple Store binaries.


The Android releases are made from the release tarball, so there are translations. We consider Krita on ChromeOS and Android still beta.

Source code

The post First Beta for Krita 5.1.0 Released appeared first on Krita.

Categories: FLOSS Project Planets

ImageX: Control How Your Drupal Content Looks on Facebook and Twitter Shares

Planet Drupal - Wed, 2022-06-22 20:23
Social shares can significantly increase your brand exposure, expand your reach, boost your website traffic, and benefit your SEO. Of course, all this works much better if your shared content looks attractive, relevant, and well-formatted on social media.  Content preview snippets are built automatically when someone shares a link on Facebook, Twitter, LinkedIn, and so on. They include a title, a description, an image, or other details. Can you control how they look and make them so irresistibly clickable? Yes, sure, you can do this by setting up social media meta tags on your website. 
Categories: FLOSS Project Planets

Matt Layman: Refactoring and New Features - Building SaaS with Python and Django #137

Planet Python - Wed, 2022-06-22 20:00
In this episode, I continued on the teacher checklist for the homeschooling app. We added data to the context and this required some refactoring to be able to reuse data from other parts of the app.
Categories: FLOSS Project Planets