Skip to content

Friday, 19 May 2023

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


Hector Martin: “why I chose KDE as the default desktop environment for Asahi”

Tags: tech, foss, kde

Well done team, it’s quite a lot about why the community is great!

https://social.treehouse.systems/@marcan/110366434912340959


Meredith Whittaker: Consciousness isn’t AI risk—it’s the corporations

Tags: tech, ai, machine-learning, gpt, ethics, criticism

Very good interview. She really point out the main issues. Quite a lot of the current debate is poisoned by simplistic extrapolations based on sci-fi. This distracts everyone from the very real and present problems.

https://www.fastcompany.com/90892235/researcher-meredith-whittaker-says-ais-biggest-risk-isnt-consciousness-its-the-corporations-that-control-them


LLMs and plagiarism: a case study - lcamtuf’s thing

Tags: tech, gpt, copyright

The copyright problem in all this is becoming more and more obvious…

https://lcamtuf.substack.com/p/large-language-models-and-plagiarism


Introducing DevPod - Codespaces but Open Source

Tags: tech, developer-experience, tools, vendor-lockin, foss

Interesting new tool for easily setting up dev environments. The real added value to previous such tools is it’s open source nature and the fact that you can fully control on which infrastructure the environments will be created.

https://loft.sh/blog/introducing-devpod-codespaces-but-open-source/


Database Architects: The Great CPU Stagnation

Tags: tech, cpu, performance, cost

Interesting take. Will it lead to paying more attention to performance in software? Will it be the rise of the specialized CPUs? Time will tell.

https://databasearchitects.blogspot.com/2023/04/the-great-cpu-stagnation.html?m=1


Security implications of HTTP response headers | Snyk

Tags: tech, security, web, http

Interesting list. Definitely to keep in mind when developing and deploying a web application.

https://snyk.io/blog/security-implications-of-http-response-headers/


Properties | Pydon’t 🐍 | Mathspp

Tags: tech, python

Good primer on Python properties. Opens the door to lower level mechanisms in the language.

https://mathspp.com/blog/pydonts/properties


Real Multithreading is Coming to Python - Learn How You Can Use It Now | Martin Heinz | Personal Website & Blog

Tags: tech, programming, python, multithreading

Very early days and still hackish to use but that’s definitely big news for the Python ecosystem.

https://martinheinz.dev/blog/97


Ice and Fire: How to read icicle and flame graphs

Tags: tech, performance, optimization

Good explanation of how flame graphs are produced and how to read them. Gives a few tips on what to look for to optimize.

https://www.polarsignals.com/blog/posts/2023/03/28/how-to-read-icicle-and-flame-graphs/


Expand Contract for Databases and Services | Andy Dote

Tags: tech, databases, availability

Updating database schema or interfaces between services should take time if you want to limit the downtime. The extra work involved might mean you should accept a little downtime instead. It probably should be on a case by case basis rather than a blanket policy.

https://andydote.co.uk/2023/05/18/expand-contract/


You should be reading academic computer science papers - Stack Overflow Blog

Tags: tech, science

Definitely this. It takes time of course, I don’t do it nearly enough… I never regretted it though.

https://stackoverflow.blog/2022/12/30/you-should-be-reading-academic-computer-science-papers/


What is Technical Debt? — Laura Tacho

Tags: tech, technical-debt, business

Interesting points in this article. The exact definition doesn’t matter much. What really matters is the common understanding within a team of what technical debt is. It’s also a good idea to be able to link it to actual money and business impacts.

https://lauratacho.com/blog/what-is-technical-debt


Choose Boring Technology

Tags: tech, architecture, decision-making, developer-experience

Definitely this. This is an interesting talk, most thing shouldn’t be shiny. It’s not about stagnating of course, but you should think more than twice before adding a new technology to your stack. Mastery is when you know everything that’s wrong with a piece of tech, before that keep in mind the amount of unknown unknowns and the cost of exploiting something new.

https://boringtechnology.club/


🤓 “Boring” is just one strategy 🥱

Tags: tech, architecture

A good counterpoint to the “choose boring tech” which I tend to agree with. Sometimes you need to look into unusual tech and it’s fine. Just have to do it rarely and responsibly. The context matters.

https://morepablo.com/2022/04/against-boring.html


On trust in software development

Tags: tech, agile, codereview, pairing, trust

This trend around critiquing code reviews on the argument of “trust” should be challenged indeed. This is just the wrong way to approach it.

https://blog.ploeh.dk/2023/03/20/on-trust-in-software-development/


Read Every Single Error | Pulumi Blog

Tags: tech, infrastructure, safety, craftsmanship, logging

Interesting take… Is it really practical? Until which size is it viable? What are we loosing by aggregating? Also makes me wonder about alert fatigue… It clearly raises extra questions.

https://www.pulumi.com/blog/reducing-our-error-rate/


