FLOSS Project Planets

Michael J. Ross: Proprietary vs. Open Source CMSs

Planet Drupal - Fri, 2023-12-01 19:00
Proprietary vs. Open Source CMSs Michael J. Ross 2023-12-02

If and when your organization needs a new website, in most cases the best approach is to build it upon a content management system (CMS), which is like a framework that allows the website owner to easily add and modify text and multimedia content by themselves, without having to rely upon any web developers or designers — who typically begin the process by identifying the needed capabilities of the site, configuring the CMS to make that possible, and crafting its visual design.

There are two general categories of CMSs from which you can choose: Open source or proprietary. Open source systems, as their name implies, consist of source code that is open to inspection by anyone, including the thousands of web developers who contribute to each CMS project, especially any group of them dedicated to finding and fixing security vulnerabilities in the code. Consequently, any such flaws in open source CMSs — such as WordPress and Drupal — are usually detected and repaired faster than those in commercial, homemade, or other proprietary systems. The security teams of open source projects typically comprise numerous skilled programmers who have diverse technical backgrounds and who take great pride in the quality of their work; after all, their names are clearly associated with the projects to which they are dedicated. This is quite unlike the unknown programmers who work at commercial firms and receive little publicity, especially when another security hole is discovered in the CMSs built and licensed by their employers.

In my experience as a web developer tasked countless times with replacing legacy websites built on proprietary platforms, clients who had allowed themselves to get locked into using such systems oftentimes find it much more difficult to transition away from any such platform, for several reasons: Each CMS has a unique way of storing page content, menu structure, content types, tags and tag assignments, etc. within its database. In turn, each one has a unique database design, making it prohibitively difficult to write code to try to automate the process of transitioning to an alternative platform (assuming such code has not already been produced by programmers who had faced the arduous process in the past). As a result, most such projects mean that your developers and content administrators will have to do most of that work by scratch.

Another downside to proprietary website systems is that the original developers who implemented the legacy system can even make it intentionally difficult to be replaced (perhaps thinking that this provides them with better job security). For instance, one of my former clients, a healthcare organization, hired me to replace a closed and heavily-licensed CMS, with something much more open and easily maintained. (For this particular project, I chose Drupal.) Not only was the legacy CMS poorly built and difficult to replace, but the original web firm had even gone to the trouble of encrypting on disk all of the client's PDF documents, and only decrypting them when displayed to users of the website. When the client asked the original developers (who knew they were being replaced) to decrypt the client's documents, they refused. As a result, one the project manager was compelled to view every one of those PDF documents online and then save the decrypted document, for use within the new website.

There are numerous other disadvantages to choosing a closed or otherwise proprietary website system. But for these reasons alone, if nothing else, you are almost always better off going with an open source CMS.

Copyright © 2023 Michael J. Ross. All rights reserved.
Categories: FLOSS Project Planets

Marcos Dione: ikiwiki to nikola: the script

Planet Python - Fri, 2023-12-01 18:31

People asked for it:

