Skip to content

Welcome to Planet KDE

This is a feed aggregator that collects what the contributors to the KDE community are writing on their respective blogs, in different languages

Wednesday, 16 November 2022

By Adam Szopa

Adam Szopa on stage presenting the New Goals at Akademy 2022

KDE is ready with three new Community Goals, and you’re invited to the kick-off meeting!

Join the new Goal Champions on Monday, November 28th at 17:00 CET (16:00 UTC) for a kick-off meeting. We will talk about the new Goals, the initial short-term plans, and the ways you can contribute. The meeting will be hosted on our BBB instance and will be open to all.

In case you missed the announcement at Akademy, the new Goals are:

  • KDE for All - Boosting Accessibility: This is not the first time a proposal about accessibility has been submitted, but this year the community decided it’s time to act. The author of the proposal - and now brand new Goal Champion - Carl is well known in the community for his work on KDE websites, NeoChat and more. He notes that making KDE software accessible will require cooperation from many parts of the community, from designers to library developers, and will even entail tweaking the underlying Qt toolkit. Testing will also be more challenging, as we will need to ensure that everybody’s accessibility requirements are met.
  • Sustainable Software: KDE software is many things: free, beautiful, performant, customizable… The list goes on. But how about all that and environmentally sustainable too? This is the question that Cornelius, our new Champion, will answer while working with the community towards this Goal. This topic of course is not new to him, as he helped set up funding for KDE Eco, KDE’s incursion into research to produce more energy-efficient software. Cornelius plans to help continue certifying KDE apps (like KDE’s PDF reader Okular!), set up testing for measuring the environmental impact of our software, and improving its efficiency where needed.
  • Automate and systematize internal processes: Every year the number of KDE apps grows, and at the same time we acquire more users and more hardware partners. This is of course fantastic, but at some point relying solely on volunteer efforts for critical parts of delivering quality software to everyone ceases to be scalable. Nate, our first two-time Champion, will not let die of success and will work to automate processes, change our culture on quality assurance and involve more people where responsibility lies on a single person.

Our previous Goals, Consistency, All about the Apps, and Wayland; are not forgotten! We will continue to focus on them moving forward. However, the selection of the new Goals indicate where the Community wants to go next, and it’s now time for the Champions to leverage the support of the community and the KDE e.V to deliver on those ideas.

Want to know more? The new Champions will meet you on November 28th at 17:00 CET (16:00 UTC) to discuss the Goals, so be sure to mark your calendars and see you at the meeting!

Tuesday, 15 November 2022

Join us tonight at 8PM UTC for our first Kdenlive Café of the year. Besides the usual community feedback, we’ll be sharing news about the fundraiser, 22.12 release and the roadmap for future versions.
 
Today we also release the 22.12 BETA, please give it a spin and let us know if you encounter any issues.
 
 

The post Kdenlive Café and Beta testing appeared first on Kdenlive.

Monday, 14 November 2022

Arriving for the first session

One of the lovelyest things about open community development is you can do it from home but you also get to travel to fancy places to meet your fellow devs and share ideas. Lockdowns stopped that for two years but with Akademy last month it felt like open tech life could return to a more fun state. Then came the return of a meeting that had last happened a decade ago, the Ubuntu Summit. A bunch of KDE devs were invited, me (who does KDE neon), Ade (who does Calamares installer), Scarlett (who does Snap packages), Aleix (who does Discover app installers), Harald (KDE neon), Luca (OpenRazor and hangs around KDE).

Scarlett Gives a Workshop on KDE apps as Snap packages

Unlike the old Ubuntu Developer Summits this wasn’t aimed at planning the next Ubuntu release, they had already spent the last two weeks in the same hotel doing that. This was just a fun sharing of ideas conference where people gave talks and workshops on what they were working on.

Me and Scarlett gave a lightning talk on KDE Snaps and Scarlett gave a workshop on KDE Snaps. KDE has over 100 apps in the Snap store, a great way to get KDE software promptly.

Ade gave a talk about his Calamares distro installer and compared it to Ubuntu’s installer which is being rewritten in Flutter. Harald gave talks on KDE neon and on secrets of KDE Plasma. Aleix spoke about the KDE community and what we do. Ade also talked about KDE Frameworks.

KDE 1 mascot Kandalf is Harald’s favourite character