The Programmer’s Paradox: Software Development Ethics

Tags: tech, ethics

Nice piece, not perfect, good food for thought still. We definitely need more ethics in our craft.

https://theprogrammersparadox.blogspot.com/2023/04/software-development-ethics.html


Evaluating Managers: 5 heuristics to measure managerial impact – CodeKraft

Tags: tech, management, improving

This nicely goes in depth on the five domains to look at to know where you stand as a manager. Also proposes action to increase the impact. Good food for thought.

https://abdulapopoola.com/2023/01/09/evaluating-managers-5-heuristics-to-measure-managerial-impact/



Bye for now!

Tuesday, 16 May 2023

Finally a sprint again! The 2019 the Plasma Sprint in Valencia was my first in person KDE event and I was hooked instantly. However something mysterious happened in the next years that and in person meet ups stopped happening. While Akademy 2022 happened in person again, a sprint has different atmosphere and I was awesome to see people that couldn’t make Akademy or for whom it was their first sprint. Other attendees have blogged about the sprint as well, check them out too. Either on the planet or over on discuss Carl created a collection of a bunch of them.

So what did I do? Aside from the usual talking, discussion, planing which the others already blogged about. (And of course the live bug investigations on fellow developers’ machines who always seem to attract the weirdest issues.) I am afraid I spent the rest of the time on boring backend stuff.

For Plasma 6 we want to make use of the layer-shell wayland protocol for positioning and stacking Plasma’s own panels, backgrounds and some other windows such as krunner. This protocol was developed by the awesome wlroots people and is currently proposed for standardization. In the past we used our own plasma-shell protocol and unfortunately not only Plasma is using it at the moment but it also spread to applications with more advanced use cases than just having a normal window. As mixing windows from both systems together will be harder to layout and in general a desire to move on from the plasma-shell protocol for a more streamlined experienced I ported yakuake to use layer shell via our own Layer Shell Qt library.

Still Wayland related but probably even less interesting, I started porting libtaskmanager away from KWayland. KWayland was/is a framework consisting of two libraries (client and server side) wrapping wayland code for more straightforward consumption of Qt programs. As you can imagine this is quite some amount of boring code to maintain and with other good solutions available we would like to stop doing so. The server part of the framework was already moved to KWin in the past and we embraced qtwaylandscanner there for generating code wrapping wayland. For the client side we are now moving in the same direction. KWayland included everything but most of it was not used because Qt handles all the normal interactions with the compositor and almost all the remaining protocol interfaces were used only once because there is only a single place in our stack that needs to communicate the additional information with KWin (for example Klipper or the taskmanager). So it makes sense to move the code to the places where it is used instead of having to maintain a framework with the usual stability guarantees.

But I did not only work towards eliminating a framework, I also created an entire new one. Sorry! Enter KColorScheme. To be fair it’s not entirely new but KColorScheme and friends moved to their own library. KColorScheme was a pain point in our dependency stack since it was very central but its location in the KConfigWidgets library meant that you had to depend on a bunch of unwanted stuff just to read some colors. So we decided at the sprint to split it out to a new library and I implemented that. Afterwards I adjusted some consumers which do not need to longer depend on KConfigWidgets together with Nicolas.

As you can see it was quite the productive sprint which was possible because of the awesome people at Tuxedo Computers who hosted us and the KDE e.V that enables people from all over the world to come together and build awesome things. Consider donating so that we can continue doing so. The last thing left to say, I will be at Akademy which happens soon. See you there! I am going to Akademy 2023 in Thessaloniki, Greece

Monday, 15 May 2023

As you probably have seen from other people’s blog posts there was the 2023 Plasma Sprint last week. It was generously hosted by TUXEDO Computers in their offices in Augsburg, Germany. Many thanks to TUXEDO for that!

Other people have already well summarized what happend there, so let’s have a look at what I have been doing:

Together with Kai Uwe, Volker, and Ismael I looked at notifications. This includes internal simplifications in KNotifications, API design questions, a proposed V2 for the notification portal API, and a new UI for per-event configuration in the notification settings module.

Together with Marco I looked into some API design topics around the Applet class in plasma-framework, and worked on a proposed new API for applet actions.

Given that Wayland was a huge topic at the sprint I continued the work of mine on enabling some accessibility options on Wayland. Sticky keys is not only what happens when you spill Spezi over your laptop, it is also an accessibility feature that allows people that cannot press multiple keys simultaneously to type key combinations like Control+C/Control+V. Basic support for this on Wayland is coming with Plasma 6. Not all of the options that are present on X11 work yet though. If you are a user of sticky keys please leave your feedback on https://bugs.kde.org/show_bug.cgi?id=444335 for which of these options should be prioritized.

Together with Natalie, KDE e.V.’s Hardware Integration Engineer, I discussed our touchpad configuration module and how to make it more robust and maintainable. We also discussed various topics around debugging and profiling KDE software.