#! /usr/bin/python3 import argparse from datetime import datetime from glob import glob from os import stat from os.path import basename, splitext import re import sys import time footnote_re = re.compile(r'\[(?P<foot_number>\d+)\]') taglink_re = re.compile(r'\[\[!taglink (?P<tag_name>[^\]]*)\]\]') image_re = re.compile(r'\[\[!img (?P<path>.*)\]\]') format_start_re = re.compile(r'^\[\[!format (?P<language>.*) """$') format_end_re = re.compile(r'^"""\]\]$') def rewrite_footnotes_line(line, text_block, footnote_block, taglink_block, foot_number): new_line = line changed = False while footnote := footnote_re.search(new_line): # remove the []s start = footnote.start('foot_number') - 1 end = footnote.end('foot_number') + 1 prefix = new_line[:start] postfix = new_line[end:] foot_number = footnote.group('foot_number') if text_block: new_line = f"{prefix}[^{foot_number}]{postfix}" elif footnote_block: new_line = f"{prefix}[^{foot_number}]:{postfix}" else: raise ValueError('found a footnote in the taglink_block!') changed = True else: if not changed and footnote_block and len(line) > 0: # '[^]: ' <-- 5 extra chars new_line = f"{' ' * (len(foot_number) + 5)}{line.strip()}" return new_line, foot_number def rewrite_footnotes(src): lines = src.splitlines() hr_count = len([ line for line in lines if line.startswith('---') ]) new_lines = [] text_block = True footnote_block = False taglink_block = False hr_seen = 0 foot_number = '' for line in lines: line_length = len(line) if line_length > 4 and line[:4] == ' ': # it's an inline code block, leave alone new_lines.append(line) continue if line.startswith('---'): hr_seen += 1 # if there is only one hr, then we have text + taglink blocks # if there are two or more, it's text + footnote + taglink blocks if text_block and hr_count >= 2 and hr_seen == hr_count - 1: text_block = False footnote_block = True # don't keep it continue elif hr_seen == hr_count: text_block = False footnote_block = False taglink_block = True # we'll need it later new_lines.append(line) continue try: new_line, foot_number = rewrite_footnotes_line(line, text_block, footnote_block, taglink_block, foot_number) except Exception as e: print(f"got `{e}´ for `{line}´.") raise new_lines.append(new_line) return '\n'.join(new_lines) + '\n' def rewrite_taglinks(src): new_lines = [] new_tags = [] for line in src.splitlines(): if len(line) > 0 and line == '-' * len(line): # don't keep it continue tags = taglink_re.findall(line) if len(tags) > 0: new_tags.extend(tags) else: new_lines.append(line) return '\n'.join(new_lines) + '\n', new_tags def rewrite_images(src): new_lines = [] for line in src.splitlines(): image = image_re.search(line) if image is not None: # get the text before and after the whole directive start = image.start(0) end = image.end(0) prefix = line[:start] postfix = line[end:] path = image.group('path') # the root to which this 'absolute' path points is the website's root new_line = f"{prefix}![](/{path}){postfix}" new_lines.append(new_line) else: new_lines.append(line) return '\n'.join(new_lines) + '\n' lang_map = dict( py='python', sh='bash', ) def rewrite_format(src): new_lines = [] for line in src.splitlines(): start = format_start_re.match(line) if start is not None: lang = start.group('language') # if there's no mapping return the same lang new_line = f"```{lang_map.get(lang, lang)}" new_lines.append(new_line) continue if format_end_re.match(line): new_lines.append('```') continue new_lines.append(line) return '\n'.join(new_lines) + '\n' def titlify(src): words = src.split('-') words[0] = words[0].title() return ' '.join(words) def test_offesetify(): src = -3600 dst = '+0100' assert offsetify(src) == dst def offsetify(src): hours, seconds = divmod(src, 3600) # "offsets are always in minutes" sounds like one item in 'things dveloper believe about timezones' minutes, _ = divmod(seconds, 60) # NOTE: time.timezone returns seconds west of UTC, which is opposite of what usual offsets go if src > 0: sign = '-' else: sign = '+' return f"{sign}{-hours:02d}{minutes:02d}" def datify(src): '''1701288755.377908 -> 2023-11-29 21:12:35 +0100''' # BUG: I'm gonna assume current timezone. # thanks SirDonNick#python@libera.chat # dto=DT(2023,11,29, 12,13,59, tzinfo=UTC_TZ); DT.astimezone( dto , getTZ('Europe/Brussels') ) #==> 2023-11-29 13:13:59+01:00 offset = time.timezone dt = datetime.fromtimestamp(src) return f"{dt.strftime('%Y-%m-%d %H:%M:%S')} {offsetify(offset)}" # zoneinfo for some reason doesn't know about CEST, so I'll just hack a mapping here tzname_to_utc_offset = dict( CEST='+0200', CET='+0100', ) month_name_to_number = dict( jan= 1, ene= 1, feb= 2, mar= 3, apr= 4, abr= 4, may= 5, jun= 6, jul= 7, aug= 8, ago= 8, sep= 9, oct=10, nov=11, dec=12, dic=12, ) def dedatify(src): # 0 1 2 3 4 5 6 7 # src=['Posted', 'Sun', '26', 'Aug', '2012', '11:27:16', 'PM', 'CEST'] month = month_name_to_number[src[3].lower()] utc_offset = tzname_to_utc_offset[src[7]] h, m, s = [ int(x) for x in src[5].split(':') ] if src[6].upper() == 'PM': h += 12 # TODO: support 12PM return f"{src[4]}-{month:02d}-{int(src[2]):02d} {h:02d}:{m:02d}:{s:02d} {utc_offset}" def build_meta(filepath, tags, date=None): filename = splitext(basename(filepath))[0] if date is None: mtime = stat(filepath).st_mtime date_string = datify(mtime) else: date_string = dedatify(date) meta = f""".. title: {titlify(filename)} .. slug: {filename} .. date: {date_string} .. tags: {', '.join(tags)} .. type: text """ return filename, meta def import_post(opts): src = open(opts.filepath).read() mid, tags = rewrite_taglinks(rewrite_footnotes(src)) dst = rewrite_format(rewrite_images(mid)) if opts.date is None: filename, meta = build_meta(opts.filepath, tags) else: filename, meta = build_meta(opts.filepath, tags, date=opts.date) open(f"posts/{filename}.md", 'w+').write(dst) open(f"posts/{filename}.meta", 'w+').write(meta) def parse_args(): parser = argparse.ArgumentParser() parser.add_argument('filepath', metavar='FILE') parser.add_argument('-d', '--date', nargs=8, help='Just pass something like "Posted Wed 12 Sep 2012 08:19:23 PM CEST".') return parser.parse_args() if __name__ == '__main__': opts = parse_args() import_post(opts)