There was plenty of talks on Snaps, it’s how Canonical makes money where it’s used in embedded devices, if you can call a 10 ton steel press an embedded device. Adam Szopa works for KDE and also Canonical and he gave a talk on Linux gaming, I hear Canonical has a whole team just to get gaming working well. Canonical also makes money from Microsoft’s Windows Services for Linux (WSL) and there were a bunch of talks showing this off. Using JuJu to set up servers is another large project Canonical works on which had some talks. Flutter seems very fashionable, a rival to Qt that is gaining attention, it uses the Dart programming language and is designed for mobile devices but Canonical has been working with Google to port it to Linux desktops (using GTK).

KDE spods at Ubuntu Summit 2022

It was great to catch up with Erich Eickmeyer who makes Ubuntu Studio and works for Kubuntu Focus selling laptops with Plasma. Ubuntu Studio ships with Plasma of course. I spoke to him about Wayland and he says the next release (for Ubuntu plus Plasma) is looking great for Wayland.

It was also great to meet Simon Quigley (tsimonq2) who does Lubuntu and has worked on Kubuntu. LxQt is a lightweight Linux desktop and probably one of the largest users of KDE Frameworks outside KDE, they use KScreen, KIdleTime, Solid, KWindowSystem and probably other Frameworks.

Head Honcho Shuttleworth

Canonical is reported to be profitable and hiring (after some “brutal times”) and spirits seem to be good. They have a community team now and are keen to engage.

There were also inspiring talks from e.g. a Zimbabwean developer talking about the challenges of taking software development on donkeys here he lives. Geopolitics is an interesting subject but one aspect I’ve not thought about before is how countries with a coastline can connect their internet directly to the world while countries without such as Zimbabwe are dependent on neighbouring countries to pass it through.

Lorenzo’s Music is an open source band who create on Github using Ubuntu Studio and Kdenlive. They gave a great performance on the river boat cruise under the Charles bridge in Prague.

Thanks to Canonical for sponsoring travel and helping us re-engage.

Monday, 14 November 2022

KDE today announces the release of KDE Frameworks 5.100.0.

KDE Frameworks are 83 addon libraries to Qt which provide a wide variety of commonly needed functionality in mature, peer reviewed and well tested libraries with friendly licensing terms. For an introduction see the KDE Frameworks release announcement.

This release is part of a series of planned monthly releases making improvements available to developers in a quick and predictable manner.

New in this version

Baloo

  • [TermGeneratorTest] Reduce code duplication
  • Correct and simplify OrpostingIterator constructor
  • Convert kded metadata to JSON

Breeze Icons

  • Add accessories-dictionary-symbolic symlink to a book-looking icon (bug 461033)
  • Add new icons for Fortran source code
  • Add 64px audio-headset, fix issues with 64px audio-headphones (bug 447536)
  • Add data-success icon
  • Add icon for OpenOffice extensions

Extra CMake Modules

  • Make the expiry of these artifacts more reasonable, 3 months is a bit excessive
  • avoid lib64 directory on NixOS
  • Add quotes, otherwise if is malformed when envvar not defined
  • Allow KF_IGNORE_PLATFORM_CHECK to be set through an environment variable

KDE Doxygen Tools

  • remove link to Other KDE Software

KArchive

  • Make error messages translatable

KAuth

  • Config.cmake.in: declare static dependencies

KBookmarks

  • Don’t use KXmlGui when building without deprecated stuff

KCMUtils

  • Remove space
  • Kauth doesn’t build on windows
  • KCModuleQML: Make sizeHint() check more robust

KCodecs

  • Prepare for 5.15.7: adapt test

KConfig

  • kconfig_compiler: switch away from bit mask for signal enum values
  • kconfig_compiler: fix generation of bit masks enum items for signals
  • kconfig_compiler: perform signals count check earlier
  • Fix KConfigGui initialization in case of static builds (bug 459337)

KConfigWidgets

  • avoid stating files during restore of recent files (bug 460868)
  • Ensure icon is always set for recent files actions
  • Add file icons to open recent menu
  • Replace custom color preference code with KColorSchemeWatcher
  • Intialize default decoration colors
  • [KCommandBar] Fix shortcut background

KContacts

  • Add setAddresses

KCoreAddons

  • Add missing . in error string
  • KPluginMetaData: Check applicationDirPath first when resolving plugin paths (bug 459830)
  • Fix static build of downstream consumers
  • KFileSystem: add Fuse Type; use libudev to probe underlying fuseblk type