Together with Xaver I looked into how Dolphin/KIO handles multi-GPU setups (so that apps preferring discrete GPUs will use them when launched via KIO). As it turns out there’s a few things to be improved there so we discussed approaches to do that.

With David I discussed some of my open changes to our global shortcuts infrastructure and continued working on improving that.

We also got a visit from two people from the city of Treuchtlingen, Germany. They have been using KDE software in their communal IT for over 20 years. We discussed their vision of using open source and open standards in government IT and some of their pain points with using KDE software for that.

Overall it was a very nice and productive week and it was great to meet so many fellow KDE hackers, some of them for the first time! Gatherings like this are only possible because of generous donations to KDE e.V. Please consider donating to make more such sprints possible.

Sunday, 14 May 2023

My Painting

Text

About Me - I am Groot.

I’m Srirupa Datta, about to finish my undergraduate Electrical Engineering degree at Jadavpur University, India, in June. This year, I got selected for Google Summer of Code and will be working on improving the Bundle Creator in Krita.

My Introduction to Krita…

It’s been more than a year since my last blogpost where I posted monthly updates on my progress on adding the Perspective Ellipse assistant tool in Krita during SoK’22. Being a painter who’s interested in software development, I’ve been interested in Krita ever since I started using it.

What it’s all about

The primary format to share resources in Krita is a Resource Bundle, which is a compressed file containing all the resources together. It also contains some other information like metadata and a manifest so Krita can check there’s no errors in the file.

Krita’s Bundle Creator allows one to create their own bundle from the resources of their choice. The project that I would be working on, aims to improve the user interface of the current Bundle Creator, and allow the ability to edit bundles (which is currently not supported in Krita).

The new Bundle Creator

The new Bundle Creator would look like an installation wizard with four pages which can be navigated using the Next and Back buttons, as well as buttons on the left side panel.

I think the primary objective behind designing the new Bundle Creator was to organize its workflow, that is, segregate sections devoted to a particular function or job. This is what led to the idea of using a wizard, instead of simple dialogs. Hence it would have four wizard pages:

  • Choose Resources
  • Choose Tags
  • Enter Bundle Details
  • Choose Save Location

Some of the cool features you can expect in the new Bundle Creator are a gridview like that of Resource Manager’s to view all the resources, filter resources by name or tag before selecting, and an option to change back to the default listview from gridview if one wishes to stick to the previous layout.

W1

Adding custom tags to selected resources is a feature that we wish to integrate, but it would require a redesign of the Choose Tags wizard page that has been shown below. Just to clarify, these are all mockups!

W2

Yet another important feature would be reloading last bundle data when opened/on startup - this is particularly useful when making a bundle for other people.

Apart from these, the new Bundle Creator would be resizable(Yaay!), and a separate Menu entry called Bundle Creator would be created. We plan to move Manage Resource Libraries , Manage Resources and Bundle Creator from Menu > Settings to Menu > Resources.

And lastly, I would be working on adding the feature of editing bundles - this however needs to be discussed more and would be dealt with post my mid term evaluations.

And of course, if you want to suggest some ideas or improvements, feel free to drop a comment on this post I created on Krita Artists Forum!

Saturday, 13 May 2023

I’ve been happily using Woodpecker CI to get CI for my repositories on Codeberg. Codeberg is a non-profit community-driven git repository hosting platform, so they can’t provide free CI to everyone.

Since I run lots of stuff on small arm boards (for example this website), I need my CI jobs to create arm executables. The easiest way to get that done is to just compile on arm devices, so I was happy to see that Hetzner is now offering arm nodes in their cloud offering.

To make that as cheap as possible, the CI should ideally create a VM before running its job, and remove it again afterwards. Unfortunately Woodpecker does not seem to support that out of the box at this point.

My solution to that was to build a docker proxy, that creates VMs using docker-machine, and then proxies the incoming requests to the remote VM. That works really well now, so maybe you will find it useful.

Setting that up is reasonably simple:

  • Install docker-machine. I recommend using the fork by GitLab
  • Install the backend for your cloud provider. For Hetzner I use this one
  • Grab a binary release of docker-proxy (if you need arm executables), or compile it yourself.
  • Create a systemd unit to start the service on boot in /etc/systemd/system/docker.proxy.service. This particular one just runs it on the woodpecker-agent user that you may already have if you use Woodpecker CI.
[Unit]
Description=Docker CI proxy
After=network.target

[Service]
User=woodpecker-agent
Group=nogroup
Restart=always
ExecStart=/usr/local/bin/docker-proxy

[Install]
WantedBy=multi-user.target
  • Fill in /etc/docker-proxy/config.toml This example works for Hetzner, but everything that has a docker-machine provider should work. You just need to supply the arguments for the correct backend.