I removed all the tests, but they all looked like this:

def test_dedatify(): src = 'Posted Wed 12 Sep 2012 08:19:23 PM CEST'.split() dst = '2012-09-12 20:19:23 +0200' assert dedatify(src) == dst


Categories: FLOSS Project Planets

KDE neon and snaps, Debian Weekly report.

Planet KDE - Fri, 2023-12-01 13:05

While the winter sets in, I have been mostly busy following up on job leads and applying to anything and everything. Something has to stick… I am trying! Even out of industry.


This weeks main focus was getting involved and familiar with Debian rust-packaging. It is really quite different from other teams! I was successful and the MR is https://salsa.debian.org/rust-team/debcargo-conf/-/merge_requests/566 if anyone on the rust team can take a gander, I will upload when merged. I will get a few more under my belt next week now that I understand the process.

KDE neon:

Unfortunately, I did not have much time for neon, but I did get some red builds fixed and started uploading the new signing key for mauikit* applications.

KDE snaps:

A big thank you to Josh and Albert for merging all my MR’s and I have finished 23.08.3 releases to stable.

I released a new Krita 5.2.1 with some runtime fixes, please update.

Still no source of income so I must ask, if you have any spare change, please consider a donation.

Thank you, Scarlett


Categories: FLOSS Project Planets

Scarlett Gately Moore: KDE neon and snaps, Debian Weekly report.

Planet Debian - Fri, 2023-12-01 13:05

While the winter sets in, I have been mostly busy following up on job leads and applying to anything and everything. Something has to stick… I am trying! Even out of industry.


This weeks main focus was getting involved and familiar with Debian rust-packaging. It is really quite different from other teams! I was successful and the MR is https://salsa.debian.org/rust-team/debcargo-conf/-/merge_requests/566 if anyone on the rust team can take a gander, I will upload when merged. I will get a few more under my belt next week now that I understand the process.

KDE neon:

Unfortunately, I did not have much time for neon, but I did get some red builds fixed and started uploading the new signing key for mauikit* applications.

KDE snaps:

A big thank you to Josh and Albert for merging all my MR’s and I have finished 23.08.3 releases to stable.

I released a new Krita 5.2.1 with some runtime fixes, please update.

Still no source of income so I must ask, if you have any spare change, please consider a donation.

Thank you, Scarlett


Categories: FLOSS Project Planets

The Drop Times: Costa Rica 2023: A Glimpse into Success at Drupal Camp

Planet Drupal - Fri, 2023-12-01 12:39
Check out what went down at Drupal Camp 2023 in Costa Rica! Get insights into sessions and stories from tech folks. It's a peek into Costa Rica's tech world – something you don't wanna miss!
Categories: FLOSS Project Planets

FSF Events: Free Software Directory meeting on IRC: Friday, December 08, starting at 12:00 EST (17:00 UTC)

GNU Planet! - Fri, 2023-12-01 12:13
Join the FSF and friends on Friday, December 08, from 12:00 to 15:00 EST (17:00 to 20:00 UTC) to help improve the Free Software Directory.
Categories: FLOSS Project Planets

Gary Benson: GitLab YAML Docker Registry client

GNU Planet! - Fri, 2023-12-01 09:13

Have you written a Docker Registry API client in GitLab CI/CD YAML? I have.

# Delete candidate image from CI repository. clean-image: stage: .post except: - main variables: AUTH_API: "$CI_SERVER_URL/jwt/auth" SCOPE: "repository:$CI_PROJECT_PATH" REGISTRY_API: "https://$CI_REGISTRY/v2/$CI_PROJECT_PATH" before_script: - > which jq >/dev/null || (sudo apt-get update && sudo apt-get -y install jq) script: - echo "Deleting $CANDIDATE_IMAGE" - > TOKEN=$(curl -s -u "$CI_REGISTRY_USER:$CI_REGISTRY_PASSWORD" "$AUTH_API?service=container_registry&scope=$SCOPE:delete,pull" | jq -r .token) - > DIGEST=$(curl -s -I -H "Authorization: Bearer $TOKEN" -H "Accept: application/vnd.docker.distribution.manifest.v2+json" "$REGISTRY_API/manifests/$CI_COMMIT_SHORT_SHA" | tr -d "\r" | grep -i "^docker-content-digest: " | sed "s/^[^:]*: *//") - > curl -s -X DELETE -H "Authorization: Bearer $TOKEN" "$REGISTRY_API/manifests/"$(echo $DIGEST | sed "s/:/%3A/g")
Categories: FLOSS Project Planets

Real Python: The Real Python Podcast – Episode #182: Building a Python JSON Parser &amp; Discussing Ideas for PEPs

Planet Python - Fri, 2023-12-01 07:00