KDeclarative

  • Make QQmlContext’s contextObject outlive the QQmlContext
  • Completely deprecate KDeclarative class
  • Port manual test app away from deprecated KDeclarative API

KDELibs 4 Support

  • Add CMake option to build WITH_X11

KDesignerPlugin

  • add win ci, for kdelibs4support

KDESU

  • Add missing deprecation wrapper for KDEsuClient::isServerSGID impl

KFileMetaData

  • OdfExtractorTest: Add test cases for Flat XML documents
  • OdfExtractor: Only go looking for textual content in office:body
  • OdfExtractor: Support “Flat XML” variants
  • PngExtractor: Only extract metadata when it was asked for

KDE GUI Addons

  • Add misisng find_dependency’s for static builds
  • systemclipboard: Don’t signals data source cancellation (bug 460248)
  • Guard the global was actually intialised
  • Implement destuctor for keystate protocol implementation
  • kcolorschemewatcher: make changing colour schemes work as expected on macOS
  • [kcolorschemewatcher] Default to light mode, where AppsUseLightTheme isn’t set (notably Windows 8.1)
  • enable automatic dark-mode switching on macOS
  • Add API for system color preference reading

KI18n

  • Try fixing build on Windows mingw
  • Add missing include

KImageFormats

  • Don’t install desktop files for image formats when building against Qt6
  • raw: Don’t seek back if we were asked to read too much
  • jxl: indicate when all frames have been read
  • avif: indicate when all frames have been read
  • avif: always indicate endless loop (bug 460085)
  • avif: return false in canRead() when imageIndex >= imageCount (bug 460085)
  • Auto-rotate input images in readtest
  • jxl: remove C-style casts
  • avif: Use reinterpret_cast instead C cast
  • heif: replace C cast with static_cast
  • heif: use heif_init/heif_deinit with libheif 1.13.0+
  • FindLibRaw: fix include dir, should not contain prefix libraw/ (bug 460105)
  • Fix duplicated tests
  • ANI partial test and PIC test added
  • PSD: impreved support to sequential access device
  • Fix messages
  • CMakeLists: enable EXR test
  • Added EXR test image
  • Fixes for sequential devices

KIO

  • Add new base class for thumbnail plugins
  • Fix string formatting in “Do you really want to delete it?” message
  • [kdiroperator] Don’t add actions to actioncollection when building without deprecated API
  • Deprecate KDirOperator::actionCollection
  • [kfilewidget] Don’t remove mkdir action from the action collection
  • Fix deprecation of virtual functions
  • Deprecate KDirOperator::setView(QAbstractItemView *)
  • [kcoredirlister] Deprecate setMimeExcludeFilter
  • [kcoredirlister] Rename showingDotFiles to showHiddenFiles
  • [kdiroperator] Rename setView to setViewMode
  • [kcoredirlister] Deprecate itemsFilteredByMime
  • [kdiroperator] Remove usage of itemsFilteredByMime
  • [knewfilemenu] Decouple from KActionCollection
  • KPropertiesDialog: Add tooltip for magic mime type, too
  • kurlnavigatortest: add test for absolute path in relative path handling
  • KUrlNavigator: fix handling absolute paths
  • kurlnavigatortest: add test case for relative hidden directory
  • Remove KCrash dependency on Android
  • KFilePlacesModel: Move open files error on teardown to KIO
  • Add a CMake option, off by default, to control ftpd and wsgidav usage
  • Conditionally chow hidden folders in the location bar’s dropdown menu
  • fix dav overwrite
  • don’t disable tests
  • Warning dialogs: Change button text from “Delete” to “Delete Permanently”
  • AskUserActionInterface: add DeleteInsteadOfTrash deletion type (bug 431351)
  • WidgetsAskUserActionHandler: fix showing file name for single url
  • Message box methods: add API using “action” terms instead of “Yes” & “No”
  • Deprecate defaulting to “Yes” & “No” message box buttons
  • Add messagebox: KIO worker for testing messageBox() calls from worker
  • Remove service type definition for urifilter plugins
  • DeleteOrTrashJob: it’s included in KF 5.100
  • [ioslaves/remote] Convert kded metadata to JSON
  • Fix missing details in message dialogs from worker
  • UserNotificationHandler: fix messagebox type mismatches
  • [kdiroperator] Allow accessing actions without KActionCollection
  • KDirOperator: use KIO::DeleteOrTrashJob
  • Add DeleteOrTrashJob
  • [kopenwithdialog] Handle absence of a mime comment gracefully
  • Port Windows-only code away from deprecated KIO API
  • KFileItemListProperties: Better respect ioworker metadata
  • KIO HTTP: Store error string for deferred result
  • KFilePlacesView: Show busy indicator while (un)mounting a device
  • KFilePlacesModel: Change teardown action to indicate teardown in progress
  • KFilePlacesModel: Add DeviceAccessibilityRole
  • KFilePlacesItem: Allow passing roles for dataChanged