[docker_machine]
driver="hetzner"
args=[
    "--hetzner-api-token=<token>",
    "--hetzner-server-type=cax11",
    "--hetzner-image-id=103907373",
]

[general]
timeout=300
port=8000
  • Finally, make woodpecker-agent use the new docker proxy, by setting DOCKER_HOST=http://localhost:8000 in its environment.

I hope this may be useful for you as well :)

Friday, 12 May 2023

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


Tags: copyright, law, music

The copyright system is utterly broken at that point. This kind of lawsuits don’t make any sense.

https://www.techdirt.com/2023/05/08/ed-sheeran-once-again-demonstrates-how-modern-copyright-is-destroying-rather-than-helping-musicians/


Thunderbird Is Thriving: Our 2022 Financial Report

Tags: tech, foss, mozilla, fundraising

Clearly inspiring… this project really went from dying to skyrocketing. I’d like to see more of those.

https://blog.thunderbird.net/2023/05/thunderbird-is-thriving-our-2022-financial-report/


Bluesky is a scam – fiatjaf

Tags: tech, social-media, protocols, vendor-lockin

This clearly doesn’t look as interesting as ActivityPub…

https://fiatjaf.com/ab1127fb.html


When “free forever” means “free for the next 4 months”

Tags: tech, tools, messaging, foss, vendor-lockin

Clearly Zulip uses the opportunity for a bit of self-promotion. Can’t blame them, at least they’re the rare ones not going for open core. Also this is a good explanation on why one shouldn’t trust the “free forever” claims for cloud hosting.

https://blog.zulip.com/2023/05/04/when-free-forever-is-4-months/


Will A.I. Become the New McKinsey? | The New Yorker

Tags: tech, ai, gpt, capitalism, ethics, criticism

Excellent opinion piece. Sure, “A.I.” is a tool, but who is wielding that tool currently? Whom needs is it designed to fulfill? This is currently very much of a problem. The comparison with McKinsey although surprising is an interesting thought.

Also I appreciate the clarification on the Luddites movement… they were not anti-technology.

https://www.newyorker.com/science/annals-of-artificial-intelligence/will-ai-become-the-new-mckinsey


DeepMind’s Epistemic Neural Networks Enable Large Language Model Fine-Tuning With 50% Less Data | Synced

Tags: tech, ai, machine-learning, neural-networks, gpt

Looks like a promising way to reduce the training cost of large language models.

https://syncedreview.com/2022/11/16/deepminds-epistemic-neural-networks-enable-large-language-model-fine-tuning-with-50-less-data/


Releasing 3B and 7B RedPajama-INCITE family of models including base, instruction-tuned & chat models — TOGETHER

Tags: tech, ai, neural-networks, gpt, foss

Truly open source models are pouring in. This is showing more transparency and I hope it will lead to better uses even though some of the concerns will stay true.

https://www.together.xyz/blog/redpajama-models-v1


Introducing MPT-7B: A New Standard for Open-Source, Commercially Usable LLMs

Tags: tech, ai, neural-networks, gpt, foss

And yet another set of open source models. This is really democratizing quickly.

https://www.mosaicml.com/blog/mpt-7b


Even Amazon can’t make sense of serverless or microservices

Tags: tech, infrastructure, microservices, architecture, complexity

Even the giants are slowly moving back from microservices in some places. DHH has a very cruel way to point it out, still that’s true. Let’s hope people realize the mistake it was in term of complexity.

https://world.hey.com/dhh/even-amazon-can-t-make-sense-of-serverless-or-microservices-59625580


Classification of the principal programming paradigms

Tags: tech, programming, language

Nice poster. It’s harder to classify programming languages than it sounds. This one is interesting.

https://www.info.ucl.ac.be/~pvr/paradigms.html


Chris James -HTMX is the Future

Tags: tech, web, htmx, frontend, backend

This is indeed looking more and more like a viable and worthwhile option for web applications.

https://quii.dev/HTMX_is_the_Future


Deciphering Glyph :: Never Run ‘python’ In Your Downloads Folder

Tags: tech, python, security

It points out the security risk but it’s mainly a good explanation on how Python loads modules.

https://blog.glyph.im/2020/08/never-run-python-in-your-downloads-folder.html


Understanding ActivityPub - Sebastian Jambor’s blog

Tags: tech, fediverse, protocols, http

Interesting article. This is a good introduction to the ActivityPub protocol. It also gives nice flies and pointers on how to dive deeper.

https://seb.jambor.dev/posts/understanding-activitypub/


Is sequential IO dead in the era of the NVMe drive? — Jack Vanlightly

Tags: tech, storage, performance

Interesting exploration on the performance of SSDs regarding write patterns. Turns out sequential IO is still a thing, just for a different reason than with good old HDDs.

https://jack-vanlightly.com/blog/2023/5/9/is-sequential-io-dead-in-the-era-of-the-nvme-drive