Have you thought of a way to improve the Python language? How do you share your idea with core developers and start a discussion in the Python community? Christopher Trudeau is back on the show this week, 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

Web Review, Week 2023-48

Planet KDE - Fri, 2023-12-01 06:29

Let’s go for my web review for the week 2023-48.

KDE’s 6th Megarelease - Beta 1 - KDE Community

Tags: tech, kde

The best time to test it and provide fixes is now!


PeerTube v6 is out, and powered by your ideas! – Framablog

Tags: tech, video, self-hosting

Another great release. Definitely welcome features.


Where Is OpenCV 5? - OpenCV

Tags: tech, graphics, opencv, vision

This is an important project, they’re starting a crowdfunding. Time to give back!


Red Hat Enterprise Linux 10 plans for Wayland and Xorg server

Tags: tech, redhat, wayland

The beginning of the end for X11. The writing is now on the wall.


New Outlook is good, both for yourself and 766 third parties

Tags: tech, microsoft, privacy

They respect privacy apparently… oh wait!


Pluralistic: The real AI fight

Tags: tech, ai, ethics

Excellent piece from Cory Doctorow, it’s a good summary of where the real debates about AI should be… and it’s nowhere near the OpenAI soap opera.


UK school pupils ‘using AI to create indecent imagery of other children’

Tags: tech, ai, gpt, criticism

School bullying has a new tool to its belt… and this one is rather creepy.


GAIA: A Benchmark for General AI Assistants

Tags: tech, ai, gpt, benchmarking

That’s the beginning of interesting benchmarks for AI assistants. Still a long way to go but this is a good start.


Neil Gaiman’s Radical Vision for the Future of the Internet - Cal Newport

Tags: tech, web, blog, social-media

Hopefully this becomes true. I wouldn’t mind a post-Social Media era of the Web.


An ode to the neo-grotesque web | Redowan’s Reflections

Tags: tech, web, blog, history, ux

There was definitely something we lost from the early days of the web. It was not perfect, far from it, but some of that spark is missing.


cohost! - “Paper: You Want My Password or a Dead Patient?”

Tags: tech, medecine, usability, security, safety

How the medical sector is struggling with badly designed software. Also important to note how security is just getting in the way of nurses and doctors jobs.


Secure DNS (DoT & DoH) is not enough

Tags: tech, browser, dns, privacy

Looking forward to Encrypted Client Hello to be widely available. This was no more clear text SNI, and privacy should be really ensured when browsing the web.


Beej’s Guide to Interprocess Communications

Tags: tech, unix, processes, communication

Looks like a good resource for someone who needs to get into IPC mechanisms on UNIX flavors.


Modern C++ Programming Course (C++11/14/17/20)

Tags: tech, c++, learning

Looks like a fairly comprehensive course to get started or refresh your Modern C++


On harmful overuse of std::move - The Old New Thing

Tags: tech, c++, performance

Seen this a bit too often indeed. When people learn about std::move they tend to sprinkle it too much preventing proper optimizations. Its use should be fairly limited usually.


Live and Let Die

Tags: tech, programming, c++, raii, resources

Interesting dive on the limits of destructors and when they’re called. This can have implications on how programs are stopped.


Brandt Bucher – A JIT Compiler for CPython

Tags: tech, python, compiler

If you wonder what’s happening on the JIT front in CPython land, here is a talk explaining what’s coming in 3.13.



Tags: tech, ai, machine-learning, gpt, vim, command-line, self-hosting, foss

Interesting terminal oriented tool to interacting with LLM. Let you choose to self-host or run locally.


Distribute and run LLMs with a single file

Tags: tech, ai, machine-learning, gpt, foss, portability

Interesting experiment. It makes for a very large file but there are a few clever tricks in there.


Using Polars in a Pandas world

Tags: tech, data, pandas, polars

Good things to keep in mind if you’re pondering between pandas or polars for your data processing.


Ray Marching Fog With Blue Noise « The blog at the bottom of the sea

Tags: tech, graphics, 3d, noise

I keep being baffled at how the right type of noise can really make a difference in the rendering of some effects.


Animotion — a visual CSS animation app

Tags: tech, web, css, animation, tools

Nice little editor for CSS animations. Should definitely help building those.


The Weirdest Bug I’ve Seen Yet

Tags: tech, debugging

Definitely a weird one… still a mystery and unfortunately will probably stay this way. Having the code source could have helped nail it down, could have been interesting.


CUPID—for joyful coding - Dan North & Associates Limited

Tags: tech, craftsmanship, design, programming, quality

This is a good set of properties to strive for. Since the SOLID principles start to show their age this might be a worthwhile alternative.


Code is run more than read

Tags: tech, business, craftsmanship, foss

Interesting food for thought. The later point about the tension between business and users lately is also a good one and should be kept in mind. That’s an ethical concern you find most in companies publishing Free Software though. It’s not the full packaged solution but a good starting point.