Kirigami

  • icon: itemSize should be size
  • FormLayout: remove top margin for TextArea
  • BannerImage: fix title background not aligning to vertical center
  • TabletModeWatcher: reduce the amount of blocking calls we do
  • SingletonCreation: Make sure singletons are reused with the engine
  • ToolBarLayout: Do not crash when a null action is passed
  • set a11y properties on swipelistitem actions buttons
  • Set is so that if there is at least 1 action in the CategorizedSettings pagestack that the current index is set to it on open
  • DefaultCardBackground: Use simple drop shadow and less shadow
  • FormLayout: Use const instead of let where possible
  • Examples + tests: Update usage of actions in Page components
  • Improve appearance of ListSectionHeader and remove list item separators by default
  • GlobalDrawerActionItem: Simplify spacing
  • GlobalDrawerActionItem: Use consistent spacing between icon and label, and left margin
  • GlobalDrawerActionItem: Make icon size readonly
  • GlobalDrawerActionItem: Don’t increase icon size for mobile
  • Fix verticalAlignment bindingloop in PlaceholderMessage
  • WheelHandler: Fix memory leak
  • ActionToolBar: let keyword not used
  • ListSectionHeader: Elide when text overflows
  • FormLayout: remove hack
  • Remove cases where hoverEnabled is used in place of supportMouseEvents
  • SearchField: Check for acceptableInput before firing an event
  • GlobalToolBar: Expose the title padding property
  • Check preventStealing earlier in ColumnView (bug 460345)
  • Don’t load page header components asynchronously by default
  • SwipeListItem: Make sure we only show the aggressive warning when it’s due (bug 455789)
  • imagecolors: don’t early return when there is no window for QQuickItem
  • Avatar: fix blurry avatar when using Qt scaling (bug 356446)
  • Fix ginormous FABs
  • PC3/TextField,SearchField: Fix mirroring detection
  • SearchField: Align search icon vertically
  • SearchField,ActionTextField: Use non-destructive clear() method
  • Doc: ActionTextField: Use StandardKey instead of hardcoded Ctrl+F string
  • SearchField: Bump QML imports and fix code style
  • BasicListItem: Make text more readable when using fadeContent property
  • FormLayout: Fix nullable items
  • Remove renderType workaround that was fixed in Qt 5.14.0 RC1
  • Replace sizeForLabels with Units.iconSizes.medium/large where relevant
  • AboutItem: make license text selectable
  • make example build on qt6
  • Remove unnecessary break statement

KItemModels

  • Also fix kconcatenaterows_qml test for static builds
  • Fix ksortfilterproxymodel_qml test for static builds (bug 459321)

KItemViews

  • KCategoryDrawer: Update design to match Kirigami list categories

KNewStuff

  • KF5NewStuffCoreConfig.cmake: fix resolving QT_MAJOR_VERSION at generation
  • [kmoretools] Replace QDesktopServices::openUrl with KIO::OpenUrlJob
  • Add qtdesigner plugin for KNewStuffWidgets

KParts

  • [partloader] Remove references to KPluginLoader from docs
  • Don’t install service type definitions when building without deprecated stuff
  • Add new functions to instantiate parts

KRunner

  • runnermanager: only emit queryFinished when previous jobs are still running

KService

  • Do not warn if KService("") is instantiated