GitHub - ellie/atuin: 🐢 Magical shell history

Tags: tech, shell, command-line, tools

Looks like an interesting tool to try. History is an important part of the shell experience.

https://github.com/ellie/atuin


vmtest: Run your tests in virtual machines

Tags: tech, tests, virtualization, linux

Looks like a really neat tool for testing low level and kernel dependent details in a reproducible way.

https://dxuuu.xyz/vmtest.html


Key practice: Test Driven Development | by Jason Yip | May, 2023 | Medium

Tags: tech, tdd, tests

Neat, short and simple post highlighting the important traits of TDD.

https://jchyip.medium.com/key-practice-test-driven-development-d77bee69427c


Why engineers need to be bored. - by John McBride

Tags: tech, management, productivity, innovation

This is another way to approach the question of having slack in your schedule. This is necessary, and probably at scale in the organization (as implied by this article).

https://onengineering.substack.com/p/why-engineers-need-to-be-bored


You don’t need Scrum. You just need to do Kanban right.

Tags: tech, project-management, agile, scrum, kanban

A good reminder that there is life outside of Scrum… I especially like the framing of Scrum as training wheels. When you learned biking you outgrew the training wheels, didn’t you?

https://lucasfcosta.com/2022/10/02/scrum-versus-kanban.html


Appreciating Your Way to XP - by Kent Beck

Tags: tech, improving, management, xp

Old article, still an interesting approach to making changes and looking for growth opportunities. There is value in trying not to frame everything as problems to solve.

https://tidyfirst.substack.com/p/appreciating-your-way-to-xp


Be a thermostat, not a thermometer

Tags: management, team, communication

Interesting ideas in there. It’s not enough to pick up that something is off in a conversation. It’s better to influence things to defuse the tension. Clearly not that easy to do, will require quite some practice.

https://larahogan.me/blog/be-a-thermostat-not-a-thermometer/



Bye for now!

IT feels like a billion years before the last plasma sprint, which was in 2019 in Valencia, before the pandemic, but finally this year we are back on track, and was great to see again many old friends as well as seeing many new faces for which it was the first sprint.

We were gracefully hosted by Tuxedo Computers in Augsburgh, makers of very nice laptops that come with Linux and KDE Plasma, as well as being KDE patrons.

First of all, everybody got up to speed with a full git build of a Plasma 6 session, so that everybody could participate in development and discussions from the same level.

There were many discussions about Plasma 6, about what we want to do in Plasma and in Kirigami, how we want to change the look and defaults for the new major release. Most of the user-facing changes have been wonderfully described by Nate.

On my part, I worked on mainly 2 things, that were fairly not “glamorous” but quite important never the less (and mildly painful to do) : a refactor of the plasmoid loading code and splitting all the Svg themes code to a new framework with far less dependencies, ideally usable by any application.

Plasma API

I spent most of my hacking time at the sprint on a refactor of the plasmoid loading code, which won’t be really “seen” by the user, but will make the infrastructure much more robust and the API cleaner.

The person which must pay attention to it is the plasmoid author, which will need to adapt the plasmoid code in a few places.

Most notable is that, just like when you are writing a QML application you have to use the ApplicationWindow root QML Item, for a plasmoid you now have to use a PlasmoidItem root object, so something like

Item {
    Plasmoid.compactRepresentation: Label {text: Plasmoid.title}
    Plasmoid.fullRepresentation: Item {...}
}

becomes:

PlasmoidItem {
    compactRepresentation: Label {text: Plasmoid.title}
    fullRepresentation: Item {...}
}

A full porting guide is in progress.

KSvg

Using the Plasma Svg code to support stylesheet recoloring, on disk image cache to speed up loading, and the 9-patches FrameSvg is something the several applications would be interested to, and some actually are already doing, but since plasma-framework has a lot of dependencies, for some applications that is a blocker. All the svg code has now been broken out into a new framework called KSvg, which is still work in progress, but in the end will support all existing plasma themes with no change, and if an application wishes to use it, the svg sets will be loaded from the app own data folder (or anywhere else the application configures it to) instead of the share/plasma/desktoptheme folder, where plasmashell looks for them (so they can also use a complete different theme structure and don’t have to provide the same elements)

Tuesday, 9 May 2023

While at the 2023 Plasma Sprint at the Tuxedo Computers office in Augsburg, Germany, I created a patch to add ButtonSegment, SegmentedControl and SegmentSeparator to Qt Quick Controls 6.6: https://codereview.qt-project.org/c/qt/qtdeclarative/+/476564

The patch has not been merged yet and may change significantly.