Supporting Sustainability

Tags: tech, project-management, communication, sustainability

Interesting set of advices for better communication and more sustainable production of software.


Be Indirect in Your Research Questionnaire to Gain More Honesty

Tags: sociology, polling

Definitely this. When polling the questions shouldn’t be too obvious, otherwise people will tell you what you want to hear.


Bye for now!

Categories: FLOSS Project Planets

The Drop Times: Calendar View Module Offering Simplified Drupal Calendars

Planet Drupal - Fri, 2023-12-01 06:24
Introducing Calendar View Module: a lightweight tool by Matthieu Scarset, that streamlines the complex process of calendar creation in Drupal. With a focus on simplicity, this module offers a user-friendly approach, allowing even those with limited technical expertise to effortlessly build calendars. Seamlessly compatible with various entity types and popular Drupal modules, the Calendar View Module puts control in the hands of users, offering flexibility in how results are displayed. Explore uncomplicated calendar management with this petite yet powerful Drupal addition.
Categories: FLOSS Project Planets

Tryton News: Newsletter December 2023

Planet Python - Fri, 2023-12-01 03:00

In the last month we focused on fixing bugs, improving the behaviour of things, speeding-up performance issues and adding new features for you.

Changes for the User Accounting, Invoicing and Payments

We ease the former unique constraint on IBAN account numbers to allow now multiple equal deactivated IBAN account numbers.

When changing the company or party of an invoice, now the tax identifier are cleared when they are no longer valid.

On payment terms we now display the fields to define the payment term delta in the correct order of application.

Now it is possible to shorten or extend the fiscal year as long as all periods are still in its date range.

On refunds we now show the external payment ID from the payment provider.

Now we order payable/receivable lines by maturity date or move date.

Parties and CRM

The height of the street widget is now reduced to three lines.

New Releases

We released bug fixes for the currently maintained long term supported series
7.0, 6.0 and the penultimate series 6.8.

Changes for the System Administrator

Tryton now fully supports the update of database records via CSV data. The missing piece has been the handling for removing links in xxx2Many fields on update, which is done now. To unlink or remove existing xxx2Many target records, just exclude them in the CSV data to import. This way the imported data is similar to the stored records in the database.

Now the Tryton client cleans-up all temporary files and directories on exit.

Changes for Implementers and Developers

Now it is possible to specify a database statement timeout on RPC calls. The new timeout parameter on RPC calls helps to avoid costly database queries. The default value is 60 sec and can be modified in the configuration.

We included a new policy to require documentation update for modules when contributing new feature to an existing module. We’ve been applying such rule for one month, which already improved the documentation of some modules.

A new contrib group have been included on the heptapod repository. This includes some tools related to Tryton which provide web integration, filestore integration and even a module to send SMS. We are happy to include more similar projects in the group, feel free to contribute yours!

Authors: @dave @pokoli @udono

1 post - 1 participant

Read full topic

Categories: FLOSS Project Planets

LostCarPark Drupal Blog: Drupal Advent Calendar day 1 - Gin Admin Theme

Planet Drupal - Fri, 2023-12-01 02:00
Drupal Advent Calendar day 1 - Gin Admin Theme james Fri, 12/01/2023 - 07:00

Welcome to the 2023 Drupal Advent Calendar. Behind today’s door, we find the Gin Admin Theme, with a fantastic write-up by Ludovic Favre (Grumpy74).

Since Drupal 10, Claro has been the default admin theme for Drupal websites. It added a new look and feel improving usability for Drupal site builders and administrators. But wouldn’t be amazing if you could add new features on top of it? Well, that’s exactly what Gin Admin Theme provides.

First of all, the Gin Admin theme maintainer, @saschaeggi, is a contributor on Claro theme and the Drupal Design System. This makes it hyper relevant in terms of…

Categories: FLOSS Project Planets

Maui Release Briefing # 4

Planet KDE - Thu, 2023-11-30 22:02
MauiKit: A Toolkit for Multi Adaptable User Interfaces.

Today, we bring you a report on the brand-new release of the Maui Project.

We are excited to announce the latest release of MauiKit version 3.0.2, our comprehensive user interface toolkit specifically designed for convergent interfaces, the complying frameworks, and an in-house developed set of convergent applications.

Built on the foundations of Qt Quick Controls, QML, and the power and stability of C++, MauiKit empowers developers to create adaptable and seamless user interfaces across a range of devices, and with this release, we are a step closer to finalizing the migration to a new major version – the upcoming MauiKit4 release, now fully documented.

Join us on this journey as we unveil the potential of MauiKit3 for building convergent interfaces, the roadmap towards MauiKit4 and its new additions, and finally discover the possibilities offered by the enhanced Maui App stack.


To follow the Maui Project’s development or to just say hi, you can join us on Telegram @mauiproject

We are present on Twitter and Mastodon:

Thanks to the KDE contributors who have helped translate the Maui Apps and Frameworks!

Downloads & Sources

You can get the stable release packages [APKs, AppImage, TARs] directly from the KDE downloads server at https://download.kde.org/stable/maui/

And if you are feeling a bit curious about the Maui DE, you can download the Manjaro-based image for **testing** the project’s state as a snapshot of MauiKit3.


Note: Please be aware that this is an ISO image from a third party.

All of the Maui repositories have the newly release branches and tags. You can get the sources right from the Maui group: https://invent.kde.org/maui

What’s new?

With this update, we have focused on publishing the comprehensive documentation for the recently ported MauiKit4 Frameworks, polishing and updating the upcoming MauiKit4 frameworks code base, and starting to get the Maui Applications into shape for the migration to MauiKit4 – all while fixing bugs, improving performance, and fine-tuning all visual details.

MauiKit3 & 4

While documenting the source code – for the ported MauiKit4 frameworks – a lot of the implementation details of the visual controls have been reviewed and refined, this has resulted in a more curated set of UI elements, performance boost, cleaner code an early addition of new features.


All of the frameworks have a new information header, with information about the module, such as version number, build version, and all of the open-source tools that are part of it.

A quick overview of the changes made include:

  • Startup optimizations for the ApplicationWindow
  • The SettingsDialog layout is now cleaner when using the accompanying SectionGroup and SectionItem controls
  • Fix regressions introduced with the dialogs now based on QQC2 Dialog component
  • The TabView overview preview thumbnails are now correctly scaled and more tab information, such as the custom color and tooltip text – are now used.
  • Lazy loading elements until they are needed resulting in small performance boost
  • The AboutDialog links are clearer without using any special styling, and some parts have been refactored for a cleaner source code
  • Fixes to the GridBrowserDelegate and ListBrowserDelegate checkable state
Terminal, TextEditor & FileBrowsing

The FileDialog issues on mobile devices with the single click preference have been solved. Another bunch of small fixes include fixes to the dialog buttons, the FileBrowser action dialogs, information about tag locations, and the addition of more methods to the file management classes.

MauiKitTerminal now exposes more interface properties for handling processes that have gone silent, and functions to correctly change the current working directory.

Documents, Accounts, Calendar &ImageTools

Added the header with module information, and started the porting work.

And, as for MauiKit4:

  • The Holder control can now have an image source as the emoji
  • Many corrections in the QML syntax for the definition of catching signals.
  • The SettingsDialog is now a detached window on desktop environments
  • Added a new control DialogWindow and BaseWindow, from which ApplicationWindow now inherits. The new DialogWindow is correctly set as a dialog window and it’s modal.
  • Simplify the implementation of controls, such as the InputDialog
  • Fixes to CSD buttons controls, and now respects hints of no resizable windows or windows that should not be minimized.
  • Added a build flag `-DBUILD_DEMO=ON` for building or skipping the MauiKit4 demo app.
  • Added documentation to the sources and example files for all the visual controls
  • The SectionItem has been changed into two different variants: SectionItem and FlexSectionItem, more information about their use cases is in the documentation linked in the section below
  • Some of the previously public types that were only part of the implementation have now become private, such as the SideBar for the SideBarView
MauiKit4 Documentation

Documentation has been published for the ported MauiKit4 frameworks, as part of the migration plan. As new frameworks get ported, the accompanying documentation will be published. You can find the documentation online at https://api.kde.org/mauikit/index.html

At the time of this release, the following frameworks have now been fully documented, and have a comprehensive list of example source files:

The documentation effort also resulted in a complete set of example source files, which can be used for interested users to quickly hack and learn about MauiKit4, and for testers – and unit tests, to monitor all parts are functional.

If you are interested in contributing to the project, or in developing a MauiKit-based application, and you find any issues, bugs about the documentation text readability, or any other comments, please feel free to open a bug report on the corresponding repository issues page, and/or joining us at our telegram public chat group, where any concerns or questions will be answered promptly.

MauiKit3 Apps

Among specific new features and updates listed below, all of the Maui apps have been updated to the latest MauiKit3 changes, which also include fixes to some regressions introduced in the porting to MauiKit4 – and have also received an initial set of tweaks to get ready for their migration to MauiKit4.

Fix regression to the new dialogs versus the previous implementation.

Updated translations to multiple languages, thanks to the KDE community.

Index, Vvave & Shelf

Index now allows previewing files by default instead of opening them in an external application, and the dialog can be detached on desktop environments. Some UI elements have been improved to be loaded only when needed.

In Index, the previewer model is now independent of the current directory model, and the previews of videos and audios now have a playback button for pausing and resuming.

The albums and artist view in Vvave, now display a quick play button on hovering over the cover, to quickly start playing a full album or artist collection.

Shelf correct browsing by categories.

Clip, Nota & Station