KTextEditor

  • Set default mark type only if control is pressed
  • Don’t install desktop file for katepart when building against Qt6
  • CamelCursor: Improve complex unicode handling (bug 461239)
  • we want to shift unsigned ints
  • auto completion got me
  • remove file name for saveas only for remote files (bug 461161)
  • Simplify and optimize KateScriptDocument::anchorInternal
  • Indenter: Dart and Js fixes
  • Fix js/dart indent in array
  • Make Tab/Shift+Tab completion work
  • Bring Shell-like tab completion back, and make it work
  • Remove select all and deselect from context menu
  • Remove double message about lack of access rights
  • KateCompletionModel: Dont sort Group::prefilter
  • KateCompletionModel: Simplify changeCompletions()
  • Avoid detaching currentCompletion
  • KateCompletionModel: Remove not needed setters
  • Remove KateCompletionModel config from KateCompletionWidget
  • Avoid excessive filtering and calls to modelContentChanged
  • Completion: Avoid extra model reset
  • Remove “Preview:” label in themes tab
  • Fix fallback logic
  • Fix tab order in search (bug 440888)
  • fix clipboard selection update on shift mouse click (bug 443642)
  • Ensure to set highlight on reload when file type was set by user (bug 454715)

KUnitConversion

  • Add missing forms for mass units: tonnes, ct, lbs
  • add singular abbreviation forms as match strings for teaspoon and tablespoon

KWallet Framework

  • mark some binaries as non-gui
  • Add support for plain transfer algorithm to Secret Service API (bug 458341)
  • Change naming and order of FreedesktopSecret members to match the spec

KWayland

  • [registry] Bump PlasmaWindowManagement version to 16

KWidgetsAddons

  • avoid stating files during restore of recent files (bug 460868)
  • Add a method to remove all actions in one go
  • KTitleWidget: Constraint the frame size so it properly aligns (bug 460542)
  • KPageDialog: Collapse margins also for flat list
  • KToolBarPopupAction: Apply popupMode to existing widgets
  • Deprecate KStandardGuiItem::yes() KStandardGuiItem::no()
  • KMessageDialog: add API using “action” terms instead of “Yes” & “No”
  • KMessageBox: add API using “action” terms instead of “Yes” & “No”
  • Fix potential crash in fix for 458335

NetworkManagerQt

  • DeviceStatistics: Replace setRefreshRateMs call with manual DBus call
  • Remove dead CMakeLists code

Plasma Framework

  • PC3/BusyIndicator: Disable hover, drop unused id, and shorten a comment
  • Never time out tooltip while its control is still hovered (bug 397336)
  • windowthumbnail ‘count > 0’ is always true
  • Dialog: Avoid using plasmashell protocol when running in kwin
  • Make KPackage an implementation detail of Plasma Applets
  • Deprecate public includes for KPackage
  • templates/cpp-plasmoid: Load icon as svg rather than svgz
  • templates/cpp-plasmoid: Remove unneeded EnabledByDefault and X-Plasma-MainScript keys
  • templates/cpp-plasmoid: Consistently require ECM, KF and Qt dependencies
  • templates/cpp-plasmoid: Port to newer KPackageStructure key instead of ServiceTypes
  • templates/cpp-plasmoid: Do not embed json file in plugin
  • Create SVGZ files without embedded filename & timestamp -> reproducibility
  • Oxygen: Drastically improve buttons
  • Oxygen: Invert input box color and increase size
  • Oxygen: Update Inkscape Metadata
  • Oxygen: Fix tab bars not rendering, add N/E/S/W sides
  • Oxygen: Fix active button size
  • ExpandableListItem: Port to explicit signal handler parameter names
  • Center the AppletPopup dialogs when possible
  • framesvgitem: avoid unnecessary type conversion in resizeFrame
  • framesvgitem: use QQuickItem::size() directly in resizeFrame
  • framesvgitem: port two qMax to std::max
  • framesvgitem: remove one unnecessary maxvalue comparison
  • PC3/BusyIndicator: Revert RotationAnimator back to property interceptor syntax
  • PC3/BusyIndicator: Fix hang & rapid jump on start
  • PC3/BusyIndicator: Don’t do extra work when animation starts
  • PC3/BusyIndicator: Port opacity animation to Easing.OutCubic
  • PC3/BusyIndicator: Center the active/rotating part of the control
  • PC3/BusyIndicator: Fix QML/JS code style, bump imports
  • fix refcount of dialog instances
  • Fix name of margin hints of task manager (bug 456076)
  • PC3/TextField,SearchField: Fix mirroring detection
  • SearchField: Align search icon vertically
  • SearchField,ActionTextField: Use non-destructive clear() method
  • PC3/Slider: Fix tick marks direction for vertical orientation
  • Manage the case someone is asking for the attached of an applet
  • Fix scrollbar visibility when contentWidth or contentHeight is 0
  • Drop deprecated KDeclarative::setupEngine calls
  • iconitem: add test for devicePixelRatio
  • svgitem: fix blurry icon on HiDPI screens
  • iconitem: fix blurry icon on HiDPI screens
  • Revert “Install a plugin for org.kde.plasma.plasmoid”
  • Add 5G network icons
  • ExpandableListItem: Simplify Accessible.description expression
  • ExpandableListItem: Use uniform standard margins for actions list
  • Perform initialization in initialization list
  • IconItem: Use standard Units.longDuration for cross-fade animation