ButtonSegment is a Button subclass with an edges property that can be used to specify which edges are exposed to the outside of the group. The base flags available are NoEdges (0), TopEdge (Qt::TopEdge), LeftEdge (Qt::LeftEdge), RightEdge (Qt::RightEdge) and BottomEdge (Qt::BottomEdge). Why the outside and not the inside? It doesn’t matter a whole lot, it’s just what I decided to do. My thoughts were "These are the edges where extra visuals will be." There are also flag combination values like AllEdges, TopLeftEdges, TopRightEdges, BottomLeftEdges and BottomRightEdges to make your lines of code shorter.

SegmentedControl is a Control subclass with flat and down properties. This control doesn’t actually do much. Its main purpose is for providing a way to define unified graphics for a segmented button group (e.g., macOS Big Sur has a background underneath all of the button segments). flat can be used to define flat and raised appearances. down can be used to define a unified pressed/down appearance (e.g., a shadow used by a unified raised background could disappear when any segment is pressed). down does not change in response to ButtonSegment::down changes by default. You must set that up yourself. There are ways to make this behavior more automatic, but I have not used them yet. I might make the behavior more automatic because otherwise it will be difficult to support down when button segments are created from delegate components.

SegmentSeparator is a Control subclass that has orientation, vertical and horizontal properties. It has the same API as ToolSeparator. Its purpose is to provide styling for separators between button segments.

Automatic Behavior VS Boilerplate Code

Unlike similar controls provided by Flutter (SegmentedButton) and AppKit (NSSegmentedControl), there is no built-in API for getting/setting the current selected button(s), index(es) or other value(s) from segments. This isn’t a big problem in QML because it is easy to add the additional behaviors or properties you need. You can even choose the ones that suit your use cases the best. Don’t forget that you have ButtonGroup, ActionGroup, Repeater, ListView, GridView and various ways to define models.

Some, maybe even many of you may have felt a bit disappointed after reading the paragraph above. You may have been thinking something along the lines of "Why doesn’t it just do what I want without having to write extra code?" It’s a good question. When people (including myself) try to reduce the amount of code they need to write by making controls do things automatically, they often cause more harm than good. If the problems were obvious and the temptation wasn’t so strong, then people (including myself) wouldn’t make those kinds of mistakes over and over. What often happens is that controls that were intended to be generally useful become more specialized for certain use cases and the people implementing the automatic behavior don’t realize it until they discover that a valid use case they weren’t thinking about has become more difficult or even impossible to support. There are examples of great automatic behavior out there and specialized components where a lack of flexibility is completely acceptable. My point is that people should be careful when implementing automatic behavior. I chose greater flexibility at the cost of requiring users to write more code.

Example Code

This creates three independently checkable segments in a row.

SegmentedControl {
    id: control

    ButtonGroup {
        buttons: control.contentItem.children
        exclusive: false
    }

    contentItem: Row {
        spacing: control.spacing

        ButtonSegment {
            edges: ButtonSegment.TopLeftEdges | ButtonSegment.BottomLeftEdges
            checkable: true
            text: qsTr("Segment 1")
        }

        SegmentSeparator {}

        ButtonSegment {
            edges: ButtonSegment.TopEdge | ButtonSegment.BottomEdge
            checkable: true
            text: qsTr("Segment 2")
        }

        SegmentSeparator {}

        ButtonSegment {
            edges: ButtonSegment.TopRightEdges | ButtonSegment.BottomRightEdges
            checkable: true
            text: qsTr("Segment 3")
        }
    }
}

Planned Supported Styles

Friday, 5 May 2023

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


The web’s most important decision - The History of the Web

Tags: tech, web, history, public-domain

Indeed, without deciding to put everything in the public domain, the face of the web would have been very different.

https://thehistoryoftheweb.com/postscript/the-webs-most-important-decision/


Let’s Make Sure Github Doesn’t Become the only Option - Edward Loveall

Tags: tech, git, github, vendor-locking, tools

Nice to see there are still people out there keeping in mind the “let’s not put all our eggs in the same basket”. This is especially important for systems with such vendor lock-in as GitHub. I’m a bit less convinced about replacing Git itself for now.

https://blog.edwardloveall.com/lets-make-sure-github-doesnt-become-the-only-option


FOSS I Love - Local game streaming with Sunshine and Moonlight

Tags: tech, gaming, linux, streaming

Looks like nice projects. After all these years I’m still amazed at what people manage to achieve in their spare time when they get together to solve a problem.

https://ahelwer.ca/post/2023-04-29-sunshine-moonlight/


The Programmer’s Paradox: Waterloo Style

Tags: tech, architecture, design, programming, object-oriented

Interesting approach. I did quite some of that but without really putting it together like this. It’s a nice way to explain it.

https://theprogrammersparadox.blogspot.com/2023/04/waterloo-style.html?m=1


Tufte CSS

Tags: tech, web, css, blog

I must resist to redesign my blog I guess… In any case, this is a very nice style for content.

https://edwardtufte.github.io/tufte-css/


cohost! - “I want to talk about WebGPU”