The alerts on Station, for inactive or silent processes are now optional and exposed in the settings dialog. Now the last session can be restored if preferred.

For Nota, the crashing issues on Android have been addressed. Menus and other elements are now being lazy-loaded, making the app quicker. Also, menus have been revised and the mobile contextual menu is now correctly working.

Fiery, Buho & More

Fiery now has detachable tabs.

Maui Shell Cask, Maui Settings & More

The session startup manager now has been fully ported to Qt6 and it’s working correctly.

Many fixes were done to the Cask panels and dock, fixing regressions introduced in the migration to MauiKit4. This is still a work in progress and more development will go into this for the upcoming release of the Shell in February.

2024 Roadmap

For the upcoming release scheduled for February, most of the work will go into the Shell and its sub-projects, as decided in the release chronogram, however, this will also be the time when the remaining MauiKit frameworks will be ported from Qt5 to Qt6, those include Documents, Terminal,ImageTools, TextEditor, Accounts.

It is expected that most of the Maui Applications will be ported to MauiKit4 Frameworks and Qt6, for their new release around May 2024. And by August release it is expected that all of the Maui Project has been successfully migrated to Qt6.

To follow the Maui Project’s development or say hi, you can join us on Telegram: https://t.me/mauiproject.

We are present on Twitter and Mastodon:

New release schedule


The post Maui Release Briefing # 4 appeared first on MauiKit — #UIFramework.

Categories: FLOSS Project Planets

Paul Wise: FLOSS Activities November 2023

Planet Debian - Thu, 2023-11-30 21:53

This month I didn't have any particular focus. I just worked on issues in my info bubble.

Changes Issues Review
  • Debian packages: sponsored purple-discord x2
  • Debian wiki: RecentChanges for the month
  • Debian BTS usertags: changes for the month
  • Debian screenshots:
    • approved c-evo-dh-gtk2 fim fish foliate mpc123 nfoview qpwgraph scite viewnior
    • rejected hw-probe (photos), wine64 (desktop logo), phasex (artwork), qpwgraph (about dialog), fim/fish (help output), python-lunch (full desktop), ruby-full (website), ausweisapp2 (PII), pngtools (movie poster), x11vnc (web page,) mount (systemd), blastem (photo), ca-certificates (tiny, Windows)
  • Debian servers: extract user data from recent wiki backups
  • Debian wiki: fix broken user account, approve accounts
  • Respond to queries from Debian users and contributors on the mailing lists and IRC.

The SWH work was sponsored. All other work was done on a volunteer basis.

Categories: FLOSS Project Planets

Dirk Eddelbuettel: RcppClassicExamples 0.1.3 on CRAN: Maintenance

Planet Debian - Thu, 2023-11-30 20:03

Another upgrade triggered solely by changing CRAN standards (see previous one from five years ago). This time it concerns warnings under r-devel with -Wformat -Wformat-security so we injected a number of "%s" into Rf_error() calls.

No new code or features. Full details below. And as a reminder, don’t use the old RcppClassic – use Rcpp instead.

Changes in version 0.1.3 (2023-11-30)
  • Update Rf_error() call to not tickle -Wformat

  • Minor other packaging and continuous integration tweaks

Thanks to CRANberries, you can also look at a diff to the previous release.

If you like this or other open-source work I do, you can sponsor me at GitHub.

This post by Dirk Eddelbuettel originated on his Thinking inside the box blog. Please report excessive re-aggregation in third-party for-profit settings.

Categories: FLOSS Project Planets

Matt Layman: Switch an Existing Python Project To Ruff

Planet Python - Thu, 2023-11-30 19:00
On a recent Building SaaS stream, we switched from using flake8, Black, isort, and bandit completely over to a single tool, Ruff. Watch an experienced Pythonista work through many of the options and do a full conversion to this powerful tool
Categories: FLOSS Project Planets

Armin Ronacher: Untyped Python: The Python That Was

Planet Python - Thu, 2023-11-30 19:00

A lot has been said about Python typing. If you have been following me on Twitter (or you have the dubious pleasure of working with me), you probably know my skepticism towards Python typing. This stems from the syntax's complexity, the sluggishness of mypy, the overall cumbersome nature of its implementation and awkwardness of interactions with it. I won't dwell on these details today, instead I want to take you on a little journey back to my early experiences with Python. Why? Because I believe the conflict between the intrinsic philosophy of Python and the concept of typing is fundamental and profound, but also not new.

The concept of typed programming languages predates 2015 by a long stretch. They were not invented now. Debates over the necessity of typing are not a recent phenomenon at all. When you wanted to start a new software project, particularly something that resembles a web service you always had a choice of programming language. Back in 2004 when I started diving into programming, there were plenty of languages to chose. The conventional choice was not Python, the obvious choice was not even PHP rather Java. Java was the go-to for serious web application projects, given its typing system and enterprise-grade features. PHP was for toys, Python was nowhere to be found. PHP was popular, but in my circles it was always seen as an entirely ridiculous concept and the idea that someone would build a business on it even more so. I remember in my first year of University the prevalent opinion was that the real world runs on .NET, Java and C++. PHP was ridiculed, Python and Ruby did not appear in conversations and JavaScript on the server was non existent.