Prison

  • Convert code128 data table to binary literals
  • Simplify QR reference PNG images

QQC2StyleBridge

  • Never time out tooltip while its control is still hovered
  • TextField: Use effectiveHorizontalAlignment without extra mirroring for placeholder

Syntax Highlighting

  • Jira: improve highlighting
  • Jira: fix Bold and Stroked Out highlight at start of line (bug 431268)
  • CMake: fix nested parentheses highlinthing (bug 461151)
  • systemd_unit: update to systemd v252
  • Common List: optimize (~40% faster)
  • Common Lisp: highlight numbers preceded by -
  • Common Lisp: highlint ‘symbol and #‘symbol
  • Common Lisp: add operators
  • Common Lisp: add .el extension (emacs script)
  • powershell.xml: Recognize variable substitutions in double quoted strings
  • powershell.xml: Recognize single quoted strings
  • debchangelog: add Forky
  • debchangelog: add Lunar Lobster
  • CMake: return() as Control Flow
  • CMake: add Control Flow style for if, else, while, etc (bug 460596)
  • Fix name (for consistency with CartoCSS MML)
  • Better highlighting for some GIS-related file formats
  • VHDL: support of VHDL-2008
  • Nix: fix decimal numbers format and some performance changes
  • Alerts: add NO-BREAK SPACE (nbsp) as keyword deliminator (bug 459972)
  • Git Rebase: add missing commands
  • Git Ignore: more highlight
  • cmake.xml: New features for CMake 3.25
  • Bash/Zsh: fix Parameter Expansion style for } in ${…}
  • Zsh: add folding for group command
  • Bash/Zsh: fix group command with coproc statement (bug 460301)
  • use a constant container with range-based for loop to avoid copies
  • Ansi/HtmlHighlighter: prefer QTextStream::readLineInto() to QTextStream::readLine() to avoid allocation
  • fix AnsiHighlighter::highlightData() with valid definition, but without any context
  • increment version number after keywords change
  • cpp.xml: add missing QStringTokenizer class for highlighting
  • Add folding for maps, structs and lists in elixir
  • Add opendocument “flat XML” file types
  • Add do: to tests
  • Undo unintended line formating
  • Remove any reference to fn being a definition
  • Adapt tests to new output
  • Add folding to elixir code

Security information

The released code has been GPG-signed using the following key: pub rsa2048/58D0EE648A48B3BB 2016-09-05 David Faure [email protected] Primary key fingerprint: 53E6 B47B 45CE A3E0 D5B7 4577 58D0 EE64 8A48 B3BB

Sunday, 13 November 2022

I have found a new bugbear. Something to be creatively annoyed about. I’m going to call it 80/20 refactoring, to express the idea that a refactoring is started, but then not finished. Probably because doing all of the edge cases in a refactoring is hard.

Premise

Suppose we have a large-ish codebase, with a repeated pattern of code. Thanks to the magic of copy-and-paste, that pattern will be, say, a half dozen lines of code, repeated over and over, but also sometimes subtly changed. Something like this:

SerializingBuffer request;
request.start(ID_RESET);
request.add(0);
request.add("timed-out");
connection.send(&request);

You don’t have to understand what this is doing, just that there’s a pattern of code. Variations will include:

  • having this in a function, with request passed in as a pointer,
  • same, but as a reference,
  • variables renamed rqst and conn because someone didn’t watch Kate Gregory’s Naming is Hard: Let’s Do Better talk,
  • an extra 0 somewhere.

Refactoring

My gut feeling says there’s a refactoring to be done here: make a function ReportTimeout() that takes a connection reference and does all the things. It hides the buffer, it hides the exact details of what is being sent, and it has a nicer name.