Tags: tech, web, graphics, 3d, webgpu

Nice overview of WebGPU. Also does a decent job laying out the history of graphics APIs. With WebGPU bound to be more widespread and available outside of the browsers things will get very interesting.

https://cohost.org/mcc/post/1406157-i-want-to-talk-about-webgpu


Understanding SAL | Microsoft Learn

Tags: tech, safety, c++, c

There are really many initiatives to make C and C++ safer lately. I wonder which one will see adoption and what will make its way to the standards.

https://learn.microsoft.com/en-us/cpp/code-quality/understanding-sal?view=msvc-170


The Cargo Cult of TCP_NODELAY: When to Use It – Somewhere Within Boredom

Tags: tech, tcp, networking

Very nice explanation about TCP_NODELAY and its implications.

https://withinboredom.info/blog/2023/01/03/the-cargo-cult-of-tcp_nodelay-when-to-use-it/


Goodbye to Flake8 and PyLint: faster linting with Ruff

Tags: tech, python, linting, quality, tools

Looks like a promising linting tool for Python. Feature packed and faster than most other options out there.

https://pythonspeed.com/articles/pylint-flake8-ruff/


Cloud exit pays off in performance too

Tags: tech, infrastructure, performance

Very interesting to see that move to owned hardware… turns out that not only the invoice is smaller in their case but the performances are much better as well.

https://world.hey.com/dhh/cloud-exit-pays-off-in-performance-too-4c53b697


Uptime Guarantees — A Pragmatic Perspective

Tags: tech, reliability, infrastructure, software, business, management

Nice overview of what it takes to increase your uptime. It can get expensive quickly. This is also a good reminder that it’s not only about software, it’s a lot about people and administrative constraints as well.

https://world.hey.com/itzy/uptime-guarantees-a-pragmatic-perspective-736d7ea4


Architecture decision record (ADR) examples

Tags: tech, architecture, decision-making

Nice resource to get started with this important and efficient practice.

https://github.com/joelparkerhenderson/architecture-decision-record


Rules of Thumb for Software Development Estimations

Tags: tech, project-management, estimates

It’s a bit a “yet another article” about estimates. Still there are a few good points in there, they’re harder to apply than it sounds though.

https://vadimkravcenko.com/shorts/project-estimates/


Tags: tech, business, management, product-management, remote-working, business

Clearly a bit US centric but interesting trends nonetheless. We might see some of that reaching Europe (for good and for bad) fairly quickly. At least regarding hybrid work, flexible offices and more asynchronous communication, I’ve seen it globally spread already.

https://www.infoq.com/articles/culture-trends-2023/



Bye for now!

Some time ago, before the world locked down, I pondered that KDE wasn’t very good at getting our apps to our users. We didn’t even have a website that listed our apps with download links. If you were an open source app developer using our tech (Qt and KDE Frameworks) would you come into KDE to build your app or just start a project on Github and do it yourself? KDE has community which means some people to help look over your work and maybe contribute and translate and some promo and branding mindshare and there’s teams of people in the distros who specialise in packaging our stuff. But successful projects like Krita and Digikam and indeed my own Plasma release scripts still have to do a lot on top of what KDE communally gives them.

So I launched apps.kde.org and made the All About the Apps goal which was selected in the hope of getting KDE to support taking our apps to the users more slickly. I didn’t manage to make much progress with the goal which I will readily take the blame for. After some fighting I managed to get our announcements linking to the app stores directly but I didn’t manage to get much else slicker.

What my dream still is would be for apps to have a button that…

  • Bumps the version number in the source
  • Makes the tar and uploads it to a secret place
  • Tells the Linux distros to package it
  • Packaging for Windows/Mac/Android/Snap/Flatpak/Appimage would be in the Git repo and our CI would now build them and upload to the relevant test sites
  • OpenQA style tests would be in the git repo and our CI would now test these packages
  • Another button would make the source and packages public in Microsoft Store/Appimagehub/SnapStore/Flathub/download.kde.org and somehow tells the Linux distros and send the announce to the Discuss group and start off a blog post for you

I just released KDE ISO Image Writer (another project I didn’t make much progress with for too many years) and had a chance to see how it all felt

There’s no nice buttons and while we have a tool to make the tar and I have a tool to add the release to the AppStream file, there’s nothing to bump version numbers in cmake or add releases to AppStream or make templates for pre-announcements and announcements.

How’s the packaging and app store situation?

Windows and Microsoft Store

I had to go out and buy a laptop for this, there’s virtual machines available for free which should work but I didn’t trust them with the hardware needed here and they’re time limited so I’m a bit wary of setting up Craft then having to do it again when the time runs out. Craft does a lot of the hard work building for Windows and binary-factory and elite Craft dev hvonreth is often around to give help.