Yet here I was, I built stuff in PHP and Python. My choice wasn't driven by an aversion to static typing out of laziness but by the exceptional developer experience these languages offered, to a large part because of the lack of types. There was a stellar developer experience. Yes it did not have intellisense, but all the changes that I did appear on the web instantly. I recall directly modifying live websites via FTP in real time. Later editing web sites straight from vim on the production server. Was it terrible and terrifying? Absolutely. But damn it was productive. I learned a lot from that. They taught me valuable lessons about trade-offs. It was not just me that learned that, an entire generation of developers in those languages learned that our biggest weakness (it not being typed, and i wasn't compiled) was also our biggest strength. It required a bit of restraint and it required a slightly different way of programming, but it was incredibly productive.

There was the world of XPath, there was the world of DTDs, there was the world of SOAP and WSDL. There was the world where the inherent complexity of the system was so great, that you absolutely required an IDE, code generation and compile time tooling. In contrast there was my world. My world ad me sitting with Vim, CVS and SVN and a basic Linux box and I was able to build things that I was incredibly proud of. I eventually swapped PHP for Python because it had better trade offs for me. But I will never not recognize what PHP gave me: I learned from it that not everything has to be pretty, it has to solve problems. And it did.

But in the same way with PHP, the total surface area between me and the Python language runtime was tiny. The code I wrote, was transformed by the interpreter into bytecode instructions (which you could even look at!) and evaluated by a tiny loop in the interpreter. The interpreter was Open Source, it was easy to read, and most importantly I was able to poke around in it. Not only was I able to learn more about computers this way, it also made it incredibly easy for me to understand what exactly was going on. Without doubt I was able to understand everything between the code that I wrote, and the code that ran end to end.

Yes, there was no static type checking and intellisense was basically non existing. Companies like Microsoft did not even think that Python was a language yet. But screw it, we were productive! Not only that, we build large software projects. We knew were the tradeoffs were. We had runtime errors flying left and right in production because bad types were passed, but we also had the tools to work with it! I distinctly remember how blown away a colleague from the .NET world was when I showed him some of the tools I had. That after I deployed bad code and it blew up in someone's face, I got an email that not only shows a perfectly readable stack trace, but also a line of source code for the frames. He was even more blown away when I showed him that I had a module that allowed me to attach remotely to the running interpreter and execute Python code on the fly to debug it. The developer experience was built around there being very few layers in the onion.

But hear me out: all the arguments against dynamic languages and dynamic typing systems were already there! Nothing new has been invented, nothing really has changed. We all knew that there was value in typing, and we also all collectively said: screw it. We don't need this, we do duck typing. Let's play this to our advantage.

Here is what has changed: we no longer trust developers as much and we are re-introducing the complexity that we were fighting. Modern Python can at times be impossible to comprehend for a developer. In a way in some areas we are creating the new Java. We became the people we originally displaced. Just that when we are not careful we are on a path to the world's worst Java. We put typing on a language that does not support it, our interpreter is slow, it has a GIL. We need to be careful not to forget that our roots are somewhere else. We should not collectively throw away the benefits we had.

The winds changed, that's undeniable. Other languages have shown that types add value in new and exciting ways. When I had the arguments with folks about Python vs Java typing originally, Java did not even have generics. JavaScript was fighting against its reputation of being an insufferable toy. TypeScript was years away from being created. While nothing new has been invented, some things were popularized. Abstract data types are no longer a toy for researchers. .NET started mixing static and dynamic typing, TypeScript later popularized adding types to languages originally created without them. There are also many more developers in our community who are less likely to understand what made those languages appealing in the first place.

So, where does this leave us? Is this a grumpy me complaining about times gone and how types are ruining everything? Hardly. There's undeniable utility in typing, and there is an element that could lead to greater overall productivity. Yet, the inherent trade-offs remain unchanged, and opting for or against typing should be a choice free from stigma. The core principles of this decision have not altered: types add value and they add cost.

Post script: Python is in a spot now where the time spent for me typing it, does not pay dividends. TypeScript on the other hand tilts more towards productivity for me. Python could very well reach that point. I will revisit this.

Categories: FLOSS Project Planets

Valhalla's Things: Modern XMPP Server

Planet Debian - Thu, 2023-11-30 19:00
Posted on December 1, 2023

Just a quick mention that I’ve updated my instructions on how I configured my XMPP server to its current status under Debian Bookworm.

And yes, it took me just a bit of time, we release when we’re ready here :D

Categories: FLOSS Project Planets