This is the point where 80/20 refactoring comes in, and I am absolutely guilty of doing just this: the 80% of cases that are easy to deal with are done in no time, the refactoring lands, there’s a net reduction of lines-of-code, lovely. Interest turns elsewhere, and now in many ways the codebase is worse off once the here-and-now knowledge about the refactoring is lost.

There’s one case, one particular function, used a lot, and then there’s a handful (20%) of cases that sorta-kinda looks like they would fit that function, but they don’t. Chesterson’s fence? Is there something special going on? Removed from the here-and-now of the refactoring, re-discovering what those remaining 20% of copied chunks of code mean, and how they can be shimmed into the new function, is so much harder.

So what happens is the nice bits get nicer, and the ugly bits get uglier, until there’s nothing left to do with the nasty bits but throw them away and start over – hopefully this time, using the newer functions from the outset.

Takeaway

Don’t put away the refactoring tool until it’s really done. Cover all of the edge cases. Anything that you could refactor, and don’t, comment the heck out of it why it doesn’t fit the new stuff. Then you won’t end up asking the question “why have we got 15 flavors of shit?” (ObXKCD 927)

Saturday, 12 November 2022

From 01/11 until 05/11, I went from São Paulo to Foz do Iguaçu in Paraná to tend to the KDE booth at the biggest free software event of Latin America, Latinoware 2022, together with two great people who have been attending Latinoware for years, Pedro and Barbara, and who have been contributing to KDE longer … Continue reading "KDE Network Brazil – Latinoware 2022"

Not even all-that-long-ago I ported about playing around with Rust to build a little bot that gets my FreeBSD bug counts (currently me:0/cmake:9/desktop:24/kde:34, thanks for asking) and posts it to a social thing I no longer participate in. So it’s time to re-jig the bot, switching to Mastodon posting (my profile, thanks for asking) and re-implement it in a different language. I’m vaguely inclined to try some more Haskell, or Zig, or Dart. Very different kinds of language, but that’s kind of the point.

I’m happy to announce that the support for WebVTT format and all the nice features that it brings is finished.

Along with reading and writing of WebVTT subtitles, Subtitle Composer can now fully understand CSS - Cascading Style Sheets, subtitle positions and alignment.

A new panel has been added that allows syntax-higlighted CSS editing and subtitle position/alignment adjustment. Of course all edits are visible everywhere in app in realtime.

Some user interface elements are still being worked on and should be available in following days, in particular:

  • Buttons for assigning class/voice tags to selected text
  • Intuitive video overlay with handles to easily drag/size individual subtitle areas
  • Ability to show/hide style/class/voice tags/elements

Release 0.8.0 is planned once above list is done and potential bugs that come up are resolved. Depending on community interest - ASS/SSA format improvements could be done to benefit from things that WebVTT support brought.

As usual you can try out precompiled binaries or AppImage of git development version (the subtitlecomposer-git package) from download page or build it yourself from invent.kde.org.

— Mladen

At KDE Akademy early October I presented how we could get push notifications for KDE applications, something I haven’t written about here at all yet. Time to rectify that.

Push Notification

Push notifications are a mechanism to support applications that occasionally need to receive some kind of information from their server-side part, and where receiving in a timely manner matters. Chat applications or weather and emergency alerts would be examples for that.

Technically applications can achieve this by keeping a long living network connections to their respective server. This is however neither efficient nor robust, especially on resource-constrained or battery powered devices. Each additional network connection costs energy to be kept alive, and all this only works as long as the application is actually running, which conflicts with aggressive suspending of (background) applications to conserve resources.

Push notifications address this by moving parts of this to shared platform infrastructure. A platform service keeps a single network connection to a central server which collects all messages for a specific device. On receiving a message on the client the respective application is activated and the message is delivered to it.

This avoids keeping more than one long-running network connection alive, and it works no matter whether the receiving application is running or not.

Proprietary Platforms

Conceptually that works, but practically we have the problem that those systems only really exist on proprietary platforms, in particular the mobile ones of Google and Apple. Those systems are neither usable on platforms we are more interested in, nor can they be replaced by a more trusted and/or free alternative on their platforms.

The proprietary ecosystems also have the additional problem of the high abuse potential of giving app vendors the ability to start their app remotely on your device.

So, none of this is really what we want and you can probably guess where this is going, we need to build this ourselves.