Getting access to the Microsoft Store takes a sysadmin request and working out what to ask for then working out what to upload. I uploaded the wrong thing (a .appx file) when it should have been a .appxupload file and that seemed to break the MS Store from accepting it at all. After lots of twiddling and deleting and generally turning it off and on again I got it uploaded and a day later it was rejected with the claim that it crashed. While the app had installed and run fine for me locally using this .appxupload thing to install it locally did indeed cause it to crash. We diagnosed that to the elevated privileges needed and after some Googling it turns out the Microsoft Store doesn’t seem to support this at all. So my dream of having it available to install there has not worked out, but you can get the installer from download.kde.org and use that.

There’s still only 9 KDE apps on the MS Store at a quick “KDE” search which seems far too few.

AppImage

These have been around for decades and KDE has always had fans of this format (it used to be called Klik at one point e.g. test KOffice). SUSE devs were a big fan at one point. In recent years its gained auto-update, daemons to manage the system integration, build tools, support from top apps like Krita and Digikam and a centralised place to get it in AppimageHub (not to be confused with the other AppimageHub). And yet mass adoption seems as far off as ever.

There’s two ways I found to build it, with appimage-builder which was easy enough to pick up and make a packaging file which uses packages from Ubuntu and neon.

Or you can reuse Craft (used earlier for Windows) to build on Linux for the AppImage. This also allows binary-factory integration but I don’t seem to have got this working yet. It might also be worth exploring openSUSE’s OSB which might allow for other platforms.

I tried to upload it to AppimageHub but that broke the website which needed some back channel chats to fix. Once uploaded it appears shortly, no further bureaucracy needed (which is a bit scary). It doesn’t appear on the KDE Store which seems to be about themes and addons rather than apps. And I put it on download.kde.org.

It’s hard to know how popular AppImage is within KDE, neither of the AppImageHubs seem easy to search and many apps publish their own in various ways. There’s about a dozen (non-Maui) KDE apps with appimages on download.kde.org plus a dozen Maui apps which are developed within KDE and used by the Nitrux distro. I hear complains that AppImage doesn’t support Wayland which will limit them.

Flatpak and Flathub

This format has lots of good feels and mindshare because it integrates well with the existing open source communities.

The flatpak-manifest.json file can be added directly to the repo (which I’m very jealous of, when I suggested it for Snaps it was rejected and caused me to grump off the whole Goal) and that can be added to binary-factory but also to invent.kde.org CI. There’s an active team around to help out. That gets uploaded to a KDE testing repo where you can install and test.

But to get it out to the users there’s a separate process for Flathub the main host for Flatpak packages. That takes a another week or two of bureaucracy to get published (bureaucracy when publishing software for people to install is necessary and important). There’s also a stats website which suggests it has 300 installs.

Searching for KDE on Flathub gives over 130 results.

Snaps

This works the smoothest if I say so myself. Add the packaging to the snapcraft repo and it builds on the invent.kde.org CI which actually just sends it off to the launchpad builders and it builds for ARM and AMD64. Then you get one of the KDE Snapcraft team (Scarlett, me, Harald) to register it and voila it uploads to candidate channel for testing. It needs manually moved into the stable release channel which can either be done by our team or we can share admin rights. The bureaucracy comes when you need to ask for permissions such ISO Image Writer needing access to disks, that took a week to be accepted. The packages are build using KDE neon for Qt and KDE Frameworks etc and we’ve had troubles before when KDE neon moves onto new versions of Qt but the content Snap has stayed on older ones, but we’re working out when to save a spare snapshot of it. The build tool Snapcraft also has a kde-neon extension which just adds in common parts used by KDE snaps but sometimes that gets out of date too so we’ve had to work out ways around it.

The Snapcraft KDE page has about 140 apps. From the admin page I can see ISO Image Writer has 920 installs around the world (not bad for two days old). The store doesn’t seem great at picking up the AppStream meta data so screenshot and icons are often out of date which I’ve brought up with the devs a bunch of times. It’s centralised around a single Canonical owned store which open source/free software fans can find a bad smell but it is what users want.

Others

I’ve not looked at f-droid, Google Play, Chocolately, or Apple’s App Store. With the probable exception of Apple’s store we should embrace all of these.

I couldn’t find any tools to add release data (the files to download) to AppStream file which is what ends up on apps.kde.org, that feels like a low-hanging-fruit fix. Building pre-release tars which aren’t available publicly seems tricky to do, we have that for KDE neon but none of the app stores have it. Similarly tools to make templates for release announcements can’t be hard, I do that for Plasma already.

So lots of work still to do to make KDE have slick processes for getting our software out there to the users, it’s social and technical challenges and cultural shifts take a long time. Loads of people have put in lots of work to get us where we have today but still lots to do. If you’re up for a challenge and want to help I hope this blog shows the challenges and potential for fixing them rather than sounding too negative. Let’s keep KDE being All About the Apps!