UnifiedPush

This isn’t something specific to KDE though, and fortunately the FOSS community has already done the groundwork, in form of the UnifiedPush standard.

Diagram of the UnifiedPush architecture.
UnifiedPush architecture diagram (by UnifiedPush, Apache-2.0).

The UnifiedPush standard defines the interfaces that the client and server parts of an application can use to register for and receive push notifications. These interfaces aren’t particularly complicated and use standard protocols like D-Bus on the client and REST on the server.

There isn’t just a standard though, multiple implementations exist as well, such as Ntfy or NextPush. Those are pretty solid when comes to their server part and the Android client components, but the Linux client components are lagging a bit behind.

KUnifiedPush

Fortunately that is something we can fix, which is what KUnifiedPush attempts to do. This currently contains three separate components:

  • A connector library for use by applications on the client. This allows registering for push notifications and receiving push messages.
  • A distributor daemon for the client platform which supports Ntfy, NextPush and Gotify as push providers.
  • A configuration module (KCM) for the distributor daemon, for configuring a push provider and for managing applications currently registered for push notifications.
Screenshot of push notification settings page showing push provider configuration and applications registered for push notifications.
KUnifiedPush KCM embedded in System Settings.

KUnifiedPush gives you full transparency and control over which applications are using push notifications and why, which goes a long way already to mitigate potential abuse like on the proprietary platforms.

It also enables the use of self-hosted infrastructure, which is great but probably something only available to a minority of our users. In order for applications to be able to rely on push notifications being generally available we would also need a default configuration that works out of the box though.

Infrastructure

Having such a viable default configuration practically means we also need to host the push provider server ourselves, without the need for signing up for any form of user account. Technically that is possible, as Ntfy shows with their open server.

However, operating infrastructure also comes with privacy and legal challenges:

  • A push provider server holds active network connections to basically all clients, and thus also sees the times they are active and their IP addresses.
  • Push message payloads are seen by the push provider. Applications are supposed to encrypt those, but there is no way of enforcing that.
  • Push message might need to be stored for a limited period of time (say a day or two), for clients currently unable to connect.
  • There is no authentication on either side of this. That is somewhat by design to avoid even more sensitive identifiers and data to be around, but it also makes it more difficult to block malicious actors.
  • It is theoretically possible to abuse this for storing small amounts of arbitrary data. Given the abuse issues we had with the pastebin service, that could be problematic, even if this is far more involved to (ab)use, and only works for a much shorter period of time.

None of this is an insurmountable obstacle I think, but these are clearly things needing careful consideration.

So, is this worth pursuing? Do we as KDE want to host and provide generally available push notification infrastructure?

The Malayalam serif font RIT Rachana and its sans-serif counterpart MeeraNew have enjoyed a wide array of improvements in the past months; and are available now for download and use.

Some notable improvements are listed here:

  1. Entire Malayalam character set defined in Unicode 15, including archaic and vedic characters.
  2. All characters — especially vowel signs — now belong to proper Unicode category GDEF class (thanks to Liang Hai for pointing out the correction), removing a workaround put in place just for Adobe InDesign. This workaround is not required when using HarfBuzz shaping engine (which you should anyway).
  3. Improved design of old-style figures 0, 1 & 2 in RIT-Rachana.
  4. Standalone dependent glyphs of pre-base ra (reph) and below-base la can be displayed with ‘zwj+് +‌ ര/ല’ respectively, useful for informational purpose (when writing a typography specific article, for instance). These characters otherwise always conjoin with the base character.
Reph and below base La standalone glyphs
  1. Major improvements in shaping rules to adhere to language rules even better: double consonants are always joined properly in context; even for unusual combinations. Correct shaping for below instance can be obtained by adding a ZWNJ before but the advanced shaping rule is smarter to not require encoding corrections.
Double consonants are shaped first..
  1. Improved underline position (although thou shalt question thyself why use underline in Indic scripts), which is now also respected by LibreOffice 7.5 thanks to Khaled Hosny. This bug was reported many years ago.
Underline position improved
  1. ന്‍ +‌ ് + റ → ന്റ (Unicode 5.1 atomic chillu nta) support added upon request.

… kerning improvements and many more tweaks and fine tuning. As usual, both typefaces are free & open source software, available at Rachana website. They will be available shortly in Fedora 36 & 37 as an